tango-app-ui-store-builder 1.2.16 → 1.2.17

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 (31) hide show
  1. package/esm2022/lib/components/plano-configurations/plano-configurations.component.mjs +18 -7
  2. package/esm2022/lib/components/plano-tools/allow-edit/allow-edit.component.mjs +4 -3
  3. package/esm2022/lib/components/plano-tools/cad-files/cad-files.component.mjs +5 -4
  4. package/esm2022/lib/components/plano-tools/cad-render/cad-render.component.mjs +4 -3
  5. package/esm2022/lib/components/plano-tools/delete-floor/delete-floor.component.mjs +4 -3
  6. package/esm2022/lib/components/plano-tools/delete-task/delete-task.component.mjs +4 -3
  7. package/esm2022/lib/components/plano-tools/layout-touchup/layout-touchup.component.mjs +134 -0
  8. package/esm2022/lib/components/plano-tools/layout-touchup/touchup-editor/touchup-editor.component.mjs +5103 -0
  9. package/esm2022/lib/components/plano-tools/modify-fixture-numbers/modify-fixture-numbers.component.mjs +4 -3
  10. package/esm2022/lib/components/plano-tools/move-bucket/move-bucket.component.mjs +4 -3
  11. package/esm2022/lib/components/plano-tools/plano-data-export/plano-data-export.component.mjs +4 -3
  12. package/esm2022/lib/components/plano-tools/plano-migrate/plano-migrate.component.mjs +4 -3
  13. package/esm2022/lib/components/plano-tools/store-exports/store-exports.component.mjs +4 -3
  14. package/esm2022/lib/components/plano-tools/swap-template/swap-template.component.mjs +4 -3
  15. package/esm2022/lib/components/plano-tools/tool-page-header/tool-page-header.component.mjs +22 -0
  16. package/esm2022/lib/components/plano-tools/tools-parent/tools-parent.component.mjs +27 -8
  17. package/esm2022/lib/services/store-builder.service.mjs +10 -1
  18. package/esm2022/lib/tango-store-builder-routing.module.mjs +25 -55
  19. package/esm2022/lib/tango-store-builder.module.mjs +10 -1
  20. package/fesm2022/tango-app-ui-store-builder.mjs +5620 -390
  21. package/fesm2022/tango-app-ui-store-builder.mjs.map +1 -1
  22. package/lib/components/manage-plano/rollout-table/rollout-table.component.d.ts +4 -4
  23. package/lib/components/manage-plano/verification-table/verification-table.component.d.ts +5 -5
  24. package/lib/components/plano-configurations/plano-configurations.component.d.ts +9 -1
  25. package/lib/components/plano-tools/layout-touchup/layout-touchup.component.d.ts +50 -0
  26. package/lib/components/plano-tools/layout-touchup/touchup-editor/touchup-editor.component.d.ts +331 -0
  27. package/lib/components/plano-tools/tool-page-header/tool-page-header.component.d.ts +8 -0
  28. package/lib/components/plano-tools/tools-parent/tools-parent.component.d.ts +4 -2
  29. package/lib/services/store-builder.service.d.ts +10 -0
  30. package/lib/tango-store-builder.module.d.ts +61 -58
  31. package/package.json +1 -1
@@ -5,6 +5,7 @@ import * as i1 from "../../../services/store-builder.service";
5
5
  import * as i2 from "tango-app-ui-global";
6
6
  import * as i3 from "@angular/forms";
7
7
  import * as i4 from "../../collection-update-ai/components/store-select/store-select.component";
8
+ import * as i5 from "../tool-page-header/tool-page-header.component";
8
9
  export class AllowEditComponent {
9
10
  sbs;
10
11
  gs;
@@ -150,10 +151,10 @@ export class AllowEditComponent {
150
151
  this.destroy$.complete();
151
152
  }
152
153
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AllowEditComponent, deps: [{ token: i1.StoreBuilderService }, { token: i2.GlobalStateService }], target: i0.ɵɵFactoryTarget.Component });
153
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: AllowEditComponent, selector: "lib-allow-edit", ngImport: i0, template: "<section class=\"allow-edit p-3\">\r\n <div class=\"card p-4\" style=\"max-width: 600px;\">\r\n <h5 class=\"mb-3\">Allow Edit Without Removing Response</h5>\r\n\r\n <!-- Task Type -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label d-block\">Task Type</label>\r\n <div class=\"d-flex gap-3\">\r\n <div class=\"form-check\">\r\n <input type=\"radio\" class=\"form-check-input\" id=\"taskTypeFixture\"\r\n name=\"taskType\" value=\"fixture\"\r\n [(ngModel)]=\"taskType\" (change)=\"onTaskTypeChange()\">\r\n <label class=\"form-check-label\" for=\"taskTypeFixture\">Fixture Verification</label>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"radio\" class=\"form-check-input\" id=\"taskTypeZone\"\r\n name=\"taskType\" value=\"zoneVerification\"\r\n [(ngModel)]=\"taskType\" (change)=\"onTaskTypeChange()\">\r\n <label class=\"form-check-label\" for=\"taskTypeZone\">Zone Verification</label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Store Select -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\">Store</label>\r\n <lib-store-select\r\n [options]=\"storeOptions\"\r\n [initialSelected]=\"initialStores\"\r\n (selectedChange)=\"onStoresSelected($event)\">\r\n </lib-store-select>\r\n </div>\r\n\r\n <!-- Fixture Wise Checkbox -->\r\n <div class=\"mb-3 d-flex align-items-center gap-2\">\r\n <input type=\"checkbox\" class=\"form-check-input\" id=\"fixtureWise\"\r\n [(ngModel)]=\"fixtureWise\" (change)=\"onFixtureWiseChange()\"\r\n [disabled]=\"selectedStores.length !== 1\">\r\n <label class=\"form-check-label\" for=\"fixtureWise\">Fixture Wise</label>\r\n @if (selectedStores.length > 1) {\r\n <span class=\"text-muted small\">(Select only one store to enable)</span>\r\n }\r\n </div>\r\n\r\n <!-- Fixture Selection -->\r\n @if (fixtureWise && selectedStores.length === 1) {\r\n <div class=\"mb-3\">\r\n @if (isLoading) {\r\n <div class=\"text-muted\">Loading fixtures...</div>\r\n } @else if (fixtureNumbers.length === 0) {\r\n <div class=\"text-muted\">No fixtures found for this store.</div>\r\n } @else {\r\n <label class=\"form-label\">Select Fixtures</label>\r\n <div class=\"fixture-list\">\r\n <div class=\"fixture-item\" (click)=\"selectAllFixtures()\">\r\n <input type=\"checkbox\" class=\"form-check-input\"\r\n [checked]=\"isAllSelected\" readonly>\r\n <span class=\"fw-semibold\">Select All</span>\r\n </div>\r\n @for (num of fixtureNumbers; track num) {\r\n <div class=\"fixture-item\" (click)=\"toggleFixture(num)\">\r\n <input type=\"checkbox\" class=\"form-check-input\"\r\n [checked]=\"isFixtureSelected(num)\" readonly>\r\n <span>Fixture {{ num }}</span>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Submit -->\r\n <button class=\"btn btn-primary\" (click)=\"onSubmit()\"\r\n [disabled]=\"isSubmitting || selectedStores.length === 0 || (fixtureWise && (selectedStores.length > 1 || selectedFixtures.size === 0))\">\r\n {{ isSubmitting ? 'Unlocking...' : 'Unlock Edit' }}\r\n </button>\r\n\r\n <!-- Message -->\r\n @if (message) {\r\n <div class=\"mt-3 alert\" [class.alert-success]=\"messageType === 'success'\"\r\n [class.alert-danger]=\"messageType === 'error'\">\r\n {{ message }}\r\n </div>\r\n }\r\n </div>\r\n</section>\r\n", styles: [".allow-edit .fixture-list{border:1px solid #d0d5dd;border-radius:8px;max-height:250px;overflow-y:auto}.allow-edit .fixture-item{display:flex;align-items:center;gap:10px;padding:8px 12px;cursor:pointer;-webkit-user-select:none;user-select:none}.allow-edit .fixture-item:hover{background-color:#f9fafb}.allow-edit .fixture-item:not(:last-child){border-bottom:1px solid #f2f4f7}\n"], dependencies: [{ kind: "directive", type: i3.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: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.StoreSelectComponent, selector: "lib-store-select", inputs: ["options", "initialSelected", "singleSelect"], outputs: ["selectedChange"] }] });
154
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: AllowEditComponent, selector: "lib-allow-edit", ngImport: i0, template: "<section class=\"allow-edit p-3\">\r\n <lib-tool-page-header\r\n title=\"Allow Edit\"\r\n description=\"Re-enable editing on a published task without losing existing responses.\"\r\n ></lib-tool-page-header>\r\n <div class=\"card p-4\" style=\"max-width: 600px;\">\r\n\r\n <!-- Task Type -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label d-block\">Task Type</label>\r\n <div class=\"d-flex gap-3\">\r\n <div class=\"form-check\">\r\n <input type=\"radio\" class=\"form-check-input\" id=\"taskTypeFixture\"\r\n name=\"taskType\" value=\"fixture\"\r\n [(ngModel)]=\"taskType\" (change)=\"onTaskTypeChange()\">\r\n <label class=\"form-check-label\" for=\"taskTypeFixture\">Fixture Verification</label>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"radio\" class=\"form-check-input\" id=\"taskTypeZone\"\r\n name=\"taskType\" value=\"zoneVerification\"\r\n [(ngModel)]=\"taskType\" (change)=\"onTaskTypeChange()\">\r\n <label class=\"form-check-label\" for=\"taskTypeZone\">Zone Verification</label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Store Select -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\">Store</label>\r\n <lib-store-select\r\n [options]=\"storeOptions\"\r\n [initialSelected]=\"initialStores\"\r\n (selectedChange)=\"onStoresSelected($event)\">\r\n </lib-store-select>\r\n </div>\r\n\r\n <!-- Fixture Wise Checkbox -->\r\n <div class=\"mb-3 d-flex align-items-center gap-2\">\r\n <input type=\"checkbox\" class=\"form-check-input\" id=\"fixtureWise\"\r\n [(ngModel)]=\"fixtureWise\" (change)=\"onFixtureWiseChange()\"\r\n [disabled]=\"selectedStores.length !== 1\">\r\n <label class=\"form-check-label\" for=\"fixtureWise\">Fixture Wise</label>\r\n @if (selectedStores.length > 1) {\r\n <span class=\"text-muted small\">(Select only one store to enable)</span>\r\n }\r\n </div>\r\n\r\n <!-- Fixture Selection -->\r\n @if (fixtureWise && selectedStores.length === 1) {\r\n <div class=\"mb-3\">\r\n @if (isLoading) {\r\n <div class=\"text-muted\">Loading fixtures...</div>\r\n } @else if (fixtureNumbers.length === 0) {\r\n <div class=\"text-muted\">No fixtures found for this store.</div>\r\n } @else {\r\n <label class=\"form-label\">Select Fixtures</label>\r\n <div class=\"fixture-list\">\r\n <div class=\"fixture-item\" (click)=\"selectAllFixtures()\">\r\n <input type=\"checkbox\" class=\"form-check-input\"\r\n [checked]=\"isAllSelected\" readonly>\r\n <span class=\"fw-semibold\">Select All</span>\r\n </div>\r\n @for (num of fixtureNumbers; track num) {\r\n <div class=\"fixture-item\" (click)=\"toggleFixture(num)\">\r\n <input type=\"checkbox\" class=\"form-check-input\"\r\n [checked]=\"isFixtureSelected(num)\" readonly>\r\n <span>Fixture {{ num }}</span>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Submit -->\r\n <button class=\"btn btn-primary\" (click)=\"onSubmit()\"\r\n [disabled]=\"isSubmitting || selectedStores.length === 0 || (fixtureWise && (selectedStores.length > 1 || selectedFixtures.size === 0))\">\r\n {{ isSubmitting ? 'Unlocking...' : 'Unlock Edit' }}\r\n </button>\r\n\r\n <!-- Message -->\r\n @if (message) {\r\n <div class=\"mt-3 alert\" [class.alert-success]=\"messageType === 'success'\"\r\n [class.alert-danger]=\"messageType === 'error'\">\r\n {{ message }}\r\n </div>\r\n }\r\n </div>\r\n</section>\r\n", styles: [".allow-edit .fixture-list{border:1px solid #d0d5dd;border-radius:8px;max-height:250px;overflow-y:auto}.allow-edit .fixture-item{display:flex;align-items:center;gap:10px;padding:8px 12px;cursor:pointer;-webkit-user-select:none;user-select:none}.allow-edit .fixture-item:hover{background-color:#f9fafb}.allow-edit .fixture-item:not(:last-child){border-bottom:1px solid #f2f4f7}\n"], dependencies: [{ kind: "directive", type: i3.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: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.StoreSelectComponent, selector: "lib-store-select", inputs: ["options", "initialSelected", "singleSelect"], outputs: ["selectedChange"] }, { kind: "component", type: i5.ToolPageHeaderComponent, selector: "lib-tool-page-header", inputs: ["title", "description", "backLink"] }] });
154
155
  }
