forty-cdk 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/accordion/README.md +122 -0
- package/aspect-ratio/README.md +76 -0
- package/avatar/README.md +100 -0
- package/breadcrumbs/README.md +49 -0
- package/breakpoints/README.md +81 -0
- package/button/README.md +49 -0
- package/calendar/README.md +458 -0
- package/carousel/README.md +358 -0
- package/checkbox/README.md +146 -0
- package/combobox/README.md +535 -0
- package/context-menu/README.md +139 -0
- package/date-field/README.md +184 -0
- package/date-picker/README.md +338 -0
- package/dialog/README.md +388 -0
- package/disclosure/README.md +114 -0
- package/drag-drop/README.md +359 -0
- package/drawer/README.md +560 -0
- package/dropdown-menu/README.md +176 -0
- package/fesm2022/forty-cdk-accordion.mjs +348 -0
- package/fesm2022/forty-cdk-accordion.mjs.map +1 -0
- package/fesm2022/forty-cdk-aspect-ratio.mjs +74 -0
- package/fesm2022/forty-cdk-aspect-ratio.mjs.map +1 -0
- package/fesm2022/forty-cdk-avatar.mjs +308 -0
- package/fesm2022/forty-cdk-avatar.mjs.map +1 -0
- package/fesm2022/forty-cdk-breadcrumbs.mjs +125 -0
- package/fesm2022/forty-cdk-breadcrumbs.mjs.map +1 -0
- package/fesm2022/forty-cdk-breakpoints.mjs +117 -0
- package/fesm2022/forty-cdk-breakpoints.mjs.map +1 -0
- package/fesm2022/forty-cdk-button.mjs +134 -0
- package/fesm2022/forty-cdk-button.mjs.map +1 -0
- package/fesm2022/forty-cdk-calendar.mjs +2034 -0
- package/fesm2022/forty-cdk-calendar.mjs.map +1 -0
- package/fesm2022/forty-cdk-carousel.mjs +968 -0
- package/fesm2022/forty-cdk-carousel.mjs.map +1 -0
- package/fesm2022/forty-cdk-checkbox.mjs +226 -0
- package/fesm2022/forty-cdk-checkbox.mjs.map +1 -0
- package/fesm2022/forty-cdk-combobox.mjs +2596 -0
- package/fesm2022/forty-cdk-combobox.mjs.map +1 -0
- package/fesm2022/forty-cdk-context-menu.mjs +413 -0
- package/fesm2022/forty-cdk-context-menu.mjs.map +1 -0
- package/fesm2022/forty-cdk-core.mjs +9022 -0
- package/fesm2022/forty-cdk-core.mjs.map +1 -0
- package/fesm2022/forty-cdk-date-field.mjs +744 -0
- package/fesm2022/forty-cdk-date-field.mjs.map +1 -0
- package/fesm2022/forty-cdk-date-picker.mjs +1011 -0
- package/fesm2022/forty-cdk-date-picker.mjs.map +1 -0
- package/fesm2022/forty-cdk-dialog.mjs +707 -0
- package/fesm2022/forty-cdk-dialog.mjs.map +1 -0
- package/fesm2022/forty-cdk-disclosure.mjs +190 -0
- package/fesm2022/forty-cdk-disclosure.mjs.map +1 -0
- package/fesm2022/forty-cdk-drag-drop.mjs +1180 -0
- package/fesm2022/forty-cdk-drag-drop.mjs.map +1 -0
- package/fesm2022/forty-cdk-drawer.mjs +1641 -0
- package/fesm2022/forty-cdk-drawer.mjs.map +1 -0
- package/fesm2022/forty-cdk-dropdown-menu.mjs +350 -0
- package/fesm2022/forty-cdk-dropdown-menu.mjs.map +1 -0
- package/fesm2022/forty-cdk-field.mjs +425 -0
- package/fesm2022/forty-cdk-field.mjs.map +1 -0
- package/fesm2022/forty-cdk-fieldset.mjs +164 -0
- package/fesm2022/forty-cdk-fieldset.mjs.map +1 -0
- package/fesm2022/forty-cdk-file-upload.mjs +221 -0
- package/fesm2022/forty-cdk-file-upload.mjs.map +1 -0
- package/fesm2022/forty-cdk-hover-card.mjs +496 -0
- package/fesm2022/forty-cdk-hover-card.mjs.map +1 -0
- package/fesm2022/forty-cdk-input.mjs +274 -0
- package/fesm2022/forty-cdk-input.mjs.map +1 -0
- package/fesm2022/forty-cdk-internationalized-date.mjs +1 -1
- package/fesm2022/forty-cdk-internationalized-date.mjs.map +1 -1
- package/fesm2022/forty-cdk-listbox.mjs +1279 -0
- package/fesm2022/forty-cdk-listbox.mjs.map +1 -0
- package/fesm2022/forty-cdk-menu.mjs +1439 -0
- package/fesm2022/forty-cdk-menu.mjs.map +1 -0
- package/fesm2022/forty-cdk-menubar.mjs +787 -0
- package/fesm2022/forty-cdk-menubar.mjs.map +1 -0
- package/fesm2022/forty-cdk-meter.mjs +211 -0
- package/fesm2022/forty-cdk-meter.mjs.map +1 -0
- package/fesm2022/forty-cdk-navigation-menu.mjs +1145 -0
- package/fesm2022/forty-cdk-navigation-menu.mjs.map +1 -0
- package/fesm2022/forty-cdk-number-input.mjs +559 -0
- package/fesm2022/forty-cdk-number-input.mjs.map +1 -0
- package/fesm2022/forty-cdk-otp-input.mjs +527 -0
- package/fesm2022/forty-cdk-otp-input.mjs.map +1 -0
- package/fesm2022/forty-cdk-pagination.mjs +323 -0
- package/fesm2022/forty-cdk-pagination.mjs.map +1 -0
- package/fesm2022/forty-cdk-pane-resizer.mjs +297 -0
- package/fesm2022/forty-cdk-pane-resizer.mjs.map +1 -0
- package/fesm2022/forty-cdk-popover.mjs +698 -0
- package/fesm2022/forty-cdk-popover.mjs.map +1 -0
- package/fesm2022/forty-cdk-progress.mjs +226 -0
- package/fesm2022/forty-cdk-progress.mjs.map +1 -0
- package/fesm2022/forty-cdk-radio-group.mjs +378 -0
- package/fesm2022/forty-cdk-radio-group.mjs.map +1 -0
- package/fesm2022/forty-cdk-scroll-area.mjs +640 -0
- package/fesm2022/forty-cdk-scroll-area.mjs.map +1 -0
- package/fesm2022/forty-cdk-search.mjs +205 -0
- package/fesm2022/forty-cdk-search.mjs.map +1 -0
- package/fesm2022/forty-cdk-select.mjs +1661 -0
- package/fesm2022/forty-cdk-select.mjs.map +1 -0
- package/fesm2022/forty-cdk-separator.mjs +82 -0
- package/fesm2022/forty-cdk-separator.mjs.map +1 -0
- package/fesm2022/forty-cdk-signal-forms.mjs +97 -0
- package/fesm2022/forty-cdk-signal-forms.mjs.map +1 -0
- package/fesm2022/forty-cdk-slider.mjs +803 -0
- package/fesm2022/forty-cdk-slider.mjs.map +1 -0
- package/fesm2022/forty-cdk-stepper.mjs +886 -0
- package/fesm2022/forty-cdk-stepper.mjs.map +1 -0
- package/fesm2022/forty-cdk-switch.mjs +137 -0
- package/fesm2022/forty-cdk-switch.mjs.map +1 -0
- package/fesm2022/forty-cdk-table.mjs +1518 -0
- package/fesm2022/forty-cdk-table.mjs.map +1 -0
- package/fesm2022/forty-cdk-tabs.mjs +400 -0
- package/fesm2022/forty-cdk-tabs.mjs.map +1 -0
- package/fesm2022/forty-cdk-time-field.mjs +593 -0
- package/fesm2022/forty-cdk-time-field.mjs.map +1 -0
- package/fesm2022/forty-cdk-time-picker.mjs +1013 -0
- package/fesm2022/forty-cdk-time-picker.mjs.map +1 -0
- package/fesm2022/forty-cdk-toast.mjs +1153 -0
- package/fesm2022/forty-cdk-toast.mjs.map +1 -0
- package/fesm2022/forty-cdk-toggle.mjs +516 -0
- package/fesm2022/forty-cdk-toggle.mjs.map +1 -0
- package/fesm2022/forty-cdk-toolbar.mjs +374 -0
- package/fesm2022/forty-cdk-toolbar.mjs.map +1 -0
- package/fesm2022/forty-cdk-tooltip.mjs +672 -0
- package/fesm2022/forty-cdk-tooltip.mjs.map +1 -0
- package/fesm2022/forty-cdk-tree.mjs +2007 -0
- package/fesm2022/forty-cdk-tree.mjs.map +1 -0
- package/fesm2022/forty-cdk-virtualization.mjs +1 -1
- package/fesm2022/forty-cdk-virtualization.mjs.map +1 -1
- package/fesm2022/forty-cdk.mjs +0 -43310
- package/fesm2022/forty-cdk.mjs.map +1 -1
- package/field/README.md +97 -0
- package/fieldset/README.md +86 -0
- package/file-upload/README.md +73 -0
- package/hover-card/README.md +171 -0
- package/input/README.md +156 -0
- package/listbox/README.md +424 -0
- package/menu/README.md +181 -0
- package/menubar/README.md +140 -0
- package/meter/README.md +128 -0
- package/navigation-menu/README.md +253 -0
- package/number-input/README.md +171 -0
- package/otp-input/README.md +198 -0
- package/package.json +213 -1
- package/pagination/README.md +61 -0
- package/pane-resizer/README.md +136 -0
- package/popover/README.md +262 -0
- package/progress/README.md +115 -0
- package/radio-group/README.md +129 -0
- package/scroll-area/README.md +184 -0
- package/search/README.md +42 -0
- package/select/README.md +488 -0
- package/separator/README.md +84 -0
- package/signal-forms/README.md +72 -0
- package/slider/README.md +152 -0
- package/stepper/README.md +292 -0
- package/switch/README.md +116 -0
- package/table/README.md +769 -0
- package/tabs/README.md +130 -0
- package/time-field/README.md +157 -0
- package/time-picker/README.md +172 -0
- package/toast/README.md +398 -0
- package/toggle/README.md +224 -0
- package/toolbar/README.md +109 -0
- package/tooltip/README.md +274 -0
- package/tree/README.md +708 -0
- package/types/forty-cdk-accordion.d.ts +242 -0
- package/types/forty-cdk-aspect-ratio.d.ts +59 -0
- package/types/forty-cdk-avatar.d.ts +133 -0
- package/types/forty-cdk-breadcrumbs.d.ts +92 -0
- package/types/forty-cdk-breakpoints.d.ts +141 -0
- package/types/forty-cdk-button.d.ts +80 -0
- package/types/forty-cdk-calendar.d.ts +914 -0
- package/types/forty-cdk-carousel.d.ts +530 -0
- package/types/forty-cdk-checkbox.d.ts +141 -0
- package/types/forty-cdk-combobox.d.ts +1259 -0
- package/types/forty-cdk-context-menu.d.ts +313 -0
- package/types/forty-cdk-core.d.ts +5774 -0
- package/types/forty-cdk-date-field.d.ts +307 -0
- package/types/forty-cdk-date-picker.d.ts +622 -0
- package/types/forty-cdk-dialog.d.ts +546 -0
- package/types/forty-cdk-disclosure.d.ts +127 -0
- package/types/forty-cdk-drag-drop.d.ts +456 -0
- package/types/forty-cdk-drawer.d.ts +871 -0
- package/types/forty-cdk-dropdown-menu.d.ts +242 -0
- package/types/forty-cdk-field.d.ts +236 -0
- package/types/forty-cdk-fieldset.d.ts +119 -0
- package/types/forty-cdk-file-upload.d.ts +124 -0
- package/types/forty-cdk-hover-card.d.ts +320 -0
- package/types/forty-cdk-input.d.ts +169 -0
- package/types/forty-cdk-internationalized-date.d.ts +1 -1
- package/types/forty-cdk-listbox.d.ts +513 -0
- package/types/forty-cdk-menu.d.ts +629 -0
- package/types/forty-cdk-menubar.d.ts +451 -0
- package/types/forty-cdk-meter.d.ts +122 -0
- package/types/forty-cdk-navigation-menu.d.ts +514 -0
- package/types/forty-cdk-number-input.d.ts +319 -0
- package/types/forty-cdk-otp-input.d.ts +248 -0
- package/types/forty-cdk-pagination.d.ts +214 -0
- package/types/forty-cdk-pane-resizer.d.ts +145 -0
- package/types/forty-cdk-popover.d.ts +509 -0
- package/types/forty-cdk-progress.d.ts +143 -0
- package/types/forty-cdk-radio-group.d.ts +222 -0
- package/types/forty-cdk-scroll-area.d.ts +258 -0
- package/types/forty-cdk-search.d.ts +142 -0
- package/types/forty-cdk-select.d.ts +899 -0
- package/types/forty-cdk-separator.d.ts +59 -0
- package/types/forty-cdk-signal-forms.d.ts +58 -0
- package/types/forty-cdk-slider.d.ts +379 -0
- package/types/forty-cdk-stepper.d.ts +650 -0
- package/types/forty-cdk-switch.d.ts +87 -0
- package/types/forty-cdk-table.d.ts +723 -0
- package/types/forty-cdk-tabs.d.ts +235 -0
- package/types/forty-cdk-time-field.d.ts +307 -0
- package/types/forty-cdk-time-picker.d.ts +578 -0
- package/types/forty-cdk-toast.d.ts +598 -0
- package/types/forty-cdk-toggle.d.ts +310 -0
- package/types/forty-cdk-toolbar.d.ts +217 -0
- package/types/forty-cdk-tooltip.d.ts +436 -0
- package/types/forty-cdk-tree.d.ts +688 -0
- package/types/forty-cdk.d.ts +1 -19743
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forty-cdk-tree.mjs","sources":["../../../projects/forty-cdk/tree/src/focus-model.ts","../../../projects/forty-cdk/tree/src/tree-context.ts","../../../projects/forty-cdk/tree/src/tree-defaults.ts","../../../projects/forty-cdk/tree/src/tree-selection.ts","../../../projects/forty-cdk/tree/src/tree.ts","../../../projects/forty-cdk/tree/src/tree-drag-announcements.ts","../../../projects/forty-cdk/tree/src/tree-drag-keys.ts","../../../projects/forty-cdk/tree/src/tree-drag-rows.ts","../../../projects/forty-cdk/tree/src/tree-node-drag.ts","../../../projects/forty-cdk/tree/src/tree-item.ts","../../../projects/forty-cdk/tree/src/tree-item-label.ts","../../../projects/forty-cdk/tree/src/tree-item-toggle.ts","../../../projects/forty-cdk/tree/src/tree-group.ts","../../../projects/forty-cdk/tree/src/tree-item-checkbox.ts","../../../projects/forty-cdk/tree/src/tree-item-checkbox-indicator.ts","../../../projects/forty-cdk/tree/src/tree-filter.ts","../../../projects/forty-cdk/tree/src/tree-node-drag-handle.ts","../../../projects/forty-cdk/tree/src/move-tree-node.ts","../../../projects/forty-cdk/tree/src/forty-cdk-tree.ts"],"sourcesContent":["import { type Signal } from '@angular/core';\n\nimport {\n firstEnabledHost,\n type ListNavigationAction,\n moveIndex,\n type RovingTabindex,\n VirtualizedNavigator,\n} from 'forty-cdk/core';\nimport type { ForTreeItemHandle, ForTreeVisibleNode } from './tree-context';\n\n/**\n * The currently-focused node, resolved by the active {@link FocusModel}. Carries\n * the facts the tree's expand / collapse and parent / child moves need —\n * regardless of whether focus rides the DOM (roving) or an\n * `aria-activedescendant` pointer (virtualized).\n */\nexport interface TreeFocusEntry {\n /** Stable node value. */\n readonly value: string;\n /** Whether the node is an expandable parent. */\n readonly expandable: boolean;\n /** Effective disabled state. */\n readonly disabled: boolean;\n}\n\n/**\n * The seam that unifies the tree's two focus engines. `ForTree` selects one\n * implementation from `virtualized` once and routes every navigation intent\n * through it, so the keyboard handler resolves intent a single time and never\n * re-tests the mode. Two implementations:\n *\n * - {@link RovingFocusModel} — DOM focus rides the `treeitem` (APG Approach A).\n * - {@link ActiveDescendantFocusModel} — focus stays on the container and an\n * `aria-activedescendant` pointer tracks the active node (virtualized path).\n */\nexport interface FocusModel {\n /** Move focus to a specific node. */\n focusTarget(handle: ForTreeItemHandle): void;\n /** Resolve the currently-focused node, or `null` when nothing is focused. */\n current(): TreeFocusEntry | null;\n /** Move focus to the next / previous / first / last enabled node. */\n navigate(action: ListNavigationAction): void;\n /** Move focus to the first child of the current node (an open parent). */\n enterChild(): void;\n /** Move focus to the current node's parent. */\n moveToParent(): void;\n /** Move focus to a typeahead match. */\n typeaheadTo(handle: ForTreeItemHandle): void;\n}\n\n/** Wiring for {@link RovingFocusModel}. */\nexport interface RovingFocusModelDeps {\n /** The shared roving-tabindex tracker driving the single tab stop. */\n readonly roving: RovingTabindex;\n /** Flattened visible nodes (each with its resolved parent host). */\n readonly visibleNodes: Signal<readonly ForTreeVisibleNode[]>;\n /** Visible node handles in flattened order. */\n readonly visibleHandles: Signal<readonly ForTreeItemHandle[]>;\n /**\n * Selection-follows-focus hook. Called with the destination value after a\n * `navigate` when single-mode selection should track focus; a no-op when the\n * tree is multi-select or the option is off.\n */\n readonly selectOnFocus: (value: string) => void;\n}\n\n/**\n * Focus engine for the standard (non-virtualized) tree: DOM focus rides the\n * `treeitem`, tracked through {@link RovingTabindex}. The current node is the\n * roving-active host; navigation walks the flattened visible-node list.\n *\n * Internal — not re-exported from `tree/index.ts` or `public-api.ts`.\n */\nexport class RovingFocusModel implements FocusModel {\n readonly #deps: RovingFocusModelDeps;\n\n constructor(deps: RovingFocusModelDeps) {\n this.#deps = deps;\n }\n\n focusTarget(handle: ForTreeItemHandle): void {\n this.#deps.roving.focusActive(handle.host);\n }\n\n current(): TreeFocusEntry | null {\n const entry = this.#currentNode();\n if (!entry) {\n return null;\n }\n const handle = entry.handle;\n return { value: handle.value(), expandable: handle.expandable(), disabled: handle.disabled() };\n }\n\n navigate(action: ListNavigationAction): void {\n const active = this.#deps.roving.active();\n const items = this.#deps.visibleHandles();\n if (items.length === 0) {\n return;\n }\n const currentIndex = items.findIndex((item) => item.host === active);\n const next = moveIndex(currentIndex < 0 ? 0 : currentIndex, items.length, action, {\n loop: false,\n isDisabled: (i) => items[i]!.disabled(),\n });\n if (next === null) {\n return;\n }\n const target = items[next];\n if (!target) {\n return;\n }\n this.#deps.roving.focusActive(target.host);\n this.#deps.selectOnFocus(target.value());\n }\n\n enterChild(): void {\n const entry = this.#currentNode();\n if (!entry) {\n return;\n }\n const child = entry.handle.childContainer();\n const firstChild = child ? firstEnabledHost(child.items()) : null;\n if (firstChild) {\n this.#deps.roving.focusActive(firstChild);\n }\n }\n\n moveToParent(): void {\n const entry = this.#currentNode();\n if (entry?.parentHost) {\n this.#deps.roving.focusActive(entry.parentHost);\n }\n }\n\n typeaheadTo(handle: ForTreeItemHandle): void {\n this.#deps.roving.focusActive(handle.host);\n }\n\n #currentNode(): ForTreeVisibleNode | null {\n const active = this.#deps.roving.active();\n if (active === null) {\n return null;\n }\n return this.#deps.visibleNodes().find((entry) => entry.handle.host === active) ?? null;\n }\n}\n\n/** Position-snapshot entry carried by the tree's virtualized navigation engine. */\ninterface PositionEntry {\n readonly id: string;\n readonly disabled: boolean;\n readonly level: number;\n readonly expandable: boolean;\n readonly value: string;\n}\n\n/** Wiring for {@link ActiveDescendantFocusModel}. */\nexport interface ActiveDescendantFocusModelDeps {\n /** Live registered tree items — the rendered window when virtualizing. */\n readonly items: Signal<readonly ForTreeItemHandle[]>;\n /** Total node count for the virtualized path. */\n readonly totalCount: Signal<number | undefined>;\n /** Inclusive-exclusive range of currently rendered nodes when virtualizing. */\n readonly visibleRange: Signal<readonly [number, number] | undefined>;\n /** Read the host's current activedescendant id. */\n readonly getActiveId: () => string | null;\n /** Write the host's `aria-activedescendant` to a node id. */\n readonly setActiveId: (id: string | null) => void;\n /** Forward a `(scrollToIndex)` request to the consumer's virtualizer. */\n readonly emitScrollToIndex: (idx: number) => void;\n}\n\n/**\n * Focus engine for the virtualized tree: DOM focus stays on the container and\n * an `aria-activedescendant` pointer tracks the active node. Owns the shared\n * `_internal/virtualized-navigator` engine directly — a tree never wraps, so it\n * pins `loop` to `false`, and its snapshot entry carries `level` / `expandable`\n * / `value` so the tree-specific enter-child / go-to-parent moves can resolve\n * levels outside the rendered window. Selection never follows focus here.\n *\n * Internal — not re-exported from `tree/index.ts` or `public-api.ts`.\n */\nexport class ActiveDescendantFocusModel implements FocusModel {\n readonly #deps: ActiveDescendantFocusModelDeps;\n\n readonly #core: VirtualizedNavigator<ForTreeItemHandle, PositionEntry>;\n\n constructor(deps: ActiveDescendantFocusModelDeps) {\n this.#deps = deps;\n this.#core = new VirtualizedNavigator(\n { ...deps, loop: () => false },\n {\n posOf: (n) => n.itemIndex(),\n idOf: (n) => n.id(),\n hostOf: (n) => n.host,\n readEntry: (n) => ({\n id: n.id(),\n disabled: n.disabled(),\n level: n.level(),\n expandable: n.expandable(),\n value: n.value(),\n }),\n },\n );\n }\n\n /** @see VirtualizedNavigator.prime */\n prime(): void {\n this.#core.prime();\n }\n\n /** @see VirtualizedNavigator.tryResolvePending */\n tryResolvePending(): boolean {\n return this.#core.tryResolvePending();\n }\n\n focusTarget(handle: ForTreeItemHandle): void {\n this.#deps.setActiveId(handle.id());\n }\n\n current(): TreeFocusEntry | null {\n const cur = this.#currentEntry();\n if (!cur) {\n return null;\n }\n return { value: cur.value, expandable: cur.expandable, disabled: cur.disabled };\n }\n\n navigate(action: ListNavigationAction): void {\n this.#core.navigate(action);\n }\n\n /**\n * Move activedescendant to the first child of the current node (the node\n * immediately after it in pre-order flat space). No-op when there is no\n * active node or when the active node is the last in the list.\n */\n enterChild(): void {\n const cur = this.#currentEntry();\n if (!cur) return;\n const target = cur.pos + 1;\n const total = this.#deps.totalCount();\n if (total !== undefined && target < total) {\n this.#core.seedActive(target);\n }\n }\n\n /**\n * Move activedescendant to the nearest preceding node at a shallower level\n * (the parent). No-op when the active node has no visible parent in the\n * snapshot — an accepted edge case when the parent has never been rendered.\n */\n moveToParent(): void {\n const cur = this.#currentEntry();\n if (!cur) return;\n const indexed = this.#core.snapshotByPos();\n for (let p = cur.pos - 1; p >= 0; p--) {\n const e = indexed.get(p);\n if (e && e.level < cur.level) {\n this.#core.seedActive(p);\n return;\n }\n }\n }\n\n typeaheadTo(handle: ForTreeItemHandle): void {\n this.#deps.setActiveId(handle.id());\n handle.host.scrollIntoView?.({ block: 'nearest' });\n }\n\n /**\n * Resolve the active node's position entry from live items first, then the\n * snapshot. Returns `{ pos, value, level, expandable, disabled }` or `null`\n * when nothing is active.\n */\n #currentEntry(): {\n pos: number;\n value: string;\n level: number;\n expandable: boolean;\n disabled: boolean;\n } | null {\n const currentId = this.#deps.getActiveId();\n if (currentId === null) {\n return null;\n }\n const live = this.#deps.items().find((o) => o.id() === currentId);\n if (live) {\n const pos = live.itemIndex();\n if (pos !== null) {\n return {\n pos,\n value: live.value(),\n level: live.level(),\n expandable: live.expandable(),\n disabled: live.disabled(),\n };\n }\n }\n const indexed = this.#core.snapshotByPos();\n for (const [pos, entry] of indexed) {\n if (entry.id === currentId) {\n return {\n pos,\n value: entry.value,\n level: entry.level,\n expandable: entry.expandable,\n disabled: entry.disabled,\n };\n }\n }\n return null;\n }\n}\n","import { inject, InjectionToken, type Signal } from '@angular/core';\n\nimport {\n type ListNavigationAction,\n type WritingDirection,\n type RovingTabindex,\n} from 'forty-cdk/core';\n\n/** A visible tree node plus its resolved parent host — the flattened list the root walks. */\nexport interface ForTreeVisibleNode {\n readonly handle: ForTreeItemHandle;\n readonly parentHost: HTMLElement | null;\n}\n\n/**\n * Handle a `ForTreeItem` registers with its enclosing container so the root\n * can flatten the currently-visible nodes, run typeahead, and resolve the\n * roving-tabindex entry point — all from registered handles plus the\n * `expanded` set, never from the DOM.\n */\nexport interface ForTreeItemHandle {\n /** The `role=\"treeitem\"` host element. */\n readonly host: HTMLElement;\n /** Stable node value. */\n readonly value: Signal<string>;\n /** Effective disabled state (own `disabled` OR the root's `disabled`). */\n readonly disabled: Signal<boolean>;\n /** Whether a `[forTreeItemToggle]` is registered, marking the item a parent. */\n readonly expandable: Signal<boolean>;\n /** Nested `[forTreeGroup]` container, present only while the item is expanded. */\n readonly childContainer: Signal<ForTreeContainerContext | null>;\n /** Typeahead text override; empty when the default label text should be used. */\n readonly textValue: Signal<string>;\n /** The `[forTreeItemLabel]` element, used as the default typeahead text source. */\n readonly labelEl: Signal<HTMLElement | null>;\n /** Stable host id for the activedescendant focus model (virtualized path). */\n readonly id: Signal<string>;\n /** Absolute index in the flattened visible-node list; `null` outside the virtualized path. */\n readonly itemIndex: Signal<number | null>;\n /** Resolved tree depth (1-based). Used for flat-space parent/child navigation. */\n readonly level: Signal<number>;\n}\n\n/**\n * Root-only coordination contract owned by `ForTree`. Items derive their\n * selection / expansion state from it; keyboard and pointer handlers route\n * navigation, selection, and expansion through it.\n */\nexport interface ForTreeContext {\n /** Selected node values. Single mode keeps the array at length <= 1. */\n readonly value: Signal<readonly string[]>;\n /** Open (expanded) parent node values. Always multi — no single mode. */\n readonly expanded: Signal<readonly string[]>;\n readonly multiple: Signal<boolean>;\n readonly disabled: Signal<boolean>;\n readonly orientation: Signal<'horizontal' | 'vertical'>;\n readonly dir: Signal<WritingDirection>;\n readonly selectionFollowsFocus: Signal<boolean>;\n /** Selection presentation: `'highlight'` (aria-selected) or `'checkbox'` (aria-checked). */\n readonly selectionMode: Signal<'highlight' | 'checkbox'>;\n /** Whether cascade selection is enabled (checkbox mode only). */\n readonly cascade: Signal<boolean>;\n readonly roving: RovingTabindex;\n /**\n * Length of the flattened visible-node list when virtualizing, `undefined` in\n * the roving-tabindex path. Setting it (via `[forTree][totalCount]`) switches\n * the tree to the activedescendant focus model.\n */\n readonly totalCount: Signal<number | undefined>;\n /** Inclusive-exclusive `[start, end)` rendered window; `undefined` when not virtualizing. */\n readonly visibleRange: Signal<readonly [number, number] | undefined>;\n /**\n * The active node's id under the activedescendant focus model, `null` in the\n * roving path. The root reflects it as `aria-activedescendant`; items read it\n * for `data-highlighted`.\n */\n readonly activeDescendantId: Signal<string | null>;\n /**\n * Called by an item on pointer activation in the virtualized path: moves\n * `aria-activedescendant` to that item and returns DOM focus to the tree\n * container. A no-op in the roving path.\n */\n notifyItemClick(itemId: string): void;\n\n isExpanded(value: string): boolean;\n isSelected(value: string): boolean;\n /**\n * Tri-state check status of a node in checkbox mode: `'true'` / `'false'`, or\n * `'mixed'` for a cascade parent with some-but-not-all descendants checked.\n */\n checkState(value: string): 'true' | 'false' | 'mixed';\n /** Open or close a node, mutating the `expanded` array immutably. */\n setExpanded(value: string, open: boolean): void;\n /** Single mode replaces the selection; multi mode toggles the value. */\n select(value: string): void;\n /**\n * Move roving focus from `currentItem` to the next / previous / first /\n * last enabled node in visible (flattened) order. In single mode with\n * `selectionFollowsFocus`, the destination is also selected.\n */\n navigate(currentItem: HTMLElement, action: ListNavigationAction): void;\n /**\n * Right arrow (LTR): expand a closed parent (focus stays); on an open\n * parent move focus to its first child; no-op on a leaf.\n */\n expandOrEnter(currentItem: HTMLElement): void;\n /**\n * Left arrow (LTR): collapse an open parent (focus stays); otherwise move\n * focus to the parent node; no-op at a closed root-level node.\n */\n collapseOrLeave(currentItem: HTMLElement): void;\n /** `*`: expand every sibling parent at the focused node's level. */\n expandSiblings(currentItem: HTMLElement): void;\n /**\n * Multi mode only. Shift+Arrow: move focus to the next / previous visible\n * node and toggle its selection.\n */\n extendByArrow(currentItem: HTMLElement, action: 'next' | 'prev'): void;\n /**\n * Multi mode only. Shift+Space: select every enabled visible node from the\n * anchor (set on the last unmodified selection) up to and including\n * `currentItem`.\n */\n selectRangeToFocused(currentItem: HTMLElement): void;\n /**\n * Multi mode only. Ctrl/Cmd+A: select every enabled visible node, or clear\n * the selection when all visible nodes are already selected.\n */\n selectAll(): void;\n /**\n * Forward a keydown to the typeahead helper. When the key is printable,\n * focuses the first matching visible node and returns `true`.\n */\n handleTypeahead(event: KeyboardEvent): boolean;\n /** Whether `el` is the first enabled root node — the default roving-tabindex entry point. */\n isFirstFocusableItem(el: HTMLElement): boolean;\n /**\n * Flattened currently-visible nodes in DOM order, each with its resolved parent host. Exposed for\n * drag-drop composition (`[forTreeNodeDrag]`). Reflects expansion: collapsed subtrees are absent.\n */\n readonly visibleNodes: Signal<readonly ForTreeVisibleNode[]>;\n}\n\nexport const FOR_TREE_CONTEXT = new InjectionToken<ForTreeContext>('FOR_TREE_CONTEXT');\n\n/**\n * Container contract implemented by both `ForTree` (the root, level 1) and\n * every `ForTreeGroup` (level = parent item level + 1). Items register here\n * to get their `aria-level` / `aria-posinset` / `aria-setsize`, and the root\n * walks containers recursively to flatten the visible nodes.\n */\nexport interface ForTreeContainerContext {\n readonly level: Signal<number>;\n readonly items: Signal<readonly ForTreeItemHandle[]>;\n registerItem(handle: ForTreeItemHandle): void;\n unregisterItem(handle: ForTreeItemHandle): void;\n indexOfHost(el: HTMLElement): number;\n}\n\nexport const FOR_TREE_CONTAINER_CONTEXT = new InjectionToken<ForTreeContainerContext>(\n 'FOR_TREE_CONTAINER_CONTEXT',\n);\n\n/**\n * Per-item contract provided by `ForTreeItem`, consumed by its label, toggle,\n * and nested group. A registered toggle marks the item expandable (D4); the\n * nested group reads `level` and registers itself as the item's child\n * container.\n */\nexport interface ForTreeItemContext {\n readonly value: Signal<string>;\n readonly level: Signal<number>;\n readonly expanded: Signal<boolean>;\n readonly expandable: Signal<boolean>;\n /** Whether this node is in the root's selection set (its `aria-checked` / `aria-selected` state). */\n readonly selected: Signal<boolean>;\n /** Tri-state checkbox status of this node (`'true'` / `'false'` / `'mixed'`). */\n readonly checkState: Signal<'true' | 'false' | 'mixed'>;\n /** Register a toggle. Presence makes the item expandable (D4). Returns an unregister fn. */\n registerToggle(): () => void;\n /** Set (or clear, on collapse) the nested `[forTreeGroup]` container. */\n setChildContainer(container: ForTreeContainerContext | null): void;\n /** Set (or clear) the `[forTreeItemLabel]` element used for typeahead text. */\n setLabel(el: HTMLElement | null): void;\n /** Toggle expansion. No-op on leaves or when disabled. */\n toggle(): void;\n /** Select / activate the item. No-op when disabled. */\n select(): void;\n /** Move roving focus to the item. No-op when disabled. */\n focusItem(): void;\n}\n\nexport const FOR_TREE_ITEM_CONTEXT = new InjectionToken<ForTreeItemContext>(\n 'FOR_TREE_ITEM_CONTEXT',\n);\n\n/** Injects the nearest {@link ForTreeContext}, throwing a prefixed error if absent. */\nexport function injectTreeContext(piece: string): ForTreeContext {\n const ctx = inject(FOR_TREE_CONTEXT, { optional: true });\n if (!ctx) {\n throw new Error(`[forty-cdk/tree] ${piece} must be used inside a [forTree] element.`);\n }\n return ctx;\n}\n\n/** Injects the nearest {@link ForTreeContainerContext} (the root or a group). */\nexport function injectTreeContainerContext(piece: string): ForTreeContainerContext {\n const ctx = inject(FOR_TREE_CONTAINER_CONTEXT, { optional: true });\n if (!ctx) {\n throw new Error(\n `[forty-cdk/tree] ${piece} must be used inside a [forTree] or [forTreeGroup] element.`,\n );\n }\n return ctx;\n}\n\n/** Injects the nearest enclosing {@link ForTreeItemContext}. */\nexport function injectTreeItemContext(piece: string): ForTreeItemContext {\n const ctx = inject(FOR_TREE_ITEM_CONTEXT, { optional: true });\n if (!ctx) {\n throw new Error(`[forty-cdk/tree] ${piece} must be used inside a [forTreeItem] element.`);\n }\n return ctx;\n}\n","import { type Provider } from '@angular/core';\n\nimport { createDefaults } from 'forty-cdk/core';\n\n/**\n * Defaults inherited by descendant trees in the surrounding injector scope.\n * Configure with `provideForTreeDefaults` either at the application root or in\n * any component's `providers` array; partial overrides merge with the parent\n * scope.\n */\nexport interface ForTreeDefaults {\n /**\n * Single-mode only: when `true`, arrow navigation also selects the focused\n * node. APG calls this optional and recommends caution — leave `false`\n * unless the UX truly benefits from selection following focus.\n */\n selectionFollowsFocus: boolean;\n}\n\n/**\n * Library fallback for tree defaults, read at the root injector when no\n * consumer has called `provideForTreeDefaults`. Exported for the shared\n * defaults contract spec; not re-exported from the primitive's public entry.\n */\nexport const FOR_TREE_FALLBACK_DEFAULTS: ForTreeDefaults = {\n selectionFollowsFocus: false,\n};\n\nconst { token, provideDefaults } = createDefaults<ForTreeDefaults>(\n 'FOR_TREE_DEFAULTS',\n FOR_TREE_FALLBACK_DEFAULTS,\n);\n\n/** Token holding the resolved tree defaults for the current scope. */\nexport const FOR_TREE_DEFAULTS = token;\n\n/**\n * Configures forty-cdk tree defaults for this injector scope. Partial\n * overrides inherit unspecified keys from the parent scope (or library\n * defaults at the root).\n */\nexport function provideForTreeDefaults(defaults: Partial<ForTreeDefaults> = {}): Provider[] {\n return provideDefaults(defaults);\n}\n","import { type Signal } from '@angular/core';\n\nimport { moveIndex, type RovingTabindex } from 'forty-cdk/core';\nimport type { ForTreeItemHandle, ForTreeVisibleNode } from './tree-context';\n\n/**\n * Wiring for {@link TreeSelection}. Bridges the engine to `ForTree`'s signal\n * graph and the two writable models (`value`, `expanded`) plus the shared\n * range anchor and roving-tabindex tracker.\n */\nexport interface TreeSelectionDeps {\n readonly value: Signal<readonly string[]>;\n readonly expanded: Signal<readonly string[]>;\n readonly multiple: Signal<boolean>;\n readonly disabled: Signal<boolean>;\n readonly selectionMode: Signal<'highlight' | 'checkbox'>;\n readonly cascade: Signal<boolean>;\n readonly descendantsOf: Signal<((value: string) => readonly string[]) | undefined>;\n /** Flattened visible nodes (each with its resolved parent host). */\n readonly visibleNodes: Signal<readonly ForTreeVisibleNode[]>;\n /** Visible node handles in flattened order. */\n readonly visibleHandles: Signal<readonly ForTreeItemHandle[]>;\n /** The shared roving-tabindex tracker, used to move focus on shift-extend. */\n readonly roving: RovingTabindex;\n /** Replace the selection value. */\n readonly setValue: (next: readonly string[]) => void;\n /** Replace the expanded set. */\n readonly setExpanded: (next: readonly string[]) => void;\n /** Read the current range anchor value. */\n readonly anchorValue: () => string | null;\n /** Write the range anchor value. */\n readonly setAnchorValue: (value: string | null) => void;\n}\n\n/**\n * Selection + checkbox-cascade engine for `ForTree`, extracted from the root so\n * the directive keeps only its reactive wiring and ARIA. Owns single / multi /\n * checkbox selection, cascade tri-state derivation, range selection, select-all,\n * and the `*`-key sibling expansion — every write goes back through the deps'\n * model setters so `ForTree` stays the single source of truth.\n *\n * Internal — not re-exported from `tree/index.ts` or `public-api.ts`.\n */\nexport class TreeSelection {\n readonly #deps: TreeSelectionDeps;\n\n constructor(deps: TreeSelectionDeps) {\n this.#deps = deps;\n }\n\n checkState(value: string): 'true' | 'false' | 'mixed' {\n const current = this.#deps.value();\n if (this.#deps.selectionMode() !== 'checkbox' || !this.#deps.cascade()) {\n return current.includes(value) ? 'true' : 'false';\n }\n const descendants = this.#resolveDescendants(value);\n if (descendants.length === 0) {\n return current.includes(value) ? 'true' : 'false';\n }\n const selected = new Set(current);\n let checked = 0;\n for (const d of descendants) {\n if (selected.has(d)) {\n checked += 1;\n }\n }\n if (checked === 0) {\n return 'false';\n }\n return checked === descendants.length ? 'true' : 'mixed';\n }\n\n select(value: string): void {\n if (this.#deps.disabled()) {\n return;\n }\n if (this.#deps.selectionMode() === 'checkbox' && this.#deps.cascade()) {\n const group = new Set([value, ...this.#resolveDescendants(value)]);\n const current = this.#deps.value();\n const allChecked = [...group].every((v) => current.includes(v));\n this.#deps.setValue(\n allChecked ? current.filter((v) => !group.has(v)) : [...new Set([...current, ...group])],\n );\n } else if (this.#deps.multiple() || this.#deps.selectionMode() === 'checkbox') {\n const current = this.#deps.value();\n this.#deps.setValue(\n current.includes(value) ? current.filter((v) => v !== value) : [...current, value],\n );\n } else {\n this.#deps.setValue([value]);\n }\n this.#deps.setAnchorValue(value);\n }\n\n expandSiblings(currentItem: HTMLElement): void {\n if (this.#deps.disabled()) {\n return;\n }\n const entries = this.#deps.visibleNodes();\n const current = entries.find((e) => e.handle.host === currentItem);\n if (!current) {\n return;\n }\n const next = [...this.#deps.expanded()];\n for (const entry of entries) {\n if (\n entry.parentHost === current.parentHost &&\n entry.handle.expandable() &&\n !next.includes(entry.handle.value())\n ) {\n next.push(entry.handle.value());\n }\n }\n this.#deps.setExpanded(next);\n }\n\n extendByArrow(currentItem: HTMLElement, action: 'next' | 'prev'): void {\n if (this.#deps.disabled() || !this.#deps.multiple()) {\n return;\n }\n const items = this.#deps.visibleHandles();\n if (items.length === 0) {\n return;\n }\n const currentIndex = items.findIndex((item) => item.host === currentItem);\n const next = moveIndex(currentIndex < 0 ? 0 : currentIndex, items.length, action, {\n loop: false,\n isDisabled: (i) => items[i]!.disabled(),\n });\n if (next === null) {\n return;\n }\n const target = items[next];\n if (!target) {\n return;\n }\n // Establish the range anchor at the origin of the shift-extend run so a\n // following Shift+Space ranges from where the user started extending, not\n // from a stale (or absent) anchor. A pre-existing anchor (e.g. from a prior\n // click) is left in place, matching the listbox range contract.\n if (this.#deps.anchorValue() === null && currentIndex >= 0) {\n this.#deps.setAnchorValue(items[currentIndex]!.value());\n }\n this.#deps.roving.focusActive(target.host);\n const value = target.value();\n const current = this.#deps.value();\n this.#deps.setValue(\n current.includes(value) ? current.filter((v) => v !== value) : [...current, value],\n );\n }\n\n selectRangeToFocused(currentItem: HTMLElement): void {\n if (this.#deps.disabled() || !this.#deps.multiple()) {\n return;\n }\n const items = this.#deps.visibleHandles();\n const currentIndex = items.findIndex((item) => item.host === currentItem);\n if (currentIndex < 0) {\n return;\n }\n const anchorValue = this.#deps.anchorValue();\n const anchorIndex =\n anchorValue === null ? currentIndex : items.findIndex((i) => i.value() === anchorValue);\n const start = anchorIndex < 0 ? currentIndex : anchorIndex;\n const [lo, hi] = start <= currentIndex ? [start, currentIndex] : [currentIndex, start];\n\n const next = [...this.#deps.value()];\n for (let i = lo; i <= hi; i++) {\n const item = items[i];\n if (!item || item.disabled()) {\n continue;\n }\n const value = item.value();\n if (!next.includes(value)) {\n next.push(value);\n }\n }\n this.#deps.setValue(next);\n }\n\n selectAll(): void {\n if (this.#deps.disabled() || !this.#deps.multiple()) {\n return;\n }\n const values = this.#deps\n .visibleNodes()\n .map((entry) => entry.handle)\n .filter((handle) => !handle.disabled())\n .map((handle) => handle.value());\n if (values.length === 0) {\n return;\n }\n const current = this.#deps.value();\n const allSelected = values.every((v) => current.includes(v));\n this.#deps.setValue(allSelected ? [] : [...new Set([...current, ...values])]);\n }\n\n #resolveDescendants(value: string): readonly string[] {\n const fn = this.#deps.descendantsOf();\n if (!fn) {\n throw new Error(\n '[forty-cdk/tree] `cascade` requires a `descendantsOf` descriptor returning the descendant values of a node.',\n );\n }\n return fn(value);\n }\n}\n","import {\n booleanAttribute,\n computed,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n type Signal,\n} from '@angular/core';\n\nimport {\n Collection,\n firstEnabledHost,\n type ListNavigationAction,\n resolveListNavigation,\n resolveTreeExpandCollapse,\n type WritingDirection,\n RovingTabindex,\n injectTextDirection,\n injectTypeahead,\n} from 'forty-cdk/core';\nimport { ActiveDescendantFocusModel, type FocusModel, RovingFocusModel } from './focus-model';\nimport {\n FOR_TREE_CONTAINER_CONTEXT,\n FOR_TREE_CONTEXT,\n type ForTreeContainerContext,\n type ForTreeContext,\n type ForTreeItemHandle,\n type ForTreeVisibleNode,\n} from './tree-context';\nimport { FOR_TREE_DEFAULTS } from './tree-defaults';\nimport { TreeSelection } from './tree-selection';\n\ntype VisibleEntry = ForTreeVisibleNode;\n\n/**\n * Headless implementation of the\n * [WAI-ARIA Tree View pattern](https://www.w3.org/WAI/ARIA/apg/patterns/treeview/).\n *\n * A nested tree (`role=\"tree\"` → `treeitem` → `group` → `treeitem`) with\n * `@if`-driven expansion, roving-tabindex focus management (APG Approach A —\n * DOM focus rides the `treeitem`), typeahead, RTL arrow mirroring, and full\n * `aria-level` / `aria-setsize` / `aria-posinset` wiring.\n *\n * Two orthogonal models:\n * - `value` — selected node values; single mode (default) keeps 0 or 1\n * element, multi mode accumulates.\n * - `expanded` — open parent node values; always multi (no single mode).\n *\n * Single-select consumers read the sole value through {@link ForTree.selected}\n * instead of unwrapping `value()[0]`.\n *\n * @example\n * ```html\n * <ul forTree [(value)]=\"selected\" [(expanded)]=\"expanded\" aria-label=\"Files\">\n * <ng-container [ngTemplateOutlet]=\"node\" [ngTemplateOutletContext]=\"{ $implicit: root }\" />\n * </ul>\n * ```\n */\n@Directive({\n selector: '[forTree]',\n exportAs: 'forTree',\n host: {\n role: 'tree',\n '[attr.aria-label]': 'ariaLabel() || null',\n '[attr.aria-multiselectable]': 'multiple() ? \"true\" : null',\n '[attr.aria-orientation]': 'orientation()',\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\n '[attr.data-orientation]': 'orientation()',\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\n '[attr.dir]': 'dir()',\n '[attr.aria-activedescendant]': 'activeDescendantId()',\n '[attr.tabindex]': 'hostTabindex()',\n '(keydown)': 'onHostKeyDown($event)',\n '(focusin)': 'onHostFocusIn()',\n },\n providers: [\n { provide: FOR_TREE_CONTEXT, useExisting: ForTree },\n { provide: FOR_TREE_CONTAINER_CONTEXT, useExisting: ForTree },\n ],\n})\nexport class ForTree implements ForTreeContext, ForTreeContainerContext {\n readonly #defaults = inject(FOR_TREE_DEFAULTS);\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /**\n * Two-way bindable. Selected node values. Single mode keeps the array at\n * length <= 1. The `model()` change emitter (`(valueChange)`) fires only on\n * internal selection changes (node activation or `selectionFollowsFocus`\n * navigation), never on consumer writes via `[(value)]`.\n */\n readonly value = model<readonly string[]>([]);\n\n /**\n * Two-way bindable. Open (expanded) parent node values. Always multi — any\n * number of nodes can be open. The `model()` change emitter\n * (`(expandedChange)`) fires only on internal expand / collapse, never on\n * consumer writes via `[(expanded)]`.\n */\n readonly expanded = model<readonly string[]>([]);\n\n /** When true, multiple nodes can be selected. Single mode (default) replaces. */\n readonly multiple = input(false, { transform: booleanAttribute });\n\n /** Disables the whole tree: nodes are not selectable and report `aria-disabled`. */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /** Navigation axis. `'vertical'` (default) uses ArrowUp/Down for movement. */\n readonly orientation = input<'vertical' | 'horizontal'>('vertical');\n\n /**\n * Selection presentation. `'highlight'` (default) keeps the `aria-selected`\n * contract; `'checkbox'` switches each `treeitem` to `aria-checked` and is\n * inherently multi-select (each node toggles independently).\n */\n readonly selectionMode = input<'highlight' | 'checkbox'>('highlight');\n\n /**\n * Enables cascade selection in `selectionMode=\"checkbox\"`: checking or\n * unchecking a node propagates to all its descendants, and a parent derives\n * `aria-checked=\"mixed\"` when only some descendants are checked. Ignored in\n * `'highlight'` mode. Requires {@link ForTree.descendantsOf}. Default `false`.\n */\n readonly cascade = input(false, { transform: booleanAttribute });\n\n /**\n * Returns the selectable descendant values of a node (excluding the node\n * itself), used to cascade selection and derive `'mixed'` across collapsed —\n * possibly unmounted — subtrees. **Required** when {@link ForTree.cascade} is\n * `true`; the tree throws a `[forty-cdk/tree]` error otherwise.\n */\n readonly descendantsOf = input<(value: string) => readonly string[]>();\n\n /**\n * Total number of nodes in the flattened visible-node list. When set, enables\n * the virtualized activedescendant focus model. Leave unset (default\n * `undefined`) for the standard roving-tabindex model.\n */\n readonly totalCount = input(undefined, {\n transform: (v: unknown): number | undefined => (v == null ? undefined : numberAttribute(v)),\n });\n\n /**\n * Inclusive-exclusive `[start, end)` index range of the currently rendered\n * nodes. The virtualizer provides this; the tree uses it to decide whether a\n * navigation target is in the visible window.\n */\n readonly visibleRange = input<readonly [number, number] | undefined>(undefined);\n\n /**\n * Emitted when keyboard navigation reaches a node outside the rendered\n * window. The consumer passes this index to `injectVirtualizer`'s\n * `scrollToIndex` so the correct node mounts.\n */\n readonly scrollToIndex = output<number>();\n\n /**\n * Manual `aria-label` for the tree. Use this when no visible label element\n * exists; otherwise prefer pointing `aria-labelledby` at one. A `null`\n * (default) or empty value emits no attribute.\n */\n readonly ariaLabel = input<string | null>(null);\n\n /**\n * Writing direction. When unset (default `null`), the inherited ambient\n * direction is resolved from the nearest ancestor carrying a `dir` attribute\n * (or `<html dir>`), defaulting to `'ltr'`. An explicit `[dir]` always wins.\n * The resolved value is reflected to the host `dir` attribute and swaps the\n * expand / collapse arrow semantics in RTL.\n */\n readonly _dirInput = input<WritingDirection | null>(null, { alias: 'dir' });\n readonly dir = injectTextDirection(this._dirInput);\n\n /**\n * Single-mode only: when true, arrow navigation also selects the focused\n * node. The default is read from `provideForTreeDefaults` for the\n * surrounding scope.\n */\n readonly selectionFollowsFocus = input(this.#defaults.selectionFollowsFocus, {\n transform: booleanAttribute,\n });\n\n /**\n * Read-only single-select convenience view of {@link value}. Returns the\n * sole selected value when exactly one node is selected, otherwise `null`\n * (empty selection, or multiple selections in `multiple` mode).\n */\n readonly selected = computed<string | null>(() => {\n const v = this.value();\n return v.length === 1 ? v[0]! : null;\n });\n\n /** Root container hosts level-1 items. */\n readonly level = signal(1);\n readonly roving = new RovingTabindex();\n\n readonly #typeahead = injectTypeahead();\n readonly #items = new Collection<ForTreeItemHandle>();\n readonly #anchorValue = signal<string | null>(null);\n\n readonly items = this.#items.items;\n\n readonly #visibleEntries = computed<readonly VisibleEntry[]>(() => {\n const expanded = this.expanded();\n const result: VisibleEntry[] = [];\n const walk = (container: ForTreeContainerContext, parentHost: HTMLElement | null): void => {\n for (const handle of container.items()) {\n result.push({ handle, parentHost });\n if (expanded.includes(handle.value())) {\n const child = handle.childContainer();\n if (child) {\n walk(child, handle.host);\n }\n }\n }\n };\n walk(this, null);\n return result;\n });\n\n /**\n * Flattened currently-visible nodes in DOM order, each with its resolved parent host. Exposed for\n * drag-drop composition (`[forTreeNodeDrag]`). Reflects expansion: collapsed subtrees are absent.\n */\n readonly visibleNodes: Signal<readonly ForTreeVisibleNode[]> = this.#visibleEntries;\n\n readonly #visibleHandles = computed(() => this.#visibleEntries().map((entry) => entry.handle));\n\n readonly #firstEnabledRoot = computed(() => firstEnabledHost(this.#items.items()));\n\n readonly #virtualized = computed(() => this.totalCount() !== undefined);\n\n readonly #activeId = signal<string | null>(null);\n\n /**\n * The active node's `id` when using the activedescendant focus model,\n * `null` in the roving-tabindex path. The host reflects this as\n * `aria-activedescendant`; items read it to compute `data-highlighted`.\n */\n readonly activeDescendantId = computed<string | null>(() =>\n this.#virtualized() ? this.#activeId() : null,\n );\n\n /**\n * Tabindex for the tree host. In the virtualized path the host is always the\n * single tab stop. In the roving path the host carries no tabindex (items own\n * their own tab stop). A disabled tree is never tabbable.\n */\n protected readonly hostTabindex = computed<'0' | null>(() => {\n if (this.disabled()) return null;\n return this.#virtualized() ? '0' : null;\n });\n\n readonly #selection = new TreeSelection({\n value: this.value,\n expanded: this.expanded,\n multiple: this.multiple,\n disabled: this.disabled,\n selectionMode: this.selectionMode,\n cascade: this.cascade,\n descendantsOf: this.descendantsOf,\n visibleNodes: this.#visibleEntries,\n visibleHandles: this.#visibleHandles,\n roving: this.roving,\n setValue: (next) => this.value.set(next),\n setExpanded: (next) => this.expanded.set(next),\n anchorValue: () => this.#anchorValue(),\n setAnchorValue: (value) => this.#anchorValue.set(value),\n });\n\n #rovingModel: RovingFocusModel | null = null;\n #activeDescendantModel: ActiveDescendantFocusModel | null = null;\n\n #requireActiveDescendantModel(): ActiveDescendantFocusModel {\n return (this.#activeDescendantModel ??= new ActiveDescendantFocusModel({\n items: this.#items.items,\n totalCount: this.totalCount,\n visibleRange: this.visibleRange,\n getActiveId: () => this.#activeId(),\n setActiveId: (id) => this.#activeId.set(id),\n emitScrollToIndex: (idx) => this.scrollToIndex.emit(idx),\n }));\n }\n\n #focusModel(): FocusModel {\n if (this.#virtualized()) {\n return this.#requireActiveDescendantModel();\n }\n return (this.#rovingModel ??= new RovingFocusModel({\n roving: this.roving,\n visibleNodes: this.#visibleEntries,\n visibleHandles: this.#visibleHandles,\n selectOnFocus: (value) => {\n if (!this.multiple() && this.selectionFollowsFocus()) {\n this.value.set([value]);\n this.#anchorValue.set(value);\n }\n },\n }));\n }\n\n constructor() {\n effect(() => {\n if (this.#virtualized()) return;\n const active = this.roving.active();\n if (active === null) {\n return;\n }\n const visible = this.#visibleEntries();\n const entry = visible.find((e) => e.handle.host === active);\n if (entry && !entry.handle.disabled() && active.isConnected) {\n return;\n }\n const fallback = visible.find((e) => !e.handle.disabled());\n this.roving.setActive(fallback?.handle.host ?? null);\n });\n effect(() => {\n this.#items.items();\n if (!this.#virtualized()) return;\n const model = this.#requireActiveDescendantModel();\n model.prime();\n model.tryResolvePending();\n });\n }\n\n isExpanded(value: string): boolean {\n return this.expanded().includes(value);\n }\n\n isSelected(value: string): boolean {\n return this.value().includes(value);\n }\n\n /**\n * Tri-state check status of a node in `selectionMode=\"checkbox\"`. Without\n * cascade (or in `'highlight'` mode) returns `'true'` / `'false'` by direct\n * membership. With cascade a parent returns `'true'` when all its descendants\n * are checked, `'false'` when none are, and `'mixed'` otherwise.\n */\n checkState(value: string): 'true' | 'false' | 'mixed' {\n return this.#selection.checkState(value);\n }\n\n setExpanded(value: string, open: boolean): void {\n const current = this.expanded();\n const has = current.includes(value);\n if (open && !has) {\n this.expanded.set([...current, value]);\n } else if (!open && has) {\n this.#relocateActiveOnCollapse(value);\n this.expanded.set(current.filter((v) => v !== value));\n }\n }\n\n select(value: string): void {\n this.#selection.select(value);\n }\n\n #relocateActiveOnCollapse(value: string): void {\n const active = this.roving.active();\n if (active === null) {\n return;\n }\n const visible = this.#visibleEntries();\n const collapsing = visible.find((e) => e.handle.value() === value);\n if (!collapsing) {\n return;\n }\n const collapsingHost = collapsing.handle.host;\n if (collapsingHost !== active && collapsingHost.contains(active)) {\n this.roving.focusActive(collapsingHost);\n }\n }\n\n navigate(_currentItem: HTMLElement, action: ListNavigationAction): void {\n if (this.disabled()) {\n return;\n }\n this.#focusModel().navigate(action);\n }\n\n expandOrEnter(_currentItem: HTMLElement): void {\n if (this.disabled()) {\n return;\n }\n const model = this.#focusModel();\n const cur = model.current();\n if (!cur || cur.disabled || !cur.expandable) {\n return;\n }\n if (!this.isExpanded(cur.value)) {\n this.setExpanded(cur.value, true);\n return;\n }\n model.enterChild();\n }\n\n collapseOrLeave(_currentItem: HTMLElement): void {\n if (this.disabled()) {\n return;\n }\n const model = this.#focusModel();\n const cur = model.current();\n if (!cur) {\n return;\n }\n if (cur.expandable && this.isExpanded(cur.value)) {\n this.setExpanded(cur.value, false);\n return;\n }\n model.moveToParent();\n }\n\n expandSiblings(currentItem: HTMLElement): void {\n this.#selection.expandSiblings(currentItem);\n }\n\n extendByArrow(currentItem: HTMLElement, action: 'next' | 'prev'): void {\n this.#selection.extendByArrow(currentItem, action);\n }\n\n selectRangeToFocused(currentItem: HTMLElement): void {\n this.#selection.selectRangeToFocused(currentItem);\n }\n\n selectAll(): void {\n this.#selection.selectAll();\n }\n\n handleTypeahead(event: KeyboardEvent): boolean {\n if (!this.#typeahead.handle(event)) {\n return false;\n }\n const buffer = this.#typeahead.buffer().toLowerCase();\n if (!buffer) {\n return true;\n }\n const source = this.#virtualized()\n ? this.#items.items()\n : this.#visibleEntries().map((entry) => entry.handle);\n const match = source.find((handle) => {\n if (handle.disabled()) {\n return false;\n }\n const text = (handle.textValue() || handle.labelEl()?.textContent || '').trim().toLowerCase();\n return text.startsWith(buffer);\n });\n if (match) {\n this.#focusModel().typeaheadTo(match);\n }\n return true;\n }\n\n isFirstFocusableItem(el: HTMLElement): boolean {\n return this.#firstEnabledRoot() === el;\n }\n\n protected onHostKeyDown(event: KeyboardEvent): void {\n if (!this.#virtualized() || this.disabled()) return;\n const host = this.#host.nativeElement;\n if (event.key === 'Enter' || event.key === ' ' || event.key === 'Spacebar') {\n event.preventDefault();\n this.#activateActiveDescendant();\n return;\n }\n const action = resolveListNavigation(event, {\n orientation: this.orientation(),\n dir: this.dir(),\n });\n if (action === 'next' || action === 'prev' || action === 'first' || action === 'last') {\n event.preventDefault();\n this.navigate(host, action);\n return;\n }\n const intent = resolveTreeExpandCollapse(event, {\n orientation: this.orientation(),\n dir: this.dir(),\n });\n if (intent === 'expand') {\n event.preventDefault();\n this.expandOrEnter(host);\n return;\n }\n if (intent === 'collapse') {\n event.preventDefault();\n this.collapseOrLeave(host);\n return;\n }\n this.handleTypeahead(event);\n }\n\n protected onHostFocusIn(): void {\n if (!this.#virtualized() || this.disabled()) return;\n if (this.#activeId() !== null) return;\n const items = this.#items.items();\n if (items.length === 0) return;\n const ordered = [...items].sort((a, b) => (a.itemIndex() ?? 0) - (b.itemIndex() ?? 0));\n const value = this.value();\n const selectedFirst = ordered.find((h) => !h.disabled() && value.includes(h.value()));\n const target = selectedFirst ?? ordered.find((h) => !h.disabled());\n if (target) this.#activeId.set(target.id());\n }\n\n #activateActiveDescendant(): void {\n const id = this.#activeId();\n if (id === null) return;\n const handle = this.#items.items().find((o) => o.id() === id);\n if (!handle || handle.disabled()) return;\n this.select(handle.value());\n }\n\n registerItem(handle: ForTreeItemHandle): void {\n this.#items.register(handle);\n }\n\n notifyItemClick(itemId: string): void {\n if (!this.#virtualized()) return;\n this.#activeId.set(itemId);\n this.#host.nativeElement.focus();\n }\n\n unregisterItem(handle: ForTreeItemHandle): void {\n this.#items.unregister(handle);\n this.roving.unregister(handle.host);\n if (this.#virtualized() && this.#activeId() === handle.id()) {\n this.#activeId.set(null);\n }\n }\n\n indexOfHost(el: HTMLElement): number {\n return this.#items.indexOfHost(el);\n }\n}\n","/**\n * Screen-reader announcement strings for `ForTreeNodeDrag`. Kept framework-free and\n * separate from the directive so the live-region copy lives in one place and can be unit\n * tested without rendering the tree. Not part of the public API.\n */\n\n/** Spoken when a node is picked up (assertive). */\nexport function announceTreeLift(label: string): string {\n return `Picked up ${label}. Use arrow keys to move, Space to drop, Escape to cancel.`;\n}\n\n/** Spoken on each intermediate move while a node is lifted (polite). */\nexport function announceTreeMove(\n label: string,\n parentLabel: string | null,\n position: number,\n total: number,\n): string {\n const parentPart = parentLabel ? `under ${parentLabel}, ` : 'at root, ';\n return `${label}: ${parentPart}position ${position} of ${total}.`;\n}\n\n/** Spoken when a node is committed to its new position (assertive). */\nexport function announceTreeDrop(\n label: string,\n parentLabel: string | null,\n position: number,\n total: number,\n): string {\n const parentPart = parentLabel ? `under ${parentLabel}, ` : 'at root, ';\n return `Dropped ${label} ${parentPart}position ${position} of ${total}.`;\n}\n\n/** Spoken when a lift is cancelled and the node returns to its origin (assertive). */\nexport function announceTreeCancel(label: string): string {\n return `Cancelled. ${label} returned to its original position.`;\n}\n\n/** Spoken when a `canDrop` veto rejects the attempted drop (assertive). */\nexport function announceTreeInvalid(label: string): string {\n return `Cannot drop ${label} here.`;\n}\n","import { resolveLiftedDragControl } from 'forty-cdk/core';\n\n/**\n * Tree-specific keyboard resolver for `ForTreeNodeDrag`. Framework-free and unit-testable in\n * isolation. Not part of the public API. The lift chord (`isDragLiftKey`) and the commit / cancel\n * vocabulary are shared across reorder coordinators in `_internal/drag-session/keyboard-drag-keys`.\n */\n\n/** The action a key press maps to while a node is lifted (keyboard drag in progress). */\nexport type TreeDragLiftedAction = 'cancel' | 'commit' | 'down' | 'up' | 'deepen' | 'shallow';\n\n/**\n * Resolves the action for a key press while a node is lifted, honoring writing direction for\n * the depth keys (ArrowRight deepens in LTR, ArrowLeft deepens in RTL). Cancel / commit are\n * delegated to the shared {@link resolveLiftedDragControl}. Returns `null` for keys with no\n * lifted-drag meaning.\n *\n * @param event The keydown event.\n * @param dir Resolved writing direction.\n */\nexport function resolveTreeDragLiftedAction(\n event: KeyboardEvent,\n dir: 'ltr' | 'rtl',\n): TreeDragLiftedAction | null {\n const control = resolveLiftedDragControl(event);\n if (control) {\n return control;\n }\n const key = event.key;\n if (key === 'ArrowDown') {\n return 'down';\n }\n if (key === 'ArrowUp') {\n return 'up';\n }\n const isRtl = dir === 'rtl';\n if (key === (isRtl ? 'ArrowLeft' : 'ArrowRight')) {\n return 'deepen';\n }\n if (key === (isRtl ? 'ArrowRight' : 'ArrowLeft')) {\n return 'shallow';\n }\n return null;\n}\n","import { type TreeDropRow } from 'forty-cdk/core';\nimport type { ForTreeVisibleNode } from './tree-context';\n\n/**\n * Pure helpers that turn the tree's visible-node list into the flat row / label data the\n * drag resolver and announcements consume. Framework-free and unit-testable. Not public.\n */\n\n/** The origin bookkeeping captured when a node is lifted. */\nexport interface TreeLiftContext {\n /** The lifted node's value. */\n readonly value: string;\n /** The lifted node's parent value, or `null` at the root. */\n readonly parentValue: string | null;\n /** The lifted node's index among its siblings before the move. */\n readonly previousIndex: number;\n}\n\n/**\n * Builds the flat, DOM-ordered rows the drop resolver works on, EXCLUDING the lifted node\n * (whose subtree is collapsed during the drag). Reads each row's live viewport rect.\n *\n * @param visible The tree's currently visible nodes, in DOM order.\n * @param liftedValue The value of the node being dragged, filtered out of the result.\n */\nexport function buildTreeDropRows(\n visible: readonly ForTreeVisibleNode[],\n liftedValue: string | null,\n): TreeDropRow[] {\n return visible\n .filter((e) => e.handle.value() !== liftedValue)\n .map((e) => {\n const rect = e.handle.host.getBoundingClientRect();\n return {\n value: e.handle.value(),\n level: e.handle.level(),\n left: rect.left,\n top: rect.top,\n bottom: rect.bottom,\n };\n });\n}\n\n/** The visible row's trimmed accessible label (its label element, else its text content). */\nexport function treeNodeLabel(entry: ForTreeVisibleNode): string {\n const labelEl = entry.handle.labelEl();\n return (labelEl?.textContent ?? entry.handle.host.textContent ?? '').trim();\n}\n\n/**\n * Whether a pointerdown inside `itemHost` may start a drag, honoring drag handles: when the\n * item contains one or more registered handles, the press must land inside one; an item with\n * no handle is grabbable anywhere.\n *\n * @param itemHost The `[forTreeItem]` host the press landed in.\n * @param target The pointerdown event target.\n * @param handles All registered drag-handle elements (across the whole tree).\n */\nexport function isInsideGrabArea(\n itemHost: HTMLElement,\n target: HTMLElement,\n handles: ReadonlySet<HTMLElement>,\n): boolean {\n const itemHandles = [...handles].filter((h) => itemHost.contains(h));\n if (itemHandles.length === 0) {\n return true;\n }\n return itemHandles.some((h) => h === target || h.contains(target));\n}\n\n/** The trimmed label for `parentValue`, or `null` when it has no row (root drop). */\nexport function treeParentLabel(\n visible: readonly ForTreeVisibleNode[],\n parentValue: string | null,\n): string | null {\n if (parentValue === null) {\n return null;\n }\n const entry = visible.find((e) => e.handle.value() === parentValue);\n return entry ? treeNodeLabel(entry) : null;\n}\n\n/**\n * Captures the lifted node's origin (value, parent, sibling index) from its position in the\n * visible list, before any collapse-on-lift mutates the tree.\n *\n * @param visible The visible nodes at lift time, in DOM order.\n * @param visibleIdx The lifted node's index within `visible`.\n */\nexport function resolveTreeLiftContext(\n visible: readonly ForTreeVisibleNode[],\n visibleIdx: number,\n): TreeLiftContext | null {\n const entry = visible[visibleIdx];\n if (!entry) {\n return null;\n }\n const parentHost = entry.parentHost;\n const parentEntry = parentHost ? visible.find((e) => e.handle.host === parentHost) : null;\n const previousIndex = visible.filter(\n (e) => e.parentHost === parentHost && visible.indexOf(e) < visibleIdx,\n ).length;\n return {\n value: entry.handle.value(),\n parentValue: parentEntry ? parentEntry.handle.value() : null,\n previousIndex,\n };\n}\n\n/**\n * Resolves the initial insertion gap after a collapse-on-lift re-renders the visible list.\n * Pointer lifts clamp the original `visibleIdx` to the row count; keyboard lifts map it to the\n * first row whose post-collapse visible index is at or past `visibleIdx` (`rows.length` if\n * none), keeping the cursor where the focused node sat.\n *\n * @param rows The post-collapse drop rows (lifted node already excluded).\n * @param visibleAfter The visible nodes after the collapse.\n * @param visibleIdx The lifted node's index before the collapse.\n * @param mode Whether the lift was started by pointer or keyboard.\n */\nexport function resolveLiftGap(\n rows: readonly TreeDropRow[],\n visibleAfter: readonly ForTreeVisibleNode[],\n visibleIdx: number,\n mode: 'keyboard' | 'pointer',\n): number {\n if (mode === 'pointer') {\n return Math.min(visibleIdx, rows.length);\n }\n const gap = rows.findIndex((r) => {\n const nextEntry = visibleAfter.find((e) => e.handle.value() === r.value);\n return nextEntry && visibleAfter.indexOf(nextEntry) >= visibleIdx;\n });\n return gap < 0 ? rows.length : gap;\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n booleanAttribute,\n DestroyRef,\n Directive,\n DOCUMENT,\n ElementRef,\n InjectionToken,\n inject,\n input,\n output,\n PLATFORM_ID,\n signal,\n type Signal,\n} from '@angular/core';\n\nimport {\n LiveAnnouncer,\n type PreviewPoint,\n PreviewController,\n isDragLiftKey,\n createKeyboardDragMediator,\n createPointerDragSession,\n type PointerDragSession,\n gapFromPointerY,\n levelFromPointerX,\n resolveDropIndicator,\n resolveTreeDrop,\n type TreeDropRow,\n} from 'forty-cdk/core';\nimport {\n announceTreeCancel,\n announceTreeDrop,\n announceTreeInvalid,\n announceTreeLift,\n announceTreeMove,\n} from './tree-drag-announcements';\nimport { resolveTreeDragLiftedAction } from './tree-drag-keys';\nimport {\n buildTreeDropRows,\n isInsideGrabArea,\n resolveLiftGap,\n resolveTreeLiftContext,\n treeNodeLabel,\n treeParentLabel,\n} from './tree-drag-rows';\nimport { injectTreeContext, type ForTreeVisibleNode } from './tree-context';\nimport type { ForTreeDragDropEvent } from './tree-drag-drop-event';\n\nconst POINTER_ARM_THRESHOLD_PX = 5;\n\n/**\n * Where the lifted node will land, for rendering an insertion indicator. `null` when idle.\n */\nexport interface ForTreeDropIndicator {\n /** The visible row the indicator anchors to (the node value). */\n readonly anchor: string;\n /** Whether the line sits just before or just after the anchor row in DOM order. */\n readonly position: 'before' | 'after';\n /** Resolved 1-based depth of the drop (mirror of `--for-tree-drop-level`). */\n readonly level: number;\n}\n\n/** The coordination contract the handle uses to register with the coordinator. */\nexport interface ForTreeNodeDragContext {\n /** Register a drag handle element for the item that contains it. */\n registerHandle(el: HTMLElement): void;\n /** Unregister a previously registered handle element. */\n unregisterHandle(el: HTMLElement): void;\n /** Resolved drop indicator while a drag is live; `null` when idle. */\n readonly dropIndicator: Signal<ForTreeDropIndicator | null>;\n}\n\n/** InjectionToken for the `[forTreeNodeDrag]` coordinator. */\nexport const FOR_TREE_NODE_DRAG_CONTEXT = new InjectionToken<ForTreeNodeDragContext>(\n 'FOR_TREE_NODE_DRAG_CONTEXT',\n);\n\ntype DragMode = 'idle' | 'keyboard' | 'pointer';\n\n/**\n * Root-level drag-drop coordinator for `ForTree`. Apply on the same element as `[forTree]` to\n * enable reordering and re-parenting of tree nodes by pointer and keyboard.\n *\n * Keyboard: focus a node, then press Ctrl+Space (or Cmd+Space) to lift. While lifted, ArrowUp/Down\n * move the sibling position, ArrowRight/Left change depth, Space/Enter drops, Escape cancels.\n *\n * Pointer: drag any enabled item to a new position; an optional `[forTreeNodeDragHandle]` on an\n * item constrains the grab area.\n *\n * The `(nodeDrop)` output fires once per committed move. Apply `moveTreeNode` in the handler to\n * update the consumer's data. Provide a `[canDrop]` function to veto specific moves.\n */\n@Directive({\n selector: '[forTreeNodeDrag]',\n exportAs: 'forTreeNodeDrag',\n providers: [{ provide: FOR_TREE_NODE_DRAG_CONTEXT, useExisting: ForTreeNodeDrag }],\n host: {\n '[attr.data-dragging]': '_dragging() ? \"\" : null',\n '[attr.data-drop-target]': '_dropTargetValid() ? \"\" : null',\n '[style.--for-tree-drop-level]': '_dropLevel()',\n },\n})\nexport class ForTreeNodeDrag implements ForTreeNodeDragContext {\n readonly #ctx = injectTreeContext('ForTreeNodeDrag');\n readonly #hostEl = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n readonly #document = inject(DOCUMENT);\n readonly #isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n readonly #announcer = inject(LiveAnnouncer);\n readonly #destroyRef = inject(DestroyRef);\n\n /** Disables all drag interactions on this tree. */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /**\n * Optional veto callback. Return `false` to reject a specific drop — the node is returned to its\n * original position and an announcement is made. When omitted, all drops are accepted.\n */\n readonly canDrop = input<((event: ForTreeDragDropEvent) => boolean) | undefined>(undefined);\n\n /** Emitted once per committed move. Apply `moveTreeNode` in the handler to update your data. */\n readonly nodeDrop = output<ForTreeDragDropEvent>();\n\n protected readonly _dragging = signal(false);\n protected readonly _dropTargetValid = signal(false);\n protected readonly _dropLevel = signal<number | null>(null);\n\n readonly #dropIndicator = signal<ForTreeDropIndicator | null>(null);\n\n /** Resolved drop indicator while a drag is live; `null` when idle. */\n readonly dropIndicator: Signal<ForTreeDropIndicator | null> = this.#dropIndicator.asReadonly();\n\n readonly #handles = new Set<HTMLElement>();\n\n #mode: DragMode = 'idle';\n #liftedValue: string | null = null;\n #previousParent: string | null = null;\n #previousIndex = 0;\n #gapIndex = 0;\n #desiredLevel = 1;\n #previewController: PreviewController | null = null;\n #wasExpanded = false;\n #liftedHost: HTMLElement | null = null;\n #label = '';\n\n #pointerSession: PointerDragSession | null = null;\n\n constructor() {\n if (!this.#isBrowser) {\n return;\n }\n\n createKeyboardDragMediator({\n host: this.#hostEl,\n isBrowser: this.#isBrowser,\n destroyRef: this.#destroyRef,\n isLifted: () => this.#mode === 'keyboard',\n onIdleKeydown: (event) => this.#onIdleKeydown(event),\n onLiftedKeydown: (event) => this.#handleLiftedKeydown(event),\n onFocusOut: (event) => this.#onFocusout(event),\n });\n\n this.#pointerSession = createPointerDragSession({\n host: this.#hostEl,\n document: this.#document,\n armThreshold: POINTER_ARM_THRESHOLD_PX,\n canStart: (event) => this.#canStartPointer(event),\n onLift: (event) => this.#onPointerLift(event),\n onMove: (event) => this.#onPointerMove(event),\n onCommit: (event) => this.#onPointerCommit(event),\n onCancel: () => this.#cancelSession(true),\n });\n\n this.#destroyRef.onDestroy(() => {\n this.#pointerSession?.destroy();\n if (this.#mode !== 'idle') {\n this.#cancelSession(false);\n }\n });\n }\n\n registerHandle(el: HTMLElement): void {\n this.#handles.add(el);\n }\n\n unregisterHandle(el: HTMLElement): void {\n this.#handles.delete(el);\n }\n\n #onIdleKeydown(event: KeyboardEvent): void {\n if (this.#mode !== 'idle' || !isDragLiftKey(event)) {\n return;\n }\n if (this.disabled() || this.#ctx.disabled()) {\n return;\n }\n const target = event.target as HTMLElement;\n const visible = this.#ctx.visibleNodes();\n const entry = visible.find((e) => e.handle.host === target);\n if (!entry || entry.handle.disabled()) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n this.#lift(entry.handle.host, visible.indexOf(entry), visible, 'keyboard');\n }\n\n #handleLiftedKeydown(event: KeyboardEvent): void {\n const action = resolveTreeDragLiftedAction(event, this.#ctx.dir());\n if (action === null) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n\n if (action === 'cancel') {\n this.#cancelSession(true);\n return;\n }\n if (action === 'commit') {\n this.#commitSession();\n return;\n }\n\n const visible = this.#ctx.visibleNodes();\n if (action === 'down') {\n this.#gapIndex = Math.min(\n this.#gapIndex + 1,\n buildTreeDropRows(visible, this.#liftedValue).length,\n );\n } else if (action === 'up') {\n this.#gapIndex = Math.max(this.#gapIndex - 1, 0);\n } else if (action === 'deepen') {\n this.#desiredLevel++;\n } else {\n this.#desiredLevel = Math.max(1, this.#desiredLevel - 1);\n }\n this.#resolveAndAnnounceMove(visible);\n }\n\n #onFocusout(event: FocusEvent): void {\n if (this.#mode !== 'keyboard') {\n return;\n }\n const related = event.relatedTarget as HTMLElement | null;\n if (related && this.#hostEl.contains(related)) {\n return;\n }\n this.#cancelSession(true);\n }\n\n #canStartPointer(event: PointerEvent): boolean {\n if (this.disabled() || this.#ctx.disabled() || event.button !== 0) {\n return false;\n }\n const target = event.target as HTMLElement;\n const itemHost = target.closest<HTMLElement>('[forTreeItem]');\n if (!itemHost) {\n return false;\n }\n const entry = this.#ctx.visibleNodes().find((e) => e.handle.host === itemHost);\n if (!entry || entry.handle.disabled()) {\n return false;\n }\n if (!isInsideGrabArea(itemHost, target, this.#handles)) {\n return false;\n }\n this.#liftedHost = itemHost;\n return true;\n }\n\n #onPointerLift(event: PointerEvent): boolean {\n if (!this.#liftedHost) {\n return false;\n }\n const visible = this.#ctx.visibleNodes();\n const idx = visible.findIndex((e) => e.handle.host === this.#liftedHost);\n if (idx < 0) {\n this.#liftedHost = null;\n return false;\n }\n this.#lift(this.#liftedHost, idx, visible, 'pointer', {\n x: event.clientX,\n y: event.clientY,\n });\n return true;\n }\n\n #applyPointerPosition(event: PointerEvent): TreeDropRow[] {\n const rows = buildTreeDropRows(this.#ctx.visibleNodes(), this.#liftedValue);\n this.#gapIndex = gapFromPointerY(rows, event.clientY);\n this.#desiredLevel = levelFromPointerX(rows, this.#gapIndex, event.clientX);\n return rows;\n }\n\n #onPointerMove(event: PointerEvent): void {\n if (this.#mode !== 'pointer') {\n return;\n }\n const rows = this.#applyPointerPosition(event);\n const target = resolveTreeDrop(rows, this.#gapIndex, this.#desiredLevel);\n this.#publishDropTarget(rows, target.level);\n\n this.#previewController?.moveTo({ x: event.clientX, y: event.clientY });\n }\n\n #onPointerCommit(event: PointerEvent): void {\n if (this.#mode !== 'pointer') {\n return;\n }\n this.#applyPointerPosition(event);\n this.#commitSession();\n }\n\n #lift(\n host: HTMLElement,\n visibleIdx: number,\n visible: readonly ForTreeVisibleNode[],\n mode: 'keyboard' | 'pointer',\n point?: PreviewPoint,\n ): void {\n const entry = visible[visibleIdx];\n const origin = resolveTreeLiftContext(visible, visibleIdx);\n if (!entry || !origin) {\n return;\n }\n\n this.#liftedValue = origin.value;\n this.#previousParent = origin.parentValue;\n this.#previousIndex = origin.previousIndex;\n this.#wasExpanded = this.#ctx.isExpanded(origin.value);\n this.#label = treeNodeLabel(entry);\n this.#mode = mode;\n this.#liftedHost = host;\n\n if (this.#wasExpanded) {\n this.#ctx.setExpanded(origin.value, false);\n }\n\n if (mode === 'pointer' && point) {\n this.#previewController = new PreviewController({\n source: host,\n point,\n preview: null,\n doc: this.#document,\n boundary: null,\n lockAxis: () => null,\n });\n }\n\n const visibleAfter = this.#ctx.visibleNodes();\n const rows = buildTreeDropRows(visibleAfter, this.#liftedValue);\n this.#gapIndex = resolveLiftGap(rows, visibleAfter, visibleIdx, mode);\n this.#desiredLevel = entry.handle.level();\n\n this._dragging.set(true);\n this.#publishDropTarget(rows, this.#desiredLevel);\n\n this.#announcer.announce(announceTreeLift(this.#label), 'assertive');\n }\n\n #publishDropTarget(rows: TreeDropRow[], level: number): void {\n this._dropTargetValid.set(true);\n this._dropLevel.set(level);\n this.#dropIndicator.set(resolveDropIndicator(rows, this.#gapIndex, level));\n }\n\n #commitSession(): void {\n if (this.#mode === 'idle' || this.#liftedValue === null) {\n return;\n }\n const visible = this.#ctx.visibleNodes();\n const rows = buildTreeDropRows(visible, this.#liftedValue);\n const target = resolveTreeDrop(rows, this.#gapIndex, this.#desiredLevel);\n\n const parentLabel = treeParentLabel(visible, target.parentValue);\n\n const event: ForTreeDragDropEvent = {\n node: this.#liftedValue,\n previousParent: this.#previousParent,\n newParent: target.parentValue,\n previousIndex: this.#previousIndex,\n currentIndex: target.index,\n };\n\n const veto = this.canDrop();\n if (veto !== undefined && !veto(event)) {\n this.#announcer.announce(announceTreeInvalid(this.#label), 'assertive');\n this.#cancelSession(true);\n return;\n }\n\n this.#restoreExpansion();\n this.nodeDrop.emit(event);\n this.#announcer.announce(\n announceTreeDrop(this.#label, parentLabel, target.index + 1, target.siblingCount + 1),\n 'assertive',\n );\n this.#clearSession();\n }\n\n #cancelSession(restore: boolean): void {\n if (restore) {\n this.#restoreExpansion();\n this.#announcer.announce(announceTreeCancel(this.#label), 'assertive');\n }\n this.#clearSession();\n }\n\n #restoreExpansion(): void {\n if (this.#wasExpanded && this.#liftedValue !== null) {\n this.#ctx.setExpanded(this.#liftedValue, true);\n }\n }\n\n #clearSession(): void {\n this.#mode = 'idle';\n this.#liftedValue = null;\n this.#previousParent = null;\n this.#previousIndex = 0;\n this.#gapIndex = 0;\n this.#desiredLevel = 1;\n this.#wasExpanded = false;\n this.#liftedHost = null;\n this.#label = '';\n\n if (this.#previewController) {\n this.#previewController.destroy();\n this.#previewController = null;\n }\n\n this._dragging.set(false);\n this._dropTargetValid.set(false);\n this._dropLevel.set(null);\n this.#dropIndicator.set(null);\n }\n\n #resolveAndAnnounceMove(visible: readonly ForTreeVisibleNode[]): void {\n const rows = buildTreeDropRows(visible, this.#liftedValue);\n const target = resolveTreeDrop(rows, this.#gapIndex, this.#desiredLevel);\n this.#desiredLevel = target.level;\n this.#publishDropTarget(rows, target.level);\n\n const parentLabel = treeParentLabel(visible, target.parentValue);\n\n this.#announcer.announce(\n announceTreeMove(this.#label, parentLabel, target.index + 1, target.siblingCount + 1),\n 'polite',\n );\n }\n}\n","import {\n booleanAttribute,\n computed,\n Directive,\n ElementRef,\n inject,\n input,\n signal,\n} from '@angular/core';\n\nimport {\n registerHandle,\n hostId,\n resolveListNavigation,\n resolveTreeExpandCollapse,\n} from 'forty-cdk/core';\nimport {\n FOR_TREE_ITEM_CONTEXT,\n type ForTreeContainerContext,\n type ForTreeItemContext,\n type ForTreeItemHandle,\n injectTreeContainerContext,\n injectTreeContext,\n} from './tree-context';\nimport { FOR_TREE_NODE_DRAG_CONTEXT } from './tree-node-drag';\n\n/**\n * A single node in a `ForTree`. Carries the `role=\"treeitem\"`, its ARIA state\n * (`aria-expanded` only when a `[forTreeItemToggle]` is registered, plus\n * `aria-selected` / `aria-level` / `aria-setsize` / `aria-posinset`), the\n * roving tab stop, and the full keyboard interaction.\n *\n * Apply on the structural element (typically `<li forTreeItem>`); place a\n * `[forTreeItemLabel]` inside as the pointer target and a `[forTreeGroup]`\n * (behind `@if`) for children.\n */\n@Directive({\n selector: '[forTreeItem]',\n exportAs: 'forTreeItem',\n host: {\n role: 'treeitem',\n '[id]': 'id()',\n '[attr.aria-expanded]': 'expandable() ? (expanded() ? \"true\" : \"false\") : null',\n '[attr.aria-checked]': 'checkboxMode() ? checkState() : null',\n '[attr.aria-selected]': 'checkboxMode() ? null : (selected() ? \"true\" : \"false\")',\n '[attr.aria-level]': 'level()',\n '[attr.aria-setsize]': 'setsize()',\n '[attr.aria-posinset]': 'posinset()',\n '[attr.aria-disabled]': 'effectiveDisabled() ? \"true\" : null',\n '[attr.tabindex]': 'tabindex()',\n '[attr.data-state]': 'expandable() ? (expanded() ? \"open\" : \"closed\") : null',\n '[attr.data-selected]': 'selected() ? \"\" : null',\n '[attr.data-highlighted]': 'highlighted() ? \"\" : null',\n '[attr.data-disabled]': 'effectiveDisabled() ? \"\" : null',\n '[attr.data-checked]': 'checkboxMode() ? checkState() : null',\n '[attr.data-drop-position]': '_dropPosition()',\n '(keydown)': 'onKeyDown($event)',\n '(focus)': 'onFocus()',\n '(pointerdown)': 'onPointerDown($event)',\n },\n providers: [{ provide: FOR_TREE_ITEM_CONTEXT, useExisting: ForTreeItem }],\n})\nexport class ForTreeItem implements ForTreeItemContext {\n readonly #tree = injectTreeContext('ForTreeItem');\n readonly #container = injectTreeContainerContext('ForTreeItem');\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #drag = inject(FOR_TREE_NODE_DRAG_CONTEXT, { optional: true });\n\n /** Stable identifier for this node, mirrored into `[(value)]` / `[(expanded)]`. */\n readonly value = input.required<string>();\n\n /** Disables this node: not selectable, skipped by keyboard navigation. */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /**\n * Typeahead text source override. Falls back to the `[forTreeItemLabel]`\n * element's text content when empty (default).\n */\n readonly textValue = input<string>('');\n\n /**\n * Virtualized path: zero-based absolute index in the flattened visible-node list.\n * Leave unset (default `null`) outside the virtualized path.\n */\n readonly itemIndex = input<number | null>(null);\n\n /**\n * Virtualized path: tree depth of this node (1-based, matching `aria-level`).\n * When set, overrides the container-derived level in the virtualized path.\n * Leave unset outside the virtualized path.\n */\n readonly _levelInput = input<number | null>(null, { alias: 'level' });\n\n /**\n * Virtualized path: total number of siblings at this node's level (matching\n * `aria-setsize`). When set, overrides the container-derived setsize in the\n * virtualized path. Leave unset outside the virtualized path.\n */\n readonly _setSizeInput = input<number | null>(null, { alias: 'setSize' });\n\n /**\n * Virtualized path: 1-based position among siblings at this node's level\n * (matching `aria-posinset`). When set, overrides the container-derived\n * posinset in the virtualized path. Leave unset outside the virtualized path.\n */\n readonly _posInSetInput = input<number | null>(null, { alias: 'posInSet' });\n\n readonly #toggleCount = signal(0);\n readonly #childContainer = signal<ForTreeContainerContext | null>(null);\n readonly #labelEl = signal<HTMLElement | null>(null);\n\n readonly id = hostId('for-tree-item');\n\n readonly #virtualized = computed(() => this.#tree.totalCount() !== undefined);\n\n /** True once a `[forTreeItemToggle]` registers, marking the node a parent (D4). */\n readonly expandable = computed(() => this.#toggleCount() > 0);\n readonly expanded = computed(() => this.#tree.isExpanded(this.value()));\n readonly selected = computed(() => this.#tree.isSelected(this.value()));\n /** True when the root tree is in `'checkbox'` selection mode. */\n readonly checkboxMode = computed(() => this.#tree.selectionMode() === 'checkbox');\n /**\n * Tri-state checkbox status of this node — `'true'` / `'false'`, or `'mixed'`\n * when cascade is on and only some descendants are checked. Drives the\n * checkbox anatomy; meaningful only in `selectionMode=\"checkbox\"`.\n */\n readonly checkState = computed(() => this.#tree.checkState(this.value()));\n\n /**\n * True when this node is the current keyboard-focused / active candidate.\n * In the roving-tabindex path tracks DOM focus; in the virtualized\n * activedescendant path tracks `aria-activedescendant`. Reflected as\n * `data-highlighted`.\n */\n readonly highlighted = computed(() => {\n const activeId = this.#tree.activeDescendantId();\n if (activeId !== null) return activeId === this.id();\n return this.#tree.roving.active() === this.#host.nativeElement;\n });\n readonly effectiveDisabled = computed(() => this.disabled() || this.#tree.disabled());\n\n /**\n * Drop-indicator hook for `[forTreeNodeDrag]`: `'before'` / `'after'` when a live drag would\n * land adjacent to this row, `null` otherwise (and always `null` without a drag coordinator).\n * Reflected as `data-drop-position`.\n */\n protected readonly _dropPosition = computed<'before' | 'after' | null>(() => {\n const indicator = this.#drag?.dropIndicator();\n if (!indicator || indicator.anchor !== this.value()) {\n return null;\n }\n return indicator.position;\n });\n\n readonly level = computed(() =>\n this.#virtualized() ? (this._levelInput() ?? this.#container.level()) : this.#container.level(),\n );\n readonly posinset = computed(() =>\n this.#virtualized()\n ? (this._posInSetInput() ?? this.#container.indexOfHost(this.#host.nativeElement) + 1)\n : this.#container.indexOfHost(this.#host.nativeElement) + 1,\n );\n readonly setsize = computed(() =>\n this.#virtualized()\n ? (this._setSizeInput() ?? this.#container.items().length)\n : this.#container.items().length,\n );\n\n protected readonly tabindex = computed<-1 | 0>(() => {\n if (this.effectiveDisabled()) {\n return -1;\n }\n if (this.#virtualized()) {\n return -1;\n }\n if (this.#tree.roving.hasActive()) {\n return this.#tree.roving.tabindexFor(this.#host.nativeElement);\n }\n if (this.selected()) {\n return 0;\n }\n if (this.#tree.value().length > 0) {\n return -1;\n }\n return this.#tree.isFirstFocusableItem(this.#host.nativeElement) ? 0 : -1;\n });\n\n constructor() {\n const handle: ForTreeItemHandle = {\n host: this.#host.nativeElement,\n value: this.value,\n disabled: this.effectiveDisabled,\n expandable: this.expandable,\n childContainer: this.#childContainer.asReadonly(),\n textValue: this.textValue,\n labelEl: this.#labelEl.asReadonly(),\n id: this.id,\n itemIndex: this.itemIndex,\n level: this.level,\n };\n registerHandle(\n handle,\n (h) => this.#container.registerItem(h),\n (h) => this.#container.unregisterItem(h),\n 'afterNextRender',\n );\n }\n\n registerToggle(): () => void {\n this.#toggleCount.update((n) => n + 1);\n return () => this.#toggleCount.update((n) => n - 1);\n }\n\n setChildContainer(container: ForTreeContainerContext | null): void {\n this.#childContainer.set(container);\n }\n\n setLabel(el: HTMLElement | null): void {\n this.#labelEl.set(el);\n }\n\n toggle(): void {\n if (!this.expandable() || this.effectiveDisabled()) {\n return;\n }\n this.#tree.setExpanded(this.value(), !this.expanded());\n }\n\n select(): void {\n if (this.effectiveDisabled()) {\n return;\n }\n this.#tree.select(this.value());\n }\n\n focusItem(): void {\n if (this.effectiveDisabled()) {\n return;\n }\n if (this.#virtualized()) {\n this.#tree.notifyItemClick(this.id());\n return;\n }\n this.#tree.roving.focusActive(this.#host.nativeElement);\n }\n\n protected onFocus(): void {\n if (this.effectiveDisabled() || this.#virtualized()) {\n return;\n }\n this.#tree.roving.setActive(this.#host.nativeElement);\n }\n\n protected onPointerDown(event: PointerEvent): void {\n if (!this.#virtualized()) return;\n event.preventDefault();\n }\n\n protected onKeyDown(event: KeyboardEvent): void {\n const host = this.#host.nativeElement;\n // Tree items nest, so a keydown on a descendant bubbles through every\n // ancestor treeitem. Only the focused item (the event target) acts.\n if (event.target !== host || this.effectiveDisabled()) {\n return;\n }\n const tree = this.#tree;\n\n if (tree.multiple()) {\n if (\n (event.ctrlKey || event.metaKey) &&\n !event.shiftKey &&\n !event.altKey &&\n (event.key === 'a' || event.key === 'A')\n ) {\n event.preventDefault();\n tree.selectAll();\n return;\n }\n if (event.shiftKey && !event.ctrlKey && !event.metaKey && !event.altKey) {\n const action = resolveListNavigation(event, {\n orientation: tree.orientation(),\n dir: tree.dir(),\n });\n if (action === 'next' || action === 'prev') {\n event.preventDefault();\n tree.extendByArrow(host, action);\n return;\n }\n if (event.key === ' ' || event.key === 'Spacebar') {\n event.preventDefault();\n tree.selectRangeToFocused(host);\n return;\n }\n }\n }\n\n if (event.key === 'Enter') {\n event.preventDefault();\n tree.select(this.value());\n return;\n }\n if (event.key === ' ' || event.key === 'Spacebar') {\n event.preventDefault();\n tree.select(this.value());\n return;\n }\n if (event.key === '*') {\n event.preventDefault();\n tree.expandSiblings(host);\n return;\n }\n\n const action = resolveListNavigation(event, {\n orientation: tree.orientation(),\n dir: tree.dir(),\n });\n if (action) {\n event.preventDefault();\n tree.navigate(host, action);\n return;\n }\n\n const intent = resolveTreeExpandCollapse(event, {\n orientation: tree.orientation(),\n dir: tree.dir(),\n });\n if (intent === 'expand') {\n event.preventDefault();\n tree.expandOrEnter(host);\n return;\n }\n if (intent === 'collapse') {\n event.preventDefault();\n tree.collapseOrLeave(host);\n return;\n }\n\n tree.handleTypeahead(event);\n }\n}\n","import { DestroyRef, Directive, ElementRef, inject } from '@angular/core';\n\nimport { injectTreeItemContext } from './tree-context';\n\n/**\n * Pointer target for a `ForTreeItem` and the default typeahead text source.\n * Clicking it selects the node and moves roving focus to the `treeitem`\n * (focus stays on the item, never on the label). Place the\n * `[forTreeItemToggle]` and the node's visible text inside it.\n */\n@Directive({\n selector: '[forTreeItemLabel]',\n exportAs: 'forTreeItemLabel',\n host: {\n '(click)': 'onClick()',\n },\n})\nexport class ForTreeItemLabel {\n readonly #item = injectTreeItemContext('ForTreeItemLabel');\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n constructor() {\n this.#item.setLabel(this.#host.nativeElement);\n inject(DestroyRef).onDestroy(() => this.#item.setLabel(null));\n }\n\n protected onClick(): void {\n this.#item.select();\n this.#item.focusItem();\n }\n}\n","import { DestroyRef, Directive, inject } from '@angular/core';\n\nimport { injectTreeItemContext } from './tree-context';\n\n/**\n * Optional expand / collapse control inside a `ForTreeItem`. Its mere presence\n * marks the item as a parent (D4): a `treeitem` emits `aria-expanded` /\n * `data-state` only when a toggle is registered, so leaves (no toggle) emit\n * neither — matching the APG \"end nodes lack `aria-expanded`\" rule.\n *\n * Decorative: the enclosing `treeitem` owns `aria-expanded`, so the toggle is\n * `aria-hidden` and not separately focusable. Clicking it toggles expansion\n * without selecting the node.\n */\n@Directive({\n selector: '[forTreeItemToggle]',\n exportAs: 'forTreeItemToggle',\n host: {\n type: 'button',\n tabindex: '-1',\n 'aria-hidden': 'true',\n '[attr.data-state]': 'item.expanded() ? \"open\" : \"closed\"',\n '(click)': 'onClick($event)',\n },\n})\nexport class ForTreeItemToggle {\n protected readonly item = injectTreeItemContext('ForTreeItemToggle');\n\n constructor() {\n const unregister = this.item.registerToggle();\n inject(DestroyRef).onDestroy(unregister);\n }\n\n protected onClick(event: MouseEvent): void {\n event.stopPropagation();\n this.item.toggle();\n }\n}\n","import { computed, DestroyRef, Directive, inject } from '@angular/core';\n\nimport { Collection } from 'forty-cdk/core';\nimport {\n FOR_TREE_CONTAINER_CONTEXT,\n type ForTreeContainerContext,\n type ForTreeItemHandle,\n injectTreeItemContext,\n} from './tree-context';\n\n/**\n * Nested container (`role=\"group\"`) holding a parent node's child\n * `ForTreeItem`s. Rendered behind `@if` so a collapsed parent drops its group\n * entirely. Its `level` is one deeper than the enclosing item, and it\n * registers itself as that item's child container so the root can flatten the\n * visible nodes.\n *\n * @example\n * ```html\n * @if (n.children?.length && isExpanded(n.id)) {\n * <ul forTreeGroup>\n * @for (child of n.children; track child.id) { ... }\n * </ul>\n * }\n * ```\n */\n@Directive({\n selector: '[forTreeGroup]',\n exportAs: 'forTreeGroup',\n host: {\n role: 'group',\n },\n providers: [{ provide: FOR_TREE_CONTAINER_CONTEXT, useExisting: ForTreeGroup }],\n})\nexport class ForTreeGroup implements ForTreeContainerContext {\n readonly #parentItem = injectTreeItemContext('ForTreeGroup');\n readonly #items = new Collection<ForTreeItemHandle>();\n\n readonly items = this.#items.items;\n readonly level = computed(() => this.#parentItem.level() + 1);\n\n constructor() {\n this.#parentItem.setChildContainer(this);\n inject(DestroyRef).onDestroy(() => this.#parentItem.setChildContainer(null));\n }\n\n registerItem(handle: ForTreeItemHandle): void {\n this.#items.register(handle);\n }\n\n unregisterItem(handle: ForTreeItemHandle): void {\n this.#items.unregister(handle);\n }\n\n indexOfHost(el: HTMLElement): number {\n return this.#items.indexOfHost(el);\n }\n}\n","import { computed, Directive } from '@angular/core';\n\nimport { injectTreeItemContext } from './tree-context';\n\n/**\n * Visible checkbox surface inside a `ForTreeItem`, used in the tree's\n * `selectionMode=\"checkbox\"` anatomy. Decorative for assistive tech — the\n * enclosing `treeitem` owns `aria-checked`, so this element is `aria-hidden`\n * and not separately focusable. Reflects `data-state=\"checked\" | \"unchecked\" |\n * \"indeterminate\"` for styling. Clicking it toggles the node's selection and\n * moves roving focus to the node; place a `[forTreeItemCheckboxIndicator]`\n * inside for the glyph.\n */\n@Directive({\n selector: '[forTreeItemCheckbox]',\n exportAs: 'forTreeItemCheckbox',\n host: {\n 'aria-hidden': 'true',\n '[attr.data-state]': 'dataState()',\n '(click)': 'onClick($event)',\n },\n})\nexport class ForTreeItemCheckbox {\n protected readonly item = injectTreeItemContext('ForTreeItemCheckbox');\n\n protected readonly dataState = computed(() => {\n const state = this.item.checkState();\n return state === 'true' ? 'checked' : state === 'mixed' ? 'indeterminate' : 'unchecked';\n });\n\n protected onClick(event: MouseEvent): void {\n event.stopPropagation();\n this.item.select();\n this.item.focusItem();\n }\n}\n","import { computed, Directive } from '@angular/core';\n\nimport { injectTreeItemContext } from './tree-context';\n\n/**\n * Optional glyph slot inside a `[forTreeItemCheckbox]`. Shows while the node\n * is checked or indeterminate (`data-state=\"checked\"` or `\"indeterminate\"`);\n * self-hides only when fully unchecked. Hidden state is enforced with an inline\n * `display: none` (which beats any author `display` rule applied via a class)\n * in addition to the `hidden` attribute that removes it from the a11y tree.\n * Mirrors `data-state=\"checked\" | \"unchecked\" | \"indeterminate\"` from the item.\n */\n@Directive({\n selector: '[forTreeItemCheckboxIndicator]',\n exportAs: 'forTreeItemCheckboxIndicator',\n host: {\n '[attr.data-state]': 'dataState()',\n '[attr.hidden]': 'shown() ? null : \"\"',\n '[style.display]': 'shown() ? null : \"none\"',\n },\n})\nexport class ForTreeItemCheckboxIndicator {\n protected readonly item = injectTreeItemContext('ForTreeItemCheckboxIndicator');\n\n protected readonly shown = computed(() => this.item.checkState() !== 'false');\n protected readonly dataState = computed(() => {\n const state = this.item.checkState();\n return state === 'true' ? 'checked' : state === 'mixed' ? 'indeterminate' : 'unchecked';\n });\n}\n","/**\n * Returns the de-duplicated ancestor values that must be added to a tree's\n * `expanded` set so every matched node becomes visible.\n *\n * Pure and headless: filtering stays consumer-owned — the consumer matches its\n * own data, re-renders the tree, and feeds its hierarchy through `ancestorsOf`.\n * Merge the result into `[(expanded)]`:\n *\n * ```ts\n * this.expanded.update((open) => [\n * ...new Set([...open, ...expandToReveal(matches, this.ancestorsOf)]),\n * ]);\n * ```\n *\n * The matched nodes themselves are not returned — a node is made visible by\n * expanding its ancestors, so a root-level match contributes nothing.\n *\n * @param matches The values of the nodes that matched the current filter.\n * @param ancestorsOf Returns a node's ancestor values (the node itself excluded);\n * order is irrelevant and a root node returns an empty list.\n * @returns The unique ancestor values to expand. Empty when `matches` is empty\n * or every match is a root.\n */\nexport function expandToReveal(\n matches: Iterable<string>,\n ancestorsOf: (value: string) => readonly string[],\n): readonly string[] {\n const reveal = new Set<string>();\n for (const match of matches) {\n for (const ancestor of ancestorsOf(match)) {\n reveal.add(ancestor);\n }\n }\n return [...reveal];\n}\n","import { DestroyRef, Directive, ElementRef, inject } from '@angular/core';\n\nimport { FOR_TREE_NODE_DRAG_CONTEXT } from './tree-node-drag';\n\n/**\n * Optional drag handle for a tree node. When placed inside a tree item, it constrains the pointer\n * grab area — only pointer events originating from within this element start a drag for that item.\n * Has no effect on the keyboard drag path (Ctrl+Space on the focused item always works).\n *\n * @example\n * ```html\n * <li forTreeItem value=\"file\">\n * <span forTreeNodeDragHandle aria-hidden=\"true\">⠿</span>\n * <span forTreeItemLabel>File.txt</span>\n * </li>\n * ```\n */\n@Directive({\n selector: '[forTreeNodeDragHandle]',\n exportAs: 'forTreeNodeDragHandle',\n})\nexport class ForTreeNodeDragHandle {\n constructor() {\n const ctx = inject(FOR_TREE_NODE_DRAG_CONTEXT, { optional: true });\n if (!ctx) {\n throw new Error(\n '[forty-cdk/tree] [forTreeNodeDragHandle] must be used inside a [forTreeNodeDrag] element.',\n );\n }\n const el = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n ctx.registerHandle(el);\n inject(DestroyRef).onDestroy(() => ctx.unregisterHandle(el));\n }\n}\n","import type { ForTreeDragDropEvent } from './tree-drag-drop-event';\n\n/** Options for {@link moveTreeNode}. */\nexport interface MoveTreeNodeOptions<T> {\n /** The move descriptor as emitted by `(nodeDrop)`. Carries the tree's string node values. */\n readonly event: ForTreeDragDropEvent;\n /** Stable id of a node — must return the same string used as the tree item `[value]`. */\n readonly trackBy: (node: T) => string;\n /** A node's children, or `undefined` / `[]` for a leaf. */\n readonly children: (node: T) => readonly T[] | undefined;\n /** Returns a copy of `node` with its children replaced. MUST NOT mutate `node`. */\n readonly withChildren: (node: T, children: readonly T[]) => T;\n}\n\nfunction collectSubtreeIds<T>(node: T, options: MoveTreeNodeOptions<T>): Set<string> {\n const ids = new Set<string>();\n ids.add(options.trackBy(node));\n const kids = options.children(node) ?? [];\n for (const child of kids) {\n for (const id of collectSubtreeIds(child, options)) {\n ids.add(id);\n }\n }\n return ids;\n}\n\ntype DetachResult<T> = { found: T; roots: readonly T[] } | null;\n\nfunction detachNode<T>(\n roots: readonly T[],\n targetId: string,\n options: MoveTreeNodeOptions<T>,\n): DetachResult<T> {\n for (let i = 0; i < roots.length; i++) {\n const node = roots[i]!;\n if (options.trackBy(node) === targetId) {\n const next = [...roots.slice(0, i), ...roots.slice(i + 1)];\n return { found: node, roots: next };\n }\n const kids = options.children(node) ?? [];\n if (kids.length > 0) {\n const childResult = detachNode(kids, targetId, options);\n if (childResult !== null) {\n const updatedNode = options.withChildren(node, childResult.roots);\n const next = [...roots.slice(0, i), updatedNode, ...roots.slice(i + 1)];\n return { found: childResult.found, roots: next };\n }\n }\n }\n return null;\n}\n\nfunction insertNode<T>(\n roots: readonly T[],\n parentId: string | null,\n index: number,\n nodeToInsert: T,\n options: MoveTreeNodeOptions<T>,\n): readonly T[] | null {\n if (parentId === null) {\n const clamped = Math.max(0, Math.min(index, roots.length));\n return [...roots.slice(0, clamped), nodeToInsert, ...roots.slice(clamped)];\n }\n for (let i = 0; i < roots.length; i++) {\n const node = roots[i]!;\n if (options.trackBy(node) === parentId) {\n const kids = options.children(node) ?? [];\n const clamped = Math.max(0, Math.min(index, kids.length));\n const newKids = [...kids.slice(0, clamped), nodeToInsert, ...kids.slice(clamped)];\n const updated = options.withChildren(node, newKids);\n return [...roots.slice(0, i), updated, ...roots.slice(i + 1)];\n }\n const kids = options.children(node) ?? [];\n if (kids.length > 0) {\n const result = insertNode(kids, parentId, index, nodeToInsert, options);\n if (result !== null) {\n const updated = options.withChildren(node, result);\n return [...roots.slice(0, i), updated, ...roots.slice(i + 1)];\n }\n }\n }\n return null;\n}\n\n/**\n * Applies a {@link ForTreeDragDropEvent} to a nested, consumer-owned tree, returning a new roots\n * array. Pure and immutable — never mutates `roots` or any node. Detaches `event.node` from its\n * current parent and re-inserts it (with its subtree) under `event.newParent` at\n * `event.currentIndex` (or among the roots when `newParent` is `null`). Returns a shallow copy of\n * `roots` unchanged when the move is a no-op or invalid (node not found, or `newParent` is the node\n * itself or one of its descendants).\n */\nexport function moveTreeNode<T>(roots: readonly T[], options: MoveTreeNodeOptions<T>): T[] {\n const { event } = options;\n\n const detachResult = detachNode(roots, event.node, options);\n if (detachResult === null) {\n return [...roots];\n }\n\n const { found, roots: rootsAfterDetach } = detachResult;\n\n if (event.newParent !== null) {\n const subtreeIds = collectSubtreeIds(found, options);\n if (subtreeIds.has(event.newParent)) {\n return [...roots];\n }\n if (event.newParent === event.node) {\n return [...roots];\n }\n }\n\n const result = insertNode(rootsAfterDetach, event.newParent, event.currentIndex, found, options);\n if (result === null) {\n return [...roots];\n }\n\n return result as T[];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { isPlatformBrowser } from '@angular/common';
|
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
3
|
import { inject, DestroyRef, afterNextRender, PLATFORM_ID, computed, signal, effect, linkedSignal, untracked, InjectionToken, ElementRef, Injector, input, output, runInInjectionContext, ChangeDetectionStrategy, Component, TemplateRef, ViewContainerRef, Directive, numberAttribute } from '@angular/core';
|
|
4
4
|
import { observeElementOffset, observeElementRect, elementScroll, Virtualizer } from '@tanstack/virtual-core';
|
|
5
|
-
import { FOR_TABLE_CONTEXT } from 'forty-cdk';
|
|
5
|
+
import { FOR_TABLE_CONTEXT } from 'forty-cdk/table';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* `afterNextRender` whose queued callback is cancelled on destroy, guarding the
|