@neural-ui/core 1.6.1 → 1.6.2

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 (135) hide show
  1. package/fesm2022/neural-ui-core-accordion.mjs +7 -11
  2. package/fesm2022/neural-ui-core-accordion.mjs.map +1 -1
  3. package/fesm2022/neural-ui-core-alert.mjs +14 -25
  4. package/fesm2022/neural-ui-core-alert.mjs.map +1 -1
  5. package/fesm2022/neural-ui-core-autocomplete.mjs +28 -53
  6. package/fesm2022/neural-ui-core-autocomplete.mjs.map +1 -1
  7. package/fesm2022/neural-ui-core-avatar.mjs +13 -23
  8. package/fesm2022/neural-ui-core-avatar.mjs.map +1 -1
  9. package/fesm2022/neural-ui-core-badge.mjs +9 -15
  10. package/fesm2022/neural-ui-core-badge.mjs.map +1 -1
  11. package/fesm2022/neural-ui-core-block-ui.mjs +11 -16
  12. package/fesm2022/neural-ui-core-block-ui.mjs.map +1 -1
  13. package/fesm2022/neural-ui-core-breadcrumb.mjs +6 -8
  14. package/fesm2022/neural-ui-core-breadcrumb.mjs.map +1 -1
  15. package/fesm2022/neural-ui-core-button.mjs +16 -29
  16. package/fesm2022/neural-ui-core-button.mjs.map +1 -1
  17. package/fesm2022/neural-ui-core-calendar.mjs +20 -37
  18. package/fesm2022/neural-ui-core-calendar.mjs.map +1 -1
  19. package/fesm2022/neural-ui-core-card.mjs +8 -13
  20. package/fesm2022/neural-ui-core-card.mjs.map +1 -1
  21. package/fesm2022/neural-ui-core-chart.mjs +24 -45
  22. package/fesm2022/neural-ui-core-chart.mjs.map +1 -1
  23. package/fesm2022/neural-ui-core-checkbox.mjs +9 -15
  24. package/fesm2022/neural-ui-core-checkbox.mjs.map +1 -1
  25. package/fesm2022/neural-ui-core-chip.mjs +13 -23
  26. package/fesm2022/neural-ui-core-chip.mjs.map +1 -1
  27. package/fesm2022/neural-ui-core-code-block.mjs +17 -31
  28. package/fesm2022/neural-ui-core-code-block.mjs.map +1 -1
  29. package/fesm2022/neural-ui-core-color-picker.mjs +11 -19
  30. package/fesm2022/neural-ui-core-color-picker.mjs.map +1 -1
  31. package/fesm2022/neural-ui-core-command-palette.mjs +11 -16
  32. package/fesm2022/neural-ui-core-command-palette.mjs.map +1 -1
  33. package/fesm2022/neural-ui-core-confirm-dialog.mjs +6 -6
  34. package/fesm2022/neural-ui-core-confirm-dialog.mjs.map +1 -1
  35. package/fesm2022/neural-ui-core-context-menu.mjs +9 -12
  36. package/fesm2022/neural-ui-core-context-menu.mjs.map +1 -1
  37. package/fesm2022/neural-ui-core-dashboard-grid.mjs +7 -11
  38. package/fesm2022/neural-ui-core-dashboard-grid.mjs.map +1 -1
  39. package/fesm2022/neural-ui-core-date-input.mjs +57 -111
  40. package/fesm2022/neural-ui-core-date-input.mjs.map +1 -1
  41. package/fesm2022/neural-ui-core-divider.mjs +5 -7
  42. package/fesm2022/neural-ui-core-divider.mjs.map +1 -1
  43. package/fesm2022/neural-ui-core-empty-state.mjs +8 -13
  44. package/fesm2022/neural-ui-core-empty-state.mjs.map +1 -1
  45. package/fesm2022/neural-ui-core-filter-bar.mjs +11 -19
  46. package/fesm2022/neural-ui-core-filter-bar.mjs.map +1 -1
  47. package/fesm2022/neural-ui-core-icon.mjs +7 -11
  48. package/fesm2022/neural-ui-core-icon.mjs.map +1 -1
  49. package/fesm2022/neural-ui-core-image-gallery.mjs +13 -23
  50. package/fesm2022/neural-ui-core-image-gallery.mjs.map +1 -1
  51. package/fesm2022/neural-ui-core-image-viewer.mjs +14 -22
  52. package/fesm2022/neural-ui-core-image-viewer.mjs.map +1 -1
  53. package/fesm2022/neural-ui-core-input-otp.mjs +11 -19
  54. package/fesm2022/neural-ui-core-input-otp.mjs.map +1 -1
  55. package/fesm2022/neural-ui-core-input.mjs +35 -67
  56. package/fesm2022/neural-ui-core-input.mjs.map +1 -1
  57. package/fesm2022/neural-ui-core-kanban.mjs +9 -15
  58. package/fesm2022/neural-ui-core-kanban.mjs.map +1 -1
  59. package/fesm2022/neural-ui-core-knob.mjs +22 -41
  60. package/fesm2022/neural-ui-core-knob.mjs.map +1 -1
  61. package/fesm2022/neural-ui-core-meter-group.mjs +13 -23
  62. package/fesm2022/neural-ui-core-meter-group.mjs.map +1 -1
  63. package/fesm2022/neural-ui-core-modal.mjs +11 -16
  64. package/fesm2022/neural-ui-core-modal.mjs.map +1 -1
  65. package/fesm2022/neural-ui-core-multiselect.mjs +39 -72
  66. package/fesm2022/neural-ui-core-multiselect.mjs.map +1 -1
  67. package/fesm2022/neural-ui-core-nav.mjs +13 -22
  68. package/fesm2022/neural-ui-core-nav.mjs.map +1 -1
  69. package/fesm2022/neural-ui-core-notification-center.mjs +9 -12
  70. package/fesm2022/neural-ui-core-notification-center.mjs.map +1 -1
  71. package/fesm2022/neural-ui-core-number-input.mjs +19 -35
  72. package/fesm2022/neural-ui-core-number-input.mjs.map +1 -1
  73. package/fesm2022/neural-ui-core-pagination.mjs +9 -15
  74. package/fesm2022/neural-ui-core-pagination.mjs.map +1 -1
  75. package/fesm2022/neural-ui-core-popover.mjs +14 -22
  76. package/fesm2022/neural-ui-core-popover.mjs.map +1 -1
  77. package/fesm2022/neural-ui-core-progress-bar.mjs +11 -19
  78. package/fesm2022/neural-ui-core-progress-bar.mjs.map +1 -1
  79. package/fesm2022/neural-ui-core-radio.mjs +15 -24
  80. package/fesm2022/neural-ui-core-radio.mjs.map +1 -1
  81. package/fesm2022/neural-ui-core-rating.mjs +8 -13
  82. package/fesm2022/neural-ui-core-rating.mjs.map +1 -1
  83. package/fesm2022/neural-ui-core-rich-text-editor.mjs +28 -53
  84. package/fesm2022/neural-ui-core-rich-text-editor.mjs.map +1 -1
  85. package/fesm2022/neural-ui-core-scheduler-gantt.mjs +22 -41
  86. package/fesm2022/neural-ui-core-scheduler-gantt.mjs.map +1 -1
  87. package/fesm2022/neural-ui-core-select.mjs +43 -77
  88. package/fesm2022/neural-ui-core-select.mjs.map +1 -1
  89. package/fesm2022/neural-ui-core-sidebar.mjs +12 -21
  90. package/fesm2022/neural-ui-core-sidebar.mjs.map +1 -1
  91. package/fesm2022/neural-ui-core-skeleton.mjs +7 -11
  92. package/fesm2022/neural-ui-core-skeleton.mjs.map +1 -1
  93. package/fesm2022/neural-ui-core-slider.mjs +13 -23
  94. package/fesm2022/neural-ui-core-slider.mjs.map +1 -1
  95. package/fesm2022/neural-ui-core-spinner.mjs +10 -17
  96. package/fesm2022/neural-ui-core-spinner.mjs.map +1 -1
  97. package/fesm2022/neural-ui-core-split-button.mjs +15 -27
  98. package/fesm2022/neural-ui-core-split-button.mjs.map +1 -1
  99. package/fesm2022/neural-ui-core-splitter.mjs +6 -9
  100. package/fesm2022/neural-ui-core-splitter.mjs.map +1 -1
  101. package/fesm2022/neural-ui-core-stats-card.mjs +11 -19
  102. package/fesm2022/neural-ui-core-stats-card.mjs.map +1 -1
  103. package/fesm2022/neural-ui-core-stepper.mjs +8 -13
  104. package/fesm2022/neural-ui-core-stepper.mjs.map +1 -1
  105. package/fesm2022/neural-ui-core-switch.mjs +9 -15
  106. package/fesm2022/neural-ui-core-switch.mjs.map +1 -1
  107. package/fesm2022/neural-ui-core-table.mjs +124 -242
  108. package/fesm2022/neural-ui-core-table.mjs.map +1 -1
  109. package/fesm2022/neural-ui-core-tabs.mjs +18 -30
  110. package/fesm2022/neural-ui-core-tabs.mjs.map +1 -1
  111. package/fesm2022/neural-ui-core-textarea.mjs +23 -43
  112. package/fesm2022/neural-ui-core-textarea.mjs.map +1 -1
  113. package/fesm2022/neural-ui-core-timeline-grid.mjs +12 -21
  114. package/fesm2022/neural-ui-core-timeline-grid.mjs.map +1 -1
  115. package/fesm2022/neural-ui-core-timeline.mjs +4 -5
  116. package/fesm2022/neural-ui-core-timeline.mjs.map +1 -1
  117. package/fesm2022/neural-ui-core-toast.mjs +8 -10
  118. package/fesm2022/neural-ui-core-toast.mjs.map +1 -1
  119. package/fesm2022/neural-ui-core-toggle-button-group.mjs +10 -17
  120. package/fesm2022/neural-ui-core-toggle-button-group.mjs.map +1 -1
  121. package/fesm2022/neural-ui-core-toolbar.mjs +8 -13
  122. package/fesm2022/neural-ui-core-toolbar.mjs.map +1 -1
  123. package/fesm2022/neural-ui-core-tooltip.mjs +11 -16
  124. package/fesm2022/neural-ui-core-tooltip.mjs.map +1 -1
  125. package/fesm2022/neural-ui-core-tree-table.mjs +30 -57
  126. package/fesm2022/neural-ui-core-tree-table.mjs.map +1 -1
  127. package/fesm2022/neural-ui-core-tree.mjs +17 -31
  128. package/fesm2022/neural-ui-core-tree.mjs.map +1 -1
  129. package/fesm2022/neural-ui-core-uploader.mjs +47 -91
  130. package/fesm2022/neural-ui-core-uploader.mjs.map +1 -1
  131. package/fesm2022/neural-ui-core-url-state.mjs +5 -7
  132. package/fesm2022/neural-ui-core-url-state.mjs.map +1 -1
  133. package/fesm2022/neural-ui-core-virtual-list.mjs +19 -32
  134. package/fesm2022/neural-ui-core-virtual-list.mjs.map +1 -1
  135. package/package.json +6 -6
@@ -24,10 +24,10 @@ import { NeuIconComponent } from '@neural-ui/core/icon';
24
24
  */
25
25
  class NeuTableExpandDirective {
26
26
  templateRef = inject(TemplateRef);
27
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NeuTableExpandDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
28
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.4", type: NeuTableExpandDirective, isStandalone: true, selector: "ng-template[neuTableExpand]", ngImport: i0 });
27
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: NeuTableExpandDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
28
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.17", type: NeuTableExpandDirective, isStandalone: true, selector: "ng-template[neuTableExpand]", ngImport: i0 });
29
29
  }
