@neural-ui/core 1.5.14 → 1.6.1

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 (137) hide show
  1. package/fesm2022/neural-ui-core-accordion.mjs +13 -9
  2. package/fesm2022/neural-ui-core-accordion.mjs.map +1 -1
  3. package/fesm2022/neural-ui-core-alert.mjs +25 -14
  4. package/fesm2022/neural-ui-core-alert.mjs.map +1 -1
  5. package/fesm2022/neural-ui-core-autocomplete.mjs +53 -28
  6. package/fesm2022/neural-ui-core-autocomplete.mjs.map +1 -1
  7. package/fesm2022/neural-ui-core-avatar.mjs +23 -13
  8. package/fesm2022/neural-ui-core-avatar.mjs.map +1 -1
  9. package/fesm2022/neural-ui-core-badge.mjs +15 -9
  10. package/fesm2022/neural-ui-core-badge.mjs.map +1 -1
  11. package/fesm2022/neural-ui-core-block-ui.mjs +16 -11
  12. package/fesm2022/neural-ui-core-block-ui.mjs.map +1 -1
  13. package/fesm2022/neural-ui-core-breadcrumb.mjs +8 -6
  14. package/fesm2022/neural-ui-core-breadcrumb.mjs.map +1 -1
  15. package/fesm2022/neural-ui-core-button.mjs +29 -16
  16. package/fesm2022/neural-ui-core-button.mjs.map +1 -1
  17. package/fesm2022/neural-ui-core-calendar.mjs +75 -50
  18. package/fesm2022/neural-ui-core-calendar.mjs.map +1 -1
  19. package/fesm2022/neural-ui-core-card.mjs +13 -8
  20. package/fesm2022/neural-ui-core-card.mjs.map +1 -1
  21. package/fesm2022/neural-ui-core-chart.mjs +45 -24
  22. package/fesm2022/neural-ui-core-chart.mjs.map +1 -1
  23. package/fesm2022/neural-ui-core-checkbox.mjs +15 -9
  24. package/fesm2022/neural-ui-core-checkbox.mjs.map +1 -1
  25. package/fesm2022/neural-ui-core-chip.mjs +23 -13
  26. package/fesm2022/neural-ui-core-chip.mjs.map +1 -1
  27. package/fesm2022/neural-ui-core-code-block.mjs +32 -17
  28. package/fesm2022/neural-ui-core-code-block.mjs.map +1 -1
  29. package/fesm2022/neural-ui-core-color-picker.mjs +19 -11
  30. package/fesm2022/neural-ui-core-color-picker.mjs.map +1 -1
  31. package/fesm2022/neural-ui-core-command-palette.mjs +16 -11
  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-context-menu.mjs +12 -9
  35. package/fesm2022/neural-ui-core-context-menu.mjs.map +1 -1
  36. package/fesm2022/neural-ui-core-dashboard-grid.mjs +11 -7
  37. package/fesm2022/neural-ui-core-dashboard-grid.mjs.map +1 -1
  38. package/fesm2022/neural-ui-core-date-input.mjs +111 -57
  39. package/fesm2022/neural-ui-core-date-input.mjs.map +1 -1
  40. package/fesm2022/neural-ui-core-divider.mjs +7 -5
  41. package/fesm2022/neural-ui-core-divider.mjs.map +1 -1
  42. package/fesm2022/neural-ui-core-empty-state.mjs +13 -8
  43. package/fesm2022/neural-ui-core-empty-state.mjs.map +1 -1
  44. package/fesm2022/neural-ui-core-filter-bar.mjs +19 -11
  45. package/fesm2022/neural-ui-core-filter-bar.mjs.map +1 -1
  46. package/fesm2022/neural-ui-core-icon.mjs +11 -7
  47. package/fesm2022/neural-ui-core-icon.mjs.map +1 -1
  48. package/fesm2022/neural-ui-core-image-gallery.mjs +23 -13
  49. package/fesm2022/neural-ui-core-image-gallery.mjs.map +1 -1
  50. package/fesm2022/neural-ui-core-image-viewer.mjs +22 -14
  51. package/fesm2022/neural-ui-core-image-viewer.mjs.map +1 -1
  52. package/fesm2022/neural-ui-core-input-otp.mjs +19 -11
  53. package/fesm2022/neural-ui-core-input-otp.mjs.map +1 -1
  54. package/fesm2022/neural-ui-core-input.mjs +67 -35
  55. package/fesm2022/neural-ui-core-input.mjs.map +1 -1
  56. package/fesm2022/neural-ui-core-kanban.mjs +17 -11
  57. package/fesm2022/neural-ui-core-kanban.mjs.map +1 -1
  58. package/fesm2022/neural-ui-core-knob.mjs +41 -22
  59. package/fesm2022/neural-ui-core-knob.mjs.map +1 -1
  60. package/fesm2022/neural-ui-core-meter-group.mjs +23 -13
  61. package/fesm2022/neural-ui-core-meter-group.mjs.map +1 -1
  62. package/fesm2022/neural-ui-core-modal.mjs +16 -11
  63. package/fesm2022/neural-ui-core-modal.mjs.map +1 -1
  64. package/fesm2022/neural-ui-core-multiselect.mjs +72 -39
  65. package/fesm2022/neural-ui-core-multiselect.mjs.map +1 -1
  66. package/fesm2022/neural-ui-core-nav.mjs +22 -13
  67. package/fesm2022/neural-ui-core-nav.mjs.map +1 -1
  68. package/fesm2022/neural-ui-core-notification-center.mjs +27 -10
  69. package/fesm2022/neural-ui-core-notification-center.mjs.map +1 -1
  70. package/fesm2022/neural-ui-core-number-input.mjs +35 -19
  71. package/fesm2022/neural-ui-core-number-input.mjs.map +1 -1
  72. package/fesm2022/neural-ui-core-pagination.mjs +15 -9
  73. package/fesm2022/neural-ui-core-pagination.mjs.map +1 -1
  74. package/fesm2022/neural-ui-core-popover.mjs +22 -14
  75. package/fesm2022/neural-ui-core-popover.mjs.map +1 -1
  76. package/fesm2022/neural-ui-core-progress-bar.mjs +19 -11
  77. package/fesm2022/neural-ui-core-progress-bar.mjs.map +1 -1
  78. package/fesm2022/neural-ui-core-radio.mjs +24 -15
  79. package/fesm2022/neural-ui-core-radio.mjs.map +1 -1
  80. package/fesm2022/neural-ui-core-rating.mjs +13 -8
  81. package/fesm2022/neural-ui-core-rating.mjs.map +1 -1
  82. package/fesm2022/neural-ui-core-rich-text-editor.mjs +773 -0
  83. package/fesm2022/neural-ui-core-rich-text-editor.mjs.map +1 -0
  84. package/fesm2022/neural-ui-core-scheduler-gantt.mjs +41 -22
  85. package/fesm2022/neural-ui-core-scheduler-gantt.mjs.map +1 -1
  86. package/fesm2022/neural-ui-core-select.mjs +77 -43
  87. package/fesm2022/neural-ui-core-select.mjs.map +1 -1
  88. package/fesm2022/neural-ui-core-sidebar.mjs +23 -14
  89. package/fesm2022/neural-ui-core-sidebar.mjs.map +1 -1
  90. package/fesm2022/neural-ui-core-skeleton.mjs +11 -7
  91. package/fesm2022/neural-ui-core-skeleton.mjs.map +1 -1
  92. package/fesm2022/neural-ui-core-slider.mjs +23 -13
  93. package/fesm2022/neural-ui-core-slider.mjs.map +1 -1
  94. package/fesm2022/neural-ui-core-spinner.mjs +17 -10
  95. package/fesm2022/neural-ui-core-spinner.mjs.map +1 -1
  96. package/fesm2022/neural-ui-core-split-button.mjs +27 -15
  97. package/fesm2022/neural-ui-core-split-button.mjs.map +1 -1
  98. package/fesm2022/neural-ui-core-splitter.mjs +9 -6
  99. package/fesm2022/neural-ui-core-splitter.mjs.map +1 -1
  100. package/fesm2022/neural-ui-core-stats-card.mjs +19 -11
  101. package/fesm2022/neural-ui-core-stats-card.mjs.map +1 -1
  102. package/fesm2022/neural-ui-core-stepper.mjs +13 -8
  103. package/fesm2022/neural-ui-core-stepper.mjs.map +1 -1
  104. package/fesm2022/neural-ui-core-switch.mjs +15 -9
  105. package/fesm2022/neural-ui-core-switch.mjs.map +1 -1
  106. package/fesm2022/neural-ui-core-table.mjs +242 -124
  107. package/fesm2022/neural-ui-core-table.mjs.map +1 -1
  108. package/fesm2022/neural-ui-core-tabs.mjs +30 -18
  109. package/fesm2022/neural-ui-core-tabs.mjs.map +1 -1
  110. package/fesm2022/neural-ui-core-textarea.mjs +43 -23
  111. package/fesm2022/neural-ui-core-textarea.mjs.map +1 -1
  112. package/fesm2022/neural-ui-core-timeline-grid.mjs +21 -12
  113. package/fesm2022/neural-ui-core-timeline-grid.mjs.map +1 -1
  114. package/fesm2022/neural-ui-core-timeline.mjs +5 -4
  115. package/fesm2022/neural-ui-core-timeline.mjs.map +1 -1
  116. package/fesm2022/neural-ui-core-toast.mjs +25 -9
  117. package/fesm2022/neural-ui-core-toast.mjs.map +1 -1
  118. package/fesm2022/neural-ui-core-toggle-button-group.mjs +17 -10
  119. package/fesm2022/neural-ui-core-toggle-button-group.mjs.map +1 -1
  120. package/fesm2022/neural-ui-core-toolbar.mjs +13 -8
  121. package/fesm2022/neural-ui-core-toolbar.mjs.map +1 -1
  122. package/fesm2022/neural-ui-core-tooltip.mjs +16 -11
  123. package/fesm2022/neural-ui-core-tooltip.mjs.map +1 -1
  124. package/fesm2022/neural-ui-core-tree-table.mjs +57 -30
  125. package/fesm2022/neural-ui-core-tree-table.mjs.map +1 -1
  126. package/fesm2022/neural-ui-core-tree.mjs +31 -17
  127. package/fesm2022/neural-ui-core-tree.mjs.map +1 -1
  128. package/fesm2022/neural-ui-core-uploader.mjs +91 -47
  129. package/fesm2022/neural-ui-core-uploader.mjs.map +1 -1
  130. package/fesm2022/neural-ui-core-url-state.mjs +7 -5
  131. package/fesm2022/neural-ui-core-url-state.mjs.map +1 -1
  132. package/fesm2022/neural-ui-core-virtual-list.mjs +32 -19
  133. package/fesm2022/neural-ui-core-virtual-list.mjs.map +1 -1
  134. package/package.json +5 -1
  135. package/types/neural-ui-core-notification-center.d.ts +2 -0
  136. package/types/neural-ui-core-rich-text-editor.d.ts +97 -0
  137. package/types/neural-ui-core-toast.d.ts +2 -0
@@ -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: "21.2.8", ngImport: i0, type: NeuTableExpandDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
28
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.8", type: NeuTableExpandDirective, isStandalone: true, selector: "ng-template[neuTableExpand]", ngImport: i0 });
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 });
29
29
  }
30
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: NeuTableExpandDirective, decorators: [{
30
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NeuTableExpandDirective, decorators: [{
31
31
  type: Directive,
32
32
  args: [{
33
33
  selector: 'ng-template[neuTableExpand]',
@@ -61,82 +61,151 @@ class NeuTableComponent {
61
61
  _destroyRef = inject(DestroyRef);
62
62
  _urlState = inject(NeuUrlStateService);
63
63
  _platformId = inject(PLATFORM_ID);
64
- _scrollContainer = viewChild('scrollContainer', ...(ngDevMode ? [{ debugName: "_scrollContainer" }] : /* istanbul ignore next */ []));
64
+ _scrollContainer = viewChild('scrollContainer', /* @ts-ignore */
65
+ ...(ngDevMode ? [{ debugName: "_scrollContainer" }] : /* istanbul ignore next */ []));
65
66
  _virtualOverscan = 3;
66
- expandTemplate = contentChild(NeuTableExpandDirective, ...(ngDevMode ? [{ debugName: "expandTemplate" }] : /* istanbul ignore next */ []));
67
+ expandTemplate = contentChild(NeuTableExpandDirective, /* @ts-ignore */
68
+ ...(ngDevMode ? [{ debugName: "expandTemplate" }] : /* istanbul ignore next */ []));
67
69
  // ── Inputs de datos ─────────────────────────────────────────────────
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 */ []));
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 */ []));
71
76
  /** 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. */
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 */ []));
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 */ []));
78
89
  // ── Inputs de funcionalidad ──────────────────────────────────────────
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 */ []));
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 */ []));
120
172
  // ── Inputs nuevos v1.3.0 ──────────────────────────────────────────────
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 */ []));
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 */ []));
133
197
  // ── URL params ────────────────────────────────────────────────────────
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 */ []));
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 */ []));
138
206
  /** Param used to persist multi-sort state in the URL / Param para persistir multisort en la URL */
