@aquera/ngx-smart-table 0.0.2-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 (169) hide show
  1. package/README.md +152 -0
  2. package/aquera-ngx-smart-table.d.ts +5 -0
  3. package/esm2020/aquera-ngx-smart-table.mjs +5 -0
  4. package/esm2020/lib/builder/components/builder-preview/builder-preview.component.mjs +63 -0
  5. package/esm2020/lib/builder/components/builder-toolbar/builder-toolbar.component.mjs +115 -0
  6. package/esm2020/lib/builder/components/column-editor/column-editor.component.mjs +206 -0
  7. package/esm2020/lib/builder/components/column-list/column-list.component.mjs +125 -0
  8. package/esm2020/lib/builder/components/definition-builder/definition-builder.component.mjs +105 -0
  9. package/esm2020/lib/builder/components/table-config-editor/table-config-editor.component.mjs +132 -0
  10. package/esm2020/lib/builder/definition-builder.module.mjs +70 -0
  11. package/esm2020/lib/builder/models/builder-state.interface.mjs +5 -0
  12. package/esm2020/lib/builder/services/definition-builder.service.mjs +251 -0
  13. package/esm2020/lib/builder/services/definition-export.service.mjs +167 -0
  14. package/esm2020/lib/builder/services/definition-import.service.mjs +193 -0
  15. package/esm2020/lib/builder/services/sample-data-generator.service.mjs +126 -0
  16. package/esm2020/lib/builder/utils/config-validator.util.mjs +165 -0
  17. package/esm2020/lib/builder/utils/typescript-generator.util.mjs +206 -0
  18. package/esm2020/lib/editors/index.mjs +9 -0
  19. package/esm2020/lib/editors/nile-autocomplete-editor.mjs +228 -0
  20. package/esm2020/lib/editors/nile-calendar-editor.mjs +214 -0
  21. package/esm2020/lib/editors/nile-date-picker-editor.mjs +227 -0
  22. package/esm2020/lib/editors/nile-input-editor.mjs +235 -0
  23. package/esm2020/lib/editors/nile-select-editor.mjs +317 -0
  24. package/esm2020/lib/factories/column-config.factory.mjs +231 -0
  25. package/esm2020/lib/models/autosave-config.interface.mjs +8 -0
  26. package/esm2020/lib/models/base-column-config.class.mjs +253 -0
  27. package/esm2020/lib/models/cell-strategies.interface.mjs +6 -0
  28. package/esm2020/lib/models/cell-types.mjs +147 -0
  29. package/esm2020/lib/models/column-action.interface.mjs +6 -0
  30. package/esm2020/lib/models/column-config.interface.mjs +43 -0
  31. package/esm2020/lib/models/column-config.utils.mjs +101 -0
  32. package/esm2020/lib/models/row-action.interface.mjs +5 -0
  33. package/esm2020/lib/models/row-validator.interface.mjs +2 -0
  34. package/esm2020/lib/models/schema-validation.interface.mjs +2 -0
  35. package/esm2020/lib/models/sheet-action.interface.mjs +5 -0
  36. package/esm2020/lib/models/sheet-config.interface.mjs +5 -0
  37. package/esm2020/lib/models/table-config.interface.mjs +106 -0
  38. package/esm2020/lib/models/table-validator.interface.mjs +2 -0
  39. package/esm2020/lib/models/workbook-action.interface.mjs +5 -0
  40. package/esm2020/lib/models/workbook-config.interface.mjs +5 -0
  41. package/esm2020/lib/renderer/components/st-add-column-button/st-add-column-button.component.mjs +24 -0
  42. package/esm2020/lib/renderer/components/st-cell/st-cell.component.mjs +391 -0
  43. package/esm2020/lib/renderer/components/st-column-editor-modal/st-column-editor-modal.component.mjs +103 -0
  44. package/esm2020/lib/renderer/components/st-column-filter/st-column-filter.component.mjs +383 -0
  45. package/esm2020/lib/renderer/components/st-column-menu/st-column-menu.component.mjs +232 -0
  46. package/esm2020/lib/renderer/components/st-column-visibility/st-column-visibility.component.mjs +97 -0
  47. package/esm2020/lib/renderer/components/st-header/st-header.component.mjs +157 -0
  48. package/esm2020/lib/renderer/components/st-pagination/st-pagination.component.mjs +87 -0
  49. package/esm2020/lib/renderer/components/st-row-actions-dropdown/st-row-actions-dropdown.component.mjs +167 -0
  50. package/esm2020/lib/renderer/components/st-sheet/st-sheet.component.mjs +165 -0
  51. package/esm2020/lib/renderer/components/st-sheet-actions/st-sheet-actions.component.mjs +112 -0
  52. package/esm2020/lib/renderer/components/st-table/st-table.component.mjs +1246 -0
  53. package/esm2020/lib/renderer/components/st-table-actions/st-table-actions.component.mjs +171 -0
  54. package/esm2020/lib/renderer/components/st-workbook/st-workbook.component.mjs +489 -0
  55. package/esm2020/lib/renderer/directives/click-outside.directive.mjs +28 -0
  56. package/esm2020/lib/renderer/directives/st-column-resize.directive.mjs +108 -0
  57. package/esm2020/lib/renderer/directives/st-keyboard-navigation.directive.mjs +73 -0
  58. package/esm2020/lib/renderer/models/cell-state.interface.mjs +66 -0
  59. package/esm2020/lib/renderer/models/cell.class.mjs +389 -0
  60. package/esm2020/lib/renderer/models/row-validation-state.interface.mjs +7 -0
  61. package/esm2020/lib/renderer/models/sheet-state.class.mjs +90 -0
  62. package/esm2020/lib/renderer/models/sheet-state.interface.mjs +5 -0
  63. package/esm2020/lib/renderer/models/table-state.class.mjs +841 -0
  64. package/esm2020/lib/renderer/models/table-state.interface.mjs +5 -0
  65. package/esm2020/lib/renderer/models/table-types.mjs +29 -0
  66. package/esm2020/lib/renderer/models/table-validation-state.interface.mjs +7 -0
  67. package/esm2020/lib/renderer/models/workbook-state.class.mjs +174 -0
  68. package/esm2020/lib/renderer/models/workbook-state.interface.mjs +5 -0
  69. package/esm2020/lib/renderer/models/z-index.enum.mjs +55 -0
  70. package/esm2020/lib/schemas/table-config.schema.mjs +472 -0
  71. package/esm2020/lib/services/autosave.service.mjs +92 -0
  72. package/esm2020/lib/services/custom-validation-rules.util.mjs +124 -0
  73. package/esm2020/lib/services/json-schema-validator.service.mjs +216 -0
  74. package/esm2020/lib/services/row-validation.service.mjs +42 -0
  75. package/esm2020/lib/services/validation-logger.service.mjs +177 -0
  76. package/esm2020/lib/services/virtual-scroll.service.mjs +52 -0
  77. package/esm2020/lib/shared/shared-table-components.module.mjs +35 -0
  78. package/esm2020/lib/smart-table.module.mjs +124 -0
  79. package/esm2020/lib/strategies/default-editors.mjs +433 -0
  80. package/esm2020/lib/strategies/default-formatters.mjs +238 -0
  81. package/esm2020/lib/strategies/default-validators.mjs +327 -0
  82. package/esm2020/public-api.mjs +146 -0
  83. package/fesm2015/aquera-ngx-smart-table.mjs +11860 -0
  84. package/fesm2015/aquera-ngx-smart-table.mjs.map +1 -0
  85. package/fesm2020/aquera-ngx-smart-table.mjs +11897 -0
  86. package/fesm2020/aquera-ngx-smart-table.mjs.map +1 -0
  87. package/lib/builder/components/builder-preview/builder-preview.component.d.ts +31 -0
  88. package/lib/builder/components/builder-toolbar/builder-toolbar.component.d.ts +53 -0
  89. package/lib/builder/components/column-editor/column-editor.component.d.ts +69 -0
  90. package/lib/builder/components/column-list/column-list.component.d.ts +65 -0
  91. package/lib/builder/components/definition-builder/definition-builder.component.d.ts +58 -0
  92. package/lib/builder/components/table-config-editor/table-config-editor.component.d.ts +32 -0
  93. package/lib/builder/definition-builder.module.d.ts +15 -0
  94. package/lib/builder/models/builder-state.interface.d.ts +93 -0
  95. package/lib/builder/services/definition-builder.service.d.ts +80 -0
  96. package/lib/builder/services/definition-export.service.d.ts +59 -0
  97. package/lib/builder/services/definition-import.service.d.ts +31 -0
  98. package/lib/builder/services/sample-data-generator.service.d.ts +41 -0
  99. package/lib/builder/utils/config-validator.util.d.ts +32 -0
  100. package/lib/builder/utils/typescript-generator.util.d.ts +29 -0
  101. package/lib/editors/index.d.ts +8 -0
  102. package/lib/editors/nile-autocomplete-editor.d.ts +102 -0
  103. package/lib/editors/nile-calendar-editor.d.ts +89 -0
  104. package/lib/editors/nile-date-picker-editor.d.ts +95 -0
  105. package/lib/editors/nile-input-editor.d.ts +67 -0
  106. package/lib/editors/nile-select-editor.d.ts +109 -0
  107. package/lib/factories/column-config.factory.d.ts +73 -0
  108. package/lib/models/autosave-config.interface.d.ts +23 -0
  109. package/lib/models/base-column-config.class.d.ts +115 -0
  110. package/lib/models/cell-strategies.interface.d.ts +181 -0
  111. package/lib/models/cell-types.d.ts +337 -0
  112. package/lib/models/column-action.interface.d.ts +86 -0
  113. package/lib/models/column-config.interface.d.ts +272 -0
  114. package/lib/models/column-config.utils.d.ts +37 -0
  115. package/lib/models/row-action.interface.d.ts +86 -0
  116. package/lib/models/row-validator.interface.d.ts +37 -0
  117. package/lib/models/schema-validation.interface.d.ts +42 -0
  118. package/lib/models/sheet-action.interface.d.ts +59 -0
  119. package/lib/models/sheet-config.interface.d.ts +41 -0
  120. package/lib/models/table-config.interface.d.ts +245 -0
  121. package/lib/models/table-validator.interface.d.ts +40 -0
  122. package/lib/models/workbook-action.interface.d.ts +90 -0
  123. package/lib/models/workbook-config.interface.d.ts +107 -0
  124. package/lib/renderer/components/st-add-column-button/st-add-column-button.component.d.ts +9 -0
  125. package/lib/renderer/components/st-cell/st-cell.component.d.ts +69 -0
  126. package/lib/renderer/components/st-column-editor-modal/st-column-editor-modal.component.d.ts +39 -0
  127. package/lib/renderer/components/st-column-filter/st-column-filter.component.d.ts +139 -0
  128. package/lib/renderer/components/st-column-menu/st-column-menu.component.d.ts +81 -0
  129. package/lib/renderer/components/st-column-visibility/st-column-visibility.component.d.ts +44 -0
  130. package/lib/renderer/components/st-header/st-header.component.d.ts +93 -0
  131. package/lib/renderer/components/st-pagination/st-pagination.component.d.ts +42 -0
  132. package/lib/renderer/components/st-row-actions-dropdown/st-row-actions-dropdown.component.d.ts +67 -0
  133. package/lib/renderer/components/st-sheet/st-sheet.component.d.ts +98 -0
  134. package/lib/renderer/components/st-sheet-actions/st-sheet-actions.component.d.ts +58 -0
  135. package/lib/renderer/components/st-table/st-table.component.d.ts +349 -0
  136. package/lib/renderer/components/st-table-actions/st-table-actions.component.d.ts +77 -0
  137. package/lib/renderer/components/st-workbook/st-workbook.component.d.ts +235 -0
  138. package/lib/renderer/directives/click-outside.directive.d.ts +10 -0
  139. package/lib/renderer/directives/st-column-resize.directive.d.ts +44 -0
  140. package/lib/renderer/directives/st-keyboard-navigation.directive.d.ts +15 -0
  141. package/lib/renderer/models/cell-state.interface.d.ts +118 -0
  142. package/lib/renderer/models/cell.class.d.ts +174 -0
  143. package/lib/renderer/models/row-validation-state.interface.d.ts +27 -0
  144. package/lib/renderer/models/sheet-state.class.d.ts +67 -0
  145. package/lib/renderer/models/sheet-state.interface.d.ts +55 -0
  146. package/lib/renderer/models/table-state.class.d.ts +313 -0
  147. package/lib/renderer/models/table-state.interface.d.ts +18 -0
  148. package/lib/renderer/models/table-types.d.ts +228 -0
  149. package/lib/renderer/models/table-validation-state.interface.d.ts +34 -0
  150. package/lib/renderer/models/workbook-state.class.d.ts +117 -0
  151. package/lib/renderer/models/workbook-state.interface.d.ts +71 -0
  152. package/lib/renderer/models/z-index.enum.d.ts +44 -0
  153. package/lib/schemas/table-config.schema.d.ts +455 -0
  154. package/lib/services/autosave.service.d.ts +73 -0
  155. package/lib/services/custom-validation-rules.util.d.ts +12 -0
  156. package/lib/services/json-schema-validator.service.d.ts +49 -0
  157. package/lib/services/row-validation.service.d.ts +17 -0
  158. package/lib/services/validation-logger.service.d.ts +87 -0
  159. package/lib/services/virtual-scroll.service.d.ts +44 -0
  160. package/lib/shared/shared-table-components.module.d.ts +9 -0
  161. package/lib/smart-table.module.d.ts +26 -0
  162. package/lib/strategies/default-editors.d.ts +109 -0
  163. package/lib/strategies/default-formatters.d.ts +116 -0
  164. package/lib/strategies/default-validators.d.ts +113 -0
  165. package/package.json +42 -0
  166. package/public-api.d.ts +70 -0
  167. package/src/lib/builder/README.md +30 -0
  168. package/src/lib/editors/README.md +303 -0
  169. package/src/lib/renderer/components/st-column-filter/README.md +286 -0
