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.
@@ -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, TooltipDirective, 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 };
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