@verisoft/ui-govcz 21.0.1 → 21.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/icons/components/arrow-counterclockwise.svg +4 -0
- package/assets/icons/components/file.svg +4 -0
- package/assets/icons/components/folder.svg +3 -0
- package/assets/icons/components/map-empty.svg +3 -0
- package/fesm2022/verisoft-ui-govcz.mjs +259 -121
- package/fesm2022/verisoft-ui-govcz.mjs.map +1 -1
- package/package.json +4 -4
- package/types/verisoft-ui-govcz.d.ts +45 -24
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Component, Pipe, ChangeDetectionStrategy, CUSTOM_ELEMENTS_SCHEMA, EventEmitter, Output, Input, inject, Optional, Self, input, SimpleChange, Injectable, ChangeDetectorRef, Injector, ViewContainerRef, ViewChild,
|
|
2
|
+
import { Component, Pipe, ChangeDetectionStrategy, CUSTOM_ELEMENTS_SCHEMA, EventEmitter, Output, Input, inject, Optional, Self, input, SimpleChange, Injectable, ChangeDetectorRef, Injector, ViewContainerRef, ViewChild, HostListener, ViewEncapsulation, NO_ERRORS_SCHEMA, output, ContentChild, ContentChildren, NgModule, Inject, signal, Directive, forwardRef, InjectionToken } from '@angular/core';
|
|
3
3
|
import * as i1 from '@angular/router';
|
|
4
|
-
import { RouterModule, Router,
|
|
4
|
+
import { RouterModule, Router, ActivatedRoute, NavigationEnd, RouterLink, RouterLinkActive, RouterOutlet } from '@angular/router';
|
|
5
5
|
import * as i2 from '@gov-design-system-ce/angular';
|
|
6
6
|
import { GovDesignSystemModule } from '@gov-design-system-ce/angular';
|
|
7
7
|
import * as i1$3 from '@verisoft/ui-core';
|
|
8
|
-
import { BreadcrumbCoreComponent, BREADCRUMB_COMPONENT_TOKEN, ControlSeverity, GovControlSeverity, FieldSize, IconsComponent, IconPosition, GovButtonType, BUTTON_COMPONENT_TOKEN, SlotPosition, BaseFormInputComponent, FieldType, CALENDAR_COMPONENT_TOKEN, CHECKBOX_COMPONENT_TOKEN, UnsubscribeComponent, CONFIRM_DIALOG_COMPONENT_TOKEN, TEXTFIELD_COMPONENT_TOKEN, DROPDOWN_COMPONENT_TOKEN, DROPDOWN_BUTTON_COMPONENT_TOKEN, FORM_FIELD_COMPONENT_TOKEN, SideMenuService, HEADER_COMPONENT_TOKEN, INPUT_GROUP_COMPONENT_TOKEN, LOADER_COMPONENT_TOKEN, MULTISELECT_COMPONENT_TOKEN, NUMBER_INPUT_COMPONENT_TOKEN, PasswordStrength, PASSWORD_COMPONENT_TOKEN, RADIOBUTTON_COMPONENT_TOKEN, SECTION_COMPONENT_TOKEN, ACTION_BUTTON_GROUP_COMPONENT_TOKEN, queryListChanged, GenericFieldType, DatasourceDirective, GENERIC_FIELD_COMPONENT_TOKEN, SIDE_MENU_COMPONENT_TOKEN, MENU_TOKEN, SideMenuProviderService, SNACKBAR_COMPONENT_TOKEN, LayoutType, STEPPER_COMPONENT_TOKEN, SWITCH_COMPONENT_TOKEN, MAX_COLUMN_CHAR_COUNT, TableService, DEFAULT_PAGINATION, ColumnModel, RowModel, TableSelectionMode, TABLE_COLUMN_PROVIDER, TABLE_COMPONENT_TOKEN, TAG_COMPONENT_TOKEN, TEXTAREA_COMPONENT_TOKEN, DEFAULT_DEBOUNCE_TIME, ScreenSizeService,
|
|
8
|
+
import { BreadcrumbCoreComponent, BREADCRUMB_COMPONENT_TOKEN, ControlSeverity, GovControlSeverity, FieldSize, IconsComponent, IconPosition, GovButtonType, BUTTON_COMPONENT_TOKEN, SlotPosition, BaseFormInputComponent, FieldType, CALENDAR_COMPONENT_TOKEN, CHECKBOX_COMPONENT_TOKEN, UnsubscribeComponent, DialogService, CONFIRM_DIALOG_COMPONENT_TOKEN, TEXTFIELD_COMPONENT_TOKEN, DROPDOWN_COMPONENT_TOKEN, DROPDOWN_BUTTON_COMPONENT_TOKEN, FORM_FIELD_COMPONENT_TOKEN, SideMenuService, HEADER_COMPONENT_TOKEN, INPUT_GROUP_COMPONENT_TOKEN, LOADER_COMPONENT_TOKEN, MULTISELECT_COMPONENT_TOKEN, NUMBER_INPUT_COMPONENT_TOKEN, PasswordStrength, PASSWORD_COMPONENT_TOKEN, RADIOBUTTON_COMPONENT_TOKEN, SECTION_COMPONENT_TOKEN, ACTION_BUTTON_GROUP_COMPONENT_TOKEN, queryListChanged, GenericFieldType, DatasourceDirective, GENERIC_FIELD_COMPONENT_TOKEN, SIDE_MENU_COMPONENT_TOKEN, MENU_TOKEN, SideMenuProviderService, SNACKBAR_COMPONENT_TOKEN, LayoutType, STEPPER_COMPONENT_TOKEN, SWITCH_COMPONENT_TOKEN, MAX_COLUMN_CHAR_COUNT, TableService, DEFAULT_PAGINATION, ColumnModel, RowModel, TableSelectionMode, TABLE_COLUMN_PROVIDER, TABLE_COMPONENT_TOKEN, TAG_COMPONENT_TOKEN, TEXTAREA_COMPONENT_TOKEN, DEFAULT_DEBOUNCE_TIME, ScreenSizeService, isFilterEmpty, ButtonShortCutDirective, FILTER_COMPONENT_TOKEN, downloadFile, TableDatasourceDirective, TableFilterDirective, TableColumnDirective } from '@verisoft/ui-core';
|
|
9
9
|
import * as i3 from '@ngx-translate/core';
|
|
10
10
|
import { TranslateModule, TranslatePipe } from '@ngx-translate/core';
|
|
11
11
|
import * as i1$2 from '@angular/forms';
|
|
@@ -57,6 +57,10 @@ const Icons = {
|
|
|
57
57
|
check: 'check-lg',
|
|
58
58
|
envelope: 'envelope',
|
|
59
59
|
loader: 'loader',
|
|
60
|
+
map: 'map-empty',
|
|
61
|
+
file: 'file',
|
|
62
|
+
folder: 'folder',
|
|
63
|
+
arrowCounterclockwise: 'arrow-counterclockwise'
|
|
60
64
|
};
|
|
61
65
|
|
|
62
66
|
class BreadcrumbComponent extends BreadcrumbCoreComponent {
|
|
@@ -631,13 +635,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
631
635
|
}] } });
|
|
632
636
|
|
|
633
637
|
class ConfirmDialogComponent extends UnsubscribeComponent {
|
|
634
|
-
dialogService;
|
|
635
|
-
cdr;
|
|
636
|
-
constructor(dialogService, cdr) {
|
|
637
|
-
super();
|
|
638
|
-
this.dialogService = dialogService;
|
|
639
|
-
this.cdr = cdr;
|
|
640
|
-
}
|
|
638
|
+
dialogService = inject(DialogService);
|
|
639
|
+
cdr = inject(ChangeDetectorRef);
|
|
641
640
|
visible = false;
|
|
642
641
|
closable = false;
|
|
643
642
|
data = { severity: 'primary', headerIcon: 'info-circle' };
|
|
@@ -657,39 +656,46 @@ class ConfirmDialogComponent extends UnsubscribeComponent {
|
|
|
657
656
|
this.cdr.detectChanges();
|
|
658
657
|
});
|
|
659
658
|
}
|
|
659
|
+
onKeyDown(event) {
|
|
660
|
+
if (!this.visible)
|
|
661
|
+
return;
|
|
662
|
+
if (event.key === 'Enter' || event.key === ' ') {
|
|
663
|
+
event.preventDefault();
|
|
664
|
+
this.dialogClick(true);
|
|
665
|
+
}
|
|
666
|
+
if (event.key === 'Escape') {
|
|
667
|
+
event.preventDefault();
|
|
668
|
+
this.dialogClick(false);
|
|
669
|
+
}
|
|
670
|
+
}
|
|
660
671
|
dialogClick(confirm) {
|
|
661
672
|
const { confirmButtonFn, cancelButtonFn } = this.data;
|
|
662
673
|
if (confirm && confirmButtonFn) {
|
|
663
674
|
confirmButtonFn();
|
|
664
675
|
}
|
|
665
|
-
if (!confirm && cancelButtonFn) {
|
|
676
|
+
else if (!confirm && cancelButtonFn) {
|
|
666
677
|
cancelButtonFn();
|
|
667
678
|
}
|
|
668
679
|
this.visible = false;
|
|
669
680
|
this.cdr.detectChanges();
|
|
670
681
|
}
|
|
671
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: ConfirmDialogComponent, deps:
|
|
672
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: ConfirmDialogComponent, isStandalone: true, selector: "v-confirm-dialog", providers: [
|
|
673
|
-
{
|
|
674
|
-
provide: CONFIRM_DIALOG_COMPONENT_TOKEN,
|
|
675
|
-
useExisting: ConfirmDialogComponent,
|
|
676
|
-
},
|
|
682
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: ConfirmDialogComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
683
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: ConfirmDialogComponent, isStandalone: true, selector: "v-confirm-dialog", host: { listeners: { "document:keydown": "onKeyDown($event)" }, properties: { "attr.tabindex": "visible ? \"0\" : null" } }, providers: [
|
|
684
|
+
{ provide: CONFIRM_DIALOG_COMPONENT_TOKEN, useExisting: ConfirmDialogComponent },
|
|
677
685
|
], usesInheritance: true, ngImport: i0, template: "<gov-dialog\n [open]=\"visible\"\n [attr.block-close]=\"data.closable !== undefined ? !data.closable : false\"\n [attr.block-backdrop-close]=\"data.closable !== undefined ? !data.closable : false\" \n [style.--dialog-max-width]=\"data.width\"\n [style.--dialog-max-height]=\"data.height\"\n role=\"dialog\"\n accessible-close-label=\"Close dialog box with more information\"\n (gov-close)=\"data.cancelButtonFn ? dialogClick(false) : (visible = false)\"\n>\n <gov-icon\n type=\"components\"\n [name]=\"data.headerIcon\"\n slot=\"icon\"\n [color]=\"data.severity | govColor\"\n />\n \n <h2 slot=\"title\">{{ data.title ?? 'Title' }}</h2>\n\n @if (data && data.innerHTML) {\n <div [innerHTML]=\"data.innerHTML\"></div>\n } @else if (data.componentType) {\n <v-dynamic-component\n [componentType]=\"data.componentType\"\n [data]=\"$any(data.data)\"\n ></v-dynamic-component>\n }\n\n <gov-button\n color=\"primary\"\n size=\"m\"\n type=\"solid\"\n slot=\"footer\"\n (gov-click)=\"data.confirmButtonFn ? dialogClick(true) : (visible = false)\"\n >\n {{ data.confirmButtonText ?? 'Yes'}}\n </gov-button>\n \n <gov-button\n [ngClass]=\"!data.showCancelButton ? 'd-none' : ''\"\n color=\"primary\"\n size=\"m\"\n type=\"outlined\"\n slot=\"footer\"\n [disabled]=\"!data.showCancelButton\"\n (gov-click)=\"data.cancelButtonFn ? dialogClick(false) : (visible = false)\"\n >\n {{ data.cancelButtonText ?? 'No' }}\n </gov-button>\n</gov-dialog>\n", styles: [":host ::ng-deep dialog{max-width:var(--dialog-max-width, 95%);max-height:var(--dialog-max-height, 95%)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: GovDesignSystemModule }, { kind: "component", type: i2.GovButton, selector: "gov-button", inputs: ["color", "disabled", "download", "expanded", "expandedMobile", "focusable", "href", "hreflang", "identifier", "loading", "name", "nativeType", "referrerpolicy", "rel", "size", "target", "type"] }, { kind: "component", type: i2.GovDialog, selector: "gov-dialog", inputs: ["accessibleCloseLabel", "accessibleCloseLabelledBy", "accessibleDescribedBy", "accessibleLabelledBy", "blockBackdropClose", "blockClose", "labelTag", "open", "role"] }, { kind: "component", type: i2.GovIcon, selector: "gov-icon", inputs: ["color", "name", "size", "type"] }, { kind: "component", type: DynamicComponent, selector: "v-dynamic-component", inputs: ["componentType", "data"] }, { kind: "pipe", type: GovColorPipe, name: "govColor" }] });
|
|
678
686
|
}
|
|
679
687
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: ConfirmDialogComponent, decorators: [{
|
|
680
688
|
type: Component,
|
|
681
|
-
args: [{ selector: 'v-confirm-dialog', imports: [
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
],
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
], template: "<gov-dialog\n [open]=\"visible\"\n [attr.block-close]=\"data.closable !== undefined ? !data.closable : false\"\n [attr.block-backdrop-close]=\"data.closable !== undefined ? !data.closable : false\" \n [style.--dialog-max-width]=\"data.width\"\n [style.--dialog-max-height]=\"data.height\"\n role=\"dialog\"\n accessible-close-label=\"Close dialog box with more information\"\n (gov-close)=\"data.cancelButtonFn ? dialogClick(false) : (visible = false)\"\n>\n <gov-icon\n type=\"components\"\n [name]=\"data.headerIcon\"\n slot=\"icon\"\n [color]=\"data.severity | govColor\"\n />\n \n <h2 slot=\"title\">{{ data.title ?? 'Title' }}</h2>\n\n @if (data && data.innerHTML) {\n <div [innerHTML]=\"data.innerHTML\"></div>\n } @else if (data.componentType) {\n <v-dynamic-component\n [componentType]=\"data.componentType\"\n [data]=\"$any(data.data)\"\n ></v-dynamic-component>\n }\n\n <gov-button\n color=\"primary\"\n size=\"m\"\n type=\"solid\"\n slot=\"footer\"\n (gov-click)=\"data.confirmButtonFn ? dialogClick(true) : (visible = false)\"\n >\n {{ data.confirmButtonText ?? 'Yes'}}\n </gov-button>\n \n <gov-button\n [ngClass]=\"!data.showCancelButton ? 'd-none' : ''\"\n color=\"primary\"\n size=\"m\"\n type=\"outlined\"\n slot=\"footer\"\n [disabled]=\"!data.showCancelButton\"\n (gov-click)=\"data.cancelButtonFn ? dialogClick(false) : (visible = false)\"\n >\n {{ data.cancelButtonText ?? 'No' }}\n </gov-button>\n</gov-dialog>\n", styles: [":host ::ng-deep dialog{max-width:var(--dialog-max-width, 95%);max-height:var(--dialog-max-height, 95%)}\n"] }]
|
|
692
|
-
}], ctorParameters: () => [{ type: i1$3.DialogService }, { type: i0.ChangeDetectorRef }] });
|
|
689
|
+
args: [{ selector: 'v-confirm-dialog', imports: [CommonModule, GovDesignSystemModule, GovColorPipe, DynamicComponent], providers: [
|
|
690
|
+
{ provide: CONFIRM_DIALOG_COMPONENT_TOKEN, useExisting: ConfirmDialogComponent },
|
|
691
|
+
], host: {
|
|
692
|
+
'(document:keydown)': 'onKeyDown($event)',
|
|
693
|
+
'[attr.tabindex]': 'visible ? "0" : null',
|
|
694
|
+
}, template: "<gov-dialog\n [open]=\"visible\"\n [attr.block-close]=\"data.closable !== undefined ? !data.closable : false\"\n [attr.block-backdrop-close]=\"data.closable !== undefined ? !data.closable : false\" \n [style.--dialog-max-width]=\"data.width\"\n [style.--dialog-max-height]=\"data.height\"\n role=\"dialog\"\n accessible-close-label=\"Close dialog box with more information\"\n (gov-close)=\"data.cancelButtonFn ? dialogClick(false) : (visible = false)\"\n>\n <gov-icon\n type=\"components\"\n [name]=\"data.headerIcon\"\n slot=\"icon\"\n [color]=\"data.severity | govColor\"\n />\n \n <h2 slot=\"title\">{{ data.title ?? 'Title' }}</h2>\n\n @if (data && data.innerHTML) {\n <div [innerHTML]=\"data.innerHTML\"></div>\n } @else if (data.componentType) {\n <v-dynamic-component\n [componentType]=\"data.componentType\"\n [data]=\"$any(data.data)\"\n ></v-dynamic-component>\n }\n\n <gov-button\n color=\"primary\"\n size=\"m\"\n type=\"solid\"\n slot=\"footer\"\n (gov-click)=\"data.confirmButtonFn ? dialogClick(true) : (visible = false)\"\n >\n {{ data.confirmButtonText ?? 'Yes'}}\n </gov-button>\n \n <gov-button\n [ngClass]=\"!data.showCancelButton ? 'd-none' : ''\"\n color=\"primary\"\n size=\"m\"\n type=\"outlined\"\n slot=\"footer\"\n [disabled]=\"!data.showCancelButton\"\n (gov-click)=\"data.cancelButtonFn ? dialogClick(false) : (visible = false)\"\n >\n {{ data.cancelButtonText ?? 'No' }}\n </gov-button>\n</gov-dialog>\n", styles: [":host ::ng-deep dialog{max-width:var(--dialog-max-width, 95%);max-height:var(--dialog-max-height, 95%)}\n"] }]
|
|
695
|
+
}], propDecorators: { onKeyDown: [{
|
|
696
|
+
type: HostListener,
|
|
697
|
+
args: ['document:keydown', ['$event']]
|
|
698
|
+
}] } });
|
|
693
699
|
|
|
694
700
|
class TooltipComponent {
|
|
695
701
|
color = input(undefined, ...(ngDevMode ? [{ debugName: "color" }] : []));
|
|
@@ -2442,87 +2448,95 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
2442
2448
|
}] } });
|
|
2443
2449
|
|
|
2444
2450
|
class TabViewItemComponent {
|
|
2445
|
-
id;
|
|
2446
|
-
index;
|
|
2447
|
-
disabled = false;
|
|
2448
2451
|
title;
|
|
2449
|
-
|
|
2452
|
+
disabled = false;
|
|
2450
2453
|
url;
|
|
2451
2454
|
contentTemplate;
|
|
2452
2455
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: TabViewItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2453
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.6", type: TabViewItemComponent, isStandalone: true, selector: "v-tab-view-item", inputs: {
|
|
2454
|
-
<ng-content
|
|
2455
|
-
|
|
2456
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.6", type: TabViewItemComponent, isStandalone: true, selector: "v-tab-view-item", inputs: { title: "title", disabled: "disabled", url: "url" }, viewQueries: [{ propertyName: "contentTemplate", first: true, predicate: ["content"], descendants: true, static: true }], ngImport: i0, template: `
|
|
2457
|
+
<ng-template #content>
|
|
2458
|
+
<ng-content></ng-content>
|
|
2459
|
+
</ng-template>
|
|
2460
|
+
`, isInline: true });
|
|
2456
2461
|
}
|
|
2457
2462
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: TabViewItemComponent, decorators: [{
|
|
2458
2463
|
type: Component,
|
|
2459
2464
|
args: [{
|
|
2460
2465
|
selector: 'v-tab-view-item',
|
|
2461
|
-
|
|
2462
|
-
|
|
2463
|
-
|
|
2466
|
+
standalone: true,
|
|
2467
|
+
template: `
|
|
2468
|
+
<ng-template #content>
|
|
2469
|
+
<ng-content></ng-content>
|
|
2470
|
+
</ng-template>
|
|
2471
|
+
`,
|
|
2464
2472
|
}]
|
|
2465
|
-
}], propDecorators: {
|
|
2466
|
-
type: Input
|
|
2467
|
-
}], index: [{
|
|
2473
|
+
}], propDecorators: { title: [{
|
|
2468
2474
|
type: Input
|
|
2469
2475
|
}], disabled: [{
|
|
2470
2476
|
type: Input
|
|
2471
|
-
}], title: [{
|
|
2472
|
-
type: Input
|
|
2473
|
-
}], content: [{
|
|
2474
|
-
type: Input
|
|
2475
2477
|
}], url: [{
|
|
2476
2478
|
type: Input
|
|
2477
2479
|
}], contentTemplate: [{
|
|
2478
2480
|
type: ViewChild,
|
|
2479
|
-
args: ['
|
|
2481
|
+
args: ['content', { static: true }]
|
|
2480
2482
|
}] } });
|
|
2481
2483
|
|
|
2482
2484
|
class TabViewComponent {
|
|
2483
|
-
|
|
2484
|
-
|
|
2485
|
-
useRouting = false;
|
|
2485
|
+
projectedTabs;
|
|
2486
|
+
_mode = signal('content', ...(ngDevMode ? [{ debugName: "_mode" }] : []));
|
|
2486
2487
|
items = [];
|
|
2487
|
-
|
|
2488
|
+
set mode(value) {
|
|
2489
|
+
this._mode.set(value ?? 'content');
|
|
2490
|
+
}
|
|
2491
|
+
modeSig = this._mode.asReadonly();
|
|
2492
|
+
_activeIndex = signal(0, ...(ngDevMode ? [{ debugName: "_activeIndex" }] : []));
|
|
2493
|
+
set activeIndex(value) {
|
|
2494
|
+
this._activeIndex.set(value ?? 0);
|
|
2495
|
+
}
|
|
2496
|
+
activeIndexSig = this._activeIndex.asReadonly();
|
|
2488
2497
|
activeIndexChange = new EventEmitter();
|
|
2489
|
-
|
|
2490
|
-
|
|
2491
|
-
|
|
2498
|
+
tabs = signal([], ...(ngDevMode ? [{ debugName: "tabs" }] : []));
|
|
2499
|
+
route = inject(ActivatedRoute);
|
|
2500
|
+
router = inject(Router);
|
|
2501
|
+
constructor() {
|
|
2502
|
+
this.router.events.subscribe(event => {
|
|
2503
|
+
if (event instanceof NavigationEnd) {
|
|
2504
|
+
const idx = this.tabs().findIndex(tab => this.router.isActive(tab.url ?? '', false));
|
|
2505
|
+
if (idx >= 0)
|
|
2506
|
+
this._activeIndex.set(idx);
|
|
2507
|
+
}
|
|
2508
|
+
});
|
|
2492
2509
|
}
|
|
2493
|
-
|
|
2494
|
-
this.
|
|
2495
|
-
this.cd.detectChanges();
|
|
2510
|
+
ngAfterContentInit() {
|
|
2511
|
+
this.tabs.set(this.projectedTabs.toArray());
|
|
2496
2512
|
}
|
|
2497
|
-
|
|
2498
|
-
if (this.
|
|
2499
|
-
this.
|
|
2500
|
-
this.activeIndexChange.emit(this.activeIndex);
|
|
2513
|
+
selectTab(index) {
|
|
2514
|
+
if (this.modeSig() === 'content' && this._activeIndex() !== index) {
|
|
2515
|
+
this._activeIndex.set(index);
|
|
2501
2516
|
}
|
|
2502
|
-
this.activeIndexChange.emit(index);
|
|
2503
|
-
this.cd.detectChanges();
|
|
2504
2517
|
}
|
|
2505
|
-
|
|
2506
|
-
|
|
2507
|
-
index === this.activeIndex;
|
|
2508
|
-
});
|
|
2509
|
-
this.cd.detectChanges();
|
|
2518
|
+
get relativeRoute() {
|
|
2519
|
+
return this.route;
|
|
2510
2520
|
}
|
|
2511
2521
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: TabViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2512
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: TabViewComponent, isStandalone: true, selector: "v-tab-view", inputs: {
|
|
2522
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: TabViewComponent, isStandalone: true, selector: "v-tab-view", inputs: { items: "items", mode: "mode", activeIndex: "activeIndex" }, outputs: { activeIndexChange: "activeIndexChange" }, queries: [{ propertyName: "projectedTabs", predicate: TabViewItemComponent }], ngImport: i0, template: "<div class=\"gov-tabs\">\n <div class=\"gov-tabs__tabs\" role=\"tablist\">\n @for (tab of tabs(); track tab; let i = $index) {\n <button\n class=\"gov-tabs__btn\"\n role=\"tab\"\n [disabled]=\"tab.disabled\"\n [routerLink]=\"modeSig() === 'router' ? tab.url : null\"\n [relativeTo]=\"modeSig() === 'router' ? relativeRoute : null\"\n routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{ exact: true }\"\n #rla=\"routerLinkActive\"\n [attr.aria-selected]=\"\n modeSig() === 'router'\n ? rla.isActive\n : activeIndexSig() === i\n \"\n (click)=\"modeSig() === 'content' && selectTab(i)\"\n >\n {{ tab.title | translate }}\n </button>\n\n }\n </div>\n <div class=\"gov-tabs__tabs\">\n @if (modeSig() === 'content') {\n <div class=\"gov-tabs__content\">\n @for (tab of tabs(); track tab; let i = $index) {\n <div class=\"gov-tabs__tab\" [class.active]=\"activeIndexSig() === i\">\n <ng-container *ngTemplateOutlet=\"tab.contentTemplate\"></ng-container>\n </div>\n }\n </div>\n }\n\n @if (modeSig() === 'router') {\n <router-outlet></router-outlet>\n }\n </div>\n</div>\n", styles: [".gov-tabs__tabs{position:relative;width:100%;margin-bottom:0%;overflow-x:clip}.gov-tabs__tab{display:none;opacity:0;transform:translateY(10px);transition:opacity .3s ease,transform .3s ease}.gov-tabs__tab.active{display:block;opacity:1;transform:translateY(0)}.gov-tabs__btn{font-size:medium;padding:10px 20px;border:none;border-bottom:2px solid transparent;font-weight:700}.gov-tabs__btn[aria-selected=true]:after{display:block;width:100%;height:2px;background-color:var(--border-primary);position:absolute;bottom:-2px;left:0}.gov-tabs__content{margin-top:var(--spacing-m-nudge);flex-wrap:wrap;width:100%}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
2513
2523
|
}
|
|
2514
2524
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: TabViewComponent, decorators: [{
|
|
2515
2525
|
type: Component,
|
|
2516
|
-
args: [{ selector: 'v-tab-view',
|
|
2517
|
-
|
|
2526
|
+
args: [{ selector: 'v-tab-view', standalone: true, imports: [
|
|
2527
|
+
NgTemplateOutlet,
|
|
2528
|
+
RouterLink,
|
|
2529
|
+
RouterLinkActive,
|
|
2530
|
+
RouterOutlet,
|
|
2531
|
+
TranslatePipe,
|
|
2532
|
+
], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"gov-tabs\">\n <div class=\"gov-tabs__tabs\" role=\"tablist\">\n @for (tab of tabs(); track tab; let i = $index) {\n <button\n class=\"gov-tabs__btn\"\n role=\"tab\"\n [disabled]=\"tab.disabled\"\n [routerLink]=\"modeSig() === 'router' ? tab.url : null\"\n [relativeTo]=\"modeSig() === 'router' ? relativeRoute : null\"\n routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{ exact: true }\"\n #rla=\"routerLinkActive\"\n [attr.aria-selected]=\"\n modeSig() === 'router'\n ? rla.isActive\n : activeIndexSig() === i\n \"\n (click)=\"modeSig() === 'content' && selectTab(i)\"\n >\n {{ tab.title | translate }}\n </button>\n\n }\n </div>\n <div class=\"gov-tabs__tabs\">\n @if (modeSig() === 'content') {\n <div class=\"gov-tabs__content\">\n @for (tab of tabs(); track tab; let i = $index) {\n <div class=\"gov-tabs__tab\" [class.active]=\"activeIndexSig() === i\">\n <ng-container *ngTemplateOutlet=\"tab.contentTemplate\"></ng-container>\n </div>\n }\n </div>\n }\n\n @if (modeSig() === 'router') {\n <router-outlet></router-outlet>\n }\n </div>\n</div>\n", styles: [".gov-tabs__tabs{position:relative;width:100%;margin-bottom:0%;overflow-x:clip}.gov-tabs__tab{display:none;opacity:0;transform:translateY(10px);transition:opacity .3s ease,transform .3s ease}.gov-tabs__tab.active{display:block;opacity:1;transform:translateY(0)}.gov-tabs__btn{font-size:medium;padding:10px 20px;border:none;border-bottom:2px solid transparent;font-weight:700}.gov-tabs__btn[aria-selected=true]:after{display:block;width:100%;height:2px;background-color:var(--border-primary);position:absolute;bottom:-2px;left:0}.gov-tabs__content{margin-top:var(--spacing-m-nudge);flex-wrap:wrap;width:100%}\n"] }]
|
|
2533
|
+
}], ctorParameters: () => [], propDecorators: { projectedTabs: [{
|
|
2518
2534
|
type: ContentChildren,
|
|
2519
2535
|
args: [TabViewItemComponent]
|
|
2520
|
-
}], highlight: [{
|
|
2521
|
-
type: Input
|
|
2522
|
-
}], useRouting: [{
|
|
2523
|
-
type: Input
|
|
2524
2536
|
}], items: [{
|
|
2525
2537
|
type: Input
|
|
2538
|
+
}], mode: [{
|
|
2539
|
+
type: Input
|
|
2526
2540
|
}], activeIndex: [{
|
|
2527
2541
|
type: Input
|
|
2528
2542
|
}], activeIndexChange: [{
|
|
@@ -2611,6 +2625,7 @@ class TableComponent {
|
|
|
2611
2625
|
download = new EventEmitter();
|
|
2612
2626
|
delete = new EventEmitter();
|
|
2613
2627
|
save = new EventEmitter();
|
|
2628
|
+
tableRef;
|
|
2614
2629
|
cdRef = inject(ChangeDetectorRef);
|
|
2615
2630
|
router = inject(Router);
|
|
2616
2631
|
route = inject(ActivatedRoute);
|
|
@@ -2621,6 +2636,11 @@ class TableComponent {
|
|
|
2621
2636
|
pageSizeOptions = DEFAULT_PAGINATION.map((x) => ({ value: x.toString() }));
|
|
2622
2637
|
allSelected = false;
|
|
2623
2638
|
icons = Icons;
|
|
2639
|
+
focusedIndex = -1;
|
|
2640
|
+
isMouseDown = false;
|
|
2641
|
+
dragActive = false;
|
|
2642
|
+
dragStartIndex = -1;
|
|
2643
|
+
initialSelectionSet = new Set();
|
|
2624
2644
|
get govPageSize() {
|
|
2625
2645
|
return this.pageSize.toString();
|
|
2626
2646
|
}
|
|
@@ -2640,11 +2660,6 @@ class TableComponent {
|
|
|
2640
2660
|
get selectedCount() {
|
|
2641
2661
|
return this.selected.length;
|
|
2642
2662
|
}
|
|
2643
|
-
constructor() {
|
|
2644
|
-
effect(() => {
|
|
2645
|
-
this.reactToSignals();
|
|
2646
|
-
});
|
|
2647
|
-
}
|
|
2648
2663
|
ngOnChanges(changes) {
|
|
2649
2664
|
if (changes['data']) {
|
|
2650
2665
|
this.updateRowModels();
|
|
@@ -2667,18 +2682,21 @@ class TableComponent {
|
|
|
2667
2682
|
this.updateColumnModels();
|
|
2668
2683
|
this.cdRef.detectChanges();
|
|
2669
2684
|
}
|
|
2685
|
+
this.tableRef.nativeElement.tabIndex = 0;
|
|
2686
|
+
this.tableRef.nativeElement.addEventListener('keydown', this.handleKeydown.bind(this));
|
|
2687
|
+
}
|
|
2688
|
+
ngOnDestroy() {
|
|
2689
|
+
this.tableRef.nativeElement.removeEventListener('keydown', this.handleKeydown.bind(this));
|
|
2670
2690
|
}
|
|
2671
2691
|
sortColumn(column) {
|
|
2672
2692
|
if (column.sortable) {
|
|
2673
2693
|
column.sortDirection = getNextSortDirection(column.sortDirection, this.sortMultiple);
|
|
2674
2694
|
if (!this.sortMultiple) {
|
|
2675
2695
|
this.tableColumns
|
|
2676
|
-
.filter(
|
|
2677
|
-
.forEach(
|
|
2678
|
-
x.sortDirection = undefined;
|
|
2679
|
-
});
|
|
2696
|
+
.filter(x => x !== column)
|
|
2697
|
+
.forEach(x => (x.sortDirection = undefined));
|
|
2680
2698
|
}
|
|
2681
|
-
const sorts = this.getSorts().map(
|
|
2699
|
+
const sorts = this.getSorts().map(x => ({
|
|
2682
2700
|
field: 'row.' + x.field,
|
|
2683
2701
|
direction: x.direction,
|
|
2684
2702
|
}));
|
|
@@ -2699,14 +2717,14 @@ class TableComponent {
|
|
|
2699
2717
|
this.currentPage = 1;
|
|
2700
2718
|
this.fireLazyLoad();
|
|
2701
2719
|
}
|
|
2702
|
-
|
|
2720
|
+
performClickSelect(row, event) {
|
|
2703
2721
|
if (event.ctrlKey || event.metaKey) {
|
|
2704
2722
|
this.navigate(row, event);
|
|
2705
2723
|
return;
|
|
2706
2724
|
}
|
|
2707
2725
|
if (this.selectionMode === 'single') {
|
|
2708
2726
|
row.selected = !row.selected;
|
|
2709
|
-
this.tableRows.forEach(
|
|
2727
|
+
this.tableRows.forEach(x => (x !== row ? (x.selected = false) : null));
|
|
2710
2728
|
this.fireSelectionChange();
|
|
2711
2729
|
}
|
|
2712
2730
|
else if (this.selectionMode === 'multiple') {
|
|
@@ -2714,10 +2732,67 @@ class TableComponent {
|
|
|
2714
2732
|
this.fireSelectionChange();
|
|
2715
2733
|
}
|
|
2716
2734
|
}
|
|
2717
|
-
|
|
2718
|
-
if (
|
|
2735
|
+
onRowMouseDown(row, index, event) {
|
|
2736
|
+
if (event.button === 1) {
|
|
2737
|
+
this.navigateNewWindow(row, event);
|
|
2719
2738
|
return;
|
|
2720
2739
|
}
|
|
2740
|
+
if (this.selectionMode !== 'multiple') {
|
|
2741
|
+
return;
|
|
2742
|
+
}
|
|
2743
|
+
this.isMouseDown = true;
|
|
2744
|
+
this.dragActive = false;
|
|
2745
|
+
this.dragStartIndex = index;
|
|
2746
|
+
this.initialSelectionSet = new Set(this.tableRows.filter(r => r.selected).map(r => r.row));
|
|
2747
|
+
}
|
|
2748
|
+
onRowMouseEnter(index) {
|
|
2749
|
+
this.setFocusedIndex(index);
|
|
2750
|
+
if (this.isMouseDown && this.selectionMode === 'multiple') {
|
|
2751
|
+
this.dragActive = true;
|
|
2752
|
+
this.updateDragSelection(index);
|
|
2753
|
+
}
|
|
2754
|
+
}
|
|
2755
|
+
onRowMouseUp(row, index, event) {
|
|
2756
|
+
if (this.dragActive && this.selectionMode === 'multiple') {
|
|
2757
|
+
this.updateDragSelection(index);
|
|
2758
|
+
this.stopDrag();
|
|
2759
|
+
return;
|
|
2760
|
+
}
|
|
2761
|
+
if (!this.isMouseDown) {
|
|
2762
|
+
return;
|
|
2763
|
+
}
|
|
2764
|
+
if (!this.dragActive) {
|
|
2765
|
+
this.performClickSelect(row, event);
|
|
2766
|
+
}
|
|
2767
|
+
this.stopDrag();
|
|
2768
|
+
}
|
|
2769
|
+
updateDragSelection(endIndex) {
|
|
2770
|
+
const min = Math.min(this.dragStartIndex, endIndex);
|
|
2771
|
+
const max = Math.max(this.dragStartIndex, endIndex);
|
|
2772
|
+
this.tableRows.forEach((r, i) => {
|
|
2773
|
+
if (this.initialSelectionSet.has(r.row)) {
|
|
2774
|
+
r.selected = true;
|
|
2775
|
+
}
|
|
2776
|
+
else if (i >= min && i <= max) {
|
|
2777
|
+
r.selected = true;
|
|
2778
|
+
}
|
|
2779
|
+
else {
|
|
2780
|
+
r.selected = this.initialSelectionSet.has(r.row);
|
|
2781
|
+
}
|
|
2782
|
+
});
|
|
2783
|
+
this.fireSelectionChange();
|
|
2784
|
+
this.allSelected = this.tableRows.every(r => r.selected);
|
|
2785
|
+
this.cdRef.markForCheck();
|
|
2786
|
+
}
|
|
2787
|
+
stopDrag() {
|
|
2788
|
+
this.isMouseDown = false;
|
|
2789
|
+
this.dragActive = false;
|
|
2790
|
+
this.dragStartIndex = -1;
|
|
2791
|
+
this.initialSelectionSet = new Set();
|
|
2792
|
+
}
|
|
2793
|
+
navigate(row, event) {
|
|
2794
|
+
if (this.disableCustomClicks)
|
|
2795
|
+
return;
|
|
2721
2796
|
event.preventDefault();
|
|
2722
2797
|
const targetUrl = this.createUrl(row);
|
|
2723
2798
|
if (event.ctrlKey || event.metaKey) {
|
|
@@ -2730,16 +2805,15 @@ class TableComponent {
|
|
|
2730
2805
|
}
|
|
2731
2806
|
}
|
|
2732
2807
|
navigateNewWindow(row, event) {
|
|
2733
|
-
if (this.disableCustomClicks || event.button !== 1)
|
|
2808
|
+
if (this.disableCustomClicks || event.button !== 1)
|
|
2734
2809
|
return;
|
|
2735
|
-
}
|
|
2736
2810
|
event.preventDefault();
|
|
2737
2811
|
const targetUrl = this.createUrl(row);
|
|
2738
2812
|
window.open(this.router.serializeUrl(this.router.createUrlTree([targetUrl], { relativeTo: this.route })), '_blank');
|
|
2739
2813
|
}
|
|
2740
2814
|
toggleAll(event) {
|
|
2741
2815
|
this.allSelected = event.detail.checked;
|
|
2742
|
-
this.tableRows.forEach(
|
|
2816
|
+
this.tableRows.forEach(x => (x.selected = this.allSelected));
|
|
2743
2817
|
this.fireSelectionChange();
|
|
2744
2818
|
}
|
|
2745
2819
|
toggleDetail(row) {
|
|
@@ -2748,7 +2822,7 @@ class TableComponent {
|
|
|
2748
2822
|
}
|
|
2749
2823
|
selectRowCheckbox(row, event) {
|
|
2750
2824
|
row.selected = event.detail.checked;
|
|
2751
|
-
this.allSelected = this.tableRows.every(
|
|
2825
|
+
this.allSelected = this.tableRows.every(x => x.selected);
|
|
2752
2826
|
this.fireSelectionChange();
|
|
2753
2827
|
}
|
|
2754
2828
|
truncate(text) {
|
|
@@ -2758,49 +2832,101 @@ class TableComponent {
|
|
|
2758
2832
|
}
|
|
2759
2833
|
deselectAll() {
|
|
2760
2834
|
this.allSelected = false;
|
|
2761
|
-
this.tableRows.forEach(x => (x.selected =
|
|
2835
|
+
this.tableRows.forEach(x => (x.selected = false));
|
|
2836
|
+
this.fireSelectionChange();
|
|
2762
2837
|
}
|
|
2763
|
-
|
|
2764
|
-
|
|
2765
|
-
|
|
2838
|
+
setFocusedIndex(index) {
|
|
2839
|
+
this.focusedIndex = index;
|
|
2840
|
+
this.cdRef.markForCheck();
|
|
2841
|
+
}
|
|
2842
|
+
handleKeydown(event) {
|
|
2843
|
+
const rows = this.tableRowView;
|
|
2844
|
+
if (rows.length === 0)
|
|
2845
|
+
return;
|
|
2846
|
+
if (event.key === ' ' || event.code === 'Space') {
|
|
2847
|
+
if (this.focusedIndex >= 0 && this.selectionMode) {
|
|
2848
|
+
this.toggleSelection(rows[this.focusedIndex]);
|
|
2849
|
+
}
|
|
2850
|
+
event.preventDefault();
|
|
2851
|
+
return;
|
|
2852
|
+
}
|
|
2853
|
+
let newIndex = this.focusedIndex;
|
|
2854
|
+
switch (event.key) {
|
|
2855
|
+
case 'ArrowDown':
|
|
2856
|
+
newIndex = Math.min(newIndex + 1, rows.length - 1);
|
|
2857
|
+
break;
|
|
2858
|
+
case 'ArrowUp':
|
|
2859
|
+
newIndex = Math.max(newIndex - 1, 0);
|
|
2860
|
+
break;
|
|
2861
|
+
case 'PageDown':
|
|
2862
|
+
newIndex = Math.min(newIndex + 5, rows.length - 1);
|
|
2863
|
+
break;
|
|
2864
|
+
case 'PageUp':
|
|
2865
|
+
newIndex = Math.max(newIndex - 5, 0);
|
|
2866
|
+
break;
|
|
2867
|
+
case 'Home':
|
|
2868
|
+
newIndex = 0;
|
|
2869
|
+
break;
|
|
2870
|
+
case 'End':
|
|
2871
|
+
newIndex = rows.length - 1;
|
|
2872
|
+
break;
|
|
2873
|
+
default:
|
|
2874
|
+
return;
|
|
2875
|
+
}
|
|
2876
|
+
if (newIndex !== this.focusedIndex) {
|
|
2877
|
+
this.focusedIndex = newIndex;
|
|
2878
|
+
this.scrollRowIntoView(newIndex);
|
|
2879
|
+
event.preventDefault();
|
|
2880
|
+
this.cdRef.markForCheck();
|
|
2766
2881
|
}
|
|
2767
|
-
|
|
2882
|
+
}
|
|
2883
|
+
toggleSelection(row) {
|
|
2884
|
+
if (this.selectionMode === 'single') {
|
|
2885
|
+
const shouldSelect = !row.selected;
|
|
2886
|
+
this.tableRows.forEach(r => (r.selected = r === row && shouldSelect));
|
|
2887
|
+
}
|
|
2888
|
+
else if (this.selectionMode === 'multiple') {
|
|
2889
|
+
row.selected = !row.selected;
|
|
2890
|
+
}
|
|
2891
|
+
this.fireSelectionChange();
|
|
2892
|
+
this.allSelected = this.tableRows.every(r => r.selected);
|
|
2893
|
+
}
|
|
2894
|
+
scrollRowIntoView(index) {
|
|
2895
|
+
const rowEl = this.tableRef.nativeElement.querySelectorAll('tbody tr.v-table__row')[index];
|
|
2896
|
+
if (rowEl) {
|
|
2897
|
+
rowEl.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
|
|
2898
|
+
}
|
|
2899
|
+
}
|
|
2900
|
+
createUrl(row) {
|
|
2901
|
+
return row.customRoute ?? row.id.toString();
|
|
2768
2902
|
}
|
|
2769
2903
|
reactToSignals() {
|
|
2770
2904
|
const reload = this.service.reload();
|
|
2771
|
-
if (typeof reload === 'symbol') {
|
|
2772
|
-
this.fireLazyLoad();
|
|
2773
|
-
}
|
|
2774
|
-
else if (reload.name === this.tableName) {
|
|
2905
|
+
if (typeof reload === 'symbol' || reload.name === this.tableName) {
|
|
2775
2906
|
this.fireLazyLoad();
|
|
2776
2907
|
}
|
|
2777
2908
|
this.deselectAll();
|
|
2778
2909
|
}
|
|
2779
2910
|
updateColumnModels() {
|
|
2780
|
-
const viewColumns = this.viewColumns
|
|
2781
|
-
|
|
2782
|
-
.map((x) => x.getDefinition());
|
|
2783
|
-
this.tableColumns = [...(this._columns ?? []), ...(viewColumns ?? [])].map((x) => new ColumnModel(x));
|
|
2911
|
+
const viewColumns = this.viewColumns?.toArray().map(x => x.getDefinition());
|
|
2912
|
+
this.tableColumns = [...(this._columns ?? []), ...(viewColumns ?? [])].map(x => new ColumnModel(x));
|
|
2784
2913
|
}
|
|
2785
2914
|
updateRowModels() {
|
|
2786
|
-
this.tableRows = (this.data ?? []).map(
|
|
2915
|
+
this.tableRows = (this.data ?? []).map(x => new RowModel(x, false, false, undefined, undefined, undefined, this.customRoute, this.entityKey));
|
|
2916
|
+
this.focusedIndex = -1;
|
|
2787
2917
|
}
|
|
2788
2918
|
fireSelectionChange() {
|
|
2789
|
-
const selectedRows = this.tableRows
|
|
2790
|
-
.filter((x) => x.selected)
|
|
2791
|
-
.map((x) => x.row);
|
|
2919
|
+
const selectedRows = this.tableRows.filter(x => x.selected).map(x => x.row);
|
|
2792
2920
|
this.selectionChange.emit(selectedRows);
|
|
2793
2921
|
}
|
|
2794
2922
|
selectSelected() {
|
|
2795
2923
|
if (this.selection?.length && this.selectionMode) {
|
|
2796
|
-
const selection = this.selectionMode === TableSelectionMode.single
|
|
2797
|
-
? [this.selection[0]]
|
|
2798
|
-
: this.selection;
|
|
2924
|
+
const selection = this.selectionMode === TableSelectionMode.single ? [this.selection[0]] : this.selection;
|
|
2799
2925
|
const selectionSet = new Set(selection);
|
|
2800
|
-
this.tableRows.forEach(
|
|
2926
|
+
this.tableRows.forEach(item => {
|
|
2801
2927
|
item.selected = selectionSet.has(item.row);
|
|
2802
2928
|
});
|
|
2803
|
-
this.allSelected = this.tableRows.every(
|
|
2929
|
+
this.allSelected = this.tableRows.every(x => x.selected);
|
|
2804
2930
|
}
|
|
2805
2931
|
}
|
|
2806
2932
|
fireLazyLoad() {
|
|
@@ -2817,23 +2943,32 @@ class TableComponent {
|
|
|
2817
2943
|
}
|
|
2818
2944
|
getSorts() {
|
|
2819
2945
|
return this.tableColumns
|
|
2820
|
-
.filter(
|
|
2821
|
-
.map(
|
|
2946
|
+
.filter(x => x.sortable && x.sortDirection)
|
|
2947
|
+
.map(x => ({
|
|
2822
2948
|
field: x.id,
|
|
2823
2949
|
direction: x.sortDirection,
|
|
2824
2950
|
}));
|
|
2825
2951
|
}
|
|
2952
|
+
getQueryParams(column, row) {
|
|
2953
|
+
if (column.queryParams) {
|
|
2954
|
+
if (typeof column.queryParams === 'function') {
|
|
2955
|
+
return column.queryParams(row);
|
|
2956
|
+
}
|
|
2957
|
+
return column.queryParams;
|
|
2958
|
+
}
|
|
2959
|
+
return null;
|
|
2960
|
+
}
|
|
2826
2961
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: TableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2827
2962
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: TableComponent, isStandalone: true, selector: "v-table", inputs: { sorters: "sorters", data: "data", total: "total", filter: "filter", extraFilter: "extraFilter", loading: "loading", scrollable: "scrollable", pageSize: "pageSize", currentPage: "currentPage", showPaginator: "showPaginator", userTableWrapper: "userTableWrapper", sortMultiple: "sortMultiple", lazy: "lazy", selectionMode: "selectionMode", selection: "selection", showPageSizePicker: "showPageSizePicker", entityKey: "entityKey", customRoute: "customRoute", disableCustomClicks: "disableCustomClicks", tableName: "tableName", size: "size", showActionButtons: "showActionButtons", maximumColumnLength: "maximumColumnLength", columns: "columns" }, outputs: { selectionChange: "selectionChange", lazyLoad: "lazyLoad", download: "download", delete: "delete", save: "save" }, providers: [
|
|
2828
2963
|
{
|
|
2829
2964
|
provide: TABLE_COMPONENT_TOKEN,
|
|
2830
2965
|
useExisting: TableComponent,
|
|
2831
2966
|
},
|
|
2832
|
-
], queries: [{ propertyName: "rowDetailTemplate", first: true, predicate: ["rowDetail"], descendants: true }, { propertyName: "rowDetailButtonTemplate", first: true, predicate: ["rowDetailButton"], descendants: true }, { propertyName: "viewColumns", predicate: TABLE_COLUMN_PROVIDER }], usesOnChanges: true, ngImport: i0, template: "@if (selectionMode === 'multiple' && showActionButtons) {\n<gov-flex\n class=\"gov-table-complex__actions mt-2\"\n justify-content=\"space-between\"\n align-items=\"center\"\n>\n <div class=\"gov-table-complex__records-selected\">\n {{ selectedCount }} {{ ('TABLES.CHOSEN_RECORDS' | translate) ?? 'chosen records'}}\n </div>\n <div>\n <gov-button color=\"primary\" size=\"s\" type=\"solid\" (gov-click)=\"delete.emit(selected)\">\n {{ ('BUTTONS.DELETE' | translate) ?? 'Delete'}}\n </gov-button>\n <gov-button color=\"primary\" size=\"s\" type=\"solid\" (gov-click)=\"save.emit(selected)\">\n {{ ('BUTTONS.SAVE' | translate) ?? 'Save'}}\n </gov-button>\n <gov-button color=\"primary\" size=\"s\" type=\"solid\" (gov-click)=\"download.emit(selected)\">\n {{ ('BUTTONS.DOWNLOAD' | translate) ?? 'Download'}}\n </gov-button>\n <gov-button color=\"primary\" size=\"s\" type=\"solid\" (gov-click)=\"deselectAll()\">\n {{ ('BUTTONS.CANCEL' | translate) ?? 'Cancel'}}\n </gov-button>\n </div>\n</gov-flex>\n}\n\n<div\n class=\" v-table gov-table\"\n [attr.size]=\"size | govSize\"\n>\n <table class=\"v-table__table\">\n <thead class=\"v-table__head\">\n <tr class=\"v-table__header\">\n @if (this.rowDetailTemplate) {\n <th></th>\n } @if (selectionMode === 'multiple') {\n <th scope=\"col\">\n <gov-form-checkbox\n [checked]=\"allSelected\"\n (gov-change)=\"toggleAll($event)\"\n />\n </th>\n }\n @for (column of tableColumns; track column; let index = $index) {\n @if (column.visible && column.forceVisibility !== 'hidden') {\n <th\n scope=\"col\"\n [style]=\"{'text-align': column.textAlign}\"\n [class]=\"column.columnClass\"\n >\n <span\n class=\"gov-table--fit-width\"\n [class.v-table__sortable]=\"column.sortable\"\n [class.v-table__sortable--desc]=\"column.sortable && column.sortDirection === 'desc'\"\n [class.v-table__sortable--asc]=\"column.sortable && column.sortDirection === 'asc'\"\n (click)=\"sortColumn(column)\"\n >\n {{ column.headerGetter(column.id, index) | translate }}\n </span>\n </th>\n } @if (this.rowDetailButtonTemplate) {\n <th></th>\n }}\n </tr>\n </thead>\n @if (loading) {\n <v-loader />\n } @else {\n <tbody class=\"v-table__body\">\n @for (data of tableRowView; track data.id; let rowIndex = $index) {\n <tr\n class=\"v-table__row\"\n [class.gov-table--highlight]=\"data.selected && selectionMode\"\n (click)=\"selectRow(data, $event)\"\n (dblclick)=\"navigate(data, $event)\"\n (mousedown)=\"navigateNewWindow(data, $event)\"\n >\n @if (this.rowDetailTemplate) {\n <td>\n <gov-button\n [size]=\"size | govSize\"\n color=\"primary\"\n type=\"solid\"\n (gov-click)=\"toggleDetail(data)\"\n >\n <gov-icon\n [name]=\"data.expanded ? 'chevron-up' : 'chevron-down'\"\n [size]=\"size | govSize\"\n slot=\"icon-start\"\n ></gov-icon>\n </gov-button>\n </td>\n } @if (selectionMode === 'multiple') {\n <td class=\"gov-table--fit-content gov-table--border-right\">\n <gov-form-checkbox\n no-label\n [checked]=\"data.selected\"\n [size]=\"size | govSize\"\n (gov-change)=\"selectRowCheckbox(data, $event)\"\n />\n </td>\n }\n @for (column of tableColumns; track column; let columnIndex = $index) {\n @if (column.visible && column.forceVisibility !== 'hidden') {\n <td\n [style]=\"{'text-align': column.textAlign}\"\n [class]=\"column.columnClass!\"\n [class.v-auto-cell]=\"column.template\"\n >\n @if (column.template) {\n <ng-container\n *ngTemplateOutlet=\"\n column.template;\n context: { $implicit: data.row }\n \"\n ></ng-container>\n } @else {\n <span\n [queryParams]=\"column.queryParams ? column.queryParams : undefined\"\n [routerLink]=\"column.routerLink ? column.routerLink(data.row) : undefined\"\n [innerHTML]=\"truncate(column.valueGetter(data.row, rowIndex))\"\n [attr.title]=\"\n column.valueGetter(data.row, rowIndex).length > maximumColumnLength\n ? column.valueGetter(data.row, rowIndex)\n : null\n \"\n ></span>\n }\n </td>\n @if (this.rowDetailButtonTemplate) {\n <td scope=\"\">\n <ng-container\n *ngTemplateOutlet=\"\n this.rowDetailButtonTemplate;\n context: { $implicit: data.row }\n \"\n ></ng-container>\n </td>\n }}}\n </tr>\n @if (this.rowDetailTemplate && data.expanded) {\n <tr>\n <td [attr.colspan]=\"tableColumns.length + 1\">\n <ng-container\n class=\"w-100\"\n *ngTemplateOutlet=\"\n this.rowDetailTemplate;\n context: { $implicit: data.row }\n \"\n ></ng-container>\n </td>\n </tr>\n } } @if (!tableRows.length && !loading){\n <td [attr.colspan]=\"tableColumns.length\">\n <gov-empty align=\"center\" [size]=\"size | govSize\">\n <gov-icon slot=\"icon\" name=\"empty-file\" type=\"colored\"/>\n <p slot=\"headline\">\n {{ ('TABLES.EMPTY' | translate) ?? 'No records were found!' }}\n </p>\n </gov-empty>\n </td>\n }\n </tbody>\n }\n </table>\n @if(showPaginator) {\n <div class=\"v-table__paginator d-flex pt-3 pb-3\">\n @if (tableRows.length) {\n <div class=\"mt-2\">\n <v-table-pagination-info\n [showingText]=\"'TABLES.PAGINATION.SHOWING' | translate\"\n [toText]=\"'TABLES.PAGINATION.TO' | translate\"\n [ofText]=\"'TABLES.PAGINATION.OF' | translate\"\n [entriesText]=\"'TABLES.PAGINATION.ENTRIES' | translate\"\n [currentPage]=\"currentPage\"\n [pageSize]=\"pageSize\"\n [total]=\"total\"\n />\n </div>\n <div class=\"ms-4\">\n <gov-form-select\n [options]=\"pageSizeOptions\"\n [value]=\"govPageSize\"\n (gov-change)=\"changePageSize($event)\"\n />\n </div>\n }\n <div class=\"ms-4\">\n <gov-pagination\n [current]=\"currentPage\"\n [pageSize]=\"pageSize\"\n [total]=\"total\"\n [type]=\"'button'\"\n (gov-page)=\"changePage($event)\"\n />\n </div>\n </div>\n }\n</div>\n", styles: ["@charset \"UTF-8\";.v-table{position:relative;height:100%;display:flex;flex-direction:column}.v-table__sortable{transition:color .15s ease-in-out;cursor:pointer}.v-table__sortable:after{content:\"\\2191\\2193\";margin-left:.5rem;text-decoration:none;display:inline-block}.v-table__sortable--asc:after{content:\"\\2191\"}.v-table__sortable--desc:after{content:\"\\2193\"}.v-table__header{background-color:var(--background-block-primary);position:sticky;top:0;z-index:2}.v-table__table{width:100%}.v-table__paginator{background-color:var(--background-neutral-white);justify-content:end;position:sticky;bottom:0;z-index:3}.gov-table{width:100%;overflow-x:auto}.gov-table table{table-layout:auto;min-width:100%;border-collapse:collapse}.gov-table table tr.gov-table--highlight td{background-color:var(--background-primary-subtle)}.gov-table table th,.gov-table table td{border-bottom:1px solid var(--border-subtlest);text-align:left}.gov-table table th.gov-table--align-right,.gov-table table td.gov-table--align-right{text-align:right}.gov-table table th.gov-table--vertical-align-top,.gov-table table td.gov-table--vertical-align-top{vertical-align:top}.gov-table table th.gov-table--border-right,.gov-table table td.gov-table--border-right{border-right:1px solid var(--border-subtlest)}.gov-table table th.gov-table--border-left,.gov-table table td.gov-table--border-left{border-left:1px solid var(--border-subtlest)}.gov-table table th.gov-table--border-bottom-none,.gov-table table td.gov-table--border-bottom-none{border-bottom:none}.gov-table table th.gov-table--nowrap,.gov-table table td.gov-table--nowrap{white-space:nowrap}.gov-table table th.gov-table--fit-width,.gov-table table td.gov-table--fit-width{width:1px}.gov-table table th{color:var(--text-primary);background-color:var(--background-neutral-subtlest)}.gov-table table td{background-color:var(--background-neutral-white)}.gov-table table tr.open td{padding:var(--spacing-s) var(--spacing-m)}.gov-table summary::-webkit-details-marker{display:none}.gov-table[size=s] table{border-bottom-left-radius:var(--corner-radius-s);border-bottom-right-radius:var(--corner-radius-s)}.gov-table[size=s] table th,.gov-table[size=s] table td{height:var(--height-2xl);padding:0 var(--spacing-s);font-size:var(--font-size-body-s);line-height:150%;font-weight:400}.gov-table[size=s] table th{font-weight:700}.gov-table[size=m] table{border-bottom-left-radius:var(--corner-radius-m);border-bottom-right-radius:var(--corner-radius-m)}.gov-table[size=m] table th,.gov-table[size=m] table td{height:var(--height-3xl);padding:0 var(--spacing-m);font-size:var(--font-size-body-m);line-height:150%;font-weight:400}.gov-table[size=m] table th{font-weight:700}.gov-table[size=l] table{border-bottom-left-radius:var(--corner-radius-l);border-bottom-right-radius:var(--corner-radius-l)}.gov-table[size=l] table th,.gov-table[size=l] table td{height:var(--height-4xl);padding:0 var(--spacing-l);font-size:var(--font-size-body-l);line-height:150%;font-weight:400}.gov-table[size=l] table th{font-weight:700}.gov-table-complex__name,.gov-table-complex__description{margin:0;color:var(--text-primary)}.gov-table-complex__actions{color:var(--text-white-fixed);background-color:var(--background-primary);padding:var(--spacing-xs) var(--spacing-s)}.gov-table-complex__per-page{width:185px;white-space:nowrap}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: GovDesignSystemModule }, { kind: "component", type: i2.GovButton, selector: "gov-button", inputs: ["color", "disabled", "download", "expanded", "expandedMobile", "focusable", "href", "hreflang", "identifier", "loading", "name", "nativeType", "referrerpolicy", "rel", "size", "target", "type"] }, { kind: "component", type: i2.GovEmpty, selector: "gov-empty", inputs: ["direction", "size"] }, { kind: "component", type: i2.GovFlex, selector: "gov-flex", inputs: ["alignContent", "alignItems", "alignSelf", "direction", "gap", "justifyContent", "responsive", "wrap"] }, { kind: "component", type: i2.GovFormCheckbox, selector: "gov-form-checkbox", inputs: ["checked", "disabled", "identifier", "indeterminate", "invalid", "name", "noLabel", "required", "size", "value"] }, { kind: "component", type: i2.GovFormSelect, selector: "gov-form-select", inputs: ["disabled", "identifier", "invalid", "name", "options", "required", "size", "success", "value"] }, { kind: "component", type: i2.GovIcon, selector: "gov-icon", inputs: ["color", "name", "size", "type"] }, { kind: "component", type: i2.GovPagination, selector: "gov-pagination", inputs: ["accessiblePageLabel", "accessibleSelectLabel", "color", "current", "labelEnd", "labelNext", "labelPrev", "labelStart", "link", "maxPages", "pageSize", "selectIdentifier", "size", "total", "type"] }, { kind: "directive", type: i2.BooleanValueAccessor, selector: "gov-form-checkbox,gov-form-switch" }, { kind: "directive", type: i2.SelectValueAccessor, selector: "gov-form-select, gov-form-multi-select" }, { kind: "ngmodule", type: TranslateModule }, { kind: "component", type: LoaderComponent, selector: "v-loader", inputs: ["size", "message"] }, { kind: "component", type: TablePaginationInfoComponent, selector: "v-table-pagination-info", inputs: ["showingText", "toText", "ofText", "entriesText", "currentPage", "pageSize", "total"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "pipe", type: GovSizePipe, name: "govSize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2967
|
+
], queries: [{ propertyName: "rowDetailTemplate", first: true, predicate: ["rowDetail"], descendants: true }, { propertyName: "rowDetailButtonTemplate", first: true, predicate: ["rowDetailButton"], descendants: true }, { propertyName: "viewColumns", predicate: TABLE_COLUMN_PROVIDER }], viewQueries: [{ propertyName: "tableRef", first: true, predicate: ["tableRef"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "@if (selectionMode === 'multiple' && showActionButtons) {\n <gov-flex class=\"gov-table-complex__actions mt-2\" justify-content=\"space-between\" align-items=\"center\">\n <div class=\"gov-table-complex__records-selected\">\n {{ selectedCount }} {{ ('TABLES.CHOSEN_RECORDS' | translate) ?? 'chosen records' }}\n </div>\n <div>\n <gov-button color=\"primary\" size=\"s\" type=\"solid\" (gov-click)=\"delete.emit(selected)\">\n {{ ('BUTTONS.DELETE' | translate) ?? 'Delete' }}\n </gov-button>\n <gov-button color=\"primary\" size=\"s\" type=\"solid\" (gov-click)=\"save.emit(selected)\">\n {{ ('BUTTONS.SAVE' | translate) ?? 'Save' }}\n </gov-button>\n <gov-button color=\"primary\" size=\"s\" type=\"solid\" (gov-click)=\"download.emit(selected)\">\n {{ ('BUTTONS.DOWNLOAD' | translate) ?? 'Download' }}\n </gov-button>\n <gov-button color=\"primary\" size=\"s\" type=\"solid\" (gov-click)=\"deselectAll()\">\n {{ ('BUTTONS.CANCEL' | translate) ?? 'Cancel' }}\n </gov-button>\n </div>\n </gov-flex>\n}\n\n<div class=\"v-table gov-table\" [attr.size]=\"size | govSize\">\n <table #tableRef class=\"v-table__table\">\n <thead class=\"v-table__head\">\n <tr class=\"v-table__header\">\n @if (rowDetailTemplate) {\n <th></th>\n }\n @if (selectionMode === 'multiple') {\n <th scope=\"col\">\n <gov-form-checkbox [checked]=\"allSelected\" (gov-change)=\"toggleAll($event)\" />\n </th>\n }\n @for (column of tableColumns; track column; let index = $index) {\n @if (column.visible && column.forceVisibility !== 'hidden') {\n <th scope=\"col\" [style]=\"{'text-align': column.textAlign}\" [class]=\"column.columnClass\">\n <span\n class=\"gov-table--fit-width\"\n [class.v-table__sortable]=\"column.sortable\"\n [class.v-table__sortable--desc]=\"column.sortable && column.sortDirection === 'desc'\"\n [class.v-table__sortable--asc]=\"column.sortable && column.sortDirection === 'asc'\"\n (click)=\"sortColumn(column)\"\n >\n {{ column.headerGetter(column.id, index) | translate }}\n </span>\n </th>\n }\n }\n @if (rowDetailButtonTemplate) {\n <th></th>\n }\n </tr>\n </thead>\n\n @if (loading) {\n <v-loader />\n } @else {\n <tbody class=\"v-table__body\">\n @for (data of tableRowView; track data.id; let rowIndex = $index) {\n <tr\n class=\"v-table__row\"\n [class.gov-table--highlight]=\"data.selected && selectionMode\"\n [class.v-table__row--focused]=\"rowIndex === focusedIndex\"\n [attr.tabindex]=\"0\"\n [attr.disable-custom-clicks]=\"disableCustomClicks || null\"\n (mousedown)=\"onRowMouseDown(data, rowIndex, $event)\"\n (mouseup)=\"onRowMouseUp(data, rowIndex, $event)\"\n (mouseenter)=\"onRowMouseEnter(rowIndex)\"\n (dblclick)=\"navigate(data, $event)\"\n >\n @if (rowDetailTemplate) {\n <td>\n <gov-button [size]=\"size | govSize\" color=\"primary\" type=\"solid\" (gov-click)=\"toggleDetail(data)\">\n <gov-icon\n [name]=\"data.expanded ? 'chevron-up' : 'chevron-down'\"\n [size]=\"size | govSize\"\n slot=\"icon-start\"\n ></gov-icon>\n </gov-button>\n </td>\n }\n @if (selectionMode === 'multiple') {\n <td class=\"gov-table--fit-content gov-table--border-right\">\n <gov-form-checkbox\n no-label\n [checked]=\"data.selected\"\n [size]=\"size | govSize\"\n (gov-change)=\"selectRowCheckbox(data, $event)\"\n />\n </td>\n }\n @for (column of tableColumns; track column; let columnIndex = $index) {\n @if (column.visible && column.forceVisibility !== 'hidden') {\n <td\n [style]=\"{'text-align': column.textAlign}\"\n [class]=\"column.columnClass!\"\n [class.v-auto-cell]=\"column.template\"\n >\n @if (column.template) {\n <ng-container *ngTemplateOutlet=\"column.template; context: { $implicit: data.row }\"></ng-container>\n } @else {\n <span\n [routerLink]=\"column.routerLink ? column.routerLink(data.row) : null\"\n [queryParams]=\"getQueryParams(column, data.row)\"\n [innerHTML]=\"truncate(column.valueGetter(data.row, rowIndex))\"\n [attr.title]=\"column.valueGetter(data.row, rowIndex).length > maximumColumnLength ? column.valueGetter(data.row, rowIndex) : null\"\n ></span>\n }\n </td>\n }\n }\n @if (rowDetailButtonTemplate) {\n <td>\n <ng-container *ngTemplateOutlet=\"rowDetailButtonTemplate; context: { $implicit: data.row }\"></ng-container>\n </td>\n }\n </tr>\n\n @if (rowDetailTemplate && data.expanded) {\n <tr>\n <td [attr.colspan]=\"tableColumns.length + (selectionMode === 'multiple' ? 1 : 0) + (rowDetailTemplate ? 1 : 0) + (rowDetailButtonTemplate ? 1 : 0)\">\n <ng-container *ngTemplateOutlet=\"rowDetailTemplate; context: { $implicit: data.row }\"></ng-container>\n </td>\n </tr>\n }\n }\n\n @if (!tableRows.length && !loading) {\n <tr>\n <td [attr.colspan]=\"tableColumns.length + (selectionMode === 'multiple' ? 1 : 0) + (rowDetailTemplate ? 1 : 0) + (rowDetailButtonTemplate ? 1 : 0)\">\n <gov-empty align=\"center\" [size]=\"size | govSize\">\n <gov-icon slot=\"icon\" name=\"empty-file\" type=\"colored\" />\n <p slot=\"headline\">\n {{ ('TABLES.EMPTY' | translate) ?? 'No records were found!' }}\n </p>\n </gov-empty>\n </td>\n </tr>\n }\n </tbody>\n }\n </table>\n\n @if (showPaginator) {\n <div class=\"v-table__paginator d-flex pt-3 pb-3\">\n @if (tableRows.length) {\n <div class=\"mt-2\">\n <v-table-pagination-info\n [showingText]=\"'TABLES.PAGINATION.SHOWING' | translate\"\n [toText]=\"'TABLES.PAGINATION.TO' | translate\"\n [ofText]=\"'TABLES.PAGINATION.OF' | translate\"\n [entriesText]=\"'TABLES.PAGINATION.ENTRIES' | translate\"\n [currentPage]=\"currentPage\"\n [pageSize]=\"pageSize\"\n [total]=\"total\"\n />\n </div>\n <div class=\"ms-4\">\n <gov-form-select\n [options]=\"pageSizeOptions\"\n [value]=\"govPageSize\"\n (gov-change)=\"changePageSize($event)\"\n />\n </div>\n }\n <div class=\"ms-4\">\n <gov-pagination\n [current]=\"currentPage\"\n [pageSize]=\"pageSize\"\n [total]=\"total\"\n [type]=\"'button'\"\n (gov-page)=\"changePage($event)\"\n />\n </div>\n </div>\n }\n</div>\n", styles: ["@charset \"UTF-8\";.v-table{position:relative;height:100%;display:flex;flex-direction:column}.v-table__sortable{transition:color .15s ease-in-out;cursor:pointer}.v-table__sortable:after{content:\"\\2191\\2193\";margin-left:.5rem;text-decoration:none;display:inline-block}.v-table__sortable--asc:after{content:\"\\2191\"}.v-table__sortable--desc:after{content:\"\\2193\"}.v-table__header{background-color:var(--background-block-primary);position:sticky;top:0;z-index:2}.v-table__table{width:100%}.v-table__paginator{background-color:var(--background-neutral-white);justify-content:end;position:sticky;bottom:0;z-index:3}.gov-table{width:100%;overflow-x:auto}.gov-table table{table-layout:auto;min-width:100%;border-collapse:collapse}.gov-table table tr.gov-table--highlight td{background-color:var(--background-primary-subtle)}.gov-table table th,.gov-table table td{border-bottom:1px solid var(--border-subtlest);text-align:left}.gov-table table th.gov-table--align-right,.gov-table table td.gov-table--align-right{text-align:right}.gov-table table th.gov-table--vertical-align-top,.gov-table table td.gov-table--vertical-align-top{vertical-align:top}.gov-table table th.gov-table--border-right,.gov-table table td.gov-table--border-right{border-right:1px solid var(--border-subtlest)}.gov-table table th.gov-table--border-left,.gov-table table td.gov-table--border-left{border-left:1px solid var(--border-subtlest)}.gov-table table th.gov-table--border-bottom-none,.gov-table table td.gov-table--border-bottom-none{border-bottom:none}.gov-table table th.gov-table--nowrap,.gov-table table td.gov-table--nowrap{white-space:nowrap}.gov-table table th.gov-table--fit-width,.gov-table table td.gov-table--fit-width{width:1px}.gov-table table th{color:var(--text-primary);background-color:var(--background-neutral-subtlest)}.gov-table table td{background-color:var(--background-neutral-white)}.gov-table table tr.open td{padding:var(--spacing-s) var(--spacing-m)}.gov-table summary::-webkit-details-marker{display:none}.gov-table[size=s] table{border-bottom-left-radius:var(--corner-radius-s);border-bottom-right-radius:var(--corner-radius-s)}.gov-table[size=s] table th,.gov-table[size=s] table td{height:var(--height-2xl);padding:0 var(--spacing-s);font-size:var(--font-size-body-s);line-height:150%;font-weight:400}.gov-table[size=s] table th{font-weight:700}.gov-table[size=m] table{border-bottom-left-radius:var(--corner-radius-m);border-bottom-right-radius:var(--corner-radius-m)}.gov-table[size=m] table th,.gov-table[size=m] table td{height:var(--height-3xl);padding:0 var(--spacing-m);font-size:var(--font-size-body-m);line-height:150%;font-weight:400}.gov-table[size=m] table th{font-weight:700}.gov-table[size=l] table{border-bottom-left-radius:var(--corner-radius-l);border-bottom-right-radius:var(--corner-radius-l)}.gov-table[size=l] table th,.gov-table[size=l] table td{height:var(--height-4xl);padding:0 var(--spacing-l);font-size:var(--font-size-body-l);line-height:150%;font-weight:400}.gov-table[size=l] table th{font-weight:700}.gov-table-complex__name,.gov-table-complex__description{margin:0;color:var(--text-primary)}.gov-table-complex__actions{color:var(--text-white-fixed);background-color:var(--background-primary);padding:var(--spacing-xs) var(--spacing-s)}.gov-table-complex__per-page{width:185px;white-space:nowrap}.v-table__row{transition:background-color .18s ease;cursor:pointer}.v-table__row:hover>td{background-color:var(--gov-color-primary-50, #f5faff)!important}.v-table__row.gov-table--highlight:hover>td{background-color:var(--gov-color-primary-100, #e6f0ff)!important}.v-table__row[disable-custom-clicks],.v-table__row.disable-custom-clicks{cursor:default!important;pointer-events:auto}.v-table__row[disable-custom-clicks]:hover>td,.v-table__row.disable-custom-clicks:hover>td{background-color:transparent!important;background-color:var(--gov-color-primary-50, #c5dbf2)!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: GovDesignSystemModule }, { kind: "component", type: i2.GovButton, selector: "gov-button", inputs: ["color", "disabled", "download", "expanded", "expandedMobile", "focusable", "href", "hreflang", "identifier", "loading", "name", "nativeType", "referrerpolicy", "rel", "size", "target", "type"] }, { kind: "component", type: i2.GovEmpty, selector: "gov-empty", inputs: ["direction", "size"] }, { kind: "component", type: i2.GovFlex, selector: "gov-flex", inputs: ["alignContent", "alignItems", "alignSelf", "direction", "gap", "justifyContent", "responsive", "wrap"] }, { kind: "component", type: i2.GovFormCheckbox, selector: "gov-form-checkbox", inputs: ["checked", "disabled", "identifier", "indeterminate", "invalid", "name", "noLabel", "required", "size", "value"] }, { kind: "component", type: i2.GovFormSelect, selector: "gov-form-select", inputs: ["disabled", "identifier", "invalid", "name", "options", "required", "size", "success", "value"] }, { kind: "component", type: i2.GovIcon, selector: "gov-icon", inputs: ["color", "name", "size", "type"] }, { kind: "component", type: i2.GovPagination, selector: "gov-pagination", inputs: ["accessiblePageLabel", "accessibleSelectLabel", "color", "current", "labelEnd", "labelNext", "labelPrev", "labelStart", "link", "maxPages", "pageSize", "selectIdentifier", "size", "total", "type"] }, { kind: "directive", type: i2.BooleanValueAccessor, selector: "gov-form-checkbox,gov-form-switch" }, { kind: "directive", type: i2.SelectValueAccessor, selector: "gov-form-select, gov-form-multi-select" }, { kind: "ngmodule", type: TranslateModule }, { kind: "component", type: LoaderComponent, selector: "v-loader", inputs: ["size", "message"] }, { kind: "component", type: TablePaginationInfoComponent, selector: "v-table-pagination-info", inputs: ["showingText", "toText", "ofText", "entriesText", "currentPage", "pageSize", "total"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "pipe", type: GovSizePipe, name: "govSize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2833
2968
|
}
|
|
2834
2969
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: TableComponent, decorators: [{
|
|
2835
2970
|
type: Component,
|
|
2836
|
-
args: [{ selector: 'v-table', imports: [
|
|
2971
|
+
args: [{ selector: 'v-table', standalone: true, imports: [
|
|
2837
2972
|
CommonModule,
|
|
2838
2973
|
RouterModule,
|
|
2839
2974
|
GovDesignSystemModule,
|
|
@@ -2847,8 +2982,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
2847
2982
|
provide: TABLE_COMPONENT_TOKEN,
|
|
2848
2983
|
useExisting: TableComponent,
|
|
2849
2984
|
},
|
|
2850
|
-
], template: "@if (selectionMode === 'multiple' && showActionButtons) {\n<gov-flex\n class=\"gov-table-complex__actions mt-2\"\n justify-content=\"space-between\"\n align-items=\"center\"\n>\n <div class=\"gov-table-complex__records-selected\">\n {{ selectedCount }} {{ ('TABLES.CHOSEN_RECORDS' | translate) ?? 'chosen records'}}\n </div>\n <div>\n <gov-button color=\"primary\" size=\"s\" type=\"solid\" (gov-click)=\"delete.emit(selected)\">\n {{ ('BUTTONS.DELETE' | translate) ?? 'Delete'}}\n </gov-button>\n <gov-button color=\"primary\" size=\"s\" type=\"solid\" (gov-click)=\"save.emit(selected)\">\n {{ ('BUTTONS.SAVE' | translate) ?? 'Save'}}\n </gov-button>\n <gov-button color=\"primary\" size=\"s\" type=\"solid\" (gov-click)=\"download.emit(selected)\">\n {{ ('BUTTONS.DOWNLOAD' | translate) ?? 'Download'}}\n </gov-button>\n <gov-button color=\"primary\" size=\"s\" type=\"solid\" (gov-click)=\"deselectAll()\">\n {{ ('BUTTONS.CANCEL' | translate) ?? 'Cancel'}}\n </gov-button>\n </div>\n</gov-flex>\n}\n\n<div\n class=\" v-table gov-table\"\n [attr.size]=\"size | govSize\"\n>\n <table class=\"v-table__table\">\n <thead class=\"v-table__head\">\n <tr class=\"v-table__header\">\n @if (this.rowDetailTemplate) {\n <th></th>\n } @if (selectionMode === 'multiple') {\n <th scope=\"col\">\n <gov-form-checkbox\n [checked]=\"allSelected\"\n (gov-change)=\"toggleAll($event)\"\n />\n </th>\n }\n @for (column of tableColumns; track column; let index = $index) {\n @if (column.visible && column.forceVisibility !== 'hidden') {\n <th\n scope=\"col\"\n [style]=\"{'text-align': column.textAlign}\"\n [class]=\"column.columnClass\"\n >\n <span\n class=\"gov-table--fit-width\"\n [class.v-table__sortable]=\"column.sortable\"\n [class.v-table__sortable--desc]=\"column.sortable && column.sortDirection === 'desc'\"\n [class.v-table__sortable--asc]=\"column.sortable && column.sortDirection === 'asc'\"\n (click)=\"sortColumn(column)\"\n >\n {{ column.headerGetter(column.id, index) | translate }}\n </span>\n </th>\n } @if (this.rowDetailButtonTemplate) {\n <th></th>\n }}\n </tr>\n </thead>\n @if (loading) {\n <v-loader />\n } @else {\n <tbody class=\"v-table__body\">\n @for (data of tableRowView; track data.id; let rowIndex = $index) {\n <tr\n class=\"v-table__row\"\n [class.gov-table--highlight]=\"data.selected && selectionMode\"\n (click)=\"selectRow(data, $event)\"\n (dblclick)=\"navigate(data, $event)\"\n (mousedown)=\"navigateNewWindow(data, $event)\"\n >\n @if (this.rowDetailTemplate) {\n <td>\n <gov-button\n [size]=\"size | govSize\"\n color=\"primary\"\n type=\"solid\"\n (gov-click)=\"toggleDetail(data)\"\n >\n <gov-icon\n [name]=\"data.expanded ? 'chevron-up' : 'chevron-down'\"\n [size]=\"size | govSize\"\n slot=\"icon-start\"\n ></gov-icon>\n </gov-button>\n </td>\n } @if (selectionMode === 'multiple') {\n <td class=\"gov-table--fit-content gov-table--border-right\">\n <gov-form-checkbox\n no-label\n [checked]=\"data.selected\"\n [size]=\"size | govSize\"\n (gov-change)=\"selectRowCheckbox(data, $event)\"\n />\n </td>\n }\n @for (column of tableColumns; track column; let columnIndex = $index) {\n @if (column.visible && column.forceVisibility !== 'hidden') {\n <td\n [style]=\"{'text-align': column.textAlign}\"\n [class]=\"column.columnClass!\"\n [class.v-auto-cell]=\"column.template\"\n >\n @if (column.template) {\n <ng-container\n *ngTemplateOutlet=\"\n column.template;\n context: { $implicit: data.row }\n \"\n ></ng-container>\n } @else {\n <span\n [queryParams]=\"column.queryParams ? column.queryParams : undefined\"\n [routerLink]=\"column.routerLink ? column.routerLink(data.row) : undefined\"\n [innerHTML]=\"truncate(column.valueGetter(data.row, rowIndex))\"\n [attr.title]=\"\n column.valueGetter(data.row, rowIndex).length > maximumColumnLength\n ? column.valueGetter(data.row, rowIndex)\n : null\n \"\n ></span>\n }\n </td>\n @if (this.rowDetailButtonTemplate) {\n <td scope=\"\">\n <ng-container\n *ngTemplateOutlet=\"\n this.rowDetailButtonTemplate;\n context: { $implicit: data.row }\n \"\n ></ng-container>\n </td>\n }}}\n </tr>\n @if (this.rowDetailTemplate && data.expanded) {\n <tr>\n <td [attr.colspan]=\"tableColumns.length + 1\">\n <ng-container\n class=\"w-100\"\n *ngTemplateOutlet=\"\n this.rowDetailTemplate;\n context: { $implicit: data.row }\n \"\n ></ng-container>\n </td>\n </tr>\n } } @if (!tableRows.length && !loading){\n <td [attr.colspan]=\"tableColumns.length\">\n <gov-empty align=\"center\" [size]=\"size | govSize\">\n <gov-icon slot=\"icon\" name=\"empty-file\" type=\"colored\"/>\n <p slot=\"headline\">\n {{ ('TABLES.EMPTY' | translate) ?? 'No records were found!' }}\n </p>\n </gov-empty>\n </td>\n }\n </tbody>\n }\n </table>\n @if(showPaginator) {\n <div class=\"v-table__paginator d-flex pt-3 pb-3\">\n @if (tableRows.length) {\n <div class=\"mt-2\">\n <v-table-pagination-info\n [showingText]=\"'TABLES.PAGINATION.SHOWING' | translate\"\n [toText]=\"'TABLES.PAGINATION.TO' | translate\"\n [ofText]=\"'TABLES.PAGINATION.OF' | translate\"\n [entriesText]=\"'TABLES.PAGINATION.ENTRIES' | translate\"\n [currentPage]=\"currentPage\"\n [pageSize]=\"pageSize\"\n [total]=\"total\"\n />\n </div>\n <div class=\"ms-4\">\n <gov-form-select\n [options]=\"pageSizeOptions\"\n [value]=\"govPageSize\"\n (gov-change)=\"changePageSize($event)\"\n />\n </div>\n }\n <div class=\"ms-4\">\n <gov-pagination\n [current]=\"currentPage\"\n [pageSize]=\"pageSize\"\n [total]=\"total\"\n [type]=\"'button'\"\n (gov-page)=\"changePage($event)\"\n />\n </div>\n </div>\n }\n</div>\n", styles: ["@charset \"UTF-8\";.v-table{position:relative;height:100%;display:flex;flex-direction:column}.v-table__sortable{transition:color .15s ease-in-out;cursor:pointer}.v-table__sortable:after{content:\"\\2191\\2193\";margin-left:.5rem;text-decoration:none;display:inline-block}.v-table__sortable--asc:after{content:\"\\2191\"}.v-table__sortable--desc:after{content:\"\\2193\"}.v-table__header{background-color:var(--background-block-primary);position:sticky;top:0;z-index:2}.v-table__table{width:100%}.v-table__paginator{background-color:var(--background-neutral-white);justify-content:end;position:sticky;bottom:0;z-index:3}.gov-table{width:100%;overflow-x:auto}.gov-table table{table-layout:auto;min-width:100%;border-collapse:collapse}.gov-table table tr.gov-table--highlight td{background-color:var(--background-primary-subtle)}.gov-table table th,.gov-table table td{border-bottom:1px solid var(--border-subtlest);text-align:left}.gov-table table th.gov-table--align-right,.gov-table table td.gov-table--align-right{text-align:right}.gov-table table th.gov-table--vertical-align-top,.gov-table table td.gov-table--vertical-align-top{vertical-align:top}.gov-table table th.gov-table--border-right,.gov-table table td.gov-table--border-right{border-right:1px solid var(--border-subtlest)}.gov-table table th.gov-table--border-left,.gov-table table td.gov-table--border-left{border-left:1px solid var(--border-subtlest)}.gov-table table th.gov-table--border-bottom-none,.gov-table table td.gov-table--border-bottom-none{border-bottom:none}.gov-table table th.gov-table--nowrap,.gov-table table td.gov-table--nowrap{white-space:nowrap}.gov-table table th.gov-table--fit-width,.gov-table table td.gov-table--fit-width{width:1px}.gov-table table th{color:var(--text-primary);background-color:var(--background-neutral-subtlest)}.gov-table table td{background-color:var(--background-neutral-white)}.gov-table table tr.open td{padding:var(--spacing-s) var(--spacing-m)}.gov-table summary::-webkit-details-marker{display:none}.gov-table[size=s] table{border-bottom-left-radius:var(--corner-radius-s);border-bottom-right-radius:var(--corner-radius-s)}.gov-table[size=s] table th,.gov-table[size=s] table td{height:var(--height-2xl);padding:0 var(--spacing-s);font-size:var(--font-size-body-s);line-height:150%;font-weight:400}.gov-table[size=s] table th{font-weight:700}.gov-table[size=m] table{border-bottom-left-radius:var(--corner-radius-m);border-bottom-right-radius:var(--corner-radius-m)}.gov-table[size=m] table th,.gov-table[size=m] table td{height:var(--height-3xl);padding:0 var(--spacing-m);font-size:var(--font-size-body-m);line-height:150%;font-weight:400}.gov-table[size=m] table th{font-weight:700}.gov-table[size=l] table{border-bottom-left-radius:var(--corner-radius-l);border-bottom-right-radius:var(--corner-radius-l)}.gov-table[size=l] table th,.gov-table[size=l] table td{height:var(--height-4xl);padding:0 var(--spacing-l);font-size:var(--font-size-body-l);line-height:150%;font-weight:400}.gov-table[size=l] table th{font-weight:700}.gov-table-complex__name,.gov-table-complex__description{margin:0;color:var(--text-primary)}.gov-table-complex__actions{color:var(--text-white-fixed);background-color:var(--background-primary);padding:var(--spacing-xs) var(--spacing-s)}.gov-table-complex__per-page{width:185px;white-space:nowrap}\n"] }]
|
|
2851
|
-
}],
|
|
2985
|
+
], template: "@if (selectionMode === 'multiple' && showActionButtons) {\n <gov-flex class=\"gov-table-complex__actions mt-2\" justify-content=\"space-between\" align-items=\"center\">\n <div class=\"gov-table-complex__records-selected\">\n {{ selectedCount }} {{ ('TABLES.CHOSEN_RECORDS' | translate) ?? 'chosen records' }}\n </div>\n <div>\n <gov-button color=\"primary\" size=\"s\" type=\"solid\" (gov-click)=\"delete.emit(selected)\">\n {{ ('BUTTONS.DELETE' | translate) ?? 'Delete' }}\n </gov-button>\n <gov-button color=\"primary\" size=\"s\" type=\"solid\" (gov-click)=\"save.emit(selected)\">\n {{ ('BUTTONS.SAVE' | translate) ?? 'Save' }}\n </gov-button>\n <gov-button color=\"primary\" size=\"s\" type=\"solid\" (gov-click)=\"download.emit(selected)\">\n {{ ('BUTTONS.DOWNLOAD' | translate) ?? 'Download' }}\n </gov-button>\n <gov-button color=\"primary\" size=\"s\" type=\"solid\" (gov-click)=\"deselectAll()\">\n {{ ('BUTTONS.CANCEL' | translate) ?? 'Cancel' }}\n </gov-button>\n </div>\n </gov-flex>\n}\n\n<div class=\"v-table gov-table\" [attr.size]=\"size | govSize\">\n <table #tableRef class=\"v-table__table\">\n <thead class=\"v-table__head\">\n <tr class=\"v-table__header\">\n @if (rowDetailTemplate) {\n <th></th>\n }\n @if (selectionMode === 'multiple') {\n <th scope=\"col\">\n <gov-form-checkbox [checked]=\"allSelected\" (gov-change)=\"toggleAll($event)\" />\n </th>\n }\n @for (column of tableColumns; track column; let index = $index) {\n @if (column.visible && column.forceVisibility !== 'hidden') {\n <th scope=\"col\" [style]=\"{'text-align': column.textAlign}\" [class]=\"column.columnClass\">\n <span\n class=\"gov-table--fit-width\"\n [class.v-table__sortable]=\"column.sortable\"\n [class.v-table__sortable--desc]=\"column.sortable && column.sortDirection === 'desc'\"\n [class.v-table__sortable--asc]=\"column.sortable && column.sortDirection === 'asc'\"\n (click)=\"sortColumn(column)\"\n >\n {{ column.headerGetter(column.id, index) | translate }}\n </span>\n </th>\n }\n }\n @if (rowDetailButtonTemplate) {\n <th></th>\n }\n </tr>\n </thead>\n\n @if (loading) {\n <v-loader />\n } @else {\n <tbody class=\"v-table__body\">\n @for (data of tableRowView; track data.id; let rowIndex = $index) {\n <tr\n class=\"v-table__row\"\n [class.gov-table--highlight]=\"data.selected && selectionMode\"\n [class.v-table__row--focused]=\"rowIndex === focusedIndex\"\n [attr.tabindex]=\"0\"\n [attr.disable-custom-clicks]=\"disableCustomClicks || null\"\n (mousedown)=\"onRowMouseDown(data, rowIndex, $event)\"\n (mouseup)=\"onRowMouseUp(data, rowIndex, $event)\"\n (mouseenter)=\"onRowMouseEnter(rowIndex)\"\n (dblclick)=\"navigate(data, $event)\"\n >\n @if (rowDetailTemplate) {\n <td>\n <gov-button [size]=\"size | govSize\" color=\"primary\" type=\"solid\" (gov-click)=\"toggleDetail(data)\">\n <gov-icon\n [name]=\"data.expanded ? 'chevron-up' : 'chevron-down'\"\n [size]=\"size | govSize\"\n slot=\"icon-start\"\n ></gov-icon>\n </gov-button>\n </td>\n }\n @if (selectionMode === 'multiple') {\n <td class=\"gov-table--fit-content gov-table--border-right\">\n <gov-form-checkbox\n no-label\n [checked]=\"data.selected\"\n [size]=\"size | govSize\"\n (gov-change)=\"selectRowCheckbox(data, $event)\"\n />\n </td>\n }\n @for (column of tableColumns; track column; let columnIndex = $index) {\n @if (column.visible && column.forceVisibility !== 'hidden') {\n <td\n [style]=\"{'text-align': column.textAlign}\"\n [class]=\"column.columnClass!\"\n [class.v-auto-cell]=\"column.template\"\n >\n @if (column.template) {\n <ng-container *ngTemplateOutlet=\"column.template; context: { $implicit: data.row }\"></ng-container>\n } @else {\n <span\n [routerLink]=\"column.routerLink ? column.routerLink(data.row) : null\"\n [queryParams]=\"getQueryParams(column, data.row)\"\n [innerHTML]=\"truncate(column.valueGetter(data.row, rowIndex))\"\n [attr.title]=\"column.valueGetter(data.row, rowIndex).length > maximumColumnLength ? column.valueGetter(data.row, rowIndex) : null\"\n ></span>\n }\n </td>\n }\n }\n @if (rowDetailButtonTemplate) {\n <td>\n <ng-container *ngTemplateOutlet=\"rowDetailButtonTemplate; context: { $implicit: data.row }\"></ng-container>\n </td>\n }\n </tr>\n\n @if (rowDetailTemplate && data.expanded) {\n <tr>\n <td [attr.colspan]=\"tableColumns.length + (selectionMode === 'multiple' ? 1 : 0) + (rowDetailTemplate ? 1 : 0) + (rowDetailButtonTemplate ? 1 : 0)\">\n <ng-container *ngTemplateOutlet=\"rowDetailTemplate; context: { $implicit: data.row }\"></ng-container>\n </td>\n </tr>\n }\n }\n\n @if (!tableRows.length && !loading) {\n <tr>\n <td [attr.colspan]=\"tableColumns.length + (selectionMode === 'multiple' ? 1 : 0) + (rowDetailTemplate ? 1 : 0) + (rowDetailButtonTemplate ? 1 : 0)\">\n <gov-empty align=\"center\" [size]=\"size | govSize\">\n <gov-icon slot=\"icon\" name=\"empty-file\" type=\"colored\" />\n <p slot=\"headline\">\n {{ ('TABLES.EMPTY' | translate) ?? 'No records were found!' }}\n </p>\n </gov-empty>\n </td>\n </tr>\n }\n </tbody>\n }\n </table>\n\n @if (showPaginator) {\n <div class=\"v-table__paginator d-flex pt-3 pb-3\">\n @if (tableRows.length) {\n <div class=\"mt-2\">\n <v-table-pagination-info\n [showingText]=\"'TABLES.PAGINATION.SHOWING' | translate\"\n [toText]=\"'TABLES.PAGINATION.TO' | translate\"\n [ofText]=\"'TABLES.PAGINATION.OF' | translate\"\n [entriesText]=\"'TABLES.PAGINATION.ENTRIES' | translate\"\n [currentPage]=\"currentPage\"\n [pageSize]=\"pageSize\"\n [total]=\"total\"\n />\n </div>\n <div class=\"ms-4\">\n <gov-form-select\n [options]=\"pageSizeOptions\"\n [value]=\"govPageSize\"\n (gov-change)=\"changePageSize($event)\"\n />\n </div>\n }\n <div class=\"ms-4\">\n <gov-pagination\n [current]=\"currentPage\"\n [pageSize]=\"pageSize\"\n [total]=\"total\"\n [type]=\"'button'\"\n (gov-page)=\"changePage($event)\"\n />\n </div>\n </div>\n }\n</div>\n", styles: ["@charset \"UTF-8\";.v-table{position:relative;height:100%;display:flex;flex-direction:column}.v-table__sortable{transition:color .15s ease-in-out;cursor:pointer}.v-table__sortable:after{content:\"\\2191\\2193\";margin-left:.5rem;text-decoration:none;display:inline-block}.v-table__sortable--asc:after{content:\"\\2191\"}.v-table__sortable--desc:after{content:\"\\2193\"}.v-table__header{background-color:var(--background-block-primary);position:sticky;top:0;z-index:2}.v-table__table{width:100%}.v-table__paginator{background-color:var(--background-neutral-white);justify-content:end;position:sticky;bottom:0;z-index:3}.gov-table{width:100%;overflow-x:auto}.gov-table table{table-layout:auto;min-width:100%;border-collapse:collapse}.gov-table table tr.gov-table--highlight td{background-color:var(--background-primary-subtle)}.gov-table table th,.gov-table table td{border-bottom:1px solid var(--border-subtlest);text-align:left}.gov-table table th.gov-table--align-right,.gov-table table td.gov-table--align-right{text-align:right}.gov-table table th.gov-table--vertical-align-top,.gov-table table td.gov-table--vertical-align-top{vertical-align:top}.gov-table table th.gov-table--border-right,.gov-table table td.gov-table--border-right{border-right:1px solid var(--border-subtlest)}.gov-table table th.gov-table--border-left,.gov-table table td.gov-table--border-left{border-left:1px solid var(--border-subtlest)}.gov-table table th.gov-table--border-bottom-none,.gov-table table td.gov-table--border-bottom-none{border-bottom:none}.gov-table table th.gov-table--nowrap,.gov-table table td.gov-table--nowrap{white-space:nowrap}.gov-table table th.gov-table--fit-width,.gov-table table td.gov-table--fit-width{width:1px}.gov-table table th{color:var(--text-primary);background-color:var(--background-neutral-subtlest)}.gov-table table td{background-color:var(--background-neutral-white)}.gov-table table tr.open td{padding:var(--spacing-s) var(--spacing-m)}.gov-table summary::-webkit-details-marker{display:none}.gov-table[size=s] table{border-bottom-left-radius:var(--corner-radius-s);border-bottom-right-radius:var(--corner-radius-s)}.gov-table[size=s] table th,.gov-table[size=s] table td{height:var(--height-2xl);padding:0 var(--spacing-s);font-size:var(--font-size-body-s);line-height:150%;font-weight:400}.gov-table[size=s] table th{font-weight:700}.gov-table[size=m] table{border-bottom-left-radius:var(--corner-radius-m);border-bottom-right-radius:var(--corner-radius-m)}.gov-table[size=m] table th,.gov-table[size=m] table td{height:var(--height-3xl);padding:0 var(--spacing-m);font-size:var(--font-size-body-m);line-height:150%;font-weight:400}.gov-table[size=m] table th{font-weight:700}.gov-table[size=l] table{border-bottom-left-radius:var(--corner-radius-l);border-bottom-right-radius:var(--corner-radius-l)}.gov-table[size=l] table th,.gov-table[size=l] table td{height:var(--height-4xl);padding:0 var(--spacing-l);font-size:var(--font-size-body-l);line-height:150%;font-weight:400}.gov-table[size=l] table th{font-weight:700}.gov-table-complex__name,.gov-table-complex__description{margin:0;color:var(--text-primary)}.gov-table-complex__actions{color:var(--text-white-fixed);background-color:var(--background-primary);padding:var(--spacing-xs) var(--spacing-s)}.gov-table-complex__per-page{width:185px;white-space:nowrap}.v-table__row{transition:background-color .18s ease;cursor:pointer}.v-table__row:hover>td{background-color:var(--gov-color-primary-50, #f5faff)!important}.v-table__row.gov-table--highlight:hover>td{background-color:var(--gov-color-primary-100, #e6f0ff)!important}.v-table__row[disable-custom-clicks],.v-table__row.disable-custom-clicks{cursor:default!important;pointer-events:auto}.v-table__row[disable-custom-clicks]:hover>td,.v-table__row.disable-custom-clicks:hover>td{background-color:transparent!important;background-color:var(--gov-color-primary-50, #c5dbf2)!important}\n"] }]
|
|
2986
|
+
}], propDecorators: { viewColumns: [{
|
|
2852
2987
|
type: ContentChildren,
|
|
2853
2988
|
args: [TABLE_COLUMN_PROVIDER]
|
|
2854
2989
|
}], rowDetailTemplate: [{
|
|
@@ -2915,6 +3050,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
2915
3050
|
type: Output
|
|
2916
3051
|
}], save: [{
|
|
2917
3052
|
type: Output
|
|
3053
|
+
}], tableRef: [{
|
|
3054
|
+
type: ViewChild,
|
|
3055
|
+
args: ['tableRef', { static: true }]
|
|
2918
3056
|
}] } });
|
|
2919
3057
|
|
|
2920
3058
|
var GovTagType;
|