@cqa-lib/cqa-ui 1.1.388 → 1.1.389
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.
- package/esm2020/lib/add-prerequisite-cases-section/add-prerequisite-cases-section.component.mjs +11 -3
- package/fesm2015/cqa-lib-cqa-ui.mjs +11 -2
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +10 -2
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/add-prerequisite-cases-section/add-prerequisite-cases-section.component.d.ts +2 -0
- package/package.json +1 -1
package/esm2020/lib/add-prerequisite-cases-section/add-prerequisite-cases-section.component.mjs
CHANGED
|
@@ -124,6 +124,14 @@ export class AddPrerequisiteCasesSectionComponent {
|
|
|
124
124
|
}
|
|
125
125
|
this.cdr.markForCheck();
|
|
126
126
|
}
|
|
127
|
+
/** True when the row at the given index has a selected value */
|
|
128
|
+
rowHasValue(index) {
|
|
129
|
+
if (!this.form || !this.rows.length || index < 0 || index >= this.rows.length)
|
|
130
|
+
return false;
|
|
131
|
+
const row = this.rows[index];
|
|
132
|
+
const val = this.form.get(row.key)?.value;
|
|
133
|
+
return val != null && val !== '';
|
|
134
|
+
}
|
|
127
135
|
/** True when every row has a non-empty value (no placeholders) */
|
|
128
136
|
allRowsHaveValues() {
|
|
129
137
|
if (!this.form || !this.rows.length)
|
|
@@ -169,10 +177,10 @@ export class AddPrerequisiteCasesSectionComponent {
|
|
|
169
177
|
}
|
|
170
178
|
}
|
|
171
179
|
AddPrerequisiteCasesSectionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AddPrerequisiteCasesSectionComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
172
|
-
AddPrerequisiteCasesSectionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: AddPrerequisiteCasesSectionComponent, selector: "cqa-add-prerequisite-cases-section", inputs: { expanded: "expanded", form: "form", rows: "rows", options: "options", getSelectConfig: "getSelectConfig", label: "label", infoTooltip: "infoTooltip", addAnotherText: "addAnotherText", updateText: "updateText", cancelText: "cancelText", addTriggerText: "addTriggerText", hideAddPrerequisite: "hideAddPrerequisite", updateDisabled: "updateDisabled", isUpdating: "isUpdating", enableServerSearch: "enableServerSearch", hasMoreOptions: "hasMoreOptions", isLoadingOptions: "isLoadingOptions", selectFirstValidationMessage: "selectFirstValidationMessage" }, outputs: { expandedChange: "expandedChange", addRow: "addRow", removeRow: "removeRow", rowsReordered: "rowsReordered", update: "update", cancel: "cancel", selectionChange: "selectionChange", searchOptions: "searchOptions", loadMoreOptions: "loadMoreOptions", prerequisitesChange: "prerequisitesChange" }, host: { classAttribute: "cqa-ui-root cqa-add-prerequisite-cases-section-host" }, queries: [{ propertyName: "selectBodyTpl", first: true, predicate: ["selectBody"], descendants: true, read: TemplateRef }], ngImport: i0, template: "<!-- Add Prerequisite trigger - only when collapsed and no rows (user must click to expand); hide when parent has prerequisites -->\n<ng-container *ngIf=\"rows.length === 0 && !expanded && !hideAddPrerequisite\">\n <div\n class=\"cqa-border-2 cqa-border-dashed cqa-border-[#D8D9FC] cqa-rounded-lg cqa-p-1 cqa-mt-4 cqa-bg-white cqa-cursor-pointer cqa-transition-all cqa-duration-200 cqa-ease-in-out cqa-flex cqa-items-center cqa-justify-center cqa-gap-2 cqa-w-full cqa-hover:cqa-border-[#9999ee] cqa-hover:cqa-bg-[#f8f8ff] cqa-active:cqa-border-[#7c7ce0] cqa-active:cqa-bg-[#eff6ff]\"\n (click)=\"onAddPrerequisiteClick()\">\n <mat-icon class=\"cqa-text-[12px] cqa-w-[12px] cqa-h-[12px] cqa-text-[#3F43EE]\">add</mat-icon>\n <span class=\"cqa-font-regular cqa-font-inter cqa-text-sm cqa-text-[#3F43EE]\">{{ addTriggerText }}</span>\n </div>\n</ng-container>\n\n<!-- Collapsed summary when we have rows but expanded=false -->\n<ng-container *ngIf=\"rows.length > 0 && !expanded\">\n <div\n class=\"cqa-border-2 cqa-border-dashed cqa-border-[#D8D9FC] cqa-rounded-lg cqa-p-1.5 cqa-mt-4 cqa-bg-white cqa-cursor-pointer cqa-transition-all cqa-duration-200 cqa-ease-in-out cqa-flex cqa-items-center cqa-justify-between cqa-min-h-[27px] cqa-hover:cqa-border-[#9ca3af] cqa-hover:cqa-bg-[#f9fafb] cqa-active:cqa-border-[#6366f1] cqa-active:cqa-bg-[#eff6ff]\"\n (click)=\"toggleExpanded(true)\">\n <span class=\"cqa-text-[#4a5565] cqa-font-normal cqa-font-inter cqa-text-xs\">{{ rows.length }} prerequisite{{ rows.length !== 1 ? 's' : '' }}</span>\n <mat-icon class=\"cqa-text-[14px] cqa-w-[14px] cqa-h-[14px] cqa-text-[#4a5565]\">expand_more</mat-icon>\n </div>\n</ng-container>\n\n<!-- Expanded form - when expanded=true (with or without rows; no Add Prerequisite trigger) -->\n<ng-container *ngIf=\"expanded\">\n <div class=\"cqa-p-3 cqa-bg-white cqa-border cqa-border-[#e5e7eb] cqa-rounded-lg\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-1.5 cqa-mb-3\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-[#374151] cqa-m-0 cqa-leading-none\">{{ label }}</label>\n <mat-icon class=\"cqa-inline-flex cqa-mt-1 cqa-items-center cqa-justify-center cqa-w-4 cqa-h-4 cqa-text-sm cqa-text-[#6b7280] cqa-cursor-help cqa-flex-shrink-0\" [matTooltip]=\"infoTooltip\" matTooltipPosition=\"above\" matTooltipShowDelay=\"300\">info</mat-icon>\n <button\n type=\"button\"\n class=\"cqa-ml-auto cqa-flex cqa-items-center cqa-justify-center cqa-w-7 cqa-h-7 cqa-p-0 cqa-bg-transparent cqa-border-none cqa-rounded-md cqa-text-[#6b7280] cqa-cursor-pointer cqa-hover:cqa-bg-[#f3f4f6] cqa-hover:cqa-text-[#374151]\"\n (click)=\"toggleExpanded(false)\"\n matTooltip=\"Close\">\n <mat-icon class=\"cqa-text-xl cqa-w-5 cqa-h-5\">expand_less</mat-icon>\n </button>\n </div>\n\n <div\n class=\"prerequisite-drop-list cqa-flex cqa-flex-col cqa-gap-2 cqa-mb-3\"\n [dndDropzone]=\"['prerequisite-row']\"\n dndEffectAllowed=\"move\"\n dndDragoverClass=\"dndDragover\"\n (dndDrop)=\"onDndDrop($event)\">\n <div dndPlaceholderRef class=\"prerequisite-drag-placeholder\">Drop here</div>\n <div\n *ngFor=\"let row of rows; let i = index; trackBy: trackByKey\"\n class=\"prerequisite-drag-item cqa-flex cqa-items-center cqa-gap-2\"\n [dndDraggable]=\"row\"\n [dndDisableIf]=\"rows.length <= 1\"\n dndEffectAllowed=\"move\"\n dndType=\"prerequisite-row\">\n <!-- 9-dot grid drag handle (only when multiple rows to reorder) -->\n <div *ngIf=\"rows.length > 1\" dndHandle class=\"cqa-flex cqa-flex-shrink-0 cqa-items-center cqa-justify-center cqa-cursor-grab cqa-text-[#6B7280] cqa-hover:cqa-text-[#111827] active:cqa-cursor-grabbing\" matTooltip=\"Drag to reorder\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"3\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"3\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"3\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n </svg>\n </div>\n\n <div class=\"cqa-flex-1 cqa-min-w-0\">\n <!-- Custom template (e.g. parent-provided cqa-dynamic-select) -->\n <ng-container *ngIf=\"selectBodyTpl\">\n <ng-container\n *ngTemplateOutlet=\"selectBodyTpl; context: {\n $implicit: row,\n index: i,\n form: form,\n config: getConfig(i)\n }\">\n </ng-container>\n </ng-container>\n <!-- Default: built-in cqa-dynamic-select -->\n <cqa-dynamic-select\n *ngIf=\"!selectBodyTpl && form\"\n [form]=\"form\"\n [config]=\"getConfig(i)\"\n (selectionChange)=\"onSelectionChange($event, i)\">\n </cqa-dynamic-select>\n </div>\n\n <button\n type=\"button\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-8 cqa-h-8 cqa-min-w-[32px] cqa-bg-transparent cqa-border-none cqa-rounded-md cqa-text-[#6b7280] cqa-cursor-pointer cqa-p-0 cqa-hover:cqa-bg-[#f3f4f6] cqa-hover:cqa-text-[#374151]\"\n (click)=\"onRemoveRow(i)\"\n matTooltip=\"Cancel\">\n <mat-icon class=\"cqa-text-lg cqa-w-[18px] cqa-h-[18px]\">close</mat-icon>\n </button>\n </div>\n </div>\n\n <div *ngIf=\"showAddAnotherValidation && !allRowsHaveValues()\" class=\"cqa-text-xs cqa-text-[#dc2626] cqa-mb-2\">\n {{ selectFirstValidationMessage }}\n </div>\n <!-- Add Prerequisite button only in empty state; hide when parent has prerequisites (e.g. collapsing after update) -->\n <div\n *ngIf=\"rows.length === 0 && !hideAddPrerequisite\"\n class=\"cqa-border-2 cqa-border-dashed cqa-border-[#ccccff] cqa-rounded-lg cqa-p-3 cqa-mb-3 cqa-bg-white cqa-cursor-pointer cqa-transition-all cqa-duration-200 cqa-ease-in-out cqa-flex cqa-items-center cqa-justify-center cqa-gap-2 cqa-min-h-[40px] cqa-w-full cqa-hover:cqa-border-[#9999ee] cqa-hover:cqa-bg-[#f8f8ff] cqa-active:cqa-border-[#7c7ce0] cqa-active:cqa-bg-[#eff6ff]\"\n (click)=\"onAddRow()\">\n <mat-icon class=\"cqa-text-[18px] cqa-w-[18px] cqa-h-[18px] cqa-text-[#3b82f6]\">add</mat-icon>\n <span class=\"cqa-font-medium cqa-font-inter cqa-text-sm cqa-text-[#3b82f6]\">{{ addTriggerText }}</span>\n </div>\n <!-- Add Another link when we already have at least one row -->\n <button\n *ngIf=\"rows.length > 0 && !hideAddPrerequisite\"\n type=\"button\"\n class=\"cqa-mb-3 cqa-flex cqa-items-center cqa-gap-2 cqa-bg-transparent cqa-border-none cqa-p-0 cqa-cursor-pointer cqa-font-inter cqa-text-sm cqa-text-[#4242DB] cqa-hover:cqa-underline\"\n (click)=\"onAddRow()\">\n <mat-icon class=\"cqa-text-[18px] cqa-w-[18px] cqa-h-[18px]\">add</mat-icon>\n <span>{{ addAnotherText }}</span>\n </button>\n <div class=\"cqa-flex cqa-gap-3 cqa-justify-end\">\n <button\n type=\"button\"\n class=\"cqa-py-2.5 cqa-px-4 cqa-bg-white cqa-text-[#374151] cqa-border cqa-border-[#d1d5db] cqa-rounded-md cqa-text-sm cqa-font-semibold cqa-cursor-pointer cqa-hover:cqa-bg-[#f9fafb]\"\n (click)=\"onCancel()\">\n {{ cancelText }}\n </button>\n <button\n type=\"button\"\n class=\"cqa-py-2.5 cqa-px-4 cqa-rounded-md cqa-text-sm cqa-font-semibold cqa-border-none cqa-cursor-pointer disabled:cqa-opacity-50 disabled:cqa-cursor-not-allowed cqa-bg-[#1a56db] cqa-text-white cqa-hover:cqa-bg-[#1647b8] disabled:cqa-bg-[#1a56db] cqa-flex cqa-items-center cqa-justify-center cqa-gap-2\"\n [style.pointer-events]=\"isUpdating ? 'none' : 'auto'\"\n [style.cursor]=\"isUpdating ? 'not-allowed' : 'pointer'\"\n [disabled]=\"isUpdateDisabled()\"\n (click)=\"onUpdate()\">\n <mat-spinner *ngIf=\"isUpdating\" diameter=\"16\" class=\"cqa-inline-block update-spinner-white\"></mat-spinner>\n <span>{{ updateText }}</span>\n </button>\n </div>\n </div>\n</ng-container>\n", components: [{ type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i2.DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: ["form", "config"], outputs: ["selectionChange", "selectClick", "searchChange", "loadMore", "addCustomValue"] }, { type: i3.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i6.DndDropzoneDirective, selector: "[dndDropzone]", inputs: ["dndDropzone", "dndEffectAllowed", "dndAllowExternal", "dndHorizontal", "dndDragoverClass", "dndDropzoneDisabledClass", "dndDisableIf", "dndDisableDropIf"], outputs: ["dndDragover", "dndDrop"] }, { type: i6.DndPlaceholderRefDirective, selector: "[dndPlaceholderRef]" }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.DndDraggableDirective, selector: "[dndDraggable]", inputs: ["dndDraggable", "dndEffectAllowed", "dndType", "dndDraggingClass", "dndDraggingSourceClass", "dndDraggableDisabledClass", "dndDragImageOffsetFunction", "dndDisableIf", "dndDisableDragIf"], outputs: ["dndStart", "dndDrag", "dndEnd", "dndMoved", "dndCopied", "dndLinked", "dndCanceled"] }, { type: i6.DndHandleDirective, selector: "[dndHandle]" }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
180
|
+
AddPrerequisiteCasesSectionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: AddPrerequisiteCasesSectionComponent, selector: "cqa-add-prerequisite-cases-section", inputs: { expanded: "expanded", form: "form", rows: "rows", options: "options", getSelectConfig: "getSelectConfig", label: "label", infoTooltip: "infoTooltip", addAnotherText: "addAnotherText", updateText: "updateText", cancelText: "cancelText", addTriggerText: "addTriggerText", hideAddPrerequisite: "hideAddPrerequisite", updateDisabled: "updateDisabled", isUpdating: "isUpdating", enableServerSearch: "enableServerSearch", hasMoreOptions: "hasMoreOptions", isLoadingOptions: "isLoadingOptions", selectFirstValidationMessage: "selectFirstValidationMessage" }, outputs: { expandedChange: "expandedChange", addRow: "addRow", removeRow: "removeRow", rowsReordered: "rowsReordered", update: "update", cancel: "cancel", selectionChange: "selectionChange", searchOptions: "searchOptions", loadMoreOptions: "loadMoreOptions", prerequisitesChange: "prerequisitesChange" }, host: { classAttribute: "cqa-ui-root cqa-add-prerequisite-cases-section-host" }, queries: [{ propertyName: "selectBodyTpl", first: true, predicate: ["selectBody"], descendants: true, read: TemplateRef }], ngImport: i0, template: "<!-- Add Prerequisite trigger - only when collapsed and no rows (user must click to expand); hide when parent has prerequisites -->\n<ng-container *ngIf=\"rows.length === 0 && !expanded && !hideAddPrerequisite\">\n <div\n class=\"cqa-border-2 cqa-border-dashed cqa-border-[#D8D9FC] cqa-rounded-lg cqa-p-1 cqa-mt-4 cqa-bg-white cqa-cursor-pointer cqa-transition-all cqa-duration-200 cqa-ease-in-out cqa-flex cqa-items-center cqa-justify-center cqa-gap-2 cqa-w-full cqa-hover:cqa-border-[#9999ee] cqa-hover:cqa-bg-[#f8f8ff] cqa-active:cqa-border-[#7c7ce0] cqa-active:cqa-bg-[#eff6ff]\"\n (click)=\"onAddPrerequisiteClick()\">\n <mat-icon class=\"cqa-text-[12px] cqa-w-[12px] cqa-h-[12px] cqa-text-[#3F43EE]\">add</mat-icon>\n <span class=\"cqa-font-regular cqa-font-inter cqa-text-sm cqa-text-[#3F43EE]\">{{ addTriggerText }}</span>\n </div>\n</ng-container>\n\n<!-- Collapsed summary when we have rows but expanded=false -->\n<ng-container *ngIf=\"rows.length > 0 && !expanded\">\n <div\n class=\"cqa-border-2 cqa-border-dashed cqa-border-[#D8D9FC] cqa-rounded-lg cqa-p-1.5 cqa-mt-4 cqa-bg-white cqa-cursor-pointer cqa-transition-all cqa-duration-200 cqa-ease-in-out cqa-flex cqa-items-center cqa-justify-between cqa-min-h-[27px] cqa-hover:cqa-border-[#9ca3af] cqa-hover:cqa-bg-[#f9fafb] cqa-active:cqa-border-[#6366f1] cqa-active:cqa-bg-[#eff6ff]\"\n (click)=\"toggleExpanded(true)\">\n <span class=\"cqa-text-[#4a5565] cqa-font-normal cqa-font-inter cqa-text-xs\">{{ rows.length }} prerequisite{{ rows.length !== 1 ? 's' : '' }}</span>\n <mat-icon class=\"cqa-text-[14px] cqa-w-[14px] cqa-h-[14px] cqa-text-[#4a5565]\">expand_more</mat-icon>\n </div>\n</ng-container>\n\n<!-- Expanded form - when expanded=true (with or without rows; no Add Prerequisite trigger) -->\n<ng-container *ngIf=\"expanded\">\n <div class=\"cqa-p-3 cqa-bg-white cqa-border cqa-border-[#e5e7eb] cqa-rounded-lg\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-1.5 cqa-mb-3\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-[#374151] cqa-m-0 cqa-leading-none\">{{ label }}</label>\n <mat-icon class=\"cqa-inline-flex cqa-mt-1 cqa-items-center cqa-justify-center cqa-w-4 cqa-h-4 cqa-text-sm cqa-text-[#6b7280] cqa-cursor-help cqa-flex-shrink-0\" [matTooltip]=\"infoTooltip\" matTooltipPosition=\"above\" matTooltipShowDelay=\"300\">info</mat-icon>\n <button\n type=\"button\"\n class=\"cqa-ml-auto cqa-flex cqa-items-center cqa-justify-center cqa-w-7 cqa-h-7 cqa-p-0 cqa-bg-transparent cqa-border-none cqa-rounded-md cqa-text-[#6b7280] cqa-cursor-pointer cqa-hover:cqa-bg-[#f3f4f6] cqa-hover:cqa-text-[#374151]\"\n (click)=\"toggleExpanded(false)\"\n matTooltip=\"Close\">\n <mat-icon class=\"cqa-text-xl cqa-w-5 cqa-h-5\">expand_less</mat-icon>\n </button>\n </div>\n\n <div\n class=\"prerequisite-drop-list cqa-flex cqa-flex-col cqa-gap-2 cqa-mb-3\"\n [dndDropzone]=\"['prerequisite-row']\"\n dndEffectAllowed=\"move\"\n dndDragoverClass=\"dndDragover\"\n (dndDrop)=\"onDndDrop($event)\">\n <div dndPlaceholderRef class=\"prerequisite-drag-placeholder\">Drop here</div>\n <div\n *ngFor=\"let row of rows; let i = index; trackBy: trackByKey\"\n class=\"prerequisite-drag-item cqa-flex cqa-items-center cqa-gap-2\"\n [dndDraggable]=\"row\"\n [dndDisableIf]=\"rows.length <= 1\"\n dndEffectAllowed=\"move\"\n dndType=\"prerequisite-row\">\n <!-- 9-dot grid drag handle (only when multiple rows to reorder) -->\n <div *ngIf=\"rows.length > 1\" dndHandle class=\"cqa-flex cqa-flex-shrink-0 cqa-items-center cqa-justify-center cqa-cursor-grab cqa-text-[#6B7280] cqa-hover:cqa-text-[#111827] active:cqa-cursor-grabbing\" matTooltip=\"Drag to reorder\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"3\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"3\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"3\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n </svg>\n </div>\n\n <div class=\"cqa-flex-1 cqa-min-w-0\">\n <!-- Custom template (e.g. parent-provided cqa-dynamic-select) -->\n <ng-container *ngIf=\"selectBodyTpl\">\n <ng-container\n *ngTemplateOutlet=\"selectBodyTpl; context: {\n $implicit: row,\n index: i,\n form: form,\n config: getConfig(i)\n }\">\n </ng-container>\n </ng-container>\n <!-- Default: built-in cqa-dynamic-select -->\n <cqa-dynamic-select\n *ngIf=\"!selectBodyTpl && form\"\n [form]=\"form\"\n [config]=\"getConfig(i)\"\n (selectionChange)=\"onSelectionChange($event, i)\">\n </cqa-dynamic-select>\n </div>\n\n <button\n *ngIf=\"rowHasValue(i)\"\n type=\"button\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-8 cqa-h-8 cqa-min-w-[32px] cqa-bg-transparent cqa-border-none cqa-rounded-md cqa-text-[#6b7280] cqa-cursor-pointer cqa-p-0 cqa-hover:cqa-bg-[#f3f4f6] cqa-hover:cqa-text-[#374151]\"\n (click)=\"onRemoveRow(i)\"\n matTooltip=\"Remove Prerequisite\">\n <mat-icon class=\"cqa-text-lg cqa-w-[18px] cqa-h-[18px]\">close</mat-icon>\n </button>\n </div>\n </div>\n\n <div *ngIf=\"showAddAnotherValidation && !allRowsHaveValues()\" class=\"cqa-text-xs cqa-text-[#dc2626] cqa-mb-2\">\n {{ selectFirstValidationMessage }}\n </div>\n <!-- Add Prerequisite button only in empty state; hide when parent has prerequisites (e.g. collapsing after update) -->\n <div\n *ngIf=\"rows.length === 0 && !hideAddPrerequisite\"\n class=\"cqa-border-2 cqa-border-dashed cqa-border-[#ccccff] cqa-rounded-lg cqa-p-3 cqa-mb-3 cqa-bg-white cqa-cursor-pointer cqa-transition-all cqa-duration-200 cqa-ease-in-out cqa-flex cqa-items-center cqa-justify-center cqa-gap-2 cqa-min-h-[40px] cqa-w-full cqa-hover:cqa-border-[#9999ee] cqa-hover:cqa-bg-[#f8f8ff] cqa-active:cqa-border-[#7c7ce0] cqa-active:cqa-bg-[#eff6ff]\"\n (click)=\"onAddRow()\">\n <mat-icon class=\"cqa-text-[18px] cqa-w-[18px] cqa-h-[18px] cqa-text-[#3b82f6]\">add</mat-icon>\n <span class=\"cqa-font-medium cqa-font-inter cqa-text-sm cqa-text-[#3b82f6]\">{{ addTriggerText }}</span>\n </div>\n <!-- Add Another link when we already have at least one row -->\n <button\n *ngIf=\"rows.length > 0 && !hideAddPrerequisite\"\n type=\"button\"\n class=\"cqa-mb-3 cqa-flex cqa-items-center cqa-gap-2 cqa-bg-transparent cqa-border-none cqa-p-0 cqa-cursor-pointer cqa-font-inter cqa-text-sm cqa-text-[#4242DB] cqa-hover:cqa-underline\"\n (click)=\"onAddRow()\">\n <mat-icon class=\"cqa-text-[18px] cqa-w-[18px] cqa-h-[18px]\">add</mat-icon>\n <span>{{ addAnotherText }}</span>\n </button>\n <div class=\"cqa-flex cqa-gap-3 cqa-justify-end\">\n <button\n type=\"button\"\n class=\"cqa-py-2.5 cqa-px-4 cqa-bg-white cqa-text-[#374151] cqa-border cqa-border-[#d1d5db] cqa-rounded-md cqa-text-sm cqa-font-semibold cqa-cursor-pointer cqa-hover:cqa-bg-[#f9fafb]\"\n (click)=\"onCancel()\">\n {{ cancelText }}\n </button>\n <button\n type=\"button\"\n class=\"cqa-py-2.5 cqa-px-4 cqa-rounded-md cqa-text-sm cqa-font-semibold cqa-border-none cqa-cursor-pointer disabled:cqa-opacity-50 disabled:cqa-cursor-not-allowed cqa-bg-[#1a56db] cqa-text-white cqa-hover:cqa-bg-[#1647b8] disabled:cqa-bg-[#1a56db] cqa-flex cqa-items-center cqa-justify-center cqa-gap-2\"\n [style.pointer-events]=\"isUpdating ? 'none' : 'auto'\"\n [style.cursor]=\"isUpdating ? 'not-allowed' : 'pointer'\"\n [disabled]=\"isUpdateDisabled()\"\n (click)=\"onUpdate()\">\n <mat-spinner *ngIf=\"isUpdating\" diameter=\"16\" class=\"cqa-inline-block update-spinner-white\"></mat-spinner>\n <span>{{ updateText }}</span>\n </button>\n </div>\n </div>\n</ng-container>\n", components: [{ type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i2.DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: ["form", "config"], outputs: ["selectionChange", "selectClick", "searchChange", "loadMore", "addCustomValue"] }, { type: i3.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i6.DndDropzoneDirective, selector: "[dndDropzone]", inputs: ["dndDropzone", "dndEffectAllowed", "dndAllowExternal", "dndHorizontal", "dndDragoverClass", "dndDropzoneDisabledClass", "dndDisableIf", "dndDisableDropIf"], outputs: ["dndDragover", "dndDrop"] }, { type: i6.DndPlaceholderRefDirective, selector: "[dndPlaceholderRef]" }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.DndDraggableDirective, selector: "[dndDraggable]", inputs: ["dndDraggable", "dndEffectAllowed", "dndType", "dndDraggingClass", "dndDraggingSourceClass", "dndDraggableDisabledClass", "dndDragImageOffsetFunction", "dndDisableIf", "dndDisableDragIf"], outputs: ["dndStart", "dndDrag", "dndEnd", "dndMoved", "dndCopied", "dndLinked", "dndCanceled"] }, { type: i6.DndHandleDirective, selector: "[dndHandle]" }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
173
181
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AddPrerequisiteCasesSectionComponent, decorators: [{
|
|
174
182
|
type: Component,
|
|
175
|
-
args: [{ selector: 'cqa-add-prerequisite-cases-section', changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'cqa-ui-root cqa-add-prerequisite-cases-section-host' }, template: "<!-- Add Prerequisite trigger - only when collapsed and no rows (user must click to expand); hide when parent has prerequisites -->\n<ng-container *ngIf=\"rows.length === 0 && !expanded && !hideAddPrerequisite\">\n <div\n class=\"cqa-border-2 cqa-border-dashed cqa-border-[#D8D9FC] cqa-rounded-lg cqa-p-1 cqa-mt-4 cqa-bg-white cqa-cursor-pointer cqa-transition-all cqa-duration-200 cqa-ease-in-out cqa-flex cqa-items-center cqa-justify-center cqa-gap-2 cqa-w-full cqa-hover:cqa-border-[#9999ee] cqa-hover:cqa-bg-[#f8f8ff] cqa-active:cqa-border-[#7c7ce0] cqa-active:cqa-bg-[#eff6ff]\"\n (click)=\"onAddPrerequisiteClick()\">\n <mat-icon class=\"cqa-text-[12px] cqa-w-[12px] cqa-h-[12px] cqa-text-[#3F43EE]\">add</mat-icon>\n <span class=\"cqa-font-regular cqa-font-inter cqa-text-sm cqa-text-[#3F43EE]\">{{ addTriggerText }}</span>\n </div>\n</ng-container>\n\n<!-- Collapsed summary when we have rows but expanded=false -->\n<ng-container *ngIf=\"rows.length > 0 && !expanded\">\n <div\n class=\"cqa-border-2 cqa-border-dashed cqa-border-[#D8D9FC] cqa-rounded-lg cqa-p-1.5 cqa-mt-4 cqa-bg-white cqa-cursor-pointer cqa-transition-all cqa-duration-200 cqa-ease-in-out cqa-flex cqa-items-center cqa-justify-between cqa-min-h-[27px] cqa-hover:cqa-border-[#9ca3af] cqa-hover:cqa-bg-[#f9fafb] cqa-active:cqa-border-[#6366f1] cqa-active:cqa-bg-[#eff6ff]\"\n (click)=\"toggleExpanded(true)\">\n <span class=\"cqa-text-[#4a5565] cqa-font-normal cqa-font-inter cqa-text-xs\">{{ rows.length }} prerequisite{{ rows.length !== 1 ? 's' : '' }}</span>\n <mat-icon class=\"cqa-text-[14px] cqa-w-[14px] cqa-h-[14px] cqa-text-[#4a5565]\">expand_more</mat-icon>\n </div>\n</ng-container>\n\n<!-- Expanded form - when expanded=true (with or without rows; no Add Prerequisite trigger) -->\n<ng-container *ngIf=\"expanded\">\n <div class=\"cqa-p-3 cqa-bg-white cqa-border cqa-border-[#e5e7eb] cqa-rounded-lg\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-1.5 cqa-mb-3\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-[#374151] cqa-m-0 cqa-leading-none\">{{ label }}</label>\n <mat-icon class=\"cqa-inline-flex cqa-mt-1 cqa-items-center cqa-justify-center cqa-w-4 cqa-h-4 cqa-text-sm cqa-text-[#6b7280] cqa-cursor-help cqa-flex-shrink-0\" [matTooltip]=\"infoTooltip\" matTooltipPosition=\"above\" matTooltipShowDelay=\"300\">info</mat-icon>\n <button\n type=\"button\"\n class=\"cqa-ml-auto cqa-flex cqa-items-center cqa-justify-center cqa-w-7 cqa-h-7 cqa-p-0 cqa-bg-transparent cqa-border-none cqa-rounded-md cqa-text-[#6b7280] cqa-cursor-pointer cqa-hover:cqa-bg-[#f3f4f6] cqa-hover:cqa-text-[#374151]\"\n (click)=\"toggleExpanded(false)\"\n matTooltip=\"Close\">\n <mat-icon class=\"cqa-text-xl cqa-w-5 cqa-h-5\">expand_less</mat-icon>\n </button>\n </div>\n\n <div\n class=\"prerequisite-drop-list cqa-flex cqa-flex-col cqa-gap-2 cqa-mb-3\"\n [dndDropzone]=\"['prerequisite-row']\"\n dndEffectAllowed=\"move\"\n dndDragoverClass=\"dndDragover\"\n (dndDrop)=\"onDndDrop($event)\">\n <div dndPlaceholderRef class=\"prerequisite-drag-placeholder\">Drop here</div>\n <div\n *ngFor=\"let row of rows; let i = index; trackBy: trackByKey\"\n class=\"prerequisite-drag-item cqa-flex cqa-items-center cqa-gap-2\"\n [dndDraggable]=\"row\"\n [dndDisableIf]=\"rows.length <= 1\"\n dndEffectAllowed=\"move\"\n dndType=\"prerequisite-row\">\n <!-- 9-dot grid drag handle (only when multiple rows to reorder) -->\n <div *ngIf=\"rows.length > 1\" dndHandle class=\"cqa-flex cqa-flex-shrink-0 cqa-items-center cqa-justify-center cqa-cursor-grab cqa-text-[#6B7280] cqa-hover:cqa-text-[#111827] active:cqa-cursor-grabbing\" matTooltip=\"Drag to reorder\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"3\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"3\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"3\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n </svg>\n </div>\n\n <div class=\"cqa-flex-1 cqa-min-w-0\">\n <!-- Custom template (e.g. parent-provided cqa-dynamic-select) -->\n <ng-container *ngIf=\"selectBodyTpl\">\n <ng-container\n *ngTemplateOutlet=\"selectBodyTpl; context: {\n $implicit: row,\n index: i,\n form: form,\n config: getConfig(i)\n }\">\n </ng-container>\n </ng-container>\n <!-- Default: built-in cqa-dynamic-select -->\n <cqa-dynamic-select\n *ngIf=\"!selectBodyTpl && form\"\n [form]=\"form\"\n [config]=\"getConfig(i)\"\n (selectionChange)=\"onSelectionChange($event, i)\">\n </cqa-dynamic-select>\n </div>\n\n <button\n type=\"button\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-8 cqa-h-8 cqa-min-w-[32px] cqa-bg-transparent cqa-border-none cqa-rounded-md cqa-text-[#6b7280] cqa-cursor-pointer cqa-p-0 cqa-hover:cqa-bg-[#f3f4f6] cqa-hover:cqa-text-[#374151]\"\n (click)=\"onRemoveRow(i)\"\n matTooltip=\"
|
|
183
|
+
args: [{ selector: 'cqa-add-prerequisite-cases-section', changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'cqa-ui-root cqa-add-prerequisite-cases-section-host' }, template: "<!-- Add Prerequisite trigger - only when collapsed and no rows (user must click to expand); hide when parent has prerequisites -->\n<ng-container *ngIf=\"rows.length === 0 && !expanded && !hideAddPrerequisite\">\n <div\n class=\"cqa-border-2 cqa-border-dashed cqa-border-[#D8D9FC] cqa-rounded-lg cqa-p-1 cqa-mt-4 cqa-bg-white cqa-cursor-pointer cqa-transition-all cqa-duration-200 cqa-ease-in-out cqa-flex cqa-items-center cqa-justify-center cqa-gap-2 cqa-w-full cqa-hover:cqa-border-[#9999ee] cqa-hover:cqa-bg-[#f8f8ff] cqa-active:cqa-border-[#7c7ce0] cqa-active:cqa-bg-[#eff6ff]\"\n (click)=\"onAddPrerequisiteClick()\">\n <mat-icon class=\"cqa-text-[12px] cqa-w-[12px] cqa-h-[12px] cqa-text-[#3F43EE]\">add</mat-icon>\n <span class=\"cqa-font-regular cqa-font-inter cqa-text-sm cqa-text-[#3F43EE]\">{{ addTriggerText }}</span>\n </div>\n</ng-container>\n\n<!-- Collapsed summary when we have rows but expanded=false -->\n<ng-container *ngIf=\"rows.length > 0 && !expanded\">\n <div\n class=\"cqa-border-2 cqa-border-dashed cqa-border-[#D8D9FC] cqa-rounded-lg cqa-p-1.5 cqa-mt-4 cqa-bg-white cqa-cursor-pointer cqa-transition-all cqa-duration-200 cqa-ease-in-out cqa-flex cqa-items-center cqa-justify-between cqa-min-h-[27px] cqa-hover:cqa-border-[#9ca3af] cqa-hover:cqa-bg-[#f9fafb] cqa-active:cqa-border-[#6366f1] cqa-active:cqa-bg-[#eff6ff]\"\n (click)=\"toggleExpanded(true)\">\n <span class=\"cqa-text-[#4a5565] cqa-font-normal cqa-font-inter cqa-text-xs\">{{ rows.length }} prerequisite{{ rows.length !== 1 ? 's' : '' }}</span>\n <mat-icon class=\"cqa-text-[14px] cqa-w-[14px] cqa-h-[14px] cqa-text-[#4a5565]\">expand_more</mat-icon>\n </div>\n</ng-container>\n\n<!-- Expanded form - when expanded=true (with or without rows; no Add Prerequisite trigger) -->\n<ng-container *ngIf=\"expanded\">\n <div class=\"cqa-p-3 cqa-bg-white cqa-border cqa-border-[#e5e7eb] cqa-rounded-lg\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-1.5 cqa-mb-3\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-[#374151] cqa-m-0 cqa-leading-none\">{{ label }}</label>\n <mat-icon class=\"cqa-inline-flex cqa-mt-1 cqa-items-center cqa-justify-center cqa-w-4 cqa-h-4 cqa-text-sm cqa-text-[#6b7280] cqa-cursor-help cqa-flex-shrink-0\" [matTooltip]=\"infoTooltip\" matTooltipPosition=\"above\" matTooltipShowDelay=\"300\">info</mat-icon>\n <button\n type=\"button\"\n class=\"cqa-ml-auto cqa-flex cqa-items-center cqa-justify-center cqa-w-7 cqa-h-7 cqa-p-0 cqa-bg-transparent cqa-border-none cqa-rounded-md cqa-text-[#6b7280] cqa-cursor-pointer cqa-hover:cqa-bg-[#f3f4f6] cqa-hover:cqa-text-[#374151]\"\n (click)=\"toggleExpanded(false)\"\n matTooltip=\"Close\">\n <mat-icon class=\"cqa-text-xl cqa-w-5 cqa-h-5\">expand_less</mat-icon>\n </button>\n </div>\n\n <div\n class=\"prerequisite-drop-list cqa-flex cqa-flex-col cqa-gap-2 cqa-mb-3\"\n [dndDropzone]=\"['prerequisite-row']\"\n dndEffectAllowed=\"move\"\n dndDragoverClass=\"dndDragover\"\n (dndDrop)=\"onDndDrop($event)\">\n <div dndPlaceholderRef class=\"prerequisite-drag-placeholder\">Drop here</div>\n <div\n *ngFor=\"let row of rows; let i = index; trackBy: trackByKey\"\n class=\"prerequisite-drag-item cqa-flex cqa-items-center cqa-gap-2\"\n [dndDraggable]=\"row\"\n [dndDisableIf]=\"rows.length <= 1\"\n dndEffectAllowed=\"move\"\n dndType=\"prerequisite-row\">\n <!-- 9-dot grid drag handle (only when multiple rows to reorder) -->\n <div *ngIf=\"rows.length > 1\" dndHandle class=\"cqa-flex cqa-flex-shrink-0 cqa-items-center cqa-justify-center cqa-cursor-grab cqa-text-[#6B7280] cqa-hover:cqa-text-[#111827] active:cqa-cursor-grabbing\" matTooltip=\"Drag to reorder\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"3\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"3\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"3\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n </svg>\n </div>\n\n <div class=\"cqa-flex-1 cqa-min-w-0\">\n <!-- Custom template (e.g. parent-provided cqa-dynamic-select) -->\n <ng-container *ngIf=\"selectBodyTpl\">\n <ng-container\n *ngTemplateOutlet=\"selectBodyTpl; context: {\n $implicit: row,\n index: i,\n form: form,\n config: getConfig(i)\n }\">\n </ng-container>\n </ng-container>\n <!-- Default: built-in cqa-dynamic-select -->\n <cqa-dynamic-select\n *ngIf=\"!selectBodyTpl && form\"\n [form]=\"form\"\n [config]=\"getConfig(i)\"\n (selectionChange)=\"onSelectionChange($event, i)\">\n </cqa-dynamic-select>\n </div>\n\n <button\n *ngIf=\"rowHasValue(i)\"\n type=\"button\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-8 cqa-h-8 cqa-min-w-[32px] cqa-bg-transparent cqa-border-none cqa-rounded-md cqa-text-[#6b7280] cqa-cursor-pointer cqa-p-0 cqa-hover:cqa-bg-[#f3f4f6] cqa-hover:cqa-text-[#374151]\"\n (click)=\"onRemoveRow(i)\"\n matTooltip=\"Remove Prerequisite\">\n <mat-icon class=\"cqa-text-lg cqa-w-[18px] cqa-h-[18px]\">close</mat-icon>\n </button>\n </div>\n </div>\n\n <div *ngIf=\"showAddAnotherValidation && !allRowsHaveValues()\" class=\"cqa-text-xs cqa-text-[#dc2626] cqa-mb-2\">\n {{ selectFirstValidationMessage }}\n </div>\n <!-- Add Prerequisite button only in empty state; hide when parent has prerequisites (e.g. collapsing after update) -->\n <div\n *ngIf=\"rows.length === 0 && !hideAddPrerequisite\"\n class=\"cqa-border-2 cqa-border-dashed cqa-border-[#ccccff] cqa-rounded-lg cqa-p-3 cqa-mb-3 cqa-bg-white cqa-cursor-pointer cqa-transition-all cqa-duration-200 cqa-ease-in-out cqa-flex cqa-items-center cqa-justify-center cqa-gap-2 cqa-min-h-[40px] cqa-w-full cqa-hover:cqa-border-[#9999ee] cqa-hover:cqa-bg-[#f8f8ff] cqa-active:cqa-border-[#7c7ce0] cqa-active:cqa-bg-[#eff6ff]\"\n (click)=\"onAddRow()\">\n <mat-icon class=\"cqa-text-[18px] cqa-w-[18px] cqa-h-[18px] cqa-text-[#3b82f6]\">add</mat-icon>\n <span class=\"cqa-font-medium cqa-font-inter cqa-text-sm cqa-text-[#3b82f6]\">{{ addTriggerText }}</span>\n </div>\n <!-- Add Another link when we already have at least one row -->\n <button\n *ngIf=\"rows.length > 0 && !hideAddPrerequisite\"\n type=\"button\"\n class=\"cqa-mb-3 cqa-flex cqa-items-center cqa-gap-2 cqa-bg-transparent cqa-border-none cqa-p-0 cqa-cursor-pointer cqa-font-inter cqa-text-sm cqa-text-[#4242DB] cqa-hover:cqa-underline\"\n (click)=\"onAddRow()\">\n <mat-icon class=\"cqa-text-[18px] cqa-w-[18px] cqa-h-[18px]\">add</mat-icon>\n <span>{{ addAnotherText }}</span>\n </button>\n <div class=\"cqa-flex cqa-gap-3 cqa-justify-end\">\n <button\n type=\"button\"\n class=\"cqa-py-2.5 cqa-px-4 cqa-bg-white cqa-text-[#374151] cqa-border cqa-border-[#d1d5db] cqa-rounded-md cqa-text-sm cqa-font-semibold cqa-cursor-pointer cqa-hover:cqa-bg-[#f9fafb]\"\n (click)=\"onCancel()\">\n {{ cancelText }}\n </button>\n <button\n type=\"button\"\n class=\"cqa-py-2.5 cqa-px-4 cqa-rounded-md cqa-text-sm cqa-font-semibold cqa-border-none cqa-cursor-pointer disabled:cqa-opacity-50 disabled:cqa-cursor-not-allowed cqa-bg-[#1a56db] cqa-text-white cqa-hover:cqa-bg-[#1647b8] disabled:cqa-bg-[#1a56db] cqa-flex cqa-items-center cqa-justify-center cqa-gap-2\"\n [style.pointer-events]=\"isUpdating ? 'none' : 'auto'\"\n [style.cursor]=\"isUpdating ? 'not-allowed' : 'pointer'\"\n [disabled]=\"isUpdateDisabled()\"\n (click)=\"onUpdate()\">\n <mat-spinner *ngIf=\"isUpdating\" diameter=\"16\" class=\"cqa-inline-block update-spinner-white\"></mat-spinner>\n <span>{{ updateText }}</span>\n </button>\n </div>\n </div>\n</ng-container>\n", styles: [] }]
|
|
176
184
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { expanded: [{
|
|
177
185
|
type: Input
|
|
178
186
|
}], form: [{
|
|
@@ -233,4 +241,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
233
241
|
}], prerequisitesChange: [{
|
|
234
242
|
type: Output
|
|
235
243
|
}] } });
|
|
236
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXByZXJlcXVpc2l0ZS1jYXNlcy1zZWN0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvYWRkLXByZXJlcXVpc2l0ZS1jYXNlcy1zZWN0aW9uL2FkZC1wcmVyZXF1aXNpdGUtY2FzZXMtc2VjdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2FkZC1wcmVyZXF1aXNpdGUtY2FzZXMtc2VjdGlvbi9hZGQtcHJlcmVxdWlzaXRlLWNhc2VzLXNlY3Rpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWix1QkFBdUIsRUFDdkIsWUFBWSxFQUNaLFdBQVcsR0FFWixNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7QUFzQnZCLE1BQU0sT0FBTyxvQ0FBb0M7SUF5Ri9DLFlBQW9CLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBeEYxQyx5REFBeUQ7UUFDaEQsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUsxQix1REFBdUQ7UUFDOUMsU0FBSSxHQUFzQixFQUFFLENBQUM7UUFFdEM7OztXQUdHO1FBQ00sWUFBTyxHQUFtQixFQUFFLENBQUM7UUFVdEMsZ0RBQWdEO1FBQ3ZDLFVBQUssR0FBRyxvQkFBb0IsQ0FBQztRQUV0QyxnQ0FBZ0M7UUFDdkIsZ0JBQVcsR0FBRyxpRUFBaUUsQ0FBQztRQUV6Rix3Q0FBd0M7UUFDL0IsbUJBQWMsR0FBRyxhQUFhLENBQUM7UUFFeEMsaUNBQWlDO1FBQ3hCLGVBQVUsR0FBRyxRQUFRLENBQUM7UUFFL0IsaUNBQWlDO1FBQ3hCLGVBQVUsR0FBRyxRQUFRLENBQUM7UUFFL0IsMkNBQTJDO1FBQ2xDLG1CQUFjLEdBQUcsa0JBQWtCLENBQUM7UUFFN0MscUlBQXFJO1FBQzVILHdCQUFtQixHQUFHLEtBQUssQ0FB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QUs7Z0JBR0csS0FBSztzQkFBYixLQUFLO2dCQUdHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBR0csY0FBYztzQkFBdEIsS0FBSztnQkFHRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBR0csY0FBYztzQkFBdEIsS0FBSztnQkFHRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBR0csY0FBYztzQkFBdEIsS0FBSztnQkFHRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFFRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHRyw0QkFBNEI7c0JBQXBDLEtBQUs7Z0JBRzZDLGFBQWE7c0JBQS9ELFlBQVk7dUJBQUMsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFPdkMsY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUVHLE1BQU07c0JBQWYsTUFBTTtnQkFFRyxNQUFNO3NCQUFmLE1BQU07Z0JBRUcsZUFBZTtzQkFBeEIsTUFBTTtnQkFFRyxhQUFhO3NCQUF0QixNQUFNO2dCQUVHLGVBQWU7c0JBQXhCLE1BQU07Z0JBRUcsbUJBQW1CO3NCQUE1QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb250ZW50Q2hpbGQsXG4gIFRlbXBsYXRlUmVmLFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEbmREcm9wRXZlbnQgfSBmcm9tICduZ3gtZHJhZy1kcm9wJztcbmltcG9ydCB7IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZywgU2VsZWN0T3B0aW9uIH0gZnJvbSAnLi4vZHluYW1pYy1zZWxlY3QvZHluYW1pYy1zZWxlY3QtZmllbGQuY29tcG9uZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBQcmVyZXF1aXNpdGVSb3cge1xuICBrZXk6IHN0cmluZztcbn1cblxuLyoqIEVtaXR0ZWQgd2hlbiBhbnkgcHJlcmVxdWlzaXRlIHNlbGVjdCBjaGFuZ2VzIC0gY29udGFpbnMgYWxsIGN1cnJlbnQgc2VsZWN0aW9ucyAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmVyZXF1aXNpdGVTZWxlY3Rpb24ge1xuICBrZXk6IHN0cmluZztcbiAgdmFsdWU6IHVua25vd247XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1hZGQtcHJlcmVxdWlzaXRlLWNhc2VzLXNlY3Rpb24nLFxuICB0ZW1wbGF0ZVVybDogJy4vYWRkLXByZXJlcXVpc2l0ZS1jYXNlcy1zZWN0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCBjcWEtYWRkLXByZXJlcXVpc2l0ZS1jYXNlcy1zZWN0aW9uLWhvc3QnIH0sXG59KVxuZXhwb3J0IGNsYXNzIEFkZFByZXJlcXVpc2l0ZUNhc2VzU2VjdGlvbkNvbXBvbmVudCB7XG4gIC8qKiBXaGV0aGVyIHRoZSBzZWN0aW9uIGlzIGV4cGFuZGVkIChzaG93aW5nIHRoZSBmb3JtKSAqL1xuICBASW5wdXQoKSBleHBhbmRlZCA9IGZhbHNlO1xuXG4gIC8qKiBGb3JtIGdyb3VwIGNvbnRhaW5pbmcgY29udHJvbHMgZm9yIGVhY2ggcm93IChrZXllZCBieSByb3cua2V5KSAqL1xuICBASW5wdXQoKSBmb3JtITogRm9ybUdyb3VwO1xuXG4gIC8qKiBBcnJheSBvZiByb3cgZGVzY3JpcHRvcnMsIGVhY2ggd2l0aCBhIHVuaXF1ZSBrZXkgKi9cbiAgQElucHV0KCkgcm93czogUHJlcmVxdWlzaXRlUm93W10gPSBbXTtcblxuICAvKipcbiAgICogUHJlcmVxdWlzaXRlIG9wdGlvbnMgZnJvbSBBUEkgKGUuZy4gdGVzdCBjYXNlcyB0byBjaG9vc2UgZnJvbSkuXG4gICAqIFBhc3NlZCB0byBnZXRTZWxlY3RDb25maWcgd2hlbiBidWlsZGluZyB0aGUgY29uZmlnIGZvciBlYWNoIHJvdy5cbiAgICovXG4gIEBJbnB1dCgpIG9wdGlvbnM6IFNlbGVjdE9wdGlvbltdID0gW107XG5cbiAgLyoqXG4gICAqIEZ1bmN0aW9uIHRvIGdldCB0aGUgZHluYW1pYyBzZWxlY3QgY29uZmlnIGZvciBhIGdpdmVuIHJvdyBpbmRleC5cbiAgICogUmVjZWl2ZXMgb3B0aW9uYWwgb3B0aW9ucyAoZnJvbSB0aGlzLm9wdGlvbnMgd2hlbiBwcm92aWRlZCkuXG4gICAqIEVhY2ggcm93IGNhbiBoYXZlIGRpZmZlcmVudCBvcHRpb25zLiBUbyBhdm9pZCBkdXBsaWNhdGVzLCBleGNsdWRlIG9wdGlvbnNcbiAgICogYWxyZWFkeSBzZWxlY3RlZCBpbiBvdGhlciByb3dzIChrZWVwIGN1cnJlbnQgcm93J3Mgc2VsZWN0aW9uIHNvIGl0IGRpc3BsYXlzKS5cbiAgICovXG4gIEBJbnB1dCgpIGdldFNlbGVjdENvbmZpZyE6IChpbmRleDogbnVtYmVyLCBvcHRpb25zPzogU2VsZWN0T3B0aW9uW10pID0+IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZztcblxuICAvKiogU2VjdGlvbiBsYWJlbCAoZS5nLiBcIlByZXJlcXVpc2l0ZSBDYXNlc1wiKSAqL1xuICBASW5wdXQoKSBsYWJlbCA9ICdQcmVyZXF1aXNpdGUgQ2FzZXMnO1xuXG4gIC8qKiBUb29sdGlwIGZvciB0aGUgaW5mbyBpY29uICovXG4gIEBJbnB1dCgpIGluZm9Ub29sdGlwID0gJ0FkZCBwcmVyZXF1aXNpdGUgdGVzdCBjYXNlcyB0aGF0IG11c3QgcnVuIGJlZm9yZSB0aGlzIHRlc3QgY2FzZSc7XG5cbiAgLyoqIFRleHQgZm9yIHRoZSBcIkFkZCBBbm90aGVyXCIgYnV0dG9uICovXG4gIEBJbnB1dCgpIGFkZEFub3RoZXJUZXh0ID0gJ0FkZCBBbm90aGVyJztcblxuICAvKiogVGV4dCBmb3IgdGhlIFVwZGF0ZSBidXR0b24gKi9cbiAgQElucHV0KCkgdXBkYXRlVGV4dCA9ICdVcGRhdGUnO1xuXG4gIC8qKiBUZXh0IGZvciB0aGUgQ2FuY2VsIGJ1dHRvbiAqL1xuICBASW5wdXQoKSBjYW5jZWxUZXh0ID0gJ0NhbmNlbCc7XG5cbiAgLyoqIFRleHQgZm9yIHRoZSBjb2xsYXBzZWQgXCJBZGRcIiB0cmlnZ2VyICovXG4gIEBJbnB1dCgpIGFkZFRyaWdnZXJUZXh0ID0gJ0FkZCBQcmVyZXF1aXNpdGUnO1xuXG4gIC8qKiBXaGVuIHRydWUsIGhpZGUgQWRkIFByZXJlcXVpc2l0ZSBidXR0b24gZXZlbiBpZiByb3dzIGFyZSBlbXB0eSAoZS5nLiB3aGVuIGNvbGxhcHNpbmcgYWZ0ZXIgdXBkYXRlIHdpdGggZXhpc3RpbmcgcHJlcmVxdWlzaXRlcykgKi9cbiAgQElucHV0KCkgaGlkZUFkZFByZXJlcXVpc2l0ZSA9IGZhbHNlO1xuXG4gIC8qKiBXaGVuIHByb3ZpZGVkLCBjb250cm9scyBVcGRhdGUgYnV0dG9uIGRpc2FibGVkIHN0YXRlLiBVc2UgZm9yIGRpcnR5LXN0YXRlIHZhbGlkYXRpb24gKGVuYWJsZSB3aGVuIGZvcm0gY2hhbmdlZCkuIFdoZW4gdW5kZWZpbmVkLCBmYWxscyBiYWNrIHRvICFhbGxSb3dzSGF2ZVZhbHVlcygpLiAqL1xuICBASW5wdXQoKSB1cGRhdGVEaXNhYmxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAvKiogV2hlbiB0cnVlLCBVcGRhdGUgYnV0dG9uIGlzIGRpc2FibGVkIGFuZCBzaG93cyBhIGxvYWRlciAoQVBJIGluIHByb2dyZXNzKSAqL1xuICBASW5wdXQoKSBpc1VwZGF0aW5nID0gZmFsc2U7XG5cbiAgLyoqIFdoZW4gdHJ1ZSwgcHJlcmVxdWlzaXRlIGRyb3Bkb3duIHVzZXMgc2VydmVyLXNpZGUgc2VhcmNoIGFuZCBsb2FkIG1vcmUgKGVtaXQgc2VhcmNoT3B0aW9ucyAvIGxvYWRNb3JlT3B0aW9ucykuICovXG4gIEBJbnB1dCgpIGVuYWJsZVNlcnZlclNlYXJjaCA9IGZhbHNlO1xuICAvKiogUGVyLXJvdzogd2hldGhlciBtb3JlIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBmb3IgbG9hZCBtb3JlLiBLZXkgPSByb3cgaW5kZXguICovXG4gIEBJbnB1dCgpIGhhc01vcmVPcHRpb25zOiBSZWNvcmQ8bnVtYmVyLCBib29sZWFuPiA9IHt9O1xuICAvKiogUGVyLXJvdzogdHJ1ZSB3aGlsZSBvcHRpb25zIGFyZSBsb2FkaW5nIGZvciB0aGF0IGRyb3Bkb3duLiBLZXkgPSByb3cgaW5kZXguICovXG4gIEBJbnB1dCgpIGlzTG9hZGluZ09wdGlvbnM6IFJlY29yZDxudW1iZXIsIGJvb2xlYW4+ID0ge307XG5cbiAgLyoqIFZhbGlkYXRpb24gbWVzc2FnZSBzaG93biB3aGVuIEFkZCBBbm90aGVyL1VwZGF0ZSBhcmUgZGlzYWJsZWQgKG5vdCBhbGwgcm93cyBoYXZlIHZhbHVlcykgKi9cbiAgQElucHV0KCkgc2VsZWN0Rmlyc3RWYWxpZGF0aW9uTWVzc2FnZSA9ICdQbGVhc2Ugc2VsZWN0IGEgcHJlcmVxdWlzaXRlIGZvciBlYWNoIHJvdyBmaXJzdCwgdGhlbiBjbGljayBBZGQgQW5vdGhlci4nO1xuXG4gIC8qKiBPcHRpb25hbCBjdXN0b20gdGVtcGxhdGUgZm9yIHRoZSBzZWxlY3Qgc2xvdC4gVXNlIG5nLXRlbXBsYXRlICNzZWxlY3RCb2R5IHdpdGggbGV0LXJvdywgbGV0LWluZGV4LCBsZXQtZm9ybSwgbGV0LWNvbmZpZy4gKi9cbiAgQENvbnRlbnRDaGlsZCgnc2VsZWN0Qm9keScsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgc2VsZWN0Qm9keVRwbD86IFRlbXBsYXRlUmVmPHtcbiAgICAkaW1wbGljaXQ6IFByZXJlcXVpc2l0ZVJvdztcbiAgICBpbmRleDogbnVtYmVyO1xuICAgIGZvcm06IEZvcm1Hcm91cDtcbiAgICBjb25maWc6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZztcbiAgfT47XG5cbiAgQE91dHB1dCgpIGV4cGFuZGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgYWRkUm93ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgcmVtb3ZlUm93ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSByb3dzUmVvcmRlcmVkID0gbmV3IEV2ZW50RW1pdHRlcjxQcmVyZXF1aXNpdGVSb3dbXT4oKTtcbiAgLyoqIEVtaXR0ZWQgd2hlbiBVcGRhdGUgYnV0dG9uIGlzIGNsaWNrZWQgKi9cbiAgQE91dHB1dCgpIHVwZGF0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqIEVtaXR0ZWQgd2hlbiBDYW5jZWwgYnV0dG9uIGlzIGNsaWNrZWQgKi9cbiAgQE91dHB1dCgpIGNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqIEVtaXR0ZWQgd2hlbiBhIHNpbmdsZSByb3cncyBzZWxlY3Rpb24gY2hhbmdlcyAqL1xuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IGtleTogc3RyaW5nOyB2YWx1ZTogdW5rbm93bjsgaW5kZXg6IG51bWJlciB9PigpO1xuICAvKiogRW1pdHRlZCB3aGVuIHVzZXIgc2VhcmNoZXMgaW4gcHJlcmVxdWlzaXRlIGRyb3Bkb3duIChzZXJ2ZXIgc2VhcmNoKS4gUGFyZW50IHNob3VsZCBmZXRjaCBvcHRpb25zIGFuZCB1cGRhdGUgb3B0aW9ucyBpbnB1dC4gKi9cbiAgQE91dHB1dCgpIHNlYXJjaE9wdGlvbnMgPSBuZXcgRXZlbnRFbWl0dGVyPHsgaW5kZXg6IG51bWJlcjsgcXVlcnk6IHN0cmluZyB9PigpO1xuICAvKiogRW1pdHRlZCB3aGVuIHVzZXIgc2Nyb2xscyB0byBsb2FkIG1vcmUgb3B0aW9ucy4gUGFyZW50IHNob3VsZCBhcHBlbmQgdG8gb3B0aW9ucyBhbmQgc2V0IGhhc01vcmVPcHRpb25zLiAqL1xuICBAT3V0cHV0KCkgbG9hZE1vcmVPcHRpb25zID0gbmV3IEV2ZW50RW1pdHRlcjx7IGluZGV4OiBudW1iZXI7IHF1ZXJ5OiBzdHJpbmcgfT4oKTtcbiAgLyoqIEVtaXR0ZWQgd2hlbiBhbnkgc2VsZWN0IGNoYW5nZXMgLSByZXR1cm5zIGFsbCBjdXJyZW50IHByZXJlcXVpc2l0ZSBzZWxlY3Rpb25zIGluIG9yZGVyICovXG4gIEBPdXRwdXQoKSBwcmVyZXF1aXNpdGVzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxQcmVyZXF1aXNpdGVTZWxlY3Rpb25bXT4oKTtcblxuICAvKiogU2V0IHRvIHRydWUgd2hlbiB1c2VyIGNsaWNrcyBBZGQgQW5vdGhlciB3aGlsZSBpbnZhbGlkIC0gc2hvd3MgdmFsaWRhdGlvbiBtZXNzYWdlICovXG4gIHNob3dBZGRBbm90aGVyVmFsaWRhdGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICB0b2dnbGVFeHBhbmRlZChzaG93OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5leHBhbmRlZCA9IHNob3c7XG4gICAgdGhpcy5leHBhbmRlZENoYW5nZS5lbWl0KHNob3cpO1xuICB9XG5cbiAgLyoqIENhbGxlZCB3aGVuIHVzZXIgY2xpY2tzIFwiQWRkIFByZXJlcXVpc2l0ZVwiIHdpdGggbm8gcm93cyAtIGV4cGFuZHMgYW5kIGFkZHMgZmlyc3Qgcm93ICovXG4gIG9uQWRkUHJlcmVxdWlzaXRlQ2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy50b2dnbGVFeHBhbmRlZCh0cnVlKTtcbiAgICB0aGlzLmFkZFJvdy5lbWl0KCk7XG4gIH1cblxuICBvbkFkZFJvdygpOiB2b2lkIHtcbiAgICAvLyBBbGxvdyBhZGRpbmcgZmlyc3Qgcm93IHdoZW4gZW1wdHkgKG5vIHZhbGlkYXRpb24gbmVlZGVkKVxuICAgIGlmICh0aGlzLnJvd3MubGVuZ3RoID4gMCAmJiAhdGhpcy5hbGxSb3dzSGF2ZVZhbHVlcygpKSB7XG4gICAgICB0aGlzLnNob3dBZGRBbm90aGVyVmFsaWRhdGlvbiA9IHRydWU7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zaG93QWRkQW5vdGhlclZhbGlkYXRpb24gPSBmYWxzZTtcbiAgICB0aGlzLmFkZFJvdy5lbWl0KCk7XG4gIH1cblxuICBvblJlbW92ZVJvdyhpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5yZW1vdmVSb3cuZW1pdChpbmRleCk7XG4gIH1cblxuICBvbkRuZERyb3AoZXZlbnQ6IERuZERyb3BFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5kYXRhID09IG51bGwgfHwgZXZlbnQuaW5kZXggPT0gbnVsbCkgcmV0dXJuO1xuICAgIGNvbnN0IGRyb3BSb3cgPSBldmVudC5kYXRhIGFzIFByZXJlcXVpc2l0ZVJvdztcbiAgICBsZXQgZHJvcEluZGV4ID0gZXZlbnQuaW5kZXg7XG4gICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5yb3dzLmZpbmRJbmRleCgocikgPT4gci5rZXkgPT09IGRyb3BSb3cua2V5KTtcbiAgICBpZiAoY3VycmVudEluZGV4IDwgMCkgcmV0dXJuO1xuICAgIGlmIChjdXJyZW50SW5kZXggPT09IGRyb3BJbmRleCkgcmV0dXJuO1xuXG4gICAgY29uc3QgbmV3Um93cyA9IFsuLi50aGlzLnJvd3NdO1xuICAgIG5ld1Jvd3Muc3BsaWNlKGN1cnJlbnRJbmRleCwgMSk7XG4gICAgLy8gSWYgbW92aW5nIGZvcndhcmQsIGRyb3BJbmRleCBzaGlmdHMgYWZ0ZXIgcmVtb3ZhbFxuICAgIGlmIChjdXJyZW50SW5kZXggPCBkcm9wSW5kZXgpIHtcbiAgICAgIGRyb3BJbmRleC0tO1xuICAgIH1cbiAgICBuZXdSb3dzLnNwbGljZShkcm9wSW5kZXgsIDAsIGRyb3BSb3cpO1xuICAgIHRoaXMucm93c1Jlb3JkZXJlZC5lbWl0KG5ld1Jvd3MpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgdHJhY2tCeUtleShfaTogbnVtYmVyLCByb3c6IFByZXJlcXVpc2l0ZVJvdyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJvdy5rZXk7XG4gIH1cblxuICBvblVwZGF0ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc1VwZGF0aW5nKSByZXR1cm47XG4gICAgdGhpcy51cGRhdGUuZW1pdCgpO1xuICB9XG5cbiAgb25DYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy5jYW5jZWwuZW1pdCgpO1xuICB9XG5cbiAgb25TZWxlY3Rpb25DaGFuZ2UoZXZlbnQ6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH0sIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHsgLi4uZXZlbnQsIGluZGV4IH0pO1xuICAgIHRoaXMuZW1pdEFsbFByZXJlcXVpc2l0ZXMoKTtcbiAgICBpZiAodGhpcy5hbGxSb3dzSGF2ZVZhbHVlcygpKSB7XG4gICAgICB0aGlzLnNob3dBZGRBbm90aGVyVmFsaWRhdGlvbiA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKiBUcnVlIHdoZW4gZXZlcnkgcm93IGhhcyBhIG5vbi1lbXB0eSB2YWx1ZSAobm8gcGxhY2Vob2xkZXJzKSAqL1xuICBhbGxSb3dzSGF2ZVZhbHVlcygpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZm9ybSB8fCAhdGhpcy5yb3dzLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLnJvd3MuZXZlcnkoKHJvdykgPT4ge1xuICAgICAgY29uc3QgdmFsID0gdGhpcy5mb3JtLmdldChyb3cua2V5KT8udmFsdWU7XG4gICAgICByZXR1cm4gdmFsICE9IG51bGwgJiYgdmFsICE9PSAnJztcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBDb21wdXRlZCBkaXNhYmxlZCBzdGF0ZSBmb3IgVXBkYXRlIGJ1dHRvbi4gV2hlbiBpc1VwZGF0aW5nIHdlIGRvIG5vdCBkaXNhYmxlIChzaG93IGxvYWRlciBvbmx5KTsgdXNlIHVwZGF0ZURpc2FibGVkIGZvciBvdGhlciBjYXNlcy4gKi9cbiAgaXNVcGRhdGVEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy51cGRhdGVEaXNhYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVEaXNhYmxlZDtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqIEVtaXRzIGFsbCBjdXJyZW50IHByZXJlcXVpc2l0ZSBzZWxlY3Rpb25zIChrZXkgKyB2YWx1ZSkgaW4gcm93IG9yZGVyICovXG4gIHByaXZhdGUgZW1pdEFsbFByZXJlcXVpc2l0ZXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmZvcm0gfHwgIXRoaXMucm93cy5sZW5ndGgpIHJldHVybjtcbiAgICBjb25zdCBzZWxlY3Rpb25zOiBQcmVyZXF1aXNpdGVTZWxlY3Rpb25bXSA9IHRoaXMucm93cy5tYXAoKHJvdykgPT4gKHtcbiAgICAgIGtleTogcm93LmtleSxcbiAgICAgIHZhbHVlOiB0aGlzLmZvcm0uZ2V0KHJvdy5rZXkpPy52YWx1ZSA/PyBudWxsLFxuICAgIH0pKTtcbiAgICB0aGlzLnByZXJlcXVpc2l0ZXNDaGFuZ2UuZW1pdChzZWxlY3Rpb25zKTtcbiAgfVxuXG4gIGdldENvbmZpZyhpbmRleDogbnVtYmVyKTogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnIHtcbiAgICBjb25zdCBvcHRzID0gdGhpcy5vcHRpb25zPy5sZW5ndGggPyB0aGlzLm9wdGlvbnMgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgYmFzZSA9IHRoaXMuZ2V0U2VsZWN0Q29uZmlnPy4oaW5kZXgsIG9wdHMpID8/IHsga2V5OiBgcm93XyR7aW5kZXh9YCwgb3B0aW9uczogdGhpcy5vcHRpb25zID8/IFtdIH07XG4gICAgaWYgKHRoaXMuZW5hYmxlU2VydmVyU2VhcmNoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlLFxuICAgICAgICBzZWFyY2hhYmxlOiB0cnVlLFxuICAgICAgICBzZXJ2ZXJTZWFyY2g6IHRydWUsXG4gICAgICAgIGluaXRpYWxGZXRjaE9uT3BlbjogdHJ1ZSxcbiAgICAgICAgaGFzTW9yZTogdGhpcy5oYXNNb3JlT3B0aW9uc1tpbmRleF0gPz8gZmFsc2UsXG4gICAgICAgIGlzTG9hZGluZzogdGhpcy5pc0xvYWRpbmdPcHRpb25zW2luZGV4XSA/PyBmYWxzZSxcbiAgICAgICAgb25TZWFyY2g6IChxKSA9PiB0aGlzLnNlYXJjaE9wdGlvbnMuZW1pdCh7IGluZGV4LCBxdWVyeTogcSA/PyAnJyB9KSxcbiAgICAgICAgb25Mb2FkTW9yZTogKHEpID0+IHRoaXMubG9hZE1vcmVPcHRpb25zLmVtaXQoeyBpbmRleCwgcXVlcnk6IHEgPz8gJycgfSksXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gYmFzZTtcbiAgfVxufVxuIiwiPCEtLSBBZGQgUHJlcmVxdWlzaXRlIHRyaWdnZXIgLSBvbmx5IHdoZW4gY29sbGFwc2VkIGFuZCBubyByb3dzICh1c2VyIG11c3QgY2xpY2sgdG8gZXhwYW5kKTsgaGlkZSB3aGVuIHBhcmVudCBoYXMgcHJlcmVxdWlzaXRlcyAtLT5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJyb3dzLmxlbmd0aCA9PT0gMCAmJiAhZXhwYW5kZWQgJiYgIWhpZGVBZGRQcmVyZXF1aXNpdGVcIj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiY3FhLWJvcmRlci0yIGNxYS1ib3JkZXItZGFzaGVkIGNxYS1ib3JkZXItWyNEOEQ5RkNdIGNxYS1yb3VuZGVkLWxnIGNxYS1wLTEgY3FhLW10LTQgY3FhLWJnLXdoaXRlIGNxYS1jdXJzb3ItcG9pbnRlciBjcWEtdHJhbnNpdGlvbi1hbGwgY3FhLWR1cmF0aW9uLTIwMCBjcWEtZWFzZS1pbi1vdXQgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLWdhcC0yICBjcWEtdy1mdWxsIGNxYS1ob3ZlcjpjcWEtYm9yZGVyLVsjOTk5OWVlXSBjcWEtaG92ZXI6Y3FhLWJnLVsjZjhmOGZmXSBjcWEtYWN0aXZlOmNxYS1ib3JkZXItWyM3YzdjZTBdIGNxYS1hY3RpdmU6Y3FhLWJnLVsjZWZmNmZmXVwiXG4gICAgKGNsaWNrKT1cIm9uQWRkUHJlcmVxdWlzaXRlQ2xpY2soKVwiPlxuICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtdy1bMTJweF0gY3FhLWgtWzEycHhdIGNxYS10ZXh0LVsjM0Y0M0VFXVwiPmFkZDwvbWF0LWljb24+XG4gICAgPHNwYW4gY2xhc3M9XCJjcWEtZm9udC1yZWd1bGFyIGNxYS1mb250LWludGVyIGNxYS10ZXh0LXNtIGNxYS10ZXh0LVsjM0Y0M0VFXVwiPnt7IGFkZFRyaWdnZXJUZXh0IH19PC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuXG48IS0tIENvbGxhcHNlZCBzdW1tYXJ5IHdoZW4gd2UgaGF2ZSByb3dzIGJ1dCBleHBhbmRlZD1mYWxzZSAtLT5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJyb3dzLmxlbmd0aCA+IDAgJiYgIWV4cGFuZGVkXCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cImNxYS1ib3JkZXItMiBjcWEtYm9yZGVyLWRhc2hlZCBjcWEtYm9yZGVyLVsjRDhEOUZDXSBjcWEtcm91bmRlZC1sZyBjcWEtcC0xLjUgY3FhLW10LTQgY3FhLWJnLXdoaXRlIGNxYS1jdXJzb3ItcG9pbnRlciBjcWEtdHJhbnNpdGlvbi1hbGwgY3FhLWR1cmF0aW9uLTIwMCBjcWEtZWFzZS1pbi1vdXQgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS1taW4taC1bMjdweF0gY3FhLWhvdmVyOmNxYS1ib3JkZXItWyM5Y2EzYWZdIGNxYS1ob3ZlcjpjcWEtYmctWyNmOWZhZmJdIGNxYS1hY3RpdmU6Y3FhLWJvcmRlci1bIzYzNjZmMV0gY3FhLWFjdGl2ZTpjcWEtYmctWyNlZmY2ZmZdXCJcbiAgICAoY2xpY2spPVwidG9nZ2xlRXhwYW5kZWQodHJ1ZSlcIj5cbiAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsjNGE1NTY1XSBjcWEtZm9udC1ub3JtYWwgY3FhLWZvbnQtaW50ZXIgY3FhLXRleHQteHNcIj57eyByb3dzLmxlbmd0aCB9fSBwcmVyZXF1aXNpdGV7eyByb3dzLmxlbmd0aCAhPT0gMSA/ICdzJyA6ICcnIH19PC9zcGFuPlxuICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS10ZXh0LVsxNHB4XSBjcWEtdy1bMTRweF0gY3FhLWgtWzE0cHhdIGNxYS10ZXh0LVsjNGE1NTY1XVwiPmV4cGFuZF9tb3JlPC9tYXQtaWNvbj5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cblxuPCEtLSBFeHBhbmRlZCBmb3JtIC0gd2hlbiBleHBhbmRlZD10cnVlICh3aXRoIG9yIHdpdGhvdXQgcm93czsgbm8gQWRkIFByZXJlcXVpc2l0ZSB0cmlnZ2VyKSAtLT5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJleHBhbmRlZFwiPlxuICA8ZGl2IGNsYXNzPVwiY3FhLXAtMyBjcWEtYmctd2hpdGUgY3FhLWJvcmRlciBjcWEtYm9yZGVyLVsjZTVlN2ViXSBjcWEtcm91bmRlZC1sZ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMS41IGNxYS1tYi0zXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyMzNzQxNTFdIGNxYS1tLTAgY3FhLWxlYWRpbmctbm9uZVwiPnt7IGxhYmVsIH19PC9sYWJlbD5cbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS1pbmxpbmUtZmxleCBjcWEtbXQtMSBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtdy00IGNxYS1oLTQgY3FhLXRleHQtc20gY3FhLXRleHQtWyM2YjcyODBdIGNxYS1jdXJzb3ItaGVscCBjcWEtZmxleC1zaHJpbmstMFwiIFttYXRUb29sdGlwXT1cImluZm9Ub29sdGlwXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIiBtYXRUb29sdGlwU2hvd0RlbGF5PVwiMzAwXCI+aW5mbzwvbWF0LWljb24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImNxYS1tbC1hdXRvIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS13LTcgY3FhLWgtNyBjcWEtcC0wIGNxYS1iZy10cmFuc3BhcmVudCBjcWEtYm9yZGVyLW5vbmUgY3FhLXJvdW5kZWQtbWQgY3FhLXRleHQtWyM2YjcyODBdIGNxYS1jdXJzb3ItcG9pbnRlciBjcWEtaG92ZXI6Y3FhLWJnLVsjZjNmNGY2XSBjcWEtaG92ZXI6Y3FhLXRleHQtWyMzNzQxNTFdXCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUV4cGFuZGVkKGZhbHNlKVwiXG4gICAgICAgIG1hdFRvb2x0aXA9XCJDbG9zZVwiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC14bCBjcWEtdy01IGNxYS1oLTVcIj5leHBhbmRfbGVzczwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwicHJlcmVxdWlzaXRlLWRyb3AtbGlzdCBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yIGNxYS1tYi0zXCJcbiAgICAgIFtkbmREcm9wem9uZV09XCJbJ3ByZXJlcXVpc2l0ZS1yb3cnXVwiXG4gICAgICBkbmRFZmZlY3RBbGxvd2VkPVwibW92ZVwiXG4gICAgICBkbmREcmFnb3ZlckNsYXNzPVwiZG5kRHJhZ292ZXJcIlxuICAgICAgKGRuZERyb3ApPVwib25EbmREcm9wKCRldmVudClcIj5cbiAgICAgIDxkaXYgZG5kUGxhY2Vob2xkZXJSZWYgY2xhc3M9XCJwcmVyZXF1aXNpdGUtZHJhZy1wbGFjZWhvbGRlclwiPkRyb3AgaGVyZTwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICAqbmdGb3I9XCJsZXQgcm93IG9mIHJvd3M7IGxldCBpID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlLZXlcIlxuICAgICAgICBjbGFzcz1cInByZXJlcXVpc2l0ZS1kcmFnLWl0ZW0gY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTJcIlxuICAgICAgICBbZG5kRHJhZ2dhYmxlXT1cInJvd1wiXG4gICAgICAgIFtkbmREaXNhYmxlSWZdPVwicm93cy5sZW5ndGggPD0gMVwiXG4gICAgICAgIGRuZEVmZmVjdEFsbG93ZWQ9XCJtb3ZlXCJcbiAgICAgICAgZG5kVHlwZT1cInByZXJlcXVpc2l0ZS1yb3dcIj5cbiAgICAgICAgPCEtLSA5LWRvdCBncmlkIGRyYWcgaGFuZGxlIChvbmx5IHdoZW4gbXVsdGlwbGUgcm93cyB0byByZW9yZGVyKSAtLT5cbiAgICAgICAgPGRpdiAqbmdJZj1cInJvd3MubGVuZ3RoID4gMVwiIGRuZEhhbmRsZSBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LXNocmluay0wIGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS1jdXJzb3ItZ3JhYiBjcWEtdGV4dC1bIzZCNzI4MF0gY3FhLWhvdmVyOmNxYS10ZXh0LVsjMTExODI3XSBhY3RpdmU6Y3FhLWN1cnNvci1ncmFiYmluZ1wiIG1hdFRvb2x0aXA9XCJEcmFnIHRvIHJlb3JkZXJcIj5cbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIzXCIgY3k9XCIzXCIgcj1cIjEuNVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PVwiOFwiIGN5PVwiM1wiIHI9XCIxLjVcIiBmaWxsPVwiY3VycmVudENvbG9yXCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjEzXCIgY3k9XCIzXCIgcj1cIjEuNVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PVwiM1wiIGN5PVwiOFwiIHI9XCIxLjVcIiBmaWxsPVwiY3VycmVudENvbG9yXCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjhcIiBjeT1cIjhcIiByPVwiMS41XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIxM1wiIGN5PVwiOFwiIHI9XCIxLjVcIiBmaWxsPVwiY3VycmVudENvbG9yXCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjNcIiBjeT1cIjEzXCIgcj1cIjEuNVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PVwiOFwiIGN5PVwiMTNcIiByPVwiMS41XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIxM1wiIGN5PVwiMTNcIiByPVwiMS41XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleC0xIGNxYS1taW4tdy0wXCI+XG4gICAgICAgIDwhLS0gQ3VzdG9tIHRlbXBsYXRlIChlLmcuIHBhcmVudC1wcm92aWRlZCBjcWEtZHluYW1pYy1zZWxlY3QpIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0Qm9keVRwbFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VsZWN0Qm9keVRwbDsgY29udGV4dDoge1xuICAgICAgICAgICAgICAkaW1wbGljaXQ6IHJvdyxcbiAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgIGZvcm06IGZvcm0sXG4gICAgICAgICAgICAgIGNvbmZpZzogZ2V0Q29uZmlnKGkpXG4gICAgICAgICAgICB9XCI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIERlZmF1bHQ6IGJ1aWx0LWluIGNxYS1keW5hbWljLXNlbGVjdCAtLT5cbiAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdFxuICAgICAgICAgICpuZ0lmPVwiIXNlbGVjdEJvZHlUcGwgJiYgZm9ybVwiXG4gICAgICAgICAgW2Zvcm1dPVwiZm9ybVwiXG4gICAgICAgICAgW2NvbmZpZ109XCJnZXRDb25maWcoaSlcIlxuICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50LCBpKVwiPlxuICAgICAgICA8L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS13LTggY3FhLWgtOCBjcWEtbWluLXctWzMycHhdIGNxYS1iZy10cmFuc3BhcmVudCBjcWEtYm9yZGVyLW5vbmUgY3FhLXJvdW5kZWQtbWQgY3FhLXRleHQtWyM2YjcyODBdIGNxYS1jdXJzb3ItcG9pbnRlciBjcWEtcC0wIGNxYS1ob3ZlcjpjcWEtYmctWyNmM2Y0ZjZdIGNxYS1ob3ZlcjpjcWEtdGV4dC1bIzM3NDE1MV1cIlxuICAgICAgICAoY2xpY2spPVwib25SZW1vdmVSb3coaSlcIlxuICAgICAgICBtYXRUb29sdGlwPVwiQ2FuY2VsXCI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS10ZXh0LWxnIGNxYS13LVsxOHB4XSBjcWEtaC1bMThweF1cIj5jbG9zZTwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9XCJzaG93QWRkQW5vdGhlclZhbGlkYXRpb24gJiYgIWFsbFJvd3NIYXZlVmFsdWVzKClcIiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjZGMyNjI2XSBjcWEtbWItMlwiPlxuICAgICAge3sgc2VsZWN0Rmlyc3RWYWxpZGF0aW9uTWVzc2FnZSB9fVxuICAgIDwvZGl2PlxuICAgIDwhLS0gQWRkIFByZXJlcXVpc2l0ZSBidXR0b24gb25seSBpbiBlbXB0eSBzdGF0ZTsgaGlkZSB3aGVuIHBhcmVudCBoYXMgcHJlcmVxdWlzaXRlcyAoZS5nLiBjb2xsYXBzaW5nIGFmdGVyIHVwZGF0ZSkgLS0+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJyb3dzLmxlbmd0aCA9PT0gMCAmJiAhaGlkZUFkZFByZXJlcXVpc2l0ZVwiXG4gICAgICBjbGFzcz1cImNxYS1ib3JkZXItMiBjcWEtYm9yZGVyLWRhc2hlZCBjcWEtYm9yZGVyLVsjY2NjY2ZmXSBjcWEtcm91bmRlZC1sZyBjcWEtcC0zIGNxYS1tYi0zIGNxYS1iZy13aGl0ZSBjcWEtY3Vyc29yLXBvaW50ZXIgY3FhLXRyYW5zaXRpb24tYWxsIGNxYS1kdXJhdGlvbi0yMDAgY3FhLWVhc2UtaW4tb3V0IGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS1nYXAtMiBjcWEtbWluLWgtWzQwcHhdIGNxYS13LWZ1bGwgY3FhLWhvdmVyOmNxYS1ib3JkZXItWyM5OTk5ZWVdIGNxYS1ob3ZlcjpjcWEtYmctWyNmOGY4ZmZdIGNxYS1hY3RpdmU6Y3FhLWJvcmRlci1bIzdjN2NlMF0gY3FhLWFjdGl2ZTpjcWEtYmctWyNlZmY2ZmZdXCJcbiAgICAgIChjbGljayk9XCJvbkFkZFJvdygpXCI+XG4gICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1bMThweF0gY3FhLXctWzE4cHhdIGNxYS1oLVsxOHB4XSBjcWEtdGV4dC1bIzNiODJmNl1cIj5hZGQ8L21hdC1pY29uPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtZm9udC1tZWRpdW0gY3FhLWZvbnQtaW50ZXIgY3FhLXRleHQtc20gY3FhLXRleHQtWyMzYjgyZjZdXCI+e3sgYWRkVHJpZ2dlclRleHQgfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPCEtLSBBZGQgQW5vdGhlciBsaW5rIHdoZW4gd2UgYWxyZWFkeSBoYXZlIGF0IGxlYXN0IG9uZSByb3cgLS0+XG4gICAgPGJ1dHRvblxuICAgICAgKm5nSWY9XCJyb3dzLmxlbmd0aCA+IDAgJiYgIWhpZGVBZGRQcmVyZXF1aXNpdGVcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImNxYS1tYi0zIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yIGNxYS1iZy10cmFuc3BhcmVudCBjcWEtYm9yZGVyLW5vbmUgY3FhLXAtMCBjcWEtY3Vyc29yLXBvaW50ZXIgY3FhLWZvbnQtaW50ZXIgY3FhLXRleHQtc20gY3FhLXRleHQtWyM0MjQyREJdIGNxYS1ob3ZlcjpjcWEtdW5kZXJsaW5lXCJcbiAgICAgIChjbGljayk9XCJvbkFkZFJvdygpXCI+XG4gICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1bMThweF0gY3FhLXctWzE4cHhdIGNxYS1oLVsxOHB4XVwiPmFkZDwvbWF0LWljb24+XG4gICAgICA8c3Bhbj57eyBhZGRBbm90aGVyVGV4dCB9fTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWdhcC0zIGNxYS1qdXN0aWZ5LWVuZFwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtcHktMi41IGNxYS1weC00IGNxYS1iZy13aGl0ZSBjcWEtdGV4dC1bIzM3NDE1MV0gY3FhLWJvcmRlciBjcWEtYm9yZGVyLVsjZDFkNWRiXSBjcWEtcm91bmRlZC1tZCBjcWEtdGV4dC1zbSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtY3Vyc29yLXBvaW50ZXIgY3FhLWhvdmVyOmNxYS1iZy1bI2Y5ZmFmYl1cIlxuICAgICAgICAoY2xpY2spPVwib25DYW5jZWwoKVwiPlxuICAgICAgICB7eyBjYW5jZWxUZXh0IH19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwiY3FhLXB5LTIuNSBjcWEtcHgtNCBjcWEtcm91bmRlZC1tZCBjcWEtdGV4dC1zbSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtYm9yZGVyLW5vbmUgY3FhLWN1cnNvci1wb2ludGVyIGRpc2FibGVkOmNxYS1vcGFjaXR5LTUwIGRpc2FibGVkOmNxYS1jdXJzb3Itbm90LWFsbG93ZWQgY3FhLWJnLVsjMWE1NmRiXSBjcWEtdGV4dC13aGl0ZSBjcWEtaG92ZXI6Y3FhLWJnLVsjMTY0N2I4XSBkaXNhYmxlZDpjcWEtYmctWyMxYTU2ZGJdIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS1nYXAtMlwiXG4gICAgICAgIFtzdHlsZS5wb2ludGVyLWV2ZW50c109XCJpc1VwZGF0aW5nID8gJ25vbmUnIDogJ2F1dG8nXCJcbiAgICAgICAgW3N0eWxlLmN1cnNvcl09XCJpc1VwZGF0aW5nID8gJ25vdC1hbGxvd2VkJyA6ICdwb2ludGVyJ1wiXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc1VwZGF0ZURpc2FibGVkKClcIlxuICAgICAgICAoY2xpY2spPVwib25VcGRhdGUoKVwiPlxuICAgICAgICA8bWF0LXNwaW5uZXIgKm5nSWY9XCJpc1VwZGF0aW5nXCIgZGlhbWV0ZXI9XCIxNlwiIGNsYXNzPVwiY3FhLWlubGluZS1ibG9jayB1cGRhdGUtc3Bpbm5lci13aGl0ZVwiPjwvbWF0LXNwaW5uZXI+XG4gICAgICAgIDxzcGFuPnt7IHVwZGF0ZVRleHQgfX08L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
|
|
244
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXByZXJlcXVpc2l0ZS1jYXNlcy1zZWN0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvYWRkLXByZXJlcXVpc2l0ZS1jYXNlcy1zZWN0aW9uL2FkZC1wcmVyZXF1aXNpdGUtY2FzZXMtc2VjdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2FkZC1wcmVyZXF1aXNpdGUtY2FzZXMtc2VjdGlvbi9hZGQtcHJlcmVxdWlzaXRlLWNhc2VzLXNlY3Rpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWix1QkFBdUIsRUFDdkIsWUFBWSxFQUNaLFdBQVcsR0FFWixNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7QUFzQnZCLE1BQU0sT0FBTyxvQ0FBb0M7SUF5Ri9DLFlBQW9CLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBeEYxQyx5REFBeUQ7UUFDaEQsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUsxQix1REFBdUQ7UUFDOUMsU0FBSSxHQUFzQixFQUFFLENBQUM7UUFFdEM7OztXQUdHO1FBQ00sWUFBTyxHQUFtQixFQUFFLENBQUM7UUFVdEMsZ0RBQWdEO1FBQ3ZDLFVBQUssR0FBRyxvQkFBb0IsQ0FBQztRQUV0QyxnQ0FBZ0M7UUFDdkIsZ0JBQVcsR0FBRyxpRUFBaUUsQ0FBQztRQUV6Rix3Q0FBd0M7UUFDL0IsbUJBQWMsR0FBRyxhQUFhLENBQUM7UUFFeEMsaUNBQWlDO1FBQ3hCLGVBQVUsR0FBRyxRQUFRLENBQUM7UUFFL0IsaUNBQWlDO1FBQ3hCLGVBQVUsR0FBRyxRQUFRLENBQUM7UUFFL0IsMkNBQTJDO1FBQ2xDLG1CQUFjLEdBQUcsa0JBQWtCLENBQUM7UUFFN0MscUlBQXFJO1FBQzVILHdCQUFtQixHQUFHLEtBQUssQ0FB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QUFlO3NCQUF4QixNQUFNO2dCQUVHLGFBQWE7c0JBQXRCLE1BQU07Z0JBRUcsZUFBZTtzQkFBeEIsTUFBTTtnQkFFRyxtQkFBbUI7c0JBQTVCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbnRlbnRDaGlsZCxcbiAgVGVtcGxhdGVSZWYsXG4gIENoYW5nZURldGVjdG9yUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IERuZERyb3BFdmVudCB9IGZyb20gJ25neC1kcmFnLWRyb3AnO1xuaW1wb3J0IHsgRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnLCBTZWxlY3RPcHRpb24gfSBmcm9tICcuLi9keW5hbWljLXNlbGVjdC9keW5hbWljLXNlbGVjdC1maWVsZC5jb21wb25lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFByZXJlcXVpc2l0ZVJvdyB7XG4gIGtleTogc3RyaW5nO1xufVxuXG4vKiogRW1pdHRlZCB3aGVuIGFueSBwcmVyZXF1aXNpdGUgc2VsZWN0IGNoYW5nZXMgLSBjb250YWlucyBhbGwgY3VycmVudCBzZWxlY3Rpb25zICovXG5leHBvcnQgaW50ZXJmYWNlIFByZXJlcXVpc2l0ZVNlbGVjdGlvbiB7XG4gIGtleTogc3RyaW5nO1xuICB2YWx1ZTogdW5rbm93bjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLWFkZC1wcmVyZXF1aXNpdGUtY2FzZXMtc2VjdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9hZGQtcHJlcmVxdWlzaXRlLWNhc2VzLXNlY3Rpb24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290IGNxYS1hZGQtcHJlcmVxdWlzaXRlLWNhc2VzLXNlY3Rpb24taG9zdCcgfSxcbn0pXG5leHBvcnQgY2xhc3MgQWRkUHJlcmVxdWlzaXRlQ2FzZXNTZWN0aW9uQ29tcG9uZW50IHtcbiAgLyoqIFdoZXRoZXIgdGhlIHNlY3Rpb24gaXMgZXhwYW5kZWQgKHNob3dpbmcgdGhlIGZvcm0pICovXG4gIEBJbnB1dCgpIGV4cGFuZGVkID0gZmFsc2U7XG5cbiAgLyoqIEZvcm0gZ3JvdXAgY29udGFpbmluZyBjb250cm9scyBmb3IgZWFjaCByb3cgKGtleWVkIGJ5IHJvdy5rZXkpICovXG4gIEBJbnB1dCgpIGZvcm0hOiBGb3JtR3JvdXA7XG5cbiAgLyoqIEFycmF5IG9mIHJvdyBkZXNjcmlwdG9ycywgZWFjaCB3aXRoIGEgdW5pcXVlIGtleSAqL1xuICBASW5wdXQoKSByb3dzOiBQcmVyZXF1aXNpdGVSb3dbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBQcmVyZXF1aXNpdGUgb3B0aW9ucyBmcm9tIEFQSSAoZS5nLiB0ZXN0IGNhc2VzIHRvIGNob29zZSBmcm9tKS5cbiAgICogUGFzc2VkIHRvIGdldFNlbGVjdENvbmZpZyB3aGVuIGJ1aWxkaW5nIHRoZSBjb25maWcgZm9yIGVhY2ggcm93LlxuICAgKi9cbiAgQElucHV0KCkgb3B0aW9uczogU2VsZWN0T3B0aW9uW10gPSBbXTtcblxuICAvKipcbiAgICogRnVuY3Rpb24gdG8gZ2V0IHRoZSBkeW5hbWljIHNlbGVjdCBjb25maWcgZm9yIGEgZ2l2ZW4gcm93IGluZGV4LlxuICAgKiBSZWNlaXZlcyBvcHRpb25hbCBvcHRpb25zIChmcm9tIHRoaXMub3B0aW9ucyB3aGVuIHByb3ZpZGVkKS5cbiAgICogRWFjaCByb3cgY2FuIGhhdmUgZGlmZmVyZW50IG9wdGlvbnMuIFRvIGF2b2lkIGR1cGxpY2F0ZXMsIGV4Y2x1ZGUgb3B0aW9uc1xuICAgKiBhbHJlYWR5IHNlbGVjdGVkIGluIG90aGVyIHJvd3MgKGtlZXAgY3VycmVudCByb3cncyBzZWxlY3Rpb24gc28gaXQgZGlzcGxheXMpLlxuICAgKi9cbiAgQElucHV0KCkgZ2V0U2VsZWN0Q29uZmlnITogKGluZGV4OiBudW1iZXIsIG9wdGlvbnM/OiBTZWxlY3RPcHRpb25bXSkgPT4gRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnO1xuXG4gIC8qKiBTZWN0aW9uIGxhYmVsIChlLmcuIFwiUHJlcmVxdWlzaXRlIENhc2VzXCIpICovXG4gIEBJbnB1dCgpIGxhYmVsID0gJ1ByZXJlcXVpc2l0ZSBDYXNlcyc7XG5cbiAgLyoqIFRvb2x0aXAgZm9yIHRoZSBpbmZvIGljb24gKi9cbiAgQElucHV0KCkgaW5mb1Rvb2x0aXAgPSAnQWRkIHByZXJlcXVpc2l0ZSB0ZXN0IGNhc2VzIHRoYXQgbXVzdCBydW4gYmVmb3JlIHRoaXMgdGVzdCBjYXNlJztcblxuICAvKiogVGV4dCBmb3IgdGhlIFwiQWRkIEFub3RoZXJcIiBidXR0b24gKi9cbiAgQElucHV0KCkgYWRkQW5vdGhlclRleHQgPSAnQWRkIEFub3RoZXInO1xuXG4gIC8qKiBUZXh0IGZvciB0aGUgVXBkYXRlIGJ1dHRvbiAqL1xuICBASW5wdXQoKSB1cGRhdGVUZXh0ID0gJ1VwZGF0ZSc7XG5cbiAgLyoqIFRleHQgZm9yIHRoZSBDYW5jZWwgYnV0dG9uICovXG4gIEBJbnB1dCgpIGNhbmNlbFRleHQgPSAnQ2FuY2VsJztcblxuICAvKiogVGV4dCBmb3IgdGhlIGNvbGxhcHNlZCBcIkFkZFwiIHRyaWdnZXIgKi9cbiAgQElucHV0KCkgYWRkVHJpZ2dlclRleHQgPSAnQWRkIFByZXJlcXVpc2l0ZSc7XG5cbiAgLyoqIFdoZW4gdHJ1ZSwgaGlkZSBBZGQgUHJlcmVxdWlzaXRlIGJ1dHRvbiBldmVuIGlmIHJvd3MgYXJlIGVtcHR5IChlLmcuIHdoZW4gY29sbGFwc2luZyBhZnRlciB1cGRhdGUgd2l0aCBleGlzdGluZyBwcmVyZXF1aXNpdGVzKSAqL1xuICBASW5wdXQoKSBoaWRlQWRkUHJlcmVxdWlzaXRlID0gZmFsc2U7XG5cbiAgLyoqIFdoZW4gcHJvdmlkZWQsIGNvbnRyb2xzIFVwZGF0ZSBidXR0b24gZGlzYWJsZWQgc3RhdGUuIFVzZSBmb3IgZGlydHktc3RhdGUgdmFsaWRhdGlvbiAoZW5hYmxlIHdoZW4gZm9ybSBjaGFuZ2VkKS4gV2hlbiB1bmRlZmluZWQsIGZhbGxzIGJhY2sgdG8gIWFsbFJvd3NIYXZlVmFsdWVzKCkuICovXG4gIEBJbnB1dCgpIHVwZGF0ZURpc2FibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gIC8qKiBXaGVuIHRydWUsIFVwZGF0ZSBidXR0b24gaXMgZGlzYWJsZWQgYW5kIHNob3dzIGEgbG9hZGVyIChBUEkgaW4gcHJvZ3Jlc3MpICovXG4gIEBJbnB1dCgpIGlzVXBkYXRpbmcgPSBmYWxzZTtcblxuICAvKiogV2hlbiB0cnVlLCBwcmVyZXF1aXNpdGUgZHJvcGRvd24gdXNlcyBzZXJ2ZXItc2lkZSBzZWFyY2ggYW5kIGxvYWQgbW9yZSAoZW1pdCBzZWFyY2hPcHRpb25zIC8gbG9hZE1vcmVPcHRpb25zKS4gKi9cbiAgQElucHV0KCkgZW5hYmxlU2VydmVyU2VhcmNoID0gZmFsc2U7XG4gIC8qKiBQZXItcm93OiB3aGV0aGVyIG1vcmUgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGZvciBsb2FkIG1vcmUuIEtleSA9IHJvdyBpbmRleC4gKi9cbiAgQElucHV0KCkgaGFzTW9yZU9wdGlvbnM6IFJlY29yZDxudW1iZXIsIGJvb2xlYW4+ID0ge307XG4gIC8qKiBQZXItcm93OiB0cnVlIHdoaWxlIG9wdGlvbnMgYXJlIGxvYWRpbmcgZm9yIHRoYXQgZHJvcGRvd24uIEtleSA9IHJvdyBpbmRleC4gKi9cbiAgQElucHV0KCkgaXNMb2FkaW5nT3B0aW9uczogUmVjb3JkPG51bWJlciwgYm9vbGVhbj4gPSB7fTtcblxuICAvKiogVmFsaWRhdGlvbiBtZXNzYWdlIHNob3duIHdoZW4gQWRkIEFub3RoZXIvVXBkYXRlIGFyZSBkaXNhYmxlZCAobm90IGFsbCByb3dzIGhhdmUgdmFsdWVzKSAqL1xuICBASW5wdXQoKSBzZWxlY3RGaXJzdFZhbGlkYXRpb25NZXNzYWdlID0gJ1BsZWFzZSBzZWxlY3QgYSBwcmVyZXF1aXNpdGUgZm9yIGVhY2ggcm93IGZpcnN0LCB0aGVuIGNsaWNrIEFkZCBBbm90aGVyLic7XG5cbiAgLyoqIE9wdGlvbmFsIGN1c3RvbSB0ZW1wbGF0ZSBmb3IgdGhlIHNlbGVjdCBzbG90LiBVc2UgbmctdGVtcGxhdGUgI3NlbGVjdEJvZHkgd2l0aCBsZXQtcm93LCBsZXQtaW5kZXgsIGxldC1mb3JtLCBsZXQtY29uZmlnLiAqL1xuICBAQ29udGVudENoaWxkKCdzZWxlY3RCb2R5JywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSBzZWxlY3RCb2R5VHBsPzogVGVtcGxhdGVSZWY8e1xuICAgICRpbXBsaWNpdDogUHJlcmVxdWlzaXRlUm93O1xuICAgIGluZGV4OiBudW1iZXI7XG4gICAgZm9ybTogRm9ybUdyb3VwO1xuICAgIGNvbmZpZzogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnO1xuICB9PjtcblxuICBAT3V0cHV0KCkgZXhwYW5kZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBhZGRSb3cgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSByZW1vdmVSb3cgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgQE91dHB1dCgpIHJvd3NSZW9yZGVyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFByZXJlcXVpc2l0ZVJvd1tdPigpO1xuICAvKiogRW1pdHRlZCB3aGVuIFVwZGF0ZSBidXR0b24gaXMgY2xpY2tlZCAqL1xuICBAT3V0cHV0KCkgdXBkYXRlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAvKiogRW1pdHRlZCB3aGVuIENhbmNlbCBidXR0b24gaXMgY2xpY2tlZCAqL1xuICBAT3V0cHV0KCkgY2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAvKiogRW1pdHRlZCB3aGVuIGEgc2luZ2xlIHJvdydzIHNlbGVjdGlvbiBjaGFuZ2VzICovXG4gIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duOyBpbmRleDogbnVtYmVyIH0+KCk7XG4gIC8qKiBFbWl0dGVkIHdoZW4gdXNlciBzZWFyY2hlcyBpbiBwcmVyZXF1aXNpdGUgZHJvcGRvd24gKHNlcnZlciBzZWFyY2gpLiBQYXJlbnQgc2hvdWxkIGZldGNoIG9wdGlvbnMgYW5kIHVwZGF0ZSBvcHRpb25zIGlucHV0LiAqL1xuICBAT3V0cHV0KCkgc2VhcmNoT3B0aW9ucyA9IG5ldyBFdmVudEVtaXR0ZXI8eyBpbmRleDogbnVtYmVyOyBxdWVyeTogc3RyaW5nIH0+KCk7XG4gIC8qKiBFbWl0dGVkIHdoZW4gdXNlciBzY3JvbGxzIHRvIGxvYWQgbW9yZSBvcHRpb25zLiBQYXJlbnQgc2hvdWxkIGFwcGVuZCB0byBvcHRpb25zIGFuZCBzZXQgaGFzTW9yZU9wdGlvbnMuICovXG4gIEBPdXRwdXQoKSBsb2FkTW9yZU9wdGlvbnMgPSBuZXcgRXZlbnRFbWl0dGVyPHsgaW5kZXg6IG51bWJlcjsgcXVlcnk6IHN0cmluZyB9PigpO1xuICAvKiogRW1pdHRlZCB3aGVuIGFueSBzZWxlY3QgY2hhbmdlcyAtIHJldHVybnMgYWxsIGN1cnJlbnQgcHJlcmVxdWlzaXRlIHNlbGVjdGlvbnMgaW4gb3JkZXIgKi9cbiAgQE91dHB1dCgpIHByZXJlcXVpc2l0ZXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFByZXJlcXVpc2l0ZVNlbGVjdGlvbltdPigpO1xuXG4gIC8qKiBTZXQgdG8gdHJ1ZSB3aGVuIHVzZXIgY2xpY2tzIEFkZCBBbm90aGVyIHdoaWxlIGludmFsaWQgLSBzaG93cyB2YWxpZGF0aW9uIG1lc3NhZ2UgKi9cbiAgc2hvd0FkZEFub3RoZXJWYWxpZGF0aW9uID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIHRvZ2dsZUV4cGFuZGVkKHNob3c6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmV4cGFuZGVkID0gc2hvdztcbiAgICB0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQoc2hvdyk7XG4gIH1cblxuICAvKiogQ2FsbGVkIHdoZW4gdXNlciBjbGlja3MgXCJBZGQgUHJlcmVxdWlzaXRlXCIgd2l0aCBubyByb3dzIC0gZXhwYW5kcyBhbmQgYWRkcyBmaXJzdCByb3cgKi9cbiAgb25BZGRQcmVyZXF1aXNpdGVDbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLnRvZ2dsZUV4cGFuZGVkKHRydWUpO1xuICAgIHRoaXMuYWRkUm93LmVtaXQoKTtcbiAgfVxuXG4gIG9uQWRkUm93KCk6IHZvaWQge1xuICAgIC8vIEFsbG93IGFkZGluZyBmaXJzdCByb3cgd2hlbiBlbXB0eSAobm8gdmFsaWRhdGlvbiBuZWVkZWQpXG4gICAgaWYgKHRoaXMucm93cy5sZW5ndGggPiAwICYmICF0aGlzLmFsbFJvd3NIYXZlVmFsdWVzKCkpIHtcbiAgICAgIHRoaXMuc2hvd0FkZEFub3RoZXJWYWxpZGF0aW9uID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNob3dBZGRBbm90aGVyVmFsaWRhdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuYWRkUm93LmVtaXQoKTtcbiAgfVxuXG4gIG9uUmVtb3ZlUm93KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnJlbW92ZVJvdy5lbWl0KGluZGV4KTtcbiAgfVxuXG4gIG9uRG5kRHJvcChldmVudDogRG5kRHJvcEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmRhdGEgPT0gbnVsbCB8fCBldmVudC5pbmRleCA9PSBudWxsKSByZXR1cm47XG4gICAgY29uc3QgZHJvcFJvdyA9IGV2ZW50LmRhdGEgYXMgUHJlcmVxdWlzaXRlUm93O1xuICAgIGxldCBkcm9wSW5kZXggPSBldmVudC5pbmRleDtcbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0aGlzLnJvd3MuZmluZEluZGV4KChyKSA9PiByLmtleSA9PT0gZHJvcFJvdy5rZXkpO1xuICAgIGlmIChjdXJyZW50SW5kZXggPCAwKSByZXR1cm47XG4gICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gZHJvcEluZGV4KSByZXR1cm47XG5cbiAgICBjb25zdCBuZXdSb3dzID0gWy4uLnRoaXMucm93c107XG4gICAgbmV3Um93cy5zcGxpY2UoY3VycmVudEluZGV4LCAxKTtcbiAgICAvLyBJZiBtb3ZpbmcgZm9yd2FyZCwgZHJvcEluZGV4IHNoaWZ0cyBhZnRlciByZW1vdmFsXG4gICAgaWYgKGN1cnJlbnRJbmRleCA8IGRyb3BJbmRleCkge1xuICAgICAgZHJvcEluZGV4LS07XG4gICAgfVxuICAgIG5ld1Jvd3Muc3BsaWNlKGRyb3BJbmRleCwgMCwgZHJvcFJvdyk7XG4gICAgdGhpcy5yb3dzUmVvcmRlcmVkLmVtaXQobmV3Um93cyk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICB0cmFja0J5S2V5KF9pOiBudW1iZXIsIHJvdzogUHJlcmVxdWlzaXRlUm93KTogc3RyaW5nIHtcbiAgICByZXR1cm4gcm93LmtleTtcbiAgfVxuXG4gIG9uVXBkYXRlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzVXBkYXRpbmcpIHJldHVybjtcbiAgICB0aGlzLnVwZGF0ZS5lbWl0KCk7XG4gIH1cblxuICBvbkNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLmNhbmNlbC5lbWl0KCk7XG4gIH1cblxuICBvblNlbGVjdGlvbkNoYW5nZShldmVudDogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHVua25vd24gfSwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoeyAuLi5ldmVudCwgaW5kZXggfSk7XG4gICAgdGhpcy5lbWl0QWxsUHJlcmVxdWlzaXRlcygpO1xuICAgIGlmICh0aGlzLmFsbFJvd3NIYXZlVmFsdWVzKCkpIHtcbiAgICAgIHRoaXMuc2hvd0FkZEFub3RoZXJWYWxpZGF0aW9uID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqIFRydWUgd2hlbiB0aGUgcm93IGF0IHRoZSBnaXZlbiBpbmRleCBoYXMgYSBzZWxlY3RlZCB2YWx1ZSAqL1xuICByb3dIYXNWYWx1ZShpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmZvcm0gfHwgIXRoaXMucm93cy5sZW5ndGggfHwgaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMucm93cy5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCByb3cgPSB0aGlzLnJvd3NbaW5kZXhdO1xuICAgIGNvbnN0IHZhbCA9IHRoaXMuZm9ybS5nZXQocm93LmtleSk/LnZhbHVlO1xuICAgIHJldHVybiB2YWwgIT0gbnVsbCAmJiB2YWwgIT09ICcnO1xuICB9XG5cbiAgLyoqIFRydWUgd2hlbiBldmVyeSByb3cgaGFzIGEgbm9uLWVtcHR5IHZhbHVlIChubyBwbGFjZWhvbGRlcnMpICovXG4gIGFsbFJvd3NIYXZlVmFsdWVzKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5mb3JtIHx8ICF0aGlzLnJvd3MubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMucm93cy5ldmVyeSgocm93KSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSB0aGlzLmZvcm0uZ2V0KHJvdy5rZXkpPy52YWx1ZTtcbiAgICAgIHJldHVybiB2YWwgIT0gbnVsbCAmJiB2YWwgIT09ICcnO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIENvbXB1dGVkIGRpc2FibGVkIHN0YXRlIGZvciBVcGRhdGUgYnV0dG9uLiBXaGVuIGlzVXBkYXRpbmcgd2UgZG8gbm90IGRpc2FibGUgKHNob3cgbG9hZGVyIG9ubHkpOyB1c2UgdXBkYXRlRGlzYWJsZWQgZm9yIG90aGVyIGNhc2VzLiAqL1xuICBpc1VwZGF0ZURpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLnVwZGF0ZURpc2FibGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZURpc2FibGVkO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKiogRW1pdHMgYWxsIGN1cnJlbnQgcHJlcmVxdWlzaXRlIHNlbGVjdGlvbnMgKGtleSArIHZhbHVlKSBpbiByb3cgb3JkZXIgKi9cbiAgcHJpdmF0ZSBlbWl0QWxsUHJlcmVxdWlzaXRlcygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZm9ybSB8fCAhdGhpcy5yb3dzLmxlbmd0aCkgcmV0dXJuO1xuICAgIGNvbnN0IHNlbGVjdGlvbnM6IFByZXJlcXVpc2l0ZVNlbGVjdGlvbltdID0gdGhpcy5yb3dzLm1hcCgocm93KSA9PiAoe1xuICAgICAga2V5OiByb3cua2V5LFxuICAgICAgdmFsdWU6IHRoaXMuZm9ybS5nZXQocm93LmtleSk/LnZhbHVlID8/IG51bGwsXG4gICAgfSkpO1xuICAgIHRoaXMucHJlcmVxdWlzaXRlc0NoYW5nZS5lbWl0KHNlbGVjdGlvbnMpO1xuICB9XG5cbiAgZ2V0Q29uZmlnKGluZGV4OiBudW1iZXIpOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcge1xuICAgIGNvbnN0IG9wdHMgPSB0aGlzLm9wdGlvbnM/Lmxlbmd0aCA/IHRoaXMub3B0aW9ucyA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBiYXNlID0gdGhpcy5nZXRTZWxlY3RDb25maWc/LihpbmRleCwgb3B0cykgPz8geyBrZXk6IGByb3dfJHtpbmRleH1gLCBvcHRpb25zOiB0aGlzLm9wdGlvbnMgPz8gW10gfTtcbiAgICBpZiAodGhpcy5lbmFibGVTZXJ2ZXJTZWFyY2gpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIHNlYXJjaGFibGU6IHRydWUsXG4gICAgICAgIHNlcnZlclNlYXJjaDogdHJ1ZSxcbiAgICAgICAgaW5pdGlhbEZldGNoT25PcGVuOiB0cnVlLFxuICAgICAgICBoYXNNb3JlOiB0aGlzLmhhc01vcmVPcHRpb25zW2luZGV4XSA/PyBmYWxzZSxcbiAgICAgICAgaXNMb2FkaW5nOiB0aGlzLmlzTG9hZGluZ09wdGlvbnNbaW5kZXhdID8/IGZhbHNlLFxuICAgICAgICBvblNlYXJjaDogKHEpID0+IHRoaXMuc2VhcmNoT3B0aW9ucy5lbWl0KHsgaW5kZXgsIHF1ZXJ5OiBxID8/ICcnIH0pLFxuICAgICAgICBvbkxvYWRNb3JlOiAocSkgPT4gdGhpcy5sb2FkTW9yZU9wdGlvbnMuZW1pdCh7IGluZGV4LCBxdWVyeTogcSA/PyAnJyB9KSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBiYXNlO1xuICB9XG59XG4iLCI8IS0tIEFkZCBQcmVyZXF1aXNpdGUgdHJpZ2dlciAtIG9ubHkgd2hlbiBjb2xsYXBzZWQgYW5kIG5vIHJvd3MgKHVzZXIgbXVzdCBjbGljayB0byBleHBhbmQpOyBoaWRlIHdoZW4gcGFyZW50IGhhcyBwcmVyZXF1aXNpdGVzIC0tPlxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvd3MubGVuZ3RoID09PSAwICYmICFleHBhbmRlZCAmJiAhaGlkZUFkZFByZXJlcXVpc2l0ZVwiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJjcWEtYm9yZGVyLTIgY3FhLWJvcmRlci1kYXNoZWQgY3FhLWJvcmRlci1bI0Q4RDlGQ10gY3FhLXJvdW5kZWQtbGcgY3FhLXAtMSBjcWEtbXQtNCBjcWEtYmctd2hpdGUgY3FhLWN1cnNvci1wb2ludGVyIGNxYS10cmFuc2l0aW9uLWFsbCBjcWEtZHVyYXRpb24tMjAwIGNxYS1lYXNlLWluLW91dCBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtZ2FwLTIgIGNxYS13LWZ1bGwgY3FhLWhvdmVyOmNxYS1ib3JkZXItWyM5OTk5ZWVdIGNxYS1ob3ZlcjpjcWEtYmctWyNmOGY4ZmZdIGNxYS1hY3RpdmU6Y3FhLWJvcmRlci1bIzdjN2NlMF0gY3FhLWFjdGl2ZTpjcWEtYmctWyNlZmY2ZmZdXCJcbiAgICAoY2xpY2spPVwib25BZGRQcmVyZXF1aXNpdGVDbGljaygpXCI+XG4gICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS13LVsxMnB4XSBjcWEtaC1bMTJweF0gY3FhLXRleHQtWyMzRjQzRUVdXCI+YWRkPC9tYXQtaWNvbj5cbiAgICA8c3BhbiBjbGFzcz1cImNxYS1mb250LXJlZ3VsYXIgY3FhLWZvbnQtaW50ZXIgY3FhLXRleHQtc20gY3FhLXRleHQtWyMzRjQzRUVdXCI+e3sgYWRkVHJpZ2dlclRleHQgfX08L3NwYW4+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjwhLS0gQ29sbGFwc2VkIHN1bW1hcnkgd2hlbiB3ZSBoYXZlIHJvd3MgYnV0IGV4cGFuZGVkPWZhbHNlIC0tPlxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvd3MubGVuZ3RoID4gMCAmJiAhZXhwYW5kZWRcIj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiY3FhLWJvcmRlci0yIGNxYS1ib3JkZXItZGFzaGVkIGNxYS1ib3JkZXItWyNEOEQ5RkNdIGNxYS1yb3VuZGVkLWxnIGNxYS1wLTEuNSBjcWEtbXQtNCBjcWEtYmctd2hpdGUgY3FhLWN1cnNvci1wb2ludGVyIGNxYS10cmFuc2l0aW9uLWFsbCBjcWEtZHVyYXRpb24tMjAwIGNxYS1lYXNlLWluLW91dCBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLW1pbi1oLVsyN3B4XSBjcWEtaG92ZXI6Y3FhLWJvcmRlci1bIzljYTNhZl0gY3FhLWhvdmVyOmNxYS1iZy1bI2Y5ZmFmYl0gY3FhLWFjdGl2ZTpjcWEtYm9yZGVyLVsjNjM2NmYxXSBjcWEtYWN0aXZlOmNxYS1iZy1bI2VmZjZmZl1cIlxuICAgIChjbGljayk9XCJ0b2dnbGVFeHBhbmRlZCh0cnVlKVwiPlxuICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWyM0YTU1NjVdIGNxYS1mb250LW5vcm1hbCBjcWEtZm9udC1pbnRlciBjcWEtdGV4dC14c1wiPnt7IHJvd3MubGVuZ3RoIH19IHByZXJlcXVpc2l0ZXt7IHJvd3MubGVuZ3RoICE9PSAxID8gJ3MnIDogJycgfX08L3NwYW4+XG4gICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtWzE0cHhdIGNxYS13LVsxNHB4XSBjcWEtaC1bMTRweF0gY3FhLXRleHQtWyM0YTU1NjVdXCI+ZXhwYW5kX21vcmU8L21hdC1pY29uPlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuXG48IS0tIEV4cGFuZGVkIGZvcm0gLSB3aGVuIGV4cGFuZGVkPXRydWUgKHdpdGggb3Igd2l0aG91dCByb3dzOyBubyBBZGQgUHJlcmVxdWlzaXRlIHRyaWdnZXIpIC0tPlxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImV4cGFuZGVkXCI+XG4gIDxkaXYgY2xhc3M9XCJjcWEtcC0zIGNxYS1iZy13aGl0ZSBjcWEtYm9yZGVyIGNxYS1ib3JkZXItWyNlNWU3ZWJdIGNxYS1yb3VuZGVkLWxnXCI+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0xLjUgY3FhLW1iLTNcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzM3NDE1MV0gY3FhLW0tMCBjcWEtbGVhZGluZy1ub25lXCI+e3sgbGFiZWwgfX08L2xhYmVsPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLWlubGluZS1mbGV4IGNxYS1tdC0xIGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS13LTQgY3FhLWgtNCBjcWEtdGV4dC1zbSBjcWEtdGV4dC1bIzZiNzI4MF0gY3FhLWN1cnNvci1oZWxwIGNxYS1mbGV4LXNocmluay0wXCIgW21hdFRvb2x0aXBdPVwiaW5mb1Rvb2x0aXBcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIG1hdFRvb2x0aXBTaG93RGVsYXk9XCIzMDBcIj5pbmZvPC9tYXQtaWNvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwiY3FhLW1sLWF1dG8gY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLXctNyBjcWEtaC03IGNxYS1wLTAgY3FhLWJnLXRyYW5zcGFyZW50IGNxYS1ib3JkZXItbm9uZSBjcWEtcm91bmRlZC1tZCBjcWEtdGV4dC1bIzZiNzI4MF0gY3FhLWN1cnNvci1wb2ludGVyIGNxYS1ob3ZlcjpjcWEtYmctWyNmM2Y0ZjZdIGNxYS1ob3ZlcjpjcWEtdGV4dC1bIzM3NDE1MV1cIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlRXhwYW5kZWQoZmFsc2UpXCJcbiAgICAgICAgbWF0VG9vbHRpcD1cIkNsb3NlXCI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS10ZXh0LXhsIGNxYS13LTUgY3FhLWgtNVwiPmV4cGFuZF9sZXNzPC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJwcmVyZXF1aXNpdGUtZHJvcC1saXN0IGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTIgY3FhLW1iLTNcIlxuICAgICAgW2RuZERyb3B6b25lXT1cIlsncHJlcmVxdWlzaXRlLXJvdyddXCJcbiAgICAgIGRuZEVmZmVjdEFsbG93ZWQ9XCJtb3ZlXCJcbiAgICAgIGRuZERyYWdvdmVyQ2xhc3M9XCJkbmREcmFnb3ZlclwiXG4gICAgICAoZG5kRHJvcCk9XCJvbkRuZERyb3AoJGV2ZW50KVwiPlxuICAgICAgPGRpdiBkbmRQbGFjZWhvbGRlclJlZiBjbGFzcz1cInByZXJlcXVpc2l0ZS1kcmFnLXBsYWNlaG9sZGVyXCI+RHJvcCBoZXJlPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0Zvcj1cImxldCByb3cgb2Ygcm93czsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeUtleVwiXG4gICAgICAgIGNsYXNzPVwicHJlcmVxdWlzaXRlLWRyYWctaXRlbSBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMlwiXG4gICAgICAgIFtkbmREcmFnZ2FibGVdPVwicm93XCJcbiAgICAgICAgW2RuZERpc2FibGVJZl09XCJyb3dzLmxlbmd0aCA8PSAxXCJcbiAgICAgICAgZG5kRWZmZWN0QWxsb3dlZD1cIm1vdmVcIlxuICAgICAgICBkbmRUeXBlPVwicHJlcmVxdWlzaXRlLXJvd1wiPlxuICAgICAgICA8IS0tIDktZG90IGdyaWQgZHJhZyBoYW5kbGUgKG9ubHkgd2hlbiBtdWx0aXBsZSByb3dzIHRvIHJlb3JkZXIpIC0tPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwicm93cy5sZW5ndGggPiAxXCIgZG5kSGFuZGxlIGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtc2hyaW5rLTAgY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLWN1cnNvci1ncmFiIGNxYS10ZXh0LVsjNkI3MjgwXSBjcWEtaG92ZXI6Y3FhLXRleHQtWyMxMTE4MjddIGFjdGl2ZTpjcWEtY3Vyc29yLWdyYWJiaW5nXCIgbWF0VG9vbHRpcD1cIkRyYWcgdG8gcmVvcmRlclwiPlxuICAgICAgICAgIDxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjNcIiBjeT1cIjNcIiByPVwiMS41XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9XCI4XCIgY3k9XCIzXCIgcj1cIjEuNVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTNcIiBjeT1cIjNcIiByPVwiMS41XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIzXCIgY3k9XCI4XCIgcj1cIjEuNVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PVwiOFwiIGN5PVwiOFwiIHI9XCIxLjVcIiBmaWxsPVwiY3VycmVudENvbG9yXCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjEzXCIgY3k9XCI4XCIgcj1cIjEuNVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PVwiM1wiIGN5PVwiMTNcIiByPVwiMS41XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9XCI4XCIgY3k9XCIxM1wiIHI9XCIxLjVcIiBmaWxsPVwiY3VycmVudENvbG9yXCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjEzXCIgY3k9XCIxM1wiIHI9XCIxLjVcIiBmaWxsPVwiY3VycmVudENvbG9yXCIvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4LTEgY3FhLW1pbi13LTBcIj5cbiAgICAgICAgPCEtLSBDdXN0b20gdGVtcGxhdGUgKGUuZy4gcGFyZW50LXByb3ZpZGVkIGNxYS1keW5hbWljLXNlbGVjdCkgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RCb2R5VHBsXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzZWxlY3RCb2R5VHBsOyBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICRpbXBsaWNpdDogcm93LFxuICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgZm9ybTogZm9ybSxcbiAgICAgICAgICAgICAgY29uZmlnOiBnZXRDb25maWcoaSlcbiAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gRGVmYXVsdDogYnVpbHQtaW4gY3FhLWR5bmFtaWMtc2VsZWN0IC0tPlxuICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0XG4gICAgICAgICAgKm5nSWY9XCIhc2VsZWN0Qm9keVRwbCAmJiBmb3JtXCJcbiAgICAgICAgICBbZm9ybV09XCJmb3JtXCJcbiAgICAgICAgICBbY29uZmlnXT1cImdldENvbmZpZyhpKVwiXG4gICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQsIGkpXCI+XG4gICAgICAgIDwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCJyb3dIYXNWYWx1ZShpKVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS13LTggY3FhLWgtOCBjcWEtbWluLXctWzMycHhdIGNxYS1iZy10cmFuc3BhcmVudCBjcWEtYm9yZGVyLW5vbmUgY3FhLXJvdW5kZWQtbWQgY3FhLXRleHQtWyM2YjcyODBdIGNxYS1jdXJzb3ItcG9pbnRlciBjcWEtcC0wIGNxYS1ob3ZlcjpjcWEtYmctWyNmM2Y0ZjZdIGNxYS1ob3ZlcjpjcWEtdGV4dC1bIzM3NDE1MV1cIlxuICAgICAgICAoY2xpY2spPVwib25SZW1vdmVSb3coaSlcIlxuICAgICAgICBtYXRUb29sdGlwPVwiUmVtb3ZlIFByZXJlcXVpc2l0ZVwiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1sZyBjcWEtdy1bMThweF0gY3FhLWgtWzE4cHhdXCI+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwic2hvd0FkZEFub3RoZXJWYWxpZGF0aW9uICYmICFhbGxSb3dzSGF2ZVZhbHVlcygpXCIgY2xhc3M9XCJjcWEtdGV4dC14cyBjcWEtdGV4dC1bI2RjMjYyNl0gY3FhLW1iLTJcIj5cbiAgICAgIHt7IHNlbGVjdEZpcnN0VmFsaWRhdGlvbk1lc3NhZ2UgfX1cbiAgICA8L2Rpdj5cbiAgICA8IS0tIEFkZCBQcmVyZXF1aXNpdGUgYnV0dG9uIG9ubHkgaW4gZW1wdHkgc3RhdGU7IGhpZGUgd2hlbiBwYXJlbnQgaGFzIHByZXJlcXVpc2l0ZXMgKGUuZy4gY29sbGFwc2luZyBhZnRlciB1cGRhdGUpIC0tPlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwicm93cy5sZW5ndGggPT09IDAgJiYgIWhpZGVBZGRQcmVyZXF1aXNpdGVcIlxuICAgICAgY2xhc3M9XCJjcWEtYm9yZGVyLTIgY3FhLWJvcmRlci1kYXNoZWQgY3FhLWJvcmRlci1bI2NjY2NmZl0gY3FhLXJvdW5kZWQtbGcgY3FhLXAtMyBjcWEtbWItMyBjcWEtYmctd2hpdGUgY3FhLWN1cnNvci1wb2ludGVyIGNxYS10cmFuc2l0aW9uLWFsbCBjcWEtZHVyYXRpb24tMjAwIGNxYS1lYXNlLWluLW91dCBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtZ2FwLTIgY3FhLW1pbi1oLVs0MHB4XSBjcWEtdy1mdWxsIGNxYS1ob3ZlcjpjcWEtYm9yZGVyLVsjOTk5OWVlXSBjcWEtaG92ZXI6Y3FhLWJnLVsjZjhmOGZmXSBjcWEtYWN0aXZlOmNxYS1ib3JkZXItWyM3YzdjZTBdIGNxYS1hY3RpdmU6Y3FhLWJnLVsjZWZmNmZmXVwiXG4gICAgICAoY2xpY2spPVwib25BZGRSb3coKVwiPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtWzE4cHhdIGNxYS13LVsxOHB4XSBjcWEtaC1bMThweF0gY3FhLXRleHQtWyMzYjgyZjZdXCI+YWRkPC9tYXQtaWNvbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWZvbnQtbWVkaXVtIGNxYS1mb250LWludGVyIGNxYS10ZXh0LXNtIGNxYS10ZXh0LVsjM2I4MmY2XVwiPnt7IGFkZFRyaWdnZXJUZXh0IH19PC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDwhLS0gQWRkIEFub3RoZXIgbGluayB3aGVuIHdlIGFscmVhZHkgaGF2ZSBhdCBsZWFzdCBvbmUgcm93IC0tPlxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwicm93cy5sZW5ndGggPiAwICYmICFoaWRlQWRkUHJlcmVxdWlzaXRlXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJjcWEtbWItMyBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMiBjcWEtYmctdHJhbnNwYXJlbnQgY3FhLWJvcmRlci1ub25lIGNxYS1wLTAgY3FhLWN1cnNvci1wb2ludGVyIGNxYS1mb250LWludGVyIGNxYS10ZXh0LXNtIGNxYS10ZXh0LVsjNDI0MkRCXSBjcWEtaG92ZXI6Y3FhLXVuZGVybGluZVwiXG4gICAgICAoY2xpY2spPVwib25BZGRSb3coKVwiPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtWzE4cHhdIGNxYS13LVsxOHB4XSBjcWEtaC1bMThweF1cIj5hZGQ8L21hdC1pY29uPlxuICAgICAgPHNwYW4+e3sgYWRkQW5vdGhlclRleHQgfX08L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1nYXAtMyBjcWEtanVzdGlmeS1lbmRcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwiY3FhLXB5LTIuNSBjcWEtcHgtNCBjcWEtYmctd2hpdGUgY3FhLXRleHQtWyMzNzQxNTFdIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1bI2QxZDVkYl0gY3FhLXJvdW5kZWQtbWQgY3FhLXRleHQtc20gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLWN1cnNvci1wb2ludGVyIGNxYS1ob3ZlcjpjcWEtYmctWyNmOWZhZmJdXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIj5cbiAgICAgICAge3sgY2FuY2VsVGV4dCB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImNxYS1weS0yLjUgY3FhLXB4LTQgY3FhLXJvdW5kZWQtbWQgY3FhLXRleHQtc20gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLWJvcmRlci1ub25lIGNxYS1jdXJzb3ItcG9pbnRlciBkaXNhYmxlZDpjcWEtb3BhY2l0eS01MCBkaXNhYmxlZDpjcWEtY3Vyc29yLW5vdC1hbGxvd2VkIGNxYS1iZy1bIzFhNTZkYl0gY3FhLXRleHQtd2hpdGUgY3FhLWhvdmVyOmNxYS1iZy1bIzE2NDdiOF0gZGlzYWJsZWQ6Y3FhLWJnLVsjMWE1NmRiXSBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtZ2FwLTJcIlxuICAgICAgICBbc3R5bGUucG9pbnRlci1ldmVudHNdPVwiaXNVcGRhdGluZyA/ICdub25lJyA6ICdhdXRvJ1wiXG4gICAgICAgIFtzdHlsZS5jdXJzb3JdPVwiaXNVcGRhdGluZyA/ICdub3QtYWxsb3dlZCcgOiAncG9pbnRlcidcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiaXNVcGRhdGVEaXNhYmxlZCgpXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uVXBkYXRlKClcIj5cbiAgICAgICAgPG1hdC1zcGlubmVyICpuZ0lmPVwiaXNVcGRhdGluZ1wiIGRpYW1ldGVyPVwiMTZcIiBjbGFzcz1cImNxYS1pbmxpbmUtYmxvY2sgdXBkYXRlLXNwaW5uZXItd2hpdGVcIj48L21hdC1zcGlubmVyPlxuICAgICAgICA8c3Bhbj57eyB1cGRhdGVUZXh0IH19PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG4iXX0=
|
|
@@ -5517,6 +5517,15 @@ class AddPrerequisiteCasesSectionComponent {
|
|
|
5517
5517
|
}
|
|
5518
5518
|
this.cdr.markForCheck();
|
|
5519
5519
|
}
|
|
5520
|
+
/** True when the row at the given index has a selected value */
|
|
5521
|
+
rowHasValue(index) {
|
|
5522
|
+
var _a;
|
|
5523
|
+
if (!this.form || !this.rows.length || index < 0 || index >= this.rows.length)
|
|
5524
|
+
return false;
|
|
5525
|
+
const row = this.rows[index];
|
|
5526
|
+
const val = (_a = this.form.get(row.key)) === null || _a === void 0 ? void 0 : _a.value;
|
|
5527
|
+
return val != null && val !== '';
|
|
5528
|
+
}
|
|
5520
5529
|
/** True when every row has a non-empty value (no placeholders) */
|
|
5521
5530
|
allRowsHaveValues() {
|
|
5522
5531
|
if (!this.form || !this.rows.length)
|
|
@@ -5558,10 +5567,10 @@ class AddPrerequisiteCasesSectionComponent {
|
|
|
5558
5567
|
}
|
|
5559
5568
|
}
|
|
5560
5569
|
AddPrerequisiteCasesSectionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AddPrerequisiteCasesSectionComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
5561
|
-
AddPrerequisiteCasesSectionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: AddPrerequisiteCasesSectionComponent, selector: "cqa-add-prerequisite-cases-section", inputs: { expanded: "expanded", form: "form", rows: "rows", options: "options", getSelectConfig: "getSelectConfig", label: "label", infoTooltip: "infoTooltip", addAnotherText: "addAnotherText", updateText: "updateText", cancelText: "cancelText", addTriggerText: "addTriggerText", hideAddPrerequisite: "hideAddPrerequisite", updateDisabled: "updateDisabled", isUpdating: "isUpdating", enableServerSearch: "enableServerSearch", hasMoreOptions: "hasMoreOptions", isLoadingOptions: "isLoadingOptions", selectFirstValidationMessage: "selectFirstValidationMessage" }, outputs: { expandedChange: "expandedChange", addRow: "addRow", removeRow: "removeRow", rowsReordered: "rowsReordered", update: "update", cancel: "cancel", selectionChange: "selectionChange", searchOptions: "searchOptions", loadMoreOptions: "loadMoreOptions", prerequisitesChange: "prerequisitesChange" }, host: { classAttribute: "cqa-ui-root cqa-add-prerequisite-cases-section-host" }, queries: [{ propertyName: "selectBodyTpl", first: true, predicate: ["selectBody"], descendants: true, read: TemplateRef }], ngImport: i0, template: "<!-- Add Prerequisite trigger - only when collapsed and no rows (user must click to expand); hide when parent has prerequisites -->\n<ng-container *ngIf=\"rows.length === 0 && !expanded && !hideAddPrerequisite\">\n <div\n class=\"cqa-border-2 cqa-border-dashed cqa-border-[#D8D9FC] cqa-rounded-lg cqa-p-1 cqa-mt-4 cqa-bg-white cqa-cursor-pointer cqa-transition-all cqa-duration-200 cqa-ease-in-out cqa-flex cqa-items-center cqa-justify-center cqa-gap-2 cqa-w-full cqa-hover:cqa-border-[#9999ee] cqa-hover:cqa-bg-[#f8f8ff] cqa-active:cqa-border-[#7c7ce0] cqa-active:cqa-bg-[#eff6ff]\"\n (click)=\"onAddPrerequisiteClick()\">\n <mat-icon class=\"cqa-text-[12px] cqa-w-[12px] cqa-h-[12px] cqa-text-[#3F43EE]\">add</mat-icon>\n <span class=\"cqa-font-regular cqa-font-inter cqa-text-sm cqa-text-[#3F43EE]\">{{ addTriggerText }}</span>\n </div>\n</ng-container>\n\n<!-- Collapsed summary when we have rows but expanded=false -->\n<ng-container *ngIf=\"rows.length > 0 && !expanded\">\n <div\n class=\"cqa-border-2 cqa-border-dashed cqa-border-[#D8D9FC] cqa-rounded-lg cqa-p-1.5 cqa-mt-4 cqa-bg-white cqa-cursor-pointer cqa-transition-all cqa-duration-200 cqa-ease-in-out cqa-flex cqa-items-center cqa-justify-between cqa-min-h-[27px] cqa-hover:cqa-border-[#9ca3af] cqa-hover:cqa-bg-[#f9fafb] cqa-active:cqa-border-[#6366f1] cqa-active:cqa-bg-[#eff6ff]\"\n (click)=\"toggleExpanded(true)\">\n <span class=\"cqa-text-[#4a5565] cqa-font-normal cqa-font-inter cqa-text-xs\">{{ rows.length }} prerequisite{{ rows.length !== 1 ? 's' : '' }}</span>\n <mat-icon class=\"cqa-text-[14px] cqa-w-[14px] cqa-h-[14px] cqa-text-[#4a5565]\">expand_more</mat-icon>\n </div>\n</ng-container>\n\n<!-- Expanded form - when expanded=true (with or without rows; no Add Prerequisite trigger) -->\n<ng-container *ngIf=\"expanded\">\n <div class=\"cqa-p-3 cqa-bg-white cqa-border cqa-border-[#e5e7eb] cqa-rounded-lg\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-1.5 cqa-mb-3\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-[#374151] cqa-m-0 cqa-leading-none\">{{ label }}</label>\n <mat-icon class=\"cqa-inline-flex cqa-mt-1 cqa-items-center cqa-justify-center cqa-w-4 cqa-h-4 cqa-text-sm cqa-text-[#6b7280] cqa-cursor-help cqa-flex-shrink-0\" [matTooltip]=\"infoTooltip\" matTooltipPosition=\"above\" matTooltipShowDelay=\"300\">info</mat-icon>\n <button\n type=\"button\"\n class=\"cqa-ml-auto cqa-flex cqa-items-center cqa-justify-center cqa-w-7 cqa-h-7 cqa-p-0 cqa-bg-transparent cqa-border-none cqa-rounded-md cqa-text-[#6b7280] cqa-cursor-pointer cqa-hover:cqa-bg-[#f3f4f6] cqa-hover:cqa-text-[#374151]\"\n (click)=\"toggleExpanded(false)\"\n matTooltip=\"Close\">\n <mat-icon class=\"cqa-text-xl cqa-w-5 cqa-h-5\">expand_less</mat-icon>\n </button>\n </div>\n\n <div\n class=\"prerequisite-drop-list cqa-flex cqa-flex-col cqa-gap-2 cqa-mb-3\"\n [dndDropzone]=\"['prerequisite-row']\"\n dndEffectAllowed=\"move\"\n dndDragoverClass=\"dndDragover\"\n (dndDrop)=\"onDndDrop($event)\">\n <div dndPlaceholderRef class=\"prerequisite-drag-placeholder\">Drop here</div>\n <div\n *ngFor=\"let row of rows; let i = index; trackBy: trackByKey\"\n class=\"prerequisite-drag-item cqa-flex cqa-items-center cqa-gap-2\"\n [dndDraggable]=\"row\"\n [dndDisableIf]=\"rows.length <= 1\"\n dndEffectAllowed=\"move\"\n dndType=\"prerequisite-row\">\n <!-- 9-dot grid drag handle (only when multiple rows to reorder) -->\n <div *ngIf=\"rows.length > 1\" dndHandle class=\"cqa-flex cqa-flex-shrink-0 cqa-items-center cqa-justify-center cqa-cursor-grab cqa-text-[#6B7280] cqa-hover:cqa-text-[#111827] active:cqa-cursor-grabbing\" matTooltip=\"Drag to reorder\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"3\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"3\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"3\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n </svg>\n </div>\n\n <div class=\"cqa-flex-1 cqa-min-w-0\">\n <!-- Custom template (e.g. parent-provided cqa-dynamic-select) -->\n <ng-container *ngIf=\"selectBodyTpl\">\n <ng-container\n *ngTemplateOutlet=\"selectBodyTpl; context: {\n $implicit: row,\n index: i,\n form: form,\n config: getConfig(i)\n }\">\n </ng-container>\n </ng-container>\n <!-- Default: built-in cqa-dynamic-select -->\n <cqa-dynamic-select\n *ngIf=\"!selectBodyTpl && form\"\n [form]=\"form\"\n [config]=\"getConfig(i)\"\n (selectionChange)=\"onSelectionChange($event, i)\">\n </cqa-dynamic-select>\n </div>\n\n <button\n type=\"button\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-8 cqa-h-8 cqa-min-w-[32px] cqa-bg-transparent cqa-border-none cqa-rounded-md cqa-text-[#6b7280] cqa-cursor-pointer cqa-p-0 cqa-hover:cqa-bg-[#f3f4f6] cqa-hover:cqa-text-[#374151]\"\n (click)=\"onRemoveRow(i)\"\n matTooltip=\"Cancel\">\n <mat-icon class=\"cqa-text-lg cqa-w-[18px] cqa-h-[18px]\">close</mat-icon>\n </button>\n </div>\n </div>\n\n <div *ngIf=\"showAddAnotherValidation && !allRowsHaveValues()\" class=\"cqa-text-xs cqa-text-[#dc2626] cqa-mb-2\">\n {{ selectFirstValidationMessage }}\n </div>\n <!-- Add Prerequisite button only in empty state; hide when parent has prerequisites (e.g. collapsing after update) -->\n <div\n *ngIf=\"rows.length === 0 && !hideAddPrerequisite\"\n class=\"cqa-border-2 cqa-border-dashed cqa-border-[#ccccff] cqa-rounded-lg cqa-p-3 cqa-mb-3 cqa-bg-white cqa-cursor-pointer cqa-transition-all cqa-duration-200 cqa-ease-in-out cqa-flex cqa-items-center cqa-justify-center cqa-gap-2 cqa-min-h-[40px] cqa-w-full cqa-hover:cqa-border-[#9999ee] cqa-hover:cqa-bg-[#f8f8ff] cqa-active:cqa-border-[#7c7ce0] cqa-active:cqa-bg-[#eff6ff]\"\n (click)=\"onAddRow()\">\n <mat-icon class=\"cqa-text-[18px] cqa-w-[18px] cqa-h-[18px] cqa-text-[#3b82f6]\">add</mat-icon>\n <span class=\"cqa-font-medium cqa-font-inter cqa-text-sm cqa-text-[#3b82f6]\">{{ addTriggerText }}</span>\n </div>\n <!-- Add Another link when we already have at least one row -->\n <button\n *ngIf=\"rows.length > 0 && !hideAddPrerequisite\"\n type=\"button\"\n class=\"cqa-mb-3 cqa-flex cqa-items-center cqa-gap-2 cqa-bg-transparent cqa-border-none cqa-p-0 cqa-cursor-pointer cqa-font-inter cqa-text-sm cqa-text-[#4242DB] cqa-hover:cqa-underline\"\n (click)=\"onAddRow()\">\n <mat-icon class=\"cqa-text-[18px] cqa-w-[18px] cqa-h-[18px]\">add</mat-icon>\n <span>{{ addAnotherText }}</span>\n </button>\n <div class=\"cqa-flex cqa-gap-3 cqa-justify-end\">\n <button\n type=\"button\"\n class=\"cqa-py-2.5 cqa-px-4 cqa-bg-white cqa-text-[#374151] cqa-border cqa-border-[#d1d5db] cqa-rounded-md cqa-text-sm cqa-font-semibold cqa-cursor-pointer cqa-hover:cqa-bg-[#f9fafb]\"\n (click)=\"onCancel()\">\n {{ cancelText }}\n </button>\n <button\n type=\"button\"\n class=\"cqa-py-2.5 cqa-px-4 cqa-rounded-md cqa-text-sm cqa-font-semibold cqa-border-none cqa-cursor-pointer disabled:cqa-opacity-50 disabled:cqa-cursor-not-allowed cqa-bg-[#1a56db] cqa-text-white cqa-hover:cqa-bg-[#1647b8] disabled:cqa-bg-[#1a56db] cqa-flex cqa-items-center cqa-justify-center cqa-gap-2\"\n [style.pointer-events]=\"isUpdating ? 'none' : 'auto'\"\n [style.cursor]=\"isUpdating ? 'not-allowed' : 'pointer'\"\n [disabled]=\"isUpdateDisabled()\"\n (click)=\"onUpdate()\">\n <mat-spinner *ngIf=\"isUpdating\" diameter=\"16\" class=\"cqa-inline-block update-spinner-white\"></mat-spinner>\n <span>{{ updateText }}</span>\n </button>\n </div>\n </div>\n</ng-container>\n", components: [{ type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: ["form", "config"], outputs: ["selectionChange", "selectClick", "searchChange", "loadMore", "addCustomValue"] }, { type: i4$1.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i6$1.DndDropzoneDirective, selector: "[dndDropzone]", inputs: ["dndDropzone", "dndEffectAllowed", "dndAllowExternal", "dndHorizontal", "dndDragoverClass", "dndDropzoneDisabledClass", "dndDisableIf", "dndDisableDropIf"], outputs: ["dndDragover", "dndDrop"] }, { type: i6$1.DndPlaceholderRefDirective, selector: "[dndPlaceholderRef]" }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6$1.DndDraggableDirective, selector: "[dndDraggable]", inputs: ["dndDraggable", "dndEffectAllowed", "dndType", "dndDraggingClass", "dndDraggingSourceClass", "dndDraggableDisabledClass", "dndDragImageOffsetFunction", "dndDisableIf", "dndDisableDragIf"], outputs: ["dndStart", "dndDrag", "dndEnd", "dndMoved", "dndCopied", "dndLinked", "dndCanceled"] }, { type: i6$1.DndHandleDirective, selector: "[dndHandle]" }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
5570
|
+
AddPrerequisiteCasesSectionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: AddPrerequisiteCasesSectionComponent, selector: "cqa-add-prerequisite-cases-section", inputs: { expanded: "expanded", form: "form", rows: "rows", options: "options", getSelectConfig: "getSelectConfig", label: "label", infoTooltip: "infoTooltip", addAnotherText: "addAnotherText", updateText: "updateText", cancelText: "cancelText", addTriggerText: "addTriggerText", hideAddPrerequisite: "hideAddPrerequisite", updateDisabled: "updateDisabled", isUpdating: "isUpdating", enableServerSearch: "enableServerSearch", hasMoreOptions: "hasMoreOptions", isLoadingOptions: "isLoadingOptions", selectFirstValidationMessage: "selectFirstValidationMessage" }, outputs: { expandedChange: "expandedChange", addRow: "addRow", removeRow: "removeRow", rowsReordered: "rowsReordered", update: "update", cancel: "cancel", selectionChange: "selectionChange", searchOptions: "searchOptions", loadMoreOptions: "loadMoreOptions", prerequisitesChange: "prerequisitesChange" }, host: { classAttribute: "cqa-ui-root cqa-add-prerequisite-cases-section-host" }, queries: [{ propertyName: "selectBodyTpl", first: true, predicate: ["selectBody"], descendants: true, read: TemplateRef }], ngImport: i0, template: "<!-- Add Prerequisite trigger - only when collapsed and no rows (user must click to expand); hide when parent has prerequisites -->\n<ng-container *ngIf=\"rows.length === 0 && !expanded && !hideAddPrerequisite\">\n <div\n class=\"cqa-border-2 cqa-border-dashed cqa-border-[#D8D9FC] cqa-rounded-lg cqa-p-1 cqa-mt-4 cqa-bg-white cqa-cursor-pointer cqa-transition-all cqa-duration-200 cqa-ease-in-out cqa-flex cqa-items-center cqa-justify-center cqa-gap-2 cqa-w-full cqa-hover:cqa-border-[#9999ee] cqa-hover:cqa-bg-[#f8f8ff] cqa-active:cqa-border-[#7c7ce0] cqa-active:cqa-bg-[#eff6ff]\"\n (click)=\"onAddPrerequisiteClick()\">\n <mat-icon class=\"cqa-text-[12px] cqa-w-[12px] cqa-h-[12px] cqa-text-[#3F43EE]\">add</mat-icon>\n <span class=\"cqa-font-regular cqa-font-inter cqa-text-sm cqa-text-[#3F43EE]\">{{ addTriggerText }}</span>\n </div>\n</ng-container>\n\n<!-- Collapsed summary when we have rows but expanded=false -->\n<ng-container *ngIf=\"rows.length > 0 && !expanded\">\n <div\n class=\"cqa-border-2 cqa-border-dashed cqa-border-[#D8D9FC] cqa-rounded-lg cqa-p-1.5 cqa-mt-4 cqa-bg-white cqa-cursor-pointer cqa-transition-all cqa-duration-200 cqa-ease-in-out cqa-flex cqa-items-center cqa-justify-between cqa-min-h-[27px] cqa-hover:cqa-border-[#9ca3af] cqa-hover:cqa-bg-[#f9fafb] cqa-active:cqa-border-[#6366f1] cqa-active:cqa-bg-[#eff6ff]\"\n (click)=\"toggleExpanded(true)\">\n <span class=\"cqa-text-[#4a5565] cqa-font-normal cqa-font-inter cqa-text-xs\">{{ rows.length }} prerequisite{{ rows.length !== 1 ? 's' : '' }}</span>\n <mat-icon class=\"cqa-text-[14px] cqa-w-[14px] cqa-h-[14px] cqa-text-[#4a5565]\">expand_more</mat-icon>\n </div>\n</ng-container>\n\n<!-- Expanded form - when expanded=true (with or without rows; no Add Prerequisite trigger) -->\n<ng-container *ngIf=\"expanded\">\n <div class=\"cqa-p-3 cqa-bg-white cqa-border cqa-border-[#e5e7eb] cqa-rounded-lg\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-1.5 cqa-mb-3\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-[#374151] cqa-m-0 cqa-leading-none\">{{ label }}</label>\n <mat-icon class=\"cqa-inline-flex cqa-mt-1 cqa-items-center cqa-justify-center cqa-w-4 cqa-h-4 cqa-text-sm cqa-text-[#6b7280] cqa-cursor-help cqa-flex-shrink-0\" [matTooltip]=\"infoTooltip\" matTooltipPosition=\"above\" matTooltipShowDelay=\"300\">info</mat-icon>\n <button\n type=\"button\"\n class=\"cqa-ml-auto cqa-flex cqa-items-center cqa-justify-center cqa-w-7 cqa-h-7 cqa-p-0 cqa-bg-transparent cqa-border-none cqa-rounded-md cqa-text-[#6b7280] cqa-cursor-pointer cqa-hover:cqa-bg-[#f3f4f6] cqa-hover:cqa-text-[#374151]\"\n (click)=\"toggleExpanded(false)\"\n matTooltip=\"Close\">\n <mat-icon class=\"cqa-text-xl cqa-w-5 cqa-h-5\">expand_less</mat-icon>\n </button>\n </div>\n\n <div\n class=\"prerequisite-drop-list cqa-flex cqa-flex-col cqa-gap-2 cqa-mb-3\"\n [dndDropzone]=\"['prerequisite-row']\"\n dndEffectAllowed=\"move\"\n dndDragoverClass=\"dndDragover\"\n (dndDrop)=\"onDndDrop($event)\">\n <div dndPlaceholderRef class=\"prerequisite-drag-placeholder\">Drop here</div>\n <div\n *ngFor=\"let row of rows; let i = index; trackBy: trackByKey\"\n class=\"prerequisite-drag-item cqa-flex cqa-items-center cqa-gap-2\"\n [dndDraggable]=\"row\"\n [dndDisableIf]=\"rows.length <= 1\"\n dndEffectAllowed=\"move\"\n dndType=\"prerequisite-row\">\n <!-- 9-dot grid drag handle (only when multiple rows to reorder) -->\n <div *ngIf=\"rows.length > 1\" dndHandle class=\"cqa-flex cqa-flex-shrink-0 cqa-items-center cqa-justify-center cqa-cursor-grab cqa-text-[#6B7280] cqa-hover:cqa-text-[#111827] active:cqa-cursor-grabbing\" matTooltip=\"Drag to reorder\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"3\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"3\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"3\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n </svg>\n </div>\n\n <div class=\"cqa-flex-1 cqa-min-w-0\">\n <!-- Custom template (e.g. parent-provided cqa-dynamic-select) -->\n <ng-container *ngIf=\"selectBodyTpl\">\n <ng-container\n *ngTemplateOutlet=\"selectBodyTpl; context: {\n $implicit: row,\n index: i,\n form: form,\n config: getConfig(i)\n }\">\n </ng-container>\n </ng-container>\n <!-- Default: built-in cqa-dynamic-select -->\n <cqa-dynamic-select\n *ngIf=\"!selectBodyTpl && form\"\n [form]=\"form\"\n [config]=\"getConfig(i)\"\n (selectionChange)=\"onSelectionChange($event, i)\">\n </cqa-dynamic-select>\n </div>\n\n <button\n *ngIf=\"rowHasValue(i)\"\n type=\"button\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-8 cqa-h-8 cqa-min-w-[32px] cqa-bg-transparent cqa-border-none cqa-rounded-md cqa-text-[#6b7280] cqa-cursor-pointer cqa-p-0 cqa-hover:cqa-bg-[#f3f4f6] cqa-hover:cqa-text-[#374151]\"\n (click)=\"onRemoveRow(i)\"\n matTooltip=\"Remove Prerequisite\">\n <mat-icon class=\"cqa-text-lg cqa-w-[18px] cqa-h-[18px]\">close</mat-icon>\n </button>\n </div>\n </div>\n\n <div *ngIf=\"showAddAnotherValidation && !allRowsHaveValues()\" class=\"cqa-text-xs cqa-text-[#dc2626] cqa-mb-2\">\n {{ selectFirstValidationMessage }}\n </div>\n <!-- Add Prerequisite button only in empty state; hide when parent has prerequisites (e.g. collapsing after update) -->\n <div\n *ngIf=\"rows.length === 0 && !hideAddPrerequisite\"\n class=\"cqa-border-2 cqa-border-dashed cqa-border-[#ccccff] cqa-rounded-lg cqa-p-3 cqa-mb-3 cqa-bg-white cqa-cursor-pointer cqa-transition-all cqa-duration-200 cqa-ease-in-out cqa-flex cqa-items-center cqa-justify-center cqa-gap-2 cqa-min-h-[40px] cqa-w-full cqa-hover:cqa-border-[#9999ee] cqa-hover:cqa-bg-[#f8f8ff] cqa-active:cqa-border-[#7c7ce0] cqa-active:cqa-bg-[#eff6ff]\"\n (click)=\"onAddRow()\">\n <mat-icon class=\"cqa-text-[18px] cqa-w-[18px] cqa-h-[18px] cqa-text-[#3b82f6]\">add</mat-icon>\n <span class=\"cqa-font-medium cqa-font-inter cqa-text-sm cqa-text-[#3b82f6]\">{{ addTriggerText }}</span>\n </div>\n <!-- Add Another link when we already have at least one row -->\n <button\n *ngIf=\"rows.length > 0 && !hideAddPrerequisite\"\n type=\"button\"\n class=\"cqa-mb-3 cqa-flex cqa-items-center cqa-gap-2 cqa-bg-transparent cqa-border-none cqa-p-0 cqa-cursor-pointer cqa-font-inter cqa-text-sm cqa-text-[#4242DB] cqa-hover:cqa-underline\"\n (click)=\"onAddRow()\">\n <mat-icon class=\"cqa-text-[18px] cqa-w-[18px] cqa-h-[18px]\">add</mat-icon>\n <span>{{ addAnotherText }}</span>\n </button>\n <div class=\"cqa-flex cqa-gap-3 cqa-justify-end\">\n <button\n type=\"button\"\n class=\"cqa-py-2.5 cqa-px-4 cqa-bg-white cqa-text-[#374151] cqa-border cqa-border-[#d1d5db] cqa-rounded-md cqa-text-sm cqa-font-semibold cqa-cursor-pointer cqa-hover:cqa-bg-[#f9fafb]\"\n (click)=\"onCancel()\">\n {{ cancelText }}\n </button>\n <button\n type=\"button\"\n class=\"cqa-py-2.5 cqa-px-4 cqa-rounded-md cqa-text-sm cqa-font-semibold cqa-border-none cqa-cursor-pointer disabled:cqa-opacity-50 disabled:cqa-cursor-not-allowed cqa-bg-[#1a56db] cqa-text-white cqa-hover:cqa-bg-[#1647b8] disabled:cqa-bg-[#1a56db] cqa-flex cqa-items-center cqa-justify-center cqa-gap-2\"\n [style.pointer-events]=\"isUpdating ? 'none' : 'auto'\"\n [style.cursor]=\"isUpdating ? 'not-allowed' : 'pointer'\"\n [disabled]=\"isUpdateDisabled()\"\n (click)=\"onUpdate()\">\n <mat-spinner *ngIf=\"isUpdating\" diameter=\"16\" class=\"cqa-inline-block update-spinner-white\"></mat-spinner>\n <span>{{ updateText }}</span>\n </button>\n </div>\n </div>\n</ng-container>\n", components: [{ type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: ["form", "config"], outputs: ["selectionChange", "selectClick", "searchChange", "loadMore", "addCustomValue"] }, { type: i4$1.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i6$1.DndDropzoneDirective, selector: "[dndDropzone]", inputs: ["dndDropzone", "dndEffectAllowed", "dndAllowExternal", "dndHorizontal", "dndDragoverClass", "dndDropzoneDisabledClass", "dndDisableIf", "dndDisableDropIf"], outputs: ["dndDragover", "dndDrop"] }, { type: i6$1.DndPlaceholderRefDirective, selector: "[dndPlaceholderRef]" }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6$1.DndDraggableDirective, selector: "[dndDraggable]", inputs: ["dndDraggable", "dndEffectAllowed", "dndType", "dndDraggingClass", "dndDraggingSourceClass", "dndDraggableDisabledClass", "dndDragImageOffsetFunction", "dndDisableIf", "dndDisableDragIf"], outputs: ["dndStart", "dndDrag", "dndEnd", "dndMoved", "dndCopied", "dndLinked", "dndCanceled"] }, { type: i6$1.DndHandleDirective, selector: "[dndHandle]" }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
5562
5571
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AddPrerequisiteCasesSectionComponent, decorators: [{
|
|
5563
5572
|
type: Component,
|
|
5564
|
-
args: [{ selector: 'cqa-add-prerequisite-cases-section', changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'cqa-ui-root cqa-add-prerequisite-cases-section-host' }, template: "<!-- Add Prerequisite trigger - only when collapsed and no rows (user must click to expand); hide when parent has prerequisites -->\n<ng-container *ngIf=\"rows.length === 0 && !expanded && !hideAddPrerequisite\">\n <div\n class=\"cqa-border-2 cqa-border-dashed cqa-border-[#D8D9FC] cqa-rounded-lg cqa-p-1 cqa-mt-4 cqa-bg-white cqa-cursor-pointer cqa-transition-all cqa-duration-200 cqa-ease-in-out cqa-flex cqa-items-center cqa-justify-center cqa-gap-2 cqa-w-full cqa-hover:cqa-border-[#9999ee] cqa-hover:cqa-bg-[#f8f8ff] cqa-active:cqa-border-[#7c7ce0] cqa-active:cqa-bg-[#eff6ff]\"\n (click)=\"onAddPrerequisiteClick()\">\n <mat-icon class=\"cqa-text-[12px] cqa-w-[12px] cqa-h-[12px] cqa-text-[#3F43EE]\">add</mat-icon>\n <span class=\"cqa-font-regular cqa-font-inter cqa-text-sm cqa-text-[#3F43EE]\">{{ addTriggerText }}</span>\n </div>\n</ng-container>\n\n<!-- Collapsed summary when we have rows but expanded=false -->\n<ng-container *ngIf=\"rows.length > 0 && !expanded\">\n <div\n class=\"cqa-border-2 cqa-border-dashed cqa-border-[#D8D9FC] cqa-rounded-lg cqa-p-1.5 cqa-mt-4 cqa-bg-white cqa-cursor-pointer cqa-transition-all cqa-duration-200 cqa-ease-in-out cqa-flex cqa-items-center cqa-justify-between cqa-min-h-[27px] cqa-hover:cqa-border-[#9ca3af] cqa-hover:cqa-bg-[#f9fafb] cqa-active:cqa-border-[#6366f1] cqa-active:cqa-bg-[#eff6ff]\"\n (click)=\"toggleExpanded(true)\">\n <span class=\"cqa-text-[#4a5565] cqa-font-normal cqa-font-inter cqa-text-xs\">{{ rows.length }} prerequisite{{ rows.length !== 1 ? 's' : '' }}</span>\n <mat-icon class=\"cqa-text-[14px] cqa-w-[14px] cqa-h-[14px] cqa-text-[#4a5565]\">expand_more</mat-icon>\n </div>\n</ng-container>\n\n<!-- Expanded form - when expanded=true (with or without rows; no Add Prerequisite trigger) -->\n<ng-container *ngIf=\"expanded\">\n <div class=\"cqa-p-3 cqa-bg-white cqa-border cqa-border-[#e5e7eb] cqa-rounded-lg\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-1.5 cqa-mb-3\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-[#374151] cqa-m-0 cqa-leading-none\">{{ label }}</label>\n <mat-icon class=\"cqa-inline-flex cqa-mt-1 cqa-items-center cqa-justify-center cqa-w-4 cqa-h-4 cqa-text-sm cqa-text-[#6b7280] cqa-cursor-help cqa-flex-shrink-0\" [matTooltip]=\"infoTooltip\" matTooltipPosition=\"above\" matTooltipShowDelay=\"300\">info</mat-icon>\n <button\n type=\"button\"\n class=\"cqa-ml-auto cqa-flex cqa-items-center cqa-justify-center cqa-w-7 cqa-h-7 cqa-p-0 cqa-bg-transparent cqa-border-none cqa-rounded-md cqa-text-[#6b7280] cqa-cursor-pointer cqa-hover:cqa-bg-[#f3f4f6] cqa-hover:cqa-text-[#374151]\"\n (click)=\"toggleExpanded(false)\"\n matTooltip=\"Close\">\n <mat-icon class=\"cqa-text-xl cqa-w-5 cqa-h-5\">expand_less</mat-icon>\n </button>\n </div>\n\n <div\n class=\"prerequisite-drop-list cqa-flex cqa-flex-col cqa-gap-2 cqa-mb-3\"\n [dndDropzone]=\"['prerequisite-row']\"\n dndEffectAllowed=\"move\"\n dndDragoverClass=\"dndDragover\"\n (dndDrop)=\"onDndDrop($event)\">\n <div dndPlaceholderRef class=\"prerequisite-drag-placeholder\">Drop here</div>\n <div\n *ngFor=\"let row of rows; let i = index; trackBy: trackByKey\"\n class=\"prerequisite-drag-item cqa-flex cqa-items-center cqa-gap-2\"\n [dndDraggable]=\"row\"\n [dndDisableIf]=\"rows.length <= 1\"\n dndEffectAllowed=\"move\"\n dndType=\"prerequisite-row\">\n <!-- 9-dot grid drag handle (only when multiple rows to reorder) -->\n <div *ngIf=\"rows.length > 1\" dndHandle class=\"cqa-flex cqa-flex-shrink-0 cqa-items-center cqa-justify-center cqa-cursor-grab cqa-text-[#6B7280] cqa-hover:cqa-text-[#111827] active:cqa-cursor-grabbing\" matTooltip=\"Drag to reorder\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"3\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"3\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"3\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n </svg>\n </div>\n\n <div class=\"cqa-flex-1 cqa-min-w-0\">\n <!-- Custom template (e.g. parent-provided cqa-dynamic-select) -->\n <ng-container *ngIf=\"selectBodyTpl\">\n <ng-container\n *ngTemplateOutlet=\"selectBodyTpl; context: {\n $implicit: row,\n index: i,\n form: form,\n config: getConfig(i)\n }\">\n </ng-container>\n </ng-container>\n <!-- Default: built-in cqa-dynamic-select -->\n <cqa-dynamic-select\n *ngIf=\"!selectBodyTpl && form\"\n [form]=\"form\"\n [config]=\"getConfig(i)\"\n (selectionChange)=\"onSelectionChange($event, i)\">\n </cqa-dynamic-select>\n </div>\n\n <button\n type=\"button\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-8 cqa-h-8 cqa-min-w-[32px] cqa-bg-transparent cqa-border-none cqa-rounded-md cqa-text-[#6b7280] cqa-cursor-pointer cqa-p-0 cqa-hover:cqa-bg-[#f3f4f6] cqa-hover:cqa-text-[#374151]\"\n (click)=\"onRemoveRow(i)\"\n matTooltip=\"
|
|
5573
|
+
args: [{ selector: 'cqa-add-prerequisite-cases-section', changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'cqa-ui-root cqa-add-prerequisite-cases-section-host' }, template: "<!-- Add Prerequisite trigger - only when collapsed and no rows (user must click to expand); hide when parent has prerequisites -->\n<ng-container *ngIf=\"rows.length === 0 && !expanded && !hideAddPrerequisite\">\n <div\n class=\"cqa-border-2 cqa-border-dashed cqa-border-[#D8D9FC] cqa-rounded-lg cqa-p-1 cqa-mt-4 cqa-bg-white cqa-cursor-pointer cqa-transition-all cqa-duration-200 cqa-ease-in-out cqa-flex cqa-items-center cqa-justify-center cqa-gap-2 cqa-w-full cqa-hover:cqa-border-[#9999ee] cqa-hover:cqa-bg-[#f8f8ff] cqa-active:cqa-border-[#7c7ce0] cqa-active:cqa-bg-[#eff6ff]\"\n (click)=\"onAddPrerequisiteClick()\">\n <mat-icon class=\"cqa-text-[12px] cqa-w-[12px] cqa-h-[12px] cqa-text-[#3F43EE]\">add</mat-icon>\n <span class=\"cqa-font-regular cqa-font-inter cqa-text-sm cqa-text-[#3F43EE]\">{{ addTriggerText }}</span>\n </div>\n</ng-container>\n\n<!-- Collapsed summary when we have rows but expanded=false -->\n<ng-container *ngIf=\"rows.length > 0 && !expanded\">\n <div\n class=\"cqa-border-2 cqa-border-dashed cqa-border-[#D8D9FC] cqa-rounded-lg cqa-p-1.5 cqa-mt-4 cqa-bg-white cqa-cursor-pointer cqa-transition-all cqa-duration-200 cqa-ease-in-out cqa-flex cqa-items-center cqa-justify-between cqa-min-h-[27px] cqa-hover:cqa-border-[#9ca3af] cqa-hover:cqa-bg-[#f9fafb] cqa-active:cqa-border-[#6366f1] cqa-active:cqa-bg-[#eff6ff]\"\n (click)=\"toggleExpanded(true)\">\n <span class=\"cqa-text-[#4a5565] cqa-font-normal cqa-font-inter cqa-text-xs\">{{ rows.length }} prerequisite{{ rows.length !== 1 ? 's' : '' }}</span>\n <mat-icon class=\"cqa-text-[14px] cqa-w-[14px] cqa-h-[14px] cqa-text-[#4a5565]\">expand_more</mat-icon>\n </div>\n</ng-container>\n\n<!-- Expanded form - when expanded=true (with or without rows; no Add Prerequisite trigger) -->\n<ng-container *ngIf=\"expanded\">\n <div class=\"cqa-p-3 cqa-bg-white cqa-border cqa-border-[#e5e7eb] cqa-rounded-lg\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-1.5 cqa-mb-3\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-[#374151] cqa-m-0 cqa-leading-none\">{{ label }}</label>\n <mat-icon class=\"cqa-inline-flex cqa-mt-1 cqa-items-center cqa-justify-center cqa-w-4 cqa-h-4 cqa-text-sm cqa-text-[#6b7280] cqa-cursor-help cqa-flex-shrink-0\" [matTooltip]=\"infoTooltip\" matTooltipPosition=\"above\" matTooltipShowDelay=\"300\">info</mat-icon>\n <button\n type=\"button\"\n class=\"cqa-ml-auto cqa-flex cqa-items-center cqa-justify-center cqa-w-7 cqa-h-7 cqa-p-0 cqa-bg-transparent cqa-border-none cqa-rounded-md cqa-text-[#6b7280] cqa-cursor-pointer cqa-hover:cqa-bg-[#f3f4f6] cqa-hover:cqa-text-[#374151]\"\n (click)=\"toggleExpanded(false)\"\n matTooltip=\"Close\">\n <mat-icon class=\"cqa-text-xl cqa-w-5 cqa-h-5\">expand_less</mat-icon>\n </button>\n </div>\n\n <div\n class=\"prerequisite-drop-list cqa-flex cqa-flex-col cqa-gap-2 cqa-mb-3\"\n [dndDropzone]=\"['prerequisite-row']\"\n dndEffectAllowed=\"move\"\n dndDragoverClass=\"dndDragover\"\n (dndDrop)=\"onDndDrop($event)\">\n <div dndPlaceholderRef class=\"prerequisite-drag-placeholder\">Drop here</div>\n <div\n *ngFor=\"let row of rows; let i = index; trackBy: trackByKey\"\n class=\"prerequisite-drag-item cqa-flex cqa-items-center cqa-gap-2\"\n [dndDraggable]=\"row\"\n [dndDisableIf]=\"rows.length <= 1\"\n dndEffectAllowed=\"move\"\n dndType=\"prerequisite-row\">\n <!-- 9-dot grid drag handle (only when multiple rows to reorder) -->\n <div *ngIf=\"rows.length > 1\" dndHandle class=\"cqa-flex cqa-flex-shrink-0 cqa-items-center cqa-justify-center cqa-cursor-grab cqa-text-[#6B7280] cqa-hover:cqa-text-[#111827] active:cqa-cursor-grabbing\" matTooltip=\"Drag to reorder\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"3\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"3\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"3\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n </svg>\n </div>\n\n <div class=\"cqa-flex-1 cqa-min-w-0\">\n <!-- Custom template (e.g. parent-provided cqa-dynamic-select) -->\n <ng-container *ngIf=\"selectBodyTpl\">\n <ng-container\n *ngTemplateOutlet=\"selectBodyTpl; context: {\n $implicit: row,\n index: i,\n form: form,\n config: getConfig(i)\n }\">\n </ng-container>\n </ng-container>\n <!-- Default: built-in cqa-dynamic-select -->\n <cqa-dynamic-select\n *ngIf=\"!selectBodyTpl && form\"\n [form]=\"form\"\n [config]=\"getConfig(i)\"\n (selectionChange)=\"onSelectionChange($event, i)\">\n </cqa-dynamic-select>\n </div>\n\n <button\n *ngIf=\"rowHasValue(i)\"\n type=\"button\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-8 cqa-h-8 cqa-min-w-[32px] cqa-bg-transparent cqa-border-none cqa-rounded-md cqa-text-[#6b7280] cqa-cursor-pointer cqa-p-0 cqa-hover:cqa-bg-[#f3f4f6] cqa-hover:cqa-text-[#374151]\"\n (click)=\"onRemoveRow(i)\"\n matTooltip=\"Remove Prerequisite\">\n <mat-icon class=\"cqa-text-lg cqa-w-[18px] cqa-h-[18px]\">close</mat-icon>\n </button>\n </div>\n </div>\n\n <div *ngIf=\"showAddAnotherValidation && !allRowsHaveValues()\" class=\"cqa-text-xs cqa-text-[#dc2626] cqa-mb-2\">\n {{ selectFirstValidationMessage }}\n </div>\n <!-- Add Prerequisite button only in empty state; hide when parent has prerequisites (e.g. collapsing after update) -->\n <div\n *ngIf=\"rows.length === 0 && !hideAddPrerequisite\"\n class=\"cqa-border-2 cqa-border-dashed cqa-border-[#ccccff] cqa-rounded-lg cqa-p-3 cqa-mb-3 cqa-bg-white cqa-cursor-pointer cqa-transition-all cqa-duration-200 cqa-ease-in-out cqa-flex cqa-items-center cqa-justify-center cqa-gap-2 cqa-min-h-[40px] cqa-w-full cqa-hover:cqa-border-[#9999ee] cqa-hover:cqa-bg-[#f8f8ff] cqa-active:cqa-border-[#7c7ce0] cqa-active:cqa-bg-[#eff6ff]\"\n (click)=\"onAddRow()\">\n <mat-icon class=\"cqa-text-[18px] cqa-w-[18px] cqa-h-[18px] cqa-text-[#3b82f6]\">add</mat-icon>\n <span class=\"cqa-font-medium cqa-font-inter cqa-text-sm cqa-text-[#3b82f6]\">{{ addTriggerText }}</span>\n </div>\n <!-- Add Another link when we already have at least one row -->\n <button\n *ngIf=\"rows.length > 0 && !hideAddPrerequisite\"\n type=\"button\"\n class=\"cqa-mb-3 cqa-flex cqa-items-center cqa-gap-2 cqa-bg-transparent cqa-border-none cqa-p-0 cqa-cursor-pointer cqa-font-inter cqa-text-sm cqa-text-[#4242DB] cqa-hover:cqa-underline\"\n (click)=\"onAddRow()\">\n <mat-icon class=\"cqa-text-[18px] cqa-w-[18px] cqa-h-[18px]\">add</mat-icon>\n <span>{{ addAnotherText }}</span>\n </button>\n <div class=\"cqa-flex cqa-gap-3 cqa-justify-end\">\n <button\n type=\"button\"\n class=\"cqa-py-2.5 cqa-px-4 cqa-bg-white cqa-text-[#374151] cqa-border cqa-border-[#d1d5db] cqa-rounded-md cqa-text-sm cqa-font-semibold cqa-cursor-pointer cqa-hover:cqa-bg-[#f9fafb]\"\n (click)=\"onCancel()\">\n {{ cancelText }}\n </button>\n <button\n type=\"button\"\n class=\"cqa-py-2.5 cqa-px-4 cqa-rounded-md cqa-text-sm cqa-font-semibold cqa-border-none cqa-cursor-pointer disabled:cqa-opacity-50 disabled:cqa-cursor-not-allowed cqa-bg-[#1a56db] cqa-text-white cqa-hover:cqa-bg-[#1647b8] disabled:cqa-bg-[#1a56db] cqa-flex cqa-items-center cqa-justify-center cqa-gap-2\"\n [style.pointer-events]=\"isUpdating ? 'none' : 'auto'\"\n [style.cursor]=\"isUpdating ? 'not-allowed' : 'pointer'\"\n [disabled]=\"isUpdateDisabled()\"\n (click)=\"onUpdate()\">\n <mat-spinner *ngIf=\"isUpdating\" diameter=\"16\" class=\"cqa-inline-block update-spinner-white\"></mat-spinner>\n <span>{{ updateText }}</span>\n </button>\n </div>\n </div>\n</ng-container>\n", styles: [] }]
|
|
5565
5574
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { expanded: [{
|
|
5566
5575
|
type: Input
|
|
5567
5576
|
}], form: [{
|