@sebgroup/green-angular 6.0.5 → 6.1.0

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 (45) hide show
  1. package/esm2022/src/v-angular/drag-drop/drag-drop.component.mjs +1 -1
  2. package/esm2022/src/v-angular/dropdown/dropdown-list/dropdown-list.component.mjs +63 -7
  3. package/esm2022/src/v-angular/dropdown/dropdown.component.mjs +3 -3
  4. package/esm2022/src/v-angular/dropdown/typeahead/typeahead-dropdown-list/typeahead-dropdown-list.component.mjs +4 -4
  5. package/esm2022/src/v-angular/i18n/i18n.json +1 -0
  6. package/esm2022/src/v-angular/modal/dialog/dialog.component.mjs +9 -3
  7. package/esm2022/src/v-angular/modal/fold-out/fold-out.component.mjs +7 -3
  8. package/esm2022/src/v-angular/modal/modal.types.mjs +1 -1
  9. package/esm2022/src/v-angular/table/table.component.mjs +16 -3
  10. package/esm2022/src/v-angular/toast/toast.component.mjs +3 -3
  11. package/esm2022/v-angular/drag-drop/drag-drop.component.mjs +1 -1
  12. package/esm2022/v-angular/dropdown/dropdown-list/dropdown-list.component.mjs +63 -7
  13. package/esm2022/v-angular/dropdown/dropdown.component.mjs +3 -3
  14. package/esm2022/v-angular/dropdown/typeahead/typeahead-dropdown-list/typeahead-dropdown-list.component.mjs +4 -4
  15. package/esm2022/v-angular/i18n/i18n.json +1 -0
  16. package/esm2022/v-angular/modal/dialog/dialog.component.mjs +9 -3
  17. package/esm2022/v-angular/modal/fold-out/fold-out.component.mjs +7 -3
  18. package/esm2022/v-angular/modal/modal.types.mjs +1 -1
  19. package/esm2022/v-angular/table/table.component.mjs +16 -3
  20. package/esm2022/v-angular/toast/toast.component.mjs +3 -3
  21. package/fesm2022/sebgroup-green-angular-src-v-angular-drag-drop.mjs +1 -1
  22. package/fesm2022/sebgroup-green-angular-src-v-angular-drag-drop.mjs.map +1 -1
  23. package/fesm2022/sebgroup-green-angular-src-v-angular-dropdown.mjs +66 -10
  24. package/fesm2022/sebgroup-green-angular-src-v-angular-dropdown.mjs.map +1 -1
  25. package/fesm2022/sebgroup-green-angular-src-v-angular-i18n.mjs +2 -0
  26. package/fesm2022/sebgroup-green-angular-src-v-angular-i18n.mjs.map +1 -1
  27. package/fesm2022/sebgroup-green-angular-src-v-angular-modal.mjs +14 -4
  28. package/fesm2022/sebgroup-green-angular-src-v-angular-modal.mjs.map +1 -1
  29. package/fesm2022/sebgroup-green-angular-src-v-angular-table.mjs +15 -2
  30. package/fesm2022/sebgroup-green-angular-src-v-angular-table.mjs.map +1 -1
  31. package/fesm2022/sebgroup-green-angular-src-v-angular-toast.mjs +2 -2
  32. package/fesm2022/sebgroup-green-angular-src-v-angular-toast.mjs.map +1 -1
  33. package/fesm2022/sebgroup-green-angular-v-angular.mjs +100 -19
  34. package/fesm2022/sebgroup-green-angular-v-angular.mjs.map +1 -1
  35. package/package.json +14 -14
  36. package/src/v-angular/dropdown/dropdown-list/dropdown-list.component.d.ts +19 -4
  37. package/src/v-angular/modal/dialog/dialog.component.d.ts +2 -1
  38. package/src/v-angular/modal/fold-out/fold-out.component.d.ts +3 -1
  39. package/src/v-angular/modal/modal.types.d.ts +1 -0
  40. package/src/v-angular/table/table.component.d.ts +6 -1
  41. package/v-angular/dropdown/dropdown-list/dropdown-list.component.d.ts +19 -4
  42. package/v-angular/modal/dialog/dialog.component.d.ts +2 -1
  43. package/v-angular/modal/fold-out/fold-out.component.d.ts +3 -1
  44. package/v-angular/modal/modal.types.d.ts +1 -0
  45. package/v-angular/table/table.component.d.ts +6 -1
@@ -449,7 +449,7 @@ export class NggvDragDropComponent {
449
449
  }, 3000);
450
450
  }
