@cqa-lib/cqa-ui 1.1.180 → 1.1.182

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/esm2020/lib/add-prerequisite-cases-section/add-prerequisite-cases-section.component.mjs +176 -0
  2. package/esm2020/lib/custom-textarea/custom-textarea.component.mjs +6 -3
  3. package/esm2020/lib/custom-toggle/custom-toggle.component.mjs +35 -0
  4. package/esm2020/lib/execution-screen/execution-step.models.mjs +1 -1
  5. package/esm2020/lib/execution-screen/main-step-collapse/main-step-collapse.component.mjs +36 -4
  6. package/esm2020/lib/file-upload/file-upload.component.mjs +87 -0
  7. package/esm2020/lib/item-list/item-list.component.mjs +59 -0
  8. package/esm2020/lib/item-list/item-list.model.mjs +2 -0
  9. package/esm2020/lib/step-builder/step-builder-ai-agent/step-builder-ai-agent.component.mjs +136 -0
  10. package/esm2020/lib/step-builder/step-builder-custom-code/step-builder-custom-code.component.mjs +65 -0
  11. package/esm2020/lib/step-builder/step-builder-database/step-builder-database.component.mjs +1 -1
  12. package/esm2020/lib/step-builder/step-builder-document/step-builder-document.component.mjs +241 -0
  13. package/esm2020/lib/step-builder/step-builder-document-generation-template-step/step-builder-document-generation-template-step.component.mjs +176 -0
  14. package/esm2020/lib/step-builder/step-builder-record-step/step-builder-record-step.component.mjs +31 -0
  15. package/esm2020/lib/test-case-details/custom-edit-step/custom-edit-step.component.mjs +3 -3
  16. package/esm2020/lib/test-case-details/element-list/element-list.component.mjs +50 -0
  17. package/esm2020/lib/test-case-details/element-popup/element-popup-data.mjs +5 -0
  18. package/esm2020/lib/test-case-details/element-popup/element-popup-ref.mjs +32 -0
  19. package/esm2020/lib/test-case-details/element-popup/element-popup.component.mjs +272 -0
  20. package/esm2020/lib/test-case-details/element-popup/element-popup.service.mjs +97 -0
  21. package/esm2020/lib/test-case-details/normal-step/normal-step.component.mjs +151 -19
  22. package/esm2020/lib/test-case-details/test-data-modal/test-data-modal-data.mjs +5 -0
  23. package/esm2020/lib/test-case-details/test-data-modal/test-data-modal-environment.model.mjs +10 -0
  24. package/esm2020/lib/test-case-details/test-data-modal/test-data-modal-parameter.model.mjs +8 -0
  25. package/esm2020/lib/test-case-details/test-data-modal/test-data-modal-ref.mjs +32 -0
  26. package/esm2020/lib/test-case-details/test-data-modal/test-data-modal.component.mjs +301 -0
  27. package/esm2020/lib/test-case-details/test-data-modal/test-data-modal.service.mjs +97 -0
  28. package/esm2020/lib/ui-kit.module.mjs +63 -3
  29. package/esm2020/lib/utils/tw-overlay-container.mjs +9 -4
  30. package/esm2020/public-api.mjs +20 -1
  31. package/fesm2015/cqa-lib-cqa-ui.mjs +3059 -1020
  32. package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
  33. package/fesm2020/cqa-lib-cqa-ui.mjs +3056 -1043
  34. package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
  35. package/lib/add-prerequisite-cases-section/add-prerequisite-cases-section.component.d.ts +88 -0
  36. package/lib/custom-textarea/custom-textarea.component.d.ts +2 -1
  37. package/lib/custom-toggle/custom-toggle.component.d.ts +12 -0
  38. package/lib/execution-screen/execution-step.models.d.ts +2 -0
  39. package/lib/execution-screen/main-step-collapse/main-step-collapse.component.d.ts +30 -1
  40. package/lib/file-upload/file-upload.component.d.ts +26 -0
  41. package/lib/item-list/item-list.component.d.ts +25 -0
  42. package/lib/item-list/item-list.model.d.ts +16 -0
  43. package/lib/step-builder/step-builder-ai-agent/step-builder-ai-agent.component.d.ts +47 -0
  44. package/lib/step-builder/step-builder-custom-code/step-builder-custom-code.component.d.ts +27 -0
  45. package/lib/step-builder/step-builder-document/step-builder-document.component.d.ts +81 -0
  46. package/lib/step-builder/step-builder-document-generation-template-step/step-builder-document-generation-template-step.component.d.ts +55 -0
  47. package/lib/step-builder/step-builder-record-step/step-builder-record-step.component.d.ts +16 -0
  48. package/lib/test-case-details/element-list/element-list.component.d.ts +26 -0
  49. package/lib/test-case-details/element-popup/element-popup-data.d.ts +16 -0
  50. package/lib/test-case-details/element-popup/element-popup-ref.d.ts +13 -0
  51. package/lib/test-case-details/element-popup/element-popup.component.d.ts +60 -0
  52. package/lib/test-case-details/element-popup/element-popup.service.d.ts +23 -0
  53. package/lib/test-case-details/normal-step/normal-step.component.d.ts +17 -2
  54. package/lib/test-case-details/test-data-modal/test-data-modal-data.d.ts +31 -0
  55. package/lib/test-case-details/test-data-modal/test-data-modal-environment.model.d.ts +12 -0
  56. package/lib/test-case-details/test-data-modal/test-data-modal-parameter.model.d.ts +11 -0
  57. package/lib/test-case-details/test-data-modal/test-data-modal-ref.d.ts +13 -0
  58. package/lib/test-case-details/test-data-modal/test-data-modal.component.d.ts +91 -0
  59. package/lib/test-case-details/test-data-modal/test-data-modal.service.d.ts +23 -0
  60. package/lib/ui-kit.module.d.ts +99 -87
  61. package/package.json +1 -1
  62. package/public-api.d.ts +19 -0
  63. package/styles.css +1 -1
@@ -1,11 +1,17 @@
1
1
  import { Component, Input, Output, EventEmitter, TemplateRef, ContentChild } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/common";
3
+ import * as i1 from "../../button/button.component";
4
+ import * as i2 from "@angular/common";
4
5
  export class MainStepCollapseComponent {
5
6
  constructor() {
6
7
  this.title = 'Prerequisites';
7
8
  this.expanded = true;
9
+ /** When true, "View steps" redirects to URL instead of expanding inline. URL comes from item.viewStepsUrl or getViewStepsUrl(item). */
10
+ this.viewStepsAsRedirect = false;
11
+ /** When redirecting, open link in new tab. Default true */
12
+ this.viewStepsOpenInNewTab = true;
8
13
  this.viewSteps = new EventEmitter();
14
+ this.headerButtonClick = new EventEmitter();
9
15
  this.isExpanded = true;
10
16
  this.expandedItemId = null; // Track which item's steps are currently displayed
11
17
  }
@@ -71,12 +77,28 @@ export class MainStepCollapseComponent {
71
77
  // Otherwise use items length
72
78
  return this.items?.length || 0;
73
79
  }
80
+ onHeaderButtonClick(config, index, event) {
81
+ event.stopPropagation();
82
+ event.preventDefault();
83
+ this.headerButtonClick.emit({ config, index });
84
+ }
85
+ /** Resolves the redirect URL for an item: item.viewStepsUrl takes precedence, else getViewStepsUrl(item) */
86
+ getItemViewStepsUrl(item) {
87
+ if (item.viewStepsUrl) {
88
+ return item.viewStepsUrl;
89
+ }
90
+ return this.getViewStepsUrl?.(item);
91
+ }
92
+ /** Whether redirect mode is active and we have a URL for this item */
93
+ hasViewStepsRedirectUrl(item) {
94
+ return !!this.viewStepsAsRedirect && !!this.getItemViewStepsUrl(item);
95
+ }
74
96
  }
75
97
  MainStepCollapseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: MainStepCollapseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
