@gravitee/ui-components 3.25.2 → 3.25.3-typescript-5a46c7d

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 (183) hide show
  1. package/package.json +13 -4
  2. package/src/atoms/gv-autocomplete.js +1 -437
  3. package/src/atoms/gv-button.js +1 -235
  4. package/src/atoms/gv-checkbox.js +1 -129
  5. package/src/atoms/gv-date-picker-calendar.js +1 -813
  6. package/src/atoms/gv-date-picker-cell.js +1 -166
  7. package/src/atoms/gv-date-picker.js +1 -532
  8. package/src/atoms/gv-file-upload.js +1 -257
  9. package/src/atoms/gv-icon.js +1 -82
  10. package/src/atoms/gv-image.js +1 -109
  11. package/src/atoms/gv-input-message.js +1 -59
  12. package/src/atoms/gv-input.js +1 -530
  13. package/src/atoms/gv-link.js +1 -132
  14. package/src/atoms/gv-message.js +1 -77
  15. package/src/atoms/gv-metric.js +1 -68
  16. package/src/atoms/gv-relative-time.js +1 -185
  17. package/src/atoms/gv-select-native.js +1 -269
  18. package/src/atoms/gv-select.js +1 -317
  19. package/src/atoms/gv-spinner.js +1 -36
  20. package/src/atoms/gv-state.js +1 -89
  21. package/src/atoms/gv-switch.js +1 -123
  22. package/src/atoms/gv-tag.js +1 -116
  23. package/src/atoms/gv-text.js +1 -107
  24. package/src/charts/gv-chart-bar.js +1 -107
  25. package/src/charts/gv-chart-gauge.js +1 -97
  26. package/src/charts/gv-chart-histogram.js +1 -91
  27. package/src/charts/gv-chart-line.js +1 -235
  28. package/src/charts/gv-chart-map.js +1 -114
  29. package/src/charts/gv-chart-pie.js +1 -95
  30. package/src/index.js +1 -78
  31. package/src/lib/cron-expression.js +1 -210
  32. package/src/lib/date.js +1 -53
  33. package/src/lib/events.js +1 -28
  34. package/src/lib/http-client-schema-form.js +1 -68
  35. package/src/lib/http.js +1 -238
  36. package/src/lib/i18n.js +1 -111
  37. package/src/lib/item.js +1 -119
  38. package/src/lib/properties.js +1 -224
  39. package/src/lib/schema-form.js +1 -43
  40. package/src/lib/studio.js +1 -94
  41. package/src/lib/style.js +1 -41
  42. package/src/lib/text-format.js +1 -76
  43. package/src/lib/theme.js +1 -66
  44. package/src/lib/utils.js +1 -110
  45. package/src/mixins/chart-element.js +1 -142
  46. package/src/mixins/input-element.js +1 -157
  47. package/src/mixins/item-resource.js +1 -122
  48. package/src/mixins/keyboard-element.js +1 -70
  49. package/src/mixins/update-after-browser.js +1 -33
  50. package/src/mixins/with-resize-observer.js +1 -78
  51. package/src/mixins/with-skeleton-attribute.js +1 -118
  52. package/src/molecules/gv-card-full.js +1 -97
  53. package/src/molecules/gv-card-list.js +1 -84
  54. package/src/molecules/gv-card.js +1 -59
  55. package/src/molecules/gv-category-list.js +1 -49
  56. package/src/molecules/gv-category.js +1 -90
  57. package/src/molecules/gv-code.js +1 -297
  58. package/src/molecules/gv-confirm.js +1 -158
  59. package/src/molecules/gv-cron-editor.js +1 -464
  60. package/src/molecules/gv-dropdown-menu.js +1 -84
  61. package/src/molecules/gv-expandable.js +1 -94
  62. package/src/molecules/gv-expression-language.js +1 -308
  63. package/src/molecules/gv-identity-picture.js +1 -125
  64. package/src/molecules/gv-list.js +1 -135
  65. package/src/molecules/gv-metrics.js +1 -150
  66. package/src/molecules/gv-modal.js +1 -146
  67. package/src/molecules/gv-nav.js +1 -170
  68. package/src/molecules/gv-option.js +1 -169
  69. package/src/molecules/gv-plans.js +1 -306
  70. package/src/molecules/gv-popover.js +1 -231
  71. package/src/molecules/gv-promote.js +1 -91
  72. package/src/molecules/gv-rating-list.js +1 -239
  73. package/src/molecules/gv-rating.js +1 -200
  74. package/src/molecules/gv-row-expandable.js +1 -39
  75. package/src/molecules/gv-row.js +1 -84
  76. package/src/molecules/gv-stats.js +1 -96
  77. package/src/molecules/gv-stepper.js +1 -144
  78. package/src/molecules/gv-table.js +1 -575
  79. package/src/molecules/gv-tree.js +1 -127
  80. package/src/organisms/gv-documentation.js +1 -132
  81. package/src/organisms/gv-header.js +1 -130
  82. package/src/organisms/gv-http-client.js +1 -139
  83. package/src/organisms/gv-menu.js +1 -142
  84. package/src/organisms/gv-newsletter-subscription.js +1 -130
  85. package/src/organisms/gv-pagination.js +1 -170
  86. package/src/organisms/gv-properties.js +1 -699
  87. package/src/organisms/gv-resizable-views.js +1 -178
  88. package/src/organisms/gv-resources.js +1 -428
  89. package/src/organisms/gv-schema-form-array.js +1 -140
  90. package/src/organisms/gv-schema-form-control-object.js +1 -140
  91. package/src/organisms/gv-schema-form-control.js +1 -416
  92. package/src/organisms/gv-schema-form.js +1 -646
  93. package/src/organisms/gv-tabs.js +1 -178
  94. package/src/organisms/gv-user-menu.js +1 -149
  95. package/src/organisms/gv-vertical-menu.js +1 -82
  96. package/src/policy-studio/gv-flow-step.js +1 -304
  97. package/src/policy-studio/gv-flow.js +1 -442
  98. package/src/policy-studio/gv-policy-studio-menu.js +1 -436
  99. package/src/policy-studio/gv-policy-studio.js +1 -1778
  100. package/src/styles/empty.js +1 -19
  101. package/src/styles/input.js +1 -19
  102. package/src/styles/link.js +1 -19
  103. package/src/styles/shapes.js +1 -18
  104. package/src/styles/skeleton.js +1 -19
  105. package/src/styles/zoom.js +1 -19
  106. package/src/theme/gv-theme.js +1 -164
  107. package/wc/gv-autocomplete.js +1 -1
  108. package/wc/gv-button.js +1 -1
  109. package/wc/gv-card-full.js +1 -1
  110. package/wc/gv-card-list.js +1 -1
  111. package/wc/gv-card.js +1 -1
  112. package/wc/gv-category-list.js +1 -1
  113. package/wc/gv-category.js +1 -1
  114. package/wc/gv-chart-bar.js +1 -1
  115. package/wc/gv-chart-gauge.js +1 -1
  116. package/wc/gv-chart-histogram.js +1 -1
  117. package/wc/gv-chart-line.js +1 -1
  118. package/wc/gv-chart-map.js +1 -1
  119. package/wc/gv-chart-pie.js +1 -1
  120. package/wc/gv-checkbox.js +1 -1
  121. package/wc/gv-code.js +1 -1
  122. package/wc/gv-confirm.js +1 -1
  123. package/wc/gv-cron-editor.js +1 -1
  124. package/wc/gv-date-picker-calendar.js +1 -1
  125. package/wc/gv-date-picker-cell.js +1 -1
  126. package/wc/gv-date-picker.js +1 -1
  127. package/wc/gv-documentation.js +1 -1
  128. package/wc/gv-dropdown-menu.js +1 -1
  129. package/wc/gv-expandable.js +1 -1
  130. package/wc/gv-expression-language.js +1 -1
  131. package/wc/gv-file-upload.js +1 -1
  132. package/wc/gv-flow-step.js +1 -1
  133. package/wc/gv-flow.js +1 -1
  134. package/wc/gv-header.js +1 -1
  135. package/wc/gv-http-client.js +1 -1
  136. package/wc/gv-icon.js +1 -1
  137. package/wc/gv-identity-picture.js +1 -1
  138. package/wc/gv-image.js +1 -1
  139. package/wc/gv-input-message.js +1 -1
  140. package/wc/gv-input.js +1 -1
  141. package/wc/gv-link.js +1 -1
  142. package/wc/gv-list.js +1 -1
  143. package/wc/gv-menu.js +1 -1
  144. package/wc/gv-message.js +1 -1
  145. package/wc/gv-metric.js +1 -1
  146. package/wc/gv-metrics.js +1 -1
  147. package/wc/gv-modal.js +1 -1
  148. package/wc/gv-nav.js +1 -1
  149. package/wc/gv-newsletter-subscription.js +1 -1
  150. package/wc/gv-option.js +1 -1
  151. package/wc/gv-pagination.js +1 -1
  152. package/wc/gv-plans.js +1 -1
  153. package/wc/gv-policy-studio-menu.js +1 -1
  154. package/wc/gv-policy-studio.js +1 -1
  155. package/wc/gv-popover.js +1 -1
  156. package/wc/gv-promote.js +1 -1
  157. package/wc/gv-properties.js +1 -1
  158. package/wc/gv-rating-list.js +1 -1
  159. package/wc/gv-rating.js +1 -1
  160. package/wc/gv-relative-time.js +1 -1
  161. package/wc/gv-resizable-views.js +1 -1
  162. package/wc/gv-resources.js +1 -1
  163. package/wc/gv-row-expandable.js +1 -1
  164. package/wc/gv-row.js +1 -1
  165. package/wc/gv-schema-form-array.js +1 -1
  166. package/wc/gv-schema-form-control-object.js +1 -1
  167. package/wc/gv-schema-form-control.js +1 -1
  168. package/wc/gv-schema-form.js +1 -1
  169. package/wc/gv-select-native.js +1 -1
  170. package/wc/gv-select.js +1 -1
  171. package/wc/gv-spinner.js +1 -1
  172. package/wc/gv-state.js +1 -1
  173. package/wc/gv-stats.js +1 -1
  174. package/wc/gv-stepper.js +1 -1
  175. package/wc/gv-switch.js +1 -1
  176. package/wc/gv-table.js +1 -1
  177. package/wc/gv-tabs.js +1 -1
  178. package/wc/gv-tag.js +1 -1
  179. package/wc/gv-text.js +1 -1
  180. package/wc/gv-theme.js +1 -1
  181. package/wc/gv-tree.js +1 -1
  182. package/wc/gv-user-menu.js +1 -1
  183. package/wc/gv-vertical-menu.js +1 -1
