@valtimo/components 10.2.0 → 10.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/css/carbon-beagle-compatibility.scss +109 -66
- package/esm2020/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.component.mjs +1 -1
- package/esm2020/lib/components/dropzone/dropzone.component.mjs +2 -2
- package/esm2020/lib/components/form-io/form-io-current-user/form-io-current-user-edit-form.mjs +15 -10
- package/esm2020/lib/components/form-io/form-io-current-user/form-io-current-user.component.mjs +1 -1
- package/esm2020/lib/components/form-io/form-io-current-user/form-io-current-user.formio.mjs +3 -3
- package/esm2020/lib/components/form-io/form-io.module.mjs +2 -2
- package/esm2020/lib/components/left-sidebar/left-sidebar.component.mjs +4 -3
- package/esm2020/lib/components/menu/menu-item-text.component.mjs +2 -2
- package/esm2020/lib/components/menu/menu.service.mjs +12 -7
- package/esm2020/lib/components/right-sidebar/right-sidebar.component.mjs +7 -5
- package/esm2020/lib/components/search-fields/search-fields.component.mjs +71 -13
- package/esm2020/lib/components/searchable-dropdown/searchable-dropdown.component.mjs +2 -2
- package/esm2020/lib/components/timeline/timeline.component.mjs +3 -3
- package/esm2020/lib/services/shell.service.mjs +121 -5
- package/fesm2015/valtimo-components.mjs +250 -72
- package/fesm2015/valtimo-components.mjs.map +1 -1
- package/fesm2020/valtimo-components.mjs +253 -70
- package/fesm2020/valtimo-components.mjs.map +1 -1
- package/lib/components/form-io/form-io-current-user/form-io-current-user-edit-form.d.ts.map +1 -1
- package/lib/components/form-io/form-io-current-user/form-io-current-user.component.d.ts.map +1 -1
- package/lib/components/form-io/form-io-current-user/form-io-current-user.formio.d.ts.map +1 -1
- package/lib/components/left-sidebar/left-sidebar.component.d.ts.map +1 -1
- package/lib/components/menu/menu.service.d.ts +3 -1
- package/lib/components/menu/menu.service.d.ts.map +1 -1
- package/lib/components/right-sidebar/right-sidebar.component.d.ts +3 -1
- package/lib/components/right-sidebar/right-sidebar.component.d.ts.map +1 -1
- package/lib/components/search-fields/search-fields.component.d.ts +12 -2
- package/lib/components/search-fields/search-fields.component.d.ts.map +1 -1
- package/lib/services/shell.service.d.ts +29 -1
- package/lib/services/shell.service.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -168,10 +168,10 @@ export class SearchableDropdownComponent {
|
|
|
168
168
|
}
|
|
169
169
|
}
|
|
170
170
|
SearchableDropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SearchableDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
171
|
-
SearchableDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: SearchableDropdownComponent, selector: "valtimo-searchable-dropdown", inputs: { style: "style", items: "items", buttonText: "buttonText", searchText: "searchText", noResultsText: "noResultsText", disabled: "disabled", width: "width" }, outputs: { itemSelected: "itemSelected" }, host: { listeners: { "click": "clickInside()", "document:click": "clickout()" } }, viewQueries: [{ propertyName: "buttons", predicate: ["button"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container *ngIf=\"buttonText && items\">\n <ng-container [ngTemplateOutlet]=\"(open$ | async) ? opened : closed\"> </ng-container>\n</ng-container>\n\n<ng-template #closed>\n <ng-container *ngIf=\"style === 'button' || !style\">\n <button\n class=\"btn btn-primary btn-sm searchable-dropdown__size\"\n (click)=\"openDropdown()\"\n [style.width.px]=\"width\"\n >\n {{ buttonText }}\n </button>\n </ng-container>\n <ng-container *ngIf=\"style === 'underlinedText'\">\n <h5\n class=\"searchable-dropdown__underline-button\"\n (click)=\"openDropdown()\"\n [style.width.px]=\"width\"\n >\n <b>\n {{ buttonText }}\n </b>\n </h5>\n </ng-container>\n</ng-template>\n\n<ng-template #opened>\n <div class=\"searchable-dropdown__container\" [style.width.px]=\"width\">\n <div class=\"searchable-dropdown__size searchable-dropdown__search\" [style.width.px]=\"width\">\n <input\n #search\n [ngClass]=\"{disabled: disabled}\"\n [placeholder]=\"searchText\"\n [formControl]=\"searchTerm\"\n />\n {{ search.focus() }}\n </div>\n <div\n class=\"searchable-dropdown__list\"\n (mouseenter)=\"mouseEnterList()\"\n (mouseleave)=\"mouseLeaveList()\"\n >\n <ng-container *ngIf=\"filteredItems$ | async as filteredItems\">\n <ng-container\n *ngIf=\"\n filteredItems.length > 0 && focusedItemId$ | async as focusedItemId;\n else noResults\n \"\n >\n <button\n #button\n *ngFor=\"let item of filteredItems\"\n [ngClass]=\"{focus: focusedItemId === item.id, disabled: disabled}\"\n class=\"searchable-dropdown__button searchable-dropdown__size\"\n (click)=\"submit(item.id)\"\n (mouseenter)=\"hoverOverButton(item.id)\"\n (mouseleave)=\"resetFocus()\"\n [style.width.px]=\"width\"\n >\n <span class=\"searchable-dropdown__button-text\">\n {{ item.text }}\n </span>\n </button>\n </ng-container>\n </ng-container>\n </div>\n </div>\n <ng-container [ngTemplateOutlet]=\"space\"> </ng-container>\n</ng-template>\n\n<ng-template #noResults>\n <div\n class=\"searchable-dropdown__button searchable-dropdown__size disabled\"\n [style.width.px]=\"width\"\n >\n <span class=\"searchable-dropdown__button-text\">{{ noResultsText }}</span>\n </div>\n</ng-template>\n\n<ng-template #space>\n <div\n *ngIf=\"style === 'button' || !style\"\n class=\"searchable-dropdown__size\"\n [style.width.px]=\"width\"\n ></div>\n <h5 *ngIf=\"style === 'underlinedText'\" class=\"searchable-dropdown__underline-button\"><b>-</b></h5>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2020 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.searchable-dropdown__size{width:250px;height:34px}.searchable-dropdown__underline-button{text-decoration:underline;width:250px;cursor:pointer}.searchable-dropdown__container{background-color:#fff;position:fixed;z-index:999;border:1px solid #e3e3e3;box-shadow:0 0 6px #0000001f;border-radius:3px;padding:7px 0;overflow:hidden;display:flex;flex-direction:column;width:250px;max-height:300px}.searchable-dropdown__list{list-style:none;padding:0;margin:0;overflow:auto;overflow-x:hidden;z-index:9999}.searchable-dropdown__search{border-bottom:1px solid #dee2e6;padding:8px 24px;display:flex;align-items:center;flex-shrink:0;height:44px}.searchable-dropdown__search input{width:100%;border:none;outline:none;padding:0}.searchable-dropdown__search input:focus{border:none;outline:none}.searchable-dropdown__button{font-weight:400;color:#504e4e;padding:8px 24px;background-color:#fff;cursor:pointer;font-size
|
|
171
|
+
SearchableDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: SearchableDropdownComponent, selector: "valtimo-searchable-dropdown", inputs: { style: "style", items: "items", buttonText: "buttonText", searchText: "searchText", noResultsText: "noResultsText", disabled: "disabled", width: "width" }, outputs: { itemSelected: "itemSelected" }, host: { listeners: { "click": "clickInside()", "document:click": "clickout()" } }, viewQueries: [{ propertyName: "buttons", predicate: ["button"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container *ngIf=\"buttonText && items\">\n <ng-container [ngTemplateOutlet]=\"(open$ | async) ? opened : closed\"> </ng-container>\n</ng-container>\n\n<ng-template #closed>\n <ng-container *ngIf=\"style === 'button' || !style\">\n <button\n class=\"btn btn-primary btn-sm searchable-dropdown__size\"\n (click)=\"openDropdown()\"\n [style.width.px]=\"width\"\n >\n {{ buttonText }}\n </button>\n </ng-container>\n <ng-container *ngIf=\"style === 'underlinedText'\">\n <h5\n class=\"searchable-dropdown__underline-button\"\n (click)=\"openDropdown()\"\n [style.width.px]=\"width\"\n >\n <b>\n {{ buttonText }}\n </b>\n </h5>\n </ng-container>\n</ng-template>\n\n<ng-template #opened>\n <div class=\"searchable-dropdown__container\" [style.width.px]=\"width\">\n <div class=\"searchable-dropdown__size searchable-dropdown__search\" [style.width.px]=\"width\">\n <input\n #search\n [ngClass]=\"{disabled: disabled}\"\n [placeholder]=\"searchText\"\n [formControl]=\"searchTerm\"\n />\n {{ search.focus() }}\n </div>\n <div\n class=\"searchable-dropdown__list\"\n (mouseenter)=\"mouseEnterList()\"\n (mouseleave)=\"mouseLeaveList()\"\n >\n <ng-container *ngIf=\"filteredItems$ | async as filteredItems\">\n <ng-container\n *ngIf=\"\n filteredItems.length > 0 && focusedItemId$ | async as focusedItemId;\n else noResults\n \"\n >\n <button\n #button\n *ngFor=\"let item of filteredItems\"\n [ngClass]=\"{focus: focusedItemId === item.id, disabled: disabled}\"\n class=\"searchable-dropdown__button searchable-dropdown__size\"\n (click)=\"submit(item.id)\"\n (mouseenter)=\"hoverOverButton(item.id)\"\n (mouseleave)=\"resetFocus()\"\n [style.width.px]=\"width\"\n >\n <span class=\"searchable-dropdown__button-text\">\n {{ item.text }}\n </span>\n </button>\n </ng-container>\n </ng-container>\n </div>\n </div>\n <ng-container [ngTemplateOutlet]=\"space\"> </ng-container>\n</ng-template>\n\n<ng-template #noResults>\n <div\n class=\"searchable-dropdown__button searchable-dropdown__size disabled\"\n [style.width.px]=\"width\"\n >\n <span class=\"searchable-dropdown__button-text\">{{ noResultsText }}</span>\n </div>\n</ng-template>\n\n<ng-template #space>\n <div\n *ngIf=\"style === 'button' || !style\"\n class=\"searchable-dropdown__size\"\n [style.width.px]=\"width\"\n ></div>\n <h5 *ngIf=\"style === 'underlinedText'\" class=\"searchable-dropdown__underline-button\"><b>-</b></h5>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2020 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.searchable-dropdown__size{width:250px;height:34px}.searchable-dropdown__underline-button{text-decoration:underline;width:250px;cursor:pointer}.searchable-dropdown__container{background-color:#fff;position:fixed;z-index:999;border:1px solid #e3e3e3;box-shadow:0 0 6px #0000001f;border-radius:3px;padding:7px 0;overflow:hidden;display:flex;flex-direction:column;width:250px;max-height:300px}.searchable-dropdown__list{list-style:none;padding:0;margin:0;overflow:auto;overflow-x:hidden;z-index:9999}.searchable-dropdown__search{border-bottom:1px solid #dee2e6;padding:8px 24px;display:flex;align-items:center;flex-shrink:0;height:44px}.searchable-dropdown__search input{width:100%;border:none;outline:none;padding:0}.searchable-dropdown__search input:focus{border:none;outline:none}.searchable-dropdown__button{font-weight:400;color:#504e4e;padding:8px 24px;background-color:#fff;cursor:pointer;font-size:.8rem;display:flex;align-items:center;border:none;outline:none}.searchable-dropdown__button.focus{background-color:#f5f5f5}.searchable-dropdown__button-text{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.disabled{pointer-events:none;color:#959595;cursor:default}\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: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] });
|
|
172
172
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SearchableDropdownComponent, decorators: [{
|
|
173
173
|
type: Component,
|
|
174
|
-
args: [{ selector: 'valtimo-searchable-dropdown', template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container *ngIf=\"buttonText && items\">\n <ng-container [ngTemplateOutlet]=\"(open$ | async) ? opened : closed\"> </ng-container>\n</ng-container>\n\n<ng-template #closed>\n <ng-container *ngIf=\"style === 'button' || !style\">\n <button\n class=\"btn btn-primary btn-sm searchable-dropdown__size\"\n (click)=\"openDropdown()\"\n [style.width.px]=\"width\"\n >\n {{ buttonText }}\n </button>\n </ng-container>\n <ng-container *ngIf=\"style === 'underlinedText'\">\n <h5\n class=\"searchable-dropdown__underline-button\"\n (click)=\"openDropdown()\"\n [style.width.px]=\"width\"\n >\n <b>\n {{ buttonText }}\n </b>\n </h5>\n </ng-container>\n</ng-template>\n\n<ng-template #opened>\n <div class=\"searchable-dropdown__container\" [style.width.px]=\"width\">\n <div class=\"searchable-dropdown__size searchable-dropdown__search\" [style.width.px]=\"width\">\n <input\n #search\n [ngClass]=\"{disabled: disabled}\"\n [placeholder]=\"searchText\"\n [formControl]=\"searchTerm\"\n />\n {{ search.focus() }}\n </div>\n <div\n class=\"searchable-dropdown__list\"\n (mouseenter)=\"mouseEnterList()\"\n (mouseleave)=\"mouseLeaveList()\"\n >\n <ng-container *ngIf=\"filteredItems$ | async as filteredItems\">\n <ng-container\n *ngIf=\"\n filteredItems.length > 0 && focusedItemId$ | async as focusedItemId;\n else noResults\n \"\n >\n <button\n #button\n *ngFor=\"let item of filteredItems\"\n [ngClass]=\"{focus: focusedItemId === item.id, disabled: disabled}\"\n class=\"searchable-dropdown__button searchable-dropdown__size\"\n (click)=\"submit(item.id)\"\n (mouseenter)=\"hoverOverButton(item.id)\"\n (mouseleave)=\"resetFocus()\"\n [style.width.px]=\"width\"\n >\n <span class=\"searchable-dropdown__button-text\">\n {{ item.text }}\n </span>\n </button>\n </ng-container>\n </ng-container>\n </div>\n </div>\n <ng-container [ngTemplateOutlet]=\"space\"> </ng-container>\n</ng-template>\n\n<ng-template #noResults>\n <div\n class=\"searchable-dropdown__button searchable-dropdown__size disabled\"\n [style.width.px]=\"width\"\n >\n <span class=\"searchable-dropdown__button-text\">{{ noResultsText }}</span>\n </div>\n</ng-template>\n\n<ng-template #space>\n <div\n *ngIf=\"style === 'button' || !style\"\n class=\"searchable-dropdown__size\"\n [style.width.px]=\"width\"\n ></div>\n <h5 *ngIf=\"style === 'underlinedText'\" class=\"searchable-dropdown__underline-button\"><b>-</b></h5>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2020 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.searchable-dropdown__size{width:250px;height:34px}.searchable-dropdown__underline-button{text-decoration:underline;width:250px;cursor:pointer}.searchable-dropdown__container{background-color:#fff;position:fixed;z-index:999;border:1px solid #e3e3e3;box-shadow:0 0 6px #0000001f;border-radius:3px;padding:7px 0;overflow:hidden;display:flex;flex-direction:column;width:250px;max-height:300px}.searchable-dropdown__list{list-style:none;padding:0;margin:0;overflow:auto;overflow-x:hidden;z-index:9999}.searchable-dropdown__search{border-bottom:1px solid #dee2e6;padding:8px 24px;display:flex;align-items:center;flex-shrink:0;height:44px}.searchable-dropdown__search input{width:100%;border:none;outline:none;padding:0}.searchable-dropdown__search input:focus{border:none;outline:none}.searchable-dropdown__button{font-weight:400;color:#504e4e;padding:8px 24px;background-color:#fff;cursor:pointer;font-size
|
|
174
|
+
args: [{ selector: 'valtimo-searchable-dropdown', template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container *ngIf=\"buttonText && items\">\n <ng-container [ngTemplateOutlet]=\"(open$ | async) ? opened : closed\"> </ng-container>\n</ng-container>\n\n<ng-template #closed>\n <ng-container *ngIf=\"style === 'button' || !style\">\n <button\n class=\"btn btn-primary btn-sm searchable-dropdown__size\"\n (click)=\"openDropdown()\"\n [style.width.px]=\"width\"\n >\n {{ buttonText }}\n </button>\n </ng-container>\n <ng-container *ngIf=\"style === 'underlinedText'\">\n <h5\n class=\"searchable-dropdown__underline-button\"\n (click)=\"openDropdown()\"\n [style.width.px]=\"width\"\n >\n <b>\n {{ buttonText }}\n </b>\n </h5>\n </ng-container>\n</ng-template>\n\n<ng-template #opened>\n <div class=\"searchable-dropdown__container\" [style.width.px]=\"width\">\n <div class=\"searchable-dropdown__size searchable-dropdown__search\" [style.width.px]=\"width\">\n <input\n #search\n [ngClass]=\"{disabled: disabled}\"\n [placeholder]=\"searchText\"\n [formControl]=\"searchTerm\"\n />\n {{ search.focus() }}\n </div>\n <div\n class=\"searchable-dropdown__list\"\n (mouseenter)=\"mouseEnterList()\"\n (mouseleave)=\"mouseLeaveList()\"\n >\n <ng-container *ngIf=\"filteredItems$ | async as filteredItems\">\n <ng-container\n *ngIf=\"\n filteredItems.length > 0 && focusedItemId$ | async as focusedItemId;\n else noResults\n \"\n >\n <button\n #button\n *ngFor=\"let item of filteredItems\"\n [ngClass]=\"{focus: focusedItemId === item.id, disabled: disabled}\"\n class=\"searchable-dropdown__button searchable-dropdown__size\"\n (click)=\"submit(item.id)\"\n (mouseenter)=\"hoverOverButton(item.id)\"\n (mouseleave)=\"resetFocus()\"\n [style.width.px]=\"width\"\n >\n <span class=\"searchable-dropdown__button-text\">\n {{ item.text }}\n </span>\n </button>\n </ng-container>\n </ng-container>\n </div>\n </div>\n <ng-container [ngTemplateOutlet]=\"space\"> </ng-container>\n</ng-template>\n\n<ng-template #noResults>\n <div\n class=\"searchable-dropdown__button searchable-dropdown__size disabled\"\n [style.width.px]=\"width\"\n >\n <span class=\"searchable-dropdown__button-text\">{{ noResultsText }}</span>\n </div>\n</ng-template>\n\n<ng-template #space>\n <div\n *ngIf=\"style === 'button' || !style\"\n class=\"searchable-dropdown__size\"\n [style.width.px]=\"width\"\n ></div>\n <h5 *ngIf=\"style === 'underlinedText'\" class=\"searchable-dropdown__underline-button\"><b>-</b></h5>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2020 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.searchable-dropdown__size{width:250px;height:34px}.searchable-dropdown__underline-button{text-decoration:underline;width:250px;cursor:pointer}.searchable-dropdown__container{background-color:#fff;position:fixed;z-index:999;border:1px solid #e3e3e3;box-shadow:0 0 6px #0000001f;border-radius:3px;padding:7px 0;overflow:hidden;display:flex;flex-direction:column;width:250px;max-height:300px}.searchable-dropdown__list{list-style:none;padding:0;margin:0;overflow:auto;overflow-x:hidden;z-index:9999}.searchable-dropdown__search{border-bottom:1px solid #dee2e6;padding:8px 24px;display:flex;align-items:center;flex-shrink:0;height:44px}.searchable-dropdown__search input{width:100%;border:none;outline:none;padding:0}.searchable-dropdown__search input:focus{border:none;outline:none}.searchable-dropdown__button{font-weight:400;color:#504e4e;padding:8px 24px;background-color:#fff;cursor:pointer;font-size:.8rem;display:flex;align-items:center;border:none;outline:none}.searchable-dropdown__button.focus{background-color:#f5f5f5}.searchable-dropdown__button-text{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.disabled{pointer-events:none;color:#959595;cursor:default}\n"] }]
|
|
175
175
|
}], propDecorators: { style: [{
|
|
176
176
|
type: Input
|
|
177
177
|
}], items: [{
|
|
@@ -20,11 +20,11 @@ import * as i2 from "@ngx-translate/core";
|
|
|
20
20
|
export class TimelineComponent {
|
|
21
21
|
}
|
|
22
22
|
TimelineComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TimelineComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
23
|
-
TimelineComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: TimelineComponent, selector: "valtimo-timeline", inputs: { items: "items" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div>\n <div id=\"no-results\" class=\"p-5\" *ngIf=\"items?.length === 0\">No result found</div>\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 <br/>\n <span>{{ item.time }}</span>\n </div>\n <div class=\"timeline-content mt-1\">\n <div class=\"timeline-header p-0\">\n <span class=\"timeline-author\">{{ item.user }}</span>\n <br />\n <p class=\"timeline-activity\">{{ item.activity }}</p>\n <div class=\"timeline-summary\">\n <p>{{ item.summaryTranslationKey | translate : item.summaryTranslationParams }}</p>\n </div>\n </div>\n </div>\n </li>\n </ul>\n </div>\n</div>\n", styles: [".timeline-activity{font-size:100%}.timeline-summary p{font-size:.8rem}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] });
|
|
23
|
+
TimelineComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: TimelineComponent, selector: "valtimo-timeline", inputs: { items: "items" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div>\n <div id=\"no-results\" class=\"p-5\" *ngIf=\"items?.length === 0\">No result found</div>\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 <br />\n <span>{{ item.time }}</span>\n </div>\n <div class=\"timeline-content mt-1\">\n <div class=\"timeline-header p-0\">\n <span class=\"timeline-author\">{{ item.user }}</span>\n <br />\n <p class=\"timeline-activity\">{{ item.activity }}</p>\n <div class=\"timeline-summary\">\n <p>{{ item.summaryTranslationKey | translate : item.summaryTranslationParams }}</p>\n </div>\n </div>\n </div>\n </li>\n </ul>\n </div>\n</div>\n", styles: [".timeline-activity{font-size:100%}.timeline-summary p{font-size:.8rem}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] });
|
|
24
24
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TimelineComponent, decorators: [{
|
|
25
25
|
type: Component,
|
|
26
|
-
args: [{ selector: 'valtimo-timeline', template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div>\n <div id=\"no-results\" class=\"p-5\" *ngIf=\"items?.length === 0\">No result found</div>\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 <br/>\n <span>{{ item.time }}</span>\n </div>\n <div class=\"timeline-content mt-1\">\n <div class=\"timeline-header p-0\">\n <span class=\"timeline-author\">{{ item.user }}</span>\n <br />\n <p class=\"timeline-activity\">{{ item.activity }}</p>\n <div class=\"timeline-summary\">\n <p>{{ item.summaryTranslationKey | translate : item.summaryTranslationParams }}</p>\n </div>\n </div>\n </div>\n </li>\n </ul>\n </div>\n</div>\n", styles: [".timeline-activity{font-size:100%}.timeline-summary p{font-size:.8rem}\n"] }]
|
|
26
|
+
args: [{ selector: 'valtimo-timeline', template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div>\n <div id=\"no-results\" class=\"p-5\" *ngIf=\"items?.length === 0\">No result found</div>\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 <br />\n <span>{{ item.time }}</span>\n </div>\n <div class=\"timeline-content mt-1\">\n <div class=\"timeline-header p-0\">\n <span class=\"timeline-author\">{{ item.user }}</span>\n <br />\n <p class=\"timeline-activity\">{{ item.activity }}</p>\n <div class=\"timeline-summary\">\n <p>{{ item.summaryTranslationKey | translate : item.summaryTranslationParams }}</p>\n </div>\n </div>\n </div>\n </li>\n </ul>\n </div>\n</div>\n", styles: [".timeline-activity{font-size:100%}.timeline-summary p{font-size:.8rem}\n"] }]
|
|
27
27
|
}], propDecorators: { items: [{
|
|
28
28
|
type: Input
|
|
29
29
|
}] } });
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZWxpbmUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy90aW1lbGluZS90aW1lbGluZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3RpbWVsaW5lL3RpbWVsaW5lLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7Ozs7QUFRL0MsTUFBTSxPQUFPLGlCQUFpQjs7K0dBQWpCLGlCQUFpQjttR0FBakIsaUJBQWlCLG9GQ3hCOUIsaWlEQXdDQTs0RkRoQmEsaUJBQWlCO2tCQUw3QixTQUFTOytCQUNFLGtCQUFrQjs4QkFLbkIsS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjAgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtDb21wb25lbnQsIElucHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7VGltZWxpbmVJdGVtfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLXRpbWVsaW5lJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RpbWVsaW5lLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGltZWxpbmUuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBUaW1lbGluZUNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGl0ZW1zOiBBcnJheTxUaW1lbGluZUl0ZW0+O1xufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjAgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuXG48ZGl2PlxuICA8ZGl2IGlkPVwibm8tcmVzdWx0c1wiIGNsYXNzPVwicC01XCIgKm5nSWY9XCJpdGVtcz8ubGVuZ3RoID09PSAwXCI+Tm8gcmVzdWx0IGZvdW5kPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJwYi01XCIgKm5nSWY9XCJpdGVtcz8ubGVuZ3RoID4gMFwiPlxuICAgIDx1bCBjbGFzcz1cInRpbWVsaW5lIG1iLTAgcHktNVwiPlxuICAgICAgPGxpIGNsYXNzPVwidGltZWxpbmUtaXRlbSBzdGF0dXMtZG9uZVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lbGluZS1kYXRlXCI+XG4gICAgICAgICAgPHNwYW4+e3sgaXRlbS5kYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDxiciAvPlxuICAgICAgICAgIDxzcGFuPnt7IGl0ZW0udGltZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lbGluZS1jb250ZW50IG10LTFcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZWxpbmUtaGVhZGVyIHAtMFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aW1lbGluZS1hdXRob3JcIj57eyBpdGVtLnVzZXIgfX08L3NwYW4+XG4gICAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwidGltZWxpbmUtYWN0aXZpdHlcIj57eyBpdGVtLmFjdGl2aXR5IH19PC9wPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWVsaW5lLXN1bW1hcnlcIj5cbiAgICAgICAgICAgICAgPHA+e3sgaXRlbS5zdW1tYXJ5VHJhbnNsYXRpb25LZXkgfCB0cmFuc2xhdGUgOiBpdGVtLnN1bW1hcnlUcmFuc2xhdGlvblBhcmFtcyB9fTwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbGk+XG4gICAgPC91bD5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -1,12 +1,26 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
|
-
import { BehaviorSubject } from 'rxjs';
|
|
2
|
+
import { BehaviorSubject, combineLatest, fromEvent, map } from 'rxjs';
|
|
3
|
+
import { debounceTime, take } from 'rxjs/operators';
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@valtimo/config";
|
|
4
6
|
export class ShellService {
|
|
5
|
-
constructor() {
|
|
7
|
+
constructor(rendererFactory2, configService) {
|
|
8
|
+
this.rendererFactory2 = rendererFactory2;
|
|
9
|
+
this.configService = configService;
|
|
6
10
|
this._sideBarExpanded$ = new BehaviorSubject(true);
|
|
7
11
|
this._panelExpanded$ = new BehaviorSubject(false);
|
|
8
12
|
this._largeScreen$ = new BehaviorSubject(true);
|
|
9
13
|
this._mouseOnTopBar$ = new BehaviorSubject(false);
|
|
14
|
+
this._sidenavWidth$ = new BehaviorSubject(300);
|
|
15
|
+
this._sidenavElement$ = new BehaviorSubject(undefined);
|
|
16
|
+
this._contentElement$ = new BehaviorSubject(undefined);
|
|
17
|
+
this._resizeBorderElement$ = new BehaviorSubject(undefined);
|
|
18
|
+
this._mouseX$ = fromEvent(document.body, 'mousemove').pipe(map((e) => e.pageX));
|
|
19
|
+
this._isResizing$ = new BehaviorSubject(false);
|
|
20
|
+
this.renderer = rendererFactory2.createRenderer(null, null);
|
|
21
|
+
this.openSidenavSizeSubscription();
|
|
22
|
+
this.openMouseSubscriptions();
|
|
23
|
+
this.initMenuWidth(configService.config);
|
|
10
24
|
}
|
|
11
25
|
get sideBarExpanded$() {
|
|
12
26
|
return this._sideBarExpanded$.asObservable();
|
|
@@ -20,6 +34,12 @@ export class ShellService {
|
|
|
20
34
|
get mouseOnTopBar$() {
|
|
21
35
|
return this._mouseOnTopBar$.asObservable();
|
|
22
36
|
}
|
|
37
|
+
get sidenavWidth$() {
|
|
38
|
+
return this._sidenavWidth$.asObservable();
|
|
39
|
+
}
|
|
40
|
+
ngOnDestroy() {
|
|
41
|
+
this.sidenavSizeSubscription.unsubscribe();
|
|
42
|
+
}
|
|
23
43
|
toggleSideBar() {
|
|
24
44
|
const isExpanded = this._sideBarExpanded$.getValue();
|
|
25
45
|
this._sideBarExpanded$.next(!isExpanded);
|
|
@@ -40,13 +60,109 @@ export class ShellService {
|
|
|
40
60
|
setMouseOnTopBar(mouseOnTopBar) {
|
|
41
61
|
this._mouseOnTopBar$.next(mouseOnTopBar);
|
|
42
62
|
}
|
|
63
|
+
setSidenavElement(element) {
|
|
64
|
+
this._sidenavElement$.next(element);
|
|
65
|
+
this.createResizeBorderElement(element);
|
|
66
|
+
}
|
|
67
|
+
setContentElement(element) {
|
|
68
|
+
this._contentElement$.next(element);
|
|
69
|
+
}
|
|
70
|
+
createResizeBorderElement(sidenavElement) {
|
|
71
|
+
const borderElement = this.renderer.createElement('div');
|
|
72
|
+
this.renderer.addClass(borderElement, 'resize-border');
|
|
73
|
+
this.renderer.appendChild(sidenavElement, borderElement);
|
|
74
|
+
this._resizeBorderElement$.next(borderElement);
|
|
75
|
+
this.renderer.listen(borderElement, 'mouseenter', () => {
|
|
76
|
+
this.renderer.addClass(borderElement, 'resize-hover');
|
|
77
|
+
});
|
|
78
|
+
this.renderer.listen(borderElement, 'mouseleave', () => {
|
|
79
|
+
this._isResizing$.pipe(take(1)).subscribe(isResizing => {
|
|
80
|
+
if (!isResizing) {
|
|
81
|
+
this.renderer.removeClass(borderElement, 'resize-hover');
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
this.renderer.listen(borderElement, 'mousedown', (event) => {
|
|
86
|
+
this._sidenavWidth$.pipe(take(1)).subscribe(sidenavWidth => {
|
|
87
|
+
this.sidenavWidthOnClick = sidenavWidth;
|
|
88
|
+
this.xOnClick = event.pageX;
|
|
89
|
+
this._isResizing$.next(true);
|
|
90
|
+
this.renderer.setStyle(document.body, 'user-select', 'none');
|
|
91
|
+
this.renderer.setStyle(document.body, 'cursor', 'col-resize');
|
|
92
|
+
this.renderer.setStyle(document.querySelector('.cds--side-nav__navigation'), 'pointer-events', 'none');
|
|
93
|
+
this.renderer.setStyle(document.querySelector('.main-content'), 'pointer-events', 'none');
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
openSidenavSizeSubscription() {
|
|
98
|
+
this.sidenavSizeSubscription = combineLatest([
|
|
99
|
+
this._largeScreen$,
|
|
100
|
+
this._sidenavWidth$,
|
|
101
|
+
this._sidenavElement$,
|
|
102
|
+
this._contentElement$,
|
|
103
|
+
this._resizeBorderElement$,
|
|
104
|
+
]).subscribe(([largeScreen, sidenavWidth, sidenavElement, contentElement, resizeBorderElement]) => {
|
|
105
|
+
if (!largeScreen && sidenavElement && contentElement && resizeBorderElement) {
|
|
106
|
+
this.renderer.removeStyle(sidenavElement, 'min-width');
|
|
107
|
+
this.renderer.removeStyle(sidenavElement, 'width');
|
|
108
|
+
this.renderer.removeStyle(sidenavElement, 'transition');
|
|
109
|
+
this.renderer.removeStyle(contentElement, 'padding-left');
|
|
110
|
+
this.renderer.addClass(resizeBorderElement, 'resize-border--invisible');
|
|
111
|
+
}
|
|
112
|
+
else if (largeScreen &&
|
|
113
|
+
sidenavElement &&
|
|
114
|
+
contentElement &&
|
|
115
|
+
typeof sidenavWidth === 'number') {
|
|
116
|
+
const pixelWidth = `${sidenavWidth}px`;
|
|
117
|
+
this.renderer.setStyle(sidenavElement, 'min-width', `${pixelWidth}`);
|
|
118
|
+
this.renderer.setStyle(sidenavElement, 'width', `${pixelWidth}`);
|
|
119
|
+
this.renderer.setStyle(sidenavElement, 'transition', 'none');
|
|
120
|
+
this.renderer.setStyle(contentElement, 'padding-left', `calc(2rem + ${pixelWidth})`);
|
|
121
|
+
this.renderer.removeClass(resizeBorderElement, 'resize-border--invisible');
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
openMouseSubscriptions() {
|
|
126
|
+
this.mouseXSubscription = combineLatest([this._mouseX$, this._isResizing$])
|
|
127
|
+
.pipe(debounceTime(3))
|
|
128
|
+
.subscribe(([x, isResizing]) => {
|
|
129
|
+
if (isResizing) {
|
|
130
|
+
const offSetWidth = this.xOnClick - x;
|
|
131
|
+
const newSidenavWidth = this.sidenavWidthOnClick - offSetWidth;
|
|
132
|
+
if (newSidenavWidth <= this.maxMenuWidth && newSidenavWidth >= this.minMenuWidth) {
|
|
133
|
+
this._sidenavWidth$.next(newSidenavWidth);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
this.mouseUpSubscription = fromEvent(document, 'mouseup').subscribe(() => {
|
|
138
|
+
this.stopResizing();
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
stopResizing() {
|
|
142
|
+
this.renderer.removeStyle(document.body, 'user-select');
|
|
143
|
+
this.renderer.removeStyle(document.body, 'cursor');
|
|
144
|
+
this._isResizing$.next(false);
|
|
145
|
+
this.renderer.removeClass(this._resizeBorderElement$.getValue(), 'resize-hover');
|
|
146
|
+
this.renderer.removeStyle(document.querySelector('.cds--side-nav__navigation'), 'pointer-events');
|
|
147
|
+
this.renderer.removeStyle(document.querySelector('.main-content'), 'pointer-events');
|
|
148
|
+
localStorage.setItem('sidenavWidth', this._sidenavWidth$.getValue().toString());
|
|
149
|
+
}
|
|
150
|
+
initMenuWidth(config) {
|
|
151
|
+
const customLeftSidebar = config?.customLeftSidebar;
|
|
152
|
+
const localStorageWidth = localStorage.getItem('sidenavWidth');
|
|
153
|
+
const localStorageWidthNumber = localStorageWidth && +localStorageWidth;
|
|
154
|
+
const configWidth = customLeftSidebar?.defaultMenuWidth;
|
|
155
|
+
this._sidenavWidth$.next(localStorageWidthNumber || configWidth || 256);
|
|
156
|
+
this.minMenuWidth = customLeftSidebar?.minMenuWidth || 150;
|
|
157
|
+
this.maxMenuWidth = customLeftSidebar?.maxMenuWidth || 500;
|
|
158
|
+
}
|
|
43
159
|
}
|
|
44
|
-
ShellService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ShellService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
160
|
+
ShellService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ShellService, deps: [{ token: i0.RendererFactory2 }, { token: i1.ConfigService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
45
161
|
ShellService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ShellService, providedIn: 'root' });
|
|
46
162
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ShellService, decorators: [{
|
|
47
163
|
type: Injectable,
|
|
48
164
|
args: [{
|
|
49
165
|
providedIn: 'root',
|
|
50
166
|
}]
|
|
51
|
-
}] });
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlbGwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vY29tcG9uZW50cy9zcmMvbGliL3NlcnZpY2VzL3NoZWxsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsZUFBZSxFQUFhLE1BQU0sTUFBTSxDQUFDOztBQUtqRCxNQUFNLE9BQU8sWUFBWTtJQUh6QjtRQUltQixzQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBVSxJQUFJLENBQUMsQ0FBQztRQUN2RCxvQkFBZSxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3RELGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQVUsSUFBSSxDQUFDLENBQUM7UUFDbkQsb0JBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztLQXdDeEU7SUF0Q0MsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUNELElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUNELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBQ0QsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRUQsYUFBYTtRQUNYLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNyRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELFdBQVc7UUFDVCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ25ELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELGdCQUFnQixDQUFDLFVBQW1CO1FBQ2xDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxVQUFtQjtRQUNwQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxjQUFjLENBQUMsT0FBZ0I7UUFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELGdCQUFnQixDQUFDLGFBQXNCO1FBQ3JDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzNDLENBQUM7OzBHQTNDVSxZQUFZOzhHQUFaLFlBQVksY0FGWCxNQUFNOzRGQUVQLFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFNoZWxsU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NpZGVCYXJFeHBhbmRlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYW5lbEV4cGFuZGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9sYXJnZVNjcmVlbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tb3VzZU9uVG9wQmFyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGdldCBzaWRlQmFyRXhwYW5kZWQkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9zaWRlQmFyRXhwYW5kZWQkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG4gIGdldCBwYW5lbEV4cGFuZGVkJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcGFuZWxFeHBhbmRlZCQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cbiAgZ2V0IGxhcmdlU2NyZWVuJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fbGFyZ2VTY3JlZW4kLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG4gIGdldCBtb3VzZU9uVG9wQmFyJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fbW91c2VPblRvcEJhciQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICB0b2dnbGVTaWRlQmFyKCk6IHZvaWQge1xuICAgIGNvbnN0IGlzRXhwYW5kZWQgPSB0aGlzLl9zaWRlQmFyRXhwYW5kZWQkLmdldFZhbHVlKCk7XG4gICAgdGhpcy5fc2lkZUJhckV4cGFuZGVkJC5uZXh0KCFpc0V4cGFuZGVkKTtcbiAgfVxuXG4gIHRvZ2dsZVBhbmVsKCk6IHZvaWQge1xuICAgIGNvbnN0IGlzRXhwYW5kZWQgPSB0aGlzLl9wYW5lbEV4cGFuZGVkJC5nZXRWYWx1ZSgpO1xuICAgIHRoaXMuX3BhbmVsRXhwYW5kZWQkLm5leHQoIWlzRXhwYW5kZWQpO1xuICB9XG5cbiAgc2V0UGFuZWxFeHBhbmRlZChpc0V4cGFuZGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5fcGFuZWxFeHBhbmRlZCQubmV4dChpc0V4cGFuZGVkKTtcbiAgfVxuXG4gIHNldFNpZGVCYXJFeHBhbmRlZChpc0V4cGFuZGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5fc2lkZUJhckV4cGFuZGVkJC5uZXh0KGlzRXhwYW5kZWQpO1xuICB9XG5cbiAgc2V0TGFyZ2VTY3JlZW4oaXNMYXJnZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX2xhcmdlU2NyZWVuJC5uZXh0KGlzTGFyZ2UpO1xuICB9XG5cbiAgc2V0TW91c2VPblRvcEJhcihtb3VzZU9uVG9wQmFyOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5fbW91c2VPblRvcEJhciQubmV4dChtb3VzZU9uVG9wQmFyKTtcbiAgfVxufVxuIl19
|
|
167
|
+
}], ctorParameters: function () { return [{ type: i0.RendererFactory2 }, { type: i1.ConfigService }]; } });
|
|
168
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlbGwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vY29tcG9uZW50cy9zcmMvbGliL3NlcnZpY2VzL3NoZWxsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBeUMsTUFBTSxlQUFlLENBQUM7QUFDakYsT0FBTyxFQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBMkIsTUFBTSxNQUFNLENBQUM7QUFDOUYsT0FBTyxFQUFDLFlBQVksRUFBRSxJQUFJLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBTWxELE1BQU0sT0FBTyxZQUFZO0lBdUN2QixZQUNtQixnQkFBa0MsRUFDbEMsYUFBNEI7UUFENUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQXZDOUIsc0JBQWlCLEdBQUcsSUFBSSxlQUFlLENBQVUsSUFBSSxDQUFDLENBQUM7UUFDdkQsb0JBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUN0RCxrQkFBYSxHQUFHLElBQUksZUFBZSxDQUFVLElBQUksQ0FBQyxDQUFDO1FBQ25ELG9CQUFlLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDdEQsbUJBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBUyxHQUFHLENBQUMsQ0FBQztRQUNsRCxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBYyxTQUFTLENBQUMsQ0FBQztRQUMvRCxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBYyxTQUFTLENBQUMsQ0FBQztRQUMvRCwwQkFBcUIsR0FBRyxJQUFJLGVBQWUsQ0FBYyxTQUFTLENBQUMsQ0FBQztRQUNwRSxhQUFRLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUNwRSxHQUFHLENBQUMsQ0FBQyxDQUFhLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FDaEMsQ0FBQztRQUNlLGlCQUFZLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUE4QmxFLElBQUksQ0FBQyxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBekJELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQy9DLENBQUM7SUFDRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFDRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUNELElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBWUQsV0FBVztRQUNULElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRUQsYUFBYTtRQUNYLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNyRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELFdBQVc7UUFDVCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ25ELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELGdCQUFnQixDQUFDLFVBQW1CO1FBQ2xDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxVQUFtQjtRQUNwQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxjQUFjLENBQUMsT0FBZ0I7UUFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELGdCQUFnQixDQUFDLGFBQXNCO1FBQ3JDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxPQUFvQjtRQUNwQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsT0FBb0I7UUFDcEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRU8seUJBQXlCLENBQUMsY0FBMkI7UUFDM0QsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRS9DLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFO1lBQ3JELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFO1lBQ3JELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDckQsSUFBSSxDQUFDLFVBQVUsRUFBRTtvQkFDZixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsY0FBYyxDQUFDLENBQUM7aUJBQzFEO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsQ0FBQyxLQUFpQixFQUFFLEVBQUU7WUFDckUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUN6RCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsWUFBWSxDQUFDO2dCQUN4QyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDN0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7Z0JBQzlELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUNwQixRQUFRLENBQUMsYUFBYSxDQUFDLDRCQUE0QixDQUFDLEVBQ3BELGdCQUFnQixFQUNoQixNQUFNLENBQ1AsQ0FBQztnQkFDRixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzVGLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sMkJBQTJCO1FBQ2pDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxhQUFhLENBQUM7WUFDM0MsSUFBSSxDQUFDLGFBQWE7WUFDbEIsSUFBSSxDQUFDLGNBQWM7WUFDbkIsSUFBSSxDQUFDLGdCQUFnQjtZQUNyQixJQUFJLENBQUMsZ0JBQWdCO1lBQ3JCLElBQUksQ0FBQyxxQkFBcUI7U0FDM0IsQ0FBQyxDQUFDLFNBQVMsQ0FDVixDQUFDLENBQUMsV0FBVyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixDQUFDLEVBQUUsRUFBRTtZQUNuRixJQUFJLENBQUMsV0FBVyxJQUFJLGNBQWMsSUFBSSxjQUFjLElBQUksbUJBQW1CLEVBQUU7Z0JBQzNFLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUMsQ0FBQztnQkFDdkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUNuRCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLENBQUM7Z0JBQ3hELElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxjQUFjLENBQUMsQ0FBQztnQkFDMUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsMEJBQTBCLENBQUMsQ0FBQzthQUN6RTtpQkFBTSxJQUNMLFdBQVc7Z0JBQ1gsY0FBYztnQkFDZCxjQUFjO2dCQUNkLE9BQU8sWUFBWSxLQUFLLFFBQVEsRUFDaEM7Z0JBQ0EsTUFBTSxVQUFVLEdBQUcsR0FBRyxZQUFZLElBQUksQ0FBQztnQkFDdkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFLFdBQVcsRUFBRSxHQUFHLFVBQVUsRUFBRSxDQUFDLENBQUM7Z0JBQ3JFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxPQUFPLEVBQUUsR0FBRyxVQUFVLEVBQUUsQ0FBQyxDQUFDO2dCQUNqRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUM3RCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsY0FBYyxFQUFFLGVBQWUsVUFBVSxHQUFHLENBQUMsQ0FBQztnQkFDckYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsbUJBQW1CLEVBQUUsMEJBQTBCLENBQUMsQ0FBQzthQUM1RTtRQUNILENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVPLHNCQUFzQjtRQUM1QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDeEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNyQixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFO1lBQzdCLElBQUksVUFBVSxFQUFFO2dCQUNkLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO2dCQUN0QyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsV0FBVyxDQUFDO2dCQUUvRCxJQUFJLGVBQWUsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLGVBQWUsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO29CQUNoRixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztpQkFDM0M7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUN2RSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sWUFBWTtRQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ2pGLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUN2QixRQUFRLENBQUMsYUFBYSxDQUFDLDRCQUE0QixDQUFDLEVBQ3BELGdCQUFnQixDQUNqQixDQUFDO1FBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3JGLFlBQVksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRU8sYUFBYSxDQUFDLE1BQXFCO1FBQ3pDLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxFQUFFLGlCQUFpQixDQUFDO1FBQ3BELE1BQU0saUJBQWlCLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMvRCxNQUFNLHVCQUF1QixHQUFHLGlCQUFpQixJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDeEUsTUFBTSxXQUFXLEdBQUcsaUJBQWlCLEVBQUUsZ0JBQWdCLENBQUM7UUFFeEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLElBQUksV0FBVyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxZQUFZLEdBQUcsaUJBQWlCLEVBQUUsWUFBWSxJQUFJLEdBQUcsQ0FBQztRQUMzRCxJQUFJLENBQUMsWUFBWSxHQUFHLGlCQUFpQixFQUFFLFlBQVksSUFBSSxHQUFHLENBQUM7SUFDN0QsQ0FBQzs7MEdBcE1VLFlBQVk7OEdBQVosWUFBWSxjQUZYLE1BQU07NEZBRVAsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIE9uRGVzdHJveSwgUmVuZGVyZXIyLCBSZW5kZXJlckZhY3RvcnkyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmcm9tRXZlbnQsIG1hcCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCB0YWtlfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0NvbmZpZ1NlcnZpY2UsIFZhbHRpbW9Db25maWd9IGZyb20gJ0B2YWx0aW1vL2NvbmZpZyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTaGVsbFNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlbmRlcmVyITogUmVuZGVyZXIyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zaWRlQmFyRXhwYW5kZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFuZWxFeHBhbmRlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGFyZ2VTY3JlZW4kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbW91c2VPblRvcEJhciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2lkZW5hdldpZHRoJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigzMDApO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zaWRlbmF2RWxlbWVudCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEhUTUxFbGVtZW50Pih1bmRlZmluZWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jb250ZW50RWxlbWVudCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEhUTUxFbGVtZW50Pih1bmRlZmluZWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZXNpemVCb3JkZXJFbGVtZW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SFRNTEVsZW1lbnQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21vdXNlWCQgPSBmcm9tRXZlbnQoZG9jdW1lbnQuYm9keSwgJ21vdXNlbW92ZScpLnBpcGUoXG4gICAgbWFwKChlOiBNb3VzZUV2ZW50KSA9PiBlLnBhZ2VYKVxuICApO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc1Jlc2l6aW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHNpZGVuYXZXaWR0aE9uQ2xpY2shOiBudW1iZXI7XG4gIHByaXZhdGUgeE9uQ2xpY2shOiBudW1iZXI7XG4gIHByaXZhdGUgc2lkZW5hdlNpemVTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgbW91c2VYU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIG1vdXNlVXBTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgbWF4TWVudVdpZHRoITogbnVtYmVyO1xuICBwcml2YXRlIG1pbk1lbnVXaWR0aCE6IG51bWJlcjtcblxuICBnZXQgc2lkZUJhckV4cGFuZGVkJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fc2lkZUJhckV4cGFuZGVkJC5hc09ic2VydmFibGUoKTtcbiAgfVxuICBnZXQgcGFuZWxFeHBhbmRlZCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3BhbmVsRXhwYW5kZWQkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG4gIGdldCBsYXJnZVNjcmVlbiQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX2xhcmdlU2NyZWVuJC5hc09ic2VydmFibGUoKTtcbiAgfVxuICBnZXQgbW91c2VPblRvcEJhciQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX21vdXNlT25Ub3BCYXIkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IHNpZGVuYXZXaWR0aCQoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fc2lkZW5hdldpZHRoJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXJGYWN0b3J5MjogUmVuZGVyZXJGYWN0b3J5MixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyRmFjdG9yeTIuY3JlYXRlUmVuZGVyZXIobnVsbCwgbnVsbCk7XG4gICAgdGhpcy5vcGVuU2lkZW5hdlNpemVTdWJzY3JpcHRpb24oKTtcbiAgICB0aGlzLm9wZW5Nb3VzZVN1YnNjcmlwdGlvbnMoKTtcbiAgICB0aGlzLmluaXRNZW51V2lkdGgoY29uZmlnU2VydmljZS5jb25maWcpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zaWRlbmF2U2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgdG9nZ2xlU2lkZUJhcigpOiB2b2lkIHtcbiAgICBjb25zdCBpc0V4cGFuZGVkID0gdGhpcy5fc2lkZUJhckV4cGFuZGVkJC5nZXRWYWx1ZSgpO1xuICAgIHRoaXMuX3NpZGVCYXJFeHBhbmRlZCQubmV4dCghaXNFeHBhbmRlZCk7XG4gIH1cblxuICB0b2dnbGVQYW5lbCgpOiB2b2lkIHtcbiAgICBjb25zdCBpc0V4cGFuZGVkID0gdGhpcy5fcGFuZWxFeHBhbmRlZCQuZ2V0VmFsdWUoKTtcbiAgICB0aGlzLl9wYW5lbEV4cGFuZGVkJC5uZXh0KCFpc0V4cGFuZGVkKTtcbiAgfVxuXG4gIHNldFBhbmVsRXhwYW5kZWQoaXNFeHBhbmRlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX3BhbmVsRXhwYW5kZWQkLm5leHQoaXNFeHBhbmRlZCk7XG4gIH1cblxuICBzZXRTaWRlQmFyRXhwYW5kZWQoaXNFeHBhbmRlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX3NpZGVCYXJFeHBhbmRlZCQubmV4dChpc0V4cGFuZGVkKTtcbiAgfVxuXG4gIHNldExhcmdlU2NyZWVuKGlzTGFyZ2U6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLl9sYXJnZVNjcmVlbiQubmV4dChpc0xhcmdlKTtcbiAgfVxuXG4gIHNldE1vdXNlT25Ub3BCYXIobW91c2VPblRvcEJhcjogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX21vdXNlT25Ub3BCYXIkLm5leHQobW91c2VPblRvcEJhcik7XG4gIH1cblxuICBzZXRTaWRlbmF2RWxlbWVudChlbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuX3NpZGVuYXZFbGVtZW50JC5uZXh0KGVsZW1lbnQpO1xuICAgIHRoaXMuY3JlYXRlUmVzaXplQm9yZGVyRWxlbWVudChlbGVtZW50KTtcbiAgfVxuXG4gIHNldENvbnRlbnRFbGVtZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5fY29udGVudEVsZW1lbnQkLm5leHQoZWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVJlc2l6ZUJvcmRlckVsZW1lbnQoc2lkZW5hdkVsZW1lbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3QgYm9yZGVyRWxlbWVudCA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhib3JkZXJFbGVtZW50LCAncmVzaXplLWJvcmRlcicpO1xuICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoc2lkZW5hdkVsZW1lbnQsIGJvcmRlckVsZW1lbnQpO1xuICAgIHRoaXMuX3Jlc2l6ZUJvcmRlckVsZW1lbnQkLm5leHQoYm9yZGVyRWxlbWVudCk7XG5cbiAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbihib3JkZXJFbGVtZW50LCAnbW91c2VlbnRlcicsICgpID0+IHtcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoYm9yZGVyRWxlbWVudCwgJ3Jlc2l6ZS1ob3ZlcicpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oYm9yZGVyRWxlbWVudCwgJ21vdXNlbGVhdmUnLCAoKSA9PiB7XG4gICAgICB0aGlzLl9pc1Jlc2l6aW5nJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShpc1Jlc2l6aW5nID0+IHtcbiAgICAgICAgaWYgKCFpc1Jlc2l6aW5nKSB7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhib3JkZXJFbGVtZW50LCAncmVzaXplLWhvdmVyJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oYm9yZGVyRWxlbWVudCwgJ21vdXNlZG93bicsIChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgdGhpcy5fc2lkZW5hdldpZHRoJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShzaWRlbmF2V2lkdGggPT4ge1xuICAgICAgICB0aGlzLnNpZGVuYXZXaWR0aE9uQ2xpY2sgPSBzaWRlbmF2V2lkdGg7XG4gICAgICAgIHRoaXMueE9uQ2xpY2sgPSBldmVudC5wYWdlWDtcbiAgICAgICAgdGhpcy5faXNSZXNpemluZyQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShkb2N1bWVudC5ib2R5LCAndXNlci1zZWxlY3QnLCAnbm9uZScpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGRvY3VtZW50LmJvZHksICdjdXJzb3InLCAnY29sLXJlc2l6ZScpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jZHMtLXNpZGUtbmF2X19uYXZpZ2F0aW9uJyksXG4gICAgICAgICAgJ3BvaW50ZXItZXZlbnRzJyxcbiAgICAgICAgICAnbm9uZSdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubWFpbi1jb250ZW50JyksICdwb2ludGVyLWV2ZW50cycsICdub25lJyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlblNpZGVuYXZTaXplU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuc2lkZW5hdlNpemVTdWJzY3JpcHRpb24gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuX2xhcmdlU2NyZWVuJCxcbiAgICAgIHRoaXMuX3NpZGVuYXZXaWR0aCQsXG4gICAgICB0aGlzLl9zaWRlbmF2RWxlbWVudCQsXG4gICAgICB0aGlzLl9jb250ZW50RWxlbWVudCQsXG4gICAgICB0aGlzLl9yZXNpemVCb3JkZXJFbGVtZW50JCxcbiAgICBdKS5zdWJzY3JpYmUoXG4gICAgICAoW2xhcmdlU2NyZWVuLCBzaWRlbmF2V2lkdGgsIHNpZGVuYXZFbGVtZW50LCBjb250ZW50RWxlbWVudCwgcmVzaXplQm9yZGVyRWxlbWVudF0pID0+IHtcbiAgICAgICAgaWYgKCFsYXJnZVNjcmVlbiAmJiBzaWRlbmF2RWxlbWVudCAmJiBjb250ZW50RWxlbWVudCAmJiByZXNpemVCb3JkZXJFbGVtZW50KSB7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZShzaWRlbmF2RWxlbWVudCwgJ21pbi13aWR0aCcpO1xuICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUoc2lkZW5hdkVsZW1lbnQsICd3aWR0aCcpO1xuICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUoc2lkZW5hdkVsZW1lbnQsICd0cmFuc2l0aW9uJyk7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZShjb250ZW50RWxlbWVudCwgJ3BhZGRpbmctbGVmdCcpO1xuICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MocmVzaXplQm9yZGVyRWxlbWVudCwgJ3Jlc2l6ZS1ib3JkZXItLWludmlzaWJsZScpO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIGxhcmdlU2NyZWVuICYmXG4gICAgICAgICAgc2lkZW5hdkVsZW1lbnQgJiZcbiAgICAgICAgICBjb250ZW50RWxlbWVudCAmJlxuICAgICAgICAgIHR5cGVvZiBzaWRlbmF2V2lkdGggPT09ICdudW1iZXInXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IHBpeGVsV2lkdGggPSBgJHtzaWRlbmF2V2lkdGh9cHhgO1xuICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoc2lkZW5hdkVsZW1lbnQsICdtaW4td2lkdGgnLCBgJHtwaXhlbFdpZHRofWApO1xuICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoc2lkZW5hdkVsZW1lbnQsICd3aWR0aCcsIGAke3BpeGVsV2lkdGh9YCk7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShzaWRlbmF2RWxlbWVudCwgJ3RyYW5zaXRpb24nLCAnbm9uZScpO1xuICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoY29udGVudEVsZW1lbnQsICdwYWRkaW5nLWxlZnQnLCBgY2FsYygycmVtICsgJHtwaXhlbFdpZHRofSlgKTtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHJlc2l6ZUJvcmRlckVsZW1lbnQsICdyZXNpemUtYm9yZGVyLS1pbnZpc2libGUnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5Nb3VzZVN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5tb3VzZVhTdWJzY3JpcHRpb24gPSBjb21iaW5lTGF0ZXN0KFt0aGlzLl9tb3VzZVgkLCB0aGlzLl9pc1Jlc2l6aW5nJF0pXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoMykpXG4gICAgICAuc3Vic2NyaWJlKChbeCwgaXNSZXNpemluZ10pID0+IHtcbiAgICAgICAgaWYgKGlzUmVzaXppbmcpIHtcbiAgICAgICAgICBjb25zdCBvZmZTZXRXaWR0aCA9IHRoaXMueE9uQ2xpY2sgLSB4O1xuICAgICAgICAgIGNvbnN0IG5ld1NpZGVuYXZXaWR0aCA9IHRoaXMuc2lkZW5hdldpZHRoT25DbGljayAtIG9mZlNldFdpZHRoO1xuXG4gICAgICAgICAgaWYgKG5ld1NpZGVuYXZXaWR0aCA8PSB0aGlzLm1heE1lbnVXaWR0aCAmJiBuZXdTaWRlbmF2V2lkdGggPj0gdGhpcy5taW5NZW51V2lkdGgpIHtcbiAgICAgICAgICAgIHRoaXMuX3NpZGVuYXZXaWR0aCQubmV4dChuZXdTaWRlbmF2V2lkdGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLm1vdXNlVXBTdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdtb3VzZXVwJykuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuc3RvcFJlc2l6aW5nKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHN0b3BSZXNpemluZygpOiB2b2lkIHtcbiAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKGRvY3VtZW50LmJvZHksICd1c2VyLXNlbGVjdCcpO1xuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUoZG9jdW1lbnQuYm9keSwgJ2N1cnNvcicpO1xuICAgIHRoaXMuX2lzUmVzaXppbmckLm5leHQoZmFsc2UpO1xuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5fcmVzaXplQm9yZGVyRWxlbWVudCQuZ2V0VmFsdWUoKSwgJ3Jlc2l6ZS1ob3ZlcicpO1xuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUoXG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY2RzLS1zaWRlLW5hdl9fbmF2aWdhdGlvbicpLFxuICAgICAgJ3BvaW50ZXItZXZlbnRzJ1xuICAgICk7XG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubWFpbi1jb250ZW50JyksICdwb2ludGVyLWV2ZW50cycpO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdzaWRlbmF2V2lkdGgnLCB0aGlzLl9zaWRlbmF2V2lkdGgkLmdldFZhbHVlKCkudG9TdHJpbmcoKSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRNZW51V2lkdGgoY29uZmlnOiBWYWx0aW1vQ29uZmlnKTogdm9pZCB7XG4gICAgY29uc3QgY3VzdG9tTGVmdFNpZGViYXIgPSBjb25maWc/LmN1c3RvbUxlZnRTaWRlYmFyO1xuICAgIGNvbnN0IGxvY2FsU3RvcmFnZVdpZHRoID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3NpZGVuYXZXaWR0aCcpO1xuICAgIGNvbnN0IGxvY2FsU3RvcmFnZVdpZHRoTnVtYmVyID0gbG9jYWxTdG9yYWdlV2lkdGggJiYgK2xvY2FsU3RvcmFnZVdpZHRoO1xuICAgIGNvbnN0IGNvbmZpZ1dpZHRoID0gY3VzdG9tTGVmdFNpZGViYXI/LmRlZmF1bHRNZW51V2lkdGg7XG5cbiAgICB0aGlzLl9zaWRlbmF2V2lkdGgkLm5leHQobG9jYWxTdG9yYWdlV2lkdGhOdW1iZXIgfHwgY29uZmlnV2lkdGggfHwgMjU2KTtcbiAgICB0aGlzLm1pbk1lbnVXaWR0aCA9IGN1c3RvbUxlZnRTaWRlYmFyPy5taW5NZW51V2lkdGggfHwgMTUwO1xuICAgIHRoaXMubWF4TWVudVdpZHRoID0gY3VzdG9tTGVmdFNpZGViYXI/Lm1heE1lbnVXaWR0aCB8fCA1MDA7XG4gIH1cbn1cbiJdfQ==
|