139
- multiSortParam = input('msort', ...(ngDevMode ? [{ debugName: "multiSortParam" }] : /* istanbul ignore next */ []));
207
+ multiSortParam = input('msort', /* @ts-ignore */
208
+ ...(ngDevMode ? [{ debugName: "multiSortParam" }] : /* istanbul ignore next */ []));
140
209
  /**
141
210
  * Activa o desactiva la sincronización de estado con los queryParams de la URL.
142
211
  * Cuando es false, la paginación, búsqueda y ordenación se gestionan con
@@ -146,7 +215,8 @@ class NeuTableComponent {
146
215
  * When false, pagination, search and sort are managed with internal signals
147
216
  * and the browser URL is never modified.
148
217
  */
149
- useUrlState = input(true, ...(ngDevMode ? [{ debugName: "useUrlState" }] : /* istanbul ignore next */ []));
218
+ useUrlState = input(true, /* @ts-ignore */
219
+ ...(ngDevMode ? [{ debugName: "useUrlState" }] : /* istanbul ignore next */ []));
150
220
  // ── Outputs ───────────────────────────────────────────────────────────
151
221
  selectionChange = output();
152
222
  rowClick = output();
@@ -158,12 +228,18 @@ class NeuTableComponent {
158
228
  columnResize = output();
159
229
  // ── Estado interno (usado cuando useUrlState = false) ─────────────────
160
230
  // Internal state signals (used when useUrlState = false)
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 */ []));
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 */ []));
167
243
  _resizeCleanup = null;
