{"version":3,"file":"ngx-core-components-feedback.mjs","sources":["../../../projects/ngx-core-components/feedback/badge/badge.component.ts","../../../projects/ngx-core-components/feedback/progress-bar/progress-bar.component.ts","../../../projects/ngx-core-components/feedback/skeleton/skeleton.component.ts","../../../projects/ngx-core-components/feedback/notification/notification.service.ts","../../../projects/ngx-core-components/feedback/alert/alert.component.ts","../../../projects/ngx-core-components/feedback/stat-card/stat-card.component.ts","../../../projects/ngx-core-components/feedback/avatar/avatar.component.ts","../../../projects/ngx-core-components/feedback/countdown/countdown.component.ts","../../../projects/ngx-core-components/feedback/empty-state/empty-state.component.ts","../../../projects/ngx-core-components/feedback/ngx-core-components-feedback.ts"],"sourcesContent":["import { Component, computed, input } from '@angular/core';\n\nexport type BadgeVariant = 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'light' | 'dark';\nexport type BadgePosition = 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left';\n\n@Component({\n  selector: 'ngx-badge',\n  standalone: true,\n  template: `\n    <span class=\"ngx-badge-host\" [class.positioned]=\"positioned()\">\n      <ng-content />\n      <span\n        [class]=\"badgeClass()\"\n        [attr.aria-label]=\"ariaLabel() || content()\"\n      >\n        @if (!dot()) { {{ content() }} }\n      </span>\n    </span>\n  `,\n  styles: [`\n    :host { display: inline-block; }\n    .ngx-badge-host { position: relative; display: inline-flex; }\n    .ngx-badge {\n      display: inline-flex; align-items: center; justify-content: center;\n      padding: 2px 7px; font-size: 11px; font-weight: 700;\n      border-radius: 999px; line-height: 1.4; white-space: nowrap; font-family: inherit;\n      min-width: 20px;\n    }\n    .badge-dot { width: 8px; height: 8px; padding: 0; min-width: 0; border-radius: 50%; }\n    .badge-positioned { position: absolute; }\n    .badge-pos-top-right { top: -6px; right: -6px; }\n    .badge-pos-top-left { top: -6px; left: -6px; }\n    .badge-pos-bottom-right { bottom: -6px; right: -6px; }\n    .badge-pos-bottom-left { bottom: -6px; left: -6px; }\n\n    .ngx-badge-primary { background: var(--ngx-badge-primary-bg, #1a73e8); color: #fff; }\n    .ngx-badge-secondary { background: var(--ngx-badge-secondary-bg, #6c757d); color: #fff; }\n    .ngx-badge-success { background: var(--ngx-badge-success-bg, #27ae60); color: #fff; }\n    .ngx-badge-danger { background: var(--ngx-badge-danger-bg, #e74c3c); color: #fff; }\n    .ngx-badge-warning { background: var(--ngx-badge-warning-bg, #f39c12); color: #fff; }\n    .ngx-badge-info { background: var(--ngx-badge-info-bg, #17a2b8); color: #fff; }\n    .ngx-badge-light { background: var(--ngx-badge-light-bg, #f8f9fa); color: #212529; }\n    .ngx-badge-dark { background: var(--ngx-badge-dark-bg, #343a40); color: #fff; }\n  `]\n})\nexport class BadgeComponent {\n  content = input<string | number>('');\n  variant = input<BadgeVariant>('primary');\n  dot = input(false);\n  positioned = input(false);\n  position = input<BadgePosition>('top-right');\n  ariaLabel = input('');\n\n  badgeClass = computed(() => {\n    const cls = ['ngx-badge', `ngx-badge-${this.variant()}`];\n    if (this.dot()) cls.push('badge-dot');\n    if (this.positioned()) {\n      cls.push('badge-positioned');\n      cls.push(`badge-pos-${this.position()}`);\n    }\n    return cls.join(' ');\n  });\n}\n","import { Component, computed, input } from '@angular/core';\n\nexport type ProgressVariant = 'primary' | 'success' | 'danger' | 'warning' | 'info';\n\n@Component({\n  selector: 'ngx-progress-bar',\n  standalone: true,\n  template: `\n    <div class=\"ngx-progress-bar\">\n      @if (label()) { <div class=\"progress-label\">{{ label() }}</div> }\n      <div class=\"progress-track\" [style.height.px]=\"height()\">\n        @if (indeterminate()) {\n          <div class=\"progress-fill-indeterminate\" [class]=\"'variant-' + variant()\"></div>\n        } @else {\n          <div\n            class=\"progress-fill\"\n            [class]=\"'variant-' + variant()\"\n            [style.width.%]=\"clampedPct()\"\n            role=\"progressbar\"\n            [attr.aria-valuenow]=\"value()\"\n            [attr.aria-valuemin]=\"min()\"\n            [attr.aria-valuemax]=\"max()\"\n          ></div>\n        }\n      </div>\n      @if (showValue()) {\n        <div class=\"progress-value\">{{ clampedPct().toFixed(0) }}%</div>\n      }\n    </div>\n  `,\n  styles: [`\n    :host { display: block; }\n    .ngx-progress-bar { width: 100%; }\n    .progress-label { font-size: 12px; font-weight: 600; color: var(--ngx-progress-label, var(--text-secondary, #475569)); margin-bottom: 4px; }\n    .progress-track { background: var(--ngx-progress-track, var(--border-color, #e2e8f0)); border-radius: 999px; overflow: hidden; position: relative; }\n    .progress-fill { \n      height: 100%; border-radius: 999px; transition: width 0.3s ease; \n      background-image: linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);\n      background-size: 1rem 1rem;\n      animation: progress-bar-stripes 1s linear infinite;\n    }\n    .progress-value { font-size: 11px; color: var(--text-secondary, #6c757d); margin-top: 3px; text-align: right; }\n\n    .progress-fill-indeterminate { height: 100%; border-radius: 999px; width: 40%; animation: indeterminate 1.5s infinite ease-in-out; position: absolute; }\n    @keyframes indeterminate { 0% { left: -40%; } 100% { left: 120%; } }\n    @keyframes progress-bar-stripes {\n      from { background-position: 1rem 0; }\n      to { background-position: 0 0; }\n    }\n\n    .variant-primary { background-color: var(--ngx-progress-primary, #4f46e5); }\n    .variant-success { background-color: var(--ngx-progress-success, #10b981); }\n    .variant-danger { background-color: var(--ngx-progress-danger, #ef4444); }\n    .variant-warning { background-color: var(--ngx-progress-warning, #f59e0b); }\n    .variant-info { background-color: var(--ngx-progress-info, #3b82f6); }\n  `]\n})\nexport class ProgressBarComponent {\n  value = input(0);\n  min = input(0);\n  max = input(100);\n  label = input('');\n  variant = input<ProgressVariant>('primary');\n  height = input(8);\n  showValue = input(false);\n  indeterminate = input(false);\n\n  clampedPct = computed(() =>\n    Math.max(0, Math.min(100, ((this.value() - this.min()) / Math.max(1, this.max() - this.min())) * 100))\n  );\n}\n","import { Component, input } from '@angular/core';\n\nexport type SkeletonShape = 'text' | 'circle' | 'rect' | 'card';\n\n@Component({\n  selector: 'ngx-skeleton',\n  standalone: true,\n  template: `\n    @if (shape() === 'card') {\n      <div class=\"skeleton-card\">\n        <div class=\"skeleton-rect\" [style.height.px]=\"160\"></div>\n        <div class=\"skeleton-card-body\">\n          <div class=\"skeleton-text\" [style.width]=\"'70%'\"></div>\n          <div class=\"skeleton-text\" [style.width]=\"'90%'\"></div>\n          <div class=\"skeleton-text\" [style.width]=\"'50%'\"></div>\n        </div>\n      </div>\n    } @else if (shape() === 'circle') {\n      <div class=\"skeleton-circle\" [style.width.px]=\"size()\" [style.height.px]=\"size()\"></div>\n    } @else if (shape() === 'text') {\n      <div class=\"skeleton-text-block\">\n        @for (line of lines(); track $index) {\n          <div class=\"skeleton-text\" [style.width]=\"line\"></div>\n        }\n      </div>\n    } @else {\n      <div class=\"skeleton-rect\" [style.width]=\"width()\" [style.height]=\"height()\"></div>\n    }\n  `,\n  styles: [`\n    :host { display: block; }\n    .skeleton-circle, .skeleton-rect, .skeleton-text { \n      background: var(--ngx-skeleton-bg, var(--border-color, #e2e8f0)); \n      border-radius: 4px; \n      animation: shimmer 1.5s infinite linear; \n      background-size: 200% 100%; \n      background-image: linear-gradient(90deg, \n        var(--ngx-skeleton-bg, var(--border-color, #e2e8f0)) 25%, \n        var(--ngx-skeleton-highlight, var(--bg-primary, #f1f5f9)) 50%, \n        var(--ngx-skeleton-bg, var(--border-color, #e2e8f0)) 75%\n      ); \n    }\n    .skeleton-circle { border-radius: 50%; }\n    .skeleton-text { height: 14px; margin-bottom: 8px; border-radius: 4px; }\n    .skeleton-text:last-child { margin-bottom: 0; }\n    .skeleton-rect { border-radius: 6px; }\n    .skeleton-card { border-radius: var(--radius-md, 8px); overflow: hidden; background: var(--bg-secondary) !important; border: 1px solid var(--border-color); }\n    .skeleton-card-body { padding: 12px; }\n    @keyframes shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }\n  `]\n})\nexport class SkeletonComponent {\n  shape = input<SkeletonShape>('rect');\n  size = input(40);\n  width = input('100%');\n  height = input('16px');\n  lines = input<string[]>(['100%', '80%', '60%']);\n}\n","import { Injectable, ApplicationRef, createComponent, EnvironmentInjector, Component, input, signal, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type NotificationType = 'success' | 'error' | 'info' | 'warning';\nexport type NotificationPosition = 'top-right' | 'top-left' | 'top-center' | 'bottom-right' | 'bottom-left' | 'bottom-center';\n\nexport interface NotificationOptions {\n  message: string;\n  type?: NotificationType;\n  title?: string;\n  duration?: number;\n  closable?: boolean;\n  position?: NotificationPosition;\n}\n\nexport interface NotificationItem extends Required<NotificationOptions> {\n  id: number;\n  visible: boolean;\n}\n\nlet nextId = 0;\n\n@Component({\n  selector: 'ngx-notification-container',\n  standalone: true,\n  imports: [CommonModule],\n  host: {\n    'role': 'log',\n    'aria-live': 'polite',\n    'aria-relevant': 'additions',\n  },\n  template: `\n    @for (n of items(); track n.id) {\n      <div class=\"notification\" [class]=\"'notif-' + n.type\" [class.visible]=\"n.visible\" [attr.role]=\"n.type === 'error' ? 'alert' : 'status'\">\n        <span class=\"notif-icon\">{{ icons[n.type] }}</span>\n        <div class=\"notif-body\">\n          @if (n.title) { <div class=\"notif-title\">{{ n.title }}</div> }\n          <div class=\"notif-msg\">{{ n.message }}</div>\n        </div>\n        @if (n.closable) {\n          <button class=\"notif-close\" (click)=\"remove(n.id)\" aria-label=\"Close\">×</button>\n        }\n      </div>\n    }\n  `,\n  styles: [`\n    :host { position: fixed; z-index: 10000; display: flex; flex-direction: column; gap: 10px; padding: 16px; pointer-events: none; }\n    .notification {\n      display: flex; align-items: flex-start; gap: 10px; min-width: 280px; max-width: 380px;\n      padding: 12px 14px; border-radius: var(--ngx-notif-radius, 8px); box-shadow: 0 4px 20px rgba(0,0,0,0.15);\n      pointer-events: all; font-family: inherit; font-size: 13px; opacity: 0; transform: translateX(20px);\n      transition: opacity 0.25s, transform 0.25s; border-left: 4px solid transparent;\n      background: var(--ngx-notif-bg, #fff); color: var(--ngx-notif-text, #212529);\n    }\n    .notification.visible { opacity: 1; transform: translateX(0); }\n    .notif-success { border-left-color: #27ae60; }\n    .notif-error { border-left-color: #e74c3c; }\n    .notif-info { border-left-color: #1a73e8; }\n    .notif-warning { border-left-color: #f39c12; }\n    .notif-icon { font-size: 18px; flex-shrink: 0; }\n    .notif-body { flex: 1; }\n    .notif-title { font-weight: 700; margin-bottom: 3px; font-size: 13px; }\n    .notif-msg { color: var(--ngx-color-text-secondary, #595f66); font-size: 12px; }\n    .notif-close { background: none; border: none; font-size: 18px; cursor: pointer; color: var(--ngx-color-text-disabled, #767b83); padding: 0; line-height: 1; margin-left: 4px; }\n    .notif-close:hover { color: #495057; }\n  `]\n})\nexport class NotificationContainerComponent implements OnInit {\n  items = signal<NotificationItem[]>([]);\n  icons: Record<NotificationType, string> = { success: '✅', error: '❌', info: 'ℹ️', warning: '⚠️' };\n\n  ngOnInit() {}\n\n  add(opts: NotificationOptions): number {\n    const id = ++nextId;\n    const item: NotificationItem = {\n      id, visible: false,\n      message: opts.message,\n      type: opts.type ?? 'info',\n      title: opts.title ?? '',\n      duration: opts.duration ?? 4000,\n      closable: opts.closable ?? true,\n      position: opts.position ?? 'top-right'\n    };\n    this.items.update(arr => [...arr, item]);\n    setTimeout(() => this.items.update(arr => arr.map(n => n.id === id ? { ...n, visible: true } : n)), 10);\n    if (item.duration > 0) { setTimeout(() => this.remove(id), item.duration); }\n    return id;\n  }\n\n  remove(id: number): void {\n    this.items.update(arr => arr.map(n => n.id === id ? { ...n, visible: false } : n));\n    setTimeout(() => this.items.update(arr => arr.filter(n => n.id !== id)), 300);\n  }\n}\n\nconst POSITIONS: Record<NotificationPosition, string> = {\n  'top-right': 'top:0;right:0',\n  'top-left': 'top:0;left:0',\n  'top-center': 'top:0;left:50%;transform:translateX(-50%)',\n  'bottom-right': 'bottom:0;right:0',\n  'bottom-left': 'bottom:0;left:0',\n  'bottom-center': 'bottom:0;left:50%;transform:translateX(-50%)'\n};\n\n@Injectable({ providedIn: 'root' })\nexport class NotificationService {\n  private containers = new Map<NotificationPosition, NotificationContainerComponent>();\n\n  constructor(private appRef: ApplicationRef, private injector: EnvironmentInjector) {}\n\n  private getContainer(pos: NotificationPosition): NotificationContainerComponent {\n    if (this.containers.has(pos)) return this.containers.get(pos)!;\n    const ref = createComponent(NotificationContainerComponent, { environmentInjector: this.injector });\n    const el: HTMLElement = ref.location.nativeElement;\n    el.setAttribute('style', POSITIONS[pos]);\n    document.body.appendChild(el);\n    this.appRef.attachView(ref.hostView);\n    this.containers.set(pos, ref.instance);\n    return ref.instance;\n  }\n\n  show(opts: NotificationOptions): number {\n    const pos = opts.position ?? 'top-right';\n    return this.getContainer(pos).add(opts);\n  }\n\n  success(message: string, title?: string, opts?: Partial<NotificationOptions>): number {\n    return this.show({ ...opts, message, title, type: 'success' });\n  }\n  error(message: string, title?: string, opts?: Partial<NotificationOptions>): number {\n    return this.show({ ...opts, message, title, type: 'error' });\n  }\n  info(message: string, title?: string, opts?: Partial<NotificationOptions>): number {\n    return this.show({ ...opts, message, title, type: 'info' });\n  }\n  warning(message: string, title?: string, opts?: Partial<NotificationOptions>): number {\n    return this.show({ ...opts, message, title, type: 'warning' });\n  }\n}\n","import { Component, input, signal, output, computed } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type AlertVariant = 'info' | 'success' | 'warning' | 'error';\n\n@Component({\n  selector: 'ngx-alert',\n  standalone: true,\n  imports: [CommonModule],\n  template: `\n    @if (visible()) {\n      <div\n        class=\"ngx-alert-banner\"\n        [class.dark]=\"theme() === 'dark'\"\n        [class]=\"variantClass()\"\n        [class.dismissing]=\"isDismissing()\"\n        role=\"alert\"\n      >\n        <!-- Icon Section -->\n        <div class=\"ngx-alert-icon\">\n          @switch (variant()) {\n            @case ('info') {\n              <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n                <circle cx=\"12\" cy=\"12\" r=\"10\"/>\n                <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"/>\n                <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"/>\n              </svg>\n            }\n            @case ('success') {\n              <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n                <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\"/>\n                <polyline points=\"22 4 12 14.01 9 11.01\"/>\n              </svg>\n            }\n            @case ('warning') {\n              <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n                <path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"/>\n                <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\"/>\n                <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"/>\n              </svg>\n            }\n            @case ('error') {\n              <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n                <circle cx=\"12\" cy=\"12\" r=\"10\"/>\n                <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\"/>\n                <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\"/>\n              </svg>\n            }\n          }\n        </div>\n\n        <!-- Content Section -->\n        <div class=\"ngx-alert-content\">\n          @if (title()) {\n            <h5 class=\"ngx-alert-title\">{{ title() }}</h5>\n          }\n          <div class=\"ngx-alert-message\">\n            <ng-content />\n            @if (message()) {\n              <span>{{ message() }}</span>\n            }\n          </div>\n        </div>\n\n        <!-- Actions Section -->\n        @if (actionLabel()) {\n          <div class=\"ngx-alert-actions\">\n            <button class=\"ngx-alert-action-btn\" (click)=\"onActionClick($event)\">\n              {{ actionLabel() }}\n            </button>\n          </div>\n        }\n\n        <!-- Close button Section -->\n        @if (dismissible()) {\n          <button class=\"ngx-alert-close-btn\" (click)=\"dismiss()\" aria-label=\"Close alert\">\n            <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n              <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/>\n              <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/>\n            </svg>\n          </button>\n        }\n      </div>\n    }\n  `,\n  styles: [`\n    :host {\n      display: block;\n      width: 100%;\n    }\n\n    .ngx-alert-banner {\n      display: flex;\n      align-items: flex-start;\n      gap: 12px;\n      padding: 14px 16px;\n      border-radius: var(--radius-md, 8px);\n      border-width: 1px;\n      border-style: solid;\n      font-family: var(--ngx-font-family, sans-serif);\n      font-size: 13px;\n      line-height: 1.5;\n      transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n      box-shadow: var(--shadow-sm);\n      animation: alert-fade-in 0.25s ease-out;\n      position: relative;\n    }\n\n    @keyframes alert-fade-in {\n      from { opacity: 0; transform: translateY(-4px); }\n      to { opacity: 1; transform: translateY(0); }\n    }\n\n    .ngx-alert-banner.dismissing {\n      opacity: 0;\n      transform: translateY(-8px);\n      max-height: 0;\n      padding-top: 0;\n      padding-bottom: 0;\n      margin-top: 0;\n      margin-bottom: 0;\n      border-width: 0;\n      overflow: hidden;\n    }\n\n    .ngx-alert-icon {\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      flex-shrink: 0;\n      width: 20px;\n      height: 20px;\n      margin-top: 1px;\n    }\n\n    .ngx-alert-icon svg {\n      width: 100%;\n      height: 100%;\n    }\n\n    .ngx-alert-content {\n      flex: 1;\n      display: flex;\n      flex-direction: column;\n      gap: 2px;\n    }\n\n    .ngx-alert-title {\n      margin: 0;\n      font-size: 14px;\n      font-weight: 700;\n    }\n\n    .ngx-alert-message {\n      color: currentColor;\n      opacity: 0.9;\n    }\n\n    .ngx-alert-actions {\n      display: flex;\n      align-items: center;\n      flex-shrink: 0;\n      margin-left: 8px;\n    }\n\n    .ngx-alert-action-btn {\n      background: transparent;\n      border: 1px solid currentColor;\n      border-radius: 4px;\n      padding: 3px 10px;\n      font-size: 11px;\n      font-weight: 700;\n      cursor: pointer;\n      color: currentColor;\n      transition: all 0.15s;\n    }\n\n    .ngx-alert-action-btn:hover {\n      background: rgba(0, 0, 0, 0.05);\n    }\n\n    .ngx-alert-close-btn {\n      background: transparent;\n      border: none;\n      color: currentColor;\n      opacity: 0.6;\n      cursor: pointer;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      padding: 2px;\n      border-radius: 4px;\n      width: 20px;\n      height: 20px;\n      flex-shrink: 0;\n      transition: all 0.15s;\n    }\n\n    .ngx-alert-close-btn:hover {\n      opacity: 1;\n      background: rgba(0, 0, 0, 0.04);\n    }\n\n    .ngx-alert-close-btn svg {\n      width: 14px;\n      height: 14px;\n    }\n\n    /* Light Theme Variant Coloring using Tailored Harmonious HSL */\n    .ngx-alert-info {\n      background-color: var(--ngx-alert-info-bg, hsl(207, 95%, 97%));\n      border-color: var(--ngx-alert-info-border, hsl(207, 90%, 88%));\n      color: var(--ngx-alert-info-text, hsl(207, 90%, 30%));\n    }\n    .ngx-alert-success {\n      background-color: var(--ngx-alert-success-bg, hsl(142, 70%, 97%));\n      border-color: var(--ngx-alert-success-border, hsl(142, 60%, 88%));\n      color: var(--ngx-alert-success-text, hsl(142, 60%, 25%));\n    }\n    .ngx-alert-warning {\n      background-color: var(--ngx-alert-warning-bg, hsl(38, 90%, 97%));\n      border-color: var(--ngx-alert-warning-border, hsl(38, 80%, 88%));\n      color: var(--ngx-alert-warning-text, hsl(38, 80%, 28%));\n    }\n    .ngx-alert-error {\n      background-color: var(--ngx-alert-error-bg, hsl(0, 90%, 97%));\n      border-color: var(--ngx-alert-error-border, hsl(0, 80%, 88%));\n      color: var(--ngx-alert-error-text, hsl(0, 80%, 35%));\n    }\n\n    /* Dark Theme Styles */\n    .ngx-alert-banner.dark {\n      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);\n    }\n    \n    .ngx-alert-banner.dark.ngx-alert-info {\n      background-color: var(--ngx-alert-info-dark-bg, hsl(207, 80%, 8%));\n      border-color: var(--ngx-alert-info-dark-border, hsl(207, 70%, 18%));\n      color: var(--ngx-alert-info-dark-text, hsl(207, 90%, 75%));\n    }\n    .ngx-alert-banner.dark.ngx-alert-success {\n      background-color: var(--ngx-alert-success-dark-bg, hsl(142, 60%, 7%));\n      border-color: var(--ngx-alert-success-dark-border, hsl(142, 50%, 15%));\n      color: var(--ngx-alert-success-dark-text, hsl(142, 70%, 70%));\n    }\n    .ngx-alert-banner.dark.ngx-alert-warning {\n      background-color: var(--ngx-alert-warning-dark-bg, hsl(38, 70%, 7%));\n      border-color: var(--ngx-alert-warning-dark-border, hsl(38, 60%, 15%));\n      color: var(--ngx-alert-warning-dark-text, hsl(38, 80%, 70%));\n    }\n    .ngx-alert-banner.dark.ngx-alert-error {\n      background-color: var(--ngx-alert-error-dark-bg, hsl(0, 70%, 7%));\n      border-color: var(--ngx-alert-error-dark-border, hsl(0, 60%, 16%));\n      color: var(--ngx-alert-error-dark-text, hsl(0, 80%, 75%));\n    }\n\n    /* Allow custom button hover states on dark variants */\n    .ngx-alert-banner.dark .ngx-alert-action-btn:hover {\n      background: rgba(255, 255, 255, 0.08);\n    }\n    .ngx-alert-banner.dark .ngx-alert-close-btn:hover {\n      background: rgba(255, 255, 255, 0.05);\n    }\n  `]\n})\nexport class AlertComponent {\n  variant = input<AlertVariant>('info');\n  title = input<string>('');\n  message = input<string>('');\n  dismissible = input<boolean>(true);\n  actionLabel = input<string>('');\n  theme = input<'light' | 'dark'>('light');\n\n  // Outputs\n  dismissed = output<void>();\n  actionClick = output<void>();\n\n  // State\n  visible = signal<boolean>(true);\n  isDismissing = signal<boolean>(false);\n\n  variantClass = computed(() => `ngx-alert-${this.variant()}`);\n\n  dismiss(): void {\n    this.isDismissing.set(true);\n    // Wait for the exit animation to complete (250ms) before removing from DOM\n    setTimeout(() => {\n      this.visible.set(false);\n      this.dismissed.emit();\n    }, 250);\n  }\n\n  onActionClick(event: Event): void {\n    event.stopPropagation();\n    this.actionClick.emit();\n  }\n}\n","import {\n  Component,\n  ChangeDetectionStrategy,\n  input,\n  computed,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type StatCardVariant = 'default' | 'success' | 'danger' | 'warning' | 'info';\n\n@Component({\n  selector: 'ngx-stat-card',\n  standalone: true,\n  imports: [CommonModule],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <div\n      class=\"ngx-stat-card\"\n      [class.dark]=\"theme() === 'dark'\"\n      [class.loading]=\"loading()\"\n      [class]=\"variantClass()\"\n    >\n      <!-- Loading skeleton -->\n      @if (loading()) {\n        <div class=\"ngx-stat-card__skeleton\">\n          <div class=\"skeleton-row skeleton-label\"></div>\n          <div class=\"skeleton-row skeleton-value\"></div>\n          <div class=\"skeleton-row skeleton-subtitle\"></div>\n        </div>\n      } @else {\n        <!-- Icon -->\n        @if (icon()) {\n          <div class=\"ngx-stat-card__icon\">{{ icon() }}</div>\n        }\n\n        <!-- Label -->\n        <div class=\"ngx-stat-card__label\">{{ label() }}</div>\n\n        <!-- Value -->\n        <div class=\"ngx-stat-card__value\">{{ value() }}</div>\n\n        <!-- Trend + Subtitle row -->\n        <div class=\"ngx-stat-card__footer\">\n          @if (trend() !== 'neutral' || trendValue()) {\n            <span class=\"ngx-stat-card__trend\" [class]=\"trendClass()\">\n              {{ trendArrow() }}\n              @if (trendValue()) {\n                <span class=\"ngx-stat-card__trend-value\">{{ trendValue() }}</span>\n              }\n            </span>\n          }\n          @if (subtitle()) {\n            <span class=\"ngx-stat-card__subtitle\">{{ subtitle() }}</span>\n          }\n        </div>\n      }\n    </div>\n  `,\n  styles: [`\n    :host {\n      display: block;\n    }\n\n    /* ── Base card ── */\n    .ngx-stat-card {\n      position: relative;\n      display: flex;\n      flex-direction: column;\n      gap: 6px;\n      padding: 22px 24px 18px;\n      border-radius: 16px;\n      font-family: var(--ngx-font-family, system-ui, sans-serif);\n      background: var(--ngx-stat-card-bg, rgba(255, 255, 255, 0.72));\n      backdrop-filter: blur(12px);\n      -webkit-backdrop-filter: blur(12px);\n      border: 1.5px solid var(--ngx-stat-card-border, rgba(255, 255, 255, 0.55));\n      box-shadow:\n        0 4px 24px rgba(0, 0, 0, 0.07),\n        0 1.5px 4px rgba(0, 0, 0, 0.04),\n        inset 0 1px 0 rgba(255, 255, 255, 0.8);\n      transition:\n        transform 0.22s cubic-bezier(0.34, 1.56, 0.64, 1),\n        box-shadow 0.22s ease,\n        border-color 0.2s ease;\n      cursor: default;\n    }\n\n    .ngx-stat-card:hover:not(.loading) {\n      transform: translateY(-3px) scale(1.005);\n      box-shadow:\n        0 12px 36px rgba(0, 0, 0, 0.1),\n        0 4px 8px rgba(0, 0, 0, 0.06),\n        inset 0 1px 0 rgba(255, 255, 255, 0.85);\n    }\n\n    /* ── Dark mode ── */\n    .ngx-stat-card.dark {\n      background: var(--ngx-stat-card-dark-bg, rgba(30, 32, 48, 0.85));\n      border-color: var(--ngx-stat-card-dark-border, rgba(255, 255, 255, 0.08));\n      box-shadow:\n        0 4px 24px rgba(0, 0, 0, 0.35),\n        0 1.5px 4px rgba(0, 0, 0, 0.25),\n        inset 0 1px 0 rgba(255, 255, 255, 0.06);\n    }\n    .ngx-stat-card.dark:hover:not(.loading) {\n      box-shadow:\n        0 12px 36px rgba(0, 0, 0, 0.5),\n        0 4px 8px rgba(0, 0, 0, 0.3),\n        inset 0 1px 0 rgba(255, 255, 255, 0.07);\n    }\n\n    /* ── Variant accent strips (top border gradient) ── */\n    .ngx-stat-card::before {\n      content: '';\n      position: absolute;\n      inset: 0;\n      border-radius: 16px;\n      padding: 1.5px;\n      background: var(--ngx-stat-card-gradient, linear-gradient(135deg, rgba(200,200,200,0.3) 0%, transparent 60%));\n      -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);\n      -webkit-mask-composite: xor;\n      mask-composite: exclude;\n      pointer-events: none;\n    }\n\n    .ngx-stat-card-success::before {\n      background: linear-gradient(135deg, hsl(142, 70%, 65%) 0%, transparent 55%);\n    }\n    .ngx-stat-card-danger::before {\n      background: linear-gradient(135deg, hsl(0, 75%, 65%) 0%, transparent 55%);\n    }\n    .ngx-stat-card-warning::before {\n      background: linear-gradient(135deg, hsl(38, 90%, 62%) 0%, transparent 55%);\n    }\n    .ngx-stat-card-info::before {\n      background: linear-gradient(135deg, hsl(207, 90%, 65%) 0%, transparent 55%);\n    }\n    .ngx-stat-card-default::before {\n      background: linear-gradient(135deg, hsl(250, 60%, 72%) 0%, transparent 55%);\n    }\n\n    /* ── Icon ── */\n    .ngx-stat-card__icon {\n      font-size: 28px;\n      line-height: 1;\n      margin-bottom: 2px;\n      user-select: none;\n    }\n\n    /* ── Label ── */\n    .ngx-stat-card__label {\n      font-size: 12px;\n      font-weight: 600;\n      text-transform: uppercase;\n      letter-spacing: 0.06em;\n      color: var(--ngx-stat-label-color, hsl(220, 15%, 55%));\n    }\n    .dark .ngx-stat-card__label {\n      color: var(--ngx-stat-label-dark-color, hsl(220, 15%, 60%));\n    }\n\n    /* ── Value ── */\n    .ngx-stat-card__value {\n      font-size: 36px;\n      font-weight: 800;\n      line-height: 1.1;\n      letter-spacing: -0.02em;\n      color: var(--ngx-stat-value-color, hsl(220, 25%, 14%));\n      white-space: nowrap;\n      overflow: hidden;\n      text-overflow: ellipsis;\n    }\n    .dark .ngx-stat-card__value {\n      color: var(--ngx-stat-value-dark-color, hsl(220, 20%, 94%));\n    }\n\n    /* ── Footer ── */\n    .ngx-stat-card__footer {\n      display: flex;\n      align-items: center;\n      gap: 8px;\n      margin-top: 2px;\n      flex-wrap: wrap;\n    }\n\n    /* ── Trend ── */\n    .ngx-stat-card__trend {\n      display: inline-flex;\n      align-items: center;\n      gap: 3px;\n      font-size: 13px;\n      font-weight: 700;\n      border-radius: 6px;\n      padding: 1px 7px;\n    }\n    .ngx-stat-card__trend-value {\n      font-size: 12px;\n    }\n    .trend-up {\n      color: hsl(142, 60%, 30%);\n      background: hsl(142, 65%, 95%);\n    }\n    .trend-down {\n      color: hsl(0, 70%, 38%);\n      background: hsl(0, 70%, 96%);\n    }\n    .trend-neutral {\n      color: hsl(220, 10%, 48%);\n      background: hsl(220, 10%, 94%);\n    }\n    /* Dark trend badges */\n    .dark .trend-up {\n      color: hsl(142, 70%, 72%);\n      background: hsl(142, 50%, 10%);\n    }\n    .dark .trend-down {\n      color: hsl(0, 75%, 72%);\n      background: hsl(0, 55%, 10%);\n    }\n    .dark .trend-neutral {\n      color: hsl(220, 12%, 68%);\n      background: hsl(220, 12%, 16%);\n    }\n\n    /* ── Subtitle ── */\n    .ngx-stat-card__subtitle {\n      font-size: 12px;\n      color: var(--ngx-stat-subtitle-color, hsl(220, 12%, 55%));\n    }\n    .dark .ngx-stat-card__subtitle {\n      color: var(--ngx-stat-subtitle-dark-color, hsl(220, 12%, 58%));\n    }\n\n    /* ── Skeleton loading ── */\n    .ngx-stat-card__skeleton {\n      display: flex;\n      flex-direction: column;\n      gap: 10px;\n      padding: 4px 0;\n    }\n\n    .skeleton-row {\n      border-radius: 6px;\n      background: linear-gradient(\n        90deg,\n        rgba(150, 150, 150, 0.12) 25%,\n        rgba(150, 150, 150, 0.22) 50%,\n        rgba(150, 150, 150, 0.12) 75%\n      );\n      background-size: 200% 100%;\n      animation: skeleton-shimmer 1.4s ease-in-out infinite;\n    }\n    .dark .skeleton-row {\n      background: linear-gradient(\n        90deg,\n        rgba(255, 255, 255, 0.04) 25%,\n        rgba(255, 255, 255, 0.10) 50%,\n        rgba(255, 255, 255, 0.04) 75%\n      );\n      background-size: 200% 100%;\n    }\n\n    .skeleton-label  { height: 12px; width: 45%; }\n    .skeleton-value  { height: 36px; width: 65%; }\n    .skeleton-subtitle { height: 12px; width: 55%; }\n\n    @keyframes skeleton-shimmer {\n      0%   { background-position: 200% 0; }\n      100% { background-position: -200% 0; }\n    }\n  `],\n})\nexport class StatCardComponent {\n  label       = input<string>('');\n  value       = input<string | number>('');\n  subtitle    = input<string>('');\n  trend       = input<'up' | 'down' | 'neutral'>('neutral');\n  trendValue  = input<string>('');\n  icon        = input<string>('');\n  variant     = input<StatCardVariant>('default');\n  theme       = input<'light' | 'dark'>('light');\n  loading     = input<boolean>(false);\n\n  variantClass = computed(() => `ngx-stat-card-${this.variant()}`);\n\n  trendClass = computed(() => `trend-${this.trend()}`);\n\n  trendArrow = computed(() => {\n    switch (this.trend()) {\n      case 'up':   return '▲';\n      case 'down': return '▼';\n      default:     return '—';\n    }\n  });\n}\n","import {\n  Component,\n  ChangeDetectionStrategy,\n  input,\n  output,\n  signal,\n  computed,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\nexport type AvatarShape = 'circle' | 'square' | 'rounded';\nexport type AvatarStatus = 'online' | 'offline' | 'busy' | 'away' | 'none';\n\nexport interface AvatarItem {\n  id?: string | number;\n  name?: string;\n  src?: string;\n  color?: string;\n}\n\n/** Generates a deterministic hue from a display name */\nfunction nameToHue(name: string): number {\n  let hash = 0;\n  for (const ch of name) {\n    hash = (hash << 5) - hash + ch.charCodeAt(0);\n    hash |= 0;\n  }\n  return Math.abs(hash) % 360;\n}\n\nfunction initials(name: string): string {\n  return name\n    .split(/\\s+/)\n    .slice(0, 2)\n    .map((w) => w[0]?.toUpperCase() ?? '')\n    .join('');\n}\n\n/** Single avatar */\n@Component({\n  selector: 'ngx-avatar',\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [CommonModule],\n  template: `\n    <div\n      class=\"ngx-avatar\"\n      [class]=\"'size-' + size() + ' shape-' + shape()\"\n      [attr.title]=\"name() || null\"\n    >\n      @if (src()) {\n        <img\n          class=\"avatar-img\"\n          [src]=\"src()\"\n          [alt]=\"name() || 'avatar'\"\n          (error)=\"imgError.set(true)\"\n        />\n      }\n\n      @if (!src() || imgError()) {\n        <span class=\"avatar-initials\" [style.background]=\"bgColor()\">\n          {{ displayInitials() }}\n        </span>\n      }\n\n      @if (status() !== 'none') {\n        <span class=\"avatar-status\" [class]=\"'status-' + status()\"></span>\n      }\n\n      @if (badge()) {\n        <span class=\"avatar-badge\">{{ badge() }}</span>\n      }\n    </div>\n  `,\n  styles: [`\n    :host { display: inline-block; line-height: 0; }\n\n    .ngx-avatar {\n      position: relative;\n      display: inline-flex;\n      align-items: center;\n      justify-content: center;\n      overflow: visible;\n      font-family: inherit;\n      flex-shrink: 0;\n    }\n\n    /* --- sizes --- */\n    .size-xs  { width: 24px;  height: 24px;  font-size: 9px; }\n    .size-sm  { width: 32px;  height: 32px;  font-size: 11px; }\n    .size-md  { width: 40px;  height: 40px;  font-size: 13px; }\n    .size-lg  { width: 52px;  height: 52px;  font-size: 16px; }\n    .size-xl  { width: 68px;  height: 68px;  font-size: 20px; }\n\n    /* --- shapes --- */\n    .shape-circle .avatar-img,\n    .shape-circle .avatar-initials { border-radius: 50%; }\n    .shape-rounded .avatar-img,\n    .shape-rounded .avatar-initials { border-radius: 10px; }\n    .shape-square .avatar-img,\n    .shape-square .avatar-initials { border-radius: 4px; }\n\n    .avatar-img {\n      width: 100%;\n      height: 100%;\n      object-fit: cover;\n      display: block;\n      border: 2px solid var(--bg-primary, #fff);\n      box-shadow: 0 1px 3px rgba(0,0,0,.12);\n    }\n\n    .avatar-initials {\n      width: 100%;\n      height: 100%;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      font-weight: 700;\n      color: #fff;\n      border: 2px solid var(--bg-primary, #fff);\n      box-shadow: 0 1px 3px rgba(0,0,0,.12);\n      letter-spacing: 0.03em;\n    }\n\n    /* status indicator */\n    .avatar-status {\n      position: absolute;\n      bottom: 1px;\n      right: 1px;\n      width: 28%;\n      height: 28%;\n      min-width: 8px;\n      min-height: 8px;\n      border-radius: 50%;\n      border: 2px solid var(--bg-primary, #fff);\n    }\n    .status-online  { background: #22c55e; }\n    .status-offline { background: #94a3b8; }\n    .status-busy    { background: #ef4444; }\n    .status-away    { background: #f59e0b; }\n\n    /* notification badge */\n    .avatar-badge {\n      position: absolute;\n      top: -4px;\n      right: -4px;\n      background: var(--primary-color, #4f46e5);\n      color: #fff;\n      font-size: 9px;\n      font-weight: 800;\n      padding: 1px 4px;\n      border-radius: 999px;\n      border: 2px solid var(--bg-primary, #fff);\n      line-height: 1.4;\n    }\n  `]\n})\nexport class AvatarComponent {\n  name   = input<string>('');\n  src    = input<string>('');\n  size   = input<AvatarSize>('md');\n  shape  = input<AvatarShape>('circle');\n  status = input<AvatarStatus>('none');\n  badge  = input<string | number | null>(null);\n  color  = input<string>('');\n\n  imgError = signal(false);\n\n  displayInitials = computed(() => initials(this.name() || '?'));\n\n  bgColor = computed(() => {\n    if (this.color()) return this.color();\n    const hue = nameToHue(this.name() || 'U');\n    return `hsl(${hue}, 60%, 45%)`;\n  });\n}\n\n/** Avatar group with overlap + overflow count */\n@Component({\n  selector: 'ngx-avatar-group',\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [CommonModule, AvatarComponent],\n  template: `\n    <div class=\"ngx-avatar-group\" [style.gap]=\"'-' + overlapPx() + 'px'\">\n      @for (av of visibleAvatars(); track av.id ?? $index) {\n        <ngx-avatar\n          [name]=\"av.name || ''\"\n          [src]=\"av.src || ''\"\n          [size]=\"size()\"\n          [shape]=\"shape()\"\n          [color]=\"av.color || ''\"\n        ></ngx-avatar>\n      }\n      @if (overflowCount() > 0) {\n        <div\n          class=\"overflow-bubble\"\n          [class]=\"'size-' + size() + ' shape-' + shape()\"\n          [attr.title]=\"'+' + overflowCount() + ' more'\"\n        >\n          +{{ overflowCount() }}\n        </div>\n      }\n    </div>\n  `,\n  styles: [`\n    :host { display: inline-block; }\n\n    .ngx-avatar-group {\n      display: flex;\n      flex-direction: row;\n    }\n\n    .ngx-avatar-group ngx-avatar {\n      margin-left: -10px;\n    }\n    .ngx-avatar-group ngx-avatar:first-child {\n      margin-left: 0;\n    }\n\n    .overflow-bubble {\n      display: inline-flex;\n      align-items: center;\n      justify-content: center;\n      background: var(--bg-secondary, #e2e8f0);\n      color: var(--text-secondary, #64748b);\n      font-weight: 700;\n      font-size: 11px;\n      border: 2px solid var(--bg-primary, #fff);\n      box-shadow: 0 1px 3px rgba(0,0,0,.12);\n      flex-shrink: 0;\n      margin-left: -10px;\n    }\n\n    .size-xs  { width: 24px;  height: 24px;  font-size: 8px; }\n    .size-sm  { width: 32px;  height: 32px;  font-size: 9px; }\n    .size-md  { width: 40px;  height: 40px;  font-size: 11px; }\n    .size-lg  { width: 52px;  height: 52px;  font-size: 13px; }\n    .size-xl  { width: 68px;  height: 68px;  font-size: 16px; }\n\n    .shape-circle  { border-radius: 50%; }\n    .shape-rounded { border-radius: 10px; }\n    .shape-square  { border-radius: 4px; }\n  `]\n})\nexport class AvatarGroupComponent {\n  avatars  = input<AvatarItem[]>([]);\n  maxShow  = input<number>(5);\n  size     = input<AvatarSize>('md');\n  shape    = input<AvatarShape>('circle');\n\n  overlapPx = computed(() => {\n    const map: Record<AvatarSize, number> = { xs: 8, sm: 10, md: 12, lg: 14, xl: 18 };\n    return map[this.size()];\n  });\n\n  visibleAvatars = computed(() => this.avatars().slice(0, this.maxShow()));\n  overflowCount  = computed(() => Math.max(0, this.avatars().length - this.maxShow()));\n}\n","import {\n  Component,\n  ChangeDetectionStrategy,\n  input,\n  output,\n  signal,\n  computed,\n  OnDestroy,\n  effect,\n  untracked,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type CountdownVariant = 'default' | 'success' | 'danger' | 'warning' | 'info';\n\n@Component({\n  selector: 'ngx-countdown',\n  standalone: true,\n  imports: [CommonModule],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <div\n      class=\"ngx-countdown\"\n      [class.dark]=\"theme() === 'dark'\"\n      [class]=\"variantClass()\"\n      [attr.id]=\"id()\"\n    >\n      @if (showRing()) {\n        <div class=\"ngx-countdown__ring-container\">\n          <svg class=\"ngx-countdown__svg\" viewBox=\"0 0 120 120\">\n            <!-- Background circle -->\n            <circle\n              class=\"ngx-countdown__circle-bg\"\n              cx=\"60\"\n              cy=\"60\"\n              r=\"52\"\n              stroke-width=\"6\"\n            />\n            <!-- Progress circle -->\n            <circle\n              class=\"ngx-countdown__circle-progress\"\n              cx=\"60\"\n              cy=\"60\"\n              r=\"52\"\n              stroke-width=\"6\"\n              [style.stroke]=\"ringColor() || 'var(--primary-color)'\"\n              [style.strokeDashoffset]=\"strokeDashoffset()\"\n              stroke-linecap=\"round\"\n              transform=\"rotate(-90 60 60)\"\n            />\n          </svg>\n          <div class=\"ngx-countdown__ring-content\">\n            <span class=\"ngx-countdown__ring-value\">{{ formattedCompactTime() }}</span>\n            <span class=\"ngx-countdown__ring-label\">remaining</span>\n          </div>\n        </div>\n      }\n\n      <!-- Flip-card style countdown layout -->\n      <div class=\"ngx-countdown__grid\" [class.hidden]=\"showRing() && compactOnly()\">\n        <!-- Days -->\n        @if (days() > 0 || forceShowDays()) {\n          <div class=\"ngx-countdown__card\">\n            <div class=\"ngx-countdown__number-wrap\">\n              <span class=\"ngx-countdown__number\">{{ formatNumber(days()) }}</span>\n            </div>\n            <span class=\"ngx-countdown__label\">Days</span>\n          </div>\n        }\n\n        <!-- Hours -->\n        <div class=\"ngx-countdown__card\">\n          <div class=\"ngx-countdown__number-wrap\">\n            <span class=\"ngx-countdown__number\">{{ formatNumber(hours()) }}</span>\n          </div>\n          <span class=\"ngx-countdown__label\">Hours</span>\n        </div>\n\n        <!-- Minutes -->\n        <div class=\"ngx-countdown__card\">\n          <div class=\"ngx-countdown__number-wrap\">\n            <span class=\"ngx-countdown__number\">{{ formatNumber(minutes()) }}</span>\n          </div>\n          <span class=\"ngx-countdown__label\">Minutes</span>\n        </div>\n\n        <!-- Seconds -->\n        <div class=\"ngx-countdown__card\">\n          <div class=\"ngx-countdown__number-wrap\">\n            <span class=\"ngx-countdown__number\">{{ formatNumber(seconds()) }}</span>\n          </div>\n          <span class=\"ngx-countdown__label\">Seconds</span>\n        </div>\n      </div>\n\n      <!-- Controls -->\n      @if (showControls()) {\n        <div class=\"ngx-countdown__controls\">\n          @if (isRunning()) {\n            <button class=\"ngx-countdown__btn btn-pause\" (click)=\"pause()\" aria-label=\"Pause timer\">\n              <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n                <rect x=\"6\" y=\"4\" width=\"4\" height=\"16\" rx=\"1\" />\n                <rect x=\"14\" y=\"4\" width=\"4\" height=\"16\" rx=\"1\" />\n              </svg>\n              Pause\n            </button>\n          } @else {\n            <button class=\"ngx-countdown__btn btn-start\" (click)=\"start()\" [disabled]=\"isFinished()\" aria-label=\"Start timer\">\n              <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n                <polygon points=\"5 3 19 12 5 21 5 3\" />\n              </svg>\n              Start\n            </button>\n          }\n          <button class=\"ngx-countdown__btn btn-reset\" (click)=\"reset()\" aria-label=\"Reset timer\">\n            <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n              <path d=\"M21.5 2v6h-6M21.34 15.57a10 10 0 1 1-.57-8.38l5.67-5.67\" />\n            </svg>\n            Reset\n          </button>\n        </div>\n      }\n    </div>\n  `,\n  styles: [`\n    :host {\n      display: inline-block;\n    }\n\n    .ngx-countdown {\n      display: flex;\n      flex-direction: column;\n      align-items: center;\n      gap: 20px;\n      padding: 24px;\n      border-radius: 20px;\n      font-family: var(--ngx-font-family, system-ui, sans-serif);\n      background: rgba(255, 255, 255, 0.55);\n      backdrop-filter: blur(16px);\n      -webkit-backdrop-filter: blur(16px);\n      border: 1px solid rgba(255, 255, 255, 0.4);\n      box-shadow: \n        0 10px 30px -10px rgba(0, 0, 0, 0.08),\n        0 1px 3px rgba(0, 0, 0, 0.03),\n        inset 0 1px 0 rgba(255, 255, 255, 0.8);\n      transition: all 0.3s ease;\n    }\n\n    .ngx-countdown.dark {\n      background: rgba(30, 32, 48, 0.8);\n      border-color: rgba(255, 255, 255, 0.08);\n      box-shadow: \n        0 10px 30px -10px rgba(0, 0, 0, 0.3),\n        0 1px 3px rgba(0, 0, 0, 0.1);\n    }\n\n    /* ── SVG Ring ── */\n    .ngx-countdown__ring-container {\n      position: relative;\n      width: 140px;\n      height: 140px;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n    }\n\n    .ngx-countdown__svg {\n      position: absolute;\n      top: 0;\n      left: 0;\n      width: 100%;\n      height: 100%;\n    }\n\n    .ngx-countdown__circle-bg {\n      fill: none;\n      stroke: rgba(0, 0, 0, 0.05);\n    }\n\n    .dark .ngx-countdown__circle-bg {\n      stroke: rgba(255, 255, 255, 0.06);\n    }\n\n    .ngx-countdown__circle-progress {\n      fill: none;\n      stroke: var(--primary-color);\n      transition: stroke-dashoffset 1s linear;\n      stroke-dasharray: 326.7; /* 2 * PI * r (r=52) */\n    }\n\n    .ngx-countdown__ring-content {\n      display: flex;\n      flex-direction: column;\n      align-items: center;\n      justify-content: center;\n      z-index: 1;\n    }\n\n    .ngx-countdown__ring-value {\n      font-size: 20px;\n      font-weight: 700;\n      color: #1e293b;\n      letter-spacing: -0.5px;\n    }\n\n    .dark .ngx-countdown__ring-value {\n      color: #f1f5f9;\n    }\n\n    .ngx-countdown__ring-label {\n      font-size: 10px;\n      font-weight: 500;\n      text-transform: uppercase;\n      letter-spacing: 1px;\n      color: #64748b;\n      margin-top: 2px;\n    }\n\n    .dark .ngx-countdown__ring-label {\n      color: #94a3b8;\n    }\n\n    /* ── Grid Cards ── */\n    .ngx-countdown__grid {\n      display: flex;\n      gap: 12px;\n      justify-content: center;\n    }\n\n    .ngx-countdown__grid.hidden {\n      display: none;\n    }\n\n    .ngx-countdown__card {\n      display: flex;\n      flex-direction: column;\n      align-items: center;\n      gap: 6px;\n    }\n\n    .ngx-countdown__number-wrap {\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      min-width: 58px;\n      height: 58px;\n      border-radius: 12px;\n      background: rgba(255, 255, 255, 0.85);\n      border: 1px solid rgba(255, 255, 255, 0.7);\n      box-shadow: \n        0 4px 6px -1px rgba(0, 0, 0, 0.05),\n        0 2px 4px -1px rgba(0, 0, 0, 0.03);\n      transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n    }\n\n    .dark .ngx-countdown__number-wrap {\n      background: rgba(15, 23, 42, 0.45);\n      border-color: rgba(255, 255, 255, 0.06);\n      box-shadow: none;\n    }\n\n    .ngx-countdown__number {\n      font-size: 26px;\n      font-weight: 700;\n      color: #0f172a;\n      font-variant-numeric: tabular-nums;\n    }\n\n    .dark .ngx-countdown__number {\n      color: #f8fafc;\n      text-shadow: 0 0 10px rgba(255, 255, 255, 0.05);\n    }\n\n    .ngx-countdown__label {\n      font-size: 11px;\n      font-weight: 600;\n      color: #64748b;\n      text-transform: uppercase;\n      letter-spacing: 0.5px;\n    }\n\n    .dark .ngx-countdown__label {\n      color: #94a3b8;\n    }\n\n    /* ── Controls Buttons ── */\n    .ngx-countdown__controls {\n      display: flex;\n      gap: 8px;\n      margin-top: 4px;\n    }\n\n    .ngx-countdown__btn {\n      display: inline-flex;\n      align-items: center;\n      gap: 6px;\n      padding: 6px 12px;\n      font-size: 12px;\n      font-weight: 600;\n      border-radius: 8px;\n      cursor: pointer;\n      background: rgba(255, 255, 255, 0.8);\n      border: 1.5px solid rgba(0, 0, 0, 0.06);\n      color: #334155;\n      transition: all 0.2s ease;\n    }\n\n    .ngx-countdown__btn svg {\n      transition: transform 0.2s ease;\n    }\n\n    .ngx-countdown__btn:hover:not(:disabled) {\n      background: #f8fafc;\n      border-color: rgba(0, 0, 0, 0.12);\n      transform: translateY(-1px);\n    }\n\n    .ngx-countdown__btn:active:not(:disabled) {\n      transform: translateY(0);\n    }\n\n    .ngx-countdown__btn:disabled {\n      opacity: 0.5;\n      cursor: not-allowed;\n    }\n\n    .dark .ngx-countdown__btn {\n      background: rgba(255, 255, 255, 0.05);\n      border-color: rgba(255, 255, 255, 0.08);\n      color: #e2e8f0;\n    }\n\n    .dark .ngx-countdown__btn:hover:not(:disabled) {\n      background: rgba(255, 255, 255, 0.08);\n      border-color: rgba(255, 255, 255, 0.15);\n    }\n\n    /* ── Variants ── */\n    .ngx-countdown.success .ngx-countdown__circle-progress {\n      stroke: #10b981 !important;\n    }\n    .ngx-countdown.danger .ngx-countdown__circle-progress {\n      stroke: #ef4444 !important;\n    }\n    .ngx-countdown.warning .ngx-countdown__circle-progress {\n      stroke: #f59e0b !important;\n    }\n    .ngx-countdown.info .ngx-countdown__circle-progress {\n      stroke: #3b82f6 !important;\n    }\n\n    .ngx-countdown.success .ngx-countdown__number-wrap {\n      border-color: rgba(16, 185, 129, 0.25);\n    }\n    .ngx-countdown.danger .ngx-countdown__number-wrap {\n      border-color: rgba(239, 68, 68, 0.25);\n    }\n    .ngx-countdown.warning .ngx-countdown__number-wrap {\n      border-color: rgba(245, 158, 11, 0.25);\n    }\n    .ngx-countdown.info .ngx-countdown__number-wrap {\n      border-color: rgba(59, 130, 246, 0.25);\n    }\n\n    .dark.ngx-countdown.success .ngx-countdown__number-wrap {\n      border-color: rgba(16, 185, 129, 0.15);\n    }\n    .dark.ngx-countdown.danger .ngx-countdown__number-wrap {\n      border-color: rgba(239, 68, 68, 0.15);\n    }\n    .dark.ngx-countdown.warning .ngx-countdown__number-wrap {\n      border-color: rgba(245, 158, 11, 0.15);\n    }\n    .dark.ngx-countdown.info .ngx-countdown__number-wrap {\n      border-color: rgba(59, 130, 246, 0.15);\n    }\n  `]\n})\nexport class CountdownComponent implements OnDestroy {\n  // Inputs\n  targetDate = input<string | Date | null>(null);\n  duration = input<number | null>(null); // in seconds\n  showRing = input<boolean>(true);\n  ringColor = input<string>('');\n  theme = input<'light' | 'dark'>('light');\n  variant = input<CountdownVariant>('default');\n  autoStart = input<boolean>(true);\n  showControls = input<boolean>(true);\n  compactOnly = input<boolean>(false);\n  forceShowDays = input<boolean>(false);\n  id = input<string>('ngx-countdown-' + Math.random().toString(36).substring(2, 9));\n\n  // Outputs\n  finished = output<void>();\n  tick = output<{\n    days: number;\n    hours: number;\n    minutes: number;\n    seconds: number;\n    totalSeconds: number;\n  }>();\n\n  // Internal Signals\n  remainingSeconds = signal<number>(0);\n  initialTotalSeconds = signal<number>(1);\n  isRunning = signal<boolean>(false);\n\n  private timerId: any = null;\n\n  // Computeds\n  days = computed(() => Math.floor(this.remainingSeconds() / 86400));\n  hours = computed(() => Math.floor((this.remainingSeconds() % 86400) / 3600));\n  minutes = computed(() => Math.floor((this.remainingSeconds() % 3600) / 60));\n  seconds = computed(() => this.remainingSeconds() % 60);\n\n  isFinished = computed(() => this.remainingSeconds() <= 0);\n\n  // Compute progress ratio (0 to 1) for the SVG circle offset\n  progressRatio = computed(() => {\n    if (this.initialTotalSeconds() <= 0) return 0;\n    const ratio = this.remainingSeconds() / this.initialTotalSeconds();\n    return Math.max(0, Math.min(1, ratio));\n  });\n\n  strokeDashoffset = computed(() => {\n    const circumference = 326.7; // 2 * Math.PI * 52\n    return circumference * (1 - this.progressRatio());\n  });\n\n  formattedCompactTime = computed(() => {\n    const d = this.days();\n    const h = this.formatNumber(this.hours());\n    const m = this.formatNumber(this.minutes());\n    const s = this.formatNumber(this.seconds());\n    if (d > 0) {\n      return `${d}d ${h}:${m}`;\n    }\n    return `${h}:${m}:${s}`;\n  });\n\n  variantClass = computed(() => {\n    return this.variant() !== 'default' ? `success danger warning info`.split(' ').includes(this.variant()) ? this.variant() : '' : '';\n  });\n\n  constructor() {\n    effect(() => {\n      // React to changes in inputs\n      this.targetDate();\n      this.duration();\n\n      untracked(() => {\n        this.reset();\n        if (this.autoStart() && !this.isFinished()) {\n          this.start();\n        }\n      });\n    }, { allowSignalWrites: true });\n  }\n\n  ngOnDestroy() {\n    this.clearTimer();\n  }\n\n  start() {\n    if (this.isFinished()) return;\n    if (this.timerId) return;\n\n    this.isRunning.set(true);\n    this.timerId = setInterval(() => {\n      const nextVal = this.remainingSeconds() - 1;\n      if (nextVal <= 0) {\n        this.remainingSeconds.set(0);\n        this.clearTimer();\n        this.isRunning.set(false);\n        this.finished.emit();\n      } else {\n        this.remainingSeconds.set(nextVal);\n      }\n\n      this.tick.emit({\n        days: this.days(),\n        hours: this.hours(),\n        minutes: this.minutes(),\n        seconds: this.seconds(),\n        totalSeconds: this.remainingSeconds()\n      });\n    }, 1000);\n  }\n\n  pause() {\n    this.clearTimer();\n    this.isRunning.set(false);\n  }\n\n  reset() {\n    this.clearTimer();\n    this.isRunning.set(false);\n\n    let seconds = 0;\n    const target = this.targetDate();\n    const dur = this.duration();\n\n    if (target) {\n      const targetTime = new Date(target).getTime();\n      const now = new Date().getTime();\n      seconds = Math.max(0, Math.floor((targetTime - now) / 1000));\n    } else if (dur !== null && dur !== undefined) {\n      seconds = Math.max(0, dur);\n    }\n\n    this.remainingSeconds.set(seconds);\n    this.initialTotalSeconds.set(seconds > 0 ? seconds : 1);\n  }\n\n  formatNumber(val: number): string {\n    return val < 10 ? `0${val}` : `${val}`;\n  }\n\n  private clearTimer() {\n    if (this.timerId) {\n      clearInterval(this.timerId);\n      this.timerId = null;\n    }\n  }\n}\n","import {\n  Component,\n  ChangeDetectionStrategy,\n  input,\n  output,\n  computed,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n  selector: 'ngx-empty-state',\n  standalone: true,\n  imports: [CommonModule],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <div\n      class=\"ngx-empty-state\"\n      [class.dark]=\"theme() === 'dark'\"\n      [attr.id]=\"id()\"\n    >\n      <!-- Illustration Section -->\n      @if (illustration() !== 'none') {\n        <div class=\"ngx-empty-state__illustration\">\n          @switch (illustration()) {\n            @case ('search') {\n              <svg viewBox=\"0 0 24 24\" class=\"illustration-svg outline-blue\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n                <circle cx=\"11\" cy=\"11\" r=\"7\"/>\n                <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"/>\n                <path d=\"M8 11h6\" stroke-dasharray=\"2 2\"/>\n              </svg>\n            }\n            @case ('chat') {\n              <svg viewBox=\"0 0 24 24\" class=\"illustration-svg outline-indigo\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n                <path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\"/>\n                <circle cx=\"9\" cy=\"10\" r=\"1\" fill=\"currentColor\"/>\n                <circle cx=\"13\" cy=\"10\" r=\"1\" fill=\"currentColor\"/>\n                <circle cx=\"17\" cy=\"10\" r=\"1\" fill=\"currentColor\"/>\n              </svg>\n            }\n            @case ('error') {\n              <svg viewBox=\"0 0 24 24\" class=\"illustration-svg outline-red\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n                <path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"/>\n                <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\"/>\n                <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"/>\n              </svg>\n            }\n            @default {\n              <!-- 'data' layout default -->\n              <svg viewBox=\"0 0 24 24\" class=\"illustration-svg outline-slate\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n                <ellipse cx=\"12\" cy=\"5\" rx=\"9\" ry=\"3\"/>\n                <path d=\"M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5\"/>\n                <path d=\"M3 12c0 1.66 4 3 9 3s9-1.34 9-3\"/>\n              </svg>\n            }\n          }\n        </div>\n      }\n\n      <!-- Custom Projection slot for custom illustrations -->\n      <div class=\"ngx-empty-state__custom-media\">\n        <ng-content select=\"[empty-media]\"></ng-content>\n      </div>\n\n      <!-- Text details -->\n      <h3 class=\"ngx-empty-state__title\">{{ title() }}</h3>\n      <p class=\"ngx-empty-state__desc\">{{ description() }}</p>\n\n      <!-- Projected slot for custom descriptions/content -->\n      <div class=\"ngx-empty-state__custom-content\">\n        <ng-content></ng-content>\n      </div>\n\n      <!-- CTA Buttons actions -->\n      @if (primaryActionText() || secondaryActionText()) {\n        <div class=\"ngx-empty-state__actions\">\n          @if (secondaryActionText()) {\n            <button\n              class=\"ngx-empty-state__btn btn-secondary\"\n              (click)=\"secondaryAction.emit()\"\n            >\n              {{ secondaryActionText() }}\n            </button>\n          }\n          @if (primaryActionText()) {\n            <button\n              class=\"ngx-empty-state__btn btn-primary\"\n              (click)=\"primaryAction.emit()\"\n            >\n              {{ primaryActionText() }}\n            </button>\n          }\n        </div>\n      }\n    </div>\n  `,\n  styles: [`\n    :host {\n      display: block;\n      width: 100%;\n    }\n\n    .ngx-empty-state {\n      display: flex;\n      flex-direction: column;\n      align-items: center;\n      justify-content: center;\n      text-align: center;\n      padding: 40px 32px;\n      border-radius: 16px;\n      background: rgba(255, 255, 255, 0.45);\n      backdrop-filter: blur(12px);\n      -webkit-backdrop-filter: blur(12px);\n      border: 1px solid rgba(0, 0, 0, 0.04);\n      box-shadow: \n        0 4px 10px rgba(0, 0, 0, 0.02),\n        0 1px 3px rgba(0, 0, 0, 0.01);\n      box-sizing: border-box;\n      font-family: var(--ngx-font-family, system-ui, sans-serif);\n      transition: all 0.3s ease;\n      animation: fadeIn 0.4s cubic-bezier(0.16, 1, 0.3, 1) forwards;\n    }\n\n    .ngx-empty-state.dark {\n      background: rgba(30, 32, 48, 0.4);\n      border-color: rgba(255, 255, 255, 0.05);\n      box-shadow: none;\n    }\n\n    @keyframes fadeIn {\n      from { opacity: 0; transform: translateY(8px); }\n      to { opacity: 1; transform: translateY(0); }\n    }\n\n    /* ── SVGs Outline illustrations ── */\n    .ngx-empty-state__illustration {\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      width: 72px;\n      height: 72px;\n      border-radius: 50%;\n      background: rgba(0, 0, 0, 0.02);\n      margin-bottom: 20px;\n    }\n\n    .dark .ngx-empty-state__illustration {\n      background: rgba(255, 255, 255, 0.03);\n    }\n\n    .illustration-svg {\n      width: 36px;\n      height: 36px;\n    }\n\n    .outline-slate { color: #64748b; }\n    .outline-blue { color: #3b82f6; }\n    .outline-indigo { color: #6366f1; }\n    .outline-red { color: #ef4444; }\n\n    /* Custom Media Slot */\n    .ngx-empty-state__custom-media {\n      margin-bottom: 16px;\n    }\n\n    /* Text structures */\n    .ngx-empty-state__title {\n      margin: 0 0 8px 0;\n      font-size: 16px;\n      font-weight: 700;\n      color: #0f172a;\n    }\n\n    .dark .ngx-empty-state__title {\n      color: #f8fafc;\n    }\n\n    .ngx-empty-state__desc {\n      margin: 0;\n      font-size: 13px;\n      color: #64748b;\n      line-height: 1.5;\n      max-width: 380px;\n    }\n\n    .dark .ngx-empty-state__desc {\n      color: #94a3b8;\n    }\n\n    .ngx-empty-state__custom-content {\n      margin-top: 12px;\n      width: 100%;\n    }\n\n    /* ── Action buttons ── */\n    .ngx-empty-state__actions {\n      display: flex;\n      gap: 12px;\n      justify-content: center;\n      margin-top: 24px;\n    }\n\n    .ngx-empty-state__btn {\n      padding: 8px 16px;\n      font-size: 13px;\n      font-weight: 600;\n      border-radius: 6px;\n      cursor: pointer;\n      border: none;\n      transition: all 0.2s ease;\n    }\n\n    .ngx-empty-state__btn:hover {\n      transform: translateY(-1px);\n    }\n\n    .ngx-empty-state__btn.btn-primary {\n      background: var(--primary-color, #3b82f6);\n      color: white;\n    }\n\n    .ngx-empty-state__btn.btn-primary:hover {\n      box-shadow: 0 4px 12px rgba(59, 130, 246, 0.2);\n      opacity: 0.95;\n    }\n\n    .ngx-empty-state__btn.btn-secondary {\n      background: #f1f5f9;\n      color: #475569;\n      border: 1px solid #e2e8f0;\n    }\n\n    .ngx-empty-state__btn.btn-secondary:hover {\n      background: #e2e8f0;\n      color: #0f172a;\n    }\n\n    .dark .ngx-empty-state__btn.btn-secondary {\n      background: rgba(255, 255, 255, 0.05);\n      color: #cbd5e1;\n      border-color: rgba(255, 255, 255, 0.08);\n    }\n\n    .dark .ngx-empty-state__btn.btn-secondary:hover {\n      background: rgba(255, 255, 255, 0.08);\n      color: #ffffff;\n    }\n  `]\n})\nexport class EmptyStateComponent {\n  // Inputs\n  title = input.required<string>();\n  description = input<string>('');\n  illustration = input<'search' | 'data' | 'chat' | 'error' | 'none'>('data');\n  primaryActionText = input<string>('');\n  secondaryActionText = input<string>('');\n  theme = input<'light' | 'dark'>('light');\n  id = input<string>('ngx-empty-state-' + Math.random().toString(36).substring(2, 9));\n\n  // Outputs\n  primaryAction = output<void>();\n  secondaryAction = output<void>();\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}