@competer/primeng-table 0.0.0-stage → 14.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.
Files changed (96) hide show
  1. package/README.md +279 -3
  2. package/esm2020/competer-primeng-table.mjs +5 -0
  3. package/esm2020/lib/components/column-selector/column-selector.mjs +147 -0
  4. package/esm2020/lib/components/ecs-primeng-table/ecs-primeng-table.mjs +1411 -0
  5. package/esm2020/lib/components/ecs-primeng-table/ecs-primeng-table.service.mjs +222 -0
  6. package/esm2020/lib/components/export-excel/export-excel.mjs +153 -0
  7. package/esm2020/lib/components/export-excel/export-excel.service.mjs +23 -0
  8. package/esm2020/lib/components/table-button/table-button.mjs +63 -0
  9. package/esm2020/lib/components/table-cell/table-cell.mjs +159 -0
  10. package/esm2020/lib/components/table-predefined-filters/table-predefined-filters.mjs +94 -0
  11. package/esm2020/lib/components/views-management/views-management.mjs +117 -0
  12. package/esm2020/lib/enums/cell-display.enum.mjs +7 -0
  13. package/esm2020/lib/enums/cell-overflow-behaviour.enum.mjs +14 -0
  14. package/esm2020/lib/enums/data-align-horizontal.enum.mjs +16 -0
  15. package/esm2020/lib/enums/data-align-vertical.enum.mjs +16 -0
  16. package/esm2020/lib/enums/data-type.enum.enum.mjs +21 -0
  17. package/esm2020/lib/enums/device-type.enum.mjs +8 -0
  18. package/esm2020/lib/enums/frozen-column-align.enum.mjs +17 -0
  19. package/esm2020/lib/enums/index.mjs +9 -0
  20. package/esm2020/lib/enums/table-view-save-mode.enum.mjs +19 -0
  21. package/esm2020/lib/interfaces/columns-metadata.interface.mjs +2 -0
  22. package/esm2020/lib/interfaces/excel-export-request.interface.mjs +2 -0
  23. package/esm2020/lib/interfaces/index.mjs +11 -0
  24. package/esm2020/lib/interfaces/predefined-filter.interface.mjs +2 -0
  25. package/esm2020/lib/interfaces/table-button.interface.mjs +2 -0
  26. package/esm2020/lib/interfaces/table-configuration.interface.mjs +2 -0
  27. package/esm2020/lib/interfaces/table-options.interface.mjs +107 -0
  28. package/esm2020/lib/interfaces/table-paged-response.interface.mjs +2 -0
  29. package/esm2020/lib/interfaces/table-query-request.interface.mjs +2 -0
  30. package/esm2020/lib/interfaces/table-view-data.interface.mjs +2 -0
  31. package/esm2020/lib/interfaces/table-view.interface.mjs +2 -0
  32. package/esm2020/lib/pipes/ui-translate.pipe.mjs +21 -0
  33. package/esm2020/lib/services/http.service.mjs +18 -0
  34. package/esm2020/lib/services/i18n.service.mjs +61 -0
  35. package/esm2020/lib/services/index.mjs +5 -0
  36. package/esm2020/lib/services/notification.service.mjs +17 -0
  37. package/esm2020/lib/services/table-state.service.mjs +38 -0
  38. package/esm2020/lib/utils/create-table-options.mjs +37 -0
  39. package/esm2020/lib/utils/data-align-horizontal-as-text.mjs +23 -0
  40. package/esm2020/lib/utils/data-align-vertical-as-text.mjs +23 -0
  41. package/esm2020/lib/utils/data-type-as-text.mjs +25 -0
  42. package/esm2020/lib/utils/frozen-column-align-as-text.mjs +21 -0
  43. package/esm2020/lib/utils/highlight-text.mjs +36 -0
  44. package/esm2020/lib/utils/index.mjs +7 -0
  45. package/esm2020/lib/utils/tree-table-state.mjs +239 -0
  46. package/esm2020/public-api.mjs +19 -0
  47. package/fesm2015/competer-primeng-table.mjs +3119 -0
  48. package/fesm2015/competer-primeng-table.mjs.map +1 -0
  49. package/fesm2020/competer-primeng-table.mjs +3049 -0
  50. package/fesm2020/competer-primeng-table.mjs.map +1 -0
  51. package/index.d.ts +5 -0
  52. package/lib/components/column-selector/column-selector.d.ts +55 -0
  53. package/lib/components/ecs-primeng-table/ecs-primeng-table.d.ts +256 -0
  54. package/lib/components/ecs-primeng-table/ecs-primeng-table.service.d.ts +52 -0
  55. package/lib/components/export-excel/export-excel.d.ts +51 -0
  56. package/lib/components/export-excel/export-excel.service.d.ts +6 -0
  57. package/lib/components/table-button/table-button.d.ts +16 -0
  58. package/lib/components/table-cell/table-cell.d.ts +69 -0
  59. package/lib/components/table-predefined-filters/table-predefined-filters.d.ts +39 -0
  60. package/lib/components/views-management/views-management.d.ts +34 -0
  61. package/lib/enums/cell-display.enum.d.ts +5 -0
  62. package/lib/enums/cell-overflow-behaviour.enum.d.ts +12 -0
  63. package/lib/enums/data-align-horizontal.enum.d.ts +14 -0
  64. package/lib/enums/data-align-vertical.enum.d.ts +14 -0
  65. package/lib/enums/data-type.enum.enum.d.ts +19 -0
  66. package/lib/enums/device-type.enum.d.ts +6 -0
  67. package/lib/enums/frozen-column-align.enum.d.ts +15 -0
  68. package/lib/enums/index.d.ts +8 -0
  69. package/lib/enums/table-view-save-mode.enum.d.ts +17 -0
  70. package/lib/interfaces/columns-metadata.interface.d.ts +66 -0
  71. package/lib/interfaces/excel-export-request.interface.d.ts +20 -0
  72. package/lib/interfaces/index.d.ts +10 -0
  73. package/lib/interfaces/predefined-filter.interface.d.ts +101 -0
  74. package/lib/interfaces/table-button.interface.d.ts +75 -0
  75. package/lib/interfaces/table-configuration.interface.d.ts +23 -0
  76. package/lib/interfaces/table-options.interface.d.ts +604 -0
  77. package/lib/interfaces/table-paged-response.interface.d.ts +16 -0
  78. package/lib/interfaces/table-query-request.interface.d.ts +28 -0
  79. package/lib/interfaces/table-view-data.interface.d.ts +28 -0
  80. package/lib/interfaces/table-view.interface.d.ts +15 -0
  81. package/lib/pipes/ui-translate.pipe.d.ts +13 -0
  82. package/lib/services/http.service.d.ts +34 -0
  83. package/lib/services/i18n.service.d.ts +20 -0
  84. package/lib/services/index.d.ts +4 -0
  85. package/lib/services/notification.service.d.ts +23 -0
  86. package/lib/services/table-state.service.d.ts +31 -0
  87. package/lib/utils/create-table-options.d.ts +5 -0
  88. package/lib/utils/data-align-horizontal-as-text.d.ts +11 -0
  89. package/lib/utils/data-align-vertical-as-text.d.ts +11 -0
  90. package/lib/utils/data-type-as-text.d.ts +11 -0
  91. package/lib/utils/frozen-column-align-as-text.d.ts +11 -0
  92. package/lib/utils/highlight-text.d.ts +17 -0
  93. package/lib/utils/index.d.ts +6 -0
  94. package/lib/utils/tree-table-state.d.ts +66 -0
  95. package/package.json +58 -3
  96. package/public-api.d.ts +10 -0
