@cqa-lib/cqa-ui 1.1.180 → 1.1.181

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 (57) hide show
  1. package/esm2020/lib/custom-textarea/custom-textarea.component.mjs +6 -3
  2. package/esm2020/lib/custom-toggle/custom-toggle.component.mjs +35 -0
  3. package/esm2020/lib/file-upload/file-upload.component.mjs +87 -0
  4. package/esm2020/lib/item-list/item-list.component.mjs +59 -0
  5. package/esm2020/lib/item-list/item-list.model.mjs +2 -0
  6. package/esm2020/lib/step-builder/step-builder-ai-agent/step-builder-ai-agent.component.mjs +136 -0
  7. package/esm2020/lib/step-builder/step-builder-custom-code/step-builder-custom-code.component.mjs +65 -0
  8. package/esm2020/lib/step-builder/step-builder-database/step-builder-database.component.mjs +1 -1
  9. package/esm2020/lib/step-builder/step-builder-document/step-builder-document.component.mjs +241 -0
  10. package/esm2020/lib/step-builder/step-builder-document-generation-template-step/step-builder-document-generation-template-step.component.mjs +176 -0
  11. package/esm2020/lib/step-builder/step-builder-record-step/step-builder-record-step.component.mjs +31 -0
  12. package/esm2020/lib/test-case-details/custom-edit-step/custom-edit-step.component.mjs +3 -3
  13. package/esm2020/lib/test-case-details/element-list/element-list.component.mjs +50 -0
  14. package/esm2020/lib/test-case-details/element-popup/element-popup-data.mjs +5 -0
  15. package/esm2020/lib/test-case-details/element-popup/element-popup-ref.mjs +32 -0
  16. package/esm2020/lib/test-case-details/element-popup/element-popup.component.mjs +272 -0
  17. package/esm2020/lib/test-case-details/element-popup/element-popup.service.mjs +97 -0
  18. package/esm2020/lib/test-case-details/normal-step/normal-step.component.mjs +151 -19
  19. package/esm2020/lib/test-case-details/test-data-modal/test-data-modal-data.mjs +5 -0
  20. package/esm2020/lib/test-case-details/test-data-modal/test-data-modal-environment.model.mjs +10 -0
  21. package/esm2020/lib/test-case-details/test-data-modal/test-data-modal-parameter.model.mjs +8 -0
  22. package/esm2020/lib/test-case-details/test-data-modal/test-data-modal-ref.mjs +32 -0
  23. package/esm2020/lib/test-case-details/test-data-modal/test-data-modal.component.mjs +301 -0
  24. package/esm2020/lib/test-case-details/test-data-modal/test-data-modal.service.mjs +97 -0
  25. package/esm2020/lib/ui-kit.module.mjs +58 -3
  26. package/esm2020/lib/utils/tw-overlay-container.mjs +7 -3
  27. package/esm2020/public-api.mjs +19 -1
  28. package/fesm2015/cqa-lib-cqa-ui.mjs +2926 -1097
  29. package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
  30. package/fesm2020/cqa-lib-cqa-ui.mjs +2850 -1041
  31. package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
  32. package/lib/custom-textarea/custom-textarea.component.d.ts +2 -1
  33. package/lib/custom-toggle/custom-toggle.component.d.ts +12 -0
  34. package/lib/file-upload/file-upload.component.d.ts +26 -0
  35. package/lib/item-list/item-list.component.d.ts +25 -0
  36. package/lib/item-list/item-list.model.d.ts +16 -0
  37. package/lib/step-builder/step-builder-ai-agent/step-builder-ai-agent.component.d.ts +47 -0
  38. package/lib/step-builder/step-builder-custom-code/step-builder-custom-code.component.d.ts +27 -0
  39. package/lib/step-builder/step-builder-document/step-builder-document.component.d.ts +81 -0
  40. package/lib/step-builder/step-builder-document-generation-template-step/step-builder-document-generation-template-step.component.d.ts +55 -0
  41. package/lib/step-builder/step-builder-record-step/step-builder-record-step.component.d.ts +16 -0
  42. package/lib/test-case-details/element-list/element-list.component.d.ts +26 -0
  43. package/lib/test-case-details/element-popup/element-popup-data.d.ts +16 -0
  44. package/lib/test-case-details/element-popup/element-popup-ref.d.ts +13 -0
  45. package/lib/test-case-details/element-popup/element-popup.component.d.ts +60 -0
  46. package/lib/test-case-details/element-popup/element-popup.service.d.ts +23 -0
  47. package/lib/test-case-details/normal-step/normal-step.component.d.ts +17 -2
  48. package/lib/test-case-details/test-data-modal/test-data-modal-data.d.ts +31 -0
  49. package/lib/test-case-details/test-data-modal/test-data-modal-environment.model.d.ts +12 -0
  50. package/lib/test-case-details/test-data-modal/test-data-modal-parameter.model.d.ts +11 -0
  51. package/lib/test-case-details/test-data-modal/test-data-modal-ref.d.ts +13 -0
  52. package/lib/test-case-details/test-data-modal/test-data-modal.component.d.ts +91 -0
  53. package/lib/test-case-details/test-data-modal/test-data-modal.service.d.ts +23 -0
  54. package/lib/ui-kit.module.d.ts +60 -49
  55. package/package.json +1 -1
  56. package/public-api.d.ts +18 -0
  57. package/styles.css +1 -1
@@ -14,6 +14,7 @@ export class CustomTextareaComponent {
14
14
  this.fullWidth = false;
15
15
  this.showCharCount = false;
16
16
  this.resize = 'vertical';
17
+ this.customClass = '';
17
18
  this.valueChange = new EventEmitter();
18
19
  this.blurred = new EventEmitter();
19
20
  this.focused = new EventEmitter();
@@ -100,10 +101,10 @@ export class CustomTextareaComponent {
100
101
  }
101
102
  }
102
103
  CustomTextareaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: CustomTextareaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
103
- CustomTextareaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: CustomTextareaComponent, selector: "cqa-custom-textarea", inputs: { label: "label", placeholder: "placeholder", value: "value", disabled: "disabled", errors: "errors", required: "required", ariaLabel: "ariaLabel", size: "size", fullWidth: "fullWidth", maxLength: "maxLength", showCharCount: "showCharCount", rows: "rows", cols: "cols", resize: "resize", textareaInlineStyle: "textareaInlineStyle", labelInlineStyle: "labelInlineStyle" }, outputs: { valueChange: "valueChange", blurred: "blurred", focused: "focused" }, host: { classAttribute: "cqa-ui-root" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-ui-root\" [style.display]=\"'block'\" [style.width]=\"fullWidth ? '100%' : 'auto'\">\n <div class=\"cqa-flex cqa-flex-col\" [style.width]=\"fullWidth ? '100%' : 'auto'\">\n <label \n *ngIf=\"label\"\n class=\"cqa-font-medium cqa-text-[#374151]\"\n [ngClass]=\"labelSizeClasses\"\n [style]=\"labelStyles\">\n {{ label }}\n <span *ngIf=\"required\" class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n\n <div class=\"cqa-relative\" [style.width]=\"fullWidth ? '100%' : 'auto'\">\n <textarea\n class=\"cqa-w-full !cqa-border !cqa-border-solid !cqa-border-gray-200 cqa-rounded-md cqa-bg-white cqa-font-['SF_Pro_Text'] cqa-font-normal cqa-leading-normal cqa-tracking-normal cqa-text-[#0A0A0A] placeholder:cqa-text-[#9CA3AF] cqa-transition-all cqa-duration-200 cqa-outline-none\"\n [ngClass]=\"{\n 'cqa-border-[#D1D5DB] focus:cqa-border-[#3B82F6] focus:cqa-ring-1 focus:cqa-ring-[#3B82F6]': !hasError,\n 'cqa-border-[#EF4444] focus:cqa-border-[#EF4444] focus:cqa-ring-1 focus:cqa-ring-[#EF4444]': hasError,\n 'cqa-bg-[#F9FAFB] cqa-cursor-not-allowed cqa-text-[#9CA3AF]': disabled,\n 'cqa-outline-none': true\n }\"\n [ngClass]=\"textareaSizeClasses\"\n [ngClass]=\"resizeClass\"\n [style]=\"textareaStyles\"\n [placeholder]=\"placeholder\"\n [value]=\"textareaValue\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n [disabled]=\"disabled\"\n [attr.rows]=\"rows\"\n [attr.cols]=\"cols\"\n [attr.maxlength]=\"maxLength\"\n [attr.aria-label]=\"ariaLabel || label\"\n [attr.aria-invalid]=\"hasError\"\n [attr.aria-required]=\"required\"\n ></textarea>\n </div>\n\n <div *ngIf=\"showCharCount && maxLength\" class=\"cqa-flex cqa-justify-end cqa-mt-1\">\n <span class=\"cqa-text-xs cqa-text-[#6B7280]\">\n {{ textareaValue.length }}/{{ maxLength }}\n </span>\n </div>\n\n <div *ngIf=\"hasError\" class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-mt-1.5\">\n <div *ngFor=\"let error of errors\" class=\"cqa-flex cqa-items-start cqa-gap-1.5\">\n <svg \n xmlns=\"http://www.w3.org/2000/svg\" \n width=\"14\" \n height=\"14\" \n viewBox=\"0 0 14 14\" \n fill=\"none\"\n class=\"cqa-flex-shrink-0 cqa-mt-0.5\">\n <path d=\"M7 1.75C4.1 1.75 1.75 4.1 1.75 7C1.75 9.9 4.1 12.25 7 12.25C9.9 12.25 12.25 9.9 12.25 7C12.25 4.1 9.9 1.75 7 1.75ZM7 9.625C6.65625 9.625 6.375 9.34375 6.375 9V7C6.375 6.65625 6.65625 6.375 7 6.375C7.34375 6.375 7.625 6.65625 7.625 7V9C7.625 9.34375 7.34375 9.625 7 9.625ZM7.625 5.25H6.375V4H7.625V5.25Z\" fill=\"#EF4444\"/>\n </svg>\n <span class=\"cqa-text-xs cqa-text-[#EF4444] cqa-font-medium cqa-leading-[18px]\">\n {{ error }}\n </span>\n </div>\n </div>\n </div>\n</div>\n\n", directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
104
+ CustomTextareaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: CustomTextareaComponent, selector: "cqa-custom-textarea", inputs: { label: "label", placeholder: "placeholder", value: "value", disabled: "disabled", errors: "errors", required: "required", ariaLabel: "ariaLabel", size: "size", fullWidth: "fullWidth", maxLength: "maxLength", showCharCount: "showCharCount", rows: "rows", cols: "cols", resize: "resize", textareaInlineStyle: "textareaInlineStyle", labelInlineStyle: "labelInlineStyle", customClass: "customClass" }, outputs: { valueChange: "valueChange", blurred: "blurred", focused: "focused" }, host: { classAttribute: "cqa-ui-root" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-ui-root\" [style.display]=\"'block'\" [style.width]=\"fullWidth ? '100%' : 'auto'\">\n <div class=\"cqa-flex cqa-flex-col\" [style.width]=\"fullWidth ? '100%' : 'auto'\">\n <label \n *ngIf=\"label\"\n class=\"cqa-font-medium cqa-text-[#374151]\"\n [ngClass]=\"labelSizeClasses\"\n [style]=\"labelStyles\">\n {{ label }}\n <span *ngIf=\"required\" class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n\n <div class=\"cqa-relative\" [style.width]=\"fullWidth ? '100%' : 'auto'\">\n <textarea\n class=\"cqa-w-full !cqa-border !cqa-border-solid !cqa-border-gray-200 cqa-rounded-md cqa-bg-white cqa-font-['SF_Pro_Text'] cqa-font-normal cqa-leading-normal cqa-tracking-normal cqa-text-[#0A0A0A] placeholder:cqa-text-[#9CA3AF] cqa-transition-all cqa-duration-200 cqa-outline-none\"\n [ngClass]=\"{\n 'cqa-border-[#D1D5DB] focus:cqa-border-[#3B82F6] focus:cqa-ring-1 focus:cqa-ring-[#3B82F6]': !hasError,\n 'cqa-border-[#EF4444] focus:cqa-border-[#EF4444] focus:cqa-ring-1 focus:cqa-ring-[#EF4444]': hasError,\n 'cqa-bg-[#F9FAFB] cqa-cursor-not-allowed cqa-text-[#9CA3AF]': disabled,\n 'cqa-outline-none': true\n }\"\n [ngClass]=\"textareaSizeClasses\"\n [ngClass]=\"resizeClass\"\n [ngClass]=\"customClass\"\n [style]=\"textareaStyles\"\n [placeholder]=\"placeholder\"\n [value]=\"textareaValue\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n [disabled]=\"disabled\"\n [attr.rows]=\"rows\"\n [attr.cols]=\"cols\"\n [attr.maxlength]=\"maxLength\"\n [attr.aria-label]=\"ariaLabel || label\"\n [attr.aria-invalid]=\"hasError\"\n [attr.aria-required]=\"required\"\n ></textarea>\n </div>\n\n <div *ngIf=\"showCharCount && maxLength\" class=\"cqa-flex cqa-justify-end cqa-mt-1\">\n <span class=\"cqa-text-xs cqa-text-[#6B7280]\">\n {{ textareaValue.length }}/{{ maxLength }}\n </span>\n </div>\n\n <div *ngIf=\"hasError\" class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-mt-1.5\">\n <div *ngFor=\"let error of errors\" class=\"cqa-flex cqa-items-start cqa-gap-1.5\">\n <svg \n xmlns=\"http://www.w3.org/2000/svg\" \n width=\"14\" \n height=\"14\" \n viewBox=\"0 0 14 14\" \n fill=\"none\"\n class=\"cqa-flex-shrink-0 cqa-mt-0.5\">\n <path d=\"M7 1.75C4.1 1.75 1.75 4.1 1.75 7C1.75 9.9 4.1 12.25 7 12.25C9.9 12.25 12.25 9.9 12.25 7C12.25 4.1 9.9 1.75 7 1.75ZM7 9.625C6.65625 9.625 6.375 9.34375 6.375 9V7C6.375 6.65625 6.65625 6.375 7 6.375C7.34375 6.375 7.625 6.65625 7.625 7V9C7.625 9.34375 7.34375 9.625 7 9.625ZM7.625 5.25H6.375V4H7.625V5.25Z\" fill=\"#EF4444\"/>\n </svg>\n <span class=\"cqa-text-xs cqa-text-[#EF4444] cqa-font-medium cqa-leading-[18px]\">\n {{ error }}\n </span>\n </div>\n </div>\n </div>\n</div>\n\n", directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
104
105
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: CustomTextareaComponent, decorators: [{
105
106
  type: Component,
106
- args: [{ selector: 'cqa-custom-textarea', host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-ui-root\" [style.display]=\"'block'\" [style.width]=\"fullWidth ? '100%' : 'auto'\">\n <div class=\"cqa-flex cqa-flex-col\" [style.width]=\"fullWidth ? '100%' : 'auto'\">\n <label \n *ngIf=\"label\"\n class=\"cqa-font-medium cqa-text-[#374151]\"\n [ngClass]=\"labelSizeClasses\"\n [style]=\"labelStyles\">\n {{ label }}\n <span *ngIf=\"required\" class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n\n <div class=\"cqa-relative\" [style.width]=\"fullWidth ? '100%' : 'auto'\">\n <textarea\n class=\"cqa-w-full !cqa-border !cqa-border-solid !cqa-border-gray-200 cqa-rounded-md cqa-bg-white cqa-font-['SF_Pro_Text'] cqa-font-normal cqa-leading-normal cqa-tracking-normal cqa-text-[#0A0A0A] placeholder:cqa-text-[#9CA3AF] cqa-transition-all cqa-duration-200 cqa-outline-none\"\n [ngClass]=\"{\n 'cqa-border-[#D1D5DB] focus:cqa-border-[#3B82F6] focus:cqa-ring-1 focus:cqa-ring-[#3B82F6]': !hasError,\n 'cqa-border-[#EF4444] focus:cqa-border-[#EF4444] focus:cqa-ring-1 focus:cqa-ring-[#EF4444]': hasError,\n 'cqa-bg-[#F9FAFB] cqa-cursor-not-allowed cqa-text-[#9CA3AF]': disabled,\n 'cqa-outline-none': true\n }\"\n [ngClass]=\"textareaSizeClasses\"\n [ngClass]=\"resizeClass\"\n [style]=\"textareaStyles\"\n [placeholder]=\"placeholder\"\n [value]=\"textareaValue\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n [disabled]=\"disabled\"\n [attr.rows]=\"rows\"\n [attr.cols]=\"cols\"\n [attr.maxlength]=\"maxLength\"\n [attr.aria-label]=\"ariaLabel || label\"\n [attr.aria-invalid]=\"hasError\"\n [attr.aria-required]=\"required\"\n ></textarea>\n </div>\n\n <div *ngIf=\"showCharCount && maxLength\" class=\"cqa-flex cqa-justify-end cqa-mt-1\">\n <span class=\"cqa-text-xs cqa-text-[#6B7280]\">\n {{ textareaValue.length }}/{{ maxLength }}\n </span>\n </div>\n\n <div *ngIf=\"hasError\" class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-mt-1.5\">\n <div *ngFor=\"let error of errors\" class=\"cqa-flex cqa-items-start cqa-gap-1.5\">\n <svg \n xmlns=\"http://www.w3.org/2000/svg\" \n width=\"14\" \n height=\"14\" \n viewBox=\"0 0 14 14\" \n fill=\"none\"\n class=\"cqa-flex-shrink-0 cqa-mt-0.5\">\n <path d=\"M7 1.75C4.1 1.75 1.75 4.1 1.75 7C1.75 9.9 4.1 12.25 7 12.25C9.9 12.25 12.25 9.9 12.25 7C12.25 4.1 9.9 1.75 7 1.75ZM7 9.625C6.65625 9.625 6.375 9.34375 6.375 9V7C6.375 6.65625 6.65625 6.375 7 6.375C7.34375 6.375 7.625 6.65625 7.625 7V9C7.625 9.34375 7.34375 9.625 7 9.625ZM7.625 5.25H6.375V4H7.625V5.25Z\" fill=\"#EF4444\"/>\n </svg>\n <span class=\"cqa-text-xs cqa-text-[#EF4444] cqa-font-medium cqa-leading-[18px]\">\n {{ error }}\n </span>\n </div>\n </div>\n </div>\n</div>\n\n", styles: [] }]
107
+ args: [{ selector: 'cqa-custom-textarea', host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-ui-root\" [style.display]=\"'block'\" [style.width]=\"fullWidth ? '100%' : 'auto'\">\n <div class=\"cqa-flex cqa-flex-col\" [style.width]=\"fullWidth ? '100%' : 'auto'\">\n <label \n *ngIf=\"label\"\n class=\"cqa-font-medium cqa-text-[#374151]\"\n [ngClass]=\"labelSizeClasses\"\n [style]=\"labelStyles\">\n {{ label }}\n <span *ngIf=\"required\" class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n\n <div class=\"cqa-relative\" [style.width]=\"fullWidth ? '100%' : 'auto'\">\n <textarea\n class=\"cqa-w-full !cqa-border !cqa-border-solid !cqa-border-gray-200 cqa-rounded-md cqa-bg-white cqa-font-['SF_Pro_Text'] cqa-font-normal cqa-leading-normal cqa-tracking-normal cqa-text-[#0A0A0A] placeholder:cqa-text-[#9CA3AF] cqa-transition-all cqa-duration-200 cqa-outline-none\"\n [ngClass]=\"{\n 'cqa-border-[#D1D5DB] focus:cqa-border-[#3B82F6] focus:cqa-ring-1 focus:cqa-ring-[#3B82F6]': !hasError,\n 'cqa-border-[#EF4444] focus:cqa-border-[#EF4444] focus:cqa-ring-1 focus:cqa-ring-[#EF4444]': hasError,\n 'cqa-bg-[#F9FAFB] cqa-cursor-not-allowed cqa-text-[#9CA3AF]': disabled,\n 'cqa-outline-none': true\n }\"\n [ngClass]=\"textareaSizeClasses\"\n [ngClass]=\"resizeClass\"\n [ngClass]=\"customClass\"\n [style]=\"textareaStyles\"\n [placeholder]=\"placeholder\"\n [value]=\"textareaValue\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n [disabled]=\"disabled\"\n [attr.rows]=\"rows\"\n [attr.cols]=\"cols\"\n [attr.maxlength]=\"maxLength\"\n [attr.aria-label]=\"ariaLabel || label\"\n [attr.aria-invalid]=\"hasError\"\n [attr.aria-required]=\"required\"\n ></textarea>\n </div>\n\n <div *ngIf=\"showCharCount && maxLength\" class=\"cqa-flex cqa-justify-end cqa-mt-1\">\n <span class=\"cqa-text-xs cqa-text-[#6B7280]\">\n {{ textareaValue.length }}/{{ maxLength }}\n </span>\n </div>\n\n <div *ngIf=\"hasError\" class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-mt-1.5\">\n <div *ngFor=\"let error of errors\" class=\"cqa-flex cqa-items-start cqa-gap-1.5\">\n <svg \n xmlns=\"http://www.w3.org/2000/svg\" \n width=\"14\" \n height=\"14\" \n viewBox=\"0 0 14 14\" \n fill=\"none\"\n class=\"cqa-flex-shrink-0 cqa-mt-0.5\">\n <path d=\"M7 1.75C4.1 1.75 1.75 4.1 1.75 7C1.75 9.9 4.1 12.25 7 12.25C9.9 12.25 12.25 9.9 12.25 7C12.25 4.1 9.9 1.75 7 1.75ZM7 9.625C6.65625 9.625 6.375 9.34375 6.375 9V7C6.375 6.65625 6.65625 6.375 7 6.375C7.34375 6.375 7.625 6.65625 7.625 7V9C7.625 9.34375 7.34375 9.625 7 9.625ZM7.625 5.25H6.375V4H7.625V5.25Z\" fill=\"#EF4444\"/>\n </svg>\n <span class=\"cqa-text-xs cqa-text-[#EF4444] cqa-font-medium cqa-leading-[18px]\">\n {{ error }}\n </span>\n </div>\n </div>\n </div>\n</div>\n\n", styles: [] }]
107
108
  }], propDecorators: { label: [{
108
109
  type: Input
109
110
  }], placeholder: [{
@@ -136,6 +137,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
136
137
  type: Input
137
138
  }], labelInlineStyle: [{
138
139
  type: Input
140
+ }], customClass: [{
141
+ type: Input
139
142
  }], valueChange: [{
140
143
  type: Output
141
144
  }], blurred: [{
@@ -143,4 +146,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
143
146
  }], focused: [{
144
147
  type: Output
145
148
  }] } });
