@valtimo/components 12.5.1 → 12.6.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/formio-carbon.scss +4 -0
- package/esm2022/lib/components/carbon-list/carbon-list.component.mjs +20 -21
- package/esm2022/lib/components/carbon-list/carbon-list.module.mjs +4 -2
- package/esm2022/lib/components/form-io/form-io-currency/currency-edit-form.mjs +96 -0
- package/esm2022/lib/components/form-io/form-io-currency/currency.component.mjs +105 -0
- package/esm2022/lib/components/form-io/form-io-currency/currency.formio.mjs +24 -0
- package/esm2022/lib/components/form-io/form-io.module.mjs +6 -1
- package/esm2022/lib/components/input/input.component.mjs +8 -2
- package/esm2022/lib/components/multi-input/carbon-multi-input.component.mjs +3 -3
- package/esm2022/lib/components/search-fields/search-fields.component.mjs +1 -1
- package/esm2022/lib/components/timeline/timeline.component.mjs +3 -3
- package/esm2022/lib/components/value-path-selector/value-path-selector.component.mjs +2 -2
- package/esm2022/lib/components/view-content/type-converters/booleanTypeConverter.mjs +2 -2
- package/esm2022/lib/components/view-content/type-converters/dateTimeTypeConverter.mjs +3 -3
- package/esm2022/lib/components/view-content/type-converters/stringTypeConverter.mjs +5 -1
- package/esm2022/lib/pipes/ellipsis.pipe.mjs +16 -0
- package/esm2022/lib/pipes/index.mjs +2 -1
- package/esm2022/lib/services/valtimo-modal.service.mjs +3 -2
- package/esm2022/public_api.mjs +3 -1
- package/fesm2022/valtimo-components.mjs +326 -83
- package/fesm2022/valtimo-components.mjs.map +1 -1
- package/lib/components/carbon-list/carbon-list.component.d.ts +3 -2
- package/lib/components/carbon-list/carbon-list.component.d.ts.map +1 -1
- package/lib/components/carbon-list/carbon-list.module.d.ts.map +1 -1
- package/lib/components/form-io/form-io-currency/currency-edit-form.d.ts +4 -0
- package/lib/components/form-io/form-io-currency/currency-edit-form.d.ts.map +1 -0
- package/lib/components/form-io/form-io-currency/currency.component.d.ts +30 -0
- package/lib/components/form-io/form-io-currency/currency.component.d.ts.map +1 -0
- package/lib/components/form-io/form-io-currency/currency.formio.d.ts +3 -0
- package/lib/components/form-io/form-io-currency/currency.formio.d.ts.map +1 -0
- package/lib/components/form-io/form-io.module.d.ts +14 -13
- package/lib/components/form-io/form-io.module.d.ts.map +1 -1
- package/lib/components/input/input.component.d.ts +2 -1
- package/lib/components/input/input.component.d.ts.map +1 -1
- package/lib/components/view-content/type-converters/stringTypeConverter.d.ts.map +1 -1
- package/lib/pipes/ellipsis.pipe.d.ts +8 -0
- package/lib/pipes/ellipsis.pipe.d.ts.map +1 -0
- package/lib/pipes/index.d.ts +1 -0
- package/lib/pipes/index.d.ts.map +1 -1
- package/lib/services/valtimo-modal.service.d.ts.map +1 -1
- package/package.json +3 -2
- package/public_api.d.ts +2 -0
- package/public_api.d.ts.map +1 -1
|
@@ -185,11 +185,11 @@ export class CarbonMultiInputComponent {
|
|
|
185
185
|
return Array(length).fill(0);
|
|
186
186
|
}
|
|
187
187
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CarbonMultiInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
188
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CarbonMultiInputComponent, selector: "valtimo-carbon-multi-input", inputs: { name: "name", title: "title", titleTranslationKey: "titleTranslationKey", type: "type", arbitraryValueAmount: "arbitraryValueAmount", arbitraryAmountTitles: "arbitraryAmountTitles", initialAmountOfRows: "initialAmountOfRows", minimumAmountOfRows: "minimumAmountOfRows", maxRows: "maxRows", addRowText: "addRowText", addRowTranslationKey: "addRowTranslationKey", deleteRowText: "deleteRowText", deleteRowTranslationKey: "deleteRowTranslationKey", disabled: "disabled", defaultValues: "defaultValues", margin: "margin", tooltip: "tooltip", required: "required", keyColumnTitle: "keyColumnTitle", valueColumnTitle: "valueColumnTitle", dropdownColumnTitle: "dropdownColumnTitle", hideDeleteButton: "hideDeleteButton", hideAddButton: "hideAddButton", dropdownItems: "dropdownItems", dropdownWidth: "dropdownWidth", fullWidth: "fullWidth", carbonTheme: "carbonTheme" }, outputs: { valueChange: "valueChange", allValuesValidEvent: "allValuesValidEvent" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 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\n *ngIf=\"{\n addRowText:\n addRowText || addRowTranslationKey\n ? addRowTranslationKey\n ? (addRowTranslationKey | translate)\n : addRowText\n : ('interface.addRow' | translate),\n deleteRowText:\n deleteRowText || deleteRowTranslationKey\n ? deleteRowTranslationKey\n ? (deleteRowTranslationKey | translate)\n : deleteRowText\n : ('interface.deleteRow' | translate),\n } as vars\"\n [ngClass]=\"{'v-multi-input--margin': margin, 'v-multi-input--no-delete-button': hideDeleteButton}\"\n class=\"v-multi-input\"\n>\n <v-input-label\n *ngIf=\"title || titleTranslationKey\"\n [name]=\"name\"\n [required]=\"required\"\n [titleTranslationKey]=\"titleTranslationKey\"\n [title]=\"title\"\n [tooltip]=\"tooltip\"\n >\n </v-input-label>\n\n <div class=\"v-multi-input__rows\">\n <div\n *ngFor=\"let value of values$ | async as values; trackBy: trackByFn; index as i\"\n class=\"v-multi-input__row\"\n >\n <ng-container *ngIf=\"type === 'value'\">\n <ng-container *ngTemplateOutlet=\"singleValue; context: {value: value}\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"type === 'keyValue'\">\n <ng-container\n *ngTemplateOutlet=\"keyValue; context: {value: value, index: i}\"\n ></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"type === 'keyDropdownValue'\">\n <ng-container\n *ngTemplateOutlet=\"keyDropdownValue; context: {value: value, index: i}\"\n ></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"type === 'arbitraryAmount'\">\n <ng-container\n *ngTemplateOutlet=\"arbitraryAmountValue; context: {value: value, index: i}\"\n ></ng-container>\n </ng-container>\n\n <button\n *ngIf=\"!hideDeleteButton\"\n cdsButton=\"danger\"\n [disabled]=\"values?.length <= this.minimumAmountOfRows || disabled\"\n [iconOnly]=\"true\"\n size=\"md\"\n (click)=\"deleteRow(value.uuid)\"\n [title]=\"vars.deleteRowText\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </div>\n\n <div class=\"v-multi-input__add-button\">\n <button\n *ngIf=\"!hideAddButton\"\n cdsButton=\"primary\"\n size=\"md\"\n [disabled]=\"(addRowEnabled$ | async) === false || disabled\"\n (click)=\"addRow()\"\n >\n {{ vars.addRowText }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n </div>\n </div>\n</div>\n\n<ng-template #singleValue let-value=\"value\">\n <div class=\"v-multi-input__input\" [ngClass]=\"{'--full-width': fullWidth}\">\n <input\n cdsText\n [defaultValue]=\"value.value\"\n [disabled]=\"disabled\"\n (change)=\"onValueChange(value, $event, 'value')\"\n />\n </div>\n</ng-template>\n\n<ng-template #keyValue let-value=\"value\" let-index=\"index\">\n <div class=\"v-multi-input__input\" [ngClass]=\"{'--full-width': fullWidth}\">\n <cds-label *ngIf=\"index === 0 && keyColumnTitle && valueColumnTitle\">{{\n keyColumnTitle\n }}</cds-label>\n\n <input\n cdsText\n [defaultValue]=\"value.key\"\n [disabled]=\"disabled\"\n (input)=\"onValueChange(value, $event.target.value, 'key')\"\n />\n </div>\n <div class=\"v-multi-input__input\" [ngClass]=\"{'--full-width': fullWidth}\">\n <cds-label *ngIf=\"index === 0 && keyColumnTitle && valueColumnTitle\">{{\n valueColumnTitle\n }}</cds-label>\n <input\n cdsText\n [defaultValue]=\"value.value\"\n [disabled]=\"disabled\"\n (input)=\"onValueChange(value, $event.target.value, 'value')\"\n />\n </div>\n</ng-template>\n\n<ng-template #arbitraryAmountValue let-value=\"value\" let-index=\"index\">\n <div\n class=\"v-multi-input__input\"\n [ngClass]=\"{'--full-width': fullWidth}\"\n *ngFor=\"let _ of amountOfArbitraryValuesArray$ | async; index as i\"\n >\n <cds-label *ngIf=\"index === 0\">{{\n arbitraryAmountTitles ? arbitraryAmountTitles[i] : ''\n }}</cds-label>\n\n <input\n cdsText\n [defaultValue]=\"value ? value['' + i] : ''\"\n [disabled]=\"disabled\"\n (input)=\"onValueChange(value, $event.target.value, 'arbitrary', i)\"\n />\n </div>\n</ng-template>\n\n<ng-template #keyDropdownValue let-value=\"value\" let-index=\"index\">\n <div [ngClass]=\"{'--full-width': fullWidth}\" class=\"v-multi-input__input\">\n <cds-label *ngIf=\"index === 0 && keyColumnTitle\">{{ keyColumnTitle }}</cds-label>\n\n <input\n cdsText\n [defaultValue]=\"value.key\"\n [disabled]=\"disabled\"\n (input)=\"onValueChange(value, $event.target.value, 'key')\"\n />\n </div>\n\n <div [style.minWidth.px]=\"dropdownWidth\" class=\"v-multi-input__input\">\n <cds-label *ngIf=\"index === 0 && dropdownColumnTitle\">{{ dropdownColumnTitle }}</cds-label>\n\n <cds-dropdown\n (selected)=\"onValueChange(value, $event.item.id, 'dropdown')\"\n [appendInline]=\"true\"\n >\n <cds-dropdown-list\n [items]=\"getDropdownItemsForRow(index) | async\"\n type=\"multi\"\n ></cds-dropdown-list>\n </cds-dropdown>\n </div>\n\n <div [ngClass]=\"{'--full-width': fullWidth}\" class=\"v-multi-input__input\">\n <cds-label *ngIf=\"index === 0 && valueColumnTitle\">{{ valueColumnTitle }}</cds-label>\n\n <input\n cdsText\n [defaultValue]=\"value.value\"\n [disabled]=\"disabled\"\n (input)=\"onValueChange(value, $event.target.value, 'value')\"\n />\n </div>\n</ng-template>\n", styles: [".v-multi-input--margin{margin-block-end:var(--v-input-margin)}.v-multi-input__row{display:flex;flex-direction:row;align-items:flex-end;margin-block-end:var(--v-multi-input-row-spacing-block)}.v-multi-input__input{margin-inline-end:var(--v-multi-input-input-spacing-inline)}.v-multi-input__input.--full-width{width:100%}.v-multi-input--no-delete-button .v-multi-input__input:last-child{margin-inline-end:0}\n/*!\n * Copyright 2015-2024 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"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.InputLabelComponent, selector: "v-input-label", inputs: ["name", "tooltip", "largeMargin", "small", "noMargin", "title", "titleTranslationKey", "required", "disabled", "carbonTheme"] }, { kind: "directive", type: i3.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i3.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i3.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i3.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "component", type: i3.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "hideLabel", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i3.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] }); }
|
|
188
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CarbonMultiInputComponent, selector: "valtimo-carbon-multi-input", inputs: { name: "name", title: "title", titleTranslationKey: "titleTranslationKey", type: "type", arbitraryValueAmount: "arbitraryValueAmount", arbitraryAmountTitles: "arbitraryAmountTitles", initialAmountOfRows: "initialAmountOfRows", minimumAmountOfRows: "minimumAmountOfRows", maxRows: "maxRows", addRowText: "addRowText", addRowTranslationKey: "addRowTranslationKey", deleteRowText: "deleteRowText", deleteRowTranslationKey: "deleteRowTranslationKey", disabled: "disabled", defaultValues: "defaultValues", margin: "margin", tooltip: "tooltip", required: "required", keyColumnTitle: "keyColumnTitle", valueColumnTitle: "valueColumnTitle", dropdownColumnTitle: "dropdownColumnTitle", hideDeleteButton: "hideDeleteButton", hideAddButton: "hideAddButton", dropdownItems: "dropdownItems", dropdownWidth: "dropdownWidth", fullWidth: "fullWidth", carbonTheme: "carbonTheme" }, outputs: { valueChange: "valueChange", allValuesValidEvent: "allValuesValidEvent" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 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\n *ngIf=\"{\n addRowText:\n addRowText || addRowTranslationKey\n ? addRowTranslationKey\n ? (addRowTranslationKey | translate)\n : addRowText\n : ('interface.addRow' | translate),\n deleteRowText:\n deleteRowText || deleteRowTranslationKey\n ? deleteRowTranslationKey\n ? (deleteRowTranslationKey | translate)\n : deleteRowText\n : ('interface.deleteRow' | translate),\n } as vars\"\n [ngClass]=\"{'v-multi-input--margin': margin, 'v-multi-input--no-delete-button': hideDeleteButton}\"\n class=\"v-multi-input\"\n>\n <v-input-label\n *ngIf=\"title || titleTranslationKey\"\n [name]=\"name\"\n [required]=\"required\"\n [titleTranslationKey]=\"titleTranslationKey\"\n [title]=\"title\"\n [tooltip]=\"tooltip\"\n >\n </v-input-label>\n\n <div class=\"v-multi-input__rows\">\n <div\n *ngFor=\"let value of values$ | async as values; trackBy: trackByFn; index as i\"\n class=\"v-multi-input__row\"\n >\n <ng-container *ngIf=\"type === 'value'\">\n <ng-container *ngTemplateOutlet=\"singleValue; context: {value: value}\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"type === 'keyValue'\">\n <ng-container\n *ngTemplateOutlet=\"keyValue; context: {value: value, index: i}\"\n ></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"type === 'keyDropdownValue'\">\n <ng-container\n *ngTemplateOutlet=\"keyDropdownValue; context: {value: value, index: i}\"\n ></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"type === 'arbitraryAmount'\">\n <ng-container\n *ngTemplateOutlet=\"arbitraryAmountValue; context: {value: value, index: i}\"\n ></ng-container>\n </ng-container>\n\n <button\n *ngIf=\"!hideDeleteButton\"\n cdsButton=\"danger\"\n [disabled]=\"values?.length <= this.minimumAmountOfRows || disabled\"\n [iconOnly]=\"true\"\n size=\"md\"\n (click)=\"deleteRow(value.uuid)\"\n [title]=\"vars.deleteRowText\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </div>\n\n <div class=\"v-multi-input__add-button\">\n <button\n *ngIf=\"!hideAddButton\"\n cdsButton=\"primary\"\n size=\"md\"\n [disabled]=\"(addRowEnabled$ | async) === false || disabled\"\n (click)=\"addRow()\"\n >\n {{ vars.addRowText }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n </div>\n </div>\n</div>\n\n<ng-template #singleValue let-value=\"value\">\n <div class=\"v-multi-input__input\" [ngClass]=\"{'--full-width': fullWidth}\">\n <input\n cdsText\n [defaultValue]=\"value.value\"\n [disabled]=\"disabled\"\n (change)=\"onValueChange(value, $event.target.value, 'value')\"\n />\n </div>\n</ng-template>\n\n<ng-template #keyValue let-value=\"value\" let-index=\"index\">\n <div class=\"v-multi-input__input\" [ngClass]=\"{'--full-width': fullWidth}\">\n <cds-label *ngIf=\"index === 0 && keyColumnTitle && valueColumnTitle\">{{\n keyColumnTitle\n }}</cds-label>\n\n <input\n cdsText\n [defaultValue]=\"value.key\"\n [disabled]=\"disabled\"\n (input)=\"onValueChange(value, $event.target.value, 'key')\"\n />\n </div>\n <div class=\"v-multi-input__input\" [ngClass]=\"{'--full-width': fullWidth}\">\n <cds-label *ngIf=\"index === 0 && keyColumnTitle && valueColumnTitle\">{{\n valueColumnTitle\n }}</cds-label>\n <input\n cdsText\n [defaultValue]=\"value.value\"\n [disabled]=\"disabled\"\n (input)=\"onValueChange(value, $event.target.value, 'value')\"\n />\n </div>\n</ng-template>\n\n<ng-template #arbitraryAmountValue let-value=\"value\" let-index=\"index\">\n <div\n class=\"v-multi-input__input\"\n [ngClass]=\"{'--full-width': fullWidth}\"\n *ngFor=\"let _ of amountOfArbitraryValuesArray$ | async; index as i\"\n >\n <cds-label *ngIf=\"index === 0\">{{\n arbitraryAmountTitles ? arbitraryAmountTitles[i] : ''\n }}</cds-label>\n\n <input\n cdsText\n [defaultValue]=\"value ? value['' + i] : ''\"\n [disabled]=\"disabled\"\n (input)=\"onValueChange(value, $event.target.value, 'arbitrary', i)\"\n />\n </div>\n</ng-template>\n\n<ng-template #keyDropdownValue let-value=\"value\" let-index=\"index\">\n <div [ngClass]=\"{'--full-width': fullWidth}\" class=\"v-multi-input__input\">\n <cds-label *ngIf=\"index === 0 && keyColumnTitle\">{{ keyColumnTitle }}</cds-label>\n\n <input\n cdsText\n [defaultValue]=\"value.key\"\n [disabled]=\"disabled\"\n (input)=\"onValueChange(value, $event.target.value, 'key')\"\n />\n </div>\n\n <div [style.minWidth.px]=\"dropdownWidth\" class=\"v-multi-input__input\">\n <cds-label *ngIf=\"index === 0 && dropdownColumnTitle\">{{ dropdownColumnTitle }}</cds-label>\n\n <cds-dropdown\n (selected)=\"onValueChange(value, $event.item.id, 'dropdown')\"\n [appendInline]=\"true\"\n >\n <cds-dropdown-list\n [items]=\"getDropdownItemsForRow(index) | async\"\n type=\"multi\"\n ></cds-dropdown-list>\n </cds-dropdown>\n </div>\n\n <div [ngClass]=\"{'--full-width': fullWidth}\" class=\"v-multi-input__input\">\n <cds-label *ngIf=\"index === 0 && valueColumnTitle\">{{ valueColumnTitle }}</cds-label>\n\n <input\n cdsText\n [defaultValue]=\"value.value\"\n [disabled]=\"disabled\"\n (input)=\"onValueChange(value, $event.target.value, 'value')\"\n />\n </div>\n</ng-template>\n", styles: [".v-multi-input--margin{margin-block-end:var(--v-input-margin)}.v-multi-input__row{display:flex;flex-direction:row;align-items:flex-end;margin-block-end:var(--v-multi-input-row-spacing-block)}.v-multi-input__input{margin-inline-end:var(--v-multi-input-input-spacing-inline)}.v-multi-input__input.--full-width{width:100%}.v-multi-input--no-delete-button .v-multi-input__input:last-child{margin-inline-end:0}\n/*!\n * Copyright 2015-2024 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"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.InputLabelComponent, selector: "v-input-label", inputs: ["name", "tooltip", "largeMargin", "small", "noMargin", "title", "titleTranslationKey", "required", "disabled", "carbonTheme"] }, { kind: "directive", type: i3.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i3.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i3.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i3.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "component", type: i3.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "hideLabel", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i3.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] }); }
|
|
189
189
|
}
|
|
190
190
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CarbonMultiInputComponent, decorators: [{
|
|
191
191
|
type: Component,
|
|
192
|
-
args: [{ selector: 'valtimo-carbon-multi-input', template: "<!--\n ~ Copyright 2015-2024 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\n *ngIf=\"{\n addRowText:\n addRowText || addRowTranslationKey\n ? addRowTranslationKey\n ? (addRowTranslationKey | translate)\n : addRowText\n : ('interface.addRow' | translate),\n deleteRowText:\n deleteRowText || deleteRowTranslationKey\n ? deleteRowTranslationKey\n ? (deleteRowTranslationKey | translate)\n : deleteRowText\n : ('interface.deleteRow' | translate),\n } as vars\"\n [ngClass]=\"{'v-multi-input--margin': margin, 'v-multi-input--no-delete-button': hideDeleteButton}\"\n class=\"v-multi-input\"\n>\n <v-input-label\n *ngIf=\"title || titleTranslationKey\"\n [name]=\"name\"\n [required]=\"required\"\n [titleTranslationKey]=\"titleTranslationKey\"\n [title]=\"title\"\n [tooltip]=\"tooltip\"\n >\n </v-input-label>\n\n <div class=\"v-multi-input__rows\">\n <div\n *ngFor=\"let value of values$ | async as values; trackBy: trackByFn; index as i\"\n class=\"v-multi-input__row\"\n >\n <ng-container *ngIf=\"type === 'value'\">\n <ng-container *ngTemplateOutlet=\"singleValue; context: {value: value}\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"type === 'keyValue'\">\n <ng-container\n *ngTemplateOutlet=\"keyValue; context: {value: value, index: i}\"\n ></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"type === 'keyDropdownValue'\">\n <ng-container\n *ngTemplateOutlet=\"keyDropdownValue; context: {value: value, index: i}\"\n ></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"type === 'arbitraryAmount'\">\n <ng-container\n *ngTemplateOutlet=\"arbitraryAmountValue; context: {value: value, index: i}\"\n ></ng-container>\n </ng-container>\n\n <button\n *ngIf=\"!hideDeleteButton\"\n cdsButton=\"danger\"\n [disabled]=\"values?.length <= this.minimumAmountOfRows || disabled\"\n [iconOnly]=\"true\"\n size=\"md\"\n (click)=\"deleteRow(value.uuid)\"\n [title]=\"vars.deleteRowText\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </div>\n\n <div class=\"v-multi-input__add-button\">\n <button\n *ngIf=\"!hideAddButton\"\n cdsButton=\"primary\"\n size=\"md\"\n [disabled]=\"(addRowEnabled$ | async) === false || disabled\"\n (click)=\"addRow()\"\n >\n {{ vars.addRowText }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n </div>\n </div>\n</div>\n\n<ng-template #singleValue let-value=\"value\">\n <div class=\"v-multi-input__input\" [ngClass]=\"{'--full-width': fullWidth}\">\n <input\n cdsText\n [defaultValue]=\"value.value\"\n [disabled]=\"disabled\"\n (change)=\"onValueChange(value, $event, 'value')\"\n />\n </div>\n</ng-template>\n\n<ng-template #keyValue let-value=\"value\" let-index=\"index\">\n <div class=\"v-multi-input__input\" [ngClass]=\"{'--full-width': fullWidth}\">\n <cds-label *ngIf=\"index === 0 && keyColumnTitle && valueColumnTitle\">{{\n keyColumnTitle\n }}</cds-label>\n\n <input\n cdsText\n [defaultValue]=\"value.key\"\n [disabled]=\"disabled\"\n (input)=\"onValueChange(value, $event.target.value, 'key')\"\n />\n </div>\n <div class=\"v-multi-input__input\" [ngClass]=\"{'--full-width': fullWidth}\">\n <cds-label *ngIf=\"index === 0 && keyColumnTitle && valueColumnTitle\">{{\n valueColumnTitle\n }}</cds-label>\n <input\n cdsText\n [defaultValue]=\"value.value\"\n [disabled]=\"disabled\"\n (input)=\"onValueChange(value, $event.target.value, 'value')\"\n />\n </div>\n</ng-template>\n\n<ng-template #arbitraryAmountValue let-value=\"value\" let-index=\"index\">\n <div\n class=\"v-multi-input__input\"\n [ngClass]=\"{'--full-width': fullWidth}\"\n *ngFor=\"let _ of amountOfArbitraryValuesArray$ | async; index as i\"\n >\n <cds-label *ngIf=\"index === 0\">{{\n arbitraryAmountTitles ? arbitraryAmountTitles[i] : ''\n }}</cds-label>\n\n <input\n cdsText\n [defaultValue]=\"value ? value['' + i] : ''\"\n [disabled]=\"disabled\"\n (input)=\"onValueChange(value, $event.target.value, 'arbitrary', i)\"\n />\n </div>\n</ng-template>\n\n<ng-template #keyDropdownValue let-value=\"value\" let-index=\"index\">\n <div [ngClass]=\"{'--full-width': fullWidth}\" class=\"v-multi-input__input\">\n <cds-label *ngIf=\"index === 0 && keyColumnTitle\">{{ keyColumnTitle }}</cds-label>\n\n <input\n cdsText\n [defaultValue]=\"value.key\"\n [disabled]=\"disabled\"\n (input)=\"onValueChange(value, $event.target.value, 'key')\"\n />\n </div>\n\n <div [style.minWidth.px]=\"dropdownWidth\" class=\"v-multi-input__input\">\n <cds-label *ngIf=\"index === 0 && dropdownColumnTitle\">{{ dropdownColumnTitle }}</cds-label>\n\n <cds-dropdown\n (selected)=\"onValueChange(value, $event.item.id, 'dropdown')\"\n [appendInline]=\"true\"\n >\n <cds-dropdown-list\n [items]=\"getDropdownItemsForRow(index) | async\"\n type=\"multi\"\n ></cds-dropdown-list>\n </cds-dropdown>\n </div>\n\n <div [ngClass]=\"{'--full-width': fullWidth}\" class=\"v-multi-input__input\">\n <cds-label *ngIf=\"index === 0 && valueColumnTitle\">{{ valueColumnTitle }}</cds-label>\n\n <input\n cdsText\n [defaultValue]=\"value.value\"\n [disabled]=\"disabled\"\n (input)=\"onValueChange(value, $event.target.value, 'value')\"\n />\n </div>\n</ng-template>\n", styles: [".v-multi-input--margin{margin-block-end:var(--v-input-margin)}.v-multi-input__row{display:flex;flex-direction:row;align-items:flex-end;margin-block-end:var(--v-multi-input-row-spacing-block)}.v-multi-input__input{margin-inline-end:var(--v-multi-input-input-spacing-inline)}.v-multi-input__input.--full-width{width:100%}.v-multi-input--no-delete-button .v-multi-input__input:last-child{margin-inline-end:0}\n/*!\n * Copyright 2015-2024 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"] }]
|
|
192
|
+
args: [{ selector: 'valtimo-carbon-multi-input', template: "<!--\n ~ Copyright 2015-2024 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\n *ngIf=\"{\n addRowText:\n addRowText || addRowTranslationKey\n ? addRowTranslationKey\n ? (addRowTranslationKey | translate)\n : addRowText\n : ('interface.addRow' | translate),\n deleteRowText:\n deleteRowText || deleteRowTranslationKey\n ? deleteRowTranslationKey\n ? (deleteRowTranslationKey | translate)\n : deleteRowText\n : ('interface.deleteRow' | translate),\n } as vars\"\n [ngClass]=\"{'v-multi-input--margin': margin, 'v-multi-input--no-delete-button': hideDeleteButton}\"\n class=\"v-multi-input\"\n>\n <v-input-label\n *ngIf=\"title || titleTranslationKey\"\n [name]=\"name\"\n [required]=\"required\"\n [titleTranslationKey]=\"titleTranslationKey\"\n [title]=\"title\"\n [tooltip]=\"tooltip\"\n >\n </v-input-label>\n\n <div class=\"v-multi-input__rows\">\n <div\n *ngFor=\"let value of values$ | async as values; trackBy: trackByFn; index as i\"\n class=\"v-multi-input__row\"\n >\n <ng-container *ngIf=\"type === 'value'\">\n <ng-container *ngTemplateOutlet=\"singleValue; context: {value: value}\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"type === 'keyValue'\">\n <ng-container\n *ngTemplateOutlet=\"keyValue; context: {value: value, index: i}\"\n ></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"type === 'keyDropdownValue'\">\n <ng-container\n *ngTemplateOutlet=\"keyDropdownValue; context: {value: value, index: i}\"\n ></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"type === 'arbitraryAmount'\">\n <ng-container\n *ngTemplateOutlet=\"arbitraryAmountValue; context: {value: value, index: i}\"\n ></ng-container>\n </ng-container>\n\n <button\n *ngIf=\"!hideDeleteButton\"\n cdsButton=\"danger\"\n [disabled]=\"values?.length <= this.minimumAmountOfRows || disabled\"\n [iconOnly]=\"true\"\n size=\"md\"\n (click)=\"deleteRow(value.uuid)\"\n [title]=\"vars.deleteRowText\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </div>\n\n <div class=\"v-multi-input__add-button\">\n <button\n *ngIf=\"!hideAddButton\"\n cdsButton=\"primary\"\n size=\"md\"\n [disabled]=\"(addRowEnabled$ | async) === false || disabled\"\n (click)=\"addRow()\"\n >\n {{ vars.addRowText }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n </div>\n </div>\n</div>\n\n<ng-template #singleValue let-value=\"value\">\n <div class=\"v-multi-input__input\" [ngClass]=\"{'--full-width': fullWidth}\">\n <input\n cdsText\n [defaultValue]=\"value.value\"\n [disabled]=\"disabled\"\n (change)=\"onValueChange(value, $event.target.value, 'value')\"\n />\n </div>\n</ng-template>\n\n<ng-template #keyValue let-value=\"value\" let-index=\"index\">\n <div class=\"v-multi-input__input\" [ngClass]=\"{'--full-width': fullWidth}\">\n <cds-label *ngIf=\"index === 0 && keyColumnTitle && valueColumnTitle\">{{\n keyColumnTitle\n }}</cds-label>\n\n <input\n cdsText\n [defaultValue]=\"value.key\"\n [disabled]=\"disabled\"\n (input)=\"onValueChange(value, $event.target.value, 'key')\"\n />\n </div>\n <div class=\"v-multi-input__input\" [ngClass]=\"{'--full-width': fullWidth}\">\n <cds-label *ngIf=\"index === 0 && keyColumnTitle && valueColumnTitle\">{{\n valueColumnTitle\n }}</cds-label>\n <input\n cdsText\n [defaultValue]=\"value.value\"\n [disabled]=\"disabled\"\n (input)=\"onValueChange(value, $event.target.value, 'value')\"\n />\n </div>\n</ng-template>\n\n<ng-template #arbitraryAmountValue let-value=\"value\" let-index=\"index\">\n <div\n class=\"v-multi-input__input\"\n [ngClass]=\"{'--full-width': fullWidth}\"\n *ngFor=\"let _ of amountOfArbitraryValuesArray$ | async; index as i\"\n >\n <cds-label *ngIf=\"index === 0\">{{\n arbitraryAmountTitles ? arbitraryAmountTitles[i] : ''\n }}</cds-label>\n\n <input\n cdsText\n [defaultValue]=\"value ? value['' + i] : ''\"\n [disabled]=\"disabled\"\n (input)=\"onValueChange(value, $event.target.value, 'arbitrary', i)\"\n />\n </div>\n</ng-template>\n\n<ng-template #keyDropdownValue let-value=\"value\" let-index=\"index\">\n <div [ngClass]=\"{'--full-width': fullWidth}\" class=\"v-multi-input__input\">\n <cds-label *ngIf=\"index === 0 && keyColumnTitle\">{{ keyColumnTitle }}</cds-label>\n\n <input\n cdsText\n [defaultValue]=\"value.key\"\n [disabled]=\"disabled\"\n (input)=\"onValueChange(value, $event.target.value, 'key')\"\n />\n </div>\n\n <div [style.minWidth.px]=\"dropdownWidth\" class=\"v-multi-input__input\">\n <cds-label *ngIf=\"index === 0 && dropdownColumnTitle\">{{ dropdownColumnTitle }}</cds-label>\n\n <cds-dropdown\n (selected)=\"onValueChange(value, $event.item.id, 'dropdown')\"\n [appendInline]=\"true\"\n >\n <cds-dropdown-list\n [items]=\"getDropdownItemsForRow(index) | async\"\n type=\"multi\"\n ></cds-dropdown-list>\n </cds-dropdown>\n </div>\n\n <div [ngClass]=\"{'--full-width': fullWidth}\" class=\"v-multi-input__input\">\n <cds-label *ngIf=\"index === 0 && valueColumnTitle\">{{ valueColumnTitle }}</cds-label>\n\n <input\n cdsText\n [defaultValue]=\"value.value\"\n [disabled]=\"disabled\"\n (input)=\"onValueChange(value, $event.target.value, 'value')\"\n />\n </div>\n</ng-template>\n", styles: [".v-multi-input--margin{margin-block-end:var(--v-input-margin)}.v-multi-input__row{display:flex;flex-direction:row;align-items:flex-end;margin-block-end:var(--v-multi-input-row-spacing-block)}.v-multi-input__input{margin-inline-end:var(--v-multi-input-input-spacing-inline)}.v-multi-input__input.--full-width{width:100%}.v-multi-input--no-delete-button .v-multi-input__input:last-child{margin-inline-end:0}\n/*!\n * Copyright 2015-2024 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"] }]
|
|
193
193
|
}], propDecorators: { name: [{
|
|
194
194
|
type: Input
|
|
195
195
|
}], title: [{
|
|
@@ -249,4 +249,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
249
249
|
}], allValuesValidEvent: [{
|
|
250
250
|
type: Output
|
|
251
251
|
}] } });
|
|
252
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyYm9uLW11bHRpLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvbXVsdGktaW5wdXQvY2FyYm9uLW11bHRpLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvbXVsdGktaW5wdXQvY2FyYm9uLW11bHRpLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFTeEYsT0FBTyxFQUFDLGVBQWUsRUFBRSxhQUFhLEVBQTJCLE1BQU0sTUFBTSxDQUFDO0FBQzlFLE9BQU8sRUFBQyxHQUFHLEVBQUUsSUFBSSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFDLEVBQUUsSUFBSSxNQUFNLEVBQUMsTUFBTSxNQUFNLENBQUM7Ozs7OztBQU9sQyxNQUFNLE9BQU8seUJBQXlCO0lBTHRDO1FBTWtCLFNBQUksR0FBRyxFQUFFLENBQUM7UUFDVixVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ1gsd0JBQW1CLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLFNBQUksR0FBbUIsT0FBTyxDQUFDO1FBTS9CLHdCQUFtQixHQUFHLENBQUMsQ0FBQztRQUN4Qix3QkFBbUIsR0FBRyxDQUFDLENBQUM7UUFDeEIsWUFBTyxHQUFHLElBQUksQ0FBQztRQUNmLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIseUJBQW9CLEdBQUcsRUFBRSxDQUFDO1FBQzFCLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ25CLDRCQUF1QixH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YUFBYTtzQkFBaEMsS0FBSztnQkFHVSxhQUFhO3NCQUE1QixLQUFLO2dCQUNVLFNBQVM7c0JBQXhCLEtBQUs7Z0JBQ1UsV0FBVztzQkFBMUIsS0FBSztnQkFFVyxXQUFXO3NCQUEzQixNQUFNO2dCQUNVLG1CQUFtQjtzQkFBbkMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFyYml0cmFyeUlucHV0VGl0bGVzLFxuICBMaXN0SXRlbVdpdGhJZCxcbiAgTXVsdGlJbnB1dEtleVZhbHVlLFxuICBNdWx0aUlucHV0T3V0cHV0LFxuICBNdWx0aUlucHV0VHlwZSxcbiAgTXVsdGlJbnB1dFZhbHVlcyxcbn0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXAsIHRha2V9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7djQgYXMgdXVpZHY0fSBmcm9tICd1dWlkJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby1jYXJib24tbXVsdGktaW5wdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2FyYm9uLW11bHRpLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2FyYm9uLW11bHRpLWlucHV0LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIENhcmJvbk11bHRpSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIHB1YmxpYyBuYW1lID0gJyc7XG4gIEBJbnB1dCgpIHB1YmxpYyB0aXRsZSA9ICcnO1xuICBASW5wdXQoKSBwdWJsaWMgdGl0bGVUcmFuc2xhdGlvbktleSA9ICcnO1xuICBASW5wdXQoKSBwdWJsaWMgdHlwZTogTXVsdGlJbnB1dFR5cGUgPSAndmFsdWUnO1xuICBASW5wdXQoKSBwdWJsaWMgc2V0IGFyYml0cmFyeVZhbHVlQW1vdW50KHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9hbW91bnRPZkFyYml0cmFyeVZhbHVlcyA9IHZhbHVlO1xuICAgIHRoaXMuYW1vdW50T2ZBcmJpdHJhcnlWYWx1ZXNBcnJheSQubmV4dCh0aGlzLmdldEFycmF5T2ZYTGVuZ3RoKHZhbHVlKSk7XG4gIH1cbiAgQElucHV0KCkgcHVibGljIGFyYml0cmFyeUFtb3VudFRpdGxlcyE6IEFyYml0cmFyeUlucHV0VGl0bGVzO1xuICBASW5wdXQoKSBwdWJsaWMgaW5pdGlhbEFtb3VudE9mUm93cyA9IDE7XG4gIEBJbnB1dCgpIHB1YmxpYyBtaW5pbXVtQW1vdW50T2ZSb3dzID0gMTtcbiAgQElucHV0KCkgcHVibGljIG1heFJvd3MgPSBudWxsO1xuICBASW5wdXQoKSBwdWJsaWMgYWRkUm93VGV4dCA9ICcnO1xuICBASW5wdXQoKSBwdWJsaWMgYWRkUm93VHJhbnNsYXRpb25LZXkgPSAnJztcbiAgQElucHV0KCkgcHVibGljIGRlbGV0ZVJvd1RleHQgPSAnJztcbiAgQElucHV0KCkgcHVibGljIGRlbGV0ZVJvd1RyYW5zbGF0aW9uS2V5ID0gJyc7XG4gIEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgZGVmYXVsdFZhbHVlcyE6IE11bHRpSW5wdXRWYWx1ZXM7XG4gIEBJbnB1dCgpIHB1YmxpYyBtYXJnaW4gPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIHRvb2x0aXAgPSAnJztcbiAgQElucHV0KCkgcHVibGljIHJlcXVpcmVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBrZXlDb2x1bW5UaXRsZSA9ICcnO1xuICBASW5wdXQoKSBwdWJsaWMgdmFsdWVDb2x1bW5UaXRsZSA9ICcnO1xuICBASW5wdXQoKSBwdWJsaWMgZHJvcGRvd25Db2x1bW5UaXRsZSA9ICcnO1xuICBASW5wdXQoKSBwdWJsaWMgaGlkZURlbGV0ZUJ1dHRvbiA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgaGlkZUFkZEJ1dHRvbiA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgc2V0IGRyb3Bkb3duSXRlbXModmFsdWU6IEFycmF5PExpc3RJdGVtV2l0aElkPikge1xuICAgIHRoaXMuZHJvcGRvd25JdGVtcyQubmV4dCh2YWx1ZSk7XG4gIH1cbiAgQElucHV0KCkgcHVibGljIGRyb3Bkb3duV2lkdGggPSAyNTA7XG4gIEBJbnB1dCgpIHB1YmxpYyBmdWxsV2lkdGggPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIGNhcmJvblRoZW1lID0gJ2cxMCc7XG5cbiAgQE91dHB1dCgpIHB1YmxpYyB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPE11bHRpSW5wdXRPdXRwdXQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcHVibGljIGFsbFZhbHVlc1ZhbGlkRXZlbnQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwcml2YXRlIF9hbW91bnRPZkFyYml0cmFyeVZhbHVlcyE6IG51bWJlcjtcbiAgcHVibGljIHJlYWRvbmx5IGFtb3VudE9mQXJiaXRyYXJ5VmFsdWVzQXJyYXkkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTwwPj4oW10pO1xuXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNdWx0aUlucHV0VmFsdWVzPihbXSk7XG4gIHB1YmxpYyByZWFkb25seSBtYXBwZWRWYWx1ZXMkOiBPYnNlcnZhYmxlPE11bHRpSW5wdXRPdXRwdXQ+ID0gdGhpcy52YWx1ZXMkLnBpcGUoXG4gICAgbWFwKFxuICAgICAgdmFsdWVzID0+XG4gICAgICAgIHZhbHVlc1xuICAgICAgICAgIC5tYXAodmFsdWUgPT4gdGhpcy5nZXRNYXBwZWRWYWx1ZSh2YWx1ZSkpXG4gICAgICAgICAgLmZpbHRlcih2YWx1ZSA9PiB7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgICAgICAgICBjYXNlICd2YWx1ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICBjYXNlICdrZXlWYWx1ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICh2YWx1ZSBhcyBNdWx0aUlucHV0S2V5VmFsdWUpLnZhbHVlIHx8ICh2YWx1ZSBhcyBNdWx0aUlucHV0S2V5VmFsdWUpLmtleTtcbiAgICAgICAgICAgICAgY2FzZSAna2V5RHJvcGRvd25WYWx1ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICh2YWx1ZSBhcyBNdWx0aUlucHV0S2V5VmFsdWUpLnZhbHVlICYmXG4gICAgICAgICAgICAgICAgICAodmFsdWUgYXMgTXVsdGlJbnB1dEtleVZhbHVlKS5rZXkgJiZcbiAgICAgICAgICAgICAgICAgICh2YWx1ZSBhcyBNdWx0aUlucHV0S2V5VmFsdWUpLmRyb3Bkb3duXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgY2FzZSAnYXJiaXRyYXJ5QW1vdW50JzpcbiAgICAgICAgICAgICAgICBjb25zdCBvYmplY3RWYWx1ZXMgPSBPYmplY3QudmFsdWVzKHZhbHVlIGFzIE11bHRpSW5wdXRLZXlWYWx1ZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9zaXRpdmVWYWx1ZXNBbW91bnQgPSBvYmplY3RWYWx1ZXMuZmlsdGVyKG9iamVjdFZhbHVlID0+ICEhb2JqZWN0VmFsdWUpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdFZhbHVlcy5sZW5ndGggPT09IHBvc2l0aXZlVmFsdWVzQW1vdW50Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSBhcyBNdWx0aUlucHV0T3V0cHV0XG4gICAgKVxuICApO1xuICBwdWJsaWMgcmVhZG9ubHkgYWRkUm93RW5hYmxlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLnZhbHVlcyQucGlwZShcbiAgICBtYXAodmFsdWVzID0+ICEhKHRoaXMubWF4Um93cyA9PT0gbnVsbCB8fCB2YWx1ZXMubGVuZ3RoIDwgdGhpcy5tYXhSb3dzKSlcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZHJvcGRvd25JdGVtcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PExpc3RJdGVtV2l0aElkPj4oW10pO1xuXG4gIHByaXZhdGUgX3ZhbHVlc1N1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZXMkLm5leHQodGhpcy5nZXRJbml0aWFsUm93cygpKTtcbiAgICB0aGlzLm9wZW5WYWx1ZXNTdWJzY3JpcHRpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl92YWx1ZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgYWRkUm93KCk6IHZvaWQge1xuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMudmFsdWVzJCwgdGhpcy5hZGRSb3dFbmFibGVkJF0pXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSgoW3ZhbHVlcywgYWRkUm93RW5hYmxlZF0pID0+IHtcbiAgICAgICAgaWYgKGFkZFJvd0VuYWJsZWQpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlcyQubmV4dChbLi4udmFsdWVzLCB0aGlzLmdldEVtcHR5VmFsdWUoKV0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGVSb3codXVpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZXMkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHZhbHVlcyA9PiB7XG4gICAgICBpZiAodmFsdWVzLmxlbmd0aCA+IHRoaXMubWluaW11bUFtb3VudE9mUm93cykge1xuICAgICAgICB0aGlzLnZhbHVlcyQubmV4dCh2YWx1ZXMuZmlsdGVyKHZhbHVlID0+IHZhbHVlLnV1aWQgIT09IHV1aWQpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyB0cmFja0J5Rm4oaW5kZXg6IG51bWJlciwgdmFsdWU6IE11bHRpSW5wdXRLZXlWYWx1ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHZhbHVlLnV1aWQgYXMgc3RyaW5nO1xuICB9XG5cbiAgcHVibGljIGdldERyb3Bkb3duSXRlbXNGb3JSb3coaW5kZXg6IG51bWJlcik6IE9ic2VydmFibGU8QXJyYXk8TGlzdEl0ZW1XaXRoSWQ+PiB7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW3RoaXMuZHJvcGRvd25JdGVtcyQsIHRoaXMudmFsdWVzJF0pLnBpcGUoXG4gICAgICBtYXAoKFtkcm9wZG93bkl0ZW1zLCB2YWx1ZXNdKSA9PiB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHZhbHVlc1tpbmRleF0gfHwgdGhpcy5kZWZhdWx0VmFsdWVzW2luZGV4XTtcblxuICAgICAgICByZXR1cm4gZHJvcGRvd25JdGVtcy5tYXAoZHJvcGRvd25JdGVtID0+ICh7XG4gICAgICAgICAgLi4uZHJvcGRvd25JdGVtLFxuICAgICAgICAgIHNlbGVjdGVkOiBkZWZhdWx0VmFsdWUgPyBkcm9wZG93bkl0ZW0uaWQgPT09IGRlZmF1bHRWYWx1ZS5kcm9wZG93biA6IGZhbHNlLFxuICAgICAgICB9KSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgb25WYWx1ZUNoYW5nZShcbiAgICB0ZW1wbGF0ZVZhbHVlOiBNdWx0aUlucHV0S2V5VmFsdWUsXG4gICAgaW5wdXRWYWx1ZTogc3RyaW5nLFxuICAgIGNoYW5nZTogJ2tleScgfCAndmFsdWUnIHwgJ2Ryb3Bkb3duJyB8ICdhcmJpdHJhcnknLFxuICAgIGFyYml0cmFyeUluZGV4PzogbnVtYmVyXG4gICk6IHZvaWQge1xuICAgIHRoaXMudmFsdWVzJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZSh2YWx1ZXMgPT4ge1xuICAgICAgdGhpcy52YWx1ZXMkLm5leHQoXG4gICAgICAgIHZhbHVlcy5tYXAoc3RhdGVWYWx1ZSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXRlVmFsdWUudXVpZCA9PT0gdGVtcGxhdGVWYWx1ZS51dWlkKSB7XG4gICAgICAgICAgICBpZiAoY2hhbmdlID09PSAndmFsdWUnKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7Li4uc3RhdGVWYWx1ZSwgdmFsdWU6IGlucHV0VmFsdWV9O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2UgPT09ICdrZXknKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7Li4uc3RhdGVWYWx1ZSwga2V5OiBpbnB1dFZhbHVlfTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhbmdlID09PSAnZHJvcGRvd24nKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7Li4uc3RhdGVWYWx1ZSwgZHJvcGRvd246IGlucHV0VmFsdWV9O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2UgPT09ICdhcmJpdHJhcnknKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7Li4uc3RhdGVWYWx1ZSwgW2FyYml0cmFyeUluZGV4XTogaW5wdXRWYWx1ZX07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBzdGF0ZVZhbHVlO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW5pdGlhbFJvd3MoKTogTXVsdGlJbnB1dFZhbHVlcyB7XG4gICAgY29uc3QgbWluaW11bVJvd3MgPSB0aGlzLm1pbmltdW1BbW91bnRPZlJvd3M7XG4gICAgY29uc3QgaW5pdGlhbFJvd3MgPSB0aGlzLmluaXRpYWxBbW91bnRPZlJvd3M7XG4gICAgY29uc3QgYW1vdW50T2ZJbml0YWxSb3dzID0gTWF0aC5tYXgobWluaW11bVJvd3MsIGluaXRpYWxSb3dzKTtcblxuICAgIGlmICghdGhpcy5kZWZhdWx0VmFsdWVzKSB7XG4gICAgICByZXR1cm4gbmV3IEFycmF5KGFtb3VudE9mSW5pdGFsUm93cykuZmlsbCh0aGlzLmdldEVtcHR5VmFsdWUoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdFZhbHVlcy5tYXAoZGVmYXVsdFZhbHVlID0+ICh7Li4uZGVmYXVsdFZhbHVlLCB1dWlkOiB1dWlkdjQoKX0pKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RW1wdHlWYWx1ZSgpOiBNdWx0aUlucHV0S2V5VmFsdWUge1xuICAgIGlmICh0aGlzLnR5cGUgPT09ICdhcmJpdHJhcnlBbW91bnQnKSB7XG4gICAgICBjb25zdCBlbXB0eVZhbHVlID0ge1xuICAgICAgICB1dWlkOiB1dWlkdjQoKSxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuZ2V0QXJyYXlPZlhMZW5ndGgodGhpcy5fYW1vdW50T2ZBcmJpdHJhcnlWYWx1ZXMpLmZvckVhY2goKF8sIGluZGV4KSA9PiB7XG4gICAgICAgIGVtcHR5VmFsdWVbYCR7aW5kZXh9YF0gPSAnJztcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gZW1wdHlWYWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAga2V5OiAnJyxcbiAgICAgIHZhbHVlOiAnJyxcbiAgICAgIHV1aWQ6IHV1aWR2NCgpLFxuICAgICAgZHJvcGRvd246ICcnLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldE1hcHBlZFZhbHVlKHZhbHVlVG9NYXA6IE11bHRpSW5wdXRLZXlWYWx1ZSk6IE11bHRpSW5wdXRLZXlWYWx1ZSB8IHN0cmluZyB7XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ2tleVZhbHVlJykge1xuICAgICAgcmV0dXJuIHtrZXk6IHZhbHVlVG9NYXAua2V5LCB2YWx1ZTogdmFsdWVUb01hcC52YWx1ZX07XG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICdrZXlEcm9wZG93blZhbHVlJykge1xuICAgICAgcmV0dXJuIHtrZXk6IHZhbHVlVG9NYXAua2V5LCB2YWx1ZTogdmFsdWVUb01hcC52YWx1ZSwgZHJvcGRvd246IHZhbHVlVG9NYXAuZHJvcGRvd259O1xuICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSAnYXJiaXRyYXJ5QW1vdW50Jykge1xuICAgICAgY29uc3Qgb2JqQ29weSA9IHsuLi52YWx1ZVRvTWFwfTtcbiAgICAgIGRlbGV0ZSBvYmpDb3B5LnV1aWQ7XG4gICAgICByZXR1cm4gb2JqQ29weTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWVUb01hcC52YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlblZhbHVlc1N1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl92YWx1ZXNTdWJzY3JpcHRpb24gPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnZhbHVlcyQsIHRoaXMubWFwcGVkVmFsdWVzJF0pLnN1YnNjcmliZShcbiAgICAgIChbdmFsdWVzLCBtYXBwZWRWYWx1ZXNdKSA9PiB7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdChtYXBwZWRWYWx1ZXMpO1xuICAgICAgICB0aGlzLmFsbFZhbHVlc1ZhbGlkRXZlbnQuZW1pdCh2YWx1ZXMubGVuZ3RoID09PSBtYXBwZWRWYWx1ZXMubGVuZ3RoKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBcnJheU9mWExlbmd0aChsZW5ndGg6IG51bWJlcik6IEFycmF5PDA+IHtcbiAgICByZXR1cm4gQXJyYXkobGVuZ3RoKS5maWxsKDApO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjxkaXZcbiAgKm5nSWY9XCJ7XG4gICAgYWRkUm93VGV4dDpcbiAgICAgIGFkZFJvd1RleHQgfHwgYWRkUm93VHJhbnNsYXRpb25LZXlcbiAgICAgICAgPyBhZGRSb3dUcmFuc2xhdGlvbktleVxuICAgICAgICAgID8gKGFkZFJvd1RyYW5zbGF0aW9uS2V5IHwgdHJhbnNsYXRlKVxuICAgICAgICAgIDogYWRkUm93VGV4dFxuICAgICAgICA6ICgnaW50ZXJmYWNlLmFkZFJvdycgfCB0cmFuc2xhdGUpLFxuICAgIGRlbGV0ZVJvd1RleHQ6XG4gICAgICBkZWxldGVSb3dUZXh0IHx8IGRlbGV0ZVJvd1RyYW5zbGF0aW9uS2V5XG4gICAgICAgID8gZGVsZXRlUm93VHJhbnNsYXRpb25LZXlcbiAgICAgICAgICA/IChkZWxldGVSb3dUcmFuc2xhdGlvbktleSB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICA6IGRlbGV0ZVJvd1RleHRcbiAgICAgICAgOiAoJ2ludGVyZmFjZS5kZWxldGVSb3cnIHwgdHJhbnNsYXRlKSxcbiAgfSBhcyB2YXJzXCJcbiAgW25nQ2xhc3NdPVwieyd2LW11bHRpLWlucHV0LS1tYXJnaW4nOiBtYXJnaW4sICd2LW11bHRpLWlucHV0LS1uby1kZWxldGUtYnV0dG9uJzogaGlkZURlbGV0ZUJ1dHRvbn1cIlxuICBjbGFzcz1cInYtbXVsdGktaW5wdXRcIlxuPlxuICA8di1pbnB1dC1sYWJlbFxuICAgICpuZ0lmPVwidGl0bGUgfHwgdGl0bGVUcmFuc2xhdGlvbktleVwiXG4gICAgW25hbWVdPVwibmFtZVwiXG4gICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICBbdGl0bGVUcmFuc2xhdGlvbktleV09XCJ0aXRsZVRyYW5zbGF0aW9uS2V5XCJcbiAgICBbdGl0bGVdPVwidGl0bGVcIlxuICAgIFt0b29sdGlwXT1cInRvb2x0aXBcIlxuICA+XG4gIDwvdi1pbnB1dC1sYWJlbD5cblxuICA8ZGl2IGNsYXNzPVwidi1tdWx0aS1pbnB1dF9fcm93c1wiPlxuICAgIDxkaXZcbiAgICAgICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiB2YWx1ZXMkIHwgYXN5bmMgYXMgdmFsdWVzOyB0cmFja0J5OiB0cmFja0J5Rm47IGluZGV4IGFzIGlcIlxuICAgICAgY2xhc3M9XCJ2LW11bHRpLWlucHV0X19yb3dcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0eXBlID09PSAndmFsdWUnXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzaW5nbGVWYWx1ZTsgY29udGV4dDoge3ZhbHVlOiB2YWx1ZX1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidHlwZSA9PT0gJ2tleVZhbHVlJ1wiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJrZXlWYWx1ZTsgY29udGV4dDoge3ZhbHVlOiB2YWx1ZSwgaW5kZXg6IGl9XCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0eXBlID09PSAna2V5RHJvcGRvd25WYWx1ZSdcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwia2V5RHJvcGRvd25WYWx1ZTsgY29udGV4dDoge3ZhbHVlOiB2YWx1ZSwgaW5kZXg6IGl9XCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0eXBlID09PSAnYXJiaXRyYXJ5QW1vdW50J1wiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhcmJpdHJhcnlBbW91bnRWYWx1ZTsgY29udGV4dDoge3ZhbHVlOiB2YWx1ZSwgaW5kZXg6IGl9XCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCIhaGlkZURlbGV0ZUJ1dHRvblwiXG4gICAgICAgIGNkc0J1dHRvbj1cImRhbmdlclwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJ2YWx1ZXM/Lmxlbmd0aCA8PSB0aGlzLm1pbmltdW1BbW91bnRPZlJvd3MgfHwgZGlzYWJsZWRcIlxuICAgICAgICBbaWNvbk9ubHldPVwidHJ1ZVwiXG4gICAgICAgIHNpemU9XCJtZFwiXG4gICAgICAgIChjbGljayk9XCJkZWxldGVSb3codmFsdWUudXVpZClcIlxuICAgICAgICBbdGl0bGVdPVwidmFycy5kZWxldGVSb3dUZXh0XCJcbiAgICAgID5cbiAgICAgICAgPHN2ZyBjbGFzcz1cImNkcy0tYnRuX19pY29uXCIgY2RzSWNvbj1cInRyYXNoLWNhblwiIHNpemU9XCIxNlwiPjwvc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwidi1tdWx0aS1pbnB1dF9fYWRkLWJ1dHRvblwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cIiFoaWRlQWRkQnV0dG9uXCJcbiAgICAgICAgY2RzQnV0dG9uPVwicHJpbWFyeVwiXG4gICAgICAgIHNpemU9XCJtZFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCIoYWRkUm93RW5hYmxlZCQgfCBhc3luYykgPT09IGZhbHNlIHx8IGRpc2FibGVkXCJcbiAgICAgICAgKGNsaWNrKT1cImFkZFJvdygpXCJcbiAgICAgID5cbiAgICAgICAge3sgdmFycy5hZGRSb3dUZXh0IH19XG5cbiAgICAgICAgPHN2ZyBjbGFzcz1cImNkcy0tYnRuX19pY29uXCIgY2RzSWNvbj1cImFkZFwiIHNpemU9XCIxNlwiPjwvc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjc2luZ2xlVmFsdWUgbGV0LXZhbHVlPVwidmFsdWVcIj5cbiAgPGRpdiBjbGFzcz1cInYtbXVsdGktaW5wdXRfX2lucHV0XCIgW25nQ2xhc3NdPVwieyctLWZ1bGwtd2lkdGgnOiBmdWxsV2lkdGh9XCI+XG4gICAgPGlucHV0XG4gICAgICBjZHNUZXh0XG4gICAgICBbZGVmYXVsdFZhbHVlXT1cInZhbHVlLnZhbHVlXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAoY2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2UodmFsdWUsICRldmVudCwgJ3ZhbHVlJylcIlxuICAgIC8+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNrZXlWYWx1ZSBsZXQtdmFsdWU9XCJ2YWx1ZVwiIGxldC1pbmRleD1cImluZGV4XCI+XG4gIDxkaXYgY2xhc3M9XCJ2LW11bHRpLWlucHV0X19pbnB1dFwiIFtuZ0NsYXNzXT1cInsnLS1mdWxsLXdpZHRoJzogZnVsbFdpZHRofVwiPlxuICAgIDxjZHMtbGFiZWwgKm5nSWY9XCJpbmRleCA9PT0gMCAmJiBrZXlDb2x1bW5UaXRsZSAmJiB2YWx1ZUNvbHVtblRpdGxlXCI+e3tcbiAgICAgIGtleUNvbHVtblRpdGxlXG4gICAgfX08L2Nkcy1sYWJlbD5cblxuICAgIDxpbnB1dFxuICAgICAgY2RzVGV4dFxuICAgICAgW2RlZmF1bHRWYWx1ZV09XCJ2YWx1ZS5rZXlcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIChpbnB1dCk9XCJvblZhbHVlQ2hhbmdlKHZhbHVlLCAkZXZlbnQudGFyZ2V0LnZhbHVlLCAna2V5JylcIlxuICAgIC8+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwidi1tdWx0aS1pbnB1dF9faW5wdXRcIiBbbmdDbGFzc109XCJ7Jy0tZnVsbC13aWR0aCc6IGZ1bGxXaWR0aH1cIj5cbiAgICA8Y2RzLWxhYmVsICpuZ0lmPVwiaW5kZXggPT09IDAgJiYga2V5Q29sdW1uVGl0bGUgJiYgdmFsdWVDb2x1bW5UaXRsZVwiPnt7XG4gICAgICB2YWx1ZUNvbHVtblRpdGxlXG4gICAgfX08L2Nkcy1sYWJlbD5cbiAgICA8aW5wdXRcbiAgICAgIGNkc1RleHRcbiAgICAgIFtkZWZhdWx0VmFsdWVdPVwidmFsdWUudmFsdWVcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIChpbnB1dCk9XCJvblZhbHVlQ2hhbmdlKHZhbHVlLCAkZXZlbnQudGFyZ2V0LnZhbHVlLCAndmFsdWUnKVwiXG4gICAgLz5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2FyYml0cmFyeUFtb3VudFZhbHVlIGxldC12YWx1ZT1cInZhbHVlXCIgbGV0LWluZGV4PVwiaW5kZXhcIj5cbiAgPGRpdlxuICAgIGNsYXNzPVwidi1tdWx0aS1pbnB1dF9faW5wdXRcIlxuICAgIFtuZ0NsYXNzXT1cInsnLS1mdWxsLXdpZHRoJzogZnVsbFdpZHRofVwiXG4gICAgKm5nRm9yPVwibGV0IF8gb2YgYW1vdW50T2ZBcmJpdHJhcnlWYWx1ZXNBcnJheSQgfCBhc3luYzsgaW5kZXggYXMgaVwiXG4gID5cbiAgICA8Y2RzLWxhYmVsICpuZ0lmPVwiaW5kZXggPT09IDBcIj57e1xuICAgICAgYXJiaXRyYXJ5QW1vdW50VGl0bGVzID8gYXJiaXRyYXJ5QW1vdW50VGl0bGVzW2ldIDogJydcbiAgICB9fTwvY2RzLWxhYmVsPlxuXG4gICAgPGlucHV0XG4gICAgICBjZHNUZXh0XG4gICAgICBbZGVmYXVsdFZhbHVlXT1cInZhbHVlID8gdmFsdWVbJycgKyBpXSA6ICcnXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAoaW5wdXQpPVwib25WYWx1ZUNoYW5nZSh2YWx1ZSwgJGV2ZW50LnRhcmdldC52YWx1ZSwgJ2FyYml0cmFyeScsIGkpXCJcbiAgICAvPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAja2V5RHJvcGRvd25WYWx1ZSBsZXQtdmFsdWU9XCJ2YWx1ZVwiIGxldC1pbmRleD1cImluZGV4XCI+XG4gIDxkaXYgW25nQ2xhc3NdPVwieyctLWZ1bGwtd2lkdGgnOiBmdWxsV2lkdGh9XCIgY2xhc3M9XCJ2LW11bHRpLWlucHV0X19pbnB1dFwiPlxuICAgIDxjZHMtbGFiZWwgKm5nSWY9XCJpbmRleCA9PT0gMCAmJiBrZXlDb2x1bW5UaXRsZVwiPnt7IGtleUNvbHVtblRpdGxlIH19PC9jZHMtbGFiZWw+XG5cbiAgICA8aW5wdXRcbiAgICAgIGNkc1RleHRcbiAgICAgIFtkZWZhdWx0VmFsdWVdPVwidmFsdWUua2V5XCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAoaW5wdXQpPVwib25WYWx1ZUNoYW5nZSh2YWx1ZSwgJGV2ZW50LnRhcmdldC52YWx1ZSwgJ2tleScpXCJcbiAgICAvPlxuICA8L2Rpdj5cblxuICA8ZGl2IFtzdHlsZS5taW5XaWR0aC5weF09XCJkcm9wZG93bldpZHRoXCIgY2xhc3M9XCJ2LW11bHRpLWlucHV0X19pbnB1dFwiPlxuICAgIDxjZHMtbGFiZWwgKm5nSWY9XCJpbmRleCA9PT0gMCAmJiBkcm9wZG93bkNvbHVtblRpdGxlXCI+e3sgZHJvcGRvd25Db2x1bW5UaXRsZSB9fTwvY2RzLWxhYmVsPlxuXG4gICAgPGNkcy1kcm9wZG93blxuICAgICAgKHNlbGVjdGVkKT1cIm9uVmFsdWVDaGFuZ2UodmFsdWUsICRldmVudC5pdGVtLmlkLCAnZHJvcGRvd24nKVwiXG4gICAgICBbYXBwZW5kSW5saW5lXT1cInRydWVcIlxuICAgID5cbiAgICAgIDxjZHMtZHJvcGRvd24tbGlzdFxuICAgICAgICBbaXRlbXNdPVwiZ2V0RHJvcGRvd25JdGVtc0ZvclJvdyhpbmRleCkgfCBhc3luY1wiXG4gICAgICAgIHR5cGU9XCJtdWx0aVwiXG4gICAgICA+PC9jZHMtZHJvcGRvd24tbGlzdD5cbiAgICA8L2Nkcy1kcm9wZG93bj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBbbmdDbGFzc109XCJ7Jy0tZnVsbC13aWR0aCc6IGZ1bGxXaWR0aH1cIiBjbGFzcz1cInYtbXVsdGktaW5wdXRfX2lucHV0XCI+XG4gICAgPGNkcy1sYWJlbCAqbmdJZj1cImluZGV4ID09PSAwICYmIHZhbHVlQ29sdW1uVGl0bGVcIj57eyB2YWx1ZUNvbHVtblRpdGxlIH19PC9jZHMtbGFiZWw+XG5cbiAgICA8aW5wdXRcbiAgICAgIGNkc1RleHRcbiAgICAgIFtkZWZhdWx0VmFsdWVdPVwidmFsdWUudmFsdWVcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIChpbnB1dCk9XCJvblZhbHVlQ2hhbmdlKHZhbHVlLCAkZXZlbnQudGFyZ2V0LnZhbHVlLCAndmFsdWUnKVwiXG4gICAgLz5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
252
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyYm9uLW11bHRpLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvbXVsdGktaW5wdXQvY2FyYm9uLW11bHRpLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvbXVsdGktaW5wdXQvY2FyYm9uLW11bHRpLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFTeEYsT0FBTyxFQUFDLGVBQWUsRUFBRSxhQUFhLEVBQTJCLE1BQU0sTUFBTSxDQUFDO0FBQzlFLE9BQU8sRUFBQyxHQUFHLEVBQUUsSUFBSSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFDLEVBQUUsSUFBSSxNQUFNLEVBQUMsTUFBTSxNQUFNLENBQUM7Ozs7OztBQU9sQyxNQUFNLE9BQU8seUJBQXlCO0lBTHRDO1FBTWtCLFNBQUksR0FBRyxFQUFFLENBQUM7UUFDVixVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ1gsd0JBQW1CLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLFNBQUksR0FBbUIsT0FBTyxDQUFDO1FBTS9CLHdCQUFtQixHQUFHLENBQUMsQ0FBQztRQUN4Qix3QkFBbUIsR0FBRyxDQUFDLENBQUM7UUFDeEIsWUFBTyxHQUFHLElBQUksQ0FBQztRQUNmLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIseUJBQW9CLEdBQUcsRUFBRSxDQUFDO1FBQzFCLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ25CLDRCQUF1QixH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YUFBYTtzQkFBaEMsS0FBSztnQkFHVSxhQUFhO3NCQUE1QixLQUFLO2dCQUNVLFNBQVM7c0JBQXhCLEtBQUs7Z0JBQ1UsV0FBVztzQkFBMUIsS0FBSztnQkFFVyxXQUFXO3NCQUEzQixNQUFNO2dCQUNVLG1CQUFtQjtzQkFBbkMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFyYml0cmFyeUlucHV0VGl0bGVzLFxuICBMaXN0SXRlbVdpdGhJZCxcbiAgTXVsdGlJbnB1dEtleVZhbHVlLFxuICBNdWx0aUlucHV0T3V0cHV0LFxuICBNdWx0aUlucHV0VHlwZSxcbiAgTXVsdGlJbnB1dFZhbHVlcyxcbn0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXAsIHRha2V9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7djQgYXMgdXVpZHY0fSBmcm9tICd1dWlkJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby1jYXJib24tbXVsdGktaW5wdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2FyYm9uLW11bHRpLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2FyYm9uLW11bHRpLWlucHV0LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIENhcmJvbk11bHRpSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIHB1YmxpYyBuYW1lID0gJyc7XG4gIEBJbnB1dCgpIHB1YmxpYyB0aXRsZSA9ICcnO1xuICBASW5wdXQoKSBwdWJsaWMgdGl0bGVUcmFuc2xhdGlvbktleSA9ICcnO1xuICBASW5wdXQoKSBwdWJsaWMgdHlwZTogTXVsdGlJbnB1dFR5cGUgPSAndmFsdWUnO1xuICBASW5wdXQoKSBwdWJsaWMgc2V0IGFyYml0cmFyeVZhbHVlQW1vdW50KHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9hbW91bnRPZkFyYml0cmFyeVZhbHVlcyA9IHZhbHVlO1xuICAgIHRoaXMuYW1vdW50T2ZBcmJpdHJhcnlWYWx1ZXNBcnJheSQubmV4dCh0aGlzLmdldEFycmF5T2ZYTGVuZ3RoKHZhbHVlKSk7XG4gIH1cbiAgQElucHV0KCkgcHVibGljIGFyYml0cmFyeUFtb3VudFRpdGxlcyE6IEFyYml0cmFyeUlucHV0VGl0bGVzO1xuICBASW5wdXQoKSBwdWJsaWMgaW5pdGlhbEFtb3VudE9mUm93cyA9IDE7XG4gIEBJbnB1dCgpIHB1YmxpYyBtaW5pbXVtQW1vdW50T2ZSb3dzID0gMTtcbiAgQElucHV0KCkgcHVibGljIG1heFJvd3MgPSBudWxsO1xuICBASW5wdXQoKSBwdWJsaWMgYWRkUm93VGV4dCA9ICcnO1xuICBASW5wdXQoKSBwdWJsaWMgYWRkUm93VHJhbnNsYXRpb25LZXkgPSAnJztcbiAgQElucHV0KCkgcHVibGljIGRlbGV0ZVJvd1RleHQgPSAnJztcbiAgQElucHV0KCkgcHVibGljIGRlbGV0ZVJvd1RyYW5zbGF0aW9uS2V5ID0gJyc7XG4gIEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgZGVmYXVsdFZhbHVlcyE6IE11bHRpSW5wdXRWYWx1ZXM7XG4gIEBJbnB1dCgpIHB1YmxpYyBtYXJnaW4gPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIHRvb2x0aXAgPSAnJztcbiAgQElucHV0KCkgcHVibGljIHJlcXVpcmVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBrZXlDb2x1bW5UaXRsZSA9ICcnO1xuICBASW5wdXQoKSBwdWJsaWMgdmFsdWVDb2x1bW5UaXRsZSA9ICcnO1xuICBASW5wdXQoKSBwdWJsaWMgZHJvcGRvd25Db2x1bW5UaXRsZSA9ICcnO1xuICBASW5wdXQoKSBwdWJsaWMgaGlkZURlbGV0ZUJ1dHRvbiA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgaGlkZUFkZEJ1dHRvbiA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgc2V0IGRyb3Bkb3duSXRlbXModmFsdWU6IEFycmF5PExpc3RJdGVtV2l0aElkPikge1xuICAgIHRoaXMuZHJvcGRvd25JdGVtcyQubmV4dCh2YWx1ZSk7XG4gIH1cbiAgQElucHV0KCkgcHVibGljIGRyb3Bkb3duV2lkdGggPSAyNTA7XG4gIEBJbnB1dCgpIHB1YmxpYyBmdWxsV2lkdGggPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIGNhcmJvblRoZW1lID0gJ2cxMCc7XG5cbiAgQE91dHB1dCgpIHB1YmxpYyB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPE11bHRpSW5wdXRPdXRwdXQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcHVibGljIGFsbFZhbHVlc1ZhbGlkRXZlbnQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwcml2YXRlIF9hbW91bnRPZkFyYml0cmFyeVZhbHVlcyE6IG51bWJlcjtcbiAgcHVibGljIHJlYWRvbmx5IGFtb3VudE9mQXJiaXRyYXJ5VmFsdWVzQXJyYXkkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTwwPj4oW10pO1xuXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNdWx0aUlucHV0VmFsdWVzPihbXSk7XG4gIHB1YmxpYyByZWFkb25seSBtYXBwZWRWYWx1ZXMkOiBPYnNlcnZhYmxlPE11bHRpSW5wdXRPdXRwdXQ+ID0gdGhpcy52YWx1ZXMkLnBpcGUoXG4gICAgbWFwKFxuICAgICAgdmFsdWVzID0+XG4gICAgICAgIHZhbHVlc1xuICAgICAgICAgIC5tYXAodmFsdWUgPT4gdGhpcy5nZXRNYXBwZWRWYWx1ZSh2YWx1ZSkpXG4gICAgICAgICAgLmZpbHRlcih2YWx1ZSA9PiB7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgICAgICAgICBjYXNlICd2YWx1ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICBjYXNlICdrZXlWYWx1ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICh2YWx1ZSBhcyBNdWx0aUlucHV0S2V5VmFsdWUpLnZhbHVlIHx8ICh2YWx1ZSBhcyBNdWx0aUlucHV0S2V5VmFsdWUpLmtleTtcbiAgICAgICAgICAgICAgY2FzZSAna2V5RHJvcGRvd25WYWx1ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICh2YWx1ZSBhcyBNdWx0aUlucHV0S2V5VmFsdWUpLnZhbHVlICYmXG4gICAgICAgICAgICAgICAgICAodmFsdWUgYXMgTXVsdGlJbnB1dEtleVZhbHVlKS5rZXkgJiZcbiAgICAgICAgICAgICAgICAgICh2YWx1ZSBhcyBNdWx0aUlucHV0S2V5VmFsdWUpLmRyb3Bkb3duXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgY2FzZSAnYXJiaXRyYXJ5QW1vdW50JzpcbiAgICAgICAgICAgICAgICBjb25zdCBvYmplY3RWYWx1ZXMgPSBPYmplY3QudmFsdWVzKHZhbHVlIGFzIE11bHRpSW5wdXRLZXlWYWx1ZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9zaXRpdmVWYWx1ZXNBbW91bnQgPSBvYmplY3RWYWx1ZXMuZmlsdGVyKG9iamVjdFZhbHVlID0+ICEhb2JqZWN0VmFsdWUpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdFZhbHVlcy5sZW5ndGggPT09IHBvc2l0aXZlVmFsdWVzQW1vdW50Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSBhcyBNdWx0aUlucHV0T3V0cHV0XG4gICAgKVxuICApO1xuICBwdWJsaWMgcmVhZG9ubHkgYWRkUm93RW5hYmxlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLnZhbHVlcyQucGlwZShcbiAgICBtYXAodmFsdWVzID0+ICEhKHRoaXMubWF4Um93cyA9PT0gbnVsbCB8fCB2YWx1ZXMubGVuZ3RoIDwgdGhpcy5tYXhSb3dzKSlcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZHJvcGRvd25JdGVtcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PExpc3RJdGVtV2l0aElkPj4oW10pO1xuXG4gIHByaXZhdGUgX3ZhbHVlc1N1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZXMkLm5leHQodGhpcy5nZXRJbml0aWFsUm93cygpKTtcbiAgICB0aGlzLm9wZW5WYWx1ZXNTdWJzY3JpcHRpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl92YWx1ZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgYWRkUm93KCk6IHZvaWQge1xuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMudmFsdWVzJCwgdGhpcy5hZGRSb3dFbmFibGVkJF0pXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSgoW3ZhbHVlcywgYWRkUm93RW5hYmxlZF0pID0+IHtcbiAgICAgICAgaWYgKGFkZFJvd0VuYWJsZWQpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlcyQubmV4dChbLi4udmFsdWVzLCB0aGlzLmdldEVtcHR5VmFsdWUoKV0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGVSb3codXVpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZXMkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHZhbHVlcyA9PiB7XG4gICAgICBpZiAodmFsdWVzLmxlbmd0aCA+IHRoaXMubWluaW11bUFtb3VudE9mUm93cykge1xuICAgICAgICB0aGlzLnZhbHVlcyQubmV4dCh2YWx1ZXMuZmlsdGVyKHZhbHVlID0+IHZhbHVlLnV1aWQgIT09IHV1aWQpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyB0cmFja0J5Rm4oaW5kZXg6IG51bWJlciwgdmFsdWU6IE11bHRpSW5wdXRLZXlWYWx1ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHZhbHVlLnV1aWQgYXMgc3RyaW5nO1xuICB9XG5cbiAgcHVibGljIGdldERyb3Bkb3duSXRlbXNGb3JSb3coaW5kZXg6IG51bWJlcik6IE9ic2VydmFibGU8QXJyYXk8TGlzdEl0ZW1XaXRoSWQ+PiB7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW3RoaXMuZHJvcGRvd25JdGVtcyQsIHRoaXMudmFsdWVzJF0pLnBpcGUoXG4gICAgICBtYXAoKFtkcm9wZG93bkl0ZW1zLCB2YWx1ZXNdKSA9PiB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHZhbHVlc1tpbmRleF0gfHwgdGhpcy5kZWZhdWx0VmFsdWVzW2luZGV4XTtcblxuICAgICAgICByZXR1cm4gZHJvcGRvd25JdGVtcy5tYXAoZHJvcGRvd25JdGVtID0+ICh7XG4gICAgICAgICAgLi4uZHJvcGRvd25JdGVtLFxuICAgICAgICAgIHNlbGVjdGVkOiBkZWZhdWx0VmFsdWUgPyBkcm9wZG93bkl0ZW0uaWQgPT09IGRlZmF1bHRWYWx1ZS5kcm9wZG93biA6IGZhbHNlLFxuICAgICAgICB9KSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgb25WYWx1ZUNoYW5nZShcbiAgICB0ZW1wbGF0ZVZhbHVlOiBNdWx0aUlucHV0S2V5VmFsdWUsXG4gICAgaW5wdXRWYWx1ZTogc3RyaW5nLFxuICAgIGNoYW5nZTogJ2tleScgfCAndmFsdWUnIHwgJ2Ryb3Bkb3duJyB8ICdhcmJpdHJhcnknLFxuICAgIGFyYml0cmFyeUluZGV4PzogbnVtYmVyXG4gICk6IHZvaWQge1xuICAgIHRoaXMudmFsdWVzJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZSh2YWx1ZXMgPT4ge1xuICAgICAgdGhpcy52YWx1ZXMkLm5leHQoXG4gICAgICAgIHZhbHVlcy5tYXAoc3RhdGVWYWx1ZSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXRlVmFsdWUudXVpZCA9PT0gdGVtcGxhdGVWYWx1ZS51dWlkKSB7XG4gICAgICAgICAgICBpZiAoY2hhbmdlID09PSAndmFsdWUnKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7Li4uc3RhdGVWYWx1ZSwgdmFsdWU6IGlucHV0VmFsdWV9O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2UgPT09ICdrZXknKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7Li4uc3RhdGVWYWx1ZSwga2V5OiBpbnB1dFZhbHVlfTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhbmdlID09PSAnZHJvcGRvd24nKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7Li4uc3RhdGVWYWx1ZSwgZHJvcGRvd246IGlucHV0VmFsdWV9O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2UgPT09ICdhcmJpdHJhcnknKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7Li4uc3RhdGVWYWx1ZSwgW2FyYml0cmFyeUluZGV4XTogaW5wdXRWYWx1ZX07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBzdGF0ZVZhbHVlO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW5pdGlhbFJvd3MoKTogTXVsdGlJbnB1dFZhbHVlcyB7XG4gICAgY29uc3QgbWluaW11bVJvd3MgPSB0aGlzLm1pbmltdW1BbW91bnRPZlJvd3M7XG4gICAgY29uc3QgaW5pdGlhbFJvd3MgPSB0aGlzLmluaXRpYWxBbW91bnRPZlJvd3M7XG4gICAgY29uc3QgYW1vdW50T2ZJbml0YWxSb3dzID0gTWF0aC5tYXgobWluaW11bVJvd3MsIGluaXRpYWxSb3dzKTtcblxuICAgIGlmICghdGhpcy5kZWZhdWx0VmFsdWVzKSB7XG4gICAgICByZXR1cm4gbmV3IEFycmF5KGFtb3VudE9mSW5pdGFsUm93cykuZmlsbCh0aGlzLmdldEVtcHR5VmFsdWUoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdFZhbHVlcy5tYXAoZGVmYXVsdFZhbHVlID0+ICh7Li4uZGVmYXVsdFZhbHVlLCB1dWlkOiB1dWlkdjQoKX0pKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RW1wdHlWYWx1ZSgpOiBNdWx0aUlucHV0S2V5VmFsdWUge1xuICAgIGlmICh0aGlzLnR5cGUgPT09ICdhcmJpdHJhcnlBbW91bnQnKSB7XG4gICAgICBjb25zdCBlbXB0eVZhbHVlID0ge1xuICAgICAgICB1dWlkOiB1dWlkdjQoKSxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuZ2V0QXJyYXlPZlhMZW5ndGgodGhpcy5fYW1vdW50T2ZBcmJpdHJhcnlWYWx1ZXMpLmZvckVhY2goKF8sIGluZGV4KSA9PiB7XG4gICAgICAgIGVtcHR5VmFsdWVbYCR7aW5kZXh9YF0gPSAnJztcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gZW1wdHlWYWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAga2V5OiAnJyxcbiAgICAgIHZhbHVlOiAnJyxcbiAgICAgIHV1aWQ6IHV1aWR2NCgpLFxuICAgICAgZHJvcGRvd246ICcnLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldE1hcHBlZFZhbHVlKHZhbHVlVG9NYXA6IE11bHRpSW5wdXRLZXlWYWx1ZSk6IE11bHRpSW5wdXRLZXlWYWx1ZSB8IHN0cmluZyB7XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ2tleVZhbHVlJykge1xuICAgICAgcmV0dXJuIHtrZXk6IHZhbHVlVG9NYXAua2V5LCB2YWx1ZTogdmFsdWVUb01hcC52YWx1ZX07XG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICdrZXlEcm9wZG93blZhbHVlJykge1xuICAgICAgcmV0dXJuIHtrZXk6IHZhbHVlVG9NYXAua2V5LCB2YWx1ZTogdmFsdWVUb01hcC52YWx1ZSwgZHJvcGRvd246IHZhbHVlVG9NYXAuZHJvcGRvd259O1xuICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSAnYXJiaXRyYXJ5QW1vdW50Jykge1xuICAgICAgY29uc3Qgb2JqQ29weSA9IHsuLi52YWx1ZVRvTWFwfTtcbiAgICAgIGRlbGV0ZSBvYmpDb3B5LnV1aWQ7XG4gICAgICByZXR1cm4gb2JqQ29weTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWVUb01hcC52YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlblZhbHVlc1N1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl92YWx1ZXNTdWJzY3JpcHRpb24gPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnZhbHVlcyQsIHRoaXMubWFwcGVkVmFsdWVzJF0pLnN1YnNjcmliZShcbiAgICAgIChbdmFsdWVzLCBtYXBwZWRWYWx1ZXNdKSA9PiB7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdChtYXBwZWRWYWx1ZXMpO1xuICAgICAgICB0aGlzLmFsbFZhbHVlc1ZhbGlkRXZlbnQuZW1pdCh2YWx1ZXMubGVuZ3RoID09PSBtYXBwZWRWYWx1ZXMubGVuZ3RoKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBcnJheU9mWExlbmd0aChsZW5ndGg6IG51bWJlcik6IEFycmF5PDA+IHtcbiAgICByZXR1cm4gQXJyYXkobGVuZ3RoKS5maWxsKDApO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjxkaXZcbiAgKm5nSWY9XCJ7XG4gICAgYWRkUm93VGV4dDpcbiAgICAgIGFkZFJvd1RleHQgfHwgYWRkUm93VHJhbnNsYXRpb25LZXlcbiAgICAgICAgPyBhZGRSb3dUcmFuc2xhdGlvbktleVxuICAgICAgICAgID8gKGFkZFJvd1RyYW5zbGF0aW9uS2V5IHwgdHJhbnNsYXRlKVxuICAgICAgICAgIDogYWRkUm93VGV4dFxuICAgICAgICA6ICgnaW50ZXJmYWNlLmFkZFJvdycgfCB0cmFuc2xhdGUpLFxuICAgIGRlbGV0ZVJvd1RleHQ6XG4gICAgICBkZWxldGVSb3dUZXh0IHx8IGRlbGV0ZVJvd1RyYW5zbGF0aW9uS2V5XG4gICAgICAgID8gZGVsZXRlUm93VHJhbnNsYXRpb25LZXlcbiAgICAgICAgICA/IChkZWxldGVSb3dUcmFuc2xhdGlvbktleSB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICA6IGRlbGV0ZVJvd1RleHRcbiAgICAgICAgOiAoJ2ludGVyZmFjZS5kZWxldGVSb3cnIHwgdHJhbnNsYXRlKSxcbiAgfSBhcyB2YXJzXCJcbiAgW25nQ2xhc3NdPVwieyd2LW11bHRpLWlucHV0LS1tYXJnaW4nOiBtYXJnaW4sICd2LW11bHRpLWlucHV0LS1uby1kZWxldGUtYnV0dG9uJzogaGlkZURlbGV0ZUJ1dHRvbn1cIlxuICBjbGFzcz1cInYtbXVsdGktaW5wdXRcIlxuPlxuICA8di1pbnB1dC1sYWJlbFxuICAgICpuZ0lmPVwidGl0bGUgfHwgdGl0bGVUcmFuc2xhdGlvbktleVwiXG4gICAgW25hbWVdPVwibmFtZVwiXG4gICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICBbdGl0bGVUcmFuc2xhdGlvbktleV09XCJ0aXRsZVRyYW5zbGF0aW9uS2V5XCJcbiAgICBbdGl0bGVdPVwidGl0bGVcIlxuICAgIFt0b29sdGlwXT1cInRvb2x0aXBcIlxuICA+XG4gIDwvdi1pbnB1dC1sYWJlbD5cblxuICA8ZGl2IGNsYXNzPVwidi1tdWx0aS1pbnB1dF9fcm93c1wiPlxuICAgIDxkaXZcbiAgICAgICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiB2YWx1ZXMkIHwgYXN5bmMgYXMgdmFsdWVzOyB0cmFja0J5OiB0cmFja0J5Rm47IGluZGV4IGFzIGlcIlxuICAgICAgY2xhc3M9XCJ2LW11bHRpLWlucHV0X19yb3dcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0eXBlID09PSAndmFsdWUnXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzaW5nbGVWYWx1ZTsgY29udGV4dDoge3ZhbHVlOiB2YWx1ZX1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidHlwZSA9PT0gJ2tleVZhbHVlJ1wiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJrZXlWYWx1ZTsgY29udGV4dDoge3ZhbHVlOiB2YWx1ZSwgaW5kZXg6IGl9XCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0eXBlID09PSAna2V5RHJvcGRvd25WYWx1ZSdcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwia2V5RHJvcGRvd25WYWx1ZTsgY29udGV4dDoge3ZhbHVlOiB2YWx1ZSwgaW5kZXg6IGl9XCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0eXBlID09PSAnYXJiaXRyYXJ5QW1vdW50J1wiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhcmJpdHJhcnlBbW91bnRWYWx1ZTsgY29udGV4dDoge3ZhbHVlOiB2YWx1ZSwgaW5kZXg6IGl9XCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCIhaGlkZURlbGV0ZUJ1dHRvblwiXG4gICAgICAgIGNkc0J1dHRvbj1cImRhbmdlclwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJ2YWx1ZXM/Lmxlbmd0aCA8PSB0aGlzLm1pbmltdW1BbW91bnRPZlJvd3MgfHwgZGlzYWJsZWRcIlxuICAgICAgICBbaWNvbk9ubHldPVwidHJ1ZVwiXG4gICAgICAgIHNpemU9XCJtZFwiXG4gICAgICAgIChjbGljayk9XCJkZWxldGVSb3codmFsdWUudXVpZClcIlxuICAgICAgICBbdGl0bGVdPVwidmFycy5kZWxldGVSb3dUZXh0XCJcbiAgICAgID5cbiAgICAgICAgPHN2ZyBjbGFzcz1cImNkcy0tYnRuX19pY29uXCIgY2RzSWNvbj1cInRyYXNoLWNhblwiIHNpemU9XCIxNlwiPjwvc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwidi1tdWx0aS1pbnB1dF9fYWRkLWJ1dHRvblwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cIiFoaWRlQWRkQnV0dG9uXCJcbiAgICAgICAgY2RzQnV0dG9uPVwicHJpbWFyeVwiXG4gICAgICAgIHNpemU9XCJtZFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCIoYWRkUm93RW5hYmxlZCQgfCBhc3luYykgPT09IGZhbHNlIHx8IGRpc2FibGVkXCJcbiAgICAgICAgKGNsaWNrKT1cImFkZFJvdygpXCJcbiAgICAgID5cbiAgICAgICAge3sgdmFycy5hZGRSb3dUZXh0IH19XG5cbiAgICAgICAgPHN2ZyBjbGFzcz1cImNkcy0tYnRuX19pY29uXCIgY2RzSWNvbj1cImFkZFwiIHNpemU9XCIxNlwiPjwvc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjc2luZ2xlVmFsdWUgbGV0LXZhbHVlPVwidmFsdWVcIj5cbiAgPGRpdiBjbGFzcz1cInYtbXVsdGktaW5wdXRfX2lucHV0XCIgW25nQ2xhc3NdPVwieyctLWZ1bGwtd2lkdGgnOiBmdWxsV2lkdGh9XCI+XG4gICAgPGlucHV0XG4gICAgICBjZHNUZXh0XG4gICAgICBbZGVmYXVsdFZhbHVlXT1cInZhbHVlLnZhbHVlXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAoY2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2UodmFsdWUsICRldmVudC50YXJnZXQudmFsdWUsICd2YWx1ZScpXCJcbiAgICAvPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAja2V5VmFsdWUgbGV0LXZhbHVlPVwidmFsdWVcIiBsZXQtaW5kZXg9XCJpbmRleFwiPlxuICA8ZGl2IGNsYXNzPVwidi1tdWx0aS1pbnB1dF9faW5wdXRcIiBbbmdDbGFzc109XCJ7Jy0tZnVsbC13aWR0aCc6IGZ1bGxXaWR0aH1cIj5cbiAgICA8Y2RzLWxhYmVsICpuZ0lmPVwiaW5kZXggPT09IDAgJiYga2V5Q29sdW1uVGl0bGUgJiYgdmFsdWVDb2x1bW5UaXRsZVwiPnt7XG4gICAgICBrZXlDb2x1bW5UaXRsZVxuICAgIH19PC9jZHMtbGFiZWw+XG5cbiAgICA8aW5wdXRcbiAgICAgIGNkc1RleHRcbiAgICAgIFtkZWZhdWx0VmFsdWVdPVwidmFsdWUua2V5XCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAoaW5wdXQpPVwib25WYWx1ZUNoYW5nZSh2YWx1ZSwgJGV2ZW50LnRhcmdldC52YWx1ZSwgJ2tleScpXCJcbiAgICAvPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInYtbXVsdGktaW5wdXRfX2lucHV0XCIgW25nQ2xhc3NdPVwieyctLWZ1bGwtd2lkdGgnOiBmdWxsV2lkdGh9XCI+XG4gICAgPGNkcy1sYWJlbCAqbmdJZj1cImluZGV4ID09PSAwICYmIGtleUNvbHVtblRpdGxlICYmIHZhbHVlQ29sdW1uVGl0bGVcIj57e1xuICAgICAgdmFsdWVDb2x1bW5UaXRsZVxuICAgIH19PC9jZHMtbGFiZWw+XG4gICAgPGlucHV0XG4gICAgICBjZHNUZXh0XG4gICAgICBbZGVmYXVsdFZhbHVlXT1cInZhbHVlLnZhbHVlXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAoaW5wdXQpPVwib25WYWx1ZUNoYW5nZSh2YWx1ZSwgJGV2ZW50LnRhcmdldC52YWx1ZSwgJ3ZhbHVlJylcIlxuICAgIC8+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNhcmJpdHJhcnlBbW91bnRWYWx1ZSBsZXQtdmFsdWU9XCJ2YWx1ZVwiIGxldC1pbmRleD1cImluZGV4XCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cInYtbXVsdGktaW5wdXRfX2lucHV0XCJcbiAgICBbbmdDbGFzc109XCJ7Jy0tZnVsbC13aWR0aCc6IGZ1bGxXaWR0aH1cIlxuICAgICpuZ0Zvcj1cImxldCBfIG9mIGFtb3VudE9mQXJiaXRyYXJ5VmFsdWVzQXJyYXkkIHwgYXN5bmM7IGluZGV4IGFzIGlcIlxuICA+XG4gICAgPGNkcy1sYWJlbCAqbmdJZj1cImluZGV4ID09PSAwXCI+e3tcbiAgICAgIGFyYml0cmFyeUFtb3VudFRpdGxlcyA/IGFyYml0cmFyeUFtb3VudFRpdGxlc1tpXSA6ICcnXG4gICAgfX08L2Nkcy1sYWJlbD5cblxuICAgIDxpbnB1dFxuICAgICAgY2RzVGV4dFxuICAgICAgW2RlZmF1bHRWYWx1ZV09XCJ2YWx1ZSA/IHZhbHVlWycnICsgaV0gOiAnJ1wiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgKGlucHV0KT1cIm9uVmFsdWVDaGFuZ2UodmFsdWUsICRldmVudC50YXJnZXQudmFsdWUsICdhcmJpdHJhcnknLCBpKVwiXG4gICAgLz5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2tleURyb3Bkb3duVmFsdWUgbGV0LXZhbHVlPVwidmFsdWVcIiBsZXQtaW5kZXg9XCJpbmRleFwiPlxuICA8ZGl2IFtuZ0NsYXNzXT1cInsnLS1mdWxsLXdpZHRoJzogZnVsbFdpZHRofVwiIGNsYXNzPVwidi1tdWx0aS1pbnB1dF9faW5wdXRcIj5cbiAgICA8Y2RzLWxhYmVsICpuZ0lmPVwiaW5kZXggPT09IDAgJiYga2V5Q29sdW1uVGl0bGVcIj57eyBrZXlDb2x1bW5UaXRsZSB9fTwvY2RzLWxhYmVsPlxuXG4gICAgPGlucHV0XG4gICAgICBjZHNUZXh0XG4gICAgICBbZGVmYXVsdFZhbHVlXT1cInZhbHVlLmtleVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgKGlucHV0KT1cIm9uVmFsdWVDaGFuZ2UodmFsdWUsICRldmVudC50YXJnZXQudmFsdWUsICdrZXknKVwiXG4gICAgLz5cbiAgPC9kaXY+XG5cbiAgPGRpdiBbc3R5bGUubWluV2lkdGgucHhdPVwiZHJvcGRvd25XaWR0aFwiIGNsYXNzPVwidi1tdWx0aS1pbnB1dF9faW5wdXRcIj5cbiAgICA8Y2RzLWxhYmVsICpuZ0lmPVwiaW5kZXggPT09IDAgJiYgZHJvcGRvd25Db2x1bW5UaXRsZVwiPnt7IGRyb3Bkb3duQ29sdW1uVGl0bGUgfX08L2Nkcy1sYWJlbD5cblxuICAgIDxjZHMtZHJvcGRvd25cbiAgICAgIChzZWxlY3RlZCk9XCJvblZhbHVlQ2hhbmdlKHZhbHVlLCAkZXZlbnQuaXRlbS5pZCwgJ2Ryb3Bkb3duJylcIlxuICAgICAgW2FwcGVuZElubGluZV09XCJ0cnVlXCJcbiAgICA+XG4gICAgICA8Y2RzLWRyb3Bkb3duLWxpc3RcbiAgICAgICAgW2l0ZW1zXT1cImdldERyb3Bkb3duSXRlbXNGb3JSb3coaW5kZXgpIHwgYXN5bmNcIlxuICAgICAgICB0eXBlPVwibXVsdGlcIlxuICAgICAgPjwvY2RzLWRyb3Bkb3duLWxpc3Q+XG4gICAgPC9jZHMtZHJvcGRvd24+XG4gIDwvZGl2PlxuXG4gIDxkaXYgW25nQ2xhc3NdPVwieyctLWZ1bGwtd2lkdGgnOiBmdWxsV2lkdGh9XCIgY2xhc3M9XCJ2LW11bHRpLWlucHV0X19pbnB1dFwiPlxuICAgIDxjZHMtbGFiZWwgKm5nSWY9XCJpbmRleCA9PT0gMCAmJiB2YWx1ZUNvbHVtblRpdGxlXCI+e3sgdmFsdWVDb2x1bW5UaXRsZSB9fTwvY2RzLWxhYmVsPlxuXG4gICAgPGlucHV0XG4gICAgICBjZHNUZXh0XG4gICAgICBbZGVmYXVsdFZhbHVlXT1cInZhbHVlLnZhbHVlXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAoaW5wdXQpPVwib25WYWx1ZUNoYW5nZSh2YWx1ZSwgJGV2ZW50LnRhcmdldC52YWx1ZSwgJ3ZhbHVlJylcIlxuICAgIC8+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
@@ -214,7 +214,7 @@ export class SearchFieldsComponent {
|
|
|
214
214
|
}
|
|
215
215
|
}
|
|
216
216
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SearchFieldsComponent, deps: [{ token: i1.DocumentService }, { token: i2.TranslateService }, { token: i3.IconService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
217
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SearchFieldsComponent, selector: "valtimo-search-fields", inputs: { loading: "loading", searchFields: "searchFields", documentDefinitionName: "documentDefinitionName", setValuesSubject$: "setValuesSubject$", clearValuesSubject$: "clearValuesSubject$", defaultValues: "defaultValues", inputDisabled: "inputDisabled", externalSearchField: "externalSearchField" }, outputs: { doSearch: "doSearch" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 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<ng-container *ngIf=\"loading\">\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\n</ng-container>\n<ng-container *ngIf=\"!loading\">\n <cds-accordion>\n <cds-accordion-item\n [title]=\"'searchFields.searchButtonText' | translate\"\n (selected)=\"toggleExpanded()\"\n [expanded]=\"expanded$ | async\"\n >\n <ng-container *ngTemplateOutlet=\"searchFieldsTemplate\"></ng-container>\n </cds-accordion-item>\n </cds-accordion>\n</ng-container>\n\n<ng-template #loadingTemplate>\n <div class=\"loading-container\"><cds-loading></cds-loading></div>\n</ng-template>\n\n<ng-template #searchFieldsTemplate>\n <ng-container *ngIf=\"searchFields$ | async as searchFields\">\n <ng-container\n *ngIf=\"{\n noSearchFields: (!searchFields || searchFields.length === 0) && !externalSearchField,\n } as vars\"\n >\n <div\n *ngIf=\"!vars.noSearchFields\"\n class=\"search-fields-container\"\n [ngClass]=\"{'search-fields-container--hidden': (expanded$ | async) === false}\"\n >\n <ng-content></ng-content>\n\n <ng-container *ngFor=\"let searchField of searchFields\">\n <div class=\"search-field-container\">\n <ng-container\n *ngTemplateOutlet=\"searchFieldTemplate; context: {searchField: searchField}\"\n ></ng-container>\n </div>\n </ng-container>\n </div>\n\n <div class=\"meta-container\" *ngIf=\"expanded$ | async\">\n <ng-container\n *ngTemplateOutlet=\"buttonsTemplate; context: {noSearchFields: vars.noSearchFields}\"\n ></ng-container>\n </div>\n </ng-container>\n </ng-container>\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 [dataTestId]=\"'search-field-' + searchField.key\"\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 [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\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 [dataTestId]=\"'search-field-' + searchField.key\"\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 [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\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 [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\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 [dataTestId]=\"'search-field-' + searchField.key\"\n [fullWidth]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.start\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\n >\n </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input\n name=\"end\"\n [dataTestId]=\"'search-field-' + searchField.key\"\n [fullWidth]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.end\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\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 [dataTestId]=\"'search-field-' + searchField.key\"\n [fullWidth]=\"true\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.start\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\n >\n </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input\n name=\"end\"\n [dataTestId]=\"'search-field-' + searchField.key\"\n [fullWidth]=\"true\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.end\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\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 [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\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 [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\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 [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"singleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionId]=\"getDefaultBooleanSelectionId(values, searchField.key)\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\n [appendInline]=\"false\"\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 [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\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 [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\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 [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\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=\"\n searchField.dataType === 'text' &&\n (searchField.fieldType === 'single-select-dropdown' ||\n searchField.fieldType === 'single_select_dropdown')\n \"\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 [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"singleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionId]=\"values[searchField.key]\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\n [appendInline]=\"false\"\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=\"\n searchField.dataType === 'text' &&\n (searchField.fieldType === 'multi-select-dropdown' ||\n searchField.fieldType === 'multi_select_dropdown')\n \"\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 [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"multipleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionIds]=\"values[searchField.key]\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\n [appendInline]=\"false\"\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\n <div class=\"buttons-container\" *ngIf=\"!noSearchFields && {expanded: expanded$ | async} as obs\">\n <div class=\"right-buttons\">\n <button\n *ngIf=\"obs.expanded\"\n cdsButton=\"tertiary\"\n data-testid=\"search-fields-clear-button\"\n (click)=\"clear()\"\n [disabled]=\"loading || noSearchFields || inputDisabled\"\n type=\"button\"\n id=\"clear\"\n >\n <svg cdsIcon=\"trash-can\" size=\"16\" class=\"cds--btn__icon\"></svg>\n\n {{ 'searchFields.clearButtonText' | translate }}\n </button>\n\n <button\n *ngIf=\"obs.expanded\"\n cdsButton=\"primary\"\n data-testid=\"search-fields-search-button\"\n (click)=\"search()\"\n [disabled]=\"\n loading || noSearchFields || (hasValidValues$ | async) === false || inputDisabled\n \"\n type=\"button\"\n id=\"search\"\n >\n <svg cdsIcon=\"search\" size=\"16\" class=\"cds--btn__icon\"></svg>\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=\"no-search-fields-message\" *ngIf=\"noSearchFields\">\n <v-paragraph dataTestId=\"search-fields-no-fields\" [fullWidth]=\"true\" [center]=\"true\">{{\n 'searchFields.noneConfigured' | translate\n }}</v-paragraph>\n </div>\n</ng-template>\n", styles: ["::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;justify-content:flex-end}.right-buttons{display:flex;flex-direction:row;gap:16px}.search-fields-container{padding-bottom:16px;padding-top:16px;display:grid;gap:16px;grid-template-columns:repeat(3,1fr)}.search-fields-container--hidden{display:none}.meta-container{width:100%;padding-bottom:16px}.loading-container{display:flex;width:100%;justify-content:center}.no-search-fields-message{display:flex;width:100%;justify-content:center;margin-top:16px}.search-fields-tile{padding:0}::ng-deep .cds--accordion{background-color:var(--cds-layer)}::ng-deep .cds--accordion__item{border-inline-start:1px solid var(--cds-border-subtle);border-inline-end:1px solid var(--cds-border-subtle)}::ng-deep .cds--accordion__content{padding:0 16px}\n/*!\n * Copyright 2015-2024 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"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.InputComponent, selector: "v-input", inputs: ["name", "type", "title", "titleTranslationKey", "defaultValue", "widthPx", "fullWidth", "margin", "smallMargin", "disabled", "step", "min", "maxLength", "tooltip", "required", "hideNumberSpinBox", "smallLabel", "rows", "clear$", "carbonTheme", "placeholder", "dataTestId"], outputs: ["valueChange"] }, { kind: "component", type: i6.FormComponent, selector: "v-form", inputs: ["className"], outputs: ["valueChange"] }, { kind: "component", type: i7.DatePickerComponent, selector: "v-date-picker", inputs: ["name", "title", "titleTranslationKey", "widthPx", "fullWidth", "margin", "disabled", "tooltip", "required", "defaultDate", "defaultDateIsToday", "smallLabel", "clear$", "enableTime", "carbonTheme"], outputs: ["valueChange"] }, { kind: "component", type: i8.InputLabelComponent, selector: "v-input-label", inputs: ["name", "tooltip", "largeMargin", "small", "noMargin", "title", "titleTranslationKey", "required", "disabled", "carbonTheme"] }, { kind: "component", type: i9.ParagraphComponent, selector: "v-paragraph", inputs: ["center", "fullWidth", "margin", "italic", "loading", "dataTestId"] }, { kind: "directive", type: i3.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "component", type: i10.SelectComponent, selector: "v-select", inputs: ["items", "defaultSelection", "defaultSelectionId", "defaultSelectionIds", "disabled", "dropUp", "multiple", "margin", "widthInPx", "notFoundText", "clearAllText", "clearText", "name", "title", "titleTranslationKey", "clearSelectionSubject$", "tooltip", "required", "loading", "loadingText", "placeholder", "smallMargin", "carbonTheme", "appendInline", "dataTestId"], outputs: ["selectedChange"] }, { kind: "component", type: i3.Accordion, selector: "cds-accordion, ibm-accordion", inputs: ["align", "size", "skeleton"] }, { kind: "component", type: i3.AccordionItem, selector: "cds-accordion-item, ibm-accordion-item", inputs: ["title", "context", "id", "skeleton", "expanded", "disabled"], outputs: ["selected"] }, { kind: "directive", type: i3.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i3.Loading, selector: "cds-loading, ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] }); }
|
|
217
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SearchFieldsComponent, selector: "valtimo-search-fields", inputs: { loading: "loading", searchFields: "searchFields", documentDefinitionName: "documentDefinitionName", setValuesSubject$: "setValuesSubject$", clearValuesSubject$: "clearValuesSubject$", defaultValues: "defaultValues", inputDisabled: "inputDisabled", externalSearchField: "externalSearchField" }, outputs: { doSearch: "doSearch" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 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<ng-container *ngIf=\"loading\">\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\n</ng-container>\n<ng-container *ngIf=\"!loading\">\n <cds-accordion>\n <cds-accordion-item\n [title]=\"'searchFields.searchButtonText' | translate\"\n (selected)=\"toggleExpanded()\"\n [expanded]=\"expanded$ | async\"\n >\n <ng-container *ngTemplateOutlet=\"searchFieldsTemplate\"></ng-container>\n </cds-accordion-item>\n </cds-accordion>\n</ng-container>\n\n<ng-template #loadingTemplate>\n <div class=\"loading-container\"><cds-loading></cds-loading></div>\n</ng-template>\n\n<ng-template #searchFieldsTemplate>\n <ng-container *ngIf=\"searchFields$ | async as searchFields\">\n <ng-container\n *ngIf=\"{\n noSearchFields: (!searchFields || searchFields.length === 0) && !externalSearchField,\n } as vars\"\n >\n <div\n *ngIf=\"!vars.noSearchFields\"\n class=\"search-fields-container\"\n [ngClass]=\"{'search-fields-container--hidden': (expanded$ | async) === false}\"\n >\n <ng-content></ng-content>\n\n <ng-container *ngFor=\"let searchField of searchFields\">\n <div class=\"search-field-container\">\n <ng-container\n *ngTemplateOutlet=\"searchFieldTemplate; context: {searchField: searchField}\"\n ></ng-container>\n </div>\n </ng-container>\n </div>\n\n <div class=\"meta-container\" *ngIf=\"expanded$ | async\">\n <ng-container\n *ngTemplateOutlet=\"buttonsTemplate; context: {noSearchFields: vars.noSearchFields}\"\n ></ng-container>\n </div>\n </ng-container>\n </ng-container>\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 [dataTestId]=\"'search-field-' + searchField.key\"\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 [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\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 [dataTestId]=\"'search-field-' + searchField.key\"\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 [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\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 [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\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 [dataTestId]=\"'search-field-' + searchField.key\"\n [fullWidth]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.start\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\n >\n </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input\n name=\"end\"\n [dataTestId]=\"'search-field-' + searchField.key\"\n [fullWidth]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.end\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\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 [dataTestId]=\"'search-field-' + searchField.key\"\n [fullWidth]=\"true\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.start\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\n >\n </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input\n name=\"end\"\n [dataTestId]=\"'search-field-' + searchField.key\"\n [fullWidth]=\"true\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.end\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\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 [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\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 [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\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 [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"singleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionId]=\"getDefaultBooleanSelectionId(values, searchField.key)\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\n [appendInline]=\"false\"\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 [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\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 [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\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 [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\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=\"\n searchField.dataType === 'text' &&\n (searchField.fieldType === 'single-select-dropdown' ||\n searchField.fieldType === 'single_select_dropdown')\n \"\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 [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"singleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionId]=\"values[searchField.key]\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\n [appendInline]=\"false\"\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=\"\n searchField.dataType === 'text' &&\n (searchField.fieldType === 'multi-select-dropdown' ||\n searchField.fieldType === 'multi_select_dropdown')\n \"\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 [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"multipleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionIds]=\"values[searchField.key]\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\n [appendInline]=\"false\"\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\n <div class=\"buttons-container\" *ngIf=\"!noSearchFields && {expanded: expanded$ | async} as obs\">\n <div class=\"right-buttons\">\n <button\n *ngIf=\"obs.expanded\"\n cdsButton=\"tertiary\"\n data-testid=\"search-fields-clear-button\"\n (click)=\"clear()\"\n [disabled]=\"loading || noSearchFields || inputDisabled\"\n type=\"button\"\n id=\"clear\"\n >\n <svg cdsIcon=\"trash-can\" size=\"16\" class=\"cds--btn__icon\"></svg>\n\n {{ 'searchFields.clearButtonText' | translate }}\n </button>\n\n <button\n *ngIf=\"obs.expanded\"\n cdsButton=\"primary\"\n data-testid=\"search-fields-search-button\"\n (click)=\"search()\"\n [disabled]=\"\n loading || noSearchFields || (hasValidValues$ | async) === false || inputDisabled\n \"\n type=\"button\"\n id=\"search\"\n >\n <svg cdsIcon=\"search\" size=\"16\" class=\"cds--btn__icon\"></svg>\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=\"no-search-fields-message\" *ngIf=\"noSearchFields\">\n <v-paragraph dataTestId=\"search-fields-no-fields\" [fullWidth]=\"true\" [center]=\"true\">{{\n 'searchFields.noneConfigured' | translate\n }}</v-paragraph>\n </div>\n</ng-template>\n", styles: ["::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;justify-content:flex-end}.right-buttons{display:flex;flex-direction:row;gap:16px}.search-fields-container{padding-bottom:16px;padding-top:16px;display:grid;gap:16px;grid-template-columns:repeat(3,1fr)}.search-fields-container--hidden{display:none}.meta-container{width:100%;padding-bottom:16px}.loading-container{display:flex;width:100%;justify-content:center}.no-search-fields-message{display:flex;width:100%;justify-content:center;margin-top:16px}.search-fields-tile{padding:0}::ng-deep .cds--accordion{background-color:var(--cds-layer)}::ng-deep .cds--accordion__item{border-inline-start:1px solid var(--cds-border-subtle);border-inline-end:1px solid var(--cds-border-subtle)}::ng-deep .cds--accordion__content{padding:0 16px}\n/*!\n * Copyright 2015-2024 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"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.InputComponent, selector: "v-input", inputs: ["name", "type", "title", "titleTranslationKey", "defaultValue", "widthPx", "fullWidth", "margin", "smallMargin", "disabled", "step", "min", "maxLength", "tooltip", "required", "hideNumberSpinBox", "smallLabel", "rows", "clear$", "carbonTheme", "placeholder", "dataTestId", "trim"], outputs: ["valueChange"] }, { kind: "component", type: i6.FormComponent, selector: "v-form", inputs: ["className"], outputs: ["valueChange"] }, { kind: "component", type: i7.DatePickerComponent, selector: "v-date-picker", inputs: ["name", "title", "titleTranslationKey", "widthPx", "fullWidth", "margin", "disabled", "tooltip", "required", "defaultDate", "defaultDateIsToday", "smallLabel", "clear$", "enableTime", "carbonTheme"], outputs: ["valueChange"] }, { kind: "component", type: i8.InputLabelComponent, selector: "v-input-label", inputs: ["name", "tooltip", "largeMargin", "small", "noMargin", "title", "titleTranslationKey", "required", "disabled", "carbonTheme"] }, { kind: "component", type: i9.ParagraphComponent, selector: "v-paragraph", inputs: ["center", "fullWidth", "margin", "italic", "loading", "dataTestId"] }, { kind: "directive", type: i3.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "component", type: i10.SelectComponent, selector: "v-select", inputs: ["items", "defaultSelection", "defaultSelectionId", "defaultSelectionIds", "disabled", "dropUp", "multiple", "margin", "widthInPx", "notFoundText", "clearAllText", "clearText", "name", "title", "titleTranslationKey", "clearSelectionSubject$", "tooltip", "required", "loading", "loadingText", "placeholder", "smallMargin", "carbonTheme", "appendInline", "dataTestId"], outputs: ["selectedChange"] }, { kind: "component", type: i3.Accordion, selector: "cds-accordion, ibm-accordion", inputs: ["align", "size", "skeleton"] }, { kind: "component", type: i3.AccordionItem, selector: "cds-accordion-item, ibm-accordion-item", inputs: ["title", "context", "id", "skeleton", "expanded", "disabled"], outputs: ["selected"] }, { kind: "directive", type: i3.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i3.Loading, selector: "cds-loading, ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] }); }
|
|
218
218
|
}
|
|
219
219
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SearchFieldsComponent, decorators: [{
|
|
220
220
|
type: Component,
|
|
@@ -29,14 +29,14 @@ export class TimelineComponent {
|
|
|
29
29
|
}) || []);
|
|
30
30
|
}
|
|
31
31
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TimelineComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
32
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TimelineComponent, selector: "valtimo-timeline", inputs: { items: "items", actions: "actions" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 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
|
|
32
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TimelineComponent, selector: "valtimo-timeline", inputs: { items: "items", actions: "actions" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 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 id=\"no-results\" class=\"p-5\" *ngIf=\"items?.length === 0\"></div>\n\n<div class=\"pb-5\" *ngIf=\"items?.length > 0\">\n <ul class=\"timeline mb-0 py-5\">\n <li class=\"timeline-item status-done\" *ngFor=\"let item of items\">\n <div class=\"timeline-date\">\n <span>{{ item.date }}</span>\n\n <br />\n\n <span>{{ item.time }}</span>\n </div>\n\n <div\n class=\"timeline-content mt-1\"\n *ngIf=\"{supportedActions: getSupportedActions(item, actions)} as vars\"\n >\n <div class=\"timeline-header p-0\">\n <span class=\"timeline-author\">{{ item.user }}</span>\n\n <div class=\"dropdown actions-dropdown\" *ngIf=\"vars.supportedActions?.length > 0\">\n <a\n class=\"dropdown-toggle d-block\"\n id=\"dropdownMenu\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n <i class=\"action-icon icon mdi mdi-dots-vertical\"></i>\n </a>\n\n <div class=\"dropdown-menu\" aria-labelledby=\"dropdownMenu\">\n <a\n *ngFor=\"let action of vars.supportedActions\"\n (click)=\"action.callback(item, $event)\"\n class=\"dropdown-item p-2\"\n >\n <ng-container *ngIf=\"action.icon !== null\">\n <i class=\"icon mdi\" [ngClass]=\"action.icon\"></i>\n </ng-container>\n\n {{ action?.label || '-' }}\n </a>\n </div>\n </div>\n\n <br />\n\n <p class=\"timeline-activity\">{{ item.activity }}</p>\n\n <div class=\"timeline-summary\">\n <p>\n {{ item.summaryTranslationKey | translate: item.summaryTranslationParams }}\n </p>\n </div>\n </div>\n </div>\n </li>\n </ul>\n</div>\n", styles: [".timeline-activity{font-size:100%}.timeline-summary p{font-size:.8rem;white-space:pre-line}.actions-dropdown{position:absolute;top:12px;right:12px;cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] }); }
|
|
33
33
|
}
|
|
34
34
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TimelineComponent, decorators: [{
|
|
35
35
|
type: Component,
|
|
36
|
-
args: [{ selector: 'valtimo-timeline', template: "<!--\n ~ Copyright 2015-2024 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
|
|
36
|
+
args: [{ selector: 'valtimo-timeline', template: "<!--\n ~ Copyright 2015-2024 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 id=\"no-results\" class=\"p-5\" *ngIf=\"items?.length === 0\"></div>\n\n<div class=\"pb-5\" *ngIf=\"items?.length > 0\">\n <ul class=\"timeline mb-0 py-5\">\n <li class=\"timeline-item status-done\" *ngFor=\"let item of items\">\n <div class=\"timeline-date\">\n <span>{{ item.date }}</span>\n\n <br />\n\n <span>{{ item.time }}</span>\n </div>\n\n <div\n class=\"timeline-content mt-1\"\n *ngIf=\"{supportedActions: getSupportedActions(item, actions)} as vars\"\n >\n <div class=\"timeline-header p-0\">\n <span class=\"timeline-author\">{{ item.user }}</span>\n\n <div class=\"dropdown actions-dropdown\" *ngIf=\"vars.supportedActions?.length > 0\">\n <a\n class=\"dropdown-toggle d-block\"\n id=\"dropdownMenu\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n <i class=\"action-icon icon mdi mdi-dots-vertical\"></i>\n </a>\n\n <div class=\"dropdown-menu\" aria-labelledby=\"dropdownMenu\">\n <a\n *ngFor=\"let action of vars.supportedActions\"\n (click)=\"action.callback(item, $event)\"\n class=\"dropdown-item p-2\"\n >\n <ng-container *ngIf=\"action.icon !== null\">\n <i class=\"icon mdi\" [ngClass]=\"action.icon\"></i>\n </ng-container>\n\n {{ action?.label || '-' }}\n </a>\n </div>\n </div>\n\n <br />\n\n <p class=\"timeline-activity\">{{ item.activity }}</p>\n\n <div class=\"timeline-summary\">\n <p>\n {{ item.summaryTranslationKey | translate: item.summaryTranslationParams }}\n </p>\n </div>\n </div>\n </div>\n </li>\n </ul>\n</div>\n", styles: [".timeline-activity{font-size:100%}.timeline-summary p{font-size:.8rem;white-space:pre-line}.actions-dropdown{position:absolute;top:12px;right:12px;cursor:pointer}\n"] }]
|
|
37
37
|
}], propDecorators: { items: [{
|
|
38
38
|
type: Input
|
|
39
39
|
}], actions: [{
|
|
40
40
|
type: Input
|
|
41
41
|
}] } });
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZWxpbmUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy90aW1lbGluZS90aW1lbGluZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3RpbWVsaW5lL3RpbWVsaW5lLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7Ozs7QUFRL0MsTUFBTSxPQUFPLGlCQUFpQjtJQUlyQixtQkFBbUIsQ0FBQyxJQUFrQixFQUFFLE9BQW1CO1FBQ2hFLE9BQU8sQ0FDTCxPQUFPLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3ZCLE1BQU0sUUFBUSxHQUFHLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDNUIsTUFBTSxvQkFBb0IsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBRXBFLElBQUksUUFBUSxJQUFJLG9CQUFvQixFQUFFLENBQUM7Z0JBQ3JDLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNwRCxDQUFDO1lBRUQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUMsSUFBSSxFQUFFLENBQ1QsQ0FBQztJQUNKLENBQUM7K0dBakJVLGlCQUFpQjttR0FBakIsaUJBQWlCLHdHQ3ZCOUIsbWpGQTRFQTs7NEZEckRhLGlCQUFpQjtrQkFMN0IsU0FBUzsrQkFDRSxrQkFBa0I7OEJBS25CLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHtDb21wb25lbnQsIElucHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7VGltZWxpbmVJdGVtfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLXRpbWVsaW5lJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RpbWVsaW5lLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGltZWxpbmUuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgVGltZWxpbmVDb21wb25lbnQge1xuICBASW5wdXQoKSBpdGVtczogQXJyYXk8VGltZWxpbmVJdGVtPjtcbiAgQElucHV0KCkgYWN0aW9ucz86IGFueVtdO1xuXG4gIHB1YmxpYyBnZXRTdXBwb3J0ZWRBY3Rpb25zKGl0ZW06IFRpbWVsaW5lSXRlbSwgYWN0aW9uczogQXJyYXk8YW55Pik6IEFycmF5PGFueT4ge1xuICAgIHJldHVybiAoXG4gICAgICBhY3Rpb25zPy5maWx0ZXIoYWN0aW9uID0+IHtcbiAgICAgICAgY29uc3QgYWN0aW9uSWQgPSBhY3Rpb24/LmlkO1xuICAgICAgICBjb25zdCBpdGVtU3VwcG9ydGVkQWN0aW9ucyA9IEFycmF5LmlzQXJyYXkoaXRlbS5zdXBwb3J0ZWRBY3Rpb25JZHMpO1xuXG4gICAgICAgIGlmIChhY3Rpb25JZCAmJiBpdGVtU3VwcG9ydGVkQWN0aW9ucykge1xuICAgICAgICAgIHJldHVybiBpdGVtLnN1cHBvcnRlZEFjdGlvbklkcy5pbmNsdWRlcyhhY3Rpb25JZCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pIHx8IFtdXG4gICAgKTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuXG48ZGl2IGlkPVwibm8tcmVzdWx0c1wiIGNsYXNzPVwicC01XCIgKm5nSWY9XCJpdGVtcz8ubGVuZ3RoID09PSAwXCI+PC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJwYi01XCIgKm5nSWY9XCJpdGVtcz8ubGVuZ3RoID4gMFwiPlxuICA8dWwgY2xhc3M9XCJ0aW1lbGluZSBtYi0wIHB5LTVcIj5cbiAgICA8bGkgY2xhc3M9XCJ0aW1lbGluZS1pdGVtIHN0YXR1cy1kb25lXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lbGluZS1kYXRlXCI+XG4gICAgICAgIDxzcGFuPnt7IGl0ZW0uZGF0ZSB9fTwvc3Bhbj5cblxuICAgICAgICA8YnIgLz5cblxuICAgICAgICA8c3Bhbj57eyBpdGVtLnRpbWUgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInRpbWVsaW5lLWNvbnRlbnQgbXQtMVwiXG4gICAgICAgICpuZ0lmPVwie3N1cHBvcnRlZEFjdGlvbnM6IGdldFN1cHBvcnRlZEFjdGlvbnMoaXRlbSwgYWN0aW9ucyl9IGFzIHZhcnNcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGltZWxpbmUtaGVhZGVyIHAtMFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGltZWxpbmUtYXV0aG9yXCI+e3sgaXRlbS51c2VyIH19PC9zcGFuPlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duIGFjdGlvbnMtZHJvcGRvd25cIiAqbmdJZj1cInZhcnMuc3VwcG9ydGVkQWN0aW9ucz8ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi10b2dnbGUgZC1ibG9ja1wiXG4gICAgICAgICAgICAgIGlkPVwiZHJvcGRvd25NZW51XCJcbiAgICAgICAgICAgICAgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXG4gICAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgYXJpYS1leHBhbmRlZD1cImZhbHNlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJhY3Rpb24taWNvbiBpY29uIG1kaSBtZGktZG90cy12ZXJ0aWNhbFwiPjwvaT5cbiAgICAgICAgICAgIDwvYT5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJkcm9wZG93bk1lbnVcIj5cbiAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIHZhcnMuc3VwcG9ydGVkQWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGlvbi5jYWxsYmFjayhpdGVtLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gcC0yXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhY3Rpb24uaWNvbiAhPT0gbnVsbFwiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uIG1kaVwiIFtuZ0NsYXNzXT1cImFjdGlvbi5pY29uXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAge3sgYWN0aW9uPy5sYWJlbCB8fCAnLScgfX1cbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8YnIgLz5cblxuICAgICAgICAgIDxwIGNsYXNzPVwidGltZWxpbmUtYWN0aXZpdHlcIj57eyBpdGVtLmFjdGl2aXR5IH19PC9wPlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWVsaW5lLXN1bW1hcnlcIj5cbiAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICB7eyBpdGVtLnN1bW1hcnlUcmFuc2xhdGlvbktleSB8IHRyYW5zbGF0ZTogaXRlbS5zdW1tYXJ5VHJhbnNsYXRpb25QYXJhbXMgfX1cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2xpPlxuICA8L3VsPlxuPC9kaXY+XG4iXX0=
|