@nova-ui/bits
Version:
SolarWinds Nova Framework
573 lines • 71.5 kB
JavaScript
// © 2022 SolarWinds Worldwide, LLC. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
import { CdkFooterRow, CdkFooterRowDef, CdkHeaderRow, CdkHeaderRowDef, CdkRow, CdkRowDef, } from "@angular/cdk/table";
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Directive, ElementRef, HostBinding, HostListener, Input, IterableDiffers, TemplateRef, ViewChild, ViewEncapsulation, } from "@angular/core";
import _includes from "lodash/includes";
import { Subject } from "rxjs";
import { takeUntil } from "rxjs/operators";
import { DEFAULT_INTERACTIVE_ELEMENTS } from "../../../constants/interaction.constants";
import { CheckboxStatus } from "../../selector/public-api";
import { TableStateHandlerService } from "../table-state-handler.service";
import { TableSelectionMode, } from "../types";
import * as i0 from "@angular/core";
import * as i1 from "../table-state-handler.service";
import * as i2 from "@angular/common";
import * as i3 from "../../../common/directives/click-interceptor/click-interceptor.directive";
import * as i4 from "../../selector/selector.component";
import * as i5 from "@angular/cdk/table";
import * as i6 from "../../radio/radio-group.component";
import * as i7 from "../../checkbox/checkbox.component";
/* eslint-disable */
/**
* @ignore
*/
export class TableHeaderRowDefDirective extends CdkHeaderRowDef {
set nuiHeaderRowDef(value) {
this.columns = value ?? [];
}
set nuiHeaderRowDefSticky(value) {
this.sticky = value;
}
constructor(template, _differs, tableStateHandlerService) {
super(template, _differs);
this.tableStateHandlerService = tableStateHandlerService;
}
ngOnInit() {
this.tableStateHandlerService.tableColumns = Array.from(this.columns);
if (this.tableStateHandlerService.reorderable) {
// reordering columns when drop is fired on column
this.tableColumnsSubscription =
this.tableStateHandlerService.columnsState.subscribe((tableColumns) => {
this.columns = tableColumns;
});
}
}
ngOnChanges(changes) {
super.ngOnChanges(changes);
if (changes.nuiHeaderRowDef) {
this.tableStateHandlerService.tableColumns =
changes.nuiHeaderRowDef.currentValue;
}
}
ngOnDestroy() {
if (this.tableColumnsSubscription) {
this.tableColumnsSubscription.unsubscribe();
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableHeaderRowDefDirective, deps: [{ token: i0.TemplateRef }, { token: i0.IterableDiffers }, { token: i1.TableStateHandlerService }], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: TableHeaderRowDefDirective, selector: "[nuiHeaderRowDef]", inputs: { nuiHeaderRowDef: "nuiHeaderRowDef", nuiHeaderRowDefSticky: "nuiHeaderRowDefSticky" }, host: { attributes: { "role": "row" } }, providers: [
{ provide: CdkHeaderRowDef, useExisting: TableHeaderRowDefDirective },
], usesInheritance: true, usesOnChanges: true, ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableHeaderRowDefDirective, decorators: [{
type: Directive,
args: [{
selector: "[nuiHeaderRowDef]",
providers: [
{ provide: CdkHeaderRowDef, useExisting: TableHeaderRowDefDirective },
],
host: { role: "row" },
}]
}], ctorParameters: () => [{ type: i0.TemplateRef }, { type: i0.IterableDiffers }, { type: i1.TableStateHandlerService }], propDecorators: { nuiHeaderRowDef: [{
type: Input
}], nuiHeaderRowDefSticky: [{
type: Input
}] } });
/**
* @ignore
*/
export class TableRowDefDirective extends CdkRowDef {
set nuiRowDefColumns(value) {
this.columns = value ?? [];
}
set nuiRowDefWhen(value) {
this.when = value;
}
constructor(template, _differs, tableStateHandlerService) {
super(template, _differs);
this.tableStateHandlerService = tableStateHandlerService;
}
ngOnInit() {
this.tableStateHandlerService.tableColumns = Array.from(this.columns);
if (this.tableStateHandlerService.reorderable) {
// reordering columns when drop is fired on column
this.tableColumnsSubscription =
this.tableStateHandlerService.columnsState.subscribe((tableColumns) => {
this.columns = tableColumns;
});
}
}
ngOnDestroy() {
if (this.tableColumnsSubscription) {
this.tableColumnsSubscription.unsubscribe();
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableRowDefDirective, deps: [{ token: i0.TemplateRef }, { token: i0.IterableDiffers }, { token: i1.TableStateHandlerService }], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: TableRowDefDirective, selector: "[nuiRowDef]", inputs: { nuiRowDefColumns: "nuiRowDefColumns", nuiRowDefWhen: "nuiRowDefWhen" }, providers: [{ provide: CdkRowDef, useExisting: TableRowDefDirective }], usesInheritance: true, ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableRowDefDirective, decorators: [{
type: Directive,
args: [{
selector: "[nuiRowDef]",
providers: [{ provide: CdkRowDef, useExisting: TableRowDefDirective }],
}]
}], ctorParameters: () => [{ type: i0.TemplateRef }, { type: i0.IterableDiffers }, { type: i1.TableStateHandlerService }], propDecorators: { nuiRowDefColumns: [{
type: Input
}], nuiRowDefWhen: [{
type: Input
}] } });
/**
* @ignore
*/
export class TableFooterRowDefDirective extends CdkFooterRowDef {
set nuiFooterRowDef(value) {
this.columns = value ?? [];
}
set nuiFooterRowDefSticky(value) {
this.sticky = value;
}
constructor(template, _differs, tableStateHandlerService) {
super(template, _differs);
this.tableStateHandlerService = tableStateHandlerService;
}
ngOnInit() {
this.tableStateHandlerService.tableColumns = Array.from(this.columns);
if (this.tableStateHandlerService.reorderable) {
// reordering columns when drop is fired on column
this.tableColumnsSubscription =
this.tableStateHandlerService.columnsState.subscribe((tableColumns) => {
this.columns = tableColumns;
});
}
}
ngOnDestroy() {
if (this.tableColumnsSubscription) {
this.tableColumnsSubscription.unsubscribe();
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableFooterRowDefDirective, deps: [{ token: i0.TemplateRef }, { token: i0.IterableDiffers }, { token: i1.TableStateHandlerService }], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: TableFooterRowDefDirective, selector: "[nuiFooterRowDef]", inputs: { nuiFooterRowDef: "nuiFooterRowDef", nuiFooterRowDefSticky: "nuiFooterRowDefSticky" }, providers: [
{ provide: CdkFooterRowDef, useExisting: TableFooterRowDefDirective },
], usesInheritance: true, ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableFooterRowDefDirective, decorators: [{
type: Directive,
args: [{
selector: "[nuiFooterRowDef]",
providers: [
{ provide: CdkFooterRowDef, useExisting: TableFooterRowDefDirective },
],
}]
}], ctorParameters: () => [{ type: i0.TemplateRef }, { type: i0.IterableDiffers }, { type: i1.TableStateHandlerService }], propDecorators: { nuiFooterRowDef: [{
type: Input
}], nuiFooterRowDefSticky: [{
type: Input
}] } });
/**
* @ignore
*/
export class TableHeaderRowComponent extends CdkHeaderRow {
get isDensityDefault() {
return this.density.toLowerCase() === "default";
}
get isDensityCompact() {
return this.density.toLowerCase() === "compact";
}
get isDensityTiny() {
return this.density.toLowerCase() === "tiny";
}
get hasOptions() {
return this.selectorState.selectorItems.length > 0;
}
constructor(tableStateHandlerService, changeDetectorRef) {
super();
this.tableStateHandlerService = tableStateHandlerService;
this.changeDetectorRef = changeDetectorRef;
this.density = "default";
this.selectorState = {
checkboxStatus: CheckboxStatus.Unchecked,
selectorItems: [],
};
this.onDestroy$ = new Subject();
this.selectable = this.tableStateHandlerService.selectable;
this.selectionMode = this.tableStateHandlerService.selectionMode;
}
ngOnInit() {
if (this.tableStateHandlerService.selectionEnabled) {
this.selectorState =
this.tableStateHandlerService.getSelectorState();
this.updateSelectorState();
}
// if dataSource changes we need to update selector state
this.dataSourceChangeSubscription =
this.tableStateHandlerService.dataSourceChanged
.pipe(takeUntil(this.onDestroy$))
.subscribe(() => {
this.updateSelectorState();
});
// when single row is selected we need to update selector state
// we also need to detect changes for selector state
this.selectionChangeSubscription =
this.tableStateHandlerService.selectionChanged
.pipe(takeUntil(this.onDestroy$))
.subscribe(() => {
this.updateSelectorState();
});
this.tableStateHandlerService.selectableChanged
.pipe(takeUntil(this.onDestroy$))
.subscribe((selectable) => {
this.selectable = selectable;
this.changeDetectorRef.markForCheck();
});
this.tableStateHandlerService.selectionModeChanged
.pipe(takeUntil(this.onDestroy$))
.subscribe((mode) => {
this.selectionMode = mode;
this.changeDetectorRef.markForCheck();
});
}
ngAfterViewInit() {
if (this.tableStateHandlerService.selectionEnabled) {
this.tableStateHandlerService.applyStickyStyles();
}
}
onSelectorChange(selectorValue) {
this.tableStateHandlerService.selection =
this.tableStateHandlerService.applySelector(selectorValue);
this.updateSelectorState();
this.tableStateHandlerService.selectionChanged.next(this.tableStateHandlerService.selection);
}
updateSelectorState() {
this.selectorState = this.tableStateHandlerService.getSelectorState();
this.changeDetectorRef.detectChanges();
}
ngOnDestroy() {
this.onDestroy$.next();
this.onDestroy$.complete();
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableHeaderRowComponent, deps: [{ token: i1.TableStateHandlerService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TableHeaderRowComponent, selector: "nui-header-row, tr[nui-header-row]", inputs: { density: "density" }, host: { attributes: { "role": "row" }, properties: { "class.nui-table__table-header-row_height_default": "this.isDensityDefault", "class.nui-table__table-header-row_height_compact": "this.isDensityCompact", "class.nui-table__table-header-row_height_tiny": "this.isDensityTiny" }, classAttribute: "nui-table__table-header-row" }, providers: [
{ provide: CdkHeaderRow, useExisting: TableHeaderRowComponent },
], exportAs: ["nuiHeaderRow"], usesInheritance: true, ngImport: i0, template: ` <th
*ngIf="
selectable ||
selectionMode === 'multi' ||
selectionMode === 'radio'
"
nuiClickInterceptor
class="nui-table__table-header-cell nui-table__table-header-cell--selectable"
[ngClass]="{ 'no-options': !hasOptions }"
>
<nui-selector
class="nui-table__table-header-cell__selector"
[ngClass]="{ 'no-options': !hasOptions }"
[class.invisible]="selectionMode !== 'multi'"
[appendToBody]="true"
(selectionChange)="onSelectorChange($event)"
[checkboxStatus]="selectorState.checkboxStatus"
[items]="selectorState.selectorItems"
>
</nui-selector>
</th>
<ng-container cdkCellOutlet></ng-container>`, isInline: true, dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ClickInterceptorDirective, selector: "[nuiClickInterceptor]" }, { kind: "component", type: i4.SelectorComponent, selector: "nui-selector", inputs: ["checkboxStatus", "items", "appendToBody", "ariaLabel"], outputs: ["selectionChange"] }, { kind: "directive", type: i5.CdkCellOutlet, selector: "[cdkCellOutlet]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableHeaderRowComponent, decorators: [{
type: Component,
args: [{
template: ` <th
*ngIf="
selectable ||
selectionMode === 'multi' ||
selectionMode === 'radio'
"
nuiClickInterceptor
class="nui-table__table-header-cell nui-table__table-header-cell--selectable"
[ngClass]="{ 'no-options': !hasOptions }"
>
<nui-selector
class="nui-table__table-header-cell__selector"
[ngClass]="{ 'no-options': !hasOptions }"
[class.invisible]="selectionMode !== 'multi'"
[appendToBody]="true"
(selectionChange)="onSelectorChange($event)"
[checkboxStatus]="selectorState.checkboxStatus"
[items]="selectorState.selectorItems"
>
</nui-selector>
</th>
<ng-container cdkCellOutlet></ng-container>`,
host: {
role: "row",
class: "nui-table__table-header-row",
},
selector: "nui-header-row, tr[nui-header-row]",
encapsulation: ViewEncapsulation.None,
changeDetection: ChangeDetectionStrategy.OnPush,
exportAs: "nuiHeaderRow",
providers: [
{ provide: CdkHeaderRow, useExisting: TableHeaderRowComponent },
],
}]
}], ctorParameters: () => [{ type: i1.TableStateHandlerService }, { type: i0.ChangeDetectorRef }], propDecorators: { density: [{
type: Input
}], isDensityDefault: [{
type: HostBinding,
args: ["class.nui-table__table-header-row_height_default"]
}], isDensityCompact: [{
type: HostBinding,
args: ["class.nui-table__table-header-row_height_compact"]
}], isDensityTiny: [{
type: HostBinding,
args: ["class.nui-table__table-header-row_height_tiny"]
}] } });
/**
* @ignore
*/
/** Data row template container that contains the cell outlet. Adds the right class and role. */
export class TableRowComponent extends CdkRow {
get isSelected() {
return this.isRowSelected();
}
get isDensityDefault() {
return this.density.toLowerCase() === "default";
}
get isDensityCompact() {
return this.density.toLowerCase() === "compact";
}
get isDensityTiny() {
return this.density.toLowerCase() === "tiny";
}
constructor(elementRef, tableStateHandlerService, changeDetectorRef) {
super();
this.elementRef = elementRef;
this.tableStateHandlerService = tableStateHandlerService;
this.changeDetectorRef = changeDetectorRef;
this.density = "default";
this.clickableRow = false;
this.clickableRowConfig = {
clickableSelectors: ["nui-row", "tr[nui-row]"],
ignoredSelectors: DEFAULT_INTERACTIVE_ELEMENTS,
};
this.onDestroy$ = new Subject();
this.selectable = this.tableStateHandlerService.selectable;
this.selectionMode = this.tableStateHandlerService.selectionMode;
}
ngOnInit() {
const rowHeightClass = `nui-table__table-row_height_${this.density.toLowerCase()}`;
this.elementRef.nativeElement.classList.add(rowHeightClass);
// when selection changes we need to detect changes to check check-boxes
this.selectionChangeSubscription =
this.tableStateHandlerService.selectionChanged
.pipe(takeUntil(this.onDestroy$))
.subscribe(() => {
this.changeDetectorRef.detectChanges();
});
this.tableStateHandlerService.selectableChanged
.pipe(takeUntil(this.onDestroy$))
.subscribe((selectable) => {
this.selectable = selectable;
this.changeDetectorRef.markForCheck();
});
this.tableStateHandlerService.selectionModeChanged
.pipe(takeUntil(this.onDestroy$))
.subscribe((mode) => {
this.selectionMode = mode;
this.changeDetectorRef.markForCheck();
});
}
rowClickHandler(target) {
if (!this.tableStateHandlerService.selectionEnabled ||
!this.clickableRow ||
!this.clickableRowConfig.clickableSelectors.length) {
return;
}
const closestTableRow = target.closest(this.clickableRowConfig.clickableSelectors.join(","));
if (!closestTableRow) {
return;
}
if (this.clickableRowConfig.ignoredSelectors.length &&
target.closest(this.clickableRowConfig.ignoredSelectors.join(","))) {
return;
}
if (this.selectionMode === TableSelectionMode.Single) {
this.rowSelected();
return;
}
const rowSelector = closestTableRow.querySelector(".nui-table__table-cell__checkbox");
if (rowSelector === this.rowSelectionElement?.nativeElement) {
this.rowSelected();
}
}
rowSelected() {
this.tableStateHandlerService.handleRowSelect(this.rowObject);
}
/**
* We need to stop propagation of the checkbox click to prevent the row click handler from invoking the checkbox toggle functionality again
*/
stopPropagation(event) {
event.stopPropagation();
}
isRowSelected() {
const rowObjectTrackBy = this.tableStateHandlerService.trackBy(0, this.rowObject);
const includedRows = this.tableStateHandlerService.selection.include;
const excludedRows = this.tableStateHandlerService.selection.exclude;
if (this.tableStateHandlerService.selection.isAllPages) {
// case when we unselect one page by checkbox
if (this.tableStateHandlerService.selection.exclude.length > 0) {
return !_includes(excludedRows, rowObjectTrackBy);
}
return true;
}
return includedRows.length > 0
? _includes(includedRows, rowObjectTrackBy)
: false;
}
ngOnDestroy() {
this.onDestroy$.next();
this.onDestroy$.complete();
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableRowComponent, deps: [{ token: i0.ElementRef }, { token: i1.TableStateHandlerService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TableRowComponent, selector: "nui-row, tr[nui-row]", inputs: { density: "density", rowObject: "rowObject", clickableRow: "clickableRow", clickableRowConfig: "clickableRowConfig" }, host: { attributes: { "role": "row" }, listeners: { "click": "rowClickHandler($event.target)" }, properties: { "class.nui-table__table-row--clickable": "this.clickableRow", "class.nui-table__table-row--selected": "this.isSelected", "class.nui-table__table-row_height_default": "this.isDensityDefault", "class.nui-table__table-row_height_compact": "this.isDensityCompact", "class.nui-table__table-row_height_tiny": "this.isDensityTiny" }, classAttribute: "nui-table__table-row" }, providers: [{ provide: CdkRow, useExisting: TableRowComponent }], viewQueries: [{ propertyName: "rowSelectionElement", first: true, predicate: ["rowSelectionElement"], descendants: true, read: ElementRef }], exportAs: ["nuiRow"], usesInheritance: true, ngImport: i0, template: ` <td
*ngIf="
selectable ||
(selectionMode &&
(selectionMode === 'multi' || selectionMode === 'radio'))
"
class="nui-table__table-cell nui-table__table-cell--selectable"
>
<nui-radio
*ngIf="selectionMode === 'radio'"
class="nui-table__table-cell__checkbox d-inline-block"
[checked]="isRowSelected()"
(valueChange)="rowSelected()"
(click)="stopPropagation($event)"
#rowSelectionElement
>
</nui-radio>
<nui-checkbox
*ngIf="selectionMode === 'multi'"
class="nui-table__table-cell__checkbox d-inline-block"
[checked]="isRowSelected()"
(valueChange)="rowSelected()"
(click)="stopPropagation($event)"
#rowSelectionElement
>
</nui-checkbox>
</td>
<ng-container cdkCellOutlet></ng-container>`, isInline: true, dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.RadioComponent, selector: "nui-radio", inputs: ["value", "hovered", "checked", "hint", "disabled", "ariaLabel"], outputs: ["valueChange"] }, { kind: "component", type: i7.CheckboxComponent, selector: "nui-checkbox", inputs: ["ariaLabel", "ariaLabelledby", "ariaDescribedby", "name", "title", "value", "hovered", "checked", "required", "hint", "disabled", "indeterminate"], outputs: ["valueChange"] }, { kind: "directive", type: i5.CdkCellOutlet, selector: "[cdkCellOutlet]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableRowComponent, decorators: [{
type: Component,
args: [{
selector: "nui-row, tr[nui-row]",
template: ` <td
*ngIf="
selectable ||
(selectionMode &&
(selectionMode === 'multi' || selectionMode === 'radio'))
"
class="nui-table__table-cell nui-table__table-cell--selectable"
>
<nui-radio
*ngIf="selectionMode === 'radio'"
class="nui-table__table-cell__checkbox d-inline-block"
[checked]="isRowSelected()"
(valueChange)="rowSelected()"
(click)="stopPropagation($event)"
#rowSelectionElement
>
</nui-radio>
<nui-checkbox
*ngIf="selectionMode === 'multi'"
class="nui-table__table-cell__checkbox d-inline-block"
[checked]="isRowSelected()"
(valueChange)="rowSelected()"
(click)="stopPropagation($event)"
#rowSelectionElement
>
</nui-checkbox>
</td>
<ng-container cdkCellOutlet></ng-container>`,
host: {
role: "row",
class: "nui-table__table-row",
},
encapsulation: ViewEncapsulation.None,
changeDetection: ChangeDetectionStrategy.OnPush,
exportAs: "nuiRow",
providers: [{ provide: CdkRow, useExisting: TableRowComponent }],
}]
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.TableStateHandlerService }, { type: i0.ChangeDetectorRef }], propDecorators: { density: [{
type: Input
}], rowObject: [{
type: Input
}], clickableRow: [{
type: Input
}, {
type: HostBinding,
args: ["class.nui-table__table-row--clickable"]
}], clickableRowConfig: [{
type: Input
}], isSelected: [{
type: HostBinding,
args: ["class.nui-table__table-row--selected"]
}], isDensityDefault: [{
type: HostBinding,
args: ["class.nui-table__table-row_height_default"]
}], isDensityCompact: [{
type: HostBinding,
args: ["class.nui-table__table-row_height_compact"]
}], isDensityTiny: [{
type: HostBinding,
args: ["class.nui-table__table-row_height_tiny"]
}], rowSelectionElement: [{
type: ViewChild,
args: ["rowSelectionElement", { read: ElementRef, static: false }]
}], rowClickHandler: [{
type: HostListener,
args: ["click", ["$event.target"]]
}] } });
/**
* @ignore
*/
export class TableFooterRowComponent extends CdkFooterRow {
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableFooterRowComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TableFooterRowComponent, selector: "nui-footer-row, tr[nui-footer-row]", host: { attributes: { "role": "row" }, classAttribute: "nui-footer-row" }, providers: [
{ provide: CdkFooterRow, useExisting: TableFooterRowComponent },
], exportAs: ["nuiFooterRow"], usesInheritance: true, ngImport: i0, template: "<ng-container cdkCellOutlet></ng-container>", isInline: true, dependencies: [{ kind: "directive", type: i5.CdkCellOutlet, selector: "[cdkCellOutlet]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableFooterRowComponent, decorators: [{
type: Component,
args: [{
selector: "nui-footer-row, tr[nui-footer-row]",
template: "<ng-container cdkCellOutlet></ng-container>",
host: {
class: "nui-footer-row",
role: "row",
},
changeDetection: ChangeDetectionStrategy.OnPush,
encapsulation: ViewEncapsulation.None,
exportAs: "nuiFooterRow",
providers: [
{ provide: CdkFooterRow, useExisting: TableFooterRowComponent },
],
}]
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtcm93LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvdGFibGUvdGFibGUtcm93L3RhYmxlLXJvdy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEseURBQXlEO0FBQ3pELEVBQUU7QUFDRiwrRUFBK0U7QUFDL0UsNEVBQTRFO0FBQzVFLDhFQUE4RTtBQUM5RSwrRUFBK0U7QUFDL0UsOEVBQThFO0FBQzlFLDREQUE0RDtBQUM1RCxFQUFFO0FBQ0YsNkVBQTZFO0FBQzdFLHVEQUF1RDtBQUN2RCxFQUFFO0FBQ0YsNkVBQTZFO0FBQzdFLDRFQUE0RTtBQUM1RSwrRUFBK0U7QUFDL0UsMEVBQTBFO0FBQzFFLGlGQUFpRjtBQUNqRiw2RUFBNkU7QUFDN0UsaUJBQWlCO0FBRWpCLE9BQU8sRUFDSCxZQUFZLEVBQ1osZUFBZSxFQUNmLFlBQVksRUFDWixlQUFlLEVBQ2YsTUFBTSxFQUNOLFNBQVMsR0FDWixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUNMLGVBQWUsRUFLZixXQUFXLEVBQ1gsU0FBUyxFQUNULGlCQUFpQixHQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLFNBQVMsTUFBTSxpQkFBaUIsQ0FBQztBQUN4QyxPQUFPLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFeEYsT0FBTyxFQUFFLGNBQWMsRUFBaUIsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FB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QUk7b0JBQ3JDLFFBQVEsRUFBRSxjQUFjO29CQUN4QixTQUFTLEVBQUU7d0JBQ1AsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcseUJBQXlCLEVBQUU7cUJBQ2xFO2lCQUNKIiwic291cmNlc0NvbnRlbnQiOlsiLy8gwqkgMjAyMiBTb2xhcldpbmRzIFdvcmxkd2lkZSwgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vICBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0b1xuLy8gIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4vLyAgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yXG4vLyAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vICBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyAgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vICBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCB7XG4gICAgQ2RrRm9vdGVyUm93LFxuICAgIENka0Zvb3RlclJvd0RlZixcbiAgICBDZGtIZWFkZXJSb3csXG4gICAgQ2RrSGVhZGVyUm93RGVmLFxuICAgIENka1JvdyxcbiAgICBDZGtSb3dEZWYsXG59IGZyb20gXCJAYW5ndWxhci9jZGsvdGFibGVcIjtcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LFxuICAgIEl0ZXJhYmxlRGlmZmVycyxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCBfaW5jbHVkZXMgZnJvbSBcImxvZGFzaC9pbmNsdWRlc1wiO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuXG5pbXBvcnQgeyBERUZBVUxUX0lOVEVSQUNUSVZFX0VMRU1FTlRTIH0gZnJvbSBcIi4uLy4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbi5jb25zdGFudHNcIjtcbmltcG9ydCB7IElTZWxlY3RvclN0YXRlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3B1YmxpYy1hcGlcIjtcbmltcG9ydCB7IENoZWNrYm94U3RhdHVzLCBTZWxlY3Rpb25UeXBlIH0gZnJvbSBcIi4uLy4uL3NlbGVjdG9yL3B1YmxpYy1hcGlcIjtcbmltcG9ydCB7IFRhYmxlU3RhdGVIYW5kbGVyU2VydmljZSB9IGZyb20gXCIuLi90YWJsZS1zdGF0ZS1oYW5kbGVyLnNlcnZpY2VcIjtcbmltcG9ydCB7XG4gICAgQ2xpY2thYmxlUm93T3B0aW9ucyxcbiAgICBSb3dIZWlnaHRPcHRpb25zLFxuICAgIFRhYmxlU2VsZWN0aW9uTW9kZSxcbn0gZnJvbSBcIi4uL3R5cGVzXCI7XG5cbi8qIGVzbGludC1kaXNhYmxlICovXG5cbi8qKlxuICogQGlnbm9yZVxuICovXG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiBcIltudWlIZWFkZXJSb3dEZWZdXCIsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogQ2RrSGVhZGVyUm93RGVmLCB1c2VFeGlzdGluZzogVGFibGVIZWFkZXJSb3dEZWZEaXJlY3RpdmUgfSxcbiAgICBdLFxuICAgIGhvc3Q6IHsgcm9sZTogXCJyb3dcIiB9LFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUhlYWRlclJvd0RlZkRpcmVjdGl2ZVxuICAgIGV4dGVuZHMgQ2RrSGVhZGVyUm93RGVmXG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzXG57XG4gICAgQElucHV0KCkgc2V0IG51aUhlYWRlclJvd0RlZih2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMuY29sdW1ucyA9IHZhbHVlID8/IFtdO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBudWlIZWFkZXJSb3dEZWZTdGlja3kodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zdGlja3kgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdGFibGVDb2x1bW5zU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4sXG4gICAgICAgIF9kaWZmZXJzOiBJdGVyYWJsZURpZmZlcnMsXG4gICAgICAgIHByaXZhdGUgdGFibGVTdGF0ZUhhbmRsZXJTZXJ2aWNlOiBUYWJsZVN0YXRlSGFuZGxlclNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIodGVtcGxhdGUsIF9kaWZmZXJzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGFibGVTdGF0ZUhhbmRsZXJTZXJ2aWNlLnRhYmxlQ29sdW1ucyA9IEFycmF5LmZyb20odGhpcy5jb2x1bW5zKTtcblxuICAgICAgICBpZiAodGhpcy50YWJsZVN0YXRlSGFuZGxlclNlcnZpY2UucmVvcmRlcmFibGUpIHtcbiAgICAgICAgICAgIC8vIHJlb3JkZXJpbmcgY29sdW1ucyB3aGVuIGRyb3AgaXMgZmlyZWQgb24gY29sdW1uXG4gICAgICAgICAgICB0aGlzLnRhYmxlQ29sdW1uc1N1YnNjcmlwdGlvbiA9XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZVN0YXRlSGFuZGxlclNlcnZpY2UuY29sdW