30
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NeuTableExpandDirective, decorators: [{
30
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: NeuTableExpandDirective, decorators: [{
31
31
  type: Directive,
32
32
  args: [{
33
33
  selector: 'ng-template[neuTableExpand]',
@@ -61,151 +61,82 @@ class NeuTableComponent {
61
61
  _destroyRef = inject(DestroyRef);
62
62
  _urlState = inject(NeuUrlStateService);
63
63
  _platformId = inject(PLATFORM_ID);
64
- _scrollContainer = viewChild('scrollContainer', /* @ts-ignore */
65
- ...(ngDevMode ? [{ debugName: "_scrollContainer" }] : /* istanbul ignore next */ []));
64
+ _scrollContainer = viewChild('scrollContainer', ...(ngDevMode ? [{ debugName: "_scrollContainer" }] : /* istanbul ignore next */ []));
66
65
  _virtualOverscan = 3;
67
- expandTemplate = contentChild(NeuTableExpandDirective, /* @ts-ignore */
68
- ...(ngDevMode ? [{ debugName: "expandTemplate" }] : /* istanbul ignore next */ []));
66
+ expandTemplate = contentChild(NeuTableExpandDirective, ...(ngDevMode ? [{ debugName: "expandTemplate" }] : /* istanbul ignore next */ []));
69
67
  // ── Inputs de datos ─────────────────────────────────────────────────
70
- columns = input([], /* @ts-ignore */
71
- ...(ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []));
72
- data = input([], /* @ts-ignore */
73
- ...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
74
- pageSize = input(10, /* @ts-ignore */
75
- ...(ngDevMode ? [{ debugName: "pageSize" }] : /* istanbul ignore next */ []));
68
+ columns = input([], ...(ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []));
69
+ data = input([], ...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
70
+ pageSize = input(10, ...(ngDevMode ? [{ debugName: "pageSize" }] : /* istanbul ignore next */ []));
76
71
  /** Controla si la paginación está activa. Si es false, se muestran todos los datos y se ocultan los controles de paginación y pageSize. */
77
- pagination = input(true, /* @ts-ignore */
78
- ...(ngDevMode ? [{ debugName: "pagination" }] : /* istanbul ignore next */ []));
79
- loading = input(false, /* @ts-ignore */
80
- ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
81
- title = input('', /* @ts-ignore */
82
- ...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
83
- toolbarExtraRef = input(null, /* @ts-ignore */
84
- ...(ngDevMode ? [{ debugName: "toolbarExtraRef" }] : /* istanbul ignore next */ []));
85
- emptyMessage = input('No results found', /* @ts-ignore */
86
- ...(ngDevMode ? [{ debugName: "emptyMessage" }] : /* istanbul ignore next */ []));
87
- skeletonRows = input([1, 2, 3, 4, 5], /* @ts-ignore */
88
- ...(ngDevMode ? [{ debugName: "skeletonRows" }] : /* istanbul ignore next */ []));
72
+ pagination = input(true, ...(ngDevMode ? [{ debugName: "pagination" }] : /* istanbul ignore next */ []));
73
+ loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
74
+ title = input('', ...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
75
+ toolbarExtraRef = input(null, ...(ngDevMode ? [{ debugName: "toolbarExtraRef" }] : /* istanbul ignore next */ []));
76
+ emptyMessage = input('No results found', ...(ngDevMode ? [{ debugName: "emptyMessage" }] : /* istanbul ignore next */ []));
77
+ skeletonRows = input([1, 2, 3, 4, 5], ...(ngDevMode ? [{ debugName: "skeletonRows" }] : /* istanbul ignore next */ []));
89
78
  // ── Inputs de funcionalidad ──────────────────────────────────────────
90
- searchable = input(true, /* @ts-ignore */
91
- ...(ngDevMode ? [{ debugName: "searchable" }] : /* istanbul ignore next */ []));
92
- searchPlaceholder = input('Search...', /* @ts-ignore */
93
- ...(ngDevMode ? [{ debugName: "searchPlaceholder" }] : /* istanbul ignore next */ []));
94
- exactMatchable = input(false, /* @ts-ignore */
95
- ...(ngDevMode ? [{ debugName: "exactMatchable" }] : /* istanbul ignore next */ []));
96
- exactMatchLabel = input('Exact match', /* @ts-ignore */
97
- ...(ngDevMode ? [{ debugName: "exactMatchLabel" }] : /* istanbul ignore next */ []));
98
- searchAriaLabel = input('Search table', /* @ts-ignore */
99
- ...(ngDevMode ? [{ debugName: "searchAriaLabel" }] : /* istanbul ignore next */ []));
100
- clearSearchAriaLabel = input('Clear search', /* @ts-ignore */
101
- ...(ngDevMode ? [{ debugName: "clearSearchAriaLabel" }] : /* istanbul ignore next */ []));
102
- clearFilterLabel = input('Clear filter', /* @ts-ignore */
103
- ...(ngDevMode ? [{ debugName: "clearFilterLabel" }] : /* istanbul ignore next */ []));
104
- previousPageAriaLabel = input('Previous page', /* @ts-ignore */
105
- ...(ngDevMode ? [{ debugName: "previousPageAriaLabel" }] : /* istanbul ignore next */ []));
106
- nextPageAriaLabel = input('Next page', /* @ts-ignore */
107
- ...(ngDevMode ? [{ debugName: "nextPageAriaLabel" }] : /* istanbul ignore next */ []));
108
- pageSizeLabel = input('Rows:', /* @ts-ignore */
109
- ...(ngDevMode ? [{ debugName: "pageSizeLabel" }] : /* istanbul ignore next */ []));
110
- pageSizeAriaLabel = input('Rows per page', /* @ts-ignore */
111
- ...(ngDevMode ? [{ debugName: "pageSizeAriaLabel" }] : /* istanbul ignore next */ []));
112
- paginationAriaLabel = input('Pagination', /* @ts-ignore */
113
- ...(ngDevMode ? [{ debugName: "paginationAriaLabel" }] : /* istanbul ignore next */ []));
114
- exportCsvTitle = input('Export CSV', /* @ts-ignore */
115
- ...(ngDevMode ? [{ debugName: "exportCsvTitle" }] : /* istanbul ignore next */ []));
116
- exportJsonTitle = input('Export JSON', /* @ts-ignore */
117
- ...(ngDevMode ? [{ debugName: "exportJsonTitle" }] : /* istanbul ignore next */ []));
118
- clearSelectionLabel = input('Clear selection', /* @ts-ignore */
119
- ...(ngDevMode ? [{ debugName: "clearSelectionLabel" }] : /* istanbul ignore next */ []));
120
- selectionSummaryLabel = input('selected', /* @ts-ignore */
121
- ...(ngDevMode ? [{ debugName: "selectionSummaryLabel" }] : /* istanbul ignore next */ []));
122
- tableAriaLabel = input('Data table', /* @ts-ignore */
123
- ...(ngDevMode ? [{ debugName: "tableAriaLabel" }] : /* istanbul ignore next */ []));
124
- selectAllAriaLabel = input('Select all filtered rows', /* @ts-ignore */
125
- ...(ngDevMode ? [{ debugName: "selectAllAriaLabel" }] : /* istanbul ignore next */ []));
126
- selectRowAriaLabel = input('Select row', /* @ts-ignore */
127
- ...(ngDevMode ? [{ debugName: "selectRowAriaLabel" }] : /* istanbul ignore next */ []));
128
- expandRowAriaLabel = input('Expand row', /* @ts-ignore */
129
- ...(ngDevMode ? [{ debugName: "expandRowAriaLabel" }] : /* istanbul ignore next */ []));
130
- filterPlaceholder = input('Filter...', /* @ts-ignore */
131
- ...(ngDevMode ? [{ debugName: "filterPlaceholder" }] : /* istanbul ignore next */ []));
132
- filterAriaPrefix = input('Filter by', /* @ts-ignore */
133
- ...(ngDevMode ? [{ debugName: "filterAriaPrefix" }] : /* istanbul ignore next */ []));
134
- allFilterOptionLabel = input('All', /* @ts-ignore */
135
- ...(ngDevMode ? [{ debugName: "allFilterOptionLabel" }] : /* istanbul ignore next */ []));
136
- ofLabel = input('of', /* @ts-ignore */
137
- ...(ngDevMode ? [{ debugName: "ofLabel" }] : /* istanbul ignore next */ []));
138
- resultLabelSingular = input('result', /* @ts-ignore */
139
- ...(ngDevMode ? [{ debugName: "resultLabelSingular" }] : /* istanbul ignore next */ []));
140
- resultLabelPlural = input('results', /* @ts-ignore */
141
- ...(ngDevMode ? [{ debugName: "resultLabelPlural" }] : /* istanbul ignore next */ []));
142
- sortable = input(false, /* @ts-ignore */
143
- ...(ngDevMode ? [{ debugName: "sortable" }] : /* istanbul ignore next */ []));
144
- selectable = input(false, /* @ts-ignore */
145
- ...(ngDevMode ? [{ debugName: "selectable" }] : /* istanbul ignore next */ []));
146
- expandable = input(false, /* @ts-ignore */
147
- ...(ngDevMode ? [{ debugName: "expandable" }] : /* istanbul ignore next */ []));
148
- expandMode = input('multiple', /* @ts-ignore */
149
- ...(ngDevMode ? [{ debugName: "expandMode" }] : /* istanbul ignore next */ []));
150
- exportable = input(false, /* @ts-ignore */
151
- ...(ngDevMode ? [{ debugName: "exportable" }] : /* istanbul ignore next */ []));
152
- exportFileName = input('export', /* @ts-ignore */
153
- ...(ngDevMode ? [{ debugName: "exportFileName" }] : /* istanbul ignore next */ []));
154
- pageSizeOptions = input([], /* @ts-ignore */
155
- ...(ngDevMode ? [{ debugName: "pageSizeOptions" }] : /* istanbul ignore next */ []));
156
- stickyHeader = input(false, /* @ts-ignore */
157
- ...(ngDevMode ? [{ debugName: "stickyHeader" }] : /* istanbul ignore next */ []));
158
- virtualScroll = input(false, /* @ts-ignore */
159
- ...(ngDevMode ? [{ debugName: "virtualScroll" }] : /* istanbul ignore next */ []));
160
- virtualScrollVisibleItems = input(8, /* @ts-ignore */
161
- ...(ngDevMode ? [{ debugName: "virtualScrollVisibleItems" }] : /* istanbul ignore next */ []));
162
- resizableColumns = input(false, /* @ts-ignore */
163
- ...(ngDevMode ? [{ debugName: "resizableColumns" }] : /* istanbul ignore next */ []));
164
- rowKey = input('id', /* @ts-ignore */
165
- ...(ngDevMode ? [{ debugName: "rowKey" }] : /* istanbul ignore next */ []));
166
- bordered = input(true, /* @ts-ignore */
167
- ...(ngDevMode ? [{ debugName: "bordered" }] : /* istanbul ignore next */ []));
168
- roundedBorders = input(true, /* @ts-ignore */
169
- ...(ngDevMode ? [{ debugName: "roundedBorders" }] : /* istanbul ignore next */ []));
170
- stripedRows = input(false, /* @ts-ignore */
171
- ...(ngDevMode ? [{ debugName: "stripedRows" }] : /* istanbul ignore next */ []));
79
+ searchable = input(true, ...(ngDevMode ? [{ debugName: "searchable" }] : /* istanbul ignore next */ []));
80
+ searchPlaceholder = input('Search...', ...(ngDevMode ? [{ debugName: "searchPlaceholder" }] : /* istanbul ignore next */ []));
81
+ exactMatchable = input(false, ...(ngDevMode ? [{ debugName: "exactMatchable" }] : /* istanbul ignore next */ []));
82
+ exactMatchLabel = input('Exact match', ...(ngDevMode ? [{ debugName: "exactMatchLabel" }] : /* istanbul ignore next */ []));
83
+ searchAriaLabel = input('Search table', ...(ngDevMode ? [{ debugName: "searchAriaLabel" }] : /* istanbul ignore next */ []));
84
+ clearSearchAriaLabel = input('Clear search', ...(ngDevMode ? [{ debugName: "clearSearchAriaLabel" }] : /* istanbul ignore next */ []));
85
+ clearFilterLabel = input('Clear filter', ...(ngDevMode ? [{ debugName: "clearFilterLabel" }] : /* istanbul ignore next */ []));
86
+ previousPageAriaLabel = input('Previous page', ...(ngDevMode ? [{ debugName: "previousPageAriaLabel" }] : /* istanbul ignore next */ []));
87
+ nextPageAriaLabel = input('Next page', ...(ngDevMode ? [{ debugName: "nextPageAriaLabel" }] : /* istanbul ignore next */ []));
88
+ pageSizeLabel = input('Rows:', ...(ngDevMode ? [{ debugName: "pageSizeLabel" }] : /* istanbul ignore next */ []));
89
+ pageSizeAriaLabel = input('Rows per page', ...(ngDevMode ? [{ debugName: "pageSizeAriaLabel" }] : /* istanbul ignore next */ []));
90
+ paginationAriaLabel = input('Pagination', ...(ngDevMode ? [{ debugName: "paginationAriaLabel" }] : /* istanbul ignore next */ []));
91
+ exportCsvTitle = input('Export CSV', ...(ngDevMode ? [{ debugName: "exportCsvTitle" }] : /* istanbul ignore next */ []));
92
+ exportJsonTitle = input('Export JSON', ...(ngDevMode ? [{ debugName: "exportJsonTitle" }] : /* istanbul ignore next */ []));
93
+ clearSelectionLabel = input('Clear selection', ...(ngDevMode ? [{ debugName: "clearSelectionLabel" }] : /* istanbul ignore next */ []));
94
+ selectionSummaryLabel = input('selected', ...(ngDevMode ? [{ debugName: "selectionSummaryLabel" }] : /* istanbul ignore next */ []));
95
+ tableAriaLabel = input('Data table', ...(ngDevMode ? [{ debugName: "tableAriaLabel" }] : /* istanbul ignore next */ []));
96
+ selectAllAriaLabel = input('Select all filtered rows', ...(ngDevMode ? [{ debugName: "selectAllAriaLabel" }] : /* istanbul ignore next */ []));
97
+ selectRowAriaLabel = input('Select row', ...(ngDevMode ? [{ debugName: "selectRowAriaLabel" }] : /* istanbul ignore next */ []));
98
+ expandRowAriaLabel = input('Expand row', ...(ngDevMode ? [{ debugName: "expandRowAriaLabel" }] : /* istanbul ignore next */ []));
99
+ filterPlaceholder = input('Filter...', ...(ngDevMode ? [{ debugName: "filterPlaceholder" }] : /* istanbul ignore next */ []));
100
+ filterAriaPrefix = input('Filter by', ...(ngDevMode ? [{ debugName: "filterAriaPrefix" }] : /* istanbul ignore next */ []));
101
+ allFilterOptionLabel = input('All', ...(ngDevMode ? [{ debugName: "allFilterOptionLabel" }] : /* istanbul ignore next */ []));
102
+ ofLabel = input('of', ...(ngDevMode ? [{ debugName: "ofLabel" }] : /* istanbul ignore next */ []));
103
+ resultLabelSingular = input('result', ...(ngDevMode ? [{ debugName: "resultLabelSingular" }] : /* istanbul ignore next */ []));
104
+ resultLabelPlural = input('results', ...(ngDevMode ? [{ debugName: "resultLabelPlural" }] : /* istanbul ignore next */ []));
105
+ sortable = input(false, ...(ngDevMode ? [{ debugName: "sortable" }] : /* istanbul ignore next */ []));
106
+ selectable = input(false, ...(ngDevMode ? [{ debugName: "selectable" }] : /* istanbul ignore next */ []));
107
+ expandable = input(false, ...(ngDevMode ? [{ debugName: "expandable" }] : /* istanbul ignore next */ []));
108
+ expandMode = input('multiple', ...(ngDevMode ? [{ debugName: "expandMode" }] : /* istanbul ignore next */ []));
109
+ exportable = input(false, ...(ngDevMode ? [{ debugName: "exportable" }] : /* istanbul ignore next */ []));
110
+ exportFileName = input('export', ...(ngDevMode ? [{ debugName: "exportFileName" }] : /* istanbul ignore next */ []));
111
+ pageSizeOptions = input([], ...(ngDevMode ? [{ debugName: "pageSizeOptions" }] : /* istanbul ignore next */ []));
112
+ stickyHeader = input(false, ...(ngDevMode ? [{ debugName: "stickyHeader" }] : /* istanbul ignore next */ []));
113
+ virtualScroll = input(false, ...(ngDevMode ? [{ debugName: "virtualScroll" }] : /* istanbul ignore next */ []));
114
+ virtualScrollVisibleItems = input(8, ...(ngDevMode ? [{ debugName: "virtualScrollVisibleItems" }] : /* istanbul ignore next */ []));
115
+ resizableColumns = input(false, ...(ngDevMode ? [{ debugName: "resizableColumns" }] : /* istanbul ignore next */ []));
116
+ rowKey = input('id', ...(ngDevMode ? [{ debugName: "rowKey" }] : /* istanbul ignore next */ []));
117
+ bordered = input(true, ...(ngDevMode ? [{ debugName: "bordered" }] : /* istanbul ignore next */ []));
118
+ roundedBorders = input(true, ...(ngDevMode ? [{ debugName: "roundedBorders" }] : /* istanbul ignore next */ []));
119
+ stripedRows = input(false, ...(ngDevMode ? [{ debugName: "stripedRows" }] : /* istanbul ignore next */ []));
172
120
  // ── Inputs nuevos v1.3.0 ──────────────────────────────────────────────
173
- density = input('normal', /* @ts-ignore */
174
- ...(ngDevMode ? [{ debugName: "density" }] : /* istanbul ignore next */ []));
175
- showRowNumbers = input(false, /* @ts-ignore */
176
- ...(ngDevMode ? [{ debugName: "showRowNumbers" }] : /* istanbul ignore next */ []));
177
- rowClass = input(undefined, /* @ts-ignore */
178
- ...(ngDevMode ? [{ debugName: "rowClass" }] : /* istanbul ignore next */ []));
179
- footerRow = input(undefined, /* @ts-ignore */
180
- ...(ngDevMode ? [{ debugName: "footerRow" }] : /* istanbul ignore next */ []));
181
- emptyStateTemplate = input(undefined, /* @ts-ignore */
182
- ...(ngDevMode ? [{ debugName: "emptyStateTemplate" }] : /* istanbul ignore next */ []));
183
- serverSide = input(false, /* @ts-ignore */
184
- ...(ngDevMode ? [{ debugName: "serverSide" }] : /* istanbul ignore next */ []));
185
- totalItems = input(undefined, /* @ts-ignore */
186
- ...(ngDevMode ? [{ debugName: "totalItems" }] : /* istanbul ignore next */ []));
187
- multiSort = input(false, /* @ts-ignore */
188
- ...(ngDevMode ? [{ debugName: "multiSort" }] : /* istanbul ignore next */ []));
189
- exportFormats = input(['csv'], /* @ts-ignore */
190
- ...(ngDevMode ? [{ debugName: "exportFormats" }] : /* istanbul ignore next */ []));
191
- exportColumns = input([], /* @ts-ignore */
192
- ...(ngDevMode ? [{ debugName: "exportColumns" }] : /* istanbul ignore next */ []));
193
- exportScope = input('auto', /* @ts-ignore */
194
- ...(ngDevMode ? [{ debugName: "exportScope" }] : /* istanbul ignore next */ []));
195
- selectionActions = input([], /* @ts-ignore */
196
- ...(ngDevMode ? [{ debugName: "selectionActions" }] : /* istanbul ignore next */ []));
121
+ density = input('normal', ...(ngDevMode ? [{ debugName: "density" }] : /* istanbul ignore next */ []));
122
+ showRowNumbers = input(false, ...(ngDevMode ? [{ debugName: "showRowNumbers" }] : /* istanbul ignore next */ []));
123
+ rowClass = input(undefined, ...(ngDevMode ? [{ debugName: "rowClass" }] : /* istanbul ignore next */ []));
124
+ footerRow = input(undefined, ...(ngDevMode ? [{ debugName: "footerRow" }] : /* istanbul ignore next */ []));
125
+ emptyStateTemplate = input(undefined, ...(ngDevMode ? [{ debugName: "emptyStateTemplate" }] : /* istanbul ignore next */ []));
126
+ serverSide = input(false, ...(ngDevMode ? [{ debugName: "serverSide" }] : /* istanbul ignore next */ []));
127
+ totalItems = input(undefined, ...(ngDevMode ? [{ debugName: "totalItems" }] : /* istanbul ignore next */ []));
128
+ multiSort = input(false, ...(ngDevMode ? [{ debugName: "multiSort" }] : /* istanbul ignore next */ []));
129
+ exportFormats = input(['csv'], ...(ngDevMode ? [{ debugName: "exportFormats" }] : /* istanbul ignore next */ []));
130
+ exportColumns = input([], ...(ngDevMode ? [{ debugName: "exportColumns" }] : /* istanbul ignore next */ []));
131
+ exportScope = input('auto', ...(ngDevMode ? [{ debugName: "exportScope" }] : /* istanbul ignore next */ []));
132
+ selectionActions = input([], ...(ngDevMode ? [{ debugName: "selectionActions" }] : /* istanbul ignore next */ []));
197
133
  // ── URL params ────────────────────────────────────────────────────────
198
- pageParam = input('page', /* @ts-ignore */
199
- ...(ngDevMode ? [{ debugName: "pageParam" }] : /* istanbul ignore next */ []));
200
- searchParam = input('q', /* @ts-ignore */
201
- ...(ngDevMode ? [{ debugName: "searchParam" }] : /* istanbul ignore next */ []));
202
- sortParam = input('sort', /* @ts-ignore */
203
- ...(ngDevMode ? [{ debugName: "sortParam" }] : /* istanbul ignore next */ []));
204
- sortDirParam = input('sortDir', /* @ts-ignore */
205
- ...(ngDevMode ? [{ debugName: "sortDirParam" }] : /* istanbul ignore next */ []));
134
+ pageParam = input('page', ...(ngDevMode ? [{ debugName: "pageParam" }] : /* istanbul ignore next */ []));
135
+ searchParam = input('q', ...(ngDevMode ? [{ debugName: "searchParam" }] : /* istanbul ignore next */ []));
136
+ sortParam = input('sort', ...(ngDevMode ? [{ debugName: "sortParam" }] : /* istanbul ignore next */ []));
137
+ sortDirParam = input('sortDir', ...(ngDevMode ? [{ debugName: "sortDirParam" }] : /* istanbul ignore next */ []));
206
138
  /** Param used to persist multi-sort state in the URL / Param para persistir multisort en la URL */
207
- multiSortParam = input('msort', /* @ts-ignore */
208
- ...(ngDevMode ? [{ debugName: "multiSortParam" }] : /* istanbul ignore next */ []));
139
+ multiSortParam = input('msort', ...(ngDevMode ? [{ debugName: "multiSortParam" }] : /* istanbul ignore next */ []));
209
140
  /**
210
141
  * Activa o desactiva la sincronización de estado con los queryParams de la URL.
211
142
  * Cuando es false, la paginación, búsqueda y ordenación se gestionan con
@@ -215,8 +146,7 @@ class NeuTableComponent {
215
146
  * When false, pagination, search and sort are managed with internal signals
216
147
  * and the browser URL is never modified.
217
148
  */
218
- useUrlState = input(true, /* @ts-ignore */
219
- ...(ngDevMode ? [{ debugName: "useUrlState" }] : /* istanbul ignore next */ []));
149
+ useUrlState = input(true, ...(ngDevMode ? [{ debugName: "useUrlState" }] : /* istanbul ignore next */ []));
220
150
  // ── Outputs ───────────────────────────────────────────────────────────
221
151
  selectionChange = output();
222
152
  rowClick = output();
@@ -228,18 +158,12 @@ class NeuTableComponent {
228
158
  columnResize = output();
229
159
  // ── Estado interno (usado cuando useUrlState = false) ─────────────────
230
160
  // Internal state signals (used when useUrlState = false)
231
- _internalPage = signal(1, /* @ts-ignore */
232
- ...(ngDevMode ? [{ debugName: "_internalPage" }] : /* istanbul ignore next */ []));
233
- _internalSearch = signal('', /* @ts-ignore */
234
- ...(ngDevMode ? [{ debugName: "_internalSearch" }] : /* istanbul ignore next */ []));
235
- _internalSortKey = signal('', /* @ts-ignore */
236
- ...(ngDevMode ? [{ debugName: "_internalSortKey" }] : /* istanbul ignore next */ []));
237
- _internalSortDir = signal('asc', /* @ts-ignore */
238
- ...(ngDevMode ? [{ debugName: "_internalSortDir" }] : /* istanbul ignore next */ []));
239
- _internalMultiSort = signal('', /* @ts-ignore */
240
- ...(ngDevMode ? [{ debugName: "_internalMultiSort" }] : /* istanbul ignore next */ []));
241
- _columnWidths = signal({}, /* @ts-ignore */
242
- ...(ngDevMode ? [{ debugName: "_columnWidths" }] : /* istanbul ignore next */ []));
161
+ _internalPage = signal(1, ...(ngDevMode ? [{ debugName: "_internalPage" }] : /* istanbul ignore next */ []));
162
+ _internalSearch = signal('', ...(ngDevMode ? [{ debugName: "_internalSearch" }] : /* istanbul ignore next */ []));
163
+ _internalSortKey = signal('', ...(ngDevMode ? [{ debugName: "_internalSortKey" }] : /* istanbul ignore next */ []));
164
+ _internalSortDir = signal('asc', ...(ngDevMode ? [{ debugName: "_internalSortDir" }] : /* istanbul ignore next */ []));
165
+ _internalMultiSort = signal('', ...(ngDevMode ? [{ debugName: "_internalMultiSort" }] : /* istanbul ignore next */ []));
166
+ _columnWidths = signal({}, ...(ngDevMode ? [{ debugName: "_columnWidths" }] : /* istanbul ignore next */ []));
243
167
  _resizeCleanup = null;
244
168
  // ── URL State ─────────────────────────────────────────────────────────
245
169
  _urlParamSignals = new Map();
@@ -260,33 +184,27 @@ class NeuTableComponent {
260
184
  const raw = this._readUrlParam(this.pageParam());
261
185
  const n = Number(raw);
262
186
  return !raw || isNaN(n) || n < 1 ? 1 : n;
263
- }, /* @ts-ignore */
264
- ...(ngDevMode ? [{ debugName: "currentPage" }] : /* istanbul ignore next */ []));
187
+ }, ...(ngDevMode ? [{ debugName: "currentPage" }] : /* istanbul ignore next */ []));
265
188
  searchQuery = computed(() => {
266
189
  if (!this.useUrlState())
267
190
  return this._internalSearch();
268
191
  return this._readUrlParam(this.searchParam()) ?? '';
269
- }, /* @ts-ignore */
270
- ...(ngDevMode ? [{ debugName: "searchQuery" }] : /* istanbul ignore next */ []));
192
+ }, ...(ngDevMode ? [{ debugName: "searchQuery" }] : /* istanbul ignore next */ []));
271
193
  sortKey = computed(() => {
272
194
  if (!this.useUrlState())
273
195
  return this._internalSortKey();
274
196
  return this._readUrlParam(this.sortParam()) ?? '';
275
- }, /* @ts-ignore */
276
- ...(ngDevMode ? [{ debugName: "sortKey" }] : /* istanbul ignore next */ []));
197
+ }, ...(ngDevMode ? [{ debugName: "sortKey" }] : /* istanbul ignore next */ []));
277
198
  sortDir = computed(() => {
278
199
  if (!this.useUrlState())
279
200
  return this._internalSortDir();
280
201
  const d = this._readUrlParam(this.sortDirParam());
281
202
  return d === 'desc' ? 'desc' : 'asc';
282
- }, /* @ts-ignore */
283
- ...(ngDevMode ? [{ debugName: "sortDir" }] : /* istanbul ignore next */ []));
203
+ }, ...(ngDevMode ? [{ debugName: "sortDir" }] : /* istanbul ignore next */ []));
284
204
  // ---- Pipeline de datos / Data pipeline ----
285
- rows = computed(() => asRows(this.data()), /* @ts-ignore */
286
- ...(ngDevMode ? [{ debugName: "rows" }] : /* istanbul ignore next */ []));
205
+ rows = computed(() => asRows(this.data()), ...(ngDevMode ? [{ debugName: "rows" }] : /* istanbul ignore next */ []));
287
206
  // ── Estado interno ────────────────────────────────────────────────────
288
- _exactMatch = signal(false, /* @ts-ignore */
289
- ...(ngDevMode ? [{ debugName: "_exactMatch" }] : /* istanbul ignore next */ []));
207
+ _exactMatch = signal(false, ...(ngDevMode ? [{ debugName: "_exactMatch" }] : /* istanbul ignore next */ []));
290
208
  exactMatch = this._exactMatch.asReadonly();
291
209
  /**
292
210
  * Multi-sort entries derived from URL param or internal state.
@@ -306,15 +224,12 @@ class NeuTableComponent {
306
224
  return [];
307
225
  return [{ key, dir: (dir === 'desc' ? 'desc' : 'asc') }];
308
226
  });
309
- }, /* @ts-ignore */
310
- ...(ngDevMode ? [{ debugName: "_sortEntries" }] : /* istanbul ignore next */ []));
311
- _columnFilters = signal({}, /* @ts-ignore */
312
- ...(ngDevMode ? [{ debugName: "_columnFilters" }] : /* istanbul ignore next */ []));
227
+ }, ...(ngDevMode ? [{ debugName: "_sortEntries" }] : /* istanbul ignore next */ []));
228
+ _columnFilters = signal({}, ...(ngDevMode ? [{ debugName: "_columnFilters" }] : /* istanbul ignore next */ []));
313
229
  _pageSizeControl = new FormControl('', { nonNullable: true });
314
230
  _columnFilterControls = new Map();
315
231
  /** True when at least one column has filterable:true / True si alguna columna tiene filterable:true */
316
- _hasFilterableCol = computed(() => this.columns().some((c) => c.filterable), /* @ts-ignore */
317
- ...(ngDevMode ? [{ debugName: "_hasFilterableCol" }] : /* istanbul ignore next */ []));
232
+ _hasFilterableCol = computed(() => this.columns().some((c) => c.filterable), ...(ngDevMode ? [{ debugName: "_hasFilterableCol" }] : /* istanbul ignore next */ []));
318
233
  /** Convierte filterOptions de string[] a NeuSelectOption[] con opción "Todos" al inicio.
319
234
  * Converts filterOptions from string[] to NeuSelectOption[] with a leading "All" option. */
320
235
  _filterOpts(col) {
@@ -323,10 +238,8 @@ class NeuTableComponent {
323
238
  ...(col.filterOptions ?? []).map((o) => ({ label: o, value: o })),
324
239
  ];
325
240
  }
326
- _pageSizeOptions = computed(() => this.pageSizeOptions().map((size) => ({ label: String(size), value: String(size) })), /* @ts-ignore */
327
- ...(ngDevMode ? [{ debugName: "_pageSizeOptions" }] : /* istanbul ignore next */ []));
328
- _virtualScrollTop = signal(0, /* @ts-ignore */
329
- ...(ngDevMode ? [{ debugName: "_virtualScrollTop" }] : /* istanbul ignore next */ []));
241
+ _pageSizeOptions = computed(() => this.pageSizeOptions().map((size) => ({ label: String(size), value: String(size) })), ...(ngDevMode ? [{ debugName: "_pageSizeOptions" }] : /* istanbul ignore next */ []));
242
+ _virtualScrollTop = signal(0, ...(ngDevMode ? [{ debugName: "_virtualScrollTop" }] : /* istanbul ignore next */ []));
330
243
  constructor() {
331
244
  this._destroyRef.onDestroy(() => this._stopColumnResize());
332
245
  this._pageSizeControl.valueChanges
@@ -365,11 +278,9 @@ class NeuTableComponent {
365
278
  this.resetVirtualScrollPosition();
366
279
  });
367
280
  }
368
- _confirmPending = signal(null, /* @ts-ignore */
369
- ...(ngDevMode ? [{ debugName: "_confirmPending" }] : /* istanbul ignore next */ []));
281
+ _confirmPending = signal(null, ...(ngDevMode ? [{ debugName: "_confirmPending" }] : /* istanbul ignore next */ []));
370
282
  // ── Pipeline de datos ─────────────────────────────────────────────────
371
- _rows = computed(() => asRows(this.data()), /* @ts-ignore */
372
- ...(ngDevMode ? [{ debugName: "_rows" }] : /* istanbul ignore next */ []));
283
+ _rows = computed(() => asRows(this.data()), ...(ngDevMode ? [{ debugName: "_rows" }] : /* istanbul ignore next */ []));
373
284
  filteredData = computed(() => {
374
285
  if (this.serverSide())
375
286
  return this._rows();
@@ -401,8 +312,7 @@ class NeuTableComponent {
401
312
  }
402
313
  return true;
403
314
  });
404
- }, /* @ts-ignore */
405
- ...(ngDevMode ? [{ debugName: "filteredData" }] : /* istanbul ignore next */ []));
315
+ }, ...(ngDevMode ? [{ debugName: "filteredData" }] : /* istanbul ignore next */ []));
406
316
  sortedData = computed(() => {
407
317
  if (this.serverSide())
408
318
  return this.filteredData();
@@ -430,16 +340,13 @@ class NeuTableComponent {
430
340
  });
431
341
  return dir === 'asc' ? cmp : -cmp;
432
342
  });