168
244
  // ── URL State ─────────────────────────────────────────────────────────
169
245
  _urlParamSignals = new Map();
@@ -184,27 +260,33 @@ class NeuTableComponent {
184
260
  const raw = this._readUrlParam(this.pageParam());
185
261
  const n = Number(raw);
186
262
  return !raw || isNaN(n) || n < 1 ? 1 : n;
187
- }, ...(ngDevMode ? [{ debugName: "currentPage" }] : /* istanbul ignore next */ []));
263
+ }, /* @ts-ignore */
264
+ ...(ngDevMode ? [{ debugName: "currentPage" }] : /* istanbul ignore next */ []));
188
265
  searchQuery = computed(() => {
189
266
  if (!this.useUrlState())
190
267
  return this._internalSearch();
191
268
  return this._readUrlParam(this.searchParam()) ?? '';
192
- }, ...(ngDevMode ? [{ debugName: "searchQuery" }] : /* istanbul ignore next */ []));
269
+ }, /* @ts-ignore */
270
+ ...(ngDevMode ? [{ debugName: "searchQuery" }] : /* istanbul ignore next */ []));
193
271
  sortKey = computed(() => {
194
272
  if (!this.useUrlState())
195
273
  return this._internalSortKey();
196
274
  return this._readUrlParam(this.sortParam()) ?? '';
197
- }, ...(ngDevMode ? [{ debugName: "sortKey" }] : /* istanbul ignore next */ []));
275
+ }, /* @ts-ignore */
276
+ ...(ngDevMode ? [{ debugName: "sortKey" }] : /* istanbul ignore next */ []));
198
277
  sortDir = computed(() => {
199
278
  if (!this.useUrlState())
200
279
  return this._internalSortDir();
201
280
  const d = this._readUrlParam(this.sortDirParam());
202
281
  return d === 'desc' ? 'desc' : 'asc';
203
- }, ...(ngDevMode ? [{ debugName: "sortDir" }] : /* istanbul ignore next */ []));
282
+ }, /* @ts-ignore */
283
+ ...(ngDevMode ? [{ debugName: "sortDir" }] : /* istanbul ignore next */ []));
204
284
  // ---- Pipeline de datos / Data pipeline ----
205
- rows = computed(() => asRows(this.data()), ...(ngDevMode ? [{ debugName: "rows" }] : /* istanbul ignore next */ []));
285
+ rows = computed(() => asRows(this.data()), /* @ts-ignore */
286
+ ...(ngDevMode ? [{ debugName: "rows" }] : /* istanbul ignore next */ []));
206
287
  // ── Estado interno ────────────────────────────────────────────────────
