@aquera/ngx-smart-table 0.0.17-alpha → 0.0.18-alpha

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 (170) hide show
  1. package/{fesm2020 → fesm2022}/aquera-ngx-smart-table.mjs +1579 -2101
  2. package/fesm2022/aquera-ngx-smart-table.mjs.map +1 -0
  3. package/package.json +8 -16
  4. package/types/aquera-ngx-smart-table.d.ts +5909 -0
  5. package/aquera-ngx-smart-table.d.ts +0 -5
  6. package/esm2020/aquera-ngx-smart-table.mjs +0 -5
  7. package/esm2020/lib/builder/components/builder-preview/builder-preview.component.mjs +0 -63
  8. package/esm2020/lib/builder/components/builder-toolbar/builder-toolbar.component.mjs +0 -115
  9. package/esm2020/lib/builder/components/column-editor/column-editor.component.mjs +0 -206
  10. package/esm2020/lib/builder/components/column-list/column-list.component.mjs +0 -125
  11. package/esm2020/lib/builder/components/definition-builder/definition-builder.component.mjs +0 -105
  12. package/esm2020/lib/builder/components/table-config-editor/table-config-editor.component.mjs +0 -132
  13. package/esm2020/lib/builder/definition-builder.module.mjs +0 -70
  14. package/esm2020/lib/builder/models/builder-state.interface.mjs +0 -5
  15. package/esm2020/lib/builder/services/definition-builder.service.mjs +0 -251
  16. package/esm2020/lib/builder/services/definition-export.service.mjs +0 -167
  17. package/esm2020/lib/builder/services/definition-import.service.mjs +0 -193
  18. package/esm2020/lib/builder/services/sample-data-generator.service.mjs +0 -126
  19. package/esm2020/lib/builder/utils/config-validator.util.mjs +0 -165
  20. package/esm2020/lib/builder/utils/typescript-generator.util.mjs +0 -206
  21. package/esm2020/lib/editors/index.mjs +0 -9
  22. package/esm2020/lib/editors/nile-autocomplete-editor.mjs +0 -228
  23. package/esm2020/lib/editors/nile-calendar-editor.mjs +0 -211
  24. package/esm2020/lib/editors/nile-date-picker-editor.mjs +0 -188
  25. package/esm2020/lib/editors/nile-input-editor.mjs +0 -235
  26. package/esm2020/lib/editors/nile-select-editor.mjs +0 -498
  27. package/esm2020/lib/factories/column-config.factory.mjs +0 -231
  28. package/esm2020/lib/models/autosave-config.interface.mjs +0 -8
  29. package/esm2020/lib/models/base-column-config.class.mjs +0 -253
  30. package/esm2020/lib/models/cell-strategies.interface.mjs +0 -6
  31. package/esm2020/lib/models/cell-types.mjs +0 -147
  32. package/esm2020/lib/models/column-action.interface.mjs +0 -6
  33. package/esm2020/lib/models/column-config.interface.mjs +0 -43
  34. package/esm2020/lib/models/column-config.utils.mjs +0 -101
  35. package/esm2020/lib/models/row-action.interface.mjs +0 -5
  36. package/esm2020/lib/models/row-validator.interface.mjs +0 -2
  37. package/esm2020/lib/models/schema-validation.interface.mjs +0 -2
  38. package/esm2020/lib/models/sheet-action.interface.mjs +0 -5
  39. package/esm2020/lib/models/sheet-config.interface.mjs +0 -5
  40. package/esm2020/lib/models/table-config.interface.mjs +0 -107
  41. package/esm2020/lib/models/table-validator.interface.mjs +0 -2
  42. package/esm2020/lib/models/workbook-action.interface.mjs +0 -5
  43. package/esm2020/lib/models/workbook-config.interface.mjs +0 -5
  44. package/esm2020/lib/renderer/components/st-add-column-button/st-add-column-button.component.mjs +0 -24
  45. package/esm2020/lib/renderer/components/st-cell/st-cell.component.mjs +0 -397
  46. package/esm2020/lib/renderer/components/st-column-editor-modal/st-column-editor-modal.component.mjs +0 -103
  47. package/esm2020/lib/renderer/components/st-column-filter/st-column-filter.component.mjs +0 -383
  48. package/esm2020/lib/renderer/components/st-column-menu/st-column-menu.component.mjs +0 -232
  49. package/esm2020/lib/renderer/components/st-column-visibility/st-column-visibility.component.mjs +0 -97
  50. package/esm2020/lib/renderer/components/st-header/st-header.component.mjs +0 -157
  51. package/esm2020/lib/renderer/components/st-pagination/st-pagination.component.mjs +0 -87
  52. package/esm2020/lib/renderer/components/st-row-actions-dropdown/st-row-actions-dropdown.component.mjs +0 -167
  53. package/esm2020/lib/renderer/components/st-sheet/st-sheet.component.mjs +0 -165
  54. package/esm2020/lib/renderer/components/st-sheet-actions/st-sheet-actions.component.mjs +0 -112
  55. package/esm2020/lib/renderer/components/st-table/st-table.component.mjs +0 -1453
  56. package/esm2020/lib/renderer/components/st-table-actions/st-table-actions.component.mjs +0 -169
  57. package/esm2020/lib/renderer/components/st-workbook/st-workbook.component.mjs +0 -581
  58. package/esm2020/lib/renderer/directives/click-outside.directive.mjs +0 -28
  59. package/esm2020/lib/renderer/directives/st-column-resize.directive.mjs +0 -108
  60. package/esm2020/lib/renderer/directives/st-keyboard-navigation.directive.mjs +0 -83
  61. package/esm2020/lib/renderer/models/cell-state.interface.mjs +0 -66
  62. package/esm2020/lib/renderer/models/cell.class.mjs +0 -389
  63. package/esm2020/lib/renderer/models/row-validation-state.interface.mjs +0 -7
  64. package/esm2020/lib/renderer/models/sheet-state.class.mjs +0 -90
  65. package/esm2020/lib/renderer/models/sheet-state.interface.mjs +0 -5
  66. package/esm2020/lib/renderer/models/table-state.class.mjs +0 -871
  67. package/esm2020/lib/renderer/models/table-state.interface.mjs +0 -5
  68. package/esm2020/lib/renderer/models/table-types.mjs +0 -29
  69. package/esm2020/lib/renderer/models/table-validation-state.interface.mjs +0 -7
  70. package/esm2020/lib/renderer/models/workbook-state.class.mjs +0 -174
  71. package/esm2020/lib/renderer/models/workbook-state.interface.mjs +0 -5
  72. package/esm2020/lib/renderer/models/z-index.enum.mjs +0 -55
  73. package/esm2020/lib/schemas/table-config.schema.mjs +0 -472
  74. package/esm2020/lib/services/autosave.service.mjs +0 -92
  75. package/esm2020/lib/services/custom-validation-rules.util.mjs +0 -124
  76. package/esm2020/lib/services/json-schema-validator.service.mjs +0 -216
  77. package/esm2020/lib/services/row-validation.service.mjs +0 -42
  78. package/esm2020/lib/services/validation-logger.service.mjs +0 -177
  79. package/esm2020/lib/services/virtual-scroll.service.mjs +0 -52
  80. package/esm2020/lib/shared/shared-table-components.module.mjs +0 -35
  81. package/esm2020/lib/smart-table.module.mjs +0 -124
  82. package/esm2020/lib/strategies/default-editors.mjs +0 -433
  83. package/esm2020/lib/strategies/default-formatters.mjs +0 -238
  84. package/esm2020/lib/strategies/default-validators.mjs +0 -327
  85. package/esm2020/public-api.mjs +0 -146
  86. package/fesm2015/aquera-ngx-smart-table.mjs +0 -12347
  87. package/fesm2015/aquera-ngx-smart-table.mjs.map +0 -1
  88. package/fesm2020/aquera-ngx-smart-table.mjs.map +0 -1
  89. package/lib/builder/components/builder-preview/builder-preview.component.d.ts +0 -31
  90. package/lib/builder/components/builder-toolbar/builder-toolbar.component.d.ts +0 -53
  91. package/lib/builder/components/column-editor/column-editor.component.d.ts +0 -69
  92. package/lib/builder/components/column-list/column-list.component.d.ts +0 -65
  93. package/lib/builder/components/definition-builder/definition-builder.component.d.ts +0 -58
  94. package/lib/builder/components/table-config-editor/table-config-editor.component.d.ts +0 -32
  95. package/lib/builder/definition-builder.module.d.ts +0 -15
  96. package/lib/builder/models/builder-state.interface.d.ts +0 -93
  97. package/lib/builder/services/definition-builder.service.d.ts +0 -80
  98. package/lib/builder/services/definition-export.service.d.ts +0 -59
  99. package/lib/builder/services/definition-import.service.d.ts +0 -31
  100. package/lib/builder/services/sample-data-generator.service.d.ts +0 -41
  101. package/lib/builder/utils/config-validator.util.d.ts +0 -32
  102. package/lib/builder/utils/typescript-generator.util.d.ts +0 -29
  103. package/lib/editors/index.d.ts +0 -8
  104. package/lib/editors/nile-autocomplete-editor.d.ts +0 -102
  105. package/lib/editors/nile-calendar-editor.d.ts +0 -88
  106. package/lib/editors/nile-date-picker-editor.d.ts +0 -97
  107. package/lib/editors/nile-input-editor.d.ts +0 -67
  108. package/lib/editors/nile-select-editor.d.ts +0 -113
  109. package/lib/factories/column-config.factory.d.ts +0 -73
  110. package/lib/models/autosave-config.interface.d.ts +0 -23
  111. package/lib/models/base-column-config.class.d.ts +0 -115
  112. package/lib/models/cell-strategies.interface.d.ts +0 -188
  113. package/lib/models/cell-types.d.ts +0 -337
  114. package/lib/models/column-action.interface.d.ts +0 -86
  115. package/lib/models/column-config.interface.d.ts +0 -272
  116. package/lib/models/column-config.utils.d.ts +0 -37
  117. package/lib/models/row-action.interface.d.ts +0 -86
  118. package/lib/models/row-validator.interface.d.ts +0 -37
  119. package/lib/models/schema-validation.interface.d.ts +0 -42
  120. package/lib/models/sheet-action.interface.d.ts +0 -59
  121. package/lib/models/sheet-config.interface.d.ts +0 -41
  122. package/lib/models/table-config.interface.d.ts +0 -251
  123. package/lib/models/table-validator.interface.d.ts +0 -40
  124. package/lib/models/workbook-action.interface.d.ts +0 -95
  125. package/lib/models/workbook-config.interface.d.ts +0 -107
  126. package/lib/renderer/components/st-add-column-button/st-add-column-button.component.d.ts +0 -9
  127. package/lib/renderer/components/st-cell/st-cell.component.d.ts +0 -69
  128. package/lib/renderer/components/st-column-editor-modal/st-column-editor-modal.component.d.ts +0 -39
  129. package/lib/renderer/components/st-column-filter/st-column-filter.component.d.ts +0 -139
  130. package/lib/renderer/components/st-column-menu/st-column-menu.component.d.ts +0 -81
  131. package/lib/renderer/components/st-column-visibility/st-column-visibility.component.d.ts +0 -44
  132. package/lib/renderer/components/st-header/st-header.component.d.ts +0 -93
  133. package/lib/renderer/components/st-pagination/st-pagination.component.d.ts +0 -42
  134. package/lib/renderer/components/st-row-actions-dropdown/st-row-actions-dropdown.component.d.ts +0 -67
  135. package/lib/renderer/components/st-sheet/st-sheet.component.d.ts +0 -98
  136. package/lib/renderer/components/st-sheet-actions/st-sheet-actions.component.d.ts +0 -58
  137. package/lib/renderer/components/st-table/st-table.component.d.ts +0 -380
  138. package/lib/renderer/components/st-table-actions/st-table-actions.component.d.ts +0 -77
  139. package/lib/renderer/components/st-workbook/st-workbook.component.d.ts +0 -275
  140. package/lib/renderer/directives/click-outside.directive.d.ts +0 -10
  141. package/lib/renderer/directives/st-column-resize.directive.d.ts +0 -44
  142. package/lib/renderer/directives/st-keyboard-navigation.directive.d.ts +0 -19
  143. package/lib/renderer/models/cell-state.interface.d.ts +0 -118
  144. package/lib/renderer/models/cell.class.d.ts +0 -174
  145. package/lib/renderer/models/row-validation-state.interface.d.ts +0 -27
  146. package/lib/renderer/models/sheet-state.class.d.ts +0 -67
  147. package/lib/renderer/models/sheet-state.interface.d.ts +0 -55
  148. package/lib/renderer/models/table-state.class.d.ts +0 -320
  149. package/lib/renderer/models/table-state.interface.d.ts +0 -18
  150. package/lib/renderer/models/table-types.d.ts +0 -228
  151. package/lib/renderer/models/table-validation-state.interface.d.ts +0 -34
  152. package/lib/renderer/models/workbook-state.class.d.ts +0 -117
  153. package/lib/renderer/models/workbook-state.interface.d.ts +0 -71
  154. package/lib/renderer/models/z-index.enum.d.ts +0 -44
  155. package/lib/schemas/table-config.schema.d.ts +0 -455
  156. package/lib/services/autosave.service.d.ts +0 -73
  157. package/lib/services/custom-validation-rules.util.d.ts +0 -12
  158. package/lib/services/json-schema-validator.service.d.ts +0 -49
  159. package/lib/services/row-validation.service.d.ts +0 -17
  160. package/lib/services/validation-logger.service.d.ts +0 -87
  161. package/lib/services/virtual-scroll.service.d.ts +0 -44
  162. package/lib/shared/shared-table-components.module.d.ts +0 -9
  163. package/lib/smart-table.module.d.ts +0 -26
  164. package/lib/strategies/default-editors.d.ts +0 -109
  165. package/lib/strategies/default-formatters.d.ts +0 -116
  166. package/lib/strategies/default-validators.d.ts +0 -113
  167. package/public-api.d.ts +0 -70
  168. package/src/lib/builder/README.md +0 -30
  169. package/src/lib/editors/README.md +0 -303
  170. package/src/lib/renderer/components/st-column-filter/README.md +0 -286
