@raintonic/formaui 0.9.2 → 0.9.3
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/fesm2022/raintonic-formaui-components-alert.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-avatar.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-avatar.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-card.mjs +78 -8
- package/fesm2022/raintonic-formaui-components-card.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-chip.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-chip.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-data-table.mjs +80 -11
- package/fesm2022/raintonic-formaui-components-data-table.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-drawer.mjs +37 -6
- package/fesm2022/raintonic-formaui-components-drawer.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-dual-tier-navigation.mjs +1 -1
- package/fesm2022/raintonic-formaui-components-dual-tier-navigation.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-form-field.mjs +21 -2
- package/fesm2022/raintonic-formaui-components-form-field.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-input.mjs +14 -0
- package/fesm2022/raintonic-formaui-components-input.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-select.mjs +13 -5
- package/fesm2022/raintonic-formaui-components-select.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-side-panel.mjs +40 -6
- package/fesm2022/raintonic-formaui-components-side-panel.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-toggle-group.mjs +16 -5
- package/fesm2022/raintonic-formaui-components-toggle-group.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-toolbar.mjs +10 -4
- package/fesm2022/raintonic-formaui-components-toolbar.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-tooltip.mjs +102 -8
- package/fesm2022/raintonic-formaui-components-tooltip.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-services-dialog.mjs +8 -4
- package/fesm2022/raintonic-formaui-services-dialog.mjs.map +1 -1
- package/fesm2022/raintonic-formaui.mjs +1 -1
- package/fesm2022/raintonic-formaui.mjs.map +1 -1
- package/llms-full.txt +64 -19
- package/package.json +1 -1
- package/styles/generated/_tokens.scss +1 -1
- package/styles/partials/components/_dialog.scss +24 -0
- package/styles/styles.css +16 -1
- package/types/raintonic-formaui-components-card.d.ts +46 -2
- package/types/raintonic-formaui-components-card.d.ts.map +1 -1
- package/types/raintonic-formaui-components-data-table.d.ts +50 -3
- package/types/raintonic-formaui-components-data-table.d.ts.map +1 -1
- package/types/raintonic-formaui-components-drawer.d.ts +20 -2
- package/types/raintonic-formaui-components-drawer.d.ts.map +1 -1
- package/types/raintonic-formaui-components-form-field.d.ts +10 -0
- package/types/raintonic-formaui-components-form-field.d.ts.map +1 -1
- package/types/raintonic-formaui-components-input.d.ts +9 -0
- package/types/raintonic-formaui-components-input.d.ts.map +1 -1
- package/types/raintonic-formaui-components-select.d.ts +8 -1
- package/types/raintonic-formaui-components-select.d.ts.map +1 -1
- package/types/raintonic-formaui-components-side-panel.d.ts +24 -2
- package/types/raintonic-formaui-components-side-panel.d.ts.map +1 -1
- package/types/raintonic-formaui-components-toggle-group.d.ts +1 -1
- package/types/raintonic-formaui-components-toggle-group.d.ts.map +1 -1
- package/types/raintonic-formaui-components-toolbar.d.ts +5 -1
- package/types/raintonic-formaui-components-toolbar.d.ts.map +1 -1
- package/types/raintonic-formaui-components-tooltip.d.ts +55 -4
- package/types/raintonic-formaui-components-tooltip.d.ts.map +1 -1
- package/types/raintonic-formaui-services-dialog.d.ts +12 -1
- package/types/raintonic-formaui-services-dialog.d.ts.map +1 -1
- package/types/raintonic-formaui.d.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raintonic-formaui-components-drawer.mjs","sources":["../../../lib/components/drawer/drawer.types.ts","../../../lib/components/drawer/drawer.intl.ts","../../../lib/components/drawer/drawer.component.ts","../../../lib/components/drawer/drawer.component.html","../../../lib/components/drawer/raintonic-formaui-components-drawer.ts"],"sourcesContent":["export type DrawerPosition = 'left' | 'right' | 'top' | 'bottom';\r\nexport type DrawerMode = 'overlay' | 'push';\r\nexport type DrawerSize = 'sm' | 'md' | 'lg' | 'full';\r\n\r\nexport const DRAWER_SIZES: Record<DrawerSize, string> = {\r\n sm: '320px',\r\n md: '480px',\r\n lg: '640px',\r\n full: '100%',\r\n};\r\n","import { Injectable } from '@angular/core';\r\nimport { FuiIntlBase } from '@raintonic/formaui/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class FuiDrawerIntl extends FuiIntlBase {\r\n closeAriaLabel = 'Close drawer';\r\n}\r\n","import {\r\n Component,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n ViewEncapsulation,\r\n input,\r\n output,\r\n signal,\r\n computed,\r\n effect,\r\n booleanAttribute,\r\n HostListener,\r\n ElementRef,\r\n inject,\r\n viewChild,\r\n Signal,\r\n WritableSignal,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { FuiIconComponent } from '@raintonic/formaui/components/icon';\r\nimport { DrawerPosition, DrawerMode, DrawerSize, DRAWER_SIZES } from './drawer.types';\r\nimport { FuiDrawerIntl } from './drawer.intl';\r\n\r\n@Component({\r\n selector: 'fui-drawer',\r\n standalone: true,\r\n imports: [FuiIconComponent],\r\n templateUrl: './drawer.component.html',\r\n styleUrls: ['./drawer.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n host: {\r\n class: 'fui-drawer',\r\n '[class.fui-drawer--open]': '_opened()',\r\n '[class.fui-drawer--left]': 'position() === \"left\"',\r\n '[class.fui-drawer--right]': 'position() === \"right\"',\r\n '[class.fui-drawer--top]': 'position() === \"top\"',\r\n '[class.fui-drawer--bottom]': 'position() === \"bottom\"',\r\n '[class.fui-drawer--overlay]': 'mode() === \"overlay\"',\r\n '[class.fui-drawer--push]': 'mode() === \"push\"',\r\n '[attr.role]': '\"dialog\"',\r\n '[attr.aria-modal]': '_opened() ? \"true\" : null',\r\n '[attr.aria-label]': 'ariaLabel() || (!ariaLabelledBy() ? title() : null)',\r\n '[attr.aria-labelledby]': 'ariaLabelledBy()',\r\n },\r\n})\r\nexport class FuiDrawerComponent {\r\n private readonly _document = inject(DOCUMENT);\r\n readonly intl = inject(FuiDrawerIntl);\r\n private readonly _cdr = inject(ChangeDetectorRef);\r\n\r\n // Inputs\r\n readonly position = input<DrawerPosition>('right');\r\n readonly mode = input<DrawerMode>('overlay');\r\n readonly size = input('md');\r\n readonly opened = input<boolean, unknown>(false, { transform: booleanAttribute });\r\n readonly hasBackdrop = input<boolean, unknown>(true, { transform: booleanAttribute });\r\n readonly closeOnBackdropClick = input<boolean, unknown>(true, { transform: booleanAttribute });\r\n readonly closeOnEsc = input<boolean, unknown>(true, { transform: booleanAttribute });\r\n readonly title = input('');\r\n readonly showCloseButton = input<boolean, unknown>(true, { transform: booleanAttribute });\r\n\r\n /** ARIA label for the drawer, used when no visible title is present */\r\n readonly ariaLabel = input<string | null>(null);\r\n\r\n /** ID of an element that labels the drawer */\r\n readonly ariaLabelledBy = input<string | null>(null);\r\n\r\n // Outputs\r\n readonly openedChange = output<boolean>();\r\n readonly closed = output();\r\n\r\n // Internal state\r\n readonly _opened: WritableSignal<boolean> = signal(false);\r\n readonly _animating: WritableSignal<boolean> = signal(false);\r\n\r\n // Track the last input value to avoid effect re-triggering on programmatic changes\r\n private _lastInputValue = false;\r\n\r\n // Focus management\r\n private _previouslyFocusedElement: HTMLElement | null = null;\r\n\r\n // ViewChild\r\n readonly drawerPanel: Signal<ElementRef<HTMLElement> | undefined> = viewChild<ElementRef<HTMLElement>>('drawerPanel');\r\n\r\n // Computed\r\n readonly _sizeValue: Signal<string> = computed(() => {\r\n const size = this.size();\r\n return DRAWER_SIZES[size as DrawerSize] ?? size;\r\n });\r\n\r\n readonly _isHorizontal: Signal<boolean> = computed(() => {\r\n const pos = this.position();\r\n return pos === 'left' || pos === 'right';\r\n });\r\n\r\n constructor() {\r\n // Sync opened input with internal state — only react when the input actually changes\r\n effect(() => {\r\n const inputValue = this.opened();\r\n if (inputValue !== this._lastInputValue) {\r\n this._lastInputValue = inputValue;\r\n if (inputValue) {\r\n this._openInternal();\r\n } else {\r\n this._closeInternal();\r\n }\r\n }\r\n });\r\n\r\n this.intl.changes.pipe(takeUntilDestroyed()).subscribe(() => { this._cdr.markForCheck(); });\r\n }\r\n\r\n @HostListener('document:keydown', ['$event'])\r\n onKeydown(event: KeyboardEvent): void {\r\n if (!this._opened()) return;\r\n\r\n if (event.key === 'Escape' && this.closeOnEsc()) {\r\n this.close();\r\n return;\r\n }\r\n\r\n // Focus trap cycling\r\n if (event.key === 'Tab') {\r\n const focusableElements = this._getAllFocusableElements();\r\n if (focusableElements.length === 0) {\r\n event.preventDefault();\r\n return;\r\n }\r\n\r\n const firstFocusable = focusableElements[0];\r\n const lastFocusable = focusableElements[focusableElements.length - 1];\r\n const activeElement = this._document.activeElement;\r\n\r\n if (event.shiftKey) {\r\n if (activeElement === firstFocusable) {\r\n event.preventDefault();\r\n lastFocusable.focus();\r\n }\r\n } else {\r\n if (activeElement === lastFocusable) {\r\n event.preventDefault();\r\n firstFocusable.focus();\r\n }\r\n }\r\n }\r\n }\r\n\r\n open(): void {\r\n if (!this._opened()) {\r\n this._openInternal();\r\n this.openedChange.emit(true);\r\n }\r\n }\r\n\r\n close(): void {\r\n if (this._opened()) {\r\n this._closeInternal();\r\n this.openedChange.emit(false);\r\n this.closed.emit();\r\n }\r\n }\r\n\r\n toggle(): void {\r\n if (this._opened()) {\r\n this.close();\r\n } else {\r\n this.open();\r\n }\r\n }\r\n\r\n private _openInternal(): void {\r\n this._previouslyFocusedElement = document.activeElement as HTMLElement;\r\n this._opened.set(true);\r\n\r\n // Focus the panel after it renders\r\n setTimeout(() => {\r\n this._focusFirstTabbable();\r\n });\r\n }\r\n\r\n private _closeInternal(): void {\r\n this._opened.set(false);\r\n\r\n // Restore focus\r\n if (this._previouslyFocusedElement) {\r\n this._previouslyFocusedElement.focus();\r\n this._previouslyFocusedElement = null;\r\n }\r\n }\r\n\r\n private _focusFirstTabbable(): void {\r\n const panel = this.drawerPanel()?.nativeElement;\r\n if (!panel) return;\r\n\r\n const focusable = this._getAllFocusableElements();\r\n\r\n if (focusable.length > 0) {\r\n focusable[0].focus();\r\n } else {\r\n panel.setAttribute('tabindex', '-1');\r\n panel.focus();\r\n }\r\n }\r\n\r\n private _getAllFocusableElements(): HTMLElement[] {\r\n const panel = this.drawerPanel()?.nativeElement;\r\n if (!panel) return [];\r\n\r\n const selectors = [\r\n 'a[href]',\r\n 'button:not([disabled])',\r\n 'textarea:not([disabled])',\r\n 'input:not([disabled])',\r\n 'select:not([disabled])',\r\n '[tabindex]:not([tabindex=\"-1\"])',\r\n '[contenteditable=\"true\"]',\r\n ].join(',');\r\n\r\n return Array.from(panel.querySelectorAll<HTMLElement>(selectors)).filter((el) => el.offsetParent !== null);\r\n }\r\n}\r\n","@if (_opened() && hasBackdrop()) {\r\n <div class=\"fui-drawer__backdrop\" (click)=\"closeOnBackdropClick() ? close() : null\" aria-hidden=\"true\"></div>\r\n}\r\n\r\n<div class=\"fui-drawer__panel\" [style.--_drawer-size]=\"_sizeValue()\" #drawerPanel tabindex=\"-1\">\r\n @if (title() || showCloseButton()) {\r\n <div class=\"fui-drawer__header\">\r\n @if (title()) {\r\n <h2 class=\"fui-drawer__title\">{{ title() }}</h2>\r\n }\r\n @if (showCloseButton()) {\r\n <button type=\"button\" class=\"fui-drawer__close\" (click)=\"close()\" [attr.aria-label]=\"intl.closeAriaLabel\">\r\n <fui-icon name=\"x\" size=\"sm\"></fui-icon>\r\n </button>\r\n }\r\n </div>\r\n }\r\n\r\n <div class=\"fui-drawer__content\">\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n <div class=\"fui-drawer__footer\">\r\n <ng-content select=\"[drawerFooter]\"></ng-content>\r\n </div>\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"raintonic-formaui-components-drawer.mjs","sources":["../../../lib/components/drawer/drawer.types.ts","../../../lib/components/drawer/drawer.intl.ts","../../../lib/components/drawer/drawer-title.directive.ts","../../../lib/components/drawer/drawer.component.ts","../../../lib/components/drawer/drawer.component.html","../../../lib/components/drawer/raintonic-formaui-components-drawer.ts"],"sourcesContent":["export type DrawerPosition = 'left' | 'right' | 'top' | 'bottom';\r\nexport type DrawerMode = 'overlay' | 'push';\r\nexport type DrawerSize = 'sm' | 'md' | 'lg' | 'full';\r\n\r\nexport const DRAWER_SIZES: Record<DrawerSize, string> = {\r\n sm: '320px',\r\n md: '480px',\r\n lg: '640px',\r\n full: '100%',\r\n};\r\n","import { Injectable } from '@angular/core';\r\nimport { FuiIntlBase } from '@raintonic/formaui/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class FuiDrawerIntl extends FuiIntlBase {\r\n closeAriaLabel = 'Close drawer';\r\n}\r\n","import { Directive } from '@angular/core';\r\n\r\n/**\r\n * Marker directive for projecting custom markup into the drawer header title\r\n * area. Apply the `fuiDrawerTitle` attribute to the element you want rendered\r\n * as the title. When present, it visually replaces the string `title`, which\r\n * still provides the drawer's accessible name.\r\n *\r\n * @example\r\n * <fui-drawer title=\"Details\">\r\n * <span fuiDrawerTitle>Custom <em>title</em> markup</span>\r\n * </fui-drawer>\r\n */\r\n@Directive({\r\n selector: '[fuiDrawerTitle]',\r\n standalone: true,\r\n host: {\r\n class: 'fui-drawer__title-slot',\r\n },\r\n})\r\nexport class FuiDrawerTitle {}\r\n","import {\r\n Component,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n ViewEncapsulation,\r\n input,\r\n output,\r\n signal,\r\n computed,\r\n contentChild,\r\n effect,\r\n booleanAttribute,\r\n HostListener,\r\n ElementRef,\r\n inject,\r\n viewChild,\r\n Signal,\r\n WritableSignal,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { FuiIconComponent } from '@raintonic/formaui/components/icon';\r\nimport { DrawerPosition, DrawerMode, DrawerSize, DRAWER_SIZES } from './drawer.types';\r\nimport { FuiDrawerIntl } from './drawer.intl';\r\nimport { FuiDrawerTitle } from './drawer-title.directive';\r\n\r\n@Component({\r\n selector: 'fui-drawer',\r\n standalone: true,\r\n imports: [FuiIconComponent],\r\n templateUrl: './drawer.component.html',\r\n styleUrls: ['./drawer.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n host: {\r\n class: 'fui-drawer',\r\n '[class.fui-drawer--open]': '_opened()',\r\n '[class.fui-drawer--left]': 'position() === \"left\"',\r\n '[class.fui-drawer--right]': 'position() === \"right\"',\r\n '[class.fui-drawer--top]': 'position() === \"top\"',\r\n '[class.fui-drawer--bottom]': 'position() === \"bottom\"',\r\n '[class.fui-drawer--overlay]': 'mode() === \"overlay\"',\r\n '[class.fui-drawer--push]': 'mode() === \"push\"',\r\n '[attr.role]': '\"dialog\"',\r\n '[attr.aria-modal]': '_opened() ? \"true\" : null',\r\n '[attr.aria-label]': 'ariaLabel() || (!ariaLabelledBy() ? title() : null)',\r\n '[attr.aria-labelledby]': 'ariaLabelledBy()',\r\n },\r\n})\r\nexport class FuiDrawerComponent {\r\n private readonly _document = inject(DOCUMENT);\r\n readonly intl = inject(FuiDrawerIntl);\r\n private readonly _cdr = inject(ChangeDetectorRef);\r\n\r\n // Inputs\r\n readonly position = input<DrawerPosition>('right');\r\n readonly mode = input<DrawerMode>('overlay');\r\n readonly size = input('md');\r\n readonly opened = input<boolean, unknown>(false, { transform: booleanAttribute });\r\n readonly hasBackdrop = input<boolean, unknown>(true, { transform: booleanAttribute });\r\n readonly closeOnBackdropClick = input<boolean, unknown>(true, { transform: booleanAttribute });\r\n readonly closeOnEsc = input<boolean, unknown>(true, { transform: booleanAttribute });\r\n readonly title = input('');\r\n readonly showCloseButton = input<boolean, unknown>(true, { transform: booleanAttribute });\r\n\r\n /** ARIA label for the drawer, used when no visible title is present */\r\n readonly ariaLabel = input<string | null>(null);\r\n\r\n /** ID of an element that labels the drawer */\r\n readonly ariaLabelledBy = input<string | null>(null);\r\n\r\n // Outputs\r\n readonly openedChange = output<boolean>();\r\n readonly closed = output();\r\n\r\n // Internal state\r\n readonly _opened: WritableSignal<boolean> = signal(false);\r\n readonly _animating: WritableSignal<boolean> = signal(false);\r\n\r\n // Track the last input value to avoid effect re-triggering on programmatic changes\r\n private _lastInputValue = false;\r\n\r\n // Focus management\r\n private _previouslyFocusedElement: HTMLElement | null = null;\r\n\r\n // ViewChild\r\n readonly drawerPanel: Signal<ElementRef<HTMLElement> | undefined> = viewChild<ElementRef<HTMLElement>>('drawerPanel');\r\n\r\n // Projected title detection — true when a [fuiDrawerTitle] element is provided.\r\n private readonly _projectedTitle = contentChild(FuiDrawerTitle);\r\n readonly _hasProjectedTitle: Signal<boolean> = computed(() => !!this._projectedTitle());\r\n\r\n // Computed\r\n readonly _sizeValue: Signal<string> = computed(() => {\r\n const size = this.size();\r\n return DRAWER_SIZES[size as DrawerSize] ?? size;\r\n });\r\n\r\n readonly _isHorizontal: Signal<boolean> = computed(() => {\r\n const pos = this.position();\r\n return pos === 'left' || pos === 'right';\r\n });\r\n\r\n constructor() {\r\n // Sync opened input with internal state — only react when the input actually changes\r\n effect(() => {\r\n const inputValue = this.opened();\r\n if (inputValue !== this._lastInputValue) {\r\n this._lastInputValue = inputValue;\r\n if (inputValue) {\r\n this._openInternal();\r\n } else {\r\n this._closeInternal();\r\n }\r\n }\r\n });\r\n\r\n this.intl.changes.pipe(takeUntilDestroyed()).subscribe(() => {\r\n this._cdr.markForCheck();\r\n });\r\n }\r\n\r\n @HostListener('document:keydown', ['$event'])\r\n onKeydown(event: KeyboardEvent): void {\r\n if (!this._opened()) return;\r\n\r\n if (event.key === 'Escape' && this.closeOnEsc()) {\r\n this.close();\r\n return;\r\n }\r\n\r\n // Focus trap cycling\r\n if (event.key === 'Tab') {\r\n const focusableElements = this._getAllFocusableElements();\r\n if (focusableElements.length === 0) {\r\n event.preventDefault();\r\n return;\r\n }\r\n\r\n const firstFocusable = focusableElements[0];\r\n const lastFocusable = focusableElements[focusableElements.length - 1];\r\n const activeElement = this._document.activeElement;\r\n\r\n if (event.shiftKey) {\r\n if (activeElement === firstFocusable) {\r\n event.preventDefault();\r\n lastFocusable.focus();\r\n }\r\n } else {\r\n if (activeElement === lastFocusable) {\r\n event.preventDefault();\r\n firstFocusable.focus();\r\n }\r\n }\r\n }\r\n }\r\n\r\n open(): void {\r\n if (!this._opened()) {\r\n this._openInternal();\r\n this.openedChange.emit(true);\r\n }\r\n }\r\n\r\n close(): void {\r\n if (this._opened()) {\r\n this._closeInternal();\r\n this.openedChange.emit(false);\r\n this.closed.emit();\r\n }\r\n }\r\n\r\n toggle(): void {\r\n if (this._opened()) {\r\n this.close();\r\n } else {\r\n this.open();\r\n }\r\n }\r\n\r\n private _openInternal(): void {\r\n this._previouslyFocusedElement = document.activeElement as HTMLElement;\r\n this._opened.set(true);\r\n\r\n // Focus the panel after it renders\r\n setTimeout(() => {\r\n this._focusFirstTabbable();\r\n });\r\n }\r\n\r\n private _closeInternal(): void {\r\n this._opened.set(false);\r\n\r\n // Restore focus\r\n if (this._previouslyFocusedElement) {\r\n this._previouslyFocusedElement.focus();\r\n this._previouslyFocusedElement = null;\r\n }\r\n }\r\n\r\n private _focusFirstTabbable(): void {\r\n const panel = this.drawerPanel()?.nativeElement;\r\n if (!panel) return;\r\n\r\n const focusable = this._getAllFocusableElements();\r\n\r\n if (focusable.length > 0) {\r\n focusable[0].focus();\r\n } else {\r\n panel.setAttribute('tabindex', '-1');\r\n panel.focus();\r\n }\r\n }\r\n\r\n private _getAllFocusableElements(): HTMLElement[] {\r\n const panel = this.drawerPanel()?.nativeElement;\r\n if (!panel) return [];\r\n\r\n const selectors = [\r\n 'a[href]',\r\n 'button:not([disabled])',\r\n 'textarea:not([disabled])',\r\n 'input:not([disabled])',\r\n 'select:not([disabled])',\r\n '[tabindex]:not([tabindex=\"-1\"])',\r\n '[contenteditable=\"true\"]',\r\n ].join(',');\r\n\r\n return Array.from(panel.querySelectorAll<HTMLElement>(selectors)).filter((el) => el.offsetParent !== null);\r\n }\r\n}\r\n","@if (_opened() && hasBackdrop()) {\r\n <div class=\"fui-drawer__backdrop\" (click)=\"closeOnBackdropClick() ? close() : null\" aria-hidden=\"true\"></div>\r\n}\r\n\r\n<div class=\"fui-drawer__panel\" [style.--_drawer-size]=\"_sizeValue()\" #drawerPanel tabindex=\"-1\">\r\n @if (title() || showCloseButton() || _hasProjectedTitle()) {\r\n <div class=\"fui-drawer__header\">\r\n @if (_hasProjectedTitle()) {\r\n <div class=\"fui-drawer__title\"><ng-content select=\"[fuiDrawerTitle]\"></ng-content></div>\r\n } @else if (title()) {\r\n <h2 class=\"fui-drawer__title\">{{ title() }}</h2>\r\n }\r\n @if (showCloseButton()) {\r\n <button type=\"button\" class=\"fui-drawer__close\" (click)=\"close()\" [attr.aria-label]=\"intl.closeAriaLabel\">\r\n <fui-icon name=\"x\" size=\"sm\"></fui-icon>\r\n </button>\r\n }\r\n </div>\r\n }\r\n\r\n <div class=\"fui-drawer__content\">\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n <div class=\"fui-drawer__footer\">\r\n <ng-content select=\"[drawerFooter]\"></ng-content>\r\n </div>\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -102,7 +102,7 @@ class DualTierNavTriggerComponent {
|
|
|
102
102
|
</span>
|
|
103
103
|
</button>
|
|
104
104
|
}
|
|
105
|
-
`, isInline: true, styles: [":host{display:contents}.fui-dual-tier-nav__trigger{display:flex;align-items:center;gap:var(--fui-spacing-2);padding:var(--fui-spacing-5) var(--fui-spacing-5);cursor:pointer;-webkit-user-select:none;user-select:none;text-decoration:none;color:var(--fui-text-secondary);background:transparent;border:none;border-radius:var(--fui-radius-xs);font-family:var(--fui-font-sans);font-size:var(--fui-text-sm);font-weight:var(--fui-weight-medium);line-height:var(--fui-leading-normal);text-align:left;white-space:nowrap;outline:none;transition:background-color var(--fui-duration-fast) var(--fui-ease-out),color var(--fui-duration-fast) var(--fui-ease-out)}.fui-dual-tier-nav__trigger:hover:not(.fui-dual-tier-nav__trigger--disabled){color:var(--fui-text-primary)}.fui-dual-tier-nav__trigger:hover:not(.fui-dual-tier-nav__trigger--disabled) fui-icon{background-color:var(--fui-bg-muted)}.fui-dual-tier-nav__trigger:active:not(.fui-dual-tier-nav__trigger--disabled),.fui-dual-tier-nav__trigger--expanded{color:var(--fui-text-primary)}.fui-dual-tier-nav__trigger:active:not(.fui-dual-tier-nav__trigger--disabled) fui-icon,.fui-dual-tier-nav__trigger--expanded fui-icon{background-color:var(--fui-bg-primary);color:var(--fui-text-link)}.fui-dual-tier-nav__trigger--expanded:hover fui-icon{background-color:var(--fui-state-selected-bg)}.fui-dual-tier-nav__trigger:hover{text-decoration:none}.fui-dual-tier-nav__trigger:focus-visible{outline:2px solid var(--fui-state-focus-ring);outline-offset:-2px}.fui-dual-tier-nav__trigger--disabled{color:var(--fui-text-disabled);opacity:var(--fui-state-disabled-opacity);pointer-events:none;cursor:default}.fui-dual-tier-nav__trigger-content{display:flex;flex-direction:column;align-items:stretch;gap:var(--fui-spacing-2);max-width:44px}.fui-dual-tier-nav__trigger-icon{width:44px;height:44px;flex-shrink:0;align-self:center;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--fui-radius-xs)}.fui-dual-tier-nav__trigger-label{max-width:100%;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:center}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: FuiIconComponent, selector: "fui-icon", inputs: ["name", "size", "weight", "color", "ariaLabel", "spin", "pulse"] }, { kind: "directive", type: FuiTooltipDirective, selector: "[fuiTooltip]", inputs: ["fuiTooltip", "fuiTooltipPosition", "fuiTooltipSize", "fuiTooltipTrigger", "fuiTooltipShowDelay", "fuiTooltipHideDelay", "fuiTooltipDisabled", "fuiTooltipMaxWidth", "fuiTooltipOffset", "fuiTooltipArrow", "fuiTooltipShow"], exportAs: ["fuiTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
105
|
+
`, isInline: true, styles: [":host{display:contents}.fui-dual-tier-nav__trigger{display:flex;align-items:center;gap:var(--fui-spacing-2);padding:var(--fui-spacing-5) var(--fui-spacing-5);cursor:pointer;-webkit-user-select:none;user-select:none;text-decoration:none;color:var(--fui-text-secondary);background:transparent;border:none;border-radius:var(--fui-radius-xs);font-family:var(--fui-font-sans);font-size:var(--fui-text-sm);font-weight:var(--fui-weight-medium);line-height:var(--fui-leading-normal);text-align:left;white-space:nowrap;outline:none;transition:background-color var(--fui-duration-fast) var(--fui-ease-out),color var(--fui-duration-fast) var(--fui-ease-out)}.fui-dual-tier-nav__trigger:hover:not(.fui-dual-tier-nav__trigger--disabled){color:var(--fui-text-primary)}.fui-dual-tier-nav__trigger:hover:not(.fui-dual-tier-nav__trigger--disabled) fui-icon{background-color:var(--fui-bg-muted)}.fui-dual-tier-nav__trigger:active:not(.fui-dual-tier-nav__trigger--disabled),.fui-dual-tier-nav__trigger--expanded{color:var(--fui-text-primary)}.fui-dual-tier-nav__trigger:active:not(.fui-dual-tier-nav__trigger--disabled) fui-icon,.fui-dual-tier-nav__trigger--expanded fui-icon{background-color:var(--fui-bg-primary);color:var(--fui-text-link)}.fui-dual-tier-nav__trigger--expanded:hover fui-icon{background-color:var(--fui-state-selected-bg)}.fui-dual-tier-nav__trigger:hover{text-decoration:none}.fui-dual-tier-nav__trigger:focus-visible{outline:2px solid var(--fui-state-focus-ring);outline-offset:-2px}.fui-dual-tier-nav__trigger--disabled{color:var(--fui-text-disabled);opacity:var(--fui-state-disabled-opacity);pointer-events:none;cursor:default}.fui-dual-tier-nav__trigger-content{display:flex;flex-direction:column;align-items:stretch;gap:var(--fui-spacing-2);max-width:44px}.fui-dual-tier-nav__trigger-icon{width:44px;height:44px;flex-shrink:0;align-self:center;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--fui-radius-xs)}.fui-dual-tier-nav__trigger-label{max-width:100%;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:center}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: FuiIconComponent, selector: "fui-icon", inputs: ["name", "size", "weight", "color", "ariaLabel", "spin", "pulse"] }, { kind: "directive", type: FuiTooltipDirective, selector: "[fuiTooltip]", inputs: ["fuiTooltip", "fuiTooltipPosition", "fuiTooltipSize", "fuiTooltipTextAlign", "fuiTooltipTrigger", "fuiTooltipShowDelay", "fuiTooltipHideDelay", "fuiTooltipDisabled", "fuiTooltipMaxWidth", "fuiTooltipOffset", "fuiTooltipArrow", "fuiTooltipShow"], exportAs: ["fuiTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
106
106
|
}
|
|
107
107
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: DualTierNavTriggerComponent, decorators: [{
|
|
108
108
|
type: Component,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raintonic-formaui-components-dual-tier-navigation.mjs","sources":["../../../lib/components/dual-tier-navigation/dual-tier-navigation-trigger.component.ts","../../../lib/components/dual-tier-navigation/dual-tier-navigation-submenu-header.component.ts","../../../lib/components/dual-tier-navigation/dual-tier-navigation-submenu-item.component.ts","../../../lib/components/dual-tier-navigation/dual-tier-navigation-submenu.component.ts","../../../lib/components/dual-tier-navigation/dual-tier-navigation.component.ts","../../../lib/components/dual-tier-navigation/raintonic-formaui-components-dual-tier-navigation.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\r\nimport { RouterLink } from '@angular/router';\r\nimport { FuiIconComponent } from '@raintonic/formaui/components/icon';\r\nimport { MenuItem } from '@raintonic/formaui/core';\r\nimport { FuiTooltipDirective } from '@raintonic/formaui/components/tooltip';\r\n\r\n/**\r\n * Renders a single top-level trigger item for the dual-tier navigation bar.\r\n * Extracted so the main component stays under 200 lines.\r\n */\r\n@Component({\r\n selector: 'fui-dual-tier-nav-trigger',\r\n standalone: true,\r\n imports: [RouterLink, FuiIconComponent, FuiTooltipDirective],\r\n styles: `\r\n :host {\r\n display: contents;\r\n }\r\n .fui-dual-tier-nav__trigger {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--fui-spacing-2);\r\n padding: var(--fui-spacing-5) var(--fui-spacing-5);\r\n cursor: pointer;\r\n user-select: none;\r\n text-decoration: none;\r\n color: var(--fui-text-secondary);\r\n background: transparent;\r\n border: none;\r\n border-radius: var(--fui-radius-xs);\r\n font-family: var(--fui-font-sans);\r\n font-size: var(--fui-text-sm);\r\n font-weight: var(--fui-weight-medium);\r\n line-height: var(--fui-leading-normal);\r\n text-align: left;\r\n white-space: nowrap;\r\n outline: none;\r\n transition:\r\n background-color var(--fui-duration-fast) var(--fui-ease-out),\r\n color var(--fui-duration-fast) var(--fui-ease-out);\r\n }\r\n .fui-dual-tier-nav__trigger:hover:not(.fui-dual-tier-nav__trigger--disabled) {\r\n color: var(--fui-text-primary);\r\n }\r\n .fui-dual-tier-nav__trigger:hover:not(.fui-dual-tier-nav__trigger--disabled) fui-icon {\r\n background-color: var(--fui-bg-muted);\r\n }\r\n .fui-dual-tier-nav__trigger:active:not(.fui-dual-tier-nav__trigger--disabled),\r\n .fui-dual-tier-nav__trigger--expanded {\r\n color: var(--fui-text-primary);\r\n }\r\n .fui-dual-tier-nav__trigger:active:not(.fui-dual-tier-nav__trigger--disabled) fui-icon,\r\n .fui-dual-tier-nav__trigger--expanded fui-icon {\r\n background-color: var(--fui-bg-primary);\r\n color: var(--fui-text-link);\r\n }\r\n .fui-dual-tier-nav__trigger--expanded:hover fui-icon {\r\n background-color: var(--fui-state-selected-bg);\r\n }\r\n .fui-dual-tier-nav__trigger:hover {\r\n text-decoration: none;\r\n }\r\n .fui-dual-tier-nav__trigger:focus-visible {\r\n outline: 2px solid var(--fui-state-focus-ring);\r\n outline-offset: -2px;\r\n }\r\n .fui-dual-tier-nav__trigger--disabled {\r\n color: var(--fui-text-disabled);\r\n opacity: var(--fui-state-disabled-opacity);\r\n pointer-events: none;\r\n cursor: default;\r\n }\r\n\r\n .fui-dual-tier-nav__trigger-content {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: stretch;\r\n gap: var(--fui-spacing-2);\r\n max-width: 44px;\r\n }\r\n .fui-dual-tier-nav__trigger-icon {\r\n width: 44px;\r\n height: 44px;\r\n flex-shrink: 0;\r\n align-self: center;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n border-radius: var(--fui-radius-xs);\r\n }\r\n .fui-dual-tier-nav__trigger-label {\r\n max-width: 100%;\r\n min-width: 0;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n text-align: center;\r\n }\r\n `,\r\n template: `\r\n @if (hasChildren()) {\r\n <button\r\n class=\"fui-dual-tier-nav__trigger\"\r\n type=\"button\"\r\n role=\"menuitem\"\r\n [class.fui-dual-tier-nav__trigger--expanded]=\"isExpanded()\"\r\n [class.fui-dual-tier-nav__trigger--disabled]=\"item().disabled\"\r\n [attr.aria-haspopup]=\"true\"\r\n [attr.aria-expanded]=\"isExpanded()\"\r\n [attr.aria-controls]=\"isExpanded() ? 'fui-dtn-flyout-' + flyoutId() : null\"\r\n [disabled]=\"item().disabled\"\r\n (click)=\"onClick($event)\"\r\n (keydown)=\"onKeydown($event)\"\r\n [fuiTooltip]=\"item().label ?? ''\"\r\n >\r\n <div class=\"fui-dual-tier-nav__trigger-content\">\r\n @if (item().icon) {\r\n <fui-icon class=\"fui-dual-tier-nav__trigger-icon\" [name]=\"item().icon ?? ''\" size=\"md\" aria-hidden=\"true\" />\r\n }\r\n <span class=\"fui-dual-tier-nav__trigger-label\">{{ item().label }}</span>\r\n </div>\r\n </button>\r\n } @else if (item().routerLink) {\r\n <a\r\n class=\"fui-dual-tier-nav__trigger\"\r\n role=\"menuitem\"\r\n [class.fui-dual-tier-nav__trigger--disabled]=\"item().disabled\"\r\n [attr.aria-disabled]=\"item().disabled || null\"\r\n [routerLink]=\"item().routerLink\"\r\n [queryParams]=\"item().queryParams || undefined\"\r\n [fragment]=\"item().fragment || undefined\"\r\n [target]=\"item().target\"\r\n (click)=\"onClick($event)\"\r\n (keydown)=\"onKeydown($event)\"\r\n [fuiTooltip]=\"item().label ?? ''\"\r\n >\r\n <span class=\"fui-dual-tier-nav__trigger-content\">\r\n @if (item().icon) {\r\n <fui-icon class=\"fui-dual-tier-nav__trigger-icon\" [name]=\"item().icon ?? ''\" size=\"md\" aria-hidden=\"true\" />\r\n }\r\n <span class=\"fui-dual-tier-nav__trigger-label\">{{ item().label }}</span>\r\n </span>\r\n </a>\r\n } @else {\r\n <button\r\n class=\"fui-dual-tier-nav__trigger\"\r\n type=\"button\"\r\n role=\"menuitem\"\r\n [class.fui-dual-tier-nav__trigger--disabled]=\"item().disabled\"\r\n [attr.aria-disabled]=\"item().disabled || null\"\r\n [title]=\"item().title\"\r\n [disabled]=\"item().disabled\"\r\n (click)=\"onClick($event)\"\r\n (keydown)=\"onKeydown($event)\"\r\n [fuiTooltip]=\"item().label ?? ''\"\r\n >\r\n <span class=\"fui-dual-tier-nav__trigger-content\">\r\n @if (item().icon) {\r\n <fui-icon class=\"fui-dual-tier-nav__trigger-icon\" [name]=\"item().icon ?? ''\" size=\"md\" aria-hidden=\"true\" />\r\n }\r\n <span class=\"fui-dual-tier-nav__trigger-label\">{{ item().label }}</span>\r\n </span>\r\n </button>\r\n }\r\n `,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: { class: 'fui-dual-tier-nav__bar-item', role: 'none' },\r\n})\r\nexport class DualTierNavTriggerComponent {\r\n readonly item = input.required<MenuItem>();\r\n readonly isExpanded = input(false);\r\n readonly flyoutId = input('');\r\n readonly itemClick = output<MenuItem>();\r\n readonly toggle = output<Event>();\r\n readonly keydown = output<KeyboardEvent>();\r\n\r\n readonly hasChildren = computed(() => !!this.item().items?.length);\r\n\r\n onClick(event: Event): void {\r\n const it = this.item();\r\n if (it.disabled) {\r\n event.preventDefault();\r\n return;\r\n }\r\n if (this.hasChildren()) {\r\n this.toggle.emit(event);\r\n return;\r\n }\r\n it.command?.(event);\r\n this.itemClick.emit(it);\r\n }\r\n\r\n onKeydown(event: KeyboardEvent): void {\r\n if (this.item().disabled) {\r\n return;\r\n }\r\n // bubble up and handle in dual-tier-navigation\r\n this.keydown.emit(event);\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\r\nimport { FuiIconComponent } from '@raintonic/formaui/components/icon';\r\n\r\n@Component({\r\n selector: 'fui-dual-tier-nav-submenu-header',\r\n standalone: true,\r\n imports: [FuiIconComponent],\r\n styles: [\r\n `\r\n .fui-dtn-submenu__header {\r\n display: flex;\r\n justify-content: space-between;\r\n margin-top: var(--fui-spacing-8);\r\n align-items: center;\r\n padding: 0 var(--fui-spacing-2);\r\n }\r\n .fui-dtn-submenu__title {\r\n margin: 0;\r\n font-family: var(--fui-font-sans);\r\n font-size: var(--fui-text-base);\r\n font-weight: var(--fui-weight-semibold);\r\n line-height: var(--fui-leading-normal);\r\n letter-spacing: var(--fui-tracking-wide);\r\n color: var(--fui-text-primary);\r\n }\r\n .fui-dtn-submenu__close {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n background: none;\r\n border: none;\r\n cursor: pointer;\r\n padding: 8px;\r\n border-radius: var(--fui-radius-sm);\r\n color: var(--fui-text-secondary);\r\n outline: none;\r\n transition:\r\n background-color var(--fui-duration-fast) var(--fui-ease-out),\r\n color var(--fui-duration-fast) var(--fui-ease-out);\r\n }\r\n .fui-dtn-submenu__close:hover {\r\n background-color: var(--fui-bg-muted);\r\n color: var(--fui-text-primary);\r\n }\r\n .fui-dtn-submenu__close:focus-visible {\r\n outline: 2px solid var(--fui-state-focus-ring);\r\n outline-offset: -2px;\r\n }\r\n `,\r\n ],\r\n template: `\r\n <div class=\"fui-dtn-submenu__header\">\r\n <h6 class=\"fui-dtn-submenu__title\">{{ title() }}</h6>\r\n @if (closable()) {\r\n <button type=\"button\" class=\"fui-dtn-submenu__close\" aria-label=\"Close menu\" (click)=\"close.emit()\">\r\n <fui-icon name=\"caret-double-left\" size=\"sm\" aria-hidden=\"true\" />\r\n </button>\r\n }\r\n </div>\r\n `,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: { class: 'fui-dtn-submenu__header-wrapper' },\r\n})\r\nexport class DualTierNavSubmenuHeaderComponent {\r\n readonly title = input.required<string>();\r\n readonly closable = input(true);\r\n readonly close = output();\r\n}\r\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\r\nimport { RouterLink, RouterLinkActive } from '@angular/router';\r\nimport { FuiIconComponent } from '@raintonic/formaui/components/icon';\r\nimport { MenuItem } from '@raintonic/formaui/core';\r\n\r\n@Component({\r\n selector: 'fui-dual-tier-nav-submenu-item',\r\n standalone: true,\r\n imports: [RouterLink, RouterLinkActive, FuiIconComponent],\r\n styles: [\r\n `\r\n :host {\r\n display: flex;\r\n flex-direction: column;\r\n }\r\n\r\n .fui-dtn-item {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--fui-spacing-6);\r\n padding: var(--fui-spacing-4) var(--fui-spacing-6) var(--fui-spacing-4) var(--fui-spacing-3);\r\n cursor: pointer;\r\n user-select: none;\r\n text-decoration: none;\r\n color: var(--fui-text-secondary);\r\n background: transparent;\r\n border: none;\r\n border-radius: var(--fui-radius-sm);\r\n font-family: var(--fui-font-sans);\r\n font-size: var(--fui-text-base);\r\n font-weight: var(--fui-weight-medium);\r\n line-height: var(--fui-leading-normal);\r\n text-align: left;\r\n width: 100%;\r\n box-sizing: border-box;\r\n outline: none;\r\n transition:\r\n background-color var(--fui-duration-fast) var(--fui-ease-out),\r\n color var(--fui-duration-fast) var(--fui-ease-out);\r\n }\r\n .fui-dtn-item:hover {\r\n background-color: var(--fui-bg-muted);\r\n text-decoration: none;\r\n }\r\n .fui-dtn-item:active {\r\n background-color: var(--fui-bg-primary);\r\n }\r\n .fui-dtn-item:focus-visible {\r\n outline: 2px solid var(--fui-state-focus-ring);\r\n outline-offset: -2px;\r\n }\r\n .fui-dtn-item--active {\r\n color: var(--fui-text-primary);\r\n background-color: var(--fui-state-selected-bg);\r\n }\r\n .fui-dtn-item--disabled {\r\n color: var(--fui-text-disabled);\r\n opacity: var(--fui-state-disabled-opacity);\r\n pointer-events: none;\r\n cursor: default;\r\n }\r\n\r\n .fui-dtn-item--parent-expanded {\r\n color: var(--fui-text-primary);\r\n background-color: var(--fui-bg-muted);\r\n }\r\n\r\n .fui-dtn-item__label {\r\n flex: 1;\r\n min-width: 0;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n\r\n .fui-dtn-item__chevron {\r\n flex-shrink: 0;\r\n color: inherit;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n transition: transform var(--fui-duration-base) var(--fui-ease-out);\r\n }\r\n .fui-dtn-item__chevron--expanded {\r\n transform: rotate(90deg);\r\n }\r\n `,\r\n ],\r\n template: `\r\n @if (hasChildren()) {\r\n <button\r\n class=\"fui-dtn-item fui-dtn-item--parent\"\r\n type=\"button\"\r\n role=\"menuitem\"\r\n [class.fui-dtn-item--disabled]=\"item().disabled\"\r\n [class.fui-dtn-item--parent-expanded]=\"isExpanded()\"\r\n [attr.aria-haspopup]=\"true\"\r\n [attr.aria-expanded]=\"isExpanded()\"\r\n [disabled]=\"item().disabled\"\r\n (click)=\"_onClick($event)\"\r\n (keydown)=\"_onKeydown($event)\"\r\n >\r\n <span class=\"fui-dtn-item__label\">{{ item().label }}</span>\r\n <fui-icon\r\n class=\"fui-dtn-item__chevron\"\r\n [class.fui-dtn-item__chevron--expanded]=\"isExpanded()\"\r\n name=\"caret-right\"\r\n size=\"sm\"\r\n aria-hidden=\"true\"\r\n />\r\n </button>\r\n } @else if (item().routerLink) {\r\n <a\r\n class=\"fui-dtn-item\"\r\n role=\"menuitem\"\r\n routerLinkActive=\"fui-dtn-item--active\"\r\n [class.fui-dtn-item--disabled]=\"item().disabled\"\r\n [tabindex]=\"item().disabled ? -1 : 0\"\r\n [attr.aria-disabled]=\"item().disabled || null\"\r\n [routerLink]=\"item().routerLink\"\r\n [queryParams]=\"item().queryParams ?? undefined\"\r\n [fragment]=\"item().fragment ?? undefined\"\r\n [target]=\"item().target\"\r\n [title]=\"item().title\"\r\n (click)=\"_onClick($event)\"\r\n (keydown)=\"_onKeydown($event)\"\r\n >\r\n <span class=\"fui-dtn-item__label\">{{ item().label }}</span>\r\n </a>\r\n } @else {\r\n <button\r\n class=\"fui-dtn-item\"\r\n type=\"button\"\r\n role=\"menuitem\"\r\n [class.fui-dtn-item--disabled]=\"item().disabled\"\r\n [tabindex]=\"item().disabled ? -1 : 0\"\r\n [attr.aria-disabled]=\"item().disabled || null\"\r\n [title]=\"item().title\"\r\n [disabled]=\"item().disabled\"\r\n (click)=\"_onClick($event)\"\r\n (keydown)=\"_onKeydown($event)\"\r\n >\r\n <span class=\"fui-dtn-item__label\">{{ item().label }}</span>\r\n </button>\r\n }\r\n `,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: { role: 'none' },\r\n})\r\nexport class DualTierNavSubmenuItemComponent {\r\n readonly item = input.required<MenuItem>();\r\n readonly isExpanded = input(false);\r\n readonly clickItem = output<MenuItem>();\r\n readonly toggleExpand = output<{ item: MenuItem; sourceEl?: HTMLElement }>();\r\n readonly keydown = output<KeyboardEvent>();\r\n\r\n hasChildren(): boolean {\r\n return !!this.item()?.items?.length;\r\n }\r\n\r\n _onClick(event: Event): void {\r\n const it = this.item();\r\n if (it?.disabled) {\r\n event.preventDefault();\r\n return;\r\n }\r\n if (this.hasChildren()) {\r\n this.toggleExpand.emit({ item: it, sourceEl: event.currentTarget as HTMLElement | undefined });\r\n } else {\r\n if (it.command) it.command(event);\r\n this.clickItem.emit(it);\r\n }\r\n }\r\n\r\n _onKeydown(event: KeyboardEvent): void {\r\n if (this.item()?.disabled) return;\r\n switch (event.key) {\r\n case 'ArrowRight':\r\n event.preventDefault();\r\n if (this.hasChildren())\r\n this.toggleExpand.emit({ item: this.item(), sourceEl: event.currentTarget as HTMLElement | undefined });\r\n break;\r\n case 'ArrowLeft':\r\n event.preventDefault();\r\n // Delegate to parent: collapse if expanded, close panel otherwise\r\n this.keydown.emit(event);\r\n break;\r\n case 'ArrowDown':\r\n case 'ArrowUp':\r\n // Let the list-level handler navigate between items\r\n break;\r\n case 'Enter':\r\n case ' ':\r\n if (this.hasChildren()) {\r\n event.preventDefault();\r\n this.toggleExpand.emit({ item: this.item(), sourceEl: event.currentTarget as HTMLElement | undefined });\r\n }\r\n break;\r\n default:\r\n this.keydown.emit(event);\r\n }\r\n }\r\n}\r\n","import {\r\n afterNextRender,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n Injector,\r\n input,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport { MenuItem } from '@raintonic/formaui/core';\r\nimport { DualTierNavSubmenuHeaderComponent } from './dual-tier-navigation-submenu-header.component';\r\nimport { DualTierNavSubmenuItemComponent } from './dual-tier-navigation-submenu-item.component';\r\n\r\n@Component({\r\n selector: 'fui-dual-tier-nav-submenu',\r\n standalone: true,\r\n imports: [DualTierNavSubmenuHeaderComponent, DualTierNavSubmenuItemComponent],\r\n styles: [\r\n `\r\n :host {\r\n display: contents;\r\n }\r\n .fui-dtn-submenu {\r\n display: flex;\r\n flex-direction: column;\r\n padding-top: var(--fui-spacing-2);\r\n padding-left: var(--fui-spacing-4);\r\n }\r\n .fui-dtn-submenu__list {\r\n display: flex;\r\n flex-direction: column;\r\n list-style: none;\r\n margin: 0;\r\n gap: var(--fui-spacing-2);\r\n }\r\n `,\r\n `\r\n @keyframes fui-dtn-nested-enter {\r\n from {\r\n opacity: 0;\r\n max-height: 0;\r\n }\r\n to {\r\n opacity: 1;\r\n max-height: 500px;\r\n }\r\n }\r\n @keyframes fui-dtn-nested-leave {\r\n from {\r\n opacity: 1;\r\n max-height: 500px;\r\n }\r\n to {\r\n opacity: 0;\r\n max-height: 0;\r\n }\r\n }\r\n .fui-dtn-nested--enter {\r\n animation: fui-dtn-nested-enter var(--fui-duration-moderate) var(--fui-ease-out);\r\n overflow: hidden;\r\n }\r\n .fui-dtn-nested--leave {\r\n animation: fui-dtn-nested-leave var(--fui-duration-fast) var(--fui-ease-in);\r\n overflow: hidden;\r\n }\r\n `,\r\n ],\r\n template: `\r\n <div class=\"fui-dtn-submenu\">\r\n @if (showHeader()) {\r\n <fui-dual-tier-nav-submenu-header [title]=\"title()\" [closable]=\"closable()\" (close)=\"_onClose()\" />\r\n }\r\n <ul class=\"fui-dtn-submenu__list\" role=\"menu\" aria-orientation=\"vertical\" (keydown)=\"_onListKeydown($event)\">\r\n @for (item of visibleItems(); track item.id) {\r\n <li role=\"none\">\r\n <fui-dual-tier-nav-submenu-item\r\n [item]=\"item\"\r\n [isExpanded]=\"_isExpanded(item)\"\r\n (clickItem)=\"_onClickItem($event)\"\r\n (toggleExpand)=\"_onToggleExpand($event.item, $event.sourceEl)\"\r\n (keydown)=\"_onItemKeydown($event, item)\"\r\n />\r\n @if (_hasChildren(item) && _isExpanded(item)) {\r\n <div\r\n class=\"fui-dtn-submenu__nested\"\r\n animate.enter=\"fui-dtn-nested--enter\"\r\n animate.leave=\"fui-dtn-nested--leave\"\r\n >\r\n <fui-dual-tier-nav-submenu\r\n [title]=\"item.label ?? ''\"\r\n [items]=\"item.items ?? []\"\r\n [showHeader]=\"false\"\r\n [closable]=\"false\"\r\n (itemClick)=\"itemClick.emit($event)\"\r\n (closePanel)=\"closePanel.emit()\"\r\n />\r\n </div>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n `,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class DualTierNavSubmenuComponent {\r\n private readonly _injector = inject(Injector);\r\n\r\n readonly title = input.required<string>();\r\n readonly items = input<MenuItem[]>([]);\r\n readonly showHeader = input(true);\r\n readonly closable = input(true);\r\n readonly itemClick = output<MenuItem>();\r\n readonly closePanel = output();\r\n\r\n readonly visibleItems = computed(() => this.items().filter((it) => it.visible !== false));\r\n readonly _expanded = signal(new Set<string>());\r\n\r\n constructor() {\r\n effect(() => {\r\n const expanded = new Set<string>();\r\n const walk = (list: MenuItem[]) => {\r\n for (const it of list) {\r\n if (it.expanded && it.items?.length) expanded.add(it.id!);\r\n if (it.items) walk(it.items);\r\n }\r\n };\r\n walk(this.items());\r\n this._expanded.set(expanded);\r\n });\r\n }\r\n\r\n _hasChildren(item: MenuItem): boolean {\r\n return !!item.items?.length;\r\n }\r\n\r\n _isExpanded(item: MenuItem): boolean {\r\n return this._hasChildren(item) && this._expanded().has(item.id!);\r\n }\r\n\r\n _onClose(): void {\r\n this.closePanel.emit();\r\n }\r\n\r\n _onClickItem(item: MenuItem): void {\r\n this.itemClick.emit(item);\r\n }\r\n\r\n _onToggleExpand(item: MenuItem, toggleSourceEl?: HTMLElement): void {\r\n const id = item.id;\r\n if (!id) return;\r\n const wasExpanded = this._expanded().has(id);\r\n this._expanded.update((s) => {\r\n const next = new Set(s);\r\n if (next.has(id)) next.delete(id);\r\n else next.add(id);\r\n return next;\r\n });\r\n // ponytail: afterNextRender to wait for the nested submenu to be rendered.\r\n // Ceiling: if the nested submenu has no visible items, focus stays on the toggle.\r\n if (!wasExpanded && toggleSourceEl) {\r\n afterNextRender(\r\n () => {\r\n const li = toggleSourceEl.closest('li');\r\n const selector = '.fui-dtn-item:not(.fui-dtn-item--disabled)';\r\n const nested = li?.querySelector<HTMLElement>(':scope > .fui-dtn-submenu__nested ' + selector);\r\n nested?.focus();\r\n },\r\n { injector: this._injector },\r\n );\r\n }\r\n }\r\n\r\n _onListKeydown(event: KeyboardEvent): void {\r\n if (!['ArrowDown', 'ArrowUp', 'Home', 'End'].includes(event.key)) return;\r\n\r\n event.stopPropagation();\r\n\r\n const listEl = (event.currentTarget as HTMLElement)?.closest('ul');\r\n if (!listEl) return;\r\n\r\n // ponytail: querySelectorAll on every keydown — acceptable for small submenu lists (<50 items).\r\n // Upgrade path: precompute items list on mutation and reuse.\r\n const items = Array.from(\r\n listEl.querySelectorAll<HTMLElement>(':scope > li > fui-dual-tier-nav-submenu-item > .fui-dtn-item'),\r\n );\r\n const idx = items.indexOf(document.activeElement as HTMLElement);\r\n\r\n switch (event.key) {\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n this._focusItem(items, idx + 1, 1);\r\n break;\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n this._focusItem(items, idx - 1, -1);\r\n break;\r\n case 'Home':\r\n event.preventDefault();\r\n this._focusItem(items, 0, 1);\r\n break;\r\n case 'End':\r\n event.preventDefault();\r\n this._focusItem(items, items.length - 1, -1);\r\n break;\r\n }\r\n }\r\n\r\n _onItemKeydown(event: KeyboardEvent, item: MenuItem): void {\r\n switch (event.key) {\r\n case 'ArrowLeft':\r\n event.preventDefault();\r\n if (this._hasChildren(item) && this._isExpanded(item)) {\r\n this._expanded.update((s) => {\r\n const next = new Set(s);\r\n next.delete(item.id!);\r\n return next;\r\n });\r\n } else {\r\n this.closePanel.emit();\r\n }\r\n break;\r\n }\r\n }\r\n\r\n private _focusItem(items: HTMLElement[], start: number, step: 1 | -1): void {\r\n let i = start;\r\n while (i >= 0 && i < items.length) {\r\n if (!items[i].classList.contains('fui-dtn-item--disabled')) {\r\n items[i].focus();\r\n return;\r\n }\r\n i += step;\r\n }\r\n }\r\n}\r\n","import {\r\n afterNextRender,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n inject,\r\n Injector,\r\n input,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport { MenuItem } from '@raintonic/formaui/core';\r\nimport { DualTierNavTriggerComponent } from './dual-tier-navigation-trigger.component';\r\nimport { DualTierNavSubmenuComponent } from './dual-tier-navigation-submenu.component';\r\n\r\n@Component({\r\n selector: 'fui-dual-tier-navigation',\r\n standalone: true,\r\n imports: [DualTierNavTriggerComponent, DualTierNavSubmenuComponent],\r\n styles: `\r\n :host {\r\n --fui-dtn-bg: var(--fui-bg-subtle);\r\n --fui-dtn-flyout-width: 200px;\r\n\r\n display: flex;\r\n flex-direction: row;\r\n background-color: var(--fui-dtn-bg);\r\n box-sizing: border-box;\r\n }\r\n .fui-dual-tier-nav__bar {\r\n display: flex;\r\n flex-direction: column;\r\n list-style: none;\r\n margin: 0;\r\n padding: var(--fui-spacing-4) var(--fui-spacing-4);\r\n gap: var(--fui-spacing-2);\r\n flex-shrink: 0;\r\n border-right: 1px solid var(--fui-border-default);\r\n }\r\n .fui-dual-tier-nav__flyout {\r\n display: flex;\r\n flex-direction: column;\r\n width: 0;\r\n flex-shrink: 0;\r\n background: var(--fui-dtn-bg);\r\n clip-path: inset(0 100% 0 0);\r\n overflow: hidden;\r\n transition:\r\n width var(--fui-duration-moderate) cubic-bezier(0.16, 1, 0.3, 1),\r\n clip-path var(--fui-duration-moderate) cubic-bezier(0.16, 1, 0.3, 1);\r\n }\r\n .fui-dual-tier-nav__flyout--open {\r\n width: var(--fui-dtn-flyout-width);\r\n clip-path: inset(0 0 0 0);\r\n overflow-y: auto;\r\n padding-right: var(--fui-spacing-2);\r\n }\r\n\r\n @keyframes fui-dtn-flyout-content-enter {\r\n from {\r\n opacity: 0;\r\n }\r\n to {\r\n opacity: 1;\r\n }\r\n }\r\n @keyframes fui-dtn-flyout-content-leave {\r\n from {\r\n opacity: 1;\r\n }\r\n to {\r\n opacity: 0;\r\n }\r\n }\r\n .fui-dtn-flyout-content--enter {\r\n animation: fui-dtn-flyout-content-enter var(--fui-duration-fast) var(--fui-ease-out);\r\n }\r\n .fui-dtn-flyout-content--leave {\r\n animation: fui-dtn-flyout-content-leave var(--fui-duration-fast) var(--fui-ease-in);\r\n }\r\n `,\r\n template: `\r\n <ul class=\"fui-dual-tier-nav__bar\" role=\"menu\" aria-orientation=\"vertical\">\r\n @for (item of _readyItems(); track item.id) {\r\n <fui-dual-tier-nav-trigger\r\n [item]=\"item\"\r\n [isExpanded]=\"_expandedId() === item.id\"\r\n [flyoutId]=\"item.id ?? ''\"\r\n (toggle)=\"_onToggle($event, item)\"\r\n (itemClick)=\"_onItemClick($event)\"\r\n (keydown)=\"_onTriggerKeydown($event, item)\"\r\n />\r\n }\r\n </ul>\r\n <div\r\n class=\"fui-dual-tier-nav__flyout\"\r\n role=\"menu\"\r\n [class.fui-dual-tier-nav__flyout--open]=\"!!_expandedItem()\"\r\n [id]=\"_expandedItem() ? 'fui-dtn-flyout-' + (_expandedItem()!.id ?? '') : null\"\r\n [attr.aria-label]=\"_expandedItem()?.label ?? null\"\r\n >\r\n @if (_expandedItem(); as expanded) {\r\n <div animate.enter=\"fui-dtn-flyout-content--enter\" animate.leave=\"fui-dtn-flyout-content--leave\">\r\n <fui-dual-tier-nav-submenu\r\n [title]=\"expanded.label ?? ''\"\r\n [items]=\"expanded.items ?? []\"\r\n (itemClick)=\"_onItemClick($event)\"\r\n (closePanel)=\"_closeFlyout()\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n `,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n role: 'navigation',\r\n '[attr.aria-label]': 'ariaLabel()',\r\n class: 'fui-dual-tier-navigation',\r\n },\r\n})\r\nexport class FuiDualTierNavigationComponent {\r\n private readonly _injector = inject(Injector);\r\n\r\n readonly items = input<MenuItem[]>([]);\r\n readonly ariaLabel = input('Dual tier navigation');\r\n readonly itemClick = output<MenuItem>();\r\n\r\n readonly _readyItems = computed(() => {\r\n let counter = 0;\r\n const assignIds = (list: readonly MenuItem[]): MenuItem[] =>\r\n list\r\n .filter((it) => it.visible !== false)\r\n .map((it) => {\r\n const copy = { ...it, id: it.id ?? `fui-dtn-${++counter}` };\r\n if (copy.items) {\r\n return { ...copy, items: assignIds(copy.items) };\r\n }\r\n return copy;\r\n });\r\n\r\n return assignIds(this.items());\r\n });\r\n\r\n readonly _expandedId = signal<string | undefined>(undefined);\r\n\r\n readonly _expandedItem = computed(() => {\r\n const id = this._expandedId();\r\n if (!id) return undefined;\r\n return this._findItemById(this._readyItems(), id);\r\n });\r\n\r\n private _findItemById(items: readonly MenuItem[], id: string): MenuItem | undefined {\r\n for (const item of items) {\r\n if (item.id === id) return item;\r\n if (item.items?.length) {\r\n const found = this._findItemById(item.items, id);\r\n if (found) return found;\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n _closeFlyout(): void {\r\n const activeId = this._expandedId();\r\n this._expandedId.set(undefined);\r\n if (activeId) {\r\n afterNextRender(\r\n () => {\r\n document.querySelector<HTMLElement>('[aria-controls=\"fui-dtn-flyout-' + activeId + '\"]')?.focus();\r\n },\r\n { injector: this._injector },\r\n );\r\n }\r\n }\r\n\r\n _onItemClick(item: MenuItem): void {\r\n this.itemClick.emit(item);\r\n }\r\n\r\n _onToggle(event: Event, item: MenuItem): void {\r\n event.stopPropagation();\r\n this._expandedId.update((current) => (current === item.id ? undefined : item.id));\r\n this.itemClick.emit(item);\r\n }\r\n\r\n _onTriggerKeydown(event: KeyboardEvent, item: MenuItem): void {\r\n const triggerEl = (event.currentTarget as HTMLElement | null)?.closest('[role=\"menuitem\"]') as HTMLElement | null;\r\n if (!triggerEl) return;\r\n\r\n const barEl = triggerEl.closest('.fui-dual-tier-nav__bar');\r\n if (!barEl) return;\r\n\r\n // ponytail: querySelectorAll on every keydown — acceptable for small trigger lists (<20 items).\r\n // Upgrade path: precompute triggers list on mutation and reuse.\r\n const triggers = Array.from(barEl.querySelectorAll<HTMLElement>('[role=\"menuitem\"]'));\r\n const idx = triggers.indexOf(triggerEl);\r\n\r\n const closeFlyout = () => {\r\n if (this._expandedId()) {\r\n this._expandedId.set(undefined);\r\n triggerEl.focus();\r\n }\r\n };\r\n\r\n const focusFirstFlyoutItem = () => {\r\n afterNextRender(\r\n () => {\r\n const selector = '.fui-dtn-item:not(.fui-dtn-item--disabled)';\r\n const el = document.getElementById(`fui-dtn-flyout-${item.id}`)?.querySelector<HTMLElement>(selector);\r\n el?.focus();\r\n },\r\n { injector: this._injector },\r\n );\r\n };\r\n\r\n switch (event.key) {\r\n case ' ':\r\n case 'Enter':\r\n case 'ArrowRight':\r\n event.preventDefault();\r\n if (item.items?.length) {\r\n this._expandedId.set(item.id);\r\n focusFirstFlyoutItem();\r\n } else {\r\n // Leaf item: forward click-like activation\r\n if (item.command) item.command(event);\r\n this.itemClick.emit(item);\r\n }\r\n break;\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n triggers[idx + 1]?.focus();\r\n break;\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n triggers[idx - 1]?.focus();\r\n break;\r\n case 'ArrowLeft':\r\n case 'Escape':\r\n event.preventDefault();\r\n closeFlyout();\r\n break;\r\n case 'Home':\r\n event.preventDefault();\r\n triggers[0]?.focus();\r\n break;\r\n case 'End':\r\n event.preventDefault();\r\n triggers[triggers.length - 1]?.focus();\r\n break;\r\n }\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"raintonic-formaui-components-dual-tier-navigation.mjs","sources":["../../../lib/components/dual-tier-navigation/dual-tier-navigation-trigger.component.ts","../../../lib/components/dual-tier-navigation/dual-tier-navigation-submenu-header.component.ts","../../../lib/components/dual-tier-navigation/dual-tier-navigation-submenu-item.component.ts","../../../lib/components/dual-tier-navigation/dual-tier-navigation-submenu.component.ts","../../../lib/components/dual-tier-navigation/dual-tier-navigation.component.ts","../../../lib/components/dual-tier-navigation/raintonic-formaui-components-dual-tier-navigation.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\r\nimport { RouterLink } from '@angular/router';\r\nimport { FuiIconComponent } from '@raintonic/formaui/components/icon';\r\nimport { MenuItem } from '@raintonic/formaui/core';\r\nimport { FuiTooltipDirective } from '@raintonic/formaui/components/tooltip';\r\n\r\n/**\r\n * Renders a single top-level trigger item for the dual-tier navigation bar.\r\n * Extracted so the main component stays under 200 lines.\r\n */\r\n@Component({\r\n selector: 'fui-dual-tier-nav-trigger',\r\n standalone: true,\r\n imports: [RouterLink, FuiIconComponent, FuiTooltipDirective],\r\n styles: `\r\n :host {\r\n display: contents;\r\n }\r\n .fui-dual-tier-nav__trigger {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--fui-spacing-2);\r\n padding: var(--fui-spacing-5) var(--fui-spacing-5);\r\n cursor: pointer;\r\n user-select: none;\r\n text-decoration: none;\r\n color: var(--fui-text-secondary);\r\n background: transparent;\r\n border: none;\r\n border-radius: var(--fui-radius-xs);\r\n font-family: var(--fui-font-sans);\r\n font-size: var(--fui-text-sm);\r\n font-weight: var(--fui-weight-medium);\r\n line-height: var(--fui-leading-normal);\r\n text-align: left;\r\n white-space: nowrap;\r\n outline: none;\r\n transition:\r\n background-color var(--fui-duration-fast) var(--fui-ease-out),\r\n color var(--fui-duration-fast) var(--fui-ease-out);\r\n }\r\n .fui-dual-tier-nav__trigger:hover:not(.fui-dual-tier-nav__trigger--disabled) {\r\n color: var(--fui-text-primary);\r\n }\r\n .fui-dual-tier-nav__trigger:hover:not(.fui-dual-tier-nav__trigger--disabled) fui-icon {\r\n background-color: var(--fui-bg-muted);\r\n }\r\n .fui-dual-tier-nav__trigger:active:not(.fui-dual-tier-nav__trigger--disabled),\r\n .fui-dual-tier-nav__trigger--expanded {\r\n color: var(--fui-text-primary);\r\n }\r\n .fui-dual-tier-nav__trigger:active:not(.fui-dual-tier-nav__trigger--disabled) fui-icon,\r\n .fui-dual-tier-nav__trigger--expanded fui-icon {\r\n background-color: var(--fui-bg-primary);\r\n color: var(--fui-text-link);\r\n }\r\n .fui-dual-tier-nav__trigger--expanded:hover fui-icon {\r\n background-color: var(--fui-state-selected-bg);\r\n }\r\n .fui-dual-tier-nav__trigger:hover {\r\n text-decoration: none;\r\n }\r\n .fui-dual-tier-nav__trigger:focus-visible {\r\n outline: 2px solid var(--fui-state-focus-ring);\r\n outline-offset: -2px;\r\n }\r\n .fui-dual-tier-nav__trigger--disabled {\r\n color: var(--fui-text-disabled);\r\n opacity: var(--fui-state-disabled-opacity);\r\n pointer-events: none;\r\n cursor: default;\r\n }\r\n\r\n .fui-dual-tier-nav__trigger-content {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: stretch;\r\n gap: var(--fui-spacing-2);\r\n max-width: 44px;\r\n }\r\n .fui-dual-tier-nav__trigger-icon {\r\n width: 44px;\r\n height: 44px;\r\n flex-shrink: 0;\r\n align-self: center;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n border-radius: var(--fui-radius-xs);\r\n }\r\n .fui-dual-tier-nav__trigger-label {\r\n max-width: 100%;\r\n min-width: 0;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n text-align: center;\r\n }\r\n `,\r\n template: `\r\n @if (hasChildren()) {\r\n <button\r\n class=\"fui-dual-tier-nav__trigger\"\r\n type=\"button\"\r\n role=\"menuitem\"\r\n [class.fui-dual-tier-nav__trigger--expanded]=\"isExpanded()\"\r\n [class.fui-dual-tier-nav__trigger--disabled]=\"item().disabled\"\r\n [attr.aria-haspopup]=\"true\"\r\n [attr.aria-expanded]=\"isExpanded()\"\r\n [attr.aria-controls]=\"isExpanded() ? 'fui-dtn-flyout-' + flyoutId() : null\"\r\n [disabled]=\"item().disabled\"\r\n (click)=\"onClick($event)\"\r\n (keydown)=\"onKeydown($event)\"\r\n [fuiTooltip]=\"item().label ?? ''\"\r\n >\r\n <div class=\"fui-dual-tier-nav__trigger-content\">\r\n @if (item().icon) {\r\n <fui-icon class=\"fui-dual-tier-nav__trigger-icon\" [name]=\"item().icon ?? ''\" size=\"md\" aria-hidden=\"true\" />\r\n }\r\n <span class=\"fui-dual-tier-nav__trigger-label\">{{ item().label }}</span>\r\n </div>\r\n </button>\r\n } @else if (item().routerLink) {\r\n <a\r\n class=\"fui-dual-tier-nav__trigger\"\r\n role=\"menuitem\"\r\n [class.fui-dual-tier-nav__trigger--disabled]=\"item().disabled\"\r\n [attr.aria-disabled]=\"item().disabled || null\"\r\n [routerLink]=\"item().routerLink\"\r\n [queryParams]=\"item().queryParams || undefined\"\r\n [fragment]=\"item().fragment || undefined\"\r\n [target]=\"item().target\"\r\n (click)=\"onClick($event)\"\r\n (keydown)=\"onKeydown($event)\"\r\n [fuiTooltip]=\"item().label ?? ''\"\r\n >\r\n <span class=\"fui-dual-tier-nav__trigger-content\">\r\n @if (item().icon) {\r\n <fui-icon class=\"fui-dual-tier-nav__trigger-icon\" [name]=\"item().icon ?? ''\" size=\"md\" aria-hidden=\"true\" />\r\n }\r\n <span class=\"fui-dual-tier-nav__trigger-label\">{{ item().label }}</span>\r\n </span>\r\n </a>\r\n } @else {\r\n <button\r\n class=\"fui-dual-tier-nav__trigger\"\r\n type=\"button\"\r\n role=\"menuitem\"\r\n [class.fui-dual-tier-nav__trigger--disabled]=\"item().disabled\"\r\n [attr.aria-disabled]=\"item().disabled || null\"\r\n [title]=\"item().title\"\r\n [disabled]=\"item().disabled\"\r\n (click)=\"onClick($event)\"\r\n (keydown)=\"onKeydown($event)\"\r\n [fuiTooltip]=\"item().label ?? ''\"\r\n >\r\n <span class=\"fui-dual-tier-nav__trigger-content\">\r\n @if (item().icon) {\r\n <fui-icon class=\"fui-dual-tier-nav__trigger-icon\" [name]=\"item().icon ?? ''\" size=\"md\" aria-hidden=\"true\" />\r\n }\r\n <span class=\"fui-dual-tier-nav__trigger-label\">{{ item().label }}</span>\r\n </span>\r\n </button>\r\n }\r\n `,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: { class: 'fui-dual-tier-nav__bar-item', role: 'none' },\r\n})\r\nexport class DualTierNavTriggerComponent {\r\n readonly item = input.required<MenuItem>();\r\n readonly isExpanded = input(false);\r\n readonly flyoutId = input('');\r\n readonly itemClick = output<MenuItem>();\r\n readonly toggle = output<Event>();\r\n readonly keydown = output<KeyboardEvent>();\r\n\r\n readonly hasChildren = computed(() => !!this.item().items?.length);\r\n\r\n onClick(event: Event): void {\r\n const it = this.item();\r\n if (it.disabled) {\r\n event.preventDefault();\r\n return;\r\n }\r\n if (this.hasChildren()) {\r\n this.toggle.emit(event);\r\n return;\r\n }\r\n it.command?.(event);\r\n this.itemClick.emit(it);\r\n }\r\n\r\n onKeydown(event: KeyboardEvent): void {\r\n if (this.item().disabled) {\r\n return;\r\n }\r\n // bubble up and handle in dual-tier-navigation\r\n this.keydown.emit(event);\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\r\nimport { FuiIconComponent } from '@raintonic/formaui/components/icon';\r\n\r\n@Component({\r\n selector: 'fui-dual-tier-nav-submenu-header',\r\n standalone: true,\r\n imports: [FuiIconComponent],\r\n styles: [\r\n `\r\n .fui-dtn-submenu__header {\r\n display: flex;\r\n justify-content: space-between;\r\n margin-top: var(--fui-spacing-8);\r\n align-items: center;\r\n padding: 0 var(--fui-spacing-2);\r\n }\r\n .fui-dtn-submenu__title {\r\n margin: 0;\r\n font-family: var(--fui-font-sans);\r\n font-size: var(--fui-text-base);\r\n font-weight: var(--fui-weight-semibold);\r\n line-height: var(--fui-leading-normal);\r\n letter-spacing: var(--fui-tracking-wide);\r\n color: var(--fui-text-primary);\r\n }\r\n .fui-dtn-submenu__close {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n background: none;\r\n border: none;\r\n cursor: pointer;\r\n padding: 8px;\r\n border-radius: var(--fui-radius-sm);\r\n color: var(--fui-text-secondary);\r\n outline: none;\r\n transition:\r\n background-color var(--fui-duration-fast) var(--fui-ease-out),\r\n color var(--fui-duration-fast) var(--fui-ease-out);\r\n }\r\n .fui-dtn-submenu__close:hover {\r\n background-color: var(--fui-bg-muted);\r\n color: var(--fui-text-primary);\r\n }\r\n .fui-dtn-submenu__close:focus-visible {\r\n outline: 2px solid var(--fui-state-focus-ring);\r\n outline-offset: -2px;\r\n }\r\n `,\r\n ],\r\n template: `\r\n <div class=\"fui-dtn-submenu__header\">\r\n <h6 class=\"fui-dtn-submenu__title\">{{ title() }}</h6>\r\n @if (closable()) {\r\n <button type=\"button\" class=\"fui-dtn-submenu__close\" aria-label=\"Close menu\" (click)=\"close.emit()\">\r\n <fui-icon name=\"caret-double-left\" size=\"sm\" aria-hidden=\"true\" />\r\n </button>\r\n }\r\n </div>\r\n `,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: { class: 'fui-dtn-submenu__header-wrapper' },\r\n})\r\nexport class DualTierNavSubmenuHeaderComponent {\r\n readonly title = input.required<string>();\r\n readonly closable = input(true);\r\n readonly close = output();\r\n}\r\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\r\nimport { RouterLink, RouterLinkActive } from '@angular/router';\r\nimport { FuiIconComponent } from '@raintonic/formaui/components/icon';\r\nimport { MenuItem } from '@raintonic/formaui/core';\r\n\r\n@Component({\r\n selector: 'fui-dual-tier-nav-submenu-item',\r\n standalone: true,\r\n imports: [RouterLink, RouterLinkActive, FuiIconComponent],\r\n styles: [\r\n `\r\n :host {\r\n display: flex;\r\n flex-direction: column;\r\n }\r\n\r\n .fui-dtn-item {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--fui-spacing-6);\r\n padding: var(--fui-spacing-4) var(--fui-spacing-6) var(--fui-spacing-4) var(--fui-spacing-3);\r\n cursor: pointer;\r\n user-select: none;\r\n text-decoration: none;\r\n color: var(--fui-text-secondary);\r\n background: transparent;\r\n border: none;\r\n border-radius: var(--fui-radius-sm);\r\n font-family: var(--fui-font-sans);\r\n font-size: var(--fui-text-base);\r\n font-weight: var(--fui-weight-medium);\r\n line-height: var(--fui-leading-normal);\r\n text-align: left;\r\n width: 100%;\r\n box-sizing: border-box;\r\n outline: none;\r\n transition:\r\n background-color var(--fui-duration-fast) var(--fui-ease-out),\r\n color var(--fui-duration-fast) var(--fui-ease-out);\r\n }\r\n .fui-dtn-item:hover {\r\n background-color: var(--fui-bg-muted);\r\n text-decoration: none;\r\n }\r\n .fui-dtn-item:active {\r\n background-color: var(--fui-bg-primary);\r\n }\r\n .fui-dtn-item:focus-visible {\r\n outline: 2px solid var(--fui-state-focus-ring);\r\n outline-offset: -2px;\r\n }\r\n .fui-dtn-item--active {\r\n color: var(--fui-text-primary);\r\n background-color: var(--fui-state-selected-bg);\r\n }\r\n .fui-dtn-item--disabled {\r\n color: var(--fui-text-disabled);\r\n opacity: var(--fui-state-disabled-opacity);\r\n pointer-events: none;\r\n cursor: default;\r\n }\r\n\r\n .fui-dtn-item--parent-expanded {\r\n color: var(--fui-text-primary);\r\n background-color: var(--fui-bg-muted);\r\n }\r\n\r\n .fui-dtn-item__label {\r\n flex: 1;\r\n min-width: 0;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n\r\n .fui-dtn-item__chevron {\r\n flex-shrink: 0;\r\n color: inherit;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n transition: transform var(--fui-duration-base) var(--fui-ease-out);\r\n }\r\n .fui-dtn-item__chevron--expanded {\r\n transform: rotate(90deg);\r\n }\r\n `,\r\n ],\r\n template: `\r\n @if (hasChildren()) {\r\n <button\r\n class=\"fui-dtn-item fui-dtn-item--parent\"\r\n type=\"button\"\r\n role=\"menuitem\"\r\n [class.fui-dtn-item--disabled]=\"item().disabled\"\r\n [class.fui-dtn-item--parent-expanded]=\"isExpanded()\"\r\n [attr.aria-haspopup]=\"true\"\r\n [attr.aria-expanded]=\"isExpanded()\"\r\n [disabled]=\"item().disabled\"\r\n (click)=\"_onClick($event)\"\r\n (keydown)=\"_onKeydown($event)\"\r\n >\r\n <span class=\"fui-dtn-item__label\">{{ item().label }}</span>\r\n <fui-icon\r\n class=\"fui-dtn-item__chevron\"\r\n [class.fui-dtn-item__chevron--expanded]=\"isExpanded()\"\r\n name=\"caret-right\"\r\n size=\"sm\"\r\n aria-hidden=\"true\"\r\n />\r\n </button>\r\n } @else if (item().routerLink) {\r\n <a\r\n class=\"fui-dtn-item\"\r\n role=\"menuitem\"\r\n routerLinkActive=\"fui-dtn-item--active\"\r\n [class.fui-dtn-item--disabled]=\"item().disabled\"\r\n [tabindex]=\"item().disabled ? -1 : 0\"\r\n [attr.aria-disabled]=\"item().disabled || null\"\r\n [routerLink]=\"item().routerLink\"\r\n [queryParams]=\"item().queryParams ?? undefined\"\r\n [fragment]=\"item().fragment ?? undefined\"\r\n [target]=\"item().target\"\r\n [title]=\"item().title\"\r\n (click)=\"_onClick($event)\"\r\n (keydown)=\"_onKeydown($event)\"\r\n >\r\n <span class=\"fui-dtn-item__label\">{{ item().label }}</span>\r\n </a>\r\n } @else {\r\n <button\r\n class=\"fui-dtn-item\"\r\n type=\"button\"\r\n role=\"menuitem\"\r\n [class.fui-dtn-item--disabled]=\"item().disabled\"\r\n [tabindex]=\"item().disabled ? -1 : 0\"\r\n [attr.aria-disabled]=\"item().disabled || null\"\r\n [title]=\"item().title\"\r\n [disabled]=\"item().disabled\"\r\n (click)=\"_onClick($event)\"\r\n (keydown)=\"_onKeydown($event)\"\r\n >\r\n <span class=\"fui-dtn-item__label\">{{ item().label }}</span>\r\n </button>\r\n }\r\n `,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: { role: 'none' },\r\n})\r\nexport class DualTierNavSubmenuItemComponent {\r\n readonly item = input.required<MenuItem>();\r\n readonly isExpanded = input(false);\r\n readonly clickItem = output<MenuItem>();\r\n readonly toggleExpand = output<{ item: MenuItem; sourceEl?: HTMLElement }>();\r\n readonly keydown = output<KeyboardEvent>();\r\n\r\n hasChildren(): boolean {\r\n return !!this.item()?.items?.length;\r\n }\r\n\r\n _onClick(event: Event): void {\r\n const it = this.item();\r\n if (it?.disabled) {\r\n event.preventDefault();\r\n return;\r\n }\r\n if (this.hasChildren()) {\r\n this.toggleExpand.emit({ item: it, sourceEl: event.currentTarget as HTMLElement | undefined });\r\n } else {\r\n if (it.command) it.command(event);\r\n this.clickItem.emit(it);\r\n }\r\n }\r\n\r\n _onKeydown(event: KeyboardEvent): void {\r\n if (this.item()?.disabled) return;\r\n switch (event.key) {\r\n case 'ArrowRight':\r\n event.preventDefault();\r\n if (this.hasChildren())\r\n this.toggleExpand.emit({ item: this.item(), sourceEl: event.currentTarget as HTMLElement | undefined });\r\n break;\r\n case 'ArrowLeft':\r\n event.preventDefault();\r\n // Delegate to parent: collapse if expanded, close panel otherwise\r\n this.keydown.emit(event);\r\n break;\r\n case 'ArrowDown':\r\n case 'ArrowUp':\r\n // Let the list-level handler navigate between items\r\n break;\r\n case 'Enter':\r\n case ' ':\r\n if (this.hasChildren()) {\r\n event.preventDefault();\r\n this.toggleExpand.emit({ item: this.item(), sourceEl: event.currentTarget as HTMLElement | undefined });\r\n }\r\n break;\r\n default:\r\n this.keydown.emit(event);\r\n }\r\n }\r\n}\r\n","import {\r\n afterNextRender,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n Injector,\r\n input,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport { MenuItem } from '@raintonic/formaui/core';\r\nimport { DualTierNavSubmenuHeaderComponent } from './dual-tier-navigation-submenu-header.component';\r\nimport { DualTierNavSubmenuItemComponent } from './dual-tier-navigation-submenu-item.component';\r\n\r\n@Component({\r\n selector: 'fui-dual-tier-nav-submenu',\r\n standalone: true,\r\n imports: [DualTierNavSubmenuHeaderComponent, DualTierNavSubmenuItemComponent],\r\n styles: [\r\n `\r\n :host {\r\n display: contents;\r\n }\r\n .fui-dtn-submenu {\r\n display: flex;\r\n flex-direction: column;\r\n padding-top: var(--fui-spacing-2);\r\n padding-left: var(--fui-spacing-4);\r\n }\r\n .fui-dtn-submenu__list {\r\n display: flex;\r\n flex-direction: column;\r\n list-style: none;\r\n margin: 0;\r\n gap: var(--fui-spacing-2);\r\n }\r\n `,\r\n `\r\n @keyframes fui-dtn-nested-enter {\r\n from {\r\n opacity: 0;\r\n max-height: 0;\r\n }\r\n to {\r\n opacity: 1;\r\n max-height: 500px;\r\n }\r\n }\r\n @keyframes fui-dtn-nested-leave {\r\n from {\r\n opacity: 1;\r\n max-height: 500px;\r\n }\r\n to {\r\n opacity: 0;\r\n max-height: 0;\r\n }\r\n }\r\n .fui-dtn-nested--enter {\r\n animation: fui-dtn-nested-enter var(--fui-duration-moderate) var(--fui-ease-out);\r\n overflow: hidden;\r\n }\r\n .fui-dtn-nested--leave {\r\n animation: fui-dtn-nested-leave var(--fui-duration-fast) var(--fui-ease-in);\r\n overflow: hidden;\r\n }\r\n `,\r\n ],\r\n template: `\r\n <div class=\"fui-dtn-submenu\">\r\n @if (showHeader()) {\r\n <fui-dual-tier-nav-submenu-header [title]=\"title()\" [closable]=\"closable()\" (close)=\"_onClose()\" />\r\n }\r\n <ul class=\"fui-dtn-submenu__list\" role=\"menu\" aria-orientation=\"vertical\" (keydown)=\"_onListKeydown($event)\">\r\n @for (item of visibleItems(); track item.id) {\r\n <li role=\"none\">\r\n <fui-dual-tier-nav-submenu-item\r\n [item]=\"item\"\r\n [isExpanded]=\"_isExpanded(item)\"\r\n (clickItem)=\"_onClickItem($event)\"\r\n (toggleExpand)=\"_onToggleExpand($event.item, $event.sourceEl)\"\r\n (keydown)=\"_onItemKeydown($event, item)\"\r\n />\r\n @if (_hasChildren(item) && _isExpanded(item)) {\r\n <div\r\n class=\"fui-dtn-submenu__nested\"\r\n animate.enter=\"fui-dtn-nested--enter\"\r\n animate.leave=\"fui-dtn-nested--leave\"\r\n >\r\n <fui-dual-tier-nav-submenu\r\n [title]=\"item.label ?? ''\"\r\n [items]=\"item.items ?? []\"\r\n [showHeader]=\"false\"\r\n [closable]=\"false\"\r\n (itemClick)=\"itemClick.emit($event)\"\r\n (closePanel)=\"closePanel.emit()\"\r\n />\r\n </div>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n `,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class DualTierNavSubmenuComponent {\r\n private readonly _injector = inject(Injector);\r\n\r\n readonly title = input.required<string>();\r\n readonly items = input<MenuItem[]>([]);\r\n readonly showHeader = input(true);\r\n readonly closable = input(true);\r\n readonly itemClick = output<MenuItem>();\r\n readonly closePanel = output();\r\n\r\n readonly visibleItems = computed(() => this.items().filter((it) => it.visible !== false));\r\n readonly _expanded = signal(new Set<string>());\r\n\r\n constructor() {\r\n effect(() => {\r\n const expanded = new Set<string>();\r\n const walk = (list: MenuItem[]) => {\r\n for (const it of list) {\r\n if (it.expanded && it.items?.length) expanded.add(it.id!);\r\n if (it.items) walk(it.items);\r\n }\r\n };\r\n walk(this.items());\r\n this._expanded.set(expanded);\r\n });\r\n }\r\n\r\n _hasChildren(item: MenuItem): boolean {\r\n return !!item.items?.length;\r\n }\r\n\r\n _isExpanded(item: MenuItem): boolean {\r\n return this._hasChildren(item) && this._expanded().has(item.id!);\r\n }\r\n\r\n _onClose(): void {\r\n this.closePanel.emit();\r\n }\r\n\r\n _onClickItem(item: MenuItem): void {\r\n this.itemClick.emit(item);\r\n }\r\n\r\n _onToggleExpand(item: MenuItem, toggleSourceEl?: HTMLElement): void {\r\n const id = item.id;\r\n if (!id) return;\r\n const wasExpanded = this._expanded().has(id);\r\n this._expanded.update((s) => {\r\n const next = new Set(s);\r\n if (next.has(id)) next.delete(id);\r\n else next.add(id);\r\n return next;\r\n });\r\n // ponytail: afterNextRender to wait for the nested submenu to be rendered.\r\n // Ceiling: if the nested submenu has no visible items, focus stays on the toggle.\r\n if (!wasExpanded && toggleSourceEl) {\r\n afterNextRender(\r\n () => {\r\n const li = toggleSourceEl.closest('li');\r\n const selector = '.fui-dtn-item:not(.fui-dtn-item--disabled)';\r\n const nested = li?.querySelector<HTMLElement>(':scope > .fui-dtn-submenu__nested ' + selector);\r\n nested?.focus();\r\n },\r\n { injector: this._injector },\r\n );\r\n }\r\n }\r\n\r\n _onListKeydown(event: KeyboardEvent): void {\r\n if (!['ArrowDown', 'ArrowUp', 'Home', 'End'].includes(event.key)) return;\r\n\r\n event.stopPropagation();\r\n\r\n const listEl = (event.currentTarget as HTMLElement)?.closest('ul');\r\n if (!listEl) return;\r\n\r\n // ponytail: querySelectorAll on every keydown — acceptable for small submenu lists (<50 items).\r\n // Upgrade path: precompute items list on mutation and reuse.\r\n const items = Array.from(\r\n listEl.querySelectorAll<HTMLElement>(':scope > li > fui-dual-tier-nav-submenu-item > .fui-dtn-item'),\r\n );\r\n const idx = items.indexOf(document.activeElement as HTMLElement);\r\n\r\n switch (event.key) {\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n this._focusItem(items, idx + 1, 1);\r\n break;\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n this._focusItem(items, idx - 1, -1);\r\n break;\r\n case 'Home':\r\n event.preventDefault();\r\n this._focusItem(items, 0, 1);\r\n break;\r\n case 'End':\r\n event.preventDefault();\r\n this._focusItem(items, items.length - 1, -1);\r\n break;\r\n }\r\n }\r\n\r\n _onItemKeydown(event: KeyboardEvent, item: MenuItem): void {\r\n switch (event.key) {\r\n case 'ArrowLeft':\r\n event.preventDefault();\r\n if (this._hasChildren(item) && this._isExpanded(item)) {\r\n this._expanded.update((s) => {\r\n const next = new Set(s);\r\n next.delete(item.id!);\r\n return next;\r\n });\r\n } else {\r\n this.closePanel.emit();\r\n }\r\n break;\r\n }\r\n }\r\n\r\n private _focusItem(items: HTMLElement[], start: number, step: 1 | -1): void {\r\n let i = start;\r\n while (i >= 0 && i < items.length) {\r\n if (!items[i].classList.contains('fui-dtn-item--disabled')) {\r\n items[i].focus();\r\n return;\r\n }\r\n i += step;\r\n }\r\n }\r\n}\r\n","import {\r\n afterNextRender,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n inject,\r\n Injector,\r\n input,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport { MenuItem } from '@raintonic/formaui/core';\r\nimport { DualTierNavTriggerComponent } from './dual-tier-navigation-trigger.component';\r\nimport { DualTierNavSubmenuComponent } from './dual-tier-navigation-submenu.component';\r\n\r\n@Component({\r\n selector: 'fui-dual-tier-navigation',\r\n standalone: true,\r\n imports: [DualTierNavTriggerComponent, DualTierNavSubmenuComponent],\r\n styles: `\r\n :host {\r\n --fui-dtn-bg: var(--fui-bg-subtle);\r\n --fui-dtn-flyout-width: 200px;\r\n\r\n display: flex;\r\n flex-direction: row;\r\n background-color: var(--fui-dtn-bg);\r\n box-sizing: border-box;\r\n }\r\n .fui-dual-tier-nav__bar {\r\n display: flex;\r\n flex-direction: column;\r\n list-style: none;\r\n margin: 0;\r\n padding: var(--fui-spacing-4) var(--fui-spacing-4);\r\n gap: var(--fui-spacing-2);\r\n flex-shrink: 0;\r\n border-right: 1px solid var(--fui-border-default);\r\n }\r\n .fui-dual-tier-nav__flyout {\r\n display: flex;\r\n flex-direction: column;\r\n width: 0;\r\n flex-shrink: 0;\r\n background: var(--fui-dtn-bg);\r\n clip-path: inset(0 100% 0 0);\r\n overflow: hidden;\r\n transition:\r\n width var(--fui-duration-moderate) cubic-bezier(0.16, 1, 0.3, 1),\r\n clip-path var(--fui-duration-moderate) cubic-bezier(0.16, 1, 0.3, 1);\r\n }\r\n .fui-dual-tier-nav__flyout--open {\r\n width: var(--fui-dtn-flyout-width);\r\n clip-path: inset(0 0 0 0);\r\n overflow-y: auto;\r\n padding-right: var(--fui-spacing-2);\r\n }\r\n\r\n @keyframes fui-dtn-flyout-content-enter {\r\n from {\r\n opacity: 0;\r\n }\r\n to {\r\n opacity: 1;\r\n }\r\n }\r\n @keyframes fui-dtn-flyout-content-leave {\r\n from {\r\n opacity: 1;\r\n }\r\n to {\r\n opacity: 0;\r\n }\r\n }\r\n .fui-dtn-flyout-content--enter {\r\n animation: fui-dtn-flyout-content-enter var(--fui-duration-fast) var(--fui-ease-out);\r\n }\r\n .fui-dtn-flyout-content--leave {\r\n animation: fui-dtn-flyout-content-leave var(--fui-duration-fast) var(--fui-ease-in);\r\n }\r\n `,\r\n template: `\r\n <ul class=\"fui-dual-tier-nav__bar\" role=\"menu\" aria-orientation=\"vertical\">\r\n @for (item of _readyItems(); track item.id) {\r\n <fui-dual-tier-nav-trigger\r\n [item]=\"item\"\r\n [isExpanded]=\"_expandedId() === item.id\"\r\n [flyoutId]=\"item.id ?? ''\"\r\n (toggle)=\"_onToggle($event, item)\"\r\n (itemClick)=\"_onItemClick($event)\"\r\n (keydown)=\"_onTriggerKeydown($event, item)\"\r\n />\r\n }\r\n </ul>\r\n <div\r\n class=\"fui-dual-tier-nav__flyout\"\r\n role=\"menu\"\r\n [class.fui-dual-tier-nav__flyout--open]=\"!!_expandedItem()\"\r\n [id]=\"_expandedItem() ? 'fui-dtn-flyout-' + (_expandedItem()!.id ?? '') : null\"\r\n [attr.aria-label]=\"_expandedItem()?.label ?? null\"\r\n >\r\n @if (_expandedItem(); as expanded) {\r\n <div animate.enter=\"fui-dtn-flyout-content--enter\" animate.leave=\"fui-dtn-flyout-content--leave\">\r\n <fui-dual-tier-nav-submenu\r\n [title]=\"expanded.label ?? ''\"\r\n [items]=\"expanded.items ?? []\"\r\n (itemClick)=\"_onItemClick($event)\"\r\n (closePanel)=\"_closeFlyout()\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n `,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n role: 'navigation',\r\n '[attr.aria-label]': 'ariaLabel()',\r\n class: 'fui-dual-tier-navigation',\r\n },\r\n})\r\nexport class FuiDualTierNavigationComponent {\r\n private readonly _injector = inject(Injector);\r\n\r\n readonly items = input<MenuItem[]>([]);\r\n readonly ariaLabel = input('Dual tier navigation');\r\n readonly itemClick = output<MenuItem>();\r\n\r\n readonly _readyItems = computed(() => {\r\n let counter = 0;\r\n const assignIds = (list: readonly MenuItem[]): MenuItem[] =>\r\n list\r\n .filter((it) => it.visible !== false)\r\n .map((it) => {\r\n const copy = { ...it, id: it.id ?? `fui-dtn-${++counter}` };\r\n if (copy.items) {\r\n return { ...copy, items: assignIds(copy.items) };\r\n }\r\n return copy;\r\n });\r\n\r\n return assignIds(this.items());\r\n });\r\n\r\n readonly _expandedId = signal<string | undefined>(undefined);\r\n\r\n readonly _expandedItem = computed(() => {\r\n const id = this._expandedId();\r\n if (!id) return undefined;\r\n return this._findItemById(this._readyItems(), id);\r\n });\r\n\r\n private _findItemById(items: readonly MenuItem[], id: string): MenuItem | undefined {\r\n for (const item of items) {\r\n if (item.id === id) return item;\r\n if (item.items?.length) {\r\n const found = this._findItemById(item.items, id);\r\n if (found) return found;\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n _closeFlyout(): void {\r\n const activeId = this._expandedId();\r\n this._expandedId.set(undefined);\r\n if (activeId) {\r\n afterNextRender(\r\n () => {\r\n document.querySelector<HTMLElement>('[aria-controls=\"fui-dtn-flyout-' + activeId + '\"]')?.focus();\r\n },\r\n { injector: this._injector },\r\n );\r\n }\r\n }\r\n\r\n _onItemClick(item: MenuItem): void {\r\n this.itemClick.emit(item);\r\n }\r\n\r\n _onToggle(event: Event, item: MenuItem): void {\r\n event.stopPropagation();\r\n this._expandedId.update((current) => (current === item.id ? undefined : item.id));\r\n this.itemClick.emit(item);\r\n }\r\n\r\n _onTriggerKeydown(event: KeyboardEvent, item: MenuItem): void {\r\n const triggerEl = (event.currentTarget as HTMLElement | null)?.closest('[role=\"menuitem\"]') as HTMLElement | null;\r\n if (!triggerEl) return;\r\n\r\n const barEl = triggerEl.closest('.fui-dual-tier-nav__bar');\r\n if (!barEl) return;\r\n\r\n // ponytail: querySelectorAll on every keydown — acceptable for small trigger lists (<20 items).\r\n // Upgrade path: precompute triggers list on mutation and reuse.\r\n const triggers = Array.from(barEl.querySelectorAll<HTMLElement>('[role=\"menuitem\"]'));\r\n const idx = triggers.indexOf(triggerEl);\r\n\r\n const closeFlyout = () => {\r\n if (this._expandedId()) {\r\n this._expandedId.set(undefined);\r\n triggerEl.focus();\r\n }\r\n };\r\n\r\n const focusFirstFlyoutItem = () => {\r\n afterNextRender(\r\n () => {\r\n const selector = '.fui-dtn-item:not(.fui-dtn-item--disabled)';\r\n const el = document.getElementById(`fui-dtn-flyout-${item.id}`)?.querySelector<HTMLElement>(selector);\r\n el?.focus();\r\n },\r\n { injector: this._injector },\r\n );\r\n };\r\n\r\n switch (event.key) {\r\n case ' ':\r\n case 'Enter':\r\n case 'ArrowRight':\r\n event.preventDefault();\r\n if (item.items?.length) {\r\n this._expandedId.set(item.id);\r\n focusFirstFlyoutItem();\r\n } else {\r\n // Leaf item: forward click-like activation\r\n if (item.command) item.command(event);\r\n this.itemClick.emit(item);\r\n }\r\n break;\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n triggers[idx + 1]?.focus();\r\n break;\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n triggers[idx - 1]?.focus();\r\n break;\r\n case 'ArrowLeft':\r\n case 'Escape':\r\n event.preventDefault();\r\n closeFlyout();\r\n break;\r\n case 'Home':\r\n event.preventDefault();\r\n triggers[0]?.focus();\r\n break;\r\n case 'End':\r\n event.preventDefault();\r\n triggers[triggers.length - 1]?.focus();\r\n break;\r\n }\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|