tango-app-ui-store-builder 1.2.10 → 1.2.12

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 (50) hide show
  1. package/esm2022/lib/components/chips-input/chips-input.component.mjs +101 -0
  2. package/esm2022/lib/components/collection-update-ai/find-replace-layout/prepare-template/prepare-template.component.mjs +2 -2
  3. package/esm2022/lib/components/create-fixture/create-fixture.component.mjs +66 -25
  4. package/esm2022/lib/components/create-vm/create-vm.component.mjs +2 -2
  5. package/esm2022/lib/components/fixture-template/template-basic-details/template-basic-details.component.mjs +1 -1
  6. package/esm2022/lib/components/fixture-template/template-products/template-products.component.mjs +15 -5
  7. package/esm2022/lib/components/fixture-template/template-vms/template-vms.component.mjs +31 -12
  8. package/esm2022/lib/components/fixture-template-table/popups/create-fixture-template/create-fixture-template.component.mjs +1 -1
  9. package/esm2022/lib/components/look-plano-collection/look-plano-collection.component.mjs +156 -0
  10. package/esm2022/lib/components/look-plano-collection-form/look-plano-collection-form.component.mjs +1204 -0
  11. package/esm2022/lib/components/manage-store-plano/manage-store-plano.component.mjs +1 -1
  12. package/esm2022/lib/components/manage-store-plano/plano-rollout/plano-rollout.component.mjs +1 -1
  13. package/esm2022/lib/components/manage-store-plano/template-basic-details/template-basic-details.component.mjs +1 -1
  14. package/esm2022/lib/components/manage-store-plano/template-products/template-products.component.mjs +2 -2
  15. package/esm2022/lib/components/manage-store-plano/template-vms/template-vms.component.mjs +2 -2
  16. package/esm2022/lib/components/manage-store-plano/verification-feedback/zone-editable-fixture/zone-editable-fixture.component.mjs +1 -1
  17. package/esm2022/lib/components/multiselect-chip-dropdown/multiselect-chip-dropdown.component.mjs +27 -4
  18. package/esm2022/lib/components/onboard-store-plano/create-planogram/create-planogram.component.mjs +2 -2
  19. package/esm2022/lib/components/onboard-store-plano/onboard-store-plano.component.mjs +1 -1
  20. package/esm2022/lib/components/plano-library/fixture-library/popups/create-fixture-modal/create-fixture-modal.component.mjs +1 -1
  21. package/esm2022/lib/components/plano-tools/delete-floor/delete-floor.component.mjs +3 -3
  22. package/esm2022/lib/components/plano-tools/move-bucket/move-bucket.component.mjs +1 -1
  23. package/esm2022/lib/components/plano-tools/swap-template/swap-template.component.mjs +1 -1
  24. package/esm2022/lib/components/planogram/plano-details-parent/plano-details-parent.component.mjs +1 -1
  25. package/esm2022/lib/components/planogram/plano-overview/plano-overview.component.mjs +1 -1
  26. package/esm2022/lib/components/popups/publish-plano-modal/publish-plano-modal.component.mjs +1 -1
  27. package/esm2022/lib/components/reactive-select/reactive-select.component.mjs +22 -3
  28. package/esm2022/lib/components/searchable-select/searchable-select.component.mjs +265 -0
  29. package/esm2022/lib/components/store-plano/store-plano.component.mjs +1 -1
  30. package/esm2022/lib/interfaces/fixture-library.interface.mjs +1 -1
  31. package/esm2022/lib/services/store-builder.service.mjs +28 -3
  32. package/esm2022/lib/tango-store-builder-routing.module.mjs +11 -1
  33. package/esm2022/lib/tango-store-builder.module.mjs +23 -4
  34. package/fesm2022/tango-app-ui-store-builder.mjs +1914 -69
  35. package/fesm2022/tango-app-ui-store-builder.mjs.map +1 -1
  36. package/lib/components/chips-input/chips-input.component.d.ts +35 -0
  37. package/lib/components/create-fixture/create-fixture.component.d.ts +3 -0
  38. package/lib/components/fixture-template/template-products/template-products.component.d.ts +9 -1
  39. package/lib/components/fixture-template/template-vms/template-vms.component.d.ts +9 -1
  40. package/lib/components/look-plano-collection/look-plano-collection.component.d.ts +53 -0
  41. package/lib/components/look-plano-collection-form/look-plano-collection-form.component.d.ts +237 -0
  42. package/lib/components/manage-plano/rollout-table/rollout-table.component.d.ts +4 -4
  43. package/lib/components/manage-plano/verification-table/verification-table.component.d.ts +5 -5
  44. package/lib/components/multiselect-chip-dropdown/multiselect-chip-dropdown.component.d.ts +12 -1
  45. package/lib/components/reactive-select/reactive-select.component.d.ts +12 -1
  46. package/lib/components/searchable-select/searchable-select.component.d.ts +56 -0
  47. package/lib/interfaces/fixture-library.interface.d.ts +1 -0
  48. package/lib/services/store-builder.service.d.ts +7 -1
  49. package/lib/tango-store-builder.module.d.ts +39 -34
  50. package/package.json +1 -1
