forty-cdk 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/accordion/README.md +122 -0
- package/aspect-ratio/README.md +76 -0
- package/avatar/README.md +100 -0
- package/breadcrumbs/README.md +49 -0
- package/breakpoints/README.md +81 -0
- package/button/README.md +49 -0
- package/calendar/README.md +458 -0
- package/carousel/README.md +358 -0
- package/checkbox/README.md +146 -0
- package/combobox/README.md +535 -0
- package/context-menu/README.md +139 -0
- package/date-field/README.md +184 -0
- package/date-picker/README.md +338 -0
- package/dialog/README.md +388 -0
- package/disclosure/README.md +114 -0
- package/drag-drop/README.md +359 -0
- package/drawer/README.md +560 -0
- package/dropdown-menu/README.md +176 -0
- package/fesm2022/forty-cdk-accordion.mjs +348 -0
- package/fesm2022/forty-cdk-accordion.mjs.map +1 -0
- package/fesm2022/forty-cdk-aspect-ratio.mjs +74 -0
- package/fesm2022/forty-cdk-aspect-ratio.mjs.map +1 -0
- package/fesm2022/forty-cdk-avatar.mjs +308 -0
- package/fesm2022/forty-cdk-avatar.mjs.map +1 -0
- package/fesm2022/forty-cdk-breadcrumbs.mjs +125 -0
- package/fesm2022/forty-cdk-breadcrumbs.mjs.map +1 -0
- package/fesm2022/forty-cdk-breakpoints.mjs +117 -0
- package/fesm2022/forty-cdk-breakpoints.mjs.map +1 -0
- package/fesm2022/forty-cdk-button.mjs +134 -0
- package/fesm2022/forty-cdk-button.mjs.map +1 -0
- package/fesm2022/forty-cdk-calendar.mjs +2034 -0
- package/fesm2022/forty-cdk-calendar.mjs.map +1 -0
- package/fesm2022/forty-cdk-carousel.mjs +968 -0
- package/fesm2022/forty-cdk-carousel.mjs.map +1 -0
- package/fesm2022/forty-cdk-checkbox.mjs +226 -0
- package/fesm2022/forty-cdk-checkbox.mjs.map +1 -0
- package/fesm2022/forty-cdk-combobox.mjs +2596 -0
- package/fesm2022/forty-cdk-combobox.mjs.map +1 -0
- package/fesm2022/forty-cdk-context-menu.mjs +413 -0
- package/fesm2022/forty-cdk-context-menu.mjs.map +1 -0
- package/fesm2022/forty-cdk-core.mjs +9022 -0
- package/fesm2022/forty-cdk-core.mjs.map +1 -0
- package/fesm2022/forty-cdk-date-field.mjs +744 -0
- package/fesm2022/forty-cdk-date-field.mjs.map +1 -0
- package/fesm2022/forty-cdk-date-picker.mjs +1011 -0
- package/fesm2022/forty-cdk-date-picker.mjs.map +1 -0
- package/fesm2022/forty-cdk-dialog.mjs +707 -0
- package/fesm2022/forty-cdk-dialog.mjs.map +1 -0
- package/fesm2022/forty-cdk-disclosure.mjs +190 -0
- package/fesm2022/forty-cdk-disclosure.mjs.map +1 -0
- package/fesm2022/forty-cdk-drag-drop.mjs +1180 -0
- package/fesm2022/forty-cdk-drag-drop.mjs.map +1 -0
- package/fesm2022/forty-cdk-drawer.mjs +1641 -0
- package/fesm2022/forty-cdk-drawer.mjs.map +1 -0
- package/fesm2022/forty-cdk-dropdown-menu.mjs +350 -0
- package/fesm2022/forty-cdk-dropdown-menu.mjs.map +1 -0
- package/fesm2022/forty-cdk-field.mjs +425 -0
- package/fesm2022/forty-cdk-field.mjs.map +1 -0
- package/fesm2022/forty-cdk-fieldset.mjs +164 -0
- package/fesm2022/forty-cdk-fieldset.mjs.map +1 -0
- package/fesm2022/forty-cdk-file-upload.mjs +221 -0
- package/fesm2022/forty-cdk-file-upload.mjs.map +1 -0
- package/fesm2022/forty-cdk-hover-card.mjs +496 -0
- package/fesm2022/forty-cdk-hover-card.mjs.map +1 -0
- package/fesm2022/forty-cdk-input.mjs +274 -0
- package/fesm2022/forty-cdk-input.mjs.map +1 -0
- package/fesm2022/forty-cdk-internationalized-date.mjs +1 -1
- package/fesm2022/forty-cdk-internationalized-date.mjs.map +1 -1
- package/fesm2022/forty-cdk-listbox.mjs +1279 -0
- package/fesm2022/forty-cdk-listbox.mjs.map +1 -0
- package/fesm2022/forty-cdk-menu.mjs +1439 -0
- package/fesm2022/forty-cdk-menu.mjs.map +1 -0
- package/fesm2022/forty-cdk-menubar.mjs +787 -0
- package/fesm2022/forty-cdk-menubar.mjs.map +1 -0
- package/fesm2022/forty-cdk-meter.mjs +211 -0
- package/fesm2022/forty-cdk-meter.mjs.map +1 -0
- package/fesm2022/forty-cdk-navigation-menu.mjs +1145 -0
- package/fesm2022/forty-cdk-navigation-menu.mjs.map +1 -0
- package/fesm2022/forty-cdk-number-input.mjs +559 -0
- package/fesm2022/forty-cdk-number-input.mjs.map +1 -0
- package/fesm2022/forty-cdk-otp-input.mjs +527 -0
- package/fesm2022/forty-cdk-otp-input.mjs.map +1 -0
- package/fesm2022/forty-cdk-pagination.mjs +323 -0
- package/fesm2022/forty-cdk-pagination.mjs.map +1 -0
- package/fesm2022/forty-cdk-pane-resizer.mjs +297 -0
- package/fesm2022/forty-cdk-pane-resizer.mjs.map +1 -0
- package/fesm2022/forty-cdk-popover.mjs +698 -0
- package/fesm2022/forty-cdk-popover.mjs.map +1 -0
- package/fesm2022/forty-cdk-progress.mjs +226 -0
- package/fesm2022/forty-cdk-progress.mjs.map +1 -0
- package/fesm2022/forty-cdk-radio-group.mjs +378 -0
- package/fesm2022/forty-cdk-radio-group.mjs.map +1 -0
- package/fesm2022/forty-cdk-scroll-area.mjs +640 -0
- package/fesm2022/forty-cdk-scroll-area.mjs.map +1 -0
- package/fesm2022/forty-cdk-search.mjs +205 -0
- package/fesm2022/forty-cdk-search.mjs.map +1 -0
- package/fesm2022/forty-cdk-select.mjs +1661 -0
- package/fesm2022/forty-cdk-select.mjs.map +1 -0
- package/fesm2022/forty-cdk-separator.mjs +82 -0
- package/fesm2022/forty-cdk-separator.mjs.map +1 -0
- package/fesm2022/forty-cdk-signal-forms.mjs +97 -0
- package/fesm2022/forty-cdk-signal-forms.mjs.map +1 -0
- package/fesm2022/forty-cdk-slider.mjs +803 -0
- package/fesm2022/forty-cdk-slider.mjs.map +1 -0
- package/fesm2022/forty-cdk-stepper.mjs +886 -0
- package/fesm2022/forty-cdk-stepper.mjs.map +1 -0
- package/fesm2022/forty-cdk-switch.mjs +137 -0
- package/fesm2022/forty-cdk-switch.mjs.map +1 -0
- package/fesm2022/forty-cdk-table.mjs +1518 -0
- package/fesm2022/forty-cdk-table.mjs.map +1 -0
- package/fesm2022/forty-cdk-tabs.mjs +400 -0
- package/fesm2022/forty-cdk-tabs.mjs.map +1 -0
- package/fesm2022/forty-cdk-time-field.mjs +593 -0
- package/fesm2022/forty-cdk-time-field.mjs.map +1 -0
- package/fesm2022/forty-cdk-time-picker.mjs +1013 -0
- package/fesm2022/forty-cdk-time-picker.mjs.map +1 -0
- package/fesm2022/forty-cdk-toast.mjs +1153 -0
- package/fesm2022/forty-cdk-toast.mjs.map +1 -0
- package/fesm2022/forty-cdk-toggle.mjs +516 -0
- package/fesm2022/forty-cdk-toggle.mjs.map +1 -0
- package/fesm2022/forty-cdk-toolbar.mjs +374 -0
- package/fesm2022/forty-cdk-toolbar.mjs.map +1 -0
- package/fesm2022/forty-cdk-tooltip.mjs +672 -0
- package/fesm2022/forty-cdk-tooltip.mjs.map +1 -0
- package/fesm2022/forty-cdk-tree.mjs +2007 -0
- package/fesm2022/forty-cdk-tree.mjs.map +1 -0
- package/fesm2022/forty-cdk-virtualization.mjs +1 -1
- package/fesm2022/forty-cdk-virtualization.mjs.map +1 -1
- package/fesm2022/forty-cdk.mjs +0 -43310
- package/fesm2022/forty-cdk.mjs.map +1 -1
- package/field/README.md +97 -0
- package/fieldset/README.md +86 -0
- package/file-upload/README.md +73 -0
- package/hover-card/README.md +171 -0
- package/input/README.md +156 -0
- package/listbox/README.md +424 -0
- package/menu/README.md +181 -0
- package/menubar/README.md +140 -0
- package/meter/README.md +128 -0
- package/navigation-menu/README.md +253 -0
- package/number-input/README.md +171 -0
- package/otp-input/README.md +198 -0
- package/package.json +213 -1
- package/pagination/README.md +61 -0
- package/pane-resizer/README.md +136 -0
- package/popover/README.md +262 -0
- package/progress/README.md +115 -0
- package/radio-group/README.md +129 -0
- package/scroll-area/README.md +184 -0
- package/search/README.md +42 -0
- package/select/README.md +488 -0
- package/separator/README.md +84 -0
- package/signal-forms/README.md +72 -0
- package/slider/README.md +152 -0
- package/stepper/README.md +292 -0
- package/switch/README.md +116 -0
- package/table/README.md +769 -0
- package/tabs/README.md +130 -0
- package/time-field/README.md +157 -0
- package/time-picker/README.md +172 -0
- package/toast/README.md +398 -0
- package/toggle/README.md +224 -0
- package/toolbar/README.md +109 -0
- package/tooltip/README.md +274 -0
- package/tree/README.md +708 -0
- package/types/forty-cdk-accordion.d.ts +242 -0
- package/types/forty-cdk-aspect-ratio.d.ts +59 -0
- package/types/forty-cdk-avatar.d.ts +133 -0
- package/types/forty-cdk-breadcrumbs.d.ts +92 -0
- package/types/forty-cdk-breakpoints.d.ts +141 -0
- package/types/forty-cdk-button.d.ts +80 -0
- package/types/forty-cdk-calendar.d.ts +914 -0
- package/types/forty-cdk-carousel.d.ts +530 -0
- package/types/forty-cdk-checkbox.d.ts +141 -0
- package/types/forty-cdk-combobox.d.ts +1259 -0
- package/types/forty-cdk-context-menu.d.ts +313 -0
- package/types/forty-cdk-core.d.ts +5774 -0
- package/types/forty-cdk-date-field.d.ts +307 -0
- package/types/forty-cdk-date-picker.d.ts +622 -0
- package/types/forty-cdk-dialog.d.ts +546 -0
- package/types/forty-cdk-disclosure.d.ts +127 -0
- package/types/forty-cdk-drag-drop.d.ts +456 -0
- package/types/forty-cdk-drawer.d.ts +871 -0
- package/types/forty-cdk-dropdown-menu.d.ts +242 -0
- package/types/forty-cdk-field.d.ts +236 -0
- package/types/forty-cdk-fieldset.d.ts +119 -0
- package/types/forty-cdk-file-upload.d.ts +124 -0
- package/types/forty-cdk-hover-card.d.ts +320 -0
- package/types/forty-cdk-input.d.ts +169 -0
- package/types/forty-cdk-internationalized-date.d.ts +1 -1
- package/types/forty-cdk-listbox.d.ts +513 -0
- package/types/forty-cdk-menu.d.ts +629 -0
- package/types/forty-cdk-menubar.d.ts +451 -0
- package/types/forty-cdk-meter.d.ts +122 -0
- package/types/forty-cdk-navigation-menu.d.ts +514 -0
- package/types/forty-cdk-number-input.d.ts +319 -0
- package/types/forty-cdk-otp-input.d.ts +248 -0
- package/types/forty-cdk-pagination.d.ts +214 -0
- package/types/forty-cdk-pane-resizer.d.ts +145 -0
- package/types/forty-cdk-popover.d.ts +509 -0
- package/types/forty-cdk-progress.d.ts +143 -0
- package/types/forty-cdk-radio-group.d.ts +222 -0
- package/types/forty-cdk-scroll-area.d.ts +258 -0
- package/types/forty-cdk-search.d.ts +142 -0
- package/types/forty-cdk-select.d.ts +899 -0
- package/types/forty-cdk-separator.d.ts +59 -0
- package/types/forty-cdk-signal-forms.d.ts +58 -0
- package/types/forty-cdk-slider.d.ts +379 -0
- package/types/forty-cdk-stepper.d.ts +650 -0
- package/types/forty-cdk-switch.d.ts +87 -0
- package/types/forty-cdk-table.d.ts +723 -0
- package/types/forty-cdk-tabs.d.ts +235 -0
- package/types/forty-cdk-time-field.d.ts +307 -0
- package/types/forty-cdk-time-picker.d.ts +578 -0
- package/types/forty-cdk-toast.d.ts +598 -0
- package/types/forty-cdk-toggle.d.ts +310 -0
- package/types/forty-cdk-toolbar.d.ts +217 -0
- package/types/forty-cdk-tooltip.d.ts +436 -0
- package/types/forty-cdk-tree.d.ts +688 -0
- package/types/forty-cdk.d.ts +1 -19743
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forty-cdk-navigation-menu.mjs","sources":["../../../projects/forty-cdk/navigation-menu/src/navigation-menu-context.ts","../../../projects/forty-cdk/navigation-menu/src/navigation-menu-defaults.ts","../../../projects/forty-cdk/navigation-menu/src/navigation-menu.ts","../../../projects/forty-cdk/navigation-menu/src/navigation-menu-list.ts","../../../projects/forty-cdk/navigation-menu/src/navigation-menu-item.ts","../../../projects/forty-cdk/navigation-menu/src/navigation-menu-trigger.ts","../../../projects/forty-cdk/navigation-menu/src/navigation-menu-content.ts","../../../projects/forty-cdk/navigation-menu/src/navigation-menu-link.ts","../../../projects/forty-cdk/navigation-menu/src/navigation-menu-indicator.ts","../../../projects/forty-cdk/navigation-menu/src/navigation-menu-viewport.ts","../../../projects/forty-cdk/navigation-menu/src/forty-cdk-navigation-menu.ts"],"sourcesContent":["import { inject, InjectionToken, type ModelSignal, type Signal } from '@angular/core';\n\nimport {\n type CollectionHandle,\n type ListNavigationAction,\n type WritingDirection,\n} from 'forty-cdk/core';\n\n/**\n * Per-trigger handle stored in the menu's `Collection`. Triggers register\n * themselves on construction so the menu can run roving-tabindex and\n * arrow-key navigation in DOM order.\n */\nexport interface ForNavigationMenuTriggerHandle extends CollectionHandle {\n readonly value: Signal<string>;\n readonly disabled: Signal<boolean>;\n readonly id: Signal<string>;\n}\n\n/** Per-content handle stored in the menu's `Collection` for trigger ↔ content wiring. */\nexport interface ForNavigationMenuContentHandle extends CollectionHandle {\n readonly value: Signal<string>;\n readonly id: Signal<string>;\n}\n\n/**\n * Per-viewport handle. Only one viewport is expected per menu. The host\n * element is the destination for re-parented active\n * content panels, and the viewport owns their ordering.\n */\nexport interface ForNavigationMenuViewportHandle {\n readonly host: HTMLElement;\n /**\n * Re-parent `panel` into the viewport host at the position dictated by\n * its `triggerHost`'s document order, so the panels' DOM order always\n * matches trigger order regardless of mount timing. This makes the\n * entering/leaving overlap during an animated A→B transition\n * deterministic: a panel whose trigger precedes another's is always\n * inserted before it, never appended last just because it mounted later.\n *\n * No-op when the panel is already correctly placed. `triggerHost` may be\n * `null` (trigger not yet registered); the panel is then appended last.\n */\n insertPanel(panel: HTMLElement, triggerHost: HTMLElement | null): void;\n}\n\n/**\n * Logical motion direction for `[forNavigationMenuContent]`'s\n * `data-motion` hook, computed from the relative DOM position of the\n * previously- and currently-active triggers. `null` (attribute absent)\n * when no comparison applies — first open, last close, or unknown values.\n */\nexport type ForNavigationMenuMotion = 'from-start' | 'from-end' | 'to-start' | 'to-end';\n\nexport interface ForNavigationMenuContext {\n readonly value: ModelSignal<string>;\n readonly orientation: Signal<'horizontal' | 'vertical'>;\n readonly dir: Signal<WritingDirection>;\n readonly loop: Signal<boolean>;\n readonly disabled: Signal<boolean>;\n\n isOpen(value: string): boolean;\n /** Toggle the open item (open if closed, close if currently open). */\n toggle(value: string): void;\n /** Open the given item (no-op if already open). */\n open(value: string): void;\n /** Close any open item. */\n close(): void;\n\n /**\n * Schedule open / close with the configured delays. `reason` lets the\n * implementation skip delays for keyboard-driven changes.\n */\n scheduleOpen(value: string, reason: NavigationMenuScheduleReason): void;\n /**\n * Schedule a hover close. Pass the leaving trigger's `value` so a quick\n * hover-then-leave on a still-closed trigger cancels its own pending open;\n * a pending open for a sibling (hover-across) is left to take over.\n */\n scheduleClose(reason: NavigationMenuScheduleReason, value?: string): void;\n cancelPending(): void;\n\n navigate(currentTrigger: HTMLElement, action: ListNavigationAction): void;\n /** Focus the trigger associated with the given value, if any. */\n focusTrigger(value: string): void;\n\n registerTrigger(handle: ForNavigationMenuTriggerHandle): void;\n unregisterTrigger(handle: ForNavigationMenuTriggerHandle): void;\n registerContent(handle: ForNavigationMenuContentHandle): void;\n unregisterContent(handle: ForNavigationMenuContentHandle): void;\n registerViewport(handle: ForNavigationMenuViewportHandle): void;\n unregisterViewport(handle: ForNavigationMenuViewportHandle): void;\n\n contentIdFor(value: string): string | null;\n triggerIdFor(value: string): string | null;\n triggerHostFor(value: string): HTMLElement | null;\n /** Layout-oriented selector for indicator positioning. */\n readonly activeTriggerHost: Signal<HTMLElement | null>;\n /** Host element of the currently-active content, if any. */\n readonly activeContentHost: Signal<HTMLElement | null>;\n /** Currently-registered viewport (at most one), or `null`. */\n readonly viewport: Signal<ForNavigationMenuViewportHandle | null>;\n /** Most recent open value before the current one. `''` if none. */\n readonly previousValue: Signal<string>;\n /**\n * Motion direction for `[forNavigationMenuContent]` whose item carries\n * `value`. Returns `null` when no transition applies (first open, value\n * not currently entering or leaving, indices unknown).\n */\n motionFor(value: string): ForNavigationMenuMotion | null;\n}\n\nexport type NavigationMenuScheduleReason = 'hover' | 'keyboard' | 'click';\n\n/** Per-item context, consumed by the trigger and content. */\nexport interface ForNavigationMenuItemContext {\n readonly value: Signal<string>;\n readonly disabled: Signal<boolean>;\n}\n\nexport const FOR_NAVIGATION_MENU_CONTEXT = new InjectionToken<ForNavigationMenuContext>(\n 'FOR_NAVIGATION_MENU_CONTEXT',\n);\n\nexport const FOR_NAVIGATION_MENU_ITEM_CONTEXT = new InjectionToken<ForNavigationMenuItemContext>(\n 'FOR_NAVIGATION_MENU_ITEM_CONTEXT',\n);\n\nexport function injectNavigationMenuContext(piece: string): ForNavigationMenuContext {\n const ctx = inject(FOR_NAVIGATION_MENU_CONTEXT, { optional: true });\n if (!ctx) {\n throw new Error(\n `[forty-cdk/navigation-menu] ${piece} must be used inside a [forNavigationMenu] element. ` +\n \"If it is declared inside an ng-template, DI resolves at the template's declaration site — \" +\n 'not where it is stamped (e.g. via ngTemplateOutlet) — so declare the template inside the ' +\n '[forNavigationMenu] root.',\n );\n }\n return ctx;\n}\n\nexport function injectNavigationMenuItemContext(piece: string): ForNavigationMenuItemContext {\n const ctx = inject(FOR_NAVIGATION_MENU_ITEM_CONTEXT, { optional: true });\n if (!ctx) {\n throw new Error(\n `[forty-cdk/navigation-menu] ${piece} must be used inside a [forNavigationMenuItem] element. ` +\n \"If it is declared inside an ng-template, DI resolves at the template's declaration site — \" +\n 'not where it is stamped (e.g. via ngTemplateOutlet) — so declare the template inside the ' +\n '[forNavigationMenuItem] root.',\n );\n }\n return ctx;\n}\n","import { type Provider } from '@angular/core';\n\nimport { createDefaults } from 'forty-cdk/core';\n\n/**\n * Defaults inherited by descendant navigation menus in the surrounding\n * injector scope. Configure with `provideForNavigationMenuDefaults` either\n * at the application root or in any component's `providers` array; partial\n * overrides merge with the parent scope.\n */\nexport interface ForNavigationMenuDefaults {\n /** ms before a hover opens an item. */\n delayDuration: number;\n /** ms before an item closes after hover leaves. */\n closeDelay: number;\n /**\n * ms after a peer item closed during which the next open is instant.\n * Keeps fluid hover-across-triggers feeling responsive.\n */\n skipDelayDuration: number;\n}\n\n/**\n * Library fallback for navigation menu defaults, read at the root injector when no\n * consumer has called `provideForNavigationMenuDefaults`. Exported for the shared defaults\n * contract spec; not re-exported from the primitive's public entry.\n */\nexport const FOR_NAVIGATION_MENU_FALLBACK_DEFAULTS: ForNavigationMenuDefaults = {\n delayDuration: 200,\n closeDelay: 150,\n skipDelayDuration: 300,\n};\n\nconst { token, provideDefaults } = createDefaults<ForNavigationMenuDefaults>(\n 'FOR_NAVIGATION_MENU_DEFAULTS',\n FOR_NAVIGATION_MENU_FALLBACK_DEFAULTS,\n);\n\n/** Token holding the resolved navigation-menu defaults for the current scope. */\nexport const FOR_NAVIGATION_MENU_DEFAULTS = token;\n\n/**\n * Configures forty-cdk navigation-menu defaults for this injector scope.\n * Partial overrides inherit unspecified keys from the parent scope (or\n * library defaults at the root).\n */\nexport function provideForNavigationMenuDefaults(\n defaults: Partial<ForNavigationMenuDefaults> = {},\n): Provider[] {\n return provideDefaults(defaults);\n}\n","import {\n booleanAttribute,\n computed,\n DestroyRef,\n Directive,\n ElementRef,\n inject,\n input,\n linkedSignal,\n model,\n signal,\n type Signal,\n} from '@angular/core';\n\nimport {\n Collection,\n injectDismissableLayer,\n createDebouncedAction,\n type ListNavigationAction,\n type WritingDirection,\n nextEnabledHandle,\n injectTextDirection,\n} from 'forty-cdk/core';\nimport {\n FOR_NAVIGATION_MENU_CONTEXT,\n type ForNavigationMenuContentHandle,\n type ForNavigationMenuContext,\n type ForNavigationMenuMotion,\n type ForNavigationMenuTriggerHandle,\n type ForNavigationMenuViewportHandle,\n type NavigationMenuScheduleReason,\n} from './navigation-menu-context';\nimport { FOR_NAVIGATION_MENU_DEFAULTS } from './navigation-menu-defaults';\n\n/**\n * Headless implementation of the\n * [WAI-ARIA Disclosure Navigation Menu pattern](https://www.w3.org/WAI/ARIA/apg/patterns/disclosure/examples/disclosure-navigation/).\n *\n * Despite the name, this is a `<nav>` of disclosures — NOT an ARIA `menu`.\n * Triggers are buttons with `aria-expanded`, content is regular landmarks\n * with links inside; Tab moves through links; Escape closes the open item\n * and returns focus to its trigger.\n *\n * One item is open at a time. Selection is exposed as `value` (the open\n * item's id, or `''` when nothing is open). The `model()` change emitter\n * fires only on internal transitions, never on consumer writes.\n *\n * Submenús anidados están fuera de scope para v1.\n *\n * @example\n * ```html\n * <nav forNavigationMenu aria-label=\"Main\">\n * <ul forNavigationMenuList>\n * <li forNavigationMenuItem value=\"products\">\n * <button forNavigationMenuTrigger>Products</button>\n * @if (products.isOpen()) {\n * <div forNavigationMenuContent>…</div>\n * }\n * </li>\n * </ul>\n * </nav>\n * ```\n */\n@Directive({\n selector: '[forNavigationMenu]',\n exportAs: 'forNavigationMenu',\n host: {\n '[attr.aria-label]': 'ariaLabel() || null',\n '[attr.data-state]': 'value() === \"\" ? \"closed\" : \"open\"',\n '[attr.data-orientation]': 'orientation()',\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\n '[attr.dir]': 'dir()',\n '(focusout)': 'onFocusOut($event)',\n },\n providers: [{ provide: FOR_NAVIGATION_MENU_CONTEXT, useExisting: ForNavigationMenu }],\n})\nexport class ForNavigationMenu implements ForNavigationMenuContext {\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #defaults = inject(FOR_NAVIGATION_MENU_DEFAULTS);\n /**\n * Two-way bindable. The id of the open item, or `''` for none. The\n * `model()` change emitter (`(valueChange)`) fires only on internal\n * transitions (trigger click, hover delay, Escape, outside click), never\n * on consumer writes via `[(value)]`.\n */\n readonly value = model<string>('');\n\n readonly orientation = input<'horizontal' | 'vertical'>('horizontal');\n\n /**\n * Writing direction. When unset (default `null`), the inherited ambient\n * direction is resolved from the nearest ancestor carrying a `dir` attribute\n * (or `<html dir>`), defaulting to `'ltr'`. An explicit `[dir]` always wins.\n * The resolved value is reflected to the host `dir` attribute and swaps\n * ArrowLeft / ArrowRight semantics in RTL.\n */\n readonly _dirInput = input<WritingDirection | null>(null, { alias: 'dir' });\n readonly dir = injectTextDirection(this._dirInput);\n readonly loop = input(true, { transform: booleanAttribute });\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /**\n * Manual `aria-label` for the surrounding `<nav>`. Use this when no visible\n * label element exists; otherwise prefer pointing `aria-labelledby` at one.\n * A `null` (default) or empty value emits no attribute.\n */\n readonly ariaLabel = input<string | null>(null);\n\n /**\n * ms before a hover opens an item. Default `200`. The default is read from\n * `provideForNavigationMenuDefaults` for the surrounding scope.\n */\n readonly delayDuration = input<number>(this.#defaults.delayDuration);\n\n /**\n * ms before an item closes after hover leaves. Default `150`. The default\n * is read from `provideForNavigationMenuDefaults` for the surrounding\n * scope.\n */\n readonly closeDelay = input<number>(this.#defaults.closeDelay);\n\n /**\n * ms after a peer item closed during which the next open is instant.\n * Keeps fluid hover-across-triggers feeling responsive. Default `300`.\n * The default is read from `provideForNavigationMenuDefaults` for the\n * surrounding scope.\n */\n readonly skipDelayDuration = input<number>(this.#defaults.skipDelayDuration);\n\n readonly #triggers = new Collection<ForNavigationMenuTriggerHandle>();\n readonly #contents = new Collection<ForNavigationMenuContentHandle>();\n readonly #viewport = signal<ForNavigationMenuViewportHandle | null>(null);\n\n /**\n * Previously open `value`, tracked so consumers can read the most recent\n * open value before the current one.\n *\n * `linkedSignal` is the canonical replacement for `effect()` writing to a\n * signal: each time `value()` changes, computation runs with the new\n * source plus the prior `{ source, value }` and returns the *previous*\n * source as the new value.\n *\n * Note: `data-motion` no longer derives from a single `previousValue`\n * (it could only remember one leaving panel). Per-panel frozen motion is\n * tracked in `#motion` instead, so several panels can leave at once during\n * overlapping `animate.leave` transitions without losing their direction.\n */\n readonly previousValue = linkedSignal<string, string>({\n source: () => this.value(),\n computation: (_current, prev) => prev?.source ?? '',\n });\n\n /**\n * Frozen `data-motion` per mounted panel `value`. Recorded imperatively at\n * each `open()` / `close()` transition — the entering panel and the panel\n * that just started leaving — and left untouched for panels that began\n * leaving in an earlier transition, so their direction stays stable for as\n * long as `animate.leave` keeps them mounted. Cleared when a panel\n * unmounts (`unregisterContent`) or re-enters as the current value.\n *\n * Backed by a `signal` holding an immutable `Map` so `motionFor` stays a\n * pure, pull-based read — no state is propagated from an `effect()`.\n */\n readonly #motion = signal<ReadonlyMap<string, ForNavigationMenuMotion>>(new Map());\n\n /** The value a pending hover-open is queued for (so a same-trigger leave can cancel it). */\n #pendingOpenValue: string | null = null;\n readonly #openAction = createDebouncedAction(() => {\n const value = this.#pendingOpenValue;\n this.#pendingOpenValue = null;\n if (value !== null) {\n this.open(value);\n }\n });\n readonly #closeAction = createDebouncedAction(() => this.close());\n #skipDelayTimer: ReturnType<typeof setTimeout> | null = null;\n #skipDelayActive = false;\n\n readonly #dismiss = injectDismissableLayer();\n\n constructor() {\n inject(DestroyRef).onDestroy(() => {\n this.#cancelPending();\n this.#cancelSkipDelay();\n this.#dismiss.deactivate();\n });\n }\n\n isOpen(value: string): boolean {\n return value !== '' && this.value() === value;\n }\n\n toggle(value: string): void {\n if (this.disabled()) return;\n if (this.value() === value) {\n this.close();\n } else {\n this.open(value);\n }\n }\n\n open(value: string): void {\n if (this.disabled() || value === '') return;\n this.#cancelPending();\n if (this.value() === value) return;\n this.#recordMotion(this.value(), value);\n this.value.set(value);\n this.#dismiss.activate({\n onEscapeKeyDown: () => {\n const current = this.value();\n this.close();\n const trigger = current ? this.triggerHostFor(current) : null;\n trigger?.focus();\n },\n onPointerDownOutside: () => this.close(),\n });\n }\n\n close(): void {\n this.#cancelPending();\n if (this.value() === '') return;\n this.#recordMotion(this.value(), '');\n this.value.set('');\n this.#dismiss.deactivate();\n this.#startSkipDelay();\n }\n\n scheduleOpen(value: string, reason: NavigationMenuScheduleReason): void {\n if (this.disabled() || value === '') return;\n this.#closeAction.cancel();\n this.#clearOpenTimer();\n if (this.value() === value) return;\n if (reason === 'click' || reason === 'keyboard') {\n this.open(value);\n return;\n }\n this.#pendingOpenValue = value;\n this.#openAction.schedule(this.#skipDelayActive ? 0 : this.delayDuration());\n }\n\n scheduleClose(reason: NavigationMenuScheduleReason, value?: string): void {\n if (reason === 'click' || reason === 'keyboard') {\n this.#clearOpenTimer();\n this.#closeAction.cancel();\n this.close();\n return;\n }\n if (this.#openAction.isPending()) {\n // A hover-open is queued. If it is for the trigger we are leaving, cancel\n // it so a quick hover-then-leave on a closed trigger doesn't open after\n // the pointer is gone. If it is for a sibling (hover-across), leave it so\n // that pending open takes over.\n if (value !== undefined && this.#pendingOpenValue === value) {\n this.#clearOpenTimer();\n }\n return;\n }\n this.#closeAction.cancel();\n if (this.value() === '') return;\n this.#closeAction.schedule(this.closeDelay());\n }\n\n cancelPending(): void {\n this.#cancelPending();\n }\n\n /**\n * APG: moving focus out of the navigation closes any open dropdown. Fires\n * when Tab/Shift+Tab walks past the last/first focusable inside the nav,\n * or when something else steals focus. The dismissable layer already\n * handles Escape and outside pointerdown; this covers the keyboard-tab\n * case the layer can't see.\n */\n protected onFocusOut(event: FocusEvent): void {\n if (this.value() === '') {\n return;\n }\n const next = event.relatedTarget as HTMLElement | null;\n // `null` means focus is leaving the document (e.g. browser chrome) or\n // moving to a non-focusable area — both qualify as \"outside the nav\".\n if (next && this.#host.nativeElement.contains(next)) {\n return;\n }\n this.close();\n }\n\n navigate(currentTrigger: HTMLElement, action: ListNavigationAction): void {\n if (this.disabled()) return;\n const target = nextEnabledHandle(this.#triggers.items(), currentTrigger, action, {\n loop: this.loop(),\n });\n target?.host.focus();\n }\n\n focusTrigger(value: string): void {\n this.triggerHostFor(value)?.focus();\n }\n\n registerTrigger(handle: ForNavigationMenuTriggerHandle): void {\n this.#triggers.register(handle);\n }\n unregisterTrigger(handle: ForNavigationMenuTriggerHandle): void {\n this.#triggers.unregister(handle);\n }\n registerContent(handle: ForNavigationMenuContentHandle): void {\n this.#contents.register(handle);\n }\n unregisterContent(handle: ForNavigationMenuContentHandle): void {\n this.#contents.unregister(handle);\n this.#clearMotion(handle.value());\n }\n registerViewport(handle: ForNavigationMenuViewportHandle): void {\n this.#viewport.set(handle);\n }\n unregisterViewport(handle: ForNavigationMenuViewportHandle): void {\n if (this.#viewport() === handle) {\n this.#viewport.set(null);\n }\n }\n readonly viewport: Signal<ForNavigationMenuViewportHandle | null> = this.#viewport.asReadonly();\n\n contentIdFor(value: string): string | null {\n for (const c of this.#contents.items()) {\n if (c.value() === value) {\n return c.id();\n }\n }\n return null;\n }\n\n triggerIdFor(value: string): string | null {\n for (const t of this.#triggers.items()) {\n if (t.value() === value) {\n return t.id();\n }\n }\n return null;\n }\n\n triggerHostFor(value: string): HTMLElement | null {\n for (const t of this.#triggers.items()) {\n if (t.value() === value) {\n return t.host;\n }\n }\n return null;\n }\n\n /** Layout-oriented selectors for indicator positioning. */\n readonly activeTriggerHost = computed<HTMLElement | null>(() => {\n const v = this.value();\n if (v === '') return null;\n for (const t of this.#triggers.items()) {\n if (t.value() === v) return t.host;\n }\n return null;\n });\n\n /** Currently-active content's host element, if mounted. */\n readonly activeContentHost = computed<HTMLElement | null>(() => {\n const v = this.value();\n if (v === '') return null;\n for (const c of this.#contents.items()) {\n if (c.value() === v) return c.host;\n }\n return null;\n });\n\n /**\n * `data-motion` direction for the content with the given `value`.\n *\n * Sets the slide direction by index comparison: when the user\n * moves rightward from A (index 0) to B (index 2), the entering panel\n * slides in from the end side (`from-end`) and the leaving panel slides\n * out to the start side (`to-start`) — both shift in the same logical\n * direction, like a horizontal carousel advancing.\n *\n * - The currently-entering content (`value === this.value()`) reflects\n * `from-start` / `from-end` based on which side the previous trigger\n * sat on relative to it.\n * - A leaving content reflects the `to-start` / `to-end` direction frozen\n * at the transition that started its exit, based on which side the\n * then-new trigger sat on relative to it. The direction stays stable for\n * as long as the panel is mounted, even across later transitions.\n * - Anything else (and first open / last close, where there is no peer\n * to compare against) returns `null` so the host binding emits no\n * attribute.\n *\n * \"Start\" and \"end\" are logical: index 0 in DOM order is \"start\", which\n * maps to the visual right in `dir=\"rtl\"`. Consumers can author the\n * keyframes once with logical CSS (e.g. `inset-inline-start`) and it\n * flips automatically.\n *\n * The currently-entering panel is computed live against `previousValue()`;\n * every other (leaving) panel reads its frozen direction from `#motion`,\n * recorded at the transition that started its exit. This keeps a leaving\n * panel's direction stable across later, overlapping transitions instead\n * of dropping to `null` once `previousValue` advances past it.\n */\n motionFor(value: string): ForNavigationMenuMotion | null {\n if (value === '') return null;\n if (value === this.value()) {\n return this.#enterMotion(this.previousValue(), value);\n }\n return this.#motion().get(value) ?? null;\n }\n\n /**\n * Record the frozen motion for a `from` → `to` transition: the entering\n * `to` panel and the leaving `from` panel. Existing entries for other\n * still-leaving panels are preserved so overlapping exits keep their\n * direction. `to`'s own stale leaving entry is dropped (it is re-entering).\n */\n #recordMotion(from: string, to: string): void {\n const next = new Map(this.#motion());\n if (to !== '') {\n const enter = this.#enterMotion(from, to);\n if (enter === null) next.delete(to);\n else next.set(to, enter);\n }\n if (from !== '') {\n const leave = this.#leaveMotion(from, to);\n if (leave === null) next.delete(from);\n else next.set(from, leave);\n }\n this.#motion.set(next);\n }\n\n #clearMotion(value: string): void {\n if (!this.#motion().has(value)) return;\n const next = new Map(this.#motion());\n next.delete(value);\n this.#motion.set(next);\n }\n\n /** Entering direction for `to` given the panel `from` it replaced. */\n #enterMotion(from: string, to: string): ForNavigationMenuMotion | null {\n if (from === '' || from === to) return null;\n const fromIndex = this.#triggerIndexFor(from);\n const toIndex = this.#triggerIndexFor(to);\n if (fromIndex < 0 || toIndex < 0) return null;\n if (fromIndex < toIndex) return 'from-end';\n if (fromIndex > toIndex) return 'from-start';\n return null;\n }\n\n /** Leaving direction for `from` given the panel `to` that replaced it. */\n #leaveMotion(from: string, to: string): ForNavigationMenuMotion | null {\n if (to === '' || to === from) return null;\n const fromIndex = this.#triggerIndexFor(from);\n const toIndex = this.#triggerIndexFor(to);\n if (fromIndex < 0 || toIndex < 0) return null;\n if (toIndex > fromIndex) return 'to-start';\n if (toIndex < fromIndex) return 'to-end';\n return null;\n }\n\n #triggerIndexFor(value: string): number {\n const triggers = this.#triggers.items();\n for (let i = 0; i < triggers.length; i++) {\n if (triggers[i]!.value() === value) return i;\n }\n return -1;\n }\n\n #cancelPending(): void {\n this.#clearOpenTimer();\n this.#closeAction.cancel();\n }\n\n #clearOpenTimer(): void {\n this.#openAction.cancel();\n this.#pendingOpenValue = null;\n }\n\n #startSkipDelay(): void {\n this.#cancelSkipDelay();\n this.#skipDelayActive = true;\n this.#skipDelayTimer = setTimeout(\n () => {\n this.#skipDelayTimer = null;\n this.#skipDelayActive = false;\n },\n Math.max(0, this.skipDelayDuration()),\n );\n }\n\n #cancelSkipDelay(): void {\n if (this.#skipDelayTimer !== null) {\n clearTimeout(this.#skipDelayTimer);\n this.#skipDelayTimer = null;\n }\n this.#skipDelayActive = false;\n }\n}\n","import { Directive } from '@angular/core';\n\nimport { injectNavigationMenuContext } from './navigation-menu-context';\n\n/**\n * Wrapper around the row / column of items. Carries `data-orientation` so\n * the consumer can flip CSS layout. No semantic role — this is a layout\n * helper, not a `menubar` (the disclosure pattern doesn't use one).\n */\n@Directive({\n selector: '[forNavigationMenuList]',\n exportAs: 'forNavigationMenuList',\n host: {\n '[attr.data-orientation]': 'ctx.orientation()',\n },\n})\nexport class ForNavigationMenuList {\n protected readonly ctx = injectNavigationMenuContext('ForNavigationMenuList');\n}\n","import { booleanAttribute, computed, Directive, input } from '@angular/core';\n\nimport {\n FOR_NAVIGATION_MENU_ITEM_CONTEXT,\n type ForNavigationMenuItemContext,\n injectNavigationMenuContext,\n} from './navigation-menu-context';\n\n/**\n * Wrapper around one trigger + its content. Owns the item's `value` (the\n * id used to coordinate which item is open) and its disabled state, then\n * exposes them downstream so the trigger and content can share a single\n * source of truth.\n */\n@Directive({\n selector: '[forNavigationMenuItem]',\n exportAs: 'forNavigationMenuItem',\n host: {\n '[attr.data-state]': 'state()',\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\n },\n providers: [\n {\n provide: FOR_NAVIGATION_MENU_ITEM_CONTEXT,\n useExisting: ForNavigationMenuItem,\n },\n ],\n})\nexport class ForNavigationMenuItem implements ForNavigationMenuItemContext {\n readonly #ctx = injectNavigationMenuContext('ForNavigationMenuItem');\n\n /** Identifier matched against the menu's `value`. Required. */\n readonly value = input.required<string>();\n\n /** Per-item disabled (in addition to the menu-level `disabled`). */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n protected readonly state = computed(() => (this.#ctx.isOpen(this.value()) ? 'open' : 'closed'));\n}\n","import { computed, Directive, ElementRef, inject, type Signal } from '@angular/core';\n\nimport { registerHandle, reflectDisabled, hostId, resolveListNavigation } from 'forty-cdk/core';\nimport {\n injectNavigationMenuContext,\n injectNavigationMenuItemContext,\n} from './navigation-menu-context';\n\n/**\n * Disclosure trigger. Apply on `<button>`. Hover / click open the paired\n * `[forNavigationMenuContent]`; arrow keys move focus across siblings;\n * ArrowDown (horizontal) / ArrowRight (vertical) open; Escape closes;\n * Enter / Space toggle.\n *\n * Per the APG disclosure-navigation pattern this does NOT open on plain\n * focus: Tabbing across the trigger row must not auto-expand panels, and a\n * programmatic return-focus (e.g. after Escape) must not synchronously\n * re-open the panel that just closed.\n */\n@Directive({\n selector: '[forNavigationMenuTrigger]',\n exportAs: 'forNavigationMenuTrigger',\n host: {\n type: 'button',\n '[id]': 'id()',\n '[attr.aria-expanded]': 'isOpen() ? \"true\" : \"false\"',\n '[attr.aria-controls]': 'isOpen() ? contentId() : null',\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\n '[attr.data-state]': 'isOpen() ? \"open\" : \"closed\"',\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\n '(click)': 'onClick()',\n '(pointerenter)': 'onPointerEnter()',\n '(pointerleave)': 'onPointerLeave()',\n '(keydown)': 'onKeyDown($event)',\n },\n})\nexport class ForNavigationMenuTrigger {\n protected readonly menu = injectNavigationMenuContext('ForNavigationMenuTrigger');\n readonly #item = injectNavigationMenuItemContext('ForNavigationMenuTrigger');\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n readonly id = hostId('for-navigation-menu-trigger');\n protected readonly value: Signal<string> = this.#item.value;\n protected readonly disabled: Signal<boolean> = this.#item.disabled;\n\n protected readonly isOpen = computed(() => this.menu.isOpen(this.value()));\n protected readonly contentId = computed(() => this.menu.contentIdFor(this.value()) ?? '');\n\n constructor() {\n const handle = {\n host: this.#host.nativeElement,\n value: this.value,\n disabled: this.disabled,\n id: this.id,\n };\n // Defer registration so the parent's `triggerIdFor` / `contentIdFor` /\n // `triggerHostFor` lookups can read `handle.value()` without hitting the\n // not-yet-bound `input.required` throw on the owning `[forNavigationMenuItem]`.\n // `unregisterTrigger` is reference-based, so destroy-before-register is a\n // safe no-op.\n registerHandle(\n handle,\n (h) => this.menu.registerTrigger(h),\n (h) => this.menu.unregisterTrigger(h),\n 'afterNextRender',\n );\n reflectDisabled(this.disabled);\n }\n\n protected onClick(): void {\n if (this.disabled()) return;\n this.menu.toggle(this.value());\n }\n\n protected onPointerEnter(): void {\n if (this.disabled()) return;\n this.menu.scheduleOpen(this.value(), 'hover');\n }\n\n protected onPointerLeave(): void {\n if (this.disabled()) return;\n this.menu.scheduleClose('hover', this.value());\n }\n\n protected onKeyDown(event: KeyboardEvent): void {\n if (this.disabled()) return;\n // Activation: Enter / Space toggle the disclosure.\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.menu.toggle(this.value());\n return;\n }\n if (event.key === 'Escape' && this.isOpen()) {\n event.preventDefault();\n event.stopPropagation();\n this.menu.close();\n this.#host.nativeElement.focus();\n return;\n }\n // Cross-axis arrow opens, main-axis arrows navigate.\n const orientation = this.menu.orientation();\n const action = resolveListNavigation(event, {\n orientation,\n dir: this.menu.dir(),\n });\n if (action) {\n event.preventDefault();\n this.menu.navigate(this.#host.nativeElement, action);\n return;\n }\n // ArrowDown (horizontal) / ArrowRight (vertical) opens the disclosure.\n const openKey = orientation === 'horizontal' ? 'ArrowDown' : 'ArrowRight';\n if (event.key === openKey) {\n event.preventDefault();\n this.menu.scheduleOpen(this.value(), 'keyboard');\n }\n }\n}\n","import {\n afterNextRender,\n computed,\n Directive,\n effect,\n ElementRef,\n inject,\n type Signal,\n signal,\n} from '@angular/core';\n\nimport { registerHandle, hostId } from 'forty-cdk/core';\nimport {\n injectNavigationMenuContext,\n injectNavigationMenuItemContext,\n} from './navigation-menu-context';\n\n/**\n * The disclosure panel for a navigation-menu item. Mounted via `@if`\n * (consumer drives it from `forNavigationMenu.value()` or\n * `forNavigationMenuItem`'s state) so animations work natively.\n *\n * Carries `aria-labelledby` pointing at the trigger and reflects\n * `data-state` for CSS hooks. No focus management is imposed — content\n * is a regular landmark; Tab moves through links inside, then out to the\n * next focusable element after the wrapper.\n *\n * When a `[forNavigationMenuViewport]` is present in the menu, the host\n * element re-parents itself into the viewport on mount so all active\n * panels share a single animated surface (mega-menu pattern). The viewport\n * owns the ordering: each panel is inserted in its trigger's document\n * order, never simply appended in mount order. So during an overlapping\n * A→B transition — where the leaving A is still mounted (its\n * `animate.leave` keeps it around) while B enters — the viewport's child\n * order is deterministic and always matches trigger order: the panel whose\n * trigger comes first in the DOM is the first child, irrespective of which\n * panel mounted last. Cross-fade / slide carousels can therefore author\n * their stacking against trigger order (pair it with `data-motion`). The\n * directive does not undo the re-parent on destroy: the consumer's `@if`\n * is destroying the element anyway, and Angular's renderer removes nodes\n * by their actual current parent.\n *\n * `data-motion` is reflected (`from-start | from-end | to-start | to-end`)\n * for CSS keyframes that slide the entering and leaving panels together\n * during a transition.\n */\n@Directive({\n selector: '[forNavigationMenuContent]',\n exportAs: 'forNavigationMenuContent',\n host: {\n '[id]': 'id()',\n '[attr.aria-labelledby]': 'triggerId()',\n '[attr.data-state]': 'menu.isOpen(value()) ? \"open\" : \"closed\"',\n '[attr.data-motion]': 'motion()',\n '(pointerenter)': 'menu.cancelPending()',\n '(pointerleave)': 'menu.scheduleClose(\"hover\")',\n '(keydown.escape)': 'onEscape($any($event))',\n },\n})\nexport class ForNavigationMenuContent {\n protected readonly menu = injectNavigationMenuContext('ForNavigationMenuContent');\n readonly #item = injectNavigationMenuItemContext('ForNavigationMenuContent');\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n\n readonly id = hostId('for-navigation-menu-content');\n protected readonly value: Signal<string> = this.#item.value;\n protected readonly triggerId = computed(() => this.menu.triggerIdFor(this.value()));\n protected readonly motion = computed(() => this.menu.motionFor(this.value()));\n\n readonly #mounted = signal(false);\n\n constructor() {\n const handle = {\n host: this.#host,\n value: this.value,\n id: this.id,\n };\n // Defer registration so the parent's lookups can read `handle.value()`\n // without hitting the not-yet-bound `input.required` throw on the owning\n // `[forNavigationMenuItem]`. `unregisterContent` is reference-based, so\n // destroy-before-register is a safe no-op.\n registerHandle(\n handle,\n (h) => this.menu.registerContent(h),\n (h) => this.menu.unregisterContent(h),\n 'afterNextRender',\n );\n\n // Defer the re-parent until after the embedded view is attached to its\n // template anchor — Angular inserts root nodes AFTER directive\n // constructors run, so an `appendChild` here would be undone. Running\n // it in `afterNextRender` happens before browser paint, so the move is\n // not visible. The viewport owns ordering: it inserts this panel in its\n // trigger's document order, so an overlapping A→B transition keeps a\n // deterministic child order regardless of which panel mounted last.\n afterNextRender(() => {\n this.#reparent();\n this.#mounted.set(true);\n });\n\n // Re-parent (and re-order) the panel reactively once mounted.\n // `triggerHostFor` reads the menu's trigger collection, so this re-runs\n // whenever this panel's trigger registers or unregisters — closing the\n // race where the trigger registers AFTER the content (both defer to\n // `afterNextRender`). Until the trigger is known the panel sorts last;\n // once it registers the viewport re-orders it into trigger document\n // order. The re-parent is a DOM side effect on the imperative viewport\n // handle (no signal writes), and it waits for `#mounted` so it never runs\n // before `afterNextRender` has attached the panel under the viewport.\n //\n // Note: the trigger collection is backed by a `MutationObserver`, and this\n // very `appendChild` re-parent mutates the observed subtree, so the\n // collection can re-notify and re-run this effect a second time. That extra\n // pass is EXPECTED and harmless — `insertPanel` / `#reorder` are idempotent\n // (a node already in its target slot is left untouched), so the re-run is a\n // no-op. Do not \"fix\" the idempotency away to suppress it: the convergence\n // it guarantees is what makes the registration race self-heal.\n effect(() => {\n if (!this.#mounted()) return;\n this.#reparent();\n });\n }\n\n #reparent(): void {\n const viewport = this.menu.viewport();\n if (!viewport) return;\n viewport.insertPanel(this.#host, this.menu.triggerHostFor(this.value()));\n }\n\n protected onEscape(event: KeyboardEvent): void {\n event.preventDefault();\n event.stopPropagation();\n const v = this.value();\n this.menu.close();\n this.menu.focusTrigger(v);\n }\n}\n","import { booleanAttribute, Directive, input } from '@angular/core';\n\n/**\n * Decorative marker for links inside a navigation-menu content. Reflects\n * `data-active` for CSS hooks (the consumer flips it based on the\n * router's current URL — the directive doesn't know about routing).\n *\n * Apply on `<a>`.\n */\n@Directive({\n selector: '[forNavigationMenuLink]',\n exportAs: 'forNavigationMenuLink',\n host: {\n '[attr.data-active]': 'active() ? \"\" : null',\n '[attr.aria-current]': 'active() ? ariaCurrent() : null',\n },\n})\nexport class ForNavigationMenuLink {\n /** When true, this link points at the current page. Reflects `aria-current`. */\n readonly active = input(false, { transform: booleanAttribute });\n\n /**\n * Value forwarded to `aria-current` when `active` is true. Defaults to\n * `'page'` (the most common case for top-level navigation).\n */\n readonly ariaCurrent = input<'page' | 'step' | 'location' | 'date' | 'time' | 'true'>('page');\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n afterNextRender,\n computed,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n inject,\n PLATFORM_ID,\n signal,\n} from '@angular/core';\n\nimport { injectNavigationMenuContext } from './navigation-menu-context';\n\n/**\n * Optional visual indicator (underline, pill) that follows the active\n * trigger. Computes geometry from the trigger's position relative to\n * `[forNavigationMenuList]` and exposes it via CSS custom properties:\n *\n * - `--for-navigation-menu-indicator-x` — horizontal offset (px)\n * - `--for-navigation-menu-indicator-y` — vertical offset (px)\n * - `--for-navigation-menu-indicator-width` — trigger width (px)\n * - `--for-navigation-menu-indicator-height` — trigger height (px)\n *\n * Drive `transform` / `width` / `height` from these in CSS. The directive\n * is decorative — set `aria-hidden=\"true\"` on the host element if\n * needed.\n *\n * Geometry is re-measured reactively, not on every render: a `ResizeObserver`\n * (browser-only) watches the active trigger and the surrounding list and bumps\n * a measure-tick signal, and the offset / size are recomputed only when the\n * active trigger changes or one of those boxes resizes. `afterNextRender`\n * covers the initial measure once the host is in the DOM.\n */\n@Directive({\n selector: '[forNavigationMenuIndicator]',\n exportAs: 'forNavigationMenuIndicator',\n host: {\n 'aria-hidden': 'true',\n '[attr.data-state]': 'state()',\n '[attr.data-orientation]': 'menu.orientation()',\n '[style.--for-navigation-menu-indicator-x.px]': 'x()',\n '[style.--for-navigation-menu-indicator-y.px]': 'y()',\n '[style.--for-navigation-menu-indicator-width.px]': 'width()',\n '[style.--for-navigation-menu-indicator-height.px]': 'height()',\n },\n})\nexport class ForNavigationMenuIndicator {\n protected readonly menu = injectNavigationMenuContext('ForNavigationMenuIndicator');\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n readonly #isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n readonly #measureTick = signal(0);\n\n readonly #geometry = computed<{ x: number; y: number; width: number; height: number }>(() => {\n // Depend on the manual tick so ResizeObserver callbacks invalidate the\n // geometry, and on the active trigger so a trigger switch re-measures.\n this.#measureTick();\n const trigger = this.menu.activeTriggerHost();\n const list = this.#host.parentElement;\n if (!trigger || !list) {\n return { x: 0, y: 0, width: 0, height: 0 };\n }\n const tr = trigger.getBoundingClientRect();\n const lr = list.getBoundingClientRect();\n return { x: tr.left - lr.left, y: tr.top - lr.top, width: tr.width, height: tr.height };\n });\n\n protected readonly x = computed(() => this.#geometry().x);\n protected readonly y = computed(() => this.#geometry().y);\n protected readonly width = computed(() => this.#geometry().width);\n protected readonly height = computed(() => this.#geometry().height);\n\n protected readonly state = computed(() => (this.menu.activeTriggerHost() ? 'visible' : 'hidden'));\n\n constructor() {\n // Initial measure once the host (and its list parent) are attached.\n afterNextRender(() => this.#measureTick.update((t) => t + 1));\n\n if (this.#isBrowser && typeof ResizeObserver !== 'undefined') {\n const ro = new ResizeObserver(() => this.#measureTick.update((t) => t + 1));\n const list = this.#host.parentElement;\n if (list) {\n ro.observe(list);\n }\n\n // Follow the active trigger: observe it for size changes and re-measure\n // on every switch. Pure side effect on the imperative ResizeObserver — no\n // signal writes from this effect.\n let observed: HTMLElement | null = null;\n effect(() => {\n const active = this.menu.activeTriggerHost();\n if (observed && observed !== active) {\n ro.unobserve(observed);\n observed = null;\n }\n if (active && active !== observed) {\n ro.observe(active);\n observed = active;\n }\n });\n\n inject(DestroyRef).onDestroy(() => ro.disconnect());\n }\n }\n}\n","import {\n PLATFORM_ID,\n computed,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n inject,\n signal,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\nimport { registerHandle } from 'forty-cdk/core';\nimport {\n type ForNavigationMenuViewportHandle,\n injectNavigationMenuContext,\n} from './navigation-menu-context';\n\n/**\n * Optional shared surface for mega-menu style navigation. When present,\n * `[forNavigationMenuContent]` re-parents itself into this host on mount,\n * so all active content panels live inside a single visual container that\n * can animate width/height between trigger groups.\n *\n * The viewport exposes the active content's natural size as CSS custom\n * properties:\n *\n * - `--for-navigation-menu-viewport-width` (px)\n * - `--for-navigation-menu-viewport-height` (px)\n *\n * Drive `width` / `height` from these in CSS to get fluid resize between\n * panels. The directive is a real interactive surface (it hosts the\n * focusable content), so `aria-hidden=\"false\"` is reflected explicitly to\n * counteract any wrapper that defaults to hidden.\n *\n * Two `[forNavigationMenuContent]` panels can briefly co-exist inside the\n * viewport during a transition — the leaving panel stays mounted as long\n * as the consumer's `@if` keeps it around (e.g. `animate.leave`), so the\n * consumer can cross-fade or slide. Mount lifecycle stays with the\n * consumer's template; this directive only re-parents and measures.\n *\n * The viewport owns panel ordering: panels are inserted in their triggers'\n * document order, never simply appended in mount order. So during an\n * overlapping A→B transition the panel whose trigger comes first in the DOM\n * is always the first child of the viewport, regardless of which panel\n * mounted last — giving cross-fade / slide carousels a deterministic axis\n * to author against (pair this with the `data-motion` hook on Content).\n *\n * Measurement always tracks the active panel: the ResizeObserver follows\n * `activeContentHost()`, so a non-active panel kept mounted by\n * `animate.leave` is intentionally no longer measured (its size must not\n * drive the viewport box mid-transition). The exposed\n * `--for-navigation-menu-viewport-*` variables therefore reflect the\n * entering panel as soon as it becomes active.\n *\n * **Avoid a measurement feedback loop.** The exposed\n * `--for-navigation-menu-viewport-width` / `-height` are measured from the\n * *active content panel*, never from the viewport host's own box — but the\n * ResizeObserver does also observe the host (so a surrounding column resize is\n * picked up). Do **not** drive the host's own measured dimension from these\n * variables (e.g. `width: var(--for-navigation-menu-viewport-width)` applied to\n * the viewport host) and then nest the measured panel such that the host's box\n * constrains the panel's: that would let a measure-tick's CSS output feed back\n * into the next observation. Drive `width` / `height` from the variables on a\n * wrapper or transition them on the host without coupling them back to the\n * measured child's size. The measure-tick read path itself is safe — the\n * observer only bumps a counter, and the geometry is read in a `computed`, not\n * written from the same notification.\n *\n * @example\n * ```html\n * <nav forNavigationMenu [(value)]=\"open\">\n * <ul forNavigationMenuList>…</ul>\n * <div forNavigationMenuViewport></div>\n * </nav>\n * ```\n */\n@Directive({\n selector: '[forNavigationMenuViewport]',\n exportAs: 'forNavigationMenuViewport',\n host: {\n 'aria-hidden': 'false',\n '[attr.data-state]': 'state()',\n '[attr.data-orientation]': 'menu.orientation()',\n '[style.--for-navigation-menu-viewport-width.px]': 'width()',\n '[style.--for-navigation-menu-viewport-height.px]': 'height()',\n },\n})\nexport class ForNavigationMenuViewport {\n protected readonly menu = injectNavigationMenuContext('ForNavigationMenuViewport');\n readonly host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n\n readonly #measureTick = signal(0);\n protected readonly width = computed(() => this.#measureSize().width);\n protected readonly height = computed(() => this.#measureSize().height);\n\n protected readonly state = computed(() => (this.menu.value() ? 'open' : 'closed'));\n\n readonly #isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n // Tracked panels in insertion order, each with its last known trigger host.\n // Ordering resolves a trigger's document position from this list rather than\n // a DOM `aria-labelledby` → `getElementById` round-trip, which silently\n // returns `null` while a trigger's registration races its content's (both\n // defer to `afterNextRender`) and degrades ordering to mount order. The\n // content re-invokes `insertPanel` once its trigger registers, so the list\n // and the resulting DOM order self-heal. Insertion order is preserved so\n // panels whose trigger is not yet known keep a stable relative position\n // (sorted to the end) instead of thrashing as siblings re-insert.\n readonly #panels: { panel: HTMLElement; triggerHost: HTMLElement | null }[] = [];\n\n constructor() {\n const handle: ForNavigationMenuViewportHandle = {\n host: this.host,\n insertPanel: (panel, triggerHost) => this.#insertPanel(panel, triggerHost),\n };\n registerHandle(\n handle,\n (h) => this.menu.registerViewport(h),\n (h) => this.menu.unregisterViewport(h),\n );\n\n // Track the active content's natural size via ResizeObserver so layout\n // mutations between renders (e.g. async content load, viewport host\n // resize from a surrounding column) flow into the exposed CSS variables.\n // Browser-only API; on SSR / very old runtimes we simply skip the\n // observation and the `width`/`height` computed signals still settle on\n // first read because they pull from `getBoundingClientRect` directly.\n if (this.#isBrowser && typeof ResizeObserver !== 'undefined') {\n const ro = new ResizeObserver(() => this.#measureTick.update((t) => t + 1));\n // Always observe the viewport host itself so layout changes that affect\n // its own box (e.g. the surrounding column resizing) are picked up.\n ro.observe(this.host);\n\n // Switch which content child is being observed whenever the active\n // panel changes. Pure side effect on the imperative ResizeObserver —\n // no signal writes from this effect, so the host bindings on\n // `width`/`height` settle within the same CD pass that the active\n // content changed in (no CLAUDE.md \"state in effects\" exception\n // needed here).\n let observed: HTMLElement | null = null;\n effect(() => {\n const active = this.menu.activeContentHost();\n if (observed && observed !== active) {\n ro.unobserve(observed);\n observed = null;\n }\n if (active && active !== observed) {\n ro.observe(active);\n observed = active;\n }\n });\n\n inject(DestroyRef).onDestroy(() => ro.disconnect());\n }\n }\n\n #insertPanel(panel: HTMLElement, triggerHost: HTMLElement | null): void {\n const existing = this.#panels.find((p) => p.panel === panel);\n if (existing) {\n existing.triggerHost = triggerHost;\n } else {\n this.#panels.push({ panel, triggerHost });\n }\n this.#reorder();\n }\n\n // Reconcile the viewport's children to a single deterministic order: panels\n // whose trigger host is known come first, sorted by the trigger's document\n // position; panels whose trigger is not yet known follow, in insertion\n // order. Computing one total order (rather than inserting each panel\n // relative to the others) makes the result independent of the order in\n // which panels call `insertPanel`, so a registration race converges instead\n // of thrashing. Nodes already in their target slot are left untouched, so\n // re-running this never disturbs an unaffected panel mid-animation.\n #reorder(): void {\n this.#prunePanels();\n const ordered = [...this.#panels].sort((a, b) => {\n if (a.triggerHost && b.triggerHost) {\n if (a.triggerHost === b.triggerHost) return 0;\n const rel = a.triggerHost.compareDocumentPosition(b.triggerHost);\n if ((rel & Node.DOCUMENT_POSITION_FOLLOWING) !== 0) return -1;\n if ((rel & Node.DOCUMENT_POSITION_PRECEDING) !== 0) return 1;\n return 0;\n }\n if (a.triggerHost) return -1;\n if (b.triggerHost) return 1;\n return 0;\n });\n // Reconcile against the host's live children by index: walk the target\n // order, and whenever the child currently at position `i` is not the panel\n // that belongs there, move it in. Moving into the already-correct slot is\n // a no-op, so an unaffected panel is never disturbed mid-animation. Using\n // the live child at `i` as the reference (rather than a not-yet-inserted\n // sibling) keeps every `insertBefore` valid on the first re-parent too.\n for (let i = 0; i < ordered.length; i++) {\n const panel = ordered[i]!.panel;\n const current = this.host.children[i] ?? null;\n if (current !== panel) {\n this.host.insertBefore(panel, current);\n }\n }\n }\n\n // Drop panels the consumer's `@if` already destroyed so the tracking list\n // does not leak detached nodes across mount/unmount cycles. A freshly\n // mounted panel still sits under its `[forNavigationMenuItem]` (connected,\n // pending its first re-parent) and must be kept.\n #prunePanels(): void {\n for (let i = this.#panels.length - 1; i >= 0; i--) {\n if (!this.#panels[i]!.panel.isConnected) {\n this.#panels.splice(i, 1);\n }\n }\n }\n\n #measureSize(): { width: number; height: number } {\n // Depend on the manual tick so RO callbacks invalidate the computed.\n this.#measureTick();\n const active = this.menu.activeContentHost();\n if (!active) return { width: 0, height: 0 };\n const r = active.getBoundingClientRect();\n return { width: r.width, height: r.height };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|