@tailng-ui/primitives 0.13.0 → 0.15.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/package.json +3 -2
- package/src/index.d.ts +1 -0
- package/src/index.d.ts.map +1 -1
- package/src/index.js +1 -0
- package/src/index.js.map +1 -1
- package/src/lib/feedback/empty/tng-empty.d.ts.map +1 -1
- package/src/lib/feedback/empty/tng-empty.js +0 -5
- package/src/lib/feedback/empty/tng-empty.js.map +1 -1
- package/src/lib/feedback/progress-bar/tng-progress-bar.d.ts.map +1 -1
- package/src/lib/feedback/progress-bar/tng-progress-bar.js +0 -2
- package/src/lib/feedback/progress-bar/tng-progress-bar.js.map +1 -1
- package/src/lib/feedback/progress-spinner/tng-progress-spinner.d.ts.map +1 -1
- package/src/lib/feedback/progress-spinner/tng-progress-spinner.js +0 -1
- package/src/lib/feedback/progress-spinner/tng-progress-spinner.js.map +1 -1
- package/src/lib/feedback/skeleton/tng-skeleton.d.ts.map +1 -1
- package/src/lib/feedback/skeleton/tng-skeleton.js +0 -1
- package/src/lib/feedback/skeleton/tng-skeleton.js.map +1 -1
- package/src/lib/feedback/toast/tng-toast.d.ts.map +1 -1
- package/src/lib/feedback/toast/tng-toast.js +0 -2
- package/src/lib/feedback/toast/tng-toast.js.map +1 -1
- package/src/lib/form/_shared/select/tng-select.overlay.shared.d.ts.map +1 -1
- package/src/lib/form/_shared/select/tng-select.overlay.shared.js +0 -1
- package/src/lib/form/_shared/select/tng-select.overlay.shared.js.map +1 -1
- package/src/lib/form/_shared/select/tng-select.parts.shared.d.ts.map +1 -1
- package/src/lib/form/_shared/select/tng-select.parts.shared.js +0 -4
- package/src/lib/form/_shared/select/tng-select.parts.shared.js.map +1 -1
- package/src/lib/form/autocomplete/tng-autocomplete.d.ts.map +1 -1
- package/src/lib/form/autocomplete/tng-autocomplete.js +0 -1
- package/src/lib/form/autocomplete/tng-autocomplete.js.map +1 -1
- package/src/lib/form/autocomplete/tng-autocomplete.listbox.d.ts.map +1 -1
- package/src/lib/form/autocomplete/tng-autocomplete.listbox.js +0 -2
- package/src/lib/form/autocomplete/tng-autocomplete.listbox.js.map +1 -1
- package/src/lib/form/autocomplete/tng-autocomplete.overlay.d.ts.map +1 -1
- package/src/lib/form/autocomplete/tng-autocomplete.overlay.js +0 -1
- package/src/lib/form/autocomplete/tng-autocomplete.overlay.js.map +1 -1
- package/src/lib/form/autocomplete/tng-autocomplete.parts.d.ts.map +1 -1
- package/src/lib/form/autocomplete/tng-autocomplete.parts.js +0 -4
- package/src/lib/form/autocomplete/tng-autocomplete.parts.js.map +1 -1
- package/src/lib/form/button-toggle/tng-button-toggle.d.ts.map +1 -1
- package/src/lib/form/button-toggle/tng-button-toggle.js +0 -2
- package/src/lib/form/button-toggle/tng-button-toggle.js.map +1 -1
- package/src/lib/form/checkbox/tng-checkbox.d.ts.map +1 -1
- package/src/lib/form/checkbox/tng-checkbox.js +0 -1
- package/src/lib/form/checkbox/tng-checkbox.js.map +1 -1
- package/src/lib/form/chips/tng-chips.d.ts.map +1 -1
- package/src/lib/form/chips/tng-chips.js +0 -3
- package/src/lib/form/chips/tng-chips.js.map +1 -1
- package/src/lib/form/combobox/tng-combobox.d.ts.map +1 -1
- package/src/lib/form/combobox/tng-combobox.js +0 -1
- package/src/lib/form/combobox/tng-combobox.js.map +1 -1
- package/src/lib/form/datepicker/__tests__/tng-datepicker.test-helpers.d.ts +25 -0
- package/src/lib/form/datepicker/__tests__/tng-datepicker.test-helpers.d.ts.map +1 -0
- package/src/lib/form/datepicker/__tests__/tng-datepicker.test-helpers.js +105 -0
- package/src/lib/form/datepicker/__tests__/tng-datepicker.test-helpers.js.map +1 -0
- package/src/lib/form/datepicker/datepicker.adapters.d.ts +5 -0
- package/src/lib/form/datepicker/datepicker.adapters.d.ts.map +1 -0
- package/src/lib/form/datepicker/datepicker.adapters.js +194 -0
- package/src/lib/form/datepicker/datepicker.adapters.js.map +1 -0
- package/src/lib/form/datepicker/datepicker.state.d.ts +10 -0
- package/src/lib/form/datepicker/datepicker.state.d.ts.map +1 -0
- package/src/lib/form/datepicker/datepicker.state.js +97 -0
- package/src/lib/form/datepicker/datepicker.state.js.map +1 -0
- package/src/lib/form/datepicker/datepicker.types.d.ts +269 -0
- package/src/lib/form/datepicker/datepicker.types.d.ts.map +1 -0
- package/src/lib/form/datepicker/datepicker.types.js +1 -0
- package/src/lib/form/datepicker/datepicker.types.js.map +1 -0
- package/src/lib/form/datepicker/datepicker.utils.d.ts +75 -0
- package/src/lib/form/datepicker/datepicker.utils.d.ts.map +1 -0
- package/src/lib/form/datepicker/datepicker.utils.js +238 -0
- package/src/lib/form/datepicker/datepicker.utils.js.map +1 -0
- package/src/lib/form/datepicker/index.d.ts +3 -0
- package/src/lib/form/datepicker/index.d.ts.map +1 -0
- package/src/lib/form/datepicker/index.js +3 -0
- package/src/lib/form/datepicker/index.js.map +1 -0
- package/src/lib/form/datepicker/tng-datepicker.d.ts +5 -0
- package/src/lib/form/datepicker/tng-datepicker.d.ts.map +1 -0
- package/src/lib/form/datepicker/tng-datepicker.js +1948 -0
- package/src/lib/form/datepicker/tng-datepicker.js.map +1 -0
- package/src/lib/form/datepicker/tng-datepicker.overlay.d.ts +60 -0
- package/src/lib/form/datepicker/tng-datepicker.overlay.d.ts.map +1 -0
- package/src/lib/form/datepicker/tng-datepicker.overlay.js +275 -0
- package/src/lib/form/datepicker/tng-datepicker.overlay.js.map +1 -0
- package/src/lib/form/input/tng-input.d.ts.map +1 -1
- package/src/lib/form/input/tng-input.js +0 -4
- package/src/lib/form/input/tng-input.js.map +1 -1
- package/src/lib/form/input-otp/tng-input-otp.d.ts.map +1 -1
- package/src/lib/form/input-otp/tng-input-otp.js +0 -1
- package/src/lib/form/input-otp/tng-input-otp.js.map +1 -1
- package/src/lib/form/label/tng-label.d.ts.map +1 -1
- package/src/lib/form/label/tng-label.js +0 -1
- package/src/lib/form/label/tng-label.js.map +1 -1
- package/src/lib/form/listbox/listbox.directive.d.ts.map +1 -1
- package/src/lib/form/listbox/listbox.directive.js +0 -1
- package/src/lib/form/listbox/listbox.directive.js.map +1 -1
- package/src/lib/form/listbox/option.directive.d.ts.map +1 -1
- package/src/lib/form/listbox/option.directive.js +0 -1
- package/src/lib/form/listbox/option.directive.js.map +1 -1
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.chip.d.ts.map +1 -1
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.chip.js +0 -1
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.chip.js.map +1 -1
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.content.d.ts.map +1 -1
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.content.js +0 -1
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.content.js.map +1 -1
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.d.ts.map +1 -1
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.js +0 -1
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.js.map +1 -1
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.d.ts.map +1 -1
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.js +0 -2
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.js.map +1 -1
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.overlay.d.ts.map +1 -1
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.overlay.js +0 -1
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.overlay.js.map +1 -1
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.trigger.d.ts.map +1 -1
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.trigger.js +0 -1
- package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.trigger.js.map +1 -1
- package/src/lib/form/multi-select/tng-multi-select.d.ts.map +1 -1
- package/src/lib/form/multi-select/tng-multi-select.js +0 -1
- package/src/lib/form/multi-select/tng-multi-select.js.map +1 -1
- package/src/lib/form/multi-select/tng-multi-select.listbox.d.ts.map +1 -1
- package/src/lib/form/multi-select/tng-multi-select.listbox.js +0 -2
- package/src/lib/form/multi-select/tng-multi-select.listbox.js.map +1 -1
- package/src/lib/form/multiselect/tng-multiselect.d.ts.map +1 -1
- package/src/lib/form/multiselect/tng-multiselect.js +0 -1
- package/src/lib/form/multiselect/tng-multiselect.js.map +1 -1
- package/src/lib/form/radio/tng-radio.d.ts.map +1 -1
- package/src/lib/form/radio/tng-radio.js +0 -1
- package/src/lib/form/radio/tng-radio.js.map +1 -1
- package/src/lib/form/select/tng-select.d.ts.map +1 -1
- package/src/lib/form/select/tng-select.js +0 -1
- package/src/lib/form/select/tng-select.js.map +1 -1
- package/src/lib/form/select/tng-select.listbox.d.ts.map +1 -1
- package/src/lib/form/select/tng-select.listbox.js +0 -2
- package/src/lib/form/select/tng-select.listbox.js.map +1 -1
- package/src/lib/form/slider/tng-slider.d.ts.map +1 -1
- package/src/lib/form/slider/tng-slider.js +0 -1
- package/src/lib/form/slider/tng-slider.js.map +1 -1
- package/src/lib/form/switch/tng-switch.d.ts.map +1 -1
- package/src/lib/form/switch/tng-switch.js +0 -1
- package/src/lib/form/switch/tng-switch.js.map +1 -1
- package/src/lib/form/textarea/tng-textarea.d.ts.map +1 -1
- package/src/lib/form/textarea/tng-textarea.js +0 -1
- package/src/lib/form/textarea/tng-textarea.js.map +1 -1
- package/src/lib/form/toggle/tng-toggle.d.ts.map +1 -1
- package/src/lib/form/toggle/tng-toggle.js +0 -1
- package/src/lib/form/toggle/tng-toggle.js.map +1 -1
- package/src/lib/form/toggle-group/tng-toggle-group.d.ts.map +1 -1
- package/src/lib/form/toggle-group/tng-toggle-group.js +0 -1
- package/src/lib/form/toggle-group/tng-toggle-group.js.map +1 -1
- package/src/lib/layout/accordion/tng-accordion.d.ts.map +1 -1
- package/src/lib/layout/accordion/tng-accordion.js +0 -4
- package/src/lib/layout/accordion/tng-accordion.js.map +1 -1
- package/src/lib/layout/bottom-sheet/tng-bottom-sheet.d.ts.map +1 -1
- package/src/lib/layout/bottom-sheet/tng-bottom-sheet.js +0 -1
- package/src/lib/layout/bottom-sheet/tng-bottom-sheet.js.map +1 -1
- package/src/lib/layout/card/tng-card.d.ts.map +1 -1
- package/src/lib/layout/card/tng-card.js +0 -10
- package/src/lib/layout/card/tng-card.js.map +1 -1
- package/src/lib/layout/collapsible/tng-collapsible.d.ts.map +1 -1
- package/src/lib/layout/collapsible/tng-collapsible.js +0 -3
- package/src/lib/layout/collapsible/tng-collapsible.js.map +1 -1
- package/src/lib/layout/drawer/tng-drawer.d.ts.map +1 -1
- package/src/lib/layout/drawer/tng-drawer.js +0 -6
- package/src/lib/layout/drawer/tng-drawer.js.map +1 -1
- package/src/lib/layout/grid/__tests__/tng-grid.test-harness.d.ts +32 -0
- package/src/lib/layout/grid/__tests__/tng-grid.test-harness.d.ts.map +1 -0
- package/src/lib/layout/grid/__tests__/tng-grid.test-harness.js +312 -0
- package/src/lib/layout/grid/__tests__/tng-grid.test-harness.js.map +1 -0
- package/src/lib/layout/grid/tng-grid.d.ts +144 -2
- package/src/lib/layout/grid/tng-grid.d.ts.map +1 -1
- package/src/lib/layout/grid/tng-grid.js +669 -3
- package/src/lib/layout/grid/tng-grid.js.map +1 -1
- package/src/lib/layout/separator/tng-separator.d.ts.map +1 -1
- package/src/lib/layout/separator/tng-separator.js +0 -1
- package/src/lib/layout/separator/tng-separator.js.map +1 -1
- package/src/lib/layout/stepper/tng-stepper.d.ts.map +1 -1
- package/src/lib/layout/stepper/tng-stepper.js +0 -1
- package/src/lib/layout/stepper/tng-stepper.js.map +1 -1
- package/src/lib/layout/tree/__tests__/tng-tree.test-harness.d.ts.map +1 -1
- package/src/lib/layout/tree/__tests__/tng-tree.test-harness.js +0 -1
- package/src/lib/layout/tree/__tests__/tng-tree.test-harness.js.map +1 -1
- package/src/lib/layout/tree/tng-tree-group.d.ts.map +1 -1
- package/src/lib/layout/tree/tng-tree-group.js +0 -1
- package/src/lib/layout/tree/tng-tree-group.js.map +1 -1
- package/src/lib/layout/tree/tng-tree-indicator.d.ts.map +1 -1
- package/src/lib/layout/tree/tng-tree-indicator.js +0 -1
- package/src/lib/layout/tree/tng-tree-indicator.js.map +1 -1
- package/src/lib/layout/tree/tng-tree-item.d.ts.map +1 -1
- package/src/lib/layout/tree/tng-tree-item.js +0 -1
- package/src/lib/layout/tree/tng-tree-item.js.map +1 -1
- package/src/lib/layout/tree/tng-tree.d.ts.map +1 -1
- package/src/lib/layout/tree/tng-tree.js +0 -1
- package/src/lib/layout/tree/tng-tree.js.map +1 -1
- package/src/lib/navigation/breadcrumb/tng-breadcrumb.d.ts.map +1 -1
- package/src/lib/navigation/breadcrumb/tng-breadcrumb.js +0 -5
- package/src/lib/navigation/breadcrumb/tng-breadcrumb.js.map +1 -1
- package/src/lib/navigation/context-menu/tng-context-menu.d.ts.map +1 -1
- package/src/lib/navigation/context-menu/tng-context-menu.js +0 -2
- package/src/lib/navigation/context-menu/tng-context-menu.js.map +1 -1
- package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.d.ts.map +1 -1
- package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.js +0 -1
- package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.js.map +1 -1
- package/src/lib/navigation/menu/tng-menu.d.ts.map +1 -1
- package/src/lib/navigation/menu/tng-menu.js +0 -6
- package/src/lib/navigation/menu/tng-menu.js.map +1 -1
- package/src/lib/navigation/menubar/tng-menubar.d.ts.map +1 -1
- package/src/lib/navigation/menubar/tng-menubar.js +0 -2
- package/src/lib/navigation/menubar/tng-menubar.js.map +1 -1
- package/src/lib/navigation/navigation-menu/tng-navigation-menu.d.ts.map +1 -1
- package/src/lib/navigation/navigation-menu/tng-navigation-menu.js +0 -1
- package/src/lib/navigation/navigation-menu/tng-navigation-menu.js.map +1 -1
- package/src/lib/navigation/tabs/tng-tabs.d.ts +13 -6
- package/src/lib/navigation/tabs/tng-tabs.d.ts.map +1 -1
- package/src/lib/navigation/tabs/tng-tabs.js +77 -41
- package/src/lib/navigation/tabs/tng-tabs.js.map +1 -1
- package/src/lib/navigation/toolbar/tng-toolbar.d.ts.map +1 -1
- package/src/lib/navigation/toolbar/tng-toolbar.js +0 -1
- package/src/lib/navigation/toolbar/tng-toolbar.js.map +1 -1
- package/src/lib/overlay/dialog/tng-dialog.d.ts.map +1 -1
- package/src/lib/overlay/dialog/tng-dialog.js +0 -9
- package/src/lib/overlay/dialog/tng-dialog.js.map +1 -1
- package/src/lib/overlay/popover/tng-popover.d.ts.map +1 -1
- package/src/lib/overlay/popover/tng-popover.js +0 -4
- package/src/lib/overlay/popover/tng-popover.js.map +1 -1
- package/src/lib/overlay/tooltip/tng-tooltip.d.ts.map +1 -1
- package/src/lib/overlay/tooltip/tng-tooltip.js +0 -3
- package/src/lib/overlay/tooltip/tng-tooltip.js.map +1 -1
- package/src/lib/utility/avatar/tng-avatar.d.ts.map +1 -1
- package/src/lib/utility/avatar/tng-avatar.js +0 -3
- package/src/lib/utility/avatar/tng-avatar.js.map +1 -1
- package/src/lib/utility/badge/tng-badge.d.ts.map +1 -1
- package/src/lib/utility/badge/tng-badge.js +0 -1
- package/src/lib/utility/badge/tng-badge.js.map +1 -1
- package/src/lib/utility/code-block/tng-code-block.d.ts.map +1 -1
- package/src/lib/utility/code-block/tng-code-block.js +0 -5
- package/src/lib/utility/code-block/tng-code-block.js.map +1 -1
- package/src/lib/utility/copy/tng-copy.d.ts.map +1 -1
- package/src/lib/utility/copy/tng-copy.js +0 -1
- package/src/lib/utility/copy/tng-copy.js.map +1 -1
- package/src/lib/utility/press/tng-press.d.ts.map +1 -1
- package/src/lib/utility/press/tng-press.js +0 -1
- package/src/lib/utility/press/tng-press.js.map +1 -1
- package/src/lib/utility/tag/tng-tag.d.ts.map +1 -1
- package/src/lib/utility/tag/tng-tag.js +0 -3
- package/src/lib/utility/tag/tng-tag.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-grid.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/grid/tng-grid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;;AAOvD,MAAM,OAAO,OAAO;IAEC,QAAQ,GAAG,MAAe,CAAC;uGAFnC,OAAO;2FAAP,OAAO;;2FAAP,OAAO;kBALnB,SAAS;mBAAC;oBACT,QAAQ,EAAE,WAAW;oBACrB,QAAQ,EAAE,SAAS;oBACnB,UAAU,EAAE,IAAI;iBACjB;;sBAEE,WAAW;uBAAC,gBAAgB","sourcesContent":["import { Directive, HostBinding } from '@angular/core';\n\n@Directive({\n selector: '[tngGrid]',\n exportAs: 'tngGrid',\n standalone: true,\n})\nexport class TngGrid {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'grid' as const;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"tng-grid.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/grid/tng-grid.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n OnDestroy,\n OnInit} from '@angular/core';\nimport {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n Input,\n booleanAttribute,\n inject,\n input,\n output,\n} from '@angular/core';\nimport {\n resolveGridNavigationKeyAction,\n resolveNavigableGridCell,\n type TngGridCellPosition,\n type TngGridNavigableCell,\n type TngGridNavigationActionType,\n} from '@tailng-ui/cdk';\n\nexport type TngGridDirection = 'ltr' | 'rtl';\nexport type TngGridSelectionMode = 'none' | 'single';\nexport type TngGridCellRole = 'columnheader' | 'gridcell' | 'rowheader';\nexport type TngGridInteractionTrigger = 'keyboard' | 'pointer' | 'programmatic';\nexport type TngGridCellValue = Readonly<TngGridCellPosition>;\n\nexport type TngGridFocusChangeEvent = Readonly<{\n col: number;\n previousCol: number | null;\n previousRow: number | null;\n row: number;\n trigger: TngGridInteractionTrigger;\n}>;\n\nexport type TngGridActivateEvent = Readonly<{\n col: number;\n row: number;\n trigger: Extract<TngGridInteractionTrigger, 'keyboard' | 'pointer'>;\n}>;\n\ntype TngGridNullablePosition = TngGridCellValue | null;\n\nfunction coerceFiniteNumber(value: unknown): number | null {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n\n if (typeof value === 'string' && value.trim().length > 0) {\n const parsed = Number(value);\n if (Number.isFinite(parsed)) {\n return parsed;\n }\n }\n\n return null;\n}\n\nfunction normalizeIndex(value: unknown): number {\n return Math.max(0, Math.trunc(coerceFiniteNumber(value) ?? 0));\n}\n\nfunction normalizeOptionalIndex(value: unknown): number | null | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n if (value === null || value === '') {\n return null;\n }\n\n const numberValue = coerceFiniteNumber(value);\n if (numberValue === null) {\n return null;\n }\n\n return Math.max(0, Math.trunc(numberValue));\n}\n\nfunction normalizeCount(value: unknown): number | null {\n if (value === undefined || value === null || value === '') {\n return null;\n }\n\n const numberValue = coerceFiniteNumber(value);\n if (numberValue === null) {\n return null;\n }\n\n return Math.max(1, Math.trunc(numberValue));\n}\n\nfunction normalizeSpan(value: unknown): number {\n return Math.max(1, Math.trunc(coerceFiniteNumber(value) ?? 1));\n}\n\nfunction normalizeDirection(value: unknown): TngGridDirection {\n return value === 'rtl' ? 'rtl' : 'ltr';\n}\n\nfunction normalizeSelectionMode(value: unknown): TngGridSelectionMode {\n return value === 'single' ? 'single' : 'none';\n}\n\nfunction normalizeCellRole(value: unknown): TngGridCellRole {\n if (value === 'rowheader' || value === 'columnheader') {\n return value;\n }\n\n return 'gridcell';\n}\n\nfunction normalizeGridValueInput(value: unknown): TngGridCellValue | null | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n if (value === null) {\n return null;\n }\n\n if (typeof value === 'object' && value !== null && 'row' in value && 'col' in value) {\n const row = normalizeOptionalIndex((value as { row: unknown }).row);\n const col = normalizeOptionalIndex((value as { col: unknown }).col);\n if (row === undefined || row === null || col === undefined || col === null) {\n return null;\n }\n\n return Object.freeze({ col, row });\n }\n\n return null;\n}\n\nfunction createCellKey(value: TngGridCellValue): string {\n return `${value.row}:${value.col}`;\n}\n\nfunction compareCellValues(a: TngGridCellValue, b: TngGridCellValue): number {\n if (a.row !== b.row) {\n return a.row - b.row;\n }\n\n return a.col - b.col;\n}\n\nfunction positionsEqual(a: TngGridNullablePosition, b: TngGridNullablePosition): boolean {\n if (a === null || b === null) {\n return a === b;\n }\n\n return a.row === b.row && a.col === b.col;\n}\n\nfunction focusChangeEvent(\n current: TngGridCellValue,\n previous: TngGridNullablePosition,\n trigger: TngGridInteractionTrigger,\n): TngGridFocusChangeEvent {\n return Object.freeze({\n col: current.col,\n previousCol: previous?.col ?? null,\n previousRow: previous?.row ?? null,\n row: current.row,\n trigger,\n });\n}\n\n@Directive({\n selector: '[tngGrid]',\n exportAs: 'tngGrid',\n})\nexport class TngGrid implements OnDestroy {\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly cells = new Set<TngGridCell>();\n private readonly cellByKey = new Map<string, TngGridCell>();\n\n private uncontrolledFocus: TngGridNullablePosition = null;\n private uncontrolledSelection: TngGridNullablePosition = null;\n private selectionInitialized = false;\n private ariaLabelValue: string | null = null;\n private ariaColcountValue: number | null = null;\n private ariaRowcountValue: number | null = null;\n private domFocusedKey: string | null = null;\n private focusVisibleKey: string | null = null;\n private lastActivatedKey: string | null = null;\n private pendingFocusTrigger: TngGridInteractionTrigger | null = null;\n\n public readonly dir = input<TngGridDirection, unknown>('ltr', {\n transform: normalizeDirection,\n });\n public readonly focusCol = input<number | null | undefined, unknown>(undefined, {\n transform: normalizeOptionalIndex,\n });\n public readonly focusRow = input<number | null | undefined, unknown>(undefined, {\n transform: normalizeOptionalIndex,\n });\n public readonly selectionMode = input<TngGridSelectionMode, unknown>('none', {\n transform: normalizeSelectionMode,\n });\n public readonly value = input<TngGridNullablePosition | undefined, unknown>(undefined, {\n transform: normalizeGridValueInput,\n });\n public readonly defaultValue = input<TngGridNullablePosition | undefined, unknown>(undefined, {\n transform: normalizeGridValueInput,\n });\n public readonly wrap = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n public readonly focusRowChange = output<number | null>();\n public readonly focusColChange = output<number | null>();\n public readonly focusChange = output<TngGridFocusChangeEvent>();\n public readonly valueChange = output<TngGridNullablePosition>();\n public readonly cellActivate = output<TngGridActivateEvent>();\n\n @Input()\n public set ariaLabel(value: string | null) {\n this.ariaLabelValue = value;\n }\n\n @Input()\n public set ariaColcount(value: unknown) {\n this.ariaColcountValue = normalizeCount(value);\n }\n\n @Input()\n public set ariaRowcount(value: unknown) {\n this.ariaRowcountValue = normalizeCount(value);\n }\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'grid' as const;\n\n @HostBinding('attr.role')\n protected readonly role = 'grid' as const;\n\n @HostBinding('attr.aria-label')\n protected get ariaLabelAttr(): string | null {\n return this.ariaLabelValue;\n }\n\n @HostBinding('attr.aria-colcount')\n protected get ariaColcountAttr(): string | null {\n const explicitCount = this.ariaColcountValue;\n if (explicitCount !== null) {\n return String(explicitCount);\n }\n\n const computedCount = this.getComputedBounds().colCount;\n return this.cells.size > 0 ? String(computedCount) : null;\n }\n\n @HostBinding('attr.aria-rowcount')\n protected get ariaRowcountAttr(): string | null {\n const explicitCount = this.ariaRowcountValue;\n if (explicitCount !== null) {\n return String(explicitCount);\n }\n\n const computedCount = this.getComputedBounds().rowCount;\n return this.cells.size > 0 ? String(computedCount) : null;\n }\n\n public ngOnDestroy(): void {\n this.cells.clear();\n this.cellByKey.clear();\n }\n\n public registerCell(cell: TngGridCell): void {\n this.cells.add(cell);\n this.cellByKey.set(cell.cellKey(), cell);\n this.ensureUncontrolledSelectionInitialized();\n this.ensureFallbackFocus();\n }\n\n public unregisterCell(cell: TngGridCell): void {\n this.cells.delete(cell);\n this.cellByKey.delete(cell.cellKey());\n\n if (this.lastActivatedKey === cell.cellKey()) {\n this.lastActivatedKey = null;\n }\n\n if (this.focusVisibleKey === cell.cellKey()) {\n this.focusVisibleKey = null;\n }\n\n if (this.domFocusedKey === cell.cellKey()) {\n this.domFocusedKey = null;\n }\n\n if (\n !this.isFocusControlled()\n && this.uncontrolledFocus !== null\n && createCellKey(this.uncontrolledFocus) === cell.cellKey()\n ) {\n this.uncontrolledFocus = null;\n }\n\n if (\n !this.isSelectionControlled()\n && this.uncontrolledSelection !== null\n && createCellKey(this.uncontrolledSelection) === cell.cellKey()\n ) {\n this.uncontrolledSelection = null;\n }\n\n this.ensureFallbackFocus();\n }\n\n public isCellActivated(cell: TngGridCell): boolean {\n return this.lastActivatedKey === cell.cellKey();\n }\n\n public isCellDisabled(cell: TngGridCell): boolean {\n return cell.disabled();\n }\n\n public isCellFocusVisible(cell: TngGridCell): boolean {\n return this.focusVisibleKey === cell.cellKey();\n }\n\n public isCellFocused(cell: TngGridCell): boolean {\n return this.domFocusedKey === cell.cellKey();\n }\n\n public isCellTabStop(cell: TngGridCell): boolean {\n const active = this.getActiveCell();\n return active !== null && active.cellKey() === cell.cellKey();\n }\n\n public isCellSelected(cell: TngGridCell): boolean {\n const explicitSelected = cell.selected();\n if (explicitSelected !== null) {\n return explicitSelected;\n }\n\n const selectedValue = this.getSelectedValue();\n return selectedValue !== null && cell.matchesValue(selectedValue);\n }\n\n public getCellTabIndex(cell: TngGridCell): string {\n if (this.isCellDisabled(cell)) {\n return '-1';\n }\n\n return this.isCellTabStop(cell) ? '0' : '-1';\n }\n\n public onCellClicked(cell: TngGridCell): void {\n if (this.isCellDisabled(cell)) {\n return;\n }\n\n if (this.selectionMode() === 'single') {\n this.requestSelection(cell.getValue());\n }\n }\n\n public onCellFocused(cell: TngGridCell): void {\n if (this.isCellDisabled(cell)) {\n return;\n }\n\n const trigger = this.pendingFocusTrigger ?? 'programmatic';\n this.pendingFocusTrigger = null;\n this.domFocusedKey = cell.cellKey();\n this.requestFocus(cell.getValue(), trigger);\n this.focusVisibleKey = trigger === 'keyboard' || cell.isFocusVisible()\n ? cell.cellKey()\n : null;\n }\n\n public onCellPointerDown(cell: TngGridCell): void {\n if (this.isCellDisabled(cell)) {\n return;\n }\n\n this.pendingFocusTrigger = 'pointer';\n this.focusVisibleKey = null;\n }\n\n public onCellSelectionRequest(cell: TngGridCell, trigger: Extract<TngGridInteractionTrigger, 'keyboard' | 'pointer'>): void {\n if (this.isCellDisabled(cell)) {\n return;\n }\n\n this.lastActivatedKey = cell.cellKey();\n if (this.selectionMode() === 'single') {\n this.requestSelection(cell.getValue());\n }\n\n this.cellActivate.emit(\n Object.freeze({\n col: cell.colIndex(),\n row: cell.rowIndex(),\n trigger,\n }),\n );\n }\n\n @HostListener('focusout', ['$event'])\n protected onFocusOut(event: FocusEvent): void {\n const nextTarget = event.relatedTarget;\n if (nextTarget instanceof Node && this.hostRef.nativeElement.contains(nextTarget)) {\n return;\n }\n\n this.domFocusedKey = null;\n this.focusVisibleKey = null;\n this.pendingFocusTrigger = null;\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeyDown(event: KeyboardEvent): void {\n const activeCell = this.getActiveCell();\n if (activeCell === null || this.isCellDisabled(activeCell)) {\n return;\n }\n\n const action = resolveGridNavigationKeyAction(event, {\n direction: this.dir(),\n });\n if (action === null) {\n return;\n }\n\n if (action.preventDefault) {\n event.preventDefault();\n }\n\n if (action.type === 'exit') {\n return;\n }\n\n if (action.type === 'activate') {\n this.onCellSelectionRequest(activeCell, 'keyboard');\n return;\n }\n\n this.moveFocus(activeCell, action.type);\n }\n\n private ensureFallbackFocus(): void {\n if (this.isFocusControlled()) {\n return;\n }\n\n const currentFocus = this.uncontrolledFocus;\n if (currentFocus !== null) {\n const currentCell = this.cellByKey.get(createCellKey(currentFocus));\n if (currentCell !== undefined && !this.isCellDisabled(currentCell)) {\n return;\n }\n }\n\n const fallback = this.getFirstEnabledCell();\n this.uncontrolledFocus = fallback?.getValue() ?? null;\n }\n\n private ensureUncontrolledSelectionInitialized(): void {\n if (this.selectionInitialized || this.isSelectionControlled()) {\n return;\n }\n\n this.selectionInitialized = true;\n this.uncontrolledSelection = this.defaultValue() ?? null;\n }\n\n private getActiveCell(): TngGridCell | null {\n const focusValue = this.getFocusValue();\n if (focusValue === null) {\n return this.getFirstEnabledCell();\n }\n\n return this.cellByKey.get(createCellKey(focusValue)) ?? this.getFirstEnabledCell();\n }\n\n private getComputedBounds(): Readonly<{ colCount: number; rowCount: number }> {\n const explicitColcount = this.ariaColcountValue;\n const explicitRowcount = this.ariaRowcountValue;\n if (explicitColcount !== null && explicitRowcount !== null) {\n return Object.freeze({\n colCount: explicitColcount,\n rowCount: explicitRowcount,\n });\n }\n\n let maxCol = 0;\n let maxRow = 0;\n for (const cell of this.cells) {\n maxCol = Math.max(maxCol, cell.colIndex());\n maxRow = Math.max(maxRow, cell.rowIndex());\n }\n\n return Object.freeze({\n colCount: explicitColcount ?? maxCol + 1,\n rowCount: explicitRowcount ?? maxRow + 1,\n });\n }\n\n private getFirstEnabledCell(): TngGridCell | null {\n const enabledCells = this.getEnabledCells();\n return enabledCells[0] ?? null;\n }\n\n private getEnabledCells(): readonly TngGridCell[] {\n return [...this.cells]\n .filter((cell) => !this.isCellDisabled(cell))\n .sort((a, b) => compareCellValues(a.getValue(), b.getValue()));\n }\n\n private getFocusValue(): TngGridNullablePosition {\n if (this.isFocusControlled()) {\n const row = this.focusRow();\n const col = this.focusCol();\n if (row === null || col === null || row === undefined || col === undefined) {\n return this.getFirstEnabledCell()?.getValue() ?? null;\n }\n\n const controlled = Object.freeze({ col, row });\n const controlledCell = this.cellByKey.get(createCellKey(controlled));\n if (controlledCell !== undefined && !this.isCellDisabled(controlledCell)) {\n return controlled;\n }\n\n return this.getFirstEnabledCell()?.getValue() ?? null;\n }\n\n if (this.uncontrolledFocus !== null) {\n const activeCell = this.cellByKey.get(createCellKey(this.uncontrolledFocus));\n if (activeCell !== undefined && !this.isCellDisabled(activeCell)) {\n return this.uncontrolledFocus;\n }\n }\n\n return this.getFirstEnabledCell()?.getValue() ?? null;\n }\n\n private getNavigableCells(): readonly TngGridNavigableCell[] {\n return [...this.cells].map((cell) => ({\n col: cell.colIndex(),\n disabled: this.isCellDisabled(cell),\n row: cell.rowIndex(),\n }));\n }\n\n private getSelectedValue(): TngGridNullablePosition {\n if (this.selectionMode() === 'none') {\n return null;\n }\n\n if (this.isSelectionControlled()) {\n return this.value() ?? null;\n }\n\n return this.uncontrolledSelection;\n }\n\n private isFocusControlled(): boolean {\n return this.focusRow() !== undefined && this.focusCol() !== undefined;\n }\n\n private isSelectionControlled(): boolean {\n return this.value() !== undefined;\n }\n\n private moveFocus(activeCell: TngGridCell, actionType: Exclude<TngGridNavigationActionType, 'activate' | 'exit'>): void {\n const nextValue = resolveNavigableGridCell(activeCell.getValue(), actionType, {\n bounds: this.getComputedBounds(),\n cells: this.getNavigableCells(),\n wrap: this.wrap(),\n });\n\n if (nextValue === null) {\n return;\n }\n\n const nextCell = this.cellByKey.get(createCellKey(nextValue));\n if (nextCell === undefined || this.isCellDisabled(nextCell)) {\n return;\n }\n\n this.pendingFocusTrigger = 'keyboard';\n this.requestFocus(nextValue, 'keyboard');\n this.focusVisibleKey = nextCell.cellKey();\n nextCell.focusHost();\n }\n\n private requestFocus(value: TngGridCellValue, trigger: TngGridInteractionTrigger): void {\n const previous = this.getFocusValue();\n if (positionsEqual(previous, value)) {\n return;\n }\n\n if (!this.isFocusControlled()) {\n this.uncontrolledFocus = value;\n }\n\n this.focusRowChange.emit(value.row);\n this.focusColChange.emit(value.col);\n this.focusChange.emit(focusChangeEvent(value, previous, trigger));\n }\n\n private requestSelection(value: TngGridNullablePosition): void {\n const previous = this.getSelectedValue();\n if (positionsEqual(previous, value)) {\n return;\n }\n\n if (!this.isSelectionControlled()) {\n this.uncontrolledSelection = value;\n }\n\n this.valueChange.emit(value);\n }\n}\n\n@Directive({\n selector: '[tngGridRow]',\n exportAs: 'tngGridRow',\n})\nexport class TngGridRow {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'grid-row' as const;\n\n @HostBinding('attr.role')\n protected readonly role = 'row' as const;\n}\n\n@Directive({\n selector: '[tngGridCell]',\n exportAs: 'tngGridCell',\n})\nexport class TngGridCell implements OnInit, OnDestroy {\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly grid = inject(TngGrid);\n\n public readonly rowIndex = input.required<number, unknown>({\n transform: normalizeIndex,\n });\n public readonly colIndex = input.required<number, unknown>({\n transform: normalizeIndex,\n });\n public readonly rowSpan = input<number, unknown>(1, {\n transform: normalizeSpan,\n });\n public readonly colSpan = input<number, unknown>(1, {\n transform: normalizeSpan,\n });\n public readonly disabled = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n public readonly selected = input<boolean | null, unknown>(null, {\n transform: (value: unknown): boolean | null => {\n if (value === undefined || value === null) {\n return null;\n }\n\n return booleanAttribute(value);\n },\n });\n public readonly cellRole = input<TngGridCellRole, unknown>('gridcell', {\n transform: normalizeCellRole,\n });\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'gridcell' as const;\n\n @HostBinding('attr.role')\n protected get roleAttr(): TngGridCellRole {\n return this.cellRole();\n }\n\n @HostBinding('attr.tabindex')\n protected get tabIndexAttr(): string {\n return this.grid.getCellTabIndex(this);\n }\n\n @HostBinding('attr.aria-rowindex')\n protected get ariaRowIndexAttr(): string {\n return String(this.rowIndex() + 1);\n }\n\n @HostBinding('attr.aria-colindex')\n protected get ariaColIndexAttr(): string {\n return String(this.colIndex() + 1);\n }\n\n @HostBinding('attr.aria-rowspan')\n protected get ariaRowSpanAttr(): string | null {\n return this.rowSpan() > 1 ? String(this.rowSpan()) : null;\n }\n\n @HostBinding('attr.aria-colspan')\n protected get ariaColSpanAttr(): string | null {\n return this.colSpan() > 1 ? String(this.colSpan()) : null;\n }\n\n @HostBinding('attr.aria-disabled')\n protected get ariaDisabledAttr(): string | null {\n return this.grid.isCellDisabled(this) ? 'true' : null;\n }\n\n @HostBinding('attr.aria-selected')\n protected get ariaSelectedAttr(): string | null {\n if (this.cellRole() !== 'gridcell' && this.selected() === null) {\n return null;\n }\n\n if (this.cellRole() !== 'gridcell' && this.selected() !== null) {\n return this.selected() ? 'true' : 'false';\n }\n\n if (this.grid.selectionMode() === 'none' && this.selected() === null) {\n return null;\n }\n\n return this.grid.isCellSelected(this) ? 'true' : 'false';\n }\n\n @HostBinding('attr.data-row-index')\n protected get dataRowIndexAttr(): string {\n return String(this.rowIndex());\n }\n\n @HostBinding('attr.data-col-index')\n protected get dataColIndexAttr(): string {\n return String(this.colIndex());\n }\n\n @HostBinding('attr.data-row-span')\n protected get dataRowSpanAttr(): string | null {\n return this.rowSpan() > 1 ? String(this.rowSpan()) : null;\n }\n\n @HostBinding('attr.data-col-span')\n protected get dataColSpanAttr(): string | null {\n return this.colSpan() > 1 ? String(this.colSpan()) : null;\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabledAttr(): '' | null {\n return this.grid.isCellDisabled(this) ? '' : null;\n }\n\n @HostBinding('attr.data-selected')\n protected get dataSelectedAttr(): '' | null {\n return this.grid.isCellSelected(this) ? '' : null;\n }\n\n @HostBinding('attr.data-focused')\n protected get dataFocusedAttr(): '' | null {\n return this.grid.isCellFocused(this) ? '' : null;\n }\n\n @HostBinding('attr.data-focus-visible')\n protected get dataFocusVisibleAttr(): '' | null {\n return this.grid.isCellFocusVisible(this) ? '' : null;\n }\n\n @HostBinding('attr.data-activated')\n protected get dataActivatedAttr(): '' | null {\n return this.grid.isCellActivated(this) ? '' : null;\n }\n\n public ngOnInit(): void {\n this.grid.registerCell(this);\n }\n\n public ngOnDestroy(): void {\n this.grid.unregisterCell(this);\n }\n\n public cellKey(): string {\n return createCellKey(this.getValue());\n }\n\n public focusHost(): void {\n this.hostRef.nativeElement.focus();\n }\n\n public getHostElement(): HTMLElement {\n return this.hostRef.nativeElement;\n }\n\n public getValue(): TngGridCellValue {\n return Object.freeze({\n col: this.colIndex(),\n row: this.rowIndex(),\n });\n }\n\n public isFocusVisible(): boolean {\n return this.hostRef.nativeElement.matches(':focus-visible');\n }\n\n public matchesValue(value: TngGridCellValue): boolean {\n return this.rowIndex() === value.row && this.colIndex() === value.col;\n }\n\n @HostListener('click')\n protected onClick(): void {\n if (this.grid.isCellDisabled(this)) {\n return;\n }\n\n this.grid.onCellClicked(this);\n }\n\n @HostListener('dblclick')\n protected onDoubleClick(): void {\n if (this.grid.isCellDisabled(this)) {\n return;\n }\n\n this.grid.onCellSelectionRequest(this, 'pointer');\n }\n\n @HostListener('focus')\n protected onFocus(): void {\n this.grid.onCellFocused(this);\n }\n\n @HostListener('pointerdown')\n protected onPointerDown(): void {\n this.grid.onCellPointerDown(this);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-separator.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/separator/tng-separator.ts"],"names":[],"mappings":";AAEA,MAAM,MAAM,uBAAuB,GAAG,YAAY,GAAG,UAAU,CAAC;AAEhE,
|
|
1
|
+
{"version":3,"file":"tng-separator.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/separator/tng-separator.ts"],"names":[],"mappings":";AAEA,MAAM,MAAM,uBAAuB,GAAG,YAAY,GAAG,UAAU,CAAC;AAEhE,qBAIa,YAAY;IACvB,SAAgB,UAAU,8EAEvB;IACH,SAAgB,WAAW,+DAAgD;IAG3E,SAAS,KAAK,cAAc,IAAI,MAAM,GAAG,IAAI,CAE5C;IAGD,SAAS,KAAK,mBAAmB,IAAI,uBAAuB,GAAG,IAAI,CAMlE;IAGD,SAAS,KAAK,mBAAmB,IAAI,uBAAuB,CAE3D;IAGD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,WAAW,CAAU;IAGnD,SAAS,KAAK,QAAQ,IAAI,WAAW,GAAG,IAAI,CAE3C;yCA/BU,YAAY;2CAAZ,YAAY;CAgCxB"}
|
|
@@ -27,7 +27,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
27
27
|
args: [{
|
|
28
28
|
selector: '[tngSeparator]',
|
|
29
29
|
exportAs: 'tngSeparator',
|
|
30
|
-
standalone: true,
|
|
31
30
|
}]
|
|
32
31
|
}], propDecorators: { decorative: [{ type: i0.Input, args: [{ isSignal: true, alias: "decorative", required: false }] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], ariaHiddenAttr: [{
|
|
33
32
|
type: HostBinding,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-separator.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/separator/tng-separator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;;
|
|
1
|
+
{"version":3,"file":"tng-separator.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/separator/tng-separator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;;AAQhF,MAAM,OAAO,YAAY;IACP,UAAU,GAAG,KAAK,CAA4B,IAAI,uDAChE,SAAS,EAAE,gBAAgB,GAC3B,CAAC;IACa,WAAW,GAAG,KAAK,CAA0B,YAAY,uDAAC,CAAC;IAE3E,IACc,cAAc;QAC1B,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3C,CAAC;IAED,IACc,mBAAmB;QAC/B,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;IAED,IACc,mBAAmB;QAC/B,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;IAGkB,QAAQ,GAAG,WAAoB,CAAC;IAEnD,IACc,QAAQ;QACpB,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC;IAChD,CAAC;uGA/BU,YAAY;2FAAZ,YAAY;;2FAAZ,YAAY;kBAJxB,SAAS;mBAAC;oBACT,QAAQ,EAAE,gBAAgB;oBAC1B,QAAQ,EAAE,cAAc;iBACzB;;sBAOE,WAAW;uBAAC,kBAAkB;;sBAK9B,WAAW;uBAAC,uBAAuB;;sBASnC,WAAW;uBAAC,uBAAuB;;sBAKnC,WAAW;uBAAC,gBAAgB;;sBAG5B,WAAW;uBAAC,WAAW","sourcesContent":["import { booleanAttribute, Directive, HostBinding, input } from '@angular/core';\n\nexport type TngSeparatorOrientation = 'horizontal' | 'vertical';\n\n@Directive({\n selector: '[tngSeparator]',\n exportAs: 'tngSeparator',\n})\nexport class TngSeparator {\n public readonly decorative = input<boolean, boolean | string>(true, {\n transform: booleanAttribute,\n });\n public readonly orientation = input<TngSeparatorOrientation>('horizontal');\n\n @HostBinding('attr.aria-hidden')\n protected get ariaHiddenAttr(): 'true' | null {\n return this.decorative() ? 'true' : null;\n }\n\n @HostBinding('attr.aria-orientation')\n protected get ariaOrientationAttr(): TngSeparatorOrientation | null {\n if (this.decorative()) {\n return null;\n }\n\n return this.orientation();\n }\n\n @HostBinding('attr.data-orientation')\n protected get dataOrientationAttr(): TngSeparatorOrientation {\n return this.orientation();\n }\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'separator' as const;\n\n @HostBinding('attr.role')\n protected get roleAttr(): 'separator' | null {\n return this.decorative() ? null : 'separator';\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-stepper.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/stepper/tng-stepper.ts"],"names":[],"mappings":";AAEA,
|
|
1
|
+
{"version":3,"file":"tng-stepper.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/stepper/tng-stepper.ts"],"names":[],"mappings":";AAEA,qBAIa,UAAU;IAErB,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,SAAS,CAAU;yCAFtC,UAAU;2CAAV,UAAU;CAGtB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-stepper.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/stepper/tng-stepper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;;
|
|
1
|
+
{"version":3,"file":"tng-stepper.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/stepper/tng-stepper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;;AAMvD,MAAM,OAAO,UAAU;IAEF,QAAQ,GAAG,SAAkB,CAAC;uGAFtC,UAAU;2FAAV,UAAU;;2FAAV,UAAU;kBAJtB,SAAS;mBAAC;oBACT,QAAQ,EAAE,cAAc;oBACxB,QAAQ,EAAE,YAAY;iBACvB;;sBAEE,WAAW;uBAAC,gBAAgB","sourcesContent":["import { Directive, HostBinding } from '@angular/core';\n\n@Directive({\n selector: '[tngStepper]',\n exportAs: 'tngStepper',\n})\nexport class TngStepper {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'stepper' as const;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-tree.test-harness.d.ts","sourceRoot":"","sources":["../../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/tree/__tests__/tng-tree.test-harness.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,gBAAgB,EAAW,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,KAAK,kBAAkB,EAAwD,KAAK,oBAAoB,EAAE,KAAK,YAAY,EAAE,MAAM,UAAU,CAAC;;AAEvJ,
|
|
1
|
+
{"version":3,"file":"tng-tree.test-harness.d.ts","sourceRoot":"","sources":["../../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/tree/__tests__/tng-tree.test-harness.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,gBAAgB,EAAW,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,KAAK,kBAAkB,EAAwD,KAAK,oBAAoB,EAAE,KAAK,YAAY,EAAE,MAAM,UAAU,CAAC;;AAEvJ,qBA6Ca,uBAAuB;IAClC,SAAgB,YAAY,EAAE,KAAK,CAAC,YAAY,GAAG,SAAS,YAAY,EAAE,GAAG,IAAI,CAAC,CAAM;IACjF,YAAY,EAAE,YAAY,GAAG,SAAS,YAAY,EAAE,GAAG,IAAI,GAAG,SAAS,CAAa;IACpF,WAAW,EAAE,kBAAkB,CAAc;IAC7C,YAAY,UAAS;IACrB,aAAa,EAAE,oBAAoB,CAAU;IAC7C,KAAK,EAAE,YAAY,GAAG,SAAS,YAAY,EAAE,GAAG,IAAI,GAAG,SAAS,CAAa;IAE7E,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,SAAS,YAAY,EAAE,GAAG,IAAI,GAAG,IAAI;IAIzE,iBAAiB,IAAI,IAAI;yCAZrB,uBAAuB;2CAAvB,uBAAuB;CAenC;AAED,KAAK,uBAAuB,GAAG,OAAO,CACpC,IAAI,CACF,uBAAuB,EACvB,cAAc,GAAG,aAAa,GAAG,cAAc,GAAG,eAAe,GAAG,OAAO,CAC5E,CACF,CAAC;AAEF,wBAAgB,wBAAwB,CACtC,YAAY,GAAE,uBAA4B,GACzC,gBAAgB,CAAC,uBAAuB,CAAC,CAQ3C;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,gBAAgB,CAAC,uBAAuB,CAAC,GAAG,WAAW,CAM3F;AAED,wBAAgB,OAAO,CACrB,OAAO,EAAE,gBAAgB,CAAC,uBAAuB,CAAC,EAClD,EAAE,EAAE,MAAM,GACT,WAAW,CAMb;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,UAAU,CAI7D;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,IAAI,CAAC,iBAAiB,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAM,GACnF,aAAa,CASf"}
|
|
@@ -62,7 +62,6 @@ export class TngTreeHarnessComponent {
|
|
|
62
62
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngTreeHarnessComponent, decorators: [{
|
|
63
63
|
type: Component,
|
|
64
64
|
args: [{
|
|
65
|
-
standalone: true,
|
|
66
65
|
imports: [TngTree, TngTreeItem, TngTreeGroup, TngTreeIndicator],
|
|
67
66
|
template: `
|
|
68
67
|
<button data-testid="before" type="button">Before</button>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-tree.test-harness.js","sourceRoot":"","sources":["../../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/tree/__tests__/tng-tree.test-harness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAyB,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAA2B,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAgD,MAAM,UAAU,CAAC;;
|
|
1
|
+
{"version":3,"file":"tng-tree.test-harness.js","sourceRoot":"","sources":["../../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/tree/__tests__/tng-tree.test-harness.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component } from '@angular/core';\nimport { type ComponentFixture, TestBed } from '@angular/core/testing';\nimport { type TngTreeOrientation, TngTree, TngTreeGroup, TngTreeIndicator, TngTreeItem, type TngTreeSelectionMode, type TngTreeValue } from '../index';\n\n@Component({\n imports: [TngTree, TngTreeItem, TngTreeGroup, TngTreeIndicator],\n template: `\n <button data-testid=\"before\" type=\"button\">Before</button>\n\n <div\n data-testid=\"tree\"\n tngTree\n [defaultValue]=\"defaultValue\"\n [orientation]=\"orientation\"\n [selectionMode]=\"selectionMode\"\n [value]=\"value\"\n (valueChange)=\"onValueChange($event)\"\n >\n <div\n tngTreeItem\n [defaultExpanded]=\"rootExpanded\"\n [value]=\"'root-a'\"\n aria-label=\"Alpha\"\n id=\"root-a\"\n >\n <span tngTreeIndicator aria-hidden=\"true\">▶</span>\n Root A\n\n <div tngTreeGroup>\n <div tngTreeItem [value]=\"'a-1'\" aria-label=\"Able\" id=\"a-1\">A-1</div>\n <div\n tngTreeItem\n [disabled]=\"true\"\n [value]=\"'a-2'\"\n aria-label=\"Beta Disabled\"\n id=\"a-2\"\n >\n A-2 Disabled\n </div>\n <div tngTreeItem [value]=\"'a-3'\" aria-label=\"Charlie\" id=\"a-3\">A-3</div>\n </div>\n </div>\n\n <div tngTreeItem [value]=\"'root-b'\" aria-label=\"Beta\" id=\"root-b\">Root B</div>\n </div>\n\n <button data-testid=\"after\" type=\"button\">After</button>\n `,\n})\nexport class TngTreeHarnessComponent {\n public readonly valueChanges: Array<TngTreeValue | readonly TngTreeValue[] | null> = [];\n public defaultValue: TngTreeValue | readonly TngTreeValue[] | null | undefined = undefined;\n public orientation: TngTreeOrientation = 'vertical';\n public rootExpanded = false;\n public selectionMode: TngTreeSelectionMode = 'none';\n public value: TngTreeValue | readonly TngTreeValue[] | null | undefined = undefined;\n\n public onValueChange(value: TngTreeValue | readonly TngTreeValue[] | null): void {\n this.valueChanges.push(value);\n }\n\n public resetValueChanges(): void {\n this.valueChanges.length = 0;\n }\n}\n\ntype TreeHarnessInitialState = Partial<\n Pick<\n TngTreeHarnessComponent,\n 'defaultValue' | 'orientation' | 'rootExpanded' | 'selectionMode' | 'value'\n >\n>;\n\nexport function createTreeHarnessFixture(\n initialState: TreeHarnessInitialState = {},\n): ComponentFixture<TngTreeHarnessComponent> {\n TestBed.configureTestingModule({\n imports: [TngTreeHarnessComponent],\n });\n const fixture = TestBed.createComponent(TngTreeHarnessComponent);\n Object.assign(fixture.componentInstance, initialState);\n fixture.detectChanges();\n return fixture;\n}\n\nexport function getTreeHost(fixture: ComponentFixture<TngTreeHarnessComponent>): HTMLElement {\n const tree = fixture.nativeElement.querySelector('[data-testid=\"tree\"]');\n if (!(tree instanceof HTMLElement)) {\n throw new Error('Expected tree host element.');\n }\n return tree;\n}\n\nexport function getItem(\n fixture: ComponentFixture<TngTreeHarnessComponent>,\n id: string,\n): HTMLElement {\n const element = fixture.nativeElement.querySelector(`#${id}`);\n if (!(element instanceof HTMLElement)) {\n throw new Error(`Expected tree item #${id}.`);\n }\n return element;\n}\n\nexport function clickElement(element: HTMLElement): MouseEvent {\n const event = new MouseEvent('click', { bubbles: true, cancelable: true });\n element.dispatchEvent(event);\n return event;\n}\n\nexport function dispatchKeydown(\n target: HTMLElement,\n key: string,\n options: Pick<KeyboardEventInit, 'shiftKey' | 'ctrlKey' | 'metaKey' | 'altKey'> = {},\n): KeyboardEvent {\n const event = new KeyboardEvent('keydown', {\n bubbles: true,\n cancelable: true,\n key,\n ...options,\n });\n target.dispatchEvent(event);\n return event;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-tree-group.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/tree/tng-tree-group.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,SAAS,EACT,MAAM,EACP,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;;AAE9C,
|
|
1
|
+
{"version":3,"file":"tng-tree-group.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/tree/tng-tree-group.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,SAAS,EACT,MAAM,EACP,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;;AAE9C,qBAIa,YAAa,YAAW,MAAM,EAAE,SAAS;IACpD,SAAgB,UAAU,qBAA2D;IAGrF,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,YAAY,CAAU;IAGpD,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAG,OAAO,CAAU;IAE3C,QAAQ,IAAI,IAAI;IAIhB,WAAW,IAAI,IAAI;yCAbR,YAAY;2CAAZ,YAAY;CAgBxB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-tree-group.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/tree/tng-tree-group.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAET,WAAW,EACX,MAAM,GAGP,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;;
|
|
1
|
+
{"version":3,"file":"tng-tree-group.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/tree/tng-tree-group.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAET,WAAW,EACX,MAAM,GAGP,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;;AAM9C,MAAM,OAAO,YAAY;IACP,UAAU,GAAG,MAAM,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAGlE,QAAQ,GAAG,YAAqB,CAAC;IAGjC,IAAI,GAAG,OAAgB,CAAC;IAE3C,QAAQ;QACN,IAAI,CAAC,UAAU,EAAE,kBAAkB,EAAE,CAAC;IACxC,CAAC;IAED,WAAW;QACT,IAAI,CAAC,UAAU,EAAE,oBAAoB,EAAE,CAAC;IAC1C,CAAC;uGAfU,YAAY;2FAAZ,YAAY;;2FAAZ,YAAY;kBAJxB,SAAS;mBAAC;oBACT,QAAQ,EAAE,gBAAgB;oBAC1B,QAAQ,EAAE,cAAc;iBACzB;;sBAIE,WAAW;uBAAC,gBAAgB;;sBAG5B,WAAW;uBAAC,WAAW","sourcesContent":["import {\n Directive,\n ElementRef,\n HostBinding,\n inject,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { TngTreeItem } from './tng-tree-item';\n\n@Directive({\n selector: '[tngTreeGroup]',\n exportAs: 'tngTreeGroup',\n})\nexport class TngTreeGroup implements OnInit, OnDestroy {\n public readonly parentItem = inject(TngTreeItem, { optional: true, skipSelf: true });\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'tree-group' as const;\n\n @HostBinding('attr.role')\n protected readonly role = 'group' as const;\n\n ngOnInit(): void {\n this.parentItem?.registerChildGroup();\n }\n\n ngOnDestroy(): void {\n this.parentItem?.unregisterChildGroup();\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-tree-indicator.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/tree/tng-tree-indicator.ts"],"names":[],"mappings":";AASA,
|
|
1
|
+
{"version":3,"file":"tng-tree-indicator.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/tree/tng-tree-indicator.ts"],"names":[],"mappings":";AASA,qBAIa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA2C;IAChE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAuC;IAG5D,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,gBAAgB,CAAU;IAGxD,SAAS,KAAK,YAAY,IAAI,MAAM,GAAG,OAAO,CAE7C;IAGD,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;yCAb/B,gBAAgB;2CAAhB,gBAAgB;CAmB5B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-tree-indicator.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/tree/tng-tree-indicator.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,WAAW,EACX,YAAY,EACZ,MAAM,GACP,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;;
|
|
1
|
+
{"version":3,"file":"tng-tree-indicator.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/tree/tng-tree-indicator.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,WAAW,EACX,YAAY,EACZ,MAAM,GACP,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;;AAM9C,MAAM,OAAO,gBAAgB;IACV,IAAI,GAAG,MAAM,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAGzC,QAAQ,GAAG,gBAAyB,CAAC;IAExD,IACc,YAAY;QACxB,OAAO,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IACpD,CAAC;IAGS,OAAO,CAAC,KAAiB;QACjC,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;uGAlBU,gBAAgB;2FAAhB,gBAAgB;;2FAAhB,gBAAgB;kBAJ5B,SAAS;mBAAC;oBACT,QAAQ,EAAE,oBAAoB;oBAC9B,QAAQ,EAAE,kBAAkB;iBAC7B;;sBAKE,WAAW;uBAAC,gBAAgB;;sBAG5B,WAAW;uBAAC,oBAAoB;;sBAKhC,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC","sourcesContent":["import {\n Directive,\n HostBinding,\n HostListener,\n inject,\n} from '@angular/core';\nimport { TngTree } from './tng-tree';\nimport { TngTreeItem } from './tng-tree-item';\n\n@Directive({\n selector: '[tngTreeIndicator]',\n exportAs: 'tngTreeIndicator',\n})\nexport class TngTreeIndicator {\n private readonly item = inject(TngTreeItem, { optional: true });\n private readonly tree = inject(TngTree, { optional: true });\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'tree-indicator' as const;\n\n @HostBinding('attr.data-expanded')\n protected get dataExpanded(): 'true' | 'false' {\n return this.item?.isExpanded() ? 'true' : 'false';\n }\n\n @HostListener('click', ['$event'])\n protected onClick(event: MouseEvent): void {\n event.stopPropagation();\n if (this.item && this.tree) {\n this.tree.onIndicatorClicked(this.item);\n }\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-tree-item.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/tree/tng-tree-item.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAGvD,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,uBAAuB,CAAC;;AAE/B,
|
|
1
|
+
{"version":3,"file":"tng-tree-item.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/tree/tng-tree-item.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAGvD,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,uBAAuB,CAAC;;AAE/B,qBAIa,WAAY,YAAW,MAAM,EAAE,SAAS;IACnD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+C;IACvE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAuC;IAC5D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA0H;IAEtJ,SAAgB,KAAK,0EAElB;IAEH,SAAgB,QAAQ,iFAErB;IAEH,SAAgB,eAAe,qEAE5B;IAEH,SAAgB,QAAQ,qEAErB;IAEH,SAAgB,cAAc,oDAAqB;IAEnD,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,iBAAiB,CAAS;IAGlC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,WAAW,CAAU;IAGnD,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAG,UAAU,CAAU;IAG9C,SAAS,KAAK,YAAY,IAAI,MAAM,GAAG,IAAI,CAG1C;IAGD,SAAS,KAAK,YAAY,IAAI,MAAM,GAAG,IAAI,CAG1C;IAGD,SAAS,KAAK,QAAQ,IAAI,MAAM,CAE/B;IAGD,SAAS,KAAK,YAAY,IAAI,MAAM,GAAG,OAAO,CAE7C;IAGD,SAAS,KAAK,YAAY,IAAI,MAAM,GAAG,OAAO,CAG7C;IAGD,SAAS,KAAK,YAAY,IAAI,MAAM,GAAG,OAAO,CAE7C;IAEM,QAAQ,IAAI,IAAI;IAOhB,WAAW,IAAI,IAAI;IAInB,QAAQ,IAAI,YAAY;IAIxB,cAAc,IAAI,WAAW;IAI7B,aAAa,IAAI,WAAW,GAAG,IAAI;IAInC,UAAU,IAAI,OAAO;IAIrB,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAQpC,SAAS,IAAI,OAAO;IAIpB,kBAAkB,IAAI,IAAI;IAI1B,oBAAoB,IAAI,IAAI;IAKnC,SAAS,CAAC,OAAO,IAAI,IAAI;IAKzB,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAMnC,SAAS,IAAI,IAAI;yCA5Hb,WAAW;2CAAX,WAAW;CA+HvB"}
|
|
@@ -97,7 +97,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
97
97
|
args: [{
|
|
98
98
|
selector: '[tngTreeItem]',
|
|
99
99
|
exportAs: 'tngTreeItem',
|
|
100
|
-
standalone: true,
|
|
101
100
|
}]
|
|
102
101
|
}], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }], expanded: [{ type: i0.Input, args: [{ isSignal: true, alias: "expanded", required: false }] }], defaultExpanded: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultExpanded", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], expandedChange: [{ type: i0.Output, args: ["expandedChange"] }], dataSlot: [{
|
|
103
102
|
type: HostBinding,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-tree-item.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/tree/tng-tree-item.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,UAAU,EACV,WAAW,EACX,YAAY,EACZ,MAAM,EACN,KAAK,EACL,MAAM,EACN,UAAU,GACX,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EACL,iCAAiC,EACjC,yBAAyB,EACzB,kBAAkB,GAEnB,MAAM,uBAAuB,CAAC;;
|
|
1
|
+
{"version":3,"file":"tng-tree-item.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/tree/tng-tree-item.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n inject,\n input,\n output,\n forwardRef,\n} from '@angular/core';\nimport type { OnInit, OnDestroy } from '@angular/core';\nimport { TngTree } from './tng-tree';\nimport { TngTreeGroup } from './tng-tree-group';\nimport {\n normalizeOptionalBooleanAttribute,\n normalizeTreeBooleanInput,\n normalizeTreeValue,\n type TngTreeValue,\n} from './tng-tree.transforms';\n\n@Directive({\n selector: '[tngTreeItem]',\n exportAs: 'tngTreeItem',\n})\nexport class TngTreeItem implements OnInit, OnDestroy {\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly tree = inject(TngTree, { optional: true });\n private readonly parentGroup: TngTreeGroup | null = inject(forwardRef(() => TngTreeGroup), { optional: true, skipSelf: true }) as TngTreeGroup | null;\n\n public readonly value = input.required<TngTreeValue, unknown>({\n transform: normalizeTreeValue,\n });\n \n public readonly expanded = input<boolean, unknown>(undefined, {\n transform: normalizeOptionalBooleanAttribute,\n });\n \n public readonly defaultExpanded = input<boolean, unknown>(false, {\n transform: normalizeTreeBooleanInput,\n });\n \n public readonly disabled = input<boolean, unknown>(false, {\n transform: normalizeTreeBooleanInput,\n });\n\n public readonly expandedChange = output<boolean>();\n\n private uncontrolledExpanded = false;\n private hasChildrenStatus = false;\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'tree-item' as const;\n\n @HostBinding('attr.role')\n protected readonly role = 'treeitem' as const;\n\n @HostBinding('attr.aria-selected')\n protected get ariaSelected(): string | null {\n if (!this.tree || this.tree.selectionMode() === 'none') return null;\n return this.tree.isItemSelected(this) ? 'true' : 'false';\n }\n\n @HostBinding('attr.aria-expanded')\n protected get ariaExpanded(): string | null {\n if (!this.canExpand()) return null;\n return this.isExpanded() ? 'true' : 'false';\n }\n\n @HostBinding('attr.tabindex')\n protected get tabIndex(): string {\n return this.tree ? this.tree.getTriggerTabIndex(this) : '-1';\n }\n\n @HostBinding('attr.data-expanded')\n protected get dataExpanded(): 'true' | 'false' {\n return this.isExpanded() ? 'true' : 'false';\n }\n\n @HostBinding('attr.data-selected')\n protected get dataSelected(): 'true' | 'false' {\n if (!this.tree || this.tree.selectionMode() === 'none') return 'false';\n return this.tree.isItemSelected(this) ? 'true' : 'false';\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabled(): 'true' | 'false' {\n return this.tree?.isItemDisabled(this) ? 'true' : 'false';\n }\n\n public ngOnInit(): void {\n if (this.expanded() === undefined) {\n this.uncontrolledExpanded = this.defaultExpanded();\n }\n this.tree?.registerItem(this);\n }\n\n public ngOnDestroy(): void {\n this.tree?.unregisterItem(this);\n }\n\n public getValue(): TngTreeValue {\n return this.value();\n }\n\n public getHostElement(): HTMLElement {\n return this.hostRef.nativeElement;\n }\n\n public getParentItem(): TngTreeItem | null {\n return this.parentGroup?.parentItem ?? null;\n }\n\n public isExpanded(): boolean {\n return this.expanded() ?? this.uncontrolledExpanded;\n }\n\n public setExpanded(expanded: boolean): void {\n if (this.disabled()) return;\n if (this.expanded() === undefined) {\n this.uncontrolledExpanded = expanded;\n }\n this.expandedChange.emit(expanded);\n }\n\n public canExpand(): boolean {\n return this.hasChildrenStatus || this.expanded() !== undefined || this.defaultExpanded();\n }\n\n public registerChildGroup(): void {\n this.hasChildrenStatus = true;\n }\n\n public unregisterChildGroup(): void {\n this.hasChildrenStatus = false;\n }\n\n @HostListener('focus')\n protected onFocus(): void {\n this.tree?.onItemFocused(this);\n }\n\n @HostListener('click', ['$event'])\n protected onClick(event: MouseEvent): void {\n event.stopPropagation();\n this.tree?.onItemClicked(this);\n this.focusHost(); // Ensure it receives focus mentally on click\n }\n\n public focusHost(): void {\n this.hostRef.nativeElement.focus();\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-tree.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/tree/tng-tree.ts"],"names":[],"mappings":"AAAA,OAAO,EAQL,SAAS,EACV,MAAM,eAAe,CAAC;AAcvB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAML,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,YAAY,EAClB,MAAM,uBAAuB,CAAC;;AAE/B,YAAY,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AA+CpG,
|
|
1
|
+
{"version":3,"file":"tng-tree.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/tree/tng-tree.ts"],"names":[],"mappings":"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"}
|
|
@@ -520,7 +520,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
520
520
|
args: [{
|
|
521
521
|
selector: '[tngTree]',
|
|
522
522
|
exportAs: 'tngTree',
|
|
523
|
-
standalone: true,
|
|
524
523
|
}]
|
|
525
524
|
}], propDecorators: { selectionMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectionMode", required: false }] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], defaultValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultValue", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }], dataSlot: [{
|
|
526
525
|
type: HostBinding,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-tree.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/tree/tng-tree.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n inject,\n input,\n output,\n OnDestroy,\n} from '@angular/core';\nimport {\n createRovingFocusController,\n createTreeModel,\n createTypeaheadController,\n resolveListNavigationKeyAction,\n type TngListNavigationAction,\n type TngRovingFocusController,\n type TngTypeaheadController,\n type TngTypeaheadItem,\n type TngTreeModel,\n type TngTreeModelState,\n type TngTreeNode,\n} from '@tailng-ui/cdk';\nimport { TngTreeItem } from './tng-tree-item';\nimport {\n normalizeTreeBooleanInput,\n normalizeTreeOrientation,\n normalizeTreeSelectionMode,\n normalizeTreeValue,\n normalizeTreeValueInput,\n type TngTreeOrientation,\n type TngTreeSelectionMode,\n type TngTreeValue,\n} from './tng-tree.transforms';\n\nexport type { TngTreeOrientation, TngTreeSelectionMode, TngTreeValue } from './tng-tree.transforms';\n\ntype TngTreeBoundary = 'start' | 'end';\ntype TngTreeHorizontalKeyAction = 'collapse-or-parent' | 'expand-or-child';\n\ntype TngTreeModelItem = Readonly<{\n id: string;\n item: TngTreeItem;\n parentId: string | null;\n}>;\n\nfunction setsEqual(a: ReadonlySet<TngTreeValue>, b: ReadonlySet<TngTreeValue>): boolean {\n if (a.size !== b.size) return false;\n for (const value of a) {\n if (!b.has(value)) return false;\n }\n return true;\n}\n\nfunction isPrintableCharacter(value: string): boolean {\n return value.length === 1 && value.trim().length > 0;\n}\n\nfunction normalizeTypeaheadText(value: string): string {\n return value.replace(/\\s+/g, ' ').trim();\n}\n\nfunction hasDisallowedNavigationModifiers(event: KeyboardEvent): boolean {\n return event.altKey === true || event.ctrlKey === true || event.metaKey === true;\n}\n\nfunction resolveHorizontalTreeKeyAction(event: KeyboardEvent): TngTreeHorizontalKeyAction | null {\n if (hasDisallowedNavigationModifiers(event)) {\n return null;\n }\n\n if (event.key === 'ArrowLeft') {\n return 'collapse-or-parent';\n }\n\n if (event.key === 'ArrowRight') {\n return 'expand-or-child';\n }\n\n return null;\n}\n\n@Directive({\n selector: '[tngTree]',\n exportAs: 'tngTree',\n standalone: true,\n})\nexport class TngTree implements OnDestroy {\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly items = new Set<TngTreeItem>();\n private readonly modelIdByItem = new Map<TngTreeItem, string>();\n\n private readonly emptyModelNodes: readonly TngTreeNode[] = Object.freeze([]);\n private readonly emptyTypeaheadItems: readonly TngTypeaheadItem[] = Object.freeze([]);\n private model: TngTreeModel = createTreeModel({ nodes: this.emptyModelNodes });\n private modelState: TngTreeModelState = this.model.getState();\n private readonly roving: TngRovingFocusController = createRovingFocusController({\n itemIds: Object.freeze([]),\n });\n private readonly typeahead: TngTypeaheadController = createTypeaheadController({\n items: this.emptyTypeaheadItems,\n });\n\n private itemByModelId = new Map<string, TngTreeItem>();\n private childModelIdsByParentId = new Map<string, readonly string[]>();\n private nextModelId = 0;\n\n private uncontrolledSelection = new Set<TngTreeValue>();\n private initialized = false;\n\n readonly selectionMode = input<TngTreeSelectionMode, unknown>('none', {\n transform: normalizeTreeSelectionMode,\n });\n readonly orientation = input<TngTreeOrientation, unknown>('vertical', {\n transform: normalizeTreeOrientation,\n });\n readonly value = input<TngTreeValue | readonly TngTreeValue[] | null | undefined, unknown>(\n undefined,\n { transform: normalizeTreeValueInput },\n );\n readonly defaultValue = input<TngTreeValue | readonly TngTreeValue[] | null | undefined, unknown>(\n undefined,\n { transform: normalizeTreeValueInput },\n );\n readonly disabled = input<boolean, unknown>(false, {\n transform: normalizeTreeBooleanInput,\n });\n\n readonly valueChange = output<TngTreeValue | readonly TngTreeValue[] | null>();\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'tree' as const;\n\n @HostBinding('attr.role')\n protected readonly role = 'tree' as const;\n\n @HostBinding('attr.aria-orientation')\n protected get ariaOrientation(): string {\n return this.orientation();\n }\n\n @HostBinding('attr.aria-multiselectable')\n protected get ariaMultiselectable(): string | null {\n const mode = this.selectionMode();\n if (mode === 'none') return null;\n return mode === 'multiple' ? 'true' : 'false';\n }\n\n @HostBinding('attr.tabindex')\n protected get tabIndex(): string {\n if (this.disabled()) return '-1';\n\n const activeElement = document.activeElement;\n if (\n activeElement instanceof HTMLElement &&\n this.hostRef.nativeElement.contains(activeElement) &&\n activeElement !== this.hostRef.nativeElement\n ) {\n return '-1';\n }\n\n return '0';\n }\n\n ngOnDestroy(): void {\n this.items.clear();\n this.modelIdByItem.clear();\n this.itemByModelId.clear();\n this.childModelIdsByParentId.clear();\n }\n\n registerItem(item: TngTreeItem): void {\n this.items.add(item);\n this.ensureModelId(item);\n if (!this.initialized && this.items.size > 0 && !this.isControlled()) {\n this.initializeUncontrolledState();\n }\n this.rebuildModel(this.resolvePreferredActiveId());\n }\n\n unregisterItem(item: TngTreeItem): void {\n const wasSelected = this.getEffectiveSelectionSet().has(item.getValue());\n this.items.delete(item);\n\n const modelId = this.modelIdByItem.get(item);\n if (modelId !== undefined) {\n this.modelIdByItem.delete(item);\n this.itemByModelId.delete(modelId);\n }\n\n if (wasSelected && !this.isControlled()) {\n const next = new Set(this.uncontrolledSelection);\n next.delete(item.getValue());\n this.uncontrolledSelection = next;\n }\n\n this.rebuildModel(this.resolvePreferredActiveId());\n }\n\n isItemSelected(item: TngTreeItem): boolean {\n if (this.selectionMode() === 'none') {\n return false;\n }\n return this.getEffectiveSelectionSet().has(item.getValue());\n }\n\n isItemDisabled(item: TngTreeItem): boolean {\n return this.disabled() || item.disabled();\n }\n\n getTriggerTabIndex(item: TngTreeItem): string {\n if (this.isItemDisabled(item)) {\n return '-1';\n }\n\n const modelId = this.resolveModelId(item);\n return modelId !== null && this.roving.getActiveId() === modelId ? '0' : '-1';\n }\n\n onItemFocused(item: TngTreeItem): void {\n if (this.isItemDisabled(item)) {\n return;\n }\n\n const modelId = this.resolveModelId(item);\n if (modelId !== null) {\n this.applyModelState(this.model.setActiveId(modelId));\n }\n }\n\n onItemClicked(item: TngTreeItem): void {\n if (this.isItemDisabled(item)) return;\n\n if (this.selectionMode() !== 'none') {\n this.requestToggleSelection(item);\n }\n\n const modelId = this.resolveModelId(item);\n if (modelId !== null) {\n this.applyModelState(this.model.setActiveId(modelId));\n }\n }\n\n onIndicatorClicked(item: TngTreeItem): void {\n if (this.isItemDisabled(item)) return;\n\n if (item.canExpand()) {\n item.setExpanded(!item.isExpanded());\n const modelId = this.resolveModelId(item);\n this.rebuildModel(modelId);\n }\n\n item.focusHost();\n }\n\n private isControlled(): boolean {\n return this.value() !== undefined;\n }\n\n private initializeUncontrolledState(): void {\n this.initialized = true;\n const defaultInput = this.defaultValue();\n let initialValues: readonly TngTreeValue[] = [];\n if (defaultInput !== undefined && defaultInput !== null) {\n initialValues = Array.isArray(defaultInput)\n ? defaultInput.map(normalizeTreeValue)\n : [normalizeTreeValue(defaultInput)];\n }\n this.uncontrolledSelection = new Set(initialValues);\n }\n\n private getEffectiveSelectionSet(): ReadonlySet<TngTreeValue> {\n if (!this.isControlled()) {\n return this.uncontrolledSelection;\n }\n\n const val = this.value();\n let controlledValues: readonly TngTreeValue[] = [];\n if (val !== undefined && val !== null) {\n controlledValues = Array.isArray(val) ? val.map(normalizeTreeValue) : [normalizeTreeValue(val)];\n }\n return new Set(controlledValues);\n }\n\n private requestToggleSelection(item: TngTreeItem): void {\n const mode = this.selectionMode();\n if (mode === 'none') return;\n\n const previous = this.getEffectiveSelectionSet();\n const next = new Set(previous);\n const itemValue = item.getValue();\n const currentlySelected = previous.has(itemValue);\n\n if (mode === 'single') {\n next.clear();\n if (!currentlySelected) {\n next.add(itemValue);\n }\n } else {\n if (!currentlySelected) {\n next.add(itemValue);\n } else {\n next.delete(itemValue);\n }\n }\n\n if (setsEqual(previous, next)) return;\n\n if (!this.isControlled()) {\n this.uncontrolledSelection = next;\n }\n\n const valList = Array.from(next);\n if (mode === 'single') {\n this.valueChange.emit(valList.length > 0 ? valList[0] : null);\n } else {\n this.valueChange.emit(valList);\n }\n }\n\n @HostListener('keydown', ['$event'])\n protected onHostKeydown(event: KeyboardEvent): void {\n const activeElement = document.activeElement as HTMLElement;\n if (\n !this.hostRef.nativeElement.contains(activeElement) &&\n activeElement !== this.hostRef.nativeElement\n ) {\n return;\n }\n\n this.rebuildModel(this.resolvePreferredActiveId());\n\n const horizontalAction = resolveHorizontalTreeKeyAction(event);\n if (horizontalAction !== null) {\n event.preventDefault();\n this.runHorizontalKeyAction(horizontalAction);\n return;\n }\n\n const action = resolveListNavigationKeyAction(event, {\n multiSelect: this.selectionMode() === 'multiple',\n orientation: 'vertical',\n });\n\n if (action !== null) {\n if (action.preventDefault) {\n event.preventDefault();\n }\n this.runResolvedNavigationAction(action);\n return;\n }\n\n if (this.handleTypeaheadKey(event)) {\n return;\n }\n\n if (event.key === '*') {\n // Optional: expand all siblings.\n }\n }\n\n @HostListener('focus')\n protected onHostFocus(): void {\n this.rebuildModel(this.resolvePreferredActiveId());\n const activeItem = this.resolveItemByModelId(this.roving.getActiveId());\n if (activeItem !== null) {\n this.focusItem(activeItem);\n return;\n }\n\n this.focusActiveItem();\n }\n\n private applyModelState(state: TngTreeModelState): void {\n this.modelState = state;\n this.roving.setItemIds(state.visibleIds);\n this.roving.setDisabledIds(this.resolveDisabledVisibleIds(state.visibleIds));\n this.roving.setActiveId(state.activeId);\n this.typeahead.setItems(this.resolveTypeaheadItems(state.visibleIds));\n this.typeahead.setActiveId(state.activeId);\n }\n\n private ensureModelId(item: TngTreeItem): string {\n const existingId = this.modelIdByItem.get(item);\n if (existingId !== undefined) {\n return existingId;\n }\n\n const id = `tng-tree-item-${this.nextModelId}`;\n this.nextModelId += 1;\n this.modelIdByItem.set(item, id);\n return id;\n }\n\n private resolveModelId(item: TngTreeItem | null): string | null {\n if (item === null) {\n return null;\n }\n\n return this.modelIdByItem.get(item) ?? null;\n }\n\n private resolveActiveItem(): TngTreeItem | null {\n return this.resolveItemByModelId(this.modelState.activeId);\n }\n\n private resolveItemByModelId(modelId: string | null): TngTreeItem | null {\n if (modelId === null) {\n return null;\n }\n return this.itemByModelId.get(modelId) ?? null;\n }\n\n private focusBoundaryItem(boundary: TngTreeBoundary): void {\n const visibleIds =\n boundary === 'start'\n ? this.modelState.visibleIds\n : [...this.modelState.visibleIds].reverse();\n\n for (const modelId of visibleIds) {\n const candidate = this.itemByModelId.get(modelId);\n if (candidate !== undefined && !this.isItemDisabled(candidate)) {\n this.focusItem(candidate);\n return;\n }\n }\n }\n\n private focusActiveItem(): void {\n const item = this.resolveActiveItem();\n if (item !== null) {\n this.focusItem(item);\n }\n }\n\n private focusItem(item: TngTreeItem): void {\n if (this.isItemDisabled(item)) {\n return;\n }\n\n const modelId = this.resolveModelId(item);\n if (modelId !== null) {\n this.applyModelState(this.model.setActiveId(modelId));\n }\n item.focusHost();\n }\n\n private resolveFirstVisibleEnabledChild(parentItem: TngTreeItem): TngTreeItem | null {\n const parentId = this.resolveModelId(parentItem);\n if (parentId === null) {\n return null;\n }\n\n const visibleIds = new Set(this.modelState.visibleIds);\n const childIds = this.childModelIdsByParentId.get(parentId) ?? [];\n for (const childId of childIds) {\n if (!visibleIds.has(childId)) {\n continue;\n }\n\n const childItem = this.itemByModelId.get(childId);\n if (childItem !== undefined && !this.isItemDisabled(childItem)) {\n return childItem;\n }\n }\n\n return null;\n }\n\n private resolveTypeaheadItems(visibleIds: readonly string[]): readonly TngTypeaheadItem[] {\n const items: TngTypeaheadItem[] = [];\n for (const modelId of visibleIds) {\n const item = this.itemByModelId.get(modelId);\n if (item === undefined) {\n continue;\n }\n\n items.push({\n disabled: this.isItemDisabled(item),\n id: modelId,\n text: this.resolveTypeaheadText(item),\n });\n }\n\n return Object.freeze(items);\n }\n\n private resolveDisabledVisibleIds(visibleIds: readonly string[]): readonly string[] {\n const disabledIds: string[] = [];\n for (const modelId of visibleIds) {\n const item = this.itemByModelId.get(modelId);\n if (item !== undefined && this.isItemDisabled(item)) {\n disabledIds.push(modelId);\n }\n }\n return Object.freeze(disabledIds);\n }\n\n private resolveTypeaheadText(item: TngTreeItem): string {\n const host = item.getHostElement();\n const ariaLabel = host.getAttribute('aria-label');\n if (ariaLabel !== null && ariaLabel.trim().length > 0) {\n return ariaLabel.trim();\n }\n\n const text = normalizeTypeaheadText(host.textContent ?? '');\n if (text.length > 0) {\n return text;\n }\n\n return String(item.getValue());\n }\n\n private handleTypeaheadKey(event: KeyboardEvent): boolean {\n if (!isPrintableCharacter(event.key)) {\n return false;\n }\n\n const state = this.typeahead.handleKey(event.key);\n if (state.activeId === null || state.activeId === this.modelState.activeId) {\n return false;\n }\n\n event.preventDefault();\n this.applyModelState(this.model.setActiveId(state.activeId));\n this.focusActiveItem();\n return true;\n }\n\n private runHorizontalKeyAction(action: TngTreeHorizontalKeyAction): void {\n if (action === 'expand-or-child') {\n this.expandOrMoveToChild();\n return;\n }\n\n this.collapseOrMoveToParent();\n }\n\n private runResolvedNavigationAction(action: TngListNavigationAction): void {\n switch (action.type) {\n case 'move-next':\n this.applyModelState(this.model.moveNext());\n this.focusActiveItem();\n return;\n case 'move-prev':\n this.applyModelState(this.model.movePrev());\n this.focusActiveItem();\n return;\n case 'move-first':\n this.focusBoundaryItem('start');\n return;\n case 'move-last':\n this.focusBoundaryItem('end');\n return;\n case 'select-active':\n case 'toggle-active': {\n const item = this.resolveActiveItem();\n if (item !== null) {\n this.onItemClicked(item);\n }\n return;\n }\n case 'exit':\n case 'select-all':\n return;\n }\n }\n\n private expandOrMoveToChild(): void {\n const item = this.resolveActiveItem();\n if (item === null) {\n return;\n }\n\n if (item.canExpand() && !item.isExpanded()) {\n item.setExpanded(true);\n this.rebuildModel(this.resolveModelId(item));\n this.focusItem(item);\n return;\n }\n\n if (item.canExpand() && item.isExpanded()) {\n const firstChild = this.resolveFirstVisibleEnabledChild(item);\n if (firstChild !== null) {\n this.focusItem(firstChild);\n }\n }\n }\n\n private collapseOrMoveToParent(): void {\n const item = this.resolveActiveItem();\n if (item === null) {\n return;\n }\n\n if (item.canExpand() && item.isExpanded()) {\n item.setExpanded(false);\n this.rebuildModel(this.resolveModelId(item));\n this.focusItem(item);\n return;\n }\n\n const parent = item.getParentItem();\n if (parent !== null && !this.isItemDisabled(parent)) {\n this.focusItem(parent);\n }\n }\n\n private rebuildModel(activeId: string | null): void {\n const ordered = this.buildOrderedModelItems();\n const nodes: TngTreeNode[] = ordered.map((entry) => ({\n disabled: entry.item.disabled(),\n id: entry.id,\n parentId: entry.parentId,\n }));\n\n const expandedIds: string[] = [];\n for (const entry of ordered) {\n if (entry.item.canExpand() && entry.item.isExpanded()) {\n expandedIds.push(entry.id);\n }\n }\n\n this.model = createTreeModel({\n activeId,\n expandedIds,\n nodes,\n });\n this.applyModelState(this.model.getState());\n }\n\n private buildOrderedModelItems(): readonly TngTreeModelItem[] {\n const sortedItems = Array.from(this.items).sort((a, b) => {\n const position = a.getHostElement().compareDocumentPosition(b.getHostElement());\n if (position & Node.DOCUMENT_POSITION_FOLLOWING) return -1;\n if (position & Node.DOCUMENT_POSITION_PRECEDING) return 1;\n return 0;\n });\n\n const itemByModelId = new Map<string, TngTreeItem>();\n const childIdsByParent = new Map<string, string[]>();\n const ordered: TngTreeModelItem[] = [];\n\n for (const item of sortedItems) {\n const id = this.ensureModelId(item);\n const parentItem = item.getParentItem();\n const parentId = parentItem ? this.resolveModelId(parentItem) : null;\n\n ordered.push({\n id,\n item,\n parentId,\n });\n itemByModelId.set(id, item);\n\n if (parentId !== null) {\n const childIds = childIdsByParent.get(parentId) ?? [];\n childIds.push(id);\n childIdsByParent.set(parentId, childIds);\n }\n }\n\n const readonlyChildIdsByParent = new Map<string, readonly string[]>();\n for (const [parentId, childIds] of childIdsByParent.entries()) {\n readonlyChildIdsByParent.set(parentId, Object.freeze([...childIds]));\n }\n\n this.itemByModelId = itemByModelId;\n this.childModelIdsByParentId = readonlyChildIdsByParent;\n\n return Object.freeze(ordered);\n }\n\n private resolvePreferredActiveId(): string | null {\n return this.roving.getActiveId() ?? this.modelState.activeId;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"tng-tree.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/tree/tng-tree.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n inject,\n input,\n output,\n OnDestroy,\n} from '@angular/core';\nimport {\n createRovingFocusController,\n createTreeModel,\n createTypeaheadController,\n resolveListNavigationKeyAction,\n type TngListNavigationAction,\n type TngRovingFocusController,\n type TngTypeaheadController,\n type TngTypeaheadItem,\n type TngTreeModel,\n type TngTreeModelState,\n type TngTreeNode,\n} from '@tailng-ui/cdk';\nimport { TngTreeItem } from './tng-tree-item';\nimport {\n normalizeTreeBooleanInput,\n normalizeTreeOrientation,\n normalizeTreeSelectionMode,\n normalizeTreeValue,\n normalizeTreeValueInput,\n type TngTreeOrientation,\n type TngTreeSelectionMode,\n type TngTreeValue,\n} from './tng-tree.transforms';\n\nexport type { TngTreeOrientation, TngTreeSelectionMode, TngTreeValue } from './tng-tree.transforms';\n\ntype TngTreeBoundary = 'start' | 'end';\ntype TngTreeHorizontalKeyAction = 'collapse-or-parent' | 'expand-or-child';\n\ntype TngTreeModelItem = Readonly<{\n id: string;\n item: TngTreeItem;\n parentId: string | null;\n}>;\n\nfunction setsEqual(a: ReadonlySet<TngTreeValue>, b: ReadonlySet<TngTreeValue>): boolean {\n if (a.size !== b.size) return false;\n for (const value of a) {\n if (!b.has(value)) return false;\n }\n return true;\n}\n\nfunction isPrintableCharacter(value: string): boolean {\n return value.length === 1 && value.trim().length > 0;\n}\n\nfunction normalizeTypeaheadText(value: string): string {\n return value.replace(/\\s+/g, ' ').trim();\n}\n\nfunction hasDisallowedNavigationModifiers(event: KeyboardEvent): boolean {\n return event.altKey === true || event.ctrlKey === true || event.metaKey === true;\n}\n\nfunction resolveHorizontalTreeKeyAction(event: KeyboardEvent): TngTreeHorizontalKeyAction | null {\n if (hasDisallowedNavigationModifiers(event)) {\n return null;\n }\n\n if (event.key === 'ArrowLeft') {\n return 'collapse-or-parent';\n }\n\n if (event.key === 'ArrowRight') {\n return 'expand-or-child';\n }\n\n return null;\n}\n\n@Directive({\n selector: '[tngTree]',\n exportAs: 'tngTree',\n})\nexport class TngTree implements OnDestroy {\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly items = new Set<TngTreeItem>();\n private readonly modelIdByItem = new Map<TngTreeItem, string>();\n\n private readonly emptyModelNodes: readonly TngTreeNode[] = Object.freeze([]);\n private readonly emptyTypeaheadItems: readonly TngTypeaheadItem[] = Object.freeze([]);\n private model: TngTreeModel = createTreeModel({ nodes: this.emptyModelNodes });\n private modelState: TngTreeModelState = this.model.getState();\n private readonly roving: TngRovingFocusController = createRovingFocusController({\n itemIds: Object.freeze([]),\n });\n private readonly typeahead: TngTypeaheadController = createTypeaheadController({\n items: this.emptyTypeaheadItems,\n });\n\n private itemByModelId = new Map<string, TngTreeItem>();\n private childModelIdsByParentId = new Map<string, readonly string[]>();\n private nextModelId = 0;\n\n private uncontrolledSelection = new Set<TngTreeValue>();\n private initialized = false;\n\n readonly selectionMode = input<TngTreeSelectionMode, unknown>('none', {\n transform: normalizeTreeSelectionMode,\n });\n readonly orientation = input<TngTreeOrientation, unknown>('vertical', {\n transform: normalizeTreeOrientation,\n });\n readonly value = input<TngTreeValue | readonly TngTreeValue[] | null | undefined, unknown>(\n undefined,\n { transform: normalizeTreeValueInput },\n );\n readonly defaultValue = input<TngTreeValue | readonly TngTreeValue[] | null | undefined, unknown>(\n undefined,\n { transform: normalizeTreeValueInput },\n );\n readonly disabled = input<boolean, unknown>(false, {\n transform: normalizeTreeBooleanInput,\n });\n\n readonly valueChange = output<TngTreeValue | readonly TngTreeValue[] | null>();\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'tree' as const;\n\n @HostBinding('attr.role')\n protected readonly role = 'tree' as const;\n\n @HostBinding('attr.aria-orientation')\n protected get ariaOrientation(): string {\n return this.orientation();\n }\n\n @HostBinding('attr.aria-multiselectable')\n protected get ariaMultiselectable(): string | null {\n const mode = this.selectionMode();\n if (mode === 'none') return null;\n return mode === 'multiple' ? 'true' : 'false';\n }\n\n @HostBinding('attr.tabindex')\n protected get tabIndex(): string {\n if (this.disabled()) return '-1';\n\n const activeElement = document.activeElement;\n if (\n activeElement instanceof HTMLElement &&\n this.hostRef.nativeElement.contains(activeElement) &&\n activeElement !== this.hostRef.nativeElement\n ) {\n return '-1';\n }\n\n return '0';\n }\n\n ngOnDestroy(): void {\n this.items.clear();\n this.modelIdByItem.clear();\n this.itemByModelId.clear();\n this.childModelIdsByParentId.clear();\n }\n\n registerItem(item: TngTreeItem): void {\n this.items.add(item);\n this.ensureModelId(item);\n if (!this.initialized && this.items.size > 0 && !this.isControlled()) {\n this.initializeUncontrolledState();\n }\n this.rebuildModel(this.resolvePreferredActiveId());\n }\n\n unregisterItem(item: TngTreeItem): void {\n const wasSelected = this.getEffectiveSelectionSet().has(item.getValue());\n this.items.delete(item);\n\n const modelId = this.modelIdByItem.get(item);\n if (modelId !== undefined) {\n this.modelIdByItem.delete(item);\n this.itemByModelId.delete(modelId);\n }\n\n if (wasSelected && !this.isControlled()) {\n const next = new Set(this.uncontrolledSelection);\n next.delete(item.getValue());\n this.uncontrolledSelection = next;\n }\n\n this.rebuildModel(this.resolvePreferredActiveId());\n }\n\n isItemSelected(item: TngTreeItem): boolean {\n if (this.selectionMode() === 'none') {\n return false;\n }\n return this.getEffectiveSelectionSet().has(item.getValue());\n }\n\n isItemDisabled(item: TngTreeItem): boolean {\n return this.disabled() || item.disabled();\n }\n\n getTriggerTabIndex(item: TngTreeItem): string {\n if (this.isItemDisabled(item)) {\n return '-1';\n }\n\n const modelId = this.resolveModelId(item);\n return modelId !== null && this.roving.getActiveId() === modelId ? '0' : '-1';\n }\n\n onItemFocused(item: TngTreeItem): void {\n if (this.isItemDisabled(item)) {\n return;\n }\n\n const modelId = this.resolveModelId(item);\n if (modelId !== null) {\n this.applyModelState(this.model.setActiveId(modelId));\n }\n }\n\n onItemClicked(item: TngTreeItem): void {\n if (this.isItemDisabled(item)) return;\n\n if (this.selectionMode() !== 'none') {\n this.requestToggleSelection(item);\n }\n\n const modelId = this.resolveModelId(item);\n if (modelId !== null) {\n this.applyModelState(this.model.setActiveId(modelId));\n }\n }\n\n onIndicatorClicked(item: TngTreeItem): void {\n if (this.isItemDisabled(item)) return;\n\n if (item.canExpand()) {\n item.setExpanded(!item.isExpanded());\n const modelId = this.resolveModelId(item);\n this.rebuildModel(modelId);\n }\n\n item.focusHost();\n }\n\n private isControlled(): boolean {\n return this.value() !== undefined;\n }\n\n private initializeUncontrolledState(): void {\n this.initialized = true;\n const defaultInput = this.defaultValue();\n let initialValues: readonly TngTreeValue[] = [];\n if (defaultInput !== undefined && defaultInput !== null) {\n initialValues = Array.isArray(defaultInput)\n ? defaultInput.map(normalizeTreeValue)\n : [normalizeTreeValue(defaultInput)];\n }\n this.uncontrolledSelection = new Set(initialValues);\n }\n\n private getEffectiveSelectionSet(): ReadonlySet<TngTreeValue> {\n if (!this.isControlled()) {\n return this.uncontrolledSelection;\n }\n\n const val = this.value();\n let controlledValues: readonly TngTreeValue[] = [];\n if (val !== undefined && val !== null) {\n controlledValues = Array.isArray(val) ? val.map(normalizeTreeValue) : [normalizeTreeValue(val)];\n }\n return new Set(controlledValues);\n }\n\n private requestToggleSelection(item: TngTreeItem): void {\n const mode = this.selectionMode();\n if (mode === 'none') return;\n\n const previous = this.getEffectiveSelectionSet();\n const next = new Set(previous);\n const itemValue = item.getValue();\n const currentlySelected = previous.has(itemValue);\n\n if (mode === 'single') {\n next.clear();\n if (!currentlySelected) {\n next.add(itemValue);\n }\n } else {\n if (!currentlySelected) {\n next.add(itemValue);\n } else {\n next.delete(itemValue);\n }\n }\n\n if (setsEqual(previous, next)) return;\n\n if (!this.isControlled()) {\n this.uncontrolledSelection = next;\n }\n\n const valList = Array.from(next);\n if (mode === 'single') {\n this.valueChange.emit(valList.length > 0 ? valList[0] : null);\n } else {\n this.valueChange.emit(valList);\n }\n }\n\n @HostListener('keydown', ['$event'])\n protected onHostKeydown(event: KeyboardEvent): void {\n const activeElement = document.activeElement as HTMLElement;\n if (\n !this.hostRef.nativeElement.contains(activeElement) &&\n activeElement !== this.hostRef.nativeElement\n ) {\n return;\n }\n\n this.rebuildModel(this.resolvePreferredActiveId());\n\n const horizontalAction = resolveHorizontalTreeKeyAction(event);\n if (horizontalAction !== null) {\n event.preventDefault();\n this.runHorizontalKeyAction(horizontalAction);\n return;\n }\n\n const action = resolveListNavigationKeyAction(event, {\n multiSelect: this.selectionMode() === 'multiple',\n orientation: 'vertical',\n });\n\n if (action !== null) {\n if (action.preventDefault) {\n event.preventDefault();\n }\n this.runResolvedNavigationAction(action);\n return;\n }\n\n if (this.handleTypeaheadKey(event)) {\n return;\n }\n\n if (event.key === '*') {\n // Optional: expand all siblings.\n }\n }\n\n @HostListener('focus')\n protected onHostFocus(): void {\n this.rebuildModel(this.resolvePreferredActiveId());\n const activeItem = this.resolveItemByModelId(this.roving.getActiveId());\n if (activeItem !== null) {\n this.focusItem(activeItem);\n return;\n }\n\n this.focusActiveItem();\n }\n\n private applyModelState(state: TngTreeModelState): void {\n this.modelState = state;\n this.roving.setItemIds(state.visibleIds);\n this.roving.setDisabledIds(this.resolveDisabledVisibleIds(state.visibleIds));\n this.roving.setActiveId(state.activeId);\n this.typeahead.setItems(this.resolveTypeaheadItems(state.visibleIds));\n this.typeahead.setActiveId(state.activeId);\n }\n\n private ensureModelId(item: TngTreeItem): string {\n const existingId = this.modelIdByItem.get(item);\n if (existingId !== undefined) {\n return existingId;\n }\n\n const id = `tng-tree-item-${this.nextModelId}`;\n this.nextModelId += 1;\n this.modelIdByItem.set(item, id);\n return id;\n }\n\n private resolveModelId(item: TngTreeItem | null): string | null {\n if (item === null) {\n return null;\n }\n\n return this.modelIdByItem.get(item) ?? null;\n }\n\n private resolveActiveItem(): TngTreeItem | null {\n return this.resolveItemByModelId(this.modelState.activeId);\n }\n\n private resolveItemByModelId(modelId: string | null): TngTreeItem | null {\n if (modelId === null) {\n return null;\n }\n return this.itemByModelId.get(modelId) ?? null;\n }\n\n private focusBoundaryItem(boundary: TngTreeBoundary): void {\n const visibleIds =\n boundary === 'start'\n ? this.modelState.visibleIds\n : [...this.modelState.visibleIds].reverse();\n\n for (const modelId of visibleIds) {\n const candidate = this.itemByModelId.get(modelId);\n if (candidate !== undefined && !this.isItemDisabled(candidate)) {\n this.focusItem(candidate);\n return;\n }\n }\n }\n\n private focusActiveItem(): void {\n const item = this.resolveActiveItem();\n if (item !== null) {\n this.focusItem(item);\n }\n }\n\n private focusItem(item: TngTreeItem): void {\n if (this.isItemDisabled(item)) {\n return;\n }\n\n const modelId = this.resolveModelId(item);\n if (modelId !== null) {\n this.applyModelState(this.model.setActiveId(modelId));\n }\n item.focusHost();\n }\n\n private resolveFirstVisibleEnabledChild(parentItem: TngTreeItem): TngTreeItem | null {\n const parentId = this.resolveModelId(parentItem);\n if (parentId === null) {\n return null;\n }\n\n const visibleIds = new Set(this.modelState.visibleIds);\n const childIds = this.childModelIdsByParentId.get(parentId) ?? [];\n for (const childId of childIds) {\n if (!visibleIds.has(childId)) {\n continue;\n }\n\n const childItem = this.itemByModelId.get(childId);\n if (childItem !== undefined && !this.isItemDisabled(childItem)) {\n return childItem;\n }\n }\n\n return null;\n }\n\n private resolveTypeaheadItems(visibleIds: readonly string[]): readonly TngTypeaheadItem[] {\n const items: TngTypeaheadItem[] = [];\n for (const modelId of visibleIds) {\n const item = this.itemByModelId.get(modelId);\n if (item === undefined) {\n continue;\n }\n\n items.push({\n disabled: this.isItemDisabled(item),\n id: modelId,\n text: this.resolveTypeaheadText(item),\n });\n }\n\n return Object.freeze(items);\n }\n\n private resolveDisabledVisibleIds(visibleIds: readonly string[]): readonly string[] {\n const disabledIds: string[] = [];\n for (const modelId of visibleIds) {\n const item = this.itemByModelId.get(modelId);\n if (item !== undefined && this.isItemDisabled(item)) {\n disabledIds.push(modelId);\n }\n }\n return Object.freeze(disabledIds);\n }\n\n private resolveTypeaheadText(item: TngTreeItem): string {\n const host = item.getHostElement();\n const ariaLabel = host.getAttribute('aria-label');\n if (ariaLabel !== null && ariaLabel.trim().length > 0) {\n return ariaLabel.trim();\n }\n\n const text = normalizeTypeaheadText(host.textContent ?? '');\n if (text.length > 0) {\n return text;\n }\n\n return String(item.getValue());\n }\n\n private handleTypeaheadKey(event: KeyboardEvent): boolean {\n if (!isPrintableCharacter(event.key)) {\n return false;\n }\n\n const state = this.typeahead.handleKey(event.key);\n if (state.activeId === null || state.activeId === this.modelState.activeId) {\n return false;\n }\n\n event.preventDefault();\n this.applyModelState(this.model.setActiveId(state.activeId));\n this.focusActiveItem();\n return true;\n }\n\n private runHorizontalKeyAction(action: TngTreeHorizontalKeyAction): void {\n if (action === 'expand-or-child') {\n this.expandOrMoveToChild();\n return;\n }\n\n this.collapseOrMoveToParent();\n }\n\n private runResolvedNavigationAction(action: TngListNavigationAction): void {\n switch (action.type) {\n case 'move-next':\n this.applyModelState(this.model.moveNext());\n this.focusActiveItem();\n return;\n case 'move-prev':\n this.applyModelState(this.model.movePrev());\n this.focusActiveItem();\n return;\n case 'move-first':\n this.focusBoundaryItem('start');\n return;\n case 'move-last':\n this.focusBoundaryItem('end');\n return;\n case 'select-active':\n case 'toggle-active': {\n const item = this.resolveActiveItem();\n if (item !== null) {\n this.onItemClicked(item);\n }\n return;\n }\n case 'exit':\n case 'select-all':\n return;\n }\n }\n\n private expandOrMoveToChild(): void {\n const item = this.resolveActiveItem();\n if (item === null) {\n return;\n }\n\n if (item.canExpand() && !item.isExpanded()) {\n item.setExpanded(true);\n this.rebuildModel(this.resolveModelId(item));\n this.focusItem(item);\n return;\n }\n\n if (item.canExpand() && item.isExpanded()) {\n const firstChild = this.resolveFirstVisibleEnabledChild(item);\n if (firstChild !== null) {\n this.focusItem(firstChild);\n }\n }\n }\n\n private collapseOrMoveToParent(): void {\n const item = this.resolveActiveItem();\n if (item === null) {\n return;\n }\n\n if (item.canExpand() && item.isExpanded()) {\n item.setExpanded(false);\n this.rebuildModel(this.resolveModelId(item));\n this.focusItem(item);\n return;\n }\n\n const parent = item.getParentItem();\n if (parent !== null && !this.isItemDisabled(parent)) {\n this.focusItem(parent);\n }\n }\n\n private rebuildModel(activeId: string | null): void {\n const ordered = this.buildOrderedModelItems();\n const nodes: TngTreeNode[] = ordered.map((entry) => ({\n disabled: entry.item.disabled(),\n id: entry.id,\n parentId: entry.parentId,\n }));\n\n const expandedIds: string[] = [];\n for (const entry of ordered) {\n if (entry.item.canExpand() && entry.item.isExpanded()) {\n expandedIds.push(entry.id);\n }\n }\n\n this.model = createTreeModel({\n activeId,\n expandedIds,\n nodes,\n });\n this.applyModelState(this.model.getState());\n }\n\n private buildOrderedModelItems(): readonly TngTreeModelItem[] {\n const sortedItems = Array.from(this.items).sort((a, b) => {\n const position = a.getHostElement().compareDocumentPosition(b.getHostElement());\n if (position & Node.DOCUMENT_POSITION_FOLLOWING) return -1;\n if (position & Node.DOCUMENT_POSITION_PRECEDING) return 1;\n return 0;\n });\n\n const itemByModelId = new Map<string, TngTreeItem>();\n const childIdsByParent = new Map<string, string[]>();\n const ordered: TngTreeModelItem[] = [];\n\n for (const item of sortedItems) {\n const id = this.ensureModelId(item);\n const parentItem = item.getParentItem();\n const parentId = parentItem ? this.resolveModelId(parentItem) : null;\n\n ordered.push({\n id,\n item,\n parentId,\n });\n itemByModelId.set(id, item);\n\n if (parentId !== null) {\n const childIds = childIdsByParent.get(parentId) ?? [];\n childIds.push(id);\n childIdsByParent.set(parentId, childIds);\n }\n }\n\n const readonlyChildIdsByParent = new Map<string, readonly string[]>();\n for (const [parentId, childIds] of childIdsByParent.entries()) {\n readonlyChildIdsByParent.set(parentId, Object.freeze([...childIds]));\n }\n\n this.itemByModelId = itemByModelId;\n this.childModelIdsByParentId = readonlyChildIdsByParent;\n\n return Object.freeze(ordered);\n }\n\n private resolvePreferredActiveId(): string | null {\n return this.roving.getActiveId() ?? this.modelState.activeId;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-breadcrumb.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/navigation/breadcrumb/tng-breadcrumb.ts"],"names":[],"mappings":";AAEA,
|
|
1
|
+
{"version":3,"file":"tng-breadcrumb.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/navigation/breadcrumb/tng-breadcrumb.ts"],"names":[],"mappings":";AAEA,qBAIa,aAAa;IAExB,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,YAAY,CAAU;yCAFzC,aAAa;2CAAb,aAAa;CAGzB;AAED,qBAIa,iBAAiB;IAE5B,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,iBAAiB,CAAU;yCAF9C,iBAAiB;2CAAjB,iBAAiB;CAG7B;AAED,qBAIa,iBAAiB;IAE5B,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,iBAAiB,CAAU;yCAF9C,iBAAiB;2CAAjB,iBAAiB;CAG7B;AAED,qBAIa,iBAAiB;IAE5B,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,iBAAiB,CAAU;yCAF9C,iBAAiB;2CAAjB,iBAAiB;CAG7B;AAED,qBAIa,sBAAsB;IAEjC,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAG,MAAM,CAAU;IAGpD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,sBAAsB,CAAU;yCALnD,sBAAsB;2CAAtB,sBAAsB;CAMlC"}
|