76
- MainStepCollapseComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: MainStepCollapseComponent, selector: "cqa-main-step-collapse", inputs: { title: "title", items: "items", expanded: "expanded", icon: "icon", count: "count", itemContentTemplate: "itemContentTemplate" }, outputs: { viewSteps: "viewSteps" }, host: { classAttribute: "cqa-ui-root" }, queries: [{ propertyName: "itemContentTpl", first: true, predicate: ["itemContent"], descendants: true, read: TemplateRef }], ngImport: i0, template: "<!-- Header -->\n<div\n class=\"cqa-mt-2 cqa-flex cqa-items-center cqa-justify-between cqa-gap-3 cqa-px-3 cqa-py-2 cqa-cursor-pointer cqa-bg-[#EEF2FF] cqa-rounded-[4px] cqa-border cqa-border-[#C6D2FF] cqa-border-solid\"\n (click)=\"toggle()\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-w-full\">\n <!-- Chevron Icon (Left) -->\n <!-- <svg [class.cqa-rotate-180]=\"isExpanded\" class=\"cqa-transition-transform\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 6L8 10L12 6\" stroke=\"#3F51B5\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg> -->\n <div><svg [class.cqa-rotate-180]=\"isExpanded\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 6L8 10L12 6\" stroke=\"#4F39F6\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg></div>\n\n <!-- Chain-Link Icon (if configured, otherwise default) -->\n <!-- <div *ngIf=\"icon && icon.type === 'folder'\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.6666 11.6667C11.976 11.6667 12.2728 11.5437 12.4916 11.325C12.7104 11.1062 12.8333 10.8094 12.8333 10.5V4.66667C12.8333 4.35725 12.7104 4.0605 12.4916 3.84171C12.2728 3.62292 11.976 3.5 11.6666 3.5H7.05829C6.86318 3.50191 6.67069 3.45486 6.49847 3.36314C6.32624 3.27142 6.17977 3.13797 6.07246 2.975L5.59996 2.275C5.49373 2.11369 5.34911 1.98128 5.17908 1.88965C5.00906 1.79802 4.81894 1.75003 4.62579 1.75H2.33329C2.02387 1.75 1.72713 1.87292 1.50833 2.09171C1.28954 2.3105 1.16663 2.60725 1.16663 2.91667V10.5C1.16663 10.8094 1.28954 11.1062 1.50833 11.325C1.72713 11.5437 2.02387 11.6667 2.33329 11.6667H11.6666Z\" fill=\"#EFF6FF\" stroke=\"#3F51B5\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <div *ngIf=\"icon && icon.type === 'loop'\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"16\" height=\"16\" rx=\"4\" fill=\"#EBECFD\"/>\n <path d=\"M9.66663 4.66666L11 5.99999L9.66663 7.33332\" stroke=\"#3F51B5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M5 7.66667V7.33333C5 6.97971 5.14048 6.64057 5.39052 6.39052C5.64057 6.14048 5.97971 6 6.33333 6H11\" stroke=\"#3F51B5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M6.33333 11.3333L5 9.99999L6.33333 8.66666\" stroke=\"#3F51B5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M11 8.33334V8.66668C11 9.0203 10.8595 9.35944 10.6095 9.60949C10.3594 9.85953 10.0203 10 9.66667 10H5\" stroke=\"#3F51B5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div> -->\n <!-- Bar Icon (Bulleted List) -->\n <div *ngIf=\"icon && icon.type === 'bar'\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <!-- First bullet and line -->\n <circle cx=\"3\" cy=\"5\" r=\"2\" fill=\"#4F39F6\"/>\n <line x1=\"7\" y1=\"5\" x2=\"17\" y2=\"5\" stroke=\"#4F39F6\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n <!-- Second bullet and line -->\n <circle cx=\"3\" cy=\"10\" r=\"2\" fill=\"#4F39F6\"/>\n <line x1=\"7\" y1=\"10\" x2=\"17\" y2=\"10\" stroke=\"#4F39F6\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n <!-- Third bullet and line -->\n <circle cx=\"3\" cy=\"15\" r=\"2\" fill=\"#4F39F6\"/>\n <line x1=\"7\" y1=\"15\" x2=\"17\" y2=\"15\" stroke=\"#4F39F6\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n </div>\n\n <!-- Default Chain-Link Icon (when no icon or icon type is not specified) -->\n <div *ngIf=\"!icon || (icon.type !== 'bar' && icon.type !== 'folder' && icon.type !== 'loop' && icon.type !== 'custom')\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M7.50033 14.1663H5.83366C4.72859 14.1663 3.66878 13.7274 2.88738 12.946C2.10598 12.1646 1.66699 11.1047 1.66699 9.99967C1.66699 8.89461 2.10598 7.8348 2.88738 7.0534C3.66878 6.27199 4.72859 5.83301 5.83366 5.83301H7.50033\"\n stroke=\"#4F39F6\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M12.5 5.83301H14.1667C15.2717 5.83301 16.3315 6.27199 17.1129 7.0534C17.8943 7.8348 18.3333 8.89461 18.3333 9.99967C18.3333 11.1047 17.8943 12.1646 17.1129 12.946C16.3315 13.7274 15.2717 14.1663 14.1667 14.1663H12.5\"\n stroke=\"#4F39F6\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6.66699 10H13.3337\" stroke=\"#4F39F6\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n\n <!-- Custom Icon -->\n <div *ngIf=\"icon && icon.type === 'custom' && icon.svg\" [innerHTML]=\"icon.svg\"></div>\n\n <!-- Title -->\n <span class=\"cqa-font-semibold cqa-text-[14px] cqa-leading-[17px] cqa-text-[#312C85] cqa-flex-1\">\n {{ title }}\n </span>\n\n <!-- Badge -->\n <span\n class=\"cqa-px-2 cqa-py-[2px] cqa-rounded-[4px] cqa-bg-[#C6D2FF] cqa-text-[12px] cqa-leading-[16px] cqa-text-[#432DD7]\">\n {{ getDisplayCount() }}\n </span>\n </div>\n</div>\n\n<!-- Expanded Content -->\n<div *ngIf=\"isExpanded\" class=\"cqa-mt-2 cqa-flex cqa-flex-col cqa-gap-2 cqa-px-2.5\">\n <!-- When there are no items, display ng-content directly -->\n <ng-container *ngIf=\"!items || items.length === 0\">\n <ng-content></ng-content>\n </ng-container>\n\n <!-- When items exist, display them -->\n <div *ngFor=\"let item of items\">\n\n <!-- Item Header -->\n <div class=\"cqa-bg-white cqa-border cqa-border-solid cqa-border-[#E5E5E5] cqa-rounded-md cqa-overflow-hidden\">\n <div class=\"cqa-py-2 cqa-px-3 cqa-flex cqa-items-center cqa-justify-between cqa-gap-3\">\n <!-- Left side: Status and Title -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-flex-1\">\n <!-- Status Icon (Filled Green Circle with Checkmark) -->\n <div>\n <!-- Success -->\n <svg *ngIf=\"item.status === 'success'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <g clip-path=\"url(#clip0_48_121)\">\n <path\n d=\"M10.0003 18.3337C14.6027 18.3337 18.3337 14.6027 18.3337 10.0003C18.3337 5.39795 14.6027 1.66699 10.0003 1.66699C5.39795 1.66699 1.66699 5.39795 1.66699 10.0003C1.66699 14.6027 5.39795 18.3337 10.0003 18.3337Z\"\n stroke=\"#00A63E\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M7.5 9.99967L9.16667 11.6663L12.5 8.33301\" stroke=\"#00A63E\" stroke-width=\"1.66667\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_48_121\">\n <rect width=\"20\" height=\"20\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n <!-- Failed -->\n <svg *ngIf=\"item.status === 'failed'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"10\" cy=\"10\" r=\"8\" fill=\"#EF4444\" />\n <path d=\"M7 7L13 13M13 7L7 13\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n <!-- Pending -->\n <svg *ngIf=\"item.status === 'pending'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"10\" cy=\"10\" r=\"8\" fill=\"#9CA3AF\" />\n <path d=\"M10 6V10L13 12\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n <!-- Running -->\n <svg *ngIf=\"item.status === 'running'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"10\" cy=\"10\" r=\"8\" fill=\"#3B82F6\" />\n <path d=\"M10 6V10L13 12\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </div>\n \n <!-- Title -->\n <span class=\"cqa-text-[14px] cqa-leading-[18px]\" style=\"word-break: break-word;\">\n {{ item.title }}\n </span>\n </div>\n \n <!-- Right side: Duration and View Steps Link -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-3\">\n <!-- Duration with Clock Icon -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\"\n stroke=\"#6A7282\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6 3V6L8 7\" stroke=\"#6A7282\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n <span class=\"cqa-text-[14px] cqa-leading-[20px] cqa-text-[#6A7282]\">\n {{ formatDuration(item.duration) }}\n </span>\n </div>\n \n <!-- View Steps Link -->\n <a href=\"#\" (click)=\"onViewSteps(item, $event)\"\n class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold cqa-text-[#3F43EE] cqa-no-underline cqa-flex cqa-items-center cqa-gap-1 hover:cqa-underline\">\n <span>{{ isItemExpanded(item.id) ? 'Hide steps' : 'View steps' }}</span>\n <svg [class.cqa-rotate-90]=\"isItemExpanded(item.id)\" class=\"cqa-transition-transform\" width=\"16\" height=\"15\"\n viewBox=\"0 0 16 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M8.6552 12.8184L7.55413 11.7668L10.852 8.5864H2.83984V7.05032H10.852L7.55413 3.87506L8.6552 2.81836L13.8398 7.81836L8.6552 12.8184Z\"\n fill=\"#3F43EE\" />\n </svg>\n </a>\n </div>\n </div>\n </div>\n\n <!-- Steps Content (shown when item is expanded) -->\n <div *ngIf=\"isItemExpanded(item.id)\">\n <!-- Custom template via TemplateRef (from @ContentChild or @Input) - passes item as context -->\n <ng-container *ngIf=\"itemContentTpl || itemContentTemplate\">\n <div class=\"cqa-p-3\">\n <ng-container\n *ngTemplateOutlet=\"(itemContentTpl || itemContentTemplate)!; context: { $implicit: item, item: item }\"></ng-container>\n </div>\n </ng-container>\n\n <!-- Custom content projection via ng-content - displayed for all expanded items -->\n <ng-content select=\"[itemContent]\"></ng-content>\n </div>\n </div>\n</div>\n\n<!-- Custom content projection after all items - for steps loaded after API call -->\n<ng-content select=\"[afterItems]\"></ng-content>", directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
98
+ MainStepCollapseComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: MainStepCollapseComponent, selector: "cqa-main-step-collapse", inputs: { title: "title", items: "items", expanded: "expanded", icon: "icon", count: "count", itemContentTemplate: "itemContentTemplate", headerButtons: "headerButtons", viewStepsAsRedirect: "viewStepsAsRedirect", getViewStepsUrl: "getViewStepsUrl", viewStepsOpenInNewTab: "viewStepsOpenInNewTab" }, outputs: { viewSteps: "viewSteps", headerButtonClick: "headerButtonClick" }, host: { classAttribute: "cqa-ui-root" }, queries: [{ propertyName: "itemContentTpl", first: true, predicate: ["itemContent"], descendants: true, read: TemplateRef }], ngImport: i0, template: "<!-- Header -->\n<div\n class=\"cqa-mt-2 cqa-flex cqa-items-center cqa-justify-between cqa-gap-3 cqa-px-3 cqa-py-2 cqa-cursor-pointer cqa-bg-[#EEF2FF] cqa-rounded-[4px] cqa-border cqa-border-[#C6D2FF] cqa-border-solid\"\n (click)=\"toggle()\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-w-full\">\n <!-- Chevron Icon (Left) -->\n <!-- <svg [class.cqa-rotate-180]=\"isExpanded\" class=\"cqa-transition-transform\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 6L8 10L12 6\" stroke=\"#3F51B5\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg> -->\n <div><svg [class.cqa-rotate-180]=\"isExpanded\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 6L8 10L12 6\" stroke=\"#4F39F6\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg></div>\n\n <!-- Chain-Link Icon (if configured, otherwise default) -->\n <!-- <div *ngIf=\"icon && icon.type === 'folder'\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.6666 11.6667C11.976 11.6667 12.2728 11.5437 12.4916 11.325C12.7104 11.1062 12.8333 10.8094 12.8333 10.5V4.66667C12.8333 4.35725 12.7104 4.0605 12.4916 3.84171C12.2728 3.62292 11.976 3.5 11.6666 3.5H7.05829C6.86318 3.50191 6.67069 3.45486 6.49847 3.36314C6.32624 3.27142 6.17977 3.13797 6.07246 2.975L5.59996 2.275C5.49373 2.11369 5.34911 1.98128 5.17908 1.88965C5.00906 1.79802 4.81894 1.75003 4.62579 1.75H2.33329C2.02387 1.75 1.72713 1.87292 1.50833 2.09171C1.28954 2.3105 1.16663 2.60725 1.16663 2.91667V10.5C1.16663 10.8094 1.28954 11.1062 1.50833 11.325C1.72713 11.5437 2.02387 11.6667 2.33329 11.6667H11.6666Z\" fill=\"#EFF6FF\" stroke=\"#3F51B5\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <div *ngIf=\"icon && icon.type === 'loop'\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"16\" height=\"16\" rx=\"4\" fill=\"#EBECFD\"/>\n <path d=\"M9.66663 4.66666L11 5.99999L9.66663 7.33332\" stroke=\"#3F51B5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M5 7.66667V7.33333C5 6.97971 5.14048 6.64057 5.39052 6.39052C5.64057 6.14048 5.97971 6 6.33333 6H11\" stroke=\"#3F51B5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M6.33333 11.3333L5 9.99999L6.33333 8.66666\" stroke=\"#3F51B5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M11 8.33334V8.66668C11 9.0203 10.8595 9.35944 10.6095 9.60949C10.3594 9.85953 10.0203 10 9.66667 10H5\" stroke=\"#3F51B5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div> -->\n <!-- Bar Icon (Bulleted List) -->\n <div *ngIf=\"icon && icon.type === 'bar'\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <!-- First bullet and line -->\n <circle cx=\"3\" cy=\"5\" r=\"2\" fill=\"#4F39F6\"/>\n <line x1=\"7\" y1=\"5\" x2=\"17\" y2=\"5\" stroke=\"#4F39F6\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n <!-- Second bullet and line -->\n <circle cx=\"3\" cy=\"10\" r=\"2\" fill=\"#4F39F6\"/>\n <line x1=\"7\" y1=\"10\" x2=\"17\" y2=\"10\" stroke=\"#4F39F6\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n <!-- Third bullet and line -->\n <circle cx=\"3\" cy=\"15\" r=\"2\" fill=\"#4F39F6\"/>\n <line x1=\"7\" y1=\"15\" x2=\"17\" y2=\"15\" stroke=\"#4F39F6\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n </div>\n\n <!-- Default Chain-Link Icon (when no icon or icon type is not specified) -->\n <div *ngIf=\"!icon || (icon.type !== 'bar' && icon.type !== 'folder' && icon.type !== 'loop' && icon.type !== 'custom')\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M7.50033 14.1663H5.83366C4.72859 14.1663 3.66878 13.7274 2.88738 12.946C2.10598 12.1646 1.66699 11.1047 1.66699 9.99967C1.66699 8.89461 2.10598 7.8348 2.88738 7.0534C3.66878 6.27199 4.72859 5.83301 5.83366 5.83301H7.50033\"\n stroke=\"#4F39F6\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M12.5 5.83301H14.1667C15.2717 5.83301 16.3315 6.27199 17.1129 7.0534C17.8943 7.8348 18.3333 8.89461 18.3333 9.99967C18.3333 11.1047 17.8943 12.1646 17.1129 12.946C16.3315 13.7274 15.2717 14.1663 14.1667 14.1663H12.5\"\n stroke=\"#4F39F6\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6.66699 10H13.3337\" stroke=\"#4F39F6\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n\n <!-- Custom Icon -->\n <div *ngIf=\"icon && icon.type === 'custom' && icon.svg\" [innerHTML]=\"icon.svg\"></div>\n\n <!-- Title -->\n <span class=\"cqa-font-semibold cqa-text-[14px] cqa-leading-[17px] cqa-text-[#312C85] cqa-flex-1\">\n {{ title }}\n </span>\n\n <!-- Badge and dynamic header buttons -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\" (click)=\"$event.stopPropagation()\">\n <ng-container *ngFor=\"let btn of headerButtons; let i = index\">\n <cqa-button\n [text]=\"btn.text\"\n [icon]=\"btn.icon\"\n [variant]=\"btn.variant || 'outlined'\"\n [disabled]=\"btn.disabled\"\n [tooltip]=\"btn.tooltip\"\n [customClass]=\"btn.customClass\"\n [btnSize]=\"btn.btnSize || 'sm'\"\n (clicked)=\"onHeaderButtonClick(btn, i, $event)\">\n </cqa-button>\n </ng-container>\n <span\n class=\"cqa-px-2 cqa-py-[2px] cqa-rounded-[4px] cqa-bg-[#C6D2FF] cqa-text-[12px] cqa-leading-[16px] cqa-text-[#432DD7]\">\n {{ getDisplayCount() }}\n </span>\n </div>\n </div>\n</div>\n\n<!-- Expanded Content -->\n<div *ngIf=\"isExpanded\" class=\"cqa-mt-2 cqa-flex cqa-flex-col cqa-gap-2 cqa-px-2.5\">\n <!-- When there are no items, display ng-content directly -->\n <ng-container *ngIf=\"!items || items.length === 0\">\n <ng-content></ng-content>\n </ng-container>\n\n <!-- When items exist, display them -->\n <div *ngFor=\"let item of items\">\n\n <!-- Item Header -->\n <div class=\"cqa-bg-white cqa-border cqa-border-solid cqa-border-[#E5E5E5] cqa-rounded-md cqa-overflow-hidden\">\n <div class=\"cqa-py-2 cqa-px-3 cqa-flex cqa-items-center cqa-justify-between cqa-gap-3\">\n <!-- Left side: Status and Title -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-flex-1\">\n <!-- Status Icon (Filled Green Circle with Checkmark) -->\n <div>\n <!-- Success -->\n <svg *ngIf=\"item.status === 'success'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <g clip-path=\"url(#clip0_48_121)\">\n <path\n d=\"M10.0003 18.3337C14.6027 18.3337 18.3337 14.6027 18.3337 10.0003C18.3337 5.39795 14.6027 1.66699 10.0003 1.66699C5.39795 1.66699 1.66699 5.39795 1.66699 10.0003C1.66699 14.6027 5.39795 18.3337 10.0003 18.3337Z\"\n stroke=\"#00A63E\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M7.5 9.99967L9.16667 11.6663L12.5 8.33301\" stroke=\"#00A63E\" stroke-width=\"1.66667\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_48_121\">\n <rect width=\"20\" height=\"20\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n <!-- Failed -->\n <svg *ngIf=\"item.status === 'failed'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"10\" cy=\"10\" r=\"8\" fill=\"#EF4444\" />\n <path d=\"M7 7L13 13M13 7L7 13\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n <!-- Pending -->\n <svg *ngIf=\"item.status === 'pending'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"10\" cy=\"10\" r=\"8\" fill=\"#9CA3AF\" />\n <path d=\"M10 6V10L13 12\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n <!-- Running -->\n <svg *ngIf=\"item.status === 'running'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"10\" cy=\"10\" r=\"8\" fill=\"#3B82F6\" />\n <path d=\"M10 6V10L13 12\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </div>\n \n <!-- Title -->\n <span class=\"cqa-text-[14px] cqa-leading-[18px]\" style=\"word-break: break-word;\">\n {{ item.title }}\n </span>\n </div>\n \n <!-- Right side: Duration and View Steps Link -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-3\">\n <!-- Duration with Clock Icon -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\"\n stroke=\"#6A7282\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6 3V6L8 7\" stroke=\"#6A7282\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n <span class=\"cqa-text-[14px] cqa-leading-[20px] cqa-text-[#6A7282]\">\n {{ formatDuration(item.duration) }}\n </span>\n </div>\n \n <!-- View Steps Link: redirect mode (navigates to URL) or inline mode (toggle expand) -->\n <a *ngIf=\"hasViewStepsRedirectUrl(item)\"\n [href]=\"getItemViewStepsUrl(item)\"\n [attr.target]=\"viewStepsOpenInNewTab ? '_blank' : null\"\n [attr.rel]=\"viewStepsOpenInNewTab ? 'noopener noreferrer' : null\"\n class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold cqa-text-[#3F43EE] cqa-no-underline cqa-flex cqa-items-center cqa-gap-1 hover:cqa-underline\">\n <span>View steps</span>\n <svg class=\"cqa-transition-transform\" width=\"16\" height=\"15\"\n viewBox=\"0 0 16 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M8.6552 12.8184L7.55413 11.7668L10.852 8.5864H2.83984V7.05032H10.852L7.55413 3.87506L8.6552 2.81836L13.8398 7.81836L8.6552 12.8184Z\"\n fill=\"#3F43EE\" />\n </svg>\n </a>\n <a *ngIf=\"!hasViewStepsRedirectUrl(item)\" href=\"#\" (click)=\"onViewSteps(item, $event)\"\n class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold cqa-text-[#3F43EE] cqa-no-underline cqa-flex cqa-items-center cqa-gap-1 hover:cqa-underline\">\n <span>{{ isItemExpanded(item.id) ? 'Hide steps' : 'View steps' }}</span>\n <svg [class.cqa-rotate-90]=\"isItemExpanded(item.id)\" class=\"cqa-transition-transform\" width=\"16\" height=\"15\"\n viewBox=\"0 0 16 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M8.6552 12.8184L7.55413 11.7668L10.852 8.5864H2.83984V7.05032H10.852L7.55413 3.87506L8.6552 2.81836L13.8398 7.81836L8.6552 12.8184Z\"\n fill=\"#3F43EE\" />\n </svg>\n </a>\n </div>\n </div>\n </div>\n\n <!-- Steps Content (shown when item is expanded) -->\n <div *ngIf=\"isItemExpanded(item.id)\">\n <!-- Custom template via TemplateRef (from @ContentChild or @Input) - passes item as context -->\n <ng-container *ngIf=\"itemContentTpl || itemContentTemplate\">\n <div class=\"cqa-p-3\">\n <ng-container\n *ngTemplateOutlet=\"(itemContentTpl || itemContentTemplate)!; context: { $implicit: item, item: item }\"></ng-container>\n </div>\n </ng-container>\n\n <!-- Custom content projection via ng-content - displayed for all expanded items -->\n <ng-content select=\"[itemContent]\"></ng-content>\n </div>\n </div>\n</div>\n\n<!-- Custom content projection after all items - for steps loaded after API call -->\n<ng-content select=\"[afterItems]\"></ng-content>", components: [{ type: i1.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
77
99
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: MainStepCollapseComponent, decorators: [{
78
100
  type: Component,
79
- args: [{ selector: 'cqa-main-step-collapse', host: { class: 'cqa-ui-root' }, template: "<!-- Header -->\n<div\n class=\"cqa-mt-2 cqa-flex cqa-items-center cqa-justify-between cqa-gap-3 cqa-px-3 cqa-py-2 cqa-cursor-pointer cqa-bg-[#EEF2FF] cqa-rounded-[4px] cqa-border cqa-border-[#C6D2FF] cqa-border-solid\"\n (click)=\"toggle()\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-w-full\">\n <!-- Chevron Icon (Left) -->\n <!-- <svg [class.cqa-rotate-180]=\"isExpanded\" class=\"cqa-transition-transform\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 6L8 10L12 6\" stroke=\"#3F51B5\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg> -->\n <div><svg [class.cqa-rotate-180]=\"isExpanded\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 6L8 10L12 6\" stroke=\"#4F39F6\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg></div>\n\n <!-- Chain-Link Icon (if configured, otherwise default) -->\n <!-- <div *ngIf=\"icon && icon.type === 'folder'\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.6666 11.6667C11.976 11.6667 12.2728 11.5437 12.4916 11.325C12.7104 11.1062 12.8333 10.8094 12.8333 10.5V4.66667C12.8333 4.35725 12.7104 4.0605 12.4916 3.84171C12.2728 3.62292 11.976 3.5 11.6666 3.5H7.05829C6.86318 3.50191 6.67069 3.45486 6.49847 3.36314C6.32624 3.27142 6.17977 3.13797 6.07246 2.975L5.59996 2.275C5.49373 2.11369 5.34911 1.98128 5.17908 1.88965C5.00906 1.79802 4.81894 1.75003 4.62579 1.75H2.33329C2.02387 1.75 1.72713 1.87292 1.50833 2.09171C1.28954 2.3105 1.16663 2.60725 1.16663 2.91667V10.5C1.16663 10.8094 1.28954 11.1062 1.50833 11.325C1.72713 11.5437 2.02387 11.6667 2.33329 11.6667H11.6666Z\" fill=\"#EFF6FF\" stroke=\"#3F51B5\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <div *ngIf=\"icon && icon.type === 'loop'\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"16\" height=\"16\" rx=\"4\" fill=\"#EBECFD\"/>\n <path d=\"M9.66663 4.66666L11 5.99999L9.66663 7.33332\" stroke=\"#3F51B5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M5 7.66667V7.33333C5 6.97971 5.14048 6.64057 5.39052 6.39052C5.64057 6.14048 5.97971 6 6.33333 6H11\" stroke=\"#3F51B5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M6.33333 11.3333L5 9.99999L6.33333 8.66666\" stroke=\"#3F51B5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M11 8.33334V8.66668C11 9.0203 10.8595 9.35944 10.6095 9.60949C10.3594 9.85953 10.0203 10 9.66667 10H5\" stroke=\"#3F51B5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div> -->\n <!-- Bar Icon (Bulleted List) -->\n <div *ngIf=\"icon && icon.type === 'bar'\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <!-- First bullet and line -->\n <circle cx=\"3\" cy=\"5\" r=\"2\" fill=\"#4F39F6\"/>\n <line x1=\"7\" y1=\"5\" x2=\"17\" y2=\"5\" stroke=\"#4F39F6\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n <!-- Second bullet and line -->\n <circle cx=\"3\" cy=\"10\" r=\"2\" fill=\"#4F39F6\"/>\n <line x1=\"7\" y1=\"10\" x2=\"17\" y2=\"10\" stroke=\"#4F39F6\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n <!-- Third bullet and line -->\n <circle cx=\"3\" cy=\"15\" r=\"2\" fill=\"#4F39F6\"/>\n <line x1=\"7\" y1=\"15\" x2=\"17\" y2=\"15\" stroke=\"#4F39F6\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n </div>\n\n <!-- Default Chain-Link Icon (when no icon or icon type is not specified) -->\n <div *ngIf=\"!icon || (icon.type !== 'bar' && icon.type !== 'folder' && icon.type !== 'loop' && icon.type !== 'custom')\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M7.50033 14.1663H5.83366C4.72859 14.1663 3.66878 13.7274 2.88738 12.946C2.10598 12.1646 1.66699 11.1047 1.66699 9.99967C1.66699 8.89461 2.10598 7.8348 2.88738 7.0534C3.66878 6.27199 4.72859 5.83301 5.83366 5.83301H7.50033\"\n stroke=\"#4F39F6\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M12.5 5.83301H14.1667C15.2717 5.83301 16.3315 6.27199 17.1129 7.0534C17.8943 7.8348 18.3333 8.89461 18.3333 9.99967C18.3333 11.1047 17.8943 12.1646 17.1129 12.946C16.3315 13.7274 15.2717 14.1663 14.1667 14.1663H12.5\"\n stroke=\"#4F39F6\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6.66699 10H13.3337\" stroke=\"#4F39F6\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n\n <!-- Custom Icon -->\n <div *ngIf=\"icon && icon.type === 'custom' && icon.svg\" [innerHTML]=\"icon.svg\"></div>\n\n <!-- Title -->\n <span class=\"cqa-font-semibold cqa-text-[14px] cqa-leading-[17px] cqa-text-[#312C85] cqa-flex-1\">\n {{ title }}\n </span>\n\n <!-- Badge -->\n <span\n class=\"cqa-px-2 cqa-py-[2px] cqa-rounded-[4px] cqa-bg-[#C6D2FF] cqa-text-[12px] cqa-leading-[16px] cqa-text-[#432DD7]\">\n {{ getDisplayCount() }}\n </span>\n </div>\n</div>\n\n<!-- Expanded Content -->\n<div *ngIf=\"isExpanded\" class=\"cqa-mt-2 cqa-flex cqa-flex-col cqa-gap-2 cqa-px-2.5\">\n <!-- When there are no items, display ng-content directly -->\n <ng-container *ngIf=\"!items || items.length === 0\">\n <ng-content></ng-content>\n </ng-container>\n\n <!-- When items exist, display them -->\n <div *ngFor=\"let item of items\">\n\n <!-- Item Header -->\n <div class=\"cqa-bg-white cqa-border cqa-border-solid cqa-border-[#E5E5E5] cqa-rounded-md cqa-overflow-hidden\">\n <div class=\"cqa-py-2 cqa-px-3 cqa-flex cqa-items-center cqa-justify-between cqa-gap-3\">\n <!-- Left side: Status and Title -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-flex-1\">\n <!-- Status Icon (Filled Green Circle with Checkmark) -->\n <div>\n <!-- Success -->\n <svg *ngIf=\"item.status === 'success'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <g clip-path=\"url(#clip0_48_121)\">\n <path\n d=\"M10.0003 18.3337C14.6027 18.3337 18.3337 14.6027 18.3337 10.0003C18.3337 5.39795 14.6027 1.66699 10.0003 1.66699C5.39795 1.66699 1.66699 5.39795 1.66699 10.0003C1.66699 14.6027 5.39795 18.3337 10.0003 18.3337Z\"\n stroke=\"#00A63E\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M7.5 9.99967L9.16667 11.6663L12.5 8.33301\" stroke=\"#00A63E\" stroke-width=\"1.66667\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_48_121\">\n <rect width=\"20\" height=\"20\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n <!-- Failed -->\n <svg *ngIf=\"item.status === 'failed'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"10\" cy=\"10\" r=\"8\" fill=\"#EF4444\" />\n <path d=\"M7 7L13 13M13 7L7 13\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n <!-- Pending -->\n <svg *ngIf=\"item.status === 'pending'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"10\" cy=\"10\" r=\"8\" fill=\"#9CA3AF\" />\n <path d=\"M10 6V10L13 12\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n <!-- Running -->\n <svg *ngIf=\"item.status === 'running'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"10\" cy=\"10\" r=\"8\" fill=\"#3B82F6\" />\n <path d=\"M10 6V10L13 12\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </div>\n \n <!-- Title -->\n <span class=\"cqa-text-[14px] cqa-leading-[18px]\" style=\"word-break: break-word;\">\n {{ item.title }}\n </span>\n </div>\n \n <!-- Right side: Duration and View Steps Link -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-3\">\n <!-- Duration with Clock Icon -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\"\n stroke=\"#6A7282\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6 3V6L8 7\" stroke=\"#6A7282\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n <span class=\"cqa-text-[14px] cqa-leading-[20px] cqa-text-[#6A7282]\">\n {{ formatDuration(item.duration) }}\n </span>\n </div>\n \n <!-- View Steps Link -->\n <a href=\"#\" (click)=\"onViewSteps(item, $event)\"\n class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold cqa-text-[#3F43EE] cqa-no-underline cqa-flex cqa-items-center cqa-gap-1 hover:cqa-underline\">\n <span>{{ isItemExpanded(item.id) ? 'Hide steps' : 'View steps' }}</span>\n <svg [class.cqa-rotate-90]=\"isItemExpanded(item.id)\" class=\"cqa-transition-transform\" width=\"16\" height=\"15\"\n viewBox=\"0 0 16 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M8.6552 12.8184L7.55413 11.7668L10.852 8.5864H2.83984V7.05032H10.852L7.55413 3.87506L8.6552 2.81836L13.8398 7.81836L8.6552 12.8184Z\"\n fill=\"#3F43EE\" />\n </svg>\n </a>\n </div>\n </div>\n </div>\n\n <!-- Steps Content (shown when item is expanded) -->\n <div *ngIf=\"isItemExpanded(item.id)\">\n <!-- Custom template via TemplateRef (from @ContentChild or @Input) - passes item as context -->\n <ng-container *ngIf=\"itemContentTpl || itemContentTemplate\">\n <div class=\"cqa-p-3\">\n <ng-container\n *ngTemplateOutlet=\"(itemContentTpl || itemContentTemplate)!; context: { $implicit: item, item: item }\"></ng-container>\n </div>\n </ng-container>\n\n <!-- Custom content projection via ng-content - displayed for all expanded items -->\n <ng-content select=\"[itemContent]\"></ng-content>\n </div>\n </div>\n</div>\n\n<!-- Custom content projection after all items - for steps loaded after API call -->\n<ng-content select=\"[afterItems]\"></ng-content>", styles: [] }]
101
+ args: [{ selector: 'cqa-main-step-collapse', host: { class: 'cqa-ui-root' }, template: "<!-- Header -->\n<div\n class=\"cqa-mt-2 cqa-flex cqa-items-center cqa-justify-between cqa-gap-3 cqa-px-3 cqa-py-2 cqa-cursor-pointer cqa-bg-[#EEF2FF] cqa-rounded-[4px] cqa-border cqa-border-[#C6D2FF] cqa-border-solid\"\n (click)=\"toggle()\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-w-full\">\n <!-- Chevron Icon (Left) -->\n <!-- <svg [class.cqa-rotate-180]=\"isExpanded\" class=\"cqa-transition-transform\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 6L8 10L12 6\" stroke=\"#3F51B5\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg> -->\n <div><svg [class.cqa-rotate-180]=\"isExpanded\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 6L8 10L12 6\" stroke=\"#4F39F6\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg></div>\n\n <!-- Chain-Link Icon (if configured, otherwise default) -->\n <!-- <div *ngIf=\"icon && icon.type === 'folder'\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.6666 11.6667C11.976 11.6667 12.2728 11.5437 12.4916 11.325C12.7104 11.1062 12.8333 10.8094 12.8333 10.5V4.66667C12.8333 4.35725 12.7104 4.0605 12.4916 3.84171C12.2728 3.62292 11.976 3.5 11.6666 3.5H7.05829C6.86318 3.50191 6.67069 3.45486 6.49847 3.36314C6.32624 3.27142 6.17977 3.13797 6.07246 2.975L5.59996 2.275C5.49373 2.11369 5.34911 1.98128 5.17908 1.88965C5.00906 1.79802 4.81894 1.75003 4.62579 1.75H2.33329C2.02387 1.75 1.72713 1.87292 1.50833 2.09171C1.28954 2.3105 1.16663 2.60725 1.16663 2.91667V10.5C1.16663 10.8094 1.28954 11.1062 1.50833 11.325C1.72713 11.5437 2.02387 11.6667 2.33329 11.6667H11.6666Z\" fill=\"#EFF6FF\" stroke=\"#3F51B5\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <div *ngIf=\"icon && icon.type === 'loop'\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"16\" height=\"16\" rx=\"4\" fill=\"#EBECFD\"/>\n <path d=\"M9.66663 4.66666L11 5.99999L9.66663 7.33332\" stroke=\"#3F51B5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M5 7.66667V7.33333C5 6.97971 5.14048 6.64057 5.39052 6.39052C5.64057 6.14048 5.97971 6 6.33333 6H11\" stroke=\"#3F51B5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M6.33333 11.3333L5 9.99999L6.33333 8.66666\" stroke=\"#3F51B5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M11 8.33334V8.66668C11 9.0203 10.8595 9.35944 10.6095 9.60949C10.3594 9.85953 10.0203 10 9.66667 10H5\" stroke=\"#3F51B5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div> -->\n <!-- Bar Icon (Bulleted List) -->\n <div *ngIf=\"icon && icon.type === 'bar'\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <!-- First bullet and line -->\n <circle cx=\"3\" cy=\"5\" r=\"2\" fill=\"#4F39F6\"/>\n <line x1=\"7\" y1=\"5\" x2=\"17\" y2=\"5\" stroke=\"#4F39F6\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n <!-- Second bullet and line -->\n <circle cx=\"3\" cy=\"10\" r=\"2\" fill=\"#4F39F6\"/>\n <line x1=\"7\" y1=\"10\" x2=\"17\" y2=\"10\" stroke=\"#4F39F6\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n <!-- Third bullet and line -->\n <circle cx=\"3\" cy=\"15\" r=\"2\" fill=\"#4F39F6\"/>\n <line x1=\"7\" y1=\"15\" x2=\"17\" y2=\"15\" stroke=\"#4F39F6\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n </div>\n\n <!-- Default Chain-Link Icon (when no icon or icon type is not specified) -->\n <div *ngIf=\"!icon || (icon.type !== 'bar' && icon.type !== 'folder' && icon.type !== 'loop' && icon.type !== 'custom')\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M7.50033 14.1663H5.83366C4.72859 14.1663 3.66878 13.7274 2.88738 12.946C2.10598 12.1646 1.66699 11.1047 1.66699 9.99967C1.66699 8.89461 2.10598 7.8348 2.88738 7.0534C3.66878 6.27199 4.72859 5.83301 5.83366 5.83301H7.50033\"\n stroke=\"#4F39F6\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M12.5 5.83301H14.1667C15.2717 5.83301 16.3315 6.27199 17.1129 7.0534C17.8943 7.8348 18.3333 8.89461 18.3333 9.99967C18.3333 11.1047 17.8943 12.1646 17.1129 12.946C16.3315 13.7274 15.2717 14.1663 14.1667 14.1663H12.5\"\n stroke=\"#4F39F6\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6.66699 10H13.3337\" stroke=\"#4F39F6\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n\n <!-- Custom Icon -->\n <div *ngIf=\"icon && icon.type === 'custom' && icon.svg\" [innerHTML]=\"icon.svg\"></div>\n\n <!-- Title -->\n <span class=\"cqa-font-semibold cqa-text-[14px] cqa-leading-[17px] cqa-text-[#312C85] cqa-flex-1\">\n {{ title }}\n </span>\n\n <!-- Badge and dynamic header buttons -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\" (click)=\"$event.stopPropagation()\">\n <ng-container *ngFor=\"let btn of headerButtons; let i = index\">\n <cqa-button\n [text]=\"btn.text\"\n [icon]=\"btn.icon\"\n [variant]=\"btn.variant || 'outlined'\"\n [disabled]=\"btn.disabled\"\n [tooltip]=\"btn.tooltip\"\n [customClass]=\"btn.customClass\"\n [btnSize]=\"btn.btnSize || 'sm'\"\n (clicked)=\"onHeaderButtonClick(btn, i, $event)\">\n </cqa-button>\n </ng-container>\n <span\n class=\"cqa-px-2 cqa-py-[2px] cqa-rounded-[4px] cqa-bg-[#C6D2FF] cqa-text-[12px] cqa-leading-[16px] cqa-text-[#432DD7]\">\n {{ getDisplayCount() }}\n </span>\n </div>\n </div>\n</div>\n\n<!-- Expanded Content -->\n<div *ngIf=\"isExpanded\" class=\"cqa-mt-2 cqa-flex cqa-flex-col cqa-gap-2 cqa-px-2.5\">\n <!-- When there are no items, display ng-content directly -->\n <ng-container *ngIf=\"!items || items.length === 0\">\n <ng-content></ng-content>\n </ng-container>\n\n <!-- When items exist, display them -->\n <div *ngFor=\"let item of items\">\n\n <!-- Item Header -->\n <div class=\"cqa-bg-white cqa-border cqa-border-solid cqa-border-[#E5E5E5] cqa-rounded-md cqa-overflow-hidden\">\n <div class=\"cqa-py-2 cqa-px-3 cqa-flex cqa-items-center cqa-justify-between cqa-gap-3\">\n <!-- Left side: Status and Title -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-flex-1\">\n <!-- Status Icon (Filled Green Circle with Checkmark) -->\n <div>\n <!-- Success -->\n <svg *ngIf=\"item.status === 'success'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <g clip-path=\"url(#clip0_48_121)\">\n <path\n d=\"M10.0003 18.3337C14.6027 18.3337 18.3337 14.6027 18.3337 10.0003C18.3337 5.39795 14.6027 1.66699 10.0003 1.66699C5.39795 1.66699 1.66699 5.39795 1.66699 10.0003C1.66699 14.6027 5.39795 18.3337 10.0003 18.3337Z\"\n stroke=\"#00A63E\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M7.5 9.99967L9.16667 11.6663L12.5 8.33301\" stroke=\"#00A63E\" stroke-width=\"1.66667\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_48_121\">\n <rect width=\"20\" height=\"20\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n <!-- Failed -->\n <svg *ngIf=\"item.status === 'failed'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"10\" cy=\"10\" r=\"8\" fill=\"#EF4444\" />\n <path d=\"M7 7L13 13M13 7L7 13\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n <!-- Pending -->\n <svg *ngIf=\"item.status === 'pending'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"10\" cy=\"10\" r=\"8\" fill=\"#9CA3AF\" />\n <path d=\"M10 6V10L13 12\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n <!-- Running -->\n <svg *ngIf=\"item.status === 'running'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"10\" cy=\"10\" r=\"8\" fill=\"#3B82F6\" />\n <path d=\"M10 6V10L13 12\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </div>\n \n <!-- Title -->\n <span class=\"cqa-text-[14px] cqa-leading-[18px]\" style=\"word-break: break-word;\">\n {{ item.title }}\n </span>\n </div>\n \n <!-- Right side: Duration and View Steps Link -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-3\">\n <!-- Duration with Clock Icon -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\"\n stroke=\"#6A7282\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6 3V6L8 7\" stroke=\"#6A7282\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n <span class=\"cqa-text-[14px] cqa-leading-[20px] cqa-text-[#6A7282]\">\n {{ formatDuration(item.duration) }}\n </span>\n </div>\n \n <!-- View Steps Link: redirect mode (navigates to URL) or inline mode (toggle expand) -->\n <a *ngIf=\"hasViewStepsRedirectUrl(item)\"\n [href]=\"getItemViewStepsUrl(item)\"\n [attr.target]=\"viewStepsOpenInNewTab ? '_blank' : null\"\n [attr.rel]=\"viewStepsOpenInNewTab ? 'noopener noreferrer' : null\"\n class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold cqa-text-[#3F43EE] cqa-no-underline cqa-flex cqa-items-center cqa-gap-1 hover:cqa-underline\">\n <span>View steps</span>\n <svg class=\"cqa-transition-transform\" width=\"16\" height=\"15\"\n viewBox=\"0 0 16 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M8.6552 12.8184L7.55413 11.7668L10.852 8.5864H2.83984V7.05032H10.852L7.55413 3.87506L8.6552 2.81836L13.8398 7.81836L8.6552 12.8184Z\"\n fill=\"#3F43EE\" />\n </svg>\n </a>\n <a *ngIf=\"!hasViewStepsRedirectUrl(item)\" href=\"#\" (click)=\"onViewSteps(item, $event)\"\n class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold cqa-text-[#3F43EE] cqa-no-underline cqa-flex cqa-items-center cqa-gap-1 hover:cqa-underline\">\n <span>{{ isItemExpanded(item.id) ? 'Hide steps' : 'View steps' }}</span>\n <svg [class.cqa-rotate-90]=\"isItemExpanded(item.id)\" class=\"cqa-transition-transform\" width=\"16\" height=\"15\"\n viewBox=\"0 0 16 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M8.6552 12.8184L7.55413 11.7668L10.852 8.5864H2.83984V7.05032H10.852L7.55413 3.87506L8.6552 2.81836L13.8398 7.81836L8.6552 12.8184Z\"\n fill=\"#3F43EE\" />\n </svg>\n </a>\n </div>\n </div>\n </div>\n\n <!-- Steps Content (shown when item is expanded) -->\n <div *ngIf=\"isItemExpanded(item.id)\">\n <!-- Custom template via TemplateRef (from @ContentChild or @Input) - passes item as context -->\n <ng-container *ngIf=\"itemContentTpl || itemContentTemplate\">\n <div class=\"cqa-p-3\">\n <ng-container\n *ngTemplateOutlet=\"(itemContentTpl || itemContentTemplate)!; context: { $implicit: item, item: item }\"></ng-container>\n </div>\n </ng-container>\n\n <!-- Custom content projection via ng-content - displayed for all expanded items -->\n <ng-content select=\"[itemContent]\"></ng-content>\n </div>\n </div>\n</div>\n\n<!-- Custom content projection after all items - for steps loaded after API call -->\n<ng-content select=\"[afterItems]\"></ng-content>", styles: [] }]
80
102
  }], propDecorators: { title: [{
81
103
  type: Input
82
104
  }], items: [{
@@ -89,10 +111,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
89
111
  type: Input
90
112
  }], itemContentTemplate: [{
91
113
  type: Input
114
+ }], headerButtons: [{
115
+ type: Input
116
+ }], viewStepsAsRedirect: [{
117
+ type: Input
118
+ }], getViewStepsUrl: [{
119
+ type: Input
120
+ }], viewStepsOpenInNewTab: [{
121
+ type: Input
92
122
  }], itemContentTpl: [{
93
123
  type: ContentChild,
94
124
  args: ['itemContent', { read: TemplateRef }]
95
125
  }], viewSteps: [{
96
126
  type: Output
127
+ }], headerButtonClick: [{
128
+ type: Output
97
129
  }] } });