207
- _exactMatch = signal(false, ...(ngDevMode ? [{ debugName: "_exactMatch" }] : /* istanbul ignore next */ []));
288
+ _exactMatch = signal(false, /* @ts-ignore */
289
+ ...(ngDevMode ? [{ debugName: "_exactMatch" }] : /* istanbul ignore next */ []));
208
290
  exactMatch = this._exactMatch.asReadonly();
209
291
  /**
210
292
  * Multi-sort entries derived from URL param or internal state.
@@ -224,12 +306,15 @@ class NeuTableComponent {
224
306
  return [];
225
307
  return [{ key, dir: (dir === 'desc' ? 'desc' : 'asc') }];
226
308
  });
227
- }, ...(ngDevMode ? [{ debugName: "_sortEntries" }] : /* istanbul ignore next */ []));
228
- _columnFilters = signal({}, ...(ngDevMode ? [{ debugName: "_columnFilters" }] : /* istanbul ignore next */ []));
309
+ }, /* @ts-ignore */
310
+ ...(ngDevMode ? [{ debugName: "_sortEntries" }] : /* istanbul ignore next */ []));
311
+ _columnFilters = signal({}, /* @ts-ignore */
312
+ ...(ngDevMode ? [{ debugName: "_columnFilters" }] : /* istanbul ignore next */ []));
229
313
  _pageSizeControl = new FormControl('', { nonNullable: true });
230
314
  _columnFilterControls = new Map();
231
315
  /** True when at least one column has filterable:true / True si alguna columna tiene filterable:true */
232
- _hasFilterableCol = computed(() => this.columns().some((c) => c.filterable), ...(ngDevMode ? [{ debugName: "_hasFilterableCol" }] : /* istanbul ignore next */ []));
316
+ _hasFilterableCol = computed(() => this.columns().some((c) => c.filterable), /* @ts-ignore */
317
+ ...(ngDevMode ? [{ debugName: "_hasFilterableCol" }] : /* istanbul ignore next */ []));
233
318
  /** Convierte filterOptions de string[] a NeuSelectOption[] con opción "Todos" al inicio.
234
319
  * Converts filterOptions from string[] to NeuSelectOption[] with a leading "All" option. */
235
320
  _filterOpts(col) {
@@ -238,8 +323,10 @@ class NeuTableComponent {
238
323
  ...(col.filterOptions ?? []).map((o) => ({ label: o, value: o })),
239
324
  ];
240
325
  }
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 */ []));
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 */ []));
243
330
  constructor() {
244
331
  this._destroyRef.onDestroy(() => this._stopColumnResize());
245
332
  this._pageSizeControl.valueChanges
@@ -278,9 +365,11 @@ class NeuTableComponent {
278
365
  this.resetVirtualScrollPosition();
279
366
  });
280
367
  }
281
- _confirmPending = signal(null, ...(ngDevMode ? [{ debugName: "_confirmPending" }] : /* istanbul ignore next */ []));
368
+ _confirmPending = signal(null, /* @ts-ignore */
369
+ ...(ngDevMode ? [{ debugName: "_confirmPending" }] : /* istanbul ignore next */ []));
282
370
  // ── Pipeline de datos ─────────────────────────────────────────────────
283
- _rows = computed(() => asRows(this.data()), ...(ngDevMode ? [{ debugName: "_rows" }] : /* istanbul ignore next */ []));
371
+ _rows = computed(() => asRows(this.data()), /* @ts-ignore */
372
+ ...(ngDevMode ? [{ debugName: "_rows" }] : /* istanbul ignore next */ []));
284
373
  filteredData = computed(() => {
285
374
  if (this.serverSide())
286
375
  return this._rows();
@@ -312,7 +401,8 @@ class NeuTableComponent {
312
401
  }
313
402
  return true;
314
403
  });
315
- }, ...(ngDevMode ? [{ debugName: "filteredData" }] : /* istanbul ignore next */ []));
404
+ }, /* @ts-ignore */
405
+ ...(ngDevMode ? [{ debugName: "filteredData" }] : /* istanbul ignore next */ []));
316
406
  sortedData = computed(() => {
317
407
  if (this.serverSide())
318
408
  return this.filteredData();
@@ -340,13 +430,16 @@ class NeuTableComponent {
340
430
  });
341
431
  return dir === 'asc' ? cmp : -cmp;
342
432
  });
