@verisoft/ui-govcz 20.1.3 → 20.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +204 -74
- package/fesm2022/verisoft-ui-govcz.mjs.map +1 -1
- package/index.d.ts +53 -35
- package/package.json +4 -4
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-arrow-counterclockwise" viewBox="0 0 16 16">
|
|
2
|
+
<path fill-rule="evenodd" d="M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z"/>
|
|
3
|
+
<path d="M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466"/>
|
|
4
|
+
</svg>
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-file-earmark-text" viewBox="0 0 16 16">
|
|
2
|
+
<path d="M5.5 7a.5.5 0 0 0 0 1h5a.5.5 0 0 0 0-1zM5 9.5a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5m0 2a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5"/>
|
|
3
|
+
<path d="M9.5 0H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V4.5zm0 1v2A1.5 1.5 0 0 0 11 4.5h2V14a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1z"/>
|
|
4
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-folder" viewBox="0 0 16 16">
|
|
2
|
+
<path d="M.54 3.87.5 3a2 2 0 0 1 2-2h3.672a2 2 0 0 1 1.414.586l.828.828A2 2 0 0 0 9.828 3h3.982a2 2 0 0 1 1.992 2.181l-.637 7A2 2 0 0 1 13.174 14H2.826a2 2 0 0 1-1.991-1.819l-.637-7a2 2 0 0 1 .342-1.31zM2.19 4a1 1 0 0 0-.996 1.09l.637 7a1 1 0 0 0 .995.91h10.348a1 1 0 0 0 .995-.91l.637-7A1 1 0 0 0 13.81 4zm4.69-1.707A1 1 0 0 0 6.172 2H2.5a1 1 0 0 0-1 .981l.006.139q.323-.119.684-.12h5.396z"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-map" viewBox="0 0 16 16">
|
|
2
|
+
<path fill-rule="evenodd" d="M15.817.113A.5.5 0 0 1 16 .5v14a.5.5 0 0 1-.402.49l-5 1a.5.5 0 0 1-.196 0L5.5 15.01l-4.902.98A.5.5 0 0 1 0 15.5v-14a.5.5 0 0 1 .402-.49l5-1a.5.5 0 0 1 .196 0L10.5.99l4.902-.98a.5.5 0 0 1 .415.103M10 1.91l-4-.8v12.98l4 .8zm1 12.98 4-.8V1.11l-4 .8zm-6-.8V1.11l-4 .8v12.98z"/>
|
|
3
|
+
</svg>
|
|
@@ -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, Directive, forwardRef, ContentChildren, ContentChild, InjectionToken, NgModule, Inject } from '@angular/core';
|
|
3
3
|
import * as i1 from '@angular/router';
|
|
4
4
|
import { RouterModule, Router, ActivatedRoute, RouterOutlet, RouterLink, RouterLinkActive } 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, MULTISELECT_COMPONENT_TOKEN, GenericFieldType, DatasourceDirective, GENERIC_FIELD_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, MULTISELECT_COMPONENT_TOKEN, GenericFieldType, DatasourceDirective, GENERIC_FIELD_COMPONENT_TOKEN, DEFAULT_DEBOUNCE_TIME, ScreenSizeService, isFilterEmpty, ButtonShortCutDirective, FILTER_COMPONENT_TOKEN, ACTION_BUTTON_GROUP_COMPONENT_TOKEN, queryListChanged, LOADER_COMPONENT_TOKEN, MAX_COLUMN_CHAR_COUNT, TableService, DEFAULT_PAGINATION, ColumnModel, RowModel, TableSelectionMode, TABLE_COLUMN_PROVIDER, TABLE_COMPONENT_TOKEN, downloadFile, TableDatasourceDirective, TableFilterDirective, TableColumnDirective, FORM_FIELD_COMPONENT_TOKEN, SideMenuService, HEADER_COMPONENT_TOKEN, INPUT_GROUP_COMPONENT_TOKEN, NUMBER_INPUT_COMPONENT_TOKEN, PasswordStrength, PASSWORD_COMPONENT_TOKEN, RADIOBUTTON_COMPONENT_TOKEN, SECTION_COMPONENT_TOKEN, SIDE_MENU_COMPONENT_TOKEN, MENU_TOKEN, SideMenuProviderService, SNACKBAR_COMPONENT_TOKEN, LayoutType, STEPPER_COMPONENT_TOKEN, SWITCH_COMPONENT_TOKEN, TAG_COMPONENT_TOKEN, TEXTAREA_COMPONENT_TOKEN } 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$1 from '@angular/common';
|
|
@@ -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: "20.2.1", 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: "20.2.1", ngImport: i0, type: ConfirmDialogComponent, deps:
|
|
672
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.1", 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: "20.2.1", ngImport: i0, type: ConfirmDialogComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
683
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.1", 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: "20.2.1", 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" }] : []));
|
|
@@ -1910,6 +1916,7 @@ class TableComponent {
|
|
|
1910
1916
|
download = new EventEmitter();
|
|
1911
1917
|
delete = new EventEmitter();
|
|
1912
1918
|
save = new EventEmitter();
|
|
1919
|
+
tableRef;
|
|
1913
1920
|
cdRef = inject(ChangeDetectorRef);
|
|
1914
1921
|
router = inject(Router);
|
|
1915
1922
|
route = inject(ActivatedRoute);
|
|
@@ -1920,6 +1927,11 @@ class TableComponent {
|
|
|
1920
1927
|
pageSizeOptions = DEFAULT_PAGINATION.map((x) => ({ value: x.toString() }));
|
|
1921
1928
|
allSelected = false;
|
|
1922
1929
|
icons = Icons;
|
|
1930
|
+
focusedIndex = -1;
|
|
1931
|
+
isMouseDown = false;
|
|
1932
|
+
dragActive = false;
|
|
1933
|
+
dragStartIndex = -1;
|
|
1934
|
+
initialSelectionSet = new Set();
|
|
1923
1935
|
get govPageSize() {
|
|
1924
1936
|
return this.pageSize.toString();
|
|
1925
1937
|
}
|
|
@@ -1939,11 +1951,6 @@ class TableComponent {
|
|
|
1939
1951
|
get selectedCount() {
|
|
1940
1952
|
return this.selected.length;
|
|
1941
1953
|
}
|
|
1942
|
-
constructor() {
|
|
1943
|
-
effect(() => {
|
|
1944
|
-
this.reactToSignals();
|
|
1945
|
-
});
|
|
1946
|
-
}
|
|
1947
1954
|
ngOnChanges(changes) {
|
|
1948
1955
|
if (changes['data']) {
|
|
1949
1956
|
this.updateRowModels();
|
|
@@ -1966,18 +1973,21 @@ class TableComponent {
|
|
|
1966
1973
|
this.updateColumnModels();
|
|
1967
1974
|
this.cdRef.detectChanges();
|
|
1968
1975
|
}
|
|
1976
|
+
this.tableRef.nativeElement.tabIndex = 0;
|
|
1977
|
+
this.tableRef.nativeElement.addEventListener('keydown', this.handleKeydown.bind(this));
|
|
1978
|
+
}
|
|
1979
|
+
ngOnDestroy() {
|
|
1980
|
+
this.tableRef.nativeElement.removeEventListener('keydown', this.handleKeydown.bind(this));
|
|
1969
1981
|
}
|
|
1970
1982
|
sortColumn(column) {
|
|
1971
1983
|
if (column.sortable) {
|
|
1972
1984
|
column.sortDirection = getNextSortDirection(column.sortDirection, this.sortMultiple);
|
|
1973
1985
|
if (!this.sortMultiple) {
|
|
1974
1986
|
this.tableColumns
|
|
1975
|
-
.filter(
|
|
1976
|
-
.forEach(
|
|
1977
|
-
x.sortDirection = undefined;
|
|
1978
|
-
});
|
|
1987
|
+
.filter(x => x !== column)
|
|
1988
|
+
.forEach(x => (x.sortDirection = undefined));
|
|
1979
1989
|
}
|
|
1980
|
-
const sorts = this.getSorts().map(
|
|
1990
|
+
const sorts = this.getSorts().map(x => ({
|
|
1981
1991
|
field: 'row.' + x.field,
|
|
1982
1992
|
direction: x.direction,
|
|
1983
1993
|
}));
|
|
@@ -1998,14 +2008,14 @@ class TableComponent {
|
|
|
1998
2008
|
this.currentPage = 1;
|
|
1999
2009
|
this.fireLazyLoad();
|
|
2000
2010
|
}
|
|
2001
|
-
|
|
2011
|
+
performClickSelect(row, event) {
|
|
2002
2012
|
if (event.ctrlKey || event.metaKey) {
|
|
2003
2013
|
this.navigate(row, event);
|
|
2004
2014
|
return;
|
|
2005
2015
|
}
|
|
2006
2016
|
if (this.selectionMode === 'single') {
|
|
2007
2017
|
row.selected = !row.selected;
|
|
2008
|
-
this.tableRows.forEach(
|
|
2018
|
+
this.tableRows.forEach(x => (x !== row ? (x.selected = false) : null));
|
|
2009
2019
|
this.fireSelectionChange();
|
|
2010
2020
|
}
|
|
2011
2021
|
else if (this.selectionMode === 'multiple') {
|
|
@@ -2013,10 +2023,67 @@ class TableComponent {
|
|
|
2013
2023
|
this.fireSelectionChange();
|
|
2014
2024
|
}
|
|
2015
2025
|
}
|
|
2016
|
-
|
|
2017
|
-
if (
|
|
2026
|
+
onRowMouseDown(row, index, event) {
|
|
2027
|
+
if (event.button === 1) {
|
|
2028
|
+
this.navigateNewWindow(row, event);
|
|
2018
2029
|
return;
|
|
2019
2030
|
}
|
|
2031
|
+
if (this.selectionMode !== 'multiple') {
|
|
2032
|
+
return;
|
|
2033
|
+
}
|
|
2034
|
+
this.isMouseDown = true;
|
|
2035
|
+
this.dragActive = false;
|
|
2036
|
+
this.dragStartIndex = index;
|
|
2037
|
+
this.initialSelectionSet = new Set(this.tableRows.filter(r => r.selected).map(r => r.row));
|
|
2038
|
+
}
|
|
2039
|
+
onRowMouseEnter(index) {
|
|
2040
|
+
this.setFocusedIndex(index);
|
|
2041
|
+
if (this.isMouseDown && this.selectionMode === 'multiple') {
|
|
2042
|
+
this.dragActive = true;
|
|
2043
|
+
this.updateDragSelection(index);
|
|
2044
|
+
}
|
|
2045
|
+
}
|
|
2046
|
+
onRowMouseUp(row, index, event) {
|
|
2047
|
+
if (this.dragActive && this.selectionMode === 'multiple') {
|
|
2048
|
+
this.updateDragSelection(index);
|
|
2049
|
+
this.stopDrag();
|
|
2050
|
+
return;
|
|
2051
|
+
}
|
|
2052
|
+
if (!this.isMouseDown) {
|
|
2053
|
+
return;
|
|
2054
|
+
}
|
|
2055
|
+
if (!this.dragActive) {
|
|
2056
|
+
this.performClickSelect(row, event);
|
|
2057
|
+
}
|
|
2058
|
+
this.stopDrag();
|
|
2059
|
+
}
|
|
2060
|
+
updateDragSelection(endIndex) {
|
|
2061
|
+
const min = Math.min(this.dragStartIndex, endIndex);
|
|
2062
|
+
const max = Math.max(this.dragStartIndex, endIndex);
|
|
2063
|
+
this.tableRows.forEach((r, i) => {
|
|
2064
|
+
if (this.initialSelectionSet.has(r.row)) {
|
|
2065
|
+
r.selected = true;
|
|
2066
|
+
}
|
|
2067
|
+
else if (i >= min && i <= max) {
|
|
2068
|
+
r.selected = true;
|
|
2069
|
+
}
|
|
2070
|
+
else {
|
|
2071
|
+
r.selected = this.initialSelectionSet.has(r.row);
|
|
2072
|
+
}
|
|
2073
|
+
});
|
|
2074
|
+
this.fireSelectionChange();
|
|
2075
|
+
this.allSelected = this.tableRows.every(r => r.selected);
|
|
2076
|
+
this.cdRef.markForCheck();
|
|
2077
|
+
}
|
|
2078
|
+
stopDrag() {
|
|
2079
|
+
this.isMouseDown = false;
|
|
2080
|
+
this.dragActive = false;
|
|
2081
|
+
this.dragStartIndex = -1;
|
|
2082
|
+
this.initialSelectionSet = new Set();
|
|
2083
|
+
}
|
|
2084
|
+
navigate(row, event) {
|
|
2085
|
+
if (this.disableCustomClicks)
|
|
2086
|
+
return;
|
|
2020
2087
|
event.preventDefault();
|
|
2021
2088
|
const targetUrl = this.createUrl(row);
|
|
2022
2089
|
if (event.ctrlKey || event.metaKey) {
|
|
@@ -2029,16 +2096,15 @@ class TableComponent {
|
|
|
2029
2096
|
}
|
|
2030
2097
|
}
|
|
2031
2098
|
navigateNewWindow(row, event) {
|
|
2032
|
-
if (this.disableCustomClicks || event.button !== 1)
|
|
2099
|
+
if (this.disableCustomClicks || event.button !== 1)
|
|
2033
2100
|
return;
|
|
2034
|
-
}
|
|
2035
2101
|
event.preventDefault();
|
|
2036
2102
|
const targetUrl = this.createUrl(row);
|
|
2037
2103
|
window.open(this.router.serializeUrl(this.router.createUrlTree([targetUrl], { relativeTo: this.route })), '_blank');
|
|
2038
2104
|
}
|
|
2039
2105
|
toggleAll(event) {
|
|
2040
2106
|
this.allSelected = event.detail.checked;
|
|
2041
|
-
this.tableRows.forEach(
|
|
2107
|
+
this.tableRows.forEach(x => (x.selected = this.allSelected));
|
|
2042
2108
|
this.fireSelectionChange();
|
|
2043
2109
|
}
|
|
2044
2110
|
toggleDetail(row) {
|
|
@@ -2047,7 +2113,7 @@ class TableComponent {
|
|
|
2047
2113
|
}
|
|
2048
2114
|
selectRowCheckbox(row, event) {
|
|
2049
2115
|
row.selected = event.detail.checked;
|
|
2050
|
-
this.allSelected = this.tableRows.every(
|
|
2116
|
+
this.allSelected = this.tableRows.every(x => x.selected);
|
|
2051
2117
|
this.fireSelectionChange();
|
|
2052
2118
|
}
|
|
2053
2119
|
truncate(text) {
|
|
@@ -2057,49 +2123,101 @@ class TableComponent {
|
|
|
2057
2123
|
}
|
|
2058
2124
|
deselectAll() {
|
|
2059
2125
|
this.allSelected = false;
|
|
2060
|
-
this.tableRows.forEach(x => (x.selected =
|
|
2126
|
+
this.tableRows.forEach(x => (x.selected = false));
|
|
2127
|
+
this.fireSelectionChange();
|
|
2061
2128
|
}
|
|
2062
|
-
|
|
2063
|
-
|
|
2064
|
-
|
|
2129
|
+
setFocusedIndex(index) {
|
|
2130
|
+
this.focusedIndex = index;
|
|
2131
|
+
this.cdRef.markForCheck();
|
|
2132
|
+
}
|
|
2133
|
+
handleKeydown(event) {
|
|
2134
|
+
const rows = this.tableRowView;
|
|
2135
|
+
if (rows.length === 0)
|
|
2136
|
+
return;
|
|
2137
|
+
if (event.key === ' ' || event.code === 'Space') {
|
|
2138
|
+
if (this.focusedIndex >= 0 && this.selectionMode) {
|
|
2139
|
+
this.toggleSelection(rows[this.focusedIndex]);
|
|
2140
|
+
}
|
|
2141
|
+
event.preventDefault();
|
|
2142
|
+
return;
|
|
2143
|
+
}
|
|
2144
|
+
let newIndex = this.focusedIndex;
|
|
2145
|
+
switch (event.key) {
|
|
2146
|
+
case 'ArrowDown':
|
|
2147
|
+
newIndex = Math.min(newIndex + 1, rows.length - 1);
|
|
2148
|
+
break;
|
|
2149
|
+
case 'ArrowUp':
|
|
2150
|
+
newIndex = Math.max(newIndex - 1, 0);
|
|
2151
|
+
break;
|
|
2152
|
+
case 'PageDown':
|
|
2153
|
+
newIndex = Math.min(newIndex + this.pageSize, rows.length - 1);
|
|
2154
|
+
break;
|
|
2155
|
+
case 'PageUp':
|
|
2156
|
+
newIndex = Math.max(newIndex - this.pageSize, 0);
|
|
2157
|
+
break;
|
|
2158
|
+
case 'Home':
|
|
2159
|
+
newIndex = 0;
|
|
2160
|
+
break;
|
|
2161
|
+
case 'End':
|
|
2162
|
+
newIndex = rows.length - 1;
|
|
2163
|
+
break;
|
|
2164
|
+
default:
|
|
2165
|
+
return;
|
|
2166
|
+
}
|
|
2167
|
+
if (newIndex !== this.focusedIndex) {
|
|
2168
|
+
this.focusedIndex = newIndex;
|
|
2169
|
+
this.scrollRowIntoView(newIndex);
|
|
2170
|
+
event.preventDefault();
|
|
2171
|
+
this.cdRef.markForCheck();
|
|
2065
2172
|
}
|
|
2066
|
-
|
|
2173
|
+
}
|
|
2174
|
+
toggleSelection(row) {
|
|
2175
|
+
if (this.selectionMode === 'single') {
|
|
2176
|
+
const shouldSelect = !row.selected;
|
|
2177
|
+
this.tableRows.forEach(r => (r.selected = r === row && shouldSelect));
|
|
2178
|
+
}
|
|
2179
|
+
else if (this.selectionMode === 'multiple') {
|
|
2180
|
+
row.selected = !row.selected;
|
|
2181
|
+
}
|
|
2182
|
+
this.fireSelectionChange();
|
|
2183
|
+
this.allSelected = this.tableRows.every(r => r.selected);
|
|
2184
|
+
}
|
|
2185
|
+
scrollRowIntoView(index) {
|
|
2186
|
+
const rowEl = this.tableRef.nativeElement.querySelectorAll('tbody tr.v-table__row')[index];
|
|
2187
|
+
if (rowEl) {
|
|
2188
|
+
rowEl.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
|
|
2189
|
+
}
|
|
2190
|
+
}
|
|
2191
|
+
createUrl(row) {
|
|
2192
|
+
return row.customRoute ?? row.id.toString();
|
|
2067
2193
|
}
|
|
2068
2194
|
reactToSignals() {
|
|
2069
2195
|
const reload = this.service.reload();
|
|
2070
|
-
if (typeof reload === 'symbol') {
|
|
2071
|
-
this.fireLazyLoad();
|
|
2072
|
-
}
|
|
2073
|
-
else if (reload.name === this.tableName) {
|
|
2196
|
+
if (typeof reload === 'symbol' || reload.name === this.tableName) {
|
|
2074
2197
|
this.fireLazyLoad();
|
|
2075
2198
|
}
|
|
2076
2199
|
this.deselectAll();
|
|
2077
2200
|
}
|
|
2078
2201
|
updateColumnModels() {
|
|
2079
|
-
const viewColumns = this.viewColumns
|
|
2080
|
-
|
|
2081
|
-
.map((x) => x.getDefinition());
|
|
2082
|
-
this.tableColumns = [...(this._columns ?? []), ...(viewColumns ?? [])].map((x) => new ColumnModel(x));
|
|
2202
|
+
const viewColumns = this.viewColumns?.toArray().map(x => x.getDefinition());
|
|
2203
|
+
this.tableColumns = [...(this._columns ?? []), ...(viewColumns ?? [])].map(x => new ColumnModel(x));
|
|
2083
2204
|
}
|
|
2084
2205
|
updateRowModels() {
|
|
2085
|
-
this.tableRows = (this.data ?? []).map(
|
|
2206
|
+
this.tableRows = (this.data ?? []).map(x => new RowModel(x, false, false, undefined, undefined, undefined, this.customRoute, this.entityKey));
|
|
2207
|
+
this.focusedIndex = -1;
|
|
2086
2208
|
}
|
|
2087
2209
|
fireSelectionChange() {
|
|
2088
|
-
const selectedRows = this.tableRows
|
|
2089
|
-
.filter((x) => x.selected)
|
|
2090
|
-
.map((x) => x.row);
|
|
2210
|
+
const selectedRows = this.tableRows.filter(x => x.selected).map(x => x.row);
|
|
2091
2211
|
this.selectionChange.emit(selectedRows);
|
|
2092
2212
|
}
|
|
2093
2213
|
selectSelected() {
|
|
2094
2214
|
if (this.selection?.length && this.selectionMode) {
|
|
2095
|
-
const selection = this.selectionMode === TableSelectionMode.single
|
|
2096
|
-
? [this.selection[0]]
|
|
2097
|
-
: this.selection;
|
|
2215
|
+
const selection = this.selectionMode === TableSelectionMode.single ? [this.selection[0]] : this.selection;
|
|
2098
2216
|
const selectionSet = new Set(selection);
|
|
2099
|
-
this.tableRows.forEach(
|
|
2217
|
+
this.tableRows.forEach(item => {
|
|
2100
2218
|
item.selected = selectionSet.has(item.row);
|
|
2101
2219
|
});
|
|
2102
|
-
this.allSelected = this.tableRows.every(
|
|
2220
|
+
this.allSelected = this.tableRows.every(x => x.selected);
|
|
2103
2221
|
}
|
|
2104
2222
|
}
|
|
2105
2223
|
fireLazyLoad() {
|
|
@@ -2116,23 +2234,32 @@ class TableComponent {
|
|
|
2116
2234
|
}
|
|
2117
2235
|
getSorts() {
|
|
2118
2236
|
return this.tableColumns
|
|
2119
|
-
.filter(
|
|
2120
|
-
.map(
|
|
2237
|
+
.filter(x => x.sortable && x.sortDirection)
|
|
2238
|
+
.map(x => ({
|
|
2121
2239
|
field: x.id,
|
|
2122
2240
|
direction: x.sortDirection,
|
|
2123
2241
|
}));
|
|
2124
2242
|
}
|
|
2243
|
+
getQueryParams(column, row) {
|
|
2244
|
+
if (column.queryParams) {
|
|
2245
|
+
if (typeof column.queryParams === 'function') {
|
|
2246
|
+
return column.queryParams(row);
|
|
2247
|
+
}
|
|
2248
|
+
return column.queryParams;
|
|
2249
|
+
}
|
|
2250
|
+
return null;
|
|
2251
|
+
}
|
|
2125
2252
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: TableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2126
2253
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.1", 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: [
|
|
2127
2254
|
{
|
|
2128
2255
|
provide: TABLE_COMPONENT_TOKEN,
|
|
2129
2256
|
useExisting: TableComponent,
|
|
2130
2257
|
},
|
|
2131
|
-
], 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 });
|
|
2258
|
+
], 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 });
|
|
2132
2259
|
}
|
|
2133
2260
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: TableComponent, decorators: [{
|
|
2134
2261
|
type: Component,
|
|
2135
|
-
args: [{ selector: 'v-table', imports: [
|
|
2262
|
+
args: [{ selector: 'v-table', standalone: true, imports: [
|
|
2136
2263
|
CommonModule,
|
|
2137
2264
|
RouterModule,
|
|
2138
2265
|
GovDesignSystemModule,
|
|
@@ -2146,8 +2273,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImpor
|
|
|
2146
2273
|
provide: TABLE_COMPONENT_TOKEN,
|
|
2147
2274
|
useExisting: TableComponent,
|
|
2148
2275
|
},
|
|
2149
|
-
], 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"] }]
|
|
2150
|
-
}],
|
|
2276
|
+
], 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"] }]
|
|
2277
|
+
}], propDecorators: { viewColumns: [{
|
|
2151
2278
|
type: ContentChildren,
|
|
2152
2279
|
args: [TABLE_COLUMN_PROVIDER]
|
|
2153
2280
|
}], rowDetailTemplate: [{
|
|
@@ -2214,6 +2341,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImpor
|
|
|
2214
2341
|
type: Output
|
|
2215
2342
|
}], save: [{
|
|
2216
2343
|
type: Output
|
|
2344
|
+
}], tableRef: [{
|
|
2345
|
+
type: ViewChild,
|
|
2346
|
+
args: ['tableRef', { static: true }]
|
|
2217
2347
|
}] } });
|
|
2218
2348
|
|
|
2219
2349
|
class FeatureListFilterFieldDirective extends FilterFieldDirective {
|