@shival99/z-ui 1.0.11 → 1.0.12

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.
@@ -1 +1 @@
1
- {"version":3,"file":"shival99-z-ui-components-z-table.mjs","sources":["../../../../libs/core-ui/components/z-table/directives/z-table-row-hover.directive.ts","../../../../libs/core-ui/components/z-table/z-table.types.ts","../../../../libs/core-ui/components/z-table/z-table.util.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-cell-config.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-cell-offset.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-header-pin.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/pipes/z-table-body-cell-render.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-footer-render.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-header-render.pipe.ts","../../../../libs/core-ui/components/z-table/z-table-filter.component.ts","../../../../libs/core-ui/components/z-table/z-table-icon-text.component.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":["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})\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","/* eslint-disable unused-imports/no-unused-vars */\nimport { type TemplateRef, type Type } from '@angular/core';\nimport { type ZSelectOption } from '@shival99/z-ui/components/z-select';\nimport { type ZTooltipConfig } from '@shival99/z-ui/components/z-tooltip';\nimport {\n type CellContext,\n type ColumnFiltersState,\n type ColumnPinningState,\n type ExpandedState,\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\nexport const Z_DEFAULT_ROW_HEIGHT = 40;\nexport const Z_DEFAULT_VIRTUAL_OVERSCAN = 5;\nexport const Z_DEFAULT_GROUP_SIZE = 1;\nexport const Z_DEFAULT_COLUMN_MIN_SIZE = 80;\nexport const Z_DEFAULT_DEBOUNCE_TIME = 150;\n\nexport interface ZVirtualGroup {\n startIndex: number;\n endIndex: number;\n rowCount: number;\n height: number;\n}\n\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\nexport type ZTableAlign = 'left' | 'center' | 'right';\nexport type ZTableBorderType = 'none' | 'full' | 'horizontal' | 'vertical';\nexport type ZTableCellContent<T> =\n | string\n | number\n | TemplateRef<{ $implicit: CellContext<T, unknown> }>\n | Type<unknown>\n | ((info: CellContext<T, unknown>) => string | number | TemplateRef<unknown>);\n\nexport type ZTableHeaderContent<T> =\n | string\n | TemplateRef<unknown>\n | Type<unknown>\n | (() => string)\n | ((info: HeaderContext<T, unknown>) => string);\n\nexport type ZTableColumn<T = unknown> = ZTableColumnConfig<T>;\n\nexport type ZTableFilterType = 'text' | 'number' | 'select' | 'multi-select' | 'date' | 'range' | 'tags';\nexport type ZTableMode = 'local' | 'server';\n\nexport interface ZTableSortConfig<T> {\n enabled?: boolean;\n mode?: ZTableMode;\n sortKey?: string;\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 interface ZTableSavedConfig {\n columnOrder: string[];\n columnSizing: Record<string, number>;\n columnPinning: { left?: string[]; right?: string[] };\n columnVisibility: Record<string, boolean>;\n showHeaderFooterShadow: boolean;\n showHorizontalBorder: boolean;\n showVerticalBorder: boolean;\n}\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}\n\n/** Header cell configuration */\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 tooltip?: string | ZTooltipConfig;\n}\n\n/** Body/data cell configuration */\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 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}\n\n/** Footer cell configuration */\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 tooltip?: string | ZTooltipConfig;\n}\n\nexport interface ZTableColumnConfig<T> {\n id: string;\n visible?: boolean | (() => boolean);\n accessorKey?: keyof T & string;\n accessorFn?: (row: T) => unknown;\n\n header?: ZTableHeaderColumnConfig<T> | ZTableHeaderContent<T>;\n body?: ZTableBodyColumnConfig<T> | ZTableCellContent<T>;\n footer?: ZTableFooterColumnConfig<T> | ZTableHeaderContent<T>;\n\n size?: number;\n minSize?: number;\n maxSize?: number;\n\n sort?: ZTableSortConfig<T> | boolean;\n filter?: ZTableFilterConfig<T> | boolean;\n\n enableResizing?: boolean;\n enablePinning?: boolean;\n enableHiding?: boolean;\n\n pinned?: 'left' | 'right' | false;\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\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 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 type ZTableChangeType =\n | 'page'\n | 'sort'\n | 'filter'\n | 'search'\n | 'select'\n | 'expand'\n | 'rowSelect'\n | 'rowSelectAll'\n | 'rowExpand'\n | 'cellClick';\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 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\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 enabled: boolean;\n rowHeight?: number;\n overscan?: number;\n groupSize?: number;\n}\n\nexport interface ZTableConfig<T> {\n mode?: ZTableMode;\n data: T[];\n totalCount?: number;\n columns: ZTableColumnConfig<T>[];\n getRowId?: (row: T, index: number, parent: T | undefined, data: T[]) => string;\n getSubRows?: (row: T, index: number, parent: T | undefined, data: T[]) => T[] | undefined;\n\n totalRows?: number;\n virtual?: ZTableVirtualConfig | boolean;\n\n showHorizontalBorder?: boolean;\n showVerticalBorder?: boolean;\n showHeaderShadow?: boolean;\n showFooterShadow?: boolean;\n\n enableSettings?: boolean;\n enableColumnResizing?: boolean;\n enableRowPinning?: boolean;\n enableMultiSort?: boolean;\n enableSearch?: boolean;\n enablePagination?: boolean;\n enableColumnPinning?: boolean;\n\n pagination?: ZTablePaginationConfig;\n initialState?: ZTableInitialState;\n loading?: boolean;\n\n expandedRowTemplate?: TemplateRef<{ $implicit: Row<T> }>;\n emptyTemplate?: TemplateRef<void>;\n loadingTemplate?: TemplateRef<void>;\n getRowCanExpand?: (row: Row<T>) => boolean;\n\n maxHeight?: string;\n minHeight?: string;\n debounceTime?: number;\n}\n\ndeclare module '@tanstack/angular-table' {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface TableMeta<TData extends RowData> {\n updateData?: (rowIndex: number, columnId: string, value: unknown) => void;\n }\n}\n","import 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 Z_DEFAULT_COLUMN_MIN_SIZE,\n} from './z-table.types';\n\nexport const isHeaderConfig = <T>(\n config: ZTableHeaderColumnConfig<T> | ZTableHeaderContent<T> | undefined\n): config is ZTableHeaderColumnConfig<T> => {\n if (!config || typeof config !== 'object') {\n return false;\n }\n return config.constructor === Object;\n};\n\nexport const isBodyConfig = <T>(\n config: ZTableBodyColumnConfig<T> | ZTableCellContent<T> | undefined\n): config is ZTableBodyColumnConfig<T> => {\n if (!config || typeof config !== 'object') {\n return false;\n }\n return config.constructor === Object;\n};\n\nexport const isFooterConfig = <T>(\n config: ZTableFooterColumnConfig<T> | ZTableHeaderContent<T> | undefined\n): config is ZTableFooterColumnConfig<T> => {\n if (!config || typeof config !== 'object') {\n return false;\n }\n return config.constructor === Object;\n};\n\nexport const getHeaderConfig = <T>(col: ZTableColumnConfig<T> | undefined) => {\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 };\n\n if (!col) {\n return empty;\n }\n\n if (!isHeaderConfig(col.header)) {\n return { ...empty, content: col.header };\n }\n\n return {\n content: col.header.content,\n class: col.header.class,\n style: col.header.style,\n align: col.header.align,\n tooltip: col.header.tooltip,\n rowSpan: col.header.rowSpan,\n colSpan: col.header.colSpan,\n };\n};\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 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 };\n\n if (!col) {\n return empty;\n }\n\n if (!isFooterConfig(col.footer)) {\n return { ...empty, content: col.footer };\n }\n\n return {\n content: col.footer.content,\n class: col.footer.class,\n style: col.footer.style,\n align: col.footer.align,\n tooltip: col.footer.tooltip,\n rowSpan: col.footer.rowSpan,\n colSpan: col.footer.colSpan,\n };\n};\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\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\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\nexport function hasIconSyntax(content: unknown): boolean {\n if (!content || typeof content !== 'string') {\n return false;\n }\n return /\\[icon:[^\\]]+\\]/.test(content);\n}\n\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\nexport const deepestHeader = <D, V>(header: Header<D, V>): Header<D, V> | null => {\n let last = header;\n while (true) {\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\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 const above = header.depth - header.column.depth;\n return above > 1 ? null : rowSpan;\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 if (configColSpan !== undefined && configColSpan !== null) {\n return configColSpan;\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 if (configColSpan !== undefined && configColSpan !== null) {\n return configColSpan;\n }\n return header.colSpan > 1 ? header.colSpan : null;\n};\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\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) {\n if (i + prevColSpan > currentIndex) {\n return false;\n }\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 => {\n const currentIndex = allHeaders.findIndex(h => h.id === header.id);\n if (currentIndex <= 0) {\n return true;\n }\n\n for (let i = 0; i < currentIndex; i++) {\n const prevHeader = allHeaders[i];\n const prevConfig = findColumnConfig(prevHeader.column.id, columns);\n const prevColSpan = getFooterColSpan(prevConfig);\n\n if (prevColSpan && prevColSpan > 1) {\n if (i + prevColSpan > currentIndex) {\n return false;\n }\n }\n }\n\n return true;\n};\n\nexport const shouldHeaderRender = <T>(\n header: Header<T, unknown>,\n allHeaders: Header<T, unknown>[],\n columns: ZTableColumnConfig<T>[]\n): boolean => {\n const currentIndex = allHeaders.findIndex(h => h.id === header.id);\n if (currentIndex <= 0) {\n return true;\n }\n\n for (let i = 0; i < currentIndex; i++) {\n const prevHeader = allHeaders[i];\n const prevConfig = findColumnConfig(prevHeader.column.id, columns);\n const prevColSpan = getHeaderColSpan(prevConfig);\n\n if (prevColSpan && prevColSpan > 1) {\n if (i + prevColSpan > currentIndex) {\n return false;\n }\n }\n }\n\n return true;\n};\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 if (sortConfig?.sortFn) {\n columnDef.sortingFn = sortConfig.sortFn as ColumnDef<T>['sortingFn'];\n }\n\n if (filterConfig?.filterFn) {\n columnDef.filterFn = filterConfig.filterFn as ColumnDef<T>['filterFn'];\n }\n\n if (filterConfig?.type === '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\n if (Array.isArray(filterValue)) {\n return filterValue.includes(cellValue);\n }\n\n return cellValue === filterValue;\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","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})\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 { Cell, Column, Header } from '@tanstack/angular-table';\n\n@Pipe({\n name: 'zTableCellOffset',\n standalone: true,\n pure: true,\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\n // Find the index of this column in the ordered columns list\n const columnIndex = orderedColumns.findIndex(col => col.id === columnId);\n\n // If it's the first column (index 0), it's at the left edge\n if (columnIndex === 0) {\n return true;\n }\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 { 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})\nexport class ZTableColumnConfigPipe implements PipeTransform {\n transform<T>(\n columnId: string,\n columns: ZTableColumnConfig<T>[],\n property: 'headerClass' | 'headerAlignClass' | 'footerClass' | 'footerAlignClass'\n ): string;\n transform<T>(\n columnId: string,\n columns: ZTableColumnConfig<T>[],\n property: 'headerStyle' | 'footerStyle'\n ): Record<string, string>;\n transform<T>(\n columnId: string,\n columns: ZTableColumnConfig<T>[],\n property: 'headerTooltip' | 'footerTooltip'\n ): string | ZTooltipConfig;\n transform<T>(columnId: string, columns: ZTableColumnConfig<T>[], property: 'hasBodyRowSpan'): boolean;\n transform<T>(columnId: string, columns: ZTableColumnConfig<T>[], property: 'footerContent'): unknown;\n transform<T>(\n columnId: string,\n columns: ZTableColumnConfig<T>[],\n property:\n | 'headerClass'\n | 'headerStyle'\n | 'headerTooltip'\n | 'headerAlignClass'\n | 'footerClass'\n | 'footerStyle'\n | 'footerTooltip'\n | 'footerAlignClass'\n | 'hasBodyRowSpan'\n | 'footerContent'\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 '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 'hasBodyRowSpan':\n return columnConfig ? isBodyConfig(columnConfig.body) && columnConfig.body.rowSpan !== undefined : false;\n\n case 'footerContent': {\n const footerConfig = getFooterConfig(columnConfig);\n return footerConfig.content || '';\n }\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})\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})\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})\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})\nexport class ZTableHasIconPipe implements PipeTransform {\n transform(content: unknown): boolean {\n if (typeof content !== 'string') {\n return false;\n }\n return hasIconSyntax(content);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { Column, Header } from '@tanstack/angular-table';\nimport type { ZTableColumnConfig } from '../z-table.types';\nimport { findColumnConfig, getHeaderColSpan } from '../z-table.util';\n\nexport type ZHeaderPinProperty = 'isLastLeftPinned' | 'isFirstRightPinned' | 'isLastRightPinned';\n\n@Pipe({\n name: 'zTableHeaderPin',\n standalone: true,\n pure: true,\n})\nexport class ZTableHeaderPinPipe implements PipeTransform {\n transform<T>(\n item: Header<T, unknown>,\n property: ZHeaderPinProperty,\n columns?: ZTableColumnConfig<T>[],\n _orderedLeafColumns?: Column<T>[]\n ): boolean {\n switch (property) {\n case 'isLastLeftPinned':\n return this._isHeaderLastLeftPinned(item, columns ?? []);\n\n case 'isFirstRightPinned':\n return this._isHeaderFirstRightPinned(item);\n\n case 'isLastRightPinned':\n return this._isHeaderLastRightPinned(item, columns ?? []);\n\n default:\n return false;\n }\n }\n\n private _isHeaderLastLeftPinned<T>(header: Header<T, unknown>, columns: ZTableColumnConfig<T>[]): boolean {\n const leafHeaders = header.getLeafHeaders();\n const hasLastLeftPinnedLeaf = leafHeaders.some(\n lh => lh.column.getIsPinned() === 'left' && lh.column.getIsLastColumn('left')\n );\n if (hasLastLeftPinnedLeaf) {\n return true;\n }\n\n const columnConfig = findColumnConfig(header.column.id, columns);\n const configColSpan = getHeaderColSpan(columnConfig);\n\n if (configColSpan && configColSpan > 1) {\n const { headers: allHeadersInGroup } = header.headerGroup;\n const currentIndex = allHeadersInGroup.findIndex(h => h.id === header.id);\n\n if (currentIndex !== -1) {\n const endIndex = currentIndex + configColSpan - 1;\n\n if (endIndex < allHeadersInGroup.length) {\n const targetHeader = allHeadersInGroup[endIndex];\n const targetLeafHeaders = targetHeader.getLeafHeaders();\n return targetLeafHeaders.some(lh => lh.column.getIsPinned() === 'left' && lh.column.getIsLastColumn('left'));\n }\n }\n }\n\n return false;\n }\n\n private _isHeaderFirstRightPinned<T>(header: Header<T, unknown>): boolean {\n const leafHeaders = header.getLeafHeaders();\n return leafHeaders.some(lh => lh.column.getIsPinned() === 'right' && lh.column.getIsFirstColumn('right'));\n }\n\n private _isHeaderLastRightPinned<T>(header: Header<T, unknown>, columns: ZTableColumnConfig<T>[]): 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 = getHeaderColSpan(columnConfig);\n\n if (configColSpan && configColSpan > 1) {\n const { headers: allHeadersInGroup } = header.headerGroup;\n const currentIndex = allHeadersInGroup.findIndex(h => h.id === header.id);\n\n if (currentIndex !== -1) {\n const endIndex = currentIndex + configColSpan - 1;\n\n if (endIndex < allHeadersInGroup.length) {\n const targetHeader = allHeadersInGroup[endIndex];\n const targetLeafHeaders = targetHeader.getLeafHeaders();\n return targetLeafHeaders.some(\n lh => lh.column.getIsPinned() === 'right' && lh.column.getIsLastColumn('right')\n );\n }\n }\n }\n\n return false;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { Column, Cell, Header, Table } from '@tanstack/angular-table';\nimport type { ZTableColumnConfig } from '../z-table.types';\nimport {\n shouldHeaderRender,\n getHeaderColSpan,\n findColumnConfig,\n getBodyColSpan,\n shouldBodyCellRenderColSpan,\n} from '../z-table.util';\n\n@Pipe({\n name: 'zTablePinningStyles',\n standalone: true,\n pure: true,\n})\nexport class ZTablePinningStylesPipe implements PipeTransform {\n transform<T>(\n column: Column<T, unknown>,\n item: Cell<T, unknown> | Header<T, unknown> | null,\n type: 'header' | 'body',\n tableOrCells?: Table<T> | Cell<T, unknown>[],\n columns?: ZTableColumnConfig<T>[]\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 === '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 ): Record<string, string | number | undefined> {\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 const currentIdx = allCells.findIndex(c => c.id === cell.id);\n if (currentIdx > 0) {\n let calculatedOffset = 0;\n for (let i = 0; i < currentIdx; i++) {\n const prevCell = allCells[i];\n if (!shouldBodyCellRenderColSpan(prevCell, allCells, columns)) {\n continue;\n }\n const prevConfig = findColumnConfig(prevCell.column.id, columns);\n const prevColSpan = getBodyColSpan(prevConfig, prevCell.getContext());\n if (prevColSpan && prevColSpan > 1) {\n let spanWidth = prevCell.column.getSize();\n for (let j = 1; j < prevColSpan && i + j < allCells.length; j++) {\n spanWidth += allCells[i + j].column.getSize();\n }\n\n calculatedOffset += spanWidth;\n continue;\n }\n calculatedOffset += prevCell.column.getSize();\n }\n leftOffset = calculatedOffset;\n }\n }\n\n if (allCells && cell && isPinned === 'right') {\n const currentIdx = allCells.findIndex(c => c.id === cell.id);\n if (currentIdx === allCells.length - 1) {\n rightOffset = 0;\n }\n if (currentIdx >= 0 && currentIdx < allCells.length - 1) {\n let calculatedOffset = 0;\n for (let i = currentIdx + 1; i < allCells.length; i++) {\n const nextCell = allCells[i];\n if (!shouldBodyCellRenderColSpan(nextCell, allCells, columns)) {\n continue;\n }\n\n const nextConfig = findColumnConfig(nextCell.column.id, columns);\n const nextColSpan = getBodyColSpan(nextConfig, nextCell.getContext());\n if (nextColSpan && nextColSpan > 1) {\n let spanWidth = nextCell.column.getSize();\n for (let j = 1; j < nextColSpan && i + j < allCells.length; j++) {\n spanWidth += allCells[i + j].column.getSize();\n }\n calculatedOffset += spanWidth;\n continue;\n }\n\n calculatedOffset += nextCell.column.getSize();\n }\n rightOffset = calculatedOffset;\n }\n }\n\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 private _getHeaderPinningStyles<T>(\n column: Column<T, unknown>,\n headerCurrent: Header<T, unknown>,\n table: Table<T>,\n columns: ZTableColumnConfig<T>[]\n ): Record<string, string | number | undefined> {\n const isPinnedColumn = column.getIsPinned();\n const leftPositions: Record<string, number> = {};\n const headerGroupsAll = table.getHeaderGroups();\n\n for (const headerGroup of headerGroupsAll) {\n for (const header of headerGroup.headers) {\n leftPositions[header.id] = header.getStart('left');\n }\n }\n\n const newOffsetLeft: Record<string, number> = {};\n const newOffsetRight: Record<string, number> = {};\n let isChildPinned: 'left' | 'right' | undefined = undefined;\n\n if (isPinnedColumn) {\n const headerGroups = headerCurrent.headerGroup.headers;\n const leafHeaders = headerCurrent.getLeafHeaders();\n const filterChild = leafHeaders.filter(h => h.column.id !== column.id);\n\n if (filterChild.length === 0) {\n isChildPinned = isPinnedColumn;\n }\n\n for (const child of filterChild) {\n const isPinned = child.column.getIsPinned();\n if (isPinned) {\n isChildPinned = isPinned;\n break;\n }\n }\n\n if (isChildPinned === 'left') {\n const temp = [...headerGroups];\n const headersBeforeCurrent: Header<T, unknown>[] = [];\n for (let i = 0; i < temp.length; i++) {\n const indexOfHeader = temp.findIndex(h => h.id === headerCurrent.id);\n if (i < indexOfHeader) {\n const leafs = temp[i].getLeafHeaders();\n const hasLeftPinned = leafs.some(lh => lh.column.getIsPinned() === 'left');\n if (hasLeftPinned) {\n headersBeforeCurrent.push(temp[i]);\n }\n }\n }\n\n newOffsetLeft[headerCurrent.id] = headersBeforeCurrent.reduce((sum, h) => {\n if (!shouldHeaderRender(h, headerGroups, columns)) {\n return sum;\n }\n\n if (h.subHeaders.length > 0) {\n const subSum = h.subHeaders\n .filter(subH => subH.column.getIsPinned() === 'left')\n .filter(subH => shouldHeaderRender(subH, h.subHeaders, columns))\n .reduce((subAcc, subH) => {\n const config = findColumnConfig(subH.column.id, columns);\n const colSpan = getHeaderColSpan(config);\n if (colSpan && colSpan > 1) {\n const currentIdx = h.subHeaders.findIndex(sh => sh.id === subH.id);\n let totalWidth = subH.column.getSize();\n for (let j = 1; j < colSpan && currentIdx + j < h.subHeaders.length; j++) {\n totalWidth += h.subHeaders[currentIdx + j].column.getSize();\n }\n return subAcc + totalWidth;\n }\n return subAcc + subH.column.getSize();\n }, 0);\n return sum + subSum;\n }\n\n const config = findColumnConfig(h.column.id, columns);\n const colSpan = getHeaderColSpan(config);\n if (colSpan && colSpan > 1) {\n const currentIdx = headerGroups.findIndex(hg => hg.id === h.id);\n let totalWidth = h.column.getSize();\n for (let j = 1; j < colSpan && currentIdx + j < headerGroups.length; j++) {\n totalWidth += headerGroups[currentIdx + j].column.getSize();\n }\n return sum + totalWidth;\n }\n return sum + h.column.getSize();\n }, 0);\n }\n\n if (isChildPinned === 'right') {\n const headersAfterCurrent: Header<T, unknown>[] = [];\n const temp = [...headerGroups].reverse();\n for (let i = 0; i < temp.length; i++) {\n const indexOfHeader = temp.findIndex(h => h.id === headerCurrent.id);\n if (i < indexOfHeader) {\n headersAfterCurrent.push(temp[i]);\n }\n }\n\n newOffsetRight[headerCurrent.id] = headersAfterCurrent.reduce((sum, h) => {\n if (!shouldHeaderRender(h, headerGroups, columns)) {\n return sum;\n }\n\n if (h.subHeaders.length > 0) {\n const subSum = h.subHeaders\n .filter(subH => subH.column.getIsPinned() === 'right')\n .filter(subH => shouldHeaderRender(subH, h.subHeaders, columns))\n .reduce((subAcc, subH) => {\n const config = findColumnConfig(subH.column.id, columns);\n const colSpan = getHeaderColSpan(config);\n if (colSpan && colSpan > 1) {\n const currentIdx = h.subHeaders.findIndex(sh => sh.id === subH.id);\n let totalWidth = subH.column.getSize();\n for (let j = 1; j < colSpan && currentIdx + j < h.subHeaders.length; j++) {\n totalWidth += h.subHeaders[currentIdx + j].column.getSize();\n }\n return subAcc + totalWidth;\n }\n return subAcc + subH.column.getSize();\n }, 0);\n return sum + subSum;\n }\n\n const config = findColumnConfig(h.column.id, columns);\n const colSpan = getHeaderColSpan(config);\n if (colSpan && colSpan > 1) {\n const currentIdx = headerGroups.findIndex(hg => hg.id === h.id);\n let totalWidth = h.column.getSize();\n for (let j = 1; j < colSpan && currentIdx + j < headerGroups.length; j++) {\n totalWidth += headerGroups[currentIdx + j].column.getSize();\n }\n return sum + totalWidth;\n }\n return sum + h.column.getSize();\n }, 0);\n }\n }\n\n const leftValue =\n isChildPinned === 'left'\n ? newOffsetLeft[headerCurrent.id] !== undefined\n ? newOffsetLeft[headerCurrent.id]\n : leftPositions[headerCurrent.id]\n : undefined;\n\n return {\n position: isChildPinned ? 'sticky' : 'relative',\n zIndex: isChildPinned ? 1 : 0,\n left: leftValue !== undefined ? `${leftValue}px` : undefined,\n right: isChildPinned === 'right' ? `${newOffsetRight[headerCurrent.id]}px` : undefined,\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})\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 virtualRowHeight?: number\n ): Record<string, string | number>;\n transform<T>(\n row: Row<T>,\n table: Table<T>,\n property: 'isLastTopPinned' | 'isFirstBottomPinned' | 'pinningStyles',\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, 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 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 const rowEl = document.querySelector(`tr[data-row-id=\"${topRows[i].id}\"]`) as HTMLElement;\n offset += rowEl ? rowEl.getBoundingClientRect().height : 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 const rowEl = document.querySelector(`tr[data-row-id=\"${bottomRows[i].id}\"]`) as HTMLElement;\n offset += rowEl ? rowEl.getBoundingClientRect().height : 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})\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})\nexport class ZTableIsTemplateRefPipe implements PipeTransform {\n transform(value: unknown): value is TemplateRef<unknown> {\n return value instanceof TemplateRef;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { Cell } from '@tanstack/angular-table';\nimport type { ZTableColumnConfig } from '../z-table.types';\nimport { shouldBodyCellRenderColSpan } from '../z-table.util';\n\n@Pipe({\n name: 'zTableBodyCellRender',\n standalone: true,\n pure: true,\n})\nexport class ZTableBodyCellRenderPipe implements PipeTransform {\n transform<T>(cell: Cell<T, unknown>, allCells: Cell<T, unknown>[], columns: ZTableColumnConfig<T>[]): boolean {\n return shouldBodyCellRenderColSpan(cell, allCells, columns);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { Header } from '@tanstack/angular-table';\nimport type { ZTableColumnConfig } from '../z-table.types';\nimport { shouldFooterRender } from '../z-table.util';\n\n@Pipe({\n name: 'zTableFooterRender',\n standalone: true,\n pure: true,\n})\nexport class ZTableFooterRenderPipe implements PipeTransform {\n transform<T>(\n header: Header<T, unknown>,\n allHeaders: Header<T, unknown>[],\n columns: ZTableColumnConfig<T>[]\n ): boolean {\n return shouldFooterRender(header, allHeaders, columns);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { Header } from '@tanstack/angular-table';\nimport type { ZTableColumnConfig } from '../z-table.types';\nimport { shouldHeaderRender } from '../z-table.util';\n\n@Pipe({\n name: 'zTableHeaderRender',\n standalone: true,\n pure: true,\n})\nexport class ZTableHeaderRenderPipe implements PipeTransform {\n transform<T>(\n header: Header<T, unknown>,\n allHeaders: Header<T, unknown>[],\n columns: ZTableColumnConfig<T>[]\n ): boolean {\n return shouldHeaderRender(header, allHeaders, columns);\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input, OnDestroy } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ZInputComponent } from '@shival99/z-ui/components/z-input';\nimport { ZSelectComponent } from '@shival99/z-ui/components/z-select';\nimport type { ZSelectOption } 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],\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=\"Min\"\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=\"Max\"\n [ngModel]=\"rangeMaxValue()\"\n (ngModelChange)=\"onMaxChangeDebounced($event)\"\n class=\"min-w-0 flex-1\"\n />\n </div>\n }\n @case ('select') {\n <z-select\n zSize=\"sm\"\n [zOptions]=\"selectOptions()\"\n [ngModel]=\"columnFilterValue()?.toString() ?? ''\"\n zPlaceholder=\"All\"\n (ngModelChange)=\"onSelectChange($event)\"\n class=\"w-full min-w-0\"\n />\n }\n @case ('number') {\n <z-input\n zType=\"number\"\n zSize=\"sm\"\n zAllowClear\n zPlaceholder=\"Search...\"\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=\"Search...\"\n [ngModel]=\"(columnFilterValue() ?? '').toString()\"\n (ngModelChange)=\"onTextChangeDebounced($event)\"\n class=\"w-full\"\n />\n }\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 selectOptions = computed(() => {\n const columnDef = this._columnDef();\n const allOption: ZSelectOption = { label: 'All', value: '' };\n if (columnDef.filterOptions && columnDef.filterOptions.length > 0) {\n return [allOption, ...columnDef.filterOptions];\n }\n\n const uniqueValues = Array.from(this.zColumn().getFacetedUniqueValues().keys()).sort().slice(0, 5000);\n return [allOption, ...uniqueValues.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 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 { 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 parts(); 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]=\"hostEl\"\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: 4px;\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\n protected readonly hostEl = inject(ElementRef).nativeElement;\n protected readonly parts = computed(() => parseIconString(this.zText()));\n\n protected readonly tooltipContent = computed(() => {\n const tooltip = this.zTooltip();\n if (tooltip) {\n if (typeof tooltip === 'string') {\n return stripIconSyntax(tooltip);\n }\n\n if (tooltip.content && typeof tooltip.content === 'string') {\n return stripIconSyntax(tooltip.content);\n }\n }\n\n return stripIconSyntax(this.zText());\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 DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n NgZone,\n output,\n signal,\n TemplateRef,\n untracked,\n viewChild,\n afterNextRender,\n} from '@angular/core';\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 { 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 { ZTooltipDirective } from '@shival99/z-ui/components/z-tooltip';\nimport { ZSafeHtmlPipe } from '@shival99/z-ui/pipes';\nimport { ZCacheService } from '@shival99/z-ui/services';\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 { injectVirtualizer } from '@tanstack/angular-virtual';\nimport { NgScrollbar } from 'ngx-scrollbar';\nimport { explicitEffect } from 'ngxtension/explicit-effect';\nimport { ZTableRowHoverDirective } from './directives/z-table-row-hover.directive';\nimport {\n ZTableCellConfigPipe,\n ZTableCellOffsetPipe,\n ZTableColumnConfigPipe,\n ZTableColumnParentsPipe,\n ZTableFooterContentPipe,\n ZTablePinningStylesPipe,\n ZTableRowPipe,\n ZTableSpanPipe,\n ZTableIsTemplateRefPipe,\n ZTableHasIconPipe,\n ZTableColumnHeaderPipe,\n ZTableHeaderPinPipe,\n} from './pipes';\nimport { ZTableBodyCellRenderPipe } from './pipes/z-table-body-cell-render.pipe';\nimport { ZTableFooterRenderPipe } from './pipes/z-table-footer-render.pipe';\nimport { ZTableHeaderRenderPipe } from './pipes/z-table-header-render.pipe';\nimport { ZTableFilterComponent } from './z-table-filter.component';\nimport { ZTableIconTextComponent } from './z-table-icon-text.component';\nimport {\n Z_DEFAULT_DEBOUNCE_TIME,\n Z_DEFAULT_GROUP_SIZE,\n Z_DEFAULT_ROW_HEIGHT,\n Z_DEFAULT_VIRTUAL_OVERSCAN,\n ZTableChangeEvent,\n ZTableColumnConfig,\n ZTableConfig,\n ZTableControl,\n ZTableSavedConfig,\n ZTableVirtualConfig,\n ZVirtualGroup,\n} from './z-table.types';\nimport { columnConfigToColumnDef, isBodyConfig, getBodyRowSpan, getHeaderColSpan } 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 ZIconComponent,\n ZInputComponent,\n ZLoadingComponent,\n ZDrawerComponent,\n ZPaginationComponent,\n ZTableFilterComponent,\n ZPopoverDirective,\n ZButtonComponent,\n ZTooltipDirective,\n ZTableRowHoverDirective,\n ZTableIsTemplateRefPipe,\n ZTableHasIconPipe,\n ZTableCellConfigPipe,\n ZTableCellOffsetPipe,\n ZTableColumnConfigPipe,\n ZTableColumnHeaderPipe,\n ZTableColumnParentsPipe,\n ZTableFooterContentPipe,\n ZTableHeaderPinPipe,\n ZTablePinningStylesPipe,\n ZTableRowPipe,\n ZTableSpanPipe,\n ZTableFooterRenderPipe,\n ZTableHeaderRenderPipe,\n ZTableBodyCellRenderPipe,\n ZTableIconTextComponent,\n ZSafeHtmlPipe,\n ],\n standalone: true,\n templateUrl: './z-table.component.html',\n styleUrl: './z-table.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'z-table block relative',\n },\n exportAs: 'zTable',\n})\nexport class ZTableComponent<T> implements AfterViewInit {\n public readonly zConfig = input<ZTableConfig<T>>({ data: [], columns: [], mode: 'local' });\n public readonly zLoading = input(false);\n public readonly zKey = input<string>('');\n public readonly zChange = output<ZTableChangeEvent<T>>();\n public readonly zControl = output<ZTableControl<T>>();\n\n private readonly _destroyRef = inject(DestroyRef);\n private readonly _ngZone = inject(NgZone);\n\n private readonly _isSyncingScroll = signal(false);\n private readonly _savedScrollLeft = signal(0);\n private _resizeObserver: ResizeObserver | null = null;\n private _settingsDebounceTimeout: ReturnType<typeof setTimeout> | null = null;\n private _filterEmitDebounceTimeout: ReturnType<typeof setTimeout> | null = null;\n\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\n protected readonly expandedRowTemplate = viewChild<TemplateRef<unknown>>('expandedRowTemplate');\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 protected readonly pagination = signal<PaginationState>({ pageIndex: 1, pageSize: 10 });\n protected readonly sorting = signal<SortingState>([]);\n private readonly _tanstackPagination = computed(() => ({\n ...this.pagination(),\n pageIndex: Math.max(0, this.pagination().pageIndex - 1),\n }));\n\n protected readonly hasVerticalScroll = signal(false);\n protected readonly hasHorizontalScroll = signal(false);\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 protected readonly hasScrollLeft = signal(false);\n protected readonly hasScrollRight = signal(false);\n\n private readonly _columnPinVersion = signal(0);\n private readonly _dataForceUpdate = signal(0);\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 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 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 hasSorting = computed(() => {\n const columns = this.zConfig().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 private readonly _data = computed(() => {\n this._dataForceUpdate();\n return this.zConfig().data ?? [];\n });\n\n private readonly _columns = computed<ColumnDef<T>[]>(() => {\n let cols = this.zConfig().columns ?? [];\n cols = this._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 needsActionsColumn =\n this.zConfig().enableRowPinning && !hasExpandColumn && !hasSelectColumn && !this.hasBodyRowSpan();\n\n if (needsActionsColumn) {\n cols = [\n {\n id: 'actions',\n header: '',\n cell: '',\n size: 30,\n minSize: 30,\n maxSize: 30,\n enableSorting: false,\n enableFiltering: false,\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 === 'actions') {\n colDef.size = 50;\n colDef.minSize = 50;\n colDef.maxSize = 50;\n colDef.enableResizing = false;\n }\n\n return colDef;\n });\n });\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 private readonly _virtualConfig = computed<ZTableVirtualConfig>(() => {\n const { virtual } = this.zConfig();\n if (!virtual || typeof virtual === 'boolean') {\n return {\n enabled: !!virtual,\n rowHeight: Z_DEFAULT_ROW_HEIGHT,\n overscan: Z_DEFAULT_VIRTUAL_OVERSCAN,\n groupSize: Z_DEFAULT_GROUP_SIZE,\n };\n }\n\n return {\n enabled: virtual.enabled,\n rowHeight: virtual.rowHeight ?? Z_DEFAULT_ROW_HEIGHT,\n overscan: virtual.overscan ?? Z_DEFAULT_VIRTUAL_OVERSCAN,\n groupSize: virtual.groupSize ?? Z_DEFAULT_GROUP_SIZE,\n };\n });\n\n protected readonly virtualRowHeight = computed(() => this._virtualConfig().rowHeight ?? Z_DEFAULT_ROW_HEIGHT);\n protected readonly groupSize = computed(() => this._virtualConfig().groupSize ?? Z_DEFAULT_GROUP_SIZE);\n protected readonly groupHeight = computed(() => this.groupSize() * this.virtualRowHeight());\n protected readonly dynamicGroups = computed<ZVirtualGroup[]>(() => {\n if (!this.isVirtual()) {\n return [];\n }\n\n this.columnFilters();\n this.globalFilter();\n this.sorting();\n this.pagination();\n\n const rows = untracked(() => this.table.getRowModel().rows);\n const rowHeight = this.virtualRowHeight();\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 = untracked(() => 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 groups.push({\n startIndex,\n endIndex,\n rowCount: endIndex - startIndex + 1,\n height: (endIndex - startIndex + 1) * 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 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\n if (groups.length > 0) {\n return groups.map(group => group.height);\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(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 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 pageCount = isServerMode && config.totalRows ? Math.ceil(config.totalRows / pageSize) : undefined;\n\n return {\n data: this._data(),\n columns: this._columns(),\n getCoreRowModel: getCoreRowModel(),\n getExpandedRowModel: this.hasExpandColumn() ? getExpandedRowModel() : undefined,\n getFilteredRowModel: !isServerMode && this.hasFiltering() ? getFilteredRowModel() : undefined,\n getSortedRowModel: !isServerMode && this.hasSorting() ? getSortedRowModel() : undefined,\n getPaginationRowModel: !isServerMode && config.enablePagination ? getPaginationRowModel() : undefined,\n getFacetedRowModel: !isServerMode && this.hasFiltering() ? getFacetedRowModel() : undefined,\n getFacetedUniqueValues: !isServerMode && this.hasFiltering() ? getFacetedUniqueValues() : undefined,\n getFacetedMinMaxValues: !isServerMode && this.hasFiltering() ? getFacetedMinMaxValues() : undefined,\n manualFiltering: isServerMode,\n manualSorting: isServerMode,\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 newState = typeof updater === 'function' ? updater(this.columnFilters()) : updater;\n this._runAsyncStateUpdate(() => {\n this.columnFilters.set(newState);\n if (this.zConfig().mode !== 'server') {\n this.pagination.update(p => ({ ...p, pageIndex: 1 }));\n }\n\n this._emitFilterChangeDebounced(newState, this.globalFilter());\n });\n },\n onGlobalFilterChange: updater => {\n const newState = typeof updater === 'function' ? updater(this.globalFilter()) : updater;\n this._runAsyncStateUpdate(() => {\n this.globalFilter.set(newState);\n if (this.zConfig().mode !== 'server') {\n this.pagination.update(p => ({ ...p, pageIndex: 1 }));\n }\n\n this._emitFilterChangeDebounced(this.columnFilters(), newState);\n });\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 newState = typeof updater === 'function' ? updater(this.sorting()) : updater;\n this._runAsyncStateUpdate(() => {\n this.sorting.set(newState);\n if (this.zConfig().mode !== 'server') {\n this.pagination.update(p => ({ ...p, pageIndex: 1 }));\n }\n\n this.zChange.emit({ type: 'sort', data: { sorting: newState } });\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 protected readonly virtualizer = injectVirtualizer(() => {\n const groups = this.dynamicGroups();\n const rowHeight = this.virtualRowHeight();\n return {\n scrollElement: this.tbodyWrapper()?.nativeElement,\n count: groups.length > 0 ? groups.length : this._virtualGroupCount(),\n estimateSize: (index: number) => {\n if (groups.length > 0 && groups[index]) {\n return groups[index].height;\n }\n return rowHeight;\n },\n overscan: this._virtualConfig().overscan ?? Z_DEFAULT_VIRTUAL_OVERSCAN,\n };\n });\n\n constructor() {\n effect(() => {\n const cfg = this.zConfig();\n const initial = cfg.initialState;\n\n untracked(() => {\n if (initial) {\n if (initial.columnPinning) {\n this.columnPinning.set(initial.columnPinning);\n }\n if (initial.columnVisibility) {\n this.columnVisibility.set(initial.columnVisibility);\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 this.showHeaderFooterShadow.set(cfg.showHeaderShadow ?? cfg.showFooterShadow ?? true);\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 collectPinnedColumns(cols);\n\n if (leftPinned.length > 0 || rightPinned.length > 0) {\n this.columnPinning.set({ left: leftPinned, right: rightPinned });\n }\n });\n });\n\n effect(() => {\n const cfg = this.zConfig();\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 untracked(() => {\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\n afterNextRender(() => {\n const containerEl = this.tbodyContainer()?.nativeElement;\n if (containerEl && !this._resizeObserver) {\n this._resizeObserver = new ResizeObserver(() => {\n this._checkVerticalScroll();\n this._checkHorizontalScroll();\n });\n\n this._resizeObserver.observe(containerEl);\n this._destroyRef.onDestroy(() => {\n if (this._resizeObserver) {\n this._resizeObserver.disconnect();\n this._resizeObserver = null;\n }\n });\n }\n });\n\n explicitEffect([this.columnFilters, this.globalFilter, this.pagination, this.sorting], () => {\n this._checkVerticalScroll();\n this._checkHorizontalScroll();\n });\n\n explicitEffect([this.zLoading, this.isProcessing], () => {\n const loading = this.zLoading();\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 }\n return;\n }\n\n setTimeout(() => {\n const wrapperEl = this.tbodyWrapper()?.nativeElement;\n if (wrapperEl) {\n wrapperEl.scrollTop = 0;\n wrapperEl.scrollLeft = this._savedScrollLeft();\n }\n }, 0);\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 ngAfterViewInit(): void {\n this._loadConfig();\n setTimeout(() => {\n this._checkVerticalScroll();\n this._checkHorizontalScroll();\n }, 100);\n\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 },\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 });\n }\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 private _runAsyncStateUpdate(updateFn: () => void): void {\n const isServerMode = this.zConfig().mode === 'server';\n if (isServerMode) {\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 const isServerMode = this.zConfig().mode === 'server';\n if (isServerMode) {\n this.zChange.emit({\n type: 'filter',\n data: { filters, search },\n });\n return;\n }\n\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 _checkVerticalScroll(): void {\n const tbodyWrapperEl = this.tbodyWrapper()?.nativeElement;\n if (tbodyWrapperEl) {\n const hasScroll = tbodyWrapperEl.scrollHeight > tbodyWrapperEl.clientHeight;\n this.hasVerticalScroll.set(hasScroll);\n }\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 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 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 }\n\n public toggleHeaderFooterShadow(): void {\n this.showHeaderFooterShadow.update(v => !v);\n }\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\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 private _saveConfig(): void {\n const key = this.zKey();\n if (!key) {\n return;\n }\n\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 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 _loadConfig(): void {\n const key = this.zKey();\n if (!key) {\n return;\n }\n\n try {\n const config = ZCacheService.get<ZTableSavedConfig>(`table-config-${key}`);\n if (!config) {\n return;\n }\n\n if (config.columnOrder && config.columnOrder.length > 0) {\n this.columnOrder.set(config.columnOrder);\n }\n\n if (config.columnSizing) {\n this.table.setColumnSizing(config.columnSizing);\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 } catch (error) {\n console.error('Failed to load table config:', error);\n }\n }\n\n private _findColumnConfig(columnId: string): ZTableColumnConfig<T> | undefined {\n const findInColumns = (columns: ZTableColumnConfig<T>[]): 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 = findInColumns(col.columns);\n if (found) {\n return found;\n }\n }\n }\n\n return undefined;\n };\n\n return findInColumns(this.zConfig().columns);\n }\n\n private _filterVisibleColumns(columns: ZTableColumnConfig<T>[]): ZTableColumnConfig<T>[] {\n return 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: this._filterVisibleColumns(col.columns),\n };\n }\n return col;\n });\n }\n}\n","<!-- Toolbar: Search & Settings -->\n@if (zConfig().enableSearch || zConfig().enableSettings) {\n <div class=\"z-table-toolbar mb-2 flex items-center justify-between gap-4\">\n <!-- Search -->\n @if (zConfig().enableSearch) {\n <z-input\n class=\"w-64\"\n zSize=\"sm\"\n zPlaceholder=\"Search...\"\n [zSearch]=\"true\"\n [zDebounce]=\"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()\">Settings</z-button>\n }\n </div>\n}\n\n<div\n class=\"z-table-container shadow-xs\"\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 <col [style.width]=\"'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-xs\"\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 | zTableHeaderRender: headerGroup.headers : zConfig().columns;\n @if (rowSpan && shouldRender) {\n <th\n [attr.id]=\"header.column.id\"\n [ngStyle]=\"header.column | zTablePinningStyles: header : 'header' : table : zConfig().columns\"\n [class]=\"header.column.id | zTableColumnConfig: zConfig().columns : 'headerClass'\"\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 | zTableHeaderPin: 'isLastLeftPinned' : zConfig().columns\"\n [class.z-sticky-right-first]=\"header | zTableHeaderPin: 'isFirstRightPinned' : zConfig().columns\"\n [class.z-sticky-right-last]=\"header | zTableHeaderPin: '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]=\"header.column.id === 'actions'\"\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 zSize=\"sm\"\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 if (header.column.id === 'actions') {\n <!-- Empty header for actions column -->\n <div class=\"flex items-center justify-center\"></div>\n } @else {\n <!-- Header Content with Sort and Pin -->\n <div class=\"flex w-full items-center gap-1\">\n <!-- Header Text -->\n <div\n class=\"flex min-w-0 flex-1 items-center gap-1.5\"\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 <ng-container\n *flexRender=\"header.column.columnDef.header; props: header.getContext(); let headerContent\">\n @if (headerContent | zTableIsTemplateRef) {\n <!-- TemplateRef rendering -->\n <ng-container\n *ngTemplateOutlet=\"headerContent; context: { $implicit: header.getContext() }\" />\n } @else if (headerContent | zTableHasIcon) {\n <!-- Icon syntax rendering -->\n <z-table-icon-text\n class=\"min-w-0 truncate\"\n [zText]=\"headerContent\"\n [zTooltip]=\"header.column.id | zTableColumnConfig: zConfig().columns : 'headerTooltip'\" />\n } @else {\n <!-- Default/innerHTML rendering -->\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 [innerHTML]=\"headerContent | zSafeHtml\"></span>\n }\n </ng-container>\n <!-- Sort Icon (clickable) - hidden when table has rowSpan columns -->\n @if (header.column.getCanSort() && !hasBodyRowSpan()) {\n <span\n class=\"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=\"12\" />\n } @else if (header.column.getIsSorted() === 'desc') {\n <z-icon zType=\"lucideArrowDown\" zSize=\"12\" />\n } @else {\n <z-icon zType=\"lucideArrowDownUp\" zSize=\"12\" class=\"opacity-30\" />\n }\n </span>\n }\n </div>\n\n <!-- Column Pin Popover -->\n @if (header.column.getCanPin() && zConfig().enableColumnPinning) {\n <ng-template #colPinPopoverContent>\n <div class=\"flex flex-col gap-0.5 p-0.5\">\n @if (header.column.getIsPinned() !== 'left') {\n <button\n type=\"button\"\n (click)=\"handleColumnPin(header.column.id, 'left'); colPinPopover.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=\"lucideChevronLeft\" zSize=\"12\" />\n <span>Pin left</span>\n </button>\n }\n @if (header.column.getIsPinned() !== 'right') {\n <button\n type=\"button\"\n (click)=\"handleColumnPin(header.column.id, 'right'); colPinPopover.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=\"lucideChevronRight\" zSize=\"12\" />\n <span>Pin right</span>\n </button>\n }\n @if (header.column.getIsPinned()) {\n <button\n type=\"button\"\n (click)=\"handleColumnPin(header.column.id, false); colPinPopover.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>Unpin</span>\n </button>\n }\n </div>\n </ng-template>\n <button\n type=\"button\"\n z-popover\n #colPinPopover=\"zPopover\"\n [zPopoverContent]=\"colPinPopoverContent\"\n zTrigger=\"click\"\n zPosition=\"bottom-right\"\n [zOffset]=\"3\"\n class=\"z-header-pin-trigger text-muted-foreground hover:bg-muted hover:text-foreground flex shrink-0 cursor-pointer items-center justify-center rounded p-1\"\n [class.text-primary]=\"header.column.getIsPinned()\">\n <z-icon zType=\"lucideEllipsis\" zSize=\"12\" class=\"rotate-90\" />\n </button>\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 (mousedown)=\"header.getResizeHandler()($event)\"\n (touchstart)=\"header.getResizeHandler()($event)\"></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 (zLoading() || isProcessing()) {\n <!-- Loading State -->\n <div class=\"z-loading-state\">\n <z-loading [zLoading]=\"true\" zSize=\"lg\" zText=\"Loading...\" />\n </div>\n } @else if (isEmpty()) {\n <div class=\"z-empty-state\">\n @if (isNoSearchResults()) {\n <!-- No search results -->\n <z-icon zType=\"lucideSearchX\" zSize=\"40\" class=\"text-muted-foreground/50\" />\n <p class=\"text-muted-foreground text-sm\">No results found</p>\n } @else {\n <!-- Empty data -->\n <z-icon zType=\"lucidePackageOpen\" zSize=\"40\" class=\"text-muted-foreground/50\" />\n <p class=\"text-muted-foreground text-sm\">No data</p>\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 class=\"z-virtual-row\"\n [style.height.px]=\"dynamicGroupHeights()[virtualItem.index] ?? groupSize() * virtualRowHeight()\"\n [style.transform]=\"'translateY(' + virtualItem.start + 'px)'\">\n <table [ngStyle]=\"columnSizeVars()\" [style.width.px]=\"table.getTotalSize()\">\n <ng-container *ngTemplateOutlet=\"colGroupTpl\" />\n <tbody [class.z-has-vertical-scroll]=\"hasVerticalScroll()\">\n @for (row of groupRows; track row.id) {\n <tr\n z-table-row-hover\n [style.height.px]=\"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 @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 | zTableBodyCellRender: row.getVisibleCells() : zConfig().columns;\n @if (shouldRenderRowSpan && shouldRenderColSpan) {\n <td\n [ngStyle]=\"\n cell.column\n | zTablePinningStyles: cell : 'body' : row.getVisibleCells() : zConfig().columns\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 [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 zSize=\"sm\"\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 {\n <ng-container\n *flexRender=\"cell.column.columnDef.cell; props: cell.getContext(); let cellContent\">\n @if (cellContent | zTableIsTemplateRef) {\n <!-- TemplateRef rendering -->\n <div\n [ngClass]=\"cell | zTableCellConfig: zConfig().columns : 'contentClass'\"\n [ngStyle]=\"cell | zTableCellConfig: zConfig().columns : 'contentStyle'\">\n <ng-container\n *ngTemplateOutlet=\"cellContent; context: { $implicit: cell.getContext() }\" />\n </div>\n } @else if (cellContent | zTableHasIcon) {\n <!-- Icon syntax rendering -->\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 } @else {\n <!-- Default/innerHTML rendering -->\n <div\n class=\"z-table-cell-text\"\n z-tooltip\n [zContent]=\"\n (cell | zTableCellConfig: zConfig().columns : 'contentTooltip') || cellContent\n \"\n [innerHTML]=\"cellContent | zSafeHtml\"\n [ngClass]=\"cell | zTableCellConfig: zConfig().columns : 'contentClass'\"\n [ngStyle]=\"cell | zTableCellConfig: zConfig().columns : 'contentStyle'\"></div>\n }\n </ng-container>\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 [class.z-has-vertical-scroll]=\"hasVerticalScroll()\">\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' : 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 = cell | zTableBodyCellRender: row.getVisibleCells() : zConfig().columns;\n @if (shouldRenderRowSpan && shouldRenderColSpan) {\n <td\n [ngStyle]=\"\n cell.column | zTablePinningStyles: cell : 'body' : row.getVisibleCells() : zConfig().columns\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]=\"cell.column.id === 'actions'\"\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 zSize=\"sm\"\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>Pin top</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>Pin bottom</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>Unpin</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>Pin top</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>Pin bottom</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>Unpin</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>Pin top</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>Pin bottom</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>Unpin</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 {\n <ng-container\n *flexRender=\"cell.column.columnDef.cell; props: cell.getContext(); let cellContent\">\n @if (cellContent | zTableIsTemplateRef) {\n <!-- TemplateRef rendering -->\n <div\n [ngClass]=\"cell | zTableCellConfig: zConfig().columns : 'contentClass'\"\n [ngStyle]=\"cell | zTableCellConfig: zConfig().columns : 'contentStyle'\">\n <ng-container\n *ngTemplateOutlet=\"cellContent; context: { $implicit: cell.getContext() }\" />\n </div>\n } @else {\n <!-- Default/innerHTML rendering -->\n <div\n class=\"z-table-cell-text\"\n z-tooltip\n [zContent]=\"\n (cell | zTableCellConfig: zConfig().columns : 'contentTooltip') || cellContent\n \"\n [innerHTML]=\"cellContent | zSafeHtml\"\n [ngClass]=\"cell | zTableCellConfig: zConfig().columns : 'contentClass'\"\n [ngStyle]=\"cell | zTableCellConfig: zConfig().columns : 'contentStyle'\"></div>\n }\n </ng-container>\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 | zTableFooterRender: footerGroup.headers : zConfig().columns;\n @if (rowSpan && shouldRender) {\n <th\n [ngStyle]=\"footer.column | zTablePinningStyles: footer : 'header' : table : zConfig().columns\"\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]=\"footer | zTableHeaderPin: 'isLastLeftPinned' : zConfig().columns\"\n [class.z-sticky-right-first]=\"footer | zTableHeaderPin: 'isFirstRightPinned' : zConfig().columns\"\n [class.z-sticky-right-last]=\"footer | zTableHeaderPin: 'isLastRightPinned' : zConfig().columns\"\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 <ng-container\n *ngTemplateOutlet=\"footerContent; context: { $implicit: footer.getContext() }\" />\n } @else if (footerContent | zTableHasIcon) {\n <!-- Icon syntax rendering -->\n <z-table-icon-text\n [zText]=\"footerContent\"\n [zTooltip]=\"\n footer.column.id | zTableColumnConfig: zConfig().columns : 'footerTooltip'\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 {{ footerContent }}\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 {{ configFooterContent }}\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().enablePagination && zConfig().pagination?.enabled !== false) {\n @let totalRows = table.getFilteredRowModel().rows.length;\n @let totalLabel = zConfig().pagination?.totalLabel ?? '{total} total rows';\n <div class=\"mt-4 flex items-center justify-between gap-4\">\n <div class=\"text-sm text-gray-500\">\n {{ totalLabel.replace('{total}', zConfig().totalCount?.toString() || totalRows.toString()) }}\n </div>\n <z-pagination\n [zTotal]=\"zConfig().totalCount ?? totalRows\"\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 || zLoading() || isProcessing()\"\n (zOnPageChange)=\"onPageChange($event)\" />\n </div>\n}\n\n<!-- Settings Drawer -->\n<z-drawer\n [(zVisible)]=\"showSettingsDrawer\"\n zTitle=\"Table Settings\"\n zPlacement=\"right\"\n zWidth=\"500px\"\n [zShadow]=\"true\"\n [zOkText]=\"null\"\n zCancelText=\"Close\">\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\">Display Settings</h4>\n <p class=\"text-muted-foreground mb-3 text-xs\">Customize table appearance</p>\n <div class=\"grid grid-cols-2 gap-x-4 gap-y-3\">\n <z-checkbox\n zSize=\"sm\"\n [zChecked]=\"showHorizontalBorder()\"\n zText=\"Horizontal Border\"\n (zChange)=\"showHorizontalBorder.set(!showHorizontalBorder())\" />\n <z-checkbox\n zSize=\"sm\"\n [zChecked]=\"showVerticalBorder()\"\n zText=\"Vertical Border\"\n (zChange)=\"showVerticalBorder.set(!showVerticalBorder())\" />\n <z-checkbox\n zSize=\"sm\"\n [zChecked]=\"showHeaderFooterShadow()\"\n zText=\"Header/Footer Shadow\"\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\">Column Settings</h4>\n <p class=\"text-muted-foreground mb-3 text-xs\">Toggle visibility, drag to reorder, and pin columns</p>\n\n <!-- Unpinned Columns (Draggable) -->\n <div cdkDropList (cdkDropListDropped)=\"onPendingColumnDrop($event)\" class=\"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 [cdkDragDisabled]=\"false\"\n class=\"border-border bg-card hover:border-primary flex cursor-move items-center gap-2 rounded border px-2 py-1.5 text-sm transition-all hover:shadow-sm\"\n [class.opacity-60]=\"!isVisible\">\n <!-- Drag Handle -->\n <z-icon zType=\"lucideGripVertical\" zSize=\"14\" class=\"text-muted-foreground 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 }}\n </span>\n @let parents = columnId | zTableColumnParents: zConfig().columns;\n @if (parents) {\n <span class=\"text-muted-foreground truncate text-[10px]\">({{ parents }})</span>\n }\n </span>\n\n <!-- Pin Buttons -->\n @if (canPin) {\n <div class=\"flex shrink-0 items-center gap-0.5\">\n <button\n type=\"button\"\n (click)=\"onToggleColumnPin(columnId, 'left')\"\n class=\"text-muted-foreground hover:bg-muted cursor-pointer rounded p-1 text-xs transition-colors\"\n title=\"Pin Left\">\n <z-icon zType=\"lucideArrowLeft\" zSize=\"12\" />\n </button>\n <button\n type=\"button\"\n (click)=\"onToggleColumnPin(columnId, 'right')\"\n class=\"text-muted-foreground hover:bg-muted cursor-pointer rounded p-1 text-xs transition-colors\"\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\">Pinned Columns</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 <!-- 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 }}\n </span>\n @let pinnedParents = columnId | zTableColumnParents: zConfig().columns;\n @if (pinnedParents) {\n <span class=\"text-muted-foreground truncate text-[10px]\">({{ pinnedParents }})</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-[10px] font-medium\">\n {{ isPinned === 'left' ? 'LEFT' : 'RIGHT' }}\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/directives/z-table-row-hover.directive.ts","../../../../libs/core-ui/components/z-table/z-table.types.ts","../../../../libs/core-ui/components/z-table/z-table.util.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-cell-config.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-cell-offset.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-header-pin.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/pipes/z-table-body-cell-render.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-footer-render.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-header-render.pipe.ts","../../../../libs/core-ui/components/z-table/z-table-filter.component.ts","../../../../libs/core-ui/components/z-table/z-table-icon-text.component.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":["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})\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","/* eslint-disable unused-imports/no-unused-vars */\nimport { type TemplateRef, type Type } from '@angular/core';\nimport { type ZSelectOption } from '@shival99/z-ui/components/z-select';\nimport { type ZTooltipConfig } from '@shival99/z-ui/components/z-tooltip';\nimport {\n type CellContext,\n type ColumnFiltersState,\n type ColumnPinningState,\n type ExpandedState,\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\nexport const Z_DEFAULT_ROW_HEIGHT = 40;\nexport const Z_DEFAULT_VIRTUAL_OVERSCAN = 5;\nexport const Z_DEFAULT_GROUP_SIZE = 1;\nexport const Z_DEFAULT_COLUMN_MIN_SIZE = 80;\nexport const Z_DEFAULT_DEBOUNCE_TIME = 150;\n\nexport interface ZVirtualGroup {\n startIndex: number;\n endIndex: number;\n rowCount: number;\n height: number;\n}\n\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\nexport type ZTableAlign = 'left' | 'center' | 'right';\nexport type ZTableBorderType = 'none' | 'full' | 'horizontal' | 'vertical';\nexport type ZTableCellContent<T> =\n | string\n | number\n | TemplateRef<{ $implicit: CellContext<T, unknown> }>\n | Type<unknown>\n | ((info: CellContext<T, unknown>) => string | number | TemplateRef<unknown>);\n\nexport type ZTableHeaderContent<T> =\n | string\n | TemplateRef<unknown>\n | Type<unknown>\n | (() => string)\n | ((info: HeaderContext<T, unknown>) => string);\n\nexport type ZTableColumn<T = unknown> = ZTableColumnConfig<T>;\n\nexport type ZTableFilterType = 'text' | 'number' | 'select' | 'multi-select' | 'date' | 'range' | 'tags';\nexport type ZTableMode = 'local' | 'server';\n\nexport interface ZTableSortConfig<T> {\n enabled?: boolean;\n mode?: ZTableMode;\n sortKey?: string;\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 interface ZTableSavedConfig {\n columnOrder: string[];\n columnSizing: Record<string, number>;\n columnPinning: { left?: string[]; right?: string[] };\n columnVisibility: Record<string, boolean>;\n showHeaderFooterShadow: boolean;\n showHorizontalBorder: boolean;\n showVerticalBorder: boolean;\n}\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}\n\n/** Header cell configuration */\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 tooltip?: string | ZTooltipConfig;\n}\n\n/** Body/data cell configuration */\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 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}\n\n/** Footer cell configuration */\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 tooltip?: string | ZTooltipConfig;\n}\n\nexport interface ZTableColumnConfig<T> {\n id: string;\n visible?: boolean | (() => boolean);\n accessorKey?: keyof T & string;\n accessorFn?: (row: T) => unknown;\n\n header?: ZTableHeaderColumnConfig<T> | ZTableHeaderContent<T>;\n body?: ZTableBodyColumnConfig<T> | ZTableCellContent<T>;\n footer?: ZTableFooterColumnConfig<T> | ZTableHeaderContent<T>;\n\n size?: number;\n minSize?: number;\n maxSize?: number;\n\n sort?: ZTableSortConfig<T> | boolean;\n filter?: ZTableFilterConfig<T> | boolean;\n\n enableResizing?: boolean;\n enablePinning?: boolean;\n enableHiding?: boolean;\n\n pinned?: 'left' | 'right' | false;\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\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 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 type ZTableChangeType =\n | 'page'\n | 'sort'\n | 'filter'\n | 'search'\n | 'select'\n | 'expand'\n | 'rowSelect'\n | 'rowSelectAll'\n | 'rowExpand'\n | 'cellClick';\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 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\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 enabled: boolean;\n rowHeight?: number;\n overscan?: number;\n groupSize?: number;\n}\n\nexport interface ZTableConfig<T> {\n mode?: ZTableMode;\n data: T[];\n totalCount?: number;\n columns: ZTableColumnConfig<T>[];\n getRowId?: (row: T, index: number, parent: T | undefined, data: T[]) => string;\n getSubRows?: (row: T, index: number, parent: T | undefined, data: T[]) => T[] | undefined;\n\n totalRows?: number;\n virtual?: ZTableVirtualConfig | boolean;\n\n showHorizontalBorder?: boolean;\n showVerticalBorder?: boolean;\n showHeaderShadow?: boolean;\n showFooterShadow?: boolean;\n\n enableSettings?: boolean;\n enableColumnResizing?: boolean;\n enableRowPinning?: boolean;\n enableMultiSort?: boolean;\n enableSearch?: boolean;\n enablePagination?: boolean;\n enableColumnPinning?: boolean;\n\n pagination?: ZTablePaginationConfig;\n initialState?: ZTableInitialState;\n loading?: boolean;\n\n expandedRowTemplate?: TemplateRef<{ $implicit: Row<T> }>;\n emptyTemplate?: TemplateRef<void>;\n loadingTemplate?: TemplateRef<void>;\n getRowCanExpand?: (row: Row<T>) => boolean;\n\n maxHeight?: string;\n minHeight?: string;\n debounceTime?: number;\n}\n\ndeclare module '@tanstack/angular-table' {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface TableMeta<TData extends RowData> {\n updateData?: (rowIndex: number, columnId: string, value: unknown) => void;\n }\n}\n","import 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 Z_DEFAULT_COLUMN_MIN_SIZE,\n} from './z-table.types';\n\nexport const isHeaderConfig = <T>(\n config: ZTableHeaderColumnConfig<T> | ZTableHeaderContent<T> | undefined\n): config is ZTableHeaderColumnConfig<T> => {\n if (!config || typeof config !== 'object') {\n return false;\n }\n return config.constructor === Object;\n};\n\nexport const isBodyConfig = <T>(\n config: ZTableBodyColumnConfig<T> | ZTableCellContent<T> | undefined\n): config is ZTableBodyColumnConfig<T> => {\n if (!config || typeof config !== 'object') {\n return false;\n }\n return config.constructor === Object;\n};\n\nexport const isFooterConfig = <T>(\n config: ZTableFooterColumnConfig<T> | ZTableHeaderContent<T> | undefined\n): config is ZTableFooterColumnConfig<T> => {\n if (!config || typeof config !== 'object') {\n return false;\n }\n return config.constructor === Object;\n};\n\nexport const getHeaderConfig = <T>(col: ZTableColumnConfig<T> | undefined) => {\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 };\n\n if (!col) {\n return empty;\n }\n\n if (!isHeaderConfig(col.header)) {\n return { ...empty, content: col.header };\n }\n\n return {\n content: col.header.content,\n class: col.header.class,\n style: col.header.style,\n align: col.header.align,\n tooltip: col.header.tooltip,\n rowSpan: col.header.rowSpan,\n colSpan: col.header.colSpan,\n };\n};\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 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 };\n\n if (!col) {\n return empty;\n }\n\n if (!isFooterConfig(col.footer)) {\n return { ...empty, content: col.footer };\n }\n\n return {\n content: col.footer.content,\n class: col.footer.class,\n style: col.footer.style,\n align: col.footer.align,\n tooltip: col.footer.tooltip,\n rowSpan: col.footer.rowSpan,\n colSpan: col.footer.colSpan,\n };\n};\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\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\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\nexport function hasIconSyntax(content: unknown): boolean {\n if (!content || typeof content !== 'string') {\n return false;\n }\n return /\\[icon:[^\\]]+\\]/.test(content);\n}\n\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\nexport const deepestHeader = <D, V>(header: Header<D, V>): Header<D, V> | null => {\n let last = header;\n while (true) {\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\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 const above = header.depth - header.column.depth;\n return above > 1 ? null : rowSpan;\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 if (configColSpan !== undefined && configColSpan !== null) {\n return configColSpan;\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 if (configColSpan !== undefined && configColSpan !== null) {\n return configColSpan;\n }\n return header.colSpan > 1 ? header.colSpan : null;\n};\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\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) {\n if (i + prevColSpan > currentIndex) {\n return false;\n }\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 => {\n const currentIndex = allHeaders.findIndex(h => h.id === header.id);\n if (currentIndex <= 0) {\n return true;\n }\n\n for (let i = 0; i < currentIndex; i++) {\n const prevHeader = allHeaders[i];\n const prevConfig = findColumnConfig(prevHeader.column.id, columns);\n const prevColSpan = getFooterColSpan(prevConfig);\n\n if (prevColSpan && prevColSpan > 1) {\n if (i + prevColSpan > currentIndex) {\n return false;\n }\n }\n }\n\n return true;\n};\n\nexport const shouldHeaderRender = <T>(\n header: Header<T, unknown>,\n allHeaders: Header<T, unknown>[],\n columns: ZTableColumnConfig<T>[]\n): boolean => {\n const currentIndex = allHeaders.findIndex(h => h.id === header.id);\n if (currentIndex <= 0) {\n return true;\n }\n\n for (let i = 0; i < currentIndex; i++) {\n const prevHeader = allHeaders[i];\n const prevConfig = findColumnConfig(prevHeader.column.id, columns);\n const prevColSpan = getHeaderColSpan(prevConfig);\n\n if (prevColSpan && prevColSpan > 1) {\n if (i + prevColSpan > currentIndex) {\n return false;\n }\n }\n }\n\n return true;\n};\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 if (sortConfig?.sortFn) {\n columnDef.sortingFn = sortConfig.sortFn as ColumnDef<T>['sortingFn'];\n }\n\n if (filterConfig?.filterFn) {\n columnDef.filterFn = filterConfig.filterFn as ColumnDef<T>['filterFn'];\n }\n\n if (filterConfig?.type === '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\n if (Array.isArray(filterValue)) {\n return filterValue.includes(cellValue);\n }\n\n return cellValue === filterValue;\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","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})\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 { Cell, Column, Header } from '@tanstack/angular-table';\n\n@Pipe({\n name: 'zTableCellOffset',\n standalone: true,\n pure: true,\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\n // Find the index of this column in the ordered columns list\n const columnIndex = orderedColumns.findIndex(col => col.id === columnId);\n\n // If it's the first column (index 0), it's at the left edge\n if (columnIndex === 0) {\n return true;\n }\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 { 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})\nexport class ZTableColumnConfigPipe implements PipeTransform {\n transform<T>(\n columnId: string,\n columns: ZTableColumnConfig<T>[],\n property: 'headerClass' | 'headerAlignClass' | 'footerClass' | 'footerAlignClass'\n ): string;\n transform<T>(\n columnId: string,\n columns: ZTableColumnConfig<T>[],\n property: 'headerStyle' | 'footerStyle'\n ): Record<string, string>;\n transform<T>(\n columnId: string,\n columns: ZTableColumnConfig<T>[],\n property: 'headerTooltip' | 'footerTooltip'\n ): string | ZTooltipConfig;\n transform<T>(columnId: string, columns: ZTableColumnConfig<T>[], property: 'hasBodyRowSpan'): boolean;\n transform<T>(columnId: string, columns: ZTableColumnConfig<T>[], property: 'footerContent'): unknown;\n transform<T>(\n columnId: string,\n columns: ZTableColumnConfig<T>[],\n property:\n | 'headerClass'\n | 'headerStyle'\n | 'headerTooltip'\n | 'headerAlignClass'\n | 'footerClass'\n | 'footerStyle'\n | 'footerTooltip'\n | 'footerAlignClass'\n | 'hasBodyRowSpan'\n | 'footerContent'\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 '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 'hasBodyRowSpan':\n return columnConfig ? isBodyConfig(columnConfig.body) && columnConfig.body.rowSpan !== undefined : false;\n\n case 'footerContent': {\n const footerConfig = getFooterConfig(columnConfig);\n return footerConfig.content || '';\n }\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})\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})\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})\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})\nexport class ZTableHasIconPipe implements PipeTransform {\n transform(content: unknown): boolean {\n if (typeof content !== 'string') {\n return false;\n }\n return hasIconSyntax(content);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { Column, Header } from '@tanstack/angular-table';\nimport type { ZTableColumnConfig } from '../z-table.types';\nimport { findColumnConfig, getHeaderColSpan } from '../z-table.util';\n\nexport type ZHeaderPinProperty = 'isLastLeftPinned' | 'isFirstRightPinned' | 'isLastRightPinned';\n\n@Pipe({\n name: 'zTableHeaderPin',\n standalone: true,\n pure: true,\n})\nexport class ZTableHeaderPinPipe implements PipeTransform {\n transform<T>(\n item: Header<T, unknown>,\n property: ZHeaderPinProperty,\n columns?: ZTableColumnConfig<T>[],\n _orderedLeafColumns?: Column<T>[]\n ): boolean {\n switch (property) {\n case 'isLastLeftPinned':\n return this._isHeaderLastLeftPinned(item, columns ?? []);\n\n case 'isFirstRightPinned':\n return this._isHeaderFirstRightPinned(item);\n\n case 'isLastRightPinned':\n return this._isHeaderLastRightPinned(item, columns ?? []);\n\n default:\n return false;\n }\n }\n\n private _isHeaderLastLeftPinned<T>(header: Header<T, unknown>, columns: ZTableColumnConfig<T>[]): boolean {\n const leafHeaders = header.getLeafHeaders();\n const hasLastLeftPinnedLeaf = leafHeaders.some(\n lh => lh.column.getIsPinned() === 'left' && lh.column.getIsLastColumn('left')\n );\n if (hasLastLeftPinnedLeaf) {\n return true;\n }\n\n const columnConfig = findColumnConfig(header.column.id, columns);\n const configColSpan = getHeaderColSpan(columnConfig);\n\n if (configColSpan && configColSpan > 1) {\n const { headers: allHeadersInGroup } = header.headerGroup;\n const currentIndex = allHeadersInGroup.findIndex(h => h.id === header.id);\n\n if (currentIndex !== -1) {\n const endIndex = currentIndex + configColSpan - 1;\n\n if (endIndex < allHeadersInGroup.length) {\n const targetHeader = allHeadersInGroup[endIndex];\n const targetLeafHeaders = targetHeader.getLeafHeaders();\n return targetLeafHeaders.some(lh => lh.column.getIsPinned() === 'left' && lh.column.getIsLastColumn('left'));\n }\n }\n }\n\n return false;\n }\n\n private _isHeaderFirstRightPinned<T>(header: Header<T, unknown>): boolean {\n const leafHeaders = header.getLeafHeaders();\n return leafHeaders.some(lh => lh.column.getIsPinned() === 'right' && lh.column.getIsFirstColumn('right'));\n }\n\n private _isHeaderLastRightPinned<T>(header: Header<T, unknown>, columns: ZTableColumnConfig<T>[]): 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 = getHeaderColSpan(columnConfig);\n\n if (configColSpan && configColSpan > 1) {\n const { headers: allHeadersInGroup } = header.headerGroup;\n const currentIndex = allHeadersInGroup.findIndex(h => h.id === header.id);\n\n if (currentIndex !== -1) {\n const endIndex = currentIndex + configColSpan - 1;\n\n if (endIndex < allHeadersInGroup.length) {\n const targetHeader = allHeadersInGroup[endIndex];\n const targetLeafHeaders = targetHeader.getLeafHeaders();\n return targetLeafHeaders.some(\n lh => lh.column.getIsPinned() === 'right' && lh.column.getIsLastColumn('right')\n );\n }\n }\n }\n\n return false;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { Column, Cell, Header, Table } from '@tanstack/angular-table';\nimport type { ZTableColumnConfig } from '../z-table.types';\nimport {\n shouldHeaderRender,\n getHeaderColSpan,\n findColumnConfig,\n getBodyColSpan,\n shouldBodyCellRenderColSpan,\n} from '../z-table.util';\n\n@Pipe({\n name: 'zTablePinningStyles',\n standalone: true,\n pure: true,\n})\nexport class ZTablePinningStylesPipe implements PipeTransform {\n transform<T>(\n column: Column<T, unknown>,\n item: Cell<T, unknown> | Header<T, unknown> | null,\n type: 'header' | 'body',\n tableOrCells?: Table<T> | Cell<T, unknown>[],\n columns?: ZTableColumnConfig<T>[]\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 === '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 ): Record<string, string | number | undefined> {\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 const currentIdx = allCells.findIndex(c => c.id === cell.id);\n if (currentIdx > 0) {\n let calculatedOffset = 0;\n for (let i = 0; i < currentIdx; i++) {\n const prevCell = allCells[i];\n if (!shouldBodyCellRenderColSpan(prevCell, allCells, columns)) {\n continue;\n }\n const prevConfig = findColumnConfig(prevCell.column.id, columns);\n const prevColSpan = getBodyColSpan(prevConfig, prevCell.getContext());\n if (prevColSpan && prevColSpan > 1) {\n let spanWidth = prevCell.column.getSize();\n for (let j = 1; j < prevColSpan && i + j < allCells.length; j++) {\n spanWidth += allCells[i + j].column.getSize();\n }\n\n calculatedOffset += spanWidth;\n continue;\n }\n calculatedOffset += prevCell.column.getSize();\n }\n leftOffset = calculatedOffset;\n }\n }\n\n if (allCells && cell && isPinned === 'right') {\n const currentIdx = allCells.findIndex(c => c.id === cell.id);\n if (currentIdx === allCells.length - 1) {\n rightOffset = 0;\n }\n if (currentIdx >= 0 && currentIdx < allCells.length - 1) {\n let calculatedOffset = 0;\n for (let i = currentIdx + 1; i < allCells.length; i++) {\n const nextCell = allCells[i];\n if (!shouldBodyCellRenderColSpan(nextCell, allCells, columns)) {\n continue;\n }\n\n const nextConfig = findColumnConfig(nextCell.column.id, columns);\n const nextColSpan = getBodyColSpan(nextConfig, nextCell.getContext());\n if (nextColSpan && nextColSpan > 1) {\n let spanWidth = nextCell.column.getSize();\n for (let j = 1; j < nextColSpan && i + j < allCells.length; j++) {\n spanWidth += allCells[i + j].column.getSize();\n }\n calculatedOffset += spanWidth;\n continue;\n }\n\n calculatedOffset += nextCell.column.getSize();\n }\n rightOffset = calculatedOffset;\n }\n }\n\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 private _getHeaderPinningStyles<T>(\n column: Column<T, unknown>,\n headerCurrent: Header<T, unknown>,\n table: Table<T>,\n columns: ZTableColumnConfig<T>[]\n ): Record<string, string | number | undefined> {\n const isPinnedColumn = column.getIsPinned();\n const leftPositions: Record<string, number> = {};\n const headerGroupsAll = table.getHeaderGroups();\n\n for (const headerGroup of headerGroupsAll) {\n for (const header of headerGroup.headers) {\n leftPositions[header.id] = header.getStart('left');\n }\n }\n\n const newOffsetLeft: Record<string, number> = {};\n const newOffsetRight: Record<string, number> = {};\n let isChildPinned: 'left' | 'right' | undefined = undefined;\n\n if (isPinnedColumn) {\n const headerGroups = headerCurrent.headerGroup.headers;\n const leafHeaders = headerCurrent.getLeafHeaders();\n const filterChild = leafHeaders.filter(h => h.column.id !== column.id);\n\n if (filterChild.length === 0) {\n isChildPinned = isPinnedColumn;\n }\n\n for (const child of filterChild) {\n const isPinned = child.column.getIsPinned();\n if (isPinned) {\n isChildPinned = isPinned;\n break;\n }\n }\n\n if (isChildPinned === 'left') {\n const temp = [...headerGroups];\n const headersBeforeCurrent: Header<T, unknown>[] = [];\n for (let i = 0; i < temp.length; i++) {\n const indexOfHeader = temp.findIndex(h => h.id === headerCurrent.id);\n if (i < indexOfHeader) {\n const leafs = temp[i].getLeafHeaders();\n const hasLeftPinned = leafs.some(lh => lh.column.getIsPinned() === 'left');\n if (hasLeftPinned) {\n headersBeforeCurrent.push(temp[i]);\n }\n }\n }\n\n newOffsetLeft[headerCurrent.id] = headersBeforeCurrent.reduce((sum, h) => {\n if (!shouldHeaderRender(h, headerGroups, columns)) {\n return sum;\n }\n\n if (h.subHeaders.length > 0) {\n const subSum = h.subHeaders\n .filter(subH => subH.column.getIsPinned() === 'left')\n .filter(subH => shouldHeaderRender(subH, h.subHeaders, columns))\n .reduce((subAcc, subH) => {\n const config = findColumnConfig(subH.column.id, columns);\n const colSpan = getHeaderColSpan(config);\n if (colSpan && colSpan > 1) {\n const currentIdx = h.subHeaders.findIndex(sh => sh.id === subH.id);\n let totalWidth = subH.column.getSize();\n for (let j = 1; j < colSpan && currentIdx + j < h.subHeaders.length; j++) {\n totalWidth += h.subHeaders[currentIdx + j].column.getSize();\n }\n return subAcc + totalWidth;\n }\n return subAcc + subH.column.getSize();\n }, 0);\n return sum + subSum;\n }\n\n const config = findColumnConfig(h.column.id, columns);\n const colSpan = getHeaderColSpan(config);\n if (colSpan && colSpan > 1) {\n const currentIdx = headerGroups.findIndex(hg => hg.id === h.id);\n let totalWidth = h.column.getSize();\n for (let j = 1; j < colSpan && currentIdx + j < headerGroups.length; j++) {\n totalWidth += headerGroups[currentIdx + j].column.getSize();\n }\n return sum + totalWidth;\n }\n return sum + h.column.getSize();\n }, 0);\n }\n\n if (isChildPinned === 'right') {\n const headersAfterCurrent: Header<T, unknown>[] = [];\n const temp = [...headerGroups].reverse();\n for (let i = 0; i < temp.length; i++) {\n const indexOfHeader = temp.findIndex(h => h.id === headerCurrent.id);\n if (i < indexOfHeader) {\n headersAfterCurrent.push(temp[i]);\n }\n }\n\n newOffsetRight[headerCurrent.id] = headersAfterCurrent.reduce((sum, h) => {\n if (!shouldHeaderRender(h, headerGroups, columns)) {\n return sum;\n }\n\n if (h.subHeaders.length > 0) {\n const subSum = h.subHeaders\n .filter(subH => subH.column.getIsPinned() === 'right')\n .filter(subH => shouldHeaderRender(subH, h.subHeaders, columns))\n .reduce((subAcc, subH) => {\n const config = findColumnConfig(subH.column.id, columns);\n const colSpan = getHeaderColSpan(config);\n if (colSpan && colSpan > 1) {\n const currentIdx = h.subHeaders.findIndex(sh => sh.id === subH.id);\n let totalWidth = subH.column.getSize();\n for (let j = 1; j < colSpan && currentIdx + j < h.subHeaders.length; j++) {\n totalWidth += h.subHeaders[currentIdx + j].column.getSize();\n }\n return subAcc + totalWidth;\n }\n return subAcc + subH.column.getSize();\n }, 0);\n return sum + subSum;\n }\n\n const config = findColumnConfig(h.column.id, columns);\n const colSpan = getHeaderColSpan(config);\n if (colSpan && colSpan > 1) {\n const currentIdx = headerGroups.findIndex(hg => hg.id === h.id);\n let totalWidth = h.column.getSize();\n for (let j = 1; j < colSpan && currentIdx + j < headerGroups.length; j++) {\n totalWidth += headerGroups[currentIdx + j].column.getSize();\n }\n return sum + totalWidth;\n }\n return sum + h.column.getSize();\n }, 0);\n }\n }\n\n const leftValue =\n isChildPinned === 'left'\n ? newOffsetLeft[headerCurrent.id] !== undefined\n ? newOffsetLeft[headerCurrent.id]\n : leftPositions[headerCurrent.id]\n : undefined;\n\n return {\n position: isChildPinned ? 'sticky' : 'relative',\n zIndex: isChildPinned ? 1 : 0,\n left: leftValue !== undefined ? `${leftValue}px` : undefined,\n right: isChildPinned === 'right' ? `${newOffsetRight[headerCurrent.id]}px` : undefined,\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})\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 virtualRowHeight?: number\n ): Record<string, string | number>;\n transform<T>(\n row: Row<T>,\n table: Table<T>,\n property: 'isLastTopPinned' | 'isFirstBottomPinned' | 'pinningStyles',\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, 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 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 const rowEl = document.querySelector(`tr[data-row-id=\"${topRows[i].id}\"]`) as HTMLElement;\n offset += rowEl ? rowEl.getBoundingClientRect().height : 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 const rowEl = document.querySelector(`tr[data-row-id=\"${bottomRows[i].id}\"]`) as HTMLElement;\n offset += rowEl ? rowEl.getBoundingClientRect().height : 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})\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})\nexport class ZTableIsTemplateRefPipe implements PipeTransform {\n transform(value: unknown): value is TemplateRef<unknown> {\n return value instanceof TemplateRef;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { Cell } from '@tanstack/angular-table';\nimport type { ZTableColumnConfig } from '../z-table.types';\nimport { shouldBodyCellRenderColSpan } from '../z-table.util';\n\n@Pipe({\n name: 'zTableBodyCellRender',\n standalone: true,\n pure: true,\n})\nexport class ZTableBodyCellRenderPipe implements PipeTransform {\n transform<T>(cell: Cell<T, unknown>, allCells: Cell<T, unknown>[], columns: ZTableColumnConfig<T>[]): boolean {\n return shouldBodyCellRenderColSpan(cell, allCells, columns);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { Header } from '@tanstack/angular-table';\nimport type { ZTableColumnConfig } from '../z-table.types';\nimport { shouldFooterRender } from '../z-table.util';\n\n@Pipe({\n name: 'zTableFooterRender',\n standalone: true,\n pure: true,\n})\nexport class ZTableFooterRenderPipe implements PipeTransform {\n transform<T>(\n header: Header<T, unknown>,\n allHeaders: Header<T, unknown>[],\n columns: ZTableColumnConfig<T>[]\n ): boolean {\n return shouldFooterRender(header, allHeaders, columns);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { Header } from '@tanstack/angular-table';\nimport type { ZTableColumnConfig } from '../z-table.types';\nimport { shouldHeaderRender } from '../z-table.util';\n\n@Pipe({\n name: 'zTableHeaderRender',\n standalone: true,\n pure: true,\n})\nexport class ZTableHeaderRenderPipe implements PipeTransform {\n transform<T>(\n header: Header<T, unknown>,\n allHeaders: Header<T, unknown>[],\n columns: ZTableColumnConfig<T>[]\n ): boolean {\n return shouldHeaderRender(header, allHeaders, columns);\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input, OnDestroy } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ZInputComponent } from '@shival99/z-ui/components/z-input';\nimport { ZSelectComponent } from '@shival99/z-ui/components/z-select';\nimport type { ZSelectOption } 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],\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=\"Min\"\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=\"Max\"\n [ngModel]=\"rangeMaxValue()\"\n (ngModelChange)=\"onMaxChangeDebounced($event)\"\n class=\"min-w-0 flex-1\"\n />\n </div>\n }\n @case ('select') {\n <z-select\n zSize=\"sm\"\n [zOptions]=\"selectOptions()\"\n [ngModel]=\"columnFilterValue()?.toString() ?? ''\"\n zPlaceholder=\"All\"\n (ngModelChange)=\"onSelectChange($event)\"\n class=\"w-full min-w-0\"\n />\n }\n @case ('number') {\n <z-input\n zType=\"number\"\n zSize=\"sm\"\n zAllowClear\n zPlaceholder=\"Search...\"\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=\"Search...\"\n [ngModel]=\"(columnFilterValue() ?? '').toString()\"\n (ngModelChange)=\"onTextChangeDebounced($event)\"\n class=\"w-full\"\n />\n }\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 selectOptions = computed(() => {\n const columnDef = this._columnDef();\n const allOption: ZSelectOption = { label: 'All', value: '' };\n if (columnDef.filterOptions && columnDef.filterOptions.length > 0) {\n return [allOption, ...columnDef.filterOptions];\n }\n\n const uniqueValues = Array.from(this.zColumn().getFacetedUniqueValues().keys()).sort().slice(0, 5000);\n return [allOption, ...uniqueValues.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 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 { 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 parts(); 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]=\"hostEl\"\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: 4px;\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\n protected readonly hostEl = inject(ElementRef).nativeElement;\n protected readonly parts = computed(() => parseIconString(this.zText()));\n\n protected readonly tooltipContent = computed(() => {\n const tooltip = this.zTooltip();\n if (tooltip) {\n if (typeof tooltip === 'string') {\n return stripIconSyntax(tooltip);\n }\n\n if (tooltip.content && typeof tooltip.content === 'string') {\n return stripIconSyntax(tooltip.content);\n }\n }\n\n return stripIconSyntax(this.zText());\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 DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n NgZone,\n output,\n signal,\n TemplateRef,\n untracked,\n viewChild,\n afterNextRender,\n} from '@angular/core';\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 { 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 { ZTooltipDirective } from '@shival99/z-ui/components/z-tooltip';\nimport { ZSafeHtmlPipe } from '@shival99/z-ui/pipes';\nimport { ZCacheService } from '@shival99/z-ui/services';\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 { injectVirtualizer } from '@tanstack/angular-virtual';\nimport { NgScrollbar } from 'ngx-scrollbar';\nimport { explicitEffect } from 'ngxtension/explicit-effect';\nimport { ZTableRowHoverDirective } from './directives/z-table-row-hover.directive';\nimport {\n ZTableCellConfigPipe,\n ZTableCellOffsetPipe,\n ZTableColumnConfigPipe,\n ZTableColumnParentsPipe,\n ZTableFooterContentPipe,\n ZTablePinningStylesPipe,\n ZTableRowPipe,\n ZTableSpanPipe,\n ZTableIsTemplateRefPipe,\n ZTableHasIconPipe,\n ZTableColumnHeaderPipe,\n ZTableHeaderPinPipe,\n} from './pipes';\nimport { ZTableBodyCellRenderPipe } from './pipes/z-table-body-cell-render.pipe';\nimport { ZTableFooterRenderPipe } from './pipes/z-table-footer-render.pipe';\nimport { ZTableHeaderRenderPipe } from './pipes/z-table-header-render.pipe';\nimport { ZTableFilterComponent } from './z-table-filter.component';\nimport { ZTableIconTextComponent } from './z-table-icon-text.component';\nimport {\n Z_DEFAULT_DEBOUNCE_TIME,\n Z_DEFAULT_GROUP_SIZE,\n Z_DEFAULT_ROW_HEIGHT,\n Z_DEFAULT_VIRTUAL_OVERSCAN,\n ZTableChangeEvent,\n ZTableColumnConfig,\n ZTableConfig,\n ZTableControl,\n ZTableSavedConfig,\n ZTableVirtualConfig,\n ZVirtualGroup,\n} from './z-table.types';\nimport { columnConfigToColumnDef, isBodyConfig, getBodyRowSpan, getHeaderColSpan } 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 ZIconComponent,\n ZInputComponent,\n ZLoadingComponent,\n ZDrawerComponent,\n ZPaginationComponent,\n ZTableFilterComponent,\n ZPopoverDirective,\n ZButtonComponent,\n ZTooltipDirective,\n ZTableRowHoverDirective,\n ZTableIsTemplateRefPipe,\n ZTableHasIconPipe,\n ZTableCellConfigPipe,\n ZTableCellOffsetPipe,\n ZTableColumnConfigPipe,\n ZTableColumnHeaderPipe,\n ZTableColumnParentsPipe,\n ZTableFooterContentPipe,\n ZTableHeaderPinPipe,\n ZTablePinningStylesPipe,\n ZTableRowPipe,\n ZTableSpanPipe,\n ZTableFooterRenderPipe,\n ZTableHeaderRenderPipe,\n ZTableBodyCellRenderPipe,\n ZTableIconTextComponent,\n ZSafeHtmlPipe,\n ],\n standalone: true,\n templateUrl: './z-table.component.html',\n styleUrl: './z-table.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'z-table block relative',\n },\n exportAs: 'zTable',\n})\nexport class ZTableComponent<T> implements AfterViewInit {\n public readonly zConfig = input<ZTableConfig<T>>({ data: [], columns: [], mode: 'local' });\n public readonly zLoading = input(false);\n public readonly zKey = input<string>('');\n public readonly zChange = output<ZTableChangeEvent<T>>();\n public readonly zControl = output<ZTableControl<T>>();\n\n private readonly _destroyRef = inject(DestroyRef);\n private readonly _ngZone = inject(NgZone);\n\n private readonly _isSyncingScroll = signal(false);\n private readonly _savedScrollLeft = signal(0);\n private _resizeObserver: ResizeObserver | null = null;\n private _settingsDebounceTimeout: ReturnType<typeof setTimeout> | null = null;\n private _filterEmitDebounceTimeout: ReturnType<typeof setTimeout> | null = null;\n\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\n protected readonly expandedRowTemplate = viewChild<TemplateRef<unknown>>('expandedRowTemplate');\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 protected readonly pagination = signal<PaginationState>({ pageIndex: 1, pageSize: 10 });\n protected readonly sorting = signal<SortingState>([]);\n private readonly _tanstackPagination = computed(() => ({\n ...this.pagination(),\n pageIndex: Math.max(0, this.pagination().pageIndex - 1),\n }));\n\n protected readonly hasVerticalScroll = signal(false);\n protected readonly hasHorizontalScroll = signal(false);\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 protected readonly hasScrollLeft = signal(false);\n protected readonly hasScrollRight = signal(false);\n\n private readonly _columnPinVersion = signal(0);\n private readonly _dataForceUpdate = signal(0);\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 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 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 hasSorting = computed(() => {\n const columns = this.zConfig().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 private readonly _data = computed(() => {\n this._dataForceUpdate();\n return this.zConfig().data ?? [];\n });\n\n private readonly _columns = computed<ColumnDef<T>[]>(() => {\n let cols = this.zConfig().columns ?? [];\n cols = this._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 needsActionsColumn =\n this.zConfig().enableRowPinning && !hasExpandColumn && !hasSelectColumn && !this.hasBodyRowSpan();\n\n if (needsActionsColumn) {\n cols = [\n {\n id: 'actions',\n header: '',\n cell: '',\n size: 30,\n minSize: 30,\n maxSize: 30,\n enableSorting: false,\n enableFiltering: false,\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 === 'actions') {\n colDef.size = 50;\n colDef.minSize = 50;\n colDef.maxSize = 50;\n colDef.enableResizing = false;\n }\n\n return colDef;\n });\n });\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 private readonly _virtualConfig = computed<ZTableVirtualConfig>(() => {\n const { virtual } = this.zConfig();\n if (!virtual || typeof virtual === 'boolean') {\n return {\n enabled: !!virtual,\n rowHeight: Z_DEFAULT_ROW_HEIGHT,\n overscan: Z_DEFAULT_VIRTUAL_OVERSCAN,\n groupSize: Z_DEFAULT_GROUP_SIZE,\n };\n }\n\n return {\n enabled: virtual.enabled,\n rowHeight: virtual.rowHeight ?? Z_DEFAULT_ROW_HEIGHT,\n overscan: virtual.overscan ?? Z_DEFAULT_VIRTUAL_OVERSCAN,\n groupSize: virtual.groupSize ?? Z_DEFAULT_GROUP_SIZE,\n };\n });\n\n protected readonly virtualRowHeight = computed(() => this._virtualConfig().rowHeight ?? Z_DEFAULT_ROW_HEIGHT);\n protected readonly groupSize = computed(() => this._virtualConfig().groupSize ?? Z_DEFAULT_GROUP_SIZE);\n protected readonly groupHeight = computed(() => this.groupSize() * this.virtualRowHeight());\n protected readonly dynamicGroups = computed<ZVirtualGroup[]>(() => {\n if (!this.isVirtual()) {\n return [];\n }\n\n this.columnFilters();\n this.globalFilter();\n this.sorting();\n this.pagination();\n\n const rows = untracked(() => this.table.getRowModel().rows);\n const rowHeight = this.virtualRowHeight();\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 = untracked(() => 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 groups.push({\n startIndex,\n endIndex,\n rowCount: endIndex - startIndex + 1,\n height: (endIndex - startIndex + 1) * 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 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\n if (groups.length > 0) {\n return groups.map(group => group.height);\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(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 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 pageCount = isServerMode && config.totalRows ? Math.ceil(config.totalRows / pageSize) : undefined;\n\n return {\n data: this._data(),\n columns: this._columns(),\n getCoreRowModel: getCoreRowModel(),\n getExpandedRowModel: this.hasExpandColumn() ? getExpandedRowModel() : undefined,\n getFilteredRowModel: !isServerMode && this.hasFiltering() ? getFilteredRowModel() : undefined,\n getSortedRowModel: !isServerMode && this.hasSorting() ? getSortedRowModel() : undefined,\n getPaginationRowModel: !isServerMode && config.enablePagination ? getPaginationRowModel() : undefined,\n getFacetedRowModel: !isServerMode && this.hasFiltering() ? getFacetedRowModel() : undefined,\n getFacetedUniqueValues: !isServerMode && this.hasFiltering() ? getFacetedUniqueValues() : undefined,\n getFacetedMinMaxValues: !isServerMode && this.hasFiltering() ? getFacetedMinMaxValues() : undefined,\n manualFiltering: isServerMode,\n manualSorting: isServerMode,\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 newState = typeof updater === 'function' ? updater(this.columnFilters()) : updater;\n this._runAsyncStateUpdate(() => {\n this.columnFilters.set(newState);\n if (this.zConfig().mode !== 'server') {\n this.pagination.update(p => ({ ...p, pageIndex: 1 }));\n }\n\n this._emitFilterChangeDebounced(newState, this.globalFilter());\n });\n },\n onGlobalFilterChange: updater => {\n const newState = typeof updater === 'function' ? updater(this.globalFilter()) : updater;\n this._runAsyncStateUpdate(() => {\n this.globalFilter.set(newState);\n if (this.zConfig().mode !== 'server') {\n this.pagination.update(p => ({ ...p, pageIndex: 1 }));\n }\n\n this._emitFilterChangeDebounced(this.columnFilters(), newState);\n });\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 newState = typeof updater === 'function' ? updater(this.sorting()) : updater;\n this._runAsyncStateUpdate(() => {\n this.sorting.set(newState);\n if (this.zConfig().mode !== 'server') {\n this.pagination.update(p => ({ ...p, pageIndex: 1 }));\n }\n\n this.zChange.emit({ type: 'sort', data: { sorting: newState } });\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 protected readonly virtualizer = injectVirtualizer(() => {\n const groups = this.dynamicGroups();\n const rowHeight = this.virtualRowHeight();\n return {\n scrollElement: this.tbodyWrapper()?.nativeElement,\n count: groups.length > 0 ? groups.length : this._virtualGroupCount(),\n estimateSize: (index: number) => {\n if (groups.length > 0 && groups[index]) {\n return groups[index].height;\n }\n return rowHeight;\n },\n overscan: this._virtualConfig().overscan ?? Z_DEFAULT_VIRTUAL_OVERSCAN,\n };\n });\n\n constructor() {\n effect(() => {\n const cfg = this.zConfig();\n const initial = cfg.initialState;\n\n untracked(() => {\n if (initial) {\n if (initial.columnPinning) {\n this.columnPinning.set(initial.columnPinning);\n }\n if (initial.columnVisibility) {\n this.columnVisibility.set(initial.columnVisibility);\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 this.showHeaderFooterShadow.set(cfg.showHeaderShadow ?? cfg.showFooterShadow ?? true);\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 collectPinnedColumns(cols);\n\n if (leftPinned.length > 0 || rightPinned.length > 0) {\n this.columnPinning.set({ left: leftPinned, right: rightPinned });\n }\n });\n });\n\n effect(() => {\n const cfg = this.zConfig();\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 untracked(() => {\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\n afterNextRender(() => {\n const containerEl = this.tbodyContainer()?.nativeElement;\n if (containerEl && !this._resizeObserver) {\n this._resizeObserver = new ResizeObserver(() => {\n this._checkVerticalScroll();\n this._checkHorizontalScroll();\n });\n\n this._resizeObserver.observe(containerEl);\n this._destroyRef.onDestroy(() => {\n if (this._resizeObserver) {\n this._resizeObserver.disconnect();\n this._resizeObserver = null;\n }\n });\n }\n });\n\n explicitEffect([this.columnFilters, this.globalFilter, this.pagination, this.sorting], () => {\n this._checkVerticalScroll();\n this._checkHorizontalScroll();\n });\n\n explicitEffect([this.zLoading, this.isProcessing], () => {\n const loading = this.zLoading();\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 }\n return;\n }\n\n setTimeout(() => {\n const wrapperEl = this.tbodyWrapper()?.nativeElement;\n if (wrapperEl) {\n wrapperEl.scrollTop = 0;\n wrapperEl.scrollLeft = this._savedScrollLeft();\n }\n }, 0);\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 ngAfterViewInit(): void {\n this._loadConfig();\n setTimeout(() => {\n this._checkVerticalScroll();\n this._checkHorizontalScroll();\n }, 100);\n\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 },\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 });\n }\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 private _runAsyncStateUpdate(updateFn: () => void): void {\n const isServerMode = this.zConfig().mode === 'server';\n if (isServerMode) {\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 const isServerMode = this.zConfig().mode === 'server';\n if (isServerMode) {\n this.zChange.emit({\n type: 'filter',\n data: { filters, search },\n });\n return;\n }\n\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 _checkVerticalScroll(): void {\n const tbodyWrapperEl = this.tbodyWrapper()?.nativeElement;\n if (tbodyWrapperEl) {\n const hasScroll = tbodyWrapperEl.scrollHeight > tbodyWrapperEl.clientHeight;\n this.hasVerticalScroll.set(hasScroll);\n }\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 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 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 }\n\n public toggleHeaderFooterShadow(): void {\n this.showHeaderFooterShadow.update(v => !v);\n }\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\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 private _saveConfig(): void {\n const key = this.zKey();\n if (!key) {\n return;\n }\n\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 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 _loadConfig(): void {\n const key = this.zKey();\n if (!key) {\n return;\n }\n\n try {\n const config = ZCacheService.get<ZTableSavedConfig>(`table-config-${key}`);\n if (!config) {\n return;\n }\n\n if (config.columnOrder && config.columnOrder.length > 0) {\n this.columnOrder.set(config.columnOrder);\n }\n\n if (config.columnSizing) {\n this.table.setColumnSizing(config.columnSizing);\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 } catch (error) {\n console.error('Failed to load table config:', error);\n }\n }\n\n private _findColumnConfig(columnId: string): ZTableColumnConfig<T> | undefined {\n const findInColumns = (columns: ZTableColumnConfig<T>[]): 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 = findInColumns(col.columns);\n if (found) {\n return found;\n }\n }\n }\n\n return undefined;\n };\n\n return findInColumns(this.zConfig().columns);\n }\n\n private _filterVisibleColumns(columns: ZTableColumnConfig<T>[]): ZTableColumnConfig<T>[] {\n return 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: this._filterVisibleColumns(col.columns),\n };\n }\n return col;\n });\n }\n}\n","<!-- Toolbar: Search & Settings -->\n@if (zConfig().enableSearch || zConfig().enableSettings) {\n <div class=\"z-table-toolbar mb-2 flex items-center justify-between gap-4\">\n <!-- Search -->\n @if (zConfig().enableSearch) {\n <z-input\n class=\"w-64\"\n zSize=\"sm\"\n zPlaceholder=\"Search...\"\n [zSearch]=\"true\"\n [zDebounce]=\"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()\">Settings</z-button>\n }\n </div>\n}\n\n<div\n class=\"z-table-container shadow-xs\"\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 <col [style.width]=\"'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-xs\"\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 | zTableHeaderRender: headerGroup.headers : zConfig().columns;\n @if (rowSpan && shouldRender) {\n <th\n [attr.id]=\"header.column.id\"\n [ngStyle]=\"header.column | zTablePinningStyles: header : 'header' : table : zConfig().columns\"\n [class]=\"header.column.id | zTableColumnConfig: zConfig().columns : 'headerClass'\"\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 | zTableHeaderPin: 'isLastLeftPinned' : zConfig().columns\"\n [class.z-sticky-right-first]=\"header | zTableHeaderPin: 'isFirstRightPinned' : zConfig().columns\"\n [class.z-sticky-right-last]=\"header | zTableHeaderPin: '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]=\"header.column.id === 'actions'\"\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 zSize=\"sm\"\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 if (header.column.id === 'actions') {\n <!-- Empty header for actions column -->\n <div class=\"flex items-center justify-center\"></div>\n } @else {\n <!-- Header Content with Sort and Pin -->\n <div class=\"flex w-full items-center gap-1\">\n <!-- Header Text -->\n <div\n class=\"flex min-w-0 flex-1 items-center gap-1.5\"\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 <ng-container\n *flexRender=\"header.column.columnDef.header; props: header.getContext(); let headerContent\">\n @if (headerContent | zTableIsTemplateRef) {\n <!-- TemplateRef rendering -->\n <ng-container\n *ngTemplateOutlet=\"headerContent; context: { $implicit: header.getContext() }\" />\n } @else if (headerContent | zTableHasIcon) {\n <!-- Icon syntax rendering -->\n <z-table-icon-text\n class=\"min-w-0 truncate\"\n [zText]=\"headerContent\"\n [zTooltip]=\"header.column.id | zTableColumnConfig: zConfig().columns : 'headerTooltip'\" />\n } @else {\n <!-- Default/innerHTML rendering -->\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 [innerHTML]=\"headerContent | zSafeHtml\"></span>\n }\n </ng-container>\n <!-- Sort Icon (clickable) - hidden when table has rowSpan columns -->\n @if (header.column.getCanSort() && !hasBodyRowSpan()) {\n <span\n class=\"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=\"12\" />\n } @else if (header.column.getIsSorted() === 'desc') {\n <z-icon zType=\"lucideArrowDown\" zSize=\"12\" />\n } @else {\n <z-icon zType=\"lucideArrowDownUp\" zSize=\"12\" class=\"opacity-30\" />\n }\n </span>\n }\n </div>\n\n <!-- Column Pin Popover -->\n @if (header.column.getCanPin() && zConfig().enableColumnPinning) {\n <ng-template #colPinPopoverContent>\n <div class=\"flex flex-col gap-0.5 p-0.5\">\n @if (header.column.getIsPinned() !== 'left') {\n <button\n type=\"button\"\n (click)=\"handleColumnPin(header.column.id, 'left'); colPinPopover.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=\"lucideChevronLeft\" zSize=\"12\" />\n <span>Pin left</span>\n </button>\n }\n @if (header.column.getIsPinned() !== 'right') {\n <button\n type=\"button\"\n (click)=\"handleColumnPin(header.column.id, 'right'); colPinPopover.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=\"lucideChevronRight\" zSize=\"12\" />\n <span>Pin right</span>\n </button>\n }\n @if (header.column.getIsPinned()) {\n <button\n type=\"button\"\n (click)=\"handleColumnPin(header.column.id, false); colPinPopover.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>Unpin</span>\n </button>\n }\n </div>\n </ng-template>\n <button\n type=\"button\"\n z-popover\n #colPinPopover=\"zPopover\"\n [zPopoverContent]=\"colPinPopoverContent\"\n zTrigger=\"click\"\n zPosition=\"bottom-right\"\n [zOffset]=\"3\"\n class=\"z-header-pin-trigger text-muted-foreground hover:bg-muted hover:text-foreground flex shrink-0 cursor-pointer items-center justify-center rounded p-1\"\n [class.text-primary]=\"header.column.getIsPinned()\">\n <z-icon zType=\"lucideEllipsis\" zSize=\"12\" class=\"rotate-90\" />\n </button>\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 (mousedown)=\"header.getResizeHandler()($event)\"\n (touchstart)=\"header.getResizeHandler()($event)\"></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 (zLoading() || isProcessing()) {\n <!-- Loading State -->\n <div class=\"z-loading-state\">\n <z-loading [zLoading]=\"true\" zSize=\"lg\" zText=\"Loading...\" />\n </div>\n } @else if (isEmpty()) {\n <div class=\"z-empty-state\">\n @if (isNoSearchResults()) {\n <!-- No search results -->\n <z-icon zType=\"lucideSearchX\" zSize=\"40\" class=\"text-muted-foreground/50\" />\n <p class=\"text-muted-foreground text-sm\">No results found</p>\n } @else {\n <!-- Empty data -->\n <z-icon zType=\"lucidePackageOpen\" zSize=\"40\" class=\"text-muted-foreground/50\" />\n <p class=\"text-muted-foreground text-sm\">No data</p>\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 class=\"z-virtual-row\"\n [style.height.px]=\"dynamicGroupHeights()[virtualItem.index] ?? groupSize() * virtualRowHeight()\"\n [style.transform]=\"'translateY(' + virtualItem.start + 'px)'\">\n <table [ngStyle]=\"columnSizeVars()\" [style.width.px]=\"table.getTotalSize()\">\n <ng-container *ngTemplateOutlet=\"colGroupTpl\" />\n <tbody [class.z-has-vertical-scroll]=\"hasVerticalScroll()\">\n @for (row of groupRows; track row.id) {\n <tr\n z-table-row-hover\n [style.height.px]=\"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 @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 | zTableBodyCellRender: row.getVisibleCells() : zConfig().columns;\n @if (shouldRenderRowSpan && shouldRenderColSpan) {\n <td\n [ngStyle]=\"\n cell.column\n | zTablePinningStyles: cell : 'body' : row.getVisibleCells() : zConfig().columns\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 [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 zSize=\"sm\"\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 {\n <ng-container\n *flexRender=\"cell.column.columnDef.cell; props: cell.getContext(); let cellContent\">\n @if (cellContent | zTableIsTemplateRef) {\n <!-- TemplateRef rendering -->\n <div\n [ngClass]=\"cell | zTableCellConfig: zConfig().columns : 'contentClass'\"\n [ngStyle]=\"cell | zTableCellConfig: zConfig().columns : 'contentStyle'\">\n <ng-container\n *ngTemplateOutlet=\"cellContent; context: { $implicit: cell.getContext() }\" />\n </div>\n } @else if (cellContent | zTableHasIcon) {\n <!-- Icon syntax rendering -->\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 } @else {\n <!-- Default/innerHTML rendering -->\n <div\n class=\"z-table-cell-text\"\n z-tooltip\n [zContent]=\"\n (cell | zTableCellConfig: zConfig().columns : 'contentTooltip') || cellContent\n \"\n [innerHTML]=\"cellContent | zSafeHtml\"\n [ngClass]=\"cell | zTableCellConfig: zConfig().columns : 'contentClass'\"\n [ngStyle]=\"cell | zTableCellConfig: zConfig().columns : 'contentStyle'\"></div>\n }\n </ng-container>\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 [class.z-has-vertical-scroll]=\"hasVerticalScroll()\">\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' : 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 = cell | zTableBodyCellRender: row.getVisibleCells() : zConfig().columns;\n @if (shouldRenderRowSpan && shouldRenderColSpan) {\n <td\n [ngStyle]=\"\n cell.column | zTablePinningStyles: cell : 'body' : row.getVisibleCells() : zConfig().columns\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]=\"cell.column.id === 'actions'\"\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 zSize=\"sm\"\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>Pin top</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>Pin bottom</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>Unpin</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>Pin top</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>Pin bottom</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>Unpin</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>Pin top</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>Pin bottom</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>Unpin</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 {\n <ng-container\n *flexRender=\"cell.column.columnDef.cell; props: cell.getContext(); let cellContent\">\n @if (cellContent | zTableIsTemplateRef) {\n <!-- TemplateRef rendering -->\n <div\n [ngClass]=\"cell | zTableCellConfig: zConfig().columns : 'contentClass'\"\n [ngStyle]=\"cell | zTableCellConfig: zConfig().columns : 'contentStyle'\">\n <ng-container\n *ngTemplateOutlet=\"cellContent; context: { $implicit: cell.getContext() }\" />\n </div>\n } @else {\n <!-- Default/innerHTML rendering -->\n <div\n class=\"z-table-cell-text\"\n z-tooltip\n [zContent]=\"\n (cell | zTableCellConfig: zConfig().columns : 'contentTooltip') || cellContent\n \"\n [innerHTML]=\"cellContent | zSafeHtml\"\n [ngClass]=\"cell | zTableCellConfig: zConfig().columns : 'contentClass'\"\n [ngStyle]=\"cell | zTableCellConfig: zConfig().columns : 'contentStyle'\"></div>\n }\n </ng-container>\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 | zTableFooterRender: footerGroup.headers : zConfig().columns;\n @if (rowSpan && shouldRender) {\n <th\n [ngStyle]=\"footer.column | zTablePinningStyles: footer : 'header' : table : zConfig().columns\"\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]=\"footer | zTableHeaderPin: 'isLastLeftPinned' : zConfig().columns\"\n [class.z-sticky-right-first]=\"footer | zTableHeaderPin: 'isFirstRightPinned' : zConfig().columns\"\n [class.z-sticky-right-last]=\"footer | zTableHeaderPin: 'isLastRightPinned' : zConfig().columns\"\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 <ng-container\n *ngTemplateOutlet=\"footerContent; context: { $implicit: footer.getContext() }\" />\n } @else if (footerContent | zTableHasIcon) {\n <!-- Icon syntax rendering -->\n <z-table-icon-text\n [zText]=\"footerContent\"\n [zTooltip]=\"\n footer.column.id | zTableColumnConfig: zConfig().columns : 'footerTooltip'\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 {{ footerContent }}\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 {{ configFooterContent }}\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().enablePagination && zConfig().pagination?.enabled !== false) {\n @let totalRows = table.getFilteredRowModel().rows.length;\n @let totalLabel = zConfig().pagination?.totalLabel ?? '{total} total rows';\n <div class=\"mt-4 flex items-center justify-between gap-4\">\n <div class=\"text-sm text-gray-500\">\n {{ totalLabel.replace('{total}', zConfig().totalCount?.toString() || totalRows.toString()) }}\n </div>\n <z-pagination\n [zTotal]=\"zConfig().totalCount ?? totalRows\"\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 || zLoading() || isProcessing()\"\n (zOnPageChange)=\"onPageChange($event)\" />\n </div>\n}\n\n<!-- Settings Drawer -->\n<z-drawer\n [(zVisible)]=\"showSettingsDrawer\"\n zTitle=\"Table Settings\"\n zPlacement=\"right\"\n zWidth=\"500px\"\n [zShadow]=\"true\"\n [zOkText]=\"null\"\n zCancelText=\"Close\">\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\">Display Settings</h4>\n <p class=\"text-muted-foreground mb-3 text-xs\">Customize table appearance</p>\n <div class=\"grid grid-cols-2 gap-x-4 gap-y-3\">\n <z-checkbox\n zSize=\"sm\"\n [zChecked]=\"showHorizontalBorder()\"\n zText=\"Horizontal Border\"\n (zChange)=\"showHorizontalBorder.set(!showHorizontalBorder())\" />\n <z-checkbox\n zSize=\"sm\"\n [zChecked]=\"showVerticalBorder()\"\n zText=\"Vertical Border\"\n (zChange)=\"showVerticalBorder.set(!showVerticalBorder())\" />\n <z-checkbox\n zSize=\"sm\"\n [zChecked]=\"showHeaderFooterShadow()\"\n zText=\"Header/Footer Shadow\"\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\">Column Settings</h4>\n <p class=\"text-muted-foreground mb-3 text-xs\">Toggle visibility, drag to reorder, and pin columns</p>\n\n <!-- Unpinned Columns (Draggable) -->\n <div cdkDropList (cdkDropListDropped)=\"onPendingColumnDrop($event)\" class=\"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 [cdkDragDisabled]=\"false\"\n class=\"border-border bg-card hover:border-primary flex cursor-move items-center gap-2 rounded border px-2 py-1.5 text-sm transition-all hover:shadow-sm\"\n [class.opacity-60]=\"!isVisible\">\n <!-- Drag Handle -->\n <z-icon zType=\"lucideGripVertical\" zSize=\"14\" class=\"text-muted-foreground 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 }}\n </span>\n @let parents = columnId | zTableColumnParents: zConfig().columns;\n @if (parents) {\n <span class=\"text-muted-foreground truncate text-[10px]\">({{ parents }})</span>\n }\n </span>\n\n <!-- Pin Buttons -->\n @if (canPin) {\n <div class=\"flex shrink-0 items-center gap-0.5\">\n <button\n type=\"button\"\n (click)=\"onToggleColumnPin(columnId, 'left')\"\n class=\"text-muted-foreground hover:bg-muted cursor-pointer rounded p-1 text-xs transition-colors\"\n title=\"Pin Left\">\n <z-icon zType=\"lucideArrowLeft\" zSize=\"12\" />\n </button>\n <button\n type=\"button\"\n (click)=\"onToggleColumnPin(columnId, 'right')\"\n class=\"text-muted-foreground hover:bg-muted cursor-pointer rounded p-1 text-xs transition-colors\"\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\">Pinned Columns</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 <!-- 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 }}\n </span>\n @let pinnedParents = columnId | zTableColumnParents: zConfig().columns;\n @if (pinnedParents) {\n <span class=\"text-muted-foreground truncate text-[10px]\">({{ pinnedParents }})</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-[10px] font-medium\">\n {{ isPinned === 'left' ? 'LEFT' : 'RIGHT' }}\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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"}