@@ -0,0 +1,101 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, forwardRef, Input } from '@angular/core';
3
+ import { FormsModule, NG_VALUE_ACCESSOR, } from '@angular/forms';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common";
6
+ import * as i2 from "@angular/forms";
7
+ /**
8
+ * Free-text chips/tag input. The user types a value and presses Enter to turn
9
+ * it into a chip; chips are removed with their × button (or Backspace on an
10
+ * empty input). Binds to a reactive form control as a `string[]`.
11
+ *
12
+ * Unlike multiselect-chip-dropdown / searchable-select (which pick from a
13
+ * predefined list), this accepts arbitrary text — there is no options list.
14
+ */
15
+ export class ChipsInputComponent {
16
+ placeholder = 'Type and press Enter';
17
+ /** Allow the same value to appear more than once. Off by default. */
18
+ allowDuplicates = false;
19
+ chips = [];
20
+ inputValue = '';
21
+ isDisabled = false;
22
+ onChange = () => { };
23
+ onTouched = () => { };
24
+ writeValue(value) {
25
+ this.chips = Array.isArray(value) ? [...value] : [];
26
+ }
27
+ registerOnChange(fn) {
28
+ this.onChange = fn;
29
+ }
30
+ registerOnTouched(fn) {
31
+ this.onTouched = fn;
32
+ }
33
+ setDisabledState(isDisabled) {
34
+ this.isDisabled = isDisabled;
35
+ }
36
+ /** Enter → commit the typed text as a new chip. */
37
+ onEnter(event) {
38
+ event.preventDefault();
39
+ this.addChip();
40
+ }
41
+ /** Commit any pending text when focus leaves, and mark the control touched. */
42
+ onBlur() {
43
+ this.addChip();
44
+ this.onTouched();
45
+ }
46
+ /** Backspace on an empty input removes the last chip (standard tag-input UX). */
47
+ onBackspace() {
48
+ if (this.isDisabled || this.inputValue || !this.chips.length)
49
+ return;
50
+ this.chips = this.chips.slice(0, -1);
51
+ this.emit();
52
+ }
53
+ addChip() {
54
+ if (this.isDisabled)
55
+ return;
56
+ const value = this.inputValue.trim();
57
+ if (!value)
58
+ return;
59
+ const dup = this.chips.some((c) => c.toLowerCase() === value.toLowerCase());
60
+ if (!this.allowDuplicates && dup) {
61
+ this.inputValue = '';
62
+ return;
63
+ }
64
+ this.chips = [...this.chips, value];
65
+ this.inputValue = '';
66
+ this.emit();
67
+ }
68
+ removeChip(index) {
69
+ if (this.isDisabled)
70
+ return;
71
+ this.chips = this.chips.filter((_, i) => i !== index);
72
+ this.emit();
73
+ }
74
+ emit() {
75
+ this.onChange(this.chips);
76
+ this.onTouched();
77
+ }
78
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChipsInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
79
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ChipsInputComponent, isStandalone: true, selector: "lib-chips-input", inputs: { placeholder: "placeholder", allowDuplicates: "allowDuplicates" }, providers: [
80
+ {
81
+ provide: NG_VALUE_ACCESSOR,
82
+ useExisting: forwardRef(() => ChipsInputComponent),
83
+ multi: true,
84
+ },
85
+ ], ngImport: i0, template: "<div class=\"chips-input\" [class.disabled]=\"isDisabled\" (click)=\"textInput.focus()\">\r\n <span class=\"chip\" *ngFor=\"let chip of chips; let i = index\">\r\n <span class=\"chip-label\">{{ chip }}</span>\r\n <button\r\n type=\"button\"\r\n class=\"chip-x\"\r\n [disabled]=\"isDisabled\"\r\n (click)=\"$event.stopPropagation(); removeChip(i)\"\r\n >&times;</button>\r\n </span>\r\n <input\r\n #textInput\r\n type=\"text\"\r\n class=\"chip-text\"\r\n [(ngModel)]=\"inputValue\"\r\n [placeholder]=\"chips.length ? '' : placeholder\"\r\n [disabled]=\"isDisabled\"\r\n (keydown.enter)=\"onEnter($event)\"\r\n (keydown.backspace)=\"onBackspace()\"\r\n (blur)=\"onBlur()\"\r\n />\r\n</div>\r\n", styles: [":host{display:block}.chips-input{display:flex;flex-wrap:wrap;align-items:center;gap:6px;min-height:31px;padding:4px 10px;border:1px solid var(--Gray-300, #d0d5dd);border-radius:.475rem;background:#fff;cursor:text}.chips-input.disabled{background:#f1f5f9;cursor:not-allowed}.chips-input .chip{display:inline-flex;align-items:center;gap:4px;padding:1px 4px 1px 8px;border-radius:12px;background:var(--Gray-100, #f2f4f7);font-size:12px;line-height:18px;max-width:100%}.chips-input .chip .chip-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:180px}.chips-input .chip .chip-x{background:none;border:0;color:#7a7a7a;padding:0 2px;font-size:13px;line-height:1;cursor:pointer}.chips-input .chip .chip-x:hover{color:#475569}.chips-input .chip-text{flex:1 1 80px;min-width:80px;width:auto;height:auto;min-height:21px;margin:0!important;padding:0!important;border:0!important;outline:0!important;box-shadow:none!important;border-radius:0!important;appearance:none;-webkit-appearance:none;font-size:13px;line-height:21px;background:transparent!important;color:#1e293b}.chips-input .chip-text:focus,.chips-input .chip-text:focus-visible{border:0!important;outline:0!important;box-shadow:none!important}.chips-input .chip-text::placeholder{color:var(--Gray-500, #667085)}.chips-input .chip-text:disabled{background:transparent!important;cursor:not-allowed}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
86
+ }
87
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChipsInputComponent, decorators: [{
88
+ type: Component,
89
+ args: [{ selector: 'lib-chips-input', standalone: true, imports: [CommonModule, FormsModule], providers: [
90
+ {
91
+ provide: NG_VALUE_ACCESSOR,
92
+ useExisting: forwardRef(() => ChipsInputComponent),
93
+ multi: true,
94
+ },
95
+ ], template: "<div class=\"chips-input\" [class.disabled]=\"isDisabled\" (click)=\"textInput.focus()\">\r\n <span class=\"chip\" *ngFor=\"let chip of chips; let i = index\">\r\n <span class=\"chip-label\">{{ chip }}</span>\r\n <button\r\n type=\"button\"\r\n class=\"chip-x\"\r\n [disabled]=\"isDisabled\"\r\n (click)=\"$event.stopPropagation(); removeChip(i)\"\r\n >&times;</button>\r\n </span>\r\n <input\r\n #textInput\r\n type=\"text\"\r\n class=\"chip-text\"\r\n [(ngModel)]=\"inputValue\"\r\n [placeholder]=\"chips.length ? '' : placeholder\"\r\n [disabled]=\"isDisabled\"\r\n (keydown.enter)=\"onEnter($event)\"\r\n (keydown.backspace)=\"onBackspace()\"\r\n (blur)=\"onBlur()\"\r\n />\r\n</div>\r\n", styles: [":host{display:block}.chips-input{display:flex;flex-wrap:wrap;align-items:center;gap:6px;min-height:31px;padding:4px 10px;border:1px solid var(--Gray-300, #d0d5dd);border-radius:.475rem;background:#fff;cursor:text}.chips-input.disabled{background:#f1f5f9;cursor:not-allowed}.chips-input .chip{display:inline-flex;align-items:center;gap:4px;padding:1px 4px 1px 8px;border-radius:12px;background:var(--Gray-100, #f2f4f7);font-size:12px;line-height:18px;max-width:100%}.chips-input .chip .chip-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:180px}.chips-input .chip .chip-x{background:none;border:0;color:#7a7a7a;padding:0 2px;font-size:13px;line-height:1;cursor:pointer}.chips-input .chip .chip-x:hover{color:#475569}.chips-input .chip-text{flex:1 1 80px;min-width:80px;width:auto;height:auto;min-height:21px;margin:0!important;padding:0!important;border:0!important;outline:0!important;box-shadow:none!important;border-radius:0!important;appearance:none;-webkit-appearance:none;font-size:13px;line-height:21px;background:transparent!important;color:#1e293b}.chips-input .chip-text:focus,.chips-input .chip-text:focus-visible{border:0!important;outline:0!important;box-shadow:none!important}.chips-input .chip-text::placeholder{color:var(--Gray-500, #667085)}.chips-input .chip-text:disabled{background:transparent!important;cursor:not-allowed}\n"] }]
96
+ }], propDecorators: { placeholder: [{
97
+ type: Input
98
+ }], allowDuplicates: [{
99
+ type: Input
100
+ }] } });
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcHMtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvY2hpcHMtaW5wdXQvY2hpcHMtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvY2hpcHMtaW5wdXQvY2hpcHMtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBRUwsV0FBVyxFQUNYLGlCQUFpQixHQUNsQixNQUFNLGdCQUFnQixDQUFDOzs7O0FBRXhCOzs7Ozs7O0dBT0c7QUFlSCxNQUFNLE9BQU8sbUJBQW1CO0lBQ3JCLFdBQVcsR0FBRyxzQkFBc0IsQ0FBQztJQUM5QyxxRUFBcUU7SUFDNUQsZUFBZSxHQUFHLEtBQUssQ0FBQztJQUVqQyxLQUFLLEdBQWEsRUFBRSxDQUFDO0lBQ3JCLFVBQVUsR0FBRyxFQUFFLENBQUM7SUFDaEIsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUVYLFFBQVEsR0FBOEIsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0lBQy9DLFNBQVMsR0FBZSxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFFekMsVUFBVSxDQUFDLEtBQWU7UUFDeEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN0RCxDQUFDO0lBQ0QsZ0JBQWdCLENB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QW9CLENBQUM7NEJBQ2xELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGOzhCQUdRLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUcsZUFBZTtzQkFBdkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgZm9yd2FyZFJlZiwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcclxuICBGb3Jtc01vZHVsZSxcclxuICBOR19WQUxVRV9BQ0NFU1NPUixcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG4vKipcclxuICogRnJlZS10ZXh0IGNoaXBzL3RhZyBpbnB1dC4gVGhlIHVzZXIgdHlwZXMgYSB2YWx1ZSBhbmQgcHJlc3NlcyBFbnRlciB0byB0dXJuXHJcbiAqIGl0IGludG8gYSBjaGlwOyBjaGlwcyBhcmUgcmVtb3ZlZCB3aXRoIHRoZWlyIMOXIGJ1dHRvbiAob3IgQmFja3NwYWNlIG9uIGFuXHJcbiAqIGVtcHR5IGlucHV0KS4gQmluZHMgdG8gYSByZWFjdGl2ZSBmb3JtIGNvbnRyb2wgYXMgYSBgc3RyaW5nW11gLlxyXG4gKlxyXG4gKiBVbmxpa2UgbXVsdGlzZWxlY3QtY2hpcC1kcm9wZG93biAvIHNlYXJjaGFibGUtc2VsZWN0ICh3aGljaCBwaWNrIGZyb20gYVxyXG4gKiBwcmVkZWZpbmVkIGxpc3QpLCB0aGlzIGFjY2VwdHMgYXJiaXRyYXJ5IHRleHQg4oCUIHRoZXJlIGlzIG5vIG9wdGlvbnMgbGlzdC5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWNoaXBzLWlucHV0JyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vY2hpcHMtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9jaGlwcy1pbnB1dC5jb21wb25lbnQuc2NzcycsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDaGlwc0lucHV0Q29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9LFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDaGlwc0lucHV0Q29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJ1R5cGUgYW5kIHByZXNzIEVudGVyJztcclxuICAvKiogQWxsb3cgdGhlIHNhbWUgdmFsdWUgdG8gYXBwZWFyIG1vcmUgdGhhbiBvbmNlLiBPZmYgYnkgZGVmYXVsdC4gKi9cclxuICBASW5wdXQoKSBhbGxvd0R1cGxpY2F0ZXMgPSBmYWxzZTtcclxuXHJcbiAgY2hpcHM6IHN0cmluZ1tdID0gW107XHJcbiAgaW5wdXRWYWx1ZSA9ICcnO1xyXG4gIGlzRGlzYWJsZWQgPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmdbXSkgPT4gdm9pZCA9ICgpID0+IHt9O1xyXG4gIHByaXZhdGUgb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4ge307XHJcblxyXG4gIHdyaXRlVmFsdWUodmFsdWU6IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgICB0aGlzLmNoaXBzID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBbLi4udmFsdWVdIDogW107XHJcbiAgfVxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogc3RyaW5nW10pID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5pc0Rpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIC8qKiBFbnRlciDihpIgY29tbWl0IHRoZSB0eXBlZCB0ZXh0IGFzIGEgbmV3IGNoaXAuICovXHJcbiAgb25FbnRlcihldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB0aGlzLmFkZENoaXAoKTtcclxuICB9XHJcblxyXG4gIC8qKiBDb21taXQgYW55IHBlbmRpbmcgdGV4dCB3aGVuIGZvY3VzIGxlYXZlcywgYW5kIG1hcmsgdGhlIGNvbnRyb2wgdG91Y2hlZC4gKi9cclxuICBvbkJsdXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFkZENoaXAoKTtcclxuICAgIHRoaXMub25Ub3VjaGVkKCk7XHJcbiAgfVxyXG5cclxuICAvKiogQmFja3NwYWNlIG9uIGFuIGVtcHR5IGlucHV0IHJlbW92ZXMgdGhlIGxhc3QgY2hpcCAoc3RhbmRhcmQgdGFnLWlucHV0IFVYKS4gKi9cclxuICBvbkJhY2tzcGFjZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzRGlzYWJsZWQgfHwgdGhpcy5pbnB1dFZhbHVlIHx8ICF0aGlzLmNoaXBzLmxlbmd0aCkgcmV0dXJuO1xyXG4gICAgdGhpcy5jaGlwcyA9IHRoaXMuY2hpcHMuc2xpY2UoMCwgLTEpO1xyXG4gICAgdGhpcy5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBhZGRDaGlwKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaXNEaXNhYmxlZCkgcmV0dXJuO1xyXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmlucHV0VmFsdWUudHJpbSgpO1xyXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xyXG4gICAgY29uc3QgZHVwID0gdGhpcy5jaGlwcy5zb21lKChjKSA9PiBjLnRvTG93ZXJDYXNlKCkgPT09IHZhbHVlLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgaWYgKCF0aGlzLmFsbG93RHVwbGljYXRlcyAmJiBkdXApIHtcclxuICAgICAgdGhpcy5pbnB1dFZhbHVlID0gJyc7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuY2hpcHMgPSBbLi4udGhpcy5jaGlwcywgdmFsdWVdO1xyXG4gICAgdGhpcy5pbnB1dFZhbHVlID0gJyc7XHJcbiAgICB0aGlzLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZUNoaXAoaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaXNEaXNhYmxlZCkgcmV0dXJuO1xyXG4gICAgdGhpcy5jaGlwcyA9IHRoaXMuY2hpcHMuZmlsdGVyKChfLCBpKSA9PiBpICE9PSBpbmRleCk7XHJcbiAgICB0aGlzLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZW1pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2UodGhpcy5jaGlwcyk7XHJcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY2hpcHMtaW5wdXRcIiBbY2xhc3MuZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiIChjbGljayk9XCJ0ZXh0SW5wdXQuZm9jdXMoKVwiPlxyXG4gIDxzcGFuIGNsYXNzPVwiY2hpcFwiICpuZ0Zvcj1cImxldCBjaGlwIG9mIGNoaXBzOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICA8c3BhbiBjbGFzcz1cImNoaXAtbGFiZWxcIj57eyBjaGlwIH19PC9zcGFuPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgY2xhc3M9XCJjaGlwLXhcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiXHJcbiAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHJlbW92ZUNoaXAoaSlcIlxyXG4gICAgPiZ0aW1lczs8L2J1dHRvbj5cclxuICA8L3NwYW4+XHJcbiAgPGlucHV0XHJcbiAgICAjdGV4dElucHV0XHJcbiAgICB0eXBlPVwidGV4dFwiXHJcbiAgICBjbGFzcz1cImNoaXAtdGV4dFwiXHJcbiAgICBbKG5nTW9kZWwpXT1cImlucHV0VmFsdWVcIlxyXG4gICAgW3BsYWNlaG9sZGVyXT1cImNoaXBzLmxlbmd0aCA/ICcnIDogcGxhY2Vob2xkZXJcIlxyXG4gICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIlxyXG4gICAgKGtleWRvd24uZW50ZXIpPVwib25FbnRlcigkZXZlbnQpXCJcclxuICAgIChrZXlkb3duLmJhY2tzcGFjZSk9XCJvbkJhY2tzcGFjZSgpXCJcclxuICAgIChibHVyKT1cIm9uQmx1cigpXCJcclxuICAvPlxyXG48L2Rpdj5cclxuIl19