155
156
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AllowEditComponent, decorators: [{
156
157
  type: Component,
157
- args: [{ selector: 'lib-allow-edit', template: "<section class=\"allow-edit p-3\">\r\n <div class=\"card p-4\" style=\"max-width: 600px;\">\r\n <h5 class=\"mb-3\">Allow Edit Without Removing Response</h5>\r\n\r\n <!-- Task Type -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label d-block\">Task Type</label>\r\n <div class=\"d-flex gap-3\">\r\n <div class=\"form-check\">\r\n <input type=\"radio\" class=\"form-check-input\" id=\"taskTypeFixture\"\r\n name=\"taskType\" value=\"fixture\"\r\n [(ngModel)]=\"taskType\" (change)=\"onTaskTypeChange()\">\r\n <label class=\"form-check-label\" for=\"taskTypeFixture\">Fixture Verification</label>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"radio\" class=\"form-check-input\" id=\"taskTypeZone\"\r\n name=\"taskType\" value=\"zoneVerification\"\r\n [(ngModel)]=\"taskType\" (change)=\"onTaskTypeChange()\">\r\n <label class=\"form-check-label\" for=\"taskTypeZone\">Zone Verification</label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Store Select -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\">Store</label>\r\n <lib-store-select\r\n [options]=\"storeOptions\"\r\n [initialSelected]=\"initialStores\"\r\n (selectedChange)=\"onStoresSelected($event)\">\r\n </lib-store-select>\r\n </div>\r\n\r\n <!-- Fixture Wise Checkbox -->\r\n <div class=\"mb-3 d-flex align-items-center gap-2\">\r\n <input type=\"checkbox\" class=\"form-check-input\" id=\"fixtureWise\"\r\n [(ngModel)]=\"fixtureWise\" (change)=\"onFixtureWiseChange()\"\r\n [disabled]=\"selectedStores.length !== 1\">\r\n <label class=\"form-check-label\" for=\"fixtureWise\">Fixture Wise</label>\r\n @if (selectedStores.length > 1) {\r\n <span class=\"text-muted small\">(Select only one store to enable)</span>\r\n }\r\n </div>\r\n\r\n <!-- Fixture Selection -->\r\n @if (fixtureWise && selectedStores.length === 1) {\r\n <div class=\"mb-3\">\r\n @if (isLoading) {\r\n <div class=\"text-muted\">Loading fixtures...</div>\r\n } @else if (fixtureNumbers.length === 0) {\r\n <div class=\"text-muted\">No fixtures found for this store.</div>\r\n } @else {\r\n <label class=\"form-label\">Select Fixtures</label>\r\n <div class=\"fixture-list\">\r\n <div class=\"fixture-item\" (click)=\"selectAllFixtures()\">\r\n <input type=\"checkbox\" class=\"form-check-input\"\r\n [checked]=\"isAllSelected\" readonly>\r\n <span class=\"fw-semibold\">Select All</span>\r\n </div>\r\n @for (num of fixtureNumbers; track num) {\r\n <div class=\"fixture-item\" (click)=\"toggleFixture(num)\">\r\n <input type=\"checkbox\" class=\"form-check-input\"\r\n [checked]=\"isFixtureSelected(num)\" readonly>\r\n <span>Fixture {{ num }}</span>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Submit -->\r\n <button class=\"btn btn-primary\" (click)=\"onSubmit()\"\r\n [disabled]=\"isSubmitting || selectedStores.length === 0 || (fixtureWise && (selectedStores.length > 1 || selectedFixtures.size === 0))\">\r\n {{ isSubmitting ? 'Unlocking...' : 'Unlock Edit' }}\r\n </button>\r\n\r\n <!-- Message -->\r\n @if (message) {\r\n <div class=\"mt-3 alert\" [class.alert-success]=\"messageType === 'success'\"\r\n [class.alert-danger]=\"messageType === 'error'\">\r\n {{ message }}\r\n </div>\r\n }\r\n </div>\r\n</section>\r\n", styles: [".allow-edit .fixture-list{border:1px solid #d0d5dd;border-radius:8px;max-height:250px;overflow-y:auto}.allow-edit .fixture-item{display:flex;align-items:center;gap:10px;padding:8px 12px;cursor:pointer;-webkit-user-select:none;user-select:none}.allow-edit .fixture-item:hover{background-color:#f9fafb}.allow-edit .fixture-item:not(:last-child){border-bottom:1px solid #f2f4f7}\n"] }]
158
+ args: [{ selector: 'lib-allow-edit', template: "<section class=\"allow-edit p-3\">\r\n <lib-tool-page-header\r\n title=\"Allow Edit\"\r\n description=\"Re-enable editing on a published task without losing existing responses.\"\r\n ></lib-tool-page-header>\r\n <div class=\"card p-4\" style=\"max-width: 600px;\">\r\n\r\n <!-- Task Type -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label d-block\">Task Type</label>\r\n <div class=\"d-flex gap-3\">\r\n <div class=\"form-check\">\r\n <input type=\"radio\" class=\"form-check-input\" id=\"taskTypeFixture\"\r\n name=\"taskType\" value=\"fixture\"\r\n [(ngModel)]=\"taskType\" (change)=\"onTaskTypeChange()\">\r\n <label class=\"form-check-label\" for=\"taskTypeFixture\">Fixture Verification</label>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"radio\" class=\"form-check-input\" id=\"taskTypeZone\"\r\n name=\"taskType\" value=\"zoneVerification\"\r\n [(ngModel)]=\"taskType\" (change)=\"onTaskTypeChange()\">\r\n <label class=\"form-check-label\" for=\"taskTypeZone\">Zone Verification</label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Store Select -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\">Store</label>\r\n <lib-store-select\r\n [options]=\"storeOptions\"\r\n [initialSelected]=\"initialStores\"\r\n (selectedChange)=\"onStoresSelected($event)\">\r\n </lib-store-select>\r\n </div>\r\n\r\n <!-- Fixture Wise Checkbox -->\r\n <div class=\"mb-3 d-flex align-items-center gap-2\">\r\n <input type=\"checkbox\" class=\"form-check-input\" id=\"fixtureWise\"\r\n [(ngModel)]=\"fixtureWise\" (change)=\"onFixtureWiseChange()\"\r\n [disabled]=\"selectedStores.length !== 1\">\r\n <label class=\"form-check-label\" for=\"fixtureWise\">Fixture Wise</label>\r\n @if (selectedStores.length > 1) {\r\n <span class=\"text-muted small\">(Select only one store to enable)</span>\r\n }\r\n </div>\r\n\r\n <!-- Fixture Selection -->\r\n @if (fixtureWise && selectedStores.length === 1) {\r\n <div class=\"mb-3\">\r\n @if (isLoading) {\r\n <div class=\"text-muted\">Loading fixtures...</div>\r\n } @else if (fixtureNumbers.length === 0) {\r\n <div class=\"text-muted\">No fixtures found for this store.</div>\r\n } @else {\r\n <label class=\"form-label\">Select Fixtures</label>\r\n <div class=\"fixture-list\">\r\n <div class=\"fixture-item\" (click)=\"selectAllFixtures()\">\r\n <input type=\"checkbox\" class=\"form-check-input\"\r\n [checked]=\"isAllSelected\" readonly>\r\n <span class=\"fw-semibold\">Select All</span>\r\n </div>\r\n @for (num of fixtureNumbers; track num) {\r\n <div class=\"fixture-item\" (click)=\"toggleFixture(num)\">\r\n <input type=\"checkbox\" class=\"form-check-input\"\r\n [checked]=\"isFixtureSelected(num)\" readonly>\r\n <span>Fixture {{ num }}</span>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Submit -->\r\n <button class=\"btn btn-primary\" (click)=\"onSubmit()\"\r\n [disabled]=\"isSubmitting || selectedStores.length === 0 || (fixtureWise && (selectedStores.length > 1 || selectedFixtures.size === 0))\">\r\n {{ isSubmitting ? 'Unlocking...' : 'Unlock Edit' }}\r\n </button>\r\n\r\n <!-- Message -->\r\n @if (message) {\r\n <div class=\"mt-3 alert\" [class.alert-success]=\"messageType === 'success'\"\r\n [class.alert-danger]=\"messageType === 'error'\">\r\n {{ message }}\r\n </div>\r\n }\r\n </div>\r\n</section>\r\n", styles: [".allow-edit .fixture-list{border:1px solid #d0d5dd;border-radius:8px;max-height:250px;overflow-y:auto}.allow-edit .fixture-item{display:flex;align-items:center;gap:10px;padding:8px 12px;cursor:pointer;-webkit-user-select:none;user-select:none}.allow-edit .fixture-item:hover{background-color:#f9fafb}.allow-edit .fixture-item:not(:last-child){border-bottom:1px solid #f2f4f7}\n"] }]
158
159
  }], ctorParameters: () => [{ type: i1.StoreBuilderService }, { type: i2.GlobalStateService }] });
159
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsb3ctZWRpdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9wbGFuby10b29scy9hbGxvdy1lZGl0L2FsbG93LWVkaXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvcGxhbm8tdG9vbHMvYWxsb3ctZWRpdC9hbGxvdy1lZGl0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRzdELE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7OztBQVF0RixNQUFNLE9BQU8sa0JBQWtCO0lBaUJuQjtJQUNBO0lBakJWLFFBQVEsQ0FBUztJQUNqQixRQUFRLEdBQW1DLFNBQVMsQ0FBQztJQUNyRCxZQUFZLEdBQWtCLEVBQUUsQ0FBQztJQUNqQyxhQUFhLEdBQWtCLEVBQUUsQ0FBQztJQUNsQyxjQUFjLEdBQWtCLEVBQUUsQ0FBQztJQUNuQyxXQUFXLEdBQVksS0FBSyxDQUFDO0lBQzdCLGNBQWMsR0FBYSxFQUFFLENBQUM7SUFDOUIsZ0JBQWdCLEdBQWdCLElBQUksR0FBRyxFQUFFLENBQUM7SUFDMUMsU0FBUyxHQUFZLEtBQUssQ0FBQztJQUMzQixZQUFZLEdBQVksS0FBSyxDQUFDO0lBQzlCLE9BQU8sR0FBVyxFQUFFLENBQUM7SUFDckIsV0FBVyxHQUF3QixTQUFTLENBQUM7SUFFNUIsUUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFFaEQsWUFDVSxHQUF3QixFQUN4QixFQUFzQjtRQUR0QixRQUFHLEdBQUgs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LDBCQUEwQixFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUN4RSxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztZQUM1QixDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxPQUFPLElBQUksdUJBQXVCLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQzFFLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQzVCLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLEdBQVcsRUFBRSxJQUF5QjtRQUNoRCxJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztRQUNuQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7d0dBcktVLGtCQUFrQjs0RkFBbEIsa0JBQWtCLHNEQ1gvQiw0cEhBc0ZBOzs0RkQzRWEsa0JBQWtCO2tCQUw5QixTQUFTOytCQUNFLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3RvcmVCdWlsZGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3N0b3JlLWJ1aWxkZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1nbG9iYWwnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwsIGRlYm91bmNlVGltZSwgZmlsdGVyLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBTdG9yZU9wdGlvbiB9IGZyb20gJy4uLy4uL2NvbGxlY3Rpb24tdXBkYXRlLWFpL2NvbXBvbmVudHMvc3RvcmUtc2VsZWN0L3N0b3JlLXNlbGVjdC5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItYWxsb3ctZWRpdCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2FsbG93LWVkaXQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9hbGxvdy1lZGl0LmNvbXBvbmVudC5zY3NzJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFsbG93RWRpdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBjbGllbnRJZDogc3RyaW5nO1xyXG4gIHRhc2tUeXBlOiAnZml4dHVyZScgfCAnem9uZVZlcmlmaWNhdGlvbicgPSAnZml4dHVyZSc7XHJcbiAgc3RvcmVPcHRpb25zOiBTdG9yZU9wdGlvbltdID0gW107XHJcbiAgaW5pdGlhbFN0b3JlczogU3RvcmVPcHRpb25bXSA9IFtdO1xyXG4gIHNlbGVjdGVkU3RvcmVzOiBTdG9yZU9wdGlvbltdID0gW107XHJcbiAgZml4dHVyZVdpc2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBmaXh0dXJlTnVtYmVyczogbnVtYmVyW10gPSBbXTtcclxuICBzZWxlY3RlZEZpeHR1cmVzOiBTZXQ8bnVtYmVyPiA9IG5ldyBTZXQoKTtcclxuICBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc1N1Ym1pdHRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBtZXNzYWdlOiBzdHJpbmcgPSAnJztcclxuICBtZXNzYWdlVHlwZTogJ3N1Y2Nlc3MnIHwgJ2Vycm9yJyA9ICdzdWNjZXNzJztcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBzYnM6IFN0b3JlQnVpbGRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGdzOiBHbG9iYWxTdGF0ZVNlcnZpY2UsXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWVcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxyXG4gICAgICAgIGRlYm91bmNlVGltZSgyMDApLFxyXG4gICAgICAgIGZpbHRlcigoZGF0YSkgPT4gISFkYXRhKSxcclxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGE/LmNsaWVudCkge1xyXG4gICAgICAgICAgdGhpcy5jbGllbnRJZCA9IGRhdGEuY2xpZW50O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgaGVhZGVyRGF0YSA9IEpTT04ucGFyc2UoXHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdoZWFkZXItZmlsdGVycycpIGFzIHN0cmluZ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuY2xpZW50SWQgPSBoZWFkZXJEYXRhPy5jbGllbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubG9hZFN0b3JlcygpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGxvYWRTdG9yZXMoKSB7XHJcbiAgICB0aGlzLnNicy5nZXRTdG9yZU9yQ2x1c3Rlckxpc3QoeyBzZWFyY2hNb2RlOiAnc3RvcmUnIH0pLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlcz8uZGF0YSkge1xyXG4gICAgICAgIHRoaXMuc3RvcmVPcHRpb25zID0gcmVzLmRhdGE7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25UYXNrVHlwZUNoYW5nZSgpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRTdG9yZXMgPSBbXTtcclxuICAgIHRoaXMuaW5pdGlhbFN0b3JlcyA9IFtdO1xyXG4gICAgdGhpcy5maXh0dXJlV2lzZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5maXh0dXJlTnVtYmVycyA9IFtdO1xyXG4gICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVzLmNsZWFyKCk7XHJcbiAgICB0aGlzLm1lc3NhZ2UgPSAnJztcclxuICB9XHJcblxyXG4gIG9uU3RvcmVzU2VsZWN0ZWQoc3RvcmVzOiBTdG9yZU9wdGlvbltdKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkU3RvcmVzID0gc3RvcmVzO1xyXG4gICAgdGhpcy5maXh0dXJlTnVtYmVycyA9IFtdO1xyXG4gICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVzLmNsZWFyKCk7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZFN0b3Jlcy5sZW5ndGggIT09IDEpIHtcclxuICAgICAgdGhpcy5maXh0dXJlV2lzZSA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmZpeHR1cmVXaXNlKSB7XHJcbiAgICAgIHRoaXMubG9hZEZpeHR1cmVzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkZpeHR1cmVXaXNlQ2hhbmdlKCkge1xyXG4gICAgdGhpcy5maXh0dXJlTnVtYmVycyA9IFtdO1xyXG4gICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVzLmNsZWFyKCk7XHJcbiAgICBpZiAodGhpcy5maXh0dXJlV2lzZSAmJiB0aGlzLnNlbGVjdGVkU3RvcmVzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICB0aGlzLmxvYWRGaXh0dXJlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG9hZEZpeHR1cmVzKCkge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRTdG9yZXMubGVuZ3RoICE9PSAxKSByZXR1cm47XHJcbiAgICBsZXQgc3RvcmVOYW1lID0gdGhpcy5zZWxlY3RlZFN0b3Jlc1swXS5sYWJlbDtcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuc2JzLmdldEZpeHR1cmVOdW1iZXJzQnlTdG9yZShzdG9yZU5hbWUsIHRoaXMuY2xpZW50SWQsIHRoaXMudGFza1R5cGUpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZml4dHVyZU51bWJlcnMgPSByZXM/LmRhdGEgfHwgW107XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICB0aGlzLmZpeHR1cmVOdW1iZXJzID0gW107XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlRml4dHVyZShudW06IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGaXh0dXJlcy5oYXMobnVtKSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZXMuZGVsZXRlKG51bSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZXMuYWRkKG51bSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc0ZpeHR1cmVTZWxlY3RlZChudW06IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRGaXh0dXJlcy5oYXMobnVtKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdEFsbEZpeHR1cmVzKCkge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGaXh0dXJlcy5zaXplID09PSB0aGlzLmZpeHR1cmVOdW1iZXJzLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZXMuY2xlYXIoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZml4dHVyZU51bWJlcnMuZm9yRWFjaCgobikgPT4gdGhpcy5zZWxlY3RlZEZpeHR1cmVzLmFkZChuKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgaXNBbGxTZWxlY3RlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmZpeHR1cmVOdW1iZXJzLmxlbmd0aCA+IDAgJiYgdGhpcy5zZWxlY3RlZEZpeHR1cmVzLnNpemUgPT09IHRoaXMuZml4dHVyZU51bWJlcnMubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgb25TdWJtaXQoKSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZFN0b3Jlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhpcy5zaG93TWVzc2FnZSgnUGxlYXNlIHNlbGVjdCBhdCBsZWFzdCBvbmUgc3RvcmUuJywgJ2Vycm9yJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmZpeHR1cmVXaXNlICYmIHRoaXMuc2VsZWN0ZWRGaXh0dXJlcy5zaXplID09PSAwKSB7XHJcbiAgICAgIHRoaXMuc2hvd01lc3NhZ2UoJ1BsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIGZpeHR1cmUuJywgJ2Vycm9yJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcGF5bG9hZDoge1xyXG4gICAgICBzdG9yZU5hbWVzOiBzdHJpbmdbXTtcclxuICAgICAgY2xpZW50SWQ6IHN0cmluZztcclxuICAgICAgdGFza1R5cGU6ICdmaXh0dXJlJyB8ICd6b25lVmVyaWZpY2F0aW9uJztcclxuICAgICAgZml4dHVyZU51bWJlcnM/OiBudW1iZXJbXTtcclxuICAgIH0gPSB7XHJcbiAgICAgIHN0b3JlTmFtZXM6IHRoaXMuc2VsZWN0ZWRTdG9yZXMubWFwKChzKSA9PiBzLmxhYmVsKSxcclxuICAgICAgY2xpZW50SWQ6IHRoaXMuY2xpZW50SWQsXHJcbiAgICAgIHRhc2tUeXBlOiB0aGlzLnRhc2tUeXBlLFxyXG4gICAgfTtcclxuICAgIGlmICh0aGlzLmZpeHR1cmVXaXNlKSB7XHJcbiAgICAgIHBheWxvYWQuZml4dHVyZU51bWJlcnMgPSBBcnJheS5mcm9tKHRoaXMuc2VsZWN0ZWRGaXh0dXJlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5zYnMuYWxsb3dFZGl0V2l0aG91dFJlbW92aW5nUmVzcG9uc2UocGF5bG9hZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgbGV0IGNvdW50ID0gcmVzPy5kYXRhPy5tb2RpZmllZENvdW50IHx8IDA7XHJcbiAgICAgICAgdGhpcy5zaG93TWVzc2FnZShgVXBkYXRlZCAke2NvdW50fSByZWNvcmQocykgc3VjY2Vzc2Z1bGx5LmAsICdzdWNjZXNzJyk7XHJcbiAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2hvd01lc3NhZ2UoZXJyPy5lcnJvcj8ubWVzc2FnZSB8fCAnU29tZXRoaW5nIHdlbnQgd3JvbmcuJywgJ2Vycm9yJyk7XHJcbiAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2hvd01lc3NhZ2UobXNnOiBzdHJpbmcsIHR5cGU6ICdzdWNjZXNzJyB8ICdlcnJvcicpIHtcclxuICAgIHRoaXMubWVzc2FnZSA9IG1zZztcclxuICAgIHRoaXMubWVzc2FnZVR5cGUgPSB0eXBlO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiAodGhpcy5tZXNzYWdlID0gJycpLCA1MDAwKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxzZWN0aW9uIGNsYXNzPVwiYWxsb3ctZWRpdCBwLTNcIj5cclxuICA8ZGl2IGNsYXNzPVwiY2FyZCBwLTRcIiBzdHlsZT1cIm1heC13aWR0aDogNjAwcHg7XCI+XHJcbiAgICA8aDUgY2xhc3M9XCJtYi0zXCI+QWxsb3cgRWRpdCBXaXRob3V0IFJlbW92aW5nIFJlc3BvbnNlPC9oNT5cclxuXHJcbiAgICA8IS0tIFRhc2sgVHlwZSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgZC1ibG9ja1wiPlRhc2sgVHlwZTwvbGFiZWw+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTNcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiPlxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIGlkPVwidGFza1R5cGVGaXh0dXJlXCJcclxuICAgICAgICAgICAgbmFtZT1cInRhc2tUeXBlXCIgdmFsdWU9XCJmaXh0dXJlXCJcclxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ0YXNrVHlwZVwiIChjaGFuZ2UpPVwib25UYXNrVHlwZUNoYW5nZSgpXCI+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwidGFza1R5cGVGaXh0dXJlXCI+Rml4dHVyZSBWZXJpZmljYXRpb248L2xhYmVsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCI+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgaWQ9XCJ0YXNrVHlwZVpvbmVcIlxyXG4gICAgICAgICAgICBuYW1lPVwidGFza1R5cGVcIiB2YWx1ZT1cInpvbmVWZXJpZmljYXRpb25cIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInRhc2tUeXBlXCIgKGNoYW5nZSk9XCJvblRhc2tUeXBlQ2hhbmdlKClcIj5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJ0YXNrVHlwZVpvbmVcIj5ab25lIFZlcmlmaWNhdGlvbjwvbGFiZWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBTdG9yZSBTZWxlY3QgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+U3RvcmU8L2xhYmVsPlxyXG4gICAgICA8bGliLXN0b3JlLXNlbGVjdFxyXG4gICAgICAgIFtvcHRpb25zXT1cInN0b3JlT3B0aW9uc1wiXHJcbiAgICAgICAgW2luaXRpYWxTZWxlY3RlZF09XCJpbml0aWFsU3RvcmVzXCJcclxuICAgICAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwib25TdG9yZXNTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgIDwvbGliLXN0b3JlLXNlbGVjdD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gRml4dHVyZSBXaXNlIENoZWNrYm94IC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTMgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgaWQ9XCJmaXh0dXJlV2lzZVwiXHJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJmaXh0dXJlV2lzZVwiIChjaGFuZ2UpPVwib25GaXh0dXJlV2lzZUNoYW5nZSgpXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwic2VsZWN0ZWRTdG9yZXMubGVuZ3RoICE9PSAxXCI+XHJcbiAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJmaXh0dXJlV2lzZVwiPkZpeHR1cmUgV2lzZTwvbGFiZWw+XHJcbiAgICAgIEBpZiAoc2VsZWN0ZWRTdG9yZXMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZCBzbWFsbFwiPihTZWxlY3Qgb25seSBvbmUgc3RvcmUgdG8gZW5hYmxlKTwvc3Bhbj5cclxuICAgICAgfVxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBGaXh0dXJlIFNlbGVjdGlvbiAtLT5cclxuICAgIEBpZiAoZml4dHVyZVdpc2UgJiYgc2VsZWN0ZWRTdG9yZXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgQGlmIChpc0xvYWRpbmcpIHtcclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkXCI+TG9hZGluZyBmaXh0dXJlcy4uLjwvZGl2PlxyXG4gICAgICAgIH0gQGVsc2UgaWYgKGZpeHR1cmVOdW1iZXJzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWRcIj5ObyBmaXh0dXJlcyBmb3VuZCBmb3IgdGhpcyBzdG9yZS48L2Rpdj5cclxuICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj5TZWxlY3QgRml4dHVyZXM8L2xhYmVsPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZpeHR1cmUtbGlzdFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZml4dHVyZS1pdGVtXCIgKGNsaWNrKT1cInNlbGVjdEFsbEZpeHR1cmVzKClcIj5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcclxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzQWxsU2VsZWN0ZWRcIiByZWFkb25seT5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZ3LXNlbWlib2xkXCI+U2VsZWN0IEFsbDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIEBmb3IgKG51bSBvZiBmaXh0dXJlTnVtYmVyczsgdHJhY2sgbnVtKSB7XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpeHR1cmUtaXRlbVwiIChjbGljayk9XCJ0b2dnbGVGaXh0dXJlKG51bSlcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc0ZpeHR1cmVTZWxlY3RlZChudW0pXCIgcmVhZG9ubHk+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj5GaXh0dXJlIHt7IG51bSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L2Rpdj5cclxuICAgIH1cclxuXHJcbiAgICA8IS0tIFN1Ym1pdCAtLT5cclxuICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwib25TdWJtaXQoKVwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJpc1N1Ym1pdHRpbmcgfHwgc2VsZWN0ZWRTdG9yZXMubGVuZ3RoID09PSAwIHx8IChmaXh0dXJlV2lzZSAmJiAoc2VsZWN0ZWRTdG9yZXMubGVuZ3RoID4gMSB8fCBzZWxlY3RlZEZpeHR1cmVzLnNpemUgPT09IDApKVwiPlxyXG4gICAgICB7eyBpc1N1Ym1pdHRpbmcgPyAnVW5sb2NraW5nLi4uJyA6ICdVbmxvY2sgRWRpdCcgfX1cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDwhLS0gTWVzc2FnZSAtLT5cclxuICAgIEBpZiAobWVzc2FnZSkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwibXQtMyBhbGVydFwiIFtjbGFzcy5hbGVydC1zdWNjZXNzXT1cIm1lc3NhZ2VUeXBlID09PSAnc3VjY2VzcydcIlxyXG4gICAgICAgIFtjbGFzcy5hbGVydC1kYW5nZXJdPVwibWVzc2FnZVR5cGUgPT09ICdlcnJvcidcIj5cclxuICAgICAgICB7eyBtZXNzYWdlIH19XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG48L3NlY3Rpb24+XHJcbiJdfQ==
160
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsb3ctZWRpdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9wbGFuby10b29scy9hbGxvdy1lZGl0L2FsbG93LWVkaXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvcGxhbm8tdG9vbHMvYWxsb3ctZWRpdC9hbGxvdy1lZGl0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRzdELE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7QUFRdEYsTUFBTSxPQUFPLGtCQUFrQjtJQWlCbkI7SUFDQTtJQWpCVixRQUFRLENBQVM7SUFDakIsUUFBUSxHQUFtQyxTQUFTLENBQUM7SUFDckQsWUFBWSxHQUFrQixFQUFFLENBQUM7SUFDakMsYUFBYSxHQUFrQixFQUFFLENBQUM7SUFDbEMsY0FBYyxHQUFrQixFQUFFLENBQUM7SUFDbkMsV0FBVyxHQUFZLEtBQUssQ0FBQztJQUM3QixjQUFjLEdBQWEsRUFBRSxDQUFDO0lBQzlCLGdCQUFnQixHQUFnQixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQzFDLFNBQVMsR0FBWSxLQUFLLENBQUM7SUFDM0IsWUFBWSxHQUFZLEtBQUssQ0FBQztJQUM5QixPQUFPLEdBQVcsRUFBRSxDQUFDO0lBQ3JCLFdBQVcsR0FBd0IsU0FBUyxDQUFDO0lBRTVCLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBRWhELFlBQ1UsR0FBd0IsRUFDeEIsRUFBc0I7UUFEdEIsUUFBRyxHQUFI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SywwQkFBMEIsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDeEUsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDNUIsQ0FBQztZQUNELEtBQUssRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNsQixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFJLHVCQUF1QixFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUMxRSxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztZQUM1QixDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFXLEVBQUUsSUFBeUI7UUFDaEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7UUFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO3dHQXJLVSxrQkFBa0I7NEZBQWxCLGtCQUFrQixzRENYL0IsNndIQXlGQTs7NEZEOUVhLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDRSxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN0b3JlQnVpbGRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zdG9yZS1idWlsZGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHbG9iYWxTdGF0ZVNlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktZ2xvYmFsJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsLCBkZWJvdW5jZVRpbWUsIGZpbHRlciwgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU3RvcmVPcHRpb24gfSBmcm9tICcuLi8uLi9jb2xsZWN0aW9uLXVwZGF0ZS1haS9jb21wb25lbnRzL3N0b3JlLXNlbGVjdC9zdG9yZS1zZWxlY3QuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWFsbG93LWVkaXQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hbGxvdy1lZGl0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vYWxsb3ctZWRpdC5jb21wb25lbnQuc2NzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBbGxvd0VkaXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgY2xpZW50SWQ6IHN0cmluZztcclxuICB0YXNrVHlwZTogJ2ZpeHR1cmUnIHwgJ3pvbmVWZXJpZmljYXRpb24nID0gJ2ZpeHR1cmUnO1xyXG4gIHN0b3JlT3B0aW9uczogU3RvcmVPcHRpb25bXSA9IFtdO1xyXG4gIGluaXRpYWxTdG9yZXM6IFN0b3JlT3B0aW9uW10gPSBbXTtcclxuICBzZWxlY3RlZFN0b3JlczogU3RvcmVPcHRpb25bXSA9IFtdO1xyXG4gIGZpeHR1cmVXaXNlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZml4dHVyZU51bWJlcnM6IG51bWJlcltdID0gW107XHJcbiAgc2VsZWN0ZWRGaXh0dXJlczogU2V0PG51bWJlcj4gPSBuZXcgU2V0KCk7XHJcbiAgaXNMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNTdWJtaXR0aW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbWVzc2FnZTogc3RyaW5nID0gJyc7XHJcbiAgbWVzc2FnZVR5cGU6ICdzdWNjZXNzJyB8ICdlcnJvcicgPSAnc3VjY2Vzcyc7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgc2JzOiBTdG9yZUJ1aWxkZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBnczogR2xvYmFsU3RhdGVTZXJ2aWNlLFxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcclxuICAgICAgICBkZWJvdW5jZVRpbWUoMjAwKSxcclxuICAgICAgICBmaWx0ZXIoKGRhdGEpID0+ICEhZGF0YSksXHJcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChkYXRhPy5jbGllbnQpIHtcclxuICAgICAgICAgIHRoaXMuY2xpZW50SWQgPSBkYXRhLmNsaWVudDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IGhlYWRlckRhdGEgPSBKU09OLnBhcnNlKFxyXG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnaGVhZGVyLWZpbHRlcnMnKSBhcyBzdHJpbmdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLmNsaWVudElkID0gaGVhZGVyRGF0YT8uY2xpZW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxvYWRTdG9yZXMoKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBsb2FkU3RvcmVzKCkge1xyXG4gICAgdGhpcy5zYnMuZ2V0U3RvcmVPckNsdXN0ZXJMaXN0KHsgc2VhcmNoTW9kZTogJ3N0b3JlJyB9KS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXM/LmRhdGEpIHtcclxuICAgICAgICB0aGlzLnN0b3JlT3B0aW9ucyA9IHJlcy5kYXRhO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uVGFza1R5cGVDaGFuZ2UoKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkU3RvcmVzID0gW107XHJcbiAgICB0aGlzLmluaXRpYWxTdG9yZXMgPSBbXTtcclxuICAgIHRoaXMuZml4dHVyZVdpc2UgPSBmYWxzZTtcclxuICAgIHRoaXMuZml4dHVyZU51bWJlcnMgPSBbXTtcclxuICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlcy5jbGVhcigpO1xyXG4gICAgdGhpcy5tZXNzYWdlID0gJyc7XHJcbiAgfVxyXG5cclxuICBvblN0b3Jlc1NlbGVjdGVkKHN0b3JlczogU3RvcmVPcHRpb25bXSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZFN0b3JlcyA9IHN0b3JlcztcclxuICAgIHRoaXMuZml4dHVyZU51bWJlcnMgPSBbXTtcclxuICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlcy5jbGVhcigpO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRTdG9yZXMubGVuZ3RoICE9PSAxKSB7XHJcbiAgICAgIHRoaXMuZml4dHVyZVdpc2UgPSBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5maXh0dXJlV2lzZSkge1xyXG4gICAgICB0aGlzLmxvYWRGaXh0dXJlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25GaXh0dXJlV2lzZUNoYW5nZSgpIHtcclxuICAgIHRoaXMuZml4dHVyZU51bWJlcnMgPSBbXTtcclxuICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlcy5jbGVhcigpO1xyXG4gICAgaWYgKHRoaXMuZml4dHVyZVdpc2UgJiYgdGhpcy5zZWxlY3RlZFN0b3Jlcy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgdGhpcy5sb2FkRml4dHVyZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxvYWRGaXh0dXJlcygpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkU3RvcmVzLmxlbmd0aCAhPT0gMSkgcmV0dXJuO1xyXG4gICAgbGV0IHN0b3JlTmFtZSA9IHRoaXMuc2VsZWN0ZWRTdG9yZXNbMF0ubGFiZWw7XHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnNicy5nZXRGaXh0dXJlTnVtYmVyc0J5U3RvcmUoc3RvcmVOYW1lLCB0aGlzLmNsaWVudElkLCB0aGlzLnRhc2tUeXBlKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmZpeHR1cmVOdW1iZXJzID0gcmVzPy5kYXRhIHx8IFtdO1xyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5maXh0dXJlTnVtYmVycyA9IFtdO1xyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZUZpeHR1cmUobnVtOiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkRml4dHVyZXMuaGFzKG51bSkpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVzLmRlbGV0ZShudW0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVzLmFkZChudW0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNGaXh0dXJlU2VsZWN0ZWQobnVtOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRml4dHVyZXMuaGFzKG51bSk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RBbGxGaXh0dXJlcygpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkRml4dHVyZXMuc2l6ZSA9PT0gdGhpcy5maXh0dXJlTnVtYmVycy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVzLmNsZWFyKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpeHR1cmVOdW1iZXJzLmZvckVhY2goKG4pID0+IHRoaXMuc2VsZWN0ZWRGaXh0dXJlcy5hZGQobikpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGlzQWxsU2VsZWN0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5maXh0dXJlTnVtYmVycy5sZW5ndGggPiAwICYmIHRoaXMuc2VsZWN0ZWRGaXh0dXJlcy5zaXplID09PSB0aGlzLmZpeHR1cmVOdW1iZXJzLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIG9uU3VibWl0KCkge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRTdG9yZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMuc2hvd01lc3NhZ2UoJ1BsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIHN0b3JlLicsICdlcnJvcicpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5maXh0dXJlV2lzZSAmJiB0aGlzLnNlbGVjdGVkRml4dHVyZXMuc2l6ZSA9PT0gMCkge1xyXG4gICAgICB0aGlzLnNob3dNZXNzYWdlKCdQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBmaXh0dXJlLicsICdlcnJvcicpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBheWxvYWQ6IHtcclxuICAgICAgc3RvcmVOYW1lczogc3RyaW5nW107XHJcbiAgICAgIGNsaWVudElkOiBzdHJpbmc7XHJcbiAgICAgIHRhc2tUeXBlOiAnZml4dHVyZScgfCAnem9uZVZlcmlmaWNhdGlvbic7XHJcbiAgICAgIGZpeHR1cmVOdW1iZXJzPzogbnVtYmVyW107XHJcbiAgICB9ID0ge1xyXG4gICAgICBzdG9yZU5hbWVzOiB0aGlzLnNlbGVjdGVkU3RvcmVzLm1hcCgocykgPT4gcy5sYWJlbCksXHJcbiAgICAgIGNsaWVudElkOiB0aGlzLmNsaWVudElkLFxyXG4gICAgICB0YXNrVHlwZTogdGhpcy50YXNrVHlwZSxcclxuICAgIH07XHJcbiAgICBpZiAodGhpcy5maXh0dXJlV2lzZSkge1xyXG4gICAgICBwYXlsb2FkLmZpeHR1cmVOdW1iZXJzID0gQXJyYXkuZnJvbSh0aGlzLnNlbGVjdGVkRml4dHVyZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuc2JzLmFsbG93RWRpdFdpdGhvdXRSZW1vdmluZ1Jlc3BvbnNlKHBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGxldCBjb3VudCA9IHJlcz8uZGF0YT8ubW9kaWZpZWRDb3VudCB8fCAwO1xyXG4gICAgICAgIHRoaXMuc2hvd01lc3NhZ2UoYFVwZGF0ZWQgJHtjb3VudH0gcmVjb3JkKHMpIHN1Y2Nlc3NmdWxseS5gLCAnc3VjY2VzcycpO1xyXG4gICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNob3dNZXNzYWdlKGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHwgJ1NvbWV0aGluZyB3ZW50IHdyb25nLicsICdlcnJvcicpO1xyXG4gICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNob3dNZXNzYWdlKG1zZzogc3RyaW5nLCB0eXBlOiAnc3VjY2VzcycgfCAnZXJyb3InKSB7XHJcbiAgICB0aGlzLm1lc3NhZ2UgPSBtc2c7XHJcbiAgICB0aGlzLm1lc3NhZ2VUeXBlID0gdHlwZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gKHRoaXMubWVzc2FnZSA9ICcnKSwgNTAwMCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8c2VjdGlvbiBjbGFzcz1cImFsbG93LWVkaXQgcC0zXCI+XHJcbiAgPGxpYi10b29sLXBhZ2UtaGVhZGVyXHJcbiAgICB0aXRsZT1cIkFsbG93IEVkaXRcIlxyXG4gICAgZGVzY3JpcHRpb249XCJSZS1lbmFibGUgZWRpdGluZyBvbiBhIHB1Ymxpc2hlZCB0YXNrIHdpdGhvdXQgbG9zaW5nIGV4aXN0aW5nIHJlc3BvbnNlcy5cIlxyXG4gID48L2xpYi10b29sLXBhZ2UtaGVhZGVyPlxyXG4gIDxkaXYgY2xhc3M9XCJjYXJkIHAtNFwiIHN0eWxlPVwibWF4LXdpZHRoOiA2MDBweDtcIj5cclxuXHJcbiAgICA8IS0tIFRhc2sgVHlwZSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgZC1ibG9ja1wiPlRhc2sgVHlwZTwvbGFiZWw+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTNcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiPlxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIGlkPVwidGFza1R5cGVGaXh0dXJlXCJcclxuICAgICAgICAgICAgbmFtZT1cInRhc2tUeXBlXCIgdmFsdWU9XCJmaXh0dXJlXCJcclxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ0YXNrVHlwZVwiIChjaGFuZ2UpPVwib25UYXNrVHlwZUNoYW5nZSgpXCI+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwidGFza1R5cGVGaXh0dXJlXCI+Rml4dHVyZSBWZXJpZmljYXRpb248L2xhYmVsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCI+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgaWQ9XCJ0YXNrVHlwZVpvbmVcIlxyXG4gICAgICAgICAgICBuYW1lPVwidGFza1R5cGVcIiB2YWx1ZT1cInpvbmVWZXJpZmljYXRpb25cIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInRhc2tUeXBlXCIgKGNoYW5nZSk9XCJvblRhc2tUeXBlQ2hhbmdlKClcIj5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJ0YXNrVHlwZVpvbmVcIj5ab25lIFZlcmlmaWNhdGlvbjwvbGFiZWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBTdG9yZSBTZWxlY3QgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+U3RvcmU8L2xhYmVsPlxyXG4gICAgICA8bGliLXN0b3JlLXNlbGVjdFxyXG4gICAgICAgIFtvcHRpb25zXT1cInN0b3JlT3B0aW9uc1wiXHJcbiAgICAgICAgW2luaXRpYWxTZWxlY3RlZF09XCJpbml0aWFsU3RvcmVzXCJcclxuICAgICAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwib25TdG9yZXNTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgIDwvbGliLXN0b3JlLXNlbGVjdD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gRml4dHVyZSBXaXNlIENoZWNrYm94IC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTMgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgaWQ9XCJmaXh0dXJlV2lzZVwiXHJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJmaXh0dXJlV2lzZVwiIChjaGFuZ2UpPVwib25GaXh0dXJlV2lzZUNoYW5nZSgpXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwic2VsZWN0ZWRTdG9yZXMubGVuZ3RoICE9PSAxXCI+XHJcbiAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJmaXh0dXJlV2lzZVwiPkZpeHR1cmUgV2lzZTwvbGFiZWw+XHJcbiAgICAgIEBpZiAoc2VsZWN0ZWRTdG9yZXMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZCBzbWFsbFwiPihTZWxlY3Qgb25seSBvbmUgc3RvcmUgdG8gZW5hYmxlKTwvc3Bhbj5cclxuICAgICAgfVxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBGaXh0dXJlIFNlbGVjdGlvbiAtLT5cclxuICAgIEBpZiAoZml4dHVyZVdpc2UgJiYgc2VsZWN0ZWRTdG9yZXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgQGlmIChpc0xvYWRpbmcpIHtcclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkXCI+TG9hZGluZyBmaXh0dXJlcy4uLjwvZGl2PlxyXG4gICAgICAgIH0gQGVsc2UgaWYgKGZpeHR1cmVOdW1iZXJzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWRcIj5ObyBmaXh0dXJlcyBmb3VuZCBmb3IgdGhpcyBzdG9yZS48L2Rpdj5cclxuICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj5TZWxlY3QgRml4dHVyZXM8L2xhYmVsPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZpeHR1cmUtbGlzdFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZml4dHVyZS1pdGVtXCIgKGNsaWNrKT1cInNlbGVjdEFsbEZpeHR1cmVzKClcIj5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcclxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzQWxsU2VsZWN0ZWRcIiByZWFkb25seT5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZ3LXNlbWlib2xkXCI+U2VsZWN0IEFsbDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIEBmb3IgKG51bSBvZiBmaXh0dXJlTnVtYmVyczsgdHJhY2sgbnVtKSB7XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpeHR1cmUtaXRlbVwiIChjbGljayk9XCJ0b2dnbGVGaXh0dXJlKG51bSlcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc0ZpeHR1cmVTZWxlY3RlZChudW0pXCIgcmVhZG9ubHk+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj5GaXh0dXJlIHt7IG51bSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L2Rpdj5cclxuICAgIH1cclxuXHJcbiAgICA8IS0tIFN1Ym1pdCAtLT5cclxuICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwib25TdWJtaXQoKVwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJpc1N1Ym1pdHRpbmcgfHwgc2VsZWN0ZWRTdG9yZXMubGVuZ3RoID09PSAwIHx8IChmaXh0dXJlV2lzZSAmJiAoc2VsZWN0ZWRTdG9yZXMubGVuZ3RoID4gMSB8fCBzZWxlY3RlZEZpeHR1cmVzLnNpemUgPT09IDApKVwiPlxyXG4gICAgICB7eyBpc1N1Ym1pdHRpbmcgPyAnVW5sb2NraW5nLi4uJyA6ICdVbmxvY2sgRWRpdCcgfX1cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDwhLS0gTWVzc2FnZSAtLT5cclxuICAgIEBpZiAobWVzc2FnZSkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwibXQtMyBhbGVydFwiIFtjbGFzcy5hbGVydC1zdWNjZXNzXT1cIm1lc3NhZ2VUeXBlID09PSAnc3VjY2VzcydcIlxyXG4gICAgICAgIFtjbGFzcy5hbGVydC1kYW5nZXJdPVwibWVzc2FnZVR5cGUgPT09ICdlcnJvcidcIj5cclxuICAgICAgICB7eyBtZXNzYWdlIH19XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG48L3NlY3Rpb24+XHJcbiJdfQ==
@@ -4,7 +4,8 @@ import * as FileSaver from 'file-saver';
4
4
  import * as i0 from "@angular/core";