451
451
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NggvDragDropComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
452
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NggvDragDropComponent, selector: "nggv-drag-drop", inputs: { thook: "thook", service: "service", accept: "accept", disableRemove: "disableRemove", fileLimit: "fileLimit", multiple: "multiple", list: "list", throttle: "throttle", retryAttempts: "retryAttempts", selectable: "selectable", stateMap: "stateMap", fetchStatuses: "fetchStatuses", errorCodes: "errorCodes" }, outputs: { stateChange: "stateChange", detailsClick: "detailsClick" }, host: { listeners: { "window:beforeunload": "onBeforeUnload($event)" }, properties: { "attr.data-thook": "this.thook" } }, viewQueries: [{ propertyName: "deleteModalRef", first: true, predicate: ["deleteModalRef"], descendants: true }], ngImport: i0, template: "<ng-container *transloco=\"let t\">\n <form enctype=\"multipart/form-data\" #dragDropForm>\n <div class=\"gds-drag-drop\">\n <input\n class=\"gds-drag-drop__input\"\n id=\"drag-drop\"\n type=\"file\"\n [accept]=\"accept\"\n [multiple]=\"multiple && list\"\n (change)=\"onDrop($event)\"\n />\n <label\n [ngClass]=\"{\n 'gds-drag-drop__label': true,\n 'gds-drag-drop__label--above': componentState === 'over',\n }\"\n for=\"drag-drop\"\n [attr.data-thook]=\"thook + '-picker'\"\n [attr.aria-busy]=\"loading\"\n (dragenter)=\"onDragEnter($event)\"\n (dragover)=\"onDragEnter($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (dragend)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n [ngSwitch]=\"componentState\"\n >\n <!-- COMPONENT STATE NORMAL -->\n <ng-template [ngSwitchCase]=\"'normal'\">\n <gds-icon-cloud-upload *nggCoreElement></gds-icon-cloud-upload\n ><em>{{ t('dragDrop.label.fileChoose') }}</em>\n <ng-template [ngIf]=\"isDragDropAvailable\">\n {{ t('dragDrop.label.fileDrag') }}</ng-template\n >\n </ng-template>\n\n <!-- COMPONENT STATE OVER -->\n <ng-template [ngSwitchCase]=\"'over'\">\n <gds-icon-cloud-upload *nggCoreElement></gds-icon-cloud-upload\n >{{ t('dragDrop.label.fileDrop') }}\n </ng-template>\n\n <!-- COMPONENT STATE UPLOADING -->\n <ng-template [ngSwitchCase]=\"'uploading'\">\n <strong class=\"filename\">{{ lastFile?.fileName }}</strong>\n\n <!-- UPLOADING STATE -->\n <ng-template [ngIf]=\"lastFile?.uploadState === 'uploading'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: lastFile,\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- UPLOADED STATE -->\n <ng-template [ngIf]=\"lastFile?.uploadState === 'uploaded'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: lastFile,\n text: t('dragDrop.text.fileStateUploaded'),\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- VALIDATING STATE -->\n <ng-template [ngIf]=\"lastFile?.uploadState === 'validating'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: lastFile,\n text: t('dragDrop.text.fileStateValidating'),\n }\"\n ></ng-template>\n </ng-template>\n </ng-template>\n\n <!-- COMPONENT STATE DONE -->\n <ng-template [ngSwitchCase]=\"'done'\">\n {{ t('dragDrop.label.fileUploaded', { filename: lastFile?.fileName })\n }}<gds-icon-checkmark *nggCoreElement></gds-icon-checkmark>\n </ng-template>\n </label>\n\n <!-- LIST -->\n <table\n class=\"gds-table file-list\"\n [attr.data-thook]=\"thook + '-file-list'\"\n *ngIf=\"list\"\n >\n <thead>\n <tr>\n <th *ngIf=\"selectable\">\n <div class=\"gds-field-checkbox-wrap\">\n <input\n type=\"checkbox\"\n aria-label=\"Field label\"\n id=\"select-all\"\n />\n <label for=\"select-all\"></label>\n </div>\n </th>\n <th class=\"gds-table__primary-col col-name\">\n {{ t('dragDrop.label.fileName') }}\n </th>\n <th class=\"col-status\">\n {{ t('dragDrop.label.fileStatus') }}\n </th>\n <th class=\"col-actions\"></th>\n </tr>\n </thead>\n <tbody>\n <tr\n [attr.data-thook]=\"thook + '-file'\"\n *ngFor=\"let file of files | value\"\n >\n <td *ngIf=\"selectable\">\n <div class=\"gds-field-checkbox-wrap\">\n <input\n type=\"checkbox\"\n aria-label=\"Field label\"\n [id]=\"'file-checkbox-' + file.id\"\n />\n <label [for]=\"'file-checkbox-' + file.id\"></label>\n </div>\n </td>\n <td\n class=\"gds-table__primary-col\"\n [attr.data-thook]=\"thook + '-file-name'\"\n >\n {{ file.fileName }}\n </td>\n <td\n [attr.data-thook]=\"thook + '-file-status'\"\n [ngSwitch]=\"file.uploadState\"\n >\n <!-- UPLOADING STATE -->\n <ng-template [ngSwitchCase]=\"'uploading'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: file,\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- UPLOADED STATE -->\n <ng-template [ngSwitchCase]=\"'uploaded'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: file,\n text: t('dragDrop.text.fileStateUploaded'),\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- VALIDATING STATE -->\n <ng-template [ngSwitchCase]=\"'validating'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: file,\n text: t('dragDrop.text.fileStateValidating'),\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- ABORTED STATE -->\n <ng-template [ngSwitchCase]=\"'aborted'\">\n <span\n class=\"error-text\"\n [transloco]=\"\n 'dragDrop.error.' + file.internalStatusReasonCode\n \"\n [translocoParams]=\"translateParams(file)\"\n *ngIf=\"file.internalStatusReasonCode\"\n ></span>\n </ng-template>\n\n <!-- ERROR STATE -->\n <ng-template [ngSwitchCase]=\"'error'\">\n <span\n class=\"error-text\"\n [transloco]=\"\n 'dragDrop.error.' + file.internalStatusReasonCode\n \"\n [translocoParams]=\"translateParams(file)\"\n *ngIf=\"file.internalStatusReasonCode\"\n ></span>\n <br />\n <a\n (click)=\"detailsClick.emit(file)\"\n style=\"cursor: pointer\"\n *ngIf=\"\n file.statusReasonInformation &&\n file.statusReasonInformation.length\n \"\n >\n {{ t('dragDrop.link.viewDetails') }}\n </a>\n </ng-template>\n\n <!-- DONE STATE -->\n <ng-template [ngSwitchCase]=\"'done'\">\n <span class=\"success-text\">{{\n t('dragDrop.text.fileStateDone')\n }}</span>\n </ng-template>\n </td>\n\n <td class=\"gds-table__numeric-col\">\n <a\n class=\"remove\"\n tabindex=\"0\"\n (click)=\"onRemove(file.id, file.uploadState)\"\n *ngIf=\"!disableRemove.includes(file.uploadState)\"\n >\n <gds-icon-cross-small *nggCoreElement></gds-icon-cross-small>\n </a>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </form>\n\n <nggv-dialog\n #deleteModalRef\n [title]=\"t('dragDrop.text.fileCancelModalTitle')\"\n [content]=\"\n t('dragDrop.text.fileCancelModalContent', {\n name: markedForDeletion?.fileName,\n })\n \"\n [payload]=\"markedForDeletion\"\n [buttons]=\"{\n negative: 'dragDrop.text.fileCancelConfirm',\n positive: 'dragDrop.text.fileCancelDeny',\n }\"\n (nggvNegativeEvent)=\"onConfirmRemove($any($event))\"\n ></nggv-dialog>\n\n <!-- PROGRESS TEMPLATE -->\n\n <ng-template\n #progressTemplate\n let-file=\"\n file\"\n let-text=\"text\"\n >\n <div class=\"progress-wrapper\">\n <progress\n class=\"gds-progress-bar progress\"\n max=\"100\"\n [value]=\"file.progress\"\n >\n {{\n t('dragDrop.text.fileStateUploading', {\n uploaded:\n (file.raw?.size * (file.progress / 100)) / 1024 | number: '0.0-0',\n size: file.raw?.size / 1024 | number: '0.0-0',\n progress: file.progress,\n unit: 'kB',\n })\n }}\n </progress>\n <ng-template [ngIf]=\"stateMap.validating.length\">\n <div\n class=\"gds-progress-indicator indicator\"\n *ngIf=\"uploadStateIsArray(stateMap.validating); else singleValidation\"\n >\n <div\n class=\"gds-progress-indicator__step\"\n [class.-done]=\"i <= stateMap.validating.indexOf(file.status)\"\n *ngFor=\"let state of stateMap.validating; let i = index\"\n ></div>\n </div>\n </ng-template>\n <ng-template #singleValidation>\n <div class=\"gds-progress-indicator indicator\">\n <!-- eslint-disable @angular-eslint/template/eqeqeq -->\n <div\n class=\"gds-progress-indicator__step\"\n [class.-done]=\"file.status == stateMap.validating\"\n ></div>\n <!-- eslint-enable @angular-eslint/template/eqeqeq -->\n </div>\n </ng-template>\n </div>\n <span class=\"progress-text\">\n {{\n text ||\n t('dragDrop.text.fileStateUploading', {\n uploaded:\n (file.raw?.size * (file.progress / 100)) / 1024 | number: '0.0-0',\n size: file.raw?.size / 1024 | number: '0.0-0',\n progress: file.progress,\n unit: 'kB',\n })\n }}\n </span>\n </ng-template>\n</ng-container>\n", styles: [":host .gds-drag-drop{width:100%}:host .gds-drag-drop__input{width:.1px;height:.1px;opacity:0;overflow:hidden;position:absolute;z-index:-1}:host .gds-drag-drop__label{display:flex;justify-content:center;align-items:center;gap:.5rem;border:2px dashed #868686;font-weight:500;padding:2.25em 1.5em;overflow-wrap:anywhere}:host .gds-drag-drop__input+.gds-drag-drop__label em{font-style:normal;color:#0092e1;cursor:pointer}:host .gds-drag-drop table,:host .gds-drag-drop .gds-table{margin-top:2.25em}:host .gds-table{width:100%;font-family:SEBSansSerif,Arial,sans-serif;border-spacing:0}:host .gds-table th,:host .gds-table td{text-align:left;border-bottom:1px solid #e9e9e9}:host .gds-table thead{color:#333;font-size:1em}:host .gds-table thead tr{min-height:2em}:host .gds-table thead th,:host .gds-table thead td{border-bottom:1px solid #cecece;font-weight:500}:host .gds-table tbody{font-size:1em}:host .gds-table tbody tr{height:2.5em;border-bottom:1px solid #adadad}:host .gds-table tbody tr:hover td,:host .gds-table tbody tr:hover th{background-color:#f8f8f8}:host .gds-table tfoot{font-weight:500;font-size:1em}:host .gds-table tfoot tr{height:2.5em}:host .gds-table tfoot td{border-top:1px solid #cecece;border-bottom-width:0}:host tr .gds-table__numeric-col{text-align:right}:host tr .gds-table__negative-col{color:#bb000c}:host tr .gds-table__primary-col{color:#000}:host .gds-table__sortable-col{cursor:pointer;white-space:nowrap;margin-left:.5em}:host .gds-table__sortable-col:after{content:\"\";display:inline-block;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%23adadad' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%23adadad' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\");background-repeat:no-repeat;margin-left:.25rem;width:.625rem;height:1rem;vertical-align:text-bottom}:host .gds-table__sortable-col:hover:after{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%23cecece' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%23cecece' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\")}:host .gds-table__sortable-col--asc:after{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%23adadad' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%23007ac7' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\")}:host .gds-table__sortable-col--asc:hover:after{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%23cecece' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%2341b0ee' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\")}:host .gds-table__sortable-col--desc:after{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%23007ac7' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%23adadad' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\")}:host .gds-table__sortable-col--desc:hover:after{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%2341b0ee' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%23cecece' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\")}:host .gds-table .gds-field-checkbox-wrap{width:2.5rem}:host .gds-table .gds-field-checkbox-wrap label{box-shadow:none!important}:host .gds-table--fixed-l-col{overflow:auto;display:block;position:relative;max-width:100%}:host .gds-table--fixed-l-col td,:host .gds-table--fixed-l-col th{width:auto!important;min-width:150px}:host .gds-table--fixed-l-col td:first-child,:host .gds-table--fixed-l-col th:first-child{position:sticky;left:0;background-color:#fff;border-right:1px solid #e9e9e9}:host .gds-table--fixed-l-col thead th{top:0;z-index:1;position:sticky;background-color:#fff}:host .gds-table--fixed-l-col thead th:first-child{z-index:2}:host .gds-progress-bar{appearance:none;height:.3125rem;width:100%;position:relative;overflow:hidden;color:#45b400;border-width:0;background-color:#e9e9e9}:host .gds-progress-bar:before{display:block;position:absolute;content:\"\";left:-200px;width:200px;height:.3125rem;background-color:#45b400;animation:gds-progressbar-loading 2s linear infinite}:host .gds-progress-bar::-webkit-progress-value{background-color:transparent}:host .gds-progress-bar::-moz-progress-bar{background-color:transparent}:host .gds-progress-bar::-ms-fill{background-color:transparent;border-width:0}:host .gds-progress-bar::-webkit-progress-bar{background-color:#e9e9e9}@keyframes gds-progressbar-loading{0%{left:-30%;width:30%}50%{width:30%}70%{width:70%}80%{left:50%}95%{left:120%}to{left:100%}}:host .gds-progress-bar[value]:before{content:none}:host .gds-progress-bar[value]::-webkit-progress-value{background-color:#45b400}:host .gds-progress-bar[value]::-moz-progress-bar{background-color:#45b400}:host .gds-progress-bar[value]::-ms-fill{background-color:#45b400}:host .gds-progress-indicator{display:flex;width:100%}:host .gds-progress-indicator__step{flex-grow:1;height:.5rem;margin-right:.125rem;background-color:#e9e9e9}:host .gds-progress-indicator__step.-done{background-color:#45b400}:host .gds-progress-indicator__step:last-child{margin-right:0}:host .file-list th:first-child,:host .file-list td:first-child{width:auto}:host .filename{display:block;margin-bottom:.5rem}:host .col-name{width:40%}:host .col-status{width:30%}:host .col-actions{width:.1%}:host .progress-wrapper{display:flex}:host .progress,:host .indicator{height:.5rem}:host .gds-progress-indicator__step{margin-right:0}:host .progress{color:#45b400}:host .progress::-webkit-progress-value{background-color:#45b400}:host .progress::-moz-progress-bar{background-color:#45b400}:host .progress::-ms-fill{background-color:#45b400}:host .progress-text{display:block;margin-top:.125rem}:host .error-text{color:#bb000c}:host .success-text{color:#308800}:host .remove{padding:0 .5rem;font-size:1.5em;color:#868686;cursor:pointer;display:grid;place-content:center}:host .remove:hover,:host .remove:focus{color:#bb000c}\n"], dependencies: [{ kind: "directive", type: i1.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "component", type: i2.NggvDialogComponent, selector: "nggv-dialog", inputs: ["thook", "shown", "initiallyShown", "heading", "title", "content", "autoClose", "payload", "dialogTitleId", "dialogBodyId", "closeModalOnEscape", "closeButtonAriaLabel", "buttons"], outputs: ["nggvCloseEvent", "nggvPositiveEvent", "nggvNeutralEvent", "nggvNegativeEvent"], exportAs: ["dialog"] }, { kind: "directive", type: i3.NggCoreElementDirective, selector: "[nggCoreElement]" }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "pipe", type: i4.DecimalPipe, name: "number" }, { kind: "pipe", type: i5.ValuePipe, name: "value" }] }); }
452
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NggvDragDropComponent, selector: "nggv-drag-drop", inputs: { thook: "thook", service: "service", accept: "accept", disableRemove: "disableRemove", fileLimit: "fileLimit", multiple: "multiple", list: "list", throttle: "throttle", retryAttempts: "retryAttempts", selectable: "selectable", stateMap: "stateMap", fetchStatuses: "fetchStatuses", errorCodes: "errorCodes" }, outputs: { stateChange: "stateChange", detailsClick: "detailsClick" }, host: { listeners: { "window:beforeunload": "onBeforeUnload($event)" }, properties: { "attr.data-thook": "this.thook" } }, viewQueries: [{ propertyName: "deleteModalRef", first: true, predicate: ["deleteModalRef"], descendants: true }], ngImport: i0, template: "<ng-container *transloco=\"let t\">\n <form enctype=\"multipart/form-data\" #dragDropForm>\n <div class=\"gds-drag-drop\">\n <input\n class=\"gds-drag-drop__input\"\n id=\"drag-drop\"\n type=\"file\"\n [accept]=\"accept\"\n [multiple]=\"multiple && list\"\n (change)=\"onDrop($event)\"\n />\n <label\n [ngClass]=\"{\n 'gds-drag-drop__label': true,\n 'gds-drag-drop__label--above': componentState === 'over',\n }\"\n for=\"drag-drop\"\n [attr.data-thook]=\"thook + '-picker'\"\n [attr.aria-busy]=\"loading\"\n (dragenter)=\"onDragEnter($event)\"\n (dragover)=\"onDragEnter($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (dragend)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n [ngSwitch]=\"componentState\"\n >\n <!-- COMPONENT STATE NORMAL -->\n <ng-template [ngSwitchCase]=\"'normal'\">\n <gds-icon-cloud-upload *nggCoreElement></gds-icon-cloud-upload\n ><em>{{ t('dragDrop.label.fileChoose') }}</em>\n <ng-template [ngIf]=\"isDragDropAvailable\">\n {{ t('dragDrop.label.fileDrag') }}</ng-template\n >\n </ng-template>\n\n <!-- COMPONENT STATE OVER -->\n <ng-template [ngSwitchCase]=\"'over'\">\n <gds-icon-cloud-upload *nggCoreElement></gds-icon-cloud-upload\n >{{ t('dragDrop.label.fileDrop') }}\n </ng-template>\n\n <!-- COMPONENT STATE UPLOADING -->\n <ng-template [ngSwitchCase]=\"'uploading'\">\n <strong class=\"filename\">{{ lastFile?.fileName }}</strong>\n\n <!-- UPLOADING STATE -->\n <ng-template [ngIf]=\"lastFile?.uploadState === 'uploading'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: lastFile,\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- UPLOADED STATE -->\n <ng-template [ngIf]=\"lastFile?.uploadState === 'uploaded'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: lastFile,\n text: t('dragDrop.text.fileStateUploaded'),\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- VALIDATING STATE -->\n <ng-template [ngIf]=\"lastFile?.uploadState === 'validating'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: lastFile,\n text: t('dragDrop.text.fileStateValidating'),\n }\"\n ></ng-template>\n </ng-template>\n </ng-template>\n\n <!-- COMPONENT STATE DONE -->\n <ng-template [ngSwitchCase]=\"'done'\">\n {{ t('dragDrop.label.fileUploaded', { filename: lastFile?.fileName })\n }}<gds-icon-checkmark *nggCoreElement></gds-icon-checkmark>\n </ng-template>\n </label>\n\n <!-- LIST -->\n <table\n class=\"gds-table file-list\"\n [attr.data-thook]=\"thook + '-file-list'\"\n *ngIf=\"list\"\n >\n <thead>\n <tr>\n <th *ngIf=\"selectable\">\n <div class=\"gds-field-checkbox-wrap\">\n <input\n type=\"checkbox\"\n aria-label=\"Field label\"\n id=\"select-all\"\n />\n <label for=\"select-all\"></label>\n </div>\n </th>\n <th class=\"gds-table__primary-col col-name\">\n {{ t('dragDrop.label.fileName') }}\n </th>\n <th class=\"col-status\">\n {{ t('dragDrop.label.fileStatus') }}\n </th>\n <th class=\"col-actions\"></th>\n </tr>\n </thead>\n <tbody>\n <tr\n [attr.data-thook]=\"thook + '-file'\"\n *ngFor=\"let file of files | value\"\n >\n <td *ngIf=\"selectable\">\n <div class=\"gds-field-checkbox-wrap\">\n <input\n type=\"checkbox\"\n aria-label=\"Field label\"\n [id]=\"'file-checkbox-' + file.id\"\n />\n <label [for]=\"'file-checkbox-' + file.id\"></label>\n </div>\n </td>\n <td\n class=\"gds-table__primary-col\"\n [attr.data-thook]=\"thook + '-file-name'\"\n >\n {{ file.fileName }}\n </td>\n <td\n [attr.data-thook]=\"thook + '-file-status'\"\n [ngSwitch]=\"file.uploadState\"\n >\n <!-- UPLOADING STATE -->\n <ng-template [ngSwitchCase]=\"'uploading'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: file,\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- UPLOADED STATE -->\n <ng-template [ngSwitchCase]=\"'uploaded'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: file,\n text: t('dragDrop.text.fileStateUploaded'),\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- VALIDATING STATE -->\n <ng-template [ngSwitchCase]=\"'validating'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: file,\n text: t('dragDrop.text.fileStateValidating'),\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- ABORTED STATE -->\n <ng-template [ngSwitchCase]=\"'aborted'\">\n <span\n class=\"error-text\"\n [transloco]=\"\n 'dragDrop.error.' + file.internalStatusReasonCode\n \"\n [translocoParams]=\"translateParams(file)\"\n *ngIf=\"file.internalStatusReasonCode\"\n ></span>\n </ng-template>\n\n <!-- ERROR STATE -->\n <ng-template [ngSwitchCase]=\"'error'\">\n <span\n class=\"error-text\"\n [transloco]=\"\n 'dragDrop.error.' + file.internalStatusReasonCode\n \"\n [translocoParams]=\"translateParams(file)\"\n *ngIf=\"file.internalStatusReasonCode\"\n ></span>\n <br />\n <a\n (click)=\"detailsClick.emit(file)\"\n style=\"cursor: pointer\"\n *ngIf=\"\n file.statusReasonInformation &&\n file.statusReasonInformation.length\n \"\n >\n {{ t('dragDrop.link.viewDetails') }}\n </a>\n </ng-template>\n\n <!-- DONE STATE -->\n <ng-template [ngSwitchCase]=\"'done'\">\n <span class=\"success-text\">{{\n t('dragDrop.text.fileStateDone')\n }}</span>\n </ng-template>\n </td>\n\n <td class=\"gds-table__numeric-col\">\n <a\n class=\"remove\"\n tabindex=\"0\"\n (click)=\"onRemove(file.id, file.uploadState)\"\n *ngIf=\"!disableRemove.includes(file.uploadState)\"\n >\n <gds-icon-cross-small *nggCoreElement></gds-icon-cross-small>\n </a>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </form>\n\n <nggv-dialog\n #deleteModalRef\n [title]=\"t('dragDrop.text.fileCancelModalTitle')\"\n [content]=\"\n t('dragDrop.text.fileCancelModalContent', {\n name: markedForDeletion?.fileName,\n })\n \"\n [payload]=\"markedForDeletion\"\n [buttons]=\"{\n negative: 'dragDrop.text.fileCancelConfirm',\n positive: 'dragDrop.text.fileCancelDeny',\n }\"\n (nggvNegativeEvent)=\"onConfirmRemove($any($event))\"\n ></nggv-dialog>\n\n <!-- PROGRESS TEMPLATE -->\n\n <ng-template\n #progressTemplate\n let-file=\"\n file\"\n let-text=\"text\"\n >\n <div class=\"progress-wrapper\">\n <progress\n class=\"gds-progress-bar progress\"\n max=\"100\"\n [value]=\"file.progress\"\n >\n {{\n t('dragDrop.text.fileStateUploading', {\n uploaded:\n (file.raw?.size * (file.progress / 100)) / 1024 | number: '0.0-0',\n size: file.raw?.size / 1024 | number: '0.0-0',\n progress: file.progress,\n unit: 'kB',\n })\n }}\n </progress>\n <ng-template [ngIf]=\"stateMap.validating.length\">\n <div\n class=\"gds-progress-indicator indicator\"\n *ngIf=\"uploadStateIsArray(stateMap.validating); else singleValidation\"\n >\n <div\n class=\"gds-progress-indicator__step\"\n [class.-done]=\"i <= stateMap.validating.indexOf(file.status)\"\n *ngFor=\"let state of stateMap.validating; let i = index\"\n ></div>\n </div>\n </ng-template>\n <ng-template #singleValidation>\n <div class=\"gds-progress-indicator indicator\">\n <!-- eslint-disable @angular-eslint/template/eqeqeq -->\n <div\n class=\"gds-progress-indicator__step\"\n [class.-done]=\"file.status == stateMap.validating\"\n ></div>\n <!-- eslint-enable @angular-eslint/template/eqeqeq -->\n </div>\n </ng-template>\n </div>\n <span class=\"progress-text\">\n {{\n text ||\n t('dragDrop.text.fileStateUploading', {\n uploaded:\n (file.raw?.size * (file.progress / 100)) / 1024 | number: '0.0-0',\n size: file.raw?.size / 1024 | number: '0.0-0',\n progress: file.progress,\n unit: 'kB',\n })\n }}\n </span>\n </ng-template>\n</ng-container>\n", styles: [":host .gds-drag-drop{width:100%}:host .gds-drag-drop__input{width:.1px;height:.1px;opacity:0;overflow:hidden;position:absolute;z-index:-1}:host .gds-drag-drop__label{display:flex;justify-content:center;align-items:center;gap:.5rem;border:2px dashed #868686;font-weight:500;padding:2.25em 1.5em;overflow-wrap:anywhere}:host .gds-drag-drop__input+.gds-drag-drop__label em{font-style:normal;color:#0092e1;cursor:pointer}:host .gds-drag-drop table,:host .gds-drag-drop .gds-table{margin-top:2.25em}:host .gds-table{width:100%;font-family:SEBSansSerif,Arial,sans-serif;border-spacing:0}:host .gds-table th,:host .gds-table td{text-align:left;border-bottom:1px solid #e9e9e9}:host .gds-table thead{color:#333;font-size:1em}:host .gds-table thead tr{min-height:2em}:host .gds-table thead th,:host .gds-table thead td{border-bottom:1px solid #cecece;font-weight:500}:host .gds-table tbody{font-size:1em}:host .gds-table tbody tr{height:2.5em;border-bottom:1px solid #adadad}:host .gds-table tbody tr:hover td,:host .gds-table tbody tr:hover th{background-color:#f8f8f8}:host .gds-table tfoot{font-weight:500;font-size:1em}:host .gds-table tfoot tr{height:2.5em}:host .gds-table tfoot td{border-top:1px solid #cecece;border-bottom-width:0}:host tr .gds-table__numeric-col{text-align:right}:host tr .gds-table__negative-col{color:#bb000c}:host tr .gds-table__primary-col{color:#000}:host .gds-table__sortable-col{cursor:pointer;white-space:nowrap;margin-left:.5em}:host .gds-table__sortable-col:after{content:\"\";display:inline-block;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%23adadad' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%23adadad' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\");background-repeat:no-repeat;margin-left:.25rem;width:.625rem;height:1rem;vertical-align:text-bottom}:host .gds-table__sortable-col:hover:after{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%23cecece' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%23cecece' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\")}:host .gds-table__sortable-col--asc:after{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%23adadad' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%23007ac7' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\")}:host .gds-table__sortable-col--asc:hover:after{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%23cecece' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%2341b0ee' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\")}:host .gds-table__sortable-col--desc:after{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%23007ac7' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%23adadad' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\")}:host .gds-table__sortable-col--desc:hover:after{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%2341b0ee' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%23cecece' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\")}:host .gds-table .gds-field-checkbox-wrap{width:2.5rem}:host .gds-table .gds-field-checkbox-wrap label{box-shadow:none!important}:host .gds-table--fixed-l-col{overflow:auto;display:block;position:relative;max-width:100%}:host .gds-table--fixed-l-col td,:host .gds-table--fixed-l-col th{width:auto!important;min-width:150px}:host .gds-table--fixed-l-col td:first-child,:host .gds-table--fixed-l-col th:first-child{position:sticky;left:0;background-color:#fff;border-right:1px solid #e9e9e9}:host .gds-table--fixed-l-col thead th{top:0;z-index:1;position:sticky;background-color:#fff}:host .gds-table--fixed-l-col thead th:first-child{z-index:2}:host .gds-progress-bar{appearance:none;height:.3125rem;width:100%;position:relative;overflow:hidden;color:#45b400;border-width:0;background-color:#e9e9e9}:host .gds-progress-bar:before{display:block;position:absolute;content:\"\";left:-200px;width:200px;height:.3125rem;background-color:#45b400;animation:gds-progressbar-loading 2s linear infinite}:host .gds-progress-bar::-webkit-progress-value{background-color:transparent}:host .gds-progress-bar::-moz-progress-bar{background-color:transparent}:host .gds-progress-bar::-ms-fill{background-color:transparent;border-width:0}:host .gds-progress-bar::-webkit-progress-bar{background-color:#e9e9e9}@keyframes gds-progressbar-loading{0%{left:-30%;width:30%}50%{width:30%}70%{width:70%}80%{left:50%}95%{left:120%}to{left:100%}}:host .gds-progress-bar[value]:before{content:none}:host .gds-progress-bar[value]::-webkit-progress-value{background-color:#45b400}:host .gds-progress-bar[value]::-moz-progress-bar{background-color:#45b400}:host .gds-progress-bar[value]::-ms-fill{background-color:#45b400}:host .gds-progress-indicator{display:flex;width:100%}:host .gds-progress-indicator__step{flex-grow:1;height:.5rem;margin-right:.125rem;background-color:#e9e9e9}:host .gds-progress-indicator__step.-done{background-color:#45b400}:host .gds-progress-indicator__step:last-child{margin-right:0}:host .file-list th:first-child,:host .file-list td:first-child{width:auto}:host .filename{display:block;margin-bottom:.5rem}:host .col-name{width:40%}:host .col-status{width:30%}:host .col-actions{width:.1%}:host .progress-wrapper{display:flex}:host .progress,:host .indicator{height:.5rem}:host .gds-progress-indicator__step{margin-right:0}:host .progress{color:#45b400}:host .progress::-webkit-progress-value{background-color:#45b400}:host .progress::-moz-progress-bar{background-color:#45b400}:host .progress::-ms-fill{background-color:#45b400}:host .progress-text{display:block;margin-top:.125rem}:host .error-text{color:#bb000c}:host .success-text{color:#308800}:host .remove{padding:0 .5rem;font-size:1.5em;color:#868686;cursor:pointer;display:grid;place-content:center}:host .remove:hover,:host .remove:focus{color:#bb000c}\n"], dependencies: [{ kind: "directive", type: i1.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "component", type: i2.NggvDialogComponent, selector: "nggv-dialog", inputs: ["thook", "shown", "initiallyShown", "heading", "title", "content", "autoClose", "payload", "dialogTitleId", "dialogBodyId", "closeModalOnEscape", "closeButtonAriaLabel", "buttons"], outputs: ["nggvCloseEvent", "nggvPositiveEvent", "nggvNeutralEvent", "nggvNegativeEvent", "nggvDangerEvent"], exportAs: ["dialog"] }, { kind: "directive", type: i3.NggCoreElementDirective, selector: "[nggCoreElement]" }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "pipe", type: i4.DecimalPipe, name: "number" }, { kind: "pipe", type: i5.ValuePipe, name: "value" }] }); }
453
453
  }
