@neural-ui/core 1.3.2 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/README.md +14 -7
  2. package/calendar/package.json +4 -0
  3. package/fesm2022/neural-ui-core-accordion.mjs +8 -6
  4. package/fesm2022/neural-ui-core-accordion.mjs.map +1 -1
  5. package/fesm2022/neural-ui-core-autocomplete.mjs +121 -29
  6. package/fesm2022/neural-ui-core-autocomplete.mjs.map +1 -1
  7. package/fesm2022/neural-ui-core-badge.mjs +2 -2
  8. package/fesm2022/neural-ui-core-badge.mjs.map +1 -1
  9. package/fesm2022/neural-ui-core-block-ui.mjs +2 -2
  10. package/fesm2022/neural-ui-core-button.mjs +2 -2
  11. package/fesm2022/neural-ui-core-button.mjs.map +1 -1
  12. package/fesm2022/neural-ui-core-calendar.mjs +551 -0
  13. package/fesm2022/neural-ui-core-calendar.mjs.map +1 -0
  14. package/fesm2022/neural-ui-core-chip.mjs +2 -2
  15. package/fesm2022/neural-ui-core-chip.mjs.map +1 -1
  16. package/fesm2022/neural-ui-core-color-picker.mjs +3 -9
  17. package/fesm2022/neural-ui-core-color-picker.mjs.map +1 -1
  18. package/fesm2022/neural-ui-core-confirm-dialog.mjs +2 -2
  19. package/fesm2022/neural-ui-core-confirm-dialog.mjs.map +1 -1
  20. package/fesm2022/neural-ui-core-dashboard-grid.mjs +2 -2
  21. package/fesm2022/neural-ui-core-dashboard-grid.mjs.map +1 -1
  22. package/fesm2022/neural-ui-core-date-input.mjs +2 -2
  23. package/fesm2022/neural-ui-core-date-input.mjs.map +1 -1
  24. package/fesm2022/neural-ui-core-filter-bar.mjs +2 -2
  25. package/fesm2022/neural-ui-core-filter-bar.mjs.map +1 -1
  26. package/fesm2022/neural-ui-core-image-gallery.mjs +224 -0
  27. package/fesm2022/neural-ui-core-image-gallery.mjs.map +1 -0
  28. package/fesm2022/neural-ui-core-input.mjs +2 -2
  29. package/fesm2022/neural-ui-core-kanban.mjs +270 -0
  30. package/fesm2022/neural-ui-core-kanban.mjs.map +1 -0
  31. package/fesm2022/neural-ui-core-meter-group.mjs +2 -2
  32. package/fesm2022/neural-ui-core-modal.mjs +81 -31
  33. package/fesm2022/neural-ui-core-modal.mjs.map +1 -1
  34. package/fesm2022/neural-ui-core-multiselect.mjs +269 -99
  35. package/fesm2022/neural-ui-core-multiselect.mjs.map +1 -1
  36. package/fesm2022/neural-ui-core-nav.mjs +4 -6
  37. package/fesm2022/neural-ui-core-nav.mjs.map +1 -1
  38. package/fesm2022/neural-ui-core-number-input.mjs +2 -2
  39. package/fesm2022/neural-ui-core-pagination.mjs +2 -2
  40. package/fesm2022/neural-ui-core-pagination.mjs.map +1 -1
  41. package/fesm2022/neural-ui-core-progress-bar.mjs +2 -2
  42. package/fesm2022/neural-ui-core-scheduler-gantt.mjs +289 -0
  43. package/fesm2022/neural-ui-core-scheduler-gantt.mjs.map +1 -0
  44. package/fesm2022/neural-ui-core-select.mjs +276 -101
  45. package/fesm2022/neural-ui-core-select.mjs.map +1 -1
  46. package/fesm2022/neural-ui-core-sidebar.mjs +3 -2
  47. package/fesm2022/neural-ui-core-sidebar.mjs.map +1 -1
  48. package/fesm2022/neural-ui-core-slider.mjs +2 -2
  49. package/fesm2022/neural-ui-core-slider.mjs.map +1 -1
  50. package/fesm2022/neural-ui-core-split-button.mjs +2 -2
  51. package/fesm2022/neural-ui-core-split-button.mjs.map +1 -1
  52. package/fesm2022/neural-ui-core-stepper.mjs +2 -2
  53. package/fesm2022/neural-ui-core-stepper.mjs.map +1 -1
  54. package/fesm2022/neural-ui-core-table.mjs +435 -34
  55. package/fesm2022/neural-ui-core-table.mjs.map +1 -1
  56. package/fesm2022/neural-ui-core-tabs.mjs +11 -4
  57. package/fesm2022/neural-ui-core-tabs.mjs.map +1 -1
  58. package/fesm2022/neural-ui-core-textarea.mjs +2 -2
  59. package/fesm2022/neural-ui-core-timeline-grid.mjs +215 -0
  60. package/fesm2022/neural-ui-core-timeline-grid.mjs.map +1 -0
  61. package/fesm2022/neural-ui-core-toggle-button-group.mjs +2 -2
  62. package/fesm2022/neural-ui-core-toggle-button-group.mjs.map +1 -1
  63. package/fesm2022/neural-ui-core-toolbar.mjs +2 -2
  64. package/fesm2022/neural-ui-core-toolbar.mjs.map +1 -1
  65. package/fesm2022/neural-ui-core-tree-table.mjs +262 -0
  66. package/fesm2022/neural-ui-core-tree-table.mjs.map +1 -0
  67. package/fesm2022/neural-ui-core-tree.mjs +413 -0
  68. package/fesm2022/neural-ui-core-tree.mjs.map +1 -0
  69. package/fesm2022/neural-ui-core-uploader.mjs +624 -0
  70. package/fesm2022/neural-ui-core-uploader.mjs.map +1 -0
  71. package/fesm2022/neural-ui-core-url-state.mjs +90 -10
  72. package/fesm2022/neural-ui-core-url-state.mjs.map +1 -1
  73. package/fesm2022/neural-ui-core-virtual-list.mjs +53 -23
  74. package/fesm2022/neural-ui-core-virtual-list.mjs.map +1 -1
  75. package/fesm2022/neural-ui-core.mjs +3 -1
  76. package/fesm2022/neural-ui-core.mjs.map +1 -1
  77. package/image-gallery/package.json +4 -0
  78. package/kanban/package.json +4 -0
  79. package/package.json +34 -2
  80. package/scheduler-gantt/package.json +4 -0
  81. package/styles/_tokens.scss +13 -4
  82. package/timeline-grid/package.json +4 -0
  83. package/tree/package.json +4 -0
  84. package/tree-table/package.json +4 -0
  85. package/types/neural-ui-core-autocomplete.d.ts +10 -1
  86. package/types/neural-ui-core-calendar.d.ts +79 -0
  87. package/types/neural-ui-core-color-picker.d.ts +0 -1
  88. package/types/neural-ui-core-image-gallery.d.ts +26 -0
  89. package/types/neural-ui-core-kanban.d.ts +52 -0
  90. package/types/neural-ui-core-modal.d.ts +22 -16
  91. package/types/neural-ui-core-multiselect.d.ts +13 -1
  92. package/types/neural-ui-core-scheduler-gantt.d.ts +68 -0
  93. package/types/neural-ui-core-select.d.ts +14 -1
  94. package/types/neural-ui-core-sidebar.d.ts +1 -0
  95. package/types/neural-ui-core-table.d.ts +66 -4
  96. package/types/neural-ui-core-tabs.d.ts +1 -0
  97. package/types/neural-ui-core-timeline-grid.d.ts +55 -0
  98. package/types/neural-ui-core-tree-table.d.ts +72 -0
  99. package/types/neural-ui-core-tree.d.ts +52 -0
  100. package/types/neural-ui-core-uploader.d.ts +98 -0
  101. package/types/neural-ui-core-url-state.d.ts +9 -0
  102. package/types/neural-ui-core-virtual-list.d.ts +17 -1
  103. package/uploader/package.json +4 -0
