monkey-style-guide-v2 0.0.27 → 0.0.29

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 (143) hide show
  1. package/assets/scss/directives/_index.scss +3 -3
  2. package/assets/scss/input/_index.scss +1 -1
  3. package/assets/scss/partials/_breakpoints.scss +145 -0
  4. package/assets/scss/partials/_grid-system.scss +5069 -0
  5. package/assets/scss/partials/_helper-classes.scss +335 -0
  6. package/assets/scss/partials/_index.scss +8 -3
  7. package/assets/scss/partials/_scrollbars.scss +30 -0
  8. package/assets/scss/partials/_skeleton-loading.scss +67 -0
  9. package/assets/scss/partials/_style-reset.scss +11 -9
  10. package/assets/scss/partials/_variables.scss +49 -111
  11. package/assets/scss/table/_index.scss +1 -1
  12. package/assets/scss/theme.scss +12 -18
  13. package/assets/scss/typography/_index.scss +1 -3
  14. package/assets/scss/typography/_styles.scss +103 -103
  15. package/fesm2022/monkey-style-guide-v2.mjs +288 -279
  16. package/fesm2022/monkey-style-guide-v2.mjs.map +1 -1
  17. package/lib/components/form-field/form-field-control.d.ts +1 -1
  18. package/lib/components/input-phone/input-phone.component.d.ts +0 -2
  19. package/monkey-style-guide-v2-0.0.29.tgz +0 -0
  20. package/package.json +8 -10
  21. package/assets/scss/typography/_function.scss +0 -23
  22. package/assets/scss/typography/_mixins.scss +0 -111
  23. package/esm2022/lib/components/accordion/accordion.component.mjs +0 -93
  24. package/esm2022/lib/components/accordion/index.mjs +0 -7
  25. package/esm2022/lib/components/action-bar/action-bar.component.mjs +0 -46
  26. package/esm2022/lib/components/action-bar/index.mjs +0 -7
  27. package/esm2022/lib/components/alert/alert.component.mjs +0 -50
  28. package/esm2022/lib/components/alert/index.mjs +0 -7
  29. package/esm2022/lib/components/avatar/avatar.component.mjs +0 -55
  30. package/esm2022/lib/components/avatar/index.mjs +0 -7
  31. package/esm2022/lib/components/badge/badge.component.mjs +0 -74
  32. package/esm2022/lib/components/badge/index.mjs +0 -7
  33. package/esm2022/lib/components/breadcrumb/breadcrumb.component.mjs +0 -56
  34. package/esm2022/lib/components/breadcrumb/index.mjs +0 -7
  35. package/esm2022/lib/components/button/button.component.mjs +0 -59
  36. package/esm2022/lib/components/button/index.mjs +0 -7
  37. package/esm2022/lib/components/checkbox/checkbox.component.mjs +0 -215
  38. package/esm2022/lib/components/checkbox/index.mjs +0 -7
  39. package/esm2022/lib/components/date-range/date-range.component.mjs +0 -239
  40. package/esm2022/lib/components/date-range/index.mjs +0 -7
  41. package/esm2022/lib/components/date-range/month/index.mjs +0 -7
  42. package/esm2022/lib/components/date-range/month/month.component.mjs +0 -148
  43. package/esm2022/lib/components/date-range/quick-actions/index.mjs +0 -7
  44. package/esm2022/lib/components/date-range/quick-actions/quick-actions.component.mjs +0 -48
  45. package/esm2022/lib/components/date-range/utils.mjs +0 -102
  46. package/esm2022/lib/components/divider/divider.component.mjs +0 -44
  47. package/esm2022/lib/components/divider/index.mjs +0 -7
  48. package/esm2022/lib/components/form-field/form-field-control.mjs +0 -15
  49. package/esm2022/lib/components/form-field/form-field.component.mjs +0 -265
  50. package/esm2022/lib/components/form-field/form-field.module.mjs +0 -23
  51. package/esm2022/lib/components/form-field/index.mjs +0 -10
  52. package/esm2022/lib/components/form-field/utils.mjs +0 -16
  53. package/esm2022/lib/components/icon/icon.component.mjs +0 -51
  54. package/esm2022/lib/components/icon/index.mjs +0 -7
  55. package/esm2022/lib/components/icon-button/icon-button.component.mjs +0 -59
  56. package/esm2022/lib/components/icon-button/index.mjs +0 -7
  57. package/esm2022/lib/components/index.mjs +0 -34
  58. package/esm2022/lib/components/input/index.mjs +0 -9
  59. package/esm2022/lib/components/input/input-currency.directive.mjs +0 -185
  60. package/esm2022/lib/components/input/input.directive.mjs +0 -185
  61. package/esm2022/lib/components/input/input.module.mjs +0 -24
  62. package/esm2022/lib/components/input/validators.mjs +0 -22
  63. package/esm2022/lib/components/input-code/index.mjs +0 -7
  64. package/esm2022/lib/components/input-code/input-code.component.mjs +0 -232
  65. package/esm2022/lib/components/input-phone/index.mjs +0 -7
  66. package/esm2022/lib/components/input-phone/input-phone.component.mjs +0 -324
  67. package/esm2022/lib/components/input-upload/index.mjs +0 -7
  68. package/esm2022/lib/components/input-upload/input-upload.component.mjs +0 -238
  69. package/esm2022/lib/components/modal/components/confirmation.component.mjs +0 -73
  70. package/esm2022/lib/components/modal/components/default.mjs +0 -65
  71. package/esm2022/lib/components/modal/directives/actions.mjs +0 -29
  72. package/esm2022/lib/components/modal/directives/content.mjs +0 -26
  73. package/esm2022/lib/components/modal/directives/subtitle.mjs +0 -26
  74. package/esm2022/lib/components/modal/directives/title.mjs +0 -26
  75. package/esm2022/lib/components/modal/index.mjs +0 -16
  76. package/esm2022/lib/components/modal/modal-config.mjs +0 -19
  77. package/esm2022/lib/components/modal/modal-ref.mjs +0 -56
  78. package/esm2022/lib/components/modal/modal.component.mjs +0 -119
  79. package/esm2022/lib/components/modal/modal.module.mjs +0 -56
  80. package/esm2022/lib/components/modal/modal.service.mjs +0 -150
  81. package/esm2022/lib/components/modal/utils.mjs +0 -24
  82. package/esm2022/lib/components/option/index.mjs +0 -7
  83. package/esm2022/lib/components/option/option.component.mjs +0 -70
  84. package/esm2022/lib/components/radio-button/index.mjs +0 -7
  85. package/esm2022/lib/components/radio-button/radio-button.component.mjs +0 -190
  86. package/esm2022/lib/components/security-level/index.mjs +0 -7
  87. package/esm2022/lib/components/security-level/security-level.component.mjs +0 -57
  88. package/esm2022/lib/components/select/index.mjs +0 -7
  89. package/esm2022/lib/components/select/select.component.mjs +0 -444
  90. package/esm2022/lib/components/status/index.mjs +0 -7
  91. package/esm2022/lib/components/status/status.component.mjs +0 -45
  92. package/esm2022/lib/components/table/components/pagination-action/pagination-action.mjs +0 -53
  93. package/esm2022/lib/components/table/components/pagination-label/pagination-label.mjs +0 -34
  94. package/esm2022/lib/components/table/components/pagination-size/pagination-size.mjs +0 -57
  95. package/esm2022/lib/components/table/directives/column-checked.mjs +0 -109
  96. package/esm2022/lib/components/table/directives/column-expansible.mjs +0 -134
  97. package/esm2022/lib/components/table/directives/column-sortable.mjs +0 -97
  98. package/esm2022/lib/components/table/directives/column-stick.mjs +0 -28
  99. package/esm2022/lib/components/table/index.mjs +0 -15
  100. package/esm2022/lib/components/table/table.component.mjs +0 -133
  101. package/esm2022/lib/components/table/table.module.mjs +0 -63
  102. package/esm2022/lib/components/toast/index.mjs +0 -7
  103. package/esm2022/lib/components/toast/toast.component.mjs +0 -79
  104. package/esm2022/lib/components/toggle/index.mjs +0 -7
  105. package/esm2022/lib/components/toggle/toggle.component.mjs +0 -74
  106. package/esm2022/lib/components/toggle-line/index.mjs +0 -8
  107. package/esm2022/lib/components/toggle-line/toggle-line-button/index.mjs +0 -7
  108. package/esm2022/lib/components/toggle-line/toggle-line-button/toggle-line-button.component.mjs +0 -24
  109. package/esm2022/lib/components/toggle-line/toggle-line.component.mjs +0 -85
  110. package/esm2022/lib/components/tooltip/index.mjs +0 -8
  111. package/esm2022/lib/components/tooltip/tooltip/index.mjs +0 -7
  112. package/esm2022/lib/components/tooltip/tooltip/tooltip.component.mjs +0 -58
  113. package/esm2022/lib/components/tooltip/tooltip.directive.mjs +0 -189
  114. package/esm2022/lib/directives/badge.mjs +0 -74
  115. package/esm2022/lib/directives/error.mjs +0 -18
  116. package/esm2022/lib/directives/helper.mjs +0 -18
  117. package/esm2022/lib/directives/index.mjs +0 -15
  118. package/esm2022/lib/directives/info.mjs +0 -18
  119. package/esm2022/lib/directives/label.mjs +0 -18
  120. package/esm2022/lib/directives/module.mjs +0 -61
  121. package/esm2022/lib/directives/popover.mjs +0 -385
  122. package/esm2022/lib/directives/prefix.mjs +0 -18
  123. package/esm2022/lib/directives/suffix.mjs +0 -43
  124. package/esm2022/lib/interfaces/alert.mjs +0 -2
  125. package/esm2022/lib/interfaces/breadcrumb.mjs +0 -2
  126. package/esm2022/lib/interfaces/button.mjs +0 -2
  127. package/esm2022/lib/interfaces/index.mjs +0 -13
  128. package/esm2022/lib/interfaces/popover.mjs +0 -2
  129. package/esm2022/lib/interfaces/sizes.mjs +0 -2
  130. package/esm2022/lib/interfaces/table.mjs +0 -2
  131. package/esm2022/lib/interfaces/toast.mjs +0 -10
  132. package/esm2022/lib/services/dictionary.service.mjs +0 -224
  133. package/esm2022/lib/services/index.mjs +0 -7
  134. package/esm2022/lib/services/toast.service.mjs +0 -79
  135. package/esm2022/lib/tokens/index.mjs +0 -10
  136. package/esm2022/monkey-style-guide-v2.mjs +0 -5
  137. package/esm2022/public-api.mjs +0 -11
  138. package/esm2022/utils/icon.mjs +0 -277
  139. package/esm2022/utils/id-generator.mjs +0 -20
  140. package/esm2022/utils/index.mjs +0 -5
  141. package/esm2022/utils/tests-utils.mjs +0 -4
  142. package/esm2022/utils/utils.mjs +0 -41
  143. package/monkey-style-guide-v2-0.0.27.tgz +0 -0
