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-table.mjs","sources":["../../../projects/forty-cdk/table/src/table-context.ts","../../../projects/forty-cdk/table/src/table-row-selection.ts","../../../projects/forty-cdk/table/src/table-expansion.ts","../../../projects/forty-cdk/table/src/table.ts","../../../projects/forty-cdk/table/src/table-header-row.ts","../../../projects/forty-cdk/table/src/table-row.ts","../../../projects/forty-cdk/table/src/table-header-cell.ts","../../../projects/forty-cdk/table/src/table-cell.ts","../../../projects/forty-cdk/table/src/table-row-selector.ts","../../../projects/forty-cdk/table/src/table-select-all.ts","../../../projects/forty-cdk/table/src/table-sort-header.ts","../../../projects/forty-cdk/table/src/table-column-resizer.ts","../../../projects/forty-cdk/table/src/table-column-reorder.ts","../../../projects/forty-cdk/table/src/table-row-reorder.ts","../../../projects/forty-cdk/table/src/table-defaults.ts","../../../projects/forty-cdk/table/src/forty-cdk-table.ts"],"sourcesContent":["import { booleanAttribute, inject, InjectionToken, type Signal } from '@angular/core';\n\nimport { type WritingDirection } from 'forty-cdk/core';\n\n/** ARIA pattern the table renders as. `'table'` is the static structure; `'grid'` / `'treegrid'` add roving + 2D keyboard navigation. */\nexport type TableMode = 'table' | 'grid' | 'treegrid';\n\n/** Row-selection mode for `ForTable`. `'none'` disables selection. */\nexport type TableSelectionMode = 'none' | 'single' | 'multiple';\n\n/** How a row click mutates selection. `'toggle'` flips it; `'replace'` replaces (modifier-aware). */\nexport type TableSelectionBehavior = 'toggle' | 'replace';\n\n/** Aggregate selection state across the table's selectable rows, for the select-all tri-state. */\nexport type TableSelectAllState = 'none' | 'some' | 'all';\n\n/** Sticky placement for a cell: pinned to the start edge (`true`), the end edge (`'end'`), or not sticky (`false`). */\nexport type TableStickyValue = boolean | 'end';\n\n/**\n * Handle a `ForTableCell` registers with its parent `ForTableRow`, so the row can\n * order its cells (for `aria-colindex`) and the root can flatten them into the\n * roving-navigation grid (skipping disabled cells).\n */\nexport interface ForTableCellHandle {\n /** The cell's host element (`role=\"cell\"` / `\"gridcell\"`). */\n readonly host: HTMLElement;\n /** Whether this cell is disabled — skipped during arrow-key navigation. */\n readonly disabled: Signal<boolean>;\n}\n\n/**\n * Handle a `ForTableRow` registers with the root `ForTable`, so the root can order\n * rows (for `aria-rowindex`) and build the row-major flat cell grid for navigation.\n */\nexport interface ForTableRowHandle {\n /** The row's host element (`role=\"row\"`). */\n readonly host: HTMLElement;\n /** This row's data cells, in DOM order. */\n readonly cells: Signal<readonly ForTableCellHandle[]>;\n /** This row's selection identity, from its `[value]` input; `undefined` when unset (not selectable). */\n readonly value: Signal<unknown>;\n /** 1-based tree depth of this row (`aria-level`); always `1` outside treegrid mode. */\n readonly level: Signal<number>;\n /** Whether this row is an expandable parent (drives `aria-expanded` / `data-state`). */\n readonly expandable: Signal<boolean>;\n /** Absolute 0-based index of this row in the full (virtualized) dataset, or `null` when not virtualized. */\n readonly virtualIndex: Signal<number | null>;\n}\n\n/**\n * Cross-window row-navigation delegate registered by `[forTableVirtualized]`.\n * `ForTable` consults it when a grid keyboard action resolves a row outside the\n * rendered window, keeping the virtualization bridge out of `ForTable` itself.\n */\nexport interface TableVirtualRowNavigation {\n /**\n * Move roving focus to the data cell at the absolute `(rowIndex, 0-based\n * column)`, scrolling that row into the window first when it is not mounted.\n */\n navigateTo(rowIndex: number, column: number): void;\n /**\n * Scroll the virtualizer so the row at the absolute `index` is in the window.\n * Used by `[forTableRowReorder]` to follow a keyboard reorder target across\n * the rendered window without taking a direct dependency on `ForTableVirtualized`.\n */\n scrollToRow(index: number): void;\n}\n\n/** Coordination contract owned by `ForTable`, injected by every descendant piece. */\nexport interface ForTableContext {\n /** The resolved ARIA mode; cells derive `role` (`cell` vs `gridcell`) from it, and navigation engages when it is not `'table'`. */\n readonly mode: Signal<TableMode>;\n /** The resolved writing direction (flips ArrowLeft / ArrowRight in `rtl`). */\n readonly dir: Signal<WritingDirection>;\n /** The active row-selection mode. `'none'` means selection is disabled. */\n readonly selectionMode: Signal<TableSelectionMode>;\n /** Registers the header row's host so the root can measure its height for the sticky-header CSS var. */\n registerHeaderRow(el: HTMLElement): void;\n /** Unregisters the header row's host. Reference-based; safe to call if never registered. */\n unregisterHeaderRow(el: HTMLElement): void;\n /** Registers a data row so it joins the row index space and the navigation grid. */\n registerRow(handle: ForTableRowHandle): void;\n /** Unregisters a data row. Reference-based. */\n unregisterRow(handle: ForTableRowHandle): void;\n /** 0-based index of a data row host in DOM order, or -1 if not registered. */\n rowIndexOf(host: HTMLElement): number;\n /** Roving `tabindex` (`0` for the single tab stop, `-1` otherwise) for a data cell in grid mode. */\n cellTabIndex(host: HTMLElement): 0 | -1;\n /** Whether a data cell is the currently roving-focused cell (drives `data-highlighted`). */\n isCellHighlighted(host: HTMLElement): boolean;\n /** Promotes a data cell to the active roving cell (called on the cell's `(focus)`). */\n activateCell(host: HTMLElement): void;\n /** Resolves and applies a keydown originating on a data cell: 2D move + focus. */\n handleCellKeydown(event: KeyboardEvent, host: HTMLElement): void;\n /** Returns whether `value` is currently in the selection. */\n isRowSelected(value: unknown): boolean;\n /** Toggles `value` in or out of the selection, respecting `selectionMode`. No-op in `'none'` mode. */\n toggleRowSelection(value: unknown): void;\n /**\n * Applies a row selection click with optional modifier keys, honoring `selectionBehavior`:\n * `'toggle'` always flips; `'replace'` replaces (Ctrl/Cmd toggles a single item,\n * Shift extends a range in multiple mode).\n */\n selectRow(\n value: unknown,\n modifiers?: { ctrlKey?: boolean; metaKey?: boolean; shiftKey?: boolean },\n ): void;\n /** Aggregate selection state across all selectable rows (`'none'` / `'some'` / `'all'`). */\n readonly selectAllState: Signal<TableSelectAllState>;\n /** Selects all selectable rows when not all are selected; clears when all are. No-op outside `'multiple'` mode. */\n toggleSelectAll(): void;\n /**\n * Publishes a column's resolved width as the CSS custom property\n * `--for-table-col-<column>-width` on the table root, so the consumer's layout\n * can apply it. Called by `[forTableColumnResizer]`.\n */\n setColumnWidth(column: string, width: number): void;\n /** The consumer-declared true total row count (`aria-rowcount`); `undefined` when defaulted to the rendered count. */\n readonly rowCount: Signal<number | undefined>;\n /**\n * Absolute index of the row that owns the currently roving-focused cell, or `null`\n * when no cell is focused (or the focused row carries no `virtualIndex`). Used by\n * `[forTableVirtualized]` to keep the focused row mounted across recycling.\n */\n readonly focusedRowIndex: Signal<number | null>;\n /**\n * Live registered data rows in DOM order. `[forTableVirtualized]` reads this to\n * resolve a pending cross-window navigation once the target row mounts.\n */\n readonly rows: Signal<readonly ForTableRowHandle[]>;\n /**\n * Registers (or clears, with `null`) the cross-window row-navigation delegate.\n * `[forTableVirtualized]` registers itself so row-crossing grid keyboard actions\n * targeting an unmounted row are handled by the virtualization bridge.\n */\n registerVirtualNavigation(navigation: TableVirtualRowNavigation | null): void;\n /**\n * The currently registered cross-window row-navigation delegate, or `null`\n * when the table is not virtualized. `[forTableRowReorder]` reads this to gate\n * keyboard reordering to virtualized tables and to scroll the reorder target\n * into view, without taking a direct dependency on `ForTableVirtualized`.\n */\n readonly virtualRowNavigation: Signal<TableVirtualRowNavigation | null>;\n /**\n * Absolute index of the row currently being pointer-reordered (set by\n * `[forTableRowReorder]` on lift, cleared on release), or `null` when no row is\n * being reordered. `[forTableVirtualized]` keeps this row mounted for the\n * duration of the drag so auto-scroll cannot unmount the lifted row and desync\n * the emitted drop indices. `null` and unused outside a virtualized table.\n */\n readonly reorderingRowIndex: Signal<number | null>;\n /**\n * Sets (or clears, with `null`) the absolute index of the row being\n * pointer-reordered. Called by `[forTableRowReorder]`; read by\n * `[forTableVirtualized]` to retain the lifted row in the rendered window.\n */\n setReorderingRow(index: number | null): void;\n /** Whether `value` is in the open-rows set (`treegrid` expansion). */\n isRowExpanded(value: unknown): boolean;\n /** Toggles a parent row's expansion in/out of `[(expanded)]`. No-op when value is undefined. */\n toggleRowExpansion(value: unknown): void;\n /** 1-based `aria-posinset` for a row host among its same-level siblings (treegrid). */\n rowPosinset(host: HTMLElement): number;\n /** Total `aria-setsize` of a row host's same-level sibling set (treegrid). */\n rowSetsize(host: HTMLElement): number;\n}\n\nexport const FOR_TABLE_CONTEXT = new InjectionToken<ForTableContext>('FOR_TABLE_CONTEXT');\n\n/** Per-row coordination contract owned by `ForTableRow`, injected by its data cells. */\nexport interface ForTableRowContext {\n /** Registers a data cell with this row. */\n registerCell(handle: ForTableCellHandle): void;\n /** Unregisters a data cell. Reference-based. */\n unregisterCell(handle: ForTableCellHandle): void;\n /** 0-based index of a cell host within this row in DOM order, or -1 if not registered. */\n cellIndexOf(host: HTMLElement): number;\n /** The active row-selection mode from the root table. */\n readonly selectionMode: Signal<TableSelectionMode>;\n /** Whether this row is currently selected. */\n readonly selected: Signal<boolean>;\n /** Toggles this row's selection. No-op when the row has no `[value]` or mode is `'none'`. */\n toggleSelected(): void;\n}\n\nexport const FOR_TABLE_ROW_CONTEXT = new InjectionToken<ForTableRowContext>(\n 'FOR_TABLE_ROW_CONTEXT',\n);\n\n/**\n * Coerces the `sticky` input value for header and data cells.\n * The string `'end'` pins the cell to the end edge; any other truthy value\n * (including the empty string from a bare `sticky` attribute) pins it to the\n * start edge; a falsy value means not sticky.\n */\nexport function coerceSticky(value: boolean | string): TableStickyValue {\n return value === 'end' ? 'end' : booleanAttribute(value);\n}\n\nexport function injectTableContext(piece: string): ForTableContext {\n const ctx = inject(FOR_TABLE_CONTEXT, { optional: true });\n if (!ctx) {\n throw new Error(`[forty-cdk/table] ${piece} must be used inside a [forTable] element.`);\n }\n return ctx;\n}\n\nexport function injectTableRowContext(piece: string): ForTableRowContext {\n const ctx = inject(FOR_TABLE_ROW_CONTEXT, { optional: true });\n if (!ctx) {\n throw new Error(`[forty-cdk/table] ${piece} must be used inside a [forTableRow] element.`);\n }\n return ctx;\n}\n","import { computed, type Signal, signal, type WritableSignal } from '@angular/core';\n\nimport { SelectionModel } from 'forty-cdk/core';\nimport type {\n TableSelectAllState,\n TableSelectionBehavior,\n TableSelectionMode,\n} from './table-context';\n\n/** Modifier keys that alter a `'replace'`-behavior row click. */\nexport interface TableSelectionModifiers {\n readonly ctrlKey?: boolean;\n readonly metaKey?: boolean;\n readonly shiftKey?: boolean;\n}\n\n/**\n * Dependencies for {@link TableRowSelection}. Wires the helper to `ForTable`'s\n * `[(selection)]` model, its selection inputs, and the aggregate value universe.\n */\nexport interface TableRowSelectionDeps {\n /** Two-way bindable selected row values (each row's `[value]`). */\n readonly selection: WritableSignal<readonly unknown[]>;\n /** The active row-selection mode. `'none'` disables selection. */\n readonly selectionMode: Signal<TableSelectionMode>;\n /** How a row click mutates the selection (`'toggle'` / `'replace'`). */\n readonly selectionBehavior: Signal<TableSelectionBehavior>;\n /** Equality comparator for row values. */\n readonly compareWith: Signal<(a: unknown, b: unknown) => boolean>;\n /**\n * Ordered universe of selectable row values for aggregate operations\n * (range extension, select-all tri-state). Spans rows beyond the rendered\n * window when the table is virtualized or server-paged.\n */\n readonly aggregateValues: Signal<readonly unknown[]>;\n}\n\n/**\n * Row-selection sub-model for `ForTable`. Owns the `SelectionModel`, the range\n * anchor, and the toggle / replace / range / select-all algorithms, decoupled\n * from the table root.\n *\n * Internal — not re-exported from `table/index.ts` or `public-api.ts`.\n */\nexport class TableRowSelection {\n readonly #selectionMode: Signal<TableSelectionMode>;\n readonly #selectionBehavior: Signal<TableSelectionBehavior>;\n readonly #compareWith: Signal<(a: unknown, b: unknown) => boolean>;\n readonly #aggregateValues: Signal<readonly unknown[]>;\n\n readonly #model: SelectionModel<unknown>;\n readonly #anchor = signal<unknown>(undefined);\n\n /** Aggregate selection state across all selectable rows (`'none'` / `'some'` / `'all'`). */\n readonly selectAllState = computed<TableSelectAllState>(() => {\n const values = this.#aggregateValues();\n if (values.length === 0) {\n return 'none';\n }\n let count = 0;\n for (const v of values) {\n if (this.#model.isSelected(v)) {\n count += 1;\n }\n }\n if (count === 0) {\n return 'none';\n }\n return count === values.length ? 'all' : 'some';\n });\n\n constructor(deps: TableRowSelectionDeps) {\n this.#selectionMode = deps.selectionMode;\n this.#selectionBehavior = deps.selectionBehavior;\n this.#compareWith = deps.compareWith;\n this.#aggregateValues = deps.aggregateValues;\n this.#model = new SelectionModel<unknown>(deps.selection, {\n multiple: computed(() => deps.selectionMode() === 'multiple'),\n compareWith: (a, b) => deps.compareWith()(a, b),\n });\n }\n\n /** Whether `value` is currently in the selection. */\n isSelected(value: unknown): boolean {\n return this.#model.isSelected(value);\n }\n\n /** Toggles `value` in or out of the selection and re-anchors. No-op in `'none'` mode. */\n toggle(value: unknown): void {\n if (this.#selectionMode() === 'none') {\n return;\n }\n this.#model.toggle(value);\n this.#anchor.set(value);\n }\n\n /**\n * Applies a row selection click with optional modifier keys, honoring\n * `selectionBehavior`: `'toggle'` always flips; `'replace'` replaces (Ctrl/Cmd\n * toggles a single item, Shift extends a range in multiple mode).\n */\n select(value: unknown, modifiers?: TableSelectionModifiers): void {\n const mode = this.#selectionMode();\n if (mode === 'none') {\n return;\n }\n if (this.#selectionBehavior() === 'toggle') {\n this.#model.toggle(value);\n this.#anchor.set(value);\n return;\n }\n const multiple = mode === 'multiple';\n if (multiple && modifiers?.shiftKey) {\n this.#selectRange(value);\n return;\n }\n if (multiple && (modifiers?.ctrlKey || modifiers?.metaKey)) {\n this.#model.toggle(value);\n this.#anchor.set(value);\n return;\n }\n this.#model.setSelection(value);\n this.#anchor.set(value);\n }\n\n /** Selects all selectable rows when not all are selected; clears when all are. No-op outside `'multiple'` mode. */\n toggleSelectAll(): void {\n if (this.#selectionMode() !== 'multiple') {\n return;\n }\n if (this.selectAllState() === 'all') {\n this.#model.clear();\n } else {\n this.#model.select(...this.#aggregateValues());\n }\n }\n\n #selectRange(toValue: unknown): void {\n const values = this.#aggregateValues();\n const equals = this.#compareWith();\n const toIdx = values.findIndex((v) => equals(v, toValue));\n if (toIdx < 0) {\n return;\n }\n const anchor = this.#anchor();\n const anchorIdx = anchor === undefined ? -1 : values.findIndex((v) => equals(v, anchor));\n const start = anchorIdx < 0 ? toIdx : anchorIdx;\n const [lo, hi] = start <= toIdx ? [start, toIdx] : [toIdx, start];\n this.#model.setSelection(...values.slice(lo, hi + 1));\n }\n}\n","import { type Signal, type WritableSignal } from '@angular/core';\n\n/**\n * Dependencies for {@link TableExpansion}. Wires the helper to `ForTable`'s\n * `[(expanded)]` model and the row-value comparator.\n */\nexport interface TableExpansionDeps {\n /** Two-way bindable open parent-row values (each row's `[value]`). */\n readonly expanded: WritableSignal<readonly unknown[]>;\n /** Equality comparator for row values. */\n readonly compareWith: Signal<(a: unknown, b: unknown) => boolean>;\n}\n\n/**\n * Treegrid expansion sub-model for `ForTable`. Owns the membership and mutation\n * algorithm for the `[(expanded)]` open-rows set, decoupled from the table root.\n *\n * Internal — not re-exported from `table/index.ts` or `public-api.ts`.\n */\nexport class TableExpansion {\n readonly #expanded: WritableSignal<readonly unknown[]>;\n readonly #compareWith: Signal<(a: unknown, b: unknown) => boolean>;\n\n constructor(deps: TableExpansionDeps) {\n this.#expanded = deps.expanded;\n this.#compareWith = deps.compareWith;\n }\n\n /** Whether `value` is currently in the open-rows set. */\n isExpanded(value: unknown): boolean {\n return this.#expanded().some((v) => this.#compareWith()(v, value));\n }\n\n /**\n * Sets a parent row's expansion in or out of the open-rows set. No-op when\n * `value` is undefined or already in the requested state.\n */\n setExpanded(value: unknown, open: boolean): void {\n if (value === undefined) {\n return;\n }\n const current = this.#expanded();\n const has = this.isExpanded(value);\n if (open && !has) {\n this.#expanded.set([...current, value]);\n } else if (!open && has) {\n this.#expanded.set(current.filter((v) => !this.#compareWith()(v, value)));\n }\n }\n\n /** Toggles a parent row's expansion. No-op when `value` is undefined. */\n toggle(value: unknown): void {\n if (value === undefined) {\n return;\n }\n this.setExpanded(value, !this.isExpanded(value));\n }\n}\n","import {\n computed,\n Directive,\n ElementRef,\n inject,\n input,\n model,\n type Signal,\n signal,\n} from '@angular/core';\n\nimport {\n injectElementSize,\n Collection,\n firstEnabledHost,\n type GridNavigationAction,\n moveGridIndex,\n resolveGridNavigation,\n resolveTreegridExpandCollapse,\n type WritingDirection,\n computeFlatHierarchy,\n injectTextDirection,\n reconcileRovingActive,\n RovingTabindex,\n} from 'forty-cdk/core';\nimport {\n FOR_TABLE_CONTEXT,\n type ForTableContext,\n type ForTableRowHandle,\n type TableMode,\n type TableSelectionMode,\n type TableSelectionBehavior,\n type TableSelectAllState,\n type TableVirtualRowNavigation,\n} from './table-context';\nimport { TableRowSelection } from './table-row-selection';\nimport { TableExpansion } from './table-expansion';\n\n/** Grid actions whose target may lie on a row outside the rendered virtualized window. */\nconst ROW_CROSSING_ACTIONS: ReadonlySet<GridNavigationAction> = new Set([\n 'next-row',\n 'prev-row',\n 'first',\n 'last',\n]);\n\n/**\n * Root of the Table primitive. Sets the ARIA `role` from `mode`, reflects\n * writing direction, and publishes the `--for-table-header-height` CSS custom\n * property (driven by a `ResizeObserver` on the first registered header row)\n * so consumers can `position: sticky` header cells without hard-coding offsets.\n *\n * Implements the [WAI-ARIA Table pattern](https://www.w3.org/WAI/ARIA/apg/patterns/table/)\n * and the [WAI-ARIA Grid pattern](https://www.w3.org/WAI/ARIA/apg/patterns/grid/).\n *\n * Use `mode=\"grid\"` or `mode=\"treegrid\"` for interactive grid semantics: a\n * single-tab-stop roving group with 2D arrow navigation over data cells.\n * The default `mode=\"table\"` is the static read-only structure.\n */\n@Directive({\n selector: '[forTable]',\n exportAs: 'forTable',\n host: {\n '[attr.role]': 'mode()',\n '[attr.aria-label]': 'ariaLabel() || null',\n '[attr.dir]': 'dir()',\n '[attr.data-mode]': 'mode()',\n '[style.--for-table-header-height.px]': 'headerSize()?.height ?? null',\n '[attr.aria-rowcount]': 'rowCountAttr()',\n '[attr.aria-colcount]': 'colCountAttr()',\n '[attr.aria-multiselectable]': 'selectionMode() === \"multiple\" ? \"true\" : null',\n },\n providers: [{ provide: FOR_TABLE_CONTEXT, useExisting: ForTable }],\n})\nexport class ForTable implements ForTableContext {\n /**\n * ARIA role emitted on the host. `'table'` is the default static read-only\n * structure. `'grid'` and `'treegrid'` provide single-tab-stop roving + 2D\n * arrow navigation over data cells.\n */\n readonly mode = input<TableMode>('table');\n\n /**\n * Accessible label for the table. When set, reflected as `aria-label`.\n * Consumers with a visible caption should prefer pointing native\n * `aria-labelledby` at it instead; this input is the reactive convenience\n * hook for cases where no visible label element exists.\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.\n */\n readonly _dirInput = input<WritingDirection | null>(null, { alias: 'dir' });\n readonly dir = injectTextDirection(this._dirInput);\n\n /**\n * True total number of data rows for `aria-rowcount`, e.g. for a server-paged or\n * (later) virtualized table that renders only a window of rows. Defaults to the\n * rendered data-row count. Ignored in `mode=\"table\"`.\n */\n readonly rowCount = input<number>();\n\n /**\n * True total number of columns for `aria-colcount`. Defaults to the rendered\n * column count (the cells of the first data row). Ignored in `mode=\"table\"`.\n */\n readonly colCount = input<number>();\n\n /** Row selection mode. `'none'` (default) disables selection entirely. */\n readonly selectionMode = input<TableSelectionMode>('none');\n\n /**\n * How a row click changes the selection. `'toggle'` (default) flips the clicked\n * row. `'replace'` replaces the selection with the clicked row; Ctrl/Cmd-click\n * toggles a single row and Shift-click extends a range (multiple mode only).\n */\n readonly selectionBehavior = input<TableSelectionBehavior>('toggle');\n\n /**\n * Two-way bindable selected row values (each row's `[value]`). Single mode keeps\n * 0–1 entries. The implicit `selectionChange` fires only on internal mutations\n * (selector / row click / Space / select-all), never on consumer writes.\n */\n readonly selection = model<readonly unknown[]>([]);\n\n /** Equality comparator for row values. Defaults to `===`; supply id-based for objects. */\n readonly compareWith = input<(a: unknown, b: unknown) => boolean>((a, b) => a === b);\n\n /**\n * Full ordered set of selectable row values (each row's `[value]`), for a\n * virtualized or server-paged table whose aggregate selection operations must\n * span rows beyond the rendered window. When `null` (default), the select-all\n * tri-state, `toggleSelectAll`, and Shift-click range selection compute against\n * the registered (rendered) rows only. When supplied, they use this set as the\n * universe of selectable values, so a range can span unmounted rows and the\n * tri-state reflects the true dataset. Per-row selection is unaffected.\n */\n readonly selectableValues = input<readonly unknown[] | null>(null);\n\n /**\n * Two-way bindable open parent-row values (each row's `[value]`), for\n * `mode=\"treegrid\"`. The implicit `expandedChange` fires only on internal\n * expand/collapse (ArrowRight/ArrowLeft, `toggleRowExpansion`), never on\n * consumer writes through `[(expanded)]`. Ignored outside `treegrid` mode.\n */\n readonly expanded = model<readonly unknown[]>([]);\n\n readonly #rootEl = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n\n readonly #headerRowEl = signal<HTMLElement | null>(null);\n\n protected readonly headerSize = injectElementSize(this.#headerRowEl);\n\n readonly #rows = new Collection<ForTableRowHandle>();\n readonly #roving = new RovingTabindex();\n\n /** Live registered data rows, exposed to `[forTableVirtualized]`'s cross-window navigation bridge. */\n readonly rows = this.#rows.items;\n readonly #virtualNav = signal<TableVirtualRowNavigation | null>(null);\n readonly #reorderingRow = signal<number | null>(null);\n\n /**\n * Absolute index of the row currently being pointer-reordered, or `null`. Set by\n * `[forTableRowReorder]` and read by `[forTableVirtualized]` to keep the lifted\n * row mounted across recycling during a drag.\n */\n readonly reorderingRowIndex = this.#reorderingRow.asReadonly();\n readonly virtualRowNavigation = this.#virtualNav.asReadonly();\n\n readonly #flatCells = computed(() => this.#rows.items().flatMap((row) => row.cells()));\n readonly #cols = computed(() => this.#rows.items()[0]?.cells().length ?? 0);\n readonly #firstEnabledCell = computed(() => firstEnabledHost(this.#flatCells()));\n\n readonly #registeredValues = computed<readonly unknown[]>(() =>\n this.#rows\n .items()\n .map((row) => row.value())\n .filter((v) => v !== undefined),\n );\n readonly #aggregateValues = computed<readonly unknown[]>(\n () => this.selectableValues() ?? this.#registeredValues(),\n );\n\n readonly #selection = new TableRowSelection({\n selection: this.selection,\n selectionMode: this.selectionMode,\n selectionBehavior: this.selectionBehavior,\n compareWith: this.compareWith,\n aggregateValues: this.#aggregateValues,\n });\n\n readonly selectAllState: Signal<TableSelectAllState> = this.#selection.selectAllState;\n\n readonly #expansion = new TableExpansion({\n expanded: this.expanded,\n compareWith: this.compareWith,\n });\n\n readonly #rowHierarchy = computed(() =>\n computeFlatHierarchy(this.#rows.items().map((row) => row.level())),\n );\n\n #rowOfCell(cellHost: HTMLElement): ForTableRowHandle | undefined {\n return this.#rows.items().find((row) => row.cells().some((cell) => cell.host === cellHost));\n }\n\n /**\n * Absolute index of the row that owns the currently roving-focused cell, or `null`\n * when no cell is focused (or the focused row carries no `virtualIndex`). Used by\n * `[forTableVirtualized]` to keep the focused row mounted across recycling.\n */\n readonly focusedRowIndex = computed<number | null>(() => {\n const active = this.#roving.active();\n if (active === null) {\n return null;\n }\n return this.#rowOfCell(active)?.virtualIndex() ?? null;\n });\n\n protected readonly rowCountAttr = computed<number | null>(() =>\n this.mode() === 'table' ? null : (this.rowCount() ?? this.#rows.items().length),\n );\n protected readonly colCountAttr = computed<number | null>(() =>\n this.mode() === 'table' ? null : (this.colCount() ?? this.#cols()),\n );\n\n constructor() {\n reconcileRovingActive(this.#roving, this.#flatCells);\n }\n\n registerHeaderRow(el: HTMLElement): void {\n this.#headerRowEl.set(el);\n }\n\n setColumnWidth(column: string, width: number): void {\n this.#rootEl.style.setProperty(`--for-table-col-${column}-width`, `${width}px`);\n }\n\n isRowExpanded(value: unknown): boolean {\n return this.#expansion.isExpanded(value);\n }\n\n toggleRowExpansion(value: unknown): void {\n this.#expansion.toggle(value);\n }\n\n rowPosinset(host: HTMLElement): number {\n const index = this.#rows.indexOfHost(host);\n return index < 0 ? 1 : (this.#rowHierarchy()[index]?.posinset ?? 1);\n }\n\n rowSetsize(host: HTMLElement): number {\n const index = this.#rows.indexOfHost(host);\n return index < 0 ? 1 : (this.#rowHierarchy()[index]?.setsize ?? 1);\n }\n\n unregisterHeaderRow(el: HTMLElement): void {\n if (this.#headerRowEl() === el) {\n this.#headerRowEl.set(null);\n }\n }\n\n registerVirtualNavigation(navigation: TableVirtualRowNavigation | null): void {\n this.#virtualNav.set(navigation);\n }\n\n setReorderingRow(index: number | null): void {\n this.#reorderingRow.set(index);\n }\n\n registerRow(handle: ForTableRowHandle): void {\n this.#rows.register(handle);\n }\n\n unregisterRow(handle: ForTableRowHandle): void {\n this.#rows.unregister(handle);\n }\n\n rowIndexOf(host: HTMLElement): number {\n return this.#rows.indexOfHost(host);\n }\n\n cellTabIndex(host: HTMLElement): 0 | -1 {\n if (this.#roving.hasActive()) {\n return this.#roving.tabindexFor(host);\n }\n return this.#firstEnabledCell() === host ? 0 : -1;\n }\n\n isCellHighlighted(host: HTMLElement): boolean {\n return this.#roving.active() === host;\n }\n\n activateCell(host: HTMLElement): void {\n if (this.mode() !== 'table') {\n this.#roving.setActive(host);\n }\n }\n\n isRowSelected(value: unknown): boolean {\n return this.#selection.isSelected(value);\n }\n\n toggleRowSelection(value: unknown): void {\n this.#selection.toggle(value);\n }\n\n selectRow(\n value: unknown,\n modifiers?: { ctrlKey?: boolean; metaKey?: boolean; shiftKey?: boolean },\n ): void {\n this.#selection.select(value, modifiers);\n }\n\n toggleSelectAll(): void {\n this.#selection.toggleSelectAll();\n }\n\n #rowValueOfCell(cellHost: HTMLElement): unknown {\n for (const row of this.#rows.items()) {\n if (row.cells().some((cell) => cell.host === cellHost)) {\n return row.value();\n }\n }\n return undefined;\n }\n\n handleCellKeydown(event: KeyboardEvent, host: HTMLElement): void {\n if (this.mode() === 'table') {\n return;\n }\n if (this.#handleSelectionKeydown(event, host)) {\n return;\n }\n if (this.#handleExpansionKeydown(event, host)) {\n return;\n }\n this.#handleGridNavigationKeydown(event, host);\n }\n\n #handleSelectionKeydown(event: KeyboardEvent, host: HTMLElement): boolean {\n if (event.key !== ' ' || event.target !== host || this.selectionMode() === 'none') {\n return false;\n }\n const value = this.#rowValueOfCell(host);\n if (value === undefined) {\n return false;\n }\n event.preventDefault();\n this.#selection.toggle(value);\n return true;\n }\n\n #handleExpansionKeydown(event: KeyboardEvent, host: HTMLElement): boolean {\n if (this.mode() !== 'treegrid') {\n return false;\n }\n const intent = resolveTreegridExpandCollapse(event, this.dir());\n if (intent === null) {\n return false;\n }\n const row = this.#rowOfCell(host);\n if (!row?.expandable()) {\n return false;\n }\n const value = row.value();\n const open = this.#expansion.isExpanded(value);\n if (intent === 'expand' && !open) {\n event.preventDefault();\n this.#expansion.setExpanded(value, true);\n return true;\n }\n if (intent === 'collapse' && open) {\n event.preventDefault();\n this.#expansion.setExpanded(value, false);\n return true;\n }\n return false;\n }\n\n #handleGridNavigationKeydown(event: KeyboardEvent, host: HTMLElement): void {\n const cols = this.#cols();\n const cells = this.#flatCells();\n if (cols === 0 || cells.length === 0) {\n return;\n }\n const action: GridNavigationAction | null = resolveGridNavigation(event, {\n cols,\n dir: this.dir(),\n pageKeys: true,\n });\n if (action === null) {\n return;\n }\n event.preventDefault();\n const currentIndex = cells.findIndex((cell) => cell.host === host);\n\n const navigation = this.#virtualNav();\n const fromRow = this.focusedRowIndex();\n const total = this.rowCount();\n if (\n navigation !== null &&\n total !== undefined &&\n fromRow !== null &&\n ROW_CROSSING_ACTIONS.has(action)\n ) {\n const col = currentIndex < 0 ? 0 : currentIndex % cols;\n const target = resolveCrossWindowRowTarget(action, fromRow, col, total, cols);\n if (target !== null) {\n navigation.navigateTo(target.row, target.col);\n }\n return;\n }\n\n const next = moveGridIndex(currentIndex < 0 ? 0 : currentIndex, cells.length, action, {\n cols,\n isDisabled: (i) => cells[i]!.disabled(),\n });\n if (next === null) {\n return;\n }\n this.#roving.focusActive(cells[next]!.host);\n }\n}\n\n/**\n * Resolves the absolute `(row, 0-based column)` target for a row-crossing grid\n * action against the true `total` row count. Arrow row-moves preserve the\n * current column; `first` / `last` jump to the first / last cell of the whole\n * grid. Returns `null` when the move would step past the dataset bounds.\n */\nfunction resolveCrossWindowRowTarget(\n action: GridNavigationAction,\n fromRow: number,\n col: number,\n total: number,\n cols: number,\n): { row: number; col: number } | null {\n switch (action) {\n case 'next-row':\n return fromRow + 1 < total ? { row: fromRow + 1, col } : null;\n case 'prev-row':\n return fromRow - 1 >= 0 ? { row: fromRow - 1, col } : null;\n case 'first':\n return { row: 0, col: 0 };\n case 'last':\n return { row: total - 1, col: cols - 1 };\n default:\n return null;\n }\n}\n","import { Directive, ElementRef, inject, DestroyRef } from '@angular/core';\n\nimport { injectTableContext } from './table-context';\n\n/**\n * Marks the header row of the table (`role=\"row\"`). Registers its host\n * element with the root so `ForTable` can measure the header's height and\n * publish `--for-table-header-height` for sticky-cell CSS.\n */\n@Directive({\n selector: '[forTableHeaderRow]',\n exportAs: 'forTableHeaderRow',\n host: {\n role: 'row',\n },\n})\nexport class ForTableHeaderRow {\n protected readonly ctx = injectTableContext('ForTableHeaderRow');\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n constructor() {\n const el = this.#host.nativeElement;\n this.ctx.registerHeaderRow(el);\n inject(DestroyRef).onDestroy(() => this.ctx.unregisterHeaderRow(el));\n }\n}\n","import {\n booleanAttribute,\n computed,\n Directive,\n ElementRef,\n inject,\n input,\n numberAttribute,\n type Signal,\n} from '@angular/core';\n\nimport { Collection, registerHandle } from 'forty-cdk/core';\nimport {\n FOR_TABLE_ROW_CONTEXT,\n type ForTableCellHandle,\n type ForTableRowContext,\n type TableSelectionMode,\n injectTableContext,\n} from './table-context';\n\n/**\n * Marks a data row (`role=\"row\"`). Owns the registry of its data cells (for\n * `aria-colindex`) and registers itself with the root so it joins the row index\n * space (`aria-rowindex`, 1-based over data rows in `grid`/`treegrid` mode) and\n * the 2D navigation grid.\n */\n@Directive({\n selector: '[forTableRow]',\n exportAs: 'forTableRow',\n host: {\n role: 'row',\n '[attr.aria-rowindex]': 'rowIndex()',\n '[attr.aria-selected]': 'ariaSelected()',\n '[attr.data-selected]': 'selected() ? \"\" : null',\n '[attr.aria-level]': 'ariaLevel()',\n '[attr.aria-posinset]': 'posinset()',\n '[attr.aria-setsize]': 'setsize()',\n '[attr.aria-expanded]': 'ariaExpanded()',\n '[attr.data-state]': 'expandState()',\n '(click)': 'onClick($event)',\n },\n providers: [{ provide: FOR_TABLE_ROW_CONTEXT, useExisting: ForTableRow }],\n})\nexport class ForTableRow implements ForTableRowContext {\n protected readonly ctx = injectTableContext('ForTableRow');\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n readonly #cells = new Collection<ForTableCellHandle>();\n\n /** This row's selection identity, written into the table's `[(selection)]`. Leave unset for non-selectable rows. */\n readonly value = input<unknown>();\n\n /** 1-based tree depth for `aria-level` in `mode=\"treegrid\"`. Ignored in other modes. */\n readonly level = input(1, { transform: numberAttribute });\n\n /** Marks this row as an expandable parent — emits `aria-expanded` + `data-state`. */\n readonly expandable = input(false, { transform: booleanAttribute });\n\n /**\n * Absolute 0-based index of this row in the full virtualized dataset. Set by the\n * consumer when rendering a window via `[forTableVirtualized]`; drives the absolute\n * `aria-rowindex` and keeps the focused row mounted across recycling. Leave unset\n * (default `null`) for non-virtualized tables. Ignored in `mode=\"table\"`.\n */\n readonly virtualIndex = input<number | null, unknown>(null, {\n transform: (v) => (v == null ? null : numberAttribute(v)),\n });\n\n protected readonly rowIndex = computed<number | null>(() => {\n if (this.ctx.mode() === 'table') {\n return null;\n }\n const vi = this.virtualIndex();\n return vi !== null ? vi + 1 : this.ctx.rowIndexOf(this.#host) + 1;\n });\n\n readonly selectionMode: Signal<TableSelectionMode> = this.ctx.selectionMode;\n\n readonly selected = computed(() => {\n const v = this.value();\n return v !== undefined && this.ctx.isRowSelected(v);\n });\n\n protected readonly ariaSelected = computed<'true' | 'false' | null>(() =>\n this.ctx.selectionMode() === 'none' ? null : this.selected() ? 'true' : 'false',\n );\n\n /** Whether this expandable row is currently open. False for non-expandable rows. */\n readonly expanded = computed(() => {\n const v = this.value();\n return v !== undefined && this.ctx.isRowExpanded(v);\n });\n\n /** Toggles this row's expansion. No-op when the row is not expandable or has no `[value]`. */\n toggleExpanded(): void {\n if (this.expandable()) {\n this.ctx.toggleRowExpansion(this.value());\n }\n }\n\n protected readonly ariaLevel = computed<number | null>(() =>\n this.ctx.mode() === 'treegrid' ? this.level() : null,\n );\n protected readonly posinset = computed<number | null>(() =>\n this.ctx.mode() === 'treegrid' ? this.ctx.rowPosinset(this.#host) : null,\n );\n protected readonly setsize = computed<number | null>(() =>\n this.ctx.mode() === 'treegrid' ? this.ctx.rowSetsize(this.#host) : null,\n );\n protected readonly ariaExpanded = computed<'true' | 'false' | null>(() =>\n this.ctx.mode() === 'treegrid' && this.expandable()\n ? this.expanded()\n ? 'true'\n : 'false'\n : null,\n );\n protected readonly expandState = computed<'open' | 'closed' | null>(() =>\n this.ctx.mode() === 'treegrid' && this.expandable()\n ? this.expanded()\n ? 'open'\n : 'closed'\n : null,\n );\n\n constructor() {\n const handle = {\n host: this.#host,\n cells: this.#cells.items,\n value: this.value,\n level: this.level,\n expandable: this.expandable,\n virtualIndex: this.virtualIndex,\n };\n registerHandle(\n handle,\n (h) => this.ctx.registerRow(h),\n (h) => this.ctx.unregisterRow(h),\n );\n }\n\n registerCell(handle: ForTableCellHandle): void {\n this.#cells.register(handle);\n }\n\n unregisterCell(handle: ForTableCellHandle): void {\n this.#cells.unregister(handle);\n }\n\n cellIndexOf(host: HTMLElement): number {\n return this.#cells.indexOfHost(host);\n }\n\n toggleSelected(): void {\n const v = this.value();\n if (v !== undefined) {\n this.ctx.toggleRowSelection(v);\n }\n }\n\n protected onClick(event: MouseEvent): void {\n const v = this.value();\n if (this.ctx.selectionMode() === 'none' || v === undefined) {\n return;\n }\n this.ctx.selectRow(v, {\n ctrlKey: event.ctrlKey,\n metaKey: event.metaKey,\n shiftKey: event.shiftKey,\n });\n }\n}\n","import { Directive, input } from '@angular/core';\n\nimport { coerceSticky, injectTableContext, type TableStickyValue } from './table-context';\n\n/**\n * Marks a header cell (`role=\"columnheader\"`). Requires a `name` input that\n * identifies the column — reflected as `data-column` for later phases (sort,\n * resize, reorder) to key off. Optionally sticky via the `sticky` input.\n */\n@Directive({\n selector: '[forTableHeaderCell]',\n exportAs: 'forTableHeaderCell',\n host: {\n role: 'columnheader',\n '[attr.data-column]': 'name()',\n '[attr.data-sticky]': \"sticky() ? (sticky() === 'end' ? 'end' : '') : null\",\n },\n})\nexport class ForTableHeaderCell {\n protected readonly ctx = injectTableContext('ForTableHeaderCell');\n\n /** Column identifier, reflected as `data-column`. Required by later phases (sort, resize, reorder). */\n readonly name = input.required<string>();\n\n /**\n * Sticky placement for this header cell. `true` (or the bare `sticky`\n * attribute) pins to the start edge; `'end'` pins to the end edge; `false`\n * (default) is not sticky. The consumer applies `position: sticky` and the\n * appropriate `top` / `left` / `right` offset in CSS — this input only\n * provides the `data-sticky` hook.\n */\n readonly sticky = input(false as TableStickyValue, { transform: coerceSticky });\n}\n","import { booleanAttribute, computed, Directive, ElementRef, inject, input } from '@angular/core';\n\nimport { registerHandle } from 'forty-cdk/core';\nimport {\n coerceSticky,\n type ForTableCellHandle,\n injectTableContext,\n injectTableRowContext,\n type TableStickyValue,\n} from './table-context';\n\n/**\n * Marks a data cell. The `role` is derived from the root's `mode`: `'cell'` in\n * `table` mode and `'gridcell'` in `grid` / `treegrid` mode. In grid / treegrid\n * mode the cell is a roving-tabindex target — the single active cell carries\n * `tabindex=\"0\"` (others `-1`), reflects `data-highlighted` when focused, and\n * carries a 1-based `aria-colindex`. Arrow / Home / End / Ctrl+Home / Ctrl+End /\n * PageUp / PageDown move focus between cells. Requires a `name` input that\n * identifies the column — reflected as `data-column`. Optionally sticky and\n * optionally disabled (disabled cells are skipped during navigation).\n */\n@Directive({\n selector: '[forTableCell]',\n exportAs: 'forTableCell',\n host: {\n '[attr.role]': 'role()',\n '[attr.tabindex]': 'tabindex()',\n '[attr.aria-colindex]': 'colIndex()',\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\n '[attr.data-column]': 'name()',\n '[attr.data-sticky]': \"sticky() ? (sticky() === 'end' ? 'end' : '') : null\",\n '[attr.data-highlighted]': 'highlighted() ? \"\" : null',\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\n '(focus)': 'onFocus()',\n '(keydown)': 'onKeyDown($event)',\n },\n})\nexport class ForTableCell {\n protected readonly ctx = injectTableContext('ForTableCell');\n protected readonly rowCtx = injectTableRowContext('ForTableCell');\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n\n protected readonly role = computed(() => (this.ctx.mode() === 'table' ? 'cell' : 'gridcell'));\n\n /** Column identifier, reflected as `data-column`. Required by later phases (sort, resize, reorder). */\n readonly name = input.required<string>();\n\n /**\n * Sticky placement for this data cell. `true` (or the bare `sticky` attribute)\n * pins to the start edge; `'end'` pins to the end edge; `false` (default) is not\n * sticky. The consumer applies `position: sticky` and the offsets in CSS — this\n * input only provides the `data-sticky` hook.\n */\n readonly sticky = input(false as TableStickyValue, { transform: coerceSticky });\n\n /**\n * Whether this data cell is disabled. Disabled cells are skipped during arrow-key\n * navigation, drop out of the tab order, and reflect `aria-disabled` / `data-disabled`.\n * Only meaningful in `grid` / `treegrid` mode.\n */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n protected readonly tabindex = computed<number | null>(() => {\n if (this.ctx.mode() === 'table') {\n return null;\n }\n if (this.disabled()) {\n return -1;\n }\n return this.ctx.cellTabIndex(this.#host);\n });\n\n protected readonly colIndex = computed<number | null>(() =>\n this.ctx.mode() === 'table' ? null : this.rowCtx.cellIndexOf(this.#host) + 1,\n );\n\n protected readonly highlighted = computed(\n () => this.ctx.mode() !== 'table' && this.ctx.isCellHighlighted(this.#host),\n );\n\n constructor() {\n const handle: ForTableCellHandle = { host: this.#host, disabled: this.disabled };\n registerHandle(\n handle,\n (h) => this.rowCtx.registerCell(h),\n (h) => this.rowCtx.unregisterCell(h),\n );\n }\n\n protected onFocus(): void {\n this.ctx.activateCell(this.#host);\n }\n\n protected onKeyDown(event: KeyboardEvent): void {\n this.ctx.handleCellKeydown(event, this.#host);\n }\n}\n","import { computed, Directive } from '@angular/core';\n\nimport { injectTableRowContext } from './table-context';\n\n/**\n * Decorative per-row selection affordance inside a `[forTableRow]`. Clicking it\n * toggles the row's selection; the enclosing row owns the announced\n * `aria-selected`, so this element is `aria-hidden` and reflects\n * `data-state=\"checked\" | \"unchecked\"` for styling only. Place a glyph inside.\n */\n@Directive({\n selector: '[forTableRowSelector]',\n exportAs: 'forTableRowSelector',\n host: {\n 'aria-hidden': 'true',\n '[attr.data-state]': 'dataState()',\n '(click)': 'onClick($event)',\n },\n})\nexport class ForTableRowSelector {\n protected readonly row = injectTableRowContext('ForTableRowSelector');\n\n protected readonly dataState = computed(() => (this.row.selected() ? 'checked' : 'unchecked'));\n\n protected onClick(event: MouseEvent): void {\n event.stopPropagation();\n this.row.toggleSelected();\n }\n}\n","import { computed, Directive, input } from '@angular/core';\n\nimport { injectTableContext } from './table-context';\n\n/**\n * Header \"select all\" checkbox for a `[forTable]` in `selectionMode=\"multiple\"`.\n * Reflects `aria-checked=\"true\" | \"false\" | \"mixed\"` and\n * `data-state=\"checked\" | \"unchecked\" | \"indeterminate\"` derived from how many\n * selectable rows are selected. Clicking (or Space / Enter) selects all rows\n * when none/some are selected, and clears when all are. No-op outside multiple\n * mode. Apply on a focusable element (e.g. a `<span>` you make tabbable, or a\n * `<button type=\"button\">`).\n */\n@Directive({\n selector: '[forTableSelectAll]',\n exportAs: 'forTableSelectAll',\n host: {\n role: 'checkbox',\n tabindex: '0',\n '[attr.aria-checked]': 'ariaChecked()',\n '[attr.aria-label]': 'ariaLabel() || null',\n '[attr.data-state]': 'dataState()',\n '(click)': 'onClick()',\n '(keydown)': 'onKeyDown($event)',\n },\n})\nexport class ForTableSelectAll {\n protected readonly ctx = injectTableContext('ForTableSelectAll');\n\n /** Accessible label for the control (e.g. \"Select all rows\"). Truthy-only. */\n readonly ariaLabel = input<string | null>(null);\n\n protected readonly ariaChecked = computed<'true' | 'false' | 'mixed'>(() => {\n const state = this.ctx.selectAllState();\n return state === 'all' ? 'true' : state === 'some' ? 'mixed' : 'false';\n });\n\n protected readonly dataState = computed(() => {\n const state = this.ctx.selectAllState();\n return state === 'all' ? 'checked' : state === 'some' ? 'indeterminate' : 'unchecked';\n });\n\n protected onClick(): void {\n this.ctx.toggleSelectAll();\n }\n\n protected onKeyDown(event: KeyboardEvent): void {\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault();\n this.ctx.toggleSelectAll();\n }\n }\n}\n","import { booleanAttribute, computed, Directive, inject, input, model, output } from '@angular/core';\n\nimport { FOR_DRAGGABLE_CONTEXT } from 'forty-cdk/drag-drop';\nimport { injectTableContext } from './table-context';\n\n/** Sort direction for a column header. `'none'` means unsorted (no aria-sort emitted). */\nexport type TableSortDirection = 'ascending' | 'descending' | 'none';\n\n/** Payload of `sortChange`: which column changed and its new direction. */\nexport interface TableSortDescriptor {\n column: string;\n direction: TableSortDirection;\n}\n\n/**\n * Turns a `[forTableHeaderCell]` into a sortable affordance that emits `aria-sort`\n * and fires `sortChange` on activation (click, Enter, Space). The directive is\n * **self-contained**: it owns only its own `direction` state and does NOT register\n * with the table context or auto-reset sibling headers. The \"one sorted column at a\n * time\" guarantee is the consumer's responsibility — hold a single sort descriptor\n * signal and derive each header's `direction` from it. Apply this directive on the\n * same element as `[forTableHeaderCell]`.\n *\n * When a `[forDraggable]` (column reorder) shares the same host cell, this directive\n * yields its `tabindex` to the draggable's roving tab stop so the two never collide on\n * the host attribute; `aria-sort` / `data-sorted` and click / keyboard activation stay\n * on the cell.\n *\n * Cycle (default `firstClickDirection='ascending'`): `none → ascending → descending → none`.\n * With `disableClear`: `none → ascending → descending → ascending`.\n *\n * `firstClickDirection='descending'` flips the entry pole, so a freshly activated\n * column starts descending: `none → descending → ascending → none` (and with\n * `disableClear`: `none → descending → ascending → descending`) — the descending-first\n * behavior used by single-always-active sort descriptors.\n */\n@Directive({\n selector: '[forTableSortHeader]',\n exportAs: 'forTableSortHeader',\n host: {\n '[attr.aria-sort]': 'activeDirection()',\n '[attr.data-sorted]': 'activeDirection()',\n '[attr.tabindex]': 'tabindex()',\n '(click)': 'activate()',\n '(keydown)': 'onKeyDown($event)',\n },\n})\nexport class ForTableSortHeader {\n protected readonly ctx = injectTableContext('ForTableSortHeader');\n readonly #draggable = inject(FOR_DRAGGABLE_CONTEXT, { self: true, optional: true });\n\n /** Column identity included in the `sortChange` payload. */\n readonly column = input.required<string>();\n\n /**\n * Current sort direction. Acts as both the controlled value and the initial value.\n * Its implicit `directionChange` output fires on every internal update (via\n * `[(direction)]`). `sortChange` is the primary column-aware event consumers bind:\n * it carries a `{ column, direction }` descriptor and fires on every activation,\n * regardless of whether the consumer uses two-way binding.\n */\n readonly direction = model<TableSortDirection>('none');\n\n /**\n * When `true`, the cycle skips the `'none'` step: `ascending → descending → ascending`.\n * Useful when clearing the sort is not allowed.\n */\n readonly disableClear = input(false, { transform: booleanAttribute });\n\n /**\n * Direction a previously-unsorted column enters on its first activation (the\n * `'none' → ?` step of the cycle). Defaults to `'ascending'`. Set to `'descending'`\n * for descending-first columns. The toggle between the two sorted directions and the\n * optional `'none'` step (`disableClear`) are unchanged.\n */\n readonly firstClickDirection = input<'ascending' | 'descending'>('ascending');\n\n /**\n * When `false`, the header is fully inert: no `tabindex`, no `aria-sort`, and click /\n * keyboard handlers are no-ops. Defaults to `true`.\n */\n readonly sortable = input(true, { transform: booleanAttribute });\n\n /**\n * Fires on every activation with the column identity and the new direction.\n * Consumers bind this to update their own sort descriptor and reorder rows.\n */\n readonly sortChange = output<TableSortDescriptor>();\n\n /**\n * Truthy-only `aria-sort` / `data-sorted` value: `'ascending'` or `'descending'`\n * while sorted, `null` (absent) when `direction` is `'none'` or `sortable` is `false`.\n */\n protected readonly activeDirection = computed<TableSortDirection | null>(() =>\n this.sortable() && this.direction() !== 'none' ? this.direction() : null,\n );\n\n protected readonly tabindex = computed<'0' | null>(() =>\n !this.#draggable && this.sortable() ? '0' : null,\n );\n\n /** Activates the sort: computes the next direction, updates the model, and emits `sortChange`. */\n protected activate(): void {\n if (!this.sortable()) return;\n const next = this.#next(this.direction());\n this.direction.set(next);\n this.sortChange.emit({ column: this.column(), direction: next });\n }\n\n /** Handles Enter and Space keyboard events, forwarding to `activate()`. */\n protected onKeyDown(event: KeyboardEvent): void {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.activate();\n }\n }\n\n #next(current: TableSortDirection): TableSortDirection {\n const first = this.firstClickDirection();\n const second = first === 'ascending' ? 'descending' : 'ascending';\n if (current === 'none') return first;\n if (current === first) return second;\n return this.disableClear() ? first : 'none';\n }\n}\n","import {\n afterNextRender,\n computed,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n model,\n output,\n PLATFORM_ID,\n signal,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\nimport { clampToRange, startPointerResize } from 'forty-cdk/core';\nimport { injectTableContext } from './table-context';\n\n/** Payload of `resizeCommit`: which column was resized and its committed width (px). */\nexport interface TableResizeDescriptor {\n column: string;\n width: number;\n}\n\n/**\n * Turns a focusable element inside a `[forTableHeaderCell]` into a column-resize\n * handle. Supports pointer drag (with a dead-zone so a plain click is a no-op) and\n * `ArrowLeft` / `ArrowRight` keyboard resize, both constrained to `[min, max]`.\n *\n * On every change it publishes the resolved width as the CSS custom property\n * `--for-table-col-<column>-width` on the table root, so the consumer can apply it\n * to their layout (`grid-template-columns` in `<div>` mode, a `<col>` / cell width\n * in native `<table>` mode). **It never lays out columns itself and never resizes\n * data** — it owns the affordance, accessibility, and the published width only.\n *\n * Reflects `data-resizing` (empty string) while a pointer drag is active. Carries\n * `role=\"separator\"` with `aria-orientation=\"vertical\"` and live `aria-value*`,\n * mirroring `[forPaneResizer]`. The consumer supplies `aria-label`. Before the first\n * gesture, `aria-valuenow` falls back to the header-cell width measured once on mount\n * (browser-only), so a separator with no `[width]` is never announced without a\n * current value; an explicit `[width]` always takes precedence.\n *\n * @example\n * ```html\n * <th forTableHeaderCell name=\"name\">\n * Name\n * <button forTableColumnResizer column=\"name\" [(width)]=\"nameWidth\"\n * aria-label=\"Resize Name column\"></button>\n * </th>\n * ```\n */\n@Directive({\n selector: '[forTableColumnResizer]',\n exportAs: 'forTableColumnResizer',\n host: {\n role: 'separator',\n 'aria-orientation': 'vertical',\n '[attr.tabindex]': '\"0\"',\n '[attr.aria-valuenow]': 'width() ?? measuredWidth() ?? null',\n '[attr.aria-valuemin]': 'min()',\n '[attr.aria-valuemax]': 'ariaValueMax()',\n '[attr.data-resizing]': 'resizing() ? \"\" : null',\n '(pointerdown)': 'onPointerDown($event)',\n '(keydown)': 'onKeyDown($event)',\n '(click)': 'onClick($event)',\n },\n})\nexport class ForTableColumnResizer {\n protected readonly ctx = injectTableContext('ForTableColumnResizer');\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n\n /** Column identity; included in the `resizeCommit` payload and the published CSS var name. */\n readonly column = input.required<string>();\n\n /**\n * Current column width in pixels. Two-way bindable via `[(width)]`. Acts as both\n * the controlled value and the base a pointer drag / arrow step is applied to.\n * When unset, the base for the first gesture is measured from the header cell.\n * Its implicit `widthChange` fires on every live update (drag tick, arrow press);\n * `resizeCommit` is the distinct column-aware gesture-end event.\n */\n readonly width = model<number>();\n\n /** Minimum width in pixels. Default `0`. */\n readonly min = input<number>(0);\n\n /** Maximum width in pixels. Default `Infinity` (no upper bound). */\n readonly max = input<number>(Infinity);\n\n /** Pixels applied per `ArrowLeft` / `ArrowRight` press. Default `10`. */\n readonly step = input<number>(10);\n\n /**\n * Fires once per resize gesture — at pointer-up after a drag, and on every arrow\n * press — with the column identity and its committed width. Bind it to persist\n * the width; live updates during a drag come through `[(width)]` / `widthChange`.\n */\n readonly resizeCommit = output<TableResizeDescriptor>();\n\n /** `aria-valuemax`, omitted when `max` is non-finite (the default unbounded case). */\n protected readonly ariaValueMax = computed<number | null>(() =>\n Number.isFinite(this.max()) ? this.max() : null,\n );\n\n readonly #resizing = signal(false);\n\n /** Whether a pointer drag is currently active (drives `data-resizing`). */\n protected readonly resizing = this.#resizing.asReadonly();\n\n readonly #measuredWidth = signal<number | null>(null);\n\n /**\n * Header-cell width measured once on mount (browser-only). Backs `aria-valuenow`\n * before any explicit `[width]` so the focusable separator never ships without a\n * current value on the measured-fallback path; an explicit `[width]` still wins.\n */\n protected readonly measuredWidth = this.#measuredWidth.asReadonly();\n\n #disposePointer: (() => void) | null = null;\n\n constructor() {\n inject(DestroyRef).onDestroy(() => this.#disposePointer?.());\n effect(() => {\n const w = this.width();\n if (w != null) {\n this.ctx.setColumnWidth(this.column(), w);\n }\n });\n if (isPlatformBrowser(inject(PLATFORM_ID))) {\n afterNextRender(() => this.#measuredWidth.set(this.#measureBaseWidth()));\n }\n }\n\n protected onPointerDown(event: PointerEvent): void {\n if (event.button !== 0) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n const ltr = this.ctx.dir() !== 'rtl';\n this.#disposePointer = startPointerResize(event, {\n host: this.#host,\n axis: 'x',\n startValue: this.width() ?? this.#measureBaseWidth(),\n invert: !ltr,\n constrain: (n) => clampToRange(n, this.min(), this.max()),\n onResize: (w) => {\n this.#resizing.set(true);\n this.width.set(w);\n },\n onCommit: (w) => {\n this.#resizing.set(false);\n this.resizeCommit.emit({ column: this.column(), width: w });\n },\n });\n }\n\n protected onKeyDown(event: KeyboardEvent): void {\n const ltr = this.ctx.dir() !== 'rtl';\n const base = this.width() ?? this.#measureBaseWidth();\n let next: number;\n if (event.key === 'ArrowRight') {\n next = clampToRange(base + (ltr ? this.step() : -this.step()), this.min(), this.max());\n } else if (event.key === 'ArrowLeft') {\n next = clampToRange(base + (ltr ? -this.step() : this.step()), this.min(), this.max());\n } else {\n return;\n }\n event.preventDefault();\n if (next === this.width()) {\n return;\n }\n this.width.set(next);\n this.resizeCommit.emit({ column: this.column(), width: next });\n }\n\n protected onClick(event: MouseEvent): void {\n event.stopPropagation();\n }\n\n #measureBaseWidth(): number {\n const cell = this.#host.closest<HTMLElement>('[forTableHeaderCell]');\n return (cell ?? this.#host).getBoundingClientRect().width;\n }\n}\n","import { DestroyRef, Directive, inject, output } from '@angular/core';\n\nimport {\n FOR_DROP_LIST_DEFAULT_ORIENTATION,\n ForDropList,\n type ForDragDropEvent,\n moveItemInArray,\n} from 'forty-cdk/drag-drop';\nimport { injectTableContext } from './table-context';\n\n/** Payload of `columnReorder`: the move's indices and the resulting column-name order. */\nexport interface TableColumnReorderDescriptor {\n /** Previous column index (0-based, in rendered order). */\n from: number;\n /** New column index (0-based, in rendered order). */\n to: number;\n /** Full column-name order after the move, read from each draggable header cell's `dragData`. */\n columns: readonly string[];\n}\n\n/**\n * Opt-in **column reordering** for `ForTable`, composed over the drag-drop primitive.\n *\n * Apply on the `[forTableHeaderRow]` element. It wraps `[forDropList]` (via\n * `hostDirectives`) so the header cells become a reorderable list, then translates\n * drag-drop's generic drop into the table-friendly `columnReorder` output. Mark each\n * `[forTableHeaderCell]` as `[forDraggable]` with `[dragData]` set to the column name.\n * On a committed drop (pointer or keyboard) it emits the previous / new index and the\n * new column-name order; the consumer applies it to their own column array. **It never\n * reorders columns itself** (BYO-data).\n *\n * The wrapped list defaults to `orientation=\"horizontal\"` (a column reorder is always along\n * the row axis), so no `orientation` binding is needed. Bind `orientation=\"vertical\"` to\n * override for the rare case.\n *\n * @example\n * ```html\n * <div forTableHeaderRow forTableColumnReorder (columnReorder)=\"columns.set($event.columns)\">\n * @for (col of columns(); track col) {\n * <div forTableHeaderCell [name]=\"col\" forDraggable [dragData]=\"col\">{{ col }}</div>\n * }\n * </div>\n * ```\n */\n@Directive({\n selector: '[forTableColumnReorder]',\n exportAs: 'forTableColumnReorder',\n providers: [{ provide: FOR_DROP_LIST_DEFAULT_ORIENTATION, useValue: 'horizontal' }],\n hostDirectives: [\n {\n directive: ForDropList,\n inputs: [\n 'orientation',\n 'dir',\n 'disabled',\n 'autoScroll',\n 'animateReorder',\n 'liveSort',\n 'boundary',\n 'lockAxis',\n ],\n },\n ],\n})\nexport class ForTableColumnReorder {\n protected readonly ctx = injectTableContext('ForTableColumnReorder');\n readonly #list = inject(ForDropList);\n\n /**\n * Fires once per committed reorder gesture (pointer drop or keyboard drop) with the\n * previous / new column index and the full column-name order after the move.\n */\n readonly columnReorder = output<TableColumnReorderDescriptor>();\n\n constructor() {\n const sub = this.#list.dragDrop.subscribe((event: ForDragDropEvent) => this.#emit(event));\n inject(DestroyRef).onDestroy(() => sub.unsubscribe());\n }\n\n #emit(event: ForDragDropEvent): void {\n const names = this.#list.items().map((handle) => String(handle.data()));\n const columns = moveItemInArray(names, event.previousIndex, event.currentIndex);\n this.columnReorder.emit({ from: event.previousIndex, to: event.currentIndex, columns });\n }\n}\n","import {\n DestroyRef,\n Directive,\n DOCUMENT,\n ElementRef,\n inject,\n output,\n PLATFORM_ID,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\nimport { FOR_DRAG_DROP_DEFAULTS, ForDropList, type ForDragDropEvent } from 'forty-cdk/drag-drop';\nimport { createKeyboardDragMediator, LiveAnnouncer, translateWindowReorder } from 'forty-cdk/core';\nimport { injectTableContext } from './table-context';\n\n/** Payload of `rowReorder`: the previous and new row index. */\nexport interface TableRowReorderDescriptor {\n /** Previous row index (0-based). Absolute (dataset) index under virtualization, else rendered order. */\n from: number;\n /** New row index (0-based). Absolute (dataset) index under virtualization, else rendered order. */\n to: number;\n}\n\n/**\n * Translates a drop-list's window-relative `previousIndex` / `currentIndex` into\n * absolute dataset indices, so a virtualized table's consumer can apply\n * `moveItemInArray` over the **full** row array. `windowIndices` holds the\n * absolute `virtualIndex` of every rendered draggable row, in DOM (ascending)\n * order. Thin table-facing wrapper over the shared\n * {@link translateWindowReorder} helper, which owns the post-removal index math.\n */\nexport function translateRowReorderIndices(\n windowIndices: readonly number[],\n previousIndex: number,\n currentIndex: number,\n): TableRowReorderDescriptor {\n return translateWindowReorder(windowIndices, previousIndex, currentIndex);\n}\n\n/**\n * Opt-in **row reordering** for `ForTable`, composed over the drag-drop primitive.\n *\n * Apply on the rowgroup element that wraps the data rows (`<div role=\"rowgroup\">` in\n * `<div>` mode, `<tbody>` in native `<table>` mode). It wraps `[forDropList]` (via\n * `hostDirectives`, vertical by default) so the rows become a reorderable list, then\n * translates drag-drop's generic drop into the table-friendly `rowReorder` output. Mark\n * each `[forTableRow]` as `[forDraggable]` with a `[dragData]`. On a committed drop it\n * emits the previous / new index; the consumer applies the move to their own row array\n * (e.g. `moveItemInArray`). **It never reorders rows itself** (BYO-data).\n *\n * Under `[forTableVirtualized]`, `rowReorder` emits **absolute** dataset indices\n * (derived from each rendered row's `virtualIndex`) so `moveItemInArray` over the full\n * array moves the right row. Pointer drag works within the rendered window and reaches\n * rows beyond it via auto-scroll (the lifted row is kept mounted for the drag); keyboard\n * reorder steps the target across the entire dataset (scrolling unmounted rows into view).\n * A non-virtualized table emits rendered-order indices unchanged.\n *\n * @example\n * ```html\n * <div role=\"rowgroup\" forTableRowReorder (rowReorder)=\"onReorder($event)\">\n * @for (row of rows(); track row.id) {\n * <div forTableRow [value]=\"row.id\" forDraggable [dragData]=\"row.id\">…</div>\n * }\n * </div>\n * ```\n */\n@Directive({\n selector: '[forTableRowReorder]',\n exportAs: 'forTableRowReorder',\n hostDirectives: [\n {\n directive: ForDropList,\n inputs: [\n 'dir',\n 'disabled',\n 'autoScroll',\n 'animateReorder',\n 'liveSort',\n 'boundary',\n 'lockAxis',\n ],\n },\n ],\n})\nexport class ForTableRowReorder {\n protected readonly ctx = injectTableContext('ForTableRowReorder');\n readonly #list = inject(ForDropList);\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n readonly #document = inject(DOCUMENT);\n readonly #isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n readonly #announcer = inject(LiveAnnouncer);\n readonly #dragDefaults = inject(FOR_DRAG_DROP_DEFAULTS);\n\n #kbLiftedHost: HTMLElement | null = null;\n #kbFrom = 0;\n #kbTarget = 0;\n\n /** Fires once per committed reorder gesture with the previous / new row index. */\n readonly rowReorder = output<TableRowReorderDescriptor>();\n\n constructor() {\n const destroyRef = inject(DestroyRef);\n const sub = this.#list.dragDrop.subscribe((event: ForDragDropEvent) =>\n this.rowReorder.emit(this.#resolveDescriptor(event)),\n );\n destroyRef.onDestroy(() => sub.unsubscribe());\n\n if (this.#isBrowser) {\n const onPointerDown = (event: PointerEvent): void => this.#pinFromPointer(event);\n const onPointerEnd = (): void => this.ctx.setReorderingRow(null);\n this.#host.addEventListener('pointerdown', onPointerDown, { capture: true });\n this.#document.addEventListener('pointerup', onPointerEnd, { capture: true });\n this.#document.addEventListener('pointercancel', onPointerEnd, { capture: true });\n\n createKeyboardDragMediator({\n host: this.#host,\n isBrowser: this.#isBrowser,\n destroyRef,\n isLifted: () => this.#kbLiftedHost !== null,\n onIdleKeydown: (event) => this.#onIdleKeydown(event),\n onLiftedKeydown: (event) => this.#onLiftedKeydown(event),\n onFocusOut: (event) => {\n if (this.#kbLiftedHost !== null && event.target === this.#kbLiftedHost) {\n this.#kbCancel();\n }\n },\n });\n\n destroyRef.onDestroy(() => {\n this.#host.removeEventListener('pointerdown', onPointerDown, { capture: true });\n this.#document.removeEventListener('pointerup', onPointerEnd, { capture: true });\n this.#document.removeEventListener('pointercancel', onPointerEnd, { capture: true });\n if (this.#kbLiftedHost !== null) {\n this.#kbCancel();\n }\n this.ctx.setReorderingRow(null);\n });\n }\n }\n\n #onLiftedKeydown(event: KeyboardEvent): void {\n if (this.ctx.virtualRowNavigation() === null) {\n return;\n }\n const key = event.key;\n if (key === ' ' || key === 'Enter') {\n event.preventDefault();\n event.stopPropagation();\n this.#kbCommit();\n } else if (key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n this.#kbCancel();\n } else if (key === 'ArrowDown') {\n this.#setTarget(this.#kbTarget + 1);\n event.preventDefault();\n event.stopPropagation();\n this.#kbApplyTarget();\n } else if (key === 'ArrowUp') {\n this.#setTarget(this.#kbTarget - 1);\n event.preventDefault();\n event.stopPropagation();\n this.#kbApplyTarget();\n } else if (key === 'Home') {\n this.#setTarget(0);\n event.preventDefault();\n event.stopPropagation();\n this.#kbApplyTarget();\n } else if (key === 'End') {\n this.#setTarget(this.#count() - 1);\n event.preventDefault();\n event.stopPropagation();\n this.#kbApplyTarget();\n } else if (key === 'PageDown') {\n this.#setTarget(this.#kbTarget + this.#page());\n event.preventDefault();\n event.stopPropagation();\n this.#kbApplyTarget();\n } else if (key === 'PageUp') {\n this.#setTarget(this.#kbTarget - this.#page());\n event.preventDefault();\n event.stopPropagation();\n this.#kbApplyTarget();\n }\n }\n\n #onIdleKeydown(event: KeyboardEvent): void {\n if (this.ctx.virtualRowNavigation() === null) {\n return;\n }\n const key = event.key;\n if (key !== ' ' && key !== 'Enter') {\n return;\n }\n const draggable = this.#list.items().find((h) => h.host === event.target);\n if (draggable === undefined || draggable.disabled()) {\n return;\n }\n const handle = this.ctx.rows().find((r) => r.host === event.target);\n const vi = handle?.virtualIndex() ?? null;\n if (vi === null) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n this.#kbLift(event.target as HTMLElement, vi);\n }\n\n #kbLift(host: HTMLElement, vi: number): void {\n this.#kbLiftedHost = host;\n this.#kbFrom = vi;\n this.#kbTarget = vi;\n this.ctx.setReorderingRow(vi);\n const total = this.#count();\n this.#announcer.announce(\n this.#dragDefaults.announceLift(this.#label(), vi + 1, total),\n 'assertive',\n );\n }\n\n #kbApplyTarget(): void {\n this.ctx.virtualRowNavigation()?.scrollToRow(this.#kbTarget);\n this.#announcer.announce(\n this.#dragDefaults.announceMove(this.#label(), this.#kbTarget + 1, this.#count()),\n 'polite',\n );\n }\n\n #kbCommit(): void {\n this.rowReorder.emit({ from: this.#kbFrom, to: this.#kbTarget });\n this.#announcer.announce(\n this.#dragDefaults.announceDrop(this.#label(), this.#kbTarget + 1, this.#count()),\n 'assertive',\n );\n this.#kbTeardown();\n }\n\n #kbCancel(): void {\n this.#announcer.announce(this.#dragDefaults.announceCancel(this.#label()), 'assertive');\n this.#kbTeardown();\n }\n\n #kbTeardown(): void {\n this.#kbLiftedHost = null;\n this.#kbFrom = 0;\n this.#kbTarget = 0;\n this.ctx.setReorderingRow(null);\n }\n\n #count(): number {\n return this.ctx.rowCount() ?? this.#list.items().length;\n }\n\n #page(): number {\n return Math.max(1, this.#list.items().length);\n }\n\n #label(): string {\n return (this.#kbLiftedHost?.textContent ?? '').trim();\n }\n\n #setTarget(value: number): void {\n this.#kbTarget = Math.max(0, Math.min(this.#count() - 1, value));\n }\n\n #pinFromPointer(event: PointerEvent): void {\n const target = event.target;\n if (!(target instanceof HTMLElement)) {\n return;\n }\n const rowHost = target.closest<HTMLElement>('[forTableRow]');\n if (rowHost === null) {\n return;\n }\n const handle = this.ctx.rows().find((r) => r.host === rowHost);\n this.ctx.setReorderingRow(handle?.virtualIndex() ?? null);\n }\n\n #resolveDescriptor(event: ForDragDropEvent): TableRowReorderDescriptor {\n const fallback: TableRowReorderDescriptor = {\n from: event.previousIndex,\n to: event.currentIndex,\n };\n if (event.container !== event.previousContainer) {\n return fallback;\n }\n const rowByHost = new Map(this.ctx.rows().map((r) => [r.host, r] as const));\n const windowIndices: number[] = [];\n for (const item of this.#list.items()) {\n const index = rowByHost.get(item.host)?.virtualIndex() ?? null;\n if (index === null) {\n return fallback;\n }\n windowIndices.push(index);\n }\n return translateRowReorderIndices(windowIndices, event.previousIndex, event.currentIndex);\n }\n}\n","import { type Provider } from '@angular/core';\n\nimport { createDefaults } from 'forty-cdk/core';\n\n/**\n * Defaults inherited by descendant tables in the surrounding injector scope.\n * Configure with `provideForTableDefaults`. The shape is a stub today — present\n * so future per-scope tuning can land without churning the public surface.\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface ForTableDefaults {}\n\nconst FALLBACK: ForTableDefaults = {};\n\nconst { token, provideDefaults } = createDefaults<ForTableDefaults>('FOR_TABLE_DEFAULTS', FALLBACK);\n\n/** Token holding the resolved table defaults for the current scope. */\nexport const FOR_TABLE_DEFAULTS = token;\n\n/**\n * Configures forty-cdk table 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 provideForTableDefaults(defaults: Partial<ForTableDefaults> = {}): Provider[] {\n return provideDefaults(defaults);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|