@aquera/ngx-smart-table 0.0.16-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 +1664 -2107
  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 -419
  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 -12267
  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 -110
  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,232 +0,0 @@
1
- import { Component, EventEmitter, Output, Input, ViewChild, HostListener } from '@angular/core';
2
- import { SortDirection } from '../../models/table-types';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "../st-column-filter/st-column-filter.component";
5
- import * as i2 from "@angular/common";
6
- export class StColumnMenuDropdownComponent {
7
- constructor() {
8
- /**
9
- * Whether the dropdown is open
10
- */
11
- this.isOpen = false;
12
- /**
13
- * Position of the dropdown (x, y coordinates)
14
- */
15
- this.position = { x: 0, y: 0 };
16
- /**
17
- * Context containing column data, index, and actions
18
- */
19
- this.context = null;
20
- /**
21
- * Emitted when an action is clicked
22
- */
23
- this.actionClicked = new EventEmitter();
24
- /**
25
- * Emitted when the dropdown should close
26
- */
27
- this.closed = new EventEmitter();
28
- /**
29
- * Visible actions (filtered by hidden property)
30
- */
31
- this.visibleActions = [];
32
- /**
33
- * Dropdown positioning style
34
- */
35
- this.dropdownStyle = {};
36
- this.isFilterOpen = false;
37
- }
38
- ngOnChanges(changes) {
39
- if (changes['context'] || changes['isOpen']) {
40
- this.updateVisibleActions();
41
- }
42
- if (changes['position'] || changes['isOpen']) {
43
- this.updateDropdownPosition();
44
- }
45
- }
46
- /**
47
- * Update visible actions based on hidden property
48
- */
49
- updateVisibleActions() {
50
- if (!this.context) {
51
- this.visibleActions = [];
52
- return;
53
- }
54
- this.visibleActions = this.context.actions.filter(action => {
55
- if (typeof action.hidden === 'function') {
56
- return !action.hidden(this.context.column, this.context.columnIndex);
57
- }
58
- return !action.hidden;
59
- });
60
- }
61
- /**
62
- * Check if an action is currently active (for checkmarks)
63
- */
64
- isActionActive(action) {
65
- if (!this.context)
66
- return false;
67
- const column = this.context.column;
68
- // Sort actions
69
- if (action.id === 'sort-asc') {
70
- return column.sortDirection === SortDirection.ASC;
71
- }
72
- if (action.id === 'sort-desc') {
73
- return column.sortDirection === SortDirection.DESC;
74
- }
75
- // Filter action
76
- if (action.id === 'filter') {
77
- return column.filterConfig?.enabled === true;
78
- }
79
- // Pin actions
80
- if (action.id === 'pin-left') {
81
- return column.sticky === 'left';
82
- }
83
- if (action.id === 'pin-right') {
84
- return column.sticky === 'right';
85
- }
86
- return false;
87
- }
88
- /**
89
- * Determine if divider should be shown after an action
90
- * Groups built-in actions: [sort group] | [filter] | [pin group] | [move group] | [custom]
91
- */
92
- shouldShowDividerAfter(action, index, isLast) {
93
- if (isLast || !this.visibleActions[index + 1])
94
- return false;
95
- const currentId = action.id;
96
- const nextId = this.visibleActions[index + 1].id;
97
- // Divider after sort group
98
- if (['sort-asc', 'sort-desc', 'clear-sort'].includes(currentId) &&
99
- !['sort-asc', 'sort-desc', 'clear-sort'].includes(nextId)) {
100
- return true;
101
- }
102
- // Divider after filter
103
- if (currentId === 'filter') {
104
- return true;
105
- }
106
- // Divider after pin group
107
- if (['pin-left', 'pin-right', 'unpin'].includes(currentId) &&
108
- !['pin-left', 'pin-right', 'unpin'].includes(nextId)) {
109
- return true;
110
- }
111
- // Divider after move group (before custom actions)
112
- if (['move-left', 'move-right'].includes(currentId) &&
113
- !['move-left', 'move-right'].includes(nextId)) {
114
- return true;
115
- }
116
- return false;
117
- }
118
- /**
119
- * Update dropdown position based on available viewport space
120
- */
121
- updateDropdownPosition() {
122
- if (!this.isOpen) {
123
- this.dropdownStyle = {};
124
- return;
125
- }
126
- const viewportWidth = window.innerWidth;
127
- const viewportHeight = window.innerHeight;
128
- const dropdownWidth = 280; // Approximate dropdown width
129
- const dropdownHeight = 300; // Approximate max dropdown height
130
- let { x, y } = this.position;
131
- // Adjust horizontal position if dropdown would overflow
132
- if (x + dropdownWidth > viewportWidth) {
133
- x = Math.max(10, viewportWidth - dropdownWidth - 10);
134
- }
135
- // Adjust vertical position if dropdown would overflow
136
- if (y + dropdownHeight > viewportHeight) {
137
- y = Math.max(10, viewportHeight - dropdownHeight - 10);
138
- }
139
- this.dropdownStyle = {
140
- position: 'fixed',
141
- left: `${x}px`,
142
- top: `${y}px`,
143
- 'z-index': 9999
144
- };
145
- }
146
- /**
147
- * Check if an action is disabled
148
- */
149
- isActionDisabled(action) {
150
- if (!this.context)
151
- return true;
152
- if (typeof action.disabled === 'function') {
153
- return action.disabled(this.context.column, this.context.columnIndex);
154
- }
155
- return action.disabled || false;
156
- }
157
- /**
158
- * Handle action click
159
- */
160
- onActionClick(action) {
161
- if (!this.context || this.isActionDisabled(action)) {
162
- return;
163
- }
164
- // Special handling for filter action - open filter popup
165
- if (action.id === 'filter') {
166
- this.isFilterOpen = true;
167
- return; // Don't emit or close menu
168
- }
169
- const event = {
170
- action,
171
- column: this.context.column,
172
- columnIndex: this.context.columnIndex
173
- };
174
- this.actionClicked.emit(event);
175
- }
176
- /**
177
- * Close dropdown when clicking backdrop
178
- */
179
- onBackdropClick(event) {
180
- const target = event.target;
181
- if (target.classList.contains('dropdown-backdrop')) {
182
- // this.closed.emit();
183
- }
184
- }
185
- onFilterClosed() {
186
- this.isFilterOpen = false;
187
- // Close the entire column menu when filter is closed
188
- this.closed.emit();
189
- }
190
- onFilterApplied(event) {
191
- console.log('Filter applied:', event);
192
- this.isFilterOpen = false;
193
- // Close the entire column menu when filter is applied
194
- this.closed.emit();
195
- }
196
- onFilterCleared() {
197
- console.log('Filter cleared');
198
- this.isFilterOpen = false;
199
- // Close the entire column menu when filter is cleared
200
- this.closed.emit();
201
- }
202
- /**
203
- * Determine if menu should align to the left (for first few columns)
204
- */
205
- shouldAlignLeft() {
206
- // Align left for first 2 columns to prevent clipping
207
- return (this.context?.columnIndex || 0) <= 1;
208
- }
209
- }
210
- StColumnMenuDropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StColumnMenuDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
211
- StColumnMenuDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StColumnMenuDropdownComponent, selector: "st-column-menu-dropdown", inputs: { isOpen: "isOpen", position: "position", context: "context" }, outputs: { actionClicked: "actionClicked", closed: "closed" }, host: { listeners: { "click": "onBackdropClick($event)" } }, viewQueries: [{ propertyName: "filterPopup", first: true, predicate: ["filterPopup"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!-- Dropdown container with backdrop -->\n<div class=\"dropdown-container\" *ngIf=\"isOpen && context\">\n <!-- Backdrop -->\n <div class=\"dropdown-backdrop\" (click)=\"closed.emit()\"></div>\n \n <!-- Dropdown menu -->\n <div class=\"column-menu-dropdown\" [ngStyle]=\"dropdownStyle\">\n <!-- Main menu with actions -->\n <nile-menu *ngIf=\"!isFilterOpen\">\n <!-- Dynamically render all visible actions -->\n <ng-container *ngFor=\"let action of visibleActions; let i = index; let last = last\">\n <nile-menu-item \n (click)=\"onActionClick(action)\"\n [class.disabled]=\"isActionDisabled(action)\"\n [class.active]=\"isActionActive(action)\">\n <span class=\"checkmark\" *ngIf=\"isActionActive(action)\">\u2713</span>\n <nile-icon slot=\"prefix\" *ngIf=\"action.icon && !isActionActive(action)\" [name]=\"action.icon\"></nile-icon>\n <span class=\"action-label\">{{ action.label }}</span>\n </nile-menu-item>\n \n <!-- Add divider after action groups -->\n <nile-divider *ngIf=\"shouldShowDividerAfter(action, i, last)\"></nile-divider>\n </ng-container>\n \n <!-- Fallback if no actions -->\n <nile-menu-item *ngIf=\"visibleActions.length === 0\">\n No actions available\n </nile-menu-item>\n </nile-menu>\n \n <!-- Filter popup (conditionally rendered) -->\n <st-column-filter\n #filterPopup\n *ngIf=\"isFilterOpen && context\"\n [column]=\"context.column\"\n [tableState]=\"context.tableState\"\n [columnIndex]=\"context.columnIndex\"\n [isFirstColumn]=\"context.isFirstColumn\"\n [isLastColumn]=\"context.isLastColumn\"\n [isOpen]=\"isFilterOpen\"\n (filterApplied)=\"onFilterApplied($event)\"\n (filterCleared)=\"onFilterCleared()\"\n (closed)=\"onFilterClosed()\">\n </st-column-filter>\n </div>\n</div>\n", styles: [".dropdown-container{position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:9998}.dropdown-backdrop{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:auto;z-index:9998}.column-menu-dropdown{min-width:200px;max-width:300px;background-color:#fff;border-radius:8px;box-shadow:0 10px 25px #00000026;overflow:hidden;pointer-events:auto;z-index:9999}nile-menu nile-divider::part(divider){margin:0}nile-menu nile-menu-item::part(base){height:2.5rem;min-height:auto}nile-menu nile-menu-item .checkmark{margin-right:8px;color:#4299e1;font-weight:700}\n"], components: [{ type: i1.StColumnFilterComponent, selector: "st-column-filter", inputs: ["column", "tableState", "columnIndex", "isFirstColumn", "isLastColumn", "isOpen", "filterContext"], outputs: ["closed", "filterApplied", "filterCleared"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
212
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StColumnMenuDropdownComponent, decorators: [{
213
- type: Component,
214
- args: [{ selector: 'st-column-menu-dropdown', template: "<!-- Dropdown container with backdrop -->\n<div class=\"dropdown-container\" *ngIf=\"isOpen && context\">\n <!-- Backdrop -->\n <div class=\"dropdown-backdrop\" (click)=\"closed.emit()\"></div>\n \n <!-- Dropdown menu -->\n <div class=\"column-menu-dropdown\" [ngStyle]=\"dropdownStyle\">\n <!-- Main menu with actions -->\n <nile-menu *ngIf=\"!isFilterOpen\">\n <!-- Dynamically render all visible actions -->\n <ng-container *ngFor=\"let action of visibleActions; let i = index; let last = last\">\n <nile-menu-item \n (click)=\"onActionClick(action)\"\n [class.disabled]=\"isActionDisabled(action)\"\n [class.active]=\"isActionActive(action)\">\n <span class=\"checkmark\" *ngIf=\"isActionActive(action)\">\u2713</span>\n <nile-icon slot=\"prefix\" *ngIf=\"action.icon && !isActionActive(action)\" [name]=\"action.icon\"></nile-icon>\n <span class=\"action-label\">{{ action.label }}</span>\n </nile-menu-item>\n \n <!-- Add divider after action groups -->\n <nile-divider *ngIf=\"shouldShowDividerAfter(action, i, last)\"></nile-divider>\n </ng-container>\n \n <!-- Fallback if no actions -->\n <nile-menu-item *ngIf=\"visibleActions.length === 0\">\n No actions available\n </nile-menu-item>\n </nile-menu>\n \n <!-- Filter popup (conditionally rendered) -->\n <st-column-filter\n #filterPopup\n *ngIf=\"isFilterOpen && context\"\n [column]=\"context.column\"\n [tableState]=\"context.tableState\"\n [columnIndex]=\"context.columnIndex\"\n [isFirstColumn]=\"context.isFirstColumn\"\n [isLastColumn]=\"context.isLastColumn\"\n [isOpen]=\"isFilterOpen\"\n (filterApplied)=\"onFilterApplied($event)\"\n (filterCleared)=\"onFilterCleared()\"\n (closed)=\"onFilterClosed()\">\n </st-column-filter>\n </div>\n</div>\n", styles: [".dropdown-container{position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:9998}.dropdown-backdrop{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:auto;z-index:9998}.column-menu-dropdown{min-width:200px;max-width:300px;background-color:#fff;border-radius:8px;box-shadow:0 10px 25px #00000026;overflow:hidden;pointer-events:auto;z-index:9999}nile-menu nile-divider::part(divider){margin:0}nile-menu nile-menu-item::part(base){height:2.5rem;min-height:auto}nile-menu nile-menu-item .checkmark{margin-right:8px;color:#4299e1;font-weight:700}\n"] }]
215
- }], propDecorators: { isOpen: [{
216
- type: Input
217
- }], position: [{
218
- type: Input
219
- }], context: [{
220
- type: Input
221
- }], actionClicked: [{
222
- type: Output
223
- }], closed: [{
224
- type: Output
225
- }], filterPopup: [{
226
- type: ViewChild,
227
- args: ['filterPopup']
228
- }], onBackdropClick: [{
229
- type: HostListener,
230
- args: ['click', ['$event']]
231
- }] } });
232
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3QtY29sdW1uLW1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtdGFibGUvc3JjL2xpYi9yZW5kZXJlci9jb21wb25lbnRzL3N0LWNvbHVtbi1tZW51L3N0LWNvbHVtbi1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXRhYmxlL3NyYy9saWIvcmVuZGVyZXIvY29tcG9uZW50cy9zdC1jb2x1bW4tbWVudS9zdC1jb2x1bW4tbWVudS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBNEIsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7OztBQVN6RCxNQUFNLE9BQU8sNkJBQTZCO0lBTDFDO1FBTUU7O1dBRUc7UUFDTSxXQUFNLEdBQVksS0FBSyxDQUFDO1FBRWpDOztXQUVHO1FBQ00sYUFBUSxHQUE2QixFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBRTdEOztXQUVHO1FBQ00sWUFBTyxHQUErQixJQUFJLENBQUM7UUFFcEQ7O1dBRUc7UUFDTyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFxQixDQUFDO1FBRWhFOztXQUVHO1FBQ08sV0FBTSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFJNUM7O1dBRUc7UUFDSCxtQkFBYyxHQUFtQixFQUFFLENBQUM7UUFFcEM7O1dBRUc7UUFDSCxrQkFBYSxHQUFRLEVBQUUsQ0FBQztRQUV4QixpQkFBWSxHQUFHLEtBQUssQ0FBQztLQTRNdEI7SUExTUMsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFD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S0ksYUFBYTtzQkFBdEIsTUFBTTtnQkFLRyxNQUFNO3NCQUFmLE1BQU07Z0JBRW1CLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYTtnQkFzTHhCLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgT3V0cHV0LCBJbnB1dCwgVmlld0NoaWxkLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIEhvc3RMaXN0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29sdW1uQWN0aW9uLCBDb2x1bW5BY3Rpb25Db250ZXh0LCBDb2x1bW5BY3Rpb25FdmVudCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9jb2x1bW4tYWN0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBTb3J0RGlyZWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RhYmxlLXR5cGVzJztcbmltcG9ydCB7IENlbGxEYXRhVHlwZSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9jZWxsLXR5cGVzJztcbmltcG9ydCB7IFN0Q29sdW1uRmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vc3QtY29sdW1uLWZpbHRlci9zdC1jb2x1bW4tZmlsdGVyLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N0LWNvbHVtbi1tZW51LWRyb3Bkb3duJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N0LWNvbHVtbi1tZW51LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3QtY29sdW1uLW1lbnUuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgU3RDb2x1bW5NZW51RHJvcGRvd25Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICAvKipcbiAgICogV2hldGhlciB0aGUgZHJvcGRvd24gaXMgb3BlblxuICAgKi9cbiAgQElucHV0KCkgaXNPcGVuOiBib29sZWFuID0gZmFsc2U7XG4gIFxuICAvKipcbiAgICogUG9zaXRpb24gb2YgdGhlIGRyb3Bkb3duICh4LCB5IGNvb3JkaW5hdGVzKVxuICAgKi9cbiAgQElucHV0KCkgcG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSA9IHsgeDogMCwgeTogMCB9O1xuICBcbiAgLyoqXG4gICAqIENvbnRleHQgY29udGFpbmluZyBjb2x1bW4gZGF0YSwgaW5kZXgsIGFuZCBhY3Rpb25zXG4gICAqL1xuICBASW5wdXQoKSBjb250ZXh0OiBDb2x1bW5BY3Rpb25Db250ZXh0IHwgbnVsbCA9IG51bGw7XG4gIFxuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIGFuIGFjdGlvbiBpcyBjbGlja2VkXG4gICAqL1xuICBAT3V0cHV0KCkgYWN0aW9uQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q29sdW1uQWN0aW9uRXZlbnQ+KCk7XG4gIFxuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIHRoZSBkcm9wZG93biBzaG91bGQgY2xvc2VcbiAgICovXG4gIEBPdXRwdXQoKSBjbG9zZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIFxuICBAVmlld0NoaWxkKCdmaWx0ZXJQb3B1cCcpIGZpbHRlclBvcHVwPzogU3RDb2x1bW5GaWx0ZXJDb21wb25lbnQ7XG4gIFxuICAvKipcbiAgICogVmlzaWJsZSBhY3Rpb25zIChmaWx0ZXJlZCBieSBoaWRkZW4gcHJvcGVydHkpXG4gICAqL1xuICB2aXNpYmxlQWN0aW9uczogQ29sdW1uQWN0aW9uW10gPSBbXTtcbiAgXG4gIC8qKlxuICAgKiBEcm9wZG93biBwb3NpdGlvbmluZyBzdHlsZVxuICAgKi9cbiAgZHJvcGRvd25TdHlsZTogYW55ID0ge307XG4gIFxuICBpc0ZpbHRlck9wZW4gPSBmYWxzZTtcbiAgXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snY29udGV4dCddIHx8IGNoYW5nZXNbJ2lzT3BlbiddKSB7XG4gICAgICB0aGlzLnVwZGF0ZVZpc2libGVBY3Rpb25zKCk7XG4gICAgfVxuICAgIFxuICAgIGlmIChjaGFuZ2VzWydwb3NpdGlvbiddIHx8IGNoYW5nZXNbJ2lzT3BlbiddKSB7XG4gICAgICB0aGlzLnVwZGF0ZURyb3Bkb3duUG9zaXRpb24oKTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBVcGRhdGUgdmlzaWJsZSBhY3Rpb25zIGJhc2VkIG9uIGhpZGRlbiBwcm9wZXJ0eVxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVWaXNpYmxlQWN0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29udGV4dCkge1xuICAgICAgdGhpcy52aXNpYmxlQWN0aW9ucyA9IFtdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICB0aGlzLnZpc2libGVBY3Rpb25zID0gdGhpcy5jb250ZXh0LmFjdGlvbnMuZmlsdGVyKGFjdGlvbiA9PiB7XG4gICAgICBpZiAodHlwZW9mIGFjdGlvbi5oaWRkZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuICFhY3Rpb24uaGlkZGVuKHRoaXMuY29udGV4dCEuY29sdW1uLCB0aGlzLmNvbnRleHQhLmNvbHVtbkluZGV4KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAhYWN0aW9uLmhpZGRlbjtcbiAgICB9KTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENoZWNrIGlmIGFuIGFjdGlvbiBpcyBjdXJyZW50bHkgYWN0aXZlIChmb3IgY2hlY2ttYXJrcylcbiAgICovXG4gIGlzQWN0aW9uQWN0aXZlKGFjdGlvbjogQ29sdW1uQWN0aW9uKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmNvbnRleHQpIHJldHVybiBmYWxzZTtcbiAgICBcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbnRleHQuY29sdW1uO1xuICAgIFxuICAgIC8vIFNvcnQgYWN0aW9uc1xuICAgIGlmIChhY3Rpb24uaWQgPT09ICdzb3J0LWFzYycpIHtcbiAgICAgIHJldHVybiBjb2x1bW4uc29ydERpcmVjdGlvbiA9PT0gU29ydERpcmVjdGlvbi5BU0M7XG4gICAgfVxuICAgIGlmIChhY3Rpb24uaWQgPT09ICdzb3J0LWRlc2MnKSB7XG4gICAgICByZXR1cm4gY29sdW1uLnNvcnREaXJlY3Rpb24gPT09IFNvcnREaXJlY3Rpb24uREVTQztcbiAgICB9XG4gICAgXG4gICAgLy8gRmlsdGVyIGFjdGlvblxuICAgIGlmIChhY3Rpb24uaWQgPT09ICdmaWx0ZXInKSB7XG4gICAgICByZXR1cm4gY29sdW1uLmZpbHRlckNvbmZpZz8uZW5hYmxlZCA9PT0gdHJ1ZTtcbiAgICB9XG4gICAgXG4gICAgLy8gUGluIGFjdGlvbnNcbiAgICBpZiAoYWN0aW9uLmlkID09PSAncGluLWxlZnQnKSB7XG4gICAgICByZXR1cm4gY29sdW1uLnN0aWNreSA9PT0gJ2xlZnQnO1xuICAgIH1cbiAgICBpZiAoYWN0aW9uLmlkID09PSAncGluLXJpZ2h0Jykge1xuICAgICAgcmV0dXJuIGNvbHVtbi5zdGlja3kgPT09ICdyaWdodCc7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgaWYgZGl2aWRlciBzaG91bGQgYmUgc2hvd24gYWZ0ZXIgYW4gYWN0aW9uXG4gICAqIEdyb3VwcyBidWlsdC1pbiBhY3Rpb25zOiBbc29ydCBncm91cF0gfCBbZmlsdGVyXSB8IFtwaW4gZ3JvdXBdIHwgW21vdmUgZ3JvdXBdIHwgW2N1c3RvbV1cbiAgICovXG4gIHNob3VsZFNob3dEaXZpZGVyQWZ0ZXIoYWN0aW9uOiBDb2x1bW5BY3Rpb24sIGluZGV4OiBudW1iZXIsIGlzTGFzdDogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIGlmIChpc0xhc3QgfHwgIXRoaXMudmlzaWJsZUFjdGlvbnNbaW5kZXggKyAxXSkgcmV0dXJuIGZhbHNlO1xuICAgIFxuICAgIGNvbnN0IGN1cnJlbnRJZCA9IGFjdGlvbi5pZDtcbiAgICBjb25zdCBuZXh0SWQgPSB0aGlzLnZpc2libGVBY3Rpb25zW2luZGV4ICsgMV0uaWQ7XG4gICAgXG4gICAgLy8gRGl2aWRlciBhZnRlciBzb3J0IGdyb3VwXG4gICAgaWYgKFsnc29ydC1hc2MnLCAnc29ydC1kZXNjJywgJ2NsZWFyLXNvcnQnXS5pbmNsdWRlcyhjdXJyZW50SWQpICYmIFxuICAgICAgICAhWydzb3J0LWFzYycsICdzb3J0LWRlc2MnLCAnY2xlYXItc29ydCddLmluY2x1ZGVzKG5leHRJZCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBcbiAgICAvLyBEaXZpZGVyIGFmdGVyIGZpbHRlclxuICAgIGlmIChjdXJyZW50SWQgPT09ICdmaWx0ZXInKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgXG4gICAgLy8gRGl2aWRlciBhZnRlciBwaW4gZ3JvdXBcbiAgICBpZiAoWydwaW4tbGVmdCcsICdwaW4tcmlnaHQnLCAndW5waW4nXS5pbmNsdWRlcyhjdXJyZW50SWQpICYmIFxuICAgICAgICAhWydwaW4tbGVmdCcsICdwaW4tcmlnaHQnLCAndW5waW4nXS5pbmNsdWRlcyhuZXh0SWQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgXG4gICAgLy8gRGl2aWRlciBhZnRlciBtb3ZlIGdyb3VwIChiZWZvcmUgY3VzdG9tIGFjdGlvbnMpXG4gICAgaWYgKFsnbW92ZS1sZWZ0JywgJ21vdmUtcmlnaHQnXS5pbmNsdWRlcyhjdXJyZW50SWQpICYmIFxuICAgICAgICAhWydtb3ZlLWxlZnQnLCAnbW92ZS1yaWdodCddLmluY2x1ZGVzKG5leHRJZCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBVcGRhdGUgZHJvcGRvd24gcG9zaXRpb24gYmFzZWQgb24gYXZhaWxhYmxlIHZpZXdwb3J0IHNwYWNlXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZURyb3Bkb3duUG9zaXRpb24oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzT3Blbikge1xuICAgICAgdGhpcy5kcm9wZG93blN0eWxlID0ge307XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IHZpZXdwb3J0V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICBjb25zdCB2aWV3cG9ydEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcbiAgICBjb25zdCBkcm9wZG93bldpZHRoID0gMjgwOyAvLyBBcHByb3hpbWF0ZSBkcm9wZG93biB3aWR0aFxuICAgIGNvbnN0IGRyb3Bkb3duSGVpZ2h0ID0gMzAwOyAvLyBBcHByb3hpbWF0ZSBtYXggZHJvcGRvd24gaGVpZ2h0XG4gICAgXG4gICAgbGV0IHsgeCwgeSB9ID0gdGhpcy5wb3NpdGlvbjtcbiAgICBcbiAgICAvLyBBZGp1c3QgaG9yaXpvbnRhbCBwb3NpdGlvbiBpZiBkcm9wZG93biB3b3VsZCBvdmVyZmxvd1xuICAgIGlmICh4ICsgZHJvcGRvd25XaWR0aCA+IHZpZXdwb3J0V2lkdGgpIHtcbiAgICAgIHggPSBNYXRoLm1heCgxMCwgdmlld3BvcnRXaWR0aCAtIGRyb3Bkb3duV2lkdGggLSAxMCk7XG4gICAgfVxuICAgIFxuICAgIC8vIEFkanVzdCB2ZXJ0aWNhbCBwb3NpdGlvbiBpZiBkcm9wZG93biB3b3VsZCBvdmVyZmxvd1xuICAgIGlmICh5ICsgZHJvcGRvd25IZWlnaHQgPiB2aWV3cG9ydEhlaWdodCkge1xuICAgICAgeSA9IE1hdGgubWF4KDEwLCB2aWV3cG9ydEhlaWdodCAtIGRyb3Bkb3duSGVpZ2h0IC0gMTApO1xuICAgIH1cbiAgICBcbiAgICB0aGlzLmRyb3Bkb3duU3R5bGUgPSB7XG4gICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgIGxlZnQ6IGAke3h9cHhgLFxuICAgICAgdG9wOiBgJHt5fXB4YCxcbiAgICAgICd6LWluZGV4JzogOTk5OVxuICAgIH07XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBhY3Rpb24gaXMgZGlzYWJsZWRcbiAgICovXG4gIGlzQWN0aW9uRGlzYWJsZWQoYWN0aW9uOiBDb2x1bW5BY3Rpb24pOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY29udGV4dCkgcmV0dXJuIHRydWU7XG4gICAgXG4gICAgaWYgKHR5cGVvZiBhY3Rpb24uZGlzYWJsZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBhY3Rpb24uZGlzYWJsZWQodGhpcy5jb250ZXh0LmNvbHVtbiwgdGhpcy5jb250ZXh0LmNvbHVtbkluZGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjdGlvbi5kaXNhYmxlZCB8fCBmYWxzZTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEhhbmRsZSBhY3Rpb24gY2xpY2tcbiAgICovXG4gIG9uQWN0aW9uQ2xpY2soYWN0aW9uOiBDb2x1bW5BY3Rpb24pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29udGV4dCB8fCB0aGlzLmlzQWN0aW9uRGlzYWJsZWQoYWN0aW9uKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICAvLyBTcGVjaWFsIGhhbmRsaW5nIGZvciBmaWx0ZXIgYWN0aW9uIC0gb3BlbiBmaWx0ZXIgcG9wdXBcbiAgICBpZiAoYWN0aW9uLmlkID09PSAnZmlsdGVyJykge1xuICAgICAgdGhpcy5pc0ZpbHRlck9wZW4gPSB0cnVlO1xuICAgICAgcmV0dXJuOyAvLyBEb24ndCBlbWl0IG9yIGNsb3NlIG1lbnVcbiAgICB9XG4gICAgXG4gICAgY29uc3QgZXZlbnQ6IENvbHVtbkFjdGlvbkV2ZW50ID0ge1xuICAgICAgYWN0aW9uLFxuICAgICAgY29sdW1uOiB0aGlzLmNvbnRleHQuY29sdW1uLFxuICAgICAgY29sdW1uSW5kZXg6IHRoaXMuY29udGV4dC5jb2x1bW5JbmRleFxuICAgIH07XG4gICAgXG4gICAgdGhpcy5hY3Rpb25DbGlja2VkLmVtaXQoZXZlbnQpO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2xvc2UgZHJvcGRvd24gd2hlbiBjbGlja2luZyBiYWNrZHJvcFxuICAgKi9cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICBvbkJhY2tkcm9wQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2Ryb3Bkb3duLWJhY2tkcm9wJykpIHtcbiAgICAgIC8vIHRoaXMuY2xvc2VkLmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBvbkZpbHRlckNsb3NlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzRmlsdGVyT3BlbiA9IGZhbHNlO1xuICAgIC8vIENsb3NlIHRoZSBlbnRpcmUgY29sdW1uIG1lbnUgd2hlbiBmaWx0ZXIgaXMgY2xvc2VkXG4gICAgdGhpcy5jbG9zZWQuZW1pdCgpO1xuICB9XG5cbiAgb25GaWx0ZXJBcHBsaWVkKGV2ZW50OiB7IG9wZXJhdG9yOiBhbnk7IHZhbHVlOiBhbnkgfSk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdGaWx0ZXIgYXBwbGllZDonLCBldmVudCk7XG4gICAgdGhpcy5pc0ZpbHRlck9wZW4gPSBmYWxzZTtcbiAgICAvLyBDbG9zZSB0aGUgZW50aXJlIGNvbHVtbiBtZW51IHdoZW4gZmlsdGVyIGlzIGFwcGxpZWRcbiAgICB0aGlzLmNsb3NlZC5lbWl0KCk7XG4gIH1cblxuICBvbkZpbHRlckNsZWFyZWQoKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ0ZpbHRlciBjbGVhcmVkJyk7XG4gICAgdGhpcy5pc0ZpbHRlck9wZW4gPSBmYWxzZTtcbiAgICAvLyBDbG9zZSB0aGUgZW50aXJlIGNvbHVtbiBtZW51IHdoZW4gZmlsdGVyIGlzIGNsZWFyZWRcbiAgICB0aGlzLmNsb3NlZC5lbWl0KCk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGlmIG1lbnUgc2hvdWxkIGFsaWduIHRvIHRoZSBsZWZ0IChmb3IgZmlyc3QgZmV3IGNvbHVtbnMpXG4gICAqL1xuICBzaG91bGRBbGlnbkxlZnQoKTogYm9vbGVhbiB7XG4gICAgLy8gQWxpZ24gbGVmdCBmb3IgZmlyc3QgMiBjb2x1bW5zIHRvIHByZXZlbnQgY2xpcHBpbmdcbiAgICByZXR1cm4gKHRoaXMuY29udGV4dD8uY29sdW1uSW5kZXggfHwgMCkgPD0gMTtcbiAgfVxufSIsIjwhLS0gRHJvcGRvd24gY29udGFpbmVyIHdpdGggYmFja2Ryb3AgLS0+XG48ZGl2IGNsYXNzPVwiZHJvcGRvd24tY29udGFpbmVyXCIgKm5nSWY9XCJpc09wZW4gJiYgY29udGV4dFwiPlxuICA8IS0tIEJhY2tkcm9wIC0tPlxuICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tYmFja2Ryb3BcIiAoY2xpY2spPVwiY2xvc2VkLmVtaXQoKVwiPjwvZGl2PlxuICBcbiAgPCEtLSBEcm9wZG93biBtZW51IC0tPlxuICA8ZGl2IGNsYXNzPVwiY29sdW1uLW1lbnUtZHJvcGRvd25cIiBbbmdTdHlsZV09XCJkcm9wZG93blN0eWxlXCI+XG4gICAgPCEtLSBNYWluIG1lbnUgd2l0aCBhY3Rpb25zIC0tPlxuICAgIDxuaWxlLW1lbnUgKm5nSWY9XCIhaXNGaWx0ZXJPcGVuXCI+XG4gICAgICA8IS0tIER5bmFtaWNhbGx5IHJlbmRlciBhbGwgdmlzaWJsZSBhY3Rpb25zIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIHZpc2libGVBY3Rpb25zOyBsZXQgaSA9IGluZGV4OyBsZXQgbGFzdCA9IGxhc3RcIj5cbiAgICAgICAgPG5pbGUtbWVudS1pdGVtIFxuICAgICAgICAgIChjbGljayk9XCJvbkFjdGlvbkNsaWNrKGFjdGlvbilcIlxuICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJpc0FjdGlvbkRpc2FibGVkKGFjdGlvbilcIlxuICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiaXNBY3Rpb25BY3RpdmUoYWN0aW9uKVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hlY2ttYXJrXCIgKm5nSWY9XCJpc0FjdGlvbkFjdGl2ZShhY3Rpb24pXCI+4pyTPC9zcGFuPlxuICAgICAgICAgIDxuaWxlLWljb24gc2xvdD1cInByZWZpeFwiICpuZ0lmPVwiYWN0aW9uLmljb24gJiYgIWlzQWN0aW9uQWN0aXZlKGFjdGlvbilcIiBbbmFtZV09XCJhY3Rpb24uaWNvblwiPjwvbmlsZS1pY29uPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWN0aW9uLWxhYmVsXCI+e3sgYWN0aW9uLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICA8L25pbGUtbWVudS1pdGVtPlxuICAgICAgICBcbiAgICAgICAgPCEtLSBBZGQgZGl2aWRlciBhZnRlciBhY3Rpb24gZ3JvdXBzIC0tPlxuICAgICAgICA8bmlsZS1kaXZpZGVyICpuZ0lmPVwic2hvdWxkU2hvd0RpdmlkZXJBZnRlcihhY3Rpb24sIGksIGxhc3QpXCI+PC9uaWxlLWRpdmlkZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIFxuICAgICAgPCEtLSBGYWxsYmFjayBpZiBubyBhY3Rpb25zIC0tPlxuICAgICAgPG5pbGUtbWVudS1pdGVtICpuZ0lmPVwidmlzaWJsZUFjdGlvbnMubGVuZ3RoID09PSAwXCI+XG4gICAgICAgIE5vIGFjdGlvbnMgYXZhaWxhYmxlXG4gICAgICA8L25pbGUtbWVudS1pdGVtPlxuICAgIDwvbmlsZS1tZW51PlxuICAgIFxuICAgIDwhLS0gRmlsdGVyIHBvcHVwIChjb25kaXRpb25hbGx5IHJlbmRlcmVkKSAtLT5cbiAgICA8c3QtY29sdW1uLWZpbHRlclxuICAgICAgI2ZpbHRlclBvcHVwXG4gICAgICAqbmdJZj1cImlzRmlsdGVyT3BlbiAmJiBjb250ZXh0XCJcbiAgICAgIFtjb2x1bW5dPVwiY29udGV4dC5jb2x1bW5cIlxuICAgICAgW3RhYmxlU3RhdGVdPVwiY29udGV4dC50YWJsZVN0YXRlXCJcbiAgICAgIFtjb2x1bW5JbmRleF09XCJjb250ZXh0LmNvbHVtbkluZGV4XCJcbiAgICAgIFtpc0ZpcnN0Q29sdW1uXT1cImNvbnRleHQuaXNGaXJzdENvbHVtblwiXG4gICAgICBbaXNMYXN0Q29sdW1uXT1cImNvbnRleHQuaXNMYXN0Q29sdW1uXCJcbiAgICAgIFtpc09wZW5dPVwiaXNGaWx0ZXJPcGVuXCJcbiAgICAgIChmaWx0ZXJBcHBsaWVkKT1cIm9uRmlsdGVyQXBwbGllZCgkZXZlbnQpXCJcbiAgICAgIChmaWx0ZXJDbGVhcmVkKT1cIm9uRmlsdGVyQ2xlYXJlZCgpXCJcbiAgICAgIChjbG9zZWQpPVwib25GaWx0ZXJDbG9zZWQoKVwiPlxuICAgIDwvc3QtY29sdW1uLWZpbHRlcj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -1,97 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "../../directives/click-outside.directive";
4
- import * as i2 from "@angular/common";
5
- export class StColumnVisibilityComponent {
6
- constructor() {
7
- this.isOpen = false;
8
- this.columnsVisibility = [];
9
- }
10
- ngOnInit() {
11
- if (!this.tableState) {
12
- console.warn('tableState is required for st-column-visibility component');
13
- return;
14
- }
15
- // Initialize with current state
16
- this.updateColumnsVisibility();
17
- // Subscribe to state changes to update visibility list
18
- this.subscribeToStateChanges();
19
- }
20
- ngOnChanges(changes) {
21
- // Handle tableState changes (when columns are added/removed)
22
- if (changes['tableState'] && !changes['tableState'].firstChange) {
23
- // Unsubscribe from old state
24
- this.stateSubscription?.unsubscribe();
25
- // Update columns visibility with new state
26
- if (this.tableState) {
27
- this.updateColumnsVisibility();
28
- // Re-subscribe to new state changes
29
- this.subscribeToStateChanges();
30
- }
31
- }
32
- }
33
- /**
34
- * Update columns visibility list from current table state
35
- */
36
- updateColumnsVisibility() {
37
- if (this.tableState) {
38
- this.columnsVisibility = this.tableState.getAllColumnsVisibility();
39
- }
40
- }
41
- /**
42
- * Subscribe to table state changes
43
- */
44
- subscribeToStateChanges() {
45
- if (!this.tableState)
46
- return;
47
- this.stateSubscription = this.tableState.stateChange$
48
- .subscribe(event => {
49
- if (event.type === 'column-visibility' || event.type === 'column-config') {
50
- this.updateColumnsVisibility();
51
- }
52
- });
53
- }
54
- ngOnDestroy() {
55
- this.stateSubscription?.unsubscribe();
56
- }
57
- toggleMenu(event) {
58
- event.stopPropagation();
59
- this.isOpen = !this.isOpen;
60
- }
61
- closeMenu() {
62
- this.isOpen = false;
63
- }
64
- getColumnsVisibility() {
65
- return this.columnsVisibility;
66
- }
67
- isColumnHideable(column) {
68
- return column.hideable !== false; // Default to true if not set
69
- }
70
- onToggleColumn(columnKey, event) {
71
- event.stopPropagation();
72
- // Check if column is hideable before toggling (defensive check)
73
- const column = this.columnsVisibility.find(col => col.key === columnKey);
74
- if (column && !this.isColumnHideable(column)) {
75
- return;
76
- }
77
- if (this.tableState) {
78
- this.tableState.toggleColumnVisibility(columnKey);
79
- }
80
- }
81
- isColumnVisible(columnKey) {
82
- if (!this.tableState) {
83
- return true;
84
- }
85
- const column = this.tableState.getColumns().find(col => col.key === columnKey);
86
- return column ? (column.visible !== false) : true;
87
- }
88
- }
89
- StColumnVisibilityComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StColumnVisibilityComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
90
- StColumnVisibilityComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StColumnVisibilityComponent, selector: "st-column-visibility", inputs: { tableState: "tableState" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"st-column-visibility\" (clickOutside)=\"closeMenu()\">\n <button class=\"visibility-trigger\" \n (click)=\"toggleMenu($event)\" \n title=\"Show/Hide Columns\"\n type=\"button\"\n [class.active]=\"isOpen\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2 2H14V14H2V2Z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M5 2V14M8 2V14M11 2V14\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n </button>\n \n <div class=\"visibility-dropdown\" *ngIf=\"isOpen\">\n <div class=\"dropdown-header\">Show/Hide Columns</div>\n <div class=\"dropdown-content\">\n <label *ngFor=\"let column of getColumnsVisibility()\" \n class=\"column-item\"\n [class.checked]=\"column.visible\"\n [class.disabled]=\"column.hideable === false\">\n <input type=\"checkbox\" \n [checked]=\"column.visible\"\n [disabled]=\"column.hideable === false\"\n [title]=\"column.hideable === false ? 'This column cannot be hidden' : ''\"\n (change)=\"onToggleColumn(column.key, $event)\">\n <span class=\"column-label\">{{ column.header }}</span>\n </label>\n </div>\n </div>\n</div>\n\n", styles: [".st-column-visibility{position:absolute;top:8px;right:8px;z-index:1000;display:inline-block}.st-column-visibility .visibility-trigger{background:white;border:1px solid #e2e8f0;border-radius:4px;cursor:pointer;padding:6px 8px;color:#718096;line-height:1;transition:all .2s;box-shadow:0 1px 2px #0000000d}.st-column-visibility .visibility-trigger:hover{background-color:#f7fafc;border-color:#cbd5e0;color:#2d3748}.st-column-visibility .visibility-trigger.active{background-color:#ebf8ff;border-color:#2b6cb0;color:#2b6cb0}.st-column-visibility .visibility-trigger svg{display:block;width:16px;height:16px}.st-column-visibility .visibility-dropdown{position:absolute;top:100%;right:0;background:white;border:1px solid #e2e8f0;border-radius:6px;box-shadow:0 4px 6px #0000001a,0 2px 4px #0000000f;z-index:1001;min-width:200px;margin-top:4px;overflow:hidden}.st-column-visibility .visibility-dropdown .dropdown-header{padding:10px 14px;font-weight:600;font-size:13px;color:#2d3748;border-bottom:1px solid #e2e8f0;background-color:#f7fafc}.st-column-visibility .visibility-dropdown .dropdown-content{max-height:10rem;overflow-y:auto;overflow-x:hidden}.st-column-visibility .visibility-dropdown .dropdown-content .column-item{display:flex;align-items:center;padding:10px 14px;cursor:pointer;transition:background-color .2s;-webkit-user-select:none;user-select:none}.st-column-visibility .visibility-dropdown .dropdown-content .column-item:hover{background-color:#f7fafc}.st-column-visibility .visibility-dropdown .dropdown-content .column-item.checked{background-color:#ebf8ff}.st-column-visibility .visibility-dropdown .dropdown-content .column-item.disabled{opacity:.6;cursor:not-allowed}.st-column-visibility .visibility-dropdown .dropdown-content .column-item.disabled:hover{background-color:transparent;cursor:not-allowed}.st-column-visibility .visibility-dropdown .dropdown-content .column-item input[type=checkbox]{margin-right:10px;cursor:pointer;width:16px;height:16px;flex-shrink:0}.st-column-visibility .visibility-dropdown .dropdown-content .column-item input[type=checkbox]:disabled{cursor:not-allowed;opacity:.5}.st-column-visibility .visibility-dropdown .dropdown-content .column-item .column-label{font-size:14px;color:#2d3748;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n"], directives: [{ type: i1.ClickOutsideDirective, selector: "[clickOutside]", outputs: ["clickOutside"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
91
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StColumnVisibilityComponent, decorators: [{
92
- type: Component,
93
- args: [{ selector: 'st-column-visibility', template: "<div class=\"st-column-visibility\" (clickOutside)=\"closeMenu()\">\n <button class=\"visibility-trigger\" \n (click)=\"toggleMenu($event)\" \n title=\"Show/Hide Columns\"\n type=\"button\"\n [class.active]=\"isOpen\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2 2H14V14H2V2Z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M5 2V14M8 2V14M11 2V14\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n </button>\n \n <div class=\"visibility-dropdown\" *ngIf=\"isOpen\">\n <div class=\"dropdown-header\">Show/Hide Columns</div>\n <div class=\"dropdown-content\">\n <label *ngFor=\"let column of getColumnsVisibility()\" \n class=\"column-item\"\n [class.checked]=\"column.visible\"\n [class.disabled]=\"column.hideable === false\">\n <input type=\"checkbox\" \n [checked]=\"column.visible\"\n [disabled]=\"column.hideable === false\"\n [title]=\"column.hideable === false ? 'This column cannot be hidden' : ''\"\n (change)=\"onToggleColumn(column.key, $event)\">\n <span class=\"column-label\">{{ column.header }}</span>\n </label>\n </div>\n </div>\n</div>\n\n", styles: [".st-column-visibility{position:absolute;top:8px;right:8px;z-index:1000;display:inline-block}.st-column-visibility .visibility-trigger{background:white;border:1px solid #e2e8f0;border-radius:4px;cursor:pointer;padding:6px 8px;color:#718096;line-height:1;transition:all .2s;box-shadow:0 1px 2px #0000000d}.st-column-visibility .visibility-trigger:hover{background-color:#f7fafc;border-color:#cbd5e0;color:#2d3748}.st-column-visibility .visibility-trigger.active{background-color:#ebf8ff;border-color:#2b6cb0;color:#2b6cb0}.st-column-visibility .visibility-trigger svg{display:block;width:16px;height:16px}.st-column-visibility .visibility-dropdown{position:absolute;top:100%;right:0;background:white;border:1px solid #e2e8f0;border-radius:6px;box-shadow:0 4px 6px #0000001a,0 2px 4px #0000000f;z-index:1001;min-width:200px;margin-top:4px;overflow:hidden}.st-column-visibility .visibility-dropdown .dropdown-header{padding:10px 14px;font-weight:600;font-size:13px;color:#2d3748;border-bottom:1px solid #e2e8f0;background-color:#f7fafc}.st-column-visibility .visibility-dropdown .dropdown-content{max-height:10rem;overflow-y:auto;overflow-x:hidden}.st-column-visibility .visibility-dropdown .dropdown-content .column-item{display:flex;align-items:center;padding:10px 14px;cursor:pointer;transition:background-color .2s;-webkit-user-select:none;user-select:none}.st-column-visibility .visibility-dropdown .dropdown-content .column-item:hover{background-color:#f7fafc}.st-column-visibility .visibility-dropdown .dropdown-content .column-item.checked{background-color:#ebf8ff}.st-column-visibility .visibility-dropdown .dropdown-content .column-item.disabled{opacity:.6;cursor:not-allowed}.st-column-visibility .visibility-dropdown .dropdown-content .column-item.disabled:hover{background-color:transparent;cursor:not-allowed}.st-column-visibility .visibility-dropdown .dropdown-content .column-item input[type=checkbox]{margin-right:10px;cursor:pointer;width:16px;height:16px;flex-shrink:0}.st-column-visibility .visibility-dropdown .dropdown-content .column-item input[type=checkbox]:disabled{cursor:not-allowed;opacity:.5}.st-column-visibility .visibility-dropdown .dropdown-content .column-item .column-label{font-size:14px;color:#2d3748;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n"] }]
94
- }], ctorParameters: function () { return []; }, propDecorators: { tableState: [{
95
- type: Input
96
- }] } });
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3QtY29sdW1uLXZpc2liaWxpdHkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtdGFibGUvc3JjL2xpYi9yZW5kZXJlci9jb21wb25lbnRzL3N0LWNvbHVtbi12aXNpYmlsaXR5L3N0LWNvbHVtbi12aXNpYmlsaXR5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXRhYmxlL3NyYy9saWIvcmVuZGVyZXIvY29tcG9uZW50cy9zdC1jb2x1bW4tdmlzaWJpbGl0eS9zdC1jb2x1bW4tdmlzaWJpbGl0eS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBK0MsTUFBTSxlQUFlLENBQUM7Ozs7QUFTOUYsTUFBTSxPQUFPLDJCQUEyQjtJQVF0QztRQUxBLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFDZixzQkFBaUIsR0FBMkUsRUFBRSxDQUFDO0lBSWhGLENBQUM7SUFFaEIsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3BCLE9BQU8sQ0FBQyxJQUFJLENBQUMsMkRBQTJELENBQUMsQ0FBQztZQUMxRSxPQUFPO1NBQ1I7UUFFRCxnQ0FBZ0M7UUFDaEMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFFL0IsdURBQXVEO1FBQ3ZELElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsNkRBQTZEO1FBQzdELElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLFdBQVcsRUFBRTtZQUMvRCw2QkFBNkI7WUFDN0IsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxDQUFDO1lBRXRDLDJDQUEyQztZQUMzQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO2dCQUUvQixvQ0FBb0M7Z0JBQ3BDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO2FBQ2hDO1NBQ0Y7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyx1QkFBdUI7UUFDN0IsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLHVCQUF1QixFQUFFLENBQUM7U0FDcEU7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyx1QkFBdUI7UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTztRQUU3QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZO2FBQ2xELFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqQixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssbUJBQW1CLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxlQUFlLEVBQUU7Z0JBQ3hFLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO2FBQ2hDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQVk7UUFDckIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQzdCLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUVELG9CQUFvQjtRQUNsQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUNoQyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsTUFBNEU7UUFDM0YsT0FBTyxNQUFNLENBQUMsUUFBUSxLQUFLLEtBQUssQ0FBQyxDQUFDLDZCQUE2QjtJQUNqRSxDQUFDO0lBRUQsY0FBYyxDQUFDLFNBQWlCLEVBQUUsS0FBWTtRQUM1QyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFeEIsZ0VBQWdFO1FBQ2hFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLFNBQVMsQ0FBQyxDQUFDO1FBQ3pFLElBQUksTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzVDLE9BQU87U0FDUjtRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixJQUFJLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ25EO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxTQUFpQjtRQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNwQixPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLFNBQVMsQ0FBQyxDQUFDO1FBQy9FLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNwRCxDQUFDOzt3SEF2R1UsMkJBQTJCOzRHQUEzQiwyQkFBMkIsdUhDVHhDLHk0Q0E4QkE7MkZEckJhLDJCQUEyQjtrQkFMdkMsU0FBUzsrQkFDRSxzQkFBc0I7MEVBS3ZCLFVBQVU7c0JBQWxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUYWJsZVN0YXRlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RhYmxlLXN0YXRlLmNsYXNzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdC1jb2x1bW4tdmlzaWJpbGl0eScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdC1jb2x1bW4tdmlzaWJpbGl0eS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3N0LWNvbHVtbi12aXNpYmlsaXR5LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgU3RDb2x1bW5WaXNpYmlsaXR5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIHRhYmxlU3RhdGUhOiBUYWJsZVN0YXRlO1xuICBcbiAgaXNPcGVuID0gZmFsc2U7XG4gIGNvbHVtbnNWaXNpYmlsaXR5OiB7IGtleTogc3RyaW5nOyBoZWFkZXI6IHN0cmluZzsgdmlzaWJsZTogYm9vbGVhbjsgaGlkZWFibGU6IGJvb2xlYW4gfVtdID0gW107XG4gIFxuICBwcml2YXRlIHN0YXRlU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBcbiAgY29uc3RydWN0b3IoKSB7fVxuICBcbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnRhYmxlU3RhdGUpIHtcbiAgICAgIGNvbnNvbGUud2FybigndGFibGVTdGF0ZSBpcyByZXF1aXJlZCBmb3Igc3QtY29sdW1uLXZpc2liaWxpdHkgY29tcG9uZW50Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIC8vIEluaXRpYWxpemUgd2l0aCBjdXJyZW50IHN0YXRlXG4gICAgdGhpcy51cGRhdGVDb2x1bW5zVmlzaWJpbGl0eSgpO1xuICAgIFxuICAgIC8vIFN1YnNjcmliZSB0byBzdGF0ZSBjaGFuZ2VzIHRvIHVwZGF0ZSB2aXNpYmlsaXR5IGxpc3RcbiAgICB0aGlzLnN1YnNjcmliZVRvU3RhdGVDaGFuZ2VzKCk7XG4gIH1cbiAgXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAvLyBIYW5kbGUgdGFibGVTdGF0ZSBjaGFuZ2VzICh3aGVuIGNvbHVtbnMgYXJlIGFkZGVkL3JlbW92ZWQpXG4gICAgaWYgKGNoYW5nZXNbJ3RhYmxlU3RhdGUnXSAmJiAhY2hhbmdlc1sndGFibGVTdGF0ZSddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAvLyBVbnN1YnNjcmliZSBmcm9tIG9sZCBzdGF0ZVxuICAgICAgdGhpcy5zdGF0ZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgIFxuICAgICAgLy8gVXBkYXRlIGNvbHVtbnMgdmlzaWJpbGl0eSB3aXRoIG5ldyBzdGF0ZVxuICAgICAgaWYgKHRoaXMudGFibGVTdGF0ZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbnNWaXNpYmlsaXR5KCk7XG4gICAgICAgIFxuICAgICAgICAvLyBSZS1zdWJzY3JpYmUgdG8gbmV3IHN0YXRlIGNoYW5nZXNcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVUb1N0YXRlQ2hhbmdlcygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIFVwZGF0ZSBjb2x1bW5zIHZpc2liaWxpdHkgbGlzdCBmcm9tIGN1cnJlbnQgdGFibGUgc3RhdGVcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlQ29sdW1uc1Zpc2liaWxpdHkoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudGFibGVTdGF0ZSkge1xuICAgICAgdGhpcy5jb2x1bW5zVmlzaWJpbGl0eSA9IHRoaXMudGFibGVTdGF0ZS5nZXRBbGxDb2x1bW5zVmlzaWJpbGl0eSgpO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byB0YWJsZSBzdGF0ZSBjaGFuZ2VzXG4gICAqL1xuICBwcml2YXRlIHN1YnNjcmliZVRvU3RhdGVDaGFuZ2VzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy50YWJsZVN0YXRlKSByZXR1cm47XG4gICAgXG4gICAgdGhpcy5zdGF0ZVN1YnNjcmlwdGlvbiA9IHRoaXMudGFibGVTdGF0ZS5zdGF0ZUNoYW5nZSRcbiAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2NvbHVtbi12aXNpYmlsaXR5JyB8fCBldmVudC50eXBlID09PSAnY29sdW1uLWNvbmZpZycpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbnNWaXNpYmlsaXR5KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG4gIFxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG4gIFxuICB0b2dnbGVNZW51KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaXNPcGVuID0gIXRoaXMuaXNPcGVuO1xuICB9XG4gIFxuICBjbG9zZU1lbnUoKTogdm9pZCB7IFxuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7IFxuICB9XG5cbiAgZ2V0Q29sdW1uc1Zpc2liaWxpdHkoKTogeyBrZXk6IHN0cmluZzsgaGVhZGVyOiBzdHJpbmc7IHZpc2libGU6IGJvb2xlYW47IGhpZGVhYmxlOiBib29sZWFuIH1bXSB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uc1Zpc2liaWxpdHk7XG4gIH1cblxuICBpc0NvbHVtbkhpZGVhYmxlKGNvbHVtbjogeyBrZXk6IHN0cmluZzsgaGVhZGVyOiBzdHJpbmc7IHZpc2libGU6IGJvb2xlYW47IGhpZGVhYmxlOiBib29sZWFuIH0pOiBib29sZWFuIHtcbiAgICByZXR1cm4gY29sdW1uLmhpZGVhYmxlICE9PSBmYWxzZTsgLy8gRGVmYXVsdCB0byB0cnVlIGlmIG5vdCBzZXRcbiAgfVxuXG4gIG9uVG9nZ2xlQ29sdW1uKGNvbHVtbktleTogc3RyaW5nLCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBcbiAgICAvLyBDaGVjayBpZiBjb2x1bW4gaXMgaGlkZWFibGUgYmVmb3JlIHRvZ2dsaW5nIChkZWZlbnNpdmUgY2hlY2spXG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zVmlzaWJpbGl0eS5maW5kKGNvbCA9PiBjb2wua2V5ID09PSBjb2x1bW5LZXkpO1xuICAgIGlmIChjb2x1bW4gJiYgIXRoaXMuaXNDb2x1bW5IaWRlYWJsZShjb2x1bW4pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIGlmICh0aGlzLnRhYmxlU3RhdGUpIHtcbiAgICAgIHRoaXMudGFibGVTdGF0ZS50b2dnbGVDb2x1bW5WaXNpYmlsaXR5KGNvbHVtbktleSk7XG4gICAgfVxuICB9XG5cbiAgaXNDb2x1bW5WaXNpYmxlKGNvbHVtbktleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnRhYmxlU3RhdGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLnRhYmxlU3RhdGUuZ2V0Q29sdW1ucygpLmZpbmQoY29sID0+IGNvbC5rZXkgPT09IGNvbHVtbktleSk7XG4gICAgcmV0dXJuIGNvbHVtbiA/IChjb2x1bW4udmlzaWJsZSAhPT0gZmFsc2UpIDogdHJ1ZTtcbiAgfVxufVxuXG4iLCI8ZGl2IGNsYXNzPVwic3QtY29sdW1uLXZpc2liaWxpdHlcIiAoY2xpY2tPdXRzaWRlKT1cImNsb3NlTWVudSgpXCI+XG4gIDxidXR0b24gY2xhc3M9XCJ2aXNpYmlsaXR5LXRyaWdnZXJcIiBcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlTWVudSgkZXZlbnQpXCIgXG4gICAgICAgICAgdGl0bGU9XCJTaG93L0hpZGUgQ29sdW1uc1wiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJpc09wZW5cIj5cbiAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgIDxwYXRoIGQ9XCJNMiAySDE0VjE0SDJWMlpcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICA8cGF0aCBkPVwiTTUgMlYxNE04IDJWMTRNMTEgMlYxNFwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIi8+XG4gICAgPC9zdmc+XG4gIDwvYnV0dG9uPlxuICBcbiAgPGRpdiBjbGFzcz1cInZpc2liaWxpdHktZHJvcGRvd25cIiAqbmdJZj1cImlzT3BlblwiPlxuICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1oZWFkZXJcIj5TaG93L0hpZGUgQ29sdW1uczwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1jb250ZW50XCI+XG4gICAgICA8bGFiZWwgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBnZXRDb2x1bW5zVmlzaWJpbGl0eSgpXCIgXG4gICAgICAgICAgICAgY2xhc3M9XCJjb2x1bW4taXRlbVwiXG4gICAgICAgICAgICAgW2NsYXNzLmNoZWNrZWRdPVwiY29sdW1uLnZpc2libGVcIlxuICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJjb2x1bW4uaGlkZWFibGUgPT09IGZhbHNlXCI+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBcbiAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImNvbHVtbi52aXNpYmxlXCJcbiAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb2x1bW4uaGlkZWFibGUgPT09IGZhbHNlXCJcbiAgICAgICAgICAgICAgIFt0aXRsZV09XCJjb2x1bW4uaGlkZWFibGUgPT09IGZhbHNlID8gJ1RoaXMgY29sdW1uIGNhbm5vdCBiZSBoaWRkZW4nIDogJydcIlxuICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblRvZ2dsZUNvbHVtbihjb2x1bW4ua2V5LCAkZXZlbnQpXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY29sdW1uLWxhYmVsXCI+e3sgY29sdW1uLmhlYWRlciB9fTwvc3Bhbj5cbiAgICAgIDwvbGFiZWw+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbiJdfQ==
@@ -1,157 +0,0 @@
1
- /**
2
- * st-header Component
3
- * Encapsulates column-specific logic including sorting and filtering
4
- */
5
- import { Component, Input, Output, EventEmitter } from '@angular/core';
6
- import { SortDirection } from '../../models/table-types';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "@angular/common";
9
- export class StHeaderComponent {
10
- constructor() {
11
- /**
12
- * Column index in the visible columns array
13
- */
14
- this.columnIndex = 0;
15
- /**
16
- * Whether this is the first column
17
- */
18
- this.isFirstColumn = false;
19
- /**
20
- * Whether this is the last column
21
- */
22
- this.isLastColumn = false;
23
- /**
24
- * Whether sorting is enabled globally
25
- */
26
- this.enableSorting = true;
27
- /**
28
- * Whether filtering is enabled globally
29
- */
30
- this.enableFiltering = true;
31
- /**
32
- * Emits column sort event when sort is toggled
33
- */
34
- this.sortToggle = new EventEmitter();
35
- /**
36
- * Emits filter changes (future feature)
37
- */
38
- this.filterChange = new EventEmitter();
39
- /**
40
- * Emits when column is moved left or right
41
- */
42
- this.columnMoved = new EventEmitter();
43
- /**
44
- * Emits when column menu button is clicked
45
- */
46
- this.menuClick = new EventEmitter();
47
- }
48
- /**
49
- * Cleanup on destroy
50
- */
51
- ngOnDestroy() {
52
- // No cleanup needed - resize is now handled by directive
53
- }
54
- /**
55
- * Handle column menu button click
56
- */
57
- onMenuClick(event) {
58
- event.preventDefault();
59
- event.stopPropagation();
60
- this.menuClick.emit(event);
61
- }
62
- /**
63
- * Check if column menu should be shown
64
- */
65
- isMenuEnabled() {
66
- return this.column.enableMenu !== false;
67
- }
68
- /**
69
- * Check if column is sortable
70
- */
71
- isSortable() {
72
- return this.column.sortable !== false && this.enableSorting;
73
- }
74
- /**
75
- * Get current sort direction
76
- */
77
- getSortDirection() {
78
- return this.column.sortDirection || SortDirection.NONE;
79
- }
80
- /**
81
- * Check if column is currently sorted
82
- */
83
- isSorted() {
84
- return this.column.sortEnabled || false;
85
- }
86
- /**
87
- * Get ARIA sort attribute for accessibility
88
- */
89
- getAriaSort() {
90
- if (!this.isSortable()) {
91
- return null;
92
- }
93
- const dir = this.getSortDirection();
94
- if (dir === SortDirection.ASC) {
95
- return 'ascending';
96
- }
97
- if (dir === SortDirection.DESC) {
98
- return 'descending';
99
- }
100
- return 'none';
101
- }
102
- /**
103
- * Handle move left action
104
- */
105
- onMoveLeft() {
106
- const moveEvent = {
107
- columnKey: this.column.key,
108
- direction: 'left',
109
- oldIndex: this.columnIndex,
110
- newIndex: this.columnIndex - 1,
111
- column: this.column
112
- };
113
- this.columnMoved.emit(moveEvent);
114
- }
115
- /**
116
- * Handle move right action
117
- */
118
- onMoveRight() {
119
- const moveEvent = {
120
- columnKey: this.column.key,
121
- direction: 'right',
122
- oldIndex: this.columnIndex,
123
- newIndex: this.columnIndex + 1,
124
- column: this.column
125
- };
126
- this.columnMoved.emit(moveEvent);
127
- }
128
- }
129
- StHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
130
- StHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StHeaderComponent, selector: "st-header", inputs: { column: "column", columnIndex: "columnIndex", isFirstColumn: "isFirstColumn", isLastColumn: "isLastColumn", tableState: "tableState", enableSorting: "enableSorting", enableFiltering: "enableFiltering" }, outputs: { sortToggle: "sortToggle", filterChange: "filterChange", columnMoved: "columnMoved", menuClick: "menuClick" }, ngImport: i0, template: "<div class=\"st-header\" [class.sortable]=\"isSortable()\" [class.sorted]=\"isSorted()\" [attr.aria-sort]=\"getAriaSort()\">\n <div class=\"header-content\">\n <span class=\"header-text\">{{ column.header || column.key }}</span>\n <button *ngIf=\"isMenuEnabled()\" \n class=\"column-menu-trigger\" \n (click)=\"onMenuClick($event)\"\n type=\"button\" \n aria-label=\"Column actions\">\n <nile-icon name=\"options\"></nile-icon>\n </button>\n </div>\n</div>", styles: [".st-header{position:relative;text-align:left;padding-left:8px}.st-header.sortable{cursor:pointer;-webkit-user-select:none;user-select:none;transition:background-color .2s}.st-header.resizing{-webkit-user-select:none;user-select:none;cursor:col-resize}.st-header.align-center{text-align:center}.st-header.align-center .header-content{justify-content:center}.st-header.align-right{text-align:right}.st-header.align-right .header-content{justify-content:flex-end}.st-header .header-content{display:flex;align-items:center;gap:8px}.st-header .header-text{flex:1;font-size:12px;font-weight:500;letter-spacing:.2px;line-height:14px}.st-header .column-menu-trigger{background:none;border:none;padding:4px;cursor:pointer;border-radius:4px;display:flex;align-items:center;justify-content:center}.st-header .column-menu-trigger nile-icon{font-size:16px;pointer-events:none}.st-header .resize-handle{position:absolute;top:0;right:0;bottom:0;width:8px;cursor:col-resize;z-index:10}.st-header .resize-handle:after{content:\"\";position:absolute;top:50%;right:3px;transform:translateY(-50%);width:2px;height:20px;background-color:#cbd5e0;opacity:0;transition:opacity .2s}.st-header .resize-handle:hover:after,.st-header .resize-handle:active:after{opacity:1}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
131
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StHeaderComponent, decorators: [{
132
- type: Component,
133
- args: [{ selector: 'st-header', template: "<div class=\"st-header\" [class.sortable]=\"isSortable()\" [class.sorted]=\"isSorted()\" [attr.aria-sort]=\"getAriaSort()\">\n <div class=\"header-content\">\n <span class=\"header-text\">{{ column.header || column.key }}</span>\n <button *ngIf=\"isMenuEnabled()\" \n class=\"column-menu-trigger\" \n (click)=\"onMenuClick($event)\"\n type=\"button\" \n aria-label=\"Column actions\">\n <nile-icon name=\"options\"></nile-icon>\n </button>\n </div>\n</div>", styles: [".st-header{position:relative;text-align:left;padding-left:8px}.st-header.sortable{cursor:pointer;-webkit-user-select:none;user-select:none;transition:background-color .2s}.st-header.resizing{-webkit-user-select:none;user-select:none;cursor:col-resize}.st-header.align-center{text-align:center}.st-header.align-center .header-content{justify-content:center}.st-header.align-right{text-align:right}.st-header.align-right .header-content{justify-content:flex-end}.st-header .header-content{display:flex;align-items:center;gap:8px}.st-header .header-text{flex:1;font-size:12px;font-weight:500;letter-spacing:.2px;line-height:14px}.st-header .column-menu-trigger{background:none;border:none;padding:4px;cursor:pointer;border-radius:4px;display:flex;align-items:center;justify-content:center}.st-header .column-menu-trigger nile-icon{font-size:16px;pointer-events:none}.st-header .resize-handle{position:absolute;top:0;right:0;bottom:0;width:8px;cursor:col-resize;z-index:10}.st-header .resize-handle:after{content:\"\";position:absolute;top:50%;right:3px;transform:translateY(-50%);width:2px;height:20px;background-color:#cbd5e0;opacity:0;transition:opacity .2s}.st-header .resize-handle:hover:after,.st-header .resize-handle:active:after{opacity:1}\n"] }]
134
- }], propDecorators: { column: [{
135
- type: Input
136
- }], columnIndex: [{
137
- type: Input
138
- }], isFirstColumn: [{
139
- type: Input
140
- }], isLastColumn: [{
141
- type: Input
142
- }], tableState: [{
143
- type: Input
144
- }], enableSorting: [{
145
- type: Input
146
- }], enableFiltering: [{
147
- type: Input
148
- }], sortToggle: [{
149
- type: Output
150
- }], filterChange: [{
151
- type: Output
152
- }], columnMoved: [{
153
- type: Output
154
- }], menuClick: [{
155
- type: Output
156
- }] } });
157
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3QtaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXRhYmxlL3NyYy9saWIvcmVuZGVyZXIvY29tcG9uZW50cy9zdC1oZWFkZXIvc3QtaGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXRhYmxlL3NyYy9saWIvcmVuZGVyZXIvY29tcG9uZW50cy9zdC1oZWFkZXIvc3QtaGVhZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFHbEYsT0FBTyxFQUFFLGFBQWEsRUFBdUQsTUFBTSwwQkFBMEIsQ0FBQzs7O0FBTzlHLE1BQU0sT0FBTyxpQkFBaUI7SUFMOUI7UUFXRTs7V0FFRztRQUNNLGdCQUFXLEdBQVcsQ0FBQyxDQUFDO1FBRWpDOztXQUVHO1FBQ00sa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFFeEM7O1dBRUc7UUFDTSxpQkFBWSxHQUFZLEtBQUssQ0FBQztRQU92Qzs7V0FFRztRQUNNLGtCQUFhLEdBQVksSUFBSSxDQUFDO1FBRXZDOztXQUVHO1FBQ00sb0JBQWUsR0FBWSxJQUFJLENBQUM7UUFFekM7O1dBRUc7UUFDTyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7UUFFM0Q7O1dBRUc7UUFDTyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFxQixDQUFDO1FBRS9EOztXQUVHO1FBQ08sZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztRQUU1RDs7V0FFRztRQUNPLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBYyxDQUFDO0tBMkZ0RDtJQXpGQzs7T0FFRztJQUNILFdBQVc7UUFDVCx5REFBeUQ7SUFDM0QsQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVyxDQUFDLEtBQWlCO1FBQzNCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEtBQUssS0FBSyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7T0FFRztJQUNILFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzlELENBQUM7SUFFRDs7T0FFRztJQUNILGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQztJQUN6RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUM7SUFDMUMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVztRQUNULElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDdEIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3BDLElBQUksR0FBRyxLQUFLLGFBQWEsQ0FBQyxHQUFHLEVBQUU7WUFDN0IsT0FBTyxXQUFXLENBQUM7U0FDcEI7UUFDRCxJQUFJLEdBQUcsS0FBSyxhQUFhLENBQUMsSUFBSSxFQUFFO1lBQzlCLE9BQU8sWUFBWSxDQUFDO1NBQ3JCO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsVUFBVTtRQUNSLE1BQU0sU0FBUyxHQUFvQjtZQUNqQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHO1lBQzFCLFNBQVMsRUFBRSxNQUFNO1lBQ2pCLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVztZQUMxQixRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDO1lBQzlCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtTQUNwQixDQUFDO1FBQ0YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVztRQUNULE1BQU0sU0FBUyxHQUFvQjtZQUNqQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHO1lBQzFCLFNBQVMsRUFBRSxPQUFPO1lBQ2xCLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVztZQUMxQixRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDO1lBQzlCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtTQUNwQixDQUFDO1FBQ0YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkMsQ0FBQzs7OEdBaEpVLGlCQUFpQjtrR0FBakIsaUJBQWlCLGdZQ2Y5QixzZ0JBV007MkZESU8saUJBQWlCO2tCQUw3QixTQUFTOytCQUNFLFdBQVc7OEJBUVosTUFBTTtzQkFBZCxLQUFLO2dCQUtHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBS0csYUFBYTtzQkFBckIsS0FBSztnQkFLRyxZQUFZO3NCQUFwQixLQUFLO2dCQUtHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBS0csYUFBYTtzQkFBckIsS0FBSztnQkFLRyxlQUFlO3NCQUF2QixLQUFLO2dCQUtJLFVBQVU7c0JBQW5CLE1BQU07Z0JBS0csWUFBWTtzQkFBckIsTUFBTTtnQkFLRyxXQUFXO3NCQUFwQixNQUFNO2dCQUtHLFNBQVM7c0JBQWxCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHN0LWhlYWRlciBDb21wb25lbnRcbiAqIEVuY2Fwc3VsYXRlcyBjb2x1bW4tc3BlY2lmaWMgbG9naWMgaW5jbHVkaW5nIHNvcnRpbmcgYW5kIGZpbHRlcmluZ1xuICovXG5cbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbHVtbkNvbmZpZyB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9jb2x1bW4tY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBUYWJsZVN0YXRlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RhYmxlLXN0YXRlLmNsYXNzJztcbmltcG9ydCB7IFNvcnREaXJlY3Rpb24sIENvbHVtblNvcnRFdmVudCwgQ29sdW1uRmlsdGVyRXZlbnQsIENvbHVtbk1vdmVFdmVudCB9IGZyb20gJy4uLy4uL21vZGVscy90YWJsZS10eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N0LWhlYWRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdC1oZWFkZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zdC1oZWFkZXIuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBTdEhlYWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBDb2x1bW4gY29uZmlndXJhdGlvbiAtIGNvbnRhaW5zIGFsbCBjb2x1bW4gbWV0YWRhdGEgYW5kIHN0YXRlXG4gICAqL1xuICBASW5wdXQoKSBjb2x1bW4hOiBDb2x1bW5Db25maWc8YW55PjtcblxuICAvKipcbiAgICogQ29sdW1uIGluZGV4IGluIHRoZSB2aXNpYmxlIGNvbHVtbnMgYXJyYXlcbiAgICovXG4gIEBJbnB1dCgpIGNvbHVtbkluZGV4OiBudW1iZXIgPSAwO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgaXMgdGhlIGZpcnN0IGNvbHVtblxuICAgKi9cbiAgQElucHV0KCkgaXNGaXJzdENvbHVtbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgaXMgdGhlIGxhc3QgY29sdW1uXG4gICAqL1xuICBASW5wdXQoKSBpc0xhc3RDb2x1bW46IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgVGFibGVTdGF0ZSByZWZlcmVuY2UgZm9yIGludGVncmF0ZWQgc29ydGluZy9maWx0ZXJpbmdcbiAgICovXG4gIEBJbnB1dCgpIHRhYmxlU3RhdGU/OiBUYWJsZVN0YXRlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHNvcnRpbmcgaXMgZW5hYmxlZCBnbG9iYWxseVxuICAgKi9cbiAgQElucHV0KCkgZW5hYmxlU29ydGluZzogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgZmlsdGVyaW5nIGlzIGVuYWJsZWQgZ2xvYmFsbHlcbiAgICovXG4gIEBJbnB1dCgpIGVuYWJsZUZpbHRlcmluZzogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGNvbHVtbiBzb3J0IGV2ZW50IHdoZW4gc29ydCBpcyB0b2dnbGVkXG4gICAqL1xuICBAT3V0cHV0KCkgc29ydFRvZ2dsZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q29sdW1uU29ydEV2ZW50PigpO1xuXG4gIC8qKlxuICAgKiBFbWl0cyBmaWx0ZXIgY2hhbmdlcyAoZnV0dXJlIGZlYXR1cmUpXG4gICAqL1xuICBAT3V0cHV0KCkgZmlsdGVyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxDb2x1bW5GaWx0ZXJFdmVudD4oKTtcblxuICAvKipcbiAgICogRW1pdHMgd2hlbiBjb2x1bW4gaXMgbW92ZWQgbGVmdCBvciByaWdodFxuICAgKi9cbiAgQE91dHB1dCgpIGNvbHVtbk1vdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxDb2x1bW5Nb3ZlRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIHdoZW4gY29sdW1uIG1lbnUgYnV0dG9uIGlzIGNsaWNrZWRcbiAgICovXG4gIEBPdXRwdXQoKSBtZW51Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIENsZWFudXAgb24gZGVzdHJveVxuICAgKi9cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgLy8gTm8gY2xlYW51cCBuZWVkZWQgLSByZXNpemUgaXMgbm93IGhhbmRsZWQgYnkgZGlyZWN0aXZlXG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGNvbHVtbiBtZW51IGJ1dHRvbiBjbGlja1xuICAgKi9cbiAgb25NZW51Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMubWVudUNsaWNrLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGNvbHVtbiBtZW51IHNob3VsZCBiZSBzaG93blxuICAgKi9cbiAgaXNNZW51RW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW4uZW5hYmxlTWVudSAhPT0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgY29sdW1uIGlzIHNvcnRhYmxlXG4gICAqL1xuICBpc1NvcnRhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbi5zb3J0YWJsZSAhPT0gZmFsc2UgJiYgdGhpcy5lbmFibGVTb3J0aW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjdXJyZW50IHNvcnQgZGlyZWN0aW9uXG4gICAqL1xuICBnZXRTb3J0RGlyZWN0aW9uKCk6IFNvcnREaXJlY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbi5zb3J0RGlyZWN0aW9uIHx8IFNvcnREaXJlY3Rpb24uTk9ORTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBjb2x1bW4gaXMgY3VycmVudGx5IHNvcnRlZFxuICAgKi9cbiAgaXNTb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uLnNvcnRFbmFibGVkIHx8IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBBUklBIHNvcnQgYXR0cmlidXRlIGZvciBhY2Nlc3NpYmlsaXR5XG4gICAqL1xuICBnZXRBcmlhU29ydCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuaXNTb3J0YWJsZSgpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBkaXIgPSB0aGlzLmdldFNvcnREaXJlY3Rpb24oKTtcbiAgICBpZiAoZGlyID09PSBTb3J0RGlyZWN0aW9uLkFTQykge1xuICAgICAgcmV0dXJuICdhc2NlbmRpbmcnO1xuICAgIH1cbiAgICBpZiAoZGlyID09PSBTb3J0RGlyZWN0aW9uLkRFU0MpIHtcbiAgICAgIHJldHVybiAnZGVzY2VuZGluZyc7XG4gICAgfVxuICAgIHJldHVybiAnbm9uZSc7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIG1vdmUgbGVmdCBhY3Rpb25cbiAgICovXG4gIG9uTW92ZUxlZnQoKTogdm9pZCB7XG4gICAgY29uc3QgbW92ZUV2ZW50OiBDb2x1bW5Nb3ZlRXZlbnQgPSB7XG4gICAgICBjb2x1bW5LZXk6IHRoaXMuY29sdW1uLmtleSxcbiAgICAgIGRpcmVjdGlvbjogJ2xlZnQnLFxuICAgICAgb2xkSW5kZXg6IHRoaXMuY29sdW1uSW5kZXgsXG4gICAgICBuZXdJbmRleDogdGhpcy5jb2x1bW5JbmRleCAtIDEsXG4gICAgICBjb2x1bW46IHRoaXMuY29sdW1uXG4gICAgfTtcbiAgICB0aGlzLmNvbHVtbk1vdmVkLmVtaXQobW92ZUV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgbW92ZSByaWdodCBhY3Rpb25cbiAgICovXG4gIG9uTW92ZVJpZ2h0KCk6IHZvaWQge1xuICAgIGNvbnN0IG1vdmVFdmVudDogQ29sdW1uTW92ZUV2ZW50ID0ge1xuICAgICAgY29sdW1uS2V5OiB0aGlzLmNvbHVtbi5rZXksXG4gICAgICBkaXJlY3Rpb246ICdyaWdodCcsXG4gICAgICBvbGRJbmRleDogdGhpcy5jb2x1bW5JbmRleCxcbiAgICAgIG5ld0luZGV4OiB0aGlzLmNvbHVtbkluZGV4ICsgMSxcbiAgICAgIGNvbHVtbjogdGhpcy5jb2x1bW5cbiAgICB9O1xuICAgIHRoaXMuY29sdW1uTW92ZWQuZW1pdChtb3ZlRXZlbnQpO1xuICB9XG59XG5cbiIsIjxkaXYgY2xhc3M9XCJzdC1oZWFkZXJcIiBbY2xhc3Muc29ydGFibGVdPVwiaXNTb3J0YWJsZSgpXCIgW2NsYXNzLnNvcnRlZF09XCJpc1NvcnRlZCgpXCIgW2F0dHIuYXJpYS1zb3J0XT1cImdldEFyaWFTb3J0KClcIj5cbiAgPGRpdiBjbGFzcz1cImhlYWRlci1jb250ZW50XCI+XG4gICAgPHNwYW4gY2xhc3M9XCJoZWFkZXItdGV4dFwiPnt7IGNvbHVtbi5oZWFkZXIgfHwgY29sdW1uLmtleSB9fTwvc3Bhbj5cbiAgICA8YnV0dG9uICpuZ0lmPVwiaXNNZW51RW5hYmxlZCgpXCIgXG4gICAgICAgICAgICBjbGFzcz1cImNvbHVtbi1tZW51LXRyaWdnZXJcIiBcbiAgICAgICAgICAgIChjbGljayk9XCJvbk1lbnVDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJDb2x1bW4gYWN0aW9uc1wiPlxuICAgICAgPG5pbGUtaWNvbiBuYW1lPVwib3B0aW9uc1wiPjwvbmlsZS1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==