343
- }, ...(ngDevMode ? [{ debugName: "sortedData" }] : /* istanbul ignore next */ []));
344
- _dynamicPageSize = signal(null, ...(ngDevMode ? [{ debugName: "_dynamicPageSize" }] : /* istanbul ignore next */ []));
433
+ }, /* @ts-ignore */
434
+ ...(ngDevMode ? [{ debugName: "sortedData" }] : /* istanbul ignore next */ []));
435
+ _dynamicPageSize = signal(null, /* @ts-ignore */
436
+ ...(ngDevMode ? [{ debugName: "_dynamicPageSize" }] : /* istanbul ignore next */ []));
345
437
  effectivePageSize = computed(() => {
346
438
  if (!this.pagination())
347
439
  return this.filteredData().length || 1;
348
440
  return this._dynamicPageSize() ?? this.pageSize();
349
- }, ...(ngDevMode ? [{ debugName: "effectivePageSize" }] : /* istanbul ignore next */ []));
441
+ }, /* @ts-ignore */
442
+ ...(ngDevMode ? [{ debugName: "effectivePageSize" }] : /* istanbul ignore next */ []));
350
443
  totalPages = computed(() => {
351
444
  if (!this.pagination())
352
445
  return 1;
@@ -354,7 +447,8 @@ class NeuTableComponent {
354
447
  ? this.totalItems()
355
448
  : this.filteredData().length;
356
449
  return Math.max(1, Math.ceil(total / this.effectivePageSize()));
357
- }, ...(ngDevMode ? [{ debugName: "totalPages" }] : /* istanbul ignore next */ []));
450
+ }, /* @ts-ignore */
451
+ ...(ngDevMode ? [{ debugName: "totalPages" }] : /* istanbul ignore next */ []));
358
452
  paginatedData = computed(() => {
359
453
  if (!this.pagination())
360
454
  return this.sortedData();
@@ -363,7 +457,8 @@ class NeuTableComponent {
363
457
  const page = Math.min(this.currentPage(), this.totalPages());
364
458
  const size = this.effectivePageSize();
365
459
  return this.sortedData().slice((page - 1) * size, page * size);
366
- }, ...(ngDevMode ? [{ debugName: "paginatedData" }] : /* istanbul ignore next */ []));
460
+ }, /* @ts-ignore */
461
+ ...(ngDevMode ? [{ debugName: "paginatedData" }] : /* istanbul ignore next */ []));
367
462
  _virtualRowHeight = computed(() => {
368
463
  switch (this.density()) {
369
464
  case 'compact':
@@ -373,10 +468,14 @@ class NeuTableComponent {
373
468
  default:
374
469
  return 48;
375
470
  }
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 */ []));
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 */ []));
380
479
  _virtualStartIndex = computed(() => {
381
480
  if (!this._virtualScrollActive()) {
382
481
  return 0;
@@ -384,32 +483,37 @@ class NeuTableComponent {
384
483
  const bodyScrollTop = Math.max(0, this._virtualScrollTop() - this._virtualHeaderHeight());
385
484
  const startIndex = Math.floor(bodyScrollTop / this._virtualRowHeight());
386
485
  return Math.max(0, startIndex - this._virtualOverscan);
387
- }, ...(ngDevMode ? [{ debugName: "_virtualStartIndex" }] : /* istanbul ignore next */ []));
486
+ }, /* @ts-ignore */
487
+ ...(ngDevMode ? [{ debugName: "_virtualStartIndex" }] : /* istanbul ignore next */ []));
388
488
  _virtualEndIndex = computed(() => {
389
489
  if (!this._virtualScrollActive()) {
390
490
  return this.paginatedData().length;
391
491
  }
392
492
  return Math.min(this.paginatedData().length, this._virtualStartIndex() + this.virtualScrollVisibleItems() + this._virtualOverscan * 2);
393
- }, ...(ngDevMode ? [{ debugName: "_virtualEndIndex" }] : /* istanbul ignore next */ []));
493
+ }, /* @ts-ignore */
494
+ ...(ngDevMode ? [{ debugName: "_virtualEndIndex" }] : /* istanbul ignore next */ []));
394
495
  visiblePageRows = computed(() => {
395
496
  const rows = this.paginatedData();
396
497
  if (!this._virtualScrollActive()) {
397
498
  return rows;
398
499
  }
399
500
  return rows.slice(this._virtualStartIndex(), this._virtualEndIndex());
400
- }, ...(ngDevMode ? [{ debugName: "visiblePageRows" }] : /* istanbul ignore next */ []));
501
+ }, /* @ts-ignore */
502
+ ...(ngDevMode ? [{ debugName: "visiblePageRows" }] : /* istanbul ignore next */ []));
401
503
  _virtualTopSpacerHeight = computed(() => {
402
504
  if (!this._virtualScrollActive()) {
403
505
  return 0;
404
506
  }
405
507
  return this._virtualStartIndex() * this._virtualRowHeight();
406
- }, ...(ngDevMode ? [{ debugName: "_virtualTopSpacerHeight" }] : /* istanbul ignore next */ []));
508
+ }, /* @ts-ignore */
509
+ ...(ngDevMode ? [{ debugName: "_virtualTopSpacerHeight" }] : /* istanbul ignore next */ []));
407
510
  _virtualBottomSpacerHeight = computed(() => {
408
511
  if (!this._virtualScrollActive()) {
409
512
  return 0;
410
513
  }
411
514
  return Math.max(0, (this.paginatedData().length - this._virtualEndIndex()) * this._virtualRowHeight());
412
- }, ...(ngDevMode ? [{ debugName: "_virtualBottomSpacerHeight" }] : /* istanbul ignore next */ []));
515
+ }, /* @ts-ignore */
516
+ ...(ngDevMode ? [{ debugName: "_virtualBottomSpacerHeight" }] : /* istanbul ignore next */ []));
413
517
  pageNumbers = computed(() => {
414
518
  const total = this.totalPages();
415
519
  const current = this.currentPage();
@@ -417,7 +521,8 @@ class NeuTableComponent {
417
521
  const end = Math.min(total, start + 4);
418
522
  start = Math.max(1, end - 4);
419
523
  return Array.from({ length: end - start + 1 }, (_, i) => start + i);
420
- }, ...(ngDevMode ? [{ debugName: "pageNumbers" }] : /* istanbul ignore next */ []));
524
+ }, /* @ts-ignore */
525
+ ...(ngDevMode ? [{ debugName: "pageNumbers" }] : /* istanbul ignore next */ []));
421
526
  paginationInfo = computed(() => {
422
527
  const total = this.serverSide() && this.totalItems() != null
423
528
  ? this.totalItems()
@@ -427,7 +532,8 @@ class NeuTableComponent {
427
532
  const from = total === 0 ? 0 : Math.min((page - 1) * size + 1, total);
428
533
  const to = total === 0 ? 0 : Math.min(page * size, total);
429
534
  return `${from}-${to} ${this.ofLabel()} ${total} ${total === 1 ? this.resultLabelSingular() : this.resultLabelPlural()}`;
430
- }, ...(ngDevMode ? [{ debugName: "paginationInfo" }] : /* istanbul ignore next */ []));
535
+ }, /* @ts-ignore */
536
+ ...(ngDevMode ? [{ debugName: "paginationInfo" }] : /* istanbul ignore next */ []));
431
537
  totalColspan = computed(() => {
432
538
  let cols = this.columns().length;
433
539
  if (this.selectable())
@@ -437,7 +543,8 @@ class NeuTableComponent {
437
543
  if (this.showRowNumbers())
438
544
  cols++;
439
545
  return cols;
440
- }, ...(ngDevMode ? [{ debugName: "totalColspan" }] : /* istanbul ignore next */ []));
546
+ }, /* @ts-ignore */
547
+ ...(ngDevMode ? [{ debugName: "totalColspan" }] : /* istanbul ignore next */ []));
441
548
  _frozenLeftOffsets = computed(() => {
442
549
  this._columnWidths();
443
550
  const offsets = new Map();
@@ -449,15 +556,18 @@ class NeuTableComponent {
449
556
  }
450
557
  }
451
558
  return offsets;
452
- }, ...(ngDevMode ? [{ debugName: "_frozenLeftOffsets" }] : /* istanbul ignore next */ []));
559
+ }, /* @ts-ignore */
560
+ ...(ngDevMode ? [{ debugName: "_frozenLeftOffsets" }] : /* istanbul ignore next */ []));
453
561
  _lastFrozenLeftKey = computed(() => {
454
562
  const frozenLeft = this.columns().filter((col) => col.frozen === 'left');
455
563
  return frozenLeft.at(-1)?.key ?? null;
456
- }, ...(ngDevMode ? [{ debugName: "_lastFrozenLeftKey" }] : /* istanbul ignore next */ []));
564
+ }, /* @ts-ignore */
565
+ ...(ngDevMode ? [{ debugName: "_lastFrozenLeftKey" }] : /* istanbul ignore next */ []));
457
566
  _firstFrozenRightKey = computed(() => {
458
567
  const frozenRight = this.columns().filter((col) => col.frozen === 'right');
459
568
  return frozenRight[0]?.key ?? null;
460
- }, ...(ngDevMode ? [{ debugName: "_firstFrozenRightKey" }] : /* istanbul ignore next */ []));
569
+ }, /* @ts-ignore */
570
+ ...(ngDevMode ? [{ debugName: "_firstFrozenRightKey" }] : /* istanbul ignore next */ []));
461
571
  isLastFrozenLeftColumn(key) {
462
572
  return this._lastFrozenLeftKey() === key;
463
573
  }
