{"version":3,"file":"ngx-core-components-layout.mjs","sources":["../../../projects/ngx-core-components/layout/card/card.component.ts","../../../projects/ngx-core-components/layout/tab-strip/tab-strip.component.ts","../../../projects/ngx-core-components/layout/accordion/accordion.component.ts","../../../projects/ngx-core-components/layout/stepper/stepper.component.ts","../../../projects/ngx-core-components/layout/splitter/splitter.component.ts","../../../projects/ngx-core-components/layout/dashboard-layout/dashboard-layout.component.ts","../../../projects/ngx-core-components/layout/carousel/carousel.component.ts","../../../projects/ngx-core-components/layout/drawer/drawer.component.ts","../../../projects/ngx-core-components/layout/public-api.ts","../../../projects/ngx-core-components/layout/ngx-core-components-layout.ts"],"sourcesContent":["import { Component, computed, input, output } from '@angular/core';\n\nexport type CardVariant = 'default' | 'outlined' | 'elevated' | 'filled' | 'glass';\n\n@Component({\n  selector: 'ngx-card',\n  standalone: true,\n  template: `\n    <div\n      class=\"ngx-card\"\n      [class]=\"'ngx-card-' + variant()\"\n      [class.hoverable]=\"hoverable()\"\n      [class.selectable]=\"selectable()\"\n      [class.selected]=\"selected()\"\n      (click)=\"(selectable() || hoverable()) ? cardClick.emit($event) : null\"\n    >\n      @if (hasHeader()) {\n        <div class=\"card-header\">\n          @if (headerIcon()) { <span class=\"card-header-icon\">{{ headerIcon() }}</span> }\n          <div class=\"card-header-text\">\n            <div class=\"card-title\">{{ title() }}</div>\n            @if (subtitle()) { <div class=\"card-subtitle\">{{ subtitle() }}</div> }\n          </div>\n          <div class=\"card-header-actions\">\n            <ng-content select=\"[cardActions]\" />\n          </div>\n        </div>\n      }\n      @if (imageUrl()) {\n        <div class=\"card-image\"><img [src]=\"imageUrl()\" [alt]=\"imageAlt()\" /></div>\n      }\n      <div class=\"card-body\">\n        <ng-content />\n      </div>\n      <ng-content select=\"[cardFooter]\" />\n    </div>\n  `,\n  styles: [`\n    :host { display: block; }\n    .ngx-card {\n      background: var(--ngx-card-bg, var(--bg-primary, #ffffff));\n      border-radius: var(--ngx-card-radius, 12px);\n      overflow: hidden;\n      font-family: inherit;\n      transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n    }\n    .ngx-card-default { \n      border: 1px solid var(--ngx-card-border, var(--border-color, #e2e8f0)); \n    }\n    .ngx-card-outlined { \n      border: 2px solid var(--ngx-card-border, var(--border-color, #cbd5e1)); \n    }\n    .ngx-card-elevated { \n      border: 1px solid var(--ngx-card-border, rgba(0, 0, 0, 0.04));\n      box-shadow: var(--ngx-card-shadow, 0 4px 20px -2px rgba(0, 0, 0, 0.05), 0 2px 8px -1px rgba(0, 0, 0, 0.03)); \n    }\n    .ngx-card-filled { \n      background: var(--ngx-card-filled-bg, var(--bg-secondary, #f8fafc)); \n      border: 1px solid transparent; \n    }\n    .ngx-card-glass {\n      background: var(--ngx-card-glass-bg, rgba(255, 255, 255, 0.45));\n      backdrop-filter: blur(16px);\n      -webkit-backdrop-filter: blur(16px);\n      border: 1px solid var(--ngx-card-glass-border, rgba(255, 255, 255, 0.2));\n      box-shadow: var(--ngx-card-glass-shadow, 0 8px 32px 0 rgba(31, 38, 135, 0.04));\n    }\n    .ngx-card.hoverable { \n      cursor: pointer; \n    }\n    .ngx-card.hoverable:hover { \n      box-shadow: var(--ngx-card-hover-shadow, 0 12px 25px -4px rgba(0, 0, 0, 0.08), 0 4px 12px -2px rgba(0, 0, 0, 0.05)); \n      transform: translateY(-4px) scale(1.01); \n    }\n    .ngx-card.selectable { \n      cursor: pointer; \n    }\n    .ngx-card.selected { \n      border-color: var(--ngx-card-selected-border, var(--primary-color, #1a73e8)); \n      box-shadow: 0 0 0 2px var(--ngx-card-selected-outline, rgba(26, 115, 232, 0.15)); \n    }\n\n    .card-header { display: flex; align-items: center; gap: 10px; padding: 20px 20px 0; }\n    .card-header-icon { font-size: 20px; flex-shrink: 0; }\n    .card-header-text { flex: 1; min-width: 0; }\n    .card-title { font-size: 15px; font-weight: 750; color: var(--ngx-card-title-color, var(--text-primary, #0f172a)); }\n    .card-subtitle { font-size: 12px; color: var(--ngx-card-subtitle-color, var(--text-secondary, #64748b)); margin-top: 2px; font-weight: 500; }\n    .card-header-actions { display: flex; align-items: center; gap: 6px; }\n\n    .card-image img { width: 100%; height: 180px; object-fit: cover; display: block; }\n    .card-body { padding: var(--ngx-card-padding, 20px); font-size: 14px; color: var(--ngx-card-text, var(--text-primary, #334155)); line-height: 1.6; }\n  `]\n})\nexport class CardComponent {\n  title = input('');\n  subtitle = input('');\n  headerIcon = input('');\n  imageUrl = input('');\n  imageAlt = input('');\n  variant = input<CardVariant>('default');\n  hoverable = input(false);\n  selectable = input(false);\n  selected = input(false);\n\n  cardClick = output<MouseEvent>();\n\n  hasHeader = computed(() => !!(this.title() || this.subtitle() || this.headerIcon()));\n}\n","import { Component, input, output, signal, contentChildren, AfterContentInit, ElementRef, viewChild, effect, HostListener } from '@angular/core';\n\n@Component({\n  selector: 'ngx-tab',\n  standalone: true,\n  template: `\n    <div \n      [hidden]=\"!isActive()\"\n      role=\"tabpanel\"\n      [id]=\"tabPanelId()\"\n      [attr.aria-labelledby]=\"tabButtonId()\"\n      [attr.tabindex]=\"isActive() ? 0 : -1\"\n      class=\"ngx-tab-panel\"\n    >\n      <ng-content />\n    </div>\n  `,\n  styles: [`\n    .ngx-tab-panel {\n      outline: none;\n    }\n    .ngx-tab-panel:focus-visible {\n      outline: 2px solid var(--ngx-tab-active-color, var(--primary-color, #1a73e8));\n      outline-offset: 4px;\n    }\n  `]\n})\nexport class TabComponent {\n  id = input<string>('');\n  title = input.required<string>();\n  icon = input<string>('');\n  disabled = input(false);\n  badge = input<string | number>('');\n  closable = input(false);\n  isActive = signal(false);\n\n  tabPanelId = signal('');\n  tabButtonId = signal('');\n\n  tabClose = output<void>();\n}\n\n@Component({\n  selector: 'ngx-tab-strip',\n  standalone: true,\n  imports: [],\n  template: `\n    <div class=\"ngx-tab-strip\" [class]=\"'tabs-' + position()\">\n      <div class=\"tab-list\" #tabList role=\"tablist\">\n        @for (tab of tabs(); track tab.title(); let i = $index) {\n          <button\n            class=\"tab-btn\"\n            [class.active]=\"activeIndex() === i\"\n            [class.disabled]=\"tab.disabled()\"\n            role=\"tab\"\n            [id]=\"tab.tabButtonId()\"\n            [attr.aria-selected]=\"activeIndex() === i\"\n            [attr.aria-controls]=\"tab.tabPanelId()\"\n            [attr.tabindex]=\"activeIndex() === i ? 0 : -1\"\n            [disabled]=\"tab.disabled()\"\n            (click)=\"selectTab(i)\"\n            (keydown)=\"handleKeydown($event, i)\"\n          >\n            @if (tab.icon()) { <span class=\"tab-icon\" aria-hidden=\"true\">{{ tab.icon() }}</span> }\n            <span class=\"tab-title\">{{ tab.title() }}</span>\n            @if (tab.badge()) { <span class=\"tab-badge\">{{ tab.badge() }}</span> }\n            @if (tab.closable()) {\n              <button \n                class=\"tab-close-btn\" \n                (click)=\"closeTab($event, i)\" \n                title=\"Close Tab\"\n                aria-label=\"Close tab\"\n                type=\"button\"\n                tabindex=\"-1\"\n              >\n                ×\n              </button>\n            }\n          </button>\n        }\n        <div \n          class=\"tab-indicator\"\n          [style.left.px]=\"indicatorLeft()\"\n          [style.top.px]=\"indicatorTop()\"\n          [style.width.px]=\"position() === 'top' || position() === 'bottom' ? indicatorWidth() : 3\"\n          [style.height.px]=\"position() === 'left' || position() === 'right' ? indicatorHeight() : 3\"\n        ></div>\n      </div>\n      <div class=\"tab-content\">\n        <ng-content />\n      </div>\n    </div>\n  `,\n  styles: [`\n    :host { display: block; }\n    .ngx-tab-strip { display: flex; }\n    .ngx-tab-strip.tabs-top { flex-direction: column; }\n    .ngx-tab-strip.tabs-bottom { flex-direction: column-reverse; }\n    .ngx-tab-strip.tabs-left { flex-direction: row; }\n    .ngx-tab-strip.tabs-right { flex-direction: row-reverse; }\n\n    .tab-list { \n      display: flex; \n      position: relative; \n      overflow-x: auto; \n      gap: 0; \n      border-color: var(--ngx-tab-border, var(--border-color, #e2e8f0));\n      border-style: solid;\n      border-width: 0;\n    }\n    \n    .tabs-top .tab-list { border-bottom-width: 2px; flex-direction: row; }\n    .tabs-bottom .tab-list { border-top-width: 2px; flex-direction: row; }\n    .tabs-left .tab-list { border-right-width: 2px; flex-direction: column; overflow-y: auto; overflow-x: hidden; }\n    .tabs-right .tab-list { border-left-width: 2px; flex-direction: column; overflow-y: auto; overflow-x: hidden; }\n\n    .tab-btn {\n      display: inline-flex; \n      align-items: center; \n      gap: 6px; \n      padding: 12px 20px;\n      background: none; \n      border: none; \n      font-size: 13px; \n      font-weight: 500;\n      color: var(--ngx-tab-color, var(--text-secondary, #64748b)); \n      cursor: pointer; \n      font-family: inherit;\n      transition: all 0.2s ease; \n      white-space: nowrap; \n      position: relative;\n      outline: none;\n      user-select: none;\n    }\n    \n    .tabs-top .tab-btn { margin-bottom: -2px; border-bottom: 2px solid transparent; }\n    .tabs-bottom .tab-btn { margin-top: -2px; border-top: 2px solid transparent; }\n    .tabs-left .tab-btn { margin-right: -2px; border-right: 2px solid transparent; text-align: left; justify-content: flex-start; width: 100%; }\n    .tabs-right .tab-btn { margin-left: -2px; border-left: 2px solid transparent; text-align: right; justify-content: flex-end; width: 100%; }\n\n    .tab-btn:hover:not(:disabled):not(.active) { \n      color: var(--ngx-tab-hover-color, var(--text-primary, #0f172a)); \n      background: var(--ngx-tab-hover-bg, var(--bg-secondary, #f8fafc));\n    }\n    \n    .tab-btn.active { \n      color: var(--ngx-tab-active-color, var(--primary-color, #1a73e8)); \n      font-weight: 600; \n    }\n    .tab-btn.disabled { color: var(--ngx-color-text-disabled, #767b83); cursor: not-allowed; }\n\n    .tab-btn:focus-visible {\n      outline: 2px solid var(--ngx-tab-active-color, var(--primary-color, #1a73e8));\n      outline-offset: -2px;\n      box-shadow: 0 0 0 3px rgba(26, 115, 232, 0.2);\n      z-index: 3;\n    }\n    \n    .tab-icon { font-size: 15px; display: inline-flex; align-items: center; }\n    .tab-badge { \n      background: var(--ngx-tab-badge-bg, var(--error-color, #ef4444)); \n      color: #fff; \n      font-size: 10px; \n      font-weight: 700; \n      padding: 1px 6px; \n      border-radius: 999px; \n      min-width: 18px; \n      text-align: center; \n    }\n    \n    .tab-close-btn {\n      background: transparent;\n      border: none;\n      font-size: 14px;\n      color: var(--ngx-color-text-disabled, #767b83);\n      cursor: pointer;\n      display: inline-flex;\n      align-items: center;\n      justify-content: center;\n      width: 16px;\n      height: 16px;\n      border-radius: 50%;\n      margin-left: 4px;\n      padding: 0;\n      transition: all 0.15s ease;\n    }\n    .tab-close-btn:hover {\n      background: rgba(0, 0, 0, 0.08);\n      color: var(--error-color, #ef4444);\n    }\n\n    .tab-indicator { \n      position: absolute;\n      background: var(--ngx-tab-active-color, var(--primary-color, #1a73e8));\n      transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n      z-index: 2;\n    }\n    \n    .tabs-top .tab-indicator { bottom: 0; }\n    .tabs-bottom .tab-indicator { top: 0; }\n    .tabs-left .tab-indicator { right: 0; }\n    .tabs-right .tab-indicator { left: 0; }\n\n    .tab-content { \n      flex: 1; \n      padding: var(--ngx-tab-content-padding, 20px); \n      min-width: 0;\n    }\n  `]\n})\nexport class TabStripComponent implements AfterContentInit {\n  position = input<'top' | 'bottom' | 'left' | 'right'>('top');\n  activeIndex = signal(0);\n  \n  indicatorLeft = signal(0);\n  indicatorTop = signal(0);\n  indicatorWidth = signal(0);\n  indicatorHeight = signal(0);\n\n  tabListEl = viewChild<ElementRef>('tabList');\n  tabs = contentChildren(TabComponent);\n\n  tabChange = output<number>();\n  tabClose = output<number>();\n\n  constructor() {\n    effect(() => {\n      const idx = this.activeIndex();\n      // Track tabs list changes\n      const currentTabs = this.tabs();\n      this.updateIndicator(idx);\n    });\n  }\n\n  ngAfterContentInit() {\n    this._syncActiveTabs();\n  }\n\n  selectTab(index: number) {\n    if (this.tabs()[index]?.disabled()) return;\n    this.activeIndex.set(index);\n    this._syncActiveTabs();\n    this.tabChange.emit(index);\n  }\n\n  closeTab(event: MouseEvent, index: number) {\n    event.stopPropagation();\n    const tabs = this.tabs();\n    const closedTab = tabs[index];\n    if (closedTab) {\n      closedTab.tabClose.emit();\n    }\n    this.tabClose.emit(index);\n  }\n\n  updateIndicator(index: number) {\n    setTimeout(() => {\n      const list = this.tabListEl()?.nativeElement as HTMLElement;\n      if (!list) return;\n      const btns = list.querySelectorAll('.tab-btn');\n      const activeBtn = btns[index] as HTMLElement;\n      if (activeBtn) {\n        this.indicatorLeft.set(activeBtn.offsetLeft);\n        this.indicatorTop.set(activeBtn.offsetTop);\n        this.indicatorWidth.set(activeBtn.offsetWidth);\n        this.indicatorHeight.set(activeBtn.offsetHeight);\n      } else {\n        this.indicatorWidth.set(0);\n        this.indicatorHeight.set(0);\n      }\n    }, 0);\n  }\n\n  handleKeydown(event: KeyboardEvent, index: number) {\n    const tabs = this.tabs();\n    let newIndex = -1;\n    \n    if (event.key === 'ArrowRight' || event.key === 'ArrowDown') {\n      newIndex = (index + 1) % tabs.length;\n      while (newIndex !== index && tabs[newIndex].disabled()) {\n        newIndex = (newIndex + 1) % tabs.length;\n      }\n    } else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') {\n      newIndex = (index - 1 + tabs.length) % tabs.length;\n      while (newIndex !== index && tabs[newIndex].disabled()) {\n        newIndex = (newIndex - 1 + tabs.length) % tabs.length;\n      }\n    } else if (event.key === 'Home') {\n      newIndex = 0;\n      while (newIndex < tabs.length && tabs[newIndex].disabled()) {\n        newIndex++;\n      }\n    } else if (event.key === 'End') {\n      newIndex = tabs.length - 1;\n      while (newIndex >= 0 && tabs[newIndex].disabled()) {\n        newIndex--;\n      }\n    }\n\n    if (newIndex !== -1 && newIndex !== index && !tabs[newIndex].disabled()) {\n      event.preventDefault();\n      this.selectTab(newIndex);\n      // Focus the new button\n      setTimeout(() => {\n        const list = this.tabListEl()?.nativeElement as HTMLElement;\n        const btns = list?.querySelectorAll('.tab-btn');\n        const nextBtn = btns?.[newIndex] as HTMLElement;\n        nextBtn?.focus();\n      }, 0);\n    }\n  }\n\n  private _syncActiveTabs(): void {\n    const tabs = this.tabs();\n    const active = this.activeIndex();\n    tabs.forEach((tab, i) => {\n      tab.isActive.set(i === active);\n      tab.tabPanelId.set(tab.id() ? 'ngx-tabpanel-' + tab.id() : 'ngx-tabpanel-' + i);\n      tab.tabButtonId.set(tab.id() ? 'ngx-tab-' + tab.id() : 'ngx-tab-' + i);\n    });\n  }\n}\n","import { Component, input, signal, contentChildren, viewChild, TemplateRef, effect, untracked, ElementRef, inject } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\n\nexport interface AccordionItem {\n  title: string;\n  content: string;\n  icon?: string;\n  disabled?: boolean;\n  expanded?: boolean;\n}\n\n@Component({\n  selector: 'ngx-accordion-item',\n  standalone: true,\n  template: `\n    <ng-template #contentTemplate>\n      <ng-content />\n    </ng-template>\n  `\n})\nexport class AccordionItemComponent {\n  title = input.required<string>();\n  icon = input<string>('');\n  disabled = input(false);\n  expanded = input(false);\n\n  contentTemplate = viewChild<TemplateRef<any>>('contentTemplate');\n}\n\n@Component({\n  selector: 'ngx-accordion',\n  standalone: true,\n  imports: [NgTemplateOutlet],\n  template: `\n    <div class=\"ngx-accordion\">\n      @if (accordionItems().length > 0) {\n        @for (child of accordionItems(); track child.title(); let i = $index) {\n          <div class=\"accordion-item\" [class.expanded]=\"isExpanded(i)\" [class.disabled]=\"child.disabled()\">\n            <button\n              class=\"accordion-header\"\n              [id]=\"'ngx-acc-header-' + i\"\n              [attr.aria-expanded]=\"isExpanded(i)\"\n              [attr.aria-controls]=\"'ngx-acc-panel-' + i\"\n              [disabled]=\"child.disabled()\"\n              (click)=\"toggle(i)\"\n              (keydown)=\"handleKeydown($event, i)\"\n            >\n              @if (child.icon()) { <span class=\"acc-icon\" aria-hidden=\"true\">{{ child.icon() }}</span> }\n              <span class=\"acc-title\">{{ child.title() }}</span>\n              <span class=\"acc-chevron\" [class.open]=\"isExpanded(i)\">\n                <svg viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"chevron-icon\">\n                  <polyline points=\"9 18 15 12 9 6\"></polyline>\n                </svg>\n              </span>\n            </button>\n            <div \n              class=\"accordion-body-wrapper\" \n              [class.expanded]=\"isExpanded(i)\"\n              [id]=\"'ngx-acc-panel-' + i\"\n              [attr.aria-labelledby]=\"'ngx-acc-header-' + i\"\n              role=\"region\"\n            >\n              <div class=\"accordion-body\">\n                @if (child.contentTemplate()) {\n                  <ng-container *ngTemplateOutlet=\"child.contentTemplate()!\" />\n                }\n              </div>\n            </div>\n          </div>\n        }\n      } @else {\n        @for (item of items(); track item.title; let i = $index) {\n          <div class=\"accordion-item\" [class.expanded]=\"isExpanded(i)\" [class.disabled]=\"item.disabled\">\n            <button\n              class=\"accordion-header\"\n              [id]=\"'ngx-acc-header-' + i\"\n              [attr.aria-expanded]=\"isExpanded(i)\"\n              [attr.aria-controls]=\"'ngx-acc-panel-' + i\"\n              [disabled]=\"item.disabled\"\n              (click)=\"toggle(i)\"\n              (keydown)=\"handleKeydown($event, i)\"\n            >\n              @if (item.icon) { <span class=\"acc-icon\" aria-hidden=\"true\">{{ item.icon }}</span> }\n              <span class=\"acc-title\">{{ item.title }}</span>\n              <span class=\"acc-chevron\" [class.open]=\"isExpanded(i)\">\n                <svg viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"chevron-icon\">\n                  <polyline points=\"9 18 15 12 9 6\"></polyline>\n                </svg>\n              </span>\n            </button>\n            <div \n              class=\"accordion-body-wrapper\" \n              [class.expanded]=\"isExpanded(i)\"\n              [id]=\"'ngx-acc-panel-' + i\"\n              [attr.aria-labelledby]=\"'ngx-acc-header-' + i\"\n              role=\"region\"\n            >\n              <div class=\"accordion-body\">\n                {{ item.content }}\n              </div>\n            </div>\n          </div>\n        }\n      }\n    </div>\n  `,\n  styles: [`\n    :host { display: block; }\n    .ngx-accordion { \n      border: 1px solid var(--ngx-acc-border, var(--border-color, #e2e8f0)); \n      border-radius: var(--ngx-acc-radius, 12px); \n      overflow: hidden; \n      background: var(--ngx-acc-bg, var(--bg-primary, #ffffff));\n      box-shadow: var(--ngx-acc-shadow, 0 4px 6px -1px rgba(0,0,0,0.02), 0 2px 4px -1px rgba(0,0,0,0.01));\n    }\n    .accordion-item { \n      border-bottom: 1px solid var(--ngx-acc-border, var(--border-color, #e2e8f0)); \n      transition: all 0.2s ease;\n    }\n    .accordion-item:last-child { border-bottom: none; }\n    .accordion-item.disabled { opacity: 0.5; }\n    \n    .accordion-header {\n      display: flex; \n      align-items: center; \n      gap: 12px; \n      width: 100%; \n      padding: 16px 20px;\n      background: var(--ngx-acc-header-bg, var(--bg-primary, #ffffff)); \n      border: none; \n      cursor: pointer; \n      font-family: inherit;\n      font-size: 14px; \n      font-weight: 600; \n      color: var(--ngx-acc-header-color, var(--text-primary, #0f172a));\n      text-align: left; \n      transition: all 0.2s ease;\n      outline: none;\n      position: relative;\n    }\n    .accordion-header:hover:not(:disabled) { \n      background: var(--ngx-acc-header-hover-bg, var(--bg-secondary, #f8fafc)); \n      color: var(--ngx-acc-header-hover-color, var(--primary-color, #1a73e8));\n    }\n    .accordion-header:focus-visible {\n      outline: 2px solid var(--ngx-acc-expanded-color, var(--primary-color, #1a73e8));\n      outline-offset: -2px;\n      box-shadow: 0 0 0 3px rgba(26, 115, 232, 0.2);\n      z-index: 2;\n    }\n    .accordion-item.expanded .accordion-header { \n      background: var(--ngx-acc-expanded-bg, var(--bg-primary, #ffffff)); \n      color: var(--ngx-acc-expanded-color, var(--primary-color, #1a73e8));\n    }\n    \n    .acc-icon { font-size: 16px; flex-shrink: 0; display: inline-flex; align-items: center; }\n    .acc-title { flex: 1; }\n    \n    .acc-chevron { \n      display: inline-flex;\n      align-items: center;\n      justify-content: center;\n      color: var(--ngx-acc-chevron-color, var(--text-secondary, #94a3b8));\n      transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1); \n      flex-shrink: 0; \n    }\n    .acc-chevron.open { \n      transform: rotate(90deg); \n      color: var(--ngx-acc-chevron-active-color, var(--primary-color, #1a73e8));\n    }\n\n    .accordion-body-wrapper {\n      max-height: 0;\n      opacity: 0;\n      overflow: hidden;\n      transition: max-height 0.3s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.25s ease-out;\n      box-sizing: border-box;\n    }\n    .accordion-body-wrapper.expanded {\n      max-height: 1000px;\n      opacity: 1;\n    }\n    \n    .accordion-body { \n      padding: 16px 20px 20px 20px; \n      font-size: 14px; \n      color: var(--ngx-acc-body-color, var(--text-primary, #334155)); \n      line-height: 1.6; \n      background: var(--ngx-acc-body-bg, var(--bg-primary, #ffffff)); \n      border-top: 1px solid var(--ngx-acc-border, var(--border-color, #e2e8f0)); \n    }\n  `]\n})\nexport class AccordionComponent {\n  items = input<AccordionItem[]>([]);\n  multi = input(false);\n\n  accordionItems = contentChildren(AccordionItemComponent);\n  private expanded = signal<Set<number>>(new Set());\n  private el = inject(ElementRef);\n\n  constructor() {\n    effect(() => {\n      const children = this.accordionItems();\n      const arrayItems = this.items();\n      const current = new Set<number>();\n      \n      if (children.length > 0) {\n        children.forEach((child, i) => {\n          if (child.expanded()) {\n            current.add(i);\n          }\n        });\n      } else {\n        arrayItems.forEach((item, i) => {\n          if (item.expanded) {\n            current.add(i);\n          }\n        });\n      }\n      \n      untracked(() => {\n        if (this.expanded().size === 0 && current.size > 0) {\n          this.expanded.set(current);\n        }\n      });\n    });\n  }\n\n  isExpanded(i: number): boolean {\n    return this.expanded().has(i);\n  }\n\n  toggle(i: number): void {\n    const s = new Set(this.expanded());\n    if (s.has(i)) {\n      s.delete(i);\n    } else {\n      if (!this.multi()) {\n        s.clear();\n      }\n      s.add(i);\n    }\n    this.expanded.set(s);\n  }\n\n  expandAll(): void {\n    const total = this.accordionItems().length > 0 ? this.accordionItems().length : this.items().length;\n    const s = new Set<number>();\n    for (let i = 0; i < total; i++) {\n      s.add(i);\n    }\n    this.expanded.set(s);\n  }\n\n  collapseAll(): void {\n    this.expanded.set(new Set());\n  }\n\n  expandItem(index: number): void {\n    const s = new Set(this.expanded());\n    if (!this.multi()) {\n      s.clear();\n    }\n    s.add(index);\n    this.expanded.set(s);\n  }\n\n  collapseItem(index: number): void {\n    const s = new Set(this.expanded());\n    s.delete(index);\n    this.expanded.set(s);\n  }\n\n  handleKeydown(event: KeyboardEvent, index: number) {\n    const total = this.accordionItems().length > 0 ? this.accordionItems().length : this.items().length;\n    let newIndex = -1;\n\n    if (event.key === 'ArrowDown') {\n      newIndex = (index + 1) % total;\n      while (newIndex !== index && this.isItemDisabled(newIndex)) {\n        newIndex = (newIndex + 1) % total;\n      }\n    } else if (event.key === 'ArrowUp') {\n      newIndex = (index - 1 + total) % total;\n      while (newIndex !== index && this.isItemDisabled(newIndex)) {\n        newIndex = (newIndex - 1 + total) % total;\n      }\n    } else if (event.key === 'Home') {\n      newIndex = 0;\n      while (newIndex < total && this.isItemDisabled(newIndex)) {\n        newIndex++;\n      }\n    } else if (event.key === 'End') {\n      newIndex = total - 1;\n      while (newIndex >= 0 && this.isItemDisabled(newIndex)) {\n        newIndex--;\n      }\n    }\n\n    if (newIndex !== -1 && newIndex !== index && !this.isItemDisabled(newIndex)) {\n      event.preventDefault();\n      // focus the new header button\n      const headers = this.el.nativeElement.querySelectorAll('.accordion-header');\n      const targetHeader = headers[newIndex] as HTMLElement;\n      targetHeader?.focus();\n    }\n  }\n\n  private isItemDisabled(index: number): boolean {\n    const children = this.accordionItems();\n    if (children.length > 0) {\n      return children[index].disabled();\n    }\n    const arrayItems = this.items();\n    return !!arrayItems[index]?.disabled;\n  }\n}\n","import { Component, input, output, signal, contentChildren, TemplateRef, inject, Directive } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\n\nexport interface StepperStep {\n  label: string;\n  description?: string;\n  icon?: string;\n  optional?: boolean;\n  state?: 'pending' | 'current' | 'complete' | 'error';\n}\n\n@Directive({\n  selector: '[ngxStepContent]',\n  standalone: true\n})\nexport class NgxStepContentDirective {\n  stepIndex = input.required<number | string>({ alias: 'ngxStepContent' });\n  templateRef = inject(TemplateRef);\n}\n\n@Component({\n  selector: 'ngx-stepper',\n  standalone: true,\n  imports: [NgTemplateOutlet],\n  template: `\n    <div class=\"ngx-stepper\" [class.stepper-vertical]=\"orientation() === 'vertical'\">\n      @for (step of steps(); track step.label; let i = $index) {\n        <div \n          class=\"stepper-step\" \n          [class.completed]=\"i < currentStep()\" \n          [class.active]=\"i === currentStep()\" \n          [class.error]=\"step.state === 'error'\"\n          (click)=\"selectStep(i)\"\n        >\n          <div class=\"step-header\">\n            <div class=\"step-indicator\">\n              @if (i < currentStep()) {\n                <span class=\"step-check\">✓</span>\n              } @else if (step.state === 'error') {\n                <span class=\"step-error-icon\">✕</span>\n              } @else {\n                <span class=\"step-number\">{{ i + 1 }}</span>\n              }\n            </div>\n            @if (i < steps().length - 1) {\n              <div class=\"step-connector\">\n                <div class=\"step-connector-fill\" [class.filled]=\"i < currentStep()\"></div>\n              </div>\n            }\n          </div>\n          <div class=\"step-content\">\n            <div class=\"step-label\">{{ step.label }}</div>\n            @if (step.description) { <div class=\"step-desc\">{{ step.description }}</div> }\n            @if (step.optional) { <div class=\"step-optional\">Optional</div> }\n          </div>\n        </div>\n      }\n    </div>\n    @if (showContent()) {\n      <div class=\"stepper-content\">\n        @if (resolveStepTemplate(currentStep()); as activeTpl) {\n          <ng-container *ngTemplateOutlet=\"activeTpl\" />\n        } @else {\n          <ng-content />\n        }\n      </div>\n      @if (showActions()) {\n        <div class=\"stepper-actions\">\n          <button class=\"stepper-btn stepper-btn-back\" [disabled]=\"currentStep() === 0\" (click)=\"back()\">← Back</button>\n          <button class=\"stepper-btn stepper-btn-next\" [disabled]=\"currentStep() === steps().length - 1\" (click)=\"next()\">\n            {{ currentStep() === steps().length - 1 ? 'Finish' : 'Next →' }}\n          </button>\n        </div>\n      }\n    }\n  `,\n  styles: [`\n    :host { display: block; }\n    .ngx-stepper { display: flex; align-items: flex-start; gap: 0; }\n    .ngx-stepper.stepper-vertical { flex-direction: column; }\n    \n    .stepper-step { \n      display: flex; \n      flex-direction: column; \n      align-items: center; \n      flex: 1; \n      cursor: pointer;\n      user-select: none;\n    }\n    .stepper-vertical .stepper-step { flex-direction: row; flex: initial; align-items: flex-start; width: 100%; }\n    \n    .step-header { display: flex; align-items: center; flex-direction: column; width: 100%; position: relative; }\n    .stepper-vertical .step-header { flex-direction: column; align-items: center; margin-right: 14px; flex-shrink: 0; width: 32px; }\n    \n    .step-indicator {\n      width: 32px; \n      height: 32px; \n      border-radius: 50%; \n      display: flex; \n      align-items: center; \n      justify-content: center;\n      background: var(--ngx-stepper-pending-bg, var(--bg-secondary, #f8fafc)); \n      color: var(--ngx-stepper-pending-color, var(--text-secondary, #94a3b8));\n      border: 2px solid var(--ngx-stepper-pending-border, var(--border-color, #e2e8f0)); \n      font-size: 13px; \n      font-weight: 700;\n      transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1); \n      flex-shrink: 0; \n      z-index: 1;\n    }\n    \n    .active .step-indicator { \n      background: var(--ngx-stepper-active-bg, var(--primary-color, #1a73e8)); \n      color: #fff; \n      border-color: var(--ngx-stepper-active-bg, var(--primary-color, #1a73e8)); \n      transform: scale(1.1);\n      box-shadow: 0 4px 10px rgba(26, 115, 232, 0.2);\n    }\n    .completed .step-indicator { \n      background: var(--ngx-stepper-complete-bg, var(--success-color, #10b981)); \n      color: #fff; \n      border-color: var(--ngx-stepper-complete-bg, var(--success-color, #10b981)); \n    }\n    .error .step-indicator { \n      background: var(--ngx-stepper-error-bg, var(--error-color, #ef4444)); \n      color: #fff; \n      border-color: var(--ngx-stepper-error-bg, var(--error-color, #ef4444)); \n    }\n    \n    .step-check, .step-error-icon {\n      font-size: 14px;\n      font-weight: 800;\n    }\n\n    .step-connector { \n      flex: 1; \n      height: 3px; \n      background: var(--ngx-stepper-line, var(--border-color, #e2e8f0)); \n      width: 100%; \n      margin: 16px 0 0; \n      position: absolute;\n      left: calc(50% + 16px);\n      right: calc(-50% + 16px);\n      z-index: 0;\n      overflow: hidden;\n    }\n    .stepper-vertical .step-connector { \n      width: 3px; \n      height: 32px; \n      margin: 0; \n      position: relative;\n      left: 0;\n      top: 4px;\n      bottom: 4px;\n    }\n    \n    .step-connector-fill {\n      position: absolute;\n      top: 0;\n      left: 0;\n      width: 0;\n      height: 100%;\n      background: var(--ngx-stepper-complete-bg, var(--success-color, #10b981));\n      transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n    }\n    .stepper-vertical .step-connector-fill {\n      width: 100%;\n      height: 0;\n      transition: height 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n    }\n    .step-connector-fill.filled {\n      width: 100%;\n    }\n    .stepper-vertical .step-connector-fill.filled {\n      height: 100%;\n    }\n\n    .step-content { text-align: center; padding: 8px 4px 0; }\n    .stepper-vertical .step-content { text-align: left; padding: 4px 0 24px; }\n    \n    .step-label { \n      font-size: 13px; \n      font-weight: 600; \n      color: var(--ngx-stepper-label, var(--text-primary, #0f172a)); \n      transition: color 0.2s ease;\n    }\n    .active .step-label { color: var(--ngx-stepper-active-bg, var(--primary-color, #1a73e8)); }\n    .step-desc { font-size: 11px; color: var(--text-secondary, #64748b); margin-top: 2px; }\n    .step-optional { font-size: 10px; color: var(--text-secondary, #94a3b8); font-style: italic; margin-top: 2px; }\n    \n    .stepper-content { \n      padding: 24px; \n      background: var(--bg-secondary, #f8fafc);\n      border-radius: 12px;\n      border: 1px dashed var(--border-color, #e2e8f0); \n      margin-top: 20px; \n      min-height: 80px;\n    }\n    .stepper-actions { display: flex; gap: 10px; margin-top: 16px; justify-content: flex-end; }\n    \n    .stepper-btn { \n      padding: 8px 18px; \n      font-size: 13px; \n      font-weight: 600; \n      border-radius: 8px; \n      cursor: pointer; \n      font-family: inherit; \n      transition: all 0.2s;\n    }\n    .stepper-btn-back { \n      background: var(--bg-primary, #ffffff); \n      color: var(--text-secondary, #475569); \n      border: 1px solid var(--border-color, #cbd5e1); \n    }\n    .stepper-btn-back:hover:not(:disabled) { \n      background: var(--bg-secondary, #f1f5f9); \n    }\n    .stepper-btn-next { \n      background: var(--primary-color, #1a73e8); \n      color: #fff; \n      border: 1px solid var(--primary-color, #1a73e8); \n    }\n    .stepper-btn-next:hover:not(:disabled) { \n      background: var(--ngx-btn-primary-hover, #1557b0); \n    }\n    .stepper-btn:disabled { opacity: 0.45; cursor: not-allowed; }\n  `]\n})\nexport class StepperComponent {\n  steps = input<StepperStep[]>([]);\n  currentStep = signal(0);\n  orientation = input<'horizontal' | 'vertical'>('horizontal');\n  showContent = input(true);\n  showActions = input(true);\n  linear = input(true);\n\n  stepTemplates = contentChildren(NgxStepContentDirective);\n  stepChange = output<number>();\n\n  next() { \n    if (this.currentStep() < this.steps().length - 1) { \n      this.currentStep.update(v => v + 1); \n      this.stepChange.emit(this.currentStep()); \n    } \n  }\n  \n  back() { \n    if (this.currentStep() > 0) { \n      this.currentStep.update(v => v - 1); \n      this.stepChange.emit(this.currentStep()); \n    } \n  }\n\n  selectStep(index: number) {\n    if (index === this.currentStep()) return;\n    \n    const step = this.steps()[index];\n    if (!step) return;\n    \n    if (this.linear()) {\n      const current = this.currentStep();\n      // Allow moving back to any previous step, or moving forward exactly to the next step\n      if (index <= current || index === current + 1) {\n        this.currentStep.set(index);\n        this.stepChange.emit(index);\n      }\n    } else {\n      this.currentStep.set(index);\n      this.stepChange.emit(index);\n    }\n  }\n\n  resolveStepTemplate(index: number): TemplateRef<any> | null {\n    const match = this.stepTemplates().find(t => Number(t.stepIndex()) === index);\n    return match ? match.templateRef : null;\n  }\n}\n","import { Component, effect, input, output, signal } from '@angular/core';\n\n@Component({\n  selector: 'ngx-splitter',\n  standalone: true,\n  template: `\n    <div class=\"ngx-splitter\" [class.splitter-vertical]=\"orientation() === 'vertical'\" [style]=\"hostStyle()\">\n      <div class=\"split-pane split-pane-first\" style=\"flex: 0 0 auto\" [style.flexBasis]=\"firstSize()\">\n        <ng-content select=\"[pane1]\" />\n      </div>\n      <div class=\"split-divider\" (mousedown)=\"startDrag($event)\" [class.dragging]=\"dragging()\" title=\"Drag to resize\">\n        <span class=\"split-divider-grip\"></span>\n      </div>\n      <div class=\"split-pane split-pane-second\" style=\"flex: 1 1 auto\">\n        <ng-content select=\"[pane2]\" />\n      </div>\n    </div>\n  `,\n  styles: [`\n    :host { display: flex; flex: 1 1 auto; min-height: 0; }\n    .ngx-splitter { display: flex; flex: 1; overflow: hidden; }\n    .ngx-splitter.splitter-vertical { flex-direction: column; }\n    .split-pane { overflow: auto; min-width: 0; min-height: 0; }\n    .split-divider {\n      flex: 0 0 5px; background: var(--ngx-splitter-divider, #dee2e6);\n      cursor: col-resize; display: flex; align-items: center; justify-content: center;\n      transition: background 0.1s; position: relative;\n    }\n    .splitter-vertical .split-divider { cursor: row-resize; height: 5px; flex: 0 0 5px; }\n    .split-divider:hover, .split-divider.dragging { background: var(--ngx-splitter-divider-hover, #1a73e8); }\n    .split-divider-grip { width: 3px; height: 20px; background: rgba(255,255,255,0.5); border-radius: 2px; }\n    .splitter-vertical .split-divider-grip { width: 20px; height: 3px; }\n  `]\n})\nexport class SplitterComponent {\n  orientation = input<'horizontal' | 'vertical'>('horizontal');\n  size = input<string | number | null>(null);\n  initialSize = input<string | number>('50%');\n  min = input(60);\n  firstSize = signal('50%');\n  dragging = signal(false);\n  sizeChange = output<string>();\n  private startX = 0;\n  private startSize = 0;\n  private containerSize = 0;\n  private configuredSize = '';\n\n  constructor() {\n    effect(() => {\n      const nextSize = this.normalizeSize(this.size() ?? this.initialSize());\n      if (nextSize !== this.configuredSize) {\n        this.configuredSize = nextSize;\n        this.firstSize.set(nextSize);\n      }\n    });\n  }\n\n  hostStyle() { return this.orientation() === 'horizontal' ? 'width:100%;height:100%' : 'width:100%;height:100%;flex-direction:column'; }\n\n  startDrag(e: MouseEvent): void {\n    e.preventDefault();\n    this.dragging.set(true);\n    this.startX = this.orientation() === 'horizontal' ? e.clientX : e.clientY;\n    const host = (e.currentTarget as HTMLElement).closest('.ngx-splitter') as HTMLElement | null;\n    if (!host) {\n      this.dragging.set(false);\n      return;\n    }\n\n    this.containerSize = this.orientation() === 'horizontal' ? host.offsetWidth : host.offsetHeight;\n    this.startSize = this.toPixels(this.firstSize(), this.containerSize);\n    const move = (me: MouseEvent) => {\n      const current = this.orientation() === 'horizontal' ? me.clientX : me.clientY;\n      const delta = current - this.startX;\n      const min = Math.max(0, this.min());\n      const newSize = Math.max(min, Math.min(this.containerSize - min, this.startSize + delta));\n      const nextSize = `${newSize}px`;\n      this.firstSize.set(nextSize);\n      this.sizeChange.emit(nextSize);\n    };\n    const up = () => { this.dragging.set(false); document.removeEventListener('mousemove', move); document.removeEventListener('mouseup', up); };\n    document.addEventListener('mousemove', move);\n    document.addEventListener('mouseup', up);\n  }\n\n  private normalizeSize(value: string | number): string {\n    if (typeof value === 'number') {\n      return `${Math.max(0, value)}px`;\n    }\n\n    const trimmed = value.trim();\n    if (trimmed.endsWith('%') || trimmed.endsWith('px')) {\n      return trimmed;\n    }\n\n    const numeric = Number(trimmed);\n    return Number.isFinite(numeric) ? `${Math.max(0, numeric)}px` : '50%';\n  }\n\n  private toPixels(value: string, containerSize: number): number {\n    return value.endsWith('%')\n      ? (parseFloat(value) / 100) * containerSize\n      : parseFloat(value);\n  }\n}\n","import {\n  Component, input, signal, output, computed, effect, ChangeDetectionStrategy\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DashboardItem, DashboardLayoutChangeEvent, DashboardPanelActionEvent } from './models';\n\n@Component({\n  selector: 'ngx-dashboard-layout',\n  standalone: true,\n  imports: [CommonModule],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <div \n      class=\"ngx-dashboard-wrapper\" \n      [class.dark]=\"theme() === 'dark'\"\n      [class.has-maximized]=\"hasMaximizedPanel()\"\n    >\n      <div \n        class=\"ngx-dashboard-grid\"\n        [style.grid-template-columns]=\"'repeat(' + columns() + ', 1fr)'\"\n        [style.grid-auto-rows]=\"rowHeight()\"\n        (dragover)=\"onDragOverGrid($event)\"\n        (drop)=\"onDrop($event)\"\n      >\n        <!-- Background grid cells for drop snapping guide -->\n        @if (isDragging()) {\n          <div class=\"grid-background-overlay\">\n            @for (cell of bgCells(); track cell.key) {\n              <div \n                class=\"bg-cell-target\"\n                [style.grid-column-start]=\"cell.col + 1\"\n                [style.grid-row-start]=\"cell.row + 1\"\n                (dragover)=\"onDragOverCell($event)\"\n                (dragenter)=\"onDragEnterCell($event, cell.col, cell.row)\"\n              ></div>\n            }\n          </div>\n          \n          <!-- Drop Position Placeholder -->\n          @if (dragPlaceholder(); as placeholder) {\n            <div \n              class=\"drag-placeholder-indicator\"\n              [style.grid-column-start]=\"placeholder.col + 1\"\n              [style.grid-column-end]=\"placeholder.col + 1 + placeholder.colSpan\"\n              [style.grid-row-start]=\"placeholder.row + 1\"\n              [style.grid-row-end]=\"placeholder.row + 1 + placeholder.rowSpan\"\n            >\n              <div class=\"placeholder-inner\"></div>\n            </div>\n          }\n        }\n\n        <!-- Active Dashboard Cards -->\n        @for (item of itemsState(); track item.id) {\n          <div \n            class=\"dashboard-panel-card\"\n            [class.maximized]=\"item.maximized\"\n            [class.collapsed]=\"item.collapsed\"\n            [class.dragging-active]=\"activeDraggingId() === item.id\"\n            [style.grid-column-start]=\"item.maximized ? 1 : item.col + 1\"\n            [style.grid-column-end]=\"item.maximized ? columns() + 1 : item.col + 1 + item.colSpan\"\n            [style.grid-row-start]=\"item.maximized ? 1 : item.row + 1\"\n            [style.grid-row-end]=\"item.maximized ? 'span 4' : item.row + 1 + item.rowSpan\"\n            [attr.draggable]=\"(allowDragging() && item.draggable !== false && !item.maximized && !item.collapsed) ? 'true' : 'false'\"\n            (dragstart)=\"onDragStart($event, item)\"\n            (dragend)=\"onDragEnd()\"\n          >\n            <!-- Panel Header -->\n            <div \n              class=\"panel-header\" \n              [class.draggable-handle]=\"allowDragging() && item.draggable !== false && !item.maximized && !item.collapsed\"\n            >\n              <div class=\"panel-title-group\">\n                <span class=\"panel-icon-dot\" [style.background-color]=\"getCategoryColor(item.category)\"></span>\n                <span class=\"panel-title\" [title]=\"item.title\">{{ item.title }}</span>\n              </div>\n\n              <div class=\"panel-actions\" (click)=\"$event.stopPropagation()\">\n                <!-- Settings Action -->\n                <button class=\"action-btn\" (click)=\"emitPanelAction(item, 'settings')\" title=\"Panel Settings\">\n                  ⚙️\n                </button>\n                \n                <!-- Minimize / Expand Toggle -->\n                <button class=\"action-btn\" (click)=\"toggleCollapse(item)\" [title]=\"item.collapsed ? 'Expand Content' : 'Collapse Content'\">\n                  {{ item.collapsed ? '▼' : '▲' }}\n                </button>\n\n                <!-- Maximize / Restore Toggle -->\n                <button class=\"action-btn\" (click)=\"toggleMaximize(item)\" [title]=\"item.maximized ? 'Restore View' : 'Maximize Panel'\">\n                  {{ item.maximized ? '🗗' : '🗖' }}\n                </button>\n\n                <!-- Close Panel -->\n                <button class=\"action-btn close-btn\" (click)=\"closePanel(item)\" title=\"Close Panel\">\n                  ✕\n                </button>\n              </div>\n            </div>\n\n            <!-- Panel Body -->\n            <div class=\"panel-content-body\">\n              <ng-content [select]=\"'[panel-id=' + item.id + ']'\"></ng-content>\n              \n              <!-- Fallback Content if no projection matches -->\n              <div class=\"fallback-placeholder\">\n                <span class=\"fallback-icon\">▦</span>\n                <h4>{{ item.title }}</h4>\n                <p>{{ item.description || 'Provide a matching projection container with attribute panel-id=\"' + item.id + '\"' }}</p>\n              </div>\n            </div>\n\n            <!-- Resize Grip Handle -->\n            @if (allowResizing() && item.resizable !== false && !item.maximized && !item.collapsed) {\n              <div \n                class=\"resize-handle\"\n                (mousedown)=\"onResizeStart($event, item)\"\n              >\n                <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\">\n                  <path d=\"M10,0 L0,10 M10,4 L4,10 M10,8 L8,10\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" fill=\"none\" opacity=\"0.3\"></path>\n                </svg>\n              </div>\n            }\n          </div>\n        }\n      </div>\n    </div>\n  `,\n  styles: [`\n    :host {\n      display: block;\n      width: 100%;\n      height: 100%;\n    }\n\n    .ngx-dashboard-wrapper {\n      position: relative;\n      width: 100%;\n      height: 100%;\n      background: var(--bg-primary, #f8fafc);\n      padding: 16px;\n      box-sizing: border-box;\n      overflow-y: auto;\n      transition: background 0.3s ease;\n    }\n\n    .ngx-dashboard-wrapper.dark {\n      background: #0f172a;\n    }\n\n    .ngx-dashboard-grid {\n      position: relative;\n      display: grid;\n      gap: 16px;\n      width: 100%;\n      transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n    }\n\n    /* Grid Background Overlay for Snapping Hints */\n    .grid-background-overlay {\n      position: absolute;\n      top: 0;\n      left: 0;\n      right: 0;\n      bottom: 0;\n      display: grid;\n      grid-template-columns: inherit;\n      grid-auto-rows: inherit;\n      gap: inherit;\n      pointer-events: none;\n      z-index: 1;\n    }\n\n    .bg-cell-target {\n      border: 1px dashed var(--border-color, #cbd5e1);\n      border-radius: 8px;\n      background: rgba(148, 163, 184, 0.02);\n      pointer-events: auto;\n      box-sizing: border-box;\n    }\n    .ngx-dashboard-wrapper.dark .bg-cell-target {\n      border-color: #334155;\n      background: rgba(30, 41, 59, 0.1);\n    }\n\n    /* Drag Placeholder Box */\n    .drag-placeholder-indicator {\n      border-radius: 12px;\n      border: 2px dashed var(--primary-color, #4f46e5);\n      background: var(--primary-glow, rgba(79, 70, 229, 0.05));\n      z-index: 2;\n      box-sizing: border-box;\n      animation: pulsePlaceholder 1.5s infinite ease-in-out;\n    }\n\n    @keyframes pulsePlaceholder {\n      0%, 100% { opacity: 0.6; }\n      50% { opacity: 0.9; }\n    }\n\n    .placeholder-inner {\n      width: 100%;\n      height: 100%;\n    }\n\n    /* Panel Card Styling */\n    .dashboard-panel-card {\n      position: relative;\n      display: flex;\n      flex-direction: column;\n      background: var(--bg-secondary, #ffffff);\n      border: 1px solid var(--border-color, #e2e8f0);\n      border-radius: 12px;\n      box-shadow: var(--shadow-sm, 0 1px 3px rgba(0, 0, 0, 0.05));\n      overflow: hidden;\n      z-index: 3;\n      transition: box-shadow 0.25s, transform 0.25s;\n      box-sizing: border-box;\n    }\n    .ngx-dashboard-wrapper.dark .dashboard-panel-card {\n      background: #1e293b;\n      border-color: #334155;\n      box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.2);\n    }\n\n    .dashboard-panel-card:hover {\n      box-shadow: var(--shadow-md, 0 4px 6px -1px rgba(0,0,0,0.08));\n    }\n\n    .dashboard-panel-card.dragging-active {\n      opacity: 0.4;\n      border-style: dashed;\n      border-color: var(--primary-color, #4f46e5);\n    }\n\n    /* Maximized override state */\n    .dashboard-panel-card.maximized {\n      grid-column: 1 / -1 !important;\n      grid-row: auto !important;\n      min-height: 500px;\n      z-index: 50;\n      box-shadow: var(--shadow-xl, 0 20px 25px -5px rgba(0, 0, 0, 0.15));\n    }\n    .ngx-dashboard-wrapper.has-maximized .dashboard-panel-card:not(.maximized) {\n      display: none !important;\n    }\n\n    /* Collapsed state */\n    .dashboard-panel-card.collapsed {\n      grid-row-end: span 1 !important;\n      height: fit-content !important;\n      min-height: 0 !important;\n    }\n    .dashboard-panel-card.collapsed .panel-content-body {\n      display: none !important;\n    }\n    .dashboard-panel-card.collapsed .resize-handle {\n      display: none !important;\n    }\n\n    /* Header styling */\n    .panel-header {\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n      padding: 12px 16px;\n      border-bottom: 1px solid var(--border-color, #e2e8f0);\n      background: var(--border-light, #f8fafc);\n      user-select: none;\n      gap: 12px;\n    }\n    .ngx-dashboard-wrapper.dark .panel-header {\n      background: #1e293b;\n      border-bottom-color: #334155;\n    }\n\n    .panel-header.draggable-handle {\n      cursor: grab;\n    }\n    .panel-header.draggable-handle:active {\n      cursor: grabbing;\n    }\n\n    .panel-title-group {\n      display: flex;\n      align-items: center;\n      gap: 10px;\n      min-width: 0;\n    }\n\n    .panel-icon-dot {\n      width: 8px;\n      height: 8px;\n      border-radius: 50%;\n      flex-shrink: 0;\n    }\n\n    .panel-title {\n      font-size: 13px;\n      font-weight: 700;\n      color: var(--text-primary, #1e293b);\n      white-space: nowrap;\n      overflow: hidden;\n      text-overflow: ellipsis;\n    }\n    .ngx-dashboard-wrapper.dark .panel-title {\n      color: #f8fafc;\n    }\n\n    .panel-actions {\n      display: flex;\n      align-items: center;\n      gap: 4px;\n    }\n\n    .action-btn {\n      background: none;\n      border: none;\n      cursor: pointer;\n      font-size: 11px;\n      padding: 4px;\n      border-radius: 4px;\n      color: var(--text-secondary, #64748b);\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      transition: all 0.15s;\n    }\n    .action-btn:hover {\n      background: var(--border-color, #cbd5e1);\n      color: var(--text-primary, #0f172a);\n    }\n    .ngx-dashboard-wrapper.dark .action-btn:hover {\n      background: #334155;\n      color: #ffffff;\n    }\n\n    .action-btn.close-btn:hover {\n      background: #fca5a5;\n      color: #991b1b;\n    }\n\n    /* Content Body styling */\n    .panel-content-body {\n      flex: 1;\n      position: relative;\n      overflow: auto;\n      box-sizing: border-box;\n    }\n\n    /* Projected content wrapper fallback style */\n    .fallback-placeholder {\n      display: flex;\n      flex-direction: column;\n      align-items: center;\n      justify-content: center;\n      height: 100%;\n      padding: 24px;\n      text-align: center;\n      color: var(--text-secondary, #64748b);\n      font-family: var(--ngx-font-family, sans-serif);\n      box-sizing: border-box;\n    }\n    .ngx-dashboard-wrapper.dark .fallback-placeholder {\n      color: #94a3b8;\n    }\n\n    .fallback-icon {\n      font-size: 28px;\n      margin-bottom: 8px;\n      opacity: 0.5;\n    }\n\n    .fallback-placeholder h4 {\n      margin: 0 0 4px;\n      font-size: 13px;\n      font-weight: 600;\n    }\n\n    .fallback-placeholder p {\n      margin: 0;\n      font-size: 11px;\n      line-height: 1.4;\n      max-width: 250px;\n    }\n\n    /* Custom layout content is projected so we hide default placeholder when projected content is active */\n    .panel-content-body:has([panel-id]) .fallback-placeholder {\n      display: none !important;\n    }\n\n    /* Resize Grip Handle */\n    .resize-handle {\n      position: absolute;\n      right: 2px;\n      bottom: 2px;\n      width: 14px;\n      height: 14px;\n      cursor: nwse-resize;\n      display: flex;\n      align-items: flex-end;\n      justify-content: flex-end;\n      color: var(--text-secondary, #94a3b8);\n      z-index: 5;\n    }\n    .resize-handle:hover {\n      color: var(--primary-color, #4f46e5);\n    }\n  `]\n})\nexport class DashboardLayoutComponent {\n  // Inputs\n  items = input<DashboardItem[]>([]);\n  columns = input<number>(12);\n  rowHeight = input<string>('150px');\n  theme = input<'light' | 'dark'>('light');\n  allowDragging = input<boolean>(true);\n  allowResizing = input<boolean>(true);\n\n  // Outputs\n  layoutChange = output<DashboardLayoutChangeEvent>();\n  panelAction = output<DashboardPanelActionEvent>();\n\n  // State Signals\n  itemsState = signal<DashboardItem[]>([]);\n  isDragging = signal<boolean>(false);\n  activeDraggingId = signal<string | null>(null);\n  dragPlaceholder = signal<{ col: number; row: number; colSpan: number; rowSpan: number } | null>(null);\n\n  constructor() {\n    effect(() => {\n      this.itemsState.set(this.items());\n    }, { allowSignalWrites: true });\n  }\n\n  // Detect if any panel is currently maximized\n  hasMaximizedPanel = computed(() => {\n    return this.itemsState().some(it => it.maximized);\n  });\n\n  // Calculate dynamic rows needed in background grid\n  maxRows = computed(() => {\n    let max = 6;\n    for (const item of this.itemsState()) {\n      if (!item.maximized) {\n        const bottom = item.row + item.rowSpan;\n        if (bottom > max) {\n          max = bottom;\n        }\n      }\n    }\n    return max + 2; // Always keep 2 empty grid rows buffer space\n  });\n\n  // Generate grid mapping cells\n  bgCells = computed(() => {\n    const cols = this.columns();\n    const rows = this.maxRows();\n    const cells: { key: string; col: number; row: number }[] = [];\n    for (let r = 0; r < rows; r++) {\n      for (let c = 0; c < cols; c++) {\n        cells.push({ key: `${r}-${c}`, col: c, row: r });\n      }\n    }\n    return cells;\n  });\n\n  // Helper colors mapping\n  getCategoryColor(cat?: string): string {\n    if (!cat) return '#6366f1';\n    switch (cat.toLowerCase()) {\n      case 'chart': return '#3b82f6'; // Blue\n      case 'data': return '#10b981'; // Green\n      case 'feed': return '#f59e0b'; // Amber\n      case 'metric': return '#ec4899'; // Pink\n      case 'alert': return '#ef4444'; // Red\n      default: return '#8b5cf6'; // Violet\n    }\n  }\n\n  // Native HTML5 Drag events\n  onDragStart(event: DragEvent, item: DashboardItem): void {\n    if (!this.allowDragging() || item.draggable === false || item.maximized || item.collapsed) return;\n    \n    this.activeDraggingId.set(item.id);\n    this.isDragging.set(true);\n\n    if (event.dataTransfer) {\n      event.dataTransfer.setData('text/plain', item.id);\n      event.dataTransfer.effectAllowed = 'move';\n    }\n\n    // Set initial placeholder\n    this.dragPlaceholder.set({\n      col: item.col,\n      row: item.row,\n      colSpan: item.colSpan,\n      rowSpan: item.rowSpan\n    });\n  }\n\n  onDragEnd(): void {\n    this.isDragging.set(false);\n    this.activeDraggingId.set(null);\n    this.dragPlaceholder.set(null);\n  }\n\n  onDragOverGrid(event: DragEvent): void {\n    event.preventDefault();\n  }\n\n  onDragOverCell(event: DragEvent): void {\n    event.preventDefault();\n  }\n\n  onDragEnterCell(event: DragEvent, col: number, row: number): void {\n    event.preventDefault();\n    const draggedId = this.activeDraggingId();\n    if (!draggedId) return;\n\n    const items = this.itemsState();\n    const item = items.find(it => it.id === draggedId);\n    if (!item) return;\n\n    // Calculate snapped coordinates based on boundaries\n    let targetCol = Math.max(0, Math.min(this.columns() - item.colSpan, col));\n    let targetRow = Math.max(0, row);\n\n    // Update placeholder\n    this.dragPlaceholder.set({\n      col: targetCol,\n      row: targetRow,\n      colSpan: item.colSpan,\n      rowSpan: item.rowSpan\n    });\n  }\n\n  onDrop(event: DragEvent): void {\n    event.preventDefault();\n    const placeholder = this.dragPlaceholder();\n    const draggedId = this.activeDraggingId();\n\n    if (placeholder && draggedId) {\n      this.itemsState.update(items => {\n        return items.map(it => {\n          if (it.id === draggedId) {\n            return {\n              ...it,\n              col: placeholder.col,\n              row: placeholder.row\n            };\n          }\n          return it;\n        });\n      });\n      this.layoutChange.emit({ items: this.itemsState() });\n    }\n\n    this.onDragEnd();\n  }\n\n  // Panel resizing handler\n  onResizeStart(event: MouseEvent, item: DashboardItem): void {\n    event.preventDefault();\n    event.stopPropagation();\n\n    if (!this.allowResizing() || item.resizable === false || item.maximized || item.collapsed) return;\n\n    const startX = event.pageX;\n    const startY = event.pageY;\n    const startColSpan = item.colSpan;\n    const startRowSpan = item.rowSpan;\n\n    // Find the enclosing element bounding boxes\n    const panelEl = (event.target as HTMLElement).closest('.dashboard-panel-card');\n    if (!panelEl) return;\n\n    const startWidth = panelEl.clientWidth;\n    const startHeight = panelEl.clientHeight;\n\n    // Calculate approximate cell bounds\n    const colWidth = startWidth / startColSpan;\n    const rowHeight = startHeight / startRowSpan;\n\n    const onMouseMove = (moveEvent: MouseEvent) => {\n      const deltaX = moveEvent.pageX - startX;\n      const deltaY = moveEvent.pageY - startY;\n\n      let newColSpan = Math.round((startWidth + deltaX) / colWidth);\n      newColSpan = Math.max(item.minColSpan || 1, Math.min(this.columns() - item.col, newColSpan));\n      if (item.maxColSpan) {\n        newColSpan = Math.min(item.maxColSpan, newColSpan);\n      }\n\n      let newRowSpan = Math.round((startHeight + deltaY) / rowHeight);\n      newRowSpan = Math.max(item.minRowSpan || 1, newRowSpan);\n      if (item.maxRowSpan) {\n        newRowSpan = Math.min(item.maxRowSpan, newRowSpan);\n      }\n\n      if (newColSpan !== item.colSpan || newRowSpan !== item.rowSpan) {\n        this.itemsState.update(items => {\n          return items.map(it => {\n            if (it.id === item.id) {\n              return { ...it, colSpan: newColSpan, rowSpan: newRowSpan };\n            }\n            return it;\n          });\n        });\n      }\n    };\n\n    const onMouseUp = () => {\n      document.removeEventListener('mousemove', onMouseMove);\n      document.removeEventListener('mouseup', onMouseUp);\n      this.layoutChange.emit({ items: this.itemsState() });\n    };\n\n    document.addEventListener('mousemove', onMouseMove);\n    document.addEventListener('mouseup', onMouseUp);\n  }\n\n  // Panel Control Actions\n  toggleCollapse(item: DashboardItem): void {\n    const collapsed = !item.collapsed;\n    this.itemsState.update(items => {\n      return items.map(it => {\n        if (it.id === item.id) {\n          return { ...it, collapsed };\n        }\n        return it;\n      });\n    });\n    this.panelAction.emit({\n      panelId: item.id,\n      action: collapsed ? 'minimize' : 'restore',\n      item: { ...item, collapsed }\n    });\n    this.layoutChange.emit({ items: this.itemsState() });\n  }\n\n  toggleMaximize(item: DashboardItem): void {\n    const maximized = !item.maximized;\n    this.itemsState.update(items => {\n      return items.map(it => {\n        if (it.id === item.id) {\n          return { ...it, maximized };\n        }\n        return it;\n      });\n    });\n    this.panelAction.emit({\n      panelId: item.id,\n      action: maximized ? 'maximize' : 'restore',\n      item: { ...item, maximized }\n    });\n  }\n\n  closePanel(item: DashboardItem): void {\n    this.itemsState.update(items => items.filter(it => it.id !== item.id));\n    this.panelAction.emit({\n      panelId: item.id,\n      action: 'close',\n      item\n    });\n    this.layoutChange.emit({ items: this.itemsState() });\n  }\n\n  emitPanelAction(item: DashboardItem, action: 'settings'): void {\n    this.panelAction.emit({\n      panelId: item.id,\n      action,\n      item\n    });\n  }\n}\n","import {\n  Component,\n  ChangeDetectionStrategy,\n  input,\n  output,\n  signal,\n  computed,\n  OnInit,\n  OnDestroy,\n  TemplateRef,\n  HostListener,\n  effect,\n  untracked,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n  selector: 'ngx-carousel',\n  standalone: true,\n  imports: [CommonModule],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <div\n      class=\"ngx-carousel\"\n      [class.dark]=\"theme() === 'dark'\"\n      [attr.id]=\"id()\"\n      (keydown)=\"onKeyDown($event)\"\n      tabindex=\"0\"\n      (mouseenter)=\"onMouseEnter()\"\n      (mouseleave)=\"onMouseLeave()\"\n    >\n      <div\n        class=\"ngx-carousel__stage\"\n        (touchstart)=\"onTouchStart($event)\"\n        (touchend)=\"onTouchEnd($event)\"\n      >\n        @for (item of items(); track $index) {\n          <div\n            class=\"ngx-carousel__slide\"\n            [class]=\"getSlideClass($index)\"\n          >\n            @if (itemTemplate()) {\n              <ng-container *ngTemplateOutlet=\"itemTemplate()!; context: { $implicit: item, index: $index }\"></ng-container>\n            } @else {\n              <!-- Default Image layout -->\n              <img [src]=\"item.url\" [alt]=\"item.title || 'Slide ' + ($index + 1)\" class=\"ngx-carousel__img\" />\n              @if (item.title || item.caption) {\n                <div class=\"ngx-carousel__caption-card\">\n                  @if (item.title) {\n                    <h3 class=\"ngx-carousel__caption-title\">{{ item.title }}</h3>\n                  }\n                  @if (item.caption) {\n                    <p class=\"ngx-carousel__caption-desc\">{{ item.caption }}</p>\n                  }\n                </div>\n              }\n            }\n          </div>\n        }\n      </div>\n\n      <!-- Controls -->\n      @if (showControls() && items().length > 1) {\n        <button\n          class=\"ngx-carousel__control prev\"\n          (click)=\"prevSlide()\"\n          aria-label=\"Previous slide\"\n        >\n          <svg viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\">\n            <polyline points=\"15 18 9 12 15 6\" />\n          </svg>\n        </button>\n        <button\n          class=\"ngx-carousel__control next\"\n          (click)=\"nextSlide()\"\n          aria-label=\"Next slide\"\n        >\n          <svg viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\">\n            <polyline points=\"9 18 15 12 9 6\" />\n          </svg>\n        </button>\n      }\n\n      <!-- Indicators -->\n      @if (showIndicators() && items().length > 1) {\n        <div class=\"ngx-carousel__indicators\">\n          @for (item of items(); track $index) {\n            <button\n              class=\"ngx-carousel__indicator\"\n              [class.active]=\"$index === activeIndex()\"\n              (click)=\"goToSlide($index)\"\n              [attr.aria-label]=\"'Go to slide ' + ($index + 1)\"\n            ></button>\n          }\n        </div>\n      }\n    </div>\n  `,\n  styles: [`\n    :host {\n      display: block;\n      width: 100%;\n    }\n\n    .ngx-carousel {\n      position: relative;\n      width: 100%;\n      border-radius: 16px;\n      overflow: hidden;\n      outline: none;\n      background: #f1f5f9;\n      box-shadow: \n        0 10px 25px -5px rgba(0, 0, 0, 0.05),\n        0 8px 10px -6px rgba(0, 0, 0, 0.05);\n      font-family: var(--ngx-font-family, system-ui, sans-serif);\n      transition: box-shadow 0.3s ease;\n    }\n\n    .ngx-carousel.dark {\n      background: #0f172a;\n    }\n\n    .ngx-carousel:focus-visible {\n      box-shadow: 0 0 0 3px var(--primary-color, #3b82f6);\n    }\n\n    .ngx-carousel__stage {\n      position: relative;\n      width: 100%;\n      height: 400px;\n      overflow: hidden;\n    }\n\n    /* ── Slide styles ── */\n    .ngx-carousel__slide {\n      position: absolute;\n      top: 0;\n      left: 0;\n      width: 100%;\n      height: 100%;\n      visibility: hidden;\n      opacity: 0;\n      overflow: hidden;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n    }\n\n    .ngx-carousel__slide.active {\n      visibility: visible;\n      opacity: 1;\n      transform: translateX(0);\n      z-index: 2;\n    }\n\n    .ngx-carousel__img {\n      width: 100%;\n      height: 100%;\n      object-fit: cover;\n      user-select: none;\n      pointer-events: none;\n    }\n\n    /* ── Glassmorphic Caption Card ── */\n    .ngx-carousel__caption-card {\n      position: absolute;\n      bottom: 24px;\n      left: 24px;\n      right: 24px;\n      padding: 16px 20px;\n      border-radius: 12px;\n      background: rgba(255, 255, 255, 0.65);\n      backdrop-filter: blur(12px);\n      -webkit-backdrop-filter: blur(12px);\n      border: 1px solid rgba(255, 255, 255, 0.4);\n      box-shadow: \n        0 10px 15px -3px rgba(0, 0, 0, 0.05),\n        0 4px 6px -4px rgba(0, 0, 0, 0.05);\n      z-index: 5;\n      max-width: 480px;\n      animation: captionEntrance 0.6s cubic-bezier(0.16, 1, 0.3, 1) forwards;\n      transform: translateY(10px);\n      opacity: 0;\n    }\n\n    .dark .ngx-carousel__caption-card {\n      background: rgba(15, 23, 42, 0.65);\n      border-color: rgba(255, 255, 255, 0.08);\n    }\n\n    .ngx-carousel__caption-title {\n      margin: 0 0 4px 0;\n      font-size: 16px;\n      font-weight: 700;\n      color: #0f172a;\n    }\n\n    .dark .ngx-carousel__caption-title {\n      color: #f8fafc;\n    }\n\n    .ngx-carousel__caption-desc {\n      margin: 0;\n      font-size: 13px;\n      line-height: 1.4;\n      color: #334155;\n    }\n\n    .dark .ngx-carousel__caption-desc {\n      color: #cbd5e1;\n    }\n\n    @keyframes captionEntrance {\n      to {\n        transform: translateY(0);\n        opacity: 1;\n      }\n    }\n\n    /* ── Controls (Next/Prev) ── */\n    .ngx-carousel__control {\n      position: absolute;\n      top: 50%;\n      transform: translateY(-50%) scale(0.9);\n      width: 42px;\n      height: 42px;\n      border-radius: 50%;\n      background: rgba(255, 255, 255, 0.6);\n      backdrop-filter: blur(8px);\n      -webkit-backdrop-filter: blur(8px);\n      border: 1px solid rgba(255, 255, 255, 0.4);\n      color: #0f172a;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      cursor: pointer;\n      z-index: 10;\n      transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n      opacity: 0;\n    }\n\n    .dark .ngx-carousel__control {\n      background: rgba(15, 23, 42, 0.6);\n      border-color: rgba(255, 255, 255, 0.08);\n      color: #cbd5e1;\n    }\n\n    .ngx-carousel:hover .ngx-carousel__control {\n      opacity: 1;\n      transform: translateY(-50%) scale(1);\n    }\n\n    .ngx-carousel__control:hover {\n      background: rgba(255, 255, 255, 0.85);\n      transform: translateY(-50%) scale(1.08) !important;\n      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n    }\n\n    .ngx-carousel__control.prev {\n      left: 16px;\n    }\n\n    .ngx-carousel__control.next {\n      right: 16px;\n    }\n\n    /* ── Indicators ── */\n    .ngx-carousel__indicators {\n      position: absolute;\n      bottom: 24px;\n      left: 50%;\n      transform: translateX(-50%);\n      display: flex;\n      gap: 8px;\n      z-index: 10;\n      background: rgba(255, 255, 255, 0.45);\n      padding: 6px 10px;\n      border-radius: 20px;\n      backdrop-filter: blur(6px);\n      -webkit-backdrop-filter: blur(6px);\n      border: 1px solid rgba(255, 255, 255, 0.2);\n    }\n\n    .dark .ngx-carousel__indicators {\n      background: rgba(15, 23, 42, 0.45);\n      border-color: rgba(255, 255, 255, 0.05);\n    }\n\n    .ngx-carousel__indicator {\n      width: 8px;\n      height: 8px;\n      border-radius: 50%;\n      border: none;\n      background: rgba(0, 0, 0, 0.25);\n      cursor: pointer;\n      transition: all 0.2s ease;\n      padding: 0;\n    }\n\n    .dark .ngx-carousel__indicator {\n      background: rgba(255, 255, 255, 0.25);\n    }\n\n    .ngx-carousel__indicator.active {\n      background: var(--primary-color, #3b82f6);\n      width: 18px;\n      border-radius: 4px;\n    }\n\n    /* ── Transitions ── */\n    .ngx-carousel__slide.transition-fade {\n      /* Fade is simple opacity change */\n    }\n\n    /* Slide Keyframes */\n    .ngx-carousel__slide.transition-slide.active-from-right {\n      animation: slideInRight 0.5s cubic-bezier(0.25, 1, 0.5, 1) forwards;\n      z-index: 3;\n    }\n    .ngx-carousel__slide.transition-slide.active-from-left {\n      animation: slideInLeft 0.5s cubic-bezier(0.25, 1, 0.5, 1) forwards;\n      z-index: 3;\n    }\n    .ngx-carousel__slide.transition-slide.exit-to-right {\n      animation: slideOutRight 0.5s cubic-bezier(0.25, 1, 0.5, 1) forwards;\n      visibility: visible;\n      z-index: 1;\n    }\n    .ngx-carousel__slide.transition-slide.exit-to-left {\n      animation: slideOutLeft 0.5s cubic-bezier(0.25, 1, 0.5, 1) forwards;\n      visibility: visible;\n      z-index: 1;\n    }\n\n    @keyframes slideInRight {\n      from { transform: translateX(100%); opacity: 0; }\n      to { transform: translateX(0); opacity: 1; }\n    }\n    @keyframes slideInLeft {\n      from { transform: translateX(-100%); opacity: 0; }\n      to { transform: translateX(0); opacity: 1; }\n    }\n    @keyframes slideOutRight {\n      from { transform: translateX(0); opacity: 1; }\n      to { transform: translateX(100%); opacity: 0; }\n    }\n    @keyframes slideOutLeft {\n      from { transform: translateX(0); opacity: 1; }\n      to { transform: translateX(-100%); opacity: 0; }\n    }\n  `]\n})\nexport class CarouselComponent implements OnInit, OnDestroy {\n  // Inputs\n  items = input<any[]>([]);\n  autoplay = input<boolean>(true);\n  interval = input<number>(5000);\n  transition = input<'slide' | 'fade'>('slide');\n  theme = input<'light' | 'dark'>('light');\n  showIndicators = input<boolean>(true);\n  showControls = input<boolean>(true);\n  itemTemplate = input<TemplateRef<any> | null>(null);\n  id = input<string>('ngx-carousel-' + Math.random().toString(36).substring(2, 9));\n\n  // Outputs\n  slideChange = output<{ index: number; item: any }>();\n\n  // State Signals\n  activeIndex = signal<number>(0);\n  lastActiveIndex = signal<number>(-1);\n  navDirection = signal<'next' | 'prev'>('next');\n\n  constructor() {\n    effect(() => {\n      // Clamp index on item changes\n      const total = this.items().length;\n      if (this.activeIndex() >= total) {\n        this.activeIndex.set(total > 0 ? total - 1 : 0);\n      }\n    }, { allowSignalWrites: true });\n\n    effect(() => {\n      // React to autoplay and interval updates\n      this.autoplay();\n      this.interval();\n\n      untracked(() => {\n        this.resetAutoplay();\n      });\n    });\n  }\n\n  private autoplayTimer: any = null;\n  private touchStartX = 0;\n\n  ngOnInit() {\n    this.startAutoplay();\n  }\n\n  ngOnDestroy() {\n    this.stopAutoplay();\n  }\n\n  goToSlide(index: number) {\n    if (index === this.activeIndex() || this.items().length <= 1) return;\n\n    this.lastActiveIndex.set(this.activeIndex());\n    this.navDirection.set(index > this.activeIndex() ? 'next' : 'prev');\n    this.activeIndex.set(index);\n\n    this.slideChange.emit({\n      index: index,\n      item: this.items()[index],\n    });\n\n    this.resetAutoplay();\n  }\n\n  nextSlide() {\n    const total = this.items().length;\n    if (total <= 1) return;\n    const nextIdx = (this.activeIndex() + 1) % total;\n    this.goToSlide(nextIdx);\n  }\n\n  prevSlide() {\n    const total = this.items().length;\n    if (total <= 1) return;\n    const prevIdx = (this.activeIndex() - 1 + total) % total;\n    this.goToSlide(prevIdx);\n  }\n\n  onKeyDown(event: KeyboardEvent) {\n    if (event.key === 'ArrowRight') {\n      this.nextSlide();\n      event.preventDefault();\n    } else if (event.key === 'ArrowLeft') {\n      this.prevSlide();\n      event.preventDefault();\n    }\n  }\n\n  // Touch Swipe Handlers\n  onTouchStart(event: TouchEvent) {\n    this.touchStartX = event.touches[0].clientX;\n  }\n\n  onTouchEnd(event: TouchEvent) {\n    const touchEndX = event.changedTouches[0].clientX;\n    const diff = touchEndX - this.touchStartX;\n\n    // Minimum swipe threshold (50px)\n    if (Math.abs(diff) > 50) {\n      if (diff > 0) {\n        this.prevSlide(); // Swiped right -> go to previous\n      } else {\n        this.nextSlide(); // Swiped left -> go to next\n      }\n    }\n  }\n\n  // Autoplay Logic\n  onMouseEnter() {\n    this.stopAutoplay();\n  }\n\n  onMouseLeave() {\n    this.startAutoplay();\n  }\n\n  private startAutoplay() {\n    if (!this.autoplay() || this.items().length <= 1) return;\n    this.stopAutoplay();\n    this.autoplayTimer = setInterval(() => {\n      this.nextSlide();\n    }, this.interval());\n  }\n\n  private stopAutoplay() {\n    if (this.autoplayTimer) {\n      clearInterval(this.autoplayTimer);\n      this.autoplayTimer = null;\n    }\n  }\n\n  private resetAutoplay() {\n    this.stopAutoplay();\n    this.startAutoplay();\n  }\n\n  // Helper to dynamically calculate classes per slide to trigger CSS animations\n  getSlideClass(index: number): string {\n    const active = this.activeIndex();\n    const last = this.lastActiveIndex();\n    const transitionType = this.transition();\n\n    if (index === active) {\n      if (last === -1) return 'active';\n      const direction = this.navDirection();\n      return `active transition-${transitionType} active-from-${direction === 'next' ? 'right' : 'left'}`;\n    }\n    if (index === last) {\n      const direction = this.navDirection();\n      return `transition-${transitionType} exit-to-${direction === 'next' ? 'left' : 'right'}`;\n    }\n    return '';\n  }\n}\n","import {\n  Component,\n  ChangeDetectionStrategy,\n  input,\n  output,\n  model,\n  computed,\n  HostListener,\n  effect,\n  OnDestroy,\n  inject,\n} from '@angular/core';\nimport { CommonModule, DOCUMENT } from '@angular/common';\n\n@Component({\n  selector: 'ngx-drawer',\n  standalone: true,\n  imports: [CommonModule],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <div\n      class=\"ngx-drawer-container\"\n      [class.open]=\"isOpen()\"\n      [class.dark]=\"theme() === 'dark'\"\n      [attr.aria-hidden]=\"!isOpen()\"\n    >\n      <!-- Backdrop Blur Overlay -->\n      <div class=\"ngx-drawer-backdrop\" (click)=\"onBackdropClick()\"></div>\n\n      <!-- Main Slider Panel -->\n      <div\n        class=\"ngx-drawer-panel\"\n        [class]=\"position()\"\n        [style.width]=\"isHorizontal() ? size() : '100%'\"\n        [style.height]=\"isVertical() ? size() : '100%'\"\n        role=\"dialog\"\n        aria-modal=\"true\"\n      >\n        <!-- Header Section -->\n        <div class=\"ngx-drawer-header\">\n          <ng-content select=\"[drawer-header]\">\n            <div class=\"ngx-drawer-header-default\">\n              <h2 class=\"ngx-drawer-title\">{{ title() }}</h2>\n              <button\n                class=\"ngx-drawer-close-btn\"\n                (click)=\"closeDrawer()\"\n                aria-label=\"Close drawer\"\n              >\n                <svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" 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            </div>\n          </ng-content>\n        </div>\n\n        <!-- Body Section -->\n        <div class=\"ngx-drawer-body\">\n          <ng-content></ng-content>\n        </div>\n\n        <!-- Footer Section -->\n        <div class=\"ngx-drawer-footer\">\n          <ng-content select=\"[drawer-footer]\"></ng-content>\n        </div>\n      </div>\n    </div>\n  `,\n  styles: [`\n    .ngx-drawer-container {\n      position: fixed;\n      top: 0;\n      left: 0;\n      width: 100vw;\n      height: 100vh;\n      z-index: 1000;\n      visibility: hidden;\n      pointer-events: none;\n      transition: visibility 0.28s ease;\n      font-family: var(--ngx-font-family, system-ui, sans-serif);\n    }\n\n    .ngx-drawer-container.open {\n      visibility: visible;\n      pointer-events: auto;\n    }\n\n    /* Backdrop blurring */\n    .ngx-drawer-backdrop {\n      position: absolute;\n      top: 0;\n      left: 0;\n      width: 100%;\n      height: 100%;\n      background: rgba(15, 23, 42, 0.25);\n      backdrop-filter: blur(4px);\n      -webkit-backdrop-filter: blur(4px);\n      opacity: 0;\n      transition: opacity 0.28s ease;\n    }\n\n    .ngx-drawer-container.open .ngx-drawer-backdrop {\n      opacity: 1;\n    }\n\n    /* Panel layout */\n    .ngx-drawer-panel {\n      position: absolute;\n      background: rgba(255, 255, 255, 0.85);\n      backdrop-filter: blur(24px);\n      -webkit-backdrop-filter: blur(24px);\n      border: 1px solid rgba(255, 255, 255, 0.5);\n      box-shadow: \n        0 20px 25px -5px rgba(0, 0, 0, 0.1),\n        0 10px 10px -5px rgba(0, 0, 0, 0.04);\n      display: flex;\n      flex-direction: column;\n      transition: transform 0.32s cubic-bezier(0.16, 1, 0.3, 1);\n      box-sizing: border-box;\n      z-index: 1001;\n    }\n\n    /* Positions translations */\n    .ngx-drawer-panel.left {\n      top: 0;\n      left: 0;\n      height: 100%;\n      transform: translateX(-100%);\n      border-right-width: 1.5px;\n    }\n\n    .ngx-drawer-panel.right {\n      top: 0;\n      right: 0;\n      height: 100%;\n      transform: translateX(100%);\n      border-left-width: 1.5px;\n    }\n\n    .ngx-drawer-panel.top {\n      top: 0;\n      left: 0;\n      width: 100%;\n      transform: translateY(-100%);\n      border-bottom-width: 1.5px;\n    }\n\n    .ngx-drawer-panel.bottom {\n      bottom: 0;\n      left: 0;\n      width: 100%;\n      transform: translateY(100%);\n      border-top-width: 1.5px;\n    }\n\n    /* Open modifications */\n    .ngx-drawer-container.open .ngx-drawer-panel.left,\n    .ngx-drawer-container.open .ngx-drawer-panel.right {\n      transform: translateX(0);\n    }\n\n    .ngx-drawer-container.open .ngx-drawer-panel.top,\n    .ngx-drawer-container.open .ngx-drawer-panel.bottom {\n      transform: translateY(0);\n    }\n\n    /* Dark Mode styling */\n    .ngx-drawer-container.dark .ngx-drawer-panel {\n      background: rgba(30, 32, 48, 0.88);\n      border-color: rgba(255, 255, 255, 0.08);\n      color: #f8fafc;\n      box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.3);\n    }\n\n    /* Header Styling */\n    .ngx-drawer-header {\n      padding: 18px 24px;\n      border-bottom: 1px solid rgba(0, 0, 0, 0.06);\n    }\n\n    .ngx-drawer-container.dark .ngx-drawer-header {\n      border-bottom-color: rgba(255, 255, 255, 0.06);\n    }\n\n    .ngx-drawer-header-default {\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n      width: 100%;\n    }\n\n    .ngx-drawer-title {\n      margin: 0;\n      font-size: 16px;\n      font-weight: 700;\n      color: #0f172a;\n    }\n\n    .ngx-drawer-container.dark .ngx-drawer-title {\n      color: #f1f5f9;\n    }\n\n    .ngx-drawer-close-btn {\n      width: 32px;\n      height: 32px;\n      border-radius: 50%;\n      border: none;\n      background: rgba(0, 0, 0, 0.03);\n      color: #64748b;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      cursor: pointer;\n      transition: all 0.2s ease;\n      padding: 0;\n    }\n\n    .ngx-drawer-close-btn:hover {\n      background: rgba(0, 0, 0, 0.08);\n      color: #0f172a;\n    }\n\n    .ngx-drawer-container.dark .ngx-drawer-close-btn {\n      background: rgba(255, 255, 255, 0.05);\n      color: #94a3b8;\n    }\n\n    .ngx-drawer-container.dark .ngx-drawer-close-btn:hover {\n      background: rgba(255, 255, 255, 0.1);\n      color: #f1f5f9;\n    }\n\n    /* Body scroll */\n    .ngx-drawer-body {\n      padding: 24px;\n      flex-grow: 1;\n      overflow-y: auto;\n    }\n\n    /* Footer styling */\n    .ngx-drawer-footer {\n      padding: 16px 24px;\n      border-top: 1px solid rgba(0, 0, 0, 0.06);\n      background: rgba(0, 0, 0, 0.01);\n    }\n\n    .ngx-drawer-container.dark .ngx-drawer-footer {\n      border-top-color: rgba(255, 255, 255, 0.06);\n      background: rgba(255, 255, 255, 0.01);\n    }\n  `]\n})\nexport class DrawerComponent implements OnDestroy {\n  // Inputs\n  isOpen = model<boolean>(false); // Signal-based model for two-way binding\n  position = input<'left' | 'right' | 'top' | 'bottom'>('right');\n  size = input<string>('380px');\n  closeOnBackdrop = input<boolean>(true);\n  closeOnEscape = input<boolean>(true);\n  theme = input<'light' | 'dark'>('light');\n  title = input<string>('');\n\n  // Outputs\n  close = output<void>();\n\n  private document = inject(DOCUMENT);\n\n  constructor() {\n    effect(() => {\n      if (this.isOpen()) {\n        this.document.body.style.overflow = 'hidden';\n      } else {\n        this.document.body.style.overflow = '';\n      }\n    });\n  }\n\n  ngOnDestroy() {\n    this.document.body.style.overflow = '';\n  }\n\n  // Helper Computeds\n  isHorizontal = computed(() => {\n    const pos = this.position();\n    return pos === 'left' || pos === 'right';\n  });\n\n  isVertical = computed(() => {\n    const pos = this.position();\n    return pos === 'top' || pos === 'bottom';\n  });\n\n  closeDrawer() {\n    this.close.emit();\n    this.isOpen.set(false);\n  }\n\n  onBackdropClick() {\n    if (this.closeOnBackdrop()) {\n      this.closeDrawer();\n    }\n  }\n\n  @HostListener('document:keydown.escape', ['$event'])\n  onEscapeKey(event: KeyboardEvent) {\n    if (this.isOpen() && this.closeOnEscape()) {\n      this.closeDrawer();\n    }\n  }\n}\n","/*\n * Public API Surface — secondary entry point: ngx-core-components/layout\n */\n\nexport { CardComponent } from './card/card.component';\nexport type { CardVariant } from './card/card.component';\n\nexport { TabStripComponent, TabComponent } from './tab-strip/tab-strip.component';\n\nexport { AccordionComponent, AccordionItemComponent } from './accordion/accordion.component';\nexport type { AccordionItem } from './accordion/accordion.component';\n\nexport { StepperComponent, NgxStepContentDirective } from './stepper/stepper.component';\nexport type { StepperStep } from './stepper/stepper.component';\n\nexport { SplitterComponent } from './splitter/splitter.component';\n\n// Dashboard Layout - Grid widget panel orchestrator\nexport { DashboardLayoutComponent } from './dashboard-layout/dashboard-layout.component';\nexport type {\n  DashboardItem,\n  DashboardLayoutChangeEvent,\n  DashboardPanelActionEvent,\n} from './dashboard-layout/models';\n\n// Carousel Slider\nexport { CarouselComponent } from './carousel/carousel.component';\n\n// Side Drawer Container\nexport { DrawerComponent } from './drawer/drawer.component';\n\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}