@@ -43,6 +43,19 @@ interface NeuTableActionEvent<T = Record<string, unknown>> {
43
43
  action: NeuTableAction<T>;
44
44
  row: T;
45
45
  }
46
+ interface NeuTableSelectionAction<T = Record<string, unknown>> {
47
+ key: string;
48
+ label: string;
49
+ icon: string;
50
+ variant?: 'ghost' | 'primary' | 'danger';
51
+ show?: (rows: T[]) => boolean;
52
+ disabled?: (rows: T[]) => boolean;
53
+ confirm?: string;
54
+ }
55
+ interface NeuTableSelectionActionEvent<T = Record<string, unknown>> {
56
+ action: NeuTableSelectionAction<T>;
57
+ rows: T[];
58
+ }
46
59
  interface NeuTableSortEntry {
47
60
  key: string;
48
61
  dir: 'asc' | 'desc';
@@ -61,6 +74,8 @@ interface NeuTableColumn<T = Record<string, unknown>> {
61
74
  key: string;
62
75
  header: string;
63
76
  width?: string;
77
+ minWidth?: number;
78
+ maxWidth?: number;
64
79
  align?: 'left' | 'center' | 'right';
65
80
  cell?: (row: T) => string;
66
81
  cellTemplate?: TemplateRef<{
@@ -70,6 +85,7 @@ interface NeuTableColumn<T = Record<string, unknown>> {
70
85
  }>;
71
86
  cellClass?: string;
72
87
  sortable?: boolean;
88
+ resizable?: boolean;
73
89
  type?: NeuTableCellType;
74
90
  badgeMap?: Record<string, NeuTableBadgeConfig>;
75
91
  dateFormat?: Intl.DateTimeFormatOptions;
@@ -110,10 +126,14 @@ declare class NeuTableComponent {
110
126
  private readonly _destroyRef;
111
127
  private readonly _urlState;
112
128
  private readonly _platformId;
129
+ private readonly _scrollContainer;
130
+ private readonly _virtualOverscan;
113
131
  readonly expandTemplate: Signal<NeuTableExpandDirective | undefined>;
114
132
  readonly columns: _angular_core.InputSignal<NeuTableColumn<Record<string, unknown>>[]>;
115
133
  readonly data: _angular_core.InputSignal<object[]>;
116
134
  readonly pageSize: _angular_core.InputSignal<number>;
135
+ /** 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. */
136
+ readonly pagination: _angular_core.InputSignal<boolean>;
117
137
  readonly loading: _angular_core.InputSignal<boolean>;
118
138
  readonly title: _angular_core.InputSignal<string>;
119
139
  readonly emptyMessage: _angular_core.InputSignal<string>;
@@ -147,11 +167,18 @@ declare class NeuTableComponent {
147
167
  readonly sortable: _angular_core.InputSignal<boolean>;
148
168
  readonly selectable: _angular_core.InputSignal<boolean>;
149
169
  readonly expandable: _angular_core.InputSignal<boolean>;
170
+ readonly expandMode: _angular_core.InputSignal<"multiple" | "single">;
150
171
  readonly exportable: _angular_core.InputSignal<boolean>;
151
172
  readonly exportFileName: _angular_core.InputSignal<string>;
152
173
  readonly pageSizeOptions: _angular_core.InputSignal<number[]>;
153
174
  readonly stickyHeader: _angular_core.InputSignal<boolean>;
175
+ readonly virtualScroll: _angular_core.InputSignal<boolean>;
176
+ readonly virtualScrollVisibleItems: _angular_core.InputSignal<number>;
177
+ readonly resizableColumns: _angular_core.InputSignal<boolean>;
154
178
  readonly rowKey: _angular_core.InputSignal<string>;
179
+ readonly bordered: _angular_core.InputSignal<boolean>;
180
+ readonly roundedBorders: _angular_core.InputSignal<boolean>;
181
+ readonly stripedRows: _angular_core.InputSignal<boolean>;
155
182
  readonly density: _angular_core.InputSignal<"compact" | "normal" | "relaxed">;
156
183
  readonly showRowNumbers: _angular_core.InputSignal<boolean>;
157
184
  readonly rowClass: _angular_core.InputSignal<((row: Row) => string) | undefined>;
@@ -162,6 +189,8 @@ declare class NeuTableComponent {
162
189
  readonly multiSort: _angular_core.InputSignal<boolean>;
163
190
  readonly exportFormats: _angular_core.InputSignal<("csv" | "json")[]>;
164
191
  readonly exportColumns: _angular_core.InputSignal<string[]>;
192
+ readonly exportScope: _angular_core.InputSignal<"selected" | "filtered" | "auto">;
193
+ readonly selectionActions: _angular_core.InputSignal<NeuTableSelectionAction<Row>[]>;
165
194
  readonly pageParam: _angular_core.InputSignal<string>;
166
195
  readonly searchParam: _angular_core.InputSignal<string>;
167
196
  readonly sortParam: _angular_core.InputSignal<string>;
@@ -182,13 +211,20 @@ declare class NeuTableComponent {
182
211
  readonly rowClick: _angular_core.OutputEmitterRef<Row>;
183
212
  readonly rowDblClick: _angular_core.OutputEmitterRef<Row>;
184
213
  readonly actionClick: _angular_core.OutputEmitterRef<NeuTableActionEvent<Row>>;
214
+ readonly selectionActionClick: _angular_core.OutputEmitterRef<NeuTableSelectionActionEvent<Row>>;
185
215
  readonly serverStateChange: _angular_core.OutputEmitterRef<NeuTableServerState>;
186
216
  readonly searchChange: _angular_core.OutputEmitterRef<string>;
217
+ readonly columnResize: _angular_core.OutputEmitterRef<{
218
+ key: string;
219
+ width: number;
220
+ }>;
187
221
  private readonly _internalPage;
188
222
  private readonly _internalSearch;
189
223
  private readonly _internalSortKey;
190
224
  private readonly _internalSortDir;
191
225
  private readonly _internalMultiSort;
226
+ private readonly _columnWidths;
227
+ private _resizeCleanup;
192
228
  private readonly _urlParamSignals;
193
229
  private _getUrlParamSignal;
194
230
  private _readUrlParam;
@@ -213,6 +249,7 @@ declare class NeuTableComponent {
213
249
  * Converts filterOptions from string[] to NeuSelectOption[] with a leading "All" option. */
214
250
  _filterOpts(col: NeuTableColumn): NeuSelectOption[];
215
251
  readonly _pageSizeOptions: Signal<NeuSelectOption[]>;
252
+ private readonly _virtualScrollTop;
216
253
  constructor();
217
254
  private readonly _confirmPending;
218
255
  private readonly _rows;
@@ -222,21 +259,36 @@ declare class NeuTableComponent {
222
259
  readonly effectivePageSize: Signal<number>;
223
260
  readonly totalPages: Signal<number>;
224
261
  readonly paginatedData: Signal<Row[]>;
262
+ readonly _virtualRowHeight: Signal<34 | 64 | 48>;
263
+ readonly _virtualHeaderHeight: Signal<number>;
264
+ readonly _virtualScrollActive: Signal<boolean>;
265
+ readonly virtualContainerMaxHeight: Signal<string>;
266
+ readonly _virtualStartIndex: Signal<number>;
267
+ readonly _virtualEndIndex: Signal<number>;
268
+ readonly visiblePageRows: Signal<Row[]>;
269
+ readonly _virtualTopSpacerHeight: Signal<number>;
270
+ readonly _virtualBottomSpacerHeight: Signal<number>;
225
271
  readonly pageNumbers: Signal<number[]>;
226
272
  readonly paginationInfo: Signal<string>;
227
273
  readonly totalColspan: Signal<number>;
228
- /** Calcula el offset izquierdo acumulado para columnas frozen-left múltiples.
229
- * Calculates cumulative left offset for multiple frozen-left columns. */
230
274
  readonly _frozenLeftOffsets: Signal<Map<string, number>>;
231
275
  readonly _lastFrozenLeftKey: Signal<string | null>;
232
276
  readonly _firstFrozenRightKey: Signal<string>;
233
277
  isLastFrozenLeftColumn(key: string): boolean;
234
278
  isFirstFrozenRightColumn(key: string): boolean;
279
+ isColumnResizable(col: NeuTableColumn): boolean;
280
+ columnWidth(col: NeuTableColumn): string | null;
281
+ startColumnResize(col: NeuTableColumn, event: MouseEvent): void;
282
+ resetColumnWidth(key: string, event?: Event): void;
235
283
  private readonly _expandedKeys;
236
284
  isRowExpanded(row: Row): boolean;
285
+ expandRow(row: Row): void;
286
+ collapseRow(row: Row): void;
237
287
  toggleExpand(row: Row): void;
238
288
  private readonly _selectedKeys;
289
+ private readonly _selectionConfirmPending;
239
290
  readonly selectedCount: Signal<number>;
291
+ readonly selectedRows: Signal<Row[]>;
240
292
  readonly selectedRowsInfo: Signal<string>;
241
293
  /**
242
294
  * TRUE cuando TODOS los registros que pasan el filtro activo están seleccionados.
@@ -266,20 +318,30 @@ declare class NeuTableComponent {
266
318
  isConfirmPending(row: Row, action: NeuTableAction<Row>): boolean;
267
319
  handleAction(row: Row, action: NeuTableAction<Row>): void;
268
320
  cancelConfirm(): void;
321
+ isSelectionConfirmPending(action: NeuTableSelectionAction<Row>): boolean;
322
+ handleSelectionAction(action: NeuTableSelectionAction<Row>): void;
323
+ cancelSelectionConfirm(): void;
269
324
  exportCsv(): void;
270
325
  exportJson(): void;
271
326
  private _getExportColumns;
327
+ private _getExportRows;
272
328
  private _downloadBlob;
329
+ onTableScroll(event: Event): void;
273
330
  getRowKey(row: Row): unknown;
331
+ visibleRowNumber(rowIdx: number): number;
332
+ private resetVirtualScrollPosition;
274
333
  getRowClass(row: Row): string;
334
+ private _columnWidthPx;
335
+ private _setColumnWidth;
336
+ private _stopColumnResize;
275
337
  getCellValue(row: Row, col: NeuTableColumn): string;
276
338
  getSortPriority(key: string): number;
277
339
  columnFilterControl(key: string): FormControl<string>;
278
340
  getColumnFilterValue(key: string): unknown;
279
341
  private _emitServerState;
280
342
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NeuTableComponent, never>;
281
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<NeuTableComponent, "neu-table", never, { "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "skeletonRows": { "alias": "skeletonRows"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "exactMatchable": { "alias": "exactMatchable"; "required": false; "isSignal": true; }; "exactMatchLabel": { "alias": "exactMatchLabel"; "required": false; "isSignal": true; }; "searchAriaLabel": { "alias": "searchAriaLabel"; "required": false; "isSignal": true; }; "clearSearchAriaLabel": { "alias": "clearSearchAriaLabel"; "required": false; "isSignal": true; }; "clearFilterLabel": { "alias": "clearFilterLabel"; "required": false; "isSignal": true; }; "previousPageAriaLabel": { "alias": "previousPageAriaLabel"; "required": false; "isSignal": true; }; "nextPageAriaLabel": { "alias": "nextPageAriaLabel"; "required": false; "isSignal": true; }; "pageSizeLabel": { "alias": "pageSizeLabel"; "required": false; "isSignal": true; }; "pageSizeAriaLabel": { "alias": "pageSizeAriaLabel"; "required": false; "isSignal": true; }; "paginationAriaLabel": { "alias": "paginationAriaLabel"; "required": false; "isSignal": true; }; "exportCsvTitle": { "alias": "exportCsvTitle"; "required": false; "isSignal": true; }; "exportJsonTitle": { "alias": "exportJsonTitle"; "required": false; "isSignal": true; }; "clearSelectionLabel": { "alias": "clearSelectionLabel"; "required": false; "isSignal": true; }; "selectionSummaryLabel": { "alias": "selectionSummaryLabel"; "required": false; "isSignal": true; }; "tableAriaLabel": { "alias": "tableAriaLabel"; "required": false; "isSignal": true; }; "selectAllAriaLabel": { "alias": "selectAllAriaLabel"; "required": false; "isSignal": true; }; "selectRowAriaLabel": { "alias": "selectRowAriaLabel"; "required": false; "isSignal": true; }; "expandRowAriaLabel": { "alias": "expandRowAriaLabel"; "required": false; "isSignal": true; }; "filterPlaceholder": { "alias": "filterPlaceholder"; "required": false; "isSignal": true; }; "filterAriaPrefix": { "alias": "filterAriaPrefix"; "required": false; "isSignal": true; }; "allFilterOptionLabel": { "alias": "allFilterOptionLabel"; "required": false; "isSignal": true; }; "ofLabel": { "alias": "ofLabel"; "required": false; "isSignal": true; }; "resultLabelSingular": { "alias": "resultLabelSingular"; "required": false; "isSignal": true; }; "resultLabelPlural": { "alias": "resultLabelPlural"; "required": false; "isSignal": true; }; "sortable": { "alias": "sortable"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "expandable": { "alias": "expandable"; "required": false; "isSignal": true; }; "exportable": { "alias": "exportable"; "required": false; "isSignal": true; }; "exportFileName": { "alias": "exportFileName"; "required": false; "isSignal": true; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; "isSignal": true; }; "stickyHeader": { "alias": "stickyHeader"; "required": false; "isSignal": true; }; "rowKey": { "alias": "rowKey"; "required": false; "isSignal": true; }; "density": { "alias": "density"; "required": false; "isSignal": true; }; "showRowNumbers": { "alias": "showRowNumbers"; "required": false; "isSignal": true; }; "rowClass": { "alias": "rowClass"; "required": false; "isSignal": true; }; "footerRow": { "alias": "footerRow"; "required": false; "isSignal": true; }; "emptyStateTemplate": { "alias": "emptyStateTemplate"; "required": false; "isSignal": true; }; "serverSide": { "alias": "serverSide"; "required": false; "isSignal": true; }; "totalItems": { "alias": "totalItems"; "required": false; "isSignal": true; }; "multiSort": { "alias": "multiSort"; "required": false; "isSignal": true; }; "exportFormats": { "alias": "exportFormats"; "required": false; "isSignal": true; }; "exportColumns": { "alias": "exportColumns"; "required": false; "isSignal": true; }; "pageParam": { "alias": "pageParam"; "required": false; "isSignal": true; }; "searchParam": { "alias": "searchParam"; "required": false; "isSignal": true; }; "sortParam": { "alias": "sortParam"; "required": false; "isSignal": true; }; "sortDirParam": { "alias": "sortDirParam"; "required": false; "isSignal": true; }; "multiSortParam": { "alias": "multiSortParam"; "required": false; "isSignal": true; }; "useUrlState": { "alias": "useUrlState"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; "rowClick": "rowClick"; "rowDblClick": "rowDblClick"; "actionClick": "actionClick"; "serverStateChange": "serverStateChange"; "searchChange": "searchChange"; }, ["expandTemplate"], never, true, never>;
343
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NeuTableComponent, "neu-table", never, { "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "pagination": { "alias": "pagination"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "skeletonRows": { "alias": "skeletonRows"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "exactMatchable": { "alias": "exactMatchable"; "required": false; "isSignal": true; }; "exactMatchLabel": { "alias": "exactMatchLabel"; "required": false; "isSignal": true; }; "searchAriaLabel": { "alias": "searchAriaLabel"; "required": false; "isSignal": true; }; "clearSearchAriaLabel": { "alias": "clearSearchAriaLabel"; "required": false; "isSignal": true; }; "clearFilterLabel": { "alias": "clearFilterLabel"; "required": false; "isSignal": true; }; "previousPageAriaLabel": { "alias": "previousPageAriaLabel"; "required": false; "isSignal": true; }; "nextPageAriaLabel": { "alias": "nextPageAriaLabel"; "required": false; "isSignal": true; }; "pageSizeLabel": { "alias": "pageSizeLabel"; "required": false; "isSignal": true; }; "pageSizeAriaLabel": { "alias": "pageSizeAriaLabel"; "required": false; "isSignal": true; }; "paginationAriaLabel": { "alias": "paginationAriaLabel"; "required": false; "isSignal": true; }; "exportCsvTitle": { "alias": "exportCsvTitle"; "required": false; "isSignal": true; }; "exportJsonTitle": { "alias": "exportJsonTitle"; "required": false; "isSignal": true; }; "clearSelectionLabel": { "alias": "clearSelectionLabel"; "required": false; "isSignal": true; }; "selectionSummaryLabel": { "alias": "selectionSummaryLabel"; "required": false; "isSignal": true; }; "tableAriaLabel": { "alias": "tableAriaLabel"; "required": false; "isSignal": true; }; "selectAllAriaLabel": { "alias": "selectAllAriaLabel"; "required": false; "isSignal": true; }; "selectRowAriaLabel": { "alias": "selectRowAriaLabel"; "required": false; "isSignal": true; }; "expandRowAriaLabel": { "alias": "expandRowAriaLabel"; "required": false; "isSignal": true; }; "filterPlaceholder": { "alias": "filterPlaceholder"; "required": false; "isSignal": true; }; "filterAriaPrefix": { "alias": "filterAriaPrefix"; "required": false; "isSignal": true; }; "allFilterOptionLabel": { "alias": "allFilterOptionLabel"; "required": false; "isSignal": true; }; "ofLabel": { "alias": "ofLabel"; "required": false; "isSignal": true; }; "resultLabelSingular": { "alias": "resultLabelSingular"; "required": false; "isSignal": true; }; "resultLabelPlural": { "alias": "resultLabelPlural"; "required": false; "isSignal": true; }; "sortable": { "alias": "sortable"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "expandable": { "alias": "expandable"; "required": false; "isSignal": true; }; "expandMode": { "alias": "expandMode"; "required": false; "isSignal": true; }; "exportable": { "alias": "exportable"; "required": false; "isSignal": true; }; "exportFileName": { "alias": "exportFileName"; "required": false; "isSignal": true; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; "isSignal": true; }; "stickyHeader": { "alias": "stickyHeader"; "required": false; "isSignal": true; }; "virtualScroll": { "alias": "virtualScroll"; "required": false; "isSignal": true; }; "virtualScrollVisibleItems": { "alias": "virtualScrollVisibleItems"; "required": false; "isSignal": true; }; "resizableColumns": { "alias": "resizableColumns"; "required": false; "isSignal": true; }; "rowKey": { "alias": "rowKey"; "required": false; "isSignal": true; }; "bordered": { "alias": "bordered"; "required": false; "isSignal": true; }; "roundedBorders": { "alias": "roundedBorders"; "required": false; "isSignal": true; }; "stripedRows": { "alias": "stripedRows"; "required": false; "isSignal": true; }; "density": { "alias": "density"; "required": false; "isSignal": true; }; "showRowNumbers": { "alias": "showRowNumbers"; "required": false; "isSignal": true; }; "rowClass": { "alias": "rowClass"; "required": false; "isSignal": true; }; "footerRow": { "alias": "footerRow"; "required": false; "isSignal": true; }; "emptyStateTemplate": { "alias": "emptyStateTemplate"; "required": false; "isSignal": true; }; "serverSide": { "alias": "serverSide"; "required": false; "isSignal": true; }; "totalItems": { "alias": "totalItems"; "required": false; "isSignal": true; }; "multiSort": { "alias": "multiSort"; "required": false; "isSignal": true; }; "exportFormats": { "alias": "exportFormats"; "required": false; "isSignal": true; }; "exportColumns": { "alias": "exportColumns"; "required": false; "isSignal": true; }; "exportScope": { "alias": "exportScope"; "required": false; "isSignal": true; }; "selectionActions": { "alias": "selectionActions"; "required": false; "isSignal": true; }; "pageParam": { "alias": "pageParam"; "required": false; "isSignal": true; }; "searchParam": { "alias": "searchParam"; "required": false; "isSignal": true; }; "sortParam": { "alias": "sortParam"; "required": false; "isSignal": true; }; "sortDirParam": { "alias": "sortDirParam"; "required": false; "isSignal": true; }; "multiSortParam": { "alias": "multiSortParam"; "required": false; "isSignal": true; }; "useUrlState": { "alias": "useUrlState"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; "rowClick": "rowClick"; "rowDblClick": "rowDblClick"; "actionClick": "actionClick"; "selectionActionClick": "selectionActionClick"; "serverStateChange": "serverStateChange"; "searchChange": "searchChange"; "columnResize": "columnResize"; }, ["expandTemplate"], never, true, never>;
282
344
  }
283
345
 
284
346
  export { NeuTableComponent, NeuTableExpandDirective };
285
- export type { NeuTableAction, NeuTableActionEvent, NeuTableBadgeConfig, NeuTableBadgeVariant, NeuTableCellType, NeuTableColumn, NeuTableServerState, NeuTableSortEntry };
347
+ export type { NeuTableAction, NeuTableActionEvent, NeuTableBadgeConfig, NeuTableBadgeVariant, NeuTableCellType, NeuTableColumn, NeuTableSelectionAction, NeuTableSelectionActionEvent, NeuTableServerState, NeuTableSortEntry };
@@ -33,6 +33,7 @@ declare class NeuTabsComponent implements AfterViewInit, OnDestroy {
33
33
  private _dragStartX;
34
34
  private _dragStartScrollLeft;
35
35
  private _suppressNextClick;
36
+ private readonly _optimisticActiveTabId;
36
37
  readonly isDraggingNav: _angular_core.WritableSignal<boolean>;
37
38
  private _getUrlParamSignal;
38
39
  private _readUrlParam;
@@ -0,0 +1,55 @@
1
+ import * as _angular_core from '@angular/core';
2
+
3
+ type NeuTimelineGridItemVariant = 'default' | 'success' | 'warning' | 'danger' | 'info';
4
+ interface NeuTimelineGridColumn {
5
+ id: string;
6
+ label: string;
7
+ description?: string;
8
+ }
9
+ interface NeuTimelineGridItem {
10
+ id: string;
11
+ title: string;
12
+ start: string;
13
+ span?: number;
14
+ subtitle?: string;
15
+ meta?: string;
16
+ variant?: NeuTimelineGridItemVariant;
17
+ }
18
+ interface NeuTimelineGridRow {
19
+ id: string;
20
+ label: string;
21
+ description?: string;
22
+ items: NeuTimelineGridItem[];
23
+ }
24
+ interface NeuTimelineGridSlotSelection {
25
+ rowId: string;
26
+ columnId: string;
27
+ }
28
+ declare class NeuTimelineGridComponent {
29
+ readonly columns: _angular_core.InputSignal<NeuTimelineGridColumn[]>;
30
+ readonly rows: _angular_core.InputSignal<NeuTimelineGridRow[]>;
31
+ readonly compact: _angular_core.InputSignal<boolean>;
32
+ readonly stickyLabels: _angular_core.InputSignal<boolean>;
33
+ readonly minColumnWidth: _angular_core.InputSignal<string>;
34
+ readonly selectedItemId: _angular_core.InputSignal<string | null>;
35
+ readonly selectedSlot: _angular_core.InputSignal<NeuTimelineGridSlotSelection | null>;
36
+ readonly itemClick: _angular_core.OutputEmitterRef<NeuTimelineGridItem>;
37
+ readonly slotClick: _angular_core.OutputEmitterRef<NeuTimelineGridSlotSelection>;
38
+ readonly _columnIndexMap: _angular_core.Signal<Map<string, number>>;
39
+ readonly gridTemplateColumns: _angular_core.Signal<string>;
40
+ validItems(row: NeuTimelineGridRow): NeuTimelineGridItem[];
41
+ itemGridColumn(item: NeuTimelineGridItem): string;
42
+ slotGridColumn(columnId: string): string;
43
+ itemClass(item: NeuTimelineGridItem): string;
44
+ itemAriaLabel(row: NeuTimelineGridRow, item: NeuTimelineGridItem): string;
45
+ slotAriaLabel(row: NeuTimelineGridRow, column: NeuTimelineGridColumn): string;
46
+ slotKey(rowId: string, columnId: string): string;
47
+ isItemSelected(itemId: string): boolean;
48
+ isSlotSelected(rowId: string, columnId: string): boolean;
49
+ onSlotClick(rowId: string, columnId: string): void;
50
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NeuTimelineGridComponent, never>;
51
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NeuTimelineGridComponent, "neu-timeline-grid", never, { "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "compact": { "alias": "compact"; "required": false; "isSignal": true; }; "stickyLabels": { "alias": "stickyLabels"; "required": false; "isSignal": true; }; "minColumnWidth": { "alias": "minColumnWidth"; "required": false; "isSignal": true; }; "selectedItemId": { "alias": "selectedItemId"; "required": false; "isSignal": true; }; "selectedSlot": { "alias": "selectedSlot"; "required": false; "isSignal": true; }; }, { "itemClick": "itemClick"; "slotClick": "slotClick"; }, never, never, true, never>;
52
+ }
53
+
54
+ export { NeuTimelineGridComponent };
55
+ export type { NeuTimelineGridColumn, NeuTimelineGridItem, NeuTimelineGridItemVariant, NeuTimelineGridRow, NeuTimelineGridSlotSelection };
@@ -0,0 +1,72 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { NeuTableColumn } from '@neural-ui/core/table';
3
+
4
+ interface NeuTreeTableNode<T extends Record<string, unknown> = Record<string, unknown>> {
5
+ id: string;
6
+ label: string;
7
+ description?: string;
8
+ badge?: string;
9
+ children?: NeuTreeTableNode<T>[];
10
+ expanded?: boolean;
11
+ disabled?: boolean;
12
+ data?: T;
13
+ }
14
+ interface NeuTreeTableRow<T extends Record<string, unknown> = Record<string, unknown>> extends Record<string, unknown> {
15
+ id: string;
16
+ label: string;
17
+ description?: string;
18
+ badge?: string;
19
+ __treeLevel: number;
20
+ __treeHasChildren: boolean;
21
+ __treeExpanded: boolean;
22
+ __treeDisabled: boolean;
23
+ __treeParentId?: string;
24
+ __treeNode: NeuTreeTableNode<T>;
25
+ }
26
+ declare class NeuTreeTableComponent {
27
+ readonly nodes: _angular_core.InputSignal<NeuTreeTableNode<Record<string, unknown>>[]>;
28
+ readonly columns: _angular_core.InputSignal<NeuTableColumn<Record<string, unknown>>[]>;
29
+ readonly title: _angular_core.InputSignal<string>;
30
+ readonly treeColumnKey: _angular_core.InputSignal<string>;
31
+ readonly rowKey: _angular_core.InputSignal<string>;
32
+ readonly tableAriaLabel: _angular_core.InputSignal<string>;
33
+ readonly searchPlaceholder: _angular_core.InputSignal<string>;
34
+ readonly emptyMessage: _angular_core.InputSignal<string>;
35
+ readonly expandLabel: _angular_core.InputSignal<string>;
36
+ readonly collapseLabel: _angular_core.InputSignal<string>;
37
+ readonly indentSize: _angular_core.InputSignal<number>;
38
+ readonly searchable: _angular_core.InputSignal<boolean>;
39
+ readonly pagination: _angular_core.InputSignal<boolean>;
40
+ readonly selectable: _angular_core.InputSignal<boolean>;
41
+ readonly stickyHeader: _angular_core.InputSignal<boolean>;
42
+ readonly stripedRows: _angular_core.InputSignal<boolean>;
43
+ readonly bordered: _angular_core.InputSignal<boolean>;
44
+ readonly roundedBorders: _angular_core.InputSignal<boolean>;
45
+ readonly sortable: _angular_core.InputSignal<boolean>;
46
+ readonly showRowNumbers: _angular_core.InputSignal<boolean>;
47
+ readonly useUrlState: _angular_core.InputSignal<boolean>;
48
+ readonly density: _angular_core.InputSignal<"compact" | "normal" | "relaxed">;
49
+ readonly pageSizeOptions: _angular_core.InputSignal<number[]>;
50
+ readonly selectionChange: _angular_core.OutputEmitterRef<NeuTreeTableNode<Record<string, unknown>>[]>;
51
+ readonly nodeClick: _angular_core.OutputEmitterRef<NeuTreeTableNode<Record<string, unknown>>>;
52
+ readonly expansionChange: _angular_core.OutputEmitterRef<string[]>;
53
+ private readonly treeCellTpl;
54
+ private readonly expandedKeys;
55
+ readonly flatRows: _angular_core.Signal<Record<string, unknown>[]>;
56
+ readonly resolvedColumns: _angular_core.Signal<NeuTableColumn<Record<string, unknown>>[]>;
57
+ constructor();
58
+ toggleNode(node: NeuTreeTableNode, event?: Event): void;
59
+ onTableSelectionChange(rows: Record<string, unknown>[]): void;
60
+ onTableRowClick(row: Record<string, unknown>): void;
61
+ treeIndent(row: NeuTreeTableRow): number;
62
+ isTreeRowDisabled(row: NeuTreeTableRow): boolean;
63
+ treeToggleAriaLabel(row: NeuTreeTableRow): string;
64
+ private flattenNodes;
65
+ private collectExpandedKeys;
66
+ private asFlatRow;
67
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NeuTreeTableComponent, never>;
68
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NeuTreeTableComponent, "neu-tree-table", never, { "nodes": { "alias": "nodes"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "treeColumnKey": { "alias": "treeColumnKey"; "required": false; "isSignal": true; }; "rowKey": { "alias": "rowKey"; "required": false; "isSignal": true; }; "tableAriaLabel": { "alias": "tableAriaLabel"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "expandLabel": { "alias": "expandLabel"; "required": false; "isSignal": true; }; "collapseLabel": { "alias": "collapseLabel"; "required": false; "isSignal": true; }; "indentSize": { "alias": "indentSize"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "pagination": { "alias": "pagination"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "stickyHeader": { "alias": "stickyHeader"; "required": false; "isSignal": true; }; "stripedRows": { "alias": "stripedRows"; "required": false; "isSignal": true; }; "bordered": { "alias": "bordered"; "required": false; "isSignal": true; }; "roundedBorders": { "alias": "roundedBorders"; "required": false; "isSignal": true; }; "sortable": { "alias": "sortable"; "required": false; "isSignal": true; }; "showRowNumbers": { "alias": "showRowNumbers"; "required": false; "isSignal": true; }; "useUrlState": { "alias": "useUrlState"; "required": false; "isSignal": true; }; "density": { "alias": "density"; "required": false; "isSignal": true; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; "nodeClick": "nodeClick"; "expansionChange": "expansionChange"; }, never, never, true, never>;
69
+ }
70
+
71
+ export { NeuTreeTableComponent };
72
+ export type { NeuTreeTableNode, NeuTreeTableRow };
@@ -0,0 +1,52 @@
1
+ import * as _angular_core from '@angular/core';
2
+
3
+ interface NeuTreeNode<T = unknown> {
4
+ id: string;
5
+ label: string;
6
+ description?: string;
7
+ badge?: string;
8
+ children?: NeuTreeNode<T>[];
9
+ disabled?: boolean;
10
+ expanded?: boolean;
11
+ selectable?: boolean;
12
+ data?: T;
13
+ }
14
+ type NeuTreeSelectionMode = 'single' | 'multiple';
15
+ declare class NeuTreeComponent {
16
+ nodes: _angular_core.InputSignal<NeuTreeNode<unknown>[]>;
17
+ selectable: _angular_core.InputSignal<boolean>;
18
+ searchable: _angular_core.InputSignal<boolean>;
19
+ selectionMode: _angular_core.InputSignal<NeuTreeSelectionMode>;
20
+ indentSize: _angular_core.InputSignal<number>;
21
+ ariaLabel: _angular_core.InputSignal<string>;
22
+ searchPlaceholder: _angular_core.InputSignal<string>;
23
+ emptyLabel: _angular_core.InputSignal<string>;
24
+ expandLabel: _angular_core.InputSignal<string>;
25
+ collapseLabel: _angular_core.InputSignal<string>;
26
+ selectionChange: _angular_core.OutputEmitterRef<NeuTreeNode<unknown>[]>;
27
+ expansionChange: _angular_core.OutputEmitterRef<string[]>;
28
+ nodeClick: _angular_core.OutputEmitterRef<NeuTreeNode<unknown>>;
29
+ readonly searchQuery: _angular_core.WritableSignal<string>;
30
+ private readonly expandedKeys;
31
+ private readonly selectedKeys;
32
+ readonly visibleNodes: _angular_core.Signal<NeuTreeNode<unknown>[]>;
33
+ constructor();
34
+ hasChildren(node: NeuTreeNode): boolean;
35
+ canSelect(node: NeuTreeNode): boolean;
36
+ isExpanded(nodeId: string): boolean;
37
+ isRenderedExpanded(node: NeuTreeNode): boolean;
38
+ isSelected(nodeId: string): boolean;
39
+ onSearch(event: Event): void;
40
+ toggleNode(node: NeuTreeNode, event?: Event): void;
41
+ activateNode(node: NeuTreeNode): void;
42
+ onCheckboxChange(node: NeuTreeNode, event: Event): void;
43
+ private updateSelection;
44
+ private collectExpandedKeys;
45
+ private collectSelectedNodes;
46
+ private filterNodes;
47
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NeuTreeComponent, never>;
48
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NeuTreeComponent, "neu-tree", never, { "nodes": { "alias": "nodes"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "indentSize": { "alias": "indentSize"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "emptyLabel": { "alias": "emptyLabel"; "required": false; "isSignal": true; }; "expandLabel": { "alias": "expandLabel"; "required": false; "isSignal": true; }; "collapseLabel": { "alias": "collapseLabel"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; "expansionChange": "expansionChange"; "nodeClick": "nodeClick"; }, never, never, true, never>;
49
+ }
50
+
51
+ export { NeuTreeComponent };
52
+ export type { NeuTreeNode, NeuTreeSelectionMode };
@@ -0,0 +1,98 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { ElementRef } from '@angular/core';
3
+ import { ControlValueAccessor } from '@angular/forms';
4
+
5
+ type NeuUploaderSize = 'sm' | 'md' | 'lg';
6
+ type NeuUploaderErrorCode = 'accept' | 'max-file-size' | 'max-files' | 'duplicate' | 'empty-selection';
7
+ interface NeuUploaderError {
8
+ code: NeuUploaderErrorCode;
9
+ message: string;
10
+ file?: File;
11
+ }
12
+ interface NeuUploaderFileItem {
13
+ id: string;
14
+ file: File;
15
+ name: string;
16
+ size: number;
17
+ type: string;
18
+ progress: number | null;
19
+ }
20
+
21
+ declare class NeuUploaderComponent implements ControlValueAccessor {
22
+ readonly fileInput: _angular_core.Signal<ElementRef<HTMLInputElement>>;
23
+ label: _angular_core.InputSignal<string>;
24
+ hint: _angular_core.InputSignal<string>;
25
+ errorMessage: _angular_core.InputSignal<string>;
26
+ placeholder: _angular_core.InputSignal<string>;
27
+ pickerDescription: _angular_core.InputSignal<string>;
28
+ dropzoneLabel: _angular_core.InputSignal<string>;
29
+ chooseLabel: _angular_core.InputSignal<string>;
30
+ clearLabel: _angular_core.InputSignal<string>;
31
+ progressLabel: _angular_core.InputSignal<string>;
32
+ showPickerText: _angular_core.InputSignal<boolean>;
33
+ showProgress: _angular_core.InputSignal<boolean>;
34
+ listAriaLabel: _angular_core.InputSignal<string>;
35
+ removeAriaLabel: _angular_core.InputSignal<string>;
36
+ acceptedTypesLabel: _angular_core.InputSignal<string>;
37
+ maxFileSizeTextLabel: _angular_core.InputSignal<string>;
38
+ fileCountSingularLabel: _angular_core.InputSignal<string>;
39
+ fileCountPluralLabel: _angular_core.InputSignal<string>;
40
+ emptySelectionMessage: _angular_core.InputSignal<string>;
41
+ invalidTypeMessage: _angular_core.InputSignal<string>;
42
+ maxFileSizeMessage: _angular_core.InputSignal<string>;
43
+ duplicateFileMessage: _angular_core.InputSignal<string>;
44
+ maxFilesMessage: _angular_core.InputSignal<string>;
45
+ accept: _angular_core.InputSignal<string>;
46
+ multiple: _angular_core.InputSignal<boolean>;
47
+ dropzone: _angular_core.InputSignal<boolean>;
48
+ disabled: _angular_core.InputSignal<boolean>;
49
+ size: _angular_core.InputSignal<NeuUploaderSize>;
50
+ maxFiles: _angular_core.InputSignal<number | null>;
51
+ maxFileSize: _angular_core.InputSignal<number | null>;
52
+ progress: _angular_core.InputSignal<number | null>;
53
+ readonly filesSelected: _angular_core.OutputEmitterRef<File[]>;
54
+ readonly fileRemoved: _angular_core.OutputEmitterRef<File>;
55
+ readonly filesRejected: _angular_core.OutputEmitterRef<NeuUploaderError[]>;
56
+ readonly cleared: _angular_core.OutputEmitterRef<void>;
57
+ readonly inputId: _angular_core.InputSignal<string>;
58
+ protected readonly isDragOver: _angular_core.WritableSignal<boolean>;
59
+ protected readonly internalErrors: _angular_core.WritableSignal<NeuUploaderError[]>;
60
+ protected readonly fileItems: _angular_core.WritableSignal<NeuUploaderFileItem[]>;
61
+ private readonly cvaDisabled;
62
+ private onChange;
63
+ private onTouched;
64
+ readonly isDisabledFinal: _angular_core.Signal<boolean>;
65
+ readonly hasError: _angular_core.Signal<boolean>;
66
+ readonly shouldShowProgress: _angular_core.Signal<boolean>;
67
+ readonly pickerButtonAriaLabel: _angular_core.Signal<string | null>;
68
+ readonly describedBy: _angular_core.Signal<string | null>;
69
+ readonly headlineText: _angular_core.Signal<string>;
70
+ readonly descriptionText: _angular_core.Signal<string>;
71
+ readonly summaryText: _angular_core.Signal<string>;
72
+ readonly displayErrorMessage: _angular_core.Signal<string>;
73
+ writeValue(value: File[] | File | null | undefined): void;
74
+ registerOnChange(fn: (value: File[]) => void): void;
75
+ registerOnTouched(fn: () => void): void;
76
+ setDisabledState(isDisabled: boolean): void;
77
+ openFilePicker(): void;
78
+ onDropzoneKey(event: KeyboardEvent): void;
79
+ onNativeInputChange(event: Event): void;
80
+ onDragOver(event: DragEvent): void;
81
+ onDragLeave(event: DragEvent): void;
82
+ onDrop(event: DragEvent): void;
83
+ removeFile(id: string, event?: Event): void;
84
+ clearFiles(event?: Event): void;
85
+ formatBytes(bytes: number): string;
86
+ private consumeFiles;
87
+ private emitValue;
88
+ private toItem;
89
+ private fileSignature;
90
+ private reportErrors;
91
+ private interpolate;
92
+ private isAcceptedType;
93
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NeuUploaderComponent, never>;
94
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NeuUploaderComponent, "neu-uploader", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "pickerDescription": { "alias": "pickerDescription"; "required": false; "isSignal": true; }; "dropzoneLabel": { "alias": "dropzoneLabel"; "required": false; "isSignal": true; }; "chooseLabel": { "alias": "chooseLabel"; "required": false; "isSignal": true; }; "clearLabel": { "alias": "clearLabel"; "required": false; "isSignal": true; }; "progressLabel": { "alias": "progressLabel"; "required": false; "isSignal": true; }; "showPickerText": { "alias": "showPickerText"; "required": false; "isSignal": true; }; "showProgress": { "alias": "showProgress"; "required": false; "isSignal": true; }; "listAriaLabel": { "alias": "listAriaLabel"; "required": false; "isSignal": true; }; "removeAriaLabel": { "alias": "removeAriaLabel"; "required": false; "isSignal": true; }; "acceptedTypesLabel": { "alias": "acceptedTypesLabel"; "required": false; "isSignal": true; }; "maxFileSizeTextLabel": { "alias": "maxFileSizeTextLabel"; "required": false; "isSignal": true; }; "fileCountSingularLabel": { "alias": "fileCountSingularLabel"; "required": false; "isSignal": true; }; "fileCountPluralLabel": { "alias": "fileCountPluralLabel"; "required": false; "isSignal": true; }; "emptySelectionMessage": { "alias": "emptySelectionMessage"; "required": false; "isSignal": true; }; "invalidTypeMessage": { "alias": "invalidTypeMessage"; "required": false; "isSignal": true; }; "maxFileSizeMessage": { "alias": "maxFileSizeMessage"; "required": false; "isSignal": true; }; "duplicateFileMessage": { "alias": "duplicateFileMessage"; "required": false; "isSignal": true; }; "maxFilesMessage": { "alias": "maxFilesMessage"; "required": false; "isSignal": true; }; "accept": { "alias": "accept"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "dropzone": { "alias": "dropzone"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "maxFiles": { "alias": "maxFiles"; "required": false; "isSignal": true; }; "maxFileSize": { "alias": "maxFileSize"; "required": false; "isSignal": true; }; "progress": { "alias": "progress"; "required": false; "isSignal": true; }; "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; }, { "filesSelected": "filesSelected"; "fileRemoved": "fileRemoved"; "filesRejected": "filesRejected"; "cleared": "cleared"; }, never, never, true, never>;
95
+ }
96
+
97
+ export { NeuUploaderComponent };
98
+ export type { NeuUploaderError, NeuUploaderErrorCode, NeuUploaderFileItem, NeuUploaderSize };
@@ -17,6 +17,11 @@ import { Params, Router } from '@angular/router';
17
17
  declare class NeuUrlStateService {
18
18
  private readonly injector;
19
19
  private readonly router;
20
+ private _pendingParams;
21
+ private _pendingReplaceUrl;
22
+ private _batchScheduled;
23
+ private readonly _pendingParamsState;
24
+ private readonly _routerParams;
20
25
  /**
21
26
  * Signal con el mapa completo de queryParams actual.
22
27
  * Se actualiza automáticamente en cada NavigationEnd.
@@ -40,6 +45,10 @@ declare class NeuUrlStateService {
40
45
  * Pasar false para acciones que el usuario debe poder deshacer con Atrás.
41
46
  */
42
47
  setParam(key: string, value: string | null, replaceUrl?: boolean): void;
48
+ private _schedulePendingNavigation;
49
+ private _consumePendingNavigation;
50
+ private _resetPendingNavigation;
51
+ private _finalizePendingNavigation;
43
52
  /**
44
53
  * Actualiza múltiples queryParams en una sola navegación.
45
54
  *
@@ -1,6 +1,22 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { AfterViewInit, TemplateRef } from '@angular/core';
3
3
 
4
+ declare class NeuVirtualListRowComponent {
5
+ readonly item: _angular_core.InputSignal<unknown>;
6
+ readonly index: _angular_core.InputSignal<number>;
7
+ readonly itemSize: _angular_core.InputSignal<number>;
8
+ readonly label: _angular_core.InputSignal<string>;
9
+ readonly template: _angular_core.InputSignal<TemplateRef<{
10
+ $implicit: unknown;
11
+ index: number;
12
+ }> | null>;
13
+ readonly context: _angular_core.Signal<{
14
+ $implicit: unknown;
15
+ index: number;
16
+ }>;
17
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NeuVirtualListRowComponent, never>;
18
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NeuVirtualListRowComponent, "neu-virtual-list-row", never, { "item": { "alias": "item"; "required": true; "isSignal": true; }; "index": { "alias": "index"; "required": true; "isSignal": true; }; "itemSize": { "alias": "itemSize"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "template": { "alias": "template"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
19
+ }
4
20
  /**
5
21
  * NeuralUI VirtualList
6
22
  *
@@ -57,4 +73,4 @@ declare class NeuVirtualListComponent<T = unknown> implements AfterViewInit {
57
73
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<NeuVirtualListComponent<any>, "neu-virtual-list", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "itemSize": { "alias": "itemSize"; "required": false; "isSignal": true; }; "visibleRows": { "alias": "visibleRows"; "required": false; "isSignal": true; }; "emptyLabel": { "alias": "emptyLabel"; "required": false; "isSignal": true; }; "trackBy": { "alias": "trackBy"; "required": false; "isSignal": true; }; }, { "itemClick": "itemClick"; }, ["itemTemplate"], never, true, never>;
58
74
  }
59
75
 
60
- export { NeuVirtualListComponent };
76
+ export { NeuVirtualListComponent, NeuVirtualListRowComponent };
@@ -0,0 +1,4 @@
1
+ {
2
+ "module": "../fesm2022/neural-ui-core-uploader.mjs",
3
+ "typings": "../types/neural-ui-core-uploader.d.ts"
4
+ }