454
454
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NggvDragDropComponent, decorators: [{
455
455
  type: Component,
@@ -1,4 +1,4 @@
1
- import { Component, EventEmitter, HostBinding, Inject, Input, Optional, Output, ViewChildren, } from '@angular/core';
1
+ import { Component, ElementRef, EventEmitter, HostBinding, Inject, Input, Optional, Output, Renderer2, ViewChildren, } from '@angular/core';
2
2
  import { TRANSLOCO_SCOPE } from '@jsverse/transloco';
3
3
  import { filter, fromEvent, Subject, takeUntil } from 'rxjs';
4
4
  import scrollIntoView from 'scroll-into-view-if-needed';
@@ -15,8 +15,13 @@ export class NggvDropdownListComponent {
15
15
  get expanded() {
16
16
  return this._expanded;
17
17
  }
18
- constructor(translocoScope) {
18
+ get positionAttr() {
19
+ return this.dropdownPosition;
20
+ }
21
+ constructor(translocoScope, renderer, elRef) {
19
22
  this.translocoScope = translocoScope;
23
+ this.renderer = renderer;
24
+ this.elRef = elRef;
20
25
  /** The additional amount to show when option is scrolled into view. */
21
26
  this.scrollOffset = 24;
22
27
  /** Id of the host element and is accessible by the children, automatically generated if not provided. */
@@ -35,10 +40,17 @@ export class NggvDropdownListComponent {
35
40
  * but not select the current active element with Space.
36
41
  */
37
42
  this.selectWithSpace = true;
43
+ /**
44
+ * When true, the dropdown will automatically choose to open above or below the input
45
+ * based on available space in the viewport, and will scale its height to fit if needed.
46
+ */
47
+ this.dynamicPosition = false;
38
48
  this.selectedValueChanged = new EventEmitter();
39
49
  this.closed = new EventEmitter();
40
50
  /** The current active option based on numeric index. */
41
51
  this.activeIndex = -1;
52
+ // Indicates whether the dropdown list should be displayed below ('bottom') or above ('top') the input, based on available space.
53
+ this.dropdownPosition = 'bottom';
42
54
  this.dropdownUtils = new DropdownUtils();
43
55
  this._expanded = false;
44
56
  this.closed$ = new Subject();
@@ -83,6 +95,9 @@ export class NggvDropdownListComponent {
83
95
  // update expanded state
84
96
  this._expanded = expanded;
85
97
  if (expanded) {
98
+ if (this.dynamicPosition) {
99
+ this.setDropdownPosition();
100
+ }
86
101
  this.refreshSelectedOption();
87
102
  this.subscribeToKeyUpEvents();
88
103
  this.subscribeToKeyDownEvents();
@@ -262,18 +277,54 @@ export class NggvDropdownListComponent {
262
277
  }, 0);
263
278
  }
264
279
  }
265
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NggvDropdownListComponent, deps: [{ token: TRANSLOCO_SCOPE, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
266
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NggvDropdownListComponent, selector: "nggv-dropdown-list", inputs: { expanded: "expanded", state: "state", scrollOffset: "scrollOffset", optionContentTpl: "optionContentTpl", groupLabelTpl: "groupLabelTpl", id: "id", thook: "thook", options: "options", textToHighlight: "textToHighlight", onlyEmitDistinctChanges: "onlyEmitDistinctChanges", selectWithSpace: "selectWithSpace" }, outputs: { selectedValueChanged: "selectedValueChanged", closed: "closed" }, host: { properties: { "attr.id": "this.id", "attr.data-thook": "this.thook" } }, viewQueries: [{ propertyName: "optionRefs", predicate: ["optionRefs"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *transloco=\"let t; read: scope\">\n <div class=\"visually-hidden\">{{ t(state?.label) }}</div>\n <ul\n class=\"gds-dropdown__options card options gds-reset\"\n [class.gds-dropdown__options-expanded]=\"expanded\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.data-thook]=\"thook + '-options'\"\n [attr.aria-labelledby]=\"id + '-label'\"\n [attr.aria-activedescendant]=\"\n state ? id + '-option-' + state?.key : undefined\n \"\n >\n <ng-container *ngFor=\"let item of options\">\n <!-- OPTION -->\n <ng-container *ngIf=\"!isGroup(item)\">\n <ng-template\n *ngTemplateOutlet=\"listItemTemplate; context: { $implicit: item }\"\n ></ng-template>\n </ng-container>\n\n <!-- OPTION GROUP -->\n <li\n class=\"gds-dropdown__options__label group\"\n [attr.data-thook]=\"thook + '-option-group'\"\n *ngIf=\"isGroup(item)\"\n >\n <!-- group label template (default or custom) -->\n <ng-template\n *ngTemplateOutlet=\"listGroupTemplate; context: { $implicit: item }\"\n ></ng-template>\n\n <ul [attr.aria-disabled]=\"item.disabled\" class=\"gds-reset\">\n <ng-container *ngFor=\"let option of castGroup(item).options\">\n <ng-template\n *ngTemplateOutlet=\"\n listItemTemplate;\n context: { $implicit: option }\n \"\n ></ng-template>\n </ng-container>\n </ul>\n </li>\n </ng-container>\n </ul>\n\n <!-- TEMPLATE -->\n <ng-template #listItemTemplate let-option>\n <li\n #optionRefs\n *ngIf=\"!optionContentTpl\"\n tabindex=\"-1\"\n [id]=\"id + '-option-' + option.key\"\n class=\"gds-dropdown__options__label option\"\n role=\"option\"\n #liElem\n [attr.data-thook]=\"thook + '-option-' + option.key\"\n [attr.aria-disabled]=\"option.disabled\"\n [attr.aria-selected]=\"\n option.key === selectedValue?.key && !!selectedValue?.key\n \"\n [attr.aria-focus]=\"option.key === state?.key && !option.disabled\"\n [nggvTooltip]=\"isOverflow(liElem) ? t(option.label) : undefined\"\n (click)=\"updateState(option, $event)\"\n >\n <ng-template\n *ngTemplateOutlet=\"\n basicOptionContentTpl;\n context: { $implicit: option }\n \"\n >\n </ng-template>\n </li>\n <!-- Checking overflow on custom templates do not work skip adding nggvToolTip if custom template is provided -->\n <li\n #optionRefs\n *ngIf=\"!!optionContentTpl\"\n tabindex=\"-1\"\n [id]=\"id + '-option-' + option.key\"\n class=\"gds-dropdown__options__label option\"\n role=\"option\"\n #liElem\n [attr.data-thook]=\"thook + '-option-' + option.key\"\n [attr.aria-disabled]=\"option.disabled\"\n [attr.aria-selected]=\"\n option.key === selectedValue?.key && !!selectedValue?.key\n \"\n [attr.aria-focus]=\"option.key === state?.key && !option.disabled\"\n (click)=\"updateState(option, $event)\"\n >\n <ng-template\n *ngTemplateOutlet=\"optionContentTpl; context: { $implicit: option }\"\n >\n </ng-template>\n </li>\n </ng-template>\n\n <ng-template #listGroupTemplate let-item>\n <ng-container *ngIf=\"groupLabelTpl\">\n <ng-template\n *ngTemplateOutlet=\"groupLabelTpl; context: { $implicit: item }\"\n ></ng-template>\n </ng-container>\n <ng-container *ngIf=\"!groupLabelTpl\">\n <ng-template\n *ngTemplateOutlet=\"basicGroupLabelTpl; context: { $implicit: item }\"\n ></ng-template>\n </ng-container>\n </ng-template>\n\n <ng-template #basicOptionContentTpl let-option>\n <nggv-typeahead-highlight\n *ngIf=\"!!textToHighlight\"\n [textToHighlight]=\"textToHighlight\"\n [textContent]=\"t(option.label)\"\n >\n </nggv-typeahead-highlight>\n <ng-container *ngIf=\"!textToHighlight\">\n {{ t(option.label) }}\n </ng-container>\n </ng-template>\n\n <ng-template #basicGroupLabelTpl let-item>\n <div class=\"nggv-group-label\">{{ t(item.label) }}</div>\n </ng-template>\n</ng-container>\n", styles: [":host{--gds-ref-pallet-base300: hsl(0, 0%, 87%);--gds-ref-pallet-base400: hsl(0, 0%, 81%);--gds-ref-pallet-base500: hsl(0, 0%, 68%);--sg-z-index-dropdown: ;--sg-z-index-popover: 1060;--sg-z-index-dropdown-backdrop: 990;--sg-z-index-dropdown: 2000;--sg-popover-background: #fff;--sg-popover-box-shadow: 0 .125rem .375rem rgba(0, 0, 0, .15);--text-primary-color: #333;position:absolute;bottom:0;transform:translateY(calc(100% + .5rem));z-index:var(--sg-z-index-dropdown)}:host .visually-hidden:not(:focus):not(:active){clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}:host .hidden{visibility:hidden;display:none}:host ul[role=menu] [role=menuitem]{padding:.75rem;cursor:pointer}:host ul[role=menu] [role=menuitem]:hover,:host ul[role=menu] [role=menuitem]:focus-visible{background-color:var(--gds-ref-pallet-base200)}:host ul[role=menu] [role=menuitem]:active{background-color:var(--gds-ref-pallet-base300)}:host ul[role=menu] [role=menuitem]:focus{outline-color:#000;outline-offset:-.25rem}:host ul[role=listbox]{--z-index: var(--sg-z-index-popover);background-color:var(--sg-popover-background);flex-direction:column;justify-content:flex-end;inset:auto;z-index:var(--z-index);box-shadow:var(--sg-popover-box-shadow);color:var(--text-primary-color);padding:0;max-height:500px;overflow-y:auto;width:100%;border:solid var(--sg-border-width) var(--sg-border-color);--border-color: var(--text-primary-color);--sg-border-color: var(--text-primary-color);border-radius:var(--sg-border-radius)}:host ul[role=listbox] [role=option]{padding:.75rem 1rem;line-height:1.25;cursor:pointer}:host ul[role=listbox] [role=option]:hover,:host ul[role=listbox] [role=option]:focus-visible{background-color:var(--grey-400)}:host ul[role=listbox] [role=option]:active{background-color:var(--grey-400)}:host ul[role=listbox] [role=option]:focus{outline-color:#000;outline-offset:-.25rem}:host ul[role=listbox] [role=option].active.sg-highlighted,:host ul[role=listbox] [role=option][aria-selected=true]{background:var(--grey-1000);color:#fff}:host ul[role=listbox] .group ul{list-style-type:none;padding:0}:host ul[role=listbox] .group:hover{color:inherit;background-color:inherit}:host .sg-fieldset-container{overflow-y:auto}:host .sg-fieldset-container fieldset[role=listbox][aria-multiselectable=true] [role=option]{display:flex;width:100%}:host .sg-fieldset-container fieldset[role=listbox][aria-multiselectable=true] [role=option].active.sg-highlighted input[type=checkbox]~i{border-color:#007ac7!important;box-shadow:0 0 .25em .0625em #41b0ee;outline-color:transparent;outline-style:solid}:host .gds-dropdown__options{padding-left:0;margin-bottom:0;margin-top:0;display:flex;flex-direction:column;list-style:none;display:none}:host .gds-dropdown__options>li{padding-bottom:.5rem;padding-top:.5rem;border:0;display:block;position:relative}:host .gds-dropdown__options>li:before{font-weight:500;display:inline-block;left:0;position:absolute;text-align:center}:host .gds-dropdown__options-expanded{display:block}:host .gds-dropdown__options__label:hover{background-color:var(--gds-ref-pallet-base400)}:host .gds-dropdown__options__label:focus-visible,:host .gds-dropdown__options__label[aria-focus=true]{background-color:var(--gds-ref-pallet-base300)}:host .gds-dropdown__options__label:active{background-color:var(--gds-ref-pallet-base500)}:host .gds-dropdown__options__label:focus-visible{outline-color:#000;outline-offset:-.25rem}:host .gds-dropdown__options__label[aria-hidden=true]{display:none}:host .gds-dropdown__options__label[highlighted]{color:#fff}:host li+.group{padding-top:0}:host .nggv-group-label{cursor:pointer;background-color:#e7e7e7;padding-inline:1rem;padding-block:.5rem}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.NggvTypeaheadHighlightComponent, selector: "nggv-typeahead-highlight", inputs: ["textContent", "textToHighlight"] }, { kind: "directive", type: i3.NggvTooltipDirective, selector: "[nggvTooltip]", inputs: ["nggvTooltip", "thook", "placement", "shown", "offset", "resizeThrottle", "tooltipId", "maxWidth"], outputs: ["nggvShow", "nggvHide"] }, { kind: "directive", type: i4.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }] }); }
280
+ /**
281
+ * Calculates available space above and below the dropdown input,
282
+ * sets dropdownPosition ('top' or 'bottom') accordingly,
283
+ * and dynamically sets the max-height of the dropdown list to fit the viewport.
284
+ */
285
+ setDropdownPosition() {
286
+ const dropdown = this.elRef.nativeElement;
287
+ // dropdown trigger
288
+ const dropdownInput = dropdown.parentElement;
289
+ const dropdownList = dropdown.querySelector('ul[role="listbox"]');
290
+ const rect = dropdownInput.getBoundingClientRect();
291
+ const viewportHeight = window.innerHeight;
292
+ const spaceBelow = viewportHeight - rect.bottom;
293
+ const spaceAbove = rect.top;
294
+ const MARGIN = 10;
295
+ const MIN_HEIGHT = 100;
296
+ const DROPDOWN_MAX_HEIGHT = 500;
297
+ let maxDropdownHeight;
298
+ if (spaceBelow >= DROPDOWN_MAX_HEIGHT) {
299
+ this.dropdownPosition = 'bottom';
300
+ maxDropdownHeight = DROPDOWN_MAX_HEIGHT;
301
+ }
302
+ else if (spaceAbove >= DROPDOWN_MAX_HEIGHT) {
303
+ this.dropdownPosition = 'top';
304
+ maxDropdownHeight = DROPDOWN_MAX_HEIGHT;
305
+ }
306
+ else if (spaceBelow > spaceAbove) {
307
+ this.dropdownPosition = 'bottom';
308
+ maxDropdownHeight = Math.max(spaceBelow - MARGIN, MIN_HEIGHT); // 10px margin, minimum height 100px
309
+ }
310
+ else {
311
+ this.dropdownPosition = 'top';
312
+ maxDropdownHeight = Math.max(spaceAbove - MARGIN, MIN_HEIGHT); // 10px margin, minimum height 100px
313
+ }
314
+ this.renderer.setStyle(dropdownList, 'max-height', `${maxDropdownHeight}px`);
315
+ }
316
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NggvDropdownListComponent, deps: [{ token: TRANSLOCO_SCOPE, optional: true }, { token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
317
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NggvDropdownListComponent, selector: "nggv-dropdown-list", inputs: { expanded: "expanded", state: "state", scrollOffset: "scrollOffset", optionContentTpl: "optionContentTpl", groupLabelTpl: "groupLabelTpl", id: "id", thook: "thook", options: "options", textToHighlight: "textToHighlight", onlyEmitDistinctChanges: "onlyEmitDistinctChanges", selectWithSpace: "selectWithSpace", dynamicPosition: "dynamicPosition" }, outputs: { selectedValueChanged: "selectedValueChanged", closed: "closed" }, host: { properties: { "attr.id": "this.id", "attr.data-thook": "this.thook", "attr.data-position": "this.positionAttr" } }, viewQueries: [{ propertyName: "optionRefs", predicate: ["optionRefs"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *transloco=\"let t; read: scope\">\n <div class=\"visually-hidden\">{{ t(state?.label) }}</div>\n <ul\n class=\"gds-dropdown__options card options gds-reset\"\n [class.gds-dropdown__options-expanded]=\"expanded\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.data-thook]=\"thook + '-options'\"\n [attr.aria-labelledby]=\"id + '-label'\"\n [attr.aria-activedescendant]=\"\n state ? id + '-option-' + state?.key : undefined\n \"\n >\n <ng-container *ngFor=\"let item of options\">\n <!-- OPTION -->\n <ng-container *ngIf=\"!isGroup(item)\">\n <ng-template\n *ngTemplateOutlet=\"listItemTemplate; context: { $implicit: item }\"\n ></ng-template>\n </ng-container>\n\n <!-- OPTION GROUP -->\n <li\n class=\"gds-dropdown__options__label group\"\n [attr.data-thook]=\"thook + '-option-group'\"\n *ngIf=\"isGroup(item)\"\n >\n <!-- group label template (default or custom) -->\n <ng-template\n *ngTemplateOutlet=\"listGroupTemplate; context: { $implicit: item }\"\n ></ng-template>\n\n <ul [attr.aria-disabled]=\"item.disabled\" class=\"gds-reset\">\n <ng-container *ngFor=\"let option of castGroup(item).options\">\n <ng-template\n *ngTemplateOutlet=\"\n listItemTemplate;\n context: { $implicit: option }\n \"\n ></ng-template>\n </ng-container>\n </ul>\n </li>\n </ng-container>\n </ul>\n\n <!-- TEMPLATE -->\n <ng-template #listItemTemplate let-option>\n <li\n #optionRefs\n *ngIf=\"!optionContentTpl\"\n tabindex=\"-1\"\n [id]=\"id + '-option-' + option.key\"\n class=\"gds-dropdown__options__label option\"\n role=\"option\"\n #liElem\n [attr.data-thook]=\"thook + '-option-' + option.key\"\n [attr.aria-disabled]=\"option.disabled\"\n [attr.aria-selected]=\"\n option.key === selectedValue?.key && !!selectedValue?.key\n \"\n [attr.aria-focus]=\"option.key === state?.key && !option.disabled\"\n [nggvTooltip]=\"isOverflow(liElem) ? t(option.label) : undefined\"\n (click)=\"updateState(option, $event)\"\n >\n <ng-template\n *ngTemplateOutlet=\"\n basicOptionContentTpl;\n context: { $implicit: option }\n \"\n >\n </ng-template>\n </li>\n <!-- Checking overflow on custom templates do not work skip adding nggvToolTip if custom template is provided -->\n <li\n #optionRefs\n *ngIf=\"!!optionContentTpl\"\n tabindex=\"-1\"\n [id]=\"id + '-option-' + option.key\"\n class=\"gds-dropdown__options__label option\"\n role=\"option\"\n #liElem\n [attr.data-thook]=\"thook + '-option-' + option.key\"\n [attr.aria-disabled]=\"option.disabled\"\n [attr.aria-selected]=\"\n option.key === selectedValue?.key && !!selectedValue?.key\n \"\n [attr.aria-focus]=\"option.key === state?.key && !option.disabled\"\n (click)=\"updateState(option, $event)\"\n >\n <ng-template\n *ngTemplateOutlet=\"optionContentTpl; context: { $implicit: option }\"\n >\n </ng-template>\n </li>\n </ng-template>\n\n <ng-template #listGroupTemplate let-item>\n <ng-container *ngIf=\"groupLabelTpl\">\n <ng-template\n *ngTemplateOutlet=\"groupLabelTpl; context: { $implicit: item }\"\n ></ng-template>\n </ng-container>\n <ng-container *ngIf=\"!groupLabelTpl\">\n <ng-template\n *ngTemplateOutlet=\"basicGroupLabelTpl; context: { $implicit: item }\"\n ></ng-template>\n </ng-container>\n </ng-template>\n\n <ng-template #basicOptionContentTpl let-option>\n <nggv-typeahead-highlight\n *ngIf=\"!!textToHighlight\"\n [textToHighlight]=\"textToHighlight\"\n [textContent]=\"t(option.label)\"\n >\n </nggv-typeahead-highlight>\n <ng-container *ngIf=\"!textToHighlight\">\n {{ t(option.label) }}\n </ng-container>\n </ng-template>\n\n <ng-template #basicGroupLabelTpl let-item>\n <div class=\"nggv-group-label\">{{ t(item.label) }}</div>\n </ng-template>\n</ng-container>\n", styles: [":host{--gds-ref-pallet-base300: hsl(0, 0%, 87%);--gds-ref-pallet-base400: hsl(0, 0%, 81%);--gds-ref-pallet-base500: hsl(0, 0%, 68%);--sg-z-index-dropdown: ;--sg-z-index-popover: 1060;--sg-z-index-dropdown-backdrop: 990;--sg-z-index-dropdown: 2000;--sg-popover-background: #fff;--sg-popover-box-shadow: 0 .125rem .375rem rgba(0, 0, 0, .15);--text-primary-color: #333;position:absolute;bottom:0;transform:translateY(calc(100% + .5rem));z-index:var(--sg-z-index-dropdown)}:host .visually-hidden:not(:focus):not(:active){clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}:host .hidden{visibility:hidden;display:none}:host ul[role=menu] [role=menuitem]{padding:.75rem;cursor:pointer}:host ul[role=menu] [role=menuitem]:hover,:host ul[role=menu] [role=menuitem]:focus-visible{background-color:var(--gds-ref-pallet-base200)}:host ul[role=menu] [role=menuitem]:active{background-color:var(--gds-ref-pallet-base300)}:host ul[role=menu] [role=menuitem]:focus{outline-color:#000;outline-offset:-.25rem}:host ul[role=listbox]{--z-index: var(--sg-z-index-popover);background-color:var(--sg-popover-background);flex-direction:column;justify-content:flex-end;inset:auto;z-index:var(--z-index);box-shadow:var(--sg-popover-box-shadow);color:var(--text-primary-color);padding:0;max-height:500px;overflow-y:auto;width:100%;border:solid var(--sg-border-width) var(--sg-border-color);--border-color: var(--text-primary-color);--sg-border-color: var(--text-primary-color);border-radius:var(--sg-border-radius)}:host ul[role=listbox] [role=option]{padding:.75rem 1rem;line-height:1.25;cursor:pointer}:host ul[role=listbox] [role=option]:hover,:host ul[role=listbox] [role=option]:focus-visible{background-color:var(--grey-400)}:host ul[role=listbox] [role=option]:active{background-color:var(--grey-400)}:host ul[role=listbox] [role=option]:focus{outline-color:#000;outline-offset:-.25rem}:host ul[role=listbox] [role=option].active.sg-highlighted,:host ul[role=listbox] [role=option][aria-selected=true]{background:var(--grey-1000);color:#fff}:host ul[role=listbox] .group ul{list-style-type:none;padding:0}:host ul[role=listbox] .group:hover{color:inherit;background-color:inherit}:host .sg-fieldset-container{overflow-y:auto}:host .sg-fieldset-container fieldset[role=listbox][aria-multiselectable=true] [role=option]{display:flex;width:100%}:host .sg-fieldset-container fieldset[role=listbox][aria-multiselectable=true] [role=option].active.sg-highlighted input[type=checkbox]~i{border-color:#007ac7!important;box-shadow:0 0 .25em .0625em #41b0ee;outline-color:transparent;outline-style:solid}:host .gds-dropdown__options{padding-left:0;margin-bottom:0;margin-top:0;display:flex;flex-direction:column;list-style:none;display:none}:host .gds-dropdown__options>li{padding-bottom:.5rem;padding-top:.5rem;border:0;display:block;position:relative}:host .gds-dropdown__options>li:before{font-weight:500;display:inline-block;left:0;position:absolute;text-align:center}:host .gds-dropdown__options-expanded{display:block}:host .gds-dropdown__options__label:hover{background-color:var(--gds-ref-pallet-base400)}:host .gds-dropdown__options__label:focus-visible,:host .gds-dropdown__options__label[aria-focus=true]{background-color:var(--gds-ref-pallet-base300)}:host .gds-dropdown__options__label:active{background-color:var(--gds-ref-pallet-base500)}:host .gds-dropdown__options__label:focus-visible{outline-color:#000;outline-offset:-.25rem}:host .gds-dropdown__options__label[aria-hidden=true]{display:none}:host .gds-dropdown__options__label[highlighted]{color:#fff}:host li+.group{padding-top:0}:host .nggv-group-label{cursor:pointer;background-color:#e7e7e7;padding-inline:1rem;padding-block:.5rem}:host[data-position=top]{top:auto;bottom:100%;transform:translateY(-.5rem)}:host[data-position=bottom]{bottom:0;transform:translateY(calc(100% + .5rem))}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.NggvTypeaheadHighlightComponent, selector: "nggv-typeahead-highlight", inputs: ["textContent", "textToHighlight"] }, { kind: "directive", type: i3.NggvTooltipDirective, selector: "[nggvTooltip]", inputs: ["nggvTooltip", "thook", "placement", "shown", "offset", "resizeThrottle", "tooltipId", "maxWidth"], outputs: ["nggvShow", "nggvHide"] }, { kind: "directive", type: i4.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }] }); }
267
318
  }
268
319
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NggvDropdownListComponent, decorators: [{
269
320
  type: Component,
270
- args: [{ selector: 'nggv-dropdown-list', template: "<ng-container *transloco=\"let t; read: scope\">\n <div class=\"visually-hidden\">{{ t(state?.label) }}</div>\n <ul\n class=\"gds-dropdown__options card options gds-reset\"\n [class.gds-dropdown__options-expanded]=\"expanded\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.data-thook]=\"thook + '-options'\"\n [attr.aria-labelledby]=\"id + '-label'\"\n [attr.aria-activedescendant]=\"\n state ? id + '-option-' + state?.key : undefined\n \"\n >\n <ng-container *ngFor=\"let item of options\">\n <!-- OPTION -->\n <ng-container *ngIf=\"!isGroup(item)\">\n <ng-template\n *ngTemplateOutlet=\"listItemTemplate; context: { $implicit: item }\"\n ></ng-template>\n </ng-container>\n\n <!-- OPTION GROUP -->\n <li\n class=\"gds-dropdown__options__label group\"\n [attr.data-thook]=\"thook + '-option-group'\"\n *ngIf=\"isGroup(item)\"\n >\n <!-- group label template (default or custom) -->\n <ng-template\n *ngTemplateOutlet=\"listGroupTemplate; context: { $implicit: item }\"\n ></ng-template>\n\n <ul [attr.aria-disabled]=\"item.disabled\" class=\"gds-reset\">\n <ng-container *ngFor=\"let option of castGroup(item).options\">\n <ng-template\n *ngTemplateOutlet=\"\n listItemTemplate;\n context: { $implicit: option }\n \"\n ></ng-template>\n </ng-container>\n </ul>\n </li>\n </ng-container>\n </ul>\n\n <!-- TEMPLATE -->\n <ng-template #listItemTemplate let-option>\n <li\n #optionRefs\n *ngIf=\"!optionContentTpl\"\n tabindex=\"-1\"\n [id]=\"id + '-option-' + option.key\"\n class=\"gds-dropdown__options__label option\"\n role=\"option\"\n #liElem\n [attr.data-thook]=\"thook + '-option-' + option.key\"\n [attr.aria-disabled]=\"option.disabled\"\n [attr.aria-selected]=\"\n option.key === selectedValue?.key && !!selectedValue?.key\n \"\n [attr.aria-focus]=\"option.key === state?.key && !option.disabled\"\n [nggvTooltip]=\"isOverflow(liElem) ? t(option.label) : undefined\"\n (click)=\"updateState(option, $event)\"\n >\n <ng-template\n *ngTemplateOutlet=\"\n basicOptionContentTpl;\n context: { $implicit: option }\n \"\n >\n </ng-template>\n </li>\n <!-- Checking overflow on custom templates do not work skip adding nggvToolTip if custom template is provided -->\n <li\n #optionRefs\n *ngIf=\"!!optionContentTpl\"\n tabindex=\"-1\"\n [id]=\"id + '-option-' + option.key\"\n class=\"gds-dropdown__options__label option\"\n role=\"option\"\n #liElem\n [attr.data-thook]=\"thook + '-option-' + option.key\"\n [attr.aria-disabled]=\"option.disabled\"\n [attr.aria-selected]=\"\n option.key === selectedValue?.key && !!selectedValue?.key\n \"\n [attr.aria-focus]=\"option.key === state?.key && !option.disabled\"\n (click)=\"updateState(option, $event)\"\n >\n <ng-template\n *ngTemplateOutlet=\"optionContentTpl; context: { $implicit: option }\"\n >\n </ng-template>\n </li>\n </ng-template>\n\n <ng-template #listGroupTemplate let-item>\n <ng-container *ngIf=\"groupLabelTpl\">\n <ng-template\n *ngTemplateOutlet=\"groupLabelTpl; context: { $implicit: item }\"\n ></ng-template>\n </ng-container>\n <ng-container *ngIf=\"!groupLabelTpl\">\n <ng-template\n *ngTemplateOutlet=\"basicGroupLabelTpl; context: { $implicit: item }\"\n ></ng-template>\n </ng-container>\n </ng-template>\n\n <ng-template #basicOptionContentTpl let-option>\n <nggv-typeahead-highlight\n *ngIf=\"!!textToHighlight\"\n [textToHighlight]=\"textToHighlight\"\n [textContent]=\"t(option.label)\"\n >\n </nggv-typeahead-highlight>\n <ng-container *ngIf=\"!textToHighlight\">\n {{ t(option.label) }}\n </ng-container>\n </ng-template>\n\n <ng-template #basicGroupLabelTpl let-item>\n <div class=\"nggv-group-label\">{{ t(item.label) }}</div>\n </ng-template>\n</ng-container>\n", styles: [":host{--gds-ref-pallet-base300: hsl(0, 0%, 87%);--gds-ref-pallet-base400: hsl(0, 0%, 81%);--gds-ref-pallet-base500: hsl(0, 0%, 68%);--sg-z-index-dropdown: ;--sg-z-index-popover: 1060;--sg-z-index-dropdown-backdrop: 990;--sg-z-index-dropdown: 2000;--sg-popover-background: #fff;--sg-popover-box-shadow: 0 .125rem .375rem rgba(0, 0, 0, .15);--text-primary-color: #333;position:absolute;bottom:0;transform:translateY(calc(100% + .5rem));z-index:var(--sg-z-index-dropdown)}:host .visually-hidden:not(:focus):not(:active){clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}:host .hidden{visibility:hidden;display:none}:host ul[role=menu] [role=menuitem]{padding:.75rem;cursor:pointer}:host ul[role=menu] [role=menuitem]:hover,:host ul[role=menu] [role=menuitem]:focus-visible{background-color:var(--gds-ref-pallet-base200)}:host ul[role=menu] [role=menuitem]:active{background-color:var(--gds-ref-pallet-base300)}:host ul[role=menu] [role=menuitem]:focus{outline-color:#000;outline-offset:-.25rem}:host ul[role=listbox]{--z-index: var(--sg-z-index-popover);background-color:var(--sg-popover-background);flex-direction:column;justify-content:flex-end;inset:auto;z-index:var(--z-index);box-shadow:var(--sg-popover-box-shadow);color:var(--text-primary-color);padding:0;max-height:500px;overflow-y:auto;width:100%;border:solid var(--sg-border-width) var(--sg-border-color);--border-color: var(--text-primary-color);--sg-border-color: var(--text-primary-color);border-radius:var(--sg-border-radius)}:host ul[role=listbox] [role=option]{padding:.75rem 1rem;line-height:1.25;cursor:pointer}:host ul[role=listbox] [role=option]:hover,:host ul[role=listbox] [role=option]:focus-visible{background-color:var(--grey-400)}:host ul[role=listbox] [role=option]:active{background-color:var(--grey-400)}:host ul[role=listbox] [role=option]:focus{outline-color:#000;outline-offset:-.25rem}:host ul[role=listbox] [role=option].active.sg-highlighted,:host ul[role=listbox] [role=option][aria-selected=true]{background:var(--grey-1000);color:#fff}:host ul[role=listbox] .group ul{list-style-type:none;padding:0}:host ul[role=listbox] .group:hover{color:inherit;background-color:inherit}:host .sg-fieldset-container{overflow-y:auto}:host .sg-fieldset-container fieldset[role=listbox][aria-multiselectable=true] [role=option]{display:flex;width:100%}:host .sg-fieldset-container fieldset[role=listbox][aria-multiselectable=true] [role=option].active.sg-highlighted input[type=checkbox]~i{border-color:#007ac7!important;box-shadow:0 0 .25em .0625em #41b0ee;outline-color:transparent;outline-style:solid}:host .gds-dropdown__options{padding-left:0;margin-bottom:0;margin-top:0;display:flex;flex-direction:column;list-style:none;display:none}:host .gds-dropdown__options>li{padding-bottom:.5rem;padding-top:.5rem;border:0;display:block;position:relative}:host .gds-dropdown__options>li:before{font-weight:500;display:inline-block;left:0;position:absolute;text-align:center}:host .gds-dropdown__options-expanded{display:block}:host .gds-dropdown__options__label:hover{background-color:var(--gds-ref-pallet-base400)}:host .gds-dropdown__options__label:focus-visible,:host .gds-dropdown__options__label[aria-focus=true]{background-color:var(--gds-ref-pallet-base300)}:host .gds-dropdown__options__label:active{background-color:var(--gds-ref-pallet-base500)}:host .gds-dropdown__options__label:focus-visible{outline-color:#000;outline-offset:-.25rem}:host .gds-dropdown__options__label[aria-hidden=true]{display:none}:host .gds-dropdown__options__label[highlighted]{color:#fff}:host li+.group{padding-top:0}:host .nggv-group-label{cursor:pointer;background-color:#e7e7e7;padding-inline:1rem;padding-block:.5rem}\n"] }]
321
+ args: [{ selector: 'nggv-dropdown-list', template: "<ng-container *transloco=\"let t; read: scope\">\n <div class=\"visually-hidden\">{{ t(state?.label) }}</div>\n <ul\n class=\"gds-dropdown__options card options gds-reset\"\n [class.gds-dropdown__options-expanded]=\"expanded\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.data-thook]=\"thook + '-options'\"\n [attr.aria-labelledby]=\"id + '-label'\"\n [attr.aria-activedescendant]=\"\n state ? id + '-option-' + state?.key : undefined\n \"\n >\n <ng-container *ngFor=\"let item of options\">\n <!-- OPTION -->\n <ng-container *ngIf=\"!isGroup(item)\">\n <ng-template\n *ngTemplateOutlet=\"listItemTemplate; context: { $implicit: item }\"\n ></ng-template>\n </ng-container>\n\n <!-- OPTION GROUP -->\n <li\n class=\"gds-dropdown__options__label group\"\n [attr.data-thook]=\"thook + '-option-group'\"\n *ngIf=\"isGroup(item)\"\n >\n <!-- group label template (default or custom) -->\n <ng-template\n *ngTemplateOutlet=\"listGroupTemplate; context: { $implicit: item }\"\n ></ng-template>\n\n <ul [attr.aria-disabled]=\"item.disabled\" class=\"gds-reset\">\n <ng-container *ngFor=\"let option of castGroup(item).options\">\n <ng-template\n *ngTemplateOutlet=\"\n listItemTemplate;\n context: { $implicit: option }\n \"\n ></ng-template>\n </ng-container>\n </ul>\n </li>\n </ng-container>\n </ul>\n\n <!-- TEMPLATE -->\n <ng-template #listItemTemplate let-option>\n <li\n #optionRefs\n *ngIf=\"!optionContentTpl\"\n tabindex=\"-1\"\n [id]=\"id + '-option-' + option.key\"\n class=\"gds-dropdown__options__label option\"\n role=\"option\"\n #liElem\n [attr.data-thook]=\"thook + '-option-' + option.key\"\n [attr.aria-disabled]=\"option.disabled\"\n [attr.aria-selected]=\"\n option.key === selectedValue?.key && !!selectedValue?.key\n \"\n [attr.aria-focus]=\"option.key === state?.key && !option.disabled\"\n [nggvTooltip]=\"isOverflow(liElem) ? t(option.label) : undefined\"\n (click)=\"updateState(option, $event)\"\n >\n <ng-template\n *ngTemplateOutlet=\"\n basicOptionContentTpl;\n context: { $implicit: option }\n \"\n >\n </ng-template>\n </li>\n <!-- Checking overflow on custom templates do not work skip adding nggvToolTip if custom template is provided -->\n <li\n #optionRefs\n *ngIf=\"!!optionContentTpl\"\n tabindex=\"-1\"\n [id]=\"id + '-option-' + option.key\"\n class=\"gds-dropdown__options__label option\"\n role=\"option\"\n #liElem\n [attr.data-thook]=\"thook + '-option-' + option.key\"\n [attr.aria-disabled]=\"option.disabled\"\n [attr.aria-selected]=\"\n option.key === selectedValue?.key && !!selectedValue?.key\n \"\n [attr.aria-focus]=\"option.key === state?.key && !option.disabled\"\n (click)=\"updateState(option, $event)\"\n >\n <ng-template\n *ngTemplateOutlet=\"optionContentTpl; context: { $implicit: option }\"\n >\n </ng-template>\n </li>\n </ng-template>\n\n <ng-template #listGroupTemplate let-item>\n <ng-container *ngIf=\"groupLabelTpl\">\n <ng-template\n *ngTemplateOutlet=\"groupLabelTpl; context: { $implicit: item }\"\n ></ng-template>\n </ng-container>\n <ng-container *ngIf=\"!groupLabelTpl\">\n <ng-template\n *ngTemplateOutlet=\"basicGroupLabelTpl; context: { $implicit: item }\"\n ></ng-template>\n </ng-container>\n </ng-template>\n\n <ng-template #basicOptionContentTpl let-option>\n <nggv-typeahead-highlight\n *ngIf=\"!!textToHighlight\"\n [textToHighlight]=\"textToHighlight\"\n [textContent]=\"t(option.label)\"\n >\n </nggv-typeahead-highlight>\n <ng-container *ngIf=\"!textToHighlight\">\n {{ t(option.label) }}\n </ng-container>\n </ng-template>\n\n <ng-template #basicGroupLabelTpl let-item>\n <div class=\"nggv-group-label\">{{ t(item.label) }}</div>\n </ng-template>\n</ng-container>\n", styles: [":host{--gds-ref-pallet-base300: hsl(0, 0%, 87%);--gds-ref-pallet-base400: hsl(0, 0%, 81%);--gds-ref-pallet-base500: hsl(0, 0%, 68%);--sg-z-index-dropdown: ;--sg-z-index-popover: 1060;--sg-z-index-dropdown-backdrop: 990;--sg-z-index-dropdown: 2000;--sg-popover-background: #fff;--sg-popover-box-shadow: 0 .125rem .375rem rgba(0, 0, 0, .15);--text-primary-color: #333;position:absolute;bottom:0;transform:translateY(calc(100% + .5rem));z-index:var(--sg-z-index-dropdown)}:host .visually-hidden:not(:focus):not(:active){clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}:host .hidden{visibility:hidden;display:none}:host ul[role=menu] [role=menuitem]{padding:.75rem;cursor:pointer}:host ul[role=menu] [role=menuitem]:hover,:host ul[role=menu] [role=menuitem]:focus-visible{background-color:var(--gds-ref-pallet-base200)}:host ul[role=menu] [role=menuitem]:active{background-color:var(--gds-ref-pallet-base300)}:host ul[role=menu] [role=menuitem]:focus{outline-color:#000;outline-offset:-.25rem}:host ul[role=listbox]{--z-index: var(--sg-z-index-popover);background-color:var(--sg-popover-background);flex-direction:column;justify-content:flex-end;inset:auto;z-index:var(--z-index);box-shadow:var(--sg-popover-box-shadow);color:var(--text-primary-color);padding:0;max-height:500px;overflow-y:auto;width:100%;border:solid var(--sg-border-width) var(--sg-border-color);--border-color: var(--text-primary-color);--sg-border-color: var(--text-primary-color);border-radius:var(--sg-border-radius)}:host ul[role=listbox] [role=option]{padding:.75rem 1rem;line-height:1.25;cursor:pointer}:host ul[role=listbox] [role=option]:hover,:host ul[role=listbox] [role=option]:focus-visible{background-color:var(--grey-400)}:host ul[role=listbox] [role=option]:active{background-color:var(--grey-400)}:host ul[role=listbox] [role=option]:focus{outline-color:#000;outline-offset:-.25rem}:host ul[role=listbox] [role=option].active.sg-highlighted,:host ul[role=listbox] [role=option][aria-selected=true]{background:var(--grey-1000);color:#fff}:host ul[role=listbox] .group ul{list-style-type:none;padding:0}:host ul[role=listbox] .group:hover{color:inherit;background-color:inherit}:host .sg-fieldset-container{overflow-y:auto}:host .sg-fieldset-container fieldset[role=listbox][aria-multiselectable=true] [role=option]{display:flex;width:100%}:host .sg-fieldset-container fieldset[role=listbox][aria-multiselectable=true] [role=option].active.sg-highlighted input[type=checkbox]~i{border-color:#007ac7!important;box-shadow:0 0 .25em .0625em #41b0ee;outline-color:transparent;outline-style:solid}:host .gds-dropdown__options{padding-left:0;margin-bottom:0;margin-top:0;display:flex;flex-direction:column;list-style:none;display:none}:host .gds-dropdown__options>li{padding-bottom:.5rem;padding-top:.5rem;border:0;display:block;position:relative}:host .gds-dropdown__options>li:before{font-weight:500;display:inline-block;left:0;position:absolute;text-align:center}:host .gds-dropdown__options-expanded{display:block}:host .gds-dropdown__options__label:hover{background-color:var(--gds-ref-pallet-base400)}:host .gds-dropdown__options__label:focus-visible,:host .gds-dropdown__options__label[aria-focus=true]{background-color:var(--gds-ref-pallet-base300)}:host .gds-dropdown__options__label:active{background-color:var(--gds-ref-pallet-base500)}:host .gds-dropdown__options__label:focus-visible{outline-color:#000;outline-offset:-.25rem}:host .gds-dropdown__options__label[aria-hidden=true]{display:none}:host .gds-dropdown__options__label[highlighted]{color:#fff}:host li+.group{padding-top:0}:host .nggv-group-label{cursor:pointer;background-color:#e7e7e7;padding-inline:1rem;padding-block:.5rem}:host[data-position=top]{top:auto;bottom:100%;transform:translateY(-.5rem)}:host[data-position=bottom]{bottom:0;transform:translateY(calc(100% + .5rem))}\n"] }]
271
322
  }], ctorParameters: () => [{ type: undefined, decorators: [{
272
323
  type: Optional
273
324
  }, {
274
325
  type: Inject,
275
326
  args: [TRANSLOCO_SCOPE]
276
- }] }], propDecorators: { expanded: [{
327
+ }] }, { type: i0.Renderer2 }, { type: i0.ElementRef }], propDecorators: { expanded: [{
277
328
  type: Input
278
329
  }], state: [{
279
330
  type: Input
@@ -296,6 +347,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
296
347
  args: ['attr.data-thook']
297
348
  }, {
298
349
  type: Input
350
+ }], positionAttr: [{
351
+ type: HostBinding,
352
+ args: ['attr.data-position']
299
353
  }], options: [{
300
354
  type: Input
301
355
  }], textToHighlight: [{
@@ -304,9 +358,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
304
358
  type: Input
305
359
  }], selectWithSpace: [{
306
360
  type: Input
361
+ }], dynamicPosition: [{
362
+ type: Input
307
363
  }], selectedValueChanged: [{
308
364
  type: Output
309
365
  }], closed: [{
310
366
  type: Output
311
367
  }] } });
312
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvc3JjL3YtYW5ndWxhci9kcm9wZG93bi9kcm9wZG93bi1saXN0L2Ryb3Bkb3duLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy92LWFuZ3VsYXIvZHJvcGRvd24vZHJvcGRvd24tbGlzdC9kcm9wZG93bi1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBSU4sWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFBO0FBQ3RCLE9BQU8sRUFBRSxlQUFlLEVBQWtCLE1BQU0sb0JBQW9CLENBQUE7QUFDcEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFnQixTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDMUUsT0FBTyxjQUFjLE1BQU0sNEJBQTRCLENBQUE7QUFFdkQsT0FBTyxFQUNMLGFBQWEsR0FHZCxNQUFNLDRDQUE0QyxDQUFBOzs7Ozs7QUFPbkQsTUFBTSxPQUFPLHlCQUF5QjtJQUNwQyxJQUFhLFFBQVEsQ0FBQyxLQUFjO1FBQ2xDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDekIsQ0FBQztJQUNELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQTtJQUN2QixDQUFDO0lBNkRELFlBR1ksY0FBOEI7UUFBOUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBN0QxQyx1RUFBdUU7UUFDOUQsaUJBQVksR0FBRyxFQUFFLENBQUE7UUFVMUIseUdBQXlHO1FBQ3hFLE9BQUUsR0FBSSxNQUFjLENBQUMsSUFB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RyxhQUFhO3NCQUFyQixLQUFLO2dCQUdzQixVQUFVO3NCQUFyQyxZQUFZO3VCQUFDLFlBQVk7Z0JBS08sRUFBRTtzQkFBbEMsV0FBVzt1QkFBQyxTQUFTOztzQkFBRyxLQUFLO2dCQUdXLEtBQUs7c0JBQTdDLFdBQVc7dUJBQUMsaUJBQWlCOztzQkFBRyxLQUFLO2dCQUc3QixPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsZUFBZTtzQkFBdkIsS0FBSztnQkFPRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBT0csZUFBZTtzQkFBdkIsS0FBSztnQkFFSSxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBRUcsTUFBTTtzQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkcmVuLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgVFJBTlNMT0NPX1NDT1BFLCBUcmFuc2xvY29TY29wZSB9IGZyb20gJ0Bqc3ZlcnNlL3RyYW5zbG9jbydcbmltcG9ydCB7IGZpbHRlciwgZnJvbUV2ZW50LCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnXG5pbXBvcnQgc2Nyb2xsSW50b1ZpZXcgZnJvbSAnc2Nyb2xsLWludG8tdmlldy1pZi1uZWVkZWQnXG5cbmltcG9ydCB7XG4gIERyb3Bkb3duVXRpbHMsXG4gIE9wdGlvbixcbiAgT3B0aW9uQmFzZSxcbn0gZnJvbSAnQHNlYmdyb3VwL2dyZWVuLWFuZ3VsYXIvc3JjL3YtYW5ndWxhci9jb3JlJ1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ2d2LWRyb3Bkb3duLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vZHJvcGRvd24tbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Ryb3Bkb3duLWxpc3QuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgTmdndkRyb3Bkb3duTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgc2V0IGV4cGFuZGVkKHN0YXRlOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRFeHBhbmRlZChzdGF0ZSlcbiAgfVxuICBnZXQgZXhwYW5kZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2V4cGFuZGVkXG4gIH1cbiAgQElucHV0KCkgc3RhdGU6IGFueVxuXG4gIC8qKiBUaGUgYWRkaXRpb25hbCBhbW91bnQgdG8gc2hvdyB3aGVuIG9wdGlvbiBpcyBzY3JvbGxlZCBpbnRvIHZpZXcuICovXG4gIEBJbnB1dCgpIHNjcm9sbE9mZnNldCA9IDI0XG5cbiAgQElucHV0KCkgb3B0aW9uQ29udGVudFRwbDogVGVtcGxhdGVSZWY8T3B0aW9uQmFzZTxhbnk+PiB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBncm91cExhYmVsVHBsOiBUZW1wbGF0ZVJlZjxPcHRpb25CYXNlPGFueT4+IHwgdW5kZWZpbmVkXG5cbiAgLyoqIEBpbnRlcm5hbCBMaXN0IG9mIHJlZmVyZW5jZXMgdG8gdGhlIG9wdGlvbiBlbGVtZW50cy4gKi9cbiAgQFZpZXdDaGlsZHJlbignb3B0aW9uUmVmcycpIG9wdGlvblJlZnM6XG4gICAgfCBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MTElFbGVtZW50Pj5cbiAgICB8IHVuZGVmaW5lZFxuXG4gIC8qKiBJZCBvZiB0aGUgaG9zdCBlbGVtZW50IGFuZCBpcyBhY2Nlc3NpYmxlIGJ5IHRoZSBjaGlsZHJlbiwgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgaWYgbm90IHByb3ZpZGVkLiAqL1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKSBASW5wdXQoKSBpZCA9ICh3aW5kb3cgYXMgYW55KS5uZ2d2Py5uZXh0SWQoKVxuXG4gIC8qKiBTcGVjaWFsIHByb3BlcnR5IHVzZWQgZm9yIHNlbGVjdGluZyBET00gZWxlbWVudHMgZHVyaW5nIGF1dG9tYXRlZCBVSSB0ZXN0aW5nLiAqL1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS10aG9vaycpIEBJbnB1dCgpIHRob29rOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID1cbiAgICAnZHJvcGRvd24nXG5cbiAgQElucHV0KCkgb3B0aW9ucyE6IGFueVtdXG5cbiAgQElucHV0KCkgdGV4dFRvSGlnaGxpZ2h0Pzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gY29udHJvbCBpZiBcInNlbGVjdGVkVmFsdWVDaGFuZ2VkXCIgb25seSBzaG91bGQgZW1pdCBkaXN0aW5jdCBjaGFuZ2VzLCBvciBlYWNoIHRpbWUgYSB2YWx1ZSBpcyBzZWxlY3RlZFxuICAgKiBXaGVuIHRydWUsIHZhbHVlIGlzIG5vdCBlbWl0dGVkIGlmIHRoZXJlJ3Mgbm8gZGlzdGluY3QgY2hhbmdlXG4gICAqIFdoZW4gZmFsc2UsIHZhbHVlIGlzIGVtaXR0ZWQgZXZlcnkgdGltZSBhbiBvcHRpb24gaXMgc2VsZWN0ZWRcbiAgICogKi9cbiAgQElucHV0KCkgb25seUVtaXREaXN0aW5jdENoYW5nZXMgPSB0cnVlXG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gY29udHJvbCBpZiB0aGUgZHJvcGRvd24gbGlzdCBzaG91bGQgc2VsZWN0IHRoZSBjdXJyZW50IGFjdGl2ZSBlbGVtZW50LCB3aGVuIFNwYWNlIGlzIHByZXNzZWQgb24gdGhlIGtleWJvYXJkLlxuICAgKiBQcmltYXJ5IHVzYWdlIGlzIGZvciB0eXBlYWhlYWQsIHdoZXJlIHRoZSBzaG91bGQgYmUgYWJsZSB0byB3cml0ZSBhIGZpbHRlciBxdWVyeSBjb250YWluaW5nIHNwYWNlcyxcbiAgICogYnV0IG5vdCBzZWxlY3QgdGhlIGN1cnJlbnQgYWN0aXZlIGVsZW1lbnQgd2l0aCBTcGFjZS5cbiAgICovXG4gIEBJbnB1dCgpIHNlbGVjdFdpdGhTcGFjZSA9IHRydWVcblxuICBAT3V0cHV0KCkgc2VsZWN0ZWRWYWx1ZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuXG4gIEBPdXRwdXQoKSBjbG9zZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KClcblxuICAvKiogVGhlIGN1cnJlbnQgYWN0aXZlIG9wdGlvbiBiYXNlZCBvbiBudW1lcmljIGluZGV4LiAqL1xuICBwdWJsaWMgYWN0aXZlSW5kZXggPSAtMVxuXG4gIHNjb3BlOiBzdHJpbmcgfCB1bmRlZmluZWRcblxuICBwcml2YXRlIGRyb3Bkb3duVXRpbHM6IERyb3Bkb3duVXRpbHM8c3RyaW5nIHwgbnVsbCwgc3RyaW5nLCBhbnk+ID1cbiAgICBuZXcgRHJvcGRvd25VdGlsczxzdHJpbmcgfCBudWxsLCBzdHJpbmcsIGFueT4oKVxuICBwcml2YXRlIF9leHBhbmRlZCA9IGZhbHNlXG4gIHByaXZhdGUgY2xvc2VkJCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KClcbiAgcHVibGljIHNlbGVjdGVkVmFsdWU/OiBPcHRpb248c3RyaW5nLCBhbnk+XG5cbiAgLyoqIFN1YnNjcmliZSBpZiBkcm9wZG93biBleHBhbmRlZCB0byBsaXN0ZW4gdG8gY2xpY2sgb3V0c2lkZSB0byBjbG9zZSBkcm9wZG93bi4gKi9cbiAgcHJvdGVjdGVkIG9uQ2xpY2tTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZFxuICAvKiogU3Vic2NyaWJlIHRvIHRvIGtleWJvYXJkIGV2ZW50cyBvbmx5IHdoZW4gbGlzdCBpcyBvcGVuLiAqL1xuICBwcml2YXRlIG9uS2V5RG93blN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkXG4gIHByaXZhdGUgb25LZXlVcFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkXG4gIHByaXZhdGUgX2ZsYXR0ZW5lZE9wdGlvbnM6IGFueVtdID0gW11cblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKVxuICAgIEBJbmplY3QoVFJBTlNMT0NPX1NDT1BFKVxuICAgIHByb3RlY3RlZCB0cmFuc2xvY29TY29wZTogVHJhbnNsb2NvU2NvcGUsXG4gICkge1xuICAgIGlmICh0aGlzLnRyYW5zbG9jb1Njb3BlKSB0aGlzLnNjb3BlID0gdGhpcy50cmFuc2xvY29TY29wZS50b1N0cmluZygpXG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0ZSlcbiAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSB0aGlzLm9wdGlvbnMuZmluZEluZGV4KFxuICAgICAgICAob3B0aW9uKSA9PiBvcHRpb24ua2V5ID09PSB0aGlzLnN0YXRlLmtleSxcbiAgICAgIClcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoISFjaGFuZ2VzLnN0YXRlICYmICFjaGFuZ2VzLnN0YXRlLmZpcnN0Q2hhbmdlKVxuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gY2hhbmdlcy5zdGF0ZS5jdXJyZW50VmFsdWVcbiAgICBpZiAoISFjaGFuZ2VzLm9wdGlvbnM/LmN1cnJlbnRWYWx1ZT8ubGVuZ3RoICYmIHRoaXMuZXhwYW5kZWQpXG4gICAgICB0aGlzLnJlZnJlc2hTZWxlY3RlZE9wdGlvbigpXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIGFyZ3VtZW50IGlzIGFuIHtAbGluayBPcHRpb25Hcm91cH0uXG4gICAqIEBwYXJhbSBvcHRpb24gdGhlIG9iamVjdCB0byBjaGVjay5cbiAgICovXG4gIGlzR3JvdXAob3B0aW9uOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gJ29wdGlvbnMnIGluIG9wdGlvblxuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICB1cGRhdGVTdGF0ZShvcHRpb246IGFueSwgZXZlbnQ6IEV2ZW50KSB7XG4gICAgaWYgKG9wdGlvbi5kaXNhYmxlZCkgcmV0dXJuXG5cbiAgICBpZiAoXG4gICAgICAhdGhpcy5vbmx5RW1pdERpc3RpbmN0Q2hhbmdlcyB8fFxuICAgICAgIXRoaXMuZHJvcGRvd25VdGlscy5kZWVwRXF1YWwodGhpcy5zZWxlY3RlZFZhbHVlLCBvcHRpb24pXG4gICAgKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBvcHRpb25cbiAgICAgIHRoaXMuc3RhdGUgPSBvcHRpb25cbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZUNoYW5nZWQuZW1pdChvcHRpb24pXG4gICAgfVxuXG4gICAgdGhpcy5zZXRFeHBhbmRlZChmYWxzZSlcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgc2V0RXhwYW5kZWQoZXhwYW5kZWQgPSB0cnVlKSB7XG4gICAgLy8gdXBkYXRlIGV4cGFuZGVkIHN0YXRlXG4gICAgdGhpcy5fZXhwYW5kZWQgPSBleHBhbmRlZFxuXG4gICAgaWYgKGV4cGFuZGVkKSB7XG4gICAgICB0aGlzLnJlZnJlc2hTZWxlY3RlZE9wdGlvbigpXG4gICAgICB0aGlzLnN1YnNjcmliZVRvS2V5VXBFdmVudHMoKVxuICAgICAgdGhpcy5zdWJzY3JpYmVUb0tleURvd25FdmVudHMoKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsb3NlZCQubmV4dCh0cnVlKVxuICAgICAgdGhpcy5vbkNsaWNrU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpXG4gICAgICB0aGlzLm9uS2V5RG93blN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKVxuICAgICAgdGhpcy5vbktleVVwU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpXG4gICAgICAvLyB0byB0cmlnZ2VyIGdjIHJlbW92YWxcbiAgICAgIHRoaXMub25LZXlEb3duU3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkXG4gICAgICB0aGlzLm9uS2V5VXBTdWJzY3JpcHRpb24gPSB1bmRlZmluZWRcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICByZWZyZXNoU2VsZWN0ZWRPcHRpb24oKSB7XG4gICAgdGhpcy5fZmxhdHRlbmVkT3B0aW9ucyA9IHRoaXMuZHJvcGRvd25VdGlscy5mbGF0dGVuT3B0aW9ucyhcbiAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgICF0aGlzLm9wdGlvbkNvbnRlbnRUcGwsXG4gICAgKVxuICAgIHRoaXMuYWN0aXZlSW5kZXggPSB0aGlzLmdldEFjdGl2ZUluZGV4KClcbiAgICB0aGlzLnN0YXRlID0gdGhpcy5fZmxhdHRlbmVkT3B0aW9uc1t0aGlzLmFjdGl2ZUluZGV4XVxuICAgIHRoaXMuc2Nyb2xsVG9SZXN1bHQodGhpcy5zdGF0ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHJldHVybnMgVGhlIGFjdGl2ZSBpbmRleCAobnVtYmVyKSBpZiBvcHRpb24gaXMgZm91bmQsIC0xIG90aGVyd2lzZS5cbiAgICogLSBJZiBhIHNlbGVjdGVkVmFsdWUgZXhpc3RzIHRoYXQncyBub3QgbnVsbGlzaCBhbmQgdGhhdCBvcHRpb25zIGlzIGZvdW5kLCByZXR1cm4gdGhhdCBpbmRleFxuICAgKiAtIEVsc2UsIHJldHVybiBmaXJzdCBub24gbnVsbGlzaCBpbmRleFxuICAgKiAtIElmIG5vbmUgb2YgdGhlIGFib3ZlIGNyaXRlcmlhcyBhcmUgbWV0LCAtMSBhcmUgcmV0dXJuZWRcbiAgICovXG4gIGdldEFjdGl2ZUluZGV4KCk6IG51bWJlciB7XG4gICAgaWYgKCEhdGhpcy5zZWxlY3RlZFZhbHVlICYmIHRoaXMuc2VsZWN0ZWRWYWx1ZT8ua2V5ICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkSW5kZXggPSB0aGlzLl9mbGF0dGVuZWRPcHRpb25zLmZpbmRJbmRleChcbiAgICAgICAgKG9wdGlvbikgPT5cbiAgICAgICAgICBvcHRpb24ua2V5ICE9IG51bGwgJiYgb3B0aW9uLmtleSA9PT0gdGhpcy5zZWxlY3RlZFZhbHVlPy5rZXksXG4gICAgICApXG4gICAgICBpZiAoc2VsZWN0ZWRJbmRleCA+IC0xKSByZXR1cm4gc2VsZWN0ZWRJbmRleFxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZmxhdHRlbmVkT3B0aW9ucy5maW5kSW5kZXgoKG9wdGlvbikgPT4gb3B0aW9uLmtleSAhPSBudWxsKVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBldmFsdWF0ZXMgd2V0aGVyIHRoZSBIVE1MIGVsZW1lbnQgb3ZlcmZsb3dzXG4gICAqIEBwYXJhbSBlbGVtIFRoZSBIVE1MRWxlbWVudCB0byBldmFsdWF0ZVxuICAgKiAqL1xuICBpc092ZXJmbG93KGVsZW06IEhUTUxFbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsZW0ub2Zmc2V0V2lkdGggPCBlbGVtLnNjcm9sbFdpZHRoXG4gIH1cblxuICAvKipcbiAgICogVHlwZWNhc3QgYW55dGhpbmcgdG8gYW4ge0BsaW5rIE9wdGlvbkdyb3VwfS5cbiAgICogQHBhcmFtIGdyb3VwIHRoZSBvYmplY3QgdG8gdHlwZWNhc3QuXG4gICAqL1xuICBjYXN0R3JvdXAoZ3JvdXA6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIGdyb3VwXG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIERpc2FibGVzIGRlZmF1bHQgZXZlbnRzLlxuICAgKiBAcGFyYW0gZXZlbnQgZmlyZWQgY29udGFpbmluZyB3aGljaCBrZXkgd2FzIHByZXNzZWQuXG4gICAqL1xuICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAvLyBJZiBzcGFjZSBpcyBwcmVzc2VkIGJ1dCBpdCBzaG91bGQgbm90IHNlbGVjdCBhbiBvcHRpb24sIGRvIG5vdGhpbmdcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnICcgJiYgIXRoaXMuc2VsZWN0V2l0aFNwYWNlKSByZXR1cm4gdHJ1ZVxuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICcgJzogLy8gU3BhY2UgLSBwbGFjZWQgaGVyZSB0byBlbnN1cmUgdGhlIGRyb3Bkb3duLWxpc3QgY2xvc2VzIGFmdGVyIHNlbGVjdGluZyB1c2luZyBcIlNwYWNlXCJcbiAgICAgIGNhc2UgJ0Fycm93VXAnOiAvLyBEaXNhYmxlIHNjcm9sbGluZyB1cFxuICAgICAgY2FzZSAnQXJyb3dEb3duJzogLy8gRGlzYWJsZSBzY3JvbGxpbmcgZG93blxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgY2FzZSAnRW50ZXInOiAvLyBEaXNhYmxlIGZvcm0gc3VibWlzc2lvbiBhbmQgc2VsZWN0IHRoZSBjdXJyZW50bHkgYWN0aXZlIHZhbHVlXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgaWYgKHRoaXMuZXhwYW5kZWQpIHtcbiAgICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLl9mbGF0dGVuZWRPcHRpb25zW3RoaXMuYWN0aXZlSW5kZXhdXG4gICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZShvcHRpb24sIGV2ZW50KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgY2FzZSAnVGFiJzogLy8gdHJpZ2dlciBkcm9wZG93biB0byBjbG9zZSAoZm9yIHR5cGVhaGVhZClcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICBpZiAodGhpcy5leHBhbmRlZCkge1xuICAgICAgICAgIHRoaXMuc2V0RXhwYW5kZWQoZmFsc2UpXG4gICAgICAgICAgdGhpcy5jbG9zZWQuZW1pdCgpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEVudGVyIHRvZ2dsZXMgdGhlIGRyb3Bkb3duLCBob21lLCBlbmQsIGFuZCwgYXJyb3dzIGNoYW5nZSB0aGUgaW5kZXguXG4gICAqIFNwYWNlIHNlbGVjdHMgdGhlIGN1cnJlbnRseSBhY3RpdmUgb3B0aW9uIGlmIGBzZWxlY3RXaXRoU3BhY2VgIGlzIHRydWUuXG4gICAqIEBwYXJhbSBldmVudCBmaXJlZCBjb250YWluaW5nIHdoaWNoIGtleSB3YXMgcmVsZWFzZWQuXG4gICAqL1xuICBvbktleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgLy8gSWYgc3BhY2UgaXMgcHJlc3NlZCBidXQgaXQgc2hvdWxkIG5vdCBzZWxlY3QgYW4gb3B0aW9uLCBkbyBub3RoaW5nXG4gICAgaWYgKCF0aGlzLmV4cGFuZGVkIHx8IChldmVudC5rZXkgPT09ICcgJyAmJiAhdGhpcy5zZWxlY3RXaXRoU3BhY2UpKSByZXR1cm5cbiAgICBsZXQgb3B0aW9uXG5cbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgdGhpcy5zZXRFeHBhbmRlZChmYWxzZSlcbiAgICAgICAgdGhpcy5jbG9zZWQuZW1pdCgpXG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgJyAnOiAvLyBTcGFjZSAtIHNlbGVjdCB0aGUgY3VycmVudGx5IGNob3NlbiB2YWx1ZVxuICAgICAgICBvcHRpb24gPSB0aGlzLl9mbGF0dGVuZWRPcHRpb25zW3RoaXMuYWN0aXZlSW5kZXhdXG4gICAgICAgIHRoaXMudXBkYXRlU3RhdGUob3B0aW9uLCBldmVudClcbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSAnSG9tZSc6IC8vIE1vdmUgdG8gdGhlIGZpcnN0IG9wdGlvblxuICAgICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gMFxuXG4gICAgICAgIG9wdGlvbiA9IHRoaXMuX2ZsYXR0ZW5lZE9wdGlvbnNbdGhpcy5hY3RpdmVJbmRleF1cbiAgICAgICAgdGhpcy5zdGF0ZSA9IG9wdGlvblxuICAgICAgICB0aGlzLnNjcm9sbFRvUmVzdWx0KG9wdGlvbiwgdHJ1ZSlcbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSAnQXJyb3dVcCc6IC8vIE1vdmUgdXAgb25lIHN0ZXAgdG8gdGhlIHByZXZpb3VzIG9wdGlvblxuICAgICAgICBpZiAodGhpcy5hY3RpdmVJbmRleCA+IDApIHRoaXMuYWN0aXZlSW5kZXgtLVxuICAgICAgICBlbHNlIGlmICh0aGlzLmFjdGl2ZUluZGV4ID09PSAwKVxuICAgICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSB0aGlzLl9mbGF0dGVuZWRPcHRpb25zLmxlbmd0aCAtIDFcblxuICAgICAgICBvcHRpb24gPSB0aGlzLl9mbGF0dGVuZWRPcHRpb25zW3RoaXMuYWN0aXZlSW5kZXhdXG4gICAgICAgIHRoaXMuc3RhdGUgPSBvcHRpb25cbiAgICAgICAgdGhpcy5zY3JvbGxUb1Jlc3VsdChvcHRpb24sIHRydWUpXG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgJ0Fycm93RG93bic6IC8vIE1vdmUgZG93biBvbmUgc3RlcCB0byB0aGUgbmV4dCBvcHRpb25cbiAgICAgICAgaWYgKHRoaXMuX2ZsYXR0ZW5lZE9wdGlvbnMubGVuZ3RoID4gdGhpcy5hY3RpdmVJbmRleCArIDEpXG4gICAgICAgICAgdGhpcy5hY3RpdmVJbmRleCsrXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuYWN0aXZlSW5kZXggPT09IHRoaXMuX2ZsYXR0ZW5lZE9wdGlvbnMubGVuZ3RoIC0gMSlcbiAgICAgICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gMFxuXG4gICAgICAgIG9wdGlvbiA9IHRoaXMuX2ZsYXR0ZW5lZE9wdGlvbnNbdGhpcy5hY3RpdmVJbmRleF1cbiAgICAgICAgdGhpcy5zdGF0ZSA9IG9wdGlvblxuICAgICAgICB0aGlzLnNjcm9sbFRvUmVzdWx0KG9wdGlvbiwgdHJ1ZSlcbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSAnRW5kJzogLy8gTW92ZSB0byB0aGUgbGFzdCBvcHRpb25zXG4gICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSB0aGlzLl9mbGF0dGVuZWRPcHRpb25zLmxlbmd0aCAtIDFcblxuICAgICAgICBvcHRpb24gPSB0aGlzLl9mbGF0dGVuZWRPcHRpb25zW3RoaXMuYWN0aXZlSW5kZXhdXG4gICAgICAgIHRoaXMuc3RhdGUgPSBvcHRpb25cbiAgICAgICAgdGhpcy5zY3JvbGxUb1Jlc3VsdChvcHRpb24sIHRydWUpXG4gICAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBzdWJzY3JpYmVUb0tleVVwRXZlbnRzKCkge1xuICAgIHRoaXMub25LZXlVcFN1YnNjcmlwdGlvbiA9IGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pihkb2N1bWVudCwgJ2tleXVwJylcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5leHBhbmRlZCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmNsb3NlZCQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHRoaXMub25LZXlVcChldmVudCkpXG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIHN1YnNjcmliZVRvS2V5RG93bkV2ZW50cygpIHtcbiAgICB0aGlzLm9uS2V5RG93blN1YnNjcmlwdGlvbiA9IGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pihkb2N1bWVudCwgJ2tleWRvd24nKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmV4cGFuZGVkKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuY2xvc2VkJCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4gdGhpcy5vbktleURvd24oZXZlbnQpKVxuICB9XG5cbiAgLyoqXG4gICAqIFNjcm9sbHMgZm9jdXNlZCByZXN1bHQgaW50byB2aWV3IHdpdGggYSBzcGVjaWZpZWQgb2Zmc2V0LlxuICAgKiBAcGFyYW0ga2V5IHRoZSByZXN1bHQgaW5kZXggd2hpY2ggdG8gc2Nyb2xsIHRvLlxuICAgKi9cbiAgc2Nyb2xsVG9SZXN1bHQob3B0aW9uOiBhbnksIGZvY3VzRWxlbWVudD86IGJvb2xlYW4pIHtcbiAgICBpZiAoIXRoaXMub3B0aW9uUmVmcyB8fCAhb3B0aW9uKSByZXR1cm5cbiAgICBjb25zdCBvcHRpb25SZWYgPSB0aGlzLm9wdGlvblJlZnMuZmluZChcbiAgICAgIChsaSkgPT4gbGkubmF0aXZlRWxlbWVudC5pZCA9PT0gdGhpcy5pZCArICctb3B0aW9uLScgKyBvcHRpb24ua2V5LFxuICAgIClcbiAgICBjb25zdCBvZmZzZXQgPSB0aGlzLnNjcm9sbE9mZnNldFxuICAgIGlmIChvcHRpb25SZWYpIHtcbiAgICAgIGxldCBkZWx0YSA9IHdpbmRvdy5zY3JvbGxZIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3BcblxuICAgICAgLy8gVGhlIGxpc3Qgc2VlbXMgbm90IHRvIGJlIHZpc2libGUgYXQgdGhlIHRpbWUgb2Ygc2Nyb2xsaW5nLCBidXQgdGhpcyBzZXRUaW1lb3V0IFwiaGFja1wiIG1ha2VzIGl0IHdvcmsuLi5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBzY3JvbGxJbnRvVmlldyhvcHRpb25SZWYubmF0aXZlRWxlbWVudCwge1xuICAgICAgICAgIHNjcm9sbE1vZGU6ICdpZi1uZWVkZWQnLFxuICAgICAgICAgIGJsb2NrOiAnbmVhcmVzdCcsXG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVsdGEgLT0gd2luZG93LnNjcm9sbFkgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcFxuICAgICAgICBpZiAoZGVsdGEpIHtcbiAgICAgICAgICB3aW5kb3cuc2Nyb2xsQnkoMCwgZGVsdGEgPiAwID8gLW9mZnNldCA6IG9mZnNldClcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9jdXNFbGVtZW50KSB7XG4gICAgICAgICAgb3B0aW9uUmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKVxuICAgICAgICB9XG4gICAgICB9LCAwKVxuICAgIH1cbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqdHJhbnNsb2NvPVwibGV0IHQ7IHJlYWQ6IHNjb3BlXCI+XG4gIDxkaXYgY2xhc3M9XCJ2aXN1YWxseS1oaWRkZW5cIj57eyB0KHN0YXRlPy5sYWJlbCkgfX08L2Rpdj5cbiAgPHVsXG4gICAgY2xhc3M9XCJnZHMtZHJvcGRvd25fX29wdGlvbnMgY2FyZCBvcHRpb25zIGdkcy1yZXNldFwiXG4gICAgW2NsYXNzLmdkcy1kcm9wZG93bl9fb3B0aW9ucy1leHBhbmRlZF09XCJleHBhbmRlZFwiXG4gICAgcm9sZT1cImxpc3Rib3hcIlxuICAgIHRhYmluZGV4PVwiLTFcIlxuICAgIFthdHRyLmRhdGEtdGhvb2tdPVwidGhvb2sgKyAnLW9wdGlvbnMnXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiaWQgKyAnLWxhYmVsJ1wiXG4gICAgW2F0dHIuYXJpYS1hY3RpdmVkZXNjZW5kYW50XT1cIlxuICAgICAgc3RhdGUgPyBpZCArICctb3B0aW9uLScgKyBzdGF0ZT8ua2V5IDogdW5kZWZpbmVkXG4gICAgXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygb3B0aW9uc1wiPlxuICAgICAgPCEtLSBPUFRJT04gLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzR3JvdXAoaXRlbSlcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsaXN0SXRlbVRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSB9XCJcbiAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBPUFRJT04gR1JPVVAgLS0+XG4gICAgICA8bGlcbiAgICAgICAgY2xhc3M9XCJnZHMtZHJvcGRvd25fX29wdGlvbnNfX2xhYmVsIGdyb3VwXCJcbiAgICAgICAgW2F0dHIuZGF0YS10aG9va109XCJ0aG9vayArICctb3B0aW9uLWdyb3VwJ1wiXG4gICAgICAgICpuZ0lmPVwiaXNHcm91cChpdGVtKVwiXG4gICAgICA+XG4gICAgICAgIDwhLS0gZ3JvdXAgbGFiZWwgdGVtcGxhdGUgKGRlZmF1bHQgb3IgY3VzdG9tKSAtLT5cbiAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsaXN0R3JvdXBUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0gfVwiXG4gICAgICAgID48L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDx1bCBbYXR0ci5hcmlhLWRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIiBjbGFzcz1cImdkcy1yZXNldFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBjYXN0R3JvdXAoaXRlbSkub3B0aW9uc1wiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgbGlzdEl0ZW1UZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogb3B0aW9uIH1cbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3VsPlxuICAgICAgPC9saT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC91bD5cblxuICA8IS0tIFRFTVBMQVRFIC0tPlxuICA8bmctdGVtcGxhdGUgI2xpc3RJdGVtVGVtcGxhdGUgbGV0LW9wdGlvbj5cbiAgICA8bGlcbiAgICAgICNvcHRpb25SZWZzXG4gICAgICAqbmdJZj1cIiFvcHRpb25Db250ZW50VHBsXCJcbiAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgW2lkXT1cImlkICsgJy1vcHRpb24tJyArIG9wdGlvbi5rZXlcIlxuICAgICAgY2xhc3M9XCJnZHMtZHJvcGRvd25fX29wdGlvbnNfX2xhYmVsIG9wdGlvblwiXG4gICAgICByb2xlPVwib3B0aW9uXCJcbiAgICAgICNsaUVsZW1cbiAgICAgIFthdHRyLmRhdGEtdGhvb2tdPVwidGhvb2sgKyAnLW9wdGlvbi0nICsgb3B0aW9uLmtleVwiXG4gICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cIm9wdGlvbi5kaXNhYmxlZFwiXG4gICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cIlxuICAgICAgICBvcHRpb24ua2V5ID09PSBzZWxlY3RlZFZhbHVlPy5rZXkgJiYgISFzZWxlY3RlZFZhbHVlPy5rZXlcbiAgICAgIFwiXG4gICAgICBbYXR0ci5hcmlhLWZvY3VzXT1cIm9wdGlvbi5rZXkgPT09IHN0YXRlPy5rZXkgJiYgIW9wdGlvbi5kaXNhYmxlZFwiXG4gICAgICBbbmdndlRvb2x0aXBdPVwiaXNPdmVyZmxvdyhsaUVsZW0pID8gdChvcHRpb24ubGFiZWwpIDogdW5kZWZpbmVkXCJcbiAgICAgIChjbGljayk9XCJ1cGRhdGVTdGF0ZShvcHRpb24sICRldmVudClcIlxuICAgID5cbiAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgIGJhc2ljT3B0aW9uQ29udGVudFRwbDtcbiAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogb3B0aW9uIH1cbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9saT5cbiAgICA8IS0tIENoZWNraW5nIG92ZXJmbG93IG9uIGN1c3RvbSB0ZW1wbGF0ZXMgZG8gbm90IHdvcmsgc2tpcCBhZGRpbmcgbmdndlRvb2xUaXAgaWYgY3VzdG9tIHRlbXBsYXRlIGlzIHByb3ZpZGVkIC0tPlxuICAgIDxsaVxuICAgICAgI29wdGlvblJlZnNcbiAgICAgICpuZ0lmPVwiISFvcHRpb25Db250ZW50VHBsXCJcbiAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgW2lkXT1cImlkICsgJy1vcHRpb24tJyArIG9wdGlvbi5rZXlcIlxuICAgICAgY2xhc3M9XCJnZHMtZHJvcGRvd25fX29wdGlvbnNfX2xhYmVsIG9wdGlvblwiXG4gICAgICByb2xlPVwib3B0aW9uXCJcbiAgICAgICNsaUVsZW1cbiAgICAgIFthdHRyLmRhdGEtdGhvb2tdPVwidGhvb2sgKyAnLW9wdGlvbi0nICsgb3B0aW9uLmtleVwiXG4gICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cIm9wdGlvbi5kaXNhYmxlZFwiXG4gICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cIlxuICAgICAgICBvcHRpb24ua2V5ID09PSBzZWxlY3RlZFZhbHVlPy5rZXkgJiYgISFzZWxlY3RlZFZhbHVlPy5rZXlcbiAgICAgIFwiXG4gICAgICBbYXR0ci5hcmlhLWZvY3VzXT1cIm9wdGlvbi5rZXkgPT09IHN0YXRlPy5rZXkgJiYgIW9wdGlvbi5kaXNhYmxlZFwiXG4gICAgICAoY2xpY2spPVwidXBkYXRlU3RhdGUob3B0aW9uLCAkZXZlbnQpXCJcbiAgICA+XG4gICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJvcHRpb25Db250ZW50VHBsOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogb3B0aW9uIH1cIlxuICAgICAgPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2xpPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZSAjbGlzdEdyb3VwVGVtcGxhdGUgbGV0LWl0ZW0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyb3VwTGFiZWxUcGxcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImdyb3VwTGFiZWxUcGw7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtIH1cIlxuICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFncm91cExhYmVsVHBsXCI+XG4gICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJiYXNpY0dyb3VwTGFiZWxUcGw7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtIH1cIlxuICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlICNiYXNpY09wdGlvbkNvbnRlbnRUcGwgbGV0LW9wdGlvbj5cbiAgICA8bmdndi10eXBlYWhlYWQtaGlnaGxpZ2h0XG4gICAgICAqbmdJZj1cIiEhdGV4dFRvSGlnaGxpZ2h0XCJcbiAgICAgIFt0ZXh0VG9IaWdobGlnaHRdPVwidGV4dFRvSGlnaGxpZ2h0XCJcbiAgICAgIFt0ZXh0Q29udGVudF09XCJ0KG9wdGlvbi5sYWJlbClcIlxuICAgID5cbiAgICA8L25nZ3YtdHlwZWFoZWFkLWhpZ2hsaWdodD5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXRleHRUb0hpZ2hsaWdodFwiPlxuICAgICAge3sgdChvcHRpb24ubGFiZWwpIH19XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlICNiYXNpY0dyb3VwTGFiZWxUcGwgbGV0LWl0ZW0+XG4gICAgPGRpdiBjbGFzcz1cIm5nZ3YtZ3JvdXAtbGFiZWxcIj57eyB0KGl0ZW0ubGFiZWwpIH19PC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
368
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvc3JjL3YtYW5ndWxhci9kcm9wZG93bi9kcm9wZG93bi1saXN0L2Ryb3Bkb3duLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy92LWFuZ3VsYXIvZHJvcGRvd24vZHJvcGRvd24tbGlzdC9kcm9wZG93bi1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUVOLFNBQVMsRUFHVCxZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUE7QUFDdEIsT0FBTyxFQUFFLGVBQWUsRUFBa0IsTUFBTSxvQkFBb0IsQ0FBQTtBQUNwRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQWdCLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUMxRSxPQUFPLGNBQWMsTUFBTSw0QkFBNEIsQ0FBQTtBQUV2RCxPQUFPLEVBQ0wsYUFBYSxHQUdkLE1BQU0sNENBQTRDLENBQUE7Ozs7OztBQU9uRCxNQUFNLE9BQU8seUJBQXlCO0lBQ3BDLElBQWEsUUFBUSxDQUFDLEtBQWM7UUFDbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUN6QixDQUFDO0lBQ0QsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFBO0lBQ3ZCLENBQUM7SUFxQkQsSUFBdUMsWUFBWTtRQUNqRCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQTtJQUM5QixDQUFDO0lBbURELFlBR1ksY0FBOEIsRUFDaEMsUUFBbUIsRUFDbkIsS0FBaUI7UUFGZixt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Q29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFJlbmRlcmVyMixcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZHJlbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IFRSQU5TTE9DT19TQ09QRSwgVHJhbnNsb2NvU2NvcGUgfSBmcm9tICdAanN2ZXJzZS90cmFuc2xvY28nXG5pbXBvcnQgeyBmaWx0ZXIsIGZyb21FdmVudCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHNjcm9sbEludG9WaWV3IGZyb20gJ3Njcm9sbC1pbnRvLXZpZXctaWYtbmVlZGVkJ1xuXG5pbXBvcnQge1xuICBEcm9wZG93blV0aWxzLFxuICBPcHRpb24sXG4gIE9wdGlvbkJhc2UsXG59IGZyb20gJ0BzZWJncm91cC9ncmVlbi1hbmd1bGFyL3NyYy92LWFuZ3VsYXIvY29yZSdcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmdndi1kcm9wZG93bi1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Ryb3Bkb3duLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kcm9wZG93bi1saXN0LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIE5nZ3ZEcm9wZG93bkxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIHNldCBleHBhbmRlZChzdGF0ZTogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0RXhwYW5kZWQoc3RhdGUpXG4gIH1cbiAgZ2V0IGV4cGFuZGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9leHBhbmRlZFxuICB9XG4gIEBJbnB1dCgpIHN0YXRlOiBhbnlcblxuICAvKiogVGhlIGFkZGl0aW9uYWwgYW1vdW50IHRvIHNob3cgd2hlbiBvcHRpb24gaXMgc2Nyb2xsZWQgaW50byB2aWV3LiAqL1xuICBASW5wdXQoKSBzY3JvbGxPZmZzZXQgPSAyNFxuXG4gIEBJbnB1dCgpIG9wdGlvbkNvbnRlbnRUcGw6IFRlbXBsYXRlUmVmPE9wdGlvbkJhc2U8YW55Pj4gfCB1bmRlZmluZWRcbiAgQElucHV0KCkgZ3JvdXBMYWJlbFRwbDogVGVtcGxhdGVSZWY8T3B0aW9uQmFzZTxhbnk+PiB8IHVuZGVmaW5lZFxuXG4gIC8qKiBAaW50ZXJuYWwgTGlzdCBvZiByZWZlcmVuY2VzIHRvIHRoZSBvcHRpb24gZWxlbWVudHMuICovXG4gIEBWaWV3Q2hpbGRyZW4oJ29wdGlvblJlZnMnKSBvcHRpb25SZWZzOlxuICAgIHwgUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTExJRWxlbWVudD4+XG4gICAgfCB1bmRlZmluZWRcblxuICAvKiogSWQgb2YgdGhlIGhvc3QgZWxlbWVudCBhbmQgaXMgYWNjZXNzaWJsZSBieSB0aGUgY2hpbGRyZW4sIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGlmIG5vdCBwcm92aWRlZC4gKi9cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJykgQElucHV0KCkgaWQgPSAod2luZG93IGFzIGFueSkubmdndj8ubmV4dElkKClcblxuICAvKiogU3BlY2lhbCBwcm9wZXJ0eSB1c2VkIGZvciBzZWxlY3RpbmcgRE9NIGVsZW1lbnRzIGR1cmluZyBhdXRvbWF0ZWQgVUkgdGVzdGluZy4gKi9cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtdGhvb2snKSBASW5wdXQoKSB0aG9vazogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA9XG4gICAgJ2Ryb3Bkb3duJ1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLXBvc2l0aW9uJykgZ2V0IHBvc2l0aW9uQXR0cigpIHtcbiAgICByZXR1cm4gdGhpcy5kcm9wZG93blBvc2l0aW9uXG4gIH1cblxuICBASW5wdXQoKSBvcHRpb25zITogYW55W11cblxuICBASW5wdXQoKSB0ZXh0VG9IaWdobGlnaHQ/OiBzdHJpbmdcblxuICAvKipcbiAgICogVXNlZCB0byBjb250cm9sIGlmIFwic2VsZWN0ZWRWYWx1ZUNoYW5nZWRcIiBvbmx5IHNob3VsZCBlbWl0IGRpc3RpbmN0IGNoYW5nZXMsIG9yIGVhY2ggdGltZSBhIHZhbHVlIGlzIHNlbGVjdGVkXG4gICAqIFdoZW4gdHJ1ZSwgdmFsdWUgaXMgbm90IGVtaXR0ZWQgaWYgdGhlcmUncyBubyBkaXN0aW5jdCBjaGFuZ2VcbiAgICogV2hlbiBmYWxzZSwgdmFsdWUgaXMgZW1pdHRlZCBldmVyeSB0aW1lIGFuIG9wdGlvbiBpcyBzZWxlY3RlZFxuICAgKiAqL1xuICBASW5wdXQoKSBvbmx5RW1pdERpc3RpbmN0Q2hhbmdlcyA9IHRydWVcblxuICAvKipcbiAgICogVXNlZCB0byBjb250cm9sIGlmIHRoZSBkcm9wZG93biBsaXN0IHNob3VsZCBzZWxlY3QgdGhlIGN1cnJlbnQgYWN0aXZlIGVsZW1lbnQsIHdoZW4gU3BhY2UgaXMgcHJlc3NlZCBvbiB0aGUga2V5Ym9hcmQuXG4gICAqIFByaW1hcnkgdXNhZ2UgaXMgZm9yIHR5cGVhaGVhZCwgd2hlcmUgdGhlIHNob3VsZCBiZSBhYmxlIHRvIHdyaXRlIGEgZmlsdGVyIHF1ZXJ5IGNvbnRhaW5pbmcgc3BhY2VzLFxuICAgKiBidXQgbm90IHNlbGVjdCB0aGUgY3VycmVudCBhY3RpdmUgZWxlbWVudCB3aXRoIFNwYWNlLlxuICAgKi9cbiAgQElucHV0KCkgc2VsZWN0V2l0aFNwYWNlID0gdHJ1ZVxuXG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIHRoZSBkcm9wZG93biB3aWxsIGF1dG9tYXRpY2FsbHkgY2hvb3NlIHRvIG9wZW4gYWJvdmUgb3IgYmVsb3cgdGhlIGlucHV0XG4gICAqIGJhc2VkIG9uIGF2YWlsYWJsZSBzcGFjZSBpbiB0aGUgdmlld3BvcnQsIGFuZCB3aWxsIHNjYWxlIGl0cyBoZWlnaHQgdG8gZml0IGlmIG5lZWRlZC5cbiAgICovXG4gIEBJbnB1dCgpIGR5bmFtaWNQb3NpdGlvbiA9IGZhbHNlXG5cbiAgQE91dHB1dCgpIHNlbGVjdGVkVmFsdWVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcblxuICBAT3V0cHV0KCkgY2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpXG5cbiAgLyoqIFRoZSBjdXJyZW50IGFjdGl2ZSBvcHRpb24gYmFzZWQgb24gbnVtZXJpYyBpbmRleC4gKi9cbiAgcHVibGljIGFjdGl2ZUluZGV4ID0gLTFcblxuICBzY29wZTogc3RyaW5nIHwgdW5kZWZpbmVkXG5cbiAgLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGRyb3Bkb3duIGxpc3Qgc2hvdWxkIGJlIGRpc3BsYXllZCBiZWxvdyAoJ2JvdHRvbScpIG9yIGFib3ZlICgndG9wJykgdGhlIGlucHV0LCBiYXNlZCBvbiBhdmFpbGFibGUgc3BhY2UuXG4gIGRyb3Bkb3duUG9zaXRpb246ICdib3R0b20nIHwgJ3RvcCcgPSAnYm90dG9tJ1xuXG4gIHByaXZhdGUgZHJvcGRvd25VdGlsczogRHJvcGRvd25VdGlsczxzdHJpbmcgfCBudWxsLCBzdHJpbmcsIGFueT4gPVxuICAgIG5ldyBEcm9wZG93blV0aWxzPHN0cmluZyB8IG51bGwsIHN0cmluZywgYW55PigpXG4gIHByaXZhdGUgX2V4cGFuZGVkID0gZmFsc2VcbiAgcHJpdmF0ZSBjbG9zZWQkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKVxuICBwdWJsaWMgc2VsZWN0ZWRWYWx1ZT86IE9wdGlvbjxzdHJpbmcsIGFueT5cblxuICAvKiogU3Vic2NyaWJlIGlmIGRyb3Bkb3duIGV4cGFuZGVkIHRvIGxpc3RlbiB0byBjbGljayBvdXRzaWRlIHRvIGNsb3NlIGRyb3Bkb3duLiAqL1xuICBwcm90ZWN0ZWQgb25DbGlja1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkXG4gIC8qKiBTdWJzY3JpYmUgdG8gdG8ga2V5Ym9hcmQgZXZlbnRzIG9ubHkgd2hlbiBsaXN0IGlzIG9wZW4uICovXG4gIHByaXZhdGUgb25LZXlEb3duU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWRcbiAgcHJpdmF0ZSBvbktleVVwU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWRcbiAgcHJpdmF0ZSBfZmxhdHRlbmVkT3B0aW9uczogYW55W10gPSBbXVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpXG4gICAgQEluamVjdChUUkFOU0xPQ09fU0NPUEUpXG4gICAgcHJvdGVjdGVkIHRyYW5zbG9jb1Njb3BlOiBUcmFuc2xvY29TY29wZSxcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBlbFJlZjogRWxlbWVudFJlZixcbiAgKSB7XG4gICAgaWYgKHRoaXMudHJhbnNsb2NvU2NvcGUpIHRoaXMuc2NvcGUgPSB0aGlzLnRyYW5zbG9jb1Njb3BlLnRvU3RyaW5nKClcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0YXRlKVxuICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IHRoaXMub3B0aW9ucy5maW5kSW5kZXgoXG4gICAgICAgIChvcHRpb24pID0+IG9wdGlvbi5rZXkgPT09IHRoaXMuc3RhdGUua2V5LFxuICAgICAgKVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICghIWNoYW5nZXMuc3RhdGUgJiYgIWNoYW5nZXMuc3RhdGUuZmlyc3RDaGFuZ2UpXG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBjaGFuZ2VzLnN0YXRlLmN1cnJlbnRWYWx1ZVxuICAgIGlmICghIWNoYW5nZXMub3B0aW9ucz8uY3VycmVudFZhbHVlPy5sZW5ndGggJiYgdGhpcy5leHBhbmRlZClcbiAgICAgIHRoaXMucmVmcmVzaFNlbGVjdGVkT3B0aW9uKClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgYXJndW1lbnQgaXMgYW4ge0BsaW5rIE9wdGlvbkdyb3VwfS5cbiAgICogQHBhcmFtIG9wdGlvbiB0aGUgb2JqZWN0IHRvIGNoZWNrLlxuICAgKi9cbiAgaXNHcm91cChvcHRpb246IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAnb3B0aW9ucycgaW4gb3B0aW9uXG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIHVwZGF0ZVN0YXRlKG9wdGlvbjogYW55LCBldmVudDogRXZlbnQpIHtcbiAgICBpZiAob3B0aW9uLmRpc2FibGVkKSByZXR1cm5cblxuICAgIGlmIChcbiAgICAgICF0aGlzLm9ubHlFbWl0RGlzdGluY3RDaGFuZ2VzIHx8XG4gICAgICAhdGhpcy5kcm9wZG93blV0aWxzLmRlZXBFcXVhbCh0aGlzLnNlbGVjdGVkVmFsdWUsIG9wdGlvbilcbiAgICApIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IG9wdGlvblxuICAgICAgdGhpcy5zdGF0ZSA9IG9wdGlvblxuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlQ2hhbmdlZC5lbWl0KG9wdGlvbilcbiAgICB9XG5cbiAgICB0aGlzLnNldEV4cGFuZGVkKGZhbHNlKVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBzZXRFeHBhbmRlZChleHBhbmRlZCA9IHRydWUpIHtcbiAgICAvLyB1cGRhdGUgZXhwYW5kZWQgc3RhdGVcbiAgICB0aGlzLl9leHBhbmRlZCA9IGV4cGFuZGVkXG5cbiAgICBpZiAoZXhwYW5kZWQpIHtcbiAgICAgIGlmICh0aGlzLmR5bmFtaWNQb3NpdGlvbikge1xuICAgICAgICB0aGlzLnNldERyb3Bkb3duUG9zaXRpb24oKVxuICAgICAgfVxuICAgICAgdGhpcy5yZWZyZXNoU2VsZWN0ZWRPcHRpb24oKVxuICAgICAgdGhpcy5zdWJzY3JpYmVUb0tleVVwRXZlbnRzKClcbiAgICAgIHRoaXMuc3Vic2NyaWJlVG9LZXlEb3duRXZlbnRzKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jbG9zZWQkLm5leHQodHJ1ZSlcbiAgICAgIHRoaXMub25DbGlja1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKVxuICAgICAgdGhpcy5vbktleURvd25TdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKClcbiAgICAgIHRoaXMub25LZXlVcFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKVxuICAgICAgLy8gdG8gdHJpZ2dlciBnYyByZW1vdmFsXG4gICAgICB0aGlzLm9uS2V5RG93blN1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZFxuICAgICAgdGhpcy5vbktleVVwU3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcmVmcmVzaFNlbGVjdGVkT3B0aW9uKCkge1xuICAgIHRoaXMuX2ZsYXR0ZW5lZE9wdGlvbnMgPSB0aGlzLmRyb3Bkb3duVXRpbHMuZmxhdHRlbk9wdGlvbnMoXG4gICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICAhdGhpcy5vcHRpb25Db250ZW50VHBsLFxuICAgIClcbiAgICB0aGlzLmFjdGl2ZUluZGV4ID0gdGhpcy5nZXRBY3RpdmVJbmRleCgpXG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMuX2ZsYXR0ZW5lZE9wdGlvbnNbdGhpcy5hY3RpdmVJbmRleF1cbiAgICB0aGlzLnNjcm9sbFRvUmVzdWx0KHRoaXMuc3RhdGUpXG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEByZXR1cm5zIFRoZSBhY3RpdmUgaW5kZXggKG51bWJlcikgaWYgb3B0aW9uIGlzIGZvdW5kLCAtMSBvdGhlcndpc2UuXG4gICAqIC0gSWYgYSBzZWxlY3RlZFZhbHVlIGV4aXN0cyB0aGF0J3Mgbm90IG51bGxpc2ggYW5kIHRoYXQgb3B0aW9ucyBpcyBmb3VuZCwgcmV0dXJuIHRoYXQgaW5kZXhcbiAgICogLSBFbHNlLCByZXR1cm4gZmlyc3Qgbm9uIG51bGxpc2ggaW5kZXhcbiAgICogLSBJZiBub25lIG9mIHRoZSBhYm92ZSBjcml0ZXJpYXMgYXJlIG1ldCwgLTEgYXJlIHJldHVybmVkXG4gICAqL1xuICBnZXRBY3RpdmVJbmRleCgpOiBudW1iZXIge1xuICAgIGlmICghIXRoaXMuc2VsZWN0ZWRWYWx1ZSAmJiB0aGlzLnNlbGVjdGVkVmFsdWU/LmtleSAhPSBudWxsKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID0gdGhpcy5fZmxhdHRlbmVkT3B0aW9ucy5maW5kSW5kZXgoXG4gICAgICAgIChvcHRpb24pID0+XG4gICAgICAgICAgb3B0aW9uLmtleSAhPSBudWxsICYmIG9wdGlvbi5rZXkgPT09IHRoaXMuc2VsZWN0ZWRWYWx1ZT8ua2V5LFxuICAgICAgKVxuICAgICAgaWYgKHNlbGVjdGVkSW5kZXggPiAtMSkgcmV0dXJuIHNlbGVjdGVkSW5kZXhcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2ZsYXR0ZW5lZE9wdGlvbnMuZmluZEluZGV4KChvcHRpb24pID0+IG9wdGlvbi5rZXkgIT0gbnVsbClcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogZXZhbHVhdGVzIHdldGhlciB0aGUgSFRNTCBlbGVtZW50IG92ZXJmbG93c1xuICAgKiBAcGFyYW0gZWxlbSBUaGUgSFRNTEVsZW1lbnQgdG8gZXZhbHVhdGVcbiAgICogKi9cbiAgaXNPdmVyZmxvdyhlbGVtOiBIVE1MRWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtLm9mZnNldFdpZHRoIDwgZWxlbS5zY3JvbGxXaWR0aFxuICB9XG5cbiAgLyoqXG4gICAqIFR5cGVjYXN0IGFueXRoaW5nIHRvIGFuIHtAbGluayBPcHRpb25Hcm91cH0uXG4gICAqIEBwYXJhbSBncm91cCB0aGUgb2JqZWN0IHRvIHR5cGVjYXN0LlxuICAgKi9cbiAgY2FzdEdyb3VwKGdyb3VwOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiBncm91cFxuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBEaXNhYmxlcyBkZWZhdWx0IGV2ZW50cy5cbiAgICogQHBhcmFtIGV2ZW50IGZpcmVkIGNvbnRhaW5pbmcgd2hpY2gga2V5IHdhcyBwcmVzc2VkLlxuICAgKi9cbiAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgLy8gSWYgc3BhY2UgaXMgcHJlc3NlZCBidXQgaXQgc2hvdWxkIG5vdCBzZWxlY3QgYW4gb3B0aW9uLCBkbyBub3RoaW5nXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJyAnICYmICF0aGlzLnNlbGVjdFdpdGhTcGFjZSkgcmV0dXJuIHRydWVcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnICc6IC8vIFNwYWNlIC0gcGxhY2VkIGhlcmUgdG8gZW5zdXJlIHRoZSBkcm9wZG93bi1saXN0IGNsb3NlcyBhZnRlciBzZWxlY3RpbmcgdXNpbmcgXCJTcGFjZVwiXG4gICAgICBjYXNlICdBcnJvd1VwJzogLy8gRGlzYWJsZSBzY3JvbGxpbmcgdXBcbiAgICAgIGNhc2UgJ0Fycm93RG93bic6IC8vIERpc2FibGUgc2Nyb2xsaW5nIGRvd25cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIGNhc2UgJ0VudGVyJzogLy8gRGlzYWJsZSBmb3JtIHN1Ym1pc3Npb24gYW5kIHNlbGVjdCB0aGUgY3VycmVudGx5IGFjdGl2ZSB2YWx1ZVxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgIGlmICh0aGlzLmV4cGFuZGVkKSB7XG4gICAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5fZmxhdHRlbmVkT3B0aW9uc1t0aGlzLmFjdGl2ZUluZGV4XVxuICAgICAgICAgIHRoaXMudXBkYXRlU3RhdGUob3B0aW9uLCBldmVudClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIGNhc2UgJ1RhYic6IC8vIHRyaWdnZXIgZHJvcGRvd24gdG8gY2xvc2UgKGZvciB0eXBlYWhlYWQpXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgaWYgKHRoaXMuZXhwYW5kZWQpIHtcbiAgICAgICAgICB0aGlzLnNldEV4cGFuZGVkKGZhbHNlKVxuICAgICAgICAgIHRoaXMuY2xvc2VkLmVtaXQoKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBFbnRlciB0b2dnbGVzIHRoZSBkcm9wZG93biwgaG9tZSwgZW5kLCBhbmQsIGFycm93cyBjaGFuZ2UgdGhlIGluZGV4LlxuICAgKiBTcGFjZSBzZWxlY3RzIHRoZSBjdXJyZW50bHkgYWN0aXZlIG9wdGlvbiBpZiBgc2VsZWN0V2l0aFNwYWNlYCBpcyB0cnVlLlxuICAgKiBAcGFyYW0gZXZlbnQgZmlyZWQgY29udGFpbmluZyB3aGljaCBrZXkgd2FzIHJlbGVhc2VkLlxuICAgKi9cbiAgb25LZXlVcChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIC8vIElmIHNwYWNlIGlzIHByZXNzZWQgYnV0IGl0IHNob3VsZCBub3Qgc2VsZWN0IGFuIG9wdGlvbiwgZG8gbm90aGluZ1xuICAgIGlmICghdGhpcy5leHBhbmRlZCB8fCAoZXZlbnQua2V5ID09PSAnICcgJiYgIXRoaXMuc2VsZWN0V2l0aFNwYWNlKSkgcmV0dXJuXG4gICAgbGV0IG9wdGlvblxuXG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICAgIHRoaXMuc2V0RXhwYW5kZWQoZmFsc2UpXG4gICAgICAgIHRoaXMuY2xvc2VkLmVtaXQoKVxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlICcgJzogLy8gU3BhY2UgLSBzZWxlY3QgdGhlIGN1cnJlbnRseSBjaG9zZW4gdmFsdWVcbiAgICAgICAgb3B0aW9uID0gdGhpcy5fZmxhdHRlbmVkT3B0aW9uc1t0aGlzLmFjdGl2ZUluZGV4XVxuICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKG9wdGlvbiwgZXZlbnQpXG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgJ0hvbWUnOiAvLyBNb3ZlIHRvIHRoZSBmaXJzdCBvcHRpb25cbiAgICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IDBcblxuICAgICAgICBvcHRpb24gPSB0aGlzLl9mbGF0dGVuZWRPcHRpb25zW3RoaXMuYWN0aXZlSW5kZXhdXG4gICAgICAgIHRoaXMuc3RhdGUgPSBvcHRpb25cbiAgICAgICAgdGhpcy5zY3JvbGxUb1Jlc3VsdChvcHRpb24sIHRydWUpXG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgJ0Fycm93VXAnOiAvLyBNb3ZlIHVwIG9uZSBzdGVwIHRvIHRoZSBwcmV2aW91cyBvcHRpb25cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlSW5kZXggPiAwKSB0aGlzLmFjdGl2ZUluZGV4LS1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5hY3RpdmVJbmRleCA9PT0gMClcbiAgICAgICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gdGhpcy5fZmxhdHRlbmVkT3B0aW9ucy5sZW5ndGggLSAxXG5cbiAgICAgICAgb3B0aW9uID0gdGhpcy5fZmxhdHRlbmVkT3B0aW9uc1t0aGlzLmFjdGl2ZUluZGV4XVxuICAgICAgICB0aGlzLnN0YXRlID0gb3B0aW9uXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9SZXN1bHQob3B0aW9uLCB0cnVlKVxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlICdBcnJvd0Rvd24nOiAvLyBNb3ZlIGRvd24gb25lIHN0ZXAgdG8gdGhlIG5leHQgb3B0aW9uXG4gICAgICAgIGlmICh0aGlzLl9mbGF0dGVuZWRPcHRpb25zLmxlbmd0aCA+IHRoaXMuYWN0aXZlSW5kZXggKyAxKVxuICAgICAgICAgIHRoaXMuYWN0aXZlSW5kZXgrK1xuICAgICAgICBlbHNlIGlmICh0aGlzLmFjdGl2ZUluZGV4ID09PSB0aGlzLl9mbGF0dGVuZWRPcHRpb25zLmxlbmd0aCAtIDEpXG4gICAgICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IDBcblxuICAgICAgICBvcHRpb24gPSB0aGlzLl9mbGF0dGVuZWRPcHRpb25zW3RoaXMuYWN0aXZlSW5kZXhdXG4gICAgICAgIHRoaXMuc3RhdGUgPSBvcHRpb25cbiAgICAgICAgdGhpcy5zY3JvbGxUb1Jlc3VsdChvcHRpb24sIHRydWUpXG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgJ0VuZCc6IC8vIE1vdmUgdG8gdGhlIGxhc3Qgb3B0aW9uc1xuICAgICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gdGhpcy5fZmxhdHRlbmVkT3B0aW9ucy5sZW5ndGggLSAxXG5cbiAgICAgICAgb3B0aW9uID0gdGhpcy5fZmxhdHRlbmVkT3B0aW9uc1t0aGlzLmFjdGl2ZUluZGV4XVxuICAgICAgICB0aGlzLnN0YXRlID0gb3B0aW9uXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9SZXN1bHQob3B0aW9uLCB0cnVlKVxuICAgICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgc3Vic2NyaWJlVG9LZXlVcEV2ZW50cygpIHtcbiAgICB0aGlzLm9uS2V5VXBTdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQ8S2V5Ym9hcmRFdmVudD4oZG9jdW1lbnQsICdrZXl1cCcpXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuZXhwYW5kZWQpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5jbG9zZWQkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB0aGlzLm9uS2V5VXAoZXZlbnQpKVxuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBzdWJzY3JpYmVUb0tleURvd25FdmVudHMoKSB7XG4gICAgdGhpcy5vbktleURvd25TdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQ8S2V5Ym9hcmRFdmVudD4oZG9jdW1lbnQsICdrZXlkb3duJylcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5leHBhbmRlZCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmNsb3NlZCQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHRoaXMub25LZXlEb3duKGV2ZW50KSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTY3JvbGxzIGZvY3VzZWQgcmVzdWx0IGludG8gdmlldyB3aXRoIGEgc3BlY2lmaWVkIG9mZnNldC5cbiAgICogQHBhcmFtIGtleSB0aGUgcmVzdWx0IGluZGV4IHdoaWNoIHRvIHNjcm9sbCB0by5cbiAgICovXG4gIHNjcm9sbFRvUmVzdWx0KG9wdGlvbjogYW55LCBmb2N1c0VsZW1lbnQ/OiBib29sZWFuKSB7XG4gICAgaWYgKCF0aGlzLm9wdGlvblJlZnMgfHwgIW9wdGlvbikgcmV0dXJuXG4gICAgY29uc3Qgb3B0aW9uUmVmID0gdGhpcy5vcHRpb25SZWZzLmZpbmQoXG4gICAgICAobGkpID0+IGxpLm5hdGl2ZUVsZW1lbnQuaWQgPT09IHRoaXMuaWQgKyAnLW9wdGlvbi0nICsgb3B0aW9uLmtleSxcbiAgICApXG4gICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy5zY3JvbGxPZmZzZXRcbiAgICBpZiAob3B0aW9uUmVmKSB7XG4gICAgICBsZXQgZGVsdGEgPSB3aW5kb3cuc2Nyb2xsWSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wXG5cbiAgICAgIC8vIFRoZSBsaXN0IHNlZW1zIG5vdCB0byBiZSB2aXNpYmxlIGF0IHRoZSB0aW1lIG9mIHNjcm9sbGluZywgYnV0IHRoaXMgc2V0VGltZW91dCBcImhhY2tcIiBtYWtlcyBpdCB3b3JrLi4uXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgc2Nyb2xsSW50b1ZpZXcob3B0aW9uUmVmLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgICAgICBzY3JvbGxNb2RlOiAnaWYtbmVlZGVkJyxcbiAgICAgICAgICBibG9jazogJ25lYXJlc3QnLFxuICAgICAgICB9KVxuXG4gICAgICAgIGRlbHRhIC09IHdpbmRvdy5zY3JvbGxZIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3BcbiAgICAgICAgaWYgKGRlbHRhKSB7XG4gICAgICAgICAgd2luZG93LnNjcm9sbEJ5KDAsIGRlbHRhID4gMCA/IC1vZmZzZXQgOiBvZmZzZXQpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvY3VzRWxlbWVudCkge1xuICAgICAgICAgIG9wdGlvblJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKClcbiAgICAgICAgfVxuICAgICAgfSwgMClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyBhdmFpbGFibGUgc3BhY2UgYWJvdmUgYW5kIGJlbG93IHRoZSBkcm9wZG93biBpbnB1dCxcbiAgICogc2V0cyBkcm9wZG93blBvc2l0aW9uICgndG9wJyBvciAnYm90dG9tJykgYWNjb3JkaW5nbHksXG4gICAqIGFuZCBkeW5hbWljYWxseSBzZXRzIHRoZSBtYXgtaGVpZ2h0IG9mIHRoZSBkcm9wZG93biBsaXN0IHRvIGZpdCB0aGUgdmlld3BvcnQuXG4gICAqL1xuICBzZXREcm9wZG93blBvc2l0aW9uKCkge1xuICAgIGNvbnN0IGRyb3Bkb3duID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50XG4gICAgLy8gZHJvcGRvd24gdHJpZ2dlclxuICAgIGNvbnN0IGRyb3Bkb3duSW5wdXQgPSBkcm9wZG93bi5wYXJlbnRFbGVtZW50XG4gICAgY29uc3QgZHJvcGRvd25MaXN0ID0gZHJvcGRvd24ucXVlcnlTZWxlY3RvcigndWxbcm9sZT1cImxpc3Rib3hcIl0nKVxuICAgIGNvbnN0IHJlY3QgPSBkcm9wZG93bklucHV0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG5cbiAgICBjb25zdCB2aWV3cG9ydEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodFxuICAgIGNvbnN0IHNwYWNlQmVsb3cgPSB2aWV3cG9ydEhlaWdodCAtIHJlY3QuYm90dG9tXG4gICAgY29uc3Qgc3BhY2VBYm92ZSA9IHJlY3QudG9wXG5cbiAgICBjb25zdCBNQVJHSU4gPSAxMFxuICAgIGNvbnN0IE1JTl9IRUlHSFQgPSAxMDBcbiAgICBjb25zdCBEUk9QRE9XTl9NQVhfSEVJR0hUID0gNTAwXG4gICAgbGV0IG1heERyb3Bkb3duSGVpZ2h0XG5cbiAgICBpZiAoc3BhY2VCZWxvdyA+PSBEUk9QRE9XTl9NQVhfSEVJR0hUKSB7XG4gICAgICB0aGlzLmRyb3Bkb3duUG9zaXRpb24gPSAnYm90dG9tJ1xuICAgICAgbWF4RHJvcGRvd25IZWlnaHQgPSBEUk9QRE9XTl9NQVhfSEVJR0hUXG4gICAgfSBlbHNlIGlmIChzcGFjZUFib3ZlID49IERST1BET1dOX01BWF9IRUlHSFQpIHtcbiAgICAgIHRoaXMuZHJvcGRvd25Qb3NpdGlvbiA9ICd0b3AnXG4gICAgICBtYXhEcm9wZG93bkhlaWdodCA9IERST1BET1dOX01BWF9IRUlHSFRcbiAgICB9IGVsc2UgaWYgKHNwYWNlQmVsb3cgPiBzcGFjZUFib3ZlKSB7XG4gICAgICB0aGlzLmRyb3Bkb3duUG9zaXRpb24gPSAnYm90dG9tJ1xuICAgICAgbWF4RHJvcGRvd25IZWlnaHQgPSBNYXRoLm1heChzcGFjZUJlbG93IC0gTUFSR0lOLCBNSU5fSEVJR0hUKSAvLyAxMHB4IG1hcmdpbiwgbWluaW11bSBoZWlnaHQgMTAwcHhcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kcm9wZG93blBvc2l0aW9uID0gJ3RvcCdcbiAgICAgIG1heERyb3Bkb3duSGVpZ2h0ID0gTWF0aC5tYXgoc3BhY2VBYm92ZSAtIE1BUkdJTiwgTUlOX0hFSUdIVCkgLy8gMTBweCBtYXJnaW4sIG1pbmltdW0gaGVpZ2h0IDEwMHB4XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShkcm9wZG93bkxpc3QsICdtYXgtaGVpZ2h0JywgYCR7bWF4RHJvcGRvd25IZWlnaHR9cHhgKVxuICB9XG59XG4iLCI8bmctY29udGFpbmVyICp0cmFuc2xvY289XCJsZXQgdDsgcmVhZDogc2NvcGVcIj5cbiAgPGRpdiBjbGFzcz1cInZpc3VhbGx5LWhpZGRlblwiPnt7IHQoc3RhdGU/LmxhYmVsKSB9fTwvZGl2PlxuICA8dWxcbiAgICBjbGFzcz1cImdkcy1kcm9wZG93bl9fb3B0aW9ucyBjYXJkIG9wdGlvbnMgZ2RzLXJlc2V0XCJcbiAgICBbY2xhc3MuZ2RzLWRyb3Bkb3duX19vcHRpb25zLWV4cGFuZGVkXT1cImV4cGFuZGVkXCJcbiAgICByb2xlPVwibGlzdGJveFwiXG4gICAgdGFiaW5kZXg9XCItMVwiXG4gICAgW2F0dHIuZGF0YS10aG9va109XCJ0aG9vayArICctb3B0aW9ucydcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJpZCArICctbGFiZWwnXCJcbiAgICBbYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnRdPVwiXG4gICAgICBzdGF0ZSA/IGlkICsgJy1vcHRpb24tJyArIHN0YXRlPy5rZXkgOiB1bmRlZmluZWRcbiAgICBcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBvcHRpb25zXCI+XG4gICAgICA8IS0tIE9QVElPTiAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNHcm91cChpdGVtKVwiPlxuICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImxpc3RJdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtIH1cIlxuICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIE9QVElPTiBHUk9VUCAtLT5cbiAgICAgIDxsaVxuICAgICAgICBjbGFzcz1cImdkcy1kcm9wZG93bl9fb3B0aW9uc19fbGFiZWwgZ3JvdXBcIlxuICAgICAgICBbYXR0ci5kYXRhLXRob29rXT1cInRob29rICsgJy1vcHRpb24tZ3JvdXAnXCJcbiAgICAgICAgKm5nSWY9XCJpc0dyb3VwKGl0ZW0pXCJcbiAgICAgID5cbiAgICAgICAgPCEtLSBncm91cCBsYWJlbCB0ZW1wbGF0ZSAoZGVmYXVsdCBvciBjdXN0b20pIC0tPlxuICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImxpc3RHcm91cFRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSB9XCJcbiAgICAgICAgPjwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPHVsIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiIGNsYXNzPVwiZ2RzLXJlc2V0XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGNhc3RHcm91cChpdGVtKS5vcHRpb25zXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICBsaXN0SXRlbVRlbXBsYXRlO1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBvcHRpb24gfVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2xpPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L3VsPlxuXG4gIDwhLS0gVEVNUExBVEUgLS0+XG4gIDxuZy10ZW1wbGF0ZSAjbGlzdEl0ZW1UZW1wbGF0ZSBsZXQtb3B0aW9uPlxuICAgIDxsaVxuICAgICAgI29wdGlvblJlZnNcbiAgICAgICpuZ0lmPVwiIW9wdGlvbkNvbnRlbnRUcGxcIlxuICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICBbaWRdPVwiaWQgKyAnLW9wdGlvbi0nICsgb3B0aW9uLmtleVwiXG4gICAgICBjbGFzcz1cImdkcy1kcm9wZG93bl9fb3B0aW9uc19fbGFiZWwgb3B0aW9uXCJcbiAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgI2xpRWxlbVxuICAgICAgW2F0dHIuZGF0YS10aG9va109XCJ0aG9vayArICctb3B0aW9uLScgKyBvcHRpb24ua2V5XCJcbiAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwib3B0aW9uLmRpc2FibGVkXCJcbiAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiXG4gICAgICAgIG9wdGlvbi5rZXkgPT09IHNlbGVjdGVkVmFsdWU/LmtleSAmJiAhIXNlbGVjdGVkVmFsdWU/LmtleVxuICAgICAgXCJcbiAgICAgIFthdHRyLmFyaWEtZm9jdXNdPVwib3B0aW9uLmtleSA9PT0gc3RhdGU/LmtleSAmJiAhb3B0aW9uLmRpc2FibGVkXCJcbiAgICAgIFtuZ2d2VG9vbHRpcF09XCJpc092ZXJmbG93KGxpRWxlbSkgPyB0KG9wdGlvbi5sYWJlbCkgOiB1bmRlZmluZWRcIlxuICAgICAgKGNsaWNrKT1cInVwZGF0ZVN0YXRlKG9wdGlvbiwgJGV2ZW50KVwiXG4gICAgPlxuICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgYmFzaWNPcHRpb25Db250ZW50VHBsO1xuICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBvcHRpb24gfVxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2xpPlxuICAgIDwhLS0gQ2hlY2tpbmcgb3ZlcmZsb3cgb24gY3VzdG9tIHRlbXBsYXRlcyBkbyBub3Qgd29yayBza2lwIGFkZGluZyBuZ2d2VG9vbFRpcCBpZiBjdXN0b20gdGVtcGxhdGUgaXMgcHJvdmlkZWQgLS0+XG4gICAgPGxpXG4gICAgICAjb3B0aW9uUmVmc1xuICAgICAgKm5nSWY9XCIhIW9wdGlvbkNvbnRlbnRUcGxcIlxuICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICBbaWRdPVwiaWQgKyAnLW9wdGlvbi0nICsgb3B0aW9uLmtleVwiXG4gICAgICBjbGFzcz1cImdkcy1kcm9wZG93bl9fb3B0aW9uc19fbGFiZWwgb3B0aW9uXCJcbiAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgI2xpRWxlbVxuICAgICAgW2F0dHIuZGF0YS10aG9va109XCJ0aG9vayArICctb3B0aW9uLScgKyBvcHRpb24ua2V5XCJcbiAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwib3B0aW9uLmRpc2FibGVkXCJcbiAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiXG4gICAgICAgIG9wdGlvbi5rZXkgPT09IHNlbGVjdGVkVmFsdWU/LmtleSAmJiAhIXNlbGVjdGVkVmFsdWU/LmtleVxuICAgICAgXCJcbiAgICAgIFthdHRyLmFyaWEtZm9jdXNdPVwib3B0aW9uLmtleSA9PT0gc3RhdGU/LmtleSAmJiAhb3B0aW9uLmRpc2FibGVkXCJcbiAgICAgIChjbGljayk9XCJ1cGRhdGVTdGF0ZShvcHRpb24sICRldmVudClcIlxuICAgID5cbiAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIm9wdGlvbkNvbnRlbnRUcGw7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBvcHRpb24gfVwiXG4gICAgICA+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbGk+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlICNsaXN0R3JvdXBUZW1wbGF0ZSBsZXQtaXRlbT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3JvdXBMYWJlbFRwbFwiPlxuICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ3JvdXBMYWJlbFRwbDsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0gfVwiXG4gICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWdyb3VwTGFiZWxUcGxcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImJhc2ljR3JvdXBMYWJlbFRwbDsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0gfVwiXG4gICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8bmctdGVtcGxhdGUgI2Jhc2ljT3B0aW9uQ29udGVudFRwbCBsZXQtb3B0aW9uPlxuICAgIDxuZ2d2LXR5cGVhaGVhZC1oaWdobGlnaHRcbiAgICAgICpuZ0lmPVwiISF0ZXh0VG9IaWdobGlnaHRcIlxuICAgICAgW3RleHRUb0hpZ2hsaWdodF09XCJ0ZXh0VG9IaWdobGlnaHRcIlxuICAgICAgW3RleHRDb250ZW50XT1cInQob3B0aW9uLmxhYmVsKVwiXG4gICAgPlxuICAgIDwvbmdndi10eXBlYWhlYWQtaGlnaGxpZ2h0PlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdGV4dFRvSGlnaGxpZ2h0XCI+XG4gICAgICB7eyB0KG9wdGlvbi5sYWJlbCkgfX1cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8bmctdGVtcGxhdGUgI2Jhc2ljR3JvdXBMYWJlbFRwbCBsZXQtaXRlbT5cbiAgICA8ZGl2IGNsYXNzPVwibmdndi1ncm91cC1sYWJlbFwiPnt7IHQoaXRlbS5sYWJlbCkgfX08L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvbmctY29udGFpbmVyPlxuIl19