146
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXRleHRhcmVhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY3VzdG9tLXRleHRhcmVhL2N1c3RvbS10ZXh0YXJlYS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2N1c3RvbS10ZXh0YXJlYS9jdXN0b20tdGV4dGFyZWEuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7OztBQVVqRyxNQUFNLE9BQU8sdUJBQXVCO0lBTnBDO1FBUVcsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUVYLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBRWpCLFVBQUssR0FBRyxFQUFFLENBQUM7UUFFWCxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWpCLFdBQU0sR0FBYSxFQUFFLENBQUM7UUFFdEIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBRWYsU0FBSSxHQUFpQixJQUFJLENBQUM7UUFFMUIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUlsQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQU10QixXQUFNLEdBQWdELFVBQVUsQ0FBQztRQU1oRSxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFFekMsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFjLENBQUM7UUFFekMsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFjLENBQUM7UUFFbkQsa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFDbkIsY0FBUyxHQUFHLEtBQUssQ0FBQztLQTZGbkI7SUEzRkMsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLEtBQUssU0FBUyxF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QixJQUFJLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDO0lBQ3JDLENBQUM7O29IQXJJVSx1QkFBdUI7d0dBQXZCLHVCQUF1Qixza0JDVnBDLDQ3RkErREE7MkZEckRhLHVCQUF1QjtrQkFObkMsU0FBUzsrQkFDRSxxQkFBcUIsUUFHekIsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFOzhCQUlyQixLQUFLO3NCQUFiLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSztnQkFFRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxNQUFNO3NCQUFkLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVHLElBQUk7c0JBQVosS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsYUFBYTtzQkFBckIsS0FBSztnQkFFRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRUcsSUFBSTtzQkFBWixLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFFRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBRUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBRUcsT0FBTztzQkFBaEIsTUFBTTtnQkFFRyxPQUFPO3NCQUFoQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG50eXBlIFRleHRhcmVhU2l6ZSA9ICdzbScgfCAnbWQnIHwgJ2xnJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLWN1c3RvbS10ZXh0YXJlYScsXG4gIHRlbXBsYXRlVXJsOiAnLi9jdXN0b20tdGV4dGFyZWEuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtdLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH1cbn0pXG5leHBvcnQgY2xhc3MgQ3VzdG9tVGV4dGFyZWFDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuXG4gIEBJbnB1dCgpIGxhYmVsID0gJyc7XG5cbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnJztcblxuICBASW5wdXQoKSB2YWx1ZSA9ICcnO1xuXG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgQElucHV0KCkgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIEBJbnB1dCgpIHJlcXVpcmVkID0gZmFsc2U7XG5cbiAgQElucHV0KCkgYXJpYUxhYmVsID0gJyc7XG5cbiAgQElucHV0KCkgc2l6ZTogVGV4dGFyZWFTaXplID0gJ21kJztcblxuICBASW5wdXQoKSBmdWxsV2lkdGggPSBmYWxzZTtcblxuICBASW5wdXQoKSBtYXhMZW5ndGg/OiBudW1iZXI7XG5cbiAgQElucHV0KCkgc2hvd0NoYXJDb3VudCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHJvd3M/OiBudW1iZXI7XG5cbiAgQElucHV0KCkgY29scz86IG51bWJlcjtcblxuICBASW5wdXQoKSByZXNpemU6ICdub25lJyB8ICdib3RoJyB8ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCcgPSAndmVydGljYWwnO1xuXG4gIEBJbnB1dCgpIHRleHRhcmVhSW5saW5lU3R5bGU/OiBzdHJpbmc7XG5cbiAgQElucHV0KCkgbGFiZWxJbmxpbmVTdHlsZT86IHN0cmluZztcblxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBAT3V0cHV0KCkgYmx1cnJlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4oKTtcblxuICBAT3V0cHV0KCkgZm9jdXNlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4oKTtcblxuICB0ZXh0YXJlYVZhbHVlID0gJyc7XG4gIGlzRm9jdXNlZCA9IGZhbHNlO1xuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1sndmFsdWUnXSAmJiBjaGFuZ2VzWyd2YWx1ZSddLmN1cnJlbnRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsZXQgbmV3VmFsdWUgPSBjaGFuZ2VzWyd2YWx1ZSddLmN1cnJlbnRWYWx1ZSA/PyAnJztcbiAgICAgIFxuICAgICAgaWYgKHRoaXMubWF4TGVuZ3RoICYmIG5ld1ZhbHVlLmxlbmd0aCA+IHRoaXMubWF4TGVuZ3RoKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gbmV3VmFsdWUuc3Vic3RyaW5nKDAsIHRoaXMubWF4TGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKG5ld1ZhbHVlICE9PSB0aGlzLnRleHRhcmVhVmFsdWUpIHtcbiAgICAgICAgdGhpcy50ZXh0YXJlYVZhbHVlID0gbmV3VmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IGhhc0Vycm9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVycm9ycyAmJiB0aGlzLmVycm9ycy5sZW5ndGggPiAwO1xuICB9XG5cbiAgZ2V0IHRleHRhcmVhU2l6ZUNsYXNzZXMoKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHRoaXMuc2l6ZSkge1xuICAgICAgY2FzZSAnc20nOlxuICAgICAgICByZXR1cm4gJ2NxYS1weC0zIGNxYS1weS0yIGNxYS10ZXh0LXhzJztcbiAgICAgIGNhc2UgJ21kJzpcbiAgICAgICAgcmV0dXJuICdjcWEtcHgtNCBjcWEtcHktMi41IGNxYS10ZXh0LXNtJztcbiAgICAgIGNhc2UgJ2xnJzpcbiAgICAgICAgcmV0dXJuICdjcWEtcHgtNSBjcWEtcHktMyBjcWEtdGV4dC1iYXNlJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnY3FhLXB4LTQgY3FhLXB5LTIuNSBjcWEtdGV4dC1zbSc7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGxhYmVsU2l6ZUNsYXNzZXMoKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHRoaXMuc2l6ZSkge1xuICAgICAgY2FzZSAnc20nOlxuICAgICAgICByZXR1cm4gJ2NxYS10ZXh0LXhzIGNxYS1tYi0xJztcbiAgICAgIGNhc2UgJ21kJzpcbiAgICAgICAgcmV0dXJuICdjcWEtdGV4dC1zbSBjcWEtbWItMS41JztcbiAgICAgIGNhc2UgJ2xnJzpcbiAgICAgICAgcmV0dXJuICdjcWEtdGV4dC1iYXNlIGNxYS1tYi0yJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnY3FhLXRleHQtc20gY3FhLW1iLTEuNSc7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJlc2l6ZUNsYXNzKCk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0aGlzLnJlc2l6ZSkge1xuICAgICAgY2FzZSAnbm9uZSc6XG4gICAgICAgIHJldHVybiAnY3FhLXJlc2l6ZS1ub25lJztcbiAgICAgIGNhc2UgJ2JvdGgnOlxuICAgICAgICByZXR1cm4gJ2NxYS1yZXNpemUnO1xuICAgICAgY2FzZSAnaG9yaXpvbnRhbCc6XG4gICAgICAgIHJldHVybiAnY3FhLXJlc2l6ZS14JztcbiAgICAgIGNhc2UgJ3ZlcnRpY2FsJzpcbiAgICAgICAgcmV0dXJuICdjcWEtcmVzaXplLXknO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdjcWEtcmVzaXplLXknO1xuICAgIH1cbiAgfVxuXG4gIG9uSW5wdXQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQgfCBudWxsO1xuICAgIGxldCBuZXh0VmFsdWUgPSB0YXJnZXQ/LnZhbHVlID8/ICcnO1xuICAgIFxuICAgIGlmICh0aGlzLnNob3dDaGFyQ291bnQgJiYgdGhpcy5tYXhMZW5ndGggJiYgbmV4dFZhbHVlLmxlbmd0aCA+IHRoaXMubWF4TGVuZ3RoKSB7XG4gICAgICBuZXh0VmFsdWUgPSBuZXh0VmFsdWUuc3Vic3RyaW5nKDAsIHRoaXMubWF4TGVuZ3RoKTtcbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgdGFyZ2V0LnZhbHVlID0gbmV4dFZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICB0aGlzLnRleHRhcmVhVmFsdWUgPSBuZXh0VmFsdWU7XG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudGV4dGFyZWFWYWx1ZSk7XG4gIH1cblxuICBvbkZvY3VzKGV2ZW50OiBGb2N1c0V2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5pc0ZvY3VzZWQgPSB0cnVlO1xuICAgIHRoaXMuZm9jdXNlZC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG9uQmx1cihldmVudDogRm9jdXNFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5ibHVycmVkLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgZ2V0IHRleHRhcmVhU3R5bGVzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGV4dGFyZWFJbmxpbmVTdHlsZSB8fCAnJztcbiAgfVxuXG4gIGdldCBsYWJlbFN0eWxlcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxhYmVsSW5saW5lU3R5bGUgfHwgJyc7XG4gIH1cbn1cblxuIiwiPGRpdiBjbGFzcz1cImNxYS11aS1yb290XCIgW3N0eWxlLmRpc3BsYXldPVwiJ2Jsb2NrJ1wiIFtzdHlsZS53aWR0aF09XCJmdWxsV2lkdGggPyAnMTAwJScgOiAnYXV0bydcIj5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbFwiIFtzdHlsZS53aWR0aF09XCJmdWxsV2lkdGggPyAnMTAwJScgOiAnYXV0bydcIj5cbiAgICA8bGFiZWwgXG4gICAgICAqbmdJZj1cImxhYmVsXCJcbiAgICAgIGNsYXNzPVwiY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMzc0MTUxXVwiXG4gICAgICBbbmdDbGFzc109XCJsYWJlbFNpemVDbGFzc2VzXCJcbiAgICAgIFtzdHlsZV09XCJsYWJlbFN0eWxlc1wiPlxuICAgICAge3sgbGFiZWwgfX1cbiAgICAgIDxzcGFuICpuZ0lmPVwicmVxdWlyZWRcIiBjbGFzcz1cImNxYS10ZXh0LVsjRUY0NDQ0XSBjcWEtbWwtMC41XCI+Kjwvc3Bhbj5cbiAgICA8L2xhYmVsPlxuXG4gICAgPGRpdiBjbGFzcz1cImNxYS1yZWxhdGl2ZVwiIFtzdHlsZS53aWR0aF09XCJmdWxsV2lkdGggPyAnMTAwJScgOiAnYXV0bydcIj5cbiAgICAgIDx0ZXh0YXJlYVxuICAgICAgICBjbGFzcz1cImNxYS13LWZ1bGwgIWNxYS1ib3JkZXIgIWNxYS1ib3JkZXItc29saWQgIWNxYS1ib3JkZXItZ3JheS0yMDAgY3FhLXJvdW5kZWQtbWQgY3FhLWJnLXdoaXRlIGNxYS1mb250LVsnU0ZfUHJvX1RleHQnXSBjcWEtZm9udC1ub3JtYWwgY3FhLWxlYWRpbmctbm9ybWFsIGNxYS10cmFja2luZy1ub3JtYWwgY3FhLXRleHQtWyMwQTBBMEFdIHBsYWNlaG9sZGVyOmNxYS10ZXh0LVsjOUNBM0FGXSBjcWEtdHJhbnNpdGlvbi1hbGwgY3FhLWR1cmF0aW9uLTIwMCBjcWEtb3V0bGluZS1ub25lXCJcbiAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICdjcWEtYm9yZGVyLVsjRDFENURCXSBmb2N1czpjcWEtYm9yZGVyLVsjM0I4MkY2XSBmb2N1czpjcWEtcmluZy0xIGZvY3VzOmNxYS1yaW5nLVsjM0I4MkY2XSc6ICFoYXNFcnJvcixcbiAgICAgICAgICAnY3FhLWJvcmRlci1bI0VGNDQ0NF0gZm9jdXM6Y3FhLWJvcmRlci1bI0VGNDQ0NF0gZm9jdXM6Y3FhLXJpbmctMSBmb2N1czpjcWEtcmluZy1bI0VGNDQ0NF0nOiBoYXNFcnJvcixcbiAgICAgICAgICAnY3FhLWJnLVsjRjlGQUZCXSBjcWEtY3Vyc29yLW5vdC1hbGxvd2VkIGNxYS10ZXh0LVsjOUNBM0FGXSc6IGRpc2FibGVkLFxuICAgICAgICAgICdjcWEtb3V0bGluZS1ub25lJzogdHJ1ZVxuICAgICAgICB9XCJcbiAgICAgICAgW25nQ2xhc3NdPVwidGV4dGFyZWFTaXplQ2xhc3Nlc1wiXG4gICAgICAgIFtuZ0NsYXNzXT1cInJlc2l6ZUNsYXNzXCJcbiAgICAgICAgW3N0eWxlXT1cInRleHRhcmVhU3R5bGVzXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgW3ZhbHVlXT1cInRleHRhcmVhVmFsdWVcIlxuICAgICAgICAoaW5wdXQpPVwib25JbnB1dCgkZXZlbnQpXCJcbiAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoJGV2ZW50KVwiXG4gICAgICAgIChibHVyKT1cIm9uQmx1cigkZXZlbnQpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW2F0dHIucm93c109XCJyb3dzXCJcbiAgICAgICAgW2F0dHIuY29sc109XCJjb2xzXCJcbiAgICAgICAgW2F0dHIubWF4bGVuZ3RoXT1cIm1heExlbmd0aFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsIHx8IGxhYmVsXCJcbiAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImhhc0Vycm9yXCJcbiAgICAgICAgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICA+PC90ZXh0YXJlYT5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9XCJzaG93Q2hhckNvdW50ICYmIG1heExlbmd0aFwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWp1c3RpZnktZW5kIGNxYS1tdC0xXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjNkI3MjgwXVwiPlxuICAgICAgICB7eyB0ZXh0YXJlYVZhbHVlLmxlbmd0aCB9fS97eyBtYXhMZW5ndGggfX1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9XCJoYXNFcnJvclwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMSBjcWEtbXQtMS41XCI+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBlcnJvciBvZiBlcnJvcnNcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1zdGFydCBjcWEtZ2FwLTEuNVwiPlxuICAgICAgICA8c3ZnIFxuICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBcbiAgICAgICAgICB3aWR0aD1cIjE0XCIgXG4gICAgICAgICAgaGVpZ2h0PVwiMTRcIiBcbiAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE0IDE0XCIgXG4gICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXgtc2hyaW5rLTAgY3FhLW10LTAuNVwiPlxuICAgICAgICAgIDxwYXRoIGQ9XCJNNyAxLjc1QzQuMSAxLjc1IDEuNzUgNC4xIDEuNzUgN0MxLjc1IDkuOSA0LjEgMTIuMjUgNyAxMi4yNUM5LjkgMTIuMjUgMTIuMjUgOS45IDEyLjI1IDdDMTIuMjUgNC4xIDkuOSAxLjc1IDcgMS43NVpNNyA5LjYyNUM2LjY1NjI1IDkuNjI1IDYuMzc1IDkuMzQzNzUgNi4zNzUgOVY3QzYuMzc1IDYuNjU2MjUgNi42NTYyNSA2LjM3NSA3IDYuMzc1QzcuMzQzNzUgNi4zNzUgNy42MjUgNi42NTYyNSA3LjYyNSA3VjlDNy42MjUgOS4zNDM3NSA3LjM0Mzc1IDkuNjI1IDcgOS42MjVaTTcuNjI1IDUuMjVINi4zNzVWNEg3LjYyNVY1LjI1WlwiIGZpbGw9XCIjRUY0NDQ0XCIvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC14cyBjcWEtdGV4dC1bI0VGNDQ0NF0gY3FhLWZvbnQtbWVkaXVtIGNxYS1sZWFkaW5nLVsxOHB4XVwiPlxuICAgICAgICAgIHt7IGVycm9yIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG4iXX0=
149
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXRleHRhcmVhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY3VzdG9tLXRleHRhcmVhL2N1c3RvbS10ZXh0YXJlYS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2N1c3RvbS10ZXh0YXJlYS9jdXN0b20tdGV4dGFyZWEuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7OztBQVVqRyxNQUFNLE9BQU8sdUJBQXVCO0lBTnBDO1FBUVcsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUVYLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBRWpCLFVBQUssR0FBRyxFQUFFLENBQUM7UUFFWCxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWpCLFdBQU0sR0FBYSxFQUFFLENBQUM7UUFFdEIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBRWYsU0FBSSxHQUFpQixJQUFJLENBQUM7UUFFMUIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUlsQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQU10QixXQUFNLEdBQWdELFVBQVUsQ0FBQztRQU1qRSxnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUVoQixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFFekMsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFjLENBQUM7UUFFekMsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFjLENBQUM7UUFFbkQsa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFDbkIsY0FBUyxHQUFHLEtBQUssQ0FBQztLQTZGbkI7SUEzRkMsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxPQUFP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O1FBQ2hCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixJQUFJLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDO0lBQ3JDLENBQUM7O29IQXZJVSx1QkFBdUI7d0dBQXZCLHVCQUF1QixrbUJDVnBDLCs5RkFnRUE7MkZEdERhLHVCQUF1QjtrQkFObkMsU0FBUzsrQkFDRSxxQkFBcUIsUUFHekIsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFOzhCQUlyQixLQUFLO3NCQUFiLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSztnQkFFRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxNQUFNO3NCQUFkLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVHLElBQUk7c0JBQVosS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsYUFBYTtzQkFBckIsS0FBSztnQkFFRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRUcsSUFBSTtzQkFBWixLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFFRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBRUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUksV0FBVztzQkFBcEIsTUFBTTtnQkFFRyxPQUFPO3NCQUFoQixNQUFNO2dCQUVHLE9BQU87c0JBQWhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbnR5cGUgVGV4dGFyZWFTaXplID0gJ3NtJyB8ICdtZCcgfCAnbGcnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtY3VzdG9tLXRleHRhcmVhJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2N1c3RvbS10ZXh0YXJlYS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW10sXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfVxufSlcbmV4cG9ydCBjbGFzcyBDdXN0b21UZXh0YXJlYUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG5cbiAgQElucHV0KCkgbGFiZWwgPSAnJztcblxuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICcnO1xuXG4gIEBJbnB1dCgpIHZhbHVlID0gJyc7XG5cbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcblxuICBASW5wdXQoKSBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgQElucHV0KCkgcmVxdWlyZWQgPSBmYWxzZTtcblxuICBASW5wdXQoKSBhcmlhTGFiZWwgPSAnJztcblxuICBASW5wdXQoKSBzaXplOiBUZXh0YXJlYVNpemUgPSAnbWQnO1xuXG4gIEBJbnB1dCgpIGZ1bGxXaWR0aCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIG1heExlbmd0aD86IG51bWJlcjtcblxuICBASW5wdXQoKSBzaG93Q2hhckNvdW50ID0gZmFsc2U7XG5cbiAgQElucHV0KCkgcm93cz86IG51bWJlcjtcblxuICBASW5wdXQoKSBjb2xzPzogbnVtYmVyO1xuXG4gIEBJbnB1dCgpIHJlc2l6ZTogJ25vbmUnIHwgJ2JvdGgnIHwgJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJyA9ICd2ZXJ0aWNhbCc7XG5cbiAgQElucHV0KCkgdGV4dGFyZWFJbmxpbmVTdHlsZT86IHN0cmluZztcblxuICBASW5wdXQoKSBsYWJlbElubGluZVN0eWxlPzogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIGN1c3RvbUNsYXNzID0gJyc7XG5cbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgQE91dHB1dCgpIGJsdXJyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+KCk7XG5cbiAgQE91dHB1dCgpIGZvY3VzZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+KCk7XG5cbiAgdGV4dGFyZWFWYWx1ZSA9ICcnO1xuICBpc0ZvY3VzZWQgPSBmYWxzZTtcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ3ZhbHVlJ10gJiYgY2hhbmdlc1sndmFsdWUnXS5jdXJyZW50VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbGV0IG5ld1ZhbHVlID0gY2hhbmdlc1sndmFsdWUnXS5jdXJyZW50VmFsdWUgPz8gJyc7XG4gICAgICBcbiAgICAgIGlmICh0aGlzLm1heExlbmd0aCAmJiBuZXdWYWx1ZS5sZW5ndGggPiB0aGlzLm1heExlbmd0aCkge1xuICAgICAgICBuZXdWYWx1ZSA9IG5ld1ZhbHVlLnN1YnN0cmluZygwLCB0aGlzLm1heExlbmd0aCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmIChuZXdWYWx1ZSAhPT0gdGhpcy50ZXh0YXJlYVZhbHVlKSB7XG4gICAgICAgIHRoaXMudGV4dGFyZWFWYWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBoYXNFcnJvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lcnJvcnMgJiYgdGhpcy5lcnJvcnMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGdldCB0ZXh0YXJlYVNpemVDbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0aGlzLnNpemUpIHtcbiAgICAgIGNhc2UgJ3NtJzpcbiAgICAgICAgcmV0dXJuICdjcWEtcHgtMyBjcWEtcHktMiBjcWEtdGV4dC14cyc7XG4gICAgICBjYXNlICdtZCc6XG4gICAgICAgIHJldHVybiAnY3FhLXB4LTQgY3FhLXB5LTIuNSBjcWEtdGV4dC1zbSc7XG4gICAgICBjYXNlICdsZyc6XG4gICAgICAgIHJldHVybiAnY3FhLXB4LTUgY3FhLXB5LTMgY3FhLXRleHQtYmFzZSc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2NxYS1weC00IGNxYS1weS0yLjUgY3FhLXRleHQtc20nO1xuICAgIH1cbiAgfVxuXG4gIGdldCBsYWJlbFNpemVDbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0aGlzLnNpemUpIHtcbiAgICAgIGNhc2UgJ3NtJzpcbiAgICAgICAgcmV0dXJuICdjcWEtdGV4dC14cyBjcWEtbWItMSc7XG4gICAgICBjYXNlICdtZCc6XG4gICAgICAgIHJldHVybiAnY3FhLXRleHQtc20gY3FhLW1iLTEuNSc7XG4gICAgICBjYXNlICdsZyc6XG4gICAgICAgIHJldHVybiAnY3FhLXRleHQtYmFzZSBjcWEtbWItMic7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2NxYS10ZXh0LXNtIGNxYS1tYi0xLjUnO1xuICAgIH1cbiAgfVxuXG4gIGdldCByZXNpemVDbGFzcygpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAodGhpcy5yZXNpemUpIHtcbiAgICAgIGNhc2UgJ25vbmUnOlxuICAgICAgICByZXR1cm4gJ2NxYS1yZXNpemUtbm9uZSc7XG4gICAgICBjYXNlICdib3RoJzpcbiAgICAgICAgcmV0dXJuICdjcWEtcmVzaXplJztcbiAgICAgIGNhc2UgJ2hvcml6b250YWwnOlxuICAgICAgICByZXR1cm4gJ2NxYS1yZXNpemUteCc7XG4gICAgICBjYXNlICd2ZXJ0aWNhbCc6XG4gICAgICAgIHJldHVybiAnY3FhLXJlc2l6ZS15JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnY3FhLXJlc2l6ZS15JztcbiAgICB9XG4gIH1cblxuICBvbklucHV0KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MVGV4dEFyZWFFbGVtZW50IHwgbnVsbDtcbiAgICBsZXQgbmV4dFZhbHVlID0gdGFyZ2V0Py52YWx1ZSA/PyAnJztcbiAgICBcbiAgICBpZiAodGhpcy5zaG93Q2hhckNvdW50ICYmIHRoaXMubWF4TGVuZ3RoICYmIG5leHRWYWx1ZS5sZW5ndGggPiB0aGlzLm1heExlbmd0aCkge1xuICAgICAgbmV4dFZhbHVlID0gbmV4dFZhbHVlLnN1YnN0cmluZygwLCB0aGlzLm1heExlbmd0aCk7XG4gICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIHRhcmdldC52YWx1ZSA9IG5leHRWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgdGhpcy50ZXh0YXJlYVZhbHVlID0gbmV4dFZhbHVlO1xuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnRleHRhcmVhVmFsdWUpO1xuICB9XG5cbiAgb25Gb2N1cyhldmVudDogRm9jdXNFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcbiAgICB0aGlzLmZvY3VzZWQuZW1pdChldmVudCk7XG4gIH1cblxuICBvbkJsdXIoZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmlzRm9jdXNlZCA9IGZhbHNlO1xuICAgIHRoaXMuYmx1cnJlZC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIGdldCB0ZXh0YXJlYVN0eWxlcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRleHRhcmVhSW5saW5lU3R5bGUgfHwgJyc7XG4gIH1cblxuICBnZXQgbGFiZWxTdHlsZXMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5sYWJlbElubGluZVN0eWxlIHx8ICcnO1xuICB9XG59XG5cbiIsIjxkaXYgY2xhc3M9XCJjcWEtdWktcm9vdFwiIFtzdHlsZS5kaXNwbGF5XT1cIidibG9jaydcIiBbc3R5bGUud2lkdGhdPVwiZnVsbFdpZHRoID8gJzEwMCUnIDogJ2F1dG8nXCI+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2xcIiBbc3R5bGUud2lkdGhdPVwiZnVsbFdpZHRoID8gJzEwMCUnIDogJ2F1dG8nXCI+XG4gICAgPGxhYmVsIFxuICAgICAgKm5nSWY9XCJsYWJlbFwiXG4gICAgICBjbGFzcz1cImNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzM3NDE1MV1cIlxuICAgICAgW25nQ2xhc3NdPVwibGFiZWxTaXplQ2xhc3Nlc1wiXG4gICAgICBbc3R5bGVdPVwibGFiZWxTdHlsZXNcIj5cbiAgICAgIHt7IGxhYmVsIH19XG4gICAgICA8c3BhbiAqbmdJZj1cInJlcXVpcmVkXCIgY2xhc3M9XCJjcWEtdGV4dC1bI0VGNDQ0NF0gY3FhLW1sLTAuNVwiPio8L3NwYW4+XG4gICAgPC9sYWJlbD5cblxuICAgIDxkaXYgY2xhc3M9XCJjcWEtcmVsYXRpdmVcIiBbc3R5bGUud2lkdGhdPVwiZnVsbFdpZHRoID8gJzEwMCUnIDogJ2F1dG8nXCI+XG4gICAgICA8dGV4dGFyZWFcbiAgICAgICAgY2xhc3M9XCJjcWEtdy1mdWxsICFjcWEtYm9yZGVyICFjcWEtYm9yZGVyLXNvbGlkICFjcWEtYm9yZGVyLWdyYXktMjAwIGNxYS1yb3VuZGVkLW1kIGNxYS1iZy13aGl0ZSBjcWEtZm9udC1bJ1NGX1Byb19UZXh0J10gY3FhLWZvbnQtbm9ybWFsIGNxYS1sZWFkaW5nLW5vcm1hbCBjcWEtdHJhY2tpbmctbm9ybWFsIGNxYS10ZXh0LVsjMEEwQTBBXSBwbGFjZWhvbGRlcjpjcWEtdGV4dC1bIzlDQTNBRl0gY3FhLXRyYW5zaXRpb24tYWxsIGNxYS1kdXJhdGlvbi0yMDAgY3FhLW91dGxpbmUtbm9uZVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAnY3FhLWJvcmRlci1bI0QxRDVEQl0gZm9jdXM6Y3FhLWJvcmRlci1bIzNCODJGNl0gZm9jdXM6Y3FhLXJpbmctMSBmb2N1czpjcWEtcmluZy1bIzNCODJGNl0nOiAhaGFzRXJyb3IsXG4gICAgICAgICAgJ2NxYS1ib3JkZXItWyNFRjQ0NDRdIGZvY3VzOmNxYS1ib3JkZXItWyNFRjQ0NDRdIGZvY3VzOmNxYS1yaW5nLTEgZm9jdXM6Y3FhLXJpbmctWyNFRjQ0NDRdJzogaGFzRXJyb3IsXG4gICAgICAgICAgJ2NxYS1iZy1bI0Y5RkFGQl0gY3FhLWN1cnNvci1ub3QtYWxsb3dlZCBjcWEtdGV4dC1bIzlDQTNBRl0nOiBkaXNhYmxlZCxcbiAgICAgICAgICAnY3FhLW91dGxpbmUtbm9uZSc6IHRydWVcbiAgICAgICAgfVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInRleHRhcmVhU2l6ZUNsYXNzZXNcIlxuICAgICAgICBbbmdDbGFzc109XCJyZXNpemVDbGFzc1wiXG4gICAgICAgIFtuZ0NsYXNzXT1cImN1c3RvbUNsYXNzXCJcbiAgICAgICAgW3N0eWxlXT1cInRleHRhcmVhU3R5bGVzXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgW3ZhbHVlXT1cInRleHRhcmVhVmFsdWVcIlxuICAgICAgICAoaW5wdXQpPVwib25JbnB1dCgkZXZlbnQpXCJcbiAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoJGV2ZW50KVwiXG4gICAgICAgIChibHVyKT1cIm9uQmx1cigkZXZlbnQpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW2F0dHIucm93c109XCJyb3dzXCJcbiAgICAgICAgW2F0dHIuY29sc109XCJjb2xzXCJcbiAgICAgICAgW2F0dHIubWF4bGVuZ3RoXT1cIm1heExlbmd0aFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsIHx8IGxhYmVsXCJcbiAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImhhc0Vycm9yXCJcbiAgICAgICAgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICA+PC90ZXh0YXJlYT5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9XCJzaG93Q2hhckNvdW50ICYmIG1heExlbmd0aFwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWp1c3RpZnktZW5kIGNxYS1tdC0xXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjNkI3MjgwXVwiPlxuICAgICAgICB7eyB0ZXh0YXJlYVZhbHVlLmxlbmd0aCB9fS97eyBtYXhMZW5ndGggfX1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9XCJoYXNFcnJvclwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMSBjcWEtbXQtMS41XCI+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBlcnJvciBvZiBlcnJvcnNcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1zdGFydCBjcWEtZ2FwLTEuNVwiPlxuICAgICAgICA8c3ZnIFxuICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBcbiAgICAgICAgICB3aWR0aD1cIjE0XCIgXG4gICAgICAgICAgaGVpZ2h0PVwiMTRcIiBcbiAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE0IDE0XCIgXG4gICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXgtc2hyaW5rLTAgY3FhLW10LTAuNVwiPlxuICAgICAgICAgIDxwYXRoIGQ9XCJNNyAxLjc1QzQuMSAxLjc1IDEuNzUgNC4xIDEuNzUgN0MxLjc1IDkuOSA0LjEgMTIuMjUgNyAxMi4yNUM5LjkgMTIuMjUgMTIuMjUgOS45IDEyLjI1IDdDMTIuMjUgNC4xIDkuOSAxLjc1IDcgMS43NVpNNyA5LjYyNUM2LjY1NjI1IDkuNjI1IDYuMzc1IDkuMzQzNzUgNi4zNzUgOVY3QzYuMzc1IDYuNjU2MjUgNi42NTYyNSA2LjM3NSA3IDYuMzc1QzcuMzQzNzUgNi4zNzUgNy42MjUgNi42NTYyNSA3LjYyNSA3VjlDNy42MjUgOS4zNDM3NSA3LjM0Mzc1IDkuNjI1IDcgOS42MjVaTTcuNjI1IDUuMjVINi4zNzVWNEg3LjYyNVY1LjI1WlwiIGZpbGw9XCIjRUY0NDQ0XCIvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC14cyBjcWEtdGV4dC1bI0VGNDQ0NF0gY3FhLWZvbnQtbWVkaXVtIGNxYS1sZWFkaW5nLVsxOHB4XVwiPlxuICAgICAgICAgIHt7IGVycm9yIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG4iXX0=
@@ -0,0 +1,35 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class CustomToggleComponent {
4
+ constructor() {
5
+ this.checked = false;
6
+ this.disabled = false;
7
+ this.ariaLabel = '';
8
+ this.checkedChange = new EventEmitter();
9
+ this.change = new EventEmitter();
10
+ }
11
+ onToggle() {
12
+ if (!this.disabled) {
13
+ this.checked = !this.checked;
14
+ this.checkedChange.emit(this.checked);
15
+ this.change.emit(this.checked);
16
+ }
17
+ }
18
+ }
19
+ CustomToggleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: CustomToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
20
+ CustomToggleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: CustomToggleComponent, selector: "cqa-custom-toggle", inputs: { checked: "checked", disabled: "disabled", ariaLabel: "ariaLabel" }, outputs: { checkedChange: "checkedChange", change: "change" }, host: { classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div class=\"cqa-ui-root\">\n <button\n type=\"button\"\n class=\"cqa-custom-toggle\"\n [class.cqa-toggle-checked]=\"checked\"\n [class.cqa-toggle-disabled]=\"disabled\"\n [disabled]=\"disabled\"\n (click)=\"onToggle()\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-checked]=\"checked\"\n role=\"switch\">\n <span class=\"cqa-toggle-slider\"></span>\n </button>\n</div>\n\n" });
21
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: CustomToggleComponent, decorators: [{
22
+ type: Component,
23
+ args: [{ selector: 'cqa-custom-toggle', host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-ui-root\">\n <button\n type=\"button\"\n class=\"cqa-custom-toggle\"\n [class.cqa-toggle-checked]=\"checked\"\n [class.cqa-toggle-disabled]=\"disabled\"\n [disabled]=\"disabled\"\n (click)=\"onToggle()\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-checked]=\"checked\"\n role=\"switch\">\n <span class=\"cqa-toggle-slider\"></span>\n </button>\n</div>\n\n", styles: [] }]
24
+ }], propDecorators: { checked: [{
25
+ type: Input
26
+ }], disabled: [{
27
+ type: Input
28
+ }], ariaLabel: [{
29
+ type: Input
30
+ }], checkedChange: [{
31
+ type: Output
32
+ }], change: [{
33
+ type: Output
34
+ }] } });
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXRvZ2dsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2N1c3RvbS10b2dnbGUvY3VzdG9tLXRvZ2dsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2N1c3RvbS10b2dnbGUvY3VzdG9tLXRvZ2dsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQVF2RSxNQUFNLE9BQU8scUJBQXFCO0lBTmxDO1FBT1csWUFBTyxHQUFZLEtBQUssQ0FBQztRQUV6QixhQUFRLEdBQVksS0FBSyxDQUFDO1FBRTFCLGNBQVMsR0FBVyxFQUFFLENBQUM7UUFFdEIsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRTVDLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO0tBU2hEO0lBUEMsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQzdCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDaEM7SUFDSCxDQUFDOztrSEFqQlUscUJBQXFCO3NHQUFyQixxQkFBcUIsK09DUmxDLHlaQWVBOzJGRFBhLHFCQUFxQjtrQkFOakMsU0FBUzsrQkFDRSxtQkFBbUIsUUFHdkIsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFOzhCQUdyQixPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVJLGFBQWE7c0JBQXRCLE1BQU07Z0JBRUcsTUFBTTtzQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLWN1c3RvbS10b2dnbGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vY3VzdG9tLXRvZ2dsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW10sXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfVxufSlcbmV4cG9ydCBjbGFzcyBDdXN0b21Ub2dnbGVDb21wb25lbnQge1xuICBASW5wdXQoKSBjaGVja2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBhcmlhTGFiZWw6IHN0cmluZyA9ICcnO1xuXG4gIEBPdXRwdXQoKSBjaGVja2VkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIEBPdXRwdXQoKSBjaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgb25Ub2dnbGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmNoZWNrZWQgPSAhdGhpcy5jaGVja2VkO1xuICAgICAgdGhpcy5jaGVja2VkQ2hhbmdlLmVtaXQodGhpcy5jaGVja2VkKTtcbiAgICAgIHRoaXMuY2hhbmdlLmVtaXQodGhpcy5jaGVja2VkKTtcbiAgICB9XG4gIH1cbn1cblxuIiwiPGRpdiBjbGFzcz1cImNxYS11aS1yb290XCI+XG4gIDxidXR0b25cbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICBjbGFzcz1cImNxYS1jdXN0b20tdG9nZ2xlXCJcbiAgICBbY2xhc3MuY3FhLXRvZ2dsZS1jaGVja2VkXT1cImNoZWNrZWRcIlxuICAgIFtjbGFzcy5jcWEtdG9nZ2xlLWRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIChjbGljayk9XCJvblRvZ2dsZSgpXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiXG4gICAgW2F0dHIuYXJpYS1jaGVja2VkXT1cImNoZWNrZWRcIlxuICAgIHJvbGU9XCJzd2l0Y2hcIj5cbiAgICA8c3BhbiBjbGFzcz1cImNxYS10b2dnbGUtc2xpZGVyXCI+PC9zcGFuPlxuICA8L2J1dHRvbj5cbjwvZGl2PlxuXG4iXX0=
@@ -0,0 +1,87 @@
1
+ import { Component, Input, Output, EventEmitter, ViewChild } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/material/icon";
4
+ import * as i2 from "@angular/common";
5
+ export class FileUploadComponent {
6
+ constructor() {
7
+ /** Accepted file types (e.g., 'application/pdf,application/msword,.txt') */
8
+ this.accept = '.pdf,.doc,.docx,.txt';
9
+ /** Display text for accepted file types */
10
+ this.acceptedFileTypes = 'PDF, DOC, or TXT files';
11
+ /** Whether the component is disabled */
12
+ this.disabled = false;
13
+ /** Emit when file is selected */
14
+ this.fileSelected = new EventEmitter();
15
+ /** Emit when file selection is cancelled */
16
+ this.cancelled = new EventEmitter();
17
+ this.isDragging = false;
18
+ this.selectedFile = null;
19
+ }
20
+ onDragOver(event) {
21
+ if (this.disabled)
22
+ return;
23
+ event.preventDefault();
24
+ event.stopPropagation();
25
+ this.isDragging = true;
26
+ }
27
+ onDragLeave(event) {
28
+ if (this.disabled)
29
+ return;
30
+ event.preventDefault();
31
+ event.stopPropagation();
32
+ this.isDragging = false;
33
+ }
34
+ onDrop(event) {
35
+ if (this.disabled)
36
+ return;
37
+ event.preventDefault();
38
+ event.stopPropagation();
39
+ this.isDragging = false;
40
+ const files = event.dataTransfer?.files;
41
+ if (files && files.length > 0) {
42
+ this.handleFile(files[0]);
43
+ }
44
+ }
45
+ onBrowseClick() {
46
+ if (this.disabled)
47
+ return;
48
+ this.fileInput.nativeElement.click();
49
+ }
50
+ onFileInputChange(event) {
51
+ const input = event.target;
52
+ if (input.files && input.files.length > 0) {
53
+ this.handleFile(input.files[0]);
54
+ }
55
+ }
56
+ handleFile(file) {
57
+ this.selectedFile = file;
58
+ this.fileSelected.emit(file);
59
+ }
60
+ removeFile() {
61
+ this.selectedFile = null;
62
+ if (this.fileInput?.nativeElement) {
63
+ this.fileInput.nativeElement.value = '';
64
+ }
65
+ this.cancelled.emit();
66
+ }
67
+ }
68
+ FileUploadComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FileUploadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
69
+ FileUploadComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: FileUploadComponent, selector: "cqa-file-upload", inputs: { accept: "accept", acceptedFileTypes: "acceptedFileTypes", disabled: "disabled" }, outputs: { fileSelected: "fileSelected", cancelled: "cancelled" }, host: { classAttribute: "cqa-ui-root" }, viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], ngImport: i0, template: "<div class=\"cqa-w-full\">\n <!-- Drag and Drop Area -->\n <div\n class=\"cqa-border-2 cqa-border-dashed cqa-border-gray-300 cqa-rounded-lg cqa-p-8 cqa-text-center cqa-cursor-pointer cqa-transition-colors\"\n [class.cqa-border-[#3F43EE]]=\"isDragging\"\n [class.cqa-bg-blue-50]=\"isDragging\"\n [class.cqa-opacity-50]=\"disabled\"\n [class.cqa-cursor-not-allowed]=\"disabled\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n (click)=\"onBrowseClick()\">\n \n <!-- Upload Icon -->\n <div class=\"cqa-flex cqa-justify-center cqa-mb-4\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"40px\" viewBox=\"0 -960 960 960\" width=\"40px\" fill=\"#000000\"><path d=\"M440-320v-326L336-542l-56-58 200-200 200 200-56 58-104-104v326h-80ZM240-160q-33 0-56.5-23.5T160-240v-120h80v120h480v-120h80v120q0 33-23.5 56.5T720-160H240Z\"/></svg>\n </div>\n\n <!-- Upload Text -->\n <p class=\"cqa-text-[14px] cqa-text-[#0A0A0A] cqa-mb-2\">\n Drag and drop files here or <span class=\"cqa-text-[#3F43EE] cqa-cursor-pointer hover:cqa-underline\" (click)=\"onBrowseClick(); $event.stopPropagation()\">browse</span>\n </p>\n\n <!-- File Types -->\n <p class=\"cqa-text-[12px] cqa-text-gray-500\">\n {{ acceptedFileTypes }}\n </p>\n </div>\n\n <!-- Selected File Display -->\n <div *ngIf=\"selectedFile\" class=\"cqa-mt-4 cqa-flex cqa-items-center cqa-justify-between cqa-bg-gray-50 cqa-border cqa-border-gray-200 cqa-rounded-lg cqa-p-3\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M16.6667 15.8333V5.83333C16.6667 5.39131 16.4911 4.96738 16.1785 4.65482C15.866 4.34226 15.442 4.16667 15 4.16667H5C4.55797 4.16667 4.13405 4.34226 3.82149 4.65482C3.50893 4.96738 3.33333 5.39131 3.33333 5.83333V15.8333C3.33333 16.2754 3.50893 16.6993 3.82149 17.0118C4.13405 17.3244 4.55797 17.5 5 17.5H15C15.442 17.5 15.866 17.3244 16.1785 17.0118C16.4911 16.6993 16.6667 16.2754 16.6667 15.8333Z\" stroke=\"#6B7280\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M6.66667 8.33333H13.3333M6.66667 11.6667H13.3333\" stroke=\"#6B7280\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <span class=\"cqa-text-[14px] cqa-text-gray-700 cqa-font-medium\">{{ selectedFile.name }}</span>\n </div>\n <button\n type=\"button\"\n (click)=\"removeFile(); $event.stopPropagation()\"\n class=\"cqa-text-red-500 hover:cqa-text-red-700 cqa-p-1\">\n <mat-icon class=\"!cqa-w-5 !cqa-h-5 !cqa-text-[20px]\">close</mat-icon>\n </button>\n </div>\n\n <!-- Hidden File Input -->\n <input\n #fileInput\n type=\"file\"\n [accept]=\"accept\"\n (change)=\"onFileInputChange($event)\"\n style=\"display: none;\"\n [disabled]=\"disabled\">\n</div>\n\n", components: [{ type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
70
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FileUploadComponent, decorators: [{
71
+ type: Component,
72
+ args: [{ selector: 'cqa-file-upload', host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-w-full\">\n <!-- Drag and Drop Area -->\n <div\n class=\"cqa-border-2 cqa-border-dashed cqa-border-gray-300 cqa-rounded-lg cqa-p-8 cqa-text-center cqa-cursor-pointer cqa-transition-colors\"\n [class.cqa-border-[#3F43EE]]=\"isDragging\"\n [class.cqa-bg-blue-50]=\"isDragging\"\n [class.cqa-opacity-50]=\"disabled\"\n [class.cqa-cursor-not-allowed]=\"disabled\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n (click)=\"onBrowseClick()\">\n \n <!-- Upload Icon -->\n <div class=\"cqa-flex cqa-justify-center cqa-mb-4\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"40px\" viewBox=\"0 -960 960 960\" width=\"40px\" fill=\"#000000\"><path d=\"M440-320v-326L336-542l-56-58 200-200 200 200-56 58-104-104v326h-80ZM240-160q-33 0-56.5-23.5T160-240v-120h80v120h480v-120h80v120q0 33-23.5 56.5T720-160H240Z\"/></svg>\n </div>\n\n <!-- Upload Text -->\n <p class=\"cqa-text-[14px] cqa-text-[#0A0A0A] cqa-mb-2\">\n Drag and drop files here or <span class=\"cqa-text-[#3F43EE] cqa-cursor-pointer hover:cqa-underline\" (click)=\"onBrowseClick(); $event.stopPropagation()\">browse</span>\n </p>\n\n <!-- File Types -->\n <p class=\"cqa-text-[12px] cqa-text-gray-500\">\n {{ acceptedFileTypes }}\n </p>\n </div>\n\n <!-- Selected File Display -->\n <div *ngIf=\"selectedFile\" class=\"cqa-mt-4 cqa-flex cqa-items-center cqa-justify-between cqa-bg-gray-50 cqa-border cqa-border-gray-200 cqa-rounded-lg cqa-p-3\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M16.6667 15.8333V5.83333C16.6667 5.39131 16.4911 4.96738 16.1785 4.65482C15.866 4.34226 15.442 4.16667 15 4.16667H5C4.55797 4.16667 4.13405 4.34226 3.82149 4.65482C3.50893 4.96738 3.33333 5.39131 3.33333 5.83333V15.8333C3.33333 16.2754 3.50893 16.6993 3.82149 17.0118C4.13405 17.3244 4.55797 17.5 5 17.5H15C15.442 17.5 15.866 17.3244 16.1785 17.0118C16.4911 16.6993 16.6667 16.2754 16.6667 15.8333Z\" stroke=\"#6B7280\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M6.66667 8.33333H13.3333M6.66667 11.6667H13.3333\" stroke=\"#6B7280\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <span class=\"cqa-text-[14px] cqa-text-gray-700 cqa-font-medium\">{{ selectedFile.name }}</span>\n </div>\n <button\n type=\"button\"\n (click)=\"removeFile(); $event.stopPropagation()\"\n class=\"cqa-text-red-500 hover:cqa-text-red-700 cqa-p-1\">\n <mat-icon class=\"!cqa-w-5 !cqa-h-5 !cqa-text-[20px]\">close</mat-icon>\n </button>\n </div>\n\n <!-- Hidden File Input -->\n <input\n #fileInput\n type=\"file\"\n [accept]=\"accept\"\n (change)=\"onFileInputChange($event)\"\n style=\"display: none;\"\n [disabled]=\"disabled\">\n</div>\n\n", styles: [] }]
73
+ }], propDecorators: { accept: [{
74
+ type: Input
75
+ }], acceptedFileTypes: [{
76
+ type: Input
77
+ }], disabled: [{
78
+ type: Input
79
+ }], fileSelected: [{
80
+ type: Output
81
+ }], cancelled: [{
82
+ type: Output
83
+ }], fileInput: [{
84
+ type: ViewChild,
85
+ args: ['fileInput']
86
+ }] } });
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9maWxlLXVwbG9hZC9maWxlLXVwbG9hZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ZpbGUtdXBsb2FkL2ZpbGUtdXBsb2FkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFjLE1BQU0sZUFBZSxDQUFDOzs7O0FBUTlGLE1BQU0sT0FBTyxtQkFBbUI7SUFOaEM7UUFPRSw0RUFBNEU7UUFDbkUsV0FBTSxHQUFXLHNCQUFzQixDQUFDO1FBRWpELDJDQUEyQztRQUNsQyxzQkFBaUIsR0FBVyx3QkFBd0IsQ0FBQztRQUU5RCx3Q0FBd0M7UUFDL0IsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUVuQyxpQ0FBaUM7UUFDdkIsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRWxELDRDQUE0QztRQUNsQyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUkvQyxlQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLGlCQUFZLEdBQWdCLElBQUksQ0FBQztLQW9EbEM7SUFsREMsVUFBVSxDQUFDLEtBQWdCO1FBQ3pCLElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBQzFCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDekIsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFnQjtRQUMxQixJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUMxQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQzFCLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBZ0I7UUFDckIsSUFBSSxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU87UUFDMUIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUV4QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQztRQUN4QyxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzNCO0lBQ0gsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsS0FBWTtRQUM1QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBMEIsQ0FBQztRQUMvQyxJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3pDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQztJQUVPLFVBQVUsQ0FBQyxJQUFVO1FBQzNCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRTtZQUNqQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1NBQ3pDO1FBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN4QixDQUFDOztnSEF0RVUsbUJBQW1CO29HQUFuQixtQkFBbUIsdVdDUmhDLG04RkF3REE7MkZEaERhLG1CQUFtQjtrQkFOL0IsU0FBUzsrQkFDRSxpQkFBaUIsUUFHckIsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFOzhCQUlyQixNQUFNO3NCQUFkLEtBQUs7Z0JBR0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUdHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBR0ksWUFBWTtzQkFBckIsTUFBTTtnQkFHRyxTQUFTO3NCQUFsQixNQUFNO2dCQUVpQixTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgVmlld0NoaWxkLCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1maWxlLXVwbG9hZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9maWxlLXVwbG9hZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW10sXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfVxufSlcbmV4cG9ydCBjbGFzcyBGaWxlVXBsb2FkQ29tcG9uZW50IHtcbiAgLyoqIEFjY2VwdGVkIGZpbGUgdHlwZXMgKGUuZy4sICdhcHBsaWNhdGlvbi9wZGYsYXBwbGljYXRpb24vbXN3b3JkLC50eHQnKSAqL1xuICBASW5wdXQoKSBhY2NlcHQ6IHN0cmluZyA9ICcucGRmLC5kb2MsLmRvY3gsLnR4dCc7XG5cbiAgLyoqIERpc3BsYXkgdGV4dCBmb3IgYWNjZXB0ZWQgZmlsZSB0eXBlcyAqL1xuICBASW5wdXQoKSBhY2NlcHRlZEZpbGVUeXBlczogc3RyaW5nID0gJ1BERiwgRE9DLCBvciBUWFQgZmlsZXMnO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQgKi9cbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogRW1pdCB3aGVuIGZpbGUgaXMgc2VsZWN0ZWQgKi9cbiAgQE91dHB1dCgpIGZpbGVTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZT4oKTtcblxuICAvKiogRW1pdCB3aGVuIGZpbGUgc2VsZWN0aW9uIGlzIGNhbmNlbGxlZCAqL1xuICBAT3V0cHV0KCkgY2FuY2VsbGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIEBWaWV3Q2hpbGQoJ2ZpbGVJbnB1dCcpIGZpbGVJbnB1dCE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgaXNEcmFnZ2luZzogYm9vbGVhbiA9IGZhbHNlO1xuICBzZWxlY3RlZEZpbGU6IEZpbGUgfCBudWxsID0gbnVsbDtcblxuICBvbkRyYWdPdmVyKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5pc0RyYWdnaW5nID0gdHJ1ZTtcbiAgfVxuXG4gIG9uRHJhZ0xlYXZlKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XG4gIH1cblxuICBvbkRyb3AoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcblxuICAgIGNvbnN0IGZpbGVzID0gZXZlbnQuZGF0YVRyYW5zZmVyPy5maWxlcztcbiAgICBpZiAoZmlsZXMgJiYgZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5oYW5kbGVGaWxlKGZpbGVzWzBdKTtcbiAgICB9XG4gIH1cblxuICBvbkJyb3dzZUNsaWNrKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG4gICAgdGhpcy5maWxlSW5wdXQubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICB9XG5cbiAgb25GaWxlSW5wdXRDaGFuZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBpZiAoaW5wdXQuZmlsZXMgJiYgaW5wdXQuZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5oYW5kbGVGaWxlKGlucHV0LmZpbGVzWzBdKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUZpbGUoZmlsZTogRmlsZSk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRGaWxlID0gZmlsZTtcbiAgICB0aGlzLmZpbGVTZWxlY3RlZC5lbWl0KGZpbGUpO1xuICB9XG5cbiAgcmVtb3ZlRmlsZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkRmlsZSA9IG51bGw7XG4gICAgaWYgKHRoaXMuZmlsZUlucHV0Py5uYXRpdmVFbGVtZW50KSB7XG4gICAgICB0aGlzLmZpbGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgfVxuICAgIHRoaXMuY2FuY2VsbGVkLmVtaXQoKTtcbiAgfVxufVxuXG4iLCI8ZGl2IGNsYXNzPVwiY3FhLXctZnVsbFwiPlxuICA8IS0tIERyYWcgYW5kIERyb3AgQXJlYSAtLT5cbiAgPGRpdlxuICAgIGNsYXNzPVwiY3FhLWJvcmRlci0yIGNxYS1ib3JkZXItZGFzaGVkIGNxYS1ib3JkZXItZ3JheS0zMDAgY3FhLXJvdW5kZWQtbGcgY3FhLXAtOCBjcWEtdGV4dC1jZW50ZXIgY3FhLWN1cnNvci1wb2ludGVyIGNxYS10cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgW2NsYXNzLmNxYS1ib3JkZXItWyMzRjQzRUVdXT1cImlzRHJhZ2dpbmdcIlxuICAgIFtjbGFzcy5jcWEtYmctYmx1ZS01MF09XCJpc0RyYWdnaW5nXCJcbiAgICBbY2xhc3MuY3FhLW9wYWNpdHktNTBdPVwiZGlzYWJsZWRcIlxuICAgIFtjbGFzcy5jcWEtY3Vyc29yLW5vdC1hbGxvd2VkXT1cImRpc2FibGVkXCJcbiAgICAoZHJhZ292ZXIpPVwib25EcmFnT3ZlcigkZXZlbnQpXCJcbiAgICAoZHJhZ2xlYXZlKT1cIm9uRHJhZ0xlYXZlKCRldmVudClcIlxuICAgIChkcm9wKT1cIm9uRHJvcCgkZXZlbnQpXCJcbiAgICAoY2xpY2spPVwib25Ccm93c2VDbGljaygpXCI+XG4gICAgXG4gICAgPCEtLSBVcGxvYWQgSWNvbiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWp1c3RpZnktY2VudGVyIGNxYS1tYi00XCI+XG4gICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBoZWlnaHQ9XCI0MHB4XCIgdmlld0JveD1cIjAgLTk2MCA5NjAgOTYwXCIgd2lkdGg9XCI0MHB4XCIgZmlsbD1cIiMwMDAwMDBcIj48cGF0aCBkPVwiTTQ0MC0zMjB2LTMyNkwzMzYtNTQybC01Ni01OCAyMDAtMjAwIDIwMCAyMDAtNTYgNTgtMTA0LTEwNHYzMjZoLTgwWk0yNDAtMTYwcS0zMyAwLTU2LjUtMjMuNVQxNjAtMjQwdi0xMjBoODB2MTIwaDQ4MHYtMTIwaDgwdjEyMHEwIDMzLTIzLjUgNTYuNVQ3MjAtMTYwSDI0MFpcIi8+PC9zdmc+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFVwbG9hZCBUZXh0IC0tPlxuICAgIDxwIGNsYXNzPVwiY3FhLXRleHQtWzE0cHhdIGNxYS10ZXh0LVsjMEEwQTBBXSBjcWEtbWItMlwiPlxuICAgICAgRHJhZyBhbmQgZHJvcCBmaWxlcyBoZXJlIG9yIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWyMzRjQzRUVdIGNxYS1jdXJzb3ItcG9pbnRlciBob3ZlcjpjcWEtdW5kZXJsaW5lXCIgKGNsaWNrKT1cIm9uQnJvd3NlQ2xpY2soKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+YnJvd3NlPC9zcGFuPlxuICAgIDwvcD5cblxuICAgIDwhLS0gRmlsZSBUeXBlcyAtLT5cbiAgICA8cCBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtdGV4dC1ncmF5LTUwMFwiPlxuICAgICAge3sgYWNjZXB0ZWRGaWxlVHlwZXMgfX1cbiAgICA8L3A+XG4gIDwvZGl2PlxuXG4gIDwhLS0gU2VsZWN0ZWQgRmlsZSBEaXNwbGF5IC0tPlxuICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRGaWxlXCIgY2xhc3M9XCJjcWEtbXQtNCBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLWJnLWdyYXktNTAgY3FhLWJvcmRlciBjcWEtYm9yZGVyLWdyYXktMjAwIGNxYS1yb3VuZGVkLWxnIGNxYS1wLTNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTJcIj5cbiAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICA8cGF0aCBkPVwiTTE2LjY2NjcgMTUuODMzM1Y1LjgzMzMzQzE2LjY2NjcgNS4zOTEzMSAxNi40OTExIDQuOTY3MzggMTYuMTc4NSA0LjY1NDgyQzE1Ljg2NiA0LjM0MjI2IDE1LjQ0MiA0LjE2NjY3IDE1IDQuMTY2NjdINUM0LjU1Nzk3IDQuMTY2NjcgNC4xMzQwNSA0LjM0MjI2IDMuODIxNDkgNC42NTQ4MkMzLjUwODkzIDQuOTY3MzggMy4zMzMzMyA1LjM5MTMxIDMuMzMzMzMgNS44MzMzM1YxNS44MzMzQzMuMzMzMzMgMTYuMjc1NCAzLjUwODkzIDE2LjY5OTMgMy44MjE0OSAxNy4wMTE4QzQuMTM0MDUgMTcuMzI0NCA0LjU1Nzk3IDE3LjUgNSAxNy41SDE1QzE1LjQ0MiAxNy41IDE1Ljg2NiAxNy4zMjQ0IDE2LjE3ODUgMTcuMDExOEMxNi40OTExIDE2LjY5OTMgMTYuNjY2NyAxNi4yNzU0IDE2LjY2NjcgMTUuODMzM1pcIiBzdHJva2U9XCIjNkI3MjgwXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICA8cGF0aCBkPVwiTTYuNjY2NjcgOC4zMzMzM0gxMy4zMzMzTTYuNjY2NjcgMTEuNjY2N0gxMy4zMzMzXCIgc3Ryb2tlPVwiIzZCNzI4MFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgIDwvc3ZnPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTRweF0gY3FhLXRleHQtZ3JheS03MDAgY3FhLWZvbnQtbWVkaXVtXCI+e3sgc2VsZWN0ZWRGaWxlLm5hbWUgfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwicmVtb3ZlRmlsZSgpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgY2xhc3M9XCJjcWEtdGV4dC1yZWQtNTAwIGhvdmVyOmNxYS10ZXh0LXJlZC03MDAgY3FhLXAtMVwiPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPVwiIWNxYS13LTUgIWNxYS1oLTUgIWNxYS10ZXh0LVsyMHB4XVwiPmNsb3NlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBIaWRkZW4gRmlsZSBJbnB1dCAtLT5cbiAgPGlucHV0XG4gICAgI2ZpbGVJbnB1dFxuICAgIHR5cGU9XCJmaWxlXCJcbiAgICBbYWNjZXB0XT1cImFjY2VwdFwiXG4gICAgKGNoYW5nZSk9XCJvbkZpbGVJbnB1dENoYW5nZSgkZXZlbnQpXCJcbiAgICBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbjwvZGl2PlxuXG4iXX0=
@@ -0,0 +1,59 @@
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/material/icon";
4
+ import * as i2 from "@angular/common";
5
+ export class ItemListComponent {
6
+ constructor() {
7
+ /** List items to display (e.g. mapped from Parameter, Environment, or any domain model) */
8
+ this.items = [];
9
+ /** Id of the currently selected item; used for highlight and to show edit icon when showEdit is true */
10
+ this.selectedId = null;
11
+ /** Message shown when items array is empty (e.g. "No parameters match your search.") */
12
+ this.emptyMessage = 'No items to display.';
13
+ /** When true (default), the list container is scrollable (flex-1 min-h-0 overflow-y-auto). */
14
+ this.scrollable = true;
15
+ /** Emitted when an item row is clicked (passes the item id). */
16
+ this.itemSelect = new EventEmitter();
17
+ /** Emitted when the edit icon is clicked (passes the item id). Call stopPropagation in parent if needed. */
18
+ this.itemEdit = new EventEmitter();
19
+ }
20
+ /** Normalized items (never undefined) so template is safe. */
21
+ get displayItems() {
22
+ return this.items ?? [];
23
+ }
24
+ trackById(_index, item) {
25
+ return item.id;
26
+ }
27
+ isSelected(item) {
28
+ return this.selectedId === item.id;
29
+ }
30
+ onItemClick(item) {
31
+ this.itemSelect.emit(item.id);
32
+ }
33
+ onEditClick(event, item) {
34
+ event.stopPropagation();
35
+ this.itemEdit.emit(item.id);
36
+ }
37
+ }
38
+ ItemListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ItemListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
39
+ ItemListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ItemListComponent, selector: "cqa-item-list", inputs: { items: "items", selectedId: "selectedId", emptyMessage: "emptyMessage", scrollable: "scrollable" }, outputs: { itemSelect: "itemSelect", itemEdit: "itemEdit" }, host: { properties: { "class.cqa-item-list-scrollable-host": "scrollable" }, classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div\n class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-min-h-0\"\n [class.cqa-flex-1]=\"scrollable\"\n [class.cqa-min-h-0]=\"scrollable\"\n [class.cqa-overflow-y-auto]=\"scrollable\"\n [class.cqa-item-list-scroll-hide-scrollbar]=\"scrollable\">\n <button\n *ngFor=\"let item of displayItems; trackBy: trackById\"\n type=\"button\"\n (click)=\"onItemClick(item)\"\n [class.cqa-bg-[#D8D9FC]]=\"isSelected(item)\"\n [class.cqa-border]=\"isSelected(item)\"\n [class.cqa-border-solid]=\"isSelected(item)\"\n [class.cqa-border-[#3F43EE]]=\"isSelected(item)\"\n class=\"cqa-item-list-row cqa-w-full cqa-text-left cqa-rounded-lg cqa-p-1 cqa-transition-colors cqa-bg-white hover:cqa-bg-[#F9FAFB] focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#D8D9FC]\">\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-2\">\n <div class=\"cqa-flex-1 cqa-min-w-0\">\n <p class=\"cqa-font-semibold cqa-text-[12px] cqa-leading-[20px] cqa-text-[#111827] cqa-m-0 cqa-truncate\">\n {{ item.title }}\n </p>\n <p *ngIf=\"item.subtitle\" class=\"cqa-text-[10px] cqa-leading-[18px] cqa-text-[#6B7280] cqa-m-0 cqa-mt-0.5 cqa-truncate\">\n {{ item.subtitle }}\n </p>\n </div>\n <div class=\"cqa-flex cqa-flex-col cqa-items-end cqa-gap-1 cqa-flex-shrink-0\">\n <span *ngIf=\"item.badge\" class=\"cqa-item-list-badge\">\n {{ item.badge }}\n </span>\n <button\n *ngIf=\"item.showEdit\"\n type=\"button\"\n (click)=\"onEditClick($event, item)\"\n class=\"cqa-p-1 cqa-rounded cqa-text-[#1447E6] hover:cqa-bg-[#E5E7EB] cqa-flex cqa-items-center cqa-justify-center\"\n title=\"Edit\"\n aria-label=\"Edit\">\n <mat-icon class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px]\">edit</mat-icon>\n </button>\n </div>\n </div>\n </button>\n <p *ngIf=\"displayItems.length === 0\" class=\"cqa-text-[12px] cqa-leading-[18px] cqa-text-[#6B7280] cqa-m-0 cqa-py-4 cqa-text-center\">\n {{ emptyMessage }}\n </p>\n</div>\n", components: [{ type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
40
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ItemListComponent, decorators: [{
41
+ type: Component,
42
+ args: [{ selector: 'cqa-item-list', host: {
43
+ class: 'cqa-ui-root',
44
+ '[class.cqa-item-list-scrollable-host]': 'scrollable',
45
+ }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-min-h-0\"\n [class.cqa-flex-1]=\"scrollable\"\n [class.cqa-min-h-0]=\"scrollable\"\n [class.cqa-overflow-y-auto]=\"scrollable\"\n [class.cqa-item-list-scroll-hide-scrollbar]=\"scrollable\">\n <button\n *ngFor=\"let item of displayItems; trackBy: trackById\"\n type=\"button\"\n (click)=\"onItemClick(item)\"\n [class.cqa-bg-[#D8D9FC]]=\"isSelected(item)\"\n [class.cqa-border]=\"isSelected(item)\"\n [class.cqa-border-solid]=\"isSelected(item)\"\n [class.cqa-border-[#3F43EE]]=\"isSelected(item)\"\n class=\"cqa-item-list-row cqa-w-full cqa-text-left cqa-rounded-lg cqa-p-1 cqa-transition-colors cqa-bg-white hover:cqa-bg-[#F9FAFB] focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#D8D9FC]\">\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-2\">\n <div class=\"cqa-flex-1 cqa-min-w-0\">\n <p class=\"cqa-font-semibold cqa-text-[12px] cqa-leading-[20px] cqa-text-[#111827] cqa-m-0 cqa-truncate\">\n {{ item.title }}\n </p>\n <p *ngIf=\"item.subtitle\" class=\"cqa-text-[10px] cqa-leading-[18px] cqa-text-[#6B7280] cqa-m-0 cqa-mt-0.5 cqa-truncate\">\n {{ item.subtitle }}\n </p>\n </div>\n <div class=\"cqa-flex cqa-flex-col cqa-items-end cqa-gap-1 cqa-flex-shrink-0\">\n <span *ngIf=\"item.badge\" class=\"cqa-item-list-badge\">\n {{ item.badge }}\n </span>\n <button\n *ngIf=\"item.showEdit\"\n type=\"button\"\n (click)=\"onEditClick($event, item)\"\n class=\"cqa-p-1 cqa-rounded cqa-text-[#1447E6] hover:cqa-bg-[#E5E7EB] cqa-flex cqa-items-center cqa-justify-center\"\n title=\"Edit\"\n aria-label=\"Edit\">\n <mat-icon class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px]\">edit</mat-icon>\n </button>\n </div>\n </div>\n </button>\n <p *ngIf=\"displayItems.length === 0\" class=\"cqa-text-[12px] cqa-leading-[18px] cqa-text-[#6B7280] cqa-m-0 cqa-py-4 cqa-text-center\">\n {{ emptyMessage }}\n </p>\n</div>\n" }]
46
+ }], propDecorators: { items: [{
47
+ type: Input
48
+ }], selectedId: [{
49
+ type: Input
50
+ }], emptyMessage: [{
51
+ type: Input
52
+ }], scrollable: [{
53
+ type: Input
54
+ }], itemSelect: [{
55
+ type: Output
56
+ }], itemEdit: [{
57
+ type: Output
58
+ }] } });
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvaXRlbS1saXN0L2l0ZW0tbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2l0ZW0tbGlzdC9pdGVtLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7Ozs7QUFZdkIsTUFBTSxPQUFPLGlCQUFpQjtJQVQ5QjtRQVVFLDJGQUEyRjtRQUNsRixVQUFLLEdBQXdCLEVBQUUsQ0FBQztRQUV6Qyx3R0FBd0c7UUFDL0YsZUFBVSxHQUFrQixJQUFJLENBQUM7UUFFMUMsd0ZBQXdGO1FBQy9FLGlCQUFZLEdBQUcsc0JBQXNCLENBQUM7UUFFL0MsOEZBQThGO1FBQ3JGLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFFM0IsZ0VBQWdFO1FBQ3RELGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRWxELDRHQUE0RztRQUNsRyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztLQXVCakQ7SUFyQkMsOERBQThEO0lBQzlELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELFNBQVMsQ0FBQyxNQUFjLEVBQUUsSUFBdUI7UUFDL0MsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBdUI7UUFDaEMsT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUF1QjtRQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFZLEVBQUUsSUFBdUI7UUFDL0MsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5QixDQUFDOzs4R0F2Q1UsaUJBQWlCO2tHQUFqQixpQkFBaUIsOFVDbEI5Qix5akVBNENBOzJGRDFCYSxpQkFBaUI7a0JBVDdCLFNBQVM7K0JBQ0UsZUFBZSxRQUVuQjt3QkFDSixLQUFLLEVBQUUsYUFBYTt3QkFDcEIsdUNBQXVDLEVBQUUsWUFBWTtxQkFDdEQsbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU07OEJBSXRDLEtBQUs7c0JBQWIsS0FBSztnQkFHRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBR0csVUFBVTtzQkFBbEIsS0FBSztnQkFHSSxVQUFVO3NCQUFuQixNQUFNO2dCQUdHLFFBQVE7c0JBQWpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ3FhTGlzdEl0ZW1Db25maWcgfSBmcm9tICcuL2l0ZW0tbGlzdC5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1pdGVtLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vaXRlbS1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnY3FhLXVpLXJvb3QnLFxuICAgICdbY2xhc3MuY3FhLWl0ZW0tbGlzdC1zY3JvbGxhYmxlLWhvc3RdJzogJ3Njcm9sbGFibGUnLFxuICB9LFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgSXRlbUxpc3RDb21wb25lbnQge1xuICAvKiogTGlzdCBpdGVtcyB0byBkaXNwbGF5IChlLmcuIG1hcHBlZCBmcm9tIFBhcmFtZXRlciwgRW52aXJvbm1lbnQsIG9yIGFueSBkb21haW4gbW9kZWwpICovXG4gIEBJbnB1dCgpIGl0ZW1zOiBDcWFMaXN0SXRlbUNvbmZpZ1tdID0gW107XG5cbiAgLyoqIElkIG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgaXRlbTsgdXNlZCBmb3IgaGlnaGxpZ2h0IGFuZCB0byBzaG93IGVkaXQgaWNvbiB3aGVuIHNob3dFZGl0IGlzIHRydWUgKi9cbiAgQElucHV0KCkgc2VsZWN0ZWRJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIE1lc3NhZ2Ugc2hvd24gd2hlbiBpdGVtcyBhcnJheSBpcyBlbXB0eSAoZS5nLiBcIk5vIHBhcmFtZXRlcnMgbWF0Y2ggeW91ciBzZWFyY2guXCIpICovXG4gIEBJbnB1dCgpIGVtcHR5TWVzc2FnZSA9ICdObyBpdGVtcyB0byBkaXNwbGF5Lic7XG5cbiAgLyoqIFdoZW4gdHJ1ZSAoZGVmYXVsdCksIHRoZSBsaXN0IGNvbnRhaW5lciBpcyBzY3JvbGxhYmxlIChmbGV4LTEgbWluLWgtMCBvdmVyZmxvdy15LWF1dG8pLiAqL1xuICBASW5wdXQoKSBzY3JvbGxhYmxlID0gdHJ1ZTtcblxuICAvKiogRW1pdHRlZCB3aGVuIGFuIGl0ZW0gcm93IGlzIGNsaWNrZWQgKHBhc3NlcyB0aGUgaXRlbSBpZCkuICovXG4gIEBPdXRwdXQoKSBpdGVtU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgZWRpdCBpY29uIGlzIGNsaWNrZWQgKHBhc3NlcyB0aGUgaXRlbSBpZCkuIENhbGwgc3RvcFByb3BhZ2F0aW9uIGluIHBhcmVudCBpZiBuZWVkZWQuICovXG4gIEBPdXRwdXQoKSBpdGVtRWRpdCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIC8qKiBOb3JtYWxpemVkIGl0ZW1zIChuZXZlciB1bmRlZmluZWQpIHNvIHRlbXBsYXRlIGlzIHNhZmUuICovXG4gIGdldCBkaXNwbGF5SXRlbXMoKTogQ3FhTGlzdEl0ZW1Db25maWdbXSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXMgPz8gW107XG4gIH1cblxuICB0cmFja0J5SWQoX2luZGV4OiBudW1iZXIsIGl0ZW06IENxYUxpc3RJdGVtQ29uZmlnKTogc3RyaW5nIHtcbiAgICByZXR1cm4gaXRlbS5pZDtcbiAgfVxuXG4gIGlzU2VsZWN0ZWQoaXRlbTogQ3FhTGlzdEl0ZW1Db25maWcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZElkID09PSBpdGVtLmlkO1xuICB9XG5cbiAgb25JdGVtQ2xpY2soaXRlbTogQ3FhTGlzdEl0ZW1Db25maWcpOiB2b2lkIHtcbiAgICB0aGlzLml0ZW1TZWxlY3QuZW1pdChpdGVtLmlkKTtcbiAgfVxuXG4gIG9uRWRpdENsaWNrKGV2ZW50OiBFdmVudCwgaXRlbTogQ3FhTGlzdEl0ZW1Db25maWcpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLml0ZW1FZGl0LmVtaXQoaXRlbS5pZCk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0xIGNxYS1taW4taC0wXCJcbiAgW2NsYXNzLmNxYS1mbGV4LTFdPVwic2Nyb2xsYWJsZVwiXG4gIFtjbGFzcy5jcWEtbWluLWgtMF09XCJzY3JvbGxhYmxlXCJcbiAgW2NsYXNzLmNxYS1vdmVyZmxvdy15LWF1dG9dPVwic2Nyb2xsYWJsZVwiXG4gIFtjbGFzcy5jcWEtaXRlbS1saXN0LXNjcm9sbC1oaWRlLXNjcm9sbGJhcl09XCJzY3JvbGxhYmxlXCI+XG4gIDxidXR0b25cbiAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkaXNwbGF5SXRlbXM7IHRyYWNrQnk6IHRyYWNrQnlJZFwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgKGNsaWNrKT1cIm9uSXRlbUNsaWNrKGl0ZW0pXCJcbiAgICBbY2xhc3MuY3FhLWJnLVsjRDhEOUZDXV09XCJpc1NlbGVjdGVkKGl0ZW0pXCJcbiAgICBbY2xhc3MuY3FhLWJvcmRlcl09XCJpc1NlbGVjdGVkKGl0ZW0pXCJcbiAgICBbY2xhc3MuY3FhLWJvcmRlci1zb2xpZF09XCJpc1NlbGVjdGVkKGl0ZW0pXCJcbiAgICBbY2xhc3MuY3FhLWJvcmRlci1bIzNGNDNFRV1dPVwiaXNTZWxlY3RlZChpdGVtKVwiXG4gICAgY2xhc3M9XCJjcWEtaXRlbS1saXN0LXJvdyBjcWEtdy1mdWxsIGNxYS10ZXh0LWxlZnQgY3FhLXJvdW5kZWQtbGcgY3FhLXAtMSBjcWEtdHJhbnNpdGlvbi1jb2xvcnMgY3FhLWJnLXdoaXRlIGhvdmVyOmNxYS1iZy1bI0Y5RkFGQl0gZm9jdXM6Y3FhLW91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOmNxYS1yaW5nLTIgZm9jdXMtdmlzaWJsZTpjcWEtcmluZy1bI0Q4RDlGQ11cIj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLXN0YXJ0IGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLWdhcC0yXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXgtMSBjcWEtbWluLXctMFwiPlxuICAgICAgICA8cCBjbGFzcz1cImNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy1bMjBweF0gY3FhLXRleHQtWyMxMTE4MjddIGNxYS1tLTAgY3FhLXRydW5jYXRlXCI+XG4gICAgICAgICAge3sgaXRlbS50aXRsZSB9fVxuICAgICAgICA8L3A+XG4gICAgICAgIDxwICpuZ0lmPVwiaXRlbS5zdWJ0aXRsZVwiIGNsYXNzPVwiY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxOHB4XSBjcWEtdGV4dC1bIzZCNzI4MF0gY3FhLW0tMCBjcWEtbXQtMC41IGNxYS10cnVuY2F0ZVwiPlxuICAgICAgICAgIHt7IGl0ZW0uc3VidGl0bGUgfX1cbiAgICAgICAgPC9wPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1pdGVtcy1lbmQgY3FhLWdhcC0xIGNxYS1mbGV4LXNocmluay0wXCI+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5iYWRnZVwiIGNsYXNzPVwiY3FhLWl0ZW0tbGlzdC1iYWRnZVwiPlxuICAgICAgICAgIHt7IGl0ZW0uYmFkZ2UgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgKm5nSWY9XCJpdGVtLnNob3dFZGl0XCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAoY2xpY2spPVwib25FZGl0Q2xpY2soJGV2ZW50LCBpdGVtKVwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtcC0xIGNxYS1yb3VuZGVkIGNxYS10ZXh0LVsjMTQ0N0U2XSBob3ZlcjpjcWEtYmctWyNFNUU3RUJdIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyXCJcbiAgICAgICAgICB0aXRsZT1cIkVkaXRcIlxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJFZGl0XCI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiIWNxYS13LTQgIWNxYS1oLTQgIWNxYS10ZXh0LVsxNnB4XVwiPmVkaXQ8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2J1dHRvbj5cbiAgPHAgKm5nSWY9XCJkaXNwbGF5SXRlbXMubGVuZ3RoID09PSAwXCIgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWxlYWRpbmctWzE4cHhdIGNxYS10ZXh0LVsjNkI3MjgwXSBjcWEtbS0wIGNxYS1weS00IGNxYS10ZXh0LWNlbnRlclwiPlxuICAgIHt7IGVtcHR5TWVzc2FnZSB9fVxuICA8L3A+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS1saXN0Lm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9pdGVtLWxpc3QvaXRlbS1saXN0Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIGEgc2luZ2xlIGl0ZW0gaW4gdGhlIHJldXNhYmxlIGl0ZW0gbGlzdC5cbiAqIFVzZSB0aGlzIGludGVyZmFjZSB0byBiaW5kIGFueSBkb21haW4gbW9kZWwgdG8gdGhlIGxpc3QgYnkgbWFwcGluZyB0byBpZCwgdGl0bGUsIHN1YnRpdGxlLCBiYWRnZSwgc2hvd0VkaXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3FhTGlzdEl0ZW1Db25maWcge1xuICAvKiogVW5pcXVlIGlkIHVzZWQgZm9yIHNlbGVjdGlvbiBhbmQgdHJhY2tpbmcgKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIFByaW1hcnkgdGV4dCAoZS5nLiB2YXJpYWJsZSBuYW1lLCBsYWJlbCkgKi9cbiAgdGl0bGU6IHN0cmluZztcbiAgLyoqIFNlY29uZGFyeSAvIHZhbHVlIHRleHQgc2hvd24gYmVsb3cgdGl0bGUgKi9cbiAgc3VidGl0bGU/OiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCBiYWRnZSB0ZXh0IChlLmcuIFwiR2xvYmFsXCIsIFwiTG9jYWxcIiwgZW52aXJvbm1lbnQgbmFtZSkgKi9cbiAgYmFkZ2U/OiBzdHJpbmc7XG4gIC8qKiBXaGVuIHRydWUsIHRoZSBlZGl0IGljb24gaXMgc2hvd24gKHR5cGljYWxseSB3aGVuIHRoaXMgaXRlbSBpcyBzZWxlY3RlZCkgKi9cbiAgc2hvd0VkaXQ/OiBib29sZWFuO1xufVxuIl19
@@ -0,0 +1,136 @@
1
+ import { Component, Input, Output, EventEmitter } from '@angular/core';
2
+ import { Validators } from '@angular/forms';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/forms";
5
+ import * as i2 from "../../custom-textarea/custom-textarea.component";
6
+ import * as i3 from "../../dynamic-select/dynamic-select-field.component";
7
+ import * as i4 from "../../custom-input/custom-input.component";
8
+ import * as i5 from "@angular/material/icon";
9
+ import * as i6 from "../../custom-toggle/custom-toggle.component";
10
+ import * as i7 from "../../button/button.component";
11
+ import * as i8 from "@angular/common";
12
+ export class StepBuilderAiAgentComponent {
13
+ constructor(fb) {
14
+ this.fb = fb;
15
+ /** Options for type dropdown */
16
+ this.typeOptions = [];
17
+ /** Options for environments dropdown */
18
+ this.environmentOptions = [];
19
+ /** Options for retry count dropdown */
20
+ this.retryCountOptions = [];
21
+ /** Options for iframe locator dropdown */
22
+ this.iframeLocatorOptions = [];
23
+ /** Options for other locators dropdown */
24
+ this.otherLocatorsOptions = [];
25
+ /** Emit when step is created */
26
+ this.createStep = new EventEmitter();
27
+ /** Emit when cancelled */
28
+ this.cancelled = new EventEmitter();
29
+ this.showAdvanced = false;
30
+ this.aiAgentForm = this.fb.group({
31
+ query: ['', Validators.required],
32
+ type: ['', Validators.required],
33
+ environments: ['', Validators.required],
34
+ metadata: [''],
35
+ description: [''],
36
+ continueOnError: [false],
37
+ disabled: [false],
38
+ retryCount: [''],
39
+ iframeLocator: [''],
40
+ otherLocators: ['']
41
+ });
42
+ }
43
+ ngOnInit() {
44
+ // Component initialization
45
+ }
46
+ getTypeConfig() {
47
+ return {
48
+ key: 'type',
49
+ placeholder: 'Select type',
50
+ multiple: false,
51
+ searchable: false,
52
+ options: this.typeOptions
53
+ };
54
+ }
55
+ getEnvironmentConfig() {
56
+ return {
57
+ key: 'environments',
58
+ placeholder: 'Select environment',
59
+ multiple: false,
60
+ searchable: false,
61
+ options: this.environmentOptions
62
+ };
63
+ }
64
+ getRetryCountConfig() {
65
+ return {
66
+ key: 'retryCount',
67
+ placeholder: 'Dynamic search selector from library or manual',
68
+ multiple: false,
69
+ searchable: true,
70
+ options: this.retryCountOptions
71
+ };
72
+ }
73
+ getIframeLocatorConfig() {
74
+ return {
75
+ key: 'iframeLocator',
76
+ placeholder: 'Dynamic search selector from library or manual',
77
+ multiple: false,
78
+ searchable: true,
79
+ options: this.iframeLocatorOptions
80
+ };
81
+ }
82
+ getOtherLocatorsConfig() {
83
+ return {
84
+ key: 'otherLocators',
85
+ placeholder: 'Dynamic search selector from library or manual',
86
+ multiple: false,
87
+ searchable: true,
88
+ options: this.otherLocatorsOptions
89
+ };
90
+ }
91
+ toggleAdvanced() {
92
+ this.showAdvanced = !this.showAdvanced;
93
+ }
94
+ onCancel() {
95
+ this.cancelled.emit();
96
+ }
97
+ onCreateStep() {
98
+ if (this.aiAgentForm.valid) {
99
+ const formValue = this.aiAgentForm.value;
100
+ const stepData = {
101
+ query: formValue.query || '',
102
+ type: formValue.type || '',
103
+ environments: formValue.environments || '',
104
+ metadata: formValue.metadata || '',
105
+ description: formValue.description || '',
106
+ continueOnError: formValue.continueOnError || false,
107
+ disabled: formValue.disabled || false,
108
+ retryCount: formValue.retryCount || '',
109
+ iframeLocator: formValue.iframeLocator || '',
110
+ otherLocators: formValue.otherLocators || ''
111
+ };
112
+ this.createStep.emit(stepData);
113
+ }
114
+ }
115
+ }
116
+ StepBuilderAiAgentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StepBuilderAiAgentComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
117
+ StepBuilderAiAgentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StepBuilderAiAgentComponent, selector: "cqa-step-builder-ai-agent", inputs: { typeOptions: "typeOptions", environmentOptions: "environmentOptions", retryCountOptions: "retryCountOptions", iframeLocatorOptions: "iframeLocatorOptions", otherLocatorsOptions: "otherLocatorsOptions" }, outputs: { createStep: "createStep", cancelled: "cancelled" }, host: { classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-col cqa-bg-white cqa-px-4 cqa-py-2\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n Create AI Step\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-max-h-[500px] cqa-overflow-y-auto\">\n <!-- What should the agent achieve? -->\n <div class=\"cqa-mb-6\">\n <label class=\"cqa-text-[12px] cqa-font-medium cqa-text-gray-700 cqa-mb-1 cqa-block\">\n What should the agent achieve?\n </label>\n <cqa-custom-textarea\n class=\"cqa-step-builder-ai-agent-textarea\"\n [placeholder]=\"'What should the agent achieve?'\"\n [value]=\"aiAgentForm.get('query')?.value\"\n [fullWidth]=\"true\"\n [rows]=\"4\"\n (valueChange)=\"aiAgentForm.get('query')?.setValue($event)\">\n </cqa-custom-textarea>\n <p class=\"cqa-text-[10px] cqa-text-[#0A0A0A] \">\n Tip: Use numbered steps or bullet points for complex tasks.\n </p>\n </div>\n <div class=\"cqa-flex cqa-flex-wrap cqa-custom-form-fields\">\n <!-- Type Dropdown -->\n <div class=\"cqa-mb-6 cqa-w-1/2 cqa-pr-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[12px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Type\n </label>\n <cqa-dynamic-select class=\"cqa-w-full\" [form]=\"aiAgentForm\" [config]=\"getTypeConfig()\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Environments Dropdown -->\n <div class=\"cqa-mb-6 cqa-w-1/2 cqa-pl-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[12px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Envioronments\n </label>\n <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getEnvironmentConfig()\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Metadata Input -->\n <div class=\"cqa-mb-2 cqa-w-1/2 cqa-pr-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[12px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Metadata\n </label>\n <cqa-custom-input\n [placeholder]=\"'Text Input'\"\n [value]=\"aiAgentForm.get('metadata')?.value\"\n [fullWidth]=\"true\"\n (valueChange)=\"aiAgentForm.get('metadata')?.setValue($event)\">\n </cqa-custom-input>\n </div>\n\n <!-- Description Input -->\n <div class=\"cqa-w-1/2 cqa-pl-2 \">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[12px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Description\n </label>\n <cqa-custom-input\n [placeholder]=\"'Text Input'\"\n [value]=\"aiAgentForm.get('description')?.value\"\n [fullWidth]=\"true\"\n (valueChange)=\"aiAgentForm.get('description')?.setValue($event)\">\n </cqa-custom-input>\n </div>\n </div>\n\n\n <!-- Advanced Section -->\n <div class=\"cqa-mb-2\">\n <button\n type=\"button\"\n class=\"cqa-flex cqa-items-center cqa-justify-between cqa-w-full cqa-text-left cqa-text-[12px] cqa-font-medium cqa-text-gray-700 cqa-py-2 cqa-border-b cqa-border-gray-200\"\n (click)=\"toggleAdvanced()\">\n <span class=\"cqa-text-[10px]\">Advanced</span>\n <mat-icon class=\"cqa-text-lg cqa-transition-transform\" [class.cqa-rotate-180]=\"showAdvanced\">\n expand_more\n </mat-icon>\n </button>\n <div *ngIf=\"showAdvanced\" class=\" cqa-custom-form-fields cqa-flex cqa-flex-col\">\n <!-- Continue on Error -->\n <div>\n <span class=\"cqa-text-[10px] cqa-font-medium cqa-text-[#737373]\">Continue on Error</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <cqa-custom-toggle\n [checked]=\"aiAgentForm.get('continueOnError')?.value || false\"\n (checkedChange)=\"aiAgentForm.get('continueOnError')?.setValue($event)\">\n </cqa-custom-toggle>\n <label class=\"cqa-text-[12px] cqa-font-normal cqa-text-[#0A0A0A]\">\n Don't fail the test if this step fails.\n </label>\n </div>\n\n <!-- Disabled -->\n <div>\n <span class=\"cqa-text-[10px] cqa-font-medium cqa-text-[#737373]\">Disabled</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-mb-4\">\n <cqa-custom-toggle\n [checked]=\"aiAgentForm.get('disabled')?.value || false\"\n (checkedChange)=\"aiAgentForm.get('disabled')?.setValue($event)\">\n </cqa-custom-toggle>\n <label class=\"cqa-text-[12px] cqa-font-normal cqa-text-[#0A0A0A]\">\n Skip this step during execution.\n </label>\n </div>\n\n <!-- Retry Count -->\n <div class=\"cqa-flex cqa-flex-col cqa-mb-4\">\n <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n Retry Count\n </label>\n <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getRetryCountConfig()\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Iframe locator -->\n <div class=\"cqa-flex cqa-flex-col cqa-mb-4\">\n <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n Iframe locator\n </label>\n <cqa-dynamic-select class=\"cqa-text-[#414146]\" [form]=\"aiAgentForm\" [config]=\"getIframeLocatorConfig()\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Other Locators -->\n <div class=\"cqa-flex cqa-flex-col cqa-mb-4\">\n <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n Other Locators\n </label>\n <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getOtherLocatorsConfig()\">\n </cqa-dynamic-select>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"cqa-flex cqa-w-full cqa-gap-2 cqa-mt-auto cqa-pt-4 cqa-border-t cqa-border-gray-200\">\n <cqa-button class=\"cqa-w-1/2 cqa-rounded-[10px]\" variant=\"outlined\" text=\"Cancel\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button class=\"cqa-border-solid cqa-rounded-[9px] cqa-w-1/2 cqa-border cqa-border-[#3F43EE]\" variant=\"filled\" text=\"Create Step\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCreateStep()\">\n </cqa-button>\n </div>\n</div>\n\n", components: [{ type: i2.CustomTextareaComponent, selector: "cqa-custom-textarea", inputs: ["label", "placeholder", "value", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "rows", "cols", "resize", "textareaInlineStyle", "labelInlineStyle", "customClass"], outputs: ["valueChange", "blurred", "focused"] }, { type: i3.DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: ["form", "config"], outputs: ["selectionChange", "selectClick", "searchChange", "loadMore"] }, { type: i4.CustomInputComponent, selector: "cqa-custom-input", inputs: ["label", "type", "placeholder", "value", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "inputInlineStyle", "labelInlineStyle"], outputs: ["valueChange", "blurred", "focused", "enterPressed"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i6.CustomToggleComponent, selector: "cqa-custom-toggle", inputs: ["checked", "disabled", "ariaLabel"], outputs: ["checkedChange", "change"] }, { type: i7.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
118
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StepBuilderAiAgentComponent, decorators: [{
119
+ type: Component,
120
+ args: [{ selector: 'cqa-step-builder-ai-agent', host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-flex cqa-flex-col cqa-bg-white cqa-px-4 cqa-py-2\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n Create AI Step\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-max-h-[500px] cqa-overflow-y-auto\">\n <!-- What should the agent achieve? -->\n <div class=\"cqa-mb-6\">\n <label class=\"cqa-text-[12px] cqa-font-medium cqa-text-gray-700 cqa-mb-1 cqa-block\">\n What should the agent achieve?\n </label>\n <cqa-custom-textarea\n class=\"cqa-step-builder-ai-agent-textarea\"\n [placeholder]=\"'What should the agent achieve?'\"\n [value]=\"aiAgentForm.get('query')?.value\"\n [fullWidth]=\"true\"\n [rows]=\"4\"\n (valueChange)=\"aiAgentForm.get('query')?.setValue($event)\">\n </cqa-custom-textarea>\n <p class=\"cqa-text-[10px] cqa-text-[#0A0A0A] \">\n Tip: Use numbered steps or bullet points for complex tasks.\n </p>\n </div>\n <div class=\"cqa-flex cqa-flex-wrap cqa-custom-form-fields\">\n <!-- Type Dropdown -->\n <div class=\"cqa-mb-6 cqa-w-1/2 cqa-pr-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[12px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Type\n </label>\n <cqa-dynamic-select class=\"cqa-w-full\" [form]=\"aiAgentForm\" [config]=\"getTypeConfig()\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Environments Dropdown -->\n <div class=\"cqa-mb-6 cqa-w-1/2 cqa-pl-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[12px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Envioronments\n </label>\n <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getEnvironmentConfig()\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Metadata Input -->\n <div class=\"cqa-mb-2 cqa-w-1/2 cqa-pr-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[12px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Metadata\n </label>\n <cqa-custom-input\n [placeholder]=\"'Text Input'\"\n [value]=\"aiAgentForm.get('metadata')?.value\"\n [fullWidth]=\"true\"\n (valueChange)=\"aiAgentForm.get('metadata')?.setValue($event)\">\n </cqa-custom-input>\n </div>\n\n <!-- Description Input -->\n <div class=\"cqa-w-1/2 cqa-pl-2 \">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[12px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Description\n </label>\n <cqa-custom-input\n [placeholder]=\"'Text Input'\"\n [value]=\"aiAgentForm.get('description')?.value\"\n [fullWidth]=\"true\"\n (valueChange)=\"aiAgentForm.get('description')?.setValue($event)\">\n </cqa-custom-input>\n </div>\n </div>\n\n\n <!-- Advanced Section -->\n <div class=\"cqa-mb-2\">\n <button\n type=\"button\"\n class=\"cqa-flex cqa-items-center cqa-justify-between cqa-w-full cqa-text-left cqa-text-[12px] cqa-font-medium cqa-text-gray-700 cqa-py-2 cqa-border-b cqa-border-gray-200\"\n (click)=\"toggleAdvanced()\">\n <span class=\"cqa-text-[10px]\">Advanced</span>\n <mat-icon class=\"cqa-text-lg cqa-transition-transform\" [class.cqa-rotate-180]=\"showAdvanced\">\n expand_more\n </mat-icon>\n </button>\n <div *ngIf=\"showAdvanced\" class=\" cqa-custom-form-fields cqa-flex cqa-flex-col\">\n <!-- Continue on Error -->\n <div>\n <span class=\"cqa-text-[10px] cqa-font-medium cqa-text-[#737373]\">Continue on Error</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <cqa-custom-toggle\n [checked]=\"aiAgentForm.get('continueOnError')?.value || false\"\n (checkedChange)=\"aiAgentForm.get('continueOnError')?.setValue($event)\">\n </cqa-custom-toggle>\n <label class=\"cqa-text-[12px] cqa-font-normal cqa-text-[#0A0A0A]\">\n Don't fail the test if this step fails.\n </label>\n </div>\n\n <!-- Disabled -->\n <div>\n <span class=\"cqa-text-[10px] cqa-font-medium cqa-text-[#737373]\">Disabled</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-mb-4\">\n <cqa-custom-toggle\n [checked]=\"aiAgentForm.get('disabled')?.value || false\"\n (checkedChange)=\"aiAgentForm.get('disabled')?.setValue($event)\">\n </cqa-custom-toggle>\n <label class=\"cqa-text-[12px] cqa-font-normal cqa-text-[#0A0A0A]\">\n Skip this step during execution.\n </label>\n </div>\n\n <!-- Retry Count -->\n <div class=\"cqa-flex cqa-flex-col cqa-mb-4\">\n <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n Retry Count\n </label>\n <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getRetryCountConfig()\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Iframe locator -->\n <div class=\"cqa-flex cqa-flex-col cqa-mb-4\">\n <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n Iframe locator\n </label>\n <cqa-dynamic-select class=\"cqa-text-[#414146]\" [form]=\"aiAgentForm\" [config]=\"getIframeLocatorConfig()\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Other Locators -->\n <div class=\"cqa-flex cqa-flex-col cqa-mb-4\">\n <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n Other Locators\n </label>\n <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getOtherLocatorsConfig()\">\n </cqa-dynamic-select>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"cqa-flex cqa-w-full cqa-gap-2 cqa-mt-auto cqa-pt-4 cqa-border-t cqa-border-gray-200\">\n <cqa-button class=\"cqa-w-1/2 cqa-rounded-[10px]\" variant=\"outlined\" text=\"Cancel\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button class=\"cqa-border-solid cqa-rounded-[9px] cqa-w-1/2 cqa-border cqa-border-[#3F43EE]\" variant=\"filled\" text=\"Create Step\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCreateStep()\">\n </cqa-button>\n </div>\n</div>\n\n", styles: [] }]
121
+ }], ctorParameters: function () { return [{ type: i1.FormBuilder }]; }, propDecorators: { typeOptions: [{
122
+ type: Input
123
+ }], environmentOptions: [{
124
+ type: Input
125
+ }], retryCountOptions: [{
126
+ type: Input
127
+ }], iframeLocatorOptions: [{
128
+ type: Input
129
+ }], otherLocatorsOptions: [{
130
+ type: Input
131
+ }], createStep: [{
132
+ type: Output
133
+ }], cancelled: [{
134
+ type: Output
135
+ }] } });
136
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1idWlsZGVyLWFpLWFnZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc3RlcC1idWlsZGVyL3N0ZXAtYnVpbGRlci1haS1hZ2VudC9zdGVwLWJ1aWxkZXItYWktYWdlbnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zdGVwLWJ1aWxkZXIvc3RlcC1idWlsZGVyLWFpLWFnZW50L3N0ZXAtYnVpbGRlci1haS1hZ2VudC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBMEIsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7QUFzQnBFLE1BQU0sT0FBTywyQkFBMkI7SUF5QnRDLFlBQW9CLEVBQWU7UUFBZixPQUFFLEdBQUYsRUFBRSxDQUFhO1FBeEJuQyxnQ0FBZ0M7UUFDdkIsZ0JBQVcsR0FBbUIsRUFBRSxDQUFDO1FBRTFDLHdDQUF3QztRQUMvQix1QkFBa0IsR0FBbUIsRUFBRSxDQUFDO1FBRWpELHVDQUF1QztRQUM5QixzQkFBaUIsR0FBbUIsRUFBRSxDQUFDO1FBRWhELDBDQUEwQztRQUNqQyx5QkFBb0IsR0FBbUIsRUFBRSxDQUFDO1FBRW5ELDBDQUEwQztRQUNqQyx5QkFBb0IsR0FBbUIsRUFBRSxDQUFDO1FBRW5ELGdDQUFnQztRQUN0QixlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7UUFFM0QsMEJBQTBCO1FBQ2hCLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRy9DLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBRzVCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDL0IsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDaEMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDL0IsWUFBWSxFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDdkMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ2QsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ2pCLGVBQWUsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUN4QixRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDakIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ2hCLGFBQWEsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNuQixhQUFhLEVBQUUsQ0FBQyxFQUFFLENBQUM7U0FDcEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFFBQVE7UUFDTiwyQkFBMkI7SUFDN0IsQ0FBQztJQUVELGFBQWE7UUFDWCxPQUFPO1lBQ0wsR0FBRyxFQUFFLE1BQU07WUFDWCxXQUFXLEVBQUUsYUFBYTtZQUMxQixRQUFRLEVBQUUsS0FBSztZQUNmLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVztTQUMxQixDQUFDO0lBQ0osQ0FBQztJQUVELG9CQUFvQjtRQUNsQixPQUFPO1lBQ0wsR0FBRyxFQUFFLGNBQWM7WUFDbkIsV0FBVyxFQUFFLG9CQUFvQjtZQUNqQyxRQUFRLEVBQUUsS0FBSztZQUNmLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLE9BQU8sRUFBRSxJQUFJLENBQUMsa0JBQWtCO1NBQ2pDLENBQUM7SUFDSixDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLE9BQU87WUFDTCxHQUFHLEVBQUUsWUFBWTtZQUNqQixXQUFXLEVBQUUsZ0RBQWdEO1lBQzdELFFBQVEsRUFBRSxLQUFLO1lBQ2YsVUFBVSxFQUFFLElBQUk7WUFDaEIsT0FBTyxFQUFFLElBQUksQ0FBQyxpQkFBaUI7U0FDaEMsQ0FBQztJQUNKLENBQUM7SUFFRCxzQkFBc0I7UUFDcEIsT0FBTztZQUNMLEdBQUcsRUFBRSxlQUFlO1lBQ3BCLFdBQVcsRUFBRSxnREFBZ0Q7WUFDN0QsUUFBUSxFQUFFLEtBQUs7WUFDZixVQUFVLEVBQUUsSUFBSTtZQUNoQixPQUFPLEVBQUUsSUFBSSxDQUFDLG9CQUFvQjtTQUNuQyxDQUFDO0lBQ0osQ0FBQztJQUVELHNCQUFzQjtRQUNwQixPQUFPO1lBQ0wsR0FBRyxFQUFFLGVBQWU7WUFDcEIsV0FBVyxFQUFFLGdEQUFnRDtZQUM3RCxRQUFRLEVBQUUsS0FBSztZQUNmLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLE9BQU8sRUFBRSxJQUFJLENBQUMsb0JBQW9CO1NBQ25DLENBQUM7SUFDSixDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUU7WUFDMUIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDekMsTUFBTSxRQUFRLEdBQW9CO2dCQUNoQyxLQUFLLEVBQUUsU0FBUyxDQUFDLEtBQUssSUFBSSxFQUFFO2dCQUM1QixJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksSUFBSSxFQUFFO2dCQUMxQixZQUFZLEVBQUUsU0FBUyxDQUFDLFlBQVksSUFBSSxFQUFFO2dCQUMxQyxRQUFRLEVBQUUsU0FBUyxDQUFDLFFBQVEsSUFBSSxFQUFFO2dCQUNsQyxXQUFXLEVBQUUsU0FBUyxDQUFDLFdBQVcsSUFBSSxFQUFFO2dCQUN4QyxlQUFlLEVBQUUsU0FBUyxDQUFDLGVBQWUsSUFBSSxLQUFLO2dCQUNuRCxRQUFRLEVBQUUsU0FBUyxDQUFDLFFBQVEsSUFBSSxLQUFLO2dCQUNyQyxVQUFVLEVBQUUsU0FBUyxDQUFDLFVBQVUsSUFBSSxFQUFFO2dCQUN0QyxhQUFhLEVBQUUsU0FBUyxDQUFDLGFBQWEsSUFBSSxFQUFFO2dCQUM1QyxhQUFhLEVBQUUsU0FBUyxDQUFDLGFBQWEsSUFBSSxFQUFFO2FBQzdDLENBQUM7WUFDRixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNoQztJQUNILENBQUM7O3dIQXZIVSwyQkFBMkI7NEdBQTNCLDJCQUEyQiwrWEN2QnhDLG0zTUF3SkE7MkZEaklhLDJCQUEyQjtrQkFOdkMsU0FBUzsrQkFDRSwyQkFBMkIsUUFHL0IsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFO2tHQUlyQixXQUFXO3NCQUFuQixLQUFLO2dCQUdHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFHRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBR0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUdHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFHSSxVQUFVO3NCQUFuQixNQUFNO2dCQUdHLFNBQVM7c0JBQWxCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnLCBTZWxlY3RPcHRpb24gfSBmcm9tICcuLi8uLi9keW5hbWljLXNlbGVjdC9keW5hbWljLXNlbGVjdC1maWVsZC5jb21wb25lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFpQWdlbnRGb3JtRGF0YSB7XG4gIHF1ZXJ5OiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgZW52aXJvbm1lbnRzOiBzdHJpbmc7XG4gIG1ldGFkYXRhPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgY29udGludWVPbkVycm9yPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICByZXRyeUNvdW50Pzogc3RyaW5nO1xuICBpZnJhbWVMb2NhdG9yPzogc3RyaW5nO1xuICBvdGhlckxvY2F0b3JzPzogc3RyaW5nO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtc3RlcC1idWlsZGVyLWFpLWFnZW50JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N0ZXAtYnVpbGRlci1haS1hZ2VudC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW10sXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfVxufSlcbmV4cG9ydCBjbGFzcyBTdGVwQnVpbGRlckFpQWdlbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAvKiogT3B0aW9ucyBmb3IgdHlwZSBkcm9wZG93biAqL1xuICBASW5wdXQoKSB0eXBlT3B0aW9uczogU2VsZWN0T3B0aW9uW10gPSBbXTtcblxuICAvKiogT3B0aW9ucyBmb3IgZW52aXJvbm1lbnRzIGRyb3Bkb3duICovXG4gIEBJbnB1dCgpIGVudmlyb25tZW50T3B0aW9uczogU2VsZWN0T3B0aW9uW10gPSBbXTtcblxuICAvKiogT3B0aW9ucyBmb3IgcmV0cnkgY291bnQgZHJvcGRvd24gKi9cbiAgQElucHV0KCkgcmV0cnlDb3VudE9wdGlvbnM6IFNlbGVjdE9wdGlvbltdID0gW107XG5cbiAgLyoqIE9wdGlvbnMgZm9yIGlmcmFtZSBsb2NhdG9yIGRyb3Bkb3duICovXG4gIEBJbnB1dCgpIGlmcmFtZUxvY2F0b3JPcHRpb25zOiBTZWxlY3RPcHRpb25bXSA9IFtdO1xuXG4gIC8qKiBPcHRpb25zIGZvciBvdGhlciBsb2NhdG9ycyBkcm9wZG93biAqL1xuICBASW5wdXQoKSBvdGhlckxvY2F0b3JzT3B0aW9uczogU2VsZWN0T3B0aW9uW10gPSBbXTtcblxuICAvKiogRW1pdCB3aGVuIHN0ZXAgaXMgY3JlYXRlZCAqL1xuICBAT3V0cHV0KCkgY3JlYXRlU3RlcCA9IG5ldyBFdmVudEVtaXR0ZXI8QWlBZ2VudEZvcm1EYXRhPigpO1xuXG4gIC8qKiBFbWl0IHdoZW4gY2FuY2VsbGVkICovXG4gIEBPdXRwdXQoKSBjYW5jZWxsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgYWlBZ2VudEZvcm06IEZvcm1Hcm91cDtcbiAgc2hvd0FkdmFuY2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIpIHtcbiAgICB0aGlzLmFpQWdlbnRGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBxdWVyeTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIHR5cGU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICBlbnZpcm9ubWVudHM6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICBtZXRhZGF0YTogWycnXSxcbiAgICAgIGRlc2NyaXB0aW9uOiBbJyddLFxuICAgICAgY29udGludWVPbkVycm9yOiBbZmFsc2VdLFxuICAgICAgZGlzYWJsZWQ6IFtmYWxzZV0sXG4gICAgICByZXRyeUNvdW50OiBbJyddLFxuICAgICAgaWZyYW1lTG9jYXRvcjogWycnXSxcbiAgICAgIG90aGVyTG9jYXRvcnM6IFsnJ11cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIENvbXBvbmVudCBpbml0aWFsaXphdGlvblxuICB9XG5cbiAgZ2V0VHlwZUNvbmZpZygpOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcge1xuICAgIHJldHVybiB7XG4gICAgICBrZXk6ICd0eXBlJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnU2VsZWN0IHR5cGUnLFxuICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgc2VhcmNoYWJsZTogZmFsc2UsXG4gICAgICBvcHRpb25zOiB0aGlzLnR5cGVPcHRpb25zXG4gICAgfTtcbiAgfVxuXG4gIGdldEVudmlyb25tZW50Q29uZmlnKCk6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleTogJ2Vudmlyb25tZW50cycsXG4gICAgICBwbGFjZWhvbGRlcjogJ1NlbGVjdCBlbnZpcm9ubWVudCcsXG4gICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICBzZWFyY2hhYmxlOiBmYWxzZSxcbiAgICAgIG9wdGlvbnM6IHRoaXMuZW52aXJvbm1lbnRPcHRpb25zXG4gICAgfTtcbiAgfVxuXG4gIGdldFJldHJ5Q291bnRDb25maWcoKTogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAga2V5OiAncmV0cnlDb3VudCcsXG4gICAgICBwbGFjZWhvbGRlcjogJ0R5bmFtaWMgc2VhcmNoIHNlbGVjdG9yIGZyb20gbGlicmFyeSBvciBtYW51YWwnLFxuICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgc2VhcmNoYWJsZTogdHJ1ZSxcbiAgICAgIG9wdGlvbnM6IHRoaXMucmV0cnlDb3VudE9wdGlvbnNcbiAgICB9O1xuICB9XG5cbiAgZ2V0SWZyYW1lTG9jYXRvckNvbmZpZygpOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcge1xuICAgIHJldHVybiB7XG4gICAgICBrZXk6ICdpZnJhbWVMb2NhdG9yJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnRHluYW1pYyBzZWFyY2ggc2VsZWN0b3IgZnJvbSBsaWJyYXJ5IG9yIG1hbnVhbCcsXG4gICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICBzZWFyY2hhYmxlOiB0cnVlLFxuICAgICAgb3B0aW9uczogdGhpcy5pZnJhbWVMb2NhdG9yT3B0aW9uc1xuICAgIH07XG4gIH1cblxuICBnZXRPdGhlckxvY2F0b3JzQ29uZmlnKCk6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleTogJ290aGVyTG9jYXRvcnMnLFxuICAgICAgcGxhY2Vob2xkZXI6ICdEeW5hbWljIHNlYXJjaCBzZWxlY3RvciBmcm9tIGxpYnJhcnkgb3IgbWFudWFsJyxcbiAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgIHNlYXJjaGFibGU6IHRydWUsXG4gICAgICBvcHRpb25zOiB0aGlzLm90aGVyTG9jYXRvcnNPcHRpb25zXG4gICAgfTtcbiAgfVxuXG4gIHRvZ2dsZUFkdmFuY2VkKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0FkdmFuY2VkID0gIXRoaXMuc2hvd0FkdmFuY2VkO1xuICB9XG5cbiAgb25DYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy5jYW5jZWxsZWQuZW1pdCgpO1xuICB9XG5cbiAgb25DcmVhdGVTdGVwKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFpQWdlbnRGb3JtLnZhbGlkKSB7XG4gICAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLmFpQWdlbnRGb3JtLnZhbHVlO1xuICAgICAgY29uc3Qgc3RlcERhdGE6IEFpQWdlbnRGb3JtRGF0YSA9IHtcbiAgICAgICAgcXVlcnk6IGZvcm1WYWx1ZS5xdWVyeSB8fCAnJyxcbiAgICAgICAgdHlwZTogZm9ybVZhbHVlLnR5cGUgfHwgJycsXG4gICAgICAgIGVudmlyb25tZW50czogZm9ybVZhbHVlLmVudmlyb25tZW50cyB8fCAnJyxcbiAgICAgICAgbWV0YWRhdGE6IGZvcm1WYWx1ZS5tZXRhZGF0YSB8fCAnJyxcbiAgICAgICAgZGVzY3JpcHRpb246IGZvcm1WYWx1ZS5kZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgICAgY29udGludWVPbkVycm9yOiBmb3JtVmFsdWUuY29udGludWVPbkVycm9yIHx8IGZhbHNlLFxuICAgICAgICBkaXNhYmxlZDogZm9ybVZhbHVlLmRpc2FibGVkIHx8IGZhbHNlLFxuICAgICAgICByZXRyeUNvdW50OiBmb3JtVmFsdWUucmV0cnlDb3VudCB8fCAnJyxcbiAgICAgICAgaWZyYW1lTG9jYXRvcjogZm9ybVZhbHVlLmlmcmFtZUxvY2F0b3IgfHwgJycsXG4gICAgICAgIG90aGVyTG9jYXRvcnM6IGZvcm1WYWx1ZS5vdGhlckxvY2F0b3JzIHx8ICcnXG4gICAgICB9O1xuICAgICAgdGhpcy5jcmVhdGVTdGVwLmVtaXQoc3RlcERhdGEpO1xuICAgIH1cbiAgfVxufVxuXG4iLCI8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1iZy13aGl0ZSBjcWEtcHgtNCBjcWEtcHktMlwiPlxuICA8IS0tIEhlYWRlciAtLT5cbiAgPGgyIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LWJsYWNrLTEwMCBjcWEtbWItNFwiPlxuICAgIENyZWF0ZSBBSSBTdGVwXG4gIDwvaDI+XG5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZmxleC0xIGNxYS1tYXgtaC1bNTAwcHhdIGNxYS1vdmVyZmxvdy15LWF1dG9cIj5cbiAgICA8IS0tIFdoYXQgc2hvdWxkIHRoZSBhZ2VudCBhY2hpZXZlPyAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLW1iLTZcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtZ3JheS03MDAgY3FhLW1iLTEgY3FhLWJsb2NrXCI+XG4gICAgICAgIFdoYXQgc2hvdWxkIHRoZSBhZ2VudCBhY2hpZXZlP1xuICAgICAgPC9sYWJlbD5cbiAgICAgIDxjcWEtY3VzdG9tLXRleHRhcmVhXG4gICAgICAgY2xhc3M9XCJjcWEtc3RlcC1idWlsZGVyLWFpLWFnZW50LXRleHRhcmVhXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidXaGF0IHNob3VsZCB0aGUgYWdlbnQgYWNoaWV2ZT8nXCJcbiAgICAgICAgW3ZhbHVlXT1cImFpQWdlbnRGb3JtLmdldCgncXVlcnknKT8udmFsdWVcIlxuICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICBbcm93c109XCI0XCJcbiAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImFpQWdlbnRGb3JtLmdldCgncXVlcnknKT8uc2V0VmFsdWUoJGV2ZW50KVwiPlxuICAgICAgPC9jcWEtY3VzdG9tLXRleHRhcmVhPlxuICAgICAgPHAgY2xhc3M9XCJjcWEtdGV4dC1bMTBweF0gY3FhLXRleHQtWyMwQTBBMEFdIFwiPlxuICAgICAgICBUaXA6IFVzZSBudW1iZXJlZCBzdGVwcyBvciBidWxsZXQgcG9pbnRzIGZvciBjb21wbGV4IHRhc2tzLlxuICAgICAgPC9wPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC13cmFwIGNxYS1jdXN0b20tZm9ybS1maWVsZHNcIj5cbiAgICA8IS0tIFR5cGUgRHJvcGRvd24gLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1tYi02IGNxYS13LTEvMiBjcWEtcHItMlwiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLWxlYWRpbmctWzEwMCVdIGNxYS1ibG9jayBjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMTYxNjE3XSBjcWEtbWItMVwiPlxuICAgICAgICBUeXBlXG4gICAgICA8L2xhYmVsPlxuICAgICAgPGNxYS1keW5hbWljLXNlbGVjdCBjbGFzcz1cImNxYS13LWZ1bGxcIiBbZm9ybV09XCJhaUFnZW50Rm9ybVwiIFtjb25maWddPVwiZ2V0VHlwZUNvbmZpZygpXCI+XG4gICAgICA8L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRW52aXJvbm1lbnRzIERyb3Bkb3duIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtbWItNiBjcWEtdy0xLzIgY3FhLXBsLTJcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS1sZWFkaW5nLVsxMDAlXSBjcWEtYmxvY2sgY3FhLXRleHQtWzEycHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzE2MTYxN10gY3FhLW1iLTFcIj5cbiAgICAgICAgRW52aW9yb25tZW50c1xuICAgICAgPC9sYWJlbD5cbiAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3QgW2Zvcm1dPVwiYWlBZ2VudEZvcm1cIiBbY29uZmlnXT1cImdldEVudmlyb25tZW50Q29uZmlnKClcIj5cbiAgICAgIDwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBNZXRhZGF0YSBJbnB1dCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLW1iLTIgY3FhLXctMS8yIGNxYS1wci0yXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtbGVhZGluZy1bMTAwJV0gY3FhLWJsb2NrIGNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyMxNjE2MTddIGNxYS1tYi0xXCI+XG4gICAgICAgIE1ldGFkYXRhXG4gICAgICA8L2xhYmVsPlxuICAgICAgPGNxYS1jdXN0b20taW5wdXRcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidUZXh0IElucHV0J1wiXG4gICAgICAgIFt2YWx1ZV09XCJhaUFnZW50Rm9ybS5nZXQoJ21ldGFkYXRhJyk/LnZhbHVlXCJcbiAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImFpQWdlbnRGb3JtLmdldCgnbWV0YWRhdGEnKT8uc2V0VmFsdWUoJGV2ZW50KVwiPlxuICAgICAgPC9jcWEtY3VzdG9tLWlucHV0PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBEZXNjcmlwdGlvbiBJbnB1dCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLXctMS8yIGNxYS1wbC0yIFwiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLWxlYWRpbmctWzEwMCVdIGNxYS1ibG9jayBjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMTYxNjE3XSBjcWEtbWItMVwiPlxuICAgICAgICBEZXNjcmlwdGlvblxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxjcWEtY3VzdG9tLWlucHV0XG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCInVGV4dCBJbnB1dCdcIlxuICAgICAgICBbdmFsdWVdPVwiYWlBZ2VudEZvcm0uZ2V0KCdkZXNjcmlwdGlvbicpPy52YWx1ZVwiXG4gICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgICh2YWx1ZUNoYW5nZSk9XCJhaUFnZW50Rm9ybS5nZXQoJ2Rlc2NyaXB0aW9uJyk/LnNldFZhbHVlKCRldmVudClcIj5cbiAgICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuXG4gICAgPCEtLSBBZHZhbmNlZCBTZWN0aW9uIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtbWItMlwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLXctZnVsbCBjcWEtdGV4dC1sZWZ0IGNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtZ3JheS03MDAgY3FhLXB5LTIgY3FhLWJvcmRlci1iIGNxYS1ib3JkZXItZ3JheS0yMDBcIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWR2YW5jZWQoKVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XVwiPkFkdmFuY2VkPC9zcGFuPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1sZyBjcWEtdHJhbnNpdGlvbi10cmFuc2Zvcm1cIiBbY2xhc3MuY3FhLXJvdGF0ZS0xODBdPVwic2hvd0FkdmFuY2VkXCI+XG4gICAgICAgICAgZXhwYW5kX21vcmVcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGRpdiAqbmdJZj1cInNob3dBZHZhbmNlZFwiIGNsYXNzPVwiIGNxYS1jdXN0b20tZm9ybS1maWVsZHMgY3FhLWZsZXggY3FhLWZsZXgtY29sXCI+XG4gICAgICAgIDwhLS0gQ29udGludWUgb24gRXJyb3IgLS0+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTBweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjNzM3MzczXVwiPkNvbnRpbnVlIG9uIEVycm9yPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yXCI+XG4gICAgICAgICAgPGNxYS1jdXN0b20tdG9nZ2xlXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJhaUFnZW50Rm9ybS5nZXQoJ2NvbnRpbnVlT25FcnJvcicpPy52YWx1ZSB8fCBmYWxzZVwiXG4gICAgICAgICAgICAoY2hlY2tlZENoYW5nZSk9XCJhaUFnZW50Rm9ybS5nZXQoJ2NvbnRpbnVlT25FcnJvcicpPy5zZXRWYWx1ZSgkZXZlbnQpXCI+XG4gICAgICAgICAgPC9jcWEtY3VzdG9tLXRvZ2dsZT5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtbm9ybWFsIGNxYS10ZXh0LVsjMEEwQTBBXVwiPlxuICAgICAgICAgICAgRG9uJ3QgZmFpbCB0aGUgdGVzdCBpZiB0aGlzIHN0ZXAgZmFpbHMuXG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBEaXNhYmxlZCAtLT5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyM3MzczNzNdXCI+RGlzYWJsZWQ8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLW1iLTRcIj5cbiAgICAgICAgICA8Y3FhLWN1c3RvbS10b2dnbGVcbiAgICAgICAgICAgIFtjaGVja2VkXT1cImFpQWdlbnRGb3JtLmdldCgnZGlzYWJsZWQnKT8udmFsdWUgfHwgZmFsc2VcIlxuICAgICAgICAgICAgKGNoZWNrZWRDaGFuZ2UpPVwiYWlBZ2VudEZvcm0uZ2V0KCdkaXNhYmxlZCcpPy5zZXRWYWx1ZSgkZXZlbnQpXCI+XG4gICAgICAgICAgPC9jcWEtY3VzdG9tLXRvZ2dsZT5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtbm9ybWFsIGNxYS10ZXh0LVsjMEEwQTBBXVwiPlxuICAgICAgICAgICAgU2tpcCB0aGlzIHN0ZXAgZHVyaW5nIGV4ZWN1dGlvbi5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIFJldHJ5IENvdW50IC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1tYi00XCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLWxlYWRpbmctWzEwMCVdIGNxYS10ZXh0LVsxNHB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyMxNjE2MTddIGNxYS1tYi0xIGNxYS1ibG9ja1wiPlxuICAgICAgICAgICAgUmV0cnkgQ291bnRcbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3QgW2Zvcm1dPVwiYWlBZ2VudEZvcm1cIiBbY29uZmlnXT1cImdldFJldHJ5Q291bnRDb25maWcoKVwiPlxuICAgICAgICAgIDwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIElmcmFtZSBsb2NhdG9yIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1tYi00XCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLWxlYWRpbmctWzEwMCVdIGNxYS10ZXh0LVsxNHB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyMxNjE2MTddIGNxYS1tYi0xIGNxYS1ibG9ja1wiPlxuICAgICAgICAgICAgSWZyYW1lIGxvY2F0b3JcbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3QgY2xhc3M9XCJjcWEtdGV4dC1bIzQxNDE0Nl1cIiBbZm9ybV09XCJhaUFnZW50Rm9ybVwiIFtjb25maWddPVwiZ2V0SWZyYW1lTG9jYXRvckNvbmZpZygpXCI+XG4gICAgICAgICAgPC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gT3RoZXIgTG9jYXRvcnMgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLW1iLTRcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtbGVhZGluZy1bMTAwJV0gY3FhLXRleHQtWzE0cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzE2MTYxN10gY3FhLW1iLTEgY3FhLWJsb2NrXCI+XG4gICAgICAgICAgICBPdGhlciBMb2NhdG9yc1xuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdCBbZm9ybV09XCJhaUFnZW50Rm9ybVwiIFtjb25maWddPVwiZ2V0T3RoZXJMb2NhdG9yc0NvbmZpZygpXCI+XG4gICAgICAgICAgPC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gQWN0aW9uIEJ1dHRvbnMgLS0+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtdy1mdWxsIGNxYS1nYXAtMiBjcWEtbXQtYXV0byBjcWEtcHQtNCBjcWEtYm9yZGVyLXQgY3FhLWJvcmRlci1ncmF5LTIwMFwiPlxuICAgIDxjcWEtYnV0dG9uIGNsYXNzPVwiY3FhLXctMS8yIGNxYS1yb3VuZGVkLVsxMHB4XVwiIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIHRleHQ9XCJDYW5jZWxcIiBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS1mbGV4LTEgY3FhLXctZnVsbCdcIlxuICAgICAgKGNsaWNrZWQpPVwib25DYW5jZWwoKVwiPlxuICAgIDwvY3FhLWJ1dHRvbj5cbiAgICA8Y3FhLWJ1dHRvbiBjbGFzcz1cImNxYS1ib3JkZXItc29saWQgY3FhLXJvdW5kZWQtWzlweF0gY3FhLXctMS8yIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1bIzNGNDNFRV1cIiB2YXJpYW50PVwiZmlsbGVkXCIgdGV4dD1cIkNyZWF0ZSBTdGVwXCIgW2N1c3RvbUNsYXNzXT1cIidjcWEtZmxleC0xIGNxYS13LWZ1bGwnXCJcbiAgICAgIChjbGlja2VkKT1cIm9uQ3JlYXRlU3RlcCgpXCI+XG4gICAgPC9jcWEtYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG4iXX0=