@valtimo/components 10.8.0 → 11.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/css/carbon-beagle-compatibility.scss +1 -1
- package/assets/css/carbon.scss +42 -6
- package/assets/css/design-tokens.css +408 -0
- package/{esm2020 → esm2022}/lib/components/alert/alert.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/alert/alert.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/components/alert/alert.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/bpmn-js-diagram/bpmn-js-diagram.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/bpmn-js-diagram/bpmn-js-diagram.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/components/breadcrumb-navigation/breadcrumb-navigation.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/breadcrumb-navigation/breadcrumb-navigation.module.mjs +5 -5
- package/esm2022/lib/components/breadcrumb-navigation/breadcrumb.service.mjs +118 -0
- package/esm2022/lib/components/button/button.component.mjs +99 -0
- package/esm2022/lib/components/button/button.module.mjs +37 -0
- package/{esm2020 → esm2022}/lib/components/camunda/form/camunda-form.components.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/camunda/form/camunda-form.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/components/camunda/form/custom/camunda-custom-form.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/camunda/form/custom/camunda-custom-form.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/components/camunda/form/generated/camunda-generated-form.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/camunda/form/generated/camunda-generated-form.module.mjs +14 -14
- package/{esm2020 → esm2022}/lib/components/camunda/form/generated/formfield/boolean/camunda-boolean-formfield.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/camunda/form/generated/formfield/camunda-formfield-generator.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/camunda/form/generated/formfield/camunda-formfield.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/camunda/form/generated/formfield/choicefield/camunda-choicefield-formfield.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/camunda/form/generated/formfield/date/camunda-date-formfield.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/camunda/form/generated/formfield/enum/camunda-enum-formfield.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/camunda/form/generated/formfield/long/camunda-long-formfield.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/camunda/form/generated/formfield/string/camunda-string-formfield.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/camunda/form/generated/formfield/textarea/camunda-textarea-formfield.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/camunda/form/generated/formfield/validation/camunda-formfield-validation.component.mjs +4 -4
- package/esm2022/lib/components/carbon-list/CarbonListFilterPipe.directive.mjs +34 -0
- package/esm2022/lib/components/carbon-list/carbon-list.component.mjs +360 -0
- package/esm2022/lib/components/carbon-list/carbon-list.module.mjs +75 -0
- package/esm2022/lib/components/carbon-list/no-results/carbon-no-results.component.mjs +39 -0
- package/{esm2020 → esm2022}/lib/components/card/card.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/card/card.module.mjs +5 -5
- package/esm2022/lib/components/confirmation-modal/confirmation-modal.component.mjs +94 -0
- package/{esm2020 → esm2022}/lib/components/confirmation-modal/confirmation-modal.module.mjs +14 -14
- package/{esm2020 → esm2022}/lib/components/data-list/data-list.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/data-list/data-list.module.mjs +5 -5
- package/esm2022/lib/components/date-picker/date-picker.component.mjs +160 -0
- package/esm2022/lib/components/date-picker/date-picker.module.mjs +40 -0
- package/esm2022/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.component.mjs +223 -0
- package/esm2022/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.module.mjs +74 -0
- package/esm2022/lib/components/dropzone/dropzone.component.mjs +168 -0
- package/{esm2020 → esm2022}/lib/components/dropzone/dropzone.module.mjs +5 -5
- package/esm2022/lib/components/editor/editor.component.mjs +141 -0
- package/esm2022/lib/components/editor/editor.module.mjs +33 -0
- package/esm2022/lib/components/editor/editor.service.mjs +63 -0
- package/esm2022/lib/components/expansion-panel/expansion-panel.component.mjs +41 -0
- package/{esm2020 → esm2022}/lib/components/expansion-panel/expansion-panel.module.mjs +6 -6
- package/{esm2020 → esm2022}/lib/components/field-auto-focus/field-auto-focus.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/field-auto-focus/field-auto-focus.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/components/file-size/file-size.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/components/file-size/file-size.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/filter-sidebar/filter-sidebar.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/filter-sidebar/filter-sidebar.module.mjs +5 -5
- package/esm2022/lib/components/form/form.component.mjs +136 -0
- package/esm2022/lib/components/form/form.module.mjs +33 -0
- package/{esm2020 → esm2022}/lib/components/form-io/documenten-api-uploader/documenten-api-uploader.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/form-io/form-io-builder.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/form-io/form-io-current-user/form-io-current-user.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/form-io/form-io-uploader/form-io-uploader.component.mjs +4 -4
- package/esm2022/lib/components/form-io/form-io.component.mjs +169 -0
- package/esm2022/lib/components/form-io/form-io.module.mjs +109 -0
- package/esm2022/lib/components/form-io/formio-config.mjs +27 -0
- package/{esm2020 → esm2022}/lib/components/form-io/services/form-io-dom.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/form-io/services/form-io-state.service.mjs +4 -4
- package/esm2022/lib/components/input/input.component.mjs +168 -0
- package/esm2022/lib/components/input/input.module.mjs +59 -0
- package/esm2022/lib/components/input-label/input-label.component.mjs +81 -0
- package/esm2022/lib/components/input-label/input-label.module.mjs +55 -0
- package/esm2022/lib/components/left-sidebar/left-sidebar.component.mjs +148 -0
- package/{esm2020 → esm2022}/lib/components/left-sidebar/left-sidebar.module.mjs +18 -18
- package/{esm2020 → esm2022}/lib/components/list/ListFilterPipe.directive.mjs +4 -4
- package/esm2022/lib/components/list/list.component.mjs +202 -0
- package/{esm2020 → esm2022}/lib/components/list/list.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/components/menu/menu-item-text.component.mjs +5 -5
- package/{esm2020 → esm2022}/lib/components/menu/menu-routing.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/components/menu/menu.module.mjs +17 -17
- package/esm2022/lib/components/menu/menu.service.mjs +258 -0
- package/{esm2020 → esm2022}/lib/components/modal/modal.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/modal/modal.module.mjs +5 -5
- package/esm2022/lib/components/multi-input/carbon-multi-input.component.mjs +217 -0
- package/esm2022/lib/components/multi-input/carbon-multi-input.module.mjs +64 -0
- package/esm2022/lib/components/multi-input-form/multi-input-form.component.mjs +190 -0
- package/esm2022/lib/components/multi-input-form/multi-input-form.module.mjs +55 -0
- package/{esm2020 → esm2022}/lib/components/multiselect-dropdown/multiselect-dropdown.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/multiselect-dropdown/multiselect-dropdown.module.mjs +5 -5
- package/esm2022/lib/components/page/page-container/page-container.component.mjs +29 -0
- package/esm2022/lib/components/page/page-content/page-content.component.mjs +29 -0
- package/esm2022/lib/components/page/page-header/page-header.component.mjs +29 -0
- package/esm2022/lib/components/page/page-header-actions/page-header-actions.component.mjs +29 -0
- package/esm2022/lib/components/page/page-header-introduction/page-header-introduction.component.mjs +29 -0
- package/esm2022/lib/components/page/page.module.mjs +60 -0
- package/{esm2020 → esm2022}/lib/components/page-header/page-header.component.mjs +5 -5
- package/{esm2020 → esm2022}/lib/components/page-header/page-header.module.mjs +5 -5
- package/esm2022/lib/components/page-title/page-title.component.mjs +105 -0
- package/{esm2020 → esm2022}/lib/components/page-title/page-title.module.mjs +5 -5
- package/esm2022/lib/components/page-title/page-title.service.mjs +107 -0
- package/esm2022/lib/components/paragraph/paragraph.component.mjs +48 -0
- package/esm2022/lib/components/paragraph/paragraph.module.mjs +37 -0
- package/esm2022/lib/components/pending-changes/pending-changes.component.mjs +49 -0
- package/{esm2020 → esm2022}/lib/components/progress-bar/progress-bar.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/progress-bar/progress-bar.module.mjs +5 -5
- package/esm2022/lib/components/prompt/prompt.component.mjs +74 -0
- package/esm2022/lib/components/prompt/prompt.module.mjs +39 -0
- package/esm2022/lib/components/radio/radio.component.mjs +116 -0
- package/esm2022/lib/components/radio/radio.module.mjs +55 -0
- package/esm2022/lib/components/right-sidebar/right-sidebar.component.mjs +203 -0
- package/esm2022/lib/components/right-sidebar/right-sidebar.module.mjs +95 -0
- package/esm2022/lib/components/search-fields/search-fields.component.mjs +221 -0
- package/esm2022/lib/components/search-fields/search-fields.module.mjs +75 -0
- package/{esm2020 → esm2022}/lib/components/searchable-dropdown/searchable-dropdown.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/searchable-dropdown/searchable-dropdown.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/components/searchable-dropdown-select/searchable-dropdown-select.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/searchable-dropdown-select/searchable-dropdown-select.module.mjs +5 -5
- package/esm2022/lib/components/select/select.component.mjs +194 -0
- package/esm2022/lib/components/select/select.module.mjs +37 -0
- package/{esm2020 → esm2022}/lib/components/spinner/spinner.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/spinner/spinner.module.mjs +5 -5
- package/esm2022/lib/components/stepper/stepper-container/stepper-container.component.mjs +91 -0
- package/esm2022/lib/components/stepper/stepper-content/stepper-content.component.mjs +52 -0
- package/esm2022/lib/components/stepper/stepper-footer/stepper-footer.component.mjs +43 -0
- package/esm2022/lib/components/stepper/stepper-footer-step/stepper-footer-step.component.mjs +71 -0
- package/esm2022/lib/components/stepper/stepper-header/stepper-header.component.mjs +37 -0
- package/esm2022/lib/components/stepper/stepper-step/stepper-step.component.mjs +39 -0
- package/esm2022/lib/components/stepper/stepper.module.mjs +67 -0
- package/esm2022/lib/components/table/table.component.mjs +172 -0
- package/esm2022/lib/components/table/table.module.mjs +58 -0
- package/esm2022/lib/components/timeline/timeline.component.mjs +42 -0
- package/{esm2020 → esm2022}/lib/components/timeline/timeline.module.mjs +5 -5
- package/esm2022/lib/components/title/title.component.mjs +57 -0
- package/esm2022/lib/components/title/title.module.mjs +36 -0
- package/esm2022/lib/components/tooltip-icon/tooltip-icon.component.mjs +39 -0
- package/esm2022/lib/components/tooltip-icon/tooltip-icon.module.mjs +39 -0
- package/{esm2020 → esm2022}/lib/components/topbar/topbar.component.mjs +5 -5
- package/{esm2020 → esm2022}/lib/components/topbar/topbar.module.mjs +6 -6
- package/{esm2020 → esm2022}/lib/components/uploader/uploader-drag-drop.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/uploader/uploader.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/uploader/uploader.module.mjs +5 -5
- package/esm2022/lib/components/v-card/card.component.mjs +80 -0
- package/esm2022/lib/components/v-card/card.module.mjs +38 -0
- package/esm2022/lib/components/v-modal/modal.component.mjs +71 -0
- package/esm2022/lib/components/v-modal/modal.module.mjs +37 -0
- package/{esm2020 → esm2022}/lib/components/version/version.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/view-content/view-content.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/webcam/webcam.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/webcam/webcam.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/components/widget/widget.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/widget/widget.module.mjs +5 -5
- package/esm2022/lib/directives/command-click/command-click-directive.module.mjs +33 -0
- package/esm2022/lib/directives/command-click/command-click.directive.mjs +52 -0
- package/esm2022/lib/directives/digit-only/digit-only.directive.mjs +283 -0
- package/esm2022/lib/directives/render-in-page-header/render-in-page-header-directive.module.mjs +33 -0
- package/esm2022/lib/directives/render-in-page-header/render-in-page-header.directive.mjs +43 -0
- package/esm2022/lib/directives/tooltip/tooltip.component.mjs +42 -0
- package/esm2022/lib/directives/tooltip/tooltip.directive.mjs +74 -0
- package/esm2022/lib/directives/tooltip/tooltip.module.mjs +35 -0
- package/esm2022/lib/directives/valtimo-cds-modal/valtimo-cds-modal-directive.module.mjs +33 -0
- package/esm2022/lib/directives/valtimo-cds-modal/valtimo-cds-modal.directive.mjs +68 -0
- package/{esm2020/lib/models/pagination.model.mjs → esm2022/lib/guards/index.mjs} +2 -2
- package/esm2022/lib/guards/pending-changes.guard.mjs +2 -0
- package/esm2022/lib/models/button.model.mjs +17 -0
- package/esm2022/lib/models/carbon-list.model.mjs +21 -0
- package/esm2022/lib/models/carbon-pagination.model.mjs +21 -0
- package/esm2022/lib/models/editor.model.mjs +17 -0
- package/{esm2020/lib/models/list.model.mjs → esm2022/lib/models/form.model.mjs} +1 -1
- package/esm2022/lib/models/index.mjs +39 -0
- package/esm2022/lib/models/input.model.mjs +17 -0
- package/esm2022/lib/models/modal.model.mjs +17 -0
- package/{esm2020 → esm2022}/lib/models/multi-input.model.mjs +1 -1
- package/esm2022/lib/models/pagination.model.mjs +24 -0
- package/esm2022/lib/models/radio.model.mjs +17 -0
- package/esm2022/lib/models/select.model.mjs +17 -0
- package/esm2022/lib/models/sort.model.mjs +17 -0
- package/{esm2020/lib/components/form-io/formio-config.mjs → esm2022/lib/models/stepper.model.mjs} +2 -7
- package/esm2022/lib/models/table.model.mjs +17 -0
- package/esm2022/lib/models/timeline.model.mjs +52 -0
- package/esm2022/lib/models/title.model.mjs +17 -0
- package/{esm2020 → esm2022}/lib/pipes/case-count.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/pipes/components-pipes.module.mjs +5 -5
- package/esm2022/lib/pipes/index.mjs +20 -0
- package/esm2022/lib/pipes/is-array.pipe.mjs +29 -0
- package/{esm2020 → esm2022}/lib/pipes/menu-item-translation.pipe.mjs +4 -4
- package/esm2022/lib/services/index.mjs +7 -0
- package/esm2022/lib/services/modal.service.mjs +128 -0
- package/esm2022/lib/services/prompt.service.mjs +205 -0
- package/esm2022/lib/services/shell.service.mjs +213 -0
- package/esm2022/lib/services/stepper.service.mjs +108 -0
- package/esm2022/lib/services/user-interface.service.mjs +47 -0
- package/{esm2020 → esm2022}/lib/services/valtimo-modal.service.mjs +4 -4
- package/esm2022/public_api.mjs +197 -0
- package/fesm2022/valtimo-components.mjs +12473 -0
- package/fesm2022/valtimo-components.mjs.map +1 -0
- package/lib/components/alert/alert.component.d.ts +1 -1
- package/lib/components/bpmn-js-diagram/bpmn-js-diagram.component.d.ts +1 -1
- package/lib/components/breadcrumb-navigation/breadcrumb-navigation.component.d.ts +1 -1
- package/lib/components/breadcrumb-navigation/breadcrumb.service.d.ts.map +1 -1
- package/lib/components/button/button.component.d.ts +30 -0
- package/lib/components/button/button.component.d.ts.map +1 -0
- package/lib/components/button/button.module.d.ts +13 -0
- package/lib/components/button/button.module.d.ts.map +1 -0
- package/lib/components/camunda/form/camunda-form.components.d.ts +1 -1
- package/lib/components/camunda/form/custom/camunda-custom-form.component.d.ts +1 -1
- package/lib/components/camunda/form/generated/camunda-generated-form.component.d.ts +1 -1
- package/lib/components/camunda/form/generated/formfield/boolean/camunda-boolean-formfield.component.d.ts +1 -1
- package/lib/components/camunda/form/generated/formfield/camunda-formfield-generator.directive.d.ts +1 -1
- package/lib/components/camunda/form/generated/formfield/choicefield/camunda-choicefield-formfield.component.d.ts +1 -1
- package/lib/components/camunda/form/generated/formfield/date/camunda-date-formfield.component.d.ts +1 -1
- package/lib/components/camunda/form/generated/formfield/enum/camunda-enum-formfield.component.d.ts +1 -1
- package/lib/components/camunda/form/generated/formfield/long/camunda-long-formfield.component.d.ts +1 -1
- package/lib/components/camunda/form/generated/formfield/string/camunda-string-formfield.component.d.ts +1 -1
- package/lib/components/camunda/form/generated/formfield/textarea/camunda-textarea-formfield.component.d.ts +1 -1
- package/lib/components/camunda/form/generated/formfield/validation/camunda-formfield-validation.component.d.ts +1 -1
- package/lib/components/carbon-list/CarbonListFilterPipe.directive.d.ts +9 -0
- package/lib/components/carbon-list/CarbonListFilterPipe.directive.d.ts.map +1 -0
- package/lib/components/carbon-list/carbon-list.component.d.ts +86 -0
- package/lib/components/carbon-list/carbon-list.component.d.ts.map +1 -0
- package/lib/components/carbon-list/carbon-list.module.d.ts +16 -0
- package/lib/components/carbon-list/carbon-list.module.d.ts.map +1 -0
- package/lib/components/{carbon-table → carbon-list}/no-results/carbon-no-results.component.d.ts +1 -1
- package/lib/components/{carbon-table → carbon-list}/no-results/carbon-no-results.component.d.ts.map +1 -1
- package/lib/components/card/card.component.d.ts +1 -1
- package/lib/components/confirmation-modal/confirmation-modal.component.d.ts +2 -1
- package/lib/components/confirmation-modal/confirmation-modal.component.d.ts.map +1 -1
- package/lib/components/confirmation-modal/confirmation-modal.module.d.ts +1 -1
- package/lib/components/data-list/data-list.component.d.ts +1 -1
- package/lib/components/date-picker/date-picker.component.d.ts +44 -0
- package/lib/components/date-picker/date-picker.component.d.ts.map +1 -0
- package/lib/components/date-picker/date-picker.module.d.ts +16 -0
- package/lib/components/date-picker/date-picker.module.d.ts.map +1 -0
- package/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.component.d.ts +5 -3
- package/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.component.d.ts.map +1 -1
- package/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.module.d.ts +9 -2
- package/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.module.d.ts.map +1 -1
- package/lib/components/dropzone/dropzone.component.d.ts +6 -3
- package/lib/components/dropzone/dropzone.component.d.ts.map +1 -1
- package/lib/components/editor/editor.component.d.ts +38 -0
- package/lib/components/editor/editor.component.d.ts.map +1 -0
- package/lib/components/editor/editor.module.d.ts +9 -0
- package/lib/components/editor/editor.module.d.ts.map +1 -0
- package/lib/components/editor/editor.service.d.ts +12 -0
- package/lib/components/editor/editor.service.d.ts.map +1 -0
- package/lib/components/expansion-panel/expansion-panel.component.d.ts +1 -1
- package/lib/components/field-auto-focus/field-auto-focus.directive.d.ts +1 -1
- package/lib/components/filter-sidebar/filter-sidebar.component.d.ts +1 -1
- package/lib/components/form/form.component.d.ts +31 -0
- package/lib/components/form/form.component.d.ts.map +1 -0
- package/lib/components/form/form.module.d.ts +9 -0
- package/lib/components/form/form.module.d.ts.map +1 -0
- package/lib/components/form-io/documenten-api-uploader/documenten-api-uploader.component.d.ts +1 -1
- package/lib/components/form-io/form-io-builder.component.d.ts +1 -1
- package/lib/components/form-io/form-io-current-user/form-io-current-user.component.d.ts +1 -1
- package/lib/components/form-io/form-io-uploader/form-io-uploader.component.d.ts +1 -1
- package/lib/components/form-io/form-io.component.d.ts +13 -15
- package/lib/components/form-io/form-io.component.d.ts.map +1 -1
- package/lib/components/form-io/form-io.module.d.ts.map +1 -1
- package/lib/components/form-io/formio-config.d.ts +3 -1
- package/lib/components/form-io/formio-config.d.ts.map +1 -1
- package/lib/components/input/input.component.d.ts +52 -0
- package/lib/components/input/input.component.d.ts.map +1 -0
- package/lib/components/input/input.module.d.ts +15 -0
- package/lib/components/input/input.module.d.ts.map +1 -0
- package/lib/components/input-label/input-label.component.d.ts +23 -0
- package/lib/components/input-label/input-label.component.d.ts.map +1 -0
- package/lib/components/input-label/input-label.module.d.ts +14 -0
- package/lib/components/input-label/input-label.module.d.ts.map +1 -0
- package/lib/components/left-sidebar/left-sidebar.component.d.ts +1 -1
- package/lib/components/left-sidebar/left-sidebar.module.d.ts +1 -1
- package/lib/components/list/list.component.d.ts +4 -1
- package/lib/components/list/list.component.d.ts.map +1 -1
- package/lib/components/menu/menu-item-text.component.d.ts +1 -1
- package/lib/components/menu/menu.service.d.ts.map +1 -1
- package/lib/components/modal/modal.component.d.ts +1 -1
- package/lib/components/multi-input/carbon-multi-input.component.d.ts +1 -1
- package/lib/components/multi-input/carbon-multi-input.module.d.ts +6 -4
- package/lib/components/multi-input/carbon-multi-input.module.d.ts.map +1 -1
- package/lib/components/multi-input-form/multi-input-form.component.d.ts +45 -0
- package/lib/components/multi-input-form/multi-input-form.component.d.ts.map +1 -0
- package/lib/components/multi-input-form/multi-input-form.module.d.ts +14 -0
- package/lib/components/multi-input-form/multi-input-form.module.d.ts.map +1 -0
- package/lib/components/multiselect-dropdown/multiselect-dropdown.component.d.ts +1 -1
- package/lib/components/page/page-container/page-container.component.d.ts +9 -0
- package/lib/components/page/page-container/page-container.component.d.ts.map +1 -0
- package/lib/components/page/page-content/page-content.component.d.ts +9 -0
- package/lib/components/page/page-content/page-content.component.d.ts.map +1 -0
- package/lib/components/page/page-header/page-header.component.d.ts +9 -0
- package/lib/components/page/page-header/page-header.component.d.ts.map +1 -0
- package/lib/components/page/page-header-actions/page-header-actions.component.d.ts +9 -0
- package/lib/components/page/page-header-actions/page-header-actions.component.d.ts.map +1 -0
- package/lib/components/page/page-header-introduction/page-header-introduction.component.d.ts +9 -0
- package/lib/components/page/page-header-introduction/page-header-introduction.component.d.ts.map +1 -0
- package/lib/components/page/page.module.d.ts +16 -0
- package/lib/components/page/page.module.d.ts.map +1 -0
- package/lib/components/page-header/page-header.component.d.ts +2 -2
- package/lib/components/page-header/page-header.component.d.ts.map +1 -1
- package/lib/components/page-title/page-title.component.d.ts +4 -4
- package/lib/components/page-title/page-title.component.d.ts.map +1 -1
- package/lib/components/page-title/page-title.service.d.ts.map +1 -1
- package/lib/components/paragraph/paragraph.component.d.ts +14 -0
- package/lib/components/paragraph/paragraph.component.d.ts.map +1 -0
- package/lib/components/paragraph/paragraph.module.d.ts +13 -0
- package/lib/components/paragraph/paragraph.module.d.ts.map +1 -0
- package/lib/components/pending-changes/pending-changes.component.d.ts +15 -0
- package/lib/components/pending-changes/pending-changes.component.d.ts.map +1 -0
- package/lib/components/progress-bar/progress-bar.component.d.ts +1 -1
- package/lib/components/prompt/prompt.component.d.ts +35 -0
- package/lib/components/prompt/prompt.component.d.ts.map +1 -0
- package/lib/components/prompt/prompt.module.d.ts +15 -0
- package/lib/components/prompt/prompt.module.d.ts.map +1 -0
- package/lib/components/radio/radio.component.d.ts +36 -0
- package/lib/components/radio/radio.component.d.ts.map +1 -0
- package/lib/components/radio/radio.module.d.ts +14 -0
- package/lib/components/radio/radio.module.d.ts.map +1 -0
- package/lib/components/right-sidebar/right-sidebar.component.d.ts +2 -7
- package/lib/components/right-sidebar/right-sidebar.component.d.ts.map +1 -1
- package/lib/components/search-fields/search-fields.component.d.ts +3 -2
- package/lib/components/search-fields/search-fields.component.d.ts.map +1 -1
- package/lib/components/search-fields/search-fields.module.d.ts +8 -2
- package/lib/components/search-fields/search-fields.module.d.ts.map +1 -1
- package/lib/components/searchable-dropdown/searchable-dropdown.component.d.ts +1 -1
- package/lib/components/searchable-dropdown-select/searchable-dropdown-select.component.d.ts +1 -1
- package/lib/components/select/select.component.d.ts +50 -0
- package/lib/components/select/select.component.d.ts.map +1 -0
- package/lib/components/select/select.module.d.ts +13 -0
- package/lib/components/select/select.module.d.ts.map +1 -0
- package/lib/components/spinner/spinner.component.d.ts +1 -1
- package/lib/components/stepper/stepper-container/stepper-container.component.d.ts +29 -0
- package/lib/components/stepper/stepper-container/stepper-container.component.d.ts.map +1 -0
- package/lib/components/stepper/stepper-content/stepper-content.component.d.ts +18 -0
- package/lib/components/stepper/stepper-content/stepper-content.component.d.ts.map +1 -0
- package/lib/components/stepper/stepper-footer/stepper-footer.component.d.ts +14 -0
- package/lib/components/stepper/stepper-footer/stepper-footer.component.d.ts.map +1 -0
- package/lib/components/stepper/stepper-footer-step/stepper-footer-step.component.d.ts +27 -0
- package/lib/components/stepper/stepper-footer-step/stepper-footer-step.component.d.ts.map +1 -0
- package/lib/components/stepper/stepper-header/stepper-header.component.d.ts +16 -0
- package/lib/components/stepper/stepper-header/stepper-header.component.d.ts.map +1 -0
- package/lib/components/stepper/stepper-step/stepper-step.component.d.ts +16 -0
- package/lib/components/stepper/stepper-step/stepper-step.component.d.ts.map +1 -0
- package/lib/components/stepper/stepper.module.d.ts +19 -0
- package/lib/components/stepper/stepper.module.d.ts.map +1 -0
- package/lib/components/table/table.component.d.ts +52 -0
- package/lib/components/table/table.component.d.ts.map +1 -0
- package/lib/components/table/table.module.d.ts +17 -0
- package/lib/components/table/table.module.d.ts.map +1 -0
- package/lib/components/timeline/timeline.component.d.ts +2 -1
- package/lib/components/timeline/timeline.component.d.ts.map +1 -1
- package/lib/components/title/title.component.d.ts +19 -0
- package/lib/components/title/title.component.d.ts.map +1 -0
- package/lib/components/title/title.module.d.ts +12 -0
- package/lib/components/title/title.module.d.ts.map +1 -0
- package/lib/components/tooltip-icon/tooltip-icon.component.d.ts +11 -0
- package/lib/components/tooltip-icon/tooltip-icon.component.d.ts.map +1 -0
- package/lib/components/tooltip-icon/tooltip-icon.module.d.ts +15 -0
- package/lib/components/tooltip-icon/tooltip-icon.module.d.ts.map +1 -0
- package/lib/components/topbar/topbar.component.d.ts +1 -1
- package/lib/components/topbar/topbar.module.d.ts +1 -1
- package/lib/components/uploader/uploader-drag-drop.directive.d.ts +1 -1
- package/lib/components/uploader/uploader.component.d.ts +1 -1
- package/lib/components/v-card/card.component.d.ts +23 -0
- package/lib/components/v-card/card.component.d.ts.map +1 -0
- package/lib/components/v-card/card.module.d.ts +14 -0
- package/lib/components/v-card/card.module.d.ts.map +1 -0
- package/lib/components/v-modal/modal.component.d.ts +29 -0
- package/lib/components/v-modal/modal.component.d.ts.map +1 -0
- package/lib/components/v-modal/modal.module.d.ts +13 -0
- package/lib/components/v-modal/modal.module.d.ts.map +1 -0
- package/lib/components/version/version.service.d.ts.map +1 -1
- package/lib/components/webcam/webcam.component.d.ts +1 -1
- package/lib/components/widget/widget.component.d.ts +1 -1
- package/lib/directives/command-click/command-click-directive.module.d.ts.map +1 -0
- package/lib/directives/{command-click.directive.d.ts → command-click/command-click.directive.d.ts} +1 -1
- package/lib/directives/command-click/command-click.directive.d.ts.map +1 -0
- package/lib/directives/digit-only/digit-only.directive.d.ts +35 -0
- package/lib/directives/digit-only/digit-only.directive.d.ts.map +1 -0
- package/lib/directives/render-in-page-header/render-in-page-header-directive.module.d.ts.map +1 -0
- package/lib/directives/{render-in-page-header.directive.d.ts → render-in-page-header/render-in-page-header.directive.d.ts} +2 -2
- package/lib/directives/render-in-page-header/render-in-page-header.directive.d.ts.map +1 -0
- package/lib/directives/tooltip/tooltip.component.d.ts +7 -0
- package/lib/directives/tooltip/tooltip.component.d.ts.map +1 -0
- package/lib/directives/tooltip/tooltip.directive.d.ts +19 -0
- package/lib/directives/tooltip/tooltip.directive.d.ts.map +1 -0
- package/lib/directives/tooltip/tooltip.module.d.ts +11 -0
- package/lib/directives/tooltip/tooltip.module.d.ts.map +1 -0
- package/lib/directives/valtimo-cds-modal/valtimo-cds-modal-directive.module.d.ts.map +1 -0
- package/lib/directives/{valtimo-cds-modal.directive.d.ts → valtimo-cds-modal/valtimo-cds-modal.directive.d.ts} +1 -1
- package/lib/directives/valtimo-cds-modal/valtimo-cds-modal.directive.d.ts.map +1 -0
- package/lib/guards/index.d.ts +2 -0
- package/lib/guards/index.d.ts.map +1 -0
- package/lib/guards/pending-changes.guard.d.ts +4 -0
- package/lib/guards/pending-changes.guard.d.ts.map +1 -0
- package/lib/models/button.model.d.ts +3 -0
- package/lib/models/button.model.d.ts.map +1 -0
- package/lib/models/carbon-list.model.d.ts +54 -0
- package/lib/models/carbon-list.model.d.ts.map +1 -0
- package/lib/models/carbon-pagination.model.d.ts +6 -5
- package/lib/models/carbon-pagination.model.d.ts.map +1 -1
- package/lib/models/documenten-api-metadata.model.d.ts +4 -4
- package/lib/models/documenten-api-metadata.model.d.ts.map +1 -1
- package/lib/models/editor.model.d.ts +11 -0
- package/lib/models/editor.model.d.ts.map +1 -0
- package/lib/models/form.model.d.ts +5 -0
- package/lib/models/form.model.d.ts.map +1 -0
- package/lib/models/index.d.ts +14 -2
- package/lib/models/index.d.ts.map +1 -1
- package/lib/models/input.model.d.ts +3 -0
- package/lib/models/input.model.d.ts.map +1 -0
- package/lib/models/modal.model.d.ts +3 -0
- package/lib/models/modal.model.d.ts.map +1 -0
- package/lib/models/multi-input.model.d.ts +5 -5
- package/lib/models/multi-input.model.d.ts.map +1 -1
- package/lib/models/pagination.model.d.ts +5 -3
- package/lib/models/pagination.model.d.ts.map +1 -1
- package/lib/models/radio.model.d.ts +8 -0
- package/lib/models/radio.model.d.ts.map +1 -0
- package/lib/models/searchable-dropdown.model.d.ts +1 -1
- package/lib/models/searchable-dropdown.model.d.ts.map +1 -1
- package/lib/models/select.model.d.ts +9 -0
- package/lib/models/select.model.d.ts.map +1 -0
- package/lib/models/sort.model.d.ts +11 -0
- package/lib/models/sort.model.d.ts.map +1 -0
- package/lib/models/stepper.model.d.ts +8 -0
- package/lib/models/stepper.model.d.ts.map +1 -0
- package/lib/models/table.model.d.ts +14 -0
- package/lib/models/table.model.d.ts.map +1 -0
- package/lib/models/timeline.model.d.ts +4 -1
- package/lib/models/timeline.model.d.ts.map +1 -1
- package/lib/models/title.model.d.ts +3 -0
- package/lib/models/title.model.d.ts.map +1 -0
- package/lib/pipes/index.d.ts +1 -0
- package/lib/pipes/index.d.ts.map +1 -1
- package/lib/pipes/is-array.pipe.d.ts +8 -0
- package/lib/pipes/is-array.pipe.d.ts.map +1 -0
- package/lib/services/index.d.ts +7 -0
- package/lib/services/index.d.ts.map +1 -0
- package/lib/services/modal.service.d.ts +37 -0
- package/lib/services/modal.service.d.ts.map +1 -0
- package/lib/services/prompt.service.d.ts +68 -0
- package/lib/services/prompt.service.d.ts.map +1 -0
- package/lib/services/shell.service.d.ts +3 -0
- package/lib/services/shell.service.d.ts.map +1 -1
- package/lib/services/stepper.service.d.ts +32 -0
- package/lib/services/stepper.service.d.ts.map +1 -0
- package/lib/services/user-interface.service.d.ts +11 -0
- package/lib/services/user-interface.service.d.ts.map +1 -0
- package/package.json +30 -31
- package/public_api.d.ts +62 -7
- package/public_api.d.ts.map +1 -1
- package/esm2020/lib/components/breadcrumb-navigation/breadcrumb.service.mjs +0 -103
- package/esm2020/lib/components/carbon-table/carbon-table.component.mjs +0 -178
- package/esm2020/lib/components/carbon-table/carbon-table.module.mjs +0 -53
- package/esm2020/lib/components/carbon-table/no-results/carbon-no-results.component.mjs +0 -24
- package/esm2020/lib/components/components.module.mjs +0 -26
- package/esm2020/lib/components/confirmation-modal/confirmation-modal.component.mjs +0 -90
- package/esm2020/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.component.mjs +0 -215
- package/esm2020/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.module.mjs +0 -67
- package/esm2020/lib/components/dropzone/dropzone.component.mjs +0 -155
- package/esm2020/lib/components/expansion-panel/expansion-panel.component.mjs +0 -41
- package/esm2020/lib/components/form-io/form-io.component.mjs +0 -180
- package/esm2020/lib/components/form-io/form-io.module.mjs +0 -94
- package/esm2020/lib/components/left-sidebar/left-sidebar.component.mjs +0 -148
- package/esm2020/lib/components/list/list.component.mjs +0 -199
- package/esm2020/lib/components/menu/menu.service.mjs +0 -245
- package/esm2020/lib/components/multi-input/carbon-multi-input.component.mjs +0 -216
- package/esm2020/lib/components/multi-input/carbon-multi-input.module.mjs +0 -62
- package/esm2020/lib/components/page-title/page-title.component.mjs +0 -106
- package/esm2020/lib/components/page-title/page-title.service.mjs +0 -92
- package/esm2020/lib/components/right-sidebar/right-sidebar.component.mjs +0 -211
- package/esm2020/lib/components/right-sidebar/right-sidebar.module.mjs +0 -95
- package/esm2020/lib/components/search-fields/search-fields.component.mjs +0 -213
- package/esm2020/lib/components/search-fields/search-fields.module.mjs +0 -69
- package/esm2020/lib/components/timeline/timeline.component.mjs +0 -32
- package/esm2020/lib/directives/command-click-directive.module.mjs +0 -18
- package/esm2020/lib/directives/command-click.directive.mjs +0 -37
- package/esm2020/lib/directives/index.mjs +0 -22
- package/esm2020/lib/directives/render-in-page-header-directive.module.mjs +0 -18
- package/esm2020/lib/directives/render-in-page-header.directive.mjs +0 -27
- package/esm2020/lib/directives/valtimo-cds-modal-directive.module.mjs +0 -33
- package/esm2020/lib/directives/valtimo-cds-modal.directive.mjs +0 -68
- package/esm2020/lib/models/carbon-pagination.model.mjs +0 -9
- package/esm2020/lib/models/carbon-table.model.mjs +0 -21
- package/esm2020/lib/models/index.mjs +0 -27
- package/esm2020/lib/models/timeline.model.mjs +0 -48
- package/esm2020/lib/pipes/index.mjs +0 -19
- package/esm2020/lib/services/shell.service.mjs +0 -206
- package/esm2020/public_api.mjs +0 -113
- package/fesm2015/valtimo-components.mjs +0 -7945
- package/fesm2015/valtimo-components.mjs.map +0 -1
- package/fesm2020/valtimo-components.mjs +0 -8060
- package/fesm2020/valtimo-components.mjs.map +0 -1
- package/lib/components/carbon-table/carbon-table.component.d.ts +0 -49
- package/lib/components/carbon-table/carbon-table.component.d.ts.map +0 -1
- package/lib/components/carbon-table/carbon-table.module.d.ts +0 -12
- package/lib/components/carbon-table/carbon-table.module.d.ts.map +0 -1
- package/lib/components/components.module.d.ts +0 -7
- package/lib/components/components.module.d.ts.map +0 -1
- package/lib/directives/command-click-directive.module.d.ts.map +0 -1
- package/lib/directives/command-click.directive.d.ts.map +0 -1
- package/lib/directives/index.d.ts +0 -7
- package/lib/directives/index.d.ts.map +0 -1
- package/lib/directives/render-in-page-header-directive.module.d.ts.map +0 -1
- package/lib/directives/render-in-page-header.directive.d.ts.map +0 -1
- package/lib/directives/valtimo-cds-modal-directive.module.d.ts.map +0 -1
- package/lib/directives/valtimo-cds-modal.directive.d.ts.map +0 -1
- package/lib/models/carbon-table.model.d.ts +0 -33
- package/lib/models/carbon-table.model.d.ts.map +0 -1
- package/lib/models/list.model.d.ts +0 -9
- package/lib/models/list.model.d.ts.map +0 -1
- /package/{esm2020 → esm2022}/lib/components/camunda/form/generated/formfield/formfield.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/camunda/form/generated/formfield/validation/date.validators.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/form-io/documenten-api-uploader/documenten-api-uploader-edit-form.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/form-io/documenten-api-uploader/documenten-api-uploader.formio.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/form-io/form-io-current-user/form-io-current-user-edit-form.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/form-io/form-io-current-user/form-io-current-user.formio.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/form-io/form-io-resource-selector/form-io-resource-selector.formio.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/form-io/form-io-uploader/form-io-uploader-edit-form.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/form-io/form-io-uploader/form-io-uploader.formio.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/menu/menu.init.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/view-content/type-converters/booleanTypeConverter.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/view-content/type-converters/dateTypeConverter.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/view-content/type-converters/enumTypeConverter.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/view-content/type-converters/relatedFilesTypeConverter.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/view-content/type-converters/stringReplaceUnderscoreTypeConverter.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/view-content/type-converters/stringTypeConverter.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/view-content/type-converters/type-converters.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/constants/carbon.constants.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/constants/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/alert.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/documenten-api-metadata.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/form-io.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/searchable-dropdown.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/version.model.mjs +0 -0
- /package/{esm2020 → esm2022}/valtimo-components.mjs +0 -0
- /package/lib/directives/{command-click-directive.module.d.ts → command-click/command-click-directive.module.d.ts} +0 -0
- /package/lib/directives/{render-in-page-header-directive.module.d.ts → render-in-page-header/render-in-page-header-directive.module.d.ts} +0 -0
- /package/lib/directives/{valtimo-cds-modal-directive.module.d.ts → valtimo-cds-modal/valtimo-cds-modal-directive.module.d.ts} +0 -0
|
@@ -1,199 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2015-2023 Ritense BV, the Netherlands.
|
|
3
|
-
*
|
|
4
|
-
* Licensed under EUPL, Version 1.2 (the "License");
|
|
5
|
-
* you may not use this file except in compliance with the License.
|
|
6
|
-
* You may obtain a copy of the License at
|
|
7
|
-
*
|
|
8
|
-
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
9
|
-
*
|
|
10
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
* distributed under the License is distributed on an "AS IS" basis,
|
|
12
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
* See the License for the specific language governing permissions and
|
|
14
|
-
* limitations under the License.
|
|
15
|
-
*/
|
|
16
|
-
import { Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
|
|
17
|
-
import { BehaviorSubject, fromEvent } from 'rxjs';
|
|
18
|
-
import { debounceTime, take } from 'rxjs/operators';
|
|
19
|
-
import { get as _get } from 'lodash';
|
|
20
|
-
import * as i0 from "@angular/core";
|
|
21
|
-
import * as i1 from "../view-content/view-content.service";
|
|
22
|
-
import * as i2 from "ngx-logger";
|
|
23
|
-
import * as i3 from "@angular/common";
|
|
24
|
-
import * as i4 from "@ng-bootstrap/ng-bootstrap";
|
|
25
|
-
import * as i5 from "@angular/forms";
|
|
26
|
-
import * as i6 from "@ngx-translate/core";
|
|
27
|
-
import * as i7 from "./ListFilterPipe.directive";
|
|
28
|
-
export class ListComponent {
|
|
29
|
-
constructor(viewContentService, logger) {
|
|
30
|
-
this.viewContentService = viewContentService;
|
|
31
|
-
this.logger = logger;
|
|
32
|
-
this.actions = [];
|
|
33
|
-
this.rowClicked = new EventEmitter();
|
|
34
|
-
this.paginationClicked = new EventEmitter();
|
|
35
|
-
this.paginationSet = new EventEmitter();
|
|
36
|
-
this.search = new EventEmitter();
|
|
37
|
-
this.sortChanged = new EventEmitter();
|
|
38
|
-
this.headerProvided = false;
|
|
39
|
-
this.regExpStringRemoveUnderscore = /_/g;
|
|
40
|
-
this.sort$ = new BehaviorSubject({
|
|
41
|
-
state: { name: '', direction: 'DESC' },
|
|
42
|
-
isSorting: false,
|
|
43
|
-
});
|
|
44
|
-
this.viewListAs = localStorage.getItem('viewListAs') || 'table';
|
|
45
|
-
}
|
|
46
|
-
loadPaginationSize() {
|
|
47
|
-
const entries = localStorage.getItem(`${this.paginationIdentifier}${ListComponent.PAGINATION_SIZE}`);
|
|
48
|
-
if (entries !== null) {
|
|
49
|
-
this.pagination.size = +entries;
|
|
50
|
-
this.paginationSet.emit(+entries);
|
|
51
|
-
this.logger.debug('Pagination loaded from local storage for this list. Current: ', entries);
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
this.logger.debug('Pagination does NOT exist in local storage for this list. Will use default. Change it to create an entry.');
|
|
55
|
-
this.paginationSet.emit(10);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
setPaginationSize(numberOfEntries) {
|
|
59
|
-
localStorage.setItem(`${this.paginationIdentifier}${ListComponent.PAGINATION_SIZE}`, numberOfEntries);
|
|
60
|
-
this.pagination.size = numberOfEntries;
|
|
61
|
-
this.logger.debug('Pagination set in local storage for this list: ', numberOfEntries);
|
|
62
|
-
this.paginationSet.emit(numberOfEntries);
|
|
63
|
-
}
|
|
64
|
-
ngOnInit() {
|
|
65
|
-
if (this.pagination) {
|
|
66
|
-
this.loadPaginationSize();
|
|
67
|
-
}
|
|
68
|
-
if (this.initialSortState) {
|
|
69
|
-
this.sort$.next(this.initialSortState);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
ngOnChanges(changes) {
|
|
73
|
-
if (changes.items && changes.items.currentValue) {
|
|
74
|
-
this.transformListItemsMatchFields();
|
|
75
|
-
}
|
|
76
|
-
if (changes?.initialSortState?.currentValue) {
|
|
77
|
-
this.sort$.next(changes?.initialSortState?.currentValue);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
ngAfterViewInit() {
|
|
81
|
-
if (this.isSearchable) {
|
|
82
|
-
fromEvent(this.searchBox.nativeElement, 'keyup')
|
|
83
|
-
.pipe(debounceTime(500))
|
|
84
|
-
.subscribe(() => {
|
|
85
|
-
const value = this.searchBox.nativeElement.value;
|
|
86
|
-
if (this.search.observers.length > 0) {
|
|
87
|
-
// custom search callbak is specified, perhaps to query on the server side
|
|
88
|
-
this.search.emit(value);
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
91
|
-
this.searchModel = value;
|
|
92
|
-
}
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
transformListItemsMatchFields() {
|
|
97
|
-
if (this.items && this.fields) {
|
|
98
|
-
this.items.forEach(item => {
|
|
99
|
-
item.listItemFields = this.fields.map(field => ({
|
|
100
|
-
key: field.key,
|
|
101
|
-
label: field.label,
|
|
102
|
-
type: field.type || '',
|
|
103
|
-
value: this.resolveObject(field, item),
|
|
104
|
-
}));
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
onClickRow(item) {
|
|
109
|
-
this.rowClicked.emit(item);
|
|
110
|
-
}
|
|
111
|
-
resolveObject(definition, obj) {
|
|
112
|
-
const definitionKey = definition.key;
|
|
113
|
-
const customPropString = '$.';
|
|
114
|
-
const key = definitionKey.includes(customPropString)
|
|
115
|
-
? definitionKey.split(customPropString)[1]
|
|
116
|
-
: definitionKey;
|
|
117
|
-
const resolvedObjValue = _get(obj, key, null);
|
|
118
|
-
return this.viewContentService.get(resolvedObjValue, definition);
|
|
119
|
-
}
|
|
120
|
-
switchView(type) {
|
|
121
|
-
localStorage.setItem('viewListAs', type);
|
|
122
|
-
this.viewListAs = type;
|
|
123
|
-
}
|
|
124
|
-
getTotalPageCount() {
|
|
125
|
-
return Math.ceil(this.pagination.collectionSize / this.pagination.size);
|
|
126
|
-
}
|
|
127
|
-
onClickPagination(page) {
|
|
128
|
-
this.paginationClicked.emit(page);
|
|
129
|
-
}
|
|
130
|
-
handleFieldClick(key, sortable) {
|
|
131
|
-
const desc = 'DESC';
|
|
132
|
-
const asc = 'ASC';
|
|
133
|
-
if (!sortable) {
|
|
134
|
-
return;
|
|
135
|
-
}
|
|
136
|
-
this.sort$.pipe(take(1)).subscribe(sort => {
|
|
137
|
-
let newState;
|
|
138
|
-
if (sort.state.name === key) {
|
|
139
|
-
if (!sort.isSorting) {
|
|
140
|
-
newState = { state: { ...sort.state, direction: desc }, isSorting: true };
|
|
141
|
-
}
|
|
142
|
-
else {
|
|
143
|
-
if (sort.state.direction === desc) {
|
|
144
|
-
newState = { ...sort, state: { ...sort.state, direction: asc } };
|
|
145
|
-
}
|
|
146
|
-
else {
|
|
147
|
-
newState = { state: { ...sort.state, direction: desc }, isSorting: false };
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
else {
|
|
152
|
-
newState = { state: { name: key, direction: desc }, isSorting: true };
|
|
153
|
-
}
|
|
154
|
-
this.sort$.next(newState);
|
|
155
|
-
this.sortChanged.emit(newState);
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
ListComponent.PAGINATION_SIZE = 'PaginationSize';
|
|
160
|
-
ListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ListComponent, deps: [{ token: i1.ViewContentService }, { token: i2.NGXLogger }], target: i0.ɵɵFactoryTarget.Component });
|
|
161
|
-
ListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ListComponent, selector: "valtimo-list", inputs: { items: "items", fields: "fields", pagination: "pagination", viewMode: "viewMode", isSearchable: "isSearchable", header: "header", actions: "actions", paginationIdentifier: "paginationIdentifier", initialSortState: "initialSortState", lastColumnTemplate: "lastColumnTemplate" }, outputs: { rowClicked: "rowClicked", paginationClicked: "paginationClicked", paginationSet: "paginationSet", search: "search", sortChanged: "sortChanged" }, viewQueries: [{ propertyName: "searchBox", first: true, predicate: ["searchBox"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!--\n ~ Copyright 2015-2023 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 *ngIf=\"(items?.length > 0 && fields?.length > 0) || header\">\n <div\n class=\"d-flex align-items-center search-holder bg-light\"\n [ngClass]=\"{'pb-4 pt-4': !header}\"\n *ngIf=\"isSearchable || viewMode || header\"\n >\n <div class=\"align-self-start\">\n <ng-content select=\"[header]\"></ng-content>\n </div>\n\n <div class=\"ml-auto row\">\n <input\n *ngIf=\"isSearchable\"\n class=\"form-control col-sm-8\"\n type=\"text\"\n placeholder=\"{{ 'list.search' | translate }}\"\n #searchBox\n />\n\n <div\n class=\"switch-view-holder btn-group col-sm-4 mt-1 mt-sm-0\"\n role=\"group\"\n *ngIf=\"viewMode\"\n >\n <button\n class=\"btn\"\n [ngClass]=\"viewListAs === 'table' ? 'btn-primary' : 'btn-default'\"\n (click)=\"switchView('table')\"\n >\n <i class=\"icon mdi mdi-view-headline view-icon\"></i>\n </button>\n <button\n class=\"btn\"\n [ngClass]=\"viewListAs === 'tile' ? 'btn-primary' : 'btn-default'\"\n (click)=\"switchView('tile')\"\n >\n <i class=\"icon mdi mdi-view-module view-icon\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <ng-content select=\"[tabs]\"></ng-content>\n\n <div *ngIf=\"items?.length > 0 && fields?.length > 0\">\n <div class=\"table-responsive noSwipe\" *ngIf=\"!viewMode || viewListAs === 'table'\">\n <table class=\"table table-striped table-hover m-0\" *ngIf=\"sort$ | async as sort\">\n <thead>\n <tr>\n <th\n *ngFor=\"let field of fields\"\n (click)=\"handleFieldClick(field.key, field.sortable)\"\n [ngClass]=\"{\n sortable: field.sortable,\n 'is-being-sorted': field.key === sort.state.name && sort.isSorting,\n ascending: sort.state.direction === 'ASC'\n }\"\n >\n {{ field.label }}\n </th>\n <th *ngFor=\"let action of actions\">\n {{ action.columnName }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n [ngClass]=\"{'click-able': this.rowClicked.observers.length > 0}\"\n *ngFor=\"let item of items | listFilter : searchModel; let i = index\"\n (click)=\"onClickRow(item)\"\n >\n <td class=\"align-top\" *ngFor=\"let listItemField of item.listItemFields\">\n <ng-container\n *ngIf=\"\n listItemField.type === '' && {\n valueTranslationKey: 'viewTypeConverter.' + listItemField.value,\n valueTranslation: 'viewTypeConverter.' + listItemField.value | translate\n } as vars\n \"\n >\n {{\n listItemField.value\n ? vars.valueTranslation !== vars.valueTranslationKey\n ? vars.valueTranslation\n : listItemField.value\n : '-'\n }}\n </ng-container>\n\n <ng-container\n *ngIf=\"listItemField.type === 'dropdownActions'\"\n [ngTemplateOutlet]=\"dropdownActions\"\n [ngTemplateOutletContext]=\"{listItemField: listItemField, item: item}\"\n ></ng-container>\n </td>\n <td class=\"align-top\" *ngFor=\"let action of actions\">\n <i\n class=\"action-icon\"\n style=\"cursor: pointer\"\n [ngClass]=\"action.iconClass\"\n (click)=\"action.callback(item, $event)\"\n ></i>\n </td>\n <td *ngIf=\"lastColumnTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n lastColumnTemplate;\n context: {index: i, length: items.length, item: item}\n \"\n ></ng-container>\n </td>\n </tr>\n <tr>\n <td *ngIf=\"(items | listFilter : searchModel).length === 0\" [colSpan]=\"fields.length\">\n {{ 'list.noMatchingItems' | translate }}<i>\"{{ searchModel }}\"</i>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <div class=\"container-fluid\" *ngIf=\"viewMode && viewListAs === 'tile'\">\n <div class=\"row p-2\">\n <div\n class=\"col-12 col-sm-6 col-xl-4 p-2\"\n *ngFor=\"let item of items | listFilter : searchModel\"\n (click)=\"onClickRow(item)\"\n >\n <div class=\"click-able tile-holder p-4\">\n <dl class=\"row mb-0\" *ngFor=\"let listItemField of item.listItemFields\">\n <dt class=\"col-12 col-md-5 text-xl-right\">{{ listItemField.label }}</dt>\n <dd class=\"col-12 col-md-7\">{{ listItemField.value || '-' }}</dd>\n </dl>\n </div>\n </div>\n <div class=\"col-12\" *ngIf=\"(items | listFilter : searchModel).length === 0\">\n {{ 'list.noMatchingItems' | translate }}<i>\"{{ searchModel }}\"</i>\n </div>\n </div>\n </div>\n </div>\n\n <div\n class=\"pagination-holder bg-light px-4 pt-4 pb-2 overflow-auto row mr-0 ml-0\"\n *ngIf=\"pagination && items?.length > 0 && fields?.length > 0\"\n >\n <div class=\"float-left page-count col-4\">\n <strong>{{\n 'list.currentPage'\n | translate\n : {current: pagination.page > 0 ? pagination.page : 1, total: getTotalPageCount()}\n }}</strong>\n {{\n pagination.collectionSize === 1\n ? ('list.showingResult' | translate : {number: (items | listFilter : searchModel).length})\n : ('list.showingResults'\n | translate\n : {\n number: (items | listFilter : searchModel).length,\n total: pagination.collectionSize\n })\n }}\n </div>\n <div class=\"col-4 text-center\">\n {{ 'list.show' | translate }}\n <select [(ngModel)]=\"pagination.size\" (ngModelChange)=\"setPaginationSize($event)\">\n <option [ngValue]=\"10\">10</option>\n <option [ngValue]=\"25\">25</option>\n <option [ngValue]=\"50\">50</option>\n <option [ngValue]=\"100\">100</option>\n </select>\n {{ 'list.entries' | translate }}\n </div>\n <div class=\"col-4\">\n <ngb-pagination\n *ngIf=\"pagination.collectionSize > pagination.size\"\n class=\"float-right\"\n [collectionSize]=\"pagination.collectionSize\"\n [(page)]=\"pagination.page\"\n [pageSize]=\"pagination.size\"\n [maxSize]=\"pagination.maxPaginationItemSize\"\n [rotate]=\"true\"\n (pageChange)=\"onClickPagination(pagination.page)\"\n ></ngb-pagination>\n </div>\n </div>\n\n <div id=\"no-results\" class=\"p-5\" *ngIf=\"items?.length === 0\">\n {{ 'list.noResults' | translate }}\n </div>\n\n <div id=\"no-field-definitions\" class=\"p-5\" *ngIf=\"items?.length > 0 && fields?.length === 0\">\n {{ 'list.noFieldDefinitions' | translate }}\n </div>\n</div>\n\n<ng-template #dropdownActions let-listItemField=\"listItemField\" let-item=\"item\">\n <div class=\"dropdown\" *ngIf=\"listItemField?.value.length > 0\">\n <a\n style=\"cursor: pointer\"\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 <div class=\"dropdown-menu\" aria-labelledby=\"dropdownMenu\">\n <a\n (click)=\"action.callback(item, $event)\"\n class=\"dropdown-item p-2\"\n *ngFor=\"let action of listItemField.value\"\n >\n <ng-container *ngIf=\"action.iconClass !== null\">\n <i [ngClass]=\"action.iconClass\"></i>\n </ng-container>\n {{ action?.label || '-' }}\n </a>\n </div>\n </div>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2023 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 */.table{table-layout:fixed}.table-responsive{overflow-x:visible}.click-able{cursor:pointer}.pagination-holder{border-top:1px solid #dee2e6}.search-holder{border-bottom:1px solid #dee2e6;padding-left:18px;padding-right:18px;height:80px}.switch-view-holder i{font-size:1.8rem;line-height:1.2rem;margin-top:9px}.tile-holder{background-color:#f5f5f5;border:1px solid transparent}.tile-holder:hover{background-color:#eee;border:1px solid #dee2e6}.page-count{margin-bottom:1rem;display:flex;flex-direction:column}.page-count strong:first-child{margin-bottom:6px}th:first-child,td:first-child{padding-left:25px}th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}th.sortable:after{font-family:\"Font Awesome 5 Free\";content:\" \\f0dd\";position:absolute;margin:auto 0 auto 5px;opacity:0;transition:all .15s ease}th.sortable.is-being-sorted.ascending:after{transform:rotate(-180deg)}th.sortable:hover:after{opacity:.5}th.sortable.is-being-sorted:after{opacity:1}.action-icon,.view-icon{font-size:16px!important}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.NgbPagination, selector: "ngb-pagination", inputs: ["disabled", "boundaryLinks", "directionLinks", "ellipses", "rotate", "collectionSize", "maxSize", "page", "pageSize", "size"], outputs: ["pageChange"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }, { kind: "pipe", type: i7.ListFilterPipe, name: "listFilter" }] });
|
|
162
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ListComponent, decorators: [{
|
|
163
|
-
type: Component,
|
|
164
|
-
args: [{ selector: 'valtimo-list', template: "<!--\n ~ Copyright 2015-2023 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 *ngIf=\"(items?.length > 0 && fields?.length > 0) || header\">\n <div\n class=\"d-flex align-items-center search-holder bg-light\"\n [ngClass]=\"{'pb-4 pt-4': !header}\"\n *ngIf=\"isSearchable || viewMode || header\"\n >\n <div class=\"align-self-start\">\n <ng-content select=\"[header]\"></ng-content>\n </div>\n\n <div class=\"ml-auto row\">\n <input\n *ngIf=\"isSearchable\"\n class=\"form-control col-sm-8\"\n type=\"text\"\n placeholder=\"{{ 'list.search' | translate }}\"\n #searchBox\n />\n\n <div\n class=\"switch-view-holder btn-group col-sm-4 mt-1 mt-sm-0\"\n role=\"group\"\n *ngIf=\"viewMode\"\n >\n <button\n class=\"btn\"\n [ngClass]=\"viewListAs === 'table' ? 'btn-primary' : 'btn-default'\"\n (click)=\"switchView('table')\"\n >\n <i class=\"icon mdi mdi-view-headline view-icon\"></i>\n </button>\n <button\n class=\"btn\"\n [ngClass]=\"viewListAs === 'tile' ? 'btn-primary' : 'btn-default'\"\n (click)=\"switchView('tile')\"\n >\n <i class=\"icon mdi mdi-view-module view-icon\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <ng-content select=\"[tabs]\"></ng-content>\n\n <div *ngIf=\"items?.length > 0 && fields?.length > 0\">\n <div class=\"table-responsive noSwipe\" *ngIf=\"!viewMode || viewListAs === 'table'\">\n <table class=\"table table-striped table-hover m-0\" *ngIf=\"sort$ | async as sort\">\n <thead>\n <tr>\n <th\n *ngFor=\"let field of fields\"\n (click)=\"handleFieldClick(field.key, field.sortable)\"\n [ngClass]=\"{\n sortable: field.sortable,\n 'is-being-sorted': field.key === sort.state.name && sort.isSorting,\n ascending: sort.state.direction === 'ASC'\n }\"\n >\n {{ field.label }}\n </th>\n <th *ngFor=\"let action of actions\">\n {{ action.columnName }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n [ngClass]=\"{'click-able': this.rowClicked.observers.length > 0}\"\n *ngFor=\"let item of items | listFilter : searchModel; let i = index\"\n (click)=\"onClickRow(item)\"\n >\n <td class=\"align-top\" *ngFor=\"let listItemField of item.listItemFields\">\n <ng-container\n *ngIf=\"\n listItemField.type === '' && {\n valueTranslationKey: 'viewTypeConverter.' + listItemField.value,\n valueTranslation: 'viewTypeConverter.' + listItemField.value | translate\n } as vars\n \"\n >\n {{\n listItemField.value\n ? vars.valueTranslation !== vars.valueTranslationKey\n ? vars.valueTranslation\n : listItemField.value\n : '-'\n }}\n </ng-container>\n\n <ng-container\n *ngIf=\"listItemField.type === 'dropdownActions'\"\n [ngTemplateOutlet]=\"dropdownActions\"\n [ngTemplateOutletContext]=\"{listItemField: listItemField, item: item}\"\n ></ng-container>\n </td>\n <td class=\"align-top\" *ngFor=\"let action of actions\">\n <i\n class=\"action-icon\"\n style=\"cursor: pointer\"\n [ngClass]=\"action.iconClass\"\n (click)=\"action.callback(item, $event)\"\n ></i>\n </td>\n <td *ngIf=\"lastColumnTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n lastColumnTemplate;\n context: {index: i, length: items.length, item: item}\n \"\n ></ng-container>\n </td>\n </tr>\n <tr>\n <td *ngIf=\"(items | listFilter : searchModel).length === 0\" [colSpan]=\"fields.length\">\n {{ 'list.noMatchingItems' | translate }}<i>\"{{ searchModel }}\"</i>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <div class=\"container-fluid\" *ngIf=\"viewMode && viewListAs === 'tile'\">\n <div class=\"row p-2\">\n <div\n class=\"col-12 col-sm-6 col-xl-4 p-2\"\n *ngFor=\"let item of items | listFilter : searchModel\"\n (click)=\"onClickRow(item)\"\n >\n <div class=\"click-able tile-holder p-4\">\n <dl class=\"row mb-0\" *ngFor=\"let listItemField of item.listItemFields\">\n <dt class=\"col-12 col-md-5 text-xl-right\">{{ listItemField.label }}</dt>\n <dd class=\"col-12 col-md-7\">{{ listItemField.value || '-' }}</dd>\n </dl>\n </div>\n </div>\n <div class=\"col-12\" *ngIf=\"(items | listFilter : searchModel).length === 0\">\n {{ 'list.noMatchingItems' | translate }}<i>\"{{ searchModel }}\"</i>\n </div>\n </div>\n </div>\n </div>\n\n <div\n class=\"pagination-holder bg-light px-4 pt-4 pb-2 overflow-auto row mr-0 ml-0\"\n *ngIf=\"pagination && items?.length > 0 && fields?.length > 0\"\n >\n <div class=\"float-left page-count col-4\">\n <strong>{{\n 'list.currentPage'\n | translate\n : {current: pagination.page > 0 ? pagination.page : 1, total: getTotalPageCount()}\n }}</strong>\n {{\n pagination.collectionSize === 1\n ? ('list.showingResult' | translate : {number: (items | listFilter : searchModel).length})\n : ('list.showingResults'\n | translate\n : {\n number: (items | listFilter : searchModel).length,\n total: pagination.collectionSize\n })\n }}\n </div>\n <div class=\"col-4 text-center\">\n {{ 'list.show' | translate }}\n <select [(ngModel)]=\"pagination.size\" (ngModelChange)=\"setPaginationSize($event)\">\n <option [ngValue]=\"10\">10</option>\n <option [ngValue]=\"25\">25</option>\n <option [ngValue]=\"50\">50</option>\n <option [ngValue]=\"100\">100</option>\n </select>\n {{ 'list.entries' | translate }}\n </div>\n <div class=\"col-4\">\n <ngb-pagination\n *ngIf=\"pagination.collectionSize > pagination.size\"\n class=\"float-right\"\n [collectionSize]=\"pagination.collectionSize\"\n [(page)]=\"pagination.page\"\n [pageSize]=\"pagination.size\"\n [maxSize]=\"pagination.maxPaginationItemSize\"\n [rotate]=\"true\"\n (pageChange)=\"onClickPagination(pagination.page)\"\n ></ngb-pagination>\n </div>\n </div>\n\n <div id=\"no-results\" class=\"p-5\" *ngIf=\"items?.length === 0\">\n {{ 'list.noResults' | translate }}\n </div>\n\n <div id=\"no-field-definitions\" class=\"p-5\" *ngIf=\"items?.length > 0 && fields?.length === 0\">\n {{ 'list.noFieldDefinitions' | translate }}\n </div>\n</div>\n\n<ng-template #dropdownActions let-listItemField=\"listItemField\" let-item=\"item\">\n <div class=\"dropdown\" *ngIf=\"listItemField?.value.length > 0\">\n <a\n style=\"cursor: pointer\"\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 <div class=\"dropdown-menu\" aria-labelledby=\"dropdownMenu\">\n <a\n (click)=\"action.callback(item, $event)\"\n class=\"dropdown-item p-2\"\n *ngFor=\"let action of listItemField.value\"\n >\n <ng-container *ngIf=\"action.iconClass !== null\">\n <i [ngClass]=\"action.iconClass\"></i>\n </ng-container>\n {{ action?.label || '-' }}\n </a>\n </div>\n </div>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2023 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 */.table{table-layout:fixed}.table-responsive{overflow-x:visible}.click-able{cursor:pointer}.pagination-holder{border-top:1px solid #dee2e6}.search-holder{border-bottom:1px solid #dee2e6;padding-left:18px;padding-right:18px;height:80px}.switch-view-holder i{font-size:1.8rem;line-height:1.2rem;margin-top:9px}.tile-holder{background-color:#f5f5f5;border:1px solid transparent}.tile-holder:hover{background-color:#eee;border:1px solid #dee2e6}.page-count{margin-bottom:1rem;display:flex;flex-direction:column}.page-count strong:first-child{margin-bottom:6px}th:first-child,td:first-child{padding-left:25px}th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}th.sortable:after{font-family:\"Font Awesome 5 Free\";content:\" \\f0dd\";position:absolute;margin:auto 0 auto 5px;opacity:0;transition:all .15s ease}th.sortable.is-being-sorted.ascending:after{transform:rotate(-180deg)}th.sortable:hover:after{opacity:.5}th.sortable.is-being-sorted:after{opacity:1}.action-icon,.view-icon{font-size:16px!important}\n"] }]
|
|
165
|
-
}], ctorParameters: function () { return [{ type: i1.ViewContentService }, { type: i2.NGXLogger }]; }, propDecorators: { items: [{
|
|
166
|
-
type: Input
|
|
167
|
-
}], fields: [{
|
|
168
|
-
type: Input
|
|
169
|
-
}], pagination: [{
|
|
170
|
-
type: Input
|
|
171
|
-
}], viewMode: [{
|
|
172
|
-
type: Input
|
|
173
|
-
}], isSearchable: [{
|
|
174
|
-
type: Input
|
|
175
|
-
}], header: [{
|
|
176
|
-
type: Input
|
|
177
|
-
}], actions: [{
|
|
178
|
-
type: Input
|
|
179
|
-
}], paginationIdentifier: [{
|
|
180
|
-
type: Input
|
|
181
|
-
}], initialSortState: [{
|
|
182
|
-
type: Input
|
|
183
|
-
}], lastColumnTemplate: [{
|
|
184
|
-
type: Input
|
|
185
|
-
}], rowClicked: [{
|
|
186
|
-
type: Output
|
|
187
|
-
}], paginationClicked: [{
|
|
188
|
-
type: Output
|
|
189
|
-
}], paginationSet: [{
|
|
190
|
-
type: Output
|
|
191
|
-
}], search: [{
|
|
192
|
-
type: Output
|
|
193
|
-
}], sortChanged: [{
|
|
194
|
-
type: Output
|
|
195
|
-
}], searchBox: [{
|
|
196
|
-
type: ViewChild,
|
|
197
|
-
args: ['searchBox']
|
|
198
|
-
}] } });
|
|
199
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2xpc3QvbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2xpc3QvbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFFTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBR04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBQyxlQUFlLEVBQUUsU0FBUyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBQyxZQUFZLEVBQUUsSUFBSSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEQsT0FBTyxFQUFDLEdBQUcsSUFBSSxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7Ozs7Ozs7OztBQU9uQyxNQUFNLE9BQU8sYUFBYTtJQStCeEIsWUFBb0Isa0JBQXNDLEVBQVUsTUFBaUI7UUFBakUsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVc7UUF0QjVFLFlBQU8sR0FBVSxFQUFFLENBQUM7UUFLbkIsZUFBVSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ25ELHNCQUFpQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzFELGtCQUFhLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdEQsV0FBTSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQy9DLGdCQUFXLEdBQTRCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFN0QsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFH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QUFmLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFNaUIsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjMgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RGlyZWN0aW9uLCBTb3J0U3RhdGV9IGZyb20gJ0B2YWx0aW1vL2RvY3VtZW50JztcbmltcG9ydCB7TkdYTG9nZ2VyfSBmcm9tICduZ3gtbG9nZ2VyJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBmcm9tRXZlbnR9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIHRha2V9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7Vmlld0NvbnRlbnRTZXJ2aWNlfSBmcm9tICcuLi92aWV3LWNvbnRlbnQvdmlldy1jb250ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHtnZXQgYXMgX2dldH0gZnJvbSAnbG9kYXNoJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9saXN0LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIHByaXZhdGUgc3RhdGljIFBBR0lOQVRJT05fU0laRSA9ICdQYWdpbmF0aW9uU2l6ZSc7XG5cbiAgQElucHV0KCkgaXRlbXM6IEFycmF5PGFueT47XG4gIEBJbnB1dCgpIGZpZWxkczogQXJyYXk8YW55PjtcbiAgQElucHV0KCkgcGFnaW5hdGlvbj86IGFueTtcbiAgQElucHV0KCkgdmlld01vZGU/OiBib29sZWFuO1xuICBASW5wdXQoKSBpc1NlYXJjaGFibGU/OiBib29sZWFuO1xuICBASW5wdXQoKSBoZWFkZXI/OiBib29sZWFuO1xuICBASW5wdXQoKSBhY3Rpb25zOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKSBwYWdpbmF0aW9uSWRlbnRpZmllcj86IHN0cmluZztcbiAgQElucHV0KCkgaW5pdGlhbFNvcnRTdGF0ZTogU29ydFN0YXRlO1xuICBASW5wdXQoKSBsYXN0Q29sdW1uVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBPdXRwdXQoKSByb3dDbGlja2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHBhZ2luYXRpb25DbGlja2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHBhZ2luYXRpb25TZXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgc2VhcmNoOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHNvcnRDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8U29ydFN0YXRlPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwdWJsaWMgaGVhZGVyUHJvdmlkZWQgPSBmYWxzZTtcbiAgcHVibGljIHZpZXdMaXN0QXM6IHN0cmluZztcbiAgcHVibGljIHNlYXJjaE1vZGVsOiBzdHJpbmc7XG4gIHB1YmxpYyByZWdFeHBTdHJpbmdSZW1vdmVVbmRlcnNjb3JlID0gL18vZztcbiAgQFZpZXdDaGlsZCgnc2VhcmNoQm94Jykgc2VhcmNoQm94OiBFbGVtZW50UmVmO1xuXG4gIHJlYWRvbmx5IHNvcnQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTb3J0U3RhdGU+KHtcbiAgICBzdGF0ZToge25hbWU6ICcnLCBkaXJlY3Rpb246ICdERVNDJ30sXG4gICAgaXNTb3J0aW5nOiBmYWxzZSxcbiAgfSk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB2aWV3Q29udGVudFNlcnZpY2U6IFZpZXdDb250ZW50U2VydmljZSwgcHJpdmF0ZSBsb2dnZXI6IE5HWExvZ2dlcikge1xuICAgIHRoaXMudmlld0xpc3RBcyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd2aWV3TGlzdEFzJykgfHwgJ3RhYmxlJztcbiAgfVxuXG4gIGxvYWRQYWdpbmF0aW9uU2l6ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBlbnRyaWVzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXG4gICAgICBgJHt0aGlzLnBhZ2luYXRpb25JZGVudGlmaWVyfSR7TGlzdENvbXBvbmVudC5QQUdJTkFUSU9OX1NJWkV9YFxuICAgICk7XG4gICAgaWYgKGVudHJpZXMgIT09IG51bGwpIHtcbiAgICAgIHRoaXMucGFnaW5hdGlvbi5zaXplID0gK2VudHJpZXM7XG4gICAgICB0aGlzLnBhZ2luYXRpb25TZXQuZW1pdCgrZW50cmllcyk7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnUGFnaW5hdGlvbiBsb2FkZWQgZnJvbSBsb2NhbCBzdG9yYWdlIGZvciB0aGlzIGxpc3QuIEN1cnJlbnQ6ICcsIGVudHJpZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgJ1BhZ2luYXRpb24gZG9lcyBOT1QgZXhpc3QgaW4gbG9jYWwgc3RvcmFnZSBmb3IgdGhpcyBsaXN0LiBXaWxsIHVzZSBkZWZhdWx0LiBDaGFuZ2UgaXQgdG8gY3JlYXRlIGFuIGVudHJ5LidcbiAgICAgICk7XG4gICAgICB0aGlzLnBhZ2luYXRpb25TZXQuZW1pdCgxMCk7XG4gICAgfVxuICB9XG5cbiAgc2V0UGFnaW5hdGlvblNpemUobnVtYmVyT2ZFbnRyaWVzOiBzdHJpbmcpIHtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgIGAke3RoaXMucGFnaW5hdGlvbklkZW50aWZpZXJ9JHtMaXN0Q29tcG9uZW50LlBBR0lOQVRJT05fU0laRX1gLFxuICAgICAgbnVtYmVyT2ZFbnRyaWVzXG4gICAgKTtcbiAgICB0aGlzLnBhZ2luYXRpb24uc2l6ZSA9IG51bWJlck9mRW50cmllcztcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnUGFnaW5hdGlvbiBzZXQgaW4gbG9jYWwgc3RvcmFnZSBmb3IgdGhpcyBsaXN0OiAnLCBudW1iZXJPZkVudHJpZXMpO1xuICAgIHRoaXMucGFnaW5hdGlvblNldC5lbWl0KG51bWJlck9mRW50cmllcyk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5wYWdpbmF0aW9uKSB7XG4gICAgICB0aGlzLmxvYWRQYWdpbmF0aW9uU2l6ZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmluaXRpYWxTb3J0U3RhdGUpIHtcbiAgICAgIHRoaXMuc29ydCQubmV4dCh0aGlzLmluaXRpYWxTb3J0U3RhdGUpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlcy5pdGVtcyAmJiBjaGFuZ2VzLml0ZW1zLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgdGhpcy50cmFuc2Zvcm1MaXN0SXRlbXNNYXRjaEZpZWxkcygpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzPy5pbml0aWFsU29ydFN0YXRlPy5jdXJyZW50VmFsdWUpIHtcbiAgICAgIHRoaXMuc29ydCQubmV4dChjaGFuZ2VzPy5pbml0aWFsU29ydFN0YXRlPy5jdXJyZW50VmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy5pc1NlYXJjaGFibGUpIHtcbiAgICAgIGZyb21FdmVudCh0aGlzLnNlYXJjaEJveC5uYXRpdmVFbGVtZW50LCAna2V5dXAnKVxuICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoNTAwKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnNlYXJjaEJveC5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaC5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8gY3VzdG9tIHNlYXJjaCBjYWxsYmFrIGlzIHNwZWNpZmllZCwgcGVyaGFwcyB0byBxdWVyeSBvbiB0aGUgc2VydmVyIHNpZGVcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoLmVtaXQodmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaE1vZGVsID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdHJhbnNmb3JtTGlzdEl0ZW1zTWF0Y2hGaWVsZHMoKSB7XG4gICAgaWYgKHRoaXMuaXRlbXMgJiYgdGhpcy5maWVsZHMpIHtcbiAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaXRlbS5saXN0SXRlbUZpZWxkcyA9IHRoaXMuZmllbGRzLm1hcChmaWVsZCA9PiAoe1xuICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgIGxhYmVsOiBmaWVsZC5sYWJlbCxcbiAgICAgICAgICB0eXBlOiBmaWVsZC50eXBlIHx8ICcnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLnJlc29sdmVPYmplY3QoZmllbGQsIGl0ZW0pLFxuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25DbGlja1JvdyhpdGVtKSB7XG4gICAgdGhpcy5yb3dDbGlja2VkLmVtaXQoaXRlbSk7XG4gIH1cblxuICBwdWJsaWMgcmVzb2x2ZU9iamVjdChkZWZpbml0aW9uOiBhbnksIG9iajogYW55KSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbktleSA9IGRlZmluaXRpb24ua2V5O1xuICAgIGNvbnN0IGN1c3RvbVByb3BTdHJpbmcgPSAnJC4nO1xuICAgIGNvbnN0IGtleSA9IGRlZmluaXRpb25LZXkuaW5jbHVkZXMoY3VzdG9tUHJvcFN0cmluZylcbiAgICAgID8gZGVmaW5pdGlvbktleS5zcGxpdChjdXN0b21Qcm9wU3RyaW5nKVsxXVxuICAgICAgOiBkZWZpbml0aW9uS2V5O1xuICAgIGNvbnN0IHJlc29sdmVkT2JqVmFsdWUgPSBfZ2V0KG9iaiwga2V5LCBudWxsKTtcbiAgICByZXR1cm4gdGhpcy52aWV3Q29udGVudFNlcnZpY2UuZ2V0KHJlc29sdmVkT2JqVmFsdWUsIGRlZmluaXRpb24pO1xuICB9XG5cbiAgcHVibGljIHN3aXRjaFZpZXcodHlwZSkge1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd2aWV3TGlzdEFzJywgdHlwZSk7XG4gICAgdGhpcy52aWV3TGlzdEFzID0gdHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRUb3RhbFBhZ2VDb3VudCgpIHtcbiAgICByZXR1cm4gTWF0aC5jZWlsKHRoaXMucGFnaW5hdGlvbi5jb2xsZWN0aW9uU2l6ZSAvIHRoaXMucGFnaW5hdGlvbi5zaXplKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNsaWNrUGFnaW5hdGlvbihwYWdlKSB7XG4gICAgdGhpcy5wYWdpbmF0aW9uQ2xpY2tlZC5lbWl0KHBhZ2UpO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZUZpZWxkQ2xpY2soa2V5OiBzdHJpbmcsIHNvcnRhYmxlOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgZGVzYzogRGlyZWN0aW9uID0gJ0RFU0MnO1xuICAgIGNvbnN0IGFzYzogRGlyZWN0aW9uID0gJ0FTQyc7XG5cbiAgICBpZiAoIXNvcnRhYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zb3J0JC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShzb3J0ID0+IHtcbiAgICAgIGxldCBuZXdTdGF0ZTogU29ydFN0YXRlO1xuXG4gICAgICBpZiAoc29ydC5zdGF0ZS5uYW1lID09PSBrZXkpIHtcbiAgICAgICAgaWYgKCFzb3J0LmlzU29ydGluZykge1xuICAgICAgICAgIG5ld1N0YXRlID0ge3N0YXRlOiB7Li4uc29ydC5zdGF0ZSwgZGlyZWN0aW9uOiBkZXNjfSwgaXNTb3J0aW5nOiB0cnVlfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoc29ydC5zdGF0ZS5kaXJlY3Rpb24gPT09IGRlc2MpIHtcbiAgICAgICAgICAgIG5ld1N0YXRlID0gey4uLnNvcnQsIHN0YXRlOiB7Li4uc29ydC5zdGF0ZSwgZGlyZWN0aW9uOiBhc2N9fTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB7c3RhdGU6IHsuLi5zb3J0LnN0YXRlLCBkaXJlY3Rpb246IGRlc2N9LCBpc1NvcnRpbmc6IGZhbHNlfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1N0YXRlID0ge3N0YXRlOiB7bmFtZToga2V5LCBkaXJlY3Rpb246IGRlc2N9LCBpc1NvcnRpbmc6IHRydWV9O1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNvcnQkLm5leHQobmV3U3RhdGUpO1xuICAgICAgdGhpcy5zb3J0Q2hhbmdlZC5lbWl0KG5ld1N0YXRlKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjMgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuXG48ZGl2PlxuICA8ZGl2ICpuZ0lmPVwiKGl0ZW1zPy5sZW5ndGggPiAwICYmIGZpZWxkcz8ubGVuZ3RoID4gMCkgfHwgaGVhZGVyXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHNlYXJjaC1ob2xkZXIgYmctbGlnaHRcIlxuICAgICAgW25nQ2xhc3NdPVwieydwYi00IHB0LTQnOiAhaGVhZGVyfVwiXG4gICAgICAqbmdJZj1cImlzU2VhcmNoYWJsZSB8fCB2aWV3TW9kZSB8fCBoZWFkZXJcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJhbGlnbi1zZWxmLXN0YXJ0XCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltoZWFkZXJdXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJtbC1hdXRvIHJvd1wiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAqbmdJZj1cImlzU2VhcmNoYWJsZVwiXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgY29sLXNtLThcIlxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdsaXN0LnNlYXJjaCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICNzZWFyY2hCb3hcbiAgICAgICAgLz5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJzd2l0Y2gtdmlldy1ob2xkZXIgYnRuLWdyb3VwIGNvbC1zbS00IG10LTEgbXQtc20tMFwiXG4gICAgICAgICAgcm9sZT1cImdyb3VwXCJcbiAgICAgICAgICAqbmdJZj1cInZpZXdNb2RlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInZpZXdMaXN0QXMgPT09ICd0YWJsZScgPyAnYnRuLXByaW1hcnknIDogJ2J0bi1kZWZhdWx0J1wiXG4gICAgICAgICAgICAoY2xpY2spPVwic3dpdGNoVmlldygndGFibGUnKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uIG1kaSBtZGktdmlldy1oZWFkbGluZSB2aWV3LWljb25cIj48L2k+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJidG5cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwidmlld0xpc3RBcyA9PT0gJ3RpbGUnID8gJ2J0bi1wcmltYXJ5JyA6ICdidG4tZGVmYXVsdCdcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInN3aXRjaFZpZXcoJ3RpbGUnKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uIG1kaSBtZGktdmlldy1tb2R1bGUgdmlldy1pY29uXCI+PC9pPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8bmctY29udGVudCBzZWxlY3Q9XCJbdGFic11cIj48L25nLWNvbnRlbnQ+XG5cbiAgPGRpdiAqbmdJZj1cIml0ZW1zPy5sZW5ndGggPiAwICYmIGZpZWxkcz8ubGVuZ3RoID4gMFwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlIG5vU3dpcGVcIiAqbmdJZj1cIiF2aWV3TW9kZSB8fCB2aWV3TGlzdEFzID09PSAndGFibGUnXCI+XG4gICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1zdHJpcGVkIHRhYmxlLWhvdmVyIG0tMFwiICpuZ0lmPVwic29ydCQgfCBhc3luYyBhcyBzb3J0XCI+XG4gICAgICAgIDx0aGVhZD5cbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGZpZWxkIG9mIGZpZWxkc1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVGaWVsZENsaWNrKGZpZWxkLmtleSwgZmllbGQuc29ydGFibGUpXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgIHNvcnRhYmxlOiBmaWVsZC5zb3J0YWJsZSxcbiAgICAgICAgICAgICAgICAnaXMtYmVpbmctc29ydGVkJzogZmllbGQua2V5ID09PSBzb3J0LnN0YXRlLm5hbWUgJiYgc29ydC5pc1NvcnRpbmcsXG4gICAgICAgICAgICAgICAgYXNjZW5kaW5nOiBzb3J0LnN0YXRlLmRpcmVjdGlvbiA9PT0gJ0FTQydcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IGZpZWxkLmxhYmVsIH19XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgYWN0aW9uc1wiPlxuICAgICAgICAgICAgICB7eyBhY3Rpb24uY29sdW1uTmFtZSB9fVxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RoZWFkPlxuICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgPHRyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7J2NsaWNrLWFibGUnOiB0aGlzLnJvd0NsaWNrZWQub2JzZXJ2ZXJzLmxlbmd0aCA+IDB9XCJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zIHwgbGlzdEZpbHRlciA6IHNlYXJjaE1vZGVsOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrUm93KGl0ZW0pXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJhbGlnbi10b3BcIiAqbmdGb3I9XCJsZXQgbGlzdEl0ZW1GaWVsZCBvZiBpdGVtLmxpc3RJdGVtRmllbGRzXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgbGlzdEl0ZW1GaWVsZC50eXBlID09PSAnJyAmJiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlVHJhbnNsYXRpb25LZXk6ICd2aWV3VHlwZUNvbnZlcnRlci4nICsgbGlzdEl0ZW1GaWVsZC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVUcmFuc2xhdGlvbjogJ3ZpZXdUeXBlQ29udmVydGVyLicgKyBsaXN0SXRlbUZpZWxkLnZhbHVlIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICB9IGFzIHZhcnNcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgIGxpc3RJdGVtRmllbGQudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgPyB2YXJzLnZhbHVlVHJhbnNsYXRpb24gIT09IHZhcnMudmFsdWVUcmFuc2xhdGlvbktleVxuICAgICAgICAgICAgICAgICAgICAgID8gdmFycy52YWx1ZVRyYW5zbGF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgOiBsaXN0SXRlbUZpZWxkLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgIDogJy0nXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ0lmPVwibGlzdEl0ZW1GaWVsZC50eXBlID09PSAnZHJvcGRvd25BY3Rpb25zJ1wiXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZHJvcGRvd25BY3Rpb25zXCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2xpc3RJdGVtRmllbGQ6IGxpc3RJdGVtRmllbGQsIGl0ZW06IGl0ZW19XCJcbiAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLXRvcFwiICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgYWN0aW9uc1wiPlxuICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uLWljb25cIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJhY3Rpb24uaWNvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aW9uLmNhbGxiYWNrKGl0ZW0sICRldmVudClcIlxuICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cImxhc3RDb2x1bW5UZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgIGxhc3RDb2x1bW5UZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtpbmRleDogaSwgbGVuZ3RoOiBpdGVtcy5sZW5ndGgsIGl0ZW06IGl0ZW19XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cIihpdGVtcyB8IGxpc3RGaWx0ZXIgOiBzZWFyY2hNb2RlbCkubGVuZ3RoID09PSAwXCIgW2NvbFNwYW5dPVwiZmllbGRzLmxlbmd0aFwiPlxuICAgICAgICAgICAgICB7eyAnbGlzdC5ub01hdGNoaW5nSXRlbXMnIHwgdHJhbnNsYXRlIH19PGk+XCJ7eyBzZWFyY2hNb2RlbCB9fVwiPC9pPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIiAqbmdJZj1cInZpZXdNb2RlICYmIHZpZXdMaXN0QXMgPT09ICd0aWxlJ1wiPlxuICAgICAgPGRpdiBjbGFzcz1cInJvdyBwLTJcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY29sLTEyIGNvbC1zbS02IGNvbC14bC00IHAtMlwiXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXMgfCBsaXN0RmlsdGVyIDogc2VhcmNoTW9kZWxcIlxuICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrUm93KGl0ZW0pXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbGljay1hYmxlIHRpbGUtaG9sZGVyIHAtNFwiPlxuICAgICAgICAgICAgPGRsIGNsYXNzPVwicm93IG1iLTBcIiAqbmdGb3I9XCJsZXQgbGlzdEl0ZW1GaWVsZCBvZiBpdGVtLmxpc3RJdGVtRmllbGRzXCI+XG4gICAgICAgICAgICAgIDxkdCBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNSB0ZXh0LXhsLXJpZ2h0XCI+e3sgbGlzdEl0ZW1GaWVsZC5sYWJlbCB9fTwvZHQ+XG4gICAgICAgICAgICAgIDxkZCBjbGFzcz1cImNvbC0xMiBjb2wtbWQtN1wiPnt7IGxpc3RJdGVtRmllbGQudmFsdWUgfHwgJy0nIH19PC9kZD5cbiAgICAgICAgICAgIDwvZGw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCIgKm5nSWY9XCIoaXRlbXMgfCBsaXN0RmlsdGVyIDogc2VhcmNoTW9kZWwpLmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICAgIHt7ICdsaXN0Lm5vTWF0Y2hpbmdJdGVtcycgfCB0cmFuc2xhdGUgfX08aT5cInt7IHNlYXJjaE1vZGVsIH19XCI8L2k+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXZcbiAgICBjbGFzcz1cInBhZ2luYXRpb24taG9sZGVyIGJnLWxpZ2h0IHB4LTQgcHQtNCBwYi0yIG92ZXJmbG93LWF1dG8gcm93IG1yLTAgbWwtMFwiXG4gICAgKm5nSWY9XCJwYWdpbmF0aW9uICYmIGl0ZW1zPy5sZW5ndGggPiAwICYmIGZpZWxkcz8ubGVuZ3RoID4gMFwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiZmxvYXQtbGVmdCBwYWdlLWNvdW50IGNvbC00XCI+XG4gICAgICA8c3Ryb25nPnt7XG4gICAgICAgICdsaXN0LmN1cnJlbnRQYWdlJ1xuICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICA6IHtjdXJyZW50OiBwYWdpbmF0aW9uLnBhZ2UgPiAwID8gcGFnaW5hdGlvbi5wYWdlIDogMSwgdG90YWw6IGdldFRvdGFsUGFnZUNvdW50KCl9XG4gICAgICB9fTwvc3Ryb25nPlxuICAgICAge3tcbiAgICAgICAgcGFnaW5hdGlvbi5jb2xsZWN0aW9uU2l6ZSA9PT0gMVxuICAgICAgICAgID8gKCdsaXN0LnNob3dpbmdSZXN1bHQnIHwgdHJhbnNsYXRlIDoge251bWJlcjogKGl0ZW1zIHwgbGlzdEZpbHRlciA6IHNlYXJjaE1vZGVsKS5sZW5ndGh9KVxuICAgICAgICAgIDogKCdsaXN0LnNob3dpbmdSZXN1bHRzJ1xuICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICBudW1iZXI6IChpdGVtcyB8IGxpc3RGaWx0ZXIgOiBzZWFyY2hNb2RlbCkubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgdG90YWw6IHBhZ2luYXRpb24uY29sbGVjdGlvblNpemVcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgfX1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLTQgdGV4dC1jZW50ZXJcIj5cbiAgICAgIHt7ICdsaXN0LnNob3cnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8c2VsZWN0IFsobmdNb2RlbCldPVwicGFnaW5hdGlvbi5zaXplXCIgKG5nTW9kZWxDaGFuZ2UpPVwic2V0UGFnaW5hdGlvblNpemUoJGV2ZW50KVwiPlxuICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cIjEwXCI+MTA8L29wdGlvbj5cbiAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCIyNVwiPjI1PC9vcHRpb24+XG4gICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwiNTBcIj41MDwvb3B0aW9uPlxuICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cIjEwMFwiPjEwMDwvb3B0aW9uPlxuICAgICAgPC9zZWxlY3Q+XG4gICAgICB7eyAnbGlzdC5lbnRyaWVzJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtNFwiPlxuICAgICAgPG5nYi1wYWdpbmF0aW9uXG4gICAgICAgICpuZ0lmPVwicGFnaW5hdGlvbi5jb2xsZWN0aW9uU2l6ZSA+IHBhZ2luYXRpb24uc2l6ZVwiXG4gICAgICAgIGNsYXNzPVwiZmxvYXQtcmlnaHRcIlxuICAgICAgICBbY29sbGVjdGlvblNpemVdPVwicGFnaW5hdGlvbi5jb2xsZWN0aW9uU2l6ZVwiXG4gICAgICAgIFsocGFnZSldPVwicGFnaW5hdGlvbi5wYWdlXCJcbiAgICAgICAgW3BhZ2VTaXplXT1cInBhZ2luYXRpb24uc2l6ZVwiXG4gICAgICAgIFttYXhTaXplXT1cInBhZ2luYXRpb24ubWF4UGFnaW5hdGlvbkl0ZW1TaXplXCJcbiAgICAgICAgW3JvdGF0ZV09XCJ0cnVlXCJcbiAgICAgICAgKHBhZ2VDaGFuZ2UpPVwib25DbGlja1BhZ2luYXRpb24ocGFnaW5hdGlvbi5wYWdlKVwiXG4gICAgICA+PC9uZ2ItcGFnaW5hdGlvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBpZD1cIm5vLXJlc3VsdHNcIiBjbGFzcz1cInAtNVwiICpuZ0lmPVwiaXRlbXM/Lmxlbmd0aCA9PT0gMFwiPlxuICAgIHt7ICdsaXN0Lm5vUmVzdWx0cycgfCB0cmFuc2xhdGUgfX1cbiAgPC9kaXY+XG5cbiAgPGRpdiBpZD1cIm5vLWZpZWxkLWRlZmluaXRpb25zXCIgY2xhc3M9XCJwLTVcIiAqbmdJZj1cIml0ZW1zPy5sZW5ndGggPiAwICYmIGZpZWxkcz8ubGVuZ3RoID09PSAwXCI+XG4gICAge3sgJ2xpc3Qubm9GaWVsZERlZmluaXRpb25zJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2Ryb3Bkb3duQWN0aW9ucyBsZXQtbGlzdEl0ZW1GaWVsZD1cImxpc3RJdGVtRmllbGRcIiBsZXQtaXRlbT1cIml0ZW1cIj5cbiAgPGRpdiBjbGFzcz1cImRyb3Bkb3duXCIgKm5nSWY9XCJsaXN0SXRlbUZpZWxkPy52YWx1ZS5sZW5ndGggPiAwXCI+XG4gICAgPGFcbiAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcbiAgICAgIGNsYXNzPVwiZHJvcGRvd24tdG9nZ2xlIGQtYmxvY2tcIlxuICAgICAgaWQ9XCJkcm9wZG93bk1lbnVcIlxuICAgICAgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXG4gICAgICBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiXG4gICAgICBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIlxuICAgID5cbiAgICAgIDxpIGNsYXNzPVwiYWN0aW9uLWljb24gaWNvbiBtZGkgbWRpLWRvdHMtdmVydGljYWxcIj48L2k+XG4gICAgPC9hPlxuICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgYXJpYS1sYWJlbGxlZGJ5PVwiZHJvcGRvd25NZW51XCI+XG4gICAgICA8YVxuICAgICAgICAoY2xpY2spPVwiYWN0aW9uLmNhbGxiYWNrKGl0ZW0sICRldmVudClcIlxuICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gcC0yXCJcbiAgICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBsaXN0SXRlbUZpZWxkLnZhbHVlXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGlvbi5pY29uQ2xhc3MgIT09IG51bGxcIj5cbiAgICAgICAgICA8aSBbbmdDbGFzc109XCJhY3Rpb24uaWNvbkNsYXNzXCI+PC9pPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAge3sgYWN0aW9uPy5sYWJlbCB8fCAnLScgfX1cbiAgICAgIDwvYT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
@@ -1,245 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2015-2023 Ritense BV, the Netherlands.
|
|
3
|
-
*
|
|
4
|
-
* Licensed under EUPL, Version 1.2 (the "License");
|
|
5
|
-
* you may not use this file except in compliance with the License.
|
|
6
|
-
* You may obtain a copy of the License at
|
|
7
|
-
*
|
|
8
|
-
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
9
|
-
*
|
|
10
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
* distributed under the License is distributed on an "AS IS" basis,
|
|
12
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
* See the License for the specific language governing permissions and
|
|
14
|
-
* limitations under the License.
|
|
15
|
-
*/
|
|
16
|
-
import { Injectable } from '@angular/core';
|
|
17
|
-
import { NavigationEnd, NavigationStart, ResolveEnd } from '@angular/router';
|
|
18
|
-
import { BehaviorSubject, combineLatest, Observable, Subject, timer } from 'rxjs';
|
|
19
|
-
import { filter, map, take } from 'rxjs/operators';
|
|
20
|
-
import * as i0 from "@angular/core";
|
|
21
|
-
import * as i1 from "@valtimo/config";
|
|
22
|
-
import * as i2 from "@valtimo/document";
|
|
23
|
-
import * as i3 from "@valtimo/security";
|
|
24
|
-
import * as i4 from "ngx-logger";
|
|
25
|
-
import * as i5 from "@angular/router";
|
|
26
|
-
import * as i6 from "keycloak-angular";
|
|
27
|
-
import * as i7 from "@angular/common/http";
|
|
28
|
-
export class MenuService {
|
|
29
|
-
constructor(configService, documentService, userProviderService, logger, menuIncludeService, router, keycloakService, http) {
|
|
30
|
-
this.configService = configService;
|
|
31
|
-
this.documentService = documentService;
|
|
32
|
-
this.userProviderService = userProviderService;
|
|
33
|
-
this.logger = logger;
|
|
34
|
-
this.menuIncludeService = menuIncludeService;
|
|
35
|
-
this.router = router;
|
|
36
|
-
this.keycloakService = keycloakService;
|
|
37
|
-
this.http = http;
|
|
38
|
-
this._activeParentSequenceNumber$ = new BehaviorSubject('');
|
|
39
|
-
this.includeFunctionObservables = {};
|
|
40
|
-
this._menuItems$ = new BehaviorSubject(undefined);
|
|
41
|
-
this.currentRoute$ = this.router.events.pipe(filter(event => event instanceof NavigationEnd ||
|
|
42
|
-
event instanceof NavigationStart ||
|
|
43
|
-
event instanceof ResolveEnd), map(event => event?.url), filter(url => !!url));
|
|
44
|
-
this.dossierItemsAppended$ = new BehaviorSubject(false);
|
|
45
|
-
this.objectsItemsAppended$ = new BehaviorSubject(false);
|
|
46
|
-
const config = configService?.config;
|
|
47
|
-
this.menuConfig = config?.menu;
|
|
48
|
-
this.disableCaseCount = config?.featureToggles?.disableCaseCount;
|
|
49
|
-
this.enableObjectManagement = config?.featureToggles?.enableObjectManagement;
|
|
50
|
-
}
|
|
51
|
-
get activeParentSequenceNumber$() {
|
|
52
|
-
return this._activeParentSequenceNumber$.asObservable();
|
|
53
|
-
}
|
|
54
|
-
// Find out which menu item sequence number matches the current url the closest
|
|
55
|
-
get closestSequence$() {
|
|
56
|
-
return combineLatest([
|
|
57
|
-
this.dossierItemsAppended$,
|
|
58
|
-
this.objectsItemsAppended$,
|
|
59
|
-
this.currentRoute$,
|
|
60
|
-
this.menuItems$,
|
|
61
|
-
]).pipe(filter(([dossierItemsAppended, objectsItemsAppended]) => dossierItemsAppended || objectsItemsAppended), map(([dossierItemsAppended, objectsItemsAppended, currentRoute, menuItems]) => {
|
|
62
|
-
let closestSequence = '0';
|
|
63
|
-
let highestDifference = 0;
|
|
64
|
-
// recursive function to check how closely each item matches to the current url
|
|
65
|
-
const checkItemMatch = (stringUrl, sequence, parentSequence) => {
|
|
66
|
-
// length of the current full url
|
|
67
|
-
const currentRouteUrlLength = currentRoute.length;
|
|
68
|
-
// length of the current full url with the item's url substracted
|
|
69
|
-
const currentRouteSubstractLength = currentRoute.replace(stringUrl, '').length;
|
|
70
|
-
// the amount of characters that could be substracted
|
|
71
|
-
const difference = currentRouteUrlLength - currentRouteSubstractLength;
|
|
72
|
-
// the larger the amount of characters that could be substracted, the more closely the menu item url matches the current url
|
|
73
|
-
if (difference > highestDifference) {
|
|
74
|
-
highestDifference = difference;
|
|
75
|
-
closestSequence = sequence;
|
|
76
|
-
if (parentSequence) {
|
|
77
|
-
this._activeParentSequenceNumber$.next(parentSequence);
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
this._activeParentSequenceNumber$.next('');
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
};
|
|
84
|
-
// check how closely each menu item (and child menu item) matches the current url using a recursive function
|
|
85
|
-
menuItems.forEach(item => {
|
|
86
|
-
checkItemMatch(item.link?.join('') || '', `${item.sequence}`);
|
|
87
|
-
if (item.children) {
|
|
88
|
-
item.children.forEach(childItem => {
|
|
89
|
-
if (Array.isArray(childItem.link)) {
|
|
90
|
-
checkItemMatch(Array.isArray(item.link)
|
|
91
|
-
? [...item.link, ...childItem.link].join('')
|
|
92
|
-
: childItem.link.join(''), `${item.sequence}${childItem.sequence}`, `${item.sequence}`);
|
|
93
|
-
}
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
});
|
|
97
|
-
// returns the closest sequence number (each menu item has a sequence number)
|
|
98
|
-
return closestSequence;
|
|
99
|
-
}));
|
|
100
|
-
}
|
|
101
|
-
get menuItems$() {
|
|
102
|
-
return this._menuItems$.asObservable();
|
|
103
|
-
}
|
|
104
|
-
init() {
|
|
105
|
-
this.reload();
|
|
106
|
-
this.logger.debug('Menu initialized');
|
|
107
|
-
}
|
|
108
|
-
reload() {
|
|
109
|
-
const roles = this.keycloakService.getUserRoles(true);
|
|
110
|
-
return this._menuItems$.next(this.loadMenuItems(roles));
|
|
111
|
-
}
|
|
112
|
-
loadMenuItems(userRoles) {
|
|
113
|
-
let menuItems = [];
|
|
114
|
-
this.menuConfig.menuItems.forEach((menuItem) => {
|
|
115
|
-
if (menuItem.includeFunction !== undefined) {
|
|
116
|
-
this.includeFunctionObservables[menuItem.title] =
|
|
117
|
-
this.menuIncludeService.getIncludeFunction(menuItem.includeFunction);
|
|
118
|
-
}
|
|
119
|
-
menuItem.show = true;
|
|
120
|
-
if (userRoles.find(userRole => menuItem.roles.includes(userRole))) {
|
|
121
|
-
menuItems.push(menuItem);
|
|
122
|
-
}
|
|
123
|
-
});
|
|
124
|
-
menuItems = this.sortMenuItems(menuItems);
|
|
125
|
-
this.appendDossierSubMenuItems(menuItems).subscribe(value => (menuItems = this.applyMenuRoleSecurity(value)));
|
|
126
|
-
if (this.enableObjectManagement) {
|
|
127
|
-
this.appendObjectsSubMenuItems(menuItems).subscribe(value => (menuItems = this.applyMenuRoleSecurity(value)));
|
|
128
|
-
}
|
|
129
|
-
return menuItems;
|
|
130
|
-
}
|
|
131
|
-
sortMenuItems(menuItems) {
|
|
132
|
-
return menuItems.sort((a, b) => a.sequence - b.sequence);
|
|
133
|
-
}
|
|
134
|
-
appendDossierSubMenuItems(menuItems) {
|
|
135
|
-
return new Observable(subscriber => {
|
|
136
|
-
this.logger.debug('appendDossierSubMenuItems');
|
|
137
|
-
this.documentService.getAllDefinitions().subscribe(definitions => {
|
|
138
|
-
combineLatest([
|
|
139
|
-
...definitions.content.map(definition => this.documentService.getCaseSettings(definition?.id?.name)),
|
|
140
|
-
])
|
|
141
|
-
.pipe(take(1))
|
|
142
|
-
.subscribe(allCaseSettings => {
|
|
143
|
-
const openDocumentCountMap = !this.disableCaseCount && this.getOpenDocumentCountMap(definitions);
|
|
144
|
-
const dossierMenuItems = definitions.content.map((definition, index) => {
|
|
145
|
-
const caseSettings = allCaseSettings?.find(setting => setting.name === definition.id.name);
|
|
146
|
-
return {
|
|
147
|
-
link: ['/dossiers/' + definition.id.name],
|
|
148
|
-
title: definition.schema.title,
|
|
149
|
-
iconClass: 'icon mdi mdi-dot-circle',
|
|
150
|
-
sequence: index,
|
|
151
|
-
show: true,
|
|
152
|
-
...(!this.disableCaseCount &&
|
|
153
|
-
caseSettings?.canHaveAssignee && {
|
|
154
|
-
count$: openDocumentCountMap.get(definition.id.name),
|
|
155
|
-
}),
|
|
156
|
-
};
|
|
157
|
-
});
|
|
158
|
-
this.logger.debug('found dossierMenuItems', dossierMenuItems);
|
|
159
|
-
const menuItemIndex = menuItems.findIndex(({ title }) => title === 'Dossiers');
|
|
160
|
-
if (menuItemIndex > 0) {
|
|
161
|
-
const dossierMenu = menuItems[menuItemIndex];
|
|
162
|
-
this.logger.debug('updating dossierMenu', dossierMenu);
|
|
163
|
-
dossierMenu.children = dossierMenuItems;
|
|
164
|
-
menuItems[menuItemIndex] = dossierMenu;
|
|
165
|
-
}
|
|
166
|
-
subscriber.next(menuItems);
|
|
167
|
-
this.dossierItemsAppended$.next(true);
|
|
168
|
-
this.logger.debug('appendDossierSubMenuItems finished');
|
|
169
|
-
});
|
|
170
|
-
});
|
|
171
|
-
});
|
|
172
|
-
}
|
|
173
|
-
appendObjectsSubMenuItems(menuItems) {
|
|
174
|
-
return new Observable(subscriber => {
|
|
175
|
-
this.logger.debug('appendObjectManagementSubMenuItems');
|
|
176
|
-
this.getAllObjects().subscribe(objects => {
|
|
177
|
-
const visibleObjects = objects.filter(object => object?.showInDataMenu !== false);
|
|
178
|
-
if (visibleObjects?.length > 0) {
|
|
179
|
-
const objectsMenuItems = visibleObjects.map((object, index) => ({
|
|
180
|
-
link: ['/objects/' + object.id],
|
|
181
|
-
title: object.title,
|
|
182
|
-
iconClass: 'icon mdi mdi-dot-circle',
|
|
183
|
-
sequence: index,
|
|
184
|
-
show: true,
|
|
185
|
-
}));
|
|
186
|
-
this.logger.debug('found objectsMenuItems', objectsMenuItems);
|
|
187
|
-
const menuItemIndex = menuItems.findIndex(({ title }) => title === 'Objects');
|
|
188
|
-
if (menuItemIndex > 0) {
|
|
189
|
-
const objectsMenu = menuItems[menuItemIndex];
|
|
190
|
-
this.logger.debug('updating objectsMenu', objectsMenu);
|
|
191
|
-
objectsMenu.children = objectsMenuItems;
|
|
192
|
-
menuItems[menuItemIndex] = objectsMenu;
|
|
193
|
-
}
|
|
194
|
-
subscriber.next(menuItems);
|
|
195
|
-
this.objectsItemsAppended$.next(true);
|
|
196
|
-
this.logger.debug('appendObjectsSubMenuItems finished');
|
|
197
|
-
}
|
|
198
|
-
});
|
|
199
|
-
});
|
|
200
|
-
}
|
|
201
|
-
getOpenDocumentCountMap(definitions) {
|
|
202
|
-
const countMap = new Map();
|
|
203
|
-
definitions.content.forEach(definition => countMap.set(definition.id.name, new Subject()));
|
|
204
|
-
timer(0, 5000).subscribe(() => {
|
|
205
|
-
this.documentService.getOpenDocumentCount().subscribe(openDocumentCountList => {
|
|
206
|
-
openDocumentCountList.forEach(openDocumentCount => countMap
|
|
207
|
-
.get(openDocumentCount.documentDefinitionName)
|
|
208
|
-
.next(openDocumentCount.openDocumentCount));
|
|
209
|
-
});
|
|
210
|
-
});
|
|
211
|
-
return countMap;
|
|
212
|
-
}
|
|
213
|
-
applyMenuRoleSecurity(menuItems) {
|
|
214
|
-
this.userProviderService.getUserSubject().subscribe(user => {
|
|
215
|
-
if (user.roles != null) {
|
|
216
|
-
this.logger.debug('applyMenuRoleSecurity');
|
|
217
|
-
const userRoles = user.roles;
|
|
218
|
-
menuItems.forEach((menuItem) => {
|
|
219
|
-
const access = this.determineRoleAccess(menuItem, userRoles);
|
|
220
|
-
this.logger.debug('Menu: check role access', menuItem.roles, access);
|
|
221
|
-
if (menuItem.show !== access) {
|
|
222
|
-
this.logger.debug('Menu: Change access', menuItem, access);
|
|
223
|
-
menuItem.show = access;
|
|
224
|
-
}
|
|
225
|
-
});
|
|
226
|
-
}
|
|
227
|
-
});
|
|
228
|
-
return menuItems;
|
|
229
|
-
}
|
|
230
|
-
determineRoleAccess(menuItem, roles) {
|
|
231
|
-
return !menuItem.roles || menuItem.roles.some(role => roles.includes(role));
|
|
232
|
-
}
|
|
233
|
-
getAllObjects() {
|
|
234
|
-
return this.http.get(`${this.configService.config.valtimoApi.endpointUri}v1/object/management/configuration`);
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
MenuService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MenuService, deps: [{ token: i1.ConfigService }, { token: i2.DocumentService }, { token: i3.UserProviderService }, { token: i4.NGXLogger }, { token: i1.MenuIncludeService }, { token: i5.Router }, { token: i6.KeycloakService }, { token: i7.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
238
|
-
MenuService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MenuService, providedIn: 'root' });
|
|
239
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MenuService, decorators: [{
|
|
240
|
-
type: Injectable,
|
|
241
|
-
args: [{
|
|
242
|
-
providedIn: 'root',
|
|
243
|
-
}]
|
|
244
|
-
}], ctorParameters: function () { return [{ type: i1.ConfigService }, { type: i2.DocumentService }, { type: i3.UserProviderService }, { type: i4.NGXLogger }, { type: i1.MenuIncludeService }, { type: i5.Router }, { type: i6.KeycloakService }, { type: i7.HttpClient }]; } });
|
|
245
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9tZW51L21lbnUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFJekMsT0FBTyxFQUFDLGFBQWEsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFTLE1BQU0saUJBQWlCLENBQUM7QUFDbkYsT0FBTyxFQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFaEYsT0FBTyxFQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7OztBQU9qRCxNQUFNLE9BQU8sV0FBVztJQWN0QixZQUNtQixhQUE0QixFQUM1QixlQUFnQyxFQUNoQyxtQkFBd0MsRUFDeEMsTUFBaUIsRUFDakIsa0JBQXNDLEVBQ3RDLE1BQWMsRUFDZCxlQUFnQyxFQUN6QyxJQUFnQjtRQVBQLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDakIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2Qsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ3pDLFNBQUksR0FBSixJQUFJLENBQVk7UUFyQlQsaUNBQTRCLEdBQUcsSUFBSSxlQUFlLENBQVMsRUFBRSxDQUFDLENBQUM7UUFDekUsK0JBQTBCLEdBQXlDLEVBQUUsQ0FBQztRQUVyRSxnQkFBVyxHQUFHLElB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Q3hGLENBQUM7SUFDSixDQUFDOzt3R0F4UlUsV0FBVzs0R0FBWCxXQUFXLGNBRlYsTUFBTTsyRkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDIzIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbmZpZ1NlcnZpY2UsIE1lbnVDb25maWcsIE1lbnVJbmNsdWRlU2VydmljZSwgTWVudUl0ZW19IGZyb20gJ0B2YWx0aW1vL2NvbmZpZyc7XG5pbXBvcnQge05HWExvZ2dlcn0gZnJvbSAnbmd4LWxvZ2dlcic7XG5pbXBvcnQge1VzZXJQcm92aWRlclNlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL3NlY3VyaXR5JztcbmltcG9ydCB7TmF2aWdhdGlvbkVuZCwgTmF2aWdhdGlvblN0YXJ0LCBSZXNvbHZlRW5kLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgdGltZXJ9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtEb2N1bWVudERlZmluaXRpb25zLCBEb2N1bWVudFNlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL2RvY3VtZW50JztcbmltcG9ydCB7ZmlsdGVyLCBtYXAsIHRha2V9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7S2V5Y2xvYWtTZXJ2aWNlfSBmcm9tICdrZXljbG9hay1hbmd1bGFyJztcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTWVudVNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IF9hY3RpdmVQYXJlbnRTZXF1ZW5jZU51bWJlciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwdWJsaWMgaW5jbHVkZUZ1bmN0aW9uT2JzZXJ2YWJsZXM6IHtba2V5OiBzdHJpbmddOiBPYnNlcnZhYmxlPGJvb2xlYW4+fSA9IHt9O1xuXG4gIHByaXZhdGUgX21lbnVJdGVtcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1lbnVJdGVtW10+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgbWVudUNvbmZpZzogTWVudUNvbmZpZztcblxuICBwcml2YXRlIHJlYWRvbmx5IGRpc2FibGVDYXNlQ291bnQhOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IGVuYWJsZU9iamVjdE1hbmFnZW1lbnQhOiBib29sZWFuO1xuXG4gIGdldCBhY3RpdmVQYXJlbnRTZXF1ZW5jZU51bWJlciQoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlUGFyZW50U2VxdWVuY2VOdW1iZXIkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnRTZXJ2aWNlOiBEb2N1bWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB1c2VyUHJvdmlkZXJTZXJ2aWNlOiBVc2VyUHJvdmlkZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyOiBOR1hMb2dnZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBtZW51SW5jbHVkZVNlcnZpY2U6IE1lbnVJbmNsdWRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkga2V5Y2xvYWtTZXJ2aWNlOiBLZXljbG9ha1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50XG4gICkge1xuICAgIGNvbnN0IGNvbmZpZyA9IGNvbmZpZ1NlcnZpY2U/LmNvbmZpZztcbiAgICB0aGlzLm1lbnVDb25maWcgPSBjb25maWc/Lm1lbnU7XG4gICAgdGhpcy5kaXNhYmxlQ2FzZUNvdW50ID0gY29uZmlnPy5mZWF0dXJlVG9nZ2xlcz8uZGlzYWJsZUNhc2VDb3VudDtcbiAgICB0aGlzLmVuYWJsZU9iamVjdE1hbmFnZW1lbnQgPSBjb25maWc/LmZlYXR1cmVUb2dnbGVzPy5lbmFibGVPYmplY3RNYW5hZ2VtZW50O1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjdXJyZW50Um91dGUkID0gdGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoXG4gICAgZmlsdGVyKFxuICAgICAgZXZlbnQgPT5cbiAgICAgICAgZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kIHx8XG4gICAgICAgIGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0IHx8XG4gICAgICAgIGV2ZW50IGluc3RhbmNlb2YgUmVzb2x2ZUVuZFxuICAgICksXG4gICAgbWFwKGV2ZW50ID0+IChldmVudCBhcyBOYXZpZ2F0aW9uRW5kKT8udXJsKSxcbiAgICBmaWx0ZXIodXJsID0+ICEhdXJsKVxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZG9zc2llckl0ZW1zQXBwZW5kZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgb2JqZWN0c0l0ZW1zQXBwZW5kZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgLy8gRmluZCBvdXQgd2hpY2ggbWVudSBpdGVtIHNlcXVlbmNlIG51bWJlciBtYXRjaGVzIHRoZSBjdXJyZW50IHVybCB0aGUgY2xvc2VzdFxuICBwdWJsaWMgZ2V0IGNsb3Nlc3RTZXF1ZW5jZSQoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmRvc3NpZXJJdGVtc0FwcGVuZGVkJCxcbiAgICAgIHRoaXMub2JqZWN0c0l0ZW1zQXBwZW5kZWQkLFxuICAgICAgdGhpcy5jdXJyZW50Um91dGUkLFxuICAgICAgdGhpcy5tZW51SXRlbXMkLFxuICAgIF0pLnBpcGUoXG4gICAgICBmaWx0ZXIoXG4gICAgICAgIChbZG9zc2llckl0ZW1zQXBwZW5kZWQsIG9iamVjdHNJdGVtc0FwcGVuZGVkXSkgPT5cbiAgICAgICAgICBkb3NzaWVySXRlbXNBcHBlbmRlZCB8fCBvYmplY3RzSXRlbXNBcHBlbmRlZFxuICAgICAgKSxcbiAgICAgIG1hcCgoW2Rvc3NpZXJJdGVtc0FwcGVuZGVkLCBvYmplY3RzSXRlbXNBcHBlbmRlZCwgY3VycmVudFJvdXRlLCBtZW51SXRlbXNdKSA9PiB7XG4gICAgICAgIGxldCBjbG9zZXN0U2VxdWVuY2UgPSAnMCc7XG4gICAgICAgIGxldCBoaWdoZXN0RGlmZmVyZW5jZSA9IDA7XG5cbiAgICAgICAgLy8gcmVjdXJzaXZlIGZ1bmN0aW9uIHRvIGNoZWNrIGhvdyBjbG9zZWx5IGVhY2ggaXRlbSBtYXRjaGVzIHRvIHRoZSBjdXJyZW50IHVybFxuICAgICAgICBjb25zdCBjaGVja0l0ZW1NYXRjaCA9IChcbiAgICAgICAgICBzdHJpbmdVcmw6IHN0cmluZyxcbiAgICAgICAgICBzZXF1ZW5jZTogc3RyaW5nLFxuICAgICAgICAgIHBhcmVudFNlcXVlbmNlPzogc3RyaW5nXG4gICAgICAgICk6IHZvaWQgPT4ge1xuICAgICAgICAgIC8vIGxlbmd0aCBvZiB0aGUgY3VycmVudCBmdWxsIHVybFxuICAgICAgICAgIGNvbnN0IGN1cnJlbnRSb3V0ZVVybExlbmd0aCA9IGN1cnJlbnRSb3V0ZS5sZW5ndGg7XG4gICAgICAgICAgLy8gbGVuZ3RoIG9mIHRoZSBjdXJyZW50IGZ1bGwgdXJsIHdpdGggdGhlIGl0ZW0ncyB1cmwgc3Vic3RyYWN0ZWRcbiAgICAgICAgICBjb25zdCBjdXJyZW50Um91dGVTdWJzdHJhY3RMZW5ndGggPSBjdXJyZW50Um91dGUucmVwbGFjZShzdHJpbmdVcmwsICcnKS5sZW5ndGg7XG4gICAgICAgICAgLy8gdGhlIGFtb3VudCBvZiBjaGFyYWN0ZXJzIHRoYXQgY291bGQgYmUgc3Vic3RyYWN0ZWRcbiAgICAgICAgICBjb25zdCBkaWZmZXJlbmNlID0gY3VycmVudFJvdXRlVXJsTGVuZ3RoIC0gY3VycmVudFJvdXRlU3Vic3RyYWN0TGVuZ3RoO1xuXG4gICAgICAgICAgLy8gdGhlIGxhcmdlciB0aGUgYW1vdW50IG9mIGNoYXJhY3RlcnMgdGhhdCBjb3VsZCBiZSBzdWJzdHJhY3RlZCwgdGhlIG1vcmUgY2xvc2VseSB0aGUgbWVudSBpdGVtIHVybCBtYXRjaGVzIHRoZSBjdXJyZW50IHVybFxuICAgICAgICAgIGlmIChkaWZmZXJlbmNlID4gaGlnaGVzdERpZmZlcmVuY2UpIHtcbiAgICAgICAgICAgIGhpZ2hlc3REaWZmZXJlbmNlID0gZGlmZmVyZW5jZTtcbiAgICAgICAgICAgIGNsb3Nlc3RTZXF1ZW5jZSA9IHNlcXVlbmNlO1xuXG4gICAgICAgICAgICBpZiAocGFyZW50U2VxdWVuY2UpIHtcbiAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlUGFyZW50U2VxdWVuY2VOdW1iZXIkLm5leHQocGFyZW50U2VxdWVuY2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlUGFyZW50U2VxdWVuY2VOdW1iZXIkLm5leHQoJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBjaGVjayBob3cgY2xvc2VseSBlYWNoIG1lbnUgaXRlbSAoYW5kIGNoaWxkIG1lbnUgaXRlbSkgbWF0Y2hlcyB0aGUgY3VycmVudCB1cmwgdXNpbmcgYSByZWN1cnNpdmUgZnVuY3Rpb25cbiAgICAgICAgbWVudUl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgY2hlY2tJdGVtTWF0Y2goaXRlbS5saW5rPy5qb2luKCcnKSB8fCAnJywgYCR7aXRlbS5zZXF1ZW5jZX1gKTtcblxuICAgICAgICAgIGlmIChpdGVtLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBpdGVtLmNoaWxkcmVuLmZvckVhY2goY2hpbGRJdGVtID0+IHtcbiAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRJdGVtLmxpbmspKSB7XG4gICAgICAgICAgICAgICAgY2hlY2tJdGVtTWF0Y2goXG4gICAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KGl0ZW0ubGluaylcbiAgICAgICAgICAgICAgICAgICAgPyBbLi4uaXRlbS5saW5rLCAuLi5jaGlsZEl0ZW0ubGlua10uam9pbignJylcbiAgICAgICAgICAgICAgICAgICAgOiBjaGlsZEl0ZW0ubGluay5qb2luKCcnKSxcbiAgICAgICAgICAgICAgICAgIGAke2l0ZW0uc2VxdWVuY2V9JHtjaGlsZEl0ZW0uc2VxdWVuY2V9YCxcbiAgICAgICAgICAgICAgICAgIGAke2l0ZW0uc2VxdWVuY2V9YFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gcmV0dXJucyB0aGUgY2xvc2VzdCBzZXF1ZW5jZSBudW1iZXIgKGVhY2ggbWVudSBpdGVtIGhhcyBhIHNlcXVlbmNlIG51bWJlcilcblxuICAgICAgICByZXR1cm4gY2xvc2VzdFNlcXVlbmNlO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCBtZW51SXRlbXMkKCk6IE9ic2VydmFibGU8TWVudUl0ZW1bXT4ge1xuICAgIHJldHVybiB0aGlzLl9tZW51SXRlbXMkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgaW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlbG9hZCgpO1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdNZW51IGluaXRpYWxpemVkJyk7XG4gIH1cblxuICBwdWJsaWMgcmVsb2FkKCk6IHZvaWQge1xuICAgIGNvbnN0IHJvbGVzID0gdGhpcy5rZXljbG9ha1NlcnZpY2UuZ2V0VXNlclJvbGVzKHRydWUpO1xuICAgIHJldHVybiB0aGlzLl9tZW51SXRlbXMkLm5leHQodGhpcy5sb2FkTWVudUl0ZW1zKHJvbGVzKSk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRNZW51SXRlbXModXNlclJvbGVzOiBBcnJheTxzdHJpbmc+KTogTWVudUl0ZW1bXSB7XG4gICAgbGV0IG1lbnVJdGVtczogTWVudUl0ZW1bXSA9IFtdO1xuICAgIHRoaXMubWVudUNvbmZpZy5tZW51SXRlbXMuZm9yRWFjaCgobWVudUl0ZW06IE1lbnVJdGVtKSA9PiB7XG4gICAgICBpZiAobWVudUl0ZW0uaW5jbHVkZUZ1bmN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5pbmNsdWRlRnVuY3Rpb25PYnNlcnZhYmxlc1ttZW51SXRlbS50aXRsZV0gPVxuICAgICAgICAgIHRoaXMubWVudUluY2x1ZGVTZXJ2aWNlLmdldEluY2x1ZGVGdW5jdGlvbihtZW51SXRlbS5pbmNsdWRlRnVuY3Rpb24pO1xuICAgICAgfVxuXG4gICAgICBtZW51SXRlbS5zaG93ID0gdHJ1ZTtcblxuICAgICAgaWYgKHVzZXJSb2xlcy5maW5kKHVzZXJSb2xlID0+IG1lbnVJdGVtLnJvbGVzLmluY2x1ZGVzKHVzZXJSb2xlKSkpIHtcbiAgICAgICAgbWVudUl0ZW1zLnB1c2gobWVudUl0ZW0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIG1lbnVJdGVtcyA9IHRoaXMuc29ydE1lbnVJdGVtcyhtZW51SXRlbXMpO1xuICAgIHRoaXMuYXBwZW5kRG9zc2llclN1Yk1lbnVJdGVtcyhtZW51SXRlbXMpLnN1YnNjcmliZShcbiAgICAgIHZhbHVlID0+IChtZW51SXRlbXMgPSB0aGlzLmFwcGx5TWVudVJvbGVTZWN1cml0eSh2YWx1ZSkpXG4gICAgKTtcblxuICAgIGlmICh0aGlzLmVuYWJsZU9iamVjdE1hbmFnZW1lbnQpIHtcbiAgICAgIHRoaXMuYXBwZW5kT2JqZWN0c1N1Yk1lbnVJdGVtcyhtZW51SXRlbXMpLnN1YnNjcmliZShcbiAgICAgICAgdmFsdWUgPT4gKG1lbnVJdGVtcyA9IHRoaXMuYXBwbHlNZW51Um9sZVNlY3VyaXR5KHZhbHVlKSlcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBtZW51SXRlbXM7XG4gIH1cblxuICBwcml2YXRlIHNvcnRNZW51SXRlbXMobWVudUl0ZW1zOiBNZW51SXRlbVtdKTogTWVudUl0ZW1bXSB7XG4gICAgcmV0dXJuIG1lbnVJdGVtcy5zb3J0KChhLCBiKSA9PiBhLnNlcXVlbmNlIC0gYi5zZXF1ZW5jZSk7XG4gIH1cblxuICBwcml2YXRlIGFwcGVuZERvc3NpZXJTdWJNZW51SXRlbXMobWVudUl0ZW1zOiBNZW51SXRlbVtdKTogT2JzZXJ2YWJsZTxNZW51SXRlbVtdPiB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZXIgPT4ge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ2FwcGVuZERvc3NpZXJTdWJNZW51SXRlbXMnKTtcbiAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlLmdldEFsbERlZmluaXRpb25zKCkuc3Vic2NyaWJlKGRlZmluaXRpb25zID0+IHtcbiAgICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgLi4uZGVmaW5pdGlvbnMuY29udGVudC5tYXAoZGVmaW5pdGlvbiA9PlxuICAgICAgICAgICAgdGhpcy5kb2N1bWVudFNlcnZpY2UuZ2V0Q2FzZVNldHRpbmdzKGRlZmluaXRpb24/LmlkPy5uYW1lKVxuICAgICAgICAgICksXG4gICAgICAgIF0pXG4gICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKGFsbENhc2VTZXR0aW5ncyA9PiB7XG4gICAgICAgICAgICBjb25zdCBvcGVuRG9jdW1lbnRDb3VudE1hcCA9XG4gICAgICAgICAgICAgICF0aGlzLmRpc2FibGVDYXNlQ291bnQgJiYgdGhpcy5nZXRPcGVuRG9jdW1lbnRDb3VudE1hcChkZWZpbml0aW9ucyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGRvc3NpZXJNZW51SXRlbXM6IE1lbnVJdGVtW10gPSBkZWZpbml0aW9ucy5jb250ZW50Lm1hcCgoZGVmaW5pdGlvbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgY2FzZVNldHRpbmdzID0gYWxsQ2FzZVNldHRpbmdzPy5maW5kKFxuICAgICAgICAgICAgICAgIHNldHRpbmcgPT4gc2V0dGluZy5uYW1lID09PSBkZWZpbml0aW9uLmlkLm5hbWVcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGxpbms6IFsnL2Rvc3NpZXJzLycgKyBkZWZpbml0aW9uLmlkLm5hbWVdLFxuICAgICAgICAgICAgICAgIHRpdGxlOiBkZWZpbml0aW9uLnNjaGVtYS50aXRsZSxcbiAgICAgICAgICAgICAgICBpY29uQ2xhc3M6ICdpY29uIG1kaSBtZGktZG90LWNpcmNsZScsXG4gICAgICAgICAgICAgICAgc2VxdWVuY2U6IGluZGV4LFxuICAgICAgICAgICAgICAgIHNob3c6IHRydWUsXG4gICAgICAgICAgICAgICAgLi4uKCF0aGlzLmRpc2FibGVDYXNlQ291bnQgJiZcbiAgICAgICAgICAgICAgICAgIGNhc2VTZXR0aW5ncz8uY2FuSGF2ZUFzc2lnbmVlICYmIHtcbiAgICAgICAgICAgICAgICAgICAgY291bnQkOiBvcGVuRG9jdW1lbnRDb3VudE1hcC5nZXQoZGVmaW5pdGlvbi5pZC5uYW1lKSxcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICB9IGFzIE1lbnVJdGVtO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnZm91bmQgZG9zc2llck1lbnVJdGVtcycsIGRvc3NpZXJNZW51SXRlbXMpO1xuICAgICAgICAgICAgY29uc3QgbWVudUl0ZW1JbmRleCA9IG1lbnVJdGVtcy5maW5kSW5kZXgoKHt0aXRsZX0pID0+IHRpdGxlID09PSAnRG9zc2llcnMnKTtcbiAgICAgICAgICAgIGlmIChtZW51SXRlbUluZGV4ID4gMCkge1xuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyTWVudSA9IG1lbnVJdGVtc1ttZW51SXRlbUluZGV4XTtcbiAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ3VwZGF0aW5nIGRvc3NpZXJNZW51JywgZG9zc2llck1lbnUpO1xuICAgICAgICAgICAgICBkb3NzaWVyTWVudS5jaGlsZHJlbiA9IGRvc3NpZXJNZW51SXRlbXM7XG4gICAgICAgICAgICAgIG1lbnVJdGVtc1ttZW51SXRlbUluZGV4XSA9IGRvc3NpZXJNZW51O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KG1lbnVJdGVtcyk7XG4gICAgICAgICAgICB0aGlzLmRvc3NpZXJJdGVtc0FwcGVuZGVkJC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ2FwcGVuZERvc3NpZXJTdWJNZW51SXRlbXMgZmluaXNoZWQnKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBlbmRPYmplY3RzU3ViTWVudUl0ZW1zKG1lbnVJdGVtczogTWVudUl0ZW1bXSk6IE9ic2VydmFibGU8TWVudUl0ZW1bXT4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShzdWJzY3JpYmVyID0+IHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdhcHBlbmRPYmplY3RNYW5hZ2VtZW50U3ViTWVudUl0ZW1zJyk7XG4gICAgICB0aGlzLmdldEFsbE9iamVjdHMoKS5zdWJzY3JpYmUob2JqZWN0cyA9PiB7XG4gICAgICAgIGNvbnN0IHZpc2libGVPYmplY3RzID0gb2JqZWN0cy5maWx0ZXIob2JqZWN0ID0+IG9iamVjdD8uc2hvd0luRGF0YU1lbnUgIT09IGZhbHNlKTtcbiAgICAgICAgaWYgKHZpc2libGVPYmplY3RzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3Qgb2JqZWN0c01lbnVJdGVtczogTWVudUl0ZW1bXSA9IHZpc2libGVPYmplY3RzLm1hcChcbiAgICAgICAgICAgIChvYmplY3QsIGluZGV4KSA9PlxuICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgIGxpbms6IFsnL29iamVjdHMvJyArIG9iamVjdC5pZF0sXG4gICAgICAgICAgICAgICAgdGl0bGU6IG9iamVjdC50aXRsZSxcbiAgICAgICAgICAgICAgICBpY29uQ2xhc3M6ICdpY29uIG1kaSBtZGktZG90LWNpcmNsZScsXG4gICAgICAgICAgICAgICAgc2VxdWVuY2U6IGluZGV4LFxuICAgICAgICAgICAgICAgIHNob3c6IHRydWUsXG4gICAgICAgICAgICAgIH0gYXMgTWVudUl0ZW0pXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnZm91bmQgb2JqZWN0c01lbnVJdGVtcycsIG9iamVjdHNNZW51SXRlbXMpO1xuICAgICAgICAgIGNvbnN0IG1lbnVJdGVtSW5kZXggPSBtZW51SXRlbXMuZmluZEluZGV4KCh7dGl0bGV9KSA9PiB0aXRsZSA9PT0gJ09iamVjdHMnKTtcbiAgICAgICAgICBpZiAobWVudUl0ZW1JbmRleCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IG9iamVjdHNNZW51ID0gbWVudUl0ZW1zW21lbnVJdGVtSW5kZXhdO1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ3VwZGF0aW5nIG9iamVjdHNNZW51Jywgb2JqZWN0c01lbnUpO1xuICAgICAgICAgICAgb2JqZWN0c01lbnUuY2hpbGRyZW4gPSBvYmplY3RzTWVudUl0ZW1zO1xuICAgICAgICAgICAgbWVudUl0ZW1zW21lbnVJdGVtSW5kZXhdID0gb2JqZWN0c01lbnU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHN1YnNjcmliZXIubmV4dChtZW51SXRlbXMpO1xuICAgICAgICAgIHRoaXMub2JqZWN0c0l0ZW1zQXBwZW5kZWQkLm5leHQodHJ1ZSk7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ2FwcGVuZE9iamVjdHNTdWJNZW51SXRlbXMgZmluaXNoZWQnKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldE9wZW5Eb2N1bWVudENvdW50TWFwKGRlZmluaXRpb25zOiBEb2N1bWVudERlZmluaXRpb25zKTogTWFwPHN0cmluZywgU3ViamVjdDxudW1iZXI+PiB7XG4gICAgY29uc3QgY291bnRNYXAgPSBuZXcgTWFwPHN0cmluZywgU3ViamVjdDxudW1iZXI+PigpO1xuICAgIGRlZmluaXRpb25zLmNvbnRlbnQuZm9yRWFjaChkZWZpbml0aW9uID0+XG4gICAgICBjb3VudE1hcC5zZXQoZGVmaW5pdGlvbi5pZC5uYW1lLCBuZXcgU3ViamVjdDxudW1iZXI+KCkpXG4gICAgKTtcblxuICAgIHRpbWVyKDAsIDUwMDApLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmRvY3VtZW50U2VydmljZS5nZXRPcGVuRG9jdW1lbnRDb3VudCgpLnN1YnNjcmliZShvcGVuRG9jdW1lbnRDb3VudExpc3QgPT4ge1xuICAgICAgICBvcGVuRG9jdW1lbnRDb3VudExpc3QuZm9yRWFjaChvcGVuRG9jdW1lbnRDb3VudCA9PlxuICAgICAgICAgIGNvdW50TWFwXG4gICAgICAgICAgICAuZ2V0KG9wZW5Eb2N1bWVudENvdW50LmRvY3VtZW50RGVmaW5pdGlvbk5hbWUpXG4gICAgICAgICAgICAubmV4dChvcGVuRG9jdW1lbnRDb3VudC5vcGVuRG9jdW1lbnRDb3VudClcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBjb3VudE1hcDtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlNZW51Um9sZVNlY3VyaXR5KG1lbnVJdGVtczogTWVudUl0ZW1bXSk6IE1lbnVJdGVtW10ge1xuICAgIHRoaXMudXNlclByb3ZpZGVyU2VydmljZS5nZXRVc2VyU3ViamVjdCgpLnN1YnNjcmliZSh1c2VyID0+IHtcbiAgICAgIGlmICh1c2VyLnJvbGVzICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ2FwcGx5TWVudVJvbGVTZWN1cml0eScpO1xuICAgICAgICBjb25zdCB1c2VyUm9sZXMgPSB1c2VyLnJvbGVzO1xuICAgICAgICBtZW51SXRlbXMuZm9yRWFjaCgobWVudUl0ZW06IE1lbnVJdGVtKSA9PiB7XG4gICAgICAgICAgY29uc3QgYWNjZXNzID0gdGhpcy5kZXRlcm1pbmVSb2xlQWNjZXNzKG1lbnVJdGVtLCB1c2VyUm9sZXMpO1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdNZW51OiBjaGVjayByb2xlIGFjY2VzcycsIG1lbnVJdGVtLnJvbGVzLCBhY2Nlc3MpO1xuICAgICAgICAgIGlmIChtZW51SXRlbS5zaG93ICE9PSBhY2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdNZW51OiBDaGFuZ2UgYWNjZXNzJywgbWVudUl0ZW0sIGFjY2Vzcyk7XG4gICAgICAgICAgICBtZW51SXRlbS5zaG93ID0gYWNjZXNzO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG1lbnVJdGVtcztcbiAgfVxuXG4gIHByaXZhdGUgZGV0ZXJtaW5lUm9sZUFjY2VzcyhtZW51SXRlbTogTWVudUl0ZW0sIHJvbGVzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhbWVudUl0ZW0ucm9sZXMgfHwgbWVudUl0ZW0ucm9sZXMuc29tZShyb2xlID0+IHJvbGVzLmluY2x1ZGVzKHJvbGUpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWxsT2JqZWN0cygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgYCR7dGhpcy5jb25maWdTZXJ2aWNlLmNvbmZpZy52YWx0aW1vQXBpLmVuZHBvaW50VXJpfXYxL29iamVjdC9tYW5hZ2VtZW50L2NvbmZpZ3VyYXRpb25gXG4gICAgKTtcbiAgfVxufVxuIl19
|