@@ -1,169 +0,0 @@
1
- import { Component, Input, Output, EventEmitter } from '@angular/core';
2
- import { TableZIndex } from '../../models/z-index.enum';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/common";
5
- export class StTableActionsComponent {
6
- constructor() {
7
- this.allowAddColumn = false;
8
- this.addColumnClicked = new EventEmitter();
9
- this.isOpen = false;
10
- this.currentView = 'main';
11
- this.columnsVisibility = [];
12
- /**
13
- * Dropdown positioning style
14
- */
15
- this.dropdownStyle = {};
16
- }
17
- ngOnInit() {
18
- if (!this.tableState) {
19
- console.warn('tableState is required for st-table-actions component');
20
- return;
21
- }
22
- // Initialize with current state
23
- this.updateColumnsVisibility();
24
- // Subscribe to state changes to update visibility list
25
- this.subscribeToStateChanges();
26
- }
27
- ngOnDestroy() {
28
- this.stateSubscription?.unsubscribe();
29
- // Re-enable body scroll if component is destroyed while menu is open
30
- if (this.isOpen) {
31
- document.body.style.overflow = '';
32
- }
33
- }
34
- /**
35
- * Update columns visibility list from current table state
36
- */
37
- updateColumnsVisibility() {
38
- if (this.tableState) {
39
- this.columnsVisibility = this.tableState.getAllColumnsVisibility();
40
- }
41
- }
42
- /**
43
- * Subscribe to table state changes
44
- */
45
- subscribeToStateChanges() {
46
- if (!this.tableState)
47
- return;
48
- this.stateSubscription = this.tableState.stateChange$
49
- .subscribe(event => {
50
- if (event.type === 'column-visibility' || event.type === 'column-config') {
51
- this.updateColumnsVisibility();
52
- }
53
- });
54
- }
55
- /**
56
- * Toggle menu open/close
57
- */
58
- toggleMenu(event) {
59
- event.stopPropagation();
60
- this.isOpen = !this.isOpen;
61
- if (this.isOpen) {
62
- this.currentView = 'main';
63
- this.updateDropdownPosition(event);
64
- // Disable body scroll when menu opens
65
- document.body.style.overflow = 'hidden';
66
- }
67
- else {
68
- // Re-enable body scroll when menu closes
69
- document.body.style.overflow = '';
70
- }
71
- }
72
- /**
73
- * Update dropdown position based on trigger button
74
- */
75
- updateDropdownPosition(event) {
76
- const button = event.currentTarget;
77
- const rect = button.getBoundingClientRect();
78
- const dropdownWidth = 220;
79
- let x = rect.right;
80
- let y = rect.bottom + 5;
81
- // // Adjust horizontal position if dropdown would overflow
82
- // if (x + dropdownWidth > viewportWidth) {
83
- // x = Math.max(10, viewportWidth - dropdownWidth - 10);
84
- // }
85
- // // Adjust vertical position if dropdown would overflow
86
- // if (y + dropdownHeight > viewportHeight) {
87
- // y = rect.top - dropdownHeight - 5;
88
- // }
89
- this.dropdownStyle = {
90
- position: 'absolute',
91
- left: `${x - dropdownWidth}px`,
92
- top: `${y}px`,
93
- 'z-index': TableZIndex.TABLE_ACTIONS_DROPDOWN
94
- };
95
- }
96
- /**
97
- * Close menu
98
- */
99
- closeMenu() {
100
- this.isOpen = false;
101
- this.currentView = 'main';
102
- // Re-enable body scroll when menu closes
103
- document.body.style.overflow = '';
104
- }
105
- /**
106
- * Handle add column action
107
- */
108
- onAddColumn(event) {
109
- event.stopPropagation();
110
- this.addColumnClicked.emit();
111
- this.closeMenu();
112
- }
113
- /**
114
- * Open column visibility submenu
115
- */
116
- openColumnsSubmenu(event) {
117
- event.stopPropagation();
118
- this.currentView = 'columns';
119
- }
120
- /**
121
- * Go back to main menu
122
- */
123
- backToMain(event) {
124
- event.stopPropagation();
125
- this.currentView = 'main';
126
- }
127
- /**
128
- * Toggle column visibility
129
- */
130
- onToggleColumn(columnKey, event) {
131
- event.stopPropagation();
132
- // Check if column is hideable before toggling
133
- const column = this.columnsVisibility.find(col => col.key === columnKey);
134
- if (column && column.hideable !== false) {
135
- if (this.tableState) {
136
- this.tableState.toggleColumnVisibility(columnKey);
137
- }
138
- }
139
- }
140
- /**
141
- * Check if column is visible
142
- */
143
- isColumnVisible(columnKey) {
144
- if (!this.tableState) {
145
- return true;
146
- }
147
- const column = this.tableState.getColumns().find(col => col.key === columnKey);
148
- return column ? (column.visible !== false) : true;
149
- }
150
- /**
151
- * Check if column is hideable
152
- */
153
- isColumnHideable(column) {
154
- return column.hideable !== false; // Default to true if not set
155
- }
156
- }
157
- StTableActionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StTableActionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
158
- StTableActionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StTableActionsComponent, selector: "st-table-actions", inputs: { tableState: "tableState", allowAddColumn: "allowAddColumn" }, outputs: { addColumnClicked: "addColumnClicked" }, ngImport: i0, template: "<button \n class=\"table-actions-button\"\n (click)=\"toggleMenu($event)\"\n type=\"button\"\n title=\"Table Actions\"\n aria-label=\"Table actions menu\"\n [class.active]=\"isOpen\">\n <nile-icon name=\"settings\"></nile-icon>\n</button>\n\n<!-- Dropdown container with shared pattern -->\n<div class=\"dropdown-container\" *ngIf=\"isOpen\">\n <!-- Backdrop -->\n <div class=\"dropdown-backdrop\" (click)=\"closeMenu()\"></div>\n \n <!-- Main Menu -->\n <div class=\"dropdown-menu\" *ngIf=\"currentView === 'main'\" [ngStyle]=\"dropdownStyle\">\n <nile-menu>\n <!-- Add Column -->\n <nile-menu-item *ngIf=\"allowAddColumn\" (click)=\"onAddColumn($event)\">\n <nile-icon slot=\"prefix\" name=\"plus\" size=\"12\"></nile-icon>\n Add Column\n </nile-menu-item>\n \n <!-- Show/Hide Columns -->\n <nile-menu-item (click)=\"openColumnsSubmenu($event)\">\n <nile-icon size=\"12\" slot=\"prefix\" name=\"eye\"></nile-icon>\n Show/Hide Columns\n </nile-menu-item>\n </nile-menu>\n </div>\n \n <!-- Column Visibility Submenu -->\n <div class=\"dropdown-menu\" *ngIf=\"currentView === 'columns'\" [ngStyle]=\"dropdownStyle\">\n <nile-menu>\n <!-- Back button -->\n <nile-menu-item (click)=\"backToMain($event)\" class=\"back-item\">\n <nile-icon size=\"12\" slot=\"prefix\" name=\"chevron-left\"></nile-icon>\n Back\n </nile-menu-item>\n \n <nile-divider></nile-divider>\n \n <!-- Column checkboxes -->\n <nile-menu-item \n *ngFor=\"let column of columnsVisibility\"\n [class.disabled]=\"!isColumnHideable(column)\"\n (click)=\"onToggleColumn(column.key, $event)\">\n <nile-checkbox \n [checked]=\"isColumnVisible(column.key)\" \n [disabled]=\"!isColumnHideable(column)\" \n [label]=\"column.header || column.key\" \n (nile-change)=\"onToggleColumn(column.key, $event)\">\n </nile-checkbox>\n </nile-menu-item>\n </nile-menu>\n </div>\n</div>\n\n", styles: [".table-actions-button{display:flex;align-items:center;justify-content:center;padding:6px;background:transparent;border:none;cursor:pointer;transition:background-color .15s}.table-actions-button:hover{background-color:#0000000d}.table-actions-button.active{background-color:#0000001a}.table-actions-button:focus{outline:none}.dropdown-container{position:fixed;inset:0;z-index:9996}.dropdown-backdrop{position:absolute;inset:0;background:transparent;pointer-events:auto;z-index:9996}.dropdown-menu{position:fixed;pointer-events:auto;z-index:9997;min-width:15rem}nile-menu{max-height:30rem;overflow-y:auto}nile-menu::part(base){width:fit-content;min-height:auto}nile-menu nile-menu-item::part(base){min-height:2.5rem}nile-menu nile-menu-item::part(label){font-size:12px}nile-menu nile-menu-item.back-item{font-weight:500}nile-menu nile-menu-item.disabled{opacity:.5;cursor:not-allowed}nile-menu nile-menu-item nile-checkbox::part(base){display:flex;align-items:center}nile-menu nile-menu-item nile-checkbox::part(label){font-size:12px;margin-top:0}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
159
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StTableActionsComponent, decorators: [{
160
- type: Component,
161
- args: [{ selector: 'st-table-actions', template: "<button \n class=\"table-actions-button\"\n (click)=\"toggleMenu($event)\"\n type=\"button\"\n title=\"Table Actions\"\n aria-label=\"Table actions menu\"\n [class.active]=\"isOpen\">\n <nile-icon name=\"settings\"></nile-icon>\n</button>\n\n<!-- Dropdown container with shared pattern -->\n<div class=\"dropdown-container\" *ngIf=\"isOpen\">\n <!-- Backdrop -->\n <div class=\"dropdown-backdrop\" (click)=\"closeMenu()\"></div>\n \n <!-- Main Menu -->\n <div class=\"dropdown-menu\" *ngIf=\"currentView === 'main'\" [ngStyle]=\"dropdownStyle\">\n <nile-menu>\n <!-- Add Column -->\n <nile-menu-item *ngIf=\"allowAddColumn\" (click)=\"onAddColumn($event)\">\n <nile-icon slot=\"prefix\" name=\"plus\" size=\"12\"></nile-icon>\n Add Column\n </nile-menu-item>\n \n <!-- Show/Hide Columns -->\n <nile-menu-item (click)=\"openColumnsSubmenu($event)\">\n <nile-icon size=\"12\" slot=\"prefix\" name=\"eye\"></nile-icon>\n Show/Hide Columns\n </nile-menu-item>\n </nile-menu>\n </div>\n \n <!-- Column Visibility Submenu -->\n <div class=\"dropdown-menu\" *ngIf=\"currentView === 'columns'\" [ngStyle]=\"dropdownStyle\">\n <nile-menu>\n <!-- Back button -->\n <nile-menu-item (click)=\"backToMain($event)\" class=\"back-item\">\n <nile-icon size=\"12\" slot=\"prefix\" name=\"chevron-left\"></nile-icon>\n Back\n </nile-menu-item>\n \n <nile-divider></nile-divider>\n \n <!-- Column checkboxes -->\n <nile-menu-item \n *ngFor=\"let column of columnsVisibility\"\n [class.disabled]=\"!isColumnHideable(column)\"\n (click)=\"onToggleColumn(column.key, $event)\">\n <nile-checkbox \n [checked]=\"isColumnVisible(column.key)\" \n [disabled]=\"!isColumnHideable(column)\" \n [label]=\"column.header || column.key\" \n (nile-change)=\"onToggleColumn(column.key, $event)\">\n </nile-checkbox>\n </nile-menu-item>\n </nile-menu>\n </div>\n</div>\n\n", styles: [".table-actions-button{display:flex;align-items:center;justify-content:center;padding:6px;background:transparent;border:none;cursor:pointer;transition:background-color .15s}.table-actions-button:hover{background-color:#0000000d}.table-actions-button.active{background-color:#0000001a}.table-actions-button:focus{outline:none}.dropdown-container{position:fixed;inset:0;z-index:9996}.dropdown-backdrop{position:absolute;inset:0;background:transparent;pointer-events:auto;z-index:9996}.dropdown-menu{position:fixed;pointer-events:auto;z-index:9997;min-width:15rem}nile-menu{max-height:30rem;overflow-y:auto}nile-menu::part(base){width:fit-content;min-height:auto}nile-menu nile-menu-item::part(base){min-height:2.5rem}nile-menu nile-menu-item::part(label){font-size:12px}nile-menu nile-menu-item.back-item{font-weight:500}nile-menu nile-menu-item.disabled{opacity:.5;cursor:not-allowed}nile-menu nile-menu-item nile-checkbox::part(base){display:flex;align-items:center}nile-menu nile-menu-item nile-checkbox::part(label){font-size:12px;margin-top:0}\n"] }]
162
- }], ctorParameters: function () { return []; }, propDecorators: { tableState: [{
163
- type: Input
164
- }], allowAddColumn: [{
165
- type: Input
166
- }], addColumnClicked: [{
167
- type: Output
168
- }] } });
169
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3QtdGFibGUtYWN0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC10YWJsZS9zcmMvbGliL3JlbmRlcmVyL2NvbXBvbmVudHMvc3QtdGFibGUtYWN0aW9ucy9zdC10YWJsZS1hY3Rpb25zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXRhYmxlL3NyYy9saWIvcmVuZGVyZXIvY29tcG9uZW50cy9zdC10YWJsZS1hY3Rpb25zL3N0LXRhYmxlLWFjdGlvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFHMUYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7QUFTeEQsTUFBTSxPQUFPLHVCQUF1QjtJQWlCbEM7UUFmUyxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUUvQixxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRXRELFdBQU0sR0FBRyxLQUFLLENBQUM7UUFDZixnQkFBVyxHQUFhLE1BQU0sQ0FBQztRQUMvQixzQkFBaUIsR0FBMkUsRUFBRSxDQUFDO1FBRS9GOztXQUVHO1FBQ0gsa0JBQWEsR0FBUSxFQUFFLENBQUM7SUFJVCxDQUFDO0lBRWhCLFFBQVE7UUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNwQixPQUFPLENBQUMsSUFBSSxDQUFDLHVEQUF1RCxDQUFDLENBQUM7WUFDdEUsT0FBTztTQUNSO1FBRUQsZ0NBQWdDO1FBQ2hDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBRS9CLHVEQUF1RDtRQUN2RCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsV0FBVztR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RUc7SUFDSCxnQkFBZ0IsQ0FBQyxNQUE0RTtRQUMzRixPQUFPLE1BQU0sQ0FBQyxRQUFRLEtBQUssS0FBSyxDQUFDLENBQUMsNkJBQTZCO0lBQ2pFLENBQUM7O29IQWpMVSx1QkFBdUI7d0dBQXZCLHVCQUF1QixtTENacEMsa2dFQTJEQTsyRkQvQ2EsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLGtCQUFrQjswRUFLbkIsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVJLGdCQUFnQjtzQkFBekIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGFibGVTdGF0ZSB9IGZyb20gJy4uLy4uL21vZGVscy90YWJsZS1zdGF0ZS5jbGFzcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRhYmxlWkluZGV4IH0gZnJvbSAnLi4vLi4vbW9kZWxzL3otaW5kZXguZW51bSc7XG5cbnR5cGUgTWVudVZpZXcgPSAnbWFpbicgfCAnY29sdW1ucyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N0LXRhYmxlLWFjdGlvbnMnLFxuICB0ZW1wbGF0ZVVybDogJy4vc3QtdGFibGUtYWN0aW9ucy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3N0LXRhYmxlLWFjdGlvbnMuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBTdFRhYmxlQWN0aW9uc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgdGFibGVTdGF0ZSE6IFRhYmxlU3RhdGU7XG4gIEBJbnB1dCgpIGFsbG93QWRkQ29sdW1uOiBib29sZWFuID0gZmFsc2U7XG4gIFxuICBAT3V0cHV0KCkgYWRkQ29sdW1uQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgXG4gIGlzT3BlbiA9IGZhbHNlO1xuICBjdXJyZW50VmlldzogTWVudVZpZXcgPSAnbWFpbic7XG4gIGNvbHVtbnNWaXNpYmlsaXR5OiB7IGtleTogc3RyaW5nOyBoZWFkZXI6IHN0cmluZzsgdmlzaWJsZTogYm9vbGVhbjsgaGlkZWFibGU6IGJvb2xlYW4gfVtdID0gW107XG4gIFxuICAvKipcbiAgICogRHJvcGRvd24gcG9zaXRpb25pbmcgc3R5bGVcbiAgICovXG4gIGRyb3Bkb3duU3R5bGU6IGFueSA9IHt9O1xuICBcbiAgcHJpdmF0ZSBzdGF0ZVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgXG4gIGNvbnN0cnVjdG9yKCkge31cbiAgXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy50YWJsZVN0YXRlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ3RhYmxlU3RhdGUgaXMgcmVxdWlyZWQgZm9yIHN0LXRhYmxlLWFjdGlvbnMgY29tcG9uZW50Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIC8vIEluaXRpYWxpemUgd2l0aCBjdXJyZW50IHN0YXRlXG4gICAgdGhpcy51cGRhdGVDb2x1bW5zVmlzaWJpbGl0eSgpO1xuICAgIFxuICAgIC8vIFN1YnNjcmliZSB0byBzdGF0ZSBjaGFuZ2VzIHRvIHVwZGF0ZSB2aXNpYmlsaXR5IGxpc3RcbiAgICB0aGlzLnN1YnNjcmliZVRvU3RhdGVDaGFuZ2VzKCk7XG4gIH1cbiAgXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgLy8gUmUtZW5hYmxlIGJvZHkgc2Nyb2xsIGlmIGNvbXBvbmVudCBpcyBkZXN0cm95ZWQgd2hpbGUgbWVudSBpcyBvcGVuXG4gICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJyc7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogVXBkYXRlIGNvbHVtbnMgdmlzaWJpbGl0eSBsaXN0IGZyb20gY3VycmVudCB0YWJsZSBzdGF0ZVxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVDb2x1bW5zVmlzaWJpbGl0eSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50YWJsZVN0YXRlKSB7XG4gICAgICB0aGlzLmNvbHVtbnNWaXNpYmlsaXR5ID0gdGhpcy50YWJsZVN0YXRlLmdldEFsbENvbHVtbnNWaXNpYmlsaXR5KCk7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIHRhYmxlIHN0YXRlIGNoYW5nZXNcbiAgICovXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9TdGF0ZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnRhYmxlU3RhdGUpIHJldHVybjtcbiAgICBcbiAgICB0aGlzLnN0YXRlU3Vic2NyaXB0aW9uID0gdGhpcy50YWJsZVN0YXRlLnN0YXRlQ2hhbmdlJFxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgIGlmIChldmVudC50eXBlID09PSAnY29sdW1uLXZpc2liaWxpdHknIHx8IGV2ZW50LnR5cGUgPT09ICdjb2x1bW4tY29uZmlnJykge1xuICAgICAgICAgIHRoaXMudXBkYXRlQ29sdW1uc1Zpc2liaWxpdHkoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBUb2dnbGUgbWVudSBvcGVuL2Nsb3NlXG4gICAqL1xuICB0b2dnbGVNZW51KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaXNPcGVuID0gIXRoaXMuaXNPcGVuO1xuICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgdGhpcy5jdXJyZW50VmlldyA9ICdtYWluJztcbiAgICAgIHRoaXMudXBkYXRlRHJvcGRvd25Qb3NpdGlvbihldmVudCBhcyBNb3VzZUV2ZW50KTtcbiAgICAgIC8vIERpc2FibGUgYm9keSBzY3JvbGwgd2hlbiBtZW51IG9wZW5zXG4gICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlLWVuYWJsZSBib2R5IHNjcm9sbCB3aGVuIG1lbnUgY2xvc2VzXG4gICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJyc7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogVXBkYXRlIGRyb3Bkb3duIHBvc2l0aW9uIGJhc2VkIG9uIHRyaWdnZXIgYnV0dG9uXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZURyb3Bkb3duUG9zaXRpb24oZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBidXR0b24gPSBldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IHJlY3QgPSBidXR0b24uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgXG5cbiAgICBjb25zdCBkcm9wZG93bldpZHRoID0gMjIwO1xuICAgIFxuICAgIGxldCB4ID0gcmVjdC5yaWdodDtcbiAgICBsZXQgeSA9IHJlY3QuYm90dG9tICsgNTtcbiAgICBcbiAgICAvLyAvLyBBZGp1c3QgaG9yaXpvbnRhbCBwb3NpdGlvbiBpZiBkcm9wZG93biB3b3VsZCBvdmVyZmxvd1xuICAgIC8vIGlmICh4ICsgZHJvcGRvd25XaWR0aCA+IHZpZXdwb3J0V2lkdGgpIHtcbiAgICAvLyAgIHggPSBNYXRoLm1heCgxMCwgdmlld3BvcnRXaWR0aCAtIGRyb3Bkb3duV2lkdGggLSAxMCk7XG4gICAgLy8gfVxuICAgIFxuICAgIC8vIC8vIEFkanVzdCB2ZXJ0aWNhbCBwb3NpdGlvbiBpZiBkcm9wZG93biB3b3VsZCBvdmVyZmxvd1xuICAgIC8vIGlmICh5ICsgZHJvcGRvd25IZWlnaHQgPiB2aWV3cG9ydEhlaWdodCkge1xuICAgIC8vICAgeSA9IHJlY3QudG9wIC0gZHJvcGRvd25IZWlnaHQgLSA1O1xuICAgIC8vIH1cbiAgICBcbiAgICB0aGlzLmRyb3Bkb3duU3R5bGUgPSB7XG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIGxlZnQ6IGAke3ggLSBkcm9wZG93bldpZHRofXB4YCxcbiAgICAgIHRvcDogYCR7eX1weGAsXG4gICAgICAnei1pbmRleCc6IFRhYmxlWkluZGV4LlRBQkxFX0FDVElPTlNfRFJPUERPV05cbiAgICB9O1xuICB9XG4gIFxuICAvKipcbiAgICogQ2xvc2UgbWVudVxuICAgKi9cbiAgY2xvc2VNZW51KCk6IHZvaWQge1xuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5jdXJyZW50VmlldyA9ICdtYWluJztcbiAgICAvLyBSZS1lbmFibGUgYm9keSBzY3JvbGwgd2hlbiBtZW51IGNsb3Nlc1xuICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnJztcbiAgfVxuICBcbiAgLyoqXG4gICAqIEhhbmRsZSBhZGQgY29sdW1uIGFjdGlvblxuICAgKi9cbiAgb25BZGRDb2x1bW4oZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5hZGRDb2x1bW5DbGlja2VkLmVtaXQoKTtcbiAgICB0aGlzLmNsb3NlTWVudSgpO1xuICB9XG4gIFxuICAvKipcbiAgICogT3BlbiBjb2x1bW4gdmlzaWJpbGl0eSBzdWJtZW51XG4gICAqL1xuICBvcGVuQ29sdW1uc1N1Ym1lbnUoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5jdXJyZW50VmlldyA9ICdjb2x1bW5zJztcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdvIGJhY2sgdG8gbWFpbiBtZW51XG4gICAqL1xuICBiYWNrVG9NYWluKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuY3VycmVudFZpZXcgPSAnbWFpbic7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBUb2dnbGUgY29sdW1uIHZpc2liaWxpdHlcbiAgICovXG4gIG9uVG9nZ2xlQ29sdW1uKGNvbHVtbktleTogc3RyaW5nLCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBcbiAgICAvLyBDaGVjayBpZiBjb2x1bW4gaXMgaGlkZWFibGUgYmVmb3JlIHRvZ2dsaW5nXG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zVmlzaWJpbGl0eS5maW5kKGNvbCA9PiBjb2wua2V5ID09PSBjb2x1bW5LZXkpO1xuICAgIGlmIChjb2x1bW4gJiYgY29sdW1uLmhpZGVhYmxlICE9PSBmYWxzZSkge1xuICAgICAgaWYgKHRoaXMudGFibGVTdGF0ZSkge1xuICAgICAgICB0aGlzLnRhYmxlU3RhdGUudG9nZ2xlQ29sdW1uVmlzaWJpbGl0eShjb2x1bW5LZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIENoZWNrIGlmIGNvbHVtbiBpcyB2aXNpYmxlXG4gICAqL1xuICBpc0NvbHVtblZpc2libGUoY29sdW1uS2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMudGFibGVTdGF0ZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMudGFibGVTdGF0ZS5nZXRDb2x1bW5zKCkuZmluZChjb2wgPT4gY29sLmtleSA9PT0gY29sdW1uS2V5KTtcbiAgICByZXR1cm4gY29sdW1uID8gKGNvbHVtbi52aXNpYmxlICE9PSBmYWxzZSkgOiB0cnVlO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYgY29sdW1uIGlzIGhpZGVhYmxlXG4gICAqL1xuICBpc0NvbHVtbkhpZGVhYmxlKGNvbHVtbjogeyBrZXk6IHN0cmluZzsgaGVhZGVyOiBzdHJpbmc7IHZpc2libGU6IGJvb2xlYW47IGhpZGVhYmxlOiBib29sZWFuIH0pOiBib29sZWFuIHtcbiAgICByZXR1cm4gY29sdW1uLmhpZGVhYmxlICE9PSBmYWxzZTsgLy8gRGVmYXVsdCB0byB0cnVlIGlmIG5vdCBzZXRcbiAgfVxufVxuXG4iLCI8YnV0dG9uIFxuICBjbGFzcz1cInRhYmxlLWFjdGlvbnMtYnV0dG9uXCJcbiAgKGNsaWNrKT1cInRvZ2dsZU1lbnUoJGV2ZW50KVwiXG4gIHR5cGU9XCJidXR0b25cIlxuICB0aXRsZT1cIlRhYmxlIEFjdGlvbnNcIlxuICBhcmlhLWxhYmVsPVwiVGFibGUgYWN0aW9ucyBtZW51XCJcbiAgW2NsYXNzLmFjdGl2ZV09XCJpc09wZW5cIj5cbiAgPG5pbGUtaWNvbiBuYW1lPVwic2V0dGluZ3NcIj48L25pbGUtaWNvbj5cbjwvYnV0dG9uPlxuXG48IS0tIERyb3Bkb3duIGNvbnRhaW5lciB3aXRoIHNoYXJlZCBwYXR0ZXJuIC0tPlxuPGRpdiBjbGFzcz1cImRyb3Bkb3duLWNvbnRhaW5lclwiICpuZ0lmPVwiaXNPcGVuXCI+XG4gIDwhLS0gQmFja2Ryb3AgLS0+XG4gIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1iYWNrZHJvcFwiIChjbGljayk9XCJjbG9zZU1lbnUoKVwiPjwvZGl2PlxuICBcbiAgPCEtLSBNYWluIE1lbnUgLS0+XG4gIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgKm5nSWY9XCJjdXJyZW50VmlldyA9PT0gJ21haW4nXCIgW25nU3R5bGVdPVwiZHJvcGRvd25TdHlsZVwiPlxuICAgIDxuaWxlLW1lbnU+XG4gICAgICA8IS0tIEFkZCBDb2x1bW4gLS0+XG4gICAgICA8bmlsZS1tZW51LWl0ZW0gKm5nSWY9XCJhbGxvd0FkZENvbHVtblwiIChjbGljayk9XCJvbkFkZENvbHVtbigkZXZlbnQpXCI+XG4gICAgICAgIDxuaWxlLWljb24gc2xvdD1cInByZWZpeFwiIG5hbWU9XCJwbHVzXCIgc2l6ZT1cIjEyXCI+PC9uaWxlLWljb24+XG4gICAgICAgIEFkZCBDb2x1bW5cbiAgICAgIDwvbmlsZS1tZW51LWl0ZW0+XG4gICAgICBcbiAgICAgIDwhLS0gU2hvdy9IaWRlIENvbHVtbnMgLS0+XG4gICAgICA8bmlsZS1tZW51LWl0ZW0gKGNsaWNrKT1cIm9wZW5Db2x1bW5zU3VibWVudSgkZXZlbnQpXCI+XG4gICAgICAgIDxuaWxlLWljb24gc2l6ZT1cIjEyXCIgc2xvdD1cInByZWZpeFwiIG5hbWU9XCJleWVcIj48L25pbGUtaWNvbj5cbiAgICAgICAgU2hvdy9IaWRlIENvbHVtbnNcbiAgICAgIDwvbmlsZS1tZW51LWl0ZW0+XG4gICAgPC9uaWxlLW1lbnU+XG4gIDwvZGl2PlxuICBcbiAgPCEtLSBDb2x1bW4gVmlzaWJpbGl0eSBTdWJtZW51IC0tPlxuICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudVwiICpuZ0lmPVwiY3VycmVudFZpZXcgPT09ICdjb2x1bW5zJ1wiIFtuZ1N0eWxlXT1cImRyb3Bkb3duU3R5bGVcIj5cbiAgICA8bmlsZS1tZW51PlxuICAgICAgPCEtLSBCYWNrIGJ1dHRvbiAtLT5cbiAgICAgIDxuaWxlLW1lbnUtaXRlbSAoY2xpY2spPVwiYmFja1RvTWFpbigkZXZlbnQpXCIgY2xhc3M9XCJiYWNrLWl0ZW1cIj5cbiAgICAgICAgPG5pbGUtaWNvbiBzaXplPVwiMTJcIiBzbG90PVwicHJlZml4XCIgbmFtZT1cImNoZXZyb24tbGVmdFwiPjwvbmlsZS1pY29uPlxuICAgICAgICBCYWNrXG4gICAgICA8L25pbGUtbWVudS1pdGVtPlxuICAgICAgXG4gICAgICA8bmlsZS1kaXZpZGVyPjwvbmlsZS1kaXZpZGVyPlxuICAgICAgXG4gICAgICA8IS0tIENvbHVtbiBjaGVja2JveGVzIC0tPlxuICAgICAgPG5pbGUtbWVudS1pdGVtIFxuICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnNWaXNpYmlsaXR5XCJcbiAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIiFpc0NvbHVtbkhpZGVhYmxlKGNvbHVtbilcIlxuICAgICAgICAoY2xpY2spPVwib25Ub2dnbGVDb2x1bW4oY29sdW1uLmtleSwgJGV2ZW50KVwiPlxuICAgICAgICA8bmlsZS1jaGVja2JveCBcbiAgICAgICAgW2NoZWNrZWRdPVwiaXNDb2x1bW5WaXNpYmxlKGNvbHVtbi5rZXkpXCIgXG4gICAgICAgIFtkaXNhYmxlZF09XCIhaXNDb2x1bW5IaWRlYWJsZShjb2x1bW4pXCIgXG4gICAgICAgIFtsYWJlbF09XCJjb2x1bW4uaGVhZGVyIHx8IGNvbHVtbi5rZXlcIiBcbiAgICAgICAgKG5pbGUtY2hhbmdlKT1cIm9uVG9nZ2xlQ29sdW1uKGNvbHVtbi5rZXksICRldmVudClcIj5cbiAgICAgIDwvbmlsZS1jaGVja2JveD5cbiAgICAgIDwvbmlsZS1tZW51LWl0ZW0+XG4gICAgPC9uaWxlLW1lbnU+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbiJdfQ==