@valtimo/components 10.3.0 → 10.4.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.
- package/assets/css/carbon.scss +21 -5
- package/esm2020/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.component.mjs +1 -1
- package/esm2020/lib/components/menu/menu.service.mjs +5 -3
- package/esm2020/lib/components/search-fields/search-fields.component.mjs +1 -1
- package/esm2020/lib/services/shell.service.mjs +9 -3
- package/fesm2015/valtimo-components.mjs +14 -6
- package/fesm2015/valtimo-components.mjs.map +1 -1
- package/fesm2020/valtimo-components.mjs +14 -6
- package/fesm2020/valtimo-components.mjs.map +1 -1
- package/lib/components/menu/menu.service.d.ts.map +1 -1
- package/lib/services/shell.service.d.ts.map +1 -1
- package/package.json +1 -1
package/assets/css/carbon.scss
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
$ritense-blue-100: #002547;
|
|
2
|
+
$ritense-blue-90: #002c54;
|
|
1
3
|
$ritense-blue-80: #003361;
|
|
2
4
|
$ritense-blue-70: #224f76;
|
|
3
5
|
$ritense-blue-60: #456a8c;
|
|
4
|
-
$ritense-blue-50: #
|
|
6
|
+
$ritense-blue-50: #6786a1;
|
|
5
7
|
$ritense-blue-40: #8aa1b6;
|
|
6
8
|
$ritense-blue-30: #acbdcc;
|
|
7
9
|
$ritense-blue-20: #cfd8e1;
|
|
@@ -18,8 +20,6 @@ $ritense-blue-10: #f1f4f6;
|
|
|
18
20
|
// Blue 80
|
|
19
21
|
active-primary: $ritense-blue-80,
|
|
20
22
|
active-tertiary: $ritense-blue-80,
|
|
21
|
-
button-primary-active: $ritense-blue-80,
|
|
22
|
-
button-tertiary-active: $ritense-blue-80,
|
|
23
23
|
// Blue 70
|
|
24
24
|
link-02: $ritense-blue-70,
|
|
25
25
|
support-04: $ritense-blue-70,
|
|
@@ -37,8 +37,6 @@ $ritense-blue-10: #f1f4f6;
|
|
|
37
37
|
interactive: $ritense-blue-60,
|
|
38
38
|
border-interactive: $ritense-blue-60,
|
|
39
39
|
link-primary: $ritense-blue-60,
|
|
40
|
-
button-primary: $ritense-blue-60,
|
|
41
|
-
button-tertiary: $ritense-blue-60,
|
|
42
40
|
brand-01: $ritense-blue-60,
|
|
43
41
|
brand-03: $ritense-blue-60,
|
|
44
42
|
// Blue 50
|
|
@@ -53,6 +51,24 @@ $ritense-blue-10: #f1f4f6;
|
|
|
53
51
|
)
|
|
54
52
|
);
|
|
55
53
|
|
|
54
|
+
@use '@carbon/styles/scss/components/button/tokens' as button-tokens with (
|
|
55
|
+
$button-primary-active: $ritense-blue-80,
|
|
56
|
+
$button-tertiary-active: $ritense-blue-80,
|
|
57
|
+
$button-primary-hover: $ritense-blue-70,
|
|
58
|
+
$button-tertiary-hover: $ritense-blue-70,
|
|
59
|
+
$button-primary: $ritense-blue-60,
|
|
60
|
+
$button-tertiary: $ritense-blue-60
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
@use '@carbon/styles/scss/components/tag/tokens' as tag-tokens with (
|
|
64
|
+
$tag-color-blue: $ritense-blue-80,
|
|
65
|
+
$tag-background-blue: $ritense-blue-20
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
@use '@carbon/styles/scss/components/notification/tokens' as notification-tokens with (
|
|
69
|
+
$notification-background-info: $ritense-blue-10
|
|
70
|
+
);
|
|
71
|
+
|
|
56
72
|
@use '@carbon/styles';
|
|
57
73
|
@use '@carbon/grid';
|
|
58
74
|
@include grid.flex-grid();
|
|
@@ -160,7 +160,7 @@ export class DocumentenApiMetadataModalComponent {
|
|
|
160
160
|
}
|
|
161
161
|
}
|
|
162
162
|
DocumentenApiMetadataModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DocumentenApiMetadataModalComponent, deps: [{ token: i1.ModalService }, { token: i2.TranslateService }, { token: i3.ActivatedRoute }, { token: i4.DocumentService }, { token: i5.KeycloakService }, { token: i6.ValtimoModalService }], target: i0.ɵɵFactoryTarget.Component });
|
|
163
|
-
DocumentenApiMetadataModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: DocumentenApiMetadataModalComponent, selector: "valtimo-documenten-api-metadata-modal", inputs: { show$: "show$", hide$: "hide$", disabled$: "disabled$", file$: "file$", documentTitle: "documentTitle", disableDocumentTitle: "disableDocumentTitle", filename: "filename", disableFilename: "disableFilename", author: "author", disableAuthor: "disableAuthor", status: "status", disableStatus: "disableStatus", language: "language", disableLanguage: "disableLanguage", documentType: "documentType", disableDocumentType: "disableDocumentType", description: "description", disableDescription: "disableDescription", confidentialityLevel: "confidentialityLevel", disableConfidentialityLevel: "disableConfidentialityLevel" }, outputs: { metadata: "metadata" }, viewQueries: [{ propertyName: "documentenApiMetadataModal", first: true, predicate: ["documentenApiMetadataModal"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<v-modal\n #documentenApiMetadataModal\n (closeEvent)=\"hide()\"\n *ngIf=\"{file: file$ | async, disabled: disabled$ | async, valid: valid$ | async} as obs\"\n>\n <div role=\"header\">\n <div class=\"edit-configuration-title\">\n <v-title [center]=\"true\" [fullWidth]=\"true\" [margin]=\"false\" type=\"h2\">{{\n 'document.fillInMetadata' | translate\n }}</v-title>\n </div>\n </div>\n <div role=\"content\">\n <ng-container *ngTemplateOutlet=\"metadataForm; context: {obs: obs}\"></ng-container>\n </div>\n <div role=\"footer\">\n <div class=\"buttons\">\n <v-button (clickEvent)=\"cancel()\" [disabled]=\"obs.disabled\" type=\"secondary\">{{\n 'document.cancel' | translate\n }}</v-button>\n <v-button\n (clickEvent)=\"save()\"\n [disabled]=\"obs.disabled || !obs.valid\"\n mdiIcon=\"upload\"\n type=\"success\"\n >{{ 'document.upload' | translate }}</v-button\n >\n </div>\n </div>\n</v-modal>\n\n<ng-template #metadataForm let-obs=\"obs\">\n <ng-container *ngIf=\"showForm$ | async\">\n <v-form\n (valueChange)=\"formValueChange($event)\"\n *ngIf=\"additionalDocumentDate$ | async as additionalDate\"\n >\n <v-input\n [defaultValue]=\"filename || obs.file?.name\"\n [disabled]=\"obs.disabled || disableFilename\"\n [fullWidth]=\"true\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.filename' | translate\"\n [tooltip]=\"'document.filenameTooltip' | translate\"\n name=\"filename\"\n >\n </v-input>\n <v-input\n [defaultValue]=\"documentTitle\"\n [disabled]=\"obs.disabled || disableDocumentTitle\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.inputTitle' | translate\"\n [tooltip]=\"'document.inputTitleTooltip' | translate\"\n [widthPx]=\"400\"\n name=\"title\"\n >\n </v-input>\n <v-input\n [defaultValue]=\"author || (userEmail$ | async)\"\n [disabled]=\"obs.disabled || disableAuthor\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.author' | translate\"\n [tooltip]=\"'document.authorTooltip' | translate\"\n [widthPx]=\"300\"\n name=\"author\"\n >\n </v-input>\n <v-select\n *ngIf=\"languageItems$ | async as languageItems\"\n [defaultSelectionId]=\"language || languageItems[0].id\"\n [disabled]=\"obs.disabled || disableLanguage\"\n [items]=\"languageItems\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.language' | translate\"\n [tooltip]=\"'document.languageTooltip' | translate\"\n [widthInPx]=\"200\"\n name=\"language\"\n ></v-select>\n <ng-container *ngIf=\"{documentTypeItems: documentTypeItems$ | async} as obs\">\n <v-select\n [defaultSelectionId]=\"documentType\"\n [disabled]=\"obs.disabled || disableDocumentType\"\n [items]=\"obs.documentTypeItems\"\n [loading]=\"!obs.documentTypeItems\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.informatieobjecttype' | translate\"\n [tooltip]=\"'document.informatieobjecttypeTooltip' | translate\"\n [widthInPx]=\"200\"\n name=\"informatieobjecttype\"\n ></v-select>\n </ng-container>\n <v-date-picker\n [defaultDateIsToday]=\"true\"\n [disabled]=\"obs.disabled\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.creationDate' | translate\"\n [tooltip]=\"'document.creationDateTooltip' | translate\"\n [widthPx]=\"100\"\n name=\"creationDate\"\n ></v-date-picker>\n <ng-container\n *ngTemplateOutlet=\"additionalDatePicker; context: {additionalDate: additionalDate}\"\n ></ng-container>\n <v-date-picker\n *ngIf=\"additionalDate === 'received'\"\n [defaultDateIsToday]=\"true\"\n [disabled]=\"obs.disabled\"\n [margin]=\"true\"\n [title]=\"'document.receiptDate' | translate\"\n [tooltip]=\"'document.receiptDateTooltip' | translate\"\n [widthPx]=\"100\"\n name=\"receiptDate\"\n ></v-date-picker>\n <v-date-picker\n *ngIf=\"additionalDate === 'sent'\"\n [defaultDateIsToday]=\"true\"\n [disabled]=\"obs.disabled\"\n [margin]=\"true\"\n [title]=\"'document.sendDate' | translate\"\n [tooltip]=\"'document.sendDateTooltip' | translate\"\n [widthPx]=\"100\"\n name=\"sendDate\"\n ></v-date-picker>\n <v-select\n [defaultSelectionId]=\"status\"\n [disabled]=\"obs.disabled || disableStatus\"\n [items]=\"statusItems$ | async\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.status' | translate\"\n [tooltip]=\"'document.statusTooltip' | translate\"\n [widthInPx]=\"200\"\n [clearSelectionSubject$]=\"clearStatusSelection$\"\n name=\"status\"\n ></v-select>\n <v-input\n [defaultValue]=\"description\"\n [disabled]=\"obs.disabled || disableDescription\"\n [fullWidth]=\"true\"\n [margin]=\"true\"\n [title]=\"'document.inputDescription' | translate\"\n [tooltip]=\"'document.inputDescriptionTooltip' | translate\"\n name=\"description\"\n >\n </v-input>\n <v-select\n [defaultSelectionId]=\"confidentialityLevel\"\n [disabled]=\"obs.disabled || disableConfidentialityLevel\"\n [items]=\"confidentialityLevelItems$ | async\"\n [margin]=\"true\"\n [title]=\"'document.confidentialityLevel' | translate\"\n [tooltip]=\"'document.confidentialityLevelTooltip' | translate\"\n [widthInPx]=\"200\"\n name=\"confidentialityLevel\"\n ></v-select>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template #additionalDatePicker let-additionalDate=\"additionalDate\">\n <v-input-label\n [title]=\"'document.additionalDate' | translate\"\n [name]=\"'additionalDate'\"\n [tooltip]=\"'document.additionalDateTooltip' | translate\"\n [required]=\"true\"\n >\n </v-input-label>\n <div class=\"col-12 col-sm-8 col-lg-6 form-check mt-1 additional-date\">\n <label\n class=\"custom-control custom-radio custom-control-inline\"\n *ngFor=\"let option of ADDITONAL_DOCUMENT_DATE_OPTIONS\"\n (click)=\"setAdditionalDate(option.value)\"\n >\n <input\n class=\"custom-control-input\"\n type=\"radio\"\n name=\"radio-inline\"\n [checked]=\"additionalDate === option.value\"\n /><span class=\"custom-control-label\">{{ option.translationKey | translate }}</span>\n </label>\n </div>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2020 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.buttons{display:flex;flex-direction:row;width:100%;justify-content:space-between}.additional-date{padding:0;width:100%;max-width:100%;margin:0;margin-block-end:var(--v-input-margin)}.additional-date .custom-control{margin-bottom:0}\n"], dependencies: [{ kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i1.ModalComponent, selector: "v-modal", inputs: ["appearingDelayMs", "maxWidthPx", "hideFooter"], outputs: ["closeEvent"] }, { kind: "component", type: i1.TitleComponent, selector: "v-title", inputs: ["type", "margin", "fullWidth", "center"] }, { kind: "component", type: i1.ButtonComponent, selector: "v-button", inputs: ["type", "mdiIcon", "disabled", "title", "titleTranslationKey"], outputs: ["clickEvent"] }, { kind: "component", type: i1.FormComponent, selector: "v-form", inputs: ["className"], outputs: ["valueChange"] }, { kind: "component", type: i1.InputComponent, selector: "v-input", inputs: ["name", "type", "title", "titleTranslationKey", "defaultValue", "widthPx", "fullWidth", "margin", "disabled", "step", "min", "maxLength", "tooltip", "required", "hideNumberSpinBox", "smallLabel", "rows", "clear$"], outputs: ["valueChange"] }, { kind: "component", type: i1.SelectComponent, selector: "v-select", inputs: ["items", "defaultSelection", "defaultSelectionId", "defaultSelectionIds", "clearable", "disabled", "multiple", "margin", "widthInPx", "notFoundText", "clearAllText", "name", "title", "titleTranslationKey", "clearSelectionSubject$", "tooltip", "required", "loading", "loadingText", "placeholder"], outputs: ["selectedChange", "clear"] }, { kind: "component", type: i1.DatePickerComponent, selector: "v-date-picker", inputs: ["name", "title", "titleTranslationKey", "widthPx", "fullWidth", "margin", "disabled", "tooltip", "required", "defaultDate", "defaultDateIsToday", "smallLabel", "clear$", "enableTime"], outputs: ["valueChange"] }, { kind: "component", type: i1.InputLabelComponent, selector: "v-input-label", inputs: ["name", "title", "titleTranslationKey", "tooltip", "required", "largeMargin", "small"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] });
|
|
163
|
+
DocumentenApiMetadataModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: DocumentenApiMetadataModalComponent, selector: "valtimo-documenten-api-metadata-modal", inputs: { show$: "show$", hide$: "hide$", disabled$: "disabled$", file$: "file$", documentTitle: "documentTitle", disableDocumentTitle: "disableDocumentTitle", filename: "filename", disableFilename: "disableFilename", author: "author", disableAuthor: "disableAuthor", status: "status", disableStatus: "disableStatus", language: "language", disableLanguage: "disableLanguage", documentType: "documentType", disableDocumentType: "disableDocumentType", description: "description", disableDescription: "disableDescription", confidentialityLevel: "confidentialityLevel", disableConfidentialityLevel: "disableConfidentialityLevel" }, outputs: { metadata: "metadata" }, viewQueries: [{ propertyName: "documentenApiMetadataModal", first: true, predicate: ["documentenApiMetadataModal"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<v-modal\n #documentenApiMetadataModal\n (closeEvent)=\"hide()\"\n *ngIf=\"{file: file$ | async, disabled: disabled$ | async, valid: valid$ | async} as obs\"\n>\n <div role=\"header\">\n <div class=\"edit-configuration-title\">\n <v-title [center]=\"true\" [fullWidth]=\"true\" [margin]=\"false\" type=\"h2\">{{\n 'document.fillInMetadata' | translate\n }}</v-title>\n </div>\n </div>\n <div role=\"content\">\n <ng-container *ngTemplateOutlet=\"metadataForm; context: {obs: obs}\"></ng-container>\n </div>\n <div role=\"footer\">\n <div class=\"buttons\">\n <v-button (clickEvent)=\"cancel()\" [disabled]=\"obs.disabled\" type=\"secondary\">{{\n 'document.cancel' | translate\n }}</v-button>\n <v-button\n (clickEvent)=\"save()\"\n [disabled]=\"obs.disabled || !obs.valid\"\n mdiIcon=\"upload\"\n type=\"success\"\n >{{ 'document.upload' | translate }}</v-button\n >\n </div>\n </div>\n</v-modal>\n\n<ng-template #metadataForm let-obs=\"obs\">\n <ng-container *ngIf=\"showForm$ | async\">\n <v-form\n (valueChange)=\"formValueChange($event)\"\n *ngIf=\"additionalDocumentDate$ | async as additionalDate\"\n >\n <v-input\n [defaultValue]=\"filename || obs.file?.name\"\n [disabled]=\"obs.disabled || disableFilename\"\n [fullWidth]=\"true\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.filename' | translate\"\n [tooltip]=\"'document.filenameTooltip' | translate\"\n name=\"filename\"\n >\n </v-input>\n <v-input\n [defaultValue]=\"documentTitle\"\n [disabled]=\"obs.disabled || disableDocumentTitle\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.inputTitle' | translate\"\n [tooltip]=\"'document.inputTitleTooltip' | translate\"\n [widthPx]=\"400\"\n name=\"title\"\n >\n </v-input>\n <v-input\n [defaultValue]=\"author || (userEmail$ | async)\"\n [disabled]=\"obs.disabled || disableAuthor\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.author' | translate\"\n [tooltip]=\"'document.authorTooltip' | translate\"\n [widthPx]=\"300\"\n name=\"author\"\n >\n </v-input>\n <v-select\n *ngIf=\"languageItems$ | async as languageItems\"\n [defaultSelectionId]=\"language || languageItems[0].id\"\n [disabled]=\"obs.disabled || disableLanguage\"\n [items]=\"languageItems\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.language' | translate\"\n [tooltip]=\"'document.languageTooltip' | translate\"\n [widthInPx]=\"200\"\n name=\"language\"\n ></v-select>\n <ng-container *ngIf=\"{documentTypeItems: documentTypeItems$ | async} as obs\">\n <v-select\n [defaultSelectionId]=\"documentType\"\n [disabled]=\"obs.disabled || disableDocumentType\"\n [items]=\"obs.documentTypeItems\"\n [loading]=\"!obs.documentTypeItems\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.informatieobjecttype' | translate\"\n [tooltip]=\"'document.informatieobjecttypeTooltip' | translate\"\n [widthInPx]=\"200\"\n name=\"informatieobjecttype\"\n ></v-select>\n </ng-container>\n <v-date-picker\n [defaultDateIsToday]=\"true\"\n [disabled]=\"obs.disabled\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.creationDate' | translate\"\n [tooltip]=\"'document.creationDateTooltip' | translate\"\n [widthPx]=\"100\"\n name=\"creationDate\"\n ></v-date-picker>\n <ng-container\n *ngTemplateOutlet=\"additionalDatePicker; context: {additionalDate: additionalDate}\"\n ></ng-container>\n <v-date-picker\n *ngIf=\"additionalDate === 'received'\"\n [defaultDateIsToday]=\"true\"\n [disabled]=\"obs.disabled\"\n [margin]=\"true\"\n [title]=\"'document.receiptDate' | translate\"\n [tooltip]=\"'document.receiptDateTooltip' | translate\"\n [widthPx]=\"100\"\n name=\"receiptDate\"\n ></v-date-picker>\n <v-date-picker\n *ngIf=\"additionalDate === 'sent'\"\n [defaultDateIsToday]=\"true\"\n [disabled]=\"obs.disabled\"\n [margin]=\"true\"\n [title]=\"'document.sendDate' | translate\"\n [tooltip]=\"'document.sendDateTooltip' | translate\"\n [widthPx]=\"100\"\n name=\"sendDate\"\n ></v-date-picker>\n <v-select\n [defaultSelectionId]=\"status\"\n [disabled]=\"obs.disabled || disableStatus\"\n [items]=\"statusItems$ | async\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.status' | translate\"\n [tooltip]=\"'document.statusTooltip' | translate\"\n [widthInPx]=\"200\"\n [clearSelectionSubject$]=\"clearStatusSelection$\"\n name=\"status\"\n ></v-select>\n <v-input\n [defaultValue]=\"description\"\n [disabled]=\"obs.disabled || disableDescription\"\n [fullWidth]=\"true\"\n [margin]=\"true\"\n [title]=\"'document.inputDescription' | translate\"\n [tooltip]=\"'document.inputDescriptionTooltip' | translate\"\n name=\"description\"\n >\n </v-input>\n <v-select\n [defaultSelectionId]=\"confidentialityLevel\"\n [disabled]=\"obs.disabled || disableConfidentialityLevel\"\n [items]=\"confidentialityLevelItems$ | async\"\n [margin]=\"true\"\n [title]=\"'document.confidentialityLevel' | translate\"\n [tooltip]=\"'document.confidentialityLevelTooltip' | translate\"\n [widthInPx]=\"200\"\n name=\"confidentialityLevel\"\n ></v-select>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template #additionalDatePicker let-additionalDate=\"additionalDate\">\n <v-input-label\n [title]=\"'document.additionalDate' | translate\"\n [name]=\"'additionalDate'\"\n [tooltip]=\"'document.additionalDateTooltip' | translate\"\n [required]=\"true\"\n >\n </v-input-label>\n <div class=\"col-12 col-sm-8 col-lg-6 form-check mt-1 additional-date\">\n <label\n class=\"custom-control custom-radio custom-control-inline\"\n *ngFor=\"let option of ADDITONAL_DOCUMENT_DATE_OPTIONS\"\n (click)=\"setAdditionalDate(option.value)\"\n >\n <input\n class=\"custom-control-input\"\n type=\"radio\"\n name=\"radio-inline\"\n [checked]=\"additionalDate === option.value\"\n /><span class=\"custom-control-label\">{{ option.translationKey | translate }}</span>\n </label>\n </div>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2020 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.buttons{display:flex;flex-direction:row;width:100%;justify-content:space-between}.additional-date{padding:0;width:100%;max-width:100%;margin:0;margin-block-end:var(--v-input-margin)}.additional-date .custom-control{margin-bottom:0}\n"], dependencies: [{ kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i1.ModalComponent, selector: "v-modal", inputs: ["appearingDelayMs", "maxWidthPx", "hideFooter"], outputs: ["closeEvent"] }, { kind: "component", type: i1.TitleComponent, selector: "v-title", inputs: ["type", "margin", "fullWidth", "center"] }, { kind: "component", type: i1.ButtonComponent, selector: "v-button", inputs: ["type", "mdiIcon", "disabled", "title", "titleTranslationKey"], outputs: ["clickEvent"] }, { kind: "component", type: i1.FormComponent, selector: "v-form", inputs: ["className"], outputs: ["valueChange"] }, { kind: "component", type: i1.InputComponent, selector: "v-input", inputs: ["name", "type", "title", "titleTranslationKey", "defaultValue", "widthPx", "fullWidth", "margin", "smallMargin", "disabled", "step", "min", "maxLength", "tooltip", "required", "hideNumberSpinBox", "smallLabel", "rows", "clear$"], outputs: ["valueChange"] }, { kind: "component", type: i1.SelectComponent, selector: "v-select", inputs: ["items", "defaultSelection", "defaultSelectionId", "defaultSelectionIds", "clearable", "disabled", "multiple", "margin", "widthInPx", "notFoundText", "clearAllText", "name", "title", "titleTranslationKey", "clearSelectionSubject$", "tooltip", "required", "loading", "loadingText", "placeholder"], outputs: ["selectedChange", "clear"] }, { kind: "component", type: i1.DatePickerComponent, selector: "v-date-picker", inputs: ["name", "title", "titleTranslationKey", "widthPx", "fullWidth", "margin", "disabled", "tooltip", "required", "defaultDate", "defaultDateIsToday", "smallLabel", "clear$", "enableTime"], outputs: ["valueChange"] }, { kind: "component", type: i1.InputLabelComponent, selector: "v-input-label", inputs: ["name", "title", "titleTranslationKey", "tooltip", "required", "largeMargin", "small"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] });
|
|
164
164
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DocumentenApiMetadataModalComponent, decorators: [{
|
|
165
165
|
type: Component,
|
|
166
166
|
args: [{ selector: 'valtimo-documenten-api-metadata-modal', template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<v-modal\n #documentenApiMetadataModal\n (closeEvent)=\"hide()\"\n *ngIf=\"{file: file$ | async, disabled: disabled$ | async, valid: valid$ | async} as obs\"\n>\n <div role=\"header\">\n <div class=\"edit-configuration-title\">\n <v-title [center]=\"true\" [fullWidth]=\"true\" [margin]=\"false\" type=\"h2\">{{\n 'document.fillInMetadata' | translate\n }}</v-title>\n </div>\n </div>\n <div role=\"content\">\n <ng-container *ngTemplateOutlet=\"metadataForm; context: {obs: obs}\"></ng-container>\n </div>\n <div role=\"footer\">\n <div class=\"buttons\">\n <v-button (clickEvent)=\"cancel()\" [disabled]=\"obs.disabled\" type=\"secondary\">{{\n 'document.cancel' | translate\n }}</v-button>\n <v-button\n (clickEvent)=\"save()\"\n [disabled]=\"obs.disabled || !obs.valid\"\n mdiIcon=\"upload\"\n type=\"success\"\n >{{ 'document.upload' | translate }}</v-button\n >\n </div>\n </div>\n</v-modal>\n\n<ng-template #metadataForm let-obs=\"obs\">\n <ng-container *ngIf=\"showForm$ | async\">\n <v-form\n (valueChange)=\"formValueChange($event)\"\n *ngIf=\"additionalDocumentDate$ | async as additionalDate\"\n >\n <v-input\n [defaultValue]=\"filename || obs.file?.name\"\n [disabled]=\"obs.disabled || disableFilename\"\n [fullWidth]=\"true\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.filename' | translate\"\n [tooltip]=\"'document.filenameTooltip' | translate\"\n name=\"filename\"\n >\n </v-input>\n <v-input\n [defaultValue]=\"documentTitle\"\n [disabled]=\"obs.disabled || disableDocumentTitle\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.inputTitle' | translate\"\n [tooltip]=\"'document.inputTitleTooltip' | translate\"\n [widthPx]=\"400\"\n name=\"title\"\n >\n </v-input>\n <v-input\n [defaultValue]=\"author || (userEmail$ | async)\"\n [disabled]=\"obs.disabled || disableAuthor\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.author' | translate\"\n [tooltip]=\"'document.authorTooltip' | translate\"\n [widthPx]=\"300\"\n name=\"author\"\n >\n </v-input>\n <v-select\n *ngIf=\"languageItems$ | async as languageItems\"\n [defaultSelectionId]=\"language || languageItems[0].id\"\n [disabled]=\"obs.disabled || disableLanguage\"\n [items]=\"languageItems\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.language' | translate\"\n [tooltip]=\"'document.languageTooltip' | translate\"\n [widthInPx]=\"200\"\n name=\"language\"\n ></v-select>\n <ng-container *ngIf=\"{documentTypeItems: documentTypeItems$ | async} as obs\">\n <v-select\n [defaultSelectionId]=\"documentType\"\n [disabled]=\"obs.disabled || disableDocumentType\"\n [items]=\"obs.documentTypeItems\"\n [loading]=\"!obs.documentTypeItems\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.informatieobjecttype' | translate\"\n [tooltip]=\"'document.informatieobjecttypeTooltip' | translate\"\n [widthInPx]=\"200\"\n name=\"informatieobjecttype\"\n ></v-select>\n </ng-container>\n <v-date-picker\n [defaultDateIsToday]=\"true\"\n [disabled]=\"obs.disabled\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.creationDate' | translate\"\n [tooltip]=\"'document.creationDateTooltip' | translate\"\n [widthPx]=\"100\"\n name=\"creationDate\"\n ></v-date-picker>\n <ng-container\n *ngTemplateOutlet=\"additionalDatePicker; context: {additionalDate: additionalDate}\"\n ></ng-container>\n <v-date-picker\n *ngIf=\"additionalDate === 'received'\"\n [defaultDateIsToday]=\"true\"\n [disabled]=\"obs.disabled\"\n [margin]=\"true\"\n [title]=\"'document.receiptDate' | translate\"\n [tooltip]=\"'document.receiptDateTooltip' | translate\"\n [widthPx]=\"100\"\n name=\"receiptDate\"\n ></v-date-picker>\n <v-date-picker\n *ngIf=\"additionalDate === 'sent'\"\n [defaultDateIsToday]=\"true\"\n [disabled]=\"obs.disabled\"\n [margin]=\"true\"\n [title]=\"'document.sendDate' | translate\"\n [tooltip]=\"'document.sendDateTooltip' | translate\"\n [widthPx]=\"100\"\n name=\"sendDate\"\n ></v-date-picker>\n <v-select\n [defaultSelectionId]=\"status\"\n [disabled]=\"obs.disabled || disableStatus\"\n [items]=\"statusItems$ | async\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.status' | translate\"\n [tooltip]=\"'document.statusTooltip' | translate\"\n [widthInPx]=\"200\"\n [clearSelectionSubject$]=\"clearStatusSelection$\"\n name=\"status\"\n ></v-select>\n <v-input\n [defaultValue]=\"description\"\n [disabled]=\"obs.disabled || disableDescription\"\n [fullWidth]=\"true\"\n [margin]=\"true\"\n [title]=\"'document.inputDescription' | translate\"\n [tooltip]=\"'document.inputDescriptionTooltip' | translate\"\n name=\"description\"\n >\n </v-input>\n <v-select\n [defaultSelectionId]=\"confidentialityLevel\"\n [disabled]=\"obs.disabled || disableConfidentialityLevel\"\n [items]=\"confidentialityLevelItems$ | async\"\n [margin]=\"true\"\n [title]=\"'document.confidentialityLevel' | translate\"\n [tooltip]=\"'document.confidentialityLevelTooltip' | translate\"\n [widthInPx]=\"200\"\n name=\"confidentialityLevel\"\n ></v-select>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template #additionalDatePicker let-additionalDate=\"additionalDate\">\n <v-input-label\n [title]=\"'document.additionalDate' | translate\"\n [name]=\"'additionalDate'\"\n [tooltip]=\"'document.additionalDateTooltip' | translate\"\n [required]=\"true\"\n >\n </v-input-label>\n <div class=\"col-12 col-sm-8 col-lg-6 form-check mt-1 additional-date\">\n <label\n class=\"custom-control custom-radio custom-control-inline\"\n *ngFor=\"let option of ADDITONAL_DOCUMENT_DATE_OPTIONS\"\n (click)=\"setAdditionalDate(option.value)\"\n >\n <input\n class=\"custom-control-input\"\n type=\"radio\"\n name=\"radio-inline\"\n [checked]=\"additionalDate === option.value\"\n /><span class=\"custom-control-label\">{{ option.translationKey | translate }}</span>\n </label>\n </div>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2020 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.buttons{display:flex;flex-direction:row;width:100%;justify-content:space-between}.additional-date{padding:0;width:100%;max-width:100%;margin:0;margin-block-end:var(--v-input-margin)}.additional-date .custom-control{margin-bottom:0}\n"] }]
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
import { Injectable } from '@angular/core';
|
|
17
|
-
import { NavigationEnd } from '@angular/router';
|
|
17
|
+
import { NavigationEnd, NavigationStart, ResolveEnd } from '@angular/router';
|
|
18
18
|
import { BehaviorSubject, combineLatest, Observable, Subject, timer } from 'rxjs';
|
|
19
19
|
import { filter, map, take } from 'rxjs/operators';
|
|
20
20
|
import * as i0 from "@angular/core";
|
|
@@ -35,7 +35,9 @@ export class MenuService {
|
|
|
35
35
|
this.keycloakService = keycloakService;
|
|
36
36
|
this.includeFunctionObservables = {};
|
|
37
37
|
this._menuItems$ = new BehaviorSubject(undefined);
|
|
38
|
-
this.currentRoute$ = this.router.events.pipe(filter(event => event instanceof NavigationEnd
|
|
38
|
+
this.currentRoute$ = this.router.events.pipe(filter(event => event instanceof NavigationEnd ||
|
|
39
|
+
event instanceof NavigationStart ||
|
|
40
|
+
event instanceof ResolveEnd), map(event => event?.url), filter(url => !!url));
|
|
39
41
|
this.dossierItemsAppended$ = new BehaviorSubject(false);
|
|
40
42
|
const config = configService?.config;
|
|
41
43
|
this.menuConfig = config?.menu;
|
|
@@ -188,4 +190,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
188
190
|
providedIn: 'root',
|
|
189
191
|
}]
|
|
190
192
|
}], ctorParameters: function () { return [{ type: i1.ConfigService }, { type: i2.DocumentService }, { type: i3.UserProviderService }, { type: i4.NGXLogger }, { type: i1.MenuIncludeService }, { type: i5.Router }, { type: i6.KeycloakService }]; } });
|
|
191
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9tZW51L21lbnUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFJekMsT0FBTyxFQUFDLGFBQWEsRUFBUyxNQUFNLGlCQUFpQixDQUFDO0FBQ3RELE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRWhGLE9BQU8sRUFBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7OztBQU1qRCxNQUFNLE9BQU8sV0FBVztJQVN0QixZQUNtQixhQUE0QixFQUM1QixlQUFnQyxFQUNoQyxtQkFBd0MsRUFDeEMsTUFBaUIsRUFDakIsa0JBQXNDLEVBQ3RDLE1BQWMsRUFDZCxlQUFnQztRQU5oQyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2pCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQWY1QywrQkFBMEIsR0FBeUMsRUFBRSxDQUFDO1FBRXJFLGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQWEsU0FBUyxDQUFDLENBQUM7UUEwQmhELGtCQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUN0RCxNQUFNLENBQUMsS0FBSyxDQUFD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Q0FBQztnQkFDM0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFDN0IsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQWtCLEVBQUUsRUFBRTtvQkFDdkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztvQkFDN0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMseUJBQXlCLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDckUsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTt3QkFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMscUJBQXFCLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO3dCQUMzRCxRQUFRLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztxQkFDeEI7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDSjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVPLG1CQUFtQixDQUFDLFFBQWtCLEVBQUUsS0FBZTtRQUM3RCxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM5RSxDQUFDOzt5R0E1TVUsV0FBVzs2R0FBWCxXQUFXLGNBRlYsTUFBTTs0RkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDIwIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbmZpZ1NlcnZpY2UsIE1lbnVDb25maWcsIE1lbnVJbmNsdWRlU2VydmljZSwgTWVudUl0ZW19IGZyb20gJ0B2YWx0aW1vL2NvbmZpZyc7XG5pbXBvcnQge05HWExvZ2dlcn0gZnJvbSAnbmd4LWxvZ2dlcic7XG5pbXBvcnQge1VzZXJQcm92aWRlclNlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL3NlY3VyaXR5JztcbmltcG9ydCB7TmF2aWdhdGlvbkVuZCwgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIFN1YmplY3QsIHRpbWVyfSBmcm9tICdyeGpzJztcbmltcG9ydCB7RG9jdW1lbnREZWZpbml0aW9ucywgRG9jdW1lbnRTZXJ2aWNlfSBmcm9tICdAdmFsdGltby9kb2N1bWVudCc7XG5pbXBvcnQge2ZpbHRlciwgbWFwLCB0YWtlfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0tleWNsb2FrU2VydmljZX0gZnJvbSAna2V5Y2xvYWstYW5ndWxhcic7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBNZW51U2VydmljZSB7XG4gIHB1YmxpYyBpbmNsdWRlRnVuY3Rpb25PYnNlcnZhYmxlczoge1trZXk6IHN0cmluZ106IE9ic2VydmFibGU8Ym9vbGVhbj59ID0ge307XG5cbiAgcHJpdmF0ZSBfbWVudUl0ZW1zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWVudUl0ZW1bXT4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBtZW51Q29uZmlnOiBNZW51Q29uZmlnO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGlzYWJsZUNhc2VDb3VudCE6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgZW5hYmxlT2JqZWN0TWFuYWdlbWVudCE6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnRTZXJ2aWNlOiBEb2N1bWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB1c2VyUHJvdmlkZXJTZXJ2aWNlOiBVc2VyUHJvdmlkZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyOiBOR1hMb2dnZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBtZW51SW5jbHVkZVNlcnZpY2U6IE1lbnVJbmNsdWRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkga2V5Y2xvYWtTZXJ2aWNlOiBLZXljbG9ha1NlcnZpY2VcbiAgKSB7XG4gICAgY29uc3QgY29uZmlnID0gY29uZmlnU2VydmljZT8uY29uZmlnO1xuICAgIHRoaXMubWVudUNvbmZpZyA9IGNvbmZpZz8ubWVudTtcbiAgICB0aGlzLmRpc2FibGVDYXNlQ291bnQgPSBjb25maWc/LmZlYXR1cmVUb2dnbGVzPy5kaXNhYmxlQ2FzZUNvdW50O1xuICAgIHRoaXMuZW5hYmxlT2JqZWN0TWFuYWdlbWVudCA9IGNvbmZpZz8uZmVhdHVyZVRvZ2dsZXM/LmVuYWJsZU9iamVjdE1hbmFnZW1lbnQ7XG4gIH1cblxuICBpbml0KCk6IHZvaWQge1xuICAgIHRoaXMucmVsb2FkKCk7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ01lbnUgaW5pdGlhbGl6ZWQnKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgY3VycmVudFJvdXRlJCA9IHRoaXMucm91dGVyLmV2ZW50cy5waXBlKFxuICAgIGZpbHRlcihldmVudCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpLFxuICAgIG1hcChldmVudCA9PiAoZXZlbnQgYXMgTmF2aWdhdGlvbkVuZCk/LnVybClcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGRvc3NpZXJJdGVtc0FwcGVuZGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIC8vIEZpbmQgb3V0IHdoaWNoIG1lbnUgaXRlbSBzZXF1ZW5jZSBudW1iZXIgbWF0Y2hlcyB0aGUgY3VycmVudCB1cmwgdGhlIGNsb3Nlc3RcbiAgcHVibGljIGdldCBjbG9zZXN0U2VxdWVuY2UkKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW3RoaXMuZG9zc2llckl0ZW1zQXBwZW5kZWQkLCB0aGlzLmN1cnJlbnRSb3V0ZSQsIHRoaXMubWVudUl0ZW1zJF0pLnBpcGUoXG4gICAgICBmaWx0ZXIoKFtkb3NzaWVySXRlbXNBcHBlbmRlZF0pID0+IGRvc3NpZXJJdGVtc0FwcGVuZGVkKSxcbiAgICAgIG1hcCgoW2Rvc3NpZXJJdGVtc0FwcGVuZGVkLCBjdXJyZW50Um91dGUsIG1lbnVJdGVtc10pID0+IHtcbiAgICAgICAgbGV0IGNsb3Nlc3RTZXF1ZW5jZSA9ICcwJztcbiAgICAgICAgbGV0IGhpZ2hlc3REaWZmZXJlbmNlID0gMDtcblxuICAgICAgICAvLyByZWN1cnNpdmUgZnVuY3Rpb24gdG8gY2hlY2sgaG93IGNsb3NlbHkgZWFjaCBpdGVtIG1hdGNoZXMgdG8gdGhlIGN1cnJlbnQgdXJsXG4gICAgICAgIGNvbnN0IGNoZWNrSXRlbU1hdGNoID0gKHN0cmluZ1VybDogc3RyaW5nLCBzZXF1ZW5jZTogc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgICAgICAgLy8gbGVuZ3RoIG9mIHRoZSBjdXJyZW50IGZ1bGwgdXJsXG4gICAgICAgICAgY29uc3QgY3VycmVudFJvdXRlVXJsTGVuZ3RoID0gY3VycmVudFJvdXRlLmxlbmd0aDtcbiAgICAgICAgICAvLyBsZW5ndGggb2YgdGhlIGN1cnJlbnQgZnVsbCB1cmwgd2l0aCB0aGUgaXRlbSdzIHVybCBzdWJzdHJhY3RlZFxuICAgICAgICAgIGNvbnN0IGN1cnJlbnRSb3V0ZVN1YnN0cmFjdExlbmd0aCA9IGN1cnJlbnRSb3V0ZS5yZXBsYWNlKHN0cmluZ1VybCwgJycpLmxlbmd0aDtcbiAgICAgICAgICAvLyB0aGUgYW1vdW50IG9mIGNoYXJhY3RlcnMgdGhhdCBjb3VsZCBiZSBzdWJzdHJhY3RlZFxuICAgICAgICAgIGNvbnN0IGRpZmZlcmVuY2UgPSBjdXJyZW50Um91dGVVcmxMZW5ndGggLSBjdXJyZW50Um91dGVTdWJzdHJhY3RMZW5ndGg7XG5cbiAgICAgICAgICAvLyB0aGUgbGFyZ2VyIHRoZSBhbW91bnQgb2YgY2hhcmFjdGVycyB0aGF0IGNvdWxkIGJlIHN1YnN0cmFjdGVkLCB0aGUgbW9yZSBjbG9zZWx5IHRoZSBtZW51IGl0ZW0gdXJsIG1hdGNoZXMgdGhlIGN1cnJlbnQgdXJsXG4gICAgICAgICAgaWYgKGRpZmZlcmVuY2UgPiBoaWdoZXN0RGlmZmVyZW5jZSkge1xuICAgICAgICAgICAgaGlnaGVzdERpZmZlcmVuY2UgPSBkaWZmZXJlbmNlO1xuICAgICAgICAgICAgY2xvc2VzdFNlcXVlbmNlID0gc2VxdWVuY2U7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGNoZWNrIGhvdyBjbG9zZWx5IGVhY2ggbWVudSBpdGVtIChhbmQgY2hpbGQgbWVudSBpdGVtKSBtYXRjaGVzIHRoZSBjdXJyZW50IHVybCB1c2luZyBhIHJlY3Vyc2l2ZSBmdW5jdGlvblxuICAgICAgICBtZW51SXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICBjaGVja0l0ZW1NYXRjaChpdGVtLmxpbms/LmpvaW4oJycpIHx8ICcnLCBgJHtpdGVtLnNlcXVlbmNlfWApO1xuXG4gICAgICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGl0ZW0uY2hpbGRyZW4uZm9yRWFjaChjaGlsZEl0ZW0gPT4ge1xuICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZEl0ZW0ubGluaykpIHtcbiAgICAgICAgICAgICAgICBjaGVja0l0ZW1NYXRjaChcbiAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoaXRlbS5saW5rKVxuICAgICAgICAgICAgICAgICAgICA/IFsuLi5pdGVtLmxpbmssIC4uLmNoaWxkSXRlbS5saW5rXS5qb2luKCcnKVxuICAgICAgICAgICAgICAgICAgICA6IGNoaWxkSXRlbS5saW5rLmpvaW4oJycpLFxuICAgICAgICAgICAgICAgICAgYCR7aXRlbS5zZXF1ZW5jZX0ke2NoaWxkSXRlbS5zZXF1ZW5jZX1gXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyByZXR1cm5zIHRoZSBjbG9zZXN0IHNlcXVlbmNlIG51bWJlciAoZWFjaCBtZW51IGl0ZW0gaGFzIGEgc2VxdWVuY2UgbnVtYmVyKVxuXG4gICAgICAgIHJldHVybiBjbG9zZXN0U2VxdWVuY2U7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1lbnVJdGVtcyQoKTogT2JzZXJ2YWJsZTxNZW51SXRlbVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuX21lbnVJdGVtcyQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgcmVsb2FkKCk6IHZvaWQge1xuICAgIGNvbnN0IHJvbGVzID0gdGhpcy5rZXljbG9ha1NlcnZpY2UuZ2V0VXNlclJvbGVzKHRydWUpO1xuICAgIHJldHVybiB0aGlzLl9tZW51SXRlbXMkLm5leHQodGhpcy5sb2FkTWVudUl0ZW1zKHJvbGVzKSk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRNZW51SXRlbXModXNlclJvbGVzOiBBcnJheTxzdHJpbmc+KTogTWVudUl0ZW1bXSB7XG4gICAgbGV0IG1lbnVJdGVtczogTWVudUl0ZW1bXSA9IFtdO1xuICAgIHRoaXMubWVudUNvbmZpZy5tZW51SXRlbXMuZm9yRWFjaCgobWVudUl0ZW06IE1lbnVJdGVtKSA9PiB7XG4gICAgICBpZiAobWVudUl0ZW0uaW5jbHVkZUZ1bmN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5pbmNsdWRlRnVuY3Rpb25PYnNlcnZhYmxlc1ttZW51SXRlbS50aXRsZV0gPVxuICAgICAgICAgIHRoaXMubWVudUluY2x1ZGVTZXJ2aWNlLmdldEluY2x1ZGVGdW5jdGlvbihtZW51SXRlbS5pbmNsdWRlRnVuY3Rpb24pO1xuICAgICAgfVxuXG4gICAgICBtZW51SXRlbS5zaG93ID0gdHJ1ZTtcblxuICAgICAgaWYgKHVzZXJSb2xlcy5maW5kKHVzZXJSb2xlID0+IG1lbnVJdGVtLnJvbGVzLmluY2x1ZGVzKHVzZXJSb2xlKSkpIHtcbiAgICAgICAgbWVudUl0ZW1zLnB1c2gobWVudUl0ZW0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIG1lbnVJdGVtcyA9IHRoaXMuc29ydE1lbnVJdGVtcyhtZW51SXRlbXMpO1xuICAgIHRoaXMuYXBwZW5kRG9zc2llclN1Yk1lbnVJdGVtcyhtZW51SXRlbXMpLnN1YnNjcmliZShcbiAgICAgIHZhbHVlID0+IChtZW51SXRlbXMgPSB0aGlzLmFwcGx5TWVudVJvbGVTZWN1cml0eSh2YWx1ZSkpXG4gICAgKTtcbiAgICByZXR1cm4gbWVudUl0ZW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBzb3J0TWVudUl0ZW1zKG1lbnVJdGVtczogTWVudUl0ZW1bXSk6IE1lbnVJdGVtW10ge1xuICAgIHJldHVybiBtZW51SXRlbXMuc29ydCgoYSwgYikgPT4gYS5zZXF1ZW5jZSAtIGIuc2VxdWVuY2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBlbmREb3NzaWVyU3ViTWVudUl0ZW1zKG1lbnVJdGVtczogTWVudUl0ZW1bXSk6IE9ic2VydmFibGU8TWVudUl0ZW1bXT4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShzdWJzY3JpYmVyID0+IHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdhcHBlbmREb3NzaWVyU3ViTWVudUl0ZW1zJyk7XG4gICAgICB0aGlzLmRvY3VtZW50U2VydmljZS5nZXRBbGxEZWZpbml0aW9ucygpLnN1YnNjcmliZShkZWZpbml0aW9ucyA9PiB7XG4gICAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgIC4uLmRlZmluaXRpb25zLmNvbnRlbnQubWFwKGRlZmluaXRpb24gPT5cbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlLmdldENhc2VTZXR0aW5ncyhkZWZpbml0aW9uPy5pZD8ubmFtZSlcbiAgICAgICAgICApLFxuICAgICAgICBdKVxuICAgICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgICAgLnN1YnNjcmliZShhbGxDYXNlU2V0dGluZ3MgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3BlbkRvY3VtZW50Q291bnRNYXAgPVxuICAgICAgICAgICAgICAhdGhpcy5kaXNhYmxlQ2FzZUNvdW50ICYmIHRoaXMuZ2V0T3BlbkRvY3VtZW50Q291bnRNYXAoZGVmaW5pdGlvbnMpO1xuXG4gICAgICAgICAgICBjb25zdCBkb3NzaWVyTWVudUl0ZW1zOiBNZW51SXRlbVtdID0gZGVmaW5pdGlvbnMuY29udGVudC5tYXAoKGRlZmluaXRpb24sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGNhc2VTZXR0aW5ncyA9IGFsbENhc2VTZXR0aW5ncz8uZmluZChcbiAgICAgICAgICAgICAgICBzZXR0aW5nID0+IHNldHRpbmcubmFtZSA9PT0gZGVmaW5pdGlvbi5pZC5uYW1lXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBsaW5rOiBbJy9kb3NzaWVycy8nICsgZGVmaW5pdGlvbi5pZC5uYW1lXSxcbiAgICAgICAgICAgICAgICB0aXRsZTogZGVmaW5pdGlvbi5zY2hlbWEudGl0bGUsXG4gICAgICAgICAgICAgICAgaWNvbkNsYXNzOiAnaWNvbiBtZGkgbWRpLWRvdC1jaXJjbGUnLFxuICAgICAgICAgICAgICAgIHNlcXVlbmNlOiBpbmRleCxcbiAgICAgICAgICAgICAgICBzaG93OiB0cnVlLFxuICAgICAgICAgICAgICAgIC4uLighdGhpcy5kaXNhYmxlQ2FzZUNvdW50ICYmXG4gICAgICAgICAgICAgICAgICBjYXNlU2V0dGluZ3M/LmNhbkhhdmVBc3NpZ25lZSAmJiB7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50JDogb3BlbkRvY3VtZW50Q291bnRNYXAuZ2V0KGRlZmluaXRpb24uaWQubmFtZSksXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgfSBhcyBNZW51SXRlbTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ2ZvdW5kIGRvc3NpZXJNZW51SXRlbXMnLCBkb3NzaWVyTWVudUl0ZW1zKTtcbiAgICAgICAgICAgIGNvbnN0IG1lbnVJdGVtSW5kZXggPSBtZW51SXRlbXMuZmluZEluZGV4KCh7dGl0bGV9KSA9PiB0aXRsZSA9PT0gJ0Rvc3NpZXJzJyk7XG4gICAgICAgICAgICBpZiAobWVudUl0ZW1JbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgY29uc3QgZG9zc2llck1lbnUgPSBtZW51SXRlbXNbbWVudUl0ZW1JbmRleF07XG4gICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCd1cGRhdGluZyBkb3NzaWVyTWVudScsIGRvc3NpZXJNZW51KTtcbiAgICAgICAgICAgICAgZG9zc2llck1lbnUuY2hpbGRyZW4gPSBkb3NzaWVyTWVudUl0ZW1zO1xuICAgICAgICAgICAgICBtZW51SXRlbXNbbWVudUl0ZW1JbmRleF0gPSBkb3NzaWVyTWVudTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChtZW51SXRlbXMpO1xuICAgICAgICAgICAgdGhpcy5kb3NzaWVySXRlbXNBcHBlbmRlZCQubmV4dCh0cnVlKTtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdhcHBlbmREb3NzaWVyU3ViTWVudUl0ZW1zIGZpbmlzaGVkJyk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0T3BlbkRvY3VtZW50Q291bnRNYXAoZGVmaW5pdGlvbnM6IERvY3VtZW50RGVmaW5pdGlvbnMpOiBNYXA8c3RyaW5nLCBTdWJqZWN0PG51bWJlcj4+IHtcbiAgICBjb25zdCBjb3VudE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBTdWJqZWN0PG51bWJlcj4+KCk7XG4gICAgZGVmaW5pdGlvbnMuY29udGVudC5mb3JFYWNoKGRlZmluaXRpb24gPT5cbiAgICAgIGNvdW50TWFwLnNldChkZWZpbml0aW9uLmlkLm5hbWUsIG5ldyBTdWJqZWN0PG51bWJlcj4oKSlcbiAgICApO1xuXG4gICAgdGltZXIoMCwgNTAwMCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlLmdldE9wZW5Eb2N1bWVudENvdW50KCkuc3Vic2NyaWJlKG9wZW5Eb2N1bWVudENvdW50TGlzdCA9PiB7XG4gICAgICAgIG9wZW5Eb2N1bWVudENvdW50TGlzdC5mb3JFYWNoKG9wZW5Eb2N1bWVudENvdW50ID0+XG4gICAgICAgICAgY291bnRNYXBcbiAgICAgICAgICAgIC5nZXQob3BlbkRvY3VtZW50Q291bnQuZG9jdW1lbnREZWZpbml0aW9uTmFtZSlcbiAgICAgICAgICAgIC5uZXh0KG9wZW5Eb2N1bWVudENvdW50Lm9wZW5Eb2N1bWVudENvdW50KVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGNvdW50TWFwO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseU1lbnVSb2xlU2VjdXJpdHkobWVudUl0ZW1zOiBNZW51SXRlbVtdKTogTWVudUl0ZW1bXSB7XG4gICAgdGhpcy51c2VyUHJvdmlkZXJTZXJ2aWNlLmdldFVzZXJTdWJqZWN0KCkuc3Vic2NyaWJlKHVzZXIgPT4ge1xuICAgICAgaWYgKHVzZXIucm9sZXMgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnYXBwbHlNZW51Um9sZVNlY3VyaXR5Jyk7XG4gICAgICAgIGNvbnN0IHVzZXJSb2xlcyA9IHVzZXIucm9sZXM7XG4gICAgICAgIG1lbnVJdGVtcy5mb3JFYWNoKChtZW51SXRlbTogTWVudUl0ZW0pID0+IHtcbiAgICAgICAgICBjb25zdCBhY2Nlc3MgPSB0aGlzLmRldGVybWluZVJvbGVBY2Nlc3MobWVudUl0ZW0sIHVzZXJSb2xlcyk7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ01lbnU6IGNoZWNrIHJvbGUgYWNjZXNzJywgbWVudUl0ZW0ucm9sZXMsIGFjY2Vzcyk7XG4gICAgICAgICAgaWYgKG1lbnVJdGVtLnNob3cgIT09IGFjY2Vzcykge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ01lbnU6IENoYW5nZSBhY2Nlc3MnLCBtZW51SXRlbSwgYWNjZXNzKTtcbiAgICAgICAgICAgIG1lbnVJdGVtLnNob3cgPSBhY2Nlc3M7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gbWVudUl0ZW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXRlcm1pbmVSb2xlQWNjZXNzKG1lbnVJdGVtOiBNZW51SXRlbSwgcm9sZXM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICFtZW51SXRlbS5yb2xlcyB8fCBtZW51SXRlbS5yb2xlcy5zb21lKHJvbGUgPT4gcm9sZXMuaW5jbHVkZXMocm9sZSkpO1xuICB9XG59XG4iXX0=
|
|
193
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9tZW51L21lbnUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFJekMsT0FBTyxFQUFDLGFBQWEsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFTLE1BQU0saUJBQWlCLENBQUM7QUFDbkYsT0FBTyxFQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFaEYsT0FBTyxFQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7O0FBTWpELE1BQU0sT0FBTyxXQUFXO0lBU3RCLFlBQ21CLGFBQTRCLEVBQzVCLGVBQWdDLEVBQ2hDLG1CQUF3QyxFQUN4QyxNQUFpQixFQUNqQixrQkFBc0MsRUFDdEMsTUFBYyxFQUNkLGVBQWdDO1FBTmhDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDakIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2Qsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBZjVDLCtCQUEwQixHQUF5QyxFQUFFLENBQUM7UUFFckUsZ0JBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBYSxTQUFTLENBQUMsQ0FBQztRQTBCaEQsa0JBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ3RE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IDIwMTUtMjAyMCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb25maWdTZXJ2aWNlLCBNZW51Q29uZmlnLCBNZW51SW5jbHVkZVNlcnZpY2UsIE1lbnVJdGVtfSBmcm9tICdAdmFsdGltby9jb25maWcnO1xuaW1wb3J0IHtOR1hMb2dnZXJ9IGZyb20gJ25neC1sb2dnZXInO1xuaW1wb3J0IHtVc2VyUHJvdmlkZXJTZXJ2aWNlfSBmcm9tICdAdmFsdGltby9zZWN1cml0eSc7XG5pbXBvcnQge05hdmlnYXRpb25FbmQsIE5hdmlnYXRpb25TdGFydCwgUmVzb2x2ZUVuZCwgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIFN1YmplY3QsIHRpbWVyfSBmcm9tICdyeGpzJztcbmltcG9ydCB7RG9jdW1lbnREZWZpbml0aW9ucywgRG9jdW1lbnRTZXJ2aWNlfSBmcm9tICdAdmFsdGltby9kb2N1bWVudCc7XG5pbXBvcnQge2ZpbHRlciwgbWFwLCB0YWtlfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0tleWNsb2FrU2VydmljZX0gZnJvbSAna2V5Y2xvYWstYW5ndWxhcic7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBNZW51U2VydmljZSB7XG4gIHB1YmxpYyBpbmNsdWRlRnVuY3Rpb25PYnNlcnZhYmxlczoge1trZXk6IHN0cmluZ106IE9ic2VydmFibGU8Ym9vbGVhbj59ID0ge307XG5cbiAgcHJpdmF0ZSBfbWVudUl0ZW1zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWVudUl0ZW1bXT4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBtZW51Q29uZmlnOiBNZW51Q29uZmlnO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGlzYWJsZUNhc2VDb3VudCE6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgZW5hYmxlT2JqZWN0TWFuYWdlbWVudCE6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnRTZXJ2aWNlOiBEb2N1bWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB1c2VyUHJvdmlkZXJTZXJ2aWNlOiBVc2VyUHJvdmlkZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyOiBOR1hMb2dnZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBtZW51SW5jbHVkZVNlcnZpY2U6IE1lbnVJbmNsdWRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkga2V5Y2xvYWtTZXJ2aWNlOiBLZXljbG9ha1NlcnZpY2VcbiAgKSB7XG4gICAgY29uc3QgY29uZmlnID0gY29uZmlnU2VydmljZT8uY29uZmlnO1xuICAgIHRoaXMubWVudUNvbmZpZyA9IGNvbmZpZz8ubWVudTtcbiAgICB0aGlzLmRpc2FibGVDYXNlQ291bnQgPSBjb25maWc/LmZlYXR1cmVUb2dnbGVzPy5kaXNhYmxlQ2FzZUNvdW50O1xuICAgIHRoaXMuZW5hYmxlT2JqZWN0TWFuYWdlbWVudCA9IGNvbmZpZz8uZmVhdHVyZVRvZ2dsZXM/LmVuYWJsZU9iamVjdE1hbmFnZW1lbnQ7XG4gIH1cblxuICBpbml0KCk6IHZvaWQge1xuICAgIHRoaXMucmVsb2FkKCk7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ01lbnUgaW5pdGlhbGl6ZWQnKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgY3VycmVudFJvdXRlJCA9IHRoaXMucm91dGVyLmV2ZW50cy5waXBlKFxuICAgIGZpbHRlcihcbiAgICAgIGV2ZW50ID0+XG4gICAgICAgIGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCB8fFxuICAgICAgICBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCB8fFxuICAgICAgICBldmVudCBpbnN0YW5jZW9mIFJlc29sdmVFbmRcbiAgICApLFxuICAgIG1hcChldmVudCA9PiAoZXZlbnQgYXMgTmF2aWdhdGlvbkVuZCk/LnVybCksXG4gICAgZmlsdGVyKHVybCA9PiAhIXVybClcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGRvc3NpZXJJdGVtc0FwcGVuZGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIC8vIEZpbmQgb3V0IHdoaWNoIG1lbnUgaXRlbSBzZXF1ZW5jZSBudW1iZXIgbWF0Y2hlcyB0aGUgY3VycmVudCB1cmwgdGhlIGNsb3Nlc3RcbiAgcHVibGljIGdldCBjbG9zZXN0U2VxdWVuY2UkKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW3RoaXMuZG9zc2llckl0ZW1zQXBwZW5kZWQkLCB0aGlzLmN1cnJlbnRSb3V0ZSQsIHRoaXMubWVudUl0ZW1zJF0pLnBpcGUoXG4gICAgICBmaWx0ZXIoKFtkb3NzaWVySXRlbXNBcHBlbmRlZF0pID0+IGRvc3NpZXJJdGVtc0FwcGVuZGVkKSxcbiAgICAgIG1hcCgoW2Rvc3NpZXJJdGVtc0FwcGVuZGVkLCBjdXJyZW50Um91dGUsIG1lbnVJdGVtc10pID0+IHtcbiAgICAgICAgbGV0IGNsb3Nlc3RTZXF1ZW5jZSA9ICcwJztcbiAgICAgICAgbGV0IGhpZ2hlc3REaWZmZXJlbmNlID0gMDtcblxuICAgICAgICAvLyByZWN1cnNpdmUgZnVuY3Rpb24gdG8gY2hlY2sgaG93IGNsb3NlbHkgZWFjaCBpdGVtIG1hdGNoZXMgdG8gdGhlIGN1cnJlbnQgdXJsXG4gICAgICAgIGNvbnN0IGNoZWNrSXRlbU1hdGNoID0gKHN0cmluZ1VybDogc3RyaW5nLCBzZXF1ZW5jZTogc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgICAgICAgLy8gbGVuZ3RoIG9mIHRoZSBjdXJyZW50IGZ1bGwgdXJsXG4gICAgICAgICAgY29uc3QgY3VycmVudFJvdXRlVXJsTGVuZ3RoID0gY3VycmVudFJvdXRlLmxlbmd0aDtcbiAgICAgICAgICAvLyBsZW5ndGggb2YgdGhlIGN1cnJlbnQgZnVsbCB1cmwgd2l0aCB0aGUgaXRlbSdzIHVybCBzdWJzdHJhY3RlZFxuICAgICAgICAgIGNvbnN0IGN1cnJlbnRSb3V0ZVN1YnN0cmFjdExlbmd0aCA9IGN1cnJlbnRSb3V0ZS5yZXBsYWNlKHN0cmluZ1VybCwgJycpLmxlbmd0aDtcbiAgICAgICAgICAvLyB0aGUgYW1vdW50IG9mIGNoYXJhY3RlcnMgdGhhdCBjb3VsZCBiZSBzdWJzdHJhY3RlZFxuICAgICAgICAgIGNvbnN0IGRpZmZlcmVuY2UgPSBjdXJyZW50Um91dGVVcmxMZW5ndGggLSBjdXJyZW50Um91dGVTdWJzdHJhY3RMZW5ndGg7XG5cbiAgICAgICAgICAvLyB0aGUgbGFyZ2VyIHRoZSBhbW91bnQgb2YgY2hhcmFjdGVycyB0aGF0IGNvdWxkIGJlIHN1YnN0cmFjdGVkLCB0aGUgbW9yZSBjbG9zZWx5IHRoZSBtZW51IGl0ZW0gdXJsIG1hdGNoZXMgdGhlIGN1cnJlbnQgdXJsXG4gICAgICAgICAgaWYgKGRpZmZlcmVuY2UgPiBoaWdoZXN0RGlmZmVyZW5jZSkge1xuICAgICAgICAgICAgaGlnaGVzdERpZmZlcmVuY2UgPSBkaWZmZXJlbmNlO1xuICAgICAgICAgICAgY2xvc2VzdFNlcXVlbmNlID0gc2VxdWVuY2U7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGNoZWNrIGhvdyBjbG9zZWx5IGVhY2ggbWVudSBpdGVtIChhbmQgY2hpbGQgbWVudSBpdGVtKSBtYXRjaGVzIHRoZSBjdXJyZW50IHVybCB1c2luZyBhIHJlY3Vyc2l2ZSBmdW5jdGlvblxuICAgICAgICBtZW51SXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICBjaGVja0l0ZW1NYXRjaChpdGVtLmxpbms/LmpvaW4oJycpIHx8ICcnLCBgJHtpdGVtLnNlcXVlbmNlfWApO1xuXG4gICAgICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGl0ZW0uY2hpbGRyZW4uZm9yRWFjaChjaGlsZEl0ZW0gPT4ge1xuICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZEl0ZW0ubGluaykpIHtcbiAgICAgICAgICAgICAgICBjaGVja0l0ZW1NYXRjaChcbiAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoaXRlbS5saW5rKVxuICAgICAgICAgICAgICAgICAgICA/IFsuLi5pdGVtLmxpbmssIC4uLmNoaWxkSXRlbS5saW5rXS5qb2luKCcnKVxuICAgICAgICAgICAgICAgICAgICA6IGNoaWxkSXRlbS5saW5rLmpvaW4oJycpLFxuICAgICAgICAgICAgICAgICAgYCR7aXRlbS5zZXF1ZW5jZX0ke2NoaWxkSXRlbS5zZXF1ZW5jZX1gXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyByZXR1cm5zIHRoZSBjbG9zZXN0IHNlcXVlbmNlIG51bWJlciAoZWFjaCBtZW51IGl0ZW0gaGFzIGEgc2VxdWVuY2UgbnVtYmVyKVxuXG4gICAgICAgIHJldHVybiBjbG9zZXN0U2VxdWVuY2U7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1lbnVJdGVtcyQoKTogT2JzZXJ2YWJsZTxNZW51SXRlbVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuX21lbnVJdGVtcyQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgcmVsb2FkKCk6IHZvaWQge1xuICAgIGNvbnN0IHJvbGVzID0gdGhpcy5rZXljbG9ha1NlcnZpY2UuZ2V0VXNlclJvbGVzKHRydWUpO1xuICAgIHJldHVybiB0aGlzLl9tZW51SXRlbXMkLm5leHQodGhpcy5sb2FkTWVudUl0ZW1zKHJvbGVzKSk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRNZW51SXRlbXModXNlclJvbGVzOiBBcnJheTxzdHJpbmc+KTogTWVudUl0ZW1bXSB7XG4gICAgbGV0IG1lbnVJdGVtczogTWVudUl0ZW1bXSA9IFtdO1xuICAgIHRoaXMubWVudUNvbmZpZy5tZW51SXRlbXMuZm9yRWFjaCgobWVudUl0ZW06IE1lbnVJdGVtKSA9PiB7XG4gICAgICBpZiAobWVudUl0ZW0uaW5jbHVkZUZ1bmN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5pbmNsdWRlRnVuY3Rpb25PYnNlcnZhYmxlc1ttZW51SXRlbS50aXRsZV0gPVxuICAgICAgICAgIHRoaXMubWVudUluY2x1ZGVTZXJ2aWNlLmdldEluY2x1ZGVGdW5jdGlvbihtZW51SXRlbS5pbmNsdWRlRnVuY3Rpb24pO1xuICAgICAgfVxuXG4gICAgICBtZW51SXRlbS5zaG93ID0gdHJ1ZTtcblxuICAgICAgaWYgKHVzZXJSb2xlcy5maW5kKHVzZXJSb2xlID0+IG1lbnVJdGVtLnJvbGVzLmluY2x1ZGVzKHVzZXJSb2xlKSkpIHtcbiAgICAgICAgbWVudUl0ZW1zLnB1c2gobWVudUl0ZW0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIG1lbnVJdGVtcyA9IHRoaXMuc29ydE1lbnVJdGVtcyhtZW51SXRlbXMpO1xuICAgIHRoaXMuYXBwZW5kRG9zc2llclN1Yk1lbnVJdGVtcyhtZW51SXRlbXMpLnN1YnNjcmliZShcbiAgICAgIHZhbHVlID0+IChtZW51SXRlbXMgPSB0aGlzLmFwcGx5TWVudVJvbGVTZWN1cml0eSh2YWx1ZSkpXG4gICAgKTtcbiAgICByZXR1cm4gbWVudUl0ZW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBzb3J0TWVudUl0ZW1zKG1lbnVJdGVtczogTWVudUl0ZW1bXSk6IE1lbnVJdGVtW10ge1xuICAgIHJldHVybiBtZW51SXRlbXMuc29ydCgoYSwgYikgPT4gYS5zZXF1ZW5jZSAtIGIuc2VxdWVuY2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBlbmREb3NzaWVyU3ViTWVudUl0ZW1zKG1lbnVJdGVtczogTWVudUl0ZW1bXSk6IE9ic2VydmFibGU8TWVudUl0ZW1bXT4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShzdWJzY3JpYmVyID0+IHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdhcHBlbmREb3NzaWVyU3ViTWVudUl0ZW1zJyk7XG4gICAgICB0aGlzLmRvY3VtZW50U2VydmljZS5nZXRBbGxEZWZpbml0aW9ucygpLnN1YnNjcmliZShkZWZpbml0aW9ucyA9PiB7XG4gICAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgIC4uLmRlZmluaXRpb25zLmNvbnRlbnQubWFwKGRlZmluaXRpb24gPT5cbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlLmdldENhc2VTZXR0aW5ncyhkZWZpbml0aW9uPy5pZD8ubmFtZSlcbiAgICAgICAgICApLFxuICAgICAgICBdKVxuICAgICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgICAgLnN1YnNjcmliZShhbGxDYXNlU2V0dGluZ3MgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3BlbkRvY3VtZW50Q291bnRNYXAgPVxuICAgICAgICAgICAgICAhdGhpcy5kaXNhYmxlQ2FzZUNvdW50ICYmIHRoaXMuZ2V0T3BlbkRvY3VtZW50Q291bnRNYXAoZGVmaW5pdGlvbnMpO1xuXG4gICAgICAgICAgICBjb25zdCBkb3NzaWVyTWVudUl0ZW1zOiBNZW51SXRlbVtdID0gZGVmaW5pdGlvbnMuY29udGVudC5tYXAoKGRlZmluaXRpb24sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGNhc2VTZXR0aW5ncyA9IGFsbENhc2VTZXR0aW5ncz8uZmluZChcbiAgICAgICAgICAgICAgICBzZXR0aW5nID0+IHNldHRpbmcubmFtZSA9PT0gZGVmaW5pdGlvbi5pZC5uYW1lXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBsaW5rOiBbJy9kb3NzaWVycy8nICsgZGVmaW5pdGlvbi5pZC5uYW1lXSxcbiAgICAgICAgICAgICAgICB0aXRsZTogZGVmaW5pdGlvbi5zY2hlbWEudGl0bGUsXG4gICAgICAgICAgICAgICAgaWNvbkNsYXNzOiAnaWNvbiBtZGkgbWRpLWRvdC1jaXJjbGUnLFxuICAgICAgICAgICAgICAgIHNlcXVlbmNlOiBpbmRleCxcbiAgICAgICAgICAgICAgICBzaG93OiB0cnVlLFxuICAgICAgICAgICAgICAgIC4uLighdGhpcy5kaXNhYmxlQ2FzZUNvdW50ICYmXG4gICAgICAgICAgICAgICAgICBjYXNlU2V0dGluZ3M/LmNhbkhhdmVBc3NpZ25lZSAmJiB7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50JDogb3BlbkRvY3VtZW50Q291bnRNYXAuZ2V0KGRlZmluaXRpb24uaWQubmFtZSksXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgfSBhcyBNZW51SXRlbTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ2ZvdW5kIGRvc3NpZXJNZW51SXRlbXMnLCBkb3NzaWVyTWVudUl0ZW1zKTtcbiAgICAgICAgICAgIGNvbnN0IG1lbnVJdGVtSW5kZXggPSBtZW51SXRlbXMuZmluZEluZGV4KCh7dGl0bGV9KSA9PiB0aXRsZSA9PT0gJ0Rvc3NpZXJzJyk7XG4gICAgICAgICAgICBpZiAobWVudUl0ZW1JbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgY29uc3QgZG9zc2llck1lbnUgPSBtZW51SXRlbXNbbWVudUl0ZW1JbmRleF07XG4gICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCd1cGRhdGluZyBkb3NzaWVyTWVudScsIGRvc3NpZXJNZW51KTtcbiAgICAgICAgICAgICAgZG9zc2llck1lbnUuY2hpbGRyZW4gPSBkb3NzaWVyTWVudUl0ZW1zO1xuICAgICAgICAgICAgICBtZW51SXRlbXNbbWVudUl0ZW1JbmRleF0gPSBkb3NzaWVyTWVudTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChtZW51SXRlbXMpO1xuICAgICAgICAgICAgdGhpcy5kb3NzaWVySXRlbXNBcHBlbmRlZCQubmV4dCh0cnVlKTtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdhcHBlbmREb3NzaWVyU3ViTWVudUl0ZW1zIGZpbmlzaGVkJyk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0T3BlbkRvY3VtZW50Q291bnRNYXAoZGVmaW5pdGlvbnM6IERvY3VtZW50RGVmaW5pdGlvbnMpOiBNYXA8c3RyaW5nLCBTdWJqZWN0PG51bWJlcj4+IHtcbiAgICBjb25zdCBjb3VudE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBTdWJqZWN0PG51bWJlcj4+KCk7XG4gICAgZGVmaW5pdGlvbnMuY29udGVudC5mb3JFYWNoKGRlZmluaXRpb24gPT5cbiAgICAgIGNvdW50TWFwLnNldChkZWZpbml0aW9uLmlkLm5hbWUsIG5ldyBTdWJqZWN0PG51bWJlcj4oKSlcbiAgICApO1xuXG4gICAgdGltZXIoMCwgNTAwMCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlLmdldE9wZW5Eb2N1bWVudENvdW50KCkuc3Vic2NyaWJlKG9wZW5Eb2N1bWVudENvdW50TGlzdCA9PiB7XG4gICAgICAgIG9wZW5Eb2N1bWVudENvdW50TGlzdC5mb3JFYWNoKG9wZW5Eb2N1bWVudENvdW50ID0+XG4gICAgICAgICAgY291bnRNYXBcbiAgICAgICAgICAgIC5nZXQob3BlbkRvY3VtZW50Q291bnQuZG9jdW1lbnREZWZpbml0aW9uTmFtZSlcbiAgICAgICAgICAgIC5uZXh0KG9wZW5Eb2N1bWVudENvdW50Lm9wZW5Eb2N1bWVudENvdW50KVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGNvdW50TWFwO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseU1lbnVSb2xlU2VjdXJpdHkobWVudUl0ZW1zOiBNZW51SXRlbVtdKTogTWVudUl0ZW1bXSB7XG4gICAgdGhpcy51c2VyUHJvdmlkZXJTZXJ2aWNlLmdldFVzZXJTdWJqZWN0KCkuc3Vic2NyaWJlKHVzZXIgPT4ge1xuICAgICAgaWYgKHVzZXIucm9sZXMgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnYXBwbHlNZW51Um9sZVNlY3VyaXR5Jyk7XG4gICAgICAgIGNvbnN0IHVzZXJSb2xlcyA9IHVzZXIucm9sZXM7XG4gICAgICAgIG1lbnVJdGVtcy5mb3JFYWNoKChtZW51SXRlbTogTWVudUl0ZW0pID0+IHtcbiAgICAgICAgICBjb25zdCBhY2Nlc3MgPSB0aGlzLmRldGVybWluZVJvbGVBY2Nlc3MobWVudUl0ZW0sIHVzZXJSb2xlcyk7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ01lbnU6IGNoZWNrIHJvbGUgYWNjZXNzJywgbWVudUl0ZW0ucm9sZXMsIGFjY2Vzcyk7XG4gICAgICAgICAgaWYgKG1lbnVJdGVtLnNob3cgIT09IGFjY2Vzcykge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ01lbnU6IENoYW5nZSBhY2Nlc3MnLCBtZW51SXRlbSwgYWNjZXNzKTtcbiAgICAgICAgICAgIG1lbnVJdGVtLnNob3cgPSBhY2Nlc3M7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gbWVudUl0ZW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXRlcm1pbmVSb2xlQWNjZXNzKG1lbnVJdGVtOiBNZW51SXRlbSwgcm9sZXM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICFtZW51SXRlbS5yb2xlcyB8fCBtZW51SXRlbS5yb2xlcy5zb21lKHJvbGUgPT4gcm9sZXMuaW5jbHVkZXMocm9sZSkpO1xuICB9XG59XG4iXX0=
|
|
@@ -183,7 +183,7 @@ export class SearchFieldsComponent {
|
|
|
183
183
|
}
|
|
184
184
|
}
|
|
185
185
|
SearchFieldsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SearchFieldsComponent, deps: [{ token: i1.DocumentService }, { token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
186
|
-
SearchFieldsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: SearchFieldsComponent, selector: "valtimo-search-fields", inputs: { loading: "loading", searchFields: "searchFields", documentDefinitionName: "documentDefinitionName", setValuesSubject$: "setValuesSubject$" }, outputs: { doSearch: "doSearch" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"search fields\">\n <ng-container *ngIf=\"loading\">\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!loading\">\n <ng-container *ngTemplateOutlet=\"searchFieldsTemplate\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #loadingTemplate>\n <valtimo-spinner></valtimo-spinner>\n</ng-template>\n\n<ng-template #searchFieldsTemplate>\n <valtimo-widget>\n <div class=\"row\">\n <div class=\"col-12\">\n <ng-container *ngTemplateOutlet=\"buttonAccordion\"></ng-container>\n </div>\n </div>\n <div\n class=\"row p-3\"\n [ngClass]=\"{'row--hidden': (expanded$ | async) === false}\"\n *ngIf=\"searchFields$ | async as searchFields\"\n >\n <ng-container *ngFor=\"let searchField of searchFields; let i = index\">\n <div class=\"col-4\">\n <ng-container\n *ngTemplateOutlet=\"searchFieldTemplate; context: {searchField: searchField}\"\n ></ng-container>\n </div>\n <div class=\"w-100\" *ngIf=\"(i + 1) % 3 === 0\"></div>\n </ng-container>\n <div class=\"col-12\">\n <ng-container\n *ngTemplateOutlet=\"\n buttonsTemplate;\n context: {noSearchFields: !searchFields || searchFields.length === 0}\n \"\n ></ng-container>\n </div>\n </div>\n </valtimo-widget>\n</ng-template>\n\n<ng-template #searchFieldTemplate let-searchField=\"searchField\">\n <ng-container\n *ngIf=\"{\n values: values$ | async,\n tooltipKey: 'searchFieldsTooltips.' + searchField.key,\n tooltip: 'searchFieldsTooltips.' + searchField.key | translate,\n searchField,\n title:\n searchField.title ||\n ('searchFields.' + searchField.key !== ('searchFields.' + searchField.key | translate)\n ? ('searchFields.' + searchField.key | translate)\n : searchField.key)\n } as vars\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateText;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumber;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDate;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateBoolean;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateTime;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumberRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateTextRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateTimeRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateSingleSelectDropdown;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateMultiSelectDropdown;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateText\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-input\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"title\"\n [fullWidth]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumber\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-input\n *ngIf=\"searchField.dataType === 'number' && searchField.fieldType === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"title\"\n [fullWidth]=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDate\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-date-picker\n *ngIf=\"searchField.dataType === 'date' && searchField.fieldType === 'single'\"\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [name]=\"searchField.key\"\n fullWidth=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]\"\n ></v-date-picker>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateTextRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-input\n name=\"start\"\n [fullWidth]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.start\"\n >\n </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input\n name=\"end\"\n [fullWidth]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.end\"\n >\n </v-input>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumberRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'number' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-input\n name=\"start\"\n [fullWidth]=\"true\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.start\"\n >\n </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input\n name=\"end\"\n [fullWidth]=\"true\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.end\"\n >\n </v-input>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'date' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-date-picker\n name=\"start\"\n fullWidth=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.start\"\n ></v-date-picker>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-date-picker\n name=\"end\"\n fullWidth=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.end\"\n ></v-date-picker>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateBoolean\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'boolean'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"booleanItems$ | async as booleanItems\"\n [items]=\"booleanItems\"\n [margin]=\"false\"\n [required]=\"false\"\n [widthInPx]=\"200\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"singleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionId]=\"getDefaultBooleanSelectionId(values, searchField.key)\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateTime\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-date-picker\n *ngIf=\"searchField.dataType === 'datetime' && searchField.fieldType === 'single'\"\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [name]=\"searchField.key\"\n fullWidth=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event, true)\"\n [smallLabel]=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]\"\n ></v-date-picker>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateTimeRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'datetime' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event, true)\"\n className=\"multiple-search-fields\"\n >\n <v-date-picker\n name=\"start\"\n fullWidth=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.start\"\n ></v-date-picker>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-date-picker\n name=\"end\"\n fullWidth=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.end\"\n ></v-date-picker>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateSingleSelectDropdown\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'single-select-dropdown'\"\n >\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"dropdownSelectItemsMap[searchField.key] as searchFieldSelectItems\"\n [items]=\"searchFieldSelectItems\"\n [margin]=\"false\"\n [required]=\"false\"\n [widthInPx]=\"200\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"singleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionId]=\"values[searchField.key]\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateMultiSelectDropdown\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'multi-select-dropdown'\"\n >\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"dropdownSelectItemsMap[searchField.key] as searchFieldSelectItems\"\n [items]=\"searchFieldSelectItems\"\n [margin]=\"false\"\n [multiple]=\"true\"\n [required]=\"false\"\n [widthInPx]=\"200\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"multipleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionIds]=\"values[searchField.key]\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template #toText>\n <div class=\"to-text\">\n <v-paragraph>{{ 'searchFields.to' | translate }}</v-paragraph>\n </div>\n</ng-template>\n\n<ng-template #buttonsTemplate let-noSearchFields=\"noSearchFields\">\n <ng-container\n *ngTemplateOutlet=\"noSearchFieldsTemplate; context: {noSearchFields: noSearchFields}\"\n ></ng-container>\n <div class=\"buttons-container\" *ngIf=\"{expanded: expanded$ | async} as obs\">\n <div class=\"right-buttons\">\n <button\n (click)=\"clear()\"\n [disabled]=\"loading || noSearchFields\"\n type=\"button\"\n class=\"btn btn-space btn-secondary\"\n *ngIf=\"obs.expanded\"\n >\n {{ 'searchFields.clearButtonText' | translate }}\n </button>\n <button\n (click)=\"search()\"\n [disabled]=\"loading || noSearchFields || (hasValidValues$ | async) === false\"\n type=\"button\"\n class=\"btn btn-space btn-primary\"\n *ngIf=\"obs.expanded\"\n >\n {{ 'searchFields.searchButtonText' | translate }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #noSearchFieldsTemplate let-noSearchFields=\"noSearchFields\">\n <div class=\"w-100 mb-3\" *ngIf=\"noSearchFields\">\n <v-paragraph [fullWidth]=\"true\" [center]=\"true\">{{\n 'searchFields.noneConfigured' | translate\n }}</v-paragraph>\n </div>\n</ng-template>\n\n<ng-template #buttonAccordion>\n <div class=\"buttons-container\" *ngIf=\"{expanded: expanded$ | async} as obs\">\n <button\n [disabled]=\"loading\"\n type=\"button\"\n class=\"accordion-button\"\n (click)=\"toggleExpanded()\"\n [ngClass]=\"\n obs.expanded ? 'mdi mdi-chevron-right accordion-button--active' : 'mdi mdi-chevron-down'\n \"\n >\n {{ 'searchFields.searchButtonText' | translate }}\n </button>\n </div>\n</ng-template>\n", styles: [".w-100{height:15px}.w-100:last-child{display:none}::ng-deep .multiple-search-fields{display:flex!important;flex-direction:row!important;align-items:center}.to-text{margin-inline-start:8px;margin-inline-end:8px}.buttons-container{width:100%;display:flex;flex-direction:row;justify-content:end}.right-buttons{display:flex;flex-direction:row}.right-buttons v-button:last-child{margin-left:8px}.row--hidden{display:none}.accordion-button{display:block;width:100%;padding:15px;border:none;outline:none;cursor:pointer;background:#f8f9f9;text-align:left;transition:background .2s;font-size:1.2rem;color:#404040}.accordion-button--active{background:#f1f1f1}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.SpinnerComponent, selector: "valtimo-spinner", inputs: ["useBootstrapSpinner", "name", "type", "size", "color", "bdColor", "fullScreen", "noMarginTop"] }, { kind: "component", type: i5.WidgetComponent, selector: "valtimo-widget", inputs: ["type", "name", "icon", "contrast", "divider", "title", "subtitle", "collapseAble", "collapse", "additionalClasses"] }, { kind: "component", type: i6.InputComponent, selector: "v-input", inputs: ["name", "type", "title", "titleTranslationKey", "defaultValue", "widthPx", "fullWidth", "margin", "disabled", "step", "min", "maxLength", "tooltip", "required", "hideNumberSpinBox", "smallLabel", "rows", "clear$"], outputs: ["valueChange"] }, { kind: "component", type: i6.FormComponent, selector: "v-form", inputs: ["className"], outputs: ["valueChange"] }, { kind: "component", type: i6.DatePickerComponent, selector: "v-date-picker", inputs: ["name", "title", "titleTranslationKey", "widthPx", "fullWidth", "margin", "disabled", "tooltip", "required", "defaultDate", "defaultDateIsToday", "smallLabel", "clear$", "enableTime"], outputs: ["valueChange"] }, { kind: "component", type: i6.InputLabelComponent, selector: "v-input-label", inputs: ["name", "title", "titleTranslationKey", "tooltip", "required", "largeMargin", "small"] }, { kind: "component", type: i6.ParagraphComponent, selector: "v-paragraph", inputs: ["center", "fullWidth", "margin", "italic", "loading"] }, { kind: "component", type: i6.SelectComponent, selector: "v-select", inputs: ["items", "defaultSelection", "defaultSelectionId", "defaultSelectionIds", "clearable", "disabled", "multiple", "margin", "widthInPx", "notFoundText", "clearAllText", "name", "title", "titleTranslationKey", "clearSelectionSubject$", "tooltip", "required", "loading", "loadingText", "placeholder"], outputs: ["selectedChange", "clear"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] });
|
|
186
|
+
SearchFieldsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: SearchFieldsComponent, selector: "valtimo-search-fields", inputs: { loading: "loading", searchFields: "searchFields", documentDefinitionName: "documentDefinitionName", setValuesSubject$: "setValuesSubject$" }, outputs: { doSearch: "doSearch" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"search fields\">\n <ng-container *ngIf=\"loading\">\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!loading\">\n <ng-container *ngTemplateOutlet=\"searchFieldsTemplate\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #loadingTemplate>\n <valtimo-spinner></valtimo-spinner>\n</ng-template>\n\n<ng-template #searchFieldsTemplate>\n <valtimo-widget>\n <div class=\"row\">\n <div class=\"col-12\">\n <ng-container *ngTemplateOutlet=\"buttonAccordion\"></ng-container>\n </div>\n </div>\n <div\n class=\"row p-3\"\n [ngClass]=\"{'row--hidden': (expanded$ | async) === false}\"\n *ngIf=\"searchFields$ | async as searchFields\"\n >\n <ng-container *ngFor=\"let searchField of searchFields; let i = index\">\n <div class=\"col-4\">\n <ng-container\n *ngTemplateOutlet=\"searchFieldTemplate; context: {searchField: searchField}\"\n ></ng-container>\n </div>\n <div class=\"w-100\" *ngIf=\"(i + 1) % 3 === 0\"></div>\n </ng-container>\n <div class=\"col-12\">\n <ng-container\n *ngTemplateOutlet=\"\n buttonsTemplate;\n context: {noSearchFields: !searchFields || searchFields.length === 0}\n \"\n ></ng-container>\n </div>\n </div>\n </valtimo-widget>\n</ng-template>\n\n<ng-template #searchFieldTemplate let-searchField=\"searchField\">\n <ng-container\n *ngIf=\"{\n values: values$ | async,\n tooltipKey: 'searchFieldsTooltips.' + searchField.key,\n tooltip: 'searchFieldsTooltips.' + searchField.key | translate,\n searchField,\n title:\n searchField.title ||\n ('searchFields.' + searchField.key !== ('searchFields.' + searchField.key | translate)\n ? ('searchFields.' + searchField.key | translate)\n : searchField.key)\n } as vars\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateText;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumber;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDate;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateBoolean;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateTime;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumberRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateTextRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateTimeRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateSingleSelectDropdown;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateMultiSelectDropdown;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateText\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-input\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"title\"\n [fullWidth]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumber\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-input\n *ngIf=\"searchField.dataType === 'number' && searchField.fieldType === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"title\"\n [fullWidth]=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDate\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-date-picker\n *ngIf=\"searchField.dataType === 'date' && searchField.fieldType === 'single'\"\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [name]=\"searchField.key\"\n fullWidth=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]\"\n ></v-date-picker>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateTextRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-input\n name=\"start\"\n [fullWidth]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.start\"\n >\n </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input\n name=\"end\"\n [fullWidth]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.end\"\n >\n </v-input>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumberRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'number' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-input\n name=\"start\"\n [fullWidth]=\"true\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.start\"\n >\n </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input\n name=\"end\"\n [fullWidth]=\"true\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.end\"\n >\n </v-input>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'date' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-date-picker\n name=\"start\"\n fullWidth=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.start\"\n ></v-date-picker>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-date-picker\n name=\"end\"\n fullWidth=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.end\"\n ></v-date-picker>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateBoolean\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'boolean'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"booleanItems$ | async as booleanItems\"\n [items]=\"booleanItems\"\n [margin]=\"false\"\n [required]=\"false\"\n [widthInPx]=\"200\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"singleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionId]=\"getDefaultBooleanSelectionId(values, searchField.key)\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateTime\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-date-picker\n *ngIf=\"searchField.dataType === 'datetime' && searchField.fieldType === 'single'\"\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [name]=\"searchField.key\"\n fullWidth=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event, true)\"\n [smallLabel]=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]\"\n ></v-date-picker>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateTimeRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'datetime' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event, true)\"\n className=\"multiple-search-fields\"\n >\n <v-date-picker\n name=\"start\"\n fullWidth=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.start\"\n ></v-date-picker>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-date-picker\n name=\"end\"\n fullWidth=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.end\"\n ></v-date-picker>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateSingleSelectDropdown\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'single-select-dropdown'\"\n >\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"dropdownSelectItemsMap[searchField.key] as searchFieldSelectItems\"\n [items]=\"searchFieldSelectItems\"\n [margin]=\"false\"\n [required]=\"false\"\n [widthInPx]=\"200\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"singleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionId]=\"values[searchField.key]\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateMultiSelectDropdown\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'multi-select-dropdown'\"\n >\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"dropdownSelectItemsMap[searchField.key] as searchFieldSelectItems\"\n [items]=\"searchFieldSelectItems\"\n [margin]=\"false\"\n [multiple]=\"true\"\n [required]=\"false\"\n [widthInPx]=\"200\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"multipleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionIds]=\"values[searchField.key]\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template #toText>\n <div class=\"to-text\">\n <v-paragraph>{{ 'searchFields.to' | translate }}</v-paragraph>\n </div>\n</ng-template>\n\n<ng-template #buttonsTemplate let-noSearchFields=\"noSearchFields\">\n <ng-container\n *ngTemplateOutlet=\"noSearchFieldsTemplate; context: {noSearchFields: noSearchFields}\"\n ></ng-container>\n <div class=\"buttons-container\" *ngIf=\"{expanded: expanded$ | async} as obs\">\n <div class=\"right-buttons\">\n <button\n (click)=\"clear()\"\n [disabled]=\"loading || noSearchFields\"\n type=\"button\"\n class=\"btn btn-space btn-secondary\"\n *ngIf=\"obs.expanded\"\n >\n {{ 'searchFields.clearButtonText' | translate }}\n </button>\n <button\n (click)=\"search()\"\n [disabled]=\"loading || noSearchFields || (hasValidValues$ | async) === false\"\n type=\"button\"\n class=\"btn btn-space btn-primary\"\n *ngIf=\"obs.expanded\"\n >\n {{ 'searchFields.searchButtonText' | translate }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #noSearchFieldsTemplate let-noSearchFields=\"noSearchFields\">\n <div class=\"w-100 mb-3\" *ngIf=\"noSearchFields\">\n <v-paragraph [fullWidth]=\"true\" [center]=\"true\">{{\n 'searchFields.noneConfigured' | translate\n }}</v-paragraph>\n </div>\n</ng-template>\n\n<ng-template #buttonAccordion>\n <div class=\"buttons-container\" *ngIf=\"{expanded: expanded$ | async} as obs\">\n <button\n [disabled]=\"loading\"\n type=\"button\"\n class=\"accordion-button\"\n (click)=\"toggleExpanded()\"\n [ngClass]=\"\n obs.expanded ? 'mdi mdi-chevron-right accordion-button--active' : 'mdi mdi-chevron-down'\n \"\n >\n {{ 'searchFields.searchButtonText' | translate }}\n </button>\n </div>\n</ng-template>\n", styles: [".w-100{height:15px}.w-100:last-child{display:none}::ng-deep .multiple-search-fields{display:flex!important;flex-direction:row!important;align-items:center}.to-text{margin-inline-start:8px;margin-inline-end:8px}.buttons-container{width:100%;display:flex;flex-direction:row;justify-content:end}.right-buttons{display:flex;flex-direction:row}.right-buttons v-button:last-child{margin-left:8px}.row--hidden{display:none}.accordion-button{display:block;width:100%;padding:15px;border:none;outline:none;cursor:pointer;background:#f8f9f9;text-align:left;transition:background .2s;font-size:1.2rem;color:#404040}.accordion-button--active{background:#f1f1f1}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.SpinnerComponent, selector: "valtimo-spinner", inputs: ["useBootstrapSpinner", "name", "type", "size", "color", "bdColor", "fullScreen", "noMarginTop"] }, { kind: "component", type: i5.WidgetComponent, selector: "valtimo-widget", inputs: ["type", "name", "icon", "contrast", "divider", "title", "subtitle", "collapseAble", "collapse", "additionalClasses"] }, { kind: "component", type: i6.InputComponent, selector: "v-input", inputs: ["name", "type", "title", "titleTranslationKey", "defaultValue", "widthPx", "fullWidth", "margin", "smallMargin", "disabled", "step", "min", "maxLength", "tooltip", "required", "hideNumberSpinBox", "smallLabel", "rows", "clear$"], outputs: ["valueChange"] }, { kind: "component", type: i6.FormComponent, selector: "v-form", inputs: ["className"], outputs: ["valueChange"] }, { kind: "component", type: i6.DatePickerComponent, selector: "v-date-picker", inputs: ["name", "title", "titleTranslationKey", "widthPx", "fullWidth", "margin", "disabled", "tooltip", "required", "defaultDate", "defaultDateIsToday", "smallLabel", "clear$", "enableTime"], outputs: ["valueChange"] }, { kind: "component", type: i6.InputLabelComponent, selector: "v-input-label", inputs: ["name", "title", "titleTranslationKey", "tooltip", "required", "largeMargin", "small"] }, { kind: "component", type: i6.ParagraphComponent, selector: "v-paragraph", inputs: ["center", "fullWidth", "margin", "italic", "loading"] }, { kind: "component", type: i6.SelectComponent, selector: "v-select", inputs: ["items", "defaultSelection", "defaultSelectionId", "defaultSelectionIds", "clearable", "disabled", "multiple", "margin", "widthInPx", "notFoundText", "clearAllText", "name", "title", "titleTranslationKey", "clearSelectionSubject$", "tooltip", "required", "loading", "loadingText", "placeholder"], outputs: ["selectedChange", "clear"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] });
|
|
187
187
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SearchFieldsComponent, decorators: [{
|
|
188
188
|
type: Component,
|
|
189
189
|
args: [{ selector: 'valtimo-search-fields', template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"search fields\">\n <ng-container *ngIf=\"loading\">\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!loading\">\n <ng-container *ngTemplateOutlet=\"searchFieldsTemplate\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #loadingTemplate>\n <valtimo-spinner></valtimo-spinner>\n</ng-template>\n\n<ng-template #searchFieldsTemplate>\n <valtimo-widget>\n <div class=\"row\">\n <div class=\"col-12\">\n <ng-container *ngTemplateOutlet=\"buttonAccordion\"></ng-container>\n </div>\n </div>\n <div\n class=\"row p-3\"\n [ngClass]=\"{'row--hidden': (expanded$ | async) === false}\"\n *ngIf=\"searchFields$ | async as searchFields\"\n >\n <ng-container *ngFor=\"let searchField of searchFields; let i = index\">\n <div class=\"col-4\">\n <ng-container\n *ngTemplateOutlet=\"searchFieldTemplate; context: {searchField: searchField}\"\n ></ng-container>\n </div>\n <div class=\"w-100\" *ngIf=\"(i + 1) % 3 === 0\"></div>\n </ng-container>\n <div class=\"col-12\">\n <ng-container\n *ngTemplateOutlet=\"\n buttonsTemplate;\n context: {noSearchFields: !searchFields || searchFields.length === 0}\n \"\n ></ng-container>\n </div>\n </div>\n </valtimo-widget>\n</ng-template>\n\n<ng-template #searchFieldTemplate let-searchField=\"searchField\">\n <ng-container\n *ngIf=\"{\n values: values$ | async,\n tooltipKey: 'searchFieldsTooltips.' + searchField.key,\n tooltip: 'searchFieldsTooltips.' + searchField.key | translate,\n searchField,\n title:\n searchField.title ||\n ('searchFields.' + searchField.key !== ('searchFields.' + searchField.key | translate)\n ? ('searchFields.' + searchField.key | translate)\n : searchField.key)\n } as vars\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateText;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumber;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDate;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateBoolean;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateTime;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumberRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateTextRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateTimeRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateSingleSelectDropdown;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateMultiSelectDropdown;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateText\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-input\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"title\"\n [fullWidth]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumber\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-input\n *ngIf=\"searchField.dataType === 'number' && searchField.fieldType === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"title\"\n [fullWidth]=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDate\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-date-picker\n *ngIf=\"searchField.dataType === 'date' && searchField.fieldType === 'single'\"\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [name]=\"searchField.key\"\n fullWidth=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]\"\n ></v-date-picker>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateTextRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-input\n name=\"start\"\n [fullWidth]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.start\"\n >\n </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input\n name=\"end\"\n [fullWidth]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.end\"\n >\n </v-input>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumberRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'number' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-input\n name=\"start\"\n [fullWidth]=\"true\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.start\"\n >\n </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input\n name=\"end\"\n [fullWidth]=\"true\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.end\"\n >\n </v-input>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'date' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-date-picker\n name=\"start\"\n fullWidth=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.start\"\n ></v-date-picker>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-date-picker\n name=\"end\"\n fullWidth=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.end\"\n ></v-date-picker>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateBoolean\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'boolean'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"booleanItems$ | async as booleanItems\"\n [items]=\"booleanItems\"\n [margin]=\"false\"\n [required]=\"false\"\n [widthInPx]=\"200\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"singleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionId]=\"getDefaultBooleanSelectionId(values, searchField.key)\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateTime\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-date-picker\n *ngIf=\"searchField.dataType === 'datetime' && searchField.fieldType === 'single'\"\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [name]=\"searchField.key\"\n fullWidth=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event, true)\"\n [smallLabel]=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]\"\n ></v-date-picker>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateTimeRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'datetime' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event, true)\"\n className=\"multiple-search-fields\"\n >\n <v-date-picker\n name=\"start\"\n fullWidth=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.start\"\n ></v-date-picker>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-date-picker\n name=\"end\"\n fullWidth=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.end\"\n ></v-date-picker>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateSingleSelectDropdown\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'single-select-dropdown'\"\n >\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"dropdownSelectItemsMap[searchField.key] as searchFieldSelectItems\"\n [items]=\"searchFieldSelectItems\"\n [margin]=\"false\"\n [required]=\"false\"\n [widthInPx]=\"200\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"singleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionId]=\"values[searchField.key]\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateMultiSelectDropdown\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'multi-select-dropdown'\"\n >\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"dropdownSelectItemsMap[searchField.key] as searchFieldSelectItems\"\n [items]=\"searchFieldSelectItems\"\n [margin]=\"false\"\n [multiple]=\"true\"\n [required]=\"false\"\n [widthInPx]=\"200\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"multipleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionIds]=\"values[searchField.key]\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template #toText>\n <div class=\"to-text\">\n <v-paragraph>{{ 'searchFields.to' | translate }}</v-paragraph>\n </div>\n</ng-template>\n\n<ng-template #buttonsTemplate let-noSearchFields=\"noSearchFields\">\n <ng-container\n *ngTemplateOutlet=\"noSearchFieldsTemplate; context: {noSearchFields: noSearchFields}\"\n ></ng-container>\n <div class=\"buttons-container\" *ngIf=\"{expanded: expanded$ | async} as obs\">\n <div class=\"right-buttons\">\n <button\n (click)=\"clear()\"\n [disabled]=\"loading || noSearchFields\"\n type=\"button\"\n class=\"btn btn-space btn-secondary\"\n *ngIf=\"obs.expanded\"\n >\n {{ 'searchFields.clearButtonText' | translate }}\n </button>\n <button\n (click)=\"search()\"\n [disabled]=\"loading || noSearchFields || (hasValidValues$ | async) === false\"\n type=\"button\"\n class=\"btn btn-space btn-primary\"\n *ngIf=\"obs.expanded\"\n >\n {{ 'searchFields.searchButtonText' | translate }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #noSearchFieldsTemplate let-noSearchFields=\"noSearchFields\">\n <div class=\"w-100 mb-3\" *ngIf=\"noSearchFields\">\n <v-paragraph [fullWidth]=\"true\" [center]=\"true\">{{\n 'searchFields.noneConfigured' | translate\n }}</v-paragraph>\n </div>\n</ng-template>\n\n<ng-template #buttonAccordion>\n <div class=\"buttons-container\" *ngIf=\"{expanded: expanded$ | async} as obs\">\n <button\n [disabled]=\"loading\"\n type=\"button\"\n class=\"accordion-button\"\n (click)=\"toggleExpanded()\"\n [ngClass]=\"\n obs.expanded ? 'mdi mdi-chevron-right accordion-button--active' : 'mdi mdi-chevron-down'\n \"\n >\n {{ 'searchFields.searchButtonText' | translate }}\n </button>\n </div>\n</ng-template>\n", styles: [".w-100{height:15px}.w-100:last-child{display:none}::ng-deep .multiple-search-fields{display:flex!important;flex-direction:row!important;align-items:center}.to-text{margin-inline-start:8px;margin-inline-end:8px}.buttons-container{width:100%;display:flex;flex-direction:row;justify-content:end}.right-buttons{display:flex;flex-direction:row}.right-buttons v-button:last-child{margin-left:8px}.row--hidden{display:none}.accordion-button{display:block;width:100%;padding:15px;border:none;outline:none;cursor:pointer;background:#f8f9f9;text-align:left;transition:background .2s;font-size:1.2rem;color:#404040}.accordion-button--active{background:#f1f1f1}\n"] }]
|
|
@@ -139,12 +139,18 @@ export class ShellService {
|
|
|
139
139
|
});
|
|
140
140
|
}
|
|
141
141
|
stopResizing() {
|
|
142
|
+
const mainContent = document.querySelector('.main-content');
|
|
143
|
+
const sideNav = document.querySelector('.cds--side-nav__navigation');
|
|
142
144
|
this.renderer.removeStyle(document.body, 'user-select');
|
|
143
145
|
this.renderer.removeStyle(document.body, 'cursor');
|
|
144
146
|
this._isResizing$.next(false);
|
|
145
147
|
this.renderer.removeClass(this._resizeBorderElement$.getValue(), 'resize-hover');
|
|
146
|
-
|
|
147
|
-
|
|
148
|
+
if (sideNav) {
|
|
149
|
+
this.renderer.removeStyle(sideNav, 'pointer-events');
|
|
150
|
+
}
|
|
151
|
+
if (mainContent) {
|
|
152
|
+
this.renderer.removeStyle(mainContent, 'pointer-events');
|
|
153
|
+
}
|
|
148
154
|
localStorage.setItem('sidenavWidth', this._sidenavWidth$.getValue().toString());
|
|
149
155
|
}
|
|
150
156
|
initMenuWidth(config) {
|
|
@@ -165,4 +171,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
165
171
|
providedIn: 'root',
|
|
166
172
|
}]
|
|
167
173
|
}], ctorParameters: function () { return [{ type: i0.RendererFactory2 }, { type: i1.ConfigService }]; } });
|
|
168
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlbGwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vY29tcG9uZW50cy9zcmMvbGliL3NlcnZpY2VzL3NoZWxsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBeUMsTUFBTSxlQUFlLENBQUM7QUFDakYsT0FBTyxFQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBMkIsTUFBTSxNQUFNLENBQUM7QUFDOUYsT0FBTyxFQUFDLFlBQVksRUFBRSxJQUFJLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBTWxELE1BQU0sT0FBTyxZQUFZO0lBdUN2QixZQUNtQixnQkFBa0MsRUFDbEMsYUFBNEI7UUFENUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQXZDOUIsc0JBQWlCLEdBQUcsSUFBSSxlQUFlLENBQVUsSUFBSSxDQUFDLENBQUM7UUFDdkQsb0JBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUN0RCxrQkFBYSxHQUFHLElBQUksZUFBZSxDQUFVLElBQUksQ0FBQyxDQUFDO1FBQ25ELG9CQUFlLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDdEQsbUJBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBUyxHQUFHLENBQUMsQ0FBQztRQUNsRCxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBYyxTQUFTLENBQUMsQ0FBQztRQUMvRCxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBYyxTQUFTLENBQUMsQ0FBQztRQUMvRCwwQkFBcUIsR0FBRyxJQUFJLGVBQWUsQ0FBYyxTQUFTLENBQUMsQ0FBQztRQUNwRSxhQUFRLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsSUFBSSxD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QUcsTUFBTSxFQUFFLGlCQUFpQixDQUFDO1FBQ3BELE1BQU0saUJBQWlCLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMvRCxNQUFNLHVCQUF1QixHQUFHLGlCQUFpQixJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDeEUsTUFBTSxXQUFXLEdBQUcsaUJBQWlCLEVBQUUsZ0JBQWdCLENBQUM7UUFFeEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLElBQUksV0FBVyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxZQUFZLEdBQUcsaUJBQWlCLEVBQUUsWUFBWSxJQUFJLEdBQUcsQ0FBQztRQUMzRCxJQUFJLENBQUMsWUFBWSxHQUFHLGlCQUFpQixFQUFFLFlBQVksSUFBSSxHQUFHLENBQUM7SUFDN0QsQ0FBQzs7MEdBcE1VLFlBQVk7OEdBQVosWUFBWSxjQUZYLE1BQU07NEZBRVAsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIE9uRGVzdHJveSwgUmVuZGVyZXIyLCBSZW5kZXJlckZhY3RvcnkyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmcm9tRXZlbnQsIG1hcCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCB0YWtlfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0NvbmZpZ1NlcnZpY2UsIFZhbHRpbW9Db25maWd9IGZyb20gJ0B2YWx0aW1vL2NvbmZpZyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTaGVsbFNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlbmRlcmVyITogUmVuZGVyZXIyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zaWRlQmFyRXhwYW5kZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFuZWxFeHBhbmRlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGFyZ2VTY3JlZW4kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbW91c2VPblRvcEJhciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2lkZW5hdldpZHRoJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigzMDApO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zaWRlbmF2RWxlbWVudCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEhUTUxFbGVtZW50Pih1bmRlZmluZWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jb250ZW50RWxlbWVudCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEhUTUxFbGVtZW50Pih1bmRlZmluZWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZXNpemVCb3JkZXJFbGVtZW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SFRNTEVsZW1lbnQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21vdXNlWCQgPSBmcm9tRXZlbnQoZG9jdW1lbnQuYm9keSwgJ21vdXNlbW92ZScpLnBpcGUoXG4gICAgbWFwKChlOiBNb3VzZUV2ZW50KSA9PiBlLnBhZ2VYKVxuICApO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc1Jlc2l6aW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHNpZGVuYXZXaWR0aE9uQ2xpY2shOiBudW1iZXI7XG4gIHByaXZhdGUgeE9uQ2xpY2shOiBudW1iZXI7XG4gIHByaXZhdGUgc2lkZW5hdlNpemVTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgbW91c2VYU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIG1vdXNlVXBTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgbWF4TWVudVdpZHRoITogbnVtYmVyO1xuICBwcml2YXRlIG1pbk1lbnVXaWR0aCE6IG51bWJlcjtcblxuICBnZXQgc2lkZUJhckV4cGFuZGVkJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fc2lkZUJhckV4cGFuZGVkJC5hc09ic2VydmFibGUoKTtcbiAgfVxuICBnZXQgcGFuZWxFeHBhbmRlZCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3BhbmVsRXhwYW5kZWQkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG4gIGdldCBsYXJnZVNjcmVlbiQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX2xhcmdlU2NyZWVuJC5hc09ic2VydmFibGUoKTtcbiAgfVxuICBnZXQgbW91c2VPblRvcEJhciQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX21vdXNlT25Ub3BCYXIkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IHNpZGVuYXZXaWR0aCQoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fc2lkZW5hdldpZHRoJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXJGYWN0b3J5MjogUmVuZGVyZXJGYWN0b3J5MixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyRmFjdG9yeTIuY3JlYXRlUmVuZGVyZXIobnVsbCwgbnVsbCk7XG4gICAgdGhpcy5vcGVuU2lkZW5hdlNpemVTdWJzY3JpcHRpb24oKTtcbiAgICB0aGlzLm9wZW5Nb3VzZVN1YnNjcmlwdGlvbnMoKTtcbiAgICB0aGlzLmluaXRNZW51V2lkdGgoY29uZmlnU2VydmljZS5jb25maWcpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zaWRlbmF2U2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgdG9nZ2xlU2lkZUJhcigpOiB2b2lkIHtcbiAgICBjb25zdCBpc0V4cGFuZGVkID0gdGhpcy5fc2lkZUJhckV4cGFuZGVkJC5nZXRWYWx1ZSgpO1xuICAgIHRoaXMuX3NpZGVCYXJFeHBhbmRlZCQubmV4dCghaXNFeHBhbmRlZCk7XG4gIH1cblxuICB0b2dnbGVQYW5lbCgpOiB2b2lkIHtcbiAgICBjb25zdCBpc0V4cGFuZGVkID0gdGhpcy5fcGFuZWxFeHBhbmRlZCQuZ2V0VmFsdWUoKTtcbiAgICB0aGlzLl9wYW5lbEV4cGFuZGVkJC5uZXh0KCFpc0V4cGFuZGVkKTtcbiAgfVxuXG4gIHNldFBhbmVsRXhwYW5kZWQoaXNFeHBhbmRlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX3BhbmVsRXhwYW5kZWQkLm5leHQoaXNFeHBhbmRlZCk7XG4gIH1cblxuICBzZXRTaWRlQmFyRXhwYW5kZWQoaXNFeHBhbmRlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX3NpZGVCYXJFeHBhbmRlZCQubmV4dChpc0V4cGFuZGVkKTtcbiAgfVxuXG4gIHNldExhcmdlU2NyZWVuKGlzTGFyZ2U6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLl9sYXJnZVNjcmVlbiQubmV4dChpc0xhcmdlKTtcbiAgfVxuXG4gIHNldE1vdXNlT25Ub3BCYXIobW91c2VPblRvcEJhcjogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX21vdXNlT25Ub3BCYXIkLm5leHQobW91c2VPblRvcEJhcik7XG4gIH1cblxuICBzZXRTaWRlbmF2RWxlbWVudChlbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuX3NpZGVuYXZFbGVtZW50JC5uZXh0KGVsZW1lbnQpO1xuICAgIHRoaXMuY3JlYXRlUmVzaXplQm9yZGVyRWxlbWVudChlbGVtZW50KTtcbiAgfVxuXG4gIHNldENvbnRlbnRFbGVtZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5fY29udGVudEVsZW1lbnQkLm5leHQoZWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVJlc2l6ZUJvcmRlckVsZW1lbnQoc2lkZW5hdkVsZW1lbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3QgYm9yZGVyRWxlbWVudCA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhib3JkZXJFbGVtZW50LCAncmVzaXplLWJvcmRlcicpO1xuICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoc2lkZW5hdkVsZW1lbnQsIGJvcmRlckVsZW1lbnQpO1xuICAgIHRoaXMuX3Jlc2l6ZUJvcmRlckVsZW1lbnQkLm5leHQoYm9yZGVyRWxlbWVudCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbihib3JkZXJFbGVtZW50LCAnbW91c2VlbnRlcicsICgpID0+IHtcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoYm9yZGVyRWxlbWVudCwgJ3Jlc2l6ZS1ob3ZlcicpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oYm9yZGVyRWxlbWVudCwgJ21vdXNlbGVhdmUnLCAoKSA9PiB7XG4gICAgICB0aGlzLl9pc1Jlc2l6aW5nJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShpc1Jlc2l6aW5nID0+IHtcbiAgICAgICAgaWYgKCFpc1Jlc2l6aW5nKSB7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhib3JkZXJFbGVtZW50LCAncmVzaXplLWhvdmVyJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oYm9yZGVyRWxlbWVudCwgJ21vdXNlZG93bicsIChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgdGhpcy5fc2lkZW5hdldpZHRoJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShzaWRlbmF2V2lkdGggPT4ge1xuICAgICAgICB0aGlzLnNpZGVuYXZXaWR0aE9uQ2xpY2sgPSBzaWRlbmF2V2lkdGg7XG4gICAgICAgIHRoaXMueE9uQ2xpY2sgPSBldmVudC5wYWdlWDtcbiAgICAgICAgdGhpcy5faXNSZXNpemluZyQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShkb2N1bWVudC5ib2R5LCAndXNlci1zZWxlY3QnLCAnbm9uZScpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGRvY3VtZW50LmJvZHksICdjdXJzb3InLCAnY29sLXJlc2l6ZScpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jZHMtLXNpZGUtbmF2X19uYXZpZ2F0aW9uJyksXG4gICAgICAgICAgJ3BvaW50ZXItZXZlbnRzJyxcbiAgICAgICAgICAnbm9uZSdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubWFpbi1jb250ZW50JyksICdwb2ludGVyLWV2ZW50cycsICdub25lJyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlblNpZGVuYXZTaXplU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuc2lkZW5hdlNpemVTdWJzY3JpcHRpb24gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuX2xhcmdlU2NyZWVuJCxcbiAgICAgIHRoaXMuX3NpZGVuYXZXaWR0aCQsXG4gICAgICB0aGlzLl9zaWRlbmF2RWxlbWVudCQsXG4gICAgICB0aGlzLl9jb250ZW50RWxlbWVudCQsXG4gICAgICB0aGlzLl9yZXNpemVCb3JkZXJFbGVtZW50JCxcbiAgICBdKS5zdWJzY3JpYmUoXG4gICAgICAoW2xhcmdlU2NyZWVuLCBzaWRlbmF2V2lkdGgsIHNpZGVuYXZFbGVtZW50LCBjb250ZW50RWxlbWVudCwgcmVzaXplQm9yZGVyRWxlbWVudF0pID0+IHtcbiAgICAgICAgaWYgKCFsYXJnZVNjcmVlbiAmJiBzaWRlbmF2RWxlbWVudCAmJiBjb250ZW50RWxlbWVudCAmJiByZXNpemVCb3JkZXJFbGVtZW50KSB7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZShzaWRlbmF2RWxlbWVudCwgJ21pbi13aWR0aCcpO1xuICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUoc2lkZW5hdkVsZW1lbnQsICd3aWR0aCcpO1xuICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUoc2lkZW5hdkVsZW1lbnQsICd0cmFuc2l0aW9uJyk7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZShjb250ZW50RWxlbWVudCwgJ3BhZGRpbmctbGVmdCcpO1xuICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MocmVzaXplQm9yZGVyRWxlbWVudCwgJ3Jlc2l6ZS1ib3JkZXItLWludmlzaWJsZScpO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIGxhcmdlU2NyZWVuICYmXG4gICAgICAgICAgc2lkZW5hdkVsZW1lbnQgJiZcbiAgICAgICAgICBjb250ZW50RWxlbWVudCAmJlxuICAgICAgICAgIHR5cGVvZiBzaWRlbmF2V2lkdGggPT09ICdudW1iZXInXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IHBpeGVsV2lkdGggPSBgJHtzaWRlbmF2V2lkdGh9cHhgO1xuICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoc2lkZW5hdkVsZW1lbnQsICdtaW4td2lkdGgnLCBgJHtwaXhlbFdpZHRofWApO1xuICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoc2lkZW5hdkVsZW1lbnQsICd3aWR0aCcsIGAke3BpeGVsV2lkdGh9YCk7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShzaWRlbmF2RWxlbWVudCwgJ3RyYW5zaXRpb24nLCAnbm9uZScpO1xuICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoY29udGVudEVsZW1lbnQsICdwYWRkaW5nLWxlZnQnLCBgY2FsYygycmVtICsgJHtwaXhlbFdpZHRofSlgKTtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHJlc2l6ZUJvcmRlckVsZW1lbnQsICdyZXNpemUtYm9yZGVyLS1pbnZpc2libGUnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5Nb3VzZVN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5tb3VzZVhTdWJzY3JpcHRpb24gPSBjb21iaW5lTGF0ZXN0KFt0aGlzLl9tb3VzZVgkLCB0aGlzLl9pc1Jlc2l6aW5nJF0pXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoMykpXG4gICAgICAuc3Vic2NyaWJlKChbeCwgaXNSZXNpemluZ10pID0+IHtcbiAgICAgICAgaWYgKGlzUmVzaXppbmcpIHtcbiAgICAgICAgICBjb25zdCBvZmZTZXRXaWR0aCA9IHRoaXMueE9uQ2xpY2sgLSB4O1xuICAgICAgICAgIGNvbnN0IG5ld1NpZGVuYXZXaWR0aCA9IHRoaXMuc2lkZW5hdldpZHRoT25DbGljayAtIG9mZlNldFdpZHRoO1xuXG4gICAgICAgICAgaWYgKG5ld1NpZGVuYXZXaWR0aCA8PSB0aGlzLm1heE1lbnVXaWR0aCAmJiBuZXdTaWRlbmF2V2lkdGggPj0gdGhpcy5taW5NZW51V2lkdGgpIHtcbiAgICAgICAgICAgIHRoaXMuX3NpZGVuYXZXaWR0aCQubmV4dChuZXdTaWRlbmF2V2lkdGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLm1vdXNlVXBTdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdtb3VzZXVwJykuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuc3RvcFJlc2l6aW5nKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHN0b3BSZXNpemluZygpOiB2b2lkIHtcbiAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKGRvY3VtZW50LmJvZHksICd1c2VyLXNlbGVjdCcpO1xuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUoZG9jdW1lbnQuYm9keSwgJ2N1cnNvcicpO1xuICAgIHRoaXMuX2lzUmVzaXppbmckLm5leHQoZmFsc2UpO1xuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5fcmVzaXplQm9yZGVyRWxlbWVudCQuZ2V0VmFsdWUoKSwgJ3Jlc2l6ZS1ob3ZlcicpO1xuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUoXG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY2RzLS1zaWRlLW5hdl9fbmF2aWdhdGlvbicpLFxuICAgICAgJ3BvaW50ZXItZXZlbnRzJ1xuICAgICk7XG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubWFpbi1jb250ZW50JyksICdwb2ludGVyLWV2ZW50cycpO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdzaWRlbmF2V2lkdGgnLCB0aGlzLl9zaWRlbmF2V2lkdGgkLmdldFZhbHVlKCkudG9TdHJpbmcoKSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRNZW51V2lkdGgoY29uZmlnOiBWYWx0aW1vQ29uZmlnKTogdm9pZCB7XG4gICAgY29uc3QgY3VzdG9tTGVmdFNpZGViYXIgPSBjb25maWc/LmN1c3RvbUxlZnRTaWRlYmFyO1xuICAgIGNvbnN0IGxvY2FsU3RvcmFnZVdpZHRoID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3NpZGVuYXZXaWR0aCcpO1xuICAgIGNvbnN0IGxvY2FsU3RvcmFnZVdpZHRoTnVtYmVyID0gbG9jYWxTdG9yYWdlV2lkdGggJiYgK2xvY2FsU3RvcmFnZVdpZHRoO1xuICAgIGNvbnN0IGNvbmZpZ1dpZHRoID0gY3VzdG9tTGVmdFNpZGViYXI/LmRlZmF1bHRNZW51V2lkdGg7XG5cbiAgICB0aGlzLl9zaWRlbmF2V2lkdGgkLm5leHQobG9jYWxTdG9yYWdlV2lkdGhOdW1iZXIgfHwgY29uZmlnV2lkdGggfHwgMjU2KTtcbiAgICB0aGlzLm1pbk1lbnVXaWR0aCA9IGN1c3RvbUxlZnRTaWRlYmFyPy5taW5NZW51V2lkdGggfHwgMTUwO1xuICAgIHRoaXMubWF4TWVudVdpZHRoID0gY3VzdG9tTGVmdFNpZGViYXI/Lm1heE1lbnVXaWR0aCB8fCA1MDA7XG4gIH1cbn1cbiJdfQ==
|
|
174
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlbGwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vY29tcG9uZW50cy9zcmMvbGliL3NlcnZpY2VzL3NoZWxsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBeUMsTUFBTSxlQUFlLENBQUM7QUFDakYsT0FBTyxFQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBMkIsTUFBTSxNQUFNLENBQUM7QUFDOUYsT0FBTyxFQUFDLFlBQVksRUFBRSxJQUFJLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBTWxELE1BQU0sT0FBTyxZQUFZO0lBdUN2QixZQUNtQixnQkFBa0MsRUFDbEMsYUFBNEI7UUFENUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQXZDOUIsc0JBQWlCLEdBQUcsSUFBSSxlQUFlLENBQVUsSUFBSSxDQUFDLENBQUM7UUFDdkQsb0JBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUN0RCxrQkFBYSxHQUFHLElBQUksZUFBZSxDQUFVLElBQUksQ0FBQyxDQUFDO1FBQ25ELG9CQUFlLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDdEQsbUJBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBUyxHQUFHLENBQUMsQ0FBQztRQUNsRCxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBYyxTQUFTLENBQUMsQ0FBQztRQUMvRCxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBYyxTQUFTLENBQUMsQ0FBQztRQUMvRCwwQkFBcUIsR0FBRyxJQUFJLGVBQWUsQ0FBYyxTQUFTLENBQUMsQ0FBQztRQUNwRSxhQUFRLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUNwRSxHQUFHLENBQUMsQ0FBQyxDQUFhLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FDaEMsQ0FBQztRQUNlLGlCQUFZLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUE4QmxFLElBQUksQ0FBQyxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBekJELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQy9DLENBQUM7SUFDRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFDRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUNELElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBWUQsV0FBVztRQUNULElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRUQsYUFBYTtRQUNYLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNyRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELFdBQVc7UUFDVCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ25ELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELGdCQUFnQixDQUFDLFVBQW1CO1FBQ2xDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxVQUFtQjtRQUNwQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxjQUFjLENBQUMsT0FBZ0I7UUFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELGdCQUFnQixDQUFDLGFBQXNCO1FBQ3JDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxPQUFvQjtRQUNwQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsT0FBb0I7UUFDcEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRU8seUJBQXlCLENBQUMsY0FBMkI7UUFDM0QsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRS9DLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFO1lBQ3JELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFO1lBQ3JELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDckQsSUFBSSxDQUFDLFVBQVUsRUFBRTtvQkFDZixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsY0FBYyxDQUFDLENBQUM7aUJBQzFEO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsQ0FBQyxLQUFpQixFQUFFLEVBQUU7WUFDckUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUN6RCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsWUFBWSxDQUFDO2dCQUN4QyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDN0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7Z0JBQzlELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUNwQixRQUFRLENBQUMsYUFBYSxDQUFDLDRCQUE0QixDQUFDLEVBQ3BELGdCQUFnQixFQUNoQixNQUFNLENBQ1AsQ0FBQztnQkFDRixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzVGLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sMkJBQTJCO1FBQ2pDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxhQUFhLENBQUM7WUFDM0MsSUFBSSxDQUFDLGFBQWE7WUFDbEIsSUFBSSxDQUFDLGNBQWM7WUFDbkIsSUFBSSxDQUFDLGdCQUFnQjtZQUNyQixJQUFJLENBQUMsZ0JBQWdCO1lBQ3JCLElBQUksQ0FBQyxxQkFBcUI7U0FDM0IsQ0FBQyxDQUFDLFNBQVMsQ0FDVixDQUFDLENBQUMsV0FBVyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixDQUFDLEVBQUUsRUFBRTtZQUNuRixJQUFJLENBQUMsV0FBVyxJQUFJLGNBQWMsSUFBSSxjQUFjLElBQUksbUJBQW1CLEVBQUU7Z0JBQzNFLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUMsQ0FBQztnQkFDdkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUNuRCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLENBQUM7Z0JBQ3hELElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxjQUFjLENBQUMsQ0FBQztnQkFDMUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsMEJBQTBCLENBQUMsQ0FBQzthQUN6RTtpQkFBTSxJQUNMLFdBQVc7Z0JBQ1gsY0FBYztnQkFDZCxjQUFjO2dCQUNkLE9BQU8sWUFBWSxLQUFLLFFBQVEsRUFDaEM7Z0JBQ0EsTUFBTSxVQUFVLEdBQUcsR0FBRyxZQUFZLElBQUksQ0FBQztnQkFDdkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFLFdBQVcsRUFBRSxHQUFHLFVBQVUsRUFBRSxDQUFDLENBQUM7Z0JBQ3JFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxPQUFPLEVBQUUsR0FBRyxVQUFVLEVBQUUsQ0FBQyxDQUFDO2dCQUNqRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUM3RCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsY0FBYyxFQUFFLGVBQWUsVUFBVSxHQUFHLENBQUMsQ0FBQztnQkFDckYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsbUJBQW1CLEVBQUUsMEJBQTBCLENBQUMsQ0FBQzthQUM1RTtRQUNILENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVPLHNCQUFzQjtRQUM1QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDeEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNyQixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFO1lBQzdCLElBQUksVUFBVSxFQUFFO2dCQUNkLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO2dCQUN0QyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsV0FBVyxDQUFDO2dCQUUvRCxJQUFJLGVBQWUsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLGVBQWUsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO29CQUNoRixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztpQkFDM0M7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUN2RSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sWUFBWTtRQUNsQixNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzVELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUVyRSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBRWpGLElBQUksT0FBTyxFQUFFO1lBQ1gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLGdCQUFnQixDQUFDLENBQUM7U0FDdEQ7UUFFRCxJQUFJLFdBQVcsRUFBRTtZQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1NBQzFEO1FBQ0QsWUFBWSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFTyxhQUFhLENBQUMsTUFBcUI7UUFDekMsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLEVBQUUsaUJBQWlCLENBQUM7UUFDcEQsTUFBTSxpQkFBaUIsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sdUJBQXVCLEdBQUcsaUJBQWlCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUN4RSxNQUFNLFdBQVcsR0FBRyxpQkFBaUIsRUFBRSxnQkFBZ0IsQ0FBQztRQUV4RCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsSUFBSSxXQUFXLElBQUksR0FBRyxDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLFlBQVksR0FBRyxpQkFBaUIsRUFBRSxZQUFZLElBQUksR0FBRyxDQUFDO1FBQzNELElBQUksQ0FBQyxZQUFZLEdBQUcsaUJBQWlCLEVBQUUsWUFBWSxJQUFJLEdBQUcsQ0FBQztJQUM3RCxDQUFDOzswR0ExTVUsWUFBWTs4R0FBWixZQUFZLGNBRlgsTUFBTTs0RkFFUCxZQUFZO2tCQUh4QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgT25EZXN0cm95LCBSZW5kZXJlcjIsIFJlbmRlcmVyRmFjdG9yeTJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGZyb21FdmVudCwgbWFwLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIHRha2V9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7Q29uZmlnU2VydmljZSwgVmFsdGltb0NvbmZpZ30gZnJvbSAnQHZhbHRpbW8vY29uZmlnJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFNoZWxsU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVuZGVyZXIhOiBSZW5kZXJlcjI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NpZGVCYXJFeHBhbmRlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYW5lbEV4cGFuZGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9sYXJnZVNjcmVlbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tb3VzZU9uVG9wQmFyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zaWRlbmF2V2lkdGgkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDMwMCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NpZGVuYXZFbGVtZW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SFRNTEVsZW1lbnQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbnRlbnRFbGVtZW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SFRNTEVsZW1lbnQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Jlc2l6ZUJvcmRlckVsZW1lbnQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxIVE1MRWxlbWVudD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbW91c2VYJCA9IGZyb21FdmVudChkb2N1bWVudC5ib2R5LCAnbW91c2Vtb3ZlJykucGlwZShcbiAgICBtYXAoKGU6IE1vdXNlRXZlbnQpID0+IGUucGFnZVgpXG4gICk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzUmVzaXppbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgc2lkZW5hdldpZHRoT25DbGljayE6IG51bWJlcjtcbiAgcHJpdmF0ZSB4T25DbGljayE6IG51bWJlcjtcbiAgcHJpdmF0ZSBzaWRlbmF2U2l6ZVN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBtb3VzZVhTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgbW91c2VVcFN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBtYXhNZW51V2lkdGghOiBudW1iZXI7XG4gIHByaXZhdGUgbWluTWVudVdpZHRoITogbnVtYmVyO1xuXG4gIGdldCBzaWRlQmFyRXhwYW5kZWQkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9zaWRlQmFyRXhwYW5kZWQkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG4gIGdldCBwYW5lbEV4cGFuZGVkJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcGFuZWxFeHBhbmRlZCQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cbiAgZ2V0IGxhcmdlU2NyZWVuJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fbGFyZ2VTY3JlZW4kLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG4gIGdldCBtb3VzZU9uVG9wQmFyJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fbW91c2VPblRvcEJhciQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgc2lkZW5hdldpZHRoJCgpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9zaWRlbmF2V2lkdGgkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSByZW5kZXJlckZhY3RvcnkyOiBSZW5kZXJlckZhY3RvcnkyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZVxuICApIHtcbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXJGYWN0b3J5Mi5jcmVhdGVSZW5kZXJlcihudWxsLCBudWxsKTtcbiAgICB0aGlzLm9wZW5TaWRlbmF2U2l6ZVN1YnNjcmlwdGlvbigpO1xuICAgIHRoaXMub3Blbk1vdXNlU3Vic2NyaXB0aW9ucygpO1xuICAgIHRoaXMuaW5pdE1lbnVXaWR0aChjb25maWdTZXJ2aWNlLmNvbmZpZyk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnNpZGVuYXZTaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICB0b2dnbGVTaWRlQmFyKCk6IHZvaWQge1xuICAgIGNvbnN0IGlzRXhwYW5kZWQgPSB0aGlzLl9zaWRlQmFyRXhwYW5kZWQkLmdldFZhbHVlKCk7XG4gICAgdGhpcy5fc2lkZUJhckV4cGFuZGVkJC5uZXh0KCFpc0V4cGFuZGVkKTtcbiAgfVxuXG4gIHRvZ2dsZVBhbmVsKCk6IHZvaWQge1xuICAgIGNvbnN0IGlzRXhwYW5kZWQgPSB0aGlzLl9wYW5lbEV4cGFuZGVkJC5nZXRWYWx1ZSgpO1xuICAgIHRoaXMuX3BhbmVsRXhwYW5kZWQkLm5leHQoIWlzRXhwYW5kZWQpO1xuICB9XG5cbiAgc2V0UGFuZWxFeHBhbmRlZChpc0V4cGFuZGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5fcGFuZWxFeHBhbmRlZCQubmV4dChpc0V4cGFuZGVkKTtcbiAgfVxuXG4gIHNldFNpZGVCYXJFeHBhbmRlZChpc0V4cGFuZGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5fc2lkZUJhckV4cGFuZGVkJC5uZXh0KGlzRXhwYW5kZWQpO1xuICB9XG5cbiAgc2V0TGFyZ2VTY3JlZW4oaXNMYXJnZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX2xhcmdlU2NyZWVuJC5uZXh0KGlzTGFyZ2UpO1xuICB9XG5cbiAgc2V0TW91c2VPblRvcEJhcihtb3VzZU9uVG9wQmFyOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5fbW91c2VPblRvcEJhciQubmV4dChtb3VzZU9uVG9wQmFyKTtcbiAgfVxuXG4gIHNldFNpZGVuYXZFbGVtZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5fc2lkZW5hdkVsZW1lbnQkLm5leHQoZWxlbWVudCk7XG4gICAgdGhpcy5jcmVhdGVSZXNpemVCb3JkZXJFbGVtZW50KGVsZW1lbnQpO1xuICB9XG5cbiAgc2V0Q29udGVudEVsZW1lbnQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLl9jb250ZW50RWxlbWVudCQubmV4dChlbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUmVzaXplQm9yZGVyRWxlbWVudChzaWRlbmF2RWxlbWVudDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICBjb25zdCBib3JkZXJFbGVtZW50ID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGJvcmRlckVsZW1lbnQsICdyZXNpemUtYm9yZGVyJyk7XG4gICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChzaWRlbmF2RWxlbWVudCwgYm9yZGVyRWxlbWVudCk7XG4gICAgdGhpcy5fcmVzaXplQm9yZGVyRWxlbWVudCQubmV4dChib3JkZXJFbGVtZW50KTtcblxuICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKGJvcmRlckVsZW1lbnQsICdtb3VzZWVudGVyJywgKCkgPT4ge1xuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhib3JkZXJFbGVtZW50LCAncmVzaXplLWhvdmVyJyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbihib3JkZXJFbGVtZW50LCAnbW91c2VsZWF2ZScsICgpID0+IHtcbiAgICAgIHRoaXMuX2lzUmVzaXppbmckLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGlzUmVzaXppbmcgPT4ge1xuICAgICAgICBpZiAoIWlzUmVzaXppbmcpIHtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGJvcmRlckVsZW1lbnQsICdyZXNpemUtaG92ZXInKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbihib3JkZXJFbGVtZW50LCAnbW91c2Vkb3duJywgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICB0aGlzLl9zaWRlbmF2V2lkdGgkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHNpZGVuYXZXaWR0aCA9PiB7XG4gICAgICAgIHRoaXMuc2lkZW5hdldpZHRoT25DbGljayA9IHNpZGVuYXZXaWR0aDtcbiAgICAgICAgdGhpcy54T25DbGljayA9IGV2ZW50LnBhZ2VYO1xuICAgICAgICB0aGlzLl9pc1Jlc2l6aW5nJC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGRvY3VtZW50LmJvZHksICd1c2VyLXNlbGVjdCcsICdub25lJyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZG9jdW1lbnQuYm9keSwgJ2N1cnNvcicsICdjb2wtcmVzaXplJyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmNkcy0tc2lkZS1uYXZfX25hdmlnYXRpb24nKSxcbiAgICAgICAgICAncG9pbnRlci1ldmVudHMnLFxuICAgICAgICAgICdub25lJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5tYWluLWNvbnRlbnQnKSwgJ3BvaW50ZXItZXZlbnRzJywgJ25vbmUnKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuU2lkZW5hdlNpemVTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5zaWRlbmF2U2l6ZVN1YnNjcmlwdGlvbiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5fbGFyZ2VTY3JlZW4kLFxuICAgICAgdGhpcy5fc2lkZW5hdldpZHRoJCxcbiAgICAgIHRoaXMuX3NpZGVuYXZFbGVtZW50JCxcbiAgICAgIHRoaXMuX2NvbnRlbnRFbGVtZW50JCxcbiAgICAgIHRoaXMuX3Jlc2l6ZUJvcmRlckVsZW1lbnQkLFxuICAgIF0pLnN1YnNjcmliZShcbiAgICAgIChbbGFyZ2VTY3JlZW4sIHNpZGVuYXZXaWR0aCwgc2lkZW5hdkVsZW1lbnQsIGNvbnRlbnRFbGVtZW50LCByZXNpemVCb3JkZXJFbGVtZW50XSkgPT4ge1xuICAgICAgICBpZiAoIWxhcmdlU2NyZWVuICYmIHNpZGVuYXZFbGVtZW50ICYmIGNvbnRlbnRFbGVtZW50ICYmIHJlc2l6ZUJvcmRlckVsZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKHNpZGVuYXZFbGVtZW50LCAnbWluLXdpZHRoJyk7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZShzaWRlbmF2RWxlbWVudCwgJ3dpZHRoJyk7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZShzaWRlbmF2RWxlbWVudCwgJ3RyYW5zaXRpb24nKTtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKGNvbnRlbnRFbGVtZW50LCAncGFkZGluZy1sZWZ0Jyk7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhyZXNpemVCb3JkZXJFbGVtZW50LCAncmVzaXplLWJvcmRlci0taW52aXNpYmxlJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgbGFyZ2VTY3JlZW4gJiZcbiAgICAgICAgICBzaWRlbmF2RWxlbWVudCAmJlxuICAgICAgICAgIGNvbnRlbnRFbGVtZW50ICYmXG4gICAgICAgICAgdHlwZW9mIHNpZGVuYXZXaWR0aCA9PT0gJ251bWJlcidcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgcGl4ZWxXaWR0aCA9IGAke3NpZGVuYXZXaWR0aH1weGA7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShzaWRlbmF2RWxlbWVudCwgJ21pbi13aWR0aCcsIGAke3BpeGVsV2lkdGh9YCk7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShzaWRlbmF2RWxlbWVudCwgJ3dpZHRoJywgYCR7cGl4ZWxXaWR0aH1gKTtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHNpZGVuYXZFbGVtZW50LCAndHJhbnNpdGlvbicsICdub25lJyk7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShjb250ZW50RWxlbWVudCwgJ3BhZGRpbmctbGVmdCcsIGBjYWxjKDJyZW0gKyAke3BpeGVsV2lkdGh9KWApO1xuICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MocmVzaXplQm9yZGVyRWxlbWVudCwgJ3Jlc2l6ZS1ib3JkZXItLWludmlzaWJsZScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgb3Blbk1vdXNlU3Vic2NyaXB0aW9ucygpOiB2b2lkIHtcbiAgICB0aGlzLm1vdXNlWFN1YnNjcmlwdGlvbiA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuX21vdXNlWCQsIHRoaXMuX2lzUmVzaXppbmckXSlcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSgzKSlcbiAgICAgIC5zdWJzY3JpYmUoKFt4LCBpc1Jlc2l6aW5nXSkgPT4ge1xuICAgICAgICBpZiAoaXNSZXNpemluZykge1xuICAgICAgICAgIGNvbnN0IG9mZlNldFdpZHRoID0gdGhpcy54T25DbGljayAtIHg7XG4gICAgICAgICAgY29uc3QgbmV3U2lkZW5hdldpZHRoID0gdGhpcy5zaWRlbmF2V2lkdGhPbkNsaWNrIC0gb2ZmU2V0V2lkdGg7XG5cbiAgICAgICAgICBpZiAobmV3U2lkZW5hdldpZHRoIDw9IHRoaXMubWF4TWVudVdpZHRoICYmIG5ld1NpZGVuYXZXaWR0aCA+PSB0aGlzLm1pbk1lbnVXaWR0aCkge1xuICAgICAgICAgICAgdGhpcy5fc2lkZW5hdldpZHRoJC5uZXh0KG5ld1NpZGVuYXZXaWR0aCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHRoaXMubW91c2VVcFN1YnNjcmlwdGlvbiA9IGZyb21FdmVudChkb2N1bWVudCwgJ21vdXNldXAnKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5zdG9wUmVzaXppbmcoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcFJlc2l6aW5nKCk6IHZvaWQge1xuICAgIGNvbnN0IG1haW5Db250ZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm1haW4tY29udGVudCcpO1xuICAgIGNvbnN0IHNpZGVOYXYgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY2RzLS1zaWRlLW5hdl9fbmF2aWdhdGlvbicpO1xuXG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZShkb2N1bWVudC5ib2R5LCAndXNlci1zZWxlY3QnKTtcbiAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKGRvY3VtZW50LmJvZHksICdjdXJzb3InKTtcbiAgICB0aGlzLl9pc1Jlc2l6aW5nJC5uZXh0KGZhbHNlKTtcbiAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuX3Jlc2l6ZUJvcmRlckVsZW1lbnQkLmdldFZhbHVlKCksICdyZXNpemUtaG92ZXInKTtcblxuICAgIGlmIChzaWRlTmF2KSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKHNpZGVOYXYsICdwb2ludGVyLWV2ZW50cycpO1xuICAgIH1cblxuICAgIGlmIChtYWluQ29udGVudCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZShtYWluQ29udGVudCwgJ3BvaW50ZXItZXZlbnRzJyk7XG4gICAgfVxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdzaWRlbmF2V2lkdGgnLCB0aGlzLl9zaWRlbmF2V2lkdGgkLmdldFZhbHVlKCkudG9TdHJpbmcoKSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRNZW51V2lkdGgoY29uZmlnOiBWYWx0aW1vQ29uZmlnKTogdm9pZCB7XG4gICAgY29uc3QgY3VzdG9tTGVmdFNpZGViYXIgPSBjb25maWc/LmN1c3RvbUxlZnRTaWRlYmFyO1xuICAgIGNvbnN0IGxvY2FsU3RvcmFnZVdpZHRoID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3NpZGVuYXZXaWR0aCcpO1xuICAgIGNvbnN0IGxvY2FsU3RvcmFnZVdpZHRoTnVtYmVyID0gbG9jYWxTdG9yYWdlV2lkdGggJiYgK2xvY2FsU3RvcmFnZVdpZHRoO1xuICAgIGNvbnN0IGNvbmZpZ1dpZHRoID0gY3VzdG9tTGVmdFNpZGViYXI/LmRlZmF1bHRNZW51V2lkdGg7XG5cbiAgICB0aGlzLl9zaWRlbmF2V2lkdGgkLm5leHQobG9jYWxTdG9yYWdlV2lkdGhOdW1iZXIgfHwgY29uZmlnV2lkdGggfHwgMjU2KTtcbiAgICB0aGlzLm1pbk1lbnVXaWR0aCA9IGN1c3RvbUxlZnRTaWRlYmFyPy5taW5NZW51V2lkdGggfHwgMTUwO1xuICAgIHRoaXMubWF4TWVudVdpZHRoID0gY3VzdG9tTGVmdFNpZGViYXI/Lm1heE1lbnVXaWR0aCB8fCA1MDA7XG4gIH1cbn1cbiJdfQ==
|