{"version":3,"file":"ngx-core-components-navigation.mjs","sources":["../../../projects/ngx-core-components/navigation/breadcrumb/breadcrumb.component.ts","../../../projects/ngx-core-components/navigation/menu/menu.component.ts","../../../projects/ngx-core-components/navigation/command-palette/command-palette.component.ts","../../../projects/ngx-core-components/navigation/context-menu/context-menu.component.ts","../../../projects/ngx-core-components/navigation/back-to-top/back-to-top.component.ts","../../../projects/ngx-core-components/navigation/public-api.ts","../../../projects/ngx-core-components/navigation/ngx-core-components-navigation.ts"],"sourcesContent":["import { Component, computed, input, output, signal } from '@angular/core';\n\nexport interface BreadcrumbItem {\n  label: string;\n  url?: string;\n  icon?: string;\n}\n\n@Component({\n  selector: 'ngx-breadcrumb',\n  standalone: true,\n  template: `\n    <nav class=\"ngx-breadcrumb\" aria-label=\"breadcrumb\">\n      @for (item of visibleItems(); track item.label; let i = $index; let last = $last) {\n        @if (i > 0) { <span class=\"breadcrumb-separator\" aria-hidden=\"true\">{{ separator() }}</span> }\n        @if (last) {\n          <span class=\"breadcrumb-item active\" aria-current=\"page\">\n            @if (item.icon) { <span class=\"breadcrumb-icon\">{{ item.icon }}</span> }\n            {{ item.label }}\n          </span>\n        } @else if (item.url) {\n          <a class=\"breadcrumb-item\" [href]=\"item.url\" (click)=\"onNav($event, item)\">\n            @if (item.icon) { <span class=\"breadcrumb-icon\">{{ item.icon }}</span> }\n            {{ item.label }}\n          </a>\n        } @else {\n          <button class=\"breadcrumb-item breadcrumb-btn\" (click)=\"itemClick.emit(item)\">\n            @if (item.icon) { <span class=\"breadcrumb-icon\">{{ item.icon }}</span> }\n            {{ item.label }}\n          </button>\n        }\n      }\n      @if (shouldCollapse()) {\n        <span class=\"breadcrumb-separator\" aria-hidden=\"true\">{{ separator() }}</span>\n        <button\n          class=\"breadcrumb-item breadcrumb-btn breadcrumb-ellipsis\"\n          (click)=\"isCollapsed.set(false)\"\n          aria-label=\"Show all breadcrumbs\"\n          title=\"Show all breadcrumbs\"\n        >&hellip;</button>\n        <span class=\"breadcrumb-separator\" aria-hidden=\"true\">{{ separator() }}</span>\n        @for (item of tailItems(); track item.label; let i = $index; let last = $last) {\n          @if (last) {\n            <span class=\"breadcrumb-item active\" aria-current=\"page\">\n              @if (item.icon) { <span class=\"breadcrumb-icon\">{{ item.icon }}</span> }\n              {{ item.label }}\n            </span>\n          } @else if (item.url) {\n            <a class=\"breadcrumb-item\" [href]=\"item.url\" (click)=\"onNav($event, item)\">\n              @if (item.icon) { <span class=\"breadcrumb-icon\">{{ item.icon }}</span> }\n              {{ item.label }}\n            </a>\n          } @else {\n            <button class=\"breadcrumb-item breadcrumb-btn\" (click)=\"itemClick.emit(item)\">\n              @if (item.icon) { <span class=\"breadcrumb-icon\">{{ item.icon }}</span> }\n              {{ item.label }}\n            </button>\n          }\n          @if (!last) { <span class=\"breadcrumb-separator\" aria-hidden=\"true\">{{ separator() }}</span> }\n        }\n      }\n    </nav>\n  `,\n  styles: [`\n    :host { display: block; }\n    .ngx-breadcrumb { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; font-size: 13px; }\n    .breadcrumb-separator {\n      color: var(--ngx-breadcrumb-separator, #adb5bd);\n      padding: 0 2px;\n      opacity: 0.7;\n      transition: opacity 0.2s ease;\n    }\n    .ngx-breadcrumb:hover .breadcrumb-separator { opacity: 1; }\n    .breadcrumb-item {\n      display: inline-flex;\n      align-items: center;\n      gap: 4px;\n      color: var(--ngx-breadcrumb-link, #1a73e8);\n      text-decoration: none;\n      padding: 2px 8px;\n      border-radius: 12px;\n      transition: background-color 0.2s ease, color 0.2s ease;\n    }\n    .breadcrumb-item:hover:not(.active) {\n      background-color: var(--ngx-breadcrumb-hover-bg, rgba(26, 115, 232, 0.08));\n      color: var(--ngx-breadcrumb-link-hover, #1557b0);\n    }\n    .breadcrumb-item:focus-visible {\n      outline: 2px solid var(--ngx-breadcrumb-focus, #1a73e8);\n      outline-offset: 2px;\n    }\n    .breadcrumb-item.active {\n      color: var(--ngx-breadcrumb-active, #495057);\n      background-color: var(--ngx-breadcrumb-active-bg, rgba(73, 80, 87, 0.08));\n      cursor: default;\n      font-weight: 600;\n    }\n    .breadcrumb-btn {\n      background: none;\n      border: none;\n      cursor: pointer;\n      font-family: inherit;\n      font-size: inherit;\n      padding: 2px 8px;\n    }\n    .breadcrumb-ellipsis {\n      font-weight: 700;\n      letter-spacing: 1px;\n      min-width: 28px;\n      justify-content: center;\n    }\n    .breadcrumb-icon { font-size: 14px; }\n  `]\n})\nexport class BreadcrumbComponent {\n  items = input<BreadcrumbItem[]>([]);\n  separator = input('/');\n  maxVisible = input(0);\n  itemClick = output<BreadcrumbItem>();\n\n  isCollapsed = signal<boolean>(true);\n\n  /** True when collapse mode is active: maxVisible > 0, items exceed threshold, and user hasn't expanded */\n  shouldCollapse = computed(() => {\n    const max = this.maxVisible();\n    return max > 0 && this.items().length > max + 1 && this.isCollapsed();\n  });\n\n  /** Items to render in the main @for loop: all items when not collapsing, or only the first item when collapsing */\n  visibleItems = computed(() => {\n    if (this.shouldCollapse()) {\n      return this.items().slice(0, 1);\n    }\n    return this.items();\n  });\n\n  /** The trailing items shown after the ellipsis when collapsed */\n  tailItems = computed(() => {\n    if (this.shouldCollapse()) {\n      return this.items().slice(-this.maxVisible());\n    }\n    return [];\n  });\n\n  onNav(event: MouseEvent, item: BreadcrumbItem): void { event.preventDefault(); this.itemClick.emit(item); }\n}\n\n","import { Component, input, output, signal, HostListener, computed } from '@angular/core';\n\nexport interface MenuItem {\n\tlabel?: string;\n\ticon?: string;\n\turl?: string;\n\tdisabled?: boolean;\n\tseparator?: boolean;\n\tchildren?: MenuItem[];\n}\n\n@Component({\n\tselector: 'ngx-menu',\n\tstandalone: true,\n\ttemplate: `\n\t\t<nav class=\"ngx-menu\" [class.menu-vertical]=\"orientation() === 'vertical'\" role=\"menubar\">\n\t\t\t@for (item of items(); track $index; let i = $index) {\n\t\t\t\t@if (item.separator) {\n\t\t\t\t\t<hr class=\"menu-separator\" />\n\t\t\t\t} @else {\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"menu-item\"\n\t\t\t\t\t\t[class.has-children]=\"item.children && item.children.length > 0\"\n\t\t\t\t\t\t[class.open]=\"openIndex() === i\"\n\t\t\t\t\t\t[class.disabled]=\"item.disabled\"\n\t\t\t\t\t\t[class.active]=\"isActiveItem(item)\"\n\t\t\t\t\t\trole=\"menuitem\"\n\t\t\t\t\t\t[attr.tabindex]=\"item.disabled ? -1 : 0\"\n\t\t\t\t\t\t[attr.aria-haspopup]=\"item.children && item.children.length ? 'true' : null\"\n\t\t\t\t\t\t[attr.aria-expanded]=\"item.children && item.children.length ? (openIndex() === i) : null\"\n\t\t\t\t\t\t(click)=\"handleClick($event, item, i)\"\n\t\t\t\t\t\t(keydown.enter)=\"handleClick($event, item, i)\"\n\t\t\t\t\t>\n\t\t\t\t\t\t@if (item.icon) { <span class=\"menu-icon\">{{ item.icon }}</span> }\n\t\t\t\t\t\t<span class=\"menu-label\">{{ item.label }}</span>\n\t\t\t\t\t\t@if (item.children && item.children.length) {\n\t\t\t\t\t\t\t<span class=\"menu-arrow\">{{ orientation() === 'vertical' ? '&#8250;' : '&#9662;' }}</span>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (item.children && item.children.length && openIndex() === i) {\n\t\t\t\t\t\t\t<div class=\"menu-submenu\" role=\"menu\">\n\t\t\t\t\t\t\t\t@for (child of item.children; track $index) {\n\t\t\t\t\t\t\t\t\t@if (child.separator) {\n\t\t\t\t\t\t\t\t\t\t<hr class=\"menu-separator\" />\n\t\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t\t<div class=\"menu-subitem\" [class.disabled]=\"child.disabled\" [class.active]=\"isActiveItem(child)\" role=\"menuitem\" [attr.tabindex]=\"child.disabled ? -1 : 0\" (click)=\"handleSubClick($event, child)\">\n\t\t\t\t\t\t\t\t\t\t\t@if (child.icon) { <span class=\"menu-icon\">{{ child.icon }}</span> }\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"menu-label\">{{ child.label }}</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t}\n\t\t</nav>\n\t`,\n\tstyles: [`\n\t\t@keyframes submenuSlideIn {\n\t\t\tfrom { opacity: 0; transform: translateY(-6px); }\n\t\t\tto   { opacity: 1; transform: translateY(0); }\n\t\t}\n\t\t:host { display: block; }\n\t\t.ngx-menu { display: flex; align-items: stretch; background: var(--ngx-menu-bg, #fff); border: 1px solid var(--ngx-menu-border, #dee2e6); border-radius: var(--ngx-menu-radius, 10px); overflow: visible; }\n\t\t.menu-vertical { flex-direction: column; }\n\t\t.menu-item { position: relative; display: flex; align-items: center; gap: 10px; padding: 9px 18px; font-size: 13px; font-weight: 500; cursor: pointer; color: var(--ngx-menu-color, #212529); transition: background 0.2s ease, color 0.2s ease; white-space: nowrap; user-select: none; }\n\t\t.menu-item::after { content: ''; position: absolute; bottom: 0; left: 18px; right: 18px; height: 2.5px; background: linear-gradient(90deg, var(--ngx-menu-active-color, #1a73e8), #4fc3f7); border-radius: 2px; transform: scaleX(0); transform-origin: left; transition: transform 0.25s ease; pointer-events: none; }\n\t\t:host:not(.menu-vertical) .menu-item:hover:not(.disabled)::after,\n\t\t:host:not(.menu-vertical) .menu-item.active::after { transform: scaleX(1); }\n\t\t.menu-vertical .menu-item::after { display: none; }\n\t\t.menu-item:hover:not(.disabled), .menu-item.open { background: var(--ngx-menu-hover-bg, rgba(26,115,232,0.06)); color: var(--ngx-menu-active-color, #1a73e8); }\n\t\t.menu-item.disabled { opacity: 0.5; cursor: not-allowed; }\n\t\t.menu-item:focus-visible, .menu-subitem:focus-visible { outline: 2px solid var(--ngx-menu-active-color, #1a73e8); outline-offset: -2px; border-radius: 4px; }\n\t\t.menu-icon { font-size: 16px; flex-shrink: 0; display: inline-flex; align-items: center; }\n\t\t.menu-label { flex: 1; }\n\t\t.menu-arrow { margin-left: auto; padding-left: 10px; font-size: 11px; transition: transform 0.2s ease; }\n\t\t.menu-item.open > .menu-arrow { transform: rotate(180deg); }\n\t\t.menu-vertical .menu-item.open > .menu-arrow { transform: rotate(0deg); }\n\t\t.menu-separator { border: none; border-top: 1px solid var(--ngx-menu-separator, #dee2e6); margin: 4px 0; }\n\t\t.menu-submenu { position: absolute; top: 100%; left: 0; min-width: 210px; background: var(--ngx-menu-submenu-bg, rgba(255,255,255,0.82)); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); border: 1px solid var(--ngx-menu-border, rgba(222,226,230,0.7)); border-radius: 10px; box-shadow: 0 4px 12px rgba(0,0,0,0.06), 0 12px 36px rgba(0,0,0,0.10); z-index: 1000; padding: 4px 0; animation: submenuSlideIn 0.18s ease-out; }\n\t\t.menu-vertical .menu-submenu { top: 0; left: 100%; }\n\t\t.menu-subitem { display: flex; align-items: center; gap: 10px; padding: 8px 18px; font-size: 13px; cursor: pointer; color: var(--ngx-menu-color, #212529); transition: background 0.2s ease, color 0.2s ease; white-space: nowrap; border-radius: 6px; margin: 0 4px; }\n\t\t.menu-subitem:hover:not(.disabled) { background: var(--ngx-menu-hover-bg, rgba(26,115,232,0.06)); color: var(--ngx-menu-active-color, #1a73e8); }\n\t\t.menu-item.active, .menu-subitem.active { background: linear-gradient(135deg, var(--ngx-menu-active-bg, rgba(232,240,254,0.85)), rgba(79,195,247,0.15)); color: var(--ngx-menu-active-color, #1a73e8); font-weight: 600; }\n\t`]\n})\nexport class MenuComponent {\n\titems = input<MenuItem[]>([]);\n\torientation = input<'horizontal' | 'vertical'>('horizontal');\n\t/** Label or URL of the currently active item — used to highlight the active menu entry. */\n\tactiveItem = input<string>('');\n\topenIndex = signal<number | null>(null);\n\titemClick = output<MenuItem>();\n\n\tisActiveItem(item: MenuItem): boolean {\n\t\tconst active = this.activeItem();\n\t\tif (!active) return false;\n\t\treturn item.label === active || item.url === active;\n\t}\n\n\thandleClick(event: Event, item: MenuItem, i: number): void {\n\t\tif (item.disabled) return;\n\t\tevent.stopPropagation();\n\t\tif (item.children && item.children.length) { this.openIndex.set(this.openIndex() === i ? null : i); }\n\t\telse { this.itemClick.emit(item); this.openIndex.set(null); }\n\t}\n\n\thandleSubClick(event: Event, child: MenuItem): void {\n\t\tif (child.disabled) return;\n\t\tevent.stopPropagation();\n\t\tthis.itemClick.emit(child);\n\t\tthis.openIndex.set(null);\n\t}\n\n\t@HostListener('document:click')\n\tcloseAll(): void { this.openIndex.set(null); }\n}\n","import { Component, input, signal, computed, HostListener, output, effect, ElementRef, ViewChild } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport interface CommandItem {\n  id: string;\n  label: string;\n  desc?: string;\n  shortcut?: string;\n  icon?: string;\n  category?: string;\n}\n\n@Component({\n  selector: 'ngx-command-palette',\n  standalone: true,\n  imports: [CommonModule],\n  template: `\n    <!-- Global Overlay Backdrop -->\n    @if (isOpen()) {\n      <div class=\"ngx-palette-overlay\" (click)=\"closePalette()\">\n        <div\n          class=\"ngx-palette-modal\"\n          (click)=\"$event.stopPropagation()\"\n        >\n          <!-- Search Header input console -->\n          <div class=\"ngx-palette-header\">\n            <span class=\"search-icon\">🔍</span>\n            <input\n              #searchInput\n              type=\"text\"\n              class=\"palette-input\"\n              [placeholder]=\"placeholder()\"\n              [value]=\"filterQuery()\"\n              (input)=\"onSearchInput($event)\"\n            />\n            <span class=\"esc-badge\">ESC</span>\n          </div>\n\n          <!-- Command results feed -->\n          <div class=\"ngx-palette-results\">\n            @if (groupedResults().length === 0) {\n              <div class=\"empty-state\">No matching commands found.</div>\n            }\n\n            @for (group of groupedResults(); track group.category) {\n              <div class=\"category-group\">\n                @if (group.category) {\n                  <div class=\"category-header\">{{ group.category }}</div>\n                }\n\n                @for (cmd of group.items; track cmd.id) {\n                  <div\n                    class=\"command-row\"\n                    [class.active]=\"activeItem()?.id === cmd.id\"\n                    (mouseenter)=\"activeItem.set(cmd)\"\n                    (click)=\"executeCommand(cmd)\"\n                  >\n                    <div class=\"command-start\">\n                      @if (cmd.icon) {\n                        <span class=\"command-icon\">{{ cmd.icon }}</span>\n                      }\n                      <div class=\"command-details\">\n                        <span class=\"command-label\">{{ cmd.label }}</span>\n                        @if (cmd.desc) {\n                          <span class=\"command-desc\">{{ cmd.desc }}</span>\n                        }\n                      </div>\n                    </div>\n\n                    @if (cmd.shortcut) {\n                      <span class=\"command-shortcut\">{{ cmd.shortcut }}</span>\n                    }\n                  </div>\n                }\n              </div>\n            }\n          </div>\n\n          <!-- Console Footer help actions -->\n          <div class=\"ngx-palette-footer\">\n            <div class=\"help-item\"><span>↑↓</span> Navigate</div>\n            <div class=\"help-item\"><span>↵</span> Select</div>\n            <div class=\"help-item\"><span>Ctrl + K</span> Toggle Console</div>\n          </div>\n        </div>\n      </div>\n    }\n  `,\n  styles: [`\n    .ngx-palette-overlay {\n      position: fixed;\n      inset: 0;\n      background: rgba(12, 19, 36, 0.45);\n      backdrop-filter: blur(8px);\n      z-index: 9999;\n      display: flex;\n      align-items: flex-start;\n      justify-content: center;\n      padding-top: 15vh;\n      animation: fade-in 0.18s cubic-bezier(0.4, 0, 0.2, 1);\n    }\n\n    @keyframes fade-in {\n      from { opacity: 0; }\n      to { opacity: 1; }\n    }\n\n    /* Palette Modal container box */\n    .ngx-palette-modal {\n      width: 100%;\n      max-width: 600px;\n      background: var(--bg-secondary, #ffffff);\n      border: 1px solid var(--border-color, #e2e8f0);\n      border-radius: 12px;\n      box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.2), 0 10px 10px -5px rgba(0, 0, 0, 0.1);\n      display: flex;\n      flex-direction: column;\n      overflow: hidden;\n      font-family: inherit;\n      animation: scale-up 0.18s cubic-bezier(0.34, 1.56, 0.64, 1);\n    }\n\n    @keyframes scale-up {\n      from { transform: scale(0.95) translateY(-10px); }\n      to { transform: scale(1) translateY(0); }\n    }\n\n    /* Search Header console input */\n    .ngx-palette-header {\n      display: flex;\n      align-items: center;\n      padding: 14px 18px;\n      border-bottom: 1px solid var(--border-color, #e2e8f0);\n      gap: 12px;\n    }\n    .search-icon {\n      font-size: 16px;\n      color: var(--text-secondary, #64748b);\n    }\n    .palette-input {\n      flex: 1;\n      border: none;\n      background: transparent;\n      outline: none;\n      font-size: 14px;\n      color: var(--text-primary, #0f172a);\n      font-family: inherit;\n    }\n    .palette-input::placeholder {\n      color: var(--text-secondary, #64748b);\n      opacity: 0.8;\n    }\n    .esc-badge {\n      font-size: 10px;\n      font-weight: 700;\n      color: var(--text-secondary, #64748b);\n      background: var(--border-light, #f1f5f9);\n      padding: 3px 6px;\n      border-radius: 4px;\n      border: 1px solid var(--border-color, #e2e8f0);\n      box-shadow: var(--shadow-sm);\n    }\n\n    /* Command Results List block */\n    .ngx-palette-results {\n      max-height: 320px;\n      overflow-y: auto;\n      padding: 8px 0;\n    }\n\n    .empty-state {\n      padding: 24px;\n      text-align: center;\n      color: var(--text-secondary, #64748b);\n      font-size: 13px;\n      font-style: italic;\n    }\n\n    /* Category Group titles */\n    .category-group {\n      display: flex;\n      flex-direction: column;\n    }\n    .category-header {\n      padding: 8px 18px;\n      font-size: 10px;\n      font-weight: 800;\n      text-transform: uppercase;\n      letter-spacing: 0.8px;\n      color: var(--text-secondary, #64748b);\n      opacity: 0.85;\n    }\n\n    /* Single Command row items */\n    .command-row {\n      padding: 10px 18px;\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n      cursor: pointer;\n      transition: background-color 0.12s ease;\n      gap: 16px;\n    }\n    .command-row.active {\n      background: var(--primary-glow, rgba(79, 70, 229, 0.08));\n    }\n    \n    .command-start {\n      display: flex;\n      align-items: center;\n      gap: 12px;\n      min-width: 0;\n    }\n    .command-icon {\n      font-size: 16px;\n      line-height: 1;\n    }\n    .command-details {\n      display: flex;\n      flex-direction: column;\n      min-width: 0;\n    }\n    .command-label {\n      font-size: 13px;\n      font-weight: 600;\n      color: var(--text-primary, #0f172a);\n    }\n    .command-row.active .command-label {\n      color: var(--primary-color, #4f46e5);\n    }\n    .command-desc {\n      font-size: 11px;\n      color: var(--text-secondary, #64748b);\n      white-space: nowrap;\n      overflow: hidden;\n      text-overflow: ellipsis;\n    }\n    \n    /* Shortcut keycaps style */\n    .command-shortcut {\n      font-size: 10px;\n      font-weight: 600;\n      color: var(--text-secondary, #64748b);\n      background: var(--border-light, #f1f5f9);\n      border: 1px solid var(--border-color, #e2e8f0);\n      padding: 2px 6px;\n      border-radius: 4px;\n      font-family: monospace;\n    }\n\n    /* Footer help commands guides */\n    .ngx-palette-footer {\n      display: flex;\n      padding: 12px 18px;\n      background: var(--border-light, #f1f5f9);\n      border-top: 1px solid var(--border-color, #e2e8f0);\n      gap: 18px;\n    }\n    .help-item {\n      font-size: 11px;\n      font-weight: 500;\n      color: var(--text-secondary, #64748b);\n      display: flex;\n      align-items: center;\n      gap: 6px;\n    }\n    .help-item span {\n      background: var(--bg-secondary, #ffffff);\n      border: 1px solid var(--border-color, #e2e8f0);\n      padding: 1px 4px;\n      border-radius: 3px;\n      font-weight: 700;\n      font-size: 9px;\n    }\n  `]\n})\nexport class CommandPaletteComponent {\n  // Inputs configs\n  commands = input.required<CommandItem[]>();\n  placeholder = input<string>('Type a command or search...');\n\n  // Output emissions\n  commandSelected = output<CommandItem>();\n\n  @ViewChild('searchInput') searchInput!: ElementRef<HTMLInputElement>;\n\n  // Open status logic\n  isOpen = signal<boolean>(false);\n  filterQuery = signal<string>('');\n\n  // Currently focused item in keyboard selection\n  activeItem = signal<CommandItem | null>(null);\n\n  // Reactive effect to focus the search input field upon dialog opens\n  constructor() {\n    effect(() => {\n      if (this.isOpen()) {\n        setTimeout(() => {\n          this.searchInput?.nativeElement?.focus();\n        }, 50);\n      }\n    });\n  }\n\n  // Filter commands by search query\n  filteredCommands = computed(() => {\n    const query = this.filterQuery().toLowerCase().trim();\n    if (!query) return this.commands();\n\n    return this.commands().filter(c =>\n      c.label.toLowerCase().includes(query) ||\n      (c.desc && c.desc.toLowerCase().includes(query)) ||\n      (c.category && c.category.toLowerCase().includes(query))\n    );\n  });\n\n  // Group commands by category computed signals\n  groupedResults = computed(() => {\n    const list = this.filteredCommands();\n    const groups: { category: string; items: CommandItem[] }[] = [];\n\n    list.forEach(item => {\n      const cat = item.category || 'General';\n      let grp = groups.find(g => g.category === cat);\n      if (!grp) {\n        grp = { category: cat, items: [] };\n        groups.push(grp);\n      }\n      grp.items.push(item);\n    });\n\n    return groups;\n  });\n\n  // Flat list of current results for keyboard navigation indices mappings\n  flatResultsList = computed(() => {\n    const groups = this.groupedResults();\n    const flat: CommandItem[] = [];\n    groups.forEach(g => flat.push(...g.items));\n    return flat;\n  });\n\n  // Watch key inputs reactive alignment\n  onSearchInput(event: Event): void {\n    const query = (event.target as HTMLInputElement).value;\n    this.filterQuery.set(query);\n    // Reset active item to first result in filtered list\n    const results = this.flatResultsList();\n    this.activeItem.set(results.length > 0 ? results[0] : null);\n  }\n\n  openPalette(): void {\n    this.filterQuery.set('');\n    const results = this.commands();\n    this.activeItem.set(results.length > 0 ? results[0] : null);\n    this.isOpen.set(true);\n  }\n\n  closePalette(): void {\n    this.isOpen.set(false);\n  }\n\n  toggleOpen(): void {\n    if (this.isOpen()) {\n      this.closePalette();\n    } else {\n      this.openPalette();\n    }\n  }\n\n  executeCommand(cmd: CommandItem): void {\n    this.commandSelected.emit(cmd);\n    this.closePalette();\n  }\n\n  // Global keypress watchers\n  @HostListener('document:keydown', ['$event'])\n  handleKeyDown(event: KeyboardEvent): void {\n    // Ctrl + K or Cmd + K triggers console toggle\n    if ((event.ctrlKey || event.metaKey) && event.key.toLowerCase() === 'k') {\n      event.preventDefault();\n      this.toggleOpen();\n      return;\n    }\n\n    if (!this.isOpen()) return;\n\n    const flatList = this.flatResultsList();\n    if (flatList.length === 0) {\n      if (event.key === 'Escape') {\n        event.preventDefault();\n        this.closePalette();\n      }\n      return;\n    }\n\n    const currentActive = this.activeItem();\n    let idx = currentActive ? flatList.findIndex(c => c.id === currentActive.id) : -1;\n\n    if (event.key === 'ArrowDown') {\n      event.preventDefault();\n      idx = (idx + 1) % flatList.length;\n      const nextItem = flatList[idx];\n      this.activeItem.set(nextItem);\n      this.scrollToActiveItem();\n    } else if (event.key === 'ArrowUp') {\n      event.preventDefault();\n      idx = (idx - 1 + flatList.length) % flatList.length;\n      const prevItem = flatList[idx];\n      this.activeItem.set(prevItem);\n      this.scrollToActiveItem();\n    } else if (event.key === 'Enter') {\n      event.preventDefault();\n      if (currentActive) {\n        this.executeCommand(currentActive);\n      }\n    } else if (event.key === 'Escape') {\n      event.preventDefault();\n      this.closePalette();\n    }\n  }\n\n  private scrollToActiveItem(): void {\n    setTimeout(() => {\n      const activeEl = document.querySelector('.ngx-palette-modal .command-row.active');\n      if (activeEl) {\n        activeEl.scrollIntoView({ block: 'nearest', inline: 'nearest' });\n      }\n    }, 0);\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, input, output, signal, effect, HostListener } from '@angular/core';\n\nexport interface ContextMenuItem {\n  id: string;\n  label: string;\n  icon?: string;\n  disabled?: boolean;\n  danger?: boolean;\n  separator?: boolean;\n  shortcut?: string;\n  children?: ContextMenuItem[];\n}\n\n@Component({\n  selector: 'ngx-context-menu',\n  standalone: true,\n  imports: [CommonModule],\n  template: `\n    @if (open()) {\n      <div\n        class=\"ngx-context-menu-backdrop\"\n        (click)=\"close()\"\n        (contextmenu)=\"$event.preventDefault(); close()\"\n      ></div>\n      <div\n        class=\"ngx-context-menu\"\n        role=\"menu\"\n        [style.left.px]=\"x()\"\n        [style.top.px]=\"y()\"\n        [style.min-width.px]=\"width()\"\n        (click)=\"$event.stopPropagation()\"\n      >\n        <ng-container *ngTemplateOutlet=\"menuList; context: { items: items() }\"></ng-container>\n      </div>\n    }\n\n    <ng-template #menuList let-items=\"items\">\n      @for (item of items; track item.id; let i = $index) {\n        @if (item.separator) {\n          <div class=\"menu-separator\" role=\"separator\"></div>\n        } @else {\n          <div class=\"menu-entry\">\n            <button\n              class=\"menu-item\"\n              type=\"button\"\n              role=\"menuitem\"\n              [class.danger]=\"item.danger\"\n              [class.has-children]=\"item.children?.length\"\n              [class.focused]=\"focusedIndex() === flatIndexOf(item)\"\n              [disabled]=\"item.disabled\"\n              (click)=\"selectItem(item, $event)\"\n            >\n              @if (item.icon) { <span class=\"menu-icon\">{{ item.icon }}</span> }\n              <span class=\"menu-label\">{{ item.label }}</span>\n              @if (item.shortcut) { <span class=\"menu-shortcut\">{{ item.shortcut }}</span> }\n              @if (item.children?.length) { <span class=\"menu-arrow\">&gt;</span> }\n            </button>\n            @if (item.children?.length) {\n              <div class=\"submenu\" role=\"menu\">\n                <ng-container *ngTemplateOutlet=\"menuList; context: { items: item.children }\"></ng-container>\n              </div>\n            }\n          </div>\n        }\n      }\n    </ng-template>\n  `,\n  styles: [`\n    @keyframes contextMenuFadeIn {\n      from { opacity: 0; transform: scale(0.95); }\n      to { opacity: 1; transform: scale(1); }\n    }\n\n    .ngx-context-menu-backdrop { position: fixed; inset: 0; z-index: 9998; background: transparent; }\n    .ngx-context-menu {\n      position: fixed; z-index: 9999; padding: 6px;\n      border: 1px solid var(--border-color, rgba(217, 222, 232, 0.6));\n      border-radius: 10px;\n      background: var(--bg-secondary, rgba(255, 255, 255, 0.82));\n      backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px);\n      box-shadow:\n        0 4px 6px -1px rgba(15, 23, 42, 0.06),\n        0 10px 15px -3px rgba(15, 23, 42, 0.08),\n        0 20px 40px -4px rgba(15, 23, 42, 0.12);\n      color: var(--text-primary, #111827);\n      font-family: var(--ngx-font-family, inherit);\n      animation: contextMenuFadeIn 0.18s cubic-bezier(0.4, 0, 0.2, 1);\n    }\n    .menu-entry { position: relative; }\n    .menu-item {\n      position: relative; display: grid; grid-template-columns: auto 1fr auto auto; align-items: center; gap: 9px;\n      width: 100%; border: 0; border-radius: 6px; background: transparent; color: inherit; cursor: pointer;\n      font: inherit; font-size: 13px; line-height: 1.2; padding: 8px 10px; text-align: left; white-space: nowrap;\n      transition: background-color 0.15s ease, color 0.15s ease;\n    }\n    .menu-item:hover:not(:disabled), .menu-item.focused:not(:disabled) { background: var(--border-light, #f3f6fb); outline: none; }\n    .menu-item:focus-visible { background: var(--border-light, #f3f6fb); outline: 2px solid var(--primary-color, #4f46e5); outline-offset: -2px; border-radius: 6px; }\n    .menu-item:disabled { color: var(--text-secondary, #94a3b8); cursor: not-allowed; }\n    .menu-item.danger { color: var(--ngx-danger, #dc2626); }\n    .menu-item.danger:hover:not(:disabled), .menu-item.danger.focused:not(:disabled) { background: rgba(220, 38, 38, 0.08); }\n    .menu-icon { width: 16px; text-align: center; color: var(--text-secondary, #64748b); }\n    .menu-label { min-width: 0; overflow: hidden; text-overflow: ellipsis; }\n    .menu-shortcut { font-size: 10px; font-weight: 600; color: var(--text-secondary, #64748b); background: var(--border-light, #f1f5f9); border: 1px solid var(--border-color, #e2e8f0); padding: 2px 6px; border-radius: 4px; font-family: monospace; margin-left: auto; }\n    .menu-arrow { color: var(--text-secondary, #64748b); }\n    .menu-separator { height: 1px; margin: 5px 4px; background: var(--border-color, #e5e7eb); }\n    .submenu {\n      display: none; position: absolute; left: calc(100% - 4px); top: -6px; min-width: 190px; padding: 6px;\n      border: 1px solid var(--border-color, rgba(217, 222, 232, 0.6));\n      border-radius: 10px;\n      background: var(--bg-secondary, rgba(255, 255, 255, 0.82));\n      backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px);\n      box-shadow:\n        0 4px 6px -1px rgba(15, 23, 42, 0.06),\n        0 10px 15px -3px rgba(15, 23, 42, 0.08),\n        0 20px 40px -4px rgba(15, 23, 42, 0.12);\n      animation: contextMenuFadeIn 0.18s cubic-bezier(0.4, 0, 0.2, 1);\n    }\n    .menu-entry:hover > .submenu, .menu-entry:focus-within > .submenu { display: block; }\n  `]\n})\nexport class ContextMenuComponent {\n  items = input<ContextMenuItem[]>([]);\n  open = input(false);\n  x = input(0);\n  y = input(0);\n  width = input(200);\n\n  itemSelected = output<ContextMenuItem>();\n  openChange = output<boolean>();\n\n  /** Tracks the focused item index for keyboard navigation (-1 = none). */\n  focusedIndex = signal<number>(-1);\n\n  constructor() {\n    // Reset focused index whenever the menu opens or closes\n    effect(() => {\n      this.open(); // subscribe to changes\n      this.focusedIndex.set(-1);\n    });\n  }\n\n  /** Returns the flat index of an item across all top-level items (excluding separators). */\n  flatIndexOf(item: ContextMenuItem): number {\n    return this.navigableItems().indexOf(item);\n  }\n\n  /** Flat list of navigable (non-separator) top-level items. */\n  private navigableItems(): ContextMenuItem[] {\n    return this.items().filter(i => !i.separator);\n  }\n\n  /** Navigable and non-disabled items indices used for arrow-key movement. */\n  private navigableIndices(): number[] {\n    return this.navigableItems()\n      .map((item, idx) => (!item.disabled ? idx : -1))\n      .filter(idx => idx !== -1);\n  }\n\n  @HostListener('document:keydown', ['$event'])\n  handleKeyDown(event: KeyboardEvent): void {\n    if (!this.open()) return;\n\n    const indices = this.navigableIndices();\n    if (indices.length === 0) {\n      if (event.key === 'Escape') {\n        event.preventDefault();\n        this.close();\n      }\n      return;\n    }\n\n    const current = this.focusedIndex();\n\n    if (event.key === 'ArrowDown') {\n      event.preventDefault();\n      const nextIdx = indices.find(i => i > current) ?? indices[0];\n      this.focusedIndex.set(nextIdx);\n    } else if (event.key === 'ArrowUp') {\n      event.preventDefault();\n      const reversed = [...indices].reverse();\n      const prevIdx = reversed.find(i => i < current) ?? reversed[0];\n      this.focusedIndex.set(prevIdx);\n    } else if (event.key === 'Enter' || event.key === ' ') {\n      event.preventDefault();\n      const items = this.navigableItems();\n      if (current >= 0 && current < items.length) {\n        const item = items[current];\n        if (!item.disabled && !item.children?.length) {\n          this.itemSelected.emit(item);\n          this.close();\n        }\n      }\n    } else if (event.key === 'Escape') {\n      event.preventDefault();\n      this.close();\n    }\n  }\n\n  selectItem(item: ContextMenuItem, event: MouseEvent): void {\n    event.stopPropagation();\n    if (item.disabled || item.children?.length) return;\n    this.itemSelected.emit(item);\n    this.close();\n  }\n\n  close(): void {\n    this.openChange.emit(false);\n  }\n}\n","import {\n  Component,\n  ChangeDetectionStrategy,\n  input,\n  signal,\n  computed,\n  effect,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n  selector: 'ngx-back-to-top',\n  standalone: true,\n  imports: [CommonModule],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <button\n      class=\"ngx-back-to-top\"\n      [class.visible]=\"isVisible()\"\n      [class.dark]=\"theme() === 'dark'\"\n      (click)=\"scrollToTop()\"\n      aria-label=\"Back to top\"\n    >\n      @if (showProgress()) {\n        <svg class=\"ngx-back-to-top__svg\" viewBox=\"0 0 40 40\">\n          <circle\n            class=\"ngx-back-to-top__circle-bg\"\n            cx=\"20\"\n            cy=\"20\"\n            r=\"18\"\n            stroke-width=\"2.5\"\n          />\n          <circle\n            class=\"ngx-back-to-top__circle-progress\"\n            cx=\"20\"\n            cy=\"20\"\n            r=\"18\"\n            stroke-width=\"2.5\"\n            [style.strokeDashoffset]=\"strokeDashoffset()\"\n            stroke-linecap=\"round\"\n            transform=\"rotate(-90 20 20)\"\n          />\n        </svg>\n      }\n\n      <svg class=\"arrow-up-icon\" viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\">\n        <polyline points=\"18 15 12 9 6 15\"></polyline>\n      </svg>\n    </button>\n  `,\n  styles: [`\n    .ngx-back-to-top {\n      position: fixed;\n      bottom: 24px;\n      right: 24px;\n      width: 44px;\n      height: 44px;\n      border-radius: 50%;\n      border: none;\n      background: rgba(255, 255, 255, 0.8);\n      backdrop-filter: blur(8px);\n      -webkit-backdrop-filter: blur(8px);\n      color: #0f172a;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      cursor: pointer;\n      box-shadow: \n        0 10px 15px -3px rgba(0, 0, 0, 0.1),\n        0 4px 6px -4px rgba(0, 0, 0, 0.05);\n      z-index: 99;\n      opacity: 0;\n      transform: translateY(12px) scale(0.9);\n      pointer-events: none;\n      transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1);\n      outline: none;\n      padding: 0;\n    }\n\n    .ngx-back-to-top.visible {\n      opacity: 1;\n      transform: translateY(0) scale(1);\n      pointer-events: auto;\n    }\n\n    .ngx-back-to-top:hover {\n      background: #ffffff;\n      transform: scale(1.06) translateY(-1px);\n      box-shadow: \n        0 20px 25px -5px rgba(0, 0, 0, 0.15),\n        0 10px 10px -5px rgba(0, 0, 0, 0.06);\n    }\n\n    .ngx-back-to-top:active {\n      transform: scale(0.98) translateY(0);\n    }\n\n    .ngx-back-to-top.dark {\n      background: rgba(15, 23, 42, 0.85);\n      border: 1px solid rgba(255, 255, 255, 0.08);\n      color: #cbd5e1;\n      box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.3);\n    }\n\n    .ngx-back-to-top.dark:hover {\n      background: #1e293b;\n      color: #ffffff;\n    }\n\n    .ngx-back-to-top:focus-visible {\n      outline: 2px solid var(--primary-color, #3b82f6);\n      outline-offset: 3px;\n    }\n\n    /* ── SVG Progress Ring ── */\n    .ngx-back-to-top__svg {\n      position: absolute;\n      top: 0;\n      left: 0;\n      width: 100%;\n      height: 100%;\n      pointer-events: none;\n    }\n\n    .ngx-back-to-top__circle-bg {\n      fill: none;\n      stroke: rgba(0, 0, 0, 0.05);\n    }\n\n    .ngx-back-to-top.dark .ngx-back-to-top__circle-bg {\n      stroke: rgba(255, 255, 255, 0.06);\n    }\n\n    .ngx-back-to-top__circle-progress {\n      fill: none;\n      stroke: var(--primary-color, #3b82f6);\n      stroke-dasharray: 113.1; /* 2 * PI * 18 */\n      transition: stroke-dashoffset 0.1s ease;\n    }\n\n    .arrow-up-icon {\n      z-index: 2;\n      transition: transform 0.2s ease;\n    }\n\n    .ngx-back-to-top:hover .arrow-up-icon {\n      transform: translateY(-2px);\n    }\n  `]\n})\nexport class BackToTopComponent {\n  // Inputs\n  threshold = input<number>(300);\n  target = input<string | HTMLElement | null>(null);\n  theme = input<'light' | 'dark'>('light');\n  showProgress = input<boolean>(true);\n\n  // Internal state signals\n  isVisible = signal<boolean>(false);\n  scrollPercent = signal<number>(0);\n\n  // Computed circular ring offset (113.1 is circumference of circle r=18)\n  strokeDashoffset = computed(() => {\n    const circ = 113.1;\n    const ratio = this.scrollPercent() / 100;\n    return circ * (1 - ratio);\n  });\n\n  constructor() {\n    effect((onCleanup) => {\n      if (typeof window === 'undefined') return;\n      const targetSel = this.target();\n      this.threshold(); // Track threshold changes too\n\n      let scrollEl: HTMLElement | Window | null = null;\n      if (typeof document !== 'undefined') {\n        if (typeof targetSel === 'string') {\n          scrollEl = document.querySelector(targetSel) as HTMLElement | null;\n        } else if (targetSel instanceof HTMLElement) {\n          scrollEl = targetSel;\n        }\n      }\n\n      if (!scrollEl) {\n        scrollEl = window;\n      }\n\n      const listener = () => {\n        this.checkScroll(scrollEl);\n      };\n\n      scrollEl.addEventListener('scroll', listener, { passive: true });\n      this.checkScroll(scrollEl);\n\n      onCleanup(() => {\n        if (scrollEl) {\n          scrollEl.removeEventListener('scroll', listener);\n        }\n      });\n    }, { allowSignalWrites: true });\n  }\n\n  private checkScroll(scrollEl: HTMLElement | Window | null) {\n    let scrollTop = 0;\n    let scrollHeight = 0;\n    let clientHeight = 0;\n\n    if (typeof window !== 'undefined' && scrollEl === window) {\n      scrollTop = window.scrollY || document.documentElement.scrollTop;\n      scrollHeight = document.documentElement.scrollHeight;\n      clientHeight = document.documentElement.clientHeight;\n    } else if (scrollEl instanceof HTMLElement) {\n      scrollTop = scrollEl.scrollTop;\n      scrollHeight = scrollEl.scrollHeight;\n      clientHeight = scrollEl.clientHeight;\n    }\n\n    this.isVisible.set(scrollTop >= this.threshold());\n\n    const maxScroll = scrollHeight - clientHeight;\n    if (maxScroll > 0) {\n      const percent = Math.round((scrollTop / maxScroll) * 100);\n      this.scrollPercent.set(percent);\n    } else {\n      this.scrollPercent.set(0);\n    }\n  }\n\n  scrollToTop() {\n    const targetSel = this.target();\n    let scrollEl: HTMLElement | Window | null = null;\n    if (typeof document !== 'undefined') {\n      if (typeof targetSel === 'string') {\n        scrollEl = document.querySelector(targetSel) as HTMLElement | null;\n      } else if (targetSel instanceof HTMLElement) {\n        scrollEl = targetSel;\n      }\n    }\n    if (!scrollEl && typeof window !== 'undefined') {\n      scrollEl = window;\n    }\n\n    if (typeof window !== 'undefined' && scrollEl === window) {\n      window.scrollTo({ top: 0, behavior: 'smooth' });\n    } else if (scrollEl instanceof HTMLElement) {\n      scrollEl.scrollTo({ top: 0, behavior: 'smooth' });\n    }\n  }\n}\n","/*\n * Public API Surface — secondary entry point: ngx-core-components/navigation\n */\n\nexport { BreadcrumbComponent } from './breadcrumb/breadcrumb.component';\nexport type { BreadcrumbItem } from './breadcrumb/breadcrumb.component';\n\nexport { MenuComponent } from './menu/menu.component';\nexport type { MenuItem } from './menu/menu.component';\n\nexport { CommandPaletteComponent } from './command-palette/command-palette.component';\nexport type { CommandItem } from './command-palette/command-palette.component';\n\nexport { ContextMenuComponent } from './context-menu/context-menu.component';\nexport type { ContextMenuItem } from './context-menu/context-menu.component';\n\n// Back to Top Indicator\nexport { BackToTopComponent } from './back-to-top/back-to-top.component';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}