@@ -1,444 +0,0 @@
1
- /** ************************
2
- * Copyright Monkey Exchange. All Rights Reserved
3
- * This style guide was developed by Monkey Exchange Team
4
- * MIT Licence
5
- ************************* */
6
- import { animate, state, style, transition, trigger } from '@angular/animations';
7
- import { TemplatePortal } from '@angular/cdk/portal';
8
- import { CommonModule } from '@angular/common';
9
- import { booleanAttribute, ChangeDetectionStrategy, Component, ContentChildren, DestroyRef, ElementRef, EventEmitter, inject, Input, Optional, Output, ViewChild, ViewEncapsulation } from '@angular/core';
10
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
11
- import { FormsModule, NgControl, ReactiveFormsModule, Validators } from '@angular/forms';
12
- import { debounceTime, Subject } from 'rxjs';
13
- import { normalizeStringToSearch, sanitizeString, UtilIconComponent } from '../../../utils';
14
- import { IdGenerator } from '../../../utils/id-generator';
15
- import { MonkeyDictionaryService } from '../../services/dictionary.service';
16
- import { MonkeyFormFieldControl } from '../form-field/form-field-control';
17
- import { MonkeyOptionComponent } from '../option/option.component';
18
- import * as i0 from "@angular/core";
19
- import * as i1 from "@angular/cdk/overlay";
20
- import * as i2 from "../form-field/form-field.component";
21
- import * as i3 from "@angular/common";
22
- import * as i4 from "@angular/forms";
23
- export class MonkeySelectComponent {
24
- get disabled() {
25
- if (this.ngControl && this.ngControl.disabled !== null) {
26
- return this.ngControl.disabled;
27
- }
28
- return this._disabled;
29
- }
30
- set disabled(value) {
31
- this._disabled = value;
32
- if (this.focused) {
33
- this.focused = false;
34
- this.stateChanges.next();
35
- }
36
- }
37
- get required() {
38
- return this._required ?? this.ngControl?.control?.hasValidator(Validators.required) ?? false;
39
- }
40
- set required(value) {
41
- this._required = value;
42
- this.stateChanges.next();
43
- }
44
- set value(value) {
45
- if (this._value !== value) {
46
- this._value = value;
47
- this._onChange(value);
48
- }
49
- }
50
- get value() {
51
- return this._value;
52
- }
53
- constructor(overlay, changeDetectorRef, viewContainerRef, formField) {
54
- this.overlay = overlay;
55
- this.changeDetectorRef = changeDetectorRef;
56
- this.viewContainerRef = viewContainerRef;
57
- this.formField = formField;
58
- this.tabIndex = 0;
59
- this.onChange = new EventEmitter();
60
- this.onSearch = new EventEmitter();
61
- this.placeholder = '';
62
- this.loading = false;
63
- this.showSearch = true;
64
- this.searchPlaceholder = '';
65
- this.callbackSearch = false;
66
- this._value = null;
67
- this.labelSelected = '';
68
- this.overlayRef = null;
69
- this._destroyRef = inject(DestroyRef);
70
- this.idGenerator = inject(IdGenerator);
71
- this.ngControl = inject(NgControl, { self: true, optional: true });
72
- this._elementRef = inject(ElementRef);
73
- this.currency = false;
74
- this.focused = false;
75
- this._disabled = false;
76
- this.id = this.idGenerator.getId('monkey-select-');
77
- this.percent = false;
78
- this.stateChanges = new Subject();
79
- this.type = '';
80
- this.searchHandle = new EventEmitter();
81
- this.searchDictionary = inject(MonkeyDictionaryService).get('NO-DATA');
82
- this.loadingDictionary = inject(MonkeyDictionaryService).get('LOADING');
83
- this.showSearchNoData = false;
84
- this.isOpen = false;
85
- this.searchData = '';
86
- this.onAnimationEnd = (event) => {
87
- if (event.toState === 'closed') {
88
- this.closeOverlay();
89
- }
90
- };
91
- this._onChange = () => { };
92
- this._onTouched = () => { };
93
- if (this.ngControl) {
94
- this.ngControl.valueAccessor = this;
95
- }
96
- }
97
- changeControl() {
98
- if (this.formField?.control) {
99
- this.formField.control.loading = this.loading;
100
- }
101
- }
102
- changeSelected() {
103
- setTimeout(() => {
104
- if (this.options) {
105
- this.options.forEach((opt) => {
106
- opt.selected = opt.value === this.value;
107
- });
108
- this.updateSelectedLabel();
109
- }
110
- this.changeDetectorRef.markForCheck();
111
- });
112
- }
113
- initializeOptions() {
114
- this.options.forEach((option) => {
115
- if (!option.action) {
116
- option.action = this.selectOption.bind(this, option);
117
- }
118
- });
119
- }
120
- openDropdown() {
121
- if (this.options?.length) {
122
- this.formField.control.disableToBeDirty = true;
123
- this.isOpen = true;
124
- this.createOverlay();
125
- }
126
- }
127
- closeDropdown() {
128
- this.changeDetectorRef.markForCheck();
129
- this.isOpen = false;
130
- this.focused = false;
131
- this.formField.control.disableToBeDirty = false;
132
- if (!this.callbackSearch) {
133
- this.searchData = '';
134
- }
135
- }
136
- closeOverlay() {
137
- if (this.overlayRef) {
138
- this.overlayRef.dispose();
139
- this.overlayRef = null;
140
- }
141
- }
142
- initializeWithOverlay() {
143
- if (this.showSearch) {
144
- const element = this.overlayRef?.overlayElement.querySelector(`#${this.id}-search`);
145
- this.options.forEach((opt) => {
146
- const element = this.overlayRef?.overlayElement.querySelector(`#${opt.id}`);
147
- if (!element)
148
- return;
149
- element.style.display = '';
150
- });
151
- setTimeout(() => {
152
- element?.focus();
153
- }, 0);
154
- this.showSearchNoData = false;
155
- }
156
- setTimeout(() => {
157
- const selected = this.options.find((opt) => {
158
- return opt.selected;
159
- });
160
- if (selected) {
161
- const element = this.overlayRef?.overlayElement.querySelector(`#${selected.id}`);
162
- element?.scrollIntoView({ behavior: 'instant', block: 'center' });
163
- }
164
- }, 0);
165
- }
166
- createOverlay() {
167
- if (this.overlayRef) {
168
- return;
169
- }
170
- const offset = 4;
171
- const positions = [
172
- {
173
- originX: 'start',
174
- originY: 'bottom',
175
- overlayX: 'start',
176
- overlayY: 'top',
177
- offsetY: offset
178
- },
179
- {
180
- originX: 'start',
181
- originY: 'top',
182
- overlayX: 'start',
183
- overlayY: 'bottom',
184
- offsetY: -offset
185
- }
186
- ];
187
- let anchor = this.trigger;
188
- let width = anchor.nativeElement.offsetWidth;
189
- if (this.formField?.elementRef) {
190
- const el = this.formField?.elementRef.nativeElement.querySelector('.mecx-form-field-body');
191
- anchor = el;
192
- width = el.offsetWidth;
193
- }
194
- const positionStrategy = this.overlay
195
- .position()
196
- .flexibleConnectedTo(anchor)
197
- .withPositions(positions)
198
- .withPush(true);
199
- this.overlayRef = this.overlay.create({
200
- positionStrategy,
201
- scrollStrategy: this.overlay.scrollStrategies.block(),
202
- width,
203
- hasBackdrop: true,
204
- backdropClass: 'no-class'
205
- });
206
- const portal = new TemplatePortal(this.overlayTemplate, this.viewContainerRef);
207
- this.overlayRef.attach(portal);
208
- this.overlayRef
209
- .backdropClick()
210
- .pipe(takeUntilDestroyed(this._destroyRef))
211
- .subscribe(() => {
212
- return this.closeDropdown();
213
- });
214
- this.initializeWithOverlay();
215
- }
216
- updateSelectedLabel() {
217
- const selectedOption = this.options.find((opt) => {
218
- return opt.value === this.value;
219
- });
220
- this.labelSelected = selectedOption ? selectedOption.displayContent : '';
221
- }
222
- executeSearch(search) {
223
- let found = false;
224
- this.options.forEach((opt) => {
225
- const element = this.overlayRef?.overlayElement.querySelector(`#${opt.id}`);
226
- if (!element)
227
- return;
228
- const isMatch = normalizeStringToSearch(opt.displayContent).includes(normalizeStringToSearch(search));
229
- if (isMatch) {
230
- found = true;
231
- }
232
- element.style.display = isMatch ? '' : 'none';
233
- });
234
- this.repositionScroll();
235
- this.showSearchNoData = !found;
236
- }
237
- repositionScroll() {
238
- const overlayElement = this.overlayRef?.overlayElement.querySelector('.mecx-select-overlay');
239
- if (overlayElement) {
240
- overlayElement.scrollTop = 0;
241
- }
242
- }
243
- ngOnInit() {
244
- this.searchHandle
245
- .pipe(debounceTime(200), takeUntilDestroyed(this._destroyRef))
246
- .subscribe((search) => {
247
- if (this.callbackSearch) {
248
- this.onSearch.next(search);
249
- this.repositionScroll();
250
- }
251
- else {
252
- this.executeSearch(search);
253
- }
254
- });
255
- }
256
- ngAfterContentInit() {
257
- this.initializeOptions();
258
- this.options.changes.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((resp) => {
259
- this.updateSelectedLabel();
260
- this.initializeOptions();
261
- this.changeSelected();
262
- });
263
- }
264
- ngOnDestroy() {
265
- if (this.overlayRef) {
266
- this.overlayRef.dispose();
267
- }
268
- }
269
- toggleDropdown() {
270
- if (!this.disabled) {
271
- if (this.isOpen) {
272
- this.closeDropdown();
273
- this._onTouched();
274
- }
275
- else {
276
- this.openDropdown();
277
- }
278
- }
279
- }
280
- selectOption(option) {
281
- if (!option.disabled && !this.disabled) {
282
- this.value = option.value;
283
- this.updateSelectedLabel();
284
- this.closeDropdown();
285
- this._onChange(this.value);
286
- this.onChange.emit(this.value);
287
- this.options.forEach((opt) => {
288
- opt.selected = opt.value === this.value;
289
- });
290
- }
291
- }
292
- writeValue(value) {
293
- this.value = value;
294
- this.changeSelected();
295
- }
296
- onContainerClick(event) {
297
- if (this.disabled)
298
- return;
299
- this.openDropdown();
300
- this._elementRef.nativeElement.focus();
301
- }
302
- _onFocus() {
303
- if (!this.disabled) {
304
- this.focused = true;
305
- this._onTouched();
306
- this.stateChanges.next();
307
- }
308
- }
309
- _onBlur() {
310
- this.focused = false;
311
- this.stateChanges.next();
312
- }
313
- registerOnChange(fn) {
314
- this._onChange = fn;
315
- }
316
- registerOnTouched(fn) {
317
- this._onTouched = fn;
318
- }
319
- setDisabledState(isDisabled) {
320
- this.disabled = isDisabled;
321
- }
322
- ngOnChanges(changes) {
323
- let hasChanges = false;
324
- // eslint-disable-next-line dot-notation
325
- const changesLoading = changes?.['loading'];
326
- if (changesLoading?.currentValue !== changesLoading?.previousValue) {
327
- hasChanges = true;
328
- this.changeControl();
329
- }
330
- if (hasChanges) {
331
- this.stateChanges.next();
332
- }
333
- }
334
- onHandleSearch(event) {
335
- try {
336
- const { value } = event.target;
337
- const handled = sanitizeString(value);
338
- this.searchHandle.next(handled || '');
339
- }
340
- catch (e) {
341
- // not to do
342
- }
343
- }
344
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MonkeySelectComponent, deps: [{ token: i1.Overlay }, { token: i0.ChangeDetectorRef }, { token: i0.ViewContainerRef }, { token: i2.MonkeyFormFieldComponent, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
345
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: MonkeySelectComponent, isStandalone: true, selector: "monkey-select", inputs: { tabIndex: "tabIndex", placeholder: "placeholder", loading: ["loading", "loading", booleanAttribute], showSearch: ["showSearch", "showSearch", booleanAttribute], searchPlaceholder: "searchPlaceholder", callbackSearch: ["callbackSearch", "callbackSearch", booleanAttribute], disabled: ["disabled", "disabled", booleanAttribute], required: ["required", "required", booleanAttribute], value: "value" }, outputs: { onChange: "onChange", onSearch: "onSearch" }, host: { attributes: { "data-testid": "monkey-select" }, listeners: { "focus": "_onFocus()", "blur": "_onBlur()" }, properties: { "class.mecx-select-disabled": "_disabled", "class.mecx-select-focused": "focused", "attr.id": "id", "attr.tabindex": "disabled ? -1 : tabIndex" }, classAttribute: "mecx-select" }, providers: [
346
- // eslint-disable-next-line no-use-before-define
347
- { provide: MonkeyFormFieldControl, useExisting: MonkeySelectComponent }
348
- ], queries: [{ propertyName: "options", predicate: MonkeyOptionComponent }], viewQueries: [{ propertyName: "overlayTemplate", first: true, predicate: ["overlayTemplate"], descendants: true }, { propertyName: "overlayEl", first: true, predicate: ["overlay"], descendants: true }, { propertyName: "trigger", first: true, predicate: ["trigger"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"mecx-select-trigger\"\n [class.open]=\"isOpen\"\n (click)=\"toggleDropdown()\"\n role=\"combobox\"\n [attr.aria-expanded]=\"isOpen\"\n #trigger\n>\n <div class=\"mecx-select-value\" [class.has-value]=\"value\">\n <span>{{ labelSelected || placeholder }}</span>\n </div>\n\n @if (!loading) {\n <util-icon class=\"mecx-select-icon\" name=\"arrowDown\" />\n }\n</div>\n\n<ng-template #overlayTemplate>\n <div class=\"mecx-select-body-overlay\">\n @if (showSearch) {\n <div class=\"mecx-select-search\">\n <util-icon class=\"mecx-select-search-icon\" name=\"search\" />\n <input\n (input)=\"onHandleSearch($event)\"\n type=\"text\"\n [id]=\"id + '-search'\"\n autocomplete=\"off\"\n maxlength=\"50\"\n [placeholder]=\"searchPlaceholder\"\n [(ngModel)]=\"searchData\"\n />\n </div>\n }\n <div\n class=\"mecx-select-overlay\"\n #overlay\n [@animation]=\"isOpen ? 'open' : 'closed'\"\n (@animation.done)=\"onAnimationEnd($event)\"\n >\n <ng-content />\n </div>\n @if (showSearch && showSearchNoData) {\n <div class=\"mecx-select-search-no-data\">\n <util-icon class=\"mecx-select-search-no-data-icon\" name=\"searchFail\" />\n {{ searchDictionary | async }}\n </div>\n }\n @if (loading) {\n <div class=\"mecx-select-search-loading\">\n {{ loadingDictionary | async }}\n </div>\n }\n </div>\n</ng-template>\n", styles: ["monkey-select{display:inline-flex;width:100%;min-width:0;position:relative}monkey-select:focus-visible,monkey-select:focus{outline:none}.mecx-select-trigger{width:100%;display:inline-flex;align-items:center;cursor:pointer;gap:8px;box-sizing:border-box}.mecx-select-trigger .mecx-select-value{flex-grow:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--mecx-color-gray-500);font-size:14px;line-height:24px;letter-spacing:.42px}.mecx-select-trigger .mecx-select-value.has-value{color:var(--mecx-color-gray-900)}.mecx-select-trigger .mecx-select-icon{display:flex;transition:all .2s ease-in-out}.mecx-select-trigger .mecx-select-icon svg *{stroke:var(--mecx-color-theme-main)}.mecx-select-disabled .mecx-select-trigger{background-color:var(--mecx-color-gray-50);border-color:var(--mecx-color-gray-50);cursor:default}.mecx-select-disabled .mecx-select-trigger .mecx-select-value{color:var(--mecx-color-gray-400)}.mecx-select-disabled .mecx-select-trigger .mecx-select-icon svg *{stroke:var(--mecx-color-gray-400)}.mecx-select-trigger.open .mecx-select-icon{transform:rotate(180deg)}.mecx-select-body-overlay{width:100%;background:#fff;border:2px solid var(--mecx-color-gray-400);overflow:hidden;border-radius:4px;box-shadow:0 16px 32px 0 var(--mecx-color-box-shadow)}.mecx-select-body-overlay .mecx-select-search{display:flex;gap:4px;border-bottom:2px solid var(--mecx-color-gray-400);padding:8px}.mecx-select-body-overlay .mecx-select-search-icon{width:12px;display:flex}.mecx-select-body-overlay .mecx-select-search-icon svg path{stroke:var(--mecx-color-gray-600)}.mecx-select-body-overlay input{border:none;width:90%;color:var(--mecx-color-gray-600)!important;font-size:12px;letter-spacing:.54px}.mecx-select-body-overlay .mecx-select-search-no-data,.mecx-select-body-overlay .mecx-select-search-loading{padding:12px;display:flex;justify-content:center;flex-direction:column;align-items:center;gap:4px;color:var(--mecx-color-gray-600);font-size:12px;letter-spacing:.54px;text-align:center}.mecx-select-body-overlay .mecx-select-search-no-data-icon svg path,.mecx-select-body-overlay .mecx-select-search-loading-icon svg path{stroke:var(--mecx-color-gray-600)}.mecx-select-overlay{width:100%;background:#fff;overflow:hidden auto;max-height:360px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: UtilIconComponent, selector: "util-icon", inputs: ["name"] }], animations: [
349
- trigger('animation', [
350
- transition(':enter', [
351
- style({
352
- opacity: 0,
353
- transform: 'scaleY(.9)'
354
- }),
355
- animate('100ms ease-in-out', style({
356
- opacity: 1,
357
- transform: 'scaleY(1)'
358
- }))
359
- ]),
360
- state('closed', style({
361
- transform: 'scaleY(.9)',
362
- opacity: 0
363
- })),
364
- transition('closed <=> open', animate('200ms ease-in-out'))
365
- ])
366
- ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
367
- }
368
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MonkeySelectComponent, decorators: [{
369
- type: Component,
370
- args: [{ selector: 'monkey-select', standalone: true, imports: [CommonModule, ReactiveFormsModule, FormsModule, UtilIconComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [
371
- // eslint-disable-next-line no-use-before-define
372
- { provide: MonkeyFormFieldControl, useExisting: MonkeySelectComponent }
373
- ], animations: [
374
- trigger('animation', [
375
- transition(':enter', [
376
- style({
377
- opacity: 0,
378
- transform: 'scaleY(.9)'
379
- }),
380
- animate('100ms ease-in-out', style({
381
- opacity: 1,
382
- transform: 'scaleY(1)'
383
- }))
384
- ]),
385
- state('closed', style({
386
- transform: 'scaleY(.9)',
387
- opacity: 0
388
- })),
389
- transition('closed <=> open', animate('200ms ease-in-out'))
390
- ])
391
- ], host: {
392
- 'data-testid': 'monkey-select',
393
- class: 'mecx-select',
394
- '[class.mecx-select-disabled]': '_disabled',
395
- '[class.mecx-select-focused]': 'focused',
396
- '[attr.id]': 'id',
397
- '[attr.tabindex]': 'disabled ? -1 : tabIndex',
398
- '(focus)': '_onFocus()',
399
- '(blur)': '_onBlur()'
400
- }, template: "<div\n class=\"mecx-select-trigger\"\n [class.open]=\"isOpen\"\n (click)=\"toggleDropdown()\"\n role=\"combobox\"\n [attr.aria-expanded]=\"isOpen\"\n #trigger\n>\n <div class=\"mecx-select-value\" [class.has-value]=\"value\">\n <span>{{ labelSelected || placeholder }}</span>\n </div>\n\n @if (!loading) {\n <util-icon class=\"mecx-select-icon\" name=\"arrowDown\" />\n }\n</div>\n\n<ng-template #overlayTemplate>\n <div class=\"mecx-select-body-overlay\">\n @if (showSearch) {\n <div class=\"mecx-select-search\">\n <util-icon class=\"mecx-select-search-icon\" name=\"search\" />\n <input\n (input)=\"onHandleSearch($event)\"\n type=\"text\"\n [id]=\"id + '-search'\"\n autocomplete=\"off\"\n maxlength=\"50\"\n [placeholder]=\"searchPlaceholder\"\n [(ngModel)]=\"searchData\"\n />\n </div>\n }\n <div\n class=\"mecx-select-overlay\"\n #overlay\n [@animation]=\"isOpen ? 'open' : 'closed'\"\n (@animation.done)=\"onAnimationEnd($event)\"\n >\n <ng-content />\n </div>\n @if (showSearch && showSearchNoData) {\n <div class=\"mecx-select-search-no-data\">\n <util-icon class=\"mecx-select-search-no-data-icon\" name=\"searchFail\" />\n {{ searchDictionary | async }}\n </div>\n }\n @if (loading) {\n <div class=\"mecx-select-search-loading\">\n {{ loadingDictionary | async }}\n </div>\n }\n </div>\n</ng-template>\n", styles: ["monkey-select{display:inline-flex;width:100%;min-width:0;position:relative}monkey-select:focus-visible,monkey-select:focus{outline:none}.mecx-select-trigger{width:100%;display:inline-flex;align-items:center;cursor:pointer;gap:8px;box-sizing:border-box}.mecx-select-trigger .mecx-select-value{flex-grow:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--mecx-color-gray-500);font-size:14px;line-height:24px;letter-spacing:.42px}.mecx-select-trigger .mecx-select-value.has-value{color:var(--mecx-color-gray-900)}.mecx-select-trigger .mecx-select-icon{display:flex;transition:all .2s ease-in-out}.mecx-select-trigger .mecx-select-icon svg *{stroke:var(--mecx-color-theme-main)}.mecx-select-disabled .mecx-select-trigger{background-color:var(--mecx-color-gray-50);border-color:var(--mecx-color-gray-50);cursor:default}.mecx-select-disabled .mecx-select-trigger .mecx-select-value{color:var(--mecx-color-gray-400)}.mecx-select-disabled .mecx-select-trigger .mecx-select-icon svg *{stroke:var(--mecx-color-gray-400)}.mecx-select-trigger.open .mecx-select-icon{transform:rotate(180deg)}.mecx-select-body-overlay{width:100%;background:#fff;border:2px solid var(--mecx-color-gray-400);overflow:hidden;border-radius:4px;box-shadow:0 16px 32px 0 var(--mecx-color-box-shadow)}.mecx-select-body-overlay .mecx-select-search{display:flex;gap:4px;border-bottom:2px solid var(--mecx-color-gray-400);padding:8px}.mecx-select-body-overlay .mecx-select-search-icon{width:12px;display:flex}.mecx-select-body-overlay .mecx-select-search-icon svg path{stroke:var(--mecx-color-gray-600)}.mecx-select-body-overlay input{border:none;width:90%;color:var(--mecx-color-gray-600)!important;font-size:12px;letter-spacing:.54px}.mecx-select-body-overlay .mecx-select-search-no-data,.mecx-select-body-overlay .mecx-select-search-loading{padding:12px;display:flex;justify-content:center;flex-direction:column;align-items:center;gap:4px;color:var(--mecx-color-gray-600);font-size:12px;letter-spacing:.54px;text-align:center}.mecx-select-body-overlay .mecx-select-search-no-data-icon svg path,.mecx-select-body-overlay .mecx-select-search-loading-icon svg path{stroke:var(--mecx-color-gray-600)}.mecx-select-overlay{width:100%;background:#fff;overflow:hidden auto;max-height:360px}\n"] }]
401
- }], ctorParameters: () => [{ type: i1.Overlay }, { type: i0.ChangeDetectorRef }, { type: i0.ViewContainerRef }, { type: i2.MonkeyFormFieldComponent, decorators: [{
402
- type: Optional
403
- }] }], propDecorators: { overlayTemplate: [{
404
- type: ViewChild,
405
- args: ['overlayTemplate']
406
- }], overlayEl: [{
407
- type: ViewChild,
408
- args: ['overlay']
409
- }], trigger: [{
410
- type: ViewChild,
411
- args: ['trigger']
412
- }], options: [{
413
- type: ContentChildren,
414
- args: [MonkeyOptionComponent]
415
- }], tabIndex: [{
416
- type: Input
417
- }], onChange: [{
418
- type: Output
419
- }], onSearch: [{
420
- type: Output
421
- }], placeholder: [{
422
- type: Input,
423
- args: [{ required: true }]
424
- }], loading: [{
425
- type: Input,
426
- args: [{ transform: booleanAttribute }]
427
- }], showSearch: [{
428
- type: Input,
429
- args: [{ transform: booleanAttribute }]
430
- }], searchPlaceholder: [{
431
- type: Input
432
- }], callbackSearch: [{
433
- type: Input,
434
- args: [{ transform: booleanAttribute }]
435
- }], disabled: [{
436
- type: Input,
437
- args: [{ transform: booleanAttribute }]
438
- }], required: [{
439
- type: Input,
440
- args: [{ transform: booleanAttribute }]
441
- }], value: [{
442
- type: Input
443
- }] } });
444
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21vbmtleS1zdHlsZS1ndWlkZS12Mi9zcmMvbGliL2NvbXBvbmVudHMvc2VsZWN0L3NlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tb25rZXktc3R5bGUtZ3VpZGUtdjIvc3JjL2xpYi9jb21wb25lbnRzL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7NkJBSTZCO0FBRTdCLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFakYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBRUwsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsZUFBZSxFQUNmLFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBSUwsUUFBUSxFQUNSLE1BQU0sRUFJTixTQUFTLEVBRVQsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFFTCxXQUFXLEVBQ1gsU0FBUyxFQUNULG1CQUFtQixFQUNuQixVQUFVLEVBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUYsT0FBTyxFQUFFLFdB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LE1BQU07Z0JBRW9CLFdBQVc7c0JBQXJDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUd6QixPQUFPO3NCQUROLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBSXRDLFVBQVU7c0JBRFQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFJdEMsaUJBQWlCO3NCQURoQixLQUFLO2dCQUlOLGNBQWM7c0JBRGIsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFJbEMsUUFBUTtzQkFEWCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQWtCbEMsUUFBUTtzQkFEWCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQWFsQyxLQUFLO3NCQURSLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBDb3B5cmlnaHQgTW9ua2V5IEV4Y2hhbmdlLiBBbGwgUmlnaHRzIFJlc2VydmVkXG4gKiBUaGlzIHN0eWxlIGd1aWRlIHdhcyBkZXZlbG9wZWQgYnkgTW9ua2V5IEV4Y2hhbmdlIFRlYW1cbiAqIE1JVCBMaWNlbmNlXG4gKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuXG5pbXBvcnQgeyBhbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IENvbm5lY3RlZFBvc2l0aW9uLCBPdmVybGF5LCBPdmVybGF5UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgVGVtcGxhdGVQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBib29sZWFuQXR0cmlidXRlLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBEZXN0cm95UmVmLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGluamVjdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge1xuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgRm9ybXNNb2R1bGUsXG4gIE5nQ29udHJvbCxcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgVmFsaWRhdG9yc1xufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG5vcm1hbGl6ZVN0cmluZ1RvU2VhcmNoLCBzYW5pdGl6ZVN0cmluZywgVXRpbEljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi91dGlscyc7XG5pbXBvcnQgeyBJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2lkLWdlbmVyYXRvcic7XG5pbXBvcnQgeyBNb25rZXlEaWN0aW9uYXJ5U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RpY3Rpb25hcnkuc2VydmljZSc7XG5pbXBvcnQgeyBNb25rZXlGb3JtRmllbGRDb250cm9sIH0gZnJvbSAnLi4vZm9ybS1maWVsZC9mb3JtLWZpZWxkLWNvbnRyb2wnO1xuaW1wb3J0IHsgTW9ua2V5Rm9ybUZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vZm9ybS1maWVsZC9mb3JtLWZpZWxkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNb25rZXlPcHRpb25Db21wb25lbnQgfSBmcm9tICcuLi9vcHRpb24vb3B0aW9uLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21vbmtleS1zZWxlY3QnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBGb3Jtc01vZHVsZSwgVXRpbEljb25Db21wb25lbnRdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGVVcmw6ICdzZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zZWxlY3QuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgeyBwcm92aWRlOiBNb25rZXlGb3JtRmllbGRDb250cm9sLCB1c2VFeGlzdGluZzogTW9ua2V5U2VsZWN0Q29tcG9uZW50IH1cbiAgXSxcbiAgYW5pbWF0aW9uczogW1xuICAgIHRyaWdnZXIoJ2FuaW1hdGlvbicsIFtcbiAgICAgIHRyYW5zaXRpb24oJzplbnRlcicsIFtcbiAgICAgICAgc3R5bGUoe1xuICAgICAgICAgIG9wYWNpdHk6IDAsXG4gICAgICAgICAgdHJhbnNmb3JtOiAnc2NhbGVZKC45KSdcbiAgICAgICAgfSksXG4gICAgICAgIGFuaW1hdGUoXG4gICAgICAgICAgJzEwMG1zIGVhc2UtaW4tb3V0JyxcbiAgICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgICBvcGFjaXR5OiAxLFxuICAgICAgICAgICAgdHJhbnNmb3JtOiAnc2NhbGVZKDEpJ1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIF0pLFxuICAgICAgc3RhdGUoXG4gICAgICAgICdjbG9zZWQnLFxuICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgdHJhbnNmb3JtOiAnc2NhbGVZKC45KScsXG4gICAgICAgICAgb3BhY2l0eTogMFxuICAgICAgICB9KVxuICAgICAgKSxcbiAgICAgIHRyYW5zaXRpb24oJ2Nsb3NlZCA8PT4gb3BlbicsIGFuaW1hdGUoJzIwMG1zIGVhc2UtaW4tb3V0JykpXG4gICAgXSlcbiAgXSxcbiAgaG9zdDoge1xuICAgICdkYXRhLXRlc3RpZCc6ICdtb25rZXktc2VsZWN0JyxcbiAgICBjbGFzczogJ21lY3gtc2VsZWN0JyxcbiAgICAnW2NsYXNzLm1lY3gtc2VsZWN0LWRpc2FibGVkXSc6ICdfZGlzYWJsZWQnLFxuICAgICdbY2xhc3MubWVjeC1zZWxlY3QtZm9jdXNlZF0nOiAnZm9jdXNlZCcsXG4gICAgJ1thdHRyLmlkXSc6ICdpZCcsXG4gICAgJ1thdHRyLnRhYmluZGV4XSc6ICdkaXNhYmxlZCA/IC0xIDogdGFiSW5kZXgnLFxuICAgICcoZm9jdXMpJzogJ19vbkZvY3VzKCknLFxuICAgICcoYmx1ciknOiAnX29uQmx1cigpJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIE1vbmtleVNlbGVjdENvbXBvbmVudFxuICBpbXBsZW1lbnRzXG4gICAgTW9ua2V5Rm9ybUZpZWxkQ29udHJvbCxcbiAgICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIE9uSW5pdCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25DaGFuZ2VzXG57XG4gIEBWaWV3Q2hpbGQoJ292ZXJsYXlUZW1wbGF0ZScpIG92ZXJsYXlUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQFZpZXdDaGlsZCgnb3ZlcmxheScpIG92ZXJsYXlFbCE6IEVsZW1lbnRSZWY7XG5cbiAgQFZpZXdDaGlsZCgndHJpZ2dlcicpIHRyaWdnZXIhOiBFbGVtZW50UmVmO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oTW9ua2V5T3B0aW9uQ29tcG9uZW50KSBvcHRpb25zITogUXVlcnlMaXN0PE1vbmtleU9wdGlvbkNvbXBvbmVudD47XG5cbiAgQElucHV0KCkgdGFiSW5kZXggPSAwO1xuXG4gIEBPdXRwdXQoKSBvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KCkgb25TZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgcGxhY2Vob2xkZXIgPSAnJztcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgbG9hZGluZyA9IGZhbHNlO1xuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBzaG93U2VhcmNoID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBzZWFyY2hQbGFjZWhvbGRlciA9ICcnO1xuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBjYWxsYmFja1NlYXJjaCA9IGZhbHNlO1xuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMubmdDb250cm9sICYmIHRoaXMubmdDb250cm9sLmRpc2FibGVkICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5uZ0NvbnRyb2wuZGlzYWJsZWQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuXG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gdmFsdWU7XG5cbiAgICBpZiAodGhpcy5mb2N1c2VkKSB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZCA/PyB0aGlzLm5nQ29udHJvbD8uY29udHJvbD8uaGFzVmFsaWRhdG9yKFZhbGlkYXRvcnMucmVxdWlyZWQpID8/IGZhbHNlO1xuICB9XG5cbiAgc2V0IHJlcXVpcmVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fcmVxdWlyZWQgPSB2YWx1ZTtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIF9yZXF1aXJlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICBASW5wdXQoKVxuICBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLl92YWx1ZSAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICB0aGlzLl9vbkNoYW5nZSh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgX3ZhbHVlID0gbnVsbDtcblxuICBsYWJlbFNlbGVjdGVkID0gJyc7XG5cbiAgcHJpdmF0ZSBvdmVybGF5UmVmOiBPdmVybGF5UmVmIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBfZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGlkR2VuZXJhdG9yID0gaW5qZWN0KElkR2VuZXJhdG9yKTtcblxuICBuZ0NvbnRyb2w6IE5nQ29udHJvbCB8IG51bGwgPSBpbmplY3QoTmdDb250cm9sLCB7IHNlbGY6IHRydWUsIG9wdGlvbmFsOiB0cnVlIH0pITtcblxuICBwcm90ZWN0ZWQgX2VsZW1lbnRSZWYgPVxuICAgIGluamVjdDxFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MU2VsZWN0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ+PihFbGVtZW50UmVmKTtcblxuICByZWFkb25seSBjdXJyZW5jeTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGZvY3VzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBfZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICByZWFkb25seSBpZDogc3RyaW5nID0gdGhpcy5pZEdlbmVyYXRvci5nZXRJZCgnbW9ua2V5LXNlbGVjdC0nKTtcblxuICByZWFkb25seSBwZXJjZW50OiBib29sZWFuID0gZmFsc2U7XG5cbiAgcmVhZG9ubHkgc3RhdGVDaGFuZ2VzID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICByZWFkb25seSB0eXBlOiBzdHJpbmcgPSAnJztcblxuICByZWFkb25seSBzZWFyY2hIYW5kbGUgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICByZWFkb25seSBzZWFyY2hEaWN0aW9uYXJ5ID0gaW5qZWN0KE1vbmtleURpY3Rpb25hcnlTZXJ2aWNlKS5nZXQoJ05PLURBVEEnKTtcblxuICByZWFkb25seSBsb2FkaW5nRGljdGlvbmFyeSA9IGluamVjdChNb25rZXlEaWN0aW9uYXJ5U2VydmljZSkuZ2V0KCdMT0FESU5HJyk7XG5cbiAgc2hvd1NlYXJjaE5vRGF0YSA9IGZhbHNlO1xuXG4gIGlzT3BlbiA9IGZhbHNlO1xuXG4gIHNlYXJjaERhdGEgPSAnJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG92ZXJsYXk6IE92ZXJsYXksXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZm9ybUZpZWxkOiBNb25rZXlGb3JtRmllbGRDb21wb25lbnRcbiAgKSB7XG4gICAgaWYgKHRoaXMubmdDb250cm9sKSB7XG4gICAgICB0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoYW5nZUNvbnRyb2woKSB7XG4gICAgaWYgKHRoaXMuZm9ybUZpZWxkPy5jb250cm9sKSB7XG4gICAgICB0aGlzLmZvcm1GaWVsZC5jb250cm9sLmxvYWRpbmcgPSB0aGlzLmxvYWRpbmc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjaGFuZ2VTZWxlY3RlZCgpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZvckVhY2goKG9wdCkgPT4ge1xuICAgICAgICAgIG9wdC5zZWxlY3RlZCA9IG9wdC52YWx1ZSA9PT0gdGhpcy52YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRMYWJlbCgpO1xuICAgICAgfVxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZU9wdGlvbnMoKSB7XG4gICAgdGhpcy5vcHRpb25zLmZvckVhY2goKG9wdGlvbikgPT4ge1xuICAgICAgaWYgKCFvcHRpb24uYWN0aW9uKSB7XG4gICAgICAgIG9wdGlvbi5hY3Rpb24gPSB0aGlzLnNlbGVjdE9wdGlvbi5iaW5kKHRoaXMsIG9wdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5Ecm9wZG93bigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vcHRpb25zPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZm9ybUZpZWxkLmNvbnRyb2wuZGlzYWJsZVRvQmVEaXJ0eSA9IHRydWU7XG4gICAgICB0aGlzLmlzT3BlbiA9IHRydWU7XG4gICAgICB0aGlzLmNyZWF0ZU92ZXJsYXkoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsb3NlRHJvcGRvd24oKSB7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlO1xuICAgIHRoaXMuZm9ybUZpZWxkLmNvbnRyb2wuZGlzYWJsZVRvQmVEaXJ0eSA9IGZhbHNlO1xuICAgIGlmICghdGhpcy5jYWxsYmFja1NlYXJjaCkge1xuICAgICAgdGhpcy5zZWFyY2hEYXRhID0gJyc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZU92ZXJsYXkoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3ZlcmxheVJlZikge1xuICAgICAgdGhpcy5vdmVybGF5UmVmLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMub3ZlcmxheVJlZiA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplV2l0aE92ZXJsYXkoKSB7XG4gICAgaWYgKHRoaXMuc2hvd1NlYXJjaCkge1xuICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMub3ZlcmxheVJlZj8ub3ZlcmxheUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgYCMke3RoaXMuaWR9LXNlYXJjaGBcbiAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgIHRoaXMub3B0aW9ucy5mb3JFYWNoKChvcHQpID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMub3ZlcmxheVJlZj8ub3ZlcmxheUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICBgIyR7b3B0LmlkfWBcbiAgICAgICAgKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgICAgIGlmICghZWxlbWVudCkgcmV0dXJuO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgICAgIH0pO1xuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZWxlbWVudD8uZm9jdXMoKTtcbiAgICAgIH0sIDApO1xuICAgICAgdGhpcy5zaG93U2VhcmNoTm9EYXRhID0gZmFsc2U7XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMub3B0aW9ucy5maW5kKChvcHQpID0+IHtcbiAgICAgICAgcmV0dXJuIG9wdC5zZWxlY3RlZDtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMub3ZlcmxheVJlZj8ub3ZlcmxheUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICBgIyR7c2VsZWN0ZWQuaWR9YFxuICAgICAgICApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBlbGVtZW50Py5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnaW5zdGFudCcsIGJsb2NrOiAnY2VudGVyJyB9KTtcbiAgICAgIH1cbiAgICB9LCAwKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlT3ZlcmxheSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vdmVybGF5UmVmKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgb2Zmc2V0ID0gNDtcbiAgICBjb25zdCBwb3NpdGlvbnM6IENvbm5lY3RlZFBvc2l0aW9uW10gPSBbXG4gICAgICB7XG4gICAgICAgIG9yaWdpblg6ICdzdGFydCcsXG4gICAgICAgIG9yaWdpblk6ICdib3R0b20nLFxuICAgICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgICAgICAgb3ZlcmxheVk6ICd0b3AnLFxuICAgICAgICBvZmZzZXRZOiBvZmZzZXRcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG9yaWdpblg6ICdzdGFydCcsXG4gICAgICAgIG9yaWdpblk6ICd0b3AnLFxuICAgICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgICAgICAgb3ZlcmxheVk6ICdib3R0b20nLFxuICAgICAgICBvZmZzZXRZOiAtb2Zmc2V0XG4gICAgICB9XG4gICAgXTtcblxuICAgIGxldCBhbmNob3IgPSB0aGlzLnRyaWdnZXI7XG4gICAgbGV0IHdpZHRoID0gYW5jaG9yLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG5cbiAgICBpZiAodGhpcy5mb3JtRmllbGQ/LmVsZW1lbnRSZWYpIHtcbiAgICAgIGNvbnN0IGVsID0gdGhpcy5mb3JtRmllbGQ/LmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcubWVjeC1mb3JtLWZpZWxkLWJvZHknKTtcbiAgICAgIGFuY2hvciA9IGVsO1xuICAgICAgd2lkdGggPSBlbC5vZmZzZXRXaWR0aDtcbiAgICB9XG5cbiAgICBjb25zdCBwb3NpdGlvblN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5XG4gICAgICAucG9zaXRpb24oKVxuICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8oYW5jaG9yKVxuICAgICAgLndpdGhQb3NpdGlvbnMocG9zaXRpb25zKVxuICAgICAgLndpdGhQdXNoKHRydWUpO1xuXG4gICAgdGhpcy5vdmVybGF5UmVmID0gdGhpcy5vdmVybGF5LmNyZWF0ZSh7XG4gICAgICBwb3NpdGlvblN0cmF0ZWd5LFxuICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLmJsb2NrKCksXG4gICAgICB3aWR0aCxcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxuICAgICAgYmFja2Ryb3BDbGFzczogJ25vLWNsYXNzJ1xuICAgIH0pO1xuXG4gICAgY29uc3QgcG9ydGFsID0gbmV3IFRlbXBsYXRlUG9ydGFsKHRoaXMub3ZlcmxheVRlbXBsYXRlLCB0aGlzLnZpZXdDb250YWluZXJSZWYpO1xuXG4gICAgdGhpcy5vdmVybGF5UmVmLmF0dGFjaChwb3J0YWwpO1xuXG4gICAgdGhpcy5vdmVybGF5UmVmXG4gICAgICAuYmFja2Ryb3BDbGljaygpXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2VEcm9wZG93bigpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLmluaXRpYWxpemVXaXRoT3ZlcmxheSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZWxlY3RlZExhYmVsKCk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gdGhpcy5vcHRpb25zLmZpbmQoKG9wdCkgPT4ge1xuICAgICAgcmV0dXJuIG9wdC52YWx1ZSA9PT0gdGhpcy52YWx1ZTtcbiAgICB9KTtcbiAgICB0aGlzLmxhYmVsU2VsZWN0ZWQgPSBzZWxlY3RlZE9wdGlvbiA/IHNlbGVjdGVkT3B0aW9uLmRpc3BsYXlDb250ZW50IDogJyc7XG4gIH1cblxuICBwcml2YXRlIGV4ZWN1dGVTZWFyY2goc2VhcmNoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBsZXQgZm91bmQgPSBmYWxzZTtcbiAgICB0aGlzLm9wdGlvbnMuZm9yRWFjaCgob3B0KSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5vdmVybGF5UmVmPy5vdmVybGF5RWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICBgIyR7b3B0LmlkfWBcbiAgICAgICkgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuXG4gICAgICBpZiAoIWVsZW1lbnQpIHJldHVybjtcblxuICAgICAgY29uc3QgaXNNYXRjaCA9IG5vcm1hbGl6ZVN0cmluZ1RvU2VhcmNoKG9wdC5kaXNwbGF5Q29udGVudCkuaW5jbHVkZXMoXG4gICAgICAgIG5vcm1hbGl6ZVN0cmluZ1RvU2VhcmNoKHNlYXJjaClcbiAgICAgICk7XG4gICAgICBpZiAoaXNNYXRjaCkge1xuICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBpc01hdGNoID8gJycgOiAnbm9uZSc7XG4gICAgfSk7XG5cbiAgICB0aGlzLnJlcG9zaXRpb25TY3JvbGwoKTtcbiAgICB0aGlzLnNob3dTZWFyY2hOb0RhdGEgPSAhZm91bmQ7XG4gIH1cblxuICBwcml2YXRlIHJlcG9zaXRpb25TY3JvbGwoKSB7XG4gICAgY29uc3Qgb3ZlcmxheUVsZW1lbnQgPSB0aGlzLm92ZXJsYXlSZWY/Lm92ZXJsYXlFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAnLm1lY3gtc2VsZWN0LW92ZXJsYXknXG4gICAgKSBhcyBIVE1MRWxlbWVudDtcblxuICAgIGlmIChvdmVybGF5RWxlbWVudCkge1xuICAgICAgb3ZlcmxheUVsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNlYXJjaEhhbmRsZVxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDIwMCksIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoKHNlYXJjaDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNhbGxiYWNrU2VhcmNoKSB7XG4gICAgICAgICAgdGhpcy5vblNlYXJjaC5uZXh0KHNlYXJjaCk7XG4gICAgICAgICAgdGhpcy5yZXBvc2l0aW9uU2Nyb2xsKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5leGVjdXRlU2VhcmNoKHNlYXJjaCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHRoaXMuaW5pdGlhbGl6ZU9wdGlvbnMoKTtcbiAgICB0aGlzLm9wdGlvbnMuY2hhbmdlcy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSkuc3Vic2NyaWJlKChyZXNwKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkTGFiZWwoKTtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZU9wdGlvbnMoKTtcbiAgICAgIHRoaXMuY2hhbmdlU2VsZWN0ZWQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLm92ZXJsYXlSZWYpIHtcbiAgICAgIHRoaXMub3ZlcmxheVJlZi5kaXNwb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlRHJvcGRvd24oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gICAgICAgIHRoaXMuX29uVG91Y2hlZCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcGVuRHJvcGRvd24oKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkFuaW1hdGlvbkVuZCA9IChldmVudDogYW55KSA9PiB7XG4gICAgaWYgKGV2ZW50LnRvU3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICB0aGlzLmNsb3NlT3ZlcmxheSgpO1xuICAgIH1cbiAgfTtcblxuICBzZWxlY3RPcHRpb24ob3B0aW9uOiBNb25rZXlPcHRpb25Db21wb25lbnQpOiB2b2lkIHtcbiAgICBpZiAoIW9wdGlvbi5kaXNhYmxlZCAmJiAhdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy52YWx1ZSA9IG9wdGlvbi52YWx1ZTtcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRMYWJlbCgpO1xuICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gICAgICB0aGlzLl9vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcblxuICAgICAgdGhpcy5vcHRpb25zLmZvckVhY2goKG9wdCkgPT4ge1xuICAgICAgICBvcHQuc2VsZWN0ZWQgPSBvcHQudmFsdWUgPT09IHRoaXMudmFsdWU7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5jaGFuZ2VTZWxlY3RlZCgpO1xuICB9XG5cbiAgb25Db250YWluZXJDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG5cbiAgICB0aGlzLm9wZW5Ecm9wZG93bigpO1xuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgX29uRm9jdXMoKSB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSB0cnVlO1xuICAgICAgdGhpcy5fb25Ub3VjaGVkKCk7XG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgfVxuICB9XG5cbiAgX29uQmx1cigpIHtcbiAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZTtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gIH1cblxuICBfb25DaGFuZ2U6IGFueSA9ICgpID0+IHt9O1xuXG4gIF9vblRvdWNoZWQ6IGFueSA9ICgpID0+IHt9O1xuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fb25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBsZXQgaGFzQ2hhbmdlcyA9IGZhbHNlO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkb3Qtbm90YXRpb25cbiAgICBjb25zdCBjaGFuZ2VzTG9hZGluZyA9IGNoYW5nZXM/LlsnbG9hZGluZyddO1xuICAgIGlmIChjaGFuZ2VzTG9hZGluZz8uY3VycmVudFZhbHVlICE9PSBjaGFuZ2VzTG9hZGluZz8ucHJldmlvdXNWYWx1ZSkge1xuICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG4gICAgICB0aGlzLmNoYW5nZUNvbnRyb2woKTtcbiAgICB9XG5cbiAgICBpZiAoaGFzQ2hhbmdlcykge1xuICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICAgIH1cbiAgfVxuXG4gIG9uSGFuZGxlU2VhcmNoKGV2ZW50OiBFdmVudCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IHZhbHVlIH0gPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgIGNvbnN0IGhhbmRsZWQgPSBzYW5pdGl6ZVN0cmluZyh2YWx1ZSk7XG4gICAgICB0aGlzLnNlYXJjaEhhbmRsZS5uZXh0KGhhbmRsZWQgfHwgJycpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIG5vdCB0byBkb1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cIm1lY3gtc2VsZWN0LXRyaWdnZXJcIlxuICBbY2xhc3Mub3Blbl09XCJpc09wZW5cIlxuICAoY2xpY2spPVwidG9nZ2xlRHJvcGRvd24oKVwiXG4gIHJvbGU9XCJjb21ib2JveFwiXG4gIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNPcGVuXCJcbiAgI3RyaWdnZXJcbj5cbiAgPGRpdiBjbGFzcz1cIm1lY3gtc2VsZWN0LXZhbHVlXCIgW2NsYXNzLmhhcy12YWx1ZV09XCJ2YWx1ZVwiPlxuICAgIDxzcGFuPnt7IGxhYmVsU2VsZWN0ZWQgfHwgcGxhY2Vob2xkZXIgfX08L3NwYW4+XG4gIDwvZGl2PlxuXG4gIEBpZiAoIWxvYWRpbmcpIHtcbiAgICA8dXRpbC1pY29uIGNsYXNzPVwibWVjeC1zZWxlY3QtaWNvblwiIG5hbWU9XCJhcnJvd0Rvd25cIiAvPlxuICB9XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNvdmVybGF5VGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJtZWN4LXNlbGVjdC1ib2R5LW92ZXJsYXlcIj5cbiAgICBAaWYgKHNob3dTZWFyY2gpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJtZWN4LXNlbGVjdC1zZWFyY2hcIj5cbiAgICAgICAgPHV0aWwtaWNvbiBjbGFzcz1cIm1lY3gtc2VsZWN0LXNlYXJjaC1pY29uXCIgbmFtZT1cInNlYXJjaFwiIC8+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIChpbnB1dCk9XCJvbkhhbmRsZVNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgW2lkXT1cImlkICsgJy1zZWFyY2gnXCJcbiAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgIG1heGxlbmd0aD1cIjUwXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2VhcmNoUGxhY2Vob2xkZXJcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoRGF0YVwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJtZWN4LXNlbGVjdC1vdmVybGF5XCJcbiAgICAgICNvdmVybGF5XG4gICAgICBbQGFuaW1hdGlvbl09XCJpc09wZW4gPyAnb3BlbicgOiAnY2xvc2VkJ1wiXG4gICAgICAoQGFuaW1hdGlvbi5kb25lKT1cIm9uQW5pbWF0aW9uRW5kKCRldmVudClcIlxuICAgID5cbiAgICAgIDxuZy1jb250ZW50IC8+XG4gICAgPC9kaXY+XG4gICAgQGlmIChzaG93U2VhcmNoICYmIHNob3dTZWFyY2hOb0RhdGEpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJtZWN4LXNlbGVjdC1zZWFyY2gtbm8tZGF0YVwiPlxuICAgICAgICA8dXRpbC1pY29uIGNsYXNzPVwibWVjeC1zZWxlY3Qtc2VhcmNoLW5vLWRhdGEtaWNvblwiIG5hbWU9XCJzZWFyY2hGYWlsXCIgLz5cbiAgICAgICAge3sgc2VhcmNoRGljdGlvbmFyeSB8IGFzeW5jIH19XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gICAgQGlmIChsb2FkaW5nKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwibWVjeC1zZWxlY3Qtc2VhcmNoLWxvYWRpbmdcIj5cbiAgICAgICAge3sgbG9hZGluZ0RpY3Rpb25hcnkgfCBhc3luYyB9fVxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -1,7 +0,0 @@
1
- /** ************************
2
- * Copyright Monkey Exchange. All Rights Reserved
3
- * This style guide was developed by Monkey Exchange Team
4
- * MIT Licence
5
- ************************* */
6
- export * from './status.component';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tb25rZXktc3R5bGUtZ3VpZGUtdjIvc3JjL2xpYi9jb21wb25lbnRzL3N0YXR1cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs2QkFJNkI7QUFDN0IsY0FBYyxvQkFBb0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiAqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENvcHlyaWdodCBNb25rZXkgRXhjaGFuZ2UuIEFsbCBSaWdodHMgUmVzZXJ2ZWRcbiAqIFRoaXMgc3R5bGUgZ3VpZGUgd2FzIGRldmVsb3BlZCBieSBNb25rZXkgRXhjaGFuZ2UgVGVhbVxuICogTUlUIExpY2VuY2VcbiAqKioqKioqKioqKioqKioqKioqKioqKioqICovXG5leHBvcnQgKiBmcm9tICcuL3N0YXR1cy5jb21wb25lbnQnO1xuIl19
@@ -1,45 +0,0 @@
1
- /** ************************
2
- * Copyright Monkey Exchange. All Rights Reserved
3
- * This style guide was developed by Monkey Exchange Team
4
- * MIT Licence
5
- ************************* */
6
- import { CommonModule } from '@angular/common';
7
- import { Component, HostBinding, inject, Input, input } from '@angular/core';
8
- import { IdGenerator } from '../../../utils';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "@angular/common";
11
- export class MonkeyStatusComponent {
12
- get class() {
13
- return `${this.type()} ${this.size()}`;
14
- }
15
- get id() {
16
- return this._id;
17
- }
18
- set id(value) {
19
- this._id = value || this._uid;
20
- }
21
- constructor() {
22
- this.type = input.required();
23
- this.size = input('md');
24
- this.label = input();
25
- this._uid = inject(IdGenerator).getId('monkey-status-');
26
- // eslint-disable-next-line no-self-assign
27
- this.id = this.id;
28
- }
29
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MonkeyStatusComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
30
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: MonkeyStatusComponent, isStandalone: true, selector: "monkey-status", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: true, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: false, isRequired: false, transformFunction: null } }, host: { attributes: { "data-testid": "monkey-status" }, properties: { "attr.id": "id", "id": "id", "class": "this.class" } }, ngImport: i0, template: "<div class=\"status\"></div>\n<span *ngIf=\"label() as lb\">\n {{ lb }}\n</span>\n", styles: [":host{display:flex;align-items:center;gap:8px}:host span{color:var(--mecx-color-gray-700);font-style:normal;font-weight:400;line-height:24px}:host .status{width:8px;height:8px;border-radius:50%;flex-shrink:0}:host.sm span{font-size:14px;letter-spacing:.42px}:host.sm .status{height:8px;width:8px}:host.md span{font-size:16px;letter-spacing:.48px}:host.md .status{height:12px;width:12px}:host.lg span{font-size:18px;letter-spacing:.52px}:host.lg .status{height:16px;width:16px}:host.default .status{background-color:var(--mecx-color-gray-300)}:host.success .status{background-color:var(--mecx-color-success-main)}:host.warning .status{background-color:var(--mecx-color-warning-main)}:host.error .status{background-color:var(--mecx-color-error-700)}:host.question .status{background-color:var(--mecx-color-question-main)}:host.info .status{background-color:var(--mecx-color-info)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
31
- }
32
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MonkeyStatusComponent, decorators: [{
33
- type: Component,
34
- args: [{ selector: 'monkey-status', standalone: true, imports: [CommonModule], host: {
35
- 'data-testid': 'monkey-status',
36
- '[attr.id]': 'id',
37
- '[id]': 'id'
38
- }, template: "<div class=\"status\"></div>\n<span *ngIf=\"label() as lb\">\n {{ lb }}\n</span>\n", styles: [":host{display:flex;align-items:center;gap:8px}:host span{color:var(--mecx-color-gray-700);font-style:normal;font-weight:400;line-height:24px}:host .status{width:8px;height:8px;border-radius:50%;flex-shrink:0}:host.sm span{font-size:14px;letter-spacing:.42px}:host.sm .status{height:8px;width:8px}:host.md span{font-size:16px;letter-spacing:.48px}:host.md .status{height:12px;width:12px}:host.lg span{font-size:18px;letter-spacing:.52px}:host.lg .status{height:16px;width:16px}:host.default .status{background-color:var(--mecx-color-gray-300)}:host.success .status{background-color:var(--mecx-color-success-main)}:host.warning .status{background-color:var(--mecx-color-warning-main)}:host.error .status{background-color:var(--mecx-color-error-700)}:host.question .status{background-color:var(--mecx-color-question-main)}:host.info .status{background-color:var(--mecx-color-info)}\n"] }]
39
- }], ctorParameters: () => [], propDecorators: { class: [{
40
- type: HostBinding,
41
- args: ['class']
42
- }], id: [{
43
- type: Input
44
- }] } });
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21vbmtleS1zdHlsZS1ndWlkZS12Mi9zcmMvbGliL2NvbXBvbmVudHMvc3RhdHVzL3N0YXR1cy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tb25rZXktc3R5bGUtZ3VpZGUtdjIvc3JjL2xpYi9jb21wb25lbnRzL3N0YXR1cy9zdGF0dXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7NkJBSTZCO0FBQzdCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQWlCN0MsTUFBTSxPQUFPLHFCQUFxQjtJQU9oQyxJQUNXLEtBQUs7UUFDZCxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFNRCxJQUNJLEVBQUU7UUFDSixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDbEIsQ0FBQztJQUVELElBQUksRUFBRSxDQUFDLEtBQWE7UUFDbEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztJQUNoQyxDQUFDO0lBRUQ7UUF4QkEsU0FBSSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVUsQ0FBQztRQUVoQyxTQUFJLEdBQUcsS0FBSyxDQUFhLElBQUksQ0FBQyxDQUFDO1FBRS9CLFVBQUssR0FBRyxLQUFLLEVBQVUsQ0FBQztRQU9kLFNBQUksR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFjM0QsMENBQTBDO1FBQzFDLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNwQixDQUFDOytHQTVCVSxxQkFBcUI7bUdBQXJCLHFCQUFxQixvcUJDeEJsQyxxRkFJQSx5NkJEV1ksWUFBWTs7NEZBU1gscUJBQXFCO2tCQVpqQyxTQUFTOytCQUNFLGVBQWUsY0FDYixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsUUFHakI7d0JBQ0osYUFBYSxFQUFFLGVBQWU7d0JBQzlCLFdBQVcsRUFBRSxJQUFJO3dCQUNqQixNQUFNLEVBQUUsSUFBSTtxQkFDYjt3REFVVSxLQUFLO3NCQURmLFdBQVc7dUJBQUMsT0FBTztnQkFVaEIsRUFBRTtzQkFETCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLyoqICoqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IE1vbmtleSBFeGNoYW5nZS4gQWxsIFJpZ2h0cyBSZXNlcnZlZFxuICogVGhpcyBzdHlsZSBndWlkZSB3YXMgZGV2ZWxvcGVkIGJ5IE1vbmtleSBFeGNoYW5nZSBUZWFtXG4gKiBNSVQgTGljZW5jZVxuICoqKioqKioqKioqKioqKioqKioqKioqKiogKi9cbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBpbmplY3QsIElucHV0LCBpbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi8uLi91dGlscyc7XG5pbXBvcnQgeyBNb25rZXlTaXplIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5cbnR5cGUgU3RhdHVzID0gJ2RlZmF1bHQnIHwgJ3N1Y2Nlc3MnIHwgJ3dhcm5pbmcnIHwgJ2Vycm9yJyB8ICdxdWVzdGlvbicgfCAnaW5mbyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21vbmtleS1zdGF0dXMnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3N0YXR1cy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9zdGF0dXMuY29tcG9uZW50LnNjc3MnLFxuICBob3N0OiB7XG4gICAgJ2RhdGEtdGVzdGlkJzogJ21vbmtleS1zdGF0dXMnLFxuICAgICdbYXR0ci5pZF0nOiAnaWQnLFxuICAgICdbaWRdJzogJ2lkJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIE1vbmtleVN0YXR1c0NvbXBvbmVudCB7XG4gIHR5cGUgPSBpbnB1dC5yZXF1aXJlZDxTdGF0dXM+KCk7XG5cbiAgc2l6ZSA9IGlucHV0PE1vbmtleVNpemU+KCdtZCcpO1xuXG4gIGxhYmVsID0gaW5wdXQ8c3RyaW5nPigpO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBwdWJsaWMgZ2V0IGNsYXNzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMudHlwZSgpfSAke3RoaXMuc2l6ZSgpfWA7XG4gIH1cblxuICBwcm90ZWN0ZWQgX3VpZCA9IGluamVjdChJZEdlbmVyYXRvcikuZ2V0SWQoJ21vbmtleS1zdGF0dXMtJyk7XG5cbiAgcHJvdGVjdGVkIF9pZCE6IHN0cmluZztcblxuICBASW5wdXQoKVxuICBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5faWQ7XG4gIH1cblxuICBzZXQgaWQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2lkID0gdmFsdWUgfHwgdGhpcy5fdWlkO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtYXNzaWduXG4gICAgdGhpcy5pZCA9IHRoaXMuaWQ7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJzdGF0dXNcIj48L2Rpdj5cbjxzcGFuICpuZ0lmPVwibGFiZWwoKSBhcyBsYlwiPlxuICB7eyBsYiB9fVxuPC9zcGFuPlxuIl19