@tailng-ui/primitives 0.14.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/package.json +3 -2
  2. package/src/index.d.ts +1 -0
  3. package/src/index.d.ts.map +1 -1
  4. package/src/index.js +1 -0
  5. package/src/index.js.map +1 -1
  6. package/src/lib/form/datepicker/__tests__/tng-datepicker.test-helpers.d.ts +25 -0
  7. package/src/lib/form/datepicker/__tests__/tng-datepicker.test-helpers.d.ts.map +1 -0
  8. package/src/lib/form/datepicker/__tests__/tng-datepicker.test-helpers.js +105 -0
  9. package/src/lib/form/datepicker/__tests__/tng-datepicker.test-helpers.js.map +1 -0
  10. package/src/lib/form/datepicker/datepicker.adapters.d.ts +5 -0
  11. package/src/lib/form/datepicker/datepicker.adapters.d.ts.map +1 -0
  12. package/src/lib/form/datepicker/datepicker.adapters.js +194 -0
  13. package/src/lib/form/datepicker/datepicker.adapters.js.map +1 -0
  14. package/src/lib/form/datepicker/datepicker.state.d.ts +10 -0
  15. package/src/lib/form/datepicker/datepicker.state.d.ts.map +1 -0
  16. package/src/lib/form/datepicker/datepicker.state.js +97 -0
  17. package/src/lib/form/datepicker/datepicker.state.js.map +1 -0
  18. package/src/lib/form/datepicker/datepicker.types.d.ts +269 -0
  19. package/src/lib/form/datepicker/datepicker.types.d.ts.map +1 -0
  20. package/src/lib/form/datepicker/datepicker.types.js +1 -0
  21. package/src/lib/form/datepicker/datepicker.types.js.map +1 -0
  22. package/src/lib/form/datepicker/datepicker.utils.d.ts +75 -0
  23. package/src/lib/form/datepicker/datepicker.utils.d.ts.map +1 -0
  24. package/src/lib/form/datepicker/datepicker.utils.js +238 -0
  25. package/src/lib/form/datepicker/datepicker.utils.js.map +1 -0
  26. package/src/lib/form/datepicker/index.d.ts +3 -0
  27. package/src/lib/form/datepicker/index.d.ts.map +1 -0
  28. package/src/lib/form/datepicker/index.js +3 -0
  29. package/src/lib/form/datepicker/index.js.map +1 -0
  30. package/src/lib/form/datepicker/tng-datepicker.d.ts +5 -0
  31. package/src/lib/form/datepicker/tng-datepicker.d.ts.map +1 -0
  32. package/src/lib/form/datepicker/tng-datepicker.js +1948 -0
  33. package/src/lib/form/datepicker/tng-datepicker.js.map +1 -0
  34. package/src/lib/form/datepicker/tng-datepicker.overlay.d.ts +60 -0
  35. package/src/lib/form/datepicker/tng-datepicker.overlay.d.ts.map +1 -0
  36. package/src/lib/form/datepicker/tng-datepicker.overlay.js +275 -0
  37. package/src/lib/form/datepicker/tng-datepicker.overlay.js.map +1 -0
  38. package/src/lib/layout/grid/__tests__/tng-grid.test-harness.d.ts +32 -0
  39. package/src/lib/layout/grid/__tests__/tng-grid.test-harness.d.ts.map +1 -0
  40. package/src/lib/layout/grid/__tests__/tng-grid.test-harness.js +312 -0
  41. package/src/lib/layout/grid/__tests__/tng-grid.test-harness.js.map +1 -0
  42. package/src/lib/layout/grid/tng-grid.d.ts +144 -2
  43. package/src/lib/layout/grid/tng-grid.d.ts.map +1 -1
  44. package/src/lib/layout/grid/tng-grid.js +669 -2
  45. package/src/lib/layout/grid/tng-grid.js.map +1 -1
  46. package/src/lib/layout/tree/__tests__/tng-tree.test-harness.d.ts.map +1 -1
  47. package/src/lib/layout/tree/__tests__/tng-tree.test-harness.js +0 -1
  48. package/src/lib/layout/tree/__tests__/tng-tree.test-harness.js.map +1 -1
  49. package/src/lib/navigation/tabs/tng-tabs.d.ts +13 -6
  50. package/src/lib/navigation/tabs/tng-tabs.d.ts.map +1 -1
  51. package/src/lib/navigation/tabs/tng-tabs.js +77 -35
  52. package/src/lib/navigation/tabs/tng-tabs.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"tng-grid.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/grid/tng-grid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;;AAMvD,MAAM,OAAO,OAAO;IAEC,QAAQ,GAAG,MAAe,CAAC;uGAFnC,OAAO;2FAAP,OAAO;;2FAAP,OAAO;kBAJnB,SAAS;mBAAC;oBACT,QAAQ,EAAE,WAAW;oBACrB,QAAQ,EAAE,SAAS;iBACpB;;sBAEE,WAAW;uBAAC,gBAAgB","sourcesContent":["import { Directive, HostBinding } from '@angular/core';\n\n@Directive({\n selector: '[tngGrid]',\n exportAs: 'tngGrid',\n})\nexport class TngGrid {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'grid' as const;\n}\n"]}
