cloud-ide-element 1.0.4 → 1.0.5

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 (54) hide show
  1. package/README.md +63 -271
  2. package/fesm2022/cloud-ide-element.mjs +614 -618
  3. package/fesm2022/cloud-ide-element.mjs.map +1 -1
  4. package/index.d.ts +1362 -3
  5. package/package.json +3 -30
  6. package/esm2022/cloud-ide-element.mjs +0 -5
  7. package/esm2022/lib/components/confirmation-modal/confirmation-modal.component.mjs +0 -182
  8. package/esm2022/lib/components/data-grid/data-grid.component.mjs +0 -1363
  9. package/esm2022/lib/components/data-grid/data-grid.types.mjs +0 -37
  10. package/esm2022/lib/components/dropdown/dropdown.component.mjs +0 -396
  11. package/esm2022/lib/components/global-notifications/global-notifications.component.mjs +0 -30
  12. package/esm2022/lib/components/json-editor/json-editor.component.mjs +0 -521
  13. package/esm2022/lib/components/skeleton-loader/skeleton-loader.component.mjs +0 -33
  14. package/esm2022/lib/components/toast-notification/toast-notification.component.mjs +0 -152
  15. package/esm2022/lib/elements/button/cide-ele-button.component.mjs +0 -249
  16. package/esm2022/lib/elements/file-input/file-input.component.mjs +0 -83
  17. package/esm2022/lib/elements/icon/icon.component.mjs +0 -26
  18. package/esm2022/lib/elements/input/input.component.mjs +0 -467
  19. package/esm2022/lib/elements/select/select.component.mjs +0 -471
  20. package/esm2022/lib/elements/spinner/spinner.component.mjs +0 -32
  21. package/esm2022/lib/elements/tab/cide-ele-tab.component.mjs +0 -74
  22. package/esm2022/lib/elements/textarea/textarea.component.mjs +0 -157
  23. package/esm2022/lib/services/confirmation.service.mjs +0 -151
  24. package/esm2022/lib/services/dropdown-manager.service.mjs +0 -93
  25. package/esm2022/lib/services/notification.service.mjs +0 -196
  26. package/esm2022/lib/utils/directives/resizer/resizer.directive.mjs +0 -231
  27. package/esm2022/lib/utils/directives/tooltip/tooltip.directive.mjs +0 -294
  28. package/esm2022/lib/utils/pipes/capitalize/capitalize.pipe.mjs +0 -38
  29. package/esm2022/lib/utils/services/elements/elements.service.mjs +0 -39
  30. package/esm2022/public-api.mjs +0 -31
  31. package/lib/components/confirmation-modal/confirmation-modal.component.d.ts +0 -16
  32. package/lib/components/data-grid/data-grid.component.d.ts +0 -244
  33. package/lib/components/data-grid/data-grid.types.d.ts +0 -146
  34. package/lib/components/dropdown/dropdown.component.d.ts +0 -75
  35. package/lib/components/global-notifications/global-notifications.component.d.ts +0 -5
  36. package/lib/components/json-editor/json-editor.component.d.ts +0 -116
  37. package/lib/components/skeleton-loader/skeleton-loader.component.d.ts +0 -11
  38. package/lib/components/toast-notification/toast-notification.component.d.ts +0 -13
  39. package/lib/elements/button/cide-ele-button.component.d.ts +0 -85
  40. package/lib/elements/file-input/file-input.component.d.ts +0 -25
  41. package/lib/elements/icon/icon.component.d.ts +0 -9
  42. package/lib/elements/input/input.component.d.ts +0 -182
  43. package/lib/elements/select/select.component.d.ts +0 -91
  44. package/lib/elements/spinner/spinner.component.d.ts +0 -19
  45. package/lib/elements/tab/cide-ele-tab.component.d.ts +0 -26
  46. package/lib/elements/textarea/textarea.component.d.ts +0 -47
  47. package/lib/services/confirmation.service.d.ts +0 -65
  48. package/lib/services/dropdown-manager.service.d.ts +0 -22
  49. package/lib/services/notification.service.d.ts +0 -81
  50. package/lib/utils/directives/resizer/resizer.directive.d.ts +0 -44
  51. package/lib/utils/directives/tooltip/tooltip.directive.d.ts +0 -43
  52. package/lib/utils/pipes/capitalize/capitalize.pipe.d.ts +0 -7
  53. package/lib/utils/services/elements/elements.service.d.ts +0 -12
  54. package/public-api.d.ts +0 -22
@@ -1,521 +0,0 @@
1
- import { Component, Input, Output, EventEmitter, signal, computed, inject, DestroyRef, forwardRef, viewChild } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
- import { FormsModule } from '@angular/forms';
5
- import * as i0 from "@angular/core";
6
- export class CideEleJsonEditorComponent {
7
- constructor() {
8
- this.required = false;
9
- this.disabled = signal(false);
10
- this.showCharacterCount = false;
11
- this.config = {};
12
- this.configSignal = signal({});
13
- // Outputs
14
- this.valueChange = new EventEmitter();
15
- this.objectChange = new EventEmitter();
16
- this.errorsChange = new EventEmitter();
17
- this.validChange = new EventEmitter();
18
- // ViewChild
19
- this.jsonTextarea = viewChild.required('jsonTextarea');
20
- // Dependency injection
21
- this.destroyRef = inject(DestroyRef);
22
- // Internal state
23
- this.jsonString = signal('');
24
- this.jsonObject = signal(null);
25
- this.errors = signal([]);
26
- this.editorId = `json-editor-${Math.random().toString(36).substr(2, 9)}`;
27
- // Computed values
28
- this.hasErrors = computed(() => this.errors().length > 0);
29
- this.isValid = computed(() => !this.hasErrors() && this.jsonObject() !== null);
30
- this.lineNumbers = computed(() => {
31
- const lines = this.jsonString().split('\n');
32
- return Array.from({ length: Math.max(lines.length, 1) }, (_, i) => i + 1);
33
- });
34
- this.containerClass = computed(() => {
35
- const classes = ['tw-w-full'];
36
- if (this.disabled()) {
37
- classes.push('tw-opacity-50');
38
- }
39
- return classes.join(' ');
40
- });
41
- // Default configuration
42
- this.defaultConfig = {
43
- syntaxHighlighting: true,
44
- showLineNumbers: true,
45
- autoFormat: true,
46
- validateOnChange: true,
47
- theme: 'light',
48
- minHeight: 120,
49
- maxHeight: 400,
50
- placeholder: 'Enter JSON configuration...',
51
- readOnly: false,
52
- showErrors: true
53
- };
54
- this.onChange = () => { };
55
- this.onTouched = () => { };
56
- }
57
- ngOnInit() {
58
- // Merge default config with input config
59
- const mergedConfig = { ...this.defaultConfig, ...this.config };
60
- this.configSignal.set(mergedConfig);
61
- // Initial validation
62
- if (mergedConfig.validateOnChange && this.jsonString()) {
63
- this.validateJson();
64
- }
65
- }
66
- /**
67
- * Handle input changes
68
- */
69
- onInput(event) {
70
- const target = event.target;
71
- const value = target.value;
72
- this.jsonString.set(value);
73
- this.valueChange.emit(value);
74
- // Call ControlValueAccessor onChange callback
75
- this.onChange(value);
76
- if (this.configSignal().validateOnChange) {
77
- this.validateJson();
78
- }
79
- this.parseJson(value);
80
- }
81
- /**
82
- * Handle blur event
83
- */
84
- onBlur() {
85
- // Call ControlValueAccessor onTouched callback
86
- this.onTouched();
87
- if (this.configSignal().autoFormat && this.isValid()) {
88
- this.formatJson();
89
- }
90
- }
91
- /**
92
- * Parse JSON string and emit object
93
- */
94
- parseJson(jsonStr) {
95
- if (!jsonStr.trim()) {
96
- this.jsonObject.set(null);
97
- this.objectChange.emit(null);
98
- return;
99
- }
100
- try {
101
- const parsed = JSON.parse(jsonStr);
102
- this.jsonObject.set(parsed);
103
- this.objectChange.emit(parsed);
104
- }
105
- catch (error) {
106
- // Error will be handled by validateJson
107
- this.jsonObject.set(null);
108
- this.objectChange.emit(null);
109
- }
110
- }
111
- /**
112
- * Validate JSON and update errors
113
- */
114
- validateJson() {
115
- const jsonStr = this.jsonString();
116
- const newErrors = [];
117
- if (!jsonStr.trim()) {
118
- this.errors.set(newErrors);
119
- this.errorsChange.emit(newErrors);
120
- this.validChange.emit(true);
121
- return;
122
- }
123
- try {
124
- JSON.parse(jsonStr);
125
- // JSON is valid
126
- this.errors.set(newErrors);
127
- this.errorsChange.emit(newErrors);
128
- this.validChange.emit(true);
129
- }
130
- catch (error) {
131
- // Parse error - extract line and column information
132
- const errorMessage = error.message;
133
- const lineMatch = errorMessage.match(/position (\d+)/);
134
- if (lineMatch) {
135
- const position = parseInt(lineMatch[1]);
136
- const lines = jsonStr.substring(0, position).split('\n');
137
- const line = lines.length;
138
- const column = lines[lines.length - 1].length + 1;
139
- newErrors.push({
140
- line,
141
- column,
142
- message: 'Invalid JSON syntax',
143
- type: 'syntax'
144
- });
145
- }
146
- else {
147
- newErrors.push({
148
- line: 1,
149
- column: 1,
150
- message: 'Invalid JSON format',
151
- type: 'syntax'
152
- });
153
- }
154
- this.errors.set(newErrors);
155
- this.errorsChange.emit(newErrors);
156
- this.validChange.emit(false);
157
- }
158
- }
159
- /**
160
- * Format JSON with proper indentation
161
- */
162
- formatJson() {
163
- if (!this.jsonString().trim()) {
164
- return;
165
- }
166
- try {
167
- const parsed = JSON.parse(this.jsonString());
168
- const formatted = JSON.stringify(parsed, null, 2);
169
- this.jsonString.set(formatted);
170
- this.valueChange.emit(formatted);
171
- this.jsonObject.set(parsed);
172
- this.objectChange.emit(parsed);
173
- this.errors.set([]);
174
- this.errorsChange.emit([]);
175
- this.validChange.emit(true);
176
- }
177
- catch (error) {
178
- // Don't format if JSON is invalid
179
- console.warn('Cannot format invalid JSON');
180
- }
181
- }
182
- /**
183
- * Check if there's an error on a specific line
184
- */
185
- hasErrorOnLine(line) {
186
- return this.errors().some(error => error.line === line);
187
- }
188
- /**
189
- * Get error ID for accessibility
190
- */
191
- errorId() {
192
- return `${this.editorId}-errors`;
193
- }
194
- /**
195
- * Focus the editor
196
- */
197
- focus() {
198
- this.jsonTextarea().nativeElement.focus();
199
- }
200
- /**
201
- * Clear the editor
202
- */
203
- clear() {
204
- this.jsonString.set('');
205
- this.jsonObject.set(null);
206
- this.errors.set([]);
207
- this.valueChange.emit('');
208
- this.objectChange.emit(null);
209
- this.errorsChange.emit([]);
210
- this.validChange.emit(true);
211
- }
212
- /**
213
- * Get current JSON object
214
- */
215
- getValue() {
216
- return this.jsonObject();
217
- }
218
- /**
219
- * Get current JSON string
220
- */
221
- getStringValue() {
222
- return this.jsonString();
223
- }
224
- /**
225
- * Check if JSON is valid
226
- */
227
- isValidJson() {
228
- return this.isValid();
229
- }
230
- /**
231
- * Get validation errors
232
- */
233
- getErrors() {
234
- return this.errors();
235
- }
236
- // ControlValueAccessor methods
237
- writeValue(value) {
238
- if (value === null || value === undefined) {
239
- this.jsonString.set('');
240
- this.jsonObject.set(null);
241
- }
242
- else if (typeof value === 'string') {
243
- this.jsonString.set(value);
244
- this.parseJson(value);
245
- }
246
- else if (typeof value === 'object') {
247
- this.jsonObject.set(value);
248
- this.jsonString.set(JSON.stringify(value, null, 2));
249
- }
250
- }
251
- registerOnChange(fn) {
252
- this.onChange = fn;
253
- }
254
- registerOnTouched(fn) {
255
- this.onTouched = fn;
256
- }
257
- setDisabledState(isDisabled) {
258
- this.disabled.set(isDisabled);
259
- }
260
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideEleJsonEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
261
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: CideEleJsonEditorComponent, isStandalone: true, selector: "cide-ele-json-editor", inputs: { label: "label", helperText: "helperText", required: "required", disabled: "disabled", showCharacterCount: "showCharacterCount", config: "config" }, outputs: { valueChange: "valueChange", objectChange: "objectChange", errorsChange: "errorsChange", validChange: "validChange" }, providers: [
262
- {
263
- provide: NG_VALUE_ACCESSOR,
264
- useExisting: forwardRef(() => CideEleJsonEditorComponent),
265
- multi: true
266
- }
267
- ], viewQueries: [{ propertyName: "jsonTextarea", first: true, predicate: ["jsonTextarea"], descendants: true, isSignal: true }], ngImport: i0, template: `
268
- <div class="tw-relative tw-w-full" [class]="containerClass()">
269
- <!-- Label -->
270
- @if (label) {
271
- <label
272
- [for]="editorId"
273
- class="tw-block tw-text-sm tw-font-medium tw-text-gray-700 tw-mb-2"
274
- [class.tw-text-red-600]="hasErrors()">
275
- {{ label }}
276
- @if (required) {
277
- <span class="tw-text-red-500 tw-ml-1">*</span>
278
- }
279
- </label>
280
- }
281
-
282
- <!-- Editor Container -->
283
- <div
284
- class="tw-relative tw-border tw-rounded-md tw-bg-white tw-overflow-hidden"
285
- [class.tw-border-red-300]="hasErrors()"
286
- [class.tw-border-gray-300]="!hasErrors()"
287
- [class.tw-focus-within:tw-border-blue-500]="!hasErrors()"
288
- [class.tw-focus-within:tw-ring-1]="!hasErrors()"
289
- [class.tw-focus-within:tw-ring-blue-500]="!hasErrors()"
290
- [class.tw-opacity-50]="disabled()"
291
- [class.tw-cursor-not-allowed]="disabled()">
292
-
293
- <!-- Line Numbers -->
294
- @if (configSignal().showLineNumbers) {
295
- <div
296
- class="tw-absolute tw-left-0 tw-top-0 tw-bottom-0 tw-w-12 tw-bg-gray-50 tw-border-r tw-border-gray-200 tw-text-xs tw-text-gray-500 tw-font-mono tw-select-none tw-overflow-hidden"
297
- [class.tw-bg-gray-800]="configSignal().theme === 'dark'"
298
- [class.tw-border-gray-600]="configSignal().theme === 'dark'"
299
- [class.tw-text-gray-400]="configSignal().theme === 'dark'">
300
- @for (line of lineNumbers(); track line) {
301
- <div
302
- class="tw-px-2 tw-py-1 tw-text-right"
303
- [class.tw-bg-red-100]="hasErrorOnLine(line)"
304
- [class.tw-text-red-600]="hasErrorOnLine(line)"
305
- [class.tw-bg-red-900]="configSignal().theme === 'dark' && hasErrorOnLine(line)"
306
- [class.tw-text-red-400]="configSignal().theme === 'dark' && hasErrorOnLine(line)">
307
- {{ line }}
308
- </div>
309
- }
310
- </div>
311
- }
312
-
313
- <!-- Textarea -->
314
- <textarea
315
- #jsonTextarea
316
- [id]="editorId"
317
- [value]="jsonString()"
318
- (input)="onInput($event)"
319
- (blur)="onBlur()"
320
- [placeholder]="configSignal().placeholder || 'Enter JSON configuration...'"
321
- [readonly]="configSignal().readOnly || disabled()"
322
- [disabled]="disabled()"
323
- class="tw-w-full tw-p-3 tw-text-sm tw-font-mono tw-leading-relaxed tw-resize-none tw-outline-none tw-bg-transparent"
324
- [class.tw-pl-12]="configSignal().showLineNumbers"
325
- [class.tw-text-gray-900]="configSignal().theme === 'light'"
326
- [class.tw-text-gray-100]="configSignal().theme === 'dark'"
327
- [class.tw-bg-gray-900]="configSignal().theme === 'dark'"
328
- [style.min-height.px]="configSignal().minHeight || 120"
329
- [style.max-height.px]="configSignal().maxHeight || 400"
330
- [attr.aria-describedby]="errorId()"
331
- [attr.aria-invalid]="hasErrors()">
332
- </textarea>
333
-
334
- <!-- Format Button -->
335
- @if (!configSignal().readOnly && !disabled()) {
336
- <button
337
- type="button"
338
- (click)="formatJson()"
339
- class="tw-absolute tw-top-2 tw-right-2 tw-p-1 tw-text-gray-400 hover:tw-text-gray-600 tw-rounded tw-transition-colors"
340
- [class.tw-text-gray-500]="configSignal().theme === 'dark'"
341
- [class.hover:tw-text-gray-300]="configSignal().theme === 'dark'"
342
- title="Format JSON">
343
- <svg class="tw-w-4 tw-h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
344
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h7"></path>
345
- </svg>
346
- </button>
347
- }
348
- </div>
349
-
350
- <!-- Helper Text -->
351
- @if (helperText && !hasErrors()) {
352
- <p class="tw-mt-1 tw-text-xs tw-text-gray-500">{{ helperText }}</p>
353
- }
354
-
355
- <!-- Error Messages -->
356
- @if (configSignal().showErrors && hasErrors()) {
357
- <div [id]="errorId()" class="tw-mt-1 tw-space-y-1">
358
- @for (error of errors(); track error.line + '-' + error.column) {
359
- <p class="tw-text-xs tw-text-red-600 tw-flex tw-items-start tw-gap-1">
360
- <svg class="tw-w-3 tw-h-3 tw-mt-0.5 tw-flex-shrink-0" fill="currentColor" viewBox="0 0 20 20">
361
- <path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z" clip-rule="evenodd"></path>
362
- </svg>
363
- <span>
364
- Line {{ error.line }}, Column {{ error.column }}: {{ error.message }}
365
- </span>
366
- </p>
367
- }
368
- </div>
369
- }
370
-
371
- <!-- Character Count -->
372
- @if (showCharacterCount) {
373
- <p class="tw-mt-1 tw-text-xs tw-text-gray-400 tw-text-right">
374
- {{ jsonString().length }} characters
375
- </p>
376
- }
377
- </div>
378
- `, isInline: true, styles: [":host{display:block}textarea{font-family:Monaco,Menlo,Ubuntu Mono,monospace;tab-size:2}textarea:focus{box-shadow:none}.tw-cursor-not-allowed{cursor:not-allowed}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }] }); }
379
- }
380
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideEleJsonEditorComponent, decorators: [{
381
- type: Component,
382
- args: [{ selector: 'cide-ele-json-editor', standalone: true, imports: [CommonModule, FormsModule], template: `
383
- <div class="tw-relative tw-w-full" [class]="containerClass()">
384
- <!-- Label -->
385
- @if (label) {
386
- <label
387
- [for]="editorId"
388
- class="tw-block tw-text-sm tw-font-medium tw-text-gray-700 tw-mb-2"
389
- [class.tw-text-red-600]="hasErrors()">
390
- {{ label }}
391
- @if (required) {
392
- <span class="tw-text-red-500 tw-ml-1">*</span>
393
- }
394
- </label>
395
- }
396
-
397
- <!-- Editor Container -->
398
- <div
399
- class="tw-relative tw-border tw-rounded-md tw-bg-white tw-overflow-hidden"
400
- [class.tw-border-red-300]="hasErrors()"
401
- [class.tw-border-gray-300]="!hasErrors()"
402
- [class.tw-focus-within:tw-border-blue-500]="!hasErrors()"
403
- [class.tw-focus-within:tw-ring-1]="!hasErrors()"
404
- [class.tw-focus-within:tw-ring-blue-500]="!hasErrors()"
405
- [class.tw-opacity-50]="disabled()"
406
- [class.tw-cursor-not-allowed]="disabled()">
407
-
408
- <!-- Line Numbers -->
409
- @if (configSignal().showLineNumbers) {
410
- <div
411
- class="tw-absolute tw-left-0 tw-top-0 tw-bottom-0 tw-w-12 tw-bg-gray-50 tw-border-r tw-border-gray-200 tw-text-xs tw-text-gray-500 tw-font-mono tw-select-none tw-overflow-hidden"
412
- [class.tw-bg-gray-800]="configSignal().theme === 'dark'"
413
- [class.tw-border-gray-600]="configSignal().theme === 'dark'"
414
- [class.tw-text-gray-400]="configSignal().theme === 'dark'">
415
- @for (line of lineNumbers(); track line) {
416
- <div
417
- class="tw-px-2 tw-py-1 tw-text-right"
418
- [class.tw-bg-red-100]="hasErrorOnLine(line)"
419
- [class.tw-text-red-600]="hasErrorOnLine(line)"
420
- [class.tw-bg-red-900]="configSignal().theme === 'dark' && hasErrorOnLine(line)"
421
- [class.tw-text-red-400]="configSignal().theme === 'dark' && hasErrorOnLine(line)">
422
- {{ line }}
423
- </div>
424
- }
425
- </div>
426
- }
427
-
428
- <!-- Textarea -->
429
- <textarea
430
- #jsonTextarea
431
- [id]="editorId"
432
- [value]="jsonString()"
433
- (input)="onInput($event)"
434
- (blur)="onBlur()"
435
- [placeholder]="configSignal().placeholder || 'Enter JSON configuration...'"
436
- [readonly]="configSignal().readOnly || disabled()"
437
- [disabled]="disabled()"
438
- class="tw-w-full tw-p-3 tw-text-sm tw-font-mono tw-leading-relaxed tw-resize-none tw-outline-none tw-bg-transparent"
439
- [class.tw-pl-12]="configSignal().showLineNumbers"
440
- [class.tw-text-gray-900]="configSignal().theme === 'light'"
441
- [class.tw-text-gray-100]="configSignal().theme === 'dark'"
442
- [class.tw-bg-gray-900]="configSignal().theme === 'dark'"
443
- [style.min-height.px]="configSignal().minHeight || 120"
444
- [style.max-height.px]="configSignal().maxHeight || 400"
445
- [attr.aria-describedby]="errorId()"
446
- [attr.aria-invalid]="hasErrors()">
447
- </textarea>
448
-
449
- <!-- Format Button -->
450
- @if (!configSignal().readOnly && !disabled()) {
451
- <button
452
- type="button"
453
- (click)="formatJson()"
454
- class="tw-absolute tw-top-2 tw-right-2 tw-p-1 tw-text-gray-400 hover:tw-text-gray-600 tw-rounded tw-transition-colors"
455
- [class.tw-text-gray-500]="configSignal().theme === 'dark'"
456
- [class.hover:tw-text-gray-300]="configSignal().theme === 'dark'"
457
- title="Format JSON">
458
- <svg class="tw-w-4 tw-h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
459
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h7"></path>
460
- </svg>
461
- </button>
462
- }
463
- </div>
464
-
465
- <!-- Helper Text -->
466
- @if (helperText && !hasErrors()) {
467
- <p class="tw-mt-1 tw-text-xs tw-text-gray-500">{{ helperText }}</p>
468
- }
469
-
470
- <!-- Error Messages -->
471
- @if (configSignal().showErrors && hasErrors()) {
472
- <div [id]="errorId()" class="tw-mt-1 tw-space-y-1">
473
- @for (error of errors(); track error.line + '-' + error.column) {
474
- <p class="tw-text-xs tw-text-red-600 tw-flex tw-items-start tw-gap-1">
475
- <svg class="tw-w-3 tw-h-3 tw-mt-0.5 tw-flex-shrink-0" fill="currentColor" viewBox="0 0 20 20">
476
- <path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z" clip-rule="evenodd"></path>
477
- </svg>
478
- <span>
479
- Line {{ error.line }}, Column {{ error.column }}: {{ error.message }}
480
- </span>
481
- </p>
482
- }
483
- </div>
484
- }
485
-
486
- <!-- Character Count -->
487
- @if (showCharacterCount) {
488
- <p class="tw-mt-1 tw-text-xs tw-text-gray-400 tw-text-right">
489
- {{ jsonString().length }} characters
490
- </p>
491
- }
492
- </div>
493
- `, providers: [
494
- {
495
- provide: NG_VALUE_ACCESSOR,
496
- useExisting: forwardRef(() => CideEleJsonEditorComponent),
497
- multi: true
498
- }
499
- ], styles: [":host{display:block}textarea{font-family:Monaco,Menlo,Ubuntu Mono,monospace;tab-size:2}textarea:focus{box-shadow:none}.tw-cursor-not-allowed{cursor:not-allowed}\n"] }]
500
- }], propDecorators: { label: [{
501
- type: Input
502
- }], helperText: [{
503
- type: Input
504
- }], required: [{
505
- type: Input
506
- }], disabled: [{
507
- type: Input
508
- }], showCharacterCount: [{
509
- type: Input
510
- }], config: [{
511
- type: Input
512
- }], valueChange: [{
513
- type: Output
514
- }], objectChange: [{
515
- type: Output
516
- }], errorsChange: [{
517
- type: Output
518
- }], validChange: [{
519
- type: Output
520
- }] } });
521
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xvdWQtaWRlLWVsZW1lbnQvc3JjL2xpYi9jb21wb25lbnRzL2pzb24tZWRpdG9yL2pzb24tZWRpdG9yLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFzQixNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4SixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUE4SzdDLE1BQU0sT0FBTywwQkFBMEI7SUE5SXZDO1FBa0pXLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsYUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6Qix1QkFBa0IsR0FBRyxLQUFLLENBQUM7UUFDM0IsV0FBTSxHQUFxQixFQUFFLENBQUM7UUFDdkMsaUJBQVksR0FBRyxNQUFNLENBQW1CLEVBQUUsQ0FBQyxDQUFDO1FBRTVDLFVBQVU7UUFDQSxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDekMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBaUIsQ0FBQztRQUNqRCxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFxQixDQUFDO1FBQ3JELGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUVwRCxZQUFZO1FBQ1osaUJBQVksR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFrQyxjQUFjLENBQUMsQ0FBQztRQUVuRix1QkFBdUI7UUFD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Ozs7Ozs7Ozs7R0ErR1QsYUFtQlU7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsMkJBQTJCLENBQUM7NEJBQ3pELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGOzhCQUlRLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUlJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25Jbml0LCBFbGVtZW50UmVmLCBzaWduYWwsIGNvbXB1dGVkLCBpbmplY3QsIERlc3Ryb3lSZWYsIGZvcndhcmRSZWYsIHZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBKc29uRWRpdG9yQ29uZmlnIHtcclxuICAvKiogRW5hYmxlIHN5bnRheCBoaWdobGlnaHRpbmcgKi9cclxuICBzeW50YXhIaWdobGlnaHRpbmc/OiBib29sZWFuO1xyXG4gIC8qKiBFbmFibGUgbGluZSBudW1iZXJzICovXHJcbiAgc2hvd0xpbmVOdW1iZXJzPzogYm9vbGVhbjtcclxuICAvKiogRW5hYmxlIGF1dG8tZm9ybWF0dGluZyAqL1xyXG4gIGF1dG9Gb3JtYXQ/OiBib29sZWFuO1xyXG4gIC8qKiBFbmFibGUgdmFsaWRhdGlvbiAqL1xyXG4gIHZhbGlkYXRlT25DaGFuZ2U/OiBib29sZWFuO1xyXG4gIC8qKiBUaGVtZSBmb3IgdGhlIGVkaXRvciAqL1xyXG4gIHRoZW1lPzogJ2xpZ2h0JyB8ICdkYXJrJztcclxuICAvKiogTWluaW11bSBoZWlnaHQgaW4gcGl4ZWxzICovXHJcbiAgbWluSGVpZ2h0PzogbnVtYmVyO1xyXG4gIC8qKiBNYXhpbXVtIGhlaWdodCBpbiBwaXhlbHMgKi9cclxuICBtYXhIZWlnaHQ/OiBudW1iZXI7XHJcbiAgLyoqIFBsYWNlaG9sZGVyIHRleHQgKi9cclxuICBwbGFjZWhvbGRlcj86IHN0cmluZztcclxuICAvKiogUmVhZC1vbmx5IG1vZGUgKi9cclxuICByZWFkT25seT86IGJvb2xlYW47XHJcbiAgLyoqIFNob3cgZXJyb3IgbWVzc2FnZXMgKi9cclxuICBzaG93RXJyb3JzPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBKc29uRWRpdG9yRXJyb3Ige1xyXG4gIGxpbmU6IG51bWJlcjtcclxuICBjb2x1bW46IG51bWJlcjtcclxuICBtZXNzYWdlOiBzdHJpbmc7XHJcbiAgdHlwZTogJ3N5bnRheCcgfCAndmFsaWRhdGlvbic7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY2lkZS1lbGUtanNvbi1lZGl0b3InLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGVdLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8ZGl2IGNsYXNzPVwidHctcmVsYXRpdmUgdHctdy1mdWxsXCIgW2NsYXNzXT1cImNvbnRhaW5lckNsYXNzKClcIj5cclxuICAgICAgPCEtLSBMYWJlbCAtLT5cclxuICAgICAgQGlmIChsYWJlbCkge1xyXG4gICAgICAgIDxsYWJlbCBcclxuICAgICAgICAgIFtmb3JdPVwiZWRpdG9ySWRcIiBcclxuICAgICAgICAgIGNsYXNzPVwidHctYmxvY2sgdHctdGV4dC1zbSB0dy1mb250LW1lZGl1bSB0dy10ZXh0LWdyYXktNzAwIHR3LW1iLTJcIlxyXG4gICAgICAgICAgW2NsYXNzLnR3LXRleHQtcmVkLTYwMF09XCJoYXNFcnJvcnMoKVwiPlxyXG4gICAgICAgICAge3sgbGFiZWwgfX1cclxuICAgICAgICAgIEBpZiAocmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0dy10ZXh0LXJlZC01MDAgdHctbWwtMVwiPio8L3NwYW4+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgfVxyXG5cclxuICAgICAgPCEtLSBFZGl0b3IgQ29udGFpbmVyIC0tPlxyXG4gICAgICA8ZGl2IFxyXG4gICAgICAgIGNsYXNzPVwidHctcmVsYXRpdmUgdHctYm9yZGVyIHR3LXJvdW5kZWQtbWQgdHctYmctd2hpdGUgdHctb3ZlcmZsb3ctaGlkZGVuXCJcclxuICAgICAgICBbY2xhc3MudHctYm9yZGVyLXJlZC0zMDBdPVwiaGFzRXJyb3JzKClcIlxyXG4gICAgICAgIFtjbGFzcy50dy1ib3JkZXItZ3JheS0zMDBdPVwiIWhhc0Vycm9ycygpXCJcclxuICAgICAgICBbY2xhc3MudHctZm9jdXMtd2l0aGluOnR3LWJvcmRlci1ibHVlLTUwMF09XCIhaGFzRXJyb3JzKClcIlxyXG4gICAgICAgIFtjbGFzcy50dy1mb2N1cy13aXRoaW46dHctcmluZy0xXT1cIiFoYXNFcnJvcnMoKVwiXHJcbiAgICAgICAgW2NsYXNzLnR3LWZvY3VzLXdpdGhpbjp0dy1yaW5nLWJsdWUtNTAwXT1cIiFoYXNFcnJvcnMoKVwiXHJcbiAgICAgICAgW2NsYXNzLnR3LW9wYWNpdHktNTBdPVwiZGlzYWJsZWQoKVwiXHJcbiAgICAgICAgW2NsYXNzLnR3LWN1cnNvci1ub3QtYWxsb3dlZF09XCJkaXNhYmxlZCgpXCI+XHJcbiAgICAgICAgXHJcbiAgICAgICAgPCEtLSBMaW5lIE51bWJlcnMgLS0+XHJcbiAgICAgICAgQGlmIChjb25maWdTaWduYWwoKS5zaG93TGluZU51bWJlcnMpIHtcclxuICAgICAgICAgIDxkaXYgXHJcbiAgICAgICAgICAgIGNsYXNzPVwidHctYWJzb2x1dGUgdHctbGVmdC0wIHR3LXRvcC0wIHR3LWJvdHRvbS0wIHR3LXctMTIgdHctYmctZ3JheS01MCB0dy1ib3JkZXItciB0dy1ib3JkZXItZ3JheS0yMDAgdHctdGV4dC14cyB0dy10ZXh0LWdyYXktNTAwIHR3LWZvbnQtbW9ubyB0dy1zZWxlY3Qtbm9uZSB0dy1vdmVyZmxvdy1oaWRkZW5cIlxyXG4gICAgICAgICAgICBbY2xhc3MudHctYmctZ3JheS04MDBdPVwiY29uZmlnU2lnbmFsKCkudGhlbWUgPT09ICdkYXJrJ1wiXHJcbiAgICAgICAgICAgIFtjbGFzcy50dy1ib3JkZXItZ3JheS02MDBdPVwiY29uZmlnU2lnbmFsKCkudGhlbWUgPT09ICdkYXJrJ1wiXHJcbiAgICAgICAgICAgIFtjbGFzcy50dy10ZXh0LWdyYXktNDAwXT1cImNvbmZpZ1NpZ25hbCgpLnRoZW1lID09PSAnZGFyaydcIj5cclxuICAgICAgICAgICAgQGZvciAobGluZSBvZiBsaW5lTnVtYmVycygpOyB0cmFjayBsaW5lKSB7XHJcbiAgICAgICAgICAgICAgPGRpdiBcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwidHctcHgtMiB0dy1weS0xIHR3LXRleHQtcmlnaHRcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzLnR3LWJnLXJlZC0xMDBdPVwiaGFzRXJyb3JPbkxpbmUobGluZSlcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzLnR3LXRleHQtcmVkLTYwMF09XCJoYXNFcnJvck9uTGluZShsaW5lKVwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MudHctYmctcmVkLTkwMF09XCJjb25maWdTaWduYWwoKS50aGVtZSA9PT0gJ2RhcmsnICYmIGhhc0Vycm9yT25MaW5lKGxpbmUpXCJcclxuICAgICAgICAgICAgICAgIFtjbGFzcy50dy10ZXh0LXJlZC00MDBdPVwiY29uZmlnU2lnbmFsKCkudGhlbWUgPT09ICdkYXJrJyAmJiBoYXNFcnJvck9uTGluZShsaW5lKVwiPlxyXG4gICAgICAgICAgICAgICAge3sgbGluZSB9fVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIDwhLS0gVGV4dGFyZWEgLS0+XHJcbiAgICAgICAgPHRleHRhcmVhXHJcbiAgICAgICAgICAjanNvblRleHRhcmVhXHJcbiAgICAgICAgICBbaWRdPVwiZWRpdG9ySWRcIlxyXG4gICAgICAgICAgW3ZhbHVlXT1cImpzb25TdHJpbmcoKVwiXHJcbiAgICAgICAgICAoaW5wdXQpPVwib25JbnB1dCgkZXZlbnQpXCJcclxuICAgICAgICAgIChibHVyKT1cIm9uQmx1cigpXCJcclxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJjb25maWdTaWduYWwoKS5wbGFjZWhvbGRlciB8fCAnRW50ZXIgSlNPTiBjb25maWd1cmF0aW9uLi4uJ1wiXHJcbiAgICAgICAgICBbcmVhZG9ubHldPVwiY29uZmlnU2lnbmFsKCkucmVhZE9ubHkgfHwgZGlzYWJsZWQoKVwiXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQoKVwiXHJcbiAgICAgICAgICBjbGFzcz1cInR3LXctZnVsbCB0dy1wLTMgdHctdGV4dC1zbSB0dy1mb250LW1vbm8gdHctbGVhZGluZy1yZWxheGVkIHR3LXJlc2l6ZS1ub25lIHR3LW91dGxpbmUtbm9uZSB0dy1iZy10cmFuc3BhcmVudFwiXHJcbiAgICAgICAgICBbY2xhc3MudHctcGwtMTJdPVwiY29uZmlnU2lnbmFsKCkuc2hvd0xpbmVOdW1iZXJzXCJcclxuICAgICAgICAgIFtjbGFzcy50dy10ZXh0LWdyYXktOTAwXT1cImNvbmZpZ1NpZ25hbCgpLnRoZW1lID09PSAnbGlnaHQnXCJcclxuICAgICAgICAgIFtjbGFzcy50dy10ZXh0LWdyYXktMTAwXT1cImNvbmZpZ1NpZ25hbCgpLnRoZW1lID09PSAnZGFyaydcIlxyXG4gICAgICAgICAgW2NsYXNzLnR3LWJnLWdyYXktOTAwXT1cImNvbmZpZ1NpZ25hbCgpLnRoZW1lID09PSAnZGFyaydcIlxyXG4gICAgICAgICAgW3N0eWxlLm1pbi1oZWlnaHQucHhdPVwiY29uZmlnU2lnbmFsKCkubWluSGVpZ2h0IHx8IDEyMFwiXHJcbiAgICAgICAgICBbc3R5bGUubWF4LWhlaWdodC5weF09XCJjb25maWdTaWduYWwoKS5tYXhIZWlnaHQgfHwgNDAwXCJcclxuICAgICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiZXJyb3JJZCgpXCJcclxuICAgICAgICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCJoYXNFcnJvcnMoKVwiPlxyXG4gICAgICAgIDwvdGV4dGFyZWE+XHJcblxyXG4gICAgICAgIDwhLS0gRm9ybWF0IEJ1dHRvbiAtLT5cclxuICAgICAgICBAaWYgKCFjb25maWdTaWduYWwoKS5yZWFkT25seSAmJiAhZGlzYWJsZWQoKSkge1xyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdEpzb24oKVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwidHctYWJzb2x1dGUgdHctdG9wLTIgdHctcmlnaHQtMiB0dy1wLTEgdHctdGV4dC1ncmF5LTQwMCBob3Zlcjp0dy10ZXh0LWdyYXktNjAwIHR3LXJvdW5kZWQgdHctdHJhbnNpdGlvbi1jb2xvcnNcIlxyXG4gICAgICAgICAgICBbY2xhc3MudHctdGV4dC1ncmF5LTUwMF09XCJjb25maWdTaWduYWwoKS50aGVtZSA9PT0gJ2RhcmsnXCJcclxuICAgICAgICAgICAgW2NsYXNzLmhvdmVyOnR3LXRleHQtZ3JheS0zMDBdPVwiY29uZmlnU2lnbmFsKCkudGhlbWUgPT09ICdkYXJrJ1wiXHJcbiAgICAgICAgICAgIHRpdGxlPVwiRm9ybWF0IEpTT05cIj5cclxuICAgICAgICAgICAgPHN2ZyBjbGFzcz1cInR3LXctNCB0dy1oLTRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cclxuICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIyXCIgZD1cIk00IDZoMTZNNCAxMmgxNk00IDE4aDdcIj48L3BhdGg+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0gSGVscGVyIFRleHQgLS0+XHJcbiAgICAgIEBpZiAoaGVscGVyVGV4dCAmJiAhaGFzRXJyb3JzKCkpIHtcclxuICAgICAgICA8cCBjbGFzcz1cInR3LW10LTEgdHctdGV4dC14cyB0dy10ZXh0LWdyYXktNTAwXCI+e3sgaGVscGVyVGV4dCB9fTwvcD5cclxuICAgICAgfVxyXG5cclxuICAgICAgPCEtLSBFcnJvciBNZXNzYWdlcyAtLT5cclxuICAgICAgQGlmIChjb25maWdTaWduYWwoKS5zaG93RXJyb3JzICYmIGhhc0Vycm9ycygpKSB7XHJcbiAgICAgICAgPGRpdiBbaWRdPVwiZXJyb3JJZCgpXCIgY2xhc3M9XCJ0dy1tdC0xIHR3LXNwYWNlLXktMVwiPlxyXG4gICAgICAgICAgQGZvciAoZXJyb3Igb2YgZXJyb3JzKCk7IHRyYWNrIGVycm9yLmxpbmUgKyAnLScgKyBlcnJvci5jb2x1bW4pIHtcclxuICAgICAgICAgICAgPHAgY2xhc3M9XCJ0dy10ZXh0LXhzIHR3LXRleHQtcmVkLTYwMCB0dy1mbGV4IHR3LWl0ZW1zLXN0YXJ0IHR3LWdhcC0xXCI+XHJcbiAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cInR3LXctMyB0dy1oLTMgdHctbXQtMC41IHR3LWZsZXgtc2hyaW5rLTBcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJNMTggMTBhOCA4IDAgMTEtMTYgMCA4IDggMCAwMTE2IDB6bS03IDRhMSAxIDAgMTEtMiAwIDEgMSAwIDAxMiAwem0tMS05YTEgMSAwIDAwLTEgMXY0YTEgMSAwIDEwMiAwVjZhMSAxIDAgMDAtMS0xelwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICBMaW5lIHt7IGVycm9yLmxpbmUgfX0sIENvbHVtbiB7eyBlcnJvci5jb2x1bW4gfX06IHt7IGVycm9yLm1lc3NhZ2UgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgfVxyXG5cclxuICAgICAgPCEtLSBDaGFyYWN0ZXIgQ291bnQgLS0+XHJcbiAgICAgIEBpZiAoc2hvd0NoYXJhY3RlckNvdW50KSB7XHJcbiAgICAgICAgPHAgY2xhc3M9XCJ0dy1tdC0xIHR3LXRleHQteHMgdHctdGV4dC1ncmF5LTQwMCB0dy10ZXh0LXJpZ2h0XCI+XHJcbiAgICAgICAgICB7eyBqc29uU3RyaW5nKCkubGVuZ3RoIH19IGNoYXJhY3RlcnNcclxuICAgICAgICA8L3A+XHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbYFxyXG4gICAgOmhvc3Qge1xyXG4gICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgIH1cclxuICAgIFxyXG4gICAgdGV4dGFyZWEge1xyXG4gICAgICBmb250LWZhbWlseTogJ01vbmFjbycsICdNZW5sbycsICdVYnVudHUgTW9ubycsIG1vbm9zcGFjZTtcclxuICAgICAgdGFiLXNpemU6IDI7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRleHRhcmVhOmZvY3VzIHtcclxuICAgICAgYm94LXNoYWRvdzogbm9uZTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLnR3LWN1cnNvci1ub3QtYWxsb3dlZCB7XHJcbiAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XHJcbiAgICB9XHJcbiAgYF0sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDaWRlRWxlSnNvbkVkaXRvckNvbXBvbmVudCksXHJcbiAgICAgIG11bHRpOiB0cnVlXHJcbiAgICB9XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2lkZUVsZUpzb25FZGl0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuICAvLyBJbnB1dHNcclxuICBASW5wdXQoKSBsYWJlbD86IHN0cmluZztcclxuICBASW5wdXQoKSBoZWxwZXJUZXh0Pzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHJlcXVpcmVkID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBzaWduYWwoZmFsc2UpO1xyXG4gIEBJbnB1dCgpIHNob3dDaGFyYWN0ZXJDb3VudCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGNvbmZpZzogSnNvbkVkaXRvckNvbmZpZyA9IHt9O1xyXG4gIGNvbmZpZ1NpZ25hbCA9IHNpZ25hbDxKc29uRWRpdG9yQ29uZmlnPih7fSk7XHJcblxyXG4gIC8vIE91dHB1dHNcclxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAT3V0cHV0KCkgb2JqZWN0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxvYmplY3QgfCBudWxsPigpO1xyXG4gIEBPdXRwdXQoKSBlcnJvcnNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEpzb25FZGl0b3JFcnJvcltdPigpO1xyXG4gIEBPdXRwdXQoKSB2YWxpZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuXHJcbiAgLy8gVmlld0NoaWxkXHJcbiAganNvblRleHRhcmVhID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8SFRNTFRleHRBcmVhRWxlbWVudD4+KCdqc29uVGV4dGFyZWEnKTtcclxuXHJcbiAgLy8gRGVwZW5kZW5jeSBpbmplY3Rpb25cclxuICBwcml2YXRlIGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XHJcblxyXG4gIC8vIEludGVybmFsIHN0YXRlXHJcbiAganNvblN0cmluZyA9IHNpZ25hbCgnJyk7XHJcbiAganNvbk9iamVjdCA9IHNpZ25hbDxvYmplY3QgfCBudWxsPihudWxsKTtcclxuICBlcnJvcnMgPSBzaWduYWw8SnNvbkVkaXRvckVycm9yW10+KFtdKTtcclxuICBlZGl0b3JJZCA9IGBqc29uLWVkaXRvci0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLCA5KX1gO1xyXG5cclxuICAvLyBDb21wdXRlZCB2YWx1ZXNcclxuICBoYXNFcnJvcnMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmVycm9ycygpLmxlbmd0aCA+IDApO1xyXG4gIGlzVmFsaWQgPSBjb21wdXRlZCgoKSA9PiAhdGhpcy5oYXNFcnJvcnMoKSAmJiB0aGlzLmpzb25PYmplY3QoKSAhPT0gbnVsbCk7XHJcbiAgbGluZU51bWJlcnMgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBjb25zdCBsaW5lcyA9IHRoaXMuanNvblN0cmluZygpLnNwbGl0KCdcXG4nKTtcclxuICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBNYXRoLm1heChsaW5lcy5sZW5ndGgsIDEpIH0sIChfLCBpKSA9PiBpICsgMSk7XHJcbiAgfSk7XHJcbiAgY29udGFpbmVyQ2xhc3MgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBjb25zdCBjbGFzc2VzID0gWyd0dy13LWZ1bGwnXTtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkKCkpIHtcclxuICAgICAgY2xhc3Nlcy5wdXNoKCd0dy1vcGFjaXR5LTUwJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2xhc3Nlcy5qb2luKCcgJyk7XHJcbiAgfSk7XHJcblxyXG4gIC8vIERlZmF1bHQgY29uZmlndXJhdGlvblxyXG4gIHByaXZhdGUgZGVmYXVsdENvbmZpZzogSnNvbkVkaXRvckNvbmZpZyA9IHtcclxuICAgIHN5bnRheEhpZ2hsaWdodGluZzogdHJ1ZSxcclxuICAgIHNob3dMaW5lTnVtYmVyczogdHJ1ZSxcclxuICAgIGF1dG9Gb3JtYXQ6IHRydWUsXHJcbiAgICB2YWxpZGF0ZU9uQ2hhbmdlOiB0cnVlLFxyXG4gICAgdGhlbWU6ICdsaWdodCcsXHJcbiAgICBtaW5IZWlnaHQ6IDEyMCxcclxuICAgIG1heEhlaWdodDogNDAwLFxyXG4gICAgcGxhY2Vob2xkZXI6ICdFbnRlciBKU09OIGNvbmZpZ3VyYXRpb24uLi4nLFxyXG4gICAgcmVhZE9ubHk6IGZhbHNlLFxyXG4gICAgc2hvd0Vycm9yczogdHJ1ZVxyXG4gIH07XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy8gTWVyZ2UgZGVmYXVsdCBjb25maWcgd2l0aCBpbnB1dCBjb25maWdcclxuICAgIGNvbnN0IG1lcmdlZENvbmZpZyA9IHsgLi4udGhpcy5kZWZhdWx0Q29uZmlnLCAuLi50aGlzLmNvbmZpZyB9O1xyXG4gICAgdGhpcy5jb25maWdTaWduYWwuc2V0KG1lcmdlZENvbmZpZyk7XHJcbiAgICBcclxuICAgIC8vIEluaXRpYWwgdmFsaWRhdGlvblxyXG4gICAgaWYgKG1lcmdlZENvbmZpZy52YWxpZGF0ZU9uQ2hhbmdlICYmIHRoaXMuanNvblN0cmluZygpKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGVKc29uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGUgaW5wdXQgY2hhbmdlc1xyXG4gICAqL1xyXG4gIG9uSW5wdXQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTFRleHRBcmVhRWxlbWVudDtcclxuICAgIGNvbnN0IHZhbHVlID0gdGFyZ2V0LnZhbHVlO1xyXG4gICAgXHJcbiAgICB0aGlzLmpzb25TdHJpbmcuc2V0KHZhbHVlKTtcclxuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZSk7XHJcbiAgICBcclxuICAgIC8vIENhbGwgQ29udHJvbFZhbHVlQWNjZXNzb3Igb25DaGFuZ2UgY2FsbGJhY2tcclxuICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xyXG4gICAgXHJcbiAgICBpZiAodGhpcy5jb25maWdTaWduYWwoKS52YWxpZGF0ZU9uQ2hhbmdlKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGVKc29uKCk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRoaXMucGFyc2VKc29uKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZSBibHVyIGV2ZW50XHJcbiAgICovXHJcbiAgb25CbHVyKCk6IHZvaWQge1xyXG4gICAgLy8gQ2FsbCBDb250cm9sVmFsdWVBY2Nlc3NvciBvblRvdWNoZWQgY2FsbGJhY2tcclxuICAgIHRoaXMub25Ub3VjaGVkKCk7XHJcbiAgICBcclxuICAgIGlmICh0aGlzLmNvbmZpZ1NpZ25hbCgpLmF1dG9Gb3JtYXQgJiYgdGhpcy5pc1ZhbGlkKCkpIHtcclxuICAgICAgdGhpcy5mb3JtYXRKc29uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXJzZSBKU09OIHN0cmluZyBhbmQgZW1pdCBvYmplY3RcclxuICAgKi9cclxuICBwcml2YXRlIHBhcnNlSnNvbihqc29uU3RyOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICghanNvblN0ci50cmltKCkpIHtcclxuICAgICAgdGhpcy5qc29uT2JqZWN0LnNldChudWxsKTtcclxuICAgICAgdGhpcy5vYmplY3RDaGFuZ2UuZW1pdChudWxsKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoanNvblN0cik7XHJcbiAgICAgIHRoaXMuanNvbk9iamVjdC5zZXQocGFyc2VkKTtcclxuICAgICAgdGhpcy5vYmplY3RDaGFuZ2UuZW1pdChwYXJzZWQpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgLy8gRXJyb3Igd2lsbCBiZSBoYW5kbGVkIGJ5IHZhbGlkYXRlSnNvblxyXG4gICAgICB0aGlzLmpzb25PYmplY3Quc2V0KG51bGwpO1xyXG4gICAgICB0aGlzLm9iamVjdENoYW5nZS5lbWl0KG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVmFsaWRhdGUgSlNPTiBhbmQgdXBkYXRlIGVycm9yc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgdmFsaWRhdGVKc29uKCk6IHZvaWQge1xyXG4gICAgY29uc3QganNvblN0ciA9IHRoaXMuanNvblN0cmluZygpO1xyXG4gICAgY29uc3QgbmV3RXJyb3JzOiBKc29uRWRpdG9yRXJyb3JbXSA9IFtdO1xyXG5cclxuICAgIGlmICghanNvblN0ci50cmltKCkpIHtcclxuICAgICAgdGhpcy5lcnJvcnMuc2V0KG5ld0Vycm9ycyk7XHJcbiAgICAgIHRoaXMuZXJyb3JzQ2hhbmdlLmVtaXQobmV3RXJyb3JzKTtcclxuICAgICAgdGhpcy52YWxpZENoYW5nZS5lbWl0KHRydWUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgSlNPTi5wYXJzZShqc29uU3RyKTtcclxuICAgICAgLy8gSlNPTiBpcyB2YWxpZFxyXG4gICAgICB0aGlzLmVycm9ycy5zZXQobmV3RXJyb3JzKTtcclxuICAgICAgdGhpcy5lcnJvcnNDaGFuZ2UuZW1pdChuZXdFcnJvcnMpO1xyXG4gICAgICB0aGlzLnZhbGlkQ2hhbmdlLmVtaXQodHJ1ZSk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAvLyBQYXJzZSBlcnJvciAtIGV4dHJhY3QgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uXHJcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IChlcnJvciBhcyBFcnJvcikubWVzc2FnZTtcclxuICAgICAgY29uc3QgbGluZU1hdGNoID0gZXJyb3JNZXNzYWdlLm1hdGNoKC9wb3NpdGlvbiAoXFxkKykvKTtcclxuICAgICAgXHJcbiAgICAgIGlmIChsaW5lTWF0Y2gpIHtcclxuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHBhcnNlSW50KGxpbmVNYXRjaFsxXSk7XHJcbiAgICAgICAgY29uc3QgbGluZXMgPSBqc29uU3RyLnN1YnN0cmluZygwLCBwb3NpdGlvbikuc3BsaXQoJ1xcbicpO1xyXG4gICAgICAgIGNvbnN0IGxpbmUgPSBsaW5lcy5sZW5ndGg7XHJcbiAgICAgICAgY29uc3QgY29sdW1uID0gbGluZXNbbGluZXMubGVuZ3RoIC0gMV0ubGVuZ3RoICsgMTtcclxuICAgICAgICBcclxuICAgICAgICBuZXdFcnJvcnMucHVzaCh7XHJcbiAgICAgICAgICBsaW5lLFxyXG4gICAgICAgICAgY29sdW1uLFxyXG4gICAgICAgICAgbWVzc2FnZTogJ0ludmFsaWQgSlNPTiBzeW50YXgnLFxyXG4gICAgICAgICAgdHlwZTogJ3N5bnRheCdcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuZXdFcnJvcnMucHVzaCh7XHJcbiAgICAgICAgICBsaW5lOiAxLFxyXG4gICAgICAgICAgY29sdW1uOiAxLFxyXG4gICAgICAgICAgbWVzc2FnZTogJ0ludmFsaWQgSlNPTiBmb3JtYXQnLFxyXG4gICAgICAgICAgdHlwZTogJ3N5bnRheCdcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgdGhpcy5lcnJvcnMuc2V0KG5ld0Vycm9ycyk7XHJcbiAgICAgIHRoaXMuZXJyb3JzQ2hhbmdlLmVtaXQobmV3RXJyb3JzKTtcclxuICAgICAgdGhpcy52YWxpZENoYW5nZS5lbWl0KGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZvcm1hdCBKU09OIHdpdGggcHJvcGVyIGluZGVudGF0aW9uXHJcbiAgICovXHJcbiAgZm9ybWF0SnNvbigpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5qc29uU3RyaW5nKCkudHJpbSgpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHRoaXMuanNvblN0cmluZygpKTtcclxuICAgICAgY29uc3QgZm9ybWF0dGVkID0gSlNPTi5zdHJpbmdpZnkocGFyc2VkLCBudWxsLCAyKTtcclxuICAgICAgdGhpcy5qc29uU3RyaW5nLnNldChmb3JtYXR0ZWQpO1xyXG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoZm9ybWF0dGVkKTtcclxuICAgICAgdGhpcy5qc29uT2JqZWN0LnNldChwYXJzZWQpO1xyXG4gICAgICB0aGlzLm9iamVjdENoYW5nZS5lbWl0KHBhcnNlZCk7XHJcbiAgICAgIHRoaXMuZXJyb3JzLnNldChbXSk7XHJcbiAgICAgIHRoaXMuZXJyb3JzQ2hhbmdlLmVtaXQoW10pO1xyXG4gICAgICB0aGlzLnZhbGlkQ2hhbmdlLmVtaXQodHJ1ZSk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAvLyBEb24ndCBmb3JtYXQgaWYgSlNPTiBpcyBpbnZhbGlkXHJcbiAgICAgIGNvbnNvbGUud2FybignQ2Fubm90IGZvcm1hdCBpbnZhbGlkIEpTT04nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrIGlmIHRoZXJlJ3MgYW4gZXJyb3Igb24gYSBzcGVjaWZpYyBsaW5lXHJcbiAgICovXHJcbiAgaGFzRXJyb3JPbkxpbmUobGluZTogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5lcnJvcnMoKS5zb21lKGVycm9yID0+IGVycm9yLmxpbmUgPT09IGxpbmUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGVycm9yIElEIGZvciBhY2Nlc3NpYmlsaXR5XHJcbiAgICovXHJcbiAgZXJyb3JJZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGAke3RoaXMuZWRpdG9ySWR9LWVycm9yc2A7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb2N1cyB0aGUgZWRpdG9yXHJcbiAgICovXHJcbiAgZm9jdXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmpzb25UZXh0YXJlYSgpLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFyIHRoZSBlZGl0b3JcclxuICAgKi9cclxuICBjbGVhcigpOiB2b2lkIHtcclxuICAgIHRoaXMuanNvblN0cmluZy5zZXQoJycpO1xyXG4gICAgdGhpcy5qc29uT2JqZWN0LnNldChudWxsKTtcclxuICAgIHRoaXMuZXJyb3JzLnNldChbXSk7XHJcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoJycpO1xyXG4gICAgdGhpcy5vYmplY3RDaGFuZ2UuZW1pdChudWxsKTtcclxuICAgIHRoaXMuZXJyb3JzQ2hhbmdlLmVtaXQoW10pO1xyXG4gICAgdGhpcy52YWxpZENoYW5nZS5lbWl0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGN1cnJlbnQgSlNPTiBvYmplY3RcclxuICAgKi9cclxuICBnZXRWYWx1ZSgpOiBvYmplY3QgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLmpzb25PYmplY3QoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBjdXJyZW50IEpTT04gc3RyaW5nXHJcbiAgICovXHJcbiAgZ2V0U3RyaW5nVmFsdWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmpzb25TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrIGlmIEpTT04gaXMgdmFsaWRcclxuICAgKi9cclxuICBpc1ZhbGlkSnNvbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB2YWxpZGF0aW9uIGVycm9yc1xyXG4gICAqL1xyXG4gIGdldEVycm9ycygpOiBKc29uRWRpdG9yRXJyb3JbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5lcnJvcnMoKTtcclxuICB9XHJcblxyXG4gIC8vIENvbnRyb2xWYWx1ZUFjY2Vzc29yIG1ldGhvZHNcclxuICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcgfCBvYmplY3QgfCBudWxsIHwgdW5kZWZpbmVkKTogdm9pZCB7XHJcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmpzb25TdHJpbmcuc2V0KCcnKTtcclxuICAgICAgdGhpcy5qc29uT2JqZWN0LnNldChudWxsKTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICB0aGlzLmpzb25TdHJpbmcuc2V0KHZhbHVlKTtcclxuICAgICAgdGhpcy5wYXJzZUpzb24odmFsdWUpO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgIHRoaXMuanNvbk9iamVjdC5zZXQodmFsdWUpO1xyXG4gICAgICB0aGlzLmpzb25TdHJpbmcuc2V0KEpTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCAyKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG5cclxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzYWJsZWQuc2V0KGlzRGlzYWJsZWQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQgPSAoKSA9PiB7fTtcclxuICBwcml2YXRlIG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xyXG59ICJdfQ==
@@ -1,33 +0,0 @@
1
- import { CommonModule } from '@angular/common';
2
- import { Component, Input } from '@angular/core';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/common";
5
- export class CideEleSkeletonLoaderComponent {
6
- constructor() {
7
- this.width = '100%';
8
- this.height = '1rem';
9
- this.borderRadius = '0.375rem'; // rounded-md
10
- this.count = 1;
11
- this.circle = false;
12
- this.animation = 'pulse';
13
- }
14
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideEleSkeletonLoaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
15
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: CideEleSkeletonLoaderComponent, isStandalone: true, selector: "cide-ele-skeleton-loader", inputs: { width: "width", height: "height", borderRadius: "borderRadius", count: "count", circle: "circle", animation: "animation" }, ngImport: i0, template: "<ng-container *ngFor=\"let i of [].constructor(count)\">\r\n <div\r\n [ngClass]=\"[\r\n 'tw-bg-gray-200',\r\n animation === 'pulse' ? 'tw-animate-pulse' : '',\r\n circle ? 'tw-rounded-full' : 'tw-rounded-md'\r\n ]\"\r\n [style.width]=\"width\"\r\n [style.height]=\"height\"\r\n [style.borderRadius]=\"circle ? '50%' : borderRadius\"\r\n class=\"tw-mb-2\"\r\n ></div>\r\n</ng-container>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] }); }
16
- }
17
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideEleSkeletonLoaderComponent, decorators: [{
18
- type: Component,
19
- args: [{ selector: 'cide-ele-skeleton-loader', standalone: true, imports: [CommonModule], template: "<ng-container *ngFor=\"let i of [].constructor(count)\">\r\n <div\r\n [ngClass]=\"[\r\n 'tw-bg-gray-200',\r\n animation === 'pulse' ? 'tw-animate-pulse' : '',\r\n circle ? 'tw-rounded-full' : 'tw-rounded-md'\r\n ]\"\r\n [style.width]=\"width\"\r\n [style.height]=\"height\"\r\n [style.borderRadius]=\"circle ? '50%' : borderRadius\"\r\n class=\"tw-mb-2\"\r\n ></div>\r\n</ng-container>\r\n" }]
20
- }], propDecorators: { width: [{
21
- type: Input
22
- }], height: [{
23
- type: Input
24
- }], borderRadius: [{
25
- type: Input
26
- }], count: [{
27
- type: Input
28
- }], circle: [{
29
- type: Input
30
- }], animation: [{
31
- type: Input
32
- }] } });
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2tlbGV0b24tbG9hZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nsb3VkLWlkZS1lbGVtZW50L3NyYy9saWIvY29tcG9uZW50cy9za2VsZXRvbi1sb2FkZXIvc2tlbGV0b24tbG9hZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nsb3VkLWlkZS1lbGVtZW50L3NyYy9saWIvY29tcG9uZW50cy9za2VsZXRvbi1sb2FkZXIvc2tlbGV0b24tbG9hZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBU2pELE1BQU0sT0FBTyw4QkFBOEI7SUFQM0M7UUFRVyxVQUFLLEdBQVcsTUFBTSxDQUFDO1FBQ3ZCLFdBQU0sR0FBVyxNQUFNLENBQUM7UUFDeEIsaUJBQVksR0FBVyxVQUFVLENBQUMsQ0FBQyxhQUFhO1FBQ2hELFVBQUssR0FBVyxDQUFDLENBQUM7UUFDbEIsV0FBTSxHQUFZLEtBQUssQ0FBQztRQUN4QixjQUFTLEdBQThCLE9BQU8sQ0FBQztLQUN6RDs4R0FQWSw4QkFBOEI7a0dBQTlCLDhCQUE4QiwwTkNWM0MsMGFBYUEseURETlksWUFBWTs7MkZBR1gsOEJBQThCO2tCQVAxQyxTQUFTOytCQUNFLDBCQUEwQixjQUV4QixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUM7OEJBSWQsS0FBSztzQkFBYixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY2lkZS1lbGUtc2tlbGV0b24tbG9hZGVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2tlbGV0b24tbG9hZGVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxyXG4gIHN0eWxlVXJsczogWycuL3NrZWxldG9uLWxvYWRlci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDaWRlRWxlU2tlbGV0b25Mb2FkZXJDb21wb25lbnQge1xyXG4gIEBJbnB1dCgpIHdpZHRoOiBzdHJpbmcgPSAnMTAwJSc7XHJcbiAgQElucHV0KCkgaGVpZ2h0OiBzdHJpbmcgPSAnMXJlbSc7XHJcbiAgQElucHV0KCkgYm9yZGVyUmFkaXVzOiBzdHJpbmcgPSAnMC4zNzVyZW0nOyAvLyByb3VuZGVkLW1kXHJcbiAgQElucHV0KCkgY291bnQ6IG51bWJlciA9IDE7XHJcbiAgQElucHV0KCkgY2lyY2xlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgYW5pbWF0aW9uOiAncHVsc2UnIHwgJ3dhdmUnIHwgJ25vbmUnID0gJ3B1bHNlJztcclxufVxyXG4iLCI8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpIG9mIFtdLmNvbnN0cnVjdG9yKGNvdW50KVwiPlxyXG4gIDxkaXZcclxuICAgIFtuZ0NsYXNzXT1cIltcclxuICAgICAgJ3R3LWJnLWdyYXktMjAwJyxcclxuICAgICAgYW5pbWF0aW9uID09PSAncHVsc2UnID8gJ3R3LWFuaW1hdGUtcHVsc2UnIDogJycsXHJcbiAgICAgIGNpcmNsZSA/ICd0dy1yb3VuZGVkLWZ1bGwnIDogJ3R3LXJvdW5kZWQtbWQnXHJcbiAgICBdXCJcclxuICAgIFtzdHlsZS53aWR0aF09XCJ3aWR0aFwiXHJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cImhlaWdodFwiXHJcbiAgICBbc3R5bGUuYm9yZGVyUmFkaXVzXT1cImNpcmNsZSA/ICc1MCUnIDogYm9yZGVyUmFkaXVzXCJcclxuICAgIGNsYXNzPVwidHctbWItMlwiXHJcbiAgPjwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj5cclxuIl19