@@ -0,0 +1,159 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { CellDisplay, DataType } from '../../enums';
3
+ import { CommonModule } from '@angular/common';
4
+ import { TooltipModule } from 'primeng/tooltip';
5
+ import { dataAlignHorizontalAsText, dataAlignVerticalAsText, highlightText } from '../../utils';
6
+ import { TablePredefinedFilters } from "../table-predefined-filters/table-predefined-filters";
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/common";
9
+ import * as i2 from "@angular/platform-browser";
10
+ import * as i3 from "primeng/tooltip";
11
+ export class TableCell {
12
+ constructor(datePipe, sanitizer) {
13
+ this.datePipe = datePipe;
14
+ this.sanitizer = sanitizer;
15
+ this.globalSearchText = null;
16
+ this.predefinedFiltersCollection = {}; // Contains a collection of the values that need to be shown for predefined column filters
17
+ this.dateFormat = "dd-MMM-yyyy HH:mm:ss zzzz";
18
+ this.dateTimezone = "+00:00";
19
+ this.dateCulture = "en-US";
20
+ this.DataType = DataType;
21
+ this.CellDisplay = CellDisplay;
22
+ }
23
+ /** Only finite numbers are valid; do not turn empty strings or booleans into progress. */
24
+ get hasProgressValue() {
25
+ return typeof this.value === 'number' && Number.isFinite(this.value);
26
+ }
27
+ get progressValue() {
28
+ return Math.min(100, Math.max(0, this.value));
29
+ }
30
+ get progressTooltip() {
31
+ return this.col.dataTooltipCustomColumnSource ? this.tooltipText : `${this.value} %`;
32
+ }
33
+ get value() {
34
+ return this.rowData[this.col.field];
35
+ }
36
+ get tooltipText() {
37
+ if (this.col.dataTooltipCustomColumnSource && this.col.dataTooltipCustomColumnSource.length > 0) {
38
+ return this.rowData[this.col.dataTooltipCustomColumnSource];
39
+ }
40
+ return this.value;
41
+ }
42
+ getListValues(col, rowData) {
43
+ const value = rowData[col.field];
44
+ return value ? value.split(';').map((v) => v.trim()) : [];
45
+ }
46
+ /** List tooltips use the same semicolon-separated positions as the displayed list. */
47
+ getListTooltip(item, index) {
48
+ const source = this.col.dataTooltipCustomColumnSource;
49
+ const tooltips = source ? this.rowData[source] : null;
50
+ if (typeof tooltips !== 'string')
51
+ return item;
52
+ // Preserve empty entries so subsequent tooltips never move to another item.
53
+ return tooltips.split(';')[index]?.trim() ?? item;
54
+ }
55
+ getDataAlignHorizontalAsText(dataAlignHorizontal) {
56
+ dataAlignHorizontalAsText(dataAlignHorizontal);
57
+ }
58
+ getDataAlignVerticalAsText(dataAlignVertical) {
59
+ dataAlignVerticalAsText(dataAlignVertical);
60
+ }
61
+ /**
62
+ * Formats a date value using either column-level overrides or global settings.
63
+ * The incoming value is assumed to represent a UTC date.
64
+ *
65
+ * @param {any} value - The date value to be formatted.
66
+ * @param {string | null} dateFormat - Optional column-level override for the date format.
67
+ * @param {string | null} dateTimezone - Optional column-level override for the timezone used in formatting.
68
+ * @param {string | null} dateCulture - Optional column-level override for the culture used in formatting.
69
+ *
70
+ * @returns {string} - The formatted date string using the effective (column or global) settings,
71
+ * or an empty string if the value is invalid or undefined.
72
+ *
73
+ * @example
74
+ * // Example using only global settings:
75
+ * const result = formatDate(dateValue, null, null, null);
76
+ *
77
+ * @example
78
+ * // Example using column-level overrides:
79
+ * const result = formatDate(dateValue, 'dd/MM/yyyy', 'UTC', 'en-GB');
80
+ */
81
+ formatDate(value, dateFormat, dateTimezone, dateCulture) {
82
+ if (!value) { // If no value, return empty
83
+ return '';
84
+ }
85
+ let formattedDate = undefined; // By default, formattedDate will be undefined
86
+ const effectiveFormat = dateFormat ?? this.dateFormat;
87
+ const effectiveTimezone = dateTimezone ?? this.dateTimezone;
88
+ const effectiveCulture = dateCulture ?? this.dateCulture;
89
+ if (value) { // If value is not undefined
90
+ let dateToParse = value;
91
+ if (typeof value === 'string' && !value.endsWith('Z') && !/[+-]\d{2}:\d{2}$/.test(value)) { // Check if the date does not contain Z
92
+ dateToParse += 'Z';
93
+ }
94
+ const dateUtc = new Date(dateToParse);
95
+ if (!isNaN(dateUtc.getTime())) { // Check that the date is valid before performing transformation
96
+ formattedDate = this.datePipe.transform(dateUtc, effectiveFormat, effectiveTimezone, effectiveCulture); // Perform the date masking
97
+ }
98
+ }
99
+ return formattedDate ?? ''; // Returns the date formatted, or as empty string if an issue was found (or value was undefined).
100
+ }
101
+ getPredefinedFilterTooltip(colMetadata, value) {
102
+ if (colMetadata.dataType == DataType.List) {
103
+ return value;
104
+ }
105
+ if (colMetadata.filterPredefinedValuesName && colMetadata.filterPredefinedValuesName.length > 0) {
106
+ const options = this.getPredefinedFilterValues(colMetadata.filterPredefinedValuesName);
107
+ return options.find(x => x.value == value)?.name;
108
+ }
109
+ return null;
110
+ }
111
+ /**
112
+ * Checks if the provided column metadata matches a specific style of the predefined filters
113
+ * that need to be applied to an item on a row.
114
+ *
115
+ * @param {IprimengColumnsMetadata} colMetadata - The metadata of the column being checked.
116
+ * @param {any} value - The value to be matched against the predefined filter values.
117
+ * @returns {any} The matching predefined filter value if found, otherwise null.
118
+ */
119
+ getPredfinedFilterMatch(colMetadata, value) {
120
+ if (colMetadata.filterPredefinedValuesName && colMetadata.filterPredefinedValuesName.length > 0) { // Check if the column uses predefined filter values
121
+ const options = this.getPredefinedFilterValues(colMetadata.filterPredefinedValuesName); // Get the predefined filter values based on the name
122
+ return options.find(option => option.value === value); // Return the matching option if found
123
+ }
124
+ return null; // Return null if the column does not use predefined filter values
125
+ }
126
+ getPredefinedFilterValues(columnKeyName) {
127
+ return this.predefinedFiltersCollection?.[columnKeyName] || []; // Return the predefined filter values or an empty array if the option name does not exist
128
+ }
129
+ highlightText(cellValue, colMetadata, globalSearchText) {
130
+ return highlightText(cellValue, colMetadata, globalSearchText, this.sanitizer);
131
+ }
132
+ ecsTrack6(index, item) { return index; }
133
+ ecsTrack7(index, item) { return index; }
134
+ }
135
+ TableCell.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TableCell, deps: [{ token: i1.DatePipe }, { token: i2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
136
+ TableCell.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: TableCell, isStandalone: true, selector: "ecs-table-cell", inputs: { col: "col", rowData: "rowData", globalSearchText: "globalSearchText", predefinedFiltersCollection: "predefinedFiltersCollection", dateFormat: "dateFormat", dateTimezone: "dateTimezone", dateCulture: "dateCulture" }, ngImport: i0, template: "<ng-container *ngIf=\"value !== null && value !== undefined\">\r\n <ng-container *ngIf=\"col.dataType === DataType.Numeric && col.cellDisplay === CellDisplay.ProgressBar; else ecsElse6\">\r\n <ng-container *ngIf=\"hasProgressValue\">\r\n <div class=\"ecs-progress-cell\"\r\n [pTooltip]=\"progressTooltip\"\r\n [tooltipDisabled]=\"!col.dataTooltipShow\"\r\n [showDelay]=\"200\" tooltipPosition=\"top\">\r\n <div class=\"ecs-progress-bar\" role=\"progressbar\"\r\n [attr.aria-label]=\"col.header\"\r\n aria-valuemin=\"0\" aria-valuemax=\"100\"\r\n [attr.aria-valuenow]=\"progressValue\"\r\n [attr.aria-valuetext]=\"value + ' %'\">\r\n <div class=\"ecs-progress-bar-fill\" [style.width.%]=\"progressValue\"></div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container><ng-template #ecsElse6><ng-container *ngIf=\"col.filterPredefinedValuesName && col.filterPredefinedValuesName.length > 0; else ecsElse7\">\r\n <div [ngStyle]=\"{\r\n 'justify-content': getDataAlignHorizontalAsText(col.dataAlignHorizontal),\r\n 'align-items': getDataAlignVerticalAsText(col.dataAlignVertical)\r\n }\">\r\n <ng-container *ngIf=\"col.dataType === DataType.List; else ecsElse8\">\r\n <ng-container *ngFor=\"let item of getListValues(col, rowData); trackBy: ecsTrack6; let $index = index; let $first = first; let $last = last; let $even = even; let $odd = odd; let $count = count\">\r\n <ng-container *ngIf=\"getPredfinedFilterMatch(col, item) as option\">\r\n <div style=\"display: inline-block; margin-right: 0.5rem;\"\r\n [pTooltip]=\"getListTooltip(item, $index)\"\r\n [escape]=\"false\"\r\n [tooltipDisabled]=\"!col.dataTooltipShow\"\r\n [showDelay]=\"700\"\r\n tooltipPosition=\"top\">\r\n <ecs-table-predefined-filters [option]=\"option\" [col]=\"col\" [selectable]=\"true\" [rowData]=\"rowData\" [globalSearchText]=\"globalSearchText\"></ecs-table-predefined-filters>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container><ng-template #ecsElse8>\r\n <ng-container *ngIf=\"getPredfinedFilterMatch(col, value) as option\">\r\n <div style=\"display: inline-block;\"\r\n [pTooltip]=\"col.dataTooltipCustomColumnSource && col.dataTooltipCustomColumnSource.length > 0 \r\n ? rowData[col.dataTooltipCustomColumnSource] \r\n : value\"\r\n [tooltipDisabled]=\"!col.dataTooltipShow\"\r\n [showDelay]=\"700\"\r\n tooltipPosition=\"top\">\r\n <ecs-table-predefined-filters [option]=\"option\" [col]=\"col\" [selectable]=\"true\" [rowData]=\"rowData\" [globalSearchText]=\"globalSearchText\"></ecs-table-predefined-filters>\r\n </div>\r\n </ng-container>\r\n </ng-template>\r\n </div>\r\n </ng-container><ng-template #ecsElse7>\r\n <ng-container [ngSwitch]=\"col.dataType\"><ng-container *ngSwitchCase=\"DataType.List\">\r\n <ng-container *ngFor=\"let item of getListValues(col, rowData); trackBy: ecsTrack7; let $index = index; let $first = first; let $last = last; let $even = even; let $odd = odd; let $count = count\">\r\n <span [innerHtml]=\"highlightText(item, col, globalSearchText)\"\r\n [pTooltip]=\"getListTooltip(item, $index)\"\r\n [escape]=\"false\"\r\n [tooltipDisabled]=\"!col.dataTooltipShow\"\r\n [showDelay]=\"700\"\r\n tooltipPosition=\"top\"></span><ng-container *ngIf=\"!$last\"><span>;</span></ng-container>\r\n </ng-container>\r\n </ng-container><ng-container *ngSwitchCase=\"DataType.Boolean\">\r\n <i class=\"pi\"\r\n [pTooltip]=\"col.dataTooltipCustomColumnSource && col.dataTooltipCustomColumnSource.length > 0 \r\n ? rowData[col.dataTooltipCustomColumnSource] \r\n : value\"\r\n [tooltipDisabled]=\"!col.dataTooltipShow || !col.dataTooltipCustomColumnSource || col.dataTooltipCustomColumnSource.length === 0\"\r\n [showDelay]=\"700\"\r\n tooltipPosition=\"top\"\r\n [style.color]=\"value ? 'green' : 'red'\"\r\n [ngClass]=\"{ 'pi-check-circle': value, 'pi-times-circle': !value }\">\r\n </i>\r\n </ng-container><ng-container *ngSwitchCase=\"DataType.Date\">\r\n <div \r\n [innerHtml]=\"highlightText(formatDate(value, col.dateFormat, col.dateTimezone, col.dateCulture), col, globalSearchText)\"\r\n [pTooltip]=\"col.dataTooltipCustomColumnSource && col.dataTooltipCustomColumnSource.length > 0 \r\n ? rowData[col.dataTooltipCustomColumnSource] \r\n : formatDate(value, col.dateFormat, col.dateTimezone, col.dateCulture)\"\r\n [tooltipDisabled]=\"!col.dataTooltipShow\"\r\n [showDelay]=\"700\"\r\n tooltipPosition=\"top\">\r\n {{ formatDate(value, col.dateFormat, col.dateTimezone, col.dateCulture) }}\r\n </div>\r\n </ng-container><ng-container *ngSwitchDefault>\r\n <div\r\n [innerHtml]=\"highlightText(value, col, globalSearchText)\"\r\n [pTooltip]=\"col.dataTooltipCustomColumnSource && col.dataTooltipCustomColumnSource.length > 0 \r\n ? rowData[col.dataTooltipCustomColumnSource] \r\n : value\"\r\n [tooltipDisabled]=\"!col.dataTooltipShow\"\r\n [showDelay]=\"700\"\r\n tooltipPosition=\"top\">\r\n {{ value }}\r\n </div>\r\n </ng-container></ng-container>\r\n </ng-template></ng-template>\r\n</ng-container>\r\n", styles: [":host:has(.ecs-progress-bar){display:block;min-width:0}.ecs-progress-cell{padding-block:.5rem;margin-block:-.5rem}.ecs-progress-bar{width:100%;height:.875rem;overflow:hidden;border:1px solid var(--p-content-border-color, var(--surface-border, #d1d5db));border-radius:999px;background:var(--p-content-background, var(--surface-card, #f8fafc))}.ecs-progress-bar-fill{height:100%;background:var(--p-progressbar-value-background, var(--primary-color, #ffb547))}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i3.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "fitContent", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: TablePredefinedFilters, selector: "ecs-table-predefined-filters", inputs: ["option", "col", "selectable", "rowData", "globalSearchText"] }] });
137
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TableCell, decorators: [{
138
+ type: Component,
139
+ args: [{ selector: 'ecs-table-cell', imports: [
140
+ CommonModule,
141
+ TooltipModule,
142
+ TablePredefinedFilters
143
+ ], standalone: true, template: "<ng-container *ngIf=\"value !== null && value !== undefined\">\r\n <ng-container *ngIf=\"col.dataType === DataType.Numeric && col.cellDisplay === CellDisplay.ProgressBar; else ecsElse6\">\r\n <ng-container *ngIf=\"hasProgressValue\">\r\n <div class=\"ecs-progress-cell\"\r\n [pTooltip]=\"progressTooltip\"\r\n [tooltipDisabled]=\"!col.dataTooltipShow\"\r\n [showDelay]=\"200\" tooltipPosition=\"top\">\r\n <div class=\"ecs-progress-bar\" role=\"progressbar\"\r\n [attr.aria-label]=\"col.header\"\r\n aria-valuemin=\"0\" aria-valuemax=\"100\"\r\n [attr.aria-valuenow]=\"progressValue\"\r\n [attr.aria-valuetext]=\"value + ' %'\">\r\n <div class=\"ecs-progress-bar-fill\" [style.width.%]=\"progressValue\"></div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container><ng-template #ecsElse6><ng-container *ngIf=\"col.filterPredefinedValuesName && col.filterPredefinedValuesName.length > 0; else ecsElse7\">\r\n <div [ngStyle]=\"{\r\n 'justify-content': getDataAlignHorizontalAsText(col.dataAlignHorizontal),\r\n 'align-items': getDataAlignVerticalAsText(col.dataAlignVertical)\r\n }\">\r\n <ng-container *ngIf=\"col.dataType === DataType.List; else ecsElse8\">\r\n <ng-container *ngFor=\"let item of getListValues(col, rowData); trackBy: ecsTrack6; let $index = index; let $first = first; let $last = last; let $even = even; let $odd = odd; let $count = count\">\r\n <ng-container *ngIf=\"getPredfinedFilterMatch(col, item) as option\">\r\n <div style=\"display: inline-block; margin-right: 0.5rem;\"\r\n [pTooltip]=\"getListTooltip(item, $index)\"\r\n [escape]=\"false\"\r\n [tooltipDisabled]=\"!col.dataTooltipShow\"\r\n [showDelay]=\"700\"\r\n tooltipPosition=\"top\">\r\n <ecs-table-predefined-filters [option]=\"option\" [col]=\"col\" [selectable]=\"true\" [rowData]=\"rowData\" [globalSearchText]=\"globalSearchText\"></ecs-table-predefined-filters>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container><ng-template #ecsElse8>\r\n <ng-container *ngIf=\"getPredfinedFilterMatch(col, value) as option\">\r\n <div style=\"display: inline-block;\"\r\n [pTooltip]=\"col.dataTooltipCustomColumnSource && col.dataTooltipCustomColumnSource.length > 0 \r\n ? rowData[col.dataTooltipCustomColumnSource] \r\n : value\"\r\n [tooltipDisabled]=\"!col.dataTooltipShow\"\r\n [showDelay]=\"700\"\r\n tooltipPosition=\"top\">\r\n <ecs-table-predefined-filters [option]=\"option\" [col]=\"col\" [selectable]=\"true\" [rowData]=\"rowData\" [globalSearchText]=\"globalSearchText\"></ecs-table-predefined-filters>\r\n </div>\r\n </ng-container>\r\n </ng-template>\r\n </div>\r\n </ng-container><ng-template #ecsElse7>\r\n <ng-container [ngSwitch]=\"col.dataType\"><ng-container *ngSwitchCase=\"DataType.List\">\r\n <ng-container *ngFor=\"let item of getListValues(col, rowData); trackBy: ecsTrack7; let $index = index; let $first = first; let $last = last; let $even = even; let $odd = odd; let $count = count\">\r\n <span [innerHtml]=\"highlightText(item, col, globalSearchText)\"\r\n [pTooltip]=\"getListTooltip(item, $index)\"\r\n [escape]=\"false\"\r\n [tooltipDisabled]=\"!col.dataTooltipShow\"\r\n [showDelay]=\"700\"\r\n tooltipPosition=\"top\"></span><ng-container *ngIf=\"!$last\"><span>;</span></ng-container>\r\n </ng-container>\r\n </ng-container><ng-container *ngSwitchCase=\"DataType.Boolean\">\r\n <i class=\"pi\"\r\n [pTooltip]=\"col.dataTooltipCustomColumnSource && col.dataTooltipCustomColumnSource.length > 0 \r\n ? rowData[col.dataTooltipCustomColumnSource] \r\n : value\"\r\n [tooltipDisabled]=\"!col.dataTooltipShow || !col.dataTooltipCustomColumnSource || col.dataTooltipCustomColumnSource.length === 0\"\r\n [showDelay]=\"700\"\r\n tooltipPosition=\"top\"\r\n [style.color]=\"value ? 'green' : 'red'\"\r\n [ngClass]=\"{ 'pi-check-circle': value, 'pi-times-circle': !value }\">\r\n </i>\r\n </ng-container><ng-container *ngSwitchCase=\"DataType.Date\">\r\n <div \r\n [innerHtml]=\"highlightText(formatDate(value, col.dateFormat, col.dateTimezone, col.dateCulture), col, globalSearchText)\"\r\n [pTooltip]=\"col.dataTooltipCustomColumnSource && col.dataTooltipCustomColumnSource.length > 0 \r\n ? rowData[col.dataTooltipCustomColumnSource] \r\n : formatDate(value, col.dateFormat, col.dateTimezone, col.dateCulture)\"\r\n [tooltipDisabled]=\"!col.dataTooltipShow\"\r\n [showDelay]=\"700\"\r\n tooltipPosition=\"top\">\r\n {{ formatDate(value, col.dateFormat, col.dateTimezone, col.dateCulture) }}\r\n </div>\r\n </ng-container><ng-container *ngSwitchDefault>\r\n <div\r\n [innerHtml]=\"highlightText(value, col, globalSearchText)\"\r\n [pTooltip]=\"col.dataTooltipCustomColumnSource && col.dataTooltipCustomColumnSource.length > 0 \r\n ? rowData[col.dataTooltipCustomColumnSource] \r\n : value\"\r\n [tooltipDisabled]=\"!col.dataTooltipShow\"\r\n [showDelay]=\"700\"\r\n tooltipPosition=\"top\">\r\n {{ value }}\r\n </div>\r\n </ng-container></ng-container>\r\n </ng-template></ng-template>\r\n</ng-container>\r\n", styles: [":host:has(.ecs-progress-bar){display:block;min-width:0}.ecs-progress-cell{padding-block:.5rem;margin-block:-.5rem}.ecs-progress-bar{width:100%;height:.875rem;overflow:hidden;border:1px solid var(--p-content-border-color, var(--surface-border, #d1d5db));border-radius:999px;background:var(--p-content-background, var(--surface-card, #f8fafc))}.ecs-progress-bar-fill{height:100%;background:var(--p-progressbar-value-background, var(--primary-color, #ffb547))}\n"] }]
144
+ }], ctorParameters: function () { return [{ type: i1.DatePipe }, { type: i2.DomSanitizer }]; }, propDecorators: { col: [{
145
+ type: Input
146
+ }], rowData: [{
147
+ type: Input
148
+ }], globalSearchText: [{
149
+ type: Input
150
+ }], predefinedFiltersCollection: [{
151
+ type: Input
152
+ }], dateFormat: [{
153
+ type: Input
154
+ }], dateTimezone: [{
155
+ type: Input
156
+ }], dateCulture: [{
157
+ type: Input
158
+ }] } });
159
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY2VsbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Vjcy1wcmltZW5nLXRhYmxlL3NyYy9saWIvY29tcG9uZW50cy90YWJsZS1jZWxsL3RhYmxlLWNlbGwudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lY3MtcHJpbWVuZy10YWJsZS9zcmMvbGliL2NvbXBvbmVudHMvdGFibGUtY2VsbC90YWJsZS1jZWxsLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLFdBQVcsRUFBMEMsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVGLE9BQU8sRUFBRSxZQUFZLEVBQVksTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLHVCQUF1QixFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUdoRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQzs7Ozs7QUFZOUYsTUFBTSxPQUFPLFNBQVM7SUFDcEIsWUFDVSxRQUFrQixFQUNsQixTQUF1QjtRQUR2QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFJeEIscUJBQWdCLEdBQWtCLElBQUksQ0FBQztRQUN2QyxnQ0FBMkIsR0FBNEMsRUFBRSxDQUFDLENBQUMsMEZBQTBGO1FBQ3JLLGVBQVUsR0FBVywyQkFBMkIsQ0FBQztRQUNqRCxpQkFBWSxHQUFXLFFBQVEsQ0FBQztRQUNoQyxnQkFBVyxHQUFXLE9BQU8sQ0FBQztRQUV2QyxhQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3BCLGdCQUFXLEdBQUcsV0FBVyxDQUFDO0lBVnZCLENBQUM7SUFZSiwwRkFB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QUc7c0JBQVgsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLDJCQUEyQjtzQkFBbkMsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2VsbERpc3BsYXksIERhdGFBbGlnbkhvcml6b250YWwsIERhdGFBbGlnblZlcnRpY2FsLCBEYXRhVHlwZSB9IGZyb20gJy4uLy4uL2VudW1zJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFRvb2x0aXBNb2R1bGUgfSBmcm9tICdwcmltZW5nL3Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBkYXRhQWxpZ25Ib3Jpem9udGFsQXNUZXh0LCBkYXRhQWxpZ25WZXJ0aWNhbEFzVGV4dCwgaGlnaGxpZ2h0VGV4dCB9IGZyb20gJy4uLy4uL3V0aWxzJztcclxuaW1wb3J0IHsgSUNvbHVtbk1ldGFkYXRhLCBJUHJlZGVmaW5lZEZpbHRlciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IFRhYmxlUHJlZGVmaW5lZEZpbHRlcnMgfSBmcm9tIFwiLi4vdGFibGUtcHJlZGVmaW5lZC1maWx0ZXJzL3RhYmxlLXByZWRlZmluZWQtZmlsdGVyc1wiO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2Vjcy10YWJsZS1jZWxsJyxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBUb29sdGlwTW9kdWxlLFxyXG4gICAgVGFibGVQcmVkZWZpbmVkRmlsdGVyc1xyXG5dLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLWNlbGwuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUtY2VsbC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFRhYmxlQ2VsbCB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSxcclxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXJcclxuICApIHt9XHJcbiAgQElucHV0KCkgY29sOiBhbnk7XHJcbiAgQElucHV0KCkgcm93RGF0YTogYW55O1xyXG4gIEBJbnB1dCgpIGdsb2JhbFNlYXJjaFRleHQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIEBJbnB1dCgpIHByZWRlZmluZWRGaWx0ZXJzQ29sbGVjdGlvbj86IHsgW2tleTogc3RyaW5nXTogSVByZWRlZmluZWRGaWx0ZXJbXSB9ID0ge307IC8vIENvbnRhaW5zIGEgY29sbGVjdGlvbiBvZiB0aGUgdmFsdWVzIHRoYXQgbmVlZCB0byBiZSBzaG93biBmb3IgcHJlZGVmaW5lZCBjb2x1bW4gZmlsdGVyc1xyXG4gIEBJbnB1dCgpIGRhdGVGb3JtYXQ6IHN0cmluZyA9IFwiZGQtTU1NLXl5eXkgSEg6bW06c3Mgenp6elwiO1xyXG4gIEBJbnB1dCgpIGRhdGVUaW1lem9uZTogc3RyaW5nID0gXCIrMDA6MDBcIjtcclxuICBASW5wdXQoKSBkYXRlQ3VsdHVyZTogc3RyaW5nID0gXCJlbi1VU1wiO1xyXG5cclxuICBEYXRhVHlwZSA9IERhdGFUeXBlO1xyXG4gIENlbGxEaXNwbGF5ID0gQ2VsbERpc3BsYXk7XHJcblxyXG4gIC8qKiBPbmx5IGZpbml0ZSBudW1iZXJzIGFyZSB2YWxpZDsgZG8gbm90IHR1cm4gZW1wdHkgc3RyaW5ncyBvciBib29sZWFucyBpbnRvIHByb2dyZXNzLiAqL1xyXG4gIGdldCBoYXNQcm9ncmVzc1ZhbHVlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLnZhbHVlID09PSAnbnVtYmVyJyAmJiBOdW1iZXIuaXNGaW5pdGUodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBnZXQgcHJvZ3Jlc3NWYWx1ZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIE1hdGgubWluKDEwMCwgTWF0aC5tYXgoMCwgdGhpcy52YWx1ZSkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHByb2dyZXNzVG9vbHRpcCgpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbC5kYXRhVG9vbHRpcEN1c3RvbUNvbHVtblNvdXJjZSA/IHRoaXMudG9vbHRpcFRleHQgOiBgJHt0aGlzLnZhbHVlfSAlYDtcclxuICB9XHJcblxyXG4gIGdldCB2YWx1ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnJvd0RhdGFbdGhpcy5jb2wuZmllbGRdO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRvb2x0aXBUZXh0KCkge1xyXG4gICAgaWYgKHRoaXMuY29sLmRhdGFUb29sdGlwQ3VzdG9tQ29sdW1uU291cmNlICYmIHRoaXMuY29sLmRhdGFUb29sdGlwQ3VzdG9tQ29sdW1uU291cmNlLmxlbmd0aCA+IDApIHtcclxuICAgICAgcmV0dXJuIHRoaXMucm93RGF0YVt0aGlzLmNvbC5kYXRhVG9vbHRpcEN1c3RvbUNvbHVtblNvdXJjZV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldExpc3RWYWx1ZXMoY29sOiBhbnksIHJvd0RhdGE6IGFueSk6IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IHZhbHVlID0gcm93RGF0YVtjb2wuZmllbGRdO1xyXG4gICAgcmV0dXJuIHZhbHVlID8gdmFsdWUuc3BsaXQoJzsnKS5tYXAoKHY6IGFueSkgPT4gdi50cmltKCkpIDogW107XHJcbiAgfVxyXG5cclxuICAvKiogTGlzdCB0b29sdGlwcyB1c2UgdGhlIHNhbWUgc2VtaWNvbG9uLXNlcGFyYXRlZCBwb3NpdGlvbnMgYXMgdGhlIGRpc3BsYXllZCBsaXN0LiAqL1xyXG4gIGdldExpc3RUb29sdGlwKGl0ZW06IHN0cmluZywgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLmNvbC5kYXRhVG9vbHRpcEN1c3RvbUNvbHVtblNvdXJjZTtcclxuICAgIGNvbnN0IHRvb2x0aXBzID0gc291cmNlID8gdGhpcy5yb3dEYXRhW3NvdXJjZV0gOiBudWxsO1xyXG4gICAgaWYgKHR5cGVvZiB0b29sdGlwcyAhPT0gJ3N0cmluZycpIHJldHVybiBpdGVtO1xyXG4gICAgLy8gUHJlc2VydmUgZW1wdHkgZW50cmllcyBzbyBzdWJzZXF1ZW50IHRvb2x0aXBzIG5ldmVyIG1vdmUgdG8gYW5vdGhlciBpdGVtLlxyXG4gICAgcmV0dXJuIHRvb2x0aXBzLnNwbGl0KCc7JylbaW5kZXhdPy50cmltKCkgPz8gaXRlbTtcclxuICB9XHJcblxyXG4gIGdldERhdGFBbGlnbkhvcml6b250YWxBc1RleHQoZGF0YUFsaWduSG9yaXpvbnRhbDogRGF0YUFsaWduSG9yaXpvbnRhbCl7XHJcbiAgICAgIGRhdGFBbGlnbkhvcml6b250YWxBc1RleHQoZGF0YUFsaWduSG9yaXpvbnRhbCk7XHJcbiAgfVxyXG4gIGdldERhdGFBbGlnblZlcnRpY2FsQXNUZXh0KGRhdGFBbGlnblZlcnRpY2FsOiBEYXRhQWxpZ25WZXJ0aWNhbCl7XHJcbiAgICAgIGRhdGFBbGlnblZlcnRpY2FsQXNUZXh0KGRhdGFBbGlnblZlcnRpY2FsKTtcclxuICB9XHJcbiAgXHJcblxyXG4gIC8qKlxyXG4gICAqIEZvcm1hdHMgYSBkYXRlIHZhbHVlIHVzaW5nIGVpdGhlciBjb2x1bW4tbGV2ZWwgb3ZlcnJpZGVzIG9yIGdsb2JhbCBzZXR0aW5ncy5cclxuICAgKiBUaGUgaW5jb21pbmcgdmFsdWUgaXMgYXNzdW1lZCB0byByZXByZXNlbnQgYSBVVEMgZGF0ZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZSAtIFRoZSBkYXRlIHZhbHVlIHRvIGJlIGZvcm1hdHRlZC5cclxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGx9IGRhdGVGb3JtYXQgLSBPcHRpb25hbCBjb2x1bW4tbGV2ZWwgb3ZlcnJpZGUgZm9yIHRoZSBkYXRlIGZvcm1hdC5cclxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGx9IGRhdGVUaW1lem9uZSAtIE9wdGlvbmFsIGNvbHVtbi1sZXZlbCBvdmVycmlkZSBmb3IgdGhlIHRpbWV6b25lIHVzZWQgaW4gZm9ybWF0dGluZy5cclxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGx9IGRhdGVDdWx0dXJlIC0gT3B0aW9uYWwgY29sdW1uLWxldmVsIG92ZXJyaWRlIGZvciB0aGUgY3VsdHVyZSB1c2VkIGluIGZvcm1hdHRpbmcuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmcgdXNpbmcgdGhlIGVmZmVjdGl2ZSAoY29sdW1uIG9yIGdsb2JhbCkgc2V0dGluZ3MsXHJcbiAgICogICAgICAgICAgICAgICAgICAgICBvciBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIHZhbHVlIGlzIGludmFsaWQgb3IgdW5kZWZpbmVkLlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuICAgKiAvLyBFeGFtcGxlIHVzaW5nIG9ubHkgZ2xvYmFsIHNldHRpbmdzOlxyXG4gICAqIGNvbnN0IHJlc3VsdCA9IGZvcm1hdERhdGUoZGF0ZVZhbHVlLCBudWxsLCBudWxsLCBudWxsKTtcclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICogLy8gRXhhbXBsZSB1c2luZyBjb2x1bW4tbGV2ZWwgb3ZlcnJpZGVzOlxyXG4gICAqIGNvbnN0IHJlc3VsdCA9IGZvcm1hdERhdGUoZGF0ZVZhbHVlLCAnZGQvTU0veXl5eScsICdVVEMnLCAnZW4tR0InKTtcclxuICAgKi9cclxuICBmb3JtYXREYXRlKHZhbHVlOiBhbnksIGRhdGVGb3JtYXQ6IHN0cmluZyB8IG51bGwsIGRhdGVUaW1lem9uZSA6IHN0cmluZyB8IG51bGwsIGRhdGVDdWx0dXJlIDogc3RyaW5nIHwgbnVsbCk6IHN0cmluZ3tcclxuICAgIGlmKCF2YWx1ZSl7IC8vIElmIG5vIHZhbHVlLCByZXR1cm4gZW1wdHlcclxuICAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIGxldCBmb3JtYXR0ZWREYXRlID0gdW5kZWZpbmVkOyAvLyBCeSBkZWZhdWx0LCBmb3JtYXR0ZWREYXRlIHdpbGwgYmUgdW5kZWZpbmVkXHJcbiAgICBjb25zdCBlZmZlY3RpdmVGb3JtYXQgPSBkYXRlRm9ybWF0ID8/IHRoaXMuZGF0ZUZvcm1hdDtcclxuICAgIGNvbnN0IGVmZmVjdGl2ZVRpbWV6b25lID0gZGF0ZVRpbWV6b25lID8/IHRoaXMuZGF0ZVRpbWV6b25lO1xyXG4gICAgY29uc3QgZWZmZWN0aXZlQ3VsdHVyZSA9IGRhdGVDdWx0dXJlID8/IHRoaXMuZGF0ZUN1bHR1cmU7XHJcbiAgICBpZih2YWx1ZSl7IC8vIElmIHZhbHVlIGlzIG5vdCB1bmRlZmluZWRcclxuICAgICAgbGV0IGRhdGVUb1BhcnNlID0gdmFsdWU7XHJcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmICF2YWx1ZS5lbmRzV2l0aCgnWicpICYmICEvWystXVxcZHsyfTpcXGR7Mn0kLy50ZXN0KHZhbHVlKSkgeyAvLyBDaGVjayBpZiB0aGUgZGF0ZSBkb2VzIG5vdCBjb250YWluIFpcclxuICAgICAgICBkYXRlVG9QYXJzZSArPSAnWic7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgZGF0ZVV0YyA9IG5ldyBEYXRlKGRhdGVUb1BhcnNlKTsgXHJcbiAgICAgIGlmICghaXNOYU4oZGF0ZVV0Yy5nZXRUaW1lKCkpKSB7IC8vIENoZWNrIHRoYXQgdGhlIGRhdGUgaXMgdmFsaWQgYmVmb3JlIHBlcmZvcm1pbmcgdHJhbnNmb3JtYXRpb25cclxuICAgICAgICAgIGZvcm1hdHRlZERhdGUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRlVXRjLCBlZmZlY3RpdmVGb3JtYXQsIGVmZmVjdGl2ZVRpbWV6b25lLCBlZmZlY3RpdmVDdWx0dXJlKTsgLy8gUGVyZm9ybSB0aGUgZGF0ZSBtYXNraW5nXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmb3JtYXR0ZWREYXRlID8/ICcnOyAvLyBSZXR1cm5zIHRoZSBkYXRlIGZvcm1hdHRlZCwgb3IgYXMgZW1wdHkgc3RyaW5nIGlmIGFuIGlzc3VlIHdhcyBmb3VuZCAob3IgdmFsdWUgd2FzIHVuZGVmaW5lZCkuXHJcbiAgfVxyXG5cclxuICBnZXRQcmVkZWZpbmVkRmlsdGVyVG9vbHRpcChjb2xNZXRhZGF0YTogSUNvbHVtbk1ldGFkYXRhLCB2YWx1ZTogYW55KTogYW55IHtcclxuICAgIGlmKGNvbE1ldGFkYXRhLmRhdGFUeXBlID09IERhdGFUeXBlLkxpc3Qpe1xyXG4gICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBpZihjb2xNZXRhZGF0YS5maWx0ZXJQcmVkZWZpbmVkVmFsdWVzTmFtZSAmJiBjb2xNZXRhZGF0YS5maWx0ZXJQcmVkZWZpbmVkVmFsdWVzTmFtZS5sZW5ndGggPiAwKXtcclxuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0UHJlZGVmaW5lZEZpbHRlclZhbHVlcyhjb2xNZXRhZGF0YS5maWx0ZXJQcmVkZWZpbmVkVmFsdWVzTmFtZSk7XHJcbiAgICAgIHJldHVybiBvcHRpb25zLmZpbmQoeCA9PiB4LnZhbHVlID09IHZhbHVlKT8ubmFtZVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVja3MgaWYgdGhlIHByb3ZpZGVkIGNvbHVtbiBtZXRhZGF0YSBtYXRjaGVzIGEgc3BlY2lmaWMgc3R5bGUgb2YgdGhlIHByZWRlZmluZWQgZmlsdGVycyBcclxuICAgKiB0aGF0IG5lZWQgdG8gYmUgYXBwbGllZCB0byBhbiBpdGVtIG9uIGEgcm93LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtJcHJpbWVuZ0NvbHVtbnNNZXRhZGF0YX0gY29sTWV0YWRhdGEgLSBUaGUgbWV0YWRhdGEgb2YgdGhlIGNvbHVtbiBiZWluZyBjaGVja2VkLlxyXG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBiZSBtYXRjaGVkIGFnYWluc3QgdGhlIHByZWRlZmluZWQgZmlsdGVyIHZhbHVlcy5cclxuICAgKiBAcmV0dXJucyB7YW55fSBUaGUgbWF0Y2hpbmcgcHJlZGVmaW5lZCBmaWx0ZXIgdmFsdWUgaWYgZm91bmQsIG90aGVyd2lzZSBudWxsLlxyXG4gICAqL1xyXG4gIGdldFByZWRmaW5lZEZpbHRlck1hdGNoKGNvbE1ldGFkYXRhOiBJQ29sdW1uTWV0YWRhdGEsIHZhbHVlOiBhbnkpOiBhbnkge1xyXG4gICAgaWYgKGNvbE1ldGFkYXRhLmZpbHRlclByZWRlZmluZWRWYWx1ZXNOYW1lICYmIGNvbE1ldGFkYXRhLmZpbHRlclByZWRlZmluZWRWYWx1ZXNOYW1lLmxlbmd0aCA+IDApIHsgLy8gQ2hlY2sgaWYgdGhlIGNvbHVtbiB1c2VzIHByZWRlZmluZWQgZmlsdGVyIHZhbHVlc1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldFByZWRlZmluZWRGaWx0ZXJWYWx1ZXMoY29sTWV0YWRhdGEuZmlsdGVyUHJlZGVmaW5lZFZhbHVlc05hbWUpOyAvLyBHZXQgdGhlIHByZWRlZmluZWQgZmlsdGVyIHZhbHVlcyBiYXNlZCBvbiB0aGUgbmFtZVxyXG4gICAgICAgIHJldHVybiBvcHRpb25zLmZpbmQob3B0aW9uID0+IG9wdGlvbi52YWx1ZSA9PT0gdmFsdWUpOyAvLyBSZXR1cm4gdGhlIG1hdGNoaW5nIG9wdGlvbiBpZiBmb3VuZFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7IC8vIFJldHVybiBudWxsIGlmIHRoZSBjb2x1bW4gZG9lcyBub3QgdXNlIHByZWRlZmluZWQgZmlsdGVyIHZhbHVlc1xyXG4gIH1cclxuICBnZXRQcmVkZWZpbmVkRmlsdGVyVmFsdWVzKGNvbHVtbktleU5hbWU6IHN0cmluZyk6IElQcmVkZWZpbmVkRmlsdGVyW10ge1xyXG4gICAgcmV0dXJuIHRoaXMucHJlZGVmaW5lZEZpbHRlcnNDb2xsZWN0aW9uPy5bY29sdW1uS2V5TmFtZV0gfHwgW107IC8vIFJldHVybiB0aGUgcHJlZGVmaW5lZCBmaWx0ZXIgdmFsdWVzIG9yIGFuIGVtcHR5IGFycmF5IGlmIHRoZSBvcHRpb24gbmFtZSBkb2VzIG5vdCBleGlzdFxyXG4gIH1cclxuXHJcbiAgaGlnaGxpZ2h0VGV4dChjZWxsVmFsdWU6IGFueSwgY29sTWV0YWRhdGE6IElDb2x1bW5NZXRhZGF0YSwgZ2xvYmFsU2VhcmNoVGV4dDogc3RyaW5nIHwgbnVsbCk6IFNhZmVIdG1sIHtcclxuICAgICAgcmV0dXJuIGhpZ2hsaWdodFRleHQoY2VsbFZhbHVlLCBjb2xNZXRhZGF0YSwgZ2xvYmFsU2VhcmNoVGV4dCwgdGhpcy5zYW5pdGl6ZXIpO1xyXG4gIH1cclxuXG4gIGVjc1RyYWNrNihpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpOiBhbnkgeyByZXR1cm4gaW5kZXg7IH1cbiAgZWNzVHJhY2s3KGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSk6IGFueSB7IHJldHVybiBpbmRleDsgfVxufVxyXG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwidmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZFwiPlxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuZGF0YVR5cGUgPT09IERhdGFUeXBlLk51bWVyaWMgJiYgY29sLmNlbGxEaXNwbGF5ID09PSBDZWxsRGlzcGxheS5Qcm9ncmVzc0JhcjsgZWxzZSBlY3NFbHNlNlwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc1Byb2dyZXNzVmFsdWVcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImVjcy1wcm9ncmVzcy1jZWxsXCJcclxuICAgICAgICBbcFRvb2x0aXBdPVwicHJvZ3Jlc3NUb29sdGlwXCJcclxuICAgICAgICBbdG9vbHRpcERpc2FibGVkXT1cIiFjb2wuZGF0YVRvb2x0aXBTaG93XCJcclxuICAgICAgICBbc2hvd0RlbGF5XT1cIjIwMFwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJlY3MtcHJvZ3Jlc3MtYmFyXCIgcm9sZT1cInByb2dyZXNzYmFyXCJcclxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiY29sLmhlYWRlclwiXHJcbiAgICAgICAgICBhcmlhLXZhbHVlbWluPVwiMFwiIGFyaWEtdmFsdWVtYXg9XCIxMDBcIlxyXG4gICAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW5vd109XCJwcm9ncmVzc1ZhbHVlXCJcclxuICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWV0ZXh0XT1cInZhbHVlICsgJyAlJ1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImVjcy1wcm9ncmVzcy1iYXItZmlsbFwiIFtzdHlsZS53aWR0aC4lXT1cInByb2dyZXNzVmFsdWVcIj48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L25nLWNvbnRhaW5lcj48bmctdGVtcGxhdGUgI2Vjc0Vsc2U2PjxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuZmlsdGVyUHJlZGVmaW5lZFZhbHVlc05hbWUgJiYgY29sLmZpbHRlclByZWRlZmluZWRWYWx1ZXNOYW1lLmxlbmd0aCA+IDA7IGVsc2UgZWNzRWxzZTdcIj5cclxuICAgIDxkaXYgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAnanVzdGlmeS1jb250ZW50JzogZ2V0RGF0YUFsaWduSG9yaXpvbnRhbEFzVGV4dChjb2wuZGF0YUFsaWduSG9yaXpvbnRhbCksXHJcbiAgICAgICAgICAgICdhbGlnbi1pdGVtcyc6IGdldERhdGFBbGlnblZlcnRpY2FsQXNUZXh0KGNvbC5kYXRhQWxpZ25WZXJ0aWNhbClcclxuICAgICAgICB9XCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuZGF0YVR5cGUgPT09IERhdGFUeXBlLkxpc3Q7IGVsc2UgZWNzRWxzZThcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldExpc3RWYWx1ZXMoY29sLCByb3dEYXRhKTsgdHJhY2tCeTogZWNzVHJhY2s2OyBsZXQgJGluZGV4ID0gaW5kZXg7IGxldCAkZmlyc3QgPSBmaXJzdDsgbGV0ICRsYXN0ID0gbGFzdDsgbGV0ICRldmVuID0gZXZlbjsgbGV0ICRvZGQgPSBvZGQ7IGxldCAkY291bnQgPSBjb3VudFwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldFByZWRmaW5lZEZpbHRlck1hdGNoKGNvbCwgaXRlbSkgYXMgb3B0aW9uXCI+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IG1hcmdpbi1yaWdodDogMC41cmVtO1wiXHJcbiAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiZ2V0TGlzdFRvb2x0aXAoaXRlbSwgJGluZGV4KVwiXHJcbiAgICAgICAgICAgICAgW2VzY2FwZV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcERpc2FibGVkXT1cIiFjb2wuZGF0YVRvb2x0aXBTaG93XCJcclxuICAgICAgICAgICAgICAgIFtzaG93RGVsYXldPVwiNzAwXCJcclxuICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxyXG4gICAgICAgICAgICAgICAgPGVjcy10YWJsZS1wcmVkZWZpbmVkLWZpbHRlcnMgW29wdGlvbl09XCJvcHRpb25cIiBbY29sXT1cImNvbFwiIFtzZWxlY3RhYmxlXT1cInRydWVcIiBbcm93RGF0YV09XCJyb3dEYXRhXCIgW2dsb2JhbFNlYXJjaFRleHRdPVwiZ2xvYmFsU2VhcmNoVGV4dFwiPjwvZWNzLXRhYmxlLXByZWRlZmluZWQtZmlsdGVycz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+PG5nLXRlbXBsYXRlICNlY3NFbHNlOD5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0UHJlZGZpbmVkRmlsdGVyTWF0Y2goY29sLCB2YWx1ZSkgYXMgb3B0aW9uXCI+XHJcbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogaW5saW5lLWJsb2NrO1wiXHJcbiAgICAgICAgICAgIFtwVG9vbHRpcF09XCJjb2wuZGF0YVRvb2x0aXBDdXN0b21Db2x1bW5Tb3VyY2UgJiYgY29sLmRhdGFUb29sdGlwQ3VzdG9tQ29sdW1uU291cmNlLmxlbmd0aCA+IDAgXHJcbiAgICAgICAgICAgICAgPyByb3dEYXRhW2NvbC5kYXRhVG9vbHRpcEN1c3RvbUNvbHVtblNvdXJjZV0gXHJcbiAgICAgICAgICAgICAgOiB2YWx1ZVwiXHJcbiAgICAgICAgICAgIFt0b29sdGlwRGlzYWJsZWRdPVwiIWNvbC5kYXRhVG9vbHRpcFNob3dcIlxyXG4gICAgICAgICAgICBbc2hvd0RlbGF5XT1cIjcwMFwiXHJcbiAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxyXG4gICAgICAgICAgICA8ZWNzLXRhYmxlLXByZWRlZmluZWQtZmlsdGVycyBbb3B0aW9uXT1cIm9wdGlvblwiIFtjb2xdPVwiY29sXCIgW3NlbGVjdGFibGVdPVwidHJ1ZVwiIFtyb3dEYXRhXT1cInJvd0RhdGFcIiBbZ2xvYmFsU2VhcmNoVGV4dF09XCJnbG9iYWxTZWFyY2hUZXh0XCI+PC9lY3MtdGFibGUtcHJlZGVmaW5lZC1maWx0ZXJzPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLWNvbnRhaW5lcj48bmctdGVtcGxhdGUgI2Vjc0Vsc2U3PlxyXG4gICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29sLmRhdGFUeXBlXCI+PG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiRGF0YVR5cGUuTGlzdFwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ2V0TGlzdFZhbHVlcyhjb2wsIHJvd0RhdGEpOyB0cmFja0J5OiBlY3NUcmFjazc7IGxldCAkaW5kZXggPSBpbmRleDsgbGV0ICRmaXJzdCA9IGZpcnN0OyBsZXQgJGxhc3QgPSBsYXN0OyBsZXQgJGV2ZW4gPSBldmVuOyBsZXQgJG9kZCA9IG9kZDsgbGV0ICRjb3VudCA9IGNvdW50XCI+XHJcbiAgICAgICAgICA8c3BhbiBbaW5uZXJIdG1sXT1cImhpZ2hsaWdodFRleHQoaXRlbSwgY29sLCBnbG9iYWxTZWFyY2hUZXh0KVwiXHJcbiAgICAgICAgICAgIFtwVG9vbHRpcF09XCJnZXRMaXN0VG9vbHRpcChpdGVtLCAkaW5kZXgpXCJcclxuICAgICAgICAgICAgW2VzY2FwZV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIFt0b29sdGlwRGlzYWJsZWRdPVwiIWNvbC5kYXRhVG9vbHRpcFNob3dcIlxyXG4gICAgICAgICAgICBbc2hvd0RlbGF5XT1cIjcwMFwiXHJcbiAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPjwvc3Bhbj48bmctY29udGFpbmVyICpuZ0lmPVwiISRsYXN0XCI+PHNwYW4+Ozwvc3Bhbj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+PG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiRGF0YVR5cGUuQm9vbGVhblwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwicGlcIlxyXG4gICAgICAgICAgW3BUb29sdGlwXT1cImNvbC5kYXRhVG9vbHRpcEN1c3RvbUNvbHVtblNvdXJjZSAmJiBjb2wuZGF0YVRvb2x0aXBDdXN0b21Db2x1bW5Tb3VyY2UubGVuZ3RoID4gMCBcclxuICAgICAgICAgICAgPyByb3dEYXRhW2NvbC5kYXRhVG9vbHRpcEN1c3RvbUNvbHVtblNvdXJjZV0gXHJcbiAgICAgICAgICAgIDogdmFsdWVcIlxyXG4gICAgICAgICAgW3Rvb2x0aXBEaXNhYmxlZF09XCIhY29sLmRhdGFUb29sdGlwU2hvdyB8fCAhY29sLmRhdGFUb29sdGlwQ3VzdG9tQ29sdW1uU291cmNlIHx8IGNvbC5kYXRhVG9vbHRpcEN1c3RvbUNvbHVtblNvdXJjZS5sZW5ndGggPT09IDBcIlxyXG4gICAgICAgICAgW3Nob3dEZWxheV09XCI3MDBcIlxyXG4gICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCJcclxuICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJ2YWx1ZSA/ICdncmVlbicgOiAncmVkJ1wiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7ICdwaS1jaGVjay1jaXJjbGUnOiB2YWx1ZSwgJ3BpLXRpbWVzLWNpcmNsZSc6ICF2YWx1ZSB9XCI+XHJcbiAgICAgICAgPC9pPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj48bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJEYXRhVHlwZS5EYXRlXCI+XHJcbiAgICAgICAgPGRpdiBcclxuICAgICAgICAgIFtpbm5lckh0bWxdPVwiaGlnaGxpZ2h0VGV4dChmb3JtYXREYXRlKHZhbHVlLCBjb2wuZGF0ZUZvcm1hdCwgY29sLmRhdGVUaW1lem9uZSwgY29sLmRhdGVDdWx0dXJlKSwgY29sLCBnbG9iYWxTZWFyY2hUZXh0KVwiXHJcbiAgICAgICAgICBbcFRvb2x0aXBdPVwiY29sLmRhdGFUb29sdGlwQ3VzdG9tQ29sdW1uU291cmNlICYmIGNvbC5kYXRhVG9vbHRpcEN1c3RvbUNvbHVtblNvdXJjZS5sZW5ndGggPiAwIFxyXG4gICAgICAgICAgICA/IHJvd0RhdGFbY29sLmRhdGFUb29sdGlwQ3VzdG9tQ29sdW1uU291cmNlXSBcclxuICAgICAgICAgICAgOiBmb3JtYXREYXRlKHZhbHVlLCBjb2wuZGF0ZUZvcm1hdCwgY29sLmRhdGVUaW1lem9uZSwgY29sLmRhdGVDdWx0dXJlKVwiXHJcbiAgICAgICAgICBbdG9vbHRpcERpc2FibGVkXT1cIiFjb2wuZGF0YVRvb2x0aXBTaG93XCJcclxuICAgICAgICAgIFtzaG93RGVsYXldPVwiNzAwXCJcclxuICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxyXG4gICAgICAgICAge3sgZm9ybWF0RGF0ZSh2YWx1ZSwgY29sLmRhdGVGb3JtYXQsIGNvbC5kYXRlVGltZXpvbmUsIGNvbC5kYXRlQ3VsdHVyZSkgfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+PG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIFtpbm5lckh0bWxdPVwiaGlnaGxpZ2h0VGV4dCh2YWx1ZSwgY29sLCBnbG9iYWxTZWFyY2hUZXh0KVwiXHJcbiAgICAgICAgICBbcFRvb2x0aXBdPVwiY29sLmRhdGFUb29sdGlwQ3VzdG9tQ29sdW1uU291cmNlICYmIGNvbC5kYXRhVG9vbHRpcEN1c3RvbUNvbHVtblNvdXJjZS5sZW5ndGggPiAwIFxyXG4gICAgICAgICAgICA/IHJvd0RhdGFbY29sLmRhdGFUb29sdGlwQ3VzdG9tQ29sdW1uU291cmNlXSBcclxuICAgICAgICAgICAgOiB2YWx1ZVwiXHJcbiAgICAgICAgICBbdG9vbHRpcERpc2FibGVkXT1cIiFjb2wuZGF0YVRvb2x0aXBTaG93XCJcclxuICAgICAgICAgIFtzaG93RGVsYXldPVwiNzAwXCJcclxuICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxyXG4gICAgICAgICAge3sgdmFsdWUgfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+PC9uZy1jb250YWluZXI+XHJcbiAgPC9uZy10ZW1wbGF0ZT48L25nLXRlbXBsYXRlPlxyXG48L25nLWNvbnRhaW5lcj5cclxuIl19
@@ -0,0 +1,94 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { SkeletonModule } from 'primeng/skeleton';
3
+ import { TagModule } from 'primeng/tag';
4
+ import { highlightText } from '../../utils';
5
+ import { CommonModule } from '@angular/common';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/platform-browser";
8
+ import * as i2 from "../ecs-primeng-table/ecs-primeng-table.service";
9
+ import * as i3 from "primeng/skeleton";
10
+ import * as i4 from "primeng/tag";
11
+ import * as i5 from "@angular/common";
12
+ export class TablePredefinedFilters {
13
+ constructor(sanitizer, tableService) {
14
+ this.sanitizer = sanitizer;
15
+ this.tableService = tableService;
16
+ this.selectable = false;
17
+ }
18
+ /**
19
+ * Converts a blob from the database to a safe URL that can be used to display an image.
20
+ *
21
+ * This function takes a `Blob` object, converts it to a base64 encoded string, and returns a `SafeUrl`
22
+ * that can be used in an HTML template to display the image securely. The `SafeUrl` ensures that
23
+ * Angular's security mechanisms are bypassed correctly, preventing potential security risks.
24
+ *
25
+ * @param {Blob} blob - The blob object representing the image data from the database.
26
+ * @returns {SafeUrl} A safe URL that can be used to display the image in an HTML template.
27
+ *
28
+ * @example
29
+ * // Example usage in a component
30
+ * const imageBlob = new Blob([binaryData], { type: 'image/jpeg' });
31
+ * const imageUrl = this.getBlobIconAsUrl(imageBlob);
32
+ *
33
+ * // In your HTML template
34
+ * <img [src]="imageUrl" alt="Image">
35
+ */
36
+ getBlobIconAsUrl(blob) {
37
+ let objectURL = `data:image/jpeg;base64,${blob}`; // Create a base64 encoded string from the blob data
38
+ return this.sanitizer.bypassSecurityTrustUrl(objectURL); // Bypass Angular's security mechanisms to create a SafeUrl
39
+ }
40
+ handleClick() {
41
+ if (this.option.action) {
42
+ this.tableService.handlePredefinedFilterClick(this.option.action, this.rowData, this.option);
43
+ }
44
+ }
45
+ getTagStyle(option) {
46
+ return {
47
+ ...option.tagStyle,
48
+ 'vertical-align': 'middle',
49
+ 'gap': 0
50
+ };
51
+ }
52
+ getImageSkeletonStyle(width, height, isSkeleton = false) {
53
+ const finalHeight = height && height > 0 ? `${height}px` : '22px'; // Compute final height; use default if invalid
54
+ let finalWidth;
55
+ if (width && width > 0) { // If width is valid, use it
56
+ finalWidth = `${width}px`;
57
+ }
58
+ else if (isSkeleton) { // If it's a skeleton and width is not provided, mirror the height
59
+ finalWidth = finalHeight;
60
+ }
61
+ const style = {
62
+ 'vertical-align': 'middle',
63
+ 'height': finalHeight
64
+ };
65
+ if (finalWidth) { // Add width if available
66
+ style['width'] = finalWidth;
67
+ }
68
+ return style;
69
+ }
70
+ highlightText(cellValue, colMetadata, globalSearchText) {
71
+ return highlightText(cellValue, colMetadata, globalSearchText ?? null, this.sanitizer);
72
+ }
73
+ }
74
+ TablePredefinedFilters.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TablePredefinedFilters, deps: [{ token: i1.DomSanitizer }, { token: i2.ECSPrimengTableService }], target: i0.ɵɵFactoryTarget.Component });
75
+ TablePredefinedFilters.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: TablePredefinedFilters, isStandalone: true, selector: "ecs-table-predefined-filters", inputs: { option: "option", col: "col", selectable: "selectable", rowData: "rowData", globalSearchText: "globalSearchText" }, ngImport: i0, template: "<div style=\"display: flex; align-items: center; gap: 0.5rem;\"\r\n [style.cursor]=\"(selectable && option?.action) ? 'pointer' : 'default'\"\r\n [attr.role]=\"selectable && option?.action ? 'button' : null\"\r\n (click)=\"handleClick(); selectable && option?.action && $event.stopPropagation();\">\r\n <ng-container *ngIf=\"option?.icon\">\r\n <i [class]=\"option.icon\" [style]=\"'vertical-align: middle; color: '+(option.iconColor || '') +';' +(option.iconStyle || '')\"></i>\r\n </ng-container>\r\n <ng-container *ngIf=\"!option?.imageBlob && option?.imageBlobSourceEndpoint\"> <!-- If a blob image needs to be loaded from endpoint, while it's still loading, show skeleton -->\r\n <p-skeleton [style]=\"getImageSkeletonStyle(option.imageWidth, option.imageHeight, true)\"></p-skeleton>\r\n </ng-container>\r\n <ng-container *ngIf=\"option?.imageBlob\">\r\n <img alt=\"image\" [src]=\"getBlobIconAsUrl(option.imageBlob)\" [style]=\"getImageSkeletonStyle(option.imageWidth, option.imageHeight)\"/>\r\n </ng-container>\r\n <ng-container *ngIf=\"option?.imageURL\">\r\n <img alt=\"iconFromURL\" [src]=\"option.imageURL\" [style]=\"getImageSkeletonStyle(option.imageWidth, option.imageHeight)\"/>\r\n </ng-container>\r\n <ng-container *ngIf=\"option?.displayTag === true\">\r\n <p-tag [innerHtml]=\"highlightText(option.name, col, globalSearchText)\" [style]=\"getTagStyle(option)\" [value]=\"option.name\"></p-tag>\r\n </ng-container>\r\n <ng-container *ngIf=\"option?.displayName === true\">\r\n <span style=\"gap: 0;\" [innerHtml]=\"highlightText(option.name, col, globalSearchText)\" [ngStyle]=\"option.nameStyle || {}\">{{ option.name }}</span>\r\n </ng-container>\r\n</div>", dependencies: [{ kind: "ngmodule", type: SkeletonModule }, { kind: "component", type: i3.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "ngmodule", type: TagModule }, { kind: "component", type: i4.Tag, selector: "p-tag", inputs: ["styleClass", "style", "severity", "value", "icon", "rounded"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
76
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TablePredefinedFilters, decorators: [{
77
+ type: Component,
78
+ args: [{ selector: 'ecs-table-predefined-filters', imports: [
79
+ SkeletonModule,
80
+ TagModule,
81
+ CommonModule
82
+ ], standalone: true, template: "<div style=\"display: flex; align-items: center; gap: 0.5rem;\"\r\n [style.cursor]=\"(selectable && option?.action) ? 'pointer' : 'default'\"\r\n [attr.role]=\"selectable && option?.action ? 'button' : null\"\r\n (click)=\"handleClick(); selectable && option?.action && $event.stopPropagation();\">\r\n <ng-container *ngIf=\"option?.icon\">\r\n <i [class]=\"option.icon\" [style]=\"'vertical-align: middle; color: '+(option.iconColor || '') +';' +(option.iconStyle || '')\"></i>\r\n </ng-container>\r\n <ng-container *ngIf=\"!option?.imageBlob && option?.imageBlobSourceEndpoint\"> <!-- If a blob image needs to be loaded from endpoint, while it's still loading, show skeleton -->\r\n <p-skeleton [style]=\"getImageSkeletonStyle(option.imageWidth, option.imageHeight, true)\"></p-skeleton>\r\n </ng-container>\r\n <ng-container *ngIf=\"option?.imageBlob\">\r\n <img alt=\"image\" [src]=\"getBlobIconAsUrl(option.imageBlob)\" [style]=\"getImageSkeletonStyle(option.imageWidth, option.imageHeight)\"/>\r\n </ng-container>\r\n <ng-container *ngIf=\"option?.imageURL\">\r\n <img alt=\"iconFromURL\" [src]=\"option.imageURL\" [style]=\"getImageSkeletonStyle(option.imageWidth, option.imageHeight)\"/>\r\n </ng-container>\r\n <ng-container *ngIf=\"option?.displayTag === true\">\r\n <p-tag [innerHtml]=\"highlightText(option.name, col, globalSearchText)\" [style]=\"getTagStyle(option)\" [value]=\"option.name\"></p-tag>\r\n </ng-container>\r\n <ng-container *ngIf=\"option?.displayName === true\">\r\n <span style=\"gap: 0;\" [innerHtml]=\"highlightText(option.name, col, globalSearchText)\" [ngStyle]=\"option.nameStyle || {}\">{{ option.name }}</span>\r\n </ng-container>\r\n</div>" }]
83
+ }], ctorParameters: function () { return [{ type: i1.DomSanitizer }, { type: i2.ECSPrimengTableService }]; }, propDecorators: { option: [{
84
+ type: Input
85
+ }], col: [{
86
+ type: Input
87
+ }], selectable: [{
88
+ type: Input
89
+ }], rowData: [{
90
+ type: Input
91
+ }], globalSearchText: [{
92
+ type: Input
93
+ }] } });
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtcHJlZGVmaW5lZC1maWx0ZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWNzLXByaW1lbmctdGFibGUvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlLXByZWRlZmluZWQtZmlsdGVycy90YWJsZS1wcmVkZWZpbmVkLWZpbHRlcnMudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lY3MtcHJpbWVuZy10YWJsZS9zcmMvbGliL2NvbXBvbmVudHMvdGFibGUtcHJlZGVmaW5lZC1maWx0ZXJzL3RhYmxlLXByZWRlZmluZWQtZmlsdGVycy5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXhDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFNUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7O0FBWS9DLE1BQU0sT0FBTyxzQkFBc0I7SUFDakMsWUFDVSxTQUF1QixFQUN2QixZQUFvQztRQURwQyxjQUFTLEdBQVQsU0FBUyxDQUFjO1FBQ3ZCLGlCQUFZLEdBQVosWUFBWSxDQUF3QjtRQUlyQyxlQUFVLEdBQVksS0FBSyxDQUFDO0lBSGxDLENBQUM7SUFNSjs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FpQkc7SUFDSCxnQkFBZ0IsQ0FBQyxJQUFVO1FBQ3pCLElBQUksU0FBUyxHQUFHLDBCQUEwQixJQUFJLEVBQUUsQ0FBQyxDQUFDLG9EQUFvRDtRQUN0RyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQywyREFBMkQ7SUFDdEgsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDOUY7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQVc7UUFDckIsT0FBTztZQUNMLEdBQUcsTUFBTSxDQUFDLFFBQVE7WUFDbEIsZ0JBQWdCLEVBQUUsUUFBUTtZQUMxQixLQUFLLEVBQUUsQ0FBQztTQUNULENBQUM7SUFDSixDQUFDO0lBRUQscUJBQXFCLENBQUMsS0FBYyxFQUFFLE1BQWUsRUFBRSxhQUFzQixLQUFLO1FBQ2hGLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQywrQ0FBK0M7UUFDbEgsSUFBSSxVQUE4QixDQUFDO1FBQ25DLElBQUksS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsRUFBRSw0QkFBNEI7WUFDcEQsVUFBVSxHQUFHLEdBQUcsS0FBSyxJQUFJLENBQUM7U0FDM0I7YUFBTSxJQUFJLFVBQVUsRUFBRSxFQUFFLGtFQUFrRTtZQUN6RixVQUFVLEdBQUcsV0FBVyxDQUFDO1NBQzFCO1FBQ0QsTUFBTSxLQUFLLEdBQTJCO1lBQ3BDLGdCQUFnQixFQUFFLFFBQVE7WUFDMUIsUUFBUSxFQUFFLFdBQVc7U0FDdEIsQ0FBQztRQUNGLElBQUksVUFBVSxFQUFFLEVBQUUseUJBQXlCO1lBQ3pDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxVQUFVLENBQUM7U0FDN0I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxhQUFhLENBQUMsU0FBYyxFQUFFLFdBQTRCLEVBQUUsZ0JBQTJDO1FBQ25HLE9BQU8sYUFBYSxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLElBQUksSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMzRixDQUFDOztvSEFuRVUsc0JBQXNCO3dHQUF0QixzQkFBc0Isc05DbkJuQyx3ckRBc0JNLDJDRFZGLGNBQWMsa01BQ2QsU0FBUywrSkFDVCxZQUFZOzRGQUtILHNCQUFzQjtrQkFWbEMsU0FBUzsrQkFDRSw4QkFBOEIsV0FDL0I7d0JBQ1AsY0FBYzt3QkFDZCxTQUFTO3dCQUNULFlBQVk7cUJBQ2IsY0FDVyxJQUFJO3dJQVFQLE1BQU07c0JBQWQsS0FBSztnQkFDRyxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sLCBTYWZlVXJsIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IFNrZWxldG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9za2VsZXRvbic7XHJcbmltcG9ydCB7IFRhZ01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdGFnJztcclxuaW1wb3J0IHsgRUNTUHJpbWVuZ1RhYmxlU2VydmljZSB9IGZyb20gJy4uL2Vjcy1wcmltZW5nLXRhYmxlL2Vjcy1wcmltZW5nLXRhYmxlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBoaWdobGlnaHRUZXh0IH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xyXG5pbXBvcnQgeyBJQ29sdW1uTWV0YWRhdGEgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZWNzLXRhYmxlLXByZWRlZmluZWQtZmlsdGVycycsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgU2tlbGV0b25Nb2R1bGUsXHJcbiAgICBUYWdNb2R1bGUsXHJcbiAgICBDb21tb25Nb2R1bGVcclxuICBdLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLXByZWRlZmluZWQtZmlsdGVycy5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVGFibGVQcmVkZWZpbmVkRmlsdGVycyB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxyXG4gICAgcHJpdmF0ZSB0YWJsZVNlcnZpY2U6IEVDU1ByaW1lbmdUYWJsZVNlcnZpY2VcclxuICApIHt9XHJcbiAgQElucHV0KCkgb3B0aW9uOiBhbnk7XHJcbiAgQElucHV0KCkgY29sOiBhbnk7XHJcbiAgQElucHV0KCkgc2VsZWN0YWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHJvd0RhdGE6IGFueTtcclxuICBASW5wdXQoKSBnbG9iYWxTZWFyY2hUZXh0PzogYW55O1xyXG4gIC8qKlxyXG4gICAqIENvbnZlcnRzIGEgYmxvYiBmcm9tIHRoZSBkYXRhYmFzZSB0byBhIHNhZmUgVVJMIHRoYXQgY2FuIGJlIHVzZWQgdG8gZGlzcGxheSBhbiBpbWFnZS5cclxuICAgKlxyXG4gICAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBgQmxvYmAgb2JqZWN0LCBjb252ZXJ0cyBpdCB0byBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZywgYW5kIHJldHVybnMgYSBgU2FmZVVybGAgXHJcbiAgICogdGhhdCBjYW4gYmUgdXNlZCBpbiBhbiBIVE1MIHRlbXBsYXRlIHRvIGRpc3BsYXkgdGhlIGltYWdlIHNlY3VyZWx5LiBUaGUgYFNhZmVVcmxgIGVuc3VyZXMgdGhhdCBcclxuICAgKiBBbmd1bGFyJ3Mgc2VjdXJpdHkgbWVjaGFuaXNtcyBhcmUgYnlwYXNzZWQgY29ycmVjdGx5LCBwcmV2ZW50aW5nIHBvdGVudGlhbCBzZWN1cml0eSByaXNrcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QmxvYn0gYmxvYiAtIFRoZSBibG9iIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGltYWdlIGRhdGEgZnJvbSB0aGUgZGF0YWJhc2UuXHJcbiAgICogQHJldHVybnMge1NhZmVVcmx9IEEgc2FmZSBVUkwgdGhhdCBjYW4gYmUgdXNlZCB0byBkaXNwbGF5IHRoZSBpbWFnZSBpbiBhbiBIVE1MIHRlbXBsYXRlLlxyXG4gICAqIFxyXG4gICAqIEBleGFtcGxlXHJcbiAgICogLy8gRXhhbXBsZSB1c2FnZSBpbiBhIGNvbXBvbmVudFxyXG4gICAqIGNvbnN0IGltYWdlQmxvYiA9IG5ldyBCbG9iKFtiaW5hcnlEYXRhXSwgeyB0eXBlOiAnaW1hZ2UvanBlZycgfSk7XHJcbiAgICogY29uc3QgaW1hZ2VVcmwgPSB0aGlzLmdldEJsb2JJY29uQXNVcmwoaW1hZ2VCbG9iKTtcclxuICAgKiBcclxuICAgKiAvLyBJbiB5b3VyIEhUTUwgdGVtcGxhdGVcclxuICAgKiA8aW1nIFtzcmNdPVwiaW1hZ2VVcmxcIiBhbHQ9XCJJbWFnZVwiPlxyXG4gICAqL1xyXG4gIGdldEJsb2JJY29uQXNVcmwoYmxvYjogQmxvYik6IFNhZmVVcmwge1xyXG4gICAgbGV0IG9iamVjdFVSTCA9IGBkYXRhOmltYWdlL2pwZWc7YmFzZTY0LCR7YmxvYn1gOyAvLyBDcmVhdGUgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgZnJvbSB0aGUgYmxvYiBkYXRhXHJcbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFVybChvYmplY3RVUkwpOyAvLyBCeXBhc3MgQW5ndWxhcidzIHNlY3VyaXR5IG1lY2hhbmlzbXMgdG8gY3JlYXRlIGEgU2FmZVVybFxyXG4gIH1cclxuXHJcbiAgaGFuZGxlQ2xpY2soKSB7XHJcbiAgICBpZiAodGhpcy5vcHRpb24uYWN0aW9uKSB7XHJcbiAgICAgIHRoaXMudGFibGVTZXJ2aWNlLmhhbmRsZVByZWRlZmluZWRGaWx0ZXJDbGljayh0aGlzLm9wdGlvbi5hY3Rpb24sIHRoaXMucm93RGF0YSwgdGhpcy5vcHRpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0VGFnU3R5bGUob3B0aW9uOiBhbnkpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIC4uLm9wdGlvbi50YWdTdHlsZSxcclxuICAgICAgJ3ZlcnRpY2FsLWFsaWduJzogJ21pZGRsZScsXHJcbiAgICAgICdnYXAnOiAwXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0SW1hZ2VTa2VsZXRvblN0eWxlKHdpZHRoPzogbnVtYmVyLCBoZWlnaHQ/OiBudW1iZXIsIGlzU2tlbGV0b246IGJvb2xlYW4gPSBmYWxzZSk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgY29uc3QgZmluYWxIZWlnaHQgPSBoZWlnaHQgJiYgaGVpZ2h0ID4gMCA/IGAke2hlaWdodH1weGAgOiAnMjJweCc7IC8vIENvbXB1dGUgZmluYWwgaGVpZ2h0OyB1c2UgZGVmYXVsdCBpZiBpbnZhbGlkXHJcbiAgICBsZXQgZmluYWxXaWR0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gICAgaWYgKHdpZHRoICYmIHdpZHRoID4gMCkgeyAvLyBJZiB3aWR0aCBpcyB2YWxpZCwgdXNlIGl0XHJcbiAgICAgIGZpbmFsV2lkdGggPSBgJHt3aWR0aH1weGA7XHJcbiAgICB9IGVsc2UgaWYgKGlzU2tlbGV0b24pIHsgLy8gSWYgaXQncyBhIHNrZWxldG9uIGFuZCB3aWR0aCBpcyBub3QgcHJvdmlkZWQsIG1pcnJvciB0aGUgaGVpZ2h0XHJcbiAgICAgIGZpbmFsV2lkdGggPSBmaW5hbEhlaWdodDtcclxuICAgIH1cclxuICAgIGNvbnN0IHN0eWxlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xyXG4gICAgICAndmVydGljYWwtYWxpZ24nOiAnbWlkZGxlJyxcclxuICAgICAgJ2hlaWdodCc6IGZpbmFsSGVpZ2h0XHJcbiAgICB9O1xyXG4gICAgaWYgKGZpbmFsV2lkdGgpIHsgLy8gQWRkIHdpZHRoIGlmIGF2YWlsYWJsZVxyXG4gICAgICBzdHlsZVsnd2lkdGgnXSA9IGZpbmFsV2lkdGg7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3R5bGU7XHJcbiAgfVxyXG5cclxuICBoaWdobGlnaHRUZXh0KGNlbGxWYWx1ZTogYW55LCBjb2xNZXRhZGF0YTogSUNvbHVtbk1ldGFkYXRhLCBnbG9iYWxTZWFyY2hUZXh0OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkICk6IFNhZmVIdG1sIHtcclxuICAgICAgcmV0dXJuIGhpZ2hsaWdodFRleHQoY2VsbFZhbHVlLCBjb2xNZXRhZGF0YSwgZ2xvYmFsU2VhcmNoVGV4dCA/PyBudWxsLCB0aGlzLnNhbml0aXplcik7XHJcbiAgfVxyXG59IiwiPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogMC41cmVtO1wiXHJcbiAgICBbc3R5bGUuY3Vyc29yXT1cIihzZWxlY3RhYmxlICYmIG9wdGlvbj8uYWN0aW9uKSA/ICdwb2ludGVyJyA6ICdkZWZhdWx0J1wiXHJcbiAgICBbYXR0ci5yb2xlXT1cInNlbGVjdGFibGUgJiYgb3B0aW9uPy5hY3Rpb24gPyAnYnV0dG9uJyA6IG51bGxcIlxyXG4gICAgKGNsaWNrKT1cImhhbmRsZUNsaWNrKCk7IHNlbGVjdGFibGUgJiYgb3B0aW9uPy5hY3Rpb24gJiYgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1wiPlxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb24/Lmljb25cIj5cclxuICAgIDxpIFtjbGFzc109XCJvcHRpb24uaWNvblwiIFtzdHlsZV09XCIndmVydGljYWwtYWxpZ246IG1pZGRsZTsgY29sb3I6ICcrKG9wdGlvbi5pY29uQ29sb3IgfHwgJycpICsnOycgKyhvcHRpb24uaWNvblN0eWxlIHx8ICcnKVwiPjwvaT5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIW9wdGlvbj8uaW1hZ2VCbG9iICYmIG9wdGlvbj8uaW1hZ2VCbG9iU291cmNlRW5kcG9pbnRcIj4gPCEtLSBJZiBhIGJsb2IgaW1hZ2UgbmVlZHMgdG8gYmUgbG9hZGVkIGZyb20gZW5kcG9pbnQsIHdoaWxlIGl0J3Mgc3RpbGwgbG9hZGluZywgc2hvdyBza2VsZXRvbiAtLT5cclxuICAgIDxwLXNrZWxldG9uIFtzdHlsZV09XCJnZXRJbWFnZVNrZWxldG9uU3R5bGUob3B0aW9uLmltYWdlV2lkdGgsIG9wdGlvbi5pbWFnZUhlaWdodCwgdHJ1ZSlcIj48L3Atc2tlbGV0b24+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvbj8uaW1hZ2VCbG9iXCI+XHJcbiAgICA8aW1nIGFsdD1cImltYWdlXCIgW3NyY109XCJnZXRCbG9iSWNvbkFzVXJsKG9wdGlvbi5pbWFnZUJsb2IpXCIgW3N0eWxlXT1cImdldEltYWdlU2tlbGV0b25TdHlsZShvcHRpb24uaW1hZ2VXaWR0aCwgb3B0aW9uLmltYWdlSGVpZ2h0KVwiLz5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9uPy5pbWFnZVVSTFwiPlxyXG4gICAgPGltZyBhbHQ9XCJpY29uRnJvbVVSTFwiIFtzcmNdPVwib3B0aW9uLmltYWdlVVJMXCIgW3N0eWxlXT1cImdldEltYWdlU2tlbGV0b25TdHlsZShvcHRpb24uaW1hZ2VXaWR0aCwgb3B0aW9uLmltYWdlSGVpZ2h0KVwiLz5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9uPy5kaXNwbGF5VGFnID09PSB0cnVlXCI+XHJcbiAgICA8cC10YWcgW2lubmVySHRtbF09XCJoaWdobGlnaHRUZXh0KG9wdGlvbi5uYW1lLCBjb2wsIGdsb2JhbFNlYXJjaFRleHQpXCIgW3N0eWxlXT1cImdldFRhZ1N0eWxlKG9wdGlvbilcIiBbdmFsdWVdPVwib3B0aW9uLm5hbWVcIj48L3AtdGFnPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb24/LmRpc3BsYXlOYW1lID09PSB0cnVlXCI+XHJcbiAgICA8c3BhbiBzdHlsZT1cImdhcDogMDtcIiBbaW5uZXJIdG1sXT1cImhpZ2hsaWdodFRleHQob3B0aW9uLm5hbWUsIGNvbCwgZ2xvYmFsU2VhcmNoVGV4dClcIiAgW25nU3R5bGVdPVwib3B0aW9uLm5hbWVTdHlsZSB8fCB7fVwiPnt7IG9wdGlvbi5uYW1lIH19PC9zcGFuPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L2Rpdj4iXX0=
@@ -0,0 +1,117 @@
1
+ import { ECSPrimengTableI18nService } from '../../services/i18n.service';
2
+ import { ECSTableTranslatePipe } from '../../pipes/ui-translate.pipe';
3
+ import { CommonModule } from '@angular/common';
4
+ import { inject, Component, EventEmitter, Input, Output } from '@angular/core';
5
+ import { FormsModule } from '@angular/forms';
6
+ import { ButtonModule } from 'primeng/button';
7
+ import { DialogModule } from 'primeng/dialog';
8
+ import { InputTextModule } from 'primeng/inputtext';
9
+ import { TableModule } from 'primeng/table';
10
+ import { TooltipModule } from 'primeng/tooltip';
11
+ import { CheckboxModule } from 'primeng/checkbox';
12
+ import * as i0 from "@angular/core";
13
+ import * as i1 from "../../services";
14
+ import * as i2 from "primeng/dialog";
15
+ import * as i3 from "primeng/api";
16
+ import * as i4 from "primeng/table";
17
+ import * as i5 from "primeng/button";
18
+ import * as i6 from "@angular/forms";
19
+ import * as i7 from "primeng/tooltip";
20
+ import * as i8 from "primeng/inputtext";
21
+ import * as i9 from "primeng/checkbox";
22
+ export class ViewsManagement {
23
+ constructor(notification) {
24
+ this.notification = notification;
25
+ this.i18n = inject(ECSPrimengTableI18nService);
26
+ this.visible = false;
27
+ this.tableViews_menuItems = [];
28
+ this.onViewSelect = new EventEmitter();
29
+ this.onViewDelete = new EventEmitter();
30
+ this.onViewUpdateData = new EventEmitter();
31
+ this.onViewUpdateActiveStartup = new EventEmitter();
32
+ this.onViewEditAlias = new EventEmitter();
33
+ this.onViewCreate = new EventEmitter();
34
+ this.visibleChange = new EventEmitter();
35
+ this.viewEditorShow = false;
36
+ this.editingViewAlias = '';
37
+ this.newViewAlias = '';
38
+ }
39
+ loadView(viewAlias) {
40
+ this.onViewSelect.emit(viewAlias);
41
+ }
42
+ deleteView(viewAlias) {
43
+ this.onViewDelete.emit(viewAlias);
44
+ }
45
+ updateView(viewAlias) {
46
+ this.onViewUpdateData.emit(viewAlias);
47
+ }
48
+ updateViewActiveStartup(viewAlias) {
49
+ this.onViewUpdateActiveStartup.emit(viewAlias);
50
+ }
51
+ createView(viewAlias) {
52
+ const exists = this.tableViews_menuItems.some(item => item.label === viewAlias);
53
+ if (exists) {
54
+ this.notification.showToast("error", this.i18n.text("DUPLICATE VIEW NAME"), this.i18n.text("A view with alias \"{{value0}}\" already exists", { value0: viewAlias }));
55
+ return;
56
+ }
57
+ this.onViewCreate.emit(viewAlias);
58
+ }
59
+ editViewAlias(viewAliasOld, viewAliasNew) {
60
+ this.onViewEditAlias.emit({
61
+ viewAliasOld: viewAliasOld,
62
+ viewAliasNew: viewAliasNew
63
+ });
64
+ }
65
+ showViewEditor(editingViewAlias = '') {
66
+ this.editingViewAlias = editingViewAlias;
67
+ this.newViewAlias = this.editingViewAlias;
68
+ this.viewEditorShow = true;
69
+ }
70
+ closeModal() {
71
+ this.visibleChange.emit(false);
72
+ }
73
+ createOrUpdateTableView() {
74
+ this.viewEditorShow = false;
75
+ if (this.editingViewAlias !== '') {
76
+ this.editViewAlias(this.editingViewAlias, this.newViewAlias);
77
+ }
78
+ else {
79
+ this.createView(this.newViewAlias);
80
+ }
81
+ }
82
+ }
83
+ ViewsManagement.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ViewsManagement, deps: [{ token: i1.ECSPrimengTableNotificationService }], target: i0.ɵɵFactoryTarget.Component });
84
+ ViewsManagement.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ViewsManagement, isStandalone: true, selector: "ecs-views-management", inputs: { visible: "visible", tableViews_menuItems: "tableViews_menuItems" }, outputs: { onViewSelect: "onViewSelect", onViewDelete: "onViewDelete", onViewUpdateData: "onViewUpdateData", onViewUpdateActiveStartup: "onViewUpdateActiveStartup", onViewEditAlias: "onViewEditAlias", onViewCreate: "onViewCreate", visibleChange: "visibleChange" }, ngImport: i0, template: "<p-dialog [(visible)]=\"visible\" [modal]=\"true\" [draggable]=\"false\" [resizable]=\"false\"\r\n [closable]=\"true\" [closeOnEscape]=\"false\" [maximizable]=\"false\" [style]=\"{'min-width': '70vw', 'max-width': '70vw'}\" (onHide)=\"closeModal()\">\r\n <ng-template pTemplate=\"header\">\r\n <div>\r\n <span class=\"p-dialog-title\">{{ 'Table views' | ecsTranslate }}</span>\r\n </div>\r\n </ng-template>\r\n <div class=\"p-4 pt-0\">\r\n <p-table #dt_viewsDialog [value]=\"tableViews_menuItems\" [scrollable]=\"true\" size=\"small\" showGridlines stripedRows scrollHeight=\"400px\" [tableStyle]=\"{'min-width': '25rem'}\">\r\n <ng-template pTemplate=\"caption\">\r\n <div style=\"display: flex; justify-content: flex-end; align-items: center; width: 100%;\">\r\n <p-button icon=\"pi pi-plus\" [label]=\"'New view' | ecsTranslate\" (click)=\"showViewEditor()\" [pTooltip]=\"'New view' | ecsTranslate\" tooltipPosition=\"top\" [showDelay]=\"700\"></p-button>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"text-align: center;\">{{ 'View name' | ecsTranslate }}</th>\r\n <th style=\"text-align: center; max-width: 220px; min-width: 220px; width: 220px;\">{{ 'Load on startup' | ecsTranslate }}</th>\r\n <th style=\"text-align: center; max-width: 220px; min-width: 220px; width: 220px;\">{{ 'Actions' | ecsTranslate }}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData>\r\n <tr>\r\n <td>\r\n {{rowData.label}}\r\n </td>\r\n <td style=\"text-align: center; max-width: 220px; min-width: 220px; width: 220px;\">\r\n <p-checkbox [(ngModel)]=\"rowData.lastActive\" [binary]=\"true\" (onChange)=\"updateViewActiveStartup(rowData.label)\"></p-checkbox>\r\n </td>\r\n <td style=\"max-width: 220px; min-width: 220px; width: 220px; display: flex; justify-content: center; align-items: center; height: 100%;\">\r\n <button pButton icon=\"pi pi-upload\" (click)=\"loadView(rowData.label);\" [showDelay]=\"700\" [pTooltip]=\"'Restore' | ecsTranslate\" tooltipPosition=\"top\" size=\"small\" class=\"p-button-sm\" style=\"height: 28px; margin-right: 10px;\"></button>\r\n <button pButton icon=\"pi pi-save\" (click)=\"updateView(rowData.label);\" [showDelay]=\"700\" [pTooltip]=\"'Save' | ecsTranslate\" tooltipPosition=\"top\" size=\"small\" class=\"p-button-sm\" style=\"height: 28px; margin-right: 10px;\"></button>\r\n <button pButton icon=\"pi pi-pencil\" (click)=\"showViewEditor(rowData.label);\" [showDelay]=\"700\" [pTooltip]=\"'Edit' | ecsTranslate\" tooltipPosition=\"top\" size=\"small\" class=\"p-button-sm\" style=\"height: 28px; margin-right: 10px;\"></button>\r\n <button pButton icon=\"pi pi-trash\" (click)=\"deleteView(rowData.label);\" [showDelay]=\"700\" [pTooltip]=\"'Delete' | ecsTranslate\" tooltipPosition=\"top\" size=\"small\" class=\"p-button-sm\" style=\"height: 28px;\"></button>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td colspan=\"999\">{{ 'There are no views' | ecsTranslate }}</td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n <div style=\"display: flex; flex-direction: row; justify-content: space-between; align-items: center; margin-top: 10px;\">\r\n {{ 'Showing {{count}} views' | ecsTranslate: { count: tableViews_menuItems ? tableViews_menuItems.length : 0 } }}\r\n </div>\r\n </div>\r\n</p-dialog>\r\n\r\n<!--TABLE VIEW SAVE-->\r\n<p-dialog [(visible)]=\"viewEditorShow\" [modal]=\"true\" [draggable]=\"false\" [resizable]=\"false\" [closeOnEscape]=\"false\" [closable]=\"false\" [maximizable]=\"false\" [style]=\"{'max-width': '60vw'}\">\r\n <ng-template pTemplate=\"header\">\r\n <div class=\"inline-flex align-items-center justify-content-center gap-2\">\r\n <span class=\"white-space-nowrap\"><b>{{ (editingViewAlias !== '' ? 'UPDATE VIEW' : 'CREATE NEW VIEW') | ecsTranslate }}</b></span>\r\n </div>\r\n </ng-template>\r\n <div style=\"display: flex; flex-direction: column; gap: 8px;\">\r\n <label for=\"newtableviewname\"><strong>{{ 'View alias' | ecsTranslate }}<span style=\"color: red;\">*</span></strong></label>\r\n <input \r\n pInputText \r\n id=\"newtableviewname\" \r\n aria-describedby=\"newtableviewname-help\" \r\n style=\"width: 400px;\"\r\n maxlength=\"30\"\r\n [(ngModel)]=\"newViewAlias\"/>\r\n </div>\r\n <ng-template pTemplate=\"footer\" style=\"display: flex; justify-content: space-between; align-items: center;\">\r\n <p-button (click)=\"viewEditorShow = false\" [label]=\"'Cancel' | ecsTranslate\" outlined=\"true\" [style]=\"{'margin-top': '20px'}\"></p-button>\r\n <p-button (click)=\"createOrUpdateTableView()\" [label]=\"(editingViewAlias !== '' ? 'Update' : 'Create') | ecsTranslate\" [style]=\"{'margin-top': '20px'}\"></p-button>\r\n </ng-template>\r\n</p-dialog>", dependencies: [{ kind: "pipe", type: ECSTableTranslatePipe, name: "ecsTranslate" }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i2.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "visible", "style", "position"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i4.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "virtualRowHeight", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["selectAllChange", "selectionChange", "contextMenuSelectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i5.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "component", type: i5.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "style", "styleClass", "badgeClass", "ariaLabel"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i7.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "fitContent", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i8.InputText, selector: "[pInputText]" }, { kind: "ngmodule", type: CheckboxModule }, { kind: "component", type: i9.Checkbox, selector: "p-checkbox", inputs: ["value", "name", "disabled", "binary", "label", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "styleClass", "labelStyleClass", "formControl", "checkboxIcon", "readonly", "required", "trueValue", "falseValue"], outputs: ["onChange"] }] });
85
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ViewsManagement, decorators: [{
86
+ type: Component,
87
+ args: [{ selector: 'ecs-views-management', imports: [
88
+ ECSTableTranslatePipe,
89
+ DialogModule,
90
+ TableModule,
91
+ ButtonModule,
92
+ CommonModule,
93
+ FormsModule,
94
+ TooltipModule,
95
+ InputTextModule,
96
+ CheckboxModule
97
+ ], standalone: true, template: "<p-dialog [(visible)]=\"visible\" [modal]=\"true\" [draggable]=\"false\" [resizable]=\"false\"\r\n [closable]=\"true\" [closeOnEscape]=\"false\" [maximizable]=\"false\" [style]=\"{'min-width': '70vw', 'max-width': '70vw'}\" (onHide)=\"closeModal()\">\r\n <ng-template pTemplate=\"header\">\r\n <div>\r\n <span class=\"p-dialog-title\">{{ 'Table views' | ecsTranslate }}</span>\r\n </div>\r\n </ng-template>\r\n <div class=\"p-4 pt-0\">\r\n <p-table #dt_viewsDialog [value]=\"tableViews_menuItems\" [scrollable]=\"true\" size=\"small\" showGridlines stripedRows scrollHeight=\"400px\" [tableStyle]=\"{'min-width': '25rem'}\">\r\n <ng-template pTemplate=\"caption\">\r\n <div style=\"display: flex; justify-content: flex-end; align-items: center; width: 100%;\">\r\n <p-button icon=\"pi pi-plus\" [label]=\"'New view' | ecsTranslate\" (click)=\"showViewEditor()\" [pTooltip]=\"'New view' | ecsTranslate\" tooltipPosition=\"top\" [showDelay]=\"700\"></p-button>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"text-align: center;\">{{ 'View name' | ecsTranslate }}</th>\r\n <th style=\"text-align: center; max-width: 220px; min-width: 220px; width: 220px;\">{{ 'Load on startup' | ecsTranslate }}</th>\r\n <th style=\"text-align: center; max-width: 220px; min-width: 220px; width: 220px;\">{{ 'Actions' | ecsTranslate }}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData>\r\n <tr>\r\n <td>\r\n {{rowData.label}}\r\n </td>\r\n <td style=\"text-align: center; max-width: 220px; min-width: 220px; width: 220px;\">\r\n <p-checkbox [(ngModel)]=\"rowData.lastActive\" [binary]=\"true\" (onChange)=\"updateViewActiveStartup(rowData.label)\"></p-checkbox>\r\n </td>\r\n <td style=\"max-width: 220px; min-width: 220px; width: 220px; display: flex; justify-content: center; align-items: center; height: 100%;\">\r\n <button pButton icon=\"pi pi-upload\" (click)=\"loadView(rowData.label);\" [showDelay]=\"700\" [pTooltip]=\"'Restore' | ecsTranslate\" tooltipPosition=\"top\" size=\"small\" class=\"p-button-sm\" style=\"height: 28px; margin-right: 10px;\"></button>\r\n <button pButton icon=\"pi pi-save\" (click)=\"updateView(rowData.label);\" [showDelay]=\"700\" [pTooltip]=\"'Save' | ecsTranslate\" tooltipPosition=\"top\" size=\"small\" class=\"p-button-sm\" style=\"height: 28px; margin-right: 10px;\"></button>\r\n <button pButton icon=\"pi pi-pencil\" (click)=\"showViewEditor(rowData.label);\" [showDelay]=\"700\" [pTooltip]=\"'Edit' | ecsTranslate\" tooltipPosition=\"top\" size=\"small\" class=\"p-button-sm\" style=\"height: 28px; margin-right: 10px;\"></button>\r\n <button pButton icon=\"pi pi-trash\" (click)=\"deleteView(rowData.label);\" [showDelay]=\"700\" [pTooltip]=\"'Delete' | ecsTranslate\" tooltipPosition=\"top\" size=\"small\" class=\"p-button-sm\" style=\"height: 28px;\"></button>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td colspan=\"999\">{{ 'There are no views' | ecsTranslate }}</td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n <div style=\"display: flex; flex-direction: row; justify-content: space-between; align-items: center; margin-top: 10px;\">\r\n {{ 'Showing {{count}} views' | ecsTranslate: { count: tableViews_menuItems ? tableViews_menuItems.length : 0 } }}\r\n </div>\r\n </div>\r\n</p-dialog>\r\n\r\n<!--TABLE VIEW SAVE-->\r\n<p-dialog [(visible)]=\"viewEditorShow\" [modal]=\"true\" [draggable]=\"false\" [resizable]=\"false\" [closeOnEscape]=\"false\" [closable]=\"false\" [maximizable]=\"false\" [style]=\"{'max-width': '60vw'}\">\r\n <ng-template pTemplate=\"header\">\r\n <div class=\"inline-flex align-items-center justify-content-center gap-2\">\r\n <span class=\"white-space-nowrap\"><b>{{ (editingViewAlias !== '' ? 'UPDATE VIEW' : 'CREATE NEW VIEW') | ecsTranslate }}</b></span>\r\n </div>\r\n </ng-template>\r\n <div style=\"display: flex; flex-direction: column; gap: 8px;\">\r\n <label for=\"newtableviewname\"><strong>{{ 'View alias' | ecsTranslate }}<span style=\"color: red;\">*</span></strong></label>\r\n <input \r\n pInputText \r\n id=\"newtableviewname\" \r\n aria-describedby=\"newtableviewname-help\" \r\n style=\"width: 400px;\"\r\n maxlength=\"30\"\r\n [(ngModel)]=\"newViewAlias\"/>\r\n </div>\r\n <ng-template pTemplate=\"footer\" style=\"display: flex; justify-content: space-between; align-items: center;\">\r\n <p-button (click)=\"viewEditorShow = false\" [label]=\"'Cancel' | ecsTranslate\" outlined=\"true\" [style]=\"{'margin-top': '20px'}\"></p-button>\r\n <p-button (click)=\"createOrUpdateTableView()\" [label]=\"(editingViewAlias !== '' ? 'Update' : 'Create') | ecsTranslate\" [style]=\"{'margin-top': '20px'}\"></p-button>\r\n </ng-template>\r\n</p-dialog>" }]
98
+ }], ctorParameters: function () { return [{ type: i1.ECSPrimengTableNotificationService }]; }, propDecorators: { visible: [{
99
+ type: Input
100
+ }], tableViews_menuItems: [{
101
+ type: Input
102
+ }], onViewSelect: [{
103
+ type: Output
104
+ }], onViewDelete: [{
105
+ type: Output
106
+ }], onViewUpdateData: [{
107
+ type: Output
108
+ }], onViewUpdateActiveStartup: [{
109
+ type: Output
110
+ }], onViewEditAlias: [{
111
+ type: Output
112
+ }], onViewCreate: [{
113
+ type: Output
114
+ }], visibleChange: [{
115
+ type: Output
116
+ }] } });
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3MtbWFuYWdlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Vjcy1wcmltZW5nLXRhYmxlL3NyYy9saWIvY29tcG9uZW50cy92aWV3cy1tYW5hZ2VtZW50L3ZpZXdzLW1hbmFnZW1lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lY3MtcHJpbWVuZy10YWJsZS9zcmMvbGliL2NvbXBvbmVudHMvdmlld3MtbWFuYWdlbWVudC92aWV3cy1tYW5hZ2VtZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDekUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVoRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7Ozs7Ozs7O0FBaUJsRCxNQUFNLE9BQU8sZUFBZTtJQUUxQixZQUNVLFlBQWdEO1FBQWhELGlCQUFZLEdBQVosWUFBWSxDQUFvQztRQUZ6QyxTQUFJ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QUFlO2lHQUFmLGVBQWUsdWFDNUI1QixnNktBc0VXLHVDRHZEUCxxQkFBcUIsb0RBQ3JCLFlBQVksaTBCQUNaLFdBQVcseTVEQUNYLFlBQVksOFpBQ1osWUFBWSw4QkFDWixXQUFXLGl4QkFDWCxhQUFhLHlWQUNiLGVBQWUsbUdBQ2YsY0FBYzs0RkFLTCxlQUFlO2tCQWhCM0IsU0FBUzsrQkFDRSxzQkFBc0IsV0FDdkI7d0JBQ1AscUJBQXFCO3dCQUNyQixZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsWUFBWTt3QkFDWixZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsYUFBYTt3QkFDYixlQUFlO3dCQUNmLGNBQWM7cUJBQ2YsY0FDVyxJQUFJO3lIQVFQLE9BQU87c0JBQWYsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0ksWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyx5QkFBeUI7c0JBQWxDLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFQ1NQcmltZW5nVGFibGVJMThuU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2kxOG4uc2VydmljZSc7XHJcbmltcG9ydCB7IEVDU1RhYmxlVHJhbnNsYXRlUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL3VpLXRyYW5zbGF0ZS5waXBlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgaW5qZWN0LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xyXG5pbXBvcnQgeyBEaWFsb2dNb2R1bGUgfSBmcm9tICdwcmltZW5nL2RpYWxvZyc7XHJcbmltcG9ydCB7IElucHV0VGV4dE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvaW5wdXR0ZXh0JztcclxuaW1wb3J0IHsgVGFibGVNb2R1bGUgfSBmcm9tICdwcmltZW5nL3RhYmxlJztcclxuaW1wb3J0IHsgVG9vbHRpcE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdG9vbHRpcCc7XHJcbmltcG9ydCB7IEVDU1ByaW1lbmdUYWJsZU5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IENoZWNrYm94TW9kdWxlIH0gZnJvbSAncHJpbWVuZy9jaGVja2JveCc7XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZWNzLXZpZXdzLW1hbmFnZW1lbnQnLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIEVDU1RhYmxlVHJhbnNsYXRlUGlwZSxcclxuICAgIERpYWxvZ01vZHVsZSxcclxuICAgIFRhYmxlTW9kdWxlLFxyXG4gICAgQnV0dG9uTW9kdWxlLFxyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBUb29sdGlwTW9kdWxlLFxyXG4gICAgSW5wdXRUZXh0TW9kdWxlLFxyXG4gICAgQ2hlY2tib3hNb2R1bGVcclxuICBdLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3ZpZXdzLW1hbmFnZW1lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFZpZXdzTWFuYWdlbWVudCB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBpMThuID0gaW5qZWN0KEVDU1ByaW1lbmdUYWJsZUkxOG5TZXJ2aWNlKTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgbm90aWZpY2F0aW9uOiBFQ1NQcmltZW5nVGFibGVOb3RpZmljYXRpb25TZXJ2aWNlXHJcbiAgKSB7fVxyXG4gIEBJbnB1dCgpIHZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSB0YWJsZVZpZXdzX21lbnVJdGVtczogYW55W10gPSBbXTtcclxuICBAT3V0cHV0KCkgb25WaWV3U2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgQE91dHB1dCgpIG9uVmlld0RlbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBPdXRwdXQoKSBvblZpZXdVcGRhdGVEYXRhID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgQE91dHB1dCgpIG9uVmlld1VwZGF0ZUFjdGl2ZVN0YXJ0dXAgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAT3V0cHV0KCkgb25WaWV3RWRpdEFsaWFzID0gbmV3IEV2ZW50RW1pdHRlcjx7IHZpZXdBbGlhc09sZDogc3RyaW5nOyB2aWV3QWxpYXNOZXc6IHN0cmluZyB9PigpO1xyXG4gIEBPdXRwdXQoKSBvblZpZXdDcmVhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAT3V0cHV0KCkgdmlzaWJsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICB2aWV3RWRpdG9yU2hvdzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGVkaXRpbmdWaWV3QWxpYXM6IHN0cmluZyA9ICcnO1xyXG4gIG5ld1ZpZXdBbGlhczogc3RyaW5nID0gJyc7XHJcbiAgbG9hZFZpZXcodmlld0FsaWFzOiBzdHJpbmcpIHtcclxuICAgIHRoaXMub25WaWV3U2VsZWN0LmVtaXQodmlld0FsaWFzKTtcclxuICB9XHJcbiAgZGVsZXRlVmlldyh2aWV3QWxpYXM6IHN0cmluZyl7XHJcbiAgICB0aGlzLm9uVmlld0RlbGV0ZS5lbWl0KHZpZXdBbGlhcyk7XHJcbiAgfVxyXG4gIHVwZGF0ZVZpZXcodmlld0FsaWFzOiBzdHJpbmcpe1xyXG4gICAgdGhpcy5vblZpZXdVcGRhdGVEYXRhLmVtaXQodmlld0FsaWFzKTtcclxuICB9XHJcbiAgdXBkYXRlVmlld0FjdGl2ZVN0YXJ0dXAodmlld0FsaWFzOiBzdHJpbmcpe1xyXG4gICAgdGhpcy5vblZpZXdVcGRhdGVBY3RpdmVTdGFydHVwLmVtaXQodmlld0FsaWFzKTtcclxuICB9XHJcbiAgY3JlYXRlVmlldyh2aWV3QWxpYXM6IHN0cmluZyl7XHJcbiAgICBjb25zdCBleGlzdHMgPSB0aGlzLnRhYmxlVmlld3NfbWVudUl0ZW1zLnNvbWUoaXRlbSA9PiBpdGVtLmxhYmVsID09PSB2aWV3QWxpYXMpO1xyXG4gICAgaWYgKGV4aXN0cykge1xyXG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbi5zaG93VG9hc3QoXCJlcnJvclwiLCB0aGlzLmkxOG4udGV4dChcIkRVUExJQ0FURSBWSUVXIE5BTUVcIiksIHRoaXMuaTE4bi50ZXh0KFwiQSB2aWV3IHdpdGggYWxpYXMgXFxcInt7dmFsdWUwfX1cXFwiIGFscmVhZHkgZXhpc3RzXCIsIHsgdmFsdWUwOiB2aWV3QWxpYXMgfSkpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uVmlld0NyZWF0ZS5lbWl0KHZpZXdBbGlhcyk7XHJcbiAgfVxyXG4gIGVkaXRWaWV3QWxpYXModmlld0FsaWFzT2xkOiBzdHJpbmcsIHZpZXdBbGlhc05ldzogc3RyaW5nKSB7XHJcbiAgdGhpcy5vblZpZXdFZGl0QWxpYXMuZW1pdCh7XHJcbiAgICAgIHZpZXdBbGlhc09sZDogdmlld0FsaWFzT2xkLFxyXG4gICAgICB2aWV3QWxpYXNOZXc6IHZpZXdBbGlhc05ld1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIFxyXG4gIHNob3dWaWV3RWRpdG9yKGVkaXRpbmdWaWV3QWxpYXM6IHN0cmluZyA9ICcnKXtcclxuICAgIHRoaXMuZWRpdGluZ1ZpZXdBbGlhcyA9IGVkaXRpbmdWaWV3QWxpYXM7XHJcbiAgICB0aGlzLm5ld1ZpZXdBbGlhcyA9IHRoaXMuZWRpdGluZ1ZpZXdBbGlhcztcclxuICAgIHRoaXMudmlld0VkaXRvclNob3c9dHJ1ZTtcclxuICB9XHJcblxyXG4gIGNsb3NlTW9kYWwoKXtcclxuICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZU9yVXBkYXRlVGFibGVWaWV3KCl7XHJcbiAgICB0aGlzLnZpZXdFZGl0b3JTaG93PWZhbHNlO1xyXG4gICAgaWYodGhpcy5lZGl0aW5nVmlld0FsaWFzICE9PSAnJyl7XHJcbiAgICAgIHRoaXMuZWRpdFZpZXdBbGlhcyh0aGlzLmVkaXRpbmdWaWV3QWxpYXMsIHRoaXMubmV3Vmlld0FsaWFzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3JlYXRlVmlldyh0aGlzLm5ld1ZpZXdBbGlhcyk7XHJcbiAgICB9XHJcbiAgfVxyXG59IiwiPHAtZGlhbG9nIFsodmlzaWJsZSldPVwidmlzaWJsZVwiIFttb2RhbF09XCJ0cnVlXCIgW2RyYWdnYWJsZV09XCJmYWxzZVwiIFtyZXNpemFibGVdPVwiZmFsc2VcIlxyXG4gICAgW2Nsb3NhYmxlXT1cInRydWVcIiBbY2xvc2VPbkVzY2FwZV09XCJmYWxzZVwiIFttYXhpbWl6YWJsZV09XCJmYWxzZVwiIFtzdHlsZV09XCJ7J21pbi13aWR0aCc6ICc3MHZ3JywgJ21heC13aWR0aCc6ICc3MHZ3J31cIiAob25IaWRlKT1cImNsb3NlTW9kYWwoKVwiPlxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1kaWFsb2ctdGl0bGVcIj57eyAnVGFibGUgdmlld3MnIHwgZWNzVHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxkaXYgY2xhc3M9XCJwLTQgcHQtMFwiPlxyXG4gICAgICAgIDxwLXRhYmxlICNkdF92aWV3c0RpYWxvZyBbdmFsdWVdPVwidGFibGVWaWV3c19tZW51SXRlbXNcIiBbc2Nyb2xsYWJsZV09XCJ0cnVlXCIgc2l6ZT1cInNtYWxsXCIgc2hvd0dyaWRsaW5lcyBzdHJpcGVkUm93cyBzY3JvbGxIZWlnaHQ9XCI0MDBweFwiIFt0YWJsZVN0eWxlXT1cInsnbWluLXdpZHRoJzogJzI1cmVtJ31cIj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNhcHRpb25cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOyBhbGlnbi1pdGVtczogY2VudGVyOyB3aWR0aDogMTAwJTtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cC1idXR0b24gaWNvbj1cInBpIHBpLXBsdXNcIiBbbGFiZWxdPVwiJ05ldyB2aWV3JyB8IGVjc1RyYW5zbGF0ZVwiIChjbGljayk9XCJzaG93Vmlld0VkaXRvcigpXCIgW3BUb29sdGlwXT1cIidOZXcgdmlldycgfCBlY3NUcmFuc2xhdGVcIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIiBbc2hvd0RlbGF5XT1cIjcwMFwiPjwvcC1idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjtcIj57eyAnVmlldyBuYW1lJyB8IGVjc1RyYW5zbGF0ZSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyOyBtYXgtd2lkdGg6IDIyMHB4OyBtaW4td2lkdGg6IDIyMHB4OyB3aWR0aDogMjIwcHg7XCI+e3sgJ0xvYWQgb24gc3RhcnR1cCcgfCBlY3NUcmFuc2xhdGUgfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjsgbWF4LXdpZHRoOiAyMjBweDsgbWluLXdpZHRoOiAyMjBweDsgd2lkdGg6IDIyMHB4O1wiPnt7ICdBY3Rpb25zJyB8IGVjc1RyYW5zbGF0ZSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiIGxldC1yb3dEYXRhPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tyb3dEYXRhLmxhYmVsfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjsgbWF4LXdpZHRoOiAyMjBweDsgbWluLXdpZHRoOiAyMjBweDsgd2lkdGg6IDIyMHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cC1jaGVja2JveCBbKG5nTW9kZWwpXT1cInJvd0RhdGEubGFzdEFjdGl2ZVwiIFtiaW5hcnldPVwidHJ1ZVwiIChvbkNoYW5nZSk9XCJ1cGRhdGVWaWV3QWN0aXZlU3RhcnR1cChyb3dEYXRhLmxhYmVsKVwiPjwvcC1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT1cIm1heC13aWR0aDogMjIwcHg7IG1pbi13aWR0aDogMjIwcHg7IHdpZHRoOiAyMjBweDsgZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGhlaWdodDogMTAwJTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIGljb249XCJwaSBwaS11cGxvYWRcIiAoY2xpY2spPVwibG9hZFZpZXcocm93RGF0YS5sYWJlbCk7XCIgW3Nob3dEZWxheV09XCI3MDBcIiBbcFRvb2x0aXBdPVwiJ1Jlc3RvcmUnIHwgZWNzVHJhbnNsYXRlXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCIgc2l6ZT1cInNtYWxsXCIgY2xhc3M9XCJwLWJ1dHRvbi1zbVwiIHN0eWxlPVwiaGVpZ2h0OiAyOHB4OyBtYXJnaW4tcmlnaHQ6IDEwcHg7XCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBpY29uPVwicGkgcGktc2F2ZVwiIChjbGljayk9XCJ1cGRhdGVWaWV3KHJvd0RhdGEubGFiZWwpO1wiIFtzaG93RGVsYXldPVwiNzAwXCIgW3BUb29sdGlwXT1cIidTYXZlJyB8IGVjc1RyYW5zbGF0ZVwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiIHNpemU9XCJzbWFsbFwiIGNsYXNzPVwicC1idXR0b24tc21cIiBzdHlsZT1cImhlaWdodDogMjhweDsgbWFyZ2luLXJpZ2h0OiAxMHB4O1wiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gaWNvbj1cInBpIHBpLXBlbmNpbFwiIChjbGljayk9XCJzaG93Vmlld0VkaXRvcihyb3dEYXRhLmxhYmVsKTtcIiBbc2hvd0RlbGF5XT1cIjcwMFwiIFtwVG9vbHRpcF09XCInRWRpdCcgfCBlY3NUcmFuc2xhdGVcIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIiBzaXplPVwic21hbGxcIiBjbGFzcz1cInAtYnV0dG9uLXNtXCIgc3R5bGU9XCJoZWlnaHQ6IDI4cHg7IG1hcmdpbi1yaWdodDogMTBweDtcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIGljb249XCJwaSBwaS10cmFzaFwiIChjbGljayk9XCJkZWxldGVWaWV3KHJvd0RhdGEubGFiZWwpO1wiIFtzaG93RGVsYXldPVwiNzAwXCIgW3BUb29sdGlwXT1cIidEZWxldGUnIHwgZWNzVHJhbnNsYXRlXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCIgc2l6ZT1cInNtYWxsXCIgY2xhc3M9XCJwLWJ1dHRvbi1zbVwiIHN0eWxlPVwiaGVpZ2h0OiAyOHB4O1wiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCI+XHJcbiAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI5OTlcIj57eyAnVGhlcmUgYXJlIG5vIHZpZXdzJyB8IGVjc1RyYW5zbGF0ZSB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvcC10YWJsZT5cclxuICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IHJvdzsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyBhbGlnbi1pdGVtczogY2VudGVyOyBtYXJnaW4tdG9wOiAxMHB4O1wiPlxyXG4gICAgICAgICAgICB7eyAnU2hvd2luZyB7e2NvdW50fX0gdmlld3MnIHwgZWNzVHJhbnNsYXRlOiB7IGNvdW50OiB0YWJsZVZpZXdzX21lbnVJdGVtcyA/IHRhYmxlVmlld3NfbWVudUl0ZW1zLmxlbmd0aCA6IDAgfSB9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvcC1kaWFsb2c+XHJcblxyXG48IS0tVEFCTEUgVklFVyBTQVZFLS0+XHJcbjxwLWRpYWxvZyBbKHZpc2libGUpXT1cInZpZXdFZGl0b3JTaG93XCIgW21vZGFsXT1cInRydWVcIiBbZHJhZ2dhYmxlXT1cImZhbHNlXCIgW3Jlc2l6YWJsZV09XCJmYWxzZVwiIFtjbG9zZU9uRXNjYXBlXT1cImZhbHNlXCIgW2Nsb3NhYmxlXT1cImZhbHNlXCIgW21heGltaXphYmxlXT1cImZhbHNlXCIgW3N0eWxlXT1cInsnbWF4LXdpZHRoJzogJzYwdncnfVwiPlxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbmxpbmUtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIndoaXRlLXNwYWNlLW5vd3JhcFwiPjxiPnt7IChlZGl0aW5nVmlld0FsaWFzICE9PSAnJyA/ICdVUERBVEUgVklFVycgOiAnQ1JFQVRFIE5FVyBWSUVXJykgfCBlY3NUcmFuc2xhdGUgfX08L2I+PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBnYXA6IDhweDtcIj5cclxuICAgICAgICA8bGFiZWwgZm9yPVwibmV3dGFibGV2aWV3bmFtZVwiPjxzdHJvbmc+e3sgJ1ZpZXcgYWxpYXMnIHwgZWNzVHJhbnNsYXRlIH19PHNwYW4gc3R5bGU9XCJjb2xvcjogcmVkO1wiPio8L3NwYW4+PC9zdHJvbmc+PC9sYWJlbD5cclxuICAgICAgICA8aW5wdXQgXHJcbiAgICAgICAgICAgIHBJbnB1dFRleHQgXHJcbiAgICAgICAgICAgIGlkPVwibmV3dGFibGV2aWV3bmFtZVwiIFxyXG4gICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PVwibmV3dGFibGV2aWV3bmFtZS1oZWxwXCIgXHJcbiAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDQwMHB4O1wiXHJcbiAgICAgICAgICAgIG1heGxlbmd0aD1cIjMwXCJcclxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJuZXdWaWV3QWxpYXNcIi8+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmb290ZXJcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgYWxpZ24taXRlbXM6IGNlbnRlcjtcIj5cclxuICAgICAgICA8cC1idXR0b24gKGNsaWNrKT1cInZpZXdFZGl0b3JTaG93ID0gZmFsc2VcIiBbbGFiZWxdPVwiJ0NhbmNlbCcgfCBlY3NUcmFuc2xhdGVcIiBvdXRsaW5lZD1cInRydWVcIiBbc3R5bGVdPVwieydtYXJnaW4tdG9wJzogJzIwcHgnfVwiPjwvcC1idXR0b24+XHJcbiAgICAgICAgPHAtYnV0dG9uIChjbGljayk9XCJjcmVhdGVPclVwZGF0ZVRhYmxlVmlldygpXCIgW2xhYmVsXT1cIihlZGl0aW5nVmlld0FsaWFzICE9PSAnJyA/ICdVcGRhdGUnIDogJ0NyZWF0ZScpIHwgZWNzVHJhbnNsYXRlXCIgW3N0eWxlXT1cInsnbWFyZ2luLXRvcCc6ICcyMHB4J31cIj48L3AtYnV0dG9uPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuPC9wLWRpYWxvZz4iXX0=
@@ -0,0 +1,7 @@
1
+ /** Cell presentation. Filtering, sorting and export continue to use DataType. */
2
+ export var CellDisplay;
3
+ (function (CellDisplay) {
4
+ CellDisplay[CellDisplay["Default"] = 0] = "Default";
5
+ CellDisplay[CellDisplay["ProgressBar"] = 1] = "ProgressBar";
6
+ })(CellDisplay || (CellDisplay = {}));
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1kaXNwbGF5LmVudW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lY3MtcHJpbWVuZy10YWJsZS9zcmMvbGliL2VudW1zL2NlbGwtZGlzcGxheS5lbnVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlGQUFpRjtBQUNqRixNQUFNLENBQU4sSUFBWSxXQUdYO0FBSEQsV0FBWSxXQUFXO0lBQ25CLG1EQUFXLENBQUE7SUFDWCwyREFBZSxDQUFBO0FBQ25CLENBQUMsRUFIVyxXQUFXLEtBQVgsV0FBVyxRQUd0QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBDZWxsIHByZXNlbnRhdGlvbi4gRmlsdGVyaW5nLCBzb3J0aW5nIGFuZCBleHBvcnQgY29udGludWUgdG8gdXNlIERhdGFUeXBlLiAqL1xyXG5leHBvcnQgZW51bSBDZWxsRGlzcGxheSB7XHJcbiAgICBEZWZhdWx0ID0gMCxcclxuICAgIFByb2dyZXNzQmFyID0gMVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Defines how content that overflows a table cell is displayed.
3
+ *
4
+ * @remarks
5
+ * This enumeration specifies the visual behavior of cell content when it exceeds the cell’s width.
6
+ */
7
+ export var CellOverflowBehaviour;
8
+ (function (CellOverflowBehaviour) {
9
+ /** The overflowing content is clipped and not visible. */
10
+ CellOverflowBehaviour[CellOverflowBehaviour["Hidden"] = 0] = "Hidden";
11
+ /** The content wraps onto multiple lines to fit within the cell. */
12
+ CellOverflowBehaviour[CellOverflowBehaviour["Wrap"] = 1] = "Wrap";
13
+ })(CellOverflowBehaviour || (CellOverflowBehaviour = {}));
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1vdmVyZmxvdy1iZWhhdmlvdXIuZW51bS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Vjcy1wcmltZW5nLXRhYmxlL3NyYy9saWIvZW51bXMvY2VsbC1vdmVyZmxvdy1iZWhhdmlvdXIuZW51bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBTixJQUFZLHFCQU1YO0FBTkQsV0FBWSxxQkFBcUI7SUFDN0IsMERBQTBEO0lBQzFELHFFQUFNLENBQUE7SUFFTixvRUFBb0U7SUFDcEUsaUVBQUksQ0FBQTtBQUNSLENBQUMsRUFOVyxxQkFBcUIsS0FBckIscUJBQXFCLFFBTWhDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIERlZmluZXMgaG93IGNvbnRlbnQgdGhhdCBvdmVyZmxvd3MgYSB0YWJsZSBjZWxsIGlzIGRpc3BsYXllZC5cclxuICpcclxuICogQHJlbWFya3NcclxuICogVGhpcyBlbnVtZXJhdGlvbiBzcGVjaWZpZXMgdGhlIHZpc3VhbCBiZWhhdmlvciBvZiBjZWxsIGNvbnRlbnQgd2hlbiBpdCBleGNlZWRzIHRoZSBjZWxs4oCZcyB3aWR0aC5cclxuICovXHJcbmV4cG9ydCBlbnVtIENlbGxPdmVyZmxvd0JlaGF2aW91ciB7XHJcbiAgICAvKiogVGhlIG92ZXJmbG93aW5nIGNvbnRlbnQgaXMgY2xpcHBlZCBhbmQgbm90IHZpc2libGUuICovXHJcbiAgICBIaWRkZW4sXHJcblxyXG4gICAgLyoqIFRoZSBjb250ZW50IHdyYXBzIG9udG8gbXVsdGlwbGUgbGluZXMgdG8gZml0IHdpdGhpbiB0aGUgY2VsbC4gKi9cclxuICAgIFdyYXBcclxufSJdfQ==
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Defines the horizontal alignment of content within a table cell.
3
+ *
4
+ * @remarks
5
+ * Specifies how the content inside a cell is positioned horizontally relative to the cell's width.
6
+ */
7
+ export var DataAlignHorizontal;
8
+ (function (DataAlignHorizontal) {
9
+ /** Content is aligned to the left side of the cell. */
10
+ DataAlignHorizontal[DataAlignHorizontal["Left"] = 0] = "Left";
11
+ /** Content is aligned to the center of the cell. */
12
+ DataAlignHorizontal[DataAlignHorizontal["Center"] = 1] = "Center";
13
+ /** Content is aligned to the right side of the cell. */
14
+ DataAlignHorizontal[DataAlignHorizontal["Right"] = 2] = "Right";
15
+ })(DataAlignHorizontal || (DataAlignHorizontal = {}));
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1hbGlnbi1ob3Jpem9udGFsLmVudW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lY3MtcHJpbWVuZy10YWJsZS9zcmMvbGliL2VudW1zL2RhdGEtYWxpZ24taG9yaXpvbnRhbC5lbnVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFOLElBQVksbUJBU1g7QUFURCxXQUFZLG1CQUFtQjtJQUMzQix1REFBdUQ7SUFDdkQsNkRBQUksQ0FBQTtJQUVKLG9EQUFvRDtJQUNwRCxpRUFBTSxDQUFBO0lBRU4sd0RBQXdEO0lBQ3hELCtEQUFLLENBQUE7QUFDVCxDQUFDLEVBVFcsbUJBQW1CLEtBQW5CLG1CQUFtQixRQVM5QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBEZWZpbmVzIHRoZSBob3Jpem9udGFsIGFsaWdubWVudCBvZiBjb250ZW50IHdpdGhpbiBhIHRhYmxlIGNlbGwuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIFNwZWNpZmllcyBob3cgdGhlIGNvbnRlbnQgaW5zaWRlIGEgY2VsbCBpcyBwb3NpdGlvbmVkIGhvcml6b250YWxseSByZWxhdGl2ZSB0byB0aGUgY2VsbCdzIHdpZHRoLlxyXG4gKi9cclxuZXhwb3J0IGVudW0gRGF0YUFsaWduSG9yaXpvbnRhbCB7XHJcbiAgICAvKiogQ29udGVudCBpcyBhbGlnbmVkIHRvIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIGNlbGwuICovXHJcbiAgICBMZWZ0LFxyXG5cclxuICAgIC8qKiBDb250ZW50IGlzIGFsaWduZWQgdG8gdGhlIGNlbnRlciBvZiB0aGUgY2VsbC4gKi9cclxuICAgIENlbnRlcixcclxuXHJcbiAgICAvKiogQ29udGVudCBpcyBhbGlnbmVkIHRvIHRoZSByaWdodCBzaWRlIG9mIHRoZSBjZWxsLiAqL1xyXG4gICAgUmlnaHRcclxufSJdfQ==