{"version":3,"file":"shival99-z-ui-components-z-table.mjs","sources":["../../../../libs/core-ui/components/z-table/z-table.types.ts","../../../../libs/core-ui/components/z-table/components/z-table-actions.component.ts","../../../../libs/core-ui/components/z-table/components/z-table-content-editor.component.ts","../../../../libs/core-ui/components/z-table/z-table.util.ts","../../../../libs/core-ui/components/z-table/components/z-table-edit-cell.component.ts","../../../../libs/core-ui/components/z-table/z-table.define.ts","../../../../libs/core-ui/components/z-table/components/z-table-filter.component.ts","../../../../libs/core-ui/components/z-table/components/z-table-icon-text.component.ts","../../../../libs/core-ui/components/z-table/directives/z-table-drag.service.ts","../../../../libs/core-ui/components/z-table/directives/z-table-drag.directive.ts","../../../../libs/core-ui/components/z-table/directives/z-table-row-hover.directive.ts","../../../../libs/core-ui/components/z-table/directives/z-table-resizer.directive.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-cell-bottom.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-cell-clickable.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-cell-config.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-cell-edit.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-cell-offset.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-cell-pin.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-cell-render.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-cell-visible.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-column-config.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-column-header.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-column-parents.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-footer-content.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-footer-render.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-has-icon.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-pinning-styles.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-overlay-config.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-row.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-row-config.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-span.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-sub-table-config.pipe.ts","../../../../libs/core-ui/components/z-table/pipes/z-table-is-template-ref.pipe.ts","../../../../libs/core-ui/components/z-table/z-table.component.ts","../../../../libs/core-ui/components/z-table/z-table.component.html","../../../../libs/core-ui/components/z-table/shival99-z-ui-components-z-table.ts"],"sourcesContent":["/**\n * Z-Table Type Definitions\n *\n * Central type file for the z-table component. Contains:\n * - Default constants (row heights, sizing, debounce timers)\n * - Column configuration types (header, body, footer)\n * - Sort/filter/edit configuration interfaces\n * - Event contracts for parent-component communication\n * - Unified change event discriminated union\n * - Virtual scrolling configuration\n * - Settings persistence types\n * - TanStack Table module augmentation for custom table meta\n */\n/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable @typescript-eslint/naming-convention */\n/* eslint-disable unused-imports/no-unused-vars */\nimport { type TemplateRef, type Type } from '@angular/core';\nimport { type ZAutocompleteType, type ZAutocompleteOption } from '@shival99/z-ui/components/z-autocomplete';\nimport { type ZButtonVariants } from '@shival99/z-ui/components/z-button';\nimport { type ZIconVariants, type ZIcon } from '@shival99/z-ui/components/z-icon';\nimport { type ZInputAlign, type ZInputSize } from '@shival99/z-ui/components/z-input';\nimport { type ZPopoverPosition, type ZPopoverTrigger } from '@shival99/z-ui/components/z-popover';\nimport { type ZSelectConfig, type ZSelectMode, type ZSelectOption } from '@shival99/z-ui/components/z-select';\nimport { type ZTagColor } from '@shival99/z-ui/components/z-tags';\nimport { type ZTooltipConfig, type ZTooltipContent, type ZTooltipTrigger } from '@shival99/z-ui/components/z-tooltip';\nimport { type ZExcelColumnConfig, type ZExcelExportOptions } from '@shival99/z-ui/services';\nimport {\n  type CellContext,\n  type ColumnFiltersState,\n  type ColumnPinningState,\n  type ExpandedState,\n  type FlexRenderComponent,\n  type HeaderContext,\n  type PaginationState,\n  type Row,\n  type RowData,\n  type RowPinningState,\n  type RowSelectionState,\n  type SortingState,\n  type VisibilityState,\n} from '@tanstack/angular-table';\n\n// ─── Default Constants ───────────────────────────────────────────────────────\n\n/** Default row height in pixels for virtual scroll estimation */\nexport const Z_DEFAULT_ROW_HEIGHT = 38;\n/** How many extra rows to render outside the visible viewport (virtual scroll buffer) */\nexport const Z_DEFAULT_VIRTUAL_OVERSCAN = 8;\n/** Number of rows per virtual group — used for rowSpan grouping in virtual mode */\nexport const Z_DEFAULT_GROUP_SIZE = 1;\n/** How many extra columns to render outside visible area for column virtualization */\nexport const Z_DEFAULT_COLUMN_VIRTUAL_OVERSCAN = 3;\n/** Minimum column width in pixels; prevents columns from becoming too narrow */\nexport const Z_DEFAULT_COLUMN_MIN_SIZE = 100;\n/** Debounce delay (ms) for async state updates (filtering/sorting transitions) */\nexport const Z_DEFAULT_DEBOUNCE_TIME = 150;\n/** Row height used for skeleton loading placeholders */\nexport const Z_SKELETON_ROW_HEIGHT = 60;\n/** Width in pixels of each action button in the actions column */\nexport const Z_TABLE_DEFAULT_ACTION_BUTTON_WIDTH = 32;\n/** Max visible action buttons before overflow into dropdown */\nexport const Z_TABLE_DEFAULT_MAX_VISIBLE_ACTIONS = 3;\n/** Default size variant for the overflow dropdown trigger button */\nexport const Z_TABLE_DEFAULT_DROPDOWN_BUTTON_SIZE = 'sm' as const;\n\n// ─── Cell & Pin Types ────────────────────────────────────────────────────────\n\n/** Pin boundary properties used to apply shadow/border on pinned column edges */\nexport type ZTableCellPinProperty =\n  | 'isLeftPinned'\n  | 'isRightPinned'\n  | 'isLastLeftPinned'\n  | 'isFirstRightPinned'\n  | 'isLastRightPinned';\n/** Distinguishes header vs footer cells for shared rendering logic */\nexport type ZTableCellType = 'header' | 'footer' | 'body';\n/** All three cell render zones */\nexport type ZTableCellRenderType = 'header' | 'footer' | 'body';\n\n/** Resolved edit state for a specific cell — computed by the edit pipe */\nexport interface ZTableEditCellInfo {\n  enabled: boolean;\n  contentEnabled: boolean;\n  contentConfig: ZResolvedTableEditContentConfig | null;\n  /** Base type for initial render — actual type may be dynamic per row via edit.type function */\n  type: ZTableEditType;\n  config: ZTableEditConfig<unknown> | null;\n}\n\n/** CSS styles applied to pinned cells for sticky positioning */\nexport interface ZPinningStyles {\n  left?: string;\n  right?: string;\n  position: 'sticky' | 'relative';\n  zIndex: number;\n  [key: string]: string | number | undefined;\n}\n\n/**\n * A virtual group represents one or more consecutive rows that must be\n * rendered together (e.g. rows sharing a rowSpan). The virtualizer operates\n * on groups rather than individual rows to keep merged cells intact.\n */\nexport interface ZVirtualGroup {\n  startIndex: number;\n  endIndex: number;\n  rowCount: number;\n  /** null when dynamicSize is enabled — height is measured after render */\n  height: number | null;\n}\n\n/** Parsed segment from the `[icon:name|size:16|class:text-red]` inline icon syntax */\nexport interface ZTableIconPart {\n  type: 'text' | 'icon';\n  value: string;\n  size?: number;\n  class?: string;\n  strokeWidth?: number;\n}\n\nexport interface ZTableExtendedColumnDef {\n  filterValueType?: ZTableFilterValueType;\n  filterUi?: ZTableFilterUi;\n  filterAdvancedType?: ZTableAdvancedFilterType;\n  filterLabel?: string;\n  filterOptions?: ZSelectOption[];\n  filterSelectConfig?: Partial<ZSelectConfig<unknown>>;\n  filterOptionSource?: ZTableFilterOptionSource;\n}\n\n// ─── Content & Mode Types ────────────────────────────────────────────────────\n\nexport type ZTableAlign = 'left' | 'center' | 'right';\nexport type ZTableBorderType = 'none' | 'full' | 'horizontal' | 'vertical';\nexport type ZTableBodyContentType = 'default' | 'tag';\nexport type ZTableColumnType = 'data' | 'select' | 'expand' | 'rowDrag' | 'rowPin' | 'actions';\nexport type ZTableTagColor = ZTagColor;\n\n/**\n * Body cell content — supports static values, Angular templates/components,\n * or a function that receives the cell context and returns dynamic content.\n */\nexport type ZTableCellContent<T> =\n  | string\n  | number\n  | TemplateRef<{ $implicit: CellContext<T, unknown> }>\n  | Type<unknown>\n  | FlexRenderComponent<unknown>\n  | ((info: CellContext<T, unknown>) => string | number | TemplateRef<unknown> | FlexRenderComponent<unknown>);\n\n/** Header/footer cell content — similar to body but uses HeaderContext */\nexport type ZTableHeaderContent<T> =\n  | string\n  | TemplateRef<unknown>\n  | Type<unknown>\n  | (() => string)\n  | ((info: HeaderContext<T, unknown>) => string);\n\n/** Alias for ZTableColumnConfig — kept for backward compatibility */\nexport type ZTableColumn<T = unknown> = ZTableColumnConfig<T>;\n\nexport interface ZTableGroupLabelContext<T> {\n  value: unknown;\n  columnId: string;\n  rows: Row<T>[];\n}\n\nexport type ZTableGroupLabelFormatter<T> = (context: ZTableGroupLabelContext<T>) => string;\n\nexport type ZTablePopoverContent = string | TemplateRef<unknown>;\n\nexport interface ZTablePopoverConfig {\n  content?: ZTablePopoverContent;\n  position?: ZPopoverPosition;\n  trigger?: ZPopoverTrigger;\n  class?: string;\n  showDelay?: number;\n  hideDelay?: number;\n  disabled?: boolean;\n  offset?: number;\n  width?: 'auto' | 'trigger' | number;\n  manualClose?: boolean;\n  outsideClickClose?: boolean;\n  scrollClose?: boolean;\n  sticky?: boolean;\n  showArrow?: boolean;\n  keyboardSafe?: boolean;\n}\n\nexport type ZTableBodyPopoverConfig<T> =\n  | string\n  | ZTablePopoverConfig\n  | TemplateRef<unknown>\n  | ((info: CellContext<T, unknown>) => string | ZTablePopoverConfig | TemplateRef<unknown>);\n\nexport interface ZTableGroupTotalContext<T> {\n  columnId: string;\n  rows: Row<T>[];\n  value: unknown;\n  depth: number;\n}\n\nexport type ZTableGroupTotalContent<T> = 'sum' | ((context: ZTableGroupTotalContext<T>) => unknown);\n\nexport interface ZTableGroupTotalConfig<T = unknown> {\n  columnId: string;\n  content?: ZTableGroupTotalContent<T>;\n  class?: string;\n  tooltip?: string | TemplateRef<unknown> | ZTableTooltipConfig;\n  popover?: ZTablePopoverContent | ZTablePopoverConfig;\n}\n\nexport interface ZTableTooltipConfig extends ZTooltipConfig {\n  trigger?: ZTooltipTrigger;\n}\n\nexport type ZTableBodyTooltipConfig<T> =\n  | string\n  | ZTableTooltipConfig\n  | TemplateRef<unknown>\n  | ((info: CellContext<T, unknown>) => string | ZTableTooltipConfig | TemplateRef<unknown>);\n\n/** Available column filter value input hints */\nexport type ZTableFilterValueType = 'text' | 'number';\nexport type ZTableFilterUi = 'basic' | 'advanced' | 'custom';\nexport type ZTableAdvancedFilterType =\n  | 'text'\n  | 'number'\n  | 'range'\n  | 'date'\n  | 'date-range'\n  | 'time'\n  | 'select'\n  | 'multi-select'\n  | 'tags';\nexport type ZTableFilterOptionSource = 'faceted' | 'table';\n/** Available column filter operators */\nexport type ZTableFilterOperator =\n  | 'contains'\n  | 'notContains'\n  | 'startsWith'\n  | 'endsWith'\n  | 'equals'\n  | 'notEquals'\n  | 'greaterThan'\n  | 'greaterThanOrEqual'\n  | 'lessThan'\n  | 'lessThanOrEqual'\n  | 'empty'\n  | 'notEmpty';\nexport type ZTableFilterJoinOperator = 'and' | 'or';\nexport interface ZTableFilterCondition {\n  joinWithPrev?: ZTableFilterJoinOperator;\n  operator: ZTableFilterOperator;\n  value?: unknown;\n}\n\nexport interface ZTableOperatorOption {\n  readonly labelKey: string;\n  readonly value: ZTableFilterOperator;\n}\n\nexport interface ZTableDraftFilterCondition {\n  readonly id: string;\n  readonly joinWithPrev?: ZTableFilterJoinOperator;\n  operator: ZTableFilterOperator | null;\n  value?: unknown;\n}\n\nexport interface ZTableFilterConditionView extends ZTableDraftFilterCondition {\n  readonly inputType: 'text' | 'number';\n  readonly isJoinGroupStart: boolean;\n  readonly isValueLess: boolean;\n  readonly joinLabelKey: string;\n  readonly joinTone: 'and' | 'or';\n  readonly operatorOptions: ZSelectOption<ZTableFilterOperator>[];\n}\n\nexport type ZTableLegacyAdvancedFilterType = Exclude<ZTableAdvancedFilterType, 'text' | 'number'>;\n\n/** Available inline cell edit input types */\nexport type ZTableEditType =\n  | 'text'\n  | 'number'\n  | 'select'\n  | 'date'\n  | 'checkbox'\n  | 'textarea'\n  | 'toggle'\n  | 'autocomplete';\n/**\n * Table operation mode:\n * - 'local': data is fully client-side (sort/filter/paginate handled by TanStack)\n * - 'server': parent handles data fetching; table emits change events for server calls\n */\nexport type ZTableMode = 'local' | 'server';\n\n// ─── Sort / Filter / Edit Configuration ──────────────────────────────────────\n\n/** Per-column sort configuration; mode controls local vs server-side sorting */\nexport interface ZTableSortConfig<T> {\n  enabled?: boolean;\n  /** 'local' = TanStack sorts in-memory; 'server' = emits event for API call */\n  mode?: ZTableMode;\n  /** Custom key sent with server-side sort events (defaults to column id) */\n  sortKey?: string;\n  /** Custom comparator for local sorting */\n  sortFn?: (rowA: Row<T>, rowB: Row<T>, columnId: string) => number;\n}\n\nexport type ZTableBuiltInFilterFn =\n  | 'equalsString'\n  | 'includesString'\n  | 'includesStringSensitive'\n  | 'arrIncludes'\n  | 'arrIncludesAll'\n  | 'arrIncludesSome'\n  | 'equals'\n  | 'weakEquals'\n  | 'inNumberRange';\n\nexport type ZTableCustomFilterFn<T> = (\n  row: Row<T>,\n  columnId: string,\n  filterValue: unknown,\n  addMeta: (meta: unknown) => void\n) => boolean;\n\nexport interface ZTableFilterConfig<T = unknown> {\n  enabled?: boolean;\n  mode?: ZTableMode;\n  valueType?: ZTableFilterValueType;\n  ui?: ZTableFilterUi;\n  advancedType?: ZTableAdvancedFilterType;\n  options?: ZSelectOption[];\n  selectConfig?: Partial<ZSelectConfig<unknown>>;\n  optionSource?: ZTableFilterOptionSource;\n  allowClear?: boolean;\n  label?: string;\n  placeholder?: string;\n  filterFn?: ZTableBuiltInFilterFn | ZTableCustomFilterFn<T>;\n  /**\n   * @deprecated Dùng `advancedType` thay thế.\n   */\n  type?: ZTableAdvancedFilterType;\n  /**\n   * @deprecated Dùng `advancedType` thay thế.\n   */\n  filterType?: ZTableAdvancedFilterType;\n  /**\n   * @deprecated Dùng `options` thay thế.\n   */\n  filterOptions?: ZSelectOption[];\n}\n\nexport type ZTableEditSize = 'sm' | 'default' | 'lg';\n\nexport type ZTableEditContentType = 'text' | 'number' | 'select' | 'date';\n\nexport interface ZTableEditContentConfig<T = unknown> {\n  type?: ZTableEditContentType;\n  options?: unknown[] | ((row: T) => unknown[]);\n  placeholder?: string | ((row: T) => string);\n  class?: string | ((row: T) => string);\n  style?: Record<string, string> | ((row: T) => Record<string, string>);\n  size?: ZTableEditSize;\n  disabled?: boolean | ((row: T) => boolean);\n  readonly?: boolean | ((row: T) => boolean);\n  loading?: boolean | ((row: T) => boolean);\n  align?: ZInputAlign;\n  prefix?: string;\n  suffix?: string;\n  min?: number;\n  max?: number;\n  step?: number;\n  mask?: string;\n  decimalPlaces?: number;\n  allowNegative?: boolean;\n  thousandSeparator?: string;\n  decimalMarker?: '.' | ',' | ['.', ','];\n  optionLabelKey?: string;\n  optionValueKey?: string;\n  selectConfig?: Partial<ZSelectConfig<unknown>>;\n  selectMode?: ZSelectMode;\n  mode?: ZSelectMode;\n  selectShowSearch?: boolean;\n  selectWrap?: boolean;\n  maxTagCount?: number;\n  dateFormat?: string;\n  dateValueType?: 'date' | 'iso' | 'string';\n  minDate?: Date | null;\n  maxDate?: Date | null;\n  allowClear?: boolean;\n}\n\nexport interface ZResolvedTableEditContentConfig {\n  type: ZTableEditContentType;\n  displayValue: string;\n  selectedOptionIndex: number;\n  options: ZSelectOption[];\n  placeholder: string;\n  class: string;\n  style: Record<string, string>;\n  size: ZTableEditSize;\n  disabled: boolean;\n  readonly: boolean;\n  loading: boolean;\n  align: ZInputAlign;\n  prefix: string;\n  suffix: string;\n  min?: number;\n  max?: number;\n  step?: number;\n  mask: string;\n  decimalPlaces?: number;\n  allowNegative: boolean;\n  thousandSeparator?: string;\n  decimalMarker?: '.' | ',' | ['.', ','];\n  selectConfig: Partial<ZSelectConfig<unknown>>;\n  selectMode: ZSelectMode;\n  selectShowSearch: boolean;\n  selectWrap: boolean;\n  maxTagCount: number;\n  dateFormat: string;\n  dateValueType: 'date' | 'iso' | 'string';\n  minDate: Date | null;\n  maxDate: Date | null;\n  allowClear: boolean;\n}\n\nexport interface ZTableEditConfig<T = unknown> {\n  enabled?: boolean;\n  /** Edit type - can be static or dynamic per row */\n  type?: ZTableEditType | ((row: T) => ZTableEditType);\n  /** Select options - can be static or dynamic per row */\n  options?: ZSelectOption[] | ((row: T) => ZSelectOption[]);\n  /** Placeholder - can be static or dynamic per row */\n  placeholder?: string | ((row: T) => string);\n  /** Allow clear for select input. Default: false */\n  allowClear?: boolean;\n  /**\n   * Custom option label key when using raw objects as options.\n   * Use this when your options don't have 'label' property.\n   * Example: optionLabelKey: 'tagName' for { tagName: 'Value', tagId: 1 }\n   */\n  optionLabelKey?: string;\n  /**\n   * Custom option value key when using raw objects as options.\n   * Use this when your options don't have 'value' property.\n   * Example: optionValueKey: 'tagName' for { tagName: 'Value', tagId: 1 }\n   */\n  optionValueKey?: string;\n  /**\n   * CSS class to apply to the edit cell input/select/etc component\n   */\n  class?: string | ((row: T) => string);\n  style?: Record<string, string> | ((row: T) => Record<string, string>);\n  min?: number;\n  max?: number;\n  step?: number;\n  mask?: string;\n  decimalPlaces?: number;\n  allowNegative?: boolean;\n  rows?: number;\n  thousandSeparator?: string;\n  decimalMarker?: '.' | ',' | ['.', ','];\n  disabled?: boolean | ((row: T) => boolean);\n  /** Readonly mode - input is visible but not editable */\n  readonly?: boolean | ((row: T) => boolean);\n  /** Loading mode - shows control loading indicator when supported. */\n  loading?: boolean | ((row: T) => boolean);\n  debounceTime?: number;\n  /** Only emit change on blur (when user leaves the input). Default: false */\n  blurEdit?: boolean;\n  /** Size of the edit input. Default: 'sm' */\n  size?: ZTableEditSize;\n  /** Autocomplete type - default or addressbar */\n  autocompleteType?: ZAutocompleteType;\n  /** Autocomplete options - for autocomplete type */\n  autocompleteOptions?: ZAutocompleteOption[] | ((row: T) => ZAutocompleteOption[]);\n  /** Reset input after selecting an option in autocomplete. Default: false */\n  autocompleteResetOnSelect?: boolean;\n  /** Height of autocomplete dropdown in pixels. Default: 280 */\n  autocompleteHeight?: number;\n  /** Allow typing custom values when no options match. Default: false */\n  autocompleteAllowCustomValue?: boolean;\n}\n\n// ─── Control API ─────────────────────────────────────────────────────────────\n\n/**\n * Imperative control handle emitted via `zControl` output.\n * Allows parent components to programmatically manipulate table state\n * (add/update/delete items, reset filters, toggle settings, etc.).\n */\nexport interface ZTableControl<T> {\n  updateConfig: (config: Partial<ZTableConfig<T>>) => void;\n  toggleSettings: () => void;\n  resetFilters: () => void;\n  resetSorting: () => void;\n  clearSelection: () => void;\n  addItem: (item: T) => void;\n  updateItem: (id: string | number, updates: Partial<T>, fieldKey?: keyof T) => void;\n  deleteItem: (id: string | number, fieldKey?: keyof T) => void;\n  getItems: () => T[];\n  setColumnVisibility: (columnIds: string | string[], visible: boolean) => void;\n}\n\n// ─── Column Section Configs (Header / Body / Footer) ─────────────────────────\n\n/** Header cell configuration — applied to the <th> in the table header row */\nexport interface ZTableHeaderColumnConfig<T> {\n  content?: ZTableHeaderContent<T>;\n  class?: string;\n  style?: Record<string, string>;\n  align?: ZTableAlign;\n  rowSpan?: number;\n  colSpan?: number;\n  /** Class applied to the inner content wrapper, not the <th> itself */\n  contentClass?: string | ((info: HeaderContext<T, unknown>) => string);\n  contentStyle?: Record<string, string> | ((info: HeaderContext<T, unknown>) => Record<string, string>);\n  tooltip?: string | ZTooltipConfig;\n}\n\n/**\n * Body cell configuration — most properties accept a static value or\n * a function receiving CellContext for per-row dynamic behavior.\n */\nexport interface ZTableBodyColumnConfig<T> {\n  content?: ZTableCellContent<T>;\n  /** Built-in visual treatment for the rendered body content. */\n  type?: ZTableBodyContentType;\n  /** Semantic color used when type is \"tag\". */\n  tagColor?: ZTableTagColor | ((info: CellContext<T, unknown>) => ZTableTagColor);\n  class?: string | ((info: CellContext<T, unknown>) => string);\n  style?: Record<string, string> | ((info: CellContext<T, unknown>) => Record<string, string>);\n  align?: ZTableAlign;\n  /** Static rowSpan or function returning 0 to hide the cell (merged into neighbor) */\n  rowSpan?: number | ((info: CellContext<T, unknown>) => number);\n  colSpan?: number | ((info: CellContext<T, unknown>) => number);\n  contentClass?: string | ((info: CellContext<T, unknown>) => string);\n  contentStyle?: Record<string, string> | ((info: CellContext<T, unknown>) => Record<string, string>);\n  tooltip?: ZTableBodyTooltipConfig<T>;\n  popover?: ZTableBodyPopoverConfig<T>;\n  /**\n   * Action buttons rendered inside this cell.\n   *\n   * Preferred: pass an action array or `(row) => action[]` directly.\n   * Deprecated compatibility: `{ actions, maxVisible }` is still supported.\n   */\n  actions?: ZTableActionBodyConfig<T>;\n  /** Maximum visible action buttons before rendering the overflow menu. */\n  actionMaxVisible?: number;\n  /** When true, clicking the cell emits a cellClick event */\n  enabledClick?: boolean;\n  /** Enable inline editing — true uses defaults, or pass full config */\n  edit?: ZTableEditConfig<T> | boolean;\n  /** Cho phép sửa trực tiếp trong cell theo kiểu Excel, không render editor component. */\n  editContent?: ZTableEditContentConfig<T> | boolean;\n  /** Control cell content visibility. When false, the cell is rendered but content is hidden. */\n  visible?: boolean | ((info: CellContext<T, unknown>) => boolean);\n}\n\nexport interface ZTableFooterColumnConfig<T> {\n  content?: ZTableHeaderContent<T>;\n  class?: string;\n  style?: Record<string, string>;\n  align?: ZTableAlign;\n  rowSpan?: number;\n  colSpan?: number;\n  contentClass?: string | ((info: HeaderContext<T, unknown>) => string);\n  contentStyle?: Record<string, string> | ((info: HeaderContext<T, unknown>) => Record<string, string>);\n  tooltip?: string | ZTooltipConfig;\n}\n\nexport type ZTableFooterConfig<T> = ZTableFooterColumnConfig<T> | ZTableHeaderContent<T>;\n\n// ─── Main Column Config ──────────────────────────────────────────────────────\n\n/**\n * Primary column definition — the consumer-facing API.\n * Converted to TanStack ColumnDef internally via `columnConfigToColumnDef()`.\n *\n * Shorthand: header/body/footer accept either a full config object or\n * just the content directly (string/template/function).\n *\n * Nested columns: use `columns` for multi-level header groups.\n */\nexport interface ZTableColumnConfig<T> {\n  /** Unique column identifier — must be stable across re-renders */\n  id: string;\n  /** Semantic column role. Falls back to legacy id/body detection when omitted. */\n  type?: ZTableColumnType;\n  /** Pre-filter visibility — unlike columnVisibility, this removes the column entirely */\n  visible?: boolean | (() => boolean);\n  /** Object property key for simple accessor — mutually exclusive with accessorFn */\n  accessorKey?: keyof T & string;\n  /** Custom accessor function for derived/computed cell values */\n  accessorFn?: (row: T) => unknown;\n  header?: ZTableHeaderColumnConfig<T> | ZTableHeaderContent<T>;\n  body?: ZTableBodyColumnConfig<T> | ZTableCellContent<T>;\n  /** Một cấu hình footer hoặc một cấu hình cho mỗi hàng footer. */\n  footer?: ZTableFooterConfig<T> | ZTableFooterConfig<T>[];\n  size?: number;\n  minSize?: number;\n  maxSize?: number;\n  width?: string;\n  /** true = local sort with defaults; object = full config */\n  sort?: ZTableSortConfig<T> | boolean;\n  /** true = local filter with defaults; object = full config */\n  filter?: ZTableFilterConfig<T> | boolean;\n  enableResizing?: boolean;\n  enablePinning?: boolean;\n  enableHiding?: boolean;\n  enableOrdering?: boolean;\n  /** Whether this column can be used from the header \"Group by\" menu */\n  enableGrouping?: boolean;\n  /** Field hoặc accessor dùng làm khóa nhóm thay cho giá trị của chính cột. */\n  groupKey?: keyof T | ((row: T) => unknown);\n  /** Format the displayed group header value for this column */\n  groupLabel?: ZTableGroupLabelFormatter<T>;\n  enableHeaderMenu?: boolean;\n  /** Initial pin position — applied on first render */\n  pinned?: 'left' | 'right' | false;\n  /** Child columns for multi-level header grouping */\n  columns?: ZTableColumnConfig<T>[];\n}\n\nexport interface ZTablePaginationConfig {\n  enabled?: boolean;\n  pageSize?: number;\n  pageIndex?: number;\n  pageSizeOptions?: number[];\n  showSizeChanger?: boolean;\n  showQuickJumper?: boolean;\n  showTotal?: boolean;\n  totalLabel?: string;\n  disabled?: boolean;\n}\n\nexport type ZTableGroupingMode = 'local' | 'server';\n\n/**\n * EN: Server-provided group descriptor. In server grouping the table does NOT compute groups from\n *     the current page rows; instead the parent supplies the ordered group list (label/count) and\n *     fills `config.data` with the child rows it has fetched. Rows are matched to a group by `value`\n *     (same key the grouping column would produce, including `groupKey` when configured).\n * VI: Mô tả group do server cung cấp. Ở chế độ server, table KHÔNG tự group từ rows của trang hiện\n *     tại; parent cung cấp danh sách group (label/count) theo thứ tự và đổ child rows đã fetch vào\n *     `config.data`. Row được gán vào group qua `value`, cùng khóa mà cột group sinh ra, bao gồm\n *     `groupKey` nếu cột có cấu hình.\n */\nexport interface ZTableServerGroup {\n  /** Giá trị nhóm — khớp với khóa group của row để gán row vào group. */\n  value: unknown;\n  /** Nhãn hiển thị; nếu bỏ trống table tự suy ra từ `value`. */\n  label?: string;\n  /** Tổng số dòng của group (server cung cấp) — hiển thị badge kể cả khi chưa expand/đủ data. */\n  count?: number;\n  /** Đang fetch rows cho group này (hiển thị loading trong group). */\n  loading?: boolean;\n  /** Tổng theo cột do server cung cấp, key là columnId. */\n  totals?: Record<string, unknown>;\n}\n\nexport interface ZTableGroupingConfig<T = unknown> {\n  enabled?: boolean;\n  mode?: ZTableGroupingMode;\n  /** Các cột được phép group từ header menu. */\n  columns?: string[];\n  /** Danh sách cột group ban đầu theo thứ tự từ ngoài vào trong. */\n  initialColumns?: string[];\n  allowHeaderMenu?: boolean;\n  defaultExpanded?: boolean;\n  showCount?: boolean;\n  /** Cấu hình các cột cần hiển thị tổng trên group row. */\n  totals?: ZTableGroupTotalConfig<T>[];\n  /**\n   * Cột đang group ở chế độ server (bắt buộc cho server grouping vì table không tự suy ra).\n   * Nếu bỏ trống, dùng phần tử đầu của `columns`.\n   */\n  serverGroupColumnId?: string;\n  /** Danh sách group do server cung cấp (chỉ dùng khi mode = 'server'). */\n  serverGroups?: ZTableServerGroup[];\n}\n\n/** Payload emit khi expand/collapse một group ở chế độ server. */\nexport interface ZTableGroupExpandEvent {\n  groupId: string;\n  columnId: string;\n  value: unknown;\n  expanded: boolean;\n}\n\n// ─── Event Contracts ─────────────────────────────────────────────────────────\n\n/** Distinguishes user-triggered vs programmatic pagination changes */\nexport type ZTableEmitType = 'user' | 'auto';\n\nexport interface ZTablePageChangeEvent {\n  pageIndex: number;\n  pageSize: number;\n  emitType: ZTableEmitType;\n}\n\nexport interface ZTableRowSelectEvent<T> {\n  row: T;\n  rowId: string;\n  selected: boolean;\n  selectedRows: T[];\n  selectedRowIds: string[];\n}\n\nexport interface ZTableRowSelectAllEvent<T> {\n  selected: boolean;\n  selectedRows: T[];\n  selectedRowIds: string[];\n}\n\nexport interface ZTableRowExpandEvent<T> {\n  row: T;\n  rowId: string;\n  expanded: boolean;\n}\n\nexport interface ZTableCellClickEvent<T> {\n  row: T;\n  rowId: string;\n  columnId: string;\n  value: unknown;\n}\n\nexport interface ZTableCellEditEvent<T> {\n  row: T;\n  rowId: string;\n  rowIndex: number;\n  columnId: string;\n  oldValue: unknown;\n  newValue: unknown;\n}\n\nexport interface ZTableRowDragEvent<T> {\n  row: T;\n  rowId: string;\n  previousIndex: number;\n  currentIndex: number;\n  data: T[];\n}\n\nexport type ZTableRowInsertPosition = 'above' | 'below';\n\nexport interface ZTableRowInsertEvent<T> {\n  row: T;\n  rowId: string;\n  /** Index trong row model đang hiển thị. */\n  rowIndex: number;\n  /** Index trong mảng data gốc. */\n  sourceIndex: number;\n  position: ZTableRowInsertPosition;\n}\n\nexport interface ZTableRowDeleteEvent<T> {\n  rows: T[];\n  rowIds: string[];\n  /** Index trong row model đang hiển thị. */\n  rowIndexes: number[];\n  /** Index trong mảng data gốc. */\n  sourceIndexes: number[];\n}\n\nexport interface ZTableRowCopyEvent<T> {\n  rows: T[];\n  rowIds: string[];\n  /** Index trong row model đang hiển thị. */\n  rowIndexes: number[];\n  /** Index trong mảng data gốc. */\n  sourceIndexes: number[];\n}\n\nexport interface ZTableRowPasteEvent<T> {\n  rows: T[];\n  targetRow: T;\n  targetRowId: string;\n  /** Index trong row model đang hiển thị. */\n  targetRowIndex: number;\n  /** Index trong mảng data gốc. */\n  targetSourceIndex: number;\n  position: ZTableRowInsertPosition;\n}\n\nexport type ZTableRowMoveDirection = 'up' | 'down';\n\nexport interface ZTableRowMoveEvent<T> {\n  row: T;\n  rowId: string;\n  direction: ZTableRowMoveDirection;\n  /** Index trong row model đang hiển thị. */\n  previousIndex: number;\n  currentIndex: number;\n  /** Index trong mảng data gốc. */\n  previousSourceIndex: number;\n  currentSourceIndex: number;\n}\n\nexport interface ZTableSortChangeEvent {\n  sorting: SortingState;\n}\n\nexport interface ZTableFilterChangeEvent {\n  filters: ColumnFiltersState;\n  search: string;\n}\n\nexport interface ZTableSearchChangeEvent {\n  search: string;\n  filters: ColumnFiltersState;\n  sorting: SortingState;\n  pagination: PaginationState;\n}\n\nexport interface ZActionTooltipState {\n  content: ZTooltipContent;\n  alwaysShow: boolean;\n  position?: string;\n  arrow?: boolean;\n  offset?: number;\n  maxWidth?: string;\n}\n\nexport interface ZTableActionItem<T = unknown> {\n  key: string;\n  label?: string;\n  icon?: ZIcon;\n  iconSize?: ZIconVariants['zSize'];\n  tooltip?: string | ZTooltipConfig;\n  type?: ZButtonVariants['zType'];\n  size?: ZButtonVariants['zSize'];\n  class?: string;\n  loading?: boolean | ((row: T) => boolean);\n  disabled?: boolean | ((row: T) => boolean);\n  hidden?: boolean | ((row: T) => boolean);\n  divide?: 'before' | 'after';\n}\n\nexport type ZTableActionList<T = unknown> = ZTableActionItem<T>[] | ((row: T) => ZTableActionItem<T>[]);\n\nexport interface ZTableActionClickEvent<T = unknown> {\n  key: string;\n  row: T;\n  rowId: string;\n  action: ZTableActionItem<T>;\n}\n\nexport interface ZTableBulkActionContext<T = unknown> {\n  selectedRows: T[];\n  selectedRowIds: string[];\n  selection: RowSelectionState;\n}\n\nexport interface ZTableBulkActionHandlerContext<T = unknown> extends ZTableBulkActionContext<T> {\n  exportExcel: (config: ZTableExcelExportConfig<T>) => Promise<void>;\n}\n\nexport interface ZTableBulkActionItem<T = unknown> extends Omit<\n  ZTableActionItem<ZTableBulkActionContext<T>>,\n  'disabled' | 'hidden'\n> {\n  disabled?: boolean | ((context: ZTableBulkActionContext<T>) => boolean);\n  hidden?: boolean | ((context: ZTableBulkActionContext<T>) => boolean);\n  handler?: (context: ZTableBulkActionHandlerContext<T>) => void | false | Promise<void | false>;\n}\n\nexport interface ZTableBulkActionViewItem<T = unknown> {\n  action: ZTableBulkActionItem<T>;\n  disabled: boolean;\n}\n\nexport type ZTableBulkActionRenderItem<T = unknown> = ZTableBulkActionViewItem<T> & {\n  buttonType: ZButtonVariants['zType'];\n};\n\nexport type ZTableBulkActionList<T = unknown> =\n  | ZTableBulkActionItem<T>[]\n  | ((context: ZTableBulkActionContext<T>) => ZTableBulkActionItem<T>[]);\n\nexport interface ZTableBulkActionOptions<T = unknown> {\n  enabled?: boolean;\n  /** Custom actions rendered when rows are selected. */\n  actions?: ZTableBulkActionList<T>;\n  maxVisible?: number;\n  selectedLabel?: string;\n  clearLabel?: string;\n}\n\nexport type ZTableBulkActionConfig<T = unknown> = ZTableBulkActionOptions<T> | ZTableBulkActionList<T>;\n\nexport interface ZTableBulkActionClickEvent<T = unknown> extends ZTableBulkActionContext<T> {\n  key: string;\n  action: ZTableBulkActionItem<T>;\n}\n\nexport interface ZTableCellSelectionPredicateContext<T = unknown> {\n  row: T;\n  rowId: string;\n  rowIndex: number;\n  columnId: string;\n  column: ZTableColumnConfig<T> | undefined;\n}\n\nexport interface ZTableCellSelectionOptions<T = unknown> {\n  enabled?: boolean;\n  range?: boolean;\n  contextMenu?: boolean;\n  copyWithHeaders?: boolean;\n  /** Column ids that cannot be selected, used as range boundaries, or copied from a range. */\n  disabledColumnIds?: string[];\n  /** Disable selection for a specific custom cell. */\n  isCellDisabled?: (context: ZTableCellSelectionPredicateContext<T>) => boolean;\n}\n\nexport type ZTableCellSelectionConfig<T = unknown> = boolean | ZTableCellSelectionOptions<T>;\n\nexport type ZTableExcelExportScope = 'selected' | 'filtered' | 'all';\n\nexport interface ZTableExcelExportContext<T = unknown> extends ZTableBulkActionContext<T> {\n  data: T[];\n  columns: ZTableColumnConfig<T>[];\n}\n\nexport interface ZTableExcelExportConfig<T = unknown> {\n  enabled?: boolean;\n  /** Built-in action key. Use the same key in bulkAction to override the button. */\n  actionKey?: string;\n  actionLabel?: string;\n  actionIcon?: ZIcon;\n  actionIconSize?: string;\n  fileName?: string | ((context: ZTableExcelExportContext<T>) => string);\n  sheetName?: string;\n  /** Shortcut for `scope: 'all'`. */\n  exportAll?: boolean;\n  scope?: ZTableExcelExportScope;\n  excludeColumns?: string[];\n  excelOverrides?: Partial<Record<string, Partial<ZExcelColumnConfig<T>>>>;\n  headerResolver?: (col: ZTableColumnConfig<T>) => string;\n  options?: ZExcelExportOptions;\n}\n\n/**\n * @deprecated Use `ZTableBodyColumnConfig.actions` directly with an action array\n * or `(row) => action[]`, and set `actionMaxVisible` on the body config when needed.\n */\nexport interface ZTableActionColumnConfig<T = unknown> {\n  /**\n   * @deprecated Put the action array/function directly in `body.actions` instead.\n   */\n  actions: ZTableActionList<T>;\n  maxVisible?: number;\n}\n\nexport type ZTableActionBodyConfig<T = unknown> =\n  | ZTableActionColumnConfig<T>\n  | (ZTableActionList<T> & Partial<ZTableActionColumnConfig<T>>);\n\n// ─── Discriminated Union Change Event ────────────────────────────────────────\n\n/** All possible change event types — used as discriminant in ZTableChangeEvent */\nexport type ZTableChangeType =\n  | 'page'\n  | 'sort'\n  | 'filter'\n  | 'search'\n  | 'select'\n  | 'expand'\n  | 'rowSelect'\n  | 'rowSelectAll'\n  | 'rowExpand'\n  | 'rowDrag'\n  | 'rowInsert'\n  | 'rowDelete'\n  | 'rowCopy'\n  | 'rowPaste'\n  | 'rowMove'\n  | 'cellClick'\n  | 'cellEdit'\n  | 'action'\n  | 'bulkAction'\n  | 'grouping'\n  | 'groupExpand';\n\nexport interface ZTableChangeEventBase {\n  type: ZTableChangeType;\n}\n\nexport interface ZTablePageChange extends ZTableChangeEventBase {\n  type: 'page';\n  data: ZTablePageChangeEvent;\n}\n\nexport interface ZTableSortChange extends ZTableChangeEventBase {\n  type: 'sort';\n  data: ZTableSortChangeEvent;\n}\n\nexport interface ZTableFilterChange extends ZTableChangeEventBase {\n  type: 'filter';\n  data: ZTableFilterChangeEvent;\n}\n\nexport interface ZTableRowSelectChange<T> extends ZTableChangeEventBase {\n  type: 'rowSelect';\n  data: ZTableRowSelectEvent<T>;\n}\n\nexport interface ZTableRowSelectAllChange<T> extends ZTableChangeEventBase {\n  type: 'rowSelectAll';\n  data: ZTableRowSelectAllEvent<T>;\n}\n\nexport interface ZTableRowExpandChange<T> extends ZTableChangeEventBase {\n  type: 'rowExpand';\n  data: ZTableRowExpandEvent<T>;\n}\n\nexport interface ZTableRowDragChange<T> extends ZTableChangeEventBase {\n  type: 'rowDrag';\n  data: ZTableRowDragEvent<T>;\n}\n\nexport interface ZTableRowInsertChange<T> extends ZTableChangeEventBase {\n  type: 'rowInsert';\n  data: ZTableRowInsertEvent<T>;\n}\n\nexport interface ZTableRowDeleteChange<T> extends ZTableChangeEventBase {\n  type: 'rowDelete';\n  data: ZTableRowDeleteEvent<T>;\n}\n\nexport interface ZTableRowCopyChange<T> extends ZTableChangeEventBase {\n  type: 'rowCopy';\n  data: ZTableRowCopyEvent<T>;\n}\n\nexport interface ZTableRowPasteChange<T> extends ZTableChangeEventBase {\n  type: 'rowPaste';\n  data: ZTableRowPasteEvent<T>;\n}\n\nexport interface ZTableRowMoveChange<T> extends ZTableChangeEventBase {\n  type: 'rowMove';\n  data: ZTableRowMoveEvent<T>;\n}\n\nexport interface ZTableCellClickChange<T> extends ZTableChangeEventBase {\n  type: 'cellClick';\n  data: ZTableCellClickEvent<T>;\n}\n\nexport interface ZTableSearchChange extends ZTableChangeEventBase {\n  type: 'search';\n  data: ZTableSearchChangeEvent;\n}\n\nexport interface ZTableSelectChange extends ZTableChangeEventBase {\n  type: 'select';\n  data: { selection: RowSelectionState };\n}\n\nexport interface ZTableExpandChange extends ZTableChangeEventBase {\n  type: 'expand';\n  data: { expanded: ExpandedState };\n}\n\nexport interface ZTableGroupingChange extends ZTableChangeEventBase {\n  type: 'grouping';\n  data: { grouping: string[] };\n}\n\nexport interface ZTableGroupExpandChange extends ZTableChangeEventBase {\n  type: 'groupExpand';\n  data: ZTableGroupExpandEvent;\n}\n\nexport interface ZTableActionChange<T> extends ZTableChangeEventBase {\n  type: 'action';\n  data: ZTableActionClickEvent<T>;\n}\n\nexport interface ZTableBulkActionChange<T> extends ZTableChangeEventBase {\n  type: 'bulkAction';\n  data: ZTableBulkActionClickEvent<T>;\n}\n\nexport interface ZTableCellEditChange<T> extends ZTableChangeEventBase {\n  type: 'cellEdit';\n  data: ZTableCellEditEvent<T>;\n}\n\n/**\n * Unified change event emitted via `zChange` output.\n * Parent components can use `event.type` to narrow the discriminated union.\n *\n * Example:\n * ```ts\n * onTableChange(event: ZTableChangeEvent<MyRow>) {\n *   if (event.type === 'page') {\n *     // event.data is ZTablePageChangeEvent\n *   }\n * }\n * ```\n */\nexport type ZTableChangeEvent<T> =\n  | ZTablePageChange\n  | ZTableSortChange\n  | ZTableFilterChange\n  | ZTableSearchChange\n  | ZTableSelectChange\n  | ZTableExpandChange\n  | ZTableGroupingChange\n  | ZTableGroupExpandChange\n  | ZTableRowSelectChange<T>\n  | ZTableRowSelectAllChange<T>\n  | ZTableRowExpandChange<T>\n  | ZTableRowDragChange<T>\n  | ZTableRowInsertChange<T>\n  | ZTableRowDeleteChange<T>\n  | ZTableRowCopyChange<T>\n  | ZTableRowPasteChange<T>\n  | ZTableRowMoveChange<T>\n  | ZTableCellClickChange<T>\n  | ZTableCellEditChange<T>\n  | ZTableActionChange<T>\n  | ZTableBulkActionChange<T>;\n\n/** Initial table state — applied on first render, before any cached config is loaded */\nexport interface ZTableInitialState {\n  columnPinning?: ColumnPinningState;\n  rowPinning?: RowPinningState;\n  sorting?: SortingState;\n  columnFilters?: ColumnFiltersState;\n  globalFilter?: string;\n  expanded?: ExpandedState;\n  rowSelection?: RowSelectionState;\n  columnVisibility?: VisibilityState;\n  pagination?: PaginationState;\n}\n\nexport interface ZTableVirtualConfig {\n  /** Enable virtual scrolling */\n  enabled: boolean;\n  /** Row height in pixels (default: 40). Used as estimate for dynamic sizing. */\n  size?: number;\n  /** Number of items to render outside visible area (default: 5) */\n  overscan?: number;\n  /** Number of rows per virtual group (default: 1) */\n  groupSize?: number;\n  /**\n   * Enable dynamic row height measurement.\n   * When true, each row's height is measured dynamically after render.\n   * The virtualizer uses `height: auto` for all rows, allowing content\n   * to determine the actual height, which is then captured via measureElement().\n   * The `size` property is used as an initial estimate before measurement.\n   */\n  dynamicSize?: boolean;\n\n  /**\n   * Initial scroll offset in pixels.\n   * Useful for restoring scroll position or starting at a specific offset.\n   * @default 0\n   */\n  initialOffset?: number | (() => number);\n\n  /**\n   * The margin (in pixels) to apply to the start of the virtualizer.\n   * Useful when the virtualizer is not at the top of the scroll container.\n   * @default 0\n   */\n  scrollMargin?: number;\n\n  /**\n   * Gap between items in pixels.\n   * Use this instead of CSS gap for proper virtual scroll calculations.\n   * @default 0\n   */\n  gap?: number;\n\n  /**\n   * Delay in milliseconds before resetting isScrolling state.\n   * @default 150\n   */\n  isScrollingResetDelay?: number;\n\n  /**\n   * Use native scrollend event instead of debounced scroll detection.\n   * Better performance on browsers that support it.\n   * @default true (if browser supports it)\n   */\n  useScrollendEvent?: boolean;\n\n  /**\n   * Custom function to generate unique keys for each item.\n   * Useful for stable item identity across data updates.\n   */\n  getItemKey?: (index: number) => string | number;\n\n  /**\n   * Custom range extractor function.\n   * Use to customize which items are rendered (e.g., for sticky headers).\n   */\n  rangeExtractor?: (range: { startIndex: number; endIndex: number }) => number[];\n}\n\nexport interface ZTableSearchConfig {\n  enabled?: boolean;\n  placeholder?: string;\n  debounceTime?: number;\n  width?: string;\n  size?: ZInputSize;\n}\n\nexport interface ZTableVirtualColumnConfig {\n  /** Enable horizontal column virtualization for center columns only */\n  enabled: boolean;\n  /** Number of columns to render outside the visible range */\n  overscan?: number;\n}\n\n// ─── Main Table Config ───────────────────────────────────────────────────────\n\n/**\n * Top-level configuration passed via `[zConfig]` input.\n * This is the primary API surface for consumers of z-table.\n */\nexport interface ZTableConfig<T> {\n  /** 'local' = client-side operations; 'server' = parent handles data fetching */\n  mode?: ZTableMode;\n  /** Row data array — for server mode, this is the current page's data */\n  data: T[];\n  /** Enables drag-and-drop row reordering for compatible local-table states */\n  enableRowDragging?: boolean;\n  /** Total row count for server-side pagination (aliased as totalRows) */\n  totalCount?: number;\n  /** Column definitions */\n  columns: ZTableColumnConfig<T>[];\n  /** Custom row ID generator — critical for selection/expansion state stability */\n  getRowId?: (row: T, index: number, parent: T | undefined, data: T[]) => string;\n  /** Sub-row accessor for tree/hierarchical data */\n  getSubRows?: (row: T, index: number, parent: T | undefined, data: T[]) => T[] | undefined;\n  /** Class applied to the row and its cells. Cell body classes take precedence on conflicts. */\n  rowClass?: string | ((row: Row<T>) => string);\n  /**\n   * Style applied to the row and its cells. Cell body styles take precedence on conflicts.\n   * Fixed-size virtual rows keep the height configured by virtual.size.\n   */\n  rowStyle?: Record<string, string> | ((row: Row<T>) => Record<string, string>);\n  /** @deprecated Use totalCount instead */\n  totalRows?: number;\n  /** true = enable with defaults; object = full virtual scroll config */\n  virtual?: ZTableVirtualConfig | boolean;\n  /** true = enable with defaults; object = full horizontal column virtualization config */\n  virtualColumns?: ZTableVirtualColumnConfig | boolean;\n  showHorizontalBorder?: boolean;\n  showVerticalBorder?: boolean;\n  showHeaderShadow?: boolean;\n  showFooterShadow?: boolean;\n  /** Show the settings drawer toggle button */\n  enableSettings?: boolean;\n  /** Show active search/column filters above the table with quick clear actions */\n  enableFilterHeader?: boolean;\n  enableColumnResizing?: boolean;\n  /** Giữ kích thước cột ban đầu và chỉ kéo giãn cột dữ liệu cuối để lấp đầy bảng. */\n  fitContentWidth?: boolean;\n  /** Multi-column sorting is enabled by default; set false for single-column sorting */\n  enableMultiSort?: boolean;\n  /** true = enable with defaults; object = full search bar config */\n  search?: ZTableSearchConfig | boolean;\n  /** Floating bulk action bar shown when rows are selected */\n  bulkAction?: ZTableBulkActionConfig<T> | boolean;\n  /** Bật chọn cell/range và copy giống spreadsheet. Mặc định tắt. */\n  enableCellSelection?: ZTableCellSelectionConfig<T>;\n  /** Bật menu chuột phải để chèn dòng khi bảng có cell editContent. */\n  enableContentRowInsert?: boolean;\n  enableRowPinning?: boolean;\n  /** Bật/tắt ghim cột toàn bảng. Mặc định `true`. Từng cột có thể override qua `enablePinning`. */\n  enableColumnPinning?: boolean;\n  enableColumnOrdering?: boolean;\n  enableColumnSorting?: boolean;\n  enableGrouping?: ZTableGroupingConfig<T> | boolean;\n  pagination?: ZTablePaginationConfig;\n  initialState?: ZTableInitialState;\n  loading?: boolean;\n  /** Template rendered when a row is expanded */\n  expandedRowTemplate?: TemplateRef<{ $implicit: Row<T> }>;\n  /** Render z-table con độc lập khi dòng mở rộng không dùng custom template. */\n  subTableConfig?: ZTableConfig<unknown> | ((row: Row<T>) => ZTableConfig<unknown> | undefined);\n  /** Template rendered when no data matches */\n  emptyTemplate?: TemplateRef<void>;\n  /** Template rendered during loading state */\n  loadingTemplate?: TemplateRef<void>;\n  getRowCanExpand?: (row: Row<T>) => boolean;\n  /** Fixed table width. Defaults to the available width of the parent container. */\n  width?: string;\n  /** Fixed table height. Keeps the horizontal scrollbar at the bottom when the table has few rows. */\n  height?: string;\n  maxHeight?: string;\n  minHeight?: string;\n  /** Debounce time (ms) for async state updates; defaults to Z_DEFAULT_DEBOUNCE_TIME */\n  debounceTime?: number;\n  /** Use skeleton rows instead of loading spinner */\n  useSkeleton?: boolean;\n}\n\nexport interface ZTableEditCellChangeEvent<T = unknown> {\n  row: T;\n  rowId: string;\n  rowIndex: number;\n  columnId: string;\n  oldValue: unknown;\n  newValue: unknown;\n}\n\nexport interface ZResolvedEditConfig {\n  type: ZTableEditType;\n  size: ZTableEditSize;\n  placeholder: string;\n  allowClear: boolean;\n  class: string;\n  style: Record<string, string>;\n  disabled: boolean;\n  readonly: boolean;\n  loading: boolean;\n}\n\n// ─── Internal Drag And Drop ─────────────────────────────────────────────────\n\nexport type ZTableDragEntity = 'row' | 'settings-column';\nexport type ZTableDropEdge = 'top' | 'bottom';\n\nexport interface ZTableDragData {\n  tableId: string;\n  entity: ZTableDragEntity;\n  itemId: string;\n}\n\nexport interface ZTableDragDropData {\n  source: ZTableDragData;\n  target: ZTableDragData;\n  edge: ZTableDropEdge;\n}\n\nexport interface ZTableDragMonitor {\n  onDragStart?: (source: ZTableDragData) => void;\n  onDrop?: (event: ZTableDragDropData) => void;\n  onDragEnd?: (source: ZTableDragData) => void;\n}\n\nexport interface ZTableDropTarget {\n  element: HTMLElement;\n  getData: () => ZTableDragData;\n  isDisabled: () => boolean;\n}\n\nexport interface ZTableScrollContainer {\n  element: HTMLElement;\n  tableId: string;\n  entity: ZTableDragData['entity'];\n  isEnabled: () => boolean;\n}\n\nexport interface ZTableDragSession {\n  source: ZTableDragData;\n  sourceElement: HTMLElement;\n  pointerId: number;\n  startX: number;\n  startY: number;\n  clientX: number;\n  clientY: number;\n  directionY: -1 | 0 | 1;\n  offsetX: number;\n  offsetY: number;\n  active: boolean;\n  preview: HTMLElement | null;\n  placeholder: HTMLElement | null;\n  target: ZTableDropTarget | null;\n  edge: ZTableDropEdge | null;\n}\n\n// ─── Settings Persistence ────────────────────────────────────────────────────\n\n/** Minimal column info stored alongside saved config for cache invalidation */\nexport interface ZTableSavedColumnInfo {\n  id: string;\n  accessorKey?: string;\n}\n\n/** Shape of the persisted table configuration via ZCacheService. */\nexport interface ZTableSavedConfig {\n  columnOrder: string[];\n  columnSizing: Record<string, number>;\n  columnPinning: { left?: string[]; right?: string[] };\n  columnVisibility: Record<string, boolean>;\n  /** Các cột đang được group theo thứ tự từ ngoài vào trong. */\n  groupingColumnIds?: string[];\n  columnInfo: ZTableSavedColumnInfo[];\n  showHeaderFooterShadow: boolean;\n  showHorizontalBorder: boolean;\n  showVerticalBorder: boolean;\n}\n\n// ─── TanStack Module Augmentation ────────────────────────────────────────────\n\n/**\n * Extends TanStack's TableMeta to add a custom `updateData` callback.\n * This is used by inline edit cells to notify the table of value changes.\n */\ndeclare module '@tanstack/angular-table' {\n  interface TableMeta<TData extends RowData> {\n    updateData?: (rowIndex: number, columnId: string, value: unknown) => void;\n  }\n}\n\nexport type ZTableTooltipProperty =\n  | 'content'\n  | 'position'\n  | 'trigger'\n  | 'type'\n  | 'size'\n  | 'class'\n  | 'showDelay'\n  | 'hideDelay'\n  | 'arrow'\n  | 'offset'\n  | 'autoDetect'\n  | 'alwaysShow'\n  | 'maxWidth';\n\nexport type ZTablePopoverProperty =\n  | 'content'\n  | 'position'\n  | 'trigger'\n  | 'class'\n  | 'showDelay'\n  | 'hideDelay'\n  | 'disabled'\n  | 'offset'\n  | 'width'\n  | 'manualClose'\n  | 'outsideClickClose'\n  | 'scrollClose'\n  | 'sticky'\n  | 'showArrow'\n  | 'keyboardSafe';\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { ZButtonComponent, ZButtonVariants } from '@shival99/z-ui/components/z-button';\nimport { ZDropdownMenuComponent } from '@shival99/z-ui/components/z-dropdown-menu';\nimport type { ZDropdownMenuItem } from '@shival99/z-ui/components/z-dropdown-menu';\nimport { ZTooltipDirective, ZTooltipConfig } from '@shival99/z-ui/components/z-tooltip';\nimport {\n  Z_TABLE_DEFAULT_DROPDOWN_BUTTON_SIZE,\n  Z_TABLE_DEFAULT_MAX_VISIBLE_ACTIONS,\n  ZActionTooltipState,\n  ZTableActionClickEvent,\n  ZTableActionColumnConfig,\n  ZTableActionItem,\n} from '../z-table.types';\n\n@Component({\n  selector: 'z-table-actions',\n  imports: [ZButtonComponent, ZTooltipDirective, ZDropdownMenuComponent],\n  standalone: true,\n  template: `\n    <div class=\"z-table-actions flex items-center justify-center gap-1\">\n      @if (shouldShowAsButtons()) {\n        @for (action of allActions(); track action.key) {\n          @if (actionStates()[action.key].visible) {\n            <button\n              type=\"button\"\n              z-button\n              z-tooltip\n              [zType]=\"action.type ?? 'outline'\"\n              [zSize]=\"action.size ?? 'sm'\"\n              [zTypeIcon]=\"action.icon\"\n              zSizeIcon=\"14\"\n              [zLabel]=\"action.label ?? ''\"\n              [zLoading]=\"actionStates()[action.key].loading\"\n              [zDisabled]=\"actionStates()[action.key].disabled\"\n              [class]=\"action.class ?? ''\"\n              [zContent]=\"actionStates()[action.key].tooltipState.content\"\n              [zAlwaysShow]=\"actionStates()[action.key].tooltipState.alwaysShow\"\n              [zArrow]=\"actionStates()[action.key].tooltipState.arrow ?? true\"\n              [zOffset]=\"actionStates()[action.key].tooltipState.offset ?? 8\"\n              [zMaxWidth]=\"actionStates()[action.key].tooltipState.maxWidth ?? '250px'\"\n              (click)=\"_onActionClick(action, $event)\"\n            ></button>\n          }\n        }\n      } @else {\n        <z-dropdown-menu\n          [zItems]=\"dropdownItems()\"\n          zPosition=\"bottom-right\"\n          [zButtonSize]=\"zDropdownButtonSize()\"\n          [zMinWidth]=\"160\"\n          (zOnItemClick)=\"_onDropdownItemClick($event)\"\n        >\n          <button\n            type=\"button\"\n            z-button\n            zTypeIcon=\"lucideEllipsis\"\n            [zSize]=\"zDropdownButtonSize()\"\n            zType=\"outline\"\n            [zWave]=\"false\"\n          ></button>\n        </z-dropdown-menu>\n      }\n    </div>\n  `,\n  styles: `\n    :host {\n      display: block;\n    }\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ZTableActionsComponent<T = unknown> {\n  public readonly zConfig = input.required<ZTableActionColumnConfig<T>>();\n  public readonly zRow = input.required<T>();\n  public readonly zRowId = input.required<string>();\n  public readonly zDropdownButtonSize = input<ZButtonVariants['zSize']>(Z_TABLE_DEFAULT_DROPDOWN_BUTTON_SIZE);\n  public readonly zActionClick = output<ZTableActionClickEvent<T>>();\n\n  protected readonly allActions = computed(() => {\n    const config = this.zConfig();\n    const row = this.zRow();\n    const { actions } = config;\n\n    const resolvedActions = typeof actions === 'function' ? actions(row) : actions;\n    return resolvedActions.filter(action => {\n      if (typeof action.hidden === 'function') {\n        return !action.hidden(row);\n      }\n      return !action.hidden;\n    });\n  });\n\n  protected readonly shouldShowAsButtons = computed(() => {\n    const actions = this.allActions();\n    const maxVisible = this.zConfig().maxVisible ?? Z_TABLE_DEFAULT_MAX_VISIBLE_ACTIONS;\n    return actions.length <= maxVisible;\n  });\n\n  protected readonly actionStates = computed(() => {\n    const row = this.zRow();\n    const actions = this.allActions();\n    const states: Record<\n      string,\n      { visible: boolean; loading: boolean; disabled: boolean; tooltipState: ZActionTooltipState }\n    > = {};\n\n    for (const action of actions) {\n      const isHidden = typeof action.hidden === 'function' ? action.hidden(row) : (action.hidden ?? false);\n      const isDisabled = typeof action.disabled === 'function' ? action.disabled(row) : (action.disabled ?? false);\n      const isLoading = typeof action.loading === 'function' ? action.loading(row) : (action.loading ?? false);\n\n      states[action.key] = {\n        visible: !isHidden,\n        loading: isLoading,\n        disabled: isDisabled || isLoading,\n        tooltipState: this._getTooltipState(action.tooltip),\n      };\n    }\n\n    return states;\n  });\n\n  protected readonly dropdownItems = computed((): ZDropdownMenuItem[] => {\n    const row = this.zRow();\n    return this.allActions().map(action => {\n      const isDisabled = typeof action.disabled === 'function' ? action.disabled(row) : (action.disabled ?? false);\n      const isLoading = typeof action.loading === 'function' ? action.loading(row) : (action.loading ?? false);\n      return {\n        label: action.label ?? action.key,\n        icon: action.icon,\n        iconSize: action?.iconSize || '18',\n        loading: isLoading,\n        disabled: isDisabled || isLoading,\n        class: action.class,\n        divide: action.divide,\n        onClick: () => {\n          if (isDisabled || isLoading) {\n            return;\n          }\n\n          this._emitActionClick(action);\n        },\n      };\n    });\n  });\n\n  private _getTooltipState(tooltip: string | ZTooltipConfig | undefined): ZActionTooltipState {\n    if (!tooltip) {\n      return { content: '', alwaysShow: false };\n    }\n\n    if (typeof tooltip === 'string') {\n      return { content: tooltip, alwaysShow: true };\n    }\n\n    return {\n      content: tooltip.content ?? '',\n      alwaysShow: tooltip.alwaysShow ?? true,\n      position: tooltip.position,\n      arrow: tooltip.arrow,\n      offset: tooltip.offset,\n      maxWidth: tooltip.maxWidth,\n    };\n  }\n\n  protected _onActionClick(action: ZTableActionItem<T>, event: Event): void {\n    event.stopPropagation();\n    const states = this.actionStates();\n    if (states[action.key]?.disabled) {\n      return;\n    }\n    this._emitActionClick(action);\n  }\n\n  protected _onDropdownItemClick(item: ZDropdownMenuItem): void {\n    const action = this.allActions().find(a => (a.label ?? a.key) === item.label);\n    if (!action || this.actionStates()[action.key]?.disabled) {\n      return;\n    }\n\n    this._emitActionClick(action);\n  }\n\n  private _emitActionClick(action: ZTableActionItem<T>): void {\n    this.zActionClick.emit({\n      key: action.key,\n      row: this.zRow(),\n      rowId: this.zRowId(),\n      action,\n    });\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  effect,\n  ElementRef,\n  afterNextRender,\n  inject,\n  input,\n  output,\n  signal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ZCalendarComponent, type ZCalendarControl, type ZCalendarValue } from '@shival99/z-ui/components/z-calendar';\nimport { ZInputComponent, type ZInputControl } from '@shival99/z-ui/components/z-input';\nimport { ZSelectComponent, type ZSelectControl } from '@shival99/z-ui/components/z-select';\nimport { zMergeClasses } from '@shival99/z-ui/utils';\nimport type { ZResolvedTableEditContentConfig } from '../z-table.types';\n\n@Component({\n  selector: 'z-table-content-editor',\n  imports: [FormsModule, ZCalendarComponent, ZInputComponent, ZSelectComponent],\n  standalone: true,\n  template: `\n    @switch (zConfig().type) {\n      @case ('select') {\n        <z-select\n          #embeddedControl\n          [class]=\"controlClass()\"\n          [style]=\"zConfig().style\"\n          [zSize]=\"zConfig().size\"\n          [zMode]=\"zConfig().selectMode\"\n          [zConfig]=\"zConfig().selectConfig\"\n          [zShowSearch]=\"zConfig().selectShowSearch\"\n          [zAllowClear]=\"zConfig().allowClear\"\n          [zWrap]=\"zConfig().selectWrap\"\n          [zLoading]=\"zConfig().loading\"\n          [zLoadingOutline]=\"true\"\n          [zDisabled]=\"zConfig().disabled\"\n          [zReadonly]=\"zConfig().readonly\"\n          [zMaxTagCount]=\"zConfig().maxTagCount\"\n          [zPlaceholder]=\"zConfig().placeholder\"\n          [zOptions]=\"zConfig().options\"\n          [ngModel]=\"zValue()\"\n          [ngModelOptions]=\"{ standalone: true }\"\n          (ngModelChange)=\"onSelectChange($event)\"\n          (zOnBlur)=\"commitDraft()\"\n          (keydown)=\"onEditorKeydown($event)\"\n          (zControl)=\"onSelectControl($event)\"\n        />\n      }\n      @case ('date') {\n        <z-calendar\n          #embeddedControl\n          [class]=\"controlClass()\"\n          [style]=\"zConfig().style\"\n          [zSize]=\"zConfig().size\"\n          zMode=\"single\"\n          [zFormat]=\"zConfig().dateFormat\"\n          [zValueType]=\"zConfig().dateValueType\"\n          [zMinDate]=\"zConfig().minDate\"\n          [zMaxDate]=\"zConfig().maxDate\"\n          [zAllowClear]=\"zConfig().allowClear\"\n          [zLoading]=\"zConfig().loading\"\n          [zLoadingOutline]=\"true\"\n          [zDisabled]=\"zConfig().disabled\"\n          [zReadonly]=\"zConfig().readonly\"\n          [ngModel]=\"$any(zValue())\"\n          [ngModelOptions]=\"{ standalone: true }\"\n          (zChange)=\"onCalendarChange($event)\"\n          (keydown)=\"onEditorKeydown($event)\"\n          (zControl)=\"onCalendarControl($event)\"\n        />\n      }\n      @default {\n        <z-input\n          #embeddedControl\n          [class]=\"controlClass()\"\n          [style]=\"zConfig().style\"\n          [zSize]=\"zConfig().size\"\n          [zType]=\"inputType()\"\n          [zAlign]=\"zConfig().align\"\n          [zPlaceholder]=\"zConfig().placeholder\"\n          [zPrefix]=\"zConfig().prefix\"\n          [zSuffix]=\"zConfig().suffix\"\n          [zMin]=\"zConfig().min\"\n          [zMax]=\"zConfig().max\"\n          [zStep]=\"zConfig().step ?? 1\"\n          [zShowArrows]=\"zConfig().type === 'number'\"\n          [zMask]=\"zConfig().mask\"\n          [zDecimalPlaces]=\"zConfig().decimalPlaces\"\n          [zAllowNegative]=\"zConfig().allowNegative\"\n          [zThousandSeparator]=\"zConfig().thousandSeparator\"\n          [zDecimalMarker]=\"zConfig().decimalMarker\"\n          [zAllowClear]=\"zConfig().allowClear\"\n          [zLoading]=\"zConfig().loading\"\n          [zLoadingOutline]=\"true\"\n          [zDisabled]=\"zConfig().disabled\"\n          [zReadonly]=\"zConfig().readonly\"\n          [ngModel]=\"$any(zValue())\"\n          [ngModelOptions]=\"{ standalone: true }\"\n          (ngModelChange)=\"draftValue.set($event)\"\n          (zOnBlur)=\"commitDraft()\"\n          (zOnEnter)=\"commitDraft()\"\n          (zOnKeydown)=\"onEditorKeydown($event)\"\n          (zControl)=\"onInputControl($event)\"\n        />\n      }\n    }\n  `,\n  styles: `\n    :host {\n      position: absolute;\n      z-index: 2;\n      inset: 0;\n      display: block;\n      min-width: 0;\n      overflow: hidden;\n      background: var(--background);\n      box-shadow: inset 0 0 0 1px var(--primary);\n    }\n\n    :host ::ng-deep z-input,\n    :host ::ng-deep z-select,\n    :host ::ng-deep z-calendar,\n    :host ::ng-deep .z-input-wrapper,\n    :host ::ng-deep .z-select-wrapper,\n    :host ::ng-deep .z-calendar-wrapper,\n    :host ::ng-deep .z-input-wrapper > div,\n    :host ::ng-deep .z-select-wrapper > div,\n    :host ::ng-deep .z-calendar-wrapper > div {\n      width: 100%;\n      height: 100%;\n      min-height: 0;\n    }\n\n    :host ::ng-deep .z-input-container,\n    :host ::ng-deep .z-select-trigger,\n    :host ::ng-deep .z-calendar-wrapper > div > div {\n      width: 100%;\n      height: 100% !important;\n      min-height: 0 !important;\n      border: 0 !important;\n      border-radius: 0 !important;\n      background: transparent !important;\n      box-shadow: none !important;\n      outline: 0 !important;\n      --tw-ring-shadow: 0 0 #0000 !important;\n    }\n\n    :host ::ng-deep .z-input-container,\n    :host ::ng-deep .z-select-trigger,\n    :host ::ng-deep .z-calendar-wrapper > div > div {\n      gap: 0 !important;\n      padding: 0 12px !important;\n      color: inherit;\n      font: inherit;\n      line-height: inherit;\n    }\n\n    :host ::ng-deep .z-loading-outline-active {\n      box-shadow: 0 0 0 3px color-mix(in oklab, var(--ring) 50%, transparent) !important;\n    }\n\n    :host ::ng-deep .z-input-native,\n    :host ::ng-deep .z-select-trigger,\n    :host ::ng-deep .z-calendar-wrapper input {\n      color: inherit;\n      font: inherit;\n      line-height: inherit;\n    }\n\n    :host ::ng-deep .z-calendar-wrapper > div > div > z-icon {\n      display: none;\n    }\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ZTableContentEditorComponent {\n  public readonly zValue = input<unknown>();\n  public readonly zConfig = input.required<ZResolvedTableEditContentConfig>();\n  public readonly zCommit = output<unknown>();\n  public readonly zCancel = output<void>();\n\n  protected readonly draftValue = signal<unknown>(null);\n  protected readonly controlClass = computed(() => zMergeClasses('z-table-embedded-control', this.zConfig().class));\n  protected readonly inputType = computed<'text' | 'number'>(() =>\n    this.zConfig().type === 'number' ? 'number' : 'text'\n  );\n\n  private readonly _host = inject<ElementRef<HTMLElement>>(ElementRef);\n  private _finished = false;\n  private _inputControl: ZInputControl | null = null;\n  private _selectControl: ZSelectControl | null = null;\n  private _calendarControl: ZCalendarControl | null = null;\n  private _activated = false;\n  private _ignoreNextCalendarChange = false;\n\n  constructor() {\n    effect(() => {\n      const value = this.zValue();\n      this.draftValue.set(value ?? null);\n    });\n\n    afterNextRender(() => this._activateControl());\n  }\n\n  protected onInputControl(control: ZInputControl): void {\n    this._inputControl = control;\n    queueMicrotask(() => this._activateControl());\n  }\n\n  protected onSelectControl(control: ZSelectControl): void {\n    this._selectControl = control;\n    queueMicrotask(() => this._activateControl());\n  }\n\n  protected onCalendarControl(control: ZCalendarControl): void {\n    this._calendarControl = control;\n    queueMicrotask(() => this._activateControl());\n  }\n\n  protected onSelectChange(value: unknown): void {\n    if (this.zConfig().selectMode !== 'single') {\n      this.draftValue.set(value);\n      return;\n    }\n\n    this._commit(value);\n  }\n\n  protected onCalendarChange(value: ZCalendarValue): void {\n    if (this._ignoreNextCalendarChange) {\n      this._ignoreNextCalendarChange = false;\n      return;\n    }\n\n    this._commit(value);\n  }\n\n  protected commitDraft(): void {\n    this._commit(this.draftValue());\n  }\n\n  protected onEditorKeydown(event: KeyboardEvent): void {\n    if (event.key !== 'Escape') {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n    if (this._finished) {\n      return;\n    }\n\n    this._finished = true;\n    this.zCancel.emit();\n  }\n\n  private _commit(value: unknown): void {\n    if (this._finished) {\n      return;\n    }\n\n    this._finished = true;\n    this.zCommit.emit(value);\n  }\n\n  private _activateControl(): void {\n    if (this._activated) {\n      return;\n    }\n\n    const { type } = this.zConfig();\n    if (type === 'select') {\n      const trigger = this._host.nativeElement.querySelector<HTMLElement>('.z-select-trigger');\n      if (!this._selectControl || !trigger) {\n        return;\n      }\n\n      this._activated = true;\n      this._selectControl?.focus();\n      trigger.click();\n      return;\n    }\n\n    if (type === 'date') {\n      if (!this._calendarControl) {\n        return;\n      }\n\n      this._activated = true;\n      this._ignoreNextCalendarChange = true;\n      this._calendarControl?.open();\n      requestAnimationFrame(() => this._focusCalendarInput());\n      return;\n    }\n\n    if (!this._inputControl) {\n      return;\n    }\n\n    this._activated = true;\n    this._inputControl?.focus();\n  }\n\n  private _focusCalendarInput(): void {\n    const input = this._host.nativeElement.querySelector<HTMLInputElement>('.z-calendar-wrapper input');\n    input?.focus();\n  }\n}\n","/**\n * Z-Table Utility Functions\n *\n * Pure helper functions used by the z-table component and its pipes.\n * Organized into sections:\n * - Column visibility filtering\n * - Config type guards & extractors (header/body/footer)\n * - Icon syntax parsing ([icon:name|size:16|class:cls])\n * - Column lookup\n * - Span calculation (rowSpan/colSpan for header, body, footer)\n * - Render-skip logic (which cells to hide when another cell spans over them)\n * - Column config -> TanStack ColumnDef conversion\n * - Generic utility helpers\n */\nimport { type Header, type ColumnDef, type CellContext, type Cell, type Row } from '@tanstack/angular-table';\nimport {\n  type ZTableColumnConfig,\n  type ZTableFilterCondition,\n  type ZTableHeaderContent,\n  type ZTableCellContent,\n  type ZTableIconPart,\n  type ZTableHeaderColumnConfig,\n  type ZTableBodyColumnConfig,\n  type ZTableFooterColumnConfig,\n  type ZTableFooterConfig,\n  type ZTableCellType,\n  type ZTableDragData,\n  type ZTableDragEntity,\n  type ZTableDropEdge,\n  type ZTableColumnType,\n  Z_DEFAULT_COLUMN_MIN_SIZE,\n} from './z-table.types';\n\n// ─── Column Visibility Pre-filter ────────────────────────────────────────────\n\n/**\n * Recursively filters columns based on their `visible` property.\n * This runs BEFORE TanStack table creation — columns excluded here\n * won't generate ColumnDef entries at all (unlike columnVisibility state\n * which hides columns but keeps them in the column model).\n */\nexport const filterVisibleColumns = <T>(columns: ZTableColumnConfig<T>[]): ZTableColumnConfig<T>[] =>\n  columns\n    .filter(col => {\n      const { visible } = col;\n      if (visible === undefined) {\n        return true;\n      }\n      return typeof visible === 'function' ? visible() : visible;\n    })\n    .map(col => {\n      if (col.columns && col.columns.length > 0) {\n        return {\n          ...col,\n          columns: filterVisibleColumns(col.columns),\n        };\n      }\n      return col;\n    });\n\n// ─── Config Type Guards ──────────────────────────────────────────────────────\n\n/**\n * Checks if a config value is a plain object (config struct) vs a primitive/template.\n * Used to distinguish shorthand content (string/TemplateRef) from full config objects\n * like ZTableHeaderColumnConfig, ZTableBodyColumnConfig, etc.\n */\nconst isObjectConfig = (config: unknown): boolean => {\n  if (!config || typeof config !== 'object') {\n    return false;\n  }\n  return config.constructor === Object;\n};\n\n/** Type guard: is this a full header config object (not just content shorthand)? */\nexport const isHeaderConfig = <T>(\n  config: ZTableHeaderColumnConfig<T> | ZTableHeaderContent<T> | undefined\n): config is ZTableHeaderColumnConfig<T> => isObjectConfig(config);\n\n/** Type guard: is this a full body config object (not just content shorthand)? */\nexport const isBodyConfig = <T>(\n  config: ZTableBodyColumnConfig<T> | ZTableCellContent<T> | undefined\n): config is ZTableBodyColumnConfig<T> => isObjectConfig(config);\n\n/** Type guard: is this a full footer config object (not just content shorthand)? */\nexport const isFooterConfig = <T>(config: ZTableFooterConfig<T> | undefined): config is ZTableFooterColumnConfig<T> =>\n  isObjectConfig(config);\n\n// ─── Config Extractors ───────────────────────────────────────────────────────\n\n/**\n * Internal helper that normalizes header/footer config into a consistent shape.\n * Handles both shorthand (just content) and full config objects.\n */\nconst getHeaderOrFooterConfigInternal = <T>(\n  col: ZTableColumnConfig<T> | undefined,\n  type: 'header' | 'footer',\n  footerRowIndex = 0\n) => {\n  const empty = {\n    content: undefined as ZTableHeaderContent<T> | undefined,\n    class: undefined as string | undefined,\n    style: undefined as Record<string, string> | undefined,\n    align: undefined as string | undefined,\n    tooltip: undefined as string | object | undefined,\n    rowSpan: undefined as number | undefined,\n    colSpan: undefined as number | undefined,\n    contentClass: undefined as string | ((info: unknown) => string) | undefined,\n    contentStyle: undefined as Record<string, string> | ((info: unknown) => Record<string, string>) | undefined,\n  };\n\n  if (!col) {\n    return empty;\n  }\n\n  const footer = Array.isArray(col.footer) ? col.footer[footerRowIndex] : col.footer;\n  const config = type === 'header' ? col.header : footer;\n  const isConfigFn = type === 'header' ? isHeaderConfig : isFooterConfig;\n\n  if (!isConfigFn(config)) {\n    return { ...empty, content: config as ZTableHeaderContent<T> | undefined };\n  }\n\n  const typedConfig = config as ZTableHeaderColumnConfig<T> | ZTableFooterColumnConfig<T>;\n\n  return {\n    content: typedConfig.content,\n    class: typedConfig.class,\n    style: typedConfig.style,\n    align: typedConfig.align,\n    tooltip: typedConfig.tooltip,\n    rowSpan: typedConfig.rowSpan,\n    colSpan: typedConfig.colSpan,\n    contentClass: typedConfig.contentClass,\n    contentStyle: typedConfig.contentStyle,\n  };\n};\n\n/** Extract and normalize header config from a column definition */\nexport const getHeaderConfig = <T>(col: ZTableColumnConfig<T> | undefined) =>\n  getHeaderOrFooterConfigInternal(col, 'header');\n\n/**\n * Extract and normalize body config from a column definition.\n * Resolves dynamic properties (class, style, rowSpan, etc.) when CellContext is provided.\n */\nexport const getBodyConfig = <T>(col: ZTableColumnConfig<T> | undefined, ctx?: CellContext<T, unknown>) => {\n  const empty = {\n    content: undefined as ZTableCellContent<T> | undefined,\n    type: 'default' as const,\n    tagColor: 'primary' as const,\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    popover: 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  const popover = typeof body.popover === 'function' && ctx ? body.popover(ctx) : body.popover;\n  const tagColor = typeof body.tagColor === 'function' && ctx ? body.tagColor(ctx) : body.tagColor;\n\n  return {\n    content: body.content,\n    type: body.type || 'default',\n    tagColor: tagColor || 'primary',\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    popover,\n  };\n};\n\nexport const getFooterConfig = <T>(col: ZTableColumnConfig<T> | undefined, footerRowIndex = 0) =>\n  getHeaderOrFooterConfigInternal(col, 'footer', footerRowIndex);\n\n// ─── Shortcut Accessors ──────────────────────────────────────────────────────\n// These convenience functions extract a single property from the relevant config.\n\nexport const getHeaderContent = <T>(col: ZTableColumnConfig<T> | undefined) => getHeaderConfig(col).content;\nexport const getBodyContent = <T>(col: ZTableColumnConfig<T> | undefined) => {\n  if (!col?.body) {\n    return undefined;\n  }\n  return isBodyConfig(col.body) ? col.body.content : col.body;\n};\nexport const getFooterContent = <T>(col: ZTableColumnConfig<T> | undefined, footerRowIndex = 0) =>\n  getFooterConfig(col, footerRowIndex).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, footerRowIndex = 0) =>\n  getFooterConfig(col, footerRowIndex).rowSpan;\nexport const getFooterColSpan = <T>(col: ZTableColumnConfig<T> | undefined, footerRowIndex = 0) =>\n  getFooterConfig(col, footerRowIndex).colSpan;\n\n// ─── Icon Syntax Parsing ─────────────────────────────────────────────────────\n\n/**\n * Parses inline icon syntax: `\"Total [icon:lucideTrendingUp|size:16|class:text-green] Revenue\"`\n * Returns an array of text and icon segments for rendering by ZTableIconTextComponent.\n */\nexport function parseIconString(content: string): ZTableIconPart[] {\n  if (!content || typeof content !== 'string') {\n    return [{ type: 'text', value: content || '' }];\n  }\n\n  const parts: ZTableIconPart[] = [];\n  const iconRegex = /\\[icon:([^\\]]+)\\]/g;\n  let lastIndex = 0;\n  let match: RegExpExecArray | null;\n\n  while ((match = iconRegex.exec(content)) !== null) {\n    if (match.index > lastIndex) {\n      const textPart = content.slice(lastIndex, match.index);\n      if (textPart) {\n        parts.push({ type: 'text', value: textPart });\n      }\n    }\n\n    const iconContent = match[1];\n    const attrs = iconContent.split('|');\n    const iconName = attrs[0];\n    const iconPart: ZTableIconPart = { type: 'icon', value: iconName };\n\n    for (let i = 1; i < attrs.length; i++) {\n      const [key, val] = attrs[i].split(':');\n      if (key === 'size') {\n        iconPart.size = parseInt(val, 10);\n      }\n      if (key === 'class') {\n        iconPart.class = val;\n      }\n      if (key === 'strokeWidth') {\n        iconPart.strokeWidth = parseFloat(val);\n      }\n    }\n\n    parts.push(iconPart);\n    lastIndex = match.index + match[0].length;\n  }\n\n  if (lastIndex < content.length) {\n    parts.push({ type: 'text', value: content.slice(lastIndex) });\n  }\n\n  return parts.length > 0 ? parts : [{ type: 'text', value: content }];\n}\n\n/** Removes all `[icon:...]` syntax from a string, returning plain text */\nexport function stripIconSyntax(content: string): string {\n  if (!content || typeof content !== 'string') {\n    return content || '';\n  }\n  return content.replace(/\\[icon:[^\\]]+\\]/g, '').trim();\n}\n\n/** Returns true if the content string contains at least one `[icon:...]` segment */\nexport function hasIconSyntax(content: unknown): boolean {\n  if (!content || typeof content !== 'string') {\n    return false;\n  }\n  return /\\[icon:[^\\]]+\\]/.test(content);\n}\n\n// ─── Column Lookup ───────────────────────────────────────────────────────────\n\n/** Recursively search for a column config by ID within a (possibly nested) column array */\nexport const findColumnConfig = <T>(\n  columnId: string,\n  columns: ZTableColumnConfig<T>[]\n): ZTableColumnConfig<T> | undefined => {\n  for (const col of columns) {\n    if (col.id === columnId) {\n      return col;\n    }\n    if (col.columns) {\n      const found = findColumnConfig(columnId, col.columns);\n      if (found) {\n        return found;\n      }\n    }\n  }\n  return undefined;\n};\n\nexport const getZTableColumnType = <T>(\n  column: ZTableColumnConfig<T> | undefined,\n  columnId?: string\n): ZTableColumnType => {\n  if (column?.type) {\n    return column.type;\n  }\n\n  if (column && isBodyConfig(column.body) && column.body.actions) {\n    return 'actions';\n  }\n\n  const id = column?.id ?? columnId;\n  if (id === 'select') {\n    return 'select';\n  }\n\n  if (id === 'expand') {\n    return 'expand';\n  }\n\n  if (id === 'rowDrag') {\n    return 'rowDrag';\n  }\n\n  if (id === 'actionRowPin' || id === 'actions') {\n    return 'rowPin';\n  }\n\n  return 'data';\n};\n\nexport const getZTableColumnTypeById = <T>(columnId: string, columns: ZTableColumnConfig<T>[]): ZTableColumnType =>\n  getZTableColumnType(findColumnConfig(columnId, columns), columnId);\n\nexport const isZTableColumnType = <T>(column: ZTableColumnConfig<T> | undefined, type: ZTableColumnType): boolean =>\n  getZTableColumnType(column) === type;\n\nexport const isZTableColumnTypeById = <T>(\n  columnId: string,\n  columns: ZTableColumnConfig<T>[],\n  type: ZTableColumnType\n): boolean => getZTableColumnTypeById(columnId, columns) === type;\n\n// ─── Span Calculation ────────────────────────────────────────────────────────\n\n/**\n * Walk down a chain of placeholder headers to find the deepest real header.\n * Used to calculate how many rows a header cell should span in multi-level headers.\n * Returns null if the header is already the deepest (no spanning needed).\n */\nexport const deepestHeader = <D, V>(header: Header<D, V>): Header<D, V> | null => {\n  let last = header;\n  while (true) {\n    // Follow single-child placeholder chains (placeholders with colSpan=1)\n    const next = last.isPlaceholder && last.colSpan === 1 && last.subHeaders.length === 1 ? last.subHeaders[0] : null;\n    if (!next) {\n      return last === header ? null : last;\n    }\n\n    last = next;\n  }\n};\n\n/** Calculate rowSpan for a TanStack header based on its depth vs deepest sub-header */\nexport const tableHeaderRowSpan = <D, V>(header: Header<D, V>): number | null => {\n  const deepest = deepestHeader(header);\n  const rowSpan = (deepest ? deepest.depth - header.depth : 0) + 1;\n  // If the header is more than 1 level above its column's natural depth, it's been\n  // consumed by a parent's rowSpan — return null to skip rendering\n  const above = header.depth - header.column.depth;\n  return above > 1 ? null : rowSpan;\n};\n\nconst getCellFromRow = <T>(row: Row<T>, columnId: string): Cell<T, unknown> | undefined =>\n  row.getAllCells().find(rowCell => rowCell.column.id === columnId);\n\nconst isSameCellValue = <T>(sourceCell: Cell<T, unknown>, targetRow: Row<T>): boolean =>\n  Object.is(targetRow.getValue(sourceCell.column.id), sourceCell.getValue());\n\nconst calculateDynamicCellRowSpan = <T>(\n  cell: Cell<T, unknown>,\n  rowSpan: number,\n  currentRowIndex: number,\n  allRows: Row<T>[]\n): number => {\n  let actualRowSpan = 1;\n  const maxRowIndex = Math.min(allRows.length - 1, currentRowIndex + rowSpan - 1);\n\n  for (let i = currentRowIndex + 1; i <= maxRowIndex; i++) {\n    if (!isSameCellValue(cell, allRows[i])) {\n      break;\n    }\n\n    actualRowSpan++;\n  }\n\n  return actualRowSpan;\n};\n\nconst isCoveredByPreviousDynamicRowSpan = <T>(\n  cell: Cell<T, unknown>,\n  currentRowIndex: number,\n  allRows: Row<T>[],\n  rowSpanValue: (ctx: CellContext<T, unknown>) => number\n): boolean => {\n  for (let i = currentRowIndex - 1; i >= 0; i--) {\n    if (!Object.is(allRows[i].getValue(cell.column.id), cell.getValue())) {\n      return false;\n    }\n\n    const previousCell = getCellFromRow(allRows[i], cell.column.id);\n    if (!previousCell) {\n      continue;\n    }\n\n    const previousRowSpan = rowSpanValue(previousCell.getContext());\n    if (previousRowSpan <= 0) {\n      continue;\n    }\n\n    const actualPreviousRowSpan = calculateDynamicCellRowSpan(previousCell, previousRowSpan, i, allRows);\n    if (i + actualPreviousRowSpan > currentRowIndex) {\n      return true;\n    }\n  }\n\n  return false;\n};\n\n/**\n * Calculate rowSpan for body cells with static or dynamic rowSpan config.\n * For static rowSpan: uses modular arithmetic (filteredIndex % rowSpan === 0)\n * to determine which rows get the merged cell vs which are skipped.\n */\n\nexport const calculateCellRowSpan = <T>(\n  cell: Cell<T, unknown>,\n  columnConfig: ZTableColumnConfig<T> | undefined,\n  allRows: Row<T>[],\n  currentRowIndex?: number\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    if (rowSpan <= 0) {\n      return null;\n    }\n\n    const resolvedRowIndex = currentRowIndex ?? allRows.findIndex(r => r.id === cell.row.id);\n    if (resolvedRowIndex === -1) {\n      return rowSpan > 1 ? rowSpan : null;\n    }\n\n    const actualRowSpan = calculateDynamicCellRowSpan(cell, rowSpan, resolvedRowIndex, allRows);\n    return actualRowSpan > 1 ? actualRowSpan : null;\n  }\n\n  if (rowSpanValue > 1) {\n    const currentRowId = cell.row.id;\n    const filteredIndex = currentRowIndex ?? allRows.findIndex(r => r.id === currentRowId);\n\n    if (filteredIndex === -1) {\n      return null;\n    }\n\n    if (filteredIndex % rowSpanValue !== 0) {\n      return null;\n    }\n\n    const remainingRows = allRows.length - filteredIndex;\n    const actualRowSpan = Math.min(rowSpanValue, remainingRows);\n\n    return actualRowSpan > 1 ? actualRowSpan : null;\n  }\n\n  return null;\n};\n\nexport const calculateCellColSpan = <T>(\n  cell: Cell<T, unknown>,\n  columnConfig: ZTableColumnConfig<T> | undefined\n): number | null => {\n  if (!columnConfig?.body || !isBodyConfig(columnConfig.body)) {\n    return null;\n  }\n  const colSpanValue = columnConfig.body.colSpan;\n  if (!colSpanValue) {\n    return null;\n  }\n  const colSpan = typeof colSpanValue === 'function' ? colSpanValue(cell.getContext()) : colSpanValue;\n  return colSpan > 1 ? colSpan : null;\n};\n\nexport const calculateHeaderRowSpan = <T>(\n  header: Header<T, unknown>,\n  columnConfig: ZTableColumnConfig<T> | undefined,\n  columns?: ZTableColumnConfig<T>[]\n): number | null => {\n  const configRowSpan = getHeaderRowSpan(columnConfig);\n  if (configRowSpan !== undefined && configRowSpan !== null) {\n    return configRowSpan;\n  }\n\n  if (columns && header.column.parent) {\n    const parentConfig = findColumnConfig(header.column.parent.id, columns);\n    const parentRowSpan = getHeaderRowSpan(parentConfig);\n    if (parentRowSpan && parentRowSpan >= 2) {\n      return null;\n    }\n  }\n\n  const deepest = deepestHeader(header);\n  const rowSpan = (deepest ? deepest.depth - header.depth : 0) + 1;\n  const above = header.depth - header.column.depth;\n  return above > 1 ? null : rowSpan;\n};\n\nexport const calculateHeaderColSpan = <T>(\n  header: Header<T, unknown>,\n  columnConfig: ZTableColumnConfig<T> | undefined\n): number | null => {\n  const configColSpan = getHeaderColSpan(columnConfig);\n  const isPinned = header.column.getIsPinned();\n\n  if (isPinned === 'left' && configColSpan !== undefined && configColSpan !== null) {\n    const allHeaders = header.headerGroup.headers;\n    const currentIndex = allHeaders.findIndex(h => h.id === header.id);\n\n    if (currentIndex === -1) {\n      return configColSpan;\n    }\n\n    let effectiveColSpan = 0;\n    for (let i = 0; i < configColSpan && currentIndex + i < allHeaders.length; i++) {\n      const targetHeader = allHeaders[currentIndex + i];\n      const targetLeafHeaders = targetHeader.getLeafHeaders();\n      const allLeafsPinned = targetLeafHeaders.every(lh => lh.column.getIsPinned() === 'left');\n      if (allLeafsPinned) {\n        effectiveColSpan++;\n      }\n      if (!allLeafsPinned) {\n        break;\n      }\n    }\n\n    return effectiveColSpan > 1 ? effectiveColSpan : null;\n  }\n\n  if (configColSpan !== undefined && configColSpan !== null) {\n    return configColSpan;\n  }\n\n  return header.colSpan > 1 ? header.colSpan : null;\n};\n\nexport const calculateFooterRowSpan = <T>(\n  header: Header<T, unknown>,\n  columnConfig: ZTableColumnConfig<T> | undefined,\n  footerRowIndex = 0\n): number | null => {\n  const configRowSpan = getFooterRowSpan(columnConfig, footerRowIndex);\n  if (configRowSpan !== undefined && configRowSpan !== null) {\n    return configRowSpan;\n  }\n\n  const footerContent = getFooterContent(columnConfig, footerRowIndex);\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  footerRowIndex = 0\n): number | null => {\n  const configColSpan = getFooterColSpan(columnConfig, footerRowIndex);\n\n  if (configColSpan !== undefined && configColSpan !== null) {\n    return configColSpan;\n  }\n\n  return header.colSpan > 1 ? header.colSpan : null;\n};\n\n// ─── Render-Skip Logic ───────────────────────────────────────────────────────\n//\n// These functions determine which cells should NOT be rendered because they\n// are \"covered\" by a neighboring cell's rowSpan or colSpan. This prevents\n// duplicate DOM elements in merged cell scenarios.\n\n/**\n * Checks if a body cell should be rendered based on rowSpan rules.\n * Returns false for cells that fall within another cell's rowSpan range.\n */\nexport const shouldCellRenderUtil = <T>(\n  cell: Cell<T, unknown>,\n  columnConfig: ZTableColumnConfig<T> | undefined,\n  allRows: Row<T>[],\n  currentRowIndex?: number\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    if (rowSpan > 0) {\n      return true;\n    }\n\n    if (rowSpan < 0) {\n      return true;\n    }\n\n    const resolvedRowIndex = currentRowIndex ?? allRows.findIndex(r => r.id === cell.row.id);\n    if (resolvedRowIndex === -1) {\n      return true;\n    }\n\n    return !isCoveredByPreviousDynamicRowSpan(cell, resolvedRowIndex, allRows, rowSpanValue);\n  }\n\n  if (rowSpanValue > 1) {\n    const currentRowId = cell.row.id;\n    const filteredIndex = allRows.findIndex(r => r.id === currentRowId);\n\n    if (filteredIndex === -1) {\n      return true;\n    }\n\n    return filteredIndex % rowSpanValue === 0;\n  }\n\n  return true;\n};\n\n/**\n * Shared logic for determining if a header or footer cell should render.\n * A cell should NOT render if a previous cell in the same row has a colSpan\n * that covers this cell's position. Handles pinned column edge cases.\n */\nconst shouldHeaderOrFooterRender = <T>(\n  header: Header<T, unknown>,\n  allHeaders: Header<T, unknown>[],\n  columns: ZTableColumnConfig<T>[],\n  type: ZTableCellType,\n  footerRowIndex = 0\n): boolean => {\n  const currentIndex = allHeaders.findIndex(h => h.id === header.id);\n  if (currentIndex <= 0) {\n    return true;\n  }\n\n  const getConfigColSpanFn = type === 'header' ? getHeaderColSpan : getFooterColSpan;\n\n  for (let i = 0; i < currentIndex; i++) {\n    const prevHeader = allHeaders[i];\n    const prevConfig = findColumnConfig(prevHeader.column.id, columns);\n    const configColSpan =\n      type === 'footer' ? getFooterColSpan(prevConfig, footerRowIndex) : getConfigColSpanFn(prevConfig);\n\n    if (!configColSpan || configColSpan <= 1) {\n      continue;\n    }\n\n    const isPinned = prevHeader.column.getIsPinned();\n    let effectiveColSpan = configColSpan;\n\n    if (type === 'header' && isPinned === 'left') {\n      const headersInGroup = prevHeader.headerGroup.headers;\n      const prevIdx = headersInGroup.findIndex(h => h.id === prevHeader.id);\n\n      if (prevIdx !== -1) {\n        effectiveColSpan = 0;\n        for (let j = 0; j < configColSpan && prevIdx + j < headersInGroup.length; j++) {\n          const targetHeader = headersInGroup[prevIdx + j];\n          const targetLeafHeaders = targetHeader.getLeafHeaders();\n          const allLeafsPinned = targetLeafHeaders.every(lh => lh.column.getIsPinned() === 'left');\n          if (allLeafsPinned) {\n            effectiveColSpan++;\n          }\n          if (!allLeafsPinned) {\n            break;\n          }\n        }\n      }\n    }\n\n    if (effectiveColSpan > 1 && i + effectiveColSpan > currentIndex) {\n      return false;\n    }\n  }\n\n  return true;\n};\n\nexport const shouldBodyCellRenderColSpan = <T>(\n  cell: Cell<T, unknown>,\n  allCells: Cell<T, unknown>[],\n  columns: ZTableColumnConfig<T>[]\n): boolean => {\n  const currentIndex = allCells.findIndex(c => c.id === cell.id);\n  if (currentIndex <= 0) {\n    return true;\n  }\n\n  for (let i = 0; i < currentIndex; i++) {\n    const prevCell = allCells[i];\n    const prevConfig = findColumnConfig(prevCell.column.id, columns);\n    const prevColSpan = getBodyColSpan(prevConfig, prevCell.getContext());\n\n    if (prevColSpan && prevColSpan > 1 && i + prevColSpan > currentIndex) {\n      return false;\n    }\n  }\n\n  return true;\n};\n\nexport const shouldFooterRender = <T>(\n  header: Header<T, unknown>,\n  allHeaders: Header<T, unknown>[],\n  columns: ZTableColumnConfig<T>[],\n  footerRowIndex = 0\n): boolean => shouldHeaderOrFooterRender(header, allHeaders, columns, 'footer', footerRowIndex);\n\nexport const shouldHeaderRender = <T>(\n  header: Header<T, unknown>,\n  allHeaders: Header<T, unknown>[],\n  columns: ZTableColumnConfig<T>[]\n): boolean => shouldHeaderOrFooterRender(header, allHeaders, columns, 'header');\n\n// ─── Column Config → TanStack ColumnDef Conversion ──────────────────────────\n\n/**\n * Converts the consumer-facing ZTableColumnConfig into a TanStack ColumnDef.\n * This is the bridge between the z-table API and TanStack Table internals.\n *\n * Handles:\n * - Accessor mapping (accessorKey / accessorFn)\n * - Header/body/footer content resolution\n * - Sort and filter function wiring (local vs server mode)\n * - Built-in filter functions for each filter type\n * - Recursive nested column conversion\n */\nexport function columnConfigToColumnDef<T>(config: ZTableColumnConfig<T>): ColumnDef<T> {\n  const sortConfig = typeof config.sort === 'boolean' ? (config.sort ? { enabled: true } : undefined) : config.sort;\n  const filterConfig =\n    typeof config.filter === 'boolean' ? (config.filter ? { enabled: true } : undefined) : config.filter;\n\n  const resolveHeaderOrFooter = (content: unknown): ((info: unknown) => unknown) | string | undefined => {\n    if (!content) {\n      return undefined;\n    }\n    if (typeof content === 'string' || typeof content === 'number') {\n      return String(content);\n    }\n    if (typeof content === 'function') {\n      return content as (info: unknown) => unknown;\n    }\n    return undefined;\n  };\n\n  // Parse string width (e.g. '70px') to a number to serve as default size for TanStack\n  let { size } = config;\n  if (size === undefined && config.width) {\n    const widthStr = String(config.width).trim();\n    if (!widthStr.endsWith('%')) {\n      const parsed = parseInt(widthStr, 10);\n      if (!isNaN(parsed)) {\n        size = parsed;\n      }\n    }\n  }\n\n  const columnDef = {\n    id: config.id,\n    size: 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    filterValueType: filterConfig?.valueType,\n    filterUi: filterConfig?.ui,\n    filterAdvancedType: filterConfig?.advancedType ?? filterConfig?.filterType ?? filterConfig?.type,\n    filterLabel: filterConfig?.label,\n    filterOptions: filterConfig?.options ?? filterConfig?.filterOptions,\n    filterSelectConfig: filterConfig?.selectConfig,\n    filterOptionSource: filterConfig?.optionSource,\n  } as ColumnDef<T> & {\n    filterAdvancedType?: string;\n    filterLabel?: string;\n    filterOptionSource?: string;\n    filterOptions?: unknown[];\n    filterSelectConfig?: unknown;\n    filterUi?: string;\n    filterValueType?: string;\n  };\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  const needsValueAccessor =\n    (sortConfig?.enabled || filterConfig?.enabled) && !config.accessorKey && !config.accessorFn;\n  if (needsValueAccessor) {\n    (columnDef as ColumnDef<T> & { accessorFn: (row: T) => unknown }).accessorFn = (row: T) => {\n      if (!row || typeof row !== 'object') {\n        return undefined;\n      }\n\n      return (row as Record<string, unknown>)[config.id];\n    };\n  }\n\n  columnDef.header = resolveHeaderOrFooter(getHeaderContent(config));\n  const bodyContent = getBodyContent(config);\n  if (typeof bodyContent === 'string' || typeof bodyContent === 'number') {\n    columnDef.cell = () => bodyContent as string;\n  }\n\n  if (typeof bodyContent === 'function') {\n    columnDef.cell = bodyContent as (info: CellContext<T, unknown>) => unknown;\n  }\n\n  columnDef.footer = resolveHeaderOrFooter(getFooterContent(config));\n\n  const isLocalFilterMode = !filterConfig?.mode || filterConfig.mode === 'local';\n  const isLocalSortMode = !sortConfig?.mode || sortConfig.mode === 'local';\n\n  if (isLocalSortMode && sortConfig?.sortFn) {\n    columnDef.sortingFn = sortConfig.sortFn as ColumnDef<T>['sortingFn'];\n  }\n\n  if (!isLocalSortMode) {\n    columnDef.sortingFn = () => 0;\n  }\n\n  if (isLocalFilterMode && filterConfig?.filterFn) {\n    columnDef.filterFn = filterConfig.filterFn as ColumnDef<T>['filterFn'];\n  }\n\n  if (!isLocalFilterMode) {\n    columnDef.filterFn = () => true;\n  }\n\n  if (isLocalFilterMode && !filterConfig?.filterFn && filterConfig?.enabled) {\n    columnDef.filterFn = (row, columnId, filterValue) => {\n      if (!filterValue) {\n        return true;\n      }\n\n      const filters = Array.isArray(filterValue) ? filterValue : [filterValue];\n      const hasStructuredFilters = filters.some(item => item && typeof item === 'object' && 'operator' in item);\n      if (!hasStructuredFilters) {\n        const cellValue = row.getValue(columnId);\n        const legacyType = filterConfig?.advancedType ?? filterConfig?.filterType ?? filterConfig?.type;\n        const legacyResult = evaluateLegacyTableFilter(cellValue, filterValue, legacyType);\n        if (legacyResult !== null) {\n          return legacyResult;\n        }\n\n        if (cellValue === null || cellValue === undefined) {\n          return false;\n        }\n        return String(cellValue).toLowerCase().includes(String(filterValue).toLowerCase());\n      }\n\n      const cellValue = row.getValue(columnId);\n      const results = filters.map(item => {\n        if (!item || typeof item !== 'object' || !('operator' in item)) {\n          return true;\n        }\n\n        const { operator, value } = item as ZTableFilterCondition;\n        const isEmptyValue = cellValue === '' || cellValue === null || cellValue === undefined;\n        if (operator === 'empty') {\n          return isEmptyValue;\n        }\n\n        if (operator === 'notEmpty') {\n          return !isEmptyValue;\n        }\n\n        if (value === null || value === undefined || value === '') {\n          return true;\n        }\n\n        const cellText = String(cellValue).toLowerCase();\n        const filterText = String(value).toLowerCase();\n\n        if (operator === 'contains') {\n          return cellText.includes(filterText);\n        }\n\n        if (operator === 'notContains') {\n          return !cellText.includes(filterText);\n        }\n\n        if (operator === 'startsWith') {\n          return cellText.startsWith(filterText);\n        }\n\n        if (operator === 'endsWith') {\n          return cellText.endsWith(filterText);\n        }\n\n        if (operator === 'equals') {\n          return cellText === filterText;\n        }\n\n        if (operator === 'notEquals') {\n          return cellText !== filterText;\n        }\n\n        const cellNumber = typeof cellValue === 'number' ? cellValue : Number(cellValue);\n        const filterNumber = typeof value === 'number' ? value : Number(value);\n        if (isNaN(cellNumber) || isNaN(filterNumber)) {\n          return false;\n        }\n\n        if (operator === 'greaterThan') {\n          return cellNumber > filterNumber;\n        }\n\n        if (operator === 'greaterThanOrEqual') {\n          return cellNumber >= filterNumber;\n        }\n\n        if (operator === 'lessThan') {\n          return cellNumber < filterNumber;\n        }\n\n        return cellNumber <= filterNumber;\n      });\n\n      return results.reduce((accumulator, result, index) => {\n        if (index === 0) {\n          return result;\n        }\n\n        const condition = filters[index] as ZTableFilterCondition;\n        if (condition.joinWithPrev === 'or') {\n          return accumulator || result;\n        }\n\n        return accumulator && result;\n      }, true);\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\nfunction evaluateLegacyTableFilter(cellValue: unknown, filterValue: unknown, filterType?: string): boolean | null {\n  if (!filterType) {\n    return null;\n  }\n\n  if (filterType === 'range') {\n    if (!Array.isArray(filterValue)) {\n      return false;\n    }\n\n    const [min, max] = filterValue;\n    const current = typeof cellValue === 'number' ? cellValue : Number(cellValue);\n    if (isNaN(current)) {\n      return false;\n    }\n\n    const hasMin = min !== null && min !== undefined && min !== '';\n    const hasMax = max !== null && max !== undefined && max !== '';\n    const minValue = hasMin ? Number(min) : null;\n    const maxValue = hasMax ? Number(max) : null;\n\n    if (minValue !== null && current < minValue) {\n      return false;\n    }\n\n    if (maxValue !== null && current > maxValue) {\n      return false;\n    }\n\n    return hasMin || hasMax;\n  }\n\n  if (filterType === 'select') {\n    if (filterValue === null || filterValue === undefined || filterValue === '') {\n      return true;\n    }\n\n    return String(cellValue ?? '') === String(filterValue);\n  }\n\n  if (filterType === 'multi-select' || filterType === 'tags') {\n    if (!Array.isArray(filterValue) || filterValue.length === 0) {\n      return true;\n    }\n\n    const expectedValues = filterValue.map(value => String(value));\n    if (Array.isArray(cellValue)) {\n      return cellValue.map(value => String(value)).some(value => expectedValues.includes(value));\n    }\n\n    return expectedValues.includes(String(cellValue ?? ''));\n  }\n\n  if (filterType === 'date') {\n    const currentDate = toDateValue(cellValue);\n    const selectedDate = toDateValue(filterValue);\n    if (!currentDate || !selectedDate) {\n      return false;\n    }\n\n    return isSameDay(currentDate, selectedDate);\n  }\n\n  if (filterType === 'date-range') {\n    const currentDate = toDateValue(cellValue);\n    if (!currentDate || !filterValue || typeof filterValue !== 'object') {\n      return false;\n    }\n\n    const { start, end } = filterValue as { end?: unknown; start?: unknown };\n    const startDate = toDateValue(start);\n    const endDate = toDateValue(end);\n    if (startDate && currentDate < startOfDay(startDate)) {\n      return false;\n    }\n\n    if (endDate && currentDate > endOfDay(endDate)) {\n      return false;\n    }\n\n    return !!(startDate || endDate);\n  }\n\n  if (filterType === 'time') {\n    const currentDate = toDateValue(cellValue);\n    const selectedDate = toDateValue(filterValue);\n    if (!currentDate || !selectedDate) {\n      return false;\n    }\n\n    return (\n      currentDate.getHours() === selectedDate.getHours() &&\n      currentDate.getMinutes() === selectedDate.getMinutes() &&\n      currentDate.getSeconds() === selectedDate.getSeconds()\n    );\n  }\n\n  return null;\n}\n\nfunction toDateValue(value: unknown): Date | null {\n  if (value instanceof Date) {\n    return isNaN(value.getTime()) ? null : value;\n  }\n\n  if (typeof value === 'number' || typeof value === 'string') {\n    const parsed = new Date(value);\n    return isNaN(parsed.getTime()) ? null : parsed;\n  }\n\n  return null;\n}\n\nfunction isSameDay(left: Date, right: Date): boolean {\n  return (\n    left.getFullYear() === right.getFullYear() &&\n    left.getMonth() === right.getMonth() &&\n    left.getDate() === right.getDate()\n  );\n}\n\nfunction startOfDay(value: Date): Date {\n  return new Date(value.getFullYear(), value.getMonth(), value.getDate(), 0, 0, 0, 0);\n}\n\nfunction endOfDay(value: Date): Date {\n  return new Date(value.getFullYear(), value.getMonth(), value.getDate(), 23, 59, 59, 999);\n}\n\n// ─── Generic Utility Helpers ─────────────────────────────────────────────────\n\n/** Resolve a value that may be static or a function of the row data */\nexport const resolveConfigValue = <T, R>(config: T | ((row: R) => T) | undefined, row: R, defaultValue: T): T => {\n  if (config === undefined) {\n    return defaultValue;\n  }\n\n  return typeof config === 'function' ? (config as (row: R) => T)(row) : config;\n};\n\n/** Pick only defined (non-undefined) keys from an object — used to spread optional virtualizer config */\nexport const pickDefined = <T extends object, K extends keyof T>(obj: T, keys: K[]): Pick<T, K> =>\n  keys.reduce(\n    (acc, key) => {\n      if (obj[key] !== undefined) {\n        acc[key] = obj[key];\n      }\n      return acc;\n    },\n    {} as Pick<T, K>\n  );\n\n// ─── Drag And Drop Helpers ──────────────────────────────────────────────────\n\nexport function getZTableDragData(data: Record<string | symbol, unknown>): ZTableDragData | null {\n  const { tableId, entity, itemId } = data;\n\n  if (typeof tableId !== 'string' || typeof itemId !== 'string' || !isZTableDragEntity(entity)) {\n    return null;\n  }\n\n  return { tableId, entity, itemId };\n}\n\nexport function resolveZTableDropIndex(sourceIndex: number, targetIndex: number, edge: ZTableDropEdge): number {\n  if (sourceIndex === targetIndex) {\n    return sourceIndex;\n  }\n\n  if (edge === 'top') {\n    return targetIndex > sourceIndex ? targetIndex - 1 : targetIndex;\n  }\n\n  return targetIndex > sourceIndex ? targetIndex : targetIndex + 1;\n}\n\nexport function reorderZTableItems<T>(items: T[], sourceIndex: number, targetIndex: number): T[] {\n  const nextItems = [...items];\n  const [movedItem] = nextItems.splice(sourceIndex, 1);\n  nextItems.splice(targetIndex, 0, movedItem);\n  return nextItems;\n}\n\nexport function reorderZTableVisibleItems<T>(\n  data: T[],\n  visibleItems: T[],\n  sourceIndex: number,\n  targetIndex: number\n): T[] {\n  const reorderedVisibleItems = reorderZTableItems(visibleItems, sourceIndex, targetIndex);\n  const visibleItemSet = new Set(visibleItems);\n  let reorderedIndex = 0;\n\n  return data.map(item => {\n    if (!visibleItemSet.has(item)) {\n      return item;\n    }\n\n    const nextItem = reorderedVisibleItems[reorderedIndex];\n    reorderedIndex += 1;\n    return nextItem;\n  });\n}\n\nexport function reorderZTableColumnOrder(\n  fullOrder: string[],\n  sourceId: string,\n  targetId: string,\n  edge: ZTableDropEdge,\n  getPinPosition: (columnId: string) => 'left' | 'right' | false\n): string[] {\n  const fixedLeadingColumns = fullOrder.filter(isFixedLeadingColumn);\n  const pinnedLeft = fullOrder.filter(\n    columnId => !isFixedLeadingColumn(columnId) && getPinPosition(columnId) === 'left'\n  );\n  const pinnedRight = fullOrder.filter(columnId => getPinPosition(columnId) === 'right');\n  const unpinnedColumns = fullOrder.filter(columnId => !isFixedLeadingColumn(columnId) && !getPinPosition(columnId));\n  const sourceIndex = unpinnedColumns.indexOf(sourceId);\n  const targetIndex = unpinnedColumns.indexOf(targetId);\n  if (sourceIndex < 0 || targetIndex < 0) {\n    return fullOrder;\n  }\n\n  const destinationIndex = resolveZTableDropIndex(sourceIndex, targetIndex, edge);\n  if (sourceIndex === destinationIndex) {\n    return fullOrder;\n  }\n\n  const reorderedColumns = reorderZTableItems(unpinnedColumns, sourceIndex, destinationIndex);\n  return [...fixedLeadingColumns, ...pinnedLeft, ...reorderedColumns, ...pinnedRight];\n}\n\nexport function normalizeZTableColumnPinning(\n  pinning: { left?: string[]; right?: string[] },\n  fixedLeftColumnIds: readonly string[],\n  fixedRightColumnIds: readonly string[]\n): { left: string[]; right: string[] } {\n  const left = pinning.left ?? [];\n  const right = pinning.right ?? [];\n  const fixedColumnIds = new Set([...fixedLeftColumnIds, ...fixedRightColumnIds]);\n  const pinnedLeft = left.filter(columnId => !fixedColumnIds.has(columnId));\n  const pinnedRight = right.filter(columnId => !fixedColumnIds.has(columnId));\n\n  return {\n    left: [...fixedLeftColumnIds, ...pinnedLeft],\n    right: [...pinnedRight, ...fixedRightColumnIds],\n  };\n}\n\nfunction isZTableDragEntity(value: unknown): value is ZTableDragEntity {\n  return value === 'row' || value === 'settings-column';\n}\n\nfunction isFixedLeadingColumn(columnId: string): boolean {\n  return columnId === 'expand' || columnId === 'select' || columnId === 'rowDrag';\n}\n","import { NgStyle } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  DestroyRef,\n  effect,\n  inject,\n  input,\n  OnInit,\n  output,\n  signal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { ZAutocompleteComponent, ZAutocompleteOption } from '@shival99/z-ui/components/z-autocomplete';\nimport { ZCalendarComponent } from '@shival99/z-ui/components/z-calendar';\nimport { ZCheckboxComponent } from '@shival99/z-ui/components/z-checkbox';\nimport { ZInputComponent } from '@shival99/z-ui/components/z-input';\nimport { ZSelectComponent, ZSelectOption } from '@shival99/z-ui/components/z-select';\nimport { ZSwitchComponent } from '@shival99/z-ui/components/z-switch';\nimport { debounceTime, distinctUntilChanged, Subject } from 'rxjs';\nimport type {\n  ZTableEditConfig,\n  ZTableEditType,\n  ZTableEditCellChangeEvent,\n  ZResolvedEditConfig,\n} from '../z-table.types';\nimport { resolveConfigValue } from '../z-table.util';\n\n@Component({\n  selector: 'z-table-edit-cell',\n  imports: [\n    FormsModule,\n    ZInputComponent,\n    ZSelectComponent,\n    ZCalendarComponent,\n    ZCheckboxComponent,\n    ZSwitchComponent,\n    ZAutocompleteComponent,\n    NgStyle,\n  ],\n  standalone: true,\n  template: `\n    @switch (cfg().type) {\n      @case ('checkbox') {\n        <div class=\"flex items-center justify-center\">\n          <z-checkbox\n            [zSize]=\"cfg().size\"\n            [class]=\"cfg().class\"\n            [ngStyle]=\"cfg().style\"\n            [zChecked]=\"booleanValue()\"\n            [zDisabled]=\"cfg().disabled || cfg().readonly\"\n            (zChange)=\"onImmediateChange($event)\"\n          />\n        </div>\n      }\n      @case ('toggle') {\n        <div class=\"flex items-center justify-center\">\n          <z-switch\n            [zSize]=\"cfg().size\"\n            [class]=\"cfg().class\"\n            [ngStyle]=\"cfg().style\"\n            [zChecked]=\"booleanValue()\"\n            [zLoading]=\"cfg().loading\"\n            [zDisabled]=\"cfg().disabled || cfg().readonly\"\n            (zChange)=\"onImmediateChange($event)\"\n          />\n        </div>\n      }\n      @case ('number') {\n        <z-input\n          zType=\"number\"\n          [class]=\"cfg().class\"\n          [ngStyle]=\"cfg().style\"\n          [zSize]=\"cfg().size\"\n          [zPlaceholder]=\"cfg().placeholder\"\n          [zMin]=\"editConfig().min\"\n          [zMax]=\"editConfig().max\"\n          [zStep]=\"editConfig().step ?? 1\"\n          [zMask]=\"editConfig().mask || ''\"\n          [zDecimalPlaces]=\"editConfig().decimalPlaces\"\n          [zAllowNegative]=\"editConfig().allowNegative ?? false\"\n          [zThousandSeparator]=\"editConfig().thousandSeparator\"\n          [zDecimalMarker]=\"editConfig().decimalMarker\"\n          [zLoading]=\"cfg().loading\"\n          [zLoadingOutline]=\"true\"\n          [zDisabled]=\"cfg().disabled\"\n          [zReadonly]=\"cfg().readonly\"\n          [ngModel]=\"numericValue()\"\n          (ngModelChange)=\"onValueChange($event)\"\n          (zOnBlur)=\"onInputBlur()\"\n          class=\"w-full\"\n        />\n      }\n      @case ('select') {\n        <z-select\n          [class]=\"cfg().class\"\n          [ngStyle]=\"cfg().style\"\n          [zSize]=\"cfg().size\"\n          [zWrap]=\"false\"\n          [zScrollClose]=\"true\"\n          [zOptions]=\"selectOptions()\"\n          [zAllowClear]=\"cfg().allowClear\"\n          [zLoading]=\"cfg().loading\"\n          [zLoadingOutline]=\"true\"\n          [zDisabled]=\"cfg().disabled\"\n          [zReadonly]=\"cfg().readonly\"\n          [ngModel]=\"value()\"\n          [zPlaceholder]=\"cfg().placeholder\"\n          (ngModelChange)=\"onSelectChange($event)\"\n          class=\"w-full min-w-0\"\n        />\n      }\n      @case ('autocomplete') {\n        <z-autocomplete\n          [class]=\"cfg().class\"\n          [ngStyle]=\"cfg().style\"\n          [zSize]=\"cfg().size\"\n          [zOptions]=\"autocompleteOptions()\"\n          [zType]=\"editConfig().autocompleteType || 'default'\"\n          [zResetOnSelect]=\"editConfig().autocompleteResetOnSelect ?? false\"\n          [zHeightExpand]=\"editConfig().autocompleteHeight || 280\"\n          [zAllowCustomValue]=\"editConfig().autocompleteAllowCustomValue ?? true\"\n          [zLoading]=\"cfg().loading\"\n          [zLoadingOutline]=\"true\"\n          [zDisabled]=\"cfg().disabled\"\n          [zReadonly]=\"cfg().readonly\"\n          [zPlaceholder]=\"cfg().placeholder\"\n          [ngModel]=\"stringValue()\"\n          (zOnCommit)=\"onAutocompleteCommit($event)\"\n          (zOnSelect)=\"onAutocompleteSelect($event)\"\n          (zOnBlur)=\"onInputBlur()\"\n          class=\"w-full\"\n        />\n      }\n      @case ('date') {\n        <z-calendar\n          zMode=\"single\"\n          [class]=\"cfg().class\"\n          [ngStyle]=\"cfg().style\"\n          [zSize]=\"cfg().size\"\n          zAllowClear\n          zValueType=\"date\"\n          [zScrollClose]=\"true\"\n          [zDisabled]=\"cfg().disabled\"\n          [zReadonly]=\"cfg().readonly\"\n          [zLoading]=\"cfg().loading\"\n          [zLoadingOutline]=\"true\"\n          [zPlaceholder]=\"cfg().placeholder\"\n          [ngModel]=\"dateValue()\"\n          (ngModelChange)=\"onImmediateChange($event)\"\n          class=\"w-full\"\n        />\n      }\n      @case ('textarea') {\n        <z-input\n          zType=\"textarea\"\n          [zSize]=\"cfg().size\"\n          [class]=\"cfg().class\"\n          [ngStyle]=\"cfg().style\"\n          [zPlaceholder]=\"cfg().placeholder\"\n          [zRows]=\"editConfig().rows ?? 2\"\n          [zLoading]=\"cfg().loading\"\n          [zLoadingOutline]=\"true\"\n          [zDisabled]=\"cfg().disabled\"\n          [zReadonly]=\"cfg().readonly\"\n          [ngModel]=\"stringValue()\"\n          (ngModelChange)=\"onValueChange($event)\"\n          (zOnBlur)=\"onInputBlur()\"\n          class=\"w-full\"\n        />\n      }\n      @default {\n        <z-input\n          zType=\"text\"\n          [class]=\"cfg().class\"\n          [ngStyle]=\"cfg().style\"\n          [zSize]=\"cfg().size\"\n          [zPlaceholder]=\"cfg().placeholder\"\n          [zLoading]=\"cfg().loading\"\n          [zLoadingOutline]=\"true\"\n          [zDisabled]=\"cfg().disabled\"\n          [zReadonly]=\"cfg().readonly\"\n          [ngModel]=\"stringValue()\"\n          (ngModelChange)=\"onValueChange($event)\"\n          (zOnBlur)=\"onInputBlur()\"\n          class=\"w-full\"\n        />\n      }\n    }\n  `,\n  styles: `\n    :host {\n      display: block;\n      width: 100%;\n      min-width: 0;\n    }\n\n    :host > z-input,\n    :host > z-select,\n    :host > z-autocomplete,\n    :host > z-calendar {\n      display: block;\n      width: 100%;\n      min-width: 0;\n    }\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: 'z-table-edit-cell block',\n  },\n})\nexport class ZTableEditCellComponent<T = unknown> implements OnInit {\n  private readonly _destroyRef = inject(DestroyRef);\n\n  public readonly zRow = input.required<T>();\n  public readonly zRowId = input.required<string>();\n  public readonly zRowIndex = input.required<number>();\n  public readonly zColumnId = input.required<string>();\n  public readonly zValue = input<unknown>();\n  public readonly zEditConfig = input<ZTableEditConfig<T>>();\n  public readonly zRowUpdate = input<{ rowId: string; updates: Record<string, unknown> } | null>(null);\n  public readonly zChange = output<ZTableEditCellChangeEvent<T>>();\n\n  private readonly _currentValue = signal<unknown>(undefined);\n  private readonly _valueChange$ = new Subject<{ oldValue: unknown; newValue: unknown }>();\n  private _pendingBlurValue: unknown = undefined;\n  private _hasPendingBlur = false;\n\n  constructor() {\n    effect(() => {\n      const externalValue = this.zValue();\n      this._currentValue.set(externalValue);\n    });\n\n    effect(() => {\n      const update = this.zRowUpdate();\n      if (!update) {\n        return;\n      }\n\n      const myRowId = this.zRowId();\n      const myColumnId = this.zColumnId();\n      if (update.rowId !== myRowId) {\n        return;\n      }\n\n      if (!(myColumnId in update.updates)) {\n        return;\n      }\n\n      this._currentValue.set(update.updates[myColumnId]);\n    });\n  }\n\n  protected readonly editConfig = computed(() => {\n    const config = this.zEditConfig();\n    if (!config || typeof config === 'boolean') {\n      return { enabled: true, type: 'text' as ZTableEditType };\n    }\n\n    return config;\n  });\n\n  protected readonly cfg = computed<ZResolvedEditConfig>(() => {\n    const config = this.editConfig();\n    const row = this.zRow();\n    return {\n      type: resolveConfigValue(config?.type, row, 'text' as ZTableEditType),\n      size: config?.size ?? 'default',\n      placeholder: resolveConfigValue(config?.placeholder, row, ''),\n      allowClear: config?.allowClear ?? false,\n      class: resolveConfigValue(config?.class, row, ''),\n      style: resolveConfigValue(config?.style, row, {} as Record<string, string>),\n      disabled: resolveConfigValue(config?.disabled, row, false),\n      readonly: resolveConfigValue(config?.readonly, row, false),\n      loading: resolveConfigValue(config?.loading, row, false),\n    };\n  });\n\n  protected readonly selectOptions = computed<ZSelectOption[]>(() => {\n    const config = this.editConfig();\n    const optionsConfig = config?.options;\n    if (!optionsConfig) {\n      return [];\n    }\n\n    const rawOptions: unknown[] = typeof optionsConfig === 'function' ? optionsConfig(this.zRow()) : optionsConfig;\n    const labelKey = config?.optionLabelKey;\n    const valueKey = config?.optionValueKey;\n\n    if (!labelKey && !valueKey) {\n      return rawOptions as ZSelectOption[];\n    }\n\n    return rawOptions.map((opt: unknown) => {\n      if (typeof opt !== 'object' || opt === null) {\n        return { label: String(opt), value: opt };\n      }\n\n      const obj = opt as Record<string, unknown>;\n      return {\n        label: String(obj[labelKey ?? 'label'] ?? ''),\n        value: obj[valueKey ?? 'value'],\n      };\n    });\n  });\n\n  protected readonly autocompleteOptions = computed<ZAutocompleteOption[]>(() => {\n    const config = this.editConfig();\n    const optionsConfig = config?.autocompleteOptions;\n    if (!optionsConfig) {\n      return [];\n    }\n\n    const rawOptions: unknown[] = typeof optionsConfig === 'function' ? optionsConfig(this.zRow()) : optionsConfig;\n    const labelKey = config?.optionLabelKey;\n    const valueKey = config?.optionValueKey;\n\n    if (!labelKey && !valueKey) {\n      return rawOptions as ZAutocompleteOption[];\n    }\n\n    return rawOptions.map((opt: unknown) => {\n      if (typeof opt !== 'object' || opt === null) {\n        return { label: String(opt), value: opt };\n      }\n\n      const obj = opt as Record<string, unknown>;\n      return {\n        label: String(obj[labelKey ?? 'label'] ?? ''),\n        value: obj[valueKey ?? 'value'],\n      };\n    });\n  });\n\n  protected readonly value = this._currentValue.asReadonly();\n  protected readonly stringValue = computed(() => {\n    const val = this.value();\n    if (val === null || val === undefined) {\n      return '';\n    }\n\n    return String(val);\n  });\n\n  protected readonly numericValue = computed(() => {\n    const val = this.value();\n    if (val === null || val === undefined || val === '') {\n      return null;\n    }\n\n    const num = Number(val);\n    return isNaN(num) ? null : num;\n  });\n\n  protected readonly booleanValue = computed(() => {\n    const val = this.value();\n    return Boolean(val);\n  });\n\n  protected readonly dateValue = computed(() => {\n    const val = this.value();\n    if (val instanceof Date) {\n      return val;\n    }\n\n    if (typeof val === 'string' && val) {\n      const date = new Date(val);\n      return isNaN(date.getTime()) ? null : date;\n    }\n\n    return null;\n  });\n\n  protected onValueChange(newValue: unknown): void {\n    const oldValue = this.zValue();\n    this._currentValue.set(newValue);\n\n    const config = this.editConfig();\n\n    if (config?.blurEdit) {\n      this._pendingBlurValue = newValue;\n      this._hasPendingBlur = true;\n      return;\n    }\n\n    this._valueChange$.next({ oldValue, newValue });\n  }\n\n  protected onInputBlur(): void {\n    if (!this._hasPendingBlur) {\n      return;\n    }\n\n    const oldValue = this.zValue();\n    this._hasPendingBlur = false;\n    this._emitChange(oldValue, this._pendingBlurValue);\n  }\n\n  protected onImmediateChange(newValue: unknown): void {\n    const oldValue = this.zValue();\n    this._currentValue.set(newValue);\n    this._emitChange(oldValue, newValue);\n  }\n\n  protected onSelectChange(newValue: unknown): void {\n    const isWrappedObject = typeof newValue === 'object' && newValue !== null && 'value' in newValue;\n    const finalValue = isWrappedObject ? (newValue as { value: unknown }).value : newValue;\n    this.onImmediateChange(finalValue);\n  }\n\n  protected onAutocompleteCommit(event: { value: string; source: 'enter' | 'blur' }): void {\n    this.onImmediateChange(event.value);\n  }\n\n  protected onAutocompleteSelect(option: ZAutocompleteOption): void {\n    this.onImmediateChange(option.label);\n  }\n\n  private _emitChange(oldValue: unknown, newValue: unknown): void {\n    this.zChange.emit({\n      row: this.zRow(),\n      rowId: this.zRowId(),\n      rowIndex: this.zRowIndex(),\n      columnId: this.zColumnId(),\n      oldValue,\n      newValue,\n    });\n  }\n\n  public ngOnInit(): void {\n    const config = this.editConfig();\n    const debounceMs = config?.debounceTime ?? 0;\n\n    this._valueChange$\n      .pipe(\n        debounceTime(debounceMs),\n        distinctUntilChanged((a, b) => a.newValue === b.newValue),\n        takeUntilDestroyed(this._destroyRef)\n      )\n      .subscribe(({ oldValue, newValue }) => {\n        this._emitChange(oldValue, newValue);\n      });\n\n    this._destroyRef.onDestroy(() => {\n      this._valueChange$.complete();\n    });\n  }\n}\n","import type { ZSelectOption } from '@shival99/z-ui/components/z-select';\nimport type { ZTableOperatorOption } from './z-table.types';\n\nexport const Z_TABLE_TEXT_OPERATORS: ZTableOperatorOption[] = [\n  { labelKey: 'i18n_z_ui_table_filter_operator_contains', value: 'contains' },\n  { labelKey: 'i18n_z_ui_table_filter_operator_not_contains', value: 'notContains' },\n  { labelKey: 'i18n_z_ui_table_filter_operator_starts_with', value: 'startsWith' },\n  { labelKey: 'i18n_z_ui_table_filter_operator_ends_with', value: 'endsWith' },\n  { labelKey: 'i18n_z_ui_table_filter_operator_equals', value: 'equals' },\n  { labelKey: 'i18n_z_ui_table_filter_operator_not_equals', value: 'notEquals' },\n  { labelKey: 'i18n_z_ui_table_filter_operator_empty', value: 'empty' },\n  { labelKey: 'i18n_z_ui_table_filter_operator_not_empty', value: 'notEmpty' },\n];\n\nexport const Z_TABLE_NUMBER_OPERATORS: ZTableOperatorOption[] = [\n  { labelKey: 'i18n_z_ui_table_filter_operator_equals', value: 'equals' },\n  { labelKey: 'i18n_z_ui_table_filter_operator_not_equals', value: 'notEquals' },\n  { labelKey: 'i18n_z_ui_table_filter_operator_greater_than', value: 'greaterThan' },\n  { labelKey: 'i18n_z_ui_table_filter_operator_greater_than_or_equal', value: 'greaterThanOrEqual' },\n  { labelKey: 'i18n_z_ui_table_filter_operator_less_than', value: 'lessThan' },\n  { labelKey: 'i18n_z_ui_table_filter_operator_less_than_or_equal', value: 'lessThanOrEqual' },\n  { labelKey: 'i18n_z_ui_table_filter_operator_empty', value: 'empty' },\n  { labelKey: 'i18n_z_ui_table_filter_operator_not_empty', value: 'notEmpty' },\n];\n\nexport const Z_TABLE_SORT_OPTIONS: ZSelectOption<string>[] = [\n  { label: 'i18n_z_ui_table_clear_sort', value: 'none' },\n  { label: 'i18n_z_ui_table_sort_asc_short', value: 'asc' },\n  { label: 'i18n_z_ui_table_sort_desc_short', value: 'desc' },\n  { label: 'i18n_z_ui_table_sort_az', value: 'az' },\n  { label: 'i18n_z_ui_table_sort_za', value: 'za' },\n];\n\nexport const Z_TABLE_MAX_FILTER_CONDITIONS = 5;\n\n// ─── Drag And Drop ──────────────────────────────────────────────────────────\n\nexport const Z_TABLE_DRAG_THRESHOLD = 4;\nexport const Z_TABLE_DRAG_AUTO_SCROLL_MARGIN = 48;\nexport const Z_TABLE_DRAG_AUTO_SCROLL_MAX_SPEED = 20;\n\nexport const Z_TABLE_BODY_ALIGN_MAP: Record<string, string> = {\n  left: 'text-left',\n  center: 'text-center',\n  right: 'text-right',\n};\n\nexport const Z_TABLE_TAG_ALIGN_MAP: Record<string, string> = {\n  left: 'mr-auto',\n  center: 'mx-auto',\n  right: 'ml-auto',\n};\n","import { ChangeDetectionStrategy, Component, computed, effect, input, signal, untracked } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ZButtonComponent } from '@shival99/z-ui/components/z-button';\nimport { ZCalendarComponent } from '@shival99/z-ui/components/z-calendar';\nimport type { ZDateRange } from '@shival99/z-ui/components/z-calendar';\nimport { ZEmptyComponent } from '@shival99/z-ui/components/z-empty';\nimport { ZIconComponent } from '@shival99/z-ui/components/z-icon';\nimport { ZInputComponent } from '@shival99/z-ui/components/z-input';\nimport { ZPopoverDirective } from '@shival99/z-ui/components/z-popover';\nimport { ZSelectComponent } from '@shival99/z-ui/components/z-select';\nimport type { ZSelectConfig, ZSelectOption } from '@shival99/z-ui/components/z-select';\nimport type { Column, SortingState, Table } from '@tanstack/angular-table';\nimport {\n  Z_TABLE_MAX_FILTER_CONDITIONS,\n  Z_TABLE_NUMBER_OPERATORS,\n  Z_TABLE_SORT_OPTIONS,\n  Z_TABLE_TEXT_OPERATORS,\n} from '../z-table.define';\nimport type {\n  ZTableAdvancedFilterType,\n  ZTableDraftFilterCondition,\n  ZTableExtendedColumnDef,\n  ZTableFilterCondition,\n  ZTableFilterConditionView,\n  ZTableFilterJoinOperator,\n  ZTableFilterOperator,\n  ZTableFilterUi,\n  ZTableLegacyAdvancedFilterType,\n  ZTableOperatorOption,\n} from '../z-table.types';\n\n@Component({\n  selector: 'z-table-filter',\n  imports: [\n    FormsModule,\n    ZButtonComponent,\n    ZCalendarComponent,\n    ZEmptyComponent,\n    ZIconComponent,\n    ZInputComponent,\n    ZPopoverDirective,\n    ZSelectComponent,\n    TranslatePipe,\n  ],\n  standalone: true,\n  template: `\n    @if (isAdvancedUi()) {\n      <button\n        type=\"button\"\n        z-popover\n        [zPopoverContent]=\"filterPopover\"\n        zTrigger=\"click\"\n        zPosition=\"bottom\"\n        [zOffset]=\"6\"\n        [zPopoverWidth]=\"popoverWidth()\"\n        class=\"z-table-filter-trigger hover:bg-muted text-muted-foreground relative flex size-6 cursor-pointer items-center justify-center rounded-sm transition-colors outline-none\"\n        [class.bg-muted]=\"isActive()\"\n        [class.text-foreground]=\"isActive()\"\n        (zShow)=\"syncDraft()\"\n      >\n        <z-icon zType=\"lucideFilter\" zSize=\"15\" />\n        @if (filterBadgeCount() > 0) {\n          <span\n            class=\"bg-primary text-primary-foreground absolute -top-1 -right-1 flex h-3.5 min-w-3.5 items-center justify-center rounded-full px-0.5 text-[0.625rem] leading-none font-semibold\"\n          >\n            {{ filterBadgeCount() }}\n          </span>\n        }\n      </button>\n\n      <ng-template #filterPopover let-close=\"close\">\n        <div class=\"p-1\" [class]=\"popoverContentClass()\">\n          @if (canSort()) {\n            <div class=\"p-1\">\n              <div class=\"grid min-w-0 grid-cols-[1fr_1fr_2rem] items-center gap-2\">\n                <z-input class=\"min-w-0\" zSize=\"sm\" zReadonly [ngModel]=\"sortLabelKey() | translate\" />\n                <z-select\n                  class=\"col-span-2 min-w-0\"\n                  zSize=\"sm\"\n                  [zOptions]=\"sortOptions()\"\n                  [zWrap]=\"false\"\n                  [zScrollClose]=\"true\"\n                  [ngModel]=\"draftSortValue()\"\n                  [zPlaceholder]=\"'i18n_z_ui_table_sort' | translate\"\n                  (ngModelChange)=\"updateDraftSort($event)\"\n                />\n              </div>\n            </div>\n          }\n\n          @if (canFilter()) {\n            @if (isBuilderMode()) {\n              <div>\n                @if (filterConditionViews().length > 0) {\n                  <div class=\"max-h-72 overflow-y-auto\">\n                    <div class=\"z-table-filter-group flex flex-col gap-2 py-1 pr-0 pb-1 pl-1\">\n                      @for (condition of filterConditionViews(); track condition.id) {\n                        @if (condition.isJoinGroupStart) {\n                          <div\n                            class=\"z-table-filter-condition-divider\"\n                            [class.z-table-filter-condition-divider--and]=\"condition.joinTone === 'and'\"\n                            [class.z-table-filter-condition-divider--or]=\"condition.joinTone === 'or'\"\n                          >\n                            <span\n                              class=\"z-table-filter-condition-divider-label\"\n                              [class.z-table-filter-condition-divider-label--and]=\"condition.joinTone === 'and'\"\n                              [class.z-table-filter-condition-divider-label--or]=\"condition.joinTone === 'or'\"\n                            >\n                              {{ condition.joinLabelKey | translate }}\n                            </span>\n                          </div>\n                        }\n                        <div class=\"z-table-filter-condition-row\">\n                          <div class=\"grid min-w-0 grid-cols-[1fr_1fr_2rem] items-center gap-2 pr-1\">\n                            <z-select\n                              class=\"min-w-0\"\n                              zSize=\"sm\"\n                              [zOptions]=\"condition.operatorOptions\"\n                              [zWrap]=\"false\"\n                              [zScrollClose]=\"true\"\n                              [zMaxVisible]=\"30\"\n                              [zPlaceholder]=\"'i18n_z_ui_table_filter_select_condition' | translate\"\n                              [ngModel]=\"condition.operator\"\n                              (ngModelChange)=\"updateFilterOperator(condition.id, $event)\"\n                            />\n                            @if (condition.isValueLess) {\n                              <div class=\"bg-muted text-muted-foreground flex h-8 items-center rounded-sm px-2 text-sm\">\n                                {{ 'i18n_z_ui_table_filter_no_value' | translate }}\n                              </div>\n                            } @else {\n                              <z-input\n                                class=\"min-w-0\"\n                                [zType]=\"condition.inputType\"\n                                zSize=\"sm\"\n                                zAllowClear\n                                [zPlaceholder]=\"'i18n_z_ui_table_filter_value' | translate\"\n                                [ngModel]=\"condition.value ?? ''\"\n                                (ngModelChange)=\"updateFilterValue(condition.id, $event)\"\n                              />\n                            }\n                            <button\n                              type=\"button\"\n                              z-button\n                              zSize=\"sm\"\n                              zType=\"outline-destructive-soft\"\n                              (click)=\"removeDraftFilter(condition.id)\"\n                            >\n                              <z-icon zType=\"lucideTrash2\" zSize=\"14\" />\n                            </button>\n                          </div>\n                        </div>\n                      }\n                    </div>\n                  </div>\n                } @else {\n                  <div class=\"p-1\">\n                    <z-empty\n                      zSize=\"sm\"\n                      zIcon=\"lucidePackageOpen\"\n                      [zMessage]=\"'i18n_z_ui_table_filter_empty_conditions' | translate\"\n                    />\n                  </div>\n                }\n              </div>\n            } @else {\n              <div class=\"p-1\">\n                <div class=\"grid min-w-0 grid-cols-[1fr_1fr_2rem] items-center gap-2\">\n                  <z-input class=\"min-w-0\" zSize=\"sm\" zReadonly [ngModel]=\"legacyFilterLabelKey() | translate\" />\n                  @switch (legacyAdvancedType()) {\n                    @case ('range') {\n                      <div class=\"col-span-2 flex min-w-0 gap-1\">\n                        <z-input\n                          zType=\"number\"\n                          zSize=\"sm\"\n                          [zPlaceholder]=\"'i18n_z_ui_table_filter_min' | translate\"\n                          [ngModel]=\"rangeMinValue()\"\n                          (ngModelChange)=\"onMinChangeDebounced($event)\"\n                          class=\"min-w-0 flex-1\"\n                        />\n                        <z-input\n                          zType=\"number\"\n                          zSize=\"sm\"\n                          [zPlaceholder]=\"'i18n_z_ui_table_filter_max' | translate\"\n                          [ngModel]=\"rangeMaxValue()\"\n                          (ngModelChange)=\"onMaxChangeDebounced($event)\"\n                          class=\"min-w-0 flex-1\"\n                        />\n                      </div>\n                    }\n                    @case ('date') {\n                      <z-calendar\n                        zMode=\"single\"\n                        zSize=\"sm\"\n                        zAllowClear\n                        [zAllowEdit]=\"false\"\n                        zValueType=\"date\"\n                        [zScrollClose]=\"true\"\n                        [zPlaceholder]=\"'i18n_z_ui_table_filter_date' | translate\"\n                        [ngModel]=\"dateValue()\"\n                        (ngModelChange)=\"onDateChange($event)\"\n                        class=\"col-span-2 min-w-0\"\n                      />\n                    }\n                    @case ('date-range') {\n                      <z-calendar\n                        zMode=\"range\"\n                        zSize=\"sm\"\n                        zAllowClear\n                        [zAllowEdit]=\"false\"\n                        [zQuickSelect]=\"true\"\n                        [zShortTime]=\"true\"\n                        zValueType=\"date\"\n                        [zScrollClose]=\"true\"\n                        [zPlaceholder]=\"'i18n_z_ui_table_filter_date_range' | translate\"\n                        [ngModel]=\"dateRangeValue()\"\n                        (ngModelChange)=\"onDateRangeChange($event)\"\n                        class=\"col-span-2 min-w-0\"\n                      />\n                    }\n                    @case ('time') {\n                      <z-calendar\n                        zMode=\"single\"\n                        zSize=\"sm\"\n                        zAllowClear\n                        [zAllowEdit]=\"false\"\n                        zShowTime\n                        zValueType=\"date\"\n                        [zScrollClose]=\"true\"\n                        [zPlaceholder]=\"'i18n_z_ui_table_filter_time' | translate\"\n                        [ngModel]=\"timeValue()\"\n                        (ngModelChange)=\"onTimeChange($event)\"\n                        class=\"col-span-2 min-w-0\"\n                      />\n                    }\n                    @case ('select') {\n                      <z-select\n                        zSize=\"sm\"\n                        zAllowClear\n                        [zWrap]=\"false\"\n                        [zScrollClose]=\"true\"\n                        [zOptions]=\"selectOptions()\"\n                        [zConfig]=\"selectConfig()\"\n                        [ngModel]=\"selectValue()\"\n                        [zMaxVisible]=\"30\"\n                        [zPlaceholder]=\"'i18n_z_ui_common_select' | translate\"\n                        (ngModelChange)=\"onSelectChange($event)\"\n                        class=\"col-span-2 min-w-0\"\n                      />\n                    }\n                    @case ('multi-select') {\n                      <z-select\n                        zMode=\"multiple\"\n                        zSize=\"sm\"\n                        zAllowClear\n                        [zWrap]=\"false\"\n                        [zScrollClose]=\"true\"\n                        [zOptions]=\"selectOptions()\"\n                        [zConfig]=\"selectConfig()\"\n                        [zMaxTagCount]=\"1\"\n                        [zMaxVisible]=\"30\"\n                        [ngModel]=\"multiSelectValue()\"\n                        [zPlaceholder]=\"'i18n_z_ui_common_select' | translate\"\n                        (ngModelChange)=\"onMultiSelectChange($event)\"\n                        class=\"col-span-2 min-w-0\"\n                      />\n                    }\n                    @case ('tags') {\n                      <z-select\n                        zMode=\"tags\"\n                        zSize=\"sm\"\n                        [zOptions]=\"selectOptions()\"\n                        [zConfig]=\"selectConfig()\"\n                        [zWrap]=\"false\"\n                        [zScrollClose]=\"true\"\n                        [zMaxTagCount]=\"1\"\n                        [zMaxVisible]=\"30\"\n                        [zPlaceholder]=\"'i18n_z_ui_common_select' | translate\"\n                        class=\"col-span-2 min-w-0\"\n                        [zAllowClear]=\"true\"\n                        [ngModel]=\"multiSelectValue()\"\n                        (ngModelChange)=\"onMultiSelectChange($event)\"\n                      />\n                    }\n                  }\n                </div>\n              </div>\n            }\n          }\n\n          <div class=\"bg-border my-1 h-px\"></div>\n          <div class=\"flex items-center justify-between gap-2 p-1\">\n            <button\n              z-button\n              zType=\"ghost\"\n              zSize=\"sm\"\n              zTypeIcon=\"lucideRotateCcw\"\n              type=\"button\"\n              [attr.aria-label]=\"'i18n_z_ui_table_reset' | translate\"\n              [title]=\"'i18n_z_ui_table_reset' | translate\"\n              (click)=\"resetFilters(); close()\"\n            ></button>\n            <div class=\"flex items-center gap-2\">\n              @if (isBuilderMode()) {\n                <button\n                  z-button\n                  zType=\"outline\"\n                  zSize=\"sm\"\n                  type=\"button\"\n                  [disabled]=\"!canAddFilterCondition()\"\n                  (click)=\"addDraftFilter('and')\"\n                >\n                  <z-icon zType=\"lucidePlus\" zSize=\"14\" />\n                  AND\n                </button>\n                <button\n                  z-button\n                  zType=\"outline\"\n                  zSize=\"sm\"\n                  type=\"button\"\n                  [disabled]=\"!canAddFilterCondition()\"\n                  (click)=\"addDraftFilter('or')\"\n                >\n                  <z-icon zType=\"lucidePlus\" zSize=\"14\" />\n                  OR\n                </button>\n              }\n              <button z-button zType=\"default\" zSize=\"sm\" type=\"button\" (click)=\"applyFilters(); close()\">\n                {{ 'i18n_z_ui_table_apply' | translate }}\n              </button>\n            </div>\n          </div>\n        </div>\n      </ng-template>\n    } @else {\n      <button\n        type=\"button\"\n        class=\"z-table-filter-trigger hover:bg-muted text-muted-foreground relative flex size-6 cursor-pointer items-center justify-center rounded-sm transition-colors outline-none\"\n        [class.bg-muted]=\"isActive()\"\n        [class.text-foreground]=\"isActive()\"\n        (click)=\"toggleBasicSort()\"\n      >\n        @if (effectiveSortState() === 'asc') {\n          <z-icon zType=\"lucideArrowUp\" zSize=\"15\" />\n        } @else if (effectiveSortState() === 'desc') {\n          <z-icon zType=\"lucideArrowDown\" zSize=\"15\" />\n        } @else {\n          <z-icon zType=\"lucideArrowDownUp\" zSize=\"15\" class=\"opacity-70\" />\n        }\n      </button>\n    }\n  `,\n  styles: `\n    :host {\n      display: inline-flex;\n      color: var(--foreground);\n      font-weight: 450;\n      font-style: normal;\n      text-decoration: none;\n      text-transform: none;\n      letter-spacing: normal;\n    }\n\n    .z-table-filter-trigger:focus-visible,\n    .z-table-filter-trigger.z-popover-open {\n      background-color: color-mix(in srgb, var(--foreground) 8%, transparent);\n      color: var(--foreground);\n    }\n\n    .z-table-filter-trigger:active {\n      background-color: color-mix(in srgb, var(--foreground) 12%, transparent);\n    }\n\n    .z-table-filter-group {\n      position: relative;\n    }\n\n    .z-table-filter-condition-row {\n      display: grid;\n      grid-template-columns: minmax(0, 1fr);\n    }\n\n    .z-table-filter-condition-divider {\n      display: flex;\n      align-items: center;\n      gap: 0.375rem;\n      padding-right: 0.25rem;\n    }\n\n    .z-table-filter-condition-divider::after {\n      content: '';\n      height: 1px;\n      flex: 1;\n      border-top: 1px dashed color-mix(in srgb, var(--border) 90%, var(--primary) 10%);\n    }\n\n    .z-table-filter-condition-divider--and::after {\n      border-top-color: color-mix(in srgb, #2563eb 70%, var(--border));\n    }\n\n    .z-table-filter-condition-divider--or::after {\n      border-top-color: color-mix(in srgb, #dc2626 70%, var(--border));\n    }\n\n    .z-table-filter-condition-divider-label {\n      display: inline-flex;\n      align-items: center;\n      border-radius: 0.125rem;\n      border: 1px dashed currentColor;\n      padding: 0.0625rem 0.375rem;\n      font-size: 0.6875rem;\n      font-weight: 600;\n      line-height: 1rem;\n      text-transform: uppercase;\n    }\n\n    .z-table-filter-condition-divider-label--and {\n      background: color-mix(in srgb, #2563eb 8%, transparent);\n      color: #2563eb;\n    }\n\n    .z-table-filter-condition-divider-label--or {\n      background: color-mix(in srgb, #dc2626 8%, transparent);\n      color: #dc2626;\n    }\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: 'z-table-filter inline-flex',\n  },\n})\nexport class ZTableFilterComponent<T> {\n  public readonly zColumn = input.required<Column<unknown, unknown>>();\n  public readonly zTable = input.required<Table<T>>();\n  public readonly zResetVersion = input(0);\n  public readonly zSortingState = input<SortingState>([]);\n  public readonly zEnableMultiSort = input(true);\n\n  private readonly _columnDef = computed(() => this.zColumn().columnDef as ZTableExtendedColumnDef);\n  private readonly _appliedFilterConditions = signal<ZTableFilterCondition[] | null>(null);\n  private readonly _appliedLegacyFilterValue = signal<{ value: unknown } | null>(null);\n  private readonly _appliedSortState = signal<'asc' | 'desc' | false | null>(null);\n\n  protected readonly sortOptions = computed(() => Z_TABLE_SORT_OPTIONS);\n  protected readonly draftFilters = signal<ZTableDraftFilterCondition[]>([]);\n  protected readonly draftLegacyFilterValue = signal<unknown>(undefined);\n  protected readonly draftSortState = signal<'asc' | 'desc' | false>(false);\n  protected readonly columnFilterValue = computed<unknown>(() => {\n    this.zResetVersion();\n    return this.zColumn().getFilterValue();\n  });\n\n  protected readonly effectiveFilterValue = computed<unknown>(() => {\n    const localValue = this._appliedLegacyFilterValue();\n    return localValue ? localValue.value : this.columnFilterValue();\n  });\n\n  protected readonly sortState = computed(() => {\n    this.zResetVersion();\n    return this._getColumnSortState();\n  });\n\n  protected readonly effectiveSortState = computed(() => {\n    const localSort = this._appliedSortState();\n    return localSort === null ? this.sortState() : localSort;\n  });\n\n  protected readonly canSort = computed(() => this.zColumn().getCanSort());\n  protected readonly canFilter = computed(() => this.zColumn().getCanFilter());\n  protected readonly filterUi = computed<ZTableFilterUi>(() =>\n    this._normalizeFilterUi(this._columnDef().filterUi, this._columnDef().filterAdvancedType, this.canFilter())\n  );\n\n  protected readonly advancedType = computed<ZTableAdvancedFilterType>(() =>\n    this._normalizeAdvancedType(this._columnDef().filterAdvancedType, this._columnDef().filterValueType)\n  );\n\n  protected readonly isAdvancedUi = computed(() => this.filterUi() !== 'basic');\n  protected readonly isBuilderMode = computed(() => this.advancedType() === 'text' || this.advancedType() === 'number');\n  protected readonly legacyAdvancedType = computed(() => this.advancedType() as ZTableLegacyAdvancedFilterType);\n  protected readonly popoverContentClass = computed(() => 'w-90');\n  protected readonly popoverWidth = computed(() => 360);\n  protected readonly sortLabelKey = computed(() => 'i18n_z_ui_table_sort');\n  protected readonly legacyFilterLabelKey = computed(\n    () => this._columnDef().filterLabel ?? this._defaultLegacyFilterLabelKey()\n  );\n\n  protected readonly filterConditions = computed(() => {\n    const localConditions = this._appliedFilterConditions();\n    if (localConditions) {\n      return localConditions;\n    }\n\n    return this._normalizeFilterConditions(this.columnFilterValue());\n  });\n\n  protected readonly filterConditionViews = computed<ZTableFilterConditionView[]>(() =>\n    this.draftFilters().map((condition, index, filters) => ({\n      ...condition,\n      inputType: this.advancedType() === 'number' ? 'number' : 'text',\n      isJoinGroupStart:\n        filters.length > 1 &&\n        (index === 0 || (index > 1 && condition.joinWithPrev !== (filters[index - 1]?.joinWithPrev ?? 'and'))),\n      isValueLess: this._isValueLessOperator(condition.operator),\n      joinLabelKey:\n        (index === 0 ? filters[1]?.joinWithPrev : condition.joinWithPrev) === 'or'\n          ? 'i18n_z_ui_upload_or'\n          : 'i18n_z_ui_table_filter_and',\n      joinTone: (index === 0 ? filters[1]?.joinWithPrev : condition.joinWithPrev) === 'or' ? 'or' : 'and',\n      operatorOptions: this._operatorOptionsForDraft(condition.id),\n    }))\n  );\n\n  protected readonly canAddFilterCondition = computed(() => this.draftFilters().length < Z_TABLE_MAX_FILTER_CONDITIONS);\n\n  protected readonly filterBadgeCount = computed(() => {\n    const filterCount = this.isBuilderMode() ? this.filterConditions().length : this._hasLegacyFilterValue() ? 1 : 0;\n    return filterCount + (this.effectiveSortState() ? 1 : 0);\n  });\n\n  protected readonly hasFilterValue = computed(() =>\n    this.isBuilderMode() ? this.filterConditions().length > 0 : this._hasLegacyFilterValue()\n  );\n\n  protected readonly isActive = computed(() => !!this.effectiveSortState() || this.hasFilterValue());\n  protected readonly draftSortValue = computed(() => this.draftSortState() || 'none');\n\n  protected readonly rangeMinValue = computed(() => {\n    const value = this.draftLegacyFilterValue();\n    if (!Array.isArray(value)) {\n      return '';\n    }\n\n    return value[0] ?? '';\n  });\n\n  protected readonly rangeMaxValue = computed(() => {\n    const value = this.draftLegacyFilterValue();\n    if (!Array.isArray(value)) {\n      return '';\n    }\n\n    return value[1] ?? '';\n  });\n\n  protected readonly dateValue = computed(() => {\n    const value = this.draftLegacyFilterValue();\n    return value instanceof Date ? value : null;\n  });\n\n  protected readonly timeValue = computed(() => {\n    const value = this.draftLegacyFilterValue();\n    return value instanceof Date ? value : null;\n  });\n\n  protected readonly dateRangeValue = computed(() => {\n    const value = this.draftLegacyFilterValue();\n    if (value && typeof value === 'object' && 'start' in value && 'end' in value) {\n      return value as ZDateRange;\n    }\n\n    return null;\n  });\n\n  protected readonly selectValue = computed(() => {\n    const value = this.draftLegacyFilterValue();\n    if (value === null || value === undefined || value === '') {\n      return null;\n    }\n\n    return value;\n  });\n\n  protected readonly multiSelectValue = computed(() => {\n    const value = this.draftLegacyFilterValue();\n    return Array.isArray(value) ? value : [];\n  });\n\n  protected readonly selectOptions = computed(() => {\n    const staticOptions = this._columnDef().filterOptions;\n    if (staticOptions && staticOptions.length > 0) {\n      return staticOptions;\n    }\n\n    if ((this._columnDef().filterOptionSource ?? 'faceted') === 'faceted') {\n      const facetedValues = this.zColumn().getFacetedUniqueValues();\n      if (facetedValues && facetedValues.size > 0) {\n        return Array.from(facetedValues.keys())\n          .sort()\n          .slice(0, 5000)\n          .map(value => ({ label: String(value), value }));\n      }\n    }\n\n    const table = this.zTable();\n    const column = this.zColumn();\n    const { rows } = table.getPreFilteredRowModel();\n    const uniqueValues = new Map<string, unknown>();\n\n    for (const row of rows) {\n      const value = row.getValue(column.id);\n      if (value === null || value === undefined || value === '') {\n        continue;\n      }\n\n      uniqueValues.set(String(value), value);\n    }\n\n    return Array.from(uniqueValues.entries())\n      .sort(([left], [right]) => left.localeCompare(right))\n      .map(([label, value]) => ({\n        label,\n        value,\n      }));\n  });\n\n  protected readonly selectConfig = computed<Partial<ZSelectConfig<unknown>>>(\n    () => this._columnDef().filterSelectConfig ?? {}\n  );\n\n  private readonly _syncExternalAppliedState = effect(() => {\n    this.zResetVersion();\n    this._appliedFilterConditions.set(null);\n    this._appliedLegacyFilterValue.set(null);\n    this._appliedSortState.set(untracked(() => this._getColumnSortState()));\n  });\n\n  public syncDraft(): void {\n    this._syncAppliedStateFromColumn();\n    if (this.isBuilderMode()) {\n      this.draftFilters.set(this.filterConditions().map(condition => this._withDraftId(condition)));\n      this.draftSortState.set(this._normalizeSortState(this.effectiveSortState()));\n      return;\n    }\n\n    this.draftLegacyFilterValue.set(this.effectiveFilterValue());\n    this.draftSortState.set(this._normalizeSortState(this.effectiveSortState()));\n  }\n\n  public toggleBasicSort(): void {\n    if (!this.canSort()) {\n      return;\n    }\n\n    const currentSort = this.effectiveSortState();\n    if (currentSort === 'asc') {\n      this.zColumn().clearSorting();\n      this._appliedSortState.set(false);\n      return;\n    }\n\n    if (currentSort === 'desc') {\n      this._setColumnSorting('asc');\n      this._appliedSortState.set('asc');\n      return;\n    }\n\n    this._setColumnSorting('desc');\n    this._appliedSortState.set('desc');\n  }\n\n  public addDraftFilter(joinWithPrev: ZTableFilterJoinOperator): void {\n    if (!this.canAddFilterCondition()) {\n      return;\n    }\n\n    this.draftFilters.update(filters => [\n      ...filters,\n      {\n        id: this._createDraftId(),\n        joinWithPrev,\n        operator: null,\n        value: null,\n      },\n    ]);\n  }\n\n  public removeDraftFilter(id: string): void {\n    this.draftFilters.update(filters =>\n      filters\n        .filter(item => item.id !== id)\n        .map(item => ({\n          ...item,\n          joinWithPrev: item.joinWithPrev ?? 'and',\n        }))\n    );\n  }\n\n  public updateFilterOperator(id: string, operator: ZTableFilterOperator | null): void {\n    this.draftFilters.update(filters =>\n      filters.map(item => {\n        if (item.id !== id) {\n          return item;\n        }\n\n        return {\n          ...item,\n          operator,\n          value: null,\n        };\n      })\n    );\n  }\n\n  public updateFilterValue(id: string, value: unknown): void {\n    this.draftFilters.update(filters =>\n      filters.map(item => {\n        if (item.id !== id) {\n          return item;\n        }\n\n        return { ...item, value };\n      })\n    );\n  }\n\n  public updateDraftSort(value: string | null): void {\n    if (!value || value === 'none') {\n      this.draftSortState.set(false);\n      return;\n    }\n\n    this.draftSortState.set(value === 'desc' || value === 'za' ? 'desc' : 'asc');\n  }\n\n  public resetFilters(): void {\n    this.draftFilters.set([]);\n    this.draftLegacyFilterValue.set(undefined);\n    this.draftSortState.set(false);\n    this.zColumn().clearSorting();\n    this.zColumn().setFilterValue(undefined);\n    this._appliedFilterConditions.set([]);\n    this._appliedLegacyFilterValue.set({ value: undefined });\n    this._appliedSortState.set(false);\n  }\n\n  public applyFilters(): void {\n    if (this.isBuilderMode()) {\n      const nextFilters = this.draftFilters()\n        .map(({ id: _id, ...condition }) => condition)\n        .filter((condition): condition is ZTableFilterCondition => this._isApplicableCondition(condition));\n\n      this.zColumn().setFilterValue(nextFilters.length > 0 ? nextFilters : undefined);\n      this._appliedFilterConditions.set(nextFilters);\n      this._applySortState(this.draftSortState());\n      return;\n    }\n\n    const nextFilterValue = this._normalizeLegacyFilterValue(this.draftLegacyFilterValue());\n    this.zColumn().setFilterValue(nextFilterValue);\n    this._appliedLegacyFilterValue.set({ value: nextFilterValue });\n    this._applySortState(this.draftSortState());\n  }\n\n  public onMinChangeDebounced(value: string | number | null): void {\n    const numValue = value === null || value === '' ? undefined : Number(value);\n    const oldValue = this.draftLegacyFilterValue();\n    const rangeValue = Array.isArray(oldValue) ? oldValue : [];\n    this.draftLegacyFilterValue.set([numValue, rangeValue[1]]);\n  }\n\n  public onMaxChangeDebounced(value: string | number | null): void {\n    const numValue = value === null || value === '' ? undefined : Number(value);\n    const oldValue = this.draftLegacyFilterValue();\n    const rangeValue = Array.isArray(oldValue) ? oldValue : [];\n    this.draftLegacyFilterValue.set([rangeValue[0], numValue]);\n  }\n\n  public onDateChange(value: Date | null): void {\n    this.draftLegacyFilterValue.set(value || undefined);\n  }\n\n  public onTimeChange(value: Date | null): void {\n    this.draftLegacyFilterValue.set(value || undefined);\n  }\n\n  public onDateRangeChange(value: ZDateRange | null): void {\n    this.draftLegacyFilterValue.set(value && (value.start || value.end) ? value : undefined);\n  }\n\n  public onSelectChange(value: unknown): void {\n    if (typeof value === 'object' && value !== null && 'value' in value) {\n      this.draftLegacyFilterValue.set((value as { value: unknown }).value || undefined);\n      return;\n    }\n\n    this.draftLegacyFilterValue.set(value || undefined);\n  }\n\n  public onMultiSelectChange(value: unknown[]): void {\n    if (!value || value.length === 0) {\n      this.draftLegacyFilterValue.set(undefined);\n      return;\n    }\n\n    this.draftLegacyFilterValue.set(value);\n  }\n\n  private _normalizeFilterUi(\n    value: ZTableFilterUi | undefined,\n    advancedType: ZTableAdvancedFilterType | undefined,\n    canFilter: boolean\n  ): ZTableFilterUi {\n    if (value === 'basic' || value === 'advanced' || value === 'custom') {\n      return value === 'custom' ? 'advanced' : value;\n    }\n\n    if (canFilter || advancedType) {\n      return 'advanced';\n    }\n\n    return 'basic';\n  }\n\n  private _normalizeAdvancedType(\n    value: ZTableAdvancedFilterType | undefined,\n    filterValueType?: 'number' | 'text'\n  ): ZTableAdvancedFilterType {\n    if (value) {\n      return value;\n    }\n\n    if (filterValueType === 'number') {\n      return 'number';\n    }\n\n    return 'text';\n  }\n\n  private _defaultLegacyFilterLabelKey(): string {\n    const type = this.legacyAdvancedType();\n    if (type === 'time') {\n      return 'i18n_z_ui_table_filter_time';\n    }\n\n    if (type === 'date') {\n      return 'i18n_z_ui_table_filter_date';\n    }\n\n    if (type === 'date-range') {\n      return 'i18n_z_ui_table_filter_date_range';\n    }\n\n    return 'i18n_z_ui_table_filter_value';\n  }\n\n  private _normalizeFilterConditions(value: unknown): ZTableFilterCondition[] {\n    if (!value) {\n      return [];\n    }\n\n    if (Array.isArray(value)) {\n      const hasStructuredFilters = value.some(item => item && typeof item === 'object' && 'operator' in item);\n      if (!hasStructuredFilters) {\n        return [];\n      }\n\n      return value\n        .filter((item): item is ZTableFilterCondition => this._isFilterCondition(item))\n        .map(item => ({\n          ...item,\n          joinWithPrev: item.joinWithPrev ?? 'and',\n        }));\n    }\n\n    if (this._isFilterCondition(value)) {\n      return [{ ...value, joinWithPrev: value.joinWithPrev ?? 'and' }];\n    }\n\n    return [\n      {\n        joinWithPrev: 'and',\n        operator: this.advancedType() === 'number' ? 'equals' : 'contains',\n        value,\n      },\n    ];\n  }\n\n  private _isFilterCondition(value: unknown): value is ZTableFilterCondition {\n    if (!value || typeof value !== 'object' || !('operator' in value)) {\n      return false;\n    }\n\n    const { operator } = value as { operator: unknown };\n    return this._operatorDefinitions().some(item => item.value === operator);\n  }\n\n  private _operatorDefinitions(): ZTableOperatorOption[] {\n    return this.advancedType() === 'number' ? Z_TABLE_NUMBER_OPERATORS : Z_TABLE_TEXT_OPERATORS;\n  }\n\n  private _operatorOptions(): ZSelectOption<ZTableFilterOperator>[] {\n    return this._operatorDefinitions().map(operator => ({\n      label: operator.labelKey,\n      value: operator.value,\n    }));\n  }\n\n  private _operatorOptionsForDraft(id: string): ZSelectOption<ZTableFilterOperator>[] {\n    const draftFilters = this.draftFilters();\n    const currentIndex = draftFilters.findIndex(condition => condition.id === id);\n    const currentJoinTone = this._conditionJoinTone(currentIndex, draftFilters);\n    const selectedOperators = new Set(\n      draftFilters\n        .filter((condition, index) => {\n          if (condition.id === id || !condition.operator) {\n            return false;\n          }\n\n          return currentJoinTone === 'and' && this._conditionJoinTone(index, draftFilters) === 'and';\n        })\n        .map(condition => condition.operator)\n    );\n\n    return this._operatorDefinitions().map(operator => ({\n      label: operator.labelKey,\n      value: operator.value,\n      disabled: selectedOperators.has(operator.value),\n    }));\n  }\n\n  private _conditionJoinTone(index: number, filters: ZTableDraftFilterCondition[]): ZTableFilterJoinOperator {\n    if (index < 0) {\n      return 'and';\n    }\n\n    const condition = filters[index];\n    const joinWithPrev = index === 0 ? filters[1]?.joinWithPrev : condition?.joinWithPrev;\n    return joinWithPrev === 'or' ? 'or' : 'and';\n  }\n\n  private _withDraftId(condition: ZTableFilterCondition): ZTableDraftFilterCondition {\n    return {\n      id: this._createDraftId(),\n      joinWithPrev: condition.joinWithPrev,\n      operator: condition.operator,\n      value: condition.value ?? null,\n    };\n  }\n\n  private _createDraftId(): string {\n    return `filter-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n  }\n\n  private _isApplicableCondition(\n    condition: Omit<ZTableDraftFilterCondition, 'id'>\n  ): condition is ZTableFilterCondition {\n    if (!condition.operator) {\n      return false;\n    }\n\n    if (this._isValueLessOperator(condition.operator)) {\n      return true;\n    }\n\n    return condition.value !== null && condition.value !== undefined && condition.value !== '';\n  }\n\n  private _isValueLessOperator(operator: ZTableFilterOperator | null): boolean {\n    return operator === 'empty' || operator === 'notEmpty';\n  }\n\n  private _applySortState(sortState: 'asc' | 'desc' | false): void {\n    if (!sortState) {\n      this.zColumn().clearSorting();\n      this._appliedSortState.set(false);\n      return;\n    }\n\n    this._setColumnSorting(sortState);\n    this._appliedSortState.set(sortState);\n  }\n\n  private _setColumnSorting(sortState: 'asc' | 'desc'): void {\n    const columnId = this.zColumn().id;\n    const nextSort = { id: columnId, desc: sortState === 'desc' };\n\n    this.zTable().setSorting(sorting => {\n      if (!this._shouldPreserveOtherSorts()) {\n        return [nextSort];\n      }\n\n      const hasCurrentColumn = sorting.some(item => item.id === columnId);\n      if (!hasCurrentColumn) {\n        return [...sorting, nextSort];\n      }\n\n      return sorting.map(item => {\n        if (item.id !== columnId) {\n          return item;\n        }\n\n        return nextSort;\n      });\n    });\n  }\n\n  private _shouldPreserveOtherSorts(): boolean {\n    return this.zEnableMultiSort();\n  }\n\n  private _getColumnSortState(): 'asc' | 'desc' | false {\n    const columnId = this.zColumn().id;\n    const tableSort = this.zSortingState().find(item => item.id === columnId);\n    if (tableSort) {\n      return tableSort.desc ? 'desc' : 'asc';\n    }\n\n    return this.zColumn().getIsSorted();\n  }\n\n  private _normalizeSortState(value: 'asc' | 'desc' | false | null): 'asc' | 'desc' | false {\n    if (value === 'asc' || value === 'desc') {\n      return value;\n    }\n\n    return false;\n  }\n\n  private _hasLegacyFilterValue(): boolean {\n    const value = this.effectiveFilterValue();\n    if (value === null || value === undefined || value === '') {\n      return false;\n    }\n\n    if (Array.isArray(value)) {\n      return value.some(item => item !== null && item !== undefined && item !== '');\n    }\n\n    if (value && typeof value === 'object' && 'start' in value && 'end' in value) {\n      const range = value as ZDateRange;\n      return !!(range.start || range.end);\n    }\n\n    return true;\n  }\n\n  private _normalizeLegacyFilterValue(value: unknown): unknown {\n    if (this.legacyAdvancedType() === 'range') {\n      if (!Array.isArray(value)) {\n        return undefined;\n      }\n\n      const [min, max] = value;\n      const hasMin = min !== null && min !== undefined && min !== '';\n      const hasMax = max !== null && max !== undefined && max !== '';\n      return hasMin || hasMax ? [min, max] : undefined;\n    }\n\n    if (value && typeof value === 'object' && 'start' in value && 'end' in value) {\n      const range = value as ZDateRange;\n      return range.start || range.end ? range : undefined;\n    }\n\n    if (Array.isArray(value)) {\n      return value.length > 0 ? value : undefined;\n    }\n\n    return value === null || value === '' ? undefined : value;\n  }\n\n  private _syncAppliedStateFromColumn(): void {\n    if (this._appliedFilterConditions() === null) {\n      this._appliedFilterConditions.set(this._normalizeFilterConditions(this.zColumn().getFilterValue()));\n    }\n\n    if (this._appliedLegacyFilterValue() === null) {\n      this._appliedLegacyFilterValue.set({ value: this.zColumn().getFilterValue() });\n    }\n\n    if (this._appliedSortState() === null) {\n      this._appliedSortState.set(this._getColumnSortState());\n    }\n  }\n}\n","import { 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, type ZTooltipContent } from '@shival99/z-ui/components/z-tooltip';\nimport { ZSafeHtmlPipe } from '@shival99/z-ui/pipes';\nimport { ZTranslateService } from '@shival99/z-ui/services';\nimport { type ZTableIconPart } from '../z-table.types';\nimport { parseIconString, stripIconSyntax } from '../z-table.util';\n\n@Component({\n  selector: 'z-table-icon-text',\n  imports: [ZIconComponent, ZTooltipDirective, ZSafeHtmlPipe],\n  standalone: true,\n  template: `\n    <span class=\"z-table-icon-text-inner\">\n      @for (part of translatedParts(); track $index) {\n        @if (part.type === 'icon') {\n          <z-icon\n            [class]=\"'shrink-0 ' + (part.class ?? '')\"\n            [zType]=\"$any(part.value)\"\n            [zSize]=\"$any(part.size ?? 14)\"\n            [zStrokeWidth]=\"part.strokeWidth ?? 1.5\"\n          />\n        } @else {\n          <span\n            class=\"truncate select-text\"\n            z-tooltip\n            [zContent]=\"tooltipContent()\"\n            [zTriggerElement]=\"triggerEl()\"\n            [innerHTML]=\"part.value | zSafeHtml\"\n          ></span>\n        }\n      }\n    </span>\n  `,\n  styles: `\n    :host {\n      display: inline-flex;\n      align-items: center;\n      min-width: 0;\n      max-width: 100%;\n    }\n\n    .z-table-icon-text-inner {\n      display: inline-flex;\n      align-items: center;\n      gap: 0.25rem;\n      line-height: 1.2;\n      min-width: 0;\n      max-width: 100%;\n    }\n\n    span.truncate {\n      overflow: hidden;\n      text-overflow: ellipsis;\n      white-space: nowrap;\n    }\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ZTableIconTextComponent {\n  public readonly zText = input<string>('');\n  public readonly zTooltip = input<ZTooltipContent | ZTooltipConfig>('');\n  public readonly zTriggerElement = input<HTMLElement | null>(null);\n\n  private readonly _hostEl = inject(ElementRef).nativeElement;\n  private readonly _zTranslate = inject(ZTranslateService);\n\n  protected readonly triggerEl = computed(() => this.zTriggerElement() ?? this._hostEl);\n  protected readonly translatedParts = computed<ZTableIconPart[]>(() => {\n    this._zTranslate.currentLang();\n    const parts = parseIconString(this.zText());\n    return parts.map(part => {\n      if (part.type === 'text') {\n        const trimmedValue = part.value.trim();\n        return { ...part, value: this._zTranslate.instant(trimmedValue) };\n      }\n      return part;\n    });\n  });\n\n  protected readonly tooltipContent = computed<ZTooltipContent>(() => {\n    this._zTranslate.currentLang();\n    const tooltip = this.zTooltip();\n    if (tooltip) {\n      if (typeof tooltip === 'string') {\n        return stripIconSyntax(this._zTranslate.instant(tooltip.trim()));\n      }\n\n      if (!('content' in tooltip)) {\n        return tooltip as ZTooltipContent;\n      }\n\n      if (tooltip.content && typeof tooltip.content === 'string') {\n        return stripIconSyntax(this._zTranslate.instant(tooltip.content.trim()));\n      }\n\n      if (tooltip.content) {\n        return tooltip.content;\n      }\n    }\n    return stripIconSyntax(this._zTranslate.instant(this.zText().trim()));\n  });\n}\n","import { DOCUMENT } from '@angular/common';\nimport { inject, Injectable, NgZone, OnDestroy } from '@angular/core';\nimport {\n  Z_TABLE_DRAG_AUTO_SCROLL_MARGIN,\n  Z_TABLE_DRAG_AUTO_SCROLL_MAX_SPEED,\n  Z_TABLE_DRAG_THRESHOLD,\n} from '../z-table.define';\nimport type {\n  ZTableDragData,\n  ZTableDragDropData,\n  ZTableDragMonitor,\n  ZTableDragSession,\n  ZTableDropEdge,\n  ZTableDropTarget,\n  ZTableScrollContainer,\n} from '../z-table.types';\n\n@Injectable()\nexport class ZTableDragService implements OnDestroy {\n  private readonly _document = inject(DOCUMENT);\n  private readonly _zone = inject(NgZone);\n  private readonly _dropTargets = new Set<ZTableDropTarget>();\n  private readonly _monitors = new Set<ZTableDragMonitor>();\n  private readonly _scrollContainers = new Set<ZTableScrollContainer>();\n  private _session: ZTableDragSession | null = null;\n  private _autoScrollFrame: number | null = null;\n  private _targetRefreshFrame: number | null = null;\n\n  public start(event: PointerEvent, element: HTMLElement, source: ZTableDragData): void {\n    if (event.button !== 0 || !event.isPrimary || this._session) {\n      return;\n    }\n\n    const bounds = element.getBoundingClientRect();\n    this._session = {\n      source,\n      sourceElement: element,\n      pointerId: event.pointerId,\n      startX: event.clientX,\n      startY: event.clientY,\n      clientX: event.clientX,\n      clientY: event.clientY,\n      directionY: 0,\n      offsetX: event.clientX - bounds.left,\n      offsetY: event.clientY - bounds.top,\n      active: false,\n      preview: null,\n      placeholder: null,\n      target: null,\n      edge: null,\n    };\n\n    this._document.addEventListener('pointermove', this._handlePointerMove, true);\n    this._document.addEventListener('pointerup', this._handlePointerUp, true);\n    this._document.addEventListener('pointercancel', this._handlePointerCancel, true);\n    this._document.addEventListener('keydown', this._handleKeydown, true);\n    this._document.addEventListener('scroll', this._handleScroll, true);\n  }\n\n  public registerDropTarget(target: ZTableDropTarget): () => void {\n    this._dropTargets.add(target);\n    return () => {\n      this._dropTargets.delete(target);\n      if (this._session?.target === target) {\n        this._clearTarget();\n      }\n    };\n  }\n\n  public registerMonitor(monitor: ZTableDragMonitor): () => void {\n    this._monitors.add(monitor);\n    return () => this._monitors.delete(monitor);\n  }\n\n  public registerScrollContainer(container: ZTableScrollContainer): () => void {\n    this._scrollContainers.add(container);\n    return () => this._scrollContainers.delete(container);\n  }\n\n  public ngOnDestroy(): void {\n    this._finish();\n    this._dropTargets.clear();\n    this._monitors.clear();\n    this._scrollContainers.clear();\n  }\n\n  private readonly _handlePointerMove = (event: PointerEvent): void => {\n    const session = this._session;\n    if (!session || event.pointerId !== session.pointerId) {\n      return;\n    }\n\n    session.directionY = Math.sign(event.clientY - session.clientY) as -1 | 0 | 1;\n    session.clientX = event.clientX;\n    session.clientY = event.clientY;\n\n    if (!session.active && !this._hasPassedThreshold(session)) {\n      return;\n    }\n\n    event.preventDefault();\n    if (!session.active) {\n      this._activate(session);\n    }\n\n    this._movePreview(session);\n    this._updateTarget();\n  };\n\n  private readonly _handlePointerUp = (event: PointerEvent): void => {\n    const session = this._session;\n    if (!session || event.pointerId !== session.pointerId) {\n      return;\n    }\n\n    if (session.active && session.target && session.edge) {\n      const dropEvent: ZTableDragDropData = {\n        source: session.source,\n        target: session.target.getData(),\n        edge: session.edge,\n      };\n      this._zone.run(() => {\n        for (const monitor of this._monitors) {\n          monitor.onDrop?.(dropEvent);\n        }\n      });\n    }\n\n    this._finish();\n  };\n\n  private readonly _handlePointerCancel = (event: PointerEvent): void => {\n    if (event.pointerId === this._session?.pointerId) {\n      this._finish();\n    }\n  };\n\n  private readonly _handleKeydown = (event: KeyboardEvent): void => {\n    if (event.key === 'Escape') {\n      this._finish();\n    }\n  };\n\n  private readonly _handleScroll = (): void => {\n    if (!this._session?.active || this._targetRefreshFrame !== null) {\n      return;\n    }\n\n    this._targetRefreshFrame = requestAnimationFrame(() => {\n      this._targetRefreshFrame = null;\n      this._updateTarget();\n    });\n  };\n\n  private _hasPassedThreshold(session: ZTableDragSession): boolean {\n    return (\n      Math.abs(session.clientX - session.startX) >= Z_TABLE_DRAG_THRESHOLD ||\n      Math.abs(session.clientY - session.startY) >= Z_TABLE_DRAG_THRESHOLD\n    );\n  }\n\n  private _activate(session: ZTableDragSession): void {\n    session.active = true;\n    session.preview = this._createPreview(session);\n    session.sourceElement.classList.add('z-table-drag-source');\n    this._document.body.classList.add('z-table-pointer-dragging');\n    this._zone.run(() => {\n      for (const monitor of this._monitors) {\n        monitor.onDragStart?.(session.source);\n      }\n    });\n    this._startAutoScroll();\n  }\n\n  private _createPreview(session: ZTableDragSession): HTMLElement {\n    const bounds = session.sourceElement.getBoundingClientRect();\n    const preview = this._document.createElement('div');\n    const clone = session.sourceElement.cloneNode(true) as HTMLElement;\n    preview.className = 'z-table-drag-preview';\n    this._copyAngularScopeAttributes(session.sourceElement, preview);\n    preview.style.position = 'fixed';\n    preview.style.top = '0';\n    preview.style.left = '0';\n    preview.style.width = `${bounds.width}px`;\n    preview.style.height = `${bounds.height}px`;\n    preview.style.pointerEvents = 'none';\n    preview.style.zIndex = '10000';\n    preview.style.overflow = 'hidden';\n\n    clone.removeAttribute('id');\n    for (const descendant of Array.from(clone.querySelectorAll('[id]'))) {\n      descendant.removeAttribute('id');\n    }\n    clone.classList.remove('z-table-drag-source');\n    clone.style.position = 'static';\n    clone.style.inset = 'auto';\n    clone.style.transform = 'none';\n    clone.style.width = `${bounds.width}px`;\n\n    if (session.sourceElement instanceof HTMLTableRowElement) {\n      const table = this._document.createElement('table');\n      const body = this._document.createElement('tbody');\n      preview.classList.add('z-table-drag-preview-row');\n      table.style.width = `${bounds.width}px`;\n      table.style.height = `${bounds.height}px`;\n      table.style.tableLayout = 'fixed';\n      table.style.borderCollapse = 'separate';\n      table.style.borderSpacing = '0';\n      clone.style.height = `${bounds.height}px`;\n      this._syncTableRowPreviewCells(session.sourceElement, clone as HTMLTableRowElement);\n      body.append(clone);\n      table.append(body);\n      preview.append(table);\n    }\n\n    if (!(session.sourceElement instanceof HTMLTableRowElement)) {\n      preview.append(clone);\n    }\n\n    this._document.body.append(preview);\n    this._movePreview(session);\n    return preview;\n  }\n\n  private _syncTableRowPreviewCells(source: HTMLTableRowElement, clone: HTMLTableRowElement): void {\n    const sourceCells = Array.from(source.cells);\n    const cloneCells = Array.from(clone.cells);\n\n    for (let index = 0; index < sourceCells.length; index++) {\n      const sourceCell = sourceCells[index];\n      const cloneCell = cloneCells[index];\n      if (!cloneCell) {\n        continue;\n      }\n\n      const bounds = sourceCell.getBoundingClientRect();\n      cloneCell.style.width = `${bounds.width}px`;\n      cloneCell.style.minWidth = `${bounds.width}px`;\n      cloneCell.style.maxWidth = `${bounds.width}px`;\n      cloneCell.style.verticalAlign = 'middle';\n    }\n  }\n\n  private _movePreview(session: ZTableDragSession): void {\n    if (!session.preview) {\n      return;\n    }\n\n    const x = session.clientX - session.offsetX;\n    const y = session.clientY - session.offsetY;\n    session.preview.style.transform = `translate3d(${x}px, ${y}px, 0)`;\n  }\n\n  private _updateTarget(): void {\n    const session = this._session;\n    if (!session?.active) {\n      return;\n    }\n\n    const element = this._document.elementFromPoint(session.clientX, session.clientY);\n    const directTarget = this._findTarget(element, session.source);\n    const boundaryTarget = directTarget ? null : this._findNearestTarget(session);\n    const target = directTarget ?? boundaryTarget?.target ?? null;\n    if (!target) {\n      if (\n        session.target &&\n        session.edge &&\n        this._containsPoint(session.placeholder, session.clientX, session.clientY)\n      ) {\n        return;\n      }\n\n      this._clearTarget();\n      return;\n    }\n\n    const edge = boundaryTarget?.edge ?? this._resolveTargetEdge(target.element, session);\n    if (session.target === target && session.edge === edge) {\n      return;\n    }\n\n    this._clearTarget();\n    session.target = target;\n    session.edge = edge;\n    session.placeholder = this._createPlaceholder(target.element, edge, session.source.entity);\n  }\n\n  private _findTarget(element: Element | null, source: ZTableDragData): ZTableDropTarget | null {\n    let current = element;\n    while (current instanceof HTMLElement) {\n      for (const target of this._dropTargets) {\n        if (target.element !== current || target.isDisabled()) {\n          continue;\n        }\n\n        const data = target.getData();\n        if (data.tableId === source.tableId && data.entity === source.entity && data.itemId !== source.itemId) {\n          return target;\n        }\n      }\n      current = current.parentElement;\n    }\n\n    return null;\n  }\n\n  private _findNearestTarget(session: ZTableDragSession): { target: ZTableDropTarget; edge: ZTableDropEdge } | null {\n    const targets = this._getCompatibleTargets(session.source)\n      .map(target => ({ target, bounds: target.element.getBoundingClientRect() }))\n      .filter(({ bounds }) => bounds.width > 0 && bounds.height > 0)\n      .sort((left, right) => left.bounds.top - right.bounds.top);\n    if (targets.length === 0) {\n      return null;\n    }\n\n    const left = Math.min(...targets.map(({ bounds }) => bounds.left));\n    const right = Math.max(...targets.map(({ bounds }) => bounds.right));\n    if (session.clientX < left || session.clientX > right) {\n      return null;\n    }\n\n    const first = targets[0];\n    if (session.clientY <= first.bounds.top) {\n      const edge = first.target.element.classList.contains('z-virtual-row')\n        ? this._resolveTargetEdge(first.target.element, session)\n        : 'top';\n      return { target: first.target, edge };\n    }\n\n    const last = targets[targets.length - 1];\n    if (session.clientY >= last.bounds.bottom) {\n      const edge = last.target.element.classList.contains('z-virtual-row')\n        ? this._resolveTargetEdge(last.target.element, session)\n        : 'bottom';\n      return { target: last.target, edge };\n    }\n\n    const nearest = targets.reduce((closest, candidate) => {\n      const closestDistance = Math.abs(session.clientY - (closest.bounds.top + closest.bounds.height / 2));\n      const candidateDistance = Math.abs(session.clientY - (candidate.bounds.top + candidate.bounds.height / 2));\n      return candidateDistance < closestDistance ? candidate : closest;\n    });\n    const edge = this._resolveTargetEdge(nearest.target.element, session);\n    return { target: nearest.target, edge };\n  }\n\n  private _getCompatibleTargets(source: ZTableDragData): ZTableDropTarget[] {\n    return [...this._dropTargets].filter(target => {\n      if (!target.element.isConnected || target.isDisabled()) {\n        return false;\n      }\n\n      const data = target.getData();\n      return data.tableId === source.tableId && data.entity === source.entity && data.itemId !== source.itemId;\n    });\n  }\n\n  private _resolveTargetEdge(target: HTMLElement, session: ZTableDragSession): ZTableDropEdge {\n    const bounds = target.getBoundingClientRect();\n    if (target.classList.contains('z-virtual-row')) {\n      const sourceIndex = this._getVirtualIndex(session.sourceElement);\n      const targetIndex = this._getVirtualIndex(target);\n      if (sourceIndex !== null && targetIndex !== null && sourceIndex !== targetIndex) {\n        return targetIndex < sourceIndex ? 'top' : 'bottom';\n      }\n    }\n    if (session.source.entity !== 'row') {\n      return session.clientY < bounds.top + bounds.height / 2 ? 'top' : 'bottom';\n    }\n\n    let thresholdRatio = 0.5;\n    if (session.directionY > 0) {\n      thresholdRatio = 0.35;\n    }\n    if (session.directionY < 0) {\n      thresholdRatio = 0.65;\n    }\n\n    return session.clientY < bounds.top + bounds.height * thresholdRatio ? 'top' : 'bottom';\n  }\n\n  private _getVirtualIndex(element: HTMLElement): number | null {\n    const index = Number(element.dataset['index']);\n    return Number.isInteger(index) ? index : null;\n  }\n\n  private _createPlaceholder(target: HTMLElement, edge: ZTableDropEdge, entity: ZTableDragData['entity']): HTMLElement {\n    if (target instanceof HTMLTableRowElement) {\n      return this._createTableRowPlaceholder(target, edge);\n    }\n\n    const placeholder = this._document.createElement('div');\n    placeholder.className = 'z-table-drag-placeholder';\n    this._copyAngularScopeAttributes(target, placeholder);\n    placeholder.style.height = `${target.getBoundingClientRect().height}px`;\n\n    if (entity === 'row' && target.classList.contains('z-virtual-row')) {\n      placeholder.classList.add('z-table-drag-placeholder-virtual');\n      placeholder.style.transform = target.style.transform;\n      const bounds = target.getBoundingClientRect();\n      placeholder.style.translate = edge === 'bottom' ? `0 ${bounds.height}px` : '0 0';\n      placeholder.style.width = `${bounds.width}px`;\n      target.parentElement?.append(placeholder);\n      return placeholder;\n    }\n\n    target.parentElement?.insertBefore(placeholder, edge === 'top' ? target : target.nextSibling);\n    return placeholder;\n  }\n\n  private _createTableRowPlaceholder(target: HTMLTableRowElement, edge: ZTableDropEdge): HTMLElement {\n    const placeholder = this._document.createElement('tr');\n    const cell = this._document.createElement('td');\n    const inner = this._document.createElement('div');\n    placeholder.className = 'z-table-drag-placeholder-row';\n    this._copyAngularScopeAttributes(target, placeholder, cell, inner);\n    cell.colSpan = Math.max(1, target.cells.length);\n    inner.className = 'z-table-drag-placeholder';\n    inner.style.height = `${target.getBoundingClientRect().height}px`;\n    cell.append(inner);\n    placeholder.append(cell);\n    target.parentElement?.insertBefore(placeholder, edge === 'top' ? target : target.nextSibling);\n    return placeholder;\n  }\n\n  private _containsPoint(element: HTMLElement | null, clientX: number, clientY: number): boolean {\n    if (!element) {\n      return false;\n    }\n\n    const bounds = element.getBoundingClientRect();\n    return clientX >= bounds.left && clientX <= bounds.right && clientY >= bounds.top && clientY <= bounds.bottom;\n  }\n\n  private _copyAngularScopeAttributes(source: HTMLElement, ...targets: HTMLElement[]): void {\n    for (const attribute of Array.from(source.attributes)) {\n      if (!attribute.name.startsWith('_ngcontent')) {\n        continue;\n      }\n\n      for (const target of targets) {\n        target.setAttribute(attribute.name, '');\n      }\n    }\n  }\n\n  private _startAutoScroll(): void {\n    const tick = (): void => {\n      const session = this._session;\n      if (!session?.active) {\n        this._autoScrollFrame = null;\n        return;\n      }\n\n      const container = this._getScrollContainer(session.source);\n      if (container) {\n        const speed = this._getAutoScrollSpeed(container.element, session.clientY);\n        if (speed !== 0) {\n          container.element.scrollTop += speed;\n          this._updateTarget();\n        }\n      }\n\n      this._autoScrollFrame = requestAnimationFrame(tick);\n    };\n\n    this._autoScrollFrame = requestAnimationFrame(tick);\n  }\n\n  private _getScrollContainer(source: ZTableDragData): ZTableScrollContainer | null {\n    for (const container of this._scrollContainers) {\n      if (container.tableId === source.tableId && container.entity === source.entity && container.isEnabled()) {\n        return container;\n      }\n    }\n\n    return null;\n  }\n\n  private _getAutoScrollSpeed(element: HTMLElement, clientY: number): number {\n    const bounds = element.getBoundingClientRect();\n    if (clientY < bounds.top + Z_TABLE_DRAG_AUTO_SCROLL_MARGIN) {\n      const ratio = Math.min(\n        1,\n        (bounds.top + Z_TABLE_DRAG_AUTO_SCROLL_MARGIN - clientY) / Z_TABLE_DRAG_AUTO_SCROLL_MARGIN\n      );\n      return -Math.ceil(Z_TABLE_DRAG_AUTO_SCROLL_MAX_SPEED * ratio);\n    }\n\n    if (clientY > bounds.bottom - Z_TABLE_DRAG_AUTO_SCROLL_MARGIN) {\n      const ratio = Math.min(\n        1,\n        (clientY - (bounds.bottom - Z_TABLE_DRAG_AUTO_SCROLL_MARGIN)) / Z_TABLE_DRAG_AUTO_SCROLL_MARGIN\n      );\n      return Math.ceil(Z_TABLE_DRAG_AUTO_SCROLL_MAX_SPEED * ratio);\n    }\n\n    return 0;\n  }\n\n  private _clearTarget(): void {\n    const session = this._session;\n    session?.placeholder?.remove();\n    if (session) {\n      session.placeholder = null;\n      session.target = null;\n      session.edge = null;\n    }\n  }\n\n  private _finish(): void {\n    const session = this._session;\n    if (!session) {\n      return;\n    }\n\n    this._clearTarget();\n    session.preview?.remove();\n    session.sourceElement.classList.remove('z-table-drag-source');\n    this._document.body.classList.remove('z-table-pointer-dragging');\n    this._removeDocumentListeners();\n\n    if (this._autoScrollFrame !== null) {\n      cancelAnimationFrame(this._autoScrollFrame);\n      this._autoScrollFrame = null;\n    }\n    if (this._targetRefreshFrame !== null) {\n      cancelAnimationFrame(this._targetRefreshFrame);\n      this._targetRefreshFrame = null;\n    }\n\n    this._session = null;\n    if (session.active) {\n      this._zone.run(() => {\n        for (const monitor of this._monitors) {\n          monitor.onDragEnd?.(session.source);\n        }\n      });\n    }\n  }\n\n  private _removeDocumentListeners(): void {\n    this._document.removeEventListener('pointermove', this._handlePointerMove, true);\n    this._document.removeEventListener('pointerup', this._handlePointerUp, true);\n    this._document.removeEventListener('pointercancel', this._handlePointerCancel, true);\n    this._document.removeEventListener('keydown', this._handleKeydown, true);\n    this._document.removeEventListener('scroll', this._handleScroll, true);\n  }\n}\n","import { Directive, effect, ElementRef, inject, input, output } from '@angular/core';\nimport { ZTableDragService } from './z-table-drag.service';\nimport type { ZTableDragData, ZTableDragDropData, ZTableDragEntity } from '../z-table.types';\n\n@Directive({\n  selector: '[z-table-draggable]',\n  standalone: true,\n  host: {\n    '(pointerdown)': '_onPointerDown($event)',\n  },\n})\nexport class ZTableDraggableDirective {\n  public readonly zTableDraggable = input.required<ZTableDragEntity>({ alias: 'z-table-draggable' });\n  public readonly zTableDragTableId = input.required<string>({ alias: 'z-table-drag-table-id' });\n  public readonly zTableDragItemId = input.required<string>({ alias: 'z-table-drag-item-id' });\n  public readonly zTableDragDisabled = input(false, { alias: 'z-table-drag-disabled' });\n  public readonly zTableDragHandle = input('[data-z-table-drag-handle]', { alias: 'z-table-drag-handle' });\n\n  private readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private readonly _dragService = inject(ZTableDragService);\n\n  protected _onPointerDown(event: PointerEvent): void {\n    if (this.zTableDragDisabled()) {\n      return;\n    }\n\n    const { target } = event;\n    if (!(target instanceof Element) || !target.closest(this.zTableDragHandle())) {\n      return;\n    }\n\n    this._dragService.start(event, this._elementRef.nativeElement, this._getDragData());\n  }\n\n  private _getDragData(): ZTableDragData {\n    return {\n      tableId: this.zTableDragTableId(),\n      entity: this.zTableDraggable(),\n      itemId: this.zTableDragItemId(),\n    };\n  }\n}\n\n@Directive({\n  selector: '[z-table-drop-target]',\n  standalone: true,\n})\nexport class ZTableDropTargetDirective {\n  public readonly zTableDropTarget = input.required<ZTableDragEntity>({ alias: 'z-table-drop-target' });\n  public readonly zTableDropTableId = input.required<string>({ alias: 'z-table-drop-table-id' });\n  public readonly zTableDropItemId = input.required<string>({ alias: 'z-table-drop-item-id' });\n  public readonly zTableDropDisabled = input(false, { alias: 'z-table-drop-disabled' });\n  public readonly zTableDropped = output<ZTableDragDropData>();\n\n  private readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private readonly _dragService = inject(ZTableDragService);\n\n  constructor() {\n    effect(onCleanup => {\n      const element = this._elementRef.nativeElement;\n      const cleanup = this._dragService.registerDropTarget({\n        element,\n        getData: () => this._getDragData(),\n        isDisabled: () => this.zTableDropDisabled(),\n      });\n      const cleanupMonitor = this._dragService.registerMonitor({\n        onDrop: event => {\n          const target = this._getDragData();\n          if (\n            event.target.tableId === target.tableId &&\n            event.target.entity === target.entity &&\n            event.target.itemId === target.itemId\n          ) {\n            this.zTableDropped.emit(event);\n          }\n        },\n      });\n\n      onCleanup(() => {\n        cleanupMonitor();\n        cleanup();\n      });\n    });\n  }\n\n  private _getDragData(): ZTableDragData {\n    return {\n      tableId: this.zTableDropTableId(),\n      entity: this.zTableDropTarget(),\n      itemId: this.zTableDropItemId(),\n    };\n  }\n}\n","import { Directive, ElementRef, Renderer2, input, inject } from '@angular/core';\n\n@Directive({\n  selector: '[z-table-row-hover], [zTableRowHover]',\n  standalone: true,\n  host: {\n    '(mouseenter)': 'onMouseEnter()',\n    '(mouseleave)': 'onMouseLeave()',\n  },\n})\n/**\n * EN: Applies row-hover class to hovered row cells and to spanning cells that cover that row.\n * VI: Áp class hover cho cell của row đang hover và cả các cell có rowSpan bao phủ row đó.\n */\nexport class ZTableRowHoverDirective {\n  public readonly zTableRowHover = input<HTMLTableElement | null>(null);\n\n  private readonly _elementRef = inject(ElementRef<HTMLTableRowElement>);\n  private readonly _renderer = inject(Renderer2);\n  public onMouseEnter(): void {\n    this._handleHover(true);\n  }\n\n  public onMouseLeave(): void {\n    this._handleHover(false);\n  }\n\n  private _handleHover(isHover: boolean): void {\n    const row = this._elementRef.nativeElement;\n    const table = this.zTableRowHover() || this._findParentTable(row);\n\n    if (!table) {\n      return;\n    }\n\n    const cellsInCurrentRow = Array.from(row.children) as HTMLTableCellElement[];\n    cellsInCurrentRow.forEach(cell => {\n      this._toggleCellHover(cell, isHover);\n    });\n\n    const tbody = table.querySelector('tbody');\n    if (!tbody) {\n      return;\n    }\n\n    const allRows = Array.from(tbody.querySelectorAll('tr')) as HTMLTableRowElement[];\n    const currentRowIndex = allRows.indexOf(row);\n\n    if (currentRowIndex === -1) {\n      return;\n    }\n\n    const grid: {\n      cell: HTMLTableCellElement;\n      rowStart: number;\n      rowEnd: number;\n    }[] = [];\n\n    for (let rowIdx = 0; rowIdx < allRows.length; rowIdx++) {\n      const r = allRows[rowIdx];\n      const cellsInRow = Array.from(r.children) as HTMLTableCellElement[];\n\n      cellsInRow.forEach(cell => {\n        const rowSpan = parseInt(cell.getAttribute('rowspan') || '1', 10);\n        const rowEnd = rowIdx + rowSpan - 1;\n        grid.push({\n          cell,\n          rowStart: rowIdx,\n          rowEnd: rowEnd,\n        });\n      });\n    }\n\n    grid.forEach(item => {\n      const coverCurrentRow = item.rowStart < currentRowIndex && item.rowEnd >= currentRowIndex;\n      if (!coverCurrentRow) {\n        return;\n      }\n\n      this._toggleCellHover(item.cell, isHover);\n    });\n  }\n\n  private _toggleCellHover(cell: HTMLTableCellElement, isHover: boolean): void {\n    if (isHover) {\n      this._renderer.addClass(cell, 'z-row-hover');\n      return;\n    }\n\n    this._renderer.removeClass(cell, 'z-row-hover');\n  }\n\n  private _findParentTable(element: HTMLElement): HTMLTableElement | null {\n    let current = element.parentElement;\n    while (current) {\n      if (current.tagName === 'TABLE') {\n        return current as HTMLTableElement;\n      }\n      current = current.parentElement;\n    }\n    return null;\n  }\n}\n","import { Directive, ElementRef, inject, input, OnDestroy, AfterViewInit, NgZone } from '@angular/core';\nimport { Header } from '@tanstack/angular-table';\n\n@Directive({\n  selector: '[z-table-resize],[zTableResize]',\n  standalone: true,\n})\n/**\n * EN: Binds mouse/touch events to TanStack header resize handlers for column resizing.\n * VI: Gắn sự kiện mouse/touch vào resize handler của TanStack header để đổi kích thước cột.\n */\nexport class ZTableResizeDirective<T> implements AfterViewInit, OnDestroy {\n  public readonly zTableResize = input.required<Header<T, unknown>>();\n\n  private readonly _elementRef = inject(ElementRef<HTMLElement>);\n  private readonly _ngZone = inject(NgZone);\n\n  private _mousedownHandler: ((event: MouseEvent) => void) | null = null;\n  private _touchstartHandler: ((event: TouchEvent) => void) | null = null;\n\n  ngAfterViewInit(): void {\n    const element = this._elementRef.nativeElement;\n    const header = this.zTableResize();\n    this._mousedownHandler = (event: MouseEvent) => {\n      this._ngZone.run(() => {\n        const resizeHandler = header.getResizeHandler();\n        resizeHandler(event);\n      });\n    };\n\n    this._touchstartHandler = (event: TouchEvent) => {\n      this._ngZone.run(() => {\n        const resizeHandler = header.getResizeHandler();\n        resizeHandler(event);\n      });\n    };\n\n    element.addEventListener('mousedown', this._mousedownHandler);\n    element.addEventListener('touchstart', this._touchstartHandler, { passive: true });\n  }\n\n  ngOnDestroy(): void {\n    const element = this._elementRef.nativeElement;\n\n    if (this._mousedownHandler) {\n      element.removeEventListener('mousedown', this._mousedownHandler);\n      this._mousedownHandler = null;\n    }\n\n    if (this._touchstartHandler) {\n      element.removeEventListener('touchstart', this._touchstartHandler);\n      this._touchstartHandler = null;\n    }\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { Cell, Row } from '@tanstack/angular-table';\nimport type { ZTableColumnConfig } from '../z-table.types';\nimport { calculateCellRowSpan, findColumnConfig, isBodyConfig } from '../z-table.util';\n\n@Pipe({\n  name: 'zTableCellBottom',\n  standalone: true,\n  pure: true,\n})\n/**\n * EN: Determines whether a body cell reaches the table bottom after applying rowSpan rules.\n * VI: Xác định cell body có chạm đáy bảng hay không sau khi áp dụng quy tắc rowSpan.\n */\nexport class ZTableCellBottomPipe implements PipeTransform {\n  transform<T>(cell: Cell<T, unknown>, columns: ZTableColumnConfig<T>[], allRows: Row<T>[]): boolean {\n    if (allRows.length === 0) {\n      return false;\n    }\n\n    const currentRowIndex = allRows.findIndex(r => r.id === cell.row.id);\n    if (currentRowIndex === -1) {\n      return false;\n    }\n\n    const lastRowIndex = allRows.length - 1;\n    if (currentRowIndex === lastRowIndex) {\n      return true;\n    }\n\n    const columnConfig = findColumnConfig(cell.column.id, columns);\n    if (!columnConfig?.body || !isBodyConfig(columnConfig.body)) {\n      return false;\n    }\n\n    if (!columnConfig.body.rowSpan) {\n      return false;\n    }\n\n    const actualRowSpan = calculateCellRowSpan(cell, columnConfig, allRows, currentRowIndex) ?? 1;\n    return currentRowIndex + actualRowSpan - 1 >= lastRowIndex;\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { ZTableColumnConfig } from '../z-table.types';\nimport { findColumnConfig, isBodyConfig } from '../z-table.util';\n\n@Pipe({\n  name: 'zTableCellClickable',\n  standalone: true,\n  pure: true,\n})\n/**\n * EN: Resolves whether click interaction is enabled for a body cell from column configuration.\n * VI: Xác định cell body có được phép click hay không dựa theo cấu hình cột.\n */\nexport class ZTableCellClickablePipe implements PipeTransform {\n  public transform<T>(columnId: string, columns: ZTableColumnConfig<T>[]): boolean {\n    const columnConfig = findColumnConfig(columnId, columns);\n    if (!columnConfig) {\n      return false;\n    }\n\n    if (!isBodyConfig(columnConfig.body)) {\n      return false;\n    }\n\n    return columnConfig.body.enabledClick === true;\n  }\n}\n","import { Pipe, PipeTransform, TemplateRef } from '@angular/core';\nimport { zTagVariants } from '@shival99/z-ui/components/z-tags';\nimport type { ZTooltipConfig } from '@shival99/z-ui/components/z-tooltip';\nimport { zMergeClasses } from '@shival99/z-ui/utils';\nimport type { Cell } from '@tanstack/angular-table';\nimport { Z_TABLE_BODY_ALIGN_MAP, Z_TABLE_TAG_ALIGN_MAP } from '../z-table.define';\nimport type { ZTableColumnConfig, ZTableConfig, ZTablePopoverConfig } from '../z-table.types';\nimport { findColumnConfig, getBodyConfig } from '../z-table.util';\n\n@Pipe({\n  name: 'zTableCellConfig',\n  standalone: true,\n  pure: true,\n})\n/**\n * EN: Maps body cell configuration into template-ready class/style/tooltip values.\n * VI: Ánh xạ cấu hình cell body thành giá trị class/style/tooltip để render template.\n */\nexport class ZTableCellConfigPipe implements PipeTransform {\n  transform<T>(\n    cell: Cell<T, unknown>,\n    config: ZTableConfig<T> | ZTableColumnConfig<T>[],\n    property: 'cellClass' | 'contentClass'\n  ): string;\n  transform<T>(\n    cell: Cell<T, unknown>,\n    config: ZTableConfig<T> | ZTableColumnConfig<T>[],\n    property: 'cellStyle' | 'contentStyle'\n  ): Record<string, string>;\n  transform<T>(\n    cell: Cell<T, unknown>,\n    config: ZTableConfig<T> | ZTableColumnConfig<T>[],\n    property: 'contentTooltip'\n  ): string | ZTooltipConfig | TemplateRef<unknown>;\n  transform<T>(\n    cell: Cell<T, unknown>,\n    config: ZTableConfig<T> | ZTableColumnConfig<T>[],\n    property: 'contentPopover'\n  ): string | ZTablePopoverConfig | TemplateRef<unknown>;\n  transform<T>(\n    cell: Cell<T, unknown>,\n    config: ZTableConfig<T> | ZTableColumnConfig<T>[],\n    property: 'cellClass' | 'cellStyle' | 'contentClass' | 'contentStyle' | 'contentTooltip' | 'contentPopover'\n  ): string | Record<string, string> | ZTooltipConfig | ZTablePopoverConfig | TemplateRef<unknown> {\n    const tableConfig = Array.isArray(config) ? undefined : config;\n    const columns = Array.isArray(config) ? config : config.columns;\n    const columnConfig = findColumnConfig(cell.column.id, columns);\n    const bodyConfig = getBodyConfig(columnConfig, cell.getContext());\n    const rowClass =\n      typeof tableConfig?.rowClass === 'function' ? tableConfig.rowClass(cell.row) : tableConfig?.rowClass;\n    const rowStyle =\n      typeof tableConfig?.rowStyle === 'function' ? tableConfig.rowStyle(cell.row) : tableConfig?.rowStyle;\n\n    switch (property) {\n      case 'cellClass':\n        return zMergeClasses(rowClass, this._getCellClass(bodyConfig));\n\n      case 'cellStyle':\n        return { ...rowStyle, ...bodyConfig.style };\n\n      case 'contentClass':\n        return this._getContentClass(bodyConfig);\n\n      case 'contentStyle':\n        return bodyConfig.contentStyle || {};\n\n      case 'contentTooltip':\n        return (bodyConfig.tooltip as string | ZTooltipConfig | TemplateRef<unknown> | undefined) || '';\n\n      case 'contentPopover':\n        return (bodyConfig.popover as string | ZTablePopoverConfig | TemplateRef<unknown> | 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  private _getContentClass<T>(bodyConfig: ReturnType<typeof getBodyConfig<T>>): string {\n    const contentClass = typeof bodyConfig.contentClass === 'string' ? bodyConfig.contentClass : '';\n    const tagColor = typeof bodyConfig.tagColor === 'string' ? bodyConfig.tagColor : 'primary';\n\n    if (bodyConfig.type !== 'tag') {\n      return contentClass;\n    }\n\n    const alignClass = bodyConfig.align ? Z_TABLE_TAG_ALIGN_MAP[bodyConfig.align] : '';\n\n    return zMergeClasses(\n      zTagVariants({\n        zSize: 'default',\n        zColor: tagColor,\n        zClosable: false,\n        zDisabled: false,\n      }),\n      'w-fit rounded-xs px-2.5 py-1 text-[13px] shadow-sm',\n      alignClass,\n      contentClass\n    );\n  }\n}\n","import { formatDate } from '@angular/common';\nimport { Pipe, PipeTransform } from '@angular/core';\nimport type { ZSelectOption } from '@shival99/z-ui/components/z-select';\nimport type { CellContext } from '@tanstack/angular-table';\nimport type {\n  ZResolvedTableEditContentConfig,\n  ZTableColumnConfig,\n  ZTableEditContentConfig,\n  ZTableEditCellInfo,\n  ZTableEditConfig,\n} from '../z-table.types';\nimport { isBodyConfig, findColumnConfig, resolveConfigValue } from '../z-table.util';\n\n@Pipe({\n  name: 'zTableCellEdit',\n  standalone: true,\n  pure: true,\n})\n/**\n * EN: Normalizes edit settings for a cell and returns a consistent edit descriptor.\n * VI: Chuẩn hóa cấu hình edit của cell và trả về mô tả edit theo một format thống nhất.\n */\nexport class ZTableCellEditPipe implements PipeTransform {\n  transform<T>(cell: CellContext<T, unknown>, columns: ZTableColumnConfig<T>[]): ZTableEditCellInfo {\n    const columnConfig = findColumnConfig(cell.column.id, columns);\n    if (!columnConfig) {\n      return { enabled: false, contentEnabled: false, contentConfig: null, type: 'text', config: null };\n    }\n\n    const { body } = columnConfig;\n    if (!isBodyConfig(body)) {\n      return { enabled: false, contentEnabled: false, contentConfig: null, type: 'text', config: null };\n    }\n\n    const { edit, editContent } = body;\n    if (!edit) {\n      const contentConfig = this._resolveContentConfig(editContent, cell.row.original, cell.getValue());\n      return {\n        enabled: false,\n        contentEnabled: contentConfig !== null,\n        contentConfig,\n        type: 'text',\n        config: null,\n      };\n    }\n\n    if (typeof edit === 'boolean') {\n      return {\n        enabled: edit,\n        contentEnabled: false,\n        contentConfig: null,\n        type: 'text',\n        config: { enabled: edit, type: 'text' },\n      };\n    }\n\n    const baseType = typeof edit.type === 'function' ? 'text' : (edit.type ?? 'text');\n    return {\n      enabled: edit.enabled !== false,\n      contentEnabled: false,\n      contentConfig: null,\n      type: baseType,\n      config: edit as ZTableEditConfig<unknown>,\n    };\n  }\n\n  private _resolveContentConfig<T>(\n    config: ZTableEditContentConfig<T> | boolean | undefined,\n    row: T,\n    value: unknown\n  ): ZResolvedTableEditContentConfig | null {\n    if (!config) {\n      return null;\n    }\n\n    if (config === true) {\n      return {\n        type: 'text',\n        displayValue: value === null || value === undefined ? '' : String(value),\n        selectedOptionIndex: -1,\n        options: [],\n        placeholder: '',\n        class: '',\n        style: {},\n        size: 'sm',\n        disabled: false,\n        readonly: false,\n        loading: false,\n        align: 'left',\n        prefix: '',\n        suffix: '',\n        dateFormat: 'DD/MM/YYYY',\n        dateValueType: 'date',\n        minDate: null,\n        maxDate: null,\n        allowClear: true,\n        mask: '',\n        allowNegative: false,\n        thousandSeparator: '',\n        decimalMarker: '.',\n        selectConfig: {},\n        selectMode: 'single',\n        selectShowSearch: true,\n        selectWrap: true,\n        maxTagCount: 3,\n      };\n    }\n\n    if (typeof config !== 'object') {\n      return null;\n    }\n\n    const type = config.type ?? 'text';\n    const options = this._resolveOptions(config, row);\n    const selectedOptionIndex = options.findIndex(option => option.value === value);\n    const displayValue = this._getDisplayValue(type, value, options, config.dateFormat);\n\n    return {\n      type,\n      displayValue,\n      selectedOptionIndex,\n      options,\n      placeholder: typeof config.placeholder === 'function' ? config.placeholder(row) : (config.placeholder ?? ''),\n      class: typeof config.class === 'function' ? config.class(row) : (config.class ?? ''),\n      style: typeof config.style === 'function' ? config.style(row) : (config.style ?? {}),\n      size: config.size ?? 'sm',\n      disabled: resolveConfigValue(config.disabled, row, false),\n      readonly: resolveConfigValue(config.readonly, row, false),\n      loading: resolveConfigValue(config.loading, row, false),\n      align: config.align ?? 'left',\n      prefix: config.prefix ?? '',\n      suffix: config.suffix ?? '',\n      min: config.min,\n      max: config.max,\n      step: config.step,\n      mask: config.mask ?? '',\n      decimalPlaces: config.decimalPlaces,\n      allowNegative: config.allowNegative ?? false,\n      thousandSeparator: config.thousandSeparator,\n      decimalMarker: config.decimalMarker,\n      selectConfig: config.selectConfig ?? {},\n      selectMode: config.selectMode ?? config.mode ?? 'single',\n      selectShowSearch: config.selectShowSearch ?? true,\n      selectWrap: config.selectWrap ?? true,\n      maxTagCount: config.maxTagCount ?? 3,\n      dateFormat: config.dateFormat ?? 'DD/MM/YYYY',\n      dateValueType: config.dateValueType ?? 'date',\n      minDate: config.minDate ?? null,\n      maxDate: config.maxDate ?? null,\n      allowClear: config.allowClear ?? true,\n    };\n  }\n\n  private _resolveOptions<T>(config: ZTableEditContentConfig<T>, row: T): ZSelectOption[] {\n    const rawOptions = typeof config.options === 'function' ? config.options(row) : (config.options ?? []);\n    const { optionLabelKey, optionValueKey } = config;\n    if (!optionLabelKey && !optionValueKey) {\n      return rawOptions as ZSelectOption[];\n    }\n\n    return rawOptions.map(option => this._mapOption(option, optionLabelKey, optionValueKey));\n  }\n\n  private _mapOption(option: unknown, labelKey: string | undefined, valueKey: string | undefined): ZSelectOption {\n    if (typeof option !== 'object' || option === null) {\n      return { label: String(option), value: option };\n    }\n\n    const objectOption = option as Record<string, unknown>;\n    return {\n      label: String(objectOption[labelKey ?? 'label'] ?? ''),\n      value: objectOption[valueKey ?? 'value'],\n    };\n  }\n\n  private _getDisplayValue(\n    type: ZResolvedTableEditContentConfig['type'],\n    value: unknown,\n    options: ZSelectOption[],\n    dateFormatConfig: string | undefined\n  ): string {\n    if (type === 'select') {\n      return this._getSelectDisplayValue(value, options);\n    }\n\n    if (type !== 'date' || !(value instanceof Date)) {\n      return String(value ?? '');\n    }\n\n    const dateFormat = (dateFormatConfig ?? 'DD/MM/YYYY').replace(/YYYY/g, 'yyyy').replace(/DD/g, 'dd');\n    return formatDate(value, dateFormat, 'en-US');\n  }\n\n  private _getSelectDisplayValue(value: unknown, options: ZSelectOption[]): string {\n    if (!Array.isArray(value)) {\n      return options.find(option => option.value === value)?.label ?? String(value ?? '');\n    }\n\n    return value\n      .map(item => options.find(option => option.value === item)?.label ?? String(item ?? ''))\n      .filter(Boolean)\n      .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})\n/**\n * EN: Checks whether a header/body item starts at the left edge in the ordered column list.\n * VI: Kiểm tra header/cell có nằm ở mép trái của danh sách cột đã sắp xếp hay không.\n */\nexport class ZTableCellOffsetPipe implements PipeTransform {\n  /**\n   * Calculate if a cell/header is at the left edge (offset = 0)\n   * Returns true if the cell should have no border-left (it's at the leftmost position)\n   */\n  transform<T>(item: Cell<T, unknown> | Header<T, unknown>, orderedColumns: Column<T>[]): boolean {\n    const columnId = item.column.id;\n    // Find the index of this column in the ordered columns list\n    const columnIndex = orderedColumns.findIndex(col => col.id === columnId);\n    // If it's the first column (index 0), it's at the left edge\n    if (columnIndex === 0) {\n      return true;\n    }\n    // For headers with colSpan, check if any of its leaf columns is the first\n    if ('getLeafHeaders' in item) {\n      const header = item as Header<T, unknown>;\n      const leafHeaders = header.getLeafHeaders();\n\n      for (const leaf of leafHeaders) {\n        const leafIndex = orderedColumns.findIndex(col => col.id === leaf.column.id);\n        if (leafIndex === 0) {\n          return true;\n        }\n      }\n    }\n\n    return false;\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { Cell, Header } from '@tanstack/angular-table';\nimport type { ZTableColumnConfig, ZTableCellPinProperty, ZTableCellType } from '../z-table.types';\nimport { findColumnConfig, getBodyColSpan, getHeaderColSpan, getFooterColSpan } from '../z-table.util';\n\n@Pipe({\n  name: 'zTableCellPin',\n  standalone: true,\n  pure: true,\n})\n/**\n * EN: Detects pin-boundary states (last left, first right, last right) for header/footer cells.\n * VI: Xác định các mốc pin (cuối bên trái, đầu bên phải, cuối bên phải) cho cell header/footer.\n */\nexport class ZTableCellPinPipe implements PipeTransform {\n  transform<T>(\n    item: Header<T, unknown> | Cell<T, unknown>,\n    property: ZTableCellPinProperty,\n    columns?: ZTableColumnConfig<T>[],\n    cellType: ZTableCellType = 'header',\n    bodyCells?: Cell<T, unknown>[]\n  ): boolean {\n    if (cellType === 'body' && this._isBodyCell(item)) {\n      return this._bodyCellPin(item, property, columns ?? [], bodyCells ?? []);\n    }\n\n    if (this._isBodyCell(item)) {\n      return false;\n    }\n\n    switch (property) {\n      case 'isLeftPinned':\n        return this._pinDirection(item) === 'left';\n\n      case 'isRightPinned':\n        return this._pinDirection(item) === 'right';\n\n      case 'isLastLeftPinned':\n        return this._isLastLeftPinned(item, columns ?? [], cellType);\n\n      case 'isFirstRightPinned':\n        return this._isFirstRightPinned(item, columns ?? [], cellType);\n\n      case 'isLastRightPinned':\n        return this._isLastRightPinned(item, columns ?? [], cellType);\n\n      default:\n        return false;\n    }\n  }\n\n  private _isBodyCell<T>(item: Header<T, unknown> | Cell<T, unknown>): item is Cell<T, unknown> {\n    return 'getContext' in item && 'row' in item;\n  }\n\n  private _bodyCellPin<T>(\n    cell: Cell<T, unknown>,\n    property: ZTableCellPinProperty,\n    columns: ZTableColumnConfig<T>[],\n    bodyCells: Cell<T, unknown>[]\n  ): boolean {\n    switch (property) {\n      case 'isLeftPinned':\n        return cell.column.getIsPinned() === 'left';\n\n      case 'isRightPinned':\n        return cell.column.getIsPinned() === 'right';\n\n      case 'isLastLeftPinned':\n        return this._bodyCoveredCells(cell, columns, bodyCells).some(\n          coveredCell => coveredCell.column.getIsPinned() === 'left' && coveredCell.column.getIsLastColumn('left')\n        );\n\n      case 'isFirstRightPinned':\n        return this._bodyCoveredCells(cell, columns, bodyCells).some(\n          coveredCell => coveredCell.column.getIsPinned() === 'right' && coveredCell.column.getIsFirstColumn('right')\n        );\n\n      case 'isLastRightPinned':\n        return this._bodyCoveredCells(cell, columns, bodyCells).some(\n          coveredCell => coveredCell.column.getIsPinned() === 'right' && coveredCell.column.getIsLastColumn('right')\n        );\n\n      default:\n        return false;\n    }\n  }\n\n  private _bodyCoveredCells<T>(\n    cell: Cell<T, unknown>,\n    columns: ZTableColumnConfig<T>[],\n    bodyCells: Cell<T, unknown>[]\n  ): Cell<T, unknown>[] {\n    const cellIndex = bodyCells.findIndex(bodyCell => bodyCell.id === cell.id);\n    if (cellIndex === -1) {\n      return [cell];\n    }\n\n    const columnConfig = findColumnConfig(cell.column.id, columns);\n    const colSpan = getBodyColSpan(columnConfig, cell.getContext()) ?? 1;\n    return bodyCells.slice(cellIndex, cellIndex + Math.max(colSpan, 1));\n  }\n\n  private _pinDirection<T>(header: Header<T, unknown>): 'left' | 'right' | undefined {\n    for (const leafHeader of this._leafHeaders(header)) {\n      const direction = leafHeader.column.getIsPinned();\n      if (direction) {\n        return direction;\n      }\n    }\n\n    return undefined;\n  }\n\n  private _leafHeaders<T>(header: Header<T, unknown>): Header<T, unknown>[] {\n    if (!header.subHeaders?.length) {\n      return [header];\n    }\n\n    return header.subHeaders.flatMap(subHeader => this._leafHeaders(subHeader));\n  }\n\n  private _isLastLeftPinned<T>(\n    header: Header<T, unknown>,\n    columns: ZTableColumnConfig<T>[],\n    cellType: ZTableCellType\n  ): boolean {\n    const leafHeaders = this._leafHeaders(header);\n    const hasLastLeftPinnedLeaf = leafHeaders.some(\n      lh => lh.column.getIsPinned() === 'left' && lh.column.getIsLastColumn('left')\n    );\n\n    if (hasLastLeftPinnedLeaf) {\n      return true;\n    }\n\n    const columnConfig = findColumnConfig(header.column.id, columns);\n    const configColSpan = cellType === 'footer' ? getFooterColSpan(columnConfig) : getHeaderColSpan(columnConfig);\n    if (!configColSpan || configColSpan <= 1) {\n      return false;\n    }\n\n    const { headers: allHeadersInGroup } = header.headerGroup;\n    const currentIndex = allHeadersInGroup.findIndex(h => h.id === header.id);\n\n    if (currentIndex === -1) {\n      return false;\n    }\n\n    for (let i = 0; i < configColSpan && currentIndex + i < allHeadersInGroup.length; i++) {\n      const targetHeader = allHeadersInGroup[currentIndex + i];\n      const targetLeafHeaders = this._leafHeaders(targetHeader);\n      const hasLastLeft = targetLeafHeaders.some(\n        lh => lh.column.getIsPinned() === 'left' && lh.column.getIsLastColumn('left')\n      );\n\n      if (hasLastLeft) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  private _isFirstRightPinned<T>(\n    header: Header<T, unknown>,\n    columns: ZTableColumnConfig<T>[],\n    cellType: ZTableCellType\n  ): boolean {\n    const leafHeaders = this._leafHeaders(header);\n    const hasFirstRightPinnedLeaf = leafHeaders.some(\n      lh => lh.column.getIsPinned() === 'right' && lh.column.getIsFirstColumn('right')\n    );\n    if (hasFirstRightPinnedLeaf) {\n      return true;\n    }\n\n    const columnConfig = findColumnConfig(header.column.id, columns);\n    const configColSpan = cellType === 'footer' ? getFooterColSpan(columnConfig) : getHeaderColSpan(columnConfig);\n\n    if (!configColSpan || configColSpan <= 1) {\n      return false;\n    }\n\n    const { headers: allHeadersInGroup } = header.headerGroup;\n    const currentIndex = allHeadersInGroup.findIndex(h => h.id === header.id);\n\n    if (currentIndex === -1) {\n      return false;\n    }\n\n    for (let i = 0; i < configColSpan && currentIndex + i < allHeadersInGroup.length; i++) {\n      const targetHeader = allHeadersInGroup[currentIndex + i];\n      const targetLeafHeaders = this._leafHeaders(targetHeader);\n      const hasFirst = targetLeafHeaders.some(\n        lh => lh.column.getIsPinned() === 'right' && lh.column.getIsFirstColumn('right')\n      );\n      if (hasFirst) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  private _isLastRightPinned<T>(\n    header: Header<T, unknown>,\n    columns: ZTableColumnConfig<T>[],\n    cellType: ZTableCellType\n  ): boolean {\n    const leafHeaders = this._leafHeaders(header);\n    const hasLastRightPinnedLeaf = leafHeaders.some(\n      lh => lh.column.getIsPinned() === 'right' && lh.column.getIsLastColumn('right')\n    );\n    if (hasLastRightPinnedLeaf) {\n      return true;\n    }\n\n    const columnConfig = findColumnConfig(header.column.id, columns);\n    const configColSpan = cellType === 'footer' ? getFooterColSpan(columnConfig) : getHeaderColSpan(columnConfig);\n\n    if (!configColSpan || configColSpan <= 1) {\n      return false;\n    }\n\n    const { headers: allHeadersInGroup } = header.headerGroup;\n    const currentIndex = allHeadersInGroup.findIndex(h => h.id === header.id);\n\n    if (currentIndex === -1) {\n      return false;\n    }\n\n    const endIndex = currentIndex + configColSpan - 1;\n    if (endIndex >= allHeadersInGroup.length) {\n      return false;\n    }\n\n    const targetHeader = allHeadersInGroup[endIndex];\n    const targetLeafHeaders = this._leafHeaders(targetHeader);\n    return targetLeafHeaders.some(lh => lh.column.getIsPinned() === 'right' && lh.column.getIsLastColumn('right'));\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { Cell, Header } from '@tanstack/angular-table';\nimport type { ZTableCellRenderType, ZTableColumnConfig } from '../z-table.types';\nimport {\n  findColumnConfig,\n  getFooterRowSpan,\n  shouldBodyCellRenderColSpan,\n  shouldHeaderRender,\n  shouldFooterRender,\n} from '../z-table.util';\n\n@Pipe({\n  name: 'zTableCellRender',\n  standalone: true,\n  pure: true,\n})\n/**\n * EN: Decides whether header/footer/body cells should render when span and merge rules are applied.\n * VI: Quyết định header/footer/body có cần render hay không khi áp dụng quy tắc span và gộp ô.\n */\nexport class ZTableCellRenderPipe implements PipeTransform {\n  transform<T>(\n    cellOrHeader: Cell<T, unknown> | Header<T, unknown>,\n    allCellsOrHeaders: Cell<T, unknown>[] | Header<T, unknown>[],\n    columns: ZTableColumnConfig<T>[],\n    type: ZTableCellRenderType,\n    footerRowIndex = 0,\n    footerGroups: { headers: Header<T, unknown>[] }[] = []\n  ): boolean {\n    switch (type) {\n      case 'header':\n        return shouldHeaderRender(\n          cellOrHeader as Header<T, unknown>,\n          allCellsOrHeaders as Header<T, unknown>[],\n          columns\n        );\n      case 'footer':\n        if (this._isCoveredByFooterRowSpan(cellOrHeader as Header<T, unknown>, columns, footerRowIndex, footerGroups)) {\n          return false;\n        }\n        return shouldFooterRender(\n          cellOrHeader as Header<T, unknown>,\n          allCellsOrHeaders as Header<T, unknown>[],\n          columns,\n          footerRowIndex\n        );\n      case 'body':\n        return shouldBodyCellRenderColSpan(\n          cellOrHeader as Cell<T, unknown>,\n          allCellsOrHeaders as Cell<T, unknown>[],\n          columns\n        );\n      default:\n        return true;\n    }\n  }\n\n  private _isCoveredByFooterRowSpan<T>(\n    header: Header<T, unknown>,\n    columns: ZTableColumnConfig<T>[],\n    footerRowIndex: number,\n    footerGroups: { headers: Header<T, unknown>[] }[]\n  ): boolean {\n    for (let rowIndex = 0; rowIndex < footerRowIndex; rowIndex++) {\n      const previousHeader = footerGroups[rowIndex]?.headers.find(item => item.column.id === header.column.id);\n      if (!previousHeader) {\n        continue;\n      }\n\n      const columnConfig = findColumnConfig(previousHeader.column.id, columns);\n      const rowSpan = getFooterRowSpan(columnConfig, rowIndex) ?? 1;\n      if (rowIndex + rowSpan > footerRowIndex) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { Cell } from '@tanstack/angular-table';\nimport type { ZTableColumnConfig } from '../z-table.types';\nimport { findColumnConfig, isBodyConfig } from '../z-table.util';\n\n@Pipe({\n  name: 'zTableCellVisible',\n  standalone: true,\n  pure: true,\n})\n/**\n * EN: Resolves per-cell visibility from static or callback-based body visibility config.\n * VI: Xác định độ hiển thị của từng cell từ cấu hình visible dạng static hoặc callback.\n */\nexport class ZTableCellVisiblePipe implements PipeTransform {\n  transform<T>(cell: Cell<T, unknown>, columns: ZTableColumnConfig<T>[]): boolean {\n    const columnConfig = findColumnConfig(cell.column.id, columns);\n    if (!columnConfig) {\n      return true;\n    }\n\n    const { body } = columnConfig;\n    if (!isBodyConfig(body)) {\n      return true;\n    }\n\n    const { visible } = body;\n    if (visible === undefined) {\n      return true;\n    }\n\n    if (typeof visible === 'function') {\n      return visible(cell.getContext());\n    }\n\n    return visible;\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { ZTooltipConfig } from '@shival99/z-ui/components/z-tooltip';\nimport type { ZTableColumnConfig } from '../z-table.types';\nimport { findColumnConfig, getHeaderConfig, getFooterConfig, getZTableColumnType, isBodyConfig } from '../z-table.util';\n\nconst Z_TABLE_ALIGN_MAP: Record<string, string> = {\n  left: 'text-left',\n  center: 'text-center',\n  right: 'text-right',\n};\n\n@Pipe({\n  name: 'zTableColumnConfig',\n  standalone: true,\n  pure: true,\n})\n/**\n * EN: Exposes header/footer/body-related column settings (class, style, tooltip, width, capabilities).\n * VI: Cung cấp cấu hình cột liên quan header/footer/body (class, style, tooltip, width, khả năng).\n */\nexport class ZTableColumnConfigPipe implements PipeTransform {\n  transform<T>(\n    columnId: string,\n    columns: ZTableColumnConfig<T>[],\n    property:\n      | 'headerClass'\n      | 'headerAlignClass'\n      | 'headerContentClass'\n      | 'footerClass'\n      | 'footerAlignClass'\n      | 'footerContentClass',\n    footerRowIndex?: number\n  ): string;\n  transform<T>(\n    columnId: string,\n    columns: ZTableColumnConfig<T>[],\n    property: 'headerStyle' | 'headerContentStyle' | 'footerStyle' | 'footerContentStyle',\n    footerRowIndex?: number\n  ): Record<string, string>;\n  transform<T>(\n    columnId: string,\n    columns: ZTableColumnConfig<T>[],\n    property: 'headerTooltip' | 'footerTooltip',\n    footerRowIndex?: number\n  ): string | ZTooltipConfig;\n  transform<T>(\n    columnId: string,\n    columns: ZTableColumnConfig<T>[],\n    property: 'hasBodyRowSpan' | 'enableOrdering' | 'enableHeaderMenu'\n  ): boolean;\n  transform<T>(columnId: string, columns: ZTableColumnConfig<T>[], property: 'enablePinning'): boolean | undefined;\n  transform<T>(\n    columnId: string,\n    columns: ZTableColumnConfig<T>[],\n    property: 'footerContent',\n    footerRowIndex?: number\n  ): unknown;\n  transform<T>(columnId: string, columns: ZTableColumnConfig<T>[], property: 'width'): string | undefined;\n  transform<T>(\n    columnId: string,\n    columns: ZTableColumnConfig<T>[],\n    property:\n      | 'headerClass'\n      | 'headerStyle'\n      | 'headerTooltip'\n      | 'headerAlignClass'\n      | 'headerContentClass'\n      | 'headerContentStyle'\n      | 'footerClass'\n      | 'footerStyle'\n      | 'footerTooltip'\n      | 'footerAlignClass'\n      | 'footerContentClass'\n      | 'footerContentStyle'\n      | 'hasBodyRowSpan'\n      | 'footerContent'\n      | 'enableOrdering'\n      | 'enablePinning'\n      | 'enableHeaderMenu'\n      | 'width',\n    footerRowIndex = 0\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        if (headerConfig.align) {\n          return Z_TABLE_ALIGN_MAP[headerConfig.align] || '';\n        }\n        return this._isCenteredHeaderColumn(columnId, columnConfig) ? Z_TABLE_ALIGN_MAP['center'] : '';\n      }\n\n      case 'headerContentClass': {\n        const headerConfig = getHeaderConfig(columnConfig);\n        const { contentClass } = headerConfig;\n        if (typeof contentClass === 'function') {\n          return '';\n        }\n        return contentClass || '';\n      }\n\n      case 'headerContentStyle': {\n        const headerConfig = getHeaderConfig(columnConfig);\n        const { contentStyle } = headerConfig;\n        if (typeof contentStyle === 'function') {\n          return {};\n        }\n        return contentStyle || {};\n      }\n\n      case 'footerClass': {\n        const footerConfig = getFooterConfig(columnConfig, footerRowIndex);\n        return footerConfig.class || '';\n      }\n\n      case 'footerStyle': {\n        const footerConfig = getFooterConfig(columnConfig, footerRowIndex);\n        return footerConfig.style || {};\n      }\n\n      case 'footerTooltip': {\n        const footerConfig = getFooterConfig(columnConfig, footerRowIndex);\n        return (footerConfig.tooltip as string | ZTooltipConfig) || '';\n      }\n\n      case 'footerAlignClass': {\n        const footerConfig = getFooterConfig(columnConfig, footerRowIndex);\n        return footerConfig.align ? Z_TABLE_ALIGN_MAP[footerConfig.align] || '' : '';\n      }\n\n      case 'footerContentClass': {\n        const footerConfig = getFooterConfig(columnConfig, footerRowIndex);\n        const { contentClass } = footerConfig;\n        if (typeof contentClass === 'function') {\n          return '';\n        }\n        return contentClass || '';\n      }\n\n      case 'footerContentStyle': {\n        const footerConfig = getFooterConfig(columnConfig, footerRowIndex);\n        const { contentStyle } = footerConfig;\n        if (typeof contentStyle === 'function') {\n          return {};\n        }\n        return contentStyle || {};\n      }\n\n      case 'hasBodyRowSpan':\n        return columnConfig ? isBodyConfig(columnConfig.body) && columnConfig.body.rowSpan !== undefined : false;\n\n      case 'enableOrdering':\n        return columnConfig?.enableOrdering !== false;\n\n      case 'enablePinning':\n        return columnConfig?.enablePinning;\n\n      case 'enableHeaderMenu':\n        return columnConfig?.enableHeaderMenu !== false;\n\n      case 'footerContent': {\n        const footerConfig = getFooterConfig(columnConfig, footerRowIndex);\n        return footerConfig.content ?? '';\n      }\n\n      case 'width': {\n        const width = columnConfig?.width?.trim();\n        return width?.toLowerCase() === 'auto' ? undefined : width;\n      }\n\n      default:\n        return '';\n    }\n  }\n\n  private _isCenteredHeaderColumn<T>(columnId: string, columnConfig: ZTableColumnConfig<T> | undefined): boolean {\n    const columnType = getZTableColumnType(columnConfig, columnId);\n    if (columnType === 'select' || columnType === 'expand') {\n      return true;\n    }\n    return !!columnConfig && isBodyConfig(columnConfig.body) && !!columnConfig.body.actions;\n  }\n}\n","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { ZTranslateService } from '@shival99/z-ui/services';\nimport { ZTableColumnConfig } from '../z-table.types';\nimport { findColumnConfig, getHeaderConfig, stripIconSyntax } from '../z-table.util';\n\n@Pipe({\n  name: 'zTableColumnHeader',\n  standalone: true,\n  pure: true,\n})\n/**\n * EN: Returns a plain-text header label for a column and removes icon syntax markers.\n * VI: Trả về nhãn header dạng text cho cột và loại bỏ cú pháp icon marker.\n */\nexport class ZTableColumnHeaderPipe implements PipeTransform {\n  private readonly _zTranslateSvc = inject(ZTranslateService);\n\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(this._zTranslateSvc.instant(headerConfig.content));\n    }\n\n    return columnId;\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { ZTableColumnConfig } from '../z-table.types';\nimport { getHeaderConfig, stripIconSyntax } from '../z-table.util';\n\n@Pipe({\n  name: 'zTableColumnParents',\n  standalone: true,\n  pure: true,\n})\n/**\n * EN: Builds the parent-column breadcrumb path for a nested column.\n * VI: Tạo đường dẫn breadcrumb các cột cha cho cột lồng nhau.\n */\nexport class ZTableColumnParentsPipe implements PipeTransform {\n  transform<T>(columnId: string, columns: ZTableColumnConfig<T>[]): string {\n    const parents: string[] = [];\n    this._findParents(columnId, columns, parents);\n    return parents.length > 0 ? parents.join(' › ') : '';\n  }\n\n  private _findParents<T>(\n    columnId: string,\n    columns: ZTableColumnConfig<T>[],\n    parents: string[],\n    currentParents: string[] = []\n  ): boolean {\n    for (const col of columns) {\n      if (col.id === columnId) {\n        parents.push(...currentParents);\n        return true;\n      }\n\n      if (col.columns && col.columns.length > 0) {\n        const parentName = this._getColumnName(col);\n        const found = this._findParents(columnId, col.columns, parents, [...currentParents, parentName]);\n        if (found) {\n          return true;\n        }\n      }\n    }\n\n    return false;\n  }\n\n  private _getColumnName<T>(col: ZTableColumnConfig<T>): string {\n    const headerConfig = getHeaderConfig(col);\n    if (typeof headerConfig.content === 'string') {\n      return stripIconSyntax(headerConfig.content);\n    }\n    return col.id;\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { Header } from '@tanstack/angular-table';\nimport type { ZTableColumnConfig } from '../z-table.types';\nimport { findColumnConfig, getFooterContent } from '../z-table.util';\n\n@Pipe({\n  name: 'zTableFooterContent',\n  standalone: true,\n  pure: true,\n})\n/**\n * EN: Checks whether a footer group has at least one configured footer cell to render.\n * VI: Kiểm tra footer group có ít nhất một cell footer được cấu hình để render hay không.\n */\nexport class ZTableFooterContentPipe implements PipeTransform {\n  transform<T>(\n    footerGroup: { headers: Header<T, unknown>[] },\n    columns: ZTableColumnConfig<T>[],\n    footerRowIndex = 0\n  ): boolean {\n    return footerGroup.headers.some(header => {\n      if (header.isPlaceholder) {\n        return false;\n      }\n      const columnConfig = findColumnConfig(header.column.id, columns);\n      return getFooterContent(columnConfig, footerRowIndex) !== undefined;\n    });\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { FlexRenderContent, HeaderContext } from '@tanstack/angular-table';\nimport type { ZTableColumnConfig } from '../z-table.types';\nimport { findColumnConfig, getFooterContent } from '../z-table.util';\n\ntype ZTableFooterRenderContent<T> =\n  | string\n  | number\n  | ((props: HeaderContext<T, unknown>) => FlexRenderContent<HeaderContext<T, unknown>>)\n  | null\n  | undefined;\n\n@Pipe({\n  name: 'zTableFooterRender',\n  standalone: true,\n  pure: true,\n})\nexport class ZTableFooterRenderPipe implements PipeTransform {\n  transform<T>(columnId: string, columns: ZTableColumnConfig<T>[], footerRowIndex = 0): ZTableFooterRenderContent<T> {\n    const columnConfig = findColumnConfig(columnId, columns);\n    const content = getFooterContent(columnConfig, footerRowIndex);\n\n    if (content === undefined || typeof content === 'string') {\n      return content;\n    }\n\n    if (typeof content === 'function' && !('ɵcmp' in content)) {\n      return content as (props: HeaderContext<T, unknown>) => FlexRenderContent<HeaderContext<T, unknown>>;\n    }\n\n    return () => content as FlexRenderContent<HeaderContext<T, unknown>>;\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { hasIconSyntax } from '../z-table.util';\n\n@Pipe({\n  name: 'zTableHasIcon',\n  standalone: true,\n  pure: true,\n})\n/**\n * EN: Detects whether a string content contains the table icon placeholder syntax.\n * VI: Kiểm tra nội dung chuỗi có chứa cú pháp placeholder icon của table hay không.\n */\nexport class ZTableHasIconPipe implements PipeTransform {\n  transform(content: unknown): boolean {\n    if (typeof content !== 'string') {\n      return false;\n    }\n\n    return hasIconSyntax(content);\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { Column, Cell, Header, Table } from '@tanstack/angular-table';\nimport type { ZPinningStyles, ZTableColumnConfig } from '../z-table.types';\nimport { findColumnConfig, getBodyColSpan, shouldBodyCellRenderColSpan } from '../z-table.util';\n\n@Pipe({\n  name: 'zTablePinningStyles',\n  standalone: true,\n  pure: false,\n})\nexport class ZTablePinningStylesPipe implements PipeTransform {\n  // Keyed by domWidthMap reference — new object each signal tick → auto-invalidates.\n  // Offset map computed once per layout state, shared across all rows.\n  private _offsetCache = new WeakMap<\n    object,\n    { signature: string; result: Record<string, { left: number; right: number }> }\n  >();\n\n  transform<T>(\n    column: Column<T, unknown>,\n    item: Cell<T, unknown> | Header<T, unknown> | null,\n    type: 'header' | 'body' | 'footer',\n    tableOrCells?: Table<T> | Cell<T, unknown>[],\n    columns?: ZTableColumnConfig<T>[],\n    _sizingTrigger?: unknown,\n    domWidthMap?: Record<string, number>,\n    pinningEnabled = true\n  ): Record<string, string | number | undefined> {\n    if (!pinningEnabled) {\n      return this._buildPinningResult(undefined, 0, 0);\n    }\n\n    if (type === 'body') {\n      const allCells = Array.isArray(tableOrCells) ? tableOrCells : undefined;\n      return this._getBodyPinningStyles(column, item as Cell<T, unknown> | null, allCells, columns || [], domWidthMap);\n    }\n\n    if (type === 'footer' && item && tableOrCells && !Array.isArray(tableOrCells)) {\n      return this._getFooterPinningStyles(column, item as Header<T, unknown>, tableOrCells, columns || [], domWidthMap);\n    }\n\n    if (type === 'header' && item && tableOrCells && !Array.isArray(tableOrCells)) {\n      return this._getHeaderPinningStyles(column, item as Header<T, unknown>, tableOrCells, columns || [], domWidthMap);\n    }\n\n    return {};\n  }\n\n  private _colWidth<T>(columnId: string, column: Column<T, unknown>, domWidthMap?: Record<string, number>): number {\n    const measuredWidth = domWidthMap?.[columnId];\n    if (measuredWidth && measuredWidth > 0) {\n      return measuredWidth;\n    }\n\n    return column.getSize();\n  }\n\n  // ─── Body ─────────────────────────────────────────────────────────────────\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    domWidthMap?: Record<string, number>\n  ): ZPinningStyles {\n    const isPinned = column.getIsPinned();\n    if (!isPinned) {\n      return this._buildPinningResult(undefined, 0, 0);\n    }\n\n    const width = this._bodyCellWidth(column, cell, allCells, columns);\n    if (!allCells?.length) {\n      return this._withPinnedWidth(\n        this._buildPinningResult(isPinned, column.getStart(isPinned), column.getAfter(isPinned)),\n        width\n      );\n    }\n\n    const offsets = this._getOrBuildBodyOffsetMap(allCells, columns, domWidthMap);\n    const entry = offsets[column.id];\n    return this._withPinnedWidth(this._buildPinningResult(isPinned, entry?.left ?? 0, entry?.right ?? 0), width);\n  }\n\n  private _bodyCellWidth<T>(\n    column: Column<T, unknown>,\n    cell: Cell<T, unknown> | null,\n    allCells: Cell<T, unknown>[] | undefined,\n    columns: ZTableColumnConfig<T>[]\n  ): number {\n    if (!cell || !allCells?.length) {\n      return column.getSize();\n    }\n\n    const cellIndex = allCells.indexOf(cell);\n    if (cellIndex < 0) {\n      return column.getSize();\n    }\n\n    return this._cellWidthWithColspan(cell, allCells, cellIndex, columns);\n  }\n\n  private _withPinnedWidth(styles: ZPinningStyles, width: number): ZPinningStyles {\n    return {\n      ...styles,\n      width: `${width}px`,\n      minWidth: `${width}px`,\n      maxWidth: `${width}px`,\n    };\n  }\n\n  private _getOrBuildBodyOffsetMap<T>(\n    allCells: Cell<T, unknown>[] | undefined,\n    columns: ZTableColumnConfig<T>[],\n    domWidthMap?: Record<string, number>\n  ): Record<string, { left: number; right: number }> {\n    if (!domWidthMap) {\n      return this._buildBodyOffsetMap(allCells, columns, undefined);\n    }\n\n    const signature = this._bodyOffsetSignature(allCells);\n    const cached = this._offsetCache.get(domWidthMap);\n    if (cached?.signature === signature) {\n      return cached.result;\n    }\n\n    const result = this._buildBodyOffsetMap(allCells, columns, domWidthMap);\n    this._offsetCache.set(domWidthMap, { signature, result });\n    return result;\n  }\n\n  private _bodyOffsetSignature<T>(allCells: Cell<T, unknown>[] | undefined): string {\n    return (allCells ?? []).map(cell => `${cell.column.id}:${cell.column.getIsPinned() || 'center'}`).join('|');\n  }\n\n  private _buildBodyOffsetMap<T>(\n    allCells: Cell<T, unknown>[] | undefined,\n    columns: ZTableColumnConfig<T>[],\n    domWidthMap?: Record<string, number>\n  ): Record<string, { left: number; right: number }> {\n    if (!allCells?.length) {\n      return {};\n    }\n\n    const hasAnyColspan = allCells.some(c => {\n      const cfg = findColumnConfig(c.column.id, columns);\n      const span = getBodyColSpan(cfg, c.getContext());\n      return span !== undefined && span > 1;\n    });\n\n    const result: Record<string, { left: number; right: number }> = {};\n\n    let runningLeft = 0;\n    for (let i = 0; i < allCells.length; i++) {\n      const c = allCells[i];\n      if (c.column.getIsPinned() !== 'left') {\n        continue;\n      }\n      if (hasAnyColspan && !shouldBodyCellRenderColSpan(c, allCells, columns)) {\n        continue;\n      }\n\n      result[c.column.id] = { left: runningLeft, right: 0 };\n      runningLeft += hasAnyColspan\n        ? this._cellWidthWithColspan(c, allCells, i, columns, domWidthMap)\n        : this._colWidth(c.column.id, c.column, domWidthMap);\n    }\n\n    let runningRight = 0;\n    for (let i = allCells.length - 1; i >= 0; i--) {\n      const c = allCells[i];\n      if (c.column.getIsPinned() !== 'right') {\n        continue;\n      }\n      if (hasAnyColspan && !shouldBodyCellRenderColSpan(c, allCells, columns)) {\n        continue;\n      }\n\n      result[c.column.id] ??= { left: 0, right: 0 };\n      result[c.column.id].right = runningRight;\n      runningRight += hasAnyColspan\n        ? this._cellWidthWithColspan(c, allCells, i, columns, domWidthMap)\n        : this._colWidth(c.column.id, c.column, domWidthMap);\n    }\n\n    return result;\n  }\n\n  private _cellWidthWithColspan<T>(\n    cell: Cell<T, unknown>,\n    allCells: Cell<T, unknown>[],\n    cellIndex: number,\n    columns: ZTableColumnConfig<T>[],\n    domWidthMap?: Record<string, number>\n  ): number {\n    const getW = (c: Cell<T, unknown>) => this._colWidth(c.column.id, c.column, domWidthMap);\n    const config = findColumnConfig(cell.column.id, columns);\n    const colSpan = getBodyColSpan(config, cell.getContext());\n\n    if (colSpan && colSpan > 1) {\n      let w = getW(cell);\n      for (let j = 1; j < colSpan && cellIndex + j < allCells.length; j++) {\n        w += getW(allCells[cellIndex + j]);\n      }\n      return w;\n    }\n\n    return getW(cell);\n  }\n\n  // ─── Header ───────────────────────────────────────────────────────────────\n\n  private _getHeaderPinningStyles<T>(\n    column: Column<T, unknown>,\n    headerCurrent: Header<T, unknown>,\n    table: Table<T>,\n    columns: ZTableColumnConfig<T>[],\n    domWidthMap?: Record<string, number>\n  ): ZPinningStyles {\n    const isPinnedColumn = column.getIsPinned();\n    if (!isPinnedColumn) {\n      return this._buildPinningResult(undefined, 0, 0);\n    }\n\n    const isChildPinned = this._childPinDirection(column, headerCurrent);\n\n    if (isChildPinned === 'left') {\n      const leftOffset = this._headerLeftOffset(headerCurrent, table, domWidthMap);\n      return { position: 'sticky', zIndex: 1, left: `${leftOffset}px`, right: undefined };\n    }\n\n    if (isChildPinned === 'right') {\n      const rightOffset = this._headerRightOffset(headerCurrent, table, domWidthMap);\n      return { position: 'sticky', zIndex: 1, left: undefined, right: `${rightOffset}px` };\n    }\n\n    return { position: 'relative', zIndex: 0, left: undefined, right: undefined };\n  }\n\n  private _childPinDirection<T>(column: Column<T, unknown>, header: Header<T, unknown>): 'left' | 'right' | undefined {\n    const leafHeaders = this._leafHeaders(header);\n    for (const leafHeader of leafHeaders) {\n      const isPinned = leafHeader.column.getIsPinned();\n      if (isPinned) {\n        return isPinned;\n      }\n    }\n\n    return leafHeaders.length ? undefined : column.getIsPinned() || undefined;\n  }\n\n  private _leafHeaders<T>(header: Header<T, unknown>): Header<T, unknown>[] {\n    if (!header.subHeaders?.length) {\n      return [header];\n    }\n\n    return header.subHeaders.flatMap(subHeader => this._leafHeaders(subHeader));\n  }\n\n  private _headerLeftOffset<T>(\n    headerCurrent: Header<T, unknown>,\n    table: Table<T>,\n    domWidthMap?: Record<string, number>\n  ): number {\n    return this._leftLeafOffset(headerCurrent, this._pinnedLeafColumns(table, 'left'), domWidthMap);\n  }\n\n  private _headerRightOffset<T>(\n    headerCurrent: Header<T, unknown>,\n    table: Table<T>,\n    domWidthMap?: Record<string, number>\n  ): number {\n    return this._rightLeafOffset(headerCurrent, this._pinnedLeafColumns(table, 'right'), domWidthMap);\n  }\n\n  // ─── Footer ───────────────────────────────────────────────────────────────\n\n  private _getFooterPinningStyles<T>(\n    column: Column<T, unknown>,\n    footerCurrent: Header<T, unknown>,\n    table: Table<T>,\n    columns: ZTableColumnConfig<T>[],\n    domWidthMap?: Record<string, number>\n  ): ZPinningStyles {\n    const isPinnedColumn = column.getIsPinned();\n    if (!isPinnedColumn) {\n      return this._buildPinningResult(undefined, 0, 0);\n    }\n\n    const isChildPinned = this._childPinDirection(column, footerCurrent);\n\n    if (isChildPinned === 'left') {\n      const leftOffset = this._footerLeftOffset(footerCurrent, table, domWidthMap);\n      return { position: 'sticky', zIndex: 1, left: `${leftOffset}px`, right: undefined };\n    }\n\n    if (isChildPinned === 'right') {\n      const rightOffset = this._footerRightOffset(footerCurrent, table, domWidthMap);\n      return { position: 'sticky', zIndex: 1, left: undefined, right: `${rightOffset}px` };\n    }\n\n    return { position: 'relative', zIndex: 0, left: undefined, right: undefined };\n  }\n\n  private _footerLeftOffset<T>(\n    footerCurrent: Header<T, unknown>,\n    table: Table<T>,\n    domWidthMap?: Record<string, number>\n  ): number {\n    return this._leftLeafOffset(footerCurrent, this._pinnedLeafColumns(table, 'left'), domWidthMap);\n  }\n\n  private _footerRightOffset<T>(\n    footerCurrent: Header<T, unknown>,\n    table: Table<T>,\n    domWidthMap?: Record<string, number>\n  ): number {\n    return this._rightLeafOffset(footerCurrent, this._pinnedLeafColumns(table, 'right'), domWidthMap);\n  }\n\n  // ─── Shared header/footer width ───────────────────────────────────────────\n\n  private _leftLeafOffset<T>(\n    headerCurrent: Header<T, unknown>,\n    pinnedColumns: Column<T, unknown>[],\n    domWidthMap?: Record<string, number>\n  ): number {\n    const currentIds = this._headerLeafIds(headerCurrent);\n    let offset = 0;\n    for (const column of pinnedColumns) {\n      if (currentIds.has(column.id)) {\n        return offset;\n      }\n      offset += this._colWidth(column.id, column, domWidthMap);\n    }\n\n    return offset;\n  }\n\n  private _pinnedLeafColumns<T>(table: Table<T>, pinDirection: 'left' | 'right'): Column<T, unknown>[] {\n    return table.getAllLeafColumns().filter(column => column.getIsPinned() === pinDirection);\n  }\n\n  private _rightLeafOffset<T>(\n    headerCurrent: Header<T, unknown>,\n    pinnedColumns: Column<T, unknown>[],\n    domWidthMap?: Record<string, number>\n  ): number {\n    const currentIds = this._headerLeafIds(headerCurrent);\n    let offset = 0;\n    for (let i = pinnedColumns.length - 1; i >= 0; i--) {\n      const column = pinnedColumns[i];\n      if (currentIds.has(column.id)) {\n        return offset;\n      }\n      offset += this._colWidth(column.id, column, domWidthMap);\n    }\n\n    return offset;\n  }\n\n  private _headerLeafIds<T>(header: Header<T, unknown>): Set<string> {\n    const leafHeaders = this._leafHeaders(header);\n    if (leafHeaders.length === 0) {\n      return new Set([header.column.id]);\n    }\n\n    return new Set(leafHeaders.map(leafHeader => leafHeader.column.id));\n  }\n\n  // ─── Result builder ───────────────────────────────────────────────────────\n\n  private _buildPinningResult(\n    isPinned: 'left' | 'right' | false | undefined,\n    leftOffset: number,\n    rightOffset: number\n  ): ZPinningStyles {\n    return {\n      left: isPinned === 'left' ? `${leftOffset}px` : undefined,\n      right: isPinned === 'right' ? `${rightOffset}px` : undefined,\n      position: isPinned ? 'sticky' : 'relative',\n      zIndex: isPinned ? 1 : 0,\n    };\n  }\n}\n","import { Pipe, PipeTransform, TemplateRef } from '@angular/core';\nimport type {\n  ZTablePopoverConfig,\n  ZTablePopoverContent,\n  ZTablePopoverProperty,\n  ZTableTooltipConfig,\n  ZTableTooltipProperty,\n} from '../z-table.types';\n\n@Pipe({\n  name: 'zTableTooltipConfig',\n  standalone: true,\n  pure: true,\n})\nexport class ZTableTooltipConfigPipe implements PipeTransform {\n  transform(\n    value: string | ZTableTooltipConfig | TemplateRef<unknown> | null | undefined,\n    property: ZTableTooltipProperty\n  ): unknown {\n    if (!value) {\n      return this._tooltipDefault(property);\n    }\n\n    if (typeof value === 'string' || value instanceof TemplateRef) {\n      return property === 'content' ? value : this._tooltipDefault(property);\n    }\n\n    return value[property as keyof ZTableTooltipConfig] ?? this._tooltipDefault(property);\n  }\n\n  private _tooltipDefault(property: ZTableTooltipProperty): unknown {\n    switch (property) {\n      case 'content':\n        return '';\n      case 'position':\n        return 'top';\n      case 'trigger':\n        return 'hover';\n      case 'type':\n      case 'size':\n        return 'default';\n      case 'class':\n        return '';\n      case 'showDelay':\n        return 100;\n      case 'hideDelay':\n        return 0;\n      case 'arrow':\n      case 'autoDetect':\n        return true;\n      case 'offset':\n        return 8;\n      case 'alwaysShow':\n        return false;\n      case 'maxWidth':\n        return '250px';\n      default:\n        return undefined;\n    }\n  }\n}\n\n@Pipe({\n  name: 'zTablePopoverConfig',\n  standalone: true,\n  pure: true,\n})\nexport class ZTablePopoverConfigPipe implements PipeTransform {\n  transform(\n    value: ZTablePopoverContent | ZTablePopoverConfig | null | undefined,\n    property: ZTablePopoverProperty\n  ): unknown {\n    if (!value) {\n      return this._popoverDefault(property);\n    }\n\n    if (typeof value === 'string' || value instanceof TemplateRef) {\n      return property === 'content' ? value : this._popoverDefault(property);\n    }\n\n    return value[property as keyof ZTablePopoverConfig] ?? this._popoverDefault(property);\n  }\n\n  private _popoverDefault(property: ZTablePopoverProperty): unknown {\n    switch (property) {\n      case 'content':\n        return '';\n      case 'position':\n        return 'bottom';\n      case 'trigger':\n        return 'click';\n      case 'class':\n        return '';\n      case 'showDelay':\n      case 'hideDelay':\n        return 0;\n      case 'disabled':\n      case 'manualClose':\n      case 'outsideClickClose':\n      case 'scrollClose':\n      case 'sticky':\n      case 'showArrow':\n      case 'keyboardSafe':\n        return false;\n      case 'offset':\n        return 8;\n      case 'width':\n        return 'auto';\n      default:\n        return 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})\n/**\n * EN: Provides row-level pin metadata and sticky style offsets for top/bottom pinned rows.\n * VI: Cung cấp metadata pin theo row và offset style sticky cho các row pin top/bottom.\n */\nexport class ZTableRowPipe implements PipeTransform {\n  transform<T>(\n    row: Row<T>,\n    table: Table<T>,\n    property: 'isFirstTopPinned' | 'isLastTopPinned' | 'isFirstBottomPinned' | 'isLastBottomPinned'\n  ): boolean;\n  transform<T>(\n    row: Row<T>,\n    table: Table<T>,\n    property: 'pinningStyles',\n    rowHeights: Record<string, number>,\n    virtualRowHeight?: number\n  ): Record<string, string | number>;\n  transform<T>(\n    row: Row<T>,\n    table: Table<T>,\n    property: 'isFirstTopPinned' | 'isLastTopPinned' | 'isFirstBottomPinned' | 'isLastBottomPinned' | 'pinningStyles',\n    rowHeights?: Record<string, number>,\n    virtualRowHeight?: number\n  ): boolean | Record<string, string | number> {\n    switch (property) {\n      case 'isFirstTopPinned':\n        return this._isFirstTopPinnedRow(row);\n\n      case 'isLastTopPinned':\n        return this._isLastTopPinnedRow(row, table);\n\n      case 'isFirstBottomPinned':\n        return this._isFirstBottomPinnedRow(row, table);\n\n      case 'isLastBottomPinned':\n        return this._isLastBottomPinnedRow(row);\n\n      case 'pinningStyles':\n        return this._getRowPinningStyles(row, table, rowHeights ?? {}, virtualRowHeight ?? 40);\n\n      default:\n        return false;\n    }\n  }\n\n  private _isFirstTopPinnedRow<T>(row: Row<T>): boolean {\n    return row.getIsPinned() === 'top' && row.getPinnedIndex() === 0;\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 _isLastBottomPinnedRow<T>(row: Row<T>): boolean {\n    return row.getIsPinned() === 'bottom' && row.getPinnedIndex() === 0;\n  }\n\n  private _getRowPinningStyles<T>(\n    row: Row<T>,\n    table: Table<T>,\n    rowHeights: Record<string, number>,\n    virtualRowHeight: number\n  ): Record<string, string | number> {\n    const pinned = row.getIsPinned();\n    if (!pinned) {\n      return {};\n    }\n\n    const pinnedIndex = row.getPinnedIndex();\n    const defaultHeight = virtualRowHeight + 2;\n\n    // EN: Stack each sticky row directly below the previous one using the EXACT (un-rounded) sum of\n    //     the measured heights above. Measured heights are fractional (e.g. 47.8px); rounding each\n    //     one (or padding with +0.5px) pushed the offset past the real height and left a hairline\n    //     gap between consecutive pinned rows, while overlapping by 1px swallowed the row's\n    //     border-bottom. The exact float sum places row N right at the bottom of row N-1 — its\n    //     border-bottom stays flush, no gap and no lost border.\n    //     This path is non-virtual only; virtual scroll pins via .z-virtual-pinned-* CSS, not here.\n    // VI: Xếp mỗi sticky row ngay dưới row trước bằng TỔNG chiều cao thật (không làm tròn) của các\n    //     row phía trên. Làm tròn / cộng +0.5px làm offset dư → hở; còn chồng 1px lại nuốt mất\n    //     border-bottom. Dùng tổng float chính xác thì row N nằm khít đáy row N-1, border vẫn giữ,\n    //     không hở cũng không mất border.\n    if (pinned === 'top') {\n      let offset = 0;\n      const topRows = table.getTopRows();\n      for (let i = 0; i < pinnedIndex; i++) {\n        offset += rowHeights[topRows[i].id] ?? defaultHeight;\n      }\n\n      return { position: 'sticky', top: `${offset}px`, zIndex: 2 };\n    }\n\n    if (pinned === 'bottom') {\n      let offset = 0;\n      const bottomRows = table.getBottomRows();\n      for (let i = 0; i < pinnedIndex; i++) {\n        offset += rowHeights[bottomRows[i].id] ?? defaultHeight;\n      }\n\n      return { position: 'sticky', bottom: `${offset}px`, zIndex: 2 };\n    }\n\n    return {};\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { Row } from '@tanstack/angular-table';\nimport type { ZTableConfig } from '../z-table.types';\n\n@Pipe({\n  name: 'zTableRowConfig',\n  standalone: true,\n  pure: true,\n})\nexport class ZTableRowConfigPipe implements PipeTransform {\n  transform<T>(row: Row<T>, config: ZTableConfig<T>, property: 'rowClass'): string;\n  transform<T>(row: Row<T>, config: ZTableConfig<T>, property: 'rowStyle'): Record<string, string>;\n  transform<T>(\n    row: Row<T>,\n    config: ZTableConfig<T>,\n    property: 'rowClass' | 'rowStyle'\n  ): string | Record<string, string> {\n    if (property === 'rowClass') {\n      return typeof config.rowClass === 'function' ? config.rowClass(row) : (config.rowClass ?? '');\n    }\n\n    return typeof config.rowStyle === 'function' ? config.rowStyle(row) : (config.rowStyle ?? {});\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { Cell, Header, Row } from '@tanstack/angular-table';\nimport type { ZTableColumnConfig } from '../z-table.types';\nimport {\n  findColumnConfig,\n  calculateCellRowSpan,\n  calculateCellColSpan,\n  calculateHeaderRowSpan,\n  calculateHeaderColSpan,\n  calculateFooterRowSpan,\n  calculateFooterColSpan,\n  shouldCellRenderUtil,\n} from '../z-table.util';\n\n@Pipe({\n  name: 'zTableSpan',\n  standalone: true,\n  pure: true,\n})\n/**\n * EN: Computes rowSpan/colSpan and render visibility for body, header, and footer table cells.\n * VI: Tính rowSpan/colSpan và khả năng render cho cell body, header và footer của bảng.\n */\nexport class ZTableSpanPipe implements PipeTransform {\n  transform<T>(\n    item: Cell<T, unknown> | Header<T, unknown>,\n    columns: ZTableColumnConfig<T>[],\n    property: 'cellRowSpan' | 'cellColSpan' | 'headerRowSpan' | 'headerColSpan' | 'footerRowSpan' | 'footerColSpan',\n    allRowsOrFooterRowIndex?: Row<T>[] | number\n  ): number | null;\n  transform<T>(\n    item: Cell<T, unknown>,\n    columns: ZTableColumnConfig<T>[],\n    property: 'shouldRender',\n    allRowsOrFooterRowIndex?: Row<T>[] | number\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    allRowsOrFooterRowIndex?: Row<T>[] | number\n  ): number | null | boolean {\n    const columnConfig = findColumnConfig(item.column.id, columns);\n\n    switch (property) {\n      case 'cellRowSpan':\n        return calculateCellRowSpan(\n          item as Cell<T, unknown>,\n          columnConfig,\n          Array.isArray(allRowsOrFooterRowIndex) ? allRowsOrFooterRowIndex : []\n        );\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(\n          item as Header<T, unknown>,\n          columnConfig,\n          typeof allRowsOrFooterRowIndex === 'number' ? allRowsOrFooterRowIndex : 0\n        );\n\n      case 'footerColSpan':\n        return calculateFooterColSpan(\n          item as Header<T, unknown>,\n          columnConfig,\n          typeof allRowsOrFooterRowIndex === 'number' ? allRowsOrFooterRowIndex : 0\n        );\n\n      case 'shouldRender':\n        return shouldCellRenderUtil(\n          item as Cell<T, unknown>,\n          columnConfig,\n          Array.isArray(allRowsOrFooterRowIndex) ? allRowsOrFooterRowIndex : []\n        );\n\n      default:\n        return null;\n    }\n  }\n}\n","import { Pipe, type PipeTransform } from '@angular/core';\nimport type { Row } from '@tanstack/angular-table';\nimport type { ZTableConfig } from '../z-table.types';\n\n@Pipe({\n  name: 'zTableSubTableConfig',\n  standalone: true,\n  pure: true,\n})\nexport class ZTableSubTableConfigPipe implements PipeTransform {\n  transform<T>(row: Row<T>, config: ZTableConfig<T>): ZTableConfig<unknown> | undefined {\n    const { subTableConfig } = config;\n    if (typeof subTableConfig === 'function') {\n      return subTableConfig(row);\n    }\n\n    return subTableConfig;\n  }\n}\n","import { Pipe, PipeTransform, TemplateRef } from '@angular/core';\n\n@Pipe({\n  name: 'zTableIsTemplateRef',\n  standalone: true,\n  pure: true,\n})\n/**\n * EN: Type guard pipe that checks if a value is an Angular TemplateRef.\n * VI: Pipe type guard để kiểm tra giá trị có phải là Angular TemplateRef hay không.\n */\nexport class ZTableIsTemplateRefPipe implements PipeTransform {\n  transform(value: unknown): value is TemplateRef<unknown> {\n    return value instanceof TemplateRef;\n  }\n}\n","/* eslint-disable @stylistic/indent */\nimport { CdkDrag, CdkDropList, type CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { type ConnectedPosition, OverlayModule } from '@angular/cdk/overlay';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { DOCUMENT, formatDate, NgStyle, NgTemplateOutlet } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  effect,\n  ElementRef,\n  inject,\n  input,\n  output,\n  signal,\n  TemplateRef,\n  untracked,\n  viewChild,\n  viewChildren,\n  afterNextRender,\n  linkedSignal,\n} from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { elementScroll, injectVirtualizer } from '@shival99/angular-virtual';\nimport { ZButtonComponent } from '@shival99/z-ui/components/z-button';\nimport { ZCheckboxComponent } from '@shival99/z-ui/components/z-checkbox';\nimport { ZDrawerComponent } from '@shival99/z-ui/components/z-drawer';\nimport { ZEmptyComponent } from '@shival99/z-ui/components/z-empty';\nimport { ZIconComponent } from '@shival99/z-ui/components/z-icon';\nimport { ZInputComponent } from '@shival99/z-ui/components/z-input';\nimport { ZLoadingComponent } from '@shival99/z-ui/components/z-loading';\nimport { ZPaginationComponent } from '@shival99/z-ui/components/z-pagination';\nimport { ZPopoverDirective, type ZPopoverControl } from '@shival99/z-ui/components/z-popover';\nimport { ZSkeletonComponent } from '@shival99/z-ui/components/z-skeleton';\nimport { ZTooltipDirective } from '@shival99/z-ui/components/z-tooltip';\nimport { ZFormatNumPipe, ZSafeHtmlPipe } from '@shival99/z-ui/pipes';\nimport {\n  type ZExcelAlign,\n  type ZExcelTableColumnConfig,\n  ZCacheService,\n  ZExcelService,\n  ZTranslateService,\n} from '@shival99/z-ui/services';\nimport { zMergeClasses } from '@shival99/z-ui/utils';\nimport {\n  type Column,\n  ColumnDef,\n  type Cell,\n  type ColumnSizingState,\n  ColumnFiltersState,\n  ColumnOrderState,\n  ColumnPinningState,\n  createAngularTable,\n  ExpandedState,\n  FlexRenderDirective,\n  getCoreRowModel,\n  getExpandedRowModel,\n  getFacetedMinMaxValues,\n  getFacetedRowModel,\n  getFacetedUniqueValues,\n  getFilteredRowModel,\n  getPaginationRowModel,\n  getSortedRowModel,\n  PaginationState,\n  Row,\n  RowPinningState,\n  RowSelectionState,\n  SortingState,\n  VisibilityState,\n} from '@tanstack/angular-table';\nimport { ClassValue } from 'clsx';\nimport { NgScrollbar } from 'ngx-scrollbar';\nimport { explicitEffect } from 'ngxtension/explicit-effect';\nimport { injectDestroy } from 'ngxtension/inject-destroy';\nimport { ZTableActionsComponent } from './components/z-table-actions.component';\nimport { ZTableContentEditorComponent } from './components/z-table-content-editor.component';\nimport { ZTableEditCellComponent } from './components/z-table-edit-cell.component';\nimport { ZTableFilterComponent } from './components/z-table-filter.component';\nimport { ZTableIconTextComponent } from './components/z-table-icon-text.component';\nimport {\n  ZTableDragService,\n  ZTableDraggableDirective,\n  ZTableDropTargetDirective,\n  ZTableResizeDirective,\n  ZTableRowHoverDirective,\n} from './directives';\nimport {\n  ZTableCellBottomPipe,\n  ZTableCellClickablePipe,\n  ZTableCellConfigPipe,\n  ZTableCellEditPipe,\n  ZTableCellOffsetPipe,\n  ZTableCellPinPipe,\n  ZTableCellVisiblePipe,\n  ZTableColumnConfigPipe,\n  ZTableColumnParentsPipe,\n  ZTableFooterContentPipe,\n  ZTableFooterRenderPipe,\n  ZTablePinningStylesPipe,\n  ZTablePopoverConfigPipe,\n  ZTableRowPipe,\n  ZTableRowConfigPipe,\n  ZTableSpanPipe,\n  ZTableSubTableConfigPipe,\n  ZTableIsTemplateRefPipe,\n  ZTableHasIconPipe,\n  ZTableColumnHeaderPipe,\n  ZTableTooltipConfigPipe,\n} from './pipes';\nimport { ZTableCellRenderPipe } from './pipes/z-table-cell-render.pipe';\nimport { Z_TABLE_NUMBER_OPERATORS, Z_TABLE_TEXT_OPERATORS } from './z-table.define';\nimport {\n  Z_DEFAULT_DEBOUNCE_TIME,\n  Z_DEFAULT_COLUMN_VIRTUAL_OVERSCAN,\n  Z_DEFAULT_GROUP_SIZE,\n  Z_DEFAULT_ROW_HEIGHT,\n  Z_DEFAULT_VIRTUAL_OVERSCAN,\n  Z_SKELETON_ROW_HEIGHT,\n  Z_TABLE_DEFAULT_ACTION_BUTTON_WIDTH,\n  Z_TABLE_DEFAULT_MAX_VISIBLE_ACTIONS,\n  ZTableActionClickEvent,\n  ZTableActionColumnConfig,\n  ZTableBodyColumnConfig,\n  ZTableChangeEvent,\n  ZTableColumnConfig,\n  ZTableConfig,\n  ZTableControl,\n  ZTableEditCellChangeEvent,\n  ZTableExcelExportConfig,\n  ZTableExcelExportContext,\n  ZTableGroupingConfig,\n  ZTableGroupTotalConfig,\n  ZTableGroupTotalContext,\n  ZTableRowInsertPosition,\n  ZTableRowMoveDirection,\n  ZTableRowDragEvent,\n  ZTableSavedColumnInfo,\n  ZTableSavedConfig,\n  ZTableBulkActionClickEvent,\n  ZTableBulkActionContext,\n  ZTableBulkActionHandlerContext,\n  ZTableBulkActionItem,\n  ZTableBulkActionList,\n  ZTableBulkActionOptions,\n  ZTableBulkActionRenderItem,\n  ZTableCellSelectionOptions,\n  ZTableVirtualConfig,\n  ZTableVirtualColumnConfig,\n  ZVirtualGroup,\n  ZTableDragDropData,\n  Z_DEFAULT_COLUMN_MIN_SIZE,\n} from './z-table.types';\nimport {\n  columnConfigToColumnDef,\n  isBodyConfig,\n  getZTableColumnType,\n  isZTableColumnType,\n  isZTableColumnTypeById,\n  calculateCellRowSpan,\n  calculateCellColSpan,\n  getHeaderColSpan,\n  filterVisibleColumns,\n  shouldBodyCellRenderColSpan,\n  shouldCellRenderUtil,\n  normalizeZTableColumnPinning,\n  pickDefined,\n  reorderZTableVisibleItems,\n  resolveZTableDropIndex,\n  getHeaderConfig,\n  stripIconSyntax,\n} from './z-table.util';\n\nconst Z_VIRTUAL_GROUP_HEADER_HEIGHT = 48;\nconst Z_TABLE_FILTER_HEADER_VISIBLE_COUNT = 3;\n\ninterface ZTableAppliedFilterChip {\n  type: 'filter' | 'sort';\n  id: string;\n  columnId: string;\n  label: string;\n  value: string;\n}\n\ninterface ZTableSelectedCellVisualRect {\n  id: string;\n  rowStart: number;\n  rowEnd: number;\n  columnStart: number;\n  columnEnd: number;\n  selectedRowStart: number;\n  selectedRowEnd: number;\n  selectedColumnStart: number;\n  selectedColumnEnd: number;\n}\n\ntype ZTableSelectedCellVisualSide = 'top' | 'right' | 'bottom' | 'left';\n\ninterface ZTableGroupRowItem {\n  type: 'group';\n  id: string;\n  columnId: string;\n  depth: number;\n  value: unknown;\n  label: string;\n  columnLabel: string;\n  count: number;\n  expanded: boolean;\n  /** Server grouping: group đang fetch child rows. */\n  loading?: boolean;\n  totals?: Record<string, unknown>;\n}\n\ninterface ZTableDataRowItem<T> {\n  type: 'row';\n  row: Row<T>;\n  isGroupChild?: boolean;\n  groupDepth?: number;\n}\n\ntype ZTableGroupedRowItem<T> = ZTableGroupRowItem | ZTableDataRowItem<T>;\n\ninterface ZVirtualFlatGroupHeader {\n  type: 'group-header';\n  groupItem: ZTableGroupRowItem;\n}\n\ninterface ZVirtualFlatData<T> {\n  type: 'data';\n  rows: Row<T>[];\n  isGroupChild: boolean;\n  groupDepth: number;\n}\n\ntype ZVirtualFlatItem<T> = ZVirtualFlatGroupHeader | ZVirtualFlatData<T>;\n\ntype ZTableResolvedCellSelectionOptions<T> = Required<\n  Pick<ZTableCellSelectionOptions<T>, 'enabled' | 'range' | 'contextMenu' | 'copyWithHeaders'>\n> &\n  Pick<ZTableCellSelectionOptions<T>, 'disabledColumnIds' | 'isCellDisabled'>;\n\n@Component({\n  selector: 'z-table',\n  imports: [\n    NgStyle,\n    NgTemplateOutlet,\n    OverlayModule,\n    ScrollingModule,\n    NgScrollbar,\n    FlexRenderDirective,\n    CdkDropList,\n    CdkDrag,\n    ZTableDraggableDirective,\n    ZTableDropTargetDirective,\n    ZCheckboxComponent,\n    ZEmptyComponent,\n    ZIconComponent,\n    ZInputComponent,\n    ZLoadingComponent,\n    ZSkeletonComponent,\n    ZDrawerComponent,\n    ZPaginationComponent,\n    ZTableFilterComponent,\n    ZTableEditCellComponent,\n    ZPopoverDirective,\n    ZButtonComponent,\n    ZTooltipDirective,\n    ZTableResizeDirective,\n    ZTableRowHoverDirective,\n    ZTableIsTemplateRefPipe,\n    ZTableHasIconPipe,\n    ZTableCellBottomPipe,\n    ZTableCellClickablePipe,\n    ZTableCellConfigPipe,\n    ZTableCellEditPipe,\n    ZTableCellOffsetPipe,\n    ZTableCellPinPipe,\n    ZTableCellVisiblePipe,\n    ZTableColumnConfigPipe,\n    ZTableColumnHeaderPipe,\n    ZTableColumnParentsPipe,\n    ZTableFooterContentPipe,\n    ZTableFooterRenderPipe,\n    ZTablePinningStylesPipe,\n    ZTablePopoverConfigPipe,\n    ZTableRowPipe,\n    ZTableRowConfigPipe,\n    ZTableSpanPipe,\n    ZTableSubTableConfigPipe,\n    ZTableTooltipConfigPipe,\n    ZTableCellRenderPipe,\n    ZTableIconTextComponent,\n    ZTableActionsComponent,\n    ZTableContentEditorComponent,\n    ZFormatNumPipe,\n    ZSafeHtmlPipe,\n    TranslatePipe,\n  ],\n  standalone: true,\n  templateUrl: './z-table.component.html',\n  styleUrl: './z-table.component.scss',\n  providers: [TranslatePipe, ZTableDragService],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: 'z-table block relative py-1',\n  },\n  exportAs: 'zTable',\n})\n/**\n * Z-Table Component\n *\n * Feature-rich data table built on @tanstack/angular-table. Supports:\n * - Local and server-side sorting, filtering, and pagination\n * - Virtual scrolling with rowSpan-aware grouping\n * - Column pinning (left/right) with scroll shadow indicators\n * - Column resizing, reordering, and visibility toggling\n * - Inline cell editing (text, number, select, date, etc.)\n * - Row selection (single/multi with sub-row support)\n * - Row expansion with custom templates\n * - Row pinning (top/bottom)\n * - Action buttons column with overflow dropdown\n * - Settings drawer for column management\n * - Persistent settings via ZCacheService (keyed by zKey)\n * - Skeleton loading placeholder\n * - Search bar with debounce\n *\n * Architecture notes:\n * - All template computations use pipes (OnPush compliance, no method calls in templates)\n * - Scroll sync between thead/tbody/tfoot is manual (independent scrollable containers)\n * - Virtual scrolling groups rows to handle rowSpan correctly\n * - Each column's sort/filter can independently be 'local' or 'server' mode\n */\nexport class ZTableComponent<T> implements AfterViewInit {\n  private static _dragInstanceCount = 0;\n\n  // ─── Outputs ──────────────────────────────────────────────────────────────\n\n  /** Unified change event — parent listens to this for all table interactions */\n  public readonly zChange = output<ZTableChangeEvent<T>>();\n  /** Emits an imperative control handle for programmatic table manipulation */\n  public readonly zControl = output<ZTableControl<T>>();\n\n  // ─── Inputs ───────────────────────────────────────────────────────────────\n\n  /** Extra CSS classes merged onto the table container */\n  public readonly zClass = input<ClassValue>('');\n  /** Main configuration — data, columns, mode, features */\n  public readonly zConfig = input<ZTableConfig<T>>({ data: [], columns: [], mode: 'local' });\n  /** External loading state (complementary to config.loading) */\n  public readonly zLoading = input(false);\n  /** Cache key for persisting column settings; no persistence when empty */\n  public readonly zKey = input<string>('');\n  /** Visual variant: 'default' has card shadow, 'borderless' has no container border */\n  public readonly zVariant = input<'default' | 'borderless'>('default');\n\n  // ─── Private State ────────────────────────────────────────────────────────\n\n  private readonly _destroy$ = injectDestroy();\n  private readonly _dragService = inject(ZTableDragService);\n  private readonly _host = inject<ElementRef<HTMLElement>>(ElementRef);\n  private readonly _document = inject(DOCUMENT);\n  private readonly _zExcel = inject(ZExcelService);\n  private readonly _zTranslate = inject(ZTranslateService);\n\n  /** Prevents recursive scroll sync between thead/tbody/tfoot */\n  private readonly _isSyncingScroll = signal(false);\n  /** Preserves horizontal scroll position across loading states */\n  private readonly _savedScrollLeft = signal(0);\n  /** Observes tbody container height changes for skeleton row count calculation */\n  private _resizeObserver: ResizeObserver | null = null;\n  /** Debounces rapid settings changes (visibility/pin toggles) */\n  private _settingsDebounceTimeout: ReturnType<typeof setTimeout> | null = null;\n  private _visibilityDebounceTimeout: ReturnType<typeof setTimeout> | null = null;\n  /** Debounces filter change emissions to server */\n  private _filterEmitDebounceTimeout: ReturnType<typeof setTimeout> | null = null;\n  /** Keeps the bulk bar mounted long enough for its exit animation */\n  private _bulkBarTimer: ReturnType<typeof setTimeout> | null = null;\n  private _contentRowMenuOutsideTimer: ReturnType<typeof setTimeout> | null = null;\n  private _contentRowMenuOutsideCleanup: (() => void) | null = null;\n  private _cellInteractionOutsideCleanup: (() => void) | null = null;\n  private _pinnedRowHeightsFrame: number | null = null;\n  private _virtualSpacerWidthFrame: number | null = null;\n  private readonly _activeColumnVisibilityPopover = signal<ZPopoverDirective | null>(null);\n  private _hasInitializedColumnPinning = false;\n  private _initializedGroupingSchemaKey = '';\n  private _initializedPaginationSchemaKey = '';\n  private _isFitColumnScheduled = false;\n  private _skipNextConfigSave = false;\n\n  // ─── Template-bound State ─────────────────────────────────────────────────\n\n  /** Merged loading state from both zLoading input and config.loading */\n  protected readonly isLoading = computed(() => this.zConfig().loading ?? this.zLoading());\n  /** True during debounced async state transitions (sort/filter processing) */\n  protected readonly isProcessing = signal(false);\n  protected readonly dragInstanceId = `z-table-drag-${ZTableComponent._dragInstanceCount++}`;\n  protected readonly theadWrapper = viewChild<ElementRef<HTMLDivElement>>('theadWrapper');\n  protected readonly tableContainer = viewChild<ElementRef<HTMLDivElement>>('tableContainer');\n  protected readonly tbodyContainer = viewChild<ElementRef<HTMLDivElement>>('tbodyContainer');\n  protected readonly tbodyWrapper = viewChild<ElementRef<HTMLDivElement>>('tbodyWrapper');\n  protected readonly tbodyScrollbar = viewChild<NgScrollbar>('tbodyWrapper');\n  protected readonly tfootWrapper = viewChild<ElementRef<HTMLDivElement>>('tfootWrapper');\n  protected readonly expandedRowTemplate = viewChild<TemplateRef<unknown>>('expandedRowTemplate');\n  protected readonly virtualRowElements = viewChildren<ElementRef<HTMLDivElement>>('virtualRow');\n\n  // ─── TanStack Table State Signals ─────────────────────────────────────────\n  // These signals are the source of truth for table state. They are passed into\n  // createAngularTable() and updated via the on*Change callbacks.\n\n  protected readonly columnPinning = signal<ColumnPinningState>({ left: [], right: [] });\n  protected readonly columnVisibility = signal<VisibilityState>({});\n  protected readonly columnOrder = signal<ColumnOrderState>([]);\n  protected readonly expanded = signal<ExpandedState>({});\n  protected readonly groupingColumnIds = signal<string[]>([]);\n  protected readonly collapsedGroupIds = signal<Set<string>>(new Set());\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 filterResetVersion = signal(0);\n  protected readonly isFilterHeaderExpanded = signal(false);\n  protected readonly activeContentEditCell = signal<{ rowId: string; columnId: string } | null>(null);\n  protected readonly contentRowMenu = signal<{\n    row: Row<T>;\n    columnId?: string;\n    left: number;\n    top: number;\n  } | null>(null);\n\n  protected readonly activeCell = signal<{ rowId: string; columnId: string } | null>(null);\n  protected readonly cellSelectionAnchor = signal<{ rowId: string; columnId: string } | null>(null);\n  protected readonly cellSelectionFocus = signal<{ rowId: string; columnId: string } | null>(null);\n  // EN: Cell range-drag state. A pointerdown on a cell \"arms\" a drag; it only becomes a real drag\n  //     once the pointer genuinely MOVES (a document pointermove past a small threshold) with the\n  //     button held. pointerenter extends the range ONLY while `_isCellDragging` is true. Scrolling\n  //     (wheel / scrollbar / trackpad / keyboard) never fires pointermove over the body, so it can\n  //     never be mistaken for a range drag — fixes \"scroll after selecting a cell selects a range\".\n  // VI: Trạng thái kéo chọn range. pointerdown chỉ \"lên nòng\"; chỉ thành kéo thật khi con trỏ DI\n  //     CHUYỂN thật sự (pointermove vượt ngưỡng nhỏ) lúc giữ nút. pointerenter chỉ mở rộng range khi\n  //     đang kéo thật. Cuộn (wheel/scrollbar/trackpad) không bắn pointermove nên không bị nhầm.\n  private _cellDragArmed = false;\n  private _isCellDragging = false;\n  private _cellDragStart: { x: number; y: number } | null = null;\n  private _cellDragCleanup: (() => void) | null = null;\n  /** Pointer must move at least this many px before an armed press becomes a range drag. */\n  private static readonly _cellDragThreshold = 3;\n  protected readonly cellMenu = signal<{\n    rowId: string;\n    columnId: string;\n    left: number;\n    top: number;\n  } | null>(null);\n\n  protected readonly contentRowMenuControl = signal<ZPopoverControl | null>(null);\n  protected readonly cellMenuControl = signal<ZPopoverControl | null>(null);\n  protected readonly contentRowClipboard = signal<T[]>([]);\n  // Giữ kích thước cột đã ổn định khi config được tạo lại trong lúc tải dữ liệu.\n  protected readonly columnSizingState = linkedSignal<ColumnDef<T>[], ColumnSizingState>({\n    source: () => this._columns(),\n    computation: (cols, previous) => this._reconcileColumnSizing(cols, previous),\n  });\n\n  // Tách kích thước gốc khỏi phần chiều rộng được phân bổ thêm theo container.\n  private readonly _columnBaseSizing = linkedSignal<ColumnDef<T>[], ColumnSizingState>({\n    source: () => this._columns(),\n    computation: (cols, previous) => this._reconcileColumnSizing(cols, previous),\n  });\n\n  protected readonly appliedFilterChips = computed<ZTableAppliedFilterChip[]>(() => {\n    const chips: ZTableAppliedFilterChip[] = [];\n\n    for (const filter of this.columnFilters()) {\n      const value = this._formatFilterChipValue(filter.id, filter.value);\n      if (!value) {\n        continue;\n      }\n\n      chips.push({\n        type: 'filter',\n        id: filter.id,\n        columnId: filter.id,\n        label: this._getColumnDisplayHeader(filter.id),\n        value,\n      });\n    }\n\n    for (const sort of this.sorting()) {\n      chips.push({\n        type: 'sort',\n        id: `sort:${sort.id}`,\n        columnId: sort.id,\n        label: this._getColumnDisplayHeader(sort.id),\n        value: this._zTranslate.instant(\n          sort.desc ? 'i18n_z_ui_table_sort_desc_short' : 'i18n_z_ui_table_sort_asc_short'\n        ),\n      });\n    }\n\n    return chips;\n  });\n\n  protected readonly visibleAppliedFilterChips = computed(() =>\n    this.appliedFilterChips().slice(0, Z_TABLE_FILTER_HEADER_VISIBLE_COUNT)\n  );\n\n  protected readonly overflowAppliedFilterChips = computed(() =>\n    this.appliedFilterChips().slice(Z_TABLE_FILTER_HEADER_VISIBLE_COUNT)\n  );\n\n  protected readonly hiddenAppliedFilterChipCount = computed(() =>\n    Math.max(0, this.appliedFilterChips().length - Z_TABLE_FILTER_HEADER_VISIBLE_COUNT)\n  );\n\n  /** Note: pageIndex is 1-based here; converted to 0-based for TanStack via _tanstackPagination */\n  protected readonly pagination = signal<PaginationState>({ pageIndex: 1, pageSize: 10 });\n  protected readonly sorting = signal<SortingState>([]);\n  /**\n   * Caches the last server-provided total to avoid flickering to 0\n   * during loading transitions in server-side pagination mode.\n   */\n  private readonly _serverPaginationTotal = signal(0);\n\n  /** Container CSS classes combining variant + user-provided classes */\n  protected readonly classTable = computed(() =>\n    zMergeClasses(\n      'z-table-container',\n      this.zVariant() === 'default' ? 'shadow-card' : 'z-table-borderless',\n      this.zClass()\n    )\n  );\n\n  /** Convert 1-based pagination to TanStack's 0-based pageIndex */\n  private readonly _tanstackPagination = computed(() => ({\n    ...this.pagination(),\n    pageIndex: Math.max(0, this.pagination().pageIndex - 1),\n  }));\n\n  private readonly _configPagination = computed(() => {\n    const config = this.zConfig();\n    if (config.mode === 'server' && config.initialState?.pagination) {\n      return config.initialState.pagination;\n    }\n    return null;\n  });\n\n  protected readonly paginationTotal = computed(() => {\n    const config = this.zConfig();\n    if (config.mode === 'server') {\n      const serverTotal = config.totalCount ?? config.totalRows;\n      if (typeof serverTotal === 'number') {\n        if (serverTotal > 0 || !this.isLoading()) {\n          return serverTotal;\n        }\n      }\n\n      const cachedServerTotal = this._serverPaginationTotal();\n      if (cachedServerTotal > 0) {\n        return cachedServerTotal;\n      }\n\n      return serverTotal ?? 0;\n    }\n\n    return this.table.getFilteredRowModel().rows.length;\n  });\n\n  // ─── Scroll & Border State ────────────────────────────────────────────────\n\n  protected readonly hasVerticalScroll = signal(false);\n  protected readonly hasHorizontalScroll = signal(false);\n  /** True when the last row touches or extends past the container bottom (no gap) */\n  protected readonly lastRowTouchesBottom = signal(true);\n  protected readonly showSettingsDrawer = signal(false);\n  protected readonly showHorizontalBorder = signal(true);\n  protected readonly showVerticalBorder = signal(true);\n  protected readonly showHeaderFooterShadow = signal(true);\n  protected readonly bulkBarMounted = signal(false);\n  protected readonly bulkBarClosing = signal(false);\n  protected readonly bulkBarConfig = signal<ZTableBulkActionOptions<T> | null>(null);\n  protected readonly bulkBarContext = signal<ZTableBulkActionContext<T> | null>(null);\n  protected readonly bulkBarItems = signal<ZTableBulkActionRenderItem<T>[]>([]);\n\n  /** True when table body is scrolled away from left edge (shows left pin shadow) */\n  protected readonly hasScrollLeft = signal(false);\n  /** True when table has right-pinned columns and body isn't scrolled to the end */\n  protected readonly hasScrollRight = signal(false);\n  /** True khi top-pinned rows đang đè lên nội dung body đã scroll qua đầu */\n  protected readonly hasScrollTop = signal(false);\n  /** True khi bottom-pinned rows đang đè lên nội dung body còn scroll xuống được */\n  protected readonly hasScrollBottom = signal(false);\n  /** Maps row IDs to measured DOM heights for pinned row offset calculations */\n  protected readonly pinnedRowHeights = signal<Record<string, number>>({});\n  protected readonly virtualMeasuredLeftSpacerWidth = signal(0);\n  protected readonly virtualMeasuredRightSpacerWidth = signal(0);\n  private readonly _virtualMeasuredLeftSpacerSourceWidth = signal(0);\n  private readonly _virtualMeasuredRightSpacerSourceWidth = signal(0);\n  protected readonly defaultBulkActions = computed<ZTableBulkActionItem<T>[]>(() => [\n    {\n      key: 'clear-selection',\n      label: 'i18n_z_ui_table_clear_selection',\n      icon: 'lucideX',\n      type: 'outline',\n    },\n  ]);\n\n  // ─── Internal Change Tracking ──────────────────────────────────────────────\n\n  /** Bumped to force recomputation of pinned column IDs after programmatic pin changes */\n  private readonly _columnPinVersion = signal(0);\n  /** Bumped to trigger data refresh (e.g., after addItem/deleteItem via control API) */\n  private readonly _dataForceUpdate = signal(0);\n  /** Stores a temporary locally reordered dataset until parent pushes a new data reference */\n  private readonly _rowDragDataOverride = signal<T[] | null>(null);\n  /** Tracks the latest external data array reference to detect parent-driven refreshes */\n  private _lastExternalDataRef: T[] | null = null;\n  /** Set when a single row is updated via control API (for targeted re-render) */\n  protected readonly _rowUpdate = signal<{ rowId: string; updates: Record<string, unknown> } | null>(null);\n\n  /**\n   * Column config lookup cache — cleared when column reference changes.\n   * Avoids repeated recursive searches during render cycles.\n   */\n  private _columnConfigCache = new Map<string, ZTableColumnConfig<T> | undefined>();\n  private _lastColumnsRef: ZTableColumnConfig<T>[] | null = null;\n\n  protected readonly pinnedColumnIds = computed(() => {\n    this._columnPinVersion();\n    return this.columnOrder().filter(id => {\n      if (this._isFixedLeadingColumnId(id)) {\n        return false;\n      }\n\n      const column = this.table.getColumn(id);\n      return column && column.getIsPinned();\n    });\n  });\n\n  protected readonly pinAvailabilityMap = computed<Record<string, { left: boolean; right: boolean }>>(() => {\n    const viewportWidth = this.tbodyContainerWidth();\n    const result: Record<string, { left: boolean; right: boolean }> = {};\n\n    for (const column of this.table.getAllFlatColumns()) {\n      result[column.id] = {\n        left: this._canPinWithinViewport(column, 'left', viewportWidth),\n        right: this._canPinWithinViewport(column, 'right', viewportWidth),\n      };\n    }\n\n    return result;\n  });\n\n  protected readonly isPinnedLayoutWithinContainer = computed(() => {\n    const containerWidth = this.tbodyContainerWidth();\n    if (containerWidth <= 0) {\n      return true;\n    }\n\n    const pinnedIds = new Set([...(this.columnPinning().left ?? []), ...(this.columnPinning().right ?? [])]);\n    return this._getPinnedWidth(pinnedIds) < containerWidth;\n  });\n\n  protected readonly pendingVisibleColumns = signal<string[]>([]);\n  protected readonly pendingColumnOrder = signal<string[]>([]);\n  protected readonly pendingShowHeaderFooterShadow = signal(true);\n\n  // ─── Feature Detection Computeds ──────────────────────────────────────────\n  // These computed signals scan the column config tree to determine which\n  // features are active, avoiding feature-gating at template render time.\n\n  /** True if ANY body column uses rowSpan — affects virtual grouping and expand column behavior */\n  protected readonly hasBodyRowSpan = computed(() => {\n    const columns = this.zConfig().columns ?? [];\n    const checkRowSpan = (col: ZTableColumnConfig<T>): boolean => {\n      if (isBodyConfig(col.body) && col.body.rowSpan !== undefined) {\n        return true;\n      }\n\n      if (col.columns?.length) {\n        return col.columns.some(c => checkRowSpan(c));\n      }\n\n      return false;\n    };\n\n    return columns.some(c => checkRowSpan(c));\n  });\n\n  protected readonly hasSelectColumn = computed(() => {\n    const columns = this.zConfig().columns ?? [];\n    return columns.some(c => isZTableColumnType(c, 'select'));\n  });\n\n  protected readonly hasExpandColumn = computed(() => {\n    const columns = this.zConfig().columns ?? [];\n    return columns.some(c => isZTableColumnType(c, 'expand'));\n  });\n\n  protected readonly hasRowDragColumn = computed(() => !!this.zConfig().enableRowDragging);\n\n  protected readonly hasContentEditableColumns = computed(() => {\n    const checkColumn = (column: ZTableColumnConfig<T>): boolean => {\n      if (isBodyConfig(column.body) && column.body.editContent) {\n        return true;\n      }\n\n      if (column.columns?.length) {\n        return column.columns.some(child => checkColumn(child));\n      }\n\n      return false;\n    };\n\n    return (this.zConfig().columns ?? []).some(column => checkColumn(column));\n  });\n\n  protected readonly canUseContentRowInsert = computed(\n    () => this.zConfig().enableContentRowInsert !== false && this.hasContentEditableColumns()\n  );\n\n  protected readonly canUseRowSelection = computed(() => this.hasSelectColumn() && !this.hasContentEditableColumns());\n\n  // Tính năng select cell, copy cell, context menu cell, range select cell\n  protected readonly cellSelectionOptions = computed<ZTableResolvedCellSelectionOptions<T>>(() => {\n    const config = this.zConfig().enableCellSelection;\n    if (config === false || config === undefined) {\n      // return { enabled: true, range: true, contextMenu: true, copyWithHeaders: true };\n      return { enabled: false, range: false, contextMenu: false, copyWithHeaders: false };\n    }\n\n    if (config === true) {\n      return { enabled: true, range: true, contextMenu: true, copyWithHeaders: true };\n    }\n\n    return {\n      enabled: config.enabled !== false,\n      range: config.range !== false,\n      contextMenu: config.contextMenu !== false,\n      copyWithHeaders: config.copyWithHeaders !== false,\n      disabledColumnIds: config.disabledColumnIds,\n      isCellDisabled: config.isCellDisabled,\n    };\n  });\n\n  protected readonly canUseCellSelection = computed(() => this.cellSelectionOptions().enabled);\n\n  protected readonly selectedCellIds = computed(() => {\n    const range = this._getSelectedCellRange();\n    if (!range) {\n      return new Set<string>();\n    }\n\n    const ids = new Set<string>();\n    for (const rowId of range.rowIds) {\n      for (const columnId of range.columnIds) {\n        ids.add(this._getCellSelectionId(rowId, columnId));\n      }\n    }\n\n    return ids;\n  });\n\n  protected readonly visualSelectedCellIds = computed(() => {\n    const range = this._getSelectedCellRange();\n    if (!range) {\n      return new Set<string>();\n    }\n\n    return new Set(this._getSelectedCellVisualRects(range).map(rect => rect.id));\n  });\n\n  protected readonly hasMultipleSelectedCells = computed(() => this.selectedCellIds().size > 1);\n\n  protected readonly canCopyCellMenuSelection = computed(() => {\n    const menu = this.cellMenu();\n    if (!menu) {\n      return false;\n    }\n\n    return this.selectedCellIds().has(this._getCellSelectionId(menu.rowId, menu.columnId));\n  });\n\n  protected readonly selectedCellRangeInsets = computed(() => {\n    const range = this._getSelectedCellRange();\n    const insets = new Map<string, { top: number; right: number; bottom: number; left: number }>();\n    if (!range) {\n      return insets;\n    }\n\n    for (const rect of this._getSelectedCellVisualRects(range)) {\n      const rowSpan = rect.rowEnd - rect.rowStart + 1;\n      const colSpan = rect.columnEnd - rect.columnStart + 1;\n      insets.set(rect.id, {\n        top: ((rect.selectedRowStart - rect.rowStart) / rowSpan) * 100,\n        right: ((rect.columnEnd - rect.selectedColumnEnd) / colSpan) * 100,\n        bottom: ((rect.rowEnd - rect.selectedRowEnd) / rowSpan) * 100,\n        left: ((rect.selectedColumnStart - rect.columnStart) / colSpan) * 100,\n      });\n    }\n\n    return insets;\n  });\n\n  protected readonly selectedCellEdgeIds = computed(() => {\n    const range = this._getSelectedCellRange();\n    const edges = {\n      top: new Set<string>(),\n      right: new Set<string>(),\n      bottom: new Set<string>(),\n      left: new Set<string>(),\n    };\n    if (!range) {\n      return edges;\n    }\n\n    const rects = this._getSelectedCellVisualRects(range);\n    const selectedSlots = new Set<string>();\n\n    for (const rect of rects) {\n      for (let rowIndex = rect.selectedRowStart; rowIndex <= rect.selectedRowEnd; rowIndex++) {\n        for (let columnIndex = rect.selectedColumnStart; columnIndex <= rect.selectedColumnEnd; columnIndex++) {\n          selectedSlots.add(this._getCellVisualSlotId(rowIndex, columnIndex));\n        }\n      }\n    }\n\n    for (const rect of rects) {\n      if (this._hasOutsideVisualNeighbor(rect, selectedSlots, 'top')) {\n        edges.top.add(rect.id);\n      }\n      if (this._hasOutsideVisualNeighbor(rect, selectedSlots, 'right')) {\n        edges.right.add(rect.id);\n      }\n      if (this._hasOutsideVisualNeighbor(rect, selectedSlots, 'bottom')) {\n        edges.bottom.add(rect.id);\n      }\n      if (this._hasOutsideVisualNeighbor(rect, selectedSlots, 'left')) {\n        edges.left.add(rect.id);\n      }\n    }\n\n    return edges;\n  });\n\n  protected readonly contentRowDeleteCount = computed(() => {\n    const selectedCount = this.selectedRowIds().length;\n    if (selectedCount > 0) {\n      return selectedCount;\n    }\n\n    return this.contentRowMenu() ? 1 : 0;\n  });\n\n  protected readonly canMoveContentRowUp = computed(() => (this.contentRowMenu()?.row.index ?? 0) > 0);\n  protected readonly canMoveContentRowDown = computed(() => {\n    const row = this.contentRowMenu()?.row;\n    return !!row && row.index < this.table.getRowModel().rows.length - 1;\n  });\n\n  protected readonly canUseRowDrag = computed(() => {\n    const config = this.zConfig();\n    if (!config.enableRowDragging) {\n      return false;\n    }\n\n    if (config.mode === 'server' || !!config.getSubRows) {\n      return false;\n    }\n\n    const rowPinning = this.rowPinning();\n    if ((rowPinning.top?.length ?? 0) > 0 || (rowPinning.bottom?.length ?? 0) > 0) {\n      return false;\n    }\n\n    if (this.isLoading() || this.isProcessing()) {\n      return false;\n    }\n\n    if (this.sorting().length > 0) {\n      return false;\n    }\n\n    return true;\n  });\n\n  protected readonly isVirtualRowDragEnabled = computed(() => {\n    if (!this.canUseRowDrag()) {\n      return false;\n    }\n\n    if (!this.isVirtual()) {\n      return false;\n    }\n\n    return !this.hasBodyRowSpan();\n  });\n\n  protected readonly isRowDragEnabled = computed(() => {\n    if (!this.canUseRowDrag()) {\n      return false;\n    }\n\n    return !this.hasBodyRowSpan();\n  });\n\n  protected readonly actionColumnInfo = computed<{\n    columnId: string;\n    config: ZTableActionColumnConfig<T>;\n    width: number;\n  } | null>(() => {\n    const columns = this.zConfig().columns ?? [];\n    const findActionColumn = (\n      cols: ZTableColumnConfig<T>[]\n    ): { columnId: string; config: ZTableActionColumnConfig<T> } | null => {\n      for (const col of cols) {\n        if (isBodyConfig(col.body)) {\n          const actionConfig = this._getActionColumnConfig(col.body);\n          if (actionConfig) {\n            return { columnId: col.id, config: actionConfig };\n          }\n        }\n        if (col.columns?.length) {\n          const found = findActionColumn(col.columns);\n          if (found) {\n            return found;\n          }\n        }\n      }\n\n      return null;\n    };\n\n    const actionCol = findActionColumn(columns);\n    if (!actionCol) {\n      return null;\n    }\n\n    const { config } = actionCol;\n    const maxVisible = config.maxVisible ?? Z_TABLE_DEFAULT_MAX_VISIBLE_ACTIONS;\n    const possibleActionCount = Array.isArray(config.actions)\n      ? config.actions.filter(action => action.hidden !== true).length\n      : maxVisible;\n    const buttonCount = Math.min(possibleActionCount, maxVisible);\n\n    const buttonWidth = Z_TABLE_DEFAULT_ACTION_BUTTON_WIDTH;\n    const gap = 4;\n    const padding = 16;\n    const width = buttonCount * buttonWidth + Math.max(0, buttonCount - 1) * gap + padding;\n\n    return {\n      columnId: actionCol.columnId,\n      config: actionCol.config,\n      width,\n    };\n  });\n\n  private readonly _fixedColumnPinning = computed(() => {\n    const actionColumnId = this.actionColumnInfo()?.columnId;\n    const configuredColumnIds = new Set<string>();\n    const collectColumnIds = (columns: ZTableColumnConfig<T>[]): void => {\n      for (const column of columns) {\n        configuredColumnIds.add(column.id);\n        if (column.columns?.length) {\n          collectColumnIds(column.columns);\n        }\n      }\n    };\n    collectColumnIds(this.zConfig().columns ?? []);\n\n    const left = ['rowDrag', 'select', 'expand', 'actionRowPin'].filter(columnId => {\n      if (isZTableColumnTypeById(columnId, this.zConfig().columns ?? [], 'rowDrag')) {\n        return this.hasRowDragColumn();\n      }\n\n      if (isZTableColumnTypeById(columnId, this.zConfig().columns ?? [], 'rowPin')) {\n        return this.zConfig().enableRowPinning === true && !this.hasSelectColumn() && !this.hasExpandColumn();\n      }\n\n      return configuredColumnIds.has(columnId);\n    });\n    const actionColumn = actionColumnId ? this._findColumnConfig(actionColumnId) : undefined;\n    const defaultActionPosition = actionColumn?.pinned === 'left' ? 'left' : 'right';\n\n    return { left, actionColumnId, defaultActionPosition };\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 hasLocalFiltering = computed(() => {\n    const columns = this.zConfig().columns ?? [];\n    const checkLocalFilter = (col: ZTableColumnConfig<T>): boolean => {\n      const filterConfig = typeof col.filter === 'boolean' ? { enabled: col.filter } : col.filter;\n      if (filterConfig?.enabled) {\n        const filterMode = filterConfig.mode ?? 'local';\n        if (filterMode === 'local') {\n          return true;\n        }\n      }\n\n      if (col.columns?.length) {\n        return col.columns.some(c => checkLocalFilter(c));\n      }\n\n      return false;\n    };\n    return columns.some(c => checkLocalFilter(c));\n  });\n\n  protected readonly hasSorting = computed(() => {\n    const config = this.zConfig();\n    if (config.enableColumnSorting === false) {\n      return false;\n    }\n\n    if (config.enableColumnSorting === true) {\n      return true;\n    }\n\n    const columns = config.columns ?? [];\n    const checkSorting = (col: ZTableColumnConfig<T>): boolean => {\n      const sortConfig = typeof col.sort === 'boolean' ? { enabled: col.sort } : col.sort;\n      if (sortConfig?.enabled) {\n        return true;\n      }\n\n      if (col.columns?.length) {\n        return col.columns.some(c => checkSorting(c));\n      }\n\n      return false;\n    };\n    return columns.some(c => checkSorting(c));\n  });\n\n  protected readonly hasLocalSorting = computed(() => {\n    const config = this.zConfig();\n    if (config.enableColumnSorting === false) {\n      return false;\n    }\n\n    const columns = config.columns ?? [];\n    const checkLocalSorting = (col: ZTableColumnConfig<T>): boolean => {\n      const sortConfig = typeof col.sort === 'boolean' ? { enabled: col.sort } : col.sort;\n      if (sortConfig?.enabled) {\n        const sortMode = sortConfig.mode ?? 'local';\n        if (sortMode === 'local') {\n          return true;\n        }\n      }\n\n      if (col.columns?.length) {\n        return col.columns.some(c => checkLocalSorting(c));\n      }\n\n      return false;\n    };\n    return columns.some(c => checkLocalSorting(c));\n  });\n\n  protected readonly hasServerFiltering = computed(() => {\n    const columns = this.zConfig().columns ?? [];\n    const checkServerFilter = (col: ZTableColumnConfig<T>): boolean => {\n      const filterConfig = typeof col.filter === 'boolean' ? { enabled: col.filter } : col.filter;\n      if (filterConfig?.enabled) {\n        const filterMode = filterConfig.mode ?? 'local';\n        if (filterMode === 'server') {\n          return true;\n        }\n      }\n\n      if (col.columns?.length) {\n        return col.columns.some(c => checkServerFilter(c));\n      }\n\n      return false;\n    };\n    return columns.some(c => checkServerFilter(c));\n  });\n\n  protected readonly groupingConfig = computed<ZTableGroupingConfig<T>>(() => {\n    const { enableGrouping: grouping } = this.zConfig();\n    if (grouping === false) {\n      return { enabled: false, mode: 'local', allowHeaderMenu: true, defaultExpanded: true, showCount: true };\n    }\n\n    if (grouping === undefined) {\n      return { enabled: true, mode: 'local', allowHeaderMenu: true, defaultExpanded: true, showCount: true };\n    }\n\n    if (typeof grouping === 'boolean') {\n      return { enabled: grouping, mode: 'local', allowHeaderMenu: true, defaultExpanded: true, showCount: true };\n    }\n\n    return {\n      enabled: grouping.enabled !== false,\n      mode: grouping.mode ?? 'local',\n      columns: grouping.columns,\n      initialColumns: grouping.initialColumns,\n      allowHeaderMenu: grouping.allowHeaderMenu !== false,\n      defaultExpanded: grouping.defaultExpanded !== false,\n      showCount: grouping.showCount !== false,\n      totals: grouping.totals,\n      serverGroupColumnId: grouping.serverGroupColumnId,\n      serverGroups: grouping.serverGroups,\n    };\n  });\n\n  /** EN/VI: true khi grouping chạy ở chế độ server (group meta do server cung cấp). */\n  protected readonly isServerGrouping = computed(() => {\n    const config = this.groupingConfig();\n    return config.enabled === true && config.mode === 'server' && this.zConfig().mode === 'server';\n  });\n\n  protected readonly canUseGrouping = computed(() => {\n    const config = this.groupingConfig();\n    if (!config.enabled) {\n      return false;\n    }\n\n    if (this.hasBodyRowSpan()) {\n      return false;\n    }\n\n    // Server grouping: group do server cung cấp, table chỉ render.\n    if (this.isServerGrouping()) {\n      return true;\n    }\n\n    // Local grouping: group ngay trên data của trang hiện tại (kể cả khi table mode='server',\n    // tức data lấy về theo page rồi group tại client — giống filter/sort local).\n    return config.mode === 'local' || config.mode === undefined;\n  });\n\n  /** EN/VI: cột group hiệu lực cho chế độ server (config cung cấp, không suy ra từ data). */\n  protected readonly serverGroupColumnId = computed(() => {\n    const config = this.groupingConfig();\n    return config.serverGroupColumnId ?? config.columns?.[0] ?? null;\n  });\n\n  protected readonly activeGroupingColumnIds = computed<string[]>(() => {\n    if (!this.canUseGrouping()) {\n      return [];\n    }\n\n    if (this.isServerGrouping()) {\n      const selectedColumnId = this.groupingColumnIds()[0];\n      const fallbackColumnId = this.serverGroupColumnId();\n      return selectedColumnId ? [selectedColumnId] : fallbackColumnId ? [fallbackColumnId] : [];\n    }\n\n    return this.groupingColumnIds();\n  });\n\n  protected readonly activeGroupingColumnId = computed(() => this.activeGroupingColumnIds()[0] ?? null);\n\n  protected readonly groupingColumnMap = computed<Record<string, boolean>>(() => {\n    const result: Record<string, boolean> = {};\n    for (const columnId of this.activeGroupingColumnIds()) {\n      result[columnId] = true;\n    }\n    return result;\n  });\n\n  protected readonly groupTotalColumnMap = computed<Record<string, boolean>>(() => {\n    const result: Record<string, boolean> = {};\n    for (const total of this.groupingConfig().totals ?? []) {\n      result[total.columnId] = true;\n    }\n    return result;\n  });\n\n  protected readonly groupTotalConfigMap = computed<Record<string, ZTableGroupTotalConfig<T>>>(() => {\n    const result: Record<string, ZTableGroupTotalConfig<T>> = {};\n    for (const total of this.groupingConfig().totals ?? []) {\n      result[total.columnId] = total as ZTableGroupTotalConfig<T>;\n    }\n    return result;\n  });\n\n  protected readonly groupableColumnMap = computed<Record<string, boolean>>(() => {\n    const result: Record<string, boolean> = {};\n    const config = this.groupingConfig();\n    if (!this.canUseGrouping() || config.allowHeaderMenu === false) {\n      return result;\n    }\n\n    const allowedIds = config.columns?.length ? new Set(config.columns) : null;\n    for (const column of this.table.getAllLeafColumns()) {\n      if (this._isSpecialColumnId(column.id)) {\n        continue;\n      }\n\n      const columnConfig = this._findColumnConfig(column.id);\n      result[column.id] = columnConfig?.enableGrouping !== false && (allowedIds ? allowedIds.has(column.id) : true);\n    }\n\n    return result;\n  });\n\n  protected readonly groupingHeaderMenuMap = computed<Record<string, boolean>>(() => {\n    const result: Record<string, boolean> = {};\n    const groupableColumns = this.groupableColumnMap();\n    const activeColumnMap = this.groupingColumnMap();\n\n    for (const headerGroup of this.orderedHeaderGroups()) {\n      for (const header of headerGroup.headers) {\n        const isLeafColumn = header.column.columns.length === 0;\n        result[header.id] =\n          isLeafColumn && Boolean(groupableColumns[header.column.id] || activeColumnMap[header.column.id]);\n      }\n    }\n\n    return result;\n  });\n\n  protected readonly groupedCenterRowItems = computed<ZTableGroupedRowItem<T>[]>(() => {\n    const columnIds = this.activeGroupingColumnIds();\n    if (columnIds.length === 0) {\n      return this.table.getCenterRows().map(row => ({ type: 'row', row }));\n    }\n\n    return this.isServerGrouping()\n      ? this._buildServerGroupedItems(columnIds[0])\n      : this._buildLocalGroupedItems(columnIds);\n  });\n\n  /** Local grouping: group được tính tại client từ rows của trang hiện tại. */\n  private _buildLocalGroupedItems(columnIds: string[]): ZTableGroupedRowItem<T>[] {\n    const items: ZTableGroupedRowItem<T>[] = [];\n    this._appendLocalGroupedItems(items, this.table.getCenterRows(), columnIds, 0, '');\n    return items;\n  }\n\n  private _appendLocalGroupedItems(\n    items: ZTableGroupedRowItem<T>[],\n    rows: Row<T>[],\n    columnIds: string[],\n    depth: number,\n    parentGroupId: string\n  ): void {\n    const columnId = columnIds[depth];\n    if (!columnId) {\n      for (const row of rows) {\n        items.push({ type: 'row', row, isGroupChild: true, groupDepth: depth });\n      }\n      return;\n    }\n\n    const toggledGroupIds = this.collapsedGroupIds();\n    const defaultExpanded = this.groupingConfig().defaultExpanded !== false;\n    const columnLabel = this._getColumnCopyHeader(columnId);\n    const groups = new Map<string, { value: unknown; rows: Row<T>[] }>();\n    for (const row of rows) {\n      const value = this._getRowGroupValue(columnId, row);\n      const groupId = this._getGroupId(columnId, value, parentGroupId);\n      const current = groups.get(groupId);\n      if (current) {\n        current.rows.push(row);\n        continue;\n      }\n\n      groups.set(groupId, {\n        value,\n        rows: [row],\n      });\n    }\n\n    for (const [id, group] of groups) {\n      const expanded = defaultExpanded ? !toggledGroupIds.has(id) : toggledGroupIds.has(id);\n      items.push({\n        type: 'group',\n        id,\n        columnId,\n        depth,\n        value: group.value,\n        label: this._getColumnGroupLabel(columnId, group.value, group.rows),\n        columnLabel,\n        count: group.rows.length,\n        expanded,\n        totals: this._getGroupTotals(group.rows, group.value, depth),\n      });\n\n      if (!expanded) {\n        continue;\n      }\n\n      this._appendLocalGroupedItems(items, group.rows, columnIds, depth + 1, id);\n    }\n  }\n\n  /**\n   * Server grouping: thứ tự & meta group do `config.enableGrouping.serverGroups` quyết định.\n   * Child rows lấy từ `getCenterRows()` (data parent đã fetch) và gán vào group theo value.\n   */\n  private _buildServerGroupedItems(columnId: string): ZTableGroupedRowItem<T>[] {\n    const serverGroups = this.groupingConfig().serverGroups ?? [];\n    const toggledGroupIds = this.collapsedGroupIds();\n    const defaultExpanded = this.groupingConfig().defaultExpanded !== false;\n    const columnLabel = this._getColumnCopyHeader(columnId);\n\n    // Gom rows đã fetch theo groupId để gán vào đúng group meta.\n    const rowsByGroupId = new Map<string, Row<T>[]>();\n    for (const row of this.table.getCenterRows()) {\n      const groupId = this._getGroupId(columnId, this._getRowGroupValue(columnId, row));\n      const bucket = rowsByGroupId.get(groupId);\n      if (bucket) {\n        bucket.push(row);\n        continue;\n      }\n      rowsByGroupId.set(groupId, [row]);\n    }\n\n    const items: ZTableGroupedRowItem<T>[] = [];\n    for (const group of serverGroups) {\n      const groupId = this._getGroupId(columnId, group.value);\n      const expanded = defaultExpanded ? !toggledGroupIds.has(groupId) : toggledGroupIds.has(groupId);\n      const rows = rowsByGroupId.get(groupId) ?? [];\n      items.push({\n        type: 'group',\n        id: groupId,\n        columnId,\n        depth: 0,\n        value: group.value,\n        label: group.label ?? this._getColumnGroupLabel(columnId, group.value, rows),\n        columnLabel,\n        count: group.count ?? rows.length,\n        expanded,\n        loading: group.loading === true,\n        totals: group.totals,\n      });\n\n      if (!expanded) {\n        continue;\n      }\n\n      for (const row of rows) {\n        items.push({ type: 'row', row, isGroupChild: true, groupDepth: 1 });\n      }\n    }\n\n    return items;\n  }\n\n  private _getGroupTotals(rows: Row<T>[], value: unknown, depth: number): Record<string, unknown> | undefined {\n    const totalConfigs = this.groupingConfig().totals ?? [];\n    if (totalConfigs.length === 0) {\n      return undefined;\n    }\n\n    const totals: Record<string, unknown> = {};\n    for (const totalConfig of totalConfigs as ZTableGroupTotalConfig<T>[]) {\n      const context: ZTableGroupTotalContext<T> = {\n        columnId: totalConfig.columnId,\n        rows,\n        value,\n        depth,\n      };\n      totals[totalConfig.columnId] =\n        typeof totalConfig.content === 'function'\n          ? totalConfig.content(context)\n          : this._sumGroupColumn(rows, totalConfig.columnId);\n    }\n\n    return totals;\n  }\n\n  private _sumGroupColumn(rows: Row<T>[], columnId: string): number {\n    return rows.reduce((total, row) => {\n      const value = row.getValue(columnId);\n      const numericValue = typeof value === 'number' ? value : Number(value);\n      if (!Number.isFinite(numericValue)) {\n        return total;\n      }\n      return total + numericValue;\n    }, 0);\n  }\n\n  /**\n   * EN: Flat list of body rows in the exact order they are rendered. When grouping is active the\n   *     center rows are re-ordered group-by-group, so the flat `table.getRowModel().rows` no longer\n   *     matches the visual order. The `z-at-bottom` border logic must use this visual order, otherwise\n   *     `border-bottom: none` is applied to whichever row happens to be last in the flat model — which\n   *     after grouping lands somewhere in the middle of the table.\n   * VI: Danh sách phẳng các row body theo đúng thứ tự render. Khi đang group, center rows bị sắp xếp\n   *     lại theo từng group nên `table.getRowModel().rows` không còn khớp thứ tự hiển thị. Logic\n   *     border `z-at-bottom` phải dùng thứ tự hiển thị này, nếu không `border-bottom: none` sẽ bị gán\n   *     nhầm cho row đang nằm ở giữa bảng.\n   */\n  protected readonly renderedBodyRows = computed<Row<T>[]>(() => {\n    const topRows = this.table.getTopRows();\n    const bottomRows = this.bottomRowsReversed();\n\n    if (this.activeGroupingColumnIds().length === 0) {\n      // VISUAL order: pinned-top rows render first, then center rows, then pinned-bottom (reversed).\n      // getRowModel().rows keeps pinned rows at their ORIGINAL data position, so using it directly\n      // makes a cell range spanning a pin boundary compute wrong row indices (and select nothing).\n      if (topRows.length === 0 && bottomRows.length === 0) {\n        return this.table.getRowModel().rows as Row<T>[];\n      }\n      return [...topRows, ...this.table.getCenterRows(), ...bottomRows] as Row<T>[];\n    }\n\n    const centerRows = this.groupedCenterRowItems()\n      .filter((item): item is ZTableDataRowItem<T> => item.type === 'row')\n      .map(item => item.row);\n\n    return [...topRows, ...centerRows, ...bottomRows] as Row<T>[];\n  });\n\n  protected readonly bodyRowSpanRows = computed<Row<T>[]>(() => {\n    if (!this.isVirtual()) {\n      return this.renderedBodyRows();\n    }\n\n    if (this.activeGroupingColumnIds().length === 0) {\n      return this.table.getCenterRows() as Row<T>[];\n    }\n\n    return this.groupedCenterRowItems()\n      .filter((item): item is ZTableDataRowItem<T> => item.type === 'row')\n      .map(item => item.row);\n  });\n\n  protected readonly virtualGroupedFlatItems = computed<ZVirtualFlatItem<T>[]>(() => {\n    if (!this.isVirtual() || this.activeGroupingColumnIds().length === 0) {\n      return [];\n    }\n    const items: ZVirtualFlatItem<T>[] = [];\n    for (const item of this.groupedCenterRowItems()) {\n      if (item.type === 'group') {\n        items.push({ type: 'group-header', groupItem: item });\n      } else {\n        items.push({\n          type: 'data',\n          rows: [item.row],\n          isGroupChild: item.isGroupChild ?? false,\n          groupDepth: item.groupDepth ?? 0,\n        });\n      }\n    }\n    return items;\n  });\n\n  protected _getVirtualGroupHeader(item: ZVirtualFlatItem<T> | undefined): ZTableGroupRowItem | null {\n    return item?.type === 'group-header' ? item.groupItem : null;\n  }\n\n  protected _isVirtualGroupChild(item: ZVirtualFlatItem<T> | undefined): boolean {\n    return item?.type === 'data' ? item.isGroupChild : false;\n  }\n\n  protected _getVirtualGroupDepth(item: ZVirtualFlatItem<T> | undefined): number {\n    return item?.type === 'data' ? item.groupDepth : 0;\n  }\n\n  protected readonly searchConfig = computed(() => {\n    const { search } = this.zConfig();\n    if (!search) {\n      return null;\n    }\n\n    if (typeof search === 'boolean') {\n      return search\n        ? {\n            enabled: true,\n            placeholder: 'i18n_z_ui_table_search',\n            debounceTime: 300,\n            width: 'w-64',\n            size: 'sm' as const,\n          }\n        : null;\n    }\n\n    return {\n      enabled: search.enabled ?? true,\n      placeholder: search.placeholder ?? 'i18n_z_ui_table_search',\n      debounceTime: search.debounceTime ?? 300,\n      width: search.width ?? 'w-64',\n      size: search.size ?? ('sm' as const),\n    };\n  });\n\n  protected readonly isSearchEnabled = computed(() => {\n    const config = this.searchConfig();\n    return config !== null && config.enabled;\n  });\n\n  // ─── Core TanStack Data Signals ───────────────────────────────────────────\n\n  /** Data signal with force-update support for control API mutations */\n  private readonly _data = computed(() => {\n    this._dataForceUpdate();\n    return this._rowDragDataOverride() ?? this.zConfig().data ?? [];\n  });\n\n  /**\n   * Converts ZTableColumnConfig[] into TanStack ColumnDef[].\n   * Handles special columns (select, expand, actionRowPin), action column sizing,\n   * and rowSpan/expand compatibility (expand column is removed when rowSpan is used).\n   */\n  private readonly _columns = computed<ColumnDef<T>[]>(() => {\n    let cols = this.zConfig().columns ?? [];\n    cols = filterVisibleColumns(cols);\n    if (this.hasBodyRowSpan()) {\n      cols = cols.filter(c => !isZTableColumnType(c, 'expand'));\n    }\n\n    const hasExpandColumn = cols.some(c => isZTableColumnType(c, 'expand'));\n    const hasSelectColumn = cols.some(c => isZTableColumnType(c, 'select'));\n    const hasExplicitRowDragColumn = cols.some(c => isZTableColumnType(c, 'rowDrag'));\n    const needsRowDragColumn = this.hasRowDragColumn() && !hasExplicitRowDragColumn;\n    const needsRowPinActionsColumn =\n      this.zConfig().enableRowPinning && !hasExpandColumn && !hasSelectColumn && !this.hasBodyRowSpan();\n\n    if (needsRowDragColumn) {\n      cols = [\n        {\n          id: 'rowDrag',\n          type: 'rowDrag',\n          header: '',\n          cell: '',\n          size: 44,\n          minSize: 44,\n          maxSize: 44,\n          enableResizing: false,\n          enableHiding: false,\n          enableOrdering: false,\n        } as ZTableColumnConfig<T>,\n        ...cols,\n      ];\n    }\n\n    if (needsRowPinActionsColumn) {\n      cols = [\n        {\n          id: 'actionRowPin',\n          type: 'rowPin',\n          header: '',\n          cell: '',\n          size: 30,\n          minSize: 30,\n          maxSize: 30,\n          enableResizing: false,\n          enableHiding: false,\n          enableHeaderMenu: false,\n          enableOrdering: false,\n          enablePinning: false,\n          sort: false,\n          filter: false,\n        } as ZTableColumnConfig<T>,\n        ...cols,\n      ];\n    }\n\n    return cols.map(c => {\n      const colDef = columnConfigToColumnDef(c);\n      const columnType = getZTableColumnType(c, colDef.id);\n      if (columnType === 'select') {\n        colDef.size = 50;\n        colDef.minSize = 50;\n        colDef.maxSize = 50;\n        colDef.enableResizing = false;\n      }\n\n      if (columnType === 'select' || columnType === 'rowDrag' || columnType === 'expand' || columnType === 'rowPin') {\n        if (columnType === 'rowDrag' || columnType === 'expand' || columnType === 'rowPin') {\n          colDef.size = 50;\n          colDef.minSize = 50;\n          colDef.maxSize = 50;\n          colDef.enableResizing = false;\n        }\n        colDef.enablePinning = true;\n      }\n\n      const actionInfo = this.actionColumnInfo();\n      if (actionInfo && colDef.id === actionInfo.columnId) {\n        const defaultWidth = actionInfo.width + 15;\n        const width = c.size ?? c.minSize ?? c.maxSize ?? defaultWidth;\n\n        colDef.size = width;\n        colDef.minSize = width;\n        colDef.maxSize = width;\n        colDef.enableResizing = c.enableResizing ?? false;\n        colDef.enableSorting = false;\n        colDef.enablePinning = true;\n      }\n\n      return colDef;\n    });\n  });\n\n  // ─── Virtual Scrolling ────────────────────────────────────────────────────\n\n  protected readonly isVirtual = computed(() => {\n    const { virtual } = this.zConfig();\n    if (!virtual) {\n      return false;\n    }\n\n    if (typeof virtual === 'boolean') {\n      return virtual;\n    }\n\n    return virtual.enabled;\n  });\n\n  /** Normalized virtual config with defaults applied */\n  private readonly _virtualConfig = computed<ZTableVirtualConfig>(() => {\n    const { virtual } = this.zConfig();\n    if (!virtual || typeof virtual === 'boolean') {\n      return {\n        enabled: !!virtual,\n        size: Z_DEFAULT_ROW_HEIGHT,\n        overscan: Z_DEFAULT_VIRTUAL_OVERSCAN,\n        groupSize: Z_DEFAULT_GROUP_SIZE,\n        dynamicSize: false,\n      };\n    }\n\n    return {\n      enabled: virtual.enabled,\n      size: virtual.size ?? Z_DEFAULT_ROW_HEIGHT,\n      overscan: virtual.overscan ?? Z_DEFAULT_VIRTUAL_OVERSCAN,\n      groupSize: virtual.groupSize ?? Z_DEFAULT_GROUP_SIZE,\n      dynamicSize: virtual.dynamicSize ?? false,\n      initialOffset: virtual.initialOffset,\n      scrollMargin: virtual.scrollMargin,\n      gap: virtual.gap,\n      isScrollingResetDelay: virtual.isScrollingResetDelay,\n      useScrollendEvent: virtual.useScrollendEvent,\n      getItemKey: virtual.getItemKey,\n      rangeExtractor: virtual.rangeExtractor,\n    };\n  });\n\n  protected readonly virtualRowHeight = computed(() => this._virtualConfig().size ?? Z_DEFAULT_ROW_HEIGHT);\n  protected readonly dynamicSize = computed(() => this._virtualConfig().dynamicSize ?? false);\n\n  private readonly _virtualColumnsConfig = computed<ZTableVirtualColumnConfig>(() => {\n    const { virtualColumns } = this.zConfig();\n    if (!virtualColumns || typeof virtualColumns === 'boolean') {\n      return {\n        enabled: !!virtualColumns,\n        overscan: Z_DEFAULT_COLUMN_VIRTUAL_OVERSCAN,\n      };\n    }\n\n    return {\n      enabled: virtualColumns.enabled,\n      overscan: virtualColumns.overscan ?? Z_DEFAULT_COLUMN_VIRTUAL_OVERSCAN,\n    };\n  });\n\n  protected readonly groupSize = computed(() => {\n    if (this.isVirtualRowDragEnabled()) {\n      return 1;\n    }\n\n    return this._virtualConfig().groupSize ?? Z_DEFAULT_GROUP_SIZE;\n  });\n\n  protected readonly groupHeight = computed(() => this.groupSize() * this.virtualRowHeight());\n  private readonly _dynamicGroupsVersion = signal(0);\n\n  /**\n   * Groups rows for virtual scrolling. When rowSpan is used, rows that share\n   * a merged cell are grouped together so the virtualizer treats them as\n   * a single unit, preserving the visual merge across scroll boundaries.\n   */\n  protected readonly dynamicGroups = computed<ZVirtualGroup[]>(() => {\n    if (!this.isVirtual()) {\n      return [];\n    }\n\n    this._dynamicGroupsVersion();\n    const rows = this.table.getCenterRows() as Row<T>[];\n    const rowHeight = this.virtualRowHeight();\n    const isDynamic = this.dynamicSize();\n\n    if (!this.hasBodyRowSpan()) {\n      const size = this.groupSize();\n      const groups: ZVirtualGroup[] = [];\n      const totalGroups = Math.ceil(rows.length / size);\n\n      for (let j = 0; j < totalGroups; j++) {\n        const startIndex = j * size;\n        const endIndex = Math.min(startIndex + size - 1, rows.length - 1);\n        const rowCount = endIndex - startIndex + 1;\n        groups.push({\n          startIndex,\n          endIndex,\n          rowCount,\n          height: isDynamic ? null : rowCount * rowHeight,\n        });\n      }\n      return groups;\n    }\n\n    const groups: ZVirtualGroup[] = [];\n    let i = 0;\n\n    while (i < rows.length) {\n      const startIndex = i;\n      let maxRowSpan = 1;\n      const row = rows[i];\n      const cells = row.getAllCells();\n\n      for (const cell of cells) {\n        const columnConfig = this._findColumnConfig(cell.column.id);\n        const rowSpanValue = calculateCellRowSpan(cell, columnConfig, rows, i);\n        if (rowSpanValue && rowSpanValue > maxRowSpan) {\n          maxRowSpan = rowSpanValue;\n        }\n      }\n\n      const groupRowCount = Math.max(1, maxRowSpan);\n      const endIndex = Math.min(i + groupRowCount - 1, rows.length - 1);\n      const rowCount = endIndex - startIndex + 1;\n      groups.push({\n        startIndex,\n        endIndex,\n        rowCount,\n        height: isDynamic ? null : rowCount * rowHeight,\n      });\n\n      i = endIndex + 1;\n    }\n\n    return groups;\n  });\n\n  protected readonly hasFooter = computed(() => {\n    const columns = this.zConfig().columns ?? [];\n    const checkFooter = (col: (typeof columns)[0]): boolean => {\n      if (col.footer) {\n        return true;\n      }\n\n      if (col.columns?.length) {\n        return col.columns.some(c => checkFooter(c as (typeof columns)[0]));\n      }\n\n      return false;\n    };\n\n    return columns.some(c => checkFooter(c));\n  });\n\n  protected readonly isEmpty = computed(() => this.table.getRowModel().rows.length === 0);\n  protected readonly isNoSearchResults = computed(() => {\n    const isServerMode = this.zConfig().mode === 'server';\n    const hasActiveFilter = this.globalFilter().trim() !== '' || this.columnFilters().length > 0;\n    const noFilteredResults = this.isEmpty();\n\n    if (isServerMode) {\n      const totalCount = this.zConfig().totalCount ?? 0;\n      const hasPotentialData = totalCount > 0 || hasActiveFilter;\n      return hasPotentialData && noFilteredResults && hasActiveFilter;\n    }\n\n    const hasSourceData = this._data().length > 0;\n    return hasSourceData && noFilteredResults && hasActiveFilter;\n  });\n\n  protected readonly leftLeafColumns = computed(() => {\n    void this.columnOrder();\n    void this.columnVisibility();\n    void this.columnPinning();\n    void this.columnSizing();\n\n    return this.table.getLeftLeafColumns();\n  });\n\n  protected readonly centerLeafColumns = computed(() => {\n    void this.columnOrder();\n    void this.columnVisibility();\n    void this.columnPinning();\n    void this.columnSizing();\n\n    return this.table.getCenterLeafColumns();\n  });\n\n  protected readonly rightLeafColumns = computed(() => {\n    void this.columnOrder();\n    void this.columnVisibility();\n    void this.columnPinning();\n    void this.columnSizing();\n\n    return this.table.getRightLeafColumns();\n  });\n\n  protected readonly hasComplexColumnLayout = computed(() => {\n    const columns = this.zConfig().columns ?? [];\n    const hasComplexConfig = (column: ZTableColumnConfig<T>): boolean => {\n      if (column.columns?.length) {\n        return true;\n      }\n\n      if (typeof column.header === 'object' && column.header !== null) {\n        if ('rowSpan' in column.header || 'colSpan' in column.header) {\n          return true;\n        }\n      }\n\n      if (typeof column.body === 'object' && column.body !== null && isBodyConfig(column.body)) {\n        if (column.body.rowSpan !== undefined || column.body.colSpan !== undefined) {\n          return true;\n        }\n      }\n\n      if (typeof column.footer === 'object' && column.footer !== null) {\n        if (Array.isArray(column.footer)) {\n          return true;\n        }\n\n        if ('rowSpan' in column.footer || 'colSpan' in column.footer) {\n          return true;\n        }\n      }\n\n      return false;\n    };\n\n    return columns.some(column => hasComplexConfig(column));\n  });\n\n  protected readonly canUseVirtualColumns = computed(() => {\n    if (!this._virtualColumnsConfig().enabled) {\n      return false;\n    }\n\n    if (this.hasBodyRowSpan() || this.hasComplexColumnLayout()) {\n      return false;\n    }\n\n    if (this.table.getHeaderGroups().length > 1 || this.table.getFooterGroups().length > 1) {\n      return false;\n    }\n\n    return this.centerLeafColumns().length > 0;\n  });\n\n  protected readonly columnVirtualizer = injectVirtualizer(() => {\n    const centerColumns = this.centerLeafColumns();\n    const columnConfig = this._virtualColumnsConfig();\n\n    return {\n      scrollElement: this._getTbodyViewportElement(),\n      count: centerColumns.length,\n      horizontal: true,\n      estimateSize: (index: number) => centerColumns[index]?.getSize() ?? 0,\n      overscan: columnConfig.overscan ?? Z_DEFAULT_COLUMN_VIRTUAL_OVERSCAN,\n      getItemKey: (index: number) => centerColumns[index]?.id ?? index,\n    };\n  });\n\n  protected readonly virtualCenterColumnItems = computed(() => {\n    if (!this.canUseVirtualColumns()) {\n      return [];\n    }\n\n    return this.columnVirtualizer.getVirtualItems();\n  });\n\n  protected readonly virtualCenterColumns = computed(() => {\n    const centerColumns = this.centerLeafColumns();\n    return this.virtualCenterColumnItems()\n      .map(item => centerColumns[item.index])\n      .filter((column): column is Column<T, unknown> => !!column);\n  });\n\n  protected readonly virtualCenterColumnVisibilityMap = computed<Record<string, boolean>>(() => {\n    const visibilityMap: Record<string, boolean> = {};\n    for (const column of this.virtualCenterColumns()) {\n      visibilityMap[column.id] = true;\n    }\n\n    return visibilityMap;\n  });\n\n  protected readonly firstVirtualCenterColumnId = computed(() => this.virtualCenterColumns()[0]?.id ?? null);\n  protected readonly lastVirtualCenterColumnId = computed(() => {\n    const columns = this.virtualCenterColumns();\n    return columns[columns.length - 1]?.id ?? null;\n  });\n\n  protected readonly virtualLeftSpacerWidth = computed(() => {\n    if (!this.canUseVirtualColumns()) {\n      return 0;\n    }\n\n    return this.virtualCenterColumnItems()[0]?.start ?? 0;\n  });\n\n  protected readonly virtualRenderedLeftSpacerWidth = computed(() => {\n    const width = this.virtualLeftSpacerWidth();\n    if (width <= 0) {\n      return 0;\n    }\n\n    const measuredWidth = this.virtualMeasuredLeftSpacerWidth();\n    const measuredSourceWidth = this._virtualMeasuredLeftSpacerSourceWidth();\n    return measuredWidth > 0 && Math.abs(measuredSourceWidth - width) <= 0.1 ? measuredWidth : width;\n  });\n\n  protected readonly virtualCenterTotalWidth = computed(() =>\n    this.centerLeafColumns().reduce((total, column) => total + column.getSize(), 0)\n  );\n\n  protected readonly virtualRightSpacerWidth = computed(() => {\n    if (!this.canUseVirtualColumns()) {\n      return 0;\n    }\n\n    const items = this.virtualCenterColumnItems();\n    const lastItem = items[items.length - 1];\n    if (!lastItem) {\n      return 0;\n    }\n\n    return Math.max(0, this.virtualCenterTotalWidth() - lastItem.end);\n  });\n\n  protected readonly virtualRenderedRightSpacerWidth = computed(() => {\n    const width = this.virtualRightSpacerWidth();\n    if (width <= 0) {\n      return 0;\n    }\n\n    const measuredWidth = this.virtualMeasuredRightSpacerWidth();\n    const measuredSourceWidth = this._virtualMeasuredRightSpacerSourceWidth();\n    return measuredWidth > 0 && Math.abs(measuredSourceWidth - width) <= 0.1 ? measuredWidth : width;\n  });\n\n  protected readonly renderedColumnCount = computed(() => {\n    void this.columnOrder();\n    void this.columnVisibility();\n    void this.columnPinning();\n\n    if (!this.canUseVirtualColumns()) {\n      // Colgroup chỉ phát <col> cho cột đang hiển thị, nên colspan của group/expanded row\n      // cũng phải đếm theo cột hiển thị — nếu không, cột ẩn làm lệch chiều rộng body so với header.\n      return this.orderedLeafColumns().filter(column => column.getIsVisible()).length;\n    }\n\n    let count = this.leftLeafColumns().length + this.virtualCenterColumns().length + this.rightLeafColumns().length;\n    if (this.virtualLeftSpacerWidth() > 0) {\n      count += 1;\n    }\n    if (this.virtualRightSpacerWidth() > 0) {\n      count += 1;\n    }\n\n    return count;\n  });\n\n  protected readonly renderedNativeColumnWidth = computed(() => {\n    void this.columnSizing();\n    void this.columnVisibility();\n    void this.columnOrder();\n    void this.columnPinning();\n\n    return this.orderedLeafColumns()\n      .filter(column => column.getIsVisible())\n      .reduce((total, column) => total + column.getSize(), 0);\n  });\n\n  protected readonly renderedTableWidth = computed(() => {\n    if (this.isVirtual() || this.canUseVirtualColumns()) {\n      return this.table.getTotalSize();\n    }\n\n    return Math.max(this.renderedNativeColumnWidth(), this.tbodyContainerWidth());\n  });\n\n  protected readonly nativeRenderedColumnSizeMap = computed<Record<string, number>>(() => {\n    void this.columnSizing();\n    void this.columnVisibility();\n    void this.columnOrder();\n    void this.columnPinning();\n\n    if (this.isVirtual() || this.canUseVirtualColumns()) {\n      return {};\n    }\n\n    const visibleColumns = this.orderedLeafColumns().filter(column => column.getIsVisible());\n    const sizes = Object.fromEntries(visibleColumns.map(column => [column.id, column.getSize()]));\n    const extraWidth = this.renderedTableWidth() - this.renderedNativeColumnWidth();\n    if (extraWidth <= 0) {\n      return sizes;\n    }\n\n    const fitColumnIds = this.fitColumnIds().filter(columnId => sizes[columnId] !== undefined);\n    if (fitColumnIds.length === 0) {\n      const lastColumn = visibleColumns[visibleColumns.length - 1];\n      if (lastColumn) {\n        sizes[lastColumn.id] += extraWidth;\n      }\n      return sizes;\n    }\n\n    if (this.zConfig().fitContentWidth) {\n      const lastUnpinnedColumnId = [...fitColumnIds]\n        .reverse()\n        .find(columnId => this.table.getColumn(columnId)?.getIsPinned() === false);\n      const lastColumnId = lastUnpinnedColumnId ?? fitColumnIds[fitColumnIds.length - 1];\n      sizes[lastColumnId] += extraWidth;\n      return sizes;\n    }\n\n    const distributedWidth = extraWidth / fitColumnIds.length;\n    for (const columnId of fitColumnIds) {\n      sizes[columnId] += distributedWidth;\n    }\n\n    return sizes;\n  });\n\n  protected readonly orderedLeafColumns = computed(() => {\n    void this.columnOrder();\n    void this.columnVisibility();\n    void this.columnPinning();\n    void this.columnSizing();\n\n    return [...this.leftLeafColumns(), ...this.centerLeafColumns(), ...this.rightLeafColumns()];\n  });\n\n  protected readonly fitColumnIds = computed(() => {\n    if (this.canUseVirtualColumns()) {\n      return [];\n    }\n\n    const actionColumnId = this.actionColumnInfo()?.columnId;\n    return this.orderedLeafColumns()\n      .filter(column => column.getIsVisible() && !this._isSpecialColumnId(column.id) && column.id !== actionColumnId)\n      .map(column => column.id);\n  });\n\n  protected readonly hideableColumns = computed(() =>\n    this.orderedLeafColumns().filter(col => col.getCanHide() && !this._isColumnHiddenFromVisibilityMenu(col.id))\n  );\n\n  protected readonly pendingColumnVisibilityDisabledMap = computed<Record<string, boolean>>(() => {\n    const pendingVisibleColumns = new Set(this.pendingVisibleColumns());\n    const visibleCount = this.columnOrder()\n      .filter(columnId => !this._isFixedLeadingColumnId(columnId))\n      .filter(columnId => pendingVisibleColumns.has(columnId)).length;\n    const result: Record<string, boolean> = {};\n    const groupingColumnMap = this.groupingColumnMap();\n\n    for (const columnId of this.columnOrder()) {\n      result[columnId] = groupingColumnMap[columnId] || (pendingVisibleColumns.has(columnId) && visibleCount <= 2);\n    }\n\n    return result;\n  });\n\n  protected readonly orderedHeaderGroups = computed(() => {\n    void this.columnPinning();\n    void this._columnPinVersion();\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._columnPinVersion();\n    void this.columnOrder();\n\n    const leftGroups = this.table.getLeftFooterGroups();\n    const centerGroups = this.table.getCenterFooterGroups();\n    const rightGroups = this.table.getRightFooterGroups();\n    const footerArrayRows = this._maxFooterArrayRows(this.zConfig().columns ?? []);\n\n    if (footerArrayRows > 0) {\n      return Array.from({ length: footerArrayRows }, (_, rowIndex) => ({\n        id: `footer-row-${rowIndex}`,\n        depth: rowIndex,\n        headers: [\n          ...(leftGroups[0]?.headers ?? []),\n          ...(centerGroups[0]?.headers ?? []),\n          ...(rightGroups[0]?.headers ?? []),\n        ],\n      }));\n    }\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 ?? leftGroups[leftGroups.length - 1]?.headers ?? [];\n      const centerHeaders = centerGroups[i]?.headers ?? centerGroups[centerGroups.length - 1]?.headers ?? [];\n      const rightHeaders = rightGroups[i]?.headers ?? rightGroups[rightGroups.length - 1]?.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  private _maxFooterArrayRows(columns: ZTableColumnConfig<T>[]): number {\n    let maxRows = 0;\n\n    for (const column of columns) {\n      const footerRows = Array.isArray(column.footer) ? column.footer.length : 0;\n      maxRows = Math.max(maxRows, footerRows, this._maxFooterArrayRows(column.columns ?? []));\n    }\n\n    return maxRows;\n  }\n\n  protected readonly bottomRowsReversed = computed(() => [...this.table.getBottomRows()].reverse());\n  protected readonly leftHeaderRow = computed(() => {\n    void this.columnPinning();\n    void this._columnPinVersion();\n    void this.columnOrder();\n\n    return this.table.getLeftHeaderGroups()[0]?.headers ?? [];\n  });\n\n  protected readonly centerHeaderRow = computed(() => {\n    void this.columnPinning();\n    void this._columnPinVersion();\n    void this.columnOrder();\n\n    return this.table.getCenterHeaderGroups()[0]?.headers ?? [];\n  });\n\n  protected readonly rightHeaderRow = computed(() => {\n    void this.columnPinning();\n    void this._columnPinVersion();\n    void this.columnOrder();\n\n    return this.table.getRightHeaderGroups()[0]?.headers ?? [];\n  });\n\n  protected readonly virtualCenterHeaderRow = computed(() => {\n    const visibleColumns = this.virtualCenterColumnVisibilityMap();\n    return this.centerHeaderRow().filter(header => visibleColumns[header.column.id]);\n  });\n\n  protected readonly 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 tbodyContainerWidth = signal(0);\n  protected readonly tbodyContainerHeight = signal(0);\n\n  protected readonly colDomWidthMap = signal<Record<string, number>>({});\n\n  private readonly _colDomWidthUpdater = effect(() => {\n    void this.columnPinning();\n    void this.columnSizing();\n    void this.columnVisibility();\n    void this.columnOrder();\n    void this.tbodyContainerWidth();\n\n    queueMicrotask(() => {\n      const thead = this.theadWrapper()?.nativeElement;\n      if (!thead) {\n        return;\n      }\n      const ths = thead.querySelectorAll<HTMLElement>('th[id]');\n      if (!ths.length) {\n        return;\n      }\n      const map: Record<string, number> = {};\n      ths.forEach(th => {\n        if (th.id) {\n          map[th.id] = th.getBoundingClientRect().width;\n        }\n      });\n      this.colDomWidthMap.set(map);\n      this._scheduleVirtualSpacerWidthRefresh();\n    });\n  });\n\n  protected readonly skeletonRowHeight = signal<number>(Z_SKELETON_ROW_HEIGHT);\n\n  protected readonly skeletonRowCount = computed(() => {\n    const containerHeight = this.tbodyContainerHeight();\n    const baseRowHeight = this.skeletonRowHeight();\n\n    if (containerHeight > 0) {\n      return Math.max(3, Math.floor(containerHeight / baseRowHeight));\n    }\n\n    const { minHeight } = this.zConfig();\n    if (minHeight) {\n      const heightValue = parseInt(minHeight, 10);\n      if (!isNaN(heightValue)) {\n        return Math.max(3, Math.floor(heightValue / baseRowHeight));\n      }\n    }\n\n    return Math.min(this.pagination().pageSize || 10, 10);\n  });\n\n  protected readonly skeletonRows = computed(() => {\n    const count = this.skeletonRowCount();\n    return Array.from({ length: count }, (_, i) => i);\n  });\n\n  protected readonly dynamicGroupRows = computed(() => {\n    if (this.activeGroupingColumnIds().length > 0 && this.isVirtual()) {\n      return this.virtualGroupedFlatItems().map(item => (item.type === 'data' ? item.rows : []));\n    }\n\n    const rows = this.table.getCenterRows() 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  /** Pinned top rows rendered separately from the virtualizer loop in virtual scroll mode. */\n  protected readonly virtualPinnedTopRows = computed<Row<T>[]>(() => {\n    if (!this.isVirtual()) {\n      return [];\n    }\n\n    return this.table.getTopRows() as Row<T>[];\n  });\n\n  protected readonly virtualPinnedTopHeight = computed(() => {\n    const rows = this.virtualPinnedTopRows();\n    if (rows.length === 0) {\n      return 0;\n    }\n\n    const rowHeights = this.pinnedRowHeights();\n    return rows.reduce((total, row) => total + (rowHeights[row.id] ?? this.virtualRowHeight()), 0);\n  });\n\n  /** Pinned bottom rows rendered separately from the virtualizer loop in virtual scroll mode. */\n  protected readonly virtualPinnedBottomRows = computed<Row<T>[]>(() => {\n    if (!this.isVirtual()) {\n      return [];\n    }\n\n    return [...this.table.getBottomRows()].reverse() as Row<T>[];\n  });\n\n  protected readonly virtualPinnedBottomHeight = computed(() => {\n    const rows = this.virtualPinnedBottomRows();\n    if (rows.length === 0) {\n      return 0;\n    }\n\n    const rowHeights = this.pinnedRowHeights();\n    return rows.reduce((total, row) => total + (rowHeights[row.id] ?? this.virtualRowHeight()), 0);\n  });\n\n  protected readonly dynamicGroupHeights = computed(() => {\n    if (this.activeGroupingColumnIds().length > 0 && this.isVirtual()) {\n      const rowHeight = this.virtualRowHeight();\n      const isDynamic = this.dynamicSize();\n      return this.virtualGroupedFlatItems().map(item => {\n        if (isDynamic) {\n          return null;\n        }\n\n        return item.type === 'group-header' ? Math.max(rowHeight, Z_VIRTUAL_GROUP_HEADER_HEIGHT) : rowHeight;\n      });\n    }\n\n    const groups = this.dynamicGroups();\n    const rowHeight = this.virtualRowHeight();\n    const defaultHeight = this.groupSize() * rowHeight;\n    const isDynamic = this.effectiveDynamicRowSizing();\n\n    if (groups.length > 0) {\n      return groups.map(group => (isDynamic ? null : (group.height ?? defaultHeight)));\n    }\n\n    const rows = this.table.getCenterRows() as Row<T>[];\n    const size = this.groupSize();\n    const totalGroups = Math.ceil(rows.length / size);\n    return Array(totalGroups).fill(isDynamic ? null : defaultHeight);\n  });\n\n  protected readonly columnSizing = computed(() => this.table.getState().columnSizing);\n  protected readonly columnSizingInfo = computed(() => this.table.getState().columnSizingInfo);\n\n  protected readonly columnSizeVars = computed(() => {\n    void this.columnSizing();\n    void this.columnSizingInfo();\n    void this.columnOrder();\n    void this.columnVisibility();\n    void this.columnPinning();\n    void this._columns();\n\n    const headers = untracked(() => this.table.getFlatHeaders());\n    const renderedSizes = this.nativeRenderedColumnSizeMap();\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`] = renderedSizes[header.column.id] ?? header.column.getSize();\n    }\n\n    return colSizes;\n  });\n\n  // ─── TanStack Table Instance ──────────────────────────────────────────────\n  //\n  // The central table instance. All state signals flow in, and on*Change\n  // callbacks flow out. Features (sorting, filtering, pagination) are\n  // conditionally enabled based on column configs and table mode.\n\n  protected readonly table = createAngularTable<T>(() => {\n    const config = this.zConfig();\n    const isServerMode = config.mode === 'server';\n    const pageSize = this.pagination().pageSize || 10;\n    const totalRows = config.totalCount ?? config.totalRows;\n    const pageCount = isServerMode && typeof totalRows === 'number' ? Math.ceil(totalRows / pageSize) : undefined;\n\n    const hasAnyLocalFiltering = this.hasLocalFiltering();\n    const hasAnyLocalSorting = this.hasLocalSorting();\n    const shouldEnableLocalFiltering = !isServerMode || hasAnyLocalFiltering;\n    const shouldEnableLocalSorting = !isServerMode || hasAnyLocalSorting;\n\n    return {\n      data: this._data(),\n      columns: this._columns(),\n      getCoreRowModel: getCoreRowModel(),\n      getExpandedRowModel: this.hasExpandColumn() ? getExpandedRowModel() : undefined,\n      getFilteredRowModel: shouldEnableLocalFiltering && this.hasFiltering() ? getFilteredRowModel() : undefined,\n      getSortedRowModel: shouldEnableLocalSorting && this.hasSorting() ? getSortedRowModel() : undefined,\n      getPaginationRowModel: !isServerMode && config.pagination?.enabled ? getPaginationRowModel() : undefined,\n      getFacetedRowModel: shouldEnableLocalFiltering && this.hasFiltering() ? getFacetedRowModel() : undefined,\n      getFacetedUniqueValues: shouldEnableLocalFiltering && this.hasFiltering() ? getFacetedUniqueValues() : undefined,\n      getFacetedMinMaxValues: shouldEnableLocalFiltering && this.hasFiltering() ? getFacetedMinMaxValues() : undefined,\n      manualFiltering: isServerMode && !hasAnyLocalFiltering,\n      manualSorting: isServerMode && !hasAnyLocalSorting,\n      manualPagination: isServerMode,\n      pageCount: pageCount,\n      columnResizeMode: 'onChange',\n      enableRowSelection: this.canUseRowSelection(),\n      enableSubRowSelection: this.hasSelectColumn() && !!config.getSubRows,\n      enableRowPinning: config.enableRowPinning ?? false,\n      enableMultiSort: config.enableMultiSort ?? true,\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:\n        config.getRowCanExpand ??\n        (row => {\n          if (row.subRows.length > 0) {\n            return true;\n          }\n\n          if (row.depth !== 0) {\n            return false;\n          }\n\n          if (config.expandedRowTemplate) {\n            return true;\n          }\n\n          return typeof config.subTableConfig === 'function' ? !!config.subTableConfig(row) : !!config.subTableConfig;\n        }),\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        columnSizing: this.columnSizingState(),\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._setColumnPinning(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        if (!this.canUseRowSelection()) {\n          this.rowSelection.set({});\n          return;\n        }\n\n        const currentState = this.rowSelection();\n        const newState = typeof updater === 'function' ? updater(currentState) : updater;\n        this._handleRowSelectionWithParents(newState);\n      },\n      onColumnFiltersChange: updater => {\n        const oldState = this.columnFilters();\n        const newState = typeof updater === 'function' ? updater(oldState) : updater;\n\n        const changedColumnIds = this._getChangedFilterColumnIds(oldState, newState);\n        const hasAnyLocalChange = changedColumnIds.some(id => this._isColumnFilterModeLocal(id));\n        const hasAnyServerChange = changedColumnIds.some(id => !this._isColumnFilterModeLocal(id));\n        const serverModeFilters = this._filterServerModeColumnFilters(newState);\n\n        this.columnFilters.set(newState);\n\n        if (hasAnyLocalChange) {\n          this._runAsyncStateUpdate(() => {\n            this.pagination.update(p => ({ ...p, pageIndex: 1 }));\n          }, true);\n        }\n\n        if (hasAnyServerChange) {\n          this.zChange.emit({\n            type: 'filter',\n            data: { filters: serverModeFilters, search: this.globalFilter() },\n          });\n        }\n      },\n      onGlobalFilterChange: updater => {\n        const newState = typeof updater === 'function' ? updater(this.globalFilter()) : updater;\n        const hasLocalFilter = this.hasLocalFiltering();\n        const serverModeFilters = this._filterServerModeColumnFilters(this.columnFilters());\n\n        this._runAsyncStateUpdate(() => {\n          this.globalFilter.set(newState);\n          if (hasLocalFilter) {\n            this.pagination.update(p => ({ ...p, pageIndex: 1 }));\n          }\n          if (serverModeFilters.length > 0 || this.hasServerFiltering()) {\n            this._emitFilterChangeDebounced(serverModeFilters, newState);\n          }\n        }, hasLocalFilter);\n      },\n      onPaginationChange: updater => {\n        const newState = typeof updater === 'function' ? updater(this._tanstackPagination()) : updater;\n        const adjustedState = { ...newState, pageIndex: newState.pageIndex + 1 };\n        this.pagination.set(adjustedState);\n        this.zChange.emit({\n          type: 'page',\n          data: { pageIndex: adjustedState.pageIndex, pageSize: adjustedState.pageSize, emitType: 'auto' },\n        });\n      },\n      onSortingChange: updater => {\n        const oldState = this.sorting();\n        const newState = typeof updater === 'function' ? updater(oldState) : updater;\n\n        const changedColumnIds = this._getChangedSortColumnIds(oldState, newState);\n        const hasAnyLocalChange = changedColumnIds.some(id => this._isColumnSortModeLocal(id));\n        const hasAnyServerChange = changedColumnIds.some(id => !this._isColumnSortModeLocal(id));\n        const serverModeSorting = this._filterServerModeSorting(newState);\n\n        this.sorting.set(newState);\n        if (this.zConfig().enableMultiSort === false) {\n          this._bumpFilterResetVersion();\n        }\n\n        if (hasAnyLocalChange) {\n          this._runAsyncStateUpdate(() => {\n            this.pagination.update(p => ({ ...p, pageIndex: 1 }));\n          }, true);\n        }\n\n        if (hasAnyServerChange) {\n          this.zChange.emit({ type: 'sort', data: { sorting: serverModeSorting } });\n        }\n      },\n      onRowPinningChange: updater => {\n        const newState = typeof updater === 'function' ? updater(this.rowPinning()) : updater;\n        this.rowPinning.set(newState);\n        this._schedulePinnedRowHeightsRefresh();\n      },\n      onColumnSizingChange: updater => {\n        this._handleColumnSizingChange(updater);\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.getCenterRows().length);\n    return Math.ceil(totalRows / this.groupSize());\n  });\n\n  protected readonly selectedRowIds = computed(() => {\n    if (!this.canUseRowSelection()) {\n      return [];\n    }\n\n    return Object.entries(this.rowSelection())\n      .filter(([, selected]) => selected)\n      .map(([rowId]) => rowId);\n  });\n\n  protected readonly selectedRows = computed(() => {\n    if (!this.canUseRowSelection()) {\n      return [];\n    }\n\n    this.rowSelection();\n    return this.table.getSelectedRowModel().rows.map(row => row.original);\n  });\n\n  protected readonly bulkActionContext = computed<ZTableBulkActionContext<T>>(() => ({\n    selectedRows: this.selectedRows(),\n    selectedRowIds: this.selectedRowIds(),\n    selection: this.canUseRowSelection() ? this.rowSelection() : {},\n  }));\n\n  protected readonly bulkActionConfig = computed<ZTableBulkActionOptions<T> | null>(() => {\n    const config = this.zConfig().bulkAction;\n    if (!config) {\n      return null;\n    }\n\n    if (config === true) {\n      return { enabled: true, actions: this.defaultBulkActions() };\n    }\n\n    if (Array.isArray(config) || typeof config === 'function') {\n      return { enabled: true, actions: config };\n    }\n\n    if (config.enabled === false) {\n      return null;\n    }\n\n    return {\n      ...config,\n      actions:\n        typeof config.actions === 'function' || (Array.isArray(config.actions) && config.actions.length > 0)\n          ? config.actions\n          : this.defaultBulkActions(),\n    };\n  });\n\n  protected readonly bulkActionItems = computed<ZTableBulkActionRenderItem<T>[]>(() => {\n    const context = this.bulkActionContext();\n    const actions = this._resolveBulkActionList(this.bulkActionConfig()?.actions, context);\n\n    return actions\n      .filter(action => {\n        if (typeof action.hidden === 'function') {\n          return !action.hidden(context);\n        }\n\n        return !action.hidden;\n      })\n      .map(action => ({\n        action,\n        disabled: typeof action.disabled === 'function' ? action.disabled(context) : (action.disabled ?? false),\n        buttonType: action.type || 'outline',\n      }));\n  });\n\n  protected readonly showBulkBar = computed(() => this.bulkActionConfig() !== null && this.selectedRowIds().length > 0);\n\n  protected readonly bulkBarPositions: ConnectedPosition[] = [\n    {\n      originX: 'center',\n      originY: 'bottom',\n      overlayX: 'center',\n      overlayY: 'bottom',\n      offsetY: 0,\n    },\n  ];\n\n  private readonly _bulkBarExitDuration = 140;\n\n  /** Stable identity key per virtual index (row/group id, not array index) — prevents height jitter on fast scroll. */\n  private readonly _virtualItemKeys = computed<(string | number)[]>(() => {\n    if (!this.isVirtual()) {\n      return [];\n    }\n\n    const flatItems = this.virtualGroupedFlatItems();\n    if (flatItems.length > 0) {\n      return flatItems.map((item, index) =>\n        item.type === 'group-header' ? `g:${item.groupItem.id}` : `r:${item.rows[0]?.id ?? index}`\n      );\n    }\n\n    const groupRows = this.dynamicGroupRows();\n    if (groupRows.length > 0) {\n      return groupRows.map((rows, index) => `r:${rows[0]?.id ?? index}`);\n    }\n\n    return Array.from({ length: this._virtualGroupCount() }, (_, index) => index);\n  });\n\n  /** Estimate height learned from rendered rows (dynamicSize); falls back to `virtual.size`. Reduces layout shift. */\n  private _dynamicEstimateHeight: number | null = null;\n\n  protected readonly effectiveDynamicRowSizing = computed(() => this.dynamicSize());\n\n  /** Virtualizer instance — operates on groups rather than individual rows */\n  protected readonly virtualizer = injectVirtualizer(() => {\n    const groups = this.dynamicGroups();\n    const rowHeight = this.virtualRowHeight();\n    const groupSize = this.groupSize();\n    const scrollElement = this._getTbodyViewportElement();\n    const virtualConfig = this._virtualConfig();\n    const flatItems = this.virtualGroupedFlatItems();\n    const isGrouping = flatItems.length > 0;\n    const itemKeys = this._virtualItemKeys();\n    const isDynamic = this.effectiveDynamicRowSizing();\n    // Estimate for not-yet-measured rows: learned height if available, else virtual.size.\n    const dynamicRowEstimate =\n      isDynamic && this._dynamicEstimateHeight !== null ? this._dynamicEstimateHeight : rowHeight;\n    const itemCount = isGrouping ? flatItems.length : groups.length > 0 ? groups.length : this._virtualGroupCount();\n\n    return {\n      scrollElement,\n      count: itemCount,\n      // Stable per-row key so cached measured heights follow row identity, not the recycled\n      // index slot — prevents the height jitter when scrolling fast (see _virtualItemKeys).\n      getItemKey: (index: number) => itemKeys[index] ?? index,\n      estimateSize: (index: number) => {\n        if (isGrouping) {\n          return flatItems[index]?.type === 'group-header'\n            ? Math.max(rowHeight, Z_VIRTUAL_GROUP_HEADER_HEIGHT)\n            : dynamicRowEstimate;\n        }\n\n        if (groups.length > 0 && groups[index]) {\n          const groupHeight = groups[index].height;\n          if (groupHeight !== null) {\n            return groupHeight;\n          }\n\n          return groups[index].rowCount * dynamicRowEstimate;\n        }\n\n        return groupSize * dynamicRowEstimate;\n      },\n      scrollToFn: (offset, options, instance) => {\n        instance.scrollOffset = offset;\n        elementScroll(offset, options, instance);\n      },\n      measureElement: (element: Element) => element.getBoundingClientRect().height,\n      overscan: virtualConfig.overscan ?? Z_DEFAULT_VIRTUAL_OVERSCAN,\n      paddingStart: this.virtualPinnedTopHeight(),\n      paddingEnd: this.virtualPinnedBottomHeight(),\n      scrollPaddingStart: this.virtualPinnedTopHeight(),\n      scrollPaddingEnd: this.virtualPinnedBottomHeight(),\n      initialOffset: virtualConfig.initialOffset ?? 0,\n      ...pickDefined(virtualConfig, ['gap', 'isScrollingResetDelay', 'useScrollendEvent', 'getItemKey']),\n      rangeExtractor: virtualConfig.rangeExtractor\n        ? (range: { endIndex: number; startIndex: number }) => virtualConfig.rangeExtractor!(range)\n        : undefined,\n    };\n  });\n\n  private readonly _measureVirtualItems = effect(() => {\n    const elements = this.virtualRowElements();\n    const isDynamic = this.effectiveDynamicRowSizing();\n\n    if (!isDynamic) {\n      return;\n    }\n\n    // Measured mode: measure synchronously (no rAF) so sizes are corrected before paint.\n    const needsEstimate = this._dynamicEstimateHeight === null;\n    for (const el of elements) {\n      this.virtualizer.measureElement(el.nativeElement);\n    }\n\n    // Defer learning to a microtask — it calls virtualizer.measure() (writes signals).\n    if (needsEstimate) {\n      queueMicrotask(() => this._learnDynamicEstimate());\n    }\n  });\n\n  /** Learn estimate height from measured rows (reads the measurement cache, no reflow). Locks once. */\n  private _learnDynamicEstimate(): void {\n    if (this._dynamicEstimateHeight !== null) {\n      return;\n    }\n\n    const rowHeight = this.virtualRowHeight();\n    let measuredSum = 0;\n    let measuredCount = 0;\n    for (const item of this.virtualizer.getVirtualItems()) {\n      // Skip items still at the default estimate — only real measured rows inform the average.\n      if (item.size > 0 && item.size !== rowHeight) {\n        measuredSum += item.size;\n        measuredCount++;\n      }\n    }\n\n    if (measuredCount === 0) {\n      return;\n    }\n\n    this._dynamicEstimateHeight = Math.round(measuredSum / measuredCount);\n    this.virtualizer.measure();\n  }\n\n  private readonly _rowDragAutoScroll = effect(onCleanup => {\n    const scrollbar = this.tbodyScrollbar();\n    if (!scrollbar?.adapter.initialized()) {\n      return;\n    }\n\n    const viewport = scrollbar.adapter.viewportElement;\n    const cleanup = this._dragService.registerScrollContainer({\n      element: viewport,\n      tableId: this.dragInstanceId,\n      entity: 'row',\n      isEnabled: () => this.isRowDragEnabled(),\n    });\n    onCleanup(cleanup);\n  });\n\n  private readonly _rowDragCellSelectionCleanup = effect(onCleanup => {\n    const cleanup = this._dragService.registerMonitor({\n      onDragStart: source => {\n        if (source.tableId === this.dragInstanceId && source.entity === 'row') {\n          this._clearCellInteractionState();\n        }\n      },\n      onDrop: event => {\n        if (event.source.tableId === this.dragInstanceId && event.source.entity === 'row') {\n          this._clearCellInteractionState();\n        }\n      },\n      onDragEnd: source => {\n        if (source.tableId === this.dragInstanceId && source.entity === 'row') {\n          this._clearCellInteractionState();\n        }\n      },\n    });\n    onCleanup(cleanup);\n  });\n\n  // ─── Constructor Effects ──────────────────────────────────────────────────\n  //\n  // Effects run in the constructor because Angular signals + effects don't\n  // have a separate \"init\" lifecycle. Each effect is responsible for one\n  // concern (data sync, config loading, scroll reset, settings persistence, etc.)\n\n  constructor() {\n    // Force data refresh when language changes (re-evaluates translations in cells)\n    explicitEffect([this._zTranslate.currentLang], () => {\n      this._dataForceUpdate.update(v => v + 1);\n    });\n\n    explicitEffect(\n      [this.showBulkBar, this.bulkActionConfig, this.bulkActionContext, this.bulkActionItems],\n      ([isVisible, config, context, items]) => {\n        if (isVisible && config) {\n          this._clearBulkBarTimer();\n          this.bulkBarConfig.set(config);\n          this.bulkBarContext.set(context);\n          this.bulkBarItems.set(items);\n          this.bulkBarClosing.set(false);\n          this.bulkBarMounted.set(true);\n          return;\n        }\n\n        if (!this.bulkBarMounted()) {\n          return;\n        }\n\n        this._clearBulkBarTimer();\n        this.bulkBarClosing.set(true);\n        this._bulkBarTimer = setTimeout(() => {\n          this.bulkBarMounted.set(false);\n          this.bulkBarClosing.set(false);\n          this.bulkBarConfig.set(null);\n          this.bulkBarContext.set(null);\n          this.bulkBarItems.set([]);\n          this._bulkBarTimer = null;\n        }, this._bulkBarExitDuration);\n      }\n    );\n\n    this._destroy$.subscribe(() => {\n      this._clearBulkBarTimer();\n      this._clearContentRowMenuOutsideListener();\n      this._cellInteractionOutsideCleanup?.();\n      this._cellInteractionOutsideCleanup = null;\n    });\n\n    explicitEffect([this.zConfig], ([cfg]) => {\n      if (this._lastExternalDataRef !== cfg.data) {\n        this._lastExternalDataRef = cfg.data;\n        this._rowDragDataOverride.set(null);\n      }\n\n      if (cfg.mode !== 'server') {\n        return;\n      }\n\n      const total = cfg.totalCount ?? cfg.totalRows;\n      if (typeof total !== 'number') {\n        return;\n      }\n\n      if (cfg.loading && total <= 0 && this._serverPaginationTotal() > 0) {\n        return;\n      }\n\n      this._serverPaginationTotal.set(total);\n    });\n\n    explicitEffect([this.zKey, this.zConfig], ([key, cfg]) => {\n      if (!cfg.columns || cfg.columns.length === 0) {\n        return;\n      }\n\n      const groupingSchemaKey = this._getConfigCacheKey(key || 'initial-grouping');\n      const shouldInitializeGrouping = this._initializedGroupingSchemaKey !== groupingSchemaKey;\n      this._initializedGroupingSchemaKey = groupingSchemaKey;\n      const cacheLoaded = key ? this._loadConfigCache(key) : false;\n      if (!cacheLoaded && shouldInitializeGrouping) {\n        const initialGroupingColumnIds = this._getInitialGroupingColumnIds();\n        this.groupingColumnIds.set(initialGroupingColumnIds);\n        this._moveGroupingColumnsToLeadingDataPosition(initialGroupingColumnIds);\n      }\n\n      const initial = cfg.initialState;\n      if (initial) {\n        if (!cacheLoaded) {\n          if (initial.columnPinning) {\n            this._setColumnPinning(initial.columnPinning);\n          }\n          if (initial.columnVisibility) {\n            this.columnVisibility.set(initial.columnVisibility);\n          }\n        }\n\n        if (initial.sorting) {\n          this.sorting.set(initial.sorting);\n        }\n        if (initial.columnFilters) {\n          this.columnFilters.set(initial.columnFilters);\n        }\n        if (initial.globalFilter) {\n          this.globalFilter.set(initial.globalFilter);\n        }\n        if (initial.expanded) {\n          this.expanded.set(initial.expanded);\n        }\n        if (initial.rowSelection) {\n          this.rowSelection.set(initial.rowSelection);\n        }\n        if (initial.rowPinning) {\n          this.rowPinning.set(initial.rowPinning);\n        }\n        if (initial.pagination) {\n          this.pagination.set(initial.pagination);\n        }\n      }\n\n      const configuredPageSize = cfg.pagination?.enabled ? cfg.pagination.pageSize : undefined;\n      const initialPageSize = cfg.initialState?.pagination?.pageSize;\n      const paginationSchemaKey = `${this._getConfigCacheKey(key || 'initial-pagination')}:${configuredPageSize ?? ''}:${\n        initialPageSize ?? ''\n      }`;\n      if (\n        !cfg.initialState?.pagination &&\n        typeof configuredPageSize === 'number' &&\n        this._initializedPaginationSchemaKey !== paginationSchemaKey\n      ) {\n        this._initializedPaginationSchemaKey = paginationSchemaKey;\n        this.pagination.set({ pageIndex: 1, pageSize: configuredPageSize });\n      }\n\n      if (!cacheLoaded) {\n        this.showHeaderFooterShadow.set(cfg.showHeaderShadow ?? cfg.showFooterShadow ?? true);\n        if (typeof cfg.showHorizontalBorder === 'boolean') {\n          this.showHorizontalBorder.set(cfg.showHorizontalBorder);\n        }\n        if (typeof cfg.showVerticalBorder === 'boolean') {\n          this.showVerticalBorder.set(cfg.showVerticalBorder);\n        }\n      }\n      const cols = cfg.columns ?? [];\n      const currentPinning = this.columnPinning();\n      const basePinning =\n        cacheLoaded || this._hasInitializedColumnPinning ? currentPinning : (initial?.columnPinning ?? currentPinning);\n      const leftPinned: string[] = [...(basePinning.left ?? [])];\n      const rightPinned: string[] = [...(basePinning.right ?? [])];\n\n      const collectPinnedColumns = (columns: typeof cols): void => {\n        for (const col of columns) {\n          const isAlreadyPinned = leftPinned.includes(col.id) || rightPinned.includes(col.id);\n          if (col.pinned === 'left' && !isAlreadyPinned) {\n            leftPinned.push(col.id);\n          }\n          if (col.pinned === 'right' && !isAlreadyPinned) {\n            rightPinned.push(col.id);\n          }\n          if (col.columns) {\n            collectPinnedColumns(col.columns);\n          }\n        }\n      };\n\n      collectPinnedColumns(cols);\n      // If cache is not loaded and there are pinned columns, set them.\n      if (!cacheLoaded && (leftPinned.length > 0 || rightPinned.length > 0)) {\n        this._setColumnPinning({ left: leftPinned, right: rightPinned });\n      }\n      this._hasInitializedColumnPinning = true;\n    });\n\n    explicitEffect([this.zConfig], ([cfg]) => {\n      if (cfg.enableRowPinning && !this.hasBodyRowSpan()) {\n        const cols = cfg.columns ?? [];\n        const hasSelect = cols.some(c => isZTableColumnType(c, 'select'));\n        const hasExpand = cols.some(c => isZTableColumnType(c, 'expand'));\n        const currentPinning = this.columnPinning();\n        const leftPinned = [...(currentPinning.left || [])];\n        if (hasSelect && !leftPinned.includes('select')) {\n          leftPinned.unshift('select');\n          this._setColumnPinning({ ...currentPinning, left: leftPinned });\n        }\n\n        if (!hasSelect && !hasExpand && !leftPinned.includes('actionRowPin')) {\n          leftPinned.unshift('actionRowPin');\n          this._setColumnPinning({ ...currentPinning, left: leftPinned });\n        }\n      }\n    });\n\n    afterNextRender(() => {\n      const containerEl = this.tbodyContainer()?.nativeElement;\n      if (containerEl && !this._resizeObserver) {\n        this._resizeObserver = new ResizeObserver(entries => {\n          for (const entry of entries) {\n            this.tbodyContainerWidth.set(entry.contentRect.width);\n            this.tbodyContainerHeight.set(entry.contentRect.height);\n          }\n          this._checkVerticalScroll();\n          this._checkHorizontalScroll();\n          this._scheduleFitColumnWidths();\n          this._scheduleVirtualSpacerWidthRefresh();\n          // Browser zoom / container resize changes the real (fractional) row heights. The non-virtual\n          // pin offsets are summed from measured heights, so they must be re-measured here or pinned\n          // rows drift apart (hairline gap) / overlap (lost border) at non-100% zoom.\n          this._schedulePinnedRowHeightsRefresh();\n        });\n\n        this._resizeObserver.observe(containerEl);\n        this.tbodyContainerWidth.set(containerEl.clientWidth);\n        this.tbodyContainerHeight.set(containerEl.clientHeight);\n        this._scheduleFitColumnWidths();\n\n        this._destroy$.subscribe(() => {\n          if (this._resizeObserver) {\n            this._resizeObserver.disconnect();\n            this._resizeObserver = null;\n          }\n          this._cancelPinnedRowHeightsRefresh();\n          this._cancelVirtualSpacerWidthRefresh();\n          this._cellDragCleanup?.();\n        });\n      }\n    });\n\n    explicitEffect([this._configPagination], ([configPagination]) => {\n      if (configPagination) {\n        this.pagination.set(configPagination);\n      }\n    });\n\n    // explicitEffect([this.columnFilters, this.globalFilter, this.pagination, this.sorting, this._data], () => {\n    //   if (this.isVirtual()) {\n    //     const wrapperEl = this.tbodyWrapper()?.nativeElement;\n    //     if (wrapperEl) {\n    //       wrapperEl.scrollTop = 0;\n    //     }\n\n    //     this.virtualizer.scrollToOffset(0);\n    //   }\n\n    //   queueMicrotask(() => {\n    //     this._checkVerticalScroll();\n    //     this._checkHorizontalScroll();\n    //     if (this.isVirtual()) {\n    //       this._dynamicGroupsVersion.update(v => v + 1);\n    //     }\n    //   });\n    // });\n\n    let lastResetState: string | null = null;\n    explicitEffect(\n      [this.columnFilters, this.globalFilter, this.pagination, this.sorting],\n      ([columnFilters, globalFilter, pagination, sorting]) => {\n        const resetState = JSON.stringify({\n          columnFilters,\n          globalFilter,\n          pageIndex: pagination.pageIndex,\n          pageSize: pagination.pageSize,\n          sorting,\n        });\n        if (lastResetState === resetState) {\n          return;\n        }\n\n        lastResetState = resetState;\n        if (this.isVirtual()) {\n          const wrapperEl = this.tbodyWrapper()?.nativeElement;\n          if (wrapperEl) {\n            wrapperEl.scrollTop = 0;\n          }\n\n          this.virtualizer.scrollToOffset(0);\n        }\n      }\n    );\n\n    explicitEffect([this.columnFilters, this.globalFilter, this.pagination, this.sorting, this._data], () => {\n      // New dataset may have different row heights -> relearn the estimate.\n      this._dynamicEstimateHeight = null;\n      queueMicrotask(() => {\n        this._checkVerticalScroll();\n        this._checkHorizontalScroll();\n        if (this.isVirtual()) {\n          this._dynamicGroupsVersion.update(v => v + 1);\n        }\n        this._scheduleFitColumnWidths();\n      });\n    });\n\n    explicitEffect([this.virtualizer.getVirtualItems], () => {\n      if (!this.isVirtual()) {\n        return;\n      }\n\n      queueMicrotask(() => {\n        this._checkLastRowTouchesBottom();\n      });\n    });\n\n    explicitEffect([this.isLoading, this.isProcessing], () => {\n      const loading = this.isLoading();\n      const processing = this.isProcessing();\n\n      if (loading || processing) {\n        const wrapperEl = this.tbodyWrapper()?.nativeElement;\n        if (wrapperEl) {\n          this._savedScrollLeft.set(wrapperEl.scrollLeft);\n          wrapperEl.scrollTop = 0;\n        }\n\n        const scrollbar = this.tbodyScrollbar();\n        if (scrollbar) {\n          void scrollbar.scrollTo({ top: 0, left: this._savedScrollLeft(), duration: 0 });\n        }\n\n        return;\n      }\n\n      queueMicrotask(() => {\n        const wrapperEl = this.tbodyWrapper()?.nativeElement;\n        if (wrapperEl) {\n          wrapperEl.scrollTop = 0;\n          wrapperEl.scrollLeft = this._savedScrollLeft();\n        }\n\n        if (this.isVirtual()) {\n          const scrollbar = this.tbodyScrollbar();\n          if (scrollbar) {\n            void scrollbar.scrollTo({ top: 0, left: this._savedScrollLeft(), duration: 0 });\n          }\n\n          this.virtualizer.scrollToOffset(0);\n          this._dynamicGroupsVersion.update(v => v + 1);\n        }\n\n        this._checkScrollState();\n        this._scheduleFitColumnWidths();\n      });\n    });\n\n    explicitEffect([this.columnOrder, this.columnPinning, this._columns], () => {\n      this._syncColumnBaseSizing();\n      this._scheduleFitColumnWidths();\n    });\n\n    explicitEffect([this.columnVisibility, this.columnOrder, this.columnPinning, this.columnSizing], () => {\n      queueMicrotask(() => {\n        this.columnVirtualizer.measure();\n        this._checkHorizontalScroll();\n        this._scheduleVirtualSpacerWidthRefresh();\n      });\n    });\n\n    explicitEffect(\n      [\n        this.columnOrder,\n        this._columnBaseSizing,\n        this.columnPinning,\n        this.columnVisibility,\n        this.groupingColumnIds,\n        this.sorting,\n        this.columnFilters,\n        this.globalFilter,\n        this.showHeaderFooterShadow,\n        this.showHorizontalBorder,\n        this.showVerticalBorder,\n      ],\n      () => {\n        this._saveConfig();\n      },\n      { defer: true }\n    );\n  }\n\n  // ─── Lifecycle ────────────────────────────────────────────────────────────\n\n  ngAfterViewInit(): void {\n    queueMicrotask(() => this._checkScrollState());\n    queueMicrotask(() => this._scheduleFitColumnWidths());\n    queueMicrotask(() => this._scheduleVirtualSpacerWidthRefresh());\n    this._destroy$.subscribe(() => {\n      this._cancelPinnedRowHeightsRefresh();\n      this._cancelVirtualSpacerWidthRefresh();\n    });\n    this._listenCellInteractionOutside();\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.table.setColumnFilters([]);\n        this.table.setGlobalFilter('');\n        this.isFilterHeaderExpanded.set(false);\n        this._bumpFilterResetVersion();\n      },\n      resetSorting: () => {\n        this.table.setSorting([]);\n        this._bumpFilterResetVersion();\n      },\n      clearSelection: () => {\n        this.clearSelection();\n      },\n      addItem: (item: T) => {\n        const current = this.zConfig();\n        current.data = [...current.data, item];\n        this._dataForceUpdate.update(v => v + 1);\n      },\n      updateItem: (id: string | number, updates: Partial<T>, fieldKey?: keyof T) => {\n        const current = this.zConfig();\n        current.data = current.data.map((row, index) => {\n          const rowId = fieldKey\n            ? (row[fieldKey] as string | number)\n            : current.getRowId\n              ? current.getRowId(row, index, undefined, current.data)\n              : ((row as Record<string, unknown>)['id'] as string | number);\n\n          return rowId === id ? { ...row, ...updates } : row;\n        });\n        this._dataForceUpdate.update(v => v + 1);\n        this._rowUpdate.set({ rowId: String(id), updates: updates as Record<string, unknown> });\n      },\n      deleteItem: (id: string | number, fieldKey?: keyof T) => {\n        const current = this.zConfig();\n        current.data = current.data.filter((row, index) => {\n          const rowId = fieldKey\n            ? (row[fieldKey] as string | number)\n            : current.getRowId\n              ? current.getRowId(row, index, undefined, current.data)\n              : ((row as Record<string, unknown>)['id'] as string | number);\n\n          return rowId !== id;\n        });\n        this._dataForceUpdate.update(v => v + 1);\n      },\n      getItems: () => this.zConfig().data,\n      setColumnVisibility: (columnIds: string | string[], visible: boolean) => {\n        const ids = Array.isArray(columnIds) ? columnIds : [columnIds];\n        const currentVisibility = this.columnVisibility();\n        const newVisibility = { ...currentVisibility };\n        const allColumnIds = this.table\n          .getAllLeafColumns()\n          .map(col => col.id)\n          .filter(id => !this._isFixedLeadingColumnId(id));\n        const visibleCount = allColumnIds.filter(id => currentVisibility[id] !== false).length;\n        if (!visible) {\n          const columnsToHide = ids.filter(id => currentVisibility[id] !== false);\n          const remainingVisible = visibleCount - columnsToHide.length;\n          if (remainingVisible < 2) {\n            console.warn('[z-table] Cannot hide columns: at least 2 columns must remain visible');\n            return;\n          }\n        }\n\n        ids.forEach(id => {\n          newVisibility[id] = visible;\n        });\n\n        this.columnVisibility.set(newVisibility);\n      },\n    });\n  }\n\n  // ─── Selection Helpers ────────────────────────────────────────────────────\n\n  /**\n   * Syncs parent row selection state based on children.\n   * If all children are selected, the parent is auto-selected;\n   * if no children are selected, the parent is deselected.\n   */\n  private _handleRowSelectionWithParents(newState: RowSelectionState): void {\n    const stateRecord = newState as Record<string, boolean>;\n    const finalState: Record<string, boolean> = { ...stateRecord };\n\n    const allRows = this.table.getRowModel().rows;\n    allRows.forEach(row => {\n      if (!row.subRows || row.subRows.length === 0) {\n        return;\n      }\n\n      const allChildrenSelected = row.subRows.every(child => finalState[child.id] === true);\n      if (allChildrenSelected) {\n        finalState[row.id] = true;\n        return;\n      }\n\n      const someChildrenSelected = row.subRows.some(child => finalState[child.id] === true);\n      if (!someChildrenSelected) {\n        delete finalState[row.id];\n      }\n    });\n\n    this.rowSelection.set(finalState as RowSelectionState);\n    this.zChange.emit({\n      type: 'select',\n      data: { selection: finalState as RowSelectionState },\n    });\n  }\n\n  protected clearSelection(): void {\n    this.rowSelection.set({});\n    this.zChange.emit({\n      type: 'select',\n      data: { selection: {} },\n    });\n  }\n\n  protected async onBulkActionClick(item: ZTableBulkActionItem<T>): Promise<void> {\n    const actionState = this.bulkActionItems().find(({ action }) => action.key === item.key);\n    if (actionState?.disabled) {\n      return;\n    }\n\n    if (item.key === 'clear-selection') {\n      this.clearSelection();\n      return;\n    }\n\n    if (item.handler) {\n      const handlerResult = await item.handler(this._createBulkActionHandlerContext());\n      if (handlerResult === false) {\n        return;\n      }\n\n      return;\n    }\n\n    const event: ZTableBulkActionClickEvent<T> = {\n      key: item.key,\n      action: item,\n      ...this.bulkActionContext(),\n    };\n\n    this.zChange.emit({\n      type: 'bulkAction',\n      data: event,\n    });\n  }\n\n  private _resolveBulkActionList(\n    actions: ZTableBulkActionList<T> | undefined,\n    context: ZTableBulkActionContext<T>\n  ): ZTableBulkActionItem<T>[] {\n    if (!actions) {\n      return [];\n    }\n\n    if (typeof actions === 'function') {\n      return actions(context);\n    }\n\n    return actions;\n  }\n\n  private _createBulkActionHandlerContext(): ZTableBulkActionHandlerContext<T> {\n    return {\n      ...this.bulkActionContext(),\n      exportExcel: (config: ZTableExcelExportConfig<T>) => this._exportSelectionToExcel(config),\n    };\n  }\n\n  private async _exportSelectionToExcel(config: ZTableExcelExportConfig<T> = {}): Promise<void> {\n    const context = this._createExcelExportContext(config);\n    await this._zExcel.exportFromTable(\n      {\n        fileName: this._getExcelExportFileName(config, context),\n        tableColumns: this._toExcelTableColumns(context.columns, config),\n        source: [\n          {\n            sheetName: config.sheetName,\n            data: context.data,\n          },\n        ],\n        excludeColumns: config.excludeColumns,\n        excelOverrides: config.excelOverrides,\n      },\n      config.options\n    );\n  }\n\n  private _createExcelExportContext(config: ZTableExcelExportConfig<T>): ZTableExcelExportContext<T> {\n    return {\n      ...this.bulkActionContext(),\n      data: this._getExcelExportData(config),\n      columns: this.zConfig().columns,\n    };\n  }\n\n  private _getExcelExportData(config: ZTableExcelExportConfig<T>): T[] {\n    const scope = config.scope ?? 'selected';\n    if (config.exportAll || scope === 'all') {\n      return this.zConfig().data;\n    }\n\n    if (scope === 'filtered') {\n      return this.table.getFilteredRowModel().rows.map(row => row.original);\n    }\n\n    return this.selectedRows();\n  }\n\n  private _getExcelExportFileName(\n    config: ZTableExcelExportConfig<T>,\n    context: ZTableExcelExportContext<T>\n  ): string | undefined {\n    if (typeof config.fileName === 'function') {\n      return config.fileName(context);\n    }\n\n    return config.fileName ?? 'z-table-export';\n  }\n\n  private _toExcelTableColumns(\n    columns: ZTableColumnConfig<T>[],\n    config: ZTableExcelExportConfig<T>\n  ): ZExcelTableColumnConfig<T>[] {\n    return columns.map(column => ({\n      id: column.id,\n      visible: column.visible,\n      accessorKey: column.accessorKey,\n      accessorFn: column.accessorFn,\n      header: {\n        content: config.headerResolver?.(column) ?? this._getExcelColumnHeader(column),\n        align: this._getExcelColumnHeaderAlign(column),\n      },\n      columns: column.columns ? this._toExcelTableColumns(column.columns, config) : undefined,\n    }));\n  }\n\n  private _getExcelColumnHeader(column: ZTableColumnConfig<T>): string {\n    const { header } = column;\n    if (typeof header === 'string') {\n      return header;\n    }\n\n    if (typeof header === 'function' && header.length === 0) {\n      const content = (header as () => string)();\n      return typeof content === 'string' ? content : column.id;\n    }\n\n    if (header && typeof header === 'object' && !(header instanceof TemplateRef) && 'content' in header) {\n      const { content } = header;\n      if (typeof content === 'string') {\n        return content;\n      }\n\n      if (typeof content === 'function' && content.length === 0) {\n        const result = (content as () => string)();\n        return typeof result === 'string' ? result : column.id;\n      }\n    }\n\n    return column.id;\n  }\n\n  private _getExcelColumnHeaderAlign(column: ZTableColumnConfig<T>): ZExcelAlign | undefined {\n    const { header } = column;\n    if (!header || typeof header !== 'object' || header instanceof TemplateRef || !('align' in header)) {\n      return undefined;\n    }\n\n    return header.align;\n  }\n\n  private _clearBulkBarTimer(): void {\n    if (!this._bulkBarTimer) {\n      return;\n    }\n\n    clearTimeout(this._bulkBarTimer);\n    this._bulkBarTimer = null;\n  }\n\n  private _clearContentRowMenuOutsideListener(): void {\n    if (this._contentRowMenuOutsideTimer) {\n      clearTimeout(this._contentRowMenuOutsideTimer);\n      this._contentRowMenuOutsideTimer = null;\n    }\n\n    this._contentRowMenuOutsideCleanup?.();\n    this._contentRowMenuOutsideCleanup = null;\n  }\n\n  // ─── Async State Helpers ──────────────────────────────────────────────────\n\n  /**\n   * Wraps state mutations with a debounced processing indicator.\n   * Shows a brief loading state to prevent UI flicker during\n   * filter/sort recomputation on large datasets.\n   */\n  private _runAsyncStateUpdate(updateFn: () => void, forceLocal = false): void {\n    const isServerMode = this.zConfig().mode === 'server';\n    const hasLocalFiltering = this.hasLocalFiltering();\n    const hasLocalSorting = this.hasLocalSorting();\n    const shouldRunAsync = !isServerMode || forceLocal || hasLocalFiltering || hasLocalSorting;\n\n    if (!shouldRunAsync) {\n      updateFn();\n      return;\n    }\n\n    this.isProcessing.set(true);\n    setTimeout(() => {\n      updateFn();\n      this.isProcessing.set(false);\n    }, this.zConfig().debounceTime ?? Z_DEFAULT_DEBOUNCE_TIME);\n  }\n\n  private _emitFilterChangeDebounced(filters: ColumnFiltersState, search: string): void {\n    if (this._filterEmitDebounceTimeout) {\n      clearTimeout(this._filterEmitDebounceTimeout);\n    }\n\n    this._filterEmitDebounceTimeout = setTimeout(() => {\n      this.zChange.emit({\n        type: 'filter',\n        data: { filters, search },\n      });\n    }, 300);\n  }\n\n  private _checkScrollState(): void {\n    this._checkVerticalScroll();\n    this._checkHorizontalScroll();\n    this._refreshPinnedRowHeights();\n  }\n\n  private _refreshPinnedRowHeights(): void {\n    const tbodyWrapperEl = this.tbodyWrapper()?.nativeElement;\n    if (!tbodyWrapperEl) {\n      if (Object.keys(this.pinnedRowHeights()).length > 0) {\n        this.pinnedRowHeights.set({});\n      }\n      return;\n    }\n\n    const topRows = this.table.getTopRows();\n    const bottomRows = this.table.getBottomRows();\n    if (topRows.length === 0 && bottomRows.length === 0) {\n      if (Object.keys(this.pinnedRowHeights()).length > 0) {\n        this.pinnedRowHeights.set({});\n      }\n      return;\n    }\n\n    const domRowHeights = new Map<string, number>();\n    const domRows = tbodyWrapperEl.querySelectorAll<HTMLElement>('tbody tr[data-row-id]');\n    domRows.forEach(rowEl => {\n      const rowId = rowEl.getAttribute('data-row-id');\n      if (!rowId) {\n        return;\n      }\n\n      // getBoundingClientRect() returns VISUAL px (scaled by browser zoom), but the sticky `top`/\n      // `bottom` offset we compute from it is CSS px that zoom scales AGAIN — at e.g. 150% that\n      // double-scaling drifts pinned rows ~35px apart. Divide out the zoom factor (rect width vs\n      // layout offsetWidth) to recover the true fractional CSS height, which is correct at every\n      // zoom AND keeps sub-pixel precision at 100% (zoom=1 → divisor 1 → unchanged).\n      const rect = rowEl.getBoundingClientRect();\n      const zoom = rowEl.offsetWidth > 0 ? rect.width / rowEl.offsetWidth : 1;\n      domRowHeights.set(rowId, zoom > 0 ? rect.height / zoom : rect.height);\n    });\n\n    const nextHeights: Record<string, number> = {};\n    for (const row of [...topRows, ...bottomRows]) {\n      const height = domRowHeights.get(row.id);\n      if (!height) {\n        continue;\n      }\n\n      nextHeights[row.id] = height;\n    }\n\n    const currentHeights = this.pinnedRowHeights();\n    const currentKeys = Object.keys(currentHeights);\n    const nextKeys = Object.keys(nextHeights);\n    if (currentKeys.length === nextKeys.length) {\n      const hasChanges = nextKeys.some(key => Math.abs((currentHeights[key] ?? 0) - nextHeights[key]) > 0.1);\n      if (!hasChanges) {\n        return;\n      }\n    }\n\n    this.pinnedRowHeights.set(nextHeights);\n    queueMicrotask(() => {\n      this.virtualizer.measure();\n      this.tbodyScrollbar()?.update();\n    });\n  }\n\n  private _schedulePinnedRowHeightsRefresh(): void {\n    this._cancelPinnedRowHeightsRefresh();\n\n    this._pinnedRowHeightsFrame = requestAnimationFrame(() => {\n      this._pinnedRowHeightsFrame = null;\n      this._refreshPinnedRowHeights();\n    });\n  }\n\n  private _cancelPinnedRowHeightsRefresh(): void {\n    if (this._pinnedRowHeightsFrame === null) {\n      return;\n    }\n\n    cancelAnimationFrame(this._pinnedRowHeightsFrame);\n    this._pinnedRowHeightsFrame = null;\n  }\n\n  private _refreshVirtualSpacerWidths(): void {\n    if (!this.canUseVirtualColumns()) {\n      this._setVirtualMeasuredSpacerWidths(0, 0);\n      return;\n    }\n\n    const thead = this.theadWrapper()?.nativeElement;\n    if (!thead) {\n      this._setVirtualMeasuredSpacerWidths(0, 0);\n      return;\n    }\n\n    const leftSpacer = thead.querySelector<HTMLElement>('th.z-virtual-left-spacer');\n    const rightSpacer = thead.querySelector<HTMLElement>('th.z-virtual-right-spacer');\n    const leftSourceWidth = this.virtualLeftSpacerWidth();\n    const rightSourceWidth = this.virtualRightSpacerWidth();\n    const leftWidth = leftSourceWidth > 0 ? (leftSpacer?.getBoundingClientRect().width ?? 0) : 0;\n    const rightWidth = rightSourceWidth > 0 ? (rightSpacer?.getBoundingClientRect().width ?? 0) : 0;\n\n    this._setVirtualMeasuredSpacerWidths(leftWidth, rightWidth, leftSourceWidth, rightSourceWidth);\n  }\n\n  private _setVirtualMeasuredSpacerWidths(\n    leftWidth: number,\n    rightWidth: number,\n    leftSourceWidth = 0,\n    rightSourceWidth = 0\n  ): void {\n    const currentLeft = this.virtualMeasuredLeftSpacerWidth();\n    const currentRight = this.virtualMeasuredRightSpacerWidth();\n    const currentLeftSource = this._virtualMeasuredLeftSpacerSourceWidth();\n    const currentRightSource = this._virtualMeasuredRightSpacerSourceWidth();\n    if (Math.abs(currentLeft - leftWidth) > 0.1) {\n      this.virtualMeasuredLeftSpacerWidth.set(leftWidth);\n    }\n\n    if (Math.abs(currentRight - rightWidth) > 0.1) {\n      this.virtualMeasuredRightSpacerWidth.set(rightWidth);\n    }\n\n    if (Math.abs(currentLeftSource - leftSourceWidth) > 0.1) {\n      this._virtualMeasuredLeftSpacerSourceWidth.set(leftSourceWidth);\n    }\n\n    if (Math.abs(currentRightSource - rightSourceWidth) > 0.1) {\n      this._virtualMeasuredRightSpacerSourceWidth.set(rightSourceWidth);\n    }\n  }\n\n  private _scheduleVirtualSpacerWidthRefresh(): void {\n    if (this._virtualSpacerWidthFrame !== null) {\n      return;\n    }\n\n    this._virtualSpacerWidthFrame = requestAnimationFrame(() => {\n      this._virtualSpacerWidthFrame = null;\n      this._refreshVirtualSpacerWidths();\n    });\n  }\n\n  private _cancelVirtualSpacerWidthRefresh(): void {\n    if (this._virtualSpacerWidthFrame === null) {\n      return;\n    }\n\n    cancelAnimationFrame(this._virtualSpacerWidthFrame);\n    this._virtualSpacerWidthFrame = null;\n  }\n\n  private _checkVerticalScroll(): void {\n    const viewportEl = this._getTbodyViewportElement();\n    if (viewportEl) {\n      this._updateVerticalScrollShadowState(viewportEl);\n      this._checkLastRowTouchesBottom();\n      return;\n    }\n\n    this.hasVerticalScroll.set(false);\n    this.hasScrollTop.set(false);\n    this.hasScrollBottom.set(false);\n  }\n\n  private _checkLastRowTouchesBottom(): void {\n    const viewportEl = this._getTbodyViewportElement();\n    if (!viewportEl) {\n      return;\n    }\n\n    const hasScroll = viewportEl.scrollHeight > viewportEl.clientHeight;\n    if (hasScroll) {\n      this.lastRowTouchesBottom.set(true);\n      return;\n    }\n\n    if (this.isVirtual()) {\n      const virtualScrollInner = viewportEl.querySelector('.z-virtual-scroll-inner');\n      if (!virtualScrollInner) {\n        this.lastRowTouchesBottom.set(true);\n        return;\n      }\n\n      const virtualRows = virtualScrollInner.querySelectorAll('.z-virtual-row');\n      if (virtualRows.length === 0) {\n        this.lastRowTouchesBottom.set(true);\n        return;\n      }\n\n      const lastVirtualRow = virtualRows[virtualRows.length - 1];\n      const lastTr = lastVirtualRow.querySelector('tbody tr:last-child');\n      if (!lastTr) {\n        this.lastRowTouchesBottom.set(true);\n        return;\n      }\n\n      const wrapperRect = viewportEl.getBoundingClientRect();\n      const rowRect = lastTr.getBoundingClientRect();\n      const gap = wrapperRect.bottom - rowRect.bottom;\n      this.lastRowTouchesBottom.set(gap <= 2);\n      return;\n    }\n\n    const tbody = viewportEl.querySelector('tbody');\n    if (!tbody) {\n      this.lastRowTouchesBottom.set(true);\n      return;\n    }\n\n    const lastRow = tbody.querySelector('tr:last-child');\n    if (!lastRow) {\n      this.lastRowTouchesBottom.set(true);\n      return;\n    }\n\n    const wrapperRect = viewportEl.getBoundingClientRect();\n    const rowRect = lastRow.getBoundingClientRect();\n    const gap = wrapperRect.bottom - rowRect.bottom;\n    this.lastRowTouchesBottom.set(gap <= 2);\n  }\n\n  private _getTbodyViewportElement(): HTMLElement | undefined {\n    const scrollbar = this.tbodyScrollbar();\n    if (scrollbar?.adapter.initialized()) {\n      return scrollbar.adapter.viewportElement;\n    }\n\n    return this.tbodyWrapper()?.nativeElement;\n  }\n\n  private _handleColumnSizingChange(\n    updater: ColumnSizingState | ((old: ColumnSizingState) => ColumnSizingState)\n  ): void {\n    const nextRaw = typeof updater === 'function' ? updater(this.columnSizingState()) : updater;\n    const resizingColumnId = this.columnSizingInfo().isResizingColumn;\n    const next = this._clampColumnSizing(nextRaw, resizingColumnId || undefined);\n    if (this._isSameColumnSizing(this.columnSizingState(), next)) {\n      return;\n    }\n\n    this.columnSizingState.set(next);\n    this._columnBaseSizing.set(next);\n    if (this.columnSizingInfo().isResizingColumn) {\n      this._checkHorizontalScroll();\n      return;\n    }\n\n    this._scheduleFitColumnWidths();\n  }\n\n  private _clampColumnSizing(sizing: ColumnSizingState, activeColumnId?: string): ColumnSizingState {\n    const activeColumn = activeColumnId ? this.table.getColumn(activeColumnId) : undefined;\n    const activeWidth = activeColumnId ? sizing[activeColumnId] : undefined;\n    if (activeColumnId && activeColumn && typeof activeWidth === 'number') {\n      const activeMinSize = activeColumn.columnDef.minSize ?? Z_DEFAULT_COLUMN_MIN_SIZE;\n      const activeMaxSize = activeColumn.columnDef.maxSize;\n      if (activeWidth < activeMinSize) {\n        return { ...this.columnSizingState(), [activeColumnId]: activeMinSize };\n      }\n\n      if (typeof activeMaxSize === 'number' && activeWidth > activeMaxSize) {\n        return { ...this.columnSizingState(), [activeColumnId]: activeMaxSize };\n      }\n    }\n\n    let changed = false;\n    const nextSizing: ColumnSizingState = {};\n    for (const [columnId, width] of Object.entries(sizing)) {\n      const column = this.table.getColumn(columnId);\n      const minSize = column?.columnDef.minSize ?? Z_DEFAULT_COLUMN_MIN_SIZE;\n      const maxSize = column?.columnDef.maxSize;\n      let nextWidth = Math.max(width, minSize);\n      if (typeof maxSize === 'number') {\n        nextWidth = Math.min(nextWidth, maxSize);\n      }\n\n      nextSizing[columnId] = nextWidth;\n      changed = changed || nextWidth !== width;\n    }\n\n    return changed ? nextSizing : sizing;\n  }\n\n  private _syncColumnBaseSizing(): void {\n    const currentBaseSizing = this._columnBaseSizing();\n    const currentSizing = this.columnSizingState();\n    const nextBaseSizing: ColumnSizingState = {};\n\n    for (const column of this.orderedLeafColumns()) {\n      if (!column.getIsVisible()) {\n        continue;\n      }\n\n      nextBaseSizing[column.id] =\n        currentBaseSizing[column.id] ?? currentSizing[column.id] ?? column.columnDef.size ?? column.getSize();\n    }\n\n    if (Object.keys(nextBaseSizing).length === 0) {\n      return;\n    }\n\n    if (this._isSameColumnSizing(currentBaseSizing, nextBaseSizing)) {\n      return;\n    }\n\n    this._columnBaseSizing.set(nextBaseSizing);\n  }\n\n  private _scheduleFitColumnWidths(): void {\n    if (this._isFitColumnScheduled) {\n      return;\n    }\n\n    this._isFitColumnScheduled = true;\n    queueMicrotask(() => {\n      this._isFitColumnScheduled = false;\n      this._applyFitColumnWidths();\n    });\n  }\n\n  private _applyFitColumnWidths(): void {\n    this._syncColumnBaseSizing();\n\n    const baseSizing = this._columnBaseSizing();\n    const visibleColumns = this.orderedLeafColumns().filter(column => column.getIsVisible());\n    const viewportWidth = this.tbodyContainer()?.nativeElement.clientWidth ?? 0;\n    if (viewportWidth <= 0 || visibleColumns.length === 0) {\n      return;\n    }\n\n    let nextSizing = baseSizing;\n    if (this.canUseVirtualColumns()) {\n      this._setColumnSizingFromFit(nextSizing);\n      this._checkHorizontalScroll();\n      return;\n    }\n\n    const baseTotal = visibleColumns.reduce((total, column) => total + this._getColumnBaseSize(column, baseSizing), 0);\n    const fitColumnIds = this.fitColumnIds();\n    if (baseTotal < viewportWidth && fitColumnIds.length > 0) {\n      nextSizing = { ...baseSizing };\n      const extraWidth = viewportWidth - baseTotal;\n      if (this.zConfig().fitContentWidth) {\n        const lastUnpinnedColumnId = [...fitColumnIds]\n          .reverse()\n          .find(columnId => this.table.getColumn(columnId)?.getIsPinned() === false);\n        const lastColumnId = lastUnpinnedColumnId ?? fitColumnIds[fitColumnIds.length - 1];\n        if (lastColumnId) {\n          nextSizing[lastColumnId] = Math.round((nextSizing[lastColumnId] + extraWidth) * 100) / 100;\n        }\n      }\n\n      if (!this.zConfig().fitContentWidth) {\n        const distributedWidth = extraWidth / fitColumnIds.length;\n        for (const columnId of fitColumnIds) {\n          nextSizing[columnId] = Math.round((nextSizing[columnId] + distributedWidth) * 100) / 100;\n        }\n      }\n    }\n\n    this._setColumnSizingFromFit(nextSizing);\n    this._checkHorizontalScroll();\n  }\n\n  private _setColumnSizingFromFit(nextSizing: ColumnSizingState): void {\n    if (this._isSameColumnSizing(this.columnSizingState(), nextSizing)) {\n      return;\n    }\n\n    this.columnSizingState.set(nextSizing);\n  }\n\n  private _getColumnBaseSize(column: Column<T, unknown>, baseSizing: ColumnSizingState): number {\n    return baseSizing[column.id] ?? column.columnDef.size ?? column.getSize();\n  }\n\n  private _isSameColumnSizing(left: ColumnSizingState, right: ColumnSizingState): boolean {\n    const leftKeys = Object.keys(left);\n    const rightKeys = Object.keys(right);\n    if (leftKeys.length !== rightKeys.length) {\n      return false;\n    }\n\n    return leftKeys.every(key => left[key] === right[key]);\n  }\n\n  private _reconcileColumnSizing(\n    columns: ColumnDef<T>[],\n    previous?: { source: ColumnDef<T>[]; value: ColumnSizingState }\n  ): ColumnSizingState {\n    const previousColumns = new Map(previous?.source.map(column => [column.id, column]));\n    const nextSizing: ColumnSizingState = {};\n\n    for (const column of columns) {\n      if (!column.id) {\n        continue;\n      }\n\n      const previousColumn = previousColumns.get(column.id);\n      const canKeepPreviousSize =\n        previousColumn &&\n        previousColumn.size === column.size &&\n        previousColumn.minSize === column.minSize &&\n        previousColumn.maxSize === column.maxSize;\n\n      if (canKeepPreviousSize && previous?.value[column.id] !== undefined) {\n        nextSizing[column.id] = previous.value[column.id];\n        continue;\n      }\n\n      nextSizing[column.id] = column.size ?? Math.max(column.minSize ?? Z_DEFAULT_COLUMN_MIN_SIZE, 150);\n    }\n\n    return nextSizing;\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._getTbodyViewportElement();\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  private _updateVerticalScrollShadowState(element: HTMLElement): void {\n    const maxScrollTop = Math.max(0, element.scrollHeight - element.clientHeight);\n    const hasScroll = maxScrollTop > 1;\n    const isAtTop = element.scrollTop <= 1;\n    const isAtBottom = element.scrollTop >= maxScrollTop - 1;\n\n    this.hasVerticalScroll.set(hasScroll);\n    this.hasScrollTop.set(this.table.getTopRows().length > 0 && hasScroll && !isAtTop);\n    this.hasScrollBottom.set(this.table.getBottomRows().length > 0 && hasScroll && !isAtBottom);\n  }\n\n  public hasRightPinnedColumns(): boolean {\n    return this.table.getRightLeafColumns().length > 0;\n  }\n\n  // ─── Scroll Event Handlers ────────────────────────────────────────────────\n\n  public onTbodyScroll(event: Event): void {\n    if (this._isSyncingScroll()) {\n      return;\n    }\n    const target = event.target as HTMLElement;\n    const viewport = this._getTbodyViewportElement() ?? target;\n    this._syncScrollLeft(viewport.scrollLeft);\n    this._updateScrollShadowState(viewport);\n    this._updateVerticalScrollShadowState(viewport);\n    this._scheduleVirtualSpacerWidthRefresh();\n    this._host.nativeElement.style.setProperty('--z-scroll-x', `${viewport.scrollLeft}px`);\n  }\n\n  private _syncScrollLeft(scrollLeft: number): void {\n    untracked(() => {\n      this._isSyncingScroll.set(true);\n    });\n    const thead = this.theadWrapper()?.nativeElement;\n    const tbody = this.tbodyWrapper()?.nativeElement;\n    const tfoot = this.tfootWrapper()?.nativeElement;\n\n    if (thead) {\n      thead.scrollLeft = scrollLeft;\n    }\n    if (tbody) {\n      tbody.scrollLeft = scrollLeft;\n    }\n    if (tfoot) {\n      tfoot.scrollLeft = scrollLeft;\n    }\n\n    untracked(() => {\n      this._isSyncingScroll.set(false);\n    });\n  }\n\n  // ─── Sort / Pagination / Search Handlers ──────────────────────────────────\n\n  /**\n   * @deprecated Header sort now lives in the column filter popover.\n   * Giữ tạm để các consumer/template cũ còn compile trong giai đoạn chuyển đổi.\n   */\n  public handleSort(event: Event, handler?: (event: unknown) => void): void {\n    event.preventDefault();\n    if (this.zConfig().enableMultiSort ?? true) {\n      const multiSortEvent = new MouseEvent('click', { shiftKey: true });\n      handler?.(multiSortEvent);\n      return;\n    }\n\n    handler?.(event);\n  }\n\n  protected _handleDragDrop(event: ZTableDragDropData): void {\n    if (event.source.entity !== 'row') {\n      return;\n    }\n\n    this._handleRowDrop(event);\n  }\n\n  private _handleRowDrop(event: ZTableDragDropData): void {\n    if (!this.isRowDragEnabled()) {\n      return;\n    }\n\n    const visibleRows = this.table.getRowModel().rows;\n    const previousIndex = visibleRows.findIndex(row => row.id === event.source.itemId);\n    const targetIndex = visibleRows.findIndex(row => row.id === event.target.itemId);\n    if (previousIndex < 0 || targetIndex < 0) {\n      return;\n    }\n\n    const currentIndex = resolveZTableDropIndex(previousIndex, targetIndex, event.edge);\n    if (previousIndex === currentIndex) {\n      return;\n    }\n\n    const sourceRow = visibleRows[previousIndex];\n    if (!sourceRow) {\n      return;\n    }\n\n    const visibleData = visibleRows.map(row => row.original);\n    const nextData = reorderZTableVisibleItems(this._data(), visibleData, previousIndex, currentIndex);\n\n    const scrollbar = this.tbodyScrollbar();\n    const currentOffset = scrollbar?.adapter.viewportElement.scrollTop ?? 0;\n\n    this._rowDragDataOverride.set(nextData);\n\n    if (this.isVirtual()) {\n      queueMicrotask(() => {\n        this.virtualizer.scrollToOffset(currentOffset);\n      });\n    }\n\n    const rowDragEvent: ZTableRowDragEvent<T> = {\n      row: sourceRow.original,\n      rowId: sourceRow.id,\n      previousIndex,\n      currentIndex,\n      data: nextData,\n    };\n\n    this.zChange.emit({\n      type: 'rowDrag',\n      data: rowDragEvent,\n    });\n  }\n\n  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._emitSearchChange(searchValue);\n  }\n\n  public clearAppliedFilterChip(chip: ZTableAppliedFilterChip): void {\n    if (chip.type === 'sort') {\n      this.table.setSorting(sorting => sorting.filter(item => item.id !== chip.columnId));\n      this._bumpFilterResetVersion();\n      this._collapseFilterHeaderWhenNeeded();\n      return;\n    }\n\n    this.table.setColumnFilters(filters => filters.filter(item => item.id !== chip.columnId));\n    this._bumpFilterResetVersion();\n    this._collapseFilterHeaderWhenNeeded();\n  }\n\n  public clearAppliedFilters(): void {\n    this.table.setColumnFilters([]);\n    this.table.setSorting([]);\n    this.table.setGlobalFilter('');\n    this.isFilterHeaderExpanded.set(false);\n    this._bumpFilterResetVersion();\n  }\n\n  public toggleFilterHeaderExpanded(): void {\n    this.isFilterHeaderExpanded.update(value => !value);\n  }\n\n  public toggleHeaderFooterShadow(): void {\n    this.showHeaderFooterShadow.update(v => !v);\n  }\n\n  public onActionClick(event: ZTableActionClickEvent<T>): void {\n    this.zChange.emit({\n      type: 'action',\n      data: event,\n    });\n  }\n\n  protected setContentRowMenuControl(control: ZPopoverControl): void {\n    this.contentRowMenuControl.set(control);\n  }\n\n  protected setCellMenuControl(control: ZPopoverControl): void {\n    this.cellMenuControl.set(control);\n  }\n\n  protected clearCellMenu(): void {\n    this.cellMenu.set(null);\n  }\n\n  protected clearContentRowMenu(): void {\n    this._clearContentRowMenuOutsideListener();\n    this.contentRowMenu.set(null);\n  }\n\n  protected onCellPointerDown(event: PointerEvent, row: Row<T>, columnId: string): void {\n    if (!this.canUseCellSelection()) {\n      return;\n    }\n\n    if (event.button !== 0) {\n      return;\n    }\n\n    if (!this._isSelectableCell(row, columnId)) {\n      return;\n    }\n\n    if (this._isCellSelectionDragTarget(event.target)) {\n      return;\n    }\n\n    if (this._isIgnoredCellSelectionTarget(event.target)) {\n      return;\n    }\n\n    const cell = { rowId: row.id, columnId };\n    event.preventDefault();\n    this.tableContainer()?.nativeElement.focus({ preventScroll: true });\n    this.cellMenuControl()?.closeImmediate();\n    this.cellMenu.set(null);\n    this.activeCell.set(cell);\n\n    // Arm a potential range-drag: it only turns into a real drag once the pointer actually moves\n    // (see _beginCellDragTracking). Until then, pointerenter won't extend the selection — so merely\n    // holding the button to scroll never starts a range.\n    this._armCellDrag(event);\n\n    if (event.shiftKey && this.cellSelectionAnchor() && this.cellSelectionOptions().range) {\n      this.cellSelectionFocus.set(cell);\n      return;\n    }\n\n    this.cellSelectionAnchor.set(cell);\n    this.cellSelectionFocus.set(cell);\n  }\n\n  /** Arms a range-drag on cell pointerdown and starts document-level move/up tracking to confirm it. */\n  private _armCellDrag(event: PointerEvent): void {\n    this._cellDragCleanup?.();\n    this._cellDragArmed = true;\n    this._isCellDragging = false;\n    this._cellDragStart = { x: event.clientX, y: event.clientY };\n\n    const onMove = (e: PointerEvent): void => {\n      if (!this._cellDragArmed || !this._cellDragStart) {\n        return;\n      }\n      // Only a genuine pointer motion (not scroll) fires this. Once it passes the threshold the\n      // armed press is a real drag and pointerenter may extend the range.\n      const dx = Math.abs(e.clientX - this._cellDragStart.x);\n      const dy = Math.abs(e.clientY - this._cellDragStart.y);\n      if (dx >= ZTableComponent._cellDragThreshold || dy >= ZTableComponent._cellDragThreshold) {\n        this._isCellDragging = true;\n      }\n    };\n    const onUp = (): void => {\n      this._cellDragCleanup?.();\n    };\n\n    this._document.addEventListener('pointermove', onMove, true);\n    this._document.addEventListener('pointerup', onUp, true);\n    this._document.addEventListener('pointercancel', onUp, true);\n\n    this._cellDragCleanup = () => {\n      this._document.removeEventListener('pointermove', onMove, true);\n      this._document.removeEventListener('pointerup', onUp, true);\n      this._document.removeEventListener('pointercancel', onUp, true);\n      this._cellDragArmed = false;\n      this._isCellDragging = false;\n      this._cellDragStart = null;\n      this._cellDragCleanup = null;\n    };\n  }\n\n  protected onCellPointerEnter(event: PointerEvent, row: Row<T>, columnId: string): void {\n    if (!this.canUseCellSelection() || !this.cellSelectionOptions().range) {\n      return;\n    }\n\n    if ((event.buttons & 1) !== 1) {\n      return;\n    }\n\n    if (!this.cellSelectionAnchor()) {\n      return;\n    }\n\n    if (!this._isSelectableCell(row, columnId)) {\n      return;\n    }\n\n    if (this._isIgnoredCellSelectionTarget(event.target)) {\n      return;\n    }\n\n    // Only extend the range when an actual drag is in progress (pointer pressed AND moved). A cell\n    // sliding under the pointer because the body SCROLLED fires pointerenter too, but no drag is\n    // active then — so scrolling after selecting a cell never turns into a range selection.\n    if (!this._isCellDragging) {\n      return;\n    }\n\n    event.preventDefault();\n    this.activeCell.set({ rowId: row.id, columnId });\n    this.cellSelectionFocus.set({ rowId: row.id, columnId });\n  }\n\n  protected openCellMenu(event: MouseEvent, row: Row<T>, columnId: string): void {\n    const activeContentCell = this.activeContentEditCell();\n    if (activeContentCell?.rowId === row.id && activeContentCell.columnId === columnId) {\n      this.openContentRowMenu(event, row, columnId);\n      return;\n    }\n\n    const contentCellTarget = this._getContentEditTriggerTarget(event.target);\n    if (contentCellTarget?.rowId === row.id && contentCellTarget.columnId === columnId) {\n      this.openContentRowMenu(event, row, columnId);\n      return;\n    }\n\n    const options = this.cellSelectionOptions();\n    if (!options.enabled || !options.contextMenu) {\n      this.openContentRowMenu(event, row);\n      return;\n    }\n\n    if (!this._isSelectableCell(row, columnId)) {\n      this.openContentRowMenu(event, row);\n      return;\n    }\n\n    if (this._isIgnoredCellSelectionTarget(event.target)) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n    const currentCell = { rowId: row.id, columnId };\n\n    this.contentRowMenuControl()?.closeImmediate();\n    this.clearContentRowMenu();\n    this.cellMenu.set({\n      ...currentCell,\n      left: event.clientX,\n      top: event.clientY,\n    });\n\n    queueMicrotask(() => this.cellMenuControl()?.show());\n  }\n\n  protected openContentRowMenu(event: MouseEvent, row: Row<T>, columnId?: string): void {\n    if (!this.canUseContentRowInsert()) {\n      return;\n    }\n\n    if (row.depth > 0) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n    this._clearContentRowMenuOutsideListener();\n    this.contentRowMenu.set({\n      row,\n      columnId,\n      left: event.clientX,\n      top: event.clientY,\n    });\n\n    queueMicrotask(() => {\n      this.contentRowMenuControl()?.show();\n      this._listenContentRowMenuOutside();\n    });\n  }\n\n  protected insertContentRow(position: ZTableRowInsertPosition): void {\n    const menu = this.contentRowMenu();\n    if (!menu) {\n      return;\n    }\n\n    this.zChange.emit({\n      type: 'rowInsert',\n      data: {\n        row: menu.row.original,\n        rowId: menu.row.id,\n        rowIndex: this._getRowVisibleIndex(menu.row),\n        sourceIndex: this._getRowSourceIndex(menu.row),\n        position,\n      },\n    });\n\n    this.contentRowMenuControl()?.closeImmediate();\n    this.clearContentRowMenu();\n  }\n\n  protected deleteContentRows(): void {\n    const rows = this._getContentRowsToDelete();\n    if (rows.length === 0) {\n      return;\n    }\n\n    this.zChange.emit({\n      type: 'rowDelete',\n      data: {\n        rows: rows.map(row => row.original),\n        rowIds: rows.map(row => row.id),\n        rowIndexes: rows.map(row => this._getRowVisibleIndex(row)),\n        sourceIndexes: rows.map(row => this._getRowSourceIndex(row)),\n      },\n    });\n\n    this._removeDeletedRowsFromSelection(rows);\n    this.contentRowMenuControl()?.closeImmediate();\n    this.clearContentRowMenu();\n  }\n\n  private _removeDeletedRowsFromSelection(rows: Row<T>[]): void {\n    const selection = { ...this.rowSelection() };\n    let changed = false;\n\n    for (const row of rows) {\n      if (!selection[row.id]) {\n        continue;\n      }\n\n      delete selection[row.id];\n      changed = true;\n    }\n\n    if (!changed) {\n      return;\n    }\n\n    this.rowSelection.set(selection);\n    this.zChange.emit({\n      type: 'select',\n      data: { selection },\n    });\n  }\n\n  protected onContentTableKeydown(event: KeyboardEvent): void {\n    if (\n      (event.ctrlKey || event.metaKey) &&\n      event.key.toLowerCase() === 'c' &&\n      this._isContentEditorTarget(event.target)\n    ) {\n      const activeCell = this.activeContentEditCell();\n      if (!activeCell) {\n        return;\n      }\n\n      const text = this._getContentEditClipboardText(activeCell.rowId, activeCell.columnId);\n      if (!text) {\n        return;\n      }\n\n      event.preventDefault();\n      void this._writeClipboardText(text);\n      return;\n    }\n\n    if (\n      this.canUseCellSelection() &&\n      !this._isEditableKeyboardTarget(event.target) &&\n      (event.ctrlKey || event.metaKey) &&\n      event.key.toLowerCase() === 'c'\n    ) {\n      event.preventDefault();\n      this.copySelectedCells(false);\n      return;\n    }\n\n    if (!this.canUseContentRowInsert()) {\n      return;\n    }\n\n    const contentCellTarget = this._getContentEditTriggerTarget(event.target);\n    if (contentCellTarget && (event.ctrlKey || event.metaKey) && event.key.toLowerCase() === 'c') {\n      event.preventDefault();\n      this.copyContentRows(contentCellTarget.rowId);\n      return;\n    }\n\n    if (contentCellTarget && (event.ctrlKey || event.metaKey) && event.key.toLowerCase() === 'v') {\n      event.preventDefault();\n      this.pasteContentRows('below', contentCellTarget.rowId);\n      return;\n    }\n\n    if (event.key !== 'Delete' && event.key !== 'Backspace') {\n      return;\n    }\n\n    if (this._isEditableKeyboardTarget(event.target)) {\n      return;\n    }\n\n    if (contentCellTarget) {\n      event.preventDefault();\n      this._clearContentEditCell(contentCellTarget.rowId, contentCellTarget.columnId);\n      return;\n    }\n\n    if (this.selectedRowIds().length === 0) {\n      return;\n    }\n\n    event.preventDefault();\n    this.deleteContentRows();\n  }\n\n  protected copySelectedCells(includeHeaders: boolean): void {\n    const text = this._buildSelectedCellsText(includeHeaders);\n    if (!text) {\n      return;\n    }\n\n    void this._writeClipboardText(text);\n    this.cellMenuControl()?.closeImmediate();\n    this.clearCellMenu();\n  }\n\n  protected copyContentCell(): void {\n    const menu = this.contentRowMenu();\n    if (!menu?.columnId) {\n      return;\n    }\n\n    const text =\n      this._getContentEditClipboardText(menu.row.id, menu.columnId) ??\n      this._getRenderedCellClipboardValue(menu.row.id, menu.columnId) ??\n      this._formatCellClipboardValue(menu.row.getValue(menu.columnId));\n    void this._writeClipboardText(text);\n    this.contentRowMenuControl()?.closeImmediate();\n    this.clearContentRowMenu();\n  }\n\n  protected copyContentRows(rowId?: string): void {\n    const rows = this._getContentRowsForRowAction(rowId);\n    if (rows.length === 0) {\n      return;\n    }\n\n    this.contentRowClipboard.set(rows.map(row => row.original));\n    this.zChange.emit({\n      type: 'rowCopy',\n      data: {\n        rows: rows.map(row => row.original),\n        rowIds: rows.map(row => row.id),\n        rowIndexes: rows.map(row => this._getRowVisibleIndex(row)),\n        sourceIndexes: rows.map(row => this._getRowSourceIndex(row)),\n      },\n    });\n\n    this.contentRowMenuControl()?.closeImmediate();\n    this.clearContentRowMenu();\n  }\n\n  protected pasteContentRows(position: ZTableRowInsertPosition, rowId?: string): void {\n    const rows = this.contentRowClipboard();\n    if (rows.length === 0) {\n      return;\n    }\n\n    const targetRow = this._getContentRowActionTarget(rowId);\n    if (!targetRow) {\n      return;\n    }\n\n    this.zChange.emit({\n      type: 'rowPaste',\n      data: {\n        rows,\n        targetRow: targetRow.original,\n        targetRowId: targetRow.id,\n        targetRowIndex: this._getRowVisibleIndex(targetRow),\n        targetSourceIndex: this._getRowSourceIndex(targetRow),\n        position,\n      },\n    });\n\n    this.contentRowMenuControl()?.closeImmediate();\n    this.clearContentRowMenu();\n  }\n\n  protected moveContentRow(direction: ZTableRowMoveDirection): void {\n    const row = this.contentRowMenu()?.row;\n    if (!row) {\n      return;\n    }\n\n    const visibleRows = this.table.getRowModel().rows;\n    const previousIndex = this._getRowVisibleIndex(row);\n    if (previousIndex < 0) {\n      return;\n    }\n\n    const currentIndex = direction === 'up' ? previousIndex - 1 : previousIndex + 1;\n    if (currentIndex < 0 || currentIndex >= visibleRows.length) {\n      return;\n    }\n\n    const targetRow = visibleRows[currentIndex];\n    if (!targetRow) {\n      return;\n    }\n\n    this.zChange.emit({\n      type: 'rowMove',\n      data: {\n        row: row.original,\n        rowId: row.id,\n        direction,\n        previousIndex,\n        currentIndex,\n        previousSourceIndex: this._getRowSourceIndex(row),\n        currentSourceIndex: this._getRowSourceIndex(targetRow),\n      },\n    });\n\n    this.contentRowMenuControl()?.closeImmediate();\n    this.clearContentRowMenu();\n  }\n\n  private _getContentRowsToDelete(): Row<T>[] {\n    return this._getContentRowsForRowAction();\n  }\n\n  private _getRowSourceIndex(row: Row<T>): number {\n    return this._data().findIndex(item => item === row.original);\n  }\n\n  private _getRowVisibleIndex(row: Row<T>): number {\n    return this.table.getRowModel().rows.findIndex(item => item.id === row.id);\n  }\n\n  private _getContentRowsForRowAction(rowId?: string): Row<T>[] {\n    const selectedRows = this.table.getSelectedRowModel().rows;\n    if (selectedRows.length > 0) {\n      return selectedRows as Row<T>[];\n    }\n\n    const targetRow = this._getContentRowActionTarget(rowId);\n    return targetRow ? [targetRow] : [];\n  }\n\n  private _getContentRowActionTarget(rowId?: string): Row<T> | null {\n    if (rowId) {\n      return (this.table.getRowModel().rows.find(row => row.id === rowId) as Row<T> | undefined) ?? null;\n    }\n\n    const menu = this.contentRowMenu();\n    if (!menu) {\n      return null;\n    }\n\n    return menu.row;\n  }\n\n  private _isEditableKeyboardTarget(target: EventTarget | null): boolean {\n    if (!(target instanceof HTMLElement)) {\n      return false;\n    }\n\n    if (target.isContentEditable) {\n      return true;\n    }\n\n    return !!target.closest('input, textarea, select, [contenteditable=\"true\"], z-input, z-select, z-calendar');\n  }\n\n  private _isContentEditorTarget(target: EventTarget | null): boolean {\n    if (!(target instanceof HTMLElement)) {\n      return false;\n    }\n\n    return !!target.closest('z-table-content-editor');\n  }\n\n  private _getContentEditClipboardText(rowId: string, columnId: string): string | null {\n    const activeCell = this.activeContentEditCell();\n    if (activeCell?.rowId !== rowId || activeCell.columnId !== columnId) {\n      return null;\n    }\n\n    const editor = this._host.nativeElement.querySelector<HTMLElement>('z-table-content-editor');\n    if (!editor) {\n      return null;\n    }\n\n    const selectedText = this._getSelectedTextFromEditor(editor);\n    if (selectedText !== null) {\n      return selectedText;\n    }\n\n    const valueElement = editor.querySelector<HTMLInputElement | HTMLTextAreaElement>('input, textarea');\n    if (valueElement) {\n      return this._formatCellClipboardValue(valueElement.value);\n    }\n\n    const trigger = editor.querySelector<HTMLElement>('.z-select-trigger');\n    if (trigger) {\n      return this._formatCellClipboardValue(trigger.textContent?.trim() ?? '');\n    }\n\n    return null;\n  }\n\n  private _getSelectedTextFromEditor(editor: HTMLElement): string | null {\n    const { activeElement } = this._document;\n    if (activeElement instanceof HTMLInputElement || activeElement instanceof HTMLTextAreaElement) {\n      if (!editor.contains(activeElement)) {\n        return null;\n      }\n\n      const { selectionStart } = activeElement;\n      const { selectionEnd } = activeElement;\n      if (selectionStart === null || selectionEnd === null || selectionStart === selectionEnd) {\n        return null;\n      }\n\n      return activeElement.value.slice(selectionStart, selectionEnd);\n    }\n\n    const selection = this._document.getSelection();\n    if (!selection || selection.isCollapsed || !editor.contains(selection.anchorNode)) {\n      return null;\n    }\n\n    return selection.toString();\n  }\n\n  protected isCellInSelectedRange(rowId: string, columnId: string): boolean {\n    return this.selectedCellIds().has(this._getCellSelectionId(rowId, columnId));\n  }\n\n  private _listenCellInteractionOutside(): void {\n    const onPointerDown = (event: PointerEvent) => {\n      if (!this._hasCellInteractionState()) {\n        return;\n      }\n\n      if (this._isInsideCellInteractionBoundary(event.target)) {\n        return;\n      }\n\n      this._clearCellInteractionState();\n    };\n\n    this._document.addEventListener('pointerdown', onPointerDown, true);\n    this._cellInteractionOutsideCleanup = () => {\n      this._document.removeEventListener('pointerdown', onPointerDown, true);\n    };\n  }\n\n  private _hasCellInteractionState(): boolean {\n    return (\n      !!this.activeCell() ||\n      !!this.cellSelectionAnchor() ||\n      !!this.cellSelectionFocus() ||\n      !!this.activeContentEditCell()\n    );\n  }\n\n  private _isInsideCellInteractionBoundary(target: EventTarget | null): boolean {\n    if (!(target instanceof Element)) {\n      return false;\n    }\n\n    if (target.closest('.cdk-overlay-container, .cdk-overlay-pane, .z-table-cell-menu, .z-table-content-row-menu')) {\n      return true;\n    }\n\n    const tbodyContainer = this.tbodyContainer()?.nativeElement;\n    if (tbodyContainer?.contains(target)) {\n      return true;\n    }\n\n    const tbodyWrapper = this.tbodyWrapper()?.nativeElement;\n    if (tbodyWrapper?.contains(target)) {\n      return true;\n    }\n\n    return false;\n  }\n\n  private _clearCellInteractionState(): void {\n    this._cellDragCleanup?.();\n    this.activeCell.set(null);\n    this.cellSelectionAnchor.set(null);\n    this.cellSelectionFocus.set(null);\n    this.activeContentEditCell.set(null);\n    this.cellMenuControl()?.closeImmediate();\n    this.clearCellMenu();\n    this.contentRowMenuControl()?.closeImmediate();\n    this.clearContentRowMenu();\n  }\n\n  private _getCellSelectionId(rowId: string, columnId: string): string {\n    return `${rowId}::${columnId}`;\n  }\n\n  private _getSelectedCellRange(): { rowIds: string[]; columnIds: string[] } | null {\n    const anchor = this.cellSelectionAnchor();\n    const focus = this.cellSelectionFocus();\n    if (!anchor || !focus) {\n      return null;\n    }\n\n    // Use VISUAL row order (pinned-top + center + pinned-bottom), not the flat row model —\n    // otherwise a range spanning a pin boundary computes wrong indices and drops pinned cells.\n    const rows = this.renderedBodyRows();\n    const rowIds = rows.map(row => row.id);\n    const columnIds = this._getSelectableColumnIds();\n    const anchorRowIndex = rowIds.indexOf(anchor.rowId);\n    const focusRowIndex = rowIds.indexOf(focus.rowId);\n    const anchorColumnIndex = columnIds.indexOf(anchor.columnId);\n    const focusColumnIndex = columnIds.indexOf(focus.columnId);\n\n    if (anchorRowIndex < 0 || focusRowIndex < 0 || anchorColumnIndex < 0 || focusColumnIndex < 0) {\n      return null;\n    }\n\n    const rowStart = Math.min(anchorRowIndex, focusRowIndex);\n    const rowEnd = Math.max(anchorRowIndex, focusRowIndex);\n    const columnStart = Math.min(anchorColumnIndex, focusColumnIndex);\n    const columnEnd = Math.max(anchorColumnIndex, focusColumnIndex);\n\n    return {\n      rowIds: rowIds.slice(rowStart, rowEnd + 1),\n      columnIds: columnIds.slice(columnStart, columnEnd + 1),\n    };\n  }\n\n  private _getSelectedCellVisualRects(range: {\n    rowIds: string[];\n    columnIds: string[];\n  }): ZTableSelectedCellVisualRect[] {\n    // VISUAL order so rect row indices line up with the on-screen layout across pin boundaries.\n    const rows = this.renderedBodyRows();\n    const selectableColumnIds = this._getSelectableColumnIds();\n    const rangeRowStart = rows.findIndex(row => row.id === range.rowIds[0]);\n    const rangeRowEnd = rows.findIndex(row => row.id === range.rowIds[range.rowIds.length - 1]);\n    const rangeColumnStart = selectableColumnIds.indexOf(range.columnIds[0]);\n    const rangeColumnEnd = selectableColumnIds.indexOf(range.columnIds[range.columnIds.length - 1]);\n\n    if (rangeRowStart < 0 || rangeRowEnd < 0 || rangeColumnStart < 0 || rangeColumnEnd < 0) {\n      return [];\n    }\n\n    const rects: ZTableSelectedCellVisualRect[] = [];\n    for (let rowIndex = 0; rowIndex < rows.length; rowIndex++) {\n      const row = rows[rowIndex];\n      const visibleCells = row.getVisibleCells();\n\n      for (const cell of visibleCells) {\n        if (!this._isSelectableCell(row, cell.column.id)) {\n          continue;\n        }\n\n        const rect = this._getRenderedCellVisualRect(cell, rowIndex, rows, visibleCells, selectableColumnIds);\n        if (!rect) {\n          continue;\n        }\n\n        const selectedRowStart = Math.max(rect.rowStart, rangeRowStart);\n        const selectedRowEnd = Math.min(rect.rowEnd, rangeRowEnd);\n        const selectedColumnStart = Math.max(rect.columnStart, rangeColumnStart);\n        const selectedColumnEnd = Math.min(rect.columnEnd, rangeColumnEnd);\n        if (selectedRowStart > selectedRowEnd || selectedColumnStart > selectedColumnEnd) {\n          continue;\n        }\n\n        rects.push({\n          ...rect,\n          selectedRowStart,\n          selectedRowEnd,\n          selectedColumnStart,\n          selectedColumnEnd,\n        });\n      }\n    }\n\n    return rects;\n  }\n\n  private _getRenderedCellVisualRect(\n    cell: Cell<T, unknown>,\n    rowIndex: number,\n    rows: Row<T>[],\n    visibleCells: Cell<T, unknown>[],\n    selectableColumnIds: string[]\n  ): ZTableSelectedCellVisualRect | null {\n    const columnConfig = this._findColumnConfig(cell.column.id);\n    if (!shouldCellRenderUtil(cell, columnConfig, rows, rowIndex)) {\n      return null;\n    }\n\n    if (!shouldBodyCellRenderColSpan(cell, visibleCells, this.zConfig().columns)) {\n      return null;\n    }\n\n    const columnIndex = selectableColumnIds.indexOf(cell.column.id);\n    if (columnIndex < 0) {\n      return null;\n    }\n\n    const rowSpan = calculateCellRowSpan(cell, columnConfig, rows, rowIndex) ?? 1;\n    const colSpan = calculateCellColSpan(cell, columnConfig) ?? 1;\n    return {\n      id: this._getCellSelectionId(cell.row.id, cell.column.id),\n      rowStart: rowIndex,\n      rowEnd: Math.min(rows.length - 1, rowIndex + rowSpan - 1),\n      columnStart: columnIndex,\n      columnEnd: Math.min(selectableColumnIds.length - 1, columnIndex + colSpan - 1),\n      selectedRowStart: rowIndex,\n      selectedRowEnd: Math.min(rows.length - 1, rowIndex + rowSpan - 1),\n      selectedColumnStart: columnIndex,\n      selectedColumnEnd: Math.min(selectableColumnIds.length - 1, columnIndex + colSpan - 1),\n    };\n  }\n\n  private _hasOutsideVisualNeighbor(\n    rect: ZTableSelectedCellVisualRect,\n    selectedSlots: Set<string>,\n    side: ZTableSelectedCellVisualSide\n  ): boolean {\n    if (side === 'top' || side === 'bottom') {\n      const rowIndex = side === 'top' ? rect.selectedRowStart - 1 : rect.selectedRowEnd + 1;\n      for (let columnIndex = rect.selectedColumnStart; columnIndex <= rect.selectedColumnEnd; columnIndex++) {\n        if (!selectedSlots.has(this._getCellVisualSlotId(rowIndex, columnIndex))) {\n          return true;\n        }\n      }\n      return false;\n    }\n\n    const columnIndex = side === 'left' ? rect.selectedColumnStart - 1 : rect.selectedColumnEnd + 1;\n    for (let rowIndex = rect.selectedRowStart; rowIndex <= rect.selectedRowEnd; rowIndex++) {\n      if (!selectedSlots.has(this._getCellVisualSlotId(rowIndex, columnIndex))) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  private _getCellVisualSlotId(rowIndex: number, columnIndex: number): string {\n    return `${rowIndex}::${columnIndex}`;\n  }\n\n  private _buildSelectedCellsText(includeHeaders: boolean): string {\n    const range = this._getSelectedCellRange();\n    if (!range) {\n      return '';\n    }\n\n    const rowById = new Map((this.table.getRowModel().rows as Row<T>[]).map(row => [row.id, row]));\n    const lines: string[] = [];\n    if (includeHeaders && this.cellSelectionOptions().copyWithHeaders) {\n      lines.push(range.columnIds.map(columnId => this._getColumnCopyHeader(columnId)).join('\\t'));\n    }\n\n    for (const rowId of range.rowIds) {\n      const row = rowById.get(rowId);\n      if (!row) {\n        continue;\n      }\n\n      lines.push(\n        range.columnIds\n          .map(columnId => {\n            if (!this._isSelectableCell(row, columnId)) {\n              return '';\n            }\n\n            return (\n              this._getRenderedCellClipboardValue(row.id, columnId) ??\n              this._formatCellClipboardValue(row.getValue(columnId))\n            );\n          })\n          .join('\\t')\n      );\n    }\n\n    return lines.join('\\n');\n  }\n\n  private _getSelectableColumnIds(): string[] {\n    return this.orderedLeafColumns()\n      .filter(column => column.getIsVisible() && this._isSelectableCellColumn(column.id))\n      .map(column => column.id);\n  }\n\n  private _isSelectableCellColumn(columnId: string): boolean {\n    if (this.cellSelectionOptions().disabledColumnIds?.includes(columnId)) {\n      return false;\n    }\n\n    if (isZTableColumnTypeById(columnId, this.zConfig().columns, 'select')) {\n      return false;\n    }\n\n    if (isZTableColumnTypeById(columnId, this.zConfig().columns, 'expand')) {\n      return false;\n    }\n\n    if (isZTableColumnTypeById(columnId, this.zConfig().columns, 'rowDrag')) {\n      return false;\n    }\n\n    if (columnId === 'actionRowPin' || columnId === 'actions' || columnId === this.actionColumnInfo()?.columnId) {\n      return false;\n    }\n\n    return true;\n  }\n\n  private _isSelectableCell(row: Row<T>, columnId: string): boolean {\n    if (!this._isSelectableCellColumn(columnId)) {\n      return false;\n    }\n\n    const { isCellDisabled } = this.cellSelectionOptions();\n    if (!isCellDisabled) {\n      return true;\n    }\n\n    return !isCellDisabled({\n      row: row.original,\n      rowId: row.id,\n      rowIndex: row.index,\n      columnId,\n      column: this._findColumnConfig(columnId),\n    });\n  }\n\n  private _isIgnoredCellSelectionTarget(target: EventTarget | null): boolean {\n    if (!(target instanceof HTMLElement)) {\n      return false;\n    }\n\n    return !!target.closest(\n      'button, input, textarea, select, [contenteditable=\"true\"], z-input, z-select, z-calendar, z-checkbox, z-switch'\n    );\n  }\n\n  private _isCellSelectionDragTarget(target: EventTarget | null): boolean {\n    if (this._document.body.classList.contains('z-table-pointer-dragging')) {\n      return true;\n    }\n\n    if (!(target instanceof HTMLElement)) {\n      return false;\n    }\n\n    return !!target.closest('[data-z-table-drag-handle]');\n  }\n\n  private _formatCellClipboardValue(value: unknown): string {\n    if (value === null || value === undefined) {\n      return '';\n    }\n\n    return String(value).replace(/\\r?\\n/g, ' ');\n  }\n\n  private _getRenderedCellClipboardValue(rowId: string, columnId: string): string | null {\n    const cell = this._getRenderedBodyCell(rowId, columnId);\n    if (!cell) {\n      return null;\n    }\n\n    const renderedText = cell.innerText || cell.textContent || '';\n    return this._formatCellClipboardValue(renderedText.replace(/\\u00a0/g, ' ').trim()).replace(/[ \\t]+/g, ' ');\n  }\n\n  private _getRenderedBodyCell(rowId: string, columnId: string): HTMLElement | null {\n    const rows = Array.from(this._host.nativeElement.querySelectorAll<HTMLTableRowElement>('tbody tr[data-row-id]'));\n    for (const row of rows) {\n      if (row.getAttribute('data-row-id') !== rowId) {\n        continue;\n      }\n\n      const cells = Array.from(row.querySelectorAll('td[data-column-id]'));\n      for (const cell of cells) {\n        if (cell.getAttribute('data-column-id') === columnId) {\n          return cell instanceof HTMLElement ? cell : null;\n        }\n      }\n\n      return null;\n    }\n\n    return null;\n  }\n\n  private _getColumnCopyHeader(columnId: string): string {\n    const columnConfig = this._findColumnConfig(columnId);\n    const header = columnConfig?.header;\n    if (typeof header === 'string') {\n      return this._zTranslate.instant(header);\n    }\n\n    if (header && typeof header === 'object' && 'content' in header && typeof header.content === 'string') {\n      return this._zTranslate.instant(header.content);\n    }\n\n    return columnId;\n  }\n\n  private _getColumnDisplayHeader(columnId: string): string {\n    const columnConfig = this._findColumnConfig(columnId);\n    if (!columnConfig) {\n      return columnId;\n    }\n\n    const headerConfig = getHeaderConfig(columnConfig);\n    if (typeof headerConfig.content === 'string') {\n      return stripIconSyntax(this._zTranslate.instant(headerConfig.content));\n    }\n\n    return columnId;\n  }\n\n  private _formatFilterChipValue(columnId: string, value: unknown): string {\n    if (value === null || value === undefined || value === '') {\n      return '';\n    }\n\n    const columnConfig = this._findColumnConfig(columnId);\n    const filterConfig = typeof columnConfig?.filter === 'object' ? columnConfig.filter : undefined;\n    const advancedType = filterConfig?.advancedType ?? filterConfig?.filterType ?? filterConfig?.type;\n\n    if (Array.isArray(value)) {\n      const hasStructuredFilters = value.some(item => item && typeof item === 'object' && 'operator' in item);\n      if (hasStructuredFilters) {\n        return value\n          .filter((item): item is { joinWithPrev?: string; operator: string; value?: unknown } =>\n            this._isFilterChipCondition(item)\n          )\n          .map((condition, index) => this._formatFilterConditionChip(condition, index))\n          .join(' ');\n      }\n\n      if (advancedType === 'range') {\n        return this._formatRangeChipValue(value);\n      }\n\n      return value.map(item => this._formatFilterOptionValue(columnId, item)).join(', ');\n    }\n\n    if (this._isFilterChipCondition(value)) {\n      return this._formatFilterConditionChip(value, 0);\n    }\n\n    if (advancedType === 'date') {\n      return this._formatDateChipValue(value, 'mediumDate');\n    }\n\n    if (advancedType === 'time') {\n      return this._formatDateChipValue(value, 'shortTime');\n    }\n\n    if (advancedType === 'date-range') {\n      return this._formatDateRangeChipValue(value);\n    }\n\n    return this._formatFilterOptionValue(columnId, value);\n  }\n\n  private _formatFilterConditionChip(\n    condition: { joinWithPrev?: string; operator: string; value?: unknown },\n    index: number\n  ): string {\n    const operator = [...Z_TABLE_TEXT_OPERATORS, ...Z_TABLE_NUMBER_OPERATORS].find(\n      item => item.value === condition.operator\n    );\n    const operatorLabel = operator ? this._zTranslate.instant(operator.labelKey) : condition.operator;\n    if (condition.operator === 'empty' || condition.operator === 'notEmpty') {\n      return index === 0 ? operatorLabel : `${this._formatFilterJoinLabel(condition.joinWithPrev)} ${operatorLabel}`;\n    }\n\n    const value = this._formatRawFilterChipValue(condition.value);\n    const text = `${operatorLabel} ${value}`.trim();\n    return index === 0 ? text : `${this._formatFilterJoinLabel(condition.joinWithPrev)} ${text}`;\n  }\n\n  private _formatFilterJoinLabel(value: string | undefined): string {\n    if (value === 'or') {\n      return this._zTranslate.instant('i18n_z_ui_upload_or').toUpperCase();\n    }\n\n    return this._zTranslate.instant('i18n_z_ui_table_filter_and');\n  }\n\n  private _formatFilterOptionValue(columnId: string, value: unknown): string {\n    const columnConfig = this._findColumnConfig(columnId);\n    const filterConfig = typeof columnConfig?.filter === 'object' ? columnConfig.filter : undefined;\n    const option = filterConfig?.options?.find(item => String(item.value) === String(value));\n    if (option?.label) {\n      return this._zTranslate.instant(String(option.label));\n    }\n\n    return this._formatRawFilterChipValue(value);\n  }\n\n  private _formatRangeChipValue(value: unknown[]): string {\n    const min =\n      value[0] === null || value[0] === undefined || value[0] === '' ? null : this._formatRawFilterChipValue(value[0]);\n    const max =\n      value[1] === null || value[1] === undefined || value[1] === '' ? null : this._formatRawFilterChipValue(value[1]);\n\n    if (min && max) {\n      return `${min} - ${max}`;\n    }\n\n    if (min) {\n      return `${this._zTranslate.instant('i18n_z_ui_table_filter_min')}: ${min}`;\n    }\n\n    if (max) {\n      return `${this._zTranslate.instant('i18n_z_ui_table_filter_max')}: ${max}`;\n    }\n\n    return '';\n  }\n\n  private _formatDateRangeChipValue(value: unknown): string {\n    if (!value || typeof value !== 'object') {\n      return this._formatRawFilterChipValue(value);\n    }\n\n    const { start, end } = value as { end?: unknown; start?: unknown };\n    const startText = start ? this._formatDateChipValue(start, 'mediumDate') : '';\n    const endText = end ? this._formatDateChipValue(end, 'mediumDate') : '';\n    if (startText && endText) {\n      return `${startText} - ${endText}`;\n    }\n\n    return startText || endText;\n  }\n\n  private _formatDateChipValue(value: unknown, format: string): string {\n    const date = value instanceof Date ? value : new Date(String(value));\n    if (Number.isNaN(date.getTime())) {\n      return this._formatRawFilterChipValue(value);\n    }\n\n    const locale = this._zTranslate.getLocale();\n    const options: Intl.DateTimeFormatOptions =\n      format === 'shortTime'\n        ? { hour: '2-digit', minute: '2-digit' }\n        : { day: '2-digit', month: 'short', year: 'numeric' };\n\n    try {\n      return new Intl.DateTimeFormat(locale, options).format(date);\n    } catch {\n      return new Intl.DateTimeFormat('en-US', options).format(date);\n    }\n  }\n\n  private _formatRawFilterChipValue(value: unknown): string {\n    if (value === null || value === undefined) {\n      return '';\n    }\n\n    if (typeof value === 'object') {\n      return JSON.stringify(value);\n    }\n\n    return String(value);\n  }\n\n  private _isFilterChipCondition(\n    value: unknown\n  ): value is { joinWithPrev?: string; operator: string; value?: unknown } {\n    return (\n      !!value &&\n      typeof value === 'object' &&\n      'operator' in value &&\n      typeof (value as { operator?: unknown }).operator === 'string'\n    );\n  }\n\n  private _emitSearchChange(searchValue: string): void {\n    this._runAsyncStateUpdate(() => {\n      this.zChange.emit({\n        type: 'search' as const,\n        data: {\n          search: searchValue,\n          filters: this.columnFilters(),\n          sorting: this.sorting(),\n          pagination: this.pagination(),\n        },\n      });\n\n      this._checkVerticalScroll();\n      this._checkHorizontalScroll();\n    });\n  }\n\n  private _collapseFilterHeaderWhenNeeded(): void {\n    const visibleCount = Z_TABLE_FILTER_HEADER_VISIBLE_COUNT + 1;\n    if (this.appliedFilterChips().length <= visibleCount) {\n      this.isFilterHeaderExpanded.set(false);\n    }\n  }\n\n  private _bumpFilterResetVersion(): void {\n    this.filterResetVersion.update(value => value + 1);\n  }\n\n  private async _writeClipboardText(text: string): Promise<void> {\n    if (navigator.clipboard?.writeText) {\n      await navigator.clipboard.writeText(text);\n      return;\n    }\n\n    const { activeElement } = this._document;\n    const textarea = this._document.createElement('textarea');\n    textarea.value = text;\n    textarea.style.position = 'fixed';\n    textarea.style.left = '-9999px';\n    this._document.body.append(textarea);\n    textarea.select();\n    this._document.execCommand('copy');\n    textarea.remove();\n    if (activeElement instanceof HTMLElement) {\n      activeElement.focus();\n    }\n  }\n\n  private _getContentEditTriggerTarget(target: EventTarget | null): { rowId: string; columnId: string } | null {\n    if (!(target instanceof HTMLElement)) {\n      return null;\n    }\n\n    const trigger = target.closest<HTMLElement>('[data-z-table-edit-row][data-z-table-edit-column]');\n    const rowId = trigger?.dataset['zTableEditRow'];\n    const columnId = trigger?.dataset['zTableEditColumn'];\n    if (!rowId || !columnId) {\n      return null;\n    }\n\n    return { rowId, columnId };\n  }\n\n  private _clearContentEditCell(rowId: string, columnId: string): void {\n    const row = this.table.getRowModel().rows.find(item => item.id === rowId);\n    if (!row) {\n      return;\n    }\n\n    const oldValue = row.getValue(columnId);\n    if (oldValue === '') {\n      return;\n    }\n\n    this.onCellEdit({\n      row: row.original,\n      rowId: row.id,\n      rowIndex: row.index,\n      columnId,\n      oldValue,\n      newValue: '',\n    });\n  }\n\n  private _listenContentRowMenuOutside(): void {\n    this._contentRowMenuOutsideTimer = setTimeout(() => {\n      const onPointerDown = (event: PointerEvent) => {\n        const { target } = event;\n        if (!(target instanceof Element)) {\n          this.contentRowMenuControl()?.closeImmediate();\n          return;\n        }\n\n        if (target.closest('.z-table-content-row-menu')) {\n          return;\n        }\n\n        this.contentRowMenuControl()?.closeImmediate();\n      };\n\n      this._document.addEventListener('pointerdown', onPointerDown, true);\n      this._contentRowMenuOutsideCleanup = () => {\n        this._document.removeEventListener('pointerdown', onPointerDown, true);\n      };\n      this._contentRowMenuOutsideTimer = null;\n    });\n  }\n\n  public onCellClick(row: Row<T>, columnId: string, value: unknown): void {\n    this.zChange.emit({\n      type: 'cellClick',\n      data: {\n        row: row.original,\n        rowId: row.id,\n        columnId,\n        value,\n      },\n    });\n  }\n\n  public onCellEdit(event: ZTableEditCellChangeEvent<T>): void {\n    this.zChange.emit({\n      type: 'cellEdit',\n      data: {\n        row: event.row,\n        rowId: event.rowId,\n        rowIndex: event.rowIndex,\n        columnId: event.columnId,\n        oldValue: event.oldValue,\n        newValue: event.newValue,\n      },\n    });\n  }\n\n  public onContentEditStart(event: MouseEvent, rowId: string, columnId: string): void {\n    event.preventDefault();\n    this.activeContentEditCell.set({ rowId, columnId });\n  }\n\n  public onContentEditKeydown(event: KeyboardEvent, rowId: string, columnId: string): void {\n    if (event.key === 'Enter') {\n      event.preventDefault();\n      (event.currentTarget as HTMLButtonElement).click();\n      return;\n    }\n\n    const direction = this._getContentEditDirection(event.key);\n    if (!direction) {\n      return;\n    }\n\n    const target = this._findContentEditTarget(rowId, columnId, direction);\n    if (!target) {\n      return;\n    }\n\n    event.preventDefault();\n    target.focus();\n  }\n\n  public onContentEditCommit(newValue: unknown, row: Row<T>, columnId: string, oldValue: unknown): void {\n    const previousValue = oldValue === null || oldValue === undefined ? '' : String(oldValue);\n    const activeCell = this.activeContentEditCell();\n    const shouldCloseActiveCell = activeCell?.rowId === row.id && activeCell.columnId === columnId;\n    if (shouldCloseActiveCell) {\n      this.activeContentEditCell.set(null);\n      this._restoreContentEditFocus(row.id, columnId);\n    }\n\n    if (String(newValue) === previousValue) {\n      return;\n    }\n\n    this.onCellEdit({\n      row: row.original,\n      rowId: row.id,\n      rowIndex: row.index,\n      columnId,\n      oldValue,\n      newValue,\n    });\n  }\n\n  public onContentEditCancel(): void {\n    const activeCell = this.activeContentEditCell();\n    if (!activeCell) {\n      return;\n    }\n\n    this.activeContentEditCell.set(null);\n    this._restoreContentEditFocus(activeCell.rowId, activeCell.columnId);\n  }\n\n  private _getContentEditDirection(key: string): 'left' | 'right' | 'up' | 'down' | null {\n    switch (key) {\n      case 'ArrowLeft':\n        return 'left';\n      case 'ArrowRight':\n        return 'right';\n      case 'ArrowUp':\n        return 'up';\n      case 'ArrowDown':\n        return 'down';\n      default:\n        return null;\n    }\n  }\n\n  private _findContentEditTarget(\n    rowId: string,\n    columnId: string,\n    direction: 'left' | 'right' | 'up' | 'down'\n  ): HTMLButtonElement | null {\n    const triggers = Array.from(\n      this._host.nativeElement.querySelectorAll<HTMLButtonElement>('.z-table-content-trigger')\n    );\n    const currentIndex = triggers.findIndex(\n      trigger => trigger.dataset['zTableEditRow'] === rowId && trigger.dataset['zTableEditColumn'] === columnId\n    );\n    if (currentIndex < 0) {\n      return null;\n    }\n\n    if (direction === 'left') {\n      return this._findHorizontalContentEditTarget(triggers, currentIndex, rowId, -1);\n    }\n    if (direction === 'right') {\n      return this._findHorizontalContentEditTarget(triggers, currentIndex, rowId, 1);\n    }\n\n    const rowIds = [...new Set(triggers.map(trigger => trigger.dataset['zTableEditRow'] ?? ''))];\n    const currentRowIndex = rowIds.indexOf(rowId);\n    const targetRowId = rowIds[currentRowIndex + (direction === 'up' ? -1 : 1)];\n    if (!targetRowId) {\n      return null;\n    }\n\n    return (\n      triggers.find(\n        trigger => trigger.dataset['zTableEditRow'] === targetRowId && trigger.dataset['zTableEditColumn'] === columnId\n      ) ?? null\n    );\n  }\n\n  private _findHorizontalContentEditTarget(\n    triggers: HTMLButtonElement[],\n    currentIndex: number,\n    rowId: string,\n    offset: -1 | 1\n  ): HTMLButtonElement | null {\n    const target = triggers[currentIndex + offset];\n    if (target?.dataset['zTableEditRow'] !== rowId) {\n      return null;\n    }\n    return target;\n  }\n\n  private _restoreContentEditFocus(rowId: string, columnId: string): void {\n    setTimeout(() => {\n      if (this.activeContentEditCell()) {\n        return;\n      }\n\n      const currentActiveElement = document.activeElement;\n      if (currentActiveElement instanceof HTMLElement && currentActiveElement.closest('z-table-content-editor')) {\n        return;\n      }\n\n      const triggers = this._host.nativeElement.querySelectorAll<HTMLButtonElement>('.z-table-content-trigger');\n      const target = Array.from(triggers).find(\n        trigger => trigger.dataset['zTableEditRow'] === rowId && trigger.dataset['zTableEditColumn'] === columnId\n      );\n      target?.focus();\n    });\n  }\n\n  // ─── Settings Drawer ─────────────────────────────────────────────────────\n\n  public openSettingsDrawer(): void {\n    if (this.columnOrder().length === 0) {\n      this.columnOrder.set(this.table.getAllLeafColumns().map(col => col.id));\n    }\n\n    this.pendingVisibleColumns.set(\n      this.table\n        .getAllLeafColumns()\n        .filter(col => col.getIsVisible())\n        .map(col => col.id)\n    );\n\n    this.pendingColumnOrder.set(this.columnOrder());\n    this.pendingShowHeaderFooterShadow.set(this.showHeaderFooterShadow());\n    this.showSettingsDrawer.set(true);\n  }\n\n  public onPendingColumnDrop(event: CdkDragDrop<string[]>): void {\n    const fullOrder = this.columnOrder();\n    const unpinnedColumns = fullOrder.filter(columnId => {\n      if (this._isFixedLeadingColumnId(columnId)) {\n        return false;\n      }\n\n      return !this.table.getColumn(columnId)?.getIsPinned();\n    });\n    const groupingColumnIds = this.activeGroupingColumnIds();\n    const groupingColumnIndexes = new Map(\n      groupingColumnIds.map(columnId => [columnId, unpinnedColumns.indexOf(columnId)] as const)\n    );\n    const draggedColumnId = unpinnedColumns[event.previousIndex];\n    if (draggedColumnId && groupingColumnIds.includes(draggedColumnId)) {\n      return;\n    }\n\n    moveItemInArray(unpinnedColumns, event.previousIndex, event.currentIndex);\n    for (const groupingColumnId of groupingColumnIds) {\n      const groupingColumnIndex = groupingColumnIndexes.get(groupingColumnId) ?? -1;\n      const currentGroupingIndex = unpinnedColumns.indexOf(groupingColumnId);\n      if (groupingColumnIndex >= 0 && currentGroupingIndex >= 0 && currentGroupingIndex !== groupingColumnIndex) {\n        unpinnedColumns.splice(currentGroupingIndex, 1);\n        unpinnedColumns.splice(groupingColumnIndex, 0, groupingColumnId);\n      }\n    }\n\n    const fixedLeadingColumns = fullOrder.filter(columnId => this._isFixedLeadingColumnId(columnId));\n    const pinnedLeft = fullOrder.filter(columnId => {\n      const isFixedLeading = this._isFixedLeadingColumnId(columnId);\n      return !isFixedLeading && this.table.getColumn(columnId)?.getIsPinned() === 'left';\n    });\n    const pinnedRight = fullOrder.filter(columnId => this.table.getColumn(columnId)?.getIsPinned() === 'right');\n\n    this.columnOrder.set([...fixedLeadingColumns, ...pinnedLeft, ...unpinnedColumns, ...pinnedRight]);\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    if (this.isGroupingColumn(columnId)) {\n      return;\n    }\n\n    const pendingVisibleColumns = new Set(this.pendingVisibleColumns());\n    const isVisible = pendingVisibleColumns.has(columnId);\n\n    if (isVisible && this.pendingColumnVisibilityDisabledMap()[columnId]) {\n      return;\n    }\n\n    if (isVisible) {\n      pendingVisibleColumns.delete(columnId);\n    }\n    if (!isVisible) {\n      pendingVisibleColumns.add(columnId);\n    }\n    this.pendingVisibleColumns.set([...pendingVisibleColumns]);\n\n    if (this._visibilityDebounceTimeout) {\n      clearTimeout(this._visibilityDebounceTimeout);\n    }\n\n    this._visibilityDebounceTimeout = setTimeout(() => {\n      const visibleColumnIds = new Set(this.pendingVisibleColumns());\n      const nextVisibility = { ...this.columnVisibility() };\n      for (const column of this.table.getAllLeafColumns()) {\n        nextVisibility[column.id] = visibleColumnIds.has(column.id);\n      }\n\n      this.columnVisibility.set(nextVisibility);\n      this._visibilityDebounceTimeout = null;\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    if (newPosition && !this.pinAvailabilityMap()[columnId]?.[newPosition]) {\n      return;\n    }\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    if (position && !this.pinAvailabilityMap()[columnId]?.[position]) {\n      return;\n    }\n\n    column.pin(position);\n    if (position) {\n      const columnConfig = this._findColumnConfig(columnId);\n      if (columnConfig) {\n        const colSpan = getHeaderColSpan(columnConfig);\n        if (colSpan && colSpan > 1) {\n          const allColumns = this.table.getAllLeafColumns();\n          const currentIdx = allColumns.findIndex(c => c.id === columnId);\n          if (currentIdx !== -1) {\n            for (let i = 1; i < colSpan && currentIdx + i < allColumns.length; i++) {\n              const coveredColumn = allColumns[currentIdx + i];\n              coveredColumn.pin(position);\n            }\n          }\n        }\n      }\n    }\n\n    this._columnPinVersion.update(v => v + 1);\n    this._checkHorizontalScroll();\n  }\n\n  private _canPinWithinViewport(\n    column: Column<T, unknown>,\n    position: 'left' | 'right',\n    viewportWidth: number\n  ): boolean {\n    if (viewportWidth <= 0) {\n      return true;\n    }\n\n    const nextLeft = new Set(this.columnPinning().left ?? []);\n    const nextRight = new Set(this.columnPinning().right ?? []);\n    const leafColumns = column.getLeafColumns().filter(leaf => leaf.getIsVisible());\n    const candidateColumns = leafColumns.length > 0 ? leafColumns : [column];\n\n    for (const candidate of candidateColumns) {\n      nextLeft.delete(candidate.id);\n      nextRight.delete(candidate.id);\n      (position === 'left' ? nextLeft : nextRight).add(candidate.id);\n    }\n\n    const pinnedIds = new Set([...nextLeft, ...nextRight]);\n    return this._getPinnedWidth(pinnedIds) < viewportWidth;\n  }\n\n  private _getPinnedWidth(pinnedIds: Set<string>): number {\n    return [...pinnedIds].reduce((total, columnId) => {\n      const pinnedColumn = this.table.getColumn(columnId);\n      if (!pinnedColumn?.getIsVisible()) {\n        return total;\n      }\n\n      return total + pinnedColumn.getSize();\n    }, 0);\n  }\n\n  public toggleColumnVisibility(columnId: string): void {\n    const column = this.table.getColumn(columnId);\n    if (\n      !column ||\n      !column.getCanHide() ||\n      this._isColumnHiddenFromVisibilityMenu(columnId) ||\n      this.isGroupingColumn(columnId)\n    ) {\n      return;\n    }\n\n    const currentVisibility = this.columnVisibility();\n    const isVisible = currentVisibility[columnId] !== false;\n    const allHideableIds = this.hideableColumns().map(col => col.id);\n    const visibleCount = allHideableIds.filter(id => currentVisibility[id] !== false).length;\n\n    if (isVisible && visibleCount <= 2) {\n      return;\n    }\n\n    this.columnVisibility.set({ ...currentVisibility, [columnId]: !isVisible });\n  }\n\n  public refreshColumnPopoverPositions(...popovers: ZPopoverDirective[]): void {\n    queueMicrotask(() => {\n      requestAnimationFrame(() => {\n        for (const popover of popovers) {\n          popover.updatePosition();\n        }\n      });\n    });\n  }\n\n  public setActiveColumnVisibilityPopover(popover: ZPopoverDirective): void {\n    this._activeColumnVisibilityPopover.set(popover);\n  }\n\n  public clearActiveColumnVisibilityPopover(popover: ZPopoverDirective): void {\n    if (this._activeColumnVisibilityPopover() !== popover) {\n      return;\n    }\n\n    this._activeColumnVisibilityPopover.set(null);\n  }\n\n  public hideActiveColumnVisibilityPopover(): void {\n    this._activeColumnVisibilityPopover()?.hide();\n  }\n\n  public hideColumnPopoversOnOutsideClick(optionsPopover: ZPopoverDirective): void {\n    this._activeColumnVisibilityPopover()?.hideImmediate();\n    optionsPopover.hideImmediate();\n  }\n\n  public openSettingsDrawerFromColumnMenu(...popovers: ZPopoverDirective[]): void {\n    for (const popover of popovers) {\n      popover.hideImmediate();\n    }\n\n    this.openSettingsDrawer();\n  }\n\n  public canGroupColumn(columnId: string): boolean {\n    if (!this.canUseGrouping()) {\n      return false;\n    }\n\n    const config = this.groupingConfig();\n    if (config.allowHeaderMenu === false) {\n      return false;\n    }\n\n    if (this._isSpecialColumnId(columnId)) {\n      return false;\n    }\n\n    const columnConfig = this._findColumnConfig(columnId);\n    if (columnConfig?.columns?.length || columnConfig?.enableGrouping === false) {\n      return false;\n    }\n\n    if (config.columns?.length) {\n      return config.columns.includes(columnId);\n    }\n\n    return !!this.table.getColumn(columnId);\n  }\n\n  public isGroupingColumn(columnId: string): boolean {\n    return this.groupingColumnMap()[columnId] === true;\n  }\n\n  public groupByColumn(columnId: string): void {\n    if (!this.canGroupColumn(columnId) || this.isGroupingColumn(columnId)) {\n      return;\n    }\n\n    const nextGroupingColumnIds = this.isServerGrouping() ? [columnId] : [...this.groupingColumnIds(), columnId];\n    const columnConfig = this._findColumnConfig(columnId);\n    if (columnConfig?.pinned) {\n      const currentPinning = this.columnPinning();\n      this._setColumnPinning({\n        left: (currentPinning.left ?? []).filter(id => id !== columnId),\n        right: (currentPinning.right ?? []).filter(id => id !== columnId),\n      });\n    }\n    this._moveGroupingColumnsToLeadingDataPosition(nextGroupingColumnIds);\n    this.groupingColumnIds.set(nextGroupingColumnIds);\n    this.collapsedGroupIds.set(new Set());\n    this.zChange.emit({ type: 'grouping', data: { grouping: nextGroupingColumnIds } });\n  }\n\n  public clearGrouping(): void {\n    if (this.groupingColumnIds().length === 0) {\n      return;\n    }\n\n    this.groupingColumnIds.set([]);\n    this.collapsedGroupIds.set(new Set());\n    this.zChange.emit({ type: 'grouping', data: { grouping: [] } });\n  }\n\n  public removeGroupingColumn(columnId: string): void {\n    const currentGroupingColumnIds = this.groupingColumnIds();\n    const nextGroupingColumnIds = currentGroupingColumnIds.filter(id => id !== columnId);\n    if (nextGroupingColumnIds.length === currentGroupingColumnIds.length) {\n      return;\n    }\n\n    this._moveGroupingColumnsToLeadingDataPosition(nextGroupingColumnIds);\n    this.groupingColumnIds.set(nextGroupingColumnIds);\n    this.collapsedGroupIds.set(new Set());\n    this.zChange.emit({ type: 'grouping', data: { grouping: nextGroupingColumnIds } });\n  }\n\n  public toggleGroupRow(groupId: string): void {\n    const next = new Set(this.collapsedGroupIds());\n    const wasToggled = next.has(groupId);\n    if (wasToggled) {\n      next.delete(groupId);\n    } else {\n      next.add(groupId);\n    }\n    this.collapsedGroupIds.set(next);\n\n    if (!this.isServerGrouping()) {\n      return;\n    }\n\n    // Server grouping: báo parent biết group nào vừa expand để fetch child rows (giống filter/sort).\n    // defaultExpanded=true: có trong set = collapsed; defaultExpanded=false: có trong set = expanded.\n    const defaultExpanded = this.groupingConfig().defaultExpanded !== false;\n    const isInSet = !wasToggled;\n    const expanded = defaultExpanded ? !isInSet : isInSet;\n    const columnId = this.activeGroupingColumnId();\n    if (!columnId) {\n      return;\n    }\n\n    const value = this.groupingConfig().serverGroups?.find(\n      group => this._getGroupId(columnId, group.value) === groupId\n    )?.value;\n\n    this.zChange.emit({\n      type: 'groupExpand',\n      data: { groupId, columnId, value, expanded },\n    });\n  }\n\n  public autosizeColumn(columnId: string): void {\n    const width = this._measureColumnContentWidth(columnId);\n    if (!width) {\n      return;\n    }\n\n    this._setMeasuredColumnWidth(columnId, width);\n  }\n\n  public autosizeAllColumns(): void {\n    const nextSizing = { ...this._columnBaseSizing() };\n    let changed = false;\n    for (const column of this.table.getAllLeafColumns()) {\n      if (!column.getIsVisible()) {\n        continue;\n      }\n\n      const width = this._measureColumnContentWidth(column.id);\n      if (!width) {\n        continue;\n      }\n\n      nextSizing[column.id] = width;\n      changed = true;\n    }\n\n    if (!changed) {\n      return;\n    }\n\n    const clampedSizing = this._clampColumnSizing(nextSizing);\n    this._columnBaseSizing.set(clampedSizing);\n    this.columnSizingState.set(clampedSizing);\n    this._checkHorizontalScroll();\n  }\n\n  public resetColumns(): void {\n    const key = this.zKey();\n    if (key) {\n      ZCacheService.delete(this._getConfigCacheKey(key));\n      this._skipNextConfigSave = true;\n    }\n\n    const config = this.zConfig();\n    const nextOrder = this._getDefaultColumnOrder();\n    const nextVisibility = config.initialState?.columnVisibility ?? {};\n    const nextPinning = this._defaultColumnPinning();\n    const initialGroupingColumnIds = this._getInitialGroupingColumnIds(true);\n\n    this.columnOrder.set(nextOrder);\n    this.columnVisibility.set(nextVisibility);\n    this._setColumnPinning(nextPinning);\n    this._columnBaseSizing.set({});\n    this.columnSizingState.set({});\n    this.groupingColumnIds.set(initialGroupingColumnIds);\n    if (initialGroupingColumnIds.length > 0) {\n      this._moveGroupingColumnsToLeadingDataPosition(initialGroupingColumnIds);\n    }\n    const resetOrder = this.columnOrder();\n    this.collapsedGroupIds.set(new Set());\n    this.showHeaderFooterShadow.set(config.showHeaderShadow ?? config.showFooterShadow ?? true);\n    this.showHorizontalBorder.set(config.showHorizontalBorder ?? true);\n    this.showVerticalBorder.set(config.showVerticalBorder ?? true);\n    this.pendingVisibleColumns.set(resetOrder.filter(columnId => nextVisibility[columnId] !== false));\n    this.pendingColumnOrder.set(resetOrder);\n    this._scheduleFitColumnWidths();\n  }\n\n  private _getDefaultColumnOrder(): string[] {\n    const columnIds: string[] = [];\n    const collectLeafColumnIds = (columns: ColumnDef<T>[]): void => {\n      for (const column of columns) {\n        if ('columns' in column && column.columns?.length) {\n          collectLeafColumnIds(column.columns);\n          continue;\n        }\n\n        if (column.id) {\n          columnIds.push(column.id);\n        }\n      }\n    };\n\n    collectLeafColumnIds(this._columns());\n    return columnIds;\n  }\n\n  private _getInitialGroupingColumnIds(includeLegacyColumnsFallback = false): string[] {\n    if (!this.canUseGrouping()) {\n      return [];\n    }\n\n    if (this.isServerGrouping()) {\n      const columnId = this.serverGroupColumnId();\n      return columnId ? [columnId] : [];\n    }\n\n    const config = this.groupingConfig();\n    const configuredColumnIds =\n      config.initialColumns ?? (includeLegacyColumnsFallback ? config.columns?.slice(0, 1) : []);\n    return (configuredColumnIds ?? []).filter(columnId => this.canGroupColumn(columnId));\n  }\n\n  private _isColumnHiddenFromVisibilityMenu(columnId: string): boolean {\n    const actionColumnId = this.actionColumnInfo()?.columnId;\n    return this._isSpecialColumnId(columnId) || columnId === actionColumnId;\n  }\n\n  private _setMeasuredColumnWidth(columnId: string, measuredWidth: number): void {\n    const nextSizing = this._clampColumnSizing({\n      ...this._columnBaseSizing(),\n      [columnId]: measuredWidth,\n    });\n    this._columnBaseSizing.set(nextSizing);\n    this.columnSizingState.set(nextSizing);\n    this._checkHorizontalScroll();\n  }\n\n  private _measureColumnContentWidth(columnId: string): number | null {\n    const host = this._host.nativeElement;\n    const cells = host.querySelectorAll<HTMLElement>(\n      `[id=\"${CSS.escape(columnId)}\"], [data-column-id=\"${CSS.escape(columnId)}\"]`\n    );\n    if (cells.length === 0) {\n      return null;\n    }\n\n    let width = 0;\n    for (let index = 0; index < cells.length; index++) {\n      const cell = cells.item(index);\n      width = Math.max(width, Math.ceil(cell.scrollWidth));\n    }\n\n    if (width <= 0) {\n      return null;\n    }\n\n    return width + 24;\n  }\n\n  private _defaultColumnPinning(): ColumnPinningState {\n    const initialPinning = this.zConfig().initialState?.columnPinning;\n    const left = [...(initialPinning?.left ?? [])];\n    const right = [...(initialPinning?.right ?? [])];\n    const collectPinnedColumns = (columns: ZTableColumnConfig<T>[]): void => {\n      for (const column of columns) {\n        const isPinned = left.includes(column.id) || right.includes(column.id);\n        if (column.pinned === 'left' && !isPinned) {\n          left.push(column.id);\n        }\n        if (column.pinned === 'right' && !isPinned) {\n          right.push(column.id);\n        }\n        if (column.columns) {\n          collectPinnedColumns(column.columns);\n        }\n      }\n    };\n\n    collectPinnedColumns(this.zConfig().columns ?? []);\n    return { left, right };\n  }\n\n  private _setColumnPinning(pinning: ColumnPinningState): void {\n    const fixedColumnPinning = this._fixedColumnPinning();\n    const currentPinning = this.columnPinning();\n    const leafColumnIds = new Set(this.table.getAllLeafColumns().map(column => column.id));\n    const sanitizedPinning: ColumnPinningState = {\n      left: (pinning.left ?? []).filter(columnId => leafColumnIds.has(columnId)),\n      right: (pinning.right ?? []).filter(columnId => leafColumnIds.has(columnId)),\n    };\n    const { actionColumnId } = fixedColumnPinning;\n    let actionPosition = fixedColumnPinning.defaultActionPosition;\n    if (actionColumnId && currentPinning.left?.includes(actionColumnId)) {\n      actionPosition = 'left';\n    }\n    if (actionColumnId && currentPinning.right?.includes(actionColumnId)) {\n      actionPosition = 'right';\n    }\n    if (actionColumnId && sanitizedPinning.left?.includes(actionColumnId)) {\n      actionPosition = 'left';\n    }\n    if (actionColumnId && sanitizedPinning.right?.includes(actionColumnId)) {\n      actionPosition = 'right';\n    }\n\n    const fixedLeftColumnIds =\n      actionColumnId && actionPosition === 'left'\n        ? [actionColumnId, ...fixedColumnPinning.left]\n        : fixedColumnPinning.left;\n    const fixedRightColumnIds = actionColumnId && actionPosition === 'right' ? [actionColumnId] : [];\n    const normalizedPinning = this._sortColumnPinningByOrder(\n      normalizeZTableColumnPinning(sanitizedPinning, fixedLeftColumnIds, fixedRightColumnIds),\n      fixedLeftColumnIds,\n      fixedRightColumnIds\n    );\n    if (\n      this._areColumnIdListsEqual(currentPinning.left, normalizedPinning.left) &&\n      this._areColumnIdListsEqual(currentPinning.right, normalizedPinning.right)\n    ) {\n      return;\n    }\n\n    this.columnPinning.set(normalizedPinning);\n  }\n\n  private _sortColumnPinningByOrder(\n    pinning: { left: string[]; right: string[] },\n    fixedLeftColumnIds: string[] = [],\n    fixedRightColumnIds: string[] = []\n  ): { left: string[]; right: string[] } {\n    const order = this.columnOrder().length\n      ? this.columnOrder()\n      : this.table.getAllLeafColumns().map(column => column.id);\n    const orderMap = new Map(order.map((columnId, index) => [columnId, index] as const));\n    const fixedLeftSet = new Set(fixedLeftColumnIds);\n    const fixedRightSet = new Set(fixedRightColumnIds);\n    const sortByOrder = (columnIds: string[]) =>\n      [...columnIds].sort(\n        (a, b) => (orderMap.get(a) ?? Number.MAX_SAFE_INTEGER) - (orderMap.get(b) ?? Number.MAX_SAFE_INTEGER)\n      );\n    const fixedLeft = fixedLeftColumnIds.filter(columnId => pinning.left.includes(columnId));\n    const left = sortByOrder(pinning.left.filter(columnId => !fixedLeftSet.has(columnId)));\n    const right = sortByOrder(pinning.right.filter(columnId => !fixedRightSet.has(columnId)));\n    const fixedRight = fixedRightColumnIds.filter(columnId => pinning.right.includes(columnId));\n\n    return {\n      left: [...fixedLeft, ...left],\n      right: [...right, ...fixedRight],\n    };\n  }\n\n  private _moveGroupingColumnsToLeadingDataPosition(columnIds: string[]): void {\n    if (columnIds.length === 0) {\n      return;\n    }\n\n    const groupingColumnIdSet = new Set(columnIds);\n\n    const currentOrder = this.columnOrder().length\n      ? this.columnOrder()\n      : this.table.getAllLeafColumns().map(column => column.id);\n    const movableGroupingColumnIds = columnIds.filter(\n      columnId =>\n        currentOrder.includes(columnId) && !this._isFixedLeadingColumnId(columnId) && !this._isSpecialColumnId(columnId)\n    );\n    const nextOrder = currentOrder.filter(columnId => !groupingColumnIdSet.has(columnId));\n    const insertIndex = nextOrder.findIndex(id => !this._isFixedLeadingColumnId(id));\n    const targetIndex = insertIndex >= 0 ? insertIndex : nextOrder.length;\n    nextOrder.splice(targetIndex, 0, ...movableGroupingColumnIds);\n\n    if (this._areColumnIdListsEqual(currentOrder, nextOrder)) {\n      return;\n    }\n\n    this.columnOrder.set(nextOrder);\n    this._setColumnPinning(this.columnPinning());\n  }\n\n  private _areColumnIdListsEqual(current: string[] | undefined, next: string[]): boolean {\n    if ((current?.length ?? 0) !== next.length) {\n      return false;\n    }\n\n    return next.every((columnId, index) => current?.[index] === columnId);\n  }\n\n  public moveColumnLeft(columnId: string): void {\n    const currentOrder = this.columnOrder();\n    if (currentOrder.length === 0) {\n      this.columnOrder.set(this.table.getAllLeafColumns().map(col => col.id));\n    }\n\n    const order = [...this.columnOrder()];\n    const currentIndex = order.indexOf(columnId);\n\n    if (currentIndex <= 0) {\n      return;\n    }\n\n    const prevIndex = currentIndex - 1;\n    if (this._isFixedLeadingColumnId(order[prevIndex]) || this._isRowPinColumnId(order[prevIndex])) {\n      return;\n    }\n\n    [order[currentIndex], order[prevIndex]] = [order[prevIndex], order[currentIndex]];\n    this.columnOrder.set(order);\n  }\n\n  public moveColumnRight(columnId: string): void {\n    const currentOrder = this.columnOrder();\n    if (currentOrder.length === 0) {\n      this.columnOrder.set(this.table.getAllLeafColumns().map(col => col.id));\n    }\n\n    const order = [...this.columnOrder()];\n    const currentIndex = order.indexOf(columnId);\n\n    if (currentIndex < 0 || currentIndex >= order.length - 1) {\n      return;\n    }\n\n    [order[currentIndex], order[currentIndex + 1]] = [order[currentIndex + 1], order[currentIndex]];\n    this.columnOrder.set(order);\n  }\n\n  public isFirstMovableColumn(columnId: string): boolean {\n    const order =\n      this.columnOrder().length > 0 ? this.columnOrder() : this.table.getAllLeafColumns().map(col => col.id);\n    const movableColumns = order.filter(id => !this._isSpecialColumnId(id));\n    return movableColumns.length > 0 && movableColumns[0] === columnId;\n  }\n\n  public isLastMovableColumn(columnId: string): boolean {\n    const order =\n      this.columnOrder().length > 0 ? this.columnOrder() : this.table.getAllLeafColumns().map(col => col.id);\n    const movableColumns = order.filter(id => !this._isSpecialColumnId(id));\n    return movableColumns.length > 0 && movableColumns[movableColumns.length - 1] === columnId;\n  }\n\n  private _isFixedLeadingColumnId(columnId: string): boolean {\n    const columns = this.zConfig().columns ?? [];\n    return (\n      isZTableColumnTypeById(columnId, columns, 'select') ||\n      isZTableColumnTypeById(columnId, columns, 'expand') ||\n      isZTableColumnTypeById(columnId, columns, 'rowDrag')\n    );\n  }\n\n  private _isRowPinColumnId(columnId: string): boolean {\n    return isZTableColumnTypeById(columnId, this.zConfig().columns ?? [], 'rowPin');\n  }\n\n  private _isSpecialColumnId(columnId: string): boolean {\n    const columns = this.zConfig().columns ?? [];\n    const columnType = getZTableColumnType(this._findColumnConfig(columnId), columnId);\n    if (columnType !== 'data') {\n      return true;\n    }\n\n    return isZTableColumnTypeById(columnId, columns, 'actions');\n  }\n\n  // ─── Settings Persistence ─────────────────────────────────────────────────\n\n  /** Saves current column layout, sizing, pinning, and visibility to ZCacheService */\n  private _saveConfig(): void {\n    const key = this.zKey();\n    if (!key) {\n      return;\n    }\n\n    if (this._skipNextConfigSave) {\n      this._skipNextConfigSave = false;\n      return;\n    }\n\n    const columnInfo = this._collectColumnInfo();\n    const config: ZTableSavedConfig = {\n      columnOrder: this.columnOrder(),\n      columnSizing: this._columnBaseSizing(),\n      columnPinning: {\n        left: this.columnPinning().left,\n        right: this.columnPinning().right,\n      },\n      columnVisibility: this.columnVisibility(),\n      groupingColumnIds: this.groupingColumnIds(),\n      columnInfo,\n      showHeaderFooterShadow: this.showHeaderFooterShadow(),\n      showHorizontalBorder: this.showHorizontalBorder(),\n      showVerticalBorder: this.showVerticalBorder(),\n    };\n\n    try {\n      ZCacheService.set(this._getConfigCacheKey(key), config);\n    } catch (error) {\n      console.error('Failed to save table config:', error);\n    }\n  }\n\n  private _collectColumnInfo(): ZTableSavedColumnInfo[] {\n    const columns = this.zConfig().columns ?? [];\n    const result: ZTableSavedColumnInfo[] = [];\n    const collect = (cols: ZTableColumnConfig<T>[]): void => {\n      for (const col of cols) {\n        result.push({\n          id: col.id,\n          accessorKey: col.accessorKey,\n        });\n        if (col.columns) {\n          collect(col.columns);\n        }\n      }\n    };\n\n    collect(columns);\n    return result;\n  }\n\n  /** Loads cached config from ZCacheService; validates schema compatibility first */\n  private _loadConfigCache(key: string): boolean {\n    if (!key) {\n      return false;\n    }\n\n    try {\n      const cacheKey = this._getConfigCacheKey(key);\n      let config = ZCacheService.get<ZTableSavedConfig>(cacheKey);\n      if (!config) {\n        const legacyCacheKey = `table-config-${key}`;\n        const legacyConfig = ZCacheService.get<ZTableSavedConfig>(legacyCacheKey);\n        if (legacyConfig && this._isColumnConfigValid(legacyConfig.columnInfo)) {\n          config = legacyConfig;\n          ZCacheService.set(cacheKey, legacyConfig);\n          ZCacheService.delete(legacyCacheKey);\n        }\n      }\n\n      if (!config) {\n        return false;\n      }\n\n      if (!this._isColumnConfigValid(config.columnInfo)) {\n        ZCacheService.delete(cacheKey);\n        return false;\n      }\n\n      if (config.columnOrder && config.columnOrder.length > 0) {\n        this.columnOrder.set(config.columnOrder);\n      }\n\n      if (config.columnPinning) {\n        this._setColumnPinning(config.columnPinning);\n      }\n\n      if (config.columnVisibility) {\n        this.columnVisibility.set(config.columnVisibility);\n      }\n\n      if (config.groupingColumnIds) {\n        this.groupingColumnIds.set(config.groupingColumnIds.filter(columnId => this.canGroupColumn(columnId)));\n      }\n\n      if (typeof config.showHeaderFooterShadow === 'boolean') {\n        this.showHeaderFooterShadow.set(config.showHeaderFooterShadow);\n      }\n\n      if (typeof config.showHorizontalBorder === 'boolean') {\n        this.showHorizontalBorder.set(config.showHorizontalBorder);\n      }\n\n      if (typeof config.showVerticalBorder === 'boolean') {\n        this.showVerticalBorder.set(config.showVerticalBorder);\n      }\n\n      if (config.columnSizing) {\n        this.table.setColumnSizing(config.columnSizing!);\n        this._scheduleFitColumnWidths();\n      }\n\n      return true;\n    } catch (error) {\n      console.error('Failed to load table config:', error);\n      return false;\n    }\n  }\n\n  private _getConfigCacheKey(key: string): string {\n    const collectSchema = (columns: ZTableColumnConfig<T>[]): unknown[] =>\n      columns.map(column => [\n        column.id,\n        column.accessorKey ?? '',\n        column.columns ? collectSchema(column.columns) : null,\n      ]);\n    const schema = JSON.stringify(collectSchema(this.zConfig().columns ?? []));\n    let fingerprint = 2166136261;\n    for (let index = 0; index < schema.length; index++) {\n      fingerprint ^= schema.charCodeAt(index);\n      fingerprint = Math.imul(fingerprint, 16777619);\n    }\n\n    return `table-config-${key}-${(fingerprint >>> 0).toString(36)}`;\n  }\n\n  /**\n   * Validates cached column info against current config.\n   * Returns false if columns have been added/removed/renamed since cache was saved,\n   * which triggers cache invalidation.\n   */\n  private _isColumnConfigValid(cachedColumnInfo?: ZTableSavedColumnInfo[]): boolean {\n    if (!cachedColumnInfo || cachedColumnInfo.length === 0) {\n      return true;\n    }\n\n    const currentColumnMap = new Map<string, string | undefined>();\n    const columns = this.zConfig().columns ?? [];\n\n    const collectColumns = (cols: ZTableColumnConfig<T>[]): void => {\n      for (const col of cols) {\n        currentColumnMap.set(col.id, col.accessorKey);\n        if (col.columns) {\n          collectColumns(col.columns);\n        }\n      }\n    };\n\n    collectColumns(columns);\n    for (const cached of cachedColumnInfo) {\n      if (!currentColumnMap.has(cached.id)) {\n        return false;\n      }\n      if (currentColumnMap.get(cached.id) !== cached.accessorKey) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  // ─── Filter / Sort Mode Helpers ───────────────────────────────────────────\n  // These helpers determine whether a column's sort/filter changes should be\n  // processed locally by TanStack or emitted to the parent for server-side handling.\n\n  private _getChangedFilterColumnIds(oldState: ColumnFiltersState, newState: ColumnFiltersState): string[] {\n    const changedIds: string[] = [];\n    const oldMap = new Map(oldState.map(f => [f.id, f.value]));\n    const newMap = new Map(newState.map(f => [f.id, f.value]));\n\n    for (const filter of newState) {\n      const oldValue = oldMap.get(filter.id);\n      if (JSON.stringify(oldValue) !== JSON.stringify(filter.value)) {\n        changedIds.push(filter.id);\n      }\n    }\n\n    for (const filter of oldState) {\n      if (!newMap.has(filter.id)) {\n        changedIds.push(filter.id);\n      }\n    }\n\n    return [...new Set(changedIds)];\n  }\n\n  private _getChangedSortColumnIds(oldState: SortingState, newState: SortingState): string[] {\n    const changedIds: string[] = [];\n    const oldMap = new Map(oldState.map(s => [s.id, s.desc]));\n    const newMap = new Map(newState.map(s => [s.id, s.desc]));\n\n    for (const sort of newState) {\n      const oldDesc = oldMap.get(sort.id);\n      if (oldDesc !== sort.desc) {\n        changedIds.push(sort.id);\n      }\n    }\n\n    for (const sort of oldState) {\n      if (!newMap.has(sort.id)) {\n        changedIds.push(sort.id);\n      }\n    }\n\n    return [...new Set(changedIds)];\n  }\n\n  private _isColumnFilterModeLocal(columnId: string): boolean {\n    const columnConfig = this._findColumnConfig(columnId);\n    if (!columnConfig) {\n      return true;\n    }\n\n    const filterConfig =\n      typeof columnConfig.filter === 'boolean' ? { enabled: columnConfig.filter } : columnConfig.filter;\n    const filterMode = filterConfig?.mode ?? 'local';\n    return filterMode === 'local';\n  }\n\n  private _isColumnSortModeLocal(columnId: string): boolean {\n    const columnConfig = this._findColumnConfig(columnId);\n    if (!columnConfig) {\n      return true;\n    }\n\n    const sortConfig = typeof columnConfig.sort === 'boolean' ? { enabled: columnConfig.sort } : columnConfig.sort;\n    const sortMode = sortConfig?.mode ?? 'local';\n    return sortMode === 'local';\n  }\n\n  private _filterServerModeColumnFilters(filters: ColumnFiltersState): ColumnFiltersState {\n    return filters.filter(filter => !this._isColumnFilterModeLocal(filter.id));\n  }\n\n  private _filterServerModeSorting(sorting: SortingState): SortingState {\n    return sorting.filter(sort => !this._isColumnSortModeLocal(sort.id));\n  }\n\n  private _getGroupId(columnId: string, value: unknown, parentGroupId = ''): string {\n    const groupId = `${columnId}:${this._getGroupLabel(value)}`;\n    return parentGroupId ? `${parentGroupId}>${groupId}` : groupId;\n  }\n\n  private _getRowGroupValue(columnId: string, row: Row<T>): unknown {\n    const groupKey = this._findColumnConfig(columnId)?.groupKey;\n    if (typeof groupKey === 'function') {\n      return groupKey(row.original);\n    }\n\n    if (groupKey !== undefined) {\n      return row.original[groupKey];\n    }\n\n    return row.getValue(columnId);\n  }\n\n  private _getColumnGroupLabel(columnId: string, value: unknown, rows: Row<T>[]): string {\n    const formatter = this._findColumnConfig(columnId)?.groupLabel;\n    if (formatter) {\n      return formatter({ value, columnId, rows });\n    }\n\n    const date = this._getGroupDate(value);\n    if (date) {\n      return formatDate(date, 'dd/MM/yyyy | HH:mm:ss', 'en-US');\n    }\n\n    return this._getGroupLabel(value);\n  }\n\n  private _getGroupDate(value: unknown): Date | null {\n    if (value instanceof Date) {\n      return Number.isNaN(value.getTime()) ? null : value;\n    }\n\n    if (\n      typeof value !== 'string' ||\n      !/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,3})?)?(?:Z|[+-]\\d{2}:\\d{2})?$/.test(value)\n    ) {\n      return null;\n    }\n\n    const date = new Date(value);\n    return Number.isNaN(date.getTime()) ? null : date;\n  }\n\n  private _getGroupLabel(value: unknown): string {\n    if (value === null || value === undefined || value === '') {\n      return this._zTranslate.translate('i18n_z_ui_table_group_empty')();\n    }\n\n    if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n      return String(value);\n    }\n\n    return JSON.stringify(value);\n  }\n\n  private _getActionColumnConfig(body: ZTableBodyColumnConfig<T>): ZTableActionColumnConfig<T> | null {\n    const { actions } = body;\n    if (!actions) {\n      return null;\n    }\n\n    if (Array.isArray(actions)) {\n      if (actions.length === 0) {\n        return null;\n      }\n\n      return {\n        actions,\n        maxVisible: body.actionMaxVisible,\n      };\n    }\n\n    if (typeof actions === 'function') {\n      return {\n        actions,\n        maxVisible: body.actionMaxVisible,\n      };\n    }\n\n    if (Array.isArray(actions.actions) && actions.actions.length === 0) {\n      return null;\n    }\n\n    return actions;\n  }\n\n  // ─── Column Config Lookup (Cached) ────────────────────────────────────────\n\n  /**\n   * Recursively finds a column config by ID with caching.\n   * Cache is invalidated when the column array reference changes.\n   */\n  private _findColumnConfig(columnId: string): ZTableColumnConfig<T> | undefined {\n    const { columns } = this.zConfig();\n    if (columns !== this._lastColumnsRef) {\n      this._columnConfigCache.clear();\n      this._lastColumnsRef = columns;\n    }\n\n    if (this._columnConfigCache.has(columnId)) {\n      return this._columnConfigCache.get(columnId);\n    }\n\n    const findInColumns = (cols: ZTableColumnConfig<T>[]): ZTableColumnConfig<T> | undefined => {\n      for (const col of cols) {\n        if (col.id === columnId) {\n          return col;\n        }\n        if (col.columns) {\n          const found = findInColumns(col.columns);\n          if (found) {\n            return found;\n          }\n        }\n      }\n      return undefined;\n    };\n\n    const result = findInColumns(columns);\n    this._columnConfigCache.set(columnId, result);\n    return result;\n  }\n}\n","<!-- Toolbar: Search & Settings -->\n@if (isSearchEnabled() || zConfig().enableSettings) {\n  <div class=\"z-table-toolbar mb-2 flex items-center justify-between gap-4\">\n    <!-- Search -->\n    @if (isSearchEnabled()) {\n      @let config = searchConfig();\n      <z-input\n        [class]=\"config?.width ?? 'w-64'\"\n        [zSize]=\"config?.size ?? 'sm'\"\n        [zPlaceholder]=\"config?.placeholder ?? 'i18n_z_ui_table_search' | translate\"\n        [zSearch]=\"true\"\n        [zDebounce]=\"config?.debounceTime ?? 300\"\n        (zOnSearch)=\"onSearchChange($event)\" />\n    } @else {\n      <div></div>\n    }\n\n    <!-- Settings Button -->\n    @if (zConfig().enableSettings) {\n      <z-button zType=\"outline\" zSize=\"sm\" zTypeIcon=\"lucideSettings\" (click)=\"openSettingsDrawer()\">\n        {{ 'i18n_z_ui_table_settings' | translate }}\n      </z-button>\n    }\n  </div>\n}\n\n@if (zConfig().enableFilterHeader && appliedFilterChips().length > 0) {\n  <div class=\"z-table-filter-header mb-2 flex min-w-0 items-center gap-2\">\n    <div class=\"flex min-w-0 flex-1 flex-wrap items-center gap-1.5\">\n      @for (chip of visibleAppliedFilterChips(); track chip.id) {\n        <span\n          class=\"border-border bg-muted/60 text-foreground inline-flex max-w-80 min-w-0 shrink-0 items-center gap-1 rounded-sm border px-2 py-1 text-[0.8125rem] shadow-xs\">\n          <span class=\"font-medium whitespace-nowrap\">{{ chip.label }}</span>\n          <span class=\"text-muted-foreground\">:</span>\n          <span class=\"truncate\" z-tooltip [zContent]=\"chip.value\" zTooltipTrigger=\"hover\" zTooltipPosition=\"top\">\n            {{ chip.value }}\n          </span>\n          <button\n            type=\"button\"\n            class=\"hover:bg-destructive/10 hover:text-destructive focus-visible:ring-ring -mr-1 inline-flex size-5 cursor-pointer items-center justify-center rounded-sm outline-none focus-visible:ring-2\"\n            [attr.aria-label]=\"'i18n_z_ui_table_filter_remove' | translate\"\n            (click)=\"clearAppliedFilterChip(chip)\">\n            <z-icon zType=\"lucideX\" zSize=\"12\" />\n          </button>\n        </span>\n      }\n      @if (hiddenAppliedFilterChipCount() > 0 && isFilterHeaderExpanded()) {\n        @for (chip of overflowAppliedFilterChips(); track chip.id) {\n          <span\n            class=\"z-table-filter-header-overflow-chip border-border bg-muted/60 text-foreground inline-flex max-w-80 min-w-0 shrink-0 items-center gap-1 rounded-sm border px-2 py-1 text-[0.8125rem] shadow-xs\"\n            [attr.aria-hidden]=\"!isFilterHeaderExpanded()\">\n            <span class=\"font-medium whitespace-nowrap\">{{ chip.label }}</span>\n            <span class=\"text-muted-foreground\">:</span>\n            <span class=\"truncate\" z-tooltip [zContent]=\"chip.value\" zTooltipTrigger=\"hover\" zTooltipPosition=\"top\">\n              {{ chip.value }}\n            </span>\n            <button\n              type=\"button\"\n              class=\"hover:bg-destructive/10 hover:text-destructive focus-visible:ring-ring -mr-1 inline-flex size-5 cursor-pointer items-center justify-center rounded-sm outline-none focus-visible:ring-2\"\n              [attr.aria-label]=\"'i18n_z_ui_table_filter_remove' | translate\"\n              (click)=\"clearAppliedFilterChip(chip)\">\n              <z-icon zType=\"lucideX\" zSize=\"12\" />\n            </button>\n          </span>\n        }\n      }\n      @if (hiddenAppliedFilterChipCount() > 0) {\n        <button\n          type=\"button\"\n          class=\"text-primary hover:bg-primary/10 focus-visible:ring-ring inline-flex h-7 cursor-pointer items-center rounded-sm px-2 text-xs font-medium outline-none focus-visible:ring-2\"\n          (click)=\"toggleFilterHeaderExpanded()\">\n          {{\n            isFilterHeaderExpanded()\n              ? ('i18n_z_ui_table_show_less' | translate)\n              : ('i18n_z_ui_table_show_more' | translate: { count: hiddenAppliedFilterChipCount() })\n          }}\n        </button>\n      }\n      <button\n        type=\"button\"\n        class=\"bg-destructive/10 text-destructive hover:bg-destructive/20 dark:bg-destructive/15 dark:text-destructive-foreground dark:hover:bg-destructive/25 focus-visible:ring-destructive inline-flex h-7 cursor-pointer items-center gap-1 rounded-sm px-2 text-xs font-medium shadow-xs outline-none focus-visible:ring-2\"\n        (click)=\"clearAppliedFilters()\">\n        <z-icon zType=\"lucideX\" zSize=\"12\" />\n        <span>{{ 'i18n_z_ui_table_clear_filter' | translate }}</span>\n      </button>\n    </div>\n  </div>\n}\n\n<div\n  #tableContainer\n  [class]=\"classTable()\"\n  [class.z-pinning-overflow]=\"!isPinnedLayoutWithinContainer()\"\n  [class.z-hide-horizontal-border]=\"!showHorizontalBorder()\"\n  [class.z-hide-vertical-border]=\"!showVerticalBorder()\"\n  [class.z-hide-pinned-top-border]=\"hasScrollTop()\"\n  [class.z-hide-pinned-bottom-border]=\"hasScrollBottom()\"\n  [style.width]=\"zConfig().width\"\n  [style.height]=\"zConfig().height\"\n  [style.max-height]=\"zConfig().maxHeight\"\n  [style.min-height]=\"zConfig().minHeight\"\n  [attr.tabindex]=\"canUseContentRowInsert() || canUseCellSelection() ? 0 : null\"\n  (keydown)=\"onContentTableKeydown($event)\">\n  @let isColumnPinningActive = isPinnedLayoutWithinContainer();\n  <ng-template #contentRowMenuContent>\n    <div class=\"flex min-w-36 flex-col gap-0.5 p-1\">\n      @if (contentRowMenu()?.columnId) {\n        <button\n          type=\"button\"\n          class=\"text-foreground hover:bg-muted focus:bg-muted flex min-h-6 cursor-pointer items-center gap-1.5 rounded px-1.5 py-0.5 text-[0.6875rem] outline-none\"\n          (mousedown)=\"$event.preventDefault()\"\n          (click)=\"copyContentCell()\">\n          <z-icon zType=\"lucideCopy\" zSize=\"12\" />\n          <span>{{ 'i18n_z_ui_table_copy_cell' | translate }}</span>\n        </button>\n        <div class=\"border-border my-0 border-t\"></div>\n      }\n      <button\n        type=\"button\"\n        class=\"text-foreground hover:bg-muted focus:bg-muted flex min-h-6 cursor-pointer items-center gap-1.5 rounded px-1.5 py-0.5 text-[0.6875rem] outline-none\"\n        (click)=\"copyContentRows()\">\n        <z-icon zType=\"lucideCopy\" zSize=\"12\" />\n        <span>{{ 'i18n_z_ui_table_copy_row' | translate }}</span>\n      </button>\n      <button\n        type=\"button\"\n        class=\"text-foreground hover:bg-muted focus:bg-muted flex min-h-6 cursor-pointer items-center gap-1.5 rounded px-1.5 py-0.5 text-[0.6875rem] outline-none disabled:pointer-events-none disabled:opacity-40\"\n        [disabled]=\"contentRowClipboard().length === 0\"\n        (click)=\"pasteContentRows('below')\">\n        <z-icon zType=\"lucideClipboardPaste\" zSize=\"12\" />\n        <span>{{ 'i18n_z_ui_table_paste_row_below' | translate }}</span>\n      </button>\n      <div class=\"border-border my-0 border-t\"></div>\n      <button\n        type=\"button\"\n        class=\"text-foreground hover:bg-muted focus:bg-muted flex min-h-6 cursor-pointer items-center gap-1.5 rounded px-1.5 py-0.5 text-[0.6875rem] outline-none disabled:pointer-events-none disabled:opacity-40\"\n        [disabled]=\"!canMoveContentRowUp()\"\n        (click)=\"moveContentRow('up')\">\n        <z-icon zType=\"lucideArrowUp\" zSize=\"12\" />\n        <span>{{ 'i18n_z_ui_table_move_row_up' | translate }}</span>\n      </button>\n      <button\n        type=\"button\"\n        class=\"text-foreground hover:bg-muted focus:bg-muted flex min-h-6 cursor-pointer items-center gap-1.5 rounded px-1.5 py-0.5 text-[0.6875rem] outline-none disabled:pointer-events-none disabled:opacity-40\"\n        [disabled]=\"!canMoveContentRowDown()\"\n        (click)=\"moveContentRow('down')\">\n        <z-icon zType=\"lucideArrowDown\" zSize=\"12\" />\n        <span>{{ 'i18n_z_ui_table_move_row_down' | translate }}</span>\n      </button>\n      <div class=\"border-border my-0 border-t\"></div>\n      <button\n        type=\"button\"\n        class=\"text-foreground hover:bg-muted focus:bg-muted flex min-h-6 cursor-pointer items-center gap-1.5 rounded px-1.5 py-0.5 text-[0.6875rem] outline-none\"\n        (click)=\"insertContentRow('above')\">\n        <z-icon zType=\"lucideArrowUpToLine\" zSize=\"12\" />\n        <span>{{ 'i18n_z_ui_table_insert_row_above' | translate }}</span>\n      </button>\n      <button\n        type=\"button\"\n        class=\"text-foreground hover:bg-muted focus:bg-muted flex min-h-6 cursor-pointer items-center gap-1.5 rounded px-1.5 py-0.5 text-[0.6875rem] outline-none\"\n        (click)=\"insertContentRow('below')\">\n        <z-icon zType=\"lucideArrowDownToLine\" zSize=\"12\" />\n        <span>{{ 'i18n_z_ui_table_insert_row_below' | translate }}</span>\n      </button>\n      <div class=\"border-border my-0 border-t\"></div>\n      <button\n        type=\"button\"\n        class=\"text-destructive hover:bg-destructive/10 focus:bg-destructive/10 flex min-h-6 cursor-pointer items-center gap-1.5 rounded px-1.5 py-0.5 text-[0.6875rem] outline-none\"\n        (click)=\"deleteContentRows()\">\n        <z-icon zType=\"lucideTrash2\" zSize=\"12\" />\n        <span>\n          {{\n            contentRowDeleteCount() > 1\n              ? ('i18n_z_ui_table_delete_selected_rows' | translate)\n              : ('i18n_z_ui_table_delete_row' | translate)\n          }}\n        </span>\n      </button>\n    </div>\n  </ng-template>\n\n  <ng-template #cellMenuContent>\n    <div class=\"flex min-w-36 flex-col gap-0.5 p-1\">\n      <button\n        type=\"button\"\n        class=\"text-foreground hover:bg-muted focus:bg-muted flex min-h-6 cursor-pointer items-center gap-1.5 rounded px-1.5 py-0.5 text-[0.6875rem] outline-none disabled:pointer-events-none disabled:opacity-40\"\n        [disabled]=\"!canCopyCellMenuSelection()\"\n        (click)=\"copySelectedCells(false)\">\n        <z-icon zType=\"lucideCopy\" zSize=\"12\" />\n        <span>{{ 'i18n_z_ui_table_copy_cell' | translate }}</span>\n      </button>\n      @if (cellSelectionOptions().copyWithHeaders) {\n        <button\n          type=\"button\"\n          class=\"text-foreground hover:bg-muted focus:bg-muted flex min-h-6 cursor-pointer items-center gap-1.5 rounded px-1.5 py-0.5 text-[0.6875rem] outline-none disabled:pointer-events-none disabled:opacity-40\"\n          [disabled]=\"!canCopyCellMenuSelection()\"\n          (click)=\"copySelectedCells(true)\">\n          <z-icon zType=\"lucideCopy\" zSize=\"12\" />\n          <span>{{ 'i18n_z_ui_table_copy_cell_with_headers' | translate }}</span>\n        </button>\n      }\n    </div>\n  </ng-template>\n\n  <div\n    class=\"pointer-events-none fixed size-px opacity-0\"\n    z-popover\n    [zPopoverContent]=\"contentRowMenuContent\"\n    zTrigger=\"manual\"\n    zPosition=\"bottom-left\"\n    zClass=\"z-table-content-row-menu\"\n    [zOffset]=\"0\"\n    [zManualClose]=\"true\"\n    [zScrollClose]=\"true\"\n    [style.left.px]=\"contentRowMenu()?.left ?? -9999\"\n    [style.top.px]=\"contentRowMenu()?.top ?? -9999\"\n    (zControl)=\"setContentRowMenuControl($event)\"\n    (zHide)=\"clearContentRowMenu()\"></div>\n\n  <div\n    class=\"pointer-events-none fixed size-px opacity-0\"\n    z-popover\n    [zPopoverContent]=\"cellMenuContent\"\n    zTrigger=\"manual\"\n    zPosition=\"bottom-left\"\n    zClass=\"z-table-cell-menu\"\n    [zOffset]=\"0\"\n    [zManualClose]=\"true\"\n    [zScrollClose]=\"true\"\n    [style.left.px]=\"cellMenu()?.left ?? -9999\"\n    [style.top.px]=\"cellMenu()?.top ?? -9999\"\n    (zControl)=\"setCellMenuControl($event)\"\n    (zHide)=\"clearCellMenu()\"></div>\n\n  <!-- Shared colgroup template -->\n  <ng-template #colGroupTpl>\n    <colgroup>\n      @if (canUseVirtualColumns()) {\n        @for (column of leftLeafColumns(); track column.id) {\n          @let customWidth = column.id | zTableColumnConfig: zConfig().columns : 'width';\n          <col [style.width]=\"customWidth || 'calc(var(--col-' + column.id + '-size) * 1px)'\" />\n        }\n        @if (virtualLeftSpacerWidth() > 0) {\n          <col [style.width.px]=\"virtualRenderedLeftSpacerWidth()\" />\n        }\n        @for (column of virtualCenterColumns(); track column.id) {\n          @let customWidth = column.id | zTableColumnConfig: zConfig().columns : 'width';\n          <col [style.width]=\"customWidth || 'calc(var(--col-' + column.id + '-size) * 1px)'\" />\n        }\n        @if (virtualRightSpacerWidth() > 0) {\n          <col [style.width.px]=\"virtualRenderedRightSpacerWidth()\" />\n        }\n        @for (column of rightLeafColumns(); track column.id) {\n          @let customWidth = column.id | zTableColumnConfig: zConfig().columns : 'width';\n          <col [style.width]=\"customWidth || 'calc(var(--col-' + column.id + '-size) * 1px)'\" />\n        }\n      } @else {\n        @for (column of orderedLeafColumns(); track column.id) {\n          @if (column.getIsVisible()) {\n            @let customWidth = column.id | zTableColumnConfig: zConfig().columns : 'width';\n            <col [style.width]=\"customWidth || 'calc(var(--col-' + column.id + '-size) * 1px)'\" />\n          }\n        }\n      }\n    </colgroup>\n  </ng-template>\n\n  <!-- Header table -->\n  <div\n    class=\"z-thead-wrapper shadow-card\"\n    [class.z-shadow-header]=\"shouldHeaderShowShadow()\"\n    [class.z-scroll-left]=\"hasScrollLeft()\"\n    [class.z-scroll-right]=\"hasScrollRight()\"\n    #theadWrapper>\n    <table [ngStyle]=\"columnSizeVars()\" [style.width.px]=\"renderedTableWidth()\">\n      <ng-container *ngTemplateOutlet=\"colGroupTpl\" />\n      <thead>\n        @if (canUseVirtualColumns()) {\n          <tr>\n            @for (header of leftHeaderRow(); track header.id) {\n              @let rowSpan = header | zTableSpan: zConfig().columns : 'headerRowSpan';\n              @let shouldRender = header | zTableCellRender: leftHeaderRow() : zConfig().columns : 'header';\n              @if (rowSpan && shouldRender) {\n                <th\n                  [attr.id]=\"header.column.id\"\n                  [ngStyle]=\"\n                    header.column\n                      | zTablePinningStyles\n                        : header\n                        : 'header'\n                        : table\n                        : zConfig().columns\n                        : columnSizingInfo()\n                        : colDomWidthMap()\n                        : isColumnPinningActive\n                  \"\n                  [class]=\"\n                    (header.column.id | zTableColumnConfig: zConfig().columns : 'headerClass') +\n                    ' ' +\n                    (header.column.id | zTableColumnConfig: zConfig().columns : 'headerAlignClass')\n                  \"\n                  [style]=\"header.column.id | zTableColumnConfig: zConfig().columns : 'headerStyle'\"\n                  [class.z-sticky-left]=\"\n                    isColumnPinningActive && (header | zTableCellPin: 'isLeftPinned' : zConfig().columns)\n                  \"\n                  [class.z-sticky-right]=\"\n                    isColumnPinningActive && (header | zTableCellPin: 'isRightPinned' : zConfig().columns)\n                  \"\n                  [class.z-sticky-left-last]=\"\n                    isColumnPinningActive && (header | zTableCellPin: 'isLastLeftPinned' : zConfig().columns)\n                  \"\n                  [class.z-sticky-right-first]=\"\n                    isColumnPinningActive && (header | zTableCellPin: 'isFirstRightPinned' : zConfig().columns)\n                  \"\n                  [class.z-sticky-right-last]=\"\n                    isColumnPinningActive && (header | zTableCellPin: 'isLastRightPinned' : zConfig().columns)\n                  \"\n                  [class.z-at-left-edge]=\"header | zTableCellOffset: orderedLeafColumns()\"\n                  [class.z-col-drag]=\"header.column.id === 'rowDrag'\"\n                  [class.z-col-select]=\"header.column.id === 'select'\"\n                  [class.z-col-expand]=\"header.column.id === 'expand'\"\n                  [class.z-col-actions]=\"\n                    header.column.id === 'actions' || header.column.id === actionColumnInfo()?.columnId\n                  \"\n                  [attr.rowspan]=\"rowSpan\"\n                  [attr.colspan]=\"header | zTableSpan: zConfig().columns : 'headerColSpan'\">\n                  @if (header.column.id === 'rowDrag') {\n                    <div class=\"flex items-center justify-center\">\n                      <z-icon zType=\"lucideGripVertical\" zSize=\"14\" class=\"text-muted-foreground opacity-70\" />\n                    </div>\n                  } @else if (header.column.id === 'select') {\n                    <div\n                      class=\"flex items-center\"\n                      [class.justify-center]=\"\n                        (header.column.id | zTableColumnConfig: zConfig().columns : 'headerAlignClass') ===\n                        'text-center'\n                      \"\n                      [class.justify-end]=\"\n                        (header.column.id | zTableColumnConfig: zConfig().columns : 'headerAlignClass') === 'text-right'\n                      \">\n                      <z-checkbox\n                        [zChecked]=\"canUseRowSelection() && table.getIsAllRowsSelected()\"\n                        [zIndeterminate]=\"\n                          canUseRowSelection() && table.getIsSomeRowsSelected() && !table.getIsAllRowsSelected()\n                        \"\n                        [zDisabled]=\"!canUseRowSelection()\"\n                        (zChange)=\"canUseRowSelection() && table.toggleAllRowsSelected()\" />\n                    </div>\n                  } @else if (header.column.id === 'expand') {\n                    <div\n                      class=\"flex items-center\"\n                      [class.justify-center]=\"\n                        (header.column.id | zTableColumnConfig: zConfig().columns : 'headerAlignClass') ===\n                        'text-center'\n                      \"\n                      [class.justify-end]=\"\n                        (header.column.id | zTableColumnConfig: zConfig().columns : 'headerAlignClass') === 'text-right'\n                      \">\n                      <button\n                        type=\"button\"\n                        (click)=\"table.toggleAllRowsExpanded()\"\n                        class=\"hover:bg-muted flex h-6 w-6 cursor-pointer items-center justify-center rounded\">\n                        <z-icon\n                          zType=\"lucideChevronRight\"\n                          zSize=\"14\"\n                          class=\"transition-transform duration-200\"\n                          [class.rotate-90]=\"table.getIsSomeRowsExpanded()\" />\n                      </button>\n                    </div>\n                  } @else {\n                    <div\n                      class=\"flex w-full items-center gap-1\"\n                      [class.justify-center]=\"\n                        (header.column.id | zTableColumnConfig: zConfig().columns : 'headerAlignClass') ===\n                        'text-center'\n                      \"\n                      [class.justify-end]=\"\n                        (header.column.id | zTableColumnConfig: zConfig().columns : 'headerAlignClass') === 'text-right'\n                      \">\n                      @let columnEnableOrdering =\n                        header.column.id | zTableColumnConfig: zConfig().columns : 'enableOrdering';\n                      @let columnEnablePinning =\n                        header.column.id | zTableColumnConfig: zConfig().columns : 'enablePinning';\n                      @let effectiveEnableOrdering = columnEnableOrdering || zConfig().enableColumnOrdering;\n                      @let effectiveEnablePinning = columnEnablePinning ?? zConfig().enableColumnPinning ?? true;\n                      <ng-template #colOptionsPopoverContent>\n                        <div class=\"flex flex-col gap-1 py-1\">\n                          @if (effectiveEnableOrdering) {\n                            <button\n                              type=\"button\"\n                              [disabled]=\"isFirstMovableColumn(header.column.id) || header.column.getIsPinned()\"\n                              (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                              (click)=\"moveColumnLeft(header.column.id); colOptionsPopover.hideImmediate()\"\n                              class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none disabled:pointer-events-none disabled:opacity-40\">\n                              <z-icon zType=\"lucideArrowLeft\" zSize=\"14\" />\n                              <span>{{ 'i18n_z_ui_table_move_left' | translate }}</span>\n                            </button>\n                            <button\n                              type=\"button\"\n                              [disabled]=\"isLastMovableColumn(header.column.id) || header.column.getIsPinned()\"\n                              (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                              (click)=\"moveColumnRight(header.column.id); colOptionsPopover.hideImmediate()\"\n                              class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none disabled:pointer-events-none disabled:opacity-40\">\n                              <z-icon zType=\"lucideArrowRight\" zSize=\"14\" />\n                              <span>{{ 'i18n_z_ui_table_move_right' | translate }}</span>\n                            </button>\n                          }\n                          @if (effectiveEnableOrdering && header.column.getCanPin() && effectiveEnablePinning) {\n                            <div class=\"border-border my-0.5 border-t\"></div>\n                          }\n                          @if (header.column.getCanPin() && effectiveEnablePinning) {\n                            @if (header.column.getIsPinned() !== 'left') {\n                              <button\n                                type=\"button\"\n                                [disabled]=\"!pinAvailabilityMap()[header.column.id]?.left\"\n                                (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                                (click)=\"handleColumnPin(header.column.id, 'left'); colOptionsPopover.hideImmediate()\"\n                                class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none disabled:pointer-events-none disabled:opacity-40\">\n                                <z-icon zType=\"lucidePin\" zSize=\"14\" class=\"rotate-90\" />\n                                <span>{{ 'i18n_z_ui_table_pin_left' | translate }}</span>\n                              </button>\n                            }\n                            @if (header.column.getIsPinned() !== 'right') {\n                              <button\n                                type=\"button\"\n                                [disabled]=\"!pinAvailabilityMap()[header.column.id]?.right\"\n                                (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                                (click)=\"handleColumnPin(header.column.id, 'right'); colOptionsPopover.hideImmediate()\"\n                                class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none disabled:pointer-events-none disabled:opacity-40\">\n                                <z-icon zType=\"lucidePin\" zSize=\"14\" class=\"-rotate-90\" />\n                                <span>{{ 'i18n_z_ui_table_pin_right' | translate }}</span>\n                              </button>\n                            }\n                            @if (\n                              header.column.getIsPinned() &&\n                              header.column.id !== 'expand' &&\n                              header.column.id !== actionColumnInfo()?.columnId\n                            ) {\n                              <button\n                                type=\"button\"\n                                (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                                (click)=\"handleColumnPin(header.column.id, false); colOptionsPopover.hideImmediate()\"\n                                class=\"z-column-menu-item text-destructive hover:bg-destructive/10 focus:bg-destructive/10 mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none\">\n                                <z-icon zType=\"lucideX\" zSize=\"14\" />\n                                <span>{{ 'i18n_z_ui_table_unpin' | translate }}</span>\n                              </button>\n                            }\n                          }\n                          @if (groupingHeaderMenuMap()[header.id]) {\n                            @let isActiveGroupingColumn = groupingColumnMap()[header.column.id];\n                            <div class=\"border-border my-0.5 border-t\"></div>\n                            @if (!isActiveGroupingColumn) {\n                              <button\n                                type=\"button\"\n                                (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                                (click)=\"groupByColumn(header.column.id); colOptionsPopover.hideImmediate()\"\n                                class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none\">\n                                <z-icon zType=\"lucideRows3\" zSize=\"14\" class=\"text-muted-foreground shrink-0\" />\n                                <span>{{ 'i18n_z_ui_table_group_by_column' | translate }}</span>\n                              </button>\n                            }\n                            @let groupMenuStateBoundary = isActiveGroupingColumn;\n                            @if (groupMenuStateBoundary) {\n                              <button\n                                type=\"button\"\n                                (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                                (click)=\"removeGroupingColumn(header.column.id); colOptionsPopover.hideImmediate()\"\n                                class=\"z-column-menu-item text-destructive hover:bg-destructive/10 focus:bg-destructive/10 mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none\">\n                                <z-icon zType=\"lucideUngroup\" zSize=\"14\" />\n                                <span>{{ 'i18n_z_ui_table_clear_grouping' | translate }}</span>\n                              </button>\n                            }\n                          }\n                          <div class=\"border-border my-0.5 border-t\"></div>\n                          <button\n                            type=\"button\"\n                            (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                            (click)=\"autosizeColumn(header.column.id); colOptionsPopover.hideImmediate()\"\n                            class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none\">\n                            <z-icon zType=\"lucideChevronsLeftRight\" zSize=\"14\" class=\"text-muted-foreground shrink-0\" />\n                            <span>{{ 'i18n_z_ui_table_autosize_column' | translate }}</span>\n                          </button>\n                          <button\n                            type=\"button\"\n                            (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                            (click)=\"autosizeAllColumns(); colOptionsPopover.hideImmediate()\"\n                            class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none\">\n                            <z-icon zType=\"lucideColumns3\" zSize=\"14\" class=\"text-muted-foreground shrink-0\" />\n                            <span>{{ 'i18n_z_ui_table_autosize_all_columns' | translate }}</span>\n                          </button>\n                          <button\n                            type=\"button\"\n                            (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                            (click)=\"resetColumns(); colOptionsPopover.hideImmediate()\"\n                            class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none\">\n                            <z-icon zType=\"lucideRotateCcw\" zSize=\"14\" class=\"text-muted-foreground shrink-0\" />\n                            <span>{{ 'i18n_z_ui_table_reset_columns' | translate }}</span>\n                          </button>\n                          @if (hideableColumns().length > 0) {\n                            <button\n                              type=\"button\"\n                              (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                              (click)=\"openSettingsDrawerFromColumnMenu(colOptionsPopover)\"\n                              class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none\">\n                              <z-icon zType=\"lucideColumns3\" zSize=\"14\" class=\"text-muted-foreground shrink-0\" />\n                              <span class=\"truncate\">\n                                {{ 'i18n_z_ui_table_choose_columns' | translate }}\n                              </span>\n                            </button>\n                          }\n                        </div>\n                      </ng-template>\n\n                      @let columnEnableHeaderMenu =\n                        header.column.id | zTableColumnConfig: zConfig().columns : 'enableHeaderMenu';\n                      @let hasColumnOptions =\n                        header.column.id !== 'actionRowPin' &&\n                        columnEnableHeaderMenu !== false &&\n                        (groupingHeaderMenuMap()[header.id] ||\n                          (header.column.getCanPin() && effectiveEnablePinning) ||\n                          effectiveEnableOrdering ||\n                          hideableColumns().length > 0);\n                      <div\n                        class=\"z-header-text-wrapper inline-flex max-w-full items-center gap-1 rounded px-1.5 py-1\"\n                        [class.cursor-pointer]=\"hasColumnOptions\"\n                        [class.z-has-options]=\"hasColumnOptions\"\n                        [attr.z-popover]=\"hasColumnOptions ? '' : null\"\n                        #colOptionsPopover=\"zPopover\"\n                        #headerTextWrapper\n                        z-popover\n                        [zPopoverContent]=\"hasColumnOptions ? colOptionsPopoverContent : null\"\n                        zTrigger=\"click\"\n                        zPosition=\"bottom\"\n                        [zOffset]=\"5\"\n                        (zOutsideClick)=\"hideColumnPopoversOnOutsideClick(colOptionsPopover)\"\n                        (mousedown)=\"$event.preventDefault()\"\n                        [attr.tabindex]=\"hasColumnOptions ? 0 : null\"\n                        [attr.role]=\"hasColumnOptions ? 'button' : null\"\n                        [attr.aria-haspopup]=\"hasColumnOptions ? 'menu' : null\">\n                        <ng-container\n                          *flexRender=\"header.column.columnDef.header; props: header.getContext(); let headerContent\">\n                          @if (headerContent | zTableIsTemplateRef) {\n                            <div\n                              class=\"z-template-content\"\n                              [class]=\"header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentClass'\"\n                              [ngStyle]=\"\n                                header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentStyle'\n                              \">\n                              <ng-container\n                                *ngTemplateOutlet=\"headerContent; context: { $implicit: header.getContext() }\" />\n                            </div>\n                          } @else if (headerContent | zTableHasIcon) {\n                            <z-table-icon-text\n                              class=\"min-w-0 truncate\"\n                              [zText]=\"headerContent\"\n                              [zTooltip]=\"header.column.id | zTableColumnConfig: zConfig().columns : 'headerTooltip'\"\n                              [zTriggerElement]=\"headerTextWrapper\"\n                              [class]=\"header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentClass'\"\n                              [ngStyle]=\"\n                                header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentStyle'\n                              \" />\n                          } @else {\n                            <span\n                              class=\"z-table-cell-text\"\n                              z-tooltip\n                              [zContent]=\"\n                                (header.column.id | zTableColumnConfig: zConfig().columns : 'headerTooltip') ||\n                                headerContent\n                              \"\n                              [zTriggerElement]=\"headerTextWrapper\"\n                              [innerHTML]=\"headerContent | translate | zSafeHtml\"\n                              [class]=\"header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentClass'\"\n                              [ngStyle]=\"\n                                header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentStyle'\n                              \"></span>\n                          }\n                        </ng-container>\n                        @if (hasColumnOptions) {\n                          <z-icon zType=\"lucideChevronDown\" zSize=\"15\" class=\"text-muted-foreground shrink-0\" />\n                        }\n                      </div>\n                      @if ((header.column.getCanSort() && !hasBodyRowSpan()) || header.column.getCanFilter()) {\n                        <z-table-filter\n                          [zColumn]=\"$any(header.column)\"\n                          [zTable]=\"$any(table)\"\n                          [zResetVersion]=\"filterResetVersion()\"\n                          [zSortingState]=\"sorting()\"\n                          [zEnableMultiSort]=\"zConfig().enableMultiSort ?? true\" />\n                      }\n                    </div>\n                  }\n                  @if (header.column.getCanResize() && zConfig().enableColumnResizing !== false) {\n                    <div\n                      class=\"z-resizer\"\n                      [class.z-is-resizing]=\"header.column.getIsResizing()\"\n                      [class.z-resizer-left]=\"\n                        header.column.getIsPinned() === 'right' || header.column.getIsLastColumn()\n                      \"\n                      (dblclick)=\"header.column.resetSize()\"\n                      [zTableResize]=\"header\"></div>\n                  }\n                </th>\n              }\n            }\n            @if (virtualLeftSpacerWidth() > 0) {\n              <th\n                class=\"z-virtual-column-spacer z-virtual-header-spacer z-virtual-left-spacer pointer-events-none p-0\"\n                [style.width.px]=\"virtualRenderedLeftSpacerWidth()\"></th>\n            }\n            @for (header of virtualCenterHeaderRow(); track header.id) {\n              @let rowSpan = header | zTableSpan: zConfig().columns : 'headerRowSpan';\n              @let shouldRender = header | zTableCellRender: virtualCenterHeaderRow() : zConfig().columns : 'header';\n              @if (rowSpan && shouldRender) {\n                <th\n                  [attr.id]=\"header.column.id\"\n                  [class]=\"\n                    (header.column.id | zTableColumnConfig: zConfig().columns : 'headerClass') +\n                    ' ' +\n                    (header.column.id | zTableColumnConfig: zConfig().columns : 'headerAlignClass')\n                  \"\n                  [style]=\"header.column.id | zTableColumnConfig: zConfig().columns : 'headerStyle'\"\n                  [class.z-col-drag]=\"header.column.id === 'rowDrag'\"\n                  [class.z-col-select]=\"header.column.id === 'select'\"\n                  [class.z-col-expand]=\"header.column.id === 'expand'\"\n                  [class.z-col-actions]=\"\n                    header.column.id === 'actions' || header.column.id === actionColumnInfo()?.columnId\n                  \"\n                  [attr.rowspan]=\"rowSpan\"\n                  [attr.colspan]=\"header | zTableSpan: zConfig().columns : 'headerColSpan'\">\n                  @if (header.column.id === 'rowDrag') {\n                    <div class=\"flex items-center justify-center\">\n                      <z-icon zType=\"lucideGripVertical\" zSize=\"14\" class=\"text-muted-foreground opacity-70\" />\n                    </div>\n                  } @else if (header.column.id === 'select') {\n                    <div\n                      class=\"flex items-center\"\n                      [class.justify-center]=\"\n                        (header.column.id | zTableColumnConfig: zConfig().columns : 'headerAlignClass') ===\n                        'text-center'\n                      \"\n                      [class.justify-end]=\"\n                        (header.column.id | zTableColumnConfig: zConfig().columns : 'headerAlignClass') === 'text-right'\n                      \">\n                      <z-checkbox\n                        [zChecked]=\"canUseRowSelection() && table.getIsAllRowsSelected()\"\n                        [zIndeterminate]=\"\n                          canUseRowSelection() && table.getIsSomeRowsSelected() && !table.getIsAllRowsSelected()\n                        \"\n                        [zDisabled]=\"!canUseRowSelection()\"\n                        (zChange)=\"canUseRowSelection() && table.toggleAllRowsSelected()\" />\n                    </div>\n                  } @else if (header.column.id === 'expand') {\n                    <div\n                      class=\"flex items-center\"\n                      [class.justify-center]=\"\n                        (header.column.id | zTableColumnConfig: zConfig().columns : 'headerAlignClass') ===\n                        'text-center'\n                      \"\n                      [class.justify-end]=\"\n                        (header.column.id | zTableColumnConfig: zConfig().columns : 'headerAlignClass') === 'text-right'\n                      \">\n                      <button\n                        type=\"button\"\n                        (click)=\"table.toggleAllRowsExpanded()\"\n                        class=\"hover:bg-muted flex h-6 w-6 cursor-pointer items-center justify-center rounded\">\n                        <z-icon\n                          zType=\"lucideChevronRight\"\n                          zSize=\"14\"\n                          class=\"transition-transform duration-200\"\n                          [class.rotate-90]=\"table.getIsSomeRowsExpanded()\" />\n                      </button>\n                    </div>\n                  } @else {\n                    <div\n                      class=\"flex w-full items-center gap-1\"\n                      [class.justify-center]=\"\n                        (header.column.id | zTableColumnConfig: zConfig().columns : 'headerAlignClass') ===\n                        'text-center'\n                      \"\n                      [class.justify-end]=\"\n                        (header.column.id | zTableColumnConfig: zConfig().columns : 'headerAlignClass') === 'text-right'\n                      \">\n                      @let columnEnableOrdering =\n                        header.column.id | zTableColumnConfig: zConfig().columns : 'enableOrdering';\n                      @let columnEnablePinning =\n                        header.column.id | zTableColumnConfig: zConfig().columns : 'enablePinning';\n                      @let effectiveEnableOrdering = columnEnableOrdering || zConfig().enableColumnOrdering;\n                      @let effectiveEnablePinning = columnEnablePinning ?? zConfig().enableColumnPinning ?? true;\n                      <ng-template #colOptionsPopoverContent>\n                        <div class=\"flex flex-col gap-1 py-1\">\n                          @if (effectiveEnableOrdering) {\n                            <button\n                              type=\"button\"\n                              [disabled]=\"isFirstMovableColumn(header.column.id) || header.column.getIsPinned()\"\n                              (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                              (click)=\"moveColumnLeft(header.column.id); colOptionsPopover.hideImmediate()\"\n                              class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none disabled:pointer-events-none disabled:opacity-40\">\n                              <z-icon zType=\"lucideArrowLeft\" zSize=\"14\" />\n                              <span>{{ 'i18n_z_ui_table_move_left' | translate }}</span>\n                            </button>\n                            <button\n                              type=\"button\"\n                              [disabled]=\"isLastMovableColumn(header.column.id) || header.column.getIsPinned()\"\n                              (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                              (click)=\"moveColumnRight(header.column.id); colOptionsPopover.hideImmediate()\"\n                              class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none disabled:pointer-events-none disabled:opacity-40\">\n                              <z-icon zType=\"lucideArrowRight\" zSize=\"14\" />\n                              <span>{{ 'i18n_z_ui_table_move_right' | translate }}</span>\n                            </button>\n                          }\n                          @if (effectiveEnableOrdering && header.column.getCanPin() && effectiveEnablePinning) {\n                            <div class=\"border-border my-0.5 border-t\"></div>\n                          }\n                          @if (header.column.getCanPin() && effectiveEnablePinning) {\n                            @if (header.column.getIsPinned() !== 'left') {\n                              <button\n                                type=\"button\"\n                                [disabled]=\"!pinAvailabilityMap()[header.column.id]?.left\"\n                                (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                                (click)=\"handleColumnPin(header.column.id, 'left'); colOptionsPopover.hideImmediate()\"\n                                class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none disabled:pointer-events-none disabled:opacity-40\">\n                                <z-icon zType=\"lucidePin\" zSize=\"14\" class=\"rotate-90\" />\n                                <span>{{ 'i18n_z_ui_table_pin_left' | translate }}</span>\n                              </button>\n                            }\n                            @if (header.column.getIsPinned() !== 'right') {\n                              <button\n                                type=\"button\"\n                                [disabled]=\"!pinAvailabilityMap()[header.column.id]?.right\"\n                                (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                                (click)=\"handleColumnPin(header.column.id, 'right'); colOptionsPopover.hideImmediate()\"\n                                class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none disabled:pointer-events-none disabled:opacity-40\">\n                                <z-icon zType=\"lucidePin\" zSize=\"14\" class=\"-rotate-90\" />\n                                <span>{{ 'i18n_z_ui_table_pin_right' | translate }}</span>\n                              </button>\n                            }\n                            @if (\n                              header.column.getIsPinned() &&\n                              header.column.id !== 'expand' &&\n                              header.column.id !== actionColumnInfo()?.columnId\n                            ) {\n                              <button\n                                type=\"button\"\n                                (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                                (click)=\"handleColumnPin(header.column.id, false); colOptionsPopover.hideImmediate()\"\n                                class=\"z-column-menu-item text-destructive hover:bg-destructive/10 focus:bg-destructive/10 mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none\">\n                                <z-icon zType=\"lucideX\" zSize=\"14\" />\n                                <span>{{ 'i18n_z_ui_table_unpin' | translate }}</span>\n                              </button>\n                            }\n                          }\n                          @if (groupingHeaderMenuMap()[header.id]) {\n                            @let isActiveGroupingColumn = groupingColumnMap()[header.column.id];\n                            <div class=\"border-border my-0.5 border-t\"></div>\n                            @if (!isActiveGroupingColumn) {\n                              <button\n                                type=\"button\"\n                                (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                                (click)=\"groupByColumn(header.column.id); colOptionsPopover.hideImmediate()\"\n                                class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none\">\n                                <z-icon zType=\"lucideRows3\" zSize=\"14\" class=\"text-muted-foreground shrink-0\" />\n                                <span>{{ 'i18n_z_ui_table_group_by_column' | translate }}</span>\n                              </button>\n                            }\n                            @let groupMenuStateBoundary = isActiveGroupingColumn;\n                            @if (groupMenuStateBoundary) {\n                              <button\n                                type=\"button\"\n                                (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                                (click)=\"removeGroupingColumn(header.column.id); colOptionsPopover.hideImmediate()\"\n                                class=\"z-column-menu-item text-destructive hover:bg-destructive/10 focus:bg-destructive/10 mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none\">\n                                <z-icon zType=\"lucideUngroup\" zSize=\"14\" />\n                                <span>{{ 'i18n_z_ui_table_clear_grouping' | translate }}</span>\n                              </button>\n                            }\n                          }\n                          <div class=\"border-border my-0.5 border-t\"></div>\n                          <button\n                            type=\"button\"\n                            (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                            (click)=\"autosizeColumn(header.column.id); colOptionsPopover.hideImmediate()\"\n                            class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none\">\n                            <z-icon zType=\"lucideChevronsLeftRight\" zSize=\"14\" class=\"text-muted-foreground shrink-0\" />\n                            <span>{{ 'i18n_z_ui_table_autosize_column' | translate }}</span>\n                          </button>\n                          <button\n                            type=\"button\"\n                            (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                            (click)=\"autosizeAllColumns(); colOptionsPopover.hideImmediate()\"\n                            class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none\">\n                            <z-icon zType=\"lucideColumns3\" zSize=\"14\" class=\"text-muted-foreground shrink-0\" />\n                            <span>{{ 'i18n_z_ui_table_autosize_all_columns' | translate }}</span>\n                          </button>\n                          <button\n                            type=\"button\"\n                            (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                            (click)=\"resetColumns(); colOptionsPopover.hideImmediate()\"\n                            class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none\">\n                            <z-icon zType=\"lucideRotateCcw\" zSize=\"14\" class=\"text-muted-foreground shrink-0\" />\n                            <span>{{ 'i18n_z_ui_table_reset_columns' | translate }}</span>\n                          </button>\n                          @if (hideableColumns().length > 0) {\n                            <button\n                              type=\"button\"\n                              (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                              (click)=\"openSettingsDrawerFromColumnMenu(colOptionsPopover)\"\n                              class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none\">\n                              <z-icon zType=\"lucideColumns3\" zSize=\"14\" class=\"text-muted-foreground shrink-0\" />\n                              <span class=\"truncate\">\n                                {{ 'i18n_z_ui_table_choose_columns' | translate }}\n                              </span>\n                            </button>\n                          }\n                        </div>\n                      </ng-template>\n\n                      @let columnEnableHeaderMenu =\n                        header.column.id | zTableColumnConfig: zConfig().columns : 'enableHeaderMenu';\n                      @let hasColumnOptions =\n                        header.column.id !== 'actionRowPin' &&\n                        columnEnableHeaderMenu !== false &&\n                        (groupingHeaderMenuMap()[header.id] ||\n                          (header.column.getCanPin() && effectiveEnablePinning) ||\n                          effectiveEnableOrdering ||\n                          hideableColumns().length > 0);\n                      <div\n                        class=\"z-header-text-wrapper inline-flex max-w-full items-center gap-1 rounded px-1.5 py-1\"\n                        [class.cursor-pointer]=\"hasColumnOptions\"\n                        [class.z-has-options]=\"hasColumnOptions\"\n                        [attr.z-popover]=\"hasColumnOptions ? '' : null\"\n                        #colOptionsPopover=\"zPopover\"\n                        #headerTextWrapper\n                        z-popover\n                        [zPopoverContent]=\"hasColumnOptions ? colOptionsPopoverContent : null\"\n                        zTrigger=\"click\"\n                        zPosition=\"bottom\"\n                        [zOffset]=\"5\"\n                        (zOutsideClick)=\"hideColumnPopoversOnOutsideClick(colOptionsPopover)\"\n                        (mousedown)=\"$event.preventDefault()\"\n                        [attr.tabindex]=\"hasColumnOptions ? 0 : null\"\n                        [attr.role]=\"hasColumnOptions ? 'button' : null\"\n                        [attr.aria-haspopup]=\"hasColumnOptions ? 'menu' : null\">\n                        <ng-container\n                          *flexRender=\"header.column.columnDef.header; props: header.getContext(); let headerContent\">\n                          @if (headerContent | zTableIsTemplateRef) {\n                            <div\n                              class=\"z-template-content\"\n                              [class]=\"header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentClass'\"\n                              [ngStyle]=\"\n                                header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentStyle'\n                              \">\n                              <ng-container\n                                *ngTemplateOutlet=\"headerContent; context: { $implicit: header.getContext() }\" />\n                            </div>\n                          } @else if (headerContent | zTableHasIcon) {\n                            <z-table-icon-text\n                              class=\"min-w-0 truncate\"\n                              [zText]=\"headerContent\"\n                              [zTooltip]=\"header.column.id | zTableColumnConfig: zConfig().columns : 'headerTooltip'\"\n                              [zTriggerElement]=\"headerTextWrapper\"\n                              [class]=\"header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentClass'\"\n                              [ngStyle]=\"\n                                header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentStyle'\n                              \" />\n                          } @else {\n                            <span\n                              class=\"z-table-cell-text\"\n                              z-tooltip\n                              [zContent]=\"\n                                (header.column.id | zTableColumnConfig: zConfig().columns : 'headerTooltip') ||\n                                headerContent\n                              \"\n                              [zTriggerElement]=\"headerTextWrapper\"\n                              [innerHTML]=\"headerContent | translate | zSafeHtml\"\n                              [class]=\"header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentClass'\"\n                              [ngStyle]=\"\n                                header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentStyle'\n                              \"></span>\n                          }\n                        </ng-container>\n                        @if (hasColumnOptions) {\n                          <z-icon zType=\"lucideChevronDown\" zSize=\"15\" class=\"text-muted-foreground shrink-0\" />\n                        }\n                      </div>\n                      @if ((header.column.getCanSort() && !hasBodyRowSpan()) || header.column.getCanFilter()) {\n                        <z-table-filter\n                          [zColumn]=\"$any(header.column)\"\n                          [zTable]=\"$any(table)\"\n                          [zResetVersion]=\"filterResetVersion()\"\n                          [zSortingState]=\"sorting()\"\n                          [zEnableMultiSort]=\"zConfig().enableMultiSort ?? true\" />\n                      }\n                    </div>\n                  }\n                  @if (header.column.getCanResize() && zConfig().enableColumnResizing !== false) {\n                    <div\n                      class=\"z-resizer\"\n                      [class.z-is-resizing]=\"header.column.getIsResizing()\"\n                      [class.z-resizer-left]=\"\n                        header.column.getIsPinned() === 'right' || header.column.getIsLastColumn()\n                      \"\n                      (dblclick)=\"header.column.resetSize()\"\n                      [zTableResize]=\"header\"></div>\n                  }\n                </th>\n              }\n            }\n            @if (virtualRightSpacerWidth() > 0) {\n              <th\n                class=\"z-virtual-column-spacer z-virtual-header-spacer z-virtual-right-spacer pointer-events-none p-0\"\n                [style.width.px]=\"virtualRenderedRightSpacerWidth()\"></th>\n            }\n            @for (header of rightHeaderRow(); track header.id) {\n              @let rowSpan = header | zTableSpan: zConfig().columns : 'headerRowSpan';\n              @let shouldRender = header | zTableCellRender: rightHeaderRow() : zConfig().columns : 'header';\n              @if (rowSpan && shouldRender) {\n                <th\n                  [attr.id]=\"header.column.id\"\n                  [ngStyle]=\"\n                    header.column\n                      | zTablePinningStyles\n                        : header\n                        : 'header'\n                        : table\n                        : zConfig().columns\n                        : columnSizingInfo()\n                        : colDomWidthMap()\n                        : isColumnPinningActive\n                  \"\n                  [class]=\"\n                    (header.column.id | zTableColumnConfig: zConfig().columns : 'headerClass') +\n                    ' ' +\n                    (header.column.id | zTableColumnConfig: zConfig().columns : 'headerAlignClass')\n                  \"\n                  [style]=\"header.column.id | zTableColumnConfig: zConfig().columns : 'headerStyle'\"\n                  [class.z-sticky-left]=\"\n                    isColumnPinningActive && (header | zTableCellPin: 'isLeftPinned' : zConfig().columns)\n                  \"\n                  [class.z-sticky-right]=\"\n                    isColumnPinningActive && (header | zTableCellPin: 'isRightPinned' : zConfig().columns)\n                  \"\n                  [class.z-sticky-left-last]=\"\n                    isColumnPinningActive && (header | zTableCellPin: 'isLastLeftPinned' : zConfig().columns)\n                  \"\n                  [class.z-sticky-right-first]=\"\n                    isColumnPinningActive && (header | zTableCellPin: 'isFirstRightPinned' : zConfig().columns)\n                  \"\n                  [class.z-sticky-right-last]=\"\n                    isColumnPinningActive && (header | zTableCellPin: 'isLastRightPinned' : zConfig().columns)\n                  \"\n                  [class.z-at-left-edge]=\"header | zTableCellOffset: orderedLeafColumns()\"\n                  [class.z-col-drag]=\"header.column.id === 'rowDrag'\"\n                  [class.z-col-select]=\"header.column.id === 'select'\"\n                  [class.z-col-expand]=\"header.column.id === 'expand'\"\n                  [class.z-col-actions]=\"\n                    header.column.id === 'actions' || header.column.id === actionColumnInfo()?.columnId\n                  \"\n                  [attr.rowspan]=\"rowSpan\"\n                  [attr.colspan]=\"header | zTableSpan: zConfig().columns : 'headerColSpan'\">\n                  @if (header.column.id === 'rowDrag') {\n                    <div class=\"flex items-center justify-center\">\n                      <z-icon zType=\"lucideGripVertical\" zSize=\"14\" class=\"text-muted-foreground opacity-70\" />\n                    </div>\n                  } @else if (header.column.id === 'select') {\n                    <!-- Header Checkbox -->\n                    <div\n                      class=\"flex items-center\"\n                      [class.justify-center]=\"\n                        (header.column.id | zTableColumnConfig: zConfig().columns : 'headerAlignClass') ===\n                        'text-center'\n                      \"\n                      [class.justify-end]=\"\n                        (header.column.id | zTableColumnConfig: zConfig().columns : 'headerAlignClass') === 'text-right'\n                      \">\n                      <z-checkbox\n                        [zChecked]=\"canUseRowSelection() && table.getIsAllRowsSelected()\"\n                        [zIndeterminate]=\"\n                          canUseRowSelection() && table.getIsSomeRowsSelected() && !table.getIsAllRowsSelected()\n                        \"\n                        [zDisabled]=\"!canUseRowSelection()\"\n                        (zChange)=\"canUseRowSelection() && table.toggleAllRowsSelected()\" />\n                    </div>\n                  } @else if (header.column.id === 'expand') {\n                    <!-- Expand All Button -->\n                    <div\n                      class=\"flex items-center\"\n                      [class.justify-center]=\"\n                        (header.column.id | zTableColumnConfig: zConfig().columns : 'headerAlignClass') ===\n                        'text-center'\n                      \"\n                      [class.justify-end]=\"\n                        (header.column.id | zTableColumnConfig: zConfig().columns : 'headerAlignClass') === 'text-right'\n                      \">\n                      <button\n                        type=\"button\"\n                        (click)=\"table.toggleAllRowsExpanded()\"\n                        class=\"hover:bg-muted flex h-6 w-6 cursor-pointer items-center justify-center rounded\">\n                        <z-icon\n                          zType=\"lucideChevronRight\"\n                          zSize=\"14\"\n                          class=\"transition-transform duration-200\"\n                          [class.rotate-90]=\"table.getIsSomeRowsExpanded()\" />\n                      </button>\n                    </div>\n                  } @else {\n                    <!-- Header Content with Sort and Pin -->\n                    <div\n                      class=\"flex w-full items-center gap-1\"\n                      [class.justify-center]=\"\n                        (header.column.id | zTableColumnConfig: zConfig().columns : 'headerAlignClass') ===\n                        'text-center'\n                      \"\n                      [class.justify-end]=\"\n                        (header.column.id | zTableColumnConfig: zConfig().columns : 'headerAlignClass') === 'text-right'\n                      \">\n                      <!-- Column Options Popover Template -->\n                      @let columnEnableOrdering =\n                        header.column.id | zTableColumnConfig: zConfig().columns : 'enableOrdering';\n                      @let columnEnablePinning =\n                        header.column.id | zTableColumnConfig: zConfig().columns : 'enablePinning';\n                      @let effectiveEnableOrdering = columnEnableOrdering || zConfig().enableColumnOrdering;\n                      @let effectiveEnablePinning = columnEnablePinning ?? zConfig().enableColumnPinning ?? true;\n                      <ng-template #colOptionsPopoverContent>\n                        <div class=\"flex flex-col gap-1 py-1\">\n                          @if (effectiveEnableOrdering) {\n                            <button\n                              type=\"button\"\n                              [disabled]=\"isFirstMovableColumn(header.column.id) || header.column.getIsPinned()\"\n                              (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                              (click)=\"moveColumnLeft(header.column.id); colOptionsPopover.hideImmediate()\"\n                              class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none disabled:pointer-events-none disabled:opacity-40\">\n                              <z-icon zType=\"lucideArrowLeft\" zSize=\"14\" />\n                              <span>{{ 'i18n_z_ui_table_move_left' | translate }}</span>\n                            </button>\n                            <button\n                              type=\"button\"\n                              [disabled]=\"isLastMovableColumn(header.column.id) || header.column.getIsPinned()\"\n                              (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                              (click)=\"moveColumnRight(header.column.id); colOptionsPopover.hideImmediate()\"\n                              class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none disabled:pointer-events-none disabled:opacity-40\">\n                              <z-icon zType=\"lucideArrowRight\" zSize=\"14\" />\n                              <span>{{ 'i18n_z_ui_table_move_right' | translate }}</span>\n                            </button>\n                          }\n                          @if (effectiveEnableOrdering && header.column.getCanPin() && effectiveEnablePinning) {\n                            <div class=\"border-border my-0.5 border-t\"></div>\n                          }\n                          @if (header.column.getCanPin() && effectiveEnablePinning) {\n                            @if (header.column.getIsPinned() !== 'left') {\n                              <button\n                                type=\"button\"\n                                [disabled]=\"!pinAvailabilityMap()[header.column.id]?.left\"\n                                (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                                (click)=\"handleColumnPin(header.column.id, 'left'); colOptionsPopover.hideImmediate()\"\n                                class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none disabled:pointer-events-none disabled:opacity-40\">\n                                <z-icon zType=\"lucidePin\" zSize=\"14\" class=\"rotate-90\" />\n                                <span>{{ 'i18n_z_ui_table_pin_left' | translate }}</span>\n                              </button>\n                            }\n                            @if (header.column.getIsPinned() !== 'right') {\n                              <button\n                                type=\"button\"\n                                [disabled]=\"!pinAvailabilityMap()[header.column.id]?.right\"\n                                (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                                (click)=\"handleColumnPin(header.column.id, 'right'); colOptionsPopover.hideImmediate()\"\n                                class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none disabled:pointer-events-none disabled:opacity-40\">\n                                <z-icon zType=\"lucidePin\" zSize=\"14\" class=\"-rotate-90\" />\n                                <span>{{ 'i18n_z_ui_table_pin_right' | translate }}</span>\n                              </button>\n                            }\n                            @if (\n                              header.column.getIsPinned() &&\n                              header.column.id !== 'expand' &&\n                              header.column.id !== actionColumnInfo()?.columnId\n                            ) {\n                              <button\n                                type=\"button\"\n                                (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                                (click)=\"handleColumnPin(header.column.id, false); colOptionsPopover.hideImmediate()\"\n                                class=\"z-column-menu-item text-destructive hover:bg-destructive/10 focus:bg-destructive/10 mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none\">\n                                <z-icon zType=\"lucideX\" zSize=\"14\" />\n                                <span>{{ 'i18n_z_ui_table_unpin' | translate }}</span>\n                              </button>\n                            }\n                          }\n                          @if (groupingHeaderMenuMap()[header.id]) {\n                            @let isActiveGroupingColumn = groupingColumnMap()[header.column.id];\n                            <div class=\"border-border my-0.5 border-t\"></div>\n                            @if (!isActiveGroupingColumn) {\n                              <button\n                                type=\"button\"\n                                (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                                (click)=\"groupByColumn(header.column.id); colOptionsPopover.hideImmediate()\"\n                                class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none\">\n                                <z-icon zType=\"lucideRows3\" zSize=\"14\" class=\"text-muted-foreground shrink-0\" />\n                                <span>{{ 'i18n_z_ui_table_group_by_column' | translate }}</span>\n                              </button>\n                            }\n                            @let groupMenuStateBoundary = isActiveGroupingColumn;\n                            @if (groupMenuStateBoundary) {\n                              <button\n                                type=\"button\"\n                                (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                                (click)=\"removeGroupingColumn(header.column.id); colOptionsPopover.hideImmediate()\"\n                                class=\"z-column-menu-item text-destructive hover:bg-destructive/10 focus:bg-destructive/10 mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none\">\n                                <z-icon zType=\"lucideUngroup\" zSize=\"14\" />\n                                <span>{{ 'i18n_z_ui_table_clear_grouping' | translate }}</span>\n                              </button>\n                            }\n                          }\n                          <div class=\"border-border my-0.5 border-t\"></div>\n                          <button\n                            type=\"button\"\n                            (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                            (click)=\"autosizeColumn(header.column.id); colOptionsPopover.hideImmediate()\"\n                            class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none\">\n                            <z-icon zType=\"lucideChevronsLeftRight\" zSize=\"14\" class=\"text-muted-foreground shrink-0\" />\n                            <span>{{ 'i18n_z_ui_table_autosize_column' | translate }}</span>\n                          </button>\n                          <button\n                            type=\"button\"\n                            (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                            (click)=\"autosizeAllColumns(); colOptionsPopover.hideImmediate()\"\n                            class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none\">\n                            <z-icon zType=\"lucideColumns3\" zSize=\"14\" class=\"text-muted-foreground shrink-0\" />\n                            <span>{{ 'i18n_z_ui_table_autosize_all_columns' | translate }}</span>\n                          </button>\n                          <button\n                            type=\"button\"\n                            (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                            (click)=\"resetColumns(); colOptionsPopover.hideImmediate()\"\n                            class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none\">\n                            <z-icon zType=\"lucideRotateCcw\" zSize=\"14\" class=\"text-muted-foreground shrink-0\" />\n                            <span>{{ 'i18n_z_ui_table_reset_columns' | translate }}</span>\n                          </button>\n                          @if (hideableColumns().length > 0) {\n                            <button\n                              type=\"button\"\n                              (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                              (click)=\"openSettingsDrawerFromColumnMenu(colOptionsPopover)\"\n                              class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none\">\n                              <z-icon zType=\"lucideColumns3\" zSize=\"14\" class=\"text-muted-foreground shrink-0\" />\n                              <span class=\"truncate\">\n                                {{ 'i18n_z_ui_table_choose_columns' | translate }}\n                              </span>\n                            </button>\n                          }\n                        </div>\n                      </ng-template>\n\n                      @let columnEnableHeaderMenu =\n                        header.column.id | zTableColumnConfig: zConfig().columns : 'enableHeaderMenu';\n                      @let hasColumnOptions =\n                        header.column.id !== 'actionRowPin' &&\n                        columnEnableHeaderMenu !== false &&\n                        (groupingHeaderMenuMap()[header.id] ||\n                          (header.column.getCanPin() && effectiveEnablePinning) ||\n                          effectiveEnableOrdering ||\n                          hideableColumns().length > 0);\n                      <div\n                        class=\"z-header-text-wrapper inline-flex max-w-full items-center gap-1 rounded px-1.5 py-1\"\n                        [class.cursor-pointer]=\"hasColumnOptions\"\n                        [class.z-has-options]=\"hasColumnOptions\"\n                        [attr.z-popover]=\"hasColumnOptions ? '' : null\"\n                        #colOptionsPopover=\"zPopover\"\n                        #headerTextWrapper\n                        z-popover\n                        [zPopoverContent]=\"hasColumnOptions ? colOptionsPopoverContent : null\"\n                        zTrigger=\"click\"\n                        zPosition=\"bottom\"\n                        [zOffset]=\"5\"\n                        (zOutsideClick)=\"hideColumnPopoversOnOutsideClick(colOptionsPopover)\"\n                        (mousedown)=\"$event.preventDefault()\"\n                        [attr.tabindex]=\"hasColumnOptions ? 0 : null\"\n                        [attr.role]=\"hasColumnOptions ? 'button' : null\"\n                        [attr.aria-haspopup]=\"hasColumnOptions ? 'menu' : null\">\n                        <ng-container\n                          *flexRender=\"header.column.columnDef.header; props: header.getContext(); let headerContent\">\n                          @if (headerContent | zTableIsTemplateRef) {\n                            <div\n                              class=\"z-template-content\"\n                              [class]=\"header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentClass'\"\n                              [ngStyle]=\"header.column.id | zTableColumnConfig: zConfig().columns : 'headerStyle'\">\n                              <ng-container\n                                *ngTemplateOutlet=\"headerContent; context: { $implicit: header.getContext() }\" />\n                            </div>\n                          } @else if (headerContent | zTableHasIcon) {\n                            <z-table-icon-text\n                              class=\"min-w-0 truncate\"\n                              [zText]=\"headerContent\"\n                              [zTooltip]=\"header.column.id | zTableColumnConfig: zConfig().columns : 'headerTooltip'\"\n                              [zTriggerElement]=\"headerTextWrapper\"\n                              [class]=\"header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentClass'\"\n                              [ngStyle]=\"\n                                header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentStyle'\n                              \" />\n                          } @else {\n                            <span\n                              class=\"z-table-cell-text\"\n                              z-tooltip\n                              [zContent]=\"\n                                (header.column.id | zTableColumnConfig: zConfig().columns : 'headerTooltip') ||\n                                headerContent\n                              \"\n                              [zTriggerElement]=\"headerTextWrapper\"\n                              [innerHTML]=\"headerContent | translate | zSafeHtml\"\n                              [class]=\"header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentClass'\"\n                              [ngStyle]=\"\n                                header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentStyle'\n                              \"></span>\n                          }\n                        </ng-container>\n                        <!-- Dropdown indicator when has options (between text and sort icon) -->\n                        @if (hasColumnOptions) {\n                          <z-icon zType=\"lucideChevronDown\" zSize=\"15\" class=\"text-muted-foreground shrink-0\" />\n                        }\n                      </div>\n                      <!-- Sort Icon (outside wrapper, no hover background) -->\n                      @if ((header.column.getCanSort() && !hasBodyRowSpan()) || header.column.getCanFilter()) {\n                        <z-table-filter\n                          [zColumn]=\"$any(header.column)\"\n                          [zTable]=\"$any(table)\"\n                          [zResetVersion]=\"filterResetVersion()\"\n                          [zSortingState]=\"sorting()\"\n                          [zEnableMultiSort]=\"zConfig().enableMultiSort ?? true\" />\n                      }\n                    </div>\n                  }\n                  <!-- Column Resizer -->\n                  @if (header.column.getCanResize() && zConfig().enableColumnResizing !== false) {\n                    <div\n                      class=\"z-resizer\"\n                      [class.z-is-resizing]=\"header.column.getIsResizing()\"\n                      [class.z-resizer-left]=\"\n                        header.column.getIsPinned() === 'right' || header.column.getIsLastColumn()\n                      \"\n                      (dblclick)=\"header.column.resetSize()\"\n                      [zTableResize]=\"header\"></div>\n                  }\n                </th>\n              }\n            }\n          </tr>\n        } @else {\n          @for (headerGroup of orderedHeaderGroups(); track headerGroup.id) {\n            <tr>\n              @for (header of headerGroup.headers; track header.id) {\n                @let rowSpan = header | zTableSpan: zConfig().columns : 'headerRowSpan';\n                @let shouldRender = header | zTableCellRender: headerGroup.headers : zConfig().columns : 'header';\n                @if (rowSpan && shouldRender) {\n                  <th\n                    [attr.id]=\"header.column.id\"\n                    [ngStyle]=\"\n                      header.column\n                        | zTablePinningStyles\n                          : header\n                          : 'header'\n                          : table\n                          : zConfig().columns\n                          : columnSizingInfo()\n                          : colDomWidthMap()\n                          : isColumnPinningActive\n                    \"\n                    [class]=\"\n                      (header.column.id | zTableColumnConfig: zConfig().columns : 'headerClass') +\n                      ' ' +\n                      (header.column.id | zTableColumnConfig: zConfig().columns : 'headerAlignClass')\n                    \"\n                    [style]=\"header.column.id | zTableColumnConfig: zConfig().columns : 'headerStyle'\"\n                    [class.z-sticky-left]=\"\n                      isColumnPinningActive && (header | zTableCellPin: 'isLeftPinned' : zConfig().columns)\n                    \"\n                    [class.z-sticky-right]=\"\n                      isColumnPinningActive && (header | zTableCellPin: 'isRightPinned' : zConfig().columns)\n                    \"\n                    [class.z-sticky-left-last]=\"\n                      isColumnPinningActive && (header | zTableCellPin: 'isLastLeftPinned' : zConfig().columns)\n                    \"\n                    [class.z-sticky-right-first]=\"\n                      isColumnPinningActive && (header | zTableCellPin: 'isFirstRightPinned' : zConfig().columns)\n                    \"\n                    [class.z-sticky-right-last]=\"\n                      isColumnPinningActive && (header | zTableCellPin: 'isLastRightPinned' : zConfig().columns)\n                    \"\n                    [class.z-at-left-edge]=\"header | zTableCellOffset: orderedLeafColumns()\"\n                    [class.z-col-drag]=\"header.column.id === 'rowDrag'\"\n                    [class.z-col-select]=\"header.column.id === 'select'\"\n                    [class.z-col-expand]=\"header.column.id === 'expand'\"\n                    [class.z-col-actions]=\"\n                      header.column.id === 'actions' || header.column.id === actionColumnInfo()?.columnId\n                    \"\n                    [attr.rowspan]=\"rowSpan\"\n                    [attr.colspan]=\"header | zTableSpan: zConfig().columns : 'headerColSpan'\">\n                    @if (header.column.id === 'rowDrag') {\n                      <div class=\"flex items-center justify-center\">\n                        <z-icon zType=\"lucideGripVertical\" zSize=\"14\" class=\"text-muted-foreground opacity-70\" />\n                      </div>\n                    } @else if (header.column.id === 'select') {\n                      <div\n                        class=\"flex items-center\"\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                        <z-checkbox\n                          [zChecked]=\"canUseRowSelection() && table.getIsAllRowsSelected()\"\n                          [zIndeterminate]=\"\n                            canUseRowSelection() && table.getIsSomeRowsSelected() && !table.getIsAllRowsSelected()\n                          \"\n                          [zDisabled]=\"!canUseRowSelection()\"\n                          (zChange)=\"canUseRowSelection() && table.toggleAllRowsSelected()\" />\n                      </div>\n                    } @else if (header.column.id === 'expand') {\n                      <div\n                        class=\"flex items-center\"\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                        <button\n                          type=\"button\"\n                          (click)=\"table.toggleAllRowsExpanded()\"\n                          class=\"hover:bg-muted flex h-6 w-6 cursor-pointer items-center justify-center rounded\">\n                          <z-icon\n                            zType=\"lucideChevronRight\"\n                            zSize=\"14\"\n                            class=\"transition-transform duration-200\"\n                            [class.rotate-90]=\"table.getIsSomeRowsExpanded()\" />\n                        </button>\n                      </div>\n                    } @else {\n                      <div\n                        class=\"flex w-full items-center gap-1\"\n                        [class.justify-center]=\"\n                          (header.column.id | zTableColumnConfig: zConfig().columns : 'headerAlignClass') ===\n                          'text-center'\n                        \"\n                        [class.justify-end]=\"\n                          (header.column.id | zTableColumnConfig: zConfig().columns : 'headerAlignClass') ===\n                          'text-right'\n                        \">\n                        @let columnEnableOrdering =\n                          header.column.id | zTableColumnConfig: zConfig().columns : 'enableOrdering';\n                        @let columnEnablePinning =\n                          header.column.id | zTableColumnConfig: zConfig().columns : 'enablePinning';\n                        @let effectiveEnableOrdering = columnEnableOrdering || zConfig().enableColumnOrdering;\n                        @let effectiveEnablePinning = columnEnablePinning ?? zConfig().enableColumnPinning ?? true;\n                        <ng-template #colOptionsPopoverContent>\n                          <div class=\"flex flex-col gap-1 py-1\">\n                            @if (effectiveEnableOrdering) {\n                              <button\n                                type=\"button\"\n                                [disabled]=\"isFirstMovableColumn(header.column.id) || header.column.getIsPinned()\"\n                                (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                                (click)=\"moveColumnLeft(header.column.id); colOptionsPopover.hideImmediate()\"\n                                class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none disabled:pointer-events-none disabled:opacity-40\">\n                                <z-icon zType=\"lucideArrowLeft\" zSize=\"15\" />\n                                <span>{{ 'i18n_z_ui_table_move_left' | translate }}</span>\n                              </button>\n                              <button\n                                type=\"button\"\n                                [disabled]=\"isLastMovableColumn(header.column.id) || header.column.getIsPinned()\"\n                                (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                                (click)=\"moveColumnRight(header.column.id); colOptionsPopover.hideImmediate()\"\n                                class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none disabled:pointer-events-none disabled:opacity-40\">\n                                <z-icon zType=\"lucideArrowRight\" zSize=\"15\" />\n                                <span>{{ 'i18n_z_ui_table_move_right' | translate }}</span>\n                              </button>\n                            }\n                            @if (effectiveEnableOrdering && header.column.getCanPin() && effectiveEnablePinning) {\n                              <div class=\"border-border my-0.5 border-t\"></div>\n                            }\n                            @if (header.column.getCanPin() && effectiveEnablePinning) {\n                              @if (header.column.getIsPinned() !== 'left') {\n                                <button\n                                  type=\"button\"\n                                  [disabled]=\"!pinAvailabilityMap()[header.column.id]?.left\"\n                                  (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                                  (click)=\"handleColumnPin(header.column.id, 'left'); colOptionsPopover.hideImmediate()\"\n                                  class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none disabled:pointer-events-none disabled:opacity-40\">\n                                  <z-icon zType=\"lucidePin\" zSize=\"15\" class=\"rotate-90\" />\n                                  <span>{{ 'i18n_z_ui_table_pin_left' | translate }}</span>\n                                </button>\n                              }\n                              @if (header.column.getIsPinned() !== 'right') {\n                                <button\n                                  type=\"button\"\n                                  [disabled]=\"!pinAvailabilityMap()[header.column.id]?.right\"\n                                  (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                                  (click)=\"\n                                    handleColumnPin(header.column.id, 'right'); colOptionsPopover.hideImmediate()\n                                  \"\n                                  class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none disabled:pointer-events-none disabled:opacity-40\">\n                                  <z-icon zType=\"lucidePin\" zSize=\"15\" class=\"-rotate-90\" />\n                                  <span>{{ 'i18n_z_ui_table_pin_right' | translate }}</span>\n                                </button>\n                              }\n                              @if (\n                                header.column.getIsPinned() &&\n                                header.column.id !== 'expand' &&\n                                header.column.id !== actionColumnInfo()?.columnId\n                              ) {\n                                <button\n                                  type=\"button\"\n                                  (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                                  (click)=\"handleColumnPin(header.column.id, false); colOptionsPopover.hideImmediate()\"\n                                  class=\"z-column-menu-item text-destructive hover:bg-destructive/10 focus:bg-destructive/10 mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none\">\n                                  <z-icon zType=\"lucideX\" zSize=\"15\" />\n                                  <span>{{ 'i18n_z_ui_table_unpin' | translate }}</span>\n                                </button>\n                              }\n                            }\n                            @if (groupingHeaderMenuMap()[header.id]) {\n                              @let isActiveGroupingColumn = groupingColumnMap()[header.column.id];\n                              <div class=\"border-border my-0.5 border-t\"></div>\n                              @if (!isActiveGroupingColumn) {\n                                <button\n                                  type=\"button\"\n                                  (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                                  (click)=\"groupByColumn(header.column.id); colOptionsPopover.hideImmediate()\"\n                                  class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none\">\n                                  <z-icon zType=\"lucideRows3\" zSize=\"15\" class=\"text-muted-foreground shrink-0\" />\n                                  <span>{{ 'i18n_z_ui_table_group_by_column' | translate }}</span>\n                                </button>\n                              }\n                              @let groupMenuStateBoundary = isActiveGroupingColumn;\n                              @if (groupMenuStateBoundary) {\n                                <button\n                                  type=\"button\"\n                                  (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                                  (click)=\"removeGroupingColumn(header.column.id); colOptionsPopover.hideImmediate()\"\n                                  class=\"z-column-menu-item text-destructive hover:bg-destructive/10 focus:bg-destructive/10 mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none\">\n                                  <z-icon zType=\"lucideUngroup\" zSize=\"15\" />\n                                  <span>{{ 'i18n_z_ui_table_clear_grouping' | translate }}</span>\n                                </button>\n                              }\n                            }\n                            <div class=\"border-border my-0.5 border-t\"></div>\n                            <button\n                              type=\"button\"\n                              (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                              (click)=\"autosizeColumn(header.column.id); colOptionsPopover.hideImmediate()\"\n                              class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none\">\n                              <z-icon\n                                zType=\"lucideChevronsLeftRight\"\n                                zSize=\"14\"\n                                class=\"text-muted-foreground shrink-0\" />\n                              <span>{{ 'i18n_z_ui_table_autosize_column' | translate }}</span>\n                            </button>\n                            <button\n                              type=\"button\"\n                              (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                              (click)=\"autosizeAllColumns(); colOptionsPopover.hideImmediate()\"\n                              class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none\">\n                              <z-icon zType=\"lucideColumns3\" zSize=\"14\" class=\"text-muted-foreground shrink-0\" />\n                              <span>{{ 'i18n_z_ui_table_autosize_all_columns' | translate }}</span>\n                            </button>\n                            <button\n                              type=\"button\"\n                              (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                              (click)=\"resetColumns(); colOptionsPopover.hideImmediate()\"\n                              class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none\">\n                              <z-icon zType=\"lucideRotateCcw\" zSize=\"14\" class=\"text-muted-foreground shrink-0\" />\n                              <span>{{ 'i18n_z_ui_table_reset_columns' | translate }}</span>\n                            </button>\n                            @if (hideableColumns().length > 0) {\n                              <button\n                                type=\"button\"\n                                (mouseenter)=\"hideActiveColumnVisibilityPopover()\"\n                                (click)=\"openSettingsDrawerFromColumnMenu(colOptionsPopover)\"\n                                class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none\">\n                                <z-icon zType=\"lucideColumns3\" zSize=\"14\" class=\"text-muted-foreground shrink-0\" />\n                                <span class=\"truncate\">\n                                  {{ 'i18n_z_ui_table_choose_columns' | translate }}\n                                </span>\n                              </button>\n                            }\n                          </div>\n                        </ng-template>\n\n                        @let columnEnableHeaderMenu =\n                          header.column.id | zTableColumnConfig: zConfig().columns : 'enableHeaderMenu';\n                        @let hasColumnOptions =\n                          header.column.id !== 'actionRowPin' &&\n                          columnEnableHeaderMenu !== false &&\n                          (groupingHeaderMenuMap()[header.id] ||\n                            (header.column.getCanPin() && effectiveEnablePinning) ||\n                            effectiveEnableOrdering ||\n                            hideableColumns().length > 0);\n                        <div\n                          class=\"z-header-text-wrapper inline-flex max-w-full items-center gap-1 rounded px-1.5 py-1\"\n                          [class.cursor-pointer]=\"hasColumnOptions\"\n                          [class.z-has-options]=\"hasColumnOptions\"\n                          [attr.z-popover]=\"hasColumnOptions ? '' : null\"\n                          #colOptionsPopover=\"zPopover\"\n                          #headerTextWrapper\n                          z-popover\n                          [zPopoverContent]=\"hasColumnOptions ? colOptionsPopoverContent : null\"\n                          zTrigger=\"click\"\n                          zPosition=\"bottom\"\n                          [zOffset]=\"5\"\n                          (zOutsideClick)=\"hideColumnPopoversOnOutsideClick(colOptionsPopover)\"\n                          (mousedown)=\"$event.preventDefault()\"\n                          [attr.tabindex]=\"hasColumnOptions ? 0 : null\"\n                          [attr.role]=\"hasColumnOptions ? 'button' : null\"\n                          [attr.aria-haspopup]=\"hasColumnOptions ? 'menu' : null\">\n                          <ng-container\n                            *flexRender=\"header.column.columnDef.header; props: header.getContext(); let headerContent\">\n                            @if (headerContent | zTableIsTemplateRef) {\n                              <div\n                                class=\"z-template-content\"\n                                [class]=\"\n                                  header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentClass'\n                                \"\n                                [ngStyle]=\"\n                                  header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentStyle'\n                                \">\n                                <ng-container\n                                  *ngTemplateOutlet=\"headerContent; context: { $implicit: header.getContext() }\" />\n                              </div>\n                            } @else if (headerContent | zTableHasIcon) {\n                              <z-table-icon-text\n                                class=\"min-w-0 truncate\"\n                                [zText]=\"headerContent\"\n                                [zTooltip]=\"header.column.id | zTableColumnConfig: zConfig().columns : 'headerTooltip'\"\n                                [zTriggerElement]=\"headerTextWrapper\"\n                                [class]=\"\n                                  header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentClass'\n                                \"\n                                [ngStyle]=\"\n                                  header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentStyle'\n                                \" />\n                            } @else {\n                              <span\n                                class=\"z-table-cell-text\"\n                                z-tooltip\n                                [zContent]=\"\n                                  (header.column.id | zTableColumnConfig: zConfig().columns : 'headerTooltip') ||\n                                  headerContent\n                                \"\n                                [zTriggerElement]=\"headerTextWrapper\"\n                                [innerHTML]=\"headerContent | translate | zSafeHtml\"\n                                [class]=\"\n                                  header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentClass'\n                                \"\n                                [ngStyle]=\"\n                                  header.column.id | zTableColumnConfig: zConfig().columns : 'headerContentStyle'\n                                \"></span>\n                            }\n                          </ng-container>\n                          @if (hasColumnOptions) {\n                            <z-icon zType=\"lucideChevronDown\" zSize=\"15\" class=\"text-muted-foreground shrink-0\" />\n                          }\n                        </div>\n                        @if ((header.column.getCanSort() && !hasBodyRowSpan()) || header.column.getCanFilter()) {\n                          <z-table-filter\n                            [zColumn]=\"$any(header.column)\"\n                            [zTable]=\"$any(table)\"\n                            [zResetVersion]=\"filterResetVersion()\"\n                            [zSortingState]=\"sorting()\"\n                            [zEnableMultiSort]=\"zConfig().enableMultiSort ?? true\" />\n                        }\n                      </div>\n                    }\n                    @if (header.column.getCanResize() && zConfig().enableColumnResizing !== false) {\n                      <div\n                        class=\"z-resizer\"\n                        [class.z-is-resizing]=\"header.column.getIsResizing()\"\n                        [class.z-resizer-left]=\"\n                          header.column.getIsPinned() === 'right' || header.column.getIsLastColumn()\n                        \"\n                        (dblclick)=\"header.column.resetSize()\"\n                        [zTableResize]=\"header\"></div>\n                    }\n                  </th>\n                }\n              }\n            </tr>\n          }\n        }\n      </thead>\n    </table>\n  </div>\n\n  <!-- Body table -->\n  <div\n    class=\"z-tbody-wrapper relative\"\n    #tbodyContainer\n    [class.z-scroll-left]=\"hasScrollLeft()\"\n    [class.z-scroll-right]=\"hasScrollRight()\">\n    @if (isLoading() || isProcessing()) {\n      <!-- Loading State -->\n      @if (zConfig().useSkeleton) {\n        <!-- Skeleton Loading -->\n        <div class=\"animate-in fade-in flex h-full flex-col duration-200\">\n          @for (i of skeletonRows(); track $index; let last = $last) {\n            <div\n              class=\"border-border box-border flex flex-1 flex-col items-start justify-center gap-1.5 px-2\"\n              [class.border-b]=\"!last\">\n              <z-skeleton zType=\"bar\" zWidth=\"100%\" zHeight=\"22px\" zRadius=\"4px\" />\n              <z-skeleton zType=\"bar\" zWidth=\"50%\" zHeight=\"14px\" zRadius=\"4px\" />\n            </div>\n          }\n        </div>\n      } @else {\n        <!-- Spinner Loading -->\n        <div class=\"z-loading-state\">\n          <z-loading [zLoading]=\"true\" zSize=\"lg\" [zText]=\"'i18n_z_ui_table_loading' | translate\" />\n        </div>\n      }\n    } @else if (isEmpty()) {\n      <div class=\"z-empty-state\">\n        @if (isNoSearchResults()) {\n          <z-empty zIcon=\"lucideSearchX\" zSize=\"sm\" [zMessage]=\"'i18n_z_ui_table_no_results' | translate\" />\n        } @else {\n          <z-empty zIcon=\"lucidePackageOpen\" zSize=\"sm\" [zMessage]=\"'i18n_z_ui_table_no_data' | translate\" />\n        }\n      </div>\n    } @else {\n      <ng-scrollbar class=\"z-tbody-scrollbar\" #tbodyWrapper (scroll)=\"onTbodyScroll($event)\">\n        @if (isVirtual()) {\n          <!-- Virtual Scroll Mode -->\n\n          <div\n            class=\"z-virtual-scroll-inner\"\n            [style.height.px]=\"virtualizer.getTotalSize()\"\n            [style.min-width.px]=\"table.getTotalSize()\">\n            <!-- Pinned rows và center rows dùng chung một virtual canvas. -->\n            @if (virtualPinnedTopRows().length > 0) {\n              <div class=\"z-virtual-pinned-top\" [style.min-width.px]=\"table.getTotalSize()\">\n                @for (row of virtualPinnedTopRows(); track row.id) {\n                  <ng-container *ngTemplateOutlet=\"virtualPinnedRowTpl; context: { $implicit: row }\" />\n                }\n              </div>\n            }\n\n            @for (virtualItem of virtualizer.getVirtualItems(); track virtualItem.index) {\n              @let groupRows = dynamicGroupRows()[virtualItem.index] || [];\n              @let virtualFlatItem = virtualGroupedFlatItems()[virtualItem.index];\n              <div\n                #virtualRow\n                class=\"z-virtual-row\"\n                z-table-draggable=\"row\"\n                z-table-drop-target=\"row\"\n                [z-table-drag-table-id]=\"dragInstanceId\"\n                [z-table-drop-table-id]=\"dragInstanceId\"\n                [z-table-drag-item-id]=\"groupRows[0]?.id ?? ''\"\n                [z-table-drop-item-id]=\"groupRows[0]?.id ?? ''\"\n                [z-table-drag-disabled]=\"!isVirtualRowDragEnabled() || groupRows.length !== 1\"\n                [z-table-drop-disabled]=\"!isVirtualRowDragEnabled() || groupRows.length !== 1\"\n                (zTableDropped)=\"_handleDragDrop($event)\"\n                [attr.data-index]=\"virtualItem.index\"\n                [style.height.px]=\"\n                  effectiveDynamicRowSizing()\n                    ? null\n                    : (dynamicGroupHeights()[virtualItem.index] ?? groupSize() * virtualRowHeight())\n                \"\n                [style.transform]=\"'translate3d(0,' + virtualItem.start + 'px,0)'\">\n                <table [ngStyle]=\"columnSizeVars()\" [style.width.px]=\"renderedTableWidth()\">\n                  <ng-container *ngTemplateOutlet=\"colGroupTpl\" />\n                  <tbody\n                    [class.z-has-vertical-scroll]=\"hasVerticalScroll()\"\n                    [class.z-has-bottom-pinned]=\"table.getBottomRows().length > 0\"\n                    [class.z-last-row-touches-bottom]=\"lastRowTouchesBottom()\">\n                    @let groupHeaderItem = _getVirtualGroupHeader(virtualFlatItem);\n                    @if (groupHeaderItem) {\n                      <tr\n                        class=\"z-group-row\"\n                        [class.z-group-row-has-totals]=\"groupHeaderItem.totals\"\n                        [class.z-group-row-expanded]=\"groupHeaderItem.expanded\"\n                        [attr.data-group-id]=\"groupHeaderItem.id\"\n                        [attr.data-group-depth]=\"groupHeaderItem.depth\">\n                        @if (groupHeaderItem.totals) {\n                          @let totalColumnMap = groupTotalColumnMap();\n                          @for (column of orderedLeafColumns(); track column.id; let isFirstGroupCell = $first) {\n                            <td\n                              [class.z-group-row-label-cell]=\"isFirstGroupCell\"\n                              [class.z-group-row-total-cell]=\"!isFirstGroupCell && totalColumnMap[column.id]\"\n                              [attr.data-column-id]=\"column.id\">\n                              @if (isFirstGroupCell) {\n                                <div class=\"z-group-row-sticky-wrapper\">\n                                  <button\n                                    type=\"button\"\n                                    class=\"z-group-row-trigger\"\n                                    [style.padding-left.rem]=\"0.75 + groupHeaderItem.depth * 0.75\"\n                                    [attr.aria-expanded]=\"groupHeaderItem.expanded\"\n                                    (click)=\"toggleGroupRow(groupHeaderItem.id)\">\n                                    <z-icon\n                                      zType=\"lucideChevronRight\"\n                                      zSize=\"14\"\n                                      class=\"transition-transform duration-200\"\n                                      [class.rotate-90]=\"groupHeaderItem.expanded\" />\n                                    <span\n                                      class=\"z-group-row-label\"\n                                      z-tooltip\n                                      [zContent]=\"\n                                        (groupHeaderItem.columnLabel ? groupHeaderItem.columnLabel + ': ' : '') +\n                                        groupHeaderItem.label\n                                      \">\n                                      @if (groupHeaderItem.columnLabel) {\n                                        <span class=\"z-group-row-column-label\">{{ groupHeaderItem.columnLabel }}:</span>\n                                      }\n                                      {{ groupHeaderItem.label }}\n                                    </span>\n                                    @if (groupingConfig().showCount !== false) {\n                                      <span class=\"z-group-row-count\">{{ groupHeaderItem.count }}</span>\n                                    }\n                                    @if (groupHeaderItem.loading) {\n                                      <z-loading class=\"z-group-row-loading\" [zLoading]=\"true\" zSize=\"xs\" />\n                                    }\n                                  </button>\n                                  @if (!isServerGrouping()) {\n                                    <button\n                                      type=\"button\"\n                                      z-button\n                                      zType=\"ghost\"\n                                      zSize=\"sm\"\n                                      zTypeIcon=\"lucideX\"\n                                      [zWave]=\"false\"\n                                      z-tooltip\n                                      zSizeIcon=\"14\"\n                                      [zContent]=\"'i18n_z_ui_table_clear_grouping' | translate\"\n                                      [zAlwaysShow]=\"true\"\n                                      zTooltipPosition=\"top\"\n                                      class=\"z-group-row-remove\"\n                                      (click)=\"removeGroupingColumn(groupHeaderItem.columnId)\"></button>\n                                  }\n                                </div>\n                              }\n                              @if (!isFirstGroupCell && totalColumnMap[column.id]) {\n                                @let totalConfig = groupTotalConfigMap()[column.id];\n                                @let totalTooltip = totalConfig.tooltip;\n                                @let totalPopover = totalConfig.popover;\n                                @let totalPopoverContent = totalPopover | zTablePopoverConfig: 'content';\n                                <ng-template #groupTotalPopoverTpl>\n                                  @if (totalPopoverContent | zTableIsTemplateRef) {\n                                    <ng-container *ngTemplateOutlet=\"$any(totalPopoverContent)\" />\n                                  }\n                                  @if (!(totalPopoverContent | zTableIsTemplateRef)) {\n                                    <div [innerHTML]=\"$any(totalPopoverContent) | zSafeHtml\"></div>\n                                  }\n                                </ng-template>\n                                <span\n                                  class=\"z-group-row-total\"\n                                  z-tooltip\n                                  z-popover\n                                  [class]=\"totalConfig.class\"\n                                  [zContent]=\"\n                                    $any(\n                                      (totalTooltip | zTableTooltipConfig: 'content') ||\n                                        groupHeaderItem.totals[column.id]\n                                    )\n                                  \"\n                                  [zTooltipPosition]=\"$any(totalTooltip | zTableTooltipConfig: 'position')\"\n                                  [zTooltipTrigger]=\"$any(totalTooltip | zTableTooltipConfig: 'trigger')\"\n                                  [zTooltipType]=\"$any(totalTooltip | zTableTooltipConfig: 'type')\"\n                                  [zTooltipSize]=\"$any(totalTooltip | zTableTooltipConfig: 'size')\"\n                                  [zTooltipClass]=\"$any(totalTooltip | zTableTooltipConfig: 'class')\"\n                                  [zTooltipShowDelay]=\"$any(totalTooltip | zTableTooltipConfig: 'showDelay')\"\n                                  [zTooltipHideDelay]=\"$any(totalTooltip | zTableTooltipConfig: 'hideDelay')\"\n                                  [zTooltipArrow]=\"$any(totalTooltip | zTableTooltipConfig: 'arrow')\"\n                                  [zTooltipOffset]=\"$any(totalTooltip | zTableTooltipConfig: 'offset')\"\n                                  [zAutoDetect]=\"$any(totalTooltip | zTableTooltipConfig: 'autoDetect')\"\n                                  [zAlwaysShow]=\"$any(totalTooltip | zTableTooltipConfig: 'alwaysShow')\"\n                                  [zMaxWidth]=\"$any(totalTooltip | zTableTooltipConfig: 'maxWidth')\"\n                                  [zPopoverContent]=\"totalPopoverContent ? groupTotalPopoverTpl : null\"\n                                  [zPosition]=\"$any(totalPopover | zTablePopoverConfig: 'position')\"\n                                  [zPopoverTrigger]=\"$any(totalPopover | zTablePopoverConfig: 'trigger')\"\n                                  [zClass]=\"$any(totalPopover | zTablePopoverConfig: 'class')\"\n                                  [zShowDelay]=\"$any(totalPopover | zTablePopoverConfig: 'showDelay')\"\n                                  [zHideDelay]=\"$any(totalPopover | zTablePopoverConfig: 'hideDelay')\"\n                                  [zDisabled]=\"$any(totalPopover | zTablePopoverConfig: 'disabled')\"\n                                  [zOffset]=\"$any(totalPopover | zTablePopoverConfig: 'offset')\"\n                                  [zPopoverWidth]=\"$any(totalPopover | zTablePopoverConfig: 'width')\"\n                                  [zManualClose]=\"$any(totalPopover | zTablePopoverConfig: 'manualClose')\"\n                                  [zOutsideClickClose]=\"$any(totalPopover | zTablePopoverConfig: 'outsideClickClose')\"\n                                  [zScrollClose]=\"$any(totalPopover | zTablePopoverConfig: 'scrollClose')\"\n                                  [zSticky]=\"$any(totalPopover | zTablePopoverConfig: 'sticky')\"\n                                  [zShowArrow]=\"$any(totalPopover | zTablePopoverConfig: 'showArrow')\"\n                                  [zKeyboardSafe]=\"$any(totalPopover | zTablePopoverConfig: 'keyboardSafe')\">\n                                  {{ groupHeaderItem.totals[column.id] }}\n                                </span>\n                              }\n                            </td>\n                          }\n                        } @else {\n                          <td [attr.colspan]=\"renderedColumnCount()\">\n                            <div class=\"z-group-row-sticky-wrapper\">\n                              <button\n                                type=\"button\"\n                                class=\"z-group-row-trigger\"\n                                [style.padding-left.rem]=\"0.75 + groupHeaderItem.depth * 0.75\"\n                                [attr.aria-expanded]=\"groupHeaderItem.expanded\"\n                                (click)=\"toggleGroupRow(groupHeaderItem.id)\">\n                                <z-icon\n                                  zType=\"lucideChevronRight\"\n                                  zSize=\"14\"\n                                  class=\"transition-transform duration-200\"\n                                  [class.rotate-90]=\"groupHeaderItem.expanded\" />\n                                <span\n                                  class=\"z-group-row-label\"\n                                  z-tooltip\n                                  [zContent]=\"\n                                    (groupHeaderItem.columnLabel ? groupHeaderItem.columnLabel + ': ' : '') +\n                                    groupHeaderItem.label\n                                  \">\n                                  @if (groupHeaderItem.columnLabel) {\n                                    <span class=\"z-group-row-column-label\">{{ groupHeaderItem.columnLabel }}:</span>\n                                  }\n                                  {{ groupHeaderItem.label }}\n                                </span>\n                                @if (groupingConfig().showCount !== false) {\n                                  <span class=\"z-group-row-count\">{{ groupHeaderItem.count }}</span>\n                                }\n                                @if (groupHeaderItem.loading) {\n                                  <z-loading class=\"z-group-row-loading\" [zLoading]=\"true\" zSize=\"xs\" />\n                                }\n                              </button>\n                              @if (!isServerGrouping()) {\n                                <button\n                                  type=\"button\"\n                                  z-button\n                                  zType=\"ghost\"\n                                  zSize=\"sm\"\n                                  zTypeIcon=\"lucideX\"\n                                  [zWave]=\"false\"\n                                  z-tooltip\n                                  zSizeIcon=\"14\"\n                                  [zContent]=\"'i18n_z_ui_table_clear_grouping' | translate\"\n                                  [zAlwaysShow]=\"true\"\n                                  zTooltipPosition=\"top\"\n                                  class=\"z-group-row-remove\"\n                                  (click)=\"removeGroupingColumn(groupHeaderItem.columnId)\"></button>\n                              }\n                            </div>\n                          </td>\n                        }\n                      </tr>\n                    }\n                    @for (row of groupRows; track row.id) {\n                      @let virtualGroupDepth = _getVirtualGroupDepth(virtualFlatItem);\n                      @let visibleCells = row.getVisibleCells();\n                      @let rowSelected = canUseRowSelection() && row.getIsSelected();\n                      @let rowSomeSelected = canUseRowSelection() && row.getIsSomeSelected();\n                      @let rowPinned = row.getIsPinned();\n                      <tr\n                        z-table-row-hover\n                        [attr.data-row-id]=\"row.id\"\n                        [class]=\"row | zTableRowConfig: zConfig() : 'rowClass'\"\n                        [style]=\"row | zTableRowConfig: zConfig() : 'rowStyle'\"\n                        [style.height.px]=\"effectiveDynamicRowSizing() ? null : virtualRowHeight()\"\n                        [style.min-height.px]=\"effectiveDynamicRowSizing() ? virtualRowHeight() : null\"\n                        [style.--z-row-height]=\"effectiveDynamicRowSizing() ? 'auto' : virtualRowHeight() + 'px'\"\n                        [class.z-child-row]=\"row.depth > 0\"\n                        [class.z-group-child-row]=\"_isVirtualGroupChild(virtualFlatItem)\"\n                        [style.--z-group-content-indent]=\"\n                          virtualGroupDepth > 0 ? 1.75 + (virtualGroupDepth - 1) * 0.75 + 'rem' : null\n                        \"\n                        [class.z-selected]=\"rowSelected\"\n                        [class.z-indeterminate-selected]=\"rowSomeSelected && !rowSelected\"\n                        [class.z-context-menu-active]=\"contentRowMenu()?.row?.id === row.id\"\n                        [class.z-pinned-top]=\"rowPinned === 'top'\"\n                        [class.z-pinned-top-first]=\"\n                          rowPinned === 'top' && (row | zTableRow: table : 'isFirstTopPinned')\n                        \"\n                        [class.z-pinned-bottom]=\"rowPinned === 'bottom'\"\n                        [class.z-pinned-bottom-last]=\"\n                          rowPinned === 'bottom' && (row | zTableRow: table : 'isLastBottomPinned')\n                        \"\n                        [class.z-pinned-bottom-first]=\"\n                          rowPinned === 'bottom' && (row | zTableRow: table : 'isFirstBottomPinned')\n                        \"\n                        [class.z-shadow-bottom]=\"\n                          showHeaderFooterShadow() &&\n                          hasScrollTop() &&\n                          rowPinned === 'top' &&\n                          (row | zTableRow: table : 'isLastTopPinned')\n                        \"\n                        [class.z-shadow-top]=\"\n                          showHeaderFooterShadow() &&\n                          hasScrollBottom() &&\n                          rowPinned === 'bottom' &&\n                          (row | zTableRow: table : 'isFirstBottomPinned')\n                        \"\n                        (contextmenu)=\"openContentRowMenu($event, row)\">\n                        @for (cell of visibleCells; track cell.id) {\n                          @let cellPinned = cell.column.getIsPinned();\n                          @if (\n                            canUseVirtualColumns() &&\n                            virtualLeftSpacerWidth() > 0 &&\n                            cell.column.id === firstVirtualCenterColumnId()\n                          ) {\n                            <td\n                              class=\"z-virtual-column-spacer pointer-events-none p-0\"\n                              [style.width.px]=\"virtualRenderedLeftSpacerWidth()\"></td>\n                          }\n                          @let shouldRenderRowSpan =\n                            cell | zTableSpan: zConfig().columns : 'shouldRender' : bodyRowSpanRows();\n                          @let shouldRenderColSpan = cell | zTableCellRender: visibleCells : zConfig().columns : 'body';\n                          @let isVirtualColumnVisible =\n                            !canUseVirtualColumns() ||\n                            cellPinned !== false ||\n                            virtualCenterColumnVisibilityMap()[cell.column.id];\n                          @if (shouldRenderRowSpan && shouldRenderColSpan && isVirtualColumnVisible) {\n                            @let cellSelectionId = row.id + '::' + cell.column.id;\n                            <td\n                              [attr.data-column-id]=\"cell.column.id\"\n                              [ngStyle]=\"\n                                cell.column\n                                  | zTablePinningStyles\n                                    : cell\n                                    : 'body'\n                                    : visibleCells\n                                    : zConfig().columns\n                                    : columnSizingInfo()\n                                    : colDomWidthMap()\n                                    : isColumnPinningActive\n                              \"\n                              [class]=\"cell | zTableCellConfig: zConfig() : 'cellClass'\"\n                              [class.z-sticky-left]=\"isColumnPinningActive && cellPinned === 'left'\"\n                              [class.z-sticky-right]=\"isColumnPinningActive && cellPinned === 'right'\"\n                              [class.z-sticky-left-last]=\"\n                                isColumnPinningActive &&\n                                cellPinned === 'left' &&\n                                (cell | zTableCellPin: 'isLastLeftPinned' : zConfig().columns : 'body' : visibleCells)\n                              \"\n                              [class.z-sticky-right-first]=\"\n                                isColumnPinningActive &&\n                                cellPinned === 'right' &&\n                                (cell | zTableCellPin: 'isFirstRightPinned' : zConfig().columns : 'body' : visibleCells)\n                              \"\n                              [class.z-sticky-right-last]=\"\n                                isColumnPinningActive &&\n                                cellPinned === 'right' &&\n                                (cell | zTableCellPin: 'isLastRightPinned' : zConfig().columns : 'body' : visibleCells)\n                              \"\n                              [class.z-at-left-edge]=\"cell | zTableCellOffset: orderedLeafColumns()\"\n                              [class.z-col-drag]=\"cell.column.id === 'rowDrag'\"\n                              [class.z-col-select]=\"cell.column.id === 'select'\"\n                              [class.z-col-expand]=\"cell.column.id === 'expand'\"\n                              [class.z-col-actions]=\"cell.column.id === actionColumnInfo()?.columnId\"\n                              [class.z-cell-selectable]=\"canUseCellSelection()\"\n                              [class.z-cell-active]=\"\n                                !hasMultipleSelectedCells() &&\n                                activeCell()?.rowId === row.id &&\n                                activeCell()?.columnId === cell.column.id\n                              \"\n                              [class.z-cell-range-selected]=\"visualSelectedCellIds().has(cellSelectionId)\"\n                              [class.z-cell-range-top]=\"selectedCellEdgeIds().top.has(cellSelectionId)\"\n                              [class.z-cell-range-right]=\"selectedCellEdgeIds().right.has(cellSelectionId)\"\n                              [class.z-cell-range-bottom]=\"selectedCellEdgeIds().bottom.has(cellSelectionId)\"\n                              [class.z-cell-range-left]=\"selectedCellEdgeIds().left.has(cellSelectionId)\"\n                              [class.z-content-edit-active]=\"\n                                activeContentEditCell()?.rowId === row.id &&\n                                activeContentEditCell()?.columnId === cell.column.id\n                              \"\n                              [class.z-at-bottom]=\"cell | zTableCellBottom: zConfig().columns : renderedBodyRows()\"\n                              [attr.rowspan]=\"cell | zTableSpan: zConfig().columns : 'cellRowSpan' : bodyRowSpanRows()\"\n                              [attr.colspan]=\"cell | zTableSpan: zConfig().columns : 'cellColSpan'\"\n                              [style]=\"cell | zTableCellConfig: zConfig() : 'cellStyle'\"\n                              [style.--z-cell-range-top]=\"\n                                (selectedCellRangeInsets().get(cellSelectionId)?.top ?? 0) + '%'\n                              \"\n                              [style.--z-cell-range-right]=\"\n                                (selectedCellRangeInsets().get(cellSelectionId)?.right ?? 0) + '%'\n                              \"\n                              [style.--z-cell-range-bottom]=\"\n                                (selectedCellRangeInsets().get(cellSelectionId)?.bottom ?? 0) + '%'\n                              \"\n                              [style.--z-cell-range-left]=\"\n                                (selectedCellRangeInsets().get(cellSelectionId)?.left ?? 0) + '%'\n                              \"\n                              (pointerdown)=\"onCellPointerDown($event, row, cell.column.id)\"\n                              (pointerenter)=\"onCellPointerEnter($event, row, cell.column.id)\"\n                              (contextmenu)=\"openCellMenu($event, row, cell.column.id)\">\n                              @if (cell.column.id === 'rowDrag') {\n                                <div class=\"flex items-center justify-center\">\n                                  <button\n                                    data-z-table-drag-handle\n                                    type=\"button\"\n                                    class=\"text-muted-foreground inline-flex size-7 items-center justify-center rounded-md\"\n                                    [class.cursor-grab]=\"isRowDragEnabled()\"\n                                    [class.opacity-40]=\"!isRowDragEnabled()\">\n                                    <z-icon zType=\"lucideGripVertical\" zSize=\"14\" />\n                                  </button>\n                                </div>\n                              } @else if (cell.column.id === 'select') {\n                                <!-- Row Checkbox -->\n                                <div class=\"flex items-center justify-center\">\n                                  <z-checkbox\n                                    [zChecked]=\"canUseRowSelection() && cell.row.getIsSelected()\"\n                                    [zIndeterminate]=\"\n                                      canUseRowSelection() && cell.row.getIsSomeSelected() && !cell.row.getIsSelected()\n                                    \"\n                                    [zDisabled]=\"!canUseRowSelection() || !cell.row.getCanSelect()\"\n                                    (zChange)=\"canUseRowSelection() && 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.getCanExpand()) {\n                                    <button\n                                      type=\"button\"\n                                      (click)=\"cell.row.toggleExpanded()\"\n                                      class=\"hover:bg-muted flex h-6 w-6 cursor-pointer items-center justify-center rounded\">\n                                      <z-icon\n                                        zType=\"lucideChevronRight\"\n                                        zSize=\"14\"\n                                        class=\"transition-transform duration-200\"\n                                        [class.rotate-90]=\"cell.row.getIsExpanded()\" />\n                                    </button>\n                                  }\n                                </div>\n                              } @else if (\n                                (cell.column.id === 'actionRowPin' || cell.column.id === 'actions') &&\n                                cell.column.id !== actionColumnInfo()?.columnId\n                              ) {\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-1 py-1\">\n                                        @if (cell.row.getIsPinned() !== 'top') {\n                                          <button\n                                            type=\"button\"\n                                            (click)=\"cell.row.pin('top'); rowPinPopover.hideImmediate()\"\n                                            class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none\">\n                                            <z-icon zType=\"lucideArrowUp\" zSize=\"12\" />\n                                            <span>{{ 'i18n_z_ui_table_pin_top' | translate }}</span>\n                                          </button>\n                                        }\n                                        @if (cell.row.getIsPinned() !== 'bottom') {\n                                          <button\n                                            type=\"button\"\n                                            (click)=\"cell.row.pin('bottom'); rowPinPopover.hideImmediate()\"\n                                            class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none\">\n                                            <z-icon zType=\"lucideArrowDown\" zSize=\"12\" />\n                                            <span>{{ 'i18n_z_ui_table_pin_bottom' | translate }}</span>\n                                          </button>\n                                        }\n                                        @if (cell.row.getIsPinned()) {\n                                          <button\n                                            type=\"button\"\n                                            (click)=\"cell.row.pin(false); rowPinPopover.hideImmediate()\"\n                                            class=\"z-column-menu-item text-destructive hover:bg-destructive/10 focus:bg-destructive/10 mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none\">\n                                            <z-icon zType=\"lucideX\" zSize=\"12\" />\n                                            <span>{{ 'i18n_z_ui_table_unpin' | translate }}</span>\n                                          </button>\n                                        }\n                                      </div>\n                                    </ng-template>\n                                    <button\n                                      type=\"button\"\n                                      z-popover\n                                      #rowPinPopover=\"zPopover\"\n                                      [zPopoverContent]=\"rowPinPopoverContent\"\n                                      zTrigger=\"click\"\n                                      zPosition=\"bottom\"\n                                      class=\"z-row-pin-trigger text-muted-foreground hover:bg-muted hover:text-foreground flex cursor-pointer items-center justify-center rounded p-1 outline-none\"\n                                      [class.text-primary]=\"cell.row.getIsPinned()\">\n                                      <z-icon zType=\"lucideEllipsis\" zSize=\"14\" class=\"rotate-90\" />\n                                    </button>\n                                  </div>\n                                }\n                              } @else if (cell.column.id === actionColumnInfo()?.columnId && actionColumnInfo()) {\n                                <z-table-actions\n                                  [zConfig]=\"$any(actionColumnInfo()!.config)\"\n                                  [zRow]=\"cell.row.original\"\n                                  [zRowId]=\"cell.row.id\"\n                                  (zActionClick)=\"onActionClick($event)\" />\n                              } @else {\n                                @let isCellVisible = cell | zTableCellVisible: zConfig().columns;\n                                @if (isCellVisible) {\n                                  @let editInfoVirtual = cell.getContext() | zTableCellEdit: zConfig().columns;\n                                  @if (editInfoVirtual.enabled) {\n                                    <!-- Editable Cell (Virtual) -->\n                                    <z-table-edit-cell\n                                      [zRow]=\"cell.row.original\"\n                                      [zRowId]=\"cell.row.id\"\n                                      [zRowIndex]=\"cell.row.index\"\n                                      [zColumnId]=\"cell.column.id\"\n                                      [zValue]=\"cell.getValue()\"\n                                      [zRowUpdate]=\"_rowUpdate()\"\n                                      [zEditConfig]=\"$any(editInfoVirtual.config)\"\n                                      (zChange)=\"onCellEdit($any($event))\" />\n                                  } @else if (editInfoVirtual.contentEnabled) {\n                                    @let contentConfigVirtual = editInfoVirtual.contentConfig!;\n                                    @if (\n                                      activeContentEditCell()?.rowId === row.id &&\n                                      activeContentEditCell()?.columnId === cell.column.id\n                                    ) {\n                                      <z-table-content-editor\n                                        [zValue]=\"cell.getValue()\"\n                                        [zConfig]=\"contentConfigVirtual\"\n                                        (zCommit)=\"onContentEditCommit($event, row, cell.column.id, cell.getValue())\"\n                                        (zCancel)=\"onContentEditCancel()\" />\n                                    } @else {\n                                      <button\n                                        type=\"button\"\n                                        class=\"z-table-content-trigger\"\n                                        [attr.data-z-table-edit-row]=\"row.id\"\n                                        [attr.data-z-table-edit-column]=\"cell.column.id\"\n                                        (keydown)=\"onContentEditKeydown($event, row.id, cell.column.id)\"\n                                        (click)=\"onContentEditStart($event, row.id, cell.column.id)\">\n                                        {{ contentConfigVirtual.displayValue }}\n                                      </button>\n                                    }\n                                  } @else {\n                                    <ng-container\n                                      *flexRender=\"\n                                        cell.column.columnDef.cell;\n                                        props: cell.getContext();\n                                        let cellContent\n                                      \">\n                                      @if (cellContent | zTableIsTemplateRef) {\n                                        <!-- TemplateRef rendering -->\n                                        @let isClickable = cell.column.id | zTableCellClickable: zConfig().columns;\n                                        <div\n                                          class=\"z-template-content\"\n                                          [class]=\"cell | zTableCellConfig: zConfig() : 'contentClass'\"\n                                          [ngStyle]=\"cell | zTableCellConfig: zConfig() : 'contentStyle'\"\n                                          (click)=\"isClickable && onCellClick(row, cell.column.id, cell.getValue())\">\n                                          <ng-container\n                                            *ngTemplateOutlet=\"\n                                              cellContent;\n                                              context: { $implicit: cell.getContext() }\n                                            \" />\n                                        </div>\n                                      } @else if (cellContent | zTableHasIcon) {\n                                        <!-- Icon syntax rendering -->\n                                        @let isClickableIcon = cell.column.id | zTableCellClickable: zConfig().columns;\n                                        <z-table-icon-text\n                                          [zText]=\"cellContent\"\n                                          [zTooltip]=\"cell | zTableCellConfig: zConfig() : 'contentTooltip'\"\n                                          [class]=\"cell | zTableCellConfig: zConfig() : 'contentClass'\"\n                                          [ngStyle]=\"cell | zTableCellConfig: zConfig() : 'contentStyle'\"\n                                          (click)=\"\n                                            isClickableIcon && onCellClick(row, cell.column.id, cell.getValue())\n                                          \" />\n                                      } @else {\n                                        <!-- Default/innerHTML rendering -->\n                                        @let isClickableDefault =\n                                          cell.column.id | zTableCellClickable: zConfig().columns;\n                                        @let cellTooltipConfig = cell | zTableCellConfig: zConfig() : 'contentTooltip';\n                                        @let cellPopoverConfig = cell | zTableCellConfig: zConfig() : 'contentPopover';\n                                        @let cellPopoverContent = cellPopoverConfig | zTablePopoverConfig: 'content';\n                                        <ng-template #cellPopoverTpl>\n                                          @if (cellPopoverContent | zTableIsTemplateRef) {\n                                            <ng-container *ngTemplateOutlet=\"$any(cellPopoverContent)\" />\n                                          }\n                                          @if (!(cellPopoverContent | zTableIsTemplateRef)) {\n                                            <div [innerHTML]=\"$any(cellPopoverContent) | zSafeHtml\"></div>\n                                          }\n                                        </ng-template>\n                                        @if (cellPopoverContent) {\n                                          <div\n                                            class=\"z-table-cell-text\"\n                                            z-popover\n                                            z-tooltip\n                                            [zTriggerElement]=\"cellOverlayContent\"\n                                            [zTriggerRef]=\"cellOverlayContent\"\n                                            [zContent]=\"\n                                              (cellTooltipConfig | zTableTooltipConfig: 'content') || cellContent\n                                            \"\n                                            [zTooltipPosition]=\"\n                                              $any(cellTooltipConfig | zTableTooltipConfig: 'position')\n                                            \"\n                                            [zTooltipTrigger]=\"$any(cellTooltipConfig | zTableTooltipConfig: 'trigger')\"\n                                            [zTooltipType]=\"$any(cellTooltipConfig | zTableTooltipConfig: 'type')\"\n                                            [zTooltipSize]=\"$any(cellTooltipConfig | zTableTooltipConfig: 'size')\"\n                                            [zTooltipClass]=\"$any(cellTooltipConfig | zTableTooltipConfig: 'class')\"\n                                            [zTooltipShowDelay]=\"\n                                              $any(cellTooltipConfig | zTableTooltipConfig: 'showDelay')\n                                            \"\n                                            [zTooltipHideDelay]=\"\n                                              $any(cellTooltipConfig | zTableTooltipConfig: 'hideDelay')\n                                            \"\n                                            [zTooltipArrow]=\"$any(cellTooltipConfig | zTableTooltipConfig: 'arrow')\"\n                                            [zTooltipOffset]=\"$any(cellTooltipConfig | zTableTooltipConfig: 'offset')\"\n                                            [zAutoDetect]=\"$any(cellTooltipConfig | zTableTooltipConfig: 'autoDetect')\"\n                                            [zAlwaysShow]=\"$any(cellTooltipConfig | zTableTooltipConfig: 'alwaysShow')\"\n                                            [zMaxWidth]=\"$any(cellTooltipConfig | zTableTooltipConfig: 'maxWidth')\"\n                                            [zPopoverContent]=\"cellPopoverTpl\"\n                                            [zPosition]=\"$any(cellPopoverConfig | zTablePopoverConfig: 'position')\"\n                                            [zPopoverTrigger]=\"$any(cellPopoverConfig | zTablePopoverConfig: 'trigger')\"\n                                            [zClass]=\"$any(cellPopoverConfig | zTablePopoverConfig: 'class')\"\n                                            [zShowDelay]=\"$any(cellPopoverConfig | zTablePopoverConfig: 'showDelay')\"\n                                            [zHideDelay]=\"$any(cellPopoverConfig | zTablePopoverConfig: 'hideDelay')\"\n                                            [zDisabled]=\"$any(cellPopoverConfig | zTablePopoverConfig: 'disabled')\"\n                                            [zOffset]=\"$any(cellPopoverConfig | zTablePopoverConfig: 'offset')\"\n                                            [zPopoverWidth]=\"$any(cellPopoverConfig | zTablePopoverConfig: 'width')\"\n                                            [zManualClose]=\"\n                                              $any(cellPopoverConfig | zTablePopoverConfig: 'manualClose')\n                                            \"\n                                            [zOutsideClickClose]=\"\n                                              $any(cellPopoverConfig | zTablePopoverConfig: 'outsideClickClose')\n                                            \"\n                                            [zScrollClose]=\"\n                                              $any(cellPopoverConfig | zTablePopoverConfig: 'scrollClose')\n                                            \"\n                                            [zSticky]=\"$any(cellPopoverConfig | zTablePopoverConfig: 'sticky')\"\n                                            [zShowArrow]=\"$any(cellPopoverConfig | zTablePopoverConfig: 'showArrow')\"\n                                            [zKeyboardSafe]=\"\n                                              $any(cellPopoverConfig | zTablePopoverConfig: 'keyboardSafe')\n                                            \"\n                                            (click)=\"\n                                              isClickableDefault && onCellClick(row, cell.column.id, cell.getValue())\n                                            \">\n                                            <span\n                                              #cellOverlayContent\n                                              class=\"z-table-cell-content-trigger\"\n                                              [class]=\"cell | zTableCellConfig: zConfig() : 'contentClass'\"\n                                              [ngStyle]=\"cell | zTableCellConfig: zConfig() : 'contentStyle'\"\n                                              [innerHTML]=\"cellContent | translate | zSafeHtml\"></span>\n                                          </div>\n                                        } @else {\n                                          <div\n                                            class=\"z-table-cell-text\"\n                                            z-tooltip\n                                            [zTriggerElement]=\"cellTooltipContent\"\n                                            [zContent]=\"\n                                              (cellTooltipConfig | zTableTooltipConfig: 'content') || cellContent\n                                            \"\n                                            [zTooltipPosition]=\"\n                                              $any(cellTooltipConfig | zTableTooltipConfig: 'position')\n                                            \"\n                                            [zTooltipTrigger]=\"$any(cellTooltipConfig | zTableTooltipConfig: 'trigger')\"\n                                            [zTooltipType]=\"$any(cellTooltipConfig | zTableTooltipConfig: 'type')\"\n                                            [zTooltipSize]=\"$any(cellTooltipConfig | zTableTooltipConfig: 'size')\"\n                                            [zTooltipClass]=\"$any(cellTooltipConfig | zTableTooltipConfig: 'class')\"\n                                            [zTooltipShowDelay]=\"\n                                              $any(cellTooltipConfig | zTableTooltipConfig: 'showDelay')\n                                            \"\n                                            [zTooltipHideDelay]=\"\n                                              $any(cellTooltipConfig | zTableTooltipConfig: 'hideDelay')\n                                            \"\n                                            [zTooltipArrow]=\"$any(cellTooltipConfig | zTableTooltipConfig: 'arrow')\"\n                                            [zTooltipOffset]=\"$any(cellTooltipConfig | zTableTooltipConfig: 'offset')\"\n                                            [zAutoDetect]=\"$any(cellTooltipConfig | zTableTooltipConfig: 'autoDetect')\"\n                                            [zAlwaysShow]=\"$any(cellTooltipConfig | zTableTooltipConfig: 'alwaysShow')\"\n                                            [zMaxWidth]=\"$any(cellTooltipConfig | zTableTooltipConfig: 'maxWidth')\"\n                                            (click)=\"\n                                              isClickableDefault && onCellClick(row, cell.column.id, cell.getValue())\n                                            \">\n                                            <span\n                                              #cellTooltipContent\n                                              class=\"z-table-cell-content-trigger\"\n                                              [class]=\"cell | zTableCellConfig: zConfig() : 'contentClass'\"\n                                              [ngStyle]=\"cell | zTableCellConfig: zConfig() : 'contentStyle'\"\n                                              [innerHTML]=\"cellContent | translate | zSafeHtml\"></span>\n                                          </div>\n                                        }\n                                      }\n                                    </ng-container>\n                                  }\n                                }\n                              }\n                            </td>\n                          }\n                          @if (\n                            canUseVirtualColumns() &&\n                            virtualRightSpacerWidth() > 0 &&\n                            cell.column.id === lastVirtualCenterColumnId()\n                          ) {\n                            <td\n                              class=\"z-virtual-column-spacer pointer-events-none p-0\"\n                              [style.width.px]=\"virtualRenderedRightSpacerWidth()\"></td>\n                          }\n                        }\n                      </tr>\n                    }\n                  </tbody>\n                </table>\n              </div>\n            }\n          </div>\n\n          <!--\n            Bottom pinned rows: sibling AFTER the virtual canvas (not absolute like the\n            center rows). The virtualizer reserves their height inside getTotalSize() via\n            `paddingEnd`, leaving an empty band at the canvas bottom. `margin-top: -bottomHeight`\n            pulls this real flow element back over that band, and `position: sticky; bottom: 0`\n            floats it to the viewport bottom while scrolling.\n          -->\n          @if (virtualPinnedBottomRows().length > 0) {\n            <div\n              class=\"z-virtual-pinned-bottom\"\n              [style.min-width.px]=\"table.getTotalSize()\"\n              [style.margin-top.px]=\"-virtualPinnedBottomHeight()\">\n              @for (row of virtualPinnedBottomRows(); track row.id) {\n                <ng-container *ngTemplateOutlet=\"virtualPinnedRowTpl; context: { $implicit: row }\" />\n              }\n            </div>\n          }\n\n          <!-- Template for rendering pinned rows in virtual scroll mode -->\n          <ng-template #virtualPinnedRowTpl let-row>\n            @let visibleCells = row.getVisibleCells();\n            @let rowSelected = canUseRowSelection() && row.getIsSelected();\n            @let rowSomeSelected = canUseRowSelection() && row.getIsSomeSelected();\n            @let rowPinned = row.getIsPinned();\n            <table [ngStyle]=\"columnSizeVars()\" [style.width.px]=\"renderedTableWidth()\">\n              <ng-container *ngTemplateOutlet=\"colGroupTpl\" />\n              <tbody [class.z-has-vertical-scroll]=\"hasVerticalScroll()\">\n                <tr\n                  z-table-row-hover\n                  [attr.data-row-id]=\"row.id\"\n                  [class]=\"row | zTableRowConfig: zConfig() : 'rowClass'\"\n                  [style]=\"row | zTableRowConfig: zConfig() : 'rowStyle'\"\n                  [style.height.px]=\"effectiveDynamicRowSizing() ? null : virtualRowHeight()\"\n                  [style.min-height.px]=\"effectiveDynamicRowSizing() ? virtualRowHeight() : null\"\n                  [style.--z-row-height]=\"effectiveDynamicRowSizing() ? 'auto' : virtualRowHeight() + 'px'\"\n                  [class.z-selected]=\"rowSelected\"\n                  [class.z-indeterminate-selected]=\"rowSomeSelected && !rowSelected\"\n                  [class.z-context-menu-active]=\"contentRowMenu()?.row?.id === row.id\"\n                  [class.z-pinned-top]=\"rowPinned === 'top'\"\n                  [class.z-pinned-top-first]=\"rowPinned === 'top' && (row | zTableRow: table : 'isFirstTopPinned')\"\n                  [class.z-pinned-bottom]=\"rowPinned === 'bottom'\"\n                  [class.z-pinned-bottom-last]=\"\n                    rowPinned === 'bottom' && (row | zTableRow: table : 'isLastBottomPinned')\n                  \"\n                  [class.z-pinned-bottom-first]=\"\n                    rowPinned === 'bottom' && (row | zTableRow: table : 'isFirstBottomPinned')\n                  \"\n                  [class.z-shadow-bottom]=\"\n                    showHeaderFooterShadow() &&\n                    hasScrollTop() &&\n                    rowPinned === 'top' &&\n                    (row | zTableRow: table : 'isLastTopPinned')\n                  \"\n                  [class.z-shadow-top]=\"\n                    showHeaderFooterShadow() &&\n                    hasScrollBottom() &&\n                    rowPinned === 'bottom' &&\n                    (row | zTableRow: table : 'isFirstBottomPinned')\n                  \"\n                  (contextmenu)=\"openContentRowMenu($event, row)\">\n                  @let isColumnPinningActivePinned = isPinnedLayoutWithinContainer();\n                  @for (cell of visibleCells; track cell.id) {\n                    @let cellPinned = cell.column.getIsPinned();\n                    @let cellSelectionId = row.id + '::' + cell.column.id;\n                    @if (\n                      canUseVirtualColumns() &&\n                      virtualLeftSpacerWidth() > 0 &&\n                      cell.column.id === firstVirtualCenterColumnId()\n                    ) {\n                      <td\n                        class=\"z-virtual-column-spacer pointer-events-none p-0\"\n                        [style.width.px]=\"virtualRenderedLeftSpacerWidth()\"></td>\n                    }\n                    @let isVirtualColumnVisible =\n                      !canUseVirtualColumns() ||\n                      cellPinned !== false ||\n                      virtualCenterColumnVisibilityMap()[cell.column.id];\n                    @if (isVirtualColumnVisible) {\n                      <td\n                        [attr.data-column-id]=\"cell.column.id\"\n                        [ngStyle]=\"\n                          cell.column\n                            | zTablePinningStyles\n                              : cell\n                              : 'body'\n                              : visibleCells\n                              : zConfig().columns\n                              : columnSizingInfo()\n                              : colDomWidthMap()\n                              : isColumnPinningActivePinned\n                        \"\n                        [class]=\"cell | zTableCellConfig: zConfig() : 'cellClass'\"\n                        [class.z-sticky-left]=\"isColumnPinningActivePinned && cellPinned === 'left'\"\n                        [class.z-sticky-right]=\"isColumnPinningActivePinned && cellPinned === 'right'\"\n                        [class.z-sticky-left-last]=\"\n                          isColumnPinningActivePinned &&\n                          cellPinned === 'left' &&\n                          (cell | zTableCellPin: 'isLastLeftPinned' : zConfig().columns : 'body' : visibleCells)\n                        \"\n                        [class.z-sticky-right-first]=\"\n                          isColumnPinningActivePinned &&\n                          cellPinned === 'right' &&\n                          (cell | zTableCellPin: 'isFirstRightPinned' : zConfig().columns : 'body' : visibleCells)\n                        \"\n                        [class.z-sticky-right-last]=\"\n                          isColumnPinningActivePinned &&\n                          cellPinned === 'right' &&\n                          (cell | zTableCellPin: 'isLastRightPinned' : zConfig().columns : 'body' : visibleCells)\n                        \"\n                        [class.z-at-left-edge]=\"cell | zTableCellOffset: orderedLeafColumns()\"\n                        [class.z-col-drag]=\"cell.column.id === 'rowDrag'\"\n                        [class.z-col-select]=\"cell.column.id === 'select'\"\n                        [class.z-col-expand]=\"cell.column.id === 'expand'\"\n                        [class.z-col-actions]=\"cell.column.id === actionColumnInfo()?.columnId\"\n                        [class.z-cell-selectable]=\"canUseCellSelection()\"\n                        [class.z-cell-active]=\"\n                          !hasMultipleSelectedCells() &&\n                          activeCell()?.rowId === row.id &&\n                          activeCell()?.columnId === cell.column.id\n                        \"\n                        [class.z-cell-range-selected]=\"visualSelectedCellIds().has(cellSelectionId)\"\n                        [class.z-cell-range-top]=\"selectedCellEdgeIds().top.has(cellSelectionId)\"\n                        [class.z-cell-range-right]=\"selectedCellEdgeIds().right.has(cellSelectionId)\"\n                        [class.z-cell-range-bottom]=\"selectedCellEdgeIds().bottom.has(cellSelectionId)\"\n                        [class.z-cell-range-left]=\"selectedCellEdgeIds().left.has(cellSelectionId)\"\n                        [style.--z-cell-range-top]=\"(selectedCellRangeInsets().get(cellSelectionId)?.top ?? 0) + '%'\"\n                        [style.--z-cell-range-right]=\"\n                          (selectedCellRangeInsets().get(cellSelectionId)?.right ?? 0) + '%'\n                        \"\n                        [style.--z-cell-range-bottom]=\"\n                          (selectedCellRangeInsets().get(cellSelectionId)?.bottom ?? 0) + '%'\n                        \"\n                        [style.--z-cell-range-left]=\"(selectedCellRangeInsets().get(cellSelectionId)?.left ?? 0) + '%'\"\n                        [style]=\"cell | zTableCellConfig: zConfig() : 'cellStyle'\"\n                        (pointerdown)=\"onCellPointerDown($event, row, cell.column.id)\"\n                        (pointerenter)=\"onCellPointerEnter($event, row, cell.column.id)\"\n                        (contextmenu)=\"openCellMenu($event, row, cell.column.id)\">\n                        @if (cell.column.id === 'select') {\n                          <z-checkbox\n                            [zChecked]=\"rowSelected\"\n                            [zIndeterminate]=\"rowSomeSelected && !rowSelected\"\n                            [zDisabled]=\"!canUseRowSelection()\"\n                            (zChange)=\"canUseRowSelection() && row.toggleSelected()\" />\n                        } @else if (cell.column.id === 'expand') {\n                          <button\n                            type=\"button\"\n                            class=\"hover:bg-muted flex h-6 w-6 cursor-pointer items-center justify-center rounded\"\n                            (click)=\"row.toggleExpanded()\">\n                            <z-icon\n                              zType=\"lucideChevronRight\"\n                              zSize=\"14\"\n                              class=\"transition-transform duration-200\"\n                              [class.rotate-90]=\"row.getIsExpanded()\" />\n                          </button>\n                        } @else if (cell.column.id === 'actionRowPin') {\n                          <div class=\"flex items-center justify-center\">\n                            <button\n                              type=\"button\"\n                              class=\"z-row-pin-trigger z-row-pin-unpin-trigger flex h-6 w-6 cursor-pointer items-center justify-center rounded\"\n                              (click)=\"cell.row.pin(false)\">\n                              <z-icon zType=\"lucideX\" zSize=\"14\" />\n                            </button>\n                          </div>\n                        } @else if (cell.column.id === actionColumnInfo()?.columnId && actionColumnInfo()) {\n                          <z-table-actions\n                            [zConfig]=\"$any(actionColumnInfo()!.config)\"\n                            [zRow]=\"cell.row.original\"\n                            [zRowId]=\"cell.row.id\"\n                            (zActionClick)=\"onActionClick($event)\" />\n                        } @else {\n                          @let isCellVisible = cell | zTableCellVisible: zConfig().columns;\n                          @if (isCellVisible) {\n                            <ng-container\n                              *flexRender=\"cell.column.columnDef.cell; props: cell.getContext(); let cellContent\">\n                              @if (cellContent | zTableIsTemplateRef) {\n                                <div\n                                  class=\"z-template-content\"\n                                  [class]=\"cell | zTableCellConfig: zConfig() : 'contentClass'\"\n                                  [ngStyle]=\"cell | zTableCellConfig: zConfig() : 'contentStyle'\">\n                                  <ng-container\n                                    *ngTemplateOutlet=\"cellContent; context: { $implicit: cell.getContext() }\" />\n                                </div>\n                              } @else if (cellContent | zTableHasIcon) {\n                                <z-table-icon-text\n                                  [zText]=\"cellContent\"\n                                  [zTooltip]=\"cell | zTableCellConfig: zConfig() : 'contentTooltip'\"\n                                  [class]=\"cell | zTableCellConfig: zConfig() : 'contentClass'\"\n                                  [ngStyle]=\"cell | zTableCellConfig: zConfig() : 'contentStyle'\" />\n                              } @else {\n                                <span\n                                  class=\"z-table-cell-text\"\n                                  z-tooltip\n                                  [zContent]=\"(cell | zTableCellConfig: zConfig() : 'contentTooltip') || cellContent\"\n                                  [innerHTML]=\"cellContent | translate | zSafeHtml\"\n                                  [class]=\"cell | zTableCellConfig: zConfig() : 'contentClass'\"\n                                  [ngStyle]=\"cell | zTableCellConfig: zConfig() : 'contentStyle'\"></span>\n                              }\n                            </ng-container>\n                          }\n                        }\n                      </td>\n                    }\n                    @if (\n                      canUseVirtualColumns() &&\n                      virtualRightSpacerWidth() > 0 &&\n                      cell.column.id === lastVirtualCenterColumnId()\n                    ) {\n                      <td\n                        class=\"z-virtual-column-spacer pointer-events-none p-0\"\n                        [style.width.px]=\"virtualRenderedRightSpacerWidth()\"></td>\n                    }\n                  }\n                </tr>\n              </tbody>\n            </table>\n          </ng-template>\n        } @else {\n          <!-- Normal Scroll Mode -->\n\n          <table [ngStyle]=\"columnSizeVars()\" [style.width.px]=\"renderedTableWidth()\">\n            <ng-container *ngTemplateOutlet=\"colGroupTpl\" />\n            <tbody\n              class=\"z-table-drag-body\"\n              [class.z-has-vertical-scroll]=\"hasVerticalScroll()\"\n              [class.z-has-bottom-pinned]=\"table.getBottomRows().length > 0\"\n              [class.z-last-row-touches-bottom]=\"lastRowTouchesBottom()\">\n              <!-- Row Template -->\n              <ng-template #rowTemplate let-row let-isGroupChild=\"isGroupChild\" let-groupDepth=\"groupDepth\">\n                @let visibleCells = row.getVisibleCells();\n                @let rowSelected = canUseRowSelection() && row.getIsSelected();\n                @let rowSomeSelected = canUseRowSelection() && row.getIsSomeSelected();\n                @let rowPinned = row.getIsPinned();\n                <tr\n                  z-table-row-hover\n                  z-table-draggable=\"row\"\n                  z-table-drop-target=\"row\"\n                  [z-table-drag-table-id]=\"dragInstanceId\"\n                  [z-table-drop-table-id]=\"dragInstanceId\"\n                  [z-table-drag-item-id]=\"row.id\"\n                  [z-table-drop-item-id]=\"row.id\"\n                  [z-table-drag-disabled]=\"!isRowDragEnabled()\"\n                  [z-table-drop-disabled]=\"!isRowDragEnabled()\"\n                  (zTableDropped)=\"_handleDragDrop($event)\"\n                  [attr.data-row-id]=\"row.id\"\n                  [class]=\"row | zTableRowConfig: zConfig() : 'rowClass'\"\n                  [style]=\"row | zTableRowConfig: zConfig() : 'rowStyle'\"\n                  [ngStyle]=\"row | zTableRow: table : 'pinningStyles' : pinnedRowHeights() : virtualRowHeight()\"\n                  [class.z-child-row]=\"row.depth > 0\"\n                  [class.z-group-child-row]=\"isGroupChild\"\n                  [style.--z-group-content-indent]=\"groupDepth > 0 ? 1.75 + (groupDepth - 1) * 0.75 + 'rem' : null\"\n                  [class.z-selected]=\"rowSelected\"\n                  [class.z-indeterminate-selected]=\"rowSomeSelected && !rowSelected\"\n                  [class.z-context-menu-active]=\"contentRowMenu()?.row?.id === row.id\"\n                  [class.z-pinned-top]=\"rowPinned === 'top'\"\n                  [class.z-pinned-top-first]=\"rowPinned === 'top' && (row | zTableRow: table : 'isFirstTopPinned')\"\n                  [class.z-pinned-bottom]=\"rowPinned === 'bottom'\"\n                  [class.z-pinned-bottom-last]=\"\n                    rowPinned === 'bottom' && (row | zTableRow: table : 'isLastBottomPinned')\n                  \"\n                  [class.z-pinned-bottom-first]=\"\n                    rowPinned === 'bottom' && (row | zTableRow: table : 'isFirstBottomPinned')\n                  \"\n                  [class.z-shadow-bottom]=\"\n                    showHeaderFooterShadow() &&\n                    hasScrollTop() &&\n                    rowPinned === 'top' &&\n                    (row | zTableRow: table : 'isLastTopPinned')\n                  \"\n                  [class.z-shadow-top]=\"\n                    showHeaderFooterShadow() &&\n                    hasScrollBottom() &&\n                    rowPinned === 'bottom' &&\n                    (row | zTableRow: table : 'isFirstBottomPinned')\n                  \"\n                  [attr.data-depth]=\"row.depth\"\n                  (contextmenu)=\"openContentRowMenu($event, row)\">\n                  @for (cell of visibleCells; track cell.id) {\n                    @let cellPinned = cell.column.getIsPinned();\n                    @let cellRowPinned = cell.row.getIsPinned();\n                    @if (\n                      canUseVirtualColumns() &&\n                      virtualLeftSpacerWidth() > 0 &&\n                      cell.column.id === firstVirtualCenterColumnId()\n                    ) {\n                      <td\n                        class=\"z-virtual-column-spacer pointer-events-none p-0\"\n                        [style.width.px]=\"virtualRenderedLeftSpacerWidth()\"></td>\n                    }\n                    @let shouldRenderRowSpan =\n                      cell | zTableSpan: zConfig().columns : 'shouldRender' : bodyRowSpanRows();\n                    @let shouldRenderColSpan = cell | zTableCellRender: visibleCells : zConfig().columns : 'body';\n                    @let isVirtualColumnVisible =\n                      !canUseVirtualColumns() ||\n                      cellPinned !== false ||\n                      virtualCenterColumnVisibilityMap()[cell.column.id];\n                    @if (shouldRenderRowSpan && shouldRenderColSpan && isVirtualColumnVisible) {\n                      @let cellSelectionId = row.id + '::' + cell.column.id;\n                      <td\n                        [attr.data-column-id]=\"cell.column.id\"\n                        [ngStyle]=\"\n                          cell.column\n                            | zTablePinningStyles\n                              : cell\n                              : 'body'\n                              : visibleCells\n                              : zConfig().columns\n                              : columnSizingInfo()\n                              : colDomWidthMap()\n                              : isColumnPinningActive\n                        \"\n                        [class]=\"cell | zTableCellConfig: zConfig() : 'cellClass'\"\n                        [style]=\"cell | zTableCellConfig: zConfig() : 'cellStyle'\"\n                        [class.z-sticky-left]=\"isColumnPinningActive && cellPinned === 'left'\"\n                        [class.z-sticky-right]=\"isColumnPinningActive && cellPinned === 'right'\"\n                        [class.z-sticky-left-last]=\"\n                          isColumnPinningActive &&\n                          cellPinned === 'left' &&\n                          (cell | zTableCellPin: 'isLastLeftPinned' : zConfig().columns : 'body' : visibleCells)\n                        \"\n                        [class.z-sticky-right-first]=\"\n                          isColumnPinningActive &&\n                          cellPinned === 'right' &&\n                          (cell | zTableCellPin: 'isFirstRightPinned' : zConfig().columns : 'body' : visibleCells)\n                        \"\n                        [class.z-sticky-right-last]=\"\n                          isColumnPinningActive &&\n                          cellPinned === 'right' &&\n                          (cell | zTableCellPin: 'isLastRightPinned' : zConfig().columns : 'body' : visibleCells)\n                        \"\n                        [class.z-at-left-edge]=\"cell | zTableCellOffset: orderedLeafColumns()\"\n                        [class.z-col-drag]=\"cell.column.id === 'rowDrag'\"\n                        [class.z-col-select]=\"cell.column.id === 'select'\"\n                        [class.z-col-expand]=\"cell.column.id === 'expand'\"\n                        [class.z-col-actions]=\"\n                          cell.column.id === 'actions' || cell.column.id === actionColumnInfo()?.columnId\n                        \"\n                        [class.z-cell-selectable]=\"canUseCellSelection()\"\n                        [class.z-cell-active]=\"\n                          !hasMultipleSelectedCells() &&\n                          activeCell()?.rowId === row.id &&\n                          activeCell()?.columnId === cell.column.id\n                        \"\n                        [class.z-cell-range-selected]=\"visualSelectedCellIds().has(cellSelectionId)\"\n                        [class.z-cell-range-top]=\"selectedCellEdgeIds().top.has(cellSelectionId)\"\n                        [class.z-cell-range-right]=\"selectedCellEdgeIds().right.has(cellSelectionId)\"\n                        [class.z-cell-range-bottom]=\"selectedCellEdgeIds().bottom.has(cellSelectionId)\"\n                        [class.z-cell-range-left]=\"selectedCellEdgeIds().left.has(cellSelectionId)\"\n                        [class.z-content-edit-active]=\"\n                          activeContentEditCell()?.rowId === row.id &&\n                          activeContentEditCell()?.columnId === cell.column.id\n                        \"\n                        [class.z-at-bottom]=\"cell | zTableCellBottom: zConfig().columns : renderedBodyRows()\"\n                        [attr.rowspan]=\"cell | zTableSpan: zConfig().columns : 'cellRowSpan' : bodyRowSpanRows()\"\n                        [attr.colspan]=\"cell | zTableSpan: zConfig().columns : 'cellColSpan'\"\n                        [style.--z-cell-range-top]=\"(selectedCellRangeInsets().get(cellSelectionId)?.top ?? 0) + '%'\"\n                        [style.--z-cell-range-right]=\"\n                          (selectedCellRangeInsets().get(cellSelectionId)?.right ?? 0) + '%'\n                        \"\n                        [style.--z-cell-range-bottom]=\"\n                          (selectedCellRangeInsets().get(cellSelectionId)?.bottom ?? 0) + '%'\n                        \"\n                        [style.--z-cell-range-left]=\"(selectedCellRangeInsets().get(cellSelectionId)?.left ?? 0) + '%'\"\n                        (pointerdown)=\"onCellPointerDown($event, row, cell.column.id)\"\n                        (pointerenter)=\"onCellPointerEnter($event, row, cell.column.id)\"\n                        (contextmenu)=\"openCellMenu($event, row, cell.column.id)\">\n                        @if (cell.column.id === 'rowDrag') {\n                          <div class=\"flex items-center justify-center\">\n                            <button\n                              data-z-table-drag-handle\n                              type=\"button\"\n                              class=\"text-muted-foreground hover:bg-muted hover:text-foreground inline-flex size-7 items-center justify-center rounded-md transition-colors\"\n                              [class.cursor-grab]=\"isRowDragEnabled()\"\n                              [class.cursor-not-allowed]=\"!isRowDragEnabled()\"\n                              [class.opacity-40]=\"!isRowDragEnabled()\">\n                              <z-icon zType=\"lucideGripVertical\" zSize=\"14\" />\n                            </button>\n                          </div>\n                        } @else if (cell.column.id === 'select') {\n                          <!-- Row Checkbox with Pin Button -->\n                          <div class=\"flex items-center justify-center gap-1\">\n                            <z-checkbox\n                              [zChecked]=\"canUseRowSelection() && cell.row.getIsSelected()\"\n                              [zIndeterminate]=\"\n                                canUseRowSelection() && cell.row.getIsSomeSelected() && !cell.row.getIsSelected()\n                              \"\n                              [zDisabled]=\"!canUseRowSelection() || !cell.row.getCanSelect()\"\n                              (zChange)=\"canUseRowSelection() && cell.row.toggleSelected()\" />\n                            @if (zConfig().enableRowPinning && cell.row.depth === 0 && !hasBodyRowSpan()) {\n                              @if (cellRowPinned) {\n                                <button\n                                  type=\"button\"\n                                  class=\"z-row-pin-trigger z-row-pin-unpin-trigger flex h-6 w-6 cursor-pointer items-center justify-center rounded\"\n                                  (click)=\"cell.row.pin(false)\">\n                                  <z-icon zType=\"lucideX\" zSize=\"14\" />\n                                </button>\n                              } @else {\n                                <ng-template #rowPinPopoverContent>\n                                  <div class=\"flex flex-col gap-1 py-1\">\n                                    <button\n                                      type=\"button\"\n                                      (click)=\"cell.row.pin('top'); rowPinPopover.hideImmediate()\"\n                                      class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none\">\n                                      <z-icon zType=\"lucideArrowUp\" zSize=\"12\" />\n                                      <span>{{ 'i18n_z_ui_table_pin_top' | translate }}</span>\n                                    </button>\n                                    <button\n                                      type=\"button\"\n                                      (click)=\"cell.row.pin('bottom'); rowPinPopover.hideImmediate()\"\n                                      class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none\">\n                                      <z-icon zType=\"lucideArrowDown\" zSize=\"12\" />\n                                      <span>{{ 'i18n_z_ui_table_pin_bottom' | translate }}</span>\n                                    </button>\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 outline-none\">\n                                  <z-icon zType=\"lucideEllipsis\" zSize=\"14\" class=\"rotate-90\" />\n                                </button>\n                              }\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.getCanExpand()) {\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                              @if (cellRowPinned) {\n                                <button\n                                  type=\"button\"\n                                  class=\"z-row-pin-trigger z-row-pin-unpin-trigger flex h-6 w-6 cursor-pointer items-center justify-center rounded\"\n                                  (click)=\"cell.row.pin(false)\">\n                                  <z-icon zType=\"lucideX\" zSize=\"14\" />\n                                </button>\n                              } @else {\n                                <ng-template #rowPinPopoverContent>\n                                  <div class=\"flex flex-col gap-1 py-1\">\n                                    <button\n                                      type=\"button\"\n                                      (click)=\"cell.row.pin('top'); rowPinPopover.hideImmediate()\"\n                                      class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none\">\n                                      <z-icon zType=\"lucideArrowUp\" zSize=\"12\" />\n                                      <span>{{ 'i18n_z_ui_table_pin_top' | translate }}</span>\n                                    </button>\n                                    <button\n                                      type=\"button\"\n                                      (click)=\"cell.row.pin('bottom'); rowPinPopover.hideImmediate()\"\n                                      class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none\">\n                                      <z-icon zType=\"lucideArrowDown\" zSize=\"12\" />\n                                      <span>{{ 'i18n_z_ui_table_pin_bottom' | translate }}</span>\n                                    </button>\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 outline-none\">\n                                  <z-icon zType=\"lucideEllipsis\" zSize=\"14\" class=\"rotate-90\" />\n                                </button>\n                              }\n                            }\n                          </div>\n                        } @else if (\n                          (cell.column.id === 'actionRowPin' || cell.column.id === 'actions') &&\n                          cell.column.id !== actionColumnInfo()?.columnId\n                        ) {\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                              @if (cellRowPinned) {\n                                <button\n                                  type=\"button\"\n                                  class=\"z-row-pin-trigger z-row-pin-unpin-trigger flex h-6 w-6 cursor-pointer items-center justify-center rounded\"\n                                  (click)=\"cell.row.pin(false)\">\n                                  <z-icon zType=\"lucideX\" zSize=\"14\" />\n                                </button>\n                              } @else {\n                                <ng-template #rowPinPopoverContent>\n                                  <div class=\"flex flex-col gap-1 py-1\">\n                                    <button\n                                      type=\"button\"\n                                      (click)=\"cell.row.pin('top'); rowPinPopover.hideImmediate()\"\n                                      class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none\">\n                                      <z-icon zType=\"lucideArrowUp\" zSize=\"12\" />\n                                      <span>{{ 'i18n_z_ui_table_pin_top' | translate }}</span>\n                                    </button>\n                                    <button\n                                      type=\"button\"\n                                      (click)=\"cell.row.pin('bottom'); rowPinPopover.hideImmediate()\"\n                                      class=\"z-column-menu-item text-foreground hover:bg-muted focus:bg-muted mx-1 flex min-h-7 cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs outline-none\">\n                                      <z-icon zType=\"lucideArrowDown\" zSize=\"12\" />\n                                      <span>{{ 'i18n_z_ui_table_pin_bottom' | translate }}</span>\n                                    </button>\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 outline-none\">\n                                  <z-icon zType=\"lucideEllipsis\" zSize=\"14\" class=\"rotate-90\" />\n                                </button>\n                              }\n                            </div>\n                          }\n                        } @else if (cell.column.id === actionColumnInfo()?.columnId && actionColumnInfo()) {\n                          <z-table-actions\n                            [zConfig]=\"$any(actionColumnInfo()!.config)\"\n                            [zRow]=\"cell.row.original\"\n                            [zRowId]=\"cell.row.id\"\n                            (zActionClick)=\"onActionClick($event)\" />\n                        } @else {\n                          @let isCellVisibleNormal = cell | zTableCellVisible: zConfig().columns;\n                          @if (isCellVisibleNormal) {\n                            @let editInfo = cell.getContext() | zTableCellEdit: zConfig().columns;\n                            @if (editInfo.enabled) {\n                              <!-- Editable Cell -->\n                              <z-table-edit-cell\n                                [zRow]=\"cell.row.original\"\n                                [zRowId]=\"cell.row.id\"\n                                [zRowIndex]=\"cell.row.index\"\n                                [zColumnId]=\"cell.column.id\"\n                                [zValue]=\"cell.getValue()\"\n                                [zRowUpdate]=\"_rowUpdate()\"\n                                [zEditConfig]=\"$any(editInfo.config)\"\n                                (zChange)=\"onCellEdit($any($event))\" />\n                            } @else if (editInfo.contentEnabled) {\n                              @let contentConfig = editInfo.contentConfig!;\n                              @if (\n                                activeContentEditCell()?.rowId === row.id &&\n                                activeContentEditCell()?.columnId === cell.column.id\n                              ) {\n                                <z-table-content-editor\n                                  [zValue]=\"cell.getValue()\"\n                                  [zConfig]=\"contentConfig\"\n                                  (zCommit)=\"onContentEditCommit($event, row, cell.column.id, cell.getValue())\"\n                                  (zCancel)=\"onContentEditCancel()\" />\n                              } @else {\n                                <button\n                                  type=\"button\"\n                                  class=\"z-table-content-trigger\"\n                                  [attr.data-z-table-edit-row]=\"row.id\"\n                                  [attr.data-z-table-edit-column]=\"cell.column.id\"\n                                  (keydown)=\"onContentEditKeydown($event, row.id, cell.column.id)\"\n                                  (click)=\"onContentEditStart($event, row.id, cell.column.id)\">\n                                  {{ contentConfig.displayValue }}\n                                </button>\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                                  @let isClickableTpl = cell.column.id | zTableCellClickable: zConfig().columns;\n                                  <div\n                                    class=\"z-template-content\"\n                                    [class]=\"cell | zTableCellConfig: zConfig() : 'contentClass'\"\n                                    [ngStyle]=\"cell | zTableCellConfig: zConfig() : 'contentStyle'\"\n                                    (click)=\"isClickableTpl && onCellClick(row, cell.column.id, cell.getValue())\">\n                                    <ng-container\n                                      *ngTemplateOutlet=\"cellContent; context: { $implicit: cell.getContext() }\" />\n                                  </div>\n                                } @else if (cellContent | zTableHasIcon) {\n                                  <!-- Icon syntax rendering -->\n                                  @let isClickableIconTpl = cell.column.id | zTableCellClickable: zConfig().columns;\n                                  <z-table-icon-text\n                                    [zText]=\"cellContent\"\n                                    [zTooltip]=\"cell | zTableCellConfig: zConfig() : 'contentTooltip'\"\n                                    [class]=\"cell | zTableCellConfig: zConfig() : 'contentClass'\"\n                                    [ngStyle]=\"cell | zTableCellConfig: zConfig() : 'contentStyle'\"\n                                    (click)=\"isClickableIconTpl && onCellClick(row, cell.column.id, cell.getValue())\" />\n                                } @else {\n                                  <!-- Default/innerHTML rendering -->\n                                  @let isClickableDefaultTpl = cell.column.id | zTableCellClickable: zConfig().columns;\n                                  @let cellTooltipConfigTpl = cell | zTableCellConfig: zConfig() : 'contentTooltip';\n                                  @let cellPopoverConfigTpl = cell | zTableCellConfig: zConfig() : 'contentPopover';\n                                  @let cellPopoverContentTpl = cellPopoverConfigTpl | zTablePopoverConfig: 'content';\n                                  <ng-template #cellPopoverTplNormal>\n                                    @if (cellPopoverContentTpl | zTableIsTemplateRef) {\n                                      <ng-container *ngTemplateOutlet=\"$any(cellPopoverContentTpl)\" />\n                                    }\n                                    @if (!(cellPopoverContentTpl | zTableIsTemplateRef)) {\n                                      <div [innerHTML]=\"$any(cellPopoverContentTpl) | zSafeHtml\"></div>\n                                    }\n                                  </ng-template>\n                                  @if (cellPopoverContentTpl) {\n                                    <div\n                                      class=\"z-table-cell-text\"\n                                      z-popover\n                                      z-tooltip\n                                      [zTriggerElement]=\"cellOverlayContentTpl\"\n                                      [zTriggerRef]=\"cellOverlayContentTpl\"\n                                      [zContent]=\"\n                                        (cellTooltipConfigTpl | zTableTooltipConfig: 'content') || cellContent\n                                      \"\n                                      [zTooltipPosition]=\"$any(cellTooltipConfigTpl | zTableTooltipConfig: 'position')\"\n                                      [zTooltipTrigger]=\"$any(cellTooltipConfigTpl | zTableTooltipConfig: 'trigger')\"\n                                      [zTooltipType]=\"$any(cellTooltipConfigTpl | zTableTooltipConfig: 'type')\"\n                                      [zTooltipSize]=\"$any(cellTooltipConfigTpl | zTableTooltipConfig: 'size')\"\n                                      [zTooltipClass]=\"$any(cellTooltipConfigTpl | zTableTooltipConfig: 'class')\"\n                                      [zTooltipShowDelay]=\"\n                                        $any(cellTooltipConfigTpl | zTableTooltipConfig: 'showDelay')\n                                      \"\n                                      [zTooltipHideDelay]=\"\n                                        $any(cellTooltipConfigTpl | zTableTooltipConfig: 'hideDelay')\n                                      \"\n                                      [zTooltipArrow]=\"$any(cellTooltipConfigTpl | zTableTooltipConfig: 'arrow')\"\n                                      [zTooltipOffset]=\"$any(cellTooltipConfigTpl | zTableTooltipConfig: 'offset')\"\n                                      [zAutoDetect]=\"$any(cellTooltipConfigTpl | zTableTooltipConfig: 'autoDetect')\"\n                                      [zAlwaysShow]=\"$any(cellTooltipConfigTpl | zTableTooltipConfig: 'alwaysShow')\"\n                                      [zMaxWidth]=\"$any(cellTooltipConfigTpl | zTableTooltipConfig: 'maxWidth')\"\n                                      [zPopoverContent]=\"cellPopoverTplNormal\"\n                                      [zPosition]=\"$any(cellPopoverConfigTpl | zTablePopoverConfig: 'position')\"\n                                      [zPopoverTrigger]=\"$any(cellPopoverConfigTpl | zTablePopoverConfig: 'trigger')\"\n                                      [zClass]=\"$any(cellPopoverConfigTpl | zTablePopoverConfig: 'class')\"\n                                      [zShowDelay]=\"$any(cellPopoverConfigTpl | zTablePopoverConfig: 'showDelay')\"\n                                      [zHideDelay]=\"$any(cellPopoverConfigTpl | zTablePopoverConfig: 'hideDelay')\"\n                                      [zDisabled]=\"$any(cellPopoverConfigTpl | zTablePopoverConfig: 'disabled')\"\n                                      [zOffset]=\"$any(cellPopoverConfigTpl | zTablePopoverConfig: 'offset')\"\n                                      [zPopoverWidth]=\"$any(cellPopoverConfigTpl | zTablePopoverConfig: 'width')\"\n                                      [zManualClose]=\"$any(cellPopoverConfigTpl | zTablePopoverConfig: 'manualClose')\"\n                                      [zOutsideClickClose]=\"\n                                        $any(cellPopoverConfigTpl | zTablePopoverConfig: 'outsideClickClose')\n                                      \"\n                                      [zScrollClose]=\"$any(cellPopoverConfigTpl | zTablePopoverConfig: 'scrollClose')\"\n                                      [zSticky]=\"$any(cellPopoverConfigTpl | zTablePopoverConfig: 'sticky')\"\n                                      [zShowArrow]=\"$any(cellPopoverConfigTpl | zTablePopoverConfig: 'showArrow')\"\n                                      [zKeyboardSafe]=\"$any(cellPopoverConfigTpl | zTablePopoverConfig: 'keyboardSafe')\"\n                                      (click)=\"\n                                        isClickableDefaultTpl && onCellClick(row, cell.column.id, cell.getValue())\n                                      \">\n                                      <span\n                                        #cellOverlayContentTpl\n                                        class=\"z-table-cell-content-trigger\"\n                                        [class]=\"cell | zTableCellConfig: zConfig() : 'contentClass'\"\n                                        [ngStyle]=\"cell | zTableCellConfig: zConfig() : 'contentStyle'\"\n                                        [innerHTML]=\"cellContent | translate | zSafeHtml\"></span>\n                                    </div>\n                                  } @else {\n                                    <div\n                                      class=\"z-table-cell-text\"\n                                      z-tooltip\n                                      [zTriggerElement]=\"cellTooltipContentTpl\"\n                                      [zContent]=\"\n                                        (cellTooltipConfigTpl | zTableTooltipConfig: 'content') || cellContent\n                                      \"\n                                      [zTooltipPosition]=\"$any(cellTooltipConfigTpl | zTableTooltipConfig: 'position')\"\n                                      [zTooltipTrigger]=\"$any(cellTooltipConfigTpl | zTableTooltipConfig: 'trigger')\"\n                                      [zTooltipType]=\"$any(cellTooltipConfigTpl | zTableTooltipConfig: 'type')\"\n                                      [zTooltipSize]=\"$any(cellTooltipConfigTpl | zTableTooltipConfig: 'size')\"\n                                      [zTooltipClass]=\"$any(cellTooltipConfigTpl | zTableTooltipConfig: 'class')\"\n                                      [zTooltipShowDelay]=\"\n                                        $any(cellTooltipConfigTpl | zTableTooltipConfig: 'showDelay')\n                                      \"\n                                      [zTooltipHideDelay]=\"\n                                        $any(cellTooltipConfigTpl | zTableTooltipConfig: 'hideDelay')\n                                      \"\n                                      [zTooltipArrow]=\"$any(cellTooltipConfigTpl | zTableTooltipConfig: 'arrow')\"\n                                      [zTooltipOffset]=\"$any(cellTooltipConfigTpl | zTableTooltipConfig: 'offset')\"\n                                      [zAutoDetect]=\"$any(cellTooltipConfigTpl | zTableTooltipConfig: 'autoDetect')\"\n                                      [zAlwaysShow]=\"$any(cellTooltipConfigTpl | zTableTooltipConfig: 'alwaysShow')\"\n                                      [zMaxWidth]=\"$any(cellTooltipConfigTpl | zTableTooltipConfig: 'maxWidth')\"\n                                      (click)=\"\n                                        isClickableDefaultTpl && onCellClick(row, cell.column.id, cell.getValue())\n                                      \">\n                                      <span\n                                        #cellTooltipContentTpl\n                                        class=\"z-table-cell-content-trigger\"\n                                        [class]=\"cell | zTableCellConfig: zConfig() : 'contentClass'\"\n                                        [ngStyle]=\"cell | zTableCellConfig: zConfig() : 'contentStyle'\"\n                                        [innerHTML]=\"cellContent | translate | zSafeHtml\"></span>\n                                    </div>\n                                  }\n                                }\n                              </ng-container>\n                            }\n                          }\n                        }\n                      </td>\n                    }\n                    @if (\n                      canUseVirtualColumns() &&\n                      virtualRightSpacerWidth() > 0 &&\n                      cell.column.id === lastVirtualCenterColumnId()\n                    ) {\n                      <td\n                        class=\"z-virtual-column-spacer pointer-events-none p-0\"\n                        [style.width.px]=\"virtualRenderedRightSpacerWidth()\"></td>\n                    }\n                  }\n                </tr>\n\n                <!-- Expanded Row Detail -->\n                @if (row.getIsExpanded() && row.depth === 0 && !row.subRows?.length) {\n                  @let resolvedSubTableConfig = row | zTableSubTableConfig: zConfig();\n                  <tr class=\"z-expanded-row\">\n                    <td [attr.colspan]=\"renderedColumnCount()\" class=\"p-0\">\n                      @if (zConfig().expandedRowTemplate) {\n                        <ng-container *ngTemplateOutlet=\"zConfig().expandedRowTemplate!; context: { $implicit: row }\" />\n                      } @else if (resolvedSubTableConfig) {\n                        <div class=\"z-sub-table-container\">\n                          <z-table [zConfig]=\"$any(resolvedSubTableConfig)\" zVariant=\"borderless\" />\n                        </div>\n                      }\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 (item of groupedCenterRowItems(); track item.type === 'group' ? item.id : item.row.id) {\n                @if (item.type === 'group') {\n                  <tr\n                    class=\"z-group-row\"\n                    [class.z-group-row-has-totals]=\"item.totals\"\n                    [class.z-group-row-expanded]=\"item.expanded\"\n                    [attr.data-group-id]=\"item.id\"\n                    [attr.data-group-depth]=\"item.depth\">\n                    @if (item.totals) {\n                      @let totalColumnMap = groupTotalColumnMap();\n                      @for (column of orderedLeafColumns(); track column.id; let isFirstGroupCell = $first) {\n                        <td\n                          [class.z-group-row-label-cell]=\"isFirstGroupCell\"\n                          [class.z-group-row-total-cell]=\"!isFirstGroupCell && totalColumnMap[column.id]\"\n                          [attr.data-column-id]=\"column.id\">\n                          @if (isFirstGroupCell) {\n                            <div class=\"z-group-row-sticky-wrapper\">\n                              <button\n                                type=\"button\"\n                                class=\"z-group-row-trigger\"\n                                [style.padding-left.rem]=\"0.75 + item.depth * 0.75\"\n                                [attr.aria-expanded]=\"item.expanded\"\n                                (click)=\"toggleGroupRow(item.id)\">\n                                <z-icon\n                                  zType=\"lucideChevronRight\"\n                                  zSize=\"14\"\n                                  class=\"transition-transform duration-200\"\n                                  [class.rotate-90]=\"item.expanded\" />\n                                <span\n                                  class=\"z-group-row-label\"\n                                  z-tooltip\n                                  [zContent]=\"(item.columnLabel ? item.columnLabel + ': ' : '') + item.label\">\n                                  @if (item.columnLabel) {\n                                    <span class=\"z-group-row-column-label\">{{ item.columnLabel }}:</span>\n                                  }\n                                  {{ item.label }}\n                                </span>\n                                @if (groupingConfig().showCount !== false) {\n                                  <span class=\"z-group-row-count\">{{ item.count }}</span>\n                                }\n                                @if (item.loading) {\n                                  <z-loading class=\"z-group-row-loading\" [zLoading]=\"true\" zSize=\"xs\" />\n                                }\n                              </button>\n                              @if (!isServerGrouping()) {\n                                <button\n                                  type=\"button\"\n                                  z-button\n                                  zType=\"ghost\"\n                                  zSize=\"sm\"\n                                  zTypeIcon=\"lucideX\"\n                                  zSizeIcon=\"14\"\n                                  [zWave]=\"false\"\n                                  z-tooltip\n                                  [zContent]=\"'i18n_z_ui_table_clear_grouping' | translate\"\n                                  [zAlwaysShow]=\"true\"\n                                  zTooltipPosition=\"top\"\n                                  class=\"z-group-row-remove\"\n                                  (click)=\"removeGroupingColumn(item.columnId)\"></button>\n                              }\n                            </div>\n                          }\n                          @if (!isFirstGroupCell && totalColumnMap[column.id]) {\n                            @let totalConfig = groupTotalConfigMap()[column.id];\n                            @let totalTooltip = totalConfig.tooltip;\n                            @let totalPopover = totalConfig.popover;\n                            @let totalPopoverContent = totalPopover | zTablePopoverConfig: 'content';\n                            <ng-template #groupTotalPopoverTpl>\n                              @if (totalPopoverContent | zTableIsTemplateRef) {\n                                <ng-container *ngTemplateOutlet=\"$any(totalPopoverContent)\" />\n                              }\n                              @if (!(totalPopoverContent | zTableIsTemplateRef)) {\n                                <div [innerHTML]=\"$any(totalPopoverContent) | zSafeHtml\"></div>\n                              }\n                            </ng-template>\n                            <span\n                              class=\"z-group-row-total\"\n                              z-tooltip\n                              z-popover\n                              [class]=\"totalConfig.class\"\n                              [zContent]=\"\n                                $any((totalTooltip | zTableTooltipConfig: 'content') || item.totals[column.id])\n                              \"\n                              [zTooltipPosition]=\"$any(totalTooltip | zTableTooltipConfig: 'position')\"\n                              [zTooltipTrigger]=\"$any(totalTooltip | zTableTooltipConfig: 'trigger')\"\n                              [zTooltipType]=\"$any(totalTooltip | zTableTooltipConfig: 'type')\"\n                              [zTooltipSize]=\"$any(totalTooltip | zTableTooltipConfig: 'size')\"\n                              [zTooltipClass]=\"$any(totalTooltip | zTableTooltipConfig: 'class')\"\n                              [zTooltipShowDelay]=\"$any(totalTooltip | zTableTooltipConfig: 'showDelay')\"\n                              [zTooltipHideDelay]=\"$any(totalTooltip | zTableTooltipConfig: 'hideDelay')\"\n                              [zTooltipArrow]=\"$any(totalTooltip | zTableTooltipConfig: 'arrow')\"\n                              [zTooltipOffset]=\"$any(totalTooltip | zTableTooltipConfig: 'offset')\"\n                              [zAutoDetect]=\"$any(totalTooltip | zTableTooltipConfig: 'autoDetect')\"\n                              [zAlwaysShow]=\"$any(totalTooltip | zTableTooltipConfig: 'alwaysShow')\"\n                              [zMaxWidth]=\"$any(totalTooltip | zTableTooltipConfig: 'maxWidth')\"\n                              [zPopoverContent]=\"totalPopoverContent ? groupTotalPopoverTpl : null\"\n                              [zPosition]=\"$any(totalPopover | zTablePopoverConfig: 'position')\"\n                              [zPopoverTrigger]=\"$any(totalPopover | zTablePopoverConfig: 'trigger')\"\n                              [zClass]=\"$any(totalPopover | zTablePopoverConfig: 'class')\"\n                              [zShowDelay]=\"$any(totalPopover | zTablePopoverConfig: 'showDelay')\"\n                              [zHideDelay]=\"$any(totalPopover | zTablePopoverConfig: 'hideDelay')\"\n                              [zDisabled]=\"$any(totalPopover | zTablePopoverConfig: 'disabled')\"\n                              [zOffset]=\"$any(totalPopover | zTablePopoverConfig: 'offset')\"\n                              [zPopoverWidth]=\"$any(totalPopover | zTablePopoverConfig: 'width')\"\n                              [zManualClose]=\"$any(totalPopover | zTablePopoverConfig: 'manualClose')\"\n                              [zOutsideClickClose]=\"$any(totalPopover | zTablePopoverConfig: 'outsideClickClose')\"\n                              [zScrollClose]=\"$any(totalPopover | zTablePopoverConfig: 'scrollClose')\"\n                              [zSticky]=\"$any(totalPopover | zTablePopoverConfig: 'sticky')\"\n                              [zShowArrow]=\"$any(totalPopover | zTablePopoverConfig: 'showArrow')\"\n                              [zKeyboardSafe]=\"$any(totalPopover | zTablePopoverConfig: 'keyboardSafe')\">\n                              {{ item.totals[column.id] }}\n                            </span>\n                          }\n                        </td>\n                      }\n                    } @else {\n                      <td [attr.colspan]=\"renderedColumnCount()\">\n                        <div class=\"z-group-row-sticky-wrapper\">\n                          <button\n                            type=\"button\"\n                            class=\"z-group-row-trigger\"\n                            [style.padding-left.rem]=\"0.75 + item.depth * 0.75\"\n                            [attr.aria-expanded]=\"item.expanded\"\n                            (click)=\"toggleGroupRow(item.id)\">\n                            <z-icon\n                              zType=\"lucideChevronRight\"\n                              zSize=\"14\"\n                              class=\"transition-transform duration-200\"\n                              [class.rotate-90]=\"item.expanded\" />\n                            <span\n                              class=\"z-group-row-label\"\n                              z-tooltip\n                              [zContent]=\"(item.columnLabel ? item.columnLabel + ': ' : '') + item.label\">\n                              @if (item.columnLabel) {\n                                <span class=\"z-group-row-column-label\">{{ item.columnLabel }}:</span>\n                              }\n                              {{ item.label }}\n                            </span>\n                            @if (groupingConfig().showCount !== false) {\n                              <span class=\"z-group-row-count\">{{ item.count }}</span>\n                            }\n                            @if (item.loading) {\n                              <z-loading class=\"z-group-row-loading\" [zLoading]=\"true\" zSize=\"xs\" />\n                            }\n                          </button>\n                          @if (!isServerGrouping()) {\n                            <button\n                              type=\"button\"\n                              z-button\n                              zType=\"ghost\"\n                              zSize=\"sm\"\n                              zTypeIcon=\"lucideX\"\n                              zSizeIcon=\"14\"\n                              [zWave]=\"false\"\n                              z-tooltip\n                              [zContent]=\"'i18n_z_ui_table_clear_grouping' | translate\"\n                              [zAlwaysShow]=\"true\"\n                              zTooltipPosition=\"top\"\n                              class=\"z-group-row-remove\"\n                              (click)=\"removeGroupingColumn(item.columnId)\"></button>\n                          }\n                        </div>\n                      </td>\n                    }\n                  </tr>\n                }\n                @if (item.type === 'row') {\n                  <ng-container\n                    *ngTemplateOutlet=\"\n                      rowTemplate;\n                      context: {\n                        $implicit: item.row,\n                        isGroupChild: item.isGroupChild,\n                        groupDepth: item.groupDepth,\n                      }\n                    \" />\n                }\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]=\"renderedTableWidth()\">\n        <ng-container *ngTemplateOutlet=\"colGroupTpl\" />\n        <tfoot>\n          @for (footerGroup of orderedFooterGroups(); track footerGroup.id; let footerRowIndex = $index) {\n            @if (footerGroup | zTableFooterContent: zConfig().columns : footerRowIndex) {\n              <tr>\n                @for (footer of footerGroup.headers; track footer.id) {\n                  @if (\n                    canUseVirtualColumns() &&\n                    virtualLeftSpacerWidth() > 0 &&\n                    footer.column.id === firstVirtualCenterColumnId()\n                  ) {\n                    <th\n                      class=\"z-virtual-column-spacer z-virtual-footer-spacer pointer-events-none p-0\"\n                      [style.width.px]=\"virtualRenderedLeftSpacerWidth()\"></th>\n                  }\n                  @let rowSpan = footer | zTableSpan: zConfig().columns : 'footerRowSpan' : footerRowIndex;\n                  @let shouldRender =\n                    footer\n                      | zTableCellRender\n                        : footerGroup.headers\n                        : zConfig().columns\n                        : 'footer'\n                        : footerRowIndex\n                        : orderedFooterGroups();\n                  @let isVirtualColumnVisible =\n                    !canUseVirtualColumns() ||\n                    footer.column.getIsPinned() !== false ||\n                    virtualCenterColumnVisibilityMap()[footer.column.id];\n                  @if (rowSpan && shouldRender && isVirtualColumnVisible) {\n                    <th\n                      [attr.data-column-id]=\"footer.column.id\"\n                      [ngStyle]=\"\n                        footer.column\n                          | zTablePinningStyles\n                            : footer\n                            : 'footer'\n                            : table\n                            : zConfig().columns\n                            : columnSizingInfo()\n                            : colDomWidthMap()\n                            : isColumnPinningActive\n                      \"\n                      [class]=\"\n                        (footer.column.id | zTableColumnConfig: zConfig().columns : 'footerClass' : footerRowIndex) +\n                        ' ' +\n                        (footer.column.id | zTableColumnConfig: zConfig().columns : 'footerAlignClass' : footerRowIndex)\n                      \"\n                      [style]=\"\n                        footer.column.id | zTableColumnConfig: zConfig().columns : 'footerStyle' : footerRowIndex\n                      \"\n                      [class.z-sticky-left]=\"\n                        isColumnPinningActive && (footer | zTableCellPin: 'isLeftPinned' : zConfig().columns : 'footer')\n                      \"\n                      [class.z-sticky-right]=\"\n                        isColumnPinningActive &&\n                        (footer | zTableCellPin: 'isRightPinned' : zConfig().columns : 'footer')\n                      \"\n                      [class.z-sticky-left-last]=\"\n                        isColumnPinningActive &&\n                        (footer | zTableCellPin: 'isLastLeftPinned' : zConfig().columns : 'footer')\n                      \"\n                      [class.z-sticky-right-first]=\"\n                        isColumnPinningActive &&\n                        (footer | zTableCellPin: 'isFirstRightPinned' : zConfig().columns : 'footer')\n                      \"\n                      [class.z-sticky-right-last]=\"\n                        isColumnPinningActive &&\n                        (footer | zTableCellPin: 'isLastRightPinned' : zConfig().columns : 'footer')\n                      \"\n                      [class.z-at-left-edge]=\"footer | zTableCellOffset: orderedLeafColumns()\"\n                      [attr.rowspan]=\"rowSpan\"\n                      [attr.colspan]=\"footer | zTableSpan: zConfig().columns : 'footerColSpan' : footerRowIndex\">\n                      @let configFooterContent =\n                        footer.column.id | zTableFooterRender: zConfig().columns : footerRowIndex;\n                      @if (configFooterContent !== undefined && configFooterContent !== '') {\n                        <ng-container *flexRender=\"configFooterContent; props: footer.getContext(); let footerContent\">\n                          <div\n                            class=\"flex w-full items-center\"\n                            [class.justify-center]=\"\n                              (footer.column.id\n                                | zTableColumnConfig: zConfig().columns : 'footerAlignClass' : footerRowIndex) ===\n                              'text-center'\n                            \"\n                            [class.justify-end]=\"\n                              (footer.column.id\n                                | zTableColumnConfig: zConfig().columns : 'footerAlignClass' : footerRowIndex) ===\n                              'text-right'\n                            \">\n                            @if (footerContent | zTableIsTemplateRef) {\n                              <!-- TemplateRef rendering -->\n                              <div\n                                class=\"z-template-content\"\n                                [class]=\"\n                                  footer.column.id\n                                    | zTableColumnConfig: zConfig().columns : 'footerContentClass' : footerRowIndex\n                                \"\n                                [ngStyle]=\"\n                                  footer.column.id\n                                    | zTableColumnConfig: zConfig().columns : 'footerContentStyle' : footerRowIndex\n                                \">\n                                <ng-container\n                                  *ngTemplateOutlet=\"footerContent; context: { $implicit: footer.getContext() }\" />\n                              </div>\n                            } @else if (footerContent | zTableHasIcon) {\n                              <!-- Icon syntax rendering -->\n                              <z-table-icon-text\n                                [zText]=\"footerContent\"\n                                [zTooltip]=\"\n                                  footer.column.id\n                                    | zTableColumnConfig: zConfig().columns : 'footerTooltip' : footerRowIndex\n                                \"\n                                [class]=\"\n                                  footer.column.id\n                                    | zTableColumnConfig: zConfig().columns : 'footerContentClass' : footerRowIndex\n                                \"\n                                [ngStyle]=\"\n                                  footer.column.id\n                                    | zTableColumnConfig: zConfig().columns : 'footerContentStyle' : footerRowIndex\n                                \" />\n                            } @else {\n                              <!-- Default/string rendering -->\n                              <span\n                                class=\"z-table-cell-text\"\n                                z-tooltip\n                                [zContent]=\"\n                                  (footer.column.id\n                                    | zTableColumnConfig: zConfig().columns : 'footerTooltip' : footerRowIndex) ||\n                                  footerContent\n                                \"\n                                [class]=\"\n                                  footer.column.id\n                                    | zTableColumnConfig: zConfig().columns : 'footerContentClass' : footerRowIndex\n                                \"\n                                [ngStyle]=\"\n                                  footer.column.id\n                                    | zTableColumnConfig: zConfig().columns : 'footerContentStyle' : footerRowIndex\n                                \">\n                                {{ footerContent | translate }}\n                              </span>\n                            }\n                          </div>\n                        </ng-container>\n                      }\n                    </th>\n                  }\n                  @if (\n                    canUseVirtualColumns() &&\n                    virtualRightSpacerWidth() > 0 &&\n                    footer.column.id === lastVirtualCenterColumnId()\n                  ) {\n                    <th\n                      class=\"z-virtual-column-spacer z-virtual-footer-spacer pointer-events-none p-0\"\n                      [style.width.px]=\"virtualRenderedRightSpacerWidth()\"></th>\n                  }\n                }\n              </tr>\n            }\n          }\n        </tfoot>\n      </table>\n    </div>\n  }\n</div>\n\n<!-- Pagination -->\n@if (zConfig().pagination?.enabled !== false) {\n  <div class=\"mt-4 flex items-center justify-between gap-4\">\n    <div class=\"truncate text-sm text-gray-500\">\n      {{ 'i18n_z_ui_table_total_rows' | translate: { total: (paginationTotal() | zFormatNum) } }}\n    </div>\n    <z-pagination\n      [zTotal]=\"paginationTotal()\"\n      [(zPageIndex)]=\"pagination().pageIndex\"\n      [(zPageSize)]=\"pagination().pageSize\"\n      [zPageSizeOptions]=\"zConfig().pagination?.pageSizeOptions ?? [10, 20, 50, 100]\"\n      [zShowSizeChanger]=\"zConfig().pagination?.showSizeChanger ?? true\"\n      [zShowQuickJumper]=\"zConfig().pagination?.showQuickJumper ?? false\"\n      [zShowTotal]=\"false\"\n      [zDisabled]=\"zConfig().pagination?.disabled || isLoading() || isProcessing()\"\n      (zOnPageChange)=\"onPageChange($event)\" />\n  </div>\n}\n\n<!-- Floating Bulk Action Bar -->\n<div class=\"z-bulk-action-bar-origin\" cdkOverlayOrigin #bulkBarOrigin=\"cdkOverlayOrigin\"></div>\n<ng-template\n  cdkConnectedOverlay\n  [cdkConnectedOverlayOrigin]=\"bulkBarOrigin\"\n  [cdkConnectedOverlayOpen]=\"bulkBarMounted()\"\n  [cdkConnectedOverlayPositions]=\"bulkBarPositions\"\n  [cdkConnectedOverlayHasBackdrop]=\"false\"\n  cdkConnectedOverlayPanelClass=\"z-bulk-action-bar-overlay\">\n  @if (bulkBarConfig(); as config) {\n    <div class=\"z-bulk-action-bar-inner\" [class.z-leaving]=\"bulkBarClosing()\">\n      <div class=\"z-bulk-action-bar-count\">\n        {{ bulkBarContext()?.selectedRowIds?.length ?? 0 | zFormatNum }}\n        {{ config.selectedLabel ?? ('i18n_z_ui_table_selected' | translate) }}\n      </div>\n\n      <div class=\"z-bulk-action-bar-divider\"></div>\n\n      @for (item of bulkBarItems(); track item.action.key) {\n        <button\n          type=\"button\"\n          z-button\n          zSize=\"sm\"\n          [zType]=\"item.buttonType\"\n          [zDisabled]=\"item.disabled\"\n          class=\"z-bulk-action-bar-button\"\n          [disabled]=\"item.disabled\"\n          (click)=\"onBulkActionClick(item.action)\">\n          @if (item.action.icon) {\n            <z-icon [zType]=\"item.action.icon\" [zSize]=\"item.action.iconSize ?? '14'\" />\n          }\n          @if (item.action.label) {\n            <span>{{ item.action.label | translate }}</span>\n          }\n        </button>\n      }\n    </div>\n  }\n</ng-template>\n\n<!-- Settings Drawer -->\n<z-drawer\n  [(zVisible)]=\"showSettingsDrawer\"\n  [zTitle]=\"'i18n_z_ui_table_settings_title' | translate\"\n  zPlacement=\"right\"\n  zWidth=\"500px\"\n  [zShadow]=\"true\"\n  [zOkText]=\"null\"\n  [zCancelText]=\"'i18n_z_ui_drawer_close' | translate\">\n  <div class=\"z-table-settings-drawer px-4\">\n    <!-- Display Settings -->\n    <div class=\"mb-4\">\n      <h4 class=\"text-foreground mb-2 text-sm font-semibold\">{{ 'i18n_z_ui_table_display_settings' | translate }}</h4>\n      <p class=\"text-muted-foreground mb-3 text-xs\">{{ 'i18n_z_ui_table_display_settings_desc' | translate }}</p>\n      <div class=\"grid grid-cols-2 gap-x-4 gap-y-3\">\n        <z-checkbox\n          [zChecked]=\"showHorizontalBorder()\"\n          [zText]=\"'i18n_z_ui_table_horizontal_border' | translate\"\n          (zChange)=\"showHorizontalBorder.set(!showHorizontalBorder())\" />\n        <z-checkbox\n          [zChecked]=\"showVerticalBorder()\"\n          [zText]=\"'i18n_z_ui_table_vertical_border' | translate\"\n          (zChange)=\"showVerticalBorder.set(!showVerticalBorder())\" />\n        <z-checkbox\n          [zChecked]=\"showHeaderFooterShadow()\"\n          [zText]=\"'i18n_z_ui_table_header_footer_shadow' | translate\"\n          (zChange)=\"showHeaderFooterShadow.set(!showHeaderFooterShadow())\" />\n      </div>\n    </div>\n\n    <!-- Divider -->\n    <div class=\"border-border my-4 border-t\"></div>\n\n    <!-- Unified Column Settings -->\n    <!-- Tạm tắt điều kiện: @if (zConfig().enableSettings) -->\n    <div class=\"mb-4\">\n      <h4 class=\"text-foreground mb-2 text-sm font-semibold\">{{ 'i18n_z_ui_table_column_settings' | translate }}</h4>\n      <p class=\"text-muted-foreground mb-3 text-xs\">{{ 'i18n_z_ui_table_column_settings_desc' | translate }}</p>\n\n      <!-- Unpinned Columns (Draggable) -->\n      <div\n        cdkDropList\n        #columnDropList=\"cdkDropList\"\n        [cdkDropListAutoScrollDisabled]=\"true\"\n        (cdkDropListDropped)=\"onPendingColumnDrop($event)\"\n        class=\"z-column-drop-list space-y-1.5\">\n        @for (columnId of columnOrder(); track columnId; let i = $index) {\n          @if (columnId !== 'expand' && columnId !== 'select' && columnId !== 'rowDrag') {\n            @let column = table.getColumn(columnId);\n            @let isPinned = column?.getIsPinned();\n            @let isVisible = pendingVisibleColumns().includes(columnId);\n            @let isVisibilityDisabled = pendingColumnVisibilityDisabledMap()[columnId];\n            @let isGroupedColumn = groupingColumnMap()[columnId];\n            @let columnEnablePinningConfig = columnId | zTableColumnConfig: zConfig().columns : 'enablePinning';\n            @let canPin =\n              (columnEnablePinningConfig ?? zConfig().enableColumnPinning ?? true) && column?.getCanPin() !== false;\n            @if (!isPinned) {\n              <div\n                cdkDrag\n                [cdkDragDisabled]=\"isGroupedColumn\"\n                [cdkDragData]=\"columnId\"\n                cdkDragLockAxis=\"y\"\n                cdkDragPreviewContainer=\"global\"\n                cdkDragPreviewClass=\"z-drag-preview\"\n                class=\"z-drag-item border-border bg-card hover:border-primary flex cursor-default items-center gap-2 rounded border px-2 py-1.5 text-sm\"\n                [class.opacity-60]=\"!isVisible\">\n                <!-- Drag Handle -->\n                <z-icon\n                  cdkDragHandle\n                  zType=\"lucideGripVertical\"\n                  zSize=\"14\"\n                  class=\"text-muted-foreground shrink-0\"\n                  [class.cursor-pointer]=\"!isGroupedColumn\"\n                  [class.cursor-default]=\"isGroupedColumn\"\n                  [class.opacity-40]=\"isGroupedColumn\" />\n\n                <!-- Visibility Checkbox -->\n                <input\n                  type=\"checkbox\"\n                  [checked]=\"isVisible\"\n                  [disabled]=\"isVisibilityDisabled\"\n                  (change)=\"onToggleColumnVisibility(columnId)\"\n                  (mousedown)=\"$event.stopPropagation()\"\n                  class=\"border-input h-4 w-4 shrink-0 cursor-default rounded disabled:opacity-50\" />\n\n                <!-- Column Name -->\n                <span class=\"flex min-w-0 flex-1 flex-col\">\n                  <span class=\"truncate\" [class.text-muted-foreground]=\"!isVisible\">\n                    {{ columnId | zTableColumnHeader: zConfig().columns | translate }}\n                  </span>\n                  @let parents = columnId | zTableColumnParents: zConfig().columns;\n                  @if (parents) {\n                    <span class=\"text-muted-foreground truncate text-[0.625rem]\">({{ parents | translate }})</span>\n                  }\n                </span>\n\n                <!-- Pin Buttons -->\n                @if (canPin) {\n                  <div class=\"flex shrink-0 items-center gap-0.5\" (mousedown)=\"$event.stopPropagation()\">\n                    <button\n                      type=\"button\"\n                      [disabled]=\"!isVisible || isGroupedColumn || !pinAvailabilityMap()[columnId]?.left\"\n                      (click)=\"onToggleColumnPin(columnId, 'left')\"\n                      class=\"text-muted-foreground hover:bg-muted cursor-pointer rounded p-1 text-xs transition-colors disabled:cursor-not-allowed disabled:opacity-40\"\n                      title=\"Pin Left\">\n                      <z-icon zType=\"lucideArrowLeft\" zSize=\"12\" />\n                    </button>\n                    <button\n                      type=\"button\"\n                      [disabled]=\"!isVisible || isGroupedColumn || !pinAvailabilityMap()[columnId]?.right\"\n                      (click)=\"onToggleColumnPin(columnId, 'right')\"\n                      class=\"text-muted-foreground hover:bg-muted cursor-pointer rounded p-1 text-xs transition-colors disabled:cursor-not-allowed disabled:opacity-40\"\n                      title=\"Pin Right\">\n                      <z-icon zType=\"lucideArrowRight\" zSize=\"12\" />\n                    </button>\n                  </div>\n                }\n              </div>\n            }\n          }\n        }\n      </div>\n\n      <!-- Pinned Columns Section -->\n      @if (zConfig().enableColumnPinning ?? true) {\n        @if (pinnedColumnIds().length > 0) {\n          <div class=\"border-border mt-4 border-t pt-4\">\n            <h5 class=\"text-muted-foreground mb-2 text-xs font-medium\">\n              {{ 'i18n_z_ui_table_pinned_columns' | translate }}\n            </h5>\n            <div class=\"space-y-1.5\">\n              @for (columnId of pinnedColumnIds(); track columnId) {\n                @let column = table.getColumn(columnId);\n                @let isPinned = column?.getIsPinned();\n                @let isVisible = pendingVisibleColumns().includes(columnId);\n                @let isVisibilityDisabled = pendingColumnVisibilityDisabledMap()[columnId];\n                @let isGroupedColumn = groupingColumnMap()[columnId];\n                <div\n                  class=\"border-border bg-muted/30 flex items-center gap-2 rounded border px-2 py-1.5 text-sm\"\n                  [class.opacity-60]=\"!isVisible\">\n                  <!-- Pin Icon -->\n                  <z-icon zType=\"lucidePin\" zSize=\"14\" class=\"text-primary shrink-0\" />\n\n                  <!-- Visibility Checkbox -->\n                  <input\n                    type=\"checkbox\"\n                    [checked]=\"isVisible\"\n                    [disabled]=\"isVisibilityDisabled\"\n                    (change)=\"onToggleColumnVisibility(columnId)\"\n                    class=\"border-input h-4 w-4 shrink-0 cursor-default rounded disabled:opacity-50\" />\n\n                  <!-- Column Name -->\n                  <span class=\"flex min-w-0 flex-1 flex-col\">\n                    <span class=\"truncate\" [class.text-muted-foreground]=\"!isVisible\">\n                      {{ columnId | zTableColumnHeader: zConfig().columns | translate }}\n                    </span>\n                    @let pinnedParents = columnId | zTableColumnParents: zConfig().columns;\n                    @if (pinnedParents) {\n                      <span class=\"text-muted-foreground truncate text-[0.625rem]\">\n                        ({{ pinnedParents | translate }})\n                      </span>\n                    }\n                  </span>\n\n                  <!-- Position Badge -->\n                  <span class=\"bg-primary/10 text-primary shrink-0 rounded px-1.5 py-0.5 text-[0.625rem] font-medium\">\n                    {{\n                      isPinned === 'left' ? ('i18n_z_ui_table_left' | translate) : ('i18n_z_ui_table_right' | translate)\n                    }}\n                  </span>\n\n                  <!-- Unpin Button -->\n                  <button\n                    type=\"button\"\n                    [disabled]=\"isGroupedColumn\"\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 disabled:cursor-not-allowed disabled:opacity-40\"\n                    title=\"Unpin\">\n                    <z-icon zType=\"lucideX\" zSize=\"12\" />\n                  </button>\n                </div>\n              }\n            </div>\n          </div>\n        }\n      }\n    </div>\n  </div>\n</z-drawer>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}