@@ -0,0 +1,472 @@
1
+ /**
2
+ * TableConfig JSON Schema
3
+ * Exported as TypeScript constant for use in validation service
4
+ */
5
+ export const tableConfigSchema = {
6
+ "$schema": "http://json-schema.org/draft-07/schema#",
7
+ "$id": "https://ngx-smart-table.schema/table-config.json",
8
+ "title": "Smart Table Configuration Schema",
9
+ "description": "JSON Schema for Smart Table TableConfig",
10
+ "type": "object",
11
+ "required": ["columns"],
12
+ "properties": {
13
+ "columns": {
14
+ "type": "array",
15
+ "minItems": 1,
16
+ "description": "Array of column definitions",
17
+ "items": {
18
+ "$ref": "#/definitions/ColumnConfig"
19
+ }
20
+ },
21
+ "pagination": {
22
+ "$ref": "#/definitions/PaginationConfig"
23
+ },
24
+ "sorting": {
25
+ "$ref": "#/definitions/SortingConfig"
26
+ },
27
+ "filtering": {
28
+ "$ref": "#/definitions/FilteringConfig"
29
+ },
30
+ "selection": {
31
+ "$ref": "#/definitions/SelectionConfig"
32
+ },
33
+ "display": {
34
+ "$ref": "#/definitions/DisplayConfig"
35
+ },
36
+ "initialState": {
37
+ "$ref": "#/definitions/InitialStateConfig"
38
+ },
39
+ "features": {
40
+ "$ref": "#/definitions/FeaturesConfig"
41
+ }
42
+ },
43
+ "definitions": {
44
+ "ColumnConfig": {
45
+ "type": "object",
46
+ "required": ["key", "header", "dataType"],
47
+ "properties": {
48
+ "key": {
49
+ "type": "string",
50
+ "pattern": "^[a-zA-Z_$][a-zA-Z0-9_$]*$",
51
+ "description": "Unique identifier for the column (must be a valid identifier)"
52
+ },
53
+ "header": {
54
+ "type": "string",
55
+ "description": "Display header text for the column"
56
+ },
57
+ "dataType": {
58
+ "type": "string",
59
+ "enum": ["string", "number", "boolean", "date", "custom"],
60
+ "description": "Data type of the column values"
61
+ },
62
+ "editable": {
63
+ "type": "boolean",
64
+ "description": "Whether cells in this column are editable"
65
+ },
66
+ "editMode": {
67
+ "type": "string",
68
+ "enum": ["click", "manual", "none"],
69
+ "description": "Edit mode trigger"
70
+ },
71
+ "sortable": {
72
+ "type": "boolean",
73
+ "description": "Whether this column is sortable"
74
+ },
75
+ "filterable": {
76
+ "type": "boolean",
77
+ "description": "Whether this column is filterable"
78
+ },
79
+ "hideable": {
80
+ "type": "boolean",
81
+ "description": "Whether this column's visibility can be toggled by users"
82
+ },
83
+ "movable": {
84
+ "type": "boolean",
85
+ "description": "Whether this column can be moved left/right by users"
86
+ },
87
+ "pinnable": {
88
+ "type": "boolean",
89
+ "description": "Whether this column can be pinned/unpinned by users"
90
+ },
91
+ "enableMenu": {
92
+ "type": "boolean",
93
+ "description": "Whether to show the column menu dropdown for this column"
94
+ },
95
+ "resizable": {
96
+ "type": "boolean",
97
+ "description": "Whether this column is resizable"
98
+ },
99
+ "width": {
100
+ "oneOf": [
101
+ {
102
+ "type": "number",
103
+ "minimum": 1
104
+ },
105
+ {
106
+ "type": "string",
107
+ "enum": ["auto"]
108
+ }
109
+ ],
110
+ "description": "Column width (px, %, or 'auto')"
111
+ },
112
+ "minWidth": {
113
+ "type": "number",
114
+ "minimum": 1,
115
+ "description": "Minimum column width (px)"
116
+ },
117
+ "maxWidth": {
118
+ "type": "number",
119
+ "minimum": 1,
120
+ "description": "Maximum column width (px)"
121
+ },
122
+ "sticky": {
123
+ "oneOf": [
124
+ {
125
+ "type": "string",
126
+ "enum": ["left", "right"]
127
+ },
128
+ {
129
+ "type": "boolean",
130
+ "const": false
131
+ }
132
+ ],
133
+ "description": "Whether this column is sticky (left or right)"
134
+ },
135
+ "showStickyShadow": {
136
+ "type": "boolean",
137
+ "description": "Whether to show shadow indicator on sticky columns"
138
+ },
139
+ "alignment": {
140
+ "type": "string",
141
+ "enum": ["left", "center", "right"],
142
+ "description": "Cell content horizontal alignment"
143
+ },
144
+ "verticalAlignment": {
145
+ "type": "string",
146
+ "enum": ["top", "middle", "bottom"],
147
+ "description": "Cell content vertical alignment"
148
+ },
149
+ "truncate": {
150
+ "type": "boolean",
151
+ "description": "Whether to truncate overflowing text"
152
+ },
153
+ "tooltip": {
154
+ "oneOf": [
155
+ {
156
+ "type": "string"
157
+ },
158
+ {
159
+ "type": "null"
160
+ }
161
+ ],
162
+ "description": "Tooltip configuration (string or function - functions not serializable)"
163
+ },
164
+ "className": {
165
+ "oneOf": [
166
+ {
167
+ "type": "string"
168
+ },
169
+ {
170
+ "type": "array",
171
+ "items": {
172
+ "type": "string"
173
+ }
174
+ },
175
+ {
176
+ "type": "null"
177
+ }
178
+ ],
179
+ "description": "CSS class name(s) for cells in this column"
180
+ },
181
+ "style": {
182
+ "type": "object",
183
+ "description": "Inline styles for cells in this column (object or function - functions not serializable)"
184
+ },
185
+ "visible": {
186
+ "type": "boolean",
187
+ "description": "Whether column is visible"
188
+ },
189
+ "pinned": {
190
+ "oneOf": [
191
+ {
192
+ "type": "string",
193
+ "enum": ["left", "right"]
194
+ },
195
+ {
196
+ "type": "boolean",
197
+ "const": false
198
+ }
199
+ ],
200
+ "description": "Whether column is pinned (left, right, or none)"
201
+ },
202
+ "sortPriority": {
203
+ "type": "number",
204
+ "description": "Sort order priority (for multi-column sort)"
205
+ },
206
+ "metadata": {
207
+ "type": "object",
208
+ "description": "Custom metadata for column"
209
+ },
210
+ "showLoadingIndicator": {
211
+ "type": "boolean",
212
+ "description": "Whether cells should show loading indicator during async operations"
213
+ },
214
+ "sortDirection": {
215
+ "type": "string",
216
+ "enum": ["none", "asc", "desc"],
217
+ "description": "Current sort direction (runtime state)"
218
+ },
219
+ "sortEnabled": {
220
+ "type": "boolean",
221
+ "description": "Whether sorting is currently active/enabled (runtime state)"
222
+ },
223
+ "filterConfig": {
224
+ "type": "object",
225
+ "properties": {
226
+ "operator": {
227
+ "type": "string",
228
+ "enum": ["equals", "contains", "startsWith", "endsWith", "gt", "lt", "gte", "lte", "between", "in"],
229
+ "description": "Filter operator"
230
+ },
231
+ "value": {
232
+ "description": "Current filter value (any type)"
233
+ },
234
+ "enabled": {
235
+ "type": "boolean",
236
+ "description": "Whether filtering is currently active/enabled"
237
+ },
238
+ "options": {
239
+ "$ref": "#/definitions/FilterOptions",
240
+ "description": "Custom filter options for dropdown-based filtering"
241
+ }
242
+ },
243
+ "additionalProperties": false,
244
+ "description": "Filter configuration for this column"
245
+ },
246
+ "stickyOffset": {
247
+ "type": "number",
248
+ "minimum": 0,
249
+ "description": "Calculated offset for sticky positioning (runtime state, auto-calculated)"
250
+ }
251
+ },
252
+ "additionalProperties": false
253
+ },
254
+ "PaginationConfig": {
255
+ "type": "object",
256
+ "properties": {
257
+ "enabled": {
258
+ "type": "boolean",
259
+ "description": "Enable pagination"
260
+ },
261
+ "pageSize": {
262
+ "type": "number",
263
+ "minimum": 1,
264
+ "description": "Number of items per page"
265
+ },
266
+ "pageSizeOptions": {
267
+ "type": "array",
268
+ "items": {
269
+ "type": "number",
270
+ "minimum": 1
271
+ },
272
+ "minItems": 1,
273
+ "description": "Available page size options for user selection"
274
+ },
275
+ "showPagination": {
276
+ "type": "boolean",
277
+ "description": "Show pagination UI controls"
278
+ },
279
+ "showTopControls": {
280
+ "type": "boolean",
281
+ "description": "Show pagination controls at the top of the table"
282
+ },
283
+ "showBottomControls": {
284
+ "type": "boolean",
285
+ "description": "Show pagination controls at the bottom of the table"
286
+ },
287
+ "totalItems": {
288
+ "type": "number",
289
+ "minimum": 0,
290
+ "description": "Total number of items available (for server-side pagination)"
291
+ }
292
+ },
293
+ "additionalProperties": false
294
+ },
295
+ "SortingConfig": {
296
+ "type": "object",
297
+ "properties": {
298
+ "enabled": {
299
+ "type": "boolean",
300
+ "description": "Enable sorting"
301
+ },
302
+ "multiColumn": {
303
+ "type": "boolean",
304
+ "description": "Allow sorting by multiple columns simultaneously"
305
+ },
306
+ "mode": {
307
+ "type": "string",
308
+ "enum": ["local", "server"],
309
+ "description": "Sorting mode - local (client-side) or server (API-based)"
310
+ }
311
+ },
312
+ "additionalProperties": false
313
+ },
314
+ "FilteringConfig": {
315
+ "type": "object",
316
+ "properties": {
317
+ "enabled": {
318
+ "type": "boolean",
319
+ "description": "Enable filtering"
320
+ },
321
+ "mode": {
322
+ "type": "string",
323
+ "enum": ["local", "server"],
324
+ "description": "Filtering mode - local (client-side) or server (API-based)"
325
+ }
326
+ },
327
+ "additionalProperties": false
328
+ },
329
+ "SelectionConfig": {
330
+ "type": "object",
331
+ "properties": {
332
+ "enabled": {
333
+ "type": "boolean",
334
+ "description": "Enable row selection"
335
+ },
336
+ "mode": {
337
+ "type": "string",
338
+ "enum": ["single", "multiple"],
339
+ "description": "Selection mode - single row or multiple rows"
340
+ }
341
+ },
342
+ "additionalProperties": false
343
+ },
344
+ "DisplayConfig": {
345
+ "type": "object",
346
+ "properties": {
347
+ "stickyHeader": {
348
+ "type": "boolean",
349
+ "description": "Make table header sticky on scroll"
350
+ },
351
+ "maxHeight": {
352
+ "type": "number",
353
+ "description": "Maximum height of the table in pixels"
354
+ },
355
+ "virtualScroll": {
356
+ "$ref": "#/definitions/VirtualScrollConfig"
357
+ }
358
+ },
359
+ "additionalProperties": false
360
+ },
361
+ "InitialStateConfig": {
362
+ "type": "object",
363
+ "properties": {
364
+ "page": {
365
+ "type": "number",
366
+ "minimum": 0,
367
+ "description": "Initial page number (0-indexed)"
368
+ },
369
+ "sortBy": {
370
+ "type": "array",
371
+ "items": {
372
+ "type": "object",
373
+ "required": ["key"],
374
+ "properties": {
375
+ "key": {
376
+ "type": "string",
377
+ "description": "Column key to sort by"
378
+ },
379
+ "direction": {
380
+ "type": "string",
381
+ "enum": ["none", "asc", "desc"],
382
+ "description": "Sort direction"
383
+ }
384
+ },
385
+ "additionalProperties": false
386
+ },
387
+ "description": "Initial sort configuration"
388
+ },
389
+ "filters": {
390
+ "type": "array",
391
+ "items": {
392
+ "type": "object",
393
+ "required": ["key", "operator"],
394
+ "properties": {
395
+ "key": {
396
+ "type": "string",
397
+ "description": "Column key to filter"
398
+ },
399
+ "operator": {
400
+ "type": "string",
401
+ "enum": ["equals", "contains", "startsWith", "endsWith", "gt", "lt", "gte", "lte", "between", "in"],
402
+ "description": "Filter operator"
403
+ },
404
+ "value": {
405
+ "description": "Filter value (any type)"
406
+ }
407
+ },
408
+ "additionalProperties": false
409
+ },
410
+ "description": "Initial filter configuration"
411
+ }
412
+ },
413
+ "additionalProperties": false
414
+ },
415
+ "FeaturesConfig": {
416
+ "type": "object",
417
+ "properties": {
418
+ "columnManagement": {
419
+ "type": "object",
420
+ "properties": {
421
+ "allowAdd": {
422
+ "type": "boolean",
423
+ "description": "Allow users to add new columns dynamically",
424
+ "default": false
425
+ }
426
+ },
427
+ "additionalProperties": false,
428
+ "description": "Column management features"
429
+ },
430
+ "keyboardNavigation": {
431
+ "type": "object",
432
+ "properties": {
433
+ "enabled": {
434
+ "type": "boolean",
435
+ "description": "Enable Excel-like keyboard navigation with arrow keys",
436
+ "default": false
437
+ }
438
+ },
439
+ "additionalProperties": false,
440
+ "description": "Keyboard navigation features"
441
+ }
442
+ },
443
+ "additionalProperties": false,
444
+ "description": "Features configuration for table capabilities"
445
+ },
446
+ "FilterOptions": {
447
+ "type": "object",
448
+ "required": ["data", "handler"],
449
+ "properties": {
450
+ "data": {
451
+ "type": "array",
452
+ "description": "Array of data items to display in the dropdown",
453
+ "items": {
454
+ "description": "Data item of any type"
455
+ }
456
+ },
457
+ "handler": {
458
+ "description": "Handler function to transform data items into {label, value} pairs. Type: (item: any) => {label: string, value: any}"
459
+ },
460
+ "multiselect": {
461
+ "type": "boolean",
462
+ "description": "Whether to allow multiple selections (default: false)",
463
+ "default": false
464
+ }
465
+ },
466
+ "additionalProperties": false,
467
+ "description": "Filter options configuration for custom dropdown filters"
468
+ }
469
+ },
470
+ "additionalProperties": false
471
+ };
472
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29uZmlnLnNjaGVtYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXRhYmxlL3NyYy9saWIvc2NoZW1hcy90YWJsZS1jb25maWcuc2NoZW1hLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHO0lBQy9CLFNBQVMsRUFBRSx5Q0FBeUM7SUFDcEQsS0FBSyxFQUFFLGtEQUFrRDtJQUN6RCxPQUFPLEVBQUUsa0NBQWtDO0lBQzNDLGFBQWEsRUFBRSx5Q0FBeUM7SUFDeEQsTUFBTSxFQUFFLFFBQVE7SUFDaEIsVUFBVSxFQUFFLENBQUMsU0FBUyxDQUFDO0lBQ3ZCLFlBQVksRUFBRTtRQUNaLFNBQVMsRUFBRTtZQUNULE1BQU0sRUFBRSxPQUFPO1lBQ2YsVUFBVSxFQUFFLENBQUM7WUFDYixhQUFhLEVBQUUsNkJBQTZCO1lBQzVDLE9BQU8sRUFBRTtnQkFDUCxNQUFNLEVBQUUsNEJBQTRCO2FBQ3JDO1NBQ0Y7UUFDRCxZQUFZLEVBQUU7WUFDWixNQUFNLEVBQUUsZ0NBQWdDO1NBQ3pDO1FBQ0QsU0FBUyxFQUFFO1lBQ1QsTUFBTSxFQUFFLDZCQUE2QjtTQUN0QztRQUNELFdBQVcsRUFBRTtZQUNYLE1BQU0sRUFBRSwrQkFBK0I7U0FDeEM7UUFDRCxXQUFXLEVBQUU7WUFDWCxNQUFNLEVBQUUsK0JBQStCO1NBQ3hDO1FBQ0QsU0FBUyxFQUFFO1lBQ1QsTUFBTSxFQUFFLDZCQUE2QjtTQUN0QztRQUNELGNBQWMsRUFBRTtZQUNkLE1BQU0sRUFBRSxrQ0FBa0M7U0FDM0M7UUFDRCxVQUFVLEVBQUU7WUFDVixNQUFNLEVBQUUsOEJBQThCO1NBQ3ZDO0tBQ0Y7SUFDRCxhQUFhLEVBQUU7UUFDYixjQUFjLEVBQUU7WUFDZCxNQUFNLEVBQUUsUUFBUTtZQUNoQixVQUFVLEVBQUUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQztZQUN6QyxZQUFZLEVBQUU7Z0JBQ1osS0FBSyxFQUFFO29CQUNMLE1BQU0sRUFBRSxRQUFRO29CQUNoQixTQUFTLEVBQUUsNEJBQTRCO29CQUN2QyxhQUFhLEVBQUUsK0RBQStEO2lCQUMvRTtnQkFDRCxRQUFRLEVBQUU7b0JBQ1IsTUFBTSxFQUFFLFFBQVE7b0JBQ2hCLGFBQWEsRUFBRSxvQ0FBb0M7aUJBQ3BEO2dCQUNELFVBQVUsRUFBRTtvQkFDVixNQUFNLEVBQUUsUUFBUTtvQkFDaEIsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQztvQkFDekQsYUFBYSxFQUFFLGdDQUFnQztpQkFDaEQ7Z0JBQ0QsVUFBVSxFQUFFO29CQUNWLE1BQU0sRUFBRSxTQUFTO29CQUNqQixhQUFhLEVBQUUsMkNBQTJDO2lCQUMzRDtnQkFDRCxVQUFVLEVBQUU7b0JBQ1YsTUFBTSxFQUFFLFFBQVE7b0JBQ2hCLE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDO29CQUNuQyxhQUFhLEVBQUUsbUJBQW1CO2lCQUNuQztnQkFDRCxVQUFVLEVBQUU7b0JBQ1YsTUFBTSxFQUFFLFNBQVM7b0JBQ2pCLGFBQWEsRUFBRSxpQ0FBaUM7aUJBQ2pEO2dCQUNELFlBQVksRUFBRTtvQkFDWixNQUFNLEVBQUUsU0FBUztvQkFDakIsYUFBYSxFQUFFLG1DQUFtQztpQkFDbkQ7Z0JBQ0QsVUFBVSxFQUFFO29CQUNWLE1BQU0sRUFBRSxTQUFTO29CQUNqQixhQUFhLEVBQUUsMERBQTBEO2lCQUMxRTtnQkFDRCxTQUFTLEVBQUU7b0JBQ1QsTUFBTSxFQUFFLFNBQVM7b0JBQ2pCLGFBQWEsRUFBRSxzREFBc0Q7aUJBQ3RFO2dCQUNELFVBQVUsRUFBRTtvQkFDVixNQUFNLEVBQUUsU0FBUztvQkFDakIsYUFBYSxFQUFFLHFEQUFxRDtpQkFDckU7Z0JBQ0QsWUFBWSxFQUFFO29CQUNaLE1BQU0sRUFBRSxTQUFTO29CQUNqQixhQUFhLEVBQUUsMERBQTBEO2lCQUMxRTtnQkFDRCxXQUFXLEVBQUU7b0JBQ1gsTUFBTSxFQUFFLFNBQVM7b0JBQ2pCLGFBQWEsRUFBRSxrQ0FBa0M7aUJBQ2xEO2dCQUNELE9BQU8sRUFBRTtvQkFDUCxPQUFPLEVBQUU7d0JBQ1A7NEJBQ0UsTUFBTSxFQUFFLFFBQVE7NEJBQ2hCLFNBQVMsRUFBRSxDQUFDO3lCQUNiO3dCQUNEOzRCQUNFLE1BQU0sRUFBRSxRQUFROzRCQUNoQixNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUM7eUJBQ2pCO3FCQUNGO29CQUNELGFBQWEsRUFBRSxpQ0FBaUM7aUJBQ2pEO2dCQUNELFVBQVUsRUFBRTtvQkFDVixNQUFNLEVBQUUsUUFBUTtvQkFDaEIsU0FBUyxFQUFFLENBQUM7b0JBQ1osYUFBYSxFQUFFLDJCQUEyQjtpQkFDM0M7Z0JBQ0QsVUFBVSxFQUFFO29CQUNWLE1BQU0sRUFBRSxRQUFRO29CQUNoQixTQUFTLEVBQUUsQ0FBQztvQkFDWixhQUFhLEVBQUUsMkJBQTJCO2lCQUMzQztnQkFDRCxRQUFRLEVBQUU7b0JBQ1IsT0FBTyxFQUFFO3dCQUNQOzRCQUNFLE1BQU0sRUFBRSxRQUFROzRCQUNoQixNQUFNLEVBQUUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDO3lCQUMxQjt3QkFDRDs0QkFDRSxNQUFNLEVBQUUsU0FBUzs0QkFDakIsT0FBTyxFQUFFLEtBQUs7eUJBQ2Y7cUJBQ0Y7b0JBQ0QsYUFBYSxFQUFFLCtDQUErQztpQkFDL0Q7Z0JBQ0Qsa0JBQWtCLEVBQUU7b0JBQ2xCLE1BQU0sRUFBRSxTQUFTO29CQUNqQixhQUFhLEVBQUUsb0RBQW9EO2lCQUNwRTtnQkFDRCxXQUFXLEVBQUU7b0JBQ1gsTUFBTSxFQUFFLFFBQVE7b0JBQ2hCLE1BQU0sRUFBRSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDO29CQUNuQyxhQUFhLEVBQUUsbUNBQW1DO2lCQUNuRDtnQkFDRCxtQkFBbUIsRUFBRTtvQkFDbkIsTUFBTSxFQUFFLFFBQVE7b0JBQ2hCLE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDO29CQUNuQyxhQUFhLEVBQUUsaUNBQWlDO2lCQUNqRDtnQkFDRCxVQUFVLEVBQUU7b0JBQ1YsTUFBTSxFQUFFLFNBQVM7b0JBQ2pCLGFBQWEsRUFBRSxzQ0FBc0M7aUJBQ3REO2dCQUNELFNBQVMsRUFBRTtvQkFDVCxPQUFPLEVBQUU7d0JBQ1A7NEJBQ0UsTUFBTSxFQUFFLFFBQVE7eUJBQ2pCO3dCQUNEOzRCQUNFLE1BQU0sRUFBRSxNQUFNO3lCQUNmO3FCQUNGO29CQUNELGFBQWEsRUFBRSx5RUFBeUU7aUJBQ3pGO2dCQUNELFdBQVcsRUFBRTtvQkFDWCxPQUFPLEVBQUU7d0JBQ1A7NEJBQ0UsTUFBTSxFQUFFLFFBQVE7eUJBQ2pCO3dCQUNEOzRCQUNFLE1BQU0sRUFBRSxPQUFPOzRCQUNmLE9BQU8sRUFBRTtnQ0FDUCxNQUFNLEVBQUUsUUFBUTs2QkFDakI7eUJBQ0Y7d0JBQ0Q7NEJBQ0UsTUFBTSxFQUFFLE1BQU07eUJBQ2Y7cUJBQ0Y7b0JBQ0QsYUFBYSxFQUFFLDRDQUE0QztpQkFDNUQ7Z0JBQ0QsT0FBTyxFQUFFO29CQUNQLE1BQU0sRUFBRSxRQUFRO29CQUNoQixhQUFhLEVBQUUsMEZBQTBGO2lCQUMxRztnQkFDRCxTQUFTLEVBQUU7b0JBQ1QsTUFBTSxFQUFFLFNBQVM7b0JBQ2pCLGFBQWEsRUFBRSwyQkFBMkI7aUJBQzNDO2dCQUNELFFBQVEsRUFBRTtvQkFDUixPQUFPLEVBQUU7d0JBQ1A7NEJBQ0UsTUFBTSxFQUFFLFFBQVE7NEJBQ2hCLE1BQU0sRUFBRSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUM7eUJBQzFCO3dCQUNEOzRCQUNFLE1BQU0sRUFBRSxTQUFTOzRCQUNqQixPQUFPLEVBQUUsS0FBSzt5QkFDZjtxQkFDRjtvQkFDRCxhQUFhLEVBQUUsaURBQWlEO2lCQUNqRTtnQkFDRCxjQUFjLEVBQUU7b0JBQ2QsTUFBTSxFQUFFLFFBQVE7b0JBQ2hCLGFBQWEsRUFBRSw2Q0FBNkM7aUJBQzdEO2dCQUNELFVBQVUsRUFBRTtvQkFDVixNQUFNLEVBQUUsUUFBUTtvQkFDaEIsYUFBYSxFQUFFLDRCQUE0QjtpQkFDNUM7Z0JBQ0Qsc0JBQXNCLEVBQUU7b0JBQ3RCLE1BQU0sRUFBRSxTQUFTO29CQUNqQixhQUFhLEVBQUUscUVBQXFFO2lCQUNyRjtnQkFDRCxlQUFlLEVBQUU7b0JBQ2YsTUFBTSxFQUFFLFFBQVE7b0JBQ2hCLE1BQU0sRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDO29CQUMvQixhQUFhLEVBQUUsd0NBQXdDO2lCQUN4RDtnQkFDRCxhQUFhLEVBQUU7b0JBQ2IsTUFBTSxFQUFFLFNBQVM7b0JBQ2pCLGFBQWEsRUFBRSw2REFBNkQ7aUJBQzdFO2dCQUNELGNBQWMsRUFBRTtvQkFDZCxNQUFNLEVBQUUsUUFBUTtvQkFDaEIsWUFBWSxFQUFFO3dCQUNaLFVBQVUsRUFBRTs0QkFDVixNQUFNLEVBQUUsUUFBUTs0QkFDaEIsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDOzRCQUNuRyxhQUFhLEVBQUUsaUJBQWlCO3lCQUNqQzt3QkFDRCxPQUFPLEVBQUU7NEJBQ1AsYUFBYSxFQUFFLGlDQUFpQzt5QkFDakQ7d0JBQ0QsU0FBUyxFQUFFOzRCQUNULE1BQU0sRUFBRSxTQUFTOzRCQUNqQixhQUFhLEVBQUUsK0NBQStDO3lCQUMvRDt3QkFDRCxTQUFTLEVBQUU7NEJBQ1QsTUFBTSxFQUFFLDZCQUE2Qjs0QkFDckMsYUFBYSxFQUFFLG9EQUFvRDt5QkFDcEU7cUJBQ0Y7b0JBQ0Qsc0JBQXNCLEVBQUUsS0FBSztvQkFDN0IsYUFBYSxFQUFFLHNDQUFzQztpQkFDdEQ7Z0JBQ0QsY0FBYyxFQUFFO29CQUNkLE1BQU0sRUFBRSxRQUFRO29CQUNoQixTQUFTLEVBQUUsQ0FBQztvQkFDWixhQUFhLEVBQUUsMkVBQTJFO2lCQUMzRjthQUNGO1lBQ0Qsc0JBQXNCLEVBQUUsS0FBSztTQUM5QjtRQUNELGtCQUFrQixFQUFFO1lBQ2xCLE1BQU0sRUFBRSxRQUFRO1lBQ2hCLFlBQVksRUFBRTtnQkFDWixTQUFTLEVBQUU7b0JBQ1QsTUFBTSxFQUFFLFNBQVM7b0JBQ2pCLGFBQWEsRUFBRSxtQkFBbUI7aUJBQ25DO2dCQUNELFVBQVUsRUFBRTtvQkFDVixNQUFNLEVBQUUsUUFBUTtvQkFDaEIsU0FBUyxFQUFFLENBQUM7b0JBQ1osYUFBYSxFQUFFLDBCQUEwQjtpQkFDMUM7Z0JBQ0QsaUJBQWlCLEVBQUU7b0JBQ2pCLE1BQU0sRUFBRSxPQUFPO29CQUNmLE9BQU8sRUFBRTt3QkFDUCxNQUFNLEVBQUUsUUFBUTt3QkFDaEIsU0FBUyxFQUFFLENBQUM7cUJBQ2I7b0JBQ0QsVUFBVSxFQUFFLENBQUM7b0JBQ2IsYUFBYSxFQUFFLGdEQUFnRDtpQkFDaEU7Z0JBQ0QsZ0JBQWdCLEVBQUU7b0JBQ2hCLE1BQU0sRUFBRSxTQUFTO29CQUNqQixhQUFhLEVBQUUsNkJBQTZCO2lCQUM3QztnQkFDRCxpQkFBaUIsRUFBRTtvQkFDakIsTUFBTSxFQUFFLFNBQVM7b0JBQ2pCLGFBQWEsRUFBRSxrREFBa0Q7aUJBQ2xFO2dCQUNELG9CQUFvQixFQUFFO29CQUNwQixNQUFNLEVBQUUsU0FBUztvQkFDakIsYUFBYSxFQUFFLHFEQUFxRDtpQkFDckU7Z0JBQ0QsWUFBWSxFQUFFO29CQUNaLE1BQU0sRUFBRSxRQUFRO29CQUNoQixTQUFTLEVBQUUsQ0FBQztvQkFDWixhQUFhLEVBQUUsOERBQThEO2lCQUM5RTthQUNGO1lBQ0Qsc0JBQXNCLEVBQUUsS0FBSztTQUM5QjtRQUNELGVBQWUsRUFBRTtZQUNmLE1BQU0sRUFBRSxRQUFRO1lBQ2hCLFlBQVksRUFBRTtnQkFDWixTQUFTLEVBQUU7b0JBQ1QsTUFBTSxFQUFFLFNBQVM7b0JBQ2pCLGFBQWEsRUFBRSxnQkFBZ0I7aUJBQ2hDO2dCQUNELGFBQWEsRUFBRTtvQkFDYixNQUFNLEVBQUUsU0FBUztvQkFDakIsYUFBYSxFQUFFLGtEQUFrRDtpQkFDbEU7Z0JBQ0QsTUFBTSxFQUFFO29CQUNOLE1BQU0sRUFBRSxRQUFRO29CQUNoQixNQUFNLEVBQUUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDO29CQUMzQixhQUFhLEVBQUUsMERBQTBEO2lCQUMxRTthQUNGO1lBQ0Qsc0JBQXNCLEVBQUUsS0FBSztTQUM5QjtRQUNELGlCQUFpQixFQUFFO1lBQ2pCLE1BQU0sRUFBRSxRQUFRO1lBQ2hCLFlBQVksRUFBRTtnQkFDWixTQUFTLEVBQUU7b0JBQ1QsTUFBTSxFQUFFLFNBQVM7b0JBQ2pCLGFBQWEsRUFBRSxrQkFBa0I7aUJBQ2xDO2dCQUNELE1BQU0sRUFBRTtvQkFDTixNQUFNLEVBQUUsUUFBUTtvQkFDaEIsTUFBTSxFQUFFLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQztvQkFDM0IsYUFBYSxFQUFFLDREQUE0RDtpQkFDNUU7YUFDRjtZQUNELHNCQUFzQixFQUFFLEtBQUs7U0FDOUI7UUFDRCxpQkFBaUIsRUFBRTtZQUNqQixNQUFNLEVBQUUsUUFBUTtZQUNoQixZQUFZLEVBQUU7Z0JBQ1osU0FBUyxFQUFFO29CQUNULE1BQU0sRUFBRSxTQUFTO29CQUNqQixhQUFhLEVBQUUsc0JBQXNCO2lCQUN0QztnQkFDRCxNQUFNLEVBQUU7b0JBQ04sTUFBTSxFQUFFLFFBQVE7b0JBQ2hCLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUM7b0JBQzlCLGFBQWEsRUFBRSw4Q0FBOEM7aUJBQzlEO2FBQ0Y7WUFDRCxzQkFBc0IsRUFBRSxLQUFLO1NBQzlCO1FBQ0QsZUFBZSxFQUFFO1lBQ2YsTUFBTSxFQUFFLFFBQVE7WUFDaEIsWUFBWSxFQUFFO2dCQUNaLGNBQWMsRUFBRTtvQkFDZCxNQUFNLEVBQUUsU0FBUztvQkFDakIsYUFBYSxFQUFFLG9DQUFvQztpQkFDcEQ7Z0JBQ0QsV0FBVyxFQUFFO29CQUNYLE1BQU0sRUFBRSxRQUFRO29CQUNoQixhQUFhLEVBQUUsdUNBQXVDO2lCQUN2RDtnQkFDRCxlQUFlLEVBQUU7b0JBQ2YsTUFBTSxFQUFFLG1DQUFtQztpQkFDNUM7YUFDRjtZQUNELHNCQUFzQixFQUFFLEtBQUs7U0FDOUI7UUFDRCxvQkFBb0IsRUFBRTtZQUNwQixNQUFNLEVBQUUsUUFBUTtZQUNoQixZQUFZLEVBQUU7Z0JBQ1osTUFBTSxFQUFFO29CQUNOLE1BQU0sRUFBRSxRQUFRO29CQUNoQixTQUFTLEVBQUUsQ0FBQztvQkFDWixhQUFhLEVBQUUsaUNBQWlDO2lCQUNqRDtnQkFDRCxRQUFRLEVBQUU7b0JBQ1IsTUFBTSxFQUFFLE9BQU87b0JBQ2YsT0FBTyxFQUFFO3dCQUNQLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUM7d0JBQ25CLFlBQVksRUFBRTs0QkFDWixLQUFLLEVBQUU7Z0NBQ0wsTUFBTSxFQUFFLFFBQVE7Z0NBQ2hCLGFBQWEsRUFBRSx1QkFBdUI7NkJBQ3ZDOzRCQUNELFdBQVcsRUFBRTtnQ0FDWCxNQUFNLEVBQUUsUUFBUTtnQ0FDaEIsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUM7Z0NBQy9CLGFBQWEsRUFBRSxnQkFBZ0I7NkJBQ2hDO3lCQUNGO3dCQUNELHNCQUFzQixFQUFFLEtBQUs7cUJBQzlCO29CQUNELGFBQWEsRUFBRSw0QkFBNEI7aUJBQzVDO2dCQUNELFNBQVMsRUFBRTtvQkFDVCxNQUFNLEVBQUUsT0FBTztvQkFDZixPQUFPLEVBQUU7d0JBQ1AsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLFVBQVUsRUFBRSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUM7d0JBQy9CLFlBQVksRUFBRTs0QkFDWixLQUFLLEVBQUU7Z0NBQ0wsTUFBTSxFQUFFLFFBQVE7Z0NBQ2hCLGFBQWEsRUFBRSxzQkFBc0I7NkJBQ3RDOzRCQUNELFVBQVUsRUFBRTtnQ0FDVixNQUFNLEVBQUUsUUFBUTtnQ0FDaEIsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDO2dDQUNuRyxhQUFhLEVBQUUsaUJBQWlCOzZCQUNqQzs0QkFDRCxPQUFPLEVBQUU7Z0NBQ1AsYUFBYSxFQUFFLHlCQUF5Qjs2QkFDekM7eUJBQ0Y7d0JBQ0Qsc0JBQXNCLEVBQUUsS0FBSztxQkFDOUI7b0JBQ0QsYUFBYSxFQUFFLDhCQUE4QjtpQkFDOUM7YUFDRjtZQUNELHNCQUFzQixFQUFFLEtBQUs7U0FDOUI7UUFDRCxnQkFBZ0IsRUFBRTtZQUNoQixNQUFNLEVBQUUsUUFBUTtZQUNoQixZQUFZLEVBQUU7Z0JBQ1osa0JBQWtCLEVBQUU7b0JBQ2xCLE1BQU0sRUFBRSxRQUFRO29CQUNoQixZQUFZLEVBQUU7d0JBQ1osVUFBVSxFQUFFOzRCQUNWLE1BQU0sRUFBRSxTQUFTOzRCQUNqQixhQUFhLEVBQUUsNENBQTRDOzRCQUMzRCxTQUFTLEVBQUUsS0FBSzt5QkFDakI7cUJBQ0Y7b0JBQ0Qsc0JBQXNCLEVBQUUsS0FBSztvQkFDN0IsYUFBYSxFQUFFLDRCQUE0QjtpQkFDNUM7Z0JBQ0Qsb0JBQW9CLEVBQUU7b0JBQ3BCLE1BQU0sRUFBRSxRQUFRO29CQUNoQixZQUFZLEVBQUU7d0JBQ1osU0FBUyxFQUFFOzRCQUNULE1BQU0sRUFBRSxTQUFTOzRCQUNqQixhQUFhLEVBQUUsdURBQXVEOzRCQUN0RSxTQUFTLEVBQUUsS0FBSzt5QkFDakI7cUJBQ0Y7b0JBQ0Qsc0JBQXNCLEVBQUUsS0FBSztvQkFDN0IsYUFBYSxFQUFFLDhCQUE4QjtpQkFDOUM7YUFDRjtZQUNELHNCQUFzQixFQUFFLEtBQUs7WUFDN0IsYUFBYSxFQUFFLCtDQUErQztTQUMvRDtRQUNELGVBQWUsRUFBRTtZQUNmLE1BQU0sRUFBRSxRQUFRO1lBQ2hCLFVBQVUsRUFBRSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUM7WUFDL0IsWUFBWSxFQUFFO2dCQUNaLE1BQU0sRUFBRTtvQkFDTixNQUFNLEVBQUUsT0FBTztvQkFDZixhQUFhLEVBQUUsZ0RBQWdEO29CQUMvRCxPQUFPLEVBQUU7d0JBQ1AsYUFBYSxFQUFFLHVCQUF1QjtxQkFDdkM7aUJBQ0Y7Z0JBQ0QsU0FBUyxFQUFFO29CQUNULGFBQWEsRUFBRSxzSEFBc0g7aUJBQ3RJO2dCQUNELGFBQWEsRUFBRTtvQkFDYixNQUFNLEVBQUUsU0FBUztvQkFDakIsYUFBYSxFQUFFLHVEQUF1RDtvQkFDdEUsU0FBUyxFQUFFLEtBQUs7aUJBQ2pCO2FBQ0Y7WUFDRCxzQkFBc0IsRUFBRSxLQUFLO1lBQzdCLGFBQWEsRUFBRSwwREFBMEQ7U0FDMUU7S0FDRjtJQUNELHNCQUFzQixFQUFFLEtBQUs7Q0FDckIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGFibGVDb25maWcgSlNPTiBTY2hlbWFcbiAqIEV4cG9ydGVkIGFzIFR5cGVTY3JpcHQgY29uc3RhbnQgZm9yIHVzZSBpbiB2YWxpZGF0aW9uIHNlcnZpY2VcbiAqL1xuXG5leHBvcnQgY29uc3QgdGFibGVDb25maWdTY2hlbWEgPSB7XG4gIFwiJHNjaGVtYVwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hI1wiLFxuICBcIiRpZFwiOiBcImh0dHBzOi8vbmd4LXNtYXJ0LXRhYmxlLnNjaGVtYS90YWJsZS1jb25maWcuanNvblwiLFxuICBcInRpdGxlXCI6IFwiU21hcnQgVGFibGUgQ29uZmlndXJhdGlvbiBTY2hlbWFcIixcbiAgXCJkZXNjcmlwdGlvblwiOiBcIkpTT04gU2NoZW1hIGZvciBTbWFydCBUYWJsZSBUYWJsZUNvbmZpZ1wiLFxuICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgXCJyZXF1aXJlZFwiOiBbXCJjb2x1bW5zXCJdLFxuICBcInByb3BlcnRpZXNcIjoge1xuICAgIFwiY29sdW1uc1wiOiB7XG4gICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgXCJtaW5JdGVtc1wiOiAxLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkFycmF5IG9mIGNvbHVtbiBkZWZpbml0aW9uc1wiLFxuICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvQ29sdW1uQ29uZmlnXCJcbiAgICAgIH1cbiAgICB9LFxuICAgIFwicGFnaW5hdGlvblwiOiB7XG4gICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL1BhZ2luYXRpb25Db25maWdcIlxuICAgIH0sXG4gICAgXCJzb3J0aW5nXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvU29ydGluZ0NvbmZpZ1wiXG4gICAgfSxcbiAgICBcImZpbHRlcmluZ1wiOiB7XG4gICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL0ZpbHRlcmluZ0NvbmZpZ1wiXG4gICAgfSxcbiAgICBcInNlbGVjdGlvblwiOiB7XG4gICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL1NlbGVjdGlvbkNvbmZpZ1wiXG4gICAgfSxcbiAgICBcImRpc3BsYXlcIjoge1xuICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9EaXNwbGF5Q29uZmlnXCJcbiAgICB9LFxuICAgIFwiaW5pdGlhbFN0YXRlXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvSW5pdGlhbFN0YXRlQ29uZmlnXCJcbiAgICB9LFxuICAgIFwiZmVhdHVyZXNcIjoge1xuICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9GZWF0dXJlc0NvbmZpZ1wiXG4gICAgfVxuICB9LFxuICBcImRlZmluaXRpb25zXCI6IHtcbiAgICBcIkNvbHVtbkNvbmZpZ1wiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1wia2V5XCIsIFwiaGVhZGVyXCIsIFwiZGF0YVR5cGVcIl0sXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcImtleVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJwYXR0ZXJuXCI6IFwiXlthLXpBLVpfJF1bYS16QS1aMC05XyRdKiRcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjb2x1bW4gKG11c3QgYmUgYSB2YWxpZCBpZGVudGlmaWVyKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaGVhZGVyXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGlzcGxheSBoZWFkZXIgdGV4dCBmb3IgdGhlIGNvbHVtblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGF0YVR5cGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZW51bVwiOiBbXCJzdHJpbmdcIiwgXCJudW1iZXJcIiwgXCJib29sZWFuXCIsIFwiZGF0ZVwiLCBcImN1c3RvbVwiXSxcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGF0YSB0eXBlIG9mIHRoZSBjb2x1bW4gdmFsdWVzXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJlZGl0YWJsZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJXaGV0aGVyIGNlbGxzIGluIHRoaXMgY29sdW1uIGFyZSBlZGl0YWJsZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZWRpdE1vZGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZW51bVwiOiBbXCJjbGlja1wiLCBcIm1hbnVhbFwiLCBcIm5vbmVcIl0sXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkVkaXQgbW9kZSB0cmlnZ2VyXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJzb3J0YWJsZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJXaGV0aGVyIHRoaXMgY29sdW1uIGlzIHNvcnRhYmxlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJmaWx0ZXJhYmxlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIldoZXRoZXIgdGhpcyBjb2x1bW4gaXMgZmlsdGVyYWJsZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaGlkZWFibGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiV2hldGhlciB0aGlzIGNvbHVtbidzIHZpc2liaWxpdHkgY2FuIGJlIHRvZ2dsZWQgYnkgdXNlcnNcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1vdmFibGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiV2hldGhlciB0aGlzIGNvbHVtbiBjYW4gYmUgbW92ZWQgbGVmdC9yaWdodCBieSB1c2Vyc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwicGlubmFibGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiV2hldGhlciB0aGlzIGNvbHVtbiBjYW4gYmUgcGlubmVkL3VucGlubmVkIGJ5IHVzZXJzXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJlbmFibGVNZW51XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIldoZXRoZXIgdG8gc2hvdyB0aGUgY29sdW1uIG1lbnUgZHJvcGRvd24gZm9yIHRoaXMgY29sdW1uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJyZXNpemFibGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiV2hldGhlciB0aGlzIGNvbHVtbiBpcyByZXNpemFibGVcIlxuICAgICAgICB9LFxuICAgICAgICBcIndpZHRoXCI6IHtcbiAgICAgICAgICBcIm9uZU9mXCI6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgIFwibWluaW11bVwiOiAxXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJlbnVtXCI6IFtcImF1dG9cIl1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJDb2x1bW4gd2lkdGggKHB4LCAlLCBvciAnYXV0bycpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5XaWR0aFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwibnVtYmVyXCIsXG4gICAgICAgICAgXCJtaW5pbXVtXCI6IDEsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk1pbmltdW0gY29sdW1uIHdpZHRoIChweClcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1heFdpZHRoXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJudW1iZXJcIixcbiAgICAgICAgICBcIm1pbmltdW1cIjogMSxcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTWF4aW11bSBjb2x1bW4gd2lkdGggKHB4KVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic3RpY2t5XCI6IHtcbiAgICAgICAgICBcIm9uZU9mXCI6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZW51bVwiOiBbXCJsZWZ0XCIsIFwicmlnaHRcIl1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgICAgXCJjb25zdFwiOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIldoZXRoZXIgdGhpcyBjb2x1bW4gaXMgc3RpY2t5IChsZWZ0IG9yIHJpZ2h0KVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic2hvd1N0aWNreVNoYWRvd1wiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJXaGV0aGVyIHRvIHNob3cgc2hhZG93IGluZGljYXRvciBvbiBzdGlja3kgY29sdW1uc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYWxpZ25tZW50XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImVudW1cIjogW1wibGVmdFwiLCBcImNlbnRlclwiLCBcInJpZ2h0XCJdLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJDZWxsIGNvbnRlbnQgaG9yaXpvbnRhbCBhbGlnbm1lbnRcIlxuICAgICAgICB9LFxuICAgICAgICBcInZlcnRpY2FsQWxpZ25tZW50XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImVudW1cIjogW1widG9wXCIsIFwibWlkZGxlXCIsIFwiYm90dG9tXCJdLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJDZWxsIGNvbnRlbnQgdmVydGljYWwgYWxpZ25tZW50XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ0cnVuY2F0ZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJXaGV0aGVyIHRvIHRydW5jYXRlIG92ZXJmbG93aW5nIHRleHRcIlxuICAgICAgICB9LFxuICAgICAgICBcInRvb2x0aXBcIjoge1xuICAgICAgICAgIFwib25lT2ZcIjogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwibnVsbFwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVG9vbHRpcCBjb25maWd1cmF0aW9uIChzdHJpbmcgb3IgZnVuY3Rpb24gLSBmdW5jdGlvbnMgbm90IHNlcmlhbGl6YWJsZSlcIlxuICAgICAgICB9LFxuICAgICAgICBcImNsYXNzTmFtZVwiOiB7XG4gICAgICAgICAgXCJvbmVPZlwiOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJudWxsXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJDU1MgY2xhc3MgbmFtZShzKSBmb3IgY2VsbHMgaW4gdGhpcyBjb2x1bW5cIlxuICAgICAgICB9LFxuICAgICAgICBcInN0eWxlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSW5saW5lIHN0eWxlcyBmb3IgY2VsbHMgaW4gdGhpcyBjb2x1bW4gKG9iamVjdCBvciBmdW5jdGlvbiAtIGZ1bmN0aW9ucyBub3Qgc2VyaWFsaXphYmxlKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmlzaWJsZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJXaGV0aGVyIGNvbHVtbiBpcyB2aXNpYmxlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwaW5uZWRcIjoge1xuICAgICAgICAgIFwib25lT2ZcIjogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgXCJlbnVtXCI6IFtcImxlZnRcIiwgXCJyaWdodFwiXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgICBcImNvbnN0XCI6IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiV2hldGhlciBjb2x1bW4gaXMgcGlubmVkIChsZWZ0LCByaWdodCwgb3Igbm9uZSlcIlxuICAgICAgICB9LFxuICAgICAgICBcInNvcnRQcmlvcml0eVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwibnVtYmVyXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlNvcnQgb3JkZXIgcHJpb3JpdHkgKGZvciBtdWx0aS1jb2x1bW4gc29ydClcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQ3VzdG9tIG1ldGFkYXRhIGZvciBjb2x1bW5cIlxuICAgICAgICB9LFxuICAgICAgICBcInNob3dMb2FkaW5nSW5kaWNhdG9yXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIldoZXRoZXIgY2VsbHMgc2hvdWxkIHNob3cgbG9hZGluZyBpbmRpY2F0b3IgZHVyaW5nIGFzeW5jIG9wZXJhdGlvbnNcIlxuICAgICAgICB9LFxuICAgICAgICBcInNvcnREaXJlY3Rpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZW51bVwiOiBbXCJub25lXCIsIFwiYXNjXCIsIFwiZGVzY1wiXSxcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQ3VycmVudCBzb3J0IGRpcmVjdGlvbiAocnVudGltZSBzdGF0ZSlcIlxuICAgICAgICB9LFxuICAgICAgICBcInNvcnRFbmFibGVkXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIldoZXRoZXIgc29ydGluZyBpcyBjdXJyZW50bHkgYWN0aXZlL2VuYWJsZWQgKHJ1bnRpbWUgc3RhdGUpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJmaWx0ZXJDb25maWdcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICBcIm9wZXJhdG9yXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIFwiZW51bVwiOiBbXCJlcXVhbHNcIiwgXCJjb250YWluc1wiLCBcInN0YXJ0c1dpdGhcIiwgXCJlbmRzV2l0aFwiLCBcImd0XCIsIFwibHRcIiwgXCJndGVcIiwgXCJsdGVcIiwgXCJiZXR3ZWVuXCIsIFwiaW5cIl0sXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJGaWx0ZXIgb3BlcmF0b3JcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwidmFsdWVcIjoge1xuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQ3VycmVudCBmaWx0ZXIgdmFsdWUgKGFueSB0eXBlKVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJlbmFibGVkXCI6IHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiV2hldGhlciBmaWx0ZXJpbmcgaXMgY3VycmVudGx5IGFjdGl2ZS9lbmFibGVkXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcIm9wdGlvbnNcIjoge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL0ZpbHRlck9wdGlvbnNcIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkN1c3RvbSBmaWx0ZXIgb3B0aW9ucyBmb3IgZHJvcGRvd24tYmFzZWQgZmlsdGVyaW5nXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2UsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkZpbHRlciBjb25maWd1cmF0aW9uIGZvciB0aGlzIGNvbHVtblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic3RpY2t5T2Zmc2V0XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJudW1iZXJcIixcbiAgICAgICAgICBcIm1pbmltdW1cIjogMCxcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQ2FsY3VsYXRlZCBvZmZzZXQgZm9yIHN0aWNreSBwb3NpdGlvbmluZyAocnVudGltZSBzdGF0ZSwgYXV0by1jYWxjdWxhdGVkKVwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IGZhbHNlXG4gICAgfSxcbiAgICBcIlBhZ2luYXRpb25Db25maWdcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcImVuYWJsZWRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRW5hYmxlIHBhZ2luYXRpb25cIlxuICAgICAgICB9LFxuICAgICAgICBcInBhZ2VTaXplXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJudW1iZXJcIixcbiAgICAgICAgICBcIm1pbmltdW1cIjogMSxcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTnVtYmVyIG9mIGl0ZW1zIHBlciBwYWdlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwYWdlU2l6ZU9wdGlvbnNcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJudW1iZXJcIixcbiAgICAgICAgICAgIFwibWluaW11bVwiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1pbkl0ZW1zXCI6IDEsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkF2YWlsYWJsZSBwYWdlIHNpemUgb3B0aW9ucyBmb3IgdXNlciBzZWxlY3Rpb25cIlxuICAgICAgICB9LFxuICAgICAgICBcInNob3dQYWdpbmF0aW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlNob3cgcGFnaW5hdGlvbiBVSSBjb250cm9sc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwic2hvd1RvcENvbnRyb2xzXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlNob3cgcGFnaW5hdGlvbiBjb250cm9scyBhdCB0aGUgdG9wIG9mIHRoZSB0YWJsZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic2hvd0JvdHRvbUNvbnRyb2xzXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlNob3cgcGFnaW5hdGlvbiBjb250cm9scyBhdCB0aGUgYm90dG9tIG9mIHRoZSB0YWJsZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidG90YWxJdGVtc1wiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwibnVtYmVyXCIsXG4gICAgICAgICAgXCJtaW5pbXVtXCI6IDAsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlRvdGFsIG51bWJlciBvZiBpdGVtcyBhdmFpbGFibGUgKGZvciBzZXJ2ZXItc2lkZSBwYWdpbmF0aW9uKVwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IGZhbHNlXG4gICAgfSxcbiAgICBcIlNvcnRpbmdDb25maWdcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcImVuYWJsZWRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRW5hYmxlIHNvcnRpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcIm11bHRpQ29sdW1uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkFsbG93IHNvcnRpbmcgYnkgbXVsdGlwbGUgY29sdW1ucyBzaW11bHRhbmVvdXNseVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibW9kZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJlbnVtXCI6IFtcImxvY2FsXCIsIFwic2VydmVyXCJdLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTb3J0aW5nIG1vZGUgLSBsb2NhbCAoY2xpZW50LXNpZGUpIG9yIHNlcnZlciAoQVBJLWJhc2VkKVwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IGZhbHNlXG4gICAgfSxcbiAgICBcIkZpbHRlcmluZ0NvbmZpZ1wiOiB7XG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiZW5hYmxlZFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJFbmFibGUgZmlsdGVyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtb2RlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImVudW1cIjogW1wibG9jYWxcIiwgXCJzZXJ2ZXJcIl0sXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkZpbHRlcmluZyBtb2RlIC0gbG9jYWwgKGNsaWVudC1zaWRlKSBvciBzZXJ2ZXIgKEFQSS1iYXNlZClcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZVxuICAgIH0sXG4gICAgXCJTZWxlY3Rpb25Db25maWdcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcImVuYWJsZWRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRW5hYmxlIHJvdyBzZWxlY3Rpb25cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1vZGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZW51bVwiOiBbXCJzaW5nbGVcIiwgXCJtdWx0aXBsZVwiXSxcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU2VsZWN0aW9uIG1vZGUgLSBzaW5nbGUgcm93IG9yIG11bHRpcGxlIHJvd3NcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZVxuICAgIH0sXG4gICAgXCJEaXNwbGF5Q29uZmlnXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJzdGlja3lIZWFkZXJcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTWFrZSB0YWJsZSBoZWFkZXIgc3RpY2t5IG9uIHNjcm9sbFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4SGVpZ2h0XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJudW1iZXJcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTWF4aW11bSBoZWlnaHQgb2YgdGhlIHRhYmxlIGluIHBpeGVsc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmlydHVhbFNjcm9sbFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9WaXJ0dWFsU2Nyb2xsQ29uZmlnXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2VcbiAgICB9LFxuICAgIFwiSW5pdGlhbFN0YXRlQ29uZmlnXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJwYWdlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJudW1iZXJcIixcbiAgICAgICAgICBcIm1pbmltdW1cIjogMCxcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSW5pdGlhbCBwYWdlIG51bWJlciAoMC1pbmRleGVkKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic29ydEJ5XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IFtcImtleVwiXSxcbiAgICAgICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICAgIFwia2V5XCI6IHtcbiAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQ29sdW1uIGtleSB0byBzb3J0IGJ5XCJcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXCJkaXJlY3Rpb25cIjoge1xuICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIFwiZW51bVwiOiBbXCJub25lXCIsIFwiYXNjXCIsIFwiZGVzY1wiXSxcbiAgICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU29ydCBkaXJlY3Rpb25cIlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkluaXRpYWwgc29ydCBjb25maWd1cmF0aW9uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJmaWx0ZXJzXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IFtcImtleVwiLCBcIm9wZXJhdG9yXCJdLFxuICAgICAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgXCJrZXlcIjoge1xuICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJDb2x1bW4ga2V5IHRvIGZpbHRlclwiXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFwib3BlcmF0b3JcIjoge1xuICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIFwiZW51bVwiOiBbXCJlcXVhbHNcIiwgXCJjb250YWluc1wiLCBcInN0YXJ0c1dpdGhcIiwgXCJlbmRzV2l0aFwiLCBcImd0XCIsIFwibHRcIiwgXCJndGVcIiwgXCJsdGVcIiwgXCJiZXR3ZWVuXCIsIFwiaW5cIl0sXG4gICAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkZpbHRlciBvcGVyYXRvclwiXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFwidmFsdWVcIjoge1xuICAgICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJGaWx0ZXIgdmFsdWUgKGFueSB0eXBlKVwiXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IGZhbHNlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSW5pdGlhbCBmaWx0ZXIgY29uZmlndXJhdGlvblwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IGZhbHNlXG4gICAgfSxcbiAgICBcIkZlYXR1cmVzQ29uZmlnXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJjb2x1bW5NYW5hZ2VtZW50XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgXCJhbGxvd0FkZFwiOiB7XG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkFsbG93IHVzZXJzIHRvIGFkZCBuZXcgY29sdW1ucyBkeW5hbWljYWxseVwiLFxuICAgICAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2UsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNvbHVtbiBtYW5hZ2VtZW50IGZlYXR1cmVzXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJrZXlib2FyZE5hdmlnYXRpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICBcImVuYWJsZWRcIjoge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJFbmFibGUgRXhjZWwtbGlrZSBrZXlib2FyZCBuYXZpZ2F0aW9uIHdpdGggYXJyb3cga2V5c1wiLFxuICAgICAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2UsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIktleWJvYXJkIG5hdmlnYXRpb24gZmVhdHVyZXNcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJGZWF0dXJlcyBjb25maWd1cmF0aW9uIGZvciB0YWJsZSBjYXBhYmlsaXRpZXNcIlxuICAgIH0sXG4gICAgXCJGaWx0ZXJPcHRpb25zXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXCJkYXRhXCIsIFwiaGFuZGxlclwiXSxcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiZGF0YVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQXJyYXkgb2YgZGF0YSBpdGVtcyB0byBkaXNwbGF5IGluIHRoZSBkcm9wZG93blwiLFxuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRhdGEgaXRlbSBvZiBhbnkgdHlwZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImhhbmRsZXJcIjoge1xuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJIYW5kbGVyIGZ1bmN0aW9uIHRvIHRyYW5zZm9ybSBkYXRhIGl0ZW1zIGludG8ge2xhYmVsLCB2YWx1ZX0gcGFpcnMuIFR5cGU6IChpdGVtOiBhbnkpID0+IHtsYWJlbDogc3RyaW5nLCB2YWx1ZTogYW55fVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibXVsdGlzZWxlY3RcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiV2hldGhlciB0byBhbGxvdyBtdWx0aXBsZSBzZWxlY3Rpb25zIChkZWZhdWx0OiBmYWxzZSlcIixcbiAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2UsXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRmlsdGVyIG9wdGlvbnMgY29uZmlndXJhdGlvbiBmb3IgY3VzdG9tIGRyb3Bkb3duIGZpbHRlcnNcIlxuICAgIH1cbiAgfSxcbiAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZVxufSBhcyBjb25zdDtcblxuIl19
@@ -0,0 +1,92 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * AutosaveService - In-memory autosave storage
5
+ *
6
+ * Stores autosave data in memory for workbooks.
7
+ * Data is automatically cleared when the component is destroyed or tab is closed.
8
+ */
9
+ export class AutosaveService {
10
+ constructor() {
11
+ /**
12
+ * In-memory storage for autosaved data
13
+ */
14
+ this.autosaveStore = new Map();
15
+ /**
16
+ * Track dirty state per workbook
17
+ */
18
+ this.dirtyState = new Map();
19
+ /**
20
+ * Track last save timestamp per workbook
21
+ */
22
+ this.lastSaveTime = new Map();
23
+ }
24
+ /**
25
+ * Save workbook data to memory
26
+ * @param workbookId Unique workbook identifier
27
+ * @param data Autosave data to store
28
+ */
29
+ save(workbookId, data) {
30
+ this.autosaveStore.set(workbookId, data);
31
+ this.lastSaveTime.set(workbookId, data.timestamp);
32
+ this.dirtyState.set(workbookId, false);
33
+ }
34
+ /**
35
+ * Retrieve autosaved data for a workbook
36
+ * @param workbookId Unique workbook identifier
37
+ * @returns Autosaved data or null if not found
38
+ */
39
+ get(workbookId) {
40
+ return this.autosaveStore.get(workbookId) || null;
41
+ }
42
+ /**
43
+ * Check if workbook has unsaved changes
44
+ * @param workbookId Unique workbook identifier
45
+ * @returns True if workbook has unsaved changes
46
+ */
47
+ isDirty(workbookId) {
48
+ return this.dirtyState.get(workbookId) || false;
49
+ }
50
+ /**
51
+ * Mark workbook as dirty or clean
52
+ * @param workbookId Unique workbook identifier
53
+ * @param dirty Dirty state
54
+ */
55
+ setDirty(workbookId, dirty) {
56
+ this.dirtyState.set(workbookId, dirty);
57
+ }
58
+ /**
59
+ * Get last save timestamp for a workbook
60
+ * @param workbookId Unique workbook identifier
61
+ * @returns Last save timestamp or null
62
+ */
63
+ getLastSaveTime(workbookId) {
64
+ return this.lastSaveTime.get(workbookId) || null;
65
+ }
66
+ /**
67
+ * Clear autosave data for a specific workbook
68
+ * @param workbookId Unique workbook identifier
69
+ */
70
+ clear(workbookId) {
71
+ this.autosaveStore.delete(workbookId);
72
+ this.dirtyState.delete(workbookId);
73
+ this.lastSaveTime.delete(workbookId);
74
+ }
75
+ /**
76
+ * Clear all autosave data
77
+ */
78
+ clearAll() {
79
+ this.autosaveStore.clear();
80
+ this.dirtyState.clear();
81
+ this.lastSaveTime.clear();
82
+ }
83
+ }
84
+ AutosaveService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AutosaveService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
85
+ AutosaveService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AutosaveService, providedIn: 'root' });
86
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AutosaveService, decorators: [{
87
+ type: Injectable,
88
+ args: [{
89
+ providedIn: 'root'
90
+ }]
91
+ }] });
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b3NhdmUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXRhYmxlL3NyYy9saWIvc2VydmljZXMvYXV0b3NhdmUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQWMzQzs7Ozs7R0FLRztBQUlILE1BQU0sT0FBTyxlQUFlO0lBSDVCO1FBSUU7O1dBRUc7UUFDSyxrQkFBYSxHQUFHLElBQUksR0FBRyxFQUF3QixDQUFDO1FBRXhEOztXQUVHO1FBQ0ssZUFBVSxHQUFHLElBQUksR0FBRyxFQUFtQixDQUFDO1FBRWhEOztXQUVHO1FBQ0ssaUJBQVksR0FBRyxJQUFJLEdBQUcsRUFBZ0IsQ0FBQztLQW1FaEQ7SUFqRUM7Ozs7T0FJRztJQUNILElBQUksQ0FBQyxVQUFrQixFQUFFLElBQWtCO1FBQ3pDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEdBQUcsQ0FBQyxVQUFrQjtRQUNwQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQztJQUNwRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE9BQU8sQ0FBQyxVQUFrQjtRQUN4QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEtBQUssQ0FBQztJQUNsRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFFBQVEsQ0FBQyxVQUFrQixFQUFFLEtBQWM7UUFDekMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsZUFBZSxDQUFDLFVBQWtCO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksSUFBSSxDQUFDO0lBQ25ELENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsVUFBa0I7UUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsUUFBUTtRQUNOLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzVCLENBQUM7OzRHQWhGVSxlQUFlO2dIQUFmLGVBQWUsY0FGZCxNQUFNOzJGQUVQLGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgV29ya2Jvb2tDb25maWcgfSBmcm9tICcuLi9tb2RlbHMvd29ya2Jvb2stY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBXb3JrYm9va1N0YXRlU25hcHNob3QgfSBmcm9tICcuLi9yZW5kZXJlci9tb2RlbHMvd29ya2Jvb2stc3RhdGUuaW50ZXJmYWNlJztcblxuLyoqXG4gKiBBdXRvc2F2ZSBkYXRhIHN0cnVjdHVyZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dG9zYXZlRGF0YSB7XG4gIHdvcmtib29rQ29uZmlnOiBXb3JrYm9va0NvbmZpZztcbiAgd29ya2Jvb2tTdGF0ZTogV29ya2Jvb2tTdGF0ZVNuYXBzaG90O1xuICBzaGVldHNEYXRhOiBNYXA8c3RyaW5nLCBhbnlbXT47XG4gIHRpbWVzdGFtcDogRGF0ZTtcbn1cblxuLyoqXG4gKiBBdXRvc2F2ZVNlcnZpY2UgLSBJbi1tZW1vcnkgYXV0b3NhdmUgc3RvcmFnZVxuICogXG4gKiBTdG9yZXMgYXV0b3NhdmUgZGF0YSBpbiBtZW1vcnkgZm9yIHdvcmtib29rcy5cbiAqIERhdGEgaXMgYXV0b21hdGljYWxseSBjbGVhcmVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBkZXN0cm95ZWQgb3IgdGFiIGlzIGNsb3NlZC5cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQXV0b3NhdmVTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIEluLW1lbW9yeSBzdG9yYWdlIGZvciBhdXRvc2F2ZWQgZGF0YVxuICAgKi9cbiAgcHJpdmF0ZSBhdXRvc2F2ZVN0b3JlID0gbmV3IE1hcDxzdHJpbmcsIEF1dG9zYXZlRGF0YT4oKTtcblxuICAvKipcbiAgICogVHJhY2sgZGlydHkgc3RhdGUgcGVyIHdvcmtib29rXG4gICAqL1xuICBwcml2YXRlIGRpcnR5U3RhdGUgPSBuZXcgTWFwPHN0cmluZywgYm9vbGVhbj4oKTtcblxuICAvKipcbiAgICogVHJhY2sgbGFzdCBzYXZlIHRpbWVzdGFtcCBwZXIgd29ya2Jvb2tcbiAgICovXG4gIHByaXZhdGUgbGFzdFNhdmVUaW1lID0gbmV3IE1hcDxzdHJpbmcsIERhdGU+KCk7XG5cbiAgLyoqXG4gICAqIFNhdmUgd29ya2Jvb2sgZGF0YSB0byBtZW1vcnlcbiAgICogQHBhcmFtIHdvcmtib29rSWQgVW5pcXVlIHdvcmtib29rIGlkZW50aWZpZXJcbiAgICogQHBhcmFtIGRhdGEgQXV0b3NhdmUgZGF0YSB0byBzdG9yZVxuICAgKi9cbiAgc2F2ZSh3b3JrYm9va0lkOiBzdHJpbmcsIGRhdGE6IEF1dG9zYXZlRGF0YSk6IHZvaWQge1xuICAgIHRoaXMuYXV0b3NhdmVTdG9yZS5zZXQod29ya2Jvb2tJZCwgZGF0YSk7XG4gICAgdGhpcy5sYXN0U2F2ZVRpbWUuc2V0KHdvcmtib29rSWQsIGRhdGEudGltZXN0YW1wKTtcbiAgICB0aGlzLmRpcnR5U3RhdGUuc2V0KHdvcmtib29rSWQsIGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBhdXRvc2F2ZWQgZGF0YSBmb3IgYSB3b3JrYm9va1xuICAgKiBAcGFyYW0gd29ya2Jvb2tJZCBVbmlxdWUgd29ya2Jvb2sgaWRlbnRpZmllclxuICAgKiBAcmV0dXJucyBBdXRvc2F2ZWQgZGF0YSBvciBudWxsIGlmIG5vdCBmb3VuZFxuICAgKi9cbiAgZ2V0KHdvcmtib29rSWQ6IHN0cmluZyk6IEF1dG9zYXZlRGF0YSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmF1dG9zYXZlU3RvcmUuZ2V0KHdvcmtib29rSWQpIHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgd29ya2Jvb2sgaGFzIHVuc2F2ZWQgY2hhbmdlc1xuICAgKiBAcGFyYW0gd29ya2Jvb2tJZCBVbmlxdWUgd29ya2Jvb2sgaWRlbnRpZmllclxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHdvcmtib29rIGhhcyB1bnNhdmVkIGNoYW5nZXNcbiAgICovXG4gIGlzRGlydHkod29ya2Jvb2tJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGlydHlTdGF0ZS5nZXQod29ya2Jvb2tJZCkgfHwgZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogTWFyayB3b3JrYm9vayBhcyBkaXJ0eSBvciBjbGVhblxuICAgKiBAcGFyYW0gd29ya2Jvb2tJZCBVbmlxdWUgd29ya2Jvb2sgaWRlbnRpZmllclxuICAgKiBAcGFyYW0gZGlydHkgRGlydHkgc3RhdGVcbiAgICovXG4gIHNldERpcnR5KHdvcmtib29rSWQ6IHN0cmluZywgZGlydHk6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpcnR5U3RhdGUuc2V0KHdvcmtib29rSWQsIGRpcnR5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbGFzdCBzYXZlIHRpbWVzdGFtcCBmb3IgYSB3b3JrYm9va1xuICAgKiBAcGFyYW0gd29ya2Jvb2tJZCBVbmlxdWUgd29ya2Jvb2sgaWRlbnRpZmllclxuICAgKiBAcmV0dXJucyBMYXN0IHNhdmUgdGltZXN0YW1wIG9yIG51bGxcbiAgICovXG4gIGdldExhc3RTYXZlVGltZSh3b3JrYm9va0lkOiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMubGFzdFNhdmVUaW1lLmdldCh3b3JrYm9va0lkKSB8fCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGF1dG9zYXZlIGRhdGEgZm9yIGEgc3BlY2lmaWMgd29ya2Jvb2tcbiAgICogQHBhcmFtIHdvcmtib29rSWQgVW5pcXVlIHdvcmtib29rIGlkZW50aWZpZXJcbiAgICovXG4gIGNsZWFyKHdvcmtib29rSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuYXV0b3NhdmVTdG9yZS5kZWxldGUod29ya2Jvb2tJZCk7XG4gICAgdGhpcy5kaXJ0eVN0YXRlLmRlbGV0ZSh3b3JrYm9va0lkKTtcbiAgICB0aGlzLmxhc3RTYXZlVGltZS5kZWxldGUod29ya2Jvb2tJZCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIGF1dG9zYXZlIGRhdGFcbiAgICovXG4gIGNsZWFyQWxsKCk6IHZvaWQge1xuICAgIHRoaXMuYXV0b3NhdmVTdG9yZS5jbGVhcigpO1xuICAgIHRoaXMuZGlydHlTdGF0ZS5jbGVhcigpO1xuICAgIHRoaXMubGFzdFNhdmVUaW1lLmNsZWFyKCk7XG4gIH1cbn1cblxuIl19