433
- }, /* @ts-ignore */
434
- ...(ngDevMode ? [{ debugName: "sortedData" }] : /* istanbul ignore next */ []));
435
- _dynamicPageSize = signal(null, /* @ts-ignore */
436
- ...(ngDevMode ? [{ debugName: "_dynamicPageSize" }] : /* istanbul ignore next */ []));
343
+ }, ...(ngDevMode ? [{ debugName: "sortedData" }] : /* istanbul ignore next */ []));
344
+ _dynamicPageSize = signal(null, ...(ngDevMode ? [{ debugName: "_dynamicPageSize" }] : /* istanbul ignore next */ []));
437
345
  effectivePageSize = computed(() => {
438
346
  if (!this.pagination())
439
347
  return this.filteredData().length || 1;
440
348
  return this._dynamicPageSize() ?? this.pageSize();
441
- }, /* @ts-ignore */
442
- ...(ngDevMode ? [{ debugName: "effectivePageSize" }] : /* istanbul ignore next */ []));
349
+ }, ...(ngDevMode ? [{ debugName: "effectivePageSize" }] : /* istanbul ignore next */ []));
443
350
  totalPages = computed(() => {
444
351
  if (!this.pagination())
445
352
  return 1;
@@ -447,8 +354,7 @@ class NeuTableComponent {
447
354
  ? this.totalItems()
448
355
  : this.filteredData().length;
449
356
  return Math.max(1, Math.ceil(total / this.effectivePageSize()));
450
- }, /* @ts-ignore */
451
- ...(ngDevMode ? [{ debugName: "totalPages" }] : /* istanbul ignore next */ []));
357
+ }, ...(ngDevMode ? [{ debugName: "totalPages" }] : /* istanbul ignore next */ []));
452
358
  paginatedData = computed(() => {
453
359
  if (!this.pagination())
454
360
  return this.sortedData();
@@ -457,8 +363,7 @@ class NeuTableComponent {
457
363
  const page = Math.min(this.currentPage(), this.totalPages());
458
364
  const size = this.effectivePageSize();
459
365
  return this.sortedData().slice((page - 1) * size, page * size);
460
- }, /* @ts-ignore */
461
- ...(ngDevMode ? [{ debugName: "paginatedData" }] : /* istanbul ignore next */ []));
366
+ }, ...(ngDevMode ? [{ debugName: "paginatedData" }] : /* istanbul ignore next */ []));
462
367
  _virtualRowHeight = computed(() => {
463
368
  switch (this.density()) {
464
369
  case 'compact':
@@ -468,14 +373,10 @@ class NeuTableComponent {
468
373
  default:
469
374
  return 48;
470
375
  }
471
- }, /* @ts-ignore */
472
- ...(ngDevMode ? [{ debugName: "_virtualRowHeight" }] : /* istanbul ignore next */ []));
473
- _virtualHeaderHeight = computed(() => 44 + (this._hasFilterableCol() ? 52 : 0), /* @ts-ignore */
474
- ...(ngDevMode ? [{ debugName: "_virtualHeaderHeight" }] : /* istanbul ignore next */ []));
475
- _virtualScrollActive = computed(() => this.virtualScroll() && this.paginatedData().length > this.virtualScrollVisibleItems(), /* @ts-ignore */
476
- ...(ngDevMode ? [{ debugName: "_virtualScrollActive" }] : /* istanbul ignore next */ []));
477
- virtualContainerMaxHeight = computed(() => `${this._virtualHeaderHeight() + this.virtualScrollVisibleItems() * this._virtualRowHeight()}px`, /* @ts-ignore */
478
- ...(ngDevMode ? [{ debugName: "virtualContainerMaxHeight" }] : /* istanbul ignore next */ []));
376
+ }, ...(ngDevMode ? [{ debugName: "_virtualRowHeight" }] : /* istanbul ignore next */ []));
377
+ _virtualHeaderHeight = computed(() => 44 + (this._hasFilterableCol() ? 52 : 0), ...(ngDevMode ? [{ debugName: "_virtualHeaderHeight" }] : /* istanbul ignore next */ []));
378
+ _virtualScrollActive = computed(() => this.virtualScroll() && this.paginatedData().length > this.virtualScrollVisibleItems(), ...(ngDevMode ? [{ debugName: "_virtualScrollActive" }] : /* istanbul ignore next */ []));
379
+ virtualContainerMaxHeight = computed(() => `${this._virtualHeaderHeight() + this.virtualScrollVisibleItems() * this._virtualRowHeight()}px`, ...(ngDevMode ? [{ debugName: "virtualContainerMaxHeight" }] : /* istanbul ignore next */ []));
479
380
  _virtualStartIndex = computed(() => {
480
381
  if (!this._virtualScrollActive()) {
481
382
  return 0;
@@ -483,37 +384,32 @@ class NeuTableComponent {
483
384
  const bodyScrollTop = Math.max(0, this._virtualScrollTop() - this._virtualHeaderHeight());
484
385
  const startIndex = Math.floor(bodyScrollTop / this._virtualRowHeight());
485
386
  return Math.max(0, startIndex - this._virtualOverscan);
486
- }, /* @ts-ignore */
487
- ...(ngDevMode ? [{ debugName: "_virtualStartIndex" }] : /* istanbul ignore next */ []));
387
+ }, ...(ngDevMode ? [{ debugName: "_virtualStartIndex" }] : /* istanbul ignore next */ []));
488
388
  _virtualEndIndex = computed(() => {
489
389
  if (!this._virtualScrollActive()) {
490
390
  return this.paginatedData().length;
491
391
  }
492
392
  return Math.min(this.paginatedData().length, this._virtualStartIndex() + this.virtualScrollVisibleItems() + this._virtualOverscan * 2);
493
- }, /* @ts-ignore */
494
- ...(ngDevMode ? [{ debugName: "_virtualEndIndex" }] : /* istanbul ignore next */ []));
393
+ }, ...(ngDevMode ? [{ debugName: "_virtualEndIndex" }] : /* istanbul ignore next */ []));
495
394
  visiblePageRows = computed(() => {
496
395
  const rows = this.paginatedData();
497
396
  if (!this._virtualScrollActive()) {
498
397
  return rows;
499
398
  }
500
399
  return rows.slice(this._virtualStartIndex(), this._virtualEndIndex());
501
- }, /* @ts-ignore */
502
- ...(ngDevMode ? [{ debugName: "visiblePageRows" }] : /* istanbul ignore next */ []));
400
+ }, ...(ngDevMode ? [{ debugName: "visiblePageRows" }] : /* istanbul ignore next */ []));
503
401
  _virtualTopSpacerHeight = computed(() => {
504
402
  if (!this._virtualScrollActive()) {
505
403
  return 0;
506
404
  }
507
405
  return this._virtualStartIndex() * this._virtualRowHeight();
508
- }, /* @ts-ignore */
509
- ...(ngDevMode ? [{ debugName: "_virtualTopSpacerHeight" }] : /* istanbul ignore next */ []));
406
+ }, ...(ngDevMode ? [{ debugName: "_virtualTopSpacerHeight" }] : /* istanbul ignore next */ []));
510
407
  _virtualBottomSpacerHeight = computed(() => {
511
408
  if (!this._virtualScrollActive()) {
512
409
  return 0;
513
410
  }
514
411
  return Math.max(0, (this.paginatedData().length - this._virtualEndIndex()) * this._virtualRowHeight());
515
- }, /* @ts-ignore */
516
- ...(ngDevMode ? [{ debugName: "_virtualBottomSpacerHeight" }] : /* istanbul ignore next */ []));
412
+ }, ...(ngDevMode ? [{ debugName: "_virtualBottomSpacerHeight" }] : /* istanbul ignore next */ []));
517
413
  pageNumbers = computed(() => {
518
414
  const total = this.totalPages();
519
415
  const current = this.currentPage();
@@ -521,8 +417,7 @@ class NeuTableComponent {
521
417
  const end = Math.min(total, start + 4);
522
418
  start = Math.max(1, end - 4);
523
419
  return Array.from({ length: end - start + 1 }, (_, i) => start + i);
524
- }, /* @ts-ignore */
525
- ...(ngDevMode ? [{ debugName: "pageNumbers" }] : /* istanbul ignore next */ []));
420
+ }, ...(ngDevMode ? [{ debugName: "pageNumbers" }] : /* istanbul ignore next */ []));
526
421
  paginationInfo = computed(() => {
527
422
  const total = this.serverSide() && this.totalItems() != null
528
423
  ? this.totalItems()
@@ -532,8 +427,7 @@ class NeuTableComponent {
532
427
  const from = total === 0 ? 0 : Math.min((page - 1) * size + 1, total);
533
428
  const to = total === 0 ? 0 : Math.min(page * size, total);
534
429
  return `${from}-${to} ${this.ofLabel()} ${total} ${total === 1 ? this.resultLabelSingular() : this.resultLabelPlural()}`;
535
- }, /* @ts-ignore */
536
- ...(ngDevMode ? [{ debugName: "paginationInfo" }] : /* istanbul ignore next */ []));
430
+ }, ...(ngDevMode ? [{ debugName: "paginationInfo" }] : /* istanbul ignore next */ []));
537
431
  totalColspan = computed(() => {
538
432
  let cols = this.columns().length;
539
433
  if (this.selectable())
@@ -543,8 +437,7 @@ class NeuTableComponent {
543
437
  if (this.showRowNumbers())
544
438
  cols++;
545
439
  return cols;
546
- }, /* @ts-ignore */
547
- ...(ngDevMode ? [{ debugName: "totalColspan" }] : /* istanbul ignore next */ []));
440
+ }, ...(ngDevMode ? [{ debugName: "totalColspan" }] : /* istanbul ignore next */ []));
548
441
  _frozenLeftOffsets = computed(() => {
549
442
  this._columnWidths();
550
443
  const offsets = new Map();
@@ -556,18 +449,15 @@ class NeuTableComponent {
556
449
  }
557
450
  }
558
451
  return offsets;
559
- }, /* @ts-ignore */
560
- ...(ngDevMode ? [{ debugName: "_frozenLeftOffsets" }] : /* istanbul ignore next */ []));
452
+ }, ...(ngDevMode ? [{ debugName: "_frozenLeftOffsets" }] : /* istanbul ignore next */ []));
561
453
  _lastFrozenLeftKey = computed(() => {
562
454
  const frozenLeft = this.columns().filter((col) => col.frozen === 'left');
563
455
  return frozenLeft.at(-1)?.key ?? null;
564
- }, /* @ts-ignore */
565
- ...(ngDevMode ? [{ debugName: "_lastFrozenLeftKey" }] : /* istanbul ignore next */ []));
456
+ }, ...(ngDevMode ? [{ debugName: "_lastFrozenLeftKey" }] : /* istanbul ignore next */ []));
566
457
  _firstFrozenRightKey = computed(() => {
567
458
  const frozenRight = this.columns().filter((col) => col.frozen === 'right');
568
459
  return frozenRight[0]?.key ?? null;
569
- }, /* @ts-ignore */
570
- ...(ngDevMode ? [{ debugName: "_firstFrozenRightKey" }] : /* istanbul ignore next */ []));
460
+ }, ...(ngDevMode ? [{ debugName: "_firstFrozenRightKey" }] : /* istanbul ignore next */ []));
571
461
  isLastFrozenLeftColumn(key) {
572
462
  return this._lastFrozenLeftKey() === key;
573
463
  }