5
5
  import * as i1 from "../../../services/store-builder.service";
6
6
  import * as i2 from "@angular/forms";
7
- import * as i3 from "@angular/common";
7
+ import * as i3 from "../tool-page-header/tool-page-header.component";
8
+ import * as i4 from "@angular/common";
8
9
  export class CadFilesComponent {
9
10
  sbs;
10
11
  storeName = '';
@@ -79,10 +80,10 @@ export class CadFilesComponent {
79
80
  this.destroy$.complete();
80
81
  }
81
82
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CadFilesComponent, deps: [{ token: i1.StoreBuilderService }], target: i0.ɵɵFactoryTarget.Component });
82
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: CadFilesComponent, selector: "lib-cad-files", ngImport: i0, template: "<section class=\"cad-files p-3\">\r\n <div class=\"card p-4\">\r\n <h5 class=\"mb-1\">CAD &amp; Kissflow Files</h5>\r\n <p class=\"text-muted small mb-3\">\r\n Enter a store name to list the uploaded CAD and Kissflow files (sorted).\r\n </p>\r\n\r\n <div class=\"d-flex gap-2 align-items-end mb-3 flex-wrap\">\r\n <div class=\"flex-grow-1\" style=\"min-width: 260px; max-width: 420px;\">\r\n <label class=\"form-label\">Store Name</label>\r\n <input\r\n type=\"text\"\r\n class=\"form-control\"\r\n placeholder=\"Enter store name\"\r\n [(ngModel)]=\"storeName\"\r\n (keyup.enter)=\"onFetch()\"\r\n [disabled]=\"isLoading\" />\r\n </div>\r\n\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"onFetch()\"\r\n [disabled]=\"isLoading || !storeName.trim()\">\r\n {{ isLoading ? 'Fetching...' : 'Fetch Files' }}\r\n </button>\r\n </div>\r\n\r\n @if (message) {\r\n <div\r\n class=\"alert\"\r\n [class.alert-success]=\"messageType === 'success'\"\r\n [class.alert-danger]=\"messageType === 'error'\">\r\n {{ message }}\r\n </div>\r\n }\r\n\r\n @if (isLoading) {\r\n <div class=\"text-muted\">Loading files...</div>\r\n } @else if (hasSearched && files.length === 0) {\r\n <div class=\"text-muted\">No files found for this store.</div>\r\n } @else if (files.length > 0) {\r\n <div class=\"table-responsive\">\r\n <table class=\"table table-sm align-middle\">\r\n <thead>\r\n <tr>\r\n <th>Name</th>\r\n <th>Key</th>\r\n <th>Uploaded At</th>\r\n <th>Size</th>\r\n <th class=\"text-end\">Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (file of files; track file.key) {\r\n <tr>\r\n <td>{{ file.name }}</td>\r\n <td class=\"text-muted small text-break\">{{ file.key }}</td>\r\n <td>{{ file.uploadedAt | date: 'medium' }}</td>\r\n <td>{{ formatSize(file.size) }}</td>\r\n <td class=\"text-end\">\r\n <button\r\n class=\"btn btn-sm btn-outline-primary\"\r\n (click)=\"onDownload(file)\"\r\n [disabled]=\"downloadingKey === file.key\">\r\n {{ downloadingKey === file.key ? 'Downloading...' : 'Download' }}\r\n </button>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n }\r\n </div>\r\n</section>\r\n", styles: [".cad-files .card{border:1px solid #e0e0e0}.cad-files .table th{font-size:.85rem;color:#475467;font-weight:600}.cad-files .table td{vertical-align:middle}.cad-files .table .text-break{word-break:break-all}\n"], dependencies: [{ 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"] }, { kind: "pipe", type: i3.DatePipe, name: "date" }] });
83
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: CadFilesComponent, selector: "lib-cad-files", ngImport: i0, template: "<section class=\"cad-files p-3\">\r\n <lib-tool-page-header\r\n title=\"CAD &amp; Kissflow Files\"\r\n description=\"Enter a store name to list the uploaded CAD and Kissflow files (sorted).\"\r\n ></lib-tool-page-header>\r\n <div class=\"card p-4\">\r\n\r\n <div class=\"d-flex gap-2 align-items-end mb-3 flex-wrap\">\r\n <div class=\"flex-grow-1\" style=\"min-width: 260px; max-width: 420px;\">\r\n <label class=\"form-label\">Store Name</label>\r\n <input\r\n type=\"text\"\r\n class=\"form-control\"\r\n placeholder=\"Enter store name\"\r\n [(ngModel)]=\"storeName\"\r\n (keyup.enter)=\"onFetch()\"\r\n [disabled]=\"isLoading\" />\r\n </div>\r\n\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"onFetch()\"\r\n [disabled]=\"isLoading || !storeName.trim()\">\r\n {{ isLoading ? 'Fetching...' : 'Fetch Files' }}\r\n </button>\r\n </div>\r\n\r\n @if (message) {\r\n <div\r\n class=\"alert\"\r\n [class.alert-success]=\"messageType === 'success'\"\r\n [class.alert-danger]=\"messageType === 'error'\">\r\n {{ message }}\r\n </div>\r\n }\r\n\r\n @if (isLoading) {\r\n <div class=\"text-muted\">Loading files...</div>\r\n } @else if (hasSearched && files.length === 0) {\r\n <div class=\"text-muted\">No files found for this store.</div>\r\n } @else if (files.length > 0) {\r\n <div class=\"table-responsive\">\r\n <table class=\"table table-sm align-middle\">\r\n <thead>\r\n <tr>\r\n <th>Name</th>\r\n <th>Key</th>\r\n <th>Uploaded At</th>\r\n <th>Size</th>\r\n <th class=\"text-end\">Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (file of files; track file.key) {\r\n <tr>\r\n <td>{{ file.name }}</td>\r\n <td class=\"text-muted small text-break\">{{ file.key }}</td>\r\n <td>{{ file.uploadedAt | date: 'medium' }}</td>\r\n <td>{{ formatSize(file.size) }}</td>\r\n <td class=\"text-end\">\r\n <button\r\n class=\"btn btn-sm btn-outline-primary\"\r\n (click)=\"onDownload(file)\"\r\n [disabled]=\"downloadingKey === file.key\">\r\n {{ downloadingKey === file.key ? 'Downloading...' : 'Download' }}\r\n </button>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n }\r\n </div>\r\n</section>\r\n", styles: [".cad-files .card{border:1px solid #e0e0e0}.cad-files .table th{font-size:.85rem;color:#475467;font-weight:600}.cad-files .table td{vertical-align:middle}.cad-files .table .text-break{word-break:break-all}\n"], dependencies: [{ 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"] }, { kind: "component", type: i3.ToolPageHeaderComponent, selector: "lib-tool-page-header", inputs: ["title", "description", "backLink"] }, { kind: "pipe", type: i4.DatePipe, name: "date" }] });
83
84
  }
84
85
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CadFilesComponent, decorators: [{
85
86
  type: Component,
86
- args: [{ selector: 'lib-cad-files', template: "<section class=\"cad-files p-3\">\r\n <div class=\"card p-4\">\r\n <h5 class=\"mb-1\">CAD &amp; Kissflow Files</h5>\r\n <p class=\"text-muted small mb-3\">\r\n Enter a store name to list the uploaded CAD and Kissflow files (sorted).\r\n </p>\r\n\r\n <div class=\"d-flex gap-2 align-items-end mb-3 flex-wrap\">\r\n <div class=\"flex-grow-1\" style=\"min-width: 260px; max-width: 420px;\">\r\n <label class=\"form-label\">Store Name</label>\r\n <input\r\n type=\"text\"\r\n class=\"form-control\"\r\n placeholder=\"Enter store name\"\r\n [(ngModel)]=\"storeName\"\r\n (keyup.enter)=\"onFetch()\"\r\n [disabled]=\"isLoading\" />\r\n </div>\r\n\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"onFetch()\"\r\n [disabled]=\"isLoading || !storeName.trim()\">\r\n {{ isLoading ? 'Fetching...' : 'Fetch Files' }}\r\n </button>\r\n </div>\r\n\r\n @if (message) {\r\n <div\r\n class=\"alert\"\r\n [class.alert-success]=\"messageType === 'success'\"\r\n [class.alert-danger]=\"messageType === 'error'\">\r\n {{ message }}\r\n </div>\r\n }\r\n\r\n @if (isLoading) {\r\n <div class=\"text-muted\">Loading files...</div>\r\n } @else if (hasSearched && files.length === 0) {\r\n <div class=\"text-muted\">No files found for this store.</div>\r\n } @else if (files.length > 0) {\r\n <div class=\"table-responsive\">\r\n <table class=\"table table-sm align-middle\">\r\n <thead>\r\n <tr>\r\n <th>Name</th>\r\n <th>Key</th>\r\n <th>Uploaded At</th>\r\n <th>Size</th>\r\n <th class=\"text-end\">Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (file of files; track file.key) {\r\n <tr>\r\n <td>{{ file.name }}</td>\r\n <td class=\"text-muted small text-break\">{{ file.key }}</td>\r\n <td>{{ file.uploadedAt | date: 'medium' }}</td>\r\n <td>{{ formatSize(file.size) }}</td>\r\n <td class=\"text-end\">\r\n <button\r\n class=\"btn btn-sm btn-outline-primary\"\r\n (click)=\"onDownload(file)\"\r\n [disabled]=\"downloadingKey === file.key\">\r\n {{ downloadingKey === file.key ? 'Downloading...' : 'Download' }}\r\n </button>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n }\r\n </div>\r\n</section>\r\n", styles: [".cad-files .card{border:1px solid #e0e0e0}.cad-files .table th{font-size:.85rem;color:#475467;font-weight:600}.cad-files .table td{vertical-align:middle}.cad-files .table .text-break{word-break:break-all}\n"] }]
87
+ args: [{ selector: 'lib-cad-files', template: "<section class=\"cad-files p-3\">\r\n <lib-tool-page-header\r\n title=\"CAD &amp; Kissflow Files\"\r\n description=\"Enter a store name to list the uploaded CAD and Kissflow files (sorted).\"\r\n ></lib-tool-page-header>\r\n <div class=\"card p-4\">\r\n\r\n <div class=\"d-flex gap-2 align-items-end mb-3 flex-wrap\">\r\n <div class=\"flex-grow-1\" style=\"min-width: 260px; max-width: 420px;\">\r\n <label class=\"form-label\">Store Name</label>\r\n <input\r\n type=\"text\"\r\n class=\"form-control\"\r\n placeholder=\"Enter store name\"\r\n [(ngModel)]=\"storeName\"\r\n (keyup.enter)=\"onFetch()\"\r\n [disabled]=\"isLoading\" />\r\n </div>\r\n\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"onFetch()\"\r\n [disabled]=\"isLoading || !storeName.trim()\">\r\n {{ isLoading ? 'Fetching...' : 'Fetch Files' }}\r\n </button>\r\n </div>\r\n\r\n @if (message) {\r\n <div\r\n class=\"alert\"\r\n [class.alert-success]=\"messageType === 'success'\"\r\n [class.alert-danger]=\"messageType === 'error'\">\r\n {{ message }}\r\n </div>\r\n }\r\n\r\n @if (isLoading) {\r\n <div class=\"text-muted\">Loading files...</div>\r\n } @else if (hasSearched && files.length === 0) {\r\n <div class=\"text-muted\">No files found for this store.</div>\r\n } @else if (files.length > 0) {\r\n <div class=\"table-responsive\">\r\n <table class=\"table table-sm align-middle\">\r\n <thead>\r\n <tr>\r\n <th>Name</th>\r\n <th>Key</th>\r\n <th>Uploaded At</th>\r\n <th>Size</th>\r\n <th class=\"text-end\">Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (file of files; track file.key) {\r\n <tr>\r\n <td>{{ file.name }}</td>\r\n <td class=\"text-muted small text-break\">{{ file.key }}</td>\r\n <td>{{ file.uploadedAt | date: 'medium' }}</td>\r\n <td>{{ formatSize(file.size) }}</td>\r\n <td class=\"text-end\">\r\n <button\r\n class=\"btn btn-sm btn-outline-primary\"\r\n (click)=\"onDownload(file)\"\r\n [disabled]=\"downloadingKey === file.key\">\r\n {{ downloadingKey === file.key ? 'Downloading...' : 'Download' }}\r\n </button>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n }\r\n </div>\r\n</section>\r\n", styles: [".cad-files .card{border:1px solid #e0e0e0}.cad-files .table th{font-size:.85rem;color:#475467;font-weight:600}.cad-files .table td{vertical-align:middle}.cad-files .table .text-break{word-break:break-all}\n"] }]
87
88
  }], ctorParameters: () => [{ type: i1.StoreBuilderService }] });
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FkLWZpbGVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL3BsYW5vLXRvb2xzL2NhZC1maWxlcy9jYWQtZmlsZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvcGxhbm8tdG9vbHMvY2FkLWZpbGVzL2NhZC1maWxlcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxTQUFTLE1BQU0sWUFBWSxDQUFDOzs7OztBQWdCeEMsTUFBTSxPQUFPLGlCQUFpQjtJQWNSO0lBYnBCLFNBQVMsR0FBVyxFQUFFLENBQUM7SUFFdkIsS0FBSyxHQUFjLEVBQUUsQ0FBQztJQUN0QixXQUFXLEdBQVksS0FBSyxDQUFDO0lBRTdCLFNBQVMsR0FBWSxLQUFLLENBQUM7SUFDM0IsY0FBYyxHQUFrQixJQUFJLENBQUM7SUFFckMsT0FBTyxHQUFXLEVBQUUsQ0FBQztJQUNyQixXQUFXLEdBQXdCLFNBQVMsQ0FBQztJQUU1QixRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUVoRCxZQUFvQixHQUF3QjtRQUF4QixRQUFHLEdBQUgsR0FBRyxDQUFxQjtJQUFHLENBQUM7SUFFaEQsT0FBTztRQUNMLElBQUksU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM5QyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFdBQVcsQ0FB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RlUsaUJBQWlCOzRGQUFqQixpQkFBaUIscURDbEI5Qiw4cEZBMkVBOzs0RkR6RGEsaUJBQWlCO2tCQUw3QixTQUFTOytCQUNFLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBmaW5hbGl6ZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgKiBhcyBGaWxlU2F2ZXIgZnJvbSAnZmlsZS1zYXZlcic7XHJcbmltcG9ydCB7IFN0b3JlQnVpbGRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zdG9yZS1idWlsZGVyLnNlcnZpY2UnO1xyXG5cclxuaW50ZXJmYWNlIENhZEZpbGUge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBrZXk6IHN0cmluZztcclxuICB1cGxvYWRlZEF0OiBzdHJpbmc7XHJcbiAgc2l6ZTogbnVtYmVyO1xyXG4gIHVybDogc3RyaW5nO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1jYWQtZmlsZXMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jYWQtZmlsZXMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9jYWQtZmlsZXMuY29tcG9uZW50LnNjc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2FkRmlsZXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIHN0b3JlTmFtZTogc3RyaW5nID0gJyc7XHJcblxyXG4gIGZpbGVzOiBDYWRGaWxlW10gPSBbXTtcclxuICBoYXNTZWFyY2hlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBkb3dubG9hZGluZ0tleTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIG1lc3NhZ2U6IHN0cmluZyA9ICcnO1xyXG4gIG1lc3NhZ2VUeXBlOiAnc3VjY2VzcycgfCAnZXJyb3InID0gJ3N1Y2Nlc3MnO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzYnM6IFN0b3JlQnVpbGRlclNlcnZpY2UpIHt9XHJcblxyXG4gIG9uRmV0Y2goKSB7XHJcbiAgICBsZXQgc3RvcmVOYW1lID0gKHRoaXMuc3RvcmVOYW1lIHx8ICcnKS50cmltKCk7XHJcbiAgICBpZiAoIXN0b3JlTmFtZSkge1xyXG4gICAgICB0aGlzLnNob3dNZXNzYWdlKCdQbGVhc2UgZW50ZXIgYSBzdG9yZSBuYW1lLicsICdlcnJvcicpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5oYXNTZWFyY2hlZCA9IHRydWU7XHJcbiAgICB0aGlzLmZpbGVzID0gW107XHJcbiAgICB0aGlzLm1lc3NhZ2UgPSAnJztcclxuXHJcbiAgICB0aGlzLnNic1xyXG4gICAgICAuZ2V0Q2FkRmlsZXMoc3RvcmVOYW1lKVxyXG4gICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiAodGhpcy5pc0xvYWRpbmcgPSBmYWxzZSkpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuZmlsZXMgPSByZXM/LmRhdGE/LmZpbGVzIHx8IFtdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zaG93TWVzc2FnZShcclxuICAgICAgICAgICAgZXJyPy5lcnJvcj8uZXJyb3I/LmVyck1zZyB8fFxyXG4gICAgICAgICAgICAgIGVycj8uZXJyb3I/LmVycm9yIHx8XHJcbiAgICAgICAgICAgICAgZXJyPy5lcnJvcj8ubWVzc2FnZSB8fFxyXG4gICAgICAgICAgICAgICdGYWlsZWQgdG8gZmV0Y2ggZmlsZXMuJyxcclxuICAgICAgICAgICAgJ2Vycm9yJyxcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBvbkRvd25sb2FkKGZpbGU6IENhZEZpbGUpIHtcclxuICAgIGlmICghZmlsZS51cmwpIHtcclxuICAgICAgdGhpcy5zaG93TWVzc2FnZSgnRG93bmxvYWQgVVJMIGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgZmlsZS4nLCAnZXJyb3InKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZG93bmxvYWRpbmdLZXkgPSBmaWxlLmtleTtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goZmlsZS51cmwpO1xyXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGJsb2IgPSBhd2FpdCByZXNwb25zZS5ibG9iKCk7XHJcbiAgICAgIEZpbGVTYXZlci5zYXZlQXMoYmxvYiwgZmlsZS5uYW1lKTtcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICB0aGlzLnNob3dNZXNzYWdlKGBGYWlsZWQgdG8gZG93bmxvYWQgJHtmaWxlLm5hbWV9LmAsICdlcnJvcicpO1xyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgdGhpcy5kb3dubG9hZGluZ0tleSA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmb3JtYXRTaXplKGJ5dGVzOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKGJ5dGVzID09IG51bGwgfHwgaXNOYU4oYnl0ZXMpKSByZXR1cm4gJy0nO1xyXG4gICAgcmV0dXJuIChieXRlcyAvICgxMDI0ICogMTAyNCkpLnRvRml4ZWQoMikgKyAnIE1CJztcclxuICB9XHJcblxyXG4gIHNob3dNZXNzYWdlKG1zZzogc3RyaW5nLCB0eXBlOiAnc3VjY2VzcycgfCAnZXJyb3InKSB7XHJcbiAgICB0aGlzLm1lc3NhZ2UgPSBtc2c7XHJcbiAgICB0aGlzLm1lc3NhZ2VUeXBlID0gdHlwZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gKHRoaXMubWVzc2FnZSA9ICcnKSwgNTAwMCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8c2VjdGlvbiBjbGFzcz1cImNhZC1maWxlcyBwLTNcIj5cclxuICA8ZGl2IGNsYXNzPVwiY2FyZCBwLTRcIj5cclxuICAgIDxoNSBjbGFzcz1cIm1iLTFcIj5DQUQgJmFtcDsgS2lzc2Zsb3cgRmlsZXM8L2g1PlxyXG4gICAgPHAgY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsIG1iLTNcIj5cclxuICAgICAgRW50ZXIgYSBzdG9yZSBuYW1lIHRvIGxpc3QgdGhlIHVwbG9hZGVkIENBRCBhbmQgS2lzc2Zsb3cgZmlsZXMgKHNvcnRlZCkuXHJcbiAgICA8L3A+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMiBhbGlnbi1pdGVtcy1lbmQgbWItMyBmbGV4LXdyYXBcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xXCIgc3R5bGU9XCJtaW4td2lkdGg6IDI2MHB4OyBtYXgtd2lkdGg6IDQyMHB4O1wiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj5TdG9yZSBOYW1lPC9sYWJlbD5cclxuICAgICAgICA8aW5wdXRcclxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcclxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgc3RvcmUgbmFtZVwiXHJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInN0b3JlTmFtZVwiXHJcbiAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25GZXRjaCgpXCJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0xvYWRpbmdcIiAvPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uRmV0Y2goKVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImlzTG9hZGluZyB8fCAhc3RvcmVOYW1lLnRyaW0oKVwiPlxyXG4gICAgICAgIHt7IGlzTG9hZGluZyA/ICdGZXRjaGluZy4uLicgOiAnRmV0Y2ggRmlsZXMnIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgQGlmIChtZXNzYWdlKSB7XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImFsZXJ0XCJcclxuICAgICAgICBbY2xhc3MuYWxlcnQtc3VjY2Vzc109XCJtZXNzYWdlVHlwZSA9PT0gJ3N1Y2Nlc3MnXCJcclxuICAgICAgICBbY2xhc3MuYWxlcnQtZGFuZ2VyXT1cIm1lc3NhZ2VUeXBlID09PSAnZXJyb3InXCI+XHJcbiAgICAgICAge3sgbWVzc2FnZSB9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgIH1cclxuXHJcbiAgICBAaWYgKGlzTG9hZGluZykge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZFwiPkxvYWRpbmcgZmlsZXMuLi48L2Rpdj5cclxuICAgIH0gQGVsc2UgaWYgKGhhc1NlYXJjaGVkICYmIGZpbGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZFwiPk5vIGZpbGVzIGZvdW5kIGZvciB0aGlzIHN0b3JlLjwvZGl2PlxyXG4gICAgfSBAZWxzZSBpZiAoZmlsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLXNtIGFsaWduLW1pZGRsZVwiPlxyXG4gICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgPHRoPk5hbWU8L3RoPlxyXG4gICAgICAgICAgICAgIDx0aD5LZXk8L3RoPlxyXG4gICAgICAgICAgICAgIDx0aD5VcGxvYWRlZCBBdDwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoPlNpemU8L3RoPlxyXG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cInRleHQtZW5kXCI+QWN0aW9uPC90aD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgIEBmb3IgKGZpbGUgb2YgZmlsZXM7IHRyYWNrIGZpbGUua2V5KSB7XHJcbiAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgPHRkPnt7IGZpbGUubmFtZSB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsIHRleHQtYnJlYWtcIj57eyBmaWxlLmtleSB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQ+e3sgZmlsZS51cGxvYWRlZEF0IHwgZGF0ZTogJ21lZGl1bScgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkPnt7IGZvcm1hdFNpemUoZmlsZS5zaXplKSB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkRvd25sb2FkKGZpbGUpXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZG93bmxvYWRpbmdLZXkgPT09IGZpbGUua2V5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgZG93bmxvYWRpbmdLZXkgPT09IGZpbGUua2V5ID8gJ0Rvd25sb2FkaW5nLi4uJyA6ICdEb3dubG9hZCcgfX1cclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgPC90YWJsZT5cclxuICAgICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcbjwvc2VjdGlvbj5cclxuIl19
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FkLWZpbGVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL3BsYW5vLXRvb2xzL2NhZC1maWxlcy9jYWQtZmlsZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvcGxhbm8tdG9vbHMvY2FkLWZpbGVzL2NhZC1maWxlcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxTQUFTLE1BQU0sWUFBWSxDQUFDOzs7Ozs7QUFnQnhDLE1BQU0sT0FBTyxpQkFBaUI7SUFjUjtJQWJwQixTQUFTLEdBQVcsRUFBRSxDQUFDO0lBRXZCLEtBQUssR0FBYyxFQUFFLENBQUM7SUFDdEIsV0FBVyxHQUFZLEtBQUssQ0FBQztJQUU3QixTQUFTLEdBQVksS0FBSyxDQUFDO0lBQzNCLGNBQWMsR0FBa0IsSUFBSSxDQUFDO0lBRXJDLE9BQU8sR0FBVyxFQUFFLENBQUM7SUFDckIsV0FBVyxHQUF3QixTQUFTLENBQUM7SUFFNUIsUUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFFaEQsWUFBb0IsR0FBd0I7UUFBeEIsUUFBRyxHQUFILEdBQUcsQ0FBcUI7SUFBRyxDQUFDO0lBRWhELE9BQU87UUFDTCxJQUFJLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDOUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNkLElBQUksQ0FBQyxXQUFXLENB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bEZVLGlCQUFpQjs0RkFBakIsaUJBQWlCLHFEQ2xCOUIsZ3FGQTJFQTs7NEZEekRhLGlCQUFpQjtrQkFMN0IsU0FBUzsrQkFDRSxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgZmluYWxpemUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0ICogYXMgRmlsZVNhdmVyIGZyb20gJ2ZpbGUtc2F2ZXInO1xyXG5pbXBvcnQgeyBTdG9yZUJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvc3RvcmUtYnVpbGRlci5zZXJ2aWNlJztcclxuXHJcbmludGVyZmFjZSBDYWRGaWxlIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAga2V5OiBzdHJpbmc7XHJcbiAgdXBsb2FkZWRBdDogc3RyaW5nO1xyXG4gIHNpemU6IG51bWJlcjtcclxuICB1cmw6IHN0cmluZztcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItY2FkLWZpbGVzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY2FkLWZpbGVzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vY2FkLWZpbGVzLmNvbXBvbmVudC5zY3NzJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIENhZEZpbGVzQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuICBzdG9yZU5hbWU6IHN0cmluZyA9ICcnO1xyXG5cclxuICBmaWxlczogQ2FkRmlsZVtdID0gW107XHJcbiAgaGFzU2VhcmNoZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgaXNMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZG93bmxvYWRpbmdLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICBtZXNzYWdlOiBzdHJpbmcgPSAnJztcclxuICBtZXNzYWdlVHlwZTogJ3N1Y2Nlc3MnIHwgJ2Vycm9yJyA9ICdzdWNjZXNzJztcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2JzOiBTdG9yZUJ1aWxkZXJTZXJ2aWNlKSB7fVxyXG5cclxuICBvbkZldGNoKCkge1xyXG4gICAgbGV0IHN0b3JlTmFtZSA9ICh0aGlzLnN0b3JlTmFtZSB8fCAnJykudHJpbSgpO1xyXG4gICAgaWYgKCFzdG9yZU5hbWUpIHtcclxuICAgICAgdGhpcy5zaG93TWVzc2FnZSgnUGxlYXNlIGVudGVyIGEgc3RvcmUgbmFtZS4nLCAnZXJyb3InKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuaGFzU2VhcmNoZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5maWxlcyA9IFtdO1xyXG4gICAgdGhpcy5tZXNzYWdlID0gJyc7XHJcblxyXG4gICAgdGhpcy5zYnNcclxuICAgICAgLmdldENhZEZpbGVzKHN0b3JlTmFtZSlcclxuICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4gKHRoaXMuaXNMb2FkaW5nID0gZmFsc2UpKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmZpbGVzID0gcmVzPy5kYXRhPy5maWxlcyB8fCBbXTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2hvd01lc3NhZ2UoXHJcbiAgICAgICAgICAgIGVycj8uZXJyb3I/LmVycm9yPy5lcnJNc2cgfHxcclxuICAgICAgICAgICAgICBlcnI/LmVycm9yPy5lcnJvciB8fFxyXG4gICAgICAgICAgICAgIGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHxcclxuICAgICAgICAgICAgICAnRmFpbGVkIHRvIGZldGNoIGZpbGVzLicsXHJcbiAgICAgICAgICAgICdlcnJvcicsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25Eb3dubG9hZChmaWxlOiBDYWRGaWxlKSB7XHJcbiAgICBpZiAoIWZpbGUudXJsKSB7XHJcbiAgICAgIHRoaXMuc2hvd01lc3NhZ2UoJ0Rvd25sb2FkIFVSTCBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIGZpbGUuJywgJ2Vycm9yJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRvd25sb2FkaW5nS2V5ID0gZmlsZS5rZXk7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGZpbGUudXJsKTtcclxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSFRUUCAke3Jlc3BvbnNlLnN0YXR1c31gKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBibG9iID0gYXdhaXQgcmVzcG9uc2UuYmxvYigpO1xyXG4gICAgICBGaWxlU2F2ZXIuc2F2ZUFzKGJsb2IsIGZpbGUubmFtZSk7XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgdGhpcy5zaG93TWVzc2FnZShgRmFpbGVkIHRvIGRvd25sb2FkICR7ZmlsZS5uYW1lfS5gLCAnZXJyb3InKTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHRoaXMuZG93bmxvYWRpbmdLZXkgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9ybWF0U2l6ZShieXRlczogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGlmIChieXRlcyA9PSBudWxsIHx8IGlzTmFOKGJ5dGVzKSkgcmV0dXJuICctJztcclxuICAgIHJldHVybiAoYnl0ZXMgLyAoMTAyNCAqIDEwMjQpKS50b0ZpeGVkKDIpICsgJyBNQic7XHJcbiAgfVxyXG5cclxuICBzaG93TWVzc2FnZShtc2c6IHN0cmluZywgdHlwZTogJ3N1Y2Nlc3MnIHwgJ2Vycm9yJykge1xyXG4gICAgdGhpcy5tZXNzYWdlID0gbXNnO1xyXG4gICAgdGhpcy5tZXNzYWdlVHlwZSA9IHR5cGU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+ICh0aGlzLm1lc3NhZ2UgPSAnJyksIDUwMDApO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIiwiPHNlY3Rpb24gY2xhc3M9XCJjYWQtZmlsZXMgcC0zXCI+XHJcbiAgPGxpYi10b29sLXBhZ2UtaGVhZGVyXHJcbiAgICB0aXRsZT1cIkNBRCAmYW1wOyBLaXNzZmxvdyBGaWxlc1wiXHJcbiAgICBkZXNjcmlwdGlvbj1cIkVudGVyIGEgc3RvcmUgbmFtZSB0byBsaXN0IHRoZSB1cGxvYWRlZCBDQUQgYW5kIEtpc3NmbG93IGZpbGVzIChzb3J0ZWQpLlwiXHJcbiAgPjwvbGliLXRvb2wtcGFnZS1oZWFkZXI+XHJcbiAgPGRpdiBjbGFzcz1cImNhcmQgcC00XCI+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMiBhbGlnbi1pdGVtcy1lbmQgbWItMyBmbGV4LXdyYXBcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xXCIgc3R5bGU9XCJtaW4td2lkdGg6IDI2MHB4OyBtYXgtd2lkdGg6IDQyMHB4O1wiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj5TdG9yZSBOYW1lPC9sYWJlbD5cclxuICAgICAgICA8aW5wdXRcclxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcclxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgc3RvcmUgbmFtZVwiXHJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInN0b3JlTmFtZVwiXHJcbiAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25GZXRjaCgpXCJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0xvYWRpbmdcIiAvPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uRmV0Y2goKVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImlzTG9hZGluZyB8fCAhc3RvcmVOYW1lLnRyaW0oKVwiPlxyXG4gICAgICAgIHt7IGlzTG9hZGluZyA/ICdGZXRjaGluZy4uLicgOiAnRmV0Y2ggRmlsZXMnIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgQGlmIChtZXNzYWdlKSB7XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImFsZXJ0XCJcclxuICAgICAgICBbY2xhc3MuYWxlcnQtc3VjY2Vzc109XCJtZXNzYWdlVHlwZSA9PT0gJ3N1Y2Nlc3MnXCJcclxuICAgICAgICBbY2xhc3MuYWxlcnQtZGFuZ2VyXT1cIm1lc3NhZ2VUeXBlID09PSAnZXJyb3InXCI+XHJcbiAgICAgICAge3sgbWVzc2FnZSB9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgIH1cclxuXHJcbiAgICBAaWYgKGlzTG9hZGluZykge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZFwiPkxvYWRpbmcgZmlsZXMuLi48L2Rpdj5cclxuICAgIH0gQGVsc2UgaWYgKGhhc1NlYXJjaGVkICYmIGZpbGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZFwiPk5vIGZpbGVzIGZvdW5kIGZvciB0aGlzIHN0b3JlLjwvZGl2PlxyXG4gICAgfSBAZWxzZSBpZiAoZmlsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLXNtIGFsaWduLW1pZGRsZVwiPlxyXG4gICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgPHRoPk5hbWU8L3RoPlxyXG4gICAgICAgICAgICAgIDx0aD5LZXk8L3RoPlxyXG4gICAgICAgICAgICAgIDx0aD5VcGxvYWRlZCBBdDwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoPlNpemU8L3RoPlxyXG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cInRleHQtZW5kXCI+QWN0aW9uPC90aD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgIEBmb3IgKGZpbGUgb2YgZmlsZXM7IHRyYWNrIGZpbGUua2V5KSB7XHJcbiAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgPHRkPnt7IGZpbGUubmFtZSB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsIHRleHQtYnJlYWtcIj57eyBmaWxlLmtleSB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQ+e3sgZmlsZS51cGxvYWRlZEF0IHwgZGF0ZTogJ21lZGl1bScgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkPnt7IGZvcm1hdFNpemUoZmlsZS5zaXplKSB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkRvd25sb2FkKGZpbGUpXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZG93bmxvYWRpbmdLZXkgPT09IGZpbGUua2V5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgZG93bmxvYWRpbmdLZXkgPT09IGZpbGUua2V5ID8gJ0Rvd25sb2FkaW5nLi4uJyA6ICdEb3dubG9hZCcgfX1cclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgPC90YWJsZT5cclxuICAgICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcbjwvc2VjdGlvbj5cclxuIl19