@cdevhub/ngx-tw 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +264 -49
- package/fesm2022/cdevhub-ngx-tw-accordion.mjs +11 -7
- package/fesm2022/cdevhub-ngx-tw-accordion.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-alert.mjs +43 -29
- package/fesm2022/cdevhub-ngx-tw-alert.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-aspect-ratio.mjs +103 -0
- package/fesm2022/cdevhub-ngx-tw-aspect-ratio.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-avatar.mjs +56 -31
- package/fesm2022/cdevhub-ngx-tw-avatar.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-badge.mjs +61 -35
- package/fesm2022/cdevhub-ngx-tw-badge.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-breadcrumbs.mjs +154 -93
- package/fesm2022/cdevhub-ngx-tw-breadcrumbs.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-button.mjs +35 -22
- package/fesm2022/cdevhub-ngx-tw-button.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-calendar-luxon.mjs +3 -3
- package/fesm2022/cdevhub-ngx-tw-calendar-luxon.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-calendar.mjs +416 -216
- package/fesm2022/cdevhub-ngx-tw-calendar.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-card.mjs +33 -24
- package/fesm2022/cdevhub-ngx-tw-card.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-carousel.mjs +152 -81
- package/fesm2022/cdevhub-ngx-tw-carousel.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-checkbox.mjs +99 -47
- package/fesm2022/cdevhub-ngx-tw-checkbox.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-code-block.mjs +42 -29
- package/fesm2022/cdevhub-ngx-tw-code-block.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-collapsible.mjs +46 -29
- package/fesm2022/cdevhub-ngx-tw-collapsible.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-combobox.mjs +205 -110
- package/fesm2022/cdevhub-ngx-tw-combobox.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-command-palette.mjs +141 -74
- package/fesm2022/cdevhub-ngx-tw-command-palette.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-core.mjs +16 -11
- package/fesm2022/cdevhub-ngx-tw-core.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-date-picker.mjs +395 -149
- package/fesm2022/cdevhub-ngx-tw-date-picker.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs +305 -150
- package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-dialog.mjs +56 -43
- package/fesm2022/cdevhub-ngx-tw-dialog.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-empty-state.mjs +51 -33
- package/fesm2022/cdevhub-ngx-tw-empty-state.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-file-upload.mjs +905 -0
- package/fesm2022/cdevhub-ngx-tw-file-upload.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-flip-card.mjs +49 -26
- package/fesm2022/cdevhub-ngx-tw-flip-card.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-form-field.mjs +133 -74
- package/fesm2022/cdevhub-ngx-tw-form-field.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-icon-lucide.mjs +2 -2
- package/fesm2022/cdevhub-ngx-tw-icon-lucide.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-icon.mjs +28 -17
- package/fesm2022/cdevhub-ngx-tw-icon.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-input.mjs +37 -21
- package/fesm2022/cdevhub-ngx-tw-input.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-item.mjs +33 -24
- package/fesm2022/cdevhub-ngx-tw-item.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-menu.mjs +63 -48
- package/fesm2022/cdevhub-ngx-tw-menu.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-number-input.mjs +622 -0
- package/fesm2022/cdevhub-ngx-tw-number-input.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-paginator.mjs +142 -72
- package/fesm2022/cdevhub-ngx-tw-paginator.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-popover.mjs +101 -46
- package/fesm2022/cdevhub-ngx-tw-popover.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-progress-bar.mjs +57 -30
- package/fesm2022/cdevhub-ngx-tw-progress-bar.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-radio.mjs +108 -57
- package/fesm2022/cdevhub-ngx-tw-radio.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-segmented-control.mjs +46 -26
- package/fesm2022/cdevhub-ngx-tw-segmented-control.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-select.mjs +227 -122
- package/fesm2022/cdevhub-ngx-tw-select.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-separator.mjs +21 -12
- package/fesm2022/cdevhub-ngx-tw-separator.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-sheet.mjs +58 -44
- package/fesm2022/cdevhub-ngx-tw-sheet.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-skeleton.mjs +25 -14
- package/fesm2022/cdevhub-ngx-tw-skeleton.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-slider.mjs +155 -79
- package/fesm2022/cdevhub-ngx-tw-slider.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-sort.mjs +47 -25
- package/fesm2022/cdevhub-ngx-tw-sort.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-spinner.mjs +29 -16
- package/fesm2022/cdevhub-ngx-tw-spinner.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-split.mjs +72 -42
- package/fesm2022/cdevhub-ngx-tw-split.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-stat.mjs +107 -64
- package/fesm2022/cdevhub-ngx-tw-stat.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-stepper.mjs +113 -47
- package/fesm2022/cdevhub-ngx-tw-stepper.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-switch.mjs +61 -32
- package/fesm2022/cdevhub-ngx-tw-switch.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-tab-nav.mjs +88 -42
- package/fesm2022/cdevhub-ngx-tw-tab-nav.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-table.mjs +266 -118
- package/fesm2022/cdevhub-ngx-tw-table.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-tabs.mjs +102 -52
- package/fesm2022/cdevhub-ngx-tw-tabs.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-tags-input.mjs +798 -0
- package/fesm2022/cdevhub-ngx-tw-tags-input.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-textarea.mjs +16 -8
- package/fesm2022/cdevhub-ngx-tw-textarea.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-theme.mjs +22 -14
- package/fesm2022/cdevhub-ngx-tw-theme.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-time-picker.mjs +243 -95
- package/fesm2022/cdevhub-ngx-tw-time-picker.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-timeline.mjs +149 -82
- package/fesm2022/cdevhub-ngx-tw-timeline.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-toast.mjs +100 -55
- package/fesm2022/cdevhub-ngx-tw-toast.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-tooltip.mjs +50 -28
- package/fesm2022/cdevhub-ngx-tw-tooltip.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-transfer.mjs +1129 -0
- package/fesm2022/cdevhub-ngx-tw-transfer.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-tree.mjs +554 -0
- package/fesm2022/cdevhub-ngx-tw-tree.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw.mjs +7 -0
- package/fesm2022/cdevhub-ngx-tw.mjs.map +1 -1
- package/package.json +45 -17
- package/theme/_dark.css +16 -12
- package/theme/_semantic.css +3 -2
- package/theme/index.css +10 -2
- package/types/cdevhub-ngx-tw-aspect-ratio.d.ts +40 -0
- package/types/cdevhub-ngx-tw-calendar.d.ts +39 -8
- package/types/cdevhub-ngx-tw-code-block.d.ts +8 -7
- package/types/cdevhub-ngx-tw-command-palette.d.ts +7 -0
- package/types/cdevhub-ngx-tw-date-picker.d.ts +36 -10
- package/types/cdevhub-ngx-tw-file-upload.d.ts +250 -0
- package/types/cdevhub-ngx-tw-form-field.d.ts +22 -3
- package/types/cdevhub-ngx-tw-icon-lucide.d.ts +21 -3
- package/types/cdevhub-ngx-tw-number-input.d.ts +130 -0
- package/types/cdevhub-ngx-tw-popover.d.ts +8 -0
- package/types/cdevhub-ngx-tw-select.d.ts +1 -1
- package/types/cdevhub-ngx-tw-stepper.d.ts +30 -2
- package/types/cdevhub-ngx-tw-tab-nav.d.ts +8 -0
- package/types/cdevhub-ngx-tw-table.d.ts +30 -1
- package/types/cdevhub-ngx-tw-tabs.d.ts +8 -0
- package/types/cdevhub-ngx-tw-tags-input.d.ts +217 -0
- package/types/cdevhub-ngx-tw-time-picker.d.ts +31 -6
- package/types/cdevhub-ngx-tw-toast.d.ts +1 -1
- package/types/cdevhub-ngx-tw-transfer.d.ts +330 -0
- package/types/cdevhub-ngx-tw-tree.d.ts +189 -0
- package/types/cdevhub-ngx-tw.d.ts +7 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cdevhub-ngx-tw-command-palette.mjs","sources":["../../../projects/ngx-tw/command-palette/command-palette-tokens.ts","../../../projects/ngx-tw/command-palette/command-palette.ts","../../../projects/ngx-tw/command-palette/command-palette-overlay.html","../../../projects/ngx-tw/command-palette/cdevhub-ngx-tw-command-palette.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\n/** A single command palette entry. */\nexport interface CommandPaletteItem {\n /** Stable identifier used as the DOM id and for selection payloads. */\n id: string;\n /** Visible label used for rendering and default filtering. */\n label: string;\n /** Additional search keywords that match the query but are not rendered. */\n keywords?: readonly string[];\n /** Group header name. Items sharing a group render under one section. */\n group?: string;\n /** Disabled items render but cannot be activated. */\n disabled?: boolean;\n /** Shortcut hint to render on the right edge. */\n shortcut?: string | readonly string[];\n /** Secondary description text rendered under the label. */\n description?: string;\n /** Optional icon name (consumers decide how to render). */\n icon?: string;\n /** Activation callback invoked before `itemSelected` is emitted. */\n run?: () => void;\n}\n\n/** Filter signature. Receives the merged item list plus the current query; returns the filtered/reordered list. */\nexport type CommandPaletteFilterFn = (\n items: readonly CommandPaletteItem[],\n query: string,\n) => readonly CommandPaletteItem[];\n\n/** Control handle exposed inside the palette overlay (for future component-based content). */\nexport interface CommandPaletteRef {\n /** Closes the palette. */\n close(): void;\n /** Updates the search query programmatically. */\n setQuery(query: string): void;\n}\n\n/** Injection token providing a `CommandPaletteRef` to palette overlay content. */\nexport const COMMAND_PALETTE_REF = new InjectionToken<CommandPaletteRef>(\n 'COMMAND_PALETTE_REF',\n);\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n contentChildren,\n DestroyRef,\n Directive,\n effect,\n type ElementRef,\n inject,\n Injector,\n input,\n linkedSignal,\n model,\n output,\n signal,\n TemplateRef,\n untracked,\n viewChild,\n ViewContainerRef,\n type Signal,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { Overlay, type OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { FocusTrapFactory, LiveAnnouncer } from '@angular/cdk/a11y';\nimport { Subscription } from 'rxjs';\nimport { tv } from 'tailwind-variants';\nimport type { TwSize } from '@cdevhub/ngx-tw/core';\nimport {\n COMMAND_PALETTE_REF,\n type CommandPaletteFilterFn,\n type CommandPaletteItem,\n type CommandPaletteRef,\n} from './command-palette-tokens';\n\n// ── Constants ──\n\n/** Duration of leave animation (ms) — matches scale-out/fade-out in theme/_base.css. */\nconst ANIMATION_DURATION = 120;\n\n/** Debounce window (ms) for live-region result announcements while typing. */\nconst ANNOUNCE_DEBOUNCE = 200;\n\nlet nextPaletteId = 0;\n\n// ── Types ──\n\n/** Resolved item shape used internally — merges declarative directive refs with data entries. */\ninterface ResolvedItem {\n readonly data: CommandPaletteItem;\n readonly directive?: CommandPaletteItemDirective;\n readonly template?: TemplateRef<unknown>;\n readonly shortcutKeys: readonly string[];\n}\n\n/** A rendered group in the filtered view. */\ninterface ResolvedGroup {\n readonly id: string;\n readonly label?: string;\n readonly items: readonly ResolvedItem[];\n}\n\n// ── Variant config ──\n\nconst commandPaletteVariants = tv(\n {\n slots: {\n panel:\n 'pointer-events-auto w-full max-w-xl mt-[15vh] bg-surface-overlay text-fg rounded-lg border border-border shadow-md overflow-hidden flex flex-col max-h-[70vh] outline-none',\n searchWrapper: 'flex items-center gap-3 border-b border-border px-4',\n searchInput:\n 'flex-1 bg-transparent border-0 outline-none text-fg placeholder:text-fg-subtle',\n searchIcon: 'size-5 shrink-0 text-fg-muted',\n list: 'flex-1 overflow-y-auto py-1',\n groupHeader:\n 'px-4 text-xs font-semibold uppercase tracking-wide text-fg-subtle',\n item:\n 'relative flex items-center gap-3 px-4 select-none transition-colors duration-normal motion-reduce:transition-none text-fg outline-none',\n itemBody: 'flex-1 min-w-0 flex flex-col',\n itemLabel: 'min-w-0 truncate',\n itemDescription: 'block text-xs text-fg-muted mt-0.5 min-w-0 truncate',\n itemShortcut: 'ml-auto flex items-center gap-1 pl-3 shrink-0',\n itemKbd:\n 'inline-flex items-center justify-center min-w-5 h-5 px-1 rounded-md border border-border bg-surface-muted text-fg-muted text-2xs font-mono',\n empty: 'px-4 py-10 text-center text-sm text-fg-muted',\n footer: 'border-t border-border px-4 py-2 bg-surface-muted',\n },\n variants: {\n size: {\n xs: {\n item: 'py-1 text-xs',\n searchInput: 'py-2 text-xs',\n groupHeader: 'pt-2 pb-0.5',\n },\n sm: {\n item: 'py-1.5 text-xs',\n searchInput: 'py-2.5 text-xs',\n groupHeader: 'pt-2 pb-0.5',\n },\n md: {\n item: 'py-2 text-sm',\n searchInput: 'py-3 text-sm',\n groupHeader: 'pt-3 pb-1',\n },\n lg: {\n item: 'py-2.5 text-sm',\n searchInput: 'py-3.5 text-base',\n groupHeader: 'pt-3 pb-1',\n },\n xl: {\n item: 'py-3 text-base',\n searchInput: 'py-4 text-base',\n groupHeader: 'pt-4 pb-1',\n },\n },\n // Active option uses `bg-surface-sunken` (one step recessed from `bg-surface-muted`)\n // so the activedescendant-listbox carve-out remains unambiguously distinguishable\n // from the hovered non-active state — DOM focus stays on the combobox input, so\n // this background shift is the only visual signal for the keyboard-active option.\n active: {\n true: { item: 'bg-surface-sunken' },\n false: { item: '' },\n },\n disabled: {\n true: { item: 'opacity-50 pointer-events-none cursor-default' },\n false: { item: 'cursor-pointer hover:bg-surface-muted' },\n },\n },\n compoundVariants: [\n {\n // When an item is BOTH active and enabled, drop the non-active hover token so\n // hovering the keyboard-active option doesn't visually demote it to the\n // hovered-non-active state. Without this, twMerge keeps both background classes\n // and the active sunken fill flips to muted on hover.\n active: true,\n disabled: false,\n class: { item: 'hover:bg-surface-sunken' },\n },\n ],\n defaultVariants: { size: 'md', active: false, disabled: false },\n },\n { twMerge: true },\n);\n\n// ── Helpers ──\n\nfunction normalizeShortcut(\n value: string | readonly string[] | undefined,\n): readonly string[] {\n if (value == null) return [];\n return Array.isArray(value) ? value : [value as string];\n}\n\nfunction defaultFilter(\n items: readonly CommandPaletteItem[],\n query: string,\n): readonly CommandPaletteItem[] {\n const trimmed = query.trim().toLowerCase();\n if (!trimmed) return items;\n return items.filter((item) => {\n if (item.label.toLowerCase().includes(trimmed)) return true;\n if (item.group && item.group.toLowerCase().includes(trimmed)) return true;\n if (item.keywords) {\n for (const keyword of item.keywords) {\n if (keyword.toLowerCase().includes(trimmed)) return true;\n }\n }\n return false;\n });\n}\n\nfunction findFirstEnabled(items: readonly ResolvedItem[]): number {\n for (let i = 0; i < items.length; i++) {\n if (!items[i].data.disabled) return i;\n }\n return 0;\n}\n\nfunction findLastEnabled(items: readonly ResolvedItem[]): number {\n for (let i = items.length - 1; i >= 0; i--) {\n if (!items[i].data.disabled) return i;\n }\n return items.length - 1;\n}\n\n// ── Group directive ──\n\n/** Optional explicit grouping wrapper. Items placed inside inherit its label. */\n@Directive({\n selector: '[twCommandPaletteGroup]',\n})\nexport class CommandPaletteGroupDirective {\n /** Group heading text shown above the items. Required. */\n readonly label = input.required<string>();\n}\n\n// ── Item directive (component with projection) ──\n\n/** A declarative palette item. Consumers project its rendered content as children. */\n@Component({\n selector: 'tw-command-palette-item',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n style: 'display: none',\n },\n template: `<ng-template #content><ng-content /></ng-template>`,\n})\nexport class CommandPaletteItemDirective {\n /** Stable identifier for the item. Used as DOM id and in selection payloads. Required. */\n readonly id = input.required<string>();\n\n /** Plain-text label used for filtering and default rendering. Defaults to `''`. */\n readonly label = input<string>('');\n\n /** Additional search keywords that match the query but are not rendered. Defaults to `[]`. */\n readonly keywords = input<readonly string[]>([]);\n\n /** Explicit group name. Overrides any enclosing `twCommandPaletteGroup`. Defaults to `undefined`. */\n readonly group = input<string | undefined>(undefined);\n\n /** Whether the item is disabled. Disabled items render but cannot be activated. Defaults to `false`. */\n readonly disabled = input<boolean>(false);\n\n /** Keyboard shortcut hint. A string renders as one kbd; an array renders each key separately. Defaults to `undefined`. */\n readonly shortcut = input<string | readonly string[] | undefined>(undefined);\n\n /** Secondary description text rendered under the label. Defaults to `''`. */\n readonly description = input<string>('');\n\n /** Callback run before `activated` emits. Defaults to `undefined`. */\n readonly run = input<(() => void) | undefined>(undefined);\n\n /** Fires when this specific item is activated (Enter or click). */\n readonly activated = output<void>();\n\n /** Projected template used by the palette overlay to render this item's content. */\n readonly contentTemplate = viewChild<TemplateRef<unknown>>('content');\n\n private readonly parentGroup = inject(CommandPaletteGroupDirective, {\n optional: true,\n skipSelf: true,\n });\n\n /** Resolved CommandPaletteItem data derived from inputs + parent group. */\n readonly data: Signal<CommandPaletteItem> = computed(() => ({\n id: this.id(),\n label: this.label(),\n keywords: this.keywords(),\n group: this.group() ?? this.parentGroup?.label() ?? undefined,\n disabled: this.disabled(),\n shortcut: this.shortcut(),\n description: this.description() || undefined,\n run: this.run(),\n }));\n}\n\n// ── Item decoration directives ──\n\n/** Styles a leading icon inside a palette item. */\n@Directive({\n selector: '[twCommandPaletteItemIcon]',\n host: {\n class: 'size-4 shrink-0 text-fg-muted',\n },\n})\nexport class CommandPaletteItemIconDirective {}\n\n/** Styles secondary description text inside a palette item. */\n@Directive({\n selector: '[twCommandPaletteItemDescription]',\n host: {\n class: 'block text-xs text-fg-muted mt-0.5 min-w-0 truncate',\n },\n})\nexport class CommandPaletteItemDescriptionDirective {}\n\n// ── Template directives ──\n\n/** Structural directive — consumer template rendered when no items match the query. */\n@Directive({\n selector: '[twCommandPaletteEmpty]',\n})\nexport class CommandPaletteEmptyDirective {\n readonly template = inject(TemplateRef<{ $implicit: string }>);\n}\n\n/** Structural directive — consumer template rendered as a sticky footer inside the palette. */\n@Directive({\n selector: '[twCommandPaletteFooter]',\n})\nexport class CommandPaletteFooterDirective {\n readonly template = inject(TemplateRef<void>);\n}\n\n// ── Overlay component (private, not exported) ──\n\n@Component({\n selector: 'tw-command-palette-overlay',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet],\n host: {\n class:\n 'fixed inset-0 flex items-start justify-center p-4 pointer-events-none origin-top',\n '[attr.data-command-palette-overlay]': '\"\"',\n '[animate.enter]': '\"scale-in\"',\n '[animate.leave]': '\"scale-out\"',\n },\n templateUrl: './command-palette-overlay.html',\n})\nclass CommandPaletteOverlayComponent {\n /** Host palette instance — provided via the content injector on attach. */\n readonly palette = inject(CommandPaletteComponent);\n\n readonly listId = `tw-command-palette-list-${nextPaletteId++}`;\n\n readonly searchInputRef = viewChild<ElementRef<HTMLInputElement>>('searchInput');\n\n private readonly variantResult = computed(() =>\n commandPaletteVariants({ size: this.palette.size() }),\n );\n\n protected readonly panelClasses = computed(() => {\n const base = this.variantResult().panel();\n const custom = this.palette.panelClassResolved();\n return custom ? `${base} ${custom}` : base;\n });\n protected readonly searchWrapperClasses = computed(() =>\n this.variantResult().searchWrapper(),\n );\n protected readonly searchInputClasses = computed(() =>\n this.variantResult().searchInput(),\n );\n protected readonly searchIconClasses = computed(() =>\n this.variantResult().searchIcon(),\n );\n protected readonly listClasses = computed(() => this.variantResult().list());\n protected readonly groupHeaderClasses = computed(() =>\n this.variantResult().groupHeader(),\n );\n protected readonly itemBodyClasses = computed(() =>\n this.variantResult().itemBody(),\n );\n protected readonly itemLabelClasses = computed(() =>\n this.variantResult().itemLabel(),\n );\n protected readonly itemDescriptionClasses = computed(() =>\n this.variantResult().itemDescription(),\n );\n protected readonly itemShortcutClasses = computed(() =>\n this.variantResult().itemShortcut(),\n );\n protected readonly itemKbdClasses = computed(() =>\n this.variantResult().itemKbd(),\n );\n protected readonly emptyClasses = computed(() => this.variantResult().empty());\n protected readonly footerClasses = computed(() => this.variantResult().footer());\n\n protected itemClasses(active: boolean, disabled: boolean): string {\n return commandPaletteVariants({\n size: this.palette.size(),\n active,\n disabled,\n }).item();\n }\n\n protected onSearchInput(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n this.palette.query.set(value);\n }\n\n protected onItemClick(item: ResolvedItem): void {\n this.palette.selectItem(item);\n }\n\n protected onItemHover(item: ResolvedItem): void {\n this.palette.setActiveItem(item);\n }\n\n /** Focuses the search input (called by the palette after attach). */\n focusSearch(): void {\n this.searchInputRef()?.nativeElement.focus();\n }\n}\n\n// ── Public palette component ──\n\n@Component({\n selector: 'tw-command-palette',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n style: 'display: none',\n },\n template: `<ng-content />`,\n})\nexport class CommandPaletteComponent {\n /** Controls item density and padding across the palette. Defaults to `'md'`. */\n readonly size = input<TwSize>('md');\n\n /** Placeholder text shown inside the search input. Defaults to `'Type a command or search…'`. */\n readonly placeholder = input<string>('Type a command or search…');\n\n /** Two-way bindable search query. Reads or resets the current filter. Defaults to `''`. */\n readonly query = model<string>('');\n\n /** Two-way bindable open state. Setting to `true` opens the palette; closing updates it to `false`. Defaults to `false`. */\n readonly open = model<boolean>(false);\n\n /** Data-driven command list. Merged with projected items and filtered by `query`. Defaults to `[]`. */\n readonly commands = input<readonly CommandPaletteItem[]>([]);\n\n /** Custom filter function. Receives the merged item list and current query, returns the filtered result. Defaults to `undefined` (case-insensitive substring match). */\n readonly filterFn = input<CommandPaletteFilterFn | undefined>(undefined);\n\n /** Whether the palette closes automatically after an item is activated. Defaults to `true` — a command palette is a fire-and-dismiss surface; the special case is a \"run many\" launcher that opts out. */\n readonly closeOnSelect = input<boolean>(true);\n\n /** Whether Escape closes the palette. Defaults to `true` — Escape is the universal dismiss key for modal surfaces; the special case is a non-dismissible palette. */\n readonly closeOnEscape = input<boolean>(true);\n\n /** Whether clicking the backdrop closes the palette. Defaults to `true` — clicking outside a modal is the expected dismiss gesture; the special case is enforcing an explicit choice. */\n readonly closeOnBackdropClick = input<boolean>(true);\n\n /** Whether the search input is auto-focused when the palette opens. Defaults to `true` — without auto-focus the user must click into the input before typing, defeating the keyboard-first design. */\n readonly autoFocus = input<boolean>(true);\n\n /** Accessible label used for the dialog role. Defaults to `'Command palette'`. */\n readonly ariaLabel = input<string>('Command palette');\n\n /** Accessible label applied to the search input (`role=\"combobox\"`). Defaults to `'Search commands'`. */\n readonly searchAriaLabel = input<string>('Search commands');\n\n /** Additional classes appended to the overlay panel for consumer customization. Defaults to `''`. */\n readonly panelClass = input<string | string[]>('');\n\n /** Fires when a command is activated (via click or Enter). Payload is the resolved `CommandPaletteItem`. */\n readonly itemSelected = output<CommandPaletteItem>();\n\n /** Fires after the palette becomes fully visible. */\n readonly opened = output<void>();\n\n /** Fires after the palette is fully removed from the DOM. */\n readonly closed = output<void>();\n\n private readonly overlay = inject(Overlay);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly injector = inject(Injector);\n private readonly destroyRef = inject(DestroyRef);\n private readonly focusTrapFactory = inject(FocusTrapFactory);\n private readonly announcer = inject(LiveAnnouncer);\n\n private readonly declarativeItems = contentChildren(CommandPaletteItemDirective, {\n descendants: true,\n });\n private readonly emptyDirective = contentChild(CommandPaletteEmptyDirective);\n private readonly footerDirective = contentChild(CommandPaletteFooterDirective);\n\n private overlayRef: OverlayRef | null = null;\n private overlayInstance: CommandPaletteOverlayComponent | null = null;\n private focusTrap: ReturnType<FocusTrapFactory['create']> | null = null;\n private perOpenSubs: Subscription | null = null;\n private previousFocus: HTMLElement | null = null;\n private closing = false;\n private closeTimer: ReturnType<typeof setTimeout> | null = null;\n private announceTimer: ReturnType<typeof setTimeout> | null = null;\n\n private readonly isAttached = signal(false);\n\n /** Merged (declarative + data-array) items keyed by id — declarative wins on collision. */\n private readonly allItems = computed<readonly ResolvedItem[]>(() => {\n const declarative = this.declarativeItems();\n const declarativeResolved: ResolvedItem[] = declarative.map((dir) => ({\n data: dir.data(),\n directive: dir,\n template: dir.contentTemplate(),\n shortcutKeys: normalizeShortcut(dir.shortcut()),\n }));\n const seenIds = new Set<string>(declarativeResolved.map((it) => it.data.id));\n\n const arrayItems = this.commands();\n const arrayResolved: ResolvedItem[] = [];\n for (const data of arrayItems) {\n if (seenIds.has(data.id)) continue;\n seenIds.add(data.id);\n arrayResolved.push({\n data,\n shortcutKeys: normalizeShortcut(data.shortcut),\n });\n }\n return [...declarativeResolved, ...arrayResolved];\n });\n\n /** Items after applying the filter function. */\n readonly filteredItems = computed<readonly ResolvedItem[]>(() => {\n const all = this.allItems();\n const q = this.query();\n const dataList = all.map((r) => r.data);\n const fn = this.filterFn();\n const filtered = fn ? fn(dataList, q) : defaultFilter(dataList, q);\n const byId = new Map<string, ResolvedItem>();\n for (const r of all) byId.set(r.data.id, r);\n const result: ResolvedItem[] = [];\n for (const data of filtered) {\n const resolved = byId.get(data.id);\n if (resolved) result.push(resolved);\n }\n return result;\n });\n\n /** Filtered items grouped by their `group` field. */\n readonly grouped = computed<readonly ResolvedGroup[]>(() => {\n const items = this.filteredItems();\n const groups: { id: string; label?: string; items: ResolvedItem[] }[] = [];\n const byKey = new Map<string, { id: string; label?: string; items: ResolvedItem[] }>();\n for (const item of items) {\n const label = item.data.group;\n const key = label ?? '__ungrouped__';\n let g = byKey.get(key);\n if (!g) {\n g = { id: `group-${key}`, label, items: [] };\n byKey.set(key, g);\n groups.push(g);\n }\n g.items.push(item);\n }\n return groups;\n });\n\n /**\n * Active item index, auto-resets to the first enabled item when the filtered\n * *id set* changes. Keyed off the id sequence (not the array reference) so a\n * re-emission of `filteredItems` with identical ids preserves the user's\n * keyboard selection; only when ids actually shift do we recompute. When the\n * previously-active id is still present in the new sequence its index is\n * carried over; otherwise we fall back to the first enabled item.\n */\n readonly activeIndex = linkedSignal<readonly string[], number>({\n source: () => this.filteredItems().map((i) => i.data.id),\n computation: (ids, previous) => {\n const items = this.filteredItems();\n if (!previous) return findFirstEnabled(items);\n const prevId = previous.source[previous.value];\n if (prevId) {\n const carriedIndex = ids.indexOf(prevId);\n if (carriedIndex >= 0) return carriedIndex;\n }\n return findFirstEnabled(items);\n },\n });\n\n /** Id of the currently active item (for `aria-activedescendant`). */\n readonly activeItemId = computed<string | null>(() => {\n const idx = this.activeIndex();\n const items = this.filteredItems();\n return items[idx]?.data.id ?? null;\n });\n\n /** Template-ref of the projected empty state (if any). */\n readonly emptyTemplate = computed<TemplateRef<{ $implicit: string }> | null>(\n () => this.emptyDirective()?.template ?? null,\n );\n\n /** Template-ref of the projected footer (if any). */\n readonly footerTemplate = computed<TemplateRef<void> | null>(\n () => this.footerDirective()?.template ?? null,\n );\n\n /** Resolved panel-class string (array merged into a single string). */\n readonly panelClassResolved = computed<string>(() => {\n const raw = this.panelClass();\n return Array.isArray(raw) ? raw.join(' ') : raw;\n });\n\n constructor() {\n // React to model changes from the consumer\n effect(() => {\n const shouldOpen = this.open();\n if (shouldOpen && !this.overlayInstance && !this.closing) {\n this.openPalette();\n } else if (!shouldOpen && this.overlayInstance && !this.closing) {\n this.closePalette();\n }\n });\n\n // Debounced live-region announcements while the palette is open\n effect(() => {\n const q = this.query();\n const count = this.filteredItems().length;\n untracked(() => {\n if (!this.isAttached()) return;\n this.clearAnnounceTimer();\n this.announceTimer = setTimeout(() => {\n const message =\n count === 0\n ? `No commands match ${q}`\n : `${count} ${count === 1 ? 'result' : 'results'} for ${q}`;\n this.announcer.announce(message, 'polite');\n }, ANNOUNCE_DEBOUNCE);\n });\n });\n\n this.destroyRef.onDestroy(() => {\n this.clearCloseTimer();\n this.clearAnnounceTimer();\n this.destroyFocusTrap();\n this.perOpenSubs?.unsubscribe();\n this.disposeOverlay();\n });\n }\n\n // ── Public API ──\n\n /** Open the palette programmatically. */\n show(): void {\n if (this.overlayInstance || this.closing) return;\n this.open.set(true);\n }\n\n /** Close the palette programmatically. */\n hide(): void {\n if (!this.overlayInstance || this.closing) return;\n this.closePalette();\n }\n\n /** Toggle the current open state. */\n toggle(): void {\n if (this.overlayInstance || this.closing) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n /** Force the palette to reapply focus to the search input. */\n focusSearch(): void {\n this.overlayInstance?.focusSearch();\n }\n\n // ── Internal wiring (used by overlay) ──\n\n /** Activate an item: run callbacks, emit events, optionally close. */\n selectItem(item: ResolvedItem): void {\n if (item.data.disabled) return;\n item.data.run?.();\n item.directive?.activated.emit();\n this.itemSelected.emit(item.data);\n if (this.closeOnSelect()) this.hide();\n }\n\n /** Move the active descendant to the given item (used on hover). */\n setActiveItem(item: ResolvedItem): void {\n if (item.data.disabled) return;\n const idx = this.filteredItems().indexOf(item);\n if (idx >= 0) this.activeIndex.set(idx);\n }\n\n // ── Private ──\n\n private openPalette(): void {\n this.previousFocus =\n (document.activeElement as HTMLElement | null) ?? null;\n this.ensureOverlay();\n this.attachContent();\n this.subscribePerOpen();\n this.isAttached.set(true);\n this.setupFocusTrap();\n if (this.autoFocus()) {\n queueMicrotask(() => this.overlayInstance?.focusSearch());\n }\n this.announcer.announce(\n `Command palette opened. ${this.filteredItems().length} commands available.`,\n 'polite',\n );\n this.opened.emit();\n }\n\n private closePalette(): void {\n if (this.closing) return;\n this.closing = true;\n\n this.destroyFocusTrap();\n\n this.previousFocus?.focus();\n this.previousFocus = null;\n\n this.closeTimer = setTimeout(() => {\n this.closeTimer = null;\n\n // Guard against teardown during the animation window. `destroyRef.onDestroy`\n // calls `clearCloseTimer()` so this branch only fires when the timer survived;\n // even so, `isAttached` is the authoritative signal — if the overlay already\n // detached (programmatic disposeOverlay, double-close race), skip writes that\n // would touch a destroyed instance or re-emit `open=false`.\n if (!this.isAttached()) {\n this.closing = false;\n return;\n }\n\n if (this.overlayRef?.hasAttached()) {\n this.overlayRef.detach();\n }\n\n this.perOpenSubs?.unsubscribe();\n this.perOpenSubs = null;\n this.overlayInstance = null;\n this.isAttached.set(false);\n\n untracked(() => this.open.set(false));\n\n this.closed.emit();\n this.closing = false;\n }, ANIMATION_DURATION);\n }\n\n private ensureOverlay(): void {\n if (this.overlayRef) return;\n const positionStrategy = this.overlay.position().global();\n const scrollStrategy = this.overlay.scrollStrategies.block();\n this.overlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy,\n hasBackdrop: true,\n backdropClass: 'tw-dialog-backdrop',\n panelClass: 'tw-command-palette-panel',\n });\n }\n\n private attachContent(): void {\n if (!this.overlayRef) return;\n const paletteRef: CommandPaletteRef = {\n close: () => this.hide(),\n setQuery: (q) => this.query.set(q),\n };\n const contentInjector = Injector.create({\n parent: this.injector,\n providers: [\n { provide: CommandPaletteComponent, useValue: this },\n { provide: COMMAND_PALETTE_REF, useValue: paletteRef },\n ],\n });\n const portal = new ComponentPortal(\n CommandPaletteOverlayComponent,\n this.viewContainerRef,\n contentInjector,\n );\n const ref = this.overlayRef.attach(portal);\n this.overlayInstance = ref.instance;\n }\n\n private subscribePerOpen(): void {\n this.perOpenSubs?.unsubscribe();\n this.perOpenSubs = new Subscription();\n\n this.perOpenSubs.add(\n this.overlayRef!.backdropClick().subscribe(() => {\n if (this.closeOnBackdropClick()) this.hide();\n }),\n );\n\n this.perOpenSubs.add(\n this.overlayRef!.keydownEvents().subscribe((event) =>\n this.handleOverlayKeydown(event),\n ),\n );\n }\n\n private handleOverlayKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'Escape':\n if (this.closeOnEscape()) {\n event.preventDefault();\n this.hide();\n }\n break;\n case 'ArrowDown':\n event.preventDefault();\n this.moveActive(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.moveActive(-1);\n break;\n case 'Home':\n event.preventDefault();\n this.activeIndex.set(findFirstEnabled(this.filteredItems()));\n break;\n case 'End':\n event.preventDefault();\n this.activeIndex.set(findLastEnabled(this.filteredItems()));\n break;\n case 'Enter':\n event.preventDefault();\n this.activateActive();\n break;\n // Tab is intentionally NOT handled here — the FocusTrap installed in\n // `setupFocusTrap()` cycles focus through the modal's focusable elements,\n // so the user cannot accidentally tab out of the palette. Closing on Tab\n // (the previous behaviour) ran counter to the universal \"Tab moves focus\n // within a modal\" convention and surprised keyboard users.\n }\n }\n\n private moveActive(delta: 1 | -1): void {\n const items = this.filteredItems();\n if (items.length === 0) return;\n const n = items.length;\n let idx = this.activeIndex();\n for (let i = 0; i < n; i++) {\n idx = (idx + delta + n) % n;\n if (!items[idx].data.disabled) {\n this.activeIndex.set(idx);\n return;\n }\n }\n }\n\n private activateActive(): void {\n const items = this.filteredItems();\n const item = items[this.activeIndex()];\n if (item && !item.data.disabled) this.selectItem(item);\n }\n\n private setupFocusTrap(): void {\n if (!this.overlayRef) return;\n this.focusTrap = this.focusTrapFactory.create(this.overlayRef.overlayElement);\n }\n\n private destroyFocusTrap(): void {\n this.focusTrap?.destroy();\n this.focusTrap = null;\n }\n\n private disposeOverlay(): void {\n this.overlayRef?.dispose();\n this.overlayRef = null;\n this.overlayInstance = null;\n }\n\n private clearCloseTimer(): void {\n if (this.closeTimer !== null) {\n clearTimeout(this.closeTimer);\n this.closeTimer = null;\n }\n }\n\n private clearAnnounceTimer(): void {\n if (this.announceTimer !== null) {\n clearTimeout(this.announceTimer);\n this.announceTimer = null;\n }\n }\n}\n","<div [class]=\"panelClasses()\" role=\"dialog\" [attr.aria-modal]=\"'true'\" [attr.aria-label]=\"palette.ariaLabel()\">\n <div [class]=\"searchWrapperClasses()\">\n <svg [class]=\"searchIconClasses()\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M9 3.5a5.5 5.5 0 100 11 5.5 5.5 0 000-11zM2 9a7 7 0 1112.452 4.391l3.328 3.329a.75.75 0 11-1.06 1.06l-3.329-3.328A7 7 0 012 9z\" clip-rule=\"evenodd\" />\n </svg>\n <input\n #searchInput\n type=\"text\"\n role=\"combobox\"\n [class]=\"searchInputClasses()\"\n [placeholder]=\"palette.placeholder()\"\n [value]=\"palette.query()\"\n (input)=\"onSearchInput($event)\"\n [attr.aria-label]=\"palette.searchAriaLabel()\"\n [attr.aria-expanded]=\"'true'\"\n [attr.aria-controls]=\"listId\"\n [attr.aria-activedescendant]=\"palette.activeItemId()\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n />\n </div>\n <div [class]=\"listClasses()\" role=\"listbox\" [id]=\"listId\">\n @if (palette.grouped().length === 0) {\n @if (palette.emptyTemplate(); as emptyTpl) {\n <div [class]=\"emptyClasses()\">\n <ng-container [ngTemplateOutlet]=\"emptyTpl\" [ngTemplateOutletContext]=\"{ $implicit: palette.query() }\" />\n </div>\n } @else {\n <div [class]=\"emptyClasses()\">No results found</div>\n }\n } @else {\n @for (group of palette.grouped(); track group.id) {\n <div role=\"group\" [attr.aria-label]=\"group.label ?? null\">\n @if (group.label) {\n <div [class]=\"groupHeaderClasses()\" role=\"presentation\">{{ group.label }}</div>\n }\n @for (item of group.items; track item.data.id) {\n <div\n [id]=\"item.data.id\"\n role=\"option\"\n [class]=\"itemClasses(item.data.id === palette.activeItemId(), item.data.disabled ?? false)\"\n [attr.aria-selected]=\"item.data.id === palette.activeItemId()\"\n [attr.aria-disabled]=\"(item.data.disabled ?? false) ? 'true' : null\"\n (click)=\"onItemClick(item)\"\n (mousemove)=\"onItemHover(item)\"\n >\n <span [class]=\"itemBodyClasses()\">\n @if (item.template; as tpl) {\n <span [class]=\"itemLabelClasses()\">\n <ng-container [ngTemplateOutlet]=\"tpl\" />\n </span>\n } @else {\n <span [class]=\"itemLabelClasses()\">{{ item.data.label }}</span>\n }\n @if (item.data.description) {\n <span [class]=\"itemDescriptionClasses()\">{{ item.data.description }}</span>\n }\n </span>\n @if (item.shortcutKeys.length > 0) {\n <span [class]=\"itemShortcutClasses()\" aria-hidden=\"true\">\n @for (key of item.shortcutKeys; track $index) {\n <kbd [class]=\"itemKbdClasses()\">{{ key }}</kbd>\n }\n </span>\n }\n </div>\n }\n </div>\n }\n }\n </div>\n @if (palette.footerTemplate(); as footerTpl) {\n <div [class]=\"footerClasses()\">\n <ng-container [ngTemplateOutlet]=\"footerTpl\" />\n </div>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cdevhub-ngx-tw-command-palette.mjs","sources":["../../../projects/ngx-tw/command-palette/command-palette-tokens.ts","../../../projects/ngx-tw/command-palette/command-palette.ts","../../../projects/ngx-tw/command-palette/command-palette-overlay.html","../../../projects/ngx-tw/command-palette/cdevhub-ngx-tw-command-palette.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\n/** A single command palette entry. */\nexport interface CommandPaletteItem {\n /** Stable identifier used as the DOM id and for selection payloads. */\n id: string;\n /** Visible label used for rendering and default filtering. */\n label: string;\n /** Additional search keywords that match the query but are not rendered. */\n keywords?: readonly string[];\n /** Group header name. Items sharing a group render under one section. */\n group?: string;\n /** Disabled items render but cannot be activated. */\n disabled?: boolean;\n /** Shortcut hint to render on the right edge. */\n shortcut?: string | readonly string[];\n /** Secondary description text rendered under the label. */\n description?: string;\n /** Optional icon name (consumers decide how to render). */\n icon?: string;\n /** Activation callback invoked before `itemSelected` is emitted. */\n run?: () => void;\n}\n\n/** Filter signature. Receives the merged item list plus the current query; returns the filtered/reordered list. */\nexport type CommandPaletteFilterFn = (\n items: readonly CommandPaletteItem[],\n query: string,\n) => readonly CommandPaletteItem[];\n\n/** Control handle exposed inside the palette overlay (for future component-based content). */\nexport interface CommandPaletteRef {\n /** Closes the palette. */\n close(): void;\n /** Updates the search query programmatically. */\n setQuery(query: string): void;\n}\n\n/** Injection token providing a `CommandPaletteRef` to palette overlay content. */\nexport const COMMAND_PALETTE_REF = new InjectionToken<CommandPaletteRef>(\n 'COMMAND_PALETTE_REF',\n);\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n contentChildren,\n DestroyRef,\n Directive,\n effect,\n type ElementRef,\n inject,\n Injector,\n input,\n linkedSignal,\n model,\n output,\n signal,\n TemplateRef,\n untracked,\n viewChild,\n ViewContainerRef,\n type Signal,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { Overlay, type OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { FocusTrapFactory, LiveAnnouncer } from '@angular/cdk/a11y';\nimport { Subscription } from 'rxjs';\nimport { tv } from 'tailwind-variants';\nimport type { TwSize } from '@cdevhub/ngx-tw/core';\nimport {\n COMMAND_PALETTE_REF,\n type CommandPaletteFilterFn,\n type CommandPaletteItem,\n type CommandPaletteRef,\n} from './command-palette-tokens';\n\n// ── Constants ──\n\n/** Duration of leave animation (ms) — matches scale-out/fade-out in theme/_base.css. */\nconst ANIMATION_DURATION = 120;\n\n/** Debounce window (ms) for live-region result announcements while typing. */\nconst ANNOUNCE_DEBOUNCE = 200;\n\nlet nextPaletteId = 0;\n\n// ── Types ──\n\n/** Resolved item shape used internally — merges declarative directive refs with data entries. */\ninterface ResolvedItem {\n readonly data: CommandPaletteItem;\n readonly directive?: CommandPaletteItemDirective;\n readonly template?: TemplateRef<unknown>;\n readonly shortcutKeys: readonly string[];\n}\n\n/** A rendered group in the filtered view. */\ninterface ResolvedGroup {\n readonly id: string;\n readonly label?: string;\n readonly items: readonly ResolvedItem[];\n}\n\n// ── Variant config ──\n\nconst commandPaletteVariants = tv(\n {\n slots: {\n panel:\n 'pointer-events-auto w-full max-w-xl mt-[15vh] bg-surface-overlay text-fg rounded-lg border border-border shadow-md overflow-hidden flex flex-col max-h-[70vh] outline-none',\n searchWrapper: 'flex items-center gap-3 border-b border-border px-4',\n searchInput:\n 'flex-1 bg-transparent border-0 outline-none text-fg placeholder:text-fg-subtle',\n searchIcon: 'size-5 shrink-0 text-fg-muted',\n list: 'flex-1 overflow-y-auto py-1',\n groupHeader:\n 'px-4 text-xs font-semibold uppercase tracking-wide text-fg-subtle',\n item:\n 'relative flex items-center gap-3 px-4 select-none transition-colors duration-normal motion-reduce:transition-none text-fg outline-none',\n itemBody: 'flex-1 min-w-0 flex flex-col',\n itemLabel: 'min-w-0 truncate',\n itemDescription: 'block text-xs text-fg-muted mt-0.5 min-w-0 truncate',\n itemShortcut: 'ml-auto flex items-center gap-1 pl-3 shrink-0',\n itemKbd:\n 'inline-flex items-center justify-center min-w-5 h-5 px-1 rounded-md border border-border bg-surface-muted text-fg-muted text-2xs font-mono',\n empty: 'px-4 py-10 text-center text-sm text-fg-muted',\n footer: 'border-t border-border px-4 py-2 bg-surface-muted',\n },\n variants: {\n size: {\n xs: {\n item: 'py-1 text-xs',\n searchInput: 'py-2 text-xs',\n groupHeader: 'pt-2 pb-0.5',\n },\n sm: {\n item: 'py-1.5 text-xs',\n searchInput: 'py-2.5 text-xs',\n groupHeader: 'pt-2 pb-0.5',\n },\n md: {\n item: 'py-2 text-sm',\n searchInput: 'py-3 text-sm',\n groupHeader: 'pt-3 pb-1',\n },\n lg: {\n item: 'py-2.5 text-sm',\n searchInput: 'py-3.5 text-base',\n groupHeader: 'pt-3 pb-1',\n },\n xl: {\n item: 'py-3 text-base',\n searchInput: 'py-4 text-base',\n groupHeader: 'pt-4 pb-1',\n },\n },\n // Active option uses `bg-surface-sunken` (one step recessed from `bg-surface-muted`)\n // so the activedescendant-listbox carve-out remains unambiguously distinguishable\n // from the hovered non-active state — DOM focus stays on the combobox input, so\n // this background shift is the only visual signal for the keyboard-active option.\n active: {\n true: { item: 'bg-surface-sunken' },\n false: { item: '' },\n },\n disabled: {\n true: { item: 'opacity-50 pointer-events-none cursor-default' },\n false: { item: 'cursor-pointer hover:bg-surface-muted' },\n },\n },\n compoundVariants: [\n {\n // When an item is BOTH active and enabled, drop the non-active hover token so\n // hovering the keyboard-active option doesn't visually demote it to the\n // hovered-non-active state. Without this, twMerge keeps both background classes\n // and the active sunken fill flips to muted on hover.\n active: true,\n disabled: false,\n class: { item: 'hover:bg-surface-sunken' },\n },\n ],\n defaultVariants: { size: 'md', active: false, disabled: false },\n },\n { twMerge: true },\n);\n\n// ── Helpers ──\n\nfunction normalizeShortcut(\n value: string | readonly string[] | undefined,\n): readonly string[] {\n if (value == null) return [];\n return Array.isArray(value) ? value : [value as string];\n}\n\nfunction defaultFilter(\n items: readonly CommandPaletteItem[],\n query: string,\n): readonly CommandPaletteItem[] {\n const trimmed = query.trim().toLowerCase();\n if (!trimmed) return items;\n return items.filter((item) => {\n if (item.label.toLowerCase().includes(trimmed)) return true;\n if (item.group && item.group.toLowerCase().includes(trimmed)) return true;\n if (item.keywords) {\n for (const keyword of item.keywords) {\n if (keyword.toLowerCase().includes(trimmed)) return true;\n }\n }\n return false;\n });\n}\n\nfunction findFirstEnabled(items: readonly ResolvedItem[]): number {\n for (let i = 0; i < items.length; i++) {\n if (!items[i].data.disabled) return i;\n }\n return 0;\n}\n\nfunction findLastEnabled(items: readonly ResolvedItem[]): number {\n for (let i = items.length - 1; i >= 0; i--) {\n if (!items[i].data.disabled) return i;\n }\n return items.length - 1;\n}\n\n// ── Group directive ──\n\n/** Optional explicit grouping wrapper. Items placed inside inherit its label. */\n@Directive({\n selector: '[twCommandPaletteGroup]',\n})\nexport class CommandPaletteGroupDirective {\n /** Group heading text shown above the items. Required. */\n readonly label = input.required<string>();\n}\n\n// ── Item directive (component with projection) ──\n\n/** A declarative palette item. Consumers project its rendered content as children. */\n@Component({\n selector: 'tw-command-palette-item',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n style: 'display: none',\n },\n template: `<ng-template #content><ng-content /></ng-template>`,\n})\nexport class CommandPaletteItemDirective {\n /** Stable identifier for the item. Used as DOM id and in selection payloads. Required. */\n readonly id = input.required<string>();\n\n /** Plain-text label used for filtering and default rendering. Defaults to `''`. */\n readonly label = input<string>('');\n\n /** Additional search keywords that match the query but are not rendered. Defaults to `[]`. */\n readonly keywords = input<readonly string[]>([]);\n\n /** Explicit group name. Overrides any enclosing `twCommandPaletteGroup`. Defaults to `undefined`. */\n readonly group = input<string | undefined>(undefined);\n\n /** Whether the item is disabled. Disabled items render but cannot be activated. Defaults to `false`. */\n readonly disabled = input<boolean>(false);\n\n /** Keyboard shortcut hint. A string renders as one kbd; an array renders each key separately. Defaults to `undefined`. */\n readonly shortcut = input<string | readonly string[] | undefined>(undefined);\n\n /** Secondary description text rendered under the label. Defaults to `''`. */\n readonly description = input<string>('');\n\n /** Callback run before `activated` emits. Defaults to `undefined`. */\n readonly run = input<(() => void) | undefined>(undefined);\n\n /** Fires when this specific item is activated (Enter or click). */\n readonly activated = output<void>();\n\n /** Projected template used by the palette overlay to render this item's content. */\n readonly contentTemplate = viewChild<TemplateRef<unknown>>('content');\n\n private readonly parentGroup = inject(CommandPaletteGroupDirective, {\n optional: true,\n skipSelf: true,\n });\n\n /** Resolved CommandPaletteItem data derived from inputs + parent group. */\n readonly data: Signal<CommandPaletteItem> = computed(() => ({\n id: this.id(),\n label: this.label(),\n keywords: this.keywords(),\n group: this.group() ?? this.parentGroup?.label() ?? undefined,\n disabled: this.disabled(),\n shortcut: this.shortcut(),\n description: this.description() || undefined,\n run: this.run(),\n }));\n}\n\n// ── Item decoration directives ──\n\n/** Styles a leading icon inside a palette item. */\n@Directive({\n selector: '[twCommandPaletteItemIcon]',\n host: {\n class: 'size-4 shrink-0 text-fg-muted',\n },\n})\nexport class CommandPaletteItemIconDirective {}\n\n/** Styles secondary description text inside a palette item. */\n@Directive({\n selector: '[twCommandPaletteItemDescription]',\n host: {\n class: 'block text-xs text-fg-muted mt-0.5 min-w-0 truncate',\n },\n})\nexport class CommandPaletteItemDescriptionDirective {}\n\n// ── Template directives ──\n\n/** Structural directive — consumer template rendered when no items match the query. */\n@Directive({\n selector: '[twCommandPaletteEmpty]',\n})\nexport class CommandPaletteEmptyDirective {\n readonly template = inject(TemplateRef<{ $implicit: string }>);\n}\n\n/** Structural directive — consumer template rendered as a sticky footer inside the palette. */\n@Directive({\n selector: '[twCommandPaletteFooter]',\n})\nexport class CommandPaletteFooterDirective {\n readonly template = inject(TemplateRef<void>);\n}\n\n// ── Overlay component (private, not exported) ──\n\n@Component({\n selector: 'tw-command-palette-overlay',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet],\n host: {\n class:\n 'fixed inset-0 flex items-start justify-center p-4 pointer-events-none origin-top',\n '[attr.data-command-palette-overlay]': '\"\"',\n '[animate.enter]': '\"scale-in\"',\n '[animate.leave]': '\"scale-out\"',\n },\n templateUrl: './command-palette-overlay.html',\n})\nclass CommandPaletteOverlayComponent {\n /** Host palette instance — provided via the content injector on attach. */\n readonly palette = inject(CommandPaletteComponent);\n\n readonly listId = `tw-command-palette-list-${nextPaletteId++}`;\n\n readonly searchInputRef = viewChild<ElementRef<HTMLInputElement>>('searchInput');\n\n private readonly variantResult = computed(() =>\n commandPaletteVariants({ size: this.palette.size() }),\n );\n\n protected readonly panelClasses = computed(() => {\n const base = this.variantResult().panel();\n const custom = this.palette.panelClassResolved();\n return custom ? `${base} ${custom}` : base;\n });\n protected readonly searchWrapperClasses = computed(() =>\n this.variantResult().searchWrapper(),\n );\n protected readonly searchInputClasses = computed(() =>\n this.variantResult().searchInput(),\n );\n protected readonly searchIconClasses = computed(() =>\n this.variantResult().searchIcon(),\n );\n protected readonly listClasses = computed(() => this.variantResult().list());\n protected readonly groupHeaderClasses = computed(() =>\n this.variantResult().groupHeader(),\n );\n protected readonly itemBodyClasses = computed(() =>\n this.variantResult().itemBody(),\n );\n protected readonly itemLabelClasses = computed(() =>\n this.variantResult().itemLabel(),\n );\n protected readonly itemDescriptionClasses = computed(() =>\n this.variantResult().itemDescription(),\n );\n protected readonly itemShortcutClasses = computed(() =>\n this.variantResult().itemShortcut(),\n );\n protected readonly itemKbdClasses = computed(() =>\n this.variantResult().itemKbd(),\n );\n protected readonly emptyClasses = computed(() => this.variantResult().empty());\n protected readonly footerClasses = computed(() => this.variantResult().footer());\n\n protected itemClasses(active: boolean, disabled: boolean): string {\n return commandPaletteVariants({\n size: this.palette.size(),\n active,\n disabled,\n }).item();\n }\n\n protected onSearchInput(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n this.palette.query.set(value);\n }\n\n protected onItemClick(item: ResolvedItem): void {\n this.palette.selectItem(item);\n }\n\n protected onItemHover(item: ResolvedItem): void {\n this.palette.setActiveItem(item);\n }\n\n /** Focuses the search input (called by the palette after attach). */\n focusSearch(): void {\n this.searchInputRef()?.nativeElement.focus();\n }\n}\n\n// ── Public palette component ──\n\n@Component({\n selector: 'tw-command-palette',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n style: 'display: none',\n },\n template: `<ng-content />`,\n})\nexport class CommandPaletteComponent {\n /** Controls item density and padding across the palette. Defaults to `'md'`. */\n readonly size = input<TwSize>('md');\n\n /** Placeholder text shown inside the search input. Defaults to `'Type a command or search…'`. */\n readonly placeholder = input<string>('Type a command or search…');\n\n /** Two-way bindable search query. Reads or resets the current filter. Defaults to `''`. */\n readonly query = model<string>('');\n\n /** Two-way bindable open state. Setting to `true` opens the palette; closing updates it to `false`. Defaults to `false`. */\n readonly open = model<boolean>(false);\n\n /** Data-driven command list. Merged with projected items and filtered by `query`. Defaults to `[]`. */\n readonly commands = input<readonly CommandPaletteItem[]>([]);\n\n /** Custom filter function. Receives the merged item list and current query, returns the filtered result. Defaults to `undefined` (case-insensitive substring match). */\n readonly filterFn = input<CommandPaletteFilterFn | undefined>(undefined);\n\n /** Whether the palette closes automatically after an item is activated. Defaults to `true` — a command palette is a fire-and-dismiss surface; the special case is a \"run many\" launcher that opts out. */\n readonly closeOnSelect = input<boolean>(true);\n\n /** Whether Escape closes the palette. Defaults to `true` — Escape is the universal dismiss key for modal surfaces; the special case is a non-dismissible palette. */\n readonly closeOnEscape = input<boolean>(true);\n\n /** Whether clicking the backdrop closes the palette. Defaults to `true` — clicking outside a modal is the expected dismiss gesture; the special case is enforcing an explicit choice. */\n readonly closeOnBackdropClick = input<boolean>(true);\n\n /** Whether the search input is auto-focused when the palette opens. Defaults to `true` — without auto-focus the user must click into the input before typing, defeating the keyboard-first design. */\n readonly autoFocus = input<boolean>(true);\n\n /** Accessible label used for the dialog role. Defaults to `'Command palette'`. */\n readonly ariaLabel = input<string>('Command palette');\n\n /** Accessible label applied to the search input (`role=\"combobox\"`). Defaults to `'Search commands'`. */\n readonly searchAriaLabel = input<string>('Search commands');\n\n /** Additional classes appended to the overlay panel for consumer customization. Defaults to `''`. */\n readonly panelClass = input<string | string[]>('');\n\n /** Fires when a command is activated (via click or Enter). Payload is the resolved `CommandPaletteItem`. */\n readonly itemSelected = output<CommandPaletteItem>();\n\n /** Fires after the palette becomes fully visible. */\n readonly opened = output<void>();\n\n /** Fires after the palette is fully removed from the DOM. */\n readonly closed = output<void>();\n\n private readonly overlay = inject(Overlay);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly injector = inject(Injector);\n private readonly destroyRef = inject(DestroyRef);\n private readonly focusTrapFactory = inject(FocusTrapFactory);\n private readonly announcer = inject(LiveAnnouncer);\n\n private readonly declarativeItems = contentChildren(CommandPaletteItemDirective, {\n descendants: true,\n });\n private readonly emptyDirective = contentChild(CommandPaletteEmptyDirective);\n private readonly footerDirective = contentChild(CommandPaletteFooterDirective);\n\n private overlayRef: OverlayRef | null = null;\n private overlayInstance: CommandPaletteOverlayComponent | null = null;\n private focusTrap: ReturnType<FocusTrapFactory['create']> | null = null;\n private perOpenSubs: Subscription | null = null;\n private previousFocus: HTMLElement | null = null;\n private closing = false;\n private closeTimer: ReturnType<typeof setTimeout> | null = null;\n private announceTimer: ReturnType<typeof setTimeout> | null = null;\n\n private readonly isAttached = signal(false);\n\n /** Merged (declarative + data-array) items keyed by id — declarative wins on collision. */\n private readonly allItems = computed<readonly ResolvedItem[]>(() => {\n const declarative = this.declarativeItems();\n const declarativeResolved: ResolvedItem[] = declarative.map((dir) => ({\n data: dir.data(),\n directive: dir,\n template: dir.contentTemplate(),\n shortcutKeys: normalizeShortcut(dir.shortcut()),\n }));\n const seenIds = new Set<string>(declarativeResolved.map((it) => it.data.id));\n\n const arrayItems = this.commands();\n const arrayResolved: ResolvedItem[] = [];\n for (const data of arrayItems) {\n if (seenIds.has(data.id)) continue;\n seenIds.add(data.id);\n arrayResolved.push({\n data,\n shortcutKeys: normalizeShortcut(data.shortcut),\n });\n }\n return [...declarativeResolved, ...arrayResolved];\n });\n\n /** Items after applying the filter function. */\n readonly filteredItems = computed<readonly ResolvedItem[]>(() => {\n const all = this.allItems();\n const q = this.query();\n const dataList = all.map((r) => r.data);\n const fn = this.filterFn();\n const filtered = fn ? fn(dataList, q) : defaultFilter(dataList, q);\n const byId = new Map<string, ResolvedItem>();\n for (const r of all) byId.set(r.data.id, r);\n const result: ResolvedItem[] = [];\n for (const data of filtered) {\n const resolved = byId.get(data.id);\n if (resolved) result.push(resolved);\n }\n return result;\n });\n\n /** Filtered items grouped by their `group` field. */\n readonly grouped = computed<readonly ResolvedGroup[]>(() => {\n const items = this.filteredItems();\n const groups: { id: string; label?: string; items: ResolvedItem[] }[] = [];\n const byKey = new Map<string, { id: string; label?: string; items: ResolvedItem[] }>();\n for (const item of items) {\n const label = item.data.group;\n const key = label ?? '__ungrouped__';\n let g = byKey.get(key);\n if (!g) {\n g = { id: `group-${key}`, label, items: [] };\n byKey.set(key, g);\n groups.push(g);\n }\n g.items.push(item);\n }\n return groups;\n });\n\n /**\n * Active item index, auto-resets to the first enabled item when the filtered\n * *id set* changes. Keyed off the id sequence (not the array reference) so a\n * re-emission of `filteredItems` with identical ids preserves the user's\n * keyboard selection; only when ids actually shift do we recompute. When the\n * previously-active id is still present in the new sequence its index is\n * carried over; otherwise we fall back to the first enabled item.\n */\n readonly activeIndex = linkedSignal<readonly string[], number>({\n source: () => this.filteredItems().map((i) => i.data.id),\n computation: (ids, previous) => {\n const items = this.filteredItems();\n if (!previous) return findFirstEnabled(items);\n const prevId = previous.source[previous.value];\n if (prevId) {\n const carriedIndex = ids.indexOf(prevId);\n if (carriedIndex >= 0) return carriedIndex;\n }\n return findFirstEnabled(items);\n },\n });\n\n /** Id of the currently active item (for `aria-activedescendant`). */\n readonly activeItemId = computed<string | null>(() => {\n const idx = this.activeIndex();\n const items = this.filteredItems();\n return items[idx]?.data.id ?? null;\n });\n\n /** Template-ref of the projected empty state (if any). */\n readonly emptyTemplate = computed<TemplateRef<{ $implicit: string }> | null>(\n () => this.emptyDirective()?.template ?? null,\n );\n\n /** Template-ref of the projected footer (if any). */\n readonly footerTemplate = computed<TemplateRef<void> | null>(\n () => this.footerDirective()?.template ?? null,\n );\n\n /** Resolved panel-class string (array merged into a single string). */\n readonly panelClassResolved = computed<string>(() => {\n const raw = this.panelClass();\n return Array.isArray(raw) ? raw.join(' ') : raw;\n });\n\n constructor() {\n // React to model changes from the consumer\n effect(() => {\n const shouldOpen = this.open();\n if (shouldOpen && this.closing && this.overlayInstance) {\n // Reopened before the leave animation finished — cancel the pending\n // close rather than letting its deferred callback write `false` back\n // over the consumer's `true`. Same shape as `popover.ts`.\n this.cancelPendingClose();\n return;\n }\n if (shouldOpen && !this.overlayInstance && !this.closing) {\n this.openPalette();\n } else if (!shouldOpen && this.overlayInstance && !this.closing) {\n this.closePalette();\n }\n });\n\n // Debounced live-region announcements while the palette is open\n effect(() => {\n const q = this.query();\n const count = this.filteredItems().length;\n untracked(() => {\n if (!this.isAttached()) return;\n this.clearAnnounceTimer();\n this.announceTimer = setTimeout(() => {\n const message =\n count === 0\n ? `No commands match ${q}`\n : `${count} ${count === 1 ? 'result' : 'results'} for ${q}`;\n this.announcer.announce(message, 'polite');\n }, ANNOUNCE_DEBOUNCE);\n });\n });\n\n this.destroyRef.onDestroy(() => {\n this.clearCloseTimer();\n this.clearAnnounceTimer();\n this.destroyFocusTrap();\n this.perOpenSubs?.unsubscribe();\n this.disposeOverlay();\n });\n }\n\n // ── Public API ──\n\n /** Open the palette programmatically. */\n show(): void {\n if (this.overlayInstance || this.closing) return;\n this.open.set(true);\n }\n\n /** Close the palette programmatically. */\n hide(): void {\n if (!this.overlayInstance || this.closing) return;\n this.closePalette();\n }\n\n /** Toggle the current open state. */\n toggle(): void {\n if (this.overlayInstance || this.closing) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n /** Force the palette to reapply focus to the search input. */\n focusSearch(): void {\n this.overlayInstance?.focusSearch();\n }\n\n // ── Internal wiring (used by overlay) ──\n\n /** Activate an item: run callbacks, emit events, optionally close. */\n selectItem(item: ResolvedItem): void {\n if (item.data.disabled) return;\n item.data.run?.();\n item.directive?.activated.emit();\n this.itemSelected.emit(item.data);\n if (this.closeOnSelect()) this.hide();\n }\n\n /** Move the active descendant to the given item (used on hover). */\n setActiveItem(item: ResolvedItem): void {\n if (item.data.disabled) return;\n const idx = this.filteredItems().indexOf(item);\n if (idx >= 0) this.activeIndex.set(idx);\n }\n\n // ── Private ──\n\n private openPalette(): void {\n this.previousFocus =\n (document.activeElement as HTMLElement | null) ?? null;\n this.ensureOverlay();\n this.attachContent();\n this.subscribePerOpen();\n this.isAttached.set(true);\n this.setupFocusTrap();\n if (this.autoFocus()) {\n queueMicrotask(() => this.overlayInstance?.focusSearch());\n }\n this.announcer.announce(\n `Command palette opened. ${this.filteredItems().length} commands available.`,\n 'polite',\n );\n this.opened.emit();\n }\n\n private closePalette(): void {\n if (this.closing) return;\n this.closing = true;\n\n this.destroyFocusTrap();\n\n this.previousFocus?.focus();\n this.previousFocus = null;\n\n this.closeTimer = setTimeout(() => {\n this.closeTimer = null;\n\n // Guard against teardown during the animation window. `destroyRef.onDestroy`\n // calls `clearCloseTimer()` so this branch only fires when the timer survived;\n // even so, `isAttached` is the authoritative signal — if the overlay already\n // detached (programmatic disposeOverlay, double-close race), skip writes that\n // would touch a destroyed instance or re-emit `open=false`.\n if (!this.isAttached()) {\n this.closing = false;\n return;\n }\n\n if (this.overlayRef?.hasAttached()) {\n this.overlayRef.detach();\n }\n\n this.perOpenSubs?.unsubscribe();\n this.perOpenSubs = null;\n this.overlayInstance = null;\n this.isAttached.set(false);\n\n untracked(() => this.open.set(false));\n\n this.closed.emit();\n this.closing = false;\n }, ANIMATION_DURATION);\n }\n\n private ensureOverlay(): void {\n if (this.overlayRef) return;\n const positionStrategy = this.overlay.position().global();\n const scrollStrategy = this.overlay.scrollStrategies.block();\n this.overlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy,\n hasBackdrop: true,\n backdropClass: 'tw-dialog-backdrop',\n panelClass: 'tw-command-palette-panel',\n });\n }\n\n private attachContent(): void {\n if (!this.overlayRef) return;\n const paletteRef: CommandPaletteRef = {\n close: () => this.hide(),\n setQuery: (q) => this.query.set(q),\n };\n const contentInjector = Injector.create({\n parent: this.injector,\n providers: [\n { provide: CommandPaletteComponent, useValue: this },\n { provide: COMMAND_PALETTE_REF, useValue: paletteRef },\n ],\n });\n const portal = new ComponentPortal(\n CommandPaletteOverlayComponent,\n this.viewContainerRef,\n contentInjector,\n );\n const ref = this.overlayRef.attach(portal);\n this.overlayInstance = ref.instance;\n }\n\n private subscribePerOpen(): void {\n this.perOpenSubs?.unsubscribe();\n this.perOpenSubs = new Subscription();\n\n this.perOpenSubs.add(\n this.overlayRef!.backdropClick().subscribe(() => {\n if (this.closeOnBackdropClick()) this.hide();\n }),\n );\n\n this.perOpenSubs.add(\n this.overlayRef!.keydownEvents().subscribe((event) =>\n this.handleOverlayKeydown(event),\n ),\n );\n }\n\n private handleOverlayKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'Escape':\n if (this.closeOnEscape()) {\n event.preventDefault();\n this.hide();\n }\n break;\n case 'ArrowDown':\n event.preventDefault();\n this.moveActive(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.moveActive(-1);\n break;\n case 'Home':\n event.preventDefault();\n this.activeIndex.set(findFirstEnabled(this.filteredItems()));\n break;\n case 'End':\n event.preventDefault();\n this.activeIndex.set(findLastEnabled(this.filteredItems()));\n break;\n case 'Enter':\n event.preventDefault();\n this.activateActive();\n break;\n // Tab is intentionally NOT handled here — the FocusTrap installed in\n // `setupFocusTrap()` cycles focus through the modal's focusable elements,\n // so the user cannot accidentally tab out of the palette. Closing on Tab\n // (the previous behaviour) ran counter to the universal \"Tab moves focus\n // within a modal\" convention and surprised keyboard users.\n }\n }\n\n private moveActive(delta: 1 | -1): void {\n const items = this.filteredItems();\n if (items.length === 0) return;\n const n = items.length;\n let idx = this.activeIndex();\n for (let i = 0; i < n; i++) {\n idx = (idx + delta + n) % n;\n if (!items[idx].data.disabled) {\n this.activeIndex.set(idx);\n return;\n }\n }\n }\n\n private activateActive(): void {\n const items = this.filteredItems();\n const item = items[this.activeIndex()];\n if (item && !item.data.disabled) this.selectItem(item);\n }\n\n private setupFocusTrap(): void {\n if (!this.overlayRef) return;\n this.focusTrap = this.focusTrapFactory.create(this.overlayRef.overlayElement);\n }\n\n private destroyFocusTrap(): void {\n this.focusTrap?.destroy();\n this.focusTrap = null;\n }\n\n private disposeOverlay(): void {\n this.overlayRef?.dispose();\n this.overlayRef = null;\n this.overlayInstance = null;\n }\n\n /**\n * Aborts an in-flight close, leaving the palette open.\n *\n * The overlay is still attached (only the detach is deferred), so this\n * restores the focus trap that `closePalette` tore down up front.\n */\n private cancelPendingClose(): void {\n this.clearCloseTimer();\n this.closing = false;\n this.setupFocusTrap();\n }\n\n private clearCloseTimer(): void {\n if (this.closeTimer !== null) {\n clearTimeout(this.closeTimer);\n this.closeTimer = null;\n }\n }\n\n private clearAnnounceTimer(): void {\n if (this.announceTimer !== null) {\n clearTimeout(this.announceTimer);\n this.announceTimer = null;\n }\n }\n}\n","<div [class]=\"panelClasses()\" role=\"dialog\" [attr.aria-modal]=\"'true'\" [attr.aria-label]=\"palette.ariaLabel()\">\n <div [class]=\"searchWrapperClasses()\">\n <svg [class]=\"searchIconClasses()\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M9 3.5a5.5 5.5 0 100 11 5.5 5.5 0 000-11zM2 9a7 7 0 1112.452 4.391l3.328 3.329a.75.75 0 11-1.06 1.06l-3.329-3.328A7 7 0 012 9z\" clip-rule=\"evenodd\" />\n </svg>\n <input\n #searchInput\n type=\"text\"\n role=\"combobox\"\n [class]=\"searchInputClasses()\"\n [placeholder]=\"palette.placeholder()\"\n [value]=\"palette.query()\"\n (input)=\"onSearchInput($event)\"\n [attr.aria-label]=\"palette.searchAriaLabel()\"\n [attr.aria-expanded]=\"'true'\"\n [attr.aria-controls]=\"listId\"\n [attr.aria-activedescendant]=\"palette.activeItemId()\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n />\n </div>\n <div [class]=\"listClasses()\" role=\"listbox\" [id]=\"listId\">\n @if (palette.grouped().length === 0) {\n @if (palette.emptyTemplate(); as emptyTpl) {\n <div [class]=\"emptyClasses()\">\n <ng-container [ngTemplateOutlet]=\"emptyTpl\" [ngTemplateOutletContext]=\"{ $implicit: palette.query() }\" />\n </div>\n } @else {\n <div [class]=\"emptyClasses()\">No results found</div>\n }\n } @else {\n @for (group of palette.grouped(); track group.id) {\n <div role=\"group\" [attr.aria-label]=\"group.label ?? null\">\n @if (group.label) {\n <div [class]=\"groupHeaderClasses()\" role=\"presentation\">{{ group.label }}</div>\n }\n @for (item of group.items; track item.data.id) {\n <!-- ARIA activedescendant listbox: navigation lives on the search\n input above; option elements never receive DOM focus and have\n no keyboard handlers of their own. -->\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\n <div\n [id]=\"item.data.id\"\n role=\"option\"\n [class]=\"itemClasses(item.data.id === palette.activeItemId(), item.data.disabled ?? false)\"\n [attr.aria-selected]=\"item.data.id === palette.activeItemId()\"\n [attr.aria-disabled]=\"(item.data.disabled ?? false) ? 'true' : null\"\n (click)=\"onItemClick(item)\"\n (mousemove)=\"onItemHover(item)\"\n >\n <span [class]=\"itemBodyClasses()\">\n @if (item.template; as tpl) {\n <span [class]=\"itemLabelClasses()\">\n <ng-container [ngTemplateOutlet]=\"tpl\" />\n </span>\n } @else {\n <span [class]=\"itemLabelClasses()\">{{ item.data.label }}</span>\n }\n @if (item.data.description) {\n <span [class]=\"itemDescriptionClasses()\">{{ item.data.description }}</span>\n }\n </span>\n @if (item.shortcutKeys.length > 0) {\n <span [class]=\"itemShortcutClasses()\" aria-hidden=\"true\">\n @for (key of item.shortcutKeys; track $index) {\n <kbd [class]=\"itemKbdClasses()\">{{ key }}</kbd>\n }\n </span>\n }\n </div>\n }\n </div>\n }\n }\n </div>\n @if (palette.footerTemplate(); as footerTpl) {\n <div [class]=\"footerClasses()\">\n <ng-container [ngTemplateOutlet]=\"footerTpl\" />\n </div>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -164,8 +164,10 @@ class PickerOverlayCoordinator {
|
|
|
164
164
|
currentPanelId = null;
|
|
165
165
|
currentClose$ = null;
|
|
166
166
|
openedSubject = null;
|
|
167
|
-
attachedSignal = signal(false,
|
|
168
|
-
|
|
167
|
+
attachedSignal = signal(false, /* @ts-ignore */
|
|
168
|
+
...(ngDevMode ? [{ debugName: "attachedSignal" }] : /* istanbul ignore next */ []));
|
|
169
|
+
openedSignal = signal(false, /* @ts-ignore */
|
|
170
|
+
...(ngDevMode ? [{ debugName: "openedSignal" }] : /* istanbul ignore next */ []));
|
|
169
171
|
/** Whether the overlay is currently attached (between `open()` and detach). */
|
|
170
172
|
attached = this.attachedSignal.asReadonly();
|
|
171
173
|
/** Whether the enter animation has completed (`opened$` has fired). */
|
|
@@ -370,10 +372,10 @@ class PickerOverlayCoordinator {
|
|
|
370
372
|
throw new Error(`PickerOverlayCoordinator.${method}() called before open() — no overlay attached.`);
|
|
371
373
|
}
|
|
372
374
|
}
|
|
373
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
374
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
375
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: PickerOverlayCoordinator, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
376
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: PickerOverlayCoordinator });
|
|
375
377
|
}
|
|
376
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
378
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: PickerOverlayCoordinator, decorators: [{
|
|
377
379
|
type: Injectable
|
|
378
380
|
}], ctorParameters: () => [] });
|
|
379
381
|
|
|
@@ -493,8 +495,10 @@ class AriaIdQueue {
|
|
|
493
495
|
*/
|
|
494
496
|
class OverlayContainerCoordinator {
|
|
495
497
|
destroyRef = inject(DestroyRef);
|
|
496
|
-
stateSignal = signal('opening',
|
|
497
|
-
|
|
498
|
+
stateSignal = signal('opening', /* @ts-ignore */
|
|
499
|
+
...(ngDevMode ? [{ debugName: "stateSignal" }] : /* istanbul ignore next */ []));
|
|
500
|
+
ariaDescribedByQueue = signal([], /* @ts-ignore */
|
|
501
|
+
...(ngDevMode ? [{ debugName: "ariaDescribedByQueue" }] : /* istanbul ignore next */ []));
|
|
498
502
|
queue = new AriaIdQueue();
|
|
499
503
|
animationTimer = null;
|
|
500
504
|
enterDuration = 0;
|
|
@@ -516,7 +520,8 @@ class OverlayContainerCoordinator {
|
|
|
516
520
|
if (current === 'closing')
|
|
517
521
|
return this.exitDuration;
|
|
518
522
|
return 0;
|
|
519
|
-
},
|
|
523
|
+
}, /* @ts-ignore */
|
|
524
|
+
...(ngDevMode ? [{ debugName: "transitionDuration" }] : /* istanbul ignore next */ []));
|
|
520
525
|
/**
|
|
521
526
|
* Emits whenever the animation state transitions. The container's `Ref`
|
|
522
527
|
* (`TwDialogRef` / `SheetRef`) subscribes to drive its own lifecycle
|
|
@@ -605,10 +610,10 @@ class OverlayContainerCoordinator {
|
|
|
605
610
|
this.animationTimer = null;
|
|
606
611
|
}
|
|
607
612
|
}
|
|
608
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
609
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
613
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: OverlayContainerCoordinator, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
614
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: OverlayContainerCoordinator });
|
|
610
615
|
}
|
|
611
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
616
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: OverlayContainerCoordinator, decorators: [{
|
|
612
617
|
type: Injectable
|
|
613
618
|
}], ctorParameters: () => [] });
|
|
614
619
|
|