@shival99/z-ui 2.1.32 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/fesm2022/shival99-z-ui-components-z-accordion.mjs +41 -25
  2. package/fesm2022/shival99-z-ui-components-z-accordion.mjs.map +1 -1
  3. package/fesm2022/shival99-z-ui-components-z-autocomplete.mjs +176 -97
  4. package/fesm2022/shival99-z-ui-components-z-autocomplete.mjs.map +1 -1
  5. package/fesm2022/shival99-z-ui-components-z-avatar.mjs +71 -40
  6. package/fesm2022/shival99-z-ui-components-z-avatar.mjs.map +1 -1
  7. package/fesm2022/shival99-z-ui-components-z-breadcrumb.mjs +26 -15
  8. package/fesm2022/shival99-z-ui-components-z-breadcrumb.mjs.map +1 -1
  9. package/fesm2022/shival99-z-ui-components-z-button-group.mjs +33 -21
  10. package/fesm2022/shival99-z-ui-components-z-button-group.mjs.map +1 -1
  11. package/fesm2022/shival99-z-ui-components-z-button.mjs +32 -19
  12. package/fesm2022/shival99-z-ui-components-z-button.mjs.map +1 -1
  13. package/fesm2022/shival99-z-ui-components-z-calendar.mjs +289 -172
  14. package/fesm2022/shival99-z-ui-components-z-calendar.mjs.map +1 -1
  15. package/fesm2022/shival99-z-ui-components-z-card.mjs +34 -24
  16. package/fesm2022/shival99-z-ui-components-z-card.mjs.map +1 -1
  17. package/fesm2022/shival99-z-ui-components-z-chat.mjs +85 -47
  18. package/fesm2022/shival99-z-ui-components-z-chat.mjs.map +1 -1
  19. package/fesm2022/shival99-z-ui-components-z-checkbox.mjs +56 -31
  20. package/fesm2022/shival99-z-ui-components-z-checkbox.mjs.map +1 -1
  21. package/fesm2022/shival99-z-ui-components-z-code.mjs +29 -16
  22. package/fesm2022/shival99-z-ui-components-z-code.mjs.map +1 -1
  23. package/fesm2022/shival99-z-ui-components-z-command.mjs +34 -19
  24. package/fesm2022/shival99-z-ui-components-z-command.mjs.map +1 -1
  25. package/fesm2022/shival99-z-ui-components-z-drawer.mjs +310 -88
  26. package/fesm2022/shival99-z-ui-components-z-drawer.mjs.map +1 -1
  27. package/fesm2022/shival99-z-ui-components-z-dropdown-menu.mjs +32 -18
  28. package/fesm2022/shival99-z-ui-components-z-dropdown-menu.mjs.map +1 -1
  29. package/fesm2022/shival99-z-ui-components-z-editor.mjs +118 -62
  30. package/fesm2022/shival99-z-ui-components-z-editor.mjs.map +1 -1
  31. package/fesm2022/shival99-z-ui-components-z-empty.mjs +31 -17
  32. package/fesm2022/shival99-z-ui-components-z-empty.mjs.map +1 -1
  33. package/fesm2022/shival99-z-ui-components-z-filter.mjs +81 -54
  34. package/fesm2022/shival99-z-ui-components-z-filter.mjs.map +1 -1
  35. package/fesm2022/shival99-z-ui-components-z-gallery.mjs +240 -132
  36. package/fesm2022/shival99-z-ui-components-z-gallery.mjs.map +1 -1
  37. package/fesm2022/shival99-z-ui-components-z-icon.mjs +39 -21
  38. package/fesm2022/shival99-z-ui-components-z-icon.mjs.map +1 -1
  39. package/fesm2022/shival99-z-ui-components-z-input.mjs +173 -95
  40. package/fesm2022/shival99-z-ui-components-z-input.mjs.map +1 -1
  41. package/fesm2022/shival99-z-ui-components-z-kanban.mjs +88 -47
  42. package/fesm2022/shival99-z-ui-components-z-kanban.mjs.map +1 -1
  43. package/fesm2022/shival99-z-ui-components-z-loading.mjs +31 -19
  44. package/fesm2022/shival99-z-ui-components-z-loading.mjs.map +1 -1
  45. package/fesm2022/shival99-z-ui-components-z-marquee.mjs +42 -23
  46. package/fesm2022/shival99-z-ui-components-z-marquee.mjs.map +1 -1
  47. package/fesm2022/shival99-z-ui-components-z-media-player.mjs +87 -45
  48. package/fesm2022/shival99-z-ui-components-z-media-player.mjs.map +1 -1
  49. package/fesm2022/shival99-z-ui-components-z-menu.mjs +126 -67
  50. package/fesm2022/shival99-z-ui-components-z-menu.mjs.map +1 -1
  51. package/fesm2022/shival99-z-ui-components-z-metric-card.mjs +42 -23
  52. package/fesm2022/shival99-z-ui-components-z-metric-card.mjs.map +1 -1
  53. package/fesm2022/shival99-z-ui-components-z-modal.mjs +144 -80
  54. package/fesm2022/shival99-z-ui-components-z-modal.mjs.map +1 -1
  55. package/fesm2022/shival99-z-ui-components-z-pagination.mjs +45 -24
  56. package/fesm2022/shival99-z-ui-components-z-pagination.mjs.map +1 -1
  57. package/fesm2022/shival99-z-ui-components-z-popover.mjs +90 -57
  58. package/fesm2022/shival99-z-ui-components-z-popover.mjs.map +1 -1
  59. package/fesm2022/shival99-z-ui-components-z-qrcode.mjs +51 -29
  60. package/fesm2022/shival99-z-ui-components-z-qrcode.mjs.map +1 -1
  61. package/fesm2022/shival99-z-ui-components-z-radio.mjs +36 -20
  62. package/fesm2022/shival99-z-ui-components-z-radio.mjs.map +1 -1
  63. package/fesm2022/shival99-z-ui-components-z-scrollarea.mjs +27 -15
  64. package/fesm2022/shival99-z-ui-components-z-scrollarea.mjs.map +1 -1
  65. package/fesm2022/shival99-z-ui-components-z-select.mjs +239 -138
  66. package/fesm2022/shival99-z-ui-components-z-select.mjs.map +1 -1
  67. package/fesm2022/shival99-z-ui-components-z-show-more.mjs +38 -21
  68. package/fesm2022/shival99-z-ui-components-z-show-more.mjs.map +1 -1
  69. package/fesm2022/shival99-z-ui-components-z-skeleton-auto.mjs +42 -23
  70. package/fesm2022/shival99-z-ui-components-z-skeleton-auto.mjs.map +1 -1
  71. package/fesm2022/shival99-z-ui-components-z-skeleton.mjs +35 -19
  72. package/fesm2022/shival99-z-ui-components-z-skeleton.mjs.map +1 -1
  73. package/fesm2022/shival99-z-ui-components-z-steps.mjs +55 -31
  74. package/fesm2022/shival99-z-ui-components-z-steps.mjs.map +1 -1
  75. package/fesm2022/shival99-z-ui-components-z-switch.mjs +60 -33
  76. package/fesm2022/shival99-z-ui-components-z-switch.mjs.map +1 -1
  77. package/fesm2022/shival99-z-ui-components-z-table.mjs +10875 -0
  78. package/fesm2022/shival99-z-ui-components-z-table.mjs.map +1 -0
  79. package/fesm2022/shival99-z-ui-components-z-tabs.mjs +534 -0
  80. package/fesm2022/shival99-z-ui-components-z-tabs.mjs.map +1 -0
  81. package/fesm2022/shival99-z-ui-components-z-tags.mjs +72 -46
  82. package/fesm2022/shival99-z-ui-components-z-tags.mjs.map +1 -1
  83. package/fesm2022/shival99-z-ui-components-z-timeline.mjs +254 -0
  84. package/fesm2022/shival99-z-ui-components-z-timeline.mjs.map +1 -0
  85. package/fesm2022/shival99-z-ui-components-z-toast.mjs +53 -31
  86. package/fesm2022/shival99-z-ui-components-z-toast.mjs.map +1 -1
  87. package/fesm2022/shival99-z-ui-components-z-tooltip.mjs +133 -56
  88. package/fesm2022/shival99-z-ui-components-z-tooltip.mjs.map +1 -1
  89. package/fesm2022/shival99-z-ui-components-z-upload.mjs +63 -36
  90. package/fesm2022/shival99-z-ui-components-z-upload.mjs.map +1 -1
  91. package/fesm2022/shival99-z-ui-i18n.mjs +2 -0
  92. package/fesm2022/shival99-z-ui-i18n.mjs.map +1 -1
  93. package/fesm2022/shival99-z-ui-pipes.mjs +18 -18
  94. package/fesm2022/shival99-z-ui-services.mjs +35 -31
  95. package/fesm2022/shival99-z-ui-services.mjs.map +1 -1
  96. package/package.json +16 -16
  97. package/types/shival99-z-ui-components-z-autocomplete.d.ts +2 -2
  98. package/types/shival99-z-ui-components-z-card.d.ts +1 -2
  99. package/types/shival99-z-ui-components-z-drawer.d.ts +20 -2
  100. package/types/shival99-z-ui-components-z-gallery.d.ts +1 -2
  101. package/types/shival99-z-ui-components-z-select.d.ts +2 -2
  102. package/types/shival99-z-ui-components-z-table.d.ts +2293 -0
  103. package/types/shival99-z-ui-components-z-tabs.d.ts +92 -0
  104. package/types/shival99-z-ui-components-z-timeline.d.ts +71 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shival99-z-ui-components-z-table.mjs","sources":["../../../../libs/core-ui/components/z-table/z-table.define.ts","../../../../libs/core-ui/components/z-table/z-table.util.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/components/z-table-edit-cell.component.ts","../../../../libs/core-ui/components/z-table/components/z-table-filter.component.ts","../../../../libs/core-ui/components/z-table/components/z-table-icon-text.component.ts","../../../../libs/core-ui/components/z-table/directives/z-table-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":["import type { ZSelectOption } from '@shival99/z-ui/components/z-select';\nimport {\n createExpandedRowModel,\n createFacetedMinMaxValues,\n createFacetedRowModel,\n createFacetedUniqueValues,\n createFilteredRowModel,\n createPaginatedRowModel,\n createSortedRowModel,\n stockFeatures,\n tableFeatures,\n} from '@tanstack/angular-table';\nimport type { ZTableOperatorOption } from './z-table.types';\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. */\nexport const Z_DEFAULT_VIRTUAL_OVERSCAN = 8;\n/** Number of rows per virtual group for rowSpan grouping. */\nexport const Z_DEFAULT_GROUP_SIZE = 1;\n/** How many extra columns to render outside the visible area. */\nexport const Z_DEFAULT_COLUMN_VIRTUAL_OVERSCAN = 3;\n/** Minimum column width in pixels. */\nexport const Z_DEFAULT_COLUMN_MIN_SIZE = 100;\n/** Debounce delay in milliseconds for async state updates. */\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 a 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;\nexport const Z_VIRTUAL_GROUP_HEADER_HEIGHT = 48;\nexport const Z_TABLE_FILTER_HEADER_VISIBLE_COUNT = 3;\n\n/**\n * TanStack v9 feature registry used by every ZTable instance.\n * Row-model factories live in the feature registry in v9; keeping this object\n * stable also prevents injectTable from rebuilding static feature references.\n */\nexport const Z_TABLE_FEATURES = tableFeatures({\n ...stockFeatures,\n expandedRowModel: createExpandedRowModel(),\n facetedMinMaxValues: createFacetedMinMaxValues(),\n facetedRowModel: createFacetedRowModel(),\n facetedUniqueValues: createFacetedUniqueValues(),\n filteredRowModel: createFilteredRowModel(),\n paginatedRowModel: createPaginatedRowModel(),\n sortedRowModel: createSortedRowModel(),\n});\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","/**\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 { Cell, CellContext, ColumnDef, Header, Row } from './z-table-tanstack.type';\nimport { Z_DEFAULT_COLUMN_MIN_SIZE } from './z-table.define';\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 type ZTableActionItem,\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/** Ưu tiên label riêng, sau đó dùng tooltip dạng chuỗi cho action trong dropdown. */\nexport const getZTableActionDropdownLabel = <T>(action: ZTableActionItem<T>): string =>\n action.label ?? (typeof action.tooltip === 'string' ? action.tooltip : action.key);\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 === 'start' && configColSpan !== undefined && configColSpan !== null) {\n const allHeaders = header.headerGroup?.headers;\n if (!allHeaders) {\n return configColSpan;\n }\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() === 'start');\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 === 'start') {\n const headersInGroup = prevHeader.headerGroup?.headers;\n if (!headersInGroup) {\n continue;\n }\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() === 'start');\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.sortFn = sortConfig.sortFn as ColumnDef<T>['sortFn'];\n }\n\n if (!isLocalSortMode) {\n columnDef.sortFn = () => 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 { 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 { Z_TABLE_DEFAULT_DROPDOWN_BUTTON_SIZE, Z_TABLE_DEFAULT_MAX_VISIBLE_ACTIONS } from '../z-table.define';\nimport {\n ZActionTooltipState,\n ZTableActionClickEvent,\n ZTableActionColumnConfig,\n ZTableActionItem,\n} from '../z-table.types';\nimport { getZTableActionDropdownLabel } from '../z-table.util';\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: getZTableActionDropdownLabel(action),\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(candidate => getZTableActionDropdownLabel(candidate) === 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","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 [zDropdownMaxHeight]=\"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 { 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 { SortingState } from '@tanstack/angular-table';\nimport type { Column, Table } from '../z-table-tanstack.type';\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 type { Header } from '../z-table-tanstack.type';\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 '../z-table-tanstack.type';\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 '../z-table-tanstack.type';\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 '../z-table-tanstack.type';\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 '../z-table-tanstack.type';\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 '../z-table-tanstack.type';\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() === 'start';\n\n case 'isRightPinned':\n return cell.column.getIsPinned() === 'end';\n\n case 'isLastLeftPinned':\n return this._bodyCoveredCells(cell, columns, bodyCells).some(\n coveredCell => coveredCell.column.getIsPinned() === 'start' && coveredCell.column.getIsLastColumn('start')\n );\n\n case 'isFirstRightPinned':\n return this._bodyCoveredCells(cell, columns, bodyCells).some(\n coveredCell => coveredCell.column.getIsPinned() === 'end' && coveredCell.column.getIsFirstColumn('end')\n );\n\n case 'isLastRightPinned':\n return this._bodyCoveredCells(cell, columns, bodyCells).some(\n coveredCell => coveredCell.column.getIsPinned() === 'end' && coveredCell.column.getIsLastColumn('end')\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 === 'start') {\n return 'left';\n }\n if (direction === 'end') {\n return 'right';\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() === 'start' && lh.column.getIsLastColumn('start')\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 allHeadersInGroup = header.headerGroup?.headers;\n if (!allHeadersInGroup) {\n return false;\n }\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() === 'start' && lh.column.getIsLastColumn('start')\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() === 'end' && lh.column.getIsFirstColumn('end')\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 allHeadersInGroup = header.headerGroup?.headers;\n if (!allHeadersInGroup) {\n return false;\n }\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() === 'end' && lh.column.getIsFirstColumn('end')\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() === 'end' && lh.column.getIsLastColumn('end')\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 allHeadersInGroup = header.headerGroup?.headers;\n if (!allHeadersInGroup) {\n return false;\n }\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() === 'end' && lh.column.getIsLastColumn('end'));\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport type { Cell, Header } from '../z-table-tanstack.type';\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 '../z-table-tanstack.type';\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 '../z-table-tanstack.type';\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 } from '@tanstack/angular-table';\nimport type { ZTableFooterRenderContent } from '../z-table-footer-render.type';\nimport type { HeaderContext } from '../z-table-tanstack.type';\nimport type { ZTableColumnConfig } from '../z-table.types';\nimport { findColumnConfig, getFooterContent } from '../z-table.util';\n\n@Pipe({\n name: 'zTableFooterRender',\n standalone: true,\n pure: true,\n})\nexport class ZTableFooterRenderPipe implements PipeTransform {\n transform<T>(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, Row, Table } from '../z-table-tanstack.type';\nimport type { ZPinningStyles, ZTableColumnConfig } from '../z-table.types';\nimport { findColumnConfig, getBodyColSpan, shouldBodyCellRenderColSpan, shouldCellRenderUtil } 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 bodyRows?: Row<T>[]\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(\n column,\n item as Cell<T, unknown> | null,\n allCells,\n columns || [],\n domWidthMap,\n bodyRows\n );\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 bodyRows?: Row<T>[]\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, bodyRows);\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 bodyRows?: Row<T>[]\n ): Record<string, { left: number; right: number }> {\n if (!domWidthMap) {\n return this._buildBodyOffsetMap(allCells, columns, undefined, bodyRows);\n }\n\n const signature = this._bodyOffsetSignature(allCells, columns, bodyRows);\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, bodyRows);\n this._offsetCache.set(domWidthMap, { signature, result });\n return result;\n }\n\n private _bodyOffsetSignature<T>(\n allCells: Cell<T, unknown>[] | undefined,\n columns: ZTableColumnConfig<T>[],\n bodyRows?: Row<T>[]\n ): string {\n return (allCells ?? [])\n .map(\n cell =>\n `${cell.row.id}:${cell.column.id}:${cell.column.getIsPinned() || 'center'}:${this._shouldRenderBodyCellForPinning(cell, columns, bodyRows)}`\n )\n .join('|');\n }\n\n private _buildBodyOffsetMap<T>(\n allCells: Cell<T, unknown>[] | undefined,\n columns: ZTableColumnConfig<T>[],\n domWidthMap?: Record<string, number>,\n bodyRows?: Row<T>[]\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() !== 'start') {\n continue;\n }\n if (!this._shouldRenderBodyCellForPinning(c, columns, bodyRows)) {\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() !== 'end') {\n continue;\n }\n if (!this._shouldRenderBodyCellForPinning(c, columns, bodyRows)) {\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 _shouldRenderBodyCellForPinning<T>(\n cell: Cell<T, unknown>,\n columns: ZTableColumnConfig<T>[],\n bodyRows?: Row<T>[]\n ): boolean {\n const rows = bodyRows ?? (cell.row.table.getRowModel().rows as Row<T>[]);\n const rowIndex = rows.findIndex(row => row.id === cell.row.id);\n return shouldCellRenderUtil(cell, findColumnConfig(cell.column.id, columns), rows, rowIndex);\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(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>(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 === 'start') {\n return 'left';\n }\n if (isPinned === 'end') {\n return 'right';\n }\n }\n\n // Group có thể báo đang ghim khi chỉ một hậu duệ được ghim; fragment ở\n // giữa vẫn phải dựa vào các leaf thực tế của fragment để quyết định sticky.\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 _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(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 const tanStackDirection = pinDirection === 'left' ? 'start' : 'end';\n return table.getAllLeafColumns().filter(column => column.getIsPinned() === tanStackDirection);\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: 'start' | 'end' | false | undefined,\n leftOffset: number,\n rightOffset: number\n ): ZPinningStyles {\n return {\n left: isPinned === 'start' ? `${leftOffset}px` : undefined,\n right: isPinned === 'end' ? `${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 '../z-table-tanstack.type';\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 '../z-table-tanstack.type';\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 '../z-table-tanstack.type';\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 '../z-table-tanstack.type';\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 { 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 injectTable,\n type ColumnSizingState,\n type columnResizingState,\n ColumnFiltersState,\n ColumnOrderState,\n ExpandedState,\n FlexRenderDirective,\n PaginationState,\n RowPinningState,\n RowSelectionState,\n SortingState,\n ColumnVisibilityState,\n} from '@tanstack/angular-table';\nimport { elementScroll, injectVirtualizer } from '@tanstack/angular-virtual';\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 type { Cell, Column, ColumnDef, Row, ZTableRowData } from './z-table-tanstack.type';\nimport type {\n ZTableAppliedFilterChip,\n ZTableDataRowItem,\n ZTableGroupRowItem,\n ZTableGroupedRowItem,\n ZTableResolvedCellSelectionOptions,\n ZTableSelectedCellVisualRect,\n ZTableSelectedCellVisualSide,\n ZVirtualFlatItem,\n} from './z-table.component.type';\nimport {\n Z_TABLE_FEATURES,\n Z_TABLE_NUMBER_OPERATORS,\n Z_TABLE_TEXT_OPERATORS,\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 Z_DEFAULT_COLUMN_MIN_SIZE,\n Z_VIRTUAL_GROUP_HEADER_HEIGHT,\n Z_TABLE_FILTER_HEADER_VISIBLE_COUNT,\n} from './z-table.define';\nimport {\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 ZTableVirtualConfig,\n ZTableVirtualColumnConfig,\n ZVirtualGroup,\n ZTableDragDropData,\n ColumnPinningState,\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\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<ColumnVisibilityState>({});\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 protected readonly columnResizingState = signal<columnResizingState>({\n columnSizingStart: [],\n deltaOffset: null,\n deltaPercentage: null,\n isResizingColumn: false,\n startOffset: null,\n startSize: null,\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.getStartLeafColumns();\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.getEndLeafColumns();\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 useApplicationRefTick: false,\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.getStartHeaderGroups();\n const centerGroups = this.table.getCenterHeaderGroups();\n const rightGroups = this.table.getEndHeaderGroups();\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.getStartFooterGroups();\n const centerGroups = this.table.getCenterFooterGroups();\n const rightGroups = this.table.getEndFooterGroups();\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.getStartHeaderGroups()[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.getEndHeaderGroups()[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.columnSizingState());\n protected readonly columnResizing = computed(() => this.columnResizingState());\n\n protected readonly columnSizeVars = computed(() => {\n void this.columnSizing();\n void this.columnResizing();\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 = injectTable<typeof Z_TABLE_FEATURES, T & Record<string, unknown>>(() => {\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 return {\n features: Z_TABLE_FEATURES,\n data: this._data() as Array<T & Record<string, unknown>>,\n columns: this._columns(),\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 & Record<string, unknown>, index: number, parent?: Row<T>) =>\n config.getRowId?.(originalRow, index, parent?.original, this._data()) ?? `${index}`\n : (_row: T & Record<string, unknown>, index: number) => `${index}`,\n getSubRows: config.getSubRows\n ? (originalRow: T & Record<string, unknown>, index: number) =>\n config.getSubRows?.(originalRow, index, undefined, this._data()) as\n Array<T & Record<string, unknown>> | undefined\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: { start: this.columnPinning().left ?? [], end: this.columnPinning().right ?? [] },\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 columnResizing: this.columnResizingState(),\n columnFilters: this.columnFilters(),\n globalFilter: this.globalFilter(),\n pagination: this._tanstackPagination(),\n sorting: this.sorting(),\n },\n onColumnPinningChange: updater => {\n const currentState = this.columnPinning();\n const newState =\n typeof updater === 'function'\n ? updater({ start: currentState.left ?? [], end: currentState.right ?? [] })\n : updater;\n this._setColumnPinning({ left: newState.start, right: newState.end });\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 onColumnResizingChange: updater => {\n const currentState = this.columnResizingState();\n this.columnResizingState.set(typeof updater === 'function' ? updater(currentState) : 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 });\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 { rangeExtractor } = 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 useApplicationRefTick: false,\n ...pickDefined(virtualConfig, ['gap', 'isScrollingResetDelay', 'useScrollendEvent', 'getItemKey']),\n rangeExtractor: rangeExtractor\n ? (range: { endIndex: number; startIndex: number }) => 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.columnResizing().isResizingColumn;\n const next = this._clampColumnSizing(nextRaw, resizingColumnId || undefined);\n if (this._isSameColumnSizing(this.columnSizingState(), next)) {\n return;\n }\n\n this._setColumnSizingState(next);\n this._columnBaseSizing.set(next);\n if (this.columnResizing().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._setColumnSizingState(nextSizing);\n }\n\n /** Cập nhật state sizing ngoài và atom của TanStack v9 đồng thời. */\n private _setColumnSizingState(nextSizing: ColumnSizingState): void {\n this.columnSizingState.set(nextSizing);\n this.table.setOptions(previous => ({\n ...previous,\n state: {\n ...previous.state,\n columnSizing: nextSizing,\n },\n }));\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.getEndLeafColumns().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 /** Chặn wheel trực tiếp trên header; header chỉ nhận scrollLeft từ body. */\n public onTheadWheel(event: WheelEvent): void {\n event.preventDefault();\n event.stopPropagation();\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<ZTableRowData<T>>): void {\n this.zChange.emit({\n type: 'action',\n data: event as unknown as ZTableActionClickEvent<T>,\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() === 'start';\n });\n const pinnedRight = fullOrder.filter(columnId => this.table.getColumn(columnId)?.getIsPinned() === 'end');\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 tanStackPosition = position === 'left' ? 'start' : 'end';\n const currentPin = column.getIsPinned();\n const newPosition = currentPin === tanStackPosition ? false : tanStackPosition;\n if (newPosition && !this.pinAvailabilityMap()[columnId]?.[position]) {\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 if (this.showSettingsDrawer() && this.isGroupingColumn(columnId)) {\n return;\n }\n\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 const tanStackPosition = position === 'left' ? 'start' : position === 'right' ? 'end' : false;\n column.pin(tanStackPosition);\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(tanStackPosition);\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._setColumnSizingState(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._setColumnSizingState({});\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: ReadonlyArray<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._setColumnSizingState(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 (wheel)=\"onTheadWheel($event)\"\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 : columnResizing()\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() !== 'start') {\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() !== 'end') {\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]=\"header.column.getIsPinned() === 'end' || header.column.getIsLastColumn()\"\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() !== 'start') {\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() !== 'end') {\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]=\"header.column.getIsPinned() === 'end' || header.column.getIsLastColumn()\"\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 : columnResizing()\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() !== 'start') {\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() !== 'end') {\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]=\"header.column.getIsPinned() === 'end' || header.column.getIsLastColumn()\"\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 : columnResizing()\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() !== 'start') {\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() !== 'end') {\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() === 'end' || 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.length > 0 ? groupRows[0].id : ''\"\n [z-table-drop-item-id]=\"groupRows.length > 0 ? 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 [attr.aria-label]=\"'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 [attr.aria-label]=\"'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 : columnResizing()\n : colDomWidthMap()\n : isColumnPinningActive\n : bodyRowSpanRows()\n \"\n [class]=\"cell | zTableCellConfig: zConfig() : 'cellClass'\"\n [class.z-sticky-left]=\"isColumnPinningActive && cellPinned === 'start'\"\n [class.z-sticky-right]=\"isColumnPinningActive && cellPinned === 'end'\"\n [class.z-sticky-left-last]=\"\n isColumnPinningActive &&\n cellPinned === 'start' &&\n (cell | zTableCellPin: 'isLastLeftPinned' : zConfig().columns : 'body' : visibleCells)\n \"\n [class.z-sticky-right-first]=\"\n isColumnPinningActive &&\n cellPinned === 'end' &&\n (cell | zTableCellPin: 'isFirstRightPinned' : zConfig().columns : 'body' : visibleCells)\n \"\n [class.z-sticky-right-last]=\"\n isColumnPinningActive &&\n cellPinned === 'end' &&\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 : columnResizing()\n : colDomWidthMap()\n : isColumnPinningActivePinned\n : bodyRowSpanRows()\n \"\n [class]=\"cell | zTableCellConfig: zConfig() : 'cellClass'\"\n [class.z-sticky-left]=\"isColumnPinningActivePinned && cellPinned === 'start'\"\n [class.z-sticky-right]=\"isColumnPinningActivePinned && cellPinned === 'end'\"\n [class.z-sticky-left-last]=\"\n isColumnPinningActivePinned &&\n cellPinned === 'start' &&\n (cell | zTableCellPin: 'isLastLeftPinned' : zConfig().columns : 'body' : visibleCells)\n \"\n [class.z-sticky-right-first]=\"\n isColumnPinningActivePinned &&\n cellPinned === 'end' &&\n (cell | zTableCellPin: 'isFirstRightPinned' : zConfig().columns : 'body' : visibleCells)\n \"\n [class.z-sticky-right-last]=\"\n isColumnPinningActivePinned &&\n cellPinned === 'end' &&\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 : columnResizing()\n : colDomWidthMap()\n : isColumnPinningActive\n : bodyRowSpanRows()\n \"\n [class]=\"cell | zTableCellConfig: zConfig() : 'cellClass'\"\n [style]=\"cell | zTableCellConfig: zConfig() : 'cellStyle'\"\n [class.z-sticky-left]=\"isColumnPinningActive && cellPinned === 'start'\"\n [class.z-sticky-right]=\"isColumnPinningActive && cellPinned === 'end'\"\n [class.z-sticky-left-last]=\"\n isColumnPinningActive &&\n cellPinned === 'start' &&\n (cell | zTableCellPin: 'isLastLeftPinned' : zConfig().columns : 'body' : visibleCells)\n \"\n [class.z-sticky-right-first]=\"\n isColumnPinningActive &&\n cellPinned === 'end' &&\n (cell | zTableCellPin: 'isFirstRightPinned' : zConfig().columns : 'body' : visibleCells)\n \"\n [class.z-sticky-right-last]=\"\n isColumnPinningActive &&\n cellPinned === 'end' &&\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 [attr.aria-label]=\"'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 [attr.aria-label]=\"'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 : columnResizing()\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 === 'start'\n ? ('i18n_z_ui_table_left' | translate)\n : ('i18n_z_ui_table_right' | translate)\n }}\n </span>\n\n <!-- Unpin Button -->\n <button\n type=\"button\"\n [disabled]=\"isGroupedColumn\"\n (click)=\"onToggleColumnPin(columnId, isPinned === 'start' ? '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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"}