@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.
- package/README.md +14 -7
- package/calendar/package.json +4 -0
- package/fesm2022/neural-ui-core-accordion.mjs +8 -6
- package/fesm2022/neural-ui-core-accordion.mjs.map +1 -1
- package/fesm2022/neural-ui-core-autocomplete.mjs +121 -29
- package/fesm2022/neural-ui-core-autocomplete.mjs.map +1 -1
- package/fesm2022/neural-ui-core-badge.mjs +2 -2
- package/fesm2022/neural-ui-core-badge.mjs.map +1 -1
- package/fesm2022/neural-ui-core-block-ui.mjs +2 -2
- package/fesm2022/neural-ui-core-button.mjs +2 -2
- package/fesm2022/neural-ui-core-button.mjs.map +1 -1
- package/fesm2022/neural-ui-core-calendar.mjs +551 -0
- package/fesm2022/neural-ui-core-calendar.mjs.map +1 -0
- package/fesm2022/neural-ui-core-chip.mjs +2 -2
- package/fesm2022/neural-ui-core-chip.mjs.map +1 -1
- package/fesm2022/neural-ui-core-color-picker.mjs +3 -9
- package/fesm2022/neural-ui-core-color-picker.mjs.map +1 -1
- package/fesm2022/neural-ui-core-confirm-dialog.mjs +2 -2
- package/fesm2022/neural-ui-core-confirm-dialog.mjs.map +1 -1
- package/fesm2022/neural-ui-core-dashboard-grid.mjs +2 -2
- package/fesm2022/neural-ui-core-dashboard-grid.mjs.map +1 -1
- package/fesm2022/neural-ui-core-date-input.mjs +2 -2
- package/fesm2022/neural-ui-core-date-input.mjs.map +1 -1
- package/fesm2022/neural-ui-core-filter-bar.mjs +2 -2
- package/fesm2022/neural-ui-core-filter-bar.mjs.map +1 -1
- package/fesm2022/neural-ui-core-image-gallery.mjs +224 -0
- package/fesm2022/neural-ui-core-image-gallery.mjs.map +1 -0
- package/fesm2022/neural-ui-core-input.mjs +2 -2
- package/fesm2022/neural-ui-core-kanban.mjs +270 -0
- package/fesm2022/neural-ui-core-kanban.mjs.map +1 -0
- package/fesm2022/neural-ui-core-meter-group.mjs +2 -2
- package/fesm2022/neural-ui-core-modal.mjs +81 -31
- package/fesm2022/neural-ui-core-modal.mjs.map +1 -1
- package/fesm2022/neural-ui-core-multiselect.mjs +269 -99
- package/fesm2022/neural-ui-core-multiselect.mjs.map +1 -1
- package/fesm2022/neural-ui-core-nav.mjs +4 -6
- package/fesm2022/neural-ui-core-nav.mjs.map +1 -1
- package/fesm2022/neural-ui-core-number-input.mjs +2 -2
- package/fesm2022/neural-ui-core-pagination.mjs +2 -2
- package/fesm2022/neural-ui-core-pagination.mjs.map +1 -1
- package/fesm2022/neural-ui-core-progress-bar.mjs +2 -2
- package/fesm2022/neural-ui-core-scheduler-gantt.mjs +289 -0
- package/fesm2022/neural-ui-core-scheduler-gantt.mjs.map +1 -0
- package/fesm2022/neural-ui-core-select.mjs +276 -101
- package/fesm2022/neural-ui-core-select.mjs.map +1 -1
- package/fesm2022/neural-ui-core-sidebar.mjs +3 -2
- package/fesm2022/neural-ui-core-sidebar.mjs.map +1 -1
- package/fesm2022/neural-ui-core-slider.mjs +2 -2
- package/fesm2022/neural-ui-core-slider.mjs.map +1 -1
- package/fesm2022/neural-ui-core-split-button.mjs +2 -2
- package/fesm2022/neural-ui-core-split-button.mjs.map +1 -1
- package/fesm2022/neural-ui-core-stepper.mjs +2 -2
- package/fesm2022/neural-ui-core-stepper.mjs.map +1 -1
- package/fesm2022/neural-ui-core-table.mjs +435 -34
- package/fesm2022/neural-ui-core-table.mjs.map +1 -1
- package/fesm2022/neural-ui-core-tabs.mjs +11 -4
- package/fesm2022/neural-ui-core-tabs.mjs.map +1 -1
- package/fesm2022/neural-ui-core-textarea.mjs +2 -2
- package/fesm2022/neural-ui-core-timeline-grid.mjs +215 -0
- package/fesm2022/neural-ui-core-timeline-grid.mjs.map +1 -0
- package/fesm2022/neural-ui-core-toggle-button-group.mjs +2 -2
- package/fesm2022/neural-ui-core-toggle-button-group.mjs.map +1 -1
- package/fesm2022/neural-ui-core-toolbar.mjs +2 -2
- package/fesm2022/neural-ui-core-toolbar.mjs.map +1 -1
- package/fesm2022/neural-ui-core-tree-table.mjs +262 -0
- package/fesm2022/neural-ui-core-tree-table.mjs.map +1 -0
- package/fesm2022/neural-ui-core-tree.mjs +413 -0
- package/fesm2022/neural-ui-core-tree.mjs.map +1 -0
- package/fesm2022/neural-ui-core-uploader.mjs +624 -0
- package/fesm2022/neural-ui-core-uploader.mjs.map +1 -0
- package/fesm2022/neural-ui-core-url-state.mjs +90 -10
- package/fesm2022/neural-ui-core-url-state.mjs.map +1 -1
- package/fesm2022/neural-ui-core-virtual-list.mjs +53 -23
- package/fesm2022/neural-ui-core-virtual-list.mjs.map +1 -1
- package/fesm2022/neural-ui-core.mjs +3 -1
- package/fesm2022/neural-ui-core.mjs.map +1 -1
- package/image-gallery/package.json +4 -0
- package/kanban/package.json +4 -0
- package/package.json +34 -2
- package/scheduler-gantt/package.json +4 -0
- package/styles/_tokens.scss +13 -4
- package/timeline-grid/package.json +4 -0
- package/tree/package.json +4 -0
- package/tree-table/package.json +4 -0
- package/types/neural-ui-core-autocomplete.d.ts +10 -1
- package/types/neural-ui-core-calendar.d.ts +79 -0
- package/types/neural-ui-core-color-picker.d.ts +0 -1
- package/types/neural-ui-core-image-gallery.d.ts +26 -0
- package/types/neural-ui-core-kanban.d.ts +52 -0
- package/types/neural-ui-core-modal.d.ts +22 -16
- package/types/neural-ui-core-multiselect.d.ts +13 -1
- package/types/neural-ui-core-scheduler-gantt.d.ts +68 -0
- package/types/neural-ui-core-select.d.ts +14 -1
- package/types/neural-ui-core-sidebar.d.ts +1 -0
- package/types/neural-ui-core-table.d.ts +66 -4
- package/types/neural-ui-core-tabs.d.ts +1 -0
- package/types/neural-ui-core-timeline-grid.d.ts +55 -0
- package/types/neural-ui-core-tree-table.d.ts +72 -0
- package/types/neural-ui-core-tree.d.ts +52 -0
- package/types/neural-ui-core-uploader.d.ts +98 -0
- package/types/neural-ui-core-url-state.d.ts +9 -0
- package/types/neural-ui-core-virtual-list.d.ts +17 -1
- package/uploader/package.json +4 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, TemplateRef, Directive, DestroyRef, PLATFORM_ID, contentChild, input, output, signal, computed, effect, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
|
|
2
|
+
import { inject, TemplateRef, Directive, DestroyRef, PLATFORM_ID, viewChild, contentChild, input, output, signal, computed, effect, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
|
|
3
3
|
import { isPlatformBrowser, NgTemplateOutlet } from '@angular/common';
|
|
4
4
|
import * as i1 from '@angular/forms';
|
|
5
5
|
import { FormControl, ReactiveFormsModule } from '@angular/forms';
|
|
@@ -61,11 +61,15 @@ 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 */ []));
|
|
65
|
+
_virtualOverscan = 3;
|
|
64
66
|
expandTemplate = contentChild(NeuTableExpandDirective, ...(ngDevMode ? [{ debugName: "expandTemplate" }] : /* istanbul ignore next */ []));
|
|
65
67
|
// ── Inputs de datos ─────────────────────────────────────────────────
|
|
66
68
|
columns = input([], ...(ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []));
|
|
67
69
|
data = input([], ...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
|
|
68
70
|
pageSize = input(10, ...(ngDevMode ? [{ debugName: "pageSize" }] : /* istanbul ignore next */ []));
|
|
71
|
+
/** Controla si la paginación está activa. Si es false, se muestran todos los datos y se ocultan los controles de paginación y pageSize. */
|
|
72
|
+
pagination = input(true, ...(ngDevMode ? [{ debugName: "pagination" }] : /* istanbul ignore next */ []));
|
|
69
73
|
loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
|
|
70
74
|
title = input('', ...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
|
|
71
75
|
emptyMessage = input('No results found', ...(ngDevMode ? [{ debugName: "emptyMessage" }] : /* istanbul ignore next */ []));
|
|
@@ -100,11 +104,18 @@ class NeuTableComponent {
|
|
|
100
104
|
sortable = input(false, ...(ngDevMode ? [{ debugName: "sortable" }] : /* istanbul ignore next */ []));
|
|
101
105
|
selectable = input(false, ...(ngDevMode ? [{ debugName: "selectable" }] : /* istanbul ignore next */ []));
|
|
102
106
|
expandable = input(false, ...(ngDevMode ? [{ debugName: "expandable" }] : /* istanbul ignore next */ []));
|
|
107
|
+
expandMode = input('multiple', ...(ngDevMode ? [{ debugName: "expandMode" }] : /* istanbul ignore next */ []));
|
|
103
108
|
exportable = input(false, ...(ngDevMode ? [{ debugName: "exportable" }] : /* istanbul ignore next */ []));
|
|
104
109
|
exportFileName = input('export', ...(ngDevMode ? [{ debugName: "exportFileName" }] : /* istanbul ignore next */ []));
|
|
105
110
|
pageSizeOptions = input([], ...(ngDevMode ? [{ debugName: "pageSizeOptions" }] : /* istanbul ignore next */ []));
|
|
106
111
|
stickyHeader = input(false, ...(ngDevMode ? [{ debugName: "stickyHeader" }] : /* istanbul ignore next */ []));
|
|
112
|
+
virtualScroll = input(false, ...(ngDevMode ? [{ debugName: "virtualScroll" }] : /* istanbul ignore next */ []));
|
|
113
|
+
virtualScrollVisibleItems = input(8, ...(ngDevMode ? [{ debugName: "virtualScrollVisibleItems" }] : /* istanbul ignore next */ []));
|
|
114
|
+
resizableColumns = input(false, ...(ngDevMode ? [{ debugName: "resizableColumns" }] : /* istanbul ignore next */ []));
|
|
107
115
|
rowKey = input('id', ...(ngDevMode ? [{ debugName: "rowKey" }] : /* istanbul ignore next */ []));
|
|
116
|
+
bordered = input(true, ...(ngDevMode ? [{ debugName: "bordered" }] : /* istanbul ignore next */ []));
|
|
117
|
+
roundedBorders = input(true, ...(ngDevMode ? [{ debugName: "roundedBorders" }] : /* istanbul ignore next */ []));
|
|
118
|
+
stripedRows = input(false, ...(ngDevMode ? [{ debugName: "stripedRows" }] : /* istanbul ignore next */ []));
|
|
108
119
|
// ── Inputs nuevos v1.3.0 ──────────────────────────────────────────────
|
|
109
120
|
density = input('normal', ...(ngDevMode ? [{ debugName: "density" }] : /* istanbul ignore next */ []));
|
|
110
121
|
showRowNumbers = input(false, ...(ngDevMode ? [{ debugName: "showRowNumbers" }] : /* istanbul ignore next */ []));
|
|
@@ -116,6 +127,8 @@ class NeuTableComponent {
|
|
|
116
127
|
multiSort = input(false, ...(ngDevMode ? [{ debugName: "multiSort" }] : /* istanbul ignore next */ []));
|
|
117
128
|
exportFormats = input(['csv'], ...(ngDevMode ? [{ debugName: "exportFormats" }] : /* istanbul ignore next */ []));
|
|
118
129
|
exportColumns = input([], ...(ngDevMode ? [{ debugName: "exportColumns" }] : /* istanbul ignore next */ []));
|
|
130
|
+
exportScope = input('auto', ...(ngDevMode ? [{ debugName: "exportScope" }] : /* istanbul ignore next */ []));
|
|
131
|
+
selectionActions = input([], ...(ngDevMode ? [{ debugName: "selectionActions" }] : /* istanbul ignore next */ []));
|
|
119
132
|
// ── URL params ────────────────────────────────────────────────────────
|
|
120
133
|
pageParam = input('page', ...(ngDevMode ? [{ debugName: "pageParam" }] : /* istanbul ignore next */ []));
|
|
121
134
|
searchParam = input('q', ...(ngDevMode ? [{ debugName: "searchParam" }] : /* istanbul ignore next */ []));
|
|
@@ -138,8 +151,10 @@ class NeuTableComponent {
|
|
|
138
151
|
rowClick = output();
|
|
139
152
|
rowDblClick = output();
|
|
140
153
|
actionClick = output();
|
|
154
|
+
selectionActionClick = output();
|
|
141
155
|
serverStateChange = output();
|
|
142
156
|
searchChange = output();
|
|
157
|
+
columnResize = output();
|
|
143
158
|
// ── Estado interno (usado cuando useUrlState = false) ─────────────────
|
|
144
159
|
// Internal state signals (used when useUrlState = false)
|
|
145
160
|
_internalPage = signal(1, ...(ngDevMode ? [{ debugName: "_internalPage" }] : /* istanbul ignore next */ []));
|
|
@@ -147,6 +162,8 @@ class NeuTableComponent {
|
|
|
147
162
|
_internalSortKey = signal('', ...(ngDevMode ? [{ debugName: "_internalSortKey" }] : /* istanbul ignore next */ []));
|
|
148
163
|
_internalSortDir = signal('asc', ...(ngDevMode ? [{ debugName: "_internalSortDir" }] : /* istanbul ignore next */ []));
|
|
149
164
|
_internalMultiSort = signal('', ...(ngDevMode ? [{ debugName: "_internalMultiSort" }] : /* istanbul ignore next */ []));
|
|
165
|
+
_columnWidths = signal({}, ...(ngDevMode ? [{ debugName: "_columnWidths" }] : /* istanbul ignore next */ []));
|
|
166
|
+
_resizeCleanup = null;
|
|
150
167
|
// ── URL State ─────────────────────────────────────────────────────────
|
|
151
168
|
_urlParamSignals = new Map();
|
|
152
169
|
_getUrlParamSignal(key) {
|
|
@@ -221,7 +238,9 @@ class NeuTableComponent {
|
|
|
221
238
|
];
|
|
222
239
|
}
|
|
223
240
|
_pageSizeOptions = computed(() => this.pageSizeOptions().map((size) => ({ label: String(size), value: String(size) })), ...(ngDevMode ? [{ debugName: "_pageSizeOptions" }] : /* istanbul ignore next */ []));
|
|
241
|
+
_virtualScrollTop = signal(0, ...(ngDevMode ? [{ debugName: "_virtualScrollTop" }] : /* istanbul ignore next */ []));
|
|
224
242
|
constructor() {
|
|
243
|
+
this._destroyRef.onDestroy(() => this._stopColumnResize());
|
|
225
244
|
this._pageSizeControl.valueChanges
|
|
226
245
|
.pipe(takeUntilDestroyed(this._destroyRef))
|
|
227
246
|
.subscribe((value) => this.onPageSizeChange(value));
|
|
@@ -243,6 +262,20 @@ class NeuTableComponent {
|
|
|
243
262
|
}
|
|
244
263
|
}
|
|
245
264
|
});
|
|
265
|
+
effect(() => {
|
|
266
|
+
if (!this.virtualScroll()) {
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
this.currentPage();
|
|
270
|
+
this.searchQuery();
|
|
271
|
+
this.sortKey();
|
|
272
|
+
this.sortDir();
|
|
273
|
+
this._sortEntries();
|
|
274
|
+
this._columnFilters();
|
|
275
|
+
this.effectivePageSize();
|
|
276
|
+
this.paginatedData().length;
|
|
277
|
+
this.resetVirtualScrollPosition();
|
|
278
|
+
});
|
|
246
279
|
}
|
|
247
280
|
_confirmPending = signal(null, ...(ngDevMode ? [{ debugName: "_confirmPending" }] : /* istanbul ignore next */ []));
|
|
248
281
|
// ── Pipeline de datos ─────────────────────────────────────────────────
|
|
@@ -308,20 +341,74 @@ class NeuTableComponent {
|
|
|
308
341
|
});
|
|
309
342
|
}, ...(ngDevMode ? [{ debugName: "sortedData" }] : /* istanbul ignore next */ []));
|
|
310
343
|
_dynamicPageSize = signal(null, ...(ngDevMode ? [{ debugName: "_dynamicPageSize" }] : /* istanbul ignore next */ []));
|
|
311
|
-
effectivePageSize = computed(() =>
|
|
344
|
+
effectivePageSize = computed(() => {
|
|
345
|
+
if (!this.pagination())
|
|
346
|
+
return this.filteredData().length || 1;
|
|
347
|
+
return this._dynamicPageSize() ?? this.pageSize();
|
|
348
|
+
}, ...(ngDevMode ? [{ debugName: "effectivePageSize" }] : /* istanbul ignore next */ []));
|
|
312
349
|
totalPages = computed(() => {
|
|
350
|
+
if (!this.pagination())
|
|
351
|
+
return 1;
|
|
313
352
|
const total = this.serverSide() && this.totalItems() != null
|
|
314
353
|
? this.totalItems()
|
|
315
354
|
: this.filteredData().length;
|
|
316
355
|
return Math.max(1, Math.ceil(total / this.effectivePageSize()));
|
|
317
356
|
}, ...(ngDevMode ? [{ debugName: "totalPages" }] : /* istanbul ignore next */ []));
|
|
318
357
|
paginatedData = computed(() => {
|
|
358
|
+
if (!this.pagination())
|
|
359
|
+
return this.sortedData();
|
|
319
360
|
if (this.serverSide())
|
|
320
361
|
return this._rows();
|
|
321
362
|
const page = Math.min(this.currentPage(), this.totalPages());
|
|
322
363
|
const size = this.effectivePageSize();
|
|
323
364
|
return this.sortedData().slice((page - 1) * size, page * size);
|
|
324
365
|
}, ...(ngDevMode ? [{ debugName: "paginatedData" }] : /* istanbul ignore next */ []));
|
|
366
|
+
_virtualRowHeight = computed(() => {
|
|
367
|
+
switch (this.density()) {
|
|
368
|
+
case 'compact':
|
|
369
|
+
return 34;
|
|
370
|
+
case 'relaxed':
|
|
371
|
+
return 64;
|
|
372
|
+
default:
|
|
373
|
+
return 48;
|
|
374
|
+
}
|
|
375
|
+
}, ...(ngDevMode ? [{ debugName: "_virtualRowHeight" }] : /* istanbul ignore next */ []));
|
|
376
|
+
_virtualHeaderHeight = computed(() => 44 + (this._hasFilterableCol() ? 52 : 0), ...(ngDevMode ? [{ debugName: "_virtualHeaderHeight" }] : /* istanbul ignore next */ []));
|
|
377
|
+
_virtualScrollActive = computed(() => this.virtualScroll() && this.paginatedData().length > this.virtualScrollVisibleItems(), ...(ngDevMode ? [{ debugName: "_virtualScrollActive" }] : /* istanbul ignore next */ []));
|
|
378
|
+
virtualContainerMaxHeight = computed(() => `${this._virtualHeaderHeight() + this.virtualScrollVisibleItems() * this._virtualRowHeight()}px`, ...(ngDevMode ? [{ debugName: "virtualContainerMaxHeight" }] : /* istanbul ignore next */ []));
|
|
379
|
+
_virtualStartIndex = computed(() => {
|
|
380
|
+
if (!this._virtualScrollActive()) {
|
|
381
|
+
return 0;
|
|
382
|
+
}
|
|
383
|
+
const bodyScrollTop = Math.max(0, this._virtualScrollTop() - this._virtualHeaderHeight());
|
|
384
|
+
const startIndex = Math.floor(bodyScrollTop / this._virtualRowHeight());
|
|
385
|
+
return Math.max(0, startIndex - this._virtualOverscan);
|
|
386
|
+
}, ...(ngDevMode ? [{ debugName: "_virtualStartIndex" }] : /* istanbul ignore next */ []));
|
|
387
|
+
_virtualEndIndex = computed(() => {
|
|
388
|
+
if (!this._virtualScrollActive()) {
|
|
389
|
+
return this.paginatedData().length;
|
|
390
|
+
}
|
|
391
|
+
return Math.min(this.paginatedData().length, this._virtualStartIndex() + this.virtualScrollVisibleItems() + this._virtualOverscan * 2);
|
|
392
|
+
}, ...(ngDevMode ? [{ debugName: "_virtualEndIndex" }] : /* istanbul ignore next */ []));
|
|
393
|
+
visiblePageRows = computed(() => {
|
|
394
|
+
const rows = this.paginatedData();
|
|
395
|
+
if (!this._virtualScrollActive()) {
|
|
396
|
+
return rows;
|
|
397
|
+
}
|
|
398
|
+
return rows.slice(this._virtualStartIndex(), this._virtualEndIndex());
|
|
399
|
+
}, ...(ngDevMode ? [{ debugName: "visiblePageRows" }] : /* istanbul ignore next */ []));
|
|
400
|
+
_virtualTopSpacerHeight = computed(() => {
|
|
401
|
+
if (!this._virtualScrollActive()) {
|
|
402
|
+
return 0;
|
|
403
|
+
}
|
|
404
|
+
return this._virtualStartIndex() * this._virtualRowHeight();
|
|
405
|
+
}, ...(ngDevMode ? [{ debugName: "_virtualTopSpacerHeight" }] : /* istanbul ignore next */ []));
|
|
406
|
+
_virtualBottomSpacerHeight = computed(() => {
|
|
407
|
+
if (!this._virtualScrollActive()) {
|
|
408
|
+
return 0;
|
|
409
|
+
}
|
|
410
|
+
return Math.max(0, (this.paginatedData().length - this._virtualEndIndex()) * this._virtualRowHeight());
|
|
411
|
+
}, ...(ngDevMode ? [{ debugName: "_virtualBottomSpacerHeight" }] : /* istanbul ignore next */ []));
|
|
325
412
|
pageNumbers = computed(() => {
|
|
326
413
|
const total = this.totalPages();
|
|
327
414
|
const current = this.currentPage();
|
|
@@ -336,9 +423,9 @@ class NeuTableComponent {
|
|
|
336
423
|
: this.filteredData().length;
|
|
337
424
|
const page = Math.min(this.currentPage(), this.totalPages());
|
|
338
425
|
const size = this.effectivePageSize();
|
|
339
|
-
const from = Math.min((page - 1) * size + 1, total);
|
|
340
|
-
const to = Math.min(page * size, total);
|
|
341
|
-
return `${from}
|
|
426
|
+
const from = total === 0 ? 0 : Math.min((page - 1) * size + 1, total);
|
|
427
|
+
const to = total === 0 ? 0 : Math.min(page * size, total);
|
|
428
|
+
return `${from}-${to} ${this.ofLabel()} ${total} ${total === 1 ? this.resultLabelSingular() : this.resultLabelPlural()}`;
|
|
342
429
|
}, ...(ngDevMode ? [{ debugName: "paginationInfo" }] : /* istanbul ignore next */ []));
|
|
343
430
|
totalColspan = computed(() => {
|
|
344
431
|
let cols = this.columns().length;
|
|
@@ -350,19 +437,14 @@ class NeuTableComponent {
|
|
|
350
437
|
cols++;
|
|
351
438
|
return cols;
|
|
352
439
|
}, ...(ngDevMode ? [{ debugName: "totalColspan" }] : /* istanbul ignore next */ []));
|
|
353
|
-
/** Calcula el offset izquierdo acumulado para columnas frozen-left múltiples.
|
|
354
|
-
* Calculates cumulative left offset for multiple frozen-left columns. */
|
|
355
440
|
_frozenLeftOffsets = computed(() => {
|
|
441
|
+
this._columnWidths();
|
|
356
442
|
const offsets = new Map();
|
|
357
443
|
let leftPx = 0;
|
|
358
444
|
for (const col of this.columns()) {
|
|
359
445
|
if (col.frozen === 'left') {
|
|
360
446
|
offsets.set(col.key, leftPx);
|
|
361
|
-
|
|
362
|
-
const px = parseFloat(col.width);
|
|
363
|
-
if (!isNaN(px))
|
|
364
|
-
leftPx += px;
|
|
365
|
-
}
|
|
447
|
+
leftPx += this._columnWidthPx(col) ?? 0;
|
|
366
448
|
}
|
|
367
449
|
}
|
|
368
450
|
return offsets;
|
|
@@ -381,15 +463,82 @@ class NeuTableComponent {
|
|
|
381
463
|
isFirstFrozenRightColumn(key) {
|
|
382
464
|
return this._firstFrozenRightKey() === key;
|
|
383
465
|
}
|
|
466
|
+
isColumnResizable(col) {
|
|
467
|
+
return this.resizableColumns() && col.resizable !== false;
|
|
468
|
+
}
|
|
469
|
+
columnWidth(col) {
|
|
470
|
+
const resized = this._columnWidths()[col.key];
|
|
471
|
+
if (resized != null) {
|
|
472
|
+
return `${resized}px`;
|
|
473
|
+
}
|
|
474
|
+
return col.width ?? null;
|
|
475
|
+
}
|
|
476
|
+
startColumnResize(col, event) {
|
|
477
|
+
if (!this.isColumnResizable(col) || !isPlatformBrowser(this._platformId)) {
|
|
478
|
+
return;
|
|
479
|
+
}
|
|
480
|
+
event.preventDefault();
|
|
481
|
+
event.stopPropagation();
|
|
482
|
+
const headerCell = event.currentTarget?.closest('th');
|
|
483
|
+
const startWidth = (headerCell instanceof HTMLElement ? headerCell.getBoundingClientRect().width : 0) ||
|
|
484
|
+
this._columnWidthPx(col) ||
|
|
485
|
+
160;
|
|
486
|
+
const startX = event.clientX;
|
|
487
|
+
const minWidth = col.minWidth ?? 96;
|
|
488
|
+
const maxWidth = col.maxWidth ?? Number.POSITIVE_INFINITY;
|
|
489
|
+
this._stopColumnResize();
|
|
490
|
+
const onMove = (moveEvent) => {
|
|
491
|
+
const nextWidth = Math.min(maxWidth, Math.max(minWidth, Math.round(startWidth + (moveEvent.clientX - startX))));
|
|
492
|
+
this._setColumnWidth(col.key, nextWidth);
|
|
493
|
+
};
|
|
494
|
+
const onUp = () => {
|
|
495
|
+
const width = this._columnWidths()[col.key];
|
|
496
|
+
if (width != null) {
|
|
497
|
+
this.columnResize.emit({ key: col.key, width });
|
|
498
|
+
}
|
|
499
|
+
this._stopColumnResize();
|
|
500
|
+
};
|
|
501
|
+
window.addEventListener('mousemove', onMove);
|
|
502
|
+
window.addEventListener('mouseup', onUp);
|
|
503
|
+
this._resizeCleanup = () => {
|
|
504
|
+
window.removeEventListener('mousemove', onMove);
|
|
505
|
+
window.removeEventListener('mouseup', onUp);
|
|
506
|
+
this._resizeCleanup = null;
|
|
507
|
+
};
|
|
508
|
+
}
|
|
509
|
+
resetColumnWidth(key, event) {
|
|
510
|
+
event?.preventDefault();
|
|
511
|
+
event?.stopPropagation();
|
|
512
|
+
this._columnWidths.update((current) => {
|
|
513
|
+
if (!(key in current)) {
|
|
514
|
+
return current;
|
|
515
|
+
}
|
|
516
|
+
const next = { ...current };
|
|
517
|
+
delete next[key];
|
|
518
|
+
return next;
|
|
519
|
+
});
|
|
520
|
+
}
|
|
384
521
|
// ── Expansión de filas ────────────────────────────────────────────────
|
|
385
522
|
_expandedKeys = signal(new Set(), ...(ngDevMode ? [{ debugName: "_expandedKeys" }] : /* istanbul ignore next */ []));
|
|
386
523
|
isRowExpanded(row) {
|
|
387
524
|
return this._expandedKeys().has(this.getRowKey(row));
|
|
388
525
|
}
|
|
389
|
-
|
|
526
|
+
expandRow(row) {
|
|
527
|
+
const key = this.getRowKey(row);
|
|
528
|
+
const set = this.expandMode() === 'single' ? new Set() : new Set(this._expandedKeys());
|
|
529
|
+
set.add(key);
|
|
530
|
+
this._expandedKeys.set(set);
|
|
531
|
+
}
|
|
532
|
+
collapseRow(row) {
|
|
390
533
|
const key = this.getRowKey(row);
|
|
391
534
|
const set = new Set(this._expandedKeys());
|
|
392
|
-
|
|
535
|
+
set.delete(key);
|
|
536
|
+
this._expandedKeys.set(set);
|
|
537
|
+
}
|
|
538
|
+
toggleExpand(row) {
|
|
539
|
+
const key = this.getRowKey(row);
|
|
540
|
+
const set = this.expandMode() === 'single' ? new Set() : new Set(this._expandedKeys());
|
|
541
|
+
if (this._expandedKeys().has(key))
|
|
393
542
|
set.delete(key);
|
|
394
543
|
else
|
|
395
544
|
set.add(key);
|
|
@@ -397,7 +546,9 @@ class NeuTableComponent {
|
|
|
397
546
|
}
|
|
398
547
|
// ── Selección ─────────────────────────────────────────────────────────
|
|
399
548
|
_selectedKeys = signal(new Set(), ...(ngDevMode ? [{ debugName: "_selectedKeys" }] : /* istanbul ignore next */ []));
|
|
549
|
+
_selectionConfirmPending = signal(null, ...(ngDevMode ? [{ debugName: "_selectionConfirmPending" }] : /* istanbul ignore next */ []));
|
|
400
550
|
selectedCount = computed(() => this._selectedKeys().size, ...(ngDevMode ? [{ debugName: "selectedCount" }] : /* istanbul ignore next */ []));
|
|
551
|
+
selectedRows = computed(() => this._rows().filter((row) => this._selectedKeys().has(this.getRowKey(row))), ...(ngDevMode ? [{ debugName: "selectedRows" }] : /* istanbul ignore next */ []));
|
|
401
552
|
selectedRowsInfo = computed(() => `${this.selectedCount()} ${this.selectionSummaryLabel()}`, ...(ngDevMode ? [{ debugName: "selectedRowsInfo" }] : /* istanbul ignore next */ []));
|
|
402
553
|
/**
|
|
403
554
|
* TRUE cuando TODOS los registros que pasan el filtro activo están seleccionados.
|
|
@@ -436,6 +587,7 @@ class NeuTableComponent {
|
|
|
436
587
|
}
|
|
437
588
|
clearSelection() {
|
|
438
589
|
this._selectedKeys.set(new Set());
|
|
590
|
+
this._selectionConfirmPending.set(null);
|
|
439
591
|
this.selectionChange.emit([]);
|
|
440
592
|
}
|
|
441
593
|
_emitSelection(keys) {
|
|
@@ -595,13 +747,33 @@ class NeuTableComponent {
|
|
|
595
747
|
cancelConfirm() {
|
|
596
748
|
this._confirmPending.set(null);
|
|
597
749
|
}
|
|
750
|
+
isSelectionConfirmPending(action) {
|
|
751
|
+
return this._selectionConfirmPending() === action.key;
|
|
752
|
+
}
|
|
753
|
+
handleSelectionAction(action) {
|
|
754
|
+
const rows = this.selectedRows();
|
|
755
|
+
if (action.confirm) {
|
|
756
|
+
if (this._selectionConfirmPending() === action.key) {
|
|
757
|
+
this._selectionConfirmPending.set(null);
|
|
758
|
+
this.selectionActionClick.emit({ action, rows });
|
|
759
|
+
}
|
|
760
|
+
else {
|
|
761
|
+
this._selectionConfirmPending.set(action.key);
|
|
762
|
+
}
|
|
763
|
+
return;
|
|
764
|
+
}
|
|
765
|
+
this.selectionActionClick.emit({ action, rows });
|
|
766
|
+
}
|
|
767
|
+
cancelSelectionConfirm() {
|
|
768
|
+
this._selectionConfirmPending.set(null);
|
|
769
|
+
}
|
|
598
770
|
// ── Export ────────────────────────────────────────────────────────────
|
|
599
771
|
exportCsv() {
|
|
600
772
|
if (!isPlatformBrowser(this._platformId))
|
|
601
773
|
return;
|
|
602
774
|
const cols = this._getExportColumns();
|
|
603
775
|
const headers = cols.map((c) => `"${c.header.replace(/"/g, '""')}"`);
|
|
604
|
-
const rows = this.
|
|
776
|
+
const rows = this._getExportRows().map((row) => cols.map((col) => `"${this.getCellValue(row, col).replace(/"/g, '""')}"`));
|
|
605
777
|
const csv = [headers, ...rows].map((r) => r.join(',')).join('\r\n');
|
|
606
778
|
this._downloadBlob(new Blob([csv], { type: 'text/csv;charset=utf-8;' }), `${this.exportFileName()}.csv`);
|
|
607
779
|
}
|
|
@@ -609,7 +781,7 @@ class NeuTableComponent {
|
|
|
609
781
|
if (!isPlatformBrowser(this._platformId))
|
|
610
782
|
return;
|
|
611
783
|
const cols = this._getExportColumns();
|
|
612
|
-
const data = this.
|
|
784
|
+
const data = this._getExportRows().map((row) => {
|
|
613
785
|
const obj = {};
|
|
614
786
|
cols.forEach((col) => (obj[col.key] = this.getCellValue(row, col)));
|
|
615
787
|
return obj;
|
|
@@ -621,6 +793,17 @@ class NeuTableComponent {
|
|
|
621
793
|
const all = this.columns().filter((c) => c.type !== 'actions');
|
|
622
794
|
return keys.length ? all.filter((c) => keys.includes(c.key)) : all;
|
|
623
795
|
}
|
|
796
|
+
_getExportRows() {
|
|
797
|
+
const scope = this.exportScope();
|
|
798
|
+
if (scope === 'filtered') {
|
|
799
|
+
return this.filteredData();
|
|
800
|
+
}
|
|
801
|
+
const selectedRows = this._rows().filter((row) => this._selectedKeys().has(this.getRowKey(row)));
|
|
802
|
+
if (scope === 'selected') {
|
|
803
|
+
return selectedRows;
|
|
804
|
+
}
|
|
805
|
+
return selectedRows.length > 0 ? selectedRows : this.filteredData();
|
|
806
|
+
}
|
|
624
807
|
_downloadBlob(blob, filename) {
|
|
625
808
|
const url = URL.createObjectURL(blob);
|
|
626
809
|
const a = document.createElement('a');
|
|
@@ -632,12 +815,44 @@ class NeuTableComponent {
|
|
|
632
815
|
URL.revokeObjectURL(url);
|
|
633
816
|
}
|
|
634
817
|
// ── Utilidades ────────────────────────────────────────────────────────
|
|
818
|
+
onTableScroll(event) {
|
|
819
|
+
if (!this._virtualScrollActive()) {
|
|
820
|
+
return;
|
|
821
|
+
}
|
|
822
|
+
this._virtualScrollTop.set(event.target.scrollTop);
|
|
823
|
+
}
|
|
635
824
|
getRowKey(row) {
|
|
636
825
|
return row[this.rowKey()] ?? JSON.stringify(row);
|
|
637
826
|
}
|
|
827
|
+
visibleRowNumber(rowIdx) {
|
|
828
|
+
return ((this.currentPage() - 1) * this.effectivePageSize() + this._virtualStartIndex() + rowIdx + 1);
|
|
829
|
+
}
|
|
830
|
+
resetVirtualScrollPosition() {
|
|
831
|
+
this._virtualScrollTop.set(0);
|
|
832
|
+
requestAnimationFrame(() => {
|
|
833
|
+
this._scrollContainer()?.nativeElement.scrollTo({ top: 0 });
|
|
834
|
+
});
|
|
835
|
+
}
|
|
638
836
|
getRowClass(row) {
|
|
639
837
|
return this.rowClass()?.(row) ?? '';
|
|
640
838
|
}
|
|
839
|
+
_columnWidthPx(col) {
|
|
840
|
+
const resized = this._columnWidths()[col.key];
|
|
841
|
+
if (resized != null) {
|
|
842
|
+
return resized;
|
|
843
|
+
}
|
|
844
|
+
if (!col.width || col.width === 'auto') {
|
|
845
|
+
return null;
|
|
846
|
+
}
|
|
847
|
+
const px = Number.parseFloat(col.width);
|
|
848
|
+
return Number.isNaN(px) ? null : px;
|
|
849
|
+
}
|
|
850
|
+
_setColumnWidth(key, width) {
|
|
851
|
+
this._columnWidths.update((current) => ({ ...current, [key]: width }));
|
|
852
|
+
}
|
|
853
|
+
_stopColumnResize() {
|
|
854
|
+
this._resizeCleanup?.();
|
|
855
|
+
}
|
|
641
856
|
getCellValue(row, col) {
|
|
642
857
|
if (col.cell)
|
|
643
858
|
return col.cell(row);
|
|
@@ -698,8 +913,14 @@ class NeuTableComponent {
|
|
|
698
913
|
this.serverStateChange.emit({ ...current, ...patch });
|
|
699
914
|
}
|
|
700
915
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: NeuTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
701
|
-
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 }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", 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 }, 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 }, rowKey: { classPropertyName: "rowKey", publicName: "rowKey", 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 }, 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", serverStateChange: "serverStateChange", searchChange: "searchChange" }, 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 }], ngImport: i0, template: `
|
|
702
|
-
<div
|
|
916
|
+
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 }, 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: `
|
|
917
|
+
<div
|
|
918
|
+
class="neu-table-container"
|
|
919
|
+
[class.neu-table--sticky-header]="stickyHeader()"
|
|
920
|
+
[class.neu-table-container--bordered]="bordered()"
|
|
921
|
+
[class.neu-table-container--rounded]="roundedBorders()"
|
|
922
|
+
[class.neu-table-container--striped]="stripedRows()"
|
|
923
|
+
>
|
|
703
924
|
<!-- ---- Toolbar ---- -->
|
|
704
925
|
@if (searchable() || title() || exportable()) {
|
|
705
926
|
<div class="neu-table__toolbar">
|
|
@@ -824,7 +1045,53 @@ class NeuTableComponent {
|
|
|
824
1045
|
<!-- Barra de selección (aparece al seleccionar) -->
|
|
825
1046
|
@if (selectable() && selectedCount() > 0) {
|
|
826
1047
|
<div class="neu-table__selection-bar">
|
|
827
|
-
<
|
|
1048
|
+
<div class="neu-table__selection-main">
|
|
1049
|
+
<span>{{ selectedRowsInfo() }}</span>
|
|
1050
|
+
@if (selectionActions().length > 0) {
|
|
1051
|
+
<div class="neu-table__selection-actions">
|
|
1052
|
+
@for (action of selectionActions(); track action.key) {
|
|
1053
|
+
@if (action.show === undefined || action.show(selectedRows())) {
|
|
1054
|
+
@if (isSelectionConfirmPending(action)) {
|
|
1055
|
+
<span class="neu-table__action-confirm">
|
|
1056
|
+
<span>{{ action.confirm }}</span>
|
|
1057
|
+
<button
|
|
1058
|
+
class="neu-table__action-btn neu-table__action-btn--danger"
|
|
1059
|
+
type="button"
|
|
1060
|
+
(click)="handleSelectionAction(action)"
|
|
1061
|
+
>
|
|
1062
|
+
Sí
|
|
1063
|
+
</button>
|
|
1064
|
+
<button
|
|
1065
|
+
class="neu-table__action-btn"
|
|
1066
|
+
type="button"
|
|
1067
|
+
(click)="cancelSelectionConfirm()"
|
|
1068
|
+
>
|
|
1069
|
+
No
|
|
1070
|
+
</button>
|
|
1071
|
+
</span>
|
|
1072
|
+
} @else {
|
|
1073
|
+
<button
|
|
1074
|
+
class="neu-table__export-btn neu-table__export-btn--selection neu-table__export-btn--{{
|
|
1075
|
+
action.variant ?? 'ghost'
|
|
1076
|
+
}}"
|
|
1077
|
+
type="button"
|
|
1078
|
+
[disabled]="action.disabled ? action.disabled(selectedRows()) : false"
|
|
1079
|
+
[title]="action.label"
|
|
1080
|
+
(click)="handleSelectionAction(action)"
|
|
1081
|
+
>
|
|
1082
|
+
@if (action.icon.startsWith('lucide')) {
|
|
1083
|
+
<neu-icon [name]="action.icon" size="0.95rem" aria-hidden="true" />
|
|
1084
|
+
} @else {
|
|
1085
|
+
<span aria-hidden="true">{{ action.icon }}</span>
|
|
1086
|
+
}
|
|
1087
|
+
<span>{{ action.label }}</span>
|
|
1088
|
+
</button>
|
|
1089
|
+
}
|
|
1090
|
+
}
|
|
1091
|
+
}
|
|
1092
|
+
</div>
|
|
1093
|
+
}
|
|
1094
|
+
</div>
|
|
828
1095
|
<button class="neu-table__selection-clear" type="button" (click)="clearSelection()">
|
|
829
1096
|
{{ clearSelectionLabel() }}
|
|
830
1097
|
</button>
|
|
@@ -833,9 +1100,13 @@ class NeuTableComponent {
|
|
|
833
1100
|
|
|
834
1101
|
<!-- ---- Scroll container ---- -->
|
|
835
1102
|
<div
|
|
1103
|
+
#scrollContainer
|
|
836
1104
|
class="neu-table__scroll-container"
|
|
1105
|
+
[class.neu-table__scroll-container--virtual]="_virtualScrollActive()"
|
|
837
1106
|
role="region"
|
|
838
1107
|
[attr.aria-label]="title() || tableAriaLabel()"
|
|
1108
|
+
[style.max-height]="_virtualScrollActive() ? virtualContainerMaxHeight() : null"
|
|
1109
|
+
(scroll)="onTableScroll($event)"
|
|
839
1110
|
>
|
|
840
1111
|
<table class="neu-table" [attr.aria-rowcount]="filteredData().length">
|
|
841
1112
|
<thead class="neu-table__head">
|
|
@@ -877,7 +1148,9 @@ class NeuTableComponent {
|
|
|
877
1148
|
[style.left]="
|
|
878
1149
|
col.frozen === 'left' ? (_frozenLeftOffsets().get(col.key) ?? 0) + 'px' : null
|
|
879
1150
|
"
|
|
880
|
-
[style.width]="col
|
|
1151
|
+
[style.width]="columnWidth(col)"
|
|
1152
|
+
[style.min-width]="columnWidth(col)"
|
|
1153
|
+
[style.max-width]="columnWidth(col)"
|
|
881
1154
|
[style.text-align]="col.align ?? 'left'"
|
|
882
1155
|
scope="col"
|
|
883
1156
|
(click)="sortable() && col.sortable !== false ? sortBy(col.key, $event) : null"
|
|
@@ -909,6 +1182,15 @@ class NeuTableComponent {
|
|
|
909
1182
|
}
|
|
910
1183
|
</span>
|
|
911
1184
|
}
|
|
1185
|
+
@if (isColumnResizable(col)) {
|
|
1186
|
+
<button
|
|
1187
|
+
class="neu-table__resize-handle"
|
|
1188
|
+
type="button"
|
|
1189
|
+
[attr.aria-label]="'Resize ' + col.header"
|
|
1190
|
+
(dblclick)="resetColumnWidth(col.key, $event)"
|
|
1191
|
+
(mousedown)="startColumnResize(col, $event)"
|
|
1192
|
+
></button>
|
|
1193
|
+
}
|
|
912
1194
|
</th>
|
|
913
1195
|
}
|
|
914
1196
|
</tr>
|
|
@@ -928,7 +1210,9 @@ class NeuTableComponent {
|
|
|
928
1210
|
<th
|
|
929
1211
|
class="neu-table__th neu-table__th--filter"
|
|
930
1212
|
scope="col"
|
|
931
|
-
[style.width]="col
|
|
1213
|
+
[style.width]="columnWidth(col)"
|
|
1214
|
+
[style.min-width]="columnWidth(col)"
|
|
1215
|
+
[style.max-width]="columnWidth(col)"
|
|
932
1216
|
>
|
|
933
1217
|
@if (col.filterable) {
|
|
934
1218
|
@if (col.filterType === 'select') {
|
|
@@ -1006,7 +1290,16 @@ class NeuTableComponent {
|
|
|
1006
1290
|
</td>
|
|
1007
1291
|
</tr>
|
|
1008
1292
|
} @else {
|
|
1009
|
-
@
|
|
1293
|
+
@if (_virtualScrollActive() && _virtualTopSpacerHeight() > 0) {
|
|
1294
|
+
<tr class="neu-table__spacer-row" aria-hidden="true">
|
|
1295
|
+
<td
|
|
1296
|
+
[attr.colspan]="totalColspan()"
|
|
1297
|
+
class="neu-table__spacer-cell"
|
|
1298
|
+
[style.height.px]="_virtualTopSpacerHeight()"
|
|
1299
|
+
></td>
|
|
1300
|
+
</tr>
|
|
1301
|
+
}
|
|
1302
|
+
@for (row of visiblePageRows(); track getRowKey(row); let rowIdx = $index) {
|
|
1010
1303
|
<tr
|
|
1011
1304
|
class="neu-table__row"
|
|
1012
1305
|
[class]="getRowClass(row)"
|
|
@@ -1057,7 +1350,7 @@ class NeuTableComponent {
|
|
|
1057
1350
|
}
|
|
1058
1351
|
@if (showRowNumbers()) {
|
|
1059
1352
|
<td class="neu-table__td neu-table__td--rn">
|
|
1060
|
-
{{ (
|
|
1353
|
+
{{ visibleRowNumber(rowIdx) }}
|
|
1061
1354
|
</td>
|
|
1062
1355
|
}
|
|
1063
1356
|
@for (col of columns(); track col.key) {
|
|
@@ -1075,6 +1368,9 @@ class NeuTableComponent {
|
|
|
1075
1368
|
? (_frozenLeftOffsets().get(col.key) ?? 0) + 'px'
|
|
1076
1369
|
: null
|
|
1077
1370
|
"
|
|
1371
|
+
[style.width]="columnWidth(col)"
|
|
1372
|
+
[style.min-width]="columnWidth(col)"
|
|
1373
|
+
[style.max-width]="columnWidth(col)"
|
|
1078
1374
|
[style.text-align]="col.align ?? 'left'"
|
|
1079
1375
|
>
|
|
1080
1376
|
@if (col.cellTemplate) {
|
|
@@ -1171,6 +1467,15 @@ class NeuTableComponent {
|
|
|
1171
1467
|
</tr>
|
|
1172
1468
|
}
|
|
1173
1469
|
}
|
|
1470
|
+
@if (_virtualScrollActive() && _virtualBottomSpacerHeight() > 0) {
|
|
1471
|
+
<tr class="neu-table__spacer-row" aria-hidden="true">
|
|
1472
|
+
<td
|
|
1473
|
+
[attr.colspan]="totalColspan()"
|
|
1474
|
+
class="neu-table__spacer-cell"
|
|
1475
|
+
[style.height.px]="_virtualBottomSpacerHeight()"
|
|
1476
|
+
></td>
|
|
1477
|
+
</tr>
|
|
1478
|
+
}
|
|
1174
1479
|
}
|
|
1175
1480
|
</tbody>
|
|
1176
1481
|
@if (footerRow()) {
|
|
@@ -1188,6 +1493,9 @@ class NeuTableComponent {
|
|
|
1188
1493
|
@for (col of columns(); track col.key) {
|
|
1189
1494
|
<td
|
|
1190
1495
|
class="neu-table__td neu-table__td--footer"
|
|
1496
|
+
[style.width]="columnWidth(col)"
|
|
1497
|
+
[style.min-width]="columnWidth(col)"
|
|
1498
|
+
[style.max-width]="columnWidth(col)"
|
|
1191
1499
|
[style.text-align]="col.align ?? 'left'"
|
|
1192
1500
|
>
|
|
1193
1501
|
{{ footerRow()![col.key] !== undefined ? footerRow()![col.key] : '' }}
|
|
@@ -1202,7 +1510,7 @@ class NeuTableComponent {
|
|
|
1202
1510
|
<!-- ---- Footer ---- -->
|
|
1203
1511
|
@if (!loading() && filteredData().length > 0) {
|
|
1204
1512
|
<div class="neu-table__footer">
|
|
1205
|
-
@if (pageSizeOptions().length > 0) {
|
|
1513
|
+
@if (pagination() && pageSizeOptions().length > 0) {
|
|
1206
1514
|
<div class="neu-table__page-size">
|
|
1207
1515
|
<label class="neu-table__page-size-label">{{ pageSizeLabel() }}</label>
|
|
1208
1516
|
<neu-select
|
|
@@ -1272,7 +1580,7 @@ class NeuTableComponent {
|
|
|
1272
1580
|
</div>
|
|
1273
1581
|
}
|
|
1274
1582
|
</div>
|
|
1275
|
-
`, isInline: true, styles: [".neu-table-container{background:var(--neu-surface);border:1px solid var(--neu-border);border-radius:var(--neu-radius-lg);overflow:hidden;box-shadow:var(--neu-shadow-sm)}.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__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{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__head{background:var(--neu-surface-2)}.neu-table__th{padding:var(--neu-space-3) var(--neu-space-4);font-size:var(--neu-text-xs);font-weight:600;color:var(--neu-text-muted);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)}.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;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-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__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:var(--neu-text-muted)}.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);color:var(--neu-primary-fg);border-color:var(--neu-primary)}.neu-table__page-btn--active:hover{background:var(--neu-primary-dark);border-color:var(--neu-primary-dark)}.neu-table__export-btn{display:inline-flex;align-items: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__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:var(--neu-text-muted)}.neu-table__page-size-select{display:block;min-width:78px}.neu-table__page-size-select .neu-select__trigger{min-width:78px}.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:var(--neu-table-badge-success-text)}.neu-table__cell-badge--warning{background:var(--neu-table-badge-warning-bg);color:var(--neu-table-badge-warning-text)}.neu-table__cell-badge--danger{background:var(--neu-table-badge-danger-bg);color:var(--neu-table-badge-danger-text)}.neu-table__cell-badge--info{background:var(--neu-primary-50);color:var(--neu-primary)}.neu-table__cell-badge--default{background:var(--neu-surface-3);color:var(--neu-text-muted)}@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)}.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 #0f172a52}.neu-table__th--frozen-right-boundary{box-shadow:inset 1px 0 0 var(--neu-border),-6px 0 8px -8px #0f172a52}.neu-table__td--frozen-left,.neu-table__td--frozen-right{position:sticky;z-index:2;background:var(--neu-surface)}.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 #0f172a52}.neu-table__td--frozen-right-boundary{box-shadow:inset 1px 0 0 var(--neu-border),-6px 0 8px -8px #0f172a52}.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);color: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);color: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}.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)}\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", "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"], outputs: ["rangeChange"] }, { kind: "component", type: NeuIconComponent, selector: "neu-icon", inputs: ["name", "strokeWidth", "size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
1583
|
+
`, 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__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"], outputs: ["rangeChange"] }, { kind: "component", type: NeuIconComponent, selector: "neu-icon", inputs: ["name", "strokeWidth", "size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
1276
1584
|
}
|
|
1277
1585
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: NeuTableComponent, decorators: [{
|
|
1278
1586
|
type: Component,
|
|
@@ -1288,7 +1596,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImpor
|
|
|
1288
1596
|
'[class.neu-table__host--compact]': 'density() === "compact"',
|
|
1289
1597
|
'[class.neu-table__host--relaxed]': 'density() === "relaxed"',
|
|
1290
1598
|
}, template: `
|
|
1291
|
-
<div
|
|
1599
|
+
<div
|
|
1600
|
+
class="neu-table-container"
|
|
1601
|
+
[class.neu-table--sticky-header]="stickyHeader()"
|
|
1602
|
+
[class.neu-table-container--bordered]="bordered()"
|
|
1603
|
+
[class.neu-table-container--rounded]="roundedBorders()"
|
|
1604
|
+
[class.neu-table-container--striped]="stripedRows()"
|
|
1605
|
+
>
|
|
1292
1606
|
<!-- ---- Toolbar ---- -->
|
|
1293
1607
|
@if (searchable() || title() || exportable()) {
|
|
1294
1608
|
<div class="neu-table__toolbar">
|
|
@@ -1413,7 +1727,53 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImpor
|
|
|
1413
1727
|
<!-- Barra de selección (aparece al seleccionar) -->
|
|
1414
1728
|
@if (selectable() && selectedCount() > 0) {
|
|
1415
1729
|
<div class="neu-table__selection-bar">
|
|
1416
|
-
<
|
|
1730
|
+
<div class="neu-table__selection-main">
|
|
1731
|
+
<span>{{ selectedRowsInfo() }}</span>
|
|
1732
|
+
@if (selectionActions().length > 0) {
|
|
1733
|
+
<div class="neu-table__selection-actions">
|
|
1734
|
+
@for (action of selectionActions(); track action.key) {
|
|
1735
|
+
@if (action.show === undefined || action.show(selectedRows())) {
|
|
1736
|
+
@if (isSelectionConfirmPending(action)) {
|
|
1737
|
+
<span class="neu-table__action-confirm">
|
|
1738
|
+
<span>{{ action.confirm }}</span>
|
|
1739
|
+
<button
|
|
1740
|
+
class="neu-table__action-btn neu-table__action-btn--danger"
|
|
1741
|
+
type="button"
|
|
1742
|
+
(click)="handleSelectionAction(action)"
|
|
1743
|
+
>
|
|
1744
|
+
Sí
|
|
1745
|
+
</button>
|
|
1746
|
+
<button
|
|
1747
|
+
class="neu-table__action-btn"
|
|
1748
|
+
type="button"
|
|
1749
|
+
(click)="cancelSelectionConfirm()"
|
|
1750
|
+
>
|
|
1751
|
+
No
|
|
1752
|
+
</button>
|
|
1753
|
+
</span>
|
|
1754
|
+
} @else {
|
|
1755
|
+
<button
|
|
1756
|
+
class="neu-table__export-btn neu-table__export-btn--selection neu-table__export-btn--{{
|
|
1757
|
+
action.variant ?? 'ghost'
|
|
1758
|
+
}}"
|
|
1759
|
+
type="button"
|
|
1760
|
+
[disabled]="action.disabled ? action.disabled(selectedRows()) : false"
|
|
1761
|
+
[title]="action.label"
|
|
1762
|
+
(click)="handleSelectionAction(action)"
|
|
1763
|
+
>
|
|
1764
|
+
@if (action.icon.startsWith('lucide')) {
|
|
1765
|
+
<neu-icon [name]="action.icon" size="0.95rem" aria-hidden="true" />
|
|
1766
|
+
} @else {
|
|
1767
|
+
<span aria-hidden="true">{{ action.icon }}</span>
|
|
1768
|
+
}
|
|
1769
|
+
<span>{{ action.label }}</span>
|
|
1770
|
+
</button>
|
|
1771
|
+
}
|
|
1772
|
+
}
|
|
1773
|
+
}
|
|
1774
|
+
</div>
|
|
1775
|
+
}
|
|
1776
|
+
</div>
|
|
1417
1777
|
<button class="neu-table__selection-clear" type="button" (click)="clearSelection()">
|
|
1418
1778
|
{{ clearSelectionLabel() }}
|
|
1419
1779
|
</button>
|
|
@@ -1422,9 +1782,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImpor
|
|
|
1422
1782
|
|
|
1423
1783
|
<!-- ---- Scroll container ---- -->
|
|
1424
1784
|
<div
|
|
1785
|
+
#scrollContainer
|
|
1425
1786
|
class="neu-table__scroll-container"
|
|
1787
|
+
[class.neu-table__scroll-container--virtual]="_virtualScrollActive()"
|
|
1426
1788
|
role="region"
|
|
1427
1789
|
[attr.aria-label]="title() || tableAriaLabel()"
|
|
1790
|
+
[style.max-height]="_virtualScrollActive() ? virtualContainerMaxHeight() : null"
|
|
1791
|
+
(scroll)="onTableScroll($event)"
|
|
1428
1792
|
>
|
|
1429
1793
|
<table class="neu-table" [attr.aria-rowcount]="filteredData().length">
|
|
1430
1794
|
<thead class="neu-table__head">
|
|
@@ -1466,7 +1830,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImpor
|
|
|
1466
1830
|
[style.left]="
|
|
1467
1831
|
col.frozen === 'left' ? (_frozenLeftOffsets().get(col.key) ?? 0) + 'px' : null
|
|
1468
1832
|
"
|
|
1469
|
-
[style.width]="col
|
|
1833
|
+
[style.width]="columnWidth(col)"
|
|
1834
|
+
[style.min-width]="columnWidth(col)"
|
|
1835
|
+
[style.max-width]="columnWidth(col)"
|
|
1470
1836
|
[style.text-align]="col.align ?? 'left'"
|
|
1471
1837
|
scope="col"
|
|
1472
1838
|
(click)="sortable() && col.sortable !== false ? sortBy(col.key, $event) : null"
|
|
@@ -1498,6 +1864,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImpor
|
|
|
1498
1864
|
}
|
|
1499
1865
|
</span>
|
|
1500
1866
|
}
|
|
1867
|
+
@if (isColumnResizable(col)) {
|
|
1868
|
+
<button
|
|
1869
|
+
class="neu-table__resize-handle"
|
|
1870
|
+
type="button"
|
|
1871
|
+
[attr.aria-label]="'Resize ' + col.header"
|
|
1872
|
+
(dblclick)="resetColumnWidth(col.key, $event)"
|
|
1873
|
+
(mousedown)="startColumnResize(col, $event)"
|
|
1874
|
+
></button>
|
|
1875
|
+
}
|
|
1501
1876
|
</th>
|
|
1502
1877
|
}
|
|
1503
1878
|
</tr>
|
|
@@ -1517,7 +1892,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImpor
|
|
|
1517
1892
|
<th
|
|
1518
1893
|
class="neu-table__th neu-table__th--filter"
|
|
1519
1894
|
scope="col"
|
|
1520
|
-
[style.width]="col
|
|
1895
|
+
[style.width]="columnWidth(col)"
|
|
1896
|
+
[style.min-width]="columnWidth(col)"
|
|
1897
|
+
[style.max-width]="columnWidth(col)"
|
|
1521
1898
|
>
|
|
1522
1899
|
@if (col.filterable) {
|
|
1523
1900
|
@if (col.filterType === 'select') {
|
|
@@ -1595,7 +1972,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImpor
|
|
|
1595
1972
|
</td>
|
|
1596
1973
|
</tr>
|
|
1597
1974
|
} @else {
|
|
1598
|
-
@
|
|
1975
|
+
@if (_virtualScrollActive() && _virtualTopSpacerHeight() > 0) {
|
|
1976
|
+
<tr class="neu-table__spacer-row" aria-hidden="true">
|
|
1977
|
+
<td
|
|
1978
|
+
[attr.colspan]="totalColspan()"
|
|
1979
|
+
class="neu-table__spacer-cell"
|
|
1980
|
+
[style.height.px]="_virtualTopSpacerHeight()"
|
|
1981
|
+
></td>
|
|
1982
|
+
</tr>
|
|
1983
|
+
}
|
|
1984
|
+
@for (row of visiblePageRows(); track getRowKey(row); let rowIdx = $index) {
|
|
1599
1985
|
<tr
|
|
1600
1986
|
class="neu-table__row"
|
|
1601
1987
|
[class]="getRowClass(row)"
|
|
@@ -1646,7 +2032,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImpor
|
|
|
1646
2032
|
}
|
|
1647
2033
|
@if (showRowNumbers()) {
|
|
1648
2034
|
<td class="neu-table__td neu-table__td--rn">
|
|
1649
|
-
{{ (
|
|
2035
|
+
{{ visibleRowNumber(rowIdx) }}
|
|
1650
2036
|
</td>
|
|
1651
2037
|
}
|
|
1652
2038
|
@for (col of columns(); track col.key) {
|
|
@@ -1664,6 +2050,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImpor
|
|
|
1664
2050
|
? (_frozenLeftOffsets().get(col.key) ?? 0) + 'px'
|
|
1665
2051
|
: null
|
|
1666
2052
|
"
|
|
2053
|
+
[style.width]="columnWidth(col)"
|
|
2054
|
+
[style.min-width]="columnWidth(col)"
|
|
2055
|
+
[style.max-width]="columnWidth(col)"
|
|
1667
2056
|
[style.text-align]="col.align ?? 'left'"
|
|
1668
2057
|
>
|
|
1669
2058
|
@if (col.cellTemplate) {
|
|
@@ -1760,6 +2149,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImpor
|
|
|
1760
2149
|
</tr>
|
|
1761
2150
|
}
|
|
1762
2151
|
}
|
|
2152
|
+
@if (_virtualScrollActive() && _virtualBottomSpacerHeight() > 0) {
|
|
2153
|
+
<tr class="neu-table__spacer-row" aria-hidden="true">
|
|
2154
|
+
<td
|
|
2155
|
+
[attr.colspan]="totalColspan()"
|
|
2156
|
+
class="neu-table__spacer-cell"
|
|
2157
|
+
[style.height.px]="_virtualBottomSpacerHeight()"
|
|
2158
|
+
></td>
|
|
2159
|
+
</tr>
|
|
2160
|
+
}
|
|
1763
2161
|
}
|
|
1764
2162
|
</tbody>
|
|
1765
2163
|
@if (footerRow()) {
|
|
@@ -1777,6 +2175,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImpor
|
|
|
1777
2175
|
@for (col of columns(); track col.key) {
|
|
1778
2176
|
<td
|
|
1779
2177
|
class="neu-table__td neu-table__td--footer"
|
|
2178
|
+
[style.width]="columnWidth(col)"
|
|
2179
|
+
[style.min-width]="columnWidth(col)"
|
|
2180
|
+
[style.max-width]="columnWidth(col)"
|
|
1780
2181
|
[style.text-align]="col.align ?? 'left'"
|
|
1781
2182
|
>
|
|
1782
2183
|
{{ footerRow()![col.key] !== undefined ? footerRow()![col.key] : '' }}
|
|
@@ -1791,7 +2192,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImpor
|
|
|
1791
2192
|
<!-- ---- Footer ---- -->
|
|
1792
2193
|
@if (!loading() && filteredData().length > 0) {
|
|
1793
2194
|
<div class="neu-table__footer">
|
|
1794
|
-
@if (pageSizeOptions().length > 0) {
|
|
2195
|
+
@if (pagination() && pageSizeOptions().length > 0) {
|
|
1795
2196
|
<div class="neu-table__page-size">
|
|
1796
2197
|
<label class="neu-table__page-size-label">{{ pageSizeLabel() }}</label>
|
|
1797
2198
|
<neu-select
|
|
@@ -1861,8 +2262,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImpor
|
|
|
1861
2262
|
</div>
|
|
1862
2263
|
}
|
|
1863
2264
|
</div>
|
|
1864
|
-
`, styles: [".neu-table-container{background:var(--neu-surface);border:1px solid var(--neu-border);border-radius:var(--neu-radius-lg);overflow:hidden;box-shadow:var(--neu-shadow-sm)}.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__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{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__head{background:var(--neu-surface-2)}.neu-table__th{padding:var(--neu-space-3) var(--neu-space-4);font-size:var(--neu-text-xs);font-weight:600;color:var(--neu-text-muted);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)}.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;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-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__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:var(--neu-text-muted)}.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);color:var(--neu-primary-fg);border-color:var(--neu-primary)}.neu-table__page-btn--active:hover{background:var(--neu-primary-dark);border-color:var(--neu-primary-dark)}.neu-table__export-btn{display:inline-flex;align-items: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__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:var(--neu-text-muted)}.neu-table__page-size-select{display:block;min-width:78px}.neu-table__page-size-select .neu-select__trigger{min-width:78px}.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:var(--neu-table-badge-success-text)}.neu-table__cell-badge--warning{background:var(--neu-table-badge-warning-bg);color:var(--neu-table-badge-warning-text)}.neu-table__cell-badge--danger{background:var(--neu-table-badge-danger-bg);color:var(--neu-table-badge-danger-text)}.neu-table__cell-badge--info{background:var(--neu-primary-50);color:var(--neu-primary)}.neu-table__cell-badge--default{background:var(--neu-surface-3);color:var(--neu-text-muted)}@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)}.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 #0f172a52}.neu-table__th--frozen-right-boundary{box-shadow:inset 1px 0 0 var(--neu-border),-6px 0 8px -8px #0f172a52}.neu-table__td--frozen-left,.neu-table__td--frozen-right{position:sticky;z-index:2;background:var(--neu-surface)}.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 #0f172a52}.neu-table__td--frozen-right-boundary{box-shadow:inset 1px 0 0 var(--neu-border),-6px 0 8px -8px #0f172a52}.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);color: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);color: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}.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)}\n"] }]
|
|
1865
|
-
}], ctorParameters: () => [], propDecorators: { expandTemplate: [{ type: i0.ContentChild, args: [i0.forwardRef(() => NeuTableExpandDirective), { isSignal: true }] }], columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: false }] }], data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }], pageSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageSize", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], emptyMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyMessage", required: false }] }], skeletonRows: [{ type: i0.Input, args: [{ isSignal: true, alias: "skeletonRows", required: false }] }], searchable: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchable", required: false }] }], searchPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchPlaceholder", required: false }] }], exactMatchable: [{ type: i0.Input, args: [{ isSignal: true, alias: "exactMatchable", required: false }] }], exactMatchLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "exactMatchLabel", required: false }] }], searchAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchAriaLabel", required: false }] }], clearSearchAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearSearchAriaLabel", required: false }] }], clearFilterLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearFilterLabel", required: false }] }], previousPageAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "previousPageAriaLabel", required: false }] }], nextPageAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "nextPageAriaLabel", required: false }] }], pageSizeLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageSizeLabel", required: false }] }], pageSizeAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageSizeAriaLabel", required: false }] }], paginationAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "paginationAriaLabel", required: false }] }], exportCsvTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "exportCsvTitle", required: false }] }], exportJsonTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "exportJsonTitle", required: false }] }], clearSelectionLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearSelectionLabel", required: false }] }], selectionSummaryLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectionSummaryLabel", required: false }] }], tableAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "tableAriaLabel", required: false }] }], selectAllAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectAllAriaLabel", required: false }] }], selectRowAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectRowAriaLabel", required: false }] }], expandRowAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "expandRowAriaLabel", required: false }] }], filterPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterPlaceholder", required: false }] }], filterAriaPrefix: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterAriaPrefix", required: false }] }], allFilterOptionLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "allFilterOptionLabel", required: false }] }], ofLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ofLabel", required: false }] }], resultLabelSingular: [{ type: i0.Input, args: [{ isSignal: true, alias: "resultLabelSingular", required: false }] }], resultLabelPlural: [{ type: i0.Input, args: [{ isSignal: true, alias: "resultLabelPlural", required: false }] }], sortable: [{ type: i0.Input, args: [{ isSignal: true, alias: "sortable", required: false }] }], selectable: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectable", required: false }] }], expandable: [{ type: i0.Input, args: [{ isSignal: true, alias: "expandable", required: false }] }], exportable: [{ type: i0.Input, args: [{ isSignal: true, alias: "exportable", required: false }] }], exportFileName: [{ type: i0.Input, args: [{ isSignal: true, alias: "exportFileName", required: false }] }], pageSizeOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageSizeOptions", required: false }] }], stickyHeader: [{ type: i0.Input, args: [{ isSignal: true, alias: "stickyHeader", required: false }] }], rowKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowKey", required: false }] }], density: [{ type: i0.Input, args: [{ isSignal: true, alias: "density", required: false }] }], showRowNumbers: [{ type: i0.Input, args: [{ isSignal: true, alias: "showRowNumbers", required: false }] }], rowClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowClass", required: false }] }], footerRow: [{ type: i0.Input, args: [{ isSignal: true, alias: "footerRow", required: false }] }], emptyStateTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyStateTemplate", required: false }] }], serverSide: [{ type: i0.Input, args: [{ isSignal: true, alias: "serverSide", required: false }] }], totalItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "totalItems", required: false }] }], multiSort: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiSort", required: false }] }], exportFormats: [{ type: i0.Input, args: [{ isSignal: true, alias: "exportFormats", required: false }] }], exportColumns: [{ type: i0.Input, args: [{ isSignal: true, alias: "exportColumns", required: false }] }], pageParam: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageParam", required: false }] }], searchParam: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchParam", required: false }] }], sortParam: [{ type: i0.Input, args: [{ isSignal: true, alias: "sortParam", required: false }] }], sortDirParam: [{ type: i0.Input, args: [{ isSignal: true, alias: "sortDirParam", required: false }] }], multiSortParam: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiSortParam", required: false }] }], useUrlState: [{ type: i0.Input, args: [{ isSignal: true, alias: "useUrlState", required: false }] }], selectionChange: [{ type: i0.Output, args: ["selectionChange"] }], rowClick: [{ type: i0.Output, args: ["rowClick"] }], rowDblClick: [{ type: i0.Output, args: ["rowDblClick"] }], actionClick: [{ type: i0.Output, args: ["actionClick"] }], serverStateChange: [{ type: i0.Output, args: ["serverStateChange"] }], searchChange: [{ type: i0.Output, args: ["searchChange"] }] } });
|
|
2265
|
+
`, 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__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"] }]
|
|
2266
|
+
}], ctorParameters: () => [], propDecorators: { _scrollContainer: [{ type: i0.ViewChild, args: ['scrollContainer', { isSignal: true }] }], expandTemplate: [{ type: i0.ContentChild, args: [i0.forwardRef(() => NeuTableExpandDirective), { isSignal: true }] }], columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: false }] }], data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }], pageSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageSize", required: false }] }], pagination: [{ type: i0.Input, args: [{ isSignal: true, alias: "pagination", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], emptyMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyMessage", required: false }] }], skeletonRows: [{ type: i0.Input, args: [{ isSignal: true, alias: "skeletonRows", required: false }] }], searchable: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchable", required: false }] }], searchPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchPlaceholder", required: false }] }], exactMatchable: [{ type: i0.Input, args: [{ isSignal: true, alias: "exactMatchable", required: false }] }], exactMatchLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "exactMatchLabel", required: false }] }], searchAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchAriaLabel", required: false }] }], clearSearchAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearSearchAriaLabel", required: false }] }], clearFilterLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearFilterLabel", required: false }] }], previousPageAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "previousPageAriaLabel", required: false }] }], nextPageAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "nextPageAriaLabel", required: false }] }], pageSizeLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageSizeLabel", required: false }] }], pageSizeAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageSizeAriaLabel", required: false }] }], paginationAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "paginationAriaLabel", required: false }] }], exportCsvTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "exportCsvTitle", required: false }] }], exportJsonTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "exportJsonTitle", required: false }] }], clearSelectionLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearSelectionLabel", required: false }] }], selectionSummaryLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectionSummaryLabel", required: false }] }], tableAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "tableAriaLabel", required: false }] }], selectAllAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectAllAriaLabel", required: false }] }], selectRowAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectRowAriaLabel", required: false }] }], expandRowAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "expandRowAriaLabel", required: false }] }], filterPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterPlaceholder", required: false }] }], filterAriaPrefix: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterAriaPrefix", required: false }] }], allFilterOptionLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "allFilterOptionLabel", required: false }] }], ofLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ofLabel", required: false }] }], resultLabelSingular: [{ type: i0.Input, args: [{ isSignal: true, alias: "resultLabelSingular", required: false }] }], resultLabelPlural: [{ type: i0.Input, args: [{ isSignal: true, alias: "resultLabelPlural", required: false }] }], sortable: [{ type: i0.Input, args: [{ isSignal: true, alias: "sortable", required: false }] }], selectable: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectable", required: false }] }], expandable: [{ type: i0.Input, args: [{ isSignal: true, alias: "expandable", required: false }] }], expandMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "expandMode", required: false }] }], exportable: [{ type: i0.Input, args: [{ isSignal: true, alias: "exportable", required: false }] }], exportFileName: [{ type: i0.Input, args: [{ isSignal: true, alias: "exportFileName", required: false }] }], pageSizeOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageSizeOptions", required: false }] }], stickyHeader: [{ type: i0.Input, args: [{ isSignal: true, alias: "stickyHeader", required: false }] }], virtualScroll: [{ type: i0.Input, args: [{ isSignal: true, alias: "virtualScroll", required: false }] }], virtualScrollVisibleItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "virtualScrollVisibleItems", required: false }] }], resizableColumns: [{ type: i0.Input, args: [{ isSignal: true, alias: "resizableColumns", required: false }] }], rowKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowKey", required: false }] }], bordered: [{ type: i0.Input, args: [{ isSignal: true, alias: "bordered", required: false }] }], roundedBorders: [{ type: i0.Input, args: [{ isSignal: true, alias: "roundedBorders", required: false }] }], stripedRows: [{ type: i0.Input, args: [{ isSignal: true, alias: "stripedRows", required: false }] }], density: [{ type: i0.Input, args: [{ isSignal: true, alias: "density", required: false }] }], showRowNumbers: [{ type: i0.Input, args: [{ isSignal: true, alias: "showRowNumbers", required: false }] }], rowClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowClass", required: false }] }], footerRow: [{ type: i0.Input, args: [{ isSignal: true, alias: "footerRow", required: false }] }], emptyStateTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyStateTemplate", required: false }] }], serverSide: [{ type: i0.Input, args: [{ isSignal: true, alias: "serverSide", required: false }] }], totalItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "totalItems", required: false }] }], multiSort: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiSort", required: false }] }], exportFormats: [{ type: i0.Input, args: [{ isSignal: true, alias: "exportFormats", required: false }] }], exportColumns: [{ type: i0.Input, args: [{ isSignal: true, alias: "exportColumns", required: false }] }], exportScope: [{ type: i0.Input, args: [{ isSignal: true, alias: "exportScope", required: false }] }], selectionActions: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectionActions", required: false }] }], pageParam: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageParam", required: false }] }], searchParam: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchParam", required: false }] }], sortParam: [{ type: i0.Input, args: [{ isSignal: true, alias: "sortParam", required: false }] }], sortDirParam: [{ type: i0.Input, args: [{ isSignal: true, alias: "sortDirParam", required: false }] }], multiSortParam: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiSortParam", required: false }] }], useUrlState: [{ type: i0.Input, args: [{ isSignal: true, alias: "useUrlState", required: false }] }], selectionChange: [{ type: i0.Output, args: ["selectionChange"] }], rowClick: [{ type: i0.Output, args: ["rowClick"] }], rowDblClick: [{ type: i0.Output, args: ["rowDblClick"] }], actionClick: [{ type: i0.Output, args: ["actionClick"] }], selectionActionClick: [{ type: i0.Output, args: ["selectionActionClick"] }], serverStateChange: [{ type: i0.Output, args: ["serverStateChange"] }], searchChange: [{ type: i0.Output, args: ["searchChange"] }], columnResize: [{ type: i0.Output, args: ["columnResize"] }] } });
|
|
1866
2267
|
|
|
1867
2268
|
/**
|
|
1868
2269
|
* Generated bundle index. Do not edit.
|