@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.
- package/package.json +3 -2
- package/src/index.d.ts +1 -0
- package/src/index.d.ts.map +1 -1
- package/src/index.js +1 -0
- package/src/index.js.map +1 -1
- package/src/lib/form/datepicker/__tests__/tng-datepicker.test-helpers.d.ts +25 -0
- package/src/lib/form/datepicker/__tests__/tng-datepicker.test-helpers.d.ts.map +1 -0
- package/src/lib/form/datepicker/__tests__/tng-datepicker.test-helpers.js +105 -0
- package/src/lib/form/datepicker/__tests__/tng-datepicker.test-helpers.js.map +1 -0
- package/src/lib/form/datepicker/datepicker.adapters.d.ts +5 -0
- package/src/lib/form/datepicker/datepicker.adapters.d.ts.map +1 -0
- package/src/lib/form/datepicker/datepicker.adapters.js +194 -0
- package/src/lib/form/datepicker/datepicker.adapters.js.map +1 -0
- package/src/lib/form/datepicker/datepicker.state.d.ts +10 -0
- package/src/lib/form/datepicker/datepicker.state.d.ts.map +1 -0
- package/src/lib/form/datepicker/datepicker.state.js +97 -0
- package/src/lib/form/datepicker/datepicker.state.js.map +1 -0
- package/src/lib/form/datepicker/datepicker.types.d.ts +269 -0
- package/src/lib/form/datepicker/datepicker.types.d.ts.map +1 -0
- package/src/lib/form/datepicker/datepicker.types.js +1 -0
- package/src/lib/form/datepicker/datepicker.types.js.map +1 -0
- package/src/lib/form/datepicker/datepicker.utils.d.ts +75 -0
- package/src/lib/form/datepicker/datepicker.utils.d.ts.map +1 -0
- package/src/lib/form/datepicker/datepicker.utils.js +238 -0
- package/src/lib/form/datepicker/datepicker.utils.js.map +1 -0
- package/src/lib/form/datepicker/index.d.ts +3 -0
- package/src/lib/form/datepicker/index.d.ts.map +1 -0
- package/src/lib/form/datepicker/index.js +3 -0
- package/src/lib/form/datepicker/index.js.map +1 -0
- package/src/lib/form/datepicker/tng-datepicker.d.ts +5 -0
- package/src/lib/form/datepicker/tng-datepicker.d.ts.map +1 -0
- package/src/lib/form/datepicker/tng-datepicker.js +1948 -0
- package/src/lib/form/datepicker/tng-datepicker.js.map +1 -0
- package/src/lib/form/datepicker/tng-datepicker.overlay.d.ts +60 -0
- package/src/lib/form/datepicker/tng-datepicker.overlay.d.ts.map +1 -0
- package/src/lib/form/datepicker/tng-datepicker.overlay.js +275 -0
- package/src/lib/form/datepicker/tng-datepicker.overlay.js.map +1 -0
- package/src/lib/layout/grid/__tests__/tng-grid.test-harness.d.ts +32 -0
- package/src/lib/layout/grid/__tests__/tng-grid.test-harness.d.ts.map +1 -0
- package/src/lib/layout/grid/__tests__/tng-grid.test-harness.js +312 -0
- package/src/lib/layout/grid/__tests__/tng-grid.test-harness.js.map +1 -0
- package/src/lib/layout/grid/tng-grid.d.ts +144 -2
- package/src/lib/layout/grid/tng-grid.d.ts.map +1 -1
- package/src/lib/layout/grid/tng-grid.js +669 -2
- package/src/lib/layout/grid/tng-grid.js.map +1 -1
- package/src/lib/layout/tree/__tests__/tng-tree.test-harness.d.ts.map +1 -1
- package/src/lib/layout/tree/__tests__/tng-tree.test-harness.js +0 -1
- package/src/lib/layout/tree/__tests__/tng-tree.test-harness.js.map +1 -1
- package/src/lib/navigation/tabs/tng-tabs.d.ts +13 -6
- package/src/lib/navigation/tabs/tng-tabs.d.ts.map +1 -1
- package/src/lib/navigation/tabs/tng-tabs.js +77 -35
- 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,
|
|
1
|
+
{"version":3,"file":"tng-tree.test-harness.d.ts","sourceRoot":"","sources":["../../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/tree/__tests__/tng-tree.test-harness.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,gBAAgB,EAAW,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,KAAK,kBAAkB,EAAwD,KAAK,oBAAoB,EAAE,KAAK,YAAY,EAAE,MAAM,UAAU,CAAC;;AAEvJ,qBA6Ca,uBAAuB;IAClC,SAAgB,YAAY,EAAE,KAAK,CAAC,YAAY,GAAG,SAAS,YAAY,EAAE,GAAG,IAAI,CAAC,CAAM;IACjF,YAAY,EAAE,YAAY,GAAG,SAAS,YAAY,EAAE,GAAG,IAAI,GAAG,SAAS,CAAa;IACpF,WAAW,EAAE,kBAAkB,CAAc;IAC7C,YAAY,UAAS;IACrB,aAAa,EAAE,oBAAoB,CAAU;IAC7C,KAAK,EAAE,YAAY,GAAG,SAAS,YAAY,EAAE,GAAG,IAAI,GAAG,SAAS,CAAa;IAE7E,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,SAAS,YAAY,EAAE,GAAG,IAAI,GAAG,IAAI;IAIzE,iBAAiB,IAAI,IAAI;yCAZrB,uBAAuB;2CAAvB,uBAAuB;CAenC;AAED,KAAK,uBAAuB,GAAG,OAAO,CACpC,IAAI,CACF,uBAAuB,EACvB,cAAc,GAAG,aAAa,GAAG,cAAc,GAAG,eAAe,GAAG,OAAO,CAC5E,CACF,CAAC;AAEF,wBAAgB,wBAAwB,CACtC,YAAY,GAAE,uBAA4B,GACzC,gBAAgB,CAAC,uBAAuB,CAAC,CAQ3C;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,gBAAgB,CAAC,uBAAuB,CAAC,GAAG,WAAW,CAM3F;AAED,wBAAgB,OAAO,CACrB,OAAO,EAAE,gBAAgB,CAAC,uBAAuB,CAAC,EAClD,EAAE,EAAE,MAAM,GACT,WAAW,CAMb;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,UAAU,CAI7D;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,IAAI,CAAC,iBAAiB,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAM,GACnF,aAAa,CASf"}
|
|
@@ -62,7 +62,6 @@ export class TngTreeHarnessComponent {
|
|
|
62
62
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngTreeHarnessComponent, decorators: [{
|
|
63
63
|
type: Component,
|
|
64
64
|
args: [{
|
|
65
|
-
standalone: true,
|
|
66
65
|
imports: [TngTree, TngTreeItem, TngTreeGroup, TngTreeIndicator],
|
|
67
66
|
template: `
|
|
68
67
|
<button data-testid="before" type="button">Before</button>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-tree.test-harness.js","sourceRoot":"","sources":["../../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/tree/__tests__/tng-tree.test-harness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAyB,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAA2B,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAgD,MAAM,UAAU,CAAC;;
|
|
1
|
+
{"version":3,"file":"tng-tree.test-harness.js","sourceRoot":"","sources":["../../../../../../../../../libs/tailng-ui/primitives/src/lib/layout/tree/__tests__/tng-tree.test-harness.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component } from '@angular/core';\nimport { type ComponentFixture, TestBed } from '@angular/core/testing';\nimport { type TngTreeOrientation, TngTree, TngTreeGroup, TngTreeIndicator, TngTreeItem, type TngTreeSelectionMode, type TngTreeValue } from '../index';\n\n@Component({\n imports: [TngTree, TngTreeItem, TngTreeGroup, TngTreeIndicator],\n template: `\n <button data-testid=\"before\" type=\"button\">Before</button>\n\n <div\n data-testid=\"tree\"\n tngTree\n [defaultValue]=\"defaultValue\"\n [orientation]=\"orientation\"\n [selectionMode]=\"selectionMode\"\n [value]=\"value\"\n (valueChange)=\"onValueChange($event)\"\n >\n <div\n tngTreeItem\n [defaultExpanded]=\"rootExpanded\"\n [value]=\"'root-a'\"\n aria-label=\"Alpha\"\n id=\"root-a\"\n >\n <span tngTreeIndicator aria-hidden=\"true\">▶</span>\n Root A\n\n <div tngTreeGroup>\n <div tngTreeItem [value]=\"'a-1'\" aria-label=\"Able\" id=\"a-1\">A-1</div>\n <div\n tngTreeItem\n [disabled]=\"true\"\n [value]=\"'a-2'\"\n aria-label=\"Beta Disabled\"\n id=\"a-2\"\n >\n A-2 Disabled\n </div>\n <div tngTreeItem [value]=\"'a-3'\" aria-label=\"Charlie\" id=\"a-3\">A-3</div>\n </div>\n </div>\n\n <div tngTreeItem [value]=\"'root-b'\" aria-label=\"Beta\" id=\"root-b\">Root B</div>\n </div>\n\n <button data-testid=\"after\" type=\"button\">After</button>\n `,\n})\nexport class TngTreeHarnessComponent {\n public readonly valueChanges: Array<TngTreeValue | readonly TngTreeValue[] | null> = [];\n public defaultValue: TngTreeValue | readonly TngTreeValue[] | null | undefined = undefined;\n public orientation: TngTreeOrientation = 'vertical';\n public rootExpanded = false;\n public selectionMode: TngTreeSelectionMode = 'none';\n public value: TngTreeValue | readonly TngTreeValue[] | null | undefined = undefined;\n\n public onValueChange(value: TngTreeValue | readonly TngTreeValue[] | null): void {\n this.valueChanges.push(value);\n }\n\n public resetValueChanges(): void {\n this.valueChanges.length = 0;\n }\n}\n\ntype TreeHarnessInitialState = Partial<\n Pick<\n TngTreeHarnessComponent,\n 'defaultValue' | 'orientation' | 'rootExpanded' | 'selectionMode' | 'value'\n >\n>;\n\nexport function createTreeHarnessFixture(\n initialState: TreeHarnessInitialState = {},\n): ComponentFixture<TngTreeHarnessComponent> {\n TestBed.configureTestingModule({\n imports: [TngTreeHarnessComponent],\n });\n const fixture = TestBed.createComponent(TngTreeHarnessComponent);\n Object.assign(fixture.componentInstance, initialState);\n fixture.detectChanges();\n return fixture;\n}\n\nexport function getTreeHost(fixture: ComponentFixture<TngTreeHarnessComponent>): HTMLElement {\n const tree = fixture.nativeElement.querySelector('[data-testid=\"tree\"]');\n if (!(tree instanceof HTMLElement)) {\n throw new Error('Expected tree host element.');\n }\n return tree;\n}\n\nexport function getItem(\n fixture: ComponentFixture<TngTreeHarnessComponent>,\n id: string,\n): HTMLElement {\n const element = fixture.nativeElement.querySelector(`#${id}`);\n if (!(element instanceof HTMLElement)) {\n throw new Error(`Expected tree item #${id}.`);\n }\n return element;\n}\n\nexport function clickElement(element: HTMLElement): MouseEvent {\n const event = new MouseEvent('click', { bubbles: true, cancelable: true });\n element.dispatchEvent(event);\n return event;\n}\n\nexport function dispatchKeydown(\n target: HTMLElement,\n key: string,\n options: Pick<KeyboardEventInit, 'shiftKey' | 'ctrlKey' | 'metaKey' | 'altKey'> = {},\n): KeyboardEvent {\n const event = new KeyboardEvent('keydown', {\n bubbles: true,\n cancelable: true,\n key,\n ...options,\n });\n target.dispatchEvent(event);\n return event;\n}\n"]}
|
|
@@ -1,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":"
|
|
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
|
|
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
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
597
|
-
this.uncontrolledValue
|
|
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(
|
|
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(
|
|
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" } : {}),
|
|
775
|
-
|
|
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" } : {}),
|
|
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" } : {}),
|
|
1141
|
-
|
|
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() {
|