@@ -1,416 +1 @@
1
- /*
2
- * Copyright (C) 2015 The Gravitee team (http://gravitee.io)
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import { css, LitElement, html } from 'lit';
17
- import { dispatchCustomEvent } from '../lib/events';
18
- import '../atoms/gv-input';
19
- import '../atoms/gv-input-message';
20
- import '../atoms/gv-text';
21
- import '../atoms/gv-select';
22
- import '../atoms/gv-select-native';
23
- import '../atoms/gv-switch';
24
- import '../molecules/gv-code';
25
- import '../molecules/gv-expression-language';
26
- import '../molecules/gv-cron-editor';
27
- import '../atoms/gv-autocomplete';
28
- import '../organisms/gv-schema-form-array';
29
- import '../organisms/gv-schema-form-control-object';
30
- import { isCodemirror, isObject, isComplexArray } from '../lib/schema-form';
31
- import { UpdateAfterBrowser } from '../mixins/update-after-browser';
32
- export class GvSchemaFormControl extends UpdateAfterBrowser(LitElement) {
33
- static get properties() {
34
- return {
35
- type: {
36
- type: String
37
- },
38
- id: {
39
- type: String,
40
- reflect: true
41
- },
42
- name: {
43
- type: String,
44
- reflect: true
45
- },
46
- required: {
47
- type: Boolean,
48
- reflect: true
49
- },
50
- disabled: {
51
- type: Boolean,
52
- reflect: true
53
- },
54
- readonly: {
55
- type: Boolean,
56
- reflect: true
57
- },
58
- title: {
59
- type: String,
60
- reflect: true
61
- },
62
- pattern: {
63
- type: String
64
- },
65
- control: {
66
- type: Object
67
- },
68
- errors: {
69
- type: Array
70
- },
71
- value: {
72
- type: Object,
73
- reflect: true
74
- },
75
- skeleton: {
76
- type: Boolean,
77
- reflect: true
78
- },
79
- hidden: {
80
- type: Boolean,
81
- reflect: true
82
- },
83
- writeOnly: {
84
- type: Boolean,
85
- reflect: true
86
- },
87
- compact: {
88
- type: Boolean
89
- }
90
- };
91
- }
92
-
93
- constructor() {
94
- super(); // When form has errors, the control is not update to conserve the error state.
95
- // This list is used to force the update of properties even in error case.
96
-
97
- this._observedProperties = ['disabled', 'readonly', 'required'];
98
- }
99
-
100
- isExpressionLanguage() {
101
- return this.control['x-schema-form'] && this.control['x-schema-form']['expression-language'] != null;
102
- }
103
-
104
- isCronExpression() {
105
- return this.control['x-schema-form'] && this.control['x-schema-form']['cron-expression'] === true;
106
- }
107
-
108
- isPassword() {
109
- return this.control.writeOnly === true || this.control['x-schema-form'] && this.control['x-schema-form'].type != null && this.control['x-schema-form'].type === 'password';
110
- }
111
-
112
- getPlaceholder() {
113
- return this.control['x-schema-form'] && this.control['x-schema-form'].placeholder ? this.control['x-schema-form'].placeholder : null;
114
- }
115
-
116
- isCodemirror() {
117
- return isCodemirror(this.control);
118
- }
119
-
120
- isObject() {
121
- return isObject(this.control);
122
- }
123
-
124
- isAutocomplete() {
125
- return this.control['x-schema-form'] && this.control['x-schema-form'].event != null && this.control.type === 'string';
126
- }
127
-
128
- isText() {
129
- return this.control['x-schema-form'] && this.control['x-schema-form'].type === 'text' && this.control.type === 'string';
130
- }
131
-
132
- getElementName() {
133
- if (this.isObject()) {
134
- return 'gv-schema-form-control-object';
135
- }
136
-
137
- if ((this.control.enum || this.control.items && this.control.items.enum) && !this.isAutocomplete()) {
138
- if (this.control.type === 'array') {
139
- return 'gv-select';
140
- }
141
-
142
- return 'gv-select-native';
143
- } else if (isComplexArray(this.control)) {
144
- return 'gv-schema-form-array';
145
- } else if (this.control.type === 'array') {
146
- return 'gv-button';
147
- } else if (this.control.type === 'boolean') {
148
- return 'gv-switch';
149
- } else if (this.isExpressionLanguage()) {
150
- return 'gv-expression-language';
151
- } else if (this.isCodemirror()) {
152
- return 'gv-code';
153
- } else if (this.isCronExpression()) {
154
- return 'gv-cron-editor';
155
- } else if (this.isText()) {
156
- return 'gv-text';
157
- }
158
-
159
- return 'gv-input';
160
- }
161
-
162
- _updateProperties(element) {
163
- if (element != null) {
164
- this._observedProperties.forEach(property => {
165
- if (this[property] != null) {
166
- element[property] = this[property];
167
- }
168
- });
169
- }
170
- }
171
-
172
- _renderControl() {
173
- const elementName = this.getElementName();
174
- const element = document.createElement(elementName);
175
- element.id = this.id;
176
- element.name = this.id;
177
- element.skeleton = this.skeleton;
178
- element.classList.add('form__control');
179
-
180
- if (this.value == null && this.control.default != null) {
181
- this.value = this.control.default;
182
- dispatchCustomEvent(this, 'default-value', {
183
- value: this.value,
184
- currentTarget: element,
185
- control: this.control
186
- });
187
- }
188
-
189
- if (this.value != null) {
190
- this._setValue(element);
191
- }
192
-
193
- if (this.control.type === 'object') {
194
- element.schema = this.control;
195
- } else if (isComplexArray(this.control)) {
196
- element.schema = this.control.items;
197
- }
198
-
199
- this._updateProperties(element);
200
-
201
- if (this.control.title) {
202
- element.label = this.control.title;
203
- element.title = this.control.title;
204
- } else {
205
- const tmp = this.id.split('.');
206
- const title = tmp[tmp.length - 1];
207
-
208
- if (isNaN(parseInt(title, 10))) {
209
- element.label = title;
210
- element.title = title;
211
- }
212
- }
213
-
214
- if (this.control.pattern) {
215
- element.pattern = this.control.pattern;
216
- }
217
-
218
- if (this.control.type === 'integer') {
219
- element.type = 'number';
220
- }
221
-
222
- if (this.isText()) {
223
- element.rows = 3;
224
- element.autosize = true;
225
- element.placeholder = this.control.description;
226
- }
227
-
228
- const placeholder = this.getPlaceholder();
229
-
230
- if (this.control.enum || this.control.items && this.control.items.enum) {
231
- const options = this.control.enum || this.control.items.enum;
232
-
233
- if (this.control['x-schema-form'] && this.control['x-schema-form'].titleMap) {
234
- element.options = options.map(value => ({
235
- value,
236
- label: this.control['x-schema-form'].titleMap[value] || value
237
- }));
238
- } else {
239
- element.options = options;
240
- }
241
-
242
- if (this.control.type === 'array') {
243
- element.multiple = true;
244
- }
245
- } else if (this.isCodemirror()) {
246
- element.options = this.control['x-schema-form'].codemirrorOptions;
247
-
248
- if (this.control.default != null && element.options.value == null) {
249
- element.options.value = this.control.default;
250
- }
251
- } else if (this.isExpressionLanguage()) {
252
- element.options = {};
253
- element.rows = 1;
254
- } else if (this.isPassword()) {
255
- element.type = 'password';
256
- }
257
-
258
- if (this.control.description) {
259
- element.description = this.control.description;
260
- }
261
-
262
- if (this.compact) {
263
- element.placeholder = element.description || element.label;
264
- element.label = null;
265
- element.description = null;
266
- element.compact = this.compact;
267
- }
268
-
269
- if (placeholder != null) {
270
- if (this.isExpressionLanguage() || this.isCodemirror()) {
271
- element.options.placeholder = placeholder;
272
- } else {
273
- element.placeholder = placeholder;
274
- }
275
- }
276
-
277
- element.addEventListener(`${elementName}:input`, this._onInput.bind(this));
278
- let currentTarget;
279
-
280
- if (this.isAutocomplete()) {
281
- const autocomplete = document.createElement('gv-autocomplete');
282
- autocomplete.minChars = 0;
283
- autocomplete.filter = true;
284
- element.clearable = true;
285
- autocomplete.id = this.id;
286
- autocomplete.appendChild(element);
287
- autocomplete.addEventListener(`gv-autocomplete:select`, this._onInput.bind(this));
288
- element.addEventListener(`gv-input:clear`, this._onInput.bind(this));
289
- currentTarget = autocomplete;
290
- } else {
291
- currentTarget = element;
292
- }
293
-
294
- if (this.control['x-schema-form'] != null) {
295
- dispatchCustomEvent(this, 'control-ready', {
296
- currentTarget,
297
- control: this
298
- });
299
- }
300
-
301
- return currentTarget;
302
- }
303
-
304
- _onInput(e) {
305
- e.preventDefault();
306
- e.stopPropagation();
307
- let value = null;
308
-
309
- if (e.target.tagName === 'GV-AUTOCOMPLETE') {
310
- value = e.detail.value;
311
- } else {
312
- value = e.detail;
313
- }
314
-
315
- dispatchCustomEvent(this, 'change', {
316
- value,
317
- currentTarget: e.target,
318
- control: this.control
319
- });
320
- }
321
-
322
- getControls() {
323
- return [...Array.from(this.shadowRoot.querySelectorAll('gv-schema-form-control')), ...Array.from(this.shadowRoot.querySelectorAll('gv-schema-form-control-array')), ...Array.from(this.shadowRoot.querySelectorAll('gv-schema-form-control-object'))];
324
- }
325
-
326
- getControl(id) {
327
- if (id == null) {
328
- id = this.id;
329
- }
330
-
331
- return this.shadowRoot.querySelector(`[id="${id}"]`);
332
- }
333
-
334
- _setValue(controlElement) {
335
- if (this.value != null && controlElement != null) {
336
- if (this.control.type === 'boolean' || this.control.type === 'array' || this.control.type === 'object') {
337
- controlElement.value = this.value;
338
- } else {
339
- controlElement.value = this.value.toString ? this.value.toString() : this.value;
340
- }
341
- }
342
-
343
- return controlElement;
344
- }
345
-
346
- async updated(changedProperties) {
347
- if (changedProperties.has('value')) {
348
- Promise.all(this.getControls().map(control => control.updateComplete)).then(() => {
349
- this._setValue(this.getControl());
350
- });
351
- }
352
- }
353
-
354
- async getUpdateComplete() {
355
- await super.getUpdateComplete();
356
- await Promise.all(this.getControls().map(e => e.updateComplete));
357
- }
358
-
359
- formatErrorMessage(error) {
360
- let title;
361
-
362
- if (this.control.properties != null && this.control.properties[error.argument] != null) {
363
- title = this.control.properties[error.argument].title;
364
- } else {
365
- title = this.control.title;
366
- }
367
-
368
- if (title) {
369
- return `<span>${error.message.replace(error.argument, title)}</span>`;
370
- }
371
-
372
- return `<span>${error.message}</span>`;
373
- }
374
-
375
- shouldUpdate(changedProperties) {
376
- if (this._observedProperties.find(property => changedProperties.has(property)) != null) {
377
- this._updateProperties(this.getControl());
378
- }
379
-
380
- if (changedProperties.has('errors') && this.errors != null) {
381
- // Set errors to complex controls
382
- this.getControls().forEach(control => {
383
- control.errors = this.errors;
384
- }); // Find simple controls and append error message
385
-
386
- const errorContainer = this.shadowRoot.querySelectorAll('.form__control-error');
387
- errorContainer.forEach(container => container.innerHTML = '');
388
- this.errors.forEach(error => {
389
- const key = error.property === 'instance' ? error.argument : error.property.replace('instance.', '');
390
- const errorContainer = this.shadowRoot.querySelector(`[id="${key}-error"]`);
391
-
392
- if (errorContainer) {
393
- const message = document.createElement('gv-input-message');
394
- message.innerHTML = this.formatErrorMessage(error);
395
- message.level = 'warn';
396
- errorContainer.appendChild(message);
397
- }
398
- });
399
- return false;
400
- }
401
-
402
- return super.shouldUpdate(changedProperties);
403
- }
404
-
405
- render() {
406
- return html` ${this._renderControl()} <div class="form__control-error" id="${this.id + '-error'}"></div> `;
407
- }
408
-
409
- static get styles() {
410
- return [// language=CSS
411
- css`:host{box-sizing:border-box;margin:var(--gv-schema-form-control--m,.4rem);display:block}:host([hidden]){visibility:hidden;height:0;margin:0;padding:0;overflow:hidden}.form__control-description,.form__control-error{font-size:12px}.form__control-description{opacity:.8}.form__control-label{display:flex;flex-direction:row;border-bottom:1px solid #d9d9d9}label{margin:.2rem}.form__control-label label{flex:1;text-transform:capitalize}.form__control-array,.form__control-object{display:flex;flex-direction:column}.form__control-enum{display:flex}.form__control-array gv-button{align-self:flex-end}.form__control{position:relative}gv-code,gv-expression-language,gv-input,gv-select,gv-select-native,gv-switch{width:100%;margin:.2rem 0}gv-autocomplete:hover,gv-select-native:hover,gv-select:hover{z-index:70}.error{color:var(--gv-theme-color-error,#f44336)}.warning{color:var(--gv-theme-color-warning,#ff9800)}`];
412
- }
413
-
414
- }
415
- window.customElements.define('gv-schema-form-control', GvSchemaFormControl);
416
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL29yZ2FuaXNtcy9ndi1zY2hlbWEtZm9ybS1jb250cm9sLmpzIl0sIm5hbWVzIjpbImNzcyIsIkxpdEVsZW1lbnQiLCJodG1sIiwiZGlzcGF0Y2hDdXN0b21FdmVudCIsImlzQ29kZW1pcnJvciIsImlzT2JqZWN0IiwiaXNDb21wbGV4QXJyYXkiLCJVcGRhdGVBZnRlckJyb3dzZXIiLCJHdlNjaGVtYUZvcm1Db250cm9sIiwicHJvcGVydGllcyIsInR5cGUiLCJTdHJpbmciLCJpZCIsInJlZmxlY3QiLCJuYW1lIiwicmVxdWlyZWQiLCJCb29sZWFuIiwiZGlzYWJsZWQiLCJyZWFkb25seSIsInRpdGxlIiwicGF0dGVybiIsImNvbnRyb2wiLCJPYmplY3QiLCJlcnJvcnMiLCJBcnJheSIsInZhbHVlIiwic2tlbGV0b24iLCJoaWRkZW4iLCJ3cml0ZU9ubHkiLCJjb21wYWN0IiwiY29uc3RydWN0b3IiLCJfb2JzZXJ2ZWRQcm9wZXJ0aWVzIiwiaXNFeHByZXNzaW9uTGFuZ3VhZ2UiLCJpc0Nyb25FeHByZXNzaW9uIiwiaXNQYXNzd29yZCIsImdldFBsYWNlaG9sZGVyIiwicGxhY2Vob2xkZXIiLCJpc0F1dG9jb21wbGV0ZSIsImV2ZW50IiwiaXNUZXh0IiwiZ2V0RWxlbWVudE5hbWUiLCJlbnVtIiwiaXRlbXMiLCJfdXBkYXRlUHJvcGVydGllcyIsImVsZW1lbnQiLCJmb3JFYWNoIiwicHJvcGVydHkiLCJfcmVuZGVyQ29udHJvbCIsImVsZW1lbnROYW1lIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NMaXN0IiwiYWRkIiwiZGVmYXVsdCIsImN1cnJlbnRUYXJnZXQiLCJfc2V0VmFsdWUiLCJzY2hlbWEiLCJsYWJlbCIsInRtcCIsInNwbGl0IiwibGVuZ3RoIiwiaXNOYU4iLCJwYXJzZUludCIsInJvd3MiLCJhdXRvc2l6ZSIsImRlc2NyaXB0aW9uIiwib3B0aW9ucyIsInRpdGxlTWFwIiwibWFwIiwibXVsdGlwbGUiLCJjb2RlbWlycm9yT3B0aW9ucyIsImFkZEV2ZW50TGlzdGVuZXIiLCJfb25JbnB1dCIsImJpbmQiLCJhdXRvY29tcGxldGUiLCJtaW5DaGFycyIsImZpbHRlciIsImNsZWFyYWJsZSIsImFwcGVuZENoaWxkIiwiZSIsInByZXZlbnREZWZhdWx0Iiwic3RvcFByb3BhZ2F0aW9uIiwidGFyZ2V0IiwidGFnTmFtZSIsImRldGFpbCIsImdldENvbnRyb2xzIiwiZnJvbSIsInNoYWRvd1Jvb3QiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZ2V0Q29udHJvbCIsInF1ZXJ5U2VsZWN0b3IiLCJjb250cm9sRWxlbWVudCIsInRvU3RyaW5nIiwidXBkYXRlZCIsImNoYW5nZWRQcm9wZXJ0aWVzIiwiaGFzIiwiUHJvbWlzZSIsImFsbCIsInVwZGF0ZUNvbXBsZXRlIiwidGhlbiIsImdldFVwZGF0ZUNvbXBsZXRlIiwiZm9ybWF0RXJyb3JNZXNzYWdlIiwiZXJyb3IiLCJhcmd1bWVudCIsIm1lc3NhZ2UiLCJyZXBsYWNlIiwic2hvdWxkVXBkYXRlIiwiZmluZCIsImVycm9yQ29udGFpbmVyIiwiY29udGFpbmVyIiwiaW5uZXJIVE1MIiwia2V5IiwibGV2ZWwiLCJyZW5kZXIiLCJzdHlsZXMiLCJ3aW5kb3ciLCJjdXN0b21FbGVtZW50cyIsImRlZmluZSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsR0FBVCxFQUFjQyxVQUFkLEVBQTBCQyxJQUExQixRQUFzQyxLQUF0QztBQUNBLFNBQVNDLG1CQUFULFFBQW9DLGVBQXBDO0FBQ0EsT0FBTyxtQkFBUDtBQUNBLE9BQU8sMkJBQVA7QUFDQSxPQUFPLGtCQUFQO0FBQ0EsT0FBTyxvQkFBUDtBQUNBLE9BQU8sMkJBQVA7QUFDQSxPQUFPLG9CQUFQO0FBQ0EsT0FBTyxzQkFBUDtBQUNBLE9BQU8scUNB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LENBQVlzQixPQUFaLENBQXFCeUQsS0FBRCxJQUFXO0FBQzdCLGNBQU1TLEdBQUcsR0FBR1QsS0FBSyxDQUFDeEQsUUFBTixLQUFtQixVQUFuQixHQUFnQ3dELEtBQUssQ0FBQ0MsUUFBdEMsR0FBaURELEtBQUssQ0FBQ3hELFFBQU4sQ0FBZTJELE9BQWYsQ0FBdUIsV0FBdkIsRUFBb0MsRUFBcEMsQ0FBN0Q7QUFDQSxjQUFNRyxjQUFjLEdBQUcsS0FBS3JCLFVBQUwsQ0FBZ0JHLGFBQWhCLENBQStCLFFBQU9xQixHQUFJLFVBQTFDLENBQXZCOztBQUNBLFlBQUlILGNBQUosRUFBb0I7QUFDbEIsZ0JBQU1KLE9BQU8sR0FBR3ZELFFBQVEsQ0FBQ0MsYUFBVCxDQUF1QixrQkFBdkIsQ0FBaEI7QUFDQXNELFVBQUFBLE9BQU8sQ0FBQ00sU0FBUixHQUFvQixLQUFLVCxrQkFBTCxDQUF3QkMsS0FBeEIsQ0FBcEI7QUFDQUUsVUFBQUEsT0FBTyxDQUFDUSxLQUFSLEdBQWdCLE1BQWhCO0FBQ0FKLFVBQUFBLGNBQWMsQ0FBQzlCLFdBQWYsQ0FBMkIwQixPQUEzQjtBQUNEO0FBQ0YsT0FURDtBQVVBLGFBQU8sS0FBUDtBQUNEOztBQUNELFdBQU8sTUFBTUUsWUFBTixDQUFtQlosaUJBQW5CLENBQVA7QUFDRDs7QUFFRG1CLEVBQUFBLE1BQU0sR0FBRztBQUNQLFdBQU8vRyxJQUFJLElBQ1AsS0FBSzZDLGNBQUwsRUFETyx5Q0FFOEIsS0FBS25DLEVBQUwsR0FBVSxRQUZ4QyxXQUFYO0FBSUQ7O0FBRWdCLGFBQU5zRyxNQUFNLEdBQUc7QUFDbEIsV0FBTyxDQUNMO0FBQ0FsSCxJQUFBQSxHQUFHLHk0QkFGRSxDQUFQO0FBcUZEOztBQXZacUU7QUEwWnhFbUgsTUFBTSxDQUFDQyxjQUFQLENBQXNCQyxNQUF0QixDQUE2Qix3QkFBN0IsRUFBdUQ3RyxtQkFBdkQiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBHcmF2aXRlZSB0ZWFtIChodHRwOi8vZ3Jhdml0ZWUuaW8pXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHsgY3NzLCBMaXRFbGVtZW50LCBodG1sIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGRpc3BhdGNoQ3VzdG9tRXZlbnQgfSBmcm9tICcuLi9saWIvZXZlbnRzJztcbmltcG9ydCAnLi4vYXRvbXMvZ3YtaW5wdXQnO1xuaW1wb3J0ICcuLi9hdG9tcy9ndi1pbnB1dC1tZXNzYWdlJztcbmltcG9ydCAnLi4vYXRvbXMvZ3YtdGV4dCc7XG5pbXBvcnQgJy4uL2F0b21zL2d2LXNlbGVjdCc7XG5pbXBvcnQgJy4uL2F0b21zL2d2LXNlbGVjdC1uYXRpdmUnO1xuaW1wb3J0ICcuLi9hdG9tcy9ndi1zd2l0Y2gnO1xuaW1wb3J0ICcuLi9tb2xlY3VsZXMvZ3YtY29kZSc7XG5pbXBvcnQgJy4uL21vbGVjdWxlcy9ndi1leHByZXNzaW9uLWxhbmd1YWdlJztcbmltcG9ydCAnLi4vbW9sZWN1bGVzL2d2LWNyb24tZWRpdG9yJztcbmltcG9ydCAnLi4vYXRvbXMvZ3YtYXV0b2NvbXBsZXRlJztcbmltcG9ydCAnLi4vb3JnYW5pc21zL2d2LXNjaGVtYS1mb3JtLWFycmF5JztcbmltcG9ydCAnLi4vb3JnYW5pc21zL2d2LXNjaGVtYS1mb3JtLWNvbnRyb2wtb2JqZWN0JztcbmltcG9ydCB7IGlzQ29kZW1pcnJvciwgaXNPYmplY3QsIGlzQ29tcGxleEFycmF5IH0gZnJvbSAnLi4vbGliL3NjaGVtYS1mb3JtJztcbmltcG9ydCB7IFVwZGF0ZUFmdGVyQnJvd3NlciB9IGZyb20gJy4uL21peGlucy91cGRhdGUtYWZ0ZXItYnJvd3Nlcic7XG5cbmV4cG9ydCBjbGFzcyBHdlNjaGVtYUZvcm1Db250cm9sIGV4dGVuZHMgVXBkYXRlQWZ0ZXJCcm93c2VyKExpdEVsZW1lbnQpIHtcbiAgc3RhdGljIGdldCBwcm9wZXJ0aWVzKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiB7IHR5cGU6IFN0cmluZyB9LFxuICAgICAgaWQ6IHsgdHlwZTogU3RyaW5nLCByZWZsZWN0OiB0cnVlIH0sXG4gICAgICBuYW1lOiB7IHR5cGU6IFN0cmluZywgcmVmbGVjdDogdHJ1ZSB9LFxuICAgICAgcmVxdWlyZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVmbGVjdDogdHJ1ZSB9LFxuICAgICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVmbGVjdDogdHJ1ZSB9LFxuICAgICAgcmVhZG9ubHk6IHsgdHlwZTogQm9vbGVhbiwgcmVmbGVjdDogdHJ1ZSB9LFxuICAgICAgdGl0bGU6IHsgdHlwZTogU3RyaW5nLCByZWZsZWN0OiB0cnVlIH0sXG4gICAgICBwYXR0ZXJuOiB7IHR5cGU6IFN0cmluZyB9LFxuICAgICAgY29udHJvbDogeyB0eXBlOiBPYmplY3QgfSxcbiAgICAgIGVycm9yczogeyB0eXBlOiBBcnJheSB9LFxuICAgICAgdmFsdWU6IHsgdHlwZTogT2JqZWN0LCByZWZsZWN0OiB0cnVlIH0sXG4gICAgICBza2VsZXRvbjogeyB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlIH0sXG4gICAgICBoaWRkZW46IHsgdHlwZTogQm9vbGVhbiwgcmVmbGVjdDogdHJ1ZSB9LFxuICAgICAgd3JpdGVPbmx5OiB7IHR5cGU6IEJvb2xlYW4sIHJlZmxlY3Q6IHRydWUgfSxcbiAgICAgIGNvbXBhY3Q6IHsgdHlwZTogQm9vbGVhbiB9LFxuICAgIH07XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIC8vIFdoZW4gZm9ybSBoYXMgZXJyb3JzLCB0aGUgY29udHJvbCBpcyBub3QgdXBkYXRlIHRvIGNvbnNlcnZlIHRoZSBlcnJvciBzdGF0ZS5cbiAgICAvLyBUaGlzIGxpc3QgaXMgdXNlZCB0byBmb3JjZSB0aGUgdXBkYXRlIG9mIHByb3BlcnRpZXMgZXZlbiBpbiBlcnJvciBjYXNlLlxuICAgIHRoaXMuX29ic2VydmVkUHJvcGVydGllcyA9IFsnZGlzYWJsZWQnLCAncmVhZG9ubHknLCAncmVxdWlyZWQnXTtcbiAgfVxuXG4gIGlzRXhwcmVzc2lvbkxhbmd1YWdlKCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2xbJ3gtc2NoZW1hLWZvcm0nXSAmJiB0aGlzLmNvbnRyb2xbJ3gtc2NoZW1hLWZvcm0nXVsnZXhwcmVzc2lvbi1sYW5ndWFnZSddICE9IG51bGw7XG4gIH1cblxuICBpc0Nyb25FeHByZXNzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2xbJ3gtc2NoZW1hLWZvcm0nXSAmJiB0aGlzLmNvbnRyb2xbJ3gtc2NoZW1hLWZvcm0nXVsnY3Jvbi1leHByZXNzaW9uJ10gPT09IHRydWU7XG4gIH1cblxuICBpc1Bhc3N3b3JkKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmNvbnRyb2wud3JpdGVPbmx5ID09PSB0cnVlIHx8XG4gICAgICAodGhpcy5jb250cm9sWyd4LXNjaGVtYS1mb3JtJ10gJiYgdGhpcy5jb250cm9sWyd4LXNjaGVtYS1mb3JtJ10udHlwZSAhPSBudWxsICYmIHRoaXMuY29udHJvbFsneC1zY2hlbWEtZm9ybSddLnR5cGUgPT09ICdwYXNzd29yZCcpXG4gICAgKTtcbiAgfVxuXG4gIGdldFBsYWNlaG9sZGVyKCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2xbJ3gtc2NoZW1hLWZvcm0nXSAmJiB0aGlzLmNvbnRyb2xbJ3gtc2NoZW1hLWZvcm0nXS5wbGFjZWhvbGRlciA/IHRoaXMuY29udHJvbFsneC1zY2hlbWEtZm9ybSddLnBsYWNlaG9sZGVyIDogbnVsbDtcbiAgfVxuXG4gIGlzQ29kZW1pcnJvcigpIHtcbiAgICByZXR1cm4gaXNDb2RlbWlycm9yKHRoaXMuY29udHJvbCk7XG4gIH1cblxuICBpc09iamVjdCgpIHtcbiAgICByZXR1cm4gaXNPYmplY3QodGhpcy5jb250cm9sKTtcbiAgfVxuXG4gIGlzQXV0b2NvbXBsZXRlKCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2xbJ3gtc2NoZW1hLWZvcm0nXSAmJiB0aGlzLmNvbnRyb2xbJ3gtc2NoZW1hLWZvcm0nXS5ldmVudCAhPSBudWxsICYmIHRoaXMuY29udHJvbC50eXBlID09PSAnc3RyaW5nJztcbiAgfVxuXG4gIGlzVGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sWyd4LXNjaGVtYS1mb3JtJ10gJiYgdGhpcy5jb250cm9sWyd4LXNjaGVtYS1mb3JtJ10udHlwZSA9PT0gJ3RleHQnICYmIHRoaXMuY29udHJvbC50eXBlID09PSAnc3RyaW5nJztcbiAgfVxuXG4gIGdldEVsZW1lbnROYW1lKCkge1xuICAgIGlmICh0aGlzLmlzT2JqZWN0KCkpIHtcbiAgICAgIHJldHVybiAnZ3Ytc2NoZW1hLWZvcm0tY29udHJvbC1vYmplY3QnO1xuICAgIH1cbiAgICBpZiAoKHRoaXMuY29udHJvbC5lbnVtIHx8ICh0aGlzLmNvbnRyb2wuaXRlbXMgJiYgdGhpcy5jb250cm9sLml0ZW1zLmVudW0pKSAmJiAhdGhpcy5pc0F1dG9jb21wbGV0ZSgpKSB7XG4gICAgICBpZiAodGhpcy5jb250cm9sLnR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgICAgcmV0dXJuICdndi1zZWxlY3QnO1xuICAgICAgfVxuICAgICAgcmV0dXJuICdndi1zZWxlY3QtbmF0aXZlJztcbiAgICB9IGVsc2UgaWYgKGlzQ29tcGxleEFycmF5KHRoaXMuY29udHJvbCkpIHtcbiAgICAgIHJldHVybiAnZ3Ytc2NoZW1hLWZvcm0tYXJyYXknO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jb250cm9sLnR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgIHJldHVybiAnZ3YtYnV0dG9uJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29udHJvbC50eXBlID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiAnZ3Ytc3dpdGNoJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNFeHByZXNzaW9uTGFuZ3VhZ2UoKSkge1xuICAgICAgcmV0dXJuICdndi1leHByZXNzaW9uLWxhbmd1YWdlJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNDb2RlbWlycm9yKCkpIHtcbiAgICAgIHJldHVybiAnZ3YtY29kZSc7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzQ3JvbkV4cHJlc3Npb24oKSkge1xuICAgICAgcmV0dXJuICdndi1jcm9uLWVkaXRvcic7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzVGV4dCgpKSB7XG4gICAgICByZXR1cm4gJ2d2LXRleHQnO1xuICAgIH1cblxuICAgIHJldHVybiAnZ3YtaW5wdXQnO1xuICB9XG5cbiAgX3VwZGF0ZVByb3BlcnRpZXMoZWxlbWVudCkge1xuICAgIGlmIChlbGVtZW50ICE9IG51bGwpIHtcbiAgICAgIHRoaXMuX29ic2VydmVkUHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eSkgPT4ge1xuICAgICAgICBpZiAodGhpc1twcm9wZXJ0eV0gIT0gbnVsbCkge1xuICAgICAgICAgIGVsZW1lbnRbcHJvcGVydHldID0gdGhpc1twcm9wZXJ0eV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIF9yZW5kZXJDb250cm9sKCkge1xuICAgIGNvbnN0IGVsZW1lbnROYW1lID0gdGhpcy5nZXRFbGVtZW50TmFtZSgpO1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGVsZW1lbnROYW1lKTtcbiAgICBlbGVtZW50LmlkID0gdGhpcy5pZDtcbiAgICBlbGVtZW50Lm5hbWUgPSB0aGlzLmlkO1xuICAgIGVsZW1lbnQuc2tlbGV0b24gPSB0aGlzLnNrZWxldG9uO1xuICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZm9ybV9fY29udHJvbCcpO1xuICAgIGlmICh0aGlzLnZhbHVlID09IG51bGwgJiYgdGhpcy5jb250cm9sLmRlZmF1bHQgIT0gbnVsbCkge1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY29udHJvbC5kZWZhdWx0O1xuICAgICAgZGlzcGF0Y2hDdXN0b21FdmVudCh0aGlzLCAnZGVmYXVsdC12YWx1ZScsIHsgdmFsdWU6IHRoaXMudmFsdWUsIGN1cnJlbnRUYXJnZXQ6IGVsZW1lbnQsIGNvbnRyb2w6IHRoaXMuY29udHJvbCB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMudmFsdWUgIT0gbnVsbCkge1xuICAgICAgdGhpcy5fc2V0VmFsdWUoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29udHJvbC50eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgZWxlbWVudC5zY2hlbWEgPSB0aGlzLmNvbnRyb2w7XG4gICAgfSBlbHNlIGlmIChpc0NvbXBsZXhBcnJheSh0aGlzLmNvbnRyb2wpKSB7XG4gICAgICBlbGVtZW50LnNjaGVtYSA9IHRoaXMuY29udHJvbC5pdGVtcztcbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnQpO1xuXG4gICAgaWYgKHRoaXMuY29udHJvbC50aXRsZSkge1xuICAgICAgZWxlbWVudC5sYWJlbCA9IHRoaXMuY29udHJvbC50aXRsZTtcbiAgICAgIGVsZW1lbnQudGl0bGUgPSB0aGlzLmNvbnRyb2wudGl0bGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRtcCA9IHRoaXMuaWQuc3BsaXQoJy4nKTtcbiAgICAgIGNvbnN0IHRpdGxlID0gdG1wW3RtcC5sZW5ndGggLSAxXTtcbiAgICAgIGlmIChpc05hTihwYXJzZUludCh0aXRsZSwgMTApKSkge1xuICAgICAgICBlbGVtZW50LmxhYmVsID0gdGl0bGU7XG4gICAgICAgIGVsZW1lbnQudGl0bGUgPSB0aXRsZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb250cm9sLnBhdHRlcm4pIHtcbiAgICAgIGVsZW1lbnQucGF0dGVybiA9IHRoaXMuY29udHJvbC5wYXR0ZXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbnRyb2wudHlwZSA9PT0gJ2ludGVnZXInKSB7XG4gICAgICBlbGVtZW50LnR5cGUgPSAnbnVtYmVyJztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1RleHQoKSkge1xuICAgICAgZWxlbWVudC5yb3dzID0gMztcbiAgICAgIGVsZW1lbnQuYXV0b3NpemUgPSB0cnVlO1xuICAgICAgZWxlbWVudC5wbGFjZWhvbGRlciA9IHRoaXMuY29udHJvbC5kZXNjcmlwdGlvbjtcbiAgICB9XG5cbiAgICBjb25zdCBwbGFjZWhvbGRlciA9IHRoaXMuZ2V0UGxhY2Vob2xkZXIoKTtcblxuICAgIGlmICh0aGlzLmNvbnRyb2wuZW51bSB8fCAodGhpcy5jb250cm9sLml0ZW1zICYmIHRoaXMuY29udHJvbC5pdGVtcy5lbnVtKSkge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuY29udHJvbC5lbnVtIHx8IHRoaXMuY29udHJvbC5pdGVtcy5lbnVtO1xuICAgICAgaWYgKHRoaXMuY29udHJvbFsneC1zY2hlbWEtZm9ybSddICYmIHRoaXMuY29udHJvbFsneC1zY2hlbWEtZm9ybSddLnRpdGxlTWFwKSB7XG4gICAgICAgIGVsZW1lbnQub3B0aW9ucyA9IG9wdGlvbnMubWFwKCh2YWx1ZSkgPT4gKHtcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBsYWJlbDogdGhpcy5jb250cm9sWyd4LXNjaGVtYS1mb3JtJ10udGl0bGVNYXBbdmFsdWVdIHx8IHZhbHVlLFxuICAgICAgICB9KSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50Lm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY29udHJvbC50eXBlID09PSAnYXJyYXknKSB7XG4gICAgICAgIGVsZW1lbnQubXVsdGlwbGUgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5pc0NvZGVtaXJyb3IoKSkge1xuICAgICAgZWxlbWVudC5vcHRpb25zID0gdGhpcy5jb250cm9sWyd4LXNjaGVtYS1mb3JtJ10uY29kZW1pcnJvck9wdGlvbnM7XG4gICAgICBpZiAodGhpcy5jb250cm9sLmRlZmF1bHQgIT0gbnVsbCAmJiBlbGVtZW50Lm9wdGlvbnMudmFsdWUgPT0gbnVsbCkge1xuICAgICAgICBlbGVtZW50Lm9wdGlvbnMudmFsdWUgPSB0aGlzLmNvbnRyb2wuZGVmYXVsdDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNFeHByZXNzaW9uTGFuZ3VhZ2UoKSkge1xuICAgICAgZWxlbWVudC5vcHRpb25zID0ge307XG4gICAgICBlbGVtZW50LnJvd3MgPSAxO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc1Bhc3N3b3JkKCkpIHtcbiAgICAgIGVsZW1lbnQudHlwZSA9ICdwYXNzd29yZCc7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29udHJvbC5kZXNjcmlwdGlvbikge1xuICAgICAgZWxlbWVudC5kZXNjcmlwdGlvbiA9IHRoaXMuY29udHJvbC5kZXNjcmlwdGlvbjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb21wYWN0KSB7XG4gICAgICBlbGVtZW50LnBsYWNlaG9sZGVyID0gZWxlbWVudC5kZXNjcmlwdGlvbiB8fCBlbGVtZW50LmxhYmVsO1xuICAgICAgZWxlbWVudC5sYWJlbCA9IG51bGw7XG4gICAgICBlbGVtZW50LmRlc2NyaXB0aW9uID0gbnVsbDtcbiAgICAgIGVsZW1lbnQuY29tcGFjdCA9IHRoaXMuY29tcGFjdDtcbiAgICB9XG5cbiAgICBpZiAocGxhY2Vob2xkZXIgIT0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMuaXNFeHByZXNzaW9uTGFuZ3VhZ2UoKSB8fCB0aGlzLmlzQ29kZW1pcnJvcigpKSB7XG4gICAgICAgIGVsZW1lbnQub3B0aW9ucy5wbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudC5wbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihgJHtlbGVtZW50TmFtZX06aW5wdXRgLCB0aGlzLl9vbklucHV0LmJpbmQodGhpcykpO1xuXG4gICAgbGV0IGN1cnJlbnRUYXJnZXQ7XG4gICAgaWYgKHRoaXMuaXNBdXRvY29tcGxldGUoKSkge1xuICAgICAgY29uc3QgYXV0b2NvbXBsZXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZ3YtYXV0b2NvbXBsZXRlJyk7XG4gICAgICBhdXRvY29tcGxldGUubWluQ2hhcnMgPSAwO1xuICAgICAgYXV0b2NvbXBsZXRlLmZpbHRlciA9IHRydWU7XG4gICAgICBlbGVtZW50LmNsZWFyYWJsZSA9IHRydWU7XG4gICAgICBhdXRvY29tcGxldGUuaWQgPSB0aGlzLmlkO1xuICAgICAgYXV0b2NvbXBsZXRlLmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgICAgYXV0b2NvbXBsZXRlLmFkZEV2ZW50TGlzdGVuZXIoYGd2LWF1dG9jb21wbGV0ZTpzZWxlY3RgLCB0aGlzLl9vbklucHV0LmJpbmQodGhpcykpO1xuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGBndi1pbnB1dDpjbGVhcmAsIHRoaXMuX29uSW5wdXQuYmluZCh0aGlzKSk7XG4gICAgICBjdXJyZW50VGFyZ2V0ID0gYXV0b2NvbXBsZXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50VGFyZ2V0ID0gZWxlbWVudDtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29udHJvbFsneC1zY2hlbWEtZm9ybSddICE9IG51bGwpIHtcbiAgICAgIGRpc3BhdGNoQ3VzdG9tRXZlbnQodGhpcywgJ2NvbnRyb2wtcmVhZHknLCB7XG4gICAgICAgIGN1cnJlbnRUYXJnZXQsXG4gICAgICAgIGNvbnRyb2w6IHRoaXMsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnRUYXJnZXQ7XG4gIH1cblxuICBfb25JbnB1dChlKSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgbGV0IHZhbHVlID0gbnVsbDtcbiAgICBpZiAoZS50YXJnZXQudGFnTmFtZSA9PT0gJ0dWLUFVVE9DT01QTEVURScpIHtcbiAgICAgIHZhbHVlID0gZS5kZXRhaWwudmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gZS5kZXRhaWw7XG4gICAgfVxuICAgIGRpc3BhdGNoQ3VzdG9tRXZlbnQodGhpcywgJ2NoYW5nZScsIHsgdmFsdWUsIGN1cnJlbnRUYXJnZXQ6IGUudGFyZ2V0LCBjb250cm9sOiB0aGlzLmNvbnRyb2wgfSk7XG4gIH1cblxuICBnZXRDb250cm9scygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgLi4uQXJyYXkuZnJvbSh0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnZ3Ytc2NoZW1hLWZvcm0tY29udHJvbCcpKSxcbiAgICAgIC4uLkFycmF5LmZyb20odGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2d2LXNjaGVtYS1mb3JtLWNvbnRyb2wtYXJyYXknKSksXG4gICAgICAuLi5BcnJheS5mcm9tKHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdndi1zY2hlbWEtZm9ybS1jb250cm9sLW9iamVjdCcpKSxcbiAgICBdO1xuICB9XG5cbiAgZ2V0Q29udHJvbChpZCkge1xuICAgIGlmIChpZCA9PSBudWxsKSB7XG4gICAgICBpZCA9IHRoaXMuaWQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihgW2lkPVwiJHtpZH1cIl1gKTtcbiAgfVxuXG4gIF9zZXRWYWx1ZShjb250cm9sRWxlbWVudCkge1xuICAgIGlmICh0aGlzLnZhbHVlICE9IG51bGwgJiYgY29udHJvbEVsZW1lbnQgIT0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMuY29udHJvbC50eXBlID09PSAnYm9vbGVhbicgfHwgdGhpcy5jb250cm9sLnR5cGUgPT09ICdhcnJheScgfHwgdGhpcy5jb250cm9sLnR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnRyb2xFbGVtZW50LnZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRyb2xFbGVtZW50LnZhbHVlID0gdGhpcy52YWx1ZS50b1N0cmluZyA/IHRoaXMudmFsdWUudG9TdHJpbmcoKSA6IHRoaXMudmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb250cm9sRWxlbWVudDtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpIHtcbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCd2YWx1ZScpKSB7XG4gICAgICBQcm9taXNlLmFsbCh0aGlzLmdldENvbnRyb2xzKCkubWFwKChjb250cm9sKSA9PiBjb250cm9sLnVwZGF0ZUNvbXBsZXRlKSkudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuX3NldFZhbHVlKHRoaXMuZ2V0Q29udHJvbCgpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldFVwZGF0ZUNvbXBsZXRlKCkge1xuICAgIGF3YWl0IHN1cGVyLmdldFVwZGF0ZUNvbXBsZXRlKCk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5nZXRDb250cm9scygpLm1hcCgoZSkgPT4gZS51cGRhdGVDb21wbGV0ZSkpO1xuICB9XG5cbiAgZm9ybWF0RXJyb3JNZXNzYWdlKGVycm9yKSB7XG4gICAgbGV0IHRpdGxlO1xuICAgIGlmICh0aGlzLmNvbnRyb2wucHJvcGVydGllcyAhPSBudWxsICYmIHRoaXMuY29udHJvbC5wcm9wZXJ0aWVzW2Vycm9yLmFyZ3VtZW50XSAhPSBudWxsKSB7XG4gICAgICB0aXRsZSA9IHRoaXMuY29udHJvbC5wcm9wZXJ0aWVzW2Vycm9yLmFyZ3VtZW50XS50aXRsZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGl0bGUgPSB0aGlzLmNvbnRyb2wudGl0bGU7XG4gICAgfVxuICAgIGlmICh0aXRsZSkge1xuICAgICAgcmV0dXJuIGA8c3Bhbj4ke2Vycm9yLm1lc3NhZ2UucmVwbGFjZShlcnJvci5hcmd1bWVudCwgdGl0bGUpfTwvc3Bhbj5gO1xuICAgIH1cbiAgICByZXR1cm4gYDxzcGFuPiR7ZXJyb3IubWVzc2FnZX08L3NwYW4+YDtcbiAgfVxuXG4gIHNob3VsZFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcykge1xuICAgIGlmICh0aGlzLl9vYnNlcnZlZFByb3BlcnRpZXMuZmluZCgocHJvcGVydHkpID0+IGNoYW5nZWRQcm9wZXJ0aWVzLmhhcyhwcm9wZXJ0eSkpICE9IG51bGwpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZVByb3BlcnRpZXModGhpcy5nZXRDb250cm9sKCkpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ2Vycm9ycycpICYmIHRoaXMuZXJyb3JzICE9IG51bGwpIHtcbiAgICAgIC8vIFNldCBlcnJvcnMgdG8gY29tcGxleCBjb250cm9sc1xuICAgICAgdGhpcy5nZXRDb250cm9scygpLmZvckVhY2goKGNvbnRyb2wpID0+IHtcbiAgICAgICAgY29udHJvbC5lcnJvcnMgPSB0aGlzLmVycm9ycztcbiAgICAgIH0pO1xuXG4gICAgICAvLyBGaW5kIHNpbXBsZSBjb250cm9scyBhbmQgYXBwZW5kIGVycm9yIG1lc3NhZ2VcbiAgICAgIGNvbnN0IGVycm9yQ29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJy5mb3JtX19jb250cm9sLWVycm9yJyk7XG4gICAgICBlcnJvckNvbnRhaW5lci5mb3JFYWNoKChjb250YWluZXIpID0+IChjb250YWluZXIuaW5uZXJIVE1MID0gJycpKTtcbiAgICAgIHRoaXMuZXJyb3JzLmZvckVhY2goKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnN0IGtleSA9IGVycm9yLnByb3BlcnR5ID09PSAnaW5zdGFuY2UnID8gZXJyb3IuYXJndW1lbnQgOiBlcnJvci5wcm9wZXJ0eS5yZXBsYWNlKCdpbnN0YW5jZS4nLCAnJyk7XG4gICAgICAgIGNvbnN0IGVycm9yQ29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoYFtpZD1cIiR7a2V5fS1lcnJvclwiXWApO1xuICAgICAgICBpZiAoZXJyb3JDb250YWluZXIpIHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZ3YtaW5wdXQtbWVzc2FnZScpO1xuICAgICAgICAgIG1lc3NhZ2UuaW5uZXJIVE1MID0gdGhpcy5mb3JtYXRFcnJvck1lc3NhZ2UoZXJyb3IpO1xuICAgICAgICAgIG1lc3NhZ2UubGV2ZWwgPSAnd2Fybic7XG4gICAgICAgICAgZXJyb3JDb250YWluZXIuYXBwZW5kQ2hpbGQobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gc3VwZXIuc2hvdWxkVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgICR7dGhpcy5fcmVuZGVyQ29udHJvbCgpfVxuICAgICAgPGRpdiBjbGFzcz1cImZvcm1fX2NvbnRyb2wtZXJyb3JcIiBpZD1cIiR7dGhpcy5pZCArICctZXJyb3InfVwiPjwvZGl2PlxuICAgIGA7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHN0eWxlcygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgLy8gbGFuZ3VhZ2U9Q1NTXG4gICAgICBjc3NgXG4gICAgICAgIDpob3N0IHtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIG1hcmdpbjogdmFyKC0tZ3Ytc2NoZW1hLWZvcm0tY29udHJvbC0tbSwgMC40cmVtKTtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgfVxuXG4gICAgICAgIDpob3N0KFtoaWRkZW5dKSB7XG4gICAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgICAgIGhlaWdodDogMDtcbiAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICB9XG5cbiAgICAgICAgLmZvcm1fX2NvbnRyb2wtZGVzY3JpcHRpb24sXG4gICAgICAgIC5mb3JtX19jb250cm9sLWVycm9yIHtcbiAgICAgICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICAgIH1cblxuICAgICAgICAuZm9ybV9fY29udHJvbC1kZXNjcmlwdGlvbiB7XG4gICAgICAgICAgb3BhY2l0eTogMC44O1xuICAgICAgICB9XG5cbiAgICAgICAgLmZvcm1fX2NvbnRyb2wtbGFiZWwge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2Q5ZDlkOTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhYmVsIHtcbiAgICAgICAgICBtYXJnaW46IDAuMnJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5mb3JtX19jb250cm9sLWxhYmVsIGxhYmVsIHtcbiAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgLmZvcm1fX2NvbnRyb2wtYXJyYXksXG4gICAgICAgIC5mb3JtX19jb250cm9sLW9iamVjdCB7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICB9XG5cbiAgICAgICAgLmZvcm1fX2NvbnRyb2wtZW51bSB7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAvKmFsaWduLWl0ZW1zOiBmbGV4LWVuZDsqL1xuICAgICAgICB9XG5cbiAgICAgICAgLmZvcm1fX2NvbnRyb2wtYXJyYXkgZ3YtYnV0dG9uIHtcbiAgICAgICAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5mb3JtX19jb250cm9sIHtcbiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIH1cblxuICAgICAgICBndi1zZWxlY3QsXG4gICAgICAgIGd2LXNlbGVjdC1uYXRpdmUsXG4gICAgICAgIGd2LWlucHV0LFxuICAgICAgICBndi1jb2RlLFxuICAgICAgICBndi1zd2l0Y2gsXG4gICAgICAgIGd2LWV4cHJlc3Npb24tbGFuZ3VhZ2Uge1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgIG1hcmdpbjogMC4ycmVtIDA7XG4gICAgICAgIH1cblxuICAgICAgICBndi1zZWxlY3Q6aG92ZXIsXG4gICAgICAgIGd2LXNlbGVjdC1uYXRpdmU6aG92ZXIsXG4gICAgICAgIGd2LWF1dG9jb21wbGV0ZTpob3ZlciB7XG4gICAgICAgICAgei1pbmRleDogNzA7XG4gICAgICAgIH1cblxuICAgICAgICAuZXJyb3Ige1xuICAgICAgICAgIGNvbG9yOiB2YXIoLS1ndi10aGVtZS1jb2xvci1lcnJvciwgI2Y0NDMzNik7XG4gICAgICAgIH1cblxuICAgICAgICAud2FybmluZyB7XG4gICAgICAgICAgY29sb3I6IHZhcigtLWd2LXRoZW1lLWNvbG9yLXdhcm5pbmcsICNmZjk4MDApO1xuICAgICAgICB9XG4gICAgICBgLFxuICAgIF07XG4gIH1cbn1cblxud2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZSgnZ3Ytc2NoZW1hLWZvcm0tY29udHJvbCcsIEd2U2NoZW1hRm9ybUNvbnRyb2wpO1xuIl19
1
+ Object.defineProperty(exports,"__esModule",{value:!0}),exports.GvSchemaFormControl=void 0;const e=require("lit"),t=require("../lib/events");require("../atoms/gv-input"),require("../atoms/gv-input-message"),require("../atoms/gv-text"),require("../atoms/gv-select"),require("../atoms/gv-select-native"),require("../atoms/gv-switch"),require("../molecules/gv-code"),require("../molecules/gv-expression-language"),require("../molecules/gv-cron-editor"),require("../atoms/gv-autocomplete"),require("../organisms/gv-schema-form-array"),require("../organisms/gv-schema-form-control-object");const r=require("../lib/schema-form"),o=require("../mixins/update-after-browser");class s extends((0,o.UpdateAfterBrowser)(e.LitElement)){static get properties(){return{type:{type:String},id:{type:String,reflect:!0},name:{type:String,reflect:!0},required:{type:Boolean,reflect:!0},disabled:{type:Boolean,reflect:!0},readonly:{type:Boolean,reflect:!0},title:{type:String,reflect:!0},pattern:{type:String},control:{type:Object},errors:{type:Array},value:{type:Object,reflect:!0},skeleton:{type:Boolean,reflect:!0},hidden:{type:Boolean,reflect:!0},writeOnly:{type:Boolean,reflect:!0},compact:{type:Boolean}}}constructor(){super(),this._observedProperties=["disabled","readonly","required"]}isExpressionLanguage(){return this.control["x-schema-form"]&&null!=this.control["x-schema-form"]["expression-language"]}isCronExpression(){return this.control["x-schema-form"]&&!0===this.control["x-schema-form"]["cron-expression"]}isPassword(){return!0===this.control.writeOnly||this.control["x-schema-form"]&&null!=this.control["x-schema-form"].type&&"password"===this.control["x-schema-form"].type}getPlaceholder(){return this.control["x-schema-form"]&&this.control["x-schema-form"].placeholder?this.control["x-schema-form"].placeholder:null}isCodemirror(){return(0,r.isCodemirror)(this.control)}isObject(){return(0,r.isObject)(this.control)}isAutocomplete(){return this.control["x-schema-form"]&&null!=this.control["x-schema-form"].event&&"string"===this.control.type}isText(){return this.control["x-schema-form"]&&"text"===this.control["x-schema-form"].type&&"string"===this.control.type}getElementName(){return this.isObject()?"gv-schema-form-control-object":(this.control.enum||this.control.items&&this.control.items.enum)&&!this.isAutocomplete()?"array"===this.control.type?"gv-select":"gv-select-native":(0,r.isComplexArray)(this.control)?"gv-schema-form-array":"array"===this.control.type?"gv-button":"boolean"===this.control.type?"gv-switch":this.isExpressionLanguage()?"gv-expression-language":this.isCodemirror()?"gv-code":this.isCronExpression()?"gv-cron-editor":this.isText()?"gv-text":"gv-input"}_updateProperties(e){null!=e&&this._observedProperties.forEach((t=>{null!=this[t]&&(e[t]=this[t])}))}_renderControl(){const e=this.getElementName(),o=document.createElement(e);if(o.id=this.id,o.name=this.id,o.skeleton=this.skeleton,o.classList.add("form__control"),null==this.value&&null!=this.control.default&&(this.value=this.control.default,(0,t.dispatchCustomEvent)(this,"default-value",{value:this.value,currentTarget:o,control:this.control})),null!=this.value&&this._setValue(o),"object"===this.control.type?o.schema=this.control:(0,r.isComplexArray)(this.control)&&(o.schema=this.control.items),this._updateProperties(o),this.control.title)o.label=this.control.title,o.title=this.control.title;else{const e=this.id.split("."),t=e[e.length-1];isNaN(parseInt(t,10))&&(o.label=t,o.title=t)}this.control.pattern&&(o.pattern=this.control.pattern),"integer"===this.control.type&&(o.type="number"),this.isText()&&(o.rows=3,o.autosize=!0,o.placeholder=this.control.description);const s=this.getPlaceholder();if(this.control.enum||this.control.items&&this.control.items.enum){const e=this.control.enum||this.control.items.enum;this.control["x-schema-form"]&&this.control["x-schema-form"].titleMap?o.options=e.map((e=>({value:e,label:this.control["x-schema-form"].titleMap[e]||e}))):o.options=e,"array"===this.control.type&&(o.multiple=!0)}else this.isCodemirror()?(o.options=this.control["x-schema-form"].codemirrorOptions,null!=this.control.default&&null==o.options.value&&(o.options.value=this.control.default)):this.isExpressionLanguage()?(o.options={},o.rows=1):this.isPassword()&&(o.type="password");let i;if(this.control.description&&(o.description=this.control.description),this.compact&&(o.placeholder=o.description||o.label,o.label=null,o.description=null,o.compact=this.compact),null!=s&&(this.isExpressionLanguage()||this.isCodemirror()?o.options.placeholder=s:o.placeholder=s),o.addEventListener(`${e}:input`,this._onInput.bind(this)),this.isAutocomplete()){const e=document.createElement("gv-autocomplete");e.minChars=0,e.filter=!0,o.clearable=!0,e.id=this.id,e.appendChild(o),e.addEventListener("gv-autocomplete:select",this._onInput.bind(this)),o.addEventListener("gv-input:clear",this._onInput.bind(this)),i=e}else i=o;return null!=this.control["x-schema-form"]&&(0,t.dispatchCustomEvent)(this,"control-ready",{currentTarget:i,control:this}),i}_onInput(e){e.preventDefault(),e.stopPropagation();let r=null;r="GV-AUTOCOMPLETE"===e.target.tagName?e.detail.value:e.detail,(0,t.dispatchCustomEvent)(this,"change",{value:r,currentTarget:e.target,control:this.control})}getControls(){return[...Array.from(this.shadowRoot.querySelectorAll("gv-schema-form-control")),...Array.from(this.shadowRoot.querySelectorAll("gv-schema-form-control-array")),...Array.from(this.shadowRoot.querySelectorAll("gv-schema-form-control-object"))]}getControl(e){return null==e&&(e=this.id),this.shadowRoot.querySelector(`[id="${e}"]`)}_setValue(e){return null!=this.value&&null!=e&&("boolean"===this.control.type||"array"===this.control.type||"object"===this.control.type?e.value=this.value:e.value=this.value.toString?this.value.toString():this.value),e}async updated(e){e.has("value")&&Promise.all(this.getControls().map((e=>e.updateComplete))).then((()=>{this._setValue(this.getControl())}))}async getUpdateComplete(){await super.getUpdateComplete(),await Promise.all(this.getControls().map((e=>e.updateComplete)))}formatErrorMessage(e){let t;return t=null!=this.control.properties&&null!=this.control.properties[e.argument]?this.control.properties[e.argument].title:this.control.title,t?`<span>${e.message.replace(e.argument,t)}</span>`:`<span>${e.message}</span>`}shouldUpdate(e){if(null!=this._observedProperties.find((t=>e.has(t)))&&this._updateProperties(this.getControl()),e.has("errors")&&null!=this.errors){this.getControls().forEach((e=>{e.errors=this.errors}));return this.shadowRoot.querySelectorAll(".form__control-error").forEach((e=>e.innerHTML="")),this.errors.forEach((e=>{const t="instance"===e.property?e.argument:e.property.replace("instance.",""),r=this.shadowRoot.querySelector(`[id="${t}-error"]`);if(r){const t=document.createElement("gv-input-message");t.innerHTML=this.formatErrorMessage(e),t.level="warn",r.appendChild(t)}})),!1}return super.shouldUpdate(e)}render(){return e.html`${this._renderControl()}<div class="form__control-error" id="${this.id+"-error"}"></div>`}static get styles(){return[e.css`:host{box-sizing:border-box;margin:var(--gv-schema-form-control--m,.4rem);display:block}:host([hidden]){visibility:hidden;height:0;margin:0;padding:0;overflow:hidden}.form__control-description,.form__control-error{font-size:12px}.form__control-description{opacity:.8}.form__control-label{display:flex;flex-direction:row;border-bottom:1px solid #d9d9d9}label{margin:.2rem}.form__control-label label{flex:1;text-transform:capitalize}.form__control-array,.form__control-object{display:flex;flex-direction:column}.form__control-enum{display:flex}.form__control-array gv-button{align-self:flex-end}.form__control{position:relative}gv-code,gv-expression-language,gv-input,gv-select,gv-select-native,gv-switch{width:100%;margin:.2rem 0}gv-autocomplete:hover,gv-select-native:hover,gv-select:hover{z-index:70}.error{color:var(--gv-theme-color-error,#f44336)}.warning{color:var(--gv-theme-color-warning,#ff9800)}`]}}exports.GvSchemaFormControl=s,window.customElements.define("gv-schema-form-control",s);