@@ -630,8 +520,7 @@ class NeuTableComponent {
630
520
  });
631
521
  }
632
522
  // ── Expansión de filas ────────────────────────────────────────────────
633
- _expandedKeys = signal(new Set(), /* @ts-ignore */
634
- ...(ngDevMode ? [{ debugName: "_expandedKeys" }] : /* istanbul ignore next */ []));
523
+ _expandedKeys = signal(new Set(), ...(ngDevMode ? [{ debugName: "_expandedKeys" }] : /* istanbul ignore next */ []));
635
524
  isRowExpanded(row) {
636
525
  return this._expandedKeys().has(this.getRowKey(row));
637
526
  }
@@ -657,16 +546,11 @@ class NeuTableComponent {
657
546
  this._expandedKeys.set(set);
658
547
  }
659
548
  // ── Selección ─────────────────────────────────────────────────────────
660
- _selectedKeys = signal(new Set(), /* @ts-ignore */
661
- ...(ngDevMode ? [{ debugName: "_selectedKeys" }] : /* istanbul ignore next */ []));
662
- _selectionConfirmPending = signal(null, /* @ts-ignore */
663
- ...(ngDevMode ? [{ debugName: "_selectionConfirmPending" }] : /* istanbul ignore next */ []));
664
- selectedCount = computed(() => this._selectedKeys().size, /* @ts-ignore */
665
- ...(ngDevMode ? [{ debugName: "selectedCount" }] : /* istanbul ignore next */ []));
666
- selectedRows = computed(() => this._rows().filter((row) => this._selectedKeys().has(this.getRowKey(row))), /* @ts-ignore */
667
- ...(ngDevMode ? [{ debugName: "selectedRows" }] : /* istanbul ignore next */ []));
668
- selectedRowsInfo = computed(() => `${this.selectedCount()} ${this.selectionSummaryLabel()}`, /* @ts-ignore */
669
- ...(ngDevMode ? [{ debugName: "selectedRowsInfo" }] : /* istanbul ignore next */ []));
549
+ _selectedKeys = signal(new Set(), ...(ngDevMode ? [{ debugName: "_selectedKeys" }] : /* istanbul ignore next */ []));
550
+ _selectionConfirmPending = signal(null, ...(ngDevMode ? [{ debugName: "_selectionConfirmPending" }] : /* istanbul ignore next */ []));
551
+ selectedCount = computed(() => this._selectedKeys().size, ...(ngDevMode ? [{ debugName: "selectedCount" }] : /* istanbul ignore next */ []));
552
+ selectedRows = computed(() => this._rows().filter((row) => this._selectedKeys().has(this.getRowKey(row))), ...(ngDevMode ? [{ debugName: "selectedRows" }] : /* istanbul ignore next */ []));
553
+ selectedRowsInfo = computed(() => `${this.selectedCount()} ${this.selectionSummaryLabel()}`, ...(ngDevMode ? [{ debugName: "selectedRowsInfo" }] : /* istanbul ignore next */ []));
670
554
  /**
671
555
  * TRUE cuando TODOS los registros que pasan el filtro activo están seleccionados.
672
556
  * A diferencia de una selección global, actúa solo sobre el subconjunto filtrado.
@@ -674,11 +558,9 @@ class NeuTableComponent {
674
558
  isAllFilteredSelected = computed(() => {
675
559
  const filtered = this.filteredData();
676
560
  return (filtered.length > 0 && filtered.every((r) => this._selectedKeys().has(this.getRowKey(r))));
677
- }, /* @ts-ignore */
678
- ...(ngDevMode ? [{ debugName: "isAllFilteredSelected" }] : /* istanbul ignore next */ []));
561
+ }, ...(ngDevMode ? [{ debugName: "isAllFilteredSelected" }] : /* istanbul ignore next */ []));
679
562
  isSomeFilteredSelected = computed(() => this.filteredData().some((r) => this._selectedKeys().has(this.getRowKey(r))) &&
680
- !this.isAllFilteredSelected(), /* @ts-ignore */
681
- ...(ngDevMode ? [{ debugName: "isSomeFilteredSelected" }] : /* istanbul ignore next */ []));
563
+ !this.isAllFilteredSelected(), ...(ngDevMode ? [{ debugName: "isSomeFilteredSelected" }] : /* istanbul ignore next */ []));
682
564
  isRowSelected(row) {
683
565
  return this._selectedKeys().has(this.getRowKey(row));
684
566
  }
@@ -1031,8 +913,8 @@ class NeuTableComponent {
1031
913
  };
1032
914
  this.serverStateChange.emit({ ...current, ...patch });
1033
915
  }
