ng-hub-ui-paginable 22.1.0 → 22.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/ng-hub-ui-paginable.mjs +943 -174
- package/fesm2022/ng-hub-ui-paginable.mjs.map +1 -1
- package/ng-hub-ui-paginable-22.1.2.tgz +0 -0
- package/package.json +2 -2
- package/src/lib/styles/mixins/_list-theme.scss +139 -0
- package/src/lib/styles/mixins/_table-theme.scss +116 -0
- package/types/ng-hub-ui-paginable.d.ts +382 -31
- package/ng-hub-ui-paginable-22.1.0.tgz +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, Optional, Inject, Injectable, inject, signal, provideAppInitializer, makeEnvironmentProviders, NgModule, ChangeDetectorRef, ViewContainerRef, ElementRef, input, viewChild, output, HostBinding, ChangeDetectionStrategy, Component, Input, Directive, effect, computed, model, ViewEncapsulation, contentChild, TemplateRef, HostListener, forwardRef, contentChildren, viewChildren, Output } from '@angular/core';
|
|
3
|
-
import { mergeDeep, HUB_TRANSLATION_CONFIG, HubTranslationService, OverlayService, generateUniqueId, TranslatePipe, UcfirstPipe, getValue, UnwrapAsyncPipe, debouncedSignal, IsObservablePipe, GetPipe } from 'ng-hub-ui-utils';
|
|
4
|
-
export { HubTranslationService } from 'ng-hub-ui-utils';
|
|
2
|
+
import { InjectionToken, Optional, Inject, Injectable, inject, signal, provideAppInitializer, makeEnvironmentProviders, NgModule, ChangeDetectorRef, ViewContainerRef, ElementRef, input, viewChild, output, HostBinding, ChangeDetectionStrategy, Component, Input, Directive, effect, computed, model, ViewEncapsulation, DestroyRef, contentChild, TemplateRef, HostListener, forwardRef, contentChildren, viewChildren, Output } from '@angular/core';
|
|
3
|
+
import { mergeDeep, HUB_TRANSLATION_CONFIG, HubTranslationService, OverlayService, generateUniqueId, clamp, TranslatePipe, UcfirstPipe, HubDragDropService, getValue, toAbsoluteIndex, containsNode, resolveDropPosition, createPointerDragSession, computeTargetIndex, moveItemInArray, transferArrayItem, UnwrapAsyncPipe, debouncedSignal, IsObservablePipe, GetPipe } from 'ng-hub-ui-utils';
|
|
4
|
+
export { HubDragDropService as HubListDragService, HubTranslationService, TooltipDirective } from 'ng-hub-ui-utils';
|
|
5
5
|
import { NgClass, NgTemplateOutlet, NgComponentOutlet, UpperCasePipe, AsyncPipe, DOCUMENT } from '@angular/common';
|
|
6
6
|
import * as i1 from '@angular/forms';
|
|
7
7
|
import { FormBuilder, ReactiveFormsModule, FormsModule, NG_VALUE_ACCESSOR, UntypedFormBuilder, FormGroup } from '@angular/forms';
|
|
@@ -21,6 +21,11 @@ const locale$a = {
|
|
|
21
21
|
ROWS_PER_PAGE: 'rows per page',
|
|
22
22
|
SHOWING_X_OF_Y_ROWS: 'Showing {{ amount }} of {{ total }} rows',
|
|
23
23
|
NO_RESULTS_FOUND: 'No results found',
|
|
24
|
+
DRAG_SORTABLE_ITEM: 'sortable item',
|
|
25
|
+
DRAG_PICKED_UP: 'Item picked up. Position {{ index }} of {{ total }}',
|
|
26
|
+
DRAG_MOVED_TO: 'Moved to position {{ index }} of {{ total }}',
|
|
27
|
+
DRAG_DROPPED_AT: 'Dropped at position {{ index }} of {{ total }}',
|
|
28
|
+
DRAG_CANCELLED: 'Reorder cancelled',
|
|
24
29
|
BATCH_ACTIONS: 'Batch actions',
|
|
25
30
|
APPLY: 'Apply',
|
|
26
31
|
FIRST: 'first',
|
|
@@ -100,6 +105,11 @@ const locale$9 = {
|
|
|
100
105
|
ROWS_PER_PAGE: 'Filas per pachina',
|
|
101
106
|
SHOWING_X_OF_Y_ROWS: 'Mostrando {{ amount }} de {{ total }} filas',
|
|
102
107
|
NO_RESULTS_FOUND: 'No s\'han trobau resultaus',
|
|
108
|
+
DRAG_SORTABLE_ITEM: 'elemento ordenable',
|
|
109
|
+
DRAG_PICKED_UP: 'Elemento agarrau. Posición {{ index }} de {{ total }}',
|
|
110
|
+
DRAG_MOVED_TO: 'Movíu a la posición {{ index }} de {{ total }}',
|
|
111
|
+
DRAG_DROPPED_AT: 'Soltau en a posición {{ index }} de {{ total }}',
|
|
112
|
+
DRAG_CANCELLED: 'Reordenación cancelada',
|
|
103
113
|
BATCH_ACTIONS: 'Accions en lot',
|
|
104
114
|
APPLY: 'Aplicar',
|
|
105
115
|
ERROR_OCURRED: 'Ha ocurriu un error obtenindo os datos.',
|
|
@@ -172,6 +182,11 @@ const locale$8 = {
|
|
|
172
182
|
ROWS_PER_PAGE: 'الصفوف لكل صفحة',
|
|
173
183
|
SHOWING_X_OF_Y_ROWS: 'عرض {{ amount }} من {{ total }} صف',
|
|
174
184
|
NO_RESULTS_FOUND: 'لم يتم العثور على نتائج',
|
|
185
|
+
DRAG_SORTABLE_ITEM: 'عنصر قابل للترتيب',
|
|
186
|
+
DRAG_PICKED_UP: 'تم التقاط العنصر. الموضع {{ index }} من {{ total }}',
|
|
187
|
+
DRAG_MOVED_TO: 'تم النقل إلى الموضع {{ index }} من {{ total }}',
|
|
188
|
+
DRAG_DROPPED_AT: 'تم الإفلات في الموضع {{ index }} من {{ total }}',
|
|
189
|
+
DRAG_CANCELLED: 'تم إلغاء إعادة الترتيب',
|
|
175
190
|
BATCH_ACTIONS: 'إجراءات جماعية',
|
|
176
191
|
APPLY: 'تطبيق',
|
|
177
192
|
ERROR_OCURRED: 'حدث خطأ أثناء جلب البيانات.',
|
|
@@ -244,6 +259,11 @@ const locale$7 = {
|
|
|
244
259
|
ROWS_PER_PAGE: 'Fileres por páxina',
|
|
245
260
|
SHOWING_X_OF_Y_ROWS: 'Amosando {{ amount }} de {{ total }} fileres',
|
|
246
261
|
NO_RESULTS_FOUND: 'Nun s\'atoparon resultaos',
|
|
262
|
+
DRAG_SORTABLE_ITEM: 'elementu ordenable',
|
|
263
|
+
DRAG_PICKED_UP: 'Elementu coyíu. Posición {{ index }} de {{ total }}',
|
|
264
|
+
DRAG_MOVED_TO: 'Movíu a la posición {{ index }} de {{ total }}',
|
|
265
|
+
DRAG_DROPPED_AT: 'Soltáu na posición {{ index }} de {{ total }}',
|
|
266
|
+
DRAG_CANCELLED: 'Reordenamientu encaboxáu',
|
|
247
267
|
BATCH_ACTIONS: 'Aiciones por lotes',
|
|
248
268
|
APPLY: 'Aplicar',
|
|
249
269
|
ERROR_OCURRED: 'Produciuse un error al obtener los datos.',
|
|
@@ -316,6 +336,11 @@ const locale$6 = {
|
|
|
316
336
|
ROWS_PER_PAGE: 'Files per pàgina',
|
|
317
337
|
SHOWING_X_OF_Y_ROWS: 'Mostrant {{ amount }} de {{ total }} files',
|
|
318
338
|
NO_RESULTS_FOUND: 'No s\'han trobat resultats',
|
|
339
|
+
DRAG_SORTABLE_ITEM: 'element ordenable',
|
|
340
|
+
DRAG_PICKED_UP: 'Element agafat. Posició {{ index }} de {{ total }}',
|
|
341
|
+
DRAG_MOVED_TO: 'Mogut a la posició {{ index }} de {{ total }}',
|
|
342
|
+
DRAG_DROPPED_AT: 'Deixat a la posició {{ index }} de {{ total }}',
|
|
343
|
+
DRAG_CANCELLED: 'Reordenació cancel·lada',
|
|
319
344
|
BATCH_ACTIONS: 'Accions en lot',
|
|
320
345
|
APPLY: 'Aplica',
|
|
321
346
|
ERROR_OCURRED: 'S\'ha produït un error obtenint les dades.',
|
|
@@ -388,6 +413,11 @@ const locale$5 = {
|
|
|
388
413
|
ROWS_PER_PAGE: 'Zeilen pro Seite',
|
|
389
414
|
SHOWING_X_OF_Y_ROWS: 'Zeige {{ amount }} von {{ total }} Zeilen',
|
|
390
415
|
NO_RESULTS_FOUND: 'Keine Ergebnisse gefunden',
|
|
416
|
+
DRAG_SORTABLE_ITEM: 'sortierbares Element',
|
|
417
|
+
DRAG_PICKED_UP: 'Element aufgenommen. Position {{ index }} von {{ total }}',
|
|
418
|
+
DRAG_MOVED_TO: 'Verschoben auf Position {{ index }} von {{ total }}',
|
|
419
|
+
DRAG_DROPPED_AT: 'Abgelegt an Position {{ index }} von {{ total }}',
|
|
420
|
+
DRAG_CANCELLED: 'Neuanordnung abgebrochen',
|
|
391
421
|
BATCH_ACTIONS: 'Sammelaktionen',
|
|
392
422
|
APPLY: 'Anwenden',
|
|
393
423
|
ERROR_OCURRED: 'Beim Abrufen der Daten ist ein Fehler aufgetreten.',
|
|
@@ -460,6 +490,11 @@ const locale$4 = {
|
|
|
460
490
|
ROWS_PER_PAGE: 'Filas por página',
|
|
461
491
|
SHOWING_X_OF_Y_ROWS: 'Mostrando {{ amount }} de {{ total }} resultados',
|
|
462
492
|
NO_RESULTS_FOUND: 'No se han encontrado resultados',
|
|
493
|
+
DRAG_SORTABLE_ITEM: 'elemento ordenable',
|
|
494
|
+
DRAG_PICKED_UP: 'Elemento tomado. Posición {{ index }} de {{ total }}',
|
|
495
|
+
DRAG_MOVED_TO: 'Movido a la posición {{ index }} de {{ total }}',
|
|
496
|
+
DRAG_DROPPED_AT: 'Soltado en la posición {{ index }} de {{ total }}',
|
|
497
|
+
DRAG_CANCELLED: 'Reordenación cancelada',
|
|
463
498
|
BATCH_ACTIONS: 'Acciones en lote',
|
|
464
499
|
APPLY: 'Aplicar',
|
|
465
500
|
FIRST: 'primera',
|
|
@@ -539,6 +574,11 @@ const locale$3 = {
|
|
|
539
574
|
ROWS_PER_PAGE: 'Errenkadak orrialdeko',
|
|
540
575
|
SHOWING_X_OF_Y_ROWS: '{{ total }} errenkadetatik {{ amount }} erakusten',
|
|
541
576
|
NO_RESULTS_FOUND: 'Ez da emaitzarik aurkitu',
|
|
577
|
+
DRAG_SORTABLE_ITEM: 'elementu ordenagarria',
|
|
578
|
+
DRAG_PICKED_UP: 'Elementua hartuta. {{ total }}-tik {{ index }}. posizioa',
|
|
579
|
+
DRAG_MOVED_TO: '{{ total }}-tik {{ index }}. posiziora mugitua',
|
|
580
|
+
DRAG_DROPPED_AT: '{{ total }}-tik {{ index }}. posizioan utzita',
|
|
581
|
+
DRAG_CANCELLED: 'Berrantolaketa bertan behera utzita',
|
|
542
582
|
BATCH_ACTIONS: 'Sortako ekintzak',
|
|
543
583
|
APPLY: 'Aplikatu',
|
|
544
584
|
ERROR_OCURRED: 'Errorea gertatu da datuak lortzean.',
|
|
@@ -611,6 +651,11 @@ const locale$2 = {
|
|
|
611
651
|
ROWS_PER_PAGE: 'Filas por páxina',
|
|
612
652
|
SHOWING_X_OF_Y_ROWS: 'Mostrando {{ amount }} de {{ total }} filas',
|
|
613
653
|
NO_RESULTS_FOUND: 'Non se atoparon resultados',
|
|
654
|
+
DRAG_SORTABLE_ITEM: 'elemento ordenable',
|
|
655
|
+
DRAG_PICKED_UP: 'Elemento collido. Posición {{ index }} de {{ total }}',
|
|
656
|
+
DRAG_MOVED_TO: 'Movido á posición {{ index }} de {{ total }}',
|
|
657
|
+
DRAG_DROPPED_AT: 'Soltado na posición {{ index }} de {{ total }}',
|
|
658
|
+
DRAG_CANCELLED: 'Reordenación cancelada',
|
|
614
659
|
BATCH_ACTIONS: 'Accións en lote',
|
|
615
660
|
APPLY: 'Aplicar',
|
|
616
661
|
ERROR_OCURRED: 'Produciuse un erro ao obter os datos.',
|
|
@@ -683,6 +728,11 @@ const locale$1 = {
|
|
|
683
728
|
ROWS_PER_PAGE: 'Строк на страницу',
|
|
684
729
|
SHOWING_X_OF_Y_ROWS: 'Показано {{ amount }} из {{ total }} строк',
|
|
685
730
|
NO_RESULTS_FOUND: 'Результаты не найдены',
|
|
731
|
+
DRAG_SORTABLE_ITEM: 'сортируемый элемент',
|
|
732
|
+
DRAG_PICKED_UP: 'Элемент взят. Позиция {{ index }} из {{ total }}',
|
|
733
|
+
DRAG_MOVED_TO: 'Перемещено на позицию {{ index }} из {{ total }}',
|
|
734
|
+
DRAG_DROPPED_AT: 'Помещено на позицию {{ index }} из {{ total }}',
|
|
735
|
+
DRAG_CANCELLED: 'Переупорядочивание отменено',
|
|
686
736
|
BATCH_ACTIONS: 'Пакетные действия',
|
|
687
737
|
APPLY: 'Применить',
|
|
688
738
|
ERROR_OCURRED: 'Произошла ошибка при получении данных.',
|
|
@@ -755,6 +805,11 @@ const locale = {
|
|
|
755
805
|
ROWS_PER_PAGE: '每页行数',
|
|
756
806
|
SHOWING_X_OF_Y_ROWS: '显示 {{ amount }} / {{ total }} 行',
|
|
757
807
|
NO_RESULTS_FOUND: '未找到结果',
|
|
808
|
+
DRAG_SORTABLE_ITEM: '可排序项',
|
|
809
|
+
DRAG_PICKED_UP: '已拾取项目。第 {{ index }} / {{ total }} 项',
|
|
810
|
+
DRAG_MOVED_TO: '已移动到第 {{ index }} / {{ total }} 项',
|
|
811
|
+
DRAG_DROPPED_AT: '已放置到第 {{ index }} / {{ total }} 项',
|
|
812
|
+
DRAG_CANCELLED: '已取消重新排序',
|
|
758
813
|
BATCH_ACTIONS: '批量操作',
|
|
759
814
|
APPLY: '应用',
|
|
760
815
|
ERROR_OCURRED: '获取数据时出错。',
|
|
@@ -1257,13 +1312,13 @@ class DropdownComponent {
|
|
|
1257
1312
|
this._overlayRef?.dispose();
|
|
1258
1313
|
}
|
|
1259
1314
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: DropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1260
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.1", type: DropdownComponent, isStandalone: true, selector: "hub-dropdown, hub-ui-dropdown", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "open", close: "close" }, host: { properties: { "id": "this.id" }, classAttribute: "dropdown" }, viewQueries: [{ propertyName: "dropdownContent", first: true, predicate: ["dropdownContent"], descendants: true, isSignal: true }], ngImport: i0, template: "<button class=\"dropdown__toggle btn\" [class.dropdown__toggle--open]=\"isOpened()\" type=\"button\" [attr.aria-expanded]=\"isOpened()\" (click)=\"toggle()\">\n\t<ng-content select=\".button\"></ng-content>\n</button>\n\n<ng-template #dropdownContent>\n\t<ul class=\"dropdown__menu dropdown-menu show\" [attr.aria-hidden]=\"!isOpened()\">\n\t\t<ng-content select=\".content\"></ng-content>\n\t</ul>\n</ng-template>\n", styles: [":host{display:block;position:relative}::ng-deep .cdk-overlay-pane .dropdown-menu{position:static!important;display:block;min-width:160px;z-index:1000}::ng-deep .cdk-overlay-transparent-backdrop{background:transparent}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1315
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.1", type: DropdownComponent, isStandalone: true, selector: "hub-dropdown, hub-ui-dropdown", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "open", close: "close" }, host: { properties: { "id": "this.id" }, classAttribute: "dropdown" }, viewQueries: [{ propertyName: "dropdownContent", first: true, predicate: ["dropdownContent"], descendants: true, isSignal: true }], ngImport: i0, template: "<button class=\"dropdown__toggle btn\" [class.dropdown__toggle--open]=\"isOpened()\" type=\"button\" [attr.aria-expanded]=\"isOpened()\" (click)=\"toggle()\">\n\t<ng-content select=\".button\"></ng-content>\n</button>\n\n<ng-template #dropdownContent>\n\t<ul class=\"dropdown__menu dropdown-menu show\" [attr.aria-hidden]=\"!isOpened()\">\n\t\t<ng-content select=\".content\"></ng-content>\n\t</ul>\n</ng-template>\n", styles: [":host{display:block;position:relative}::ng-deep .cdk-overlay-pane .dropdown-menu{position:static!important;display:block;min-width:160px;z-index:var(--hub-sys-zindex-dropdown, 1000)}::ng-deep .cdk-overlay-transparent-backdrop{background:transparent}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1261
1316
|
}
|
|
1262
1317
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: DropdownComponent, decorators: [{
|
|
1263
1318
|
type: Component,
|
|
1264
1319
|
args: [{ selector: 'hub-dropdown, hub-ui-dropdown', standalone: true, imports: [], changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
1265
1320
|
class: 'dropdown'
|
|
1266
|
-
}, template: "<button class=\"dropdown__toggle btn\" [class.dropdown__toggle--open]=\"isOpened()\" type=\"button\" [attr.aria-expanded]=\"isOpened()\" (click)=\"toggle()\">\n\t<ng-content select=\".button\"></ng-content>\n</button>\n\n<ng-template #dropdownContent>\n\t<ul class=\"dropdown__menu dropdown-menu show\" [attr.aria-hidden]=\"!isOpened()\">\n\t\t<ng-content select=\".content\"></ng-content>\n\t</ul>\n</ng-template>\n", styles: [":host{display:block;position:relative}::ng-deep .cdk-overlay-pane .dropdown-menu{position:static!important;display:block;min-width:160px;z-index:1000}::ng-deep .cdk-overlay-transparent-backdrop{background:transparent}\n"] }]
|
|
1321
|
+
}, template: "<button class=\"dropdown__toggle btn\" [class.dropdown__toggle--open]=\"isOpened()\" type=\"button\" [attr.aria-expanded]=\"isOpened()\" (click)=\"toggle()\">\n\t<ng-content select=\".button\"></ng-content>\n</button>\n\n<ng-template #dropdownContent>\n\t<ul class=\"dropdown__menu dropdown-menu show\" [attr.aria-hidden]=\"!isOpened()\">\n\t\t<ng-content select=\".content\"></ng-content>\n\t</ul>\n</ng-template>\n", styles: [":host{display:block;position:relative}::ng-deep .cdk-overlay-pane .dropdown-menu{position:static!important;display:block;min-width:160px;z-index:var(--hub-sys-zindex-dropdown, 1000)}::ng-deep .cdk-overlay-transparent-backdrop{background:transparent}\n"] }]
|
|
1267
1322
|
}], propDecorators: { id: [{
|
|
1268
1323
|
type: HostBinding
|
|
1269
1324
|
}], dropdownContent: [{ type: i0.ViewChild, args: ['dropdownContent', { isSignal: true }] }], open: [{ type: i0.Output, args: ["open"] }], close: [{ type: i0.Output, args: ["close"] }] } });
|
|
@@ -1416,6 +1471,68 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImpor
|
|
|
1416
1471
|
args: [{ required: true }]
|
|
1417
1472
|
}] } });
|
|
1418
1473
|
|
|
1474
|
+
/**
|
|
1475
|
+
* Defines a custom placeholder template for `hub-list` drag-and-drop reordering.
|
|
1476
|
+
*
|
|
1477
|
+
* The placeholder is rendered at the prospective drop position while an item is being
|
|
1478
|
+
* dragged. When no placeholder template is provided, the list renders a default dashed
|
|
1479
|
+
* drop slot. The template receives the dragged item via the `item` context property.
|
|
1480
|
+
*
|
|
1481
|
+
* @example
|
|
1482
|
+
* ```html
|
|
1483
|
+
* <ng-template hubListDragPlaceholder let-item="item">
|
|
1484
|
+
* <div class="my-placeholder">Drop "{{ item?.name }}" here</div>
|
|
1485
|
+
* </ng-template>
|
|
1486
|
+
* ```
|
|
1487
|
+
*/
|
|
1488
|
+
class HubListDragPlaceholderDirective {
|
|
1489
|
+
template;
|
|
1490
|
+
constructor(template) {
|
|
1491
|
+
this.template = template;
|
|
1492
|
+
}
|
|
1493
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: HubListDragPlaceholderDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
1494
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.1", type: HubListDragPlaceholderDirective, isStandalone: true, selector: "[hubListDragPlaceholder], [listDragPlaceholder]", ngImport: i0 });
|
|
1495
|
+
}
|
|
1496
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: HubListDragPlaceholderDirective, decorators: [{
|
|
1497
|
+
type: Directive,
|
|
1498
|
+
args: [{
|
|
1499
|
+
selector: '[hubListDragPlaceholder], [listDragPlaceholder]',
|
|
1500
|
+
standalone: true
|
|
1501
|
+
}]
|
|
1502
|
+
}], ctorParameters: () => [{ type: i0.TemplateRef }] });
|
|
1503
|
+
|
|
1504
|
+
/**
|
|
1505
|
+
* Defines a custom drag preview (ghost) template for `hub-list` reordering.
|
|
1506
|
+
*
|
|
1507
|
+
* The preview is the visual that follows the pointer while dragging. With native HTML5
|
|
1508
|
+
* drag-and-drop it is rendered off-screen and passed to `dataTransfer.setDragImage`; with
|
|
1509
|
+
* the Pointer Events touch fallback it is cloned into a floating element. When no preview
|
|
1510
|
+
* template is provided, the browser default (native) or a clone of the row (touch) is used.
|
|
1511
|
+
* The template receives the dragged item via the `item` context property.
|
|
1512
|
+
*
|
|
1513
|
+
* @example
|
|
1514
|
+
* ```html
|
|
1515
|
+
* <ng-template hubListDragPreview let-item="item">
|
|
1516
|
+
* <div class="my-ghost">{{ item?.name }}</div>
|
|
1517
|
+
* </ng-template>
|
|
1518
|
+
* ```
|
|
1519
|
+
*/
|
|
1520
|
+
class HubListDragPreviewDirective {
|
|
1521
|
+
template;
|
|
1522
|
+
constructor(template) {
|
|
1523
|
+
this.template = template;
|
|
1524
|
+
}
|
|
1525
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: HubListDragPreviewDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
1526
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.1", type: HubListDragPreviewDirective, isStandalone: true, selector: "[hubListDragPreview], [listDragPreview]", ngImport: i0 });
|
|
1527
|
+
}
|
|
1528
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: HubListDragPreviewDirective, decorators: [{
|
|
1529
|
+
type: Directive,
|
|
1530
|
+
args: [{
|
|
1531
|
+
selector: '[hubListDragPreview], [listDragPreview]',
|
|
1532
|
+
standalone: true
|
|
1533
|
+
}]
|
|
1534
|
+
}], ctorParameters: () => [{ type: i0.TemplateRef }] });
|
|
1535
|
+
|
|
1419
1536
|
/**
|
|
1420
1537
|
* Captures a projected template used to render the error state of paginable
|
|
1421
1538
|
* components. Shared by both the table and the list so consumers can provide a
|
|
@@ -1505,6 +1622,13 @@ var SelectionTypes;
|
|
|
1505
1622
|
SelectionTypes["Multiple"] = "multiple";
|
|
1506
1623
|
})(SelectionTypes || (SelectionTypes = {}));
|
|
1507
1624
|
|
|
1625
|
+
/**
|
|
1626
|
+
* The list drag-and-drop coordinator is the shared native drag-and-drop service from
|
|
1627
|
+
* `ng-hub-ui-utils`. It is re-exported here (under the historical `HubListDragService` name)
|
|
1628
|
+
* so the list keeps a stable public surface while the implementation lives in the shared
|
|
1629
|
+
* core consumed by every ng-hub-ui library.
|
|
1630
|
+
*/
|
|
1631
|
+
|
|
1508
1632
|
/**
|
|
1509
1633
|
* Renders a single paginable state (loading / error / no-results) by applying a
|
|
1510
1634
|
* fixed precedence and picking the right rendering strategy:
|
|
@@ -1601,6 +1725,48 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImpor
|
|
|
1601
1725
|
}]
|
|
1602
1726
|
}], ctorParameters: () => [], propDecorators: { template: [{ type: i0.Input, args: [{ isSignal: true, alias: "template", required: false }] }], instanceDefault: [{ type: i0.Input, args: [{ isSignal: true, alias: "instanceDefault", required: false }] }], globalDefault: [{ type: i0.Input, args: [{ isSignal: true, alias: "globalDefault", required: false }] }], fallback: [{ type: i0.Input, args: [{ isSignal: true, alias: "fallback", required: true }] }], context: [{ type: i0.Input, args: [{ isSignal: true, alias: "context", required: false }] }] } });
|
|
1603
1727
|
|
|
1728
|
+
/**
|
|
1729
|
+
* Moves a control within a `FormArray` in place, preserving the control instance (and thus
|
|
1730
|
+
* its per-item UI state such as `selected`/`collapsed`).
|
|
1731
|
+
*
|
|
1732
|
+
* @param form `FormArray` to mutate.
|
|
1733
|
+
* @param fromIndex Current index of the control.
|
|
1734
|
+
* @param toIndex Target index of the control.
|
|
1735
|
+
*/
|
|
1736
|
+
function moveControlInFormArray(form, fromIndex, toIndex) {
|
|
1737
|
+
const from = clamp(fromIndex, form.length - 1);
|
|
1738
|
+
const to = clamp(toIndex, form.length - 1);
|
|
1739
|
+
if (from === to) {
|
|
1740
|
+
return;
|
|
1741
|
+
}
|
|
1742
|
+
const control = form.at(from);
|
|
1743
|
+
form.removeAt(from, { emitEvent: false });
|
|
1744
|
+
form.insert(to, control, { emitEvent: false });
|
|
1745
|
+
}
|
|
1746
|
+
/**
|
|
1747
|
+
* Transfers a control from one `FormArray` to another in place, preserving the instance.
|
|
1748
|
+
*
|
|
1749
|
+
* @param source Source `FormArray`.
|
|
1750
|
+
* @param target Target `FormArray`.
|
|
1751
|
+
* @param fromIndex Index of the control in the source array.
|
|
1752
|
+
* @param toIndex Insertion index in the target array.
|
|
1753
|
+
*/
|
|
1754
|
+
function transferControlBetweenFormArrays(source, target, fromIndex, toIndex) {
|
|
1755
|
+
const from = clamp(fromIndex, source.length - 1);
|
|
1756
|
+
const to = clamp(toIndex, target.length);
|
|
1757
|
+
if (!source.length) {
|
|
1758
|
+
return;
|
|
1759
|
+
}
|
|
1760
|
+
const control = source.at(from);
|
|
1761
|
+
source.removeAt(from, { emitEvent: false });
|
|
1762
|
+
target.insert(to, control, { emitEvent: false });
|
|
1763
|
+
}
|
|
1764
|
+
|
|
1765
|
+
/**
|
|
1766
|
+
* The Pointer Events touch/pen drag fallback now lives in the shared `ng-hub-ui-utils`
|
|
1767
|
+
* drag-and-drop core. Re-exported here so existing list imports keep working.
|
|
1768
|
+
*/
|
|
1769
|
+
|
|
1604
1770
|
/**
|
|
1605
1771
|
* Component for handling pagination controls in a table or list throughout the library.
|
|
1606
1772
|
* It provides a user interface for navigating through pages of data.
|
|
@@ -1747,6 +1913,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImpor
|
|
|
1747
1913
|
*/
|
|
1748
1914
|
class ListComponent {
|
|
1749
1915
|
#fb = inject(FormBuilder);
|
|
1916
|
+
#cdr = inject(ChangeDetectorRef);
|
|
1917
|
+
#host = inject(ElementRef);
|
|
1918
|
+
#destroyRef = inject(DestroyRef);
|
|
1919
|
+
/**
|
|
1920
|
+
* Coordinator backing drag-and-drop reordering and cross-list transfers. Exposed to the
|
|
1921
|
+
* template so it can read the active drag (e.g. for the placeholder context).
|
|
1922
|
+
*/
|
|
1923
|
+
dragService = inject(HubDragDropService);
|
|
1924
|
+
/** Stable identifier of this list instance, reflected as `data-hub-drag-owner` on the host. */
|
|
1925
|
+
_listId = generateUniqueId(12);
|
|
1750
1926
|
/** Resolved application-wide default state components. */
|
|
1751
1927
|
defaults = inject(PaginableDefaultsService);
|
|
1752
1928
|
/** Loading state indicator for the list. Consumer-driven. */
|
|
@@ -1792,6 +1968,33 @@ class ListComponent {
|
|
|
1792
1968
|
...(ngDevMode ? [{ debugName: "perPageOptions" }] : /* istanbul ignore next */ []));
|
|
1793
1969
|
totalItems = model(0, /* @ts-ignore */
|
|
1794
1970
|
...(ngDevMode ? [{ debugName: "totalItems" }] : /* istanbul ignore next */ []));
|
|
1971
|
+
/**
|
|
1972
|
+
* Enables drag-and-drop reordering of the list items (native HTML5 drag-and-drop, with a
|
|
1973
|
+
* Pointer Events fallback for touch devices).
|
|
1974
|
+
*/
|
|
1975
|
+
sortable = input(false, /* @ts-ignore */
|
|
1976
|
+
...(ngDevMode ? [{ debugName: "sortable" }] : /* istanbul ignore next */ []));
|
|
1977
|
+
/**
|
|
1978
|
+
* Shared drag group. Lists with the same non-null group can exchange items via
|
|
1979
|
+
* cross-list transfers. When `null` (default), only in-list reordering is allowed.
|
|
1980
|
+
*/
|
|
1981
|
+
dragGroup = input(null, /* @ts-ignore */
|
|
1982
|
+
...(ngDevMode ? [{ debugName: "dragGroup" }] : /* istanbul ignore next */ []));
|
|
1983
|
+
/**
|
|
1984
|
+
* Predicate marking an item as non-draggable. Disabled items cannot be picked up.
|
|
1985
|
+
*/
|
|
1986
|
+
sortDisabled = input(() => false, /* @ts-ignore */
|
|
1987
|
+
...(ngDevMode ? [{ debugName: "sortDisabled" }] : /* istanbul ignore next */ []));
|
|
1988
|
+
/**
|
|
1989
|
+
* Enables keyboard reordering on the focusable row: `Space`/`Enter` to pick up and drop,
|
|
1990
|
+
* arrow keys to move, `Escape` to cancel. Opt-in for accessibility.
|
|
1991
|
+
*/
|
|
1992
|
+
keyboardSortable = input(false, /* @ts-ignore */
|
|
1993
|
+
...(ngDevMode ? [{ debugName: "keyboardSortable" }] : /* istanbul ignore next */ []));
|
|
1994
|
+
/**
|
|
1995
|
+
* Emitted by the destination list after a drag-and-drop reorder or cross-list transfer.
|
|
1996
|
+
*/
|
|
1997
|
+
sorted = output();
|
|
1795
1998
|
numberOfPages = computed(() => {
|
|
1796
1999
|
const perPage = this.perPage();
|
|
1797
2000
|
const totalItems = this.totalItems() || this._items.length;
|
|
@@ -1877,12 +2080,53 @@ class ListComponent {
|
|
|
1877
2080
|
loadingTpt = contentChild(PaginableLoadingDirective, { ...(ngDevMode ? { debugName: "loadingTpt" } : /* istanbul ignore next */ {}), read: TemplateRef });
|
|
1878
2081
|
/** Custom template rendered when the list is in an error state. */
|
|
1879
2082
|
errorTpt = contentChild(PaginableErrorDirective, { ...(ngDevMode ? { debugName: "errorTpt" } : /* istanbul ignore next */ {}), read: TemplateRef });
|
|
2083
|
+
/**
|
|
2084
|
+
* Custom template for the drop placeholder shown while dragging.
|
|
2085
|
+
*/
|
|
2086
|
+
placeholderTpt = contentChild(HubListDragPlaceholderDirective, { ...(ngDevMode ? { debugName: "placeholderTpt" } : /* istanbul ignore next */ {}), read: TemplateRef });
|
|
2087
|
+
/**
|
|
2088
|
+
* Custom template for the drag preview (ghost) that follows the pointer.
|
|
2089
|
+
*/
|
|
2090
|
+
previewTpt = contentChild(HubListDragPreviewDirective, { ...(ngDevMode ? { debugName: "previewTpt" } : /* istanbul ignore next */ {}), read: TemplateRef });
|
|
1880
2091
|
// NOTE: Otros
|
|
1881
2092
|
isDisabled = false;
|
|
1882
2093
|
onChange = () => { };
|
|
1883
2094
|
onTouch = () => { };
|
|
1884
2095
|
// NOTE: Filters
|
|
1885
2096
|
searchFG = this.#fb.control('');
|
|
2097
|
+
// NOTE: Drag & drop internal state
|
|
2098
|
+
/** Per-container registry keyed by container key, used by Pointer Events hit-testing. */
|
|
2099
|
+
#containers = new Map();
|
|
2100
|
+
/** Active Pointer Events session (touch fallback), or `null`. */
|
|
2101
|
+
#pointerSession = null;
|
|
2102
|
+
/** Cleans up the native custom drag image, or `null`. */
|
|
2103
|
+
#dragImageCleanup = null;
|
|
2104
|
+
/**
|
|
2105
|
+
* The row whose most recent `pointerdown` landed on a valid drag-start zone. Native
|
|
2106
|
+
* `dragstart.target` is the draggable `<li>` (not the pressed descendant), so the handle
|
|
2107
|
+
* gate is resolved on `pointerdown` and consulted here.
|
|
2108
|
+
*/
|
|
2109
|
+
#dragStartLi = null;
|
|
2110
|
+
/** Active keyboard reorder state, or `null`. */
|
|
2111
|
+
#keyboardDrag = null;
|
|
2112
|
+
/** Screen-reader announcement (translation key + params) for keyboard reordering. */
|
|
2113
|
+
#announcement = signal(null, /* @ts-ignore */
|
|
2114
|
+
...(ngDevMode ? [{ debugName: "#announcement" }] : /* istanbul ignore next */ []));
|
|
2115
|
+
/** Read-only announcement signal for the template `aria-live` region. */
|
|
2116
|
+
announcement = this.#announcement.asReadonly();
|
|
2117
|
+
constructor() {
|
|
2118
|
+
this.dragService.register({
|
|
2119
|
+
ownerId: this._listId,
|
|
2120
|
+
group: () => this.dragGroup(),
|
|
2121
|
+
refresh: () => this.#refreshSelf(),
|
|
2122
|
+
commit: () => this.#commitDrop(),
|
|
2123
|
+
resolveTarget: (element, clientX, clientY) => this.resolveTarget(element, clientX, clientY)
|
|
2124
|
+
});
|
|
2125
|
+
this.#destroyRef.onDestroy(() => {
|
|
2126
|
+
this.#pointerSession?.destroy();
|
|
2127
|
+
this.dragService.unregister(this._listId);
|
|
2128
|
+
});
|
|
2129
|
+
}
|
|
1886
2130
|
// NOTE: Batch actions
|
|
1887
2131
|
/**
|
|
1888
2132
|
* Collection of actions for items
|
|
@@ -2082,6 +2326,14 @@ class ListComponent {
|
|
|
2082
2326
|
const end = start + perPage;
|
|
2083
2327
|
return { start, end };
|
|
2084
2328
|
}
|
|
2329
|
+
/**
|
|
2330
|
+
* Returns the absolute index of the first item rendered on the current root page.
|
|
2331
|
+
*
|
|
2332
|
+
* @returns The slice start offset (0 when pagination is disabled).
|
|
2333
|
+
*/
|
|
2334
|
+
getRootSliceStart() {
|
|
2335
|
+
return this.paginate() ? this.getSliceRange(this._items.length).start : 0;
|
|
2336
|
+
}
|
|
2085
2337
|
/**
|
|
2086
2338
|
* Returns a stable tracking key for list rendering.
|
|
2087
2339
|
*
|
|
@@ -2105,6 +2357,642 @@ class ListComponent {
|
|
|
2105
2357
|
}
|
|
2106
2358
|
return index;
|
|
2107
2359
|
}
|
|
2360
|
+
// NOTE: Drag & drop
|
|
2361
|
+
/**
|
|
2362
|
+
* Maps a rendered (slice-relative) index to its absolute index in the underlying
|
|
2363
|
+
* collection, accounting for root pagination.
|
|
2364
|
+
*
|
|
2365
|
+
* @param visibleIndex Index within the rendered slice.
|
|
2366
|
+
* @param isRoot Whether the row belongs to the paginated root collection.
|
|
2367
|
+
* @returns The absolute index.
|
|
2368
|
+
*/
|
|
2369
|
+
absoluteIndex(visibleIndex, isRoot) {
|
|
2370
|
+
return isRoot ? toAbsoluteIndex(visibleIndex, this.getRootSliceStart()) : visibleIndex;
|
|
2371
|
+
}
|
|
2372
|
+
/**
|
|
2373
|
+
* Builds (and registers, for Pointer Events hit-testing) the drag container reference for
|
|
2374
|
+
* a rendered collection.
|
|
2375
|
+
*
|
|
2376
|
+
* @param controlsForm The full `FormArray` backing the collection.
|
|
2377
|
+
* @param itemsFull The full data array backing the collection.
|
|
2378
|
+
* @param parentItem The parent item owning the collection, or `null` for the root.
|
|
2379
|
+
* @param depth Nesting depth.
|
|
2380
|
+
* @returns The container reference.
|
|
2381
|
+
*/
|
|
2382
|
+
makeContainerRef(controlsForm, itemsFull, parentItem, depth) {
|
|
2383
|
+
const key = depth === 0 ? `${this._listId}:root` : `${this._listId}:${depth}:${this.getTrackKey(parentItem, depth)}`;
|
|
2384
|
+
const ref = {
|
|
2385
|
+
key,
|
|
2386
|
+
ownerId: this._listId,
|
|
2387
|
+
group: this.dragGroup(),
|
|
2388
|
+
items: itemsFull ?? [],
|
|
2389
|
+
form: controlsForm,
|
|
2390
|
+
parentItem: parentItem ?? null,
|
|
2391
|
+
depth
|
|
2392
|
+
};
|
|
2393
|
+
this.#containers.set(key, ref);
|
|
2394
|
+
return ref;
|
|
2395
|
+
}
|
|
2396
|
+
/**
|
|
2397
|
+
* Returns whether reordering is enabled for a row.
|
|
2398
|
+
*
|
|
2399
|
+
* @param item The row item.
|
|
2400
|
+
* @returns `true` when the row can be dragged.
|
|
2401
|
+
*/
|
|
2402
|
+
isDragEnabled(item) {
|
|
2403
|
+
return this.sortable() && !this.isRowDisabled(item);
|
|
2404
|
+
}
|
|
2405
|
+
/**
|
|
2406
|
+
* Returns whether a row is explicitly non-draggable via `sortDisabled`.
|
|
2407
|
+
*
|
|
2408
|
+
* @param item The row item.
|
|
2409
|
+
* @returns `true` when the row is disabled for dragging.
|
|
2410
|
+
*/
|
|
2411
|
+
isRowDisabled(item) {
|
|
2412
|
+
const fn = this.sortDisabled();
|
|
2413
|
+
return typeof fn === 'function' ? !!fn(item) : false;
|
|
2414
|
+
}
|
|
2415
|
+
/**
|
|
2416
|
+
* Returns whether a row is currently being dragged (native/pointer/keyboard).
|
|
2417
|
+
*
|
|
2418
|
+
* @param item The row item.
|
|
2419
|
+
* @returns `true` when the row is the active drag item.
|
|
2420
|
+
*/
|
|
2421
|
+
isRowDragging(item) {
|
|
2422
|
+
return this.dragService.active()?.item === item || this.#keyboardDrag?.item === item;
|
|
2423
|
+
}
|
|
2424
|
+
/**
|
|
2425
|
+
* Returns the absolute placeholder gap index for a container, or `null` when no
|
|
2426
|
+
* placeholder should render in it.
|
|
2427
|
+
*
|
|
2428
|
+
* @param controlsForm The collection's `FormArray`.
|
|
2429
|
+
* @returns The gap index, or `null`.
|
|
2430
|
+
*/
|
|
2431
|
+
#placeholderGap(controlsForm) {
|
|
2432
|
+
const target = this.dragService.target();
|
|
2433
|
+
if (!target || target.container.form !== controlsForm) {
|
|
2434
|
+
return null;
|
|
2435
|
+
}
|
|
2436
|
+
if (target.atEnd) {
|
|
2437
|
+
return target.container.items.length;
|
|
2438
|
+
}
|
|
2439
|
+
return target.position === 'after' ? target.index + 1 : target.index;
|
|
2440
|
+
}
|
|
2441
|
+
/**
|
|
2442
|
+
* Returns whether the placeholder should render before the row at the given absolute index.
|
|
2443
|
+
*
|
|
2444
|
+
* @param controlsForm The collection's `FormArray`.
|
|
2445
|
+
* @param absoluteIndex Absolute index of the row.
|
|
2446
|
+
* @returns `true` when a placeholder belongs before the row.
|
|
2447
|
+
*/
|
|
2448
|
+
showPlaceholderBefore(controlsForm, absoluteIndex) {
|
|
2449
|
+
return this.#placeholderGap(controlsForm) === absoluteIndex;
|
|
2450
|
+
}
|
|
2451
|
+
/**
|
|
2452
|
+
* Returns whether the placeholder should render after the last visible row of a container.
|
|
2453
|
+
*
|
|
2454
|
+
* @param controlsForm The collection's `FormArray`.
|
|
2455
|
+
* @param isRoot Whether the collection is the paginated root.
|
|
2456
|
+
* @param visibleCount Number of rendered rows.
|
|
2457
|
+
* @returns `true` when a placeholder belongs at the end.
|
|
2458
|
+
*/
|
|
2459
|
+
showPlaceholderAtEnd(controlsForm, isRoot, visibleCount) {
|
|
2460
|
+
const gap = this.#placeholderGap(controlsForm);
|
|
2461
|
+
if (gap === null) {
|
|
2462
|
+
return false;
|
|
2463
|
+
}
|
|
2464
|
+
const endIndex = isRoot ? this.getRootSliceStart() + visibleCount : visibleCount;
|
|
2465
|
+
return gap === endIndex;
|
|
2466
|
+
}
|
|
2467
|
+
/**
|
|
2468
|
+
* Determines whether a drag may start from the given pointer/drag event, honouring drag
|
|
2469
|
+
* handles declared in the item template.
|
|
2470
|
+
*
|
|
2471
|
+
* @param event The triggering event.
|
|
2472
|
+
* @param li The row element.
|
|
2473
|
+
* @returns `true` when the gesture may start a drag.
|
|
2474
|
+
*/
|
|
2475
|
+
#canStartDrag(event, li) {
|
|
2476
|
+
const handles = Array.from(li.querySelectorAll('.hub-list__drag-handle')).filter((handle) => handle.closest('.hub-list__item') === li);
|
|
2477
|
+
if (!handles.length) {
|
|
2478
|
+
return true;
|
|
2479
|
+
}
|
|
2480
|
+
const targetHandle = event.target.closest('.hub-list__drag-handle');
|
|
2481
|
+
return !!targetHandle && targetHandle.closest('.hub-list__item') === li;
|
|
2482
|
+
}
|
|
2483
|
+
/**
|
|
2484
|
+
* Returns whether an event originated on an interactive control (checkbox, button, link…).
|
|
2485
|
+
*
|
|
2486
|
+
* @param event The triggering event.
|
|
2487
|
+
* @returns `true` when the target is interactive.
|
|
2488
|
+
*/
|
|
2489
|
+
#isInteractiveTarget(event) {
|
|
2490
|
+
return !!event.target.closest('input, button, a, select, textarea');
|
|
2491
|
+
}
|
|
2492
|
+
/**
|
|
2493
|
+
* Returns whether an event belongs to the given row rather than to one of its descendant
|
|
2494
|
+
* rows in a nested list. Drag/pointer/keyboard events bubble through ancestor `<li>`s, and
|
|
2495
|
+
* each `<li>` carries the same handlers; this keeps only the innermost row acting.
|
|
2496
|
+
*
|
|
2497
|
+
* @param event The triggering event.
|
|
2498
|
+
* @param li The row element the handler is bound to.
|
|
2499
|
+
* @returns `true` when the event's closest item is exactly this row.
|
|
2500
|
+
*/
|
|
2501
|
+
#isEventForRow(event, li) {
|
|
2502
|
+
return event.target.closest('.hub-list__item') === li;
|
|
2503
|
+
}
|
|
2504
|
+
/**
|
|
2505
|
+
* Records the start of a drag in the coordinator.
|
|
2506
|
+
*
|
|
2507
|
+
* @param container Source container.
|
|
2508
|
+
* @param index Absolute source index.
|
|
2509
|
+
* @param item The dragged item.
|
|
2510
|
+
* @param mode Transport driving the gesture.
|
|
2511
|
+
*/
|
|
2512
|
+
#beginDrag(container, index, item, mode) {
|
|
2513
|
+
this.dragService.begin({
|
|
2514
|
+
sourceId: this._listId,
|
|
2515
|
+
sourceGroup: this.dragGroup(),
|
|
2516
|
+
item,
|
|
2517
|
+
sourceContainer: container,
|
|
2518
|
+
sourceIndex: index,
|
|
2519
|
+
pointerMode: mode
|
|
2520
|
+
});
|
|
2521
|
+
}
|
|
2522
|
+
/**
|
|
2523
|
+
* Returns whether dropping into the given container is forbidden (own subtree cycle or a
|
|
2524
|
+
* group mismatch).
|
|
2525
|
+
*
|
|
2526
|
+
* @param container Candidate destination container.
|
|
2527
|
+
* @returns `true` when the drop must be rejected.
|
|
2528
|
+
*/
|
|
2529
|
+
#forbidsDrop(container) {
|
|
2530
|
+
const active = this.dragService.active();
|
|
2531
|
+
if (!active) {
|
|
2532
|
+
return true;
|
|
2533
|
+
}
|
|
2534
|
+
return containsNode(active.item, container.parentItem, this.bindChildren());
|
|
2535
|
+
}
|
|
2536
|
+
/**
|
|
2537
|
+
* Native HTML5 `dragstart` handler.
|
|
2538
|
+
*
|
|
2539
|
+
* @param event Drag event.
|
|
2540
|
+
* @param container Source container.
|
|
2541
|
+
* @param absoluteIndex Absolute source index.
|
|
2542
|
+
* @param item Dragged item.
|
|
2543
|
+
*/
|
|
2544
|
+
onDragStart(event, container, absoluteIndex, item) {
|
|
2545
|
+
const li = event.currentTarget;
|
|
2546
|
+
// In nested lists the event bubbles through ancestor items; only the source item acts.
|
|
2547
|
+
if (!this.#isEventForRow(event, li)) {
|
|
2548
|
+
return;
|
|
2549
|
+
}
|
|
2550
|
+
// `dragstart.target` is the draggable `<li>`, never the pressed descendant, so the
|
|
2551
|
+
// handle gate is evaluated on `pointerdown` (see `onPointerDown`) and consulted here.
|
|
2552
|
+
if (!this.sortable() || this.isRowDisabled(item) || this.#dragStartLi !== li) {
|
|
2553
|
+
event.preventDefault();
|
|
2554
|
+
return;
|
|
2555
|
+
}
|
|
2556
|
+
this.#dragStartLi = null;
|
|
2557
|
+
if (event.dataTransfer) {
|
|
2558
|
+
event.dataTransfer.effectAllowed = 'move';
|
|
2559
|
+
event.dataTransfer.setData('application/x-hub-list', this._listId);
|
|
2560
|
+
}
|
|
2561
|
+
this.#beginDrag(container, absoluteIndex, item, 'native');
|
|
2562
|
+
this.#applyNativeDragImage(event, item);
|
|
2563
|
+
this.#cdr.markForCheck();
|
|
2564
|
+
}
|
|
2565
|
+
/**
|
|
2566
|
+
* Native HTML5 `dragover`/`dragenter` handler. Computes and publishes the drop target.
|
|
2567
|
+
*
|
|
2568
|
+
* @param event Drag event.
|
|
2569
|
+
* @param container Hovered container.
|
|
2570
|
+
* @param absoluteIndex Absolute index of the hovered row.
|
|
2571
|
+
*/
|
|
2572
|
+
onDragOver(event, container, absoluteIndex) {
|
|
2573
|
+
if (!this.dragService.isDragging()) {
|
|
2574
|
+
return;
|
|
2575
|
+
}
|
|
2576
|
+
const li = event.currentTarget;
|
|
2577
|
+
// In nested lists the event bubbles through ancestor items; only the innermost hovered
|
|
2578
|
+
// item must compute the target (otherwise an ancestor would clobber it).
|
|
2579
|
+
if (!this.#isEventForRow(event, li)) {
|
|
2580
|
+
return;
|
|
2581
|
+
}
|
|
2582
|
+
if (!this.dragService.canDrop(this._listId) || this.#forbidsDrop(container)) {
|
|
2583
|
+
if (event.dataTransfer) {
|
|
2584
|
+
event.dataTransfer.dropEffect = 'none';
|
|
2585
|
+
}
|
|
2586
|
+
return;
|
|
2587
|
+
}
|
|
2588
|
+
event.preventDefault();
|
|
2589
|
+
if (event.dataTransfer) {
|
|
2590
|
+
event.dataTransfer.dropEffect = 'move';
|
|
2591
|
+
}
|
|
2592
|
+
const rect = li.getBoundingClientRect();
|
|
2593
|
+
const isCards = container.depth === 0 && this.isCardsDisplay();
|
|
2594
|
+
const position = resolveDropPosition(event.clientX, event.clientY, rect, isCards ? 'grid' : 'vertical', this.isRtl());
|
|
2595
|
+
this.dragService.setTarget({ ownerId: this._listId, container, index: absoluteIndex, position, atEnd: false });
|
|
2596
|
+
}
|
|
2597
|
+
/**
|
|
2598
|
+
* Native HTML5 `dragover` handler on the collection element. Handles the empty-collection
|
|
2599
|
+
* case so an empty list (e.g. in a group) is still a valid drop target.
|
|
2600
|
+
*
|
|
2601
|
+
* @param event Drag event.
|
|
2602
|
+
* @param container Hovered container.
|
|
2603
|
+
*/
|
|
2604
|
+
onContainerDragOver(event, container) {
|
|
2605
|
+
if (!this.dragService.isDragging()) {
|
|
2606
|
+
return;
|
|
2607
|
+
}
|
|
2608
|
+
if (!this.dragService.canDrop(this._listId) || this.#forbidsDrop(container)) {
|
|
2609
|
+
if (event.dataTransfer) {
|
|
2610
|
+
event.dataTransfer.dropEffect = 'none';
|
|
2611
|
+
}
|
|
2612
|
+
return;
|
|
2613
|
+
}
|
|
2614
|
+
// Allow dropping anywhere over the collection — including the gaps and the placeholder
|
|
2615
|
+
// slot (the placeholder is `pointer-events: none`, so its hovers reach this `<ul>`).
|
|
2616
|
+
// This is what lets a drop "stay" when released on the prospective slot.
|
|
2617
|
+
event.preventDefault();
|
|
2618
|
+
if (event.dataTransfer) {
|
|
2619
|
+
event.dataTransfer.dropEffect = 'move';
|
|
2620
|
+
}
|
|
2621
|
+
if (container.items.length === 0) {
|
|
2622
|
+
// Empty collection: no items to hover, so target the start.
|
|
2623
|
+
this.dragService.setTarget({ ownerId: this._listId, container, index: 0, position: 'before', atEnd: true });
|
|
2624
|
+
}
|
|
2625
|
+
// Non-empty: keep the precise target set by the most recent item-level `dragover`.
|
|
2626
|
+
}
|
|
2627
|
+
/**
|
|
2628
|
+
* Native HTML5 `drop` handler on a row.
|
|
2629
|
+
*
|
|
2630
|
+
* @param event Drag event.
|
|
2631
|
+
*/
|
|
2632
|
+
onDrop(event) {
|
|
2633
|
+
event.preventDefault();
|
|
2634
|
+
event.stopPropagation();
|
|
2635
|
+
this.#commitDrop();
|
|
2636
|
+
}
|
|
2637
|
+
/**
|
|
2638
|
+
* Native HTML5 `drop` handler on the collection element (empty-collection case).
|
|
2639
|
+
*
|
|
2640
|
+
* @param event Drag event.
|
|
2641
|
+
*/
|
|
2642
|
+
onContainerDrop(event) {
|
|
2643
|
+
event.preventDefault();
|
|
2644
|
+
this.#commitDrop();
|
|
2645
|
+
}
|
|
2646
|
+
/**
|
|
2647
|
+
* Native HTML5 `dragend` handler. Restores state and removes the custom drag image.
|
|
2648
|
+
*/
|
|
2649
|
+
onDragEnd() {
|
|
2650
|
+
this.#dragImageCleanup?.();
|
|
2651
|
+
this.#dragImageCleanup = null;
|
|
2652
|
+
this.dragService.end();
|
|
2653
|
+
this.#cdr.markForCheck();
|
|
2654
|
+
}
|
|
2655
|
+
/**
|
|
2656
|
+
* Pointer Events `pointerdown` handler — the touch/pen drag fallback. Mouse pointers are
|
|
2657
|
+
* ignored so native drag-and-drop drives the desktop experience.
|
|
2658
|
+
*
|
|
2659
|
+
* @param event Pointer event.
|
|
2660
|
+
* @param container Source container.
|
|
2661
|
+
* @param absoluteIndex Absolute source index.
|
|
2662
|
+
* @param item Dragged item.
|
|
2663
|
+
*/
|
|
2664
|
+
onPointerDown(event, container, absoluteIndex, item) {
|
|
2665
|
+
const li = event.currentTarget;
|
|
2666
|
+
// In nested lists the event bubbles through ancestor items; only the innermost pressed
|
|
2667
|
+
// item arms, so an ancestor never overwrites `#dragStartLi`.
|
|
2668
|
+
if (!this.#isEventForRow(event, li)) {
|
|
2669
|
+
return;
|
|
2670
|
+
}
|
|
2671
|
+
if (!this.sortable() || this.isRowDisabled(item)) {
|
|
2672
|
+
this.#dragStartLi = null;
|
|
2673
|
+
return;
|
|
2674
|
+
}
|
|
2675
|
+
const onHandle = !!event.target.closest('.hub-list__drag-handle');
|
|
2676
|
+
// `pointerdown` sees the real pressed element, so the handle/interactive gate is resolved
|
|
2677
|
+
// here and remembered for the upcoming native `dragstart` (whose target is the `<li>`).
|
|
2678
|
+
const allowed = (!this.#isInteractiveTarget(event) || onHandle) && this.#canStartDrag(event, li);
|
|
2679
|
+
this.#dragStartLi = allowed ? li : null;
|
|
2680
|
+
if (event.pointerType === 'mouse') {
|
|
2681
|
+
// Desktop pointers use the native HTML5 drag-and-drop path.
|
|
2682
|
+
return;
|
|
2683
|
+
}
|
|
2684
|
+
if (!allowed) {
|
|
2685
|
+
return;
|
|
2686
|
+
}
|
|
2687
|
+
this.#pointerSession = createPointerDragSession({
|
|
2688
|
+
startEvent: event,
|
|
2689
|
+
sourceEl: li,
|
|
2690
|
+
ghostFactory: () => this.#buildPointerGhost(li, item),
|
|
2691
|
+
onStart: () => {
|
|
2692
|
+
this.#beginDrag(container, absoluteIndex, item, 'pointer');
|
|
2693
|
+
this.#cdr.markForCheck();
|
|
2694
|
+
},
|
|
2695
|
+
onMove: (x, y) => this.#onPointerMove(x, y),
|
|
2696
|
+
onDrop: (x, y) => this.#onPointerDrop(x, y),
|
|
2697
|
+
onCancel: () => {
|
|
2698
|
+
this.dragService.end();
|
|
2699
|
+
this.#cdr.markForCheck();
|
|
2700
|
+
},
|
|
2701
|
+
onEnd: () => {
|
|
2702
|
+
this.#pointerSession = null;
|
|
2703
|
+
this.#cdr.markForCheck();
|
|
2704
|
+
}
|
|
2705
|
+
});
|
|
2706
|
+
}
|
|
2707
|
+
/**
|
|
2708
|
+
* Updates the drop target while a Pointer Events drag is moving.
|
|
2709
|
+
*
|
|
2710
|
+
* @param clientX Pointer X.
|
|
2711
|
+
* @param clientY Pointer Y.
|
|
2712
|
+
*/
|
|
2713
|
+
#onPointerMove(clientX, clientY) {
|
|
2714
|
+
const active = this.dragService.active();
|
|
2715
|
+
if (!active) {
|
|
2716
|
+
return;
|
|
2717
|
+
}
|
|
2718
|
+
const target = this.dragService.resolveTargetAt(clientX, clientY);
|
|
2719
|
+
if (target && !containsNode(active.item, target.container.parentItem, this.bindChildren())) {
|
|
2720
|
+
this.dragService.setTarget(target);
|
|
2721
|
+
}
|
|
2722
|
+
else {
|
|
2723
|
+
this.dragService.setTarget(null);
|
|
2724
|
+
}
|
|
2725
|
+
this.#cdr.markForCheck();
|
|
2726
|
+
}
|
|
2727
|
+
/**
|
|
2728
|
+
* Commits a Pointer Events drop by delegating to the destination list.
|
|
2729
|
+
*
|
|
2730
|
+
* @param clientX Pointer X.
|
|
2731
|
+
* @param clientY Pointer Y.
|
|
2732
|
+
*/
|
|
2733
|
+
#onPointerDrop(clientX, clientY) {
|
|
2734
|
+
this.#onPointerMove(clientX, clientY);
|
|
2735
|
+
const target = this.dragService.target();
|
|
2736
|
+
if (target) {
|
|
2737
|
+
this.dragService.requestCommit(target.ownerId);
|
|
2738
|
+
}
|
|
2739
|
+
else {
|
|
2740
|
+
this.dragService.end();
|
|
2741
|
+
}
|
|
2742
|
+
this.#cdr.markForCheck();
|
|
2743
|
+
}
|
|
2744
|
+
/**
|
|
2745
|
+
* Builds the floating ghost element for the Pointer Events fallback.
|
|
2746
|
+
*
|
|
2747
|
+
* @param li The row element.
|
|
2748
|
+
* @param item The dragged item.
|
|
2749
|
+
* @returns The ghost element.
|
|
2750
|
+
*/
|
|
2751
|
+
#buildPointerGhost(li, item) {
|
|
2752
|
+
const template = this.previewTpt();
|
|
2753
|
+
let ghost;
|
|
2754
|
+
if (template) {
|
|
2755
|
+
const view = template.createEmbeddedView({ item });
|
|
2756
|
+
view.detectChanges();
|
|
2757
|
+
ghost = document.createElement('div');
|
|
2758
|
+
view.rootNodes.forEach((node) => ghost.appendChild(node));
|
|
2759
|
+
}
|
|
2760
|
+
else {
|
|
2761
|
+
ghost = li.cloneNode(true);
|
|
2762
|
+
}
|
|
2763
|
+
// The ghost is mounted on <body>, outside this component's emulated encapsulation,
|
|
2764
|
+
// so the design tokens are read from the source row and applied inline.
|
|
2765
|
+
const styles = getComputedStyle(li);
|
|
2766
|
+
ghost.style.opacity = styles.getPropertyValue('--hub-list-ghost-opacity').trim() || '0.85';
|
|
2767
|
+
ghost.style.boxShadow = styles.getPropertyValue('--hub-list-ghost-shadow').trim() || '0 0.5rem 1rem rgba(0, 0, 0, 0.15)';
|
|
2768
|
+
return ghost;
|
|
2769
|
+
}
|
|
2770
|
+
/**
|
|
2771
|
+
* Renders the custom drag preview off-screen and assigns it as the native drag image.
|
|
2772
|
+
*
|
|
2773
|
+
* @param event Drag event.
|
|
2774
|
+
* @param item The dragged item.
|
|
2775
|
+
*/
|
|
2776
|
+
#applyNativeDragImage(event, item) {
|
|
2777
|
+
const template = this.previewTpt();
|
|
2778
|
+
if (!template || !event.dataTransfer || typeof event.dataTransfer.setDragImage !== 'function') {
|
|
2779
|
+
return;
|
|
2780
|
+
}
|
|
2781
|
+
const view = template.createEmbeddedView({ item });
|
|
2782
|
+
view.detectChanges();
|
|
2783
|
+
const node = view.rootNodes.find((candidate) => candidate.nodeType === Node.ELEMENT_NODE);
|
|
2784
|
+
if (!node) {
|
|
2785
|
+
view.destroy();
|
|
2786
|
+
return;
|
|
2787
|
+
}
|
|
2788
|
+
const holder = document.createElement('div');
|
|
2789
|
+
holder.style.position = 'fixed';
|
|
2790
|
+
holder.style.top = '-9999px';
|
|
2791
|
+
holder.style.left = '-9999px';
|
|
2792
|
+
holder.appendChild(node);
|
|
2793
|
+
document.body.appendChild(holder);
|
|
2794
|
+
event.dataTransfer.setDragImage(node, 0, 0);
|
|
2795
|
+
this.#dragImageCleanup = () => {
|
|
2796
|
+
view.destroy();
|
|
2797
|
+
holder.remove();
|
|
2798
|
+
};
|
|
2799
|
+
}
|
|
2800
|
+
/**
|
|
2801
|
+
* Resolves the drop target inside this list from a DOM element and pointer coordinates
|
|
2802
|
+
* (used by the Pointer Events coordinator, including cross-list hovers).
|
|
2803
|
+
*
|
|
2804
|
+
* @param element Element under the pointer.
|
|
2805
|
+
* @param clientX Pointer X.
|
|
2806
|
+
* @param clientY Pointer Y.
|
|
2807
|
+
* @returns The resolved target, or `null`.
|
|
2808
|
+
*/
|
|
2809
|
+
resolveTarget(element, clientX, clientY) {
|
|
2810
|
+
const ul = element.closest('.hub-list__items');
|
|
2811
|
+
const containerKey = ul?.getAttribute('data-hub-container-key');
|
|
2812
|
+
const container = containerKey ? this.#containers.get(containerKey) : null;
|
|
2813
|
+
if (!ul || !container || this.#forbidsDrop(container)) {
|
|
2814
|
+
return null;
|
|
2815
|
+
}
|
|
2816
|
+
const li = element.closest('.hub-list__item');
|
|
2817
|
+
if (!li || li.closest('.hub-list__items') !== ul || li.classList.contains('hub-list__item--empty')) {
|
|
2818
|
+
return { ownerId: this._listId, container, index: container.items.length, position: 'after', atEnd: true };
|
|
2819
|
+
}
|
|
2820
|
+
const indexAttr = li.getAttribute('data-hub-index');
|
|
2821
|
+
const index = indexAttr != null ? Number(indexAttr) : container.items.length;
|
|
2822
|
+
const rect = li.getBoundingClientRect();
|
|
2823
|
+
const isCards = container.depth === 0 && this.isCardsDisplay();
|
|
2824
|
+
const position = resolveDropPosition(clientX, clientY, rect, isCards ? 'grid' : 'vertical', this.isRtl());
|
|
2825
|
+
return { ownerId: this._listId, container, index, position, atEnd: false };
|
|
2826
|
+
}
|
|
2827
|
+
/**
|
|
2828
|
+
* Commits the pending drop as the destination list: mutates the data array and the
|
|
2829
|
+
* `FormArray` (in-list move or cross-list transfer), refreshes the affected views and
|
|
2830
|
+
* emits the `sorted` event. Only the destination list performs the commit and emission.
|
|
2831
|
+
*/
|
|
2832
|
+
#commitDrop() {
|
|
2833
|
+
const active = this.dragService.active();
|
|
2834
|
+
const target = this.dragService.target();
|
|
2835
|
+
if (!active || !target || target.ownerId !== this._listId || !this.dragService.canDrop(this._listId)) {
|
|
2836
|
+
this.dragService.end();
|
|
2837
|
+
return;
|
|
2838
|
+
}
|
|
2839
|
+
const source = active.sourceContainer;
|
|
2840
|
+
const dest = target.container;
|
|
2841
|
+
if (this.#forbidsDrop(dest)) {
|
|
2842
|
+
this.dragService.end();
|
|
2843
|
+
return;
|
|
2844
|
+
}
|
|
2845
|
+
const sameContainer = source.form === dest.form;
|
|
2846
|
+
const fromIndex = active.sourceIndex;
|
|
2847
|
+
const item = source.items[fromIndex];
|
|
2848
|
+
if (item === undefined) {
|
|
2849
|
+
this.dragService.end();
|
|
2850
|
+
return;
|
|
2851
|
+
}
|
|
2852
|
+
const toIndex = target.atEnd
|
|
2853
|
+
? dest.items.length
|
|
2854
|
+
: computeTargetIndex(target.index, target.position === 'after', sameContainer, fromIndex);
|
|
2855
|
+
if (sameContainer) {
|
|
2856
|
+
moveItemInArray(dest.items, fromIndex, toIndex);
|
|
2857
|
+
moveControlInFormArray(dest.form, fromIndex, toIndex);
|
|
2858
|
+
}
|
|
2859
|
+
else {
|
|
2860
|
+
transferArrayItem(source.items, dest.items, fromIndex, toIndex);
|
|
2861
|
+
transferControlBetweenFormArrays(source.form, dest.form, fromIndex, toIndex);
|
|
2862
|
+
}
|
|
2863
|
+
const currentIndex = dest.items.indexOf(item);
|
|
2864
|
+
const event = {
|
|
2865
|
+
previousIndex: fromIndex,
|
|
2866
|
+
currentIndex: currentIndex < 0 ? toIndex : currentIndex,
|
|
2867
|
+
item,
|
|
2868
|
+
items: [...dest.items],
|
|
2869
|
+
isTransfer: !sameContainer,
|
|
2870
|
+
previousGroup: active.sourceGroup,
|
|
2871
|
+
group: this.dragGroup(),
|
|
2872
|
+
previousItems: sameContainer ? undefined : [...source.items],
|
|
2873
|
+
depth: dest.depth,
|
|
2874
|
+
parentItem: dest.parentItem
|
|
2875
|
+
};
|
|
2876
|
+
this.#refreshSelf();
|
|
2877
|
+
if (!sameContainer) {
|
|
2878
|
+
this.dragService.refreshSource(active.sourceId);
|
|
2879
|
+
}
|
|
2880
|
+
this.dragService.end();
|
|
2881
|
+
this.sorted.emit(event);
|
|
2882
|
+
}
|
|
2883
|
+
/**
|
|
2884
|
+
* Keyboard reorder handler bound to the focusable row.
|
|
2885
|
+
*
|
|
2886
|
+
* @param event Keyboard event.
|
|
2887
|
+
* @param container The row's container.
|
|
2888
|
+
* @param absoluteIndex Absolute index of the row.
|
|
2889
|
+
* @param item The row item.
|
|
2890
|
+
*/
|
|
2891
|
+
onItemKeydown(event, container, absoluteIndex, item) {
|
|
2892
|
+
if (!this.keyboardSortable() || !this.sortable() || this.isRowDisabled(item)) {
|
|
2893
|
+
return;
|
|
2894
|
+
}
|
|
2895
|
+
// In nested lists the keydown bubbles through ancestor items; only the focused item acts.
|
|
2896
|
+
if (!this.#isEventForRow(event, event.currentTarget)) {
|
|
2897
|
+
return;
|
|
2898
|
+
}
|
|
2899
|
+
const grab = this.#keyboardDrag;
|
|
2900
|
+
const key = event.key;
|
|
2901
|
+
if (key === ' ' || key === 'Spacebar' || key === 'Enter') {
|
|
2902
|
+
event.preventDefault();
|
|
2903
|
+
if (!grab) {
|
|
2904
|
+
this.#keyboardDrag = { container, index: absoluteIndex, originalIndex: absoluteIndex, item };
|
|
2905
|
+
this.#announce('DRAG_PICKED_UP', { index: absoluteIndex + 1, total: container.items.length });
|
|
2906
|
+
}
|
|
2907
|
+
else {
|
|
2908
|
+
this.#announce('DRAG_DROPPED_AT', { index: grab.index + 1, total: grab.container.items.length });
|
|
2909
|
+
this.#emitKeyboardSorted(grab);
|
|
2910
|
+
this.#keyboardDrag = null;
|
|
2911
|
+
}
|
|
2912
|
+
this.#cdr.markForCheck();
|
|
2913
|
+
return;
|
|
2914
|
+
}
|
|
2915
|
+
if (!grab) {
|
|
2916
|
+
return;
|
|
2917
|
+
}
|
|
2918
|
+
if (key === 'Escape') {
|
|
2919
|
+
event.preventDefault();
|
|
2920
|
+
this.#cancelKeyboardDrag(grab);
|
|
2921
|
+
return;
|
|
2922
|
+
}
|
|
2923
|
+
const isCards = container.depth === 0 && this.isCardsDisplay();
|
|
2924
|
+
let delta = 0;
|
|
2925
|
+
if (key === 'ArrowUp' || (isCards && key === 'ArrowLeft')) {
|
|
2926
|
+
delta = -1;
|
|
2927
|
+
}
|
|
2928
|
+
else if (key === 'ArrowDown' || (isCards && key === 'ArrowRight')) {
|
|
2929
|
+
delta = 1;
|
|
2930
|
+
}
|
|
2931
|
+
else {
|
|
2932
|
+
return;
|
|
2933
|
+
}
|
|
2934
|
+
event.preventDefault();
|
|
2935
|
+
const from = grab.index;
|
|
2936
|
+
const to = Math.max(0, Math.min(grab.container.items.length - 1, from + delta));
|
|
2937
|
+
if (to === from) {
|
|
2938
|
+
return;
|
|
2939
|
+
}
|
|
2940
|
+
moveItemInArray(grab.container.items, from, to);
|
|
2941
|
+
moveControlInFormArray(grab.container.form, from, to);
|
|
2942
|
+
grab.index = to;
|
|
2943
|
+
this.#refreshSelf();
|
|
2944
|
+
this.#announce('DRAG_MOVED_TO', { index: to + 1, total: grab.container.items.length });
|
|
2945
|
+
}
|
|
2946
|
+
/**
|
|
2947
|
+
* Emits the `sorted` event for a completed keyboard reorder.
|
|
2948
|
+
*
|
|
2949
|
+
* @param grab The keyboard drag state.
|
|
2950
|
+
*/
|
|
2951
|
+
#emitKeyboardSorted(grab) {
|
|
2952
|
+
const currentIndex = grab.container.items.indexOf(grab.item);
|
|
2953
|
+
this.sorted.emit({
|
|
2954
|
+
previousIndex: grab.originalIndex,
|
|
2955
|
+
currentIndex: currentIndex < 0 ? grab.index : currentIndex,
|
|
2956
|
+
item: grab.item,
|
|
2957
|
+
items: [...grab.container.items],
|
|
2958
|
+
isTransfer: false,
|
|
2959
|
+
previousGroup: this.dragGroup(),
|
|
2960
|
+
group: this.dragGroup(),
|
|
2961
|
+
depth: grab.container.depth,
|
|
2962
|
+
parentItem: grab.container.parentItem
|
|
2963
|
+
});
|
|
2964
|
+
}
|
|
2965
|
+
/**
|
|
2966
|
+
* Cancels an in-progress keyboard reorder, restoring the original position.
|
|
2967
|
+
*
|
|
2968
|
+
* @param grab The keyboard drag state.
|
|
2969
|
+
*/
|
|
2970
|
+
#cancelKeyboardDrag(grab) {
|
|
2971
|
+
if (grab.index !== grab.originalIndex) {
|
|
2972
|
+
moveItemInArray(grab.container.items, grab.index, grab.originalIndex);
|
|
2973
|
+
moveControlInFormArray(grab.container.form, grab.index, grab.originalIndex);
|
|
2974
|
+
this.#refreshSelf();
|
|
2975
|
+
}
|
|
2976
|
+
this.#announce('DRAG_CANCELLED');
|
|
2977
|
+
this.#keyboardDrag = null;
|
|
2978
|
+
this.#cdr.markForCheck();
|
|
2979
|
+
}
|
|
2980
|
+
/**
|
|
2981
|
+
* Sets the screen-reader announcement.
|
|
2982
|
+
*
|
|
2983
|
+
* @param key Translation key.
|
|
2984
|
+
* @param params Interpolation params.
|
|
2985
|
+
*/
|
|
2986
|
+
#announce(key, params) {
|
|
2987
|
+
this.#announcement.set({ key, params });
|
|
2988
|
+
}
|
|
2989
|
+
/**
|
|
2990
|
+
* Re-renders this list after an in-place mutation of its data/form (drag reorder).
|
|
2991
|
+
*/
|
|
2992
|
+
#refreshSelf() {
|
|
2993
|
+
this._items = Array.isArray(this._items) ? [...this._items] : this._items;
|
|
2994
|
+
this.#cdr.markForCheck();
|
|
2995
|
+
}
|
|
2108
2996
|
collectSelectedValues(controls) {
|
|
2109
2997
|
const selectedValues = [];
|
|
2110
2998
|
for (const control of controls) {
|
|
@@ -2175,19 +3063,21 @@ class ListComponent {
|
|
|
2175
3063
|
return [...new Set(tokens.map((item) => item.trim()).filter(Boolean))];
|
|
2176
3064
|
}
|
|
2177
3065
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: ListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2178
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.1", type: ListComponent, isStandalone: true, selector: "hub-list, hub-ui-list, hub-paginable-list", inputs: { loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, loadingComponent: { classPropertyName: "loadingComponent", publicName: "loadingComponent", isSignal: true, isRequired: false, transformFunction: null }, errorComponent: { classPropertyName: "errorComponent", publicName: "errorComponent", isSignal: true, isRequired: false, transformFunction: null }, noResultsComponent: { classPropertyName: "noResultsComponent", publicName: "noResultsComponent", isSignal: true, isRequired: false, transformFunction: null }, bindValue: { classPropertyName: "bindValue", publicName: "bindValue", isSignal: true, isRequired: false, transformFunction: null }, bindLabel: { classPropertyName: "bindLabel", publicName: "bindLabel", isSignal: true, isRequired: false, transformFunction: null }, bindChildren: { classPropertyName: "bindChildren", publicName: "bindChildren", isSignal: true, isRequired: false, transformFunction: null }, selectable: { classPropertyName: "selectable", publicName: "selectable", isSignal: true, isRequired: false, transformFunction: null }, paginate: { classPropertyName: "paginate", publicName: "paginate", isSignal: true, isRequired: false, transformFunction: null }, page: { classPropertyName: "page", publicName: "page", isSignal: true, isRequired: false, transformFunction: null }, perPage: { classPropertyName: "perPage", publicName: "perPage", isSignal: true, isRequired: false, transformFunction: null }, perPageOptions: { classPropertyName: "perPageOptions", publicName: "perPageOptions", isSignal: true, isRequired: false, transformFunction: null }, totalItems: { classPropertyName: "totalItems", publicName: "totalItems", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: false, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: false, isRequired: false, transformFunction: null }, clickFn: { classPropertyName: "clickFn", publicName: "clickFn", isSignal: true, isRequired: false, transformFunction: null }, rowClass: { classPropertyName: "rowClass", publicName: "rowClass", isSignal: true, isRequired: false, transformFunction: null }, batchActions: { classPropertyName: "batchActions", publicName: "batchActions", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { loading: "loadingChange", error: "errorChange", page: "pageChange", perPage: "perPageChange", totalItems: "totalItemsChange" }, host: { properties: { "class.hub-list--rtl": "isRtl()" }, classAttribute: "hub-list" }, providers: [
|
|
3066
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.1", type: ListComponent, isStandalone: true, selector: "hub-list, hub-ui-list, hub-paginable-list", inputs: { loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, loadingComponent: { classPropertyName: "loadingComponent", publicName: "loadingComponent", isSignal: true, isRequired: false, transformFunction: null }, errorComponent: { classPropertyName: "errorComponent", publicName: "errorComponent", isSignal: true, isRequired: false, transformFunction: null }, noResultsComponent: { classPropertyName: "noResultsComponent", publicName: "noResultsComponent", isSignal: true, isRequired: false, transformFunction: null }, bindValue: { classPropertyName: "bindValue", publicName: "bindValue", isSignal: true, isRequired: false, transformFunction: null }, bindLabel: { classPropertyName: "bindLabel", publicName: "bindLabel", isSignal: true, isRequired: false, transformFunction: null }, bindChildren: { classPropertyName: "bindChildren", publicName: "bindChildren", isSignal: true, isRequired: false, transformFunction: null }, selectable: { classPropertyName: "selectable", publicName: "selectable", isSignal: true, isRequired: false, transformFunction: null }, paginate: { classPropertyName: "paginate", publicName: "paginate", isSignal: true, isRequired: false, transformFunction: null }, page: { classPropertyName: "page", publicName: "page", isSignal: true, isRequired: false, transformFunction: null }, perPage: { classPropertyName: "perPage", publicName: "perPage", isSignal: true, isRequired: false, transformFunction: null }, perPageOptions: { classPropertyName: "perPageOptions", publicName: "perPageOptions", isSignal: true, isRequired: false, transformFunction: null }, totalItems: { classPropertyName: "totalItems", publicName: "totalItems", isSignal: true, isRequired: false, transformFunction: null }, sortable: { classPropertyName: "sortable", publicName: "sortable", isSignal: true, isRequired: false, transformFunction: null }, dragGroup: { classPropertyName: "dragGroup", publicName: "dragGroup", isSignal: true, isRequired: false, transformFunction: null }, sortDisabled: { classPropertyName: "sortDisabled", publicName: "sortDisabled", isSignal: true, isRequired: false, transformFunction: null }, keyboardSortable: { classPropertyName: "keyboardSortable", publicName: "keyboardSortable", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: false, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: false, isRequired: false, transformFunction: null }, clickFn: { classPropertyName: "clickFn", publicName: "clickFn", isSignal: true, isRequired: false, transformFunction: null }, rowClass: { classPropertyName: "rowClass", publicName: "rowClass", isSignal: true, isRequired: false, transformFunction: null }, batchActions: { classPropertyName: "batchActions", publicName: "batchActions", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { loading: "loadingChange", error: "errorChange", page: "pageChange", perPage: "perPageChange", totalItems: "totalItemsChange", sorted: "sorted" }, host: { properties: { "class.hub-list--rtl": "isRtl()", "attr.data-variant": "options.variant ?? null", "attr.data-hub-drag-owner": "_listId" }, classAttribute: "hub-list" }, providers: [
|
|
2179
3067
|
{
|
|
2180
3068
|
provide: NG_VALUE_ACCESSOR,
|
|
2181
3069
|
useExisting: ListComponent,
|
|
2182
3070
|
multi: true
|
|
2183
3071
|
}
|
|
2184
|
-
], queries: [{ propertyName: "itemTpt", first: true, predicate: PaginableListItemDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "noResultsTpt", first: true, predicate: PaginableNoResultsDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "loadingTpt", first: true, predicate: PaginableLoadingDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "errorTpt", first: true, predicate: PaginableErrorDirective, descendants: true, read: TemplateRef, isSignal: true }], ngImport: i0, template: "@if (batchActions.length || options.searchable) {\n\t<div class=\"hub-list__top-bar\">\n\t\t@if (batchActions.length) {\n\t\t\t<div class=\"hub-list__batch-actions\">\n\t\t\t\t@for (action of batchActions; track $index) {\n\t\t\t\t\t@if (!$any(action).buttons?.length) {\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tclass=\"hub-list__batch-action-btn\"\n\t\t\t\t\t\t\t[ngClass]=\"getBatchActionClassList(action)\"\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t(click)=\"handleBatchAction(action)\"\n\t\t\t\t\t\t\t[disabled]=\"!value.length\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t@if (action.icon) {\n\t\t\t\t\t\t\t\t<i class=\"{{ action.icon }}\"></i>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t{{ action.title }}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\t\t@if (options.searchable) {\n\t\t\t<div class=\"hub-list__search\">\n\t\t\t\t@if (isRtl()) {\n\t\t\t\t\t<button class=\"hub-list__search-btn\" type=\"button\" (click)=\"filter()\">\n\t\t\t\t\t\t<i class=\"hub-list__search-icon\" aria-hidden=\"true\"></i>\n\t\t\t\t\t</button>\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tclass=\"hub-list__search-input\"\n\t\t\t\t\t\t[formControl]=\"searchFG\"\n\t\t\t\t\t\t[placeholder]=\"'SEARCH' | translate | ucfirst\"\n\t\t\t\t\t\t[attr.aria-label]=\"'SEARCH' | translate | ucfirst\"\n\t\t\t\t\t\t(click)=\"$event.stopPropagation()\"\n\t\t\t\t\t\t(keyup.enter)=\"filter()\"\n\t\t\t\t\t/>\n\t\t\t\t} @else {\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tclass=\"hub-list__search-input\"\n\t\t\t\t\t\t[formControl]=\"searchFG\"\n\t\t\t\t\t\t[placeholder]=\"'SEARCH' | translate | ucfirst\"\n\t\t\t\t\t\t[attr.aria-label]=\"'SEARCH' | translate | ucfirst\"\n\t\t\t\t\t\t(click)=\"$event.stopPropagation()\"\n\t\t\t\t\t\t(keyup.enter)=\"filter()\"\n\t\t\t\t\t/>\n\t\t\t\t\t<button class=\"hub-list__search-btn\" type=\"button\" (click)=\"filter()\">\n\t\t\t\t\t\t<i class=\"hub-list__search-icon\" aria-hidden=\"true\"></i>\n\t\t\t\t\t</button>\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\t</div>\n}\n\n@if (loading()) {\n\t<ul class=\"hub-list__items hub-list__items--root\">\n\t\t<li class=\"hub-list__item hub-list__item--state\">\n\t\t\t<hub-state-outlet\n\t\t\t\t[template]=\"loadingTpt()\"\n\t\t\t\t[instanceDefault]=\"loadingComponent()\"\n\t\t\t\t[globalDefault]=\"defaults.loading()\"\n\t\t\t\t[fallback]=\"defaultLoadingTpt\"\n\t\t\t/>\n\t\t</li>\n\t</ul>\n} @else if (error()) {\n\t<ul class=\"hub-list__items hub-list__items--root\">\n\t\t<li class=\"hub-list__item hub-list__item--state\">\n\t\t\t<hub-state-outlet\n\t\t\t\t[template]=\"errorTpt()\"\n\t\t\t\t[instanceDefault]=\"errorComponent()\"\n\t\t\t\t[globalDefault]=\"defaults.error()\"\n\t\t\t\t[fallback]=\"defaultErrorTpt\"\n\t\t\t\t[context]=\"{ error: error() }\"\n\t\t\t/>\n\t\t</li>\n\t</ul>\n} @else if (!getVisibleItems(items, true).length) {\n\t<ul class=\"hub-list__items hub-list__items--root\">\n\t\t<li class=\"hub-list__item hub-list__item--empty\">\n\t\t\t<hub-state-outlet\n\t\t\t\t[template]=\"noResultsTpt()\"\n\t\t\t\t[instanceDefault]=\"noResultsComponent()\"\n\t\t\t\t[globalDefault]=\"defaults.noResults()\"\n\t\t\t\t[fallback]=\"defaultNoResultsTpt\"\n\t\t\t/>\n\t\t</li>\n\t</ul>\n} @else {\n\t<ng-container\n\t\t[ngTemplateOutlet]=\"containerTpt\"\n\t\t[ngTemplateOutletContext]=\"{\n\t\t\tcontrols: getVisibleControls(form.controls, true),\n\t\t\tisRoot: true,\n\t\t\titems: getVisibleItems(items, true),\n\t\t\tdepth: 0\n\t\t}\"\n\t></ng-container>\n}\n\n<ng-template #containerTpt let-controls=\"controls\" let-isRoot=\"isRoot\" let-items=\"items\" let-depth=\"depth\">\n\t<ul\n\t\tclass=\"hub-list__items\"\n\t\t[class.hub-list__items--root]=\"isRoot\"\n\t\t[class.hub-list__items--cards]=\"isRoot && isCardsDisplay()\"\n\t>\n\t\t@for (formGroup of controls; track getTrackKey(formGroup.get('data')?.value, $index); let index = $index) {\n\t\t\t<li\n\t\t\t\tclass=\"hub-list__item\"\n\t\t\t\t[ngClass]=\"_getRowClass(items[index])\"\n\t\t\t\t[class.hub-list__item--clickable]=\"clickFn()\"\n\t\t\t\t[class.hub-list__item--selected]=\"formGroup.get('selected')?.value\"\n\t\t\t\t[formGroup]=\"formGroup\"\n\t\t\t\t(click)=\"onItemClick(formGroup.value, depth, index, $event); $event.preventDefault(); $event.stopPropagation()\"\n\t\t\t>\n\t\t\t\t@if (formGroup.value; as item) {\n\t\t\t\t\t<div class=\"hub-list__item-content\">\n\t\t\t\t\t\t@if (multipleSelectable()) {\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\tclass=\"hub-list__checkbox\"\n\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\tformControlName=\"selected\"\n\t\t\t\t\t\t\t\t(change)=\"onSelectionChange()\"\n\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation()\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t<div class=\"hub-list__label\">\n\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"itemTpt() || defaultItemtTpt\"\n\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{\n\t\t\t\t\t\t\t\t\tdata: items[index],\n\t\t\t\t\t\t\t\t\tdepth,\n\t\t\t\t\t\t\t\t\tindex,\n\t\t\t\t\t\t\t\t\tcollapsed: !!formGroup.get('collapsed').value,\n\t\t\t\t\t\t\t\t\tselected: formGroup.get('selected').value\n\t\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t@if (item[bindChildren()]?.length) {\n\t\t\t\t\t\t\t<div class=\"hub-list__actions\">\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tclass=\"hub-list__chevron\"\n\t\t\t\t\t\t\t\t\t(click)=\"\n\t\t\t\t\t\t\t\t\t\ttoggleCollapsed(formGroup.get('collapsed'));\n\t\t\t\t\t\t\t\t\t\t$event.preventDefault();\n\t\t\t\t\t\t\t\t\t\t$event.stopPropagation()\n\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<i\n\t\t\t\t\t\t\t\t\t\tclass=\"hub-table__icon\"\n\t\t\t\t\t\t\t\t\t\t[ngClass]=\"\n\t\t\t\t\t\t\t\t\t\t\titem.collapsed ? 'hub-table__icon--chevron-down' : 'hub-table__icon--chevron-up'\n\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t></i>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t\t@if (item[bindChildren()]?.length && !item.collapsed) {\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"containerTpt\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{\n\t\t\t\t\t\t\t\tcontrols: formGroup.get('children')?.controls,\n\t\t\t\t\t\t\t\titems: items[index][bindChildren()],\n\t\t\t\t\t\t\t\tisRoot: false,\n\t\t\t\t\t\t\t\tdepth: depth + 1\n\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t</li>\n\t\t}\n\t</ul>\n</ng-template>\n\n@if (paginate()) {\n\t<div class=\"hub-list__bottom-bar\">\n\t\t<hub-paginator\n\t\t\tclass=\"hub-list__bottom-bar-paginator\"\n\t\t\t[(page)]=\"page\"\n\t\t\t[numberOfPages]=\"numberOfPages()\"\n\t\t\t[rtl]=\"isRtl()\"\n\t\t></hub-paginator>\n\t\t<div class=\"hub-list__bottom-bar-settings hub-paginator__settings\">\n\t\t\t<label class=\"hub-paginator__label\"> {{ 'ROWS_PER_PAGE' | translate | ucfirst }}: </label>\n\t\t\t<select\n\t\t\t\tclass=\"hub-paginator__select\"\n\t\t\t\t[ngModel]=\"perPage()\"\n\t\t\t\t(ngModelChange)=\"onPerPageChange($event)\"\n\t\t\t\t[ngModelOptions]=\"{ standalone: true }\"\n\t\t\t>\n\t\t\t\t@for (option of perPageOptions(); track option) {\n\t\t\t\t\t<option [ngValue]=\"option\" class=\"hub-paginator__select-option\">\n\t\t\t\t\t\t{{ option }}\n\t\t\t\t\t</option>\n\t\t\t\t}\n\t\t\t</select>\n\t\t</div>\n\t\t<p class=\"hub-list__bottom-bar-info hub-paginator__info\">\n\t\t\t{{\n\t\t\t\t'SHOWING_X_OF_Y_ROWS'\n\t\t\t\t\t| translate\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\tamount: getVisibleItems(items, true).length,\n\t\t\t\t\t\t\t\ttotal: getEffectiveTotalItems()\n\t\t\t\t\t\t }\n\t\t\t\t\t| ucfirst\n\t\t\t}}\n\t\t</p>\n\t</div>\n}\n\n<ng-template #defaultNoResultsTpt>\n\t<div class=\"hub-list__no-results\" role=\"alert\">\n\t\t<i class=\"hub-table__icon hub-table__icon--info hub-table__icon--2x\" aria-hidden=\"true\"></i>\n\t\t{{ 'NO_RESULTS_FOUND' | translate | ucfirst }}\n\t</div>\n</ng-template>\n\n<ng-template #defaultLoadingTpt>\n\t<div class=\"hub-list__loading\" role=\"status\">\n\t\t<i class=\"hub-table__icon hub-table__icon--info hub-table__icon--2x\" aria-hidden=\"true\"></i>\n\t\t{{ 'LOADING' | translate | ucfirst }}\n\t</div>\n</ng-template>\n\n<ng-template #defaultErrorTpt>\n\t<div class=\"hub-list__error text-danger\" role=\"alert\">\n\t\t<i class=\"hub-table__icon hub-table__icon--info hub-table__icon--2x\" aria-hidden=\"true\"></i>\n\t\t{{ 'ERROR_OCURRED' | translate | ucfirst }}\n\t</div>\n</ng-template>\n\n<ng-template #defaultItemtTpt let-data=\"data\">\n\t{{ data[bindLabel()] }}\n</ng-template>\n", styles: [":root,:host{--hub-list-checkbox-size: 1rem;--hub-list-chevron-size: var(--hub-ref-icon-size, 1em);--hub-list-bg: transparent;--hub-list-border-radius: var(--hub-ref-radius-md, .375rem);--hub-list-padding-x: var(--hub-ref-space-0, 0);--hub-list-padding-y: var(--hub-ref-space-0, 0);--hub-list-gap: var(--hub-ref-space-4, 1.5rem);--hub-list-items-bg: transparent;--hub-list-items-gap: var(--hub-ref-space-2, .5rem);--hub-list-empty-bg: var(--hub-ref-surface-2, #f8f9fa);--hub-list-empty-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-list-empty-color: var(--hub-sys-text-muted, #6c757d);--hub-list-empty-padding-x: var(--hub-ref-space-3, 1rem);--hub-list-empty-padding-y: var(--hub-ref-space-3, 1rem);--hub-list-item-bg: var(--hub-sys-surface-page, #ffffff);--hub-list-item-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-list-item-border-width: 1px;--hub-list-item-border-radius: var(--hub-ref-radius-sm, .25rem);--hub-list-item-color: var(--hub-sys-text-primary, #212529);--hub-list-item-gap: var(--hub-ref-space-2, .5rem);--hub-list-item-hover-bg: var(--hub-ref-surface-2, #f8f9fa);--hub-list-item-padding-x: var(--hub-ref-space-3, 1rem);--hub-list-item-padding-y: var(--hub-ref-space-2, .5rem);--hub-list-children-gap: var(--hub-list-item-padding-y);--hub-list-item-selected-bg: var(--hub-sys-color-primary, #0d6efd);--hub-list-item-selected-color: var(--hub-ref-color-white, #fff);--hub-list-cards-min-column-width: 18rem;--hub-list-cards-gap: var(--hub-list-items-gap);--hub-list-cards-columns: auto-fit;--hub-list-cards-row-gap: var(--hub-list-cards-gap);--hub-list-cards-column-gap: var(--hub-list-cards-gap);--hub-list-cards-bg: var(--hub-list-item-bg, transparent);--hub-list-cards-color: var(--hub-list-item-color);--hub-list-cards-padding-x: var(--hub-list-item-padding-x);--hub-list-cards-padding-y: var(--hub-list-item-padding-y);--hub-list-cards-border-color: var(--hub-list-item-border-color);--hub-list-cards-border-width: var(--hub-list-item-border-width, 1px);--hub-list-cards-border-radius: var(--hub-list-item-border-radius);--hub-list-cards-shadow: none;--hub-list-cards-hover-bg: var(--hub-list-item-hover-bg);--hub-list-cards-hover-shadow: var(--hub-list-cards-shadow);--hub-list-cards-transition: background-color .15s ease-in-out, box-shadow .15s ease-in-out;--hub-list-top-bar-gap: var(--hub-ref-space-2, .5rem);--hub-list-top-bar-justify-content: end;--hub-list-top-bar-align-items: center;--hub-list-top-bar-wrap: wrap;--hub-list-batch-actions-gap: var(--hub-ref-space-2, .5rem);--hub-list-bottom-bar-gap: var(--hub-ref-space-3, 1rem);--hub-list-bottom-bar-justify-content: space-around;--hub-list-bottom-bar-align-items: center;--hub-list-bottom-bar-wrap: wrap;--hub-list-bottom-bar-paginator-order: 1;--hub-list-bottom-bar-settings-order: 2;--hub-list-bottom-bar-info-order: 3;--hub-list-bottom-bar-paginator-flex: 0 0 auto;--hub-list-bottom-bar-settings-flex: 0 0 auto;--hub-list-bottom-bar-info-flex: 0 0 auto;--hub-list-search-btn-bg: var(--hub-ref-surface-2, #f8f9fa);--hub-list-search-btn-color: var(--hub-sys-text-primary, #212529);--hub-list-search-button-min-width: 2.75rem;--hub-list-search-input-bg: var(--hub-sys-surface-page, #ffffff);--hub-list-search-input-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-list-search-input-border-radius: var(--hub-ref-radius-sm, .25rem);--hub-list-search-input-color: var(--hub-sys-text-primary, #212529);--hub-list-search-border-color: var(--hub-list-search-input-border-color);--hub-list-search-border-width: 1px;--hub-list-search-border-radius: var(--hub-list-search-input-border-radius);--hub-list-search-input-padding-x: .75rem;--hub-list-search-input-padding-y: .375rem;--hub-list-search-input-font-size: 1rem;--hub-list-action-btn-bg: var(--hub-sys-surface-page, #ffffff);--hub-list-action-btn-color: var(--hub-list-item-color);--hub-list-action-btn-border-color: var(--hub-list-item-border-color);--hub-list-action-btn-border-radius: var(--hub-list-item-border-radius);--hub-list-action-btn-padding-y: .375rem;--hub-list-action-btn-padding-x: .75rem;--hub-list-action-btn-hover-bg: var(--hub-list-item-hover-bg)}:host{display:flex;flex-direction:column;gap:var(--hub-list-gap);padding:var(--hub-list-padding-y) var(--hub-list-padding-x);background-color:var(--hub-list-bg);border-radius:var(--hub-list-border-radius)}:host .hub-list__bottom-bar{display:flex;justify-content:var(--hub-list-bottom-bar-justify-content);align-items:var(--hub-list-bottom-bar-align-items);flex-wrap:var(--hub-list-bottom-bar-wrap);gap:var(--hub-list-bottom-bar-gap)}:host .hub-list__bottom-bar-paginator{order:var(--hub-list-bottom-bar-paginator-order);flex:var(--hub-list-bottom-bar-paginator-flex);overflow:auto;margin:0}:host .hub-list__bottom-bar-settings{order:var(--hub-list-bottom-bar-settings-order);flex:var(--hub-list-bottom-bar-settings-flex);margin:0}:host .hub-list__bottom-bar-info{order:var(--hub-list-bottom-bar-info-order);flex:var(--hub-list-bottom-bar-info-flex);margin:0}:host .hub-list__top-bar{display:flex;align-items:var(--hub-list-top-bar-align-items);justify-content:var(--hub-list-top-bar-justify-content);flex-wrap:var(--hub-list-top-bar-wrap);gap:var(--hub-list-top-bar-gap);direction:ltr}:host .hub-list__batch-actions{display:flex;flex-wrap:nowrap;align-items:center;gap:var(--hub-list-batch-actions-gap)}:host .hub-list__batch-action-btn{display:inline-flex;align-items:center;gap:.35rem}:host .hub-list__batch-action-btn--default{display:inline-flex;align-items:center;justify-content:center;gap:.35rem;padding:var(--hub-list-action-btn-padding-y) var(--hub-list-action-btn-padding-x);color:var(--hub-list-action-btn-color);background-color:var(--hub-list-action-btn-bg);border:1px solid var(--hub-list-action-btn-border-color);border-radius:var(--hub-list-action-btn-border-radius);transition:background-color .15s ease-in-out,border-color .15s ease-in-out,color .15s ease-in-out}:host .hub-list__batch-action-btn--default:hover:not(:disabled){background-color:var(--hub-list-action-btn-hover-bg)}:host .hub-list__search{margin-left:auto}:host.hub-list--rtl{direction:rtl}:host.hub-list--rtl .hub-list__items .hub-list__items{padding-left:0;padding-right:var(--hub-list-item-padding-x)}:host.hub-list--rtl .hub-list__search{direction:ltr;order:1;margin-left:0;margin-right:auto}:host.hub-list--rtl .hub-list__search-input{direction:ltr;text-align:right;border-radius:0 var(--hub-list-search-border-radius) var(--hub-list-search-border-radius) 0!important}:host.hub-list--rtl .hub-list__search-btn{border-radius:var(--hub-list-search-border-radius) 0 0 var(--hub-list-search-border-radius)!important}:host.hub-list--rtl .hub-list__batch-actions{order:2;flex-direction:row-reverse;margin-left:auto;margin-right:0}.hub-list__items{display:flex;flex-direction:column;gap:var(--hub-list-items-gap);background-color:var(--hub-list-items-bg);list-style:none;margin:0;padding:0}.hub-list__items .hub-list__items{margin-top:var(--hub-list-children-gap);padding-left:var(--hub-list-item-padding-x);padding-right:0;padding-top:0;padding-bottom:0;border-radius:0}.hub-list__search{display:flex;flex-wrap:nowrap;align-items:stretch;justify-content:end}.hub-list__search-input{position:relative;flex:1 1 auto;width:1%;min-width:0;display:block;width:100%;padding:var(--hub-list-search-input-padding-y) var(--hub-list-search-input-padding-x);font-size:var(--hub-list-search-input-font-size);font-weight:400;line-height:1.5;background-color:var(--hub-list-search-input-bg);border-color:var(--hub-list-search-border-color)!important;color:var(--hub-list-search-input-color);border:var(--hub-list-search-border-width) solid var(--hub-list-search-border-color);border-radius:var(--hub-list-search-border-radius) 0 0 var(--hub-list-search-border-radius)!important}.hub-list__search-btn{display:inline-flex;align-items:center;justify-content:center;min-width:var(--hub-list-search-button-min-width);padding:var(--hub-list-search-input-padding-y) var(--hub-list-search-input-padding-x);background-color:var(--hub-list-search-btn-bg)!important;color:var(--hub-list-search-btn-color)!important;border-color:var(--hub-list-search-border-color)!important;border:var(--hub-list-search-border-width) solid var(--hub-list-search-border-color);border-radius:0 var(--hub-list-search-border-radius) var(--hub-list-search-border-radius) 0!important;cursor:pointer}.hub-list__search-icon{display:inline-block;width:var(--hub-ref-icon-size, 1em);height:var(--hub-ref-icon-size, 1em);background-color:currentColor;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z'/%3E%3C/svg%3E\")}.hub-list__item{display:flex;flex-direction:column;padding:var(--hub-list-item-padding-y) var(--hub-list-item-padding-x);background-color:var(--hub-list-item-bg);color:var(--hub-list-item-color);border-radius:var(--hub-list-item-border-radius);transition:background-color .15s ease-in-out;position:relative;border:var(--hub-list-item-border-width) solid var(--hub-list-item-border-color)}.hub-list__item--clickable{cursor:pointer}.hub-list__item--clickable:hover{background-color:var(--hub-list-item-hover-bg)}.hub-list__item--selected{background-color:var(--hub-list-item-selected-bg)!important;color:var(--hub-list-item-selected-color);border-color:var(--hub-list-item-selected-bg)}.hub-list__item--selected .hub-list__label,.hub-list__item--selected .hub-list__actions button{color:var(--hub-list-item-selected-color)}.hub-list__item--empty{background-color:var(--hub-list-empty-bg);color:var(--hub-list-empty-color);padding:var(--hub-list-empty-padding-y, var(--hub-ref-space-3, 1rem)) var(--hub-list-empty-padding-x, var(--hub-ref-space-3, 1rem));border-color:var(--hub-list-empty-border-color);text-align:center}.hub-list__items--cards{display:grid;grid-template-columns:repeat(var(--hub-list-cards-columns),minmax(min(100%,var(--hub-list-cards-min-column-width)),1fr));gap:var(--hub-list-cards-row-gap) var(--hub-list-cards-column-gap)}.hub-list__items--cards>.hub-list__item{height:100%;background-color:var(--hub-list-cards-bg);color:var(--hub-list-cards-color);padding:var(--hub-list-cards-padding-y) var(--hub-list-cards-padding-x);border:var(--hub-list-cards-border-width) solid var(--hub-list-cards-border-color);border-radius:var(--hub-list-cards-border-radius);box-shadow:var(--hub-list-cards-shadow);transition:var(--hub-list-cards-transition)}.hub-list__items--cards>.hub-list__item.hub-list__item--clickable:hover{background-color:var(--hub-list-cards-hover-bg);box-shadow:var(--hub-list-cards-hover-shadow)}.hub-list__items--cards .hub-list__item-content{align-items:flex-start}.hub-list__items--cards .hub-list__label{overflow:visible;text-overflow:initial;white-space:normal}.hub-list__label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex-grow:1}.hub-list__item-content{display:flex;justify-content:space-between;align-items:center;gap:var(--hub-list-item-gap);width:100%}.hub-list__checkbox{width:var(--hub-list-checkbox-size);height:var(--hub-list-checkbox-size);flex-shrink:0;cursor:pointer}.hub-list__actions{display:flex;align-items:center;gap:var(--hub-ref-space-2, .5rem)}.hub-list__chevron{padding:0;font-size:var(--hub-list-chevron-size);display:flex;align-items:center;justify-content:center;background:transparent;border:none;cursor:pointer}.hub-list__no-results{display:flex;align-items:center;gap:var(--hub-ref-space-2, .5rem)}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox]:not([ngNoCva])[formControlName],input[type=checkbox]:not([ngNoCva])[formControl],input[type=checkbox]:not([ngNoCva])[ngModel]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple]):not([ngNoCva])[formControlName],select:not([multiple]):not([ngNoCva])[formControl],select:not([multiple]):not([ngNoCva])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: PaginatorComponent, selector: "hub-paginator, paginable-table-paginator", inputs: ["rtl", "page", "numberOfPages"], outputs: ["pageChange"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: PaginableStateOutlet, selector: "hub-state-outlet", inputs: ["template", "instanceDefault", "globalDefault", "fallback", "context"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: UcfirstPipe, name: "ucfirst" }] });
|
|
3072
|
+
], queries: [{ propertyName: "itemTpt", first: true, predicate: PaginableListItemDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "noResultsTpt", first: true, predicate: PaginableNoResultsDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "loadingTpt", first: true, predicate: PaginableLoadingDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "errorTpt", first: true, predicate: PaginableErrorDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "placeholderTpt", first: true, predicate: HubListDragPlaceholderDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "previewTpt", first: true, predicate: HubListDragPreviewDirective, descendants: true, read: TemplateRef, isSignal: true }], ngImport: i0, template: "@if (batchActions.length || options.searchable) {\n\t<div class=\"hub-list__top-bar\">\n\t\t@if (batchActions.length) {\n\t\t\t<div class=\"hub-list__batch-actions\">\n\t\t\t\t@for (action of batchActions; track $index) {\n\t\t\t\t\t@if (!$any(action).buttons?.length) {\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tclass=\"hub-list__batch-action-btn\"\n\t\t\t\t\t\t\t[ngClass]=\"getBatchActionClassList(action)\"\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t(click)=\"handleBatchAction(action)\"\n\t\t\t\t\t\t\t[disabled]=\"!value.length\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t@if (action.icon) {\n\t\t\t\t\t\t\t\t<i class=\"{{ action.icon }}\"></i>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t{{ action.title }}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\t\t@if (options.searchable) {\n\t\t\t<div class=\"hub-list__search\">\n\t\t\t\t@if (isRtl()) {\n\t\t\t\t\t<button class=\"hub-list__search-btn\" type=\"button\" (click)=\"filter()\">\n\t\t\t\t\t\t<i class=\"hub-list__search-icon\" aria-hidden=\"true\"></i>\n\t\t\t\t\t</button>\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tclass=\"hub-list__search-input\"\n\t\t\t\t\t\t[formControl]=\"searchFG\"\n\t\t\t\t\t\t[placeholder]=\"'SEARCH' | translate | ucfirst\"\n\t\t\t\t\t\t[attr.aria-label]=\"'SEARCH' | translate | ucfirst\"\n\t\t\t\t\t\t(click)=\"$event.stopPropagation()\"\n\t\t\t\t\t\t(keyup.enter)=\"filter()\"\n\t\t\t\t\t/>\n\t\t\t\t} @else {\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tclass=\"hub-list__search-input\"\n\t\t\t\t\t\t[formControl]=\"searchFG\"\n\t\t\t\t\t\t[placeholder]=\"'SEARCH' | translate | ucfirst\"\n\t\t\t\t\t\t[attr.aria-label]=\"'SEARCH' | translate | ucfirst\"\n\t\t\t\t\t\t(click)=\"$event.stopPropagation()\"\n\t\t\t\t\t\t(keyup.enter)=\"filter()\"\n\t\t\t\t\t/>\n\t\t\t\t\t<button class=\"hub-list__search-btn\" type=\"button\" (click)=\"filter()\">\n\t\t\t\t\t\t<i class=\"hub-list__search-icon\" aria-hidden=\"true\"></i>\n\t\t\t\t\t</button>\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\t</div>\n}\n\n@if (loading()) {\n\t<ul class=\"hub-list__items hub-list__items--root\">\n\t\t<li class=\"hub-list__item hub-list__item--state\">\n\t\t\t<hub-state-outlet\n\t\t\t\t[template]=\"loadingTpt()\"\n\t\t\t\t[instanceDefault]=\"loadingComponent()\"\n\t\t\t\t[globalDefault]=\"defaults.loading()\"\n\t\t\t\t[fallback]=\"defaultLoadingTpt\"\n\t\t\t/>\n\t\t</li>\n\t</ul>\n} @else if (error()) {\n\t<ul class=\"hub-list__items hub-list__items--root\">\n\t\t<li class=\"hub-list__item hub-list__item--state\">\n\t\t\t<hub-state-outlet\n\t\t\t\t[template]=\"errorTpt()\"\n\t\t\t\t[instanceDefault]=\"errorComponent()\"\n\t\t\t\t[globalDefault]=\"defaults.error()\"\n\t\t\t\t[fallback]=\"defaultErrorTpt\"\n\t\t\t\t[context]=\"{ error: error() }\"\n\t\t\t/>\n\t\t</li>\n\t</ul>\n} @else if (!getVisibleItems(items, true).length) {\n\t<ul class=\"hub-list__items hub-list__items--root\">\n\t\t<li class=\"hub-list__item hub-list__item--empty\">\n\t\t\t<hub-state-outlet\n\t\t\t\t[template]=\"noResultsTpt()\"\n\t\t\t\t[instanceDefault]=\"noResultsComponent()\"\n\t\t\t\t[globalDefault]=\"defaults.noResults()\"\n\t\t\t\t[fallback]=\"defaultNoResultsTpt\"\n\t\t\t/>\n\t\t</li>\n\t</ul>\n} @else {\n\t<ng-container\n\t\t[ngTemplateOutlet]=\"containerTpt\"\n\t\t[ngTemplateOutletContext]=\"{\n\t\t\tcontrols: getVisibleControls(form.controls, true),\n\t\t\tcontrolsForm: form,\n\t\t\titemsFull: items,\n\t\t\titems: getVisibleItems(items, true),\n\t\t\tparentItem: null,\n\t\t\tisRoot: true,\n\t\t\tdepth: 0\n\t\t}\"\n\t></ng-container>\n}\n\n<ng-template\n\t#containerTpt\n\tlet-controls=\"controls\"\n\tlet-controlsForm=\"controlsForm\"\n\tlet-itemsFull=\"itemsFull\"\n\tlet-isRoot=\"isRoot\"\n\tlet-items=\"items\"\n\tlet-parentItem=\"parentItem\"\n\tlet-depth=\"depth\"\n>\n\t@let containerRef = makeContainerRef(controlsForm, itemsFull, parentItem, depth);\n\t<ul\n\t\tclass=\"hub-list__items\"\n\t\t[class.hub-list__items--root]=\"isRoot\"\n\t\t[class.hub-list__items--cards]=\"isRoot && isCardsDisplay()\"\n\t\t[attr.data-hub-container-key]=\"containerRef.key\"\n\t\t(dragover)=\"onContainerDragOver($event, containerRef)\"\n\t\t(drop)=\"onContainerDrop($event)\"\n\t>\n\t\t@for (formGroup of controls; track getTrackKey(formGroup.get('data')?.value, $index); let index = $index) {\n\t\t\t@let absIndex = absoluteIndex(index, isRoot);\n\t\t\t@if (sortable() && showPlaceholderBefore(controlsForm, absIndex)) {\n\t\t\t\t<li class=\"hub-list__placeholder\" aria-hidden=\"true\">\n\t\t\t\t\t<ng-container\n\t\t\t\t\t\t[ngTemplateOutlet]=\"placeholderTpt() || defaultPlaceholderTpt\"\n\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ item: dragService.active()?.item }\"\n\t\t\t\t\t></ng-container>\n\t\t\t\t</li>\n\t\t\t}\n\t\t\t<li\n\t\t\t\tclass=\"hub-list__item\"\n\t\t\t\t[ngClass]=\"_getRowClass(items[index])\"\n\t\t\t\t[class.hub-list__item--clickable]=\"clickFn()\"\n\t\t\t\t[class.hub-list__item--selected]=\"formGroup.get('selected')?.value\"\n\t\t\t\t[class.hub-list__item--dragging]=\"isRowDragging(items[index])\"\n\t\t\t\t[class.hub-list__item--drag-disabled]=\"sortable() && isRowDisabled(items[index])\"\n\t\t\t\t[attr.draggable]=\"isDragEnabled(items[index]) ? true : null\"\n\t\t\t\t[attr.data-hub-index]=\"absIndex\"\n\t\t\t\t[attr.tabindex]=\"keyboardSortable() && isDragEnabled(items[index]) ? 0 : null\"\n\t\t\t\t[attr.aria-roledescription]=\"sortable() ? ('DRAG_SORTABLE_ITEM' | translate) : null\"\n\t\t\t\t[attr.aria-grabbed]=\"sortable() ? isRowDragging(items[index]) : null\"\n\t\t\t\t[formGroup]=\"formGroup\"\n\t\t\t\t(click)=\"onItemClick(formGroup.value, depth, index, $event); $event.preventDefault(); $event.stopPropagation()\"\n\t\t\t\t(dragstart)=\"onDragStart($event, containerRef, absIndex, items[index])\"\n\t\t\t\t(dragenter)=\"onDragOver($event, containerRef, absIndex)\"\n\t\t\t\t(dragover)=\"onDragOver($event, containerRef, absIndex)\"\n\t\t\t\t(drop)=\"onDrop($event)\"\n\t\t\t\t(dragend)=\"onDragEnd()\"\n\t\t\t\t(pointerdown)=\"onPointerDown($event, containerRef, absIndex, items[index])\"\n\t\t\t\t(keydown)=\"onItemKeydown($event, containerRef, absIndex, items[index])\"\n\t\t\t>\n\t\t\t\t@if (formGroup.value; as item) {\n\t\t\t\t\t<div class=\"hub-list__item-content\">\n\t\t\t\t\t\t@if (multipleSelectable()) {\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\tclass=\"hub-list__checkbox\"\n\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\tdraggable=\"false\"\n\t\t\t\t\t\t\t\tformControlName=\"selected\"\n\t\t\t\t\t\t\t\t(change)=\"onSelectionChange()\"\n\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation()\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t<div class=\"hub-list__label\">\n\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"itemTpt() || defaultItemtTpt\"\n\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{\n\t\t\t\t\t\t\t\t\tdata: items[index],\n\t\t\t\t\t\t\t\t\tdepth,\n\t\t\t\t\t\t\t\t\tindex,\n\t\t\t\t\t\t\t\t\tcollapsed: !!formGroup.get('collapsed').value,\n\t\t\t\t\t\t\t\t\tselected: formGroup.get('selected').value\n\t\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t@if (item[bindChildren()]?.length) {\n\t\t\t\t\t\t\t<div class=\"hub-list__actions\">\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tclass=\"hub-list__chevron\"\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tdraggable=\"false\"\n\t\t\t\t\t\t\t\t\t(click)=\"\n\t\t\t\t\t\t\t\t\t\ttoggleCollapsed(formGroup.get('collapsed'));\n\t\t\t\t\t\t\t\t\t\t$event.preventDefault();\n\t\t\t\t\t\t\t\t\t\t$event.stopPropagation()\n\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<i\n\t\t\t\t\t\t\t\t\t\tclass=\"hub-table__icon\"\n\t\t\t\t\t\t\t\t\t\t[ngClass]=\"\n\t\t\t\t\t\t\t\t\t\t\titem.collapsed ? 'hub-table__icon--chevron-down' : 'hub-table__icon--chevron-up'\n\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t></i>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t\t@if (item[bindChildren()]?.length && !item.collapsed) {\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"containerTpt\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{\n\t\t\t\t\t\t\t\tcontrols: formGroup.get('children')?.controls,\n\t\t\t\t\t\t\t\tcontrolsForm: formGroup.get('children'),\n\t\t\t\t\t\t\t\titemsFull: items[index][bindChildren()],\n\t\t\t\t\t\t\t\titems: items[index][bindChildren()],\n\t\t\t\t\t\t\t\tparentItem: items[index],\n\t\t\t\t\t\t\t\tisRoot: false,\n\t\t\t\t\t\t\t\tdepth: depth + 1\n\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t</li>\n\t\t}\n\t\t@if (sortable() && showPlaceholderAtEnd(controlsForm, isRoot, controls.length)) {\n\t\t\t<li class=\"hub-list__placeholder\" aria-hidden=\"true\">\n\t\t\t\t<ng-container\n\t\t\t\t\t[ngTemplateOutlet]=\"placeholderTpt() || defaultPlaceholderTpt\"\n\t\t\t\t\t[ngTemplateOutletContext]=\"{ item: dragService.active()?.item }\"\n\t\t\t\t></ng-container>\n\t\t\t</li>\n\t\t}\n\t</ul>\n</ng-template>\n\n@if (sortable() && keyboardSortable()) {\n\t<div class=\"hub-list__sr-only\" role=\"status\" aria-live=\"polite\">\n\t\t@if (announcement(); as message) {\n\t\t\t{{ message.key | translate: message.params }}\n\t\t}\n\t</div>\n}\n\n@if (paginate()) {\n\t<div class=\"hub-list__bottom-bar\">\n\t\t<hub-paginator\n\t\t\tclass=\"hub-list__bottom-bar-paginator\"\n\t\t\t[(page)]=\"page\"\n\t\t\t[numberOfPages]=\"numberOfPages()\"\n\t\t\t[rtl]=\"isRtl()\"\n\t\t></hub-paginator>\n\t\t<div class=\"hub-list__bottom-bar-settings hub-paginator__settings\">\n\t\t\t<label class=\"hub-paginator__label\"> {{ 'ROWS_PER_PAGE' | translate | ucfirst }}: </label>\n\t\t\t<select\n\t\t\t\tclass=\"hub-paginator__select\"\n\t\t\t\t[ngModel]=\"perPage()\"\n\t\t\t\t(ngModelChange)=\"onPerPageChange($event)\"\n\t\t\t\t[ngModelOptions]=\"{ standalone: true }\"\n\t\t\t>\n\t\t\t\t@for (option of perPageOptions(); track option) {\n\t\t\t\t\t<option [ngValue]=\"option\" class=\"hub-paginator__select-option\">\n\t\t\t\t\t\t{{ option }}\n\t\t\t\t\t</option>\n\t\t\t\t}\n\t\t\t</select>\n\t\t</div>\n\t\t<p class=\"hub-list__bottom-bar-info hub-paginator__info\">\n\t\t\t{{\n\t\t\t\t'SHOWING_X_OF_Y_ROWS'\n\t\t\t\t\t| translate\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\tamount: getVisibleItems(items, true).length,\n\t\t\t\t\t\t\t\ttotal: getEffectiveTotalItems()\n\t\t\t\t\t\t }\n\t\t\t\t\t| ucfirst\n\t\t\t}}\n\t\t</p>\n\t</div>\n}\n\n<ng-template #defaultNoResultsTpt>\n\t<div class=\"hub-list__no-results\" role=\"alert\">\n\t\t<i class=\"hub-table__icon hub-table__icon--info hub-table__icon--2x\" aria-hidden=\"true\"></i>\n\t\t{{ 'NO_RESULTS_FOUND' | translate | ucfirst }}\n\t</div>\n</ng-template>\n\n<ng-template #defaultLoadingTpt>\n\t<div class=\"hub-list__loading\" role=\"status\">\n\t\t<i class=\"hub-table__icon hub-table__icon--info hub-table__icon--2x\" aria-hidden=\"true\"></i>\n\t\t{{ 'LOADING' | translate | ucfirst }}\n\t</div>\n</ng-template>\n\n<ng-template #defaultErrorTpt>\n\t<div class=\"hub-list__error text-danger\" role=\"alert\">\n\t\t<i class=\"hub-table__icon hub-table__icon--info hub-table__icon--2x\" aria-hidden=\"true\"></i>\n\t\t{{ 'ERROR_OCURRED' | translate | ucfirst }}\n\t</div>\n</ng-template>\n\n<ng-template #defaultPlaceholderTpt>\n\t<div class=\"hub-list__placeholder-inner\" aria-hidden=\"true\"></div>\n</ng-template>\n\n<ng-template #defaultItemtTpt let-data=\"data\">\n\t{{ data[bindLabel()] }}\n</ng-template>\n", styles: [":root,:host{--hub-list-checkbox-size: 1rem;--hub-list-chevron-size: var(--hub-ref-icon-size, 1em);--hub-list-bg: transparent;--hub-list-border-radius: var(--hub-ref-radius-md, .375rem);--hub-list-padding-x: var(--hub-ref-space-0, 0);--hub-list-padding-y: var(--hub-ref-space-0, 0);--hub-list-gap: var(--hub-ref-space-4, 1.5rem);--hub-list-items-bg: transparent;--hub-list-items-gap: var(--hub-ref-space-2, .5rem);--hub-list-empty-bg: var(--hub-ref-surface-2, #f8f9fa);--hub-list-empty-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-list-empty-color: var(--hub-sys-text-muted, #6c757d);--hub-list-empty-padding-x: var(--hub-ref-space-3, 1rem);--hub-list-empty-padding-y: var(--hub-ref-space-3, 1rem);--hub-list-item-bg: var(--hub-sys-surface-page, #ffffff);--hub-list-item-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-list-item-border-width: 1px;--hub-list-item-border-radius: var(--hub-ref-radius-sm, .25rem);--hub-list-item-color: var(--hub-sys-text-primary, #212529);--hub-list-item-gap: var(--hub-ref-space-2, .5rem);--hub-list-item-hover-bg: var(--hub-ref-surface-2, #f8f9fa);--hub-list-item-padding-x: var(--hub-ref-space-3, 1rem);--hub-list-item-padding-y: var(--hub-ref-space-2, .5rem);--hub-list-children-gap: var(--hub-list-item-padding-y);--hub-list-accent: var(--hub-sys-color-primary, #0d6efd);--hub-list-item-selected-bg: var(--hub-list-accent);--hub-list-item-selected-color: var(--hub-ref-color-white, #fff);--hub-list-cards-min-column-width: 18rem;--hub-list-cards-gap: var(--hub-list-items-gap);--hub-list-cards-columns: auto-fit;--hub-list-cards-row-gap: var(--hub-list-cards-gap);--hub-list-cards-column-gap: var(--hub-list-cards-gap);--hub-list-cards-bg: var(--hub-list-item-bg, transparent);--hub-list-cards-color: var(--hub-list-item-color);--hub-list-cards-padding-x: var(--hub-list-item-padding-x);--hub-list-cards-padding-y: var(--hub-list-item-padding-y);--hub-list-cards-border-color: var(--hub-list-item-border-color);--hub-list-cards-border-width: var(--hub-list-item-border-width, 1px);--hub-list-cards-border-radius: var(--hub-list-item-border-radius);--hub-list-cards-shadow: none;--hub-list-cards-hover-bg: var(--hub-list-item-hover-bg);--hub-list-cards-hover-shadow: var(--hub-list-cards-shadow);--hub-list-cards-transition: background-color .15s ease-in-out, box-shadow .15s ease-in-out;--hub-list-top-bar-gap: var(--hub-ref-space-2, .5rem);--hub-list-top-bar-justify-content: end;--hub-list-top-bar-align-items: center;--hub-list-top-bar-wrap: wrap;--hub-list-batch-actions-gap: var(--hub-ref-space-2, .5rem);--hub-list-bottom-bar-gap: var(--hub-ref-space-3, 1rem);--hub-list-bottom-bar-justify-content: space-around;--hub-list-bottom-bar-align-items: center;--hub-list-bottom-bar-wrap: wrap;--hub-list-bottom-bar-paginator-order: 1;--hub-list-bottom-bar-settings-order: 2;--hub-list-bottom-bar-info-order: 3;--hub-list-bottom-bar-paginator-flex: 0 0 auto;--hub-list-bottom-bar-settings-flex: 0 0 auto;--hub-list-bottom-bar-info-flex: 0 0 auto;--hub-list-search-btn-bg: var(--hub-ref-surface-2, #f8f9fa);--hub-list-search-btn-color: var(--hub-sys-text-primary, #212529);--hub-list-search-button-min-width: 2.75rem;--hub-list-search-input-bg: var(--hub-sys-surface-page, #ffffff);--hub-list-search-input-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-list-search-input-border-radius: var(--hub-ref-radius-sm, .25rem);--hub-list-search-input-color: var(--hub-sys-text-primary, #212529);--hub-list-search-border-color: var(--hub-list-search-input-border-color);--hub-list-search-border-width: 1px;--hub-list-search-border-radius: var(--hub-list-search-input-border-radius);--hub-list-search-input-padding-x: .75rem;--hub-list-search-input-padding-y: .375rem;--hub-list-search-input-font-size: 1rem;--hub-list-action-btn-bg: var(--hub-sys-surface-page, #ffffff);--hub-list-action-btn-color: var(--hub-list-item-color);--hub-list-action-btn-border-color: var(--hub-list-item-border-color);--hub-list-action-btn-border-radius: var(--hub-list-item-border-radius);--hub-list-action-btn-padding-y: .375rem;--hub-list-action-btn-padding-x: .75rem;--hub-list-action-btn-hover-bg: var(--hub-list-item-hover-bg);--hub-list-drag-handle-color: var(--hub-sys-text-muted, #6c757d);--hub-list-drag-handle-cursor: grab;--hub-list-drag-handle-size: var(--hub-ref-icon-size, 1em);--hub-list-item-dragging-opacity: .5;--hub-list-item-dragging-cursor: grabbing;--hub-list-drop-target-outline-color: var(--hub-list-accent);--hub-list-drop-target-outline-width: 2px;--hub-list-placeholder-bg: var(--hub-ref-surface-2, #f8f9fa);--hub-list-placeholder-border-color: var(--hub-list-accent);--hub-list-placeholder-border-width: 2px;--hub-list-placeholder-border-style: dashed;--hub-list-placeholder-border-radius: var(--hub-list-item-border-radius);--hub-list-placeholder-min-height: 2.5rem;--hub-list-ghost-opacity: .85;--hub-list-ghost-shadow: 0 .5rem 1rem rgba(0, 0, 0, .15)}:host{display:flex;flex-direction:column;gap:var(--hub-list-gap);padding:var(--hub-list-padding-y) var(--hub-list-padding-x);background-color:var(--hub-list-bg);border-radius:var(--hub-list-border-radius)}:host .hub-list__bottom-bar{display:flex;justify-content:var(--hub-list-bottom-bar-justify-content);align-items:var(--hub-list-bottom-bar-align-items);flex-wrap:var(--hub-list-bottom-bar-wrap);gap:var(--hub-list-bottom-bar-gap)}:host .hub-list__bottom-bar-paginator{order:var(--hub-list-bottom-bar-paginator-order);flex:var(--hub-list-bottom-bar-paginator-flex);overflow:auto;margin:0}:host .hub-list__bottom-bar-settings{order:var(--hub-list-bottom-bar-settings-order);flex:var(--hub-list-bottom-bar-settings-flex);margin:0}:host .hub-list__bottom-bar-info{order:var(--hub-list-bottom-bar-info-order);flex:var(--hub-list-bottom-bar-info-flex);margin:0}:host .hub-list__top-bar{display:flex;align-items:var(--hub-list-top-bar-align-items);justify-content:var(--hub-list-top-bar-justify-content);flex-wrap:var(--hub-list-top-bar-wrap);gap:var(--hub-list-top-bar-gap);direction:ltr}:host .hub-list__batch-actions{display:flex;flex-wrap:nowrap;align-items:center;gap:var(--hub-list-batch-actions-gap)}:host .hub-list__batch-action-btn{display:inline-flex;align-items:center;gap:.35rem}:host .hub-list__batch-action-btn--default{display:inline-flex;align-items:center;justify-content:center;gap:.35rem;padding:var(--hub-list-action-btn-padding-y) var(--hub-list-action-btn-padding-x);color:var(--hub-list-action-btn-color);background-color:var(--hub-list-action-btn-bg);border:1px solid var(--hub-list-action-btn-border-color);border-radius:var(--hub-list-action-btn-border-radius);transition:background-color .15s ease-in-out,border-color .15s ease-in-out,color .15s ease-in-out}:host .hub-list__batch-action-btn--default:hover:not(:disabled){background-color:var(--hub-list-action-btn-hover-bg)}:host .hub-list__search{margin-left:auto}:host.hub-list--rtl{direction:rtl}:host.hub-list--rtl .hub-list__items .hub-list__items{padding-left:0;padding-right:var(--hub-list-item-padding-x)}:host.hub-list--rtl .hub-list__search{direction:ltr;order:1;margin-left:0;margin-right:auto}:host.hub-list--rtl .hub-list__search-input{direction:ltr;text-align:right;border-radius:0 var(--hub-list-search-border-radius) var(--hub-list-search-border-radius) 0!important}:host.hub-list--rtl .hub-list__search-btn{border-radius:var(--hub-list-search-border-radius) 0 0 var(--hub-list-search-border-radius)!important}:host.hub-list--rtl .hub-list__batch-actions{order:2;flex-direction:row-reverse;margin-left:auto;margin-right:0}.hub-list__items{display:flex;flex-direction:column;gap:var(--hub-list-items-gap);background-color:var(--hub-list-items-bg);list-style:none;margin:0;padding:0}.hub-list__items .hub-list__items{margin-top:var(--hub-list-children-gap);padding-left:var(--hub-list-item-padding-x);padding-right:0;padding-top:0;padding-bottom:0;border-radius:0}.hub-list__search{display:flex;flex-wrap:nowrap;align-items:stretch;justify-content:end}.hub-list__search-input{position:relative;flex:1 1 auto;width:1%;min-width:0;display:block;width:100%;padding:var(--hub-list-search-input-padding-y) var(--hub-list-search-input-padding-x);font-size:var(--hub-list-search-input-font-size);font-weight:var(--hub-ref-font-weight-base, 400);line-height:var(--hub-ref-line-height-base, 1.5);background-color:var(--hub-list-search-input-bg);border-color:var(--hub-list-search-border-color)!important;color:var(--hub-list-search-input-color);border:var(--hub-list-search-border-width) solid var(--hub-list-search-border-color);border-radius:var(--hub-list-search-border-radius) 0 0 var(--hub-list-search-border-radius)!important}.hub-list__search-btn{display:inline-flex;align-items:center;justify-content:center;min-width:var(--hub-list-search-button-min-width);padding:var(--hub-list-search-input-padding-y) var(--hub-list-search-input-padding-x);background-color:var(--hub-list-search-btn-bg)!important;color:var(--hub-list-search-btn-color)!important;border-color:var(--hub-list-search-border-color)!important;border:var(--hub-list-search-border-width) solid var(--hub-list-search-border-color);border-radius:0 var(--hub-list-search-border-radius) var(--hub-list-search-border-radius) 0!important;cursor:pointer}.hub-list__search-icon{display:inline-block;width:var(--hub-ref-icon-size, 1em);height:var(--hub-ref-icon-size, 1em);background-color:currentColor;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z'/%3E%3C/svg%3E\")}.hub-list__item{display:flex;flex-direction:column;padding:var(--hub-list-item-padding-y) var(--hub-list-item-padding-x);background-color:var(--hub-list-item-bg);color:var(--hub-list-item-color);border-radius:var(--hub-list-item-border-radius);transition:background-color .15s ease-in-out;position:relative;border:var(--hub-list-item-border-width) solid var(--hub-list-item-border-color)}.hub-list__item--clickable{cursor:pointer}.hub-list__item--clickable:hover{background-color:var(--hub-list-item-hover-bg)}.hub-list__item--selected{background-color:var(--hub-list-item-selected-bg)!important;color:var(--hub-list-item-selected-color);border-color:var(--hub-list-item-selected-bg)}.hub-list__item--selected .hub-list__label,.hub-list__item--selected .hub-list__actions button{color:var(--hub-list-item-selected-color)}.hub-list__item--empty{background-color:var(--hub-list-empty-bg);color:var(--hub-list-empty-color);padding:var(--hub-list-empty-padding-y, var(--hub-ref-space-3, 1rem)) var(--hub-list-empty-padding-x, var(--hub-ref-space-3, 1rem));border-color:var(--hub-list-empty-border-color);text-align:center}.hub-list__items--cards{display:grid;grid-template-columns:repeat(var(--hub-list-cards-columns),minmax(min(100%,var(--hub-list-cards-min-column-width)),1fr));gap:var(--hub-list-cards-row-gap) var(--hub-list-cards-column-gap)}.hub-list__items--cards>.hub-list__item{height:100%;background-color:var(--hub-list-cards-bg);color:var(--hub-list-cards-color);padding:var(--hub-list-cards-padding-y) var(--hub-list-cards-padding-x);border:var(--hub-list-cards-border-width) solid var(--hub-list-cards-border-color);border-radius:var(--hub-list-cards-border-radius);box-shadow:var(--hub-list-cards-shadow);transition:var(--hub-list-cards-transition)}.hub-list__items--cards>.hub-list__item.hub-list__item--clickable:hover{background-color:var(--hub-list-cards-hover-bg);box-shadow:var(--hub-list-cards-hover-shadow)}.hub-list__items--cards .hub-list__item-content{align-items:flex-start}.hub-list__items--cards .hub-list__label{overflow:visible;text-overflow:initial;white-space:normal}.hub-list__label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex-grow:1}.hub-list__item-content{display:flex;justify-content:space-between;align-items:center;gap:var(--hub-list-item-gap);width:100%}.hub-list__checkbox{width:var(--hub-list-checkbox-size);height:var(--hub-list-checkbox-size);flex-shrink:0;cursor:pointer}.hub-list__actions{display:flex;align-items:center;gap:var(--hub-ref-space-2, .5rem)}.hub-list__chevron{padding:0;font-size:var(--hub-list-chevron-size);display:flex;align-items:center;justify-content:center;background:transparent;border:none;cursor:pointer}.hub-list__no-results{display:flex;align-items:center;gap:var(--hub-ref-space-2, .5rem)}.hub-list__drag-handle{display:inline-flex;align-items:center;justify-content:center;font-size:var(--hub-list-drag-handle-size);color:var(--hub-list-drag-handle-color);cursor:var(--hub-list-drag-handle-cursor);touch-action:none;-webkit-user-select:none;user-select:none}.hub-list__item--dragging{opacity:var(--hub-list-item-dragging-opacity);cursor:var(--hub-list-item-dragging-cursor)}.hub-list__item--drag-disabled .hub-list__drag-handle{cursor:not-allowed;opacity:.4}.hub-list__placeholder{list-style:none;pointer-events:none;min-height:var(--hub-list-placeholder-min-height);background-color:var(--hub-list-placeholder-bg);border:var(--hub-list-placeholder-border-width) var(--hub-list-placeholder-border-style) var(--hub-list-placeholder-border-color);border-radius:var(--hub-list-placeholder-border-radius)}.hub-list__items--cards>.hub-list__placeholder{height:100%}.hub-list__sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}:host([data-variant=primary]),.hub-list[data-variant=primary]{--hub-list-accent: var(--hub-sys-color-primary)}:host([data-variant=success]),.hub-list[data-variant=success]{--hub-list-accent: var(--hub-sys-color-success)}:host([data-variant=danger]),.hub-list[data-variant=danger]{--hub-list-accent: var(--hub-sys-color-danger)}:host([data-variant=warning]),.hub-list[data-variant=warning]{--hub-list-accent: var(--hub-sys-color-warning)}:host([data-variant=info]),.hub-list[data-variant=info]{--hub-list-accent: var(--hub-sys-color-info)}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox]:not([ngNoCva])[formControlName],input[type=checkbox]:not([ngNoCva])[formControl],input[type=checkbox]:not([ngNoCva])[ngModel]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple]):not([ngNoCva])[formControlName],select:not([multiple]):not([ngNoCva])[formControl],select:not([multiple]):not([ngNoCva])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: PaginatorComponent, selector: "hub-paginator, paginable-table-paginator", inputs: ["rtl", "page", "numberOfPages"], outputs: ["pageChange"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: PaginableStateOutlet, selector: "hub-state-outlet", inputs: ["template", "instanceDefault", "globalDefault", "fallback", "context"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: UcfirstPipe, name: "ucfirst" }] });
|
|
2185
3073
|
}
|
|
2186
3074
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: ListComponent, decorators: [{
|
|
2187
3075
|
type: Component,
|
|
2188
3076
|
args: [{ selector: 'hub-list, hub-ui-list, hub-paginable-list', host: {
|
|
2189
3077
|
class: 'hub-list',
|
|
2190
|
-
'[class.hub-list--rtl]': 'isRtl()'
|
|
3078
|
+
'[class.hub-list--rtl]': 'isRtl()',
|
|
3079
|
+
'[attr.data-variant]': 'options.variant ?? null',
|
|
3080
|
+
'[attr.data-hub-drag-owner]': '_listId'
|
|
2191
3081
|
}, providers: [
|
|
2192
3082
|
{
|
|
2193
3083
|
provide: NG_VALUE_ACCESSOR,
|
|
@@ -2203,12 +3093,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImpor
|
|
|
2203
3093
|
NgTemplateOutlet,
|
|
2204
3094
|
NgClass,
|
|
2205
3095
|
PaginableStateOutlet
|
|
2206
|
-
], standalone: true, template: "@if (batchActions.length || options.searchable) {\n\t<div class=\"hub-list__top-bar\">\n\t\t@if (batchActions.length) {\n\t\t\t<div class=\"hub-list__batch-actions\">\n\t\t\t\t@for (action of batchActions; track $index) {\n\t\t\t\t\t@if (!$any(action).buttons?.length) {\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tclass=\"hub-list__batch-action-btn\"\n\t\t\t\t\t\t\t[ngClass]=\"getBatchActionClassList(action)\"\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t(click)=\"handleBatchAction(action)\"\n\t\t\t\t\t\t\t[disabled]=\"!value.length\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t@if (action.icon) {\n\t\t\t\t\t\t\t\t<i class=\"{{ action.icon }}\"></i>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t{{ action.title }}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\t\t@if (options.searchable) {\n\t\t\t<div class=\"hub-list__search\">\n\t\t\t\t@if (isRtl()) {\n\t\t\t\t\t<button class=\"hub-list__search-btn\" type=\"button\" (click)=\"filter()\">\n\t\t\t\t\t\t<i class=\"hub-list__search-icon\" aria-hidden=\"true\"></i>\n\t\t\t\t\t</button>\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tclass=\"hub-list__search-input\"\n\t\t\t\t\t\t[formControl]=\"searchFG\"\n\t\t\t\t\t\t[placeholder]=\"'SEARCH' | translate | ucfirst\"\n\t\t\t\t\t\t[attr.aria-label]=\"'SEARCH' | translate | ucfirst\"\n\t\t\t\t\t\t(click)=\"$event.stopPropagation()\"\n\t\t\t\t\t\t(keyup.enter)=\"filter()\"\n\t\t\t\t\t/>\n\t\t\t\t} @else {\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tclass=\"hub-list__search-input\"\n\t\t\t\t\t\t[formControl]=\"searchFG\"\n\t\t\t\t\t\t[placeholder]=\"'SEARCH' | translate | ucfirst\"\n\t\t\t\t\t\t[attr.aria-label]=\"'SEARCH' | translate | ucfirst\"\n\t\t\t\t\t\t(click)=\"$event.stopPropagation()\"\n\t\t\t\t\t\t(keyup.enter)=\"filter()\"\n\t\t\t\t\t/>\n\t\t\t\t\t<button class=\"hub-list__search-btn\" type=\"button\" (click)=\"filter()\">\n\t\t\t\t\t\t<i class=\"hub-list__search-icon\" aria-hidden=\"true\"></i>\n\t\t\t\t\t</button>\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\t</div>\n}\n\n@if (loading()) {\n\t<ul class=\"hub-list__items hub-list__items--root\">\n\t\t<li class=\"hub-list__item hub-list__item--state\">\n\t\t\t<hub-state-outlet\n\t\t\t\t[template]=\"loadingTpt()\"\n\t\t\t\t[instanceDefault]=\"loadingComponent()\"\n\t\t\t\t[globalDefault]=\"defaults.loading()\"\n\t\t\t\t[fallback]=\"defaultLoadingTpt\"\n\t\t\t/>\n\t\t</li>\n\t</ul>\n} @else if (error()) {\n\t<ul class=\"hub-list__items hub-list__items--root\">\n\t\t<li class=\"hub-list__item hub-list__item--state\">\n\t\t\t<hub-state-outlet\n\t\t\t\t[template]=\"errorTpt()\"\n\t\t\t\t[instanceDefault]=\"errorComponent()\"\n\t\t\t\t[globalDefault]=\"defaults.error()\"\n\t\t\t\t[fallback]=\"defaultErrorTpt\"\n\t\t\t\t[context]=\"{ error: error() }\"\n\t\t\t/>\n\t\t</li>\n\t</ul>\n} @else if (!getVisibleItems(items, true).length) {\n\t<ul class=\"hub-list__items hub-list__items--root\">\n\t\t<li class=\"hub-list__item hub-list__item--empty\">\n\t\t\t<hub-state-outlet\n\t\t\t\t[template]=\"noResultsTpt()\"\n\t\t\t\t[instanceDefault]=\"noResultsComponent()\"\n\t\t\t\t[globalDefault]=\"defaults.noResults()\"\n\t\t\t\t[fallback]=\"defaultNoResultsTpt\"\n\t\t\t/>\n\t\t</li>\n\t</ul>\n} @else {\n\t<ng-container\n\t\t[ngTemplateOutlet]=\"containerTpt\"\n\t\t[ngTemplateOutletContext]=\"{\n\t\t\tcontrols: getVisibleControls(form.controls, true),\n\t\t\tisRoot: true,\n\t\t\titems: getVisibleItems(items, true),\n\t\t\tdepth: 0\n\t\t}\"\n\t></ng-container>\n}\n\n<ng-template #containerTpt let-controls=\"controls\" let-isRoot=\"isRoot\" let-items=\"items\" let-depth=\"depth\">\n\t<ul\n\t\tclass=\"hub-list__items\"\n\t\t[class.hub-list__items--root]=\"isRoot\"\n\t\t[class.hub-list__items--cards]=\"isRoot && isCardsDisplay()\"\n\t>\n\t\t@for (formGroup of controls; track getTrackKey(formGroup.get('data')?.value, $index); let index = $index) {\n\t\t\t<li\n\t\t\t\tclass=\"hub-list__item\"\n\t\t\t\t[ngClass]=\"_getRowClass(items[index])\"\n\t\t\t\t[class.hub-list__item--clickable]=\"clickFn()\"\n\t\t\t\t[class.hub-list__item--selected]=\"formGroup.get('selected')?.value\"\n\t\t\t\t[formGroup]=\"formGroup\"\n\t\t\t\t(click)=\"onItemClick(formGroup.value, depth, index, $event); $event.preventDefault(); $event.stopPropagation()\"\n\t\t\t>\n\t\t\t\t@if (formGroup.value; as item) {\n\t\t\t\t\t<div class=\"hub-list__item-content\">\n\t\t\t\t\t\t@if (multipleSelectable()) {\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\tclass=\"hub-list__checkbox\"\n\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\tformControlName=\"selected\"\n\t\t\t\t\t\t\t\t(change)=\"onSelectionChange()\"\n\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation()\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t<div class=\"hub-list__label\">\n\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"itemTpt() || defaultItemtTpt\"\n\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{\n\t\t\t\t\t\t\t\t\tdata: items[index],\n\t\t\t\t\t\t\t\t\tdepth,\n\t\t\t\t\t\t\t\t\tindex,\n\t\t\t\t\t\t\t\t\tcollapsed: !!formGroup.get('collapsed').value,\n\t\t\t\t\t\t\t\t\tselected: formGroup.get('selected').value\n\t\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t@if (item[bindChildren()]?.length) {\n\t\t\t\t\t\t\t<div class=\"hub-list__actions\">\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tclass=\"hub-list__chevron\"\n\t\t\t\t\t\t\t\t\t(click)=\"\n\t\t\t\t\t\t\t\t\t\ttoggleCollapsed(formGroup.get('collapsed'));\n\t\t\t\t\t\t\t\t\t\t$event.preventDefault();\n\t\t\t\t\t\t\t\t\t\t$event.stopPropagation()\n\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<i\n\t\t\t\t\t\t\t\t\t\tclass=\"hub-table__icon\"\n\t\t\t\t\t\t\t\t\t\t[ngClass]=\"\n\t\t\t\t\t\t\t\t\t\t\titem.collapsed ? 'hub-table__icon--chevron-down' : 'hub-table__icon--chevron-up'\n\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t></i>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t\t@if (item[bindChildren()]?.length && !item.collapsed) {\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"containerTpt\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{\n\t\t\t\t\t\t\t\tcontrols: formGroup.get('children')?.controls,\n\t\t\t\t\t\t\t\titems: items[index][bindChildren()],\n\t\t\t\t\t\t\t\tisRoot: false,\n\t\t\t\t\t\t\t\tdepth: depth + 1\n\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t</li>\n\t\t}\n\t</ul>\n</ng-template>\n\n@if (paginate()) {\n\t<div class=\"hub-list__bottom-bar\">\n\t\t<hub-paginator\n\t\t\tclass=\"hub-list__bottom-bar-paginator\"\n\t\t\t[(page)]=\"page\"\n\t\t\t[numberOfPages]=\"numberOfPages()\"\n\t\t\t[rtl]=\"isRtl()\"\n\t\t></hub-paginator>\n\t\t<div class=\"hub-list__bottom-bar-settings hub-paginator__settings\">\n\t\t\t<label class=\"hub-paginator__label\"> {{ 'ROWS_PER_PAGE' | translate | ucfirst }}: </label>\n\t\t\t<select\n\t\t\t\tclass=\"hub-paginator__select\"\n\t\t\t\t[ngModel]=\"perPage()\"\n\t\t\t\t(ngModelChange)=\"onPerPageChange($event)\"\n\t\t\t\t[ngModelOptions]=\"{ standalone: true }\"\n\t\t\t>\n\t\t\t\t@for (option of perPageOptions(); track option) {\n\t\t\t\t\t<option [ngValue]=\"option\" class=\"hub-paginator__select-option\">\n\t\t\t\t\t\t{{ option }}\n\t\t\t\t\t</option>\n\t\t\t\t}\n\t\t\t</select>\n\t\t</div>\n\t\t<p class=\"hub-list__bottom-bar-info hub-paginator__info\">\n\t\t\t{{\n\t\t\t\t'SHOWING_X_OF_Y_ROWS'\n\t\t\t\t\t| translate\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\tamount: getVisibleItems(items, true).length,\n\t\t\t\t\t\t\t\ttotal: getEffectiveTotalItems()\n\t\t\t\t\t\t }\n\t\t\t\t\t| ucfirst\n\t\t\t}}\n\t\t</p>\n\t</div>\n}\n\n<ng-template #defaultNoResultsTpt>\n\t<div class=\"hub-list__no-results\" role=\"alert\">\n\t\t<i class=\"hub-table__icon hub-table__icon--info hub-table__icon--2x\" aria-hidden=\"true\"></i>\n\t\t{{ 'NO_RESULTS_FOUND' | translate | ucfirst }}\n\t</div>\n</ng-template>\n\n<ng-template #defaultLoadingTpt>\n\t<div class=\"hub-list__loading\" role=\"status\">\n\t\t<i class=\"hub-table__icon hub-table__icon--info hub-table__icon--2x\" aria-hidden=\"true\"></i>\n\t\t{{ 'LOADING' | translate | ucfirst }}\n\t</div>\n</ng-template>\n\n<ng-template #defaultErrorTpt>\n\t<div class=\"hub-list__error text-danger\" role=\"alert\">\n\t\t<i class=\"hub-table__icon hub-table__icon--info hub-table__icon--2x\" aria-hidden=\"true\"></i>\n\t\t{{ 'ERROR_OCURRED' | translate | ucfirst }}\n\t</div>\n</ng-template>\n\n<ng-template #defaultItemtTpt let-data=\"data\">\n\t{{ data[bindLabel()] }}\n</ng-template>\n", styles: [":root,:host{--hub-list-checkbox-size: 1rem;--hub-list-chevron-size: var(--hub-ref-icon-size, 1em);--hub-list-bg: transparent;--hub-list-border-radius: var(--hub-ref-radius-md, .375rem);--hub-list-padding-x: var(--hub-ref-space-0, 0);--hub-list-padding-y: var(--hub-ref-space-0, 0);--hub-list-gap: var(--hub-ref-space-4, 1.5rem);--hub-list-items-bg: transparent;--hub-list-items-gap: var(--hub-ref-space-2, .5rem);--hub-list-empty-bg: var(--hub-ref-surface-2, #f8f9fa);--hub-list-empty-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-list-empty-color: var(--hub-sys-text-muted, #6c757d);--hub-list-empty-padding-x: var(--hub-ref-space-3, 1rem);--hub-list-empty-padding-y: var(--hub-ref-space-3, 1rem);--hub-list-item-bg: var(--hub-sys-surface-page, #ffffff);--hub-list-item-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-list-item-border-width: 1px;--hub-list-item-border-radius: var(--hub-ref-radius-sm, .25rem);--hub-list-item-color: var(--hub-sys-text-primary, #212529);--hub-list-item-gap: var(--hub-ref-space-2, .5rem);--hub-list-item-hover-bg: var(--hub-ref-surface-2, #f8f9fa);--hub-list-item-padding-x: var(--hub-ref-space-3, 1rem);--hub-list-item-padding-y: var(--hub-ref-space-2, .5rem);--hub-list-children-gap: var(--hub-list-item-padding-y);--hub-list-item-selected-bg: var(--hub-sys-color-primary, #0d6efd);--hub-list-item-selected-color: var(--hub-ref-color-white, #fff);--hub-list-cards-min-column-width: 18rem;--hub-list-cards-gap: var(--hub-list-items-gap);--hub-list-cards-columns: auto-fit;--hub-list-cards-row-gap: var(--hub-list-cards-gap);--hub-list-cards-column-gap: var(--hub-list-cards-gap);--hub-list-cards-bg: var(--hub-list-item-bg, transparent);--hub-list-cards-color: var(--hub-list-item-color);--hub-list-cards-padding-x: var(--hub-list-item-padding-x);--hub-list-cards-padding-y: var(--hub-list-item-padding-y);--hub-list-cards-border-color: var(--hub-list-item-border-color);--hub-list-cards-border-width: var(--hub-list-item-border-width, 1px);--hub-list-cards-border-radius: var(--hub-list-item-border-radius);--hub-list-cards-shadow: none;--hub-list-cards-hover-bg: var(--hub-list-item-hover-bg);--hub-list-cards-hover-shadow: var(--hub-list-cards-shadow);--hub-list-cards-transition: background-color .15s ease-in-out, box-shadow .15s ease-in-out;--hub-list-top-bar-gap: var(--hub-ref-space-2, .5rem);--hub-list-top-bar-justify-content: end;--hub-list-top-bar-align-items: center;--hub-list-top-bar-wrap: wrap;--hub-list-batch-actions-gap: var(--hub-ref-space-2, .5rem);--hub-list-bottom-bar-gap: var(--hub-ref-space-3, 1rem);--hub-list-bottom-bar-justify-content: space-around;--hub-list-bottom-bar-align-items: center;--hub-list-bottom-bar-wrap: wrap;--hub-list-bottom-bar-paginator-order: 1;--hub-list-bottom-bar-settings-order: 2;--hub-list-bottom-bar-info-order: 3;--hub-list-bottom-bar-paginator-flex: 0 0 auto;--hub-list-bottom-bar-settings-flex: 0 0 auto;--hub-list-bottom-bar-info-flex: 0 0 auto;--hub-list-search-btn-bg: var(--hub-ref-surface-2, #f8f9fa);--hub-list-search-btn-color: var(--hub-sys-text-primary, #212529);--hub-list-search-button-min-width: 2.75rem;--hub-list-search-input-bg: var(--hub-sys-surface-page, #ffffff);--hub-list-search-input-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-list-search-input-border-radius: var(--hub-ref-radius-sm, .25rem);--hub-list-search-input-color: var(--hub-sys-text-primary, #212529);--hub-list-search-border-color: var(--hub-list-search-input-border-color);--hub-list-search-border-width: 1px;--hub-list-search-border-radius: var(--hub-list-search-input-border-radius);--hub-list-search-input-padding-x: .75rem;--hub-list-search-input-padding-y: .375rem;--hub-list-search-input-font-size: 1rem;--hub-list-action-btn-bg: var(--hub-sys-surface-page, #ffffff);--hub-list-action-btn-color: var(--hub-list-item-color);--hub-list-action-btn-border-color: var(--hub-list-item-border-color);--hub-list-action-btn-border-radius: var(--hub-list-item-border-radius);--hub-list-action-btn-padding-y: .375rem;--hub-list-action-btn-padding-x: .75rem;--hub-list-action-btn-hover-bg: var(--hub-list-item-hover-bg)}:host{display:flex;flex-direction:column;gap:var(--hub-list-gap);padding:var(--hub-list-padding-y) var(--hub-list-padding-x);background-color:var(--hub-list-bg);border-radius:var(--hub-list-border-radius)}:host .hub-list__bottom-bar{display:flex;justify-content:var(--hub-list-bottom-bar-justify-content);align-items:var(--hub-list-bottom-bar-align-items);flex-wrap:var(--hub-list-bottom-bar-wrap);gap:var(--hub-list-bottom-bar-gap)}:host .hub-list__bottom-bar-paginator{order:var(--hub-list-bottom-bar-paginator-order);flex:var(--hub-list-bottom-bar-paginator-flex);overflow:auto;margin:0}:host .hub-list__bottom-bar-settings{order:var(--hub-list-bottom-bar-settings-order);flex:var(--hub-list-bottom-bar-settings-flex);margin:0}:host .hub-list__bottom-bar-info{order:var(--hub-list-bottom-bar-info-order);flex:var(--hub-list-bottom-bar-info-flex);margin:0}:host .hub-list__top-bar{display:flex;align-items:var(--hub-list-top-bar-align-items);justify-content:var(--hub-list-top-bar-justify-content);flex-wrap:var(--hub-list-top-bar-wrap);gap:var(--hub-list-top-bar-gap);direction:ltr}:host .hub-list__batch-actions{display:flex;flex-wrap:nowrap;align-items:center;gap:var(--hub-list-batch-actions-gap)}:host .hub-list__batch-action-btn{display:inline-flex;align-items:center;gap:.35rem}:host .hub-list__batch-action-btn--default{display:inline-flex;align-items:center;justify-content:center;gap:.35rem;padding:var(--hub-list-action-btn-padding-y) var(--hub-list-action-btn-padding-x);color:var(--hub-list-action-btn-color);background-color:var(--hub-list-action-btn-bg);border:1px solid var(--hub-list-action-btn-border-color);border-radius:var(--hub-list-action-btn-border-radius);transition:background-color .15s ease-in-out,border-color .15s ease-in-out,color .15s ease-in-out}:host .hub-list__batch-action-btn--default:hover:not(:disabled){background-color:var(--hub-list-action-btn-hover-bg)}:host .hub-list__search{margin-left:auto}:host.hub-list--rtl{direction:rtl}:host.hub-list--rtl .hub-list__items .hub-list__items{padding-left:0;padding-right:var(--hub-list-item-padding-x)}:host.hub-list--rtl .hub-list__search{direction:ltr;order:1;margin-left:0;margin-right:auto}:host.hub-list--rtl .hub-list__search-input{direction:ltr;text-align:right;border-radius:0 var(--hub-list-search-border-radius) var(--hub-list-search-border-radius) 0!important}:host.hub-list--rtl .hub-list__search-btn{border-radius:var(--hub-list-search-border-radius) 0 0 var(--hub-list-search-border-radius)!important}:host.hub-list--rtl .hub-list__batch-actions{order:2;flex-direction:row-reverse;margin-left:auto;margin-right:0}.hub-list__items{display:flex;flex-direction:column;gap:var(--hub-list-items-gap);background-color:var(--hub-list-items-bg);list-style:none;margin:0;padding:0}.hub-list__items .hub-list__items{margin-top:var(--hub-list-children-gap);padding-left:var(--hub-list-item-padding-x);padding-right:0;padding-top:0;padding-bottom:0;border-radius:0}.hub-list__search{display:flex;flex-wrap:nowrap;align-items:stretch;justify-content:end}.hub-list__search-input{position:relative;flex:1 1 auto;width:1%;min-width:0;display:block;width:100%;padding:var(--hub-list-search-input-padding-y) var(--hub-list-search-input-padding-x);font-size:var(--hub-list-search-input-font-size);font-weight:400;line-height:1.5;background-color:var(--hub-list-search-input-bg);border-color:var(--hub-list-search-border-color)!important;color:var(--hub-list-search-input-color);border:var(--hub-list-search-border-width) solid var(--hub-list-search-border-color);border-radius:var(--hub-list-search-border-radius) 0 0 var(--hub-list-search-border-radius)!important}.hub-list__search-btn{display:inline-flex;align-items:center;justify-content:center;min-width:var(--hub-list-search-button-min-width);padding:var(--hub-list-search-input-padding-y) var(--hub-list-search-input-padding-x);background-color:var(--hub-list-search-btn-bg)!important;color:var(--hub-list-search-btn-color)!important;border-color:var(--hub-list-search-border-color)!important;border:var(--hub-list-search-border-width) solid var(--hub-list-search-border-color);border-radius:0 var(--hub-list-search-border-radius) var(--hub-list-search-border-radius) 0!important;cursor:pointer}.hub-list__search-icon{display:inline-block;width:var(--hub-ref-icon-size, 1em);height:var(--hub-ref-icon-size, 1em);background-color:currentColor;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z'/%3E%3C/svg%3E\")}.hub-list__item{display:flex;flex-direction:column;padding:var(--hub-list-item-padding-y) var(--hub-list-item-padding-x);background-color:var(--hub-list-item-bg);color:var(--hub-list-item-color);border-radius:var(--hub-list-item-border-radius);transition:background-color .15s ease-in-out;position:relative;border:var(--hub-list-item-border-width) solid var(--hub-list-item-border-color)}.hub-list__item--clickable{cursor:pointer}.hub-list__item--clickable:hover{background-color:var(--hub-list-item-hover-bg)}.hub-list__item--selected{background-color:var(--hub-list-item-selected-bg)!important;color:var(--hub-list-item-selected-color);border-color:var(--hub-list-item-selected-bg)}.hub-list__item--selected .hub-list__label,.hub-list__item--selected .hub-list__actions button{color:var(--hub-list-item-selected-color)}.hub-list__item--empty{background-color:var(--hub-list-empty-bg);color:var(--hub-list-empty-color);padding:var(--hub-list-empty-padding-y, var(--hub-ref-space-3, 1rem)) var(--hub-list-empty-padding-x, var(--hub-ref-space-3, 1rem));border-color:var(--hub-list-empty-border-color);text-align:center}.hub-list__items--cards{display:grid;grid-template-columns:repeat(var(--hub-list-cards-columns),minmax(min(100%,var(--hub-list-cards-min-column-width)),1fr));gap:var(--hub-list-cards-row-gap) var(--hub-list-cards-column-gap)}.hub-list__items--cards>.hub-list__item{height:100%;background-color:var(--hub-list-cards-bg);color:var(--hub-list-cards-color);padding:var(--hub-list-cards-padding-y) var(--hub-list-cards-padding-x);border:var(--hub-list-cards-border-width) solid var(--hub-list-cards-border-color);border-radius:var(--hub-list-cards-border-radius);box-shadow:var(--hub-list-cards-shadow);transition:var(--hub-list-cards-transition)}.hub-list__items--cards>.hub-list__item.hub-list__item--clickable:hover{background-color:var(--hub-list-cards-hover-bg);box-shadow:var(--hub-list-cards-hover-shadow)}.hub-list__items--cards .hub-list__item-content{align-items:flex-start}.hub-list__items--cards .hub-list__label{overflow:visible;text-overflow:initial;white-space:normal}.hub-list__label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex-grow:1}.hub-list__item-content{display:flex;justify-content:space-between;align-items:center;gap:var(--hub-list-item-gap);width:100%}.hub-list__checkbox{width:var(--hub-list-checkbox-size);height:var(--hub-list-checkbox-size);flex-shrink:0;cursor:pointer}.hub-list__actions{display:flex;align-items:center;gap:var(--hub-ref-space-2, .5rem)}.hub-list__chevron{padding:0;font-size:var(--hub-list-chevron-size);display:flex;align-items:center;justify-content:center;background:transparent;border:none;cursor:pointer}.hub-list__no-results{display:flex;align-items:center;gap:var(--hub-ref-space-2, .5rem)}\n"] }]
|
|
2207
|
-
}], propDecorators: { loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }, { type: i0.Output, args: ["loadingChange"] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }, { type: i0.Output, args: ["errorChange"] }], loadingComponent: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadingComponent", required: false }] }], errorComponent: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorComponent", required: false }] }], noResultsComponent: [{ type: i0.Input, args: [{ isSignal: true, alias: "noResultsComponent", required: false }] }], bindValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindValue", required: false }] }], bindLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindLabel", required: false }] }], bindChildren: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindChildren", required: false }] }], selectable: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectable", required: false }] }], paginate: [{ type: i0.Input, args: [{ isSignal: true, alias: "paginate", required: false }] }], page: [{ type: i0.Input, args: [{ isSignal: true, alias: "page", required: false }] }, { type: i0.Output, args: ["pageChange"] }], perPage: [{ type: i0.Input, args: [{ isSignal: true, alias: "perPage", required: false }] }, { type: i0.Output, args: ["perPageChange"] }], perPageOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "perPageOptions", required: false }] }], totalItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "totalItems", required: false }] }, { type: i0.Output, args: ["totalItemsChange"] }], options: [{
|
|
3096
|
+
], standalone: true, template: "@if (batchActions.length || options.searchable) {\n\t<div class=\"hub-list__top-bar\">\n\t\t@if (batchActions.length) {\n\t\t\t<div class=\"hub-list__batch-actions\">\n\t\t\t\t@for (action of batchActions; track $index) {\n\t\t\t\t\t@if (!$any(action).buttons?.length) {\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tclass=\"hub-list__batch-action-btn\"\n\t\t\t\t\t\t\t[ngClass]=\"getBatchActionClassList(action)\"\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t(click)=\"handleBatchAction(action)\"\n\t\t\t\t\t\t\t[disabled]=\"!value.length\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t@if (action.icon) {\n\t\t\t\t\t\t\t\t<i class=\"{{ action.icon }}\"></i>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t{{ action.title }}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\t\t@if (options.searchable) {\n\t\t\t<div class=\"hub-list__search\">\n\t\t\t\t@if (isRtl()) {\n\t\t\t\t\t<button class=\"hub-list__search-btn\" type=\"button\" (click)=\"filter()\">\n\t\t\t\t\t\t<i class=\"hub-list__search-icon\" aria-hidden=\"true\"></i>\n\t\t\t\t\t</button>\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tclass=\"hub-list__search-input\"\n\t\t\t\t\t\t[formControl]=\"searchFG\"\n\t\t\t\t\t\t[placeholder]=\"'SEARCH' | translate | ucfirst\"\n\t\t\t\t\t\t[attr.aria-label]=\"'SEARCH' | translate | ucfirst\"\n\t\t\t\t\t\t(click)=\"$event.stopPropagation()\"\n\t\t\t\t\t\t(keyup.enter)=\"filter()\"\n\t\t\t\t\t/>\n\t\t\t\t} @else {\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tclass=\"hub-list__search-input\"\n\t\t\t\t\t\t[formControl]=\"searchFG\"\n\t\t\t\t\t\t[placeholder]=\"'SEARCH' | translate | ucfirst\"\n\t\t\t\t\t\t[attr.aria-label]=\"'SEARCH' | translate | ucfirst\"\n\t\t\t\t\t\t(click)=\"$event.stopPropagation()\"\n\t\t\t\t\t\t(keyup.enter)=\"filter()\"\n\t\t\t\t\t/>\n\t\t\t\t\t<button class=\"hub-list__search-btn\" type=\"button\" (click)=\"filter()\">\n\t\t\t\t\t\t<i class=\"hub-list__search-icon\" aria-hidden=\"true\"></i>\n\t\t\t\t\t</button>\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\t</div>\n}\n\n@if (loading()) {\n\t<ul class=\"hub-list__items hub-list__items--root\">\n\t\t<li class=\"hub-list__item hub-list__item--state\">\n\t\t\t<hub-state-outlet\n\t\t\t\t[template]=\"loadingTpt()\"\n\t\t\t\t[instanceDefault]=\"loadingComponent()\"\n\t\t\t\t[globalDefault]=\"defaults.loading()\"\n\t\t\t\t[fallback]=\"defaultLoadingTpt\"\n\t\t\t/>\n\t\t</li>\n\t</ul>\n} @else if (error()) {\n\t<ul class=\"hub-list__items hub-list__items--root\">\n\t\t<li class=\"hub-list__item hub-list__item--state\">\n\t\t\t<hub-state-outlet\n\t\t\t\t[template]=\"errorTpt()\"\n\t\t\t\t[instanceDefault]=\"errorComponent()\"\n\t\t\t\t[globalDefault]=\"defaults.error()\"\n\t\t\t\t[fallback]=\"defaultErrorTpt\"\n\t\t\t\t[context]=\"{ error: error() }\"\n\t\t\t/>\n\t\t</li>\n\t</ul>\n} @else if (!getVisibleItems(items, true).length) {\n\t<ul class=\"hub-list__items hub-list__items--root\">\n\t\t<li class=\"hub-list__item hub-list__item--empty\">\n\t\t\t<hub-state-outlet\n\t\t\t\t[template]=\"noResultsTpt()\"\n\t\t\t\t[instanceDefault]=\"noResultsComponent()\"\n\t\t\t\t[globalDefault]=\"defaults.noResults()\"\n\t\t\t\t[fallback]=\"defaultNoResultsTpt\"\n\t\t\t/>\n\t\t</li>\n\t</ul>\n} @else {\n\t<ng-container\n\t\t[ngTemplateOutlet]=\"containerTpt\"\n\t\t[ngTemplateOutletContext]=\"{\n\t\t\tcontrols: getVisibleControls(form.controls, true),\n\t\t\tcontrolsForm: form,\n\t\t\titemsFull: items,\n\t\t\titems: getVisibleItems(items, true),\n\t\t\tparentItem: null,\n\t\t\tisRoot: true,\n\t\t\tdepth: 0\n\t\t}\"\n\t></ng-container>\n}\n\n<ng-template\n\t#containerTpt\n\tlet-controls=\"controls\"\n\tlet-controlsForm=\"controlsForm\"\n\tlet-itemsFull=\"itemsFull\"\n\tlet-isRoot=\"isRoot\"\n\tlet-items=\"items\"\n\tlet-parentItem=\"parentItem\"\n\tlet-depth=\"depth\"\n>\n\t@let containerRef = makeContainerRef(controlsForm, itemsFull, parentItem, depth);\n\t<ul\n\t\tclass=\"hub-list__items\"\n\t\t[class.hub-list__items--root]=\"isRoot\"\n\t\t[class.hub-list__items--cards]=\"isRoot && isCardsDisplay()\"\n\t\t[attr.data-hub-container-key]=\"containerRef.key\"\n\t\t(dragover)=\"onContainerDragOver($event, containerRef)\"\n\t\t(drop)=\"onContainerDrop($event)\"\n\t>\n\t\t@for (formGroup of controls; track getTrackKey(formGroup.get('data')?.value, $index); let index = $index) {\n\t\t\t@let absIndex = absoluteIndex(index, isRoot);\n\t\t\t@if (sortable() && showPlaceholderBefore(controlsForm, absIndex)) {\n\t\t\t\t<li class=\"hub-list__placeholder\" aria-hidden=\"true\">\n\t\t\t\t\t<ng-container\n\t\t\t\t\t\t[ngTemplateOutlet]=\"placeholderTpt() || defaultPlaceholderTpt\"\n\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ item: dragService.active()?.item }\"\n\t\t\t\t\t></ng-container>\n\t\t\t\t</li>\n\t\t\t}\n\t\t\t<li\n\t\t\t\tclass=\"hub-list__item\"\n\t\t\t\t[ngClass]=\"_getRowClass(items[index])\"\n\t\t\t\t[class.hub-list__item--clickable]=\"clickFn()\"\n\t\t\t\t[class.hub-list__item--selected]=\"formGroup.get('selected')?.value\"\n\t\t\t\t[class.hub-list__item--dragging]=\"isRowDragging(items[index])\"\n\t\t\t\t[class.hub-list__item--drag-disabled]=\"sortable() && isRowDisabled(items[index])\"\n\t\t\t\t[attr.draggable]=\"isDragEnabled(items[index]) ? true : null\"\n\t\t\t\t[attr.data-hub-index]=\"absIndex\"\n\t\t\t\t[attr.tabindex]=\"keyboardSortable() && isDragEnabled(items[index]) ? 0 : null\"\n\t\t\t\t[attr.aria-roledescription]=\"sortable() ? ('DRAG_SORTABLE_ITEM' | translate) : null\"\n\t\t\t\t[attr.aria-grabbed]=\"sortable() ? isRowDragging(items[index]) : null\"\n\t\t\t\t[formGroup]=\"formGroup\"\n\t\t\t\t(click)=\"onItemClick(formGroup.value, depth, index, $event); $event.preventDefault(); $event.stopPropagation()\"\n\t\t\t\t(dragstart)=\"onDragStart($event, containerRef, absIndex, items[index])\"\n\t\t\t\t(dragenter)=\"onDragOver($event, containerRef, absIndex)\"\n\t\t\t\t(dragover)=\"onDragOver($event, containerRef, absIndex)\"\n\t\t\t\t(drop)=\"onDrop($event)\"\n\t\t\t\t(dragend)=\"onDragEnd()\"\n\t\t\t\t(pointerdown)=\"onPointerDown($event, containerRef, absIndex, items[index])\"\n\t\t\t\t(keydown)=\"onItemKeydown($event, containerRef, absIndex, items[index])\"\n\t\t\t>\n\t\t\t\t@if (formGroup.value; as item) {\n\t\t\t\t\t<div class=\"hub-list__item-content\">\n\t\t\t\t\t\t@if (multipleSelectable()) {\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\tclass=\"hub-list__checkbox\"\n\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\tdraggable=\"false\"\n\t\t\t\t\t\t\t\tformControlName=\"selected\"\n\t\t\t\t\t\t\t\t(change)=\"onSelectionChange()\"\n\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation()\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t<div class=\"hub-list__label\">\n\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"itemTpt() || defaultItemtTpt\"\n\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{\n\t\t\t\t\t\t\t\t\tdata: items[index],\n\t\t\t\t\t\t\t\t\tdepth,\n\t\t\t\t\t\t\t\t\tindex,\n\t\t\t\t\t\t\t\t\tcollapsed: !!formGroup.get('collapsed').value,\n\t\t\t\t\t\t\t\t\tselected: formGroup.get('selected').value\n\t\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t@if (item[bindChildren()]?.length) {\n\t\t\t\t\t\t\t<div class=\"hub-list__actions\">\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tclass=\"hub-list__chevron\"\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tdraggable=\"false\"\n\t\t\t\t\t\t\t\t\t(click)=\"\n\t\t\t\t\t\t\t\t\t\ttoggleCollapsed(formGroup.get('collapsed'));\n\t\t\t\t\t\t\t\t\t\t$event.preventDefault();\n\t\t\t\t\t\t\t\t\t\t$event.stopPropagation()\n\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<i\n\t\t\t\t\t\t\t\t\t\tclass=\"hub-table__icon\"\n\t\t\t\t\t\t\t\t\t\t[ngClass]=\"\n\t\t\t\t\t\t\t\t\t\t\titem.collapsed ? 'hub-table__icon--chevron-down' : 'hub-table__icon--chevron-up'\n\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t></i>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t\t@if (item[bindChildren()]?.length && !item.collapsed) {\n\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t[ngTemplateOutlet]=\"containerTpt\"\n\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{\n\t\t\t\t\t\t\t\tcontrols: formGroup.get('children')?.controls,\n\t\t\t\t\t\t\t\tcontrolsForm: formGroup.get('children'),\n\t\t\t\t\t\t\t\titemsFull: items[index][bindChildren()],\n\t\t\t\t\t\t\t\titems: items[index][bindChildren()],\n\t\t\t\t\t\t\t\tparentItem: items[index],\n\t\t\t\t\t\t\t\tisRoot: false,\n\t\t\t\t\t\t\t\tdepth: depth + 1\n\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t></ng-container>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t</li>\n\t\t}\n\t\t@if (sortable() && showPlaceholderAtEnd(controlsForm, isRoot, controls.length)) {\n\t\t\t<li class=\"hub-list__placeholder\" aria-hidden=\"true\">\n\t\t\t\t<ng-container\n\t\t\t\t\t[ngTemplateOutlet]=\"placeholderTpt() || defaultPlaceholderTpt\"\n\t\t\t\t\t[ngTemplateOutletContext]=\"{ item: dragService.active()?.item }\"\n\t\t\t\t></ng-container>\n\t\t\t</li>\n\t\t}\n\t</ul>\n</ng-template>\n\n@if (sortable() && keyboardSortable()) {\n\t<div class=\"hub-list__sr-only\" role=\"status\" aria-live=\"polite\">\n\t\t@if (announcement(); as message) {\n\t\t\t{{ message.key | translate: message.params }}\n\t\t}\n\t</div>\n}\n\n@if (paginate()) {\n\t<div class=\"hub-list__bottom-bar\">\n\t\t<hub-paginator\n\t\t\tclass=\"hub-list__bottom-bar-paginator\"\n\t\t\t[(page)]=\"page\"\n\t\t\t[numberOfPages]=\"numberOfPages()\"\n\t\t\t[rtl]=\"isRtl()\"\n\t\t></hub-paginator>\n\t\t<div class=\"hub-list__bottom-bar-settings hub-paginator__settings\">\n\t\t\t<label class=\"hub-paginator__label\"> {{ 'ROWS_PER_PAGE' | translate | ucfirst }}: </label>\n\t\t\t<select\n\t\t\t\tclass=\"hub-paginator__select\"\n\t\t\t\t[ngModel]=\"perPage()\"\n\t\t\t\t(ngModelChange)=\"onPerPageChange($event)\"\n\t\t\t\t[ngModelOptions]=\"{ standalone: true }\"\n\t\t\t>\n\t\t\t\t@for (option of perPageOptions(); track option) {\n\t\t\t\t\t<option [ngValue]=\"option\" class=\"hub-paginator__select-option\">\n\t\t\t\t\t\t{{ option }}\n\t\t\t\t\t</option>\n\t\t\t\t}\n\t\t\t</select>\n\t\t</div>\n\t\t<p class=\"hub-list__bottom-bar-info hub-paginator__info\">\n\t\t\t{{\n\t\t\t\t'SHOWING_X_OF_Y_ROWS'\n\t\t\t\t\t| translate\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\tamount: getVisibleItems(items, true).length,\n\t\t\t\t\t\t\t\ttotal: getEffectiveTotalItems()\n\t\t\t\t\t\t }\n\t\t\t\t\t| ucfirst\n\t\t\t}}\n\t\t</p>\n\t</div>\n}\n\n<ng-template #defaultNoResultsTpt>\n\t<div class=\"hub-list__no-results\" role=\"alert\">\n\t\t<i class=\"hub-table__icon hub-table__icon--info hub-table__icon--2x\" aria-hidden=\"true\"></i>\n\t\t{{ 'NO_RESULTS_FOUND' | translate | ucfirst }}\n\t</div>\n</ng-template>\n\n<ng-template #defaultLoadingTpt>\n\t<div class=\"hub-list__loading\" role=\"status\">\n\t\t<i class=\"hub-table__icon hub-table__icon--info hub-table__icon--2x\" aria-hidden=\"true\"></i>\n\t\t{{ 'LOADING' | translate | ucfirst }}\n\t</div>\n</ng-template>\n\n<ng-template #defaultErrorTpt>\n\t<div class=\"hub-list__error text-danger\" role=\"alert\">\n\t\t<i class=\"hub-table__icon hub-table__icon--info hub-table__icon--2x\" aria-hidden=\"true\"></i>\n\t\t{{ 'ERROR_OCURRED' | translate | ucfirst }}\n\t</div>\n</ng-template>\n\n<ng-template #defaultPlaceholderTpt>\n\t<div class=\"hub-list__placeholder-inner\" aria-hidden=\"true\"></div>\n</ng-template>\n\n<ng-template #defaultItemtTpt let-data=\"data\">\n\t{{ data[bindLabel()] }}\n</ng-template>\n", styles: [":root,:host{--hub-list-checkbox-size: 1rem;--hub-list-chevron-size: var(--hub-ref-icon-size, 1em);--hub-list-bg: transparent;--hub-list-border-radius: var(--hub-ref-radius-md, .375rem);--hub-list-padding-x: var(--hub-ref-space-0, 0);--hub-list-padding-y: var(--hub-ref-space-0, 0);--hub-list-gap: var(--hub-ref-space-4, 1.5rem);--hub-list-items-bg: transparent;--hub-list-items-gap: var(--hub-ref-space-2, .5rem);--hub-list-empty-bg: var(--hub-ref-surface-2, #f8f9fa);--hub-list-empty-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-list-empty-color: var(--hub-sys-text-muted, #6c757d);--hub-list-empty-padding-x: var(--hub-ref-space-3, 1rem);--hub-list-empty-padding-y: var(--hub-ref-space-3, 1rem);--hub-list-item-bg: var(--hub-sys-surface-page, #ffffff);--hub-list-item-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-list-item-border-width: 1px;--hub-list-item-border-radius: var(--hub-ref-radius-sm, .25rem);--hub-list-item-color: var(--hub-sys-text-primary, #212529);--hub-list-item-gap: var(--hub-ref-space-2, .5rem);--hub-list-item-hover-bg: var(--hub-ref-surface-2, #f8f9fa);--hub-list-item-padding-x: var(--hub-ref-space-3, 1rem);--hub-list-item-padding-y: var(--hub-ref-space-2, .5rem);--hub-list-children-gap: var(--hub-list-item-padding-y);--hub-list-accent: var(--hub-sys-color-primary, #0d6efd);--hub-list-item-selected-bg: var(--hub-list-accent);--hub-list-item-selected-color: var(--hub-ref-color-white, #fff);--hub-list-cards-min-column-width: 18rem;--hub-list-cards-gap: var(--hub-list-items-gap);--hub-list-cards-columns: auto-fit;--hub-list-cards-row-gap: var(--hub-list-cards-gap);--hub-list-cards-column-gap: var(--hub-list-cards-gap);--hub-list-cards-bg: var(--hub-list-item-bg, transparent);--hub-list-cards-color: var(--hub-list-item-color);--hub-list-cards-padding-x: var(--hub-list-item-padding-x);--hub-list-cards-padding-y: var(--hub-list-item-padding-y);--hub-list-cards-border-color: var(--hub-list-item-border-color);--hub-list-cards-border-width: var(--hub-list-item-border-width, 1px);--hub-list-cards-border-radius: var(--hub-list-item-border-radius);--hub-list-cards-shadow: none;--hub-list-cards-hover-bg: var(--hub-list-item-hover-bg);--hub-list-cards-hover-shadow: var(--hub-list-cards-shadow);--hub-list-cards-transition: background-color .15s ease-in-out, box-shadow .15s ease-in-out;--hub-list-top-bar-gap: var(--hub-ref-space-2, .5rem);--hub-list-top-bar-justify-content: end;--hub-list-top-bar-align-items: center;--hub-list-top-bar-wrap: wrap;--hub-list-batch-actions-gap: var(--hub-ref-space-2, .5rem);--hub-list-bottom-bar-gap: var(--hub-ref-space-3, 1rem);--hub-list-bottom-bar-justify-content: space-around;--hub-list-bottom-bar-align-items: center;--hub-list-bottom-bar-wrap: wrap;--hub-list-bottom-bar-paginator-order: 1;--hub-list-bottom-bar-settings-order: 2;--hub-list-bottom-bar-info-order: 3;--hub-list-bottom-bar-paginator-flex: 0 0 auto;--hub-list-bottom-bar-settings-flex: 0 0 auto;--hub-list-bottom-bar-info-flex: 0 0 auto;--hub-list-search-btn-bg: var(--hub-ref-surface-2, #f8f9fa);--hub-list-search-btn-color: var(--hub-sys-text-primary, #212529);--hub-list-search-button-min-width: 2.75rem;--hub-list-search-input-bg: var(--hub-sys-surface-page, #ffffff);--hub-list-search-input-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-list-search-input-border-radius: var(--hub-ref-radius-sm, .25rem);--hub-list-search-input-color: var(--hub-sys-text-primary, #212529);--hub-list-search-border-color: var(--hub-list-search-input-border-color);--hub-list-search-border-width: 1px;--hub-list-search-border-radius: var(--hub-list-search-input-border-radius);--hub-list-search-input-padding-x: .75rem;--hub-list-search-input-padding-y: .375rem;--hub-list-search-input-font-size: 1rem;--hub-list-action-btn-bg: var(--hub-sys-surface-page, #ffffff);--hub-list-action-btn-color: var(--hub-list-item-color);--hub-list-action-btn-border-color: var(--hub-list-item-border-color);--hub-list-action-btn-border-radius: var(--hub-list-item-border-radius);--hub-list-action-btn-padding-y: .375rem;--hub-list-action-btn-padding-x: .75rem;--hub-list-action-btn-hover-bg: var(--hub-list-item-hover-bg);--hub-list-drag-handle-color: var(--hub-sys-text-muted, #6c757d);--hub-list-drag-handle-cursor: grab;--hub-list-drag-handle-size: var(--hub-ref-icon-size, 1em);--hub-list-item-dragging-opacity: .5;--hub-list-item-dragging-cursor: grabbing;--hub-list-drop-target-outline-color: var(--hub-list-accent);--hub-list-drop-target-outline-width: 2px;--hub-list-placeholder-bg: var(--hub-ref-surface-2, #f8f9fa);--hub-list-placeholder-border-color: var(--hub-list-accent);--hub-list-placeholder-border-width: 2px;--hub-list-placeholder-border-style: dashed;--hub-list-placeholder-border-radius: var(--hub-list-item-border-radius);--hub-list-placeholder-min-height: 2.5rem;--hub-list-ghost-opacity: .85;--hub-list-ghost-shadow: 0 .5rem 1rem rgba(0, 0, 0, .15)}:host{display:flex;flex-direction:column;gap:var(--hub-list-gap);padding:var(--hub-list-padding-y) var(--hub-list-padding-x);background-color:var(--hub-list-bg);border-radius:var(--hub-list-border-radius)}:host .hub-list__bottom-bar{display:flex;justify-content:var(--hub-list-bottom-bar-justify-content);align-items:var(--hub-list-bottom-bar-align-items);flex-wrap:var(--hub-list-bottom-bar-wrap);gap:var(--hub-list-bottom-bar-gap)}:host .hub-list__bottom-bar-paginator{order:var(--hub-list-bottom-bar-paginator-order);flex:var(--hub-list-bottom-bar-paginator-flex);overflow:auto;margin:0}:host .hub-list__bottom-bar-settings{order:var(--hub-list-bottom-bar-settings-order);flex:var(--hub-list-bottom-bar-settings-flex);margin:0}:host .hub-list__bottom-bar-info{order:var(--hub-list-bottom-bar-info-order);flex:var(--hub-list-bottom-bar-info-flex);margin:0}:host .hub-list__top-bar{display:flex;align-items:var(--hub-list-top-bar-align-items);justify-content:var(--hub-list-top-bar-justify-content);flex-wrap:var(--hub-list-top-bar-wrap);gap:var(--hub-list-top-bar-gap);direction:ltr}:host .hub-list__batch-actions{display:flex;flex-wrap:nowrap;align-items:center;gap:var(--hub-list-batch-actions-gap)}:host .hub-list__batch-action-btn{display:inline-flex;align-items:center;gap:.35rem}:host .hub-list__batch-action-btn--default{display:inline-flex;align-items:center;justify-content:center;gap:.35rem;padding:var(--hub-list-action-btn-padding-y) var(--hub-list-action-btn-padding-x);color:var(--hub-list-action-btn-color);background-color:var(--hub-list-action-btn-bg);border:1px solid var(--hub-list-action-btn-border-color);border-radius:var(--hub-list-action-btn-border-radius);transition:background-color .15s ease-in-out,border-color .15s ease-in-out,color .15s ease-in-out}:host .hub-list__batch-action-btn--default:hover:not(:disabled){background-color:var(--hub-list-action-btn-hover-bg)}:host .hub-list__search{margin-left:auto}:host.hub-list--rtl{direction:rtl}:host.hub-list--rtl .hub-list__items .hub-list__items{padding-left:0;padding-right:var(--hub-list-item-padding-x)}:host.hub-list--rtl .hub-list__search{direction:ltr;order:1;margin-left:0;margin-right:auto}:host.hub-list--rtl .hub-list__search-input{direction:ltr;text-align:right;border-radius:0 var(--hub-list-search-border-radius) var(--hub-list-search-border-radius) 0!important}:host.hub-list--rtl .hub-list__search-btn{border-radius:var(--hub-list-search-border-radius) 0 0 var(--hub-list-search-border-radius)!important}:host.hub-list--rtl .hub-list__batch-actions{order:2;flex-direction:row-reverse;margin-left:auto;margin-right:0}.hub-list__items{display:flex;flex-direction:column;gap:var(--hub-list-items-gap);background-color:var(--hub-list-items-bg);list-style:none;margin:0;padding:0}.hub-list__items .hub-list__items{margin-top:var(--hub-list-children-gap);padding-left:var(--hub-list-item-padding-x);padding-right:0;padding-top:0;padding-bottom:0;border-radius:0}.hub-list__search{display:flex;flex-wrap:nowrap;align-items:stretch;justify-content:end}.hub-list__search-input{position:relative;flex:1 1 auto;width:1%;min-width:0;display:block;width:100%;padding:var(--hub-list-search-input-padding-y) var(--hub-list-search-input-padding-x);font-size:var(--hub-list-search-input-font-size);font-weight:var(--hub-ref-font-weight-base, 400);line-height:var(--hub-ref-line-height-base, 1.5);background-color:var(--hub-list-search-input-bg);border-color:var(--hub-list-search-border-color)!important;color:var(--hub-list-search-input-color);border:var(--hub-list-search-border-width) solid var(--hub-list-search-border-color);border-radius:var(--hub-list-search-border-radius) 0 0 var(--hub-list-search-border-radius)!important}.hub-list__search-btn{display:inline-flex;align-items:center;justify-content:center;min-width:var(--hub-list-search-button-min-width);padding:var(--hub-list-search-input-padding-y) var(--hub-list-search-input-padding-x);background-color:var(--hub-list-search-btn-bg)!important;color:var(--hub-list-search-btn-color)!important;border-color:var(--hub-list-search-border-color)!important;border:var(--hub-list-search-border-width) solid var(--hub-list-search-border-color);border-radius:0 var(--hub-list-search-border-radius) var(--hub-list-search-border-radius) 0!important;cursor:pointer}.hub-list__search-icon{display:inline-block;width:var(--hub-ref-icon-size, 1em);height:var(--hub-ref-icon-size, 1em);background-color:currentColor;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z'/%3E%3C/svg%3E\")}.hub-list__item{display:flex;flex-direction:column;padding:var(--hub-list-item-padding-y) var(--hub-list-item-padding-x);background-color:var(--hub-list-item-bg);color:var(--hub-list-item-color);border-radius:var(--hub-list-item-border-radius);transition:background-color .15s ease-in-out;position:relative;border:var(--hub-list-item-border-width) solid var(--hub-list-item-border-color)}.hub-list__item--clickable{cursor:pointer}.hub-list__item--clickable:hover{background-color:var(--hub-list-item-hover-bg)}.hub-list__item--selected{background-color:var(--hub-list-item-selected-bg)!important;color:var(--hub-list-item-selected-color);border-color:var(--hub-list-item-selected-bg)}.hub-list__item--selected .hub-list__label,.hub-list__item--selected .hub-list__actions button{color:var(--hub-list-item-selected-color)}.hub-list__item--empty{background-color:var(--hub-list-empty-bg);color:var(--hub-list-empty-color);padding:var(--hub-list-empty-padding-y, var(--hub-ref-space-3, 1rem)) var(--hub-list-empty-padding-x, var(--hub-ref-space-3, 1rem));border-color:var(--hub-list-empty-border-color);text-align:center}.hub-list__items--cards{display:grid;grid-template-columns:repeat(var(--hub-list-cards-columns),minmax(min(100%,var(--hub-list-cards-min-column-width)),1fr));gap:var(--hub-list-cards-row-gap) var(--hub-list-cards-column-gap)}.hub-list__items--cards>.hub-list__item{height:100%;background-color:var(--hub-list-cards-bg);color:var(--hub-list-cards-color);padding:var(--hub-list-cards-padding-y) var(--hub-list-cards-padding-x);border:var(--hub-list-cards-border-width) solid var(--hub-list-cards-border-color);border-radius:var(--hub-list-cards-border-radius);box-shadow:var(--hub-list-cards-shadow);transition:var(--hub-list-cards-transition)}.hub-list__items--cards>.hub-list__item.hub-list__item--clickable:hover{background-color:var(--hub-list-cards-hover-bg);box-shadow:var(--hub-list-cards-hover-shadow)}.hub-list__items--cards .hub-list__item-content{align-items:flex-start}.hub-list__items--cards .hub-list__label{overflow:visible;text-overflow:initial;white-space:normal}.hub-list__label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex-grow:1}.hub-list__item-content{display:flex;justify-content:space-between;align-items:center;gap:var(--hub-list-item-gap);width:100%}.hub-list__checkbox{width:var(--hub-list-checkbox-size);height:var(--hub-list-checkbox-size);flex-shrink:0;cursor:pointer}.hub-list__actions{display:flex;align-items:center;gap:var(--hub-ref-space-2, .5rem)}.hub-list__chevron{padding:0;font-size:var(--hub-list-chevron-size);display:flex;align-items:center;justify-content:center;background:transparent;border:none;cursor:pointer}.hub-list__no-results{display:flex;align-items:center;gap:var(--hub-ref-space-2, .5rem)}.hub-list__drag-handle{display:inline-flex;align-items:center;justify-content:center;font-size:var(--hub-list-drag-handle-size);color:var(--hub-list-drag-handle-color);cursor:var(--hub-list-drag-handle-cursor);touch-action:none;-webkit-user-select:none;user-select:none}.hub-list__item--dragging{opacity:var(--hub-list-item-dragging-opacity);cursor:var(--hub-list-item-dragging-cursor)}.hub-list__item--drag-disabled .hub-list__drag-handle{cursor:not-allowed;opacity:.4}.hub-list__placeholder{list-style:none;pointer-events:none;min-height:var(--hub-list-placeholder-min-height);background-color:var(--hub-list-placeholder-bg);border:var(--hub-list-placeholder-border-width) var(--hub-list-placeholder-border-style) var(--hub-list-placeholder-border-color);border-radius:var(--hub-list-placeholder-border-radius)}.hub-list__items--cards>.hub-list__placeholder{height:100%}.hub-list__sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}:host([data-variant=primary]),.hub-list[data-variant=primary]{--hub-list-accent: var(--hub-sys-color-primary)}:host([data-variant=success]),.hub-list[data-variant=success]{--hub-list-accent: var(--hub-sys-color-success)}:host([data-variant=danger]),.hub-list[data-variant=danger]{--hub-list-accent: var(--hub-sys-color-danger)}:host([data-variant=warning]),.hub-list[data-variant=warning]{--hub-list-accent: var(--hub-sys-color-warning)}:host([data-variant=info]),.hub-list[data-variant=info]{--hub-list-accent: var(--hub-sys-color-info)}\n"] }]
|
|
3097
|
+
}], ctorParameters: () => [], propDecorators: { loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }, { type: i0.Output, args: ["loadingChange"] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }, { type: i0.Output, args: ["errorChange"] }], loadingComponent: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadingComponent", required: false }] }], errorComponent: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorComponent", required: false }] }], noResultsComponent: [{ type: i0.Input, args: [{ isSignal: true, alias: "noResultsComponent", required: false }] }], bindValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindValue", required: false }] }], bindLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindLabel", required: false }] }], bindChildren: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindChildren", required: false }] }], selectable: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectable", required: false }] }], paginate: [{ type: i0.Input, args: [{ isSignal: true, alias: "paginate", required: false }] }], page: [{ type: i0.Input, args: [{ isSignal: true, alias: "page", required: false }] }, { type: i0.Output, args: ["pageChange"] }], perPage: [{ type: i0.Input, args: [{ isSignal: true, alias: "perPage", required: false }] }, { type: i0.Output, args: ["perPageChange"] }], perPageOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "perPageOptions", required: false }] }], totalItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "totalItems", required: false }] }, { type: i0.Output, args: ["totalItemsChange"] }], sortable: [{ type: i0.Input, args: [{ isSignal: true, alias: "sortable", required: false }] }], dragGroup: [{ type: i0.Input, args: [{ isSignal: true, alias: "dragGroup", required: false }] }], sortDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "sortDisabled", required: false }] }], keyboardSortable: [{ type: i0.Input, args: [{ isSignal: true, alias: "keyboardSortable", required: false }] }], sorted: [{ type: i0.Output, args: ["sorted"] }], options: [{
|
|
2208
3098
|
type: Input
|
|
2209
3099
|
}], items: [{
|
|
2210
3100
|
type: Input
|
|
2211
|
-
}], clickFn: [{ type: i0.Input, args: [{ isSignal: true, alias: "clickFn", required: false }] }], rowClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowClass", required: false }] }], itemTpt: [{ type: i0.ContentChild, args: [i0.forwardRef(() => PaginableListItemDirective), { ...{ read: TemplateRef }, isSignal: true }] }], noResultsTpt: [{ type: i0.ContentChild, args: [i0.forwardRef(() => PaginableNoResultsDirective), { ...{ read: TemplateRef }, isSignal: true }] }], loadingTpt: [{ type: i0.ContentChild, args: [i0.forwardRef(() => PaginableLoadingDirective), { ...{ read: TemplateRef }, isSignal: true }] }], errorTpt: [{ type: i0.ContentChild, args: [i0.forwardRef(() => PaginableErrorDirective), { ...{ read: TemplateRef }, isSignal: true }] }], batchActions: [{
|
|
3101
|
+
}], clickFn: [{ type: i0.Input, args: [{ isSignal: true, alias: "clickFn", required: false }] }], rowClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowClass", required: false }] }], itemTpt: [{ type: i0.ContentChild, args: [i0.forwardRef(() => PaginableListItemDirective), { ...{ read: TemplateRef }, isSignal: true }] }], noResultsTpt: [{ type: i0.ContentChild, args: [i0.forwardRef(() => PaginableNoResultsDirective), { ...{ read: TemplateRef }, isSignal: true }] }], loadingTpt: [{ type: i0.ContentChild, args: [i0.forwardRef(() => PaginableLoadingDirective), { ...{ read: TemplateRef }, isSignal: true }] }], errorTpt: [{ type: i0.ContentChild, args: [i0.forwardRef(() => PaginableErrorDirective), { ...{ read: TemplateRef }, isSignal: true }] }], placeholderTpt: [{ type: i0.ContentChild, args: [i0.forwardRef(() => HubListDragPlaceholderDirective), { ...{ read: TemplateRef }, isSignal: true }] }], previewTpt: [{ type: i0.ContentChild, args: [i0.forwardRef(() => HubListDragPreviewDirective), { ...{ read: TemplateRef }, isSignal: true }] }], batchActions: [{
|
|
2212
3102
|
type: Input
|
|
2213
3103
|
}] } });
|
|
2214
3104
|
|
|
@@ -3744,7 +4634,7 @@ class TableComponent {
|
|
|
3744
4634
|
useExisting: forwardRef(() => TableComponent),
|
|
3745
4635
|
multi: true
|
|
3746
4636
|
}
|
|
3747
|
-
], queries: [{ propertyName: "templateRow", first: true, predicate: PaginableTableRowDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "headerTpts", predicate: PaginableTableHeaderDirective, isSignal: true }, { propertyName: "templateCells", predicate: PaginableTableCellDirective, isSignal: true }, { propertyName: "noResultsTpt", first: true, predicate: PaginableNoResultsDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "loadingTpt", first: true, predicate: PaginableLoadingDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "errorTpt", first: true, predicate: PaginableErrorDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "templateExpandingRows", predicate: PaginableTableExpandingRowDirective, isSignal: true }, { propertyName: "filterTpts", predicate: PaginableTableFilterDirective, isSignal: true }], viewQueries: [{ propertyName: "dropdownComponents", predicate: DropdownComponent, descendants: true, isSignal: true }], ngImport: i0, template: "@if (batchActions().length || searchable() || headerFilters().length) {\n\t<div class=\"hub-table__top-bar\">\n\t\t@if (batchActions().length) {\n\t\t\t<div class=\"hub-table__batch-actions\">\n\t\t\t\t@for (button of batchActions(); track $index) {\n\t\t\t\t\t@if ($any(button).buttons?.length) {\n\t\t\t\t\t\t<hub-table-dropdown\n\t\t\t\t\t\t\tclass=\"hub-table__batch-actions-dropdown\"\n\t\t\t\t\t\t\t[options]=\"$any(button)\"\n\t\t\t\t\t\t\t[disabled]=\"!value.length\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t</hub-table-dropdown>\n\t\t\t\t\t} @else {\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tclass=\"hub-table__batch-actions-btn\"\n\t\t\t\t\t\t\t[ngClass]=\"getBatchActionClassList(button)\"\n\t\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\t\t(click)=\"handleBatchAction(button)\"\n\t\t\t\t\t\t\t[disabled]=\"!value.length\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t@if (button.icon) {\n\t\t\t\t\t\t\t\t<i class=\"hub-table__batch-actions-btn-icon {{ button.icon }}\"></i>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (button.title) {\n\t\t\t\t\t\t\t\t<span class=\"hub-table__batch-actions-btn-title\">{{ button.title | unwrapAsync }}</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\t\t@if (searchable()) {\n\t\t\t<div class=\"hub-table__search\">\n\t\t\t\t@if (isRtl()) {\n\t\t\t\t\t<button\n\t\t\t\t\t\tclass=\"hub-table__search-button btn btn-outline-dark\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t[attr.aria-label]=\"'SEARCH' | translate | ucfirst\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<i class=\"hub-table__search-icon hub-table__icon hub-table__icon--search\" aria-hidden=\"true\"></i>\n\t\t\t\t\t</button>\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tclass=\"hub-table__search-input\"\n\t\t\t\t\t\t(input)=\"searchProxy$.next($any($event.target).value)\"\n\t\t\t\t\t\t[value]=\"searchTerm()\"\n\t\t\t\t\t\t[attr.placeholder]=\"'SEARCH' | translate | ucfirst\"\n\t\t\t\t\t\t[attr.aria-label]=\"'SEARCH' | translate | ucfirst\"\n\t\t\t\t\t/>\n\t\t\t\t} @else {\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tclass=\"hub-table__search-input\"\n\t\t\t\t\t\t(input)=\"searchProxy$.next($any($event.target).value)\"\n\t\t\t\t\t\t[value]=\"searchTerm()\"\n\t\t\t\t\t\t[attr.placeholder]=\"'SEARCH' | translate | ucfirst\"\n\t\t\t\t\t\t[attr.aria-label]=\"'SEARCH' | translate | ucfirst\"\n\t\t\t\t\t/>\n\t\t\t\t\t<button\n\t\t\t\t\t\tclass=\"hub-table__search-button btn btn-outline-dark\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t[attr.aria-label]=\"'SEARCH' | translate | ucfirst\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<i class=\"hub-table__search-icon hub-table__icon hub-table__icon--search\" aria-hidden=\"true\"></i>\n\t\t\t\t\t</button>\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\t\t@if (headerFilters().length) {\n\t\t\t<div class=\"hub-table__delete-filters\">\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"hub-table__delete-filters-btn btn btn-outline-danger\"\n\t\t\t\t\t(click)=\"clearFilters()\"\n\t\t\t\t\t[disabled]=\"filterLoading\"\n\t\t\t\t>\n\t\t\t\t\t<i class=\"hub-table__delete-filters-icon hub-table__icon hub-table__icon--eraser\"></i>\n\t\t\t\t\t{{ 'CLEAN_FILTERS' | translate | ucfirst }}\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t}\n\t</div>\n}\n\n<div class=\"hub-table__container {{ responsiveCSSClass() }}\" [class.hub-table__responsive]=\"responsiveCSSClass()\">\n\t@let striped = options().striped;\n\t<table\n\t\tclass=\"hub-table__element\"\n\t\t[class.hub-table__hover]=\"(options().hoverableRows || selectable()) && !loading()\"\n\t\t[class.hub-table__striped-odd]=\"striped === 'rows-odd'\"\n\t\t[class.hub-table__striped-even]=\"striped === 'rows-even'\"\n\t\t[class.hub-table__striped-columns-odd]=\"striped === 'columns-odd'\"\n\t\t[class.hub-table__striped-columns-even]=\"striped === 'columns-even'\"\n\t\t[class.hub-table__selectable]=\"selectable()\"\n\t\t[class.hub-table__scrollable]=\"options().scrollable\"\n\t\t[ngClass]=\"options().variant ? 'hub-table__' + options().variant : null\"\n\t>\n\t\t<thead class=\"hub-table__head\" [formGroup]=\"filtersFG\">\n\t\t\t<tr class=\"hub-table__head-row\">\n\t\t\t\t@if (selectable()) {\n\t\t\t\t\t<th class=\"hub-table__header-cell hub-table__header-cell--actions sticky-start\">\n\t\t\t\t\t\t@if (multipleSelectable()) {\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\t[(ngModel)]=\"allRowsSelected\"\n\t\t\t\t\t\t\t\t[ngModelOptions]=\"{ standalone: true }\"\n\t\t\t\t\t\t\t\t(click)=\"toggleAll()\"\n\t\t\t\t\t\t\t\t[disabled]=\"disabled\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t}\n\t\t\t\t\t</th>\n\t\t\t\t}\n\t\t\t\t@for (header of fixedHeaders(); track header.property) {\n\t\t\t\t\t@if (!(isColumnHidden(header) | async)) {\n\t\t\t\t\t\t<th\n\t\t\t\t\t\t\tclass=\"hub-table__header-cell\"\n\t\t\t\t\t\t\tresizable\n\t\t\t\t\t\t\t[class.sticky-start]=\"header.sticky === 'start'\"\n\t\t\t\t\t\t\t[class.sticky-end]=\"header.sticky === 'end'\"\n\t\t\t\t\t\t\t[class.text-start]=\"header.align === 'start'\"\n\t\t\t\t\t\t\t[class.text-end]=\"header.align === 'end'\"\n\t\t\t\t\t\t\t[class.text-center]=\"header.align === 'center'\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"hub-table__header-cell-content d-flex flex-nowrap align-items-center justify-content-between gap-2\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"getHeaderTemplate(header) || defaultHeaderTpt\"\n\t\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{\n\t\t\t\t\t\t\t\t\t\theader,\n\t\t\t\t\t\t\t\t\t\tproperty: header | get: header.property\n\t\t\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t\t@if (header.sortable || header.filter?.mode === 'menu') {\n\t\t\t\t\t\t\t\t\t<div class=\"hub-table__header-cell-actions d-flex gap-2 ms-auto align-items-center\">\n\t\t\t\t\t\t\t\t\t\t<button class=\"hub-table__sort-btn btn\" (click)=\"sort(header)\">\n\t\t\t\t\t\t\t\t\t\t\t@if (header.sortable) {\n\t\t\t\t\t\t\t\t\t\t\t\t<i\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-table__sort-icon hub-table__icon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"getOrdenationClass(header)\"\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\t\t\t></i>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t@if (header.filter?.mode === 'menu') {\n\t\t\t\t\t\t\t\t\t\t\t<hub-dropdown\n\t\t\t\t\t\t\t\t\t\t\t\t#dropdown\n\t\t\t\t\t\t\t\t\t\t\t\t(open)=\"onDropdownFilterOpened($event)\"\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-table__filter-dropdown\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-table__filter-button button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t[class.hub-table__filter-button--active]=\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfiltersFG.get(header.filter.key || header.property)?.value?.rules\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t?.length\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<i\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-table__filter-button-icon hub-table__icon hub-table__icon--filter\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t></i>\n\t\t\t\t\t\t\t\t\t\t\t\t\t@if (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfiltersFG.get(header.filter.key || header.property)?.value?.rules;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tas rules\n\t\t\t\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t@if (rules.length) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"hub-table__filter-count\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{ rules.length }}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t@if (dropdown.isOpened()) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t<menu-filter\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-table__filter-dropdown-content content\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[header]=\"header\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[formControlName]=\"header.filter.key || header.property\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</menu-filter>\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t</hub-dropdown>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t@if (templateExpandingRows().length) {\n\t\t\t\t\t<th class=\"hub-table__header-cell hub-table__header-cell--expander sticky-end\"></th>\n\t\t\t\t}\n\t\t\t</tr>\n\n\t\t\t<!-- Filtering -->\n\t\t\t@if (hasColumnFilters()) {\n\t\t\t\t<tr class=\"hub-table__filter-row\">\n\t\t\t\t\t@if (selectable() || batchActions.length) {\n\t\t\t\t\t\t<th class=\"hub-table__filter-cell sticky-start\"></th>\n\t\t\t\t\t}\n\t\t\t\t\t@for (header of fixedHeaders(); track $index; let last = $last) {\n\t\t\t\t\t\t@if (!(isColumnHidden(header) | async)) {\n\t\t\t\t\t\t\t@let formControlName = header.filter?.key || header.property;\n\t\t\t\t\t\t\t<th\n\t\t\t\t\t\t\t\tclass=\"hub-table__filter-cell\"\n\t\t\t\t\t\t\t\t[class.sticky-start]=\"header.sticky === 'start'\"\n\t\t\t\t\t\t\t\t[class.sticky-end]=\"header.sticky === 'end'\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t@if (header.filter && header.filter.mode !== 'menu' && filtersFG.get(formControlName)) {\n\t\t\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"getFilterTemplate(header) || defaultFilterTpt\"\n\t\t\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{\n\t\t\t\t\t\t\t\t\t\t\theader: header,\n\t\t\t\t\t\t\t\t\t\t\tformControl: filtersFG.get(formControlName)\n\t\t\t\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t</tr>\n\t\t\t}\n\t\t</thead>\n\t\t<tbody class=\"hub-table__body\">\n\t\t\t@if (loading()) {\n\t\t\t\t<tr class=\"hub-table__body-row\">\n\t\t\t\t\t<td class=\"hub-table__cell\" [attr.colspan]=\"headersCount()\">\n\t\t\t\t\t\t<hub-state-outlet\n\t\t\t\t\t\t\t[template]=\"loadingTpt()\"\n\t\t\t\t\t\t\t[instanceDefault]=\"loadingComponent()\"\n\t\t\t\t\t\t\t[globalDefault]=\"defaults.loading()\"\n\t\t\t\t\t\t\t[fallback]=\"defaultLoadingTpt\"\n\t\t\t\t\t\t\t[context]=\"{ colspan: headersCount() }\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t} @else if (error()) {\n\t\t\t\t<tr class=\"hub-table__body-row\">\n\t\t\t\t\t<td class=\"hub-table__cell\" [attr.colspan]=\"headersCount()\">\n\t\t\t\t\t\t<hub-state-outlet\n\t\t\t\t\t\t\t[template]=\"errorTpt()\"\n\t\t\t\t\t\t\t[instanceDefault]=\"errorComponent()\"\n\t\t\t\t\t\t\t[globalDefault]=\"defaults.error()\"\n\t\t\t\t\t\t\t[fallback]=\"defaultErrorTpt\"\n\t\t\t\t\t\t\t[context]=\"{ error: error(), colspan: headersCount() }\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t} @else if (rows().length) {\n\t\t\t\t@for (item of rows(); track $index) {\n\t\t\t\t\t<ng-container\n\t\t\t\t\t\t[ngTemplateOutlet]=\"templateRow() || defaultRowTemplate\"\n\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: item }\"\n\t\t\t\t\t>\n\t\t\t\t\t</ng-container>\n\t\t\t\t}\n\t\t\t} @else {\n\t\t\t\t<tr>\n\t\t\t\t\t<td [attr.colspan]=\"headersCount()\">\n\t\t\t\t\t\t<hub-state-outlet\n\t\t\t\t\t\t\t[template]=\"noResultsTpt()\"\n\t\t\t\t\t\t\t[instanceDefault]=\"noResultsComponent()\"\n\t\t\t\t\t\t\t[globalDefault]=\"defaults.noResults()\"\n\t\t\t\t\t\t\t[fallback]=\"defaultNoResultsTpt\"\n\t\t\t\t\t\t\t[context]=\"{ colspan: headersCount(), filters: filters() ?? undefined }\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t}\n\t\t</tbody>\n\t</table>\n</div>\n\n<!-- Pagination -->\n@if (page() !== undefined && page() !== null) {\n\t<div class=\"hub-table__bottom-bar\">\n\t\t@if (paginationPosition() == 'bottom' || paginationPosition() === 'both') {\n\t\t\t<hub-paginator\n\t\t\t\tclass=\"hub-table__paginator hub-table__bottom-bar-paginator\"\n\t\t\t\t[(page)]=\"$any(page)\"\n\t\t\t\t[numberOfPages]=\"numberOfPages()\"\n\t\t\t\t[rtl]=\"isRtl()\"\n\t\t\t>\n\t\t\t</hub-paginator>\n\t\t}\n\t\t<div class=\"hub-table__bottom-bar-settings hub-paginator__settings\">\n\t\t\t<label class=\"hub-paginator__label\"> {{ 'ROWS_PER_PAGE' | translate | ucfirst }}: </label>\n\t\t\t<select\n\t\t\t\tclass=\"hub-paginator__select\"\n\t\t\t\t[ngModel]=\"perPage()\"\n\t\t\t\t(ngModelChange)=\"perPage.set($event)\"\n\t\t\t\t[ngModelOptions]=\"{ standalone: true }\"\n\t\t\t>\n\t\t\t\t@for (option of perPageOptions(); track option) {\n\t\t\t\t\t<option [ngValue]=\"option\" class=\"hub-paginator__select-option\">\n\t\t\t\t\t\t{{ option }}\n\t\t\t\t\t</option>\n\t\t\t\t}\n\t\t\t</select>\n\t\t</div>\n\t\t@if (totalItems() !== null && totalItems() !== undefined) {\n\t\t\t<p class=\"hub-table__bottom-bar-info hub-paginator__info\">\n\t\t\t\t{{\n\t\t\t\t\t'SHOWING_X_OF_Y_ROWS'\n\t\t\t\t\t\t| translate\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\tamount: rows().length,\n\t\t\t\t\t\t\t\t\ttotal: totalItems()\n\t\t\t\t\t\t\t }\n\t\t\t\t\t\t| ucfirst\n\t\t\t\t}}\n\t\t\t</p>\n\t\t}\n\t</div>\n}\n<ng-template #defaultRowTemplate let-item>\n\t<tr\n\t\tclass=\"hub-table__body-row\"\n\t\t(click)=\"onItemClick($event, item)\"\n\t\t[class.hub-table__body-row--selected]=\"selectable() && item.selected\"\n\t\t[class.hub-table__body-row--clickable]=\"clickFn()\"\n\t\t[ngClass]=\"_getRowClass(item)\"\n\t>\n\t\t@if (selectable() || batchActions.length) {\n\t\t\t<td class=\"hub-table__cell hub-table__cell--select sticky-start\">\n\t\t\t\t<input\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t[(ngModel)]=\"item.selected\"\n\t\t\t\t\t[ngModelOptions]=\"{ standalone: true }\"\n\t\t\t\t\t(click)=\"$event.stopPropagation(); toggle(item)\"\n\t\t\t\t/>\n\t\t\t</td>\n\t\t}\n\t\t@for (header of fixedHeaders(); track $index) {\n\t\t\t@if (!(isColumnHidden(header) | async)) {\n\t\t\t\t<td\n\t\t\t\t\tclass=\"hub-table__cell\"\n\t\t\t\t\t[class.sticky-start]=\"header.sticky === 'start'\"\n\t\t\t\t\t[class.sticky-end]=\"header.sticky === 'end'\"\n\t\t\t\t\t[class.text-start]=\"header.align === 'start'\"\n\t\t\t\t\t[class.text-end]=\"header.align === 'end'\"\n\t\t\t\t\t[class.text-center]=\"header.align === 'center'\"\n\t\t\t\t\t[style.width]=\"header.buttons?.length ? '0' : 'auto'\"\n\t\t\t\t>\n\t\t\t\t\t<ng-container\n\t\t\t\t\t\t[ngTemplateOutlet]=\"getCellTemplate(header) || defaultCellTpt\"\n\t\t\t\t\t\t[ngTemplateOutletContext]=\"{\n\t\t\t\t\t\t\theader: header,\n\t\t\t\t\t\t\titem: item.data,\n\t\t\t\t\t\t\trow: item,\n\t\t\t\t\t\t\tproperty: item.data | get: header.property\n\t\t\t\t\t\t}\"\n\t\t\t\t\t>\n\t\t\t\t\t</ng-container>\n\t\t\t\t</td>\n\t\t\t}\n\t\t}\n\t\t@if (templateExpandingRows().length) {\n\t\t\t<td class=\"hub-table__cell hub-table__cell--expander sticky-end\" [class.sticky-end]=\"stickyActions()\">\n\t\t\t\t@if (templateExpandingRows().length) {\n\t\t\t\t\t<button (click)=\"toggleExpandedRow(item)\" type=\"button\" class=\"hub-table__expander-btn btn btn-link px-2\">\n\t\t\t\t\t\t<i\n\t\t\t\t\t\t\tclass=\"hub-table__expander-icon hub-table__icon\"\n\t\t\t\t\t\t\t[class.hub-table__icon--caret-up]=\"!item.collapsed\"\n\t\t\t\t\t\t\t[class.hub-table__icon--caret-down]=\"item.collapsed\"\n\t\t\t\t\t\t></i>\n\t\t\t\t\t</button>\n\t\t\t\t}\n\t\t\t</td>\n\t\t}\n\t\t<!-- <td *ngIf=\"!lastColumnOnlyHasButtons && filterHeaders?.length\"></td> -->\n\t</tr>\n\t@if (!item.collapsed) {\n\t\t@for (template of templateExpandingRows(); track template) {\n\t\t\t<ng-container [ngTemplateOutlet]=\"template.templateRef\" [ngTemplateOutletContext]=\"{ item: item }\"> </ng-container>\n\t\t}\n\t}\n</ng-template>\n\n<ng-template #defaultNoResultsTpt>\n\t<div class=\"hub-table__no-data alert alert-info d-flex align-items-center m-4\" role=\"alert\">\n\t\t<i class=\"hub-table__no-data-icon hub-table__icon hub-table__icon--info hub-table__icon--2x\" aria-hidden=\"true\"></i>\n\t\t{{ 'NO_RESULTS_FOUND' | translate | ucfirst }}\n\t</div>\n</ng-template>\n\n<ng-template #defaultLoadingTpt>\n\t<div class=\"hub-table__loading\">\n\t\t<svg\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\txmlns:xlink=\"http://www.w3.org/1999/xlink\"\n\t\t\tstyle=\"margin: auto; background: #fff; display: block\"\n\t\t\twidth=\"200px\"\n\t\t\theight=\"200px\"\n\t\t\tviewBox=\"0 0 100 100\"\n\t\t\tpreserveAspectRatio=\"xMidYMid\"\n\t\t>\n\t\t\t<circle cx=\"50\" cy=\"50\" r=\"0\" fill=\"none\" stroke=\"#cccccc\" stroke-width=\"1\">\n\t\t\t\t<animate\n\t\t\t\t\tattributeName=\"r\"\n\t\t\t\t\trepeatCount=\"indefinite\"\n\t\t\t\t\tdur=\"1.6666666666666667s\"\n\t\t\t\t\tvalues=\"0;40\"\n\t\t\t\t\tkeyTimes=\"0;1\"\n\t\t\t\t\tkeySplines=\"0 0.2 0.8 1\"\n\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t></animate>\n\t\t\t\t<animate\n\t\t\t\t\tattributeName=\"opacity\"\n\t\t\t\t\trepeatCount=\"indefinite\"\n\t\t\t\t\tdur=\"1.6666666666666667s\"\n\t\t\t\t\tvalues=\"1;0\"\n\t\t\t\t\tkeyTimes=\"0;1\"\n\t\t\t\t\tkeySplines=\"0.2 0 0.8 1\"\n\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t></animate>\n\t\t\t</circle>\n\t\t\t<circle cx=\"50\" cy=\"50\" r=\"0\" fill=\"none\" stroke=\"#333333\" stroke-width=\"1\">\n\t\t\t\t<animate\n\t\t\t\t\tattributeName=\"r\"\n\t\t\t\t\trepeatCount=\"indefinite\"\n\t\t\t\t\tdur=\"1.6666666666666667s\"\n\t\t\t\t\tvalues=\"0;40\"\n\t\t\t\t\tkeyTimes=\"0;1\"\n\t\t\t\t\tkeySplines=\"0 0.2 0.8 1\"\n\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\tbegin=\"-0.8333333333333334s\"\n\t\t\t\t></animate>\n\t\t\t\t<animate\n\t\t\t\t\tattributeName=\"opacity\"\n\t\t\t\t\trepeatCount=\"indefinite\"\n\t\t\t\t\tdur=\"1.6666666666666667s\"\n\t\t\t\t\tvalues=\"1;0\"\n\t\t\t\t\tkeyTimes=\"0;1\"\n\t\t\t\t\tkeySplines=\"0.2 0 0.8 1\"\n\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\tbegin=\"-0.8333333333333334s\"\n\t\t\t\t></animate>\n\t\t\t</circle>\n\t\t</svg>\n\t</div>\n</ng-template>\n\n<ng-template #defaultErrorTpt>\n\t<div class=\"hub-table__error m-4 p-4 text-center text-danger\">\n\t\t<svg\n\t\t\taria-hidden=\"true\"\n\t\t\tfocusable=\"false\"\n\t\t\tdata-prefix=\"fal\"\n\t\t\tdata-icon=\"sad-tear\"\n\t\t\trole=\"img\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\tviewBox=\"0 0 496 512\"\n\t\t\tstyle=\"height: 64px\"\n\t\t>\n\t\t\t<path\n\t\t\t\tfill=\"#dc3545\"\n\t\t\t\td=\"M168 240c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 464c-119.1 0-216-96.9-216-216S128.9 40 248 40s216 96.9 216 216-96.9 216-216 216zm0-152c-11.2 0-22 1.7-32.7 4.1-7.2-12.6-16.1-26.5-28.1-42.4-9-12.1-29.4-12-38.4 0-29.7 39.6-44.8 69-44.8 87.3 0 34.7 28.7 63 64 63s64-28.3 64-63c0-4.4-1-9.5-2.7-15.1 6.1-1.2 12.3-1.9 18.7-1.9 34.9 0 67.8 15.4 90.2 42.2 5.3 6.4 15.4 8 22.5 2 6.8-5.7 7.7-15.8 2-22.5C334.2 339.6 292.4 320 248 320zm-80 80c-17.7 0-32-13.9-32-31 0-7.7 10-28.8 32-59.5 22 30.7 32 51.8 32 59.5 0 17.1-14.3 31-32 31z\"\n\t\t\t\tclass=\"\"\n\t\t\t></path>\n\t\t</svg>\n\t\t<p>{{ 'ERROR_OCURRED' | translate }}</p>\n\t</div>\n</ng-template>\n\n<ng-template #defaultHeaderTpt let-header=\"header\" let-property=\"property\">\n\t@if (header.icon) {\n\t\t<i class=\"hub-table__header-icon {{ header.icon }}\" aria-hidden=\"true\"></i>\n\t}\n\t<div\n\t\tclass=\"hub-table__header-title\"\n\t\t[class.me-auto]=\"header.align === 'start'\"\n\t\t[class.ms-auto]=\"header.align === 'end'\"\n\t\t[class.mx-auto]=\"header.align === 'center'\"\n\t>\n\t\t@if (header.title) {\n\t\t\t<span class=\"hub-table__header-title-text text-wrap\">{{ header.title ?? header.property | unwrapAsync }}</span>\n\t\t}\n\t</div>\n</ng-template>\n\n<ng-template #defaultFilterTpt let-header=\"header\" let-formControl=\"formControl\">\n\t@switch (header.filter.type) {\n\t\t@case ('dropdown') {\n\t\t\t<select [formControl]=\"formControl\" class=\"form-select form-control\">\n\t\t\t\t@if (header.filter.placeholder) {\n\t\t\t\t\t<option [ngValue]=\"null\">\n\t\t\t\t\t\t{{ header.filter.placeholder }}\n\t\t\t\t\t</option>\n\t\t\t\t}\n\t\t\t\t@if (header.filter.options | isObservable) {\n\t\t\t\t\t@let options = header.filter.options | async;\n\t\t\t\t\t@for (option of $any(options); track option) {\n\t\t\t\t\t\t<option [value]=\"option[header.filter.bindValue || 'id']\">\n\t\t\t\t\t\t\t{{ option[header.filter.bindLabel || 'name'] }}\n\t\t\t\t\t\t</option>\n\t\t\t\t\t}\n\t\t\t\t} @else {\n\t\t\t\t\t@for (option of header.filter.options; track option) {\n\t\t\t\t\t\t<option [value]=\"option[header.filter.bindValue || 'id']\">\n\t\t\t\t\t\t\t{{ option[header.filter.bindLabel || 'name'] }}\n\t\t\t\t\t\t</option>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t</select>\n\t\t}\n\t\t@case ('number-range') {\n\t\t\t<hub-table-range-input type=\"number\" [formControl]=\"formControl\"> </hub-table-range-input>\n\t\t}\n\t\t@case ('date-range') {\n\t\t\t<hub-table-range-input type=\"date\" [formControl]=\"formControl\"> </hub-table-range-input>\n\t\t}\n\t\t@case ('boolean') {\n\t\t\t<select [formControl]=\"formControl\" class=\"form-select form-control\">\n\t\t\t\t<option [ngValue]=\"null\">\n\t\t\t\t\t{{ header.filter.placeholder ?? 'SELECT_ONE' | translate | ucfirst }}\n\t\t\t\t</option>\n\t\t\t\t<option [ngValue]=\"true\">\n\t\t\t\t\t{{ header.filter.trueLabel ?? ('TRUE' | translate | ucfirst) }}\n\t\t\t\t</option>\n\t\t\t\t<option [ngValue]=\"false\">\n\t\t\t\t\t{{ header.filter.falseLabel ?? ('FALSE' | translate | ucfirst) }}\n\t\t\t\t</option>\n\t\t\t</select>\n\t\t}\n\t\t@default {\n\t\t\t<input\n\t\t\t\t[type]=\"header.filter.type\"\n\t\t\t\t[formControl]=\"formControl\"\n\t\t\t\tclass=\"form-control\"\n\t\t\t\t[placeholder]=\"header.filter.placeholder || ''\"\n\t\t\t/>\n\t\t}\n\t}\n</ng-template>\n\n<ng-template #defaultCellTpt let-property=\"property\" let-item=\"item\" let-row=\"row\" let-header=\"header\">\n\t@if (header.buttons) {\n\t\t<div class=\"hub-table__cell-buttons d-flex flex-nowrap gap-2 justify-content-end align-items-center\">\n\t\t\t@for (button of header.buttons; track button) {\n\t\t\t\t@if (button.buttons) {\n\t\t\t\t\t<hub-table-dropdown [options]=\"button\" [row]=\"row\" class=\"hub-table__cell-dropdown d-inline-block\">\n\t\t\t\t\t</hub-table-dropdown>\n\t\t\t\t} @else {\n\t\t\t\t\t@if (!(isHidden(button, row) | async)) {\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclass=\"hub-table__cell-btn\"\n\t\t\t\t\t\t\t[attr.title]=\"button.tooltip | unwrapAsync\"\n\t\t\t\t\t\t\t(click)=\"handleAction($event, button, row)\"\n\t\t\t\t\t\t\t[ngClass]=\"getRowActionClassList(button)\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div class=\"hub-table__cell-btn-content d-flex flex-nowrap align-items-center gap-1\">\n\t\t\t\t\t\t\t\t<ng-hub-ui-icon [config]=\"button.icon\"></ng-hub-ui-icon>\n\t\t\t\t\t\t\t\t@if (button.label) {\n\t\t\t\t\t\t\t\t\t<span class=\"hub-table__cell-btn-label\">{{ button.label | unwrapAsync }}</span>\n\t\t\t\t\t\t\t\t} @else if (button.title) {\n\t\t\t\t\t\t\t\t\t<span class=\"hub-table__cell-btn-label\">{{ button.title | unwrapAsync }}</span>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t</div>\n\t} @else {\n\t\t<span class=\"hub-table__cell-value\">{{ property }}</span>\n\t}\n</ng-template>\n", styles: [":root,:host{--hub-table-container-bg: var(--hub-ref-color-white, #fff);--hub-table-container-color: var(--hub-sys-text-primary, #212529);--hub-table-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-table-border-radius: var(--hub-ref-radius-md, .375rem);--hub-table-border-width: var(--hub-ref-border-width, 1px);--hub-table-container-gap: var(--hub-ref-space-3, 1rem);--hub-table-top-bar-gap: var(--hub-ref-space-3, 1rem);--hub-table-top-bar-justify-content: end;--hub-table-top-bar-align-items: center;--hub-table-top-bar-wrap: wrap;--hub-table-batch-actions-gap: var(--hub-ref-space-2, .5rem);--hub-table-batch-actions-margin-inline-end: auto;--hub-table-bottom-bar-gap: var(--hub-ref-space-3, 1rem);--hub-table-bottom-bar-justify-content: space-around;--hub-table-bottom-bar-align-items: center;--hub-table-bottom-bar-wrap: wrap;--hub-table-bottom-bar-paginator-order: 1;--hub-table-bottom-bar-settings-order: 2;--hub-table-bottom-bar-info-order: 3;--hub-table-bottom-bar-paginator-flex: 0 0 auto;--hub-table-bottom-bar-settings-flex: 0 0 auto;--hub-table-bottom-bar-info-flex: 0 0 auto;--hub-table-icon-color: currentColor;--hub-table-icon-size: 1em;--hub-table-icon-sort: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M137.4 41.4c12.5-12.5 32.8-12.5 45.3 0l128 128c9.2 9.2 11.9 22.9 6.9 34.9s-16.6 19.8-29.6 19.8H32c-12.9 0-24.6-7.8-29.6-19.8s-2.2-25.7 6.9-34.9l128-128zm0 429.3l-128-128c-9.2-9.2-11.9-22.9-6.9-34.9s16.6-19.8 29.6-19.8H288c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9l-128 128c-12.5 12.5-32.8 12.5-45.3 0z'/%3E%3C/svg%3E\");--hub-table-icon-sort-up: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M182.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8H288c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-128-128z'/%3E%3C/svg%3E\");--hub-table-icon-sort-down: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M137.4 374.6c12.5 12.5 32.8 12.5 45.3 0l128-128c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8H32c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l128 128z'/%3E%3C/svg%3E\");--hub-table-accent-bg: transparent;--hub-table-active-bg: var(--hub-sys-state-active-bg, rgba(0, 0, 0, .1));--hub-table-active-color: var(--hub-sys-text-primary, #212529);--hub-table-bg: var(--hub-ref-color-white, #fff);--hub-table-bg-state: initial;--hub-table-bg-type: initial;--hub-table-cell-padding-x: var(--hub-ref-space-3, 1rem);--hub-table-cell-padding-x-sm: var(--hub-ref-space-2, .5rem);--hub-table-cell-padding-y: var(--hub-ref-space-2, .5rem);--hub-table-cell-padding-y-sm: var(--hub-ref-space-1, .25rem);--hub-table-cell-vertical-align: middle;--hub-table-color: var(--hub-sys-text-primary, #212529);--hub-table-color-state: initial;--hub-table-color-type: initial;--hub-table-group-separator-color: var(--hub-sys-border-color-default, #dee2e6);--hub-table-search-button-bg: var(--hub-table-container-bg);--hub-table-search-button-border-color: var(--hub-table-border-color);--hub-table-search-button-color: var(--hub-table-container-color);--hub-table-search-button-min-width: 2.75rem;--hub-table-search-input-bg: var(--hub-table-container-bg);--hub-table-search-input-border-color: var(--hub-table-border-color);--hub-table-search-input-color: var(--hub-table-container-color);--hub-table-search-border-width: var(--hub-table-border-width);--hub-table-search-border-radius: var(--hub-table-border-radius);--hub-table-search-input-padding-x: .75rem;--hub-table-search-input-padding-y: .375rem;--hub-table-search-input-font-size: 1rem;--hub-table-filter-button-active-bg: rgba(25, 135, 84, .1);--hub-table-filter-button-active-border-color: var(--hub-sys-color-success, #198754);--hub-table-filter-button-hover-bg: rgba(0, 0, 0, .05);--hub-table-filter-button-icon-active-color: var(--hub-sys-color-success, #198754);--hub-table-filter-button-icon-color: var(--hub-sys-text-muted, #6c757d);--hub-table-filter-button-gap: var(--hub-ref-space-2, .5rem);--hub-table-filter-button-padding-x: .75rem;--hub-table-filter-button-padding-y: .375rem;--hub-table-filter-button-border-width: 1px;--hub-table-filter-button-border-color: transparent;--hub-table-filter-button-border-radius: var(--hub-ref-radius-sm, .25rem);--hub-table-filter-button-transition: all .2s ease;--hub-table-filter-count-bg: var(--hub-sys-color-success, #198754);--hub-table-filter-count-color: var(--hub-ref-color-white, #fff);--hub-table-filter-count-size: 1.25rem;--hub-table-filter-count-padding-x: .4em;--hub-table-filter-count-font-size: .7rem;--hub-table-filter-count-font-weight: 700;--hub-table-filter-count-border-radius: 50rem;--hub-table-batch-actions-btn-icon-gap: var(--hub-ref-space-1, .25rem);--hub-table-hover-bg: var(--hub-sys-state-hover-bg, rgba(0, 0, 0, .075));--hub-table-hover-color: var(--hub-sys-text-primary, #212529);--hub-table-striped-bg: var(--hub-sys-state-striped-bg, rgba(0, 0, 0, .05));--hub-table-striped-color: var(--hub-sys-text-primary, #212529)}:host{display:flex;flex-direction:column;gap:var(--hub-table-container-gap);min-width:0;color:var(--hub-table-container-color)}:host .hub-table__top-bar{display:flex;justify-content:var(--hub-table-top-bar-justify-content);align-items:var(--hub-table-top-bar-align-items);flex-wrap:var(--hub-table-top-bar-wrap);gap:var(--hub-table-top-bar-gap)}:host .hub-table__batch-actions{display:flex;align-items:center;gap:var(--hub-table-batch-actions-gap);margin-inline-end:var(--hub-table-batch-actions-margin-inline-end)}:host .hub-table__batch-actions-btn-icon{margin-right:var(--hub-table-batch-actions-btn-icon-gap)}:host .hub-table__batch-actions-btn--default,:host .hub-table__cell-btn--default{border:var(--hub-table-border-width) solid var(--hub-table-border-color);border-radius:var(--hub-table-border-radius)}:host .hub-table__search{display:flex;flex-wrap:nowrap;align-items:stretch;justify-content:end}:host .hub-table__search-input{position:relative;flex:1 1 auto;width:1%;min-width:0;display:block;width:100%;padding:var(--hub-table-search-input-padding-y) var(--hub-table-search-input-padding-x);font-size:var(--hub-table-search-input-font-size);font-weight:400;line-height:1.5;color:var(--hub-table-search-input-color);appearance:none;background-color:var(--hub-table-search-input-bg);background-clip:padding-box;border:var(--hub-table-search-border-width) solid var(--hub-table-search-input-border-color);border-radius:var(--hub-table-search-border-radius) 0 0 var(--hub-table-search-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}:host .hub-table__search-button{display:inline-flex;align-items:center;justify-content:center;min-width:var(--hub-table-search-button-min-width);color:var(--hub-table-search-button-color);background-color:var(--hub-table-search-button-bg);border-color:var(--hub-table-search-button-border-color);border-radius:0 var(--hub-table-search-border-radius) var(--hub-table-search-border-radius) 0}:host .hub-table__bottom-bar{display:flex;justify-content:var(--hub-table-bottom-bar-justify-content);align-items:var(--hub-table-bottom-bar-align-items);flex-wrap:var(--hub-table-bottom-bar-wrap);gap:var(--hub-table-bottom-bar-gap)}:host .hub-table__bottom-bar-paginator{order:var(--hub-table-bottom-bar-paginator-order);flex:var(--hub-table-bottom-bar-paginator-flex)}:host .hub-table__bottom-bar-settings{order:var(--hub-table-bottom-bar-settings-order);flex:var(--hub-table-bottom-bar-settings-flex);margin:0}:host .hub-table__bottom-bar-info{order:var(--hub-table-bottom-bar-info-order);flex:var(--hub-table-bottom-bar-info-flex);margin:0}:host .hub-table__paginator{overflow:auto;margin:0}:host .hub-table__filter-button{display:flex;flex-wrap:nowrap;align-items:center;gap:var(--hub-table-filter-button-gap);padding:var(--hub-table-filter-button-padding-y) var(--hub-table-filter-button-padding-x);cursor:pointer;border:var(--hub-table-filter-button-border-width) solid var(--hub-table-filter-button-border-color);border-radius:var(--hub-table-filter-button-border-radius);transition:var(--hub-table-filter-button-transition)}:host .hub-table__filter-button:hover{background-color:var(--hub-table-filter-button-hover-bg)}:host .hub-table__filter-button--active{background-color:var(--hub-table-filter-button-active-bg);border-color:var(--hub-table-filter-button-active-border-color)}:host .hub-table__filter-button--active .hub-table__filter-button-icon{color:var(--hub-table-filter-button-icon-active-color)}:host .hub-table__filter-button-icon{transition:color .2s ease;color:var(--hub-table-filter-button-icon-color)}:host .hub-table__filter-count{display:inline-flex;align-items:center;justify-content:center;min-width:var(--hub-table-filter-count-size);height:var(--hub-table-filter-count-size);padding:0 var(--hub-table-filter-count-padding-x);font-size:var(--hub-table-filter-count-font-size);font-weight:var(--hub-table-filter-count-font-weight);line-height:1;color:var(--hub-table-filter-count-color);text-align:center;white-space:nowrap;background-color:var(--hub-table-filter-count-bg);border-radius:var(--hub-table-filter-count-border-radius);animation:badge-appear .2s ease}:host .hub-table__no-data-icon{margin-right:1.5rem}:host .hub-table__header-icon{margin-right:.5rem}:host .hub-table__icon{display:inline-block;width:var(--hub-table-icon-size);height:var(--hub-table-icon-size);background-color:var(--hub-table-icon-color);-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;vertical-align:middle}:host .hub-table__icon--xs{--hub-table-icon-size: .75em}:host .hub-table__icon--sm{--hub-table-icon-size: .875em}:host .hub-table__icon--lg{--hub-table-icon-size: 1.33em}:host .hub-table__icon--2x{--hub-table-icon-size: 2em}:host .hub-table__icon--3x{--hub-table-icon-size: 3em}:host .hub-table__icon--4x{--hub-table-icon-size: 4em}:host .hub-table__icon--5x{--hub-table-icon-size: 5em}:host .hub-table__icon--search{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z'/%3E%3C/svg%3E\")}:host .hub-table__icon--filter{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M3.9 54.9C10.5 40.9 24.5 32 40 32H472c15.5 0 29.5 8.9 36.1 22.9s4.6 30.5-5.2 42.5L320 320.9V448c0 12.1-6.8 23.2-17.7 28.6s-23.8 4.3-33.5-3l-64-48c-8.1-6-12.8-15.5-12.8-25.6V320.9L9 97.3C-.7 85.4-2.8 68.8 3.9 54.9z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M3.9 54.9C10.5 40.9 24.5 32 40 32H472c15.5 0 29.5 8.9 36.1 22.9s4.6 30.5-5.2 42.5L320 320.9V448c0 12.1-6.8 23.2-17.7 28.6s-23.8 4.3-33.5-3l-64-48c-8.1-6-12.8-15.5-12.8-25.6V320.9L9 97.3C-.7 85.4-2.8 68.8 3.9 54.9z'/%3E%3C/svg%3E\")}:host .hub-table__icon--eraser{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 576 512'%3E%3Cpath d='M290.7 57.4L57.4 290.7c-25 25-25 65.5 0 90.5l80 80c12 12 28.3 18.7 45.3 18.7H288h9.4H512c17.7 0 32-14.3 32-32s-14.3-32-32-32H387.9L518.6 285.3c25-25 25-65.5 0-90.5L381.3 57.4c-25-25-65.5-25-90.5 0zM297.4 416H288l-105.4 0-80-80L227.3 211.3 364.7 348.7 297.4 416z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 576 512'%3E%3Cpath d='M290.7 57.4L57.4 290.7c-25 25-25 65.5 0 90.5l80 80c12 12 28.3 18.7 45.3 18.7H288h9.4H512c17.7 0 32-14.3 32-32s-14.3-32-32-32H387.9L518.6 285.3c25-25 25-65.5 0-90.5L381.3 57.4c-25-25-65.5-25-90.5 0zM297.4 416H288l-105.4 0-80-80L227.3 211.3 364.7 348.7 297.4 416z'/%3E%3C/svg%3E\")}:host .hub-table__icon--info{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM216 336h24V272H216c-13.3 0-24-10.7-24-24s10.7-24 24-24h48c13.3 0 24 10.7 24 24v88h8c13.3 0 24 10.7 24 24s-10.7 24-24 24H216c-13.3 0-24-10.7-24-24s10.7-24 24-24zm40-208a32 32 0 1 1 0 64 32 32 0 1 1 0-64z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM216 336h24V272H216c-13.3 0-24-10.7-24-24s10.7-24 24-24h48c13.3 0 24 10.7 24 24v88h8c13.3 0 24 10.7 24 24s-10.7 24-24 24H216c-13.3 0-24-10.7-24-24s10.7-24 24-24zm40-208a32 32 0 1 1 0 64 32 32 0 1 1 0-64z'/%3E%3C/svg%3E\");margin-right:1.5rem}:host .hub-table__icon--sort{-webkit-mask-image:var(--hub-table-icon-sort);mask-image:var(--hub-table-icon-sort)}:host .hub-table__icon--sort-up{-webkit-mask-image:var(--hub-table-icon-sort-up);mask-image:var(--hub-table-icon-sort-up)}:host .hub-table__icon--sort-down{-webkit-mask-image:var(--hub-table-icon-sort-down);mask-image:var(--hub-table-icon-sort-down)}:host .hub-table__icon--caret-up{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M182.6 137.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8H288c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-128-128z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M182.6 137.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8H288c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-128-128z'/%3E%3C/svg%3E\")}:host .hub-table__icon--caret-down{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M137.4 374.6c12.5 12.5 32.8 12.5 45.3 0l128-128c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8H32c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l128 128z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M137.4 374.6c12.5 12.5 32.8 12.5 45.3 0l128-128c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8H32c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l128 128z'/%3E%3C/svg%3E\")}:host .hub-table__icon--chevron-up{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M233.4 105.4c12.5-12.5 32.8-12.5 45.3 0l192 192c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L256 173.3 86.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l192-192z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M233.4 105.4c12.5-12.5 32.8-12.5 45.3 0l192 192c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L256 173.3 86.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l192-192z'/%3E%3C/svg%3E\")}:host .hub-table__icon--chevron-down{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M233.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5 12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L256 338.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M233.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5 12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L256 338.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z'/%3E%3C/svg%3E\")}:host .hub-table__icon--chevron-left{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z'/%3E%3C/svg%3E\")}:host .hub-table__icon--chevron-right{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M310.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L242.7 256 105.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M310.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L242.7 256 105.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z'/%3E%3C/svg%3E\")}:host .hub-table__icon--angle-left{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z'/%3E%3C/svg%3E\")}:host .hub-table__icon--angle-right{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z'/%3E%3C/svg%3E\")}:host .hub-table__icon--angle-double-left{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160zm352-160l-160 160c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L301.3 256 438.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160zm352-160l-160 160c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L301.3 256 438.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0z'/%3E%3C/svg%3E\")}:host .hub-table__icon--angle-double-right{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M470.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L402.7 256 265.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160zm-352 160l160-160c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L210.7 256 73.4 393.4c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M470.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L402.7 256 265.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160zm-352 160l160-160c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L210.7 256 73.4 393.4c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0z'/%3E%3C/svg%3E\")}:host .hub-table__icon--ellipsis-v{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 128 512'%3E%3Cpath d='M64 360a56 56 0 1 0 0 112 56 56 0 1 0 0-112zm0-160a56 56 0 1 0 0 112 56 56 0 1 0 0-112zM120 96A56 56 0 1 0 8 96a56 56 0 1 0 112 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 128 512'%3E%3Cpath d='M64 360a56 56 0 1 0 0 112 56 56 0 1 0 0-112zm0-160a56 56 0 1 0 0 112 56 56 0 1 0 0-112zM120 96A56 56 0 1 0 8 96a56 56 0 1 0 112 0z'/%3E%3C/svg%3E\")}:host .hub-table__icon--trash{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3Cpath d='M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3Cpath d='M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z'/%3E%3C/svg%3E\");margin-right:.5rem}:host .hub-table__icon--plus{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3Cpath d='M256 80c0-17.7-14.3-32-32-32s-32 14.3-32 32V224H48c-17.7 0-32 14.3-32 32s14.3 32 32 32H192V432c0 17.7 14.3 32 32 32s32-14.3 32-32V288H400c17.7 0 32-14.3 32-32s-14.3-32-32-32H256V80z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3Cpath d='M256 80c0-17.7-14.3-32-32-32s-32 14.3-32 32V224H48c-17.7 0-32 14.3-32 32s14.3 32 32 32H192V432c0 17.7 14.3 32 32 32s32-14.3 32-32V288H400c17.7 0 32-14.3 32-32s-14.3-32-32-32H256V80z'/%3E%3C/svg%3E\");margin-right:.5rem}:host .hub-table__container{overflow:auto;background-color:var(--hub-table-container-bg);border:var(--hub-table-border-width) solid var(--hub-table-border-color);border-radius:var(--hub-table-border-radius);color:var(--hub-table-container-color)}:host .hub-table__element{position:relative;width:100%;border-collapse:collapse;border-spacing:0;vertical-align:var(--hub-table-cell-vertical-align);border-color:var(--hub-table-border-color);background-color:var(--hub-table-bg);color:var(--hub-table-color)}:host .hub-table__element .sticky-start{background-color:var(--hub-table-bg);left:0;position:sticky;z-index:9}:host .hub-table__element .sticky-end{background-color:var(--hub-table-bg);right:0;position:sticky;z-index:9}:host .hub-table__element .clickable-item{cursor:pointer}:host .hub-table__element>:not(caption)>*>*{padding:var(--hub-table-cell-padding-y) var(--hub-table-cell-padding-x);vertical-align:var(--hub-table-cell-vertical-align);color:var(--hub-table-color-state, var(--hub-table-color-type, var(--hub-table-color)));background-color:var(--hub-table-bg);border-bottom-style:solid;border-bottom-color:var(--hub-table-border-color);border-bottom-width:var(--hub-table-border-width);box-shadow:inset 0 0 0 9999px var(--hub-table-bg-state, var(--hub-table-bg-type, var(--hub-table-accent-bg)))}:host .hub-table__element>tbody{vertical-align:inherit}:host .hub-table__element>thead{vertical-align:bottom}:host .hub-table__scrollable thead{position:sticky;top:0;z-index:10}:host .hub-table__group-divider{border-top:calc(var(--hub-table-border-width) * 2) solid var(--hub-table-group-separator-color)}:host .hub-table__sm>:not(caption)>*>*{padding:var(--hub-table-cell-padding-y-sm) var(--hub-table-cell-padding-x-sm)}:host .hub-table__bordered>:not(caption)>*{border-style:solid;border-width:var(--hub-table-border-width) 0}:host .hub-table__bordered>:not(caption)>*>*{border-style:solid;border-width:0 var(--hub-table-border-width)}:host .hub-table__borderless>:not(caption)>*>*{border-bottom-width:0}:host .hub-table__borderless>:not(:first-child){border-top-width:0}:host .hub-table__striped-odd>tbody>tr:nth-of-type(odd)>*{color:var(--hub-table-striped-color);background-color:var(--hub-table-striped-bg)}:host .hub-table__striped-even>tbody>tr:nth-of-type(2n)>*{color:var(--hub-table-striped-color);background-color:var(--hub-table-striped-bg)}:host .hub-table__striped-columns-odd>:not(caption)>tr>:nth-child(odd){color:var(--hub-table-striped-color);background-color:var(--hub-table-striped-bg)}:host .hub-table__striped-columns-even>:not(caption)>tr>:nth-child(2n){color:var(--hub-table-striped-color);background-color:var(--hub-table-striped-bg)}:host .hub-table__active{--hub-table-color-state: var(--hub-table-active-color);--hub-table-bg-state: var(--hub-table-active-bg)}:host .hub-table__hover>tbody>tr:hover>*{--hub-table-color-state: var(--hub-table-hover-color);--hub-table-bg-state: var(--hub-table-hover-bg)}:host .hub-table__responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}:host.hub-table--rtl{direction:rtl}:host.hub-table--rtl .hub-table__top-bar{direction:ltr}:host.hub-table--rtl .hub-table__batch-actions{order:2;flex-direction:row-reverse;margin-inline-end:0;margin-inline-start:auto}:host.hub-table--rtl .hub-table__batch-actions-btn-icon{margin-right:0;margin-left:var(--hub-table-batch-actions-btn-icon-gap)}:host.hub-table--rtl .hub-table__search{order:1;margin-inline-end:auto;margin-inline-start:0;direction:ltr}:host.hub-table--rtl .hub-table__search-input{direction:ltr;text-align:right;border-radius:0 var(--hub-table-search-border-radius) var(--hub-table-search-border-radius) 0}:host.hub-table--rtl .hub-table__search-button{border-radius:var(--hub-table-search-border-radius) 0 0 var(--hub-table-search-border-radius)}:host.hub-table--rtl .hub-table__no-data-icon{margin-right:0;margin-left:1.5rem}:host.hub-table--rtl .hub-table__header-icon{margin-right:0;margin-left:.5rem}.caption-top{caption-side:top}@media(max-width:576px){.hub-table__responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width:768px){.hub-table__responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width:992px){.hub-table__responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width:1200px){.hub-table__responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width:1400px){.hub-table__responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@keyframes badge-appear{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox]:not([ngNoCva])[formControlName],input[type=checkbox]:not([ngNoCva])[formControl],input[type=checkbox]:not([ngNoCva])[ngModel]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple]):not([ngNoCva])[formControlName],select:not([multiple]):not([ngNoCva])[formControl],select:not([multiple]):not([ngNoCva])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: PaginableTableDropdownComponent, selector: "hub-table-dropdown, paginable-table-dropdown", inputs: ["row", "options", "appendTo", "disabled"] }, { kind: "component", type: PaginatorComponent, selector: "hub-paginator, paginable-table-paginator", inputs: ["rtl", "page", "numberOfPages"], outputs: ["pageChange"] }, { kind: "component", type: DropdownComponent, selector: "hub-dropdown, hub-ui-dropdown", inputs: ["id"], outputs: ["open", "close"] }, { kind: "component", type: MenuFilterComponent, selector: "menu-filter", inputs: ["header"] }, { kind: "component", type: HubIconComponent, selector: "hub-icon, ng-hub-ui-icon", inputs: ["config"] }, { kind: "component", type: PaginableTableRangeInputComponent, selector: "hub-table-range-input, paginable-table-range-input", inputs: ["type"] }, { kind: "component", type: PaginableStateOutlet, selector: "hub-state-outlet", inputs: ["template", "instanceDefault", "globalDefault", "fallback", "context"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: UcfirstPipe, name: "ucfirst" }, { kind: "pipe", type: UnwrapAsyncPipe, name: "unwrapAsync" }, { kind: "pipe", type: IsObservablePipe, name: "isObservable" }, { kind: "pipe", type: GetPipe, name: "get" }], animations: [
|
|
4637
|
+
], queries: [{ propertyName: "templateRow", first: true, predicate: PaginableTableRowDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "headerTpts", predicate: PaginableTableHeaderDirective, isSignal: true }, { propertyName: "templateCells", predicate: PaginableTableCellDirective, isSignal: true }, { propertyName: "noResultsTpt", first: true, predicate: PaginableNoResultsDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "loadingTpt", first: true, predicate: PaginableLoadingDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "errorTpt", first: true, predicate: PaginableErrorDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "templateExpandingRows", predicate: PaginableTableExpandingRowDirective, isSignal: true }, { propertyName: "filterTpts", predicate: PaginableTableFilterDirective, isSignal: true }], viewQueries: [{ propertyName: "dropdownComponents", predicate: DropdownComponent, descendants: true, isSignal: true }], ngImport: i0, template: "@if (batchActions().length || searchable() || headerFilters().length) {\n\t<div class=\"hub-table__top-bar\">\n\t\t@if (batchActions().length) {\n\t\t\t<div class=\"hub-table__batch-actions\">\n\t\t\t\t@for (button of batchActions(); track $index) {\n\t\t\t\t\t@if ($any(button).buttons?.length) {\n\t\t\t\t\t\t<hub-table-dropdown\n\t\t\t\t\t\t\tclass=\"hub-table__batch-actions-dropdown\"\n\t\t\t\t\t\t\t[options]=\"$any(button)\"\n\t\t\t\t\t\t\t[disabled]=\"!value.length\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t</hub-table-dropdown>\n\t\t\t\t\t} @else {\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tclass=\"hub-table__batch-actions-btn\"\n\t\t\t\t\t\t\t[ngClass]=\"getBatchActionClassList(button)\"\n\t\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\t\t(click)=\"handleBatchAction(button)\"\n\t\t\t\t\t\t\t[disabled]=\"!value.length\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t@if (button.icon) {\n\t\t\t\t\t\t\t\t<i class=\"hub-table__batch-actions-btn-icon {{ button.icon }}\"></i>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (button.title) {\n\t\t\t\t\t\t\t\t<span class=\"hub-table__batch-actions-btn-title\">{{ button.title | unwrapAsync }}</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\t\t@if (searchable()) {\n\t\t\t<div class=\"hub-table__search\">\n\t\t\t\t@if (isRtl()) {\n\t\t\t\t\t<button\n\t\t\t\t\t\tclass=\"hub-table__search-button btn btn-outline-dark\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t[attr.aria-label]=\"'SEARCH' | translate | ucfirst\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<i class=\"hub-table__search-icon hub-table__icon hub-table__icon--search\" aria-hidden=\"true\"></i>\n\t\t\t\t\t</button>\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tclass=\"hub-table__search-input\"\n\t\t\t\t\t\t(input)=\"searchProxy$.next($any($event.target).value)\"\n\t\t\t\t\t\t[value]=\"searchTerm()\"\n\t\t\t\t\t\t[attr.placeholder]=\"'SEARCH' | translate | ucfirst\"\n\t\t\t\t\t\t[attr.aria-label]=\"'SEARCH' | translate | ucfirst\"\n\t\t\t\t\t/>\n\t\t\t\t} @else {\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tclass=\"hub-table__search-input\"\n\t\t\t\t\t\t(input)=\"searchProxy$.next($any($event.target).value)\"\n\t\t\t\t\t\t[value]=\"searchTerm()\"\n\t\t\t\t\t\t[attr.placeholder]=\"'SEARCH' | translate | ucfirst\"\n\t\t\t\t\t\t[attr.aria-label]=\"'SEARCH' | translate | ucfirst\"\n\t\t\t\t\t/>\n\t\t\t\t\t<button\n\t\t\t\t\t\tclass=\"hub-table__search-button btn btn-outline-dark\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t[attr.aria-label]=\"'SEARCH' | translate | ucfirst\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<i class=\"hub-table__search-icon hub-table__icon hub-table__icon--search\" aria-hidden=\"true\"></i>\n\t\t\t\t\t</button>\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\t\t@if (headerFilters().length) {\n\t\t\t<div class=\"hub-table__delete-filters\">\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"hub-table__delete-filters-btn btn btn-outline-danger\"\n\t\t\t\t\t(click)=\"clearFilters()\"\n\t\t\t\t\t[disabled]=\"filterLoading\"\n\t\t\t\t>\n\t\t\t\t\t<i class=\"hub-table__delete-filters-icon hub-table__icon hub-table__icon--eraser\"></i>\n\t\t\t\t\t{{ 'CLEAN_FILTERS' | translate | ucfirst }}\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t}\n\t</div>\n}\n\n<div class=\"hub-table__container {{ responsiveCSSClass() }}\" [class.hub-table__responsive]=\"responsiveCSSClass()\">\n\t@let striped = options().striped;\n\t<table\n\t\tclass=\"hub-table__element\"\n\t\t[class.hub-table__hover]=\"(options().hoverableRows || selectable()) && !loading()\"\n\t\t[class.hub-table__striped-odd]=\"striped === 'rows-odd'\"\n\t\t[class.hub-table__striped-even]=\"striped === 'rows-even'\"\n\t\t[class.hub-table__striped-columns-odd]=\"striped === 'columns-odd'\"\n\t\t[class.hub-table__striped-columns-even]=\"striped === 'columns-even'\"\n\t\t[class.hub-table__selectable]=\"selectable()\"\n\t\t[class.hub-table__scrollable]=\"options().scrollable\"\n\t\t[ngClass]=\"options().variant ? 'hub-table__' + options().variant : null\"\n\t>\n\t\t<thead class=\"hub-table__head\" [formGroup]=\"filtersFG\">\n\t\t\t<tr class=\"hub-table__head-row\">\n\t\t\t\t@if (selectable()) {\n\t\t\t\t\t<th class=\"hub-table__header-cell hub-table__header-cell--actions sticky-start\">\n\t\t\t\t\t\t@if (multipleSelectable()) {\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\t[(ngModel)]=\"allRowsSelected\"\n\t\t\t\t\t\t\t\t[ngModelOptions]=\"{ standalone: true }\"\n\t\t\t\t\t\t\t\t(click)=\"toggleAll()\"\n\t\t\t\t\t\t\t\t[disabled]=\"disabled\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t}\n\t\t\t\t\t</th>\n\t\t\t\t}\n\t\t\t\t@for (header of fixedHeaders(); track header.property) {\n\t\t\t\t\t@if (!(isColumnHidden(header) | async)) {\n\t\t\t\t\t\t<th\n\t\t\t\t\t\t\tclass=\"hub-table__header-cell\"\n\t\t\t\t\t\t\tresizable\n\t\t\t\t\t\t\t[class.sticky-start]=\"header.sticky === 'start'\"\n\t\t\t\t\t\t\t[class.sticky-end]=\"header.sticky === 'end'\"\n\t\t\t\t\t\t\t[class.text-start]=\"header.align === 'start'\"\n\t\t\t\t\t\t\t[class.text-end]=\"header.align === 'end'\"\n\t\t\t\t\t\t\t[class.text-center]=\"header.align === 'center'\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"hub-table__header-cell-content d-flex flex-nowrap align-items-center justify-content-between gap-2\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"getHeaderTemplate(header) || defaultHeaderTpt\"\n\t\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{\n\t\t\t\t\t\t\t\t\t\theader,\n\t\t\t\t\t\t\t\t\t\tproperty: header | get: header.property\n\t\t\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t\t@if (header.sortable || header.filter?.mode === 'menu') {\n\t\t\t\t\t\t\t\t\t<div class=\"hub-table__header-cell-actions d-flex gap-2 ms-auto align-items-center\">\n\t\t\t\t\t\t\t\t\t\t<button class=\"hub-table__sort-btn btn\" (click)=\"sort(header)\">\n\t\t\t\t\t\t\t\t\t\t\t@if (header.sortable) {\n\t\t\t\t\t\t\t\t\t\t\t\t<i\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-table__sort-icon hub-table__icon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"getOrdenationClass(header)\"\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\t\t\t></i>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t@if (header.filter?.mode === 'menu') {\n\t\t\t\t\t\t\t\t\t\t\t<hub-dropdown\n\t\t\t\t\t\t\t\t\t\t\t\t#dropdown\n\t\t\t\t\t\t\t\t\t\t\t\t(open)=\"onDropdownFilterOpened($event)\"\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-table__filter-dropdown\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-table__filter-button button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t[class.hub-table__filter-button--active]=\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfiltersFG.get(header.filter.key || header.property)?.value?.rules\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t?.length\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<i\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-table__filter-button-icon hub-table__icon hub-table__icon--filter\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t></i>\n\t\t\t\t\t\t\t\t\t\t\t\t\t@if (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfiltersFG.get(header.filter.key || header.property)?.value?.rules;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tas rules\n\t\t\t\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t@if (rules.length) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"hub-table__filter-count\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{ rules.length }}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t@if (dropdown.isOpened()) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t<menu-filter\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-table__filter-dropdown-content content\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[header]=\"header\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[formControlName]=\"header.filter.key || header.property\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</menu-filter>\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t</hub-dropdown>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t@if (templateExpandingRows().length) {\n\t\t\t\t\t<th class=\"hub-table__header-cell hub-table__header-cell--expander sticky-end\"></th>\n\t\t\t\t}\n\t\t\t</tr>\n\n\t\t\t<!-- Filtering -->\n\t\t\t@if (hasColumnFilters()) {\n\t\t\t\t<tr class=\"hub-table__filter-row\">\n\t\t\t\t\t@if (selectable() || batchActions.length) {\n\t\t\t\t\t\t<th class=\"hub-table__filter-cell sticky-start\"></th>\n\t\t\t\t\t}\n\t\t\t\t\t@for (header of fixedHeaders(); track $index; let last = $last) {\n\t\t\t\t\t\t@if (!(isColumnHidden(header) | async)) {\n\t\t\t\t\t\t\t@let formControlName = header.filter?.key || header.property;\n\t\t\t\t\t\t\t<th\n\t\t\t\t\t\t\t\tclass=\"hub-table__filter-cell\"\n\t\t\t\t\t\t\t\t[class.sticky-start]=\"header.sticky === 'start'\"\n\t\t\t\t\t\t\t\t[class.sticky-end]=\"header.sticky === 'end'\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t@if (header.filter && header.filter.mode !== 'menu' && filtersFG.get(formControlName)) {\n\t\t\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"getFilterTemplate(header) || defaultFilterTpt\"\n\t\t\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{\n\t\t\t\t\t\t\t\t\t\t\theader: header,\n\t\t\t\t\t\t\t\t\t\t\tformControl: filtersFG.get(formControlName)\n\t\t\t\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t</tr>\n\t\t\t}\n\t\t</thead>\n\t\t<tbody class=\"hub-table__body\">\n\t\t\t@if (loading()) {\n\t\t\t\t<tr class=\"hub-table__body-row\">\n\t\t\t\t\t<td class=\"hub-table__cell\" [attr.colspan]=\"headersCount()\">\n\t\t\t\t\t\t<hub-state-outlet\n\t\t\t\t\t\t\t[template]=\"loadingTpt()\"\n\t\t\t\t\t\t\t[instanceDefault]=\"loadingComponent()\"\n\t\t\t\t\t\t\t[globalDefault]=\"defaults.loading()\"\n\t\t\t\t\t\t\t[fallback]=\"defaultLoadingTpt\"\n\t\t\t\t\t\t\t[context]=\"{ colspan: headersCount() }\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t} @else if (error()) {\n\t\t\t\t<tr class=\"hub-table__body-row\">\n\t\t\t\t\t<td class=\"hub-table__cell\" [attr.colspan]=\"headersCount()\">\n\t\t\t\t\t\t<hub-state-outlet\n\t\t\t\t\t\t\t[template]=\"errorTpt()\"\n\t\t\t\t\t\t\t[instanceDefault]=\"errorComponent()\"\n\t\t\t\t\t\t\t[globalDefault]=\"defaults.error()\"\n\t\t\t\t\t\t\t[fallback]=\"defaultErrorTpt\"\n\t\t\t\t\t\t\t[context]=\"{ error: error(), colspan: headersCount() }\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t} @else if (rows().length) {\n\t\t\t\t@for (item of rows(); track $index) {\n\t\t\t\t\t<ng-container\n\t\t\t\t\t\t[ngTemplateOutlet]=\"templateRow() || defaultRowTemplate\"\n\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: item }\"\n\t\t\t\t\t>\n\t\t\t\t\t</ng-container>\n\t\t\t\t}\n\t\t\t} @else {\n\t\t\t\t<tr>\n\t\t\t\t\t<td [attr.colspan]=\"headersCount()\">\n\t\t\t\t\t\t<hub-state-outlet\n\t\t\t\t\t\t\t[template]=\"noResultsTpt()\"\n\t\t\t\t\t\t\t[instanceDefault]=\"noResultsComponent()\"\n\t\t\t\t\t\t\t[globalDefault]=\"defaults.noResults()\"\n\t\t\t\t\t\t\t[fallback]=\"defaultNoResultsTpt\"\n\t\t\t\t\t\t\t[context]=\"{ colspan: headersCount(), filters: filters() ?? undefined }\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t}\n\t\t</tbody>\n\t</table>\n</div>\n\n<!-- Pagination -->\n@if (page() !== undefined && page() !== null) {\n\t<div class=\"hub-table__bottom-bar\">\n\t\t@if (paginationPosition() == 'bottom' || paginationPosition() === 'both') {\n\t\t\t<hub-paginator\n\t\t\t\tclass=\"hub-table__paginator hub-table__bottom-bar-paginator\"\n\t\t\t\t[(page)]=\"$any(page)\"\n\t\t\t\t[numberOfPages]=\"numberOfPages()\"\n\t\t\t\t[rtl]=\"isRtl()\"\n\t\t\t>\n\t\t\t</hub-paginator>\n\t\t}\n\t\t<div class=\"hub-table__bottom-bar-settings hub-paginator__settings\">\n\t\t\t<label class=\"hub-paginator__label\"> {{ 'ROWS_PER_PAGE' | translate | ucfirst }}: </label>\n\t\t\t<select\n\t\t\t\tclass=\"hub-paginator__select\"\n\t\t\t\t[ngModel]=\"perPage()\"\n\t\t\t\t(ngModelChange)=\"perPage.set($event)\"\n\t\t\t\t[ngModelOptions]=\"{ standalone: true }\"\n\t\t\t>\n\t\t\t\t@for (option of perPageOptions(); track option) {\n\t\t\t\t\t<option [ngValue]=\"option\" class=\"hub-paginator__select-option\">\n\t\t\t\t\t\t{{ option }}\n\t\t\t\t\t</option>\n\t\t\t\t}\n\t\t\t</select>\n\t\t</div>\n\t\t@if (totalItems() !== null && totalItems() !== undefined) {\n\t\t\t<p class=\"hub-table__bottom-bar-info hub-paginator__info\">\n\t\t\t\t{{\n\t\t\t\t\t'SHOWING_X_OF_Y_ROWS'\n\t\t\t\t\t\t| translate\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\tamount: rows().length,\n\t\t\t\t\t\t\t\t\ttotal: totalItems()\n\t\t\t\t\t\t\t }\n\t\t\t\t\t\t| ucfirst\n\t\t\t\t}}\n\t\t\t</p>\n\t\t}\n\t</div>\n}\n<ng-template #defaultRowTemplate let-item>\n\t<tr\n\t\tclass=\"hub-table__body-row\"\n\t\t(click)=\"onItemClick($event, item)\"\n\t\t[class.hub-table__body-row--selected]=\"selectable() && item.selected\"\n\t\t[class.hub-table__body-row--clickable]=\"clickFn()\"\n\t\t[ngClass]=\"_getRowClass(item)\"\n\t>\n\t\t@if (selectable() || batchActions.length) {\n\t\t\t<td class=\"hub-table__cell hub-table__cell--select sticky-start\">\n\t\t\t\t<input\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t[(ngModel)]=\"item.selected\"\n\t\t\t\t\t[ngModelOptions]=\"{ standalone: true }\"\n\t\t\t\t\t(click)=\"$event.stopPropagation(); toggle(item)\"\n\t\t\t\t/>\n\t\t\t</td>\n\t\t}\n\t\t@for (header of fixedHeaders(); track $index) {\n\t\t\t@if (!(isColumnHidden(header) | async)) {\n\t\t\t\t<td\n\t\t\t\t\tclass=\"hub-table__cell\"\n\t\t\t\t\t[class.sticky-start]=\"header.sticky === 'start'\"\n\t\t\t\t\t[class.sticky-end]=\"header.sticky === 'end'\"\n\t\t\t\t\t[class.text-start]=\"header.align === 'start'\"\n\t\t\t\t\t[class.text-end]=\"header.align === 'end'\"\n\t\t\t\t\t[class.text-center]=\"header.align === 'center'\"\n\t\t\t\t\t[style.width]=\"header.buttons?.length ? '0' : 'auto'\"\n\t\t\t\t>\n\t\t\t\t\t<ng-container\n\t\t\t\t\t\t[ngTemplateOutlet]=\"getCellTemplate(header) || defaultCellTpt\"\n\t\t\t\t\t\t[ngTemplateOutletContext]=\"{\n\t\t\t\t\t\t\theader: header,\n\t\t\t\t\t\t\titem: item.data,\n\t\t\t\t\t\t\trow: item,\n\t\t\t\t\t\t\tproperty: item.data | get: header.property\n\t\t\t\t\t\t}\"\n\t\t\t\t\t>\n\t\t\t\t\t</ng-container>\n\t\t\t\t</td>\n\t\t\t}\n\t\t}\n\t\t@if (templateExpandingRows().length) {\n\t\t\t<td class=\"hub-table__cell hub-table__cell--expander sticky-end\" [class.sticky-end]=\"stickyActions()\">\n\t\t\t\t@if (templateExpandingRows().length) {\n\t\t\t\t\t<button (click)=\"toggleExpandedRow(item)\" type=\"button\" class=\"hub-table__expander-btn btn btn-link px-2\">\n\t\t\t\t\t\t<i\n\t\t\t\t\t\t\tclass=\"hub-table__expander-icon hub-table__icon\"\n\t\t\t\t\t\t\t[class.hub-table__icon--caret-up]=\"!item.collapsed\"\n\t\t\t\t\t\t\t[class.hub-table__icon--caret-down]=\"item.collapsed\"\n\t\t\t\t\t\t></i>\n\t\t\t\t\t</button>\n\t\t\t\t}\n\t\t\t</td>\n\t\t}\n\t\t<!-- <td *ngIf=\"!lastColumnOnlyHasButtons && filterHeaders?.length\"></td> -->\n\t</tr>\n\t@if (!item.collapsed) {\n\t\t@for (template of templateExpandingRows(); track template) {\n\t\t\t<ng-container [ngTemplateOutlet]=\"template.templateRef\" [ngTemplateOutletContext]=\"{ item: item }\"> </ng-container>\n\t\t}\n\t}\n</ng-template>\n\n<ng-template #defaultNoResultsTpt>\n\t<div class=\"hub-table__no-data alert alert-info d-flex align-items-center m-4\" role=\"alert\">\n\t\t<i class=\"hub-table__no-data-icon hub-table__icon hub-table__icon--info hub-table__icon--2x\" aria-hidden=\"true\"></i>\n\t\t{{ 'NO_RESULTS_FOUND' | translate | ucfirst }}\n\t</div>\n</ng-template>\n\n<ng-template #defaultLoadingTpt>\n\t<div class=\"hub-table__loading\">\n\t\t<svg\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\txmlns:xlink=\"http://www.w3.org/1999/xlink\"\n\t\t\tstyle=\"margin: auto; background: #fff; display: block\"\n\t\t\twidth=\"200px\"\n\t\t\theight=\"200px\"\n\t\t\tviewBox=\"0 0 100 100\"\n\t\t\tpreserveAspectRatio=\"xMidYMid\"\n\t\t>\n\t\t\t<circle cx=\"50\" cy=\"50\" r=\"0\" fill=\"none\" stroke=\"#cccccc\" stroke-width=\"1\">\n\t\t\t\t<animate\n\t\t\t\t\tattributeName=\"r\"\n\t\t\t\t\trepeatCount=\"indefinite\"\n\t\t\t\t\tdur=\"1.6666666666666667s\"\n\t\t\t\t\tvalues=\"0;40\"\n\t\t\t\t\tkeyTimes=\"0;1\"\n\t\t\t\t\tkeySplines=\"0 0.2 0.8 1\"\n\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t></animate>\n\t\t\t\t<animate\n\t\t\t\t\tattributeName=\"opacity\"\n\t\t\t\t\trepeatCount=\"indefinite\"\n\t\t\t\t\tdur=\"1.6666666666666667s\"\n\t\t\t\t\tvalues=\"1;0\"\n\t\t\t\t\tkeyTimes=\"0;1\"\n\t\t\t\t\tkeySplines=\"0.2 0 0.8 1\"\n\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t></animate>\n\t\t\t</circle>\n\t\t\t<circle cx=\"50\" cy=\"50\" r=\"0\" fill=\"none\" stroke=\"#333333\" stroke-width=\"1\">\n\t\t\t\t<animate\n\t\t\t\t\tattributeName=\"r\"\n\t\t\t\t\trepeatCount=\"indefinite\"\n\t\t\t\t\tdur=\"1.6666666666666667s\"\n\t\t\t\t\tvalues=\"0;40\"\n\t\t\t\t\tkeyTimes=\"0;1\"\n\t\t\t\t\tkeySplines=\"0 0.2 0.8 1\"\n\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\tbegin=\"-0.8333333333333334s\"\n\t\t\t\t></animate>\n\t\t\t\t<animate\n\t\t\t\t\tattributeName=\"opacity\"\n\t\t\t\t\trepeatCount=\"indefinite\"\n\t\t\t\t\tdur=\"1.6666666666666667s\"\n\t\t\t\t\tvalues=\"1;0\"\n\t\t\t\t\tkeyTimes=\"0;1\"\n\t\t\t\t\tkeySplines=\"0.2 0 0.8 1\"\n\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\tbegin=\"-0.8333333333333334s\"\n\t\t\t\t></animate>\n\t\t\t</circle>\n\t\t</svg>\n\t</div>\n</ng-template>\n\n<ng-template #defaultErrorTpt>\n\t<div class=\"hub-table__error m-4 p-4 text-center text-danger\">\n\t\t<svg\n\t\t\taria-hidden=\"true\"\n\t\t\tfocusable=\"false\"\n\t\t\tdata-prefix=\"fal\"\n\t\t\tdata-icon=\"sad-tear\"\n\t\t\trole=\"img\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\tviewBox=\"0 0 496 512\"\n\t\t\tstyle=\"height: 64px\"\n\t\t>\n\t\t\t<path\n\t\t\t\tfill=\"#dc3545\"\n\t\t\t\td=\"M168 240c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 464c-119.1 0-216-96.9-216-216S128.9 40 248 40s216 96.9 216 216-96.9 216-216 216zm0-152c-11.2 0-22 1.7-32.7 4.1-7.2-12.6-16.1-26.5-28.1-42.4-9-12.1-29.4-12-38.4 0-29.7 39.6-44.8 69-44.8 87.3 0 34.7 28.7 63 64 63s64-28.3 64-63c0-4.4-1-9.5-2.7-15.1 6.1-1.2 12.3-1.9 18.7-1.9 34.9 0 67.8 15.4 90.2 42.2 5.3 6.4 15.4 8 22.5 2 6.8-5.7 7.7-15.8 2-22.5C334.2 339.6 292.4 320 248 320zm-80 80c-17.7 0-32-13.9-32-31 0-7.7 10-28.8 32-59.5 22 30.7 32 51.8 32 59.5 0 17.1-14.3 31-32 31z\"\n\t\t\t\tclass=\"\"\n\t\t\t></path>\n\t\t</svg>\n\t\t<p>{{ 'ERROR_OCURRED' | translate }}</p>\n\t</div>\n</ng-template>\n\n<ng-template #defaultHeaderTpt let-header=\"header\" let-property=\"property\">\n\t@if (header.icon) {\n\t\t<i class=\"hub-table__header-icon {{ header.icon }}\" aria-hidden=\"true\"></i>\n\t}\n\t<div\n\t\tclass=\"hub-table__header-title\"\n\t\t[class.me-auto]=\"header.align === 'start'\"\n\t\t[class.ms-auto]=\"header.align === 'end'\"\n\t\t[class.mx-auto]=\"header.align === 'center'\"\n\t>\n\t\t@if (header.title) {\n\t\t\t<span class=\"hub-table__header-title-text text-wrap\">{{ header.title ?? header.property | unwrapAsync }}</span>\n\t\t}\n\t</div>\n</ng-template>\n\n<ng-template #defaultFilterTpt let-header=\"header\" let-formControl=\"formControl\">\n\t@switch (header.filter.type) {\n\t\t@case ('dropdown') {\n\t\t\t<select [formControl]=\"formControl\" class=\"form-select form-control\">\n\t\t\t\t@if (header.filter.placeholder) {\n\t\t\t\t\t<option [ngValue]=\"null\">\n\t\t\t\t\t\t{{ header.filter.placeholder }}\n\t\t\t\t\t</option>\n\t\t\t\t}\n\t\t\t\t@if (header.filter.options | isObservable) {\n\t\t\t\t\t@let options = header.filter.options | async;\n\t\t\t\t\t@for (option of $any(options); track option) {\n\t\t\t\t\t\t<option [value]=\"option[header.filter.bindValue || 'id']\">\n\t\t\t\t\t\t\t{{ option[header.filter.bindLabel || 'name'] }}\n\t\t\t\t\t\t</option>\n\t\t\t\t\t}\n\t\t\t\t} @else {\n\t\t\t\t\t@for (option of header.filter.options; track option) {\n\t\t\t\t\t\t<option [value]=\"option[header.filter.bindValue || 'id']\">\n\t\t\t\t\t\t\t{{ option[header.filter.bindLabel || 'name'] }}\n\t\t\t\t\t\t</option>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t</select>\n\t\t}\n\t\t@case ('number-range') {\n\t\t\t<hub-table-range-input type=\"number\" [formControl]=\"formControl\"> </hub-table-range-input>\n\t\t}\n\t\t@case ('date-range') {\n\t\t\t<hub-table-range-input type=\"date\" [formControl]=\"formControl\"> </hub-table-range-input>\n\t\t}\n\t\t@case ('boolean') {\n\t\t\t<select [formControl]=\"formControl\" class=\"form-select form-control\">\n\t\t\t\t<option [ngValue]=\"null\">\n\t\t\t\t\t{{ header.filter.placeholder ?? 'SELECT_ONE' | translate | ucfirst }}\n\t\t\t\t</option>\n\t\t\t\t<option [ngValue]=\"true\">\n\t\t\t\t\t{{ header.filter.trueLabel ?? ('TRUE' | translate | ucfirst) }}\n\t\t\t\t</option>\n\t\t\t\t<option [ngValue]=\"false\">\n\t\t\t\t\t{{ header.filter.falseLabel ?? ('FALSE' | translate | ucfirst) }}\n\t\t\t\t</option>\n\t\t\t</select>\n\t\t}\n\t\t@default {\n\t\t\t<input\n\t\t\t\t[type]=\"header.filter.type\"\n\t\t\t\t[formControl]=\"formControl\"\n\t\t\t\tclass=\"form-control\"\n\t\t\t\t[placeholder]=\"header.filter.placeholder || ''\"\n\t\t\t/>\n\t\t}\n\t}\n</ng-template>\n\n<ng-template #defaultCellTpt let-property=\"property\" let-item=\"item\" let-row=\"row\" let-header=\"header\">\n\t@if (header.buttons) {\n\t\t<div class=\"hub-table__cell-buttons d-flex flex-nowrap gap-2 justify-content-end align-items-center\">\n\t\t\t@for (button of header.buttons; track button) {\n\t\t\t\t@if (button.buttons) {\n\t\t\t\t\t<hub-table-dropdown [options]=\"button\" [row]=\"row\" class=\"hub-table__cell-dropdown d-inline-block\">\n\t\t\t\t\t</hub-table-dropdown>\n\t\t\t\t} @else {\n\t\t\t\t\t@if (!(isHidden(button, row) | async)) {\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclass=\"hub-table__cell-btn\"\n\t\t\t\t\t\t\t[attr.title]=\"button.tooltip | unwrapAsync\"\n\t\t\t\t\t\t\t(click)=\"handleAction($event, button, row)\"\n\t\t\t\t\t\t\t[ngClass]=\"getRowActionClassList(button)\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div class=\"hub-table__cell-btn-content d-flex flex-nowrap align-items-center gap-1\">\n\t\t\t\t\t\t\t\t<ng-hub-ui-icon [config]=\"button.icon\"></ng-hub-ui-icon>\n\t\t\t\t\t\t\t\t@if (button.label) {\n\t\t\t\t\t\t\t\t\t<span class=\"hub-table__cell-btn-label\">{{ button.label | unwrapAsync }}</span>\n\t\t\t\t\t\t\t\t} @else if (button.title) {\n\t\t\t\t\t\t\t\t\t<span class=\"hub-table__cell-btn-label\">{{ button.title | unwrapAsync }}</span>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t</div>\n\t} @else {\n\t\t<span class=\"hub-table__cell-value\">{{ property }}</span>\n\t}\n</ng-template>\n", styles: [":root,:host{--hub-table-container-bg: var(--hub-ref-color-white, #fff);--hub-table-container-color: var(--hub-sys-text-primary, #212529);--hub-table-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-table-border-radius: var(--hub-ref-radius-md, .375rem);--hub-table-border-width: var(--hub-ref-border-width, 1px);--hub-table-container-gap: var(--hub-ref-space-3, 1rem);--hub-table-top-bar-gap: var(--hub-ref-space-3, 1rem);--hub-table-top-bar-justify-content: end;--hub-table-top-bar-align-items: center;--hub-table-top-bar-wrap: wrap;--hub-table-batch-actions-gap: var(--hub-ref-space-2, .5rem);--hub-table-batch-actions-margin-inline-end: auto;--hub-table-bottom-bar-gap: var(--hub-ref-space-3, 1rem);--hub-table-bottom-bar-justify-content: space-around;--hub-table-bottom-bar-align-items: center;--hub-table-bottom-bar-wrap: wrap;--hub-table-bottom-bar-paginator-order: 1;--hub-table-bottom-bar-settings-order: 2;--hub-table-bottom-bar-info-order: 3;--hub-table-bottom-bar-paginator-flex: 0 0 auto;--hub-table-bottom-bar-settings-flex: 0 0 auto;--hub-table-bottom-bar-info-flex: 0 0 auto;--hub-table-icon-color: currentColor;--hub-table-icon-size: 1em;--hub-table-icon-sort: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M137.4 41.4c12.5-12.5 32.8-12.5 45.3 0l128 128c9.2 9.2 11.9 22.9 6.9 34.9s-16.6 19.8-29.6 19.8H32c-12.9 0-24.6-7.8-29.6-19.8s-2.2-25.7 6.9-34.9l128-128zm0 429.3l-128-128c-9.2-9.2-11.9-22.9-6.9-34.9s16.6-19.8 29.6-19.8H288c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9l-128 128c-12.5 12.5-32.8 12.5-45.3 0z'/%3E%3C/svg%3E\");--hub-table-icon-sort-up: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M182.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8H288c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-128-128z'/%3E%3C/svg%3E\");--hub-table-icon-sort-down: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M137.4 374.6c12.5 12.5 32.8 12.5 45.3 0l128-128c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8H32c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l128 128z'/%3E%3C/svg%3E\");--hub-table-accent-bg: transparent;--hub-table-active-bg: var(--hub-sys-state-active-bg, rgba(0, 0, 0, .1));--hub-table-active-color: var(--hub-sys-text-primary, #212529);--hub-table-accent: var(--hub-sys-color-primary, #0d6efd);--hub-table-accent-subtle: color-mix(in srgb, var(--hub-table-accent) 12%, var(--hub-sys-surface-page, #ffffff));--hub-table-selected-bg: var(--hub-table-accent-subtle);--hub-table-selected-color: var(--hub-sys-text-primary, #212529);--hub-table-bg: var(--hub-ref-color-white, #fff);--hub-table-bg-state: initial;--hub-table-bg-type: initial;--hub-table-cell-padding-x: var(--hub-ref-space-3, 1rem);--hub-table-cell-padding-x-sm: var(--hub-ref-space-2, .5rem);--hub-table-cell-padding-y: var(--hub-ref-space-2, .5rem);--hub-table-cell-padding-y-sm: var(--hub-ref-space-1, .25rem);--hub-table-cell-vertical-align: middle;--hub-table-color: var(--hub-sys-text-primary, #212529);--hub-table-color-state: initial;--hub-table-color-type: initial;--hub-table-group-separator-color: var(--hub-sys-border-color-default, #dee2e6);--hub-table-search-button-bg: var(--hub-table-container-bg);--hub-table-search-button-border-color: var(--hub-table-border-color);--hub-table-search-button-color: var(--hub-table-container-color);--hub-table-search-button-min-width: 2.75rem;--hub-table-search-input-bg: var(--hub-table-container-bg);--hub-table-search-input-border-color: var(--hub-table-border-color);--hub-table-search-input-color: var(--hub-table-container-color);--hub-table-search-border-width: var(--hub-table-border-width);--hub-table-search-border-radius: var(--hub-table-border-radius);--hub-table-search-input-padding-x: .75rem;--hub-table-search-input-padding-y: .375rem;--hub-table-search-input-font-size: 1rem;--hub-table-filter-button-active-bg: color-mix(in srgb, var(--hub-sys-color-success, #198754) 10%, transparent);--hub-table-filter-button-active-border-color: var(--hub-sys-color-success, #198754);--hub-table-filter-button-hover-bg: rgba(0, 0, 0, .05);--hub-table-filter-button-icon-active-color: var(--hub-sys-color-success, #198754);--hub-table-filter-button-icon-color: var(--hub-sys-text-muted, #6c757d);--hub-table-filter-button-gap: var(--hub-ref-space-2, .5rem);--hub-table-filter-button-padding-x: .75rem;--hub-table-filter-button-padding-y: .375rem;--hub-table-filter-button-border-width: 1px;--hub-table-filter-button-border-color: transparent;--hub-table-filter-button-border-radius: var(--hub-ref-radius-sm, .25rem);--hub-table-filter-button-transition: all .2s ease;--hub-table-filter-count-bg: var(--hub-sys-color-success, #198754);--hub-table-filter-count-color: var(--hub-ref-color-white, #fff);--hub-table-filter-count-size: 1.25rem;--hub-table-filter-count-padding-x: .4em;--hub-table-filter-count-font-size: .7rem;--hub-table-filter-count-font-weight: var(--hub-ref-font-weight-bold, 700);--hub-table-filter-count-border-radius: var(--hub-ref-radius-pill, 50rem);--hub-table-batch-actions-btn-icon-gap: var(--hub-ref-space-1, .25rem);--hub-table-hover-bg: var(--hub-sys-state-hover-bg, rgba(0, 0, 0, .075));--hub-table-hover-color: var(--hub-sys-text-primary, #212529);--hub-table-striped-bg: var(--hub-sys-state-striped-bg, rgba(0, 0, 0, .05));--hub-table-striped-color: var(--hub-sys-text-primary, #212529)}:host{display:flex;flex-direction:column;gap:var(--hub-table-container-gap);min-width:0;color:var(--hub-table-container-color)}:host .hub-table__top-bar{display:flex;justify-content:var(--hub-table-top-bar-justify-content);align-items:var(--hub-table-top-bar-align-items);flex-wrap:var(--hub-table-top-bar-wrap);gap:var(--hub-table-top-bar-gap)}:host .hub-table__batch-actions{display:flex;align-items:center;gap:var(--hub-table-batch-actions-gap);margin-inline-end:var(--hub-table-batch-actions-margin-inline-end)}:host .hub-table__batch-actions-btn-icon{margin-right:var(--hub-table-batch-actions-btn-icon-gap)}:host .hub-table__batch-actions-btn--default,:host .hub-table__cell-btn--default{border:var(--hub-table-border-width) solid var(--hub-table-border-color);border-radius:var(--hub-table-border-radius)}:host .hub-table__search{display:flex;flex-wrap:nowrap;align-items:stretch;justify-content:end}:host .hub-table__search-input{position:relative;flex:1 1 auto;width:1%;min-width:0;display:block;width:100%;padding:var(--hub-table-search-input-padding-y) var(--hub-table-search-input-padding-x);font-size:var(--hub-table-search-input-font-size);font-weight:var(--hub-ref-font-weight-base, 400);line-height:var(--hub-ref-line-height-base, 1.5);color:var(--hub-table-search-input-color);appearance:none;background-color:var(--hub-table-search-input-bg);background-clip:padding-box;border:var(--hub-table-search-border-width) solid var(--hub-table-search-input-border-color);border-radius:var(--hub-table-search-border-radius) 0 0 var(--hub-table-search-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}:host .hub-table__search-button{display:inline-flex;align-items:center;justify-content:center;min-width:var(--hub-table-search-button-min-width);color:var(--hub-table-search-button-color);background-color:var(--hub-table-search-button-bg);border-color:var(--hub-table-search-button-border-color);border-radius:0 var(--hub-table-search-border-radius) var(--hub-table-search-border-radius) 0}:host .hub-table__bottom-bar{display:flex;justify-content:var(--hub-table-bottom-bar-justify-content);align-items:var(--hub-table-bottom-bar-align-items);flex-wrap:var(--hub-table-bottom-bar-wrap);gap:var(--hub-table-bottom-bar-gap)}:host .hub-table__bottom-bar-paginator{order:var(--hub-table-bottom-bar-paginator-order);flex:var(--hub-table-bottom-bar-paginator-flex)}:host .hub-table__bottom-bar-settings{order:var(--hub-table-bottom-bar-settings-order);flex:var(--hub-table-bottom-bar-settings-flex);margin:0}:host .hub-table__bottom-bar-info{order:var(--hub-table-bottom-bar-info-order);flex:var(--hub-table-bottom-bar-info-flex);margin:0}:host .hub-table__paginator{overflow:auto;margin:0}:host .hub-table__filter-button{display:flex;flex-wrap:nowrap;align-items:center;gap:var(--hub-table-filter-button-gap);padding:var(--hub-table-filter-button-padding-y) var(--hub-table-filter-button-padding-x);cursor:pointer;border:var(--hub-table-filter-button-border-width) solid var(--hub-table-filter-button-border-color);border-radius:var(--hub-table-filter-button-border-radius);transition:var(--hub-table-filter-button-transition)}:host .hub-table__filter-button:hover{background-color:var(--hub-table-filter-button-hover-bg)}:host .hub-table__filter-button--active{background-color:var(--hub-table-filter-button-active-bg);border-color:var(--hub-table-filter-button-active-border-color)}:host .hub-table__filter-button--active .hub-table__filter-button-icon{color:var(--hub-table-filter-button-icon-active-color)}:host .hub-table__filter-button-icon{transition:color .2s ease;color:var(--hub-table-filter-button-icon-color)}:host .hub-table__filter-count{display:inline-flex;align-items:center;justify-content:center;min-width:var(--hub-table-filter-count-size);height:var(--hub-table-filter-count-size);padding:0 var(--hub-table-filter-count-padding-x);font-size:var(--hub-table-filter-count-font-size);font-weight:var(--hub-table-filter-count-font-weight);line-height:1;color:var(--hub-table-filter-count-color);text-align:center;white-space:nowrap;background-color:var(--hub-table-filter-count-bg);border-radius:var(--hub-table-filter-count-border-radius);animation:badge-appear .2s ease}:host .hub-table__no-data-icon{margin-right:1.5rem}:host .hub-table__header-icon{margin-right:.5rem}:host .hub-table__icon{display:inline-block;width:var(--hub-table-icon-size);height:var(--hub-table-icon-size);background-color:var(--hub-table-icon-color);-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;vertical-align:middle}:host .hub-table__icon--xs{--hub-table-icon-size: .75em}:host .hub-table__icon--sm{--hub-table-icon-size: .875em}:host .hub-table__icon--lg{--hub-table-icon-size: 1.33em}:host .hub-table__icon--2x{--hub-table-icon-size: 2em}:host .hub-table__icon--3x{--hub-table-icon-size: 3em}:host .hub-table__icon--4x{--hub-table-icon-size: 4em}:host .hub-table__icon--5x{--hub-table-icon-size: 5em}:host .hub-table__icon--search{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z'/%3E%3C/svg%3E\")}:host .hub-table__icon--filter{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M3.9 54.9C10.5 40.9 24.5 32 40 32H472c15.5 0 29.5 8.9 36.1 22.9s4.6 30.5-5.2 42.5L320 320.9V448c0 12.1-6.8 23.2-17.7 28.6s-23.8 4.3-33.5-3l-64-48c-8.1-6-12.8-15.5-12.8-25.6V320.9L9 97.3C-.7 85.4-2.8 68.8 3.9 54.9z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M3.9 54.9C10.5 40.9 24.5 32 40 32H472c15.5 0 29.5 8.9 36.1 22.9s4.6 30.5-5.2 42.5L320 320.9V448c0 12.1-6.8 23.2-17.7 28.6s-23.8 4.3-33.5-3l-64-48c-8.1-6-12.8-15.5-12.8-25.6V320.9L9 97.3C-.7 85.4-2.8 68.8 3.9 54.9z'/%3E%3C/svg%3E\")}:host .hub-table__icon--eraser{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 576 512'%3E%3Cpath d='M290.7 57.4L57.4 290.7c-25 25-25 65.5 0 90.5l80 80c12 12 28.3 18.7 45.3 18.7H288h9.4H512c17.7 0 32-14.3 32-32s-14.3-32-32-32H387.9L518.6 285.3c25-25 25-65.5 0-90.5L381.3 57.4c-25-25-65.5-25-90.5 0zM297.4 416H288l-105.4 0-80-80L227.3 211.3 364.7 348.7 297.4 416z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 576 512'%3E%3Cpath d='M290.7 57.4L57.4 290.7c-25 25-25 65.5 0 90.5l80 80c12 12 28.3 18.7 45.3 18.7H288h9.4H512c17.7 0 32-14.3 32-32s-14.3-32-32-32H387.9L518.6 285.3c25-25 25-65.5 0-90.5L381.3 57.4c-25-25-65.5-25-90.5 0zM297.4 416H288l-105.4 0-80-80L227.3 211.3 364.7 348.7 297.4 416z'/%3E%3C/svg%3E\")}:host .hub-table__icon--info{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM216 336h24V272H216c-13.3 0-24-10.7-24-24s10.7-24 24-24h48c13.3 0 24 10.7 24 24v88h8c13.3 0 24 10.7 24 24s-10.7 24-24 24H216c-13.3 0-24-10.7-24-24s10.7-24 24-24zm40-208a32 32 0 1 1 0 64 32 32 0 1 1 0-64z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM216 336h24V272H216c-13.3 0-24-10.7-24-24s10.7-24 24-24h48c13.3 0 24 10.7 24 24v88h8c13.3 0 24 10.7 24 24s-10.7 24-24 24H216c-13.3 0-24-10.7-24-24s10.7-24 24-24zm40-208a32 32 0 1 1 0 64 32 32 0 1 1 0-64z'/%3E%3C/svg%3E\");margin-right:1.5rem}:host .hub-table__icon--sort{-webkit-mask-image:var(--hub-table-icon-sort);mask-image:var(--hub-table-icon-sort)}:host .hub-table__icon--sort-up{-webkit-mask-image:var(--hub-table-icon-sort-up);mask-image:var(--hub-table-icon-sort-up)}:host .hub-table__icon--sort-down{-webkit-mask-image:var(--hub-table-icon-sort-down);mask-image:var(--hub-table-icon-sort-down)}:host .hub-table__icon--caret-up{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M182.6 137.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8H288c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-128-128z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M182.6 137.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8H288c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-128-128z'/%3E%3C/svg%3E\")}:host .hub-table__icon--caret-down{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M137.4 374.6c12.5 12.5 32.8 12.5 45.3 0l128-128c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8H32c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l128 128z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M137.4 374.6c12.5 12.5 32.8 12.5 45.3 0l128-128c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8H32c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l128 128z'/%3E%3C/svg%3E\")}:host .hub-table__icon--chevron-up{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M233.4 105.4c12.5-12.5 32.8-12.5 45.3 0l192 192c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L256 173.3 86.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l192-192z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M233.4 105.4c12.5-12.5 32.8-12.5 45.3 0l192 192c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L256 173.3 86.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l192-192z'/%3E%3C/svg%3E\")}:host .hub-table__icon--chevron-down{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M233.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5 12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L256 338.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M233.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5 12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L256 338.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z'/%3E%3C/svg%3E\")}:host .hub-table__icon--chevron-left{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z'/%3E%3C/svg%3E\")}:host .hub-table__icon--chevron-right{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M310.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L242.7 256 105.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M310.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L242.7 256 105.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z'/%3E%3C/svg%3E\")}:host .hub-table__icon--angle-left{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z'/%3E%3C/svg%3E\")}:host .hub-table__icon--angle-right{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z'/%3E%3C/svg%3E\")}:host .hub-table__icon--angle-double-left{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160zm352-160l-160 160c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L301.3 256 438.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160zm352-160l-160 160c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L301.3 256 438.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0z'/%3E%3C/svg%3E\")}:host .hub-table__icon--angle-double-right{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M470.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L402.7 256 265.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160zm-352 160l160-160c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L210.7 256 73.4 393.4c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M470.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L402.7 256 265.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160zm-352 160l160-160c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L210.7 256 73.4 393.4c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0z'/%3E%3C/svg%3E\")}:host .hub-table__icon--ellipsis-v{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 128 512'%3E%3Cpath d='M64 360a56 56 0 1 0 0 112 56 56 0 1 0 0-112zm0-160a56 56 0 1 0 0 112 56 56 0 1 0 0-112zM120 96A56 56 0 1 0 8 96a56 56 0 1 0 112 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 128 512'%3E%3Cpath d='M64 360a56 56 0 1 0 0 112 56 56 0 1 0 0-112zm0-160a56 56 0 1 0 0 112 56 56 0 1 0 0-112zM120 96A56 56 0 1 0 8 96a56 56 0 1 0 112 0z'/%3E%3C/svg%3E\")}:host .hub-table__icon--trash{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3Cpath d='M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3Cpath d='M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z'/%3E%3C/svg%3E\");margin-right:.5rem}:host .hub-table__icon--plus{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3Cpath d='M256 80c0-17.7-14.3-32-32-32s-32 14.3-32 32V224H48c-17.7 0-32 14.3-32 32s14.3 32 32 32H192V432c0 17.7 14.3 32 32 32s32-14.3 32-32V288H400c17.7 0 32-14.3 32-32s-14.3-32-32-32H256V80z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3Cpath d='M256 80c0-17.7-14.3-32-32-32s-32 14.3-32 32V224H48c-17.7 0-32 14.3-32 32s14.3 32 32 32H192V432c0 17.7 14.3 32 32 32s32-14.3 32-32V288H400c17.7 0 32-14.3 32-32s-14.3-32-32-32H256V80z'/%3E%3C/svg%3E\");margin-right:.5rem}:host .hub-table__container{overflow:auto;background-color:var(--hub-table-container-bg);border:var(--hub-table-border-width) solid var(--hub-table-border-color);border-radius:var(--hub-table-border-radius);color:var(--hub-table-container-color)}:host .hub-table__element{position:relative;width:100%;border-collapse:collapse;border-spacing:0;vertical-align:var(--hub-table-cell-vertical-align);border-color:var(--hub-table-border-color);background-color:var(--hub-table-bg);color:var(--hub-table-color)}:host .hub-table__element .sticky-start{background-color:var(--hub-table-bg);left:0;position:sticky;z-index:9}:host .hub-table__element .sticky-end{background-color:var(--hub-table-bg);right:0;position:sticky;z-index:9}:host .hub-table__element .clickable-item{cursor:pointer}:host .hub-table__element>:not(caption)>*>*{padding:var(--hub-table-cell-padding-y) var(--hub-table-cell-padding-x);vertical-align:var(--hub-table-cell-vertical-align);color:var(--hub-table-color-state, var(--hub-table-color-type, var(--hub-table-color)));background-color:var(--hub-table-bg);border-bottom-style:solid;border-bottom-color:var(--hub-table-border-color);border-bottom-width:var(--hub-table-border-width);box-shadow:inset 0 0 0 9999px var(--hub-table-bg-state, var(--hub-table-bg-type, var(--hub-table-accent-bg)))}:host .hub-table__element>tbody{vertical-align:inherit}:host .hub-table__element>thead{vertical-align:bottom}:host .hub-table__scrollable thead{position:sticky;top:0;z-index:10}:host .hub-table__group-divider{border-top:calc(var(--hub-table-border-width) * 2) solid var(--hub-table-group-separator-color)}:host .hub-table__sm>:not(caption)>*>*{padding:var(--hub-table-cell-padding-y-sm) var(--hub-table-cell-padding-x-sm)}:host .hub-table__bordered>:not(caption)>*{border-style:solid;border-width:var(--hub-table-border-width) 0}:host .hub-table__bordered>:not(caption)>*>*{border-style:solid;border-width:0 var(--hub-table-border-width)}:host .hub-table__borderless>:not(caption)>*>*{border-bottom-width:0}:host .hub-table__borderless>:not(:first-child){border-top-width:0}:host .hub-table__striped-odd>tbody>tr:nth-of-type(odd)>*{color:var(--hub-table-striped-color);background-color:var(--hub-table-striped-bg)}:host .hub-table__striped-even>tbody>tr:nth-of-type(2n)>*{color:var(--hub-table-striped-color);background-color:var(--hub-table-striped-bg)}:host .hub-table__striped-columns-odd>:not(caption)>tr>:nth-child(odd){color:var(--hub-table-striped-color);background-color:var(--hub-table-striped-bg)}:host .hub-table__striped-columns-even>:not(caption)>tr>:nth-child(2n){color:var(--hub-table-striped-color);background-color:var(--hub-table-striped-bg)}:host .hub-table__active{--hub-table-color-state: var(--hub-table-active-color);--hub-table-bg-state: var(--hub-table-active-bg)}:host .hub-table__hover>tbody>tr:hover>*{--hub-table-color-state: var(--hub-table-hover-color);--hub-table-bg-state: var(--hub-table-hover-bg)}:host .hub-table__body-row--selected>*,:host .hub-table__hover>tbody>tr.hub-table__body-row--selected:hover>*{--hub-table-color-state: var(--hub-table-selected-color);--hub-table-bg-state: var(--hub-table-selected-bg)}:host .hub-table__responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}.hub-table__primary{--hub-table-accent: var(--hub-sys-color-primary)}.hub-table__success{--hub-table-accent: var(--hub-sys-color-success)}.hub-table__danger{--hub-table-accent: var(--hub-sys-color-danger)}.hub-table__warning{--hub-table-accent: var(--hub-sys-color-warning)}.hub-table__info{--hub-table-accent: var(--hub-sys-color-info)}:host.hub-table--rtl{direction:rtl}:host.hub-table--rtl .hub-table__top-bar{direction:ltr}:host.hub-table--rtl .hub-table__batch-actions{order:2;flex-direction:row-reverse;margin-inline-end:0;margin-inline-start:auto}:host.hub-table--rtl .hub-table__batch-actions-btn-icon{margin-right:0;margin-left:var(--hub-table-batch-actions-btn-icon-gap)}:host.hub-table--rtl .hub-table__search{order:1;margin-inline-end:auto;margin-inline-start:0;direction:ltr}:host.hub-table--rtl .hub-table__search-input{direction:ltr;text-align:right;border-radius:0 var(--hub-table-search-border-radius) var(--hub-table-search-border-radius) 0}:host.hub-table--rtl .hub-table__search-button{border-radius:var(--hub-table-search-border-radius) 0 0 var(--hub-table-search-border-radius)}:host.hub-table--rtl .hub-table__no-data-icon{margin-right:0;margin-left:1.5rem}:host.hub-table--rtl .hub-table__header-icon{margin-right:0;margin-left:.5rem}.caption-top{caption-side:top}@media(max-width:576px){.hub-table__responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width:768px){.hub-table__responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width:992px){.hub-table__responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width:1200px){.hub-table__responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width:1400px){.hub-table__responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@keyframes badge-appear{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox]:not([ngNoCva])[formControlName],input[type=checkbox]:not([ngNoCva])[formControl],input[type=checkbox]:not([ngNoCva])[ngModel]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple]):not([ngNoCva])[formControlName],select:not([multiple]):not([ngNoCva])[formControl],select:not([multiple]):not([ngNoCva])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: PaginableTableDropdownComponent, selector: "hub-table-dropdown, paginable-table-dropdown", inputs: ["row", "options", "appendTo", "disabled"] }, { kind: "component", type: PaginatorComponent, selector: "hub-paginator, paginable-table-paginator", inputs: ["rtl", "page", "numberOfPages"], outputs: ["pageChange"] }, { kind: "component", type: DropdownComponent, selector: "hub-dropdown, hub-ui-dropdown", inputs: ["id"], outputs: ["open", "close"] }, { kind: "component", type: MenuFilterComponent, selector: "menu-filter", inputs: ["header"] }, { kind: "component", type: HubIconComponent, selector: "hub-icon, ng-hub-ui-icon", inputs: ["config"] }, { kind: "component", type: PaginableTableRangeInputComponent, selector: "hub-table-range-input, paginable-table-range-input", inputs: ["type"] }, { kind: "component", type: PaginableStateOutlet, selector: "hub-state-outlet", inputs: ["template", "instanceDefault", "globalDefault", "fallback", "context"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: UcfirstPipe, name: "ucfirst" }, { kind: "pipe", type: UnwrapAsyncPipe, name: "unwrapAsync" }, { kind: "pipe", type: IsObservablePipe, name: "isObservable" }, { kind: "pipe", type: GetPipe, name: "get" }], animations: [
|
|
3748
4638
|
trigger('fadeInOut', [
|
|
3749
4639
|
transition(':enter', [style({ opacity: 0 }), animate('256ms 256ms', style({ opacity: 1, height: 'auto' }))]),
|
|
3750
4640
|
transition(':leave', [animate('256ms ease-out', style({ opacity: 0, height: '0' }))])
|
|
@@ -3787,7 +4677,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImpor
|
|
|
3787
4677
|
], host: {
|
|
3788
4678
|
class: 'hub-table',
|
|
3789
4679
|
'[class.hub-table--rtl]': 'isRtl()'
|
|
3790
|
-
}, template: "@if (batchActions().length || searchable() || headerFilters().length) {\n\t<div class=\"hub-table__top-bar\">\n\t\t@if (batchActions().length) {\n\t\t\t<div class=\"hub-table__batch-actions\">\n\t\t\t\t@for (button of batchActions(); track $index) {\n\t\t\t\t\t@if ($any(button).buttons?.length) {\n\t\t\t\t\t\t<hub-table-dropdown\n\t\t\t\t\t\t\tclass=\"hub-table__batch-actions-dropdown\"\n\t\t\t\t\t\t\t[options]=\"$any(button)\"\n\t\t\t\t\t\t\t[disabled]=\"!value.length\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t</hub-table-dropdown>\n\t\t\t\t\t} @else {\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tclass=\"hub-table__batch-actions-btn\"\n\t\t\t\t\t\t\t[ngClass]=\"getBatchActionClassList(button)\"\n\t\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\t\t(click)=\"handleBatchAction(button)\"\n\t\t\t\t\t\t\t[disabled]=\"!value.length\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t@if (button.icon) {\n\t\t\t\t\t\t\t\t<i class=\"hub-table__batch-actions-btn-icon {{ button.icon }}\"></i>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (button.title) {\n\t\t\t\t\t\t\t\t<span class=\"hub-table__batch-actions-btn-title\">{{ button.title | unwrapAsync }}</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\t\t@if (searchable()) {\n\t\t\t<div class=\"hub-table__search\">\n\t\t\t\t@if (isRtl()) {\n\t\t\t\t\t<button\n\t\t\t\t\t\tclass=\"hub-table__search-button btn btn-outline-dark\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t[attr.aria-label]=\"'SEARCH' | translate | ucfirst\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<i class=\"hub-table__search-icon hub-table__icon hub-table__icon--search\" aria-hidden=\"true\"></i>\n\t\t\t\t\t</button>\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tclass=\"hub-table__search-input\"\n\t\t\t\t\t\t(input)=\"searchProxy$.next($any($event.target).value)\"\n\t\t\t\t\t\t[value]=\"searchTerm()\"\n\t\t\t\t\t\t[attr.placeholder]=\"'SEARCH' | translate | ucfirst\"\n\t\t\t\t\t\t[attr.aria-label]=\"'SEARCH' | translate | ucfirst\"\n\t\t\t\t\t/>\n\t\t\t\t} @else {\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tclass=\"hub-table__search-input\"\n\t\t\t\t\t\t(input)=\"searchProxy$.next($any($event.target).value)\"\n\t\t\t\t\t\t[value]=\"searchTerm()\"\n\t\t\t\t\t\t[attr.placeholder]=\"'SEARCH' | translate | ucfirst\"\n\t\t\t\t\t\t[attr.aria-label]=\"'SEARCH' | translate | ucfirst\"\n\t\t\t\t\t/>\n\t\t\t\t\t<button\n\t\t\t\t\t\tclass=\"hub-table__search-button btn btn-outline-dark\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t[attr.aria-label]=\"'SEARCH' | translate | ucfirst\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<i class=\"hub-table__search-icon hub-table__icon hub-table__icon--search\" aria-hidden=\"true\"></i>\n\t\t\t\t\t</button>\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\t\t@if (headerFilters().length) {\n\t\t\t<div class=\"hub-table__delete-filters\">\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"hub-table__delete-filters-btn btn btn-outline-danger\"\n\t\t\t\t\t(click)=\"clearFilters()\"\n\t\t\t\t\t[disabled]=\"filterLoading\"\n\t\t\t\t>\n\t\t\t\t\t<i class=\"hub-table__delete-filters-icon hub-table__icon hub-table__icon--eraser\"></i>\n\t\t\t\t\t{{ 'CLEAN_FILTERS' | translate | ucfirst }}\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t}\n\t</div>\n}\n\n<div class=\"hub-table__container {{ responsiveCSSClass() }}\" [class.hub-table__responsive]=\"responsiveCSSClass()\">\n\t@let striped = options().striped;\n\t<table\n\t\tclass=\"hub-table__element\"\n\t\t[class.hub-table__hover]=\"(options().hoverableRows || selectable()) && !loading()\"\n\t\t[class.hub-table__striped-odd]=\"striped === 'rows-odd'\"\n\t\t[class.hub-table__striped-even]=\"striped === 'rows-even'\"\n\t\t[class.hub-table__striped-columns-odd]=\"striped === 'columns-odd'\"\n\t\t[class.hub-table__striped-columns-even]=\"striped === 'columns-even'\"\n\t\t[class.hub-table__selectable]=\"selectable()\"\n\t\t[class.hub-table__scrollable]=\"options().scrollable\"\n\t\t[ngClass]=\"options().variant ? 'hub-table__' + options().variant : null\"\n\t>\n\t\t<thead class=\"hub-table__head\" [formGroup]=\"filtersFG\">\n\t\t\t<tr class=\"hub-table__head-row\">\n\t\t\t\t@if (selectable()) {\n\t\t\t\t\t<th class=\"hub-table__header-cell hub-table__header-cell--actions sticky-start\">\n\t\t\t\t\t\t@if (multipleSelectable()) {\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\t[(ngModel)]=\"allRowsSelected\"\n\t\t\t\t\t\t\t\t[ngModelOptions]=\"{ standalone: true }\"\n\t\t\t\t\t\t\t\t(click)=\"toggleAll()\"\n\t\t\t\t\t\t\t\t[disabled]=\"disabled\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t}\n\t\t\t\t\t</th>\n\t\t\t\t}\n\t\t\t\t@for (header of fixedHeaders(); track header.property) {\n\t\t\t\t\t@if (!(isColumnHidden(header) | async)) {\n\t\t\t\t\t\t<th\n\t\t\t\t\t\t\tclass=\"hub-table__header-cell\"\n\t\t\t\t\t\t\tresizable\n\t\t\t\t\t\t\t[class.sticky-start]=\"header.sticky === 'start'\"\n\t\t\t\t\t\t\t[class.sticky-end]=\"header.sticky === 'end'\"\n\t\t\t\t\t\t\t[class.text-start]=\"header.align === 'start'\"\n\t\t\t\t\t\t\t[class.text-end]=\"header.align === 'end'\"\n\t\t\t\t\t\t\t[class.text-center]=\"header.align === 'center'\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"hub-table__header-cell-content d-flex flex-nowrap align-items-center justify-content-between gap-2\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"getHeaderTemplate(header) || defaultHeaderTpt\"\n\t\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{\n\t\t\t\t\t\t\t\t\t\theader,\n\t\t\t\t\t\t\t\t\t\tproperty: header | get: header.property\n\t\t\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t\t@if (header.sortable || header.filter?.mode === 'menu') {\n\t\t\t\t\t\t\t\t\t<div class=\"hub-table__header-cell-actions d-flex gap-2 ms-auto align-items-center\">\n\t\t\t\t\t\t\t\t\t\t<button class=\"hub-table__sort-btn btn\" (click)=\"sort(header)\">\n\t\t\t\t\t\t\t\t\t\t\t@if (header.sortable) {\n\t\t\t\t\t\t\t\t\t\t\t\t<i\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-table__sort-icon hub-table__icon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"getOrdenationClass(header)\"\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\t\t\t></i>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t@if (header.filter?.mode === 'menu') {\n\t\t\t\t\t\t\t\t\t\t\t<hub-dropdown\n\t\t\t\t\t\t\t\t\t\t\t\t#dropdown\n\t\t\t\t\t\t\t\t\t\t\t\t(open)=\"onDropdownFilterOpened($event)\"\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-table__filter-dropdown\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-table__filter-button button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t[class.hub-table__filter-button--active]=\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfiltersFG.get(header.filter.key || header.property)?.value?.rules\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t?.length\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<i\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-table__filter-button-icon hub-table__icon hub-table__icon--filter\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t></i>\n\t\t\t\t\t\t\t\t\t\t\t\t\t@if (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfiltersFG.get(header.filter.key || header.property)?.value?.rules;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tas rules\n\t\t\t\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t@if (rules.length) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"hub-table__filter-count\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{ rules.length }}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t@if (dropdown.isOpened()) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t<menu-filter\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-table__filter-dropdown-content content\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[header]=\"header\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[formControlName]=\"header.filter.key || header.property\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</menu-filter>\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t</hub-dropdown>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t@if (templateExpandingRows().length) {\n\t\t\t\t\t<th class=\"hub-table__header-cell hub-table__header-cell--expander sticky-end\"></th>\n\t\t\t\t}\n\t\t\t</tr>\n\n\t\t\t<!-- Filtering -->\n\t\t\t@if (hasColumnFilters()) {\n\t\t\t\t<tr class=\"hub-table__filter-row\">\n\t\t\t\t\t@if (selectable() || batchActions.length) {\n\t\t\t\t\t\t<th class=\"hub-table__filter-cell sticky-start\"></th>\n\t\t\t\t\t}\n\t\t\t\t\t@for (header of fixedHeaders(); track $index; let last = $last) {\n\t\t\t\t\t\t@if (!(isColumnHidden(header) | async)) {\n\t\t\t\t\t\t\t@let formControlName = header.filter?.key || header.property;\n\t\t\t\t\t\t\t<th\n\t\t\t\t\t\t\t\tclass=\"hub-table__filter-cell\"\n\t\t\t\t\t\t\t\t[class.sticky-start]=\"header.sticky === 'start'\"\n\t\t\t\t\t\t\t\t[class.sticky-end]=\"header.sticky === 'end'\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t@if (header.filter && header.filter.mode !== 'menu' && filtersFG.get(formControlName)) {\n\t\t\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"getFilterTemplate(header) || defaultFilterTpt\"\n\t\t\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{\n\t\t\t\t\t\t\t\t\t\t\theader: header,\n\t\t\t\t\t\t\t\t\t\t\tformControl: filtersFG.get(formControlName)\n\t\t\t\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t</tr>\n\t\t\t}\n\t\t</thead>\n\t\t<tbody class=\"hub-table__body\">\n\t\t\t@if (loading()) {\n\t\t\t\t<tr class=\"hub-table__body-row\">\n\t\t\t\t\t<td class=\"hub-table__cell\" [attr.colspan]=\"headersCount()\">\n\t\t\t\t\t\t<hub-state-outlet\n\t\t\t\t\t\t\t[template]=\"loadingTpt()\"\n\t\t\t\t\t\t\t[instanceDefault]=\"loadingComponent()\"\n\t\t\t\t\t\t\t[globalDefault]=\"defaults.loading()\"\n\t\t\t\t\t\t\t[fallback]=\"defaultLoadingTpt\"\n\t\t\t\t\t\t\t[context]=\"{ colspan: headersCount() }\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t} @else if (error()) {\n\t\t\t\t<tr class=\"hub-table__body-row\">\n\t\t\t\t\t<td class=\"hub-table__cell\" [attr.colspan]=\"headersCount()\">\n\t\t\t\t\t\t<hub-state-outlet\n\t\t\t\t\t\t\t[template]=\"errorTpt()\"\n\t\t\t\t\t\t\t[instanceDefault]=\"errorComponent()\"\n\t\t\t\t\t\t\t[globalDefault]=\"defaults.error()\"\n\t\t\t\t\t\t\t[fallback]=\"defaultErrorTpt\"\n\t\t\t\t\t\t\t[context]=\"{ error: error(), colspan: headersCount() }\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t} @else if (rows().length) {\n\t\t\t\t@for (item of rows(); track $index) {\n\t\t\t\t\t<ng-container\n\t\t\t\t\t\t[ngTemplateOutlet]=\"templateRow() || defaultRowTemplate\"\n\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: item }\"\n\t\t\t\t\t>\n\t\t\t\t\t</ng-container>\n\t\t\t\t}\n\t\t\t} @else {\n\t\t\t\t<tr>\n\t\t\t\t\t<td [attr.colspan]=\"headersCount()\">\n\t\t\t\t\t\t<hub-state-outlet\n\t\t\t\t\t\t\t[template]=\"noResultsTpt()\"\n\t\t\t\t\t\t\t[instanceDefault]=\"noResultsComponent()\"\n\t\t\t\t\t\t\t[globalDefault]=\"defaults.noResults()\"\n\t\t\t\t\t\t\t[fallback]=\"defaultNoResultsTpt\"\n\t\t\t\t\t\t\t[context]=\"{ colspan: headersCount(), filters: filters() ?? undefined }\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t}\n\t\t</tbody>\n\t</table>\n</div>\n\n<!-- Pagination -->\n@if (page() !== undefined && page() !== null) {\n\t<div class=\"hub-table__bottom-bar\">\n\t\t@if (paginationPosition() == 'bottom' || paginationPosition() === 'both') {\n\t\t\t<hub-paginator\n\t\t\t\tclass=\"hub-table__paginator hub-table__bottom-bar-paginator\"\n\t\t\t\t[(page)]=\"$any(page)\"\n\t\t\t\t[numberOfPages]=\"numberOfPages()\"\n\t\t\t\t[rtl]=\"isRtl()\"\n\t\t\t>\n\t\t\t</hub-paginator>\n\t\t}\n\t\t<div class=\"hub-table__bottom-bar-settings hub-paginator__settings\">\n\t\t\t<label class=\"hub-paginator__label\"> {{ 'ROWS_PER_PAGE' | translate | ucfirst }}: </label>\n\t\t\t<select\n\t\t\t\tclass=\"hub-paginator__select\"\n\t\t\t\t[ngModel]=\"perPage()\"\n\t\t\t\t(ngModelChange)=\"perPage.set($event)\"\n\t\t\t\t[ngModelOptions]=\"{ standalone: true }\"\n\t\t\t>\n\t\t\t\t@for (option of perPageOptions(); track option) {\n\t\t\t\t\t<option [ngValue]=\"option\" class=\"hub-paginator__select-option\">\n\t\t\t\t\t\t{{ option }}\n\t\t\t\t\t</option>\n\t\t\t\t}\n\t\t\t</select>\n\t\t</div>\n\t\t@if (totalItems() !== null && totalItems() !== undefined) {\n\t\t\t<p class=\"hub-table__bottom-bar-info hub-paginator__info\">\n\t\t\t\t{{\n\t\t\t\t\t'SHOWING_X_OF_Y_ROWS'\n\t\t\t\t\t\t| translate\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\tamount: rows().length,\n\t\t\t\t\t\t\t\t\ttotal: totalItems()\n\t\t\t\t\t\t\t }\n\t\t\t\t\t\t| ucfirst\n\t\t\t\t}}\n\t\t\t</p>\n\t\t}\n\t</div>\n}\n<ng-template #defaultRowTemplate let-item>\n\t<tr\n\t\tclass=\"hub-table__body-row\"\n\t\t(click)=\"onItemClick($event, item)\"\n\t\t[class.hub-table__body-row--selected]=\"selectable() && item.selected\"\n\t\t[class.hub-table__body-row--clickable]=\"clickFn()\"\n\t\t[ngClass]=\"_getRowClass(item)\"\n\t>\n\t\t@if (selectable() || batchActions.length) {\n\t\t\t<td class=\"hub-table__cell hub-table__cell--select sticky-start\">\n\t\t\t\t<input\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t[(ngModel)]=\"item.selected\"\n\t\t\t\t\t[ngModelOptions]=\"{ standalone: true }\"\n\t\t\t\t\t(click)=\"$event.stopPropagation(); toggle(item)\"\n\t\t\t\t/>\n\t\t\t</td>\n\t\t}\n\t\t@for (header of fixedHeaders(); track $index) {\n\t\t\t@if (!(isColumnHidden(header) | async)) {\n\t\t\t\t<td\n\t\t\t\t\tclass=\"hub-table__cell\"\n\t\t\t\t\t[class.sticky-start]=\"header.sticky === 'start'\"\n\t\t\t\t\t[class.sticky-end]=\"header.sticky === 'end'\"\n\t\t\t\t\t[class.text-start]=\"header.align === 'start'\"\n\t\t\t\t\t[class.text-end]=\"header.align === 'end'\"\n\t\t\t\t\t[class.text-center]=\"header.align === 'center'\"\n\t\t\t\t\t[style.width]=\"header.buttons?.length ? '0' : 'auto'\"\n\t\t\t\t>\n\t\t\t\t\t<ng-container\n\t\t\t\t\t\t[ngTemplateOutlet]=\"getCellTemplate(header) || defaultCellTpt\"\n\t\t\t\t\t\t[ngTemplateOutletContext]=\"{\n\t\t\t\t\t\t\theader: header,\n\t\t\t\t\t\t\titem: item.data,\n\t\t\t\t\t\t\trow: item,\n\t\t\t\t\t\t\tproperty: item.data | get: header.property\n\t\t\t\t\t\t}\"\n\t\t\t\t\t>\n\t\t\t\t\t</ng-container>\n\t\t\t\t</td>\n\t\t\t}\n\t\t}\n\t\t@if (templateExpandingRows().length) {\n\t\t\t<td class=\"hub-table__cell hub-table__cell--expander sticky-end\" [class.sticky-end]=\"stickyActions()\">\n\t\t\t\t@if (templateExpandingRows().length) {\n\t\t\t\t\t<button (click)=\"toggleExpandedRow(item)\" type=\"button\" class=\"hub-table__expander-btn btn btn-link px-2\">\n\t\t\t\t\t\t<i\n\t\t\t\t\t\t\tclass=\"hub-table__expander-icon hub-table__icon\"\n\t\t\t\t\t\t\t[class.hub-table__icon--caret-up]=\"!item.collapsed\"\n\t\t\t\t\t\t\t[class.hub-table__icon--caret-down]=\"item.collapsed\"\n\t\t\t\t\t\t></i>\n\t\t\t\t\t</button>\n\t\t\t\t}\n\t\t\t</td>\n\t\t}\n\t\t<!-- <td *ngIf=\"!lastColumnOnlyHasButtons && filterHeaders?.length\"></td> -->\n\t</tr>\n\t@if (!item.collapsed) {\n\t\t@for (template of templateExpandingRows(); track template) {\n\t\t\t<ng-container [ngTemplateOutlet]=\"template.templateRef\" [ngTemplateOutletContext]=\"{ item: item }\"> </ng-container>\n\t\t}\n\t}\n</ng-template>\n\n<ng-template #defaultNoResultsTpt>\n\t<div class=\"hub-table__no-data alert alert-info d-flex align-items-center m-4\" role=\"alert\">\n\t\t<i class=\"hub-table__no-data-icon hub-table__icon hub-table__icon--info hub-table__icon--2x\" aria-hidden=\"true\"></i>\n\t\t{{ 'NO_RESULTS_FOUND' | translate | ucfirst }}\n\t</div>\n</ng-template>\n\n<ng-template #defaultLoadingTpt>\n\t<div class=\"hub-table__loading\">\n\t\t<svg\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\txmlns:xlink=\"http://www.w3.org/1999/xlink\"\n\t\t\tstyle=\"margin: auto; background: #fff; display: block\"\n\t\t\twidth=\"200px\"\n\t\t\theight=\"200px\"\n\t\t\tviewBox=\"0 0 100 100\"\n\t\t\tpreserveAspectRatio=\"xMidYMid\"\n\t\t>\n\t\t\t<circle cx=\"50\" cy=\"50\" r=\"0\" fill=\"none\" stroke=\"#cccccc\" stroke-width=\"1\">\n\t\t\t\t<animate\n\t\t\t\t\tattributeName=\"r\"\n\t\t\t\t\trepeatCount=\"indefinite\"\n\t\t\t\t\tdur=\"1.6666666666666667s\"\n\t\t\t\t\tvalues=\"0;40\"\n\t\t\t\t\tkeyTimes=\"0;1\"\n\t\t\t\t\tkeySplines=\"0 0.2 0.8 1\"\n\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t></animate>\n\t\t\t\t<animate\n\t\t\t\t\tattributeName=\"opacity\"\n\t\t\t\t\trepeatCount=\"indefinite\"\n\t\t\t\t\tdur=\"1.6666666666666667s\"\n\t\t\t\t\tvalues=\"1;0\"\n\t\t\t\t\tkeyTimes=\"0;1\"\n\t\t\t\t\tkeySplines=\"0.2 0 0.8 1\"\n\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t></animate>\n\t\t\t</circle>\n\t\t\t<circle cx=\"50\" cy=\"50\" r=\"0\" fill=\"none\" stroke=\"#333333\" stroke-width=\"1\">\n\t\t\t\t<animate\n\t\t\t\t\tattributeName=\"r\"\n\t\t\t\t\trepeatCount=\"indefinite\"\n\t\t\t\t\tdur=\"1.6666666666666667s\"\n\t\t\t\t\tvalues=\"0;40\"\n\t\t\t\t\tkeyTimes=\"0;1\"\n\t\t\t\t\tkeySplines=\"0 0.2 0.8 1\"\n\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\tbegin=\"-0.8333333333333334s\"\n\t\t\t\t></animate>\n\t\t\t\t<animate\n\t\t\t\t\tattributeName=\"opacity\"\n\t\t\t\t\trepeatCount=\"indefinite\"\n\t\t\t\t\tdur=\"1.6666666666666667s\"\n\t\t\t\t\tvalues=\"1;0\"\n\t\t\t\t\tkeyTimes=\"0;1\"\n\t\t\t\t\tkeySplines=\"0.2 0 0.8 1\"\n\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\tbegin=\"-0.8333333333333334s\"\n\t\t\t\t></animate>\n\t\t\t</circle>\n\t\t</svg>\n\t</div>\n</ng-template>\n\n<ng-template #defaultErrorTpt>\n\t<div class=\"hub-table__error m-4 p-4 text-center text-danger\">\n\t\t<svg\n\t\t\taria-hidden=\"true\"\n\t\t\tfocusable=\"false\"\n\t\t\tdata-prefix=\"fal\"\n\t\t\tdata-icon=\"sad-tear\"\n\t\t\trole=\"img\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\tviewBox=\"0 0 496 512\"\n\t\t\tstyle=\"height: 64px\"\n\t\t>\n\t\t\t<path\n\t\t\t\tfill=\"#dc3545\"\n\t\t\t\td=\"M168 240c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 464c-119.1 0-216-96.9-216-216S128.9 40 248 40s216 96.9 216 216-96.9 216-216 216zm0-152c-11.2 0-22 1.7-32.7 4.1-7.2-12.6-16.1-26.5-28.1-42.4-9-12.1-29.4-12-38.4 0-29.7 39.6-44.8 69-44.8 87.3 0 34.7 28.7 63 64 63s64-28.3 64-63c0-4.4-1-9.5-2.7-15.1 6.1-1.2 12.3-1.9 18.7-1.9 34.9 0 67.8 15.4 90.2 42.2 5.3 6.4 15.4 8 22.5 2 6.8-5.7 7.7-15.8 2-22.5C334.2 339.6 292.4 320 248 320zm-80 80c-17.7 0-32-13.9-32-31 0-7.7 10-28.8 32-59.5 22 30.7 32 51.8 32 59.5 0 17.1-14.3 31-32 31z\"\n\t\t\t\tclass=\"\"\n\t\t\t></path>\n\t\t</svg>\n\t\t<p>{{ 'ERROR_OCURRED' | translate }}</p>\n\t</div>\n</ng-template>\n\n<ng-template #defaultHeaderTpt let-header=\"header\" let-property=\"property\">\n\t@if (header.icon) {\n\t\t<i class=\"hub-table__header-icon {{ header.icon }}\" aria-hidden=\"true\"></i>\n\t}\n\t<div\n\t\tclass=\"hub-table__header-title\"\n\t\t[class.me-auto]=\"header.align === 'start'\"\n\t\t[class.ms-auto]=\"header.align === 'end'\"\n\t\t[class.mx-auto]=\"header.align === 'center'\"\n\t>\n\t\t@if (header.title) {\n\t\t\t<span class=\"hub-table__header-title-text text-wrap\">{{ header.title ?? header.property | unwrapAsync }}</span>\n\t\t}\n\t</div>\n</ng-template>\n\n<ng-template #defaultFilterTpt let-header=\"header\" let-formControl=\"formControl\">\n\t@switch (header.filter.type) {\n\t\t@case ('dropdown') {\n\t\t\t<select [formControl]=\"formControl\" class=\"form-select form-control\">\n\t\t\t\t@if (header.filter.placeholder) {\n\t\t\t\t\t<option [ngValue]=\"null\">\n\t\t\t\t\t\t{{ header.filter.placeholder }}\n\t\t\t\t\t</option>\n\t\t\t\t}\n\t\t\t\t@if (header.filter.options | isObservable) {\n\t\t\t\t\t@let options = header.filter.options | async;\n\t\t\t\t\t@for (option of $any(options); track option) {\n\t\t\t\t\t\t<option [value]=\"option[header.filter.bindValue || 'id']\">\n\t\t\t\t\t\t\t{{ option[header.filter.bindLabel || 'name'] }}\n\t\t\t\t\t\t</option>\n\t\t\t\t\t}\n\t\t\t\t} @else {\n\t\t\t\t\t@for (option of header.filter.options; track option) {\n\t\t\t\t\t\t<option [value]=\"option[header.filter.bindValue || 'id']\">\n\t\t\t\t\t\t\t{{ option[header.filter.bindLabel || 'name'] }}\n\t\t\t\t\t\t</option>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t</select>\n\t\t}\n\t\t@case ('number-range') {\n\t\t\t<hub-table-range-input type=\"number\" [formControl]=\"formControl\"> </hub-table-range-input>\n\t\t}\n\t\t@case ('date-range') {\n\t\t\t<hub-table-range-input type=\"date\" [formControl]=\"formControl\"> </hub-table-range-input>\n\t\t}\n\t\t@case ('boolean') {\n\t\t\t<select [formControl]=\"formControl\" class=\"form-select form-control\">\n\t\t\t\t<option [ngValue]=\"null\">\n\t\t\t\t\t{{ header.filter.placeholder ?? 'SELECT_ONE' | translate | ucfirst }}\n\t\t\t\t</option>\n\t\t\t\t<option [ngValue]=\"true\">\n\t\t\t\t\t{{ header.filter.trueLabel ?? ('TRUE' | translate | ucfirst) }}\n\t\t\t\t</option>\n\t\t\t\t<option [ngValue]=\"false\">\n\t\t\t\t\t{{ header.filter.falseLabel ?? ('FALSE' | translate | ucfirst) }}\n\t\t\t\t</option>\n\t\t\t</select>\n\t\t}\n\t\t@default {\n\t\t\t<input\n\t\t\t\t[type]=\"header.filter.type\"\n\t\t\t\t[formControl]=\"formControl\"\n\t\t\t\tclass=\"form-control\"\n\t\t\t\t[placeholder]=\"header.filter.placeholder || ''\"\n\t\t\t/>\n\t\t}\n\t}\n</ng-template>\n\n<ng-template #defaultCellTpt let-property=\"property\" let-item=\"item\" let-row=\"row\" let-header=\"header\">\n\t@if (header.buttons) {\n\t\t<div class=\"hub-table__cell-buttons d-flex flex-nowrap gap-2 justify-content-end align-items-center\">\n\t\t\t@for (button of header.buttons; track button) {\n\t\t\t\t@if (button.buttons) {\n\t\t\t\t\t<hub-table-dropdown [options]=\"button\" [row]=\"row\" class=\"hub-table__cell-dropdown d-inline-block\">\n\t\t\t\t\t</hub-table-dropdown>\n\t\t\t\t} @else {\n\t\t\t\t\t@if (!(isHidden(button, row) | async)) {\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclass=\"hub-table__cell-btn\"\n\t\t\t\t\t\t\t[attr.title]=\"button.tooltip | unwrapAsync\"\n\t\t\t\t\t\t\t(click)=\"handleAction($event, button, row)\"\n\t\t\t\t\t\t\t[ngClass]=\"getRowActionClassList(button)\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div class=\"hub-table__cell-btn-content d-flex flex-nowrap align-items-center gap-1\">\n\t\t\t\t\t\t\t\t<ng-hub-ui-icon [config]=\"button.icon\"></ng-hub-ui-icon>\n\t\t\t\t\t\t\t\t@if (button.label) {\n\t\t\t\t\t\t\t\t\t<span class=\"hub-table__cell-btn-label\">{{ button.label | unwrapAsync }}</span>\n\t\t\t\t\t\t\t\t} @else if (button.title) {\n\t\t\t\t\t\t\t\t\t<span class=\"hub-table__cell-btn-label\">{{ button.title | unwrapAsync }}</span>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t</div>\n\t} @else {\n\t\t<span class=\"hub-table__cell-value\">{{ property }}</span>\n\t}\n</ng-template>\n", styles: [":root,:host{--hub-table-container-bg: var(--hub-ref-color-white, #fff);--hub-table-container-color: var(--hub-sys-text-primary, #212529);--hub-table-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-table-border-radius: var(--hub-ref-radius-md, .375rem);--hub-table-border-width: var(--hub-ref-border-width, 1px);--hub-table-container-gap: var(--hub-ref-space-3, 1rem);--hub-table-top-bar-gap: var(--hub-ref-space-3, 1rem);--hub-table-top-bar-justify-content: end;--hub-table-top-bar-align-items: center;--hub-table-top-bar-wrap: wrap;--hub-table-batch-actions-gap: var(--hub-ref-space-2, .5rem);--hub-table-batch-actions-margin-inline-end: auto;--hub-table-bottom-bar-gap: var(--hub-ref-space-3, 1rem);--hub-table-bottom-bar-justify-content: space-around;--hub-table-bottom-bar-align-items: center;--hub-table-bottom-bar-wrap: wrap;--hub-table-bottom-bar-paginator-order: 1;--hub-table-bottom-bar-settings-order: 2;--hub-table-bottom-bar-info-order: 3;--hub-table-bottom-bar-paginator-flex: 0 0 auto;--hub-table-bottom-bar-settings-flex: 0 0 auto;--hub-table-bottom-bar-info-flex: 0 0 auto;--hub-table-icon-color: currentColor;--hub-table-icon-size: 1em;--hub-table-icon-sort: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M137.4 41.4c12.5-12.5 32.8-12.5 45.3 0l128 128c9.2 9.2 11.9 22.9 6.9 34.9s-16.6 19.8-29.6 19.8H32c-12.9 0-24.6-7.8-29.6-19.8s-2.2-25.7 6.9-34.9l128-128zm0 429.3l-128-128c-9.2-9.2-11.9-22.9-6.9-34.9s16.6-19.8 29.6-19.8H288c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9l-128 128c-12.5 12.5-32.8 12.5-45.3 0z'/%3E%3C/svg%3E\");--hub-table-icon-sort-up: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M182.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8H288c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-128-128z'/%3E%3C/svg%3E\");--hub-table-icon-sort-down: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M137.4 374.6c12.5 12.5 32.8 12.5 45.3 0l128-128c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8H32c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l128 128z'/%3E%3C/svg%3E\");--hub-table-accent-bg: transparent;--hub-table-active-bg: var(--hub-sys-state-active-bg, rgba(0, 0, 0, .1));--hub-table-active-color: var(--hub-sys-text-primary, #212529);--hub-table-bg: var(--hub-ref-color-white, #fff);--hub-table-bg-state: initial;--hub-table-bg-type: initial;--hub-table-cell-padding-x: var(--hub-ref-space-3, 1rem);--hub-table-cell-padding-x-sm: var(--hub-ref-space-2, .5rem);--hub-table-cell-padding-y: var(--hub-ref-space-2, .5rem);--hub-table-cell-padding-y-sm: var(--hub-ref-space-1, .25rem);--hub-table-cell-vertical-align: middle;--hub-table-color: var(--hub-sys-text-primary, #212529);--hub-table-color-state: initial;--hub-table-color-type: initial;--hub-table-group-separator-color: var(--hub-sys-border-color-default, #dee2e6);--hub-table-search-button-bg: var(--hub-table-container-bg);--hub-table-search-button-border-color: var(--hub-table-border-color);--hub-table-search-button-color: var(--hub-table-container-color);--hub-table-search-button-min-width: 2.75rem;--hub-table-search-input-bg: var(--hub-table-container-bg);--hub-table-search-input-border-color: var(--hub-table-border-color);--hub-table-search-input-color: var(--hub-table-container-color);--hub-table-search-border-width: var(--hub-table-border-width);--hub-table-search-border-radius: var(--hub-table-border-radius);--hub-table-search-input-padding-x: .75rem;--hub-table-search-input-padding-y: .375rem;--hub-table-search-input-font-size: 1rem;--hub-table-filter-button-active-bg: rgba(25, 135, 84, .1);--hub-table-filter-button-active-border-color: var(--hub-sys-color-success, #198754);--hub-table-filter-button-hover-bg: rgba(0, 0, 0, .05);--hub-table-filter-button-icon-active-color: var(--hub-sys-color-success, #198754);--hub-table-filter-button-icon-color: var(--hub-sys-text-muted, #6c757d);--hub-table-filter-button-gap: var(--hub-ref-space-2, .5rem);--hub-table-filter-button-padding-x: .75rem;--hub-table-filter-button-padding-y: .375rem;--hub-table-filter-button-border-width: 1px;--hub-table-filter-button-border-color: transparent;--hub-table-filter-button-border-radius: var(--hub-ref-radius-sm, .25rem);--hub-table-filter-button-transition: all .2s ease;--hub-table-filter-count-bg: var(--hub-sys-color-success, #198754);--hub-table-filter-count-color: var(--hub-ref-color-white, #fff);--hub-table-filter-count-size: 1.25rem;--hub-table-filter-count-padding-x: .4em;--hub-table-filter-count-font-size: .7rem;--hub-table-filter-count-font-weight: 700;--hub-table-filter-count-border-radius: 50rem;--hub-table-batch-actions-btn-icon-gap: var(--hub-ref-space-1, .25rem);--hub-table-hover-bg: var(--hub-sys-state-hover-bg, rgba(0, 0, 0, .075));--hub-table-hover-color: var(--hub-sys-text-primary, #212529);--hub-table-striped-bg: var(--hub-sys-state-striped-bg, rgba(0, 0, 0, .05));--hub-table-striped-color: var(--hub-sys-text-primary, #212529)}:host{display:flex;flex-direction:column;gap:var(--hub-table-container-gap);min-width:0;color:var(--hub-table-container-color)}:host .hub-table__top-bar{display:flex;justify-content:var(--hub-table-top-bar-justify-content);align-items:var(--hub-table-top-bar-align-items);flex-wrap:var(--hub-table-top-bar-wrap);gap:var(--hub-table-top-bar-gap)}:host .hub-table__batch-actions{display:flex;align-items:center;gap:var(--hub-table-batch-actions-gap);margin-inline-end:var(--hub-table-batch-actions-margin-inline-end)}:host .hub-table__batch-actions-btn-icon{margin-right:var(--hub-table-batch-actions-btn-icon-gap)}:host .hub-table__batch-actions-btn--default,:host .hub-table__cell-btn--default{border:var(--hub-table-border-width) solid var(--hub-table-border-color);border-radius:var(--hub-table-border-radius)}:host .hub-table__search{display:flex;flex-wrap:nowrap;align-items:stretch;justify-content:end}:host .hub-table__search-input{position:relative;flex:1 1 auto;width:1%;min-width:0;display:block;width:100%;padding:var(--hub-table-search-input-padding-y) var(--hub-table-search-input-padding-x);font-size:var(--hub-table-search-input-font-size);font-weight:400;line-height:1.5;color:var(--hub-table-search-input-color);appearance:none;background-color:var(--hub-table-search-input-bg);background-clip:padding-box;border:var(--hub-table-search-border-width) solid var(--hub-table-search-input-border-color);border-radius:var(--hub-table-search-border-radius) 0 0 var(--hub-table-search-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}:host .hub-table__search-button{display:inline-flex;align-items:center;justify-content:center;min-width:var(--hub-table-search-button-min-width);color:var(--hub-table-search-button-color);background-color:var(--hub-table-search-button-bg);border-color:var(--hub-table-search-button-border-color);border-radius:0 var(--hub-table-search-border-radius) var(--hub-table-search-border-radius) 0}:host .hub-table__bottom-bar{display:flex;justify-content:var(--hub-table-bottom-bar-justify-content);align-items:var(--hub-table-bottom-bar-align-items);flex-wrap:var(--hub-table-bottom-bar-wrap);gap:var(--hub-table-bottom-bar-gap)}:host .hub-table__bottom-bar-paginator{order:var(--hub-table-bottom-bar-paginator-order);flex:var(--hub-table-bottom-bar-paginator-flex)}:host .hub-table__bottom-bar-settings{order:var(--hub-table-bottom-bar-settings-order);flex:var(--hub-table-bottom-bar-settings-flex);margin:0}:host .hub-table__bottom-bar-info{order:var(--hub-table-bottom-bar-info-order);flex:var(--hub-table-bottom-bar-info-flex);margin:0}:host .hub-table__paginator{overflow:auto;margin:0}:host .hub-table__filter-button{display:flex;flex-wrap:nowrap;align-items:center;gap:var(--hub-table-filter-button-gap);padding:var(--hub-table-filter-button-padding-y) var(--hub-table-filter-button-padding-x);cursor:pointer;border:var(--hub-table-filter-button-border-width) solid var(--hub-table-filter-button-border-color);border-radius:var(--hub-table-filter-button-border-radius);transition:var(--hub-table-filter-button-transition)}:host .hub-table__filter-button:hover{background-color:var(--hub-table-filter-button-hover-bg)}:host .hub-table__filter-button--active{background-color:var(--hub-table-filter-button-active-bg);border-color:var(--hub-table-filter-button-active-border-color)}:host .hub-table__filter-button--active .hub-table__filter-button-icon{color:var(--hub-table-filter-button-icon-active-color)}:host .hub-table__filter-button-icon{transition:color .2s ease;color:var(--hub-table-filter-button-icon-color)}:host .hub-table__filter-count{display:inline-flex;align-items:center;justify-content:center;min-width:var(--hub-table-filter-count-size);height:var(--hub-table-filter-count-size);padding:0 var(--hub-table-filter-count-padding-x);font-size:var(--hub-table-filter-count-font-size);font-weight:var(--hub-table-filter-count-font-weight);line-height:1;color:var(--hub-table-filter-count-color);text-align:center;white-space:nowrap;background-color:var(--hub-table-filter-count-bg);border-radius:var(--hub-table-filter-count-border-radius);animation:badge-appear .2s ease}:host .hub-table__no-data-icon{margin-right:1.5rem}:host .hub-table__header-icon{margin-right:.5rem}:host .hub-table__icon{display:inline-block;width:var(--hub-table-icon-size);height:var(--hub-table-icon-size);background-color:var(--hub-table-icon-color);-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;vertical-align:middle}:host .hub-table__icon--xs{--hub-table-icon-size: .75em}:host .hub-table__icon--sm{--hub-table-icon-size: .875em}:host .hub-table__icon--lg{--hub-table-icon-size: 1.33em}:host .hub-table__icon--2x{--hub-table-icon-size: 2em}:host .hub-table__icon--3x{--hub-table-icon-size: 3em}:host .hub-table__icon--4x{--hub-table-icon-size: 4em}:host .hub-table__icon--5x{--hub-table-icon-size: 5em}:host .hub-table__icon--search{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z'/%3E%3C/svg%3E\")}:host .hub-table__icon--filter{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M3.9 54.9C10.5 40.9 24.5 32 40 32H472c15.5 0 29.5 8.9 36.1 22.9s4.6 30.5-5.2 42.5L320 320.9V448c0 12.1-6.8 23.2-17.7 28.6s-23.8 4.3-33.5-3l-64-48c-8.1-6-12.8-15.5-12.8-25.6V320.9L9 97.3C-.7 85.4-2.8 68.8 3.9 54.9z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M3.9 54.9C10.5 40.9 24.5 32 40 32H472c15.5 0 29.5 8.9 36.1 22.9s4.6 30.5-5.2 42.5L320 320.9V448c0 12.1-6.8 23.2-17.7 28.6s-23.8 4.3-33.5-3l-64-48c-8.1-6-12.8-15.5-12.8-25.6V320.9L9 97.3C-.7 85.4-2.8 68.8 3.9 54.9z'/%3E%3C/svg%3E\")}:host .hub-table__icon--eraser{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 576 512'%3E%3Cpath d='M290.7 57.4L57.4 290.7c-25 25-25 65.5 0 90.5l80 80c12 12 28.3 18.7 45.3 18.7H288h9.4H512c17.7 0 32-14.3 32-32s-14.3-32-32-32H387.9L518.6 285.3c25-25 25-65.5 0-90.5L381.3 57.4c-25-25-65.5-25-90.5 0zM297.4 416H288l-105.4 0-80-80L227.3 211.3 364.7 348.7 297.4 416z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 576 512'%3E%3Cpath d='M290.7 57.4L57.4 290.7c-25 25-25 65.5 0 90.5l80 80c12 12 28.3 18.7 45.3 18.7H288h9.4H512c17.7 0 32-14.3 32-32s-14.3-32-32-32H387.9L518.6 285.3c25-25 25-65.5 0-90.5L381.3 57.4c-25-25-65.5-25-90.5 0zM297.4 416H288l-105.4 0-80-80L227.3 211.3 364.7 348.7 297.4 416z'/%3E%3C/svg%3E\")}:host .hub-table__icon--info{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM216 336h24V272H216c-13.3 0-24-10.7-24-24s10.7-24 24-24h48c13.3 0 24 10.7 24 24v88h8c13.3 0 24 10.7 24 24s-10.7 24-24 24H216c-13.3 0-24-10.7-24-24s10.7-24 24-24zm40-208a32 32 0 1 1 0 64 32 32 0 1 1 0-64z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM216 336h24V272H216c-13.3 0-24-10.7-24-24s10.7-24 24-24h48c13.3 0 24 10.7 24 24v88h8c13.3 0 24 10.7 24 24s-10.7 24-24 24H216c-13.3 0-24-10.7-24-24s10.7-24 24-24zm40-208a32 32 0 1 1 0 64 32 32 0 1 1 0-64z'/%3E%3C/svg%3E\");margin-right:1.5rem}:host .hub-table__icon--sort{-webkit-mask-image:var(--hub-table-icon-sort);mask-image:var(--hub-table-icon-sort)}:host .hub-table__icon--sort-up{-webkit-mask-image:var(--hub-table-icon-sort-up);mask-image:var(--hub-table-icon-sort-up)}:host .hub-table__icon--sort-down{-webkit-mask-image:var(--hub-table-icon-sort-down);mask-image:var(--hub-table-icon-sort-down)}:host .hub-table__icon--caret-up{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M182.6 137.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8H288c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-128-128z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M182.6 137.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8H288c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-128-128z'/%3E%3C/svg%3E\")}:host .hub-table__icon--caret-down{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M137.4 374.6c12.5 12.5 32.8 12.5 45.3 0l128-128c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8H32c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l128 128z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M137.4 374.6c12.5 12.5 32.8 12.5 45.3 0l128-128c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8H32c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l128 128z'/%3E%3C/svg%3E\")}:host .hub-table__icon--chevron-up{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M233.4 105.4c12.5-12.5 32.8-12.5 45.3 0l192 192c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L256 173.3 86.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l192-192z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M233.4 105.4c12.5-12.5 32.8-12.5 45.3 0l192 192c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L256 173.3 86.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l192-192z'/%3E%3C/svg%3E\")}:host .hub-table__icon--chevron-down{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M233.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5 12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L256 338.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M233.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5 12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L256 338.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z'/%3E%3C/svg%3E\")}:host .hub-table__icon--chevron-left{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z'/%3E%3C/svg%3E\")}:host .hub-table__icon--chevron-right{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M310.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L242.7 256 105.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M310.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L242.7 256 105.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z'/%3E%3C/svg%3E\")}:host .hub-table__icon--angle-left{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z'/%3E%3C/svg%3E\")}:host .hub-table__icon--angle-right{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z'/%3E%3C/svg%3E\")}:host .hub-table__icon--angle-double-left{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160zm352-160l-160 160c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L301.3 256 438.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160zm352-160l-160 160c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L301.3 256 438.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0z'/%3E%3C/svg%3E\")}:host .hub-table__icon--angle-double-right{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M470.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L402.7 256 265.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160zm-352 160l160-160c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L210.7 256 73.4 393.4c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M470.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L402.7 256 265.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160zm-352 160l160-160c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L210.7 256 73.4 393.4c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0z'/%3E%3C/svg%3E\")}:host .hub-table__icon--ellipsis-v{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 128 512'%3E%3Cpath d='M64 360a56 56 0 1 0 0 112 56 56 0 1 0 0-112zm0-160a56 56 0 1 0 0 112 56 56 0 1 0 0-112zM120 96A56 56 0 1 0 8 96a56 56 0 1 0 112 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 128 512'%3E%3Cpath d='M64 360a56 56 0 1 0 0 112 56 56 0 1 0 0-112zm0-160a56 56 0 1 0 0 112 56 56 0 1 0 0-112zM120 96A56 56 0 1 0 8 96a56 56 0 1 0 112 0z'/%3E%3C/svg%3E\")}:host .hub-table__icon--trash{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3Cpath d='M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3Cpath d='M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z'/%3E%3C/svg%3E\");margin-right:.5rem}:host .hub-table__icon--plus{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3Cpath d='M256 80c0-17.7-14.3-32-32-32s-32 14.3-32 32V224H48c-17.7 0-32 14.3-32 32s14.3 32 32 32H192V432c0 17.7 14.3 32 32 32s32-14.3 32-32V288H400c17.7 0 32-14.3 32-32s-14.3-32-32-32H256V80z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3Cpath d='M256 80c0-17.7-14.3-32-32-32s-32 14.3-32 32V224H48c-17.7 0-32 14.3-32 32s14.3 32 32 32H192V432c0 17.7 14.3 32 32 32s32-14.3 32-32V288H400c17.7 0 32-14.3 32-32s-14.3-32-32-32H256V80z'/%3E%3C/svg%3E\");margin-right:.5rem}:host .hub-table__container{overflow:auto;background-color:var(--hub-table-container-bg);border:var(--hub-table-border-width) solid var(--hub-table-border-color);border-radius:var(--hub-table-border-radius);color:var(--hub-table-container-color)}:host .hub-table__element{position:relative;width:100%;border-collapse:collapse;border-spacing:0;vertical-align:var(--hub-table-cell-vertical-align);border-color:var(--hub-table-border-color);background-color:var(--hub-table-bg);color:var(--hub-table-color)}:host .hub-table__element .sticky-start{background-color:var(--hub-table-bg);left:0;position:sticky;z-index:9}:host .hub-table__element .sticky-end{background-color:var(--hub-table-bg);right:0;position:sticky;z-index:9}:host .hub-table__element .clickable-item{cursor:pointer}:host .hub-table__element>:not(caption)>*>*{padding:var(--hub-table-cell-padding-y) var(--hub-table-cell-padding-x);vertical-align:var(--hub-table-cell-vertical-align);color:var(--hub-table-color-state, var(--hub-table-color-type, var(--hub-table-color)));background-color:var(--hub-table-bg);border-bottom-style:solid;border-bottom-color:var(--hub-table-border-color);border-bottom-width:var(--hub-table-border-width);box-shadow:inset 0 0 0 9999px var(--hub-table-bg-state, var(--hub-table-bg-type, var(--hub-table-accent-bg)))}:host .hub-table__element>tbody{vertical-align:inherit}:host .hub-table__element>thead{vertical-align:bottom}:host .hub-table__scrollable thead{position:sticky;top:0;z-index:10}:host .hub-table__group-divider{border-top:calc(var(--hub-table-border-width) * 2) solid var(--hub-table-group-separator-color)}:host .hub-table__sm>:not(caption)>*>*{padding:var(--hub-table-cell-padding-y-sm) var(--hub-table-cell-padding-x-sm)}:host .hub-table__bordered>:not(caption)>*{border-style:solid;border-width:var(--hub-table-border-width) 0}:host .hub-table__bordered>:not(caption)>*>*{border-style:solid;border-width:0 var(--hub-table-border-width)}:host .hub-table__borderless>:not(caption)>*>*{border-bottom-width:0}:host .hub-table__borderless>:not(:first-child){border-top-width:0}:host .hub-table__striped-odd>tbody>tr:nth-of-type(odd)>*{color:var(--hub-table-striped-color);background-color:var(--hub-table-striped-bg)}:host .hub-table__striped-even>tbody>tr:nth-of-type(2n)>*{color:var(--hub-table-striped-color);background-color:var(--hub-table-striped-bg)}:host .hub-table__striped-columns-odd>:not(caption)>tr>:nth-child(odd){color:var(--hub-table-striped-color);background-color:var(--hub-table-striped-bg)}:host .hub-table__striped-columns-even>:not(caption)>tr>:nth-child(2n){color:var(--hub-table-striped-color);background-color:var(--hub-table-striped-bg)}:host .hub-table__active{--hub-table-color-state: var(--hub-table-active-color);--hub-table-bg-state: var(--hub-table-active-bg)}:host .hub-table__hover>tbody>tr:hover>*{--hub-table-color-state: var(--hub-table-hover-color);--hub-table-bg-state: var(--hub-table-hover-bg)}:host .hub-table__responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}:host.hub-table--rtl{direction:rtl}:host.hub-table--rtl .hub-table__top-bar{direction:ltr}:host.hub-table--rtl .hub-table__batch-actions{order:2;flex-direction:row-reverse;margin-inline-end:0;margin-inline-start:auto}:host.hub-table--rtl .hub-table__batch-actions-btn-icon{margin-right:0;margin-left:var(--hub-table-batch-actions-btn-icon-gap)}:host.hub-table--rtl .hub-table__search{order:1;margin-inline-end:auto;margin-inline-start:0;direction:ltr}:host.hub-table--rtl .hub-table__search-input{direction:ltr;text-align:right;border-radius:0 var(--hub-table-search-border-radius) var(--hub-table-search-border-radius) 0}:host.hub-table--rtl .hub-table__search-button{border-radius:var(--hub-table-search-border-radius) 0 0 var(--hub-table-search-border-radius)}:host.hub-table--rtl .hub-table__no-data-icon{margin-right:0;margin-left:1.5rem}:host.hub-table--rtl .hub-table__header-icon{margin-right:0;margin-left:.5rem}.caption-top{caption-side:top}@media(max-width:576px){.hub-table__responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width:768px){.hub-table__responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width:992px){.hub-table__responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width:1200px){.hub-table__responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width:1400px){.hub-table__responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@keyframes badge-appear{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}\n"] }]
|
|
4680
|
+
}, template: "@if (batchActions().length || searchable() || headerFilters().length) {\n\t<div class=\"hub-table__top-bar\">\n\t\t@if (batchActions().length) {\n\t\t\t<div class=\"hub-table__batch-actions\">\n\t\t\t\t@for (button of batchActions(); track $index) {\n\t\t\t\t\t@if ($any(button).buttons?.length) {\n\t\t\t\t\t\t<hub-table-dropdown\n\t\t\t\t\t\t\tclass=\"hub-table__batch-actions-dropdown\"\n\t\t\t\t\t\t\t[options]=\"$any(button)\"\n\t\t\t\t\t\t\t[disabled]=\"!value.length\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t</hub-table-dropdown>\n\t\t\t\t\t} @else {\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tclass=\"hub-table__batch-actions-btn\"\n\t\t\t\t\t\t\t[ngClass]=\"getBatchActionClassList(button)\"\n\t\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\t\t(click)=\"handleBatchAction(button)\"\n\t\t\t\t\t\t\t[disabled]=\"!value.length\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t@if (button.icon) {\n\t\t\t\t\t\t\t\t<i class=\"hub-table__batch-actions-btn-icon {{ button.icon }}\"></i>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (button.title) {\n\t\t\t\t\t\t\t\t<span class=\"hub-table__batch-actions-btn-title\">{{ button.title | unwrapAsync }}</span>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\t\t@if (searchable()) {\n\t\t\t<div class=\"hub-table__search\">\n\t\t\t\t@if (isRtl()) {\n\t\t\t\t\t<button\n\t\t\t\t\t\tclass=\"hub-table__search-button btn btn-outline-dark\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t[attr.aria-label]=\"'SEARCH' | translate | ucfirst\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<i class=\"hub-table__search-icon hub-table__icon hub-table__icon--search\" aria-hidden=\"true\"></i>\n\t\t\t\t\t</button>\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tclass=\"hub-table__search-input\"\n\t\t\t\t\t\t(input)=\"searchProxy$.next($any($event.target).value)\"\n\t\t\t\t\t\t[value]=\"searchTerm()\"\n\t\t\t\t\t\t[attr.placeholder]=\"'SEARCH' | translate | ucfirst\"\n\t\t\t\t\t\t[attr.aria-label]=\"'SEARCH' | translate | ucfirst\"\n\t\t\t\t\t/>\n\t\t\t\t} @else {\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tclass=\"hub-table__search-input\"\n\t\t\t\t\t\t(input)=\"searchProxy$.next($any($event.target).value)\"\n\t\t\t\t\t\t[value]=\"searchTerm()\"\n\t\t\t\t\t\t[attr.placeholder]=\"'SEARCH' | translate | ucfirst\"\n\t\t\t\t\t\t[attr.aria-label]=\"'SEARCH' | translate | ucfirst\"\n\t\t\t\t\t/>\n\t\t\t\t\t<button\n\t\t\t\t\t\tclass=\"hub-table__search-button btn btn-outline-dark\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t[attr.aria-label]=\"'SEARCH' | translate | ucfirst\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<i class=\"hub-table__search-icon hub-table__icon hub-table__icon--search\" aria-hidden=\"true\"></i>\n\t\t\t\t\t</button>\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\t\t@if (headerFilters().length) {\n\t\t\t<div class=\"hub-table__delete-filters\">\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"hub-table__delete-filters-btn btn btn-outline-danger\"\n\t\t\t\t\t(click)=\"clearFilters()\"\n\t\t\t\t\t[disabled]=\"filterLoading\"\n\t\t\t\t>\n\t\t\t\t\t<i class=\"hub-table__delete-filters-icon hub-table__icon hub-table__icon--eraser\"></i>\n\t\t\t\t\t{{ 'CLEAN_FILTERS' | translate | ucfirst }}\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t}\n\t</div>\n}\n\n<div class=\"hub-table__container {{ responsiveCSSClass() }}\" [class.hub-table__responsive]=\"responsiveCSSClass()\">\n\t@let striped = options().striped;\n\t<table\n\t\tclass=\"hub-table__element\"\n\t\t[class.hub-table__hover]=\"(options().hoverableRows || selectable()) && !loading()\"\n\t\t[class.hub-table__striped-odd]=\"striped === 'rows-odd'\"\n\t\t[class.hub-table__striped-even]=\"striped === 'rows-even'\"\n\t\t[class.hub-table__striped-columns-odd]=\"striped === 'columns-odd'\"\n\t\t[class.hub-table__striped-columns-even]=\"striped === 'columns-even'\"\n\t\t[class.hub-table__selectable]=\"selectable()\"\n\t\t[class.hub-table__scrollable]=\"options().scrollable\"\n\t\t[ngClass]=\"options().variant ? 'hub-table__' + options().variant : null\"\n\t>\n\t\t<thead class=\"hub-table__head\" [formGroup]=\"filtersFG\">\n\t\t\t<tr class=\"hub-table__head-row\">\n\t\t\t\t@if (selectable()) {\n\t\t\t\t\t<th class=\"hub-table__header-cell hub-table__header-cell--actions sticky-start\">\n\t\t\t\t\t\t@if (multipleSelectable()) {\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\t[(ngModel)]=\"allRowsSelected\"\n\t\t\t\t\t\t\t\t[ngModelOptions]=\"{ standalone: true }\"\n\t\t\t\t\t\t\t\t(click)=\"toggleAll()\"\n\t\t\t\t\t\t\t\t[disabled]=\"disabled\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t}\n\t\t\t\t\t</th>\n\t\t\t\t}\n\t\t\t\t@for (header of fixedHeaders(); track header.property) {\n\t\t\t\t\t@if (!(isColumnHidden(header) | async)) {\n\t\t\t\t\t\t<th\n\t\t\t\t\t\t\tclass=\"hub-table__header-cell\"\n\t\t\t\t\t\t\tresizable\n\t\t\t\t\t\t\t[class.sticky-start]=\"header.sticky === 'start'\"\n\t\t\t\t\t\t\t[class.sticky-end]=\"header.sticky === 'end'\"\n\t\t\t\t\t\t\t[class.text-start]=\"header.align === 'start'\"\n\t\t\t\t\t\t\t[class.text-end]=\"header.align === 'end'\"\n\t\t\t\t\t\t\t[class.text-center]=\"header.align === 'center'\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"hub-table__header-cell-content d-flex flex-nowrap align-items-center justify-content-between gap-2\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"getHeaderTemplate(header) || defaultHeaderTpt\"\n\t\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{\n\t\t\t\t\t\t\t\t\t\theader,\n\t\t\t\t\t\t\t\t\t\tproperty: header | get: header.property\n\t\t\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t\t@if (header.sortable || header.filter?.mode === 'menu') {\n\t\t\t\t\t\t\t\t\t<div class=\"hub-table__header-cell-actions d-flex gap-2 ms-auto align-items-center\">\n\t\t\t\t\t\t\t\t\t\t<button class=\"hub-table__sort-btn btn\" (click)=\"sort(header)\">\n\t\t\t\t\t\t\t\t\t\t\t@if (header.sortable) {\n\t\t\t\t\t\t\t\t\t\t\t\t<i\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-table__sort-icon hub-table__icon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"getOrdenationClass(header)\"\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\t\t\t></i>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t@if (header.filter?.mode === 'menu') {\n\t\t\t\t\t\t\t\t\t\t\t<hub-dropdown\n\t\t\t\t\t\t\t\t\t\t\t\t#dropdown\n\t\t\t\t\t\t\t\t\t\t\t\t(open)=\"onDropdownFilterOpened($event)\"\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-table__filter-dropdown\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-table__filter-button button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t[class.hub-table__filter-button--active]=\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfiltersFG.get(header.filter.key || header.property)?.value?.rules\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t?.length\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<i\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-table__filter-button-icon hub-table__icon hub-table__icon--filter\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t></i>\n\t\t\t\t\t\t\t\t\t\t\t\t\t@if (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfiltersFG.get(header.filter.key || header.property)?.value?.rules;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tas rules\n\t\t\t\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t@if (rules.length) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"hub-table__filter-count\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{ rules.length }}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t@if (dropdown.isOpened()) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t<menu-filter\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"hub-table__filter-dropdown-content content\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[header]=\"header\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[formControlName]=\"header.filter.key || header.property\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</menu-filter>\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t</hub-dropdown>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t@if (templateExpandingRows().length) {\n\t\t\t\t\t<th class=\"hub-table__header-cell hub-table__header-cell--expander sticky-end\"></th>\n\t\t\t\t}\n\t\t\t</tr>\n\n\t\t\t<!-- Filtering -->\n\t\t\t@if (hasColumnFilters()) {\n\t\t\t\t<tr class=\"hub-table__filter-row\">\n\t\t\t\t\t@if (selectable() || batchActions.length) {\n\t\t\t\t\t\t<th class=\"hub-table__filter-cell sticky-start\"></th>\n\t\t\t\t\t}\n\t\t\t\t\t@for (header of fixedHeaders(); track $index; let last = $last) {\n\t\t\t\t\t\t@if (!(isColumnHidden(header) | async)) {\n\t\t\t\t\t\t\t@let formControlName = header.filter?.key || header.property;\n\t\t\t\t\t\t\t<th\n\t\t\t\t\t\t\t\tclass=\"hub-table__filter-cell\"\n\t\t\t\t\t\t\t\t[class.sticky-start]=\"header.sticky === 'start'\"\n\t\t\t\t\t\t\t\t[class.sticky-end]=\"header.sticky === 'end'\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t@if (header.filter && header.filter.mode !== 'menu' && filtersFG.get(formControlName)) {\n\t\t\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"getFilterTemplate(header) || defaultFilterTpt\"\n\t\t\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{\n\t\t\t\t\t\t\t\t\t\t\theader: header,\n\t\t\t\t\t\t\t\t\t\t\tformControl: filtersFG.get(formControlName)\n\t\t\t\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</th>\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t</tr>\n\t\t\t}\n\t\t</thead>\n\t\t<tbody class=\"hub-table__body\">\n\t\t\t@if (loading()) {\n\t\t\t\t<tr class=\"hub-table__body-row\">\n\t\t\t\t\t<td class=\"hub-table__cell\" [attr.colspan]=\"headersCount()\">\n\t\t\t\t\t\t<hub-state-outlet\n\t\t\t\t\t\t\t[template]=\"loadingTpt()\"\n\t\t\t\t\t\t\t[instanceDefault]=\"loadingComponent()\"\n\t\t\t\t\t\t\t[globalDefault]=\"defaults.loading()\"\n\t\t\t\t\t\t\t[fallback]=\"defaultLoadingTpt\"\n\t\t\t\t\t\t\t[context]=\"{ colspan: headersCount() }\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t} @else if (error()) {\n\t\t\t\t<tr class=\"hub-table__body-row\">\n\t\t\t\t\t<td class=\"hub-table__cell\" [attr.colspan]=\"headersCount()\">\n\t\t\t\t\t\t<hub-state-outlet\n\t\t\t\t\t\t\t[template]=\"errorTpt()\"\n\t\t\t\t\t\t\t[instanceDefault]=\"errorComponent()\"\n\t\t\t\t\t\t\t[globalDefault]=\"defaults.error()\"\n\t\t\t\t\t\t\t[fallback]=\"defaultErrorTpt\"\n\t\t\t\t\t\t\t[context]=\"{ error: error(), colspan: headersCount() }\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t} @else if (rows().length) {\n\t\t\t\t@for (item of rows(); track $index) {\n\t\t\t\t\t<ng-container\n\t\t\t\t\t\t[ngTemplateOutlet]=\"templateRow() || defaultRowTemplate\"\n\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: item }\"\n\t\t\t\t\t>\n\t\t\t\t\t</ng-container>\n\t\t\t\t}\n\t\t\t} @else {\n\t\t\t\t<tr>\n\t\t\t\t\t<td [attr.colspan]=\"headersCount()\">\n\t\t\t\t\t\t<hub-state-outlet\n\t\t\t\t\t\t\t[template]=\"noResultsTpt()\"\n\t\t\t\t\t\t\t[instanceDefault]=\"noResultsComponent()\"\n\t\t\t\t\t\t\t[globalDefault]=\"defaults.noResults()\"\n\t\t\t\t\t\t\t[fallback]=\"defaultNoResultsTpt\"\n\t\t\t\t\t\t\t[context]=\"{ colspan: headersCount(), filters: filters() ?? undefined }\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t}\n\t\t</tbody>\n\t</table>\n</div>\n\n<!-- Pagination -->\n@if (page() !== undefined && page() !== null) {\n\t<div class=\"hub-table__bottom-bar\">\n\t\t@if (paginationPosition() == 'bottom' || paginationPosition() === 'both') {\n\t\t\t<hub-paginator\n\t\t\t\tclass=\"hub-table__paginator hub-table__bottom-bar-paginator\"\n\t\t\t\t[(page)]=\"$any(page)\"\n\t\t\t\t[numberOfPages]=\"numberOfPages()\"\n\t\t\t\t[rtl]=\"isRtl()\"\n\t\t\t>\n\t\t\t</hub-paginator>\n\t\t}\n\t\t<div class=\"hub-table__bottom-bar-settings hub-paginator__settings\">\n\t\t\t<label class=\"hub-paginator__label\"> {{ 'ROWS_PER_PAGE' | translate | ucfirst }}: </label>\n\t\t\t<select\n\t\t\t\tclass=\"hub-paginator__select\"\n\t\t\t\t[ngModel]=\"perPage()\"\n\t\t\t\t(ngModelChange)=\"perPage.set($event)\"\n\t\t\t\t[ngModelOptions]=\"{ standalone: true }\"\n\t\t\t>\n\t\t\t\t@for (option of perPageOptions(); track option) {\n\t\t\t\t\t<option [ngValue]=\"option\" class=\"hub-paginator__select-option\">\n\t\t\t\t\t\t{{ option }}\n\t\t\t\t\t</option>\n\t\t\t\t}\n\t\t\t</select>\n\t\t</div>\n\t\t@if (totalItems() !== null && totalItems() !== undefined) {\n\t\t\t<p class=\"hub-table__bottom-bar-info hub-paginator__info\">\n\t\t\t\t{{\n\t\t\t\t\t'SHOWING_X_OF_Y_ROWS'\n\t\t\t\t\t\t| translate\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\tamount: rows().length,\n\t\t\t\t\t\t\t\t\ttotal: totalItems()\n\t\t\t\t\t\t\t }\n\t\t\t\t\t\t| ucfirst\n\t\t\t\t}}\n\t\t\t</p>\n\t\t}\n\t</div>\n}\n<ng-template #defaultRowTemplate let-item>\n\t<tr\n\t\tclass=\"hub-table__body-row\"\n\t\t(click)=\"onItemClick($event, item)\"\n\t\t[class.hub-table__body-row--selected]=\"selectable() && item.selected\"\n\t\t[class.hub-table__body-row--clickable]=\"clickFn()\"\n\t\t[ngClass]=\"_getRowClass(item)\"\n\t>\n\t\t@if (selectable() || batchActions.length) {\n\t\t\t<td class=\"hub-table__cell hub-table__cell--select sticky-start\">\n\t\t\t\t<input\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t[(ngModel)]=\"item.selected\"\n\t\t\t\t\t[ngModelOptions]=\"{ standalone: true }\"\n\t\t\t\t\t(click)=\"$event.stopPropagation(); toggle(item)\"\n\t\t\t\t/>\n\t\t\t</td>\n\t\t}\n\t\t@for (header of fixedHeaders(); track $index) {\n\t\t\t@if (!(isColumnHidden(header) | async)) {\n\t\t\t\t<td\n\t\t\t\t\tclass=\"hub-table__cell\"\n\t\t\t\t\t[class.sticky-start]=\"header.sticky === 'start'\"\n\t\t\t\t\t[class.sticky-end]=\"header.sticky === 'end'\"\n\t\t\t\t\t[class.text-start]=\"header.align === 'start'\"\n\t\t\t\t\t[class.text-end]=\"header.align === 'end'\"\n\t\t\t\t\t[class.text-center]=\"header.align === 'center'\"\n\t\t\t\t\t[style.width]=\"header.buttons?.length ? '0' : 'auto'\"\n\t\t\t\t>\n\t\t\t\t\t<ng-container\n\t\t\t\t\t\t[ngTemplateOutlet]=\"getCellTemplate(header) || defaultCellTpt\"\n\t\t\t\t\t\t[ngTemplateOutletContext]=\"{\n\t\t\t\t\t\t\theader: header,\n\t\t\t\t\t\t\titem: item.data,\n\t\t\t\t\t\t\trow: item,\n\t\t\t\t\t\t\tproperty: item.data | get: header.property\n\t\t\t\t\t\t}\"\n\t\t\t\t\t>\n\t\t\t\t\t</ng-container>\n\t\t\t\t</td>\n\t\t\t}\n\t\t}\n\t\t@if (templateExpandingRows().length) {\n\t\t\t<td class=\"hub-table__cell hub-table__cell--expander sticky-end\" [class.sticky-end]=\"stickyActions()\">\n\t\t\t\t@if (templateExpandingRows().length) {\n\t\t\t\t\t<button (click)=\"toggleExpandedRow(item)\" type=\"button\" class=\"hub-table__expander-btn btn btn-link px-2\">\n\t\t\t\t\t\t<i\n\t\t\t\t\t\t\tclass=\"hub-table__expander-icon hub-table__icon\"\n\t\t\t\t\t\t\t[class.hub-table__icon--caret-up]=\"!item.collapsed\"\n\t\t\t\t\t\t\t[class.hub-table__icon--caret-down]=\"item.collapsed\"\n\t\t\t\t\t\t></i>\n\t\t\t\t\t</button>\n\t\t\t\t}\n\t\t\t</td>\n\t\t}\n\t\t<!-- <td *ngIf=\"!lastColumnOnlyHasButtons && filterHeaders?.length\"></td> -->\n\t</tr>\n\t@if (!item.collapsed) {\n\t\t@for (template of templateExpandingRows(); track template) {\n\t\t\t<ng-container [ngTemplateOutlet]=\"template.templateRef\" [ngTemplateOutletContext]=\"{ item: item }\"> </ng-container>\n\t\t}\n\t}\n</ng-template>\n\n<ng-template #defaultNoResultsTpt>\n\t<div class=\"hub-table__no-data alert alert-info d-flex align-items-center m-4\" role=\"alert\">\n\t\t<i class=\"hub-table__no-data-icon hub-table__icon hub-table__icon--info hub-table__icon--2x\" aria-hidden=\"true\"></i>\n\t\t{{ 'NO_RESULTS_FOUND' | translate | ucfirst }}\n\t</div>\n</ng-template>\n\n<ng-template #defaultLoadingTpt>\n\t<div class=\"hub-table__loading\">\n\t\t<svg\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\txmlns:xlink=\"http://www.w3.org/1999/xlink\"\n\t\t\tstyle=\"margin: auto; background: #fff; display: block\"\n\t\t\twidth=\"200px\"\n\t\t\theight=\"200px\"\n\t\t\tviewBox=\"0 0 100 100\"\n\t\t\tpreserveAspectRatio=\"xMidYMid\"\n\t\t>\n\t\t\t<circle cx=\"50\" cy=\"50\" r=\"0\" fill=\"none\" stroke=\"#cccccc\" stroke-width=\"1\">\n\t\t\t\t<animate\n\t\t\t\t\tattributeName=\"r\"\n\t\t\t\t\trepeatCount=\"indefinite\"\n\t\t\t\t\tdur=\"1.6666666666666667s\"\n\t\t\t\t\tvalues=\"0;40\"\n\t\t\t\t\tkeyTimes=\"0;1\"\n\t\t\t\t\tkeySplines=\"0 0.2 0.8 1\"\n\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t></animate>\n\t\t\t\t<animate\n\t\t\t\t\tattributeName=\"opacity\"\n\t\t\t\t\trepeatCount=\"indefinite\"\n\t\t\t\t\tdur=\"1.6666666666666667s\"\n\t\t\t\t\tvalues=\"1;0\"\n\t\t\t\t\tkeyTimes=\"0;1\"\n\t\t\t\t\tkeySplines=\"0.2 0 0.8 1\"\n\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t></animate>\n\t\t\t</circle>\n\t\t\t<circle cx=\"50\" cy=\"50\" r=\"0\" fill=\"none\" stroke=\"#333333\" stroke-width=\"1\">\n\t\t\t\t<animate\n\t\t\t\t\tattributeName=\"r\"\n\t\t\t\t\trepeatCount=\"indefinite\"\n\t\t\t\t\tdur=\"1.6666666666666667s\"\n\t\t\t\t\tvalues=\"0;40\"\n\t\t\t\t\tkeyTimes=\"0;1\"\n\t\t\t\t\tkeySplines=\"0 0.2 0.8 1\"\n\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\tbegin=\"-0.8333333333333334s\"\n\t\t\t\t></animate>\n\t\t\t\t<animate\n\t\t\t\t\tattributeName=\"opacity\"\n\t\t\t\t\trepeatCount=\"indefinite\"\n\t\t\t\t\tdur=\"1.6666666666666667s\"\n\t\t\t\t\tvalues=\"1;0\"\n\t\t\t\t\tkeyTimes=\"0;1\"\n\t\t\t\t\tkeySplines=\"0.2 0 0.8 1\"\n\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\tbegin=\"-0.8333333333333334s\"\n\t\t\t\t></animate>\n\t\t\t</circle>\n\t\t</svg>\n\t</div>\n</ng-template>\n\n<ng-template #defaultErrorTpt>\n\t<div class=\"hub-table__error m-4 p-4 text-center text-danger\">\n\t\t<svg\n\t\t\taria-hidden=\"true\"\n\t\t\tfocusable=\"false\"\n\t\t\tdata-prefix=\"fal\"\n\t\t\tdata-icon=\"sad-tear\"\n\t\t\trole=\"img\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\tviewBox=\"0 0 496 512\"\n\t\t\tstyle=\"height: 64px\"\n\t\t>\n\t\t\t<path\n\t\t\t\tfill=\"#dc3545\"\n\t\t\t\td=\"M168 240c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 464c-119.1 0-216-96.9-216-216S128.9 40 248 40s216 96.9 216 216-96.9 216-216 216zm0-152c-11.2 0-22 1.7-32.7 4.1-7.2-12.6-16.1-26.5-28.1-42.4-9-12.1-29.4-12-38.4 0-29.7 39.6-44.8 69-44.8 87.3 0 34.7 28.7 63 64 63s64-28.3 64-63c0-4.4-1-9.5-2.7-15.1 6.1-1.2 12.3-1.9 18.7-1.9 34.9 0 67.8 15.4 90.2 42.2 5.3 6.4 15.4 8 22.5 2 6.8-5.7 7.7-15.8 2-22.5C334.2 339.6 292.4 320 248 320zm-80 80c-17.7 0-32-13.9-32-31 0-7.7 10-28.8 32-59.5 22 30.7 32 51.8 32 59.5 0 17.1-14.3 31-32 31z\"\n\t\t\t\tclass=\"\"\n\t\t\t></path>\n\t\t</svg>\n\t\t<p>{{ 'ERROR_OCURRED' | translate }}</p>\n\t</div>\n</ng-template>\n\n<ng-template #defaultHeaderTpt let-header=\"header\" let-property=\"property\">\n\t@if (header.icon) {\n\t\t<i class=\"hub-table__header-icon {{ header.icon }}\" aria-hidden=\"true\"></i>\n\t}\n\t<div\n\t\tclass=\"hub-table__header-title\"\n\t\t[class.me-auto]=\"header.align === 'start'\"\n\t\t[class.ms-auto]=\"header.align === 'end'\"\n\t\t[class.mx-auto]=\"header.align === 'center'\"\n\t>\n\t\t@if (header.title) {\n\t\t\t<span class=\"hub-table__header-title-text text-wrap\">{{ header.title ?? header.property | unwrapAsync }}</span>\n\t\t}\n\t</div>\n</ng-template>\n\n<ng-template #defaultFilterTpt let-header=\"header\" let-formControl=\"formControl\">\n\t@switch (header.filter.type) {\n\t\t@case ('dropdown') {\n\t\t\t<select [formControl]=\"formControl\" class=\"form-select form-control\">\n\t\t\t\t@if (header.filter.placeholder) {\n\t\t\t\t\t<option [ngValue]=\"null\">\n\t\t\t\t\t\t{{ header.filter.placeholder }}\n\t\t\t\t\t</option>\n\t\t\t\t}\n\t\t\t\t@if (header.filter.options | isObservable) {\n\t\t\t\t\t@let options = header.filter.options | async;\n\t\t\t\t\t@for (option of $any(options); track option) {\n\t\t\t\t\t\t<option [value]=\"option[header.filter.bindValue || 'id']\">\n\t\t\t\t\t\t\t{{ option[header.filter.bindLabel || 'name'] }}\n\t\t\t\t\t\t</option>\n\t\t\t\t\t}\n\t\t\t\t} @else {\n\t\t\t\t\t@for (option of header.filter.options; track option) {\n\t\t\t\t\t\t<option [value]=\"option[header.filter.bindValue || 'id']\">\n\t\t\t\t\t\t\t{{ option[header.filter.bindLabel || 'name'] }}\n\t\t\t\t\t\t</option>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t</select>\n\t\t}\n\t\t@case ('number-range') {\n\t\t\t<hub-table-range-input type=\"number\" [formControl]=\"formControl\"> </hub-table-range-input>\n\t\t}\n\t\t@case ('date-range') {\n\t\t\t<hub-table-range-input type=\"date\" [formControl]=\"formControl\"> </hub-table-range-input>\n\t\t}\n\t\t@case ('boolean') {\n\t\t\t<select [formControl]=\"formControl\" class=\"form-select form-control\">\n\t\t\t\t<option [ngValue]=\"null\">\n\t\t\t\t\t{{ header.filter.placeholder ?? 'SELECT_ONE' | translate | ucfirst }}\n\t\t\t\t</option>\n\t\t\t\t<option [ngValue]=\"true\">\n\t\t\t\t\t{{ header.filter.trueLabel ?? ('TRUE' | translate | ucfirst) }}\n\t\t\t\t</option>\n\t\t\t\t<option [ngValue]=\"false\">\n\t\t\t\t\t{{ header.filter.falseLabel ?? ('FALSE' | translate | ucfirst) }}\n\t\t\t\t</option>\n\t\t\t</select>\n\t\t}\n\t\t@default {\n\t\t\t<input\n\t\t\t\t[type]=\"header.filter.type\"\n\t\t\t\t[formControl]=\"formControl\"\n\t\t\t\tclass=\"form-control\"\n\t\t\t\t[placeholder]=\"header.filter.placeholder || ''\"\n\t\t\t/>\n\t\t}\n\t}\n</ng-template>\n\n<ng-template #defaultCellTpt let-property=\"property\" let-item=\"item\" let-row=\"row\" let-header=\"header\">\n\t@if (header.buttons) {\n\t\t<div class=\"hub-table__cell-buttons d-flex flex-nowrap gap-2 justify-content-end align-items-center\">\n\t\t\t@for (button of header.buttons; track button) {\n\t\t\t\t@if (button.buttons) {\n\t\t\t\t\t<hub-table-dropdown [options]=\"button\" [row]=\"row\" class=\"hub-table__cell-dropdown d-inline-block\">\n\t\t\t\t\t</hub-table-dropdown>\n\t\t\t\t} @else {\n\t\t\t\t\t@if (!(isHidden(button, row) | async)) {\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclass=\"hub-table__cell-btn\"\n\t\t\t\t\t\t\t[attr.title]=\"button.tooltip | unwrapAsync\"\n\t\t\t\t\t\t\t(click)=\"handleAction($event, button, row)\"\n\t\t\t\t\t\t\t[ngClass]=\"getRowActionClassList(button)\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div class=\"hub-table__cell-btn-content d-flex flex-nowrap align-items-center gap-1\">\n\t\t\t\t\t\t\t\t<ng-hub-ui-icon [config]=\"button.icon\"></ng-hub-ui-icon>\n\t\t\t\t\t\t\t\t@if (button.label) {\n\t\t\t\t\t\t\t\t\t<span class=\"hub-table__cell-btn-label\">{{ button.label | unwrapAsync }}</span>\n\t\t\t\t\t\t\t\t} @else if (button.title) {\n\t\t\t\t\t\t\t\t\t<span class=\"hub-table__cell-btn-label\">{{ button.title | unwrapAsync }}</span>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t</div>\n\t} @else {\n\t\t<span class=\"hub-table__cell-value\">{{ property }}</span>\n\t}\n</ng-template>\n", styles: [":root,:host{--hub-table-container-bg: var(--hub-ref-color-white, #fff);--hub-table-container-color: var(--hub-sys-text-primary, #212529);--hub-table-border-color: var(--hub-sys-border-color-default, #dee2e6);--hub-table-border-radius: var(--hub-ref-radius-md, .375rem);--hub-table-border-width: var(--hub-ref-border-width, 1px);--hub-table-container-gap: var(--hub-ref-space-3, 1rem);--hub-table-top-bar-gap: var(--hub-ref-space-3, 1rem);--hub-table-top-bar-justify-content: end;--hub-table-top-bar-align-items: center;--hub-table-top-bar-wrap: wrap;--hub-table-batch-actions-gap: var(--hub-ref-space-2, .5rem);--hub-table-batch-actions-margin-inline-end: auto;--hub-table-bottom-bar-gap: var(--hub-ref-space-3, 1rem);--hub-table-bottom-bar-justify-content: space-around;--hub-table-bottom-bar-align-items: center;--hub-table-bottom-bar-wrap: wrap;--hub-table-bottom-bar-paginator-order: 1;--hub-table-bottom-bar-settings-order: 2;--hub-table-bottom-bar-info-order: 3;--hub-table-bottom-bar-paginator-flex: 0 0 auto;--hub-table-bottom-bar-settings-flex: 0 0 auto;--hub-table-bottom-bar-info-flex: 0 0 auto;--hub-table-icon-color: currentColor;--hub-table-icon-size: 1em;--hub-table-icon-sort: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M137.4 41.4c12.5-12.5 32.8-12.5 45.3 0l128 128c9.2 9.2 11.9 22.9 6.9 34.9s-16.6 19.8-29.6 19.8H32c-12.9 0-24.6-7.8-29.6-19.8s-2.2-25.7 6.9-34.9l128-128zm0 429.3l-128-128c-9.2-9.2-11.9-22.9-6.9-34.9s16.6-19.8 29.6-19.8H288c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9l-128 128c-12.5 12.5-32.8 12.5-45.3 0z'/%3E%3C/svg%3E\");--hub-table-icon-sort-up: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M182.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8H288c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-128-128z'/%3E%3C/svg%3E\");--hub-table-icon-sort-down: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M137.4 374.6c12.5 12.5 32.8 12.5 45.3 0l128-128c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8H32c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l128 128z'/%3E%3C/svg%3E\");--hub-table-accent-bg: transparent;--hub-table-active-bg: var(--hub-sys-state-active-bg, rgba(0, 0, 0, .1));--hub-table-active-color: var(--hub-sys-text-primary, #212529);--hub-table-accent: var(--hub-sys-color-primary, #0d6efd);--hub-table-accent-subtle: color-mix(in srgb, var(--hub-table-accent) 12%, var(--hub-sys-surface-page, #ffffff));--hub-table-selected-bg: var(--hub-table-accent-subtle);--hub-table-selected-color: var(--hub-sys-text-primary, #212529);--hub-table-bg: var(--hub-ref-color-white, #fff);--hub-table-bg-state: initial;--hub-table-bg-type: initial;--hub-table-cell-padding-x: var(--hub-ref-space-3, 1rem);--hub-table-cell-padding-x-sm: var(--hub-ref-space-2, .5rem);--hub-table-cell-padding-y: var(--hub-ref-space-2, .5rem);--hub-table-cell-padding-y-sm: var(--hub-ref-space-1, .25rem);--hub-table-cell-vertical-align: middle;--hub-table-color: var(--hub-sys-text-primary, #212529);--hub-table-color-state: initial;--hub-table-color-type: initial;--hub-table-group-separator-color: var(--hub-sys-border-color-default, #dee2e6);--hub-table-search-button-bg: var(--hub-table-container-bg);--hub-table-search-button-border-color: var(--hub-table-border-color);--hub-table-search-button-color: var(--hub-table-container-color);--hub-table-search-button-min-width: 2.75rem;--hub-table-search-input-bg: var(--hub-table-container-bg);--hub-table-search-input-border-color: var(--hub-table-border-color);--hub-table-search-input-color: var(--hub-table-container-color);--hub-table-search-border-width: var(--hub-table-border-width);--hub-table-search-border-radius: var(--hub-table-border-radius);--hub-table-search-input-padding-x: .75rem;--hub-table-search-input-padding-y: .375rem;--hub-table-search-input-font-size: 1rem;--hub-table-filter-button-active-bg: color-mix(in srgb, var(--hub-sys-color-success, #198754) 10%, transparent);--hub-table-filter-button-active-border-color: var(--hub-sys-color-success, #198754);--hub-table-filter-button-hover-bg: rgba(0, 0, 0, .05);--hub-table-filter-button-icon-active-color: var(--hub-sys-color-success, #198754);--hub-table-filter-button-icon-color: var(--hub-sys-text-muted, #6c757d);--hub-table-filter-button-gap: var(--hub-ref-space-2, .5rem);--hub-table-filter-button-padding-x: .75rem;--hub-table-filter-button-padding-y: .375rem;--hub-table-filter-button-border-width: 1px;--hub-table-filter-button-border-color: transparent;--hub-table-filter-button-border-radius: var(--hub-ref-radius-sm, .25rem);--hub-table-filter-button-transition: all .2s ease;--hub-table-filter-count-bg: var(--hub-sys-color-success, #198754);--hub-table-filter-count-color: var(--hub-ref-color-white, #fff);--hub-table-filter-count-size: 1.25rem;--hub-table-filter-count-padding-x: .4em;--hub-table-filter-count-font-size: .7rem;--hub-table-filter-count-font-weight: var(--hub-ref-font-weight-bold, 700);--hub-table-filter-count-border-radius: var(--hub-ref-radius-pill, 50rem);--hub-table-batch-actions-btn-icon-gap: var(--hub-ref-space-1, .25rem);--hub-table-hover-bg: var(--hub-sys-state-hover-bg, rgba(0, 0, 0, .075));--hub-table-hover-color: var(--hub-sys-text-primary, #212529);--hub-table-striped-bg: var(--hub-sys-state-striped-bg, rgba(0, 0, 0, .05));--hub-table-striped-color: var(--hub-sys-text-primary, #212529)}:host{display:flex;flex-direction:column;gap:var(--hub-table-container-gap);min-width:0;color:var(--hub-table-container-color)}:host .hub-table__top-bar{display:flex;justify-content:var(--hub-table-top-bar-justify-content);align-items:var(--hub-table-top-bar-align-items);flex-wrap:var(--hub-table-top-bar-wrap);gap:var(--hub-table-top-bar-gap)}:host .hub-table__batch-actions{display:flex;align-items:center;gap:var(--hub-table-batch-actions-gap);margin-inline-end:var(--hub-table-batch-actions-margin-inline-end)}:host .hub-table__batch-actions-btn-icon{margin-right:var(--hub-table-batch-actions-btn-icon-gap)}:host .hub-table__batch-actions-btn--default,:host .hub-table__cell-btn--default{border:var(--hub-table-border-width) solid var(--hub-table-border-color);border-radius:var(--hub-table-border-radius)}:host .hub-table__search{display:flex;flex-wrap:nowrap;align-items:stretch;justify-content:end}:host .hub-table__search-input{position:relative;flex:1 1 auto;width:1%;min-width:0;display:block;width:100%;padding:var(--hub-table-search-input-padding-y) var(--hub-table-search-input-padding-x);font-size:var(--hub-table-search-input-font-size);font-weight:var(--hub-ref-font-weight-base, 400);line-height:var(--hub-ref-line-height-base, 1.5);color:var(--hub-table-search-input-color);appearance:none;background-color:var(--hub-table-search-input-bg);background-clip:padding-box;border:var(--hub-table-search-border-width) solid var(--hub-table-search-input-border-color);border-radius:var(--hub-table-search-border-radius) 0 0 var(--hub-table-search-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}:host .hub-table__search-button{display:inline-flex;align-items:center;justify-content:center;min-width:var(--hub-table-search-button-min-width);color:var(--hub-table-search-button-color);background-color:var(--hub-table-search-button-bg);border-color:var(--hub-table-search-button-border-color);border-radius:0 var(--hub-table-search-border-radius) var(--hub-table-search-border-radius) 0}:host .hub-table__bottom-bar{display:flex;justify-content:var(--hub-table-bottom-bar-justify-content);align-items:var(--hub-table-bottom-bar-align-items);flex-wrap:var(--hub-table-bottom-bar-wrap);gap:var(--hub-table-bottom-bar-gap)}:host .hub-table__bottom-bar-paginator{order:var(--hub-table-bottom-bar-paginator-order);flex:var(--hub-table-bottom-bar-paginator-flex)}:host .hub-table__bottom-bar-settings{order:var(--hub-table-bottom-bar-settings-order);flex:var(--hub-table-bottom-bar-settings-flex);margin:0}:host .hub-table__bottom-bar-info{order:var(--hub-table-bottom-bar-info-order);flex:var(--hub-table-bottom-bar-info-flex);margin:0}:host .hub-table__paginator{overflow:auto;margin:0}:host .hub-table__filter-button{display:flex;flex-wrap:nowrap;align-items:center;gap:var(--hub-table-filter-button-gap);padding:var(--hub-table-filter-button-padding-y) var(--hub-table-filter-button-padding-x);cursor:pointer;border:var(--hub-table-filter-button-border-width) solid var(--hub-table-filter-button-border-color);border-radius:var(--hub-table-filter-button-border-radius);transition:var(--hub-table-filter-button-transition)}:host .hub-table__filter-button:hover{background-color:var(--hub-table-filter-button-hover-bg)}:host .hub-table__filter-button--active{background-color:var(--hub-table-filter-button-active-bg);border-color:var(--hub-table-filter-button-active-border-color)}:host .hub-table__filter-button--active .hub-table__filter-button-icon{color:var(--hub-table-filter-button-icon-active-color)}:host .hub-table__filter-button-icon{transition:color .2s ease;color:var(--hub-table-filter-button-icon-color)}:host .hub-table__filter-count{display:inline-flex;align-items:center;justify-content:center;min-width:var(--hub-table-filter-count-size);height:var(--hub-table-filter-count-size);padding:0 var(--hub-table-filter-count-padding-x);font-size:var(--hub-table-filter-count-font-size);font-weight:var(--hub-table-filter-count-font-weight);line-height:1;color:var(--hub-table-filter-count-color);text-align:center;white-space:nowrap;background-color:var(--hub-table-filter-count-bg);border-radius:var(--hub-table-filter-count-border-radius);animation:badge-appear .2s ease}:host .hub-table__no-data-icon{margin-right:1.5rem}:host .hub-table__header-icon{margin-right:.5rem}:host .hub-table__icon{display:inline-block;width:var(--hub-table-icon-size);height:var(--hub-table-icon-size);background-color:var(--hub-table-icon-color);-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;vertical-align:middle}:host .hub-table__icon--xs{--hub-table-icon-size: .75em}:host .hub-table__icon--sm{--hub-table-icon-size: .875em}:host .hub-table__icon--lg{--hub-table-icon-size: 1.33em}:host .hub-table__icon--2x{--hub-table-icon-size: 2em}:host .hub-table__icon--3x{--hub-table-icon-size: 3em}:host .hub-table__icon--4x{--hub-table-icon-size: 4em}:host .hub-table__icon--5x{--hub-table-icon-size: 5em}:host .hub-table__icon--search{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z'/%3E%3C/svg%3E\")}:host .hub-table__icon--filter{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M3.9 54.9C10.5 40.9 24.5 32 40 32H472c15.5 0 29.5 8.9 36.1 22.9s4.6 30.5-5.2 42.5L320 320.9V448c0 12.1-6.8 23.2-17.7 28.6s-23.8 4.3-33.5-3l-64-48c-8.1-6-12.8-15.5-12.8-25.6V320.9L9 97.3C-.7 85.4-2.8 68.8 3.9 54.9z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M3.9 54.9C10.5 40.9 24.5 32 40 32H472c15.5 0 29.5 8.9 36.1 22.9s4.6 30.5-5.2 42.5L320 320.9V448c0 12.1-6.8 23.2-17.7 28.6s-23.8 4.3-33.5-3l-64-48c-8.1-6-12.8-15.5-12.8-25.6V320.9L9 97.3C-.7 85.4-2.8 68.8 3.9 54.9z'/%3E%3C/svg%3E\")}:host .hub-table__icon--eraser{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 576 512'%3E%3Cpath d='M290.7 57.4L57.4 290.7c-25 25-25 65.5 0 90.5l80 80c12 12 28.3 18.7 45.3 18.7H288h9.4H512c17.7 0 32-14.3 32-32s-14.3-32-32-32H387.9L518.6 285.3c25-25 25-65.5 0-90.5L381.3 57.4c-25-25-65.5-25-90.5 0zM297.4 416H288l-105.4 0-80-80L227.3 211.3 364.7 348.7 297.4 416z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 576 512'%3E%3Cpath d='M290.7 57.4L57.4 290.7c-25 25-25 65.5 0 90.5l80 80c12 12 28.3 18.7 45.3 18.7H288h9.4H512c17.7 0 32-14.3 32-32s-14.3-32-32-32H387.9L518.6 285.3c25-25 25-65.5 0-90.5L381.3 57.4c-25-25-65.5-25-90.5 0zM297.4 416H288l-105.4 0-80-80L227.3 211.3 364.7 348.7 297.4 416z'/%3E%3C/svg%3E\")}:host .hub-table__icon--info{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM216 336h24V272H216c-13.3 0-24-10.7-24-24s10.7-24 24-24h48c13.3 0 24 10.7 24 24v88h8c13.3 0 24 10.7 24 24s-10.7 24-24 24H216c-13.3 0-24-10.7-24-24s10.7-24 24-24zm40-208a32 32 0 1 1 0 64 32 32 0 1 1 0-64z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM216 336h24V272H216c-13.3 0-24-10.7-24-24s10.7-24 24-24h48c13.3 0 24 10.7 24 24v88h8c13.3 0 24 10.7 24 24s-10.7 24-24 24H216c-13.3 0-24-10.7-24-24s10.7-24 24-24zm40-208a32 32 0 1 1 0 64 32 32 0 1 1 0-64z'/%3E%3C/svg%3E\");margin-right:1.5rem}:host .hub-table__icon--sort{-webkit-mask-image:var(--hub-table-icon-sort);mask-image:var(--hub-table-icon-sort)}:host .hub-table__icon--sort-up{-webkit-mask-image:var(--hub-table-icon-sort-up);mask-image:var(--hub-table-icon-sort-up)}:host .hub-table__icon--sort-down{-webkit-mask-image:var(--hub-table-icon-sort-down);mask-image:var(--hub-table-icon-sort-down)}:host .hub-table__icon--caret-up{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M182.6 137.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8H288c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-128-128z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M182.6 137.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8H288c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-128-128z'/%3E%3C/svg%3E\")}:host .hub-table__icon--caret-down{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M137.4 374.6c12.5 12.5 32.8 12.5 45.3 0l128-128c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8H32c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l128 128z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M137.4 374.6c12.5 12.5 32.8 12.5 45.3 0l128-128c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8H32c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l128 128z'/%3E%3C/svg%3E\")}:host .hub-table__icon--chevron-up{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M233.4 105.4c12.5-12.5 32.8-12.5 45.3 0l192 192c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L256 173.3 86.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l192-192z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M233.4 105.4c12.5-12.5 32.8-12.5 45.3 0l192 192c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L256 173.3 86.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l192-192z'/%3E%3C/svg%3E\")}:host .hub-table__icon--chevron-down{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M233.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5 12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L256 338.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M233.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5 12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L256 338.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z'/%3E%3C/svg%3E\")}:host .hub-table__icon--chevron-left{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z'/%3E%3C/svg%3E\")}:host .hub-table__icon--chevron-right{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M310.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L242.7 256 105.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M310.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L242.7 256 105.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z'/%3E%3C/svg%3E\")}:host .hub-table__icon--angle-left{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z'/%3E%3C/svg%3E\")}:host .hub-table__icon--angle-right{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath d='M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z'/%3E%3C/svg%3E\")}:host .hub-table__icon--angle-double-left{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160zm352-160l-160 160c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L301.3 256 438.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160zm352-160l-160 160c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L301.3 256 438.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0z'/%3E%3C/svg%3E\")}:host .hub-table__icon--angle-double-right{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M470.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L402.7 256 265.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160zm-352 160l160-160c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L210.7 256 73.4 393.4c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M470.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L402.7 256 265.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160zm-352 160l160-160c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L210.7 256 73.4 393.4c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0z'/%3E%3C/svg%3E\")}:host .hub-table__icon--ellipsis-v{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 128 512'%3E%3Cpath d='M64 360a56 56 0 1 0 0 112 56 56 0 1 0 0-112zm0-160a56 56 0 1 0 0 112 56 56 0 1 0 0-112zM120 96A56 56 0 1 0 8 96a56 56 0 1 0 112 0z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 128 512'%3E%3Cpath d='M64 360a56 56 0 1 0 0 112 56 56 0 1 0 0-112zm0-160a56 56 0 1 0 0 112 56 56 0 1 0 0-112zM120 96A56 56 0 1 0 8 96a56 56 0 1 0 112 0z'/%3E%3C/svg%3E\")}:host .hub-table__icon--trash{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3Cpath d='M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3Cpath d='M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z'/%3E%3C/svg%3E\");margin-right:.5rem}:host .hub-table__icon--plus{-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3Cpath d='M256 80c0-17.7-14.3-32-32-32s-32 14.3-32 32V224H48c-17.7 0-32 14.3-32 32s14.3 32 32 32H192V432c0 17.7 14.3 32 32 32s32-14.3 32-32V288H400c17.7 0 32-14.3 32-32s-14.3-32-32-32H256V80z'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3Cpath d='M256 80c0-17.7-14.3-32-32-32s-32 14.3-32 32V224H48c-17.7 0-32 14.3-32 32s14.3 32 32 32H192V432c0 17.7 14.3 32 32 32s32-14.3 32-32V288H400c17.7 0 32-14.3 32-32s-14.3-32-32-32H256V80z'/%3E%3C/svg%3E\");margin-right:.5rem}:host .hub-table__container{overflow:auto;background-color:var(--hub-table-container-bg);border:var(--hub-table-border-width) solid var(--hub-table-border-color);border-radius:var(--hub-table-border-radius);color:var(--hub-table-container-color)}:host .hub-table__element{position:relative;width:100%;border-collapse:collapse;border-spacing:0;vertical-align:var(--hub-table-cell-vertical-align);border-color:var(--hub-table-border-color);background-color:var(--hub-table-bg);color:var(--hub-table-color)}:host .hub-table__element .sticky-start{background-color:var(--hub-table-bg);left:0;position:sticky;z-index:9}:host .hub-table__element .sticky-end{background-color:var(--hub-table-bg);right:0;position:sticky;z-index:9}:host .hub-table__element .clickable-item{cursor:pointer}:host .hub-table__element>:not(caption)>*>*{padding:var(--hub-table-cell-padding-y) var(--hub-table-cell-padding-x);vertical-align:var(--hub-table-cell-vertical-align);color:var(--hub-table-color-state, var(--hub-table-color-type, var(--hub-table-color)));background-color:var(--hub-table-bg);border-bottom-style:solid;border-bottom-color:var(--hub-table-border-color);border-bottom-width:var(--hub-table-border-width);box-shadow:inset 0 0 0 9999px var(--hub-table-bg-state, var(--hub-table-bg-type, var(--hub-table-accent-bg)))}:host .hub-table__element>tbody{vertical-align:inherit}:host .hub-table__element>thead{vertical-align:bottom}:host .hub-table__scrollable thead{position:sticky;top:0;z-index:10}:host .hub-table__group-divider{border-top:calc(var(--hub-table-border-width) * 2) solid var(--hub-table-group-separator-color)}:host .hub-table__sm>:not(caption)>*>*{padding:var(--hub-table-cell-padding-y-sm) var(--hub-table-cell-padding-x-sm)}:host .hub-table__bordered>:not(caption)>*{border-style:solid;border-width:var(--hub-table-border-width) 0}:host .hub-table__bordered>:not(caption)>*>*{border-style:solid;border-width:0 var(--hub-table-border-width)}:host .hub-table__borderless>:not(caption)>*>*{border-bottom-width:0}:host .hub-table__borderless>:not(:first-child){border-top-width:0}:host .hub-table__striped-odd>tbody>tr:nth-of-type(odd)>*{color:var(--hub-table-striped-color);background-color:var(--hub-table-striped-bg)}:host .hub-table__striped-even>tbody>tr:nth-of-type(2n)>*{color:var(--hub-table-striped-color);background-color:var(--hub-table-striped-bg)}:host .hub-table__striped-columns-odd>:not(caption)>tr>:nth-child(odd){color:var(--hub-table-striped-color);background-color:var(--hub-table-striped-bg)}:host .hub-table__striped-columns-even>:not(caption)>tr>:nth-child(2n){color:var(--hub-table-striped-color);background-color:var(--hub-table-striped-bg)}:host .hub-table__active{--hub-table-color-state: var(--hub-table-active-color);--hub-table-bg-state: var(--hub-table-active-bg)}:host .hub-table__hover>tbody>tr:hover>*{--hub-table-color-state: var(--hub-table-hover-color);--hub-table-bg-state: var(--hub-table-hover-bg)}:host .hub-table__body-row--selected>*,:host .hub-table__hover>tbody>tr.hub-table__body-row--selected:hover>*{--hub-table-color-state: var(--hub-table-selected-color);--hub-table-bg-state: var(--hub-table-selected-bg)}:host .hub-table__responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}.hub-table__primary{--hub-table-accent: var(--hub-sys-color-primary)}.hub-table__success{--hub-table-accent: var(--hub-sys-color-success)}.hub-table__danger{--hub-table-accent: var(--hub-sys-color-danger)}.hub-table__warning{--hub-table-accent: var(--hub-sys-color-warning)}.hub-table__info{--hub-table-accent: var(--hub-sys-color-info)}:host.hub-table--rtl{direction:rtl}:host.hub-table--rtl .hub-table__top-bar{direction:ltr}:host.hub-table--rtl .hub-table__batch-actions{order:2;flex-direction:row-reverse;margin-inline-end:0;margin-inline-start:auto}:host.hub-table--rtl .hub-table__batch-actions-btn-icon{margin-right:0;margin-left:var(--hub-table-batch-actions-btn-icon-gap)}:host.hub-table--rtl .hub-table__search{order:1;margin-inline-end:auto;margin-inline-start:0;direction:ltr}:host.hub-table--rtl .hub-table__search-input{direction:ltr;text-align:right;border-radius:0 var(--hub-table-search-border-radius) var(--hub-table-search-border-radius) 0}:host.hub-table--rtl .hub-table__search-button{border-radius:var(--hub-table-search-border-radius) 0 0 var(--hub-table-search-border-radius)}:host.hub-table--rtl .hub-table__no-data-icon{margin-right:0;margin-left:1.5rem}:host.hub-table--rtl .hub-table__header-icon{margin-right:0;margin-left:.5rem}.caption-top{caption-side:top}@media(max-width:576px){.hub-table__responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width:768px){.hub-table__responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width:992px){.hub-table__responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width:1200px){.hub-table__responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width:1400px){.hub-table__responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@keyframes badge-appear{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}\n"] }]
|
|
3791
4681
|
}], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], debounce: [{ type: i0.Input, args: [{ isSignal: true, alias: "debounce", required: false }] }], headers: [{ type: i0.Input, args: [{ isSignal: true, alias: "headers", required: false }] }, { type: i0.Output, args: ["headersChange"] }], filters: [{ type: i0.Input, args: [{ isSignal: true, alias: "filters", required: false }] }, { type: i0.Output, args: ["filtersChange"] }], rows: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }], perPageOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "perPageOptions", required: false }] }], page: [{ type: i0.Input, args: [{ isSignal: true, alias: "page", required: false }] }, { type: i0.Output, args: ["pageChange"] }], perPage: [{ type: i0.Input, args: [{ isSignal: true, alias: "perPage", required: false }] }, { type: i0.Output, args: ["perPageChange"] }], totalItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "totalItems", required: false }] }, { type: i0.Output, args: ["totalItemsChange"] }], ordination: [{ type: i0.Input, args: [{ isSignal: true, alias: "ordination", required: false }] }, { type: i0.Output, args: ["ordinationChange"] }], paginate: [{ type: i0.Input, args: [{ isSignal: true, alias: "paginate", required: false }] }], bindValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindValue", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }, { type: i0.Output, args: ["loadingChange"] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }, { type: i0.Output, args: ["errorChange"] }], loadingComponent: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadingComponent", required: false }] }], errorComponent: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorComponent", required: false }] }], noResultsComponent: [{ type: i0.Input, args: [{ isSignal: true, alias: "noResultsComponent", required: false }] }], paginationPosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "paginationPosition", required: false }] }], paginationInfo: [{ type: i0.Input, args: [{ isSignal: true, alias: "paginationInfo", required: false }] }], stickyActions: [{ type: i0.Input, args: [{ isSignal: true, alias: "stickyActions", required: false }] }], batchActions: [{ type: i0.Input, args: [{ isSignal: true, alias: "batchActions", required: false }] }], selectable: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectable", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], searchable: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchable", required: false }] }], searchTerm: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchTerm", required: false }] }, { type: i0.Output, args: ["searchTermChange"] }], searchFn: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchFn", required: false }] }], compareFn: [{ type: i0.Input, args: [{ isSignal: true, alias: "compareFn", required: false }] }], clickFn: [{ type: i0.Input, args: [{ isSignal: true, alias: "clickFn", required: false }] }], rowClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowClass", required: false }] }], responsive: [{ type: i0.Input, args: [{ isSignal: true, alias: "responsive", required: false }] }], templateRow: [{ type: i0.ContentChild, args: [i0.forwardRef(() => PaginableTableRowDirective), { ...{
|
|
3792
4682
|
read: TemplateRef
|
|
3793
4683
|
}, isSignal: true }] }], headerTpts: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => PaginableTableHeaderDirective), { isSignal: true }] }], templateCells: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => PaginableTableCellDirective), { isSignal: true }] }], noResultsTpt: [{ type: i0.ContentChild, args: [i0.forwardRef(() => PaginableNoResultsDirective), { ...{
|
|
@@ -3798,6 +4688,45 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImpor
|
|
|
3798
4688
|
read: TemplateRef
|
|
3799
4689
|
}, isSignal: true }] }], templateExpandingRows: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => PaginableTableExpandingRowDirective), { isSignal: true }] }], filterTpts: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => PaginableTableFilterDirective), { isSignal: true }] }], dropdownComponents: [{ type: i0.ViewChildren, args: [i0.forwardRef(() => DropdownComponent), { isSignal: true }] }] } });
|
|
3800
4690
|
|
|
4691
|
+
/**
|
|
4692
|
+
* Marks an element inside a `hub-list` item template as the drag handle.
|
|
4693
|
+
*
|
|
4694
|
+
* When at least one handle is present in an item, a drag (native or pointer-based) only
|
|
4695
|
+
* starts when the gesture begins on the handle; dragging the rest of the row is ignored.
|
|
4696
|
+
* When no handle is declared, the whole row is draggable.
|
|
4697
|
+
*
|
|
4698
|
+
* Detection is DOM-based: the directive simply tags its host with the
|
|
4699
|
+
* `hub-list__drag-handle` class. The list checks `event.target.closest('.hub-list__drag-handle')`
|
|
4700
|
+
* on drag/pointer start, which works even though the template is content-projected.
|
|
4701
|
+
*
|
|
4702
|
+
* The host is intentionally **not** marked `draggable="false"`: with the native HTML5
|
|
4703
|
+
* drag-and-drop API, a `draggable="false"` descendant prevents the browser from starting a
|
|
4704
|
+
* drag from that area, which would make the handle — the one place a drag should start —
|
|
4705
|
+
* unusable. The draggable element is the list item ancestor; the handle just participates.
|
|
4706
|
+
*
|
|
4707
|
+
* @example
|
|
4708
|
+
* ```html
|
|
4709
|
+
* <ng-template listItemTpt let-item="data">
|
|
4710
|
+
* <span hubListDragHandle>::</span>
|
|
4711
|
+
* {{ item.name }}
|
|
4712
|
+
* </ng-template>
|
|
4713
|
+
* ```
|
|
4714
|
+
*/
|
|
4715
|
+
class HubListDragHandleDirective {
|
|
4716
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: HubListDragHandleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
4717
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.1", type: HubListDragHandleDirective, isStandalone: true, selector: "[hubListDragHandle], [listDragHandle]", host: { classAttribute: "hub-list__drag-handle" }, ngImport: i0 });
|
|
4718
|
+
}
|
|
4719
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: HubListDragHandleDirective, decorators: [{
|
|
4720
|
+
type: Directive,
|
|
4721
|
+
args: [{
|
|
4722
|
+
selector: '[hubListDragHandle], [listDragHandle]',
|
|
4723
|
+
standalone: true,
|
|
4724
|
+
host: {
|
|
4725
|
+
class: 'hub-list__drag-handle'
|
|
4726
|
+
}
|
|
4727
|
+
}]
|
|
4728
|
+
}] });
|
|
4729
|
+
|
|
3801
4730
|
class ResizableDirective {
|
|
3802
4731
|
documentRef;
|
|
3803
4732
|
elementRef;
|
|
@@ -3830,166 +4759,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImpor
|
|
|
3830
4759
|
type: Output
|
|
3831
4760
|
}] } });
|
|
3832
4761
|
|
|
3833
|
-
/** Unique ID for the injected tooltip stylesheet. */
|
|
3834
|
-
const TOOLTIP_STYLE_ID = 'hub-tooltip-styles';
|
|
3835
|
-
/** Base styles for the tooltip element, injected once into <head>. */
|
|
3836
|
-
const TOOLTIP_STYLES = `
|
|
3837
|
-
.ng-tooltip {
|
|
3838
|
-
position: absolute;
|
|
3839
|
-
z-index: 1070;
|
|
3840
|
-
display: block;
|
|
3841
|
-
margin: 0;
|
|
3842
|
-
font-family: var(--hub-ref-font-family, inherit);
|
|
3843
|
-
font-style: normal;
|
|
3844
|
-
font-weight: 400;
|
|
3845
|
-
line-height: 1.5;
|
|
3846
|
-
text-align: center;
|
|
3847
|
-
text-decoration: none;
|
|
3848
|
-
text-shadow: none;
|
|
3849
|
-
text-transform: none;
|
|
3850
|
-
letter-spacing: normal;
|
|
3851
|
-
word-break: normal;
|
|
3852
|
-
word-spacing: normal;
|
|
3853
|
-
white-space: normal;
|
|
3854
|
-
line-break: auto;
|
|
3855
|
-
font-size: 0.875rem;
|
|
3856
|
-
word-wrap: break-word;
|
|
3857
|
-
opacity: 0;
|
|
3858
|
-
background-color: #000;
|
|
3859
|
-
color: #fff;
|
|
3860
|
-
border-radius: 0.375rem;
|
|
3861
|
-
padding: 0.25rem 0.5rem;
|
|
3862
|
-
pointer-events: none;
|
|
3863
|
-
}
|
|
3864
|
-
.ng-tooltip-show { opacity: 0.9; }
|
|
3865
|
-
`;
|
|
3866
|
-
class TooltipDirective {
|
|
3867
|
-
el;
|
|
3868
|
-
renderer;
|
|
3869
|
-
tooltipTitle = input.required({ ...(ngDevMode ? { debugName: "tooltipTitle" } : /* istanbul ignore next */ {}), alias: "tooltip" });
|
|
3870
|
-
placement = input(/* @ts-ignore */
|
|
3871
|
-
...(ngDevMode ? [undefined, { debugName: "placement" }] : /* istanbul ignore next */ []));
|
|
3872
|
-
delay = input(/* @ts-ignore */
|
|
3873
|
-
...(ngDevMode ? [undefined, { debugName: "delay" }] : /* istanbul ignore next */ []));
|
|
3874
|
-
tooltip;
|
|
3875
|
-
offset = 8;
|
|
3876
|
-
document = inject(DOCUMENT);
|
|
3877
|
-
constructor(el, renderer) {
|
|
3878
|
-
this.el = el;
|
|
3879
|
-
this.renderer = renderer;
|
|
3880
|
-
this.ensureStyles();
|
|
3881
|
-
}
|
|
3882
|
-
/**
|
|
3883
|
-
* Injects the tooltip stylesheet into <head> once per document.
|
|
3884
|
-
* Subsequent instances reuse the same <style> tag.
|
|
3885
|
-
*/
|
|
3886
|
-
ensureStyles() {
|
|
3887
|
-
if (this.document.getElementById(TOOLTIP_STYLE_ID)) {
|
|
3888
|
-
return;
|
|
3889
|
-
}
|
|
3890
|
-
const style = this.renderer.createElement('style');
|
|
3891
|
-
style.id = TOOLTIP_STYLE_ID;
|
|
3892
|
-
style.textContent = TOOLTIP_STYLES;
|
|
3893
|
-
this.renderer.appendChild(this.document.head, style);
|
|
3894
|
-
}
|
|
3895
|
-
onMouseEnter() {
|
|
3896
|
-
if (!this.tooltip) {
|
|
3897
|
-
this.show();
|
|
3898
|
-
}
|
|
3899
|
-
}
|
|
3900
|
-
onClick() {
|
|
3901
|
-
if (this.tooltip) {
|
|
3902
|
-
this.hide();
|
|
3903
|
-
}
|
|
3904
|
-
}
|
|
3905
|
-
onMouseLeave() {
|
|
3906
|
-
if (this.tooltip) {
|
|
3907
|
-
this.hide();
|
|
3908
|
-
}
|
|
3909
|
-
}
|
|
3910
|
-
show() {
|
|
3911
|
-
this.create();
|
|
3912
|
-
this.setPosition();
|
|
3913
|
-
this.renderer.addClass(this.tooltip, 'ng-tooltip-show');
|
|
3914
|
-
}
|
|
3915
|
-
hide() {
|
|
3916
|
-
this.renderer.removeClass(this.tooltip, 'ng-tooltip-show');
|
|
3917
|
-
window.setTimeout(() => {
|
|
3918
|
-
this.renderer.removeChild(document.body, this.tooltip);
|
|
3919
|
-
this.tooltip = null;
|
|
3920
|
-
}, this.delay());
|
|
3921
|
-
}
|
|
3922
|
-
create() {
|
|
3923
|
-
this.tooltip = this.renderer.createElement('span');
|
|
3924
|
-
this.renderer.appendChild(this.tooltip, this.renderer.createText(this.tooltipTitle()) // textNode
|
|
3925
|
-
);
|
|
3926
|
-
this.renderer.appendChild(document.body, this.tooltip);
|
|
3927
|
-
// this.renderer.appendChild(this.el.nativeElement, this.tooltip);
|
|
3928
|
-
this.renderer.addClass(this.tooltip, 'ng-tooltip');
|
|
3929
|
-
this.renderer.addClass(this.tooltip, `ng-tooltip-${this.placement()}`);
|
|
3930
|
-
// delay 설정
|
|
3931
|
-
const delay = this.delay();
|
|
3932
|
-
this.renderer.setStyle(this.tooltip, '-webkit-transition', `opacity ${delay}ms`);
|
|
3933
|
-
this.renderer.setStyle(this.tooltip, '-moz-transition', `opacity ${delay}ms`);
|
|
3934
|
-
this.renderer.setStyle(this.tooltip, '-o-transition', `opacity ${delay}ms`);
|
|
3935
|
-
this.renderer.setStyle(this.tooltip, 'transition', `opacity ${delay}ms`);
|
|
3936
|
-
}
|
|
3937
|
-
setPosition() {
|
|
3938
|
-
if (!this.tooltip) {
|
|
3939
|
-
return;
|
|
3940
|
-
}
|
|
3941
|
-
// 호스트 요소의 사이즈와 위치 정보
|
|
3942
|
-
const hostPos = this.el.nativeElement.getBoundingClientRect();
|
|
3943
|
-
// tooltip 요소의 사이즈와 위치 정보
|
|
3944
|
-
const tooltipPos = this.tooltip.getBoundingClientRect();
|
|
3945
|
-
// window의 scroll top
|
|
3946
|
-
// getBoundingClientRect 메소드는 viewport에서의 상대적인 위치를 반환한다.
|
|
3947
|
-
// 스크롤이 발생한 경우, tooltip 요소의 top에 세로 스크롤 좌표값을 반영하여야 한다.
|
|
3948
|
-
const scrollPos = window.pageYOffset ||
|
|
3949
|
-
document.documentElement.scrollTop ||
|
|
3950
|
-
document.body.scrollTop ||
|
|
3951
|
-
0;
|
|
3952
|
-
let top, left;
|
|
3953
|
-
const placement = this.placement();
|
|
3954
|
-
if (placement === 'top') {
|
|
3955
|
-
top = hostPos.top - tooltipPos.height - this.offset;
|
|
3956
|
-
left = hostPos.left + (hostPos.width - tooltipPos.width) / 2;
|
|
3957
|
-
}
|
|
3958
|
-
if (placement === 'bottom') {
|
|
3959
|
-
top = hostPos.bottom + this.offset;
|
|
3960
|
-
left = hostPos.left + (hostPos.width - tooltipPos.width) / 2;
|
|
3961
|
-
}
|
|
3962
|
-
if (placement === 'left') {
|
|
3963
|
-
top = hostPos.top + (hostPos.height - tooltipPos.height) / 2;
|
|
3964
|
-
left = hostPos.left - tooltipPos.width - this.offset;
|
|
3965
|
-
}
|
|
3966
|
-
if (placement === 'right') {
|
|
3967
|
-
top = hostPos.top + (hostPos.height - tooltipPos.height) / 2;
|
|
3968
|
-
left = hostPos.right + this.offset;
|
|
3969
|
-
}
|
|
3970
|
-
// 스크롤이 발생한 경우, tooltip 요소의 top에 세로 스크롤 좌표값을 반영하여야 한다.
|
|
3971
|
-
this.renderer.setStyle(this.tooltip, 'top', `${top + scrollPos}px`);
|
|
3972
|
-
this.renderer.setStyle(this.tooltip, 'left', `${left}px`);
|
|
3973
|
-
}
|
|
3974
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: TooltipDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
|
|
3975
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.1", type: TooltipDirective, isStandalone: true, selector: "[tooltip]", inputs: { tooltipTitle: { classPropertyName: "tooltipTitle", publicName: "tooltip", isSignal: true, isRequired: true, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null }, delay: { classPropertyName: "delay", publicName: "delay", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "mouseenter": "onMouseEnter()", "click": "onClick()", "mouseleave": "onMouseLeave()" } }, ngImport: i0 });
|
|
3976
|
-
}
|
|
3977
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: TooltipDirective, decorators: [{
|
|
3978
|
-
type: Directive,
|
|
3979
|
-
args: [{
|
|
3980
|
-
selector: '[tooltip]'
|
|
3981
|
-
}]
|
|
3982
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { tooltipTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltip", required: true }] }], placement: [{ type: i0.Input, args: [{ isSignal: true, alias: "placement", required: false }] }], delay: [{ type: i0.Input, args: [{ isSignal: true, alias: "delay", required: false }] }], onMouseEnter: [{
|
|
3983
|
-
type: HostListener,
|
|
3984
|
-
args: ['mouseenter']
|
|
3985
|
-
}], onClick: [{
|
|
3986
|
-
type: HostListener,
|
|
3987
|
-
args: ['click']
|
|
3988
|
-
}], onMouseLeave: [{
|
|
3989
|
-
type: HostListener,
|
|
3990
|
-
args: ['mouseleave']
|
|
3991
|
-
}] } });
|
|
3992
|
-
|
|
3993
4762
|
/**
|
|
3994
4763
|
* Enum representing the available input types for menu filters.
|
|
3995
4764
|
* These types define how the user can input data for filtering.
|
|
@@ -4151,5 +4920,5 @@ var RowClass;
|
|
|
4151
4920
|
* Generated bundle index. Do not edit.
|
|
4152
4921
|
*/
|
|
4153
4922
|
|
|
4154
|
-
export { BooleanMatchModes, DateMatchModes, DropdownComponent, HubIconComponent, HubUITableModule, ListComponent, MenuFilterInputType, MenuFilterOperators, NullMatchModes, NumberMatchModes, PaginableDefaultsService, PaginableNoResultsDirective as PaginableEmptyStateDirective, PaginableErrorDirective, ListComponent as PaginableListComponent, PaginableListItemDirective, PaginableLoadingDirective, PaginableNoResultsDirective, PaginableService, PaginableStateOutlet, PaginableTableCellDirective, PaginableTableDropdownComponent, PaginableErrorDirective as PaginableTableErrorDirective, PaginableTableExpandingRowDirective, PaginableTableFilterDirective, PaginableTableHeaderDirective, PaginableLoadingDirective as PaginableTableLoadingDirective, PaginableNoResultsDirective as PaginableTableNotFoundDirective, PaginableTableRangeInputComponent, PaginableTableRowDirective, PaginationService, PaginatorComponent, ResizableComponent, ResizableDirective, RowClass, SelectionTypes, StringMatchModes, TableBreakpoint, TableComponent, HubUITableModule as TableModule,
|
|
4923
|
+
export { BooleanMatchModes, DateMatchModes, DropdownComponent, HubIconComponent, HubListDragHandleDirective, HubListDragPlaceholderDirective, HubListDragPreviewDirective, HubUITableModule, ListComponent, MenuFilterInputType, MenuFilterOperators, NullMatchModes, NumberMatchModes, PaginableDefaultsService, PaginableNoResultsDirective as PaginableEmptyStateDirective, PaginableErrorDirective, ListComponent as PaginableListComponent, PaginableListItemDirective, PaginableLoadingDirective, PaginableNoResultsDirective, PaginableService, PaginableStateOutlet, PaginableTableCellDirective, PaginableTableDropdownComponent, PaginableErrorDirective as PaginableTableErrorDirective, PaginableTableExpandingRowDirective, PaginableTableFilterDirective, PaginableTableHeaderDirective, PaginableLoadingDirective as PaginableTableLoadingDirective, PaginableNoResultsDirective as PaginableTableNotFoundDirective, PaginableTableRangeInputComponent, PaginableTableRowDirective, PaginationService, PaginatorComponent, ResizableComponent, ResizableDirective, RowClass, SelectionTypes, StringMatchModes, TableBreakpoint, TableComponent, HubUITableModule as TableModule, locale$9 as anLocale, locale$8 as arLocale, locale$7 as astLocale, locale$6 as caLocale, locale$5 as deLocale, locale$a as enLocale, locale$4 as esLocale, locale$3 as euLocale, locale$2 as glLocale, paginableCoreProviders, providePaginable, locale$1 as ruLocale, locale as zhLocale };
|
|
4155
4924
|
//# sourceMappingURL=ng-hub-ui-paginable.mjs.map
|