1
+ {"version":3,"file":"tng-grid.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/grid/tng-grid.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n OnDestroy,\n OnInit} from '@angular/core';\nimport {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n Input,\n booleanAttribute,\n inject,\n input,\n output,\n} from '@angular/core';\nimport {\n resolveGridNavigationKeyAction,\n resolveNavigableGridCell,\n type TngGridCellPosition,\n type TngGridNavigableCell,\n type TngGridNavigationActionType,\n} from '@tailng-ui/cdk';\n\nexport type TngGridDirection = 'ltr' | 'rtl';\nexport type TngGridSelectionMode = 'none' | 'single';\nexport type TngGridCellRole = 'columnheader' | 'gridcell' | 'rowheader';\nexport type TngGridInteractionTrigger = 'keyboard' | 'pointer' | 'programmatic';\nexport type TngGridCellValue = Readonly<TngGridCellPosition>;\n\nexport type TngGridFocusChangeEvent = Readonly<{\n col: number;\n previousCol: number | null;\n previousRow: number | null;\n row: number;\n trigger: TngGridInteractionTrigger;\n}>;\n\nexport type TngGridActivateEvent = Readonly<{\n col: number;\n row: number;\n trigger: Extract<TngGridInteractionTrigger, 'keyboard' | 'pointer'>;\n}>;\n\ntype TngGridNullablePosition = TngGridCellValue | null;\n\nfunction coerceFiniteNumber(value: unknown): number | null {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n\n if (typeof value === 'string' && value.trim().length > 0) {\n const parsed = Number(value);\n if (Number.isFinite(parsed)) {\n return parsed;\n }\n }\n\n return null;\n}\n\nfunction normalizeIndex(value: unknown): number {\n return Math.max(0, Math.trunc(coerceFiniteNumber(value) ?? 0));\n}\n\nfunction normalizeOptionalIndex(value: unknown): number | null | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n if (value === null || value === '') {\n return null;\n }\n\n const numberValue = coerceFiniteNumber(value);\n if (numberValue === null) {\n return null;\n }\n\n return Math.max(0, Math.trunc(numberValue));\n}\n\nfunction normalizeCount(value: unknown): number | null {\n if (value === undefined || value === null || value === '') {\n return null;\n }\n\n const numberValue = coerceFiniteNumber(value);\n if (numberValue === null) {\n return null;\n }\n\n return Math.max(1, Math.trunc(numberValue));\n}\n\nfunction normalizeSpan(value: unknown): number {\n return Math.max(1, Math.trunc(coerceFiniteNumber(value) ?? 1));\n}\n\nfunction normalizeDirection(value: unknown): TngGridDirection {\n return value === 'rtl' ? 'rtl' : 'ltr';\n}\n\nfunction normalizeSelectionMode(value: unknown): TngGridSelectionMode {\n return value === 'single' ? 'single' : 'none';\n}\n\nfunction normalizeCellRole(value: unknown): TngGridCellRole {\n if (value === 'rowheader' || value === 'columnheader') {\n return value;\n }\n\n return 'gridcell';\n}\n\nfunction normalizeGridValueInput(value: unknown): TngGridCellValue | null | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n if (value === null) {\n return null;\n }\n\n if (typeof value === 'object' && value !== null && 'row' in value && 'col' in value) {\n const row = normalizeOptionalIndex((value as { row: unknown }).row);\n const col = normalizeOptionalIndex((value as { col: unknown }).col);\n if (row === undefined || row === null || col === undefined || col === null) {\n return null;\n }\n\n return Object.freeze({ col, row });\n }\n\n return null;\n}\n\nfunction createCellKey(value: TngGridCellValue): string {\n return `${value.row}:${value.col}`;\n}\n\nfunction compareCellValues(a: TngGridCellValue, b: TngGridCellValue): number {\n if (a.row !== b.row) {\n return a.row - b.row;\n }\n\n return a.col - b.col;\n}\n\nfunction positionsEqual(a: TngGridNullablePosition, b: TngGridNullablePosition): boolean {\n if (a === null || b === null) {\n return a === b;\n }\n\n return a.row === b.row && a.col === b.col;\n}\n\nfunction focusChangeEvent(\n current: TngGridCellValue,\n previous: TngGridNullablePosition,\n trigger: TngGridInteractionTrigger,\n): TngGridFocusChangeEvent {\n return Object.freeze({\n col: current.col,\n previousCol: previous?.col ?? null,\n previousRow: previous?.row ?? null,\n row: current.row,\n trigger,\n });\n}\n\n@Directive({\n selector: '[tngGrid]',\n exportAs: 'tngGrid',\n})\nexport class TngGrid implements OnDestroy {\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly cells = new Set<TngGridCell>();\n private readonly cellByKey = new Map<string, TngGridCell>();\n\n private uncontrolledFocus: TngGridNullablePosition = null;\n private uncontrolledSelection: TngGridNullablePosition = null;\n private selectionInitialized = false;\n private ariaLabelValue: string | null = null;\n private ariaColcountValue: number | null = null;\n private ariaRowcountValue: number | null = null;\n private domFocusedKey: string | null = null;\n private focusVisibleKey: string | null = null;\n private lastActivatedKey: string | null = null;\n private pendingFocusTrigger: TngGridInteractionTrigger | null = null;\n\n public readonly dir = input<TngGridDirection, unknown>('ltr', {\n transform: normalizeDirection,\n });\n public readonly focusCol = input<number | null | undefined, unknown>(undefined, {\n transform: normalizeOptionalIndex,\n });\n public readonly focusRow = input<number | null | undefined, unknown>(undefined, {\n transform: normalizeOptionalIndex,\n });\n public readonly selectionMode = input<TngGridSelectionMode, unknown>('none', {\n transform: normalizeSelectionMode,\n });\n public readonly value = input<TngGridNullablePosition | undefined, unknown>(undefined, {\n transform: normalizeGridValueInput,\n });\n public readonly defaultValue = input<TngGridNullablePosition | undefined, unknown>(undefined, {\n transform: normalizeGridValueInput,\n });\n public readonly wrap = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n public readonly focusRowChange = output<number | null>();\n public readonly focusColChange = output<number | null>();\n public readonly focusChange = output<TngGridFocusChangeEvent>();\n public readonly valueChange = output<TngGridNullablePosition>();\n public readonly cellActivate = output<TngGridActivateEvent>();\n\n @Input()\n public set ariaLabel(value: string | null) {\n this.ariaLabelValue = value;\n }\n\n @Input()\n public set ariaColcount(value: unknown) {\n this.ariaColcountValue = normalizeCount(value);\n }\n\n @Input()\n public set ariaRowcount(value: unknown) {\n this.ariaRowcountValue = normalizeCount(value);\n }\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'grid' as const;\n\n @HostBinding('attr.role')\n protected readonly role = 'grid' as const;\n\n @HostBinding('attr.aria-label')\n protected get ariaLabelAttr(): string | null {\n return this.ariaLabelValue;\n }\n\n @HostBinding('attr.aria-colcount')\n protected get ariaColcountAttr(): string | null {\n const explicitCount = this.ariaColcountValue;\n if (explicitCount !== null) {\n return String(explicitCount);\n }\n\n const computedCount = this.getComputedBounds().colCount;\n return this.cells.size > 0 ? String(computedCount) : null;\n }\n\n @HostBinding('attr.aria-rowcount')\n protected get ariaRowcountAttr(): string | null {\n const explicitCount = this.ariaRowcountValue;\n if (explicitCount !== null) {\n return String(explicitCount);\n }\n\n const computedCount = this.getComputedBounds().rowCount;\n return this.cells.size > 0 ? String(computedCount) : null;\n }\n\n public ngOnDestroy(): void {\n this.cells.clear();\n this.cellByKey.clear();\n }\n\n public registerCell(cell: TngGridCell): void {\n this.cells.add(cell);\n this.cellByKey.set(cell.cellKey(), cell);\n this.ensureUncontrolledSelectionInitialized();\n this.ensureFallbackFocus();\n }\n\n public unregisterCell(cell: TngGridCell): void {\n this.cells.delete(cell);\n this.cellByKey.delete(cell.cellKey());\n\n if (this.lastActivatedKey === cell.cellKey()) {\n this.lastActivatedKey = null;\n }\n\n if (this.focusVisibleKey === cell.cellKey()) {\n this.focusVisibleKey = null;\n }\n\n if (this.domFocusedKey === cell.cellKey()) {\n this.domFocusedKey = null;\n }\n\n if (\n !this.isFocusControlled()\n && this.uncontrolledFocus !== null\n && createCellKey(this.uncontrolledFocus) === cell.cellKey()\n ) {\n this.uncontrolledFocus = null;\n }\n\n if (\n !this.isSelectionControlled()\n && this.uncontrolledSelection !== null\n && createCellKey(this.uncontrolledSelection) === cell.cellKey()\n ) {\n this.uncontrolledSelection = null;\n }\n\n this.ensureFallbackFocus();\n }\n\n public isCellActivated(cell: TngGridCell): boolean {\n return this.lastActivatedKey === cell.cellKey();\n }\n\n public isCellDisabled(cell: TngGridCell): boolean {\n return cell.disabled();\n }\n\n public isCellFocusVisible(cell: TngGridCell): boolean {\n return this.focusVisibleKey === cell.cellKey();\n }\n\n public isCellFocused(cell: TngGridCell): boolean {\n return this.domFocusedKey === cell.cellKey();\n }\n\n public isCellTabStop(cell: TngGridCell): boolean {\n const active = this.getActiveCell();\n return active !== null && active.cellKey() === cell.cellKey();\n }\n\n public isCellSelected(cell: TngGridCell): boolean {\n const explicitSelected = cell.selected();\n if (explicitSelected !== null) {\n return explicitSelected;\n }\n\n const selectedValue = this.getSelectedValue();\n return selectedValue !== null && cell.matchesValue(selectedValue);\n }\n\n public getCellTabIndex(cell: TngGridCell): string {\n if (this.isCellDisabled(cell)) {\n return '-1';\n }\n\n return this.isCellTabStop(cell) ? '0' : '-1';\n }\n\n public onCellClicked(cell: TngGridCell): void {\n if (this.isCellDisabled(cell)) {\n return;\n }\n\n if (this.selectionMode() === 'single') {\n this.requestSelection(cell.getValue());\n }\n }\n\n public onCellFocused(cell: TngGridCell): void {\n if (this.isCellDisabled(cell)) {\n return;\n }\n\n const trigger = this.pendingFocusTrigger ?? 'programmatic';\n this.pendingFocusTrigger = null;\n this.domFocusedKey = cell.cellKey();\n this.requestFocus(cell.getValue(), trigger);\n this.focusVisibleKey = trigger === 'keyboard' || cell.isFocusVisible()\n ? cell.cellKey()\n : null;\n }\n\n public onCellPointerDown(cell: TngGridCell): void {\n if (this.isCellDisabled(cell)) {\n return;\n }\n\n this.pendingFocusTrigger = 'pointer';\n this.focusVisibleKey = null;\n }\n\n public onCellSelectionRequest(cell: TngGridCell, trigger: Extract<TngGridInteractionTrigger, 'keyboard' | 'pointer'>): void {\n if (this.isCellDisabled(cell)) {\n return;\n }\n\n this.lastActivatedKey = cell.cellKey();\n if (this.selectionMode() === 'single') {\n this.requestSelection(cell.getValue());\n }\n\n this.cellActivate.emit(\n Object.freeze({\n col: cell.colIndex(),\n row: cell.rowIndex(),\n trigger,\n }),\n );\n }\n\n @HostListener('focusout', ['$event'])\n protected onFocusOut(event: FocusEvent): void {\n const nextTarget = event.relatedTarget;\n if (nextTarget instanceof Node && this.hostRef.nativeElement.contains(nextTarget)) {\n return;\n }\n\n this.domFocusedKey = null;\n this.focusVisibleKey = null;\n this.pendingFocusTrigger = null;\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeyDown(event: KeyboardEvent): void {\n const activeCell = this.getActiveCell();\n if (activeCell === null || this.isCellDisabled(activeCell)) {\n return;\n }\n\n const action = resolveGridNavigationKeyAction(event, {\n direction: this.dir(),\n });\n if (action === null) {\n return;\n }\n\n if (action.preventDefault) {\n event.preventDefault();\n }\n\n if (action.type === 'exit') {\n return;\n }\n\n if (action.type === 'activate') {\n this.onCellSelectionRequest(activeCell, 'keyboard');\n return;\n }\n\n this.moveFocus(activeCell, action.type);\n }\n\n private ensureFallbackFocus(): void {\n if (this.isFocusControlled()) {\n return;\n }\n\n const currentFocus = this.uncontrolledFocus;\n if (currentFocus !== null) {\n const currentCell = this.cellByKey.get(createCellKey(currentFocus));\n if (currentCell !== undefined && !this.isCellDisabled(currentCell)) {\n return;\n }\n }\n\n const fallback = this.getFirstEnabledCell();\n this.uncontrolledFocus = fallback?.getValue() ?? null;\n }\n\n private ensureUncontrolledSelectionInitialized(): void {\n if (this.selectionInitialized || this.isSelectionControlled()) {\n return;\n }\n\n this.selectionInitialized = true;\n this.uncontrolledSelection = this.defaultValue() ?? null;\n }\n\n private getActiveCell(): TngGridCell | null {\n const focusValue = this.getFocusValue();\n if (focusValue === null) {\n return this.getFirstEnabledCell();\n }\n\n return this.cellByKey.get(createCellKey(focusValue)) ?? this.getFirstEnabledCell();\n }\n\n private getComputedBounds(): Readonly<{ colCount: number; rowCount: number }> {\n const explicitColcount = this.ariaColcountValue;\n const explicitRowcount = this.ariaRowcountValue;\n if (explicitColcount !== null && explicitRowcount !== null) {\n return Object.freeze({\n colCount: explicitColcount,\n rowCount: explicitRowcount,\n });\n }\n\n let maxCol = 0;\n let maxRow = 0;\n for (const cell of this.cells) {\n maxCol = Math.max(maxCol, cell.colIndex());\n maxRow = Math.max(maxRow, cell.rowIndex());\n }\n\n return Object.freeze({\n colCount: explicitColcount ?? maxCol + 1,\n rowCount: explicitRowcount ?? maxRow + 1,\n });\n }\n\n private getFirstEnabledCell(): TngGridCell | null {\n const enabledCells = this.getEnabledCells();\n return enabledCells[0] ?? null;\n }\n\n private getEnabledCells(): readonly TngGridCell[] {\n return [...this.cells]\n .filter((cell) => !this.isCellDisabled(cell))\n .sort((a, b) => compareCellValues(a.getValue(), b.getValue()));\n }\n\n private getFocusValue(): TngGridNullablePosition {\n if (this.isFocusControlled()) {\n const row = this.focusRow();\n const col = this.focusCol();\n if (row === null || col === null || row === undefined || col === undefined) {\n return this.getFirstEnabledCell()?.getValue() ?? null;\n }\n\n const controlled = Object.freeze({ col, row });\n const controlledCell = this.cellByKey.get(createCellKey(controlled));\n if (controlledCell !== undefined && !this.isCellDisabled(controlledCell)) {\n return controlled;\n }\n\n return this.getFirstEnabledCell()?.getValue() ?? null;\n }\n\n if (this.uncontrolledFocus !== null) {\n const activeCell = this.cellByKey.get(createCellKey(this.uncontrolledFocus));\n if (activeCell !== undefined && !this.isCellDisabled(activeCell)) {\n return this.uncontrolledFocus;\n }\n }\n\n return this.getFirstEnabledCell()?.getValue() ?? null;\n }\n\n private getNavigableCells(): readonly TngGridNavigableCell[] {\n return [...this.cells].map((cell) => ({\n col: cell.colIndex(),\n disabled: this.isCellDisabled(cell),\n row: cell.rowIndex(),\n }));\n }\n\n private getSelectedValue(): TngGridNullablePosition {\n if (this.selectionMode() === 'none') {\n return null;\n }\n\n if (this.isSelectionControlled()) {\n return this.value() ?? null;\n }\n\n return this.uncontrolledSelection;\n }\n\n private isFocusControlled(): boolean {\n return this.focusRow() !== undefined && this.focusCol() !== undefined;\n }\n\n private isSelectionControlled(): boolean {\n return this.value() !== undefined;\n }\n\n private moveFocus(activeCell: TngGridCell, actionType: Exclude<TngGridNavigationActionType, 'activate' | 'exit'>): void {\n const nextValue = resolveNavigableGridCell(activeCell.getValue(), actionType, {\n bounds: this.getComputedBounds(),\n cells: this.getNavigableCells(),\n wrap: this.wrap(),\n });\n\n if (nextValue === null) {\n return;\n }\n\n const nextCell = this.cellByKey.get(createCellKey(nextValue));\n if (nextCell === undefined || this.isCellDisabled(nextCell)) {\n return;\n }\n\n this.pendingFocusTrigger = 'keyboard';\n this.requestFocus(nextValue, 'keyboard');\n this.focusVisibleKey = nextCell.cellKey();\n nextCell.focusHost();\n }\n\n private requestFocus(value: TngGridCellValue, trigger: TngGridInteractionTrigger): void {\n const previous = this.getFocusValue();\n if (positionsEqual(previous, value)) {\n return;\n }\n\n if (!this.isFocusControlled()) {\n this.uncontrolledFocus = value;\n }\n\n this.focusRowChange.emit(value.row);\n this.focusColChange.emit(value.col);\n this.focusChange.emit(focusChangeEvent(value, previous, trigger));\n }\n\n private requestSelection(value: TngGridNullablePosition): void {\n const previous = this.getSelectedValue();\n if (positionsEqual(previous, value)) {\n return;\n }\n\n if (!this.isSelectionControlled()) {\n this.uncontrolledSelection = value;\n }\n\n this.valueChange.emit(value);\n }\n}\n\n@Directive({\n selector: '[tngGridRow]',\n exportAs: 'tngGridRow',\n})\nexport class TngGridRow {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'grid-row' as const;\n\n @HostBinding('attr.role')\n protected readonly role = 'row' as const;\n}\n\n@Directive({\n selector: '[tngGridCell]',\n exportAs: 'tngGridCell',\n})\nexport class TngGridCell implements OnInit, OnDestroy {\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly grid = inject(TngGrid);\n\n public readonly rowIndex = input.required<number, unknown>({\n transform: normalizeIndex,\n });\n public readonly colIndex = input.required<number, unknown>({\n transform: normalizeIndex,\n });\n public readonly rowSpan = input<number, unknown>(1, {\n transform: normalizeSpan,\n });\n public readonly colSpan = input<number, unknown>(1, {\n transform: normalizeSpan,\n });\n public readonly disabled = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n public readonly selected = input<boolean | null, unknown>(null, {\n transform: (value: unknown): boolean | null => {\n if (value === undefined || value === null) {\n return null;\n }\n\n return booleanAttribute(value);\n },\n });\n public readonly cellRole = input<TngGridCellRole, unknown>('gridcell', {\n transform: normalizeCellRole,\n });\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'gridcell' as const;\n\n @HostBinding('attr.role')\n protected get roleAttr(): TngGridCellRole {\n return this.cellRole();\n }\n\n @HostBinding('attr.tabindex')\n protected get tabIndexAttr(): string {\n return this.grid.getCellTabIndex(this);\n }\n\n @HostBinding('attr.aria-rowindex')\n protected get ariaRowIndexAttr(): string {\n return String(this.rowIndex() + 1);\n }\n\n @HostBinding('attr.aria-colindex')\n protected get ariaColIndexAttr(): string {\n return String(this.colIndex() + 1);\n }\n\n @HostBinding('attr.aria-rowspan')\n protected get ariaRowSpanAttr(): string | null {\n return this.rowSpan() > 1 ? String(this.rowSpan()) : null;\n }\n\n @HostBinding('attr.aria-colspan')\n protected get ariaColSpanAttr(): string | null {\n return this.colSpan() > 1 ? String(this.colSpan()) : null;\n }\n\n @HostBinding('attr.aria-disabled')\n protected get ariaDisabledAttr(): string | null {\n return this.grid.isCellDisabled(this) ? 'true' : null;\n }\n\n @HostBinding('attr.aria-selected')\n protected get ariaSelectedAttr(): string | null {\n if (this.cellRole() !== 'gridcell' && this.selected() === null) {\n return null;\n }\n\n if (this.cellRole() !== 'gridcell' && this.selected() !== null) {\n return this.selected() ? 'true' : 'false';\n }\n\n if (this.grid.selectionMode() === 'none' && this.selected() === null) {\n return null;\n }\n\n return this.grid.isCellSelected(this) ? 'true' : 'false';\n }\n\n @HostBinding('attr.data-row-index')\n protected get dataRowIndexAttr(): string {\n return String(this.rowIndex());\n }\n\n @HostBinding('attr.data-col-index')\n protected get dataColIndexAttr(): string {\n return String(this.colIndex());\n }\n\n @HostBinding('attr.data-row-span')\n protected get dataRowSpanAttr(): string | null {\n return this.rowSpan() > 1 ? String(this.rowSpan()) : null;\n }\n\n @HostBinding('attr.data-col-span')\n protected get dataColSpanAttr(): string | null {\n return this.colSpan() > 1 ? String(this.colSpan()) : null;\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabledAttr(): '' | null {\n return this.grid.isCellDisabled(this) ? '' : null;\n }\n\n @HostBinding('attr.data-selected')\n protected get dataSelectedAttr(): '' | null {\n return this.grid.isCellSelected(this) ? '' : null;\n }\n\n @HostBinding('attr.data-focused')\n protected get dataFocusedAttr(): '' | null {\n return this.grid.isCellFocused(this) ? '' : null;\n }\n\n @HostBinding('attr.data-focus-visible')\n protected get dataFocusVisibleAttr(): '' | null {\n return this.grid.isCellFocusVisible(this) ? '' : null;\n }\n\n @HostBinding('attr.data-activated')\n protected get dataActivatedAttr(): '' | null {\n return this.grid.isCellActivated(this) ? '' : null;\n }\n\n public ngOnInit(): void {\n this.grid.registerCell(this);\n }\n\n public ngOnDestroy(): void {\n this.grid.unregisterCell(this);\n }\n\n public cellKey(): string {\n return createCellKey(this.getValue());\n }\n\n public focusHost(): void {\n this.hostRef.nativeElement.focus();\n }\n\n public getHostElement(): HTMLElement {\n return this.hostRef.nativeElement;\n }\n\n public getValue(): TngGridCellValue {\n return Object.freeze({\n col: this.colIndex(),\n row: this.rowIndex(),\n });\n }\n\n public isFocusVisible(): boolean {\n return this.hostRef.nativeElement.matches(':focus-visible');\n }\n\n public matchesValue(value: TngGridCellValue): boolean {\n return this.rowIndex() === value.row && this.colIndex() === value.col;\n }\n\n @HostListener('click')\n protected onClick(): void {\n if (this.grid.isCellDisabled(this)) {\n return;\n }\n\n this.grid.onCellClicked(this);\n }\n\n @HostListener('dblclick')\n protected onDoubleClick(): void {\n if (this.grid.isCellDisabled(this)) {\n return;\n }\n\n this.grid.onCellSelectionRequest(this, 'pointer');\n }\n\n @HostListener('focus')\n protected onFocus(): void {\n this.grid.onCellFocused(this);\n }\n\n @HostListener('pointerdown')\n protected onPointerDown(): void {\n this.grid.onCellPointerDown(this);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"tng-tree.test-harness.d.ts","sourceRoot":"","sources":["../../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/tree/__tests__/tng-tree.test-harness.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,gBAAgB,EAAW,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,KAAK,kBAAkB,EAAwD,KAAK,oBAAoB,EAAE,KAAK,YAAY,EAAE,MAAM,UAAU,CAAC;;AAEvJ,qBA8Ca,uBAAuB;IAClC,SAAgB,YAAY,EAAE,KAAK,CAAC,YAAY,GAAG,SAAS,YAAY,EAAE,GAAG,IAAI,CAAC,CAAM;IACjF,YAAY,EAAE,YAAY,GAAG,SAAS,YAAY,EAAE,GAAG,IAAI,GAAG,SAAS,CAAa;IACpF,WAAW,EAAE,kBAAkB,CAAc;IAC7C,YAAY,UAAS;IACrB,aAAa,EAAE,oBAAoB,CAAU;IAC7C,KAAK,EAAE,YAAY,GAAG,SAAS,YAAY,EAAE,GAAG,IAAI,GAAG,SAAS,CAAa;IAE7E,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,SAAS,YAAY,EAAE,GAAG,IAAI,GAAG,IAAI;IAIzE,iBAAiB,IAAI,IAAI;yCAZrB,uBAAuB;2CAAvB,uBAAuB;CAenC;AAED,KAAK,uBAAuB,GAAG,OAAO,CACpC,IAAI,CACF,uBAAuB,EACvB,cAAc,GAAG,aAAa,GAAG,cAAc,GAAG,eAAe,GAAG,OAAO,CAC5E,CACF,CAAC;AAEF,wBAAgB,wBAAwB,CACtC,YAAY,GAAE,uBAA4B,GACzC,gBAAgB,CAAC,uBAAuB,CAAC,CAQ3C;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,gBAAgB,CAAC,uBAAuB,CAAC,GAAG,WAAW,CAM3F;AAED,wBAAgB,OAAO,CACrB,OAAO,EAAE,gBAAgB,CAAC,uBAAuB,CAAC,EAClD,EAAE,EAAE,MAAM,GACT,WAAW,CAMb;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,UAAU,CAI7D;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,IAAI,CAAC,iBAAiB,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAM,GACnF,aAAa,CASf"}
1
+ {"version":3,"file":"tng-tree.test-harness.d.ts","sourceRoot":"","sources":["../../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/tree/__tests__/tng-tree.test-harness.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,gBAAgB,EAAW,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,KAAK,kBAAkB,EAAwD,KAAK,oBAAoB,EAAE,KAAK,YAAY,EAAE,MAAM,UAAU,CAAC;;AAEvJ,qBA6Ca,uBAAuB;IAClC,SAAgB,YAAY,EAAE,KAAK,CAAC,YAAY,GAAG,SAAS,YAAY,EAAE,GAAG,IAAI,CAAC,CAAM;IACjF,YAAY,EAAE,YAAY,GAAG,SAAS,YAAY,EAAE,GAAG,IAAI,GAAG,SAAS,CAAa;IACpF,WAAW,EAAE,kBAAkB,CAAc;IAC7C,YAAY,UAAS;IACrB,aAAa,EAAE,oBAAoB,CAAU;IAC7C,KAAK,EAAE,YAAY,GAAG,SAAS,YAAY,EAAE,GAAG,IAAI,GAAG,SAAS,CAAa;IAE7E,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,SAAS,YAAY,EAAE,GAAG,IAAI,GAAG,IAAI;IAIzE,iBAAiB,IAAI,IAAI;yCAZrB,uBAAuB;2CAAvB,uBAAuB;CAenC;AAED,KAAK,uBAAuB,GAAG,OAAO,CACpC,IAAI,CACF,uBAAuB,EACvB,cAAc,GAAG,aAAa,GAAG,cAAc,GAAG,eAAe,GAAG,OAAO,CAC5E,CACF,CAAC;AAEF,wBAAgB,wBAAwB,CACtC,YAAY,GAAE,uBAA4B,GACzC,gBAAgB,CAAC,uBAAuB,CAAC,CAQ3C;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,gBAAgB,CAAC,uBAAuB,CAAC,GAAG,WAAW,CAM3F;AAED,wBAAgB,OAAO,CACrB,OAAO,EAAE,gBAAgB,CAAC,uBAAuB,CAAC,EAClD,EAAE,EAAE,MAAM,GACT,WAAW,CAMb;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,UAAU,CAI7D;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,IAAI,CAAC,iBAAiB,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAM,GACnF,aAAa,CASf"}
@@ -62,7 +62,6 @@ export class TngTreeHarnessComponent {
62
62
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngTreeHarnessComponent, decorators: [{
63
63
  type: Component,
64
64
  args: [{
65
- standalone: true,
66
65
  imports: [TngTree, TngTreeItem, TngTreeGroup, TngTreeIndicator],
67
66
  template: `
68
67
  <button data-testid="before" type="button">Before</button>
@@ -1 +1 @@
1
- {"version":3,"file":"tng-tree.test-harness.js","sourceRoot":"","sources":["../../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/tree/__tests__/tng-tree.test-harness.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component } from '@angular/core';\nimport { type ComponentFixture, TestBed } from '@angular/core/testing';\nimport { type TngTreeOrientation, TngTree, TngTreeGroup, TngTreeIndicator, TngTreeItem, type TngTreeSelectionMode, type TngTreeValue } from '../index';\n\n@Component({\n standalone: true,\n imports: [TngTree, TngTreeItem, TngTreeGroup, TngTreeIndicator],\n template: `\n <button data-testid=\"before\" type=\"button\">Before</button>\n\n <div\n data-testid=\"tree\"\n tngTree\n [defaultValue]=\"defaultValue\"\n [orientation]=\"orientation\"\n [selectionMode]=\"selectionMode\"\n [value]=\"value\"\n (valueChange)=\"onValueChange($event)\"\n >\n <div\n tngTreeItem\n [defaultExpanded]=\"rootExpanded\"\n [value]=\"'root-a'\"\n aria-label=\"Alpha\"\n id=\"root-a\"\n >\n <span tngTreeIndicator aria-hidden=\"true\">▶</span>\n Root A\n\n <div tngTreeGroup>\n <div tngTreeItem [value]=\"'a-1'\" aria-label=\"Able\" id=\"a-1\">A-1</div>\n <div\n tngTreeItem\n [disabled]=\"true\"\n [value]=\"'a-2'\"\n aria-label=\"Beta Disabled\"\n id=\"a-2\"\n >\n A-2 Disabled\n </div>\n <div tngTreeItem [value]=\"'a-3'\" aria-label=\"Charlie\" id=\"a-3\">A-3</div>\n </div>\n </div>\n\n <div tngTreeItem [value]=\"'root-b'\" aria-label=\"Beta\" id=\"root-b\">Root B</div>\n </div>\n\n <button data-testid=\"after\" type=\"button\">After</button>\n `,\n})\nexport class TngTreeHarnessComponent {\n public readonly valueChanges: Array<TngTreeValue | readonly TngTreeValue[] | null> = [];\n public defaultValue: TngTreeValue | readonly TngTreeValue[] | null | undefined = undefined;\n public orientation: TngTreeOrientation = 'vertical';\n public rootExpanded = false;\n public selectionMode: TngTreeSelectionMode = 'none';\n public value: TngTreeValue | readonly TngTreeValue[] | null | undefined = undefined;\n\n public onValueChange(value: TngTreeValue | readonly TngTreeValue[] | null): void {\n this.valueChanges.push(value);\n }\n\n public resetValueChanges(): void {\n this.valueChanges.length = 0;\n }\n}\n\ntype TreeHarnessInitialState = Partial<\n Pick<\n TngTreeHarnessComponent,\n 'defaultValue' | 'orientation' | 'rootExpanded' | 'selectionMode' | 'value'\n >\n>;\n\nexport function createTreeHarnessFixture(\n initialState: TreeHarnessInitialState = {},\n): ComponentFixture<TngTreeHarnessComponent> {\n TestBed.configureTestingModule({\n imports: [TngTreeHarnessComponent],\n });\n const fixture = TestBed.createComponent(TngTreeHarnessComponent);\n Object.assign(fixture.componentInstance, initialState);\n fixture.detectChanges();\n return fixture;\n}\n\nexport function getTreeHost(fixture: ComponentFixture<TngTreeHarnessComponent>): HTMLElement {\n const tree = fixture.nativeElement.querySelector('[data-testid=\"tree\"]');\n if (!(tree instanceof HTMLElement)) {\n throw new Error('Expected tree host element.');\n }\n return tree;\n}\n\nexport function getItem(\n fixture: ComponentFixture<TngTreeHarnessComponent>,\n id: string,\n): HTMLElement {\n const element = fixture.nativeElement.querySelector(`#${id}`);\n if (!(element instanceof HTMLElement)) {\n throw new Error(`Expected tree item #${id}.`);\n }\n return element;\n}\n\nexport function clickElement(element: HTMLElement): MouseEvent {\n const event = new MouseEvent('click', { bubbles: true, cancelable: true });\n element.dispatchEvent(event);\n return event;\n}\n\nexport function dispatchKeydown(\n target: HTMLElement,\n key: string,\n options: Pick<KeyboardEventInit, 'shiftKey' | 'ctrlKey' | 'metaKey' | 'altKey'> = {},\n): KeyboardEvent {\n const event = new KeyboardEvent('keydown', {\n bubbles: true,\n cancelable: true,\n key,\n ...options,\n });\n target.dispatchEvent(event);\n return event;\n}\n"]}
1
+ {"version":3,"file":"tng-tree.test-harness.js","sourceRoot":"","sources":["../../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/tree/__tests__/tng-tree.test-harness.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component } from '@angular/core';\nimport { type ComponentFixture, TestBed } from '@angular/core/testing';\nimport { type TngTreeOrientation, TngTree, TngTreeGroup, TngTreeIndicator, TngTreeItem, type TngTreeSelectionMode, type TngTreeValue } from '../index';\n\n@Component({\n imports: [TngTree, TngTreeItem, TngTreeGroup, TngTreeIndicator],\n template: `\n <button data-testid=\"before\" type=\"button\">Before</button>\n\n <div\n data-testid=\"tree\"\n tngTree\n [defaultValue]=\"defaultValue\"\n [orientation]=\"orientation\"\n [selectionMode]=\"selectionMode\"\n [value]=\"value\"\n (valueChange)=\"onValueChange($event)\"\n >\n <div\n tngTreeItem\n [defaultExpanded]=\"rootExpanded\"\n [value]=\"'root-a'\"\n aria-label=\"Alpha\"\n id=\"root-a\"\n >\n <span tngTreeIndicator aria-hidden=\"true\">▶</span>\n Root A\n\n <div tngTreeGroup>\n <div tngTreeItem [value]=\"'a-1'\" aria-label=\"Able\" id=\"a-1\">A-1</div>\n <div\n tngTreeItem\n [disabled]=\"true\"\n [value]=\"'a-2'\"\n aria-label=\"Beta Disabled\"\n id=\"a-2\"\n >\n A-2 Disabled\n </div>\n <div tngTreeItem [value]=\"'a-3'\" aria-label=\"Charlie\" id=\"a-3\">A-3</div>\n </div>\n </div>\n\n <div tngTreeItem [value]=\"'root-b'\" aria-label=\"Beta\" id=\"root-b\">Root B</div>\n </div>\n\n <button data-testid=\"after\" type=\"button\">After</button>\n `,\n})\nexport class TngTreeHarnessComponent {\n public readonly valueChanges: Array<TngTreeValue | readonly TngTreeValue[] | null> = [];\n public defaultValue: TngTreeValue | readonly TngTreeValue[] | null | undefined = undefined;\n public orientation: TngTreeOrientation = 'vertical';\n public rootExpanded = false;\n public selectionMode: TngTreeSelectionMode = 'none';\n public value: TngTreeValue | readonly TngTreeValue[] | null | undefined = undefined;\n\n public onValueChange(value: TngTreeValue | readonly TngTreeValue[] | null): void {\n this.valueChanges.push(value);\n }\n\n public resetValueChanges(): void {\n this.valueChanges.length = 0;\n }\n}\n\ntype TreeHarnessInitialState = Partial<\n Pick<\n TngTreeHarnessComponent,\n 'defaultValue' | 'orientation' | 'rootExpanded' | 'selectionMode' | 'value'\n >\n>;\n\nexport function createTreeHarnessFixture(\n initialState: TreeHarnessInitialState = {},\n): ComponentFixture<TngTreeHarnessComponent> {\n TestBed.configureTestingModule({\n imports: [TngTreeHarnessComponent],\n });\n const fixture = TestBed.createComponent(TngTreeHarnessComponent);\n Object.assign(fixture.componentInstance, initialState);\n fixture.detectChanges();\n return fixture;\n}\n\nexport function getTreeHost(fixture: ComponentFixture<TngTreeHarnessComponent>): HTMLElement {\n const tree = fixture.nativeElement.querySelector('[data-testid=\"tree\"]');\n if (!(tree instanceof HTMLElement)) {\n throw new Error('Expected tree host element.');\n }\n return tree;\n}\n\nexport function getItem(\n fixture: ComponentFixture<TngTreeHarnessComponent>,\n id: string,\n): HTMLElement {\n const element = fixture.nativeElement.querySelector(`#${id}`);\n if (!(element instanceof HTMLElement)) {\n throw new Error(`Expected tree item #${id}.`);\n }\n return element;\n}\n\nexport function clickElement(element: HTMLElement): MouseEvent {\n const event = new MouseEvent('click', { bubbles: true, cancelable: true });\n element.dispatchEvent(event);\n return event;\n}\n\nexport function dispatchKeydown(\n target: HTMLElement,\n key: string,\n options: Pick<KeyboardEventInit, 'shiftKey' | 'ctrlKey' | 'metaKey' | 'altKey'> = {},\n): KeyboardEvent {\n const event = new KeyboardEvent('keydown', {\n bubbles: true,\n cancelable: true,\n key,\n ...options,\n });\n target.dispatchEvent(event);\n return event;\n}\n"]}
@@ -1,3 +1,4 @@
1
+ import type { DoCheck, OnDestroy, OnInit } from '@angular/core';
1
2
  import * as i0 from "@angular/core";
2
3
  type TngTabsDirection = 'ltr' | 'rtl' | 'auto';
3
4
  type TngTabsOrientation = 'horizontal' | 'vertical';
@@ -16,7 +17,7 @@ export type TngTabsFocusChangeEvent = Readonly<{
16
17
  previousValue: TngTabsValue | null;
17
18
  trigger: TngTabsFocusTrigger;
18
19
  }>;
19
- export declare class TngTabs {
20
+ export declare class TngTabs implements DoCheck {
20
21
  private readonly hostRef;
21
22
  private readonly tabs;
22
23
  private readonly panels;
@@ -25,6 +26,7 @@ export declare class TngTabs {
25
26
  private scrollNextControl;
26
27
  private uncontrolledValue;
27
28
  private focusedValue;
29
+ private domFocusedValue;
28
30
  private hasUserSelection;
29
31
  private initialized;
30
32
  readonly value: import("@angular/core").InputSignalWithTransform<TngTabsValue | null | undefined, unknown>;
@@ -62,6 +64,7 @@ export declare class TngTabs {
62
64
  prev(): void;
63
65
  registerTab(tab: TngTab): void;
64
66
  unregisterTab(tab: TngTab): void;
67
+ private notifySelectedValueChanged;
65
68
  notifyTabMutated(tab: TngTab): void;
66
69
  registerPanel(panel: TngTabPanel): void;
67
70
  unregisterPanel(panel: TngTabPanel): void;
@@ -86,7 +89,9 @@ export declare class TngTabs {
86
89
  isPanelActive(panel: TngTabPanel): boolean;
87
90
  isPanelMounted(panel: TngTabPanel): boolean;
88
91
  onTabFocused(tab: TngTab, trigger: TngTabsFocusTrigger): void;
92
+ onTabListFocusOut(event: FocusEvent): void;
89
93
  requestSelection(tab: TngTab, trigger: TngTabsSelectionTrigger): void;
94
+ private hanlsFocusMove;
90
95
  handleTabKeydown(tab: TngTab, event: KeyboardEvent): void;
91
96
  private resolveFocusMove;
92
97
  private moveFocusByAction;
@@ -99,6 +104,7 @@ export declare class TngTabs {
99
104
  private getSelectedValue;
100
105
  private getEffectiveSelectedValue;
101
106
  private resolveCurrentTabStopValue;
107
+ private syncStateHandleUnInitialized;
102
108
  private syncStateFromRegistry;
103
109
  private resolveNeighborValueOnRemoval;
104
110
  private resolveNeighborForDisabledTab;
@@ -119,7 +125,7 @@ export declare class TngTabs {
119
125
  static ɵfac: i0.ɵɵFactoryDeclaration<TngTabs, never>;
120
126
  static ɵdir: i0.ɵɵDirectiveDeclaration<TngTabs, "[tngTabs]", ["tngTabs"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "defaultValue": { "alias": "defaultValue"; "required": false; "isSignal": true; }; "activation": { "alias": "activation"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "scrollButtons": { "alias": "scrollButtons"; "required": false; "isSignal": true; }; "loop": { "alias": "loop"; "required": false; "isSignal": true; }; "dir": { "alias": "dir"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "lazy": { "alias": "lazy"; "required": false; "isSignal": true; }; "keepAlive": { "alias": "keepAlive"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "tabChange": "tabChange"; "focusChange": "focusChange"; }, never, never, true, never>;
121
127
  }
122
- export declare class TngTabList {
128
+ export declare class TngTabList implements OnDestroy {
123
129
  private readonly hostRef;
124
130
  private readonly tabs;
125
131
  readonly ariaLabel: import("@angular/core").InputSignalWithTransform<string | null | undefined, unknown>;
@@ -134,12 +140,13 @@ export declare class TngTabList {
134
140
  ngOnDestroy(): void;
135
141
  protected onWheel(event: WheelEvent): void;
136
142
  protected onScroll(): void;
143
+ protected onFocusout(event: FocusEvent): void;
137
144
  protected onFocus(): void;
138
145
  getHostElement(): HTMLElement;
139
146
  static ɵfac: i0.ɵɵFactoryDeclaration<TngTabList, never>;
140
147
  static ɵdir: i0.ɵɵDirectiveDeclaration<TngTabList, "[tngTabList]", ["tngTabList"], { "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaLabelledby": { "alias": "ariaLabelledby"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
141
148
  }
142
- export declare class TngTabsScrollButtonPrev {
149
+ export declare class TngTabsScrollButtonPrev implements OnDestroy {
143
150
  private readonly tabs;
144
151
  protected readonly dataSlot: "tabs-scroll-button-prev";
145
152
  protected get hidden(): '' | null;
@@ -152,7 +159,7 @@ export declare class TngTabsScrollButtonPrev {
152
159
  static ɵfac: i0.ɵɵFactoryDeclaration<TngTabsScrollButtonPrev, never>;
153
160
  static ɵdir: i0.ɵɵDirectiveDeclaration<TngTabsScrollButtonPrev, "[tngTabsScrollButtonPrev]", ["tngTabsScrollButtonPrev"], {}, {}, never, never, true, never>;
154
161
  }
155
- export declare class TngTabsScrollButtonNext {
162
+ export declare class TngTabsScrollButtonNext implements OnDestroy {
156
163
  private readonly tabs;
157
164
  protected readonly dataSlot: "tabs-scroll-button-next";
158
165
  protected get hidden(): '' | null;
@@ -165,7 +172,7 @@ export declare class TngTabsScrollButtonNext {
165
172
  static ɵfac: i0.ɵɵFactoryDeclaration<TngTabsScrollButtonNext, never>;
166
173
  static ɵdir: i0.ɵɵDirectiveDeclaration<TngTabsScrollButtonNext, "[tngTabsScrollButtonNext]", ["tngTabsScrollButtonNext"], {}, {}, never, never, true, never>;
167
174
  }
168
- export declare class TngTab {
175
+ export declare class TngTab implements DoCheck, OnDestroy, OnInit {
169
176
  private readonly hostRef;
170
177
  private readonly tabs;
171
178
  private resolvedId;
@@ -204,7 +211,7 @@ export declare class TngTab {
204
211
  static ɵfac: i0.ɵɵFactoryDeclaration<TngTab, never>;
205
212
  static ɵdir: i0.ɵɵDirectiveDeclaration<TngTab, "[tngTab]", ["tngTab"], { "valueInput": { "alias": "value"; "required": false; "isSignal": true; }; "disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; "panelId": { "alias": "panelId"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
206
213
  }
207
- export declare class TngTabPanel {
214
+ export declare class TngTabPanel implements DoCheck, OnDestroy, OnInit {
208
215
  private readonly hostRef;
209
216
  private readonly tabs;
210
217
  private resolvedId;
@@ -1 +1 @@
1
- {"version":3,"file":"tng-tabs.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/navigation/tabs/tng-tabs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tng-tabs.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/navigation/tabs/tng-tabs.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { Directive, ElementRef, HostBinding, HostListener, inject, input, output, } from '@angular/core';
1
+ import { Directive, ElementRef, HostBinding, HostListener, inject, input, output } from '@angular/core';
2
2
  import { createTngIdFactory } from '@tailng-ui/cdk';
3
3
  import * as i0 from "@angular/core";
4
4
  const createTabId = createTngIdFactory('tng-tab');
@@ -56,7 +56,7 @@ function normalizeOptionalValueInput(value) {
56
56
  if (typeof value === 'number' || typeof value === 'string') {
57
57
  return value;
58
58
  }
59
- return String(value);
59
+ return undefined;
60
60
  }
61
61
  function normalizeOptionalStringInput(value) {
62
62
  if (value === undefined) {
@@ -65,12 +65,20 @@ function normalizeOptionalStringInput(value) {
65
65
  if (value === null) {
66
66
  return null;
67
67
  }
68
- return String(value);
68
+ if (typeof value === 'string') {
69
+ return value;
70
+ }
71
+ if (typeof value === 'number' || typeof value === 'boolean' || typeof value === 'bigint') {
72
+ return String(value);
73
+ }
74
+ return undefined;
69
75
  }
70
76
  function valuesEqual(a, b) {
71
77
  return a === b;
72
78
  }
73
- function compareByDomPosition(aElement, bElement, aOrder, bOrder) {
79
+ function compareByDomPosition(elements, orders) {
80
+ const { aElement, bElement } = elements;
81
+ const { aOrder, bOrder } = orders;
74
82
  if (aElement === bElement) {
75
83
  return 0;
76
84
  }
@@ -101,6 +109,7 @@ export class TngTabs {
101
109
  scrollNextControl = null;
102
110
  uncontrolledValue = null;
103
111
  focusedValue = null;
112
+ domFocusedValue = null;
104
113
  hasUserSelection = false;
105
114
  initialized = false;
106
115
  value = input(undefined, { ...(ngDevMode ? { debugName: "value" } : {}), transform: normalizeOptionalValueInput });
@@ -179,18 +188,27 @@ export class TngTabs {
179
188
  const nextFocusedValue = this.resolveNeighborValueOnRemoval(orderedTabs, removedIndex);
180
189
  this.focusedValue = nextFocusedValue;
181
190
  }
191
+ if (this.domFocusedValue !== null && valuesEqual(this.domFocusedValue, removedValue)) {
192
+ this.domFocusedValue = null;
193
+ }
182
194
  this.syncStateFromRegistry();
183
195
  }
184
- notifyTabMutated(tab) {
196
+ notifySelectedValueChanged(tab) {
185
197
  const selectedValue = this.getEffectiveSelectedValue();
186
198
  if (selectedValue !== null && valuesEqual(selectedValue, tab.getValue()) && tab.isDisabledInContext()) {
187
199
  const replacement = this.resolveNeighborForDisabledTab(tab);
188
200
  this.applyLifecycleSelection(replacement);
189
201
  }
202
+ }
203
+ notifyTabMutated(tab) {
204
+ this.notifySelectedValueChanged(tab);
190
205
  const focusedValue = this.resolveCurrentTabStopValue();
191
206
  if (focusedValue !== null && valuesEqual(focusedValue, tab.getValue()) && tab.isDisabledInContext()) {
192
207
  this.focusedValue = this.resolveNeighborForDisabledTab(tab);
193
208
  }
209
+ if (this.domFocusedValue !== null && valuesEqual(this.domFocusedValue, tab.getValue()) && tab.isDisabledInContext()) {
210
+ this.domFocusedValue = null;
211
+ }
194
212
  this.syncStateFromRegistry();
195
213
  }
196
214
  registerPanel(panel) {
@@ -304,8 +322,7 @@ export class TngTabs {
304
322
  return valuesEqual(selectedValue, tab.getValue());
305
323
  }
306
324
  isTabFocused(tab) {
307
- const tabStop = this.resolveCurrentTabStopValue();
308
- return tabStop !== null && valuesEqual(tabStop, tab.getValue());
325
+ return this.domFocusedValue !== null && valuesEqual(this.domFocusedValue, tab.getValue());
309
326
  }
310
327
  getPanelIdForTab(tab) {
311
328
  const explicitPanelId = tab.getExplicitPanelId();
@@ -367,8 +384,21 @@ export class TngTabs {
367
384
  return;
368
385
  }
369
386
  this.setFocusedValue(tab.getValue(), trigger);
387
+ this.domFocusedValue = tab.getValue();
370
388
  this.scrollTabIntoView(tab);
371
389
  }
390
+ onTabListFocusOut(event) {
391
+ const nextTarget = event.relatedTarget;
392
+ if (!(nextTarget instanceof Element)) {
393
+ this.domFocusedValue = null;
394
+ return;
395
+ }
396
+ const tabListElement = this.getTabListElement();
397
+ if (tabListElement?.contains(nextTarget)) {
398
+ return;
399
+ }
400
+ this.domFocusedValue = null;
401
+ }
372
402
  requestSelection(tab, trigger) {
373
403
  if (this.disabled() || tab.isDisabledInContext()) {
374
404
  return;
@@ -392,16 +422,19 @@ export class TngTabs {
392
422
  this.scrollTabIntoView(tab);
393
423
  this.syncStateFromRegistry();
394
424
  }
395
- handleTabKeydown(tab, event) {
396
- if (this.disabled() || tab.isDisabledInContext()) {
397
- return;
398
- }
425
+ hanlsFocusMove(tab, event) {
399
426
  const focusMove = this.resolveFocusMove(event.key);
400
427
  if (focusMove !== null) {
401
428
  event.preventDefault();
402
429
  this.moveFocusByAction(tab, focusMove, 'keyboard');
403
430
  return;
404
431
  }
432
+ }
433
+ handleTabKeydown(tab, event) {
434
+ if (this.disabled() || tab.isDisabledInContext()) {
435
+ return;
436
+ }
437
+ this.hanlsFocusMove(tab, event);
405
438
  if (event.key !== 'Enter' && event.key !== ' ' && event.key !== 'Spacebar') {
406
439
  return;
407
440
  }
@@ -565,25 +598,29 @@ export class TngTabs {
565
598
  }
566
599
  return enabledTabs[0]?.getValue() ?? null;
567
600
  }
601
+ syncStateHandleUnInitialized(enabledTabs) {
602
+ if (!this.isControlled()) {
603
+ const defaultValue = this.defaultValue();
604
+ if (defaultValue !== undefined && defaultValue !== null) {
605
+ this.uncontrolledValue = this.findEnabledTabByValue(defaultValue, enabledTabs)?.getValue() ?? null;
606
+ }
607
+ else {
608
+ this.uncontrolledValue = enabledTabs[0]?.getValue() ?? null;
609
+ }
610
+ }
611
+ }
568
612
  syncStateFromRegistry() {
569
613
  const enabledTabs = this.getEnabledTabs();
570
614
  if (!this.initialized) {
571
615
  this.initialized = true;
572
- if (!this.isControlled()) {
573
- const defaultValue = this.defaultValue();
574
- if (defaultValue !== undefined && defaultValue !== null) {
575
- this.uncontrolledValue = this.findEnabledTabByValue(defaultValue, enabledTabs)?.getValue() ?? null;
576
- }
577
- else {
578
- this.uncontrolledValue = enabledTabs[0]?.getValue() ?? null;
579
- }
580
- }
616
+ this.syncStateHandleUnInitialized(enabledTabs);
581
617
  }
582
618
  if (enabledTabs.length === 0) {
583
619
  if (!this.isControlled()) {
584
620
  this.uncontrolledValue = null;
585
621
  }
586
622
  this.focusedValue = null;
623
+ this.domFocusedValue = null;
587
624
  return;
588
625
  }
589
626
  if (!this.isControlled()) {
@@ -593,8 +630,8 @@ export class TngTabs {
593
630
  if (defaultTab !== null) {
594
631
  this.uncontrolledValue = defaultTab.getValue();
595
632
  }
596
- else if (this.uncontrolledValue === null) {
597
- this.uncontrolledValue = enabledTabs[0]?.getValue() ?? null;
633
+ else {
634
+ this.uncontrolledValue ??= enabledTabs[0]?.getValue() ?? null;
598
635
  }
599
636
  }
600
637
  else {
@@ -654,7 +691,9 @@ export class TngTabs {
654
691
  }
655
692
  getOrderedTabs() {
656
693
  const tabs = Array.from(this.tabs);
657
- tabs.sort((a, b) => compareByDomPosition(a.getHostElement(), b.getHostElement(), a.getRegistrationOrder(), b.getRegistrationOrder()));
694
+ tabs.sort((a, b) => compareByDomPosition({ aElement: a.getHostElement(),
695
+ bElement: b.getHostElement(), }, { aOrder: a.getRegistrationOrder(),
696
+ bOrder: b.getRegistrationOrder(), }));
658
697
  return tabs;
659
698
  }
660
699
  getEnabledTabs() {
@@ -662,7 +701,9 @@ export class TngTabs {
662
701
  }
663
702
  getOrderedPanels() {
664
703
  const panels = Array.from(this.panels);
665
- panels.sort((a, b) => compareByDomPosition(a.getHostElement(), b.getHostElement(), a.getRegistrationOrder(), b.getRegistrationOrder()));
704
+ panels.sort((a, b) => compareByDomPosition({ aElement: a.getHostElement(),
705
+ bElement: b.getHostElement(), }, { aOrder: a.getRegistrationOrder(),
706
+ bOrder: b.getRegistrationOrder(), }));
666
707
  return panels;
667
708
  }
668
709
  findTabByValue(value) {
@@ -771,10 +812,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
771
812
  export class TngTabList {
772
813
  hostRef = inject(ElementRef);
773
814
  tabs = inject(TngTabs, { host: true });
774
- ariaLabel = input(undefined, { ...(ngDevMode ? { debugName: "ariaLabel" } : {}), alias: 'ariaLabel',
775
- transform: normalizeOptionalStringInput });
776
- ariaLabelledby = input(undefined, { ...(ngDevMode ? { debugName: "ariaLabelledby" } : {}), alias: 'ariaLabelledby',
777
- transform: normalizeOptionalStringInput });
815
+ ariaLabel = input(undefined, { ...(ngDevMode ? { debugName: "ariaLabel" } : {}), transform: normalizeOptionalStringInput });
816
+ ariaLabelledby = input(undefined, { ...(ngDevMode ? { debugName: "ariaLabelledby" } : {}), transform: normalizeOptionalStringInput });
778
817
  dataSlot = 'tab-list';
779
818
  role = 'tablist';
780
819
  tabIndex = '-1';
@@ -799,6 +838,9 @@ export class TngTabList {
799
838
  onScroll() {
800
839
  this.tabs.onTabListScrolled();
801
840
  }
841
+ onFocusout(event) {
842
+ this.tabs.onTabListFocusOut(event);
843
+ }
802
844
  onFocus() {
803
845
  this.tabs.onTabListFocused();
804
846
  }
@@ -806,7 +848,7 @@ export class TngTabList {
806
848
  return this.hostRef.nativeElement;
807
849
  }
808
850
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngTabList, deps: [], target: i0.ɵɵFactoryTarget.Directive });
809
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.1", type: TngTabList, isStandalone: true, selector: "[tngTabList]", inputs: { ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, ariaLabelledby: { classPropertyName: "ariaLabelledby", publicName: "ariaLabelledby", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "wheel": "onWheel($event)", "scroll": "onScroll()", "focus": "onFocus()" }, properties: { "attr.data-slot": "this.dataSlot", "attr.role": "this.role", "attr.tabindex": "this.tabIndex", "attr.aria-orientation": "this.ariaOrientation", "attr.aria-label": "this.hostAriaLabel", "attr.aria-labelledby": "this.hostAriaLabelledby" } }, exportAs: ["tngTabList"], ngImport: i0 });
851
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.1", type: TngTabList, isStandalone: true, selector: "[tngTabList]", inputs: { ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, ariaLabelledby: { classPropertyName: "ariaLabelledby", publicName: "ariaLabelledby", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "wheel": "onWheel($event)", "scroll": "onScroll()", "focusout": "onFocusout($event)", "focus": "onFocus()" }, properties: { "attr.data-slot": "this.dataSlot", "attr.role": "this.role", "attr.tabindex": "this.tabIndex", "attr.aria-orientation": "this.ariaOrientation", "attr.aria-label": "this.hostAriaLabel", "attr.aria-labelledby": "this.hostAriaLabelledby" } }, exportAs: ["tngTabList"], ngImport: i0 });
810
852
  }
811
853
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngTabList, decorators: [{
812
854
  type: Directive,
@@ -838,6 +880,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
838
880
  }], onScroll: [{
839
881
  type: HostListener,
840
882
  args: ['scroll']
883
+ }], onFocusout: [{
884
+ type: HostListener,
885
+ args: ['focusout', ['$event']]
841
886
  }], onFocus: [{
842
887
  type: HostListener,
843
888
  args: ['focus']
@@ -957,8 +1002,7 @@ export class TngTab {
957
1002
  transform: normalizeOptionalValueInput });
958
1003
  disabledInput = input(false, { ...(ngDevMode ? { debugName: "disabledInput" } : {}), alias: 'disabled',
959
1004
  transform: normalizeBooleanInput });
960
- panelId = input(undefined, { ...(ngDevMode ? { debugName: "panelId" } : {}), alias: 'panelId',
961
- transform: normalizeOptionalStringInput });
1005
+ panelId = input(undefined, { ...(ngDevMode ? { debugName: "panelId" } : {}), transform: normalizeOptionalStringInput });
962
1006
  dataSlot = 'tab';
963
1007
  role = 'tab';
964
1008
  get id() {
@@ -1137,10 +1181,8 @@ export class TngTabPanel {
1137
1181
  lastKnownValue = null;
1138
1182
  valueInput = input(undefined, { ...(ngDevMode ? { debugName: "valueInput" } : {}), alias: 'value',
1139
1183
  transform: normalizeOptionalValueInput });
1140
- labelledById = input(undefined, { ...(ngDevMode ? { debugName: "labelledById" } : {}), alias: 'labelledById',
1141
- transform: normalizeOptionalStringInput });
1142
- unmountOnExit = input(false, { ...(ngDevMode ? { debugName: "unmountOnExit" } : {}), alias: 'unmountOnExit',
1143
- transform: normalizeBooleanInput });
1184
+ labelledById = input(undefined, { ...(ngDevMode ? { debugName: "labelledById" } : {}), transform: normalizeOptionalStringInput });
1185
+ unmountOnExit = input(false, { ...(ngDevMode ? { debugName: "unmountOnExit" } : {}), transform: normalizeBooleanInput });
1144
1186
  dataSlot = 'tab-panel';
1145
1187
  role = 'tabpanel';
1146
1188
  get id() {