1034
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NeuTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1035
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.4", type: NeuTableComponent, isStandalone: true, selector: "neu-table", inputs: { columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, pagination: { classPropertyName: "pagination", publicName: "pagination", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, toolbarExtraRef: { classPropertyName: "toolbarExtraRef", publicName: "toolbarExtraRef", isSignal: true, isRequired: false, transformFunction: null }, emptyMessage: { classPropertyName: "emptyMessage", publicName: "emptyMessage", isSignal: true, isRequired: false, transformFunction: null }, skeletonRows: { classPropertyName: "skeletonRows", publicName: "skeletonRows", isSignal: true, isRequired: false, transformFunction: null }, searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholder: { classPropertyName: "searchPlaceholder", publicName: "searchPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, exactMatchable: { classPropertyName: "exactMatchable", publicName: "exactMatchable", isSignal: true, isRequired: false, transformFunction: null }, exactMatchLabel: { classPropertyName: "exactMatchLabel", publicName: "exactMatchLabel", isSignal: true, isRequired: false, transformFunction: null }, searchAriaLabel: { classPropertyName: "searchAriaLabel", publicName: "searchAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, clearSearchAriaLabel: { classPropertyName: "clearSearchAriaLabel", publicName: "clearSearchAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, clearFilterLabel: { classPropertyName: "clearFilterLabel", publicName: "clearFilterLabel", isSignal: true, isRequired: false, transformFunction: null }, previousPageAriaLabel: { classPropertyName: "previousPageAriaLabel", publicName: "previousPageAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, nextPageAriaLabel: { classPropertyName: "nextPageAriaLabel", publicName: "nextPageAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, pageSizeLabel: { classPropertyName: "pageSizeLabel", publicName: "pageSizeLabel", isSignal: true, isRequired: false, transformFunction: null }, pageSizeAriaLabel: { classPropertyName: "pageSizeAriaLabel", publicName: "pageSizeAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, paginationAriaLabel: { classPropertyName: "paginationAriaLabel", publicName: "paginationAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, exportCsvTitle: { classPropertyName: "exportCsvTitle", publicName: "exportCsvTitle", isSignal: true, isRequired: false, transformFunction: null }, exportJsonTitle: { classPropertyName: "exportJsonTitle", publicName: "exportJsonTitle", isSignal: true, isRequired: false, transformFunction: null }, clearSelectionLabel: { classPropertyName: "clearSelectionLabel", publicName: "clearSelectionLabel", isSignal: true, isRequired: false, transformFunction: null }, selectionSummaryLabel: { classPropertyName: "selectionSummaryLabel", publicName: "selectionSummaryLabel", isSignal: true, isRequired: false, transformFunction: null }, tableAriaLabel: { classPropertyName: "tableAriaLabel", publicName: "tableAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, selectAllAriaLabel: { classPropertyName: "selectAllAriaLabel", publicName: "selectAllAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, selectRowAriaLabel: { classPropertyName: "selectRowAriaLabel", publicName: "selectRowAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, expandRowAriaLabel: { classPropertyName: "expandRowAriaLabel", publicName: "expandRowAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, filterPlaceholder: { classPropertyName: "filterPlaceholder", publicName: "filterPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, filterAriaPrefix: { classPropertyName: "filterAriaPrefix", publicName: "filterAriaPrefix", isSignal: true, isRequired: false, transformFunction: null }, allFilterOptionLabel: { classPropertyName: "allFilterOptionLabel", publicName: "allFilterOptionLabel", isSignal: true, isRequired: false, transformFunction: null }, ofLabel: { classPropertyName: "ofLabel", publicName: "ofLabel", isSignal: true, isRequired: false, transformFunction: null }, resultLabelSingular: { classPropertyName: "resultLabelSingular", publicName: "resultLabelSingular", isSignal: true, isRequired: false, transformFunction: null }, resultLabelPlural: { classPropertyName: "resultLabelPlural", publicName: "resultLabelPlural", isSignal: true, isRequired: false, transformFunction: null }, sortable: { classPropertyName: "sortable", publicName: "sortable", isSignal: true, isRequired: false, transformFunction: null }, selectable: { classPropertyName: "selectable", publicName: "selectable", isSignal: true, isRequired: false, transformFunction: null }, expandable: { classPropertyName: "expandable", publicName: "expandable", isSignal: true, isRequired: false, transformFunction: null }, expandMode: { classPropertyName: "expandMode", publicName: "expandMode", isSignal: true, isRequired: false, transformFunction: null }, exportable: { classPropertyName: "exportable", publicName: "exportable", isSignal: true, isRequired: false, transformFunction: null }, exportFileName: { classPropertyName: "exportFileName", publicName: "exportFileName", isSignal: true, isRequired: false, transformFunction: null }, pageSizeOptions: { classPropertyName: "pageSizeOptions", publicName: "pageSizeOptions", isSignal: true, isRequired: false, transformFunction: null }, stickyHeader: { classPropertyName: "stickyHeader", publicName: "stickyHeader", isSignal: true, isRequired: false, transformFunction: null }, virtualScroll: { classPropertyName: "virtualScroll", publicName: "virtualScroll", isSignal: true, isRequired: false, transformFunction: null }, virtualScrollVisibleItems: { classPropertyName: "virtualScrollVisibleItems", publicName: "virtualScrollVisibleItems", isSignal: true, isRequired: false, transformFunction: null }, resizableColumns: { classPropertyName: "resizableColumns", publicName: "resizableColumns", isSignal: true, isRequired: false, transformFunction: null }, rowKey: { classPropertyName: "rowKey", publicName: "rowKey", isSignal: true, isRequired: false, transformFunction: null }, bordered: { classPropertyName: "bordered", publicName: "bordered", isSignal: true, isRequired: false, transformFunction: null }, roundedBorders: { classPropertyName: "roundedBorders", publicName: "roundedBorders", isSignal: true, isRequired: false, transformFunction: null }, stripedRows: { classPropertyName: "stripedRows", publicName: "stripedRows", isSignal: true, isRequired: false, transformFunction: null }, density: { classPropertyName: "density", publicName: "density", isSignal: true, isRequired: false, transformFunction: null }, showRowNumbers: { classPropertyName: "showRowNumbers", publicName: "showRowNumbers", isSignal: true, isRequired: false, transformFunction: null }, rowClass: { classPropertyName: "rowClass", publicName: "rowClass", isSignal: true, isRequired: false, transformFunction: null }, footerRow: { classPropertyName: "footerRow", publicName: "footerRow", isSignal: true, isRequired: false, transformFunction: null }, emptyStateTemplate: { classPropertyName: "emptyStateTemplate", publicName: "emptyStateTemplate", isSignal: true, isRequired: false, transformFunction: null }, serverSide: { classPropertyName: "serverSide", publicName: "serverSide", isSignal: true, isRequired: false, transformFunction: null }, totalItems: { classPropertyName: "totalItems", publicName: "totalItems", isSignal: true, isRequired: false, transformFunction: null }, multiSort: { classPropertyName: "multiSort", publicName: "multiSort", isSignal: true, isRequired: false, transformFunction: null }, exportFormats: { classPropertyName: "exportFormats", publicName: "exportFormats", isSignal: true, isRequired: false, transformFunction: null }, exportColumns: { classPropertyName: "exportColumns", publicName: "exportColumns", isSignal: true, isRequired: false, transformFunction: null }, exportScope: { classPropertyName: "exportScope", publicName: "exportScope", isSignal: true, isRequired: false, transformFunction: null }, selectionActions: { classPropertyName: "selectionActions", publicName: "selectionActions", isSignal: true, isRequired: false, transformFunction: null }, pageParam: { classPropertyName: "pageParam", publicName: "pageParam", isSignal: true, isRequired: false, transformFunction: null }, searchParam: { classPropertyName: "searchParam", publicName: "searchParam", isSignal: true, isRequired: false, transformFunction: null }, sortParam: { classPropertyName: "sortParam", publicName: "sortParam", isSignal: true, isRequired: false, transformFunction: null }, sortDirParam: { classPropertyName: "sortDirParam", publicName: "sortDirParam", isSignal: true, isRequired: false, transformFunction: null }, multiSortParam: { classPropertyName: "multiSortParam", publicName: "multiSortParam", isSignal: true, isRequired: false, transformFunction: null }, useUrlState: { classPropertyName: "useUrlState", publicName: "useUrlState", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectionChange: "selectionChange", rowClick: "rowClick", rowDblClick: "rowDblClick", actionClick: "actionClick", selectionActionClick: "selectionActionClick", serverStateChange: "serverStateChange", searchChange: "searchChange", columnResize: "columnResize" }, host: { properties: { "class.neu-table__host": "true", "class.neu-table__host--compact": "density() === \"compact\"", "class.neu-table__host--relaxed": "density() === \"relaxed\"" } }, queries: [{ propertyName: "expandTemplate", first: true, predicate: NeuTableExpandDirective, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "_scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true, isSignal: true }], ngImport: i0, template: `
916
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: NeuTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
917
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: NeuTableComponent, isStandalone: true, selector: "neu-table", inputs: { columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, pagination: { classPropertyName: "pagination", publicName: "pagination", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, toolbarExtraRef: { classPropertyName: "toolbarExtraRef", publicName: "toolbarExtraRef", isSignal: true, isRequired: false, transformFunction: null }, emptyMessage: { classPropertyName: "emptyMessage", publicName: "emptyMessage", isSignal: true, isRequired: false, transformFunction: null }, skeletonRows: { classPropertyName: "skeletonRows", publicName: "skeletonRows", isSignal: true, isRequired: false, transformFunction: null }, searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholder: { classPropertyName: "searchPlaceholder", publicName: "searchPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, exactMatchable: { classPropertyName: "exactMatchable", publicName: "exactMatchable", isSignal: true, isRequired: false, transformFunction: null }, exactMatchLabel: { classPropertyName: "exactMatchLabel", publicName: "exactMatchLabel", isSignal: true, isRequired: false, transformFunction: null }, searchAriaLabel: { classPropertyName: "searchAriaLabel", publicName: "searchAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, clearSearchAriaLabel: { classPropertyName: "clearSearchAriaLabel", publicName: "clearSearchAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, clearFilterLabel: { classPropertyName: "clearFilterLabel", publicName: "clearFilterLabel", isSignal: true, isRequired: false, transformFunction: null }, previousPageAriaLabel: { classPropertyName: "previousPageAriaLabel", publicName: "previousPageAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, nextPageAriaLabel: { classPropertyName: "nextPageAriaLabel", publicName: "nextPageAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, pageSizeLabel: { classPropertyName: "pageSizeLabel", publicName: "pageSizeLabel", isSignal: true, isRequired: false, transformFunction: null }, pageSizeAriaLabel: { classPropertyName: "pageSizeAriaLabel", publicName: "pageSizeAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, paginationAriaLabel: { classPropertyName: "paginationAriaLabel", publicName: "paginationAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, exportCsvTitle: { classPropertyName: "exportCsvTitle", publicName: "exportCsvTitle", isSignal: true, isRequired: false, transformFunction: null }, exportJsonTitle: { classPropertyName: "exportJsonTitle", publicName: "exportJsonTitle", isSignal: true, isRequired: false, transformFunction: null }, clearSelectionLabel: { classPropertyName: "clearSelectionLabel", publicName: "clearSelectionLabel", isSignal: true, isRequired: false, transformFunction: null }, selectionSummaryLabel: { classPropertyName: "selectionSummaryLabel", publicName: "selectionSummaryLabel", isSignal: true, isRequired: false, transformFunction: null }, tableAriaLabel: { classPropertyName: "tableAriaLabel", publicName: "tableAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, selectAllAriaLabel: { classPropertyName: "selectAllAriaLabel", publicName: "selectAllAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, selectRowAriaLabel: { classPropertyName: "selectRowAriaLabel", publicName: "selectRowAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, expandRowAriaLabel: { classPropertyName: "expandRowAriaLabel", publicName: "expandRowAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, filterPlaceholder: { classPropertyName: "filterPlaceholder", publicName: "filterPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, filterAriaPrefix: { classPropertyName: "filterAriaPrefix", publicName: "filterAriaPrefix", isSignal: true, isRequired: false, transformFunction: null }, allFilterOptionLabel: { classPropertyName: "allFilterOptionLabel", publicName: "allFilterOptionLabel", isSignal: true, isRequired: false, transformFunction: null }, ofLabel: { classPropertyName: "ofLabel", publicName: "ofLabel", isSignal: true, isRequired: false, transformFunction: null }, resultLabelSingular: { classPropertyName: "resultLabelSingular", publicName: "resultLabelSingular", isSignal: true, isRequired: false, transformFunction: null }, resultLabelPlural: { classPropertyName: "resultLabelPlural", publicName: "resultLabelPlural", isSignal: true, isRequired: false, transformFunction: null }, sortable: { classPropertyName: "sortable", publicName: "sortable", isSignal: true, isRequired: false, transformFunction: null }, selectable: { classPropertyName: "selectable", publicName: "selectable", isSignal: true, isRequired: false, transformFunction: null }, expandable: { classPropertyName: "expandable", publicName: "expandable", isSignal: true, isRequired: false, transformFunction: null }, expandMode: { classPropertyName: "expandMode", publicName: "expandMode", isSignal: true, isRequired: false, transformFunction: null }, exportable: { classPropertyName: "exportable", publicName: "exportable", isSignal: true, isRequired: false, transformFunction: null }, exportFileName: { classPropertyName: "exportFileName", publicName: "exportFileName", isSignal: true, isRequired: false, transformFunction: null }, pageSizeOptions: { classPropertyName: "pageSizeOptions", publicName: "pageSizeOptions", isSignal: true, isRequired: false, transformFunction: null }, stickyHeader: { classPropertyName: "stickyHeader", publicName: "stickyHeader", isSignal: true, isRequired: false, transformFunction: null }, virtualScroll: { classPropertyName: "virtualScroll", publicName: "virtualScroll", isSignal: true, isRequired: false, transformFunction: null }, virtualScrollVisibleItems: { classPropertyName: "virtualScrollVisibleItems", publicName: "virtualScrollVisibleItems", isSignal: true, isRequired: false, transformFunction: null }, resizableColumns: { classPropertyName: "resizableColumns", publicName: "resizableColumns", isSignal: true, isRequired: false, transformFunction: null }, rowKey: { classPropertyName: "rowKey", publicName: "rowKey", isSignal: true, isRequired: false, transformFunction: null }, bordered: { classPropertyName: "bordered", publicName: "bordered", isSignal: true, isRequired: false, transformFunction: null }, roundedBorders: { classPropertyName: "roundedBorders", publicName: "roundedBorders", isSignal: true, isRequired: false, transformFunction: null }, stripedRows: { classPropertyName: "stripedRows", publicName: "stripedRows", isSignal: true, isRequired: false, transformFunction: null }, density: { classPropertyName: "density", publicName: "density", isSignal: true, isRequired: false, transformFunction: null }, showRowNumbers: { classPropertyName: "showRowNumbers", publicName: "showRowNumbers", isSignal: true, isRequired: false, transformFunction: null }, rowClass: { classPropertyName: "rowClass", publicName: "rowClass", isSignal: true, isRequired: false, transformFunction: null }, footerRow: { classPropertyName: "footerRow", publicName: "footerRow", isSignal: true, isRequired: false, transformFunction: null }, emptyStateTemplate: { classPropertyName: "emptyStateTemplate", publicName: "emptyStateTemplate", isSignal: true, isRequired: false, transformFunction: null }, serverSide: { classPropertyName: "serverSide", publicName: "serverSide", isSignal: true, isRequired: false, transformFunction: null }, totalItems: { classPropertyName: "totalItems", publicName: "totalItems", isSignal: true, isRequired: false, transformFunction: null }, multiSort: { classPropertyName: "multiSort", publicName: "multiSort", isSignal: true, isRequired: false, transformFunction: null }, exportFormats: { classPropertyName: "exportFormats", publicName: "exportFormats", isSignal: true, isRequired: false, transformFunction: null }, exportColumns: { classPropertyName: "exportColumns", publicName: "exportColumns", isSignal: true, isRequired: false, transformFunction: null }, exportScope: { classPropertyName: "exportScope", publicName: "exportScope", isSignal: true, isRequired: false, transformFunction: null }, selectionActions: { classPropertyName: "selectionActions", publicName: "selectionActions", isSignal: true, isRequired: false, transformFunction: null }, pageParam: { classPropertyName: "pageParam", publicName: "pageParam", isSignal: true, isRequired: false, transformFunction: null }, searchParam: { classPropertyName: "searchParam", publicName: "searchParam", isSignal: true, isRequired: false, transformFunction: null }, sortParam: { classPropertyName: "sortParam", publicName: "sortParam", isSignal: true, isRequired: false, transformFunction: null }, sortDirParam: { classPropertyName: "sortDirParam", publicName: "sortDirParam", isSignal: true, isRequired: false, transformFunction: null }, multiSortParam: { classPropertyName: "multiSortParam", publicName: "multiSortParam", isSignal: true, isRequired: false, transformFunction: null }, useUrlState: { classPropertyName: "useUrlState", publicName: "useUrlState", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectionChange: "selectionChange", rowClick: "rowClick", rowDblClick: "rowDblClick", actionClick: "actionClick", selectionActionClick: "selectionActionClick", serverStateChange: "serverStateChange", searchChange: "searchChange", columnResize: "columnResize" }, host: { properties: { "class.neu-table__host": "true", "class.neu-table__host--compact": "density() === \"compact\"", "class.neu-table__host--relaxed": "density() === \"relaxed\"" } }, queries: [{ propertyName: "expandTemplate", first: true, predicate: NeuTableExpandDirective, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "_scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true, isSignal: true }], ngImport: i0, template: `
1036
918
  <div
1037
919
  class="neu-table-container"
1038
920
  [class.neu-table--sticky-header]="stickyHeader()"
@@ -1706,7 +1588,7 @@ class NeuTableComponent {
1706
1588
  </div>
1707
1589
  `, isInline: true, styles: [".neu-table-container{background:var(--neu-surface);overflow:hidden;box-shadow:var(--neu-shadow-sm)}.neu-table-container--bordered{border:1px solid var(--neu-border)}.neu-table-container--rounded{border-radius:var(--neu-radius-lg)}.neu-table-container--striped .neu-table__row:not(.neu-table__row--selected):nth-child(2n){background:color-mix(in srgb,var(--neu-surface-2) 70%,transparent)}.neu-table__toolbar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:var(--neu-space-3);padding:var(--neu-space-4) var(--neu-space-5);border-bottom:1px solid var(--neu-border);background:var(--neu-surface)}.neu-table__toolbar-extra{display:flex;align-items:center;gap:var(--neu-space-2);flex-wrap:wrap}.neu-table__title{font-size:var(--neu-text-base);font-weight:600;color:var(--neu-text);margin:0;letter-spacing:-.01em}.neu-table__search-group{display:flex;align-items:center;gap:var(--neu-space-3);flex:1;max-width:420px;min-width:0}.neu-table__search-wrapper{position:relative;display:flex;align-items:center;flex:1;min-width:0}.neu-table__search-icon{position:absolute;left:var(--neu-space-3);width:15px;height:15px;color:var(--neu-text-muted);pointer-events:none;flex-shrink:0}.neu-table__search{width:100%;height:36px;padding:0 var(--neu-space-3) 0 36px;border:1.5px solid var(--neu-border);border-radius:var(--neu-radius);background:var(--neu-surface-2);font-family:var(--neu-font-sans);font-size:var(--neu-text-sm);color:var(--neu-text);outline:none;transition:border-color var(--neu-transition),box-shadow var(--neu-transition)}.neu-table__search::placeholder{color:var(--neu-text-muted)}.neu-table__search:focus{border-color:var(--neu-primary);box-shadow:var(--neu-focus-ring);background:var(--neu-surface)}.neu-table__search::-webkit-search-cancel-button{display:none}.neu-table__search-clear{position:absolute;right:var(--neu-space-2);display:flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:none;background:transparent;color:var(--neu-text-muted);cursor:pointer;border-radius:var(--neu-radius-sm);transition:color var(--neu-transition),background-color var(--neu-transition)}.neu-table__search-clear svg{width:13px;height:13px}.neu-table__search-clear:hover{color:var(--neu-error);background:var(--neu-error-bg)}.neu-table__exact-label{display:inline-flex;align-items:center;gap:6px;font-size:var(--neu-text-sm);color:var(--neu-text-muted);cursor:pointer;white-space:nowrap;-webkit-user-select:none;user-select:none}.neu-table__exact-label:hover{color:var(--neu-text)}.neu-table__exact-checkbox{width:14px;height:14px;accent-color:var(--neu-primary);cursor:pointer}.neu-table__scroll-container{position:relative;isolation:isolate;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:thin;scrollbar-color:var(--neu-surface-3) transparent}.neu-table__scroll-container::-webkit-scrollbar{height:4px}.neu-table__scroll-container::-webkit-scrollbar-track{background:transparent}.neu-table__scroll-container::-webkit-scrollbar-thumb{background:var(--neu-surface-3);border-radius:99px}@media(max-width:399px){.neu-table__scroll-container{background-image:linear-gradient(to right,var(--neu-surface),var(--neu-surface)),linear-gradient(to right,var(--neu-surface),var(--neu-surface)),linear-gradient(to right,rgba(15,23,42,.08),transparent),linear-gradient(to left,rgba(15,23,42,.08),transparent);background-position:left center,right center,left center,right center;background-repeat:no-repeat;background-color:var(--neu-surface);background-size:20px 100%,20px 100%,10px 100%,10px 100%;background-attachment:local,local,scroll,scroll}}.neu-table__scroll-container--virtual{overflow-y:auto}.neu-table{width:100%;border-collapse:separate;border-spacing:0;font-size:var(--neu-text-sm);min-width:400px}.neu-table--sticky-header .neu-table__scroll-container{overflow-y:auto;max-height:var(--neu-table-max-height, 480px)}.neu-table--sticky-header .neu-table__head tr:first-child .neu-table__th{position:sticky;top:0;z-index:2;background:var(--neu-surface-2);box-shadow:inset 0 -1px 0 var(--neu-border)}.neu-table--sticky-header .neu-table__th--filter,.neu-table--sticky-header .neu-table__th--filter-placeholder{position:sticky;top:var(--neu-table-header-height, 44px);z-index:1;background:var(--neu-surface-2)}.neu-table--scrollable .neu-table__scroll-container{max-height:480px;overflow-y:auto}.neu-table--scrollable .neu-table__head .neu-table__th{position:sticky;top:0;z-index:2;background:var(--neu-surface-2);box-shadow:0 1px 0 var(--neu-border)}.neu-table__head{background:var(--neu-surface-2)}.neu-table__th{position:relative;padding:var(--neu-space-3) var(--neu-space-4);font-size:var(--neu-text-xs);font-weight:600;color:color-mix(in srgb,var(--neu-text) 72%,var(--neu-surface) 28%);text-transform:uppercase;letter-spacing:.06em;border-bottom:1px solid var(--neu-border);white-space:nowrap;-webkit-user-select:none;user-select:none;background-clip:padding-box}.neu-table__th--check{width:40px;text-align:center!important;padding:var(--neu-space-3) var(--neu-space-3)}.neu-table__th--sortable{cursor:pointer;transition:color var(--neu-transition)}.neu-table__th--sortable:hover{color:var(--neu-text)}.neu-table__th--sorted-asc,.neu-table__th--sorted-desc{color:var(--neu-primary-dark, var(--neu-primary))}.neu-table__resize-handle{position:absolute;top:0;right:-4px;width:12px;height:100%;padding:0;border:0;background:transparent;cursor:col-resize;touch-action:none;opacity:1}.neu-table__resize-handle:after{content:\"\";position:absolute;top:10px;bottom:10px;left:50%;width:2px;border-radius:999px;transform:translate(-50%);background:color-mix(in srgb,var(--neu-primary) 26%,var(--neu-border) 74%);box-shadow:0 0 0 1px color-mix(in srgb,var(--neu-surface) 55%,transparent 45%);opacity:1;transition:background var(--neu-transition)}.neu-table__resize-handle:focus-visible{outline:none}.neu-table__resize-handle:focus-visible:after,.neu-table__resize-handle:hover:after{background:color-mix(in srgb,var(--neu-primary) 62%,var(--neu-border) 38%)}.neu-table__sort-icon{margin-left:4px;font-style:normal;font-size:10px;opacity:.5}.neu-table__th--sorted-asc .neu-table__sort-icon,.neu-table__th--sorted-desc .neu-table__sort-icon{opacity:1}.neu-table__checkbox{width:16px;height:16px;cursor:pointer;accent-color:var(--neu-primary)}.neu-table__selection-bar{display:flex;align-items:center;justify-content:space-between;gap:var(--neu-space-3);flex-wrap:wrap;padding:var(--neu-space-2) var(--neu-space-5);background:var(--neu-primary-50);border-bottom:1px solid var(--neu-primary-100);font-size:var(--neu-text-sm);color:var(--neu-primary);font-weight:500;animation:neu-tab-fade .15s ease}.neu-table__selection-main{display:flex;align-items:center;gap:var(--neu-space-3);flex-wrap:wrap}.neu-table__selection-actions{display:flex;align-items:center;gap:var(--neu-space-2);flex-wrap:wrap}.neu-table__selection-clear{background:none;border:none;color:var(--neu-primary);font-size:var(--neu-text-xs);font-weight:500;cursor:pointer;text-decoration:underline;text-underline-offset:2px;padding:0;font-family:var(--neu-font-sans)}.neu-table__row{transition:background-color var(--neu-transition)}.neu-table__row:hover{background:var(--neu-surface-2)}.neu-table__row:not(:last-child) .neu-table__td{border-bottom:1px solid var(--neu-border)}.neu-table__row--selected{background:var(--neu-primary-50)!important}.neu-table__row--selected .neu-table__td{color:var(--neu-primary)}.neu-table__row--clickable{cursor:pointer}.neu-table__td{padding:var(--neu-space-3) var(--neu-space-4);color:var(--neu-text);line-height:1.5;vertical-align:middle;background-clip:padding-box}.neu-table__td--center{text-align:center}.neu-table__td--empty{padding:var(--neu-space-8) 0}.neu-table__spacer-row{pointer-events:none}.neu-table__spacer-cell{padding:0!important;border:0!important;line-height:0}.neu-table__skeleton-rows{display:flex;flex-direction:column;gap:1px}.neu-table__skeleton-row{display:flex;align-items:center;padding:var(--neu-space-3) var(--neu-space-4);gap:var(--neu-space-4);border-bottom:1px solid var(--neu-border)}.neu-table__skeleton-cell{height:14px;flex:1;border-radius:var(--neu-radius-sm);background:linear-gradient(90deg,var(--neu-surface-2) 0%,var(--neu-surface-3) 50%,var(--neu-surface-2) 100%);background-size:200% 100%;animation:neu-skeleton 1.4s ease infinite}.neu-table__skeleton-cell:first-child{max-width:60px}.neu-table__skeleton-cell:nth-child(2){max-width:160px}.neu-table__skeleton-cell:last-child{max-width:80px}@keyframes neu-skeleton{0%{background-position:200% 0}to{background-position:-200% 0}}.neu-table__empty{display:flex;flex-direction:column;align-items:center;gap:var(--neu-space-3);padding:var(--neu-space-8) var(--neu-space-4);color:var(--neu-text-muted)}.neu-table__empty svg{width:40px;height:40px;opacity:.4}.neu-table__empty p{font-size:var(--neu-text-sm);margin:0}.neu-table__clear-filter{background:none;border:none;color:var(--neu-primary);font-size:var(--neu-text-xs);font-weight:500;cursor:pointer;padding:0;text-decoration:underline;text-underline-offset:2px}.neu-table__clear-filter:hover{color:var(--neu-primary-dark)}.neu-table__footer{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:var(--neu-space-3);padding:var(--neu-space-3) var(--neu-space-5);border-top:1px solid var(--neu-border);background:var(--neu-surface-2)}.neu-table__info{font-size:var(--neu-text-xs);color:color-mix(in srgb,var(--neu-text) 72%,var(--neu-surface) 28%)}.neu-table__pagination{display:flex;align-items:center;gap:2px}.neu-table__page-btn{display:inline-flex;align-items:center;justify-content:center;min-width:32px;height:32px;padding:0 var(--neu-space-2);border:1px solid transparent;border-radius:var(--neu-radius);background:transparent;font-family:var(--neu-font-sans);font-size:var(--neu-text-xs);font-weight:500;color:var(--neu-text-muted);cursor:pointer;transition:all var(--neu-transition)}.neu-table__page-btn svg{width:14px;height:14px}.neu-table__page-btn:hover:not(:disabled){background:var(--neu-surface-3);color:var(--neu-text);border-color:var(--neu-border)}.neu-table__page-btn:disabled{opacity:.35;cursor:not-allowed}.neu-table__page-btn--active{background:var(--neu-primary-solid, var(--neu-primary-dark, var(--neu-primary)));color:var(--neu-primary-solid-fg, var(--neu-primary-fg));border-color:var(--neu-primary-solid, var(--neu-primary-dark, var(--neu-primary)))}.neu-table__page-btn--active:hover{background:var(--neu-primary-solid-hover, var(--neu-primary-dark));border-color:var(--neu-primary-solid-hover, var(--neu-primary-dark))}.neu-table__export-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:36px;padding:0 var(--neu-space-3);border:1.5px solid var(--neu-border);border-radius:var(--neu-radius);background:var(--neu-surface);font-family:var(--neu-font-sans);font-size:var(--neu-text-sm);font-weight:500;color:var(--neu-text-muted);cursor:pointer;white-space:nowrap;transition:all var(--neu-transition);flex-shrink:0}.neu-table__export-btn svg{flex-shrink:0}.neu-table__export-btn:hover{color:var(--neu-primary);border-color:var(--neu-primary);background:var(--neu-primary-50)}.neu-table__export-btn:disabled{opacity:.45;cursor:not-allowed}.neu-table__export-btn--selection{height:30px;font-size:var(--neu-text-xs);padding:0 var(--neu-space-2)}.neu-table__export-btn--primary{color:var(--neu-primary);border-color:var(--neu-primary-200);background:var(--neu-surface)}.neu-table__export-btn--danger{color:var(--neu-error);border-color:color-mix(in srgb,var(--neu-error) 24%,var(--neu-border) 76%)}.neu-table__export-btn--danger:hover:not(:disabled){background:var(--neu-error-bg);border-color:color-mix(in srgb,var(--neu-error) 40%,var(--neu-border) 60%);color:var(--neu-error)}.neu-table__page-size{display:flex;align-items:center;gap:var(--neu-space-2);min-width:0}.neu-table__page-size-label{font-size:var(--neu-text-xs);color:color-mix(in srgb,var(--neu-text) 72%,var(--neu-surface) 28%)}.neu-table__page-size-select{display:block;min-width:78px}.neu-table__page-size-select .neu-select__trigger{min-width:78px}@supports selector(:has(*)){.neu-table-container:has(.neu-table__page-size .neu-select--open){overflow:visible}.neu-table__footer:has(.neu-table__page-size .neu-select--open){position:relative;z-index:4}}.neu-table__th--expand-col,.neu-table__td--expand-col{width:36px;padding:var(--neu-space-2) var(--neu-space-2);text-align:center}.neu-table__expand-btn{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border:none;background:transparent;color:var(--neu-text-muted);cursor:pointer;border-radius:var(--neu-radius-sm);transition:all var(--neu-transition);padding:0}.neu-table__expand-btn svg{width:14px;height:14px;transition:transform .2s ease}.neu-table__expand-btn:hover{color:var(--neu-primary);background:var(--neu-primary-50)}.neu-table__expand-btn--open svg{transform:rotate(90deg)}.neu-table__row-expand-detail{background:var(--neu-surface-2)}.neu-table__td--expand-panel{padding:0}.neu-table__expand-content{padding:var(--neu-space-4) var(--neu-space-5);border-bottom:1px solid var(--neu-border);animation:neu-tab-fade .18s ease}.neu-table__cell-badge{display:inline-flex;align-items:center;padding:2px 8px;border-radius:var(--neu-radius-full);font-size:var(--neu-text-xs);font-weight:600;letter-spacing:.02em;white-space:nowrap}.neu-table__cell-badge--primary{background:var(--neu-primary-100);color:var(--neu-primary-dark)}.neu-table__cell-badge--success{background:var(--neu-table-badge-success-bg);color:color-mix(in srgb,var(--neu-text) 78%,var(--neu-success) 22%)}.neu-table__cell-badge--warning{background:var(--neu-table-badge-warning-bg);color:color-mix(in srgb,var(--neu-text) 78%,var(--neu-warning) 22%)}.neu-table__cell-badge--danger{background:var(--neu-table-badge-danger-bg);color:color-mix(in srgb,var(--neu-text) 74%,var(--neu-error) 26%)}.neu-table__cell-badge--info{background:var(--neu-primary-50);color:var(--neu-primary-dark, var(--neu-primary))}.neu-table__cell-badge--default{background:var(--neu-surface-3);color:color-mix(in srgb,var(--neu-text) 72%,var(--neu-surface) 28%)}@keyframes neu-tab-fade{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.neu-table__host--compact .neu-table__th,.neu-table__host--compact .neu-table__td{padding:var(--neu-table-density-compact-padding, 4px 8px)}.neu-table__host--relaxed .neu-table__th,.neu-table__host--relaxed .neu-table__td{padding:var(--neu-table-density-relaxed-padding, 16px 20px)}.neu-table__th--rn,.neu-table__td--rn{width:44px;text-align:right;padding-right:var(--neu-space-4);color:var(--neu-text-muted);font-variant-numeric:tabular-nums;font-size:var(--neu-text-xs)}.neu-table__th--frozen-left,.neu-table__th--frozen-right{position:sticky;z-index:3;background:var(--neu-surface-2);background-clip:border-box}.neu-table__th--frozen-left{left:0}.neu-table__th--frozen-right{right:0}.neu-table__th--frozen-left-boundary{box-shadow:inset -1px 0 0 var(--neu-border),6px 0 8px -8px #0f172a29}.neu-table__th--frozen-right-boundary{box-shadow:inset 1px 0 0 var(--neu-border),-6px 0 8px -8px #0f172a29}.neu-table__td--frozen-left,.neu-table__td--frozen-right{position:sticky;z-index:2;background:var(--neu-surface);background-clip:border-box}.neu-table__td--frozen-left{left:0}.neu-table__td--frozen-right{right:0}.neu-table__td--frozen-left-boundary{box-shadow:inset -1px 0 0 var(--neu-border),6px 0 8px -8px #0f172a29}.neu-table__td--frozen-right-boundary{box-shadow:inset 1px 0 0 var(--neu-border),-6px 0 8px -8px #0f172a29}.neu-table__foot{background:var(--neu-surface-2)}.neu-table__footer-row .neu-table__td--footer{padding:var(--neu-space-3) var(--neu-space-4);font-weight:600;font-size:var(--neu-text-sm);border-top:2px solid var(--neu-border);color:var(--neu-text)}.neu-table__sort-priority{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;border-radius:50%;background:var(--neu-primary-solid, var(--neu-primary-dark, var(--neu-primary)));color:var(--neu-primary-solid-fg, var(--neu-primary-fg));font-size:9px;font-weight:700;margin-right:2px}.neu-table__cell-link{color:var(--neu-primary);text-decoration:none;text-underline-offset:2px}.neu-table__cell-link:hover{text-decoration:underline}.neu-table__actions{display:flex;align-items:center;gap:var(--neu-space-1);flex-wrap:nowrap}.neu-table__action-btn{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;padding:0;border:none;border-radius:var(--neu-radius-sm);background:transparent;font-size:14px;cursor:pointer;transition:all var(--neu-transition);color:var(--neu-text-muted)}.neu-table__action-btn:disabled{opacity:.35;cursor:not-allowed}.neu-table__action-btn--ghost:hover:not(:disabled){background:var(--neu-surface-3);color:var(--neu-text)}.neu-table__action-btn--primary{background:var(--neu-primary-50);color:var(--neu-primary)}.neu-table__action-btn--primary:hover:not(:disabled){background:var(--neu-primary-solid, var(--neu-primary-dark, var(--neu-primary)));color:var(--neu-primary-solid-fg, var(--neu-primary-fg))}.neu-table__action-btn--danger{color:var(--neu-error)}.neu-table__action-btn--danger:hover:not(:disabled){background:var(--neu-error-bg)}.neu-table__action-icon{line-height:1}.neu-table__action-confirm{display:inline-flex;align-items:center;gap:var(--neu-space-1);font-size:var(--neu-text-xs);color:var(--neu-text-muted);white-space:nowrap}.neu-table__action-confirm .neu-table__action-btn{width:auto;padding:0 var(--neu-space-2);font-size:var(--neu-text-xs);font-family:var(--neu-font-sans);font-weight:500;border:1px solid var(--neu-border)}.neu-table__export-group{display:flex;align-items:center;gap:var(--neu-space-2);flex-shrink:0}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.neu-table__filter-row .neu-table__th--filter,.neu-table__filter-row .neu-table__th--filter-placeholder{padding:var(--neu-space-2) var(--neu-space-3);background:var(--neu-surface-2);border-bottom:2px solid var(--neu-border);font-weight:400;text-transform:none;letter-spacing:0;vertical-align:middle}.neu-table__col-filter-input,.neu-table__col-filter-select{display:block;width:100%;height:28px;padding:0 var(--neu-space-2);border:1px solid var(--neu-border);border-radius:var(--neu-radius-sm);background:var(--neu-surface);font-family:var(--neu-font-sans);font-size:var(--neu-text-xs);color:var(--neu-text);font-weight:400;outline:none;transition:border-color var(--neu-transition),box-shadow var(--neu-transition)}.neu-table__col-filter-input::placeholder,.neu-table__col-filter-select::placeholder{color:var(--neu-text-muted)}.neu-table__col-filter-input:focus,.neu-table__col-filter-select:focus{border-color:var(--neu-primary);box-shadow:0 0 0 2px #007aff1a;background:var(--neu-surface)}.neu-table__col-filter-select{cursor:pointer}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: NeuInputComponent, selector: "neu-input", inputs: ["type", "label", "placeholder", "floatingLabel", "size", "hint", "errorMessage", "disabled", "autocomplete", "startIcon", "endIcon", "icon", "iconPosition", "inputId", "name", "required", "readonly", "maxlength", "minlength", "min", "max", "pattern"] }, { kind: "component", type: NeuSelectComponent, selector: "neu-select", inputs: ["options", "label", "placeholder", "errorMessage", "hint", "disabled", "floatingLabel", "size", "searchable", "searchPlaceholder", "clearable", "virtualScroll", "virtualScrollVisibleItems", "noResultsMessage", "clearAriaLabel", "urlParam"], outputs: ["selectionChange"] }, { kind: "component", type: NeuDateInputComponent, selector: "neu-date-input", inputs: ["type", "label", "hint", "errorMessage", "disabled", "size", "readonly", "name", "inputId", "required", "min", "max", "step", "locale", "placeholder", "dateFormat", "floatingLabel"], outputs: ["rangeChange"] }, { kind: "component", type: NeuIconComponent, selector: "neu-icon", inputs: ["name", "strokeWidth", "size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1708
1590
  }
1709
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NeuTableComponent, decorators: [{
1591
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: NeuTableComponent, decorators: [{
1710
1592
  type: Component,
1711
1593
  args: [{ selector: 'neu-table', imports: [
1712
1594
  NgTemplateOutlet,