98
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi1zdGVwLWNvbGxhcHNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZXhlY3V0aW9uLXNjcmVlbi9tYWluLXN0ZXAtY29sbGFwc2UvbWFpbi1zdGVwLWNvbGxhcHNlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZXhlY3V0aW9uLXNjcmVlbi9tYWluLXN0ZXAtY29sbGFwc2UvbWFpbi1zdGVwLWNvbGxhcHNlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQVUsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBZ0IxRyxNQUFNLE9BQU8seUJBQXlCO0lBTnRDO1FBT1csVUFBSyxHQUFXLGVBQWUsQ0FBQztRQUVoQyxhQUFRLEdBQVksSUFBSSxDQUFDO1FBS3hCLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBb0IsQ0FBQztRQUUzRCxlQUFVLEdBQVksSUFBSSxDQUFDO1FBQzNCLG1CQUFjLEdBQWtCLElBQUksQ0FBQyxDQUFDLG1EQUFtRDtLQTJFMUY7SUF6RUMsUUFBUTtRQUNOLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUNsQyxDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxjQUFjLENBQUMsT0FBZTtRQUM1QixJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUU7WUFDZixPQUFPLEdBQUcsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7U0FDM0M7UUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQztRQUN6QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBRXRDLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztRQUUzQixJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7WUFDYixLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztTQUN6QjtRQUNELElBQUksT0FBTyxHQUFHLENBQUMsRUFBRTtZQUNmLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDO1NBQzNCO1FBQ0QsSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxPQUFPLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDOUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7U0FDeEI7UUFFRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUNELGFBQWEsQ0FBQyxNQUFrQjtRQUM5QixRQUFRLE1BQU0sRUFBRTtZQUNkLEtBQUssU0FBUztnQkFDWixPQUFPLGNBQWMsQ0FBQztZQUN4QixLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxRQUFRLENBQUM7WUFDbEIsS0FBSyxTQUFTO2dCQUNaLE9BQU8sVUFBVSxDQUFDO1lBQ3BCLEtBQUssU0FBUztnQkFDWixPQUFPLE1BQU0sQ0FBQztZQUNoQjtnQkFDRSxPQUFPLGNBQWMsQ0FBQztTQUN6QjtJQUNILENBQUM7SUFHRCxXQUFXLENBQUMsSUFBc0IsRUFBRSxLQUFZO1FBQzlDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFeEIsc0dBQXNHO1FBQ3RHLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxJQUFJLENBQUMsRUFBRSxFQUFFO1lBQ25DLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLENBQUMsd0JBQXdCO1NBQ3JEO2FBQU07WUFDTCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyx3REFBd0Q7U0FDeEY7UUFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQWM7UUFDM0IsT0FBTyxJQUFJLENBQUMsY0FBYyxLQUFLLE1BQU0sQ0FBQztJQUN4QyxDQUFDO0lBRUQsZUFBZTtRQUNiLCtEQUErRDtRQUMvRCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQ3hFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztTQUNuQjtRQUNELDZCQUE2QjtRQUM3QixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDOztzSEFyRlUseUJBQXlCOzBHQUF6Qix5QkFBeUIsOFdBT0MsV0FBVyw2QkN2QmxELHd2V0FzTCtDOzJGRHRLbEMseUJBQXlCO2tCQU5yQyxTQUFTOytCQUNFLHdCQUF3QixRQUc1QixFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7OEJBR3JCLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDOEMsY0FBYztzQkFBakUsWUFBWTt1QkFBQyxhQUFhLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUN4QyxTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uSW5pdCwgVGVtcGxhdGVSZWYsIENvbnRlbnRDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUHJlcmVxdWlzaXRlSXRlbSwgU3RlcFN0YXR1cyB9IGZyb20gJy4uL2V4ZWN1dGlvbi1zdGVwLm1vZGVscyc7XG5cbmV4cG9ydCB0eXBlIEljb25UeXBlID0gJ2ZvbGRlcicgfCAnbG9vcCcgfCAnYmFyJyB8ICdjdXN0b20nO1xuXG5leHBvcnQgaW50ZXJmYWNlIEljb25Db25maWcge1xuICB0eXBlOiBJY29uVHlwZTtcbiAgc3ZnPzogc3RyaW5nOyAvLyBDdXN0b20gU1ZHIHN0cmluZyB3aGVuIHR5cGUgaXMgJ2N1c3RvbSdcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLW1haW4tc3RlcC1jb2xsYXBzZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9tYWluLXN0ZXAtY29sbGFwc2UuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtdLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH1cbn0pXG5leHBvcnQgY2xhc3MgTWFpblN0ZXBDb2xsYXBzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmcgPSAnUHJlcmVxdWlzaXRlcyc7XG4gIEBJbnB1dCgpIGl0ZW1zITogUHJlcmVxdWlzaXRlSXRlbVtdO1xuICBASW5wdXQoKSBleHBhbmRlZDogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIGljb24/OiBJY29uQ29uZmlnO1xuICBASW5wdXQoKSBjb3VudD86IG51bWJlcjsgLy8gQ291bnQgdG8gZGlzcGxheSB3aGVuIGl0ZW1zIGFycmF5IGlzIGVtcHR5XG4gIEBJbnB1dCgpIGl0ZW1Db250ZW50VGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+OyAvLyBUZW1wbGF0ZSBmb3IgY3VzdG9tIGNvbnRlbnQgdW5kZXIgc3RlcHMgKHByb2dyYW1tYXRpYylcbiAgQENvbnRlbnRDaGlsZCgnaXRlbUNvbnRlbnQnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pIGl0ZW1Db250ZW50VHBsPzogVGVtcGxhdGVSZWY8YW55PjsgLy8gVGVtcGxhdGUgcmVmZXJlbmNlIGZyb20gbmctdGVtcGxhdGVcbiAgQE91dHB1dCgpIHZpZXdTdGVwcyA9IG5ldyBFdmVudEVtaXR0ZXI8UHJlcmVxdWlzaXRlSXRlbT4oKTtcblxuICBpc0V4cGFuZGVkOiBib29sZWFuID0gdHJ1ZTtcbiAgZXhwYW5kZWRJdGVtSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsOyAvLyBUcmFjayB3aGljaCBpdGVtJ3Mgc3RlcHMgYXJlIGN1cnJlbnRseSBkaXNwbGF5ZWRcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzRXhwYW5kZWQgPSB0aGlzLmV4cGFuZGVkO1xuICB9XG5cbiAgdG9nZ2xlKCk6IHZvaWQge1xuICAgIHRoaXMuaXNFeHBhbmRlZCA9ICF0aGlzLmlzRXhwYW5kZWQ7XG4gIH1cblxuICBmb3JtYXREdXJhdGlvbihzZWNvbmRzOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmIChzZWNvbmRzIDwgMSkge1xuICAgICAgcmV0dXJuIGAkeyhzZWNvbmRzICogMTAwMCkudG9GaXhlZCgwKX1tc2A7XG4gICAgfVxuXG4gICAgY29uc3QgaG91cnMgPSBNYXRoLmZsb29yKHNlY29uZHMgLyAzNjAwKTtcbiAgICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcigoc2Vjb25kcyAlIDM2MDApIC8gNjApO1xuICAgIGNvbnN0IHNlY3MgPSBNYXRoLmZsb29yKHNlY29uZHMgJSA2MCk7XG5cbiAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcblxuICAgIGlmIChob3VycyA+IDApIHtcbiAgICAgIHBhcnRzLnB1c2goYCR7aG91cnN9aGApO1xuICAgIH1cbiAgICBpZiAobWludXRlcyA+IDApIHtcbiAgICAgIHBhcnRzLnB1c2goYCR7bWludXRlc31tYCk7XG4gICAgfVxuICAgIGlmIChzZWNzID4gMCB8fCAoaG91cnMgPT09IDAgJiYgbWludXRlcyA9PT0gMCkpIHtcbiAgICAgIHBhcnRzLnB1c2goYCR7c2Vjc31zYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oJyAnKTtcbiAgfVxuICBnZXRTdGF0dXNJY29uKHN0YXR1czogU3RlcFN0YXR1cyk6IHN0cmluZyB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ3N1Y2Nlc3MnOlxuICAgICAgICByZXR1cm4gJ2NoZWNrX2NpcmNsZSc7XG4gICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICByZXR1cm4gJ2NhbmNlbCc7XG4gICAgICBjYXNlICdwZW5kaW5nJzpcbiAgICAgICAgcmV0dXJuICdzY2hlZHVsZSc7XG4gICAgICBjYXNlICdydW5uaW5nJzpcbiAgICAgICAgcmV0dXJuICdzeW5jJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnaGVscF9vdXRsaW5lJztcbiAgICB9XG4gIH1cblxuXG4gIG9uVmlld1N0ZXBzKGl0ZW06IFByZXJlcXVpc2l0ZUl0ZW0sIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgXG4gICAgLy8gQWNjb3JkaW9uIGJlaGF2aW9yOiBpZiBjbGlja2luZyB0aGUgc2FtZSBpdGVtLCBjbG9zZSBpdDsgb3RoZXJ3aXNlLCBjbG9zZSBwcmV2aW91cyBhbmQgb3BlbiBuZXcgb25lXG4gICAgaWYgKHRoaXMuZXhwYW5kZWRJdGVtSWQgPT09IGl0ZW0uaWQpIHtcbiAgICAgIHRoaXMuZXhwYW5kZWRJdGVtSWQgPSBudWxsOyAvLyBDbG9zZSBpZiBhbHJlYWR5IG9wZW5cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5leHBhbmRlZEl0ZW1JZCA9IGl0ZW0uaWQ7IC8vIE9wZW4gdGhlIGNsaWNrZWQgaXRlbSAoY2xvc2VzIHByZXZpb3VzIGF1dG9tYXRpY2FsbHkpXG4gICAgfVxuICAgIFxuICAgIHRoaXMudmlld1N0ZXBzLmVtaXQoaXRlbSk7XG4gIH1cblxuICBpc0l0ZW1FeHBhbmRlZChpdGVtSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmV4cGFuZGVkSXRlbUlkID09PSBpdGVtSWQ7XG4gIH1cblxuICBnZXREaXNwbGF5Q291bnQoKTogbnVtYmVyIHtcbiAgICAvLyBJZiBpdGVtcyBpcyBlbXB0eS91bmRlZmluZWQgYW5kIGNvdW50IGlzIHByb3ZpZGVkLCB1c2UgY291bnRcbiAgICBpZiAoKCF0aGlzLml0ZW1zIHx8IHRoaXMuaXRlbXMubGVuZ3RoID09PSAwKSAmJiB0aGlzLmNvdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvdW50O1xuICAgIH1cbiAgICAvLyBPdGhlcndpc2UgdXNlIGl0ZW1zIGxlbmd0aFxuICAgIHJldHVybiB0aGlzLml0ZW1zPy5sZW5ndGggfHwgMDtcbiAgfVxufVxuIiwiPCEtLSBIZWFkZXIgLS0+XG48ZGl2XG4gIGNsYXNzPVwiY3FhLW10LTIgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS1nYXAtMyBjcWEtcHgtMyBjcWEtcHktMiBjcWEtY3Vyc29yLXBvaW50ZXIgY3FhLWJnLVsjRUVGMkZGXSBjcWEtcm91bmRlZC1bNHB4XSBjcWEtYm9yZGVyIGNxYS1ib3JkZXItWyNDNkQyRkZdIGNxYS1ib3JkZXItc29saWRcIlxuICAoY2xpY2spPVwidG9nZ2xlKClcIj5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zIGNxYS13LWZ1bGxcIj5cbiAgICA8IS0tIENoZXZyb24gSWNvbiAoTGVmdCkgLS0+XG4gICAgPCEtLSA8c3ZnIFtjbGFzcy5jcWEtcm90YXRlLTE4MF09XCJpc0V4cGFuZGVkXCIgY2xhc3M9XCJjcWEtdHJhbnNpdGlvbi10cmFuc2Zvcm1cIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgPHBhdGggZD1cIk00IDZMOCAxMEwxMiA2XCIgc3Ryb2tlPVwiIzNGNTFCNVwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgPC9zdmc+IC0tPlxuICAgIDxkaXY+PHN2ZyBbY2xhc3MuY3FhLXJvdGF0ZS0xODBdPVwiaXNFeHBhbmRlZFwiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiXG4gICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgPHBhdGggZD1cIk00IDZMOCAxMEwxMiA2XCIgc3Ryb2tlPVwiIzRGMzlGNlwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICA8L3N2Zz48L2Rpdj5cblxuICAgIDwhLS0gQ2hhaW4tTGluayBJY29uIChpZiBjb25maWd1cmVkLCBvdGhlcndpc2UgZGVmYXVsdCkgLS0+XG4gICAgPCEtLSA8ZGl2ICpuZ0lmPVwiaWNvbiAmJiBpY29uLnR5cGUgPT09ICdmb2xkZXInXCI+XG4gICAgPHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICA8cGF0aCBkPVwiTTExLjY2NjYgMTEuNjY2N0MxMS45NzYgMTEuNjY2NyAxMi4yNzI4IDExLjU0MzcgMTIuNDkxNiAxMS4zMjVDMTIuNzEwNCAxMS4xMDYyIDEyLjgzMzMgMTAuODA5NCAxMi44MzMzIDEwLjVWNC42NjY2N0MxMi44MzMzIDQuMzU3MjUgMTIuNzEwNCA0LjA2MDUgMTIuNDkxNiAzLjg0MTcxQzEyLjI3MjggMy42MjI5MiAxMS45NzYgMy41IDExLjY2NjYgMy41SDcuMDU4MjlDNi44NjMxOCAzLjUwMTkxIDYuNjcwNjkgMy40NTQ4NiA2LjQ5ODQ3IDMuMzYzMTRDNi4zMjYyNCAzLjI3MTQyIDYuMTc5NzcgMy4xMzc5NyA2LjA3MjQ2IDIuOTc1TDUuNTk5OTYgMi4yNzVDNS40OTM3MyAyLjExMzY5IDUuMzQ5MTEgMS45ODEyOCA1LjE3OTA4IDEuODg5NjVDNS4wMDkwNiAxLjc5ODAyIDQuODE4OTQgMS43NTAwMyA0LjYyNTc5IDEuNzVIMi4zMzMyOUMyLjAyMzg3IDEuNzUgMS43MjcxMyAxLjg3MjkyIDEuNTA4MzMgMi4wOTE3MUMxLjI4OTU0IDIuMzEwNSAxLjE2NjYzIDIuNjA3MjUgMS4xNjY2MyAyLjkxNjY3VjEwLjVDMS4xNjY2MyAxMC44MDk0IDEuMjg5NTQgMTEuMTA2MiAxLjUwODMzIDExLjMyNUMxLjcyNzEzIDExLjU0MzcgMi4wMjM4NyAxMS42NjY3IDIuMzMzMjkgMTEuNjY2N0gxMS42NjY2WlwiIGZpbGw9XCIjRUZGNkZGXCIgc3Ryb2tlPVwiIzNGNTFCNVwiIHN0cm9rZS13aWR0aD1cIjEuMTY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgPC9zdmc+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwiaWNvbiAmJiBpY29uLnR5cGUgPT09ICdsb29wJ1wiPlxuICAgIDxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgPHJlY3Qgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgcng9XCI0XCIgZmlsbD1cIiNFQkVDRkRcIi8+XG4gICAgICA8cGF0aCBkPVwiTTkuNjY2NjMgNC42NjY2NkwxMSA1Ljk5OTk5TDkuNjY2NjMgNy4zMzMzMlwiIHN0cm9rZT1cIiMzRjUxQjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICA8cGF0aCBkPVwiTTUgNy42NjY2N1Y3LjMzMzMzQzUgNi45Nzk3MSA1LjE0MDQ4IDYuNjQwNTcgNS4zOTA1MiA2LjM5MDUyQzUuNjQwNTcgNi4xNDA0OCA1Ljk3OTcxIDYgNi4zMzMzMyA2SDExXCIgc3Ryb2tlPVwiIzNGNTFCNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgIDxwYXRoIGQ9XCJNNi4zMzMzMyAxMS4zMzMzTDUgOS45OTk5OUw2LjMzMzMzIDguNjY2NjZcIiBzdHJva2U9XCIjM0Y1MUI1XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgPHBhdGggZD1cIk0xMSA4LjMzMzM0VjguNjY2NjhDMTEgOS4wMjAzIDEwLjg1OTUgOS4zNTk0NCAxMC42MDk1IDkuNjA5NDlDMTAuMzU5NCA5Ljg1OTUzIDEwLjAyMDMgMTAgOS42NjY2NyAxMEg1XCIgc3Ryb2tlPVwiIzNGNTFCNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICA8L3N2Zz5cbiAgPC9kaXY+IC0tPlxuICAgIDwhLS0gQmFyIEljb24gKEJ1bGxldGVkIExpc3QpIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJpY29uICYmIGljb24udHlwZSA9PT0gJ2JhcidcIj5cbiAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICA8IS0tIEZpcnN0IGJ1bGxldCBhbmQgbGluZSAtLT5cbiAgICAgICAgPGNpcmNsZSBjeD1cIjNcIiBjeT1cIjVcIiByPVwiMlwiIGZpbGw9XCIjNEYzOUY2XCIvPlxuICAgICAgICA8bGluZSB4MT1cIjdcIiB5MT1cIjVcIiB4Mj1cIjE3XCIgeTI9XCI1XCIgc3Ryb2tlPVwiIzRGMzlGNlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIi8+XG4gICAgICAgIDwhLS0gU2Vjb25kIGJ1bGxldCBhbmQgbGluZSAtLT5cbiAgICAgICAgPGNpcmNsZSBjeD1cIjNcIiBjeT1cIjEwXCIgcj1cIjJcIiBmaWxsPVwiIzRGMzlGNlwiLz5cbiAgICAgICAgPGxpbmUgeDE9XCI3XCIgeTE9XCIxMFwiIHgyPVwiMTdcIiB5Mj1cIjEwXCIgc3Ryb2tlPVwiIzRGMzlGNlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIi8+XG4gICAgICAgIDwhLS0gVGhpcmQgYnVsbGV0IGFuZCBsaW5lIC0tPlxuICAgICAgICA8Y2lyY2xlIGN4PVwiM1wiIGN5PVwiMTVcIiByPVwiMlwiIGZpbGw9XCIjNEYzOUY2XCIvPlxuICAgICAgICA8bGluZSB4MT1cIjdcIiB5MT1cIjE1XCIgeDI9XCIxN1wiIHkyPVwiMTVcIiBzdHJva2U9XCIjNEYzOUY2XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiLz5cbiAgICAgIDwvc3ZnPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBEZWZhdWx0IENoYWluLUxpbmsgSWNvbiAod2hlbiBubyBpY29uIG9yIGljb24gdHlwZSBpcyBub3Qgc3BlY2lmaWVkKSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiIWljb24gfHwgKGljb24udHlwZSAhPT0gJ2JhcicgJiYgaWNvbi50eXBlICE9PSAnZm9sZGVyJyAmJiBpY29uLnR5cGUgIT09ICdsb29wJyAmJiBpY29uLnR5cGUgIT09ICdjdXN0b20nKVwiPlxuICAgICAgPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgIDxwYXRoXG4gICAgICAgICAgZD1cIk03LjUwMDMzIDE0LjE2NjNINS44MzM2NkM0LjcyODU5IDE0LjE2NjMgMy42Njg3OCAxMy43Mjc0IDIuODg3MzggMTIuOTQ2QzIuMTA1OTggMTIuMTY0NiAxLjY2Njk5IDExLjEwNDcgMS42NjY5OSA5Ljk5OTY3QzEuNjY2OTkgOC44OTQ2MSAyLjEwNTk4IDcuODM0OCAyLjg4NzM4IDcuMDUzNEMzLjY2ODc4IDYuMjcxOTkgNC43Mjg1OSA1LjgzMzAxIDUuODMzNjYgNS44MzMwMUg3LjUwMDMzXCJcbiAgICAgICAgICBzdHJva2U9XCIjNEYzOUY2XCIgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgIDxwYXRoXG4gICAgICAgICAgZD1cIk0xMi41IDUuODMzMDFIMTQuMTY2N0MxNS4yNzE3IDUuODMzMDEgMTYuMzMxNSA2LjI3MTk5IDE3LjExMjkgNy4wNTM0QzE3Ljg5NDMgNy44MzQ4IDE4LjMzMzMgOC44OTQ2MSAxOC4zMzMzIDkuOTk5NjdDMTguMzMzMyAxMS4xMDQ3IDE3Ljg5NDMgMTIuMTY0NiAxNy4xMTI5IDEyLjk0NkMxNi4zMzE1IDEzLjcyNzQgMTUuMjcxNyAxNC4xNjYzIDE0LjE2NjcgMTQuMTY2M0gxMi41XCJcbiAgICAgICAgICBzdHJva2U9XCIjNEYzOUY2XCIgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgIDxwYXRoIGQ9XCJNNi42NjY5OSAxMEgxMy4zMzM3XCIgc3Ryb2tlPVwiIzRGMzlGNlwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICA8L3N2Zz5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQ3VzdG9tIEljb24gLS0+XG4gICAgPGRpdiAqbmdJZj1cImljb24gJiYgaWNvbi50eXBlID09PSAnY3VzdG9tJyAmJiBpY29uLnN2Z1wiIFtpbm5lckhUTUxdPVwiaWNvbi5zdmdcIj48L2Rpdj5cblxuICAgIDwhLS0gVGl0bGUgLS0+XG4gICAgPHNwYW4gY2xhc3M9XCJjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bMTRweF0gY3FhLWxlYWRpbmctWzE3cHhdIGNxYS10ZXh0LVsjMzEyQzg1XSBjcWEtZmxleC0xXCI+XG4gICAgICB7eyB0aXRsZSB9fVxuICAgIDwvc3Bhbj5cblxuICAgIDwhLS0gQmFkZ2UgLS0+XG4gICAgPHNwYW5cbiAgICAgIGNsYXNzPVwiY3FhLXB4LTIgY3FhLXB5LVsycHhdIGNxYS1yb3VuZGVkLVs0cHhdIGNxYS1iZy1bI0M2RDJGRl0gY3FhLXRleHQtWzEycHhdIGNxYS1sZWFkaW5nLVsxNnB4XSBjcWEtdGV4dC1bIzQzMkREN11cIj5cbiAgICAgIHt7IGdldERpc3BsYXlDb3VudCgpIH19XG4gICAgPC9zcGFuPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIEV4cGFuZGVkIENvbnRlbnQgLS0+XG48ZGl2ICpuZ0lmPVwiaXNFeHBhbmRlZFwiIGNsYXNzPVwiY3FhLW10LTIgY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMiBjcWEtcHgtMi41XCI+XG4gIDwhLS0gV2hlbiB0aGVyZSBhcmUgbm8gaXRlbXMsIGRpc3BsYXkgbmctY29udGVudCBkaXJlY3RseSAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpdGVtcyB8fCBpdGVtcy5sZW5ndGggPT09IDBcIj5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPCEtLSBXaGVuIGl0ZW1zIGV4aXN0LCBkaXNwbGF5IHRoZW0gLS0+XG4gIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXNcIj5cblxuICAgIDwhLS0gSXRlbSBIZWFkZXIgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1iZy13aGl0ZSBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bI0U1RTVFNV0gY3FhLXJvdW5kZWQtbWQgY3FhLW92ZXJmbG93LWhpZGRlblwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1weS0yIGNxYS1weC0zIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtZ2FwLTNcIj5cbiAgICAgICAgPCEtLSBMZWZ0IHNpZGU6IFN0YXR1cyBhbmQgVGl0bGUgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMyBjcWEtZmxleC0xXCI+XG4gICAgICAgICAgPCEtLSBTdGF0dXMgSWNvbiAoRmlsbGVkIEdyZWVuIENpcmNsZSB3aXRoIENoZWNrbWFyaykgLS0+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDwhLS0gU3VjY2VzcyAtLT5cbiAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJpdGVtLnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzQ4XzEyMSlcIj5cbiAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgZD1cIk0xMC4wMDAzIDE4LjMzMzdDMTQuNjAyNyAxOC4zMzM3IDE4LjMzMzcgMTQuNjAyNyAxOC4zMzM3IDEwLjAwMDNDMTguMzMzNyA1LjM5Nzk1IDE0LjYwMjcgMS42NjY5OSAxMC4wMDAzIDEuNjY2OTlDNS4zOTc5NSAxLjY2Njk5IDEuNjY2OTkgNS4zOTc5NSAxLjY2Njk5IDEwLjAwMDNDMS42NjY5OSAxNC42MDI3IDUuMzk3OTUgMTguMzMzNyAxMC4wMDAzIDE4LjMzMzdaXCJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMEE2M0VcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTcuNSA5Ljk5OTY3TDkuMTY2NjcgMTEuNjY2M0wxMi41IDguMzMzMDFcIiBzdHJva2U9XCIjMDBBNjNFXCIgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiXG4gICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgIDxkZWZzPlxuICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzQ4XzEyMVwiPlxuICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCIgLz5cbiAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxuICAgICAgICAgICAgICA8L2RlZnM+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwhLS0gRmFpbGVkIC0tPlxuICAgICAgICAgICAgPHN2ZyAqbmdJZj1cIml0ZW0uc3RhdHVzID09PSAnZmFpbGVkJ1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjEwXCIgY3k9XCIxMFwiIHI9XCI4XCIgZmlsbD1cIiNFRjQ0NDRcIiAvPlxuICAgICAgICAgICAgICA8cGF0aCBkPVwiTTcgN0wxMyAxM00xMyA3TDcgMTNcIiBzdHJva2U9XCJ3aGl0ZVwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwhLS0gUGVuZGluZyAtLT5cbiAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJpdGVtLnN0YXR1cyA9PT0gJ3BlbmRpbmcnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTBcIiBjeT1cIjEwXCIgcj1cIjhcIiBmaWxsPVwiIzlDQTNBRlwiIC8+XG4gICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAgNlYxMEwxMyAxMlwiIHN0cm9rZT1cIndoaXRlXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwhLS0gUnVubmluZyAtLT5cbiAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJpdGVtLnN0YXR1cyA9PT0gJ3J1bm5pbmcnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTBcIiBjeT1cIjEwXCIgcj1cIjhcIiBmaWxsPVwiIzNCODJGNlwiIC8+XG4gICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAgNlYxMEwxMyAxMlwiIHN0cm9rZT1cIndoaXRlXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8L2Rpdj5cbiAgXG4gICAgICAgICAgPCEtLSBUaXRsZSAtLT5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxNHB4XSBjcWEtbGVhZGluZy1bMThweF1cIiBzdHlsZT1cIndvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XCI+XG4gICAgICAgICAgICB7eyBpdGVtLnRpdGxlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgXG4gICAgICAgIDwhLS0gUmlnaHQgc2lkZTogRHVyYXRpb24gYW5kIFZpZXcgU3RlcHMgTGluayAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zXCI+XG4gICAgICAgICAgPCEtLSBEdXJhdGlvbiB3aXRoIENsb2NrIEljb24gLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0xXCI+XG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICBkPVwiTTYgMTFDOC43NjE0MiAxMSAxMSA4Ljc2MTQyIDExIDZDMTEgMy4yMzg1OCA4Ljc2MTQyIDEgNiAxQzMuMjM4NTggMSAxIDMuMjM4NTggMSA2QzEgOC43NjE0MiAzLjIzODU4IDExIDYgMTFaXCJcbiAgICAgICAgICAgICAgICBzdHJva2U9XCIjNkE3MjgyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgPHBhdGggZD1cIk02IDNWNkw4IDdcIiBzdHJva2U9XCIjNkE3MjgyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTRweF0gY3FhLWxlYWRpbmctWzIwcHhdIGNxYS10ZXh0LVsjNkE3MjgyXVwiPlxuICAgICAgICAgICAgICB7eyBmb3JtYXREdXJhdGlvbihpdGVtLmR1cmF0aW9uKSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICBcbiAgICAgICAgICA8IS0tIFZpZXcgU3RlcHMgTGluayAtLT5cbiAgICAgICAgICA8YSBocmVmPVwiI1wiIChjbGljayk9XCJvblZpZXdTdGVwcyhpdGVtLCAkZXZlbnQpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bIzNGNDNFRV0gY3FhLW5vLXVuZGVybGluZSBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMSBob3ZlcjpjcWEtdW5kZXJsaW5lXCI+XG4gICAgICAgICAgICA8c3Bhbj57eyBpc0l0ZW1FeHBhbmRlZChpdGVtLmlkKSA/ICdIaWRlIHN0ZXBzJyA6ICdWaWV3IHN0ZXBzJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzdmcgW2NsYXNzLmNxYS1yb3RhdGUtOTBdPVwiaXNJdGVtRXhwYW5kZWQoaXRlbS5pZClcIiBjbGFzcz1cImNxYS10cmFuc2l0aW9uLXRyYW5zZm9ybVwiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNVwiXG4gICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTYgMTVcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICBkPVwiTTguNjU1MiAxMi44MTg0TDcuNTU0MTMgMTEuNzY2OEwxMC44NTIgOC41ODY0SDIuODM5ODRWNy4wNTAzMkgxMC44NTJMNy41NTQxMyAzLjg3NTA2TDguNjU1MiAyLjgxODM2TDEzLjgzOTggNy44MTgzNkw4LjY1NTIgMTIuODE4NFpcIlxuICAgICAgICAgICAgICAgIGZpbGw9XCIjM0Y0M0VFXCIgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gU3RlcHMgQ29udGVudCAoc2hvd24gd2hlbiBpdGVtIGlzIGV4cGFuZGVkKSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiaXNJdGVtRXhwYW5kZWQoaXRlbS5pZClcIj5cbiAgICAgIDwhLS0gQ3VzdG9tIHRlbXBsYXRlIHZpYSBUZW1wbGF0ZVJlZiAoZnJvbSBAQ29udGVudENoaWxkIG9yIEBJbnB1dCkgLSBwYXNzZXMgaXRlbSBhcyBjb250ZXh0IC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW1Db250ZW50VHBsIHx8IGl0ZW1Db250ZW50VGVtcGxhdGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1wLTNcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIihpdGVtQ29udGVudFRwbCB8fCBpdGVtQ29udGVudFRlbXBsYXRlKSE7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtLCBpdGVtOiBpdGVtIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBDdXN0b20gY29udGVudCBwcm9qZWN0aW9uIHZpYSBuZy1jb250ZW50IC0gZGlzcGxheWVkIGZvciBhbGwgZXhwYW5kZWQgaXRlbXMgLS0+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbaXRlbUNvbnRlbnRdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIEN1c3RvbSBjb250ZW50IHByb2plY3Rpb24gYWZ0ZXIgYWxsIGl0ZW1zIC0gZm9yIHN0ZXBzIGxvYWRlZCBhZnRlciBBUEkgY2FsbCAtLT5cbjxuZy1jb250ZW50IHNlbGVjdD1cIlthZnRlckl0ZW1zXVwiPjwvbmctY29udGVudD4iXX0=
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi1zdGVwLWNvbGxhcHNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZXhlY3V0aW9uLXNjcmVlbi9tYWluLXN0ZXAtY29sbGFwc2UvbWFpbi1zdGVwLWNvbGxhcHNlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZXhlY3V0aW9uLXNjcmVlbi9tYWluLXN0ZXAtY29sbGFwc2UvbWFpbi1zdGVwLWNvbGxhcHNlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQVUsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQThCMUcsTUFBTSxPQUFPLHlCQUF5QjtJQU50QztRQU9XLFVBQUssR0FBVyxlQUFlLENBQUM7UUFFaEMsYUFBUSxHQUFZLElBQUksQ0FBQztRQUtsQyx1SUFBdUk7UUFDOUgsd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBRzlDLDJEQUEyRDtRQUNsRCwwQkFBcUIsR0FBWSxJQUFJLENBQUM7UUFFckMsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFvQixDQUFDO1FBQ2pELHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUFpRCxDQUFDO1FBRWhHLGVBQVUsR0FBWSxJQUFJLENBQUM7UUFDM0IsbUJBQWMsR0FBa0IsSUFBSSxDQUFDLENBQUMsbURBQW1EO0tBOEYxRjtJQTVGQyxRQUFRO1FBQ04sSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDckMsQ0FBQztJQUVELGNBQWMsQ0FBQyxPQUFlO1FBQzVCLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRTtZQUNmLE9BQU8sR0FBRyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztTQUMzQztRQUVELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDbEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFFdEMsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDO1FBRTNCLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtZQUNiLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1NBQ3pCO1FBQ0QsSUFBSSxPQUFPLEdBQUcsQ0FBQyxFQUFFO1lBQ2YsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUM7U0FDM0I7UUFDRCxJQUFJLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxJQUFJLE9BQU8sS0FBSyxDQUFDLENBQUMsRUFBRTtZQUM5QyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztTQUN4QjtRQUVELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBQ0QsYUFBYSxDQUFDLE1BQWtCO1FBQzlCLFFBQVEsTUFBTSxFQUFFO1lBQ2QsS0FBSyxTQUFTO2dCQUNaLE9BQU8sY0FBYyxDQUFDO1lBQ3hCLEtBQUssUUFBUTtnQkFDWCxPQUFPLFFBQVEsQ0FBQztZQUNsQixLQUFLLFNBQVM7Z0JBQ1osT0FBTyxVQUFVLENBQUM7WUFDcEIsS0FBSyxTQUFTO2dCQUNaLE9BQU8sTUFBTSxDQUFDO1lBQ2hCO2dCQUNFLE9BQU8sY0FBYyxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUdELFdBQVcsQ0FBQyxJQUFzQixFQUFFLEtBQVk7UUFDOUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV4QixzR0FBc0c7UUFDdEcsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDbkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsQ0FBQyx3QkFBd0I7U0FDckQ7YUFBTTtZQUNMLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdEQUF3RDtTQUN4RjtRQUVELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxjQUFjLENBQUMsTUFBYztRQUMzQixPQUFPLElBQUksQ0FBQyxjQUFjLEtBQUssTUFBTSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxlQUFlO1FBQ2IsK0RBQStEO1FBQy9ELElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUU7WUFDeEUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO1NBQ25CO1FBQ0QsNkJBQTZCO1FBQzdCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxNQUEwQixFQUFFLEtBQWEsRUFBRSxLQUFpQjtRQUM5RSxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsNEdBQTRHO0lBQzVHLG1CQUFtQixDQUFDLElBQXNCO1FBQ3hDLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDMUI7UUFDRCxPQUFPLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsc0VBQXNFO0lBQ3RFLHVCQUF1QixDQUFDLElBQXNCO1FBQzVDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hFLENBQUM7O3NIQWhIVSx5QkFBeUI7MEdBQXpCLHlCQUF5QixzakJBY0MsV0FBVyw2QkM1Q2xELGcwWkFpTitDOzJGRG5MbEMseUJBQXlCO2tCQU5yQyxTQUFTOytCQUNFLHdCQUF3QixRQUc1QixFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7OEJBR3JCLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFFRyxlQUFlO3NCQUF2QixLQUFLO2dCQUVHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDOEMsY0FBYztzQkFBakUsWUFBWTt1QkFBQyxhQUFhLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUN4QyxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIFRlbXBsYXRlUmVmLCBDb250ZW50Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFByZXJlcXVpc2l0ZUl0ZW0sIFN0ZXBTdGF0dXMgfSBmcm9tICcuLi9leGVjdXRpb24tc3RlcC5tb2RlbHMnO1xuaW1wb3J0IHsgQnV0dG9uVmFyaWFudCB9IGZyb20gJy4uLy4uL2J1dHRvbi9idXR0b24uY29tcG9uZW50JztcblxuZXhwb3J0IHR5cGUgSWNvblR5cGUgPSAnZm9sZGVyJyB8ICdsb29wJyB8ICdiYXInIHwgJ2N1c3RvbSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWNvbkNvbmZpZyB7XG4gIHR5cGU6IEljb25UeXBlO1xuICBzdmc/OiBzdHJpbmc7IC8vIEN1c3RvbSBTVkcgc3RyaW5nIHdoZW4gdHlwZSBpcyAnY3VzdG9tJ1xufVxuXG4vKiogQ29uZmlnIGZvciBkeW5hbWljIGhlYWRlciBidXR0b25zIHNob3duIGJlc2lkZSB0aGUgaXRlbXMgY291bnQgYmFkZ2UgKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGVhZGVyQnV0dG9uQ29uZmlnIHtcbiAgdGV4dD86IHN0cmluZztcbiAgaWNvbj86IHN0cmluZztcbiAgdmFyaWFudD86IEJ1dHRvblZhcmlhbnQ7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgdG9vbHRpcD86IHN0cmluZztcbiAgY3VzdG9tQ2xhc3M/OiBzdHJpbmc7XG4gIGJ0blNpemU/OiAnc20nIHwgJ21kJyB8ICdsZyc7XG4gIC8qKiBPcHRpb25hbCBpZCB0byBpZGVudGlmeSB0aGUgYnV0dG9uIGluIGhlYWRlckJ1dHRvbkNsaWNrIGV2ZW50ICovXG4gIGlkPzogc3RyaW5nO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtbWFpbi1zdGVwLWNvbGxhcHNlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21haW4tc3RlcC1jb2xsYXBzZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW10sXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfVxufSlcbmV4cG9ydCBjbGFzcyBNYWluU3RlcENvbGxhcHNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZyA9ICdQcmVyZXF1aXNpdGVzJztcbiAgQElucHV0KCkgaXRlbXMhOiBQcmVyZXF1aXNpdGVJdGVtW107XG4gIEBJbnB1dCgpIGV4cGFuZGVkOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgaWNvbj86IEljb25Db25maWc7XG4gIEBJbnB1dCgpIGNvdW50PzogbnVtYmVyOyAvLyBDb3VudCB0byBkaXNwbGF5IHdoZW4gaXRlbXMgYXJyYXkgaXMgZW1wdHlcbiAgQElucHV0KCkgaXRlbUNvbnRlbnRUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47IC8vIFRlbXBsYXRlIGZvciBjdXN0b20gY29udGVudCB1bmRlciBzdGVwcyAocHJvZ3JhbW1hdGljKVxuICBASW5wdXQoKSBoZWFkZXJCdXR0b25zPzogSGVhZGVyQnV0dG9uQ29uZmlnW107IC8vIER5bmFtaWMgYnV0dG9ucyB0byBzaG93IGJlc2lkZSB0aGUgaXRlbXMgY291bnQgYmFkZ2VcbiAgLyoqIFdoZW4gdHJ1ZSwgXCJWaWV3IHN0ZXBzXCIgcmVkaXJlY3RzIHRvIFVSTCBpbnN0ZWFkIG9mIGV4cGFuZGluZyBpbmxpbmUuIFVSTCBjb21lcyBmcm9tIGl0ZW0udmlld1N0ZXBzVXJsIG9yIGdldFZpZXdTdGVwc1VybChpdGVtKS4gKi9cbiAgQElucHV0KCkgdmlld1N0ZXBzQXNSZWRpcmVjdDogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogT3B0aW9uYWwgZnVuY3Rpb24gdG8gZ2V0IHJlZGlyZWN0IFVSTCBwZXIgaXRlbS4gVXNlZCB3aGVuIGl0ZW0udmlld1N0ZXBzVXJsIGlzIG5vdCBzZXQuICovXG4gIEBJbnB1dCgpIGdldFZpZXdTdGVwc1VybD86IChpdGVtOiBQcmVyZXF1aXNpdGVJdGVtKSA9PiBzdHJpbmc7XG4gIC8qKiBXaGVuIHJlZGlyZWN0aW5nLCBvcGVuIGxpbmsgaW4gbmV3IHRhYi4gRGVmYXVsdCB0cnVlICovXG4gIEBJbnB1dCgpIHZpZXdTdGVwc09wZW5Jbk5ld1RhYjogYm9vbGVhbiA9IHRydWU7XG4gIEBDb250ZW50Q2hpbGQoJ2l0ZW1Db250ZW50JywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSBpdGVtQ29udGVudFRwbD86IFRlbXBsYXRlUmVmPGFueT47IC8vIFRlbXBsYXRlIHJlZmVyZW5jZSBmcm9tIG5nLXRlbXBsYXRlXG4gIEBPdXRwdXQoKSB2aWV3U3RlcHMgPSBuZXcgRXZlbnRFbWl0dGVyPFByZXJlcXVpc2l0ZUl0ZW0+KCk7XG4gIEBPdXRwdXQoKSBoZWFkZXJCdXR0b25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8eyBjb25maWc6IEhlYWRlckJ1dHRvbkNvbmZpZzsgaW5kZXg6IG51bWJlciB9PigpO1xuXG4gIGlzRXhwYW5kZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBleHBhbmRlZEl0ZW1JZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7IC8vIFRyYWNrIHdoaWNoIGl0ZW0ncyBzdGVwcyBhcmUgY3VycmVudGx5IGRpc3BsYXllZFxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaXNFeHBhbmRlZCA9IHRoaXMuZXhwYW5kZWQ7XG4gIH1cblxuICB0b2dnbGUoKTogdm9pZCB7XG4gICAgdGhpcy5pc0V4cGFuZGVkID0gIXRoaXMuaXNFeHBhbmRlZDtcbiAgfVxuXG4gIGZvcm1hdER1cmF0aW9uKHNlY29uZHM6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKHNlY29uZHMgPCAxKSB7XG4gICAgICByZXR1cm4gYCR7KHNlY29uZHMgKiAxMDAwKS50b0ZpeGVkKDApfW1zYDtcbiAgICB9XG5cbiAgICBjb25zdCBob3VycyA9IE1hdGguZmxvb3Ioc2Vjb25kcyAvIDM2MDApO1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKChzZWNvbmRzICUgMzYwMCkgLyA2MCk7XG4gICAgY29uc3Qgc2VjcyA9IE1hdGguZmxvb3Ioc2Vjb25kcyAlIDYwKTtcblxuICAgIGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKGhvdXJzID4gMCkge1xuICAgICAgcGFydHMucHVzaChgJHtob3Vyc31oYCk7XG4gICAgfVxuICAgIGlmIChtaW51dGVzID4gMCkge1xuICAgICAgcGFydHMucHVzaChgJHttaW51dGVzfW1gKTtcbiAgICB9XG4gICAgaWYgKHNlY3MgPiAwIHx8IChob3VycyA9PT0gMCAmJiBtaW51dGVzID09PSAwKSkge1xuICAgICAgcGFydHMucHVzaChgJHtzZWNzfXNgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFydHMuam9pbignICcpO1xuICB9XG4gIGdldFN0YXR1c0ljb24oc3RhdHVzOiBTdGVwU3RhdHVzKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAnc3VjY2Vzcyc6XG4gICAgICAgIHJldHVybiAnY2hlY2tfY2lyY2xlJztcbiAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgIHJldHVybiAnY2FuY2VsJztcbiAgICAgIGNhc2UgJ3BlbmRpbmcnOlxuICAgICAgICByZXR1cm4gJ3NjaGVkdWxlJztcbiAgICAgIGNhc2UgJ3J1bm5pbmcnOlxuICAgICAgICByZXR1cm4gJ3N5bmMnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdoZWxwX291dGxpbmUnO1xuICAgIH1cbiAgfVxuXG5cbiAgb25WaWV3U3RlcHMoaXRlbTogUHJlcmVxdWlzaXRlSXRlbSwgZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBcbiAgICAvLyBBY2NvcmRpb24gYmVoYXZpb3I6IGlmIGNsaWNraW5nIHRoZSBzYW1lIGl0ZW0sIGNsb3NlIGl0OyBvdGhlcndpc2UsIGNsb3NlIHByZXZpb3VzIGFuZCBvcGVuIG5ldyBvbmVcbiAgICBpZiAodGhpcy5leHBhbmRlZEl0ZW1JZCA9PT0gaXRlbS5pZCkge1xuICAgICAgdGhpcy5leHBhbmRlZEl0ZW1JZCA9IG51bGw7IC8vIENsb3NlIGlmIGFscmVhZHkgb3BlblxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmV4cGFuZGVkSXRlbUlkID0gaXRlbS5pZDsgLy8gT3BlbiB0aGUgY2xpY2tlZCBpdGVtIChjbG9zZXMgcHJldmlvdXMgYXV0b21hdGljYWxseSlcbiAgICB9XG4gICAgXG4gICAgdGhpcy52aWV3U3RlcHMuZW1pdChpdGVtKTtcbiAgfVxuXG4gIGlzSXRlbUV4cGFuZGVkKGl0ZW1JZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kZWRJdGVtSWQgPT09IGl0ZW1JZDtcbiAgfVxuXG4gIGdldERpc3BsYXlDb3VudCgpOiBudW1iZXIge1xuICAgIC8vIElmIGl0ZW1zIGlzIGVtcHR5L3VuZGVmaW5lZCBhbmQgY291bnQgaXMgcHJvdmlkZWQsIHVzZSBjb3VudFxuICAgIGlmICgoIXRoaXMuaXRlbXMgfHwgdGhpcy5pdGVtcy5sZW5ndGggPT09IDApICYmIHRoaXMuY291bnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMuY291bnQ7XG4gICAgfVxuICAgIC8vIE90aGVyd2lzZSB1c2UgaXRlbXMgbGVuZ3RoXG4gICAgcmV0dXJuIHRoaXMuaXRlbXM/Lmxlbmd0aCB8fCAwO1xuICB9XG5cbiAgb25IZWFkZXJCdXR0b25DbGljayhjb25maWc6IEhlYWRlckJ1dHRvbkNvbmZpZywgaW5kZXg6IG51bWJlciwgZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuaGVhZGVyQnV0dG9uQ2xpY2suZW1pdCh7IGNvbmZpZywgaW5kZXggfSk7XG4gIH1cblxuICAvKiogUmVzb2x2ZXMgdGhlIHJlZGlyZWN0IFVSTCBmb3IgYW4gaXRlbTogaXRlbS52aWV3U3RlcHNVcmwgdGFrZXMgcHJlY2VkZW5jZSwgZWxzZSBnZXRWaWV3U3RlcHNVcmwoaXRlbSkgKi9cbiAgZ2V0SXRlbVZpZXdTdGVwc1VybChpdGVtOiBQcmVyZXF1aXNpdGVJdGVtKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoaXRlbS52aWV3U3RlcHNVcmwpIHtcbiAgICAgIHJldHVybiBpdGVtLnZpZXdTdGVwc1VybDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0Vmlld1N0ZXBzVXJsPy4oaXRlbSk7XG4gIH1cblxuICAvKiogV2hldGhlciByZWRpcmVjdCBtb2RlIGlzIGFjdGl2ZSBhbmQgd2UgaGF2ZSBhIFVSTCBmb3IgdGhpcyBpdGVtICovXG4gIGhhc1ZpZXdTdGVwc1JlZGlyZWN0VXJsKGl0ZW06IFByZXJlcXVpc2l0ZUl0ZW0pOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnZpZXdTdGVwc0FzUmVkaXJlY3QgJiYgISF0aGlzLmdldEl0ZW1WaWV3U3RlcHNVcmwoaXRlbSk7XG4gIH1cbn1cbiIsIjwhLS0gSGVhZGVyIC0tPlxuPGRpdlxuICBjbGFzcz1cImNxYS1tdC0yIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtZ2FwLTMgY3FhLXB4LTMgY3FhLXB5LTIgY3FhLWN1cnNvci1wb2ludGVyIGNxYS1iZy1bI0VFRjJGRl0gY3FhLXJvdW5kZWQtWzRweF0gY3FhLWJvcmRlciBjcWEtYm9yZGVyLVsjQzZEMkZGXSBjcWEtYm9yZGVyLXNvbGlkXCJcbiAgKGNsaWNrKT1cInRvZ2dsZSgpXCI+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMyBjcWEtdy1mdWxsXCI+XG4gICAgPCEtLSBDaGV2cm9uIEljb24gKExlZnQpIC0tPlxuICAgIDwhLS0gPHN2ZyBbY2xhc3MuY3FhLXJvdGF0ZS0xODBdPVwiaXNFeHBhbmRlZFwiIGNsYXNzPVwiY3FhLXRyYW5zaXRpb24tdHJhbnNmb3JtXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgIDxwYXRoIGQ9XCJNNCA2TDggMTBMMTIgNlwiIHN0cm9rZT1cIiMzRjUxQjVcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gIDwvc3ZnPiAtLT5cbiAgICA8ZGl2PjxzdmcgW2NsYXNzLmNxYS1yb3RhdGUtMTgwXT1cImlzRXhwYW5kZWRcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIlxuICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgIDxwYXRoIGQ9XCJNNCA2TDggMTBMMTIgNlwiIHN0cm9rZT1cIiM0RjM5RjZcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgPC9zdmc+PC9kaXY+XG5cbiAgICA8IS0tIENoYWluLUxpbmsgSWNvbiAoaWYgY29uZmlndXJlZCwgb3RoZXJ3aXNlIGRlZmF1bHQpIC0tPlxuICAgIDwhLS0gPGRpdiAqbmdJZj1cImljb24gJiYgaWNvbi50eXBlID09PSAnZm9sZGVyJ1wiPlxuICAgIDxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgPHBhdGggZD1cIk0xMS42NjY2IDExLjY2NjdDMTEuOTc2IDExLjY2NjcgMTIuMjcyOCAxMS41NDM3IDEyLjQ5MTYgMTEuMzI1QzEyLjcxMDQgMTEuMTA2MiAxMi44MzMzIDEwLjgwOTQgMTIuODMzMyAxMC41VjQuNjY2NjdDMTIuODMzMyA0LjM1NzI1IDEyLjcxMDQgNC4wNjA1IDEyLjQ5MTYgMy44NDE3MUMxMi4yNzI4IDMuNjIyOTIgMTEuOTc2IDMuNSAxMS42NjY2IDMuNUg3LjA1ODI5QzYuODYzMTggMy41MDE5MSA2LjY3MDY5IDMuNDU0ODYgNi40OTg0NyAzLjM2MzE0QzYuMzI2MjQgMy4yNzE0MiA2LjE3OTc3IDMuMTM3OTcgNi4wNzI0NiAyLjk3NUw1LjU5OTk2IDIuMjc1QzUuNDkzNzMgMi4xMTM2OSA1LjM0OTExIDEuOTgxMjggNS4xNzkwOCAxLjg4OTY1QzUuMDA5MDYgMS43OTgwMiA0LjgxODk0IDEuNzUwMDMgNC42MjU3OSAxLjc1SDIuMzMzMjlDMi4wMjM4NyAxLjc1IDEuNzI3MTMgMS44NzI5MiAxLjUwODMzIDIuMDkxNzFDMS4yODk1NCAyLjMxMDUgMS4xNjY2MyAyLjYwNzI1IDEuMTY2NjMgMi45MTY2N1YxMC41QzEuMTY2NjMgMTAuODA5NCAxLjI4OTU0IDExLjEwNjIgMS41MDgzMyAxMS4zMjVDMS43MjcxMyAxMS41NDM3IDIuMDIzODcgMTEuNjY2NyAyLjMzMzI5IDExLjY2NjdIMTEuNjY2NlpcIiBmaWxsPVwiI0VGRjZGRlwiIHN0cm9rZT1cIiMzRjUxQjVcIiBzdHJva2Utd2lkdGg9XCIxLjE2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgIDwvc3ZnPlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cImljb24gJiYgaWNvbi50eXBlID09PSAnbG9vcCdcIj5cbiAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgIDxyZWN0IHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHJ4PVwiNFwiIGZpbGw9XCIjRUJFQ0ZEXCIvPlxuICAgICAgPHBhdGggZD1cIk05LjY2NjYzIDQuNjY2NjZMMTEgNS45OTk5OUw5LjY2NjYzIDcuMzMzMzJcIiBzdHJva2U9XCIjM0Y1MUI1XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgPHBhdGggZD1cIk01IDcuNjY2NjdWNy4zMzMzM0M1IDYuOTc5NzEgNS4xNDA0OCA2LjY0MDU3IDUuMzkwNTIgNi4zOTA1MkM1LjY0MDU3IDYuMTQwNDggNS45Nzk3MSA2IDYuMzMzMzMgNkgxMVwiIHN0cm9rZT1cIiMzRjUxQjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICA8cGF0aCBkPVwiTTYuMzMzMzMgMTEuMzMzM0w1IDkuOTk5OTlMNi4zMzMzMyA4LjY2NjY2XCIgc3Ryb2tlPVwiIzNGNTFCNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgIDxwYXRoIGQ9XCJNMTEgOC4zMzMzNFY4LjY2NjY4QzExIDkuMDIwMyAxMC44NTk1IDkuMzU5NDQgMTAuNjA5NSA5LjYwOTQ5QzEwLjM1OTQgOS44NTk1MyAxMC4wMjAzIDEwIDkuNjY2NjcgMTBINVwiIHN0cm9rZT1cIiMzRjUxQjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgPC9zdmc+XG4gIDwvZGl2PiAtLT5cbiAgICA8IS0tIEJhciBJY29uIChCdWxsZXRlZCBMaXN0KSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiaWNvbiAmJiBpY29uLnR5cGUgPT09ICdiYXInXCI+XG4gICAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgPCEtLSBGaXJzdCBidWxsZXQgYW5kIGxpbmUgLS0+XG4gICAgICAgIDxjaXJjbGUgY3g9XCIzXCIgY3k9XCI1XCIgcj1cIjJcIiBmaWxsPVwiIzRGMzlGNlwiLz5cbiAgICAgICAgPGxpbmUgeDE9XCI3XCIgeTE9XCI1XCIgeDI9XCIxN1wiIHkyPVwiNVwiIHN0cm9rZT1cIiM0RjM5RjZcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIvPlxuICAgICAgICA8IS0tIFNlY29uZCBidWxsZXQgYW5kIGxpbmUgLS0+XG4gICAgICAgIDxjaXJjbGUgY3g9XCIzXCIgY3k9XCIxMFwiIHI9XCIyXCIgZmlsbD1cIiM0RjM5RjZcIi8+XG4gICAgICAgIDxsaW5lIHgxPVwiN1wiIHkxPVwiMTBcIiB4Mj1cIjE3XCIgeTI9XCIxMFwiIHN0cm9rZT1cIiM0RjM5RjZcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIvPlxuICAgICAgICA8IS0tIFRoaXJkIGJ1bGxldCBhbmQgbGluZSAtLT5cbiAgICAgICAgPGNpcmNsZSBjeD1cIjNcIiBjeT1cIjE1XCIgcj1cIjJcIiBmaWxsPVwiIzRGMzlGNlwiLz5cbiAgICAgICAgPGxpbmUgeDE9XCI3XCIgeTE9XCIxNVwiIHgyPVwiMTdcIiB5Mj1cIjE1XCIgc3Ryb2tlPVwiIzRGMzlGNlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIi8+XG4gICAgICA8L3N2Zz5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRGVmYXVsdCBDaGFpbi1MaW5rIEljb24gKHdoZW4gbm8gaWNvbiBvciBpY29uIHR5cGUgaXMgbm90IHNwZWNpZmllZCkgLS0+XG4gICAgPGRpdiAqbmdJZj1cIiFpY29uIHx8IChpY29uLnR5cGUgIT09ICdiYXInICYmIGljb24udHlwZSAhPT0gJ2ZvbGRlcicgJiYgaWNvbi50eXBlICE9PSAnbG9vcCcgJiYgaWNvbi50eXBlICE9PSAnY3VzdG9tJylcIj5cbiAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgIGQ9XCJNNy41MDAzMyAxNC4xNjYzSDUuODMzNjZDNC43Mjg1OSAxNC4xNjYzIDMuNjY4NzggMTMuNzI3NCAyLjg4NzM4IDEyLjk0NkMyLjEwNTk4IDEyLjE2NDYgMS42NjY5OSAxMS4xMDQ3IDEuNjY2OTkgOS45OTk2N0MxLjY2Njk5IDguODk0NjEgMi4xMDU5OCA3LjgzNDggMi44ODczOCA3LjA1MzRDMy42Njg3OCA2LjI3MTk5IDQuNzI4NTkgNS44MzMwMSA1LjgzMzY2IDUuODMzMDFINy41MDAzM1wiXG4gICAgICAgICAgc3Ryb2tlPVwiIzRGMzlGNlwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgIGQ9XCJNMTIuNSA1LjgzMzAxSDE0LjE2NjdDMTUuMjcxNyA1LjgzMzAxIDE2LjMzMTUgNi4yNzE5OSAxNy4xMTI5IDcuMDUzNEMxNy44OTQzIDcuODM0OCAxOC4zMzMzIDguODk0NjEgMTguMzMzMyA5Ljk5OTY3QzE4LjMzMzMgMTEuMTA0NyAxNy44OTQzIDEyLjE2NDYgMTcuMTEyOSAxMi45NDZDMTYuMzMxNSAxMy43Mjc0IDE1LjI3MTcgMTQuMTY2MyAxNC4xNjY3IDE0LjE2NjNIMTIuNVwiXG4gICAgICAgICAgc3Ryb2tlPVwiIzRGMzlGNlwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICA8cGF0aCBkPVwiTTYuNjY2OTkgMTBIMTMuMzMzN1wiIHN0cm9rZT1cIiM0RjM5RjZcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgPC9zdmc+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEN1c3RvbSBJY29uIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJpY29uICYmIGljb24udHlwZSA9PT0gJ2N1c3RvbScgJiYgaWNvbi5zdmdcIiBbaW5uZXJIVE1MXT1cImljb24uc3ZnXCI+PC9kaXY+XG5cbiAgICA8IS0tIFRpdGxlIC0tPlxuICAgIDxzcGFuIGNsYXNzPVwiY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtWzE0cHhdIGNxYS1sZWFkaW5nLVsxN3B4XSBjcWEtdGV4dC1bIzMxMkM4NV0gY3FhLWZsZXgtMVwiPlxuICAgICAge3sgdGl0bGUgfX1cbiAgICA8L3NwYW4+XG5cbiAgICA8IS0tIEJhZGdlIGFuZCBkeW5hbWljIGhlYWRlciBidXR0b25zIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMlwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ0biBvZiBoZWFkZXJCdXR0b25zOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgIDxjcWEtYnV0dG9uXG4gICAgICAgICAgW3RleHRdPVwiYnRuLnRleHRcIlxuICAgICAgICAgIFtpY29uXT1cImJ0bi5pY29uXCJcbiAgICAgICAgICBbdmFyaWFudF09XCJidG4udmFyaWFudCB8fCAnb3V0bGluZWQnXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiYnRuLmRpc2FibGVkXCJcbiAgICAgICAgICBbdG9vbHRpcF09XCJidG4udG9vbHRpcFwiXG4gICAgICAgICAgW2N1c3RvbUNsYXNzXT1cImJ0bi5jdXN0b21DbGFzc1wiXG4gICAgICAgICAgW2J0blNpemVdPVwiYnRuLmJ0blNpemUgfHwgJ3NtJ1wiXG4gICAgICAgICAgKGNsaWNrZWQpPVwib25IZWFkZXJCdXR0b25DbGljayhidG4sIGksICRldmVudClcIj5cbiAgICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cImNxYS1weC0yIGNxYS1weS1bMnB4XSBjcWEtcm91bmRlZC1bNHB4XSBjcWEtYmctWyNDNkQyRkZdIGNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy1bMTZweF0gY3FhLXRleHQtWyM0MzJERDddXCI+XG4gICAgICAgIHt7IGdldERpc3BsYXlDb3VudCgpIH19XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjwhLS0gRXhwYW5kZWQgQ29udGVudCAtLT5cbjxkaXYgKm5nSWY9XCJpc0V4cGFuZGVkXCIgY2xhc3M9XCJjcWEtbXQtMiBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yIGNxYS1weC0yLjVcIj5cbiAgPCEtLSBXaGVuIHRoZXJlIGFyZSBubyBpdGVtcywgZGlzcGxheSBuZy1jb250ZW50IGRpcmVjdGx5IC0tPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWl0ZW1zIHx8IGl0ZW1zLmxlbmd0aCA9PT0gMFwiPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8IS0tIFdoZW4gaXRlbXMgZXhpc3QsIGRpc3BsYXkgdGhlbSAtLT5cbiAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtc1wiPlxuXG4gICAgPCEtLSBJdGVtIEhlYWRlciAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWJnLXdoaXRlIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVsjRTVFNUU1XSBjcWEtcm91bmRlZC1tZCBjcWEtb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLXB5LTIgY3FhLXB4LTMgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS1nYXAtM1wiPlxuICAgICAgICA8IS0tIExlZnQgc2lkZTogU3RhdHVzIGFuZCBUaXRsZSAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zIGNxYS1mbGV4LTFcIj5cbiAgICAgICAgICA8IS0tIFN0YXR1cyBJY29uIChGaWxsZWQgR3JlZW4gQ2lyY2xlIHdpdGggQ2hlY2ttYXJrKSAtLT5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPCEtLSBTdWNjZXNzIC0tPlxuICAgICAgICAgICAgPHN2ZyAqbmdJZj1cIml0ZW0uc3RhdHVzID09PSAnc3VjY2VzcydcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfNDhfMTIxKVwiPlxuICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICBkPVwiTTEwLjAwMDMgMTguMzMzN0MxNC42MDI3IDE4LjMzMzcgMTguMzMzNyAxNC42MDI3IDE4LjMzMzcgMTAuMDAwM0MxOC4zMzM3IDUuMzk3OTUgMTQuNjAyNyAxLjY2Njk5IDEwLjAwMDMgMS42NjY5OUM1LjM5Nzk1IDEuNjY2OTkgMS42NjY5OSA1LjM5Nzk1IDEuNjY2OTkgMTAuMDAwM0MxLjY2Njk5IDE0LjYwMjcgNS4zOTc5NSAxOC4zMzM3IDEwLjAwMDMgMTguMzMzN1pcIlxuICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzAwQTYzRVwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNy41IDkuOTk5NjdMOS4xNjY2NyAxMS42NjYzTDEyLjUgOC4zMzMwMVwiIHN0cm9rZT1cIiMwMEE2M0VcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgPGRlZnM+XG4gICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfNDhfMTIxXCI+XG4gICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIiAvPlxuICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XG4gICAgICAgICAgICAgIDwvZGVmcz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPCEtLSBGYWlsZWQgLS0+XG4gICAgICAgICAgICA8c3ZnICpuZ0lmPVwiaXRlbS5zdGF0dXMgPT09ICdmYWlsZWQnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTBcIiBjeT1cIjEwXCIgcj1cIjhcIiBmaWxsPVwiI0VGNDQ0NFwiIC8+XG4gICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNyA3TDEzIDEzTTEzIDdMNyAxM1wiIHN0cm9rZT1cIndoaXRlXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPCEtLSBQZW5kaW5nIC0tPlxuICAgICAgICAgICAgPHN2ZyAqbmdJZj1cIml0ZW0uc3RhdHVzID09PSAncGVuZGluZydcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIxMFwiIGN5PVwiMTBcIiByPVwiOFwiIGZpbGw9XCIjOUNBM0FGXCIgLz5cbiAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMCA2VjEwTDEzIDEyXCIgc3Ryb2tlPVwid2hpdGVcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPCEtLSBSdW5uaW5nIC0tPlxuICAgICAgICAgICAgPHN2ZyAqbmdJZj1cIml0ZW0uc3RhdHVzID09PSAncnVubmluZydcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIxMFwiIGN5PVwiMTBcIiByPVwiOFwiIGZpbGw9XCIjM0I4MkY2XCIgLz5cbiAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMCA2VjEwTDEzIDEyXCIgc3Ryb2tlPVwid2hpdGVcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvZGl2PlxuICBcbiAgICAgICAgICA8IS0tIFRpdGxlIC0tPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzE0cHhdIGNxYS1sZWFkaW5nLVsxOHB4XVwiIHN0eWxlPVwid29yZC1icmVhazogYnJlYWstd29yZDtcIj5cbiAgICAgICAgICAgIHt7IGl0ZW0udGl0bGUgfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICBcbiAgICAgICAgPCEtLSBSaWdodCBzaWRlOiBEdXJhdGlvbiBhbmQgVmlldyBTdGVwcyBMaW5rIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTNcIj5cbiAgICAgICAgICA8IS0tIER1cmF0aW9uIHdpdGggQ2xvY2sgSWNvbiAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTFcIj5cbiAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgIGQ9XCJNNiAxMUM4Ljc2MTQyIDExIDExIDguNzYxNDIgMTEgNkMxMSAzLjIzODU4IDguNzYxNDIgMSA2IDFDMy4yMzg1OCAxIDEgMy4yMzg1OCAxIDZDMSA4Ljc2MTQyIDMuMjM4NTggMTEgNiAxMVpcIlxuICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2QTcyODJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYgM1Y2TDggN1wiIHN0cm9rZT1cIiM2QTcyODJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxNHB4XSBjcWEtbGVhZGluZy1bMjBweF0gY3FhLXRleHQtWyM2QTcyODJdXCI+XG4gICAgICAgICAgICAgIHt7IGZvcm1hdER1cmF0aW9uKGl0ZW0uZHVyYXRpb24pIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gIFxuICAgICAgICAgIDwhLS0gVmlldyBTdGVwcyBMaW5rOiByZWRpcmVjdCBtb2RlIChuYXZpZ2F0ZXMgdG8gVVJMKSBvciBpbmxpbmUgbW9kZSAodG9nZ2xlIGV4cGFuZCkgLS0+XG4gICAgICAgICAgPGEgKm5nSWY9XCJoYXNWaWV3U3RlcHNSZWRpcmVjdFVybChpdGVtKVwiXG4gICAgICAgICAgICBbaHJlZl09XCJnZXRJdGVtVmlld1N0ZXBzVXJsKGl0ZW0pXCJcbiAgICAgICAgICAgIFthdHRyLnRhcmdldF09XCJ2aWV3U3RlcHNPcGVuSW5OZXdUYWIgPyAnX2JsYW5rJyA6IG51bGxcIlxuICAgICAgICAgICAgW2F0dHIucmVsXT1cInZpZXdTdGVwc09wZW5Jbk5ld1RhYiA/ICdub29wZW5lciBub3JlZmVycmVyJyA6IG51bGxcIlxuICAgICAgICAgICAgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjM0Y0M0VFXSBjcWEtbm8tdW5kZXJsaW5lIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0xIGhvdmVyOmNxYS11bmRlcmxpbmVcIj5cbiAgICAgICAgICAgIDxzcGFuPlZpZXcgc3RlcHM8L3NwYW4+XG4gICAgICAgICAgICA8c3ZnIGNsYXNzPVwiY3FhLXRyYW5zaXRpb24tdHJhbnNmb3JtXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE1XCJcbiAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNVwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgIGQ9XCJNOC42NTUyIDEyLjgxODRMNy41NTQxMyAxMS43NjY4TDEwLjg1MiA4LjU4NjRIMi44Mzk4NFY3LjA1MDMySDEwLjg1Mkw3LjU1NDEzIDMuODc1MDZMOC42NTUyIDIuODE4MzZMMTMuODM5OCA3LjgxODM2TDguNjU1MiAxMi44MTg0WlwiXG4gICAgICAgICAgICAgICAgZmlsbD1cIiMzRjQzRUVcIiAvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPC9hPlxuICAgICAgICAgIDxhICpuZ0lmPVwiIWhhc1ZpZXdTdGVwc1JlZGlyZWN0VXJsKGl0ZW0pXCIgaHJlZj1cIiNcIiAoY2xpY2spPVwib25WaWV3U3RlcHMoaXRlbSwgJGV2ZW50KVwiXG4gICAgICAgICAgICBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtWyMzRjQzRUVdIGNxYS1uby11bmRlcmxpbmUgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTEgaG92ZXI6Y3FhLXVuZGVybGluZVwiPlxuICAgICAgICAgICAgPHNwYW4+e3sgaXNJdGVtRXhwYW5kZWQoaXRlbS5pZCkgPyAnSGlkZSBzdGVwcycgOiAnVmlldyBzdGVwcycgfX08L3NwYW4+XG4gICAgICAgICAgICA8c3ZnIFtjbGFzcy5jcWEtcm90YXRlLTkwXT1cImlzSXRlbUV4cGFuZGVkKGl0ZW0uaWQpXCIgY2xhc3M9XCJjcWEtdHJhbnNpdGlvbi10cmFuc2Zvcm1cIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTVcIlxuICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE1XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgZD1cIk04LjY1NTIgMTIuODE4NEw3LjU1NDEzIDExLjc2NjhMMTAuODUyIDguNTg2NEgyLjgzOTg0VjcuMDUwMzJIMTAuODUyTDcuNTU0MTMgMy44NzUwNkw4LjY1NTIgMi44MTgzNkwxMy44Mzk4IDcuODE4MzZMOC42NTUyIDEyLjgxODRaXCJcbiAgICAgICAgICAgICAgICBmaWxsPVwiIzNGNDNFRVwiIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFN0ZXBzIENvbnRlbnQgKHNob3duIHdoZW4gaXRlbSBpcyBleHBhbmRlZCkgLS0+XG4gICAgPGRpdiAqbmdJZj1cImlzSXRlbUV4cGFuZGVkKGl0ZW0uaWQpXCI+XG4gICAgICA8IS0tIEN1c3RvbSB0ZW1wbGF0ZSB2aWEgVGVtcGxhdGVSZWYgKGZyb20gQENvbnRlbnRDaGlsZCBvciBASW5wdXQpIC0gcGFzc2VzIGl0ZW0gYXMgY29udGV4dCAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtQ29udGVudFRwbCB8fCBpdGVtQ29udGVudFRlbXBsYXRlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtcC0zXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCIoaXRlbUNvbnRlbnRUcGwgfHwgaXRlbUNvbnRlbnRUZW1wbGF0ZSkhOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSwgaXRlbTogaXRlbSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gQ3VzdG9tIGNvbnRlbnQgcHJvamVjdGlvbiB2aWEgbmctY29udGVudCAtIGRpc3BsYXllZCBmb3IgYWxsIGV4cGFuZGVkIGl0ZW1zIC0tPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2l0ZW1Db250ZW50XVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPCEtLSBDdXN0b20gY29udGVudCBwcm9qZWN0aW9uIGFmdGVyIGFsbCBpdGVtcyAtIGZvciBzdGVwcyBsb2FkZWQgYWZ0ZXIgQVBJIGNhbGwgLS0+XG48bmctY29udGVudCBzZWxlY3Q9XCJbYWZ0ZXJJdGVtc11cIj48L25nLWNvbnRlbnQ+Il19
@@ -0,0 +1,87 @@
1
+ import { Component, Input, Output, EventEmitter, ViewChild } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/material/icon";
4
+ import * as i2 from "@angular/common";
5
+ export class FileUploadComponent {
6
+ constructor() {
7
+ /** Accepted file types (e.g., 'application/pdf,application/msword,.txt') */
8
+ this.accept = '.pdf,.doc,.docx,.txt';
9
+ /** Display text for accepted file types */
10
+ this.acceptedFileTypes = 'PDF, DOC, or TXT files';
11
+ /** Whether the component is disabled */
12
+ this.disabled = false;
13
+ /** Emit when file is selected */
14
+ this.fileSelected = new EventEmitter();
15
+ /** Emit when file selection is cancelled */
16
+ this.cancelled = new EventEmitter();
17
+ this.isDragging = false;
18
+ this.selectedFile = null;
19
+ }
20
+ onDragOver(event) {
21
+ if (this.disabled)
22
+ return;
23
+ event.preventDefault();
24
+ event.stopPropagation();
25
+ this.isDragging = true;
26
+ }
27
+ onDragLeave(event) {
28
+ if (this.disabled)
29
+ return;
30
+ event.preventDefault();
31
+ event.stopPropagation();
32
+ this.isDragging = false;
33
+ }
34
+ onDrop(event) {
35
+ if (this.disabled)
36
+ return;
37
+ event.preventDefault();
38
+ event.stopPropagation();
39
+ this.isDragging = false;
40
+ const files = event.dataTransfer?.files;
41
+ if (files && files.length > 0) {
42
+ this.handleFile(files[0]);
43
+ }
44
+ }
45
+ onBrowseClick() {
46
+ if (this.disabled)
47
+ return;
48
+ this.fileInput.nativeElement.click();
49
+ }
50
+ onFileInputChange(event) {
51
+ const input = event.target;
52
+ if (input.files && input.files.length > 0) {
53
+ this.handleFile(input.files[0]);
54
+ }
55
+ }
56
+ handleFile(file) {
57
+ this.selectedFile = file;
58
+ this.fileSelected.emit(file);
59
+ }
60
+ removeFile() {
61
+ this.selectedFile = null;
62
+ if (this.fileInput?.nativeElement) {
63
+ this.fileInput.nativeElement.value = '';
64
+ }
65
+ this.cancelled.emit();
66
+ }
67
+ }
68
+ FileUploadComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FileUploadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
69
+ FileUploadComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: FileUploadComponent, selector: "cqa-file-upload", inputs: { accept: "accept", acceptedFileTypes: "acceptedFileTypes", disabled: "disabled" }, outputs: { fileSelected: "fileSelected", cancelled: "cancelled" }, host: { classAttribute: "cqa-ui-root" }, viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], ngImport: i0, template: "<div class=\"cqa-w-full\">\n <!-- Drag and Drop Area -->\n <div\n class=\"cqa-border-2 cqa-border-dashed cqa-border-gray-300 cqa-rounded-lg cqa-p-8 cqa-text-center cqa-cursor-pointer cqa-transition-colors\"\n [class.cqa-border-[#3F43EE]]=\"isDragging\"\n [class.cqa-bg-blue-50]=\"isDragging\"\n [class.cqa-opacity-50]=\"disabled\"\n [class.cqa-cursor-not-allowed]=\"disabled\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n (click)=\"onBrowseClick()\">\n \n <!-- Upload Icon -->\n <div class=\"cqa-flex cqa-justify-center cqa-mb-4\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"40px\" viewBox=\"0 -960 960 960\" width=\"40px\" fill=\"#000000\"><path d=\"M440-320v-326L336-542l-56-58 200-200 200 200-56 58-104-104v326h-80ZM240-160q-33 0-56.5-23.5T160-240v-120h80v120h480v-120h80v120q0 33-23.5 56.5T720-160H240Z\"/></svg>\n </div>\n\n <!-- Upload Text -->\n <p class=\"cqa-text-[14px] cqa-text-[#0A0A0A] cqa-mb-2\">\n Drag and drop files here or <span class=\"cqa-text-[#3F43EE] cqa-cursor-pointer hover:cqa-underline\" (click)=\"onBrowseClick(); $event.stopPropagation()\">browse</span>\n </p>\n\n <!-- File Types -->\n <p class=\"cqa-text-[12px] cqa-text-gray-500\">\n {{ acceptedFileTypes }}\n </p>\n </div>\n\n <!-- Selected File Display -->\n <div *ngIf=\"selectedFile\" class=\"cqa-mt-4 cqa-flex cqa-items-center cqa-justify-between cqa-bg-gray-50 cqa-border cqa-border-gray-200 cqa-rounded-lg cqa-p-3\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M16.6667 15.8333V5.83333C16.6667 5.39131 16.4911 4.96738 16.1785 4.65482C15.866 4.34226 15.442 4.16667 15 4.16667H5C4.55797 4.16667 4.13405 4.34226 3.82149 4.65482C3.50893 4.96738 3.33333 5.39131 3.33333 5.83333V15.8333C3.33333 16.2754 3.50893 16.6993 3.82149 17.0118C4.13405 17.3244 4.55797 17.5 5 17.5H15C15.442 17.5 15.866 17.3244 16.1785 17.0118C16.4911 16.6993 16.6667 16.2754 16.6667 15.8333Z\" stroke=\"#6B7280\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M6.66667 8.33333H13.3333M6.66667 11.6667H13.3333\" stroke=\"#6B7280\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <span class=\"cqa-text-[14px] cqa-text-gray-700 cqa-font-medium\">{{ selectedFile.name }}</span>\n </div>\n <button\n type=\"button\"\n (click)=\"removeFile(); $event.stopPropagation()\"\n class=\"cqa-text-red-500 hover:cqa-text-red-700 cqa-p-1\">\n <mat-icon class=\"!cqa-w-5 !cqa-h-5 !cqa-text-[20px]\">close</mat-icon>\n </button>\n </div>\n\n <!-- Hidden File Input -->\n <input\n #fileInput\n type=\"file\"\n [accept]=\"accept\"\n (change)=\"onFileInputChange($event)\"\n style=\"display: none;\"\n [disabled]=\"disabled\">\n</div>\n\n", components: [{ type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
70
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FileUploadComponent, decorators: [{
71
+ type: Component,
72
+ args: [{ selector: 'cqa-file-upload', host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-w-full\">\n <!-- Drag and Drop Area -->\n <div\n class=\"cqa-border-2 cqa-border-dashed cqa-border-gray-300 cqa-rounded-lg cqa-p-8 cqa-text-center cqa-cursor-pointer cqa-transition-colors\"\n [class.cqa-border-[#3F43EE]]=\"isDragging\"\n [class.cqa-bg-blue-50]=\"isDragging\"\n [class.cqa-opacity-50]=\"disabled\"\n [class.cqa-cursor-not-allowed]=\"disabled\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n (click)=\"onBrowseClick()\">\n \n <!-- Upload Icon -->\n <div class=\"cqa-flex cqa-justify-center cqa-mb-4\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"40px\" viewBox=\"0 -960 960 960\" width=\"40px\" fill=\"#000000\"><path d=\"M440-320v-326L336-542l-56-58 200-200 200 200-56 58-104-104v326h-80ZM240-160q-33 0-56.5-23.5T160-240v-120h80v120h480v-120h80v120q0 33-23.5 56.5T720-160H240Z\"/></svg>\n </div>\n\n <!-- Upload Text -->\n <p class=\"cqa-text-[14px] cqa-text-[#0A0A0A] cqa-mb-2\">\n Drag and drop files here or <span class=\"cqa-text-[#3F43EE] cqa-cursor-pointer hover:cqa-underline\" (click)=\"onBrowseClick(); $event.stopPropagation()\">browse</span>\n </p>\n\n <!-- File Types -->\n <p class=\"cqa-text-[12px] cqa-text-gray-500\">\n {{ acceptedFileTypes }}\n </p>\n </div>\n\n <!-- Selected File Display -->\n <div *ngIf=\"selectedFile\" class=\"cqa-mt-4 cqa-flex cqa-items-center cqa-justify-between cqa-bg-gray-50 cqa-border cqa-border-gray-200 cqa-rounded-lg cqa-p-3\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M16.6667 15.8333V5.83333C16.6667 5.39131 16.4911 4.96738 16.1785 4.65482C15.866 4.34226 15.442 4.16667 15 4.16667H5C4.55797 4.16667 4.13405 4.34226 3.82149 4.65482C3.50893 4.96738 3.33333 5.39131 3.33333 5.83333V15.8333C3.33333 16.2754 3.50893 16.6993 3.82149 17.0118C4.13405 17.3244 4.55797 17.5 5 17.5H15C15.442 17.5 15.866 17.3244 16.1785 17.0118C16.4911 16.6993 16.6667 16.2754 16.6667 15.8333Z\" stroke=\"#6B7280\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M6.66667 8.33333H13.3333M6.66667 11.6667H13.3333\" stroke=\"#6B7280\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <span class=\"cqa-text-[14px] cqa-text-gray-700 cqa-font-medium\">{{ selectedFile.name }}</span>\n </div>\n <button\n type=\"button\"\n (click)=\"removeFile(); $event.stopPropagation()\"\n class=\"cqa-text-red-500 hover:cqa-text-red-700 cqa-p-1\">\n <mat-icon class=\"!cqa-w-5 !cqa-h-5 !cqa-text-[20px]\">close</mat-icon>\n </button>\n </div>\n\n <!-- Hidden File Input -->\n <input\n #fileInput\n type=\"file\"\n [accept]=\"accept\"\n (change)=\"onFileInputChange($event)\"\n style=\"display: none;\"\n [disabled]=\"disabled\">\n</div>\n\n", styles: [] }]
73
+ }], propDecorators: { accept: [{
74
+ type: Input
75
+ }], acceptedFileTypes: [{
76
+ type: Input
77
+ }], disabled: [{
78
+ type: Input
79
+ }], fileSelected: [{
80
+ type: Output
81
+ }], cancelled: [{
82
+ type: Output
83
+ }], fileInput: [{
84
+ type: ViewChild,
85
+ args: ['fileInput']
86
+ }] } });
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9maWxlLXVwbG9hZC9maWxlLXVwbG9hZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ZpbGUtdXBsb2FkL2ZpbGUtdXBsb2FkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFjLE1BQU0sZUFBZSxDQUFDOzs7O0FBUTlGLE1BQU0sT0FBTyxtQkFBbUI7SUFOaEM7UUFPRSw0RUFBNEU7UUFDbkUsV0FBTSxHQUFXLHNCQUFzQixDQUFDO1FBRWpELDJDQUEyQztRQUNsQyxzQkFBaUIsR0FBVyx3QkFBd0IsQ0FBQztRQUU5RCx3Q0FBd0M7UUFDL0IsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUVuQyxpQ0FBaUM7UUFDdkIsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRWxELDRDQUE0QztRQUNsQyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUkvQyxlQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLGlCQUFZLEdBQWdCLElBQUksQ0FBQztLQW9EbEM7SUFsREMsVUFBVSxDQUFDLEtBQWdCO1FBQ3pCLElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBQzFCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDekIsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFnQjtRQUMxQixJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUMxQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQzFCLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBZ0I7UUFDckIsSUFBSSxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU87UUFDMUIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUV4QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQztRQUN4QyxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzNCO0lBQ0gsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsS0FBWTtRQUM1QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBMEIsQ0FBQztRQUMvQyxJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3pDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQztJQUVPLFVBQVUsQ0FBQyxJQUFVO1FBQzNCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRTtZQUNqQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1NBQ3pDO1FBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN4QixDQUFDOztnSEF0RVUsbUJBQW1CO29HQUFuQixtQkFBbUIsdVdDUmhDLG04RkF3REE7MkZEaERhLG1CQUFtQjtrQkFOL0IsU0FBUzsrQkFDRSxpQkFBaUIsUUFHckIsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFOzhCQUlyQixNQUFNO3NCQUFkLEtBQUs7Z0JBR0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUdHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBR0ksWUFBWTtzQkFBckIsTUFBTTtnQkFHRyxTQUFTO3NCQUFsQixNQUFNO2dCQUVpQixTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgVmlld0NoaWxkLCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1maWxlLXVwbG9hZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9maWxlLXVwbG9hZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW10sXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfVxufSlcbmV4cG9ydCBjbGFzcyBGaWxlVXBsb2FkQ29tcG9uZW50IHtcbiAgLyoqIEFjY2VwdGVkIGZpbGUgdHlwZXMgKGUuZy4sICdhcHBsaWNhdGlvbi9wZGYsYXBwbGljYXRpb24vbXN3b3JkLC50eHQnKSAqL1xuICBASW5wdXQoKSBhY2NlcHQ6IHN0cmluZyA9ICcucGRmLC5kb2MsLmRvY3gsLnR4dCc7XG5cbiAgLyoqIERpc3BsYXkgdGV4dCBmb3IgYWNjZXB0ZWQgZmlsZSB0eXBlcyAqL1xuICBASW5wdXQoKSBhY2NlcHRlZEZpbGVUeXBlczogc3RyaW5nID0gJ1BERiwgRE9DLCBvciBUWFQgZmlsZXMnO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQgKi9cbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogRW1pdCB3aGVuIGZpbGUgaXMgc2VsZWN0ZWQgKi9cbiAgQE91dHB1dCgpIGZpbGVTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZT4oKTtcblxuICAvKiogRW1pdCB3aGVuIGZpbGUgc2VsZWN0aW9uIGlzIGNhbmNlbGxlZCAqL1xuICBAT3V0cHV0KCkgY2FuY2VsbGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIEBWaWV3Q2hpbGQoJ2ZpbGVJbnB1dCcpIGZpbGVJbnB1dCE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgaXNEcmFnZ2luZzogYm9vbGVhbiA9IGZhbHNlO1xuICBzZWxlY3RlZEZpbGU6IEZpbGUgfCBudWxsID0gbnVsbDtcblxuICBvbkRyYWdPdmVyKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5pc0RyYWdnaW5nID0gdHJ1ZTtcbiAgfVxuXG4gIG9uRHJhZ0xlYXZlKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XG4gIH1cblxuICBvbkRyb3AoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcblxuICAgIGNvbnN0IGZpbGVzID0gZXZlbnQuZGF0YVRyYW5zZmVyPy5maWxlcztcbiAgICBpZiAoZmlsZXMgJiYgZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5oYW5kbGVGaWxlKGZpbGVzWzBdKTtcbiAgICB9XG4gIH1cblxuICBvbkJyb3dzZUNsaWNrKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG4gICAgdGhpcy5maWxlSW5wdXQubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICB9XG5cbiAgb25GaWxlSW5wdXRDaGFuZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBpZiAoaW5wdXQuZmlsZXMgJiYgaW5wdXQuZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5oYW5kbGVGaWxlKGlucHV0LmZpbGVzWzBdKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUZpbGUoZmlsZTogRmlsZSk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRGaWxlID0gZmlsZTtcbiAgICB0aGlzLmZpbGVTZWxlY3RlZC5lbWl0KGZpbGUpO1xuICB9XG5cbiAgcmVtb3ZlRmlsZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkRmlsZSA9IG51bGw7XG4gICAgaWYgKHRoaXMuZmlsZUlucHV0Py5uYXRpdmVFbGVtZW50KSB7XG4gICAgICB0aGlzLmZpbGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgfVxuICAgIHRoaXMuY2FuY2VsbGVkLmVtaXQoKTtcbiAgfVxufVxuXG4iLCI8ZGl2IGNsYXNzPVwiY3FhLXctZnVsbFwiPlxuICA8IS0tIERyYWcgYW5kIERyb3AgQXJlYSAtLT5cbiAgPGRpdlxuICAgIGNsYXNzPVwiY3FhLWJvcmRlci0yIGNxYS1ib3JkZXItZGFzaGVkIGNxYS1ib3JkZXItZ3JheS0zMDAgY3FhLXJvdW5kZWQtbGcgY3FhLXAtOCBjcWEtdGV4dC1jZW50ZXIgY3FhLWN1cnNvci1wb2ludGVyIGNxYS10cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgW2NsYXNzLmNxYS1ib3JkZXItWyMzRjQzRUVdXT1cImlzRHJhZ2dpbmdcIlxuICAgIFtjbGFzcy5jcWEtYmctYmx1ZS01MF09XCJpc0RyYWdnaW5nXCJcbiAgICBbY2xhc3MuY3FhLW9wYWNpdHktNTBdPVwiZGlzYWJsZWRcIlxuICAgIFtjbGFzcy5jcWEtY3Vyc29yLW5vdC1hbGxvd2VkXT1cImRpc2FibGVkXCJcbiAgICAoZHJhZ292ZXIpPVwib25EcmFnT3ZlcigkZXZlbnQpXCJcbiAgICAoZHJhZ2xlYXZlKT1cIm9uRHJhZ0xlYXZlKCRldmVudClcIlxuICAgIChkcm9wKT1cIm9uRHJvcCgkZXZlbnQpXCJcbiAgICAoY2xpY2spPVwib25Ccm93c2VDbGljaygpXCI+XG4gICAgXG4gICAgPCEtLSBVcGxvYWQgSWNvbiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWp1c3RpZnktY2VudGVyIGNxYS1tYi00XCI+XG4gICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBoZWlnaHQ9XCI0MHB4XCIgdmlld0JveD1cIjAgLTk2MCA5NjAgOTYwXCIgd2lkdGg9XCI0MHB4XCIgZmlsbD1cIiMwMDAwMDBcIj48cGF0aCBkPVwiTTQ0MC0zMjB2LTMyNkwzMzYtNTQybC01Ni01OCAyMDAtMjAwIDIwMCAyMDAtNTYgNTgtMTA0LTEwNHYzMjZoLTgwWk0yNDAtMTYwcS0zMyAwLTU2LjUtMjMuNVQxNjAtMjQwdi0xMjBoODB2MTIwaDQ4MHYtMTIwaDgwdjEyMHEwIDMzLTIzLjUgNTYuNVQ3MjAtMTYwSDI0MFpcIi8+PC9zdmc+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFVwbG9hZCBUZXh0IC0tPlxuICAgIDxwIGNsYXNzPVwiY3FhLXRleHQtWzE0cHhdIGNxYS10ZXh0LVsjMEEwQTBBXSBjcWEtbWItMlwiPlxuICAgICAgRHJhZyBhbmQgZHJvcCBmaWxlcyBoZXJlIG9yIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWyMzRjQzRUVdIGNxYS1jdXJzb3ItcG9pbnRlciBob3ZlcjpjcWEtdW5kZXJsaW5lXCIgKGNsaWNrKT1cIm9uQnJvd3NlQ2xpY2soKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+YnJvd3NlPC9zcGFuPlxuICAgIDwvcD5cblxuICAgIDwhLS0gRmlsZSBUeXBlcyAtLT5cbiAgICA8cCBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtdGV4dC1ncmF5LTUwMFwiPlxuICAgICAge3sgYWNjZXB0ZWRGaWxlVHlwZXMgfX1cbiAgICA8L3A+XG4gIDwvZGl2PlxuXG4gIDwhLS0gU2VsZWN0ZWQgRmlsZSBEaXNwbGF5IC0tPlxuICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRGaWxlXCIgY2xhc3M9XCJjcWEtbXQtNCBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLWJnLWdyYXktNTAgY3FhLWJvcmRlciBjcWEtYm9yZGVyLWdyYXktMjAwIGNxYS1yb3VuZGVkLWxnIGNxYS1wLTNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTJcIj5cbiAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICA8cGF0aCBkPVwiTTE2LjY2NjcgMTUuODMzM1Y1LjgzMzMzQzE2LjY2NjcgNS4zOTEzMSAxNi40OTExIDQuOTY3MzggMTYuMTc4NSA0LjY1NDgyQzE1Ljg2NiA0LjM0MjI2IDE1LjQ0MiA0LjE2NjY3IDE1IDQuMTY2NjdINUM0LjU1Nzk3IDQuMTY2NjcgNC4xMzQwNSA0LjM0MjI2IDMuODIxNDkgNC42NTQ4MkMzLjUwODkzIDQuOTY3MzggMy4zMzMzMyA1LjM5MTMxIDMuMzMzMzMgNS44MzMzM1YxNS44MzMzQzMuMzMzMzMgMTYuMjc1NCAzLjUwODkzIDE2LjY5OTMgMy44MjE0OSAxNy4wMTE4QzQuMTM0MDUgMTcuMzI0NCA0LjU1Nzk3IDE3LjUgNSAxNy41SDE1QzE1LjQ0MiAxNy41IDE1Ljg2NiAxNy4zMjQ0IDE2LjE3ODUgMTcuMDExOEMxNi40OTExIDE2LjY5OTMgMTYuNjY2NyAxNi4yNzU0IDE2LjY2NjcgMTUuODMzM1pcIiBzdHJva2U9XCIjNkI3MjgwXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICA8cGF0aCBkPVwiTTYuNjY2NjcgOC4zMzMzM0gxMy4zMzMzTTYuNjY2NjcgMTEuNjY2N0gxMy4zMzMzXCIgc3Ryb2tlPVwiIzZCNzI4MFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgIDwvc3ZnPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTRweF0gY3FhLXRleHQtZ3JheS03MDAgY3FhLWZvbnQtbWVkaXVtXCI+e3sgc2VsZWN0ZWRGaWxlLm5hbWUgfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwicmVtb3ZlRmlsZSgpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgY2xhc3M9XCJjcWEtdGV4dC1yZWQtNTAwIGhvdmVyOmNxYS10ZXh0LXJlZC03MDAgY3FhLXAtMVwiPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPVwiIWNxYS13LTUgIWNxYS1oLTUgIWNxYS10ZXh0LVsyMHB4XVwiPmNsb3NlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBIaWRkZW4gRmlsZSBJbnB1dCAtLT5cbiAgPGlucHV0XG4gICAgI2ZpbGVJbnB1dFxuICAgIHR5cGU9XCJmaWxlXCJcbiAgICBbYWNjZXB0XT1cImFjY2VwdFwiXG4gICAgKGNoYW5nZSk9XCJvbkZpbGVJbnB1dENoYW5nZSgkZXZlbnQpXCJcbiAgICBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbjwvZGl2PlxuXG4iXX0=
@@ -0,0 +1,59 @@
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/material/icon";
4
+ import * as i2 from "@angular/common";
5
+ export class ItemListComponent {
6
+ constructor() {
7
+ /** List items to display (e.g. mapped from Parameter, Environment, or any domain model) */
8
+ this.items = [];
9
+ /** Id of the currently selected item; used for highlight and to show edit icon when showEdit is true */
10
+ this.selectedId = null;
11
+ /** Message shown when items array is empty (e.g. "No parameters match your search.") */
12
+ this.emptyMessage = 'No items to display.';
13
+ /** When true (default), the list container is scrollable (flex-1 min-h-0 overflow-y-auto). */
14
+ this.scrollable = true;
15
+ /** Emitted when an item row is clicked (passes the item id). */
16
+ this.itemSelect = new EventEmitter();
17
+ /** Emitted when the edit icon is clicked (passes the item id). Call stopPropagation in parent if needed. */
18
+ this.itemEdit = new EventEmitter();
19
+ }
20
+ /** Normalized items (never undefined) so template is safe. */
21
+ get displayItems() {
22
+ return this.items ?? [];
23
+ }
24
+ trackById(_index, item) {
25
+ return item.id;
26
+ }
27
+ isSelected(item) {
28
+ return this.selectedId === item.id;
29
+ }
30
+ onItemClick(item) {
31
+ this.itemSelect.emit(item.id);
32
+ }
33
+ onEditClick(event, item) {
34
+ event.stopPropagation();
35
+ this.itemEdit.emit(item.id);
36
+ }
37
+ }
38
+ ItemListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ItemListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
39
+ ItemListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ItemListComponent, selector: "cqa-item-list", inputs: { items: "items", selectedId: "selectedId", emptyMessage: "emptyMessage", scrollable: "scrollable" }, outputs: { itemSelect: "itemSelect", itemEdit: "itemEdit" }, host: { properties: { "class.cqa-item-list-scrollable-host": "scrollable" }, classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div\n class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-min-h-0\"\n [class.cqa-flex-1]=\"scrollable\"\n [class.cqa-min-h-0]=\"scrollable\"\n [class.cqa-overflow-y-auto]=\"scrollable\"\n [class.cqa-item-list-scroll-hide-scrollbar]=\"scrollable\">\n <button\n *ngFor=\"let item of displayItems; trackBy: trackById\"\n type=\"button\"\n (click)=\"onItemClick(item)\"\n [class.cqa-bg-[#D8D9FC]]=\"isSelected(item)\"\n [class.cqa-border]=\"isSelected(item)\"\n [class.cqa-border-solid]=\"isSelected(item)\"\n [class.cqa-border-[#3F43EE]]=\"isSelected(item)\"\n class=\"cqa-item-list-row cqa-w-full cqa-text-left cqa-rounded-lg cqa-p-1 cqa-transition-colors cqa-bg-white hover:cqa-bg-[#F9FAFB] focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#D8D9FC]\">\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-2\">\n <div class=\"cqa-flex-1 cqa-min-w-0\">\n <p class=\"cqa-font-semibold cqa-text-[12px] cqa-leading-[20px] cqa-text-[#111827] cqa-m-0 cqa-truncate\">\n {{ item.title }}\n </p>\n <p *ngIf=\"item.subtitle\" class=\"cqa-text-[10px] cqa-leading-[18px] cqa-text-[#6B7280] cqa-m-0 cqa-mt-0.5 cqa-truncate\">\n {{ item.subtitle }}\n </p>\n </div>\n <div class=\"cqa-flex cqa-flex-col cqa-items-end cqa-gap-1 cqa-flex-shrink-0\">\n <span *ngIf=\"item.badge\" class=\"cqa-item-list-badge\">\n {{ item.badge }}\n </span>\n <button\n *ngIf=\"item.showEdit\"\n type=\"button\"\n (click)=\"onEditClick($event, item)\"\n class=\"cqa-p-1 cqa-rounded cqa-text-[#1447E6] hover:cqa-bg-[#E5E7EB] cqa-flex cqa-items-center cqa-justify-center\"\n title=\"Edit\"\n aria-label=\"Edit\">\n <mat-icon class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px]\">edit</mat-icon>\n </button>\n </div>\n </div>\n </button>\n <p *ngIf=\"displayItems.length === 0\" class=\"cqa-text-[12px] cqa-leading-[18px] cqa-text-[#6B7280] cqa-m-0 cqa-py-4 cqa-text-center\">\n {{ emptyMessage }}\n </p>\n</div>\n", components: [{ type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
40
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ItemListComponent, decorators: [{
41
+ type: Component,
42
+ args: [{ selector: 'cqa-item-list', host: {
43
+ class: 'cqa-ui-root',
44
+ '[class.cqa-item-list-scrollable-host]': 'scrollable',
45
+ }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-min-h-0\"\n [class.cqa-flex-1]=\"scrollable\"\n [class.cqa-min-h-0]=\"scrollable\"\n [class.cqa-overflow-y-auto]=\"scrollable\"\n [class.cqa-item-list-scroll-hide-scrollbar]=\"scrollable\">\n <button\n *ngFor=\"let item of displayItems; trackBy: trackById\"\n type=\"button\"\n (click)=\"onItemClick(item)\"\n [class.cqa-bg-[#D8D9FC]]=\"isSelected(item)\"\n [class.cqa-border]=\"isSelected(item)\"\n [class.cqa-border-solid]=\"isSelected(item)\"\n [class.cqa-border-[#3F43EE]]=\"isSelected(item)\"\n class=\"cqa-item-list-row cqa-w-full cqa-text-left cqa-rounded-lg cqa-p-1 cqa-transition-colors cqa-bg-white hover:cqa-bg-[#F9FAFB] focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#D8D9FC]\">\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-2\">\n <div class=\"cqa-flex-1 cqa-min-w-0\">\n <p class=\"cqa-font-semibold cqa-text-[12px] cqa-leading-[20px] cqa-text-[#111827] cqa-m-0 cqa-truncate\">\n {{ item.title }}\n </p>\n <p *ngIf=\"item.subtitle\" class=\"cqa-text-[10px] cqa-leading-[18px] cqa-text-[#6B7280] cqa-m-0 cqa-mt-0.5 cqa-truncate\">\n {{ item.subtitle }}\n </p>\n </div>\n <div class=\"cqa-flex cqa-flex-col cqa-items-end cqa-gap-1 cqa-flex-shrink-0\">\n <span *ngIf=\"item.badge\" class=\"cqa-item-list-badge\">\n {{ item.badge }}\n </span>\n <button\n *ngIf=\"item.showEdit\"\n type=\"button\"\n (click)=\"onEditClick($event, item)\"\n class=\"cqa-p-1 cqa-rounded cqa-text-[#1447E6] hover:cqa-bg-[#E5E7EB] cqa-flex cqa-items-center cqa-justify-center\"\n title=\"Edit\"\n aria-label=\"Edit\">\n <mat-icon class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px]\">edit</mat-icon>\n </button>\n </div>\n </div>\n </button>\n <p *ngIf=\"displayItems.length === 0\" class=\"cqa-text-[12px] cqa-leading-[18px] cqa-text-[#6B7280] cqa-m-0 cqa-py-4 cqa-text-center\">\n {{ emptyMessage }}\n </p>\n</div>\n" }]
46
+ }], propDecorators: { items: [{
47
+ type: Input
48
+ }], selectedId: [{
49
+ type: Input
50
+ }], emptyMessage: [{
51
+ type: Input
52
+ }], scrollable: [{
53
+ type: Input
54
+ }], itemSelect: [{
55
+ type: Output
56
+ }], itemEdit: [{
57
+ type: Output
58
+ }] } });
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvaXRlbS1saXN0L2l0ZW0tbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2l0ZW0tbGlzdC9pdGVtLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7Ozs7QUFZdkIsTUFBTSxPQUFPLGlCQUFpQjtJQVQ5QjtRQVVFLDJGQUEyRjtRQUNsRixVQUFLLEdBQXdCLEVBQUUsQ0FBQztRQUV6Qyx3R0FBd0c7UUFDL0YsZUFBVSxHQUFrQixJQUFJLENBQUM7UUFFMUMsd0ZBQXdGO1FBQy9FLGlCQUFZLEdBQUcsc0JBQXNCLENBQUM7UUFFL0MsOEZBQThGO1FBQ3JGLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFFM0IsZ0VBQWdFO1FBQ3RELGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRWxELDRHQUE0RztRQUNsRyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztLQXVCakQ7SUFyQkMsOERBQThEO0lBQzlELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELFNBQVMsQ0FBQyxNQUFjLEVBQUUsSUFBdUI7UUFDL0MsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBdUI7UUFDaEMsT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUF1QjtRQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFZLEVBQUUsSUFBdUI7UUFDL0MsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5QixDQUFDOzs4R0F2Q1UsaUJBQWlCO2tHQUFqQixpQkFBaUIsOFVDbEI5Qix5akVBNENBOzJGRDFCYSxpQkFBaUI7a0JBVDdCLFNBQVM7K0JBQ0UsZUFBZSxRQUVuQjt3QkFDSixLQUFLLEVBQUUsYUFBYTt3QkFDcEIsdUNBQXVDLEVBQUUsWUFBWTtxQkFDdEQsbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU07OEJBSXRDLEtBQUs7c0JBQWIsS0FBSztnQkFHRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBR0csVUFBVTtzQkFBbEIsS0FBSztnQkFHSSxVQUFVO3NCQUFuQixNQUFNO2dCQUdHLFFBQVE7c0JBQWpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ3FhTGlzdEl0ZW1Db25maWcgfSBmcm9tICcuL2l0ZW0tbGlzdC5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1pdGVtLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vaXRlbS1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnY3FhLXVpLXJvb3QnLFxuICAgICdbY2xhc3MuY3FhLWl0ZW0tbGlzdC1zY3JvbGxhYmxlLWhvc3RdJzogJ3Njcm9sbGFibGUnLFxuICB9LFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgSXRlbUxpc3RDb21wb25lbnQge1xuICAvKiogTGlzdCBpdGVtcyB0byBkaXNwbGF5IChlLmcuIG1hcHBlZCBmcm9tIFBhcmFtZXRlciwgRW52aXJvbm1lbnQsIG9yIGFueSBkb21haW4gbW9kZWwpICovXG4gIEBJbnB1dCgpIGl0ZW1zOiBDcWFMaXN0SXRlbUNvbmZpZ1tdID0gW107XG5cbiAgLyoqIElkIG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgaXRlbTsgdXNlZCBmb3IgaGlnaGxpZ2h0IGFuZCB0byBzaG93IGVkaXQgaWNvbiB3aGVuIHNob3dFZGl0IGlzIHRydWUgKi9cbiAgQElucHV0KCkgc2VsZWN0ZWRJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIE1lc3NhZ2Ugc2hvd24gd2hlbiBpdGVtcyBhcnJheSBpcyBlbXB0eSAoZS5nLiBcIk5vIHBhcmFtZXRlcnMgbWF0Y2ggeW91ciBzZWFyY2guXCIpICovXG4gIEBJbnB1dCgpIGVtcHR5TWVzc2FnZSA9ICdObyBpdGVtcyB0byBkaXNwbGF5Lic7XG5cbiAgLyoqIFdoZW4gdHJ1ZSAoZGVmYXVsdCksIHRoZSBsaXN0IGNvbnRhaW5lciBpcyBzY3JvbGxhYmxlIChmbGV4LTEgbWluLWgtMCBvdmVyZmxvdy15LWF1dG8pLiAqL1xuICBASW5wdXQoKSBzY3JvbGxhYmxlID0gdHJ1ZTtcblxuICAvKiogRW1pdHRlZCB3aGVuIGFuIGl0ZW0gcm93IGlzIGNsaWNrZWQgKHBhc3NlcyB0aGUgaXRlbSBpZCkuICovXG4gIEBPdXRwdXQoKSBpdGVtU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgZWRpdCBpY29uIGlzIGNsaWNrZWQgKHBhc3NlcyB0aGUgaXRlbSBpZCkuIENhbGwgc3RvcFByb3BhZ2F0aW9uIGluIHBhcmVudCBpZiBuZWVkZWQuICovXG4gIEBPdXRwdXQoKSBpdGVtRWRpdCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIC8qKiBOb3JtYWxpemVkIGl0ZW1zIChuZXZlciB1bmRlZmluZWQpIHNvIHRlbXBsYXRlIGlzIHNhZmUuICovXG4gIGdldCBkaXNwbGF5SXRlbXMoKTogQ3FhTGlzdEl0ZW1Db25maWdbXSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXMgPz8gW107XG4gIH1cblxuICB0cmFja0J5SWQoX2luZGV4OiBudW1iZXIsIGl0ZW06IENxYUxpc3RJdGVtQ29uZmlnKTogc3RyaW5nIHtcbiAgICByZXR1cm4gaXRlbS5pZDtcbiAgfVxuXG4gIGlzU2VsZWN0ZWQoaXRlbTogQ3FhTGlzdEl0ZW1Db25maWcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZElkID09PSBpdGVtLmlkO1xuICB9XG5cbiAgb25JdGVtQ2xpY2soaXRlbTogQ3FhTGlzdEl0ZW1Db25maWcpOiB2b2lkIHtcbiAgICB0aGlzLml0ZW1TZWxlY3QuZW1pdChpdGVtLmlkKTtcbiAgfVxuXG4gIG9uRWRpdENsaWNrKGV2ZW50OiBFdmVudCwgaXRlbTogQ3FhTGlzdEl0ZW1Db25maWcpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLml0ZW1FZGl0LmVtaXQoaXRlbS5pZCk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0xIGNxYS1taW4taC0wXCJcbiAgW2NsYXNzLmNxYS1mbGV4LTFdPVwic2Nyb2xsYWJsZVwiXG4gIFtjbGFzcy5jcWEtbWluLWgtMF09XCJzY3JvbGxhYmxlXCJcbiAgW2NsYXNzLmNxYS1vdmVyZmxvdy15LWF1dG9dPVwic2Nyb2xsYWJsZVwiXG4gIFtjbGFzcy5jcWEtaXRlbS1saXN0LXNjcm9sbC1oaWRlLXNjcm9sbGJhcl09XCJzY3JvbGxhYmxlXCI+XG4gIDxidXR0b25cbiAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkaXNwbGF5SXRlbXM7IHRyYWNrQnk6IHRyYWNrQnlJZFwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgKGNsaWNrKT1cIm9uSXRlbUNsaWNrKGl0ZW0pXCJcbiAgICBbY2xhc3MuY3FhLWJnLVsjRDhEOUZDXV09XCJpc1NlbGVjdGVkKGl0ZW0pXCJcbiAgICBbY2xhc3MuY3FhLWJvcmRlcl09XCJpc1NlbGVjdGVkKGl0ZW0pXCJcbiAgICBbY2xhc3MuY3FhLWJvcmRlci1zb2xpZF09XCJpc1NlbGVjdGVkKGl0ZW0pXCJcbiAgICBbY2xhc3MuY3FhLWJvcmRlci1bIzNGNDNFRV1dPVwiaXNTZWxlY3RlZChpdGVtKVwiXG4gICAgY2xhc3M9XCJjcWEtaXRlbS1saXN0LXJvdyBjcWEtdy1mdWxsIGNxYS10ZXh0LWxlZnQgY3FhLXJvdW5kZWQtbGcgY3FhLXAtMSBjcWEtdHJhbnNpdGlvbi1jb2xvcnMgY3FhLWJnLXdoaXRlIGhvdmVyOmNxYS1iZy1bI0Y5RkFGQl0gZm9jdXM6Y3FhLW91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOmNxYS1yaW5nLTIgZm9jdXMtdmlzaWJsZTpjcWEtcmluZy1bI0Q4RDlGQ11cIj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLXN0YXJ0IGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLWdhcC0yXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXgtMSBjcWEtbWluLXctMFwiPlxuICAgICAgICA8cCBjbGFzcz1cImNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy1bMjBweF0gY3FhLXRleHQtWyMxMTE4MjddIGNxYS1tLTAgY3FhLXRydW5jYXRlXCI+XG4gICAgICAgICAge3sgaXRlbS50aXRsZSB9fVxuICAgICAgICA8L3A+XG4gICAgICAgIDxwICpuZ0lmPVwiaXRlbS5zdWJ0aXRsZVwiIGNsYXNzPVwiY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxOHB4XSBjcWEtdGV4dC1bIzZCNzI4MF0gY3FhLW0tMCBjcWEtbXQtMC41IGNxYS10cnVuY2F0ZVwiPlxuICAgICAgICAgIHt7IGl0ZW0uc3VidGl0bGUgfX1cbiAgICAgICAgPC9wPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1pdGVtcy1lbmQgY3FhLWdhcC0xIGNxYS1mbGV4LXNocmluay0wXCI+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5iYWRnZVwiIGNsYXNzPVwiY3FhLWl0ZW0tbGlzdC1iYWRnZVwiPlxuICAgICAgICAgIHt7IGl0ZW0uYmFkZ2UgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgKm5nSWY9XCJpdGVtLnNob3dFZGl0XCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAoY2xpY2spPVwib25FZGl0Q2xpY2soJGV2ZW50LCBpdGVtKVwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtcC0xIGNxYS1yb3VuZGVkIGNxYS10ZXh0LVsjMTQ0N0U2XSBob3ZlcjpjcWEtYmctWyNFNUU3RUJdIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyXCJcbiAgICAgICAgICB0aXRsZT1cIkVkaXRcIlxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJFZGl0XCI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiIWNxYS13LTQgIWNxYS1oLTQgIWNxYS10ZXh0LVsxNnB4XVwiPmVkaXQ8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2J1dHRvbj5cbiAgPHAgKm5nSWY9XCJkaXNwbGF5SXRlbXMubGVuZ3RoID09PSAwXCIgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWxlYWRpbmctWzE4cHhdIGNxYS10ZXh0LVsjNkI3MjgwXSBjcWEtbS0wIGNxYS1weS00IGNxYS10ZXh0LWNlbnRlclwiPlxuICAgIHt7IGVtcHR5TWVzc2FnZSB9fVxuICA8L3A+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS1saXN0Lm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9pdGVtLWxpc3QvaXRlbS1saXN0Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIGEgc2luZ2xlIGl0ZW0gaW4gdGhlIHJldXNhYmxlIGl0ZW0gbGlzdC5cbiAqIFVzZSB0aGlzIGludGVyZmFjZSB0byBiaW5kIGFueSBkb21haW4gbW9kZWwgdG8gdGhlIGxpc3QgYnkgbWFwcGluZyB0byBpZCwgdGl0bGUsIHN1YnRpdGxlLCBiYWRnZSwgc2hvd0VkaXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3FhTGlzdEl0ZW1Db25maWcge1xuICAvKiogVW5pcXVlIGlkIHVzZWQgZm9yIHNlbGVjdGlvbiBhbmQgdHJhY2tpbmcgKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIFByaW1hcnkgdGV4dCAoZS5nLiB2YXJpYWJsZSBuYW1lLCBsYWJlbCkgKi9cbiAgdGl0bGU6IHN0cmluZztcbiAgLyoqIFNlY29uZGFyeSAvIHZhbHVlIHRleHQgc2hvd24gYmVsb3cgdGl0bGUgKi9cbiAgc3VidGl0bGU/OiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCBiYWRnZSB0ZXh0IChlLmcuIFwiR2xvYmFsXCIsIFwiTG9jYWxcIiwgZW52aXJvbm1lbnQgbmFtZSkgKi9cbiAgYmFkZ2U/OiBzdHJpbmc7XG4gIC8qKiBXaGVuIHRydWUsIHRoZSBlZGl0IGljb24gaXMgc2hvd24gKHR5cGljYWxseSB3aGVuIHRoaXMgaXRlbSBpcyBzZWxlY3RlZCkgKi9cbiAgc2hvd0VkaXQ/OiBib29sZWFuO1xufVxuIl19