@shival99/z-ui 1.9.13 → 1.9.14

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 (47) hide show
  1. package/fesm2022/shival99-z-ui-components-z-accordion.mjs +129 -12
  2. package/fesm2022/shival99-z-ui-components-z-accordion.mjs.map +1 -1
  3. package/fesm2022/shival99-z-ui-components-z-autocomplete.mjs +142 -8
  4. package/fesm2022/shival99-z-ui-components-z-autocomplete.mjs.map +1 -1
  5. package/fesm2022/shival99-z-ui-components-z-breadcrumb.mjs +65 -16
  6. package/fesm2022/shival99-z-ui-components-z-breadcrumb.mjs.map +1 -1
  7. package/fesm2022/shival99-z-ui-components-z-chat.mjs +18 -7
  8. package/fesm2022/shival99-z-ui-components-z-chat.mjs.map +1 -1
  9. package/fesm2022/shival99-z-ui-components-z-filter.mjs +1 -1
  10. package/fesm2022/shival99-z-ui-components-z-filter.mjs.map +1 -1
  11. package/fesm2022/shival99-z-ui-components-z-skeleton-auto.mjs +61 -0
  12. package/fesm2022/shival99-z-ui-components-z-skeleton-auto.mjs.map +1 -0
  13. package/fesm2022/shival99-z-ui-components-z-skeleton.mjs +13 -33
  14. package/fesm2022/shival99-z-ui-components-z-skeleton.mjs.map +1 -1
  15. package/fesm2022/shival99-z-ui-components-z-switch.mjs +16 -6
  16. package/fesm2022/shival99-z-ui-components-z-switch.mjs.map +1 -1
  17. package/fesm2022/shival99-z-ui-components-z-table.mjs +291 -24
  18. package/fesm2022/shival99-z-ui-components-z-table.mjs.map +1 -1
  19. package/fesm2022/shival99-z-ui-components-z-tabs.mjs +27 -2
  20. package/fesm2022/shival99-z-ui-components-z-tabs.mjs.map +1 -1
  21. package/fesm2022/shival99-z-ui-components-z-timeline.mjs +5 -3
  22. package/fesm2022/shival99-z-ui-components-z-timeline.mjs.map +1 -1
  23. package/fesm2022/shival99-z-ui-providers.mjs +1 -0
  24. package/fesm2022/shival99-z-ui-providers.mjs.map +1 -1
  25. package/fesm2022/shival99-z-ui-services.mjs +371 -179
  26. package/fesm2022/shival99-z-ui-services.mjs.map +1 -1
  27. package/fesm2022/shival99-z-ui-utils.mjs +6 -1
  28. package/fesm2022/shival99-z-ui-utils.mjs.map +1 -1
  29. package/package.json +5 -1
  30. package/types/shival99-z-ui-components-z-accordion.d.ts +22 -4
  31. package/types/shival99-z-ui-components-z-autocomplete.d.ts +34 -8
  32. package/types/shival99-z-ui-components-z-breadcrumb.d.ts +13 -3
  33. package/types/shival99-z-ui-components-z-calendar.d.ts +4 -4
  34. package/types/shival99-z-ui-components-z-chat.d.ts +1 -0
  35. package/types/shival99-z-ui-components-z-editor.d.ts +1 -1
  36. package/types/shival99-z-ui-components-z-modal.d.ts +1 -1
  37. package/types/shival99-z-ui-components-z-popover.d.ts +1 -1
  38. package/types/shival99-z-ui-components-z-select.d.ts +1 -1
  39. package/types/shival99-z-ui-components-z-skeleton-auto.d.ts +35 -0
  40. package/types/shival99-z-ui-components-z-skeleton.d.ts +3 -7
  41. package/types/shival99-z-ui-components-z-switch.d.ts +7 -1
  42. package/types/shival99-z-ui-components-z-table.d.ts +65 -7
  43. package/types/shival99-z-ui-components-z-tabs.d.ts +3 -3
  44. package/types/shival99-z-ui-components-z-timeline.d.ts +7 -1
  45. package/types/shival99-z-ui-components-z-upload.d.ts +3 -3
  46. package/types/shival99-z-ui-services.d.ts +18 -1
  47. package/types/shival99-z-ui-utils.d.ts +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"shival99-z-ui-components-z-table.mjs","sources":["../../../../libs/core-ui/components/z-table/z-table.types.ts","../../../../libs/core-ui/components/z-table/components/z-table-actions.component.ts","../../../../libs/core-ui/components/z-table/z-table.util.ts","../../../../libs/core-ui/components/z-table/components/z-table-edit-cell.component.ts","../../../../libs/core-ui/components/z-table/components/z-table-filter.component.ts","../../../../libs/core-ui/components/z-table/components/z-table-icon-text.component.ts","../../../../libs/core-ui/components/z-table/directives/z-table-row-hover.directive.ts","../../../../libs/core-ui/components/z-table/directives/z-table-resizer.directive.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-cell-bottom.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-cell-clickable.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-cell-config.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-cell-edit.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-cell-offset.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-cell-pin.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-cell-render.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-cell-visible.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-column-config.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-column-header.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-column-parents.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-footer-content.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-has-icon.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-pinning-styles.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-row.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-span.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-is-template-ref.pipe.ts","../../../../libs/core-ui/components/z-table/z-table.component.ts","../../../../libs/core-ui/components/z-table/z-table.component.html","../../../../libs/core-ui/components/z-table/shival99-z-ui-components-z-table.ts"],"sourcesContent":["/**\n * Z-Table Type Definitions\n *\n * Central type file for the z-table component. Contains:\n * - Default constants (row heights, sizing, debounce timers)\n * - Column configuration types (header, body, footer)\n * - Sort/filter/edit configuration interfaces\n * - Event contracts for parent-component communication\n * - Unified change event discriminated union\n * - Virtual scrolling configuration\n * - Settings persistence types\n * - TanStack Table module augmentation for custom table meta\n */\n/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable @typescript-eslint/naming-convention */\n/* eslint-disable unused-imports/no-unused-vars */\nimport { type TemplateRef, type Type } from '@angular/core';\nimport { type ZAutocompleteType, type ZAutocompleteOption } from '@shival99/z-ui/components/z-autocomplete';\nimport { type ZButtonVariants } from '@shival99/z-ui/components/z-button';\nimport { type ZIconVariants, type ZIcon } from '@shival99/z-ui/components/z-icon';\nimport { type ZInputSize } from '@shival99/z-ui/components/z-input';\nimport { type ZSelectOption } from '@shival99/z-ui/components/z-select';\nimport { type ZTooltipConfig, type ZTooltipContent } from '@shival99/z-ui/components/z-tooltip';\nimport {\n type CellContext,\n type ColumnFiltersState,\n type ColumnPinningState,\n type ExpandedState,\n type FlexRenderComponent,\n type HeaderContext,\n type PaginationState,\n type Row,\n type RowData,\n type RowPinningState,\n type RowSelectionState,\n type SortingState,\n type VisibilityState,\n} from '@tanstack/angular-table';\n\n// ─── Default Constants ───────────────────────────────────────────────────────\n\n/** Default row height in pixels for virtual scroll estimation */\nexport const Z_DEFAULT_ROW_HEIGHT = 40;\n/** How many extra rows to render outside the visible viewport (virtual scroll buffer) */\nexport const Z_DEFAULT_VIRTUAL_OVERSCAN = 5;\n/** Number of rows per virtual group — used for rowSpan grouping in virtual mode */\nexport const Z_DEFAULT_GROUP_SIZE = 1;\n/** Minimum column width in pixels; prevents columns from becoming too narrow */\nexport const Z_DEFAULT_COLUMN_MIN_SIZE = 100;\n/** Debounce delay (ms) for async state updates (filtering/sorting transitions) */\nexport const Z_DEFAULT_DEBOUNCE_TIME = 150;\n/** Row height used for skeleton loading placeholders */\nexport const Z_SKELETON_ROW_HEIGHT = 60;\n/** Width in pixels of each action button in the actions column */\nexport const Z_TABLE_DEFAULT_ACTION_BUTTON_WIDTH = 32;\n/** Max visible action buttons before overflow into dropdown */\nexport const Z_TABLE_DEFAULT_MAX_VISIBLE_ACTIONS = 3;\n/** Default size variant for the overflow dropdown trigger button */\nexport const Z_TABLE_DEFAULT_DROPDOWN_BUTTON_SIZE = 'sm' as const;\n\n// ─── Cell & Pin Types ────────────────────────────────────────────────────────\n\n/** Pin boundary properties used to apply shadow/border on pinned column edges */\nexport type ZTableCellPinProperty = 'isLastLeftPinned' | 'isFirstRightPinned' | 'isLastRightPinned';\n/** Distinguishes header vs footer cells for shared rendering logic */\nexport type ZTableCellType = 'header' | 'footer';\n/** All three cell render zones */\nexport type ZTableCellRenderType = 'header' | 'footer' | 'body';\n\n/** Resolved edit state for a specific cell — computed by the edit pipe */\nexport interface ZTableEditCellInfo {\n enabled: boolean;\n /** Base type for initial render — actual type may be dynamic per row via edit.type function */\n type: ZTableEditType;\n config: ZTableEditConfig<unknown> | null;\n}\n\n/** CSS styles applied to pinned cells for sticky positioning */\nexport interface ZPinningStyles {\n left?: string;\n right?: string;\n position: 'sticky' | 'relative';\n zIndex: number;\n [key: string]: string | number | undefined;\n}\n\n/**\n * A virtual group represents one or more consecutive rows that must be\n * rendered together (e.g. rows sharing a rowSpan). The virtualizer operates\n * on groups rather than individual rows to keep merged cells intact.\n */\nexport interface ZVirtualGroup {\n startIndex: number;\n endIndex: number;\n rowCount: number;\n /** null when dynamicSize is enabled — height is measured after render */\n height: number | null;\n}\n\n/** Parsed segment from the `[icon:name|size:16|class:text-red]` inline icon syntax */\nexport interface ZTableIconPart {\n type: 'text' | 'icon';\n value: string;\n size?: number;\n class?: string;\n strokeWidth?: number;\n}\n\nexport interface ZTableExtendedColumnDef {\n filterType?: ZTableFilterType;\n filterOptions?: ZSelectOption[];\n}\n\n// ─── Content & Mode Types ────────────────────────────────────────────────────\n\nexport type ZTableAlign = 'left' | 'center' | 'right';\nexport type ZTableBorderType = 'none' | 'full' | 'horizontal' | 'vertical';\n\n/**\n * Body cell content — supports static values, Angular templates/components,\n * or a function that receives the cell context and returns dynamic content.\n */\nexport type ZTableCellContent<T> =\n | string\n | number\n | TemplateRef<{ $implicit: CellContext<T, unknown> }>\n | Type<unknown>\n | FlexRenderComponent<unknown>\n | ((info: CellContext<T, unknown>) => string | number | TemplateRef<unknown> | FlexRenderComponent<unknown>);\n\n/** Header/footer cell content — similar to body but uses HeaderContext */\nexport type ZTableHeaderContent<T> =\n | string\n | TemplateRef<unknown>\n | Type<unknown>\n | (() => string)\n | ((info: HeaderContext<T, unknown>) => string);\n\n/** Alias for ZTableColumnConfig — kept for backward compatibility */\nexport type ZTableColumn<T = unknown> = ZTableColumnConfig<T>;\n\n/** Available column filter input types */\nexport type ZTableFilterType = 'text' | 'number' | 'select' | 'multi-select' | 'date' | 'date-range' | 'range' | 'tags';\n/** Available inline cell edit input types */\nexport type ZTableEditType =\n | 'text'\n | 'number'\n | 'select'\n | 'date'\n | 'checkbox'\n | 'textarea'\n | 'toggle'\n | 'autocomplete';\n/**\n * Table operation mode:\n * - 'local': data is fully client-side (sort/filter/paginate handled by TanStack)\n * - 'server': parent handles data fetching; table emits change events for server calls\n */\nexport type ZTableMode = 'local' | 'server';\n\n// ─── Sort / Filter / Edit Configuration ──────────────────────────────────────\n\n/** Per-column sort configuration; mode controls local vs server-side sorting */\nexport interface ZTableSortConfig<T> {\n enabled?: boolean;\n /** 'local' = TanStack sorts in-memory; 'server' = emits event for API call */\n mode?: ZTableMode;\n /** Custom key sent with server-side sort events (defaults to column id) */\n sortKey?: string;\n /** Custom comparator for local sorting */\n sortFn?: (rowA: Row<T>, rowB: Row<T>, columnId: string) => number;\n}\n\nexport type ZTableBuiltInFilterFn =\n | 'equalsString'\n | 'includesString'\n | 'includesStringSensitive'\n | 'arrIncludes'\n | 'arrIncludesAll'\n | 'arrIncludesSome'\n | 'equals'\n | 'weakEquals'\n | 'inNumberRange';\n\nexport type ZTableCustomFilterFn<T> = (\n row: Row<T>,\n columnId: string,\n filterValue: unknown,\n addMeta: (meta: unknown) => void\n) => boolean;\n\nexport interface ZTableFilterConfig<T = unknown> {\n enabled?: boolean;\n mode?: ZTableMode;\n type?: ZTableFilterType;\n options?: ZSelectOption[];\n allowClear?: boolean;\n placeholder?: string;\n filterFn?: ZTableBuiltInFilterFn | ZTableCustomFilterFn<T>;\n}\n\nexport type ZTableEditSize = 'sm' | 'default' | 'lg';\n\nexport interface ZTableEditConfig<T = unknown> {\n enabled?: boolean;\n /** Edit type - can be static or dynamic per row */\n type?: ZTableEditType | ((row: T) => ZTableEditType);\n /** Select options - can be static or dynamic per row */\n options?: ZSelectOption[] | ((row: T) => ZSelectOption[]);\n /** Placeholder - can be static or dynamic per row */\n placeholder?: string | ((row: T) => string);\n /** Allow clear for select input. Default: false */\n allowClear?: boolean;\n /**\n * Custom option label key when using raw objects as options.\n * Use this when your options don't have 'label' property.\n * Example: optionLabelKey: 'tagName' for { tagName: 'Value', tagId: 1 }\n */\n optionLabelKey?: string;\n /**\n * Custom option value key when using raw objects as options.\n * Use this when your options don't have 'value' property.\n * Example: optionValueKey: 'tagName' for { tagName: 'Value', tagId: 1 }\n */\n optionValueKey?: string;\n /**\n * CSS class to apply to the edit cell input/select/etc component\n */\n class?: string | ((row: T) => string);\n style?: Record<string, string> | ((row: T) => Record<string, string>);\n min?: number;\n max?: number;\n step?: number;\n rows?: number;\n thousandSeparator?: string;\n disabled?: boolean | ((row: T) => boolean);\n /** Readonly mode - input is visible but not editable */\n readonly?: boolean | ((row: T) => boolean);\n debounceTime?: number;\n /** Only emit change on blur (when user leaves the input). Default: false */\n blurEdit?: boolean;\n /** Size of the edit input. Default: 'sm' */\n size?: ZTableEditSize;\n /** Autocomplete type - default or addressbar */\n autocompleteType?: ZAutocompleteType;\n /** Autocomplete options - for autocomplete type */\n autocompleteOptions?: ZAutocompleteOption[] | ((row: T) => ZAutocompleteOption[]);\n /** Reset input after selecting an option in autocomplete. Default: false */\n autocompleteResetOnSelect?: boolean;\n /** Height of autocomplete dropdown in pixels. Default: 280 */\n autocompleteHeight?: number;\n /** Allow typing custom values when no options match. Default: false */\n autocompleteAllowCustomValue?: boolean;\n}\n\n// ─── Settings Persistence ────────────────────────────────────────────────────\n\n/** Minimal column info stored alongside saved config for cache invalidation */\nexport interface ZTableSavedColumnInfo {\n id: string;\n accessorKey?: string;\n}\n\n/**\n * Shape of the persisted table configuration (via ZCacheService).\n * Restored when a table with matching zKey re-mounts.\n * columnInfo is used to detect schema changes and invalidate stale caches.\n */\nexport interface ZTableSavedConfig {\n columnOrder: string[];\n columnSizing: Record<string, number>;\n columnPinning: { left?: string[]; right?: string[] };\n columnVisibility: Record<string, boolean>;\n columnInfo: ZTableSavedColumnInfo[];\n showHeaderFooterShadow: boolean;\n showHorizontalBorder: boolean;\n showVerticalBorder: boolean;\n}\n\n// ─── Control API ─────────────────────────────────────────────────────────────\n\n/**\n * Imperative control handle emitted via `zControl` output.\n * Allows parent components to programmatically manipulate table state\n * (add/update/delete items, reset filters, toggle settings, etc.).\n */\nexport interface ZTableControl<T> {\n updateConfig: (config: Partial<ZTableConfig<T>>) => void;\n toggleSettings: () => void;\n resetFilters: () => void;\n resetSorting: () => void;\n addItem: (item: T) => void;\n updateItem: (id: string | number, updates: Partial<T>, fieldKey?: keyof T) => void;\n deleteItem: (id: string | number, fieldKey?: keyof T) => void;\n getItems: () => T[];\n setColumnVisibility: (columnIds: string | string[], visible: boolean) => void;\n}\n\n// ─── Column Section Configs (Header / Body / Footer) ─────────────────────────\n\n/** Header cell configuration — applied to the <th> in the table header row */\nexport interface ZTableHeaderColumnConfig<T> {\n content?: ZTableHeaderContent<T>;\n class?: string;\n style?: Record<string, string>;\n align?: ZTableAlign;\n rowSpan?: number;\n colSpan?: number;\n /** Class applied to the inner content wrapper, not the <th> itself */\n contentClass?: string | ((info: HeaderContext<T, unknown>) => string);\n contentStyle?: Record<string, string> | ((info: HeaderContext<T, unknown>) => Record<string, string>);\n tooltip?: string | ZTooltipConfig;\n}\n\n/**\n * Body cell configuration — most properties accept a static value or\n * a function receiving CellContext for per-row dynamic behavior.\n */\nexport interface ZTableBodyColumnConfig<T> {\n content?: ZTableCellContent<T>;\n class?: string | ((info: CellContext<T, unknown>) => string);\n style?: Record<string, string> | ((info: CellContext<T, unknown>) => Record<string, string>);\n align?: ZTableAlign;\n /** Static rowSpan or function returning 0 to hide the cell (merged into neighbor) */\n rowSpan?: number | ((info: CellContext<T, unknown>) => number);\n colSpan?: number | ((info: CellContext<T, unknown>) => number);\n contentClass?: string | ((info: CellContext<T, unknown>) => string);\n contentStyle?: Record<string, string> | ((info: CellContext<T, unknown>) => Record<string, string>);\n tooltip?: string | ZTooltipConfig | ((info: CellContext<T, unknown>) => string | ZTooltipConfig);\n /** Action buttons rendered inside this cell */\n actions?: ZTableActionColumnConfig<T>;\n /** When true, clicking the cell emits a cellClick event */\n enabledClick?: boolean;\n /** Enable inline editing — true uses defaults, or pass full config */\n edit?: ZTableEditConfig<T> | boolean;\n /** Control cell content visibility. When false, the cell is rendered but content is hidden. */\n visible?: boolean | ((info: CellContext<T, unknown>) => boolean);\n}\n\nexport interface ZTableFooterColumnConfig<T> {\n content?: ZTableHeaderContent<T>;\n class?: string;\n style?: Record<string, string>;\n align?: ZTableAlign;\n rowSpan?: number;\n colSpan?: number;\n contentClass?: string | ((info: HeaderContext<T, unknown>) => string);\n contentStyle?: Record<string, string> | ((info: HeaderContext<T, unknown>) => Record<string, string>);\n tooltip?: string | ZTooltipConfig;\n}\n\n// ─── Main Column Config ──────────────────────────────────────────────────────\n\n/**\n * Primary column definition — the consumer-facing API.\n * Converted to TanStack ColumnDef internally via `columnConfigToColumnDef()`.\n *\n * Shorthand: header/body/footer accept either a full config object or\n * just the content directly (string/template/function).\n *\n * Nested columns: use `columns` for multi-level header groups.\n */\nexport interface ZTableColumnConfig<T> {\n /** Unique column identifier — must be stable across re-renders */\n id: string;\n /** Pre-filter visibility — unlike columnVisibility, this removes the column entirely */\n visible?: boolean | (() => boolean);\n /** Object property key for simple accessor — mutually exclusive with accessorFn */\n accessorKey?: keyof T & string;\n /** Custom accessor function for derived/computed cell values */\n accessorFn?: (row: T) => unknown;\n header?: ZTableHeaderColumnConfig<T> | ZTableHeaderContent<T>;\n body?: ZTableBodyColumnConfig<T> | ZTableCellContent<T>;\n footer?: ZTableFooterColumnConfig<T> | ZTableHeaderContent<T>;\n size?: number;\n minSize?: number;\n maxSize?: number;\n width?: string;\n /** true = local sort with defaults; object = full config */\n sort?: ZTableSortConfig<T> | boolean;\n /** true = local filter with defaults; object = full config */\n filter?: ZTableFilterConfig<T> | boolean;\n enableResizing?: boolean;\n enablePinning?: boolean;\n enableHiding?: boolean;\n enableOrdering?: boolean;\n /** Initial pin position — applied on first render */\n pinned?: 'left' | 'right' | false;\n /** Child columns for multi-level header grouping */\n columns?: ZTableColumnConfig<T>[];\n}\n\nexport interface ZTablePaginationConfig {\n enabled?: boolean;\n pageSize?: number;\n pageIndex?: number;\n pageSizeOptions?: number[];\n showSizeChanger?: boolean;\n showQuickJumper?: boolean;\n showTotal?: boolean;\n totalLabel?: string;\n disabled?: boolean;\n}\n\n// ─── Event Contracts ─────────────────────────────────────────────────────────\n\n/** Distinguishes user-triggered vs programmatic pagination changes */\nexport type ZTableEmitType = 'user' | 'auto';\n\nexport interface ZTablePageChangeEvent {\n pageIndex: number;\n pageSize: number;\n emitType: ZTableEmitType;\n}\n\nexport interface ZTableRowSelectEvent<T> {\n row: T;\n rowId: string;\n selected: boolean;\n selectedRows: T[];\n selectedRowIds: string[];\n}\n\nexport interface ZTableRowSelectAllEvent<T> {\n selected: boolean;\n selectedRows: T[];\n selectedRowIds: string[];\n}\n\nexport interface ZTableRowExpandEvent<T> {\n row: T;\n rowId: string;\n expanded: boolean;\n}\n\nexport interface ZTableCellClickEvent<T> {\n row: T;\n rowId: string;\n columnId: string;\n value: unknown;\n}\n\nexport interface ZTableCellEditEvent<T> {\n row: T;\n rowId: string;\n rowIndex: number;\n columnId: string;\n oldValue: unknown;\n newValue: unknown;\n}\n\nexport interface ZTableSortChangeEvent {\n sorting: SortingState;\n}\n\nexport interface ZTableFilterChangeEvent {\n filters: ColumnFiltersState;\n search: string;\n}\n\nexport interface ZTableSearchChangeEvent {\n search: string;\n filters: ColumnFiltersState;\n sorting: SortingState;\n pagination: PaginationState;\n}\n\nexport interface ZActionTooltipState {\n content: ZTooltipContent;\n alwaysShow: boolean;\n position?: string;\n arrow?: boolean;\n offset?: number;\n maxWidth?: string;\n}\n\nexport interface ZTableActionItem<T = unknown> {\n key: string;\n label?: string;\n icon?: ZIcon;\n iconSize?: ZIconVariants['zSize'];\n tooltip?: string | ZTooltipConfig;\n type?: ZButtonVariants['zType'];\n size?: ZButtonVariants['zSize'];\n class?: string;\n disabled?: boolean | ((row: T) => boolean);\n hidden?: boolean | ((row: T) => boolean);\n divide?: 'before' | 'after';\n}\n\nexport interface ZTableActionClickEvent<T = unknown> {\n key: string;\n row: T;\n rowId: string;\n action: ZTableActionItem<T>;\n}\n\nexport interface ZTableActionColumnConfig<T = unknown> {\n /** Actions - static array or function that returns array based on row data */\n actions: ZTableActionItem<T>[] | ((row: T) => ZTableActionItem<T>[]);\n maxVisible?: number;\n}\n\n// ─── Discriminated Union Change Event ────────────────────────────────────────\n\n/** All possible change event types — used as discriminant in ZTableChangeEvent */\nexport type ZTableChangeType =\n | 'page'\n | 'sort'\n | 'filter'\n | 'search'\n | 'select'\n | 'expand'\n | 'rowSelect'\n | 'rowSelectAll'\n | 'rowExpand'\n | 'cellClick'\n | 'cellEdit'\n | 'action';\n\nexport interface ZTableChangeEventBase {\n type: ZTableChangeType;\n}\n\nexport interface ZTablePageChange extends ZTableChangeEventBase {\n type: 'page';\n data: ZTablePageChangeEvent;\n}\n\nexport interface ZTableSortChange extends ZTableChangeEventBase {\n type: 'sort';\n data: ZTableSortChangeEvent;\n}\n\nexport interface ZTableFilterChange extends ZTableChangeEventBase {\n type: 'filter';\n data: ZTableFilterChangeEvent;\n}\n\nexport interface ZTableRowSelectChange<T> extends ZTableChangeEventBase {\n type: 'rowSelect';\n data: ZTableRowSelectEvent<T>;\n}\n\nexport interface ZTableRowSelectAllChange<T> extends ZTableChangeEventBase {\n type: 'rowSelectAll';\n data: ZTableRowSelectAllEvent<T>;\n}\n\nexport interface ZTableRowExpandChange<T> extends ZTableChangeEventBase {\n type: 'rowExpand';\n data: ZTableRowExpandEvent<T>;\n}\n\nexport interface ZTableCellClickChange<T> extends ZTableChangeEventBase {\n type: 'cellClick';\n data: ZTableCellClickEvent<T>;\n}\n\nexport interface ZTableSearchChange extends ZTableChangeEventBase {\n type: 'search';\n data: ZTableSearchChangeEvent;\n}\n\nexport interface ZTableSelectChange extends ZTableChangeEventBase {\n type: 'select';\n data: { selection: RowSelectionState };\n}\n\nexport interface ZTableExpandChange extends ZTableChangeEventBase {\n type: 'expand';\n data: { expanded: ExpandedState };\n}\n\nexport interface ZTableActionChange<T> extends ZTableChangeEventBase {\n type: 'action';\n data: ZTableActionClickEvent<T>;\n}\n\nexport interface ZTableCellEditChange<T> extends ZTableChangeEventBase {\n type: 'cellEdit';\n data: ZTableCellEditEvent<T>;\n}\n\n/**\n * Unified change event emitted via `zChange` output.\n * Parent components can use `event.type` to narrow the discriminated union.\n *\n * Example:\n * ```ts\n * onTableChange(event: ZTableChangeEvent<MyRow>) {\n * if (event.type === 'page') {\n * // event.data is ZTablePageChangeEvent\n * }\n * }\n * ```\n */\nexport type ZTableChangeEvent<T> =\n | ZTablePageChange\n | ZTableSortChange\n | ZTableFilterChange\n | ZTableSearchChange\n | ZTableSelectChange\n | ZTableExpandChange\n | ZTableRowSelectChange<T>\n | ZTableRowSelectAllChange<T>\n | ZTableRowExpandChange<T>\n | ZTableCellClickChange<T>\n | ZTableCellEditChange<T>\n | ZTableActionChange<T>;\n\n/** Initial table state — applied on first render, before any cached config is loaded */\nexport interface ZTableInitialState {\n columnPinning?: ColumnPinningState;\n rowPinning?: RowPinningState;\n sorting?: SortingState;\n columnFilters?: ColumnFiltersState;\n globalFilter?: string;\n expanded?: ExpandedState;\n rowSelection?: RowSelectionState;\n columnVisibility?: VisibilityState;\n pagination?: PaginationState;\n}\n\nexport interface ZTableVirtualConfig {\n /** Enable virtual scrolling */\n enabled: boolean;\n /** Row height in pixels (default: 40). Used as estimate for dynamic sizing. */\n size?: number;\n /** Number of items to render outside visible area (default: 5) */\n overscan?: number;\n /** Number of rows per virtual group (default: 1) */\n groupSize?: number;\n /**\n * Enable dynamic row height measurement.\n * When true, each row's height is measured dynamically after render.\n * The virtualizer uses `height: auto` for all rows, allowing content\n * to determine the actual height, which is then captured via measureElement().\n * The `size` property is used as an initial estimate before measurement.\n */\n dynamicSize?: boolean;\n\n /**\n * Initial scroll offset in pixels.\n * Useful for restoring scroll position or starting at a specific offset.\n * @default 0\n */\n initialOffset?: number | (() => number);\n\n /**\n * The margin (in pixels) to apply to the start of the virtualizer.\n * Useful when the virtualizer is not at the top of the scroll container.\n * @default 0\n */\n scrollMargin?: number;\n\n /**\n * Gap between items in pixels.\n * Use this instead of CSS gap for proper virtual scroll calculations.\n * @default 0\n */\n gap?: number;\n\n /**\n * Delay in milliseconds before resetting isScrolling state.\n * @default 150\n */\n isScrollingResetDelay?: number;\n\n /**\n * Use native scrollend event instead of debounced scroll detection.\n * Better performance on browsers that support it.\n * @default true (if browser supports it)\n */\n useScrollendEvent?: boolean;\n\n /**\n * Custom function to generate unique keys for each item.\n * Useful for stable item identity across data updates.\n */\n getItemKey?: (index: number) => string | number;\n\n /**\n * Custom range extractor function.\n * Use to customize which items are rendered (e.g., for sticky headers).\n */\n rangeExtractor?: (range: { startIndex: number; endIndex: number }) => number[];\n}\n\nexport interface ZTableSearchConfig {\n enabled?: boolean;\n placeholder?: string;\n debounceTime?: number;\n width?: string;\n size?: ZInputSize;\n}\n\n// ─── Main Table Config ───────────────────────────────────────────────────────\n\n/**\n * Top-level configuration passed via `[zConfig]` input.\n * This is the primary API surface for consumers of z-table.\n */\nexport interface ZTableConfig<T> {\n /** 'local' = client-side operations; 'server' = parent handles data fetching */\n mode?: ZTableMode;\n /** Row data array — for server mode, this is the current page's data */\n data: T[];\n /** Total row count for server-side pagination (aliased as totalRows) */\n totalCount?: number;\n /** Column definitions */\n columns: ZTableColumnConfig<T>[];\n /** Custom row ID generator — critical for selection/expansion state stability */\n getRowId?: (row: T, index: number, parent: T | undefined, data: T[]) => string;\n /** Sub-row accessor for tree/hierarchical data */\n getSubRows?: (row: T, index: number, parent: T | undefined, data: T[]) => T[] | undefined;\n /** @deprecated Use totalCount instead */\n totalRows?: number;\n /** true = enable with defaults; object = full virtual scroll config */\n virtual?: ZTableVirtualConfig | boolean;\n showHorizontalBorder?: boolean;\n showVerticalBorder?: boolean;\n showHeaderShadow?: boolean;\n showFooterShadow?: boolean;\n /** Show the settings drawer toggle button */\n enableSettings?: boolean;\n enableColumnResizing?: boolean;\n /** When true, shift-click sorting is simulated automatically */\n enableMultiSort?: boolean;\n /** true = enable with defaults; object = full search bar config */\n search?: ZTableSearchConfig | boolean;\n enableRowPinning?: boolean;\n enableColumnPinning?: boolean;\n enableColumnOrdering?: boolean;\n enableColumnSorting?: boolean;\n pagination?: ZTablePaginationConfig;\n initialState?: ZTableInitialState;\n loading?: boolean;\n /** Template rendered when a row is expanded */\n expandedRowTemplate?: TemplateRef<{ $implicit: Row<T> }>;\n /** Template rendered when no data matches */\n emptyTemplate?: TemplateRef<void>;\n /** Template rendered during loading state */\n loadingTemplate?: TemplateRef<void>;\n getRowCanExpand?: (row: Row<T>) => boolean;\n maxHeight?: string;\n minHeight?: string;\n /** Debounce time (ms) for async state updates; defaults to Z_DEFAULT_DEBOUNCE_TIME */\n debounceTime?: number;\n /** Use skeleton rows instead of loading spinner */\n useSkeleton?: boolean;\n}\n\nexport interface ZTableEditCellChangeEvent<T = unknown> {\n row: T;\n rowId: string;\n rowIndex: number;\n columnId: string;\n oldValue: unknown;\n newValue: unknown;\n}\n\nexport interface ZResolvedEditConfig {\n type: ZTableEditType;\n size: ZTableEditSize;\n placeholder: string;\n allowClear: boolean;\n class: string;\n style: Record<string, string>;\n disabled: boolean;\n readonly: boolean;\n}\n\n// ─── TanStack Module Augmentation ────────────────────────────────────────────\n\n/**\n * Extends TanStack's TableMeta to add a custom `updateData` callback.\n * This is used by inline edit cells to notify the table of value changes.\n */\ndeclare module '@tanstack/angular-table' {\n interface TableMeta<TData extends RowData> {\n updateData?: (rowIndex: number, columnId: string, value: unknown) => void;\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { ZButtonComponent, ZButtonVariants } from '@shival99/z-ui/components/z-button';\nimport { ZDropdownMenuComponent } from '@shival99/z-ui/components/z-dropdown-menu';\nimport type { ZDropdownMenuItem } from '@shival99/z-ui/components/z-dropdown-menu';\nimport { ZIconComponent } from '@shival99/z-ui/components/z-icon';\nimport { ZTooltipDirective, ZTooltipConfig } from '@shival99/z-ui/components/z-tooltip';\nimport {\n Z_TABLE_DEFAULT_DROPDOWN_BUTTON_SIZE,\n Z_TABLE_DEFAULT_MAX_VISIBLE_ACTIONS,\n ZActionTooltipState,\n ZTableActionClickEvent,\n ZTableActionColumnConfig,\n ZTableActionItem,\n} from '../z-table.types';\n\n@Component({\n selector: 'z-table-actions',\n imports: [ZButtonComponent, ZIconComponent, ZTooltipDirective, ZDropdownMenuComponent],\n standalone: true,\n template: `\n <div class=\"z-table-actions flex items-center justify-center gap-1\">\n @if (shouldShowAsButtons()) {\n @for (action of allActions(); track action.key) {\n @if (actionStates()[action.key]?.visible) {\n <button\n type=\"button\"\n z-button\n z-tooltip\n [zType]=\"action.type ?? 'outline'\"\n [zSize]=\"action.size ?? 'sm'\"\n [zDisabled]=\"actionStates()[action.key]?.disabled ?? false\"\n [class]=\"action.class ?? ''\"\n [zContent]=\"actionStates()[action.key]?.tooltipState?.content ?? ''\"\n [zAlwaysShow]=\"actionStates()[action.key]?.tooltipState?.alwaysShow ?? false\"\n [zArrow]=\"actionStates()[action.key]?.tooltipState?.arrow ?? true\"\n [zOffset]=\"actionStates()[action.key]?.tooltipState?.offset ?? 8\"\n [zMaxWidth]=\"actionStates()[action.key]?.tooltipState?.maxWidth ?? '250px'\"\n (click)=\"_onActionClick(action, $event)\"\n >\n @if (action.icon && action.label) {\n <div class=\"flex items-center gap-2\">\n <z-icon [zType]=\"action.icon\" zSize=\"14\" />\n {{ action.label }}\n </div>\n } @else if (action.icon) {\n <z-icon [zType]=\"action.icon\" zSize=\"14\" />\n } @else if (action.label) {\n {{ action.label }}\n }\n </button>\n }\n }\n } @else {\n <z-dropdown-menu\n [zItems]=\"dropdownItems()\"\n zPosition=\"bottom-right\"\n [zButtonSize]=\"zDropdownButtonSize()\"\n [zMinWidth]=\"160\"\n (zOnItemClick)=\"_onDropdownItemClick($event)\"\n >\n <button\n type=\"button\"\n z-button\n zTypeIcon=\"lucideEllipsis\"\n [zSize]=\"zDropdownButtonSize()\"\n zType=\"outline\"\n [zWave]=\"false\"\n ></button>\n </z-dropdown-menu>\n }\n </div>\n `,\n styles: `\n :host {\n display: block;\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ZTableActionsComponent<T = unknown> {\n public readonly zConfig = input.required<ZTableActionColumnConfig<T>>();\n public readonly zRow = input.required<T>();\n public readonly zRowId = input.required<string>();\n public readonly zDropdownButtonSize = input<ZButtonVariants['zSize']>(Z_TABLE_DEFAULT_DROPDOWN_BUTTON_SIZE);\n public readonly zActionClick = output<ZTableActionClickEvent<T>>();\n\n protected readonly allActions = computed(() => {\n const config = this.zConfig();\n const row = this.zRow();\n const { actions } = config;\n\n const resolvedActions = typeof actions === 'function' ? actions(row) : actions;\n return resolvedActions.filter(action => {\n if (typeof action.hidden === 'function') {\n return !action.hidden(row);\n }\n return !action.hidden;\n });\n });\n\n protected readonly shouldShowAsButtons = computed(() => {\n const actions = this.allActions();\n const maxVisible = this.zConfig().maxVisible ?? Z_TABLE_DEFAULT_MAX_VISIBLE_ACTIONS;\n return actions.length <= maxVisible;\n });\n\n protected readonly actionStates = computed(() => {\n const row = this.zRow();\n const actions = this.allActions();\n const states: Record<string, { visible: boolean; disabled: boolean; tooltipState: ZActionTooltipState }> = {};\n\n for (const action of actions) {\n const isHidden = typeof action.hidden === 'function' ? action.hidden(row) : (action.hidden ?? false);\n const isDisabled = typeof action.disabled === 'function' ? action.disabled(row) : (action.disabled ?? false);\n\n states[action.key] = {\n visible: !isHidden,\n disabled: isDisabled,\n tooltipState: this._getTooltipState(action.tooltip),\n };\n }\n\n return states;\n });\n\n protected readonly dropdownItems = computed((): ZDropdownMenuItem[] => {\n const row = this.zRow();\n return this.allActions().map(action => {\n const isDisabled = typeof action.disabled === 'function' ? action.disabled(row) : (action.disabled ?? false);\n return {\n label: action.label ?? action.key,\n icon: action.icon,\n iconSize: action?.iconSize || '18',\n disabled: isDisabled,\n class: action.class,\n divide: action.divide,\n onClick: () => this._emitActionClick(action),\n };\n });\n });\n\n private _getTooltipState(tooltip: string | ZTooltipConfig | undefined): ZActionTooltipState {\n if (!tooltip) {\n return { content: '', alwaysShow: false };\n }\n\n if (typeof tooltip === 'string') {\n return { content: tooltip, alwaysShow: true };\n }\n\n return {\n content: tooltip.content ?? '',\n alwaysShow: tooltip.alwaysShow ?? true,\n position: tooltip.position,\n arrow: tooltip.arrow,\n offset: tooltip.offset,\n maxWidth: tooltip.maxWidth,\n };\n }\n\n protected _onActionClick(action: ZTableActionItem<T>, event: Event): void {\n event.stopPropagation();\n const states = this.actionStates();\n if (states[action.key]?.disabled) {\n return;\n }\n this._emitActionClick(action);\n }\n\n protected _onDropdownItemClick(item: ZDropdownMenuItem): void {\n const action = this.allActions().find(a => (a.label ?? a.key) === item.label);\n if (action) {\n this._emitActionClick(action);\n }\n }\n\n private _emitActionClick(action: ZTableActionItem<T>): void {\n this.zActionClick.emit({\n key: action.key,\n row: this.zRow(),\n rowId: this.zRowId(),\n action,\n });\n }\n}\n","/**\n * Z-Table Utility Functions\n *\n * Pure helper functions used by the z-table component and its pipes.\n * Organized into sections:\n * - Column visibility filtering\n * - Config type guards & extractors (header/body/footer)\n * - Icon syntax parsing ([icon:name|size:16|class:cls])\n * - Column lookup\n * - Span calculation (rowSpan/colSpan for header, body, footer)\n * - Render-skip logic (which cells to hide when another cell spans over them)\n * - Column config -> TanStack ColumnDef conversion\n * - Generic utility helpers\n */\nimport type { ZSelectOption } from '@shival99/z-ui/components/z-select';\nimport { type Header, type ColumnDef, type CellContext, type Cell, type Row } from '@tanstack/angular-table';\nimport {\n type ZTableColumnConfig,\n type ZTableFilterType,\n type ZTableHeaderContent,\n type ZTableCellContent,\n type ZTableIconPart,\n type ZTableHeaderColumnConfig,\n type ZTableBodyColumnConfig,\n type ZTableFooterColumnConfig,\n type ZTableCellType,\n Z_DEFAULT_COLUMN_MIN_SIZE,\n} from './z-table.types';\n\n// ─── Column Visibility Pre-filter ────────────────────────────────────────────\n\n/**\n * Recursively filters columns based on their `visible` property.\n * This runs BEFORE TanStack table creation — columns excluded here\n * won't generate ColumnDef entries at all (unlike columnVisibility state\n * which hides columns but keeps them in the column model).\n */\nexport const filterVisibleColumns = <T>(columns: ZTableColumnConfig<T>[]): ZTableColumnConfig<T>[] =>\n columns\n .filter(col => {\n const { visible } = col;\n if (visible === undefined) {\n return true;\n }\n return typeof visible === 'function' ? visible() : visible;\n })\n .map(col => {\n if (col.columns && col.columns.length > 0) {\n return {\n ...col,\n columns: filterVisibleColumns(col.columns),\n };\n }\n return col;\n });\n\n// ─── Config Type Guards ──────────────────────────────────────────────────────\n\n/**\n * Checks if a config value is a plain object (config struct) vs a primitive/template.\n * Used to distinguish shorthand content (string/TemplateRef) from full config objects\n * like ZTableHeaderColumnConfig, ZTableBodyColumnConfig, etc.\n */\nconst isObjectConfig = (config: unknown): boolean => {\n if (!config || typeof config !== 'object') {\n return false;\n }\n return config.constructor === Object;\n};\n\n/** Type guard: is this a full header config object (not just content shorthand)? */\nexport const isHeaderConfig = <T>(\n config: ZTableHeaderColumnConfig<T> | ZTableHeaderContent<T> | undefined\n): config is ZTableHeaderColumnConfig<T> => isObjectConfig(config);\n\n/** Type guard: is this a full body config object (not just content shorthand)? */\nexport const isBodyConfig = <T>(\n config: ZTableBodyColumnConfig<T> | ZTableCellContent<T> | undefined\n): config is ZTableBodyColumnConfig<T> => isObjectConfig(config);\n\n/** Type guard: is this a full footer config object (not just content shorthand)? */\nexport const isFooterConfig = <T>(\n config: ZTableFooterColumnConfig<T> | ZTableHeaderContent<T> | undefined\n): config is ZTableFooterColumnConfig<T> => isObjectConfig(config);\n\n// ─── Config Extractors ───────────────────────────────────────────────────────\n\n/**\n * Internal helper that normalizes header/footer config into a consistent shape.\n * Handles both shorthand (just content) and full config objects.\n */\nconst getHeaderOrFooterConfigInternal = <T>(col: ZTableColumnConfig<T> | undefined, type: 'header' | 'footer') => {\n const empty = {\n content: undefined as ZTableHeaderContent<T> | undefined,\n class: undefined as string | undefined,\n style: undefined as Record<string, string> | undefined,\n align: undefined as string | undefined,\n tooltip: undefined as string | object | undefined,\n rowSpan: undefined as number | undefined,\n colSpan: undefined as number | undefined,\n contentClass: undefined as string | ((info: unknown) => string) | undefined,\n contentStyle: undefined as Record<string, string> | ((info: unknown) => Record<string, string>) | undefined,\n };\n\n if (!col) {\n return empty;\n }\n\n const config = type === 'header' ? col.header : col.footer;\n const isConfigFn = type === 'header' ? isHeaderConfig : isFooterConfig;\n\n if (!isConfigFn(config)) {\n return { ...empty, content: config as ZTableHeaderContent<T> | undefined };\n }\n\n const typedConfig = config as ZTableHeaderColumnConfig<T> | ZTableFooterColumnConfig<T>;\n\n return {\n content: typedConfig.content,\n class: typedConfig.class,\n style: typedConfig.style,\n align: typedConfig.align,\n tooltip: typedConfig.tooltip,\n rowSpan: typedConfig.rowSpan,\n colSpan: typedConfig.colSpan,\n contentClass: typedConfig.contentClass,\n contentStyle: typedConfig.contentStyle,\n };\n};\n\n/** Extract and normalize header config from a column definition */\nexport const getHeaderConfig = <T>(col: ZTableColumnConfig<T> | undefined) =>\n getHeaderOrFooterConfigInternal(col, 'header');\n\n/**\n * Extract and normalize body config from a column definition.\n * Resolves dynamic properties (class, style, rowSpan, etc.) when CellContext is provided.\n */\nexport const getBodyConfig = <T>(col: ZTableColumnConfig<T> | undefined, ctx?: CellContext<T, unknown>) => {\n const empty = {\n content: undefined as ZTableCellContent<T> | undefined,\n class: undefined as string | undefined,\n style: undefined as Record<string, string> | undefined,\n align: undefined as string | undefined,\n rowSpan: undefined as number | undefined,\n colSpan: undefined as number | undefined,\n contentClass: undefined as string | undefined,\n contentStyle: undefined as Record<string, string> | undefined,\n tooltip: undefined as string | object | undefined,\n };\n\n if (!col) {\n return empty;\n }\n\n if (!isBodyConfig(col.body)) {\n return { ...empty, content: col.body };\n }\n\n const { body } = col;\n const rowSpan = typeof body.rowSpan === 'function' && ctx ? body.rowSpan(ctx) : body.rowSpan;\n const colSpan = typeof body.colSpan === 'function' && ctx ? body.colSpan(ctx) : body.colSpan;\n const classValue = typeof body.class === 'function' && ctx ? body.class(ctx) : body.class;\n const styleValue = typeof body.style === 'function' && ctx ? body.style(ctx) : body.style;\n const contentClass = typeof body.contentClass === 'function' && ctx ? body.contentClass(ctx) : body.contentClass;\n const contentStyle = typeof body.contentStyle === 'function' && ctx ? body.contentStyle(ctx) : body.contentStyle;\n const tooltip = typeof body.tooltip === 'function' && ctx ? body.tooltip(ctx) : body.tooltip;\n\n return {\n content: body.content,\n class: classValue,\n style: styleValue as Record<string, string> | undefined,\n align: body.align,\n rowSpan: typeof rowSpan === 'number' ? rowSpan : undefined,\n colSpan: typeof colSpan === 'number' ? colSpan : undefined,\n contentClass,\n contentStyle: contentStyle as Record<string, string> | undefined,\n tooltip,\n };\n};\n\nexport const getFooterConfig = <T>(col: ZTableColumnConfig<T> | undefined) =>\n getHeaderOrFooterConfigInternal(col, 'footer');\n\n// ─── Shortcut Accessors ──────────────────────────────────────────────────────\n// These convenience functions extract a single property from the relevant config.\n\nexport const getHeaderContent = <T>(col: ZTableColumnConfig<T> | undefined) => getHeaderConfig(col).content;\nexport const getBodyContent = <T>(col: ZTableColumnConfig<T> | undefined) => {\n if (!col?.body) {\n return undefined;\n }\n return isBodyConfig(col.body) ? col.body.content : col.body;\n};\nexport const getFooterContent = <T>(col: ZTableColumnConfig<T> | undefined) => getFooterConfig(col).content;\nexport const getBodyRowSpan = <T>(col: ZTableColumnConfig<T> | undefined, ctx?: CellContext<T, unknown>) =>\n getBodyConfig(col, ctx).rowSpan;\nexport const getBodyColSpan = <T>(col: ZTableColumnConfig<T> | undefined, ctx?: CellContext<T, unknown>) =>\n getBodyConfig(col, ctx).colSpan;\nexport const getHeaderRowSpan = <T>(col: ZTableColumnConfig<T> | undefined) => getHeaderConfig(col).rowSpan;\nexport const getHeaderColSpan = <T>(col: ZTableColumnConfig<T> | undefined) => getHeaderConfig(col).colSpan;\nexport const getFooterRowSpan = <T>(col: ZTableColumnConfig<T> | undefined) => getFooterConfig(col).rowSpan;\nexport const getFooterColSpan = <T>(col: ZTableColumnConfig<T> | undefined) => getFooterConfig(col).colSpan;\n\n// ─── Icon Syntax Parsing ─────────────────────────────────────────────────────\n\n/**\n * Parses inline icon syntax: `\"Total [icon:lucideTrendingUp|size:16|class:text-green] Revenue\"`\n * Returns an array of text and icon segments for rendering by ZTableIconTextComponent.\n */\nexport function parseIconString(content: string): ZTableIconPart[] {\n if (!content || typeof content !== 'string') {\n return [{ type: 'text', value: content || '' }];\n }\n\n const parts: ZTableIconPart[] = [];\n const iconRegex = /\\[icon:([^\\]]+)\\]/g;\n let lastIndex = 0;\n let match: RegExpExecArray | null;\n\n while ((match = iconRegex.exec(content)) !== null) {\n if (match.index > lastIndex) {\n const textPart = content.slice(lastIndex, match.index);\n if (textPart) {\n parts.push({ type: 'text', value: textPart });\n }\n }\n\n const iconContent = match[1];\n const attrs = iconContent.split('|');\n const iconName = attrs[0];\n const iconPart: ZTableIconPart = { type: 'icon', value: iconName };\n\n for (let i = 1; i < attrs.length; i++) {\n const [key, val] = attrs[i].split(':');\n if (key === 'size') {\n iconPart.size = parseInt(val, 10);\n }\n if (key === 'class') {\n iconPart.class = val;\n }\n if (key === 'strokeWidth') {\n iconPart.strokeWidth = parseFloat(val);\n }\n }\n\n parts.push(iconPart);\n lastIndex = match.index + match[0].length;\n }\n\n if (lastIndex < content.length) {\n parts.push({ type: 'text', value: content.slice(lastIndex) });\n }\n\n return parts.length > 0 ? parts : [{ type: 'text', value: content }];\n}\n\n/** Removes all `[icon:...]` syntax from a string, returning plain text */\nexport function stripIconSyntax(content: string): string {\n if (!content || typeof content !== 'string') {\n return content || '';\n }\n return content.replace(/\\[icon:[^\\]]+\\]/g, '').trim();\n}\n\n/** Returns true if the content string contains at least one `[icon:...]` segment */\nexport function hasIconSyntax(content: unknown): boolean {\n if (!content || typeof content !== 'string') {\n return false;\n }\n return /\\[icon:[^\\]]+\\]/.test(content);\n}\n\n// ─── Column Lookup ───────────────────────────────────────────────────────────\n\n/** Recursively search for a column config by ID within a (possibly nested) column array */\nexport const findColumnConfig = <T>(\n columnId: string,\n columns: ZTableColumnConfig<T>[]\n): ZTableColumnConfig<T> | undefined => {\n for (const col of columns) {\n if (col.id === columnId) {\n return col;\n }\n if (col.columns) {\n const found = findColumnConfig(columnId, col.columns);\n if (found) {\n return found;\n }\n }\n }\n return undefined;\n};\n\n// ─── Span Calculation ────────────────────────────────────────────────────────\n\n/**\n * Walk down a chain of placeholder headers to find the deepest real header.\n * Used to calculate how many rows a header cell should span in multi-level headers.\n * Returns null if the header is already the deepest (no spanning needed).\n */\nexport const deepestHeader = <D, V>(header: Header<D, V>): Header<D, V> | null => {\n let last = header;\n while (true) {\n // Follow single-child placeholder chains (placeholders with colSpan=1)\n const next = last.isPlaceholder && last.colSpan === 1 && last.subHeaders.length === 1 ? last.subHeaders[0] : null;\n if (!next) {\n return last === header ? null : last;\n }\n\n last = next;\n }\n};\n\n/** Calculate rowSpan for a TanStack header based on its depth vs deepest sub-header */\nexport const tableHeaderRowSpan = <D, V>(header: Header<D, V>): number | null => {\n const deepest = deepestHeader(header);\n const rowSpan = (deepest ? deepest.depth - header.depth : 0) + 1;\n // If the header is more than 1 level above its column's natural depth, it's been\n // consumed by a parent's rowSpan — return null to skip rendering\n const above = header.depth - header.column.depth;\n return above > 1 ? null : rowSpan;\n};\n\n/**\n * Calculate rowSpan for body cells with static or dynamic rowSpan config.\n * For static rowSpan: uses modular arithmetic (filteredIndex % rowSpan === 0)\n * to determine which rows get the merged cell vs which are skipped.\n */\n\nexport const calculateCellRowSpan = <T>(\n cell: Cell<T, unknown>,\n columnConfig: ZTableColumnConfig<T> | undefined,\n allRows: Row<T>[]\n): number | null => {\n if (!columnConfig?.body || !isBodyConfig(columnConfig.body)) {\n return null;\n }\n const rowSpanValue = columnConfig.body.rowSpan;\n if (!rowSpanValue) {\n return null;\n }\n\n if (typeof rowSpanValue === 'function') {\n const rowSpan = rowSpanValue(cell.getContext());\n return rowSpan > 1 ? rowSpan : null;\n }\n\n if (rowSpanValue > 1) {\n const currentRowId = cell.row.id;\n const filteredIndex = allRows.findIndex(r => r.id === currentRowId);\n\n if (filteredIndex === -1) {\n return null;\n }\n\n if (filteredIndex % rowSpanValue !== 0) {\n return null;\n }\n\n const remainingRows = allRows.length - filteredIndex;\n const actualRowSpan = Math.min(rowSpanValue, remainingRows);\n\n return actualRowSpan > 1 ? actualRowSpan : null;\n }\n\n return null;\n};\n\nexport const calculateCellColSpan = <T>(\n cell: Cell<T, unknown>,\n columnConfig: ZTableColumnConfig<T> | undefined\n): number | null => {\n if (!columnConfig?.body || !isBodyConfig(columnConfig.body)) {\n return null;\n }\n const colSpanValue = columnConfig.body.colSpan;\n if (!colSpanValue) {\n return null;\n }\n const colSpan = typeof colSpanValue === 'function' ? colSpanValue(cell.getContext()) : colSpanValue;\n return colSpan > 1 ? colSpan : null;\n};\n\nexport const calculateHeaderRowSpan = <T>(\n header: Header<T, unknown>,\n columnConfig: ZTableColumnConfig<T> | undefined,\n columns?: ZTableColumnConfig<T>[]\n): number | null => {\n const configRowSpan = getHeaderRowSpan(columnConfig);\n if (configRowSpan !== undefined && configRowSpan !== null) {\n return configRowSpan;\n }\n\n if (columns && header.column.parent) {\n const parentConfig = findColumnConfig(header.column.parent.id, columns);\n const parentRowSpan = getHeaderRowSpan(parentConfig);\n if (parentRowSpan && parentRowSpan >= 2) {\n return null;\n }\n }\n\n const deepest = deepestHeader(header);\n const rowSpan = (deepest ? deepest.depth - header.depth : 0) + 1;\n const above = header.depth - header.column.depth;\n return above > 1 ? null : rowSpan;\n};\n\nexport const calculateHeaderColSpan = <T>(\n header: Header<T, unknown>,\n columnConfig: ZTableColumnConfig<T> | undefined\n): number | null => {\n const configColSpan = getHeaderColSpan(columnConfig);\n const isPinned = header.column.getIsPinned();\n\n if (isPinned === 'left' && configColSpan !== undefined && configColSpan !== null) {\n const allHeaders = header.headerGroup.headers;\n const currentIndex = allHeaders.findIndex(h => h.id === header.id);\n\n if (currentIndex === -1) {\n return configColSpan;\n }\n\n let effectiveColSpan = 0;\n for (let i = 0; i < configColSpan && currentIndex + i < allHeaders.length; i++) {\n const targetHeader = allHeaders[currentIndex + i];\n const targetLeafHeaders = targetHeader.getLeafHeaders();\n const allLeafsPinned = targetLeafHeaders.every(lh => lh.column.getIsPinned() === 'left');\n if (allLeafsPinned) {\n effectiveColSpan++;\n }\n if (!allLeafsPinned) {\n break;\n }\n }\n\n return effectiveColSpan > 1 ? effectiveColSpan : null;\n }\n\n if (configColSpan !== undefined && configColSpan !== null) {\n return configColSpan;\n }\n\n return header.colSpan > 1 ? header.colSpan : null;\n};\n\nexport const calculateFooterRowSpan = <T>(\n header: Header<T, unknown>,\n columnConfig: ZTableColumnConfig<T> | undefined\n): number | null => {\n const configRowSpan = getFooterRowSpan(columnConfig);\n if (configRowSpan !== undefined && configRowSpan !== null) {\n return configRowSpan;\n }\n\n const footerContent = getFooterContent(columnConfig);\n if (footerContent !== undefined) {\n return 1;\n }\n\n if (header.colSpan > 1) {\n return 1;\n }\n\n return 1;\n};\n\nexport const calculateFooterColSpan = <T>(\n header: Header<T, unknown>,\n columnConfig: ZTableColumnConfig<T> | undefined\n): number | null => {\n const configColSpan = getFooterColSpan(columnConfig);\n const isPinned = header.column.getIsPinned();\n\n if (isPinned === 'left' && configColSpan !== undefined && configColSpan !== null) {\n const allHeaders = header.headerGroup.headers;\n const currentIndex = allHeaders.findIndex(h => h.id === header.id);\n\n if (currentIndex === -1) {\n return configColSpan;\n }\n\n let effectiveColSpan = 0;\n for (let i = 0; i < configColSpan && currentIndex + i < allHeaders.length; i++) {\n const targetHeader = allHeaders[currentIndex + i];\n const targetLeafHeaders = targetHeader.getLeafHeaders();\n const allLeafsPinned = targetLeafHeaders.every(lh => lh.column.getIsPinned() === 'left');\n if (allLeafsPinned) {\n effectiveColSpan++;\n }\n if (!allLeafsPinned) {\n break;\n }\n }\n\n return effectiveColSpan > 1 ? effectiveColSpan : null;\n }\n\n if (configColSpan !== undefined && configColSpan !== null) {\n return configColSpan;\n }\n\n return header.colSpan > 1 ? header.colSpan : null;\n};\n\n// ─── Render-Skip Logic ───────────────────────────────────────────────────────\n//\n// These functions determine which cells should NOT be rendered because they\n// are \"covered\" by a neighboring cell's rowSpan or colSpan. This prevents\n// duplicate DOM elements in merged cell scenarios.\n\n/**\n * Checks if a body cell should be rendered based on rowSpan rules.\n * Returns false for cells that fall within another cell's rowSpan range.\n */\nexport const shouldCellRenderUtil = <T>(\n cell: Cell<T, unknown>,\n columnConfig: ZTableColumnConfig<T> | undefined,\n allRows: Row<T>[]\n): boolean => {\n if (!columnConfig?.body || !isBodyConfig(columnConfig.body)) {\n return true;\n }\n const rowSpanValue = columnConfig.body.rowSpan;\n if (!rowSpanValue) {\n return true;\n }\n\n if (typeof rowSpanValue === 'function') {\n const rowSpan = rowSpanValue(cell.getContext());\n return rowSpan !== 0;\n }\n\n if (rowSpanValue > 1) {\n const currentRowId = cell.row.id;\n const filteredIndex = allRows.findIndex(r => r.id === currentRowId);\n\n if (filteredIndex === -1) {\n return true;\n }\n\n return filteredIndex % rowSpanValue === 0;\n }\n\n return true;\n};\n\n/**\n * Shared logic for determining if a header or footer cell should render.\n * A cell should NOT render if a previous cell in the same row has a colSpan\n * that covers this cell's position. Handles pinned column edge cases.\n */\nconst shouldHeaderOrFooterRender = <T>(\n header: Header<T, unknown>,\n allHeaders: Header<T, unknown>[],\n columns: ZTableColumnConfig<T>[],\n type: ZTableCellType\n): boolean => {\n const currentIndex = allHeaders.findIndex(h => h.id === header.id);\n if (currentIndex <= 0) {\n return true;\n }\n\n const getConfigColSpanFn = type === 'header' ? getHeaderColSpan : getFooterColSpan;\n\n for (let i = 0; i < currentIndex; i++) {\n const prevHeader = allHeaders[i];\n const prevConfig = findColumnConfig(prevHeader.column.id, columns);\n const configColSpan = getConfigColSpanFn(prevConfig);\n\n if (!configColSpan || configColSpan <= 1) {\n continue;\n }\n\n const isPinned = prevHeader.column.getIsPinned();\n let effectiveColSpan = configColSpan;\n\n if (isPinned === 'left') {\n const headersInGroup = prevHeader.headerGroup.headers;\n const prevIdx = headersInGroup.findIndex(h => h.id === prevHeader.id);\n\n if (prevIdx !== -1) {\n effectiveColSpan = 0;\n for (let j = 0; j < configColSpan && prevIdx + j < headersInGroup.length; j++) {\n const targetHeader = headersInGroup[prevIdx + j];\n const targetLeafHeaders = targetHeader.getLeafHeaders();\n const allLeafsPinned = targetLeafHeaders.every(lh => lh.column.getIsPinned() === 'left');\n if (allLeafsPinned) {\n effectiveColSpan++;\n }\n if (!allLeafsPinned) {\n break;\n }\n }\n }\n }\n\n if (effectiveColSpan > 1 && i + effectiveColSpan > currentIndex) {\n return false;\n }\n }\n\n return true;\n};\n\nexport const shouldBodyCellRenderColSpan = <T>(\n cell: Cell<T, unknown>,\n allCells: Cell<T, unknown>[],\n columns: ZTableColumnConfig<T>[]\n): boolean => {\n const currentIndex = allCells.findIndex(c => c.id === cell.id);\n if (currentIndex <= 0) {\n return true;\n }\n\n for (let i = 0; i < currentIndex; i++) {\n const prevCell = allCells[i];\n const prevConfig = findColumnConfig(prevCell.column.id, columns);\n const prevColSpan = getBodyColSpan(prevConfig, prevCell.getContext());\n\n if (prevColSpan && prevColSpan > 1 && i + prevColSpan > currentIndex) {\n return false;\n }\n }\n\n return true;\n};\n\nexport const shouldFooterRender = <T>(\n header: Header<T, unknown>,\n allHeaders: Header<T, unknown>[],\n columns: ZTableColumnConfig<T>[]\n): boolean => shouldHeaderOrFooterRender(header, allHeaders, columns, 'footer');\n\nexport const shouldHeaderRender = <T>(\n header: Header<T, unknown>,\n allHeaders: Header<T, unknown>[],\n columns: ZTableColumnConfig<T>[]\n): boolean => shouldHeaderOrFooterRender(header, allHeaders, columns, 'header');\n\n// ─── Column Config → TanStack ColumnDef Conversion ──────────────────────────\n\n/**\n * Converts the consumer-facing ZTableColumnConfig into a TanStack ColumnDef.\n * This is the bridge between the z-table API and TanStack Table internals.\n *\n * Handles:\n * - Accessor mapping (accessorKey / accessorFn)\n * - Header/body/footer content resolution\n * - Sort and filter function wiring (local vs server mode)\n * - Built-in filter functions for each filter type\n * - Recursive nested column conversion\n */\nexport function columnConfigToColumnDef<T>(config: ZTableColumnConfig<T>): ColumnDef<T> {\n const sortConfig = typeof config.sort === 'boolean' ? (config.sort ? { enabled: true } : undefined) : config.sort;\n const filterConfig =\n typeof config.filter === 'boolean' ? (config.filter ? { enabled: true } : undefined) : config.filter;\n\n const resolveHeaderOrFooter = (content: unknown): ((info: unknown) => unknown) | string | undefined => {\n if (!content) {\n return undefined;\n }\n if (typeof content === 'string' || typeof content === 'number') {\n return String(content);\n }\n if (typeof content === 'function') {\n return content as (info: unknown) => unknown;\n }\n return undefined;\n };\n\n const columnDef = {\n id: config.id,\n size: config.size,\n minSize: config.minSize ?? Z_DEFAULT_COLUMN_MIN_SIZE,\n maxSize: config.maxSize,\n enableSorting: sortConfig?.enabled ?? false,\n enableColumnFilter: filterConfig?.enabled ?? false,\n enableResizing: config.enableResizing,\n enablePinning: config.enablePinning,\n enableHiding: config.enableHiding,\n filterType: filterConfig?.type,\n filterOptions: filterConfig?.options,\n } as ColumnDef<T> & { filterType?: ZTableFilterType; filterOptions?: (ZSelectOption | Record<string, unknown>)[] };\n\n if (config.accessorKey) {\n (columnDef as ColumnDef<T> & { accessorKey: string }).accessorKey = config.accessorKey;\n }\n\n if (config.accessorFn) {\n (columnDef as ColumnDef<T> & { accessorFn: (row: T) => unknown }).accessorFn = config.accessorFn;\n }\n\n columnDef.header = resolveHeaderOrFooter(getHeaderContent(config));\n const bodyContent = getBodyContent(config);\n if (typeof bodyContent === 'string' || typeof bodyContent === 'number') {\n columnDef.cell = () => bodyContent as string;\n }\n\n if (typeof bodyContent === 'function') {\n columnDef.cell = bodyContent as (info: CellContext<T, unknown>) => unknown;\n }\n\n columnDef.footer = resolveHeaderOrFooter(getFooterContent(config));\n\n const isLocalFilterMode = !filterConfig?.mode || filterConfig.mode === 'local';\n const isLocalSortMode = !sortConfig?.mode || sortConfig.mode === 'local';\n\n if (isLocalSortMode && sortConfig?.sortFn) {\n columnDef.sortingFn = sortConfig.sortFn as ColumnDef<T>['sortingFn'];\n }\n\n if (!isLocalSortMode) {\n columnDef.sortingFn = () => 0;\n }\n\n if (isLocalFilterMode && filterConfig?.filterFn) {\n columnDef.filterFn = filterConfig.filterFn as ColumnDef<T>['filterFn'];\n }\n\n if (!isLocalFilterMode) {\n columnDef.filterFn = () => true;\n }\n\n if (isLocalFilterMode && !filterConfig?.filterFn && filterConfig?.type) {\n switch (filterConfig.type) {\n case 'select':\n columnDef.filterFn = (row, columnId, filterValue) => {\n if (!filterValue || (Array.isArray(filterValue) && filterValue.length === 0)) {\n return true;\n }\n const cellValue = row.getValue(columnId);\n if (Array.isArray(filterValue)) {\n return filterValue.includes(cellValue);\n }\n return cellValue === filterValue;\n };\n break;\n\n case 'multi-select':\n case 'tags':\n columnDef.filterFn = (row, columnId, filterValue) => {\n if (!filterValue || (Array.isArray(filterValue) && filterValue.length === 0)) {\n return true;\n }\n const cellValue = row.getValue(columnId);\n if (!Array.isArray(filterValue)) {\n return cellValue === filterValue;\n }\n const filterSet = new Set(filterValue);\n if (Array.isArray(cellValue)) {\n return cellValue.some(cv => filterSet.has(cv));\n }\n return filterSet.has(cellValue);\n };\n break;\n\n case 'date':\n columnDef.filterFn = (row, columnId, filterValue) => {\n if (!filterValue) {\n return true;\n }\n const cellValue = row.getValue(columnId);\n if (!cellValue) {\n return false;\n }\n\n const cellDate = cellValue instanceof Date ? cellValue : new Date(cellValue as string | number);\n const filterDate = filterValue instanceof Date ? filterValue : new Date(filterValue as string | number);\n\n if (isNaN(cellDate.getTime()) || isNaN(filterDate.getTime())) {\n return false;\n }\n\n return (\n cellDate.getFullYear() === filterDate.getFullYear() &&\n cellDate.getMonth() === filterDate.getMonth() &&\n cellDate.getDate() === filterDate.getDate()\n );\n };\n break;\n\n case 'date-range':\n columnDef.filterFn = (row, columnId, filterValue) => {\n if (!filterValue || typeof filterValue !== 'object') {\n return true;\n }\n\n const { start, end } = filterValue as { start?: Date | null; end?: Date | null };\n if (!start && !end) {\n return true;\n }\n\n const cellValue = row.getValue(columnId);\n if (!cellValue) {\n return false;\n }\n\n const cellDate = cellValue instanceof Date ? cellValue : new Date(cellValue as string | number);\n if (isNaN(cellDate.getTime())) {\n return false;\n }\n\n const cellDateOnly = new Date(cellDate.getFullYear(), cellDate.getMonth(), cellDate.getDate());\n\n if (start) {\n const startDate = start instanceof Date ? start : new Date(start as unknown as string | number);\n if (!isNaN(startDate.getTime())) {\n const startDateOnly = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate());\n if (cellDateOnly < startDateOnly) {\n return false;\n }\n }\n }\n\n if (end) {\n const endDate = end instanceof Date ? end : new Date(end as unknown as string | number);\n if (!isNaN(endDate.getTime())) {\n const endDateOnly = new Date(endDate.getFullYear(), endDate.getMonth(), endDate.getDate());\n if (cellDateOnly > endDateOnly) {\n return false;\n }\n }\n }\n\n return true;\n };\n break;\n\n case 'range':\n columnDef.filterFn = (row, columnId, filterValue) => {\n if (!filterValue || !Array.isArray(filterValue)) {\n return true;\n }\n\n const [min, max] = filterValue as [number | undefined, number | undefined];\n if (min === undefined && max === undefined) {\n return true;\n }\n\n const cellValue = row.getValue(columnId);\n if (cellValue === null || cellValue === undefined) {\n return false;\n }\n\n const numValue = typeof cellValue === 'number' ? cellValue : Number(cellValue);\n if (isNaN(numValue)) {\n return false;\n }\n\n if (min !== undefined && numValue < min) {\n return false;\n }\n\n if (max !== undefined && numValue > max) {\n return false;\n }\n\n return true;\n };\n break;\n }\n }\n\n if (config.columns && config.columns.length > 0) {\n (columnDef as ColumnDef<T> & { columns: ColumnDef<T>[] }).columns = config.columns.map(subConfig =>\n columnConfigToColumnDef(subConfig)\n );\n }\n\n return columnDef;\n}\n\n// ─── Generic Utility Helpers ─────────────────────────────────────────────────\n\n/** Resolve a value that may be static or a function of the row data */\nexport const resolveConfigValue = <T, R>(config: T | ((row: R) => T) | undefined, row: R, defaultValue: T): T => {\n if (config === undefined) {\n return defaultValue;\n }\n\n return typeof config === 'function' ? (config as (row: R) => T)(row) : config;\n};\n\n/** Pick only defined (non-undefined) keys from an object — used to spread optional virtualizer config */\nexport const pickDefined = <T extends object, K extends keyof T>(obj: T, keys: K[]): Pick<T, K> =>\n keys.reduce(\n (acc, key) => {\n if (obj[key] !== undefined) {\n acc[key] = obj[key];\n }\n return acc;\n },\n {} as Pick<T, K>\n );\n","import { NgStyle } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n input,\n OnInit,\n output,\n signal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { ZAutocompleteComponent, ZAutocompleteOption } from '@shival99/z-ui/components/z-autocomplete';\nimport { ZCalendarComponent } from '@shival99/z-ui/components/z-calendar';\nimport { ZCheckboxComponent } from '@shival99/z-ui/components/z-checkbox';\nimport { ZInputComponent } from '@shival99/z-ui/components/z-input';\nimport { ZSelectComponent, ZSelectOption } from '@shival99/z-ui/components/z-select';\nimport { ZSwitchComponent } from '@shival99/z-ui/components/z-switch';\nimport { debounceTime, distinctUntilChanged, Subject } from 'rxjs';\nimport type {\n ZTableEditConfig,\n ZTableEditType,\n ZTableEditCellChangeEvent,\n ZResolvedEditConfig,\n} from '../z-table.types';\nimport { resolveConfigValue } from '../z-table.util';\n\n@Component({\n selector: 'z-table-edit-cell',\n imports: [\n FormsModule,\n ZInputComponent,\n ZSelectComponent,\n ZCalendarComponent,\n ZCheckboxComponent,\n ZSwitchComponent,\n ZAutocompleteComponent,\n NgStyle,\n ],\n standalone: true,\n template: `\n @switch (cfg().type) {\n @case ('checkbox') {\n <div class=\"flex items-center justify-center\">\n <z-checkbox\n [zSize]=\"cfg().size\"\n [class]=\"cfg().class\"\n [ngStyle]=\"cfg().style\"\n [zChecked]=\"booleanValue()\"\n [zDisabled]=\"cfg().disabled || cfg().readonly\"\n (zChange)=\"onImmediateChange($event)\"\n />\n </div>\n }\n @case ('toggle') {\n <div class=\"flex items-center justify-center\">\n <z-switch\n [zSize]=\"cfg().size\"\n [class]=\"cfg().class\"\n [ngStyle]=\"cfg().style\"\n [zChecked]=\"booleanValue()\"\n [zDisabled]=\"cfg().disabled || cfg().readonly\"\n (zChange)=\"onImmediateChange($event)\"\n />\n </div>\n }\n @case ('number') {\n <z-input\n zType=\"number\"\n [class]=\"cfg().class\"\n [ngStyle]=\"cfg().style\"\n [zSize]=\"cfg().size\"\n [zPlaceholder]=\"cfg().placeholder\"\n [zMin]=\"editConfig().min\"\n [zMax]=\"editConfig().max\"\n [zStep]=\"editConfig().step ?? 1\"\n [zThousandSeparator]=\"editConfig().thousandSeparator || ','\"\n [zDisabled]=\"cfg().disabled\"\n [zReadonly]=\"cfg().readonly\"\n [ngModel]=\"numericValue()\"\n (ngModelChange)=\"onValueChange($event)\"\n (zOnBlur)=\"onInputBlur()\"\n class=\"w-full\"\n />\n }\n @case ('select') {\n <z-select\n [class]=\"cfg().class\"\n [ngStyle]=\"cfg().style\"\n [zSize]=\"cfg().size\"\n [zWrap]=\"false\"\n [zScrollClose]=\"true\"\n [zOptions]=\"selectOptions()\"\n [zAllowClear]=\"cfg().allowClear\"\n [zDisabled]=\"cfg().disabled\"\n [zReadonly]=\"cfg().readonly\"\n [ngModel]=\"value()\"\n [zPlaceholder]=\"cfg().placeholder\"\n (ngModelChange)=\"onSelectChange($event)\"\n class=\"w-full min-w-0\"\n />\n }\n @case ('autocomplete') {\n <z-autocomplete\n [class]=\"cfg().class\"\n [ngStyle]=\"cfg().style\"\n [zSize]=\"cfg().size\"\n [zOptions]=\"autocompleteOptions()\"\n [zType]=\"editConfig().autocompleteType || 'default'\"\n [zResetOnSelect]=\"editConfig().autocompleteResetOnSelect ?? false\"\n [zHeightExpand]=\"editConfig().autocompleteHeight || 280\"\n [zAllowCustomValue]=\"editConfig().autocompleteAllowCustomValue ?? true\"\n [zDisabled]=\"cfg().disabled\"\n [zReadonly]=\"cfg().readonly\"\n [zPlaceholder]=\"cfg().placeholder\"\n [ngModel]=\"stringValue()\"\n (zOnCommit)=\"onAutocompleteCommit($event)\"\n (zOnSelect)=\"onAutocompleteSelect($event)\"\n (zOnBlur)=\"onInputBlur()\"\n class=\"w-full\"\n />\n }\n @case ('date') {\n <z-calendar\n zMode=\"single\"\n [class]=\"cfg().class\"\n [ngStyle]=\"cfg().style\"\n [zSize]=\"cfg().size\"\n zAllowClear\n zValueType=\"date\"\n [zScrollClose]=\"true\"\n [zDisabled]=\"cfg().disabled\"\n [zReadonly]=\"cfg().readonly\"\n [zPlaceholder]=\"cfg().placeholder\"\n [ngModel]=\"dateValue()\"\n (ngModelChange)=\"onImmediateChange($event)\"\n class=\"w-full\"\n />\n }\n @case ('textarea') {\n <z-input\n zType=\"textarea\"\n [zSize]=\"cfg().size\"\n [class]=\"cfg().class\"\n [ngStyle]=\"cfg().style\"\n [zPlaceholder]=\"cfg().placeholder\"\n [zRows]=\"editConfig().rows ?? 2\"\n [zDisabled]=\"cfg().disabled\"\n [zReadonly]=\"cfg().readonly\"\n [ngModel]=\"stringValue()\"\n (ngModelChange)=\"onValueChange($event)\"\n (zOnBlur)=\"onInputBlur()\"\n class=\"w-full\"\n />\n }\n @default {\n <z-input\n zType=\"text\"\n [class]=\"cfg().class\"\n [ngStyle]=\"cfg().style\"\n [zSize]=\"cfg().size\"\n [zPlaceholder]=\"cfg().placeholder\"\n [zDisabled]=\"cfg().disabled\"\n [zReadonly]=\"cfg().readonly\"\n [ngModel]=\"stringValue()\"\n (ngModelChange)=\"onValueChange($event)\"\n (zOnBlur)=\"onInputBlur()\"\n class=\"w-full\"\n />\n }\n }\n `,\n styles: `\n :host {\n display: block;\n width: 100%;\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'z-table-edit-cell block',\n },\n})\nexport class ZTableEditCellComponent<T = unknown> implements OnInit {\n private readonly _destroyRef = inject(DestroyRef);\n\n public readonly zRow = input.required<T>();\n public readonly zRowId = input.required<string>();\n public readonly zRowIndex = input.required<number>();\n public readonly zColumnId = input.required<string>();\n public readonly zValue = input<unknown>();\n public readonly zEditConfig = input<ZTableEditConfig<T>>();\n public readonly zRowUpdate = input<{ rowId: string; updates: Record<string, unknown> } | null>(null);\n public readonly zChange = output<ZTableEditCellChangeEvent<T>>();\n\n private readonly _currentValue = signal<unknown>(undefined);\n private readonly _valueChange$ = new Subject<{ oldValue: unknown; newValue: unknown }>();\n private _pendingBlurValue: unknown = undefined;\n private _hasPendingBlur = false;\n\n constructor() {\n effect(() => {\n const externalValue = this.zValue();\n this._currentValue.set(externalValue);\n });\n\n effect(() => {\n const update = this.zRowUpdate();\n if (!update) {\n return;\n }\n\n const myRowId = this.zRowId();\n const myColumnId = this.zColumnId();\n if (update.rowId !== myRowId) {\n return;\n }\n\n if (!(myColumnId in update.updates)) {\n return;\n }\n\n this._currentValue.set(update.updates[myColumnId]);\n });\n }\n\n protected readonly editConfig = computed(() => {\n const config = this.zEditConfig();\n if (!config || typeof config === 'boolean') {\n return { enabled: true, type: 'text' as ZTableEditType };\n }\n\n return config;\n });\n\n protected readonly cfg = computed<ZResolvedEditConfig>(() => {\n const config = this.editConfig();\n const row = this.zRow();\n return {\n type: resolveConfigValue(config?.type, row, 'text' as ZTableEditType),\n size: config?.size ?? 'default',\n placeholder: resolveConfigValue(config?.placeholder, row, ''),\n allowClear: config?.allowClear ?? false,\n class: resolveConfigValue(config?.class, row, ''),\n style: resolveConfigValue(config?.style, row, {} as Record<string, string>),\n disabled: resolveConfigValue(config?.disabled, row, false),\n readonly: resolveConfigValue(config?.readonly, row, false),\n };\n });\n\n protected readonly selectOptions = computed<ZSelectOption[]>(() => {\n const config = this.editConfig();\n const optionsConfig = config?.options;\n if (!optionsConfig) {\n return [];\n }\n\n const rawOptions: unknown[] = typeof optionsConfig === 'function' ? optionsConfig(this.zRow()) : optionsConfig;\n const labelKey = config?.optionLabelKey;\n const valueKey = config?.optionValueKey;\n\n if (!labelKey && !valueKey) {\n return rawOptions as ZSelectOption[];\n }\n\n return rawOptions.map((opt: unknown) => {\n if (typeof opt !== 'object' || opt === null) {\n return { label: String(opt), value: opt };\n }\n\n const obj = opt as Record<string, unknown>;\n return {\n label: String(obj[labelKey ?? 'label'] ?? ''),\n value: obj[valueKey ?? 'value'],\n };\n });\n });\n\n protected readonly autocompleteOptions = computed<ZAutocompleteOption[]>(() => {\n const config = this.editConfig();\n const optionsConfig = config?.autocompleteOptions;\n if (!optionsConfig) {\n return [];\n }\n\n const rawOptions: unknown[] = typeof optionsConfig === 'function' ? optionsConfig(this.zRow()) : optionsConfig;\n const labelKey = config?.optionLabelKey;\n const valueKey = config?.optionValueKey;\n\n if (!labelKey && !valueKey) {\n return rawOptions as ZAutocompleteOption[];\n }\n\n return rawOptions.map((opt: unknown) => {\n if (typeof opt !== 'object' || opt === null) {\n return { label: String(opt), value: opt };\n }\n\n const obj = opt as Record<string, unknown>;\n return {\n label: String(obj[labelKey ?? 'label'] ?? ''),\n value: obj[valueKey ?? 'value'],\n };\n });\n });\n\n protected readonly value = this._currentValue.asReadonly();\n protected readonly stringValue = computed(() => {\n const val = this.value();\n if (val === null || val === undefined) {\n return '';\n }\n\n return String(val);\n });\n\n protected readonly numericValue = computed(() => {\n const val = this.value();\n if (val === null || val === undefined || val === '') {\n return null;\n }\n\n const num = Number(val);\n return isNaN(num) ? null : num;\n });\n\n protected readonly booleanValue = computed(() => {\n const val = this.value();\n return Boolean(val);\n });\n\n protected readonly dateValue = computed(() => {\n const val = this.value();\n if (val instanceof Date) {\n return val;\n }\n\n if (typeof val === 'string' && val) {\n const date = new Date(val);\n return isNaN(date.getTime()) ? null : date;\n }\n\n return null;\n });\n\n protected onValueChange(newValue: unknown): void {\n const oldValue = this.zValue();\n this._currentValue.set(newValue);\n\n const config = this.editConfig();\n\n if (config?.blurEdit) {\n this._pendingBlurValue = newValue;\n this._hasPendingBlur = true;\n return;\n }\n\n this._valueChange$.next({ oldValue, newValue });\n }\n\n protected onInputBlur(): void {\n if (!this._hasPendingBlur) {\n return;\n }\n\n const oldValue = this.zValue();\n this._hasPendingBlur = false;\n this._emitChange(oldValue, this._pendingBlurValue);\n }\n\n protected onImmediateChange(newValue: unknown): void {\n const oldValue = this.zValue();\n this._currentValue.set(newValue);\n this._emitChange(oldValue, newValue);\n }\n\n protected onSelectChange(newValue: unknown): void {\n const isWrappedObject = typeof newValue === 'object' && newValue !== null && 'value' in newValue;\n const finalValue = isWrappedObject ? (newValue as { value: unknown }).value : newValue;\n this.onImmediateChange(finalValue);\n }\n\n protected onAutocompleteCommit(event: { value: string; source: 'enter' | 'blur' }): void {\n this.onImmediateChange(event.value);\n }\n\n protected onAutocompleteSelect(option: ZAutocompleteOption): void {\n this.onImmediateChange(option.label);\n }\n\n private _emitChange(oldValue: unknown, newValue: unknown): void {\n this.zChange.emit({\n row: this.zRow(),\n rowId: this.zRowId(),\n rowIndex: this.zRowIndex(),\n columnId: this.zColumnId(),\n oldValue,\n newValue,\n });\n }\n\n public ngOnInit(): void {\n const config = this.editConfig();\n const debounceMs = config?.debounceTime ?? 0;\n\n this._valueChange$\n .pipe(\n debounceTime(debounceMs),\n distinctUntilChanged((a, b) => a.newValue === b.newValue),\n takeUntilDestroyed(this._destroyRef)\n )\n .subscribe(({ oldValue, newValue }) => {\n this._emitChange(oldValue, newValue);\n });\n\n this._destroyRef.onDestroy(() => {\n this._valueChange$.complete();\n });\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input, OnDestroy } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ZCalendarComponent } from '@shival99/z-ui/components/z-calendar';\nimport type { ZDateRange } from '@shival99/z-ui/components/z-calendar';\nimport { ZInputComponent } from '@shival99/z-ui/components/z-input';\nimport { ZSelectComponent } from '@shival99/z-ui/components/z-select';\nimport type { Column, Table } from '@tanstack/angular-table';\nimport type { ZTableExtendedColumnDef } from '../z-table.types';\n\n@Component({\n selector: 'z-table-filter',\n imports: [FormsModule, ZInputComponent, ZSelectComponent, ZCalendarComponent, TranslatePipe],\n standalone: true,\n template: `\n @switch (filterType()) {\n @case ('range') {\n <div class=\"flex gap-1\">\n <z-input\n zType=\"number\"\n zSize=\"sm\"\n [zPlaceholder]=\"'i18n_z_ui_table_filter_min' | translate\"\n [ngModel]=\"rangeMinValue()\"\n (ngModelChange)=\"onMinChangeDebounced($event)\"\n class=\"min-w-0 flex-1\"\n />\n <z-input\n zType=\"number\"\n zSize=\"sm\"\n [zPlaceholder]=\"'i18n_z_ui_table_filter_max' | translate\"\n [ngModel]=\"rangeMaxValue()\"\n (ngModelChange)=\"onMaxChangeDebounced($event)\"\n class=\"min-w-0 flex-1\"\n />\n </div>\n }\n @case ('date') {\n <z-calendar\n zMode=\"single\"\n zSize=\"sm\"\n zAllowClear\n zValueType=\"date\"\n [zScrollClose]=\"true\"\n [zPlaceholder]=\"'i18n_z_ui_table_filter_date' | translate\"\n [ngModel]=\"dateValue()\"\n (ngModelChange)=\"onDateChange($event)\"\n class=\"w-full\"\n />\n }\n @case ('date-range') {\n <z-calendar\n zMode=\"range\"\n zSize=\"sm\"\n zAllowClear\n zValueType=\"date\"\n [zScrollClose]=\"true\"\n [zPlaceholder]=\"'i18n_z_ui_table_filter_date_range' | translate\"\n [ngModel]=\"dateRangeValue()\"\n (ngModelChange)=\"onDateRangeChange($event)\"\n class=\"w-full\"\n />\n }\n @case ('select') {\n <z-select\n zSize=\"sm\"\n zAllowClear\n [zWrap]=\"false\"\n [zScrollClose]=\"true\"\n [zOptions]=\"selectOptions()\"\n [ngModel]=\"selectValue()\"\n [zMaxVisible]=\"30\"\n [zPlaceholder]=\"'i18n_z_ui_common_select' | translate\"\n (ngModelChange)=\"onSelectChange($event)\"\n class=\"w-full min-w-0\"\n />\n }\n @case ('multi-select') {\n <z-select\n zMode=\"multiple\"\n zSize=\"sm\"\n zAllowClear\n [zWrap]=\"false\"\n [zScrollClose]=\"true\"\n [zOptions]=\"selectOptions()\"\n [zMaxTagCount]=\"1\"\n [zMaxVisible]=\"30\"\n [ngModel]=\"multiSelectValue()\"\n [zPlaceholder]=\"'i18n_z_ui_common_select' | translate\"\n (ngModelChange)=\"onMultiSelectChange($event)\"\n class=\"w-full min-w-0\"\n />\n }\n @case ('tags') {\n <z-select\n zMode=\"tags\"\n zSize=\"sm\"\n [zOptions]=\"selectOptions()\"\n [zWrap]=\"false\"\n [zScrollClose]=\"true\"\n [zMaxTagCount]=\"1\"\n [zMaxVisible]=\"30\"\n [zPlaceholder]=\"'i18n_z_ui_common_select' | translate\"\n class=\"w-full min-w-0\"\n [zAllowClear]=\"true\"\n (ngModelChange)=\"onMultiSelectChange($event)\"\n [ngModel]=\"multiSelectValue()\"\n />\n }\n @case ('number') {\n <z-input\n zType=\"number\"\n zSize=\"sm\"\n zAllowClear\n [zPlaceholder]=\"'i18n_z_ui_table_filter_search' | translate\"\n [ngModel]=\"columnFilterValue()?.toString() ?? ''\"\n (ngModelChange)=\"onTextChangeDebounced($event)\"\n class=\"w-full\"\n />\n }\n @default {\n <z-input\n zType=\"text\"\n zSize=\"sm\"\n zAllowClear\n [zPlaceholder]=\"'i18n_z_ui_table_filter_search' | translate\"\n [ngModel]=\"(columnFilterValue() ?? '').toString()\"\n (ngModelChange)=\"onTextChangeDebounced($event)\"\n class=\"w-full\"\n />\n }\n }\n `,\n styles: `\n :host {\n color: var(--foreground);\n font-weight: 450;\n font-style: normal;\n text-decoration: none;\n text-transform: none;\n letter-spacing: normal;\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'z-table-filter block',\n },\n})\nexport class ZTableFilterComponent<T> implements OnDestroy {\n public readonly zColumn = input.required<Column<unknown, unknown>>();\n public readonly zTable = input.required<Table<T>>();\n\n private _debounceTimeout: ReturnType<typeof setTimeout> | null = null;\n private readonly _debounceMs = 300;\n private readonly _columnDef = computed(() => this.zColumn().columnDef as ZTableExtendedColumnDef);\n\n public readonly filterType = computed(() => this._columnDef().filterType);\n public readonly columnFilterValue = computed<unknown>(() => this.zColumn().getFilterValue());\n public readonly minValue = computed(() => this.zColumn().getFacetedMinMaxValues()?.[0] ?? '');\n public readonly maxValue = computed(() => this.zColumn().getFacetedMinMaxValues()?.[1] ?? '');\n\n public readonly rangeMinValue = computed(() => {\n const value = this.columnFilterValue();\n if (!Array.isArray(value)) {\n return '';\n }\n\n return value[0] ?? '';\n });\n\n public readonly rangeMaxValue = computed(() => {\n const value = this.columnFilterValue();\n if (!Array.isArray(value)) {\n return '';\n }\n\n return value[1] ?? '';\n });\n\n public readonly dateValue = computed(() => {\n const value = this.columnFilterValue();\n if (value instanceof Date) {\n return value;\n }\n return null;\n });\n\n public readonly dateRangeValue = computed(() => {\n const value = this.columnFilterValue();\n if (value && typeof value === 'object' && 'start' in value && 'end' in value) {\n return value as ZDateRange;\n }\n return null;\n });\n\n public readonly selectValue = computed(() => {\n const value = this.columnFilterValue();\n if (value === null || value === undefined || value === '') {\n return null;\n }\n return value;\n });\n\n public readonly multiSelectValue = computed(() => {\n const value = this.columnFilterValue();\n if (Array.isArray(value)) {\n return value;\n }\n return [];\n });\n\n public readonly selectOptions = computed(() => {\n const columnDef = this._columnDef();\n if (columnDef.filterOptions && columnDef.filterOptions.length > 0) {\n return columnDef.filterOptions;\n }\n\n const facetedValues = this.zColumn().getFacetedUniqueValues();\n if (facetedValues && facetedValues.size > 0) {\n const uniqueValues = Array.from(facetedValues.keys()).sort().slice(0, 5000);\n return uniqueValues.map(v => ({ label: String(v), value: String(v) }));\n }\n\n const table = this.zTable();\n const column = this.zColumn();\n const { rows } = table.getRowModel();\n\n if (rows.length === 0) {\n return [];\n }\n\n const uniqueValues = new Set<string>();\n for (const row of rows) {\n const value = row.getValue(column.id);\n if (value !== null && value !== undefined && value !== '') {\n uniqueValues.add(String(value));\n }\n }\n\n const sortedValues = Array.from(uniqueValues).sort();\n return sortedValues.map(v => ({ label: String(v), value: String(v) }));\n });\n\n ngOnDestroy(): void {\n if (this._debounceTimeout) {\n clearTimeout(this._debounceTimeout);\n }\n }\n\n public onMinChangeDebounced(value: string | number | null): void {\n this._debounce(() => {\n const numValue = value === null || value === '' ? undefined : Number(value);\n this.zColumn().setFilterValue((old: [number, number]) => [numValue, old?.[1]]);\n });\n }\n\n public onMaxChangeDebounced(value: string | number | null): void {\n this._debounce(() => {\n const numValue = value === null || value === '' ? undefined : Number(value);\n this.zColumn().setFilterValue((old: [number, number]) => [old?.[0], numValue]);\n });\n }\n\n public onTextChangeDebounced(value: string | number | null): void {\n this._debounce(() => {\n this.zColumn().setFilterValue(value);\n });\n }\n\n public onSelectChange(value: unknown): void {\n if (typeof value === 'object' && value !== null && 'value' in value) {\n this.zColumn().setFilterValue((value as { value: string }).value || undefined);\n return;\n }\n\n this.zColumn().setFilterValue(value || undefined);\n }\n\n public onMultiSelectChange(value: unknown[]): void {\n if (!value || (Array.isArray(value) && value.length === 0)) {\n this.zColumn().setFilterValue(undefined);\n return;\n }\n this.zColumn().setFilterValue(value);\n }\n\n public onDateChange(value: Date | null): void {\n this.zColumn().setFilterValue(value || undefined);\n }\n\n public onDateRangeChange(value: ZDateRange | null): void {\n if (value && (value.start || value.end)) {\n this.zColumn().setFilterValue(value);\n return;\n }\n this.zColumn().setFilterValue(undefined);\n }\n\n private _debounce(fn: () => void): void {\n if (this._debounceTimeout) {\n clearTimeout(this._debounceTimeout);\n }\n\n this._debounceTimeout = setTimeout(fn, this._debounceMs);\n }\n}\n","import { NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, ElementRef, inject, input } from '@angular/core';\nimport { ZIconComponent } from '@shival99/z-ui/components/z-icon';\nimport { ZTooltipDirective } from '@shival99/z-ui/components/z-tooltip';\nimport { type ZTooltipConfig } from '@shival99/z-ui/components/z-tooltip';\nimport { ZSafeHtmlPipe } from '@shival99/z-ui/pipes';\nimport { ZTranslateService } from '@shival99/z-ui/services';\nimport { type ZTableIconPart } from '../z-table.types';\nimport { parseIconString, stripIconSyntax } from '../z-table.util';\n\n@Component({\n selector: 'z-table-icon-text',\n imports: [NgClass, ZIconComponent, ZTooltipDirective, ZSafeHtmlPipe],\n standalone: true,\n template: `\n <span class=\"z-table-icon-text-inner\">\n @for (part of translatedParts(); track $index) {\n @if (part.type === 'icon') {\n <z-icon\n class=\"shrink-0\"\n [zType]=\"$any(part.value)\"\n [zSize]=\"$any(part.size ?? 14)\"\n [zStrokeWidth]=\"part.strokeWidth ?? 1.5\"\n [ngClass]=\"part.class ?? ''\"\n />\n } @else {\n <span\n class=\"truncate select-text\"\n z-tooltip\n [zContent]=\"tooltipContent()\"\n [zTriggerElement]=\"triggerEl()\"\n [innerHTML]=\"part.value | zSafeHtml\"\n ></span>\n }\n }\n </span>\n `,\n styles: `\n :host {\n display: inline-flex;\n align-items: center;\n min-width: 0;\n max-width: 100%;\n }\n\n .z-table-icon-text-inner {\n display: inline-flex;\n align-items: center;\n gap: 0.25rem;\n line-height: 1.2;\n min-width: 0;\n max-width: 100%;\n }\n\n span.truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ZTableIconTextComponent {\n public readonly zText = input<string>('');\n public readonly zTooltip = input<string | ZTooltipConfig>('');\n public readonly zTriggerElement = input<HTMLElement | null>(null);\n\n private readonly _hostEl = inject(ElementRef).nativeElement;\n private readonly _zTranslate = inject(ZTranslateService);\n\n protected readonly triggerEl = computed(() => this.zTriggerElement() ?? this._hostEl);\n protected readonly translatedParts = computed<ZTableIconPart[]>(() => {\n this._zTranslate.currentLang();\n const parts = parseIconString(this.zText());\n return parts.map(part => {\n if (part.type === 'text') {\n const trimmedValue = part.value.trim();\n return { ...part, value: this._zTranslate.instant(trimmedValue) };\n }\n return part;\n });\n });\n\n protected readonly tooltipContent = computed(() => {\n this._zTranslate.currentLang();\n const tooltip = this.zTooltip();\n if (tooltip) {\n if (typeof tooltip === 'string') {\n return stripIconSyntax(this._zTranslate.instant(tooltip.trim()));\n }\n if (tooltip.content && typeof tooltip.content === 'string') {\n return stripIconSyntax(this._zTranslate.instant(tooltip.content.trim()));\n }\n }\n return stripIconSyntax(this._zTranslate.instant(this.zText().trim()));\n });\n}\n","import { Directive, ElementRef, Renderer2, input, inject } from '@angular/core';\n\n@Directive({\n selector: '[z-table-row-hover], [zTableRowHover]',\n standalone: true,\n host: {\n '(mouseenter)': 'onMouseEnter()',\n '(mouseleave)': 'onMouseLeave()',\n },\n})\n/**\n * EN: Applies row-hover class to hovered row cells and to spanning cells that cover that row.\n * VI: Áp class hover cho cell của row đang hover và cả các cell có rowSpan bao phủ row đó.\n */\nexport class ZTableRowHoverDirective {\n public readonly zTableRowHover = input<HTMLTableElement | null>(null);\n\n private readonly _elementRef = inject(ElementRef<HTMLTableRowElement>);\n private readonly _renderer = inject(Renderer2);\n public onMouseEnter(): void {\n this._handleHover(true);\n }\n\n public onMouseLeave(): void {\n this._handleHover(false);\n }\n\n private _handleHover(isHover: boolean): void {\n const row = this._elementRef.nativeElement;\n const table = this.zTableRowHover() || this._findParentTable(row);\n\n if (!table) {\n return;\n }\n\n const cellsInCurrentRow = Array.from(row.children) as HTMLTableCellElement[];\n cellsInCurrentRow.forEach(cell => {\n this._toggleCellHover(cell, isHover);\n });\n\n const tbody = table.querySelector('tbody');\n if (!tbody) {\n return;\n }\n\n const allRows = Array.from(tbody.querySelectorAll('tr')) as HTMLTableRowElement[];\n const currentRowIndex = allRows.indexOf(row);\n\n if (currentRowIndex === -1) {\n return;\n }\n\n const grid: {\n cell: HTMLTableCellElement;\n rowStart: number;\n rowEnd: number;\n }[] = [];\n\n for (let rowIdx = 0; rowIdx < allRows.length; rowIdx++) {\n const r = allRows[rowIdx];\n const cellsInRow = Array.from(r.children) as HTMLTableCellElement[];\n\n cellsInRow.forEach(cell => {\n const rowSpan = parseInt(cell.getAttribute('rowspan') || '1', 10);\n const rowEnd = rowIdx + rowSpan - 1;\n grid.push({\n cell,\n rowStart: rowIdx,\n rowEnd: rowEnd,\n });\n });\n }\n\n grid.forEach(item => {\n const coverCurrentRow = item.rowStart < currentRowIndex && item.rowEnd >= currentRowIndex;\n if (!coverCurrentRow) {\n return;\n }\n\n this._toggleCellHover(item.cell, isHover);\n });\n }\n\n private _toggleCellHover(cell: HTMLTableCellElement, isHover: boolean): void {\n if (isHover) {\n this._renderer.addClass(cell, 'z-row-hover');\n return;\n }\n\n this._renderer.removeClass(cell, 'z-row-hover');\n }\n\n private _findParentTable(element: HTMLElement): HTMLTableElement | null {\n let current = element.parentElement;\n while (current) {\n if (current.tagName === 'TABLE') {\n return current as HTMLTableElement;\n }\n current = current.parentElement;\n }\n return null;\n }\n}\n","import { Directive, ElementRef, inject, input, OnDestroy, AfterViewInit, NgZone } from '@angular/core';\nimport { Header } from '@tanstack/angular-table';\n\n@Directive({\n selector: '[z-table-resize],[zTableResize]',\n standalone: true,\n})\n/**\n * EN: Binds mouse/touch events to TanStack header resize handlers for column resizing.\n * VI: Gắn sự kiện mouse/touch vào resize handler của TanStack header để đổi kích thước cột.\n */\nexport class ZTableResizeDirective<T> implements AfterViewInit, OnDestroy {\n public readonly zTableResize = input.required<Header<T, unknown>>();\n\n private readonly _elementRef = inject(ElementRef<HTMLElement>);\n private readonly _ngZone = inject(NgZone);\n\n private _mousedownHandler: ((event: MouseEvent) => void) | null = null;\n private _touchstartHandler: ((event: TouchEvent) => void) | null = null;\n\n ngAfterViewInit(): void {\n const element = this._elementRef.nativeElement;\n const header = this.zTableResize();\n this._mousedownHandler = (event: MouseEvent) => {\n this._ngZone.run(() => {\n const resizeHandler = header.getResizeHandler();\n resizeHandler(event);\n });\n };\n\n this._touchstartHandler = (event: TouchEvent) => {\n this._ngZone.run(() => {\n const resizeHandler = header.getResizeHandler();\n resizeHandler(event);\n });\n };\n\n element.addEventListener('mousedown', this._mousedownHandler);\n element.addEventListener('touchstart', this._touchstartHandler, { passive: true });\n }\n\n ngOnDestroy(): void {\n const element = this._elementRef.nativeElement;\n\n if (this._mousedownHandler) {\n element.removeEventListener('mousedown', this._mousedownHandler);\n this._mousedownHandler = null;\n }\n\n if (this._touchstartHandler) {\n element.removeEventListener('touchstart', this._touchstartHandler);\n this._touchstartHandler = null;\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { Cell, CellContext, Row } from '@tanstack/angular-table';\nimport type { ZTableColumnConfig } from '../z-table.types';\nimport { findColumnConfig, isBodyConfig } from '../z-table.util';\n\n@Pipe({\n name: 'zTableCellBottom',\n standalone: true,\n pure: true,\n})\n/**\n * EN: Determines whether a body cell reaches the table bottom after applying rowSpan rules.\n * VI: Xác định cell body có chạm đáy bảng hay không sau khi áp dụng quy tắc rowSpan.\n */\nexport class ZTableCellBottomPipe implements PipeTransform {\n transform<T>(cell: Cell<T, unknown>, columns: ZTableColumnConfig<T>[], allRows: Row<T>[]): boolean {\n if (allRows.length === 0) {\n return false;\n }\n\n const currentRowIndex = allRows.findIndex(r => r.id === cell.row.id);\n if (currentRowIndex === -1) {\n return false;\n }\n\n const lastRowIndex = allRows.length - 1;\n if (currentRowIndex === lastRowIndex) {\n return true;\n }\n\n const columnConfig = findColumnConfig(cell.column.id, columns);\n if (!columnConfig?.body || !isBodyConfig(columnConfig.body)) {\n return false;\n }\n\n const rowSpanValue = columnConfig.body.rowSpan;\n if (!rowSpanValue) {\n return false;\n }\n\n const actualRowSpan = this._getActualRowSpan(cell, currentRowIndex, rowSpanValue, allRows.length);\n if (actualRowSpan === 0) {\n return false;\n }\n\n return currentRowIndex + actualRowSpan - 1 >= lastRowIndex;\n }\n\n private _getActualRowSpan<T>(\n cell: Cell<T, unknown>,\n currentRowIndex: number,\n rowSpanValue: number | ((ctx: CellContext<T, unknown>) => number),\n totalRows: number\n ): number {\n if (typeof rowSpanValue === 'function') {\n return rowSpanValue(cell.getContext());\n }\n\n if (currentRowIndex % rowSpanValue !== 0) {\n return 0;\n }\n\n return Math.min(rowSpanValue, totalRows - currentRowIndex);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { ZTableColumnConfig } from '../z-table.types';\nimport { findColumnConfig, isBodyConfig } from '../z-table.util';\n\n@Pipe({\n name: 'zTableCellClickable',\n standalone: true,\n pure: true,\n})\n/**\n * EN: Resolves whether click interaction is enabled for a body cell from column configuration.\n * VI: Xác định cell body có được phép click hay không dựa theo cấu hình cột.\n */\nexport class ZTableCellClickablePipe implements PipeTransform {\n public transform<T>(columnId: string, columns: ZTableColumnConfig<T>[]): boolean {\n const columnConfig = findColumnConfig(columnId, columns);\n if (!columnConfig) {\n return false;\n }\n\n if (!isBodyConfig(columnConfig.body)) {\n return false;\n }\n\n return columnConfig.body.enabledClick === true;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { ZTooltipConfig } from '@shival99/z-ui/components/z-tooltip';\nimport type { Cell } from '@tanstack/angular-table';\nimport type { ZTableColumnConfig } from '../z-table.types';\nimport { findColumnConfig, getBodyConfig } from '../z-table.util';\n\nconst Z_TABLE_BODY_ALIGN_MAP: Record<string, string> = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n};\n\n@Pipe({\n name: 'zTableCellConfig',\n standalone: true,\n pure: true,\n})\n/**\n * EN: Maps body cell configuration into template-ready class/style/tooltip values.\n * VI: Ánh xạ cấu hình cell body thành giá trị class/style/tooltip để render template.\n */\nexport class ZTableCellConfigPipe implements PipeTransform {\n transform<T>(\n cell: Cell<T, unknown>,\n columns: ZTableColumnConfig<T>[],\n property: 'cellClass' | 'contentClass'\n ): string;\n transform<T>(\n cell: Cell<T, unknown>,\n columns: ZTableColumnConfig<T>[],\n property: 'cellStyle' | 'contentStyle'\n ): Record<string, string>;\n transform<T>(\n cell: Cell<T, unknown>,\n columns: ZTableColumnConfig<T>[],\n property: 'contentTooltip'\n ): string | ZTooltipConfig;\n transform<T>(\n cell: Cell<T, unknown>,\n columns: ZTableColumnConfig<T>[],\n property: 'cellClass' | 'cellStyle' | 'contentClass' | 'contentStyle' | 'contentTooltip'\n ): string | Record<string, string> | ZTooltipConfig {\n const columnConfig = findColumnConfig(cell.column.id, columns);\n const bodyConfig = getBodyConfig(columnConfig, cell.getContext());\n\n switch (property) {\n case 'cellClass':\n return this._getCellClass(bodyConfig);\n\n case 'cellStyle':\n return bodyConfig.style || {};\n\n case 'contentClass':\n return (bodyConfig.contentClass as string) || '';\n\n case 'contentStyle':\n return bodyConfig.contentStyle || {};\n\n case 'contentTooltip':\n return (bodyConfig.tooltip as string | ZTooltipConfig | undefined) || '';\n\n default:\n return '';\n }\n }\n\n private _getCellClass<T>(bodyConfig: ReturnType<typeof getBodyConfig<T>>): string {\n const classes: string[] = [];\n\n if (bodyConfig.align) {\n const alignClass = Z_TABLE_BODY_ALIGN_MAP[bodyConfig.align];\n if (alignClass) {\n classes.push(alignClass);\n }\n }\n\n if (bodyConfig.class) {\n classes.push(bodyConfig.class as string);\n }\n\n return classes.join(' ');\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { CellContext } from '@tanstack/angular-table';\nimport type { ZTableColumnConfig, ZTableEditCellInfo, ZTableEditConfig } from '../z-table.types';\nimport { isBodyConfig, findColumnConfig } from '../z-table.util';\n\n@Pipe({\n name: 'zTableCellEdit',\n standalone: true,\n pure: true,\n})\n/**\n * EN: Normalizes edit settings for a cell and returns a consistent edit descriptor.\n * VI: Chuẩn hóa cấu hình edit của cell và trả về mô tả edit theo một format thống nhất.\n */\nexport class ZTableCellEditPipe implements PipeTransform {\n transform<T>(cell: CellContext<T, unknown>, columns: ZTableColumnConfig<T>[]): ZTableEditCellInfo {\n const columnConfig = findColumnConfig(cell.column.id, columns);\n if (!columnConfig) {\n return { enabled: false, type: 'text', config: null };\n }\n\n const { body } = columnConfig;\n if (!isBodyConfig(body)) {\n return { enabled: false, type: 'text', config: null };\n }\n\n const { edit } = body;\n if (!edit) {\n return { enabled: false, type: 'text', config: null };\n }\n\n if (typeof edit === 'boolean') {\n return {\n enabled: edit,\n type: 'text',\n config: { enabled: edit, type: 'text' },\n };\n }\n\n const baseType = typeof edit.type === 'function' ? 'text' : (edit.type ?? 'text');\n return {\n enabled: edit.enabled !== false,\n type: baseType,\n config: edit as ZTableEditConfig<unknown>,\n };\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { Cell, Column, Header } from '@tanstack/angular-table';\n\n@Pipe({\n name: 'zTableCellOffset',\n standalone: true,\n pure: true,\n})\n/**\n * EN: Checks whether a header/body item starts at the left edge in the ordered column list.\n * VI: Kiểm tra header/cell có nằm ở mép trái của danh sách cột đã sắp xếp hay không.\n */\nexport class ZTableCellOffsetPipe implements PipeTransform {\n /**\n * Calculate if a cell/header is at the left edge (offset = 0)\n * Returns true if the cell should have no border-left (it's at the leftmost position)\n */\n transform<T>(item: Cell<T, unknown> | Header<T, unknown>, orderedColumns: Column<T>[]): boolean {\n const columnId = item.column.id;\n // Find the index of this column in the ordered columns list\n const columnIndex = orderedColumns.findIndex(col => col.id === columnId);\n // If it's the first column (index 0), it's at the left edge\n if (columnIndex === 0) {\n return true;\n }\n // For headers with colSpan, check if any of its leaf columns is the first\n if ('getLeafHeaders' in item) {\n const header = item as Header<T, unknown>;\n const leafHeaders = header.getLeafHeaders();\n\n for (const leaf of leafHeaders) {\n const leafIndex = orderedColumns.findIndex(col => col.id === leaf.column.id);\n if (leafIndex === 0) {\n return true;\n }\n }\n }\n\n return false;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { Header } from '@tanstack/angular-table';\nimport type { ZTableColumnConfig, ZTableCellPinProperty, ZTableCellType } from '../z-table.types';\nimport { findColumnConfig, getHeaderColSpan, getFooterColSpan } from '../z-table.util';\n\n@Pipe({\n name: 'zTableCellPin',\n standalone: true,\n pure: true,\n})\n/**\n * EN: Detects pin-boundary states (last left, first right, last right) for header/footer cells.\n * VI: Xác định các mốc pin (cuối bên trái, đầu bên phải, cuối bên phải) cho cell header/footer.\n */\nexport class ZTableCellPinPipe implements PipeTransform {\n transform<T>(\n item: Header<T, unknown>,\n property: ZTableCellPinProperty,\n columns?: ZTableColumnConfig<T>[],\n cellType: ZTableCellType = 'header'\n ): boolean {\n switch (property) {\n case 'isLastLeftPinned':\n return this._isLastLeftPinned(item, columns ?? [], cellType);\n\n case 'isFirstRightPinned':\n return this._isFirstRightPinned(item, columns ?? [], cellType);\n\n case 'isLastRightPinned':\n return this._isLastRightPinned(item, columns ?? [], cellType);\n\n default:\n return false;\n }\n }\n\n private _isLastLeftPinned<T>(\n header: Header<T, unknown>,\n columns: ZTableColumnConfig<T>[],\n cellType: ZTableCellType\n ): boolean {\n const leafHeaders = header.getLeafHeaders();\n const hasLastLeftPinnedLeaf = leafHeaders.some(\n lh => lh.column.getIsPinned() === 'left' && lh.column.getIsLastColumn('left')\n );\n\n if (hasLastLeftPinnedLeaf) {\n return true;\n }\n\n const columnConfig = findColumnConfig(header.column.id, columns);\n const configColSpan = cellType === 'footer' ? getFooterColSpan(columnConfig) : getHeaderColSpan(columnConfig);\n if (!configColSpan || configColSpan <= 1) {\n return false;\n }\n\n const { headers: allHeadersInGroup } = header.headerGroup;\n const currentIndex = allHeadersInGroup.findIndex(h => h.id === header.id);\n\n if (currentIndex === -1) {\n return false;\n }\n\n for (let i = 0; i < configColSpan && currentIndex + i < allHeadersInGroup.length; i++) {\n const targetHeader = allHeadersInGroup[currentIndex + i];\n const targetLeafHeaders = targetHeader.getLeafHeaders();\n const hasLastLeft = targetLeafHeaders.some(\n lh => lh.column.getIsPinned() === 'left' && lh.column.getIsLastColumn('left')\n );\n\n if (hasLastLeft) {\n return true;\n }\n }\n\n return false;\n }\n\n private _isFirstRightPinned<T>(\n header: Header<T, unknown>,\n columns: ZTableColumnConfig<T>[],\n cellType: ZTableCellType\n ): boolean {\n const leafHeaders = header.getLeafHeaders();\n const hasFirstRightPinnedLeaf = leafHeaders.some(\n lh => lh.column.getIsPinned() === 'right' && lh.column.getIsFirstColumn('right')\n );\n if (hasFirstRightPinnedLeaf) {\n return true;\n }\n\n const columnConfig = findColumnConfig(header.column.id, columns);\n const configColSpan = cellType === 'footer' ? getFooterColSpan(columnConfig) : getHeaderColSpan(columnConfig);\n\n if (!configColSpan || configColSpan <= 1) {\n return false;\n }\n\n const { headers: allHeadersInGroup } = header.headerGroup;\n const currentIndex = allHeadersInGroup.findIndex(h => h.id === header.id);\n\n if (currentIndex === -1) {\n return false;\n }\n\n for (let i = 0; i < configColSpan && currentIndex + i < allHeadersInGroup.length; i++) {\n const targetHeader = allHeadersInGroup[currentIndex + i];\n const targetLeafHeaders = targetHeader.getLeafHeaders();\n const hasFirst = targetLeafHeaders.some(\n lh => lh.column.getIsPinned() === 'right' && lh.column.getIsFirstColumn('right')\n );\n if (hasFirst) {\n return true;\n }\n }\n\n return false;\n }\n\n private _isLastRightPinned<T>(\n header: Header<T, unknown>,\n columns: ZTableColumnConfig<T>[],\n cellType: ZTableCellType\n ): boolean {\n const leafHeaders = header.getLeafHeaders();\n const hasLastRightPinnedLeaf = leafHeaders.some(\n lh => lh.column.getIsPinned() === 'right' && lh.column.getIsLastColumn('right')\n );\n if (hasLastRightPinnedLeaf) {\n return true;\n }\n\n const columnConfig = findColumnConfig(header.column.id, columns);\n const configColSpan = cellType === 'footer' ? getFooterColSpan(columnConfig) : getHeaderColSpan(columnConfig);\n\n if (!configColSpan || configColSpan <= 1) {\n return false;\n }\n\n const { headers: allHeadersInGroup } = header.headerGroup;\n const currentIndex = allHeadersInGroup.findIndex(h => h.id === header.id);\n\n if (currentIndex === -1) {\n return false;\n }\n\n const endIndex = currentIndex + configColSpan - 1;\n if (endIndex >= allHeadersInGroup.length) {\n return false;\n }\n\n const targetHeader = allHeadersInGroup[endIndex];\n const targetLeafHeaders = targetHeader.getLeafHeaders();\n return targetLeafHeaders.some(lh => lh.column.getIsPinned() === 'right' && lh.column.getIsLastColumn('right'));\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { Cell, Header } from '@tanstack/angular-table';\nimport type { ZTableCellRenderType, ZTableColumnConfig } from '../z-table.types';\nimport { shouldBodyCellRenderColSpan, shouldHeaderRender, shouldFooterRender } from '../z-table.util';\n\n@Pipe({\n name: 'zTableCellRender',\n standalone: true,\n pure: true,\n})\n/**\n * EN: Decides whether header/footer/body cells should render when span and merge rules are applied.\n * VI: Quyết định header/footer/body có cần render hay không khi áp dụng quy tắc span và gộp ô.\n */\nexport class ZTableCellRenderPipe implements PipeTransform {\n transform<T>(\n cellOrHeader: Cell<T, unknown> | Header<T, unknown>,\n allCellsOrHeaders: Cell<T, unknown>[] | Header<T, unknown>[],\n columns: ZTableColumnConfig<T>[],\n type: ZTableCellRenderType\n ): boolean {\n switch (type) {\n case 'header':\n return shouldHeaderRender(\n cellOrHeader as Header<T, unknown>,\n allCellsOrHeaders as Header<T, unknown>[],\n columns\n );\n case 'footer':\n return shouldFooterRender(\n cellOrHeader as Header<T, unknown>,\n allCellsOrHeaders as Header<T, unknown>[],\n columns\n );\n case 'body':\n return shouldBodyCellRenderColSpan(\n cellOrHeader as Cell<T, unknown>,\n allCellsOrHeaders as Cell<T, unknown>[],\n columns\n );\n default:\n return true;\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { Cell } from '@tanstack/angular-table';\nimport type { ZTableColumnConfig } from '../z-table.types';\nimport { findColumnConfig, isBodyConfig } from '../z-table.util';\n\n@Pipe({\n name: 'zTableCellVisible',\n standalone: true,\n pure: true,\n})\n/**\n * EN: Resolves per-cell visibility from static or callback-based body visibility config.\n * VI: Xác định độ hiển thị của từng cell từ cấu hình visible dạng static hoặc callback.\n */\nexport class ZTableCellVisiblePipe implements PipeTransform {\n transform<T>(cell: Cell<T, unknown>, columns: ZTableColumnConfig<T>[]): boolean {\n const columnConfig = findColumnConfig(cell.column.id, columns);\n if (!columnConfig) {\n return true;\n }\n\n const { body } = columnConfig;\n if (!isBodyConfig(body)) {\n return true;\n }\n\n const { visible } = body;\n if (visible === undefined) {\n return true;\n }\n\n if (typeof visible === 'function') {\n return visible(cell.getContext());\n }\n\n return visible;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { ZTooltipConfig } from '@shival99/z-ui/components/z-tooltip';\nimport type { ZTableColumnConfig } from '../z-table.types';\nimport { findColumnConfig, getHeaderConfig, getFooterConfig, isBodyConfig } from '../z-table.util';\n\nconst Z_TABLE_ALIGN_MAP: Record<string, string> = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n};\n\n@Pipe({\n name: 'zTableColumnConfig',\n standalone: true,\n pure: true,\n})\n/**\n * EN: Exposes header/footer/body-related column settings (class, style, tooltip, width, capabilities).\n * VI: Cung cấp cấu hình cột liên quan header/footer/body (class, style, tooltip, width, khả năng).\n */\nexport class ZTableColumnConfigPipe implements PipeTransform {\n transform<T>(\n columnId: string,\n columns: ZTableColumnConfig<T>[],\n property:\n | 'headerClass'\n | 'headerAlignClass'\n | 'headerContentClass'\n | 'footerClass'\n | 'footerAlignClass'\n | 'footerContentClass'\n ): string;\n transform<T>(\n columnId: string,\n columns: ZTableColumnConfig<T>[],\n property: 'headerStyle' | 'headerContentStyle' | 'footerStyle' | 'footerContentStyle'\n ): Record<string, string>;\n transform<T>(\n columnId: string,\n columns: ZTableColumnConfig<T>[],\n property: 'headerTooltip' | 'footerTooltip'\n ): string | ZTooltipConfig;\n transform<T>(\n columnId: string,\n columns: ZTableColumnConfig<T>[],\n property: 'hasBodyRowSpan' | 'enableOrdering' | 'enablePinning'\n ): boolean;\n transform<T>(columnId: string, columns: ZTableColumnConfig<T>[], property: 'footerContent'): unknown;\n transform<T>(columnId: string, columns: ZTableColumnConfig<T>[], property: 'width'): string | undefined;\n transform<T>(\n columnId: string,\n columns: ZTableColumnConfig<T>[],\n property:\n | 'headerClass'\n | 'headerStyle'\n | 'headerTooltip'\n | 'headerAlignClass'\n | 'headerContentClass'\n | 'headerContentStyle'\n | 'footerClass'\n | 'footerStyle'\n | 'footerTooltip'\n | 'footerAlignClass'\n | 'footerContentClass'\n | 'footerContentStyle'\n | 'hasBodyRowSpan'\n | 'footerContent'\n | 'enableOrdering'\n | 'enablePinning'\n | 'width'\n ): string | Record<string, string> | ZTooltipConfig | boolean | unknown {\n const columnConfig = findColumnConfig(columnId, columns);\n\n switch (property) {\n case 'headerClass': {\n const headerConfig = getHeaderConfig(columnConfig);\n return headerConfig.class || '';\n }\n\n case 'headerStyle': {\n const headerConfig = getHeaderConfig(columnConfig);\n return headerConfig.style || {};\n }\n\n case 'headerTooltip': {\n const headerConfig = getHeaderConfig(columnConfig);\n return (headerConfig.tooltip as string | ZTooltipConfig) || '';\n }\n\n case 'headerAlignClass': {\n const headerConfig = getHeaderConfig(columnConfig);\n return headerConfig.align ? Z_TABLE_ALIGN_MAP[headerConfig.align] || '' : '';\n }\n\n case 'headerContentClass': {\n const headerConfig = getHeaderConfig(columnConfig);\n const { contentClass } = headerConfig;\n if (typeof contentClass === 'function') {\n return '';\n }\n return contentClass || '';\n }\n\n case 'headerContentStyle': {\n const headerConfig = getHeaderConfig(columnConfig);\n const { contentStyle } = headerConfig;\n if (typeof contentStyle === 'function') {\n return {};\n }\n return contentStyle || {};\n }\n\n case 'footerClass': {\n const footerConfig = getFooterConfig(columnConfig);\n return footerConfig.class || '';\n }\n\n case 'footerStyle': {\n const footerConfig = getFooterConfig(columnConfig);\n return footerConfig.style || {};\n }\n\n case 'footerTooltip': {\n const footerConfig = getFooterConfig(columnConfig);\n return (footerConfig.tooltip as string | ZTooltipConfig) || '';\n }\n\n case 'footerAlignClass': {\n const footerConfig = getFooterConfig(columnConfig);\n return footerConfig.align ? Z_TABLE_ALIGN_MAP[footerConfig.align] || '' : '';\n }\n\n case 'footerContentClass': {\n const footerConfig = getFooterConfig(columnConfig);\n const { contentClass } = footerConfig;\n if (typeof contentClass === 'function') {\n return '';\n }\n return contentClass || '';\n }\n\n case 'footerContentStyle': {\n const footerConfig = getFooterConfig(columnConfig);\n const { contentStyle } = footerConfig;\n if (typeof contentStyle === 'function') {\n return {};\n }\n return contentStyle || {};\n }\n\n case 'hasBodyRowSpan':\n return columnConfig ? isBodyConfig(columnConfig.body) && columnConfig.body.rowSpan !== undefined : false;\n\n case 'enableOrdering':\n return columnConfig?.enableOrdering !== false;\n\n case 'enablePinning':\n return columnConfig?.enablePinning !== false;\n\n case 'footerContent': {\n const footerConfig = getFooterConfig(columnConfig);\n return footerConfig.content || '';\n }\n\n case 'width':\n return columnConfig?.width;\n\n default:\n return '';\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { ZTableColumnConfig } from '../z-table.types';\nimport { findColumnConfig, getHeaderConfig, stripIconSyntax } from '../z-table.util';\n\n@Pipe({\n name: 'zTableColumnHeader',\n standalone: true,\n pure: true,\n})\n/**\n * EN: Returns a plain-text header label for a column and removes icon syntax markers.\n * VI: Trả về nhãn header dạng text cho cột và loại bỏ cú pháp icon marker.\n */\nexport class ZTableColumnHeaderPipe implements PipeTransform {\n transform<T>(columnId: string, columns: ZTableColumnConfig<T>[]): string {\n const columnConfig = findColumnConfig(columnId, columns);\n if (!columnConfig) {\n return columnId;\n }\n\n const headerConfig = getHeaderConfig(columnConfig);\n if (typeof headerConfig.content === 'string') {\n return stripIconSyntax(headerConfig.content);\n }\n\n return columnId;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { ZTableColumnConfig } from '../z-table.types';\nimport { getHeaderConfig, stripIconSyntax } from '../z-table.util';\n\n@Pipe({\n name: 'zTableColumnParents',\n standalone: true,\n pure: true,\n})\n/**\n * EN: Builds the parent-column breadcrumb path for a nested column.\n * VI: Tạo đường dẫn breadcrumb các cột cha cho cột lồng nhau.\n */\nexport class ZTableColumnParentsPipe implements PipeTransform {\n transform<T>(columnId: string, columns: ZTableColumnConfig<T>[]): string {\n const parents: string[] = [];\n this._findParents(columnId, columns, parents);\n return parents.length > 0 ? parents.join(' › ') : '';\n }\n\n private _findParents<T>(\n columnId: string,\n columns: ZTableColumnConfig<T>[],\n parents: string[],\n currentParents: string[] = []\n ): boolean {\n for (const col of columns) {\n if (col.id === columnId) {\n parents.push(...currentParents);\n return true;\n }\n\n if (col.columns && col.columns.length > 0) {\n const parentName = this._getColumnName(col);\n const found = this._findParents(columnId, col.columns, parents, [...currentParents, parentName]);\n if (found) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n private _getColumnName<T>(col: ZTableColumnConfig<T>): string {\n const headerConfig = getHeaderConfig(col);\n if (typeof headerConfig.content === 'string') {\n return stripIconSyntax(headerConfig.content);\n }\n return col.id;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { Header } from '@tanstack/angular-table';\nimport type { ZTableColumnConfig } from '../z-table.types';\nimport { findColumnConfig } from '../z-table.util';\n\n@Pipe({\n name: 'zTableFooterContent',\n standalone: true,\n pure: true,\n})\n/**\n * EN: Checks whether a footer group has at least one configured footer cell to render.\n * VI: Kiểm tra footer group có ít nhất một cell footer được cấu hình để render hay không.\n */\nexport class ZTableFooterContentPipe implements PipeTransform {\n transform<T>(footerGroup: { headers: Header<T, unknown>[] }, columns: ZTableColumnConfig<T>[]): boolean {\n return footerGroup.headers.some(header => {\n const columnConfig = findColumnConfig(header.column.id, columns);\n return columnConfig?.footer !== undefined;\n });\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { hasIconSyntax } from '../z-table.util';\n\n@Pipe({\n name: 'zTableHasIcon',\n standalone: true,\n pure: true,\n})\n/**\n * EN: Detects whether a string content contains the table icon placeholder syntax.\n * VI: Kiểm tra nội dung chuỗi có chứa cú pháp placeholder icon của table hay không.\n */\nexport class ZTableHasIconPipe implements PipeTransform {\n transform(content: unknown): boolean {\n if (typeof content !== 'string') {\n return false;\n }\n\n return hasIconSyntax(content);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { Column, Cell, Header, Table } from '@tanstack/angular-table';\nimport type { ZPinningStyles, ZTableColumnConfig } from '../z-table.types';\nimport {\n shouldHeaderRender,\n getHeaderColSpan,\n getFooterColSpan,\n findColumnConfig,\n getBodyColSpan,\n shouldBodyCellRenderColSpan,\n shouldFooterRender,\n} from '../z-table.util';\n\n@Pipe({\n name: 'zTablePinningStyles',\n standalone: true,\n pure: false,\n})\n/**\n * EN: Calculates sticky pinning style offsets for header, body, and footer cells, including colSpan cases.\n * VI: Tính toán offset sticky pinning cho header, body và footer, bao gồm các trường hợp có colSpan.\n */\nexport class ZTablePinningStylesPipe implements PipeTransform {\n /**\n * Main transform method - routes to appropriate calculation based on type\n *\n * @param column - The column being styled\n * @param item - The cell or header item\n * @param type - 'header' | 'body' | 'footer'\n * @param tableOrCells - Table instance or array of cells\n * @param columns - Column configuration array\n * @param _sizingTrigger - Optional sizing trigger to force recalculation on resize\n * @returns CSS style object for sticky positioning\n */\n transform<T>(\n column: Column<T, unknown>,\n item: Cell<T, unknown> | Header<T, unknown> | null,\n type: 'header' | 'body' | 'footer',\n tableOrCells?: Table<T> | Cell<T, unknown>[],\n columns?: ZTableColumnConfig<T>[],\n _sizingTrigger?: unknown\n ): Record<string, string | number | undefined> {\n if (type === 'body') {\n const allCells = Array.isArray(tableOrCells) ? tableOrCells : undefined;\n return this._getBodyPinningStyles(column, item as Cell<T, unknown>, allCells, columns || []);\n }\n\n if (type === 'footer' && item && tableOrCells && !Array.isArray(tableOrCells)) {\n return this._getFooterPinningStyles(column, item as Header<T, unknown>, tableOrCells, columns || []);\n }\n\n if (type === 'header' && item && tableOrCells && !Array.isArray(tableOrCells)) {\n return this._getHeaderPinningStyles(column, item as Header<T, unknown>, tableOrCells, columns || []);\n }\n\n return {};\n }\n\n private _getBodyPinningStyles<T>(\n column: Column<T, unknown>,\n cell: Cell<T, unknown> | null,\n allCells: Cell<T, unknown>[] | undefined,\n columns: ZTableColumnConfig<T>[]\n ): ZPinningStyles {\n const isPinned = column.getIsPinned();\n let leftOffset = column.getStart('left');\n let rightOffset = column.getAfter('right');\n\n if (allCells && cell && isPinned === 'left') {\n leftOffset = this._calculateBodyLeftOffset(cell, allCells, columns);\n }\n\n if (allCells && cell && isPinned === 'right') {\n rightOffset = this._calculateBodyRightOffset(cell, allCells, columns);\n }\n\n return this._buildPinningResult(isPinned, leftOffset, rightOffset);\n }\n\n /**\n * Calculates left offset for a body cell considering colspan.\n * Sums widths of all cells before the current cell.\n */\n private _calculateBodyLeftOffset<T>(\n cell: Cell<T, unknown>,\n allCells: Cell<T, unknown>[],\n columns: ZTableColumnConfig<T>[]\n ): number {\n const currentIdx = allCells.findIndex(c => c.id === cell.id);\n if (currentIdx <= 0) {\n return 0;\n }\n\n let calculatedOffset = 0;\n for (let i = 0; i < currentIdx; i++) {\n const prevCell = allCells[i];\n // Skip cells that are covered by colspan from previous cells\n if (!shouldBodyCellRenderColSpan(prevCell, allCells, columns)) {\n continue;\n }\n\n calculatedOffset += this._getCellWidthWithColspan(prevCell, allCells, i, columns);\n }\n\n return calculatedOffset;\n }\n\n /**\n * Calculates right offset for a body cell considering colspan.\n * Sums widths of all cells after the current cell.\n */\n private _calculateBodyRightOffset<T>(\n cell: Cell<T, unknown>,\n allCells: Cell<T, unknown>[],\n columns: ZTableColumnConfig<T>[]\n ): number {\n const currentIdx = allCells.findIndex(c => c.id === cell.id);\n // Last cell has 0 right offset\n if (currentIdx === allCells.length - 1) {\n return 0;\n }\n\n if (currentIdx < 0) {\n return 0;\n }\n\n let calculatedOffset = 0;\n for (let i = currentIdx + 1; i < allCells.length; i++) {\n const nextCell = allCells[i];\n\n // Skip cells that are covered by colspan\n if (!shouldBodyCellRenderColSpan(nextCell, allCells, columns)) {\n continue;\n }\n\n calculatedOffset += this._getCellWidthWithColspan(nextCell, allCells, i, columns);\n }\n\n return calculatedOffset;\n }\n\n /**\n * Gets cell width including any colspan expansion.\n * If cell has colspan > 1, adds widths of covered cells.\n */\n private _getCellWidthWithColspan<T>(\n cell: Cell<T, unknown>,\n allCells: Cell<T, unknown>[],\n cellIndex: number,\n columns: ZTableColumnConfig<T>[]\n ): number {\n const config = findColumnConfig(cell.column.id, columns);\n const colSpan = getBodyColSpan(config, cell.getContext());\n\n if (colSpan && colSpan > 1) {\n let spanWidth = cell.column.getSize();\n for (let j = 1; j < colSpan && cellIndex + j < allCells.length; j++) {\n spanWidth += allCells[cellIndex + j].column.getSize();\n }\n return spanWidth;\n }\n\n return cell.column.getSize();\n }\n\n private _getHeaderPinningStyles<T>(\n column: Column<T, unknown>,\n headerCurrent: Header<T, unknown>,\n table: Table<T>,\n columns: ZTableColumnConfig<T>[]\n ): ZPinningStyles {\n const isPinnedColumn = column.getIsPinned();\n if (!isPinnedColumn) {\n return this._buildPinningResult(undefined, 0, 0);\n }\n\n const isChildPinned = this._determineChildPinDirection(column, headerCurrent);\n const headerGroups = headerCurrent.headerGroup.headers;\n\n let leftOffset: number | undefined;\n let rightOffset: number | undefined;\n\n if (isChildPinned === 'left') {\n leftOffset = this._calculateHeaderLeftOffset(headerCurrent, headerGroups, columns);\n }\n\n if (isChildPinned === 'right') {\n rightOffset = this._calculateHeaderRightOffset(headerCurrent, headerGroups, columns);\n }\n\n return {\n position: isChildPinned ? 'sticky' : 'relative',\n zIndex: isChildPinned ? 1 : 0,\n left: leftOffset !== undefined ? `${leftOffset}px` : undefined,\n right: rightOffset !== undefined ? `${rightOffset}px` : undefined,\n };\n }\n\n /**\n * Determines if any child header is pinned and returns the direction.\n * Checks leaf headers to find pinning status.\n */\n private _determineChildPinDirection<T>(\n column: Column<T, unknown>,\n header: Header<T, unknown>\n ): 'left' | 'right' | undefined {\n const isPinnedColumn = column.getIsPinned();\n const leafHeaders = header.getLeafHeaders();\n const filterChild = leafHeaders.filter(h => h.column.id !== column.id);\n\n // No children - use column's own pin status\n if (filterChild.length === 0) {\n return isPinnedColumn || undefined;\n }\n\n // Check if any child is pinned\n for (const child of filterChild) {\n const isPinned = child.column.getIsPinned();\n if (isPinned) {\n return isPinned;\n }\n }\n\n return undefined;\n }\n\n /**\n * Calculates left offset for a header cell.\n * Sums widths of all left-pinned headers before current header.\n */\n private _calculateHeaderLeftOffset<T>(\n headerCurrent: Header<T, unknown>,\n headerGroups: Header<T, unknown>[],\n columns: ZTableColumnConfig<T>[]\n ): number {\n const headersBeforeCurrent = this._getLeftPinnedHeadersBefore(headerCurrent, headerGroups);\n\n return headersBeforeCurrent.reduce((sum, h) => {\n if (!shouldHeaderRender(h, headerGroups, columns)) {\n return sum;\n }\n return sum + this._getHeaderWidthWithColspan(h, headerGroups, columns, 'header');\n }, 0);\n }\n\n /**\n * Calculates right offset for a header cell.\n * Sums widths of all right-pinned headers after current header.\n */\n private _calculateHeaderRightOffset<T>(\n headerCurrent: Header<T, unknown>,\n headerGroups: Header<T, unknown>[],\n columns: ZTableColumnConfig<T>[]\n ): number {\n const headersAfterCurrent = this._getRightPinnedHeadersAfter(headerCurrent, headerGroups);\n\n return headersAfterCurrent.reduce((sum, h) => {\n if (!shouldHeaderRender(h, headerGroups, columns)) {\n return sum;\n }\n return sum + this._getHeaderWidthWithColspan(h, headerGroups, columns, 'header');\n }, 0);\n }\n\n /**\n * Gets all left-pinned headers that appear before the current header.\n */\n private _getLeftPinnedHeadersBefore<T>(\n headerCurrent: Header<T, unknown>,\n headerGroups: Header<T, unknown>[]\n ): Header<T, unknown>[] {\n const result: Header<T, unknown>[] = [];\n const indexOfHeader = headerGroups.findIndex(h => h.id === headerCurrent.id);\n\n for (let i = 0; i < indexOfHeader; i++) {\n const leafs = headerGroups[i].getLeafHeaders();\n const hasLeftPinned = leafs.some(lh => lh.column.getIsPinned() === 'left');\n if (hasLeftPinned) {\n result.push(headerGroups[i]);\n }\n }\n\n return result;\n }\n\n /**\n * Gets all headers that appear after the current header (for right pinning).\n */\n private _getRightPinnedHeadersAfter<T>(\n headerCurrent: Header<T, unknown>,\n headerGroups: Header<T, unknown>[]\n ): Header<T, unknown>[] {\n const result: Header<T, unknown>[] = [];\n const reversed = [...headerGroups].reverse();\n const indexOfHeader = reversed.findIndex(h => h.id === headerCurrent.id);\n\n for (let i = 0; i < indexOfHeader; i++) {\n result.push(reversed[i]);\n }\n\n return result;\n }\n\n private _getFooterPinningStyles<T>(\n column: Column<T, unknown>,\n footerCurrent: Header<T, unknown>,\n table: Table<T>,\n columns: ZTableColumnConfig<T>[]\n ): ZPinningStyles {\n const isPinnedColumn = column.getIsPinned();\n if (!isPinnedColumn) {\n return this._buildPinningResult(undefined, 0, 0);\n }\n\n const isChildPinned = this._determineChildPinDirection(column, footerCurrent);\n const footerHeaders = footerCurrent.headerGroup.headers;\n\n let leftOffset: number | undefined;\n let rightOffset: number | undefined;\n\n if (isChildPinned === 'left') {\n leftOffset = this._calculateFooterLeftOffset(footerCurrent, footerHeaders, columns);\n }\n\n if (isChildPinned === 'right') {\n rightOffset = this._calculateFooterRightOffset(footerCurrent, footerHeaders, columns);\n }\n\n return {\n position: isChildPinned ? 'sticky' : 'relative',\n zIndex: isChildPinned ? 1 : 0,\n left: leftOffset !== undefined ? `${leftOffset}px` : undefined,\n right: rightOffset !== undefined ? `${rightOffset}px` : undefined,\n };\n }\n\n /**\n * Calculates left offset for a footer cell.\n * Sums widths of all left-pinned footers before current footer.\n */\n private _calculateFooterLeftOffset<T>(\n footerCurrent: Header<T, unknown>,\n footerHeaders: Header<T, unknown>[],\n columns: ZTableColumnConfig<T>[]\n ): number {\n const footersBeforeCurrent = this._getLeftPinnedHeadersBefore(footerCurrent, footerHeaders);\n\n return footersBeforeCurrent.reduce((sum, h) => {\n if (!shouldFooterRender(h, footerHeaders, columns)) {\n return sum;\n }\n return sum + this._getHeaderWidthWithColspan(h, footerHeaders, columns, 'footer');\n }, 0);\n }\n\n /**\n * Calculates right offset for a footer cell.\n * Handles colspan coverage to exclude covered cells from calculation.\n */\n private _calculateFooterRightOffset<T>(\n footerCurrent: Header<T, unknown>,\n footerHeaders: Header<T, unknown>[],\n columns: ZTableColumnConfig<T>[]\n ): number {\n const footersAfterCurrent = this._getRightPinnedHeadersAfter(footerCurrent, footerHeaders);\n // Check if current footer has colspan\n const currentConfig = findColumnConfig(footerCurrent.column.id, columns);\n const currentColSpan = getFooterColSpan(currentConfig);\n\n if (currentColSpan && currentColSpan > 1) {\n return this._calculateRightOffsetWithColspan(\n footerCurrent,\n footerHeaders,\n footersAfterCurrent,\n currentColSpan,\n columns\n );\n }\n\n // No colspan - sum all footers after\n return footersAfterCurrent.reduce((sum, h) => {\n if (!shouldFooterRender(h, footerHeaders, columns)) {\n return sum;\n }\n return sum + this._getHeaderWidthWithColspan(h, footerHeaders, columns, 'footer');\n }, 0);\n }\n\n /**\n * Calculates right offset when current footer has colspan.\n * Excludes cells that are covered by the colspan.\n */\n private _calculateRightOffsetWithColspan<T>(\n footerCurrent: Header<T, unknown>,\n footerHeaders: Header<T, unknown>[],\n footersAfterCurrent: Header<T, unknown>[],\n colSpan: number,\n columns: ZTableColumnConfig<T>[]\n ): number {\n const currentIdx = footerHeaders.findIndex(h => h.id === footerCurrent.id);\n const coveredCount = Math.min(colSpan - 1, footerHeaders.length - currentIdx - 1);\n\n // Build set of covered column IDs\n const coveredColumnIds = new Set<string>();\n for (let j = 1; j <= coveredCount && currentIdx + j < footerHeaders.length; j++) {\n coveredColumnIds.add(footerHeaders[currentIdx + j].id);\n }\n\n // Only sum uncovered footers\n const uncoveredFooters = footersAfterCurrent.filter(h => !coveredColumnIds.has(h.id));\n\n return uncoveredFooters.reduce((sum, h) => {\n if (!shouldFooterRender(h, footerHeaders, columns)) {\n return sum;\n }\n return sum + h.column.getSize();\n }, 0);\n }\n\n private _getHeaderWidthWithColspan<T>(\n header: Header<T, unknown>,\n allHeaders: Header<T, unknown>[],\n columns: ZTableColumnConfig<T>[],\n type: 'header' | 'footer'\n ): number {\n const getColSpan = type === 'header' ? getHeaderColSpan : getFooterColSpan;\n const shouldRender = type === 'header' ? shouldHeaderRender : shouldFooterRender;\n if (header.subHeaders.length > 0) {\n const pinDirection = type === 'header' ? 'left' : 'right';\n return header.subHeaders\n .filter(subH => subH.column.getIsPinned() === pinDirection || subH.column.getIsPinned())\n .filter(subH => shouldRender(subH, header.subHeaders, columns))\n .reduce((subAcc, subH) => subAcc + this._getSingleHeaderWidth(subH, header.subHeaders, columns, getColSpan), 0);\n }\n\n return this._getSingleHeaderWidth(header, allHeaders, columns, getColSpan);\n }\n\n /**\n * Gets width of a single header considering its colspan.\n */\n private _getSingleHeaderWidth<T>(\n header: Header<T, unknown>,\n allHeaders: Header<T, unknown>[],\n columns: ZTableColumnConfig<T>[],\n getColSpanFn: (config: ZTableColumnConfig<T> | undefined) => number | undefined\n ): number {\n const config = findColumnConfig(header.column.id, columns);\n const colSpan = getColSpanFn(config);\n\n if (colSpan && colSpan > 1) {\n const currentIdx = allHeaders.findIndex(h => h.id === header.id);\n let totalWidth = header.column.getSize();\n\n for (let j = 1; j < colSpan && currentIdx + j < allHeaders.length; j++) {\n totalWidth += allHeaders[currentIdx + j].column.getSize();\n }\n\n return totalWidth;\n }\n\n return header.column.getSize();\n }\n\n /**\n * Builds the final pinning styles result object.\n */\n private _buildPinningResult(\n isPinned: 'left' | 'right' | false | undefined,\n leftOffset: number,\n rightOffset: number\n ): ZPinningStyles {\n return {\n left: isPinned === 'left' ? `${leftOffset}px` : undefined,\n right: isPinned === 'right' ? `${rightOffset}px` : undefined,\n position: isPinned ? 'sticky' : 'relative',\n zIndex: isPinned ? 1 : 0,\n };\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { Row, Table } from '@tanstack/angular-table';\n\n@Pipe({\n name: 'zTableRow',\n standalone: true,\n pure: true,\n})\n/**\n * EN: Provides row-level pin metadata and sticky style offsets for top/bottom pinned rows.\n * VI: Cung cấp metadata pin theo row và offset style sticky cho các row pin top/bottom.\n */\nexport class ZTableRowPipe implements PipeTransform {\n transform<T>(row: Row<T>, table: Table<T>, property: 'isLastTopPinned' | 'isFirstBottomPinned'): boolean;\n transform<T>(\n row: Row<T>,\n table: Table<T>,\n property: 'pinningStyles',\n rowHeights: Record<string, number>,\n virtualRowHeight?: number\n ): Record<string, string | number>;\n transform<T>(\n row: Row<T>,\n table: Table<T>,\n property: 'isLastTopPinned' | 'isFirstBottomPinned' | 'pinningStyles',\n rowHeights?: Record<string, number>,\n virtualRowHeight?: number\n ): boolean | Record<string, string | number> {\n switch (property) {\n case 'isLastTopPinned':\n return this._isLastTopPinnedRow(row, table);\n\n case 'isFirstBottomPinned':\n return this._isFirstBottomPinnedRow(row, table);\n\n case 'pinningStyles':\n return this._getRowPinningStyles(row, table, rowHeights ?? {}, virtualRowHeight ?? 40);\n\n default:\n return false;\n }\n }\n\n private _isLastTopPinnedRow<T>(row: Row<T>, table: Table<T>): boolean {\n const topRows = table.getTopRows();\n if (topRows.length === 0) {\n return false;\n }\n return row.getPinnedIndex() === topRows.length - 1;\n }\n\n private _isFirstBottomPinnedRow<T>(row: Row<T>, table: Table<T>): boolean {\n const bottomRows = table.getBottomRows();\n if (bottomRows.length === 0) {\n return false;\n }\n return row.getPinnedIndex() === bottomRows.length - 1;\n }\n\n private _getRowPinningStyles<T>(\n row: Row<T>,\n table: Table<T>,\n rowHeights: Record<string, number>,\n virtualRowHeight: number\n ): Record<string, string | number> {\n const pinned = row.getIsPinned();\n if (!pinned) {\n return {};\n }\n\n const pinnedIndex = row.getPinnedIndex();\n const defaultHeight = virtualRowHeight + 2;\n\n if (pinned === 'top') {\n let offset = 0;\n const topRows = table.getTopRows();\n for (let i = 0; i < pinnedIndex; i++) {\n offset += rowHeights[topRows[i].id] ?? defaultHeight;\n }\n\n return { position: 'sticky', top: `${offset}px`, zIndex: 2 };\n }\n\n if (pinned === 'bottom') {\n let offset = 0;\n const bottomRows = table.getBottomRows();\n for (let i = 0; i < pinnedIndex; i++) {\n offset += rowHeights[bottomRows[i].id] ?? defaultHeight;\n }\n\n return { position: 'sticky', bottom: `${offset}px`, zIndex: 2 };\n }\n\n return {};\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { Cell, Header, Row } from '@tanstack/angular-table';\nimport type { ZTableColumnConfig } from '../z-table.types';\nimport {\n findColumnConfig,\n calculateCellRowSpan,\n calculateCellColSpan,\n calculateHeaderRowSpan,\n calculateHeaderColSpan,\n calculateFooterRowSpan,\n calculateFooterColSpan,\n shouldCellRenderUtil,\n} from '../z-table.util';\n\n@Pipe({\n name: 'zTableSpan',\n standalone: true,\n pure: true,\n})\n/**\n * EN: Computes rowSpan/colSpan and render visibility for body, header, and footer table cells.\n * VI: Tính rowSpan/colSpan và khả năng render cho cell body, header và footer của bảng.\n */\nexport class ZTableSpanPipe implements PipeTransform {\n transform<T>(\n item: Cell<T, unknown> | Header<T, unknown>,\n columns: ZTableColumnConfig<T>[],\n property: 'cellRowSpan' | 'cellColSpan' | 'headerRowSpan' | 'headerColSpan' | 'footerRowSpan' | 'footerColSpan',\n allRows?: Row<T>[]\n ): number | null;\n transform<T>(\n item: Cell<T, unknown>,\n columns: ZTableColumnConfig<T>[],\n property: 'shouldRender',\n allRows?: Row<T>[]\n ): boolean;\n transform<T>(\n item: Cell<T, unknown> | Header<T, unknown>,\n columns: ZTableColumnConfig<T>[],\n property:\n | 'cellRowSpan'\n | 'cellColSpan'\n | 'headerRowSpan'\n | 'headerColSpan'\n | 'footerRowSpan'\n | 'footerColSpan'\n | 'shouldRender',\n allRows?: Row<T>[]\n ): number | null | boolean {\n const columnConfig = findColumnConfig(item.column.id, columns);\n\n switch (property) {\n case 'cellRowSpan':\n return calculateCellRowSpan(item as Cell<T, unknown>, columnConfig, allRows ?? []);\n\n case 'cellColSpan':\n return calculateCellColSpan(item as Cell<T, unknown>, columnConfig);\n\n case 'headerRowSpan':\n return calculateHeaderRowSpan(item as Header<T, unknown>, columnConfig, columns);\n\n case 'headerColSpan':\n return calculateHeaderColSpan(item as Header<T, unknown>, columnConfig);\n\n case 'footerRowSpan':\n return calculateFooterRowSpan(item as Header<T, unknown>, columnConfig);\n\n case 'footerColSpan':\n return calculateFooterColSpan(item as Header<T, unknown>, columnConfig);\n\n case 'shouldRender':\n return shouldCellRenderUtil(item as Cell<T, unknown>, columnConfig, allRows ?? []);\n\n default:\n return null;\n }\n }\n}\n","import { Pipe, PipeTransform, TemplateRef } from '@angular/core';\n\n@Pipe({\n name: 'zTableIsTemplateRef',\n standalone: true,\n pure: true,\n})\n/**\n * EN: Type guard pipe that checks if a value is an Angular TemplateRef.\n * VI: Pipe type guard để kiểm tra giá trị có phải là Angular TemplateRef hay không.\n */\nexport class ZTableIsTemplateRefPipe implements PipeTransform {\n transform(value: unknown): value is TemplateRef<unknown> {\n return value instanceof TemplateRef;\n }\n}\n","/* eslint-disable @stylistic/indent */\nimport { CdkDrag, CdkDropList, type CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { NgClass, NgStyle, NgTemplateOutlet } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n input,\n output,\n signal,\n TemplateRef,\n untracked,\n viewChild,\n viewChildren,\n afterNextRender,\n} from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { injectVirtualizer } from '@shival99/angular-virtual';\nimport { ZButtonComponent } from '@shival99/z-ui/components/z-button';\nimport { ZCheckboxComponent } from '@shival99/z-ui/components/z-checkbox';\nimport { ZDrawerComponent } from '@shival99/z-ui/components/z-drawer';\nimport { ZEmptyComponent } from '@shival99/z-ui/components/z-empty';\nimport { ZIconComponent } from '@shival99/z-ui/components/z-icon';\nimport { ZInputComponent } from '@shival99/z-ui/components/z-input';\nimport { ZLoadingComponent } from '@shival99/z-ui/components/z-loading';\nimport { ZPaginationComponent } from '@shival99/z-ui/components/z-pagination';\nimport { ZPopoverDirective } from '@shival99/z-ui/components/z-popover';\nimport { ZSkeletonComponent } from '@shival99/z-ui/components/z-skeleton';\nimport { ZTooltipDirective } from '@shival99/z-ui/components/z-tooltip';\nimport { ZFormatNumPipe, ZSafeHtmlPipe } from '@shival99/z-ui/pipes';\nimport { ZCacheService, ZTranslateService } from '@shival99/z-ui/services';\nimport { zMergeClasses } from '@shival99/z-ui/utils';\nimport {\n ColumnDef,\n ColumnFiltersState,\n ColumnOrderState,\n ColumnPinningState,\n createAngularTable,\n ExpandedState,\n FlexRenderDirective,\n getCoreRowModel,\n getExpandedRowModel,\n getFacetedMinMaxValues,\n getFacetedRowModel,\n getFacetedUniqueValues,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n PaginationState,\n Row,\n RowPinningState,\n RowSelectionState,\n SortingState,\n VisibilityState,\n} from '@tanstack/angular-table';\nimport { ClassValue } from 'clsx';\nimport { NgScrollbar } from 'ngx-scrollbar';\nimport { explicitEffect } from 'ngxtension/explicit-effect';\nimport { injectDestroy } from 'ngxtension/inject-destroy';\nimport { ZTableActionsComponent } from './components/z-table-actions.component';\nimport { ZTableEditCellComponent } from './components/z-table-edit-cell.component';\nimport { ZTableFilterComponent } from './components/z-table-filter.component';\nimport { ZTableIconTextComponent } from './components/z-table-icon-text.component';\nimport { ZTableResizeDirective, ZTableRowHoverDirective } from './directives';\nimport {\n ZTableCellBottomPipe,\n ZTableCellClickablePipe,\n ZTableCellConfigPipe,\n ZTableCellEditPipe,\n ZTableCellOffsetPipe,\n ZTableCellPinPipe,\n ZTableCellVisiblePipe,\n ZTableColumnConfigPipe,\n ZTableColumnParentsPipe,\n ZTableFooterContentPipe,\n ZTablePinningStylesPipe,\n ZTableRowPipe,\n ZTableSpanPipe,\n ZTableIsTemplateRefPipe,\n ZTableHasIconPipe,\n ZTableColumnHeaderPipe,\n} from './pipes';\nimport { ZTableCellRenderPipe } from './pipes/z-table-cell-render.pipe';\nimport {\n Z_DEFAULT_DEBOUNCE_TIME,\n Z_DEFAULT_GROUP_SIZE,\n Z_DEFAULT_ROW_HEIGHT,\n Z_DEFAULT_VIRTUAL_OVERSCAN,\n Z_SKELETON_ROW_HEIGHT,\n Z_TABLE_DEFAULT_ACTION_BUTTON_WIDTH,\n ZTableActionClickEvent,\n ZTableActionColumnConfig,\n ZTableChangeEvent,\n ZTableColumnConfig,\n ZTableConfig,\n ZTableControl,\n ZTableEditCellChangeEvent,\n ZTableSavedColumnInfo,\n ZTableSavedConfig,\n ZTableVirtualConfig,\n ZVirtualGroup,\n} from './z-table.types';\nimport {\n columnConfigToColumnDef,\n isBodyConfig,\n getBodyRowSpan,\n getHeaderColSpan,\n filterVisibleColumns,\n pickDefined,\n} from './z-table.util';\n\n@Component({\n selector: 'z-table',\n imports: [\n NgClass,\n NgStyle,\n NgTemplateOutlet,\n ScrollingModule,\n NgScrollbar,\n FlexRenderDirective,\n CdkDropList,\n CdkDrag,\n ZCheckboxComponent,\n ZEmptyComponent,\n ZIconComponent,\n ZInputComponent,\n ZLoadingComponent,\n ZSkeletonComponent,\n ZDrawerComponent,\n ZPaginationComponent,\n ZTableFilterComponent,\n ZTableEditCellComponent,\n ZPopoverDirective,\n ZButtonComponent,\n ZTooltipDirective,\n ZTableResizeDirective,\n ZTableRowHoverDirective,\n ZTableIsTemplateRefPipe,\n ZTableHasIconPipe,\n ZTableCellBottomPipe,\n ZTableCellClickablePipe,\n ZTableCellConfigPipe,\n ZTableCellEditPipe,\n ZTableCellOffsetPipe,\n ZTableCellPinPipe,\n ZTableCellVisiblePipe,\n ZTableColumnConfigPipe,\n ZTableColumnHeaderPipe,\n ZTableColumnParentsPipe,\n ZTableFooterContentPipe,\n ZTablePinningStylesPipe,\n ZTableRowPipe,\n ZTableSpanPipe,\n ZTableCellRenderPipe,\n ZTableIconTextComponent,\n ZTableActionsComponent,\n ZFormatNumPipe,\n ZSafeHtmlPipe,\n TranslatePipe,\n ],\n standalone: true,\n templateUrl: './z-table.component.html',\n styleUrl: './z-table.component.scss',\n providers: [TranslatePipe],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'z-table block relative py-1',\n },\n exportAs: 'zTable',\n})\n/**\n * Z-Table Component\n *\n * Feature-rich data table built on @tanstack/angular-table. Supports:\n * - Local and server-side sorting, filtering, and pagination\n * - Virtual scrolling with rowSpan-aware grouping\n * - Column pinning (left/right) with scroll shadow indicators\n * - Column resizing, reordering, and visibility toggling\n * - Inline cell editing (text, number, select, date, etc.)\n * - Row selection (single/multi with sub-row support)\n * - Row expansion with custom templates\n * - Row pinning (top/bottom)\n * - Action buttons column with overflow dropdown\n * - Settings drawer for column management\n * - Persistent settings via ZCacheService (keyed by zKey)\n * - Skeleton loading placeholder\n * - Search bar with debounce\n *\n * Architecture notes:\n * - All template computations use pipes (OnPush compliance, no method calls in templates)\n * - Scroll sync between thead/tbody/tfoot is manual (independent scrollable containers)\n * - Virtual scrolling groups rows to handle rowSpan correctly\n * - Each column's sort/filter can independently be 'local' or 'server' mode\n */\nexport class ZTableComponent<T> implements AfterViewInit {\n // ─── Outputs ──────────────────────────────────────────────────────────────\n\n /** Unified change event — parent listens to this for all table interactions */\n public readonly zChange = output<ZTableChangeEvent<T>>();\n /** Emits an imperative control handle for programmatic table manipulation */\n public readonly zControl = output<ZTableControl<T>>();\n\n // ─── Inputs ───────────────────────────────────────────────────────────────\n\n /** Extra CSS classes merged onto the table container */\n public readonly zClass = input<ClassValue>('');\n /** Main configuration — data, columns, mode, features */\n public readonly zConfig = input<ZTableConfig<T>>({ data: [], columns: [], mode: 'local' });\n /** External loading state (complementary to config.loading) */\n public readonly zLoading = input(false);\n /** Cache key for persisting column settings; no persistence when empty */\n public readonly zKey = input<string>('');\n /** Visual variant: 'default' has card shadow, 'borderless' has no container border */\n public readonly zVariant = input<'default' | 'borderless'>('default');\n\n // ─── Private State ────────────────────────────────────────────────────────\n\n private readonly _destroy$ = injectDestroy();\n private readonly _zTranslate = inject(ZTranslateService);\n\n /** Prevents recursive scroll sync between thead/tbody/tfoot */\n private readonly _isSyncingScroll = signal(false);\n /** Preserves horizontal scroll position across loading states */\n private readonly _savedScrollLeft = signal(0);\n /** Observes tbody container height changes for skeleton row count calculation */\n private _resizeObserver: ResizeObserver | null = null;\n /** Debounces rapid settings changes (visibility/pin toggles) */\n private _settingsDebounceTimeout: ReturnType<typeof setTimeout> | null = null;\n /** Debounces filter change emissions to server */\n private _filterEmitDebounceTimeout: ReturnType<typeof setTimeout> | null = null;\n\n // ─── Template-bound State ─────────────────────────────────────────────────\n\n /** Merged loading state from both zLoading input and config.loading */\n protected readonly isLoading = computed(() => this.zConfig().loading ?? this.zLoading());\n /** True during debounced async state transitions (sort/filter processing) */\n protected readonly isProcessing = signal(false);\n protected readonly theadWrapper = viewChild<ElementRef<HTMLDivElement>>('theadWrapper');\n protected readonly tbodyContainer = viewChild<ElementRef<HTMLDivElement>>('tbodyContainer');\n protected readonly tbodyWrapper = viewChild<ElementRef<HTMLDivElement>>('tbodyWrapper');\n protected readonly tbodyScrollbar = viewChild<NgScrollbar>('tbodyWrapper');\n protected readonly tfootWrapper = viewChild<ElementRef<HTMLDivElement>>('tfootWrapper');\n protected readonly expandedRowTemplate = viewChild<TemplateRef<unknown>>('expandedRowTemplate');\n protected readonly virtualRowElements = viewChildren<ElementRef<HTMLDivElement>>('virtualRow');\n\n // ─── TanStack Table State Signals ─────────────────────────────────────────\n // These signals are the source of truth for table state. They are passed into\n // createAngularTable() and updated via the on*Change callbacks.\n\n protected readonly columnPinning = signal<ColumnPinningState>({ left: [], right: [] });\n protected readonly columnVisibility = signal<VisibilityState>({});\n protected readonly columnOrder = signal<ColumnOrderState>([]);\n protected readonly expanded = signal<ExpandedState>({});\n protected readonly rowSelection = signal<RowSelectionState>({});\n protected readonly rowPinning = signal<RowPinningState>({ top: [], bottom: [] });\n protected readonly columnFilters = signal<ColumnFiltersState>([]);\n protected readonly globalFilter = signal<string>('');\n /** Note: pageIndex is 1-based here; converted to 0-based for TanStack via _tanstackPagination */\n protected readonly pagination = signal<PaginationState>({ pageIndex: 1, pageSize: 10 });\n protected readonly sorting = signal<SortingState>([]);\n /**\n * Caches the last server-provided total to avoid flickering to 0\n * during loading transitions in server-side pagination mode.\n */\n private readonly _serverPaginationTotal = signal(0);\n\n /** Container CSS classes combining variant + user-provided classes */\n protected readonly classTable = computed(() =>\n zMergeClasses(\n 'z-table-container',\n this.zVariant() === 'default' ? 'shadow-card' : 'z-table-borderless',\n this.zClass()\n )\n );\n\n /** Convert 1-based pagination to TanStack's 0-based pageIndex */\n private readonly _tanstackPagination = computed(() => ({\n ...this.pagination(),\n pageIndex: Math.max(0, this.pagination().pageIndex - 1),\n }));\n\n private readonly _configPagination = computed(() => {\n const config = this.zConfig();\n if (config.mode === 'server' && config.initialState?.pagination) {\n return config.initialState.pagination;\n }\n return null;\n });\n\n protected readonly paginationTotal = computed(() => {\n const config = this.zConfig();\n if (config.mode === 'server') {\n const serverTotal = config.totalCount ?? config.totalRows;\n if (typeof serverTotal === 'number') {\n if (serverTotal > 0 || !this.isLoading()) {\n return serverTotal;\n }\n }\n\n const cachedServerTotal = this._serverPaginationTotal();\n if (cachedServerTotal > 0) {\n return cachedServerTotal;\n }\n\n return serverTotal ?? 0;\n }\n\n return this.table.getFilteredRowModel().rows.length;\n });\n\n // ─── Scroll & Border State ────────────────────────────────────────────────\n\n protected readonly hasVerticalScroll = signal(false);\n protected readonly hasHorizontalScroll = signal(false);\n /** True when the last row touches or extends past the container bottom (no gap) */\n protected readonly lastRowTouchesBottom = signal(true);\n protected readonly showSettingsDrawer = signal(false);\n protected readonly showHorizontalBorder = signal(true);\n protected readonly showVerticalBorder = signal(true);\n protected readonly showHeaderFooterShadow = signal(true);\n\n /** True when table body is scrolled away from left edge (shows left pin shadow) */\n protected readonly hasScrollLeft = signal(false);\n /** True when table has right-pinned columns and body isn't scrolled to the end */\n protected readonly hasScrollRight = signal(false);\n /** Maps row IDs to measured DOM heights for pinned row offset calculations */\n protected readonly pinnedRowHeights = signal<Record<string, number>>({});\n\n // ─── Internal Change Tracking ──────────────────────────────────────────────\n\n /** Bumped to force recomputation of pinned column IDs after programmatic pin changes */\n private readonly _columnPinVersion = signal(0);\n /** Bumped to trigger data refresh (e.g., after addItem/deleteItem via control API) */\n private readonly _dataForceUpdate = signal(0);\n /** Set when a single row is updated via control API (for targeted re-render) */\n protected readonly _rowUpdate = signal<{ rowId: string; updates: Record<string, unknown> } | null>(null);\n\n /**\n * Column config lookup cache — cleared when column reference changes.\n * Avoids repeated recursive searches during render cycles.\n */\n private _columnConfigCache = new Map<string, ZTableColumnConfig<T> | undefined>();\n private _lastColumnsRef: ZTableColumnConfig<T>[] | null = null;\n\n protected readonly pinnedColumnIds = computed(() => {\n this._columnPinVersion();\n return this.columnOrder().filter(id => {\n if (id === 'expand' || id === 'select') {\n return false;\n }\n\n const column = this.table.getColumn(id);\n return column && column.getIsPinned();\n });\n });\n\n protected readonly pendingVisibleColumns = signal<string[]>([]);\n protected readonly pendingColumnOrder = signal<string[]>([]);\n protected readonly pendingShowHeaderFooterShadow = signal(true);\n\n // ─── Feature Detection Computeds ──────────────────────────────────────────\n // These computed signals scan the column config tree to determine which\n // features are active, avoiding feature-gating at template render time.\n\n /** True if ANY body column uses rowSpan — affects virtual grouping and expand column behavior */\n protected readonly hasBodyRowSpan = computed(() => {\n const columns = this.zConfig().columns ?? [];\n const checkRowSpan = (col: ZTableColumnConfig<T>): boolean => {\n if (isBodyConfig(col.body) && col.body.rowSpan !== undefined) {\n return true;\n }\n\n if (col.columns?.length) {\n return col.columns.some(c => checkRowSpan(c));\n }\n\n return false;\n };\n\n return columns.some(c => checkRowSpan(c));\n });\n\n protected readonly hasSelectColumn = computed(() => {\n const columns = this.zConfig().columns ?? [];\n return columns.some(c => c.id === 'select');\n });\n\n protected readonly hasExpandColumn = computed(() => {\n const columns = this.zConfig().columns ?? [];\n return columns.some(c => c.id === 'expand');\n });\n\n protected readonly actionColumnInfo = computed<{\n columnId: string;\n config: ZTableActionColumnConfig<T>;\n width: number;\n } | null>(() => {\n const columns = this.zConfig().columns ?? [];\n\n const findActionColumn = (\n cols: ZTableColumnConfig<T>[]\n ): { columnId: string; config: ZTableActionColumnConfig<T> } | null => {\n for (const col of cols) {\n if (isBodyConfig(col.body) && col.body.actions && col.body.actions.actions?.length > 0) {\n return { columnId: col.id, config: col.body.actions };\n }\n if (col.columns?.length) {\n const found = findActionColumn(col.columns);\n if (found) {\n return found;\n }\n }\n }\n\n return null;\n };\n\n const actionCol = findActionColumn(columns);\n if (!actionCol) {\n return null;\n }\n\n const { config } = actionCol;\n const maxVisible = config.maxVisible ?? 3;\n let totalActions = maxVisible;\n if (typeof config.actions !== 'function') {\n totalActions = config.actions.filter(a => !a.hidden).length;\n }\n\n const visibleCount = Math.min(totalActions, maxVisible);\n const hasOverflow = totalActions > maxVisible;\n const buttonCount = hasOverflow ? visibleCount + 1 : visibleCount;\n const buttonWidth = Z_TABLE_DEFAULT_ACTION_BUTTON_WIDTH;\n const gap = 4;\n const padding = 16;\n const width = buttonCount * buttonWidth + (buttonCount - 1) * gap + padding;\n\n return {\n columnId: actionCol.columnId,\n config: actionCol.config,\n width,\n };\n });\n\n protected readonly hasActionColumn = computed(() => this.actionColumnInfo() !== null);\n protected readonly hasFiltering = computed(() => {\n const columns = this.zConfig().columns ?? [];\n const checkFilter = (col: ZTableColumnConfig<T>): boolean => {\n const filterConfig = typeof col.filter === 'boolean' ? { enabled: col.filter } : col.filter;\n if (filterConfig?.enabled) {\n return true;\n }\n\n if (col.columns?.length) {\n return col.columns.some(c => checkFilter(c));\n }\n\n return false;\n };\n return columns.some(c => checkFilter(c));\n });\n\n protected readonly hasLocalFiltering = computed(() => {\n const columns = this.zConfig().columns ?? [];\n const checkLocalFilter = (col: ZTableColumnConfig<T>): boolean => {\n const filterConfig = typeof col.filter === 'boolean' ? { enabled: col.filter } : col.filter;\n if (filterConfig?.enabled) {\n const filterMode = filterConfig.mode ?? 'local';\n if (filterMode === 'local') {\n return true;\n }\n }\n\n if (col.columns?.length) {\n return col.columns.some(c => checkLocalFilter(c));\n }\n\n return false;\n };\n return columns.some(c => checkLocalFilter(c));\n });\n\n protected readonly hasSorting = computed(() => {\n const config = this.zConfig();\n if (config.enableColumnSorting === false) {\n return false;\n }\n\n if (config.enableColumnSorting === true) {\n return true;\n }\n\n const columns = config.columns ?? [];\n const checkSorting = (col: ZTableColumnConfig<T>): boolean => {\n const sortConfig = typeof col.sort === 'boolean' ? { enabled: col.sort } : col.sort;\n if (sortConfig?.enabled) {\n return true;\n }\n\n if (col.columns?.length) {\n return col.columns.some(c => checkSorting(c));\n }\n\n return false;\n };\n return columns.some(c => checkSorting(c));\n });\n\n protected readonly hasLocalSorting = computed(() => {\n const config = this.zConfig();\n if (config.enableColumnSorting === false) {\n return false;\n }\n\n const columns = config.columns ?? [];\n const checkLocalSorting = (col: ZTableColumnConfig<T>): boolean => {\n const sortConfig = typeof col.sort === 'boolean' ? { enabled: col.sort } : col.sort;\n if (sortConfig?.enabled) {\n const sortMode = sortConfig.mode ?? 'local';\n if (sortMode === 'local') {\n return true;\n }\n }\n\n if (col.columns?.length) {\n return col.columns.some(c => checkLocalSorting(c));\n }\n\n return false;\n };\n return columns.some(c => checkLocalSorting(c));\n });\n\n protected readonly hasServerFiltering = computed(() => {\n const columns = this.zConfig().columns ?? [];\n const checkServerFilter = (col: ZTableColumnConfig<T>): boolean => {\n const filterConfig = typeof col.filter === 'boolean' ? { enabled: col.filter } : col.filter;\n if (filterConfig?.enabled) {\n const filterMode = filterConfig.mode ?? 'local';\n if (filterMode === 'server') {\n return true;\n }\n }\n\n if (col.columns?.length) {\n return col.columns.some(c => checkServerFilter(c));\n }\n\n return false;\n };\n return columns.some(c => checkServerFilter(c));\n });\n\n protected readonly hasServerSorting = computed(() => {\n const config = this.zConfig();\n if (config.enableColumnSorting === false) {\n return false;\n }\n\n const columns = config.columns ?? [];\n const checkServerSorting = (col: ZTableColumnConfig<T>): boolean => {\n const sortConfig = typeof col.sort === 'boolean' ? { enabled: col.sort } : col.sort;\n if (sortConfig?.enabled) {\n const sortMode = sortConfig.mode ?? 'local';\n if (sortMode === 'server') {\n return true;\n }\n }\n\n if (col.columns?.length) {\n return col.columns.some(c => checkServerSorting(c));\n }\n\n return false;\n };\n return columns.some(c => checkServerSorting(c));\n });\n\n protected readonly searchConfig = computed(() => {\n const { search } = this.zConfig();\n if (!search) {\n return null;\n }\n\n if (typeof search === 'boolean') {\n return search\n ? {\n enabled: true,\n placeholder: 'i18n_z_ui_table_search',\n debounceTime: 300,\n width: 'w-64',\n size: 'sm' as const,\n }\n : null;\n }\n\n return {\n enabled: search.enabled ?? true,\n placeholder: search.placeholder ?? 'i18n_z_ui_table_search',\n debounceTime: search.debounceTime ?? 300,\n width: search.width ?? 'w-64',\n size: search.size ?? ('sm' as const),\n };\n });\n\n protected readonly isSearchEnabled = computed(() => {\n const config = this.searchConfig();\n return config !== null && config.enabled;\n });\n\n // ─── Core TanStack Data Signals ───────────────────────────────────────────\n\n /** Data signal with force-update support for control API mutations */\n private readonly _data = computed(() => {\n this._dataForceUpdate();\n return this.zConfig().data ?? [];\n });\n\n /**\n * Converts ZTableColumnConfig[] into TanStack ColumnDef[].\n * Handles special columns (select, expand, actionRowPin), action column sizing,\n * and rowSpan/expand compatibility (expand column is removed when rowSpan is used).\n */\n private readonly _columns = computed<ColumnDef<T>[]>(() => {\n let cols = this.zConfig().columns ?? [];\n cols = filterVisibleColumns(cols);\n if (this.hasBodyRowSpan()) {\n cols = cols.filter(c => c.id !== 'expand');\n }\n\n const hasExpandColumn = cols.some(c => c.id === 'expand');\n const hasSelectColumn = cols.some(c => c.id === 'select');\n const needsRowPinActionsColumn =\n this.zConfig().enableRowPinning && !hasExpandColumn && !hasSelectColumn && !this.hasBodyRowSpan();\n\n if (needsRowPinActionsColumn) {\n cols = [\n {\n id: 'actionRowPin',\n header: '',\n cell: '',\n size: 30,\n minSize: 30,\n maxSize: 30,\n enableResizing: false,\n enableHiding: false,\n } as ZTableColumnConfig<T>,\n ...cols,\n ];\n }\n\n return cols.map(c => {\n const colDef = columnConfigToColumnDef(c);\n if (colDef.id === 'select') {\n colDef.size = 50;\n colDef.minSize = 50;\n colDef.maxSize = 50;\n colDef.enableResizing = false;\n }\n\n if (colDef.id === 'expand' || colDef.id === 'actionRowPin') {\n colDef.size = 50;\n colDef.minSize = 50;\n colDef.maxSize = 50;\n colDef.enableResizing = false;\n }\n\n const actionInfo = this.actionColumnInfo();\n if (actionInfo && colDef.id === actionInfo.columnId) {\n const defaultWidth = actionInfo.width + 15;\n const width = c.size ?? c.minSize ?? c.maxSize ?? defaultWidth;\n\n colDef.size = width;\n colDef.minSize = width;\n colDef.maxSize = width;\n colDef.enableResizing = c.enableResizing ?? false;\n colDef.enableSorting = false;\n colDef.enablePinning = false;\n }\n\n return colDef;\n });\n });\n\n // ─── Virtual Scrolling ────────────────────────────────────────────────────\n\n protected readonly isVirtual = computed(() => {\n const { virtual } = this.zConfig();\n if (!virtual) {\n return false;\n }\n\n if (typeof virtual === 'boolean') {\n return virtual;\n }\n\n return virtual.enabled;\n });\n\n /** Normalized virtual config with defaults applied */\n private readonly _virtualConfig = computed<ZTableVirtualConfig>(() => {\n const { virtual } = this.zConfig();\n if (!virtual || typeof virtual === 'boolean') {\n return {\n enabled: !!virtual,\n size: Z_DEFAULT_ROW_HEIGHT,\n overscan: Z_DEFAULT_VIRTUAL_OVERSCAN,\n groupSize: Z_DEFAULT_GROUP_SIZE,\n dynamicSize: false,\n };\n }\n\n return {\n enabled: virtual.enabled,\n size: virtual.size ?? Z_DEFAULT_ROW_HEIGHT,\n overscan: virtual.overscan ?? Z_DEFAULT_VIRTUAL_OVERSCAN,\n groupSize: virtual.groupSize ?? Z_DEFAULT_GROUP_SIZE,\n dynamicSize: virtual.dynamicSize ?? false,\n initialOffset: virtual.initialOffset,\n scrollMargin: virtual.scrollMargin,\n gap: virtual.gap,\n isScrollingResetDelay: virtual.isScrollingResetDelay,\n useScrollendEvent: virtual.useScrollendEvent,\n getItemKey: virtual.getItemKey,\n rangeExtractor: virtual.rangeExtractor,\n };\n });\n\n protected readonly virtualRowHeight = computed(() => this._virtualConfig().size ?? Z_DEFAULT_ROW_HEIGHT);\n protected readonly dynamicSize = computed(() => this._virtualConfig().dynamicSize ?? false);\n protected readonly groupSize = computed(() => this._virtualConfig().groupSize ?? Z_DEFAULT_GROUP_SIZE);\n protected readonly groupHeight = computed(() => this.groupSize() * this.virtualRowHeight());\n private readonly _dynamicGroupsVersion = signal(0);\n\n /**\n * Groups rows for virtual scrolling. When rowSpan is used, rows that share\n * a merged cell are grouped together so the virtualizer treats them as\n * a single unit, preserving the visual merge across scroll boundaries.\n */\n protected readonly dynamicGroups = computed<ZVirtualGroup[]>(() => {\n if (!this.isVirtual()) {\n return [];\n }\n\n this._dynamicGroupsVersion();\n const { rows } = this.table.getRowModel();\n const rowHeight = this.virtualRowHeight();\n const isDynamic = this.dynamicSize();\n\n if (!this.hasBodyRowSpan()) {\n const size = this.groupSize();\n const groups: ZVirtualGroup[] = [];\n const totalGroups = Math.ceil(rows.length / size);\n\n for (let j = 0; j < totalGroups; j++) {\n const startIndex = j * size;\n const endIndex = Math.min(startIndex + size - 1, rows.length - 1);\n const rowCount = endIndex - startIndex + 1;\n groups.push({\n startIndex,\n endIndex,\n rowCount,\n height: isDynamic ? null : rowCount * rowHeight,\n });\n }\n return groups;\n }\n\n const groups: ZVirtualGroup[] = [];\n let i = 0;\n\n while (i < rows.length) {\n const startIndex = i;\n let maxRowSpan = 1;\n const row = rows[i];\n const cells = row.getAllCells();\n\n for (const cell of cells) {\n const columnConfig = this._findColumnConfig(cell.column.id);\n const rowSpanValue = getBodyRowSpan(columnConfig, cell.getContext());\n if (rowSpanValue && rowSpanValue > maxRowSpan) {\n maxRowSpan = rowSpanValue;\n }\n }\n\n const groupRowCount = Math.max(1, maxRowSpan);\n const endIndex = Math.min(i + groupRowCount - 1, rows.length - 1);\n const rowCount = endIndex - startIndex + 1;\n groups.push({\n startIndex,\n endIndex,\n rowCount,\n height: isDynamic ? null : rowCount * rowHeight,\n });\n\n i = endIndex + 1;\n }\n\n return groups;\n });\n\n protected readonly hasFooter = computed(() => {\n const columns = this.zConfig().columns ?? [];\n const checkFooter = (col: (typeof columns)[0]): boolean => {\n if (col.footer) {\n return true;\n }\n\n if (col.columns?.length) {\n return col.columns.some(c => checkFooter(c as (typeof columns)[0]));\n }\n\n return false;\n };\n\n return columns.some(c => checkFooter(c));\n });\n\n protected readonly isEmpty = computed(() => this.table.getRowModel().rows.length === 0);\n protected readonly isEmptyData = computed(() => this._data().length === 0);\n protected readonly isNoSearchResults = computed(() => {\n const isServerMode = this.zConfig().mode === 'server';\n const hasActiveFilter = this.globalFilter().trim() !== '' || this.columnFilters().length > 0;\n const noFilteredResults = this.isEmpty();\n\n if (isServerMode) {\n const totalCount = this.zConfig().totalCount ?? 0;\n const hasPotentialData = totalCount > 0 || hasActiveFilter;\n return hasPotentialData && noFilteredResults && hasActiveFilter;\n }\n\n const hasSourceData = this._data().length > 0;\n return hasSourceData && noFilteredResults && hasActiveFilter;\n });\n\n protected readonly orderedLeafColumns = computed(() => {\n const leftCols = this.table.getLeftLeafColumns();\n const centerCols = this.table.getCenterLeafColumns();\n const rightCols = this.table.getRightLeafColumns();\n return [...leftCols, ...centerCols, ...rightCols];\n });\n\n protected readonly orderedHeaderGroups = computed(() => {\n void this.columnPinning();\n void this.columnOrder();\n\n const leftGroups = this.table.getLeftHeaderGroups();\n const centerGroups = this.table.getCenterHeaderGroups();\n const rightGroups = this.table.getRightHeaderGroups();\n\n const maxRows = Math.max(leftGroups.length, centerGroups.length, rightGroups.length);\n const result: { id: string; headers: (typeof leftGroups)[0]['headers'] }[] = [];\n\n for (let i = 0; i < maxRows; i++) {\n const leftHeaders = leftGroups[i]?.headers ?? [];\n const centerHeaders = centerGroups[i]?.headers ?? [];\n const rightHeaders = rightGroups[i]?.headers ?? [];\n\n result.push({\n id: `row-${i}`,\n headers: [...leftHeaders, ...centerHeaders, ...rightHeaders],\n });\n }\n\n return result;\n });\n\n protected readonly orderedFooterGroups = computed(() => {\n void this.columnPinning();\n void this.columnOrder();\n\n const leftGroups = this.table.getLeftFooterGroups();\n const centerGroups = this.table.getCenterFooterGroups();\n const rightGroups = this.table.getRightFooterGroups();\n\n const maxRows = Math.max(leftGroups.length, centerGroups.length, rightGroups.length);\n const result: { id: string; depth: number; headers: (typeof leftGroups)[0]['headers'] }[] = [];\n\n for (let i = 0; i < maxRows; i++) {\n const leftHeaders = leftGroups[i]?.headers ?? [];\n const centerHeaders = centerGroups[i]?.headers ?? [];\n const rightHeaders = rightGroups[i]?.headers ?? [];\n const depth = leftGroups[i]?.depth ?? centerGroups[i]?.depth ?? rightGroups[i]?.depth ?? i;\n\n result.push({\n id: `footer-row-${i}`,\n depth,\n headers: [...leftHeaders, ...centerHeaders, ...rightHeaders],\n });\n }\n\n return result;\n });\n\n protected readonly bottomRowsReversed = computed(() => [...this.table.getBottomRows()].reverse());\n protected readonly totalWidth = computed(() => {\n const columns = this.table.getAllLeafColumns();\n return columns.reduce((sum, col) => sum + col.getSize(), 0);\n });\n\n protected readonly shouldHeaderShowShadow = computed(\n () => this.showHeaderFooterShadow() && this.table.getTopRows().length === 0\n );\n\n protected readonly shouldFooterShowShadow = computed(\n () => this.showHeaderFooterShadow() && this.table.getBottomRows().length === 0\n );\n\n protected readonly tbodyContainerHeight = signal(0);\n protected readonly skeletonRowHeight = signal<number>(Z_SKELETON_ROW_HEIGHT);\n\n protected readonly skeletonRowCount = computed(() => {\n const containerHeight = this.tbodyContainerHeight();\n const baseRowHeight = this.skeletonRowHeight();\n\n if (containerHeight > 0) {\n return Math.max(3, Math.floor(containerHeight / baseRowHeight));\n }\n\n const { minHeight } = this.zConfig();\n if (minHeight) {\n const heightValue = parseInt(minHeight, 10);\n if (!isNaN(heightValue)) {\n return Math.max(3, Math.floor(heightValue / baseRowHeight));\n }\n }\n\n return Math.min(this.pagination().pageSize || 10, 10);\n });\n\n protected readonly actualSkeletonRowHeight = computed(() => {\n const containerHeight = this.tbodyContainerHeight();\n const rowCount = this.skeletonRowCount();\n\n if (containerHeight > 0 && rowCount > 0) {\n return containerHeight / rowCount;\n }\n\n return this.skeletonRowHeight();\n });\n\n protected readonly skeletonRows = computed(() => {\n const count = this.skeletonRowCount();\n return Array.from({ length: count }, (_, i) => i);\n });\n\n protected readonly dynamicGroupRows = computed(() => {\n const rows = this.table.getRowModel().rows as Row<T>[];\n const groups = this.dynamicGroups();\n const size = this.groupSize();\n const result: Row<T>[][] = [];\n\n if (groups.length > 0) {\n for (const group of groups) {\n result.push(rows.slice(group.startIndex, group.endIndex + 1));\n }\n return result;\n }\n\n const totalGroups = Math.ceil(rows.length / size);\n for (let i = 0; i < totalGroups; i++) {\n const startIndex = i * size;\n const endIndex = Math.min(startIndex + size, rows.length);\n result.push(rows.slice(startIndex, endIndex));\n }\n\n return result;\n });\n\n protected readonly dynamicGroupHeights = computed(() => {\n const groups = this.dynamicGroups();\n const rowHeight = this.virtualRowHeight();\n const defaultHeight = this.groupSize() * rowHeight;\n const isDynamic = this.dynamicSize();\n\n if (groups.length > 0) {\n return groups.map(group => (isDynamic ? null : (group.height ?? defaultHeight)));\n }\n\n const rows = this.table.getRowModel().rows as Row<T>[];\n const size = this.groupSize();\n const totalGroups = Math.ceil(rows.length / size);\n return Array(totalGroups).fill(isDynamic ? null : defaultHeight);\n });\n\n protected readonly columnSizing = computed(() => this.table.getState().columnSizing);\n protected readonly columnSizingInfo = computed(() => this.table.getState().columnSizingInfo);\n\n protected readonly columnSizeVars = computed(() => {\n void this.columnSizing();\n void this.columnSizingInfo();\n void this.columnOrder();\n void this.columnVisibility();\n void this.columnPinning();\n void this._columns();\n\n const headers = untracked(() => this.table.getFlatHeaders());\n const colSizes: Record<string, number> = {};\n\n for (const header of headers) {\n colSizes[`--header-${header.id}-size`] = header.getSize();\n colSizes[`--col-${header.column.id}-size`] = header.column.getSize();\n }\n\n return colSizes;\n });\n\n // ─── TanStack Table Instance ──────────────────────────────────────────────\n //\n // The central table instance. All state signals flow in, and on*Change\n // callbacks flow out. Features (sorting, filtering, pagination) are\n // conditionally enabled based on column configs and table mode.\n\n protected readonly table = createAngularTable<T>(() => {\n const config = this.zConfig();\n const isServerMode = config.mode === 'server';\n const pageSize = this.pagination().pageSize || 10;\n const totalRows = config.totalCount ?? config.totalRows;\n const pageCount = isServerMode && typeof totalRows === 'number' ? Math.ceil(totalRows / pageSize) : undefined;\n\n const hasAnyLocalFiltering = this.hasLocalFiltering();\n const hasAnyLocalSorting = this.hasLocalSorting();\n const shouldEnableLocalFiltering = !isServerMode || hasAnyLocalFiltering;\n const shouldEnableLocalSorting = !isServerMode || hasAnyLocalSorting;\n\n return {\n data: this._data(),\n columns: this._columns(),\n getCoreRowModel: getCoreRowModel(),\n getExpandedRowModel: this.hasExpandColumn() ? getExpandedRowModel() : undefined,\n getFilteredRowModel: shouldEnableLocalFiltering && this.hasFiltering() ? getFilteredRowModel() : undefined,\n getSortedRowModel: shouldEnableLocalSorting && this.hasSorting() ? getSortedRowModel() : undefined,\n getPaginationRowModel: !isServerMode && config.pagination?.enabled ? getPaginationRowModel() : undefined,\n getFacetedRowModel: shouldEnableLocalFiltering && this.hasFiltering() ? getFacetedRowModel() : undefined,\n getFacetedUniqueValues: shouldEnableLocalFiltering && this.hasFiltering() ? getFacetedUniqueValues() : undefined,\n getFacetedMinMaxValues: shouldEnableLocalFiltering && this.hasFiltering() ? getFacetedMinMaxValues() : undefined,\n manualFiltering: isServerMode && !hasAnyLocalFiltering,\n manualSorting: isServerMode && !hasAnyLocalSorting,\n manualPagination: isServerMode,\n pageCount: pageCount,\n columnResizeMode: 'onChange',\n enableRowSelection: this.hasSelectColumn(),\n enableSubRowSelection: this.hasSelectColumn() && !!config.getSubRows,\n enableRowPinning: config.enableRowPinning ?? false,\n enableMultiSort: config.enableMultiSort ?? false,\n keepPinnedRows: true,\n getRowId: config.getRowId\n ? (originalRow: T, index: number, parent?: Row<T>) =>\n config.getRowId?.(originalRow, index, parent?.original, this._data()) ?? `${index}`\n : (_row: T, index: number) => `${index}`,\n getSubRows: config.getSubRows\n ? (originalRow: T, index: number) => config.getSubRows?.(originalRow, index, undefined, this._data())\n : undefined,\n getRowCanExpand: config.getRowCanExpand ?? (() => true),\n state: {\n columnPinning: this.columnPinning(),\n columnVisibility: this.columnVisibility(),\n columnOrder: this.columnOrder(),\n expanded: this.expanded(),\n rowSelection: this.rowSelection(),\n rowPinning: this.rowPinning(),\n columnFilters: this.columnFilters(),\n globalFilter: this.globalFilter(),\n pagination: this._tanstackPagination(),\n sorting: this.sorting(),\n },\n onColumnPinningChange: updater => {\n const newState = typeof updater === 'function' ? updater(this.columnPinning()) : updater;\n this.columnPinning.set(newState);\n },\n onColumnVisibilityChange: updater => {\n const newState = typeof updater === 'function' ? updater(this.columnVisibility()) : updater;\n this.columnVisibility.set(newState);\n },\n onColumnOrderChange: updater => {\n const newState = typeof updater === 'function' ? updater(this.columnOrder()) : updater;\n this.columnOrder.set(newState);\n },\n onExpandedChange: updater => {\n const newState = typeof updater === 'function' ? updater(this.expanded()) : updater;\n this.expanded.set(newState);\n this.zChange.emit({\n type: 'expand',\n data: { expanded: newState },\n });\n },\n onRowSelectionChange: updater => {\n const currentState = this.rowSelection();\n const newState = typeof updater === 'function' ? updater(currentState) : updater;\n this._handleRowSelectionWithParents(newState);\n },\n onColumnFiltersChange: updater => {\n const oldState = this.columnFilters();\n const newState = typeof updater === 'function' ? updater(oldState) : updater;\n\n const changedColumnIds = this._getChangedFilterColumnIds(oldState, newState);\n const hasAnyLocalChange = changedColumnIds.some(id => this._isColumnFilterModeLocal(id));\n const hasAnyServerChange = changedColumnIds.some(id => !this._isColumnFilterModeLocal(id));\n const serverModeFilters = this._filterServerModeColumnFilters(newState);\n\n this.columnFilters.set(newState);\n\n if (hasAnyLocalChange) {\n this._runAsyncStateUpdate(() => {\n this.pagination.update(p => ({ ...p, pageIndex: 1 }));\n }, true);\n }\n\n if (hasAnyServerChange) {\n this.zChange.emit({\n type: 'filter',\n data: { filters: serverModeFilters, search: this.globalFilter() },\n });\n }\n },\n onGlobalFilterChange: updater => {\n const newState = typeof updater === 'function' ? updater(this.globalFilter()) : updater;\n const hasLocalFilter = this.hasLocalFiltering();\n const serverModeFilters = this._filterServerModeColumnFilters(this.columnFilters());\n\n this._runAsyncStateUpdate(() => {\n this.globalFilter.set(newState);\n if (hasLocalFilter) {\n this.pagination.update(p => ({ ...p, pageIndex: 1 }));\n }\n if (serverModeFilters.length > 0 || this.hasServerFiltering()) {\n this._emitFilterChangeDebounced(serverModeFilters, newState);\n }\n }, hasLocalFilter);\n },\n onPaginationChange: updater => {\n const newState = typeof updater === 'function' ? updater(this._tanstackPagination()) : updater;\n const adjustedState = { ...newState, pageIndex: newState.pageIndex + 1 };\n this.pagination.set(adjustedState);\n this.zChange.emit({\n type: 'page',\n data: { pageIndex: adjustedState.pageIndex, pageSize: adjustedState.pageSize, emitType: 'auto' },\n });\n },\n onSortingChange: updater => {\n const oldState = this.sorting();\n const newState = typeof updater === 'function' ? updater(oldState) : updater;\n\n const changedColumnIds = this._getChangedSortColumnIds(oldState, newState);\n const hasAnyLocalChange = changedColumnIds.some(id => this._isColumnSortModeLocal(id));\n const hasAnyServerChange = changedColumnIds.some(id => !this._isColumnSortModeLocal(id));\n const serverModeSorting = this._filterServerModeSorting(newState);\n\n this.sorting.set(newState);\n\n if (hasAnyLocalChange) {\n this._runAsyncStateUpdate(() => {\n this.pagination.update(p => ({ ...p, pageIndex: 1 }));\n }, true);\n }\n\n if (hasAnyServerChange) {\n this.zChange.emit({ type: 'sort', data: { sorting: serverModeSorting } });\n }\n },\n onRowPinningChange: updater => {\n const newState = typeof updater === 'function' ? updater(this.rowPinning()) : updater;\n this.rowPinning.set(newState);\n },\n meta: {\n updateData: (rowIndex: number, columnId: string, value: unknown) => {\n const row = this.table.getRowModel().rows[rowIndex];\n if (row) {\n this.zChange.emit({\n type: 'cellClick',\n data: {\n row: row.original,\n rowId: row.id,\n columnId,\n value,\n },\n });\n }\n },\n },\n debugTable: false,\n };\n }) as ReturnType<typeof createAngularTable<T>>;\n\n private readonly _virtualGroupCount = computed(() => {\n if (!this.isVirtual()) {\n return 0;\n }\n\n const totalRows = untracked(() => this.table.getRowModel().rows.length);\n return Math.ceil(totalRows / this.groupSize());\n });\n\n /** Virtualizer instance — operates on groups rather than individual rows */\n protected readonly virtualizer = injectVirtualizer(() => {\n const groups = this.dynamicGroups();\n const rowHeight = this.virtualRowHeight();\n const groupSize = this.groupSize();\n const scrollElement = this.tbodyWrapper()?.nativeElement;\n const virtualConfig = this._virtualConfig();\n\n return {\n scrollElement,\n count: groups.length > 0 ? groups.length : this._virtualGroupCount(),\n estimateSize: (index: number) => {\n if (groups.length > 0 && groups[index]) {\n const groupHeight = groups[index].height;\n if (groupHeight !== null) {\n return groupHeight;\n }\n\n return groups[index].rowCount * rowHeight;\n }\n\n return groupSize * rowHeight;\n },\n measureElement: (element: Element) => element.getBoundingClientRect().height,\n overscan: virtualConfig.overscan ?? Z_DEFAULT_VIRTUAL_OVERSCAN,\n initialOffset: virtualConfig.initialOffset ?? 0,\n ...pickDefined(virtualConfig, [\n 'scrollMargin',\n 'gap',\n 'isScrollingResetDelay',\n 'useScrollendEvent',\n 'getItemKey',\n 'rangeExtractor',\n ]),\n };\n });\n\n private readonly _measureVirtualItems = effect(() => {\n if (!this.dynamicSize()) {\n return;\n }\n\n const elements = this.virtualRowElements();\n for (const el of elements) {\n this.virtualizer.measureElement(el.nativeElement);\n }\n });\n\n // ─── Constructor Effects ──────────────────────────────────────────────────\n //\n // Effects run in the constructor because Angular signals + effects don't\n // have a separate \"init\" lifecycle. Each effect is responsible for one\n // concern (data sync, config loading, scroll reset, settings persistence, etc.)\n\n constructor() {\n // Force data refresh when language changes (re-evaluates translations in cells)\n explicitEffect([this._zTranslate.currentLang], () => {\n this._dataForceUpdate.update(v => v + 1);\n });\n\n explicitEffect([this.zConfig], ([cfg]) => {\n if (cfg.mode !== 'server') {\n return;\n }\n\n const total = cfg.totalCount ?? cfg.totalRows;\n if (typeof total !== 'number') {\n return;\n }\n\n if (cfg.loading && total <= 0 && this._serverPaginationTotal() > 0) {\n return;\n }\n\n this._serverPaginationTotal.set(total);\n });\n\n explicitEffect([this.zKey, this.zConfig], ([key, cfg]) => {\n if (!cfg.columns || cfg.columns.length === 0) {\n return;\n }\n\n const cacheLoaded = key ? this._loadConfigCache(key) : false;\n const initial = cfg.initialState;\n if (initial) {\n if (!cacheLoaded) {\n if (initial.columnPinning) {\n this.columnPinning.set(initial.columnPinning);\n }\n if (initial.columnVisibility) {\n this.columnVisibility.set(initial.columnVisibility);\n }\n }\n\n if (initial.sorting) {\n this.sorting.set(initial.sorting);\n }\n if (initial.columnFilters) {\n this.columnFilters.set(initial.columnFilters);\n }\n if (initial.globalFilter) {\n this.globalFilter.set(initial.globalFilter);\n }\n if (initial.expanded) {\n this.expanded.set(initial.expanded);\n }\n if (initial.rowSelection) {\n this.rowSelection.set(initial.rowSelection);\n }\n if (initial.rowPinning) {\n this.rowPinning.set(initial.rowPinning);\n }\n if (initial.pagination) {\n this.pagination.set(initial.pagination);\n }\n }\n\n if (!cacheLoaded) {\n this.showHeaderFooterShadow.set(cfg.showHeaderShadow ?? cfg.showFooterShadow ?? true);\n if (typeof cfg.showHorizontalBorder === 'boolean') {\n this.showHorizontalBorder.set(cfg.showHorizontalBorder);\n }\n if (typeof cfg.showVerticalBorder === 'boolean') {\n this.showVerticalBorder.set(cfg.showVerticalBorder);\n }\n }\n\n const cols = cfg.columns ?? [];\n const leftPinned: string[] = [...(initial?.columnPinning?.left ?? [])];\n const rightPinned: string[] = [...(initial?.columnPinning?.right ?? [])];\n\n const collectPinnedColumns = (columns: typeof cols): void => {\n for (const col of columns) {\n if (col.pinned === 'left' && !leftPinned.includes(col.id)) {\n leftPinned.push(col.id);\n }\n if (col.pinned === 'right' && !rightPinned.includes(col.id)) {\n rightPinned.push(col.id);\n }\n if (col.columns) {\n collectPinnedColumns(col.columns);\n }\n }\n };\n\n collectPinnedColumns(cols);\n if (!cacheLoaded && (leftPinned.length > 0 || rightPinned.length > 0)) {\n this.columnPinning.set({ left: leftPinned, right: rightPinned });\n }\n });\n\n explicitEffect([this.zConfig], ([cfg]) => {\n if (cfg.enableRowPinning && !this.hasBodyRowSpan()) {\n const cols = cfg.columns ?? [];\n const hasSelect = cols.some(c => c.id === 'select');\n const hasExpand = cols.some(c => c.id === 'expand');\n const currentPinning = this.columnPinning();\n const leftPinned = [...(currentPinning.left || [])];\n if (hasSelect && !leftPinned.includes('select')) {\n leftPinned.unshift('select');\n this.columnPinning.set({ ...currentPinning, left: leftPinned });\n }\n\n if (!hasSelect && !hasExpand && !leftPinned.includes('actions')) {\n leftPinned.unshift('actions');\n this.columnPinning.set({ ...currentPinning, left: leftPinned });\n }\n }\n });\n\n afterNextRender(() => {\n const containerEl = this.tbodyContainer()?.nativeElement;\n if (containerEl && !this._resizeObserver) {\n this._resizeObserver = new ResizeObserver(entries => {\n for (const entry of entries) {\n this.tbodyContainerHeight.set(entry.contentRect.height);\n }\n this._checkVerticalScroll();\n this._checkHorizontalScroll();\n });\n\n this._resizeObserver.observe(containerEl);\n this.tbodyContainerHeight.set(containerEl.clientHeight);\n\n this._destroy$.subscribe(() => {\n if (this._resizeObserver) {\n this._resizeObserver.disconnect();\n this._resizeObserver = null;\n }\n });\n }\n });\n\n explicitEffect([this._configPagination], ([configPagination]) => {\n if (configPagination) {\n this.pagination.set(configPagination);\n }\n });\n\n explicitEffect([this.columnFilters, this.globalFilter, this.pagination, this.sorting, this._data], () => {\n if (this.isVirtual()) {\n const wrapperEl = this.tbodyWrapper()?.nativeElement;\n if (wrapperEl) {\n wrapperEl.scrollTop = 0;\n }\n\n this.virtualizer.scrollToOffset(0);\n }\n\n queueMicrotask(() => {\n this._checkVerticalScroll();\n this._checkHorizontalScroll();\n if (this.isVirtual()) {\n this._dynamicGroupsVersion.update(v => v + 1);\n }\n });\n });\n\n explicitEffect([this.virtualizer.getVirtualItems], () => {\n if (!this.isVirtual()) {\n return;\n }\n\n queueMicrotask(() => {\n this._checkLastRowTouchesBottom();\n });\n });\n\n explicitEffect([this.isLoading, this.isProcessing], () => {\n const loading = this.isLoading();\n const processing = this.isProcessing();\n\n if (loading || processing) {\n const wrapperEl = this.tbodyWrapper()?.nativeElement;\n if (wrapperEl) {\n this._savedScrollLeft.set(wrapperEl.scrollLeft);\n wrapperEl.scrollTop = 0;\n }\n\n const scrollbar = this.tbodyScrollbar();\n if (scrollbar) {\n void scrollbar.scrollTo({ top: 0, left: this._savedScrollLeft(), duration: 0 });\n }\n\n return;\n }\n\n queueMicrotask(() => {\n const wrapperEl = this.tbodyWrapper()?.nativeElement;\n if (wrapperEl) {\n wrapperEl.scrollTop = 0;\n wrapperEl.scrollLeft = this._savedScrollLeft();\n }\n\n if (this.isVirtual()) {\n const scrollbar = this.tbodyScrollbar();\n if (scrollbar) {\n void scrollbar.scrollTo({ top: 0, left: this._savedScrollLeft(), duration: 0 });\n }\n\n this.virtualizer.scrollToOffset(0);\n this._dynamicGroupsVersion.update(v => v + 1);\n }\n\n this._checkScrollState();\n });\n });\n\n explicitEffect(\n [\n this.columnOrder,\n this.columnSizing,\n this.columnPinning,\n this.columnVisibility,\n this.showHeaderFooterShadow,\n this.showHorizontalBorder,\n this.showVerticalBorder,\n ],\n () => {\n this._saveConfig();\n },\n { defer: true }\n );\n }\n\n // ─── Lifecycle ────────────────────────────────────────────────────────────\n\n ngAfterViewInit(): void {\n queueMicrotask(() => this._checkScrollState());\n this.zControl.emit({\n updateConfig: (config: Partial<ZTableConfig<T>>) => {\n const current = this.zConfig();\n Object.assign(current, config);\n },\n toggleSettings: () => {\n this.showSettingsDrawer.set(!this.showSettingsDrawer());\n },\n resetFilters: () => {\n this.columnFilters.set([]);\n this.globalFilter.set('');\n },\n resetSorting: () => {\n this.sorting.set([]);\n },\n addItem: (item: T) => {\n const current = this.zConfig();\n current.data = [...current.data, item];\n this._dataForceUpdate.update(v => v + 1);\n },\n updateItem: (id: string | number, updates: Partial<T>, fieldKey?: keyof T) => {\n const current = this.zConfig();\n current.data = current.data.map((row, index) => {\n const rowId = fieldKey\n ? (row[fieldKey] as string | number)\n : current.getRowId\n ? current.getRowId(row, index, undefined, current.data)\n : ((row as Record<string, unknown>)['id'] as string | number);\n\n return rowId === id ? { ...row, ...updates } : row;\n });\n this._dataForceUpdate.update(v => v + 1);\n this._rowUpdate.set({ rowId: String(id), updates: updates as Record<string, unknown> });\n },\n deleteItem: (id: string | number, fieldKey?: keyof T) => {\n const current = this.zConfig();\n current.data = current.data.filter((row, index) => {\n const rowId = fieldKey\n ? (row[fieldKey] as string | number)\n : current.getRowId\n ? current.getRowId(row, index, undefined, current.data)\n : ((row as Record<string, unknown>)['id'] as string | number);\n\n return rowId !== id;\n });\n this._dataForceUpdate.update(v => v + 1);\n },\n getItems: () => this.zConfig().data,\n setColumnVisibility: (columnIds: string | string[], visible: boolean) => {\n const ids = Array.isArray(columnIds) ? columnIds : [columnIds];\n const currentVisibility = this.columnVisibility();\n const newVisibility = { ...currentVisibility };\n const allColumnIds = this.table\n .getAllLeafColumns()\n .map(col => col.id)\n .filter(id => id !== 'expand' && id !== 'select');\n const visibleCount = allColumnIds.filter(id => currentVisibility[id] !== false).length;\n if (!visible) {\n const columnsToHide = ids.filter(id => currentVisibility[id] !== false);\n const remainingVisible = visibleCount - columnsToHide.length;\n if (remainingVisible < 2) {\n console.warn('[z-table] Cannot hide columns: at least 2 columns must remain visible');\n return;\n }\n }\n\n ids.forEach(id => {\n newVisibility[id] = visible;\n });\n\n this.columnVisibility.set(newVisibility);\n },\n });\n }\n\n // ─── Selection Helpers ────────────────────────────────────────────────────\n\n /**\n * Syncs parent row selection state based on children.\n * If all children are selected, the parent is auto-selected;\n * if no children are selected, the parent is deselected.\n */\n private _handleRowSelectionWithParents(newState: RowSelectionState): void {\n const stateRecord = newState as Record<string, boolean>;\n const finalState: Record<string, boolean> = { ...stateRecord };\n\n const allRows = this.table.getRowModel().rows;\n allRows.forEach(row => {\n if (!row.subRows || row.subRows.length === 0) {\n return;\n }\n\n const allChildrenSelected = row.subRows.every(child => finalState[child.id] === true);\n if (allChildrenSelected) {\n finalState[row.id] = true;\n return;\n }\n\n const someChildrenSelected = row.subRows.some(child => finalState[child.id] === true);\n if (!someChildrenSelected) {\n delete finalState[row.id];\n }\n });\n\n this.rowSelection.set(finalState as RowSelectionState);\n this.zChange.emit({\n type: 'select',\n data: { selection: finalState as RowSelectionState },\n });\n }\n\n // ─── Async State Helpers ──────────────────────────────────────────────────\n\n /**\n * Wraps state mutations with a debounced processing indicator.\n * Shows a brief loading state to prevent UI flicker during\n * filter/sort recomputation on large datasets.\n */\n private _runAsyncStateUpdate(updateFn: () => void, forceLocal = false): void {\n const isServerMode = this.zConfig().mode === 'server';\n const hasLocalFiltering = this.hasLocalFiltering();\n const hasLocalSorting = this.hasLocalSorting();\n const shouldRunAsync = !isServerMode || forceLocal || hasLocalFiltering || hasLocalSorting;\n\n if (!shouldRunAsync) {\n updateFn();\n return;\n }\n\n this.isProcessing.set(true);\n setTimeout(() => {\n updateFn();\n this.isProcessing.set(false);\n }, this.zConfig().debounceTime ?? Z_DEFAULT_DEBOUNCE_TIME);\n }\n\n private _emitFilterChangeDebounced(filters: ColumnFiltersState, search: string): void {\n if (this._filterEmitDebounceTimeout) {\n clearTimeout(this._filterEmitDebounceTimeout);\n }\n\n this._filterEmitDebounceTimeout = setTimeout(() => {\n this.zChange.emit({\n type: 'filter',\n data: { filters, search },\n });\n }, 300);\n }\n\n private _checkScrollState(): void {\n this._checkVerticalScroll();\n this._checkHorizontalScroll();\n this._refreshPinnedRowHeights();\n }\n\n private _refreshPinnedRowHeights(): void {\n const tbodyWrapperEl = this.tbodyWrapper()?.nativeElement;\n if (!tbodyWrapperEl) {\n if (Object.keys(this.pinnedRowHeights()).length > 0) {\n this.pinnedRowHeights.set({});\n }\n return;\n }\n\n const topRows = this.table.getTopRows();\n const bottomRows = this.table.getBottomRows();\n if (topRows.length === 0 && bottomRows.length === 0) {\n if (Object.keys(this.pinnedRowHeights()).length > 0) {\n this.pinnedRowHeights.set({});\n }\n return;\n }\n\n const domRowHeights = new Map<string, number>();\n const domRows = tbodyWrapperEl.querySelectorAll('tbody tr[data-row-id]');\n domRows.forEach(rowEl => {\n const rowId = rowEl.getAttribute('data-row-id');\n if (!rowId) {\n return;\n }\n\n domRowHeights.set(rowId, rowEl.getBoundingClientRect().height);\n });\n\n const nextHeights: Record<string, number> = {};\n for (const row of [...topRows, ...bottomRows]) {\n const height = domRowHeights.get(row.id);\n if (!height) {\n continue;\n }\n\n nextHeights[row.id] = height;\n }\n\n const currentHeights = this.pinnedRowHeights();\n const currentKeys = Object.keys(currentHeights);\n const nextKeys = Object.keys(nextHeights);\n if (currentKeys.length === nextKeys.length) {\n const hasChanges = nextKeys.some(key => currentHeights[key] !== nextHeights[key]);\n if (!hasChanges) {\n return;\n }\n }\n\n this.pinnedRowHeights.set(nextHeights);\n }\n\n private _checkVerticalScroll(): void {\n const tbodyWrapperEl = this.tbodyWrapper()?.nativeElement;\n if (tbodyWrapperEl) {\n const hasScroll = tbodyWrapperEl.scrollHeight > tbodyWrapperEl.clientHeight;\n this.hasVerticalScroll.set(hasScroll);\n this._checkLastRowTouchesBottom();\n }\n }\n\n private _checkLastRowTouchesBottom(): void {\n const tbodyWrapperEl = this.tbodyWrapper()?.nativeElement;\n if (!tbodyWrapperEl) {\n return;\n }\n\n const hasScroll = tbodyWrapperEl.scrollHeight > tbodyWrapperEl.clientHeight;\n if (hasScroll) {\n this.lastRowTouchesBottom.set(true);\n return;\n }\n\n if (this.isVirtual()) {\n const virtualScrollInner = tbodyWrapperEl.querySelector('.z-virtual-scroll-inner');\n if (!virtualScrollInner) {\n this.lastRowTouchesBottom.set(true);\n return;\n }\n\n const virtualRows = virtualScrollInner.querySelectorAll('.z-virtual-row');\n if (virtualRows.length === 0) {\n this.lastRowTouchesBottom.set(true);\n return;\n }\n\n const lastVirtualRow = virtualRows[virtualRows.length - 1];\n const lastTr = lastVirtualRow.querySelector('tbody tr:last-child');\n if (!lastTr) {\n this.lastRowTouchesBottom.set(true);\n return;\n }\n\n const wrapperRect = tbodyWrapperEl.getBoundingClientRect();\n const rowRect = lastTr.getBoundingClientRect();\n const gap = wrapperRect.bottom - rowRect.bottom;\n this.lastRowTouchesBottom.set(gap <= 2);\n return;\n }\n\n const tbody = tbodyWrapperEl.querySelector('tbody');\n if (!tbody) {\n this.lastRowTouchesBottom.set(true);\n return;\n }\n\n const lastRow = tbody.querySelector('tr:last-child');\n if (!lastRow) {\n this.lastRowTouchesBottom.set(true);\n return;\n }\n\n const wrapperRect = tbodyWrapperEl.getBoundingClientRect();\n const rowRect = lastRow.getBoundingClientRect();\n const gap = wrapperRect.bottom - rowRect.bottom;\n this.lastRowTouchesBottom.set(gap <= 2);\n }\n\n private _checkHorizontalScroll(): void {\n const containerEl = this.tbodyContainer()?.nativeElement;\n if (containerEl) {\n const tableWidth = this.table.getTotalSize();\n const containerWidth = containerEl.clientWidth;\n const hasScroll = tableWidth > containerWidth;\n this.hasHorizontalScroll.set(hasScroll);\n\n const scrollableEl = this.tbodyWrapper()?.nativeElement;\n if (scrollableEl) {\n this._updateScrollShadowState(scrollableEl);\n }\n }\n }\n\n private _updateScrollShadowState(element: HTMLElement): void {\n const { scrollLeft, scrollWidth, clientWidth } = element;\n const hasScrollLeft = scrollLeft > 0;\n\n const hasRightPinned = this.hasRightPinnedColumns();\n const isAtEnd = scrollLeft + clientWidth >= scrollWidth - 1;\n const hasScrollRight = hasRightPinned && !isAtEnd;\n\n this.hasScrollLeft.set(hasScrollLeft);\n this.hasScrollRight.set(hasScrollRight);\n }\n\n public hasRightPinnedColumns(): boolean {\n return this.table.getRightLeafColumns().length > 0;\n }\n\n // ─── Scroll Event Handlers ────────────────────────────────────────────────\n\n public onTbodyScroll(event: Event): void {\n if (this._isSyncingScroll()) {\n return;\n }\n const target = event.target as HTMLElement;\n this._syncScrollLeft(target.scrollLeft);\n this._updateScrollShadowState(target);\n }\n\n private _syncScrollLeft(scrollLeft: number): void {\n untracked(() => {\n this._isSyncingScroll.set(true);\n });\n const thead = this.theadWrapper()?.nativeElement;\n const tbody = this.tbodyWrapper()?.nativeElement;\n const tfoot = this.tfootWrapper()?.nativeElement;\n\n if (thead) {\n thead.scrollLeft = scrollLeft;\n }\n if (tbody) {\n tbody.scrollLeft = scrollLeft;\n }\n if (tfoot) {\n tfoot.scrollLeft = scrollLeft;\n }\n\n untracked(() => {\n this._isSyncingScroll.set(false);\n });\n }\n\n // ─── Sort / Pagination / Search Handlers ──────────────────────────────────\n\n /** Handles sort click; auto-adds shiftKey for multi-sort when enabled */\n public handleSort(event: Event, handler?: (event: unknown) => void): void {\n event.preventDefault();\n if (this.zConfig().enableMultiSort) {\n const multiSortEvent = new MouseEvent('click', { shiftKey: true });\n handler?.(multiSortEvent);\n return;\n }\n\n handler?.(event);\n }\n\n public onColumnDrop(event: CdkDragDrop<string[]>): void {\n const allColumns = this.table.getAllLeafColumns();\n const columnIds = allColumns.filter(c => c.id !== 'select' && c.id !== 'expand').map(c => c.id);\n moveItemInArray(columnIds, event.previousIndex, event.currentIndex);\n const finalOrder = ['select', 'expand', ...columnIds];\n this.table.setColumnOrder(finalOrder);\n }\n\n public onToggleAllColumns(): void {\n this.table.toggleAllColumnsVisible();\n }\n\n public onPageChange(event: { pageIndex: number; pageSize: number }, emitType: 'user' | 'auto' = 'user'): void {\n if (emitType === 'user') {\n this.isProcessing.set(true);\n this._runAsyncStateUpdate(() => {\n this.pagination.set({ pageIndex: event.pageIndex, pageSize: event.pageSize });\n this.isProcessing.set(false);\n\n this.zChange.emit({\n type: 'page',\n data: { ...event, emitType },\n });\n });\n\n return;\n }\n\n this.pagination.set({ pageIndex: event.pageIndex, pageSize: event.pageSize });\n this.zChange.emit({\n type: 'page',\n data: { ...event, emitType },\n });\n }\n\n public onSearchChange(value: string | number | null): void {\n const searchValue = value === null ? '' : String(value);\n this.globalFilter.set(searchValue);\n this._runAsyncStateUpdate(() => {\n this.zChange.emit({\n type: 'search' as const,\n data: {\n search: searchValue,\n filters: this.columnFilters(),\n sorting: this.sorting(),\n pagination: this.pagination(),\n },\n });\n\n this._checkVerticalScroll();\n this._checkHorizontalScroll();\n });\n }\n\n public toggleHeaderFooterShadow(): void {\n this.showHeaderFooterShadow.update(v => !v);\n }\n\n public onActionClick(event: ZTableActionClickEvent<T>): void {\n this.zChange.emit({\n type: 'action',\n data: event,\n });\n }\n\n public onCellClick(row: Row<T>, columnId: string, value: unknown): void {\n this.zChange.emit({\n type: 'cellClick',\n data: {\n row: row.original,\n rowId: row.id,\n columnId,\n value,\n },\n });\n }\n\n public onCellEdit(event: ZTableEditCellChangeEvent<T>): void {\n this.zChange.emit({\n type: 'cellEdit',\n data: {\n row: event.row,\n rowId: event.rowId,\n rowIndex: event.rowIndex,\n columnId: event.columnId,\n oldValue: event.oldValue,\n newValue: event.newValue,\n },\n });\n }\n\n // ─── Settings Drawer ─────────────────────────────────────────────────────\n\n public openSettingsDrawer(): void {\n if (this.columnOrder().length === 0) {\n this.columnOrder.set(this.table.getAllLeafColumns().map(col => col.id));\n }\n\n this.pendingVisibleColumns.set(\n this.table\n .getAllLeafColumns()\n .filter(col => col.getIsVisible())\n .map(col => col.id)\n );\n\n this.pendingColumnOrder.set(this.columnOrder());\n this.pendingShowHeaderFooterShadow.set(this.showHeaderFooterShadow());\n this.showSettingsDrawer.set(true);\n }\n\n public onPendingColumnDrop(event: CdkDragDrop<string[]>): void {\n const fullOrder = this.columnOrder();\n const unpinnedColumns = fullOrder.filter(id => {\n if (id === 'expand' || id === 'select') {\n return false;\n }\n\n const column = this.table.getColumn(id);\n return !column?.getIsPinned();\n });\n\n const movedItem = unpinnedColumns[event.previousIndex];\n unpinnedColumns.splice(event.previousIndex, 1);\n unpinnedColumns.splice(event.currentIndex, 0, movedItem);\n\n const expandSelect = fullOrder.filter(id => id === 'expand' || id === 'select');\n const pinnedLeft = fullOrder.filter(id => {\n const col = this.table.getColumn(id);\n return col?.getIsPinned() === 'left' && id !== 'expand' && id !== 'select';\n });\n const pinnedRight = fullOrder.filter(id => {\n const col = this.table.getColumn(id);\n return col?.getIsPinned() === 'right';\n });\n\n const newOrder = [...expandSelect, ...pinnedLeft, ...unpinnedColumns, ...pinnedRight];\n this.columnOrder.set(newOrder);\n }\n\n public onVisibleColumnsChange(values: (string | number)[]): void {\n if (values.length >= 2) {\n this.pendingVisibleColumns.set(values.map(v => String(v)));\n }\n }\n\n public onToggleColumnVisibility(columnId: string): void {\n const currentVisibility = this.columnVisibility();\n const isVisible = currentVisibility[columnId] !== false;\n\n const allColumnIds = this.columnOrder().filter(id => id !== 'expand' && id !== 'select');\n const visibleCount = allColumnIds.filter(id => currentVisibility[id] !== false).length;\n\n if (isVisible) {\n if (visibleCount <= 2) {\n return;\n }\n }\n\n if (this._settingsDebounceTimeout) {\n clearTimeout(this._settingsDebounceTimeout);\n }\n\n this._settingsDebounceTimeout = setTimeout(() => {\n this.columnVisibility.set({ ...this.columnVisibility(), [columnId]: !isVisible });\n }, 100);\n }\n\n public onToggleColumnPin(columnId: string, position: 'left' | 'right'): void {\n const column = this.table.getColumn(columnId);\n if (!column) {\n return;\n }\n\n const currentPin = column.getIsPinned();\n const newPosition = currentPin === position ? false : position;\n\n if (this._settingsDebounceTimeout) {\n clearTimeout(this._settingsDebounceTimeout);\n }\n this._settingsDebounceTimeout = setTimeout(() => {\n column.pin(newPosition);\n\n if (newPosition) {\n const columnConfig = this._findColumnConfig(columnId);\n if (columnConfig) {\n const colSpan = getHeaderColSpan(columnConfig);\n if (colSpan && colSpan > 1) {\n const allColumns = this.table.getAllLeafColumns();\n const currentIdx = allColumns.findIndex(c => c.id === columnId);\n if (currentIdx !== -1) {\n for (let i = 1; i < colSpan && currentIdx + i < allColumns.length; i++) {\n const coveredColumn = allColumns[currentIdx + i];\n coveredColumn.pin(newPosition);\n }\n }\n }\n }\n }\n\n this._columnPinVersion.update(v => v + 1);\n this._checkHorizontalScroll();\n }, 100);\n }\n\n public handleColumnPin(columnId: string, position: 'left' | 'right' | false): void {\n const column = this.table.getColumn(columnId);\n if (!column) {\n return;\n }\n\n column.pin(position);\n if (position) {\n const columnConfig = this._findColumnConfig(columnId);\n if (columnConfig) {\n const colSpan = getHeaderColSpan(columnConfig);\n if (colSpan && colSpan > 1) {\n const allColumns = this.table.getAllLeafColumns();\n const currentIdx = allColumns.findIndex(c => c.id === columnId);\n if (currentIdx !== -1) {\n for (let i = 1; i < colSpan && currentIdx + i < allColumns.length; i++) {\n const coveredColumn = allColumns[currentIdx + i];\n coveredColumn.pin(position);\n }\n }\n }\n }\n }\n\n this._columnPinVersion.update(v => v + 1);\n this._checkHorizontalScroll();\n }\n\n public moveColumnLeft(columnId: string): void {\n const currentOrder = this.columnOrder();\n if (currentOrder.length === 0) {\n this.columnOrder.set(this.table.getAllLeafColumns().map(col => col.id));\n }\n\n const order = [...this.columnOrder()];\n const currentIndex = order.indexOf(columnId);\n\n if (currentIndex <= 0) {\n return;\n }\n\n const prevIndex = currentIndex - 1;\n if (order[prevIndex] === 'select' || order[prevIndex] === 'expand' || order[prevIndex] === 'actions') {\n return;\n }\n\n [order[currentIndex], order[prevIndex]] = [order[prevIndex], order[currentIndex]];\n this.columnOrder.set(order);\n }\n\n public moveColumnRight(columnId: string): void {\n const currentOrder = this.columnOrder();\n if (currentOrder.length === 0) {\n this.columnOrder.set(this.table.getAllLeafColumns().map(col => col.id));\n }\n\n const order = [...this.columnOrder()];\n const currentIndex = order.indexOf(columnId);\n\n if (currentIndex < 0 || currentIndex >= order.length - 1) {\n return;\n }\n\n [order[currentIndex], order[currentIndex + 1]] = [order[currentIndex + 1], order[currentIndex]];\n this.columnOrder.set(order);\n }\n\n public isFirstMovableColumn(columnId: string): boolean {\n const order =\n this.columnOrder().length > 0 ? this.columnOrder() : this.table.getAllLeafColumns().map(col => col.id);\n const movableColumns = order.filter(id => id !== 'select' && id !== 'expand' && id !== 'actions');\n return movableColumns.length > 0 && movableColumns[0] === columnId;\n }\n\n public isLastMovableColumn(columnId: string): boolean {\n const order =\n this.columnOrder().length > 0 ? this.columnOrder() : this.table.getAllLeafColumns().map(col => col.id);\n const movableColumns = order.filter(id => id !== 'select' && id !== 'expand' && id !== 'actions');\n return movableColumns.length > 0 && movableColumns[movableColumns.length - 1] === columnId;\n }\n\n // ─── Settings Persistence ─────────────────────────────────────────────────\n\n /** Saves current column layout, sizing, pinning, and visibility to ZCacheService */\n private _saveConfig(): void {\n const key = this.zKey();\n if (!key) {\n return;\n }\n\n const columnInfo = this._collectColumnInfo();\n const config: ZTableSavedConfig = {\n columnOrder: this.columnOrder(),\n columnSizing: this.columnSizing(),\n columnPinning: {\n left: this.columnPinning().left,\n right: this.columnPinning().right,\n },\n columnVisibility: this.columnVisibility(),\n columnInfo,\n showHeaderFooterShadow: this.showHeaderFooterShadow(),\n showHorizontalBorder: this.showHorizontalBorder(),\n showVerticalBorder: this.showVerticalBorder(),\n };\n\n try {\n ZCacheService.set(`table-config-${key}`, config);\n } catch (error) {\n console.error('Failed to save table config:', error);\n }\n }\n\n private _collectColumnInfo(): ZTableSavedColumnInfo[] {\n const columns = this.zConfig().columns ?? [];\n const result: ZTableSavedColumnInfo[] = [];\n const collect = (cols: ZTableColumnConfig<T>[]): void => {\n for (const col of cols) {\n result.push({\n id: col.id,\n accessorKey: col.accessorKey,\n });\n if (col.columns) {\n collect(col.columns);\n }\n }\n };\n\n collect(columns);\n return result;\n }\n\n /** Loads cached config from ZCacheService; validates schema compatibility first */\n private _loadConfigCache(key: string): boolean {\n if (!key) {\n return false;\n }\n\n try {\n const config = ZCacheService.get<ZTableSavedConfig>(`table-config-${key}`);\n if (!config) {\n return false;\n }\n\n if (!this._isColumnConfigValid(config.columnInfo)) {\n ZCacheService.delete(`table-config-${key}`);\n return false;\n }\n\n if (config.columnOrder && config.columnOrder.length > 0) {\n this.columnOrder.set(config.columnOrder);\n }\n\n if (config.columnPinning) {\n this.columnPinning.set(config.columnPinning);\n }\n\n if (config.columnVisibility) {\n this.columnVisibility.set(config.columnVisibility);\n }\n\n if (typeof config.showHeaderFooterShadow === 'boolean') {\n this.showHeaderFooterShadow.set(config.showHeaderFooterShadow);\n }\n\n if (typeof config.showHorizontalBorder === 'boolean') {\n this.showHorizontalBorder.set(config.showHorizontalBorder);\n }\n\n if (typeof config.showVerticalBorder === 'boolean') {\n this.showVerticalBorder.set(config.showVerticalBorder);\n }\n\n if (config.columnSizing) {\n this.table.setColumnSizing(config.columnSizing!);\n }\n\n return true;\n } catch (error) {\n console.error('Failed to load table config:', error);\n return false;\n }\n }\n\n /**\n * Validates cached column info against current config.\n * Returns false if columns have been added/removed/renamed since cache was saved,\n * which triggers cache invalidation.\n */\n private _isColumnConfigValid(cachedColumnInfo?: ZTableSavedColumnInfo[]): boolean {\n if (!cachedColumnInfo || cachedColumnInfo.length === 0) {\n return true;\n }\n\n const currentColumnMap = new Map<string, string | undefined>();\n const columns = this.zConfig().columns ?? [];\n\n const collectColumns = (cols: ZTableColumnConfig<T>[]): void => {\n for (const col of cols) {\n currentColumnMap.set(col.id, col.accessorKey);\n if (col.columns) {\n collectColumns(col.columns);\n }\n }\n };\n\n collectColumns(columns);\n for (const cached of cachedColumnInfo) {\n if (!currentColumnMap.has(cached.id)) {\n return false;\n }\n if (currentColumnMap.get(cached.id) !== cached.accessorKey) {\n return false;\n }\n }\n\n return true;\n }\n\n // ─── Filter / Sort Mode Helpers ───────────────────────────────────────────\n // These helpers determine whether a column's sort/filter changes should be\n // processed locally by TanStack or emitted to the parent for server-side handling.\n\n private _getChangedFilterColumnIds(oldState: ColumnFiltersState, newState: ColumnFiltersState): string[] {\n const changedIds: string[] = [];\n const oldMap = new Map(oldState.map(f => [f.id, f.value]));\n const newMap = new Map(newState.map(f => [f.id, f.value]));\n\n for (const filter of newState) {\n const oldValue = oldMap.get(filter.id);\n if (JSON.stringify(oldValue) !== JSON.stringify(filter.value)) {\n changedIds.push(filter.id);\n }\n }\n\n for (const filter of oldState) {\n if (!newMap.has(filter.id)) {\n changedIds.push(filter.id);\n }\n }\n\n return [...new Set(changedIds)];\n }\n\n private _getChangedSortColumnIds(oldState: SortingState, newState: SortingState): string[] {\n const changedIds: string[] = [];\n const oldMap = new Map(oldState.map(s => [s.id, s.desc]));\n const newMap = new Map(newState.map(s => [s.id, s.desc]));\n\n for (const sort of newState) {\n const oldDesc = oldMap.get(sort.id);\n if (oldDesc !== sort.desc) {\n changedIds.push(sort.id);\n }\n }\n\n for (const sort of oldState) {\n if (!newMap.has(sort.id)) {\n changedIds.push(sort.id);\n }\n }\n\n return [...new Set(changedIds)];\n }\n\n private _isColumnFilterModeLocal(columnId: string): boolean {\n const columnConfig = this._findColumnConfig(columnId);\n if (!columnConfig) {\n return true;\n }\n\n const filterConfig =\n typeof columnConfig.filter === 'boolean' ? { enabled: columnConfig.filter } : columnConfig.filter;\n const filterMode = filterConfig?.mode ?? 'local';\n return filterMode === 'local';\n }\n\n private _isColumnSortModeLocal(columnId: string): boolean {\n const columnConfig = this._findColumnConfig(columnId);\n if (!columnConfig) {\n return true;\n }\n\n const sortConfig = typeof columnConfig.sort === 'boolean' ? { enabled: columnConfig.sort } : columnConfig.sort;\n const sortMode = sortConfig?.mode ?? 'local';\n return sortMode === 'local';\n }\n\n private _filterServerModeColumnFilters(filters: ColumnFiltersState): ColumnFiltersState {\n return filters.filter(filter => !this._isColumnFilterModeLocal(filter.id));\n }\n\n private _filterServerModeSorting(sorting: SortingState): SortingState {\n return sorting.filter(sort => !this._isColumnSortModeLocal(sort.id));\n }\n\n // ─── Column Config Lookup (Cached) ────────────────────────────────────────\n\n /**\n * Recursively finds a column config by ID with caching.\n * Cache is invalidated when the column array reference changes.\n */\n private _findColumnConfig(columnId: string): ZTableColumnConfig<T> | undefined {\n const { columns } = this.zConfig();\n if (columns !== this._lastColumnsRef) {\n this._columnConfigCache.clear();\n this._lastColumnsRef = columns;\n }\n\n if (this._columnConfigCache.has(columnId)) {\n return this._columnConfigCache.get(columnId);\n }\n\n const findInColumns = (cols: ZTableColumnConfig<T>[]): ZTableColumnConfig<T> | undefined => {\n for (const col of cols) {\n if (col.id === columnId) {\n return col;\n }\n if (col.columns) {\n const found = findInColumns(col.columns);\n if (found) {\n return found;\n }\n }\n }\n return undefined;\n };\n\n const result = findInColumns(columns);\n this._columnConfigCache.set(columnId, result);\n return result;\n }\n}\n","<!-- Toolbar: Search & Settings -->\n@if (isSearchEnabled() || zConfig().enableSettings) {\n <div class=\"z-table-toolbar mb-2 flex items-center justify-between gap-4\">\n <!-- Search -->\n @if (isSearchEnabled()) {\n @let config = searchConfig();\n <z-input\n [class]=\"config?.width ?? 'w-64'\"\n [zSize]=\"config?.size ?? 'sm'\"\n [zPlaceholder]=\"config?.placeholder ?? 'i18n_z_ui_table_search' | translate\"\n [zSearch]=\"true\"\n [zDebounce]=\"config?.debounceTime ?? 300\"\n (zOnSearch)=\"onSearchChange($event)\" />\n } @else {\n <div></div>\n }\n\n <!-- Settings Button -->\n @if (zConfig().enableSettings) {\n <z-button zType=\"outline\" zSize=\"sm\" zTypeIcon=\"lucideSettings\" (click)=\"openSettingsDrawer()\">\n {{ 'i18n_z_ui_table_settings' | translate }}\n </z-button>\n }\n </div>\n}\n\n<div\n [class]=\"classTable()\"\n [class.z-hide-horizontal-border]=\"!showHorizontalBorder()\"\n [class.z-hide-vertical-border]=\"!showVerticalBorder()\"\n [style.max-height]=\"zConfig().maxHeight\"\n [style.min-height]=\"zConfig().minHeight\">\n <!-- Shared colgroup template -->\n <ng-template #colGroupTpl>\n <colgroup>\n @for (column of orderedLeafColumns(); track column.id) {\n @if (column.getIsVisible()) {\n @let customWidth = column.id | zTableColumnConfig: zConfig().columns : 'width';\n <col [style.width]=\"customWidth || 'calc(var(--col-' + column.id + '-size) * 1px)'\" />\n }\n }\n </colgroup>\n </ng-template>\n\n <!-- Header table -->\n <div\n class=\"z-thead-wrapper shadow-card\"\n [class.z-shadow-header]=\"shouldHeaderShowShadow()\"\n [class.z-scroll-left]=\"hasScrollLeft()\"\n [class.z-scroll-right]=\"hasScrollRight()\"\n #theadWrapper>\n <table [ngStyle]=\"columnSizeVars()\" [style.width.px]=\"table.getTotalSize()\">\n <ng-container *ngTemplateOutlet=\"colGroupTpl\" />\n <thead>\n @for (headerGroup of orderedHeaderGroups(); track headerGroup.id) {\n <tr>\n @for (header of headerGroup.headers; track header.id) {\n @let rowSpan = header | zTableSpan: zConfig().columns : 'headerRowSpan';\n @let shouldRender = header | zTableCellRender: headerGroup.headers : zConfig().columns : 'header';\n @if (rowSpan && shouldRender) {\n <th\n [attr.id]=\"header.column.id\"\n [ngStyle]=\"\n header.column\n | zTablePinningStyles: header : 'header' : table : zConfig().columns : columnSizingInfo()\n \"\n [class]=\"\n (header.column.id | zTableColumnConfig: zConfig().columns : 'headerClass') +\n ' ' +\n (header.column.id | zTableColumnConfig: zConfig().columns : 'headerAlignClass')\n \"\n [style]=\"header.column.id | zTableColumnConfig: zConfig().columns : 'headerStyle'\"\n [class.z-sticky-left]=\"header.column.getIsPinned() === 'left'\"\n [class.z-sticky-right]=\"header.column.getIsPinned() === 'right'\"\n [class.z-sticky-left-last]=\"header | zTableCellPin: 'isLastLeftPinned' : zConfig().columns\"\n [class.z-sticky-right-first]=\"header | zTableCellPin: 'isFirstRightPinned' : zConfig().columns\"\n [class.z-sticky-right-last]=\"header | zTableCellPin: 'isLastRightPinned' : zConfig().columns\"\n [class.z-at-left-edge]=\"header | zTableCellOffset: orderedLeafColumns()\"\n [class.z-col-select]=\"header.column.id === 'select'\"\n [class.z-col-expand]=\"header.column.id === 'expand'\"\n [class.z-col-actions]=\"\n header.column.id === 'actions' || header.column.id === actionColumnInfo()?.columnId\n \"\n [attr.rowspan]=\"rowSpan\"\n [attr.colspan]=\"header | zTableSpan: zConfig().columns : 'headerColSpan'\">\n @if (header.column.id === 'select') {\n <!-- Header Checkbox -->\n <div class=\"flex items-center justify-center\">\n <z-checkbox\n [zChecked]=\"table.getIsAllRowsSelected()\"\n [zIndeterminate]=\"table.getIsSomeRowsSelected() && !table.getIsAllRowsSelected()\"\n (zChange)=\"table.toggleAllRowsSelected()\" />\n </div>\n } @else if (header.column.id === 'expand') {\n <!-- Expand All Button -->\n <div class=\"flex items-center justify-center\">\n <button\n type=\"button\"\n (click)=\"table.toggleAllRowsExpanded()\"\n class=\"hover:bg-muted flex h-6 w-6 cursor-pointer items-center justify-center rounded\">\n <z-icon\n zType=\"lucideChevronRight\"\n zSize=\"14\"\n class=\"transition-transform duration-200\"\n [class.rotate-90]=\"table.getIsSomeRowsExpanded()\" />\n </button>\n </div>\n } @else {\n <!-- Header Content with Sort and Pin -->\n <div\n class=\"flex w-full items-center gap-1\"\n [class.justify-center]=\"\n (header.column.id | zTableColumnConfig: zConfig().columns : 'headerAlignClass') ===\n 'text-center'\n \"\n [class.justify-end]=\"\n (header.column.id | zTableColumnConfig: zConfig().columns : 'headerAlignClass') === 'text-right'\n \">\n <!-- Column Options Popover Template -->\n @let columnEnableOrdering =\n header.column.id | zTableColumnConfig: zConfig().columns : 'enableOrdering';\n @let columnEnablePinning =\n header.column.id | zTableColumnConfig: zConfig().columns : 'enablePinning';\n @let effectiveEnableOrdering = columnEnableOrdering || zConfig().enableColumnOrdering;\n @let effectiveEnablePinning = columnEnablePinning || zConfig().enableColumnPinning;\n <ng-template #colOptionsPopoverContent>\n <div class=\"flex flex-col gap-0.5 p-0.5\">\n @if (effectiveEnableOrdering) {\n <button\n type=\"button\"\n [disabled]=\"isFirstMovableColumn(header.column.id) || header.column.getIsPinned()\"\n (click)=\"moveColumnLeft(header.column.id); colOptionsPopover.hideImmediate()\"\n class=\"text-foreground hover:bg-muted flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs disabled:pointer-events-none disabled:opacity-40\">\n <z-icon zType=\"lucideArrowLeft\" zSize=\"12\" />\n <span>{{ 'i18n_z_ui_table_move_left' | translate }}</span>\n </button>\n <button\n type=\"button\"\n [disabled]=\"isLastMovableColumn(header.column.id) || header.column.getIsPinned()\"\n (click)=\"moveColumnRight(header.column.id); colOptionsPopover.hideImmediate()\"\n class=\"text-foreground hover:bg-muted flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs disabled:pointer-events-none disabled:opacity-40\">\n <z-icon zType=\"lucideArrowRight\" zSize=\"12\" />\n <span>{{ 'i18n_z_ui_table_move_right' | translate }}</span>\n </button>\n }\n @if (effectiveEnableOrdering && header.column.getCanPin() && effectiveEnablePinning) {\n <div class=\"border-border my-0.5 border-t\"></div>\n }\n @if (header.column.getCanPin() && effectiveEnablePinning) {\n @if (header.column.getIsPinned() !== 'left') {\n <button\n type=\"button\"\n (click)=\"handleColumnPin(header.column.id, 'left'); colOptionsPopover.hideImmediate()\"\n class=\"text-foreground hover:bg-muted flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs\">\n <z-icon zType=\"lucidePin\" zSize=\"12\" class=\"rotate-90\" />\n <span>{{ 'i18n_z_ui_table_pin_left' | translate }}</span>\n </button>\n }\n @if (header.column.getIsPinned() !== 'right') {\n <button\n type=\"button\"\n (click)=\"handleColumnPin(header.column.id, 'right'); colOptionsPopover.hideImmediate()\"\n class=\"text-foreground hover:bg-muted flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs\">\n <z-icon zType=\"lucidePin\" zSize=\"12\" class=\"-rotate-90\" />\n <span>{{ 'i18n_z_ui_table_pin_right' | translate }}</span>\n </button>\n }\n @if (header.column.getIsPinned()) {\n <button\n type=\"button\"\n (click)=\"handleColumnPin(header.column.id, false); colOptionsPopover.hideImmediate()\"\n class=\"text-destructive hover:bg-destructive/10 flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs\">\n <z-icon zType=\"lucideX\" zSize=\"12\" />\n <span>{{ 'i18n_z_ui_table_unpin' | translate }}</span>\n </button>\n }\n }\n </div>\n </ng-template>\n\n <!-- Header Text with Popover Trigger -->\n @let hasColumnOptions =\n (header.column.getCanPin() && effectiveEnablePinning) || effectiveEnableOrdering;\n <div\n class=\"z-header-text-wrapper inline-flex max-w-full items-center gap-1 rounded px-1.5 py-1\"\n [class.cursor-pointer]=\"hasColumnOptions\"\n [class.z-has-options]=\"hasColumnOptions\"\n [attr.z-popover]=\"hasColumnOptions ? '' : null\"\n #colOptionsPopover=\"zPopover\"\n #headerTextWrapper\n z-popover\n [zPopoverContent]=\"hasColumnOptions ? colOptionsPopoverContent : null\"\n zTrigger=\"click\"\n zPosition=\"bottom\"\n [zOffset]=\"5\">\n <ng-container\n *flexRender=\"header.column.columnDef.header; props: header.getContext(); let headerContent\">\n @if (headerContent | zTableIsTemplateRef) {\n <div\n class=\"z-template-content\"\n [ngClass]=\"\n header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentClass'\n \"\n [ngStyle]=\"\n header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentStyle'\n \">\n <ng-container\n *ngTemplateOutlet=\"headerContent; context: { $implicit: header.getContext() }\" />\n </div>\n } @else if (headerContent | zTableHasIcon) {\n <z-table-icon-text\n class=\"min-w-0 truncate\"\n [zText]=\"headerContent\"\n [zTooltip]=\"header.column.id | zTableColumnConfig: zConfig().columns : 'headerTooltip'\"\n [zTriggerElement]=\"headerTextWrapper\"\n [ngClass]=\"\n header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentClass'\n \"\n [ngStyle]=\"\n header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentStyle'\n \" />\n } @else {\n <span\n class=\"z-table-cell-text\"\n z-tooltip\n [zContent]=\"\n (header.column.id | zTableColumnConfig: zConfig().columns : 'headerTooltip') ||\n headerContent\n \"\n [zTriggerElement]=\"headerTextWrapper\"\n [innerHTML]=\"headerContent | translate | zSafeHtml\"\n [ngClass]=\"\n header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentClass'\n \"\n [ngStyle]=\"\n header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentStyle'\n \"></span>\n }\n </ng-container>\n <!-- Dropdown indicator when has options (between text and sort icon) -->\n @if (hasColumnOptions) {\n <z-icon zType=\"lucideChevronDown\" zSize=\"15\" class=\"text-muted-foreground shrink-0\" />\n }\n </div>\n <!-- Sort Icon (outside wrapper, no hover background) -->\n @if (header.column.getCanSort() && !hasBodyRowSpan()) {\n <span\n class=\"z-sort-icon shrink-0 cursor-pointer text-gray-500 hover:text-gray-700\"\n (click)=\"handleSort($event, header.column.getToggleSortingHandler())\">\n @if (header.column.getIsSorted() === 'asc') {\n <z-icon zType=\"lucideArrowUp\" zSize=\"15\" />\n } @else if (header.column.getIsSorted() === 'desc') {\n <z-icon zType=\"lucideArrowDown\" zSize=\"15\" />\n } @else {\n <z-icon zType=\"lucideArrowDownUp\" zSize=\"15\" class=\"opacity-60\" />\n }\n </span>\n }\n </div>\n }\n <!-- Column Filter -->\n @if (header.column.getCanFilter() && hasFiltering()) {\n <div class=\"mt-1\">\n <z-table-filter [zColumn]=\"$any(header.column)\" [zTable]=\"$any(table)\" />\n </div>\n }\n <!-- Column Resizer -->\n @if (\n header.column.id !== 'select' &&\n header.column.id !== 'expand' &&\n zConfig().enableColumnResizing !== false\n ) {\n <div\n class=\"z-resizer\"\n [class.z-is-resizing]=\"header.column.getIsResizing()\"\n [class.z-resizer-left]=\"\n header.column.getIsPinned() === 'right' || header.column.getIsLastColumn()\n \"\n (dblclick)=\"header.column.resetSize()\"\n [zTableResize]=\"header\"></div>\n }\n </th>\n }\n }\n </tr>\n }\n </thead>\n </table>\n </div>\n\n <!-- Body table -->\n <div\n class=\"z-tbody-wrapper relative\"\n #tbodyContainer\n [class.z-scroll-left]=\"hasScrollLeft()\"\n [class.z-scroll-right]=\"hasScrollRight()\">\n @if (isLoading() || isProcessing()) {\n <!-- Loading State -->\n @if (zConfig().useSkeleton) {\n <!-- Skeleton Loading -->\n <div class=\"animate-in fade-in flex h-full flex-col duration-200\">\n @for (i of skeletonRows(); track $index; let last = $last) {\n <div\n class=\"border-border box-border flex flex-1 flex-col items-start justify-center gap-1.5 px-2\"\n [class.border-b]=\"!last\">\n <z-skeleton zType=\"bar\" zWidth=\"100%\" zHeight=\"22px\" zRadius=\"4px\" />\n <z-skeleton zType=\"bar\" zWidth=\"50%\" zHeight=\"14px\" zRadius=\"4px\" />\n </div>\n }\n </div>\n } @else {\n <!-- Spinner Loading -->\n <div class=\"z-loading-state\">\n <z-loading [zLoading]=\"true\" zSize=\"lg\" [zText]=\"'i18n_z_ui_table_loading' | translate\" />\n </div>\n }\n } @else if (isEmpty()) {\n <div class=\"z-empty-state\">\n @if (isNoSearchResults()) {\n <z-empty zIcon=\"lucideSearchX\" zSize=\"sm\" [zMessage]=\"'i18n_z_ui_table_no_results' | translate\" />\n } @else {\n <z-empty zIcon=\"lucidePackageOpen\" zSize=\"sm\" [zMessage]=\"'i18n_z_ui_table_no_data' | translate\" />\n }\n </div>\n } @else {\n <ng-scrollbar class=\"z-tbody-scrollbar\" #tbodyWrapper track=\"all\" (scroll)=\"onTbodyScroll($event)\">\n @if (isVirtual()) {\n <!-- Virtual Scroll Mode -->\n <div\n class=\"z-virtual-scroll-inner\"\n [style.height.px]=\"virtualizer.getTotalSize()\"\n [style.min-width.px]=\"table.getTotalSize()\">\n @for (virtualItem of virtualizer.getVirtualItems(); track virtualItem.index) {\n @let groupRows = dynamicGroupRows()[virtualItem.index] || [];\n <div\n #virtualRow\n class=\"z-virtual-row\"\n [attr.data-index]=\"virtualItem.index\"\n [style.height.px]=\"\n dynamicSize() ? null : (dynamicGroupHeights()[virtualItem.index] ?? groupSize() * virtualRowHeight())\n \"\n [style.transform]=\"'translate3d(0,' + virtualItem.start + 'px,0)'\">\n <table [ngStyle]=\"columnSizeVars()\" [style.width.px]=\"table.getTotalSize()\">\n <ng-container *ngTemplateOutlet=\"colGroupTpl\" />\n <tbody\n [class.z-has-vertical-scroll]=\"hasVerticalScroll()\"\n [class.z-last-row-touches-bottom]=\"lastRowTouchesBottom()\">\n @for (row of groupRows; track row.id) {\n <tr\n z-table-row-hover\n [style.height.px]=\"dynamicSize() ? null : virtualRowHeight()\"\n [style.min-height.px]=\"dynamicSize() ? virtualRowHeight() : null\"\n [class.z-child-row]=\"row.depth > 0\"\n [class.z-selected]=\"row.getIsSelected()\"\n [class.z-indeterminate-selected]=\"row.getIsSomeSelected() && !row.getIsSelected()\">\n @for (cell of row.getVisibleCells(); track cell.id) {\n @let shouldRenderRowSpan =\n cell | zTableSpan: zConfig().columns : 'shouldRender' : table.getRowModel().rows;\n @let shouldRenderColSpan =\n cell | zTableCellRender: row.getVisibleCells() : zConfig().columns : 'body';\n @if (shouldRenderRowSpan && shouldRenderColSpan) {\n <td\n [ngStyle]=\"\n cell.column\n | zTablePinningStyles\n : cell\n : 'body'\n : row.getVisibleCells()\n : zConfig().columns\n : columnSizingInfo()\n \"\n [class.z-sticky-left]=\"cell.column.getIsPinned() === 'left'\"\n [class.z-sticky-right]=\"cell.column.getIsPinned() === 'right'\"\n [class.z-sticky-left-last]=\"\n cell.column.getIsPinned() === 'left' && cell.column.getIsLastColumn('left')\n \"\n [class.z-sticky-right-first]=\"\n cell.column.getIsPinned() === 'right' && cell.column.getIsFirstColumn('right')\n \"\n [class.z-sticky-right-last]=\"\n cell.column.getIsPinned() === 'right' && cell.column.getIsLastColumn('right')\n \"\n [class.z-at-left-edge]=\"cell | zTableCellOffset: orderedLeafColumns()\"\n [class.z-col-select]=\"cell.column.id === 'select'\"\n [class.z-col-expand]=\"cell.column.id === 'expand'\"\n [class.z-col-actions]=\"cell.column.id === actionColumnInfo()?.columnId\"\n [class.z-at-bottom]=\"\n cell | zTableCellBottom: zConfig().columns : table.getRowModel().rows\n \"\n [attr.rowspan]=\"\n cell | zTableSpan: zConfig().columns : 'cellRowSpan' : table.getRowModel().rows\n \"\n [attr.colspan]=\"cell | zTableSpan: zConfig().columns : 'cellColSpan'\"\n [class]=\"cell | zTableCellConfig: zConfig().columns : 'cellClass'\"\n [style]=\"cell | zTableCellConfig: zConfig().columns : 'cellStyle'\">\n @if (cell.column.id === 'select') {\n <!-- Row Checkbox -->\n <div class=\"flex items-center justify-center\">\n <z-checkbox\n [zChecked]=\"cell.row.getIsSelected()\"\n [zIndeterminate]=\"cell.row.getIsSomeSelected() && !cell.row.getIsSelected()\"\n [zDisabled]=\"!cell.row.getCanSelect()\"\n (zChange)=\"cell.row.toggleSelected()\" />\n </div>\n } @else if (cell.column.id === 'expand') {\n <!-- Expand Button -->\n <div class=\"flex items-center justify-center\">\n @if (cell.row.subRows && cell.row.subRows.length > 0) {\n <button\n type=\"button\"\n (click)=\"cell.row.toggleExpanded()\"\n class=\"hover:bg-muted flex h-6 w-6 cursor-pointer items-center justify-center rounded\">\n <z-icon\n zType=\"lucideChevronRight\"\n zSize=\"14\"\n class=\"transition-transform duration-200\"\n [class.rotate-90]=\"cell.row.getIsExpanded()\" />\n </button>\n }\n </div>\n } @else if (cell.column.id === actionColumnInfo()?.columnId && actionColumnInfo()) {\n <z-table-actions\n [zConfig]=\"$any(actionColumnInfo()!.config)\"\n [zRow]=\"cell.row.original\"\n [zRowId]=\"cell.row.id\"\n (zActionClick)=\"onActionClick($event)\" />\n } @else {\n @let isCellVisible = cell | zTableCellVisible: zConfig().columns;\n @if (isCellVisible) {\n @let editInfoVirtual = cell.getContext() | zTableCellEdit: zConfig().columns;\n @if (editInfoVirtual.enabled) {\n <!-- Editable Cell (Virtual) -->\n <z-table-edit-cell\n [zRow]=\"cell.row.original\"\n [zRowId]=\"cell.row.id\"\n [zRowIndex]=\"cell.row.index\"\n [zColumnId]=\"cell.column.id\"\n [zValue]=\"cell.getValue()\"\n [zRowUpdate]=\"_rowUpdate()\"\n [zEditConfig]=\"$any(editInfoVirtual.config)\"\n (zChange)=\"onCellEdit($any($event))\" />\n } @else {\n <ng-container\n *flexRender=\"\n cell.column.columnDef.cell;\n props: cell.getContext();\n let cellContent\n \">\n @if (cellContent | zTableIsTemplateRef) {\n <!-- TemplateRef rendering -->\n @let isClickable = cell.column.id | zTableCellClickable: zConfig().columns;\n <div\n class=\"z-template-content\"\n [ngClass]=\"cell | zTableCellConfig: zConfig().columns : 'contentClass'\"\n [ngStyle]=\"cell | zTableCellConfig: zConfig().columns : 'contentStyle'\"\n (click)=\"isClickable && onCellClick(row, cell.column.id, cell.getValue())\">\n <ng-container\n *ngTemplateOutlet=\"\n cellContent;\n context: { $implicit: cell.getContext() }\n \" />\n </div>\n } @else if (cellContent | zTableHasIcon) {\n <!-- Icon syntax rendering -->\n @let isClickableIcon = cell.column.id | zTableCellClickable: zConfig().columns;\n <z-table-icon-text\n [zText]=\"cellContent\"\n [zTooltip]=\"cell | zTableCellConfig: zConfig().columns : 'contentTooltip'\"\n [ngClass]=\"cell | zTableCellConfig: zConfig().columns : 'contentClass'\"\n [ngStyle]=\"cell | zTableCellConfig: zConfig().columns : 'contentStyle'\"\n (click)=\"\n isClickableIcon && onCellClick(row, cell.column.id, cell.getValue())\n \" />\n } @else {\n <!-- Default/innerHTML rendering -->\n @let isClickableDefault =\n cell.column.id | zTableCellClickable: zConfig().columns;\n <div\n class=\"z-table-cell-text\"\n z-tooltip\n [zContent]=\"\n (cell | zTableCellConfig: zConfig().columns : 'contentTooltip') ||\n cellContent\n \"\n [innerHTML]=\"cellContent | translate | zSafeHtml\"\n [ngClass]=\"cell | zTableCellConfig: zConfig().columns : 'contentClass'\"\n [ngStyle]=\"cell | zTableCellConfig: zConfig().columns : 'contentStyle'\"\n (click)=\"\n isClickableDefault && onCellClick(row, cell.column.id, cell.getValue())\n \"></div>\n }\n </ng-container>\n }\n }\n }\n </td>\n }\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n } @else {\n <!-- Normal Scroll Mode -->\n <table [ngStyle]=\"columnSizeVars()\" [style.width.px]=\"table.getTotalSize()\">\n <ng-container *ngTemplateOutlet=\"colGroupTpl\" />\n <tbody\n [class.z-has-vertical-scroll]=\"hasVerticalScroll()\"\n [class.z-last-row-touches-bottom]=\"lastRowTouchesBottom()\">\n <!-- Row Template -->\n <ng-template #rowTemplate let-row>\n <tr\n z-table-row-hover\n [attr.data-row-id]=\"row.id\"\n [ngStyle]=\"row | zTableRow: table : 'pinningStyles' : pinnedRowHeights() : virtualRowHeight()\"\n [class.z-child-row]=\"row.depth > 0\"\n [class.z-selected]=\"row.getIsSelected()\"\n [class.z-indeterminate-selected]=\"row.getIsSomeSelected() && !row.getIsSelected()\"\n [class.z-pinned-top]=\"row.getIsPinned() === 'top'\"\n [class.z-pinned-bottom]=\"row.getIsPinned() === 'bottom'\"\n [class.z-shadow-bottom]=\"\n showHeaderFooterShadow() &&\n row.getIsPinned() === 'top' &&\n (row | zTableRow: table : 'isLastTopPinned')\n \"\n [class.z-shadow-top]=\"\n showHeaderFooterShadow() &&\n row.getIsPinned() === 'bottom' &&\n (row | zTableRow: table : 'isFirstBottomPinned')\n \"\n [attr.data-depth]=\"row.depth\">\n @for (cell of row.getVisibleCells(); track cell.id) {\n @let shouldRenderRowSpan =\n cell | zTableSpan: zConfig().columns : 'shouldRender' : table.getRowModel().rows;\n @let shouldRenderColSpan =\n cell | zTableCellRender: row.getVisibleCells() : zConfig().columns : 'body';\n @if (shouldRenderRowSpan && shouldRenderColSpan) {\n <td\n [ngStyle]=\"\n cell.column\n | zTablePinningStyles\n : cell\n : 'body'\n : row.getVisibleCells()\n : zConfig().columns\n : columnSizingInfo()\n \"\n [class]=\"cell | zTableCellConfig: zConfig().columns : 'cellClass'\"\n [style]=\"cell | zTableCellConfig: zConfig().columns : 'cellStyle'\"\n [class.z-sticky-left]=\"cell.column.getIsPinned() === 'left'\"\n [class.z-sticky-right]=\"cell.column.getIsPinned() === 'right'\"\n [class.z-sticky-left-last]=\"\n cell.column.getIsPinned() === 'left' && cell.column.getIsLastColumn('left')\n \"\n [class.z-sticky-right-first]=\"\n cell.column.getIsPinned() === 'right' && cell.column.getIsFirstColumn('right')\n \"\n [class.z-sticky-right-last]=\"\n cell.column.getIsPinned() === 'right' && cell.column.getIsLastColumn('right')\n \"\n [class.z-at-left-edge]=\"cell | zTableCellOffset: orderedLeafColumns()\"\n [class.z-col-select]=\"cell.column.id === 'select'\"\n [class.z-col-expand]=\"cell.column.id === 'expand'\"\n [class.z-col-actions]=\"\n cell.column.id === 'actions' || cell.column.id === actionColumnInfo()?.columnId\n \"\n [class.z-at-bottom]=\"cell | zTableCellBottom: zConfig().columns : table.getRowModel().rows\"\n [attr.rowspan]=\"cell | zTableSpan: zConfig().columns : 'cellRowSpan' : table.getRowModel().rows\"\n [attr.colspan]=\"cell | zTableSpan: zConfig().columns : 'cellColSpan'\">\n @if (cell.column.id === 'select') {\n <!-- Row Checkbox with Pin Button -->\n <div class=\"flex items-center justify-center gap-1\">\n <z-checkbox\n [zChecked]=\"cell.row.getIsSelected()\"\n [zIndeterminate]=\"cell.row.getIsSomeSelected() && !cell.row.getIsSelected()\"\n [zDisabled]=\"!cell.row.getCanSelect()\"\n (zChange)=\"cell.row.toggleSelected()\" />\n @if (zConfig().enableRowPinning && cell.row.depth === 0 && !hasBodyRowSpan()) {\n <ng-template #rowPinPopoverContent>\n <div class=\"flex flex-col gap-0.5 p-0.5\">\n @if (cell.row.getIsPinned() !== 'top') {\n <button\n type=\"button\"\n (click)=\"cell.row.pin('top'); rowPinPopover.hideImmediate()\"\n class=\"text-foreground hover:bg-muted flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs\">\n <z-icon zType=\"lucideArrowUp\" zSize=\"12\" />\n <span>{{ 'i18n_z_ui_table_pin_top' | translate }}</span>\n </button>\n }\n @if (cell.row.getIsPinned() !== 'bottom') {\n <button\n type=\"button\"\n (click)=\"cell.row.pin('bottom'); rowPinPopover.hideImmediate()\"\n class=\"text-foreground hover:bg-muted flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs\">\n <z-icon zType=\"lucideArrowDown\" zSize=\"12\" />\n <span>{{ 'i18n_z_ui_table_pin_bottom' | translate }}</span>\n </button>\n }\n @if (cell.row.getIsPinned()) {\n <button\n type=\"button\"\n (click)=\"cell.row.pin(false); rowPinPopover.hideImmediate()\"\n class=\"text-destructive hover:bg-destructive/10 flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs\">\n <z-icon zType=\"lucideX\" zSize=\"12\" />\n <span>{{ 'i18n_z_ui_table_unpin' | translate }}</span>\n </button>\n }\n </div>\n </ng-template>\n <button\n type=\"button\"\n z-popover\n #rowPinPopover=\"zPopover\"\n [zPopoverContent]=\"rowPinPopoverContent\"\n zTrigger=\"click\"\n zPosition=\"bottom\"\n class=\"z-row-pin-trigger text-muted-foreground hover:bg-muted hover:text-foreground flex cursor-pointer items-center justify-center rounded p-1\"\n [class.text-primary]=\"cell.row.getIsPinned()\">\n <z-icon zType=\"lucideEllipsis\" zSize=\"14\" class=\"rotate-90\" />\n </button>\n }\n </div>\n } @else if (cell.column.id === 'expand') {\n <!-- Expand Button with Row Pin Popover -->\n <div class=\"flex items-center justify-center gap-1\">\n @if (cell.row.subRows && cell.row.subRows.length > 0) {\n <button\n type=\"button\"\n (click)=\"cell.row.toggleExpanded()\"\n class=\"hover:bg-muted flex h-6 w-6 cursor-pointer items-center justify-center rounded\">\n <z-icon\n zType=\"lucideChevronRight\"\n zSize=\"14\"\n class=\"transition-transform duration-200\"\n [class.rotate-90]=\"cell.row.getIsExpanded()\" />\n </button>\n }\n @if (\n zConfig().enableRowPinning &&\n cell.row.depth === 0 &&\n !(cell.row.subRows && cell.row.subRows.length > 0) &&\n !hasBodyRowSpan()\n ) {\n <ng-template #rowPinPopoverContent>\n <div class=\"flex flex-col gap-0.5 p-0.5\">\n @if (cell.row.getIsPinned() !== 'top') {\n <button\n type=\"button\"\n (click)=\"cell.row.pin('top'); rowPinPopover.hideImmediate()\"\n class=\"text-foreground hover:bg-muted flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs\">\n <z-icon zType=\"lucideArrowUp\" zSize=\"12\" />\n <span>{{ 'i18n_z_ui_table_pin_top' | translate }}</span>\n </button>\n }\n @if (cell.row.getIsPinned() !== 'bottom') {\n <button\n type=\"button\"\n (click)=\"cell.row.pin('bottom'); rowPinPopover.hideImmediate()\"\n class=\"text-foreground hover:bg-muted flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs\">\n <z-icon zType=\"lucideArrowDown\" zSize=\"12\" />\n <span>{{ 'i18n_z_ui_table_pin_bottom' | translate }}</span>\n </button>\n }\n @if (cell.row.getIsPinned()) {\n <button\n type=\"button\"\n (click)=\"cell.row.pin(false); rowPinPopover.hideImmediate()\"\n class=\"text-destructive hover:bg-destructive/10 flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs\">\n <z-icon zType=\"lucideX\" zSize=\"12\" />\n <span>{{ 'i18n_z_ui_table_unpin' | translate }}</span>\n </button>\n }\n </div>\n </ng-template>\n <button\n type=\"button\"\n z-popover\n #rowPinPopover=\"zPopover\"\n [zPopoverContent]=\"rowPinPopoverContent\"\n zTrigger=\"click\"\n zPosition=\"bottom\"\n class=\"z-row-pin-trigger text-muted-foreground hover:bg-muted hover:text-foreground flex cursor-pointer items-center justify-center rounded p-1\"\n [class.text-primary]=\"cell.row.getIsPinned()\">\n <z-icon zType=\"lucideEllipsis\" zSize=\"14\" class=\"rotate-90\" />\n </button>\n }\n </div>\n } @else if (cell.column.id === 'actions') {\n <!-- Actions Column - Row Pin Only (for parent rows) -->\n @if (cell.row.depth === 0 && !hasBodyRowSpan()) {\n <div class=\"flex items-center justify-center\">\n <ng-template #rowPinPopoverContent>\n <div class=\"flex flex-col gap-0.5 p-0.5\">\n @if (cell.row.getIsPinned() !== 'top') {\n <button\n type=\"button\"\n (click)=\"cell.row.pin('top'); rowPinPopover.hideImmediate()\"\n class=\"text-foreground hover:bg-muted flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs\">\n <z-icon zType=\"lucideArrowUp\" zSize=\"12\" />\n <span>{{ 'i18n_z_ui_table_pin_top' | translate }}</span>\n </button>\n }\n @if (cell.row.getIsPinned() !== 'bottom') {\n <button\n type=\"button\"\n (click)=\"cell.row.pin('bottom'); rowPinPopover.hideImmediate()\"\n class=\"text-foreground hover:bg-muted flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs\">\n <z-icon zType=\"lucideArrowDown\" zSize=\"12\" />\n <span>{{ 'i18n_z_ui_table_pin_bottom' | translate }}</span>\n </button>\n }\n @if (cell.row.getIsPinned()) {\n <button\n type=\"button\"\n (click)=\"cell.row.pin(false); rowPinPopover.hideImmediate()\"\n class=\"text-destructive hover:bg-destructive/10 flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs\">\n <z-icon zType=\"lucideX\" zSize=\"12\" />\n <span>{{ 'i18n_z_ui_table_unpin' | translate }}</span>\n </button>\n }\n </div>\n </ng-template>\n <button\n type=\"button\"\n z-popover\n #rowPinPopover=\"zPopover\"\n [zPopoverContent]=\"rowPinPopoverContent\"\n zTrigger=\"click\"\n zPosition=\"bottom\"\n class=\"z-row-pin-trigger text-muted-foreground hover:bg-muted hover:text-foreground flex cursor-pointer items-center justify-center rounded p-1\"\n [class.text-primary]=\"cell.row.getIsPinned()\">\n <z-icon zType=\"lucideEllipsis\" zSize=\"14\" class=\"rotate-90\" />\n </button>\n </div>\n }\n } @else if (cell.column.id === actionColumnInfo()?.columnId && actionColumnInfo()) {\n <z-table-actions\n [zConfig]=\"$any(actionColumnInfo()!.config)\"\n [zRow]=\"cell.row.original\"\n [zRowId]=\"cell.row.id\"\n (zActionClick)=\"onActionClick($event)\" />\n } @else {\n @let isCellVisibleNormal = cell | zTableCellVisible: zConfig().columns;\n @if (isCellVisibleNormal) {\n @let editInfo = cell.getContext() | zTableCellEdit: zConfig().columns;\n @if (editInfo.enabled) {\n <!-- Editable Cell -->\n <z-table-edit-cell\n [zRow]=\"cell.row.original\"\n [zRowId]=\"cell.row.id\"\n [zRowIndex]=\"cell.row.index\"\n [zColumnId]=\"cell.column.id\"\n [zValue]=\"cell.getValue()\"\n [zRowUpdate]=\"_rowUpdate()\"\n [zEditConfig]=\"$any(editInfo.config)\"\n (zChange)=\"onCellEdit($any($event))\" />\n } @else {\n <ng-container\n *flexRender=\"cell.column.columnDef.cell; props: cell.getContext(); let cellContent\">\n @if (cellContent | zTableIsTemplateRef) {\n <!-- TemplateRef rendering -->\n @let isClickableTpl = cell.column.id | zTableCellClickable: zConfig().columns;\n <div\n class=\"z-template-content\"\n [ngClass]=\"cell | zTableCellConfig: zConfig().columns : 'contentClass'\"\n [ngStyle]=\"cell | zTableCellConfig: zConfig().columns : 'contentStyle'\"\n (click)=\"isClickableTpl && onCellClick(row, cell.column.id, cell.getValue())\">\n <ng-container\n *ngTemplateOutlet=\"cellContent; context: { $implicit: cell.getContext() }\" />\n </div>\n } @else if (cellContent | zTableHasIcon) {\n <!-- Icon syntax rendering -->\n @let isClickableIconTpl = cell.column.id | zTableCellClickable: zConfig().columns;\n <z-table-icon-text\n [zText]=\"cellContent\"\n [zTooltip]=\"cell | zTableCellConfig: zConfig().columns : 'contentTooltip'\"\n [ngClass]=\"cell | zTableCellConfig: zConfig().columns : 'contentClass'\"\n [ngStyle]=\"cell | zTableCellConfig: zConfig().columns : 'contentStyle'\"\n (click)=\"isClickableIconTpl && onCellClick(row, cell.column.id, cell.getValue())\" />\n } @else {\n <!-- Default/innerHTML rendering -->\n @let isClickableDefaultTpl = cell.column.id | zTableCellClickable: zConfig().columns;\n <div\n class=\"z-table-cell-text\"\n z-tooltip\n [zContent]=\"\n (cell | zTableCellConfig: zConfig().columns : 'contentTooltip') || cellContent\n \"\n [innerHTML]=\"cellContent | translate | zSafeHtml\"\n [ngClass]=\"cell | zTableCellConfig: zConfig().columns : 'contentClass'\"\n [ngStyle]=\"cell | zTableCellConfig: zConfig().columns : 'contentStyle'\"\n (click)=\"\n isClickableDefaultTpl && onCellClick(row, cell.column.id, cell.getValue())\n \"></div>\n }\n </ng-container>\n }\n }\n }\n </td>\n }\n }\n </tr>\n\n <!-- Expanded Row Detail -->\n @if (row.getIsExpanded() && row.depth === 0 && !row.subRows?.length && zConfig().expandedRowTemplate) {\n <tr class=\"z-expanded-row\">\n <td [attr.colspan]=\"row.getVisibleCells().length\" class=\"p-0\">\n <ng-container *ngTemplateOutlet=\"zConfig().expandedRowTemplate!; context: { $implicit: row }\" />\n </td>\n </tr>\n }\n </ng-template>\n\n <!-- Render Top Pinned Rows (hidden when filtered data is empty) -->\n @if (!isEmpty()) {\n @for (row of table.getTopRows(); track row.id) {\n <ng-container *ngTemplateOutlet=\"rowTemplate; context: { $implicit: row }\" />\n }\n }\n\n <!-- Render Center Rows -->\n @for (row of table.getCenterRows(); track row.id) {\n <ng-container *ngTemplateOutlet=\"rowTemplate; context: { $implicit: row }\" />\n }\n\n <!-- Render Bottom Pinned Rows (hidden when filtered data is empty) -->\n @if (!isEmpty()) {\n @for (row of bottomRowsReversed(); track row.id) {\n <ng-container *ngTemplateOutlet=\"rowTemplate; context: { $implicit: row }\" />\n }\n }\n </tbody>\n </table>\n }\n </ng-scrollbar>\n }\n <!-- end @else -->\n </div>\n\n <!-- Footer table -->\n @if (hasFooter()) {\n <div\n class=\"z-tfoot-wrapper\"\n [class.z-shadow-footer]=\"shouldFooterShowShadow()\"\n [class.z-scroll-left]=\"hasScrollLeft()\"\n [class.z-scroll-right]=\"hasScrollRight()\"\n #tfootWrapper>\n <table [ngStyle]=\"columnSizeVars()\" [style.width.px]=\"table.getTotalSize()\">\n <ng-container *ngTemplateOutlet=\"colGroupTpl\" />\n <tfoot>\n @for (footerGroup of orderedFooterGroups(); track footerGroup.id) {\n @if (footerGroup | zTableFooterContent: zConfig().columns) {\n <tr>\n @for (footer of footerGroup.headers; track footer.id) {\n @let rowSpan = footer | zTableSpan: zConfig().columns : 'footerRowSpan';\n @let shouldRender = footer | zTableCellRender: footerGroup.headers : zConfig().columns : 'footer';\n @if (rowSpan && shouldRender) {\n <th\n [ngStyle]=\"\n footer.column\n | zTablePinningStyles: footer : 'footer' : table : zConfig().columns : columnSizingInfo()\n \"\n [class]=\"\n (footer.column.id | zTableColumnConfig: zConfig().columns : 'footerClass') +\n ' ' +\n (footer.column.id | zTableColumnConfig: zConfig().columns : 'footerAlignClass')\n \"\n [style]=\"footer.column.id | zTableColumnConfig: zConfig().columns : 'footerStyle'\"\n [class.z-sticky-left]=\"footer.column.getIsPinned() === 'left'\"\n [class.z-sticky-right]=\"footer.column.getIsPinned() === 'right'\"\n [class.z-sticky-left-last]=\"\n footer | zTableCellPin: 'isLastLeftPinned' : zConfig().columns : 'footer'\n \"\n [class.z-sticky-right-first]=\"\n footer | zTableCellPin: 'isFirstRightPinned' : zConfig().columns : 'footer'\n \"\n [class.z-sticky-right-last]=\"\n footer | zTableCellPin: 'isLastRightPinned' : zConfig().columns : 'footer'\n \"\n [class.z-at-left-edge]=\"footer | zTableCellOffset: orderedLeafColumns()\"\n [attr.rowspan]=\"rowSpan\"\n [attr.colspan]=\"footer | zTableSpan: zConfig().columns : 'footerColSpan'\">\n @let configFooterContent =\n footer.column.id | zTableColumnConfig: zConfig().columns : 'footerContent';\n @if (footer.column.columnDef.footer) {\n <ng-container\n *flexRender=\"footer.column.columnDef.footer; props: footer.getContext(); let footerContent\">\n <div\n class=\"flex w-full items-center\"\n [class.justify-center]=\"\n (footer.column.id | zTableColumnConfig: zConfig().columns : 'footerAlignClass') ===\n 'text-center'\n \"\n [class.justify-end]=\"\n (footer.column.id | zTableColumnConfig: zConfig().columns : 'footerAlignClass') ===\n 'text-right'\n \">\n @if (footerContent | zTableIsTemplateRef) {\n <!-- TemplateRef rendering -->\n <div\n class=\"z-template-content\"\n [ngClass]=\"\n footer.column.id | zTableColumnConfig: zConfig().columns : 'footerContentClass'\n \"\n [ngStyle]=\"\n footer.column.id | zTableColumnConfig: zConfig().columns : 'footerContentStyle'\n \">\n <ng-container\n *ngTemplateOutlet=\"footerContent; context: { $implicit: footer.getContext() }\" />\n </div>\n } @else if (footerContent | zTableHasIcon) {\n <!-- Icon syntax rendering -->\n <z-table-icon-text\n [zText]=\"footerContent\"\n [zTooltip]=\"footer.column.id | zTableColumnConfig: zConfig().columns : 'footerTooltip'\"\n [ngClass]=\"\n footer.column.id | zTableColumnConfig: zConfig().columns : 'footerContentClass'\n \"\n [ngStyle]=\"\n footer.column.id | zTableColumnConfig: zConfig().columns : 'footerContentStyle'\n \" />\n } @else {\n <!-- Default/string rendering -->\n <span\n class=\"z-table-cell-text\"\n z-tooltip\n [zContent]=\"\n (footer.column.id | zTableColumnConfig: zConfig().columns : 'footerTooltip') ||\n footerContent\n \"\n [ngClass]=\"\n footer.column.id | zTableColumnConfig: zConfig().columns : 'footerContentClass'\n \"\n [ngStyle]=\"\n footer.column.id | zTableColumnConfig: zConfig().columns : 'footerContentStyle'\n \">\n {{ footerContent | translate }}\n </span>\n }\n </div>\n </ng-container>\n } @else if (configFooterContent) {\n <!-- Fallback for group columns without TanStack footer -->\n <div\n class=\"flex w-full items-center\"\n [class.justify-center]=\"\n (footer.column.id | zTableColumnConfig: zConfig().columns : 'footerAlignClass') ===\n 'text-center'\n \"\n [class.justify-end]=\"\n (footer.column.id | zTableColumnConfig: zConfig().columns : 'footerAlignClass') ===\n 'text-right'\n \">\n <span\n class=\"z-table-cell-text\"\n z-tooltip\n [zContent]=\"\n (footer.column.id | zTableColumnConfig: zConfig().columns : 'footerTooltip') ||\n $any(configFooterContent)\n \"\n [ngClass]=\"footer.column.id | zTableColumnConfig: zConfig().columns : 'footerContentClass'\"\n [ngStyle]=\"footer.column.id | zTableColumnConfig: zConfig().columns : 'footerContentStyle'\">\n {{ $any(configFooterContent) | translate }}\n </span>\n </div>\n }\n </th>\n }\n }\n </tr>\n }\n }\n </tfoot>\n </table>\n </div>\n }\n</div>\n\n<!-- Pagination -->\n@if (zConfig().pagination?.enabled !== false) {\n <div class=\"mt-4 flex items-center justify-between gap-4\">\n <div class=\"truncate text-sm text-gray-500\">\n {{ 'i18n_z_ui_table_total_rows' | translate: { total: (paginationTotal() | zFormatNum) } }}\n </div>\n <z-pagination\n [zTotal]=\"paginationTotal()\"\n [(zPageIndex)]=\"pagination().pageIndex\"\n [(zPageSize)]=\"pagination().pageSize\"\n [zPageSizeOptions]=\"zConfig().pagination?.pageSizeOptions ?? [10, 20, 50, 100]\"\n [zShowSizeChanger]=\"zConfig().pagination?.showSizeChanger ?? true\"\n [zShowQuickJumper]=\"zConfig().pagination?.showQuickJumper ?? false\"\n [zShowTotal]=\"false\"\n [zDisabled]=\"zConfig().pagination?.disabled || isLoading() || isProcessing()\"\n (zOnPageChange)=\"onPageChange($event)\" />\n </div>\n}\n\n<!-- Settings Drawer -->\n<z-drawer\n [(zVisible)]=\"showSettingsDrawer\"\n [zTitle]=\"'i18n_z_ui_table_settings_title' | translate\"\n zPlacement=\"right\"\n zWidth=\"500px\"\n [zShadow]=\"true\"\n [zOkText]=\"null\"\n [zCancelText]=\"'i18n_z_ui_drawer_close' | translate\">\n <div class=\"z-table-settings-drawer px-4\">\n <!-- Display Settings -->\n <div class=\"mb-4\">\n <h4 class=\"text-foreground mb-2 text-sm font-semibold\">{{ 'i18n_z_ui_table_display_settings' | translate }}</h4>\n <p class=\"text-muted-foreground mb-3 text-xs\">{{ 'i18n_z_ui_table_display_settings_desc' | translate }}</p>\n <div class=\"grid grid-cols-2 gap-x-4 gap-y-3\">\n <z-checkbox\n [zChecked]=\"showHorizontalBorder()\"\n [zText]=\"'i18n_z_ui_table_horizontal_border' | translate\"\n (zChange)=\"showHorizontalBorder.set(!showHorizontalBorder())\" />\n <z-checkbox\n [zChecked]=\"showVerticalBorder()\"\n [zText]=\"'i18n_z_ui_table_vertical_border' | translate\"\n (zChange)=\"showVerticalBorder.set(!showVerticalBorder())\" />\n <z-checkbox\n [zChecked]=\"showHeaderFooterShadow()\"\n [zText]=\"'i18n_z_ui_table_header_footer_shadow' | translate\"\n (zChange)=\"showHeaderFooterShadow.set(!showHeaderFooterShadow())\" />\n </div>\n </div>\n\n <!-- Divider -->\n <div class=\"border-border my-4 border-t\"></div>\n\n <!-- Unified Column Settings -->\n @if (zConfig().enableSettings) {\n <div class=\"mb-4\">\n <h4 class=\"text-foreground mb-2 text-sm font-semibold\">{{ 'i18n_z_ui_table_column_settings' | translate }}</h4>\n <p class=\"text-muted-foreground mb-3 text-xs\">{{ 'i18n_z_ui_table_column_settings_desc' | translate }}</p>\n\n <!-- Unpinned Columns (Draggable) -->\n <div\n cdkDropList\n #columnDropList=\"cdkDropList\"\n (cdkDropListDropped)=\"onPendingColumnDrop($event)\"\n class=\"z-column-drop-list space-y-1.5\">\n @for (columnId of columnOrder(); track columnId; let i = $index) {\n @if (columnId !== 'expand' && columnId !== 'select') {\n @let column = table.getColumn(columnId);\n @let isPinned = column?.getIsPinned();\n @let isVisible = columnVisibility()[columnId] !== false;\n @let canPin = column?.getCanPin() !== false && zConfig().enableColumnPinning;\n @if (!isPinned) {\n <div\n cdkDrag\n [cdkDragData]=\"columnId\"\n cdkDragLockAxis=\"y\"\n cdkDragBoundary=\".z-column-drop-list\"\n cdkDragPreviewClass=\"z-drag-preview\"\n class=\"z-drag-item border-border bg-card hover:border-primary flex cursor-grab items-center gap-2 rounded border px-2 py-1.5 text-sm active:cursor-grabbing\"\n [class.opacity-60]=\"!isVisible\">\n <!-- Drag Handle -->\n <z-icon\n cdkDragHandle\n zType=\"lucideGripVertical\"\n zSize=\"14\"\n class=\"text-muted-foreground shrink-0 cursor-grab active:cursor-grabbing\" />\n\n <!-- Visibility Checkbox -->\n <input\n type=\"checkbox\"\n [checked]=\"isVisible\"\n (change)=\"onToggleColumnVisibility(columnId)\"\n (mousedown)=\"$event.stopPropagation()\"\n class=\"border-input h-4 w-4 shrink-0 cursor-pointer rounded\" />\n\n <!-- Column Name -->\n <span class=\"flex min-w-0 flex-1 flex-col\">\n <span class=\"truncate\" [class.text-muted-foreground]=\"!isVisible\">\n {{ columnId | zTableColumnHeader: zConfig().columns | translate }}\n </span>\n @let parents = columnId | zTableColumnParents: zConfig().columns;\n @if (parents) {\n <span class=\"text-muted-foreground truncate text-[0.625rem]\">({{ parents | translate }})</span>\n }\n </span>\n\n <!-- Pin Buttons -->\n @if (canPin) {\n <div class=\"flex shrink-0 items-center gap-0.5\" (mousedown)=\"$event.stopPropagation()\">\n <button\n type=\"button\"\n [disabled]=\"!isVisible\"\n (click)=\"onToggleColumnPin(columnId, 'left')\"\n class=\"text-muted-foreground hover:bg-muted cursor-pointer rounded p-1 text-xs transition-colors disabled:cursor-not-allowed disabled:opacity-40\"\n title=\"Pin Left\">\n <z-icon zType=\"lucideArrowLeft\" zSize=\"12\" />\n </button>\n <button\n type=\"button\"\n [disabled]=\"!isVisible\"\n (click)=\"onToggleColumnPin(columnId, 'right')\"\n class=\"text-muted-foreground hover:bg-muted cursor-pointer rounded p-1 text-xs transition-colors disabled:cursor-not-allowed disabled:opacity-40\"\n title=\"Pin Right\">\n <z-icon zType=\"lucideArrowRight\" zSize=\"12\" />\n </button>\n </div>\n }\n </div>\n }\n }\n }\n </div>\n\n <!-- Pinned Columns Section -->\n @if (zConfig().enableColumnPinning) {\n @if (pinnedColumnIds().length > 0) {\n <div class=\"border-border mt-4 border-t pt-4\">\n <h5 class=\"text-muted-foreground mb-2 text-xs font-medium\">\n {{ 'i18n_z_ui_table_pinned_columns' | translate }}\n </h5>\n <div class=\"space-y-1.5\">\n @for (columnId of pinnedColumnIds(); track columnId) {\n @let column = table.getColumn(columnId);\n @let isPinned = column?.getIsPinned();\n @let isVisible = columnVisibility()[columnId] !== false;\n <div\n class=\"border-border bg-muted/30 flex items-center gap-2 rounded border px-2 py-1.5 text-sm\"\n [class.opacity-60]=\"!isVisible\">\n <!-- Pin Icon -->\n <z-icon zType=\"lucidePin\" zSize=\"14\" class=\"text-primary shrink-0\" />\n\n <!-- Visibility Checkbox -->\n <input\n type=\"checkbox\"\n [checked]=\"isVisible\"\n (change)=\"onToggleColumnVisibility(columnId)\"\n class=\"border-input h-4 w-4 shrink-0 cursor-pointer rounded\" />\n\n <!-- Column Name -->\n <span class=\"flex min-w-0 flex-1 flex-col\">\n <span class=\"truncate\" [class.text-muted-foreground]=\"!isVisible\">\n {{ columnId | zTableColumnHeader: zConfig().columns | translate }}\n </span>\n @let pinnedParents = columnId | zTableColumnParents: zConfig().columns;\n @if (pinnedParents) {\n <span class=\"text-muted-foreground truncate text-[0.625rem]\">\n ({{ pinnedParents | translate }})\n </span>\n }\n </span>\n\n <!-- Position Badge -->\n <span class=\"bg-primary/10 text-primary shrink-0 rounded px-1.5 py-0.5 text-[0.625rem] font-medium\">\n {{\n isPinned === 'left'\n ? ('i18n_z_ui_table_left' | translate)\n : ('i18n_z_ui_table_right' | translate)\n }}\n </span>\n\n <!-- Unpin Button -->\n <button\n type=\"button\"\n (click)=\"onToggleColumnPin(columnId, isPinned === 'left' ? 'left' : 'right')\"\n class=\"text-muted-foreground hover:bg-muted hover:text-foreground cursor-pointer rounded p-1 text-xs transition-colors\"\n title=\"Unpin\">\n <z-icon zType=\"lucideX\" zSize=\"12\" />\n </button>\n </div>\n }\n </div>\n </div>\n }\n }\n </div>\n }\n </div>\n</z-drawer>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shival99-z-ui-components-z-table.mjs","sources":["../../../../libs/core-ui/components/z-table/z-table.types.ts","../../../../libs/core-ui/components/z-table/components/z-table-actions.component.ts","../../../../libs/core-ui/components/z-table/z-table.util.ts","../../../../libs/core-ui/components/z-table/components/z-table-edit-cell.component.ts","../../../../libs/core-ui/components/z-table/components/z-table-filter.component.ts","../../../../libs/core-ui/components/z-table/components/z-table-icon-text.component.ts","../../../../libs/core-ui/components/z-table/directives/z-table-row-hover.directive.ts","../../../../libs/core-ui/components/z-table/directives/z-table-resizer.directive.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-cell-bottom.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-cell-clickable.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-cell-config.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-cell-edit.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-cell-offset.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-cell-pin.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-cell-render.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-cell-visible.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-column-config.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-column-header.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-column-parents.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-footer-content.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-has-icon.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-pinning-styles.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-row.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-span.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-is-template-ref.pipe.ts","../../../../libs/core-ui/components/z-table/z-table.component.ts","../../../../libs/core-ui/components/z-table/z-table.component.html","../../../../libs/core-ui/components/z-table/shival99-z-ui-components-z-table.ts"],"sourcesContent":["/**\n * Z-Table Type Definitions\n *\n * Central type file for the z-table component. Contains:\n * - Default constants (row heights, sizing, debounce timers)\n * - Column configuration types (header, body, footer)\n * - Sort/filter/edit configuration interfaces\n * - Event contracts for parent-component communication\n * - Unified change event discriminated union\n * - Virtual scrolling configuration\n * - Settings persistence types\n * - TanStack Table module augmentation for custom table meta\n */\n/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable @typescript-eslint/naming-convention */\n/* eslint-disable unused-imports/no-unused-vars */\nimport { type TemplateRef, type Type } from '@angular/core';\nimport { type ZAutocompleteType, type ZAutocompleteOption } from '@shival99/z-ui/components/z-autocomplete';\nimport { type ZButtonVariants } from '@shival99/z-ui/components/z-button';\nimport { type ZIconVariants, type ZIcon } from '@shival99/z-ui/components/z-icon';\nimport { type ZInputSize } from '@shival99/z-ui/components/z-input';\nimport { type ZSelectOption } from '@shival99/z-ui/components/z-select';\nimport { type ZTooltipConfig, type ZTooltipContent } from '@shival99/z-ui/components/z-tooltip';\nimport {\n type CellContext,\n type ColumnFiltersState,\n type ColumnPinningState,\n type ExpandedState,\n type FlexRenderComponent,\n type HeaderContext,\n type PaginationState,\n type Row,\n type RowData,\n type RowPinningState,\n type RowSelectionState,\n type SortingState,\n type VisibilityState,\n} from '@tanstack/angular-table';\n\n// ─── Default Constants ───────────────────────────────────────────────────────\n\n/** Default row height in pixels for virtual scroll estimation */\nexport const Z_DEFAULT_ROW_HEIGHT = 40;\n/** How many extra rows to render outside the visible viewport (virtual scroll buffer) */\nexport const Z_DEFAULT_VIRTUAL_OVERSCAN = 5;\n/** Number of rows per virtual group — used for rowSpan grouping in virtual mode */\nexport const Z_DEFAULT_GROUP_SIZE = 1;\n/** How many extra columns to render outside visible area for column virtualization */\nexport const Z_DEFAULT_COLUMN_VIRTUAL_OVERSCAN = 3;\n/** Minimum column width in pixels; prevents columns from becoming too narrow */\nexport const Z_DEFAULT_COLUMN_MIN_SIZE = 100;\n/** Debounce delay (ms) for async state updates (filtering/sorting transitions) */\nexport const Z_DEFAULT_DEBOUNCE_TIME = 150;\n/** Row height used for skeleton loading placeholders */\nexport const Z_SKELETON_ROW_HEIGHT = 60;\n/** Width in pixels of each action button in the actions column */\nexport const Z_TABLE_DEFAULT_ACTION_BUTTON_WIDTH = 32;\n/** Max visible action buttons before overflow into dropdown */\nexport const Z_TABLE_DEFAULT_MAX_VISIBLE_ACTIONS = 3;\n/** Default size variant for the overflow dropdown trigger button */\nexport const Z_TABLE_DEFAULT_DROPDOWN_BUTTON_SIZE = 'sm' as const;\n\n// ─── Cell & Pin Types ────────────────────────────────────────────────────────\n\n/** Pin boundary properties used to apply shadow/border on pinned column edges */\nexport type ZTableCellPinProperty = 'isLastLeftPinned' | 'isFirstRightPinned' | 'isLastRightPinned';\n/** Distinguishes header vs footer cells for shared rendering logic */\nexport type ZTableCellType = 'header' | 'footer';\n/** All three cell render zones */\nexport type ZTableCellRenderType = 'header' | 'footer' | 'body';\n\n/** Resolved edit state for a specific cell — computed by the edit pipe */\nexport interface ZTableEditCellInfo {\n enabled: boolean;\n /** Base type for initial render — actual type may be dynamic per row via edit.type function */\n type: ZTableEditType;\n config: ZTableEditConfig<unknown> | null;\n}\n\n/** CSS styles applied to pinned cells for sticky positioning */\nexport interface ZPinningStyles {\n left?: string;\n right?: string;\n position: 'sticky' | 'relative';\n zIndex: number;\n [key: string]: string | number | undefined;\n}\n\n/**\n * A virtual group represents one or more consecutive rows that must be\n * rendered together (e.g. rows sharing a rowSpan). The virtualizer operates\n * on groups rather than individual rows to keep merged cells intact.\n */\nexport interface ZVirtualGroup {\n startIndex: number;\n endIndex: number;\n rowCount: number;\n /** null when dynamicSize is enabled — height is measured after render */\n height: number | null;\n}\n\n/** Parsed segment from the `[icon:name|size:16|class:text-red]` inline icon syntax */\nexport interface ZTableIconPart {\n type: 'text' | 'icon';\n value: string;\n size?: number;\n class?: string;\n strokeWidth?: number;\n}\n\nexport interface ZTableExtendedColumnDef {\n filterType?: ZTableFilterType;\n filterOptions?: ZSelectOption[];\n}\n\n// ─── Content & Mode Types ────────────────────────────────────────────────────\n\nexport type ZTableAlign = 'left' | 'center' | 'right';\nexport type ZTableBorderType = 'none' | 'full' | 'horizontal' | 'vertical';\n\n/**\n * Body cell content — supports static values, Angular templates/components,\n * or a function that receives the cell context and returns dynamic content.\n */\nexport type ZTableCellContent<T> =\n | string\n | number\n | TemplateRef<{ $implicit: CellContext<T, unknown> }>\n | Type<unknown>\n | FlexRenderComponent<unknown>\n | ((info: CellContext<T, unknown>) => string | number | TemplateRef<unknown> | FlexRenderComponent<unknown>);\n\n/** Header/footer cell content — similar to body but uses HeaderContext */\nexport type ZTableHeaderContent<T> =\n | string\n | TemplateRef<unknown>\n | Type<unknown>\n | (() => string)\n | ((info: HeaderContext<T, unknown>) => string);\n\n/** Alias for ZTableColumnConfig — kept for backward compatibility */\nexport type ZTableColumn<T = unknown> = ZTableColumnConfig<T>;\n\n/** Available column filter input types */\nexport type ZTableFilterType = 'text' | 'number' | 'select' | 'multi-select' | 'date' | 'date-range' | 'range' | 'tags';\n/** Available inline cell edit input types */\nexport type ZTableEditType =\n | 'text'\n | 'number'\n | 'select'\n | 'date'\n | 'checkbox'\n | 'textarea'\n | 'toggle'\n | 'autocomplete';\n/**\n * Table operation mode:\n * - 'local': data is fully client-side (sort/filter/paginate handled by TanStack)\n * - 'server': parent handles data fetching; table emits change events for server calls\n */\nexport type ZTableMode = 'local' | 'server';\n\n// ─── Sort / Filter / Edit Configuration ──────────────────────────────────────\n\n/** Per-column sort configuration; mode controls local vs server-side sorting */\nexport interface ZTableSortConfig<T> {\n enabled?: boolean;\n /** 'local' = TanStack sorts in-memory; 'server' = emits event for API call */\n mode?: ZTableMode;\n /** Custom key sent with server-side sort events (defaults to column id) */\n sortKey?: string;\n /** Custom comparator for local sorting */\n sortFn?: (rowA: Row<T>, rowB: Row<T>, columnId: string) => number;\n}\n\nexport type ZTableBuiltInFilterFn =\n | 'equalsString'\n | 'includesString'\n | 'includesStringSensitive'\n | 'arrIncludes'\n | 'arrIncludesAll'\n | 'arrIncludesSome'\n | 'equals'\n | 'weakEquals'\n | 'inNumberRange';\n\nexport type ZTableCustomFilterFn<T> = (\n row: Row<T>,\n columnId: string,\n filterValue: unknown,\n addMeta: (meta: unknown) => void\n) => boolean;\n\nexport interface ZTableFilterConfig<T = unknown> {\n enabled?: boolean;\n mode?: ZTableMode;\n type?: ZTableFilterType;\n options?: ZSelectOption[];\n allowClear?: boolean;\n placeholder?: string;\n filterFn?: ZTableBuiltInFilterFn | ZTableCustomFilterFn<T>;\n}\n\nexport type ZTableEditSize = 'sm' | 'default' | 'lg';\n\nexport interface ZTableEditConfig<T = unknown> {\n enabled?: boolean;\n /** Edit type - can be static or dynamic per row */\n type?: ZTableEditType | ((row: T) => ZTableEditType);\n /** Select options - can be static or dynamic per row */\n options?: ZSelectOption[] | ((row: T) => ZSelectOption[]);\n /** Placeholder - can be static or dynamic per row */\n placeholder?: string | ((row: T) => string);\n /** Allow clear for select input. Default: false */\n allowClear?: boolean;\n /**\n * Custom option label key when using raw objects as options.\n * Use this when your options don't have 'label' property.\n * Example: optionLabelKey: 'tagName' for { tagName: 'Value', tagId: 1 }\n */\n optionLabelKey?: string;\n /**\n * Custom option value key when using raw objects as options.\n * Use this when your options don't have 'value' property.\n * Example: optionValueKey: 'tagName' for { tagName: 'Value', tagId: 1 }\n */\n optionValueKey?: string;\n /**\n * CSS class to apply to the edit cell input/select/etc component\n */\n class?: string | ((row: T) => string);\n style?: Record<string, string> | ((row: T) => Record<string, string>);\n min?: number;\n max?: number;\n step?: number;\n rows?: number;\n thousandSeparator?: string;\n disabled?: boolean | ((row: T) => boolean);\n /** Readonly mode - input is visible but not editable */\n readonly?: boolean | ((row: T) => boolean);\n debounceTime?: number;\n /** Only emit change on blur (when user leaves the input). Default: false */\n blurEdit?: boolean;\n /** Size of the edit input. Default: 'sm' */\n size?: ZTableEditSize;\n /** Autocomplete type - default or addressbar */\n autocompleteType?: ZAutocompleteType;\n /** Autocomplete options - for autocomplete type */\n autocompleteOptions?: ZAutocompleteOption[] | ((row: T) => ZAutocompleteOption[]);\n /** Reset input after selecting an option in autocomplete. Default: false */\n autocompleteResetOnSelect?: boolean;\n /** Height of autocomplete dropdown in pixels. Default: 280 */\n autocompleteHeight?: number;\n /** Allow typing custom values when no options match. Default: false */\n autocompleteAllowCustomValue?: boolean;\n}\n\n// ─── Settings Persistence ────────────────────────────────────────────────────\n\n/** Minimal column info stored alongside saved config for cache invalidation */\nexport interface ZTableSavedColumnInfo {\n id: string;\n accessorKey?: string;\n}\n\n/**\n * Shape of the persisted table configuration (via ZCacheService).\n * Restored when a table with matching zKey re-mounts.\n * columnInfo is used to detect schema changes and invalidate stale caches.\n */\nexport interface ZTableSavedConfig {\n columnOrder: string[];\n columnSizing: Record<string, number>;\n columnPinning: { left?: string[]; right?: string[] };\n columnVisibility: Record<string, boolean>;\n columnInfo: ZTableSavedColumnInfo[];\n showHeaderFooterShadow: boolean;\n showHorizontalBorder: boolean;\n showVerticalBorder: boolean;\n}\n\n// ─── Control API ─────────────────────────────────────────────────────────────\n\n/**\n * Imperative control handle emitted via `zControl` output.\n * Allows parent components to programmatically manipulate table state\n * (add/update/delete items, reset filters, toggle settings, etc.).\n */\nexport interface ZTableControl<T> {\n updateConfig: (config: Partial<ZTableConfig<T>>) => void;\n toggleSettings: () => void;\n resetFilters: () => void;\n resetSorting: () => void;\n addItem: (item: T) => void;\n updateItem: (id: string | number, updates: Partial<T>, fieldKey?: keyof T) => void;\n deleteItem: (id: string | number, fieldKey?: keyof T) => void;\n getItems: () => T[];\n setColumnVisibility: (columnIds: string | string[], visible: boolean) => void;\n}\n\n// ─── Column Section Configs (Header / Body / Footer) ─────────────────────────\n\n/** Header cell configuration — applied to the <th> in the table header row */\nexport interface ZTableHeaderColumnConfig<T> {\n content?: ZTableHeaderContent<T>;\n class?: string;\n style?: Record<string, string>;\n align?: ZTableAlign;\n rowSpan?: number;\n colSpan?: number;\n /** Class applied to the inner content wrapper, not the <th> itself */\n contentClass?: string | ((info: HeaderContext<T, unknown>) => string);\n contentStyle?: Record<string, string> | ((info: HeaderContext<T, unknown>) => Record<string, string>);\n tooltip?: string | ZTooltipConfig;\n}\n\n/**\n * Body cell configuration — most properties accept a static value or\n * a function receiving CellContext for per-row dynamic behavior.\n */\nexport interface ZTableBodyColumnConfig<T> {\n content?: ZTableCellContent<T>;\n class?: string | ((info: CellContext<T, unknown>) => string);\n style?: Record<string, string> | ((info: CellContext<T, unknown>) => Record<string, string>);\n align?: ZTableAlign;\n /** Static rowSpan or function returning 0 to hide the cell (merged into neighbor) */\n rowSpan?: number | ((info: CellContext<T, unknown>) => number);\n colSpan?: number | ((info: CellContext<T, unknown>) => number);\n contentClass?: string | ((info: CellContext<T, unknown>) => string);\n contentStyle?: Record<string, string> | ((info: CellContext<T, unknown>) => Record<string, string>);\n tooltip?: string | ZTooltipConfig | ((info: CellContext<T, unknown>) => string | ZTooltipConfig);\n /** Action buttons rendered inside this cell */\n actions?: ZTableActionColumnConfig<T>;\n /** When true, clicking the cell emits a cellClick event */\n enabledClick?: boolean;\n /** Enable inline editing — true uses defaults, or pass full config */\n edit?: ZTableEditConfig<T> | boolean;\n /** Control cell content visibility. When false, the cell is rendered but content is hidden. */\n visible?: boolean | ((info: CellContext<T, unknown>) => boolean);\n}\n\nexport interface ZTableFooterColumnConfig<T> {\n content?: ZTableHeaderContent<T>;\n class?: string;\n style?: Record<string, string>;\n align?: ZTableAlign;\n rowSpan?: number;\n colSpan?: number;\n contentClass?: string | ((info: HeaderContext<T, unknown>) => string);\n contentStyle?: Record<string, string> | ((info: HeaderContext<T, unknown>) => Record<string, string>);\n tooltip?: string | ZTooltipConfig;\n}\n\n// ─── Main Column Config ──────────────────────────────────────────────────────\n\n/**\n * Primary column definition — the consumer-facing API.\n * Converted to TanStack ColumnDef internally via `columnConfigToColumnDef()`.\n *\n * Shorthand: header/body/footer accept either a full config object or\n * just the content directly (string/template/function).\n *\n * Nested columns: use `columns` for multi-level header groups.\n */\nexport interface ZTableColumnConfig<T> {\n /** Unique column identifier — must be stable across re-renders */\n id: string;\n /** Pre-filter visibility — unlike columnVisibility, this removes the column entirely */\n visible?: boolean | (() => boolean);\n /** Object property key for simple accessor — mutually exclusive with accessorFn */\n accessorKey?: keyof T & string;\n /** Custom accessor function for derived/computed cell values */\n accessorFn?: (row: T) => unknown;\n header?: ZTableHeaderColumnConfig<T> | ZTableHeaderContent<T>;\n body?: ZTableBodyColumnConfig<T> | ZTableCellContent<T>;\n footer?: ZTableFooterColumnConfig<T> | ZTableHeaderContent<T>;\n size?: number;\n minSize?: number;\n maxSize?: number;\n width?: string;\n /** true = local sort with defaults; object = full config */\n sort?: ZTableSortConfig<T> | boolean;\n /** true = local filter with defaults; object = full config */\n filter?: ZTableFilterConfig<T> | boolean;\n enableResizing?: boolean;\n enablePinning?: boolean;\n enableHiding?: boolean;\n enableOrdering?: boolean;\n /** Initial pin position — applied on first render */\n pinned?: 'left' | 'right' | false;\n /** Child columns for multi-level header grouping */\n columns?: ZTableColumnConfig<T>[];\n}\n\nexport interface ZTablePaginationConfig {\n enabled?: boolean;\n pageSize?: number;\n pageIndex?: number;\n pageSizeOptions?: number[];\n showSizeChanger?: boolean;\n showQuickJumper?: boolean;\n showTotal?: boolean;\n totalLabel?: string;\n disabled?: boolean;\n}\n\n// ─── Event Contracts ─────────────────────────────────────────────────────────\n\n/** Distinguishes user-triggered vs programmatic pagination changes */\nexport type ZTableEmitType = 'user' | 'auto';\n\nexport interface ZTablePageChangeEvent {\n pageIndex: number;\n pageSize: number;\n emitType: ZTableEmitType;\n}\n\nexport interface ZTableRowSelectEvent<T> {\n row: T;\n rowId: string;\n selected: boolean;\n selectedRows: T[];\n selectedRowIds: string[];\n}\n\nexport interface ZTableRowSelectAllEvent<T> {\n selected: boolean;\n selectedRows: T[];\n selectedRowIds: string[];\n}\n\nexport interface ZTableRowExpandEvent<T> {\n row: T;\n rowId: string;\n expanded: boolean;\n}\n\nexport interface ZTableCellClickEvent<T> {\n row: T;\n rowId: string;\n columnId: string;\n value: unknown;\n}\n\nexport interface ZTableCellEditEvent<T> {\n row: T;\n rowId: string;\n rowIndex: number;\n columnId: string;\n oldValue: unknown;\n newValue: unknown;\n}\n\nexport interface ZTableRowDragEvent<T> {\n row: T;\n rowId: string;\n previousIndex: number;\n currentIndex: number;\n data: T[];\n}\n\nexport interface ZTableSortChangeEvent {\n sorting: SortingState;\n}\n\nexport interface ZTableFilterChangeEvent {\n filters: ColumnFiltersState;\n search: string;\n}\n\nexport interface ZTableSearchChangeEvent {\n search: string;\n filters: ColumnFiltersState;\n sorting: SortingState;\n pagination: PaginationState;\n}\n\nexport interface ZActionTooltipState {\n content: ZTooltipContent;\n alwaysShow: boolean;\n position?: string;\n arrow?: boolean;\n offset?: number;\n maxWidth?: string;\n}\n\nexport interface ZTableActionItem<T = unknown> {\n key: string;\n label?: string;\n icon?: ZIcon;\n iconSize?: ZIconVariants['zSize'];\n tooltip?: string | ZTooltipConfig;\n type?: ZButtonVariants['zType'];\n size?: ZButtonVariants['zSize'];\n class?: string;\n disabled?: boolean | ((row: T) => boolean);\n hidden?: boolean | ((row: T) => boolean);\n divide?: 'before' | 'after';\n}\n\nexport interface ZTableActionClickEvent<T = unknown> {\n key: string;\n row: T;\n rowId: string;\n action: ZTableActionItem<T>;\n}\n\nexport interface ZTableActionColumnConfig<T = unknown> {\n /** Actions - static array or function that returns array based on row data */\n actions: ZTableActionItem<T>[] | ((row: T) => ZTableActionItem<T>[]);\n maxVisible?: number;\n}\n\n// ─── Discriminated Union Change Event ────────────────────────────────────────\n\n/** All possible change event types — used as discriminant in ZTableChangeEvent */\nexport type ZTableChangeType =\n | 'page'\n | 'sort'\n | 'filter'\n | 'search'\n | 'select'\n | 'expand'\n | 'rowSelect'\n | 'rowSelectAll'\n | 'rowExpand'\n | 'rowDrag'\n | 'cellClick'\n | 'cellEdit'\n | 'action';\n\nexport interface ZTableChangeEventBase {\n type: ZTableChangeType;\n}\n\nexport interface ZTablePageChange extends ZTableChangeEventBase {\n type: 'page';\n data: ZTablePageChangeEvent;\n}\n\nexport interface ZTableSortChange extends ZTableChangeEventBase {\n type: 'sort';\n data: ZTableSortChangeEvent;\n}\n\nexport interface ZTableFilterChange extends ZTableChangeEventBase {\n type: 'filter';\n data: ZTableFilterChangeEvent;\n}\n\nexport interface ZTableRowSelectChange<T> extends ZTableChangeEventBase {\n type: 'rowSelect';\n data: ZTableRowSelectEvent<T>;\n}\n\nexport interface ZTableRowSelectAllChange<T> extends ZTableChangeEventBase {\n type: 'rowSelectAll';\n data: ZTableRowSelectAllEvent<T>;\n}\n\nexport interface ZTableRowExpandChange<T> extends ZTableChangeEventBase {\n type: 'rowExpand';\n data: ZTableRowExpandEvent<T>;\n}\n\nexport interface ZTableRowDragChange<T> extends ZTableChangeEventBase {\n type: 'rowDrag';\n data: ZTableRowDragEvent<T>;\n}\n\nexport interface ZTableCellClickChange<T> extends ZTableChangeEventBase {\n type: 'cellClick';\n data: ZTableCellClickEvent<T>;\n}\n\nexport interface ZTableSearchChange extends ZTableChangeEventBase {\n type: 'search';\n data: ZTableSearchChangeEvent;\n}\n\nexport interface ZTableSelectChange extends ZTableChangeEventBase {\n type: 'select';\n data: { selection: RowSelectionState };\n}\n\nexport interface ZTableExpandChange extends ZTableChangeEventBase {\n type: 'expand';\n data: { expanded: ExpandedState };\n}\n\nexport interface ZTableActionChange<T> extends ZTableChangeEventBase {\n type: 'action';\n data: ZTableActionClickEvent<T>;\n}\n\nexport interface ZTableCellEditChange<T> extends ZTableChangeEventBase {\n type: 'cellEdit';\n data: ZTableCellEditEvent<T>;\n}\n\n/**\n * Unified change event emitted via `zChange` output.\n * Parent components can use `event.type` to narrow the discriminated union.\n *\n * Example:\n * ```ts\n * onTableChange(event: ZTableChangeEvent<MyRow>) {\n * if (event.type === 'page') {\n * // event.data is ZTablePageChangeEvent\n * }\n * }\n * ```\n */\nexport type ZTableChangeEvent<T> =\n | ZTablePageChange\n | ZTableSortChange\n | ZTableFilterChange\n | ZTableSearchChange\n | ZTableSelectChange\n | ZTableExpandChange\n | ZTableRowSelectChange<T>\n | ZTableRowSelectAllChange<T>\n | ZTableRowExpandChange<T>\n | ZTableRowDragChange<T>\n | ZTableCellClickChange<T>\n | ZTableCellEditChange<T>\n | ZTableActionChange<T>;\n\n/** Initial table state — applied on first render, before any cached config is loaded */\nexport interface ZTableInitialState {\n columnPinning?: ColumnPinningState;\n rowPinning?: RowPinningState;\n sorting?: SortingState;\n columnFilters?: ColumnFiltersState;\n globalFilter?: string;\n expanded?: ExpandedState;\n rowSelection?: RowSelectionState;\n columnVisibility?: VisibilityState;\n pagination?: PaginationState;\n}\n\nexport interface ZTableVirtualConfig {\n /** Enable virtual scrolling */\n enabled: boolean;\n /** Row height in pixels (default: 40). Used as estimate for dynamic sizing. */\n size?: number;\n /** Number of items to render outside visible area (default: 5) */\n overscan?: number;\n /** Number of rows per virtual group (default: 1) */\n groupSize?: number;\n /**\n * Enable dynamic row height measurement.\n * When true, each row's height is measured dynamically after render.\n * The virtualizer uses `height: auto` for all rows, allowing content\n * to determine the actual height, which is then captured via measureElement().\n * The `size` property is used as an initial estimate before measurement.\n */\n dynamicSize?: boolean;\n\n /**\n * Initial scroll offset in pixels.\n * Useful for restoring scroll position or starting at a specific offset.\n * @default 0\n */\n initialOffset?: number | (() => number);\n\n /**\n * The margin (in pixels) to apply to the start of the virtualizer.\n * Useful when the virtualizer is not at the top of the scroll container.\n * @default 0\n */\n scrollMargin?: number;\n\n /**\n * Gap between items in pixels.\n * Use this instead of CSS gap for proper virtual scroll calculations.\n * @default 0\n */\n gap?: number;\n\n /**\n * Delay in milliseconds before resetting isScrolling state.\n * @default 150\n */\n isScrollingResetDelay?: number;\n\n /**\n * Use native scrollend event instead of debounced scroll detection.\n * Better performance on browsers that support it.\n * @default true (if browser supports it)\n */\n useScrollendEvent?: boolean;\n\n /**\n * Custom function to generate unique keys for each item.\n * Useful for stable item identity across data updates.\n */\n getItemKey?: (index: number) => string | number;\n\n /**\n * Custom range extractor function.\n * Use to customize which items are rendered (e.g., for sticky headers).\n */\n rangeExtractor?: (range: { startIndex: number; endIndex: number }) => number[];\n}\n\nexport interface ZTableSearchConfig {\n enabled?: boolean;\n placeholder?: string;\n debounceTime?: number;\n width?: string;\n size?: ZInputSize;\n}\n\nexport interface ZTableVirtualColumnConfig {\n /** Enable horizontal column virtualization for center columns only */\n enabled: boolean;\n /** Number of columns to render outside the visible range */\n overscan?: number;\n}\n\n// ─── Main Table Config ───────────────────────────────────────────────────────\n\n/**\n * Top-level configuration passed via `[zConfig]` input.\n * This is the primary API surface for consumers of z-table.\n */\nexport interface ZTableConfig<T> {\n /** 'local' = client-side operations; 'server' = parent handles data fetching */\n mode?: ZTableMode;\n /** Row data array — for server mode, this is the current page's data */\n data: T[];\n /** Enables drag-and-drop row reordering for compatible local-table states */\n enableRowDragging?: boolean;\n /** Total row count for server-side pagination (aliased as totalRows) */\n totalCount?: number;\n /** Column definitions */\n columns: ZTableColumnConfig<T>[];\n /** Custom row ID generator — critical for selection/expansion state stability */\n getRowId?: (row: T, index: number, parent: T | undefined, data: T[]) => string;\n /** Sub-row accessor for tree/hierarchical data */\n getSubRows?: (row: T, index: number, parent: T | undefined, data: T[]) => T[] | undefined;\n /** @deprecated Use totalCount instead */\n totalRows?: number;\n /** true = enable with defaults; object = full virtual scroll config */\n virtual?: ZTableVirtualConfig | boolean;\n /** true = enable with defaults; object = full horizontal column virtualization config */\n virtualColumns?: ZTableVirtualColumnConfig | boolean;\n showHorizontalBorder?: boolean;\n showVerticalBorder?: boolean;\n showHeaderShadow?: boolean;\n showFooterShadow?: boolean;\n /** Show the settings drawer toggle button */\n enableSettings?: boolean;\n enableColumnResizing?: boolean;\n /** When true, shift-click sorting is simulated automatically */\n enableMultiSort?: boolean;\n /** true = enable with defaults; object = full search bar config */\n search?: ZTableSearchConfig | boolean;\n enableRowPinning?: boolean;\n enableColumnPinning?: boolean;\n enableColumnOrdering?: boolean;\n enableColumnSorting?: boolean;\n pagination?: ZTablePaginationConfig;\n initialState?: ZTableInitialState;\n loading?: boolean;\n /** Template rendered when a row is expanded */\n expandedRowTemplate?: TemplateRef<{ $implicit: Row<T> }>;\n /** Template rendered when no data matches */\n emptyTemplate?: TemplateRef<void>;\n /** Template rendered during loading state */\n loadingTemplate?: TemplateRef<void>;\n getRowCanExpand?: (row: Row<T>) => boolean;\n maxHeight?: string;\n minHeight?: string;\n /** Debounce time (ms) for async state updates; defaults to Z_DEFAULT_DEBOUNCE_TIME */\n debounceTime?: number;\n /** Use skeleton rows instead of loading spinner */\n useSkeleton?: boolean;\n}\n\nexport interface ZTableEditCellChangeEvent<T = unknown> {\n row: T;\n rowId: string;\n rowIndex: number;\n columnId: string;\n oldValue: unknown;\n newValue: unknown;\n}\n\nexport interface ZResolvedEditConfig {\n type: ZTableEditType;\n size: ZTableEditSize;\n placeholder: string;\n allowClear: boolean;\n class: string;\n style: Record<string, string>;\n disabled: boolean;\n readonly: boolean;\n}\n\n// ─── TanStack Module Augmentation ────────────────────────────────────────────\n\n/**\n * Extends TanStack's TableMeta to add a custom `updateData` callback.\n * This is used by inline edit cells to notify the table of value changes.\n */\ndeclare module '@tanstack/angular-table' {\n interface TableMeta<TData extends RowData> {\n updateData?: (rowIndex: number, columnId: string, value: unknown) => void;\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { ZButtonComponent, ZButtonVariants } from '@shival99/z-ui/components/z-button';\nimport { ZDropdownMenuComponent } from '@shival99/z-ui/components/z-dropdown-menu';\nimport type { ZDropdownMenuItem } from '@shival99/z-ui/components/z-dropdown-menu';\nimport { ZIconComponent } from '@shival99/z-ui/components/z-icon';\nimport { ZTooltipDirective, ZTooltipConfig } from '@shival99/z-ui/components/z-tooltip';\nimport {\n Z_TABLE_DEFAULT_DROPDOWN_BUTTON_SIZE,\n Z_TABLE_DEFAULT_MAX_VISIBLE_ACTIONS,\n ZActionTooltipState,\n ZTableActionClickEvent,\n ZTableActionColumnConfig,\n ZTableActionItem,\n} from '../z-table.types';\n\n@Component({\n selector: 'z-table-actions',\n imports: [ZButtonComponent, ZIconComponent, ZTooltipDirective, ZDropdownMenuComponent],\n standalone: true,\n template: `\n <div class=\"z-table-actions flex items-center justify-center gap-1\">\n @if (shouldShowAsButtons()) {\n @for (action of allActions(); track action.key) {\n @if (actionStates()[action.key]?.visible) {\n <button\n type=\"button\"\n z-button\n z-tooltip\n [zType]=\"action.type ?? 'outline'\"\n [zSize]=\"action.size ?? 'sm'\"\n [zDisabled]=\"actionStates()[action.key]?.disabled ?? false\"\n [class]=\"action.class ?? ''\"\n [zContent]=\"actionStates()[action.key]?.tooltipState?.content ?? ''\"\n [zAlwaysShow]=\"actionStates()[action.key]?.tooltipState?.alwaysShow ?? false\"\n [zArrow]=\"actionStates()[action.key]?.tooltipState?.arrow ?? true\"\n [zOffset]=\"actionStates()[action.key]?.tooltipState?.offset ?? 8\"\n [zMaxWidth]=\"actionStates()[action.key]?.tooltipState?.maxWidth ?? '250px'\"\n (click)=\"_onActionClick(action, $event)\"\n >\n @if (action.icon && action.label) {\n <div class=\"flex items-center gap-2\">\n <z-icon [zType]=\"action.icon\" zSize=\"14\" />\n {{ action.label }}\n </div>\n } @else if (action.icon) {\n <z-icon [zType]=\"action.icon\" zSize=\"14\" />\n } @else if (action.label) {\n {{ action.label }}\n }\n </button>\n }\n }\n } @else {\n <z-dropdown-menu\n [zItems]=\"dropdownItems()\"\n zPosition=\"bottom-right\"\n [zButtonSize]=\"zDropdownButtonSize()\"\n [zMinWidth]=\"160\"\n (zOnItemClick)=\"_onDropdownItemClick($event)\"\n >\n <button\n type=\"button\"\n z-button\n zTypeIcon=\"lucideEllipsis\"\n [zSize]=\"zDropdownButtonSize()\"\n zType=\"outline\"\n [zWave]=\"false\"\n ></button>\n </z-dropdown-menu>\n }\n </div>\n `,\n styles: `\n :host {\n display: block;\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ZTableActionsComponent<T = unknown> {\n public readonly zConfig = input.required<ZTableActionColumnConfig<T>>();\n public readonly zRow = input.required<T>();\n public readonly zRowId = input.required<string>();\n public readonly zDropdownButtonSize = input<ZButtonVariants['zSize']>(Z_TABLE_DEFAULT_DROPDOWN_BUTTON_SIZE);\n public readonly zActionClick = output<ZTableActionClickEvent<T>>();\n\n protected readonly allActions = computed(() => {\n const config = this.zConfig();\n const row = this.zRow();\n const { actions } = config;\n\n const resolvedActions = typeof actions === 'function' ? actions(row) : actions;\n return resolvedActions.filter(action => {\n if (typeof action.hidden === 'function') {\n return !action.hidden(row);\n }\n return !action.hidden;\n });\n });\n\n protected readonly shouldShowAsButtons = computed(() => {\n const actions = this.allActions();\n const maxVisible = this.zConfig().maxVisible ?? Z_TABLE_DEFAULT_MAX_VISIBLE_ACTIONS;\n return actions.length <= maxVisible;\n });\n\n protected readonly actionStates = computed(() => {\n const row = this.zRow();\n const actions = this.allActions();\n const states: Record<string, { visible: boolean; disabled: boolean; tooltipState: ZActionTooltipState }> = {};\n\n for (const action of actions) {\n const isHidden = typeof action.hidden === 'function' ? action.hidden(row) : (action.hidden ?? false);\n const isDisabled = typeof action.disabled === 'function' ? action.disabled(row) : (action.disabled ?? false);\n\n states[action.key] = {\n visible: !isHidden,\n disabled: isDisabled,\n tooltipState: this._getTooltipState(action.tooltip),\n };\n }\n\n return states;\n });\n\n protected readonly dropdownItems = computed((): ZDropdownMenuItem[] => {\n const row = this.zRow();\n return this.allActions().map(action => {\n const isDisabled = typeof action.disabled === 'function' ? action.disabled(row) : (action.disabled ?? false);\n return {\n label: action.label ?? action.key,\n icon: action.icon,\n iconSize: action?.iconSize || '18',\n disabled: isDisabled,\n class: action.class,\n divide: action.divide,\n onClick: () => this._emitActionClick(action),\n };\n });\n });\n\n private _getTooltipState(tooltip: string | ZTooltipConfig | undefined): ZActionTooltipState {\n if (!tooltip) {\n return { content: '', alwaysShow: false };\n }\n\n if (typeof tooltip === 'string') {\n return { content: tooltip, alwaysShow: true };\n }\n\n return {\n content: tooltip.content ?? '',\n alwaysShow: tooltip.alwaysShow ?? true,\n position: tooltip.position,\n arrow: tooltip.arrow,\n offset: tooltip.offset,\n maxWidth: tooltip.maxWidth,\n };\n }\n\n protected _onActionClick(action: ZTableActionItem<T>, event: Event): void {\n event.stopPropagation();\n const states = this.actionStates();\n if (states[action.key]?.disabled) {\n return;\n }\n this._emitActionClick(action);\n }\n\n protected _onDropdownItemClick(item: ZDropdownMenuItem): void {\n const action = this.allActions().find(a => (a.label ?? a.key) === item.label);\n if (action) {\n this._emitActionClick(action);\n }\n }\n\n private _emitActionClick(action: ZTableActionItem<T>): void {\n this.zActionClick.emit({\n key: action.key,\n row: this.zRow(),\n rowId: this.zRowId(),\n action,\n });\n }\n}\n","/**\n * Z-Table Utility Functions\n *\n * Pure helper functions used by the z-table component and its pipes.\n * Organized into sections:\n * - Column visibility filtering\n * - Config type guards & extractors (header/body/footer)\n * - Icon syntax parsing ([icon:name|size:16|class:cls])\n * - Column lookup\n * - Span calculation (rowSpan/colSpan for header, body, footer)\n * - Render-skip logic (which cells to hide when another cell spans over them)\n * - Column config -> TanStack ColumnDef conversion\n * - Generic utility helpers\n */\nimport type { ZSelectOption } from '@shival99/z-ui/components/z-select';\nimport { type Header, type ColumnDef, type CellContext, type Cell, type Row } from '@tanstack/angular-table';\nimport {\n type ZTableColumnConfig,\n type ZTableFilterType,\n type ZTableHeaderContent,\n type ZTableCellContent,\n type ZTableIconPart,\n type ZTableHeaderColumnConfig,\n type ZTableBodyColumnConfig,\n type ZTableFooterColumnConfig,\n type ZTableCellType,\n Z_DEFAULT_COLUMN_MIN_SIZE,\n} from './z-table.types';\n\n// ─── Column Visibility Pre-filter ────────────────────────────────────────────\n\n/**\n * Recursively filters columns based on their `visible` property.\n * This runs BEFORE TanStack table creation — columns excluded here\n * won't generate ColumnDef entries at all (unlike columnVisibility state\n * which hides columns but keeps them in the column model).\n */\nexport const filterVisibleColumns = <T>(columns: ZTableColumnConfig<T>[]): ZTableColumnConfig<T>[] =>\n columns\n .filter(col => {\n const { visible } = col;\n if (visible === undefined) {\n return true;\n }\n return typeof visible === 'function' ? visible() : visible;\n })\n .map(col => {\n if (col.columns && col.columns.length > 0) {\n return {\n ...col,\n columns: filterVisibleColumns(col.columns),\n };\n }\n return col;\n });\n\n// ─── Config Type Guards ──────────────────────────────────────────────────────\n\n/**\n * Checks if a config value is a plain object (config struct) vs a primitive/template.\n * Used to distinguish shorthand content (string/TemplateRef) from full config objects\n * like ZTableHeaderColumnConfig, ZTableBodyColumnConfig, etc.\n */\nconst isObjectConfig = (config: unknown): boolean => {\n if (!config || typeof config !== 'object') {\n return false;\n }\n return config.constructor === Object;\n};\n\n/** Type guard: is this a full header config object (not just content shorthand)? */\nexport const isHeaderConfig = <T>(\n config: ZTableHeaderColumnConfig<T> | ZTableHeaderContent<T> | undefined\n): config is ZTableHeaderColumnConfig<T> => isObjectConfig(config);\n\n/** Type guard: is this a full body config object (not just content shorthand)? */\nexport const isBodyConfig = <T>(\n config: ZTableBodyColumnConfig<T> | ZTableCellContent<T> | undefined\n): config is ZTableBodyColumnConfig<T> => isObjectConfig(config);\n\n/** Type guard: is this a full footer config object (not just content shorthand)? */\nexport const isFooterConfig = <T>(\n config: ZTableFooterColumnConfig<T> | ZTableHeaderContent<T> | undefined\n): config is ZTableFooterColumnConfig<T> => isObjectConfig(config);\n\n// ─── Config Extractors ───────────────────────────────────────────────────────\n\n/**\n * Internal helper that normalizes header/footer config into a consistent shape.\n * Handles both shorthand (just content) and full config objects.\n */\nconst getHeaderOrFooterConfigInternal = <T>(col: ZTableColumnConfig<T> | undefined, type: 'header' | 'footer') => {\n const empty = {\n content: undefined as ZTableHeaderContent<T> | undefined,\n class: undefined as string | undefined,\n style: undefined as Record<string, string> | undefined,\n align: undefined as string | undefined,\n tooltip: undefined as string | object | undefined,\n rowSpan: undefined as number | undefined,\n colSpan: undefined as number | undefined,\n contentClass: undefined as string | ((info: unknown) => string) | undefined,\n contentStyle: undefined as Record<string, string> | ((info: unknown) => Record<string, string>) | undefined,\n };\n\n if (!col) {\n return empty;\n }\n\n const config = type === 'header' ? col.header : col.footer;\n const isConfigFn = type === 'header' ? isHeaderConfig : isFooterConfig;\n\n if (!isConfigFn(config)) {\n return { ...empty, content: config as ZTableHeaderContent<T> | undefined };\n }\n\n const typedConfig = config as ZTableHeaderColumnConfig<T> | ZTableFooterColumnConfig<T>;\n\n return {\n content: typedConfig.content,\n class: typedConfig.class,\n style: typedConfig.style,\n align: typedConfig.align,\n tooltip: typedConfig.tooltip,\n rowSpan: typedConfig.rowSpan,\n colSpan: typedConfig.colSpan,\n contentClass: typedConfig.contentClass,\n contentStyle: typedConfig.contentStyle,\n };\n};\n\n/** Extract and normalize header config from a column definition */\nexport const getHeaderConfig = <T>(col: ZTableColumnConfig<T> | undefined) =>\n getHeaderOrFooterConfigInternal(col, 'header');\n\n/**\n * Extract and normalize body config from a column definition.\n * Resolves dynamic properties (class, style, rowSpan, etc.) when CellContext is provided.\n */\nexport const getBodyConfig = <T>(col: ZTableColumnConfig<T> | undefined, ctx?: CellContext<T, unknown>) => {\n const empty = {\n content: undefined as ZTableCellContent<T> | undefined,\n class: undefined as string | undefined,\n style: undefined as Record<string, string> | undefined,\n align: undefined as string | undefined,\n rowSpan: undefined as number | undefined,\n colSpan: undefined as number | undefined,\n contentClass: undefined as string | undefined,\n contentStyle: undefined as Record<string, string> | undefined,\n tooltip: undefined as string | object | undefined,\n };\n\n if (!col) {\n return empty;\n }\n\n if (!isBodyConfig(col.body)) {\n return { ...empty, content: col.body };\n }\n\n const { body } = col;\n const rowSpan = typeof body.rowSpan === 'function' && ctx ? body.rowSpan(ctx) : body.rowSpan;\n const colSpan = typeof body.colSpan === 'function' && ctx ? body.colSpan(ctx) : body.colSpan;\n const classValue = typeof body.class === 'function' && ctx ? body.class(ctx) : body.class;\n const styleValue = typeof body.style === 'function' && ctx ? body.style(ctx) : body.style;\n const contentClass = typeof body.contentClass === 'function' && ctx ? body.contentClass(ctx) : body.contentClass;\n const contentStyle = typeof body.contentStyle === 'function' && ctx ? body.contentStyle(ctx) : body.contentStyle;\n const tooltip = typeof body.tooltip === 'function' && ctx ? body.tooltip(ctx) : body.tooltip;\n\n return {\n content: body.content,\n class: classValue,\n style: styleValue as Record<string, string> | undefined,\n align: body.align,\n rowSpan: typeof rowSpan === 'number' ? rowSpan : undefined,\n colSpan: typeof colSpan === 'number' ? colSpan : undefined,\n contentClass,\n contentStyle: contentStyle as Record<string, string> | undefined,\n tooltip,\n };\n};\n\nexport const getFooterConfig = <T>(col: ZTableColumnConfig<T> | undefined) =>\n getHeaderOrFooterConfigInternal(col, 'footer');\n\n// ─── Shortcut Accessors ──────────────────────────────────────────────────────\n// These convenience functions extract a single property from the relevant config.\n\nexport const getHeaderContent = <T>(col: ZTableColumnConfig<T> | undefined) => getHeaderConfig(col).content;\nexport const getBodyContent = <T>(col: ZTableColumnConfig<T> | undefined) => {\n if (!col?.body) {\n return undefined;\n }\n return isBodyConfig(col.body) ? col.body.content : col.body;\n};\nexport const getFooterContent = <T>(col: ZTableColumnConfig<T> | undefined) => getFooterConfig(col).content;\nexport const getBodyRowSpan = <T>(col: ZTableColumnConfig<T> | undefined, ctx?: CellContext<T, unknown>) =>\n getBodyConfig(col, ctx).rowSpan;\nexport const getBodyColSpan = <T>(col: ZTableColumnConfig<T> | undefined, ctx?: CellContext<T, unknown>) =>\n getBodyConfig(col, ctx).colSpan;\nexport const getHeaderRowSpan = <T>(col: ZTableColumnConfig<T> | undefined) => getHeaderConfig(col).rowSpan;\nexport const getHeaderColSpan = <T>(col: ZTableColumnConfig<T> | undefined) => getHeaderConfig(col).colSpan;\nexport const getFooterRowSpan = <T>(col: ZTableColumnConfig<T> | undefined) => getFooterConfig(col).rowSpan;\nexport const getFooterColSpan = <T>(col: ZTableColumnConfig<T> | undefined) => getFooterConfig(col).colSpan;\n\n// ─── Icon Syntax Parsing ─────────────────────────────────────────────────────\n\n/**\n * Parses inline icon syntax: `\"Total [icon:lucideTrendingUp|size:16|class:text-green] Revenue\"`\n * Returns an array of text and icon segments for rendering by ZTableIconTextComponent.\n */\nexport function parseIconString(content: string): ZTableIconPart[] {\n if (!content || typeof content !== 'string') {\n return [{ type: 'text', value: content || '' }];\n }\n\n const parts: ZTableIconPart[] = [];\n const iconRegex = /\\[icon:([^\\]]+)\\]/g;\n let lastIndex = 0;\n let match: RegExpExecArray | null;\n\n while ((match = iconRegex.exec(content)) !== null) {\n if (match.index > lastIndex) {\n const textPart = content.slice(lastIndex, match.index);\n if (textPart) {\n parts.push({ type: 'text', value: textPart });\n }\n }\n\n const iconContent = match[1];\n const attrs = iconContent.split('|');\n const iconName = attrs[0];\n const iconPart: ZTableIconPart = { type: 'icon', value: iconName };\n\n for (let i = 1; i < attrs.length; i++) {\n const [key, val] = attrs[i].split(':');\n if (key === 'size') {\n iconPart.size = parseInt(val, 10);\n }\n if (key === 'class') {\n iconPart.class = val;\n }\n if (key === 'strokeWidth') {\n iconPart.strokeWidth = parseFloat(val);\n }\n }\n\n parts.push(iconPart);\n lastIndex = match.index + match[0].length;\n }\n\n if (lastIndex < content.length) {\n parts.push({ type: 'text', value: content.slice(lastIndex) });\n }\n\n return parts.length > 0 ? parts : [{ type: 'text', value: content }];\n}\n\n/** Removes all `[icon:...]` syntax from a string, returning plain text */\nexport function stripIconSyntax(content: string): string {\n if (!content || typeof content !== 'string') {\n return content || '';\n }\n return content.replace(/\\[icon:[^\\]]+\\]/g, '').trim();\n}\n\n/** Returns true if the content string contains at least one `[icon:...]` segment */\nexport function hasIconSyntax(content: unknown): boolean {\n if (!content || typeof content !== 'string') {\n return false;\n }\n return /\\[icon:[^\\]]+\\]/.test(content);\n}\n\n// ─── Column Lookup ───────────────────────────────────────────────────────────\n\n/** Recursively search for a column config by ID within a (possibly nested) column array */\nexport const findColumnConfig = <T>(\n columnId: string,\n columns: ZTableColumnConfig<T>[]\n): ZTableColumnConfig<T> | undefined => {\n for (const col of columns) {\n if (col.id === columnId) {\n return col;\n }\n if (col.columns) {\n const found = findColumnConfig(columnId, col.columns);\n if (found) {\n return found;\n }\n }\n }\n return undefined;\n};\n\n// ─── Span Calculation ────────────────────────────────────────────────────────\n\n/**\n * Walk down a chain of placeholder headers to find the deepest real header.\n * Used to calculate how many rows a header cell should span in multi-level headers.\n * Returns null if the header is already the deepest (no spanning needed).\n */\nexport const deepestHeader = <D, V>(header: Header<D, V>): Header<D, V> | null => {\n let last = header;\n while (true) {\n // Follow single-child placeholder chains (placeholders with colSpan=1)\n const next = last.isPlaceholder && last.colSpan === 1 && last.subHeaders.length === 1 ? last.subHeaders[0] : null;\n if (!next) {\n return last === header ? null : last;\n }\n\n last = next;\n }\n};\n\n/** Calculate rowSpan for a TanStack header based on its depth vs deepest sub-header */\nexport const tableHeaderRowSpan = <D, V>(header: Header<D, V>): number | null => {\n const deepest = deepestHeader(header);\n const rowSpan = (deepest ? deepest.depth - header.depth : 0) + 1;\n // If the header is more than 1 level above its column's natural depth, it's been\n // consumed by a parent's rowSpan — return null to skip rendering\n const above = header.depth - header.column.depth;\n return above > 1 ? null : rowSpan;\n};\n\n/**\n * Calculate rowSpan for body cells with static or dynamic rowSpan config.\n * For static rowSpan: uses modular arithmetic (filteredIndex % rowSpan === 0)\n * to determine which rows get the merged cell vs which are skipped.\n */\n\nexport const calculateCellRowSpan = <T>(\n cell: Cell<T, unknown>,\n columnConfig: ZTableColumnConfig<T> | undefined,\n allRows: Row<T>[]\n): number | null => {\n if (!columnConfig?.body || !isBodyConfig(columnConfig.body)) {\n return null;\n }\n const rowSpanValue = columnConfig.body.rowSpan;\n if (!rowSpanValue) {\n return null;\n }\n\n if (typeof rowSpanValue === 'function') {\n const rowSpan = rowSpanValue(cell.getContext());\n return rowSpan > 1 ? rowSpan : null;\n }\n\n if (rowSpanValue > 1) {\n const currentRowId = cell.row.id;\n const filteredIndex = allRows.findIndex(r => r.id === currentRowId);\n\n if (filteredIndex === -1) {\n return null;\n }\n\n if (filteredIndex % rowSpanValue !== 0) {\n return null;\n }\n\n const remainingRows = allRows.length - filteredIndex;\n const actualRowSpan = Math.min(rowSpanValue, remainingRows);\n\n return actualRowSpan > 1 ? actualRowSpan : null;\n }\n\n return null;\n};\n\nexport const calculateCellColSpan = <T>(\n cell: Cell<T, unknown>,\n columnConfig: ZTableColumnConfig<T> | undefined\n): number | null => {\n if (!columnConfig?.body || !isBodyConfig(columnConfig.body)) {\n return null;\n }\n const colSpanValue = columnConfig.body.colSpan;\n if (!colSpanValue) {\n return null;\n }\n const colSpan = typeof colSpanValue === 'function' ? colSpanValue(cell.getContext()) : colSpanValue;\n return colSpan > 1 ? colSpan : null;\n};\n\nexport const calculateHeaderRowSpan = <T>(\n header: Header<T, unknown>,\n columnConfig: ZTableColumnConfig<T> | undefined,\n columns?: ZTableColumnConfig<T>[]\n): number | null => {\n const configRowSpan = getHeaderRowSpan(columnConfig);\n if (configRowSpan !== undefined && configRowSpan !== null) {\n return configRowSpan;\n }\n\n if (columns && header.column.parent) {\n const parentConfig = findColumnConfig(header.column.parent.id, columns);\n const parentRowSpan = getHeaderRowSpan(parentConfig);\n if (parentRowSpan && parentRowSpan >= 2) {\n return null;\n }\n }\n\n const deepest = deepestHeader(header);\n const rowSpan = (deepest ? deepest.depth - header.depth : 0) + 1;\n const above = header.depth - header.column.depth;\n return above > 1 ? null : rowSpan;\n};\n\nexport const calculateHeaderColSpan = <T>(\n header: Header<T, unknown>,\n columnConfig: ZTableColumnConfig<T> | undefined\n): number | null => {\n const configColSpan = getHeaderColSpan(columnConfig);\n const isPinned = header.column.getIsPinned();\n\n if (isPinned === 'left' && configColSpan !== undefined && configColSpan !== null) {\n const allHeaders = header.headerGroup.headers;\n const currentIndex = allHeaders.findIndex(h => h.id === header.id);\n\n if (currentIndex === -1) {\n return configColSpan;\n }\n\n let effectiveColSpan = 0;\n for (let i = 0; i < configColSpan && currentIndex + i < allHeaders.length; i++) {\n const targetHeader = allHeaders[currentIndex + i];\n const targetLeafHeaders = targetHeader.getLeafHeaders();\n const allLeafsPinned = targetLeafHeaders.every(lh => lh.column.getIsPinned() === 'left');\n if (allLeafsPinned) {\n effectiveColSpan++;\n }\n if (!allLeafsPinned) {\n break;\n }\n }\n\n return effectiveColSpan > 1 ? effectiveColSpan : null;\n }\n\n if (configColSpan !== undefined && configColSpan !== null) {\n return configColSpan;\n }\n\n return header.colSpan > 1 ? header.colSpan : null;\n};\n\nexport const calculateFooterRowSpan = <T>(\n header: Header<T, unknown>,\n columnConfig: ZTableColumnConfig<T> | undefined\n): number | null => {\n const configRowSpan = getFooterRowSpan(columnConfig);\n if (configRowSpan !== undefined && configRowSpan !== null) {\n return configRowSpan;\n }\n\n const footerContent = getFooterContent(columnConfig);\n if (footerContent !== undefined) {\n return 1;\n }\n\n if (header.colSpan > 1) {\n return 1;\n }\n\n return 1;\n};\n\nexport const calculateFooterColSpan = <T>(\n header: Header<T, unknown>,\n columnConfig: ZTableColumnConfig<T> | undefined\n): number | null => {\n const configColSpan = getFooterColSpan(columnConfig);\n const isPinned = header.column.getIsPinned();\n\n if (isPinned === 'left' && configColSpan !== undefined && configColSpan !== null) {\n const allHeaders = header.headerGroup.headers;\n const currentIndex = allHeaders.findIndex(h => h.id === header.id);\n\n if (currentIndex === -1) {\n return configColSpan;\n }\n\n let effectiveColSpan = 0;\n for (let i = 0; i < configColSpan && currentIndex + i < allHeaders.length; i++) {\n const targetHeader = allHeaders[currentIndex + i];\n const targetLeafHeaders = targetHeader.getLeafHeaders();\n const allLeafsPinned = targetLeafHeaders.every(lh => lh.column.getIsPinned() === 'left');\n if (allLeafsPinned) {\n effectiveColSpan++;\n }\n if (!allLeafsPinned) {\n break;\n }\n }\n\n return effectiveColSpan > 1 ? effectiveColSpan : null;\n }\n\n if (configColSpan !== undefined && configColSpan !== null) {\n return configColSpan;\n }\n\n return header.colSpan > 1 ? header.colSpan : null;\n};\n\n// ─── Render-Skip Logic ───────────────────────────────────────────────────────\n//\n// These functions determine which cells should NOT be rendered because they\n// are \"covered\" by a neighboring cell's rowSpan or colSpan. This prevents\n// duplicate DOM elements in merged cell scenarios.\n\n/**\n * Checks if a body cell should be rendered based on rowSpan rules.\n * Returns false for cells that fall within another cell's rowSpan range.\n */\nexport const shouldCellRenderUtil = <T>(\n cell: Cell<T, unknown>,\n columnConfig: ZTableColumnConfig<T> | undefined,\n allRows: Row<T>[]\n): boolean => {\n if (!columnConfig?.body || !isBodyConfig(columnConfig.body)) {\n return true;\n }\n const rowSpanValue = columnConfig.body.rowSpan;\n if (!rowSpanValue) {\n return true;\n }\n\n if (typeof rowSpanValue === 'function') {\n const rowSpan = rowSpanValue(cell.getContext());\n return rowSpan !== 0;\n }\n\n if (rowSpanValue > 1) {\n const currentRowId = cell.row.id;\n const filteredIndex = allRows.findIndex(r => r.id === currentRowId);\n\n if (filteredIndex === -1) {\n return true;\n }\n\n return filteredIndex % rowSpanValue === 0;\n }\n\n return true;\n};\n\n/**\n * Shared logic for determining if a header or footer cell should render.\n * A cell should NOT render if a previous cell in the same row has a colSpan\n * that covers this cell's position. Handles pinned column edge cases.\n */\nconst shouldHeaderOrFooterRender = <T>(\n header: Header<T, unknown>,\n allHeaders: Header<T, unknown>[],\n columns: ZTableColumnConfig<T>[],\n type: ZTableCellType\n): boolean => {\n const currentIndex = allHeaders.findIndex(h => h.id === header.id);\n if (currentIndex <= 0) {\n return true;\n }\n\n const getConfigColSpanFn = type === 'header' ? getHeaderColSpan : getFooterColSpan;\n\n for (let i = 0; i < currentIndex; i++) {\n const prevHeader = allHeaders[i];\n const prevConfig = findColumnConfig(prevHeader.column.id, columns);\n const configColSpan = getConfigColSpanFn(prevConfig);\n\n if (!configColSpan || configColSpan <= 1) {\n continue;\n }\n\n const isPinned = prevHeader.column.getIsPinned();\n let effectiveColSpan = configColSpan;\n\n if (isPinned === 'left') {\n const headersInGroup = prevHeader.headerGroup.headers;\n const prevIdx = headersInGroup.findIndex(h => h.id === prevHeader.id);\n\n if (prevIdx !== -1) {\n effectiveColSpan = 0;\n for (let j = 0; j < configColSpan && prevIdx + j < headersInGroup.length; j++) {\n const targetHeader = headersInGroup[prevIdx + j];\n const targetLeafHeaders = targetHeader.getLeafHeaders();\n const allLeafsPinned = targetLeafHeaders.every(lh => lh.column.getIsPinned() === 'left');\n if (allLeafsPinned) {\n effectiveColSpan++;\n }\n if (!allLeafsPinned) {\n break;\n }\n }\n }\n }\n\n if (effectiveColSpan > 1 && i + effectiveColSpan > currentIndex) {\n return false;\n }\n }\n\n return true;\n};\n\nexport const shouldBodyCellRenderColSpan = <T>(\n cell: Cell<T, unknown>,\n allCells: Cell<T, unknown>[],\n columns: ZTableColumnConfig<T>[]\n): boolean => {\n const currentIndex = allCells.findIndex(c => c.id === cell.id);\n if (currentIndex <= 0) {\n return true;\n }\n\n for (let i = 0; i < currentIndex; i++) {\n const prevCell = allCells[i];\n const prevConfig = findColumnConfig(prevCell.column.id, columns);\n const prevColSpan = getBodyColSpan(prevConfig, prevCell.getContext());\n\n if (prevColSpan && prevColSpan > 1 && i + prevColSpan > currentIndex) {\n return false;\n }\n }\n\n return true;\n};\n\nexport const shouldFooterRender = <T>(\n header: Header<T, unknown>,\n allHeaders: Header<T, unknown>[],\n columns: ZTableColumnConfig<T>[]\n): boolean => shouldHeaderOrFooterRender(header, allHeaders, columns, 'footer');\n\nexport const shouldHeaderRender = <T>(\n header: Header<T, unknown>,\n allHeaders: Header<T, unknown>[],\n columns: ZTableColumnConfig<T>[]\n): boolean => shouldHeaderOrFooterRender(header, allHeaders, columns, 'header');\n\n// ─── Column Config → TanStack ColumnDef Conversion ──────────────────────────\n\n/**\n * Converts the consumer-facing ZTableColumnConfig into a TanStack ColumnDef.\n * This is the bridge between the z-table API and TanStack Table internals.\n *\n * Handles:\n * - Accessor mapping (accessorKey / accessorFn)\n * - Header/body/footer content resolution\n * - Sort and filter function wiring (local vs server mode)\n * - Built-in filter functions for each filter type\n * - Recursive nested column conversion\n */\nexport function columnConfigToColumnDef<T>(config: ZTableColumnConfig<T>): ColumnDef<T> {\n const sortConfig = typeof config.sort === 'boolean' ? (config.sort ? { enabled: true } : undefined) : config.sort;\n const filterConfig =\n typeof config.filter === 'boolean' ? (config.filter ? { enabled: true } : undefined) : config.filter;\n\n const resolveHeaderOrFooter = (content: unknown): ((info: unknown) => unknown) | string | undefined => {\n if (!content) {\n return undefined;\n }\n if (typeof content === 'string' || typeof content === 'number') {\n return String(content);\n }\n if (typeof content === 'function') {\n return content as (info: unknown) => unknown;\n }\n return undefined;\n };\n\n const columnDef = {\n id: config.id,\n size: config.size,\n minSize: config.minSize ?? Z_DEFAULT_COLUMN_MIN_SIZE,\n maxSize: config.maxSize,\n enableSorting: sortConfig?.enabled ?? false,\n enableColumnFilter: filterConfig?.enabled ?? false,\n enableResizing: config.enableResizing,\n enablePinning: config.enablePinning,\n enableHiding: config.enableHiding,\n filterType: filterConfig?.type,\n filterOptions: filterConfig?.options,\n } as ColumnDef<T> & { filterType?: ZTableFilterType; filterOptions?: (ZSelectOption | Record<string, unknown>)[] };\n\n if (config.accessorKey) {\n (columnDef as ColumnDef<T> & { accessorKey: string }).accessorKey = config.accessorKey;\n }\n\n if (config.accessorFn) {\n (columnDef as ColumnDef<T> & { accessorFn: (row: T) => unknown }).accessorFn = config.accessorFn;\n }\n\n columnDef.header = resolveHeaderOrFooter(getHeaderContent(config));\n const bodyContent = getBodyContent(config);\n if (typeof bodyContent === 'string' || typeof bodyContent === 'number') {\n columnDef.cell = () => bodyContent as string;\n }\n\n if (typeof bodyContent === 'function') {\n columnDef.cell = bodyContent as (info: CellContext<T, unknown>) => unknown;\n }\n\n columnDef.footer = resolveHeaderOrFooter(getFooterContent(config));\n\n const isLocalFilterMode = !filterConfig?.mode || filterConfig.mode === 'local';\n const isLocalSortMode = !sortConfig?.mode || sortConfig.mode === 'local';\n\n if (isLocalSortMode && sortConfig?.sortFn) {\n columnDef.sortingFn = sortConfig.sortFn as ColumnDef<T>['sortingFn'];\n }\n\n if (!isLocalSortMode) {\n columnDef.sortingFn = () => 0;\n }\n\n if (isLocalFilterMode && filterConfig?.filterFn) {\n columnDef.filterFn = filterConfig.filterFn as ColumnDef<T>['filterFn'];\n }\n\n if (!isLocalFilterMode) {\n columnDef.filterFn = () => true;\n }\n\n if (isLocalFilterMode && !filterConfig?.filterFn && filterConfig?.type) {\n switch (filterConfig.type) {\n case 'select':\n columnDef.filterFn = (row, columnId, filterValue) => {\n if (!filterValue || (Array.isArray(filterValue) && filterValue.length === 0)) {\n return true;\n }\n const cellValue = row.getValue(columnId);\n if (Array.isArray(filterValue)) {\n return filterValue.includes(cellValue);\n }\n return cellValue === filterValue;\n };\n break;\n\n case 'multi-select':\n case 'tags':\n columnDef.filterFn = (row, columnId, filterValue) => {\n if (!filterValue || (Array.isArray(filterValue) && filterValue.length === 0)) {\n return true;\n }\n const cellValue = row.getValue(columnId);\n if (!Array.isArray(filterValue)) {\n return cellValue === filterValue;\n }\n const filterSet = new Set(filterValue);\n if (Array.isArray(cellValue)) {\n return cellValue.some(cv => filterSet.has(cv));\n }\n return filterSet.has(cellValue);\n };\n break;\n\n case 'date':\n columnDef.filterFn = (row, columnId, filterValue) => {\n if (!filterValue) {\n return true;\n }\n const cellValue = row.getValue(columnId);\n if (!cellValue) {\n return false;\n }\n\n const cellDate = cellValue instanceof Date ? cellValue : new Date(cellValue as string | number);\n const filterDate = filterValue instanceof Date ? filterValue : new Date(filterValue as string | number);\n\n if (isNaN(cellDate.getTime()) || isNaN(filterDate.getTime())) {\n return false;\n }\n\n return (\n cellDate.getFullYear() === filterDate.getFullYear() &&\n cellDate.getMonth() === filterDate.getMonth() &&\n cellDate.getDate() === filterDate.getDate()\n );\n };\n break;\n\n case 'date-range':\n columnDef.filterFn = (row, columnId, filterValue) => {\n if (!filterValue || typeof filterValue !== 'object') {\n return true;\n }\n\n const { start, end } = filterValue as { start?: Date | null; end?: Date | null };\n if (!start && !end) {\n return true;\n }\n\n const cellValue = row.getValue(columnId);\n if (!cellValue) {\n return false;\n }\n\n const cellDate = cellValue instanceof Date ? cellValue : new Date(cellValue as string | number);\n if (isNaN(cellDate.getTime())) {\n return false;\n }\n\n const cellDateOnly = new Date(cellDate.getFullYear(), cellDate.getMonth(), cellDate.getDate());\n\n if (start) {\n const startDate = start instanceof Date ? start : new Date(start as unknown as string | number);\n if (!isNaN(startDate.getTime())) {\n const startDateOnly = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate());\n if (cellDateOnly < startDateOnly) {\n return false;\n }\n }\n }\n\n if (end) {\n const endDate = end instanceof Date ? end : new Date(end as unknown as string | number);\n if (!isNaN(endDate.getTime())) {\n const endDateOnly = new Date(endDate.getFullYear(), endDate.getMonth(), endDate.getDate());\n if (cellDateOnly > endDateOnly) {\n return false;\n }\n }\n }\n\n return true;\n };\n break;\n\n case 'range':\n columnDef.filterFn = (row, columnId, filterValue) => {\n if (!filterValue || !Array.isArray(filterValue)) {\n return true;\n }\n\n const [min, max] = filterValue as [number | undefined, number | undefined];\n if (min === undefined && max === undefined) {\n return true;\n }\n\n const cellValue = row.getValue(columnId);\n if (cellValue === null || cellValue === undefined) {\n return false;\n }\n\n const numValue = typeof cellValue === 'number' ? cellValue : Number(cellValue);\n if (isNaN(numValue)) {\n return false;\n }\n\n if (min !== undefined && numValue < min) {\n return false;\n }\n\n if (max !== undefined && numValue > max) {\n return false;\n }\n\n return true;\n };\n break;\n }\n }\n\n if (config.columns && config.columns.length > 0) {\n (columnDef as ColumnDef<T> & { columns: ColumnDef<T>[] }).columns = config.columns.map(subConfig =>\n columnConfigToColumnDef(subConfig)\n );\n }\n\n return columnDef;\n}\n\n// ─── Generic Utility Helpers ─────────────────────────────────────────────────\n\n/** Resolve a value that may be static or a function of the row data */\nexport const resolveConfigValue = <T, R>(config: T | ((row: R) => T) | undefined, row: R, defaultValue: T): T => {\n if (config === undefined) {\n return defaultValue;\n }\n\n return typeof config === 'function' ? (config as (row: R) => T)(row) : config;\n};\n\n/** Pick only defined (non-undefined) keys from an object — used to spread optional virtualizer config */\nexport const pickDefined = <T extends object, K extends keyof T>(obj: T, keys: K[]): Pick<T, K> =>\n keys.reduce(\n (acc, key) => {\n if (obj[key] !== undefined) {\n acc[key] = obj[key];\n }\n return acc;\n },\n {} as Pick<T, K>\n );\n","import { NgStyle } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n input,\n OnInit,\n output,\n signal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { ZAutocompleteComponent, ZAutocompleteOption } from '@shival99/z-ui/components/z-autocomplete';\nimport { ZCalendarComponent } from '@shival99/z-ui/components/z-calendar';\nimport { ZCheckboxComponent } from '@shival99/z-ui/components/z-checkbox';\nimport { ZInputComponent } from '@shival99/z-ui/components/z-input';\nimport { ZSelectComponent, ZSelectOption } from '@shival99/z-ui/components/z-select';\nimport { ZSwitchComponent } from '@shival99/z-ui/components/z-switch';\nimport { debounceTime, distinctUntilChanged, Subject } from 'rxjs';\nimport type {\n ZTableEditConfig,\n ZTableEditType,\n ZTableEditCellChangeEvent,\n ZResolvedEditConfig,\n} from '../z-table.types';\nimport { resolveConfigValue } from '../z-table.util';\n\n@Component({\n selector: 'z-table-edit-cell',\n imports: [\n FormsModule,\n ZInputComponent,\n ZSelectComponent,\n ZCalendarComponent,\n ZCheckboxComponent,\n ZSwitchComponent,\n ZAutocompleteComponent,\n NgStyle,\n ],\n standalone: true,\n template: `\n @switch (cfg().type) {\n @case ('checkbox') {\n <div class=\"flex items-center justify-center\">\n <z-checkbox\n [zSize]=\"cfg().size\"\n [class]=\"cfg().class\"\n [ngStyle]=\"cfg().style\"\n [zChecked]=\"booleanValue()\"\n [zDisabled]=\"cfg().disabled || cfg().readonly\"\n (zChange)=\"onImmediateChange($event)\"\n />\n </div>\n }\n @case ('toggle') {\n <div class=\"flex items-center justify-center\">\n <z-switch\n [zSize]=\"cfg().size\"\n [class]=\"cfg().class\"\n [ngStyle]=\"cfg().style\"\n [zChecked]=\"booleanValue()\"\n [zDisabled]=\"cfg().disabled || cfg().readonly\"\n (zChange)=\"onImmediateChange($event)\"\n />\n </div>\n }\n @case ('number') {\n <z-input\n zType=\"number\"\n [class]=\"cfg().class\"\n [ngStyle]=\"cfg().style\"\n [zSize]=\"cfg().size\"\n [zPlaceholder]=\"cfg().placeholder\"\n [zMin]=\"editConfig().min\"\n [zMax]=\"editConfig().max\"\n [zStep]=\"editConfig().step ?? 1\"\n [zThousandSeparator]=\"editConfig().thousandSeparator || ','\"\n [zDisabled]=\"cfg().disabled\"\n [zReadonly]=\"cfg().readonly\"\n [ngModel]=\"numericValue()\"\n (ngModelChange)=\"onValueChange($event)\"\n (zOnBlur)=\"onInputBlur()\"\n class=\"w-full\"\n />\n }\n @case ('select') {\n <z-select\n [class]=\"cfg().class\"\n [ngStyle]=\"cfg().style\"\n [zSize]=\"cfg().size\"\n [zWrap]=\"false\"\n [zScrollClose]=\"true\"\n [zOptions]=\"selectOptions()\"\n [zAllowClear]=\"cfg().allowClear\"\n [zDisabled]=\"cfg().disabled\"\n [zReadonly]=\"cfg().readonly\"\n [ngModel]=\"value()\"\n [zPlaceholder]=\"cfg().placeholder\"\n (ngModelChange)=\"onSelectChange($event)\"\n class=\"w-full min-w-0\"\n />\n }\n @case ('autocomplete') {\n <z-autocomplete\n [class]=\"cfg().class\"\n [ngStyle]=\"cfg().style\"\n [zSize]=\"cfg().size\"\n [zOptions]=\"autocompleteOptions()\"\n [zType]=\"editConfig().autocompleteType || 'default'\"\n [zResetOnSelect]=\"editConfig().autocompleteResetOnSelect ?? false\"\n [zHeightExpand]=\"editConfig().autocompleteHeight || 280\"\n [zAllowCustomValue]=\"editConfig().autocompleteAllowCustomValue ?? true\"\n [zDisabled]=\"cfg().disabled\"\n [zReadonly]=\"cfg().readonly\"\n [zPlaceholder]=\"cfg().placeholder\"\n [ngModel]=\"stringValue()\"\n (zOnCommit)=\"onAutocompleteCommit($event)\"\n (zOnSelect)=\"onAutocompleteSelect($event)\"\n (zOnBlur)=\"onInputBlur()\"\n class=\"w-full\"\n />\n }\n @case ('date') {\n <z-calendar\n zMode=\"single\"\n [class]=\"cfg().class\"\n [ngStyle]=\"cfg().style\"\n [zSize]=\"cfg().size\"\n zAllowClear\n zValueType=\"date\"\n [zScrollClose]=\"true\"\n [zDisabled]=\"cfg().disabled\"\n [zReadonly]=\"cfg().readonly\"\n [zPlaceholder]=\"cfg().placeholder\"\n [ngModel]=\"dateValue()\"\n (ngModelChange)=\"onImmediateChange($event)\"\n class=\"w-full\"\n />\n }\n @case ('textarea') {\n <z-input\n zType=\"textarea\"\n [zSize]=\"cfg().size\"\n [class]=\"cfg().class\"\n [ngStyle]=\"cfg().style\"\n [zPlaceholder]=\"cfg().placeholder\"\n [zRows]=\"editConfig().rows ?? 2\"\n [zDisabled]=\"cfg().disabled\"\n [zReadonly]=\"cfg().readonly\"\n [ngModel]=\"stringValue()\"\n (ngModelChange)=\"onValueChange($event)\"\n (zOnBlur)=\"onInputBlur()\"\n class=\"w-full\"\n />\n }\n @default {\n <z-input\n zType=\"text\"\n [class]=\"cfg().class\"\n [ngStyle]=\"cfg().style\"\n [zSize]=\"cfg().size\"\n [zPlaceholder]=\"cfg().placeholder\"\n [zDisabled]=\"cfg().disabled\"\n [zReadonly]=\"cfg().readonly\"\n [ngModel]=\"stringValue()\"\n (ngModelChange)=\"onValueChange($event)\"\n (zOnBlur)=\"onInputBlur()\"\n class=\"w-full\"\n />\n }\n }\n `,\n styles: `\n :host {\n display: block;\n width: 100%;\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'z-table-edit-cell block',\n },\n})\nexport class ZTableEditCellComponent<T = unknown> implements OnInit {\n private readonly _destroyRef = inject(DestroyRef);\n\n public readonly zRow = input.required<T>();\n public readonly zRowId = input.required<string>();\n public readonly zRowIndex = input.required<number>();\n public readonly zColumnId = input.required<string>();\n public readonly zValue = input<unknown>();\n public readonly zEditConfig = input<ZTableEditConfig<T>>();\n public readonly zRowUpdate = input<{ rowId: string; updates: Record<string, unknown> } | null>(null);\n public readonly zChange = output<ZTableEditCellChangeEvent<T>>();\n\n private readonly _currentValue = signal<unknown>(undefined);\n private readonly _valueChange$ = new Subject<{ oldValue: unknown; newValue: unknown }>();\n private _pendingBlurValue: unknown = undefined;\n private _hasPendingBlur = false;\n\n constructor() {\n effect(() => {\n const externalValue = this.zValue();\n this._currentValue.set(externalValue);\n });\n\n effect(() => {\n const update = this.zRowUpdate();\n if (!update) {\n return;\n }\n\n const myRowId = this.zRowId();\n const myColumnId = this.zColumnId();\n if (update.rowId !== myRowId) {\n return;\n }\n\n if (!(myColumnId in update.updates)) {\n return;\n }\n\n this._currentValue.set(update.updates[myColumnId]);\n });\n }\n\n protected readonly editConfig = computed(() => {\n const config = this.zEditConfig();\n if (!config || typeof config === 'boolean') {\n return { enabled: true, type: 'text' as ZTableEditType };\n }\n\n return config;\n });\n\n protected readonly cfg = computed<ZResolvedEditConfig>(() => {\n const config = this.editConfig();\n const row = this.zRow();\n return {\n type: resolveConfigValue(config?.type, row, 'text' as ZTableEditType),\n size: config?.size ?? 'default',\n placeholder: resolveConfigValue(config?.placeholder, row, ''),\n allowClear: config?.allowClear ?? false,\n class: resolveConfigValue(config?.class, row, ''),\n style: resolveConfigValue(config?.style, row, {} as Record<string, string>),\n disabled: resolveConfigValue(config?.disabled, row, false),\n readonly: resolveConfigValue(config?.readonly, row, false),\n };\n });\n\n protected readonly selectOptions = computed<ZSelectOption[]>(() => {\n const config = this.editConfig();\n const optionsConfig = config?.options;\n if (!optionsConfig) {\n return [];\n }\n\n const rawOptions: unknown[] = typeof optionsConfig === 'function' ? optionsConfig(this.zRow()) : optionsConfig;\n const labelKey = config?.optionLabelKey;\n const valueKey = config?.optionValueKey;\n\n if (!labelKey && !valueKey) {\n return rawOptions as ZSelectOption[];\n }\n\n return rawOptions.map((opt: unknown) => {\n if (typeof opt !== 'object' || opt === null) {\n return { label: String(opt), value: opt };\n }\n\n const obj = opt as Record<string, unknown>;\n return {\n label: String(obj[labelKey ?? 'label'] ?? ''),\n value: obj[valueKey ?? 'value'],\n };\n });\n });\n\n protected readonly autocompleteOptions = computed<ZAutocompleteOption[]>(() => {\n const config = this.editConfig();\n const optionsConfig = config?.autocompleteOptions;\n if (!optionsConfig) {\n return [];\n }\n\n const rawOptions: unknown[] = typeof optionsConfig === 'function' ? optionsConfig(this.zRow()) : optionsConfig;\n const labelKey = config?.optionLabelKey;\n const valueKey = config?.optionValueKey;\n\n if (!labelKey && !valueKey) {\n return rawOptions as ZAutocompleteOption[];\n }\n\n return rawOptions.map((opt: unknown) => {\n if (typeof opt !== 'object' || opt === null) {\n return { label: String(opt), value: opt };\n }\n\n const obj = opt as Record<string, unknown>;\n return {\n label: String(obj[labelKey ?? 'label'] ?? ''),\n value: obj[valueKey ?? 'value'],\n };\n });\n });\n\n protected readonly value = this._currentValue.asReadonly();\n protected readonly stringValue = computed(() => {\n const val = this.value();\n if (val === null || val === undefined) {\n return '';\n }\n\n return String(val);\n });\n\n protected readonly numericValue = computed(() => {\n const val = this.value();\n if (val === null || val === undefined || val === '') {\n return null;\n }\n\n const num = Number(val);\n return isNaN(num) ? null : num;\n });\n\n protected readonly booleanValue = computed(() => {\n const val = this.value();\n return Boolean(val);\n });\n\n protected readonly dateValue = computed(() => {\n const val = this.value();\n if (val instanceof Date) {\n return val;\n }\n\n if (typeof val === 'string' && val) {\n const date = new Date(val);\n return isNaN(date.getTime()) ? null : date;\n }\n\n return null;\n });\n\n protected onValueChange(newValue: unknown): void {\n const oldValue = this.zValue();\n this._currentValue.set(newValue);\n\n const config = this.editConfig();\n\n if (config?.blurEdit) {\n this._pendingBlurValue = newValue;\n this._hasPendingBlur = true;\n return;\n }\n\n this._valueChange$.next({ oldValue, newValue });\n }\n\n protected onInputBlur(): void {\n if (!this._hasPendingBlur) {\n return;\n }\n\n const oldValue = this.zValue();\n this._hasPendingBlur = false;\n this._emitChange(oldValue, this._pendingBlurValue);\n }\n\n protected onImmediateChange(newValue: unknown): void {\n const oldValue = this.zValue();\n this._currentValue.set(newValue);\n this._emitChange(oldValue, newValue);\n }\n\n protected onSelectChange(newValue: unknown): void {\n const isWrappedObject = typeof newValue === 'object' && newValue !== null && 'value' in newValue;\n const finalValue = isWrappedObject ? (newValue as { value: unknown }).value : newValue;\n this.onImmediateChange(finalValue);\n }\n\n protected onAutocompleteCommit(event: { value: string; source: 'enter' | 'blur' }): void {\n this.onImmediateChange(event.value);\n }\n\n protected onAutocompleteSelect(option: ZAutocompleteOption): void {\n this.onImmediateChange(option.label);\n }\n\n private _emitChange(oldValue: unknown, newValue: unknown): void {\n this.zChange.emit({\n row: this.zRow(),\n rowId: this.zRowId(),\n rowIndex: this.zRowIndex(),\n columnId: this.zColumnId(),\n oldValue,\n newValue,\n });\n }\n\n public ngOnInit(): void {\n const config = this.editConfig();\n const debounceMs = config?.debounceTime ?? 0;\n\n this._valueChange$\n .pipe(\n debounceTime(debounceMs),\n distinctUntilChanged((a, b) => a.newValue === b.newValue),\n takeUntilDestroyed(this._destroyRef)\n )\n .subscribe(({ oldValue, newValue }) => {\n this._emitChange(oldValue, newValue);\n });\n\n this._destroyRef.onDestroy(() => {\n this._valueChange$.complete();\n });\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input, OnDestroy } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ZCalendarComponent } from '@shival99/z-ui/components/z-calendar';\nimport type { ZDateRange } from '@shival99/z-ui/components/z-calendar';\nimport { ZInputComponent } from '@shival99/z-ui/components/z-input';\nimport { ZSelectComponent } from '@shival99/z-ui/components/z-select';\nimport type { Column, Table } from '@tanstack/angular-table';\nimport type { ZTableExtendedColumnDef } from '../z-table.types';\n\n@Component({\n selector: 'z-table-filter',\n imports: [FormsModule, ZInputComponent, ZSelectComponent, ZCalendarComponent, TranslatePipe],\n standalone: true,\n template: `\n @switch (filterType()) {\n @case ('range') {\n <div class=\"flex gap-1\">\n <z-input\n zType=\"number\"\n zSize=\"sm\"\n [zPlaceholder]=\"'i18n_z_ui_table_filter_min' | translate\"\n [ngModel]=\"rangeMinValue()\"\n (ngModelChange)=\"onMinChangeDebounced($event)\"\n class=\"min-w-0 flex-1\"\n />\n <z-input\n zType=\"number\"\n zSize=\"sm\"\n [zPlaceholder]=\"'i18n_z_ui_table_filter_max' | translate\"\n [ngModel]=\"rangeMaxValue()\"\n (ngModelChange)=\"onMaxChangeDebounced($event)\"\n class=\"min-w-0 flex-1\"\n />\n </div>\n }\n @case ('date') {\n <z-calendar\n zMode=\"single\"\n zSize=\"sm\"\n zAllowClear\n zValueType=\"date\"\n [zScrollClose]=\"true\"\n [zPlaceholder]=\"'i18n_z_ui_table_filter_date' | translate\"\n [ngModel]=\"dateValue()\"\n (ngModelChange)=\"onDateChange($event)\"\n class=\"w-full\"\n />\n }\n @case ('date-range') {\n <z-calendar\n zMode=\"range\"\n zSize=\"sm\"\n zAllowClear\n zValueType=\"date\"\n [zScrollClose]=\"true\"\n [zPlaceholder]=\"'i18n_z_ui_table_filter_date_range' | translate\"\n [ngModel]=\"dateRangeValue()\"\n (ngModelChange)=\"onDateRangeChange($event)\"\n class=\"w-full\"\n />\n }\n @case ('select') {\n <z-select\n zSize=\"sm\"\n zAllowClear\n [zWrap]=\"false\"\n [zScrollClose]=\"true\"\n [zOptions]=\"selectOptions()\"\n [ngModel]=\"selectValue()\"\n [zMaxVisible]=\"30\"\n [zPlaceholder]=\"'i18n_z_ui_common_select' | translate\"\n (ngModelChange)=\"onSelectChange($event)\"\n class=\"w-full min-w-0\"\n />\n }\n @case ('multi-select') {\n <z-select\n zMode=\"multiple\"\n zSize=\"sm\"\n zAllowClear\n [zWrap]=\"false\"\n [zScrollClose]=\"true\"\n [zOptions]=\"selectOptions()\"\n [zMaxTagCount]=\"1\"\n [zMaxVisible]=\"30\"\n [ngModel]=\"multiSelectValue()\"\n [zPlaceholder]=\"'i18n_z_ui_common_select' | translate\"\n (ngModelChange)=\"onMultiSelectChange($event)\"\n class=\"w-full min-w-0\"\n />\n }\n @case ('tags') {\n <z-select\n zMode=\"tags\"\n zSize=\"sm\"\n [zOptions]=\"selectOptions()\"\n [zWrap]=\"false\"\n [zScrollClose]=\"true\"\n [zMaxTagCount]=\"1\"\n [zMaxVisible]=\"30\"\n [zPlaceholder]=\"'i18n_z_ui_common_select' | translate\"\n class=\"w-full min-w-0\"\n [zAllowClear]=\"true\"\n (ngModelChange)=\"onMultiSelectChange($event)\"\n [ngModel]=\"multiSelectValue()\"\n />\n }\n @case ('number') {\n <z-input\n zType=\"number\"\n zSize=\"sm\"\n zAllowClear\n [zPlaceholder]=\"'i18n_z_ui_table_filter_search' | translate\"\n [ngModel]=\"columnFilterValue()?.toString() ?? ''\"\n (ngModelChange)=\"onTextChangeDebounced($event)\"\n class=\"w-full\"\n />\n }\n @default {\n <z-input\n zType=\"text\"\n zSize=\"sm\"\n zAllowClear\n [zPlaceholder]=\"'i18n_z_ui_table_filter_search' | translate\"\n [ngModel]=\"(columnFilterValue() ?? '').toString()\"\n (ngModelChange)=\"onTextChangeDebounced($event)\"\n class=\"w-full\"\n />\n }\n }\n `,\n styles: `\n :host {\n color: var(--foreground);\n font-weight: 450;\n font-style: normal;\n text-decoration: none;\n text-transform: none;\n letter-spacing: normal;\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'z-table-filter block',\n },\n})\nexport class ZTableFilterComponent<T> implements OnDestroy {\n public readonly zColumn = input.required<Column<unknown, unknown>>();\n public readonly zTable = input.required<Table<T>>();\n\n private _debounceTimeout: ReturnType<typeof setTimeout> | null = null;\n private readonly _debounceMs = 300;\n private readonly _columnDef = computed(() => this.zColumn().columnDef as ZTableExtendedColumnDef);\n\n public readonly filterType = computed(() => this._columnDef().filterType);\n public readonly columnFilterValue = computed<unknown>(() => this.zColumn().getFilterValue());\n public readonly minValue = computed(() => this.zColumn().getFacetedMinMaxValues()?.[0] ?? '');\n public readonly maxValue = computed(() => this.zColumn().getFacetedMinMaxValues()?.[1] ?? '');\n\n public readonly rangeMinValue = computed(() => {\n const value = this.columnFilterValue();\n if (!Array.isArray(value)) {\n return '';\n }\n\n return value[0] ?? '';\n });\n\n public readonly rangeMaxValue = computed(() => {\n const value = this.columnFilterValue();\n if (!Array.isArray(value)) {\n return '';\n }\n\n return value[1] ?? '';\n });\n\n public readonly dateValue = computed(() => {\n const value = this.columnFilterValue();\n if (value instanceof Date) {\n return value;\n }\n return null;\n });\n\n public readonly dateRangeValue = computed(() => {\n const value = this.columnFilterValue();\n if (value && typeof value === 'object' && 'start' in value && 'end' in value) {\n return value as ZDateRange;\n }\n return null;\n });\n\n public readonly selectValue = computed(() => {\n const value = this.columnFilterValue();\n if (value === null || value === undefined || value === '') {\n return null;\n }\n return value;\n });\n\n public readonly multiSelectValue = computed(() => {\n const value = this.columnFilterValue();\n if (Array.isArray(value)) {\n return value;\n }\n return [];\n });\n\n public readonly selectOptions = computed(() => {\n const columnDef = this._columnDef();\n if (columnDef.filterOptions && columnDef.filterOptions.length > 0) {\n return columnDef.filterOptions;\n }\n\n const facetedValues = this.zColumn().getFacetedUniqueValues();\n if (facetedValues && facetedValues.size > 0) {\n const uniqueValues = Array.from(facetedValues.keys()).sort().slice(0, 5000);\n return uniqueValues.map(v => ({ label: String(v), value: String(v) }));\n }\n\n const table = this.zTable();\n const column = this.zColumn();\n const { rows } = table.getRowModel();\n\n if (rows.length === 0) {\n return [];\n }\n\n const uniqueValues = new Set<string>();\n for (const row of rows) {\n const value = row.getValue(column.id);\n if (value !== null && value !== undefined && value !== '') {\n uniqueValues.add(String(value));\n }\n }\n\n const sortedValues = Array.from(uniqueValues).sort();\n return sortedValues.map(v => ({ label: String(v), value: String(v) }));\n });\n\n ngOnDestroy(): void {\n if (this._debounceTimeout) {\n clearTimeout(this._debounceTimeout);\n }\n }\n\n public onMinChangeDebounced(value: string | number | null): void {\n this._debounce(() => {\n const numValue = value === null || value === '' ? undefined : Number(value);\n this.zColumn().setFilterValue((old: [number, number]) => [numValue, old?.[1]]);\n });\n }\n\n public onMaxChangeDebounced(value: string | number | null): void {\n this._debounce(() => {\n const numValue = value === null || value === '' ? undefined : Number(value);\n this.zColumn().setFilterValue((old: [number, number]) => [old?.[0], numValue]);\n });\n }\n\n public onTextChangeDebounced(value: string | number | null): void {\n this._debounce(() => {\n this.zColumn().setFilterValue(value);\n });\n }\n\n public onSelectChange(value: unknown): void {\n if (typeof value === 'object' && value !== null && 'value' in value) {\n this.zColumn().setFilterValue((value as { value: string }).value || undefined);\n return;\n }\n\n this.zColumn().setFilterValue(value || undefined);\n }\n\n public onMultiSelectChange(value: unknown[]): void {\n if (!value || (Array.isArray(value) && value.length === 0)) {\n this.zColumn().setFilterValue(undefined);\n return;\n }\n this.zColumn().setFilterValue(value);\n }\n\n public onDateChange(value: Date | null): void {\n this.zColumn().setFilterValue(value || undefined);\n }\n\n public onDateRangeChange(value: ZDateRange | null): void {\n if (value && (value.start || value.end)) {\n this.zColumn().setFilterValue(value);\n return;\n }\n this.zColumn().setFilterValue(undefined);\n }\n\n private _debounce(fn: () => void): void {\n if (this._debounceTimeout) {\n clearTimeout(this._debounceTimeout);\n }\n\n this._debounceTimeout = setTimeout(fn, this._debounceMs);\n }\n}\n","import { NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, ElementRef, inject, input } from '@angular/core';\nimport { ZIconComponent } from '@shival99/z-ui/components/z-icon';\nimport { ZTooltipDirective } from '@shival99/z-ui/components/z-tooltip';\nimport { type ZTooltipConfig } from '@shival99/z-ui/components/z-tooltip';\nimport { ZSafeHtmlPipe } from '@shival99/z-ui/pipes';\nimport { ZTranslateService } from '@shival99/z-ui/services';\nimport { type ZTableIconPart } from '../z-table.types';\nimport { parseIconString, stripIconSyntax } from '../z-table.util';\n\n@Component({\n selector: 'z-table-icon-text',\n imports: [NgClass, ZIconComponent, ZTooltipDirective, ZSafeHtmlPipe],\n standalone: true,\n template: `\n <span class=\"z-table-icon-text-inner\">\n @for (part of translatedParts(); track $index) {\n @if (part.type === 'icon') {\n <z-icon\n class=\"shrink-0\"\n [zType]=\"$any(part.value)\"\n [zSize]=\"$any(part.size ?? 14)\"\n [zStrokeWidth]=\"part.strokeWidth ?? 1.5\"\n [ngClass]=\"part.class ?? ''\"\n />\n } @else {\n <span\n class=\"truncate select-text\"\n z-tooltip\n [zContent]=\"tooltipContent()\"\n [zTriggerElement]=\"triggerEl()\"\n [innerHTML]=\"part.value | zSafeHtml\"\n ></span>\n }\n }\n </span>\n `,\n styles: `\n :host {\n display: inline-flex;\n align-items: center;\n min-width: 0;\n max-width: 100%;\n }\n\n .z-table-icon-text-inner {\n display: inline-flex;\n align-items: center;\n gap: 0.25rem;\n line-height: 1.2;\n min-width: 0;\n max-width: 100%;\n }\n\n span.truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ZTableIconTextComponent {\n public readonly zText = input<string>('');\n public readonly zTooltip = input<string | ZTooltipConfig>('');\n public readonly zTriggerElement = input<HTMLElement | null>(null);\n\n private readonly _hostEl = inject(ElementRef).nativeElement;\n private readonly _zTranslate = inject(ZTranslateService);\n\n protected readonly triggerEl = computed(() => this.zTriggerElement() ?? this._hostEl);\n protected readonly translatedParts = computed<ZTableIconPart[]>(() => {\n this._zTranslate.currentLang();\n const parts = parseIconString(this.zText());\n return parts.map(part => {\n if (part.type === 'text') {\n const trimmedValue = part.value.trim();\n return { ...part, value: this._zTranslate.instant(trimmedValue) };\n }\n return part;\n });\n });\n\n protected readonly tooltipContent = computed(() => {\n this._zTranslate.currentLang();\n const tooltip = this.zTooltip();\n if (tooltip) {\n if (typeof tooltip === 'string') {\n return stripIconSyntax(this._zTranslate.instant(tooltip.trim()));\n }\n if (tooltip.content && typeof tooltip.content === 'string') {\n return stripIconSyntax(this._zTranslate.instant(tooltip.content.trim()));\n }\n }\n return stripIconSyntax(this._zTranslate.instant(this.zText().trim()));\n });\n}\n","import { Directive, ElementRef, Renderer2, input, inject } from '@angular/core';\n\n@Directive({\n selector: '[z-table-row-hover], [zTableRowHover]',\n standalone: true,\n host: {\n '(mouseenter)': 'onMouseEnter()',\n '(mouseleave)': 'onMouseLeave()',\n },\n})\n/**\n * EN: Applies row-hover class to hovered row cells and to spanning cells that cover that row.\n * VI: Áp class hover cho cell của row đang hover và cả các cell có rowSpan bao phủ row đó.\n */\nexport class ZTableRowHoverDirective {\n public readonly zTableRowHover = input<HTMLTableElement | null>(null);\n\n private readonly _elementRef = inject(ElementRef<HTMLTableRowElement>);\n private readonly _renderer = inject(Renderer2);\n public onMouseEnter(): void {\n this._handleHover(true);\n }\n\n public onMouseLeave(): void {\n this._handleHover(false);\n }\n\n private _handleHover(isHover: boolean): void {\n const row = this._elementRef.nativeElement;\n const table = this.zTableRowHover() || this._findParentTable(row);\n\n if (!table) {\n return;\n }\n\n const cellsInCurrentRow = Array.from(row.children) as HTMLTableCellElement[];\n cellsInCurrentRow.forEach(cell => {\n this._toggleCellHover(cell, isHover);\n });\n\n const tbody = table.querySelector('tbody');\n if (!tbody) {\n return;\n }\n\n const allRows = Array.from(tbody.querySelectorAll('tr')) as HTMLTableRowElement[];\n const currentRowIndex = allRows.indexOf(row);\n\n if (currentRowIndex === -1) {\n return;\n }\n\n const grid: {\n cell: HTMLTableCellElement;\n rowStart: number;\n rowEnd: number;\n }[] = [];\n\n for (let rowIdx = 0; rowIdx < allRows.length; rowIdx++) {\n const r = allRows[rowIdx];\n const cellsInRow = Array.from(r.children) as HTMLTableCellElement[];\n\n cellsInRow.forEach(cell => {\n const rowSpan = parseInt(cell.getAttribute('rowspan') || '1', 10);\n const rowEnd = rowIdx + rowSpan - 1;\n grid.push({\n cell,\n rowStart: rowIdx,\n rowEnd: rowEnd,\n });\n });\n }\n\n grid.forEach(item => {\n const coverCurrentRow = item.rowStart < currentRowIndex && item.rowEnd >= currentRowIndex;\n if (!coverCurrentRow) {\n return;\n }\n\n this._toggleCellHover(item.cell, isHover);\n });\n }\n\n private _toggleCellHover(cell: HTMLTableCellElement, isHover: boolean): void {\n if (isHover) {\n this._renderer.addClass(cell, 'z-row-hover');\n return;\n }\n\n this._renderer.removeClass(cell, 'z-row-hover');\n }\n\n private _findParentTable(element: HTMLElement): HTMLTableElement | null {\n let current = element.parentElement;\n while (current) {\n if (current.tagName === 'TABLE') {\n return current as HTMLTableElement;\n }\n current = current.parentElement;\n }\n return null;\n }\n}\n","import { Directive, ElementRef, inject, input, OnDestroy, AfterViewInit, NgZone } from '@angular/core';\nimport { Header } from '@tanstack/angular-table';\n\n@Directive({\n selector: '[z-table-resize],[zTableResize]',\n standalone: true,\n})\n/**\n * EN: Binds mouse/touch events to TanStack header resize handlers for column resizing.\n * VI: Gắn sự kiện mouse/touch vào resize handler của TanStack header để đổi kích thước cột.\n */\nexport class ZTableResizeDirective<T> implements AfterViewInit, OnDestroy {\n public readonly zTableResize = input.required<Header<T, unknown>>();\n\n private readonly _elementRef = inject(ElementRef<HTMLElement>);\n private readonly _ngZone = inject(NgZone);\n\n private _mousedownHandler: ((event: MouseEvent) => void) | null = null;\n private _touchstartHandler: ((event: TouchEvent) => void) | null = null;\n\n ngAfterViewInit(): void {\n const element = this._elementRef.nativeElement;\n const header = this.zTableResize();\n this._mousedownHandler = (event: MouseEvent) => {\n this._ngZone.run(() => {\n const resizeHandler = header.getResizeHandler();\n resizeHandler(event);\n });\n };\n\n this._touchstartHandler = (event: TouchEvent) => {\n this._ngZone.run(() => {\n const resizeHandler = header.getResizeHandler();\n resizeHandler(event);\n });\n };\n\n element.addEventListener('mousedown', this._mousedownHandler);\n element.addEventListener('touchstart', this._touchstartHandler, { passive: true });\n }\n\n ngOnDestroy(): void {\n const element = this._elementRef.nativeElement;\n\n if (this._mousedownHandler) {\n element.removeEventListener('mousedown', this._mousedownHandler);\n this._mousedownHandler = null;\n }\n\n if (this._touchstartHandler) {\n element.removeEventListener('touchstart', this._touchstartHandler);\n this._touchstartHandler = null;\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { Cell, CellContext, Row } from '@tanstack/angular-table';\nimport type { ZTableColumnConfig } from '../z-table.types';\nimport { findColumnConfig, isBodyConfig } from '../z-table.util';\n\n@Pipe({\n name: 'zTableCellBottom',\n standalone: true,\n pure: true,\n})\n/**\n * EN: Determines whether a body cell reaches the table bottom after applying rowSpan rules.\n * VI: Xác định cell body có chạm đáy bảng hay không sau khi áp dụng quy tắc rowSpan.\n */\nexport class ZTableCellBottomPipe implements PipeTransform {\n transform<T>(cell: Cell<T, unknown>, columns: ZTableColumnConfig<T>[], allRows: Row<T>[]): boolean {\n if (allRows.length === 0) {\n return false;\n }\n\n const currentRowIndex = allRows.findIndex(r => r.id === cell.row.id);\n if (currentRowIndex === -1) {\n return false;\n }\n\n const lastRowIndex = allRows.length - 1;\n if (currentRowIndex === lastRowIndex) {\n return true;\n }\n\n const columnConfig = findColumnConfig(cell.column.id, columns);\n if (!columnConfig?.body || !isBodyConfig(columnConfig.body)) {\n return false;\n }\n\n const rowSpanValue = columnConfig.body.rowSpan;\n if (!rowSpanValue) {\n return false;\n }\n\n const actualRowSpan = this._getActualRowSpan(cell, currentRowIndex, rowSpanValue, allRows.length);\n if (actualRowSpan === 0) {\n return false;\n }\n\n return currentRowIndex + actualRowSpan - 1 >= lastRowIndex;\n }\n\n private _getActualRowSpan<T>(\n cell: Cell<T, unknown>,\n currentRowIndex: number,\n rowSpanValue: number | ((ctx: CellContext<T, unknown>) => number),\n totalRows: number\n ): number {\n if (typeof rowSpanValue === 'function') {\n return rowSpanValue(cell.getContext());\n }\n\n if (currentRowIndex % rowSpanValue !== 0) {\n return 0;\n }\n\n return Math.min(rowSpanValue, totalRows - currentRowIndex);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { ZTableColumnConfig } from '../z-table.types';\nimport { findColumnConfig, isBodyConfig } from '../z-table.util';\n\n@Pipe({\n name: 'zTableCellClickable',\n standalone: true,\n pure: true,\n})\n/**\n * EN: Resolves whether click interaction is enabled for a body cell from column configuration.\n * VI: Xác định cell body có được phép click hay không dựa theo cấu hình cột.\n */\nexport class ZTableCellClickablePipe implements PipeTransform {\n public transform<T>(columnId: string, columns: ZTableColumnConfig<T>[]): boolean {\n const columnConfig = findColumnConfig(columnId, columns);\n if (!columnConfig) {\n return false;\n }\n\n if (!isBodyConfig(columnConfig.body)) {\n return false;\n }\n\n return columnConfig.body.enabledClick === true;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { ZTooltipConfig } from '@shival99/z-ui/components/z-tooltip';\nimport type { Cell } from '@tanstack/angular-table';\nimport type { ZTableColumnConfig } from '../z-table.types';\nimport { findColumnConfig, getBodyConfig } from '../z-table.util';\n\nconst Z_TABLE_BODY_ALIGN_MAP: Record<string, string> = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n};\n\n@Pipe({\n name: 'zTableCellConfig',\n standalone: true,\n pure: true,\n})\n/**\n * EN: Maps body cell configuration into template-ready class/style/tooltip values.\n * VI: Ánh xạ cấu hình cell body thành giá trị class/style/tooltip để render template.\n */\nexport class ZTableCellConfigPipe implements PipeTransform {\n transform<T>(\n cell: Cell<T, unknown>,\n columns: ZTableColumnConfig<T>[],\n property: 'cellClass' | 'contentClass'\n ): string;\n transform<T>(\n cell: Cell<T, unknown>,\n columns: ZTableColumnConfig<T>[],\n property: 'cellStyle' | 'contentStyle'\n ): Record<string, string>;\n transform<T>(\n cell: Cell<T, unknown>,\n columns: ZTableColumnConfig<T>[],\n property: 'contentTooltip'\n ): string | ZTooltipConfig;\n transform<T>(\n cell: Cell<T, unknown>,\n columns: ZTableColumnConfig<T>[],\n property: 'cellClass' | 'cellStyle' | 'contentClass' | 'contentStyle' | 'contentTooltip'\n ): string | Record<string, string> | ZTooltipConfig {\n const columnConfig = findColumnConfig(cell.column.id, columns);\n const bodyConfig = getBodyConfig(columnConfig, cell.getContext());\n\n switch (property) {\n case 'cellClass':\n return this._getCellClass(bodyConfig);\n\n case 'cellStyle':\n return bodyConfig.style || {};\n\n case 'contentClass':\n return (bodyConfig.contentClass as string) || '';\n\n case 'contentStyle':\n return bodyConfig.contentStyle || {};\n\n case 'contentTooltip':\n return (bodyConfig.tooltip as string | ZTooltipConfig | undefined) || '';\n\n default:\n return '';\n }\n }\n\n private _getCellClass<T>(bodyConfig: ReturnType<typeof getBodyConfig<T>>): string {\n const classes: string[] = [];\n\n if (bodyConfig.align) {\n const alignClass = Z_TABLE_BODY_ALIGN_MAP[bodyConfig.align];\n if (alignClass) {\n classes.push(alignClass);\n }\n }\n\n if (bodyConfig.class) {\n classes.push(bodyConfig.class as string);\n }\n\n return classes.join(' ');\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { CellContext } from '@tanstack/angular-table';\nimport type { ZTableColumnConfig, ZTableEditCellInfo, ZTableEditConfig } from '../z-table.types';\nimport { isBodyConfig, findColumnConfig } from '../z-table.util';\n\n@Pipe({\n name: 'zTableCellEdit',\n standalone: true,\n pure: true,\n})\n/**\n * EN: Normalizes edit settings for a cell and returns a consistent edit descriptor.\n * VI: Chuẩn hóa cấu hình edit của cell và trả về mô tả edit theo một format thống nhất.\n */\nexport class ZTableCellEditPipe implements PipeTransform {\n transform<T>(cell: CellContext<T, unknown>, columns: ZTableColumnConfig<T>[]): ZTableEditCellInfo {\n const columnConfig = findColumnConfig(cell.column.id, columns);\n if (!columnConfig) {\n return { enabled: false, type: 'text', config: null };\n }\n\n const { body } = columnConfig;\n if (!isBodyConfig(body)) {\n return { enabled: false, type: 'text', config: null };\n }\n\n const { edit } = body;\n if (!edit) {\n return { enabled: false, type: 'text', config: null };\n }\n\n if (typeof edit === 'boolean') {\n return {\n enabled: edit,\n type: 'text',\n config: { enabled: edit, type: 'text' },\n };\n }\n\n const baseType = typeof edit.type === 'function' ? 'text' : (edit.type ?? 'text');\n return {\n enabled: edit.enabled !== false,\n type: baseType,\n config: edit as ZTableEditConfig<unknown>,\n };\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { Cell, Column, Header } from '@tanstack/angular-table';\n\n@Pipe({\n name: 'zTableCellOffset',\n standalone: true,\n pure: true,\n})\n/**\n * EN: Checks whether a header/body item starts at the left edge in the ordered column list.\n * VI: Kiểm tra header/cell có nằm ở mép trái của danh sách cột đã sắp xếp hay không.\n */\nexport class ZTableCellOffsetPipe implements PipeTransform {\n /**\n * Calculate if a cell/header is at the left edge (offset = 0)\n * Returns true if the cell should have no border-left (it's at the leftmost position)\n */\n transform<T>(item: Cell<T, unknown> | Header<T, unknown>, orderedColumns: Column<T>[]): boolean {\n const columnId = item.column.id;\n // Find the index of this column in the ordered columns list\n const columnIndex = orderedColumns.findIndex(col => col.id === columnId);\n // If it's the first column (index 0), it's at the left edge\n if (columnIndex === 0) {\n return true;\n }\n // For headers with colSpan, check if any of its leaf columns is the first\n if ('getLeafHeaders' in item) {\n const header = item as Header<T, unknown>;\n const leafHeaders = header.getLeafHeaders();\n\n for (const leaf of leafHeaders) {\n const leafIndex = orderedColumns.findIndex(col => col.id === leaf.column.id);\n if (leafIndex === 0) {\n return true;\n }\n }\n }\n\n return false;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { Header } from '@tanstack/angular-table';\nimport type { ZTableColumnConfig, ZTableCellPinProperty, ZTableCellType } from '../z-table.types';\nimport { findColumnConfig, getHeaderColSpan, getFooterColSpan } from '../z-table.util';\n\n@Pipe({\n name: 'zTableCellPin',\n standalone: true,\n pure: true,\n})\n/**\n * EN: Detects pin-boundary states (last left, first right, last right) for header/footer cells.\n * VI: Xác định các mốc pin (cuối bên trái, đầu bên phải, cuối bên phải) cho cell header/footer.\n */\nexport class ZTableCellPinPipe implements PipeTransform {\n transform<T>(\n item: Header<T, unknown>,\n property: ZTableCellPinProperty,\n columns?: ZTableColumnConfig<T>[],\n cellType: ZTableCellType = 'header'\n ): boolean {\n switch (property) {\n case 'isLastLeftPinned':\n return this._isLastLeftPinned(item, columns ?? [], cellType);\n\n case 'isFirstRightPinned':\n return this._isFirstRightPinned(item, columns ?? [], cellType);\n\n case 'isLastRightPinned':\n return this._isLastRightPinned(item, columns ?? [], cellType);\n\n default:\n return false;\n }\n }\n\n private _isLastLeftPinned<T>(\n header: Header<T, unknown>,\n columns: ZTableColumnConfig<T>[],\n cellType: ZTableCellType\n ): boolean {\n const leafHeaders = header.getLeafHeaders();\n const hasLastLeftPinnedLeaf = leafHeaders.some(\n lh => lh.column.getIsPinned() === 'left' && lh.column.getIsLastColumn('left')\n );\n\n if (hasLastLeftPinnedLeaf) {\n return true;\n }\n\n const columnConfig = findColumnConfig(header.column.id, columns);\n const configColSpan = cellType === 'footer' ? getFooterColSpan(columnConfig) : getHeaderColSpan(columnConfig);\n if (!configColSpan || configColSpan <= 1) {\n return false;\n }\n\n const { headers: allHeadersInGroup } = header.headerGroup;\n const currentIndex = allHeadersInGroup.findIndex(h => h.id === header.id);\n\n if (currentIndex === -1) {\n return false;\n }\n\n for (let i = 0; i < configColSpan && currentIndex + i < allHeadersInGroup.length; i++) {\n const targetHeader = allHeadersInGroup[currentIndex + i];\n const targetLeafHeaders = targetHeader.getLeafHeaders();\n const hasLastLeft = targetLeafHeaders.some(\n lh => lh.column.getIsPinned() === 'left' && lh.column.getIsLastColumn('left')\n );\n\n if (hasLastLeft) {\n return true;\n }\n }\n\n return false;\n }\n\n private _isFirstRightPinned<T>(\n header: Header<T, unknown>,\n columns: ZTableColumnConfig<T>[],\n cellType: ZTableCellType\n ): boolean {\n const leafHeaders = header.getLeafHeaders();\n const hasFirstRightPinnedLeaf = leafHeaders.some(\n lh => lh.column.getIsPinned() === 'right' && lh.column.getIsFirstColumn('right')\n );\n if (hasFirstRightPinnedLeaf) {\n return true;\n }\n\n const columnConfig = findColumnConfig(header.column.id, columns);\n const configColSpan = cellType === 'footer' ? getFooterColSpan(columnConfig) : getHeaderColSpan(columnConfig);\n\n if (!configColSpan || configColSpan <= 1) {\n return false;\n }\n\n const { headers: allHeadersInGroup } = header.headerGroup;\n const currentIndex = allHeadersInGroup.findIndex(h => h.id === header.id);\n\n if (currentIndex === -1) {\n return false;\n }\n\n for (let i = 0; i < configColSpan && currentIndex + i < allHeadersInGroup.length; i++) {\n const targetHeader = allHeadersInGroup[currentIndex + i];\n const targetLeafHeaders = targetHeader.getLeafHeaders();\n const hasFirst = targetLeafHeaders.some(\n lh => lh.column.getIsPinned() === 'right' && lh.column.getIsFirstColumn('right')\n );\n if (hasFirst) {\n return true;\n }\n }\n\n return false;\n }\n\n private _isLastRightPinned<T>(\n header: Header<T, unknown>,\n columns: ZTableColumnConfig<T>[],\n cellType: ZTableCellType\n ): boolean {\n const leafHeaders = header.getLeafHeaders();\n const hasLastRightPinnedLeaf = leafHeaders.some(\n lh => lh.column.getIsPinned() === 'right' && lh.column.getIsLastColumn('right')\n );\n if (hasLastRightPinnedLeaf) {\n return true;\n }\n\n const columnConfig = findColumnConfig(header.column.id, columns);\n const configColSpan = cellType === 'footer' ? getFooterColSpan(columnConfig) : getHeaderColSpan(columnConfig);\n\n if (!configColSpan || configColSpan <= 1) {\n return false;\n }\n\n const { headers: allHeadersInGroup } = header.headerGroup;\n const currentIndex = allHeadersInGroup.findIndex(h => h.id === header.id);\n\n if (currentIndex === -1) {\n return false;\n }\n\n const endIndex = currentIndex + configColSpan - 1;\n if (endIndex >= allHeadersInGroup.length) {\n return false;\n }\n\n const targetHeader = allHeadersInGroup[endIndex];\n const targetLeafHeaders = targetHeader.getLeafHeaders();\n return targetLeafHeaders.some(lh => lh.column.getIsPinned() === 'right' && lh.column.getIsLastColumn('right'));\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { Cell, Header } from '@tanstack/angular-table';\nimport type { ZTableCellRenderType, ZTableColumnConfig } from '../z-table.types';\nimport { shouldBodyCellRenderColSpan, shouldHeaderRender, shouldFooterRender } from '../z-table.util';\n\n@Pipe({\n name: 'zTableCellRender',\n standalone: true,\n pure: true,\n})\n/**\n * EN: Decides whether header/footer/body cells should render when span and merge rules are applied.\n * VI: Quyết định header/footer/body có cần render hay không khi áp dụng quy tắc span và gộp ô.\n */\nexport class ZTableCellRenderPipe implements PipeTransform {\n transform<T>(\n cellOrHeader: Cell<T, unknown> | Header<T, unknown>,\n allCellsOrHeaders: Cell<T, unknown>[] | Header<T, unknown>[],\n columns: ZTableColumnConfig<T>[],\n type: ZTableCellRenderType\n ): boolean {\n switch (type) {\n case 'header':\n return shouldHeaderRender(\n cellOrHeader as Header<T, unknown>,\n allCellsOrHeaders as Header<T, unknown>[],\n columns\n );\n case 'footer':\n return shouldFooterRender(\n cellOrHeader as Header<T, unknown>,\n allCellsOrHeaders as Header<T, unknown>[],\n columns\n );\n case 'body':\n return shouldBodyCellRenderColSpan(\n cellOrHeader as Cell<T, unknown>,\n allCellsOrHeaders as Cell<T, unknown>[],\n columns\n );\n default:\n return true;\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { Cell } from '@tanstack/angular-table';\nimport type { ZTableColumnConfig } from '../z-table.types';\nimport { findColumnConfig, isBodyConfig } from '../z-table.util';\n\n@Pipe({\n name: 'zTableCellVisible',\n standalone: true,\n pure: true,\n})\n/**\n * EN: Resolves per-cell visibility from static or callback-based body visibility config.\n * VI: Xác định độ hiển thị của từng cell từ cấu hình visible dạng static hoặc callback.\n */\nexport class ZTableCellVisiblePipe implements PipeTransform {\n transform<T>(cell: Cell<T, unknown>, columns: ZTableColumnConfig<T>[]): boolean {\n const columnConfig = findColumnConfig(cell.column.id, columns);\n if (!columnConfig) {\n return true;\n }\n\n const { body } = columnConfig;\n if (!isBodyConfig(body)) {\n return true;\n }\n\n const { visible } = body;\n if (visible === undefined) {\n return true;\n }\n\n if (typeof visible === 'function') {\n return visible(cell.getContext());\n }\n\n return visible;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { ZTooltipConfig } from '@shival99/z-ui/components/z-tooltip';\nimport type { ZTableColumnConfig } from '../z-table.types';\nimport { findColumnConfig, getHeaderConfig, getFooterConfig, isBodyConfig } from '../z-table.util';\n\nconst Z_TABLE_ALIGN_MAP: Record<string, string> = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n};\n\n@Pipe({\n name: 'zTableColumnConfig',\n standalone: true,\n pure: true,\n})\n/**\n * EN: Exposes header/footer/body-related column settings (class, style, tooltip, width, capabilities).\n * VI: Cung cấp cấu hình cột liên quan header/footer/body (class, style, tooltip, width, khả năng).\n */\nexport class ZTableColumnConfigPipe implements PipeTransform {\n transform<T>(\n columnId: string,\n columns: ZTableColumnConfig<T>[],\n property:\n | 'headerClass'\n | 'headerAlignClass'\n | 'headerContentClass'\n | 'footerClass'\n | 'footerAlignClass'\n | 'footerContentClass'\n ): string;\n transform<T>(\n columnId: string,\n columns: ZTableColumnConfig<T>[],\n property: 'headerStyle' | 'headerContentStyle' | 'footerStyle' | 'footerContentStyle'\n ): Record<string, string>;\n transform<T>(\n columnId: string,\n columns: ZTableColumnConfig<T>[],\n property: 'headerTooltip' | 'footerTooltip'\n ): string | ZTooltipConfig;\n transform<T>(\n columnId: string,\n columns: ZTableColumnConfig<T>[],\n property: 'hasBodyRowSpan' | 'enableOrdering' | 'enablePinning'\n ): boolean;\n transform<T>(columnId: string, columns: ZTableColumnConfig<T>[], property: 'footerContent'): unknown;\n transform<T>(columnId: string, columns: ZTableColumnConfig<T>[], property: 'width'): string | undefined;\n transform<T>(\n columnId: string,\n columns: ZTableColumnConfig<T>[],\n property:\n | 'headerClass'\n | 'headerStyle'\n | 'headerTooltip'\n | 'headerAlignClass'\n | 'headerContentClass'\n | 'headerContentStyle'\n | 'footerClass'\n | 'footerStyle'\n | 'footerTooltip'\n | 'footerAlignClass'\n | 'footerContentClass'\n | 'footerContentStyle'\n | 'hasBodyRowSpan'\n | 'footerContent'\n | 'enableOrdering'\n | 'enablePinning'\n | 'width'\n ): string | Record<string, string> | ZTooltipConfig | boolean | unknown {\n const columnConfig = findColumnConfig(columnId, columns);\n\n switch (property) {\n case 'headerClass': {\n const headerConfig = getHeaderConfig(columnConfig);\n return headerConfig.class || '';\n }\n\n case 'headerStyle': {\n const headerConfig = getHeaderConfig(columnConfig);\n return headerConfig.style || {};\n }\n\n case 'headerTooltip': {\n const headerConfig = getHeaderConfig(columnConfig);\n return (headerConfig.tooltip as string | ZTooltipConfig) || '';\n }\n\n case 'headerAlignClass': {\n const headerConfig = getHeaderConfig(columnConfig);\n return headerConfig.align ? Z_TABLE_ALIGN_MAP[headerConfig.align] || '' : '';\n }\n\n case 'headerContentClass': {\n const headerConfig = getHeaderConfig(columnConfig);\n const { contentClass } = headerConfig;\n if (typeof contentClass === 'function') {\n return '';\n }\n return contentClass || '';\n }\n\n case 'headerContentStyle': {\n const headerConfig = getHeaderConfig(columnConfig);\n const { contentStyle } = headerConfig;\n if (typeof contentStyle === 'function') {\n return {};\n }\n return contentStyle || {};\n }\n\n case 'footerClass': {\n const footerConfig = getFooterConfig(columnConfig);\n return footerConfig.class || '';\n }\n\n case 'footerStyle': {\n const footerConfig = getFooterConfig(columnConfig);\n return footerConfig.style || {};\n }\n\n case 'footerTooltip': {\n const footerConfig = getFooterConfig(columnConfig);\n return (footerConfig.tooltip as string | ZTooltipConfig) || '';\n }\n\n case 'footerAlignClass': {\n const footerConfig = getFooterConfig(columnConfig);\n return footerConfig.align ? Z_TABLE_ALIGN_MAP[footerConfig.align] || '' : '';\n }\n\n case 'footerContentClass': {\n const footerConfig = getFooterConfig(columnConfig);\n const { contentClass } = footerConfig;\n if (typeof contentClass === 'function') {\n return '';\n }\n return contentClass || '';\n }\n\n case 'footerContentStyle': {\n const footerConfig = getFooterConfig(columnConfig);\n const { contentStyle } = footerConfig;\n if (typeof contentStyle === 'function') {\n return {};\n }\n return contentStyle || {};\n }\n\n case 'hasBodyRowSpan':\n return columnConfig ? isBodyConfig(columnConfig.body) && columnConfig.body.rowSpan !== undefined : false;\n\n case 'enableOrdering':\n return columnConfig?.enableOrdering !== false;\n\n case 'enablePinning':\n return columnConfig?.enablePinning !== false;\n\n case 'footerContent': {\n const footerConfig = getFooterConfig(columnConfig);\n return footerConfig.content || '';\n }\n\n case 'width':\n return columnConfig?.width;\n\n default:\n return '';\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { ZTableColumnConfig } from '../z-table.types';\nimport { findColumnConfig, getHeaderConfig, stripIconSyntax } from '../z-table.util';\n\n@Pipe({\n name: 'zTableColumnHeader',\n standalone: true,\n pure: true,\n})\n/**\n * EN: Returns a plain-text header label for a column and removes icon syntax markers.\n * VI: Trả về nhãn header dạng text cho cột và loại bỏ cú pháp icon marker.\n */\nexport class ZTableColumnHeaderPipe implements PipeTransform {\n transform<T>(columnId: string, columns: ZTableColumnConfig<T>[]): string {\n const columnConfig = findColumnConfig(columnId, columns);\n if (!columnConfig) {\n return columnId;\n }\n\n const headerConfig = getHeaderConfig(columnConfig);\n if (typeof headerConfig.content === 'string') {\n return stripIconSyntax(headerConfig.content);\n }\n\n return columnId;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { ZTableColumnConfig } from '../z-table.types';\nimport { getHeaderConfig, stripIconSyntax } from '../z-table.util';\n\n@Pipe({\n name: 'zTableColumnParents',\n standalone: true,\n pure: true,\n})\n/**\n * EN: Builds the parent-column breadcrumb path for a nested column.\n * VI: Tạo đường dẫn breadcrumb các cột cha cho cột lồng nhau.\n */\nexport class ZTableColumnParentsPipe implements PipeTransform {\n transform<T>(columnId: string, columns: ZTableColumnConfig<T>[]): string {\n const parents: string[] = [];\n this._findParents(columnId, columns, parents);\n return parents.length > 0 ? parents.join(' › ') : '';\n }\n\n private _findParents<T>(\n columnId: string,\n columns: ZTableColumnConfig<T>[],\n parents: string[],\n currentParents: string[] = []\n ): boolean {\n for (const col of columns) {\n if (col.id === columnId) {\n parents.push(...currentParents);\n return true;\n }\n\n if (col.columns && col.columns.length > 0) {\n const parentName = this._getColumnName(col);\n const found = this._findParents(columnId, col.columns, parents, [...currentParents, parentName]);\n if (found) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n private _getColumnName<T>(col: ZTableColumnConfig<T>): string {\n const headerConfig = getHeaderConfig(col);\n if (typeof headerConfig.content === 'string') {\n return stripIconSyntax(headerConfig.content);\n }\n return col.id;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { Header } from '@tanstack/angular-table';\nimport type { ZTableColumnConfig } from '../z-table.types';\nimport { findColumnConfig } from '../z-table.util';\n\n@Pipe({\n name: 'zTableFooterContent',\n standalone: true,\n pure: true,\n})\n/**\n * EN: Checks whether a footer group has at least one configured footer cell to render.\n * VI: Kiểm tra footer group có ít nhất một cell footer được cấu hình để render hay không.\n */\nexport class ZTableFooterContentPipe implements PipeTransform {\n transform<T>(footerGroup: { headers: Header<T, unknown>[] }, columns: ZTableColumnConfig<T>[]): boolean {\n return footerGroup.headers.some(header => {\n const columnConfig = findColumnConfig(header.column.id, columns);\n return columnConfig?.footer !== undefined;\n });\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { hasIconSyntax } from '../z-table.util';\n\n@Pipe({\n name: 'zTableHasIcon',\n standalone: true,\n pure: true,\n})\n/**\n * EN: Detects whether a string content contains the table icon placeholder syntax.\n * VI: Kiểm tra nội dung chuỗi có chứa cú pháp placeholder icon của table hay không.\n */\nexport class ZTableHasIconPipe implements PipeTransform {\n transform(content: unknown): boolean {\n if (typeof content !== 'string') {\n return false;\n }\n\n return hasIconSyntax(content);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { Column, Cell, Header, Table } from '@tanstack/angular-table';\nimport type { ZPinningStyles, ZTableColumnConfig } from '../z-table.types';\nimport {\n shouldHeaderRender,\n getHeaderColSpan,\n getFooterColSpan,\n findColumnConfig,\n getBodyColSpan,\n shouldBodyCellRenderColSpan,\n shouldFooterRender,\n} from '../z-table.util';\n\n@Pipe({\n name: 'zTablePinningStyles',\n standalone: true,\n pure: false,\n})\n/**\n * EN: Calculates sticky pinning style offsets for header, body, and footer cells, including colSpan cases.\n * VI: Tính toán offset sticky pinning cho header, body và footer, bao gồm các trường hợp có colSpan.\n */\nexport class ZTablePinningStylesPipe implements PipeTransform {\n /**\n * Main transform method - routes to appropriate calculation based on type\n *\n * @param column - The column being styled\n * @param item - The cell or header item\n * @param type - 'header' | 'body' | 'footer'\n * @param tableOrCells - Table instance or array of cells\n * @param columns - Column configuration array\n * @param _sizingTrigger - Optional sizing trigger to force recalculation on resize\n * @returns CSS style object for sticky positioning\n */\n transform<T>(\n column: Column<T, unknown>,\n item: Cell<T, unknown> | Header<T, unknown> | null,\n type: 'header' | 'body' | 'footer',\n tableOrCells?: Table<T> | Cell<T, unknown>[],\n columns?: ZTableColumnConfig<T>[],\n _sizingTrigger?: unknown\n ): Record<string, string | number | undefined> {\n if (type === 'body') {\n const allCells = Array.isArray(tableOrCells) ? tableOrCells : undefined;\n return this._getBodyPinningStyles(column, item as Cell<T, unknown>, allCells, columns || []);\n }\n\n if (type === 'footer' && item && tableOrCells && !Array.isArray(tableOrCells)) {\n return this._getFooterPinningStyles(column, item as Header<T, unknown>, tableOrCells, columns || []);\n }\n\n if (type === 'header' && item && tableOrCells && !Array.isArray(tableOrCells)) {\n return this._getHeaderPinningStyles(column, item as Header<T, unknown>, tableOrCells, columns || []);\n }\n\n return {};\n }\n\n private _getBodyPinningStyles<T>(\n column: Column<T, unknown>,\n cell: Cell<T, unknown> | null,\n allCells: Cell<T, unknown>[] | undefined,\n columns: ZTableColumnConfig<T>[]\n ): ZPinningStyles {\n const isPinned = column.getIsPinned();\n let leftOffset = column.getStart('left');\n let rightOffset = column.getAfter('right');\n\n if (allCells && cell && isPinned === 'left') {\n leftOffset = this._calculateBodyLeftOffset(cell, allCells, columns);\n }\n\n if (allCells && cell && isPinned === 'right') {\n rightOffset = this._calculateBodyRightOffset(cell, allCells, columns);\n }\n\n return this._buildPinningResult(isPinned, leftOffset, rightOffset);\n }\n\n /**\n * Calculates left offset for a body cell considering colspan.\n * Sums widths of all cells before the current cell.\n */\n private _calculateBodyLeftOffset<T>(\n cell: Cell<T, unknown>,\n allCells: Cell<T, unknown>[],\n columns: ZTableColumnConfig<T>[]\n ): number {\n const currentIdx = allCells.findIndex(c => c.id === cell.id);\n if (currentIdx <= 0) {\n return 0;\n }\n\n let calculatedOffset = 0;\n for (let i = 0; i < currentIdx; i++) {\n const prevCell = allCells[i];\n // Skip cells that are covered by colspan from previous cells\n if (!shouldBodyCellRenderColSpan(prevCell, allCells, columns)) {\n continue;\n }\n\n calculatedOffset += this._getCellWidthWithColspan(prevCell, allCells, i, columns);\n }\n\n return calculatedOffset;\n }\n\n /**\n * Calculates right offset for a body cell considering colspan.\n * Sums widths of all cells after the current cell.\n */\n private _calculateBodyRightOffset<T>(\n cell: Cell<T, unknown>,\n allCells: Cell<T, unknown>[],\n columns: ZTableColumnConfig<T>[]\n ): number {\n const currentIdx = allCells.findIndex(c => c.id === cell.id);\n // Last cell has 0 right offset\n if (currentIdx === allCells.length - 1) {\n return 0;\n }\n\n if (currentIdx < 0) {\n return 0;\n }\n\n let calculatedOffset = 0;\n for (let i = currentIdx + 1; i < allCells.length; i++) {\n const nextCell = allCells[i];\n\n // Skip cells that are covered by colspan\n if (!shouldBodyCellRenderColSpan(nextCell, allCells, columns)) {\n continue;\n }\n\n calculatedOffset += this._getCellWidthWithColspan(nextCell, allCells, i, columns);\n }\n\n return calculatedOffset;\n }\n\n /**\n * Gets cell width including any colspan expansion.\n * If cell has colspan > 1, adds widths of covered cells.\n */\n private _getCellWidthWithColspan<T>(\n cell: Cell<T, unknown>,\n allCells: Cell<T, unknown>[],\n cellIndex: number,\n columns: ZTableColumnConfig<T>[]\n ): number {\n const config = findColumnConfig(cell.column.id, columns);\n const colSpan = getBodyColSpan(config, cell.getContext());\n\n if (colSpan && colSpan > 1) {\n let spanWidth = cell.column.getSize();\n for (let j = 1; j < colSpan && cellIndex + j < allCells.length; j++) {\n spanWidth += allCells[cellIndex + j].column.getSize();\n }\n return spanWidth;\n }\n\n return cell.column.getSize();\n }\n\n private _getHeaderPinningStyles<T>(\n column: Column<T, unknown>,\n headerCurrent: Header<T, unknown>,\n table: Table<T>,\n columns: ZTableColumnConfig<T>[]\n ): ZPinningStyles {\n const isPinnedColumn = column.getIsPinned();\n if (!isPinnedColumn) {\n return this._buildPinningResult(undefined, 0, 0);\n }\n\n const isChildPinned = this._determineChildPinDirection(column, headerCurrent);\n const headerGroups = headerCurrent.headerGroup.headers;\n\n let leftOffset: number | undefined;\n let rightOffset: number | undefined;\n\n if (isChildPinned === 'left') {\n leftOffset = this._calculateHeaderLeftOffset(headerCurrent, headerGroups, columns);\n }\n\n if (isChildPinned === 'right') {\n rightOffset = this._calculateHeaderRightOffset(headerCurrent, headerGroups, columns);\n }\n\n return {\n position: isChildPinned ? 'sticky' : 'relative',\n zIndex: isChildPinned ? 1 : 0,\n left: leftOffset !== undefined ? `${leftOffset}px` : undefined,\n right: rightOffset !== undefined ? `${rightOffset}px` : undefined,\n };\n }\n\n /**\n * Determines if any child header is pinned and returns the direction.\n * Checks leaf headers to find pinning status.\n */\n private _determineChildPinDirection<T>(\n column: Column<T, unknown>,\n header: Header<T, unknown>\n ): 'left' | 'right' | undefined {\n const isPinnedColumn = column.getIsPinned();\n const leafHeaders = header.getLeafHeaders();\n const filterChild = leafHeaders.filter(h => h.column.id !== column.id);\n\n // No children - use column's own pin status\n if (filterChild.length === 0) {\n return isPinnedColumn || undefined;\n }\n\n // Check if any child is pinned\n for (const child of filterChild) {\n const isPinned = child.column.getIsPinned();\n if (isPinned) {\n return isPinned;\n }\n }\n\n return undefined;\n }\n\n /**\n * Calculates left offset for a header cell.\n * Sums widths of all left-pinned headers before current header.\n */\n private _calculateHeaderLeftOffset<T>(\n headerCurrent: Header<T, unknown>,\n headerGroups: Header<T, unknown>[],\n columns: ZTableColumnConfig<T>[]\n ): number {\n const headersBeforeCurrent = this._getLeftPinnedHeadersBefore(headerCurrent, headerGroups);\n\n return headersBeforeCurrent.reduce((sum, h) => {\n if (!shouldHeaderRender(h, headerGroups, columns)) {\n return sum;\n }\n return sum + this._getHeaderWidthWithColspan(h, headerGroups, columns, 'header');\n }, 0);\n }\n\n /**\n * Calculates right offset for a header cell.\n * Sums widths of all right-pinned headers after current header.\n */\n private _calculateHeaderRightOffset<T>(\n headerCurrent: Header<T, unknown>,\n headerGroups: Header<T, unknown>[],\n columns: ZTableColumnConfig<T>[]\n ): number {\n const headersAfterCurrent = this._getRightPinnedHeadersAfter(headerCurrent, headerGroups);\n\n return headersAfterCurrent.reduce((sum, h) => {\n if (!shouldHeaderRender(h, headerGroups, columns)) {\n return sum;\n }\n return sum + this._getHeaderWidthWithColspan(h, headerGroups, columns, 'header');\n }, 0);\n }\n\n /**\n * Gets all left-pinned headers that appear before the current header.\n */\n private _getLeftPinnedHeadersBefore<T>(\n headerCurrent: Header<T, unknown>,\n headerGroups: Header<T, unknown>[]\n ): Header<T, unknown>[] {\n const result: Header<T, unknown>[] = [];\n const indexOfHeader = headerGroups.findIndex(h => h.id === headerCurrent.id);\n\n for (let i = 0; i < indexOfHeader; i++) {\n const leafs = headerGroups[i].getLeafHeaders();\n const hasLeftPinned = leafs.some(lh => lh.column.getIsPinned() === 'left');\n if (hasLeftPinned) {\n result.push(headerGroups[i]);\n }\n }\n\n return result;\n }\n\n /**\n * Gets all headers that appear after the current header (for right pinning).\n */\n private _getRightPinnedHeadersAfter<T>(\n headerCurrent: Header<T, unknown>,\n headerGroups: Header<T, unknown>[]\n ): Header<T, unknown>[] {\n const result: Header<T, unknown>[] = [];\n const reversed = [...headerGroups].reverse();\n const indexOfHeader = reversed.findIndex(h => h.id === headerCurrent.id);\n\n for (let i = 0; i < indexOfHeader; i++) {\n result.push(reversed[i]);\n }\n\n return result;\n }\n\n private _getFooterPinningStyles<T>(\n column: Column<T, unknown>,\n footerCurrent: Header<T, unknown>,\n table: Table<T>,\n columns: ZTableColumnConfig<T>[]\n ): ZPinningStyles {\n const isPinnedColumn = column.getIsPinned();\n if (!isPinnedColumn) {\n return this._buildPinningResult(undefined, 0, 0);\n }\n\n const isChildPinned = this._determineChildPinDirection(column, footerCurrent);\n const footerHeaders = footerCurrent.headerGroup.headers;\n\n let leftOffset: number | undefined;\n let rightOffset: number | undefined;\n\n if (isChildPinned === 'left') {\n leftOffset = this._calculateFooterLeftOffset(footerCurrent, footerHeaders, columns);\n }\n\n if (isChildPinned === 'right') {\n rightOffset = this._calculateFooterRightOffset(footerCurrent, footerHeaders, columns);\n }\n\n return {\n position: isChildPinned ? 'sticky' : 'relative',\n zIndex: isChildPinned ? 1 : 0,\n left: leftOffset !== undefined ? `${leftOffset}px` : undefined,\n right: rightOffset !== undefined ? `${rightOffset}px` : undefined,\n };\n }\n\n /**\n * Calculates left offset for a footer cell.\n * Sums widths of all left-pinned footers before current footer.\n */\n private _calculateFooterLeftOffset<T>(\n footerCurrent: Header<T, unknown>,\n footerHeaders: Header<T, unknown>[],\n columns: ZTableColumnConfig<T>[]\n ): number {\n const footersBeforeCurrent = this._getLeftPinnedHeadersBefore(footerCurrent, footerHeaders);\n\n return footersBeforeCurrent.reduce((sum, h) => {\n if (!shouldFooterRender(h, footerHeaders, columns)) {\n return sum;\n }\n return sum + this._getHeaderWidthWithColspan(h, footerHeaders, columns, 'footer');\n }, 0);\n }\n\n /**\n * Calculates right offset for a footer cell.\n * Handles colspan coverage to exclude covered cells from calculation.\n */\n private _calculateFooterRightOffset<T>(\n footerCurrent: Header<T, unknown>,\n footerHeaders: Header<T, unknown>[],\n columns: ZTableColumnConfig<T>[]\n ): number {\n const footersAfterCurrent = this._getRightPinnedHeadersAfter(footerCurrent, footerHeaders);\n // Check if current footer has colspan\n const currentConfig = findColumnConfig(footerCurrent.column.id, columns);\n const currentColSpan = getFooterColSpan(currentConfig);\n\n if (currentColSpan && currentColSpan > 1) {\n return this._calculateRightOffsetWithColspan(\n footerCurrent,\n footerHeaders,\n footersAfterCurrent,\n currentColSpan,\n columns\n );\n }\n\n // No colspan - sum all footers after\n return footersAfterCurrent.reduce((sum, h) => {\n if (!shouldFooterRender(h, footerHeaders, columns)) {\n return sum;\n }\n return sum + this._getHeaderWidthWithColspan(h, footerHeaders, columns, 'footer');\n }, 0);\n }\n\n /**\n * Calculates right offset when current footer has colspan.\n * Excludes cells that are covered by the colspan.\n */\n private _calculateRightOffsetWithColspan<T>(\n footerCurrent: Header<T, unknown>,\n footerHeaders: Header<T, unknown>[],\n footersAfterCurrent: Header<T, unknown>[],\n colSpan: number,\n columns: ZTableColumnConfig<T>[]\n ): number {\n const currentIdx = footerHeaders.findIndex(h => h.id === footerCurrent.id);\n const coveredCount = Math.min(colSpan - 1, footerHeaders.length - currentIdx - 1);\n\n // Build set of covered column IDs\n const coveredColumnIds = new Set<string>();\n for (let j = 1; j <= coveredCount && currentIdx + j < footerHeaders.length; j++) {\n coveredColumnIds.add(footerHeaders[currentIdx + j].id);\n }\n\n // Only sum uncovered footers\n const uncoveredFooters = footersAfterCurrent.filter(h => !coveredColumnIds.has(h.id));\n\n return uncoveredFooters.reduce((sum, h) => {\n if (!shouldFooterRender(h, footerHeaders, columns)) {\n return sum;\n }\n return sum + h.column.getSize();\n }, 0);\n }\n\n private _getHeaderWidthWithColspan<T>(\n header: Header<T, unknown>,\n allHeaders: Header<T, unknown>[],\n columns: ZTableColumnConfig<T>[],\n type: 'header' | 'footer'\n ): number {\n const getColSpan = type === 'header' ? getHeaderColSpan : getFooterColSpan;\n const shouldRender = type === 'header' ? shouldHeaderRender : shouldFooterRender;\n if (header.subHeaders.length > 0) {\n const pinDirection = type === 'header' ? 'left' : 'right';\n return header.subHeaders\n .filter(subH => subH.column.getIsPinned() === pinDirection || subH.column.getIsPinned())\n .filter(subH => shouldRender(subH, header.subHeaders, columns))\n .reduce((subAcc, subH) => subAcc + this._getSingleHeaderWidth(subH, header.subHeaders, columns, getColSpan), 0);\n }\n\n return this._getSingleHeaderWidth(header, allHeaders, columns, getColSpan);\n }\n\n /**\n * Gets width of a single header considering its colspan.\n */\n private _getSingleHeaderWidth<T>(\n header: Header<T, unknown>,\n allHeaders: Header<T, unknown>[],\n columns: ZTableColumnConfig<T>[],\n getColSpanFn: (config: ZTableColumnConfig<T> | undefined) => number | undefined\n ): number {\n const config = findColumnConfig(header.column.id, columns);\n const colSpan = getColSpanFn(config);\n\n if (colSpan && colSpan > 1) {\n const currentIdx = allHeaders.findIndex(h => h.id === header.id);\n let totalWidth = header.column.getSize();\n\n for (let j = 1; j < colSpan && currentIdx + j < allHeaders.length; j++) {\n totalWidth += allHeaders[currentIdx + j].column.getSize();\n }\n\n return totalWidth;\n }\n\n return header.column.getSize();\n }\n\n /**\n * Builds the final pinning styles result object.\n */\n private _buildPinningResult(\n isPinned: 'left' | 'right' | false | undefined,\n leftOffset: number,\n rightOffset: number\n ): ZPinningStyles {\n return {\n left: isPinned === 'left' ? `${leftOffset}px` : undefined,\n right: isPinned === 'right' ? `${rightOffset}px` : undefined,\n position: isPinned ? 'sticky' : 'relative',\n zIndex: isPinned ? 1 : 0,\n };\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { Row, Table } from '@tanstack/angular-table';\n\n@Pipe({\n name: 'zTableRow',\n standalone: true,\n pure: true,\n})\n/**\n * EN: Provides row-level pin metadata and sticky style offsets for top/bottom pinned rows.\n * VI: Cung cấp metadata pin theo row và offset style sticky cho các row pin top/bottom.\n */\nexport class ZTableRowPipe implements PipeTransform {\n transform<T>(row: Row<T>, table: Table<T>, property: 'isLastTopPinned' | 'isFirstBottomPinned'): boolean;\n transform<T>(\n row: Row<T>,\n table: Table<T>,\n property: 'pinningStyles',\n rowHeights: Record<string, number>,\n virtualRowHeight?: number\n ): Record<string, string | number>;\n transform<T>(\n row: Row<T>,\n table: Table<T>,\n property: 'isLastTopPinned' | 'isFirstBottomPinned' | 'pinningStyles',\n rowHeights?: Record<string, number>,\n virtualRowHeight?: number\n ): boolean | Record<string, string | number> {\n switch (property) {\n case 'isLastTopPinned':\n return this._isLastTopPinnedRow(row, table);\n\n case 'isFirstBottomPinned':\n return this._isFirstBottomPinnedRow(row, table);\n\n case 'pinningStyles':\n return this._getRowPinningStyles(row, table, rowHeights ?? {}, virtualRowHeight ?? 40);\n\n default:\n return false;\n }\n }\n\n private _isLastTopPinnedRow<T>(row: Row<T>, table: Table<T>): boolean {\n const topRows = table.getTopRows();\n if (topRows.length === 0) {\n return false;\n }\n return row.getPinnedIndex() === topRows.length - 1;\n }\n\n private _isFirstBottomPinnedRow<T>(row: Row<T>, table: Table<T>): boolean {\n const bottomRows = table.getBottomRows();\n if (bottomRows.length === 0) {\n return false;\n }\n return row.getPinnedIndex() === bottomRows.length - 1;\n }\n\n private _getRowPinningStyles<T>(\n row: Row<T>,\n table: Table<T>,\n rowHeights: Record<string, number>,\n virtualRowHeight: number\n ): Record<string, string | number> {\n const pinned = row.getIsPinned();\n if (!pinned) {\n return {};\n }\n\n const pinnedIndex = row.getPinnedIndex();\n const defaultHeight = virtualRowHeight + 2;\n\n if (pinned === 'top') {\n let offset = 0;\n const topRows = table.getTopRows();\n for (let i = 0; i < pinnedIndex; i++) {\n offset += rowHeights[topRows[i].id] ?? defaultHeight;\n }\n\n return { position: 'sticky', top: `${offset}px`, zIndex: 2 };\n }\n\n if (pinned === 'bottom') {\n let offset = 0;\n const bottomRows = table.getBottomRows();\n for (let i = 0; i < pinnedIndex; i++) {\n offset += rowHeights[bottomRows[i].id] ?? defaultHeight;\n }\n\n return { position: 'sticky', bottom: `${offset}px`, zIndex: 2 };\n }\n\n return {};\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { Cell, Header, Row } from '@tanstack/angular-table';\nimport type { ZTableColumnConfig } from '../z-table.types';\nimport {\n findColumnConfig,\n calculateCellRowSpan,\n calculateCellColSpan,\n calculateHeaderRowSpan,\n calculateHeaderColSpan,\n calculateFooterRowSpan,\n calculateFooterColSpan,\n shouldCellRenderUtil,\n} from '../z-table.util';\n\n@Pipe({\n name: 'zTableSpan',\n standalone: true,\n pure: true,\n})\n/**\n * EN: Computes rowSpan/colSpan and render visibility for body, header, and footer table cells.\n * VI: Tính rowSpan/colSpan và khả năng render cho cell body, header và footer của bảng.\n */\nexport class ZTableSpanPipe implements PipeTransform {\n transform<T>(\n item: Cell<T, unknown> | Header<T, unknown>,\n columns: ZTableColumnConfig<T>[],\n property: 'cellRowSpan' | 'cellColSpan' | 'headerRowSpan' | 'headerColSpan' | 'footerRowSpan' | 'footerColSpan',\n allRows?: Row<T>[]\n ): number | null;\n transform<T>(\n item: Cell<T, unknown>,\n columns: ZTableColumnConfig<T>[],\n property: 'shouldRender',\n allRows?: Row<T>[]\n ): boolean;\n transform<T>(\n item: Cell<T, unknown> | Header<T, unknown>,\n columns: ZTableColumnConfig<T>[],\n property:\n | 'cellRowSpan'\n | 'cellColSpan'\n | 'headerRowSpan'\n | 'headerColSpan'\n | 'footerRowSpan'\n | 'footerColSpan'\n | 'shouldRender',\n allRows?: Row<T>[]\n ): number | null | boolean {\n const columnConfig = findColumnConfig(item.column.id, columns);\n\n switch (property) {\n case 'cellRowSpan':\n return calculateCellRowSpan(item as Cell<T, unknown>, columnConfig, allRows ?? []);\n\n case 'cellColSpan':\n return calculateCellColSpan(item as Cell<T, unknown>, columnConfig);\n\n case 'headerRowSpan':\n return calculateHeaderRowSpan(item as Header<T, unknown>, columnConfig, columns);\n\n case 'headerColSpan':\n return calculateHeaderColSpan(item as Header<T, unknown>, columnConfig);\n\n case 'footerRowSpan':\n return calculateFooterRowSpan(item as Header<T, unknown>, columnConfig);\n\n case 'footerColSpan':\n return calculateFooterColSpan(item as Header<T, unknown>, columnConfig);\n\n case 'shouldRender':\n return shouldCellRenderUtil(item as Cell<T, unknown>, columnConfig, allRows ?? []);\n\n default:\n return null;\n }\n }\n}\n","import { Pipe, PipeTransform, TemplateRef } from '@angular/core';\n\n@Pipe({\n name: 'zTableIsTemplateRef',\n standalone: true,\n pure: true,\n})\n/**\n * EN: Type guard pipe that checks if a value is an Angular TemplateRef.\n * VI: Pipe type guard để kiểm tra giá trị có phải là Angular TemplateRef hay không.\n */\nexport class ZTableIsTemplateRefPipe implements PipeTransform {\n transform(value: unknown): value is TemplateRef<unknown> {\n return value instanceof TemplateRef;\n }\n}\n","/* eslint-disable @stylistic/indent */\nimport {\n CdkDrag,\n CdkDragEnd,\n CdkDragPlaceholder,\n CdkDragPreview,\n CdkDropList,\n type CdkDragDrop,\n moveItemInArray,\n} from '@angular/cdk/drag-drop';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { NgClass, NgStyle, NgTemplateOutlet } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n input,\n output,\n signal,\n TemplateRef,\n untracked,\n viewChild,\n viewChildren,\n afterNextRender,\n} from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { injectVirtualizer } from '@shival99/angular-virtual';\nimport { ZButtonComponent } from '@shival99/z-ui/components/z-button';\nimport { ZCheckboxComponent } from '@shival99/z-ui/components/z-checkbox';\nimport { ZDrawerComponent } from '@shival99/z-ui/components/z-drawer';\nimport { ZEmptyComponent } from '@shival99/z-ui/components/z-empty';\nimport { ZIconComponent } from '@shival99/z-ui/components/z-icon';\nimport { ZInputComponent } from '@shival99/z-ui/components/z-input';\nimport { ZLoadingComponent } from '@shival99/z-ui/components/z-loading';\nimport { ZPaginationComponent } from '@shival99/z-ui/components/z-pagination';\nimport { ZPopoverDirective } from '@shival99/z-ui/components/z-popover';\nimport { ZSkeletonComponent } from '@shival99/z-ui/components/z-skeleton';\nimport { ZTooltipDirective } from '@shival99/z-ui/components/z-tooltip';\nimport { ZFormatNumPipe, ZSafeHtmlPipe } from '@shival99/z-ui/pipes';\nimport { ZCacheService, ZTranslateService } from '@shival99/z-ui/services';\nimport { zMergeClasses } from '@shival99/z-ui/utils';\nimport {\n type Column,\n ColumnDef,\n ColumnFiltersState,\n ColumnOrderState,\n ColumnPinningState,\n createAngularTable,\n ExpandedState,\n FlexRenderDirective,\n getCoreRowModel,\n getExpandedRowModel,\n getFacetedMinMaxValues,\n getFacetedRowModel,\n getFacetedUniqueValues,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n PaginationState,\n Row,\n RowPinningState,\n RowSelectionState,\n SortingState,\n VisibilityState,\n} from '@tanstack/angular-table';\nimport { ClassValue } from 'clsx';\nimport { NgScrollbar } from 'ngx-scrollbar';\nimport { explicitEffect } from 'ngxtension/explicit-effect';\nimport { injectDestroy } from 'ngxtension/inject-destroy';\nimport { ZTableActionsComponent } from './components/z-table-actions.component';\nimport { ZTableEditCellComponent } from './components/z-table-edit-cell.component';\nimport { ZTableFilterComponent } from './components/z-table-filter.component';\nimport { ZTableIconTextComponent } from './components/z-table-icon-text.component';\nimport { ZTableResizeDirective, ZTableRowHoverDirective } from './directives';\nimport {\n ZTableCellBottomPipe,\n ZTableCellClickablePipe,\n ZTableCellConfigPipe,\n ZTableCellEditPipe,\n ZTableCellOffsetPipe,\n ZTableCellPinPipe,\n ZTableCellVisiblePipe,\n ZTableColumnConfigPipe,\n ZTableColumnParentsPipe,\n ZTableFooterContentPipe,\n ZTablePinningStylesPipe,\n ZTableRowPipe,\n ZTableSpanPipe,\n ZTableIsTemplateRefPipe,\n ZTableHasIconPipe,\n ZTableColumnHeaderPipe,\n} from './pipes';\nimport { ZTableCellRenderPipe } from './pipes/z-table-cell-render.pipe';\nimport {\n Z_DEFAULT_DEBOUNCE_TIME,\n Z_DEFAULT_COLUMN_VIRTUAL_OVERSCAN,\n Z_DEFAULT_GROUP_SIZE,\n Z_DEFAULT_ROW_HEIGHT,\n Z_DEFAULT_VIRTUAL_OVERSCAN,\n Z_SKELETON_ROW_HEIGHT,\n Z_TABLE_DEFAULT_ACTION_BUTTON_WIDTH,\n ZTableActionClickEvent,\n ZTableActionColumnConfig,\n ZTableChangeEvent,\n ZTableColumnConfig,\n ZTableConfig,\n ZTableControl,\n ZTableEditCellChangeEvent,\n ZTableRowDragEvent,\n ZTableSavedColumnInfo,\n ZTableSavedConfig,\n ZTableVirtualConfig,\n ZTableVirtualColumnConfig,\n ZVirtualGroup,\n} from './z-table.types';\nimport {\n columnConfigToColumnDef,\n isBodyConfig,\n getBodyRowSpan,\n getHeaderColSpan,\n filterVisibleColumns,\n pickDefined,\n} from './z-table.util';\n\n@Component({\n selector: 'z-table',\n imports: [\n NgClass,\n NgStyle,\n NgTemplateOutlet,\n ScrollingModule,\n NgScrollbar,\n FlexRenderDirective,\n CdkDropList,\n CdkDrag,\n CdkDragPreview,\n CdkDragPlaceholder,\n ZCheckboxComponent,\n ZEmptyComponent,\n ZIconComponent,\n ZInputComponent,\n ZLoadingComponent,\n ZSkeletonComponent,\n ZDrawerComponent,\n ZPaginationComponent,\n ZTableFilterComponent,\n ZTableEditCellComponent,\n ZPopoverDirective,\n ZButtonComponent,\n ZTooltipDirective,\n ZTableResizeDirective,\n ZTableRowHoverDirective,\n ZTableIsTemplateRefPipe,\n ZTableHasIconPipe,\n ZTableCellBottomPipe,\n ZTableCellClickablePipe,\n ZTableCellConfigPipe,\n ZTableCellEditPipe,\n ZTableCellOffsetPipe,\n ZTableCellPinPipe,\n ZTableCellVisiblePipe,\n ZTableColumnConfigPipe,\n ZTableColumnHeaderPipe,\n ZTableColumnParentsPipe,\n ZTableFooterContentPipe,\n ZTablePinningStylesPipe,\n ZTableRowPipe,\n ZTableSpanPipe,\n ZTableCellRenderPipe,\n ZTableIconTextComponent,\n ZTableActionsComponent,\n ZFormatNumPipe,\n ZSafeHtmlPipe,\n TranslatePipe,\n ],\n standalone: true,\n templateUrl: './z-table.component.html',\n styleUrl: './z-table.component.scss',\n providers: [TranslatePipe],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'z-table block relative py-1',\n },\n exportAs: 'zTable',\n})\n/**\n * Z-Table Component\n *\n * Feature-rich data table built on @tanstack/angular-table. Supports:\n * - Local and server-side sorting, filtering, and pagination\n * - Virtual scrolling with rowSpan-aware grouping\n * - Column pinning (left/right) with scroll shadow indicators\n * - Column resizing, reordering, and visibility toggling\n * - Inline cell editing (text, number, select, date, etc.)\n * - Row selection (single/multi with sub-row support)\n * - Row expansion with custom templates\n * - Row pinning (top/bottom)\n * - Action buttons column with overflow dropdown\n * - Settings drawer for column management\n * - Persistent settings via ZCacheService (keyed by zKey)\n * - Skeleton loading placeholder\n * - Search bar with debounce\n *\n * Architecture notes:\n * - All template computations use pipes (OnPush compliance, no method calls in templates)\n * - Scroll sync between thead/tbody/tfoot is manual (independent scrollable containers)\n * - Virtual scrolling groups rows to handle rowSpan correctly\n * - Each column's sort/filter can independently be 'local' or 'server' mode\n */\nexport class ZTableComponent<T> implements AfterViewInit {\n // ─── Outputs ──────────────────────────────────────────────────────────────\n\n /** Unified change event — parent listens to this for all table interactions */\n public readonly zChange = output<ZTableChangeEvent<T>>();\n /** Emits an imperative control handle for programmatic table manipulation */\n public readonly zControl = output<ZTableControl<T>>();\n\n // ─── Inputs ───────────────────────────────────────────────────────────────\n\n /** Extra CSS classes merged onto the table container */\n public readonly zClass = input<ClassValue>('');\n /** Main configuration — data, columns, mode, features */\n public readonly zConfig = input<ZTableConfig<T>>({ data: [], columns: [], mode: 'local' });\n /** External loading state (complementary to config.loading) */\n public readonly zLoading = input(false);\n /** Cache key for persisting column settings; no persistence when empty */\n public readonly zKey = input<string>('');\n /** Visual variant: 'default' has card shadow, 'borderless' has no container border */\n public readonly zVariant = input<'default' | 'borderless'>('default');\n\n // ─── Private State ────────────────────────────────────────────────────────\n\n private readonly _destroy$ = injectDestroy();\n private readonly _zTranslate = inject(ZTranslateService);\n\n /** Prevents recursive scroll sync between thead/tbody/tfoot */\n private readonly _isSyncingScroll = signal(false);\n /** Preserves horizontal scroll position across loading states */\n private readonly _savedScrollLeft = signal(0);\n /** Observes tbody container height changes for skeleton row count calculation */\n private _resizeObserver: ResizeObserver | null = null;\n /** Debounces rapid settings changes (visibility/pin toggles) */\n private _settingsDebounceTimeout: ReturnType<typeof setTimeout> | null = null;\n /** Debounces filter change emissions to server */\n private _filterEmitDebounceTimeout: ReturnType<typeof setTimeout> | null = null;\n\n // ─── Template-bound State ─────────────────────────────────────────────────\n\n /** Merged loading state from both zLoading input and config.loading */\n protected readonly isLoading = computed(() => this.zConfig().loading ?? this.zLoading());\n /** True during debounced async state transitions (sort/filter processing) */\n protected readonly isProcessing = signal(false);\n protected readonly isDraggingRow = signal(false);\n protected readonly theadWrapper = viewChild<ElementRef<HTMLDivElement>>('theadWrapper');\n protected readonly tbodyContainer = viewChild<ElementRef<HTMLDivElement>>('tbodyContainer');\n protected readonly tbodyWrapper = viewChild<ElementRef<HTMLDivElement>>('tbodyWrapper');\n protected readonly tbodyScrollbar = viewChild<NgScrollbar>('tbodyWrapper');\n protected readonly tfootWrapper = viewChild<ElementRef<HTMLDivElement>>('tfootWrapper');\n protected readonly expandedRowTemplate = viewChild<TemplateRef<unknown>>('expandedRowTemplate');\n protected readonly virtualRowElements = viewChildren<ElementRef<HTMLDivElement>>('virtualRow');\n\n // ─── TanStack Table State Signals ─────────────────────────────────────────\n // These signals are the source of truth for table state. They are passed into\n // createAngularTable() and updated via the on*Change callbacks.\n\n protected readonly columnPinning = signal<ColumnPinningState>({ left: [], right: [] });\n protected readonly columnVisibility = signal<VisibilityState>({});\n protected readonly columnOrder = signal<ColumnOrderState>([]);\n protected readonly expanded = signal<ExpandedState>({});\n protected readonly rowSelection = signal<RowSelectionState>({});\n protected readonly rowPinning = signal<RowPinningState>({ top: [], bottom: [] });\n protected readonly columnFilters = signal<ColumnFiltersState>([]);\n protected readonly globalFilter = signal<string>('');\n /** Note: pageIndex is 1-based here; converted to 0-based for TanStack via _tanstackPagination */\n protected readonly pagination = signal<PaginationState>({ pageIndex: 1, pageSize: 10 });\n protected readonly sorting = signal<SortingState>([]);\n /**\n * Caches the last server-provided total to avoid flickering to 0\n * during loading transitions in server-side pagination mode.\n */\n private readonly _serverPaginationTotal = signal(0);\n\n /** Container CSS classes combining variant + user-provided classes */\n protected readonly classTable = computed(() =>\n zMergeClasses(\n 'z-table-container',\n this.zVariant() === 'default' ? 'shadow-card' : 'z-table-borderless',\n this.zClass()\n )\n );\n\n /** Convert 1-based pagination to TanStack's 0-based pageIndex */\n private readonly _tanstackPagination = computed(() => ({\n ...this.pagination(),\n pageIndex: Math.max(0, this.pagination().pageIndex - 1),\n }));\n\n private readonly _configPagination = computed(() => {\n const config = this.zConfig();\n if (config.mode === 'server' && config.initialState?.pagination) {\n return config.initialState.pagination;\n }\n return null;\n });\n\n protected readonly paginationTotal = computed(() => {\n const config = this.zConfig();\n if (config.mode === 'server') {\n const serverTotal = config.totalCount ?? config.totalRows;\n if (typeof serverTotal === 'number') {\n if (serverTotal > 0 || !this.isLoading()) {\n return serverTotal;\n }\n }\n\n const cachedServerTotal = this._serverPaginationTotal();\n if (cachedServerTotal > 0) {\n return cachedServerTotal;\n }\n\n return serverTotal ?? 0;\n }\n\n return this.table.getFilteredRowModel().rows.length;\n });\n\n // ─── Scroll & Border State ────────────────────────────────────────────────\n\n protected readonly hasVerticalScroll = signal(false);\n protected readonly hasHorizontalScroll = signal(false);\n /** True when the last row touches or extends past the container bottom (no gap) */\n protected readonly lastRowTouchesBottom = signal(true);\n protected readonly showSettingsDrawer = signal(false);\n protected readonly showHorizontalBorder = signal(true);\n protected readonly showVerticalBorder = signal(true);\n protected readonly showHeaderFooterShadow = signal(true);\n\n /** True when table body is scrolled away from left edge (shows left pin shadow) */\n protected readonly hasScrollLeft = signal(false);\n /** True when table has right-pinned columns and body isn't scrolled to the end */\n protected readonly hasScrollRight = signal(false);\n /** Maps row IDs to measured DOM heights for pinned row offset calculations */\n protected readonly pinnedRowHeights = signal<Record<string, number>>({});\n\n // ─── Internal Change Tracking ──────────────────────────────────────────────\n\n /** Bumped to force recomputation of pinned column IDs after programmatic pin changes */\n private readonly _columnPinVersion = signal(0);\n /** Bumped to trigger data refresh (e.g., after addItem/deleteItem via control API) */\n private readonly _dataForceUpdate = signal(0);\n /** Stores a temporary locally reordered dataset until parent pushes a new data reference */\n private readonly _rowDragDataOverride = signal<T[] | null>(null);\n /** Tracks the latest external data array reference to detect parent-driven refreshes */\n private _lastExternalDataRef: T[] | null = null;\n /** Set when a single row is updated via control API (for targeted re-render) */\n protected readonly _rowUpdate = signal<{ rowId: string; updates: Record<string, unknown> } | null>(null);\n\n /**\n * Column config lookup cache — cleared when column reference changes.\n * Avoids repeated recursive searches during render cycles.\n */\n private _columnConfigCache = new Map<string, ZTableColumnConfig<T> | undefined>();\n private _lastColumnsRef: ZTableColumnConfig<T>[] | null = null;\n\n protected readonly pinnedColumnIds = computed(() => {\n this._columnPinVersion();\n return this.columnOrder().filter(id => {\n if (id === 'expand' || id === 'select' || id === 'rowDrag') {\n return false;\n }\n\n const column = this.table.getColumn(id);\n return column && column.getIsPinned();\n });\n });\n\n protected readonly pendingVisibleColumns = signal<string[]>([]);\n protected readonly pendingColumnOrder = signal<string[]>([]);\n protected readonly pendingShowHeaderFooterShadow = signal(true);\n\n // ─── Feature Detection Computeds ──────────────────────────────────────────\n // These computed signals scan the column config tree to determine which\n // features are active, avoiding feature-gating at template render time.\n\n /** True if ANY body column uses rowSpan — affects virtual grouping and expand column behavior */\n protected readonly hasBodyRowSpan = computed(() => {\n const columns = this.zConfig().columns ?? [];\n const checkRowSpan = (col: ZTableColumnConfig<T>): boolean => {\n if (isBodyConfig(col.body) && col.body.rowSpan !== undefined) {\n return true;\n }\n\n if (col.columns?.length) {\n return col.columns.some(c => checkRowSpan(c));\n }\n\n return false;\n };\n\n return columns.some(c => checkRowSpan(c));\n });\n\n protected readonly hasSelectColumn = computed(() => {\n const columns = this.zConfig().columns ?? [];\n return columns.some(c => c.id === 'select');\n });\n\n protected readonly hasExpandColumn = computed(() => {\n const columns = this.zConfig().columns ?? [];\n return columns.some(c => c.id === 'expand');\n });\n\n protected readonly hasRowDragColumn = computed(() => !!this.zConfig().enableRowDragging);\n\n protected readonly canUseRowDrag = computed(() => {\n const config = this.zConfig();\n if (!config.enableRowDragging) {\n return false;\n }\n\n if (config.mode === 'server' || !!config.getSubRows) {\n return false;\n }\n\n const rowPinning = this.rowPinning();\n if ((rowPinning.top?.length ?? 0) > 0 || (rowPinning.bottom?.length ?? 0) > 0) {\n return false;\n }\n\n if (this.isLoading() || this.isProcessing()) {\n return false;\n }\n\n if (this.sorting().length > 0) {\n return false;\n }\n\n return true;\n });\n\n protected readonly isVirtualRowDragEnabled = computed(() => {\n if (!this.canUseRowDrag()) {\n return false;\n }\n\n if (!this.isVirtual()) {\n return false;\n }\n\n return !this.hasBodyRowSpan();\n });\n\n protected readonly isRowDragEnabled = computed(() => {\n if (!this.canUseRowDrag()) {\n return false;\n }\n\n return !this.hasBodyRowSpan();\n });\n\n protected readonly actionColumnInfo = computed<{\n columnId: string;\n config: ZTableActionColumnConfig<T>;\n width: number;\n } | null>(() => {\n const columns = this.zConfig().columns ?? [];\n\n const findActionColumn = (\n cols: ZTableColumnConfig<T>[]\n ): { columnId: string; config: ZTableActionColumnConfig<T> } | null => {\n for (const col of cols) {\n if (isBodyConfig(col.body) && col.body.actions && col.body.actions.actions?.length > 0) {\n return { columnId: col.id, config: col.body.actions };\n }\n if (col.columns?.length) {\n const found = findActionColumn(col.columns);\n if (found) {\n return found;\n }\n }\n }\n\n return null;\n };\n\n const actionCol = findActionColumn(columns);\n if (!actionCol) {\n return null;\n }\n\n const { config } = actionCol;\n const maxVisible = config.maxVisible ?? 3;\n let totalActions = maxVisible;\n if (typeof config.actions !== 'function') {\n totalActions = config.actions.filter(a => !a.hidden).length;\n }\n\n const visibleCount = Math.min(totalActions, maxVisible);\n const hasOverflow = totalActions > maxVisible;\n const buttonCount = hasOverflow ? visibleCount + 1 : visibleCount;\n const buttonWidth = Z_TABLE_DEFAULT_ACTION_BUTTON_WIDTH;\n const gap = 4;\n const padding = 16;\n const width = buttonCount * buttonWidth + (buttonCount - 1) * gap + padding;\n\n return {\n columnId: actionCol.columnId,\n config: actionCol.config,\n width,\n };\n });\n\n protected readonly hasActionColumn = computed(() => this.actionColumnInfo() !== null);\n protected readonly hasFiltering = computed(() => {\n const columns = this.zConfig().columns ?? [];\n const checkFilter = (col: ZTableColumnConfig<T>): boolean => {\n const filterConfig = typeof col.filter === 'boolean' ? { enabled: col.filter } : col.filter;\n if (filterConfig?.enabled) {\n return true;\n }\n\n if (col.columns?.length) {\n return col.columns.some(c => checkFilter(c));\n }\n\n return false;\n };\n return columns.some(c => checkFilter(c));\n });\n\n protected readonly hasLocalFiltering = computed(() => {\n const columns = this.zConfig().columns ?? [];\n const checkLocalFilter = (col: ZTableColumnConfig<T>): boolean => {\n const filterConfig = typeof col.filter === 'boolean' ? { enabled: col.filter } : col.filter;\n if (filterConfig?.enabled) {\n const filterMode = filterConfig.mode ?? 'local';\n if (filterMode === 'local') {\n return true;\n }\n }\n\n if (col.columns?.length) {\n return col.columns.some(c => checkLocalFilter(c));\n }\n\n return false;\n };\n return columns.some(c => checkLocalFilter(c));\n });\n\n protected readonly hasSorting = computed(() => {\n const config = this.zConfig();\n if (config.enableColumnSorting === false) {\n return false;\n }\n\n if (config.enableColumnSorting === true) {\n return true;\n }\n\n const columns = config.columns ?? [];\n const checkSorting = (col: ZTableColumnConfig<T>): boolean => {\n const sortConfig = typeof col.sort === 'boolean' ? { enabled: col.sort } : col.sort;\n if (sortConfig?.enabled) {\n return true;\n }\n\n if (col.columns?.length) {\n return col.columns.some(c => checkSorting(c));\n }\n\n return false;\n };\n return columns.some(c => checkSorting(c));\n });\n\n protected readonly hasLocalSorting = computed(() => {\n const config = this.zConfig();\n if (config.enableColumnSorting === false) {\n return false;\n }\n\n const columns = config.columns ?? [];\n const checkLocalSorting = (col: ZTableColumnConfig<T>): boolean => {\n const sortConfig = typeof col.sort === 'boolean' ? { enabled: col.sort } : col.sort;\n if (sortConfig?.enabled) {\n const sortMode = sortConfig.mode ?? 'local';\n if (sortMode === 'local') {\n return true;\n }\n }\n\n if (col.columns?.length) {\n return col.columns.some(c => checkLocalSorting(c));\n }\n\n return false;\n };\n return columns.some(c => checkLocalSorting(c));\n });\n\n protected readonly hasServerFiltering = computed(() => {\n const columns = this.zConfig().columns ?? [];\n const checkServerFilter = (col: ZTableColumnConfig<T>): boolean => {\n const filterConfig = typeof col.filter === 'boolean' ? { enabled: col.filter } : col.filter;\n if (filterConfig?.enabled) {\n const filterMode = filterConfig.mode ?? 'local';\n if (filterMode === 'server') {\n return true;\n }\n }\n\n if (col.columns?.length) {\n return col.columns.some(c => checkServerFilter(c));\n }\n\n return false;\n };\n return columns.some(c => checkServerFilter(c));\n });\n\n protected readonly hasServerSorting = computed(() => {\n const config = this.zConfig();\n if (config.enableColumnSorting === false) {\n return false;\n }\n\n const columns = config.columns ?? [];\n const checkServerSorting = (col: ZTableColumnConfig<T>): boolean => {\n const sortConfig = typeof col.sort === 'boolean' ? { enabled: col.sort } : col.sort;\n if (sortConfig?.enabled) {\n const sortMode = sortConfig.mode ?? 'local';\n if (sortMode === 'server') {\n return true;\n }\n }\n\n if (col.columns?.length) {\n return col.columns.some(c => checkServerSorting(c));\n }\n\n return false;\n };\n return columns.some(c => checkServerSorting(c));\n });\n\n protected readonly searchConfig = computed(() => {\n const { search } = this.zConfig();\n if (!search) {\n return null;\n }\n\n if (typeof search === 'boolean') {\n return search\n ? {\n enabled: true,\n placeholder: 'i18n_z_ui_table_search',\n debounceTime: 300,\n width: 'w-64',\n size: 'sm' as const,\n }\n : null;\n }\n\n return {\n enabled: search.enabled ?? true,\n placeholder: search.placeholder ?? 'i18n_z_ui_table_search',\n debounceTime: search.debounceTime ?? 300,\n width: search.width ?? 'w-64',\n size: search.size ?? ('sm' as const),\n };\n });\n\n protected readonly isSearchEnabled = computed(() => {\n const config = this.searchConfig();\n return config !== null && config.enabled;\n });\n\n // ─── Core TanStack Data Signals ───────────────────────────────────────────\n\n /** Data signal with force-update support for control API mutations */\n private readonly _data = computed(() => {\n this._dataForceUpdate();\n return this._rowDragDataOverride() ?? this.zConfig().data ?? [];\n });\n\n /**\n * Converts ZTableColumnConfig[] into TanStack ColumnDef[].\n * Handles special columns (select, expand, actionRowPin), action column sizing,\n * and rowSpan/expand compatibility (expand column is removed when rowSpan is used).\n */\n private readonly _columns = computed<ColumnDef<T>[]>(() => {\n let cols = this.zConfig().columns ?? [];\n cols = filterVisibleColumns(cols);\n if (this.hasBodyRowSpan()) {\n cols = cols.filter(c => c.id !== 'expand');\n }\n\n const hasExpandColumn = cols.some(c => c.id === 'expand');\n const hasSelectColumn = cols.some(c => c.id === 'select');\n const hasExplicitRowDragColumn = cols.some(c => c.id === 'rowDrag');\n const needsRowDragColumn = this.hasRowDragColumn() && !hasExplicitRowDragColumn;\n const needsRowPinActionsColumn =\n this.zConfig().enableRowPinning && !hasExpandColumn && !hasSelectColumn && !this.hasBodyRowSpan();\n\n if (needsRowDragColumn) {\n cols = [\n {\n id: 'rowDrag',\n header: '',\n cell: '',\n size: 44,\n minSize: 44,\n maxSize: 44,\n enableResizing: false,\n enableHiding: false,\n enableOrdering: false,\n enablePinning: false,\n } as ZTableColumnConfig<T>,\n ...cols,\n ];\n }\n\n if (needsRowPinActionsColumn) {\n cols = [\n {\n id: 'actionRowPin',\n header: '',\n cell: '',\n size: 30,\n minSize: 30,\n maxSize: 30,\n enableResizing: false,\n enableHiding: false,\n } as ZTableColumnConfig<T>,\n ...cols,\n ];\n }\n\n return cols.map(c => {\n const colDef = columnConfigToColumnDef(c);\n if (colDef.id === 'select') {\n colDef.size = 50;\n colDef.minSize = 50;\n colDef.maxSize = 50;\n colDef.enableResizing = false;\n }\n\n if (colDef.id === 'rowDrag' || colDef.id === 'expand' || colDef.id === 'actionRowPin') {\n colDef.size = 50;\n colDef.minSize = 50;\n colDef.maxSize = 50;\n colDef.enableResizing = false;\n }\n\n const actionInfo = this.actionColumnInfo();\n if (actionInfo && colDef.id === actionInfo.columnId) {\n const defaultWidth = actionInfo.width + 15;\n const width = c.size ?? c.minSize ?? c.maxSize ?? defaultWidth;\n\n colDef.size = width;\n colDef.minSize = width;\n colDef.maxSize = width;\n colDef.enableResizing = c.enableResizing ?? false;\n colDef.enableSorting = false;\n colDef.enablePinning = false;\n }\n\n return colDef;\n });\n });\n\n // ─── Virtual Scrolling ────────────────────────────────────────────────────\n\n protected readonly isVirtual = computed(() => {\n const { virtual } = this.zConfig();\n if (!virtual) {\n return false;\n }\n\n if (typeof virtual === 'boolean') {\n return virtual;\n }\n\n return virtual.enabled;\n });\n\n /** Normalized virtual config with defaults applied */\n private readonly _virtualConfig = computed<ZTableVirtualConfig>(() => {\n const { virtual } = this.zConfig();\n if (!virtual || typeof virtual === 'boolean') {\n return {\n enabled: !!virtual,\n size: Z_DEFAULT_ROW_HEIGHT,\n overscan: Z_DEFAULT_VIRTUAL_OVERSCAN,\n groupSize: Z_DEFAULT_GROUP_SIZE,\n dynamicSize: false,\n };\n }\n\n return {\n enabled: virtual.enabled,\n size: virtual.size ?? Z_DEFAULT_ROW_HEIGHT,\n overscan: virtual.overscan ?? Z_DEFAULT_VIRTUAL_OVERSCAN,\n groupSize: virtual.groupSize ?? Z_DEFAULT_GROUP_SIZE,\n dynamicSize: virtual.dynamicSize ?? false,\n initialOffset: virtual.initialOffset,\n scrollMargin: virtual.scrollMargin,\n gap: virtual.gap,\n isScrollingResetDelay: virtual.isScrollingResetDelay,\n useScrollendEvent: virtual.useScrollendEvent,\n getItemKey: virtual.getItemKey,\n rangeExtractor: virtual.rangeExtractor,\n };\n });\n\n protected readonly virtualRowHeight = computed(() => this._virtualConfig().size ?? Z_DEFAULT_ROW_HEIGHT);\n protected readonly dynamicSize = computed(() => this._virtualConfig().dynamicSize ?? false);\n\n private readonly _virtualColumnsConfig = computed<ZTableVirtualColumnConfig>(() => {\n const { virtualColumns } = this.zConfig();\n if (!virtualColumns || typeof virtualColumns === 'boolean') {\n return {\n enabled: !!virtualColumns,\n overscan: Z_DEFAULT_COLUMN_VIRTUAL_OVERSCAN,\n };\n }\n\n return {\n enabled: virtualColumns.enabled,\n overscan: virtualColumns.overscan ?? Z_DEFAULT_COLUMN_VIRTUAL_OVERSCAN,\n };\n });\n\n protected readonly groupSize = computed(() => {\n if (this.isVirtualRowDragEnabled()) {\n return 1;\n }\n\n return this._virtualConfig().groupSize ?? Z_DEFAULT_GROUP_SIZE;\n });\n\n protected readonly groupHeight = computed(() => this.groupSize() * this.virtualRowHeight());\n private readonly _dynamicGroupsVersion = signal(0);\n\n /**\n * Groups rows for virtual scrolling. When rowSpan is used, rows that share\n * a merged cell are grouped together so the virtualizer treats them as\n * a single unit, preserving the visual merge across scroll boundaries.\n */\n protected readonly dynamicGroups = computed<ZVirtualGroup[]>(() => {\n if (!this.isVirtual()) {\n return [];\n }\n\n this._dynamicGroupsVersion();\n const { rows } = this.table.getRowModel();\n const rowHeight = this.virtualRowHeight();\n const isDynamic = this.dynamicSize();\n\n if (!this.hasBodyRowSpan()) {\n const size = this.groupSize();\n const groups: ZVirtualGroup[] = [];\n const totalGroups = Math.ceil(rows.length / size);\n\n for (let j = 0; j < totalGroups; j++) {\n const startIndex = j * size;\n const endIndex = Math.min(startIndex + size - 1, rows.length - 1);\n const rowCount = endIndex - startIndex + 1;\n groups.push({\n startIndex,\n endIndex,\n rowCount,\n height: isDynamic ? null : rowCount * rowHeight,\n });\n }\n return groups;\n }\n\n const groups: ZVirtualGroup[] = [];\n let i = 0;\n\n while (i < rows.length) {\n const startIndex = i;\n let maxRowSpan = 1;\n const row = rows[i];\n const cells = row.getAllCells();\n\n for (const cell of cells) {\n const columnConfig = this._findColumnConfig(cell.column.id);\n const rowSpanValue = getBodyRowSpan(columnConfig, cell.getContext());\n if (rowSpanValue && rowSpanValue > maxRowSpan) {\n maxRowSpan = rowSpanValue;\n }\n }\n\n const groupRowCount = Math.max(1, maxRowSpan);\n const endIndex = Math.min(i + groupRowCount - 1, rows.length - 1);\n const rowCount = endIndex - startIndex + 1;\n groups.push({\n startIndex,\n endIndex,\n rowCount,\n height: isDynamic ? null : rowCount * rowHeight,\n });\n\n i = endIndex + 1;\n }\n\n return groups;\n });\n\n protected readonly hasFooter = computed(() => {\n const columns = this.zConfig().columns ?? [];\n const checkFooter = (col: (typeof columns)[0]): boolean => {\n if (col.footer) {\n return true;\n }\n\n if (col.columns?.length) {\n return col.columns.some(c => checkFooter(c as (typeof columns)[0]));\n }\n\n return false;\n };\n\n return columns.some(c => checkFooter(c));\n });\n\n protected readonly isEmpty = computed(() => this.table.getRowModel().rows.length === 0);\n protected readonly isEmptyData = computed(() => this._data().length === 0);\n protected readonly isNoSearchResults = computed(() => {\n const isServerMode = this.zConfig().mode === 'server';\n const hasActiveFilter = this.globalFilter().trim() !== '' || this.columnFilters().length > 0;\n const noFilteredResults = this.isEmpty();\n\n if (isServerMode) {\n const totalCount = this.zConfig().totalCount ?? 0;\n const hasPotentialData = totalCount > 0 || hasActiveFilter;\n return hasPotentialData && noFilteredResults && hasActiveFilter;\n }\n\n const hasSourceData = this._data().length > 0;\n return hasSourceData && noFilteredResults && hasActiveFilter;\n });\n\n protected readonly leftLeafColumns = computed(() => this.table.getLeftLeafColumns());\n protected readonly centerLeafColumns = computed(() => this.table.getCenterLeafColumns());\n protected readonly rightLeafColumns = computed(() => this.table.getRightLeafColumns());\n\n protected readonly hasComplexColumnLayout = computed(() => {\n const columns = this.zConfig().columns ?? [];\n const hasComplexConfig = (column: ZTableColumnConfig<T>): boolean => {\n if (column.columns?.length) {\n return true;\n }\n\n if (typeof column.header === 'object' && column.header !== null) {\n if ('rowSpan' in column.header || 'colSpan' in column.header) {\n return true;\n }\n }\n\n if (typeof column.body === 'object' && column.body !== null && isBodyConfig(column.body)) {\n if (column.body.rowSpan !== undefined || column.body.colSpan !== undefined) {\n return true;\n }\n }\n\n if (typeof column.footer === 'object' && column.footer !== null) {\n if ('rowSpan' in column.footer || 'colSpan' in column.footer) {\n return true;\n }\n }\n\n return false;\n };\n\n return columns.some(column => hasComplexConfig(column));\n });\n\n protected readonly canUseVirtualColumns = computed(() => {\n if (!this._virtualColumnsConfig().enabled) {\n return false;\n }\n\n if (this.hasBodyRowSpan() || this.hasComplexColumnLayout()) {\n return false;\n }\n\n if (this.table.getHeaderGroups().length > 1 || this.table.getFooterGroups().length > 1) {\n return false;\n }\n\n return this.centerLeafColumns().length > 0;\n });\n\n protected readonly columnVirtualizer = injectVirtualizer(() => {\n const centerColumns = this.centerLeafColumns();\n const columnConfig = this._virtualColumnsConfig();\n\n return {\n scrollElement: this.tbodyWrapper()?.nativeElement,\n count: centerColumns.length,\n horizontal: true,\n estimateSize: (index: number) => centerColumns[index]?.getSize() ?? 0,\n overscan: columnConfig.overscan ?? Z_DEFAULT_COLUMN_VIRTUAL_OVERSCAN,\n getItemKey: (index: number) => centerColumns[index]?.id ?? index,\n };\n });\n\n protected readonly virtualCenterColumnItems = computed(() => {\n if (!this.canUseVirtualColumns()) {\n return [];\n }\n\n return this.columnVirtualizer.getVirtualItems();\n });\n\n protected readonly virtualCenterColumns = computed(() => {\n const centerColumns = this.centerLeafColumns();\n return this.virtualCenterColumnItems()\n .map(item => centerColumns[item.index])\n .filter((column): column is Column<T, unknown> => !!column);\n });\n\n protected readonly virtualCenterColumnVisibilityMap = computed<Record<string, boolean>>(() => {\n const visibilityMap: Record<string, boolean> = {};\n for (const column of this.virtualCenterColumns()) {\n visibilityMap[column.id] = true;\n }\n\n return visibilityMap;\n });\n\n protected readonly firstVirtualCenterColumnId = computed(() => this.virtualCenterColumns()[0]?.id ?? null);\n protected readonly lastVirtualCenterColumnId = computed(() => {\n const columns = this.virtualCenterColumns();\n return columns[columns.length - 1]?.id ?? null;\n });\n\n protected readonly virtualLeftSpacerWidth = computed(() => {\n if (!this.canUseVirtualColumns()) {\n return 0;\n }\n\n return this.virtualCenterColumnItems()[0]?.start ?? 0;\n });\n\n protected readonly virtualCenterTotalWidth = computed(() =>\n this.centerLeafColumns().reduce((total, column) => total + column.getSize(), 0)\n );\n\n protected readonly virtualRightSpacerWidth = computed(() => {\n if (!this.canUseVirtualColumns()) {\n return 0;\n }\n\n const items = this.virtualCenterColumnItems();\n const lastItem = items[items.length - 1];\n if (!lastItem) {\n return 0;\n }\n\n return Math.max(0, this.virtualCenterTotalWidth() - lastItem.end);\n });\n\n protected readonly renderedColumnCount = computed(() => {\n if (!this.canUseVirtualColumns()) {\n return this.orderedLeafColumns().length;\n }\n\n let count = this.leftLeafColumns().length + this.virtualCenterColumns().length + this.rightLeafColumns().length;\n if (this.virtualLeftSpacerWidth() > 0) {\n count += 1;\n }\n if (this.virtualRightSpacerWidth() > 0) {\n count += 1;\n }\n\n return count;\n });\n\n protected readonly orderedLeafColumns = computed(() => [\n ...this.leftLeafColumns(),\n ...this.centerLeafColumns(),\n ...this.rightLeafColumns(),\n ]);\n\n protected readonly orderedHeaderGroups = computed(() => {\n void this.columnPinning();\n void this.columnOrder();\n\n const leftGroups = this.table.getLeftHeaderGroups();\n const centerGroups = this.table.getCenterHeaderGroups();\n const rightGroups = this.table.getRightHeaderGroups();\n\n const maxRows = Math.max(leftGroups.length, centerGroups.length, rightGroups.length);\n const result: { id: string; headers: (typeof leftGroups)[0]['headers'] }[] = [];\n\n for (let i = 0; i < maxRows; i++) {\n const leftHeaders = leftGroups[i]?.headers ?? [];\n const centerHeaders = centerGroups[i]?.headers ?? [];\n const rightHeaders = rightGroups[i]?.headers ?? [];\n\n result.push({\n id: `row-${i}`,\n headers: [...leftHeaders, ...centerHeaders, ...rightHeaders],\n });\n }\n\n return result;\n });\n\n protected readonly orderedFooterGroups = computed(() => {\n void this.columnPinning();\n void this.columnOrder();\n\n const leftGroups = this.table.getLeftFooterGroups();\n const centerGroups = this.table.getCenterFooterGroups();\n const rightGroups = this.table.getRightFooterGroups();\n\n const maxRows = Math.max(leftGroups.length, centerGroups.length, rightGroups.length);\n const result: { id: string; depth: number; headers: (typeof leftGroups)[0]['headers'] }[] = [];\n\n for (let i = 0; i < maxRows; i++) {\n const leftHeaders = leftGroups[i]?.headers ?? [];\n const centerHeaders = centerGroups[i]?.headers ?? [];\n const rightHeaders = rightGroups[i]?.headers ?? [];\n const depth = leftGroups[i]?.depth ?? centerGroups[i]?.depth ?? rightGroups[i]?.depth ?? i;\n\n result.push({\n id: `footer-row-${i}`,\n depth,\n headers: [...leftHeaders, ...centerHeaders, ...rightHeaders],\n });\n }\n\n return result;\n });\n\n protected readonly bottomRowsReversed = computed(() => [...this.table.getBottomRows()].reverse());\n protected readonly leftHeaderRow = computed(() => this.table.getLeftHeaderGroups()[0]?.headers ?? []);\n protected readonly centerHeaderRow = computed(() => this.table.getCenterHeaderGroups()[0]?.headers ?? []);\n protected readonly rightHeaderRow = computed(() => this.table.getRightHeaderGroups()[0]?.headers ?? []);\n protected readonly leftFooterRow = computed(() => this.table.getLeftFooterGroups()[0]?.headers ?? []);\n protected readonly centerFooterRow = computed(() => this.table.getCenterFooterGroups()[0]?.headers ?? []);\n protected readonly rightFooterRow = computed(() => this.table.getRightFooterGroups()[0]?.headers ?? []);\n\n protected readonly virtualCenterHeaderRow = computed(() => {\n const visibleColumns = this.virtualCenterColumnVisibilityMap();\n return this.centerHeaderRow().filter(header => visibleColumns[header.column.id]);\n });\n\n protected readonly virtualCenterFooterRow = computed(() => {\n const visibleColumns = this.virtualCenterColumnVisibilityMap();\n return this.centerFooterRow().filter(footer => visibleColumns[footer.column.id]);\n });\n\n protected readonly totalWidth = computed(() => {\n const columns = this.table.getAllLeafColumns();\n return columns.reduce((sum, col) => sum + col.getSize(), 0);\n });\n\n protected readonly shouldHeaderShowShadow = computed(\n () => this.showHeaderFooterShadow() && this.table.getTopRows().length === 0\n );\n\n protected readonly shouldFooterShowShadow = computed(\n () => this.showHeaderFooterShadow() && this.table.getBottomRows().length === 0\n );\n\n protected readonly tbodyContainerHeight = signal(0);\n protected readonly skeletonRowHeight = signal<number>(Z_SKELETON_ROW_HEIGHT);\n\n protected readonly skeletonRowCount = computed(() => {\n const containerHeight = this.tbodyContainerHeight();\n const baseRowHeight = this.skeletonRowHeight();\n\n if (containerHeight > 0) {\n return Math.max(3, Math.floor(containerHeight / baseRowHeight));\n }\n\n const { minHeight } = this.zConfig();\n if (minHeight) {\n const heightValue = parseInt(minHeight, 10);\n if (!isNaN(heightValue)) {\n return Math.max(3, Math.floor(heightValue / baseRowHeight));\n }\n }\n\n return Math.min(this.pagination().pageSize || 10, 10);\n });\n\n protected readonly actualSkeletonRowHeight = computed(() => {\n const containerHeight = this.tbodyContainerHeight();\n const rowCount = this.skeletonRowCount();\n\n if (containerHeight > 0 && rowCount > 0) {\n return containerHeight / rowCount;\n }\n\n return this.skeletonRowHeight();\n });\n\n protected readonly skeletonRows = computed(() => {\n const count = this.skeletonRowCount();\n return Array.from({ length: count }, (_, i) => i);\n });\n\n protected readonly dynamicGroupRows = computed(() => {\n const rows = this.table.getRowModel().rows as Row<T>[];\n const groups = this.dynamicGroups();\n const size = this.groupSize();\n const result: Row<T>[][] = [];\n\n if (groups.length > 0) {\n for (const group of groups) {\n result.push(rows.slice(group.startIndex, group.endIndex + 1));\n }\n return result;\n }\n\n const totalGroups = Math.ceil(rows.length / size);\n for (let i = 0; i < totalGroups; i++) {\n const startIndex = i * size;\n const endIndex = Math.min(startIndex + size, rows.length);\n result.push(rows.slice(startIndex, endIndex));\n }\n\n return result;\n });\n\n protected readonly dynamicGroupHeights = computed(() => {\n const groups = this.dynamicGroups();\n const rowHeight = this.virtualRowHeight();\n const defaultHeight = this.groupSize() * rowHeight;\n const isDynamic = this.dynamicSize();\n\n if (groups.length > 0) {\n return groups.map(group => (isDynamic ? null : (group.height ?? defaultHeight)));\n }\n\n const rows = this.table.getRowModel().rows as Row<T>[];\n const size = this.groupSize();\n const totalGroups = Math.ceil(rows.length / size);\n return Array(totalGroups).fill(isDynamic ? null : defaultHeight);\n });\n\n protected readonly columnSizing = computed(() => this.table.getState().columnSizing);\n protected readonly columnSizingInfo = computed(() => this.table.getState().columnSizingInfo);\n\n protected readonly columnSizeVars = computed(() => {\n void this.columnSizing();\n void this.columnSizingInfo();\n void this.columnOrder();\n void this.columnVisibility();\n void this.columnPinning();\n void this._columns();\n\n const headers = untracked(() => this.table.getFlatHeaders());\n const colSizes: Record<string, number> = {};\n\n for (const header of headers) {\n colSizes[`--header-${header.id}-size`] = header.getSize();\n colSizes[`--col-${header.column.id}-size`] = header.column.getSize();\n }\n\n return colSizes;\n });\n\n // ─── TanStack Table Instance ──────────────────────────────────────────────\n //\n // The central table instance. All state signals flow in, and on*Change\n // callbacks flow out. Features (sorting, filtering, pagination) are\n // conditionally enabled based on column configs and table mode.\n\n protected readonly table = createAngularTable<T>(() => {\n const config = this.zConfig();\n const isServerMode = config.mode === 'server';\n const pageSize = this.pagination().pageSize || 10;\n const totalRows = config.totalCount ?? config.totalRows;\n const pageCount = isServerMode && typeof totalRows === 'number' ? Math.ceil(totalRows / pageSize) : undefined;\n\n const hasAnyLocalFiltering = this.hasLocalFiltering();\n const hasAnyLocalSorting = this.hasLocalSorting();\n const shouldEnableLocalFiltering = !isServerMode || hasAnyLocalFiltering;\n const shouldEnableLocalSorting = !isServerMode || hasAnyLocalSorting;\n\n return {\n data: this._data(),\n columns: this._columns(),\n getCoreRowModel: getCoreRowModel(),\n getExpandedRowModel: this.hasExpandColumn() ? getExpandedRowModel() : undefined,\n getFilteredRowModel: shouldEnableLocalFiltering && this.hasFiltering() ? getFilteredRowModel() : undefined,\n getSortedRowModel: shouldEnableLocalSorting && this.hasSorting() ? getSortedRowModel() : undefined,\n getPaginationRowModel: !isServerMode && config.pagination?.enabled ? getPaginationRowModel() : undefined,\n getFacetedRowModel: shouldEnableLocalFiltering && this.hasFiltering() ? getFacetedRowModel() : undefined,\n getFacetedUniqueValues: shouldEnableLocalFiltering && this.hasFiltering() ? getFacetedUniqueValues() : undefined,\n getFacetedMinMaxValues: shouldEnableLocalFiltering && this.hasFiltering() ? getFacetedMinMaxValues() : undefined,\n manualFiltering: isServerMode && !hasAnyLocalFiltering,\n manualSorting: isServerMode && !hasAnyLocalSorting,\n manualPagination: isServerMode,\n pageCount: pageCount,\n columnResizeMode: 'onChange',\n enableRowSelection: this.hasSelectColumn(),\n enableSubRowSelection: this.hasSelectColumn() && !!config.getSubRows,\n enableRowPinning: config.enableRowPinning ?? false,\n enableMultiSort: config.enableMultiSort ?? false,\n keepPinnedRows: true,\n getRowId: config.getRowId\n ? (originalRow: T, index: number, parent?: Row<T>) =>\n config.getRowId?.(originalRow, index, parent?.original, this._data()) ?? `${index}`\n : (_row: T, index: number) => `${index}`,\n getSubRows: config.getSubRows\n ? (originalRow: T, index: number) => config.getSubRows?.(originalRow, index, undefined, this._data())\n : undefined,\n getRowCanExpand: config.getRowCanExpand ?? (() => true),\n state: {\n columnPinning: this.columnPinning(),\n columnVisibility: this.columnVisibility(),\n columnOrder: this.columnOrder(),\n expanded: this.expanded(),\n rowSelection: this.rowSelection(),\n rowPinning: this.rowPinning(),\n columnFilters: this.columnFilters(),\n globalFilter: this.globalFilter(),\n pagination: this._tanstackPagination(),\n sorting: this.sorting(),\n },\n onColumnPinningChange: updater => {\n const newState = typeof updater === 'function' ? updater(this.columnPinning()) : updater;\n this.columnPinning.set(newState);\n },\n onColumnVisibilityChange: updater => {\n const newState = typeof updater === 'function' ? updater(this.columnVisibility()) : updater;\n this.columnVisibility.set(newState);\n },\n onColumnOrderChange: updater => {\n const newState = typeof updater === 'function' ? updater(this.columnOrder()) : updater;\n this.columnOrder.set(newState);\n },\n onExpandedChange: updater => {\n const newState = typeof updater === 'function' ? updater(this.expanded()) : updater;\n this.expanded.set(newState);\n this.zChange.emit({\n type: 'expand',\n data: { expanded: newState },\n });\n },\n onRowSelectionChange: updater => {\n const currentState = this.rowSelection();\n const newState = typeof updater === 'function' ? updater(currentState) : updater;\n this._handleRowSelectionWithParents(newState);\n },\n onColumnFiltersChange: updater => {\n const oldState = this.columnFilters();\n const newState = typeof updater === 'function' ? updater(oldState) : updater;\n\n const changedColumnIds = this._getChangedFilterColumnIds(oldState, newState);\n const hasAnyLocalChange = changedColumnIds.some(id => this._isColumnFilterModeLocal(id));\n const hasAnyServerChange = changedColumnIds.some(id => !this._isColumnFilterModeLocal(id));\n const serverModeFilters = this._filterServerModeColumnFilters(newState);\n\n this.columnFilters.set(newState);\n\n if (hasAnyLocalChange) {\n this._runAsyncStateUpdate(() => {\n this.pagination.update(p => ({ ...p, pageIndex: 1 }));\n }, true);\n }\n\n if (hasAnyServerChange) {\n this.zChange.emit({\n type: 'filter',\n data: { filters: serverModeFilters, search: this.globalFilter() },\n });\n }\n },\n onGlobalFilterChange: updater => {\n const newState = typeof updater === 'function' ? updater(this.globalFilter()) : updater;\n const hasLocalFilter = this.hasLocalFiltering();\n const serverModeFilters = this._filterServerModeColumnFilters(this.columnFilters());\n\n this._runAsyncStateUpdate(() => {\n this.globalFilter.set(newState);\n if (hasLocalFilter) {\n this.pagination.update(p => ({ ...p, pageIndex: 1 }));\n }\n if (serverModeFilters.length > 0 || this.hasServerFiltering()) {\n this._emitFilterChangeDebounced(serverModeFilters, newState);\n }\n }, hasLocalFilter);\n },\n onPaginationChange: updater => {\n const newState = typeof updater === 'function' ? updater(this._tanstackPagination()) : updater;\n const adjustedState = { ...newState, pageIndex: newState.pageIndex + 1 };\n this.pagination.set(adjustedState);\n this.zChange.emit({\n type: 'page',\n data: { pageIndex: adjustedState.pageIndex, pageSize: adjustedState.pageSize, emitType: 'auto' },\n });\n },\n onSortingChange: updater => {\n const oldState = this.sorting();\n const newState = typeof updater === 'function' ? updater(oldState) : updater;\n\n const changedColumnIds = this._getChangedSortColumnIds(oldState, newState);\n const hasAnyLocalChange = changedColumnIds.some(id => this._isColumnSortModeLocal(id));\n const hasAnyServerChange = changedColumnIds.some(id => !this._isColumnSortModeLocal(id));\n const serverModeSorting = this._filterServerModeSorting(newState);\n\n this.sorting.set(newState);\n\n if (hasAnyLocalChange) {\n this._runAsyncStateUpdate(() => {\n this.pagination.update(p => ({ ...p, pageIndex: 1 }));\n }, true);\n }\n\n if (hasAnyServerChange) {\n this.zChange.emit({ type: 'sort', data: { sorting: serverModeSorting } });\n }\n },\n onRowPinningChange: updater => {\n const newState = typeof updater === 'function' ? updater(this.rowPinning()) : updater;\n this.rowPinning.set(newState);\n },\n meta: {\n updateData: (rowIndex: number, columnId: string, value: unknown) => {\n const row = this.table.getRowModel().rows[rowIndex];\n if (row) {\n this.zChange.emit({\n type: 'cellClick',\n data: {\n row: row.original,\n rowId: row.id,\n columnId,\n value,\n },\n });\n }\n },\n },\n debugTable: false,\n };\n }) as ReturnType<typeof createAngularTable<T>>;\n\n private readonly _virtualGroupCount = computed(() => {\n if (!this.isVirtual()) {\n return 0;\n }\n\n const totalRows = untracked(() => this.table.getRowModel().rows.length);\n return Math.ceil(totalRows / this.groupSize());\n });\n\n /** Virtualizer instance — operates on groups rather than individual rows */\n protected readonly virtualizer = injectVirtualizer(() => {\n const groups = this.dynamicGroups();\n const rowHeight = this.virtualRowHeight();\n const groupSize = this.groupSize();\n const scrollElement = this.tbodyWrapper()?.nativeElement;\n const virtualConfig = this._virtualConfig();\n\n return {\n scrollElement,\n count: groups.length > 0 ? groups.length : this._virtualGroupCount(),\n estimateSize: (index: number) => {\n if (groups.length > 0 && groups[index]) {\n const groupHeight = groups[index].height;\n if (groupHeight !== null) {\n return groupHeight;\n }\n\n return groups[index].rowCount * rowHeight;\n }\n\n return groupSize * rowHeight;\n },\n measureElement: (element: Element) => element.getBoundingClientRect().height,\n overscan: virtualConfig.overscan ?? Z_DEFAULT_VIRTUAL_OVERSCAN,\n initialOffset: virtualConfig.initialOffset ?? 0,\n ...pickDefined(virtualConfig, [\n 'scrollMargin',\n 'gap',\n 'isScrollingResetDelay',\n 'useScrollendEvent',\n 'getItemKey',\n 'rangeExtractor',\n ]),\n };\n });\n\n private readonly _measureVirtualItems = effect(() => {\n if (!this.dynamicSize()) {\n return;\n }\n\n const elements = this.virtualRowElements();\n for (const el of elements) {\n this.virtualizer.measureElement(el.nativeElement);\n }\n });\n\n // ─── Constructor Effects ──────────────────────────────────────────────────\n //\n // Effects run in the constructor because Angular signals + effects don't\n // have a separate \"init\" lifecycle. Each effect is responsible for one\n // concern (data sync, config loading, scroll reset, settings persistence, etc.)\n\n constructor() {\n // Force data refresh when language changes (re-evaluates translations in cells)\n explicitEffect([this._zTranslate.currentLang], () => {\n this._dataForceUpdate.update(v => v + 1);\n });\n\n explicitEffect([this.zConfig], ([cfg]) => {\n if (this._lastExternalDataRef !== cfg.data) {\n this._lastExternalDataRef = cfg.data;\n this._rowDragDataOverride.set(null);\n }\n\n if (cfg.mode !== 'server') {\n return;\n }\n\n const total = cfg.totalCount ?? cfg.totalRows;\n if (typeof total !== 'number') {\n return;\n }\n\n if (cfg.loading && total <= 0 && this._serverPaginationTotal() > 0) {\n return;\n }\n\n this._serverPaginationTotal.set(total);\n });\n\n explicitEffect([this.zKey, this.zConfig], ([key, cfg]) => {\n if (!cfg.columns || cfg.columns.length === 0) {\n return;\n }\n\n const cacheLoaded = key ? this._loadConfigCache(key) : false;\n const initial = cfg.initialState;\n if (initial) {\n if (!cacheLoaded) {\n if (initial.columnPinning) {\n this.columnPinning.set(initial.columnPinning);\n }\n if (initial.columnVisibility) {\n this.columnVisibility.set(initial.columnVisibility);\n }\n }\n\n if (initial.sorting) {\n this.sorting.set(initial.sorting);\n }\n if (initial.columnFilters) {\n this.columnFilters.set(initial.columnFilters);\n }\n if (initial.globalFilter) {\n this.globalFilter.set(initial.globalFilter);\n }\n if (initial.expanded) {\n this.expanded.set(initial.expanded);\n }\n if (initial.rowSelection) {\n this.rowSelection.set(initial.rowSelection);\n }\n if (initial.rowPinning) {\n this.rowPinning.set(initial.rowPinning);\n }\n if (initial.pagination) {\n this.pagination.set(initial.pagination);\n }\n }\n\n if (!cacheLoaded) {\n this.showHeaderFooterShadow.set(cfg.showHeaderShadow ?? cfg.showFooterShadow ?? true);\n if (typeof cfg.showHorizontalBorder === 'boolean') {\n this.showHorizontalBorder.set(cfg.showHorizontalBorder);\n }\n if (typeof cfg.showVerticalBorder === 'boolean') {\n this.showVerticalBorder.set(cfg.showVerticalBorder);\n }\n }\n\n const cols = cfg.columns ?? [];\n const leftPinned: string[] = [...(initial?.columnPinning?.left ?? [])];\n const rightPinned: string[] = [...(initial?.columnPinning?.right ?? [])];\n\n const collectPinnedColumns = (columns: typeof cols): void => {\n for (const col of columns) {\n if (col.pinned === 'left' && !leftPinned.includes(col.id)) {\n leftPinned.push(col.id);\n }\n if (col.pinned === 'right' && !rightPinned.includes(col.id)) {\n rightPinned.push(col.id);\n }\n if (col.columns) {\n collectPinnedColumns(col.columns);\n }\n }\n };\n\n collectPinnedColumns(cols);\n if (!cacheLoaded && (leftPinned.length > 0 || rightPinned.length > 0)) {\n this.columnPinning.set({ left: leftPinned, right: rightPinned });\n }\n });\n\n explicitEffect([this.zConfig], ([cfg]) => {\n if (cfg.enableRowPinning && !this.hasBodyRowSpan()) {\n const cols = cfg.columns ?? [];\n const hasSelect = cols.some(c => c.id === 'select');\n const hasExpand = cols.some(c => c.id === 'expand');\n const currentPinning = this.columnPinning();\n const leftPinned = [...(currentPinning.left || [])];\n if (hasSelect && !leftPinned.includes('select')) {\n leftPinned.unshift('select');\n this.columnPinning.set({ ...currentPinning, left: leftPinned });\n }\n\n if (!hasSelect && !hasExpand && !leftPinned.includes('actions')) {\n leftPinned.unshift('actions');\n this.columnPinning.set({ ...currentPinning, left: leftPinned });\n }\n }\n });\n\n afterNextRender(() => {\n const containerEl = this.tbodyContainer()?.nativeElement;\n if (containerEl && !this._resizeObserver) {\n this._resizeObserver = new ResizeObserver(entries => {\n for (const entry of entries) {\n this.tbodyContainerHeight.set(entry.contentRect.height);\n }\n this._checkVerticalScroll();\n this._checkHorizontalScroll();\n });\n\n this._resizeObserver.observe(containerEl);\n this.tbodyContainerHeight.set(containerEl.clientHeight);\n\n this._destroy$.subscribe(() => {\n if (this._resizeObserver) {\n this._resizeObserver.disconnect();\n this._resizeObserver = null;\n }\n });\n }\n });\n\n explicitEffect([this._configPagination], ([configPagination]) => {\n if (configPagination) {\n this.pagination.set(configPagination);\n }\n });\n\n explicitEffect([this.columnFilters, this.globalFilter, this.pagination, this.sorting, this._data], () => {\n if (this.isVirtual()) {\n const wrapperEl = this.tbodyWrapper()?.nativeElement;\n if (wrapperEl) {\n wrapperEl.scrollTop = 0;\n }\n\n this.virtualizer.scrollToOffset(0);\n }\n\n queueMicrotask(() => {\n this._checkVerticalScroll();\n this._checkHorizontalScroll();\n if (this.isVirtual()) {\n this._dynamicGroupsVersion.update(v => v + 1);\n }\n });\n });\n\n explicitEffect([this.virtualizer.getVirtualItems], () => {\n if (!this.isVirtual()) {\n return;\n }\n\n queueMicrotask(() => {\n this._checkLastRowTouchesBottom();\n });\n });\n\n explicitEffect([this.isLoading, this.isProcessing], () => {\n const loading = this.isLoading();\n const processing = this.isProcessing();\n\n if (loading || processing) {\n const wrapperEl = this.tbodyWrapper()?.nativeElement;\n if (wrapperEl) {\n this._savedScrollLeft.set(wrapperEl.scrollLeft);\n wrapperEl.scrollTop = 0;\n }\n\n const scrollbar = this.tbodyScrollbar();\n if (scrollbar) {\n void scrollbar.scrollTo({ top: 0, left: this._savedScrollLeft(), duration: 0 });\n }\n\n return;\n }\n\n queueMicrotask(() => {\n const wrapperEl = this.tbodyWrapper()?.nativeElement;\n if (wrapperEl) {\n wrapperEl.scrollTop = 0;\n wrapperEl.scrollLeft = this._savedScrollLeft();\n }\n\n if (this.isVirtual()) {\n const scrollbar = this.tbodyScrollbar();\n if (scrollbar) {\n void scrollbar.scrollTo({ top: 0, left: this._savedScrollLeft(), duration: 0 });\n }\n\n this.virtualizer.scrollToOffset(0);\n this._dynamicGroupsVersion.update(v => v + 1);\n }\n\n this._checkScrollState();\n });\n });\n\n explicitEffect(\n [\n this.columnOrder,\n this.columnSizing,\n this.columnPinning,\n this.columnVisibility,\n this.showHeaderFooterShadow,\n this.showHorizontalBorder,\n this.showVerticalBorder,\n ],\n () => {\n this._saveConfig();\n },\n { defer: true }\n );\n }\n\n // ─── Lifecycle ────────────────────────────────────────────────────────────\n\n ngAfterViewInit(): void {\n queueMicrotask(() => this._checkScrollState());\n this.zControl.emit({\n updateConfig: (config: Partial<ZTableConfig<T>>) => {\n const current = this.zConfig();\n Object.assign(current, config);\n },\n toggleSettings: () => {\n this.showSettingsDrawer.set(!this.showSettingsDrawer());\n },\n resetFilters: () => {\n this.columnFilters.set([]);\n this.globalFilter.set('');\n },\n resetSorting: () => {\n this.sorting.set([]);\n },\n addItem: (item: T) => {\n const current = this.zConfig();\n current.data = [...current.data, item];\n this._dataForceUpdate.update(v => v + 1);\n },\n updateItem: (id: string | number, updates: Partial<T>, fieldKey?: keyof T) => {\n const current = this.zConfig();\n current.data = current.data.map((row, index) => {\n const rowId = fieldKey\n ? (row[fieldKey] as string | number)\n : current.getRowId\n ? current.getRowId(row, index, undefined, current.data)\n : ((row as Record<string, unknown>)['id'] as string | number);\n\n return rowId === id ? { ...row, ...updates } : row;\n });\n this._dataForceUpdate.update(v => v + 1);\n this._rowUpdate.set({ rowId: String(id), updates: updates as Record<string, unknown> });\n },\n deleteItem: (id: string | number, fieldKey?: keyof T) => {\n const current = this.zConfig();\n current.data = current.data.filter((row, index) => {\n const rowId = fieldKey\n ? (row[fieldKey] as string | number)\n : current.getRowId\n ? current.getRowId(row, index, undefined, current.data)\n : ((row as Record<string, unknown>)['id'] as string | number);\n\n return rowId !== id;\n });\n this._dataForceUpdate.update(v => v + 1);\n },\n getItems: () => this.zConfig().data,\n setColumnVisibility: (columnIds: string | string[], visible: boolean) => {\n const ids = Array.isArray(columnIds) ? columnIds : [columnIds];\n const currentVisibility = this.columnVisibility();\n const newVisibility = { ...currentVisibility };\n const allColumnIds = this.table\n .getAllLeafColumns()\n .map(col => col.id)\n .filter(id => id !== 'expand' && id !== 'select' && id !== 'rowDrag');\n const visibleCount = allColumnIds.filter(id => currentVisibility[id] !== false).length;\n if (!visible) {\n const columnsToHide = ids.filter(id => currentVisibility[id] !== false);\n const remainingVisible = visibleCount - columnsToHide.length;\n if (remainingVisible < 2) {\n console.warn('[z-table] Cannot hide columns: at least 2 columns must remain visible');\n return;\n }\n }\n\n ids.forEach(id => {\n newVisibility[id] = visible;\n });\n\n this.columnVisibility.set(newVisibility);\n },\n });\n }\n\n // ─── Selection Helpers ────────────────────────────────────────────────────\n\n /**\n * Syncs parent row selection state based on children.\n * If all children are selected, the parent is auto-selected;\n * if no children are selected, the parent is deselected.\n */\n private _handleRowSelectionWithParents(newState: RowSelectionState): void {\n const stateRecord = newState as Record<string, boolean>;\n const finalState: Record<string, boolean> = { ...stateRecord };\n\n const allRows = this.table.getRowModel().rows;\n allRows.forEach(row => {\n if (!row.subRows || row.subRows.length === 0) {\n return;\n }\n\n const allChildrenSelected = row.subRows.every(child => finalState[child.id] === true);\n if (allChildrenSelected) {\n finalState[row.id] = true;\n return;\n }\n\n const someChildrenSelected = row.subRows.some(child => finalState[child.id] === true);\n if (!someChildrenSelected) {\n delete finalState[row.id];\n }\n });\n\n this.rowSelection.set(finalState as RowSelectionState);\n this.zChange.emit({\n type: 'select',\n data: { selection: finalState as RowSelectionState },\n });\n }\n\n // ─── Async State Helpers ──────────────────────────────────────────────────\n\n /**\n * Wraps state mutations with a debounced processing indicator.\n * Shows a brief loading state to prevent UI flicker during\n * filter/sort recomputation on large datasets.\n */\n private _runAsyncStateUpdate(updateFn: () => void, forceLocal = false): void {\n const isServerMode = this.zConfig().mode === 'server';\n const hasLocalFiltering = this.hasLocalFiltering();\n const hasLocalSorting = this.hasLocalSorting();\n const shouldRunAsync = !isServerMode || forceLocal || hasLocalFiltering || hasLocalSorting;\n\n if (!shouldRunAsync) {\n updateFn();\n return;\n }\n\n this.isProcessing.set(true);\n setTimeout(() => {\n updateFn();\n this.isProcessing.set(false);\n }, this.zConfig().debounceTime ?? Z_DEFAULT_DEBOUNCE_TIME);\n }\n\n private _emitFilterChangeDebounced(filters: ColumnFiltersState, search: string): void {\n if (this._filterEmitDebounceTimeout) {\n clearTimeout(this._filterEmitDebounceTimeout);\n }\n\n this._filterEmitDebounceTimeout = setTimeout(() => {\n this.zChange.emit({\n type: 'filter',\n data: { filters, search },\n });\n }, 300);\n }\n\n private _checkScrollState(): void {\n this._checkVerticalScroll();\n this._checkHorizontalScroll();\n this._refreshPinnedRowHeights();\n }\n\n private _refreshPinnedRowHeights(): void {\n const tbodyWrapperEl = this.tbodyWrapper()?.nativeElement;\n if (!tbodyWrapperEl) {\n if (Object.keys(this.pinnedRowHeights()).length > 0) {\n this.pinnedRowHeights.set({});\n }\n return;\n }\n\n const topRows = this.table.getTopRows();\n const bottomRows = this.table.getBottomRows();\n if (topRows.length === 0 && bottomRows.length === 0) {\n if (Object.keys(this.pinnedRowHeights()).length > 0) {\n this.pinnedRowHeights.set({});\n }\n return;\n }\n\n const domRowHeights = new Map<string, number>();\n const domRows = tbodyWrapperEl.querySelectorAll('tbody tr[data-row-id]');\n domRows.forEach(rowEl => {\n const rowId = rowEl.getAttribute('data-row-id');\n if (!rowId) {\n return;\n }\n\n domRowHeights.set(rowId, rowEl.getBoundingClientRect().height);\n });\n\n const nextHeights: Record<string, number> = {};\n for (const row of [...topRows, ...bottomRows]) {\n const height = domRowHeights.get(row.id);\n if (!height) {\n continue;\n }\n\n nextHeights[row.id] = height;\n }\n\n const currentHeights = this.pinnedRowHeights();\n const currentKeys = Object.keys(currentHeights);\n const nextKeys = Object.keys(nextHeights);\n if (currentKeys.length === nextKeys.length) {\n const hasChanges = nextKeys.some(key => currentHeights[key] !== nextHeights[key]);\n if (!hasChanges) {\n return;\n }\n }\n\n this.pinnedRowHeights.set(nextHeights);\n }\n\n private _checkVerticalScroll(): void {\n const tbodyWrapperEl = this.tbodyWrapper()?.nativeElement;\n if (tbodyWrapperEl) {\n const hasScroll = tbodyWrapperEl.scrollHeight > tbodyWrapperEl.clientHeight;\n this.hasVerticalScroll.set(hasScroll);\n this._checkLastRowTouchesBottom();\n }\n }\n\n private _checkLastRowTouchesBottom(): void {\n const tbodyWrapperEl = this.tbodyWrapper()?.nativeElement;\n if (!tbodyWrapperEl) {\n return;\n }\n\n const hasScroll = tbodyWrapperEl.scrollHeight > tbodyWrapperEl.clientHeight;\n if (hasScroll) {\n this.lastRowTouchesBottom.set(true);\n return;\n }\n\n if (this.isVirtual()) {\n const virtualScrollInner = tbodyWrapperEl.querySelector('.z-virtual-scroll-inner');\n if (!virtualScrollInner) {\n this.lastRowTouchesBottom.set(true);\n return;\n }\n\n const virtualRows = virtualScrollInner.querySelectorAll('.z-virtual-row');\n if (virtualRows.length === 0) {\n this.lastRowTouchesBottom.set(true);\n return;\n }\n\n const lastVirtualRow = virtualRows[virtualRows.length - 1];\n const lastTr = lastVirtualRow.querySelector('tbody tr:last-child');\n if (!lastTr) {\n this.lastRowTouchesBottom.set(true);\n return;\n }\n\n const wrapperRect = tbodyWrapperEl.getBoundingClientRect();\n const rowRect = lastTr.getBoundingClientRect();\n const gap = wrapperRect.bottom - rowRect.bottom;\n this.lastRowTouchesBottom.set(gap <= 2);\n return;\n }\n\n const tbody = tbodyWrapperEl.querySelector('tbody');\n if (!tbody) {\n this.lastRowTouchesBottom.set(true);\n return;\n }\n\n const lastRow = tbody.querySelector('tr:last-child');\n if (!lastRow) {\n this.lastRowTouchesBottom.set(true);\n return;\n }\n\n const wrapperRect = tbodyWrapperEl.getBoundingClientRect();\n const rowRect = lastRow.getBoundingClientRect();\n const gap = wrapperRect.bottom - rowRect.bottom;\n this.lastRowTouchesBottom.set(gap <= 2);\n }\n\n private _checkHorizontalScroll(): void {\n const containerEl = this.tbodyContainer()?.nativeElement;\n if (containerEl) {\n const tableWidth = this.table.getTotalSize();\n const containerWidth = containerEl.clientWidth;\n const hasScroll = tableWidth > containerWidth;\n this.hasHorizontalScroll.set(hasScroll);\n\n const scrollableEl = this.tbodyWrapper()?.nativeElement;\n if (scrollableEl) {\n this._updateScrollShadowState(scrollableEl);\n }\n }\n }\n\n private _updateScrollShadowState(element: HTMLElement): void {\n const { scrollLeft, scrollWidth, clientWidth } = element;\n const hasScrollLeft = scrollLeft > 0;\n\n const hasRightPinned = this.hasRightPinnedColumns();\n const isAtEnd = scrollLeft + clientWidth >= scrollWidth - 1;\n const hasScrollRight = hasRightPinned && !isAtEnd;\n\n this.hasScrollLeft.set(hasScrollLeft);\n this.hasScrollRight.set(hasScrollRight);\n }\n\n public hasRightPinnedColumns(): boolean {\n return this.table.getRightLeafColumns().length > 0;\n }\n\n // ─── Scroll Event Handlers ────────────────────────────────────────────────\n\n public onTbodyScroll(event: Event): void {\n if (this._isSyncingScroll()) {\n return;\n }\n const target = event.target as HTMLElement;\n this._syncScrollLeft(target.scrollLeft);\n this._updateScrollShadowState(target);\n }\n\n private _syncScrollLeft(scrollLeft: number): void {\n untracked(() => {\n this._isSyncingScroll.set(true);\n });\n const thead = this.theadWrapper()?.nativeElement;\n const tbody = this.tbodyWrapper()?.nativeElement;\n const tfoot = this.tfootWrapper()?.nativeElement;\n\n if (thead) {\n thead.scrollLeft = scrollLeft;\n }\n if (tbody) {\n tbody.scrollLeft = scrollLeft;\n }\n if (tfoot) {\n tfoot.scrollLeft = scrollLeft;\n }\n\n untracked(() => {\n this._isSyncingScroll.set(false);\n });\n }\n\n // ─── Sort / Pagination / Search Handlers ──────────────────────────────────\n\n /** Handles sort click; auto-adds shiftKey for multi-sort when enabled */\n public handleSort(event: Event, handler?: (event: unknown) => void): void {\n event.preventDefault();\n if (this.zConfig().enableMultiSort) {\n const multiSortEvent = new MouseEvent('click', { shiftKey: true });\n handler?.(multiSortEvent);\n return;\n }\n\n handler?.(event);\n }\n\n public onColumnDrop(event: CdkDragDrop<string[]>): void {\n const allColumns = this.table.getAllLeafColumns();\n const columnIds = allColumns\n .filter(c => c.id !== 'select' && c.id !== 'expand' && c.id !== 'rowDrag')\n .map(c => c.id);\n moveItemInArray(columnIds, event.previousIndex, event.currentIndex);\n const finalOrder = [this.hasRowDragColumn() ? 'rowDrag' : null, 'select', 'expand', ...columnIds].filter(\n Boolean\n ) as string[];\n this.table.setColumnOrder(finalOrder);\n }\n\n public onRowDragStarted(): void {\n if (!this.isRowDragEnabled()) {\n return;\n }\n\n this.isDraggingRow.set(true);\n }\n\n public onRowDragEnded(_event: CdkDragEnd<Row<T>>): void {\n this.isDraggingRow.set(false);\n }\n\n public onRowDrop(event: CdkDragDrop<Row<T>[]>): void {\n this.isDraggingRow.set(false);\n\n if (!this.isRowDragEnabled()) {\n return;\n }\n\n const previousIndex = this._resolveRowDragDropIndex(event.previousIndex);\n const currentIndex = this._resolveRowDragDropIndex(event.currentIndex);\n if (previousIndex === currentIndex) {\n return;\n }\n\n const visibleRows = this.table.getRowModel().rows;\n const sourceRow = visibleRows[previousIndex];\n if (!sourceRow) {\n return;\n }\n\n const reorderedVisibleData = visibleRows.map(row => row.original);\n moveItemInArray(reorderedVisibleData, previousIndex, currentIndex);\n\n const visibleItems = new Set(visibleRows.map(row => row.original));\n let reorderedIndex = 0;\n const nextData = this._data().map(item => {\n if (!visibleItems.has(item)) {\n return item;\n }\n\n const nextItem = reorderedVisibleData[reorderedIndex];\n reorderedIndex += 1;\n return nextItem;\n });\n\n this._rowDragDataOverride.set(nextData);\n\n const rowDragEvent: ZTableRowDragEvent<T> = {\n row: sourceRow.original,\n rowId: sourceRow.id,\n previousIndex,\n currentIndex,\n data: nextData,\n };\n\n this.zChange.emit({\n type: 'rowDrag',\n data: rowDragEvent,\n });\n }\n\n private _resolveRowDragDropIndex(relativeIndex: number): number {\n const { rows } = this.table.getRowModel();\n if (!this.isVirtualRowDragEnabled()) {\n return Math.max(0, Math.min(relativeIndex, rows.length - 1));\n }\n\n const firstRenderedIndex = this.virtualizer.getVirtualItems()[0]?.index ?? 0;\n const absoluteIndex = firstRenderedIndex + relativeIndex;\n return Math.max(0, Math.min(absoluteIndex, rows.length - 1));\n }\n\n public onToggleAllColumns(): void {\n this.table.toggleAllColumnsVisible();\n }\n\n public onPageChange(event: { pageIndex: number; pageSize: number }, emitType: 'user' | 'auto' = 'user'): void {\n if (emitType === 'user') {\n this.isProcessing.set(true);\n this._runAsyncStateUpdate(() => {\n this.pagination.set({ pageIndex: event.pageIndex, pageSize: event.pageSize });\n this.isProcessing.set(false);\n\n this.zChange.emit({\n type: 'page',\n data: { ...event, emitType },\n });\n });\n\n return;\n }\n\n this.pagination.set({ pageIndex: event.pageIndex, pageSize: event.pageSize });\n this.zChange.emit({\n type: 'page',\n data: { ...event, emitType },\n });\n }\n\n public onSearchChange(value: string | number | null): void {\n const searchValue = value === null ? '' : String(value);\n this.globalFilter.set(searchValue);\n this._runAsyncStateUpdate(() => {\n this.zChange.emit({\n type: 'search' as const,\n data: {\n search: searchValue,\n filters: this.columnFilters(),\n sorting: this.sorting(),\n pagination: this.pagination(),\n },\n });\n\n this._checkVerticalScroll();\n this._checkHorizontalScroll();\n });\n }\n\n public toggleHeaderFooterShadow(): void {\n this.showHeaderFooterShadow.update(v => !v);\n }\n\n public onActionClick(event: ZTableActionClickEvent<T>): void {\n this.zChange.emit({\n type: 'action',\n data: event,\n });\n }\n\n public onCellClick(row: Row<T>, columnId: string, value: unknown): void {\n this.zChange.emit({\n type: 'cellClick',\n data: {\n row: row.original,\n rowId: row.id,\n columnId,\n value,\n },\n });\n }\n\n public onCellEdit(event: ZTableEditCellChangeEvent<T>): void {\n this.zChange.emit({\n type: 'cellEdit',\n data: {\n row: event.row,\n rowId: event.rowId,\n rowIndex: event.rowIndex,\n columnId: event.columnId,\n oldValue: event.oldValue,\n newValue: event.newValue,\n },\n });\n }\n\n // ─── Settings Drawer ─────────────────────────────────────────────────────\n\n public openSettingsDrawer(): void {\n if (this.columnOrder().length === 0) {\n this.columnOrder.set(this.table.getAllLeafColumns().map(col => col.id));\n }\n\n this.pendingVisibleColumns.set(\n this.table\n .getAllLeafColumns()\n .filter(col => col.getIsVisible())\n .map(col => col.id)\n );\n\n this.pendingColumnOrder.set(this.columnOrder());\n this.pendingShowHeaderFooterShadow.set(this.showHeaderFooterShadow());\n this.showSettingsDrawer.set(true);\n }\n\n public onPendingColumnDrop(event: CdkDragDrop<string[]>): void {\n const fullOrder = this.columnOrder();\n const unpinnedColumns = fullOrder.filter(id => {\n if (id === 'expand' || id === 'select' || id === 'rowDrag') {\n return false;\n }\n\n const column = this.table.getColumn(id);\n return !column?.getIsPinned();\n });\n\n const movedItem = unpinnedColumns[event.previousIndex];\n unpinnedColumns.splice(event.previousIndex, 1);\n unpinnedColumns.splice(event.currentIndex, 0, movedItem);\n\n const fixedLeadingColumns = fullOrder.filter(id => id === 'expand' || id === 'select' || id === 'rowDrag');\n const pinnedLeft = fullOrder.filter(id => {\n const col = this.table.getColumn(id);\n return col?.getIsPinned() === 'left' && id !== 'expand' && id !== 'select' && id !== 'rowDrag';\n });\n const pinnedRight = fullOrder.filter(id => {\n const col = this.table.getColumn(id);\n return col?.getIsPinned() === 'right';\n });\n\n const newOrder = [...fixedLeadingColumns, ...pinnedLeft, ...unpinnedColumns, ...pinnedRight];\n this.columnOrder.set(newOrder);\n }\n\n public onVisibleColumnsChange(values: (string | number)[]): void {\n if (values.length >= 2) {\n this.pendingVisibleColumns.set(values.map(v => String(v)));\n }\n }\n\n public onToggleColumnVisibility(columnId: string): void {\n const currentVisibility = this.columnVisibility();\n const isVisible = currentVisibility[columnId] !== false;\n\n const allColumnIds = this.columnOrder().filter(id => id !== 'expand' && id !== 'select' && id !== 'rowDrag');\n const visibleCount = allColumnIds.filter(id => currentVisibility[id] !== false).length;\n\n if (isVisible) {\n if (visibleCount <= 2) {\n return;\n }\n }\n\n if (this._settingsDebounceTimeout) {\n clearTimeout(this._settingsDebounceTimeout);\n }\n\n this._settingsDebounceTimeout = setTimeout(() => {\n this.columnVisibility.set({ ...this.columnVisibility(), [columnId]: !isVisible });\n }, 100);\n }\n\n public onToggleColumnPin(columnId: string, position: 'left' | 'right'): void {\n const column = this.table.getColumn(columnId);\n if (!column) {\n return;\n }\n\n const currentPin = column.getIsPinned();\n const newPosition = currentPin === position ? false : position;\n\n if (this._settingsDebounceTimeout) {\n clearTimeout(this._settingsDebounceTimeout);\n }\n this._settingsDebounceTimeout = setTimeout(() => {\n column.pin(newPosition);\n\n if (newPosition) {\n const columnConfig = this._findColumnConfig(columnId);\n if (columnConfig) {\n const colSpan = getHeaderColSpan(columnConfig);\n if (colSpan && colSpan > 1) {\n const allColumns = this.table.getAllLeafColumns();\n const currentIdx = allColumns.findIndex(c => c.id === columnId);\n if (currentIdx !== -1) {\n for (let i = 1; i < colSpan && currentIdx + i < allColumns.length; i++) {\n const coveredColumn = allColumns[currentIdx + i];\n coveredColumn.pin(newPosition);\n }\n }\n }\n }\n }\n\n this._columnPinVersion.update(v => v + 1);\n this._checkHorizontalScroll();\n }, 100);\n }\n\n public handleColumnPin(columnId: string, position: 'left' | 'right' | false): void {\n const column = this.table.getColumn(columnId);\n if (!column) {\n return;\n }\n\n column.pin(position);\n if (position) {\n const columnConfig = this._findColumnConfig(columnId);\n if (columnConfig) {\n const colSpan = getHeaderColSpan(columnConfig);\n if (colSpan && colSpan > 1) {\n const allColumns = this.table.getAllLeafColumns();\n const currentIdx = allColumns.findIndex(c => c.id === columnId);\n if (currentIdx !== -1) {\n for (let i = 1; i < colSpan && currentIdx + i < allColumns.length; i++) {\n const coveredColumn = allColumns[currentIdx + i];\n coveredColumn.pin(position);\n }\n }\n }\n }\n }\n\n this._columnPinVersion.update(v => v + 1);\n this._checkHorizontalScroll();\n }\n\n public moveColumnLeft(columnId: string): void {\n const currentOrder = this.columnOrder();\n if (currentOrder.length === 0) {\n this.columnOrder.set(this.table.getAllLeafColumns().map(col => col.id));\n }\n\n const order = [...this.columnOrder()];\n const currentIndex = order.indexOf(columnId);\n\n if (currentIndex <= 0) {\n return;\n }\n\n const prevIndex = currentIndex - 1;\n if (order[prevIndex] === 'select' || order[prevIndex] === 'expand' || order[prevIndex] === 'actions') {\n return;\n }\n\n [order[currentIndex], order[prevIndex]] = [order[prevIndex], order[currentIndex]];\n this.columnOrder.set(order);\n }\n\n public moveColumnRight(columnId: string): void {\n const currentOrder = this.columnOrder();\n if (currentOrder.length === 0) {\n this.columnOrder.set(this.table.getAllLeafColumns().map(col => col.id));\n }\n\n const order = [...this.columnOrder()];\n const currentIndex = order.indexOf(columnId);\n\n if (currentIndex < 0 || currentIndex >= order.length - 1) {\n return;\n }\n\n [order[currentIndex], order[currentIndex + 1]] = [order[currentIndex + 1], order[currentIndex]];\n this.columnOrder.set(order);\n }\n\n public isFirstMovableColumn(columnId: string): boolean {\n const order =\n this.columnOrder().length > 0 ? this.columnOrder() : this.table.getAllLeafColumns().map(col => col.id);\n const movableColumns = order.filter(\n id => id !== 'select' && id !== 'expand' && id !== 'actions' && id !== 'rowDrag'\n );\n return movableColumns.length > 0 && movableColumns[0] === columnId;\n }\n\n public isLastMovableColumn(columnId: string): boolean {\n const order =\n this.columnOrder().length > 0 ? this.columnOrder() : this.table.getAllLeafColumns().map(col => col.id);\n const movableColumns = order.filter(\n id => id !== 'select' && id !== 'expand' && id !== 'actions' && id !== 'rowDrag'\n );\n return movableColumns.length > 0 && movableColumns[movableColumns.length - 1] === columnId;\n }\n\n // ─── Settings Persistence ─────────────────────────────────────────────────\n\n /** Saves current column layout, sizing, pinning, and visibility to ZCacheService */\n private _saveConfig(): void {\n const key = this.zKey();\n if (!key) {\n return;\n }\n\n const columnInfo = this._collectColumnInfo();\n const config: ZTableSavedConfig = {\n columnOrder: this.columnOrder(),\n columnSizing: this.columnSizing(),\n columnPinning: {\n left: this.columnPinning().left,\n right: this.columnPinning().right,\n },\n columnVisibility: this.columnVisibility(),\n columnInfo,\n showHeaderFooterShadow: this.showHeaderFooterShadow(),\n showHorizontalBorder: this.showHorizontalBorder(),\n showVerticalBorder: this.showVerticalBorder(),\n };\n\n try {\n ZCacheService.set(`table-config-${key}`, config);\n } catch (error) {\n console.error('Failed to save table config:', error);\n }\n }\n\n private _collectColumnInfo(): ZTableSavedColumnInfo[] {\n const columns = this.zConfig().columns ?? [];\n const result: ZTableSavedColumnInfo[] = [];\n const collect = (cols: ZTableColumnConfig<T>[]): void => {\n for (const col of cols) {\n result.push({\n id: col.id,\n accessorKey: col.accessorKey,\n });\n if (col.columns) {\n collect(col.columns);\n }\n }\n };\n\n collect(columns);\n return result;\n }\n\n /** Loads cached config from ZCacheService; validates schema compatibility first */\n private _loadConfigCache(key: string): boolean {\n if (!key) {\n return false;\n }\n\n try {\n const config = ZCacheService.get<ZTableSavedConfig>(`table-config-${key}`);\n if (!config) {\n return false;\n }\n\n if (!this._isColumnConfigValid(config.columnInfo)) {\n ZCacheService.delete(`table-config-${key}`);\n return false;\n }\n\n if (config.columnOrder && config.columnOrder.length > 0) {\n this.columnOrder.set(config.columnOrder);\n }\n\n if (config.columnPinning) {\n this.columnPinning.set(config.columnPinning);\n }\n\n if (config.columnVisibility) {\n this.columnVisibility.set(config.columnVisibility);\n }\n\n if (typeof config.showHeaderFooterShadow === 'boolean') {\n this.showHeaderFooterShadow.set(config.showHeaderFooterShadow);\n }\n\n if (typeof config.showHorizontalBorder === 'boolean') {\n this.showHorizontalBorder.set(config.showHorizontalBorder);\n }\n\n if (typeof config.showVerticalBorder === 'boolean') {\n this.showVerticalBorder.set(config.showVerticalBorder);\n }\n\n if (config.columnSizing) {\n this.table.setColumnSizing(config.columnSizing!);\n }\n\n return true;\n } catch (error) {\n console.error('Failed to load table config:', error);\n return false;\n }\n }\n\n /**\n * Validates cached column info against current config.\n * Returns false if columns have been added/removed/renamed since cache was saved,\n * which triggers cache invalidation.\n */\n private _isColumnConfigValid(cachedColumnInfo?: ZTableSavedColumnInfo[]): boolean {\n if (!cachedColumnInfo || cachedColumnInfo.length === 0) {\n return true;\n }\n\n const currentColumnMap = new Map<string, string | undefined>();\n const columns = this.zConfig().columns ?? [];\n\n const collectColumns = (cols: ZTableColumnConfig<T>[]): void => {\n for (const col of cols) {\n currentColumnMap.set(col.id, col.accessorKey);\n if (col.columns) {\n collectColumns(col.columns);\n }\n }\n };\n\n collectColumns(columns);\n for (const cached of cachedColumnInfo) {\n if (!currentColumnMap.has(cached.id)) {\n return false;\n }\n if (currentColumnMap.get(cached.id) !== cached.accessorKey) {\n return false;\n }\n }\n\n return true;\n }\n\n // ─── Filter / Sort Mode Helpers ───────────────────────────────────────────\n // These helpers determine whether a column's sort/filter changes should be\n // processed locally by TanStack or emitted to the parent for server-side handling.\n\n private _getChangedFilterColumnIds(oldState: ColumnFiltersState, newState: ColumnFiltersState): string[] {\n const changedIds: string[] = [];\n const oldMap = new Map(oldState.map(f => [f.id, f.value]));\n const newMap = new Map(newState.map(f => [f.id, f.value]));\n\n for (const filter of newState) {\n const oldValue = oldMap.get(filter.id);\n if (JSON.stringify(oldValue) !== JSON.stringify(filter.value)) {\n changedIds.push(filter.id);\n }\n }\n\n for (const filter of oldState) {\n if (!newMap.has(filter.id)) {\n changedIds.push(filter.id);\n }\n }\n\n return [...new Set(changedIds)];\n }\n\n private _getChangedSortColumnIds(oldState: SortingState, newState: SortingState): string[] {\n const changedIds: string[] = [];\n const oldMap = new Map(oldState.map(s => [s.id, s.desc]));\n const newMap = new Map(newState.map(s => [s.id, s.desc]));\n\n for (const sort of newState) {\n const oldDesc = oldMap.get(sort.id);\n if (oldDesc !== sort.desc) {\n changedIds.push(sort.id);\n }\n }\n\n for (const sort of oldState) {\n if (!newMap.has(sort.id)) {\n changedIds.push(sort.id);\n }\n }\n\n return [...new Set(changedIds)];\n }\n\n private _isColumnFilterModeLocal(columnId: string): boolean {\n const columnConfig = this._findColumnConfig(columnId);\n if (!columnConfig) {\n return true;\n }\n\n const filterConfig =\n typeof columnConfig.filter === 'boolean' ? { enabled: columnConfig.filter } : columnConfig.filter;\n const filterMode = filterConfig?.mode ?? 'local';\n return filterMode === 'local';\n }\n\n private _isColumnSortModeLocal(columnId: string): boolean {\n const columnConfig = this._findColumnConfig(columnId);\n if (!columnConfig) {\n return true;\n }\n\n const sortConfig = typeof columnConfig.sort === 'boolean' ? { enabled: columnConfig.sort } : columnConfig.sort;\n const sortMode = sortConfig?.mode ?? 'local';\n return sortMode === 'local';\n }\n\n private _filterServerModeColumnFilters(filters: ColumnFiltersState): ColumnFiltersState {\n return filters.filter(filter => !this._isColumnFilterModeLocal(filter.id));\n }\n\n private _filterServerModeSorting(sorting: SortingState): SortingState {\n return sorting.filter(sort => !this._isColumnSortModeLocal(sort.id));\n }\n\n // ─── Column Config Lookup (Cached) ────────────────────────────────────────\n\n /**\n * Recursively finds a column config by ID with caching.\n * Cache is invalidated when the column array reference changes.\n */\n private _findColumnConfig(columnId: string): ZTableColumnConfig<T> | undefined {\n const { columns } = this.zConfig();\n if (columns !== this._lastColumnsRef) {\n this._columnConfigCache.clear();\n this._lastColumnsRef = columns;\n }\n\n if (this._columnConfigCache.has(columnId)) {\n return this._columnConfigCache.get(columnId);\n }\n\n const findInColumns = (cols: ZTableColumnConfig<T>[]): ZTableColumnConfig<T> | undefined => {\n for (const col of cols) {\n if (col.id === columnId) {\n return col;\n }\n if (col.columns) {\n const found = findInColumns(col.columns);\n if (found) {\n return found;\n }\n }\n }\n return undefined;\n };\n\n const result = findInColumns(columns);\n this._columnConfigCache.set(columnId, result);\n return result;\n }\n}\n","<!-- Toolbar: Search & Settings -->\n@if (isSearchEnabled() || zConfig().enableSettings) {\n <div class=\"z-table-toolbar mb-2 flex items-center justify-between gap-4\">\n <!-- Search -->\n @if (isSearchEnabled()) {\n @let config = searchConfig();\n <z-input\n [class]=\"config?.width ?? 'w-64'\"\n [zSize]=\"config?.size ?? 'sm'\"\n [zPlaceholder]=\"config?.placeholder ?? 'i18n_z_ui_table_search' | translate\"\n [zSearch]=\"true\"\n [zDebounce]=\"config?.debounceTime ?? 300\"\n (zOnSearch)=\"onSearchChange($event)\" />\n } @else {\n <div></div>\n }\n\n <!-- Settings Button -->\n @if (zConfig().enableSettings) {\n <z-button zType=\"outline\" zSize=\"sm\" zTypeIcon=\"lucideSettings\" (click)=\"openSettingsDrawer()\">\n {{ 'i18n_z_ui_table_settings' | translate }}\n </z-button>\n }\n </div>\n}\n\n<div\n [class]=\"classTable()\"\n [class.z-hide-horizontal-border]=\"!showHorizontalBorder()\"\n [class.z-hide-vertical-border]=\"!showVerticalBorder()\"\n [style.max-height]=\"zConfig().maxHeight\"\n [style.min-height]=\"zConfig().minHeight\">\n <!-- Shared colgroup template -->\n <ng-template #colGroupTpl>\n <colgroup>\n @if (canUseVirtualColumns()) {\n @for (column of leftLeafColumns(); track column.id) {\n @let customWidth = column.id | zTableColumnConfig: zConfig().columns : 'width';\n <col [style.width]=\"customWidth || 'calc(var(--col-' + column.id + '-size) * 1px)'\" />\n }\n @if (virtualLeftSpacerWidth() > 0) {\n <col [style.width.px]=\"virtualLeftSpacerWidth()\" />\n }\n @for (column of virtualCenterColumns(); track column.id) {\n @let customWidth = column.id | zTableColumnConfig: zConfig().columns : 'width';\n <col [style.width]=\"customWidth || 'calc(var(--col-' + column.id + '-size) * 1px)'\" />\n }\n @if (virtualRightSpacerWidth() > 0) {\n <col [style.width.px]=\"virtualRightSpacerWidth()\" />\n }\n @for (column of rightLeafColumns(); track column.id) {\n @let customWidth = column.id | zTableColumnConfig: zConfig().columns : 'width';\n <col [style.width]=\"customWidth || 'calc(var(--col-' + column.id + '-size) * 1px)'\" />\n }\n } @else {\n @for (column of orderedLeafColumns(); track column.id) {\n @if (column.getIsVisible()) {\n @let customWidth = column.id | zTableColumnConfig: zConfig().columns : 'width';\n <col [style.width]=\"customWidth || 'calc(var(--col-' + column.id + '-size) * 1px)'\" />\n }\n }\n }\n </colgroup>\n </ng-template>\n\n <!-- Header table -->\n <div\n class=\"z-thead-wrapper shadow-card\"\n [class.z-shadow-header]=\"shouldHeaderShowShadow()\"\n [class.z-scroll-left]=\"hasScrollLeft()\"\n [class.z-scroll-right]=\"hasScrollRight()\"\n #theadWrapper>\n <table [ngStyle]=\"columnSizeVars()\" [style.width.px]=\"table.getTotalSize()\">\n <ng-container *ngTemplateOutlet=\"colGroupTpl\" />\n <thead>\n @if (canUseVirtualColumns()) {\n <tr>\n @for (header of leftHeaderRow(); track header.id) {\n @let rowSpan = header | zTableSpan: zConfig().columns : 'headerRowSpan';\n @let shouldRender = header | zTableCellRender: leftHeaderRow() : zConfig().columns : 'header';\n @if (rowSpan && shouldRender) {\n <th\n [attr.id]=\"header.column.id\"\n [ngStyle]=\"\n header.column\n | zTablePinningStyles: header : 'header' : table : zConfig().columns : columnSizingInfo()\n \"\n [class]=\"\n (header.column.id | zTableColumnConfig: zConfig().columns : 'headerClass') +\n ' ' +\n (header.column.id | zTableColumnConfig: zConfig().columns : 'headerAlignClass')\n \"\n [style]=\"header.column.id | zTableColumnConfig: zConfig().columns : 'headerStyle'\"\n [class.z-sticky-left]=\"header.column.getIsPinned() === 'left'\"\n [class.z-sticky-right]=\"header.column.getIsPinned() === 'right'\"\n [class.z-sticky-left-last]=\"header | zTableCellPin: 'isLastLeftPinned' : zConfig().columns\"\n [class.z-sticky-right-first]=\"header | zTableCellPin: 'isFirstRightPinned' : zConfig().columns\"\n [class.z-sticky-right-last]=\"header | zTableCellPin: 'isLastRightPinned' : zConfig().columns\"\n [class.z-at-left-edge]=\"header | zTableCellOffset: orderedLeafColumns()\"\n [class.z-col-drag]=\"header.column.id === 'rowDrag'\"\n [class.z-col-select]=\"header.column.id === 'select'\"\n [class.z-col-expand]=\"header.column.id === 'expand'\"\n [class.z-col-actions]=\"\n header.column.id === 'actions' || header.column.id === actionColumnInfo()?.columnId\n \"\n [attr.rowspan]=\"rowSpan\"\n [attr.colspan]=\"header | zTableSpan: zConfig().columns : 'headerColSpan'\">\n @if (header.column.id === 'rowDrag') {\n <div class=\"flex items-center justify-center\">\n <z-icon zType=\"lucideGripVertical\" zSize=\"14\" class=\"text-muted-foreground opacity-70\" />\n </div>\n } @else if (header.column.id === 'select') {\n <div class=\"flex items-center justify-center\">\n <z-checkbox\n [zChecked]=\"table.getIsAllRowsSelected()\"\n [zIndeterminate]=\"table.getIsSomeRowsSelected() && !table.getIsAllRowsSelected()\"\n (zChange)=\"table.toggleAllRowsSelected()\" />\n </div>\n } @else if (header.column.id === 'expand') {\n <div class=\"flex items-center justify-center\">\n <button\n type=\"button\"\n (click)=\"table.toggleAllRowsExpanded()\"\n class=\"hover:bg-muted flex h-6 w-6 cursor-pointer items-center justify-center rounded\">\n <z-icon\n zType=\"lucideChevronRight\"\n zSize=\"14\"\n class=\"transition-transform duration-200\"\n [class.rotate-90]=\"table.getIsSomeRowsExpanded()\" />\n </button>\n </div>\n } @else {\n <div\n class=\"flex w-full items-center gap-1\"\n [class.justify-center]=\"\n (header.column.id | zTableColumnConfig: zConfig().columns : 'headerAlignClass') ===\n 'text-center'\n \"\n [class.justify-end]=\"\n (header.column.id | zTableColumnConfig: zConfig().columns : 'headerAlignClass') === 'text-right'\n \">\n @let columnEnableOrdering =\n header.column.id | zTableColumnConfig: zConfig().columns : 'enableOrdering';\n @let columnEnablePinning =\n header.column.id | zTableColumnConfig: zConfig().columns : 'enablePinning';\n @let effectiveEnableOrdering = columnEnableOrdering || zConfig().enableColumnOrdering;\n @let effectiveEnablePinning = columnEnablePinning || zConfig().enableColumnPinning;\n <ng-template #colOptionsPopoverContent>\n <div class=\"flex flex-col gap-0.5 p-0.5\">\n @if (effectiveEnableOrdering) {\n <button\n type=\"button\"\n [disabled]=\"isFirstMovableColumn(header.column.id) || header.column.getIsPinned()\"\n (click)=\"moveColumnLeft(header.column.id); colOptionsPopover.hideImmediate()\"\n class=\"text-foreground hover:bg-muted flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs disabled:pointer-events-none disabled:opacity-40\">\n <z-icon zType=\"lucideArrowLeft\" zSize=\"12\" />\n <span>{{ 'i18n_z_ui_table_move_left' | translate }}</span>\n </button>\n <button\n type=\"button\"\n [disabled]=\"isLastMovableColumn(header.column.id) || header.column.getIsPinned()\"\n (click)=\"moveColumnRight(header.column.id); colOptionsPopover.hideImmediate()\"\n class=\"text-foreground hover:bg-muted flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs disabled:pointer-events-none disabled:opacity-40\">\n <z-icon zType=\"lucideArrowRight\" zSize=\"12\" />\n <span>{{ 'i18n_z_ui_table_move_right' | translate }}</span>\n </button>\n }\n @if (effectiveEnableOrdering && header.column.getCanPin() && effectiveEnablePinning) {\n <div class=\"border-border my-0.5 border-t\"></div>\n }\n @if (header.column.getCanPin() && effectiveEnablePinning) {\n @if (header.column.getIsPinned() !== 'left') {\n <button\n type=\"button\"\n (click)=\"handleColumnPin(header.column.id, 'left'); colOptionsPopover.hideImmediate()\"\n class=\"text-foreground hover:bg-muted flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs\">\n <z-icon zType=\"lucidePin\" zSize=\"12\" class=\"rotate-90\" />\n <span>{{ 'i18n_z_ui_table_pin_left' | translate }}</span>\n </button>\n }\n @if (header.column.getIsPinned() !== 'right') {\n <button\n type=\"button\"\n (click)=\"handleColumnPin(header.column.id, 'right'); colOptionsPopover.hideImmediate()\"\n class=\"text-foreground hover:bg-muted flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs\">\n <z-icon zType=\"lucidePin\" zSize=\"12\" class=\"-rotate-90\" />\n <span>{{ 'i18n_z_ui_table_pin_right' | translate }}</span>\n </button>\n }\n @if (header.column.getIsPinned()) {\n <button\n type=\"button\"\n (click)=\"handleColumnPin(header.column.id, false); colOptionsPopover.hideImmediate()\"\n class=\"text-destructive hover:bg-destructive/10 flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs\">\n <z-icon zType=\"lucideX\" zSize=\"12\" />\n <span>{{ 'i18n_z_ui_table_unpin' | translate }}</span>\n </button>\n }\n }\n </div>\n </ng-template>\n\n @let hasColumnOptions =\n (header.column.getCanPin() && effectiveEnablePinning) || effectiveEnableOrdering;\n <div\n class=\"z-header-text-wrapper inline-flex max-w-full items-center gap-1 rounded px-1.5 py-1\"\n [class.cursor-pointer]=\"hasColumnOptions\"\n [class.z-has-options]=\"hasColumnOptions\"\n [attr.z-popover]=\"hasColumnOptions ? '' : null\"\n #colOptionsPopover=\"zPopover\"\n #headerTextWrapper\n z-popover\n [zPopoverContent]=\"hasColumnOptions ? colOptionsPopoverContent : null\"\n zTrigger=\"click\"\n zPosition=\"bottom\"\n [zOffset]=\"5\">\n <ng-container\n *flexRender=\"header.column.columnDef.header; props: header.getContext(); let headerContent\">\n @if (headerContent | zTableIsTemplateRef) {\n <div\n class=\"z-template-content\"\n [ngClass]=\"\n header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentClass'\n \"\n [ngStyle]=\"\n header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentStyle'\n \">\n <ng-container\n *ngTemplateOutlet=\"headerContent; context: { $implicit: header.getContext() }\" />\n </div>\n } @else if (headerContent | zTableHasIcon) {\n <z-table-icon-text\n class=\"min-w-0 truncate\"\n [zText]=\"headerContent\"\n [zTooltip]=\"header.column.id | zTableColumnConfig: zConfig().columns : 'headerTooltip'\"\n [zTriggerElement]=\"headerTextWrapper\"\n [ngClass]=\"\n header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentClass'\n \"\n [ngStyle]=\"\n header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentStyle'\n \" />\n } @else {\n <span\n class=\"z-table-cell-text\"\n z-tooltip\n [zContent]=\"\n (header.column.id | zTableColumnConfig: zConfig().columns : 'headerTooltip') ||\n headerContent\n \"\n [zTriggerElement]=\"headerTextWrapper\"\n [innerHTML]=\"headerContent | translate | zSafeHtml\"\n [ngClass]=\"\n header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentClass'\n \"\n [ngStyle]=\"\n header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentStyle'\n \"></span>\n }\n </ng-container>\n @if (hasColumnOptions) {\n <z-icon zType=\"lucideChevronDown\" zSize=\"15\" class=\"text-muted-foreground shrink-0\" />\n }\n </div>\n @if (header.column.getCanSort() && !hasBodyRowSpan()) {\n <span\n class=\"z-sort-icon shrink-0 cursor-pointer text-gray-500 hover:text-gray-700\"\n (click)=\"handleSort($event, header.column.getToggleSortingHandler())\">\n @if (header.column.getIsSorted() === 'asc') {\n <z-icon zType=\"lucideArrowUp\" zSize=\"15\" />\n } @else if (header.column.getIsSorted() === 'desc') {\n <z-icon zType=\"lucideArrowDown\" zSize=\"15\" />\n } @else {\n <z-icon zType=\"lucideArrowDownUp\" zSize=\"15\" class=\"opacity-60\" />\n }\n </span>\n }\n </div>\n }\n @if (header.column.getCanFilter() && hasFiltering()) {\n <div class=\"mt-1\">\n <z-table-filter [zColumn]=\"$any(header.column)\" [zTable]=\"$any(table)\" />\n </div>\n }\n @if (\n header.column.id !== 'rowDrag' &&\n header.column.id !== 'select' &&\n header.column.id !== 'expand' &&\n zConfig().enableColumnResizing !== false\n ) {\n <div\n class=\"z-resizer\"\n [class.z-is-resizing]=\"header.column.getIsResizing()\"\n [class.z-resizer-left]=\"\n header.column.getIsPinned() === 'right' || header.column.getIsLastColumn()\n \"\n (dblclick)=\"header.column.resetSize()\"\n [zTableResize]=\"header\"></div>\n }\n </th>\n }\n }\n @if (virtualLeftSpacerWidth() > 0) {\n <th class=\"pointer-events-none border-0 p-0\" [style.width.px]=\"virtualLeftSpacerWidth()\"></th>\n }\n @for (header of virtualCenterHeaderRow(); track header.id) {\n @let rowSpan = header | zTableSpan: zConfig().columns : 'headerRowSpan';\n @let shouldRender = header | zTableCellRender: virtualCenterHeaderRow() : zConfig().columns : 'header';\n @if (rowSpan && shouldRender) {\n <th\n [attr.id]=\"header.column.id\"\n [class]=\"\n (header.column.id | zTableColumnConfig: zConfig().columns : 'headerClass') +\n ' ' +\n (header.column.id | zTableColumnConfig: zConfig().columns : 'headerAlignClass')\n \"\n [style]=\"header.column.id | zTableColumnConfig: zConfig().columns : 'headerStyle'\"\n [class.z-col-drag]=\"header.column.id === 'rowDrag'\"\n [class.z-col-select]=\"header.column.id === 'select'\"\n [class.z-col-expand]=\"header.column.id === 'expand'\"\n [class.z-col-actions]=\"\n header.column.id === 'actions' || header.column.id === actionColumnInfo()?.columnId\n \"\n [attr.rowspan]=\"rowSpan\"\n [attr.colspan]=\"header | zTableSpan: zConfig().columns : 'headerColSpan'\">\n @if (header.column.id === 'rowDrag') {\n <div class=\"flex items-center justify-center\">\n <z-icon zType=\"lucideGripVertical\" zSize=\"14\" class=\"text-muted-foreground opacity-70\" />\n </div>\n } @else if (header.column.id === 'select') {\n <div class=\"flex items-center justify-center\">\n <z-checkbox\n [zChecked]=\"table.getIsAllRowsSelected()\"\n [zIndeterminate]=\"table.getIsSomeRowsSelected() && !table.getIsAllRowsSelected()\"\n (zChange)=\"table.toggleAllRowsSelected()\" />\n </div>\n } @else if (header.column.id === 'expand') {\n <div class=\"flex items-center justify-center\">\n <button\n type=\"button\"\n (click)=\"table.toggleAllRowsExpanded()\"\n class=\"hover:bg-muted flex h-6 w-6 cursor-pointer items-center justify-center rounded\">\n <z-icon\n zType=\"lucideChevronRight\"\n zSize=\"14\"\n class=\"transition-transform duration-200\"\n [class.rotate-90]=\"table.getIsSomeRowsExpanded()\" />\n </button>\n </div>\n } @else {\n <div\n class=\"flex w-full items-center gap-1\"\n [class.justify-center]=\"\n (header.column.id | zTableColumnConfig: zConfig().columns : 'headerAlignClass') ===\n 'text-center'\n \"\n [class.justify-end]=\"\n (header.column.id | zTableColumnConfig: zConfig().columns : 'headerAlignClass') === 'text-right'\n \">\n @let columnEnableOrdering =\n header.column.id | zTableColumnConfig: zConfig().columns : 'enableOrdering';\n @let columnEnablePinning =\n header.column.id | zTableColumnConfig: zConfig().columns : 'enablePinning';\n @let effectiveEnableOrdering = columnEnableOrdering || zConfig().enableColumnOrdering;\n @let effectiveEnablePinning = columnEnablePinning || zConfig().enableColumnPinning;\n <ng-template #colOptionsPopoverContent>\n <div class=\"flex flex-col gap-0.5 p-0.5\">\n @if (effectiveEnableOrdering) {\n <button\n type=\"button\"\n [disabled]=\"isFirstMovableColumn(header.column.id) || header.column.getIsPinned()\"\n (click)=\"moveColumnLeft(header.column.id); colOptionsPopover.hideImmediate()\"\n class=\"text-foreground hover:bg-muted flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs disabled:pointer-events-none disabled:opacity-40\">\n <z-icon zType=\"lucideArrowLeft\" zSize=\"12\" />\n <span>{{ 'i18n_z_ui_table_move_left' | translate }}</span>\n </button>\n <button\n type=\"button\"\n [disabled]=\"isLastMovableColumn(header.column.id) || header.column.getIsPinned()\"\n (click)=\"moveColumnRight(header.column.id); colOptionsPopover.hideImmediate()\"\n class=\"text-foreground hover:bg-muted flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs disabled:pointer-events-none disabled:opacity-40\">\n <z-icon zType=\"lucideArrowRight\" zSize=\"12\" />\n <span>{{ 'i18n_z_ui_table_move_right' | translate }}</span>\n </button>\n }\n @if (effectiveEnableOrdering && header.column.getCanPin() && effectiveEnablePinning) {\n <div class=\"border-border my-0.5 border-t\"></div>\n }\n @if (header.column.getCanPin() && effectiveEnablePinning) {\n @if (header.column.getIsPinned() !== 'left') {\n <button\n type=\"button\"\n (click)=\"handleColumnPin(header.column.id, 'left'); colOptionsPopover.hideImmediate()\"\n class=\"text-foreground hover:bg-muted flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs\">\n <z-icon zType=\"lucidePin\" zSize=\"12\" class=\"rotate-90\" />\n <span>{{ 'i18n_z_ui_table_pin_left' | translate }}</span>\n </button>\n }\n @if (header.column.getIsPinned() !== 'right') {\n <button\n type=\"button\"\n (click)=\"handleColumnPin(header.column.id, 'right'); colOptionsPopover.hideImmediate()\"\n class=\"text-foreground hover:bg-muted flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs\">\n <z-icon zType=\"lucidePin\" zSize=\"12\" class=\"-rotate-90\" />\n <span>{{ 'i18n_z_ui_table_pin_right' | translate }}</span>\n </button>\n }\n @if (header.column.getIsPinned()) {\n <button\n type=\"button\"\n (click)=\"handleColumnPin(header.column.id, false); colOptionsPopover.hideImmediate()\"\n class=\"text-destructive hover:bg-destructive/10 flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs\">\n <z-icon zType=\"lucideX\" zSize=\"12\" />\n <span>{{ 'i18n_z_ui_table_unpin' | translate }}</span>\n </button>\n }\n }\n </div>\n </ng-template>\n\n @let hasColumnOptions =\n (header.column.getCanPin() && effectiveEnablePinning) || effectiveEnableOrdering;\n <div\n class=\"z-header-text-wrapper inline-flex max-w-full items-center gap-1 rounded px-1.5 py-1\"\n [class.cursor-pointer]=\"hasColumnOptions\"\n [class.z-has-options]=\"hasColumnOptions\"\n [attr.z-popover]=\"hasColumnOptions ? '' : null\"\n #colOptionsPopover=\"zPopover\"\n #headerTextWrapper\n z-popover\n [zPopoverContent]=\"hasColumnOptions ? colOptionsPopoverContent : null\"\n zTrigger=\"click\"\n zPosition=\"bottom\"\n [zOffset]=\"5\">\n <ng-container\n *flexRender=\"header.column.columnDef.header; props: header.getContext(); let headerContent\">\n @if (headerContent | zTableIsTemplateRef) {\n <div\n class=\"z-template-content\"\n [ngClass]=\"\n header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentClass'\n \"\n [ngStyle]=\"\n header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentStyle'\n \">\n <ng-container\n *ngTemplateOutlet=\"headerContent; context: { $implicit: header.getContext() }\" />\n </div>\n } @else if (headerContent | zTableHasIcon) {\n <z-table-icon-text\n class=\"min-w-0 truncate\"\n [zText]=\"headerContent\"\n [zTooltip]=\"header.column.id | zTableColumnConfig: zConfig().columns : 'headerTooltip'\"\n [zTriggerElement]=\"headerTextWrapper\"\n [ngClass]=\"\n header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentClass'\n \"\n [ngStyle]=\"\n header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentStyle'\n \" />\n } @else {\n <span\n class=\"z-table-cell-text\"\n z-tooltip\n [zContent]=\"\n (header.column.id | zTableColumnConfig: zConfig().columns : 'headerTooltip') ||\n headerContent\n \"\n [zTriggerElement]=\"headerTextWrapper\"\n [innerHTML]=\"headerContent | translate | zSafeHtml\"\n [ngClass]=\"\n header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentClass'\n \"\n [ngStyle]=\"\n header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentStyle'\n \"></span>\n }\n </ng-container>\n @if (hasColumnOptions) {\n <z-icon zType=\"lucideChevronDown\" zSize=\"15\" class=\"text-muted-foreground shrink-0\" />\n }\n </div>\n @if (header.column.getCanSort() && !hasBodyRowSpan()) {\n <span\n class=\"z-sort-icon shrink-0 cursor-pointer text-gray-500 hover:text-gray-700\"\n (click)=\"handleSort($event, header.column.getToggleSortingHandler())\">\n @if (header.column.getIsSorted() === 'asc') {\n <z-icon zType=\"lucideArrowUp\" zSize=\"15\" />\n } @else if (header.column.getIsSorted() === 'desc') {\n <z-icon zType=\"lucideArrowDown\" zSize=\"15\" />\n } @else {\n <z-icon zType=\"lucideArrowDownUp\" zSize=\"15\" class=\"opacity-60\" />\n }\n </span>\n }\n </div>\n }\n @if (header.column.getCanFilter() && hasFiltering()) {\n <div class=\"mt-1\">\n <z-table-filter [zColumn]=\"$any(header.column)\" [zTable]=\"$any(table)\" />\n </div>\n }\n @if (\n header.column.id !== 'rowDrag' &&\n header.column.id !== 'select' &&\n header.column.id !== 'expand' &&\n zConfig().enableColumnResizing !== false\n ) {\n <div\n class=\"z-resizer\"\n [class.z-is-resizing]=\"header.column.getIsResizing()\"\n [class.z-resizer-left]=\"\n header.column.getIsPinned() === 'right' || header.column.getIsLastColumn()\n \"\n (dblclick)=\"header.column.resetSize()\"\n [zTableResize]=\"header\"></div>\n }\n </th>\n }\n }\n @if (virtualRightSpacerWidth() > 0) {\n <th class=\"pointer-events-none border-0 p-0\" [style.width.px]=\"virtualRightSpacerWidth()\"></th>\n }\n @for (header of rightHeaderRow(); track header.id) {\n @let rowSpan = header | zTableSpan: zConfig().columns : 'headerRowSpan';\n @let shouldRender = header | zTableCellRender: rightHeaderRow() : zConfig().columns : 'header';\n @if (rowSpan && shouldRender) {\n <th\n [attr.id]=\"header.column.id\"\n [ngStyle]=\"\n header.column\n | zTablePinningStyles: header : 'header' : table : zConfig().columns : columnSizingInfo()\n \"\n [class]=\"\n (header.column.id | zTableColumnConfig: zConfig().columns : 'headerClass') +\n ' ' +\n (header.column.id | zTableColumnConfig: zConfig().columns : 'headerAlignClass')\n \"\n [style]=\"header.column.id | zTableColumnConfig: zConfig().columns : 'headerStyle'\"\n [class.z-sticky-left]=\"header.column.getIsPinned() === 'left'\"\n [class.z-sticky-right]=\"header.column.getIsPinned() === 'right'\"\n [class.z-sticky-left-last]=\"header | zTableCellPin: 'isLastLeftPinned' : zConfig().columns\"\n [class.z-sticky-right-first]=\"header | zTableCellPin: 'isFirstRightPinned' : zConfig().columns\"\n [class.z-sticky-right-last]=\"header | zTableCellPin: 'isLastRightPinned' : zConfig().columns\"\n [class.z-at-left-edge]=\"header | zTableCellOffset: orderedLeafColumns()\"\n [class.z-col-drag]=\"header.column.id === 'rowDrag'\"\n [class.z-col-select]=\"header.column.id === 'select'\"\n [class.z-col-expand]=\"header.column.id === 'expand'\"\n [class.z-col-actions]=\"\n header.column.id === 'actions' || header.column.id === actionColumnInfo()?.columnId\n \"\n [attr.rowspan]=\"rowSpan\"\n [attr.colspan]=\"header | zTableSpan: zConfig().columns : 'headerColSpan'\">\n @if (header.column.id === 'rowDrag') {\n <div class=\"flex items-center justify-center\">\n <z-icon zType=\"lucideGripVertical\" zSize=\"14\" class=\"text-muted-foreground opacity-70\" />\n </div>\n } @else if (header.column.id === 'select') {\n <!-- Header Checkbox -->\n <div class=\"flex items-center justify-center\">\n <z-checkbox\n [zChecked]=\"table.getIsAllRowsSelected()\"\n [zIndeterminate]=\"table.getIsSomeRowsSelected() && !table.getIsAllRowsSelected()\"\n (zChange)=\"table.toggleAllRowsSelected()\" />\n </div>\n } @else if (header.column.id === 'expand') {\n <!-- Expand All Button -->\n <div class=\"flex items-center justify-center\">\n <button\n type=\"button\"\n (click)=\"table.toggleAllRowsExpanded()\"\n class=\"hover:bg-muted flex h-6 w-6 cursor-pointer items-center justify-center rounded\">\n <z-icon\n zType=\"lucideChevronRight\"\n zSize=\"14\"\n class=\"transition-transform duration-200\"\n [class.rotate-90]=\"table.getIsSomeRowsExpanded()\" />\n </button>\n </div>\n } @else {\n <!-- Header Content with Sort and Pin -->\n <div\n class=\"flex w-full items-center gap-1\"\n [class.justify-center]=\"\n (header.column.id | zTableColumnConfig: zConfig().columns : 'headerAlignClass') ===\n 'text-center'\n \"\n [class.justify-end]=\"\n (header.column.id | zTableColumnConfig: zConfig().columns : 'headerAlignClass') === 'text-right'\n \">\n <!-- Column Options Popover Template -->\n @let columnEnableOrdering =\n header.column.id | zTableColumnConfig: zConfig().columns : 'enableOrdering';\n @let columnEnablePinning =\n header.column.id | zTableColumnConfig: zConfig().columns : 'enablePinning';\n @let effectiveEnableOrdering = columnEnableOrdering || zConfig().enableColumnOrdering;\n @let effectiveEnablePinning = columnEnablePinning || zConfig().enableColumnPinning;\n <ng-template #colOptionsPopoverContent>\n <div class=\"flex flex-col gap-0.5 p-0.5\">\n @if (effectiveEnableOrdering) {\n <button\n type=\"button\"\n [disabled]=\"isFirstMovableColumn(header.column.id) || header.column.getIsPinned()\"\n (click)=\"moveColumnLeft(header.column.id); colOptionsPopover.hideImmediate()\"\n class=\"text-foreground hover:bg-muted flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs disabled:pointer-events-none disabled:opacity-40\">\n <z-icon zType=\"lucideArrowLeft\" zSize=\"12\" />\n <span>{{ 'i18n_z_ui_table_move_left' | translate }}</span>\n </button>\n <button\n type=\"button\"\n [disabled]=\"isLastMovableColumn(header.column.id) || header.column.getIsPinned()\"\n (click)=\"moveColumnRight(header.column.id); colOptionsPopover.hideImmediate()\"\n class=\"text-foreground hover:bg-muted flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs disabled:pointer-events-none disabled:opacity-40\">\n <z-icon zType=\"lucideArrowRight\" zSize=\"12\" />\n <span>{{ 'i18n_z_ui_table_move_right' | translate }}</span>\n </button>\n }\n @if (effectiveEnableOrdering && header.column.getCanPin() && effectiveEnablePinning) {\n <div class=\"border-border my-0.5 border-t\"></div>\n }\n @if (header.column.getCanPin() && effectiveEnablePinning) {\n @if (header.column.getIsPinned() !== 'left') {\n <button\n type=\"button\"\n (click)=\"handleColumnPin(header.column.id, 'left'); colOptionsPopover.hideImmediate()\"\n class=\"text-foreground hover:bg-muted flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs\">\n <z-icon zType=\"lucidePin\" zSize=\"12\" class=\"rotate-90\" />\n <span>{{ 'i18n_z_ui_table_pin_left' | translate }}</span>\n </button>\n }\n @if (header.column.getIsPinned() !== 'right') {\n <button\n type=\"button\"\n (click)=\"handleColumnPin(header.column.id, 'right'); colOptionsPopover.hideImmediate()\"\n class=\"text-foreground hover:bg-muted flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs\">\n <z-icon zType=\"lucidePin\" zSize=\"12\" class=\"-rotate-90\" />\n <span>{{ 'i18n_z_ui_table_pin_right' | translate }}</span>\n </button>\n }\n @if (header.column.getIsPinned()) {\n <button\n type=\"button\"\n (click)=\"handleColumnPin(header.column.id, false); colOptionsPopover.hideImmediate()\"\n class=\"text-destructive hover:bg-destructive/10 flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs\">\n <z-icon zType=\"lucideX\" zSize=\"12\" />\n <span>{{ 'i18n_z_ui_table_unpin' | translate }}</span>\n </button>\n }\n }\n </div>\n </ng-template>\n\n <!-- Header Text with Popover Trigger -->\n @let hasColumnOptions =\n (header.column.getCanPin() && effectiveEnablePinning) || effectiveEnableOrdering;\n <div\n class=\"z-header-text-wrapper inline-flex max-w-full items-center gap-1 rounded px-1.5 py-1\"\n [class.cursor-pointer]=\"hasColumnOptions\"\n [class.z-has-options]=\"hasColumnOptions\"\n [attr.z-popover]=\"hasColumnOptions ? '' : null\"\n #colOptionsPopover=\"zPopover\"\n #headerTextWrapper\n z-popover\n [zPopoverContent]=\"hasColumnOptions ? colOptionsPopoverContent : null\"\n zTrigger=\"click\"\n zPosition=\"bottom\"\n [zOffset]=\"5\">\n <ng-container\n *flexRender=\"header.column.columnDef.header; props: header.getContext(); let headerContent\">\n @if (headerContent | zTableIsTemplateRef) {\n <div\n class=\"z-template-content\"\n [ngClass]=\"\n header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentClass'\n \"\n [ngStyle]=\"\n header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentStyle'\n \">\n <ng-container\n *ngTemplateOutlet=\"headerContent; context: { $implicit: header.getContext() }\" />\n </div>\n } @else if (headerContent | zTableHasIcon) {\n <z-table-icon-text\n class=\"min-w-0 truncate\"\n [zText]=\"headerContent\"\n [zTooltip]=\"header.column.id | zTableColumnConfig: zConfig().columns : 'headerTooltip'\"\n [zTriggerElement]=\"headerTextWrapper\"\n [ngClass]=\"\n header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentClass'\n \"\n [ngStyle]=\"\n header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentStyle'\n \" />\n } @else {\n <span\n class=\"z-table-cell-text\"\n z-tooltip\n [zContent]=\"\n (header.column.id | zTableColumnConfig: zConfig().columns : 'headerTooltip') ||\n headerContent\n \"\n [zTriggerElement]=\"headerTextWrapper\"\n [innerHTML]=\"headerContent | translate | zSafeHtml\"\n [ngClass]=\"\n header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentClass'\n \"\n [ngStyle]=\"\n header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentStyle'\n \"></span>\n }\n </ng-container>\n <!-- Dropdown indicator when has options (between text and sort icon) -->\n @if (hasColumnOptions) {\n <z-icon zType=\"lucideChevronDown\" zSize=\"15\" class=\"text-muted-foreground shrink-0\" />\n }\n </div>\n <!-- Sort Icon (outside wrapper, no hover background) -->\n @if (header.column.getCanSort() && !hasBodyRowSpan()) {\n <span\n class=\"z-sort-icon shrink-0 cursor-pointer text-gray-500 hover:text-gray-700\"\n (click)=\"handleSort($event, header.column.getToggleSortingHandler())\">\n @if (header.column.getIsSorted() === 'asc') {\n <z-icon zType=\"lucideArrowUp\" zSize=\"15\" />\n } @else if (header.column.getIsSorted() === 'desc') {\n <z-icon zType=\"lucideArrowDown\" zSize=\"15\" />\n } @else {\n <z-icon zType=\"lucideArrowDownUp\" zSize=\"15\" class=\"opacity-60\" />\n }\n </span>\n }\n </div>\n }\n <!-- Column Filter -->\n @if (header.column.getCanFilter() && hasFiltering()) {\n <div class=\"mt-1\">\n <z-table-filter [zColumn]=\"$any(header.column)\" [zTable]=\"$any(table)\" />\n </div>\n }\n <!-- Column Resizer -->\n @if (\n header.column.id !== 'rowDrag' &&\n header.column.id !== 'select' &&\n header.column.id !== 'expand' &&\n zConfig().enableColumnResizing !== false\n ) {\n <div\n class=\"z-resizer\"\n [class.z-is-resizing]=\"header.column.getIsResizing()\"\n [class.z-resizer-left]=\"\n header.column.getIsPinned() === 'right' || header.column.getIsLastColumn()\n \"\n (dblclick)=\"header.column.resetSize()\"\n [zTableResize]=\"header\"></div>\n }\n </th>\n }\n }\n </tr>\n } @else {\n @for (headerGroup of orderedHeaderGroups(); track headerGroup.id) {\n <tr>\n @for (header of headerGroup.headers; track header.id) {\n @let rowSpan = header | zTableSpan: zConfig().columns : 'headerRowSpan';\n @let shouldRender = header | zTableCellRender: headerGroup.headers : zConfig().columns : 'header';\n @if (rowSpan && shouldRender) {\n <th\n [attr.id]=\"header.column.id\"\n [ngStyle]=\"\n header.column\n | zTablePinningStyles: header : 'header' : table : zConfig().columns : columnSizingInfo()\n \"\n [class]=\"\n (header.column.id | zTableColumnConfig: zConfig().columns : 'headerClass') +\n ' ' +\n (header.column.id | zTableColumnConfig: zConfig().columns : 'headerAlignClass')\n \"\n [style]=\"header.column.id | zTableColumnConfig: zConfig().columns : 'headerStyle'\"\n [class.z-sticky-left]=\"header.column.getIsPinned() === 'left'\"\n [class.z-sticky-right]=\"header.column.getIsPinned() === 'right'\"\n [class.z-sticky-left-last]=\"header | zTableCellPin: 'isLastLeftPinned' : zConfig().columns\"\n [class.z-sticky-right-first]=\"header | zTableCellPin: 'isFirstRightPinned' : zConfig().columns\"\n [class.z-sticky-right-last]=\"header | zTableCellPin: 'isLastRightPinned' : zConfig().columns\"\n [class.z-at-left-edge]=\"header | zTableCellOffset: orderedLeafColumns()\"\n [class.z-col-drag]=\"header.column.id === 'rowDrag'\"\n [class.z-col-select]=\"header.column.id === 'select'\"\n [class.z-col-expand]=\"header.column.id === 'expand'\"\n [class.z-col-actions]=\"\n header.column.id === 'actions' || header.column.id === actionColumnInfo()?.columnId\n \"\n [attr.rowspan]=\"rowSpan\"\n [attr.colspan]=\"header | zTableSpan: zConfig().columns : 'headerColSpan'\">\n @if (header.column.id === 'rowDrag') {\n <div class=\"flex items-center justify-center\">\n <z-icon zType=\"lucideGripVertical\" zSize=\"14\" class=\"text-muted-foreground opacity-70\" />\n </div>\n } @else if (header.column.id === 'select') {\n <div class=\"flex items-center justify-center\">\n <z-checkbox\n [zChecked]=\"table.getIsAllRowsSelected()\"\n [zIndeterminate]=\"table.getIsSomeRowsSelected() && !table.getIsAllRowsSelected()\"\n (zChange)=\"table.toggleAllRowsSelected()\" />\n </div>\n } @else if (header.column.id === 'expand') {\n <div class=\"flex items-center justify-center\">\n <button\n type=\"button\"\n (click)=\"table.toggleAllRowsExpanded()\"\n class=\"hover:bg-muted flex h-6 w-6 cursor-pointer items-center justify-center rounded\">\n <z-icon\n zType=\"lucideChevronRight\"\n zSize=\"14\"\n class=\"transition-transform duration-200\"\n [class.rotate-90]=\"table.getIsSomeRowsExpanded()\" />\n </button>\n </div>\n } @else {\n <div\n class=\"flex w-full items-center gap-1\"\n [class.justify-center]=\"\n (header.column.id | zTableColumnConfig: zConfig().columns : 'headerAlignClass') ===\n 'text-center'\n \"\n [class.justify-end]=\"\n (header.column.id | zTableColumnConfig: zConfig().columns : 'headerAlignClass') ===\n 'text-right'\n \">\n @let columnEnableOrdering =\n header.column.id | zTableColumnConfig: zConfig().columns : 'enableOrdering';\n @let columnEnablePinning =\n header.column.id | zTableColumnConfig: zConfig().columns : 'enablePinning';\n @let effectiveEnableOrdering = columnEnableOrdering || zConfig().enableColumnOrdering;\n @let effectiveEnablePinning = columnEnablePinning || zConfig().enableColumnPinning;\n <ng-template #colOptionsPopoverContent>\n <div class=\"flex flex-col gap-0.5 p-0.5\">\n @if (effectiveEnableOrdering) {\n <button\n type=\"button\"\n [disabled]=\"isFirstMovableColumn(header.column.id) || header.column.getIsPinned()\"\n (click)=\"moveColumnLeft(header.column.id); colOptionsPopover.hideImmediate()\"\n class=\"text-foreground hover:bg-muted flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs disabled:pointer-events-none disabled:opacity-40\">\n <z-icon zType=\"lucideArrowLeft\" zSize=\"12\" />\n <span>{{ 'i18n_z_ui_table_move_left' | translate }}</span>\n </button>\n <button\n type=\"button\"\n [disabled]=\"isLastMovableColumn(header.column.id) || header.column.getIsPinned()\"\n (click)=\"moveColumnRight(header.column.id); colOptionsPopover.hideImmediate()\"\n class=\"text-foreground hover:bg-muted flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs disabled:pointer-events-none disabled:opacity-40\">\n <z-icon zType=\"lucideArrowRight\" zSize=\"12\" />\n <span>{{ 'i18n_z_ui_table_move_right' | translate }}</span>\n </button>\n }\n @if (effectiveEnableOrdering && header.column.getCanPin() && effectiveEnablePinning) {\n <div class=\"border-border my-0.5 border-t\"></div>\n }\n @if (header.column.getCanPin() && effectiveEnablePinning) {\n @if (header.column.getIsPinned() !== 'left') {\n <button\n type=\"button\"\n (click)=\"handleColumnPin(header.column.id, 'left'); colOptionsPopover.hideImmediate()\"\n class=\"text-foreground hover:bg-muted flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs\">\n <z-icon zType=\"lucidePin\" zSize=\"12\" class=\"rotate-90\" />\n <span>{{ 'i18n_z_ui_table_pin_left' | translate }}</span>\n </button>\n }\n @if (header.column.getIsPinned() !== 'right') {\n <button\n type=\"button\"\n (click)=\"\n handleColumnPin(header.column.id, 'right'); colOptionsPopover.hideImmediate()\n \"\n class=\"text-foreground hover:bg-muted flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs\">\n <z-icon zType=\"lucidePin\" zSize=\"12\" class=\"-rotate-90\" />\n <span>{{ 'i18n_z_ui_table_pin_right' | translate }}</span>\n </button>\n }\n @if (header.column.getIsPinned()) {\n <button\n type=\"button\"\n (click)=\"handleColumnPin(header.column.id, false); colOptionsPopover.hideImmediate()\"\n class=\"text-destructive hover:bg-destructive/10 flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs\">\n <z-icon zType=\"lucideX\" zSize=\"12\" />\n <span>{{ 'i18n_z_ui_table_unpin' | translate }}</span>\n </button>\n }\n }\n </div>\n </ng-template>\n\n @let hasColumnOptions =\n (header.column.getCanPin() && effectiveEnablePinning) || effectiveEnableOrdering;\n <div\n class=\"z-header-text-wrapper inline-flex max-w-full items-center gap-1 rounded px-1.5 py-1\"\n [class.cursor-pointer]=\"hasColumnOptions\"\n [class.z-has-options]=\"hasColumnOptions\"\n [attr.z-popover]=\"hasColumnOptions ? '' : null\"\n #colOptionsPopover=\"zPopover\"\n #headerTextWrapper\n z-popover\n [zPopoverContent]=\"hasColumnOptions ? colOptionsPopoverContent : null\"\n zTrigger=\"click\"\n zPosition=\"bottom\"\n [zOffset]=\"5\">\n <ng-container\n *flexRender=\"header.column.columnDef.header; props: header.getContext(); let headerContent\">\n @if (headerContent | zTableIsTemplateRef) {\n <div\n class=\"z-template-content\"\n [ngClass]=\"\n header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentClass'\n \"\n [ngStyle]=\"\n header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentStyle'\n \">\n <ng-container\n *ngTemplateOutlet=\"headerContent; context: { $implicit: header.getContext() }\" />\n </div>\n } @else if (headerContent | zTableHasIcon) {\n <z-table-icon-text\n class=\"min-w-0 truncate\"\n [zText]=\"headerContent\"\n [zTooltip]=\"header.column.id | zTableColumnConfig: zConfig().columns : 'headerTooltip'\"\n [zTriggerElement]=\"headerTextWrapper\"\n [ngClass]=\"\n header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentClass'\n \"\n [ngStyle]=\"\n header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentStyle'\n \" />\n } @else {\n <span\n class=\"z-table-cell-text\"\n z-tooltip\n [zContent]=\"\n (header.column.id | zTableColumnConfig: zConfig().columns : 'headerTooltip') ||\n headerContent\n \"\n [zTriggerElement]=\"headerTextWrapper\"\n [innerHTML]=\"headerContent | translate | zSafeHtml\"\n [ngClass]=\"\n header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentClass'\n \"\n [ngStyle]=\"\n header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentStyle'\n \"></span>\n }\n </ng-container>\n @if (hasColumnOptions) {\n <z-icon zType=\"lucideChevronDown\" zSize=\"15\" class=\"text-muted-foreground shrink-0\" />\n }\n </div>\n @if (header.column.getCanSort() && !hasBodyRowSpan()) {\n <span\n class=\"z-sort-icon shrink-0 cursor-pointer text-gray-500 hover:text-gray-700\"\n (click)=\"handleSort($event, header.column.getToggleSortingHandler())\">\n @if (header.column.getIsSorted() === 'asc') {\n <z-icon zType=\"lucideArrowUp\" zSize=\"15\" />\n } @else if (header.column.getIsSorted() === 'desc') {\n <z-icon zType=\"lucideArrowDown\" zSize=\"15\" />\n } @else {\n <z-icon zType=\"lucideArrowDownUp\" zSize=\"15\" class=\"opacity-60\" />\n }\n </span>\n }\n </div>\n }\n @if (header.column.getCanFilter() && hasFiltering()) {\n <div class=\"mt-1\">\n <z-table-filter [zColumn]=\"$any(header.column)\" [zTable]=\"$any(table)\" />\n </div>\n }\n @if (\n header.column.id !== 'rowDrag' &&\n header.column.id !== 'select' &&\n header.column.id !== 'expand' &&\n zConfig().enableColumnResizing !== false\n ) {\n <div\n class=\"z-resizer\"\n [class.z-is-resizing]=\"header.column.getIsResizing()\"\n [class.z-resizer-left]=\"\n header.column.getIsPinned() === 'right' || header.column.getIsLastColumn()\n \"\n (dblclick)=\"header.column.resetSize()\"\n [zTableResize]=\"header\"></div>\n }\n </th>\n }\n }\n </tr>\n }\n }\n </thead>\n </table>\n </div>\n\n <!-- Body table -->\n <div\n class=\"z-tbody-wrapper relative\"\n #tbodyContainer\n [class.z-scroll-left]=\"hasScrollLeft()\"\n [class.z-scroll-right]=\"hasScrollRight()\">\n @if (isLoading() || isProcessing()) {\n <!-- Loading State -->\n @if (zConfig().useSkeleton) {\n <!-- Skeleton Loading -->\n <div class=\"animate-in fade-in flex h-full flex-col duration-200\">\n @for (i of skeletonRows(); track $index; let last = $last) {\n <div\n class=\"border-border box-border flex flex-1 flex-col items-start justify-center gap-1.5 px-2\"\n [class.border-b]=\"!last\">\n <z-skeleton zType=\"bar\" zWidth=\"100%\" zHeight=\"22px\" zRadius=\"4px\" />\n <z-skeleton zType=\"bar\" zWidth=\"50%\" zHeight=\"14px\" zRadius=\"4px\" />\n </div>\n }\n </div>\n } @else {\n <!-- Spinner Loading -->\n <div class=\"z-loading-state\">\n <z-loading [zLoading]=\"true\" zSize=\"lg\" [zText]=\"'i18n_z_ui_table_loading' | translate\" />\n </div>\n }\n } @else if (isEmpty()) {\n <div class=\"z-empty-state\">\n @if (isNoSearchResults()) {\n <z-empty zIcon=\"lucideSearchX\" zSize=\"sm\" [zMessage]=\"'i18n_z_ui_table_no_results' | translate\" />\n } @else {\n <z-empty zIcon=\"lucidePackageOpen\" zSize=\"sm\" [zMessage]=\"'i18n_z_ui_table_no_data' | translate\" />\n }\n </div>\n } @else {\n <ng-scrollbar class=\"z-tbody-scrollbar\" #tbodyWrapper track=\"all\" cdkScrollable (scroll)=\"onTbodyScroll($event)\">\n @if (isVirtual()) {\n <!-- Virtual Scroll Mode -->\n <div\n class=\"z-virtual-scroll-inner\"\n cdkDropList\n [cdkDropListData]=\"table.getRowModel().rows\"\n [cdkDropListDisabled]=\"!isVirtualRowDragEnabled()\"\n cdkDropListOrientation=\"vertical\"\n [cdkDropListAutoScrollStep]=\"20\"\n (cdkDropListDropped)=\"onRowDrop($event)\"\n [style.height.px]=\"virtualizer.getTotalSize()\"\n [style.min-width.px]=\"table.getTotalSize()\">\n @for (virtualItem of virtualizer.getVirtualItems(); track virtualItem.index) {\n @let groupRows = dynamicGroupRows()[virtualItem.index] || [];\n <div\n #virtualRow\n class=\"z-virtual-row\"\n cdkDrag\n cdkDragLockAxis=\"y\"\n cdkDragPreviewClass=\"z-table-row-drag-preview\"\n cdkDragPlaceholderClass=\"z-table-row-drag-placeholder\"\n [cdkDragData]=\"groupRows[0]\"\n [cdkDragDisabled]=\"!isVirtualRowDragEnabled() || groupRows.length !== 1\"\n (cdkDragStarted)=\"onRowDragStarted()\"\n (cdkDragEnded)=\"onRowDragEnded($event)\"\n [attr.data-index]=\"virtualItem.index\"\n [style.height.px]=\"\n dynamicSize() ? null : (dynamicGroupHeights()[virtualItem.index] ?? groupSize() * virtualRowHeight())\n \"\n [style.transform]=\"'translate3d(0,' + virtualItem.start + 'px,0)'\">\n <ng-template cdkDragPreview>\n @if (groupRows[0]; as previewRow) {\n <div class=\"z-table-row-drag-preview\" [style.width.px]=\"table.getTotalSize()\">\n @for (cell of previewRow.getVisibleCells(); track cell.id) {\n @let isPreviewCellVisible = cell | zTableCellVisible: zConfig().columns;\n @let shouldRenderPreviewColSpan =\n cell | zTableCellRender: previewRow.getVisibleCells() : zConfig().columns : 'body';\n @if (isPreviewCellVisible && shouldRenderPreviewColSpan) {\n <div\n class=\"z-table-row-drag-preview-cell\"\n [style.width.px]=\"cell.column.getSize()\"\n [class.z-table-row-drag-preview-handle]=\"cell.column.id === 'rowDrag'\">\n @if (cell.column.id === 'rowDrag') {\n <z-icon zType=\"lucideGripVertical\" zSize=\"14\" class=\"text-muted-foreground\" />\n } @else {\n <span class=\"truncate\">{{ cell.getValue() ?? '' }}</span>\n }\n </div>\n }\n }\n </div>\n }\n </ng-template>\n\n <ng-template cdkDragPlaceholder>\n <div class=\"z-table-row-drag-placeholder-inner\" [style.height.px]=\"virtualItem.size\"></div>\n </ng-template>\n\n <table [ngStyle]=\"columnSizeVars()\" [style.width.px]=\"table.getTotalSize()\">\n <ng-container *ngTemplateOutlet=\"colGroupTpl\" />\n <tbody\n [class.z-has-vertical-scroll]=\"hasVerticalScroll()\"\n [class.z-last-row-touches-bottom]=\"lastRowTouchesBottom()\">\n @for (row of groupRows; track row.id) {\n <tr\n z-table-row-hover\n [style.height.px]=\"dynamicSize() ? null : virtualRowHeight()\"\n [style.min-height.px]=\"dynamicSize() ? virtualRowHeight() : null\"\n [class.z-child-row]=\"row.depth > 0\"\n [class.z-selected]=\"row.getIsSelected()\"\n [class.z-indeterminate-selected]=\"row.getIsSomeSelected() && !row.getIsSelected()\">\n @for (cell of row.getVisibleCells(); track cell.id) {\n @if (\n canUseVirtualColumns() &&\n virtualLeftSpacerWidth() > 0 &&\n cell.column.id === firstVirtualCenterColumnId()\n ) {\n <td\n class=\"pointer-events-none border-0 p-0\"\n [style.width.px]=\"virtualLeftSpacerWidth()\"></td>\n }\n @let shouldRenderRowSpan =\n cell | zTableSpan: zConfig().columns : 'shouldRender' : table.getRowModel().rows;\n @let shouldRenderColSpan =\n cell | zTableCellRender: row.getVisibleCells() : zConfig().columns : 'body';\n @let isVirtualColumnVisible =\n !canUseVirtualColumns() ||\n cell.column.getIsPinned() !== false ||\n virtualCenterColumnVisibilityMap()[cell.column.id];\n @if (shouldRenderRowSpan && shouldRenderColSpan && isVirtualColumnVisible) {\n <td\n [ngStyle]=\"\n cell.column\n | zTablePinningStyles\n : cell\n : 'body'\n : row.getVisibleCells()\n : zConfig().columns\n : columnSizingInfo()\n \"\n [class.z-sticky-left]=\"cell.column.getIsPinned() === 'left'\"\n [class.z-sticky-right]=\"cell.column.getIsPinned() === 'right'\"\n [class.z-sticky-left-last]=\"\n cell.column.getIsPinned() === 'left' && cell.column.getIsLastColumn('left')\n \"\n [class.z-sticky-right-first]=\"\n cell.column.getIsPinned() === 'right' && cell.column.getIsFirstColumn('right')\n \"\n [class.z-sticky-right-last]=\"\n cell.column.getIsPinned() === 'right' && cell.column.getIsLastColumn('right')\n \"\n [class.z-at-left-edge]=\"cell | zTableCellOffset: orderedLeafColumns()\"\n [class.z-col-drag]=\"cell.column.id === 'rowDrag'\"\n [class.z-col-select]=\"cell.column.id === 'select'\"\n [class.z-col-expand]=\"cell.column.id === 'expand'\"\n [class.z-col-actions]=\"cell.column.id === actionColumnInfo()?.columnId\"\n [class.z-at-bottom]=\"\n cell | zTableCellBottom: zConfig().columns : table.getRowModel().rows\n \"\n [attr.rowspan]=\"\n cell | zTableSpan: zConfig().columns : 'cellRowSpan' : table.getRowModel().rows\n \"\n [attr.colspan]=\"cell | zTableSpan: zConfig().columns : 'cellColSpan'\"\n [class]=\"cell | zTableCellConfig: zConfig().columns : 'cellClass'\"\n [style]=\"cell | zTableCellConfig: zConfig().columns : 'cellStyle'\">\n @if (cell.column.id === 'rowDrag') {\n <div class=\"flex items-center justify-center\">\n <button\n cdkDragHandle\n type=\"button\"\n class=\"text-muted-foreground inline-flex size-7 items-center justify-center rounded-md\"\n [class.cursor-grab]=\"isRowDragEnabled()\"\n [class.opacity-40]=\"!isRowDragEnabled()\">\n <z-icon zType=\"lucideGripVertical\" zSize=\"14\" />\n </button>\n </div>\n } @else if (cell.column.id === 'select') {\n <!-- Row Checkbox -->\n <div class=\"flex items-center justify-center\">\n <z-checkbox\n [zChecked]=\"cell.row.getIsSelected()\"\n [zIndeterminate]=\"cell.row.getIsSomeSelected() && !cell.row.getIsSelected()\"\n [zDisabled]=\"!cell.row.getCanSelect()\"\n (zChange)=\"cell.row.toggleSelected()\" />\n </div>\n } @else if (cell.column.id === 'expand') {\n <!-- Expand Button -->\n <div class=\"flex items-center justify-center\">\n @if (cell.row.subRows && cell.row.subRows.length > 0) {\n <button\n type=\"button\"\n (click)=\"cell.row.toggleExpanded()\"\n class=\"hover:bg-muted flex h-6 w-6 cursor-pointer items-center justify-center rounded\">\n <z-icon\n zType=\"lucideChevronRight\"\n zSize=\"14\"\n class=\"transition-transform duration-200\"\n [class.rotate-90]=\"cell.row.getIsExpanded()\" />\n </button>\n }\n </div>\n } @else if (cell.column.id === actionColumnInfo()?.columnId && actionColumnInfo()) {\n <z-table-actions\n [zConfig]=\"$any(actionColumnInfo()!.config)\"\n [zRow]=\"cell.row.original\"\n [zRowId]=\"cell.row.id\"\n (zActionClick)=\"onActionClick($event)\" />\n } @else {\n @let isCellVisible = cell | zTableCellVisible: zConfig().columns;\n @if (isCellVisible) {\n @let editInfoVirtual = cell.getContext() | zTableCellEdit: zConfig().columns;\n @if (editInfoVirtual.enabled) {\n <!-- Editable Cell (Virtual) -->\n <z-table-edit-cell\n [zRow]=\"cell.row.original\"\n [zRowId]=\"cell.row.id\"\n [zRowIndex]=\"cell.row.index\"\n [zColumnId]=\"cell.column.id\"\n [zValue]=\"cell.getValue()\"\n [zRowUpdate]=\"_rowUpdate()\"\n [zEditConfig]=\"$any(editInfoVirtual.config)\"\n (zChange)=\"onCellEdit($any($event))\" />\n } @else {\n <ng-container\n *flexRender=\"\n cell.column.columnDef.cell;\n props: cell.getContext();\n let cellContent\n \">\n @if (cellContent | zTableIsTemplateRef) {\n <!-- TemplateRef rendering -->\n @let isClickable = cell.column.id | zTableCellClickable: zConfig().columns;\n <div\n class=\"z-template-content\"\n [ngClass]=\"cell | zTableCellConfig: zConfig().columns : 'contentClass'\"\n [ngStyle]=\"cell | zTableCellConfig: zConfig().columns : 'contentStyle'\"\n (click)=\"isClickable && onCellClick(row, cell.column.id, cell.getValue())\">\n <ng-container\n *ngTemplateOutlet=\"\n cellContent;\n context: { $implicit: cell.getContext() }\n \" />\n </div>\n } @else if (cellContent | zTableHasIcon) {\n <!-- Icon syntax rendering -->\n @let isClickableIcon = cell.column.id | zTableCellClickable: zConfig().columns;\n <z-table-icon-text\n [zText]=\"cellContent\"\n [zTooltip]=\"cell | zTableCellConfig: zConfig().columns : 'contentTooltip'\"\n [ngClass]=\"cell | zTableCellConfig: zConfig().columns : 'contentClass'\"\n [ngStyle]=\"cell | zTableCellConfig: zConfig().columns : 'contentStyle'\"\n (click)=\"\n isClickableIcon && onCellClick(row, cell.column.id, cell.getValue())\n \" />\n } @else {\n <!-- Default/innerHTML rendering -->\n @let isClickableDefault =\n cell.column.id | zTableCellClickable: zConfig().columns;\n <div\n class=\"z-table-cell-text\"\n z-tooltip\n [zContent]=\"\n (cell | zTableCellConfig: zConfig().columns : 'contentTooltip') ||\n cellContent\n \"\n [innerHTML]=\"cellContent | translate | zSafeHtml\"\n [ngClass]=\"cell | zTableCellConfig: zConfig().columns : 'contentClass'\"\n [ngStyle]=\"cell | zTableCellConfig: zConfig().columns : 'contentStyle'\"\n (click)=\"\n isClickableDefault && onCellClick(row, cell.column.id, cell.getValue())\n \"></div>\n }\n </ng-container>\n }\n }\n }\n </td>\n }\n @if (\n canUseVirtualColumns() &&\n virtualRightSpacerWidth() > 0 &&\n cell.column.id === lastVirtualCenterColumnId()\n ) {\n <td\n class=\"pointer-events-none border-0 p-0\"\n [style.width.px]=\"virtualRightSpacerWidth()\"></td>\n }\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n } @else {\n <!-- Normal Scroll Mode -->\n <table [ngStyle]=\"columnSizeVars()\" [style.width.px]=\"table.getTotalSize()\">\n <ng-container *ngTemplateOutlet=\"colGroupTpl\" />\n <tbody\n cdkDropList\n class=\"z-table-drag-body\"\n [cdkDropListData]=\"table.getRowModel().rows\"\n [cdkDropListDisabled]=\"!isRowDragEnabled()\"\n cdkDropListOrientation=\"vertical\"\n [cdkDropListAutoScrollStep]=\"20\"\n (cdkDropListDropped)=\"onRowDrop($event)\"\n [class.z-has-vertical-scroll]=\"hasVerticalScroll()\"\n [class.z-last-row-touches-bottom]=\"lastRowTouchesBottom()\">\n <!-- Row Template -->\n <ng-template #rowTemplate let-row>\n <tr\n cdkDrag\n z-table-row-hover\n cdkDragLockAxis=\"y\"\n cdkDragPreviewClass=\"z-table-row-drag-preview\"\n cdkDragPlaceholderClass=\"z-table-row-drag-placeholder\"\n [cdkDragData]=\"row\"\n [cdkDragDisabled]=\"!isRowDragEnabled()\"\n (cdkDragStarted)=\"onRowDragStarted()\"\n (cdkDragEnded)=\"onRowDragEnded($event)\"\n [attr.data-row-id]=\"row.id\"\n [ngStyle]=\"row | zTableRow: table : 'pinningStyles' : pinnedRowHeights() : virtualRowHeight()\"\n [class.z-child-row]=\"row.depth > 0\"\n [class.z-selected]=\"row.getIsSelected()\"\n [class.z-indeterminate-selected]=\"row.getIsSomeSelected() && !row.getIsSelected()\"\n [class.z-pinned-top]=\"row.getIsPinned() === 'top'\"\n [class.z-pinned-bottom]=\"row.getIsPinned() === 'bottom'\"\n [class.z-shadow-bottom]=\"\n showHeaderFooterShadow() &&\n row.getIsPinned() === 'top' &&\n (row | zTableRow: table : 'isLastTopPinned')\n \"\n [class.z-shadow-top]=\"\n showHeaderFooterShadow() &&\n row.getIsPinned() === 'bottom' &&\n (row | zTableRow: table : 'isFirstBottomPinned')\n \"\n [attr.data-depth]=\"row.depth\">\n <ng-template cdkDragPreview>\n <div class=\"z-table-row-drag-preview\" [style.width.px]=\"table.getTotalSize()\">\n @for (cell of row.getVisibleCells(); track cell.id) {\n @let isPreviewCellVisible = cell | zTableCellVisible: zConfig().columns;\n @let shouldRenderPreviewColSpan =\n cell | zTableCellRender: row.getVisibleCells() : zConfig().columns : 'body';\n @if (isPreviewCellVisible && shouldRenderPreviewColSpan) {\n <div\n class=\"z-table-row-drag-preview-cell\"\n [style.width.px]=\"cell.column.getSize()\"\n [class.z-table-row-drag-preview-handle]=\"cell.column.id === 'rowDrag'\">\n @if (cell.column.id === 'rowDrag') {\n <z-icon zType=\"lucideGripVertical\" zSize=\"14\" class=\"text-muted-foreground\" />\n } @else {\n <span class=\"truncate\">{{ cell.getValue() ?? '' }}</span>\n }\n </div>\n }\n }\n </div>\n </ng-template>\n\n <ng-template cdkDragPlaceholder>\n <tr class=\"z-table-row-drag-placeholder-row\">\n <td [attr.colspan]=\"renderedColumnCount()\">\n <div class=\"z-table-row-drag-placeholder-inner\" [style.height.px]=\"virtualRowHeight()\"></div>\n </td>\n </tr>\n </ng-template>\n\n @for (cell of row.getVisibleCells(); track cell.id) {\n @if (\n canUseVirtualColumns() &&\n virtualLeftSpacerWidth() > 0 &&\n cell.column.id === firstVirtualCenterColumnId()\n ) {\n <td class=\"pointer-events-none border-0 p-0\" [style.width.px]=\"virtualLeftSpacerWidth()\"></td>\n }\n @let shouldRenderRowSpan =\n cell | zTableSpan: zConfig().columns : 'shouldRender' : table.getRowModel().rows;\n @let shouldRenderColSpan =\n cell | zTableCellRender: row.getVisibleCells() : zConfig().columns : 'body';\n @let isVirtualColumnVisible =\n !canUseVirtualColumns() ||\n cell.column.getIsPinned() !== false ||\n virtualCenterColumnVisibilityMap()[cell.column.id];\n @if (shouldRenderRowSpan && shouldRenderColSpan && isVirtualColumnVisible) {\n <td\n [ngStyle]=\"\n cell.column\n | zTablePinningStyles\n : cell\n : 'body'\n : row.getVisibleCells()\n : zConfig().columns\n : columnSizingInfo()\n \"\n [class]=\"cell | zTableCellConfig: zConfig().columns : 'cellClass'\"\n [style]=\"cell | zTableCellConfig: zConfig().columns : 'cellStyle'\"\n [class.z-sticky-left]=\"cell.column.getIsPinned() === 'left'\"\n [class.z-sticky-right]=\"cell.column.getIsPinned() === 'right'\"\n [class.z-sticky-left-last]=\"\n cell.column.getIsPinned() === 'left' && cell.column.getIsLastColumn('left')\n \"\n [class.z-sticky-right-first]=\"\n cell.column.getIsPinned() === 'right' && cell.column.getIsFirstColumn('right')\n \"\n [class.z-sticky-right-last]=\"\n cell.column.getIsPinned() === 'right' && cell.column.getIsLastColumn('right')\n \"\n [class.z-at-left-edge]=\"cell | zTableCellOffset: orderedLeafColumns()\"\n [class.z-col-drag]=\"cell.column.id === 'rowDrag'\"\n [class.z-col-select]=\"cell.column.id === 'select'\"\n [class.z-col-expand]=\"cell.column.id === 'expand'\"\n [class.z-col-actions]=\"\n cell.column.id === 'actions' || cell.column.id === actionColumnInfo()?.columnId\n \"\n [class.z-at-bottom]=\"cell | zTableCellBottom: zConfig().columns : table.getRowModel().rows\"\n [attr.rowspan]=\"cell | zTableSpan: zConfig().columns : 'cellRowSpan' : table.getRowModel().rows\"\n [attr.colspan]=\"cell | zTableSpan: zConfig().columns : 'cellColSpan'\">\n @if (cell.column.id === 'rowDrag') {\n <div class=\"flex items-center justify-center\">\n <button\n cdkDragHandle\n type=\"button\"\n class=\"text-muted-foreground hover:bg-muted hover:text-foreground inline-flex size-7 items-center justify-center rounded-md transition-colors\"\n [class.cursor-grab]=\"isRowDragEnabled()\"\n [class.cursor-not-allowed]=\"!isRowDragEnabled()\"\n [class.opacity-40]=\"!isRowDragEnabled()\">\n <z-icon zType=\"lucideGripVertical\" zSize=\"14\" />\n </button>\n </div>\n } @else if (cell.column.id === 'select') {\n <!-- Row Checkbox with Pin Button -->\n <div class=\"flex items-center justify-center gap-1\">\n <z-checkbox\n [zChecked]=\"cell.row.getIsSelected()\"\n [zIndeterminate]=\"cell.row.getIsSomeSelected() && !cell.row.getIsSelected()\"\n [zDisabled]=\"!cell.row.getCanSelect()\"\n (zChange)=\"cell.row.toggleSelected()\" />\n @if (zConfig().enableRowPinning && cell.row.depth === 0 && !hasBodyRowSpan()) {\n <ng-template #rowPinPopoverContent>\n <div class=\"flex flex-col gap-0.5 p-0.5\">\n @if (cell.row.getIsPinned() !== 'top') {\n <button\n type=\"button\"\n (click)=\"cell.row.pin('top'); rowPinPopover.hideImmediate()\"\n class=\"text-foreground hover:bg-muted flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs\">\n <z-icon zType=\"lucideArrowUp\" zSize=\"12\" />\n <span>{{ 'i18n_z_ui_table_pin_top' | translate }}</span>\n </button>\n }\n @if (cell.row.getIsPinned() !== 'bottom') {\n <button\n type=\"button\"\n (click)=\"cell.row.pin('bottom'); rowPinPopover.hideImmediate()\"\n class=\"text-foreground hover:bg-muted flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs\">\n <z-icon zType=\"lucideArrowDown\" zSize=\"12\" />\n <span>{{ 'i18n_z_ui_table_pin_bottom' | translate }}</span>\n </button>\n }\n @if (cell.row.getIsPinned()) {\n <button\n type=\"button\"\n (click)=\"cell.row.pin(false); rowPinPopover.hideImmediate()\"\n class=\"text-destructive hover:bg-destructive/10 flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs\">\n <z-icon zType=\"lucideX\" zSize=\"12\" />\n <span>{{ 'i18n_z_ui_table_unpin' | translate }}</span>\n </button>\n }\n </div>\n </ng-template>\n <button\n type=\"button\"\n z-popover\n #rowPinPopover=\"zPopover\"\n [zPopoverContent]=\"rowPinPopoverContent\"\n zTrigger=\"click\"\n zPosition=\"bottom\"\n class=\"z-row-pin-trigger text-muted-foreground hover:bg-muted hover:text-foreground flex cursor-pointer items-center justify-center rounded p-1\"\n [class.text-primary]=\"cell.row.getIsPinned()\">\n <z-icon zType=\"lucideEllipsis\" zSize=\"14\" class=\"rotate-90\" />\n </button>\n }\n </div>\n } @else if (cell.column.id === 'expand') {\n <!-- Expand Button with Row Pin Popover -->\n <div class=\"flex items-center justify-center gap-1\">\n @if (cell.row.subRows && cell.row.subRows.length > 0) {\n <button\n type=\"button\"\n (click)=\"cell.row.toggleExpanded()\"\n class=\"hover:bg-muted flex h-6 w-6 cursor-pointer items-center justify-center rounded\">\n <z-icon\n zType=\"lucideChevronRight\"\n zSize=\"14\"\n class=\"transition-transform duration-200\"\n [class.rotate-90]=\"cell.row.getIsExpanded()\" />\n </button>\n }\n @if (\n zConfig().enableRowPinning &&\n cell.row.depth === 0 &&\n !(cell.row.subRows && cell.row.subRows.length > 0) &&\n !hasBodyRowSpan()\n ) {\n <ng-template #rowPinPopoverContent>\n <div class=\"flex flex-col gap-0.5 p-0.5\">\n @if (cell.row.getIsPinned() !== 'top') {\n <button\n type=\"button\"\n (click)=\"cell.row.pin('top'); rowPinPopover.hideImmediate()\"\n class=\"text-foreground hover:bg-muted flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs\">\n <z-icon zType=\"lucideArrowUp\" zSize=\"12\" />\n <span>{{ 'i18n_z_ui_table_pin_top' | translate }}</span>\n </button>\n }\n @if (cell.row.getIsPinned() !== 'bottom') {\n <button\n type=\"button\"\n (click)=\"cell.row.pin('bottom'); rowPinPopover.hideImmediate()\"\n class=\"text-foreground hover:bg-muted flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs\">\n <z-icon zType=\"lucideArrowDown\" zSize=\"12\" />\n <span>{{ 'i18n_z_ui_table_pin_bottom' | translate }}</span>\n </button>\n }\n @if (cell.row.getIsPinned()) {\n <button\n type=\"button\"\n (click)=\"cell.row.pin(false); rowPinPopover.hideImmediate()\"\n class=\"text-destructive hover:bg-destructive/10 flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs\">\n <z-icon zType=\"lucideX\" zSize=\"12\" />\n <span>{{ 'i18n_z_ui_table_unpin' | translate }}</span>\n </button>\n }\n </div>\n </ng-template>\n <button\n type=\"button\"\n z-popover\n #rowPinPopover=\"zPopover\"\n [zPopoverContent]=\"rowPinPopoverContent\"\n zTrigger=\"click\"\n zPosition=\"bottom\"\n class=\"z-row-pin-trigger text-muted-foreground hover:bg-muted hover:text-foreground flex cursor-pointer items-center justify-center rounded p-1\"\n [class.text-primary]=\"cell.row.getIsPinned()\">\n <z-icon zType=\"lucideEllipsis\" zSize=\"14\" class=\"rotate-90\" />\n </button>\n }\n </div>\n } @else if (cell.column.id === 'actions') {\n <!-- Actions Column - Row Pin Only (for parent rows) -->\n @if (cell.row.depth === 0 && !hasBodyRowSpan()) {\n <div class=\"flex items-center justify-center\">\n <ng-template #rowPinPopoverContent>\n <div class=\"flex flex-col gap-0.5 p-0.5\">\n @if (cell.row.getIsPinned() !== 'top') {\n <button\n type=\"button\"\n (click)=\"cell.row.pin('top'); rowPinPopover.hideImmediate()\"\n class=\"text-foreground hover:bg-muted flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs\">\n <z-icon zType=\"lucideArrowUp\" zSize=\"12\" />\n <span>{{ 'i18n_z_ui_table_pin_top' | translate }}</span>\n </button>\n }\n @if (cell.row.getIsPinned() !== 'bottom') {\n <button\n type=\"button\"\n (click)=\"cell.row.pin('bottom'); rowPinPopover.hideImmediate()\"\n class=\"text-foreground hover:bg-muted flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs\">\n <z-icon zType=\"lucideArrowDown\" zSize=\"12\" />\n <span>{{ 'i18n_z_ui_table_pin_bottom' | translate }}</span>\n </button>\n }\n @if (cell.row.getIsPinned()) {\n <button\n type=\"button\"\n (click)=\"cell.row.pin(false); rowPinPopover.hideImmediate()\"\n class=\"text-destructive hover:bg-destructive/10 flex cursor-pointer items-center gap-1.5 rounded px-2 py-1 text-xs\">\n <z-icon zType=\"lucideX\" zSize=\"12\" />\n <span>{{ 'i18n_z_ui_table_unpin' | translate }}</span>\n </button>\n }\n </div>\n </ng-template>\n <button\n type=\"button\"\n z-popover\n #rowPinPopover=\"zPopover\"\n [zPopoverContent]=\"rowPinPopoverContent\"\n zTrigger=\"click\"\n zPosition=\"bottom\"\n class=\"z-row-pin-trigger text-muted-foreground hover:bg-muted hover:text-foreground flex cursor-pointer items-center justify-center rounded p-1\"\n [class.text-primary]=\"cell.row.getIsPinned()\">\n <z-icon zType=\"lucideEllipsis\" zSize=\"14\" class=\"rotate-90\" />\n </button>\n </div>\n }\n } @else if (cell.column.id === actionColumnInfo()?.columnId && actionColumnInfo()) {\n <z-table-actions\n [zConfig]=\"$any(actionColumnInfo()!.config)\"\n [zRow]=\"cell.row.original\"\n [zRowId]=\"cell.row.id\"\n (zActionClick)=\"onActionClick($event)\" />\n } @else {\n @let isCellVisibleNormal = cell | zTableCellVisible: zConfig().columns;\n @if (isCellVisibleNormal) {\n @let editInfo = cell.getContext() | zTableCellEdit: zConfig().columns;\n @if (editInfo.enabled) {\n <!-- Editable Cell -->\n <z-table-edit-cell\n [zRow]=\"cell.row.original\"\n [zRowId]=\"cell.row.id\"\n [zRowIndex]=\"cell.row.index\"\n [zColumnId]=\"cell.column.id\"\n [zValue]=\"cell.getValue()\"\n [zRowUpdate]=\"_rowUpdate()\"\n [zEditConfig]=\"$any(editInfo.config)\"\n (zChange)=\"onCellEdit($any($event))\" />\n } @else {\n <ng-container\n *flexRender=\"cell.column.columnDef.cell; props: cell.getContext(); let cellContent\">\n @if (cellContent | zTableIsTemplateRef) {\n <!-- TemplateRef rendering -->\n @let isClickableTpl = cell.column.id | zTableCellClickable: zConfig().columns;\n <div\n class=\"z-template-content\"\n [ngClass]=\"cell | zTableCellConfig: zConfig().columns : 'contentClass'\"\n [ngStyle]=\"cell | zTableCellConfig: zConfig().columns : 'contentStyle'\"\n (click)=\"isClickableTpl && onCellClick(row, cell.column.id, cell.getValue())\">\n <ng-container\n *ngTemplateOutlet=\"cellContent; context: { $implicit: cell.getContext() }\" />\n </div>\n } @else if (cellContent | zTableHasIcon) {\n <!-- Icon syntax rendering -->\n @let isClickableIconTpl = cell.column.id | zTableCellClickable: zConfig().columns;\n <z-table-icon-text\n [zText]=\"cellContent\"\n [zTooltip]=\"cell | zTableCellConfig: zConfig().columns : 'contentTooltip'\"\n [ngClass]=\"cell | zTableCellConfig: zConfig().columns : 'contentClass'\"\n [ngStyle]=\"cell | zTableCellConfig: zConfig().columns : 'contentStyle'\"\n (click)=\"isClickableIconTpl && onCellClick(row, cell.column.id, cell.getValue())\" />\n } @else {\n <!-- Default/innerHTML rendering -->\n @let isClickableDefaultTpl = cell.column.id | zTableCellClickable: zConfig().columns;\n <div\n class=\"z-table-cell-text\"\n z-tooltip\n [zContent]=\"\n (cell | zTableCellConfig: zConfig().columns : 'contentTooltip') || cellContent\n \"\n [innerHTML]=\"cellContent | translate | zSafeHtml\"\n [ngClass]=\"cell | zTableCellConfig: zConfig().columns : 'contentClass'\"\n [ngStyle]=\"cell | zTableCellConfig: zConfig().columns : 'contentStyle'\"\n (click)=\"\n isClickableDefaultTpl && onCellClick(row, cell.column.id, cell.getValue())\n \"></div>\n }\n </ng-container>\n }\n }\n }\n </td>\n }\n @if (\n canUseVirtualColumns() &&\n virtualRightSpacerWidth() > 0 &&\n cell.column.id === lastVirtualCenterColumnId()\n ) {\n <td class=\"pointer-events-none border-0 p-0\" [style.width.px]=\"virtualRightSpacerWidth()\"></td>\n }\n }\n </tr>\n\n <!-- Expanded Row Detail -->\n @if (row.getIsExpanded() && row.depth === 0 && !row.subRows?.length && zConfig().expandedRowTemplate) {\n <tr class=\"z-expanded-row\">\n <td [attr.colspan]=\"renderedColumnCount()\" class=\"p-0\">\n <ng-container *ngTemplateOutlet=\"zConfig().expandedRowTemplate!; context: { $implicit: row }\" />\n </td>\n </tr>\n }\n </ng-template>\n\n <!-- Render Top Pinned Rows (hidden when filtered data is empty) -->\n @if (!isEmpty()) {\n @for (row of table.getTopRows(); track row.id) {\n <ng-container *ngTemplateOutlet=\"rowTemplate; context: { $implicit: row }\" />\n }\n }\n\n <!-- Render Center Rows -->\n @for (row of table.getCenterRows(); track row.id) {\n <ng-container *ngTemplateOutlet=\"rowTemplate; context: { $implicit: row }\" />\n }\n\n <!-- Render Bottom Pinned Rows (hidden when filtered data is empty) -->\n @if (!isEmpty()) {\n @for (row of bottomRowsReversed(); track row.id) {\n <ng-container *ngTemplateOutlet=\"rowTemplate; context: { $implicit: row }\" />\n }\n }\n </tbody>\n </table>\n }\n </ng-scrollbar>\n }\n <!-- end @else -->\n </div>\n\n <!-- Footer table -->\n @if (hasFooter()) {\n <div\n class=\"z-tfoot-wrapper\"\n [class.z-shadow-footer]=\"shouldFooterShowShadow()\"\n [class.z-scroll-left]=\"hasScrollLeft()\"\n [class.z-scroll-right]=\"hasScrollRight()\"\n #tfootWrapper>\n <table [ngStyle]=\"columnSizeVars()\" [style.width.px]=\"table.getTotalSize()\">\n <ng-container *ngTemplateOutlet=\"colGroupTpl\" />\n <tfoot>\n @for (footerGroup of orderedFooterGroups(); track footerGroup.id) {\n @if (footerGroup | zTableFooterContent: zConfig().columns) {\n <tr>\n @for (footer of footerGroup.headers; track footer.id) {\n @if (\n canUseVirtualColumns() &&\n virtualLeftSpacerWidth() > 0 &&\n footer.column.id === firstVirtualCenterColumnId()\n ) {\n <th class=\"pointer-events-none border-0 p-0\" [style.width.px]=\"virtualLeftSpacerWidth()\"></th>\n }\n @let rowSpan = footer | zTableSpan: zConfig().columns : 'footerRowSpan';\n @let shouldRender = footer | zTableCellRender: footerGroup.headers : zConfig().columns : 'footer';\n @let isVirtualColumnVisible =\n !canUseVirtualColumns() ||\n footer.column.getIsPinned() !== false ||\n virtualCenterColumnVisibilityMap()[footer.column.id];\n @if (rowSpan && shouldRender && isVirtualColumnVisible) {\n <th\n [ngStyle]=\"\n footer.column\n | zTablePinningStyles: footer : 'footer' : table : zConfig().columns : columnSizingInfo()\n \"\n [class]=\"\n (footer.column.id | zTableColumnConfig: zConfig().columns : 'footerClass') +\n ' ' +\n (footer.column.id | zTableColumnConfig: zConfig().columns : 'footerAlignClass')\n \"\n [style]=\"footer.column.id | zTableColumnConfig: zConfig().columns : 'footerStyle'\"\n [class.z-sticky-left]=\"footer.column.getIsPinned() === 'left'\"\n [class.z-sticky-right]=\"footer.column.getIsPinned() === 'right'\"\n [class.z-sticky-left-last]=\"\n footer | zTableCellPin: 'isLastLeftPinned' : zConfig().columns : 'footer'\n \"\n [class.z-sticky-right-first]=\"\n footer | zTableCellPin: 'isFirstRightPinned' : zConfig().columns : 'footer'\n \"\n [class.z-sticky-right-last]=\"\n footer | zTableCellPin: 'isLastRightPinned' : zConfig().columns : 'footer'\n \"\n [class.z-at-left-edge]=\"footer | zTableCellOffset: orderedLeafColumns()\"\n [attr.rowspan]=\"rowSpan\"\n [attr.colspan]=\"footer | zTableSpan: zConfig().columns : 'footerColSpan'\">\n @let configFooterContent =\n footer.column.id | zTableColumnConfig: zConfig().columns : 'footerContent';\n @if (footer.column.columnDef.footer) {\n <ng-container\n *flexRender=\"footer.column.columnDef.footer; props: footer.getContext(); let footerContent\">\n <div\n class=\"flex w-full items-center\"\n [class.justify-center]=\"\n (footer.column.id | zTableColumnConfig: zConfig().columns : 'footerAlignClass') ===\n 'text-center'\n \"\n [class.justify-end]=\"\n (footer.column.id | zTableColumnConfig: zConfig().columns : 'footerAlignClass') ===\n 'text-right'\n \">\n @if (footerContent | zTableIsTemplateRef) {\n <!-- TemplateRef rendering -->\n <div\n class=\"z-template-content\"\n [ngClass]=\"\n footer.column.id | zTableColumnConfig: zConfig().columns : 'footerContentClass'\n \"\n [ngStyle]=\"\n footer.column.id | zTableColumnConfig: zConfig().columns : 'footerContentStyle'\n \">\n <ng-container\n *ngTemplateOutlet=\"footerContent; context: { $implicit: footer.getContext() }\" />\n </div>\n } @else if (footerContent | zTableHasIcon) {\n <!-- Icon syntax rendering -->\n <z-table-icon-text\n [zText]=\"footerContent\"\n [zTooltip]=\"footer.column.id | zTableColumnConfig: zConfig().columns : 'footerTooltip'\"\n [ngClass]=\"\n footer.column.id | zTableColumnConfig: zConfig().columns : 'footerContentClass'\n \"\n [ngStyle]=\"\n footer.column.id | zTableColumnConfig: zConfig().columns : 'footerContentStyle'\n \" />\n } @else {\n <!-- Default/string rendering -->\n <span\n class=\"z-table-cell-text\"\n z-tooltip\n [zContent]=\"\n (footer.column.id | zTableColumnConfig: zConfig().columns : 'footerTooltip') ||\n footerContent\n \"\n [ngClass]=\"\n footer.column.id | zTableColumnConfig: zConfig().columns : 'footerContentClass'\n \"\n [ngStyle]=\"\n footer.column.id | zTableColumnConfig: zConfig().columns : 'footerContentStyle'\n \">\n {{ footerContent | translate }}\n </span>\n }\n </div>\n </ng-container>\n } @else if (configFooterContent) {\n <!-- Fallback for group columns without TanStack footer -->\n <div\n class=\"flex w-full items-center\"\n [class.justify-center]=\"\n (footer.column.id | zTableColumnConfig: zConfig().columns : 'footerAlignClass') ===\n 'text-center'\n \"\n [class.justify-end]=\"\n (footer.column.id | zTableColumnConfig: zConfig().columns : 'footerAlignClass') ===\n 'text-right'\n \">\n <span\n class=\"z-table-cell-text\"\n z-tooltip\n [zContent]=\"\n (footer.column.id | zTableColumnConfig: zConfig().columns : 'footerTooltip') ||\n $any(configFooterContent)\n \"\n [ngClass]=\"footer.column.id | zTableColumnConfig: zConfig().columns : 'footerContentClass'\"\n [ngStyle]=\"footer.column.id | zTableColumnConfig: zConfig().columns : 'footerContentStyle'\">\n {{ $any(configFooterContent) | translate }}\n </span>\n </div>\n }\n </th>\n }\n @if (\n canUseVirtualColumns() &&\n virtualRightSpacerWidth() > 0 &&\n footer.column.id === lastVirtualCenterColumnId()\n ) {\n <th class=\"pointer-events-none border-0 p-0\" [style.width.px]=\"virtualRightSpacerWidth()\"></th>\n }\n }\n </tr>\n }\n }\n </tfoot>\n </table>\n </div>\n }\n</div>\n\n<!-- Pagination -->\n@if (zConfig().pagination?.enabled !== false) {\n <div class=\"mt-4 flex items-center justify-between gap-4\">\n <div class=\"truncate text-sm text-gray-500\">\n {{ 'i18n_z_ui_table_total_rows' | translate: { total: (paginationTotal() | zFormatNum) } }}\n </div>\n <z-pagination\n [zTotal]=\"paginationTotal()\"\n [(zPageIndex)]=\"pagination().pageIndex\"\n [(zPageSize)]=\"pagination().pageSize\"\n [zPageSizeOptions]=\"zConfig().pagination?.pageSizeOptions ?? [10, 20, 50, 100]\"\n [zShowSizeChanger]=\"zConfig().pagination?.showSizeChanger ?? true\"\n [zShowQuickJumper]=\"zConfig().pagination?.showQuickJumper ?? false\"\n [zShowTotal]=\"false\"\n [zDisabled]=\"zConfig().pagination?.disabled || isLoading() || isProcessing()\"\n (zOnPageChange)=\"onPageChange($event)\" />\n </div>\n}\n\n<!-- Settings Drawer -->\n<z-drawer\n [(zVisible)]=\"showSettingsDrawer\"\n [zTitle]=\"'i18n_z_ui_table_settings_title' | translate\"\n zPlacement=\"right\"\n zWidth=\"500px\"\n [zShadow]=\"true\"\n [zOkText]=\"null\"\n [zCancelText]=\"'i18n_z_ui_drawer_close' | translate\">\n <div class=\"z-table-settings-drawer px-4\">\n <!-- Display Settings -->\n <div class=\"mb-4\">\n <h4 class=\"text-foreground mb-2 text-sm font-semibold\">{{ 'i18n_z_ui_table_display_settings' | translate }}</h4>\n <p class=\"text-muted-foreground mb-3 text-xs\">{{ 'i18n_z_ui_table_display_settings_desc' | translate }}</p>\n <div class=\"grid grid-cols-2 gap-x-4 gap-y-3\">\n <z-checkbox\n [zChecked]=\"showHorizontalBorder()\"\n [zText]=\"'i18n_z_ui_table_horizontal_border' | translate\"\n (zChange)=\"showHorizontalBorder.set(!showHorizontalBorder())\" />\n <z-checkbox\n [zChecked]=\"showVerticalBorder()\"\n [zText]=\"'i18n_z_ui_table_vertical_border' | translate\"\n (zChange)=\"showVerticalBorder.set(!showVerticalBorder())\" />\n <z-checkbox\n [zChecked]=\"showHeaderFooterShadow()\"\n [zText]=\"'i18n_z_ui_table_header_footer_shadow' | translate\"\n (zChange)=\"showHeaderFooterShadow.set(!showHeaderFooterShadow())\" />\n </div>\n </div>\n\n <!-- Divider -->\n <div class=\"border-border my-4 border-t\"></div>\n\n <!-- Unified Column Settings -->\n @if (zConfig().enableSettings) {\n <div class=\"mb-4\">\n <h4 class=\"text-foreground mb-2 text-sm font-semibold\">{{ 'i18n_z_ui_table_column_settings' | translate }}</h4>\n <p class=\"text-muted-foreground mb-3 text-xs\">{{ 'i18n_z_ui_table_column_settings_desc' | translate }}</p>\n\n <!-- Unpinned Columns (Draggable) -->\n <div\n cdkDropList\n #columnDropList=\"cdkDropList\"\n (cdkDropListDropped)=\"onPendingColumnDrop($event)\"\n class=\"z-column-drop-list space-y-1.5\">\n @for (columnId of columnOrder(); track columnId; let i = $index) {\n @if (columnId !== 'expand' && columnId !== 'select' && columnId !== 'rowDrag') {\n @let column = table.getColumn(columnId);\n @let isPinned = column?.getIsPinned();\n @let isVisible = columnVisibility()[columnId] !== false;\n @let canPin = column?.getCanPin() !== false && zConfig().enableColumnPinning;\n @if (!isPinned) {\n <div\n cdkDrag\n [cdkDragData]=\"columnId\"\n cdkDragLockAxis=\"y\"\n cdkDragBoundary=\".z-column-drop-list\"\n cdkDragPreviewClass=\"z-drag-preview\"\n class=\"z-drag-item border-border bg-card hover:border-primary flex cursor-grab items-center gap-2 rounded border px-2 py-1.5 text-sm active:cursor-grabbing\"\n [class.opacity-60]=\"!isVisible\">\n <!-- Drag Handle -->\n <z-icon\n cdkDragHandle\n zType=\"lucideGripVertical\"\n zSize=\"14\"\n class=\"text-muted-foreground shrink-0 cursor-grab active:cursor-grabbing\" />\n\n <!-- Visibility Checkbox -->\n <input\n type=\"checkbox\"\n [checked]=\"isVisible\"\n (change)=\"onToggleColumnVisibility(columnId)\"\n (mousedown)=\"$event.stopPropagation()\"\n class=\"border-input h-4 w-4 shrink-0 cursor-pointer rounded\" />\n\n <!-- Column Name -->\n <span class=\"flex min-w-0 flex-1 flex-col\">\n <span class=\"truncate\" [class.text-muted-foreground]=\"!isVisible\">\n {{ columnId | zTableColumnHeader: zConfig().columns | translate }}\n </span>\n @let parents = columnId | zTableColumnParents: zConfig().columns;\n @if (parents) {\n <span class=\"text-muted-foreground truncate text-[0.625rem]\">({{ parents | translate }})</span>\n }\n </span>\n\n <!-- Pin Buttons -->\n @if (canPin) {\n <div class=\"flex shrink-0 items-center gap-0.5\" (mousedown)=\"$event.stopPropagation()\">\n <button\n type=\"button\"\n [disabled]=\"!isVisible\"\n (click)=\"onToggleColumnPin(columnId, 'left')\"\n class=\"text-muted-foreground hover:bg-muted cursor-pointer rounded p-1 text-xs transition-colors disabled:cursor-not-allowed disabled:opacity-40\"\n title=\"Pin Left\">\n <z-icon zType=\"lucideArrowLeft\" zSize=\"12\" />\n </button>\n <button\n type=\"button\"\n [disabled]=\"!isVisible\"\n (click)=\"onToggleColumnPin(columnId, 'right')\"\n class=\"text-muted-foreground hover:bg-muted cursor-pointer rounded p-1 text-xs transition-colors disabled:cursor-not-allowed disabled:opacity-40\"\n title=\"Pin Right\">\n <z-icon zType=\"lucideArrowRight\" zSize=\"12\" />\n </button>\n </div>\n }\n </div>\n }\n }\n }\n </div>\n\n <!-- Pinned Columns Section -->\n @if (zConfig().enableColumnPinning) {\n @if (pinnedColumnIds().length > 0) {\n <div class=\"border-border mt-4 border-t pt-4\">\n <h5 class=\"text-muted-foreground mb-2 text-xs font-medium\">\n {{ 'i18n_z_ui_table_pinned_columns' | translate }}\n </h5>\n <div class=\"space-y-1.5\">\n @for (columnId of pinnedColumnIds(); track columnId) {\n @let column = table.getColumn(columnId);\n @let isPinned = column?.getIsPinned();\n @let isVisible = columnVisibility()[columnId] !== false;\n <div\n class=\"border-border bg-muted/30 flex items-center gap-2 rounded border px-2 py-1.5 text-sm\"\n [class.opacity-60]=\"!isVisible\">\n <!-- Pin Icon -->\n <z-icon zType=\"lucidePin\" zSize=\"14\" class=\"text-primary shrink-0\" />\n\n <!-- Visibility Checkbox -->\n <input\n type=\"checkbox\"\n [checked]=\"isVisible\"\n (change)=\"onToggleColumnVisibility(columnId)\"\n class=\"border-input h-4 w-4 shrink-0 cursor-pointer rounded\" />\n\n <!-- Column Name -->\n <span class=\"flex min-w-0 flex-1 flex-col\">\n <span class=\"truncate\" [class.text-muted-foreground]=\"!isVisible\">\n {{ columnId | zTableColumnHeader: zConfig().columns | translate }}\n </span>\n @let pinnedParents = columnId | zTableColumnParents: zConfig().columns;\n @if (pinnedParents) {\n <span class=\"text-muted-foreground truncate text-[0.625rem]\">\n ({{ pinnedParents | translate }})\n </span>\n }\n </span>\n\n <!-- Position Badge -->\n <span class=\"bg-primary/10 text-primary shrink-0 rounded px-1.5 py-0.5 text-[0.625rem] font-medium\">\n {{\n isPinned === 'left'\n ? ('i18n_z_ui_table_left' | translate)\n : ('i18n_z_ui_table_right' | translate)\n }}\n </span>\n\n <!-- Unpin Button -->\n <button\n type=\"button\"\n (click)=\"onToggleColumnPin(columnId, isPinned === 'left' ? 'left' : 'right')\"\n class=\"text-muted-foreground hover:bg-muted hover:text-foreground cursor-pointer rounded p-1 text-xs transition-colors\"\n title=\"Unpin\">\n <z-icon zType=\"lucideX\" zSize=\"12\" />\n </button>\n </div>\n }\n </div>\n </div>\n }\n }\n </div>\n }\n </div>\n</z-drawer>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}