@@ -520,7 +630,8 @@ class NeuTableComponent {
520
630
  });
521
631
  }
522
632
  // ── Expansión de filas ────────────────────────────────────────────────
523
- _expandedKeys = signal(new Set(), ...(ngDevMode ? [{ debugName: "_expandedKeys" }] : /* istanbul ignore next */ []));
633
+ _expandedKeys = signal(new Set(), /* @ts-ignore */
634
+ ...(ngDevMode ? [{ debugName: "_expandedKeys" }] : /* istanbul ignore next */ []));
524
635
  isRowExpanded(row) {
525
636
  return this._expandedKeys().has(this.getRowKey(row));
526
637
  }
@@ -546,11 +657,16 @@ class NeuTableComponent {
546
657
  this._expandedKeys.set(set);
547
658
  }
548
659
  // ── Selección ─────────────────────────────────────────────────────────
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 */ []));
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 */ []));
554
670
  /**
555
671
  * TRUE cuando TODOS los registros que pasan el filtro activo están seleccionados.
556
672
  * A diferencia de una selección global, actúa solo sobre el subconjunto filtrado.
@@ -558,9 +674,11 @@ class NeuTableComponent {
558
674
  isAllFilteredSelected = computed(() => {
559
675
  const filtered = this.filteredData();
560
676
  return (filtered.length > 0 && filtered.every((r) => this._selectedKeys().has(this.getRowKey(r))));
561
- }, ...(ngDevMode ? [{ debugName: "isAllFilteredSelected" }] : /* istanbul ignore next */ []));
677
+ }, /* @ts-ignore */
678
+ ...(ngDevMode ? [{ debugName: "isAllFilteredSelected" }] : /* istanbul ignore next */ []));
562
679
  isSomeFilteredSelected = computed(() => this.filteredData().some((r) => this._selectedKeys().has(this.getRowKey(r))) &&
563
- !this.isAllFilteredSelected(), ...(ngDevMode ? [{ debugName: "isSomeFilteredSelected" }] : /* istanbul ignore next */ []));
680
+ !this.isAllFilteredSelected(), /* @ts-ignore */
681
+ ...(ngDevMode ? [{ debugName: "isSomeFilteredSelected" }] : /* istanbul ignore next */ []));
564
682
  isRowSelected(row) {
565
683
  return this._selectedKeys().has(this.getRowKey(row));
566
684
  }
@@ -913,8 +1031,8 @@ class NeuTableComponent {
913
1031
  };
914
1032
  this.serverStateChange.emit({ ...current, ...patch });
915
1033
  }
916
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: NeuTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
917
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", 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: `
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: `
918
1036
  <div
919
1037
  class="neu-table-container"
920
1038
  [class.neu-table--sticky-header]="stickyHeader()"
@@ -1588,7 +1706,7 @@ class NeuTableComponent {
1588
1706
  </div>
1589
1707
  `, 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 });
1590
1708
  }
1591
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: NeuTableComponent, decorators: [{
1709
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NeuTableComponent, decorators: [{
1592
1710
  type: Component,
1593
1711
  args: [{ selector: 'neu-table', imports: [
1594
1712
  NgTemplateOutlet,