@valtimo/components 12.19.0 → 13.0.1-next-minor.81
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/css/carbon.scss +6 -1
- package/assets/css/color.scss +11 -11
- package/assets/css/compatibility.scss +51 -3
- package/assets/css/design-tokens.css +1 -1
- package/assets/css/formio-carbon.scss +16 -0
- package/assets/css/ng-multiselect-dropdown.theme.scss +1 -1
- package/fesm2022/valtimo-components.mjs +3985 -3525
- package/fesm2022/valtimo-components.mjs.map +1 -1
- package/lib/components/alert/alert.component.d.ts.map +1 -1
- package/lib/components/auto-key-input/auto-key-input.component.d.ts +49 -0
- package/lib/components/auto-key-input/auto-key-input.component.d.ts.map +1 -0
- package/lib/components/bpmn-js-diagram/bpmn-js-diagram.component.d.ts +2 -2
- package/lib/components/bpmn-js-diagram/bpmn-js-diagram.component.d.ts.map +1 -1
- package/lib/components/breadcrumb-navigation/breadcrumb-navigation.component.d.ts.map +1 -1
- package/lib/components/breadcrumb-navigation/breadcrumb.service.d.ts +8 -8
- package/lib/components/breadcrumb-navigation/breadcrumb.service.d.ts.map +1 -1
- package/lib/components/camunda/form/camunda-form.components.d.ts.map +1 -1
- package/lib/components/camunda/form/custom/camunda-custom-form.component.d.ts.map +1 -1
- package/lib/components/camunda/form/generated/camunda-generated-form.component.d.ts.map +1 -1
- package/lib/components/camunda/form/generated/formfield/boolean/camunda-boolean-formfield.component.d.ts.map +1 -1
- package/lib/components/camunda/form/generated/formfield/camunda-formfield-generator.directive.d.ts.map +1 -1
- package/lib/components/camunda/form/generated/formfield/choicefield/camunda-choicefield-formfield.component.d.ts.map +1 -1
- package/lib/components/camunda/form/generated/formfield/date/camunda-date-formfield.component.d.ts.map +1 -1
- package/lib/components/camunda/form/generated/formfield/enum/camunda-enum-formfield.component.d.ts.map +1 -1
- package/lib/components/camunda/form/generated/formfield/long/camunda-long-formfield.component.d.ts.map +1 -1
- package/lib/components/camunda/form/generated/formfield/string/camunda-string-formfield.component.d.ts.map +1 -1
- package/lib/components/camunda/form/generated/formfield/textarea/camunda-textarea-formfield.component.d.ts.map +1 -1
- package/lib/components/camunda/form/generated/formfield/validation/camunda-formfield-validation.component.d.ts.map +1 -1
- package/lib/components/carbon-list/CarbonListFilterPipe.directive.d.ts.map +1 -1
- package/lib/components/carbon-list/carbon-list.component.d.ts +3 -2
- package/lib/components/carbon-list/carbon-list.component.d.ts.map +1 -1
- package/lib/components/carbon-list/carbon-list.module.d.ts +8 -9
- package/lib/components/carbon-list/carbon-list.module.d.ts.map +1 -1
- package/lib/components/carbon-list/no-results/carbon-no-results.component.d.ts.map +1 -1
- package/lib/components/carbon-list/tags-modal/tags-modal.component.d.ts.map +1 -1
- package/lib/components/case-tags-selector/case-tags-selector.component.d.ts +4 -4
- package/lib/components/case-tags-selector/case-tags-selector.component.d.ts.map +1 -1
- package/lib/components/confirmation-modal/confirmation-modal.component.d.ts +1 -1
- package/lib/components/confirmation-modal/confirmation-modal.component.d.ts.map +1 -1
- package/lib/components/confirmation-modal/confirmation-modal.module.d.ts +2 -2
- package/lib/components/confirmation-modal/confirmation-modal.module.d.ts.map +1 -1
- package/lib/components/data-list/data-list.component.d.ts.map +1 -1
- package/lib/components/date-picker/date-picker.component.d.ts +1 -1
- package/lib/components/date-picker/date-picker.component.d.ts.map +1 -1
- package/lib/components/dropzone/dropzone.component.d.ts.map +1 -1
- package/lib/components/editor/editor.component.d.ts.map +1 -1
- package/lib/components/editor/editor.module.d.ts +2 -2
- package/lib/components/editor/editor.service.d.ts.map +1 -1
- package/lib/components/expansion-panel/expansion-panel.component.d.ts.map +1 -1
- package/lib/components/field-auto-focus/field-auto-focus.directive.d.ts.map +1 -1
- package/lib/components/file-size/file-size.pipe.d.ts.map +1 -1
- package/lib/components/filter-sidebar/filter-sidebar.component.d.ts.map +1 -1
- package/lib/components/form/form.component.d.ts.map +1 -1
- package/lib/components/form-io/{form-io.component.d.ts → components/form-io/form-io.component.d.ts} +11 -9
- package/lib/components/form-io/components/form-io/form-io.component.d.ts.map +1 -0
- package/lib/components/form-io/components/form-io-builder/form-io-builder.component.d.ts +36 -0
- package/lib/components/form-io/components/form-io-builder/form-io-builder.component.d.ts.map +1 -0
- package/lib/components/form-io/components/form-io-builder/form-io-builder.utils.d.ts +9 -0
- package/lib/components/form-io/components/form-io-builder/form-io-builder.utils.d.ts.map +1 -0
- package/lib/components/form-io/components/form-io-currency/currency-edit-form.d.ts.map +1 -0
- package/lib/components/form-io/{form-io-currency → components/form-io-currency}/currency.component.d.ts +1 -1
- package/lib/components/form-io/components/form-io-currency/currency.component.d.ts.map +1 -0
- package/lib/components/form-io/components/form-io-currency/currency.formio.d.ts.map +1 -0
- package/lib/components/form-io/components/form-io-current-user/form-io-current-user-edit-form.d.ts.map +1 -0
- package/lib/components/form-io/{form-io-current-user → components/form-io-current-user}/form-io-current-user.component.d.ts +1 -1
- package/lib/components/form-io/components/form-io-current-user/form-io-current-user.component.d.ts.map +1 -0
- package/lib/components/form-io/components/form-io-current-user/form-io-current-user.formio.d.ts.map +1 -0
- package/lib/components/form-io/{form-io-dummy → components/form-io-dummy}/dummy.component.d.ts +1 -1
- package/lib/components/form-io/components/form-io-dummy/dummy.component.d.ts.map +1 -0
- package/lib/components/form-io/components/form-io-dummy/dummy.formio.d.ts.map +1 -0
- package/lib/components/form-io/{form-io-iban → components/form-io-iban}/iban.component.d.ts +1 -1
- package/lib/components/form-io/components/form-io-iban/iban.component.d.ts.map +1 -0
- package/lib/components/form-io/components/form-io-iban/iban.formio.d.ts.map +1 -0
- package/lib/components/form-io/components/form-io-iban/iban.validators.d.ts.map +1 -0
- package/lib/components/form-io/components/form-io-resource-selector/form-io-resource-selector.formio.d.ts.map +1 -0
- package/lib/components/form-io/components/form-io-uploader/form-io-uploader-edit-form.d.ts.map +1 -0
- package/lib/components/form-io/{form-io-uploader → components/form-io-uploader}/form-io-uploader.component.d.ts +3 -3
- package/lib/components/form-io/components/form-io-uploader/form-io-uploader.component.d.ts.map +1 -0
- package/lib/components/form-io/components/form-io-uploader/form-io-uploader.formio.d.ts.map +1 -0
- package/lib/components/form-io/components/formio-value-resolver-selector/formio-value-resolver-selector-edit-form.d.ts.map +1 -0
- package/lib/components/form-io/{formio-value-resolver-selector → components/formio-value-resolver-selector}/formio-value-resolver-selector.component.d.ts +4 -2
- package/lib/components/form-io/components/formio-value-resolver-selector/formio-value-resolver-selector.component.d.ts.map +1 -0
- package/lib/components/form-io/components/formio-value-resolver-selector/formio-value-resolver-selector.formio.d.ts.map +1 -0
- package/lib/components/form-io/form-io.module.d.ts +8 -8
- package/lib/components/form-io/formio-config.d.ts +1 -1
- package/lib/components/form-io/formio-config.d.ts.map +1 -1
- package/lib/components/form-io/services/form-io-state.service.d.ts +4 -0
- package/lib/components/form-io/services/form-io-state.service.d.ts.map +1 -1
- package/lib/components/form-io/services/form-io-translation.service.d.ts +11 -0
- package/lib/components/form-io/services/form-io-translation.service.d.ts.map +1 -0
- package/lib/components/form-io/services/form-io.tags.service.d.ts +11 -0
- package/lib/components/form-io/services/form-io.tags.service.d.ts.map +1 -0
- package/lib/components/form-io/services/index.d.ts +6 -0
- package/lib/components/form-io/services/index.d.ts.map +1 -0
- package/lib/components/input/input.component.d.ts +10 -2
- package/lib/components/input/input.component.d.ts.map +1 -1
- package/lib/components/input/input.module.d.ts +2 -3
- package/lib/components/input/input.module.d.ts.map +1 -1
- package/lib/components/input-label/input-label.component.d.ts +2 -1
- package/lib/components/input-label/input-label.component.d.ts.map +1 -1
- package/lib/components/json-editor/json-editor.component.d.ts +45 -0
- package/lib/components/json-editor/json-editor.component.d.ts.map +1 -0
- package/lib/components/left-sidebar/left-sidebar.component.d.ts +3 -2
- package/lib/components/left-sidebar/left-sidebar.component.d.ts.map +1 -1
- package/lib/components/left-sidebar/left-sidebar.module.d.ts +2 -2
- package/lib/components/left-sidebar/left-sidebar.module.d.ts.map +1 -1
- package/lib/components/list-column-view/list-column-view.component.d.ts +29 -0
- package/lib/components/list-column-view/list-column-view.component.d.ts.map +1 -0
- package/lib/components/menu/menu-item-text.component.d.ts +1 -1
- package/lib/components/menu/menu-item-text.component.d.ts.map +1 -1
- package/lib/components/menu/services/index.d.ts +2 -0
- package/lib/components/menu/services/index.d.ts.map +1 -0
- package/lib/components/menu/{menu.service.d.ts → services/menu.service.d.ts} +20 -22
- package/lib/components/menu/services/menu.service.d.ts.map +1 -0
- package/lib/components/modal/modal.component.d.ts.map +1 -1
- package/lib/components/multi-input/carbon-multi-input.component.d.ts +14 -5
- package/lib/components/multi-input/carbon-multi-input.component.d.ts.map +1 -1
- package/lib/components/multi-input/carbon-multi-input.module.d.ts +10 -11
- package/lib/components/multi-input/carbon-multi-input.module.d.ts.map +1 -1
- package/lib/components/multi-input/components/key-value/key-value.component.d.ts.map +1 -1
- package/lib/components/multi-input/components/key-value-path-selector/key-value-path-selector.component.d.ts +3 -3
- package/lib/components/multi-input/components/key-value-path-selector/key-value-path-selector.component.d.ts.map +1 -1
- package/lib/components/multi-input/components/value-path-selector-dropdown-value/value-path-selector-dropdown-value.component.d.ts +3 -3
- package/lib/components/multi-input/components/value-path-selector-dropdown-value/value-path-selector-dropdown-value.component.d.ts.map +1 -1
- package/lib/components/multi-input/components/value-path-selector-value/value-path-selector-value.component.d.ts +3 -3
- package/lib/components/multi-input/components/value-path-selector-value/value-path-selector-value.component.d.ts.map +1 -1
- package/lib/components/multi-input-form/multi-input-form.component.d.ts +3 -0
- package/lib/components/multi-input-form/multi-input-form.component.d.ts.map +1 -1
- package/lib/components/multi-input-form/multi-input-form.module.d.ts +2 -2
- package/lib/components/multi-input-form/multi-input-form.module.d.ts.map +1 -1
- package/lib/components/multiselect-dropdown/multiselect-dropdown.component.d.ts.map +1 -1
- package/lib/components/page-header/page-header.component.d.ts.map +1 -1
- package/lib/components/page-header/page-header.module.d.ts +2 -2
- package/lib/components/page-subtitle/page-subtitle.component.d.ts.map +1 -1
- package/lib/components/page-title/page-title.component.d.ts +1 -1
- package/lib/components/page-title/page-title.component.d.ts.map +1 -1
- package/lib/components/paragraph/paragraph.component.d.ts.map +1 -1
- package/lib/components/progress-bar/progress-bar.component.d.ts.map +1 -1
- package/lib/components/prompt/prompt.component.d.ts +0 -4
- package/lib/components/prompt/prompt.component.d.ts.map +1 -1
- package/lib/components/prompt/prompt.module.d.ts +3 -4
- package/lib/components/prompt/prompt.module.d.ts.map +1 -1
- package/lib/components/quick-search/modal/quick-search-modal.component.d.ts +25 -0
- package/lib/components/quick-search/modal/quick-search-modal.component.d.ts.map +1 -0
- package/lib/components/quick-search/quick-search.component.d.ts +32 -0
- package/lib/components/quick-search/quick-search.component.d.ts.map +1 -0
- package/lib/components/radio/radio.component.d.ts.map +1 -1
- package/lib/components/radio/radio.module.d.ts +2 -3
- package/lib/components/radio/radio.module.d.ts.map +1 -1
- package/lib/components/render-in-body/render-in-body.component.d.ts +14 -0
- package/lib/components/render-in-body/render-in-body.component.d.ts.map +1 -0
- package/lib/components/right-sidebar/right-sidebar.component.d.ts +1 -1
- package/lib/components/right-sidebar/right-sidebar.component.d.ts.map +1 -1
- package/lib/components/search-fields/search-fields.component.d.ts +15 -7
- package/lib/components/search-fields/search-fields.component.d.ts.map +1 -1
- package/lib/components/searchable-dropdown/searchable-dropdown.component.d.ts.map +1 -1
- package/lib/components/searchable-dropdown-select/searchable-dropdown-select.component.d.ts.map +1 -1
- package/lib/components/select/select.component.d.ts +11 -2
- package/lib/components/select/select.component.d.ts.map +1 -1
- package/lib/components/spinner/spinner.component.d.ts.map +1 -1
- package/lib/components/status-selector/status-selector.component.d.ts +4 -4
- package/lib/components/status-selector/status-selector.component.d.ts.map +1 -1
- package/lib/components/stepper/stepper-container/stepper-container.component.d.ts.map +1 -1
- package/lib/components/stepper/stepper-content/stepper-content.component.d.ts.map +1 -1
- package/lib/components/stepper/stepper-footer/stepper-footer.component.d.ts.map +1 -1
- package/lib/components/stepper/stepper-footer-step/stepper-footer-step.component.d.ts.map +1 -1
- package/lib/components/stepper/stepper-header/stepper-header.component.d.ts.map +1 -1
- package/lib/components/stepper/stepper-step/stepper-step.component.d.ts.map +1 -1
- package/lib/components/stepper/stepper.module.d.ts +2 -3
- package/lib/components/stepper/stepper.module.d.ts.map +1 -1
- package/lib/components/table/table.component.d.ts.map +1 -1
- package/lib/components/table/table.module.d.ts +1 -1
- package/lib/components/timeline/timeline.component.d.ts +7 -3
- package/lib/components/timeline/timeline.component.d.ts.map +1 -1
- package/lib/components/timeline/timeline.module.d.ts +2 -1
- package/lib/components/timeline/timeline.module.d.ts.map +1 -1
- package/lib/components/tooltip-icon/tooltip-icon.component.d.ts +0 -3
- package/lib/components/tooltip-icon/tooltip-icon.component.d.ts.map +1 -1
- package/lib/components/tooltip-icon/tooltip-icon.module.d.ts +0 -3
- package/lib/components/tooltip-icon/tooltip-icon.module.d.ts.map +1 -1
- package/lib/components/topbar/topbar.component.d.ts +1 -1
- package/lib/components/topbar/topbar.component.d.ts.map +1 -1
- package/lib/components/uploader/uploader-drag-drop.directive.d.ts.map +1 -1
- package/lib/components/uploader/uploader.component.d.ts.map +1 -1
- package/lib/components/v-modal/modal.component.d.ts.map +1 -1
- package/lib/components/v-modal/modal.module.d.ts +2 -6
- package/lib/components/v-modal/modal.module.d.ts.map +1 -1
- package/lib/components/value-path-selector/value-path-selector.component.d.ts +16 -13
- package/lib/components/value-path-selector/value-path-selector.component.d.ts.map +1 -1
- package/lib/components/version/version.service.d.ts +1 -1
- package/lib/components/view-content/type-converters/booleanTypeConverter.d.ts +1 -0
- package/lib/components/view-content/type-converters/booleanTypeConverter.d.ts.map +1 -1
- package/lib/components/view-content/type-converters/currencyTypeConverter.d.ts +1 -0
- package/lib/components/view-content/type-converters/currencyTypeConverter.d.ts.map +1 -1
- package/lib/components/view-content/type-converters/dateTimeTypeConverter.d.ts +1 -0
- package/lib/components/view-content/type-converters/dateTimeTypeConverter.d.ts.map +1 -1
- package/lib/components/view-content/type-converters/dateTypeConverter.d.ts +1 -0
- package/lib/components/view-content/type-converters/dateTypeConverter.d.ts.map +1 -1
- package/lib/components/view-content/type-converters/enumTypeConverter.d.ts +1 -0
- package/lib/components/view-content/type-converters/enumTypeConverter.d.ts.map +1 -1
- package/lib/components/view-content/type-converters/linkTypeConverter.d.ts +7 -0
- package/lib/components/view-content/type-converters/linkTypeConverter.d.ts.map +1 -0
- package/lib/components/view-content/type-converters/numberTypeConverter.d.ts +1 -0
- package/lib/components/view-content/type-converters/numberTypeConverter.d.ts.map +1 -1
- package/lib/components/view-content/type-converters/percentTypeConverter.d.ts +1 -0
- package/lib/components/view-content/type-converters/percentTypeConverter.d.ts.map +1 -1
- package/lib/components/view-content/type-converters/relatedFilesTypeConverter.d.ts +1 -0
- package/lib/components/view-content/type-converters/relatedFilesTypeConverter.d.ts.map +1 -1
- package/lib/components/view-content/type-converters/stringReplaceUnderscoreTypeConverter.d.ts +1 -0
- package/lib/components/view-content/type-converters/stringReplaceUnderscoreTypeConverter.d.ts.map +1 -1
- package/lib/components/view-content/type-converters/stringTypeConverter.d.ts +1 -0
- package/lib/components/view-content/type-converters/stringTypeConverter.d.ts.map +1 -1
- package/lib/components/view-content/type-converters/type-converters.model.d.ts +1 -0
- package/lib/components/view-content/type-converters/type-converters.model.d.ts.map +1 -1
- package/lib/components/view-content/view-content.service.d.ts +2 -1
- package/lib/components/view-content/view-content.service.d.ts.map +1 -1
- package/lib/components/webcam/webcam.component.d.ts.map +1 -1
- package/lib/components/widget/widget.component.d.ts.map +1 -1
- package/lib/constants/carbon.constants.d.ts +0 -1
- package/lib/constants/carbon.constants.d.ts.map +1 -1
- package/lib/constants/index.d.ts +1 -0
- package/lib/constants/index.d.ts.map +1 -1
- package/lib/constants/quick-search.constants.d.ts +4 -0
- package/lib/constants/quick-search.constants.d.ts.map +1 -0
- package/lib/directives/context-menu.directive.d.ts +20 -0
- package/lib/directives/context-menu.directive.d.ts.map +1 -0
- package/lib/directives/{command-click/command-click.directive.d.ts → ctrl-click/ctrl-click.directive.d.ts} +2 -2
- package/lib/directives/ctrl-click/ctrl-click.directive.d.ts.map +1 -0
- package/lib/directives/digit-only/digit-only.directive.d.ts.map +1 -1
- package/lib/directives/fit-page/fit-page.directive.d.ts +6 -2
- package/lib/directives/fit-page/fit-page.directive.d.ts.map +1 -1
- package/lib/directives/muuri/muuri-directive.module.d.ts +10 -0
- package/lib/directives/muuri/muuri-directive.module.d.ts.map +1 -0
- package/lib/directives/muuri/muuri-item.component.d.ts +8 -0
- package/lib/directives/muuri/muuri-item.component.d.ts.map +1 -0
- package/lib/directives/muuri/muuri.directive.d.ts +27 -0
- package/lib/directives/muuri/muuri.directive.d.ts.map +1 -0
- package/lib/directives/observe-size/observe-size.directive.d.ts +16 -0
- package/lib/directives/observe-size/observe-size.directive.d.ts.map +1 -0
- package/lib/directives/read-only.directive.d.ts +15 -0
- package/lib/directives/read-only.directive.d.ts.map +1 -0
- package/lib/directives/remove-classnames/remove-classnames.directive.d.ts.map +1 -1
- package/lib/directives/render-in-page-header/render-in-page-header.directive.d.ts +1 -1
- package/lib/directives/render-page-header/render-page-header.directive.d.ts +1 -1
- package/lib/directives/render-page-subtitle/render-page-subtitle.directive.d.ts +1 -1
- package/lib/directives/tooltip/tooltip.component.d.ts.map +1 -1
- package/lib/directives/valtimo-cds-modal/valtimo-cds-modal.directive.d.ts +3 -3
- package/lib/directives/valtimo-cds-modal/valtimo-cds-modal.directive.d.ts.map +1 -1
- package/lib/directives/valtimo-cds-overflow-button/valtimo-cds-overflow-button.directive.d.ts +3 -2
- package/lib/directives/valtimo-cds-overflow-button/valtimo-cds-overflow-button.directive.d.ts.map +1 -1
- package/lib/interfaces/index.d.ts +2 -0
- package/lib/interfaces/index.d.ts.map +1 -0
- package/lib/interfaces/quick-search-service.interface.d.ts +12 -0
- package/lib/interfaces/quick-search-service.interface.d.ts.map +1 -0
- package/lib/models/carbon-list.model.d.ts +3 -2
- package/lib/models/carbon-list.model.d.ts.map +1 -1
- package/lib/models/form-io.model.d.ts +86 -5
- package/lib/models/form-io.model.d.ts.map +1 -1
- package/lib/models/index.d.ts +4 -1
- package/lib/models/index.d.ts.map +1 -1
- package/lib/models/list-hidden-column.model.d.ts +8 -0
- package/lib/models/list-hidden-column.model.d.ts.map +1 -0
- package/lib/models/menu.model.d.ts +5 -0
- package/lib/models/menu.model.d.ts.map +1 -0
- package/lib/models/quick-search.model.d.ts +5 -0
- package/lib/models/quick-search.model.d.ts.map +1 -0
- package/lib/models/value-path-selector.model.d.ts +1 -2
- package/lib/models/value-path-selector.model.d.ts.map +1 -1
- package/lib/modules/custom-formio-component/create-custom-component.d.ts +45 -39
- package/lib/modules/custom-formio-component/create-custom-component.d.ts.map +1 -1
- package/lib/modules/custom-formio-component/elements.common.d.ts +1 -1
- package/lib/modules/custom-formio-component/elements.common.d.ts.map +1 -1
- package/lib/modules/custom-formio-component/index.d.ts +0 -1
- package/lib/modules/custom-formio-component/index.d.ts.map +1 -1
- package/lib/modules/custom-formio-component/register-custom-component.d.ts +3 -4
- package/lib/modules/custom-formio-component/register-custom-component.d.ts.map +1 -1
- package/lib/pipes/ellipsis.pipe.d.ts.map +1 -1
- package/lib/pipes/menu-item-translation.pipe.d.ts +1 -1
- package/lib/services/choice-field.service.d.ts +1 -1
- package/lib/services/index.d.ts +7 -6
- package/lib/services/index.d.ts.map +1 -1
- package/lib/services/key-state.service.d.ts.map +1 -1
- package/lib/services/page-header.service.d.ts +1 -1
- package/lib/services/page-title.service.d.ts +2 -1
- package/lib/services/page-title.service.d.ts.map +1 -1
- package/lib/services/prompt.service.d.ts +0 -13
- package/lib/services/prompt.service.d.ts.map +1 -1
- package/lib/services/quick-search-state.service.d.ts +18 -0
- package/lib/services/quick-search-state.service.d.ts.map +1 -0
- package/lib/services/shell.service.d.ts +1 -1
- package/lib/services/valtimo-modal.service.d.ts +3 -3
- package/lib/services/valtimo-modal.service.d.ts.map +1 -1
- package/lib/services/value-path-selector.service.d.ts +9 -9
- package/lib/services/value-path-selector.service.d.ts.map +1 -1
- package/lib/utils/carbon.utils.d.ts +3 -0
- package/lib/utils/carbon.utils.d.ts.map +1 -0
- package/lib/utils/index.d.ts +2 -0
- package/lib/utils/index.d.ts.map +1 -0
- package/package.json +22 -23
- package/public_api.d.ts +33 -41
- package/public_api.d.ts.map +1 -1
- package/esm2022/lib/components/alert/alert.component.mjs +0 -137
- package/esm2022/lib/components/alert/alert.module.mjs +0 -33
- package/esm2022/lib/components/alert/alert.service.mjs +0 -80
- package/esm2022/lib/components/bpmn-js-diagram/bpmn-js-diagram.component.mjs +0 -168
- package/esm2022/lib/components/bpmn-js-diagram/bpmn-js-diagram.module.mjs +0 -33
- package/esm2022/lib/components/breadcrumb-navigation/breadcrumb-navigation.component.mjs +0 -57
- package/esm2022/lib/components/breadcrumb-navigation/breadcrumb-navigation.module.mjs +0 -36
- package/esm2022/lib/components/breadcrumb-navigation/breadcrumb.service.mjs +0 -127
- package/esm2022/lib/components/button/button.component.mjs +0 -99
- package/esm2022/lib/components/button/button.module.mjs +0 -37
- package/esm2022/lib/components/camunda/form/camunda-form.components.mjs +0 -41
- package/esm2022/lib/components/camunda/form/camunda-form.module.mjs +0 -35
- package/esm2022/lib/components/camunda/form/custom/camunda-custom-form.component.mjs +0 -40
- package/esm2022/lib/components/camunda/form/custom/camunda-custom-form.module.mjs +0 -33
- package/esm2022/lib/components/camunda/form/generated/camunda-generated-form.component.mjs +0 -67
- package/esm2022/lib/components/camunda/form/generated/camunda-generated-form.module.mjs +0 -63
- package/esm2022/lib/components/camunda/form/generated/formfield/boolean/camunda-boolean-formfield.component.mjs +0 -30
- package/esm2022/lib/components/camunda/form/generated/formfield/camunda-formfield-generator.directive.mjs +0 -63
- package/esm2022/lib/components/camunda/form/generated/formfield/camunda-formfield.service.mjs +0 -67
- package/esm2022/lib/components/camunda/form/generated/formfield/choicefield/camunda-choicefield-formfield.component.mjs +0 -41
- package/esm2022/lib/components/camunda/form/generated/formfield/date/camunda-date-formfield.component.mjs +0 -66
- package/esm2022/lib/components/camunda/form/generated/formfield/enum/camunda-enum-formfield.component.mjs +0 -33
- package/esm2022/lib/components/camunda/form/generated/formfield/formfield.model.mjs +0 -17
- package/esm2022/lib/components/camunda/form/generated/formfield/long/camunda-long-formfield.component.mjs +0 -30
- package/esm2022/lib/components/camunda/form/generated/formfield/string/camunda-string-formfield.component.mjs +0 -30
- package/esm2022/lib/components/camunda/form/generated/formfield/textarea/camunda-textarea-formfield.component.mjs +0 -30
- package/esm2022/lib/components/camunda/form/generated/formfield/validation/camunda-formfield-validation.component.mjs +0 -35
- package/esm2022/lib/components/camunda/form/generated/formfield/validation/date.validators.mjs +0 -55
- package/esm2022/lib/components/carbon-list/CarbonListFilterPipe.directive.mjs +0 -34
- package/esm2022/lib/components/carbon-list/carbon-list.component.mjs +0 -603
- package/esm2022/lib/components/carbon-list/carbon-list.module.mjs +0 -103
- package/esm2022/lib/components/carbon-list/no-results/carbon-no-results.component.mjs +0 -71
- package/esm2022/lib/components/carbon-list/services/carbon-list-drag-and-drop.service.mjs +0 -165
- package/esm2022/lib/components/carbon-list/services/index.mjs +0 -17
- package/esm2022/lib/components/carbon-list/tags-modal/tags-modal.component.mjs +0 -35
- package/esm2022/lib/components/card/card.component.mjs +0 -34
- package/esm2022/lib/components/card/card.module.mjs +0 -33
- package/esm2022/lib/components/case-tags-selector/case-tags-selector.component.mjs +0 -80
- package/esm2022/lib/components/confirmation-modal/confirmation-modal.component.mjs +0 -119
- package/esm2022/lib/components/confirmation-modal/confirmation-modal.module.mjs +0 -50
- package/esm2022/lib/components/data-list/data-list.component.mjs +0 -31
- package/esm2022/lib/components/data-list/data-list.module.mjs +0 -33
- package/esm2022/lib/components/date-picker/date-picker.component.mjs +0 -166
- package/esm2022/lib/components/date-picker/date-picker.module.mjs +0 -40
- package/esm2022/lib/components/dropzone/dropzone.component.mjs +0 -168
- package/esm2022/lib/components/dropzone/dropzone.module.mjs +0 -37
- package/esm2022/lib/components/editor/editor.component.mjs +0 -189
- package/esm2022/lib/components/editor/editor.module.mjs +0 -34
- package/esm2022/lib/components/editor/editor.service.mjs +0 -87
- package/esm2022/lib/components/expansion-panel/expansion-panel.component.mjs +0 -41
- package/esm2022/lib/components/expansion-panel/expansion-panel.module.mjs +0 -35
- package/esm2022/lib/components/field-auto-focus/field-auto-focus.directive.mjs +0 -36
- package/esm2022/lib/components/field-auto-focus/field-auto-focus.module.mjs +0 -33
- package/esm2022/lib/components/file-size/file-size.module.mjs +0 -33
- package/esm2022/lib/components/file-size/file-size.pipe.mjs +0 -42
- package/esm2022/lib/components/filter-sidebar/filter-sidebar.component.mjs +0 -46
- package/esm2022/lib/components/filter-sidebar/filter-sidebar.module.mjs +0 -33
- package/esm2022/lib/components/form/form.component.mjs +0 -146
- package/esm2022/lib/components/form/form.module.mjs +0 -33
- package/esm2022/lib/components/form-io/form-io-builder.component.mjs +0 -82
- package/esm2022/lib/components/form-io/form-io-builder.utils.mjs +0 -53
- package/esm2022/lib/components/form-io/form-io-currency/currency-edit-form.mjs +0 -96
- package/esm2022/lib/components/form-io/form-io-currency/currency.component.mjs +0 -108
- package/esm2022/lib/components/form-io/form-io-currency/currency.formio.mjs +0 -24
- package/esm2022/lib/components/form-io/form-io-current-user/form-io-current-user-edit-form.mjs +0 -64
- package/esm2022/lib/components/form-io/form-io-current-user/form-io-current-user.component.mjs +0 -41
- package/esm2022/lib/components/form-io/form-io-current-user/form-io-current-user.formio.mjs +0 -34
- package/esm2022/lib/components/form-io/form-io-dummy/dummy.component.mjs +0 -27
- package/esm2022/lib/components/form-io/form-io-dummy/dummy.formio.mjs +0 -20
- package/esm2022/lib/components/form-io/form-io-iban/iban.component.mjs +0 -61
- package/esm2022/lib/components/form-io/form-io-iban/iban.formio.mjs +0 -22
- package/esm2022/lib/components/form-io/form-io-iban/iban.validators.mjs +0 -26
- package/esm2022/lib/components/form-io/form-io-resource-selector/form-io-resource-selector.formio.mjs +0 -84
- package/esm2022/lib/components/form-io/form-io-uploader/form-io-uploader-edit-form.mjs +0 -115
- package/esm2022/lib/components/form-io/form-io-uploader/form-io-uploader.component.mjs +0 -93
- package/esm2022/lib/components/form-io/form-io-uploader/form-io-uploader.formio.mjs +0 -49
- package/esm2022/lib/components/form-io/form-io.component.mjs +0 -237
- package/esm2022/lib/components/form-io/form-io.module.mjs +0 -127
- package/esm2022/lib/components/form-io/formio-config.mjs +0 -27
- package/esm2022/lib/components/form-io/formio-value-resolver-selector/formio-value-resolver-selector-edit-form.mjs +0 -19
- package/esm2022/lib/components/form-io/formio-value-resolver-selector/formio-value-resolver-selector.component.mjs +0 -57
- package/esm2022/lib/components/form-io/formio-value-resolver-selector/formio-value-resolver-selector.formio.mjs +0 -42
- package/esm2022/lib/components/form-io/services/form-io-dom.service.mjs +0 -38
- package/esm2022/lib/components/form-io/services/form-io-local-storage.service.mjs +0 -68
- package/esm2022/lib/components/form-io/services/form-io-state.service.mjs +0 -69
- package/esm2022/lib/components/input/input.component.mjs +0 -176
- package/esm2022/lib/components/input/input.module.mjs +0 -59
- package/esm2022/lib/components/input-label/input-label.component.mjs +0 -84
- package/esm2022/lib/components/input-label/input-label.module.mjs +0 -55
- package/esm2022/lib/components/left-sidebar/left-sidebar.component.mjs +0 -129
- package/esm2022/lib/components/left-sidebar/left-sidebar.module.mjs +0 -58
- package/esm2022/lib/components/list/ListFilterPipe.directive.mjs +0 -35
- package/esm2022/lib/components/list/list.component.mjs +0 -202
- package/esm2022/lib/components/list/list.module.mjs +0 -56
- package/esm2022/lib/components/menu/menu-item-text.component.mjs +0 -54
- package/esm2022/lib/components/menu/menu-routing.module.mjs +0 -33
- package/esm2022/lib/components/menu/menu.init.mjs +0 -32
- package/esm2022/lib/components/menu/menu.module.mjs +0 -58
- package/esm2022/lib/components/menu/menu.service.mjs +0 -247
- package/esm2022/lib/components/modal/modal.component.mjs +0 -85
- package/esm2022/lib/components/modal/modal.module.mjs +0 -33
- package/esm2022/lib/components/multi-input/carbon-multi-input.component.mjs +0 -300
- package/esm2022/lib/components/multi-input/carbon-multi-input.module.mjs +0 -86
- package/esm2022/lib/components/multi-input/components/arbitrary-amount-value/arbitrary-amount-value.component.mjs +0 -63
- package/esm2022/lib/components/multi-input/components/arbitrary-amount-value/index.mjs +0 -17
- package/esm2022/lib/components/multi-input/components/index.mjs +0 -23
- package/esm2022/lib/components/multi-input/components/key-dropdown-value/index.mjs +0 -17
- package/esm2022/lib/components/multi-input/components/key-dropdown-value/key-dropdown-value.component.mjs +0 -71
- package/esm2022/lib/components/multi-input/components/key-value/index.mjs +0 -17
- package/esm2022/lib/components/multi-input/components/key-value/key-value.component.mjs +0 -62
- package/esm2022/lib/components/multi-input/components/key-value-path-selector/index.mjs +0 -17
- package/esm2022/lib/components/multi-input/components/key-value-path-selector/key-value-path-selector.component.mjs +0 -82
- package/esm2022/lib/components/multi-input/components/single-value/index.mjs +0 -17
- package/esm2022/lib/components/multi-input/components/single-value/single-value.component.mjs +0 -49
- package/esm2022/lib/components/multi-input/components/value-path-selector-dropdown-value/index.mjs +0 -17
- package/esm2022/lib/components/multi-input/components/value-path-selector-dropdown-value/value-path-selector-dropdown-value.component.mjs +0 -92
- package/esm2022/lib/components/multi-input/components/value-path-selector-value/index.mjs +0 -17
- package/esm2022/lib/components/multi-input/components/value-path-selector-value/value-path-selector-value.component.mjs +0 -82
- package/esm2022/lib/components/multi-input-form/default-value.pipe.mjs +0 -33
- package/esm2022/lib/components/multi-input-form/multi-input-form.component.mjs +0 -201
- package/esm2022/lib/components/multi-input-form/multi-input-form.module.mjs +0 -58
- package/esm2022/lib/components/multiselect-dropdown/multiselect-dropdown.component.mjs +0 -52
- package/esm2022/lib/components/multiselect-dropdown/multiselect-dropdown.module.mjs +0 -35
- package/esm2022/lib/components/page/page-container/page-container.component.mjs +0 -29
- package/esm2022/lib/components/page/page-content/page-content.component.mjs +0 -29
- package/esm2022/lib/components/page/page-header/page-header.component.mjs +0 -29
- package/esm2022/lib/components/page/page-header-actions/page-header-actions.component.mjs +0 -29
- package/esm2022/lib/components/page/page-header-introduction/page-header-introduction.component.mjs +0 -29
- package/esm2022/lib/components/page/page.module.mjs +0 -60
- package/esm2022/lib/components/page-actions/page-actions.component.mjs +0 -82
- package/esm2022/lib/components/page-header/page-header.component.mjs +0 -66
- package/esm2022/lib/components/page-header/page-header.module.mjs +0 -55
- package/esm2022/lib/components/page-subtitle/page-subtitle.component.mjs +0 -53
- package/esm2022/lib/components/page-title/page-title.component.mjs +0 -116
- package/esm2022/lib/components/page-title/page-title.module.mjs +0 -35
- package/esm2022/lib/components/paragraph/paragraph.component.mjs +0 -50
- package/esm2022/lib/components/paragraph/paragraph.module.mjs +0 -37
- package/esm2022/lib/components/pending-changes/pending-changes.component.mjs +0 -91
- package/esm2022/lib/components/pending-changes/pending-changes.service.mjs +0 -37
- package/esm2022/lib/components/progress-bar/progress-bar.component.mjs +0 -26
- package/esm2022/lib/components/progress-bar/progress-bar.module.mjs +0 -33
- package/esm2022/lib/components/prompt/prompt.component.mjs +0 -74
- package/esm2022/lib/components/prompt/prompt.module.mjs +0 -39
- package/esm2022/lib/components/radio/radio.component.mjs +0 -116
- package/esm2022/lib/components/radio/radio.module.mjs +0 -55
- package/esm2022/lib/components/right-sidebar/right-sidebar.component.mjs +0 -309
- package/esm2022/lib/components/right-sidebar/right-sidebar.module.mjs +0 -98
- package/esm2022/lib/components/search-fields/search-fields.component.mjs +0 -241
- package/esm2022/lib/components/search-fields/search-fields.module.mjs +0 -90
- package/esm2022/lib/components/searchable-dropdown/searchable-dropdown.component.mjs +0 -201
- package/esm2022/lib/components/searchable-dropdown/searchable-dropdown.module.mjs +0 -34
- package/esm2022/lib/components/searchable-dropdown-select/searchable-dropdown-select.component.mjs +0 -71
- package/esm2022/lib/components/searchable-dropdown-select/searchable-dropdown-select.module.mjs +0 -35
- package/esm2022/lib/components/select/select.component.mjs +0 -200
- package/esm2022/lib/components/select/select.module.mjs +0 -37
- package/esm2022/lib/components/spinner/spinner.component.mjs +0 -54
- package/esm2022/lib/components/spinner/spinner.module.mjs +0 -35
- package/esm2022/lib/components/status-selector/status-selector.component.mjs +0 -86
- package/esm2022/lib/components/stepper/stepper-container/stepper-container.component.mjs +0 -91
- package/esm2022/lib/components/stepper/stepper-content/stepper-content.component.mjs +0 -52
- package/esm2022/lib/components/stepper/stepper-footer/stepper-footer.component.mjs +0 -43
- package/esm2022/lib/components/stepper/stepper-footer-step/stepper-footer-step.component.mjs +0 -71
- package/esm2022/lib/components/stepper/stepper-header/stepper-header.component.mjs +0 -37
- package/esm2022/lib/components/stepper/stepper-step/stepper-step.component.mjs +0 -39
- package/esm2022/lib/components/stepper/stepper.module.mjs +0 -68
- package/esm2022/lib/components/table/table.component.mjs +0 -172
- package/esm2022/lib/components/table/table.module.mjs +0 -58
- package/esm2022/lib/components/timeline/timeline.component.mjs +0 -42
- package/esm2022/lib/components/timeline/timeline.module.mjs +0 -35
- package/esm2022/lib/components/title/title.component.mjs +0 -57
- package/esm2022/lib/components/title/title.module.mjs +0 -36
- package/esm2022/lib/components/tooltip-icon/tooltip-icon.component.mjs +0 -39
- package/esm2022/lib/components/tooltip-icon/tooltip-icon.module.mjs +0 -39
- package/esm2022/lib/components/topbar/topbar.component.mjs +0 -127
- package/esm2022/lib/components/topbar/topbar.module.mjs +0 -36
- package/esm2022/lib/components/uploader/uploader-drag-drop.directive.mjs +0 -58
- package/esm2022/lib/components/uploader/uploader.component.mjs +0 -69
- package/esm2022/lib/components/uploader/uploader.module.mjs +0 -35
- package/esm2022/lib/components/v-card/card.component.mjs +0 -80
- package/esm2022/lib/components/v-card/card.module.mjs +0 -38
- package/esm2022/lib/components/v-modal/modal.component.mjs +0 -73
- package/esm2022/lib/components/v-modal/modal.module.mjs +0 -38
- package/esm2022/lib/components/value-path-selector/index.mjs +0 -17
- package/esm2022/lib/components/value-path-selector/value-path-selector.component.mjs +0 -317
- package/esm2022/lib/components/version/version.service.mjs +0 -38
- package/esm2022/lib/components/view-content/type-converters/booleanTypeConverter.mjs +0 -31
- package/esm2022/lib/components/view-content/type-converters/currencyTypeConverter.mjs +0 -43
- package/esm2022/lib/components/view-content/type-converters/dateTimeTypeConverter.mjs +0 -30
- package/esm2022/lib/components/view-content/type-converters/dateTypeConverter.mjs +0 -30
- package/esm2022/lib/components/view-content/type-converters/enumTypeConverter.mjs +0 -26
- package/esm2022/lib/components/view-content/type-converters/numberTypeConverter.mjs +0 -43
- package/esm2022/lib/components/view-content/type-converters/percentTypeConverter.mjs +0 -43
- package/esm2022/lib/components/view-content/type-converters/relatedFilesTypeConverter.mjs +0 -24
- package/esm2022/lib/components/view-content/type-converters/stringReplaceUnderscoreTypeConverter.mjs +0 -27
- package/esm2022/lib/components/view-content/type-converters/stringTypeConverter.mjs +0 -28
- package/esm2022/lib/components/view-content/type-converters/type-converters.model.mjs +0 -80
- package/esm2022/lib/components/view-content/view-content.module.mjs +0 -33
- package/esm2022/lib/components/view-content/view-content.service.mjs +0 -49
- package/esm2022/lib/components/webcam/webcam.component.mjs +0 -102
- package/esm2022/lib/components/webcam/webcam.module.mjs +0 -34
- package/esm2022/lib/components/widget/widget.component.mjs +0 -89
- package/esm2022/lib/components/widget/widget.module.mjs +0 -33
- package/esm2022/lib/constants/carbon.constants.mjs +0 -21
- package/esm2022/lib/constants/index.mjs +0 -19
- package/esm2022/lib/constants/status.constants.mjs +0 -18
- package/esm2022/lib/constants/view-type-converter.constants.mjs +0 -18
- package/esm2022/lib/directives/command-click/command-click-directive.module.mjs +0 -33
- package/esm2022/lib/directives/command-click/command-click.directive.mjs +0 -52
- package/esm2022/lib/directives/digit-only/digit-only.directive.mjs +0 -283
- package/esm2022/lib/directives/fit-page/fit-page-directive.module.mjs +0 -33
- package/esm2022/lib/directives/fit-page/fit-page.directive.mjs +0 -54
- package/esm2022/lib/directives/remove-classnames/remove-classnames.directive.mjs +0 -53
- package/esm2022/lib/directives/render-in-page-header/render-in-page-header-directive.module.mjs +0 -33
- package/esm2022/lib/directives/render-in-page-header/render-in-page-header.directive.mjs +0 -60
- package/esm2022/lib/directives/render-page-header/render-page-header-directive.module.mjs +0 -33
- package/esm2022/lib/directives/render-page-header/render-page-header.directive.mjs +0 -56
- package/esm2022/lib/directives/render-page-subtitle/render-page-subtitle-directive.module.mjs +0 -33
- package/esm2022/lib/directives/render-page-subtitle/render-page-subtitle.directive.mjs +0 -57
- package/esm2022/lib/directives/tooltip/tooltip.component.mjs +0 -42
- package/esm2022/lib/directives/tooltip/tooltip.directive.mjs +0 -76
- package/esm2022/lib/directives/tooltip/tooltip.module.mjs +0 -35
- package/esm2022/lib/directives/valtimo-cds-modal/valtimo-cds-modal-directive.module.mjs +0 -33
- package/esm2022/lib/directives/valtimo-cds-modal/valtimo-cds-modal.directive.mjs +0 -109
- package/esm2022/lib/directives/valtimo-cds-overflow-button/valtimo-cds-overflow-button-directive.module.mjs +0 -33
- package/esm2022/lib/directives/valtimo-cds-overflow-button/valtimo-cds-overflow-button.directive.mjs +0 -82
- package/esm2022/lib/guards/index.mjs +0 -17
- package/esm2022/lib/guards/pending-changes.guard.mjs +0 -2
- package/esm2022/lib/models/alert.model.mjs +0 -30
- package/esm2022/lib/models/button.model.mjs +0 -17
- package/esm2022/lib/models/carbon-list.model.mjs +0 -31
- package/esm2022/lib/models/carbon-pagination.model.mjs +0 -21
- package/esm2022/lib/models/carbon-tag.model.mjs +0 -17
- package/esm2022/lib/models/carbon-theme.model.mjs +0 -24
- package/esm2022/lib/models/choice-field.model.mjs +0 -17
- package/esm2022/lib/models/choicefield-value.model.mjs +0 -17
- package/esm2022/lib/models/documenten-api-metadata.model.mjs +0 -17
- package/esm2022/lib/models/editor.model.mjs +0 -22
- package/esm2022/lib/models/form-io.model.mjs +0 -30
- package/esm2022/lib/models/form.model.mjs +0 -17
- package/esm2022/lib/models/index.mjs +0 -47
- package/esm2022/lib/models/input.model.mjs +0 -17
- package/esm2022/lib/models/modal.model.mjs +0 -17
- package/esm2022/lib/models/multi-input.model.mjs +0 -17
- package/esm2022/lib/models/pagination.model.mjs +0 -24
- package/esm2022/lib/models/radio.model.mjs +0 -17
- package/esm2022/lib/models/right-sidebar.model.mjs +0 -17
- package/esm2022/lib/models/searchable-dropdown.model.mjs +0 -17
- package/esm2022/lib/models/select.model.mjs +0 -17
- package/esm2022/lib/models/sort.model.mjs +0 -17
- package/esm2022/lib/models/stepper.model.mjs +0 -17
- package/esm2022/lib/models/table.model.mjs +0 -17
- package/esm2022/lib/models/theme.model.mjs +0 -30
- package/esm2022/lib/models/timeline.model.mjs +0 -52
- package/esm2022/lib/models/title.model.mjs +0 -17
- package/esm2022/lib/models/topbar.model.mjs +0 -17
- package/esm2022/lib/models/value-path-selector.model.mjs +0 -36
- package/esm2022/lib/models/version.model.mjs +0 -17
- package/esm2022/lib/modules/custom-formio-component/create-custom-component.mjs +0 -162
- package/esm2022/lib/modules/custom-formio-component/custom-tags.service.mjs +0 -32
- package/esm2022/lib/modules/custom-formio-component/elements.common.mjs +0 -17
- package/esm2022/lib/modules/custom-formio-component/index.mjs +0 -20
- package/esm2022/lib/modules/custom-formio-component/register-custom-component.mjs +0 -42
- package/esm2022/lib/modules/index.mjs +0 -17
- package/esm2022/lib/pipes/case-count.pipe.mjs +0 -35
- package/esm2022/lib/pipes/components-pipes.module.mjs +0 -31
- package/esm2022/lib/pipes/ellipsis.pipe.mjs +0 -16
- package/esm2022/lib/pipes/index.mjs +0 -21
- package/esm2022/lib/pipes/is-array.pipe.mjs +0 -29
- package/esm2022/lib/pipes/menu-item-translation.pipe.mjs +0 -47
- package/esm2022/lib/services/cds-theme.service.mjs +0 -100
- package/esm2022/lib/services/choice-field.service.mjs +0 -70
- package/esm2022/lib/services/index.mjs +0 -29
- package/esm2022/lib/services/key-generator.service.mjs +0 -50
- package/esm2022/lib/services/key-state.service.mjs +0 -33
- package/esm2022/lib/services/modal.service.mjs +0 -148
- package/esm2022/lib/services/page-header.service.mjs +0 -93
- package/esm2022/lib/services/page-subtitle.service.mjs +0 -46
- package/esm2022/lib/services/page-title.service.mjs +0 -121
- package/esm2022/lib/services/prompt.service.mjs +0 -205
- package/esm2022/lib/services/shell.service.mjs +0 -213
- package/esm2022/lib/services/stepper.service.mjs +0 -108
- package/esm2022/lib/services/user-interface.service.mjs +0 -47
- package/esm2022/lib/services/valtimo-modal.service.mjs +0 -46
- package/esm2022/lib/services/value-path-selector.service.mjs +0 -110
- package/esm2022/public_api.mjs +0 -227
- package/esm2022/valtimo-components.mjs +0 -5
- package/lib/components/button/button.component.d.ts +0 -30
- package/lib/components/button/button.component.d.ts.map +0 -1
- package/lib/components/button/button.module.d.ts +0 -13
- package/lib/components/button/button.module.d.ts.map +0 -1
- package/lib/components/card/card.component.d.ts +0 -17
- package/lib/components/card/card.component.d.ts.map +0 -1
- package/lib/components/card/card.module.d.ts +0 -9
- package/lib/components/card/card.module.d.ts.map +0 -1
- package/lib/components/form-io/form-io-builder.component.d.ts +0 -24
- package/lib/components/form-io/form-io-builder.component.d.ts.map +0 -1
- package/lib/components/form-io/form-io-builder.utils.d.ts +0 -4
- package/lib/components/form-io/form-io-builder.utils.d.ts.map +0 -1
- package/lib/components/form-io/form-io-currency/currency-edit-form.d.ts.map +0 -1
- package/lib/components/form-io/form-io-currency/currency.component.d.ts.map +0 -1
- package/lib/components/form-io/form-io-currency/currency.formio.d.ts.map +0 -1
- package/lib/components/form-io/form-io-current-user/form-io-current-user-edit-form.d.ts.map +0 -1
- package/lib/components/form-io/form-io-current-user/form-io-current-user.component.d.ts.map +0 -1
- package/lib/components/form-io/form-io-current-user/form-io-current-user.formio.d.ts.map +0 -1
- package/lib/components/form-io/form-io-dummy/dummy.component.d.ts.map +0 -1
- package/lib/components/form-io/form-io-dummy/dummy.formio.d.ts.map +0 -1
- package/lib/components/form-io/form-io-iban/iban.component.d.ts.map +0 -1
- package/lib/components/form-io/form-io-iban/iban.formio.d.ts.map +0 -1
- package/lib/components/form-io/form-io-iban/iban.validators.d.ts.map +0 -1
- package/lib/components/form-io/form-io-resource-selector/form-io-resource-selector.formio.d.ts.map +0 -1
- package/lib/components/form-io/form-io-uploader/form-io-uploader-edit-form.d.ts.map +0 -1
- package/lib/components/form-io/form-io-uploader/form-io-uploader.component.d.ts.map +0 -1
- package/lib/components/form-io/form-io-uploader/form-io-uploader.formio.d.ts.map +0 -1
- package/lib/components/form-io/form-io.component.d.ts.map +0 -1
- package/lib/components/form-io/formio-value-resolver-selector/formio-value-resolver-selector-edit-form.d.ts.map +0 -1
- package/lib/components/form-io/formio-value-resolver-selector/formio-value-resolver-selector.component.d.ts.map +0 -1
- package/lib/components/form-io/formio-value-resolver-selector/formio-value-resolver-selector.formio.d.ts.map +0 -1
- package/lib/components/list/ListFilterPipe.directive.d.ts +0 -8
- package/lib/components/list/ListFilterPipe.directive.d.ts.map +0 -1
- package/lib/components/list/list.component.d.ts +0 -51
- package/lib/components/list/list.component.d.ts.map +0 -1
- package/lib/components/list/list.module.d.ts +0 -15
- package/lib/components/list/list.module.d.ts.map +0 -1
- package/lib/components/menu/menu.service.d.ts.map +0 -1
- package/lib/components/page/page-container/page-container.component.d.ts +0 -9
- package/lib/components/page/page-container/page-container.component.d.ts.map +0 -1
- package/lib/components/page/page-content/page-content.component.d.ts +0 -9
- package/lib/components/page/page-content/page-content.component.d.ts.map +0 -1
- package/lib/components/page/page-header/page-header.component.d.ts +0 -9
- package/lib/components/page/page-header/page-header.component.d.ts.map +0 -1
- package/lib/components/page/page-header-actions/page-header-actions.component.d.ts +0 -9
- package/lib/components/page/page-header-actions/page-header-actions.component.d.ts.map +0 -1
- package/lib/components/page/page-header-introduction/page-header-introduction.component.d.ts +0 -9
- package/lib/components/page/page-header-introduction/page-header-introduction.component.d.ts.map +0 -1
- package/lib/components/page/page.module.d.ts +0 -16
- package/lib/components/page/page.module.d.ts.map +0 -1
- package/lib/components/title/title.component.d.ts +0 -19
- package/lib/components/title/title.component.d.ts.map +0 -1
- package/lib/components/title/title.module.d.ts +0 -12
- package/lib/components/title/title.module.d.ts.map +0 -1
- package/lib/components/v-card/card.component.d.ts +0 -23
- package/lib/components/v-card/card.component.d.ts.map +0 -1
- package/lib/components/v-card/card.module.d.ts +0 -14
- package/lib/components/v-card/card.module.d.ts.map +0 -1
- package/lib/directives/command-click/command-click-directive.module.d.ts +0 -9
- package/lib/directives/command-click/command-click-directive.module.d.ts.map +0 -1
- package/lib/directives/command-click/command-click.directive.d.ts.map +0 -1
- package/lib/directives/fit-page/fit-page-directive.module.d.ts +0 -9
- package/lib/directives/fit-page/fit-page-directive.module.d.ts.map +0 -1
- package/lib/directives/render-in-page-header/render-in-page-header-directive.module.d.ts +0 -9
- package/lib/directives/render-in-page-header/render-in-page-header-directive.module.d.ts.map +0 -1
- package/lib/directives/render-page-header/render-page-header-directive.module.d.ts +0 -9
- package/lib/directives/render-page-header/render-page-header-directive.module.d.ts.map +0 -1
- package/lib/directives/render-page-subtitle/render-page-subtitle-directive.module.d.ts +0 -9
- package/lib/directives/render-page-subtitle/render-page-subtitle-directive.module.d.ts.map +0 -1
- package/lib/directives/valtimo-cds-modal/valtimo-cds-modal-directive.module.d.ts +0 -9
- package/lib/directives/valtimo-cds-modal/valtimo-cds-modal-directive.module.d.ts.map +0 -1
- package/lib/directives/valtimo-cds-overflow-button/valtimo-cds-overflow-button-directive.module.d.ts +0 -9
- package/lib/directives/valtimo-cds-overflow-button/valtimo-cds-overflow-button-directive.module.d.ts.map +0 -1
- package/lib/modules/custom-formio-component/custom-tags.service.d.ts +0 -8
- package/lib/modules/custom-formio-component/custom-tags.service.d.ts.map +0 -1
- /package/lib/components/form-io/{form-io-currency → components/form-io-currency}/currency-edit-form.d.ts +0 -0
- /package/lib/components/form-io/{form-io-currency → components/form-io-currency}/currency.formio.d.ts +0 -0
- /package/lib/components/form-io/{form-io-current-user → components/form-io-current-user}/form-io-current-user-edit-form.d.ts +0 -0
- /package/lib/components/form-io/{form-io-current-user → components/form-io-current-user}/form-io-current-user.formio.d.ts +0 -0
- /package/lib/components/form-io/{form-io-dummy → components/form-io-dummy}/dummy.formio.d.ts +0 -0
- /package/lib/components/form-io/{form-io-iban → components/form-io-iban}/iban.formio.d.ts +0 -0
- /package/lib/components/form-io/{form-io-iban → components/form-io-iban}/iban.validators.d.ts +0 -0
- /package/lib/components/form-io/{form-io-resource-selector → components/form-io-resource-selector}/form-io-resource-selector.formio.d.ts +0 -0
- /package/lib/components/form-io/{form-io-uploader → components/form-io-uploader}/form-io-uploader-edit-form.d.ts +0 -0
- /package/lib/components/form-io/{form-io-uploader → components/form-io-uploader}/form-io-uploader.formio.d.ts +0 -0
- /package/lib/components/form-io/{formio-value-resolver-selector → components/formio-value-resolver-selector}/formio-value-resolver-selector-edit-form.d.ts +0 -0
- /package/lib/components/form-io/{formio-value-resolver-selector → components/formio-value-resolver-selector}/formio-value-resolver-selector.formio.d.ts +0 -0
|
@@ -1,603 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2015-2024 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 { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
|
|
17
|
-
import { FormControl } from '@angular/forms';
|
|
18
|
-
import { ArrowDown16, ArrowUp16, Draggable16, SettingsView16 } from '@carbon/icons';
|
|
19
|
-
import { Table, TableHeaderItem, TableItem, TableModel, } from 'carbon-components-angular';
|
|
20
|
-
import { get as _get, isArray } from 'lodash';
|
|
21
|
-
import { BehaviorSubject, combineLatest, debounceTime, map, startWith, Subscription, switchMap, take, } from 'rxjs';
|
|
22
|
-
import { filter, tap } from 'rxjs/operators';
|
|
23
|
-
import { BOOLEAN_CONVERTER_VALUES, CASES_WITHOUT_STATUS_KEY } from '../../constants';
|
|
24
|
-
import { DEFAULT_LIST_TRANSLATIONS, DEFAULT_PAGINATION, DEFAULT_PAGINATOR_CONFIG, MoveRowDirection, ViewType, } from '../../models';
|
|
25
|
-
import { CarbonListFilterPipe } from './CarbonListFilterPipe.directive';
|
|
26
|
-
import { CarbonListDragAndDropService } from './services';
|
|
27
|
-
import * as i0 from "@angular/core";
|
|
28
|
-
import * as i1 from "../../pipes";
|
|
29
|
-
import * as i2 from "./CarbonListFilterPipe.directive";
|
|
30
|
-
import * as i3 from "carbon-components-angular";
|
|
31
|
-
import * as i4 from "ngx-logger";
|
|
32
|
-
import * as i5 from "@ngx-translate/core";
|
|
33
|
-
import * as i6 from "../view-content/view-content.service";
|
|
34
|
-
import * as i7 from "../../services/key-state.service";
|
|
35
|
-
import * as i8 from "./services";
|
|
36
|
-
import * as i9 from "@angular/common";
|
|
37
|
-
import * as i10 from "@angular/forms";
|
|
38
|
-
import * as i11 from "@ng-bootstrap/ng-bootstrap";
|
|
39
|
-
import * as i12 from "./tags-modal/tags-modal.component";
|
|
40
|
-
export class CarbonListComponent {
|
|
41
|
-
get _items() {
|
|
42
|
-
return this._items$.getValue();
|
|
43
|
-
}
|
|
44
|
-
get items() {
|
|
45
|
-
return this._items;
|
|
46
|
-
}
|
|
47
|
-
set items(value) {
|
|
48
|
-
this._items$.next(value);
|
|
49
|
-
}
|
|
50
|
-
set fields(value) {
|
|
51
|
-
this._fields$.next(value);
|
|
52
|
-
}
|
|
53
|
-
set tableTranslations(value) {
|
|
54
|
-
this._tableTranslations$.next({ ...DEFAULT_LIST_TRANSLATIONS, ...value });
|
|
55
|
-
}
|
|
56
|
-
set pagination(value) {
|
|
57
|
-
if (!value) {
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
if (!this._pagination) {
|
|
61
|
-
this._pagination = { ...DEFAULT_PAGINATION, ...value };
|
|
62
|
-
}
|
|
63
|
-
this._pagination = { ...this._pagination, ...value };
|
|
64
|
-
this.buildPaginationModel();
|
|
65
|
-
if (this._isPaginationInit || !value.size)
|
|
66
|
-
return;
|
|
67
|
-
this.setPaginationSize(value.size.toString());
|
|
68
|
-
this._isPaginationInit = true;
|
|
69
|
-
}
|
|
70
|
-
get pagination() {
|
|
71
|
-
return this._pagination;
|
|
72
|
-
}
|
|
73
|
-
set initialSortState(value) {
|
|
74
|
-
if (!value || this._isSortInit)
|
|
75
|
-
return;
|
|
76
|
-
this._isSortInit = true;
|
|
77
|
-
this.sort$.next(value);
|
|
78
|
-
}
|
|
79
|
-
set sortState(value) {
|
|
80
|
-
if (!value)
|
|
81
|
-
return;
|
|
82
|
-
this.sort$.next(value);
|
|
83
|
-
}
|
|
84
|
-
static { this.PAGINATION_SIZE = 'PaginationSize'; }
|
|
85
|
-
get selectedItems() {
|
|
86
|
-
const model = this._table.model;
|
|
87
|
-
return model.data.reduce((items, _, index) => model.isRowSelected(index) ? [...items, this.items[index]] : [...items], []);
|
|
88
|
-
}
|
|
89
|
-
get viewInitialized$() {
|
|
90
|
-
return this._viewInitialized$.pipe(filter(initialized => initialized));
|
|
91
|
-
}
|
|
92
|
-
get model() {
|
|
93
|
-
return this._table.model;
|
|
94
|
-
}
|
|
95
|
-
constructor(ellipsisPipe, filterPipe, iconService, logger, translateService, viewContentService, keyStateService, dragAndDropService, elementRef) {
|
|
96
|
-
this.ellipsisPipe = ellipsisPipe;
|
|
97
|
-
this.filterPipe = filterPipe;
|
|
98
|
-
this.iconService = iconService;
|
|
99
|
-
this.logger = logger;
|
|
100
|
-
this.translateService = translateService;
|
|
101
|
-
this.viewContentService = viewContentService;
|
|
102
|
-
this.keyStateService = keyStateService;
|
|
103
|
-
this.dragAndDropService = dragAndDropService;
|
|
104
|
-
this.elementRef = elementRef;
|
|
105
|
-
this._items$ = new BehaviorSubject([]);
|
|
106
|
-
this.currentOpenActionId = null;
|
|
107
|
-
this._fields$ = new BehaviorSubject([]);
|
|
108
|
-
this._tableTranslations$ = new BehaviorSubject(DEFAULT_LIST_TRANSLATIONS);
|
|
109
|
-
this.paginatorConfig = DEFAULT_PAGINATOR_CONFIG;
|
|
110
|
-
this._isPaginationInit = false;
|
|
111
|
-
/**
|
|
112
|
-
* @deprecated The actions field is deprecated. Actions can be added through the **@Input field**.
|
|
113
|
-
*/
|
|
114
|
-
this.actions = [];
|
|
115
|
-
this._isSortInit = false;
|
|
116
|
-
this.isSearchable = false;
|
|
117
|
-
this.enableSingleSelection = false;
|
|
118
|
-
this.showSelectionColumn = false;
|
|
119
|
-
this.striped = false;
|
|
120
|
-
this.hideToolbar = false;
|
|
121
|
-
this.lockedTooltipTranslationKey = '';
|
|
122
|
-
this.dragAndDrop = false;
|
|
123
|
-
this.dragAndDropDisabled = false;
|
|
124
|
-
this.rowClicked = new EventEmitter();
|
|
125
|
-
this.paginationClicked = new EventEmitter();
|
|
126
|
-
this.paginationSet = new EventEmitter();
|
|
127
|
-
this.search = new EventEmitter();
|
|
128
|
-
this.sortChanged = new EventEmitter();
|
|
129
|
-
this.moveRow = new EventEmitter();
|
|
130
|
-
this.itemsReordered = new EventEmitter();
|
|
131
|
-
this.batchText$ = this._tableTranslations$.pipe(switchMap((translations) => combineLatest([
|
|
132
|
-
this.translateService.stream(translations.select.single),
|
|
133
|
-
this.translateService.stream(translations.select.multiple),
|
|
134
|
-
]).pipe(startWith(this.translateService.instant(translations.select.single), this.translateService.instant(translations.select.multiple)))), map(([SINGLE, MULTIPLE]) => ({ SINGLE, MULTIPLE })));
|
|
135
|
-
this.paginationTranslations$ = this._tableTranslations$.pipe(switchMap((translations) => combineLatest([
|
|
136
|
-
this.translateService.stream(translations.pagination.itemsPerPage),
|
|
137
|
-
this.translateService.stream(translations.pagination.totalItem),
|
|
138
|
-
this.translateService.stream(translations.pagination.totalItems),
|
|
139
|
-
this.translateService.stream('interface.list.ofLastPage'),
|
|
140
|
-
this.translateService.stream('interface.list.ofLastPages'),
|
|
141
|
-
])), map(([ITEMS_PER_PAGE, TOTAL_ITEM, TOTAL_ITEMS, OF_LAST_PAGE, OF_LAST_PAGES]) => ({
|
|
142
|
-
ITEMS_PER_PAGE,
|
|
143
|
-
TOTAL_ITEM,
|
|
144
|
-
TOTAL_ITEMS,
|
|
145
|
-
OF_LAST_PAGE,
|
|
146
|
-
OF_LAST_PAGES,
|
|
147
|
-
})));
|
|
148
|
-
this.sort$ = new BehaviorSubject({
|
|
149
|
-
state: { name: '', direction: 'DESC' },
|
|
150
|
-
isSorting: false,
|
|
151
|
-
});
|
|
152
|
-
this.tagModalOpen$ = new BehaviorSubject(false);
|
|
153
|
-
this.tagModalData$ = new BehaviorSubject([]);
|
|
154
|
-
this.CASES_WITHOUT_STATUS_KEY = CASES_WITHOUT_STATUS_KEY;
|
|
155
|
-
this.ViewType = ViewType;
|
|
156
|
-
this.skeletonModel = Table.skeletonModel(5, 5);
|
|
157
|
-
this.searchFormControl = new FormControl('');
|
|
158
|
-
this._subscriptions = new Subscription();
|
|
159
|
-
this._viewInitialized$ = new BehaviorSubject(false);
|
|
160
|
-
this._translatedFields$ = this.translateService.stream('key').pipe(switchMap(() => this._fields$), filter((fields) => !!fields), map((fields) => fields.map((field) => ({
|
|
161
|
-
...field,
|
|
162
|
-
label: !field.label ? '' : this.translateService.instant(field.label),
|
|
163
|
-
}))));
|
|
164
|
-
this._headerItems$ = combineLatest([
|
|
165
|
-
this._translatedFields$,
|
|
166
|
-
this.sort$,
|
|
167
|
-
]).pipe(map(([translatedFields, sortState]) => translatedFields.map((field) => new TableHeaderItem({
|
|
168
|
-
data: field.label,
|
|
169
|
-
sortable: field.sortable,
|
|
170
|
-
className: field.className,
|
|
171
|
-
key: field.key,
|
|
172
|
-
sorted: sortState.isSorting && field.key === sortState.state.name,
|
|
173
|
-
ascending: field.key === sortState.state.name && sortState.state.direction === 'ASC',
|
|
174
|
-
}))), map((header) => [
|
|
175
|
-
...this.dragAndDropHeaderColumns,
|
|
176
|
-
...header,
|
|
177
|
-
...this.extraColumns,
|
|
178
|
-
]));
|
|
179
|
-
this._tableItems$ = combineLatest([
|
|
180
|
-
this._fields$,
|
|
181
|
-
this._items$,
|
|
182
|
-
this._viewInitialized$,
|
|
183
|
-
]).pipe(filter(([fields, items, viewInitialized]) => !!fields && !!items && viewInitialized), map(([fields, items]) => items.map((item, index) => [
|
|
184
|
-
...this.getDragAndDropItemsItems(item, index, items.length),
|
|
185
|
-
...fields.map((field) => {
|
|
186
|
-
switch (field.viewType) {
|
|
187
|
-
case ViewType.TEMPLATE:
|
|
188
|
-
return new TableItem({
|
|
189
|
-
data: { item, index, length: items.length, ...field.templateData },
|
|
190
|
-
template: field.template,
|
|
191
|
-
});
|
|
192
|
-
case ViewType.BOOLEAN:
|
|
193
|
-
let data = this.resolveObject(field, item);
|
|
194
|
-
data = !BOOLEAN_CONVERTER_VALUES.includes(data)
|
|
195
|
-
? data
|
|
196
|
-
: `${'viewTypeConverter.' + data}`;
|
|
197
|
-
return new TableItem({
|
|
198
|
-
data,
|
|
199
|
-
template: this.booleanTemplate,
|
|
200
|
-
});
|
|
201
|
-
case ViewType.TAGS: {
|
|
202
|
-
return new TableItem({
|
|
203
|
-
data: {
|
|
204
|
-
tags: this.resolveTagObject(item, field.key),
|
|
205
|
-
tagAmount: field?.tagAmount || 1,
|
|
206
|
-
},
|
|
207
|
-
template: this.tagTemplate,
|
|
208
|
-
});
|
|
209
|
-
}
|
|
210
|
-
default:
|
|
211
|
-
const resolvedObject = this.resolveObject(field, item);
|
|
212
|
-
return new TableItem({
|
|
213
|
-
title: resolvedObject ?? '-',
|
|
214
|
-
data: (field.tooltipCharLimit
|
|
215
|
-
? this.ellipsisPipe.transform(resolvedObject, field.tooltipCharLimit)
|
|
216
|
-
: resolvedObject) ?? '-',
|
|
217
|
-
template: this.defaultTemplate,
|
|
218
|
-
item,
|
|
219
|
-
});
|
|
220
|
-
}
|
|
221
|
-
}),
|
|
222
|
-
...this.getExtraItems(item, index, items.length),
|
|
223
|
-
])), tap((data) => {
|
|
224
|
-
this._completeDataSource = data;
|
|
225
|
-
}));
|
|
226
|
-
this._filteredItems$ = new BehaviorSubject(null);
|
|
227
|
-
this.model$ = combineLatest([
|
|
228
|
-
this._headerItems$,
|
|
229
|
-
this._tableItems$,
|
|
230
|
-
this._filteredItems$,
|
|
231
|
-
]).pipe(map(([header, data, filteredData]) => {
|
|
232
|
-
const model = new TableModel();
|
|
233
|
-
model.header = header;
|
|
234
|
-
model.data = filteredData ?? data;
|
|
235
|
-
return model;
|
|
236
|
-
}), startWith(new TableModel()));
|
|
237
|
-
this.iconService.registerAll([ArrowDown16, ArrowUp16, SettingsView16, Draggable16]);
|
|
238
|
-
}
|
|
239
|
-
ngOnInit() {
|
|
240
|
-
if (this.pagination) {
|
|
241
|
-
this.loadPaginationSize();
|
|
242
|
-
}
|
|
243
|
-
this._subscriptions.add(this.searchFormControl.valueChanges
|
|
244
|
-
.pipe(debounceTime(500))
|
|
245
|
-
.subscribe((searchString) => {
|
|
246
|
-
if (this.search.observed) {
|
|
247
|
-
this.search.emit(searchString);
|
|
248
|
-
return;
|
|
249
|
-
}
|
|
250
|
-
if (!searchString) {
|
|
251
|
-
this._filteredItems$.next(null);
|
|
252
|
-
return;
|
|
253
|
-
}
|
|
254
|
-
this._filteredItems$.next(this.filterPipe.transform(this._completeDataSource, searchString ?? ''));
|
|
255
|
-
}));
|
|
256
|
-
}
|
|
257
|
-
ngAfterViewInit() {
|
|
258
|
-
this._viewInitialized$.next(true);
|
|
259
|
-
this.openDragAndDropSubscription();
|
|
260
|
-
}
|
|
261
|
-
ngOnDestroy() {
|
|
262
|
-
this._subscriptions.unsubscribe();
|
|
263
|
-
}
|
|
264
|
-
openDragAndDropSubscription() {
|
|
265
|
-
this._subscriptions.add(this.dragAndDropService.dragAndDropEvents$.subscribe(dragAndDropEvent => {
|
|
266
|
-
const reorderedItems = this.swapItems(this._items, dragAndDropEvent.startIndex, dragAndDropEvent.newIndex);
|
|
267
|
-
this.itemsReordered.emit(reorderedItems);
|
|
268
|
-
}));
|
|
269
|
-
}
|
|
270
|
-
onRowClick(index) {
|
|
271
|
-
const rowData = this._table.model.data[index];
|
|
272
|
-
const firstItemWithData = rowData.find(item => !!item['item']);
|
|
273
|
-
const firstItem = firstItemWithData?.['item'];
|
|
274
|
-
if (firstItem)
|
|
275
|
-
firstItem.ctrlClick = this.keyStateService.getCtrlOrCmdState();
|
|
276
|
-
if (!firstItem || firstItem?.locked) {
|
|
277
|
-
return;
|
|
278
|
-
}
|
|
279
|
-
this.rowClicked.emit(firstItem);
|
|
280
|
-
}
|
|
281
|
-
onSelectPage(page) {
|
|
282
|
-
if (!this.paginationModel.pageLength) {
|
|
283
|
-
return;
|
|
284
|
-
}
|
|
285
|
-
if (this.pagination.size !== this.paginationModel.pageLength) {
|
|
286
|
-
this.setPaginationSize(this.paginationModel.pageLength.toString());
|
|
287
|
-
return;
|
|
288
|
-
}
|
|
289
|
-
this.paginationClicked.emit(page);
|
|
290
|
-
}
|
|
291
|
-
onSort(headerItem) {
|
|
292
|
-
const { key, sortable } = headerItem;
|
|
293
|
-
if (!sortable) {
|
|
294
|
-
return;
|
|
295
|
-
}
|
|
296
|
-
this.sort$.pipe(take(1)).subscribe(sort => {
|
|
297
|
-
let newState;
|
|
298
|
-
if (sort.state.name === key) {
|
|
299
|
-
if (!sort.isSorting) {
|
|
300
|
-
newState = { state: { ...sort.state, direction: 'DESC' }, isSorting: true };
|
|
301
|
-
}
|
|
302
|
-
else {
|
|
303
|
-
if (sort.state.direction === 'DESC') {
|
|
304
|
-
newState = { ...sort, state: { ...sort.state, direction: 'ASC' } };
|
|
305
|
-
}
|
|
306
|
-
else {
|
|
307
|
-
newState = { state: { ...sort.state, direction: 'DESC' }, isSorting: false };
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
else {
|
|
312
|
-
newState = { state: { name: key, direction: 'DESC' }, isSorting: true };
|
|
313
|
-
}
|
|
314
|
-
this.sort$.next(newState);
|
|
315
|
-
this.sortChanged.emit(newState);
|
|
316
|
-
});
|
|
317
|
-
}
|
|
318
|
-
onDragStart(mouseEvent, carbonEvent) {
|
|
319
|
-
if (this.dragAndDropDisabled)
|
|
320
|
-
return;
|
|
321
|
-
this.dragAndDropService.setCarbonListElementRef(this.elementRef);
|
|
322
|
-
this.dragAndDropService.startDrag(mouseEvent.y, carbonEvent.index);
|
|
323
|
-
}
|
|
324
|
-
buildPaginationModel() {
|
|
325
|
-
this.paginationModel = {
|
|
326
|
-
currentPage: this.pagination.page,
|
|
327
|
-
totalDataLength: +this.pagination.collectionSize,
|
|
328
|
-
pageLength: this.pagination.size,
|
|
329
|
-
};
|
|
330
|
-
}
|
|
331
|
-
get dragAndDropHeaderColumns() {
|
|
332
|
-
const emptyHeader = new TableHeaderItem();
|
|
333
|
-
emptyHeader.sortable = false;
|
|
334
|
-
return [
|
|
335
|
-
...(this.dragAndDrop
|
|
336
|
-
? [
|
|
337
|
-
new TableHeaderItem({
|
|
338
|
-
className: 'valtimo-carbon-list__actions',
|
|
339
|
-
sortable: false,
|
|
340
|
-
}),
|
|
341
|
-
]
|
|
342
|
-
: []),
|
|
343
|
-
];
|
|
344
|
-
}
|
|
345
|
-
get extraColumns() {
|
|
346
|
-
const emptyHeader = new TableHeaderItem();
|
|
347
|
-
emptyHeader.sortable = false;
|
|
348
|
-
return [
|
|
349
|
-
...(this.movingRowsEnabled
|
|
350
|
-
? [
|
|
351
|
-
new TableHeaderItem({
|
|
352
|
-
className: 'valtimo-carbon-list__actions',
|
|
353
|
-
sortable: false,
|
|
354
|
-
}),
|
|
355
|
-
]
|
|
356
|
-
: []),
|
|
357
|
-
...(!!this.actions
|
|
358
|
-
? this.actions.map(action => new TableHeaderItem({
|
|
359
|
-
data: action.columnName,
|
|
360
|
-
key: action.columnName,
|
|
361
|
-
sortable: false,
|
|
362
|
-
}))
|
|
363
|
-
: []),
|
|
364
|
-
...(!!this.lastColumnTemplate ? [emptyHeader] : []),
|
|
365
|
-
...(this._items?.some(item => item.locked) ? [emptyHeader] : []),
|
|
366
|
-
...(!!this.actionItems
|
|
367
|
-
? [
|
|
368
|
-
new TableHeaderItem({
|
|
369
|
-
className: 'valtimo-carbon-list__actions',
|
|
370
|
-
sortable: false,
|
|
371
|
-
}),
|
|
372
|
-
]
|
|
373
|
-
: []),
|
|
374
|
-
];
|
|
375
|
-
}
|
|
376
|
-
onMoveDownClick(event, data) {
|
|
377
|
-
event.stopImmediatePropagation();
|
|
378
|
-
const moveRowEvent = {
|
|
379
|
-
direction: MoveRowDirection.DOWN,
|
|
380
|
-
index: data.index,
|
|
381
|
-
};
|
|
382
|
-
const orderedItems = this.swapItems(this._items, moveRowEvent.index, moveRowEvent.index + 1);
|
|
383
|
-
this.moveRow.emit(moveRowEvent);
|
|
384
|
-
this.itemsReordered.emit(orderedItems);
|
|
385
|
-
}
|
|
386
|
-
onMoveUpClick(event, data) {
|
|
387
|
-
event.stopImmediatePropagation();
|
|
388
|
-
const moveRowEvent = {
|
|
389
|
-
direction: MoveRowDirection.UP,
|
|
390
|
-
index: data.index,
|
|
391
|
-
};
|
|
392
|
-
const orderedItems = this.swapItems(this._items, moveRowEvent.index - 1, moveRowEvent.index);
|
|
393
|
-
this.moveRow.emit(moveRowEvent);
|
|
394
|
-
this.itemsReordered.emit(orderedItems);
|
|
395
|
-
}
|
|
396
|
-
onTagClick(event, tags) {
|
|
397
|
-
event.stopImmediatePropagation();
|
|
398
|
-
this.tagModalOpen$.next(true);
|
|
399
|
-
this.tagModalData$.next(tags);
|
|
400
|
-
}
|
|
401
|
-
onCloseEvent() {
|
|
402
|
-
this.tagModalOpen$.next(false);
|
|
403
|
-
}
|
|
404
|
-
handleActionOpenChange(actionId, isOpen) {
|
|
405
|
-
if (isOpen) {
|
|
406
|
-
this.currentOpenActionId = actionId;
|
|
407
|
-
}
|
|
408
|
-
else if (this.currentOpenActionId === actionId) {
|
|
409
|
-
this.currentOpenActionId = null;
|
|
410
|
-
}
|
|
411
|
-
}
|
|
412
|
-
getDragAndDropItemsItems(item, index, length) {
|
|
413
|
-
return [
|
|
414
|
-
...(!!this.dragAndDrop
|
|
415
|
-
? [new TableItem({ data: { item, index, length }, template: this.dragAndDropTemplate })]
|
|
416
|
-
: []),
|
|
417
|
-
];
|
|
418
|
-
}
|
|
419
|
-
getExtraItems(item, index, length) {
|
|
420
|
-
return [
|
|
421
|
-
...(!!this.actions
|
|
422
|
-
? this.actions.map(action => new TableItem({
|
|
423
|
-
data: { item, callback: action.callback, iconClass: action.iconClass },
|
|
424
|
-
template: this.actionTemplate,
|
|
425
|
-
}))
|
|
426
|
-
: []),
|
|
427
|
-
...(this._items?.some(tableItem => tableItem.locked)
|
|
428
|
-
? [
|
|
429
|
-
new TableItem({
|
|
430
|
-
data: { locked: item.locked },
|
|
431
|
-
template: this.rowDisabled,
|
|
432
|
-
}),
|
|
433
|
-
]
|
|
434
|
-
: []),
|
|
435
|
-
...(!!this.lastColumnTemplate
|
|
436
|
-
? [new TableItem({ data: { item, index, length }, template: this.lastColumnTemplate })]
|
|
437
|
-
: []),
|
|
438
|
-
...(this.movingRowsEnabled
|
|
439
|
-
? [
|
|
440
|
-
new TableItem({
|
|
441
|
-
data: { item, index, length },
|
|
442
|
-
template: this.moveRowsTemplate,
|
|
443
|
-
}),
|
|
444
|
-
]
|
|
445
|
-
: []),
|
|
446
|
-
...(!!this.actionItems
|
|
447
|
-
? [
|
|
448
|
-
new TableItem({
|
|
449
|
-
className: 'valtimo-carbon-list__actions',
|
|
450
|
-
data: { actions: this.actionItems, item },
|
|
451
|
-
template: this.actionsMenuTemplate,
|
|
452
|
-
}),
|
|
453
|
-
]
|
|
454
|
-
: []),
|
|
455
|
-
];
|
|
456
|
-
}
|
|
457
|
-
loadPaginationSize() {
|
|
458
|
-
const entries = localStorage.getItem(`${this.paginationIdentifier}${CarbonListComponent.PAGINATION_SIZE}`);
|
|
459
|
-
if (entries !== null) {
|
|
460
|
-
this.pagination = { size: +entries };
|
|
461
|
-
this.paginationSet.emit(+entries);
|
|
462
|
-
this.logger.debug('Pagination loaded from local storage for this list. Current: ', entries);
|
|
463
|
-
}
|
|
464
|
-
else {
|
|
465
|
-
this.logger.debug('Pagination does NOT exist in local storage for this list. Will use default. Change it to create an entry.');
|
|
466
|
-
this.paginationSet.emit(10);
|
|
467
|
-
}
|
|
468
|
-
}
|
|
469
|
-
setPaginationSize(numberOfEntries) {
|
|
470
|
-
localStorage.setItem(`${this.paginationIdentifier}${CarbonListComponent.PAGINATION_SIZE}`, numberOfEntries);
|
|
471
|
-
this.logger.debug('Pagination set in local storage for this list: ', numberOfEntries);
|
|
472
|
-
this.paginationSet.emit(numberOfEntries);
|
|
473
|
-
}
|
|
474
|
-
resolveObject(definition, obj) {
|
|
475
|
-
const definitionKey = definition.key;
|
|
476
|
-
const customPropString = '$.';
|
|
477
|
-
const key = definitionKey.includes(customPropString)
|
|
478
|
-
? definitionKey.split(customPropString)[1]
|
|
479
|
-
: definitionKey;
|
|
480
|
-
const resolvedObjValue = _get(obj, key, null);
|
|
481
|
-
return this.viewContentService.get(resolvedObjValue, definition);
|
|
482
|
-
}
|
|
483
|
-
swapItems(items, index1, index2) {
|
|
484
|
-
const itemToInsert = items[index1];
|
|
485
|
-
const filteredItems = items.filter((_, index) => index !== index1);
|
|
486
|
-
filteredItems.splice(index2, 0, itemToInsert);
|
|
487
|
-
return filteredItems;
|
|
488
|
-
}
|
|
489
|
-
resolveTagObject(item, key) {
|
|
490
|
-
const object = item[key];
|
|
491
|
-
if (!object)
|
|
492
|
-
return null;
|
|
493
|
-
if (isArray(object) && typeof object[0] !== 'string')
|
|
494
|
-
return object;
|
|
495
|
-
if (!isArray(object) && typeof object !== 'string')
|
|
496
|
-
return [object];
|
|
497
|
-
if (typeof object === 'string')
|
|
498
|
-
return [
|
|
499
|
-
{
|
|
500
|
-
content: object,
|
|
501
|
-
type: 'blue',
|
|
502
|
-
},
|
|
503
|
-
];
|
|
504
|
-
return object.map((content) => ({
|
|
505
|
-
content,
|
|
506
|
-
type: 'blue',
|
|
507
|
-
}));
|
|
508
|
-
}
|
|
509
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CarbonListComponent, deps: [{ token: i1.EllipsisPipe }, { token: i2.CarbonListFilterPipe }, { token: i3.IconService }, { token: i4.NGXLogger }, { token: i5.TranslateService }, { token: i6.ViewContentService }, { token: i7.KeyStateService }, { token: i8.CarbonListDragAndDropService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
510
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: CarbonListComponent, selector: "valtimo-carbon-list", inputs: { items: "items", fields: "fields", tableTranslations: "tableTranslations", paginatorConfig: "paginatorConfig", pagination: "pagination", loading: "loading", actions: "actions", actionItems: "actionItems", header: "header", hideColumnHeader: "hideColumnHeader", initialSortState: "initialSortState", sortState: "sortState", isSearchable: "isSearchable", enableSingleSelection: "enableSingleSelection", lastColumnTemplate: "lastColumnTemplate", paginationIdentifier: "paginationIdentifier", showSelectionColumn: "showSelectionColumn", striped: "striped", hideToolbar: "hideToolbar", lockedTooltipTranslationKey: "lockedTooltipTranslationKey", movingRowsEnabled: "movingRowsEnabled", dragAndDrop: "dragAndDrop", dragAndDropDisabled: "dragAndDropDisabled" }, outputs: { rowClicked: "rowClicked", paginationClicked: "paginationClicked", paginationSet: "paginationSet", search: "search", sortChanged: "sortChanged", moveRow: "moveRow", itemsReordered: "itemsReordered" }, providers: [CarbonListFilterPipe, CarbonListDragAndDropService], viewQueries: [{ propertyName: "actionsMenuTemplate", first: true, predicate: ["actionsMenuTemplate"], descendants: true }, { propertyName: "actionTemplate", first: true, predicate: ["actionTemplate"], descendants: true }, { propertyName: "booleanTemplate", first: true, predicate: ["booleanTemplate"], descendants: true }, { propertyName: "moveRowsTemplate", first: true, predicate: ["moveRowsTemplate"], descendants: true }, { propertyName: "dragAndDropTemplate", first: true, predicate: ["dragAndDropTemplate"], descendants: true }, { propertyName: "rowDisabled", first: true, predicate: ["rowDisabled"], descendants: true }, { propertyName: "tagTemplate", first: true, predicate: ["tagTemplate"], descendants: true }, { propertyName: "defaultTemplate", first: true, predicate: ["defaultTemplate"], descendants: true }, { propertyName: "_table", first: true, predicate: Table, descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<cds-table-container\n *ngIf=\"{\n sort: sort$ | async,\n model: model$ | async,\n viewInitialized: viewInitialized$ | async,\n } as obs\"\n class=\"valtimo-carbon-list\"\n>\n <cds-table-header *ngIf=\"header\">\n <ng-content select=\"[header]\"></ng-content>\n </cds-table-header>\n\n <ng-content select=\"[tabs]\"></ng-content>\n\n <cds-table-toolbar\n *ngIf=\"!hideToolbar\"\n class=\"valtimo-carbon-list__toolbar\"\n [model]=\"obs.model\"\n [batchText]=\"batchText$ | async\"\n >\n <cds-table-toolbar-actions>\n <ng-content select=\"[carbonToolbarActions]\"> </ng-content>\n </cds-table-toolbar-actions>\n\n <cds-table-toolbar-content>\n <cds-table-toolbar-search\n *ngIf=\"isSearchable\"\n [expandable]=\"true\"\n [formControl]=\"searchFormControl\"\n ></cds-table-toolbar-search>\n\n <ng-content select=\"[carbonToolbarContent]\"> </ng-content>\n </cds-table-toolbar-content>\n </cds-table-toolbar>\n\n <cds-table\n *ngIf=\"!!obs.sort\"\n [ngClass]=\"{\n 'valtimo-carbon-list__header--hidden': hideColumnHeader,\n 'valtimo-carbon-list--unclickable': !this.rowClicked.observed,\n }\"\n [enableSingleSelect]=\"enableSingleSelect\"\n [model]=\"loading || !obs.viewInitialized ? skeletonModel : obs.model\"\n [showSelectionColumn]=\"showSelectionColumn\"\n [skeleton]=\"loading\"\n [striped]=\"striped\"\n (sort)=\"onSort(obs.model.header[$event])\"\n (rowClick)=\"onRowClick($event)\"\n >\n <tbody cdsTableBody>\n <tr class=\"valtimo-carbon-list__no-results\">\n <td [attr.colspan]=\"obs.model.header.length + (showSelectionColumn ? 1 : 0)\">\n <ng-content></ng-content>\n </td>\n\n <td [attr.colspan]=\"obs.model.header.length + (showSelectionColumn ? 1 : 0)\">\n {{ 'list.noResults' | translate }}\n </td>\n </tr>\n </tbody>\n </cds-table>\n\n <cds-pagination\n *ngIf=\"paginationModel && items?.length\"\n [itemsPerPageOptions]=\"paginatorConfig.itemsPerPageOptions\"\n [model]=\"paginationModel\"\n [showPageInput]=\"paginatorConfig.showPageInput\"\n [skeleton]=\"loading\"\n [translations]=\"paginationTranslations$ | async\"\n (selectPage)=\"onSelectPage($event)\"\n ></cds-pagination>\n</cds-table-container>\n\n<ng-template #actionTemplate let-data=\"data\">\n <i\n class=\"clickable\"\n [ngClass]=\"data.iconClass\"\n (click)=\"$event.stopPropagation(); data.callback(data.item)\"\n ></i>\n</ng-template>\n\n<ng-template #booleanTemplate let-data=\"data\">\n {{ data | translate }}\n</ng-template>\n\n<ng-template #actionsMenuTemplate let-data=\"data\">\n <cds-overflow-menu\n [open]=\"currentOpenActionId === data.item\"\n (openChange)=\"handleActionOpenChange(data.item, $event)\"\n [flip]=\"true\"\n [offset]=\"{x: 0, y: 50}\"\n placement=\"bottom\"\n (click)=\"$event.stopPropagation()\"\n >\n @for (action of data.actions; track action.label) {\n <cds-overflow-menu-option\n [disabled]=\"action.disabledCallback ? action.disabledCallback(data.item) : false\"\n [type]=\"action.type\"\n (selected)=\"action.callback(data.item)\"\n >\n <i *ngIf=\"!!action.iconClass\" [ngClass]=\"action.iconClass\"></i>\n\n {{ action.label | translate }}\n </cds-overflow-menu-option>\n }\n </cds-overflow-menu>\n</ng-template>\n\n<ng-template #rowDisabled let-data=\"data\">\n <div *ngIf=\"data.locked\" class=\"locked\">\n <span\n class=\"float-right badge badge-pill badge-secondary bg-grey\"\n ngbTooltip=\"{{ lockedTooltipTranslationKey | translate }}\"\n >\n <i class=\"icon mdi mdi-lock\"></i>\n </span>\n </div>\n</ng-template>\n\n<ng-template #moveRowsTemplate let-data=\"data\">\n <div class=\"valtimo-carbon-list__move-rows\">\n <button\n cdsButton=\"tertiary\"\n [disabled]=\"data.index === 0\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (click)=\"onMoveUpClick($event, data)\"\n >\n <svg cdsIcon=\"arrow--up\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n\n <button\n cdsButton=\"tertiary\"\n [disabled]=\"data.index === data.length - 1\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (click)=\"onMoveDownClick($event, data)\"\n >\n <svg cdsIcon=\"arrow--down\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n</ng-template>\n\n<ng-template #dragAndDropTemplate let-data=\"data\">\n <div class=\"valtimo-carbon-list__draggable\">\n <button\n cdsButton=\"ghost\"\n [disabled]=\"dragAndDropDisabled\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (mousedown)=\"onDragStart($event, data)\"\n >\n <svg cdsIcon=\"draggable\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n</ng-template>\n\n<ng-template #tagTemplate let-data=\"data\">\n @if (!data.tags) {\n -\n } @else {\n <div class=\"tag-template\">\n @if (data.tags.length === 0) {\n -\n } @else {\n @for (tag of data.tags.slice(0, data.tagAmount); track tag) {\n <cds-tag class=\"cds-tag--no-margin\" [type]=\"tag.type\">\n {{ tag.ellipsisContent ?? tag.content }}\n </cds-tag>\n }\n\n <cds-tag\n *ngIf=\"data.tags.length > data.tagAmount\"\n class=\"cds-tag--no-margin valtimo-carbon-list__expand-tag\"\n type=\"high-contrast\"\n (click)=\"onTagClick($event, data.tags)\"\n >\n {{ data.tags.length - data.tagAmount }} <svg cdsIcon=\"add\" size=\"16\"></svg>\n </cds-tag>\n }\n </div>\n }\n</ng-template>\n\n<ng-template #defaultTemplate let-data=\"data\">\n <span>{{ data }}</span>\n</ng-template>\n\n<valtimo-tags-modal\n [open]=\"tagModalOpen$ | async\"\n [tags]=\"tagModalData$ | async\"\n (closeEvent)=\"onCloseEvent()\"\n></valtimo-tags-modal>\n", styles: [".clickable{cursor:pointer}.container-fluid{background-color:var(--cds-layer)}.tile-holder{background-color:#f5f5f5;border:1px solid transparent}.tile-holder:hover{background-color:#eee;border:1px solid #dee2e6}th:first-child,td:first-child{padding-left:25px}::ng-deep tr:has(>td .locked){cursor:not-allowed}::ng-deep tr:has(>td .locked) td{color:var(--cds-text-on-color-disabled)}::ng-deep .valtimo-carbon-list__header--hidden thead{display:none}::ng-deep .valtimo-carbon-list--unclickable tr{cursor:default}.valtimo-carbon-list__toolbar:empty{display:none}.valtimo-carbon-list__no-results{cursor:default}.valtimo-carbon-list__no-results td:empty,.valtimo-carbon-list__no-results td:not(:empty)+td{display:none}.valtimo-carbon-list__move-rows,.valtimo-carbon-list__draggable{width:100%;justify-content:flex-end;display:flex;flex-direction:row;position:relative}.valtimo-carbon-list__move-rows button:not(:last-child),.valtimo-carbon-list__draggable button:not(:last-child){margin-right:8px}.valtimo-carbon-list__expand-tag{cursor:pointer}.valtimo-carbon-list label{margin-bottom:0!important}.valtimo-carbon-list ::ng-deep .tag-template .cds--tag{margin:0}.valtimo-carbon-list ::ng-deep .tag-template .cds--tag svg{fill:var(--cds-background)}.valtimo-carbon-list ::ng-deep .tag-template>*:not(:last-child){margin-right:8px}.valtimo-carbon-list ::ng-deep .cds--tag{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block;line-height:24px}.valtimo-carbon-list ::ng-deep .valtimo-carbon-list__draggable .cds--btn--ghost{cursor:move!important}::ng-deep .valtimo-carbon-list__drag-table-row{cursor:move!important}::ng-deep .valtimo-carbon-list__drag-table-row .valtimo-carbon-list__draggable .cds--btn--ghost{outline:0;border-color:var(--cds-button-focus-color, var(--cds-focus, var(--vcds-color-60)));box-shadow:inset 0 0 0 1px var(--cds-button-focus-color, var(--cds-focus, var(--vcds-color-60))),inset 0 0 0 2px var(--cds-background, #f4f4f4)}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i3.Pagination, selector: "cds-pagination, ibm-pagination", inputs: ["skeleton", "model", "disabled", "pageInputDisabled", "showPageInput", "pagesUnknown", "pageSelectThreshold", "translations", "itemsPerPageOptions"], outputs: ["selectPage"] }, { kind: "component", type: i3.TableToolbar, selector: "cds-table-toolbar, ibm-table-toolbar", inputs: ["model", "batchText", "ariaLabel", "cancelText", "size"], outputs: ["cancel"] }, { kind: "component", type: i3.TableContainer, selector: "cds-table-container, ibm-table-container" }, { kind: "component", type: i3.TableHeader, selector: "cds-table-header, ibm-table-header" }, { kind: "component", type: i3.TableToolbarActions, selector: "cds-table-toolbar-actions, ibm-table-toolbar-actions" }, { kind: "component", type: i3.TableToolbarSearch, selector: "cds-table-toolbar-search, ibm-table-toolbar-search" }, { kind: "component", type: i3.TableToolbarContent, selector: "cds-table-toolbar-content, ibm-table-toolbar-content" }, { kind: "component", type: i3.Table, selector: "cds-table, ibm-table", inputs: ["ariaLabelledby", "ariaDescribedby", "model", "size", "skeleton", "isDataGrid", "sortable", "noBorder", "showSelectionColumn", "enableSingleSelect", "scrollLoadDistance", "expandButtonAriaLabel", "sortDescendingLabel", "sortAscendingLabel", "translations", "striped", "stickyHeader", "footerTemplate", "selectionLabelColumn"], outputs: ["sort", "selectAll", "deselectAll", "selectRow", "deselectRow", "rowClick", "scrollLoad"] }, { kind: "component", type: i3.TableBody, selector: "[cdsTableBody], [ibmTableBody]", inputs: ["model", "enableSingleSelect", "expandButtonAriaLabel", "checkboxRowLabel", "showSelectionColumn", "size", "selectionLabelColumn", "skeleton"], outputs: ["selectRow", "deselectRow", "rowClick"] }, { kind: "directive", type: i10.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "directive", type: i3.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "component", type: i3.OverflowMenu, selector: "cds-overflow-menu, ibm-overflow-menu", inputs: ["buttonLabel", "flip", "placement", "open", "customTrigger", "offset", "wrapperClass", "triggerClass"], outputs: ["openChange"] }, { kind: "component", type: i3.OverflowMenuOption, selector: "cds-overflow-menu-option, ibm-overflow-menu-option", inputs: ["divider", "type", "disabled", "href", "target", "innerClass"], outputs: ["selected"] }, { kind: "directive", type: i11.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: i3.Tag, selector: "cds-tag, ibm-tag", inputs: ["type", "size", "class"] }, { kind: "component", type: i12.CarbonTagsModalComponent, selector: "valtimo-tags-modal", inputs: ["open", "tags"], outputs: ["closeEvent"] }, { kind: "pipe", type: i9.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
511
|
-
}
|
|
512
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CarbonListComponent, decorators: [{
|
|
513
|
-
type: Component,
|
|
514
|
-
args: [{ selector: 'valtimo-carbon-list', changeDetection: ChangeDetectionStrategy.OnPush, providers: [CarbonListFilterPipe, CarbonListDragAndDropService], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<cds-table-container\n *ngIf=\"{\n sort: sort$ | async,\n model: model$ | async,\n viewInitialized: viewInitialized$ | async,\n } as obs\"\n class=\"valtimo-carbon-list\"\n>\n <cds-table-header *ngIf=\"header\">\n <ng-content select=\"[header]\"></ng-content>\n </cds-table-header>\n\n <ng-content select=\"[tabs]\"></ng-content>\n\n <cds-table-toolbar\n *ngIf=\"!hideToolbar\"\n class=\"valtimo-carbon-list__toolbar\"\n [model]=\"obs.model\"\n [batchText]=\"batchText$ | async\"\n >\n <cds-table-toolbar-actions>\n <ng-content select=\"[carbonToolbarActions]\"> </ng-content>\n </cds-table-toolbar-actions>\n\n <cds-table-toolbar-content>\n <cds-table-toolbar-search\n *ngIf=\"isSearchable\"\n [expandable]=\"true\"\n [formControl]=\"searchFormControl\"\n ></cds-table-toolbar-search>\n\n <ng-content select=\"[carbonToolbarContent]\"> </ng-content>\n </cds-table-toolbar-content>\n </cds-table-toolbar>\n\n <cds-table\n *ngIf=\"!!obs.sort\"\n [ngClass]=\"{\n 'valtimo-carbon-list__header--hidden': hideColumnHeader,\n 'valtimo-carbon-list--unclickable': !this.rowClicked.observed,\n }\"\n [enableSingleSelect]=\"enableSingleSelect\"\n [model]=\"loading || !obs.viewInitialized ? skeletonModel : obs.model\"\n [showSelectionColumn]=\"showSelectionColumn\"\n [skeleton]=\"loading\"\n [striped]=\"striped\"\n (sort)=\"onSort(obs.model.header[$event])\"\n (rowClick)=\"onRowClick($event)\"\n >\n <tbody cdsTableBody>\n <tr class=\"valtimo-carbon-list__no-results\">\n <td [attr.colspan]=\"obs.model.header.length + (showSelectionColumn ? 1 : 0)\">\n <ng-content></ng-content>\n </td>\n\n <td [attr.colspan]=\"obs.model.header.length + (showSelectionColumn ? 1 : 0)\">\n {{ 'list.noResults' | translate }}\n </td>\n </tr>\n </tbody>\n </cds-table>\n\n <cds-pagination\n *ngIf=\"paginationModel && items?.length\"\n [itemsPerPageOptions]=\"paginatorConfig.itemsPerPageOptions\"\n [model]=\"paginationModel\"\n [showPageInput]=\"paginatorConfig.showPageInput\"\n [skeleton]=\"loading\"\n [translations]=\"paginationTranslations$ | async\"\n (selectPage)=\"onSelectPage($event)\"\n ></cds-pagination>\n</cds-table-container>\n\n<ng-template #actionTemplate let-data=\"data\">\n <i\n class=\"clickable\"\n [ngClass]=\"data.iconClass\"\n (click)=\"$event.stopPropagation(); data.callback(data.item)\"\n ></i>\n</ng-template>\n\n<ng-template #booleanTemplate let-data=\"data\">\n {{ data | translate }}\n</ng-template>\n\n<ng-template #actionsMenuTemplate let-data=\"data\">\n <cds-overflow-menu\n [open]=\"currentOpenActionId === data.item\"\n (openChange)=\"handleActionOpenChange(data.item, $event)\"\n [flip]=\"true\"\n [offset]=\"{x: 0, y: 50}\"\n placement=\"bottom\"\n (click)=\"$event.stopPropagation()\"\n >\n @for (action of data.actions; track action.label) {\n <cds-overflow-menu-option\n [disabled]=\"action.disabledCallback ? action.disabledCallback(data.item) : false\"\n [type]=\"action.type\"\n (selected)=\"action.callback(data.item)\"\n >\n <i *ngIf=\"!!action.iconClass\" [ngClass]=\"action.iconClass\"></i>\n\n {{ action.label | translate }}\n </cds-overflow-menu-option>\n }\n </cds-overflow-menu>\n</ng-template>\n\n<ng-template #rowDisabled let-data=\"data\">\n <div *ngIf=\"data.locked\" class=\"locked\">\n <span\n class=\"float-right badge badge-pill badge-secondary bg-grey\"\n ngbTooltip=\"{{ lockedTooltipTranslationKey | translate }}\"\n >\n <i class=\"icon mdi mdi-lock\"></i>\n </span>\n </div>\n</ng-template>\n\n<ng-template #moveRowsTemplate let-data=\"data\">\n <div class=\"valtimo-carbon-list__move-rows\">\n <button\n cdsButton=\"tertiary\"\n [disabled]=\"data.index === 0\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (click)=\"onMoveUpClick($event, data)\"\n >\n <svg cdsIcon=\"arrow--up\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n\n <button\n cdsButton=\"tertiary\"\n [disabled]=\"data.index === data.length - 1\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (click)=\"onMoveDownClick($event, data)\"\n >\n <svg cdsIcon=\"arrow--down\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n</ng-template>\n\n<ng-template #dragAndDropTemplate let-data=\"data\">\n <div class=\"valtimo-carbon-list__draggable\">\n <button\n cdsButton=\"ghost\"\n [disabled]=\"dragAndDropDisabled\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (mousedown)=\"onDragStart($event, data)\"\n >\n <svg cdsIcon=\"draggable\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n</ng-template>\n\n<ng-template #tagTemplate let-data=\"data\">\n @if (!data.tags) {\n -\n } @else {\n <div class=\"tag-template\">\n @if (data.tags.length === 0) {\n -\n } @else {\n @for (tag of data.tags.slice(0, data.tagAmount); track tag) {\n <cds-tag class=\"cds-tag--no-margin\" [type]=\"tag.type\">\n {{ tag.ellipsisContent ?? tag.content }}\n </cds-tag>\n }\n\n <cds-tag\n *ngIf=\"data.tags.length > data.tagAmount\"\n class=\"cds-tag--no-margin valtimo-carbon-list__expand-tag\"\n type=\"high-contrast\"\n (click)=\"onTagClick($event, data.tags)\"\n >\n {{ data.tags.length - data.tagAmount }} <svg cdsIcon=\"add\" size=\"16\"></svg>\n </cds-tag>\n }\n </div>\n }\n</ng-template>\n\n<ng-template #defaultTemplate let-data=\"data\">\n <span>{{ data }}</span>\n</ng-template>\n\n<valtimo-tags-modal\n [open]=\"tagModalOpen$ | async\"\n [tags]=\"tagModalData$ | async\"\n (closeEvent)=\"onCloseEvent()\"\n></valtimo-tags-modal>\n", styles: [".clickable{cursor:pointer}.container-fluid{background-color:var(--cds-layer)}.tile-holder{background-color:#f5f5f5;border:1px solid transparent}.tile-holder:hover{background-color:#eee;border:1px solid #dee2e6}th:first-child,td:first-child{padding-left:25px}::ng-deep tr:has(>td .locked){cursor:not-allowed}::ng-deep tr:has(>td .locked) td{color:var(--cds-text-on-color-disabled)}::ng-deep .valtimo-carbon-list__header--hidden thead{display:none}::ng-deep .valtimo-carbon-list--unclickable tr{cursor:default}.valtimo-carbon-list__toolbar:empty{display:none}.valtimo-carbon-list__no-results{cursor:default}.valtimo-carbon-list__no-results td:empty,.valtimo-carbon-list__no-results td:not(:empty)+td{display:none}.valtimo-carbon-list__move-rows,.valtimo-carbon-list__draggable{width:100%;justify-content:flex-end;display:flex;flex-direction:row;position:relative}.valtimo-carbon-list__move-rows button:not(:last-child),.valtimo-carbon-list__draggable button:not(:last-child){margin-right:8px}.valtimo-carbon-list__expand-tag{cursor:pointer}.valtimo-carbon-list label{margin-bottom:0!important}.valtimo-carbon-list ::ng-deep .tag-template .cds--tag{margin:0}.valtimo-carbon-list ::ng-deep .tag-template .cds--tag svg{fill:var(--cds-background)}.valtimo-carbon-list ::ng-deep .tag-template>*:not(:last-child){margin-right:8px}.valtimo-carbon-list ::ng-deep .cds--tag{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block;line-height:24px}.valtimo-carbon-list ::ng-deep .valtimo-carbon-list__draggable .cds--btn--ghost{cursor:move!important}::ng-deep .valtimo-carbon-list__drag-table-row{cursor:move!important}::ng-deep .valtimo-carbon-list__drag-table-row .valtimo-carbon-list__draggable .cds--btn--ghost{outline:0;border-color:var(--cds-button-focus-color, var(--cds-focus, var(--vcds-color-60)));box-shadow:inset 0 0 0 1px var(--cds-button-focus-color, var(--cds-focus, var(--vcds-color-60))),inset 0 0 0 2px var(--cds-background, #f4f4f4)}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
|
|
515
|
-
}], ctorParameters: () => [{ type: i1.EllipsisPipe }, { type: i2.CarbonListFilterPipe }, { type: i3.IconService }, { type: i4.NGXLogger }, { type: i5.TranslateService }, { type: i6.ViewContentService }, { type: i7.KeyStateService }, { type: i8.CarbonListDragAndDropService }, { type: i0.ElementRef }], propDecorators: { actionsMenuTemplate: [{
|
|
516
|
-
type: ViewChild,
|
|
517
|
-
args: ['actionsMenuTemplate']
|
|
518
|
-
}], actionTemplate: [{
|
|
519
|
-
type: ViewChild,
|
|
520
|
-
args: ['actionTemplate']
|
|
521
|
-
}], booleanTemplate: [{
|
|
522
|
-
type: ViewChild,
|
|
523
|
-
args: ['booleanTemplate']
|
|
524
|
-
}], moveRowsTemplate: [{
|
|
525
|
-
type: ViewChild,
|
|
526
|
-
args: ['moveRowsTemplate']
|
|
527
|
-
}], dragAndDropTemplate: [{
|
|
528
|
-
type: ViewChild,
|
|
529
|
-
args: ['dragAndDropTemplate']
|
|
530
|
-
}], rowDisabled: [{
|
|
531
|
-
type: ViewChild,
|
|
532
|
-
args: ['rowDisabled']
|
|
533
|
-
}], tagTemplate: [{
|
|
534
|
-
type: ViewChild,
|
|
535
|
-
args: ['tagTemplate']
|
|
536
|
-
}], defaultTemplate: [{
|
|
537
|
-
type: ViewChild,
|
|
538
|
-
args: ['defaultTemplate']
|
|
539
|
-
}], _table: [{
|
|
540
|
-
type: ViewChild,
|
|
541
|
-
args: [Table]
|
|
542
|
-
}], items: [{
|
|
543
|
-
type: Input
|
|
544
|
-
}], fields: [{
|
|
545
|
-
type: Input
|
|
546
|
-
}], tableTranslations: [{
|
|
547
|
-
type: Input
|
|
548
|
-
}], paginatorConfig: [{
|
|
549
|
-
type: Input
|
|
550
|
-
}], pagination: [{
|
|
551
|
-
type: Input
|
|
552
|
-
}], loading: [{
|
|
553
|
-
type: Input
|
|
554
|
-
}], actions: [{
|
|
555
|
-
type: Input
|
|
556
|
-
}], actionItems: [{
|
|
557
|
-
type: Input
|
|
558
|
-
}], header: [{
|
|
559
|
-
type: Input
|
|
560
|
-
}], hideColumnHeader: [{
|
|
561
|
-
type: Input
|
|
562
|
-
}], initialSortState: [{
|
|
563
|
-
type: Input
|
|
564
|
-
}], sortState: [{
|
|
565
|
-
type: Input
|
|
566
|
-
}], isSearchable: [{
|
|
567
|
-
type: Input
|
|
568
|
-
}], enableSingleSelection: [{
|
|
569
|
-
type: Input
|
|
570
|
-
}], lastColumnTemplate: [{
|
|
571
|
-
type: Input
|
|
572
|
-
}], paginationIdentifier: [{
|
|
573
|
-
type: Input
|
|
574
|
-
}], showSelectionColumn: [{
|
|
575
|
-
type: Input
|
|
576
|
-
}], striped: [{
|
|
577
|
-
type: Input
|
|
578
|
-
}], hideToolbar: [{
|
|
579
|
-
type: Input
|
|
580
|
-
}], lockedTooltipTranslationKey: [{
|
|
581
|
-
type: Input
|
|
582
|
-
}], movingRowsEnabled: [{
|
|
583
|
-
type: Input
|
|
584
|
-
}], dragAndDrop: [{
|
|
585
|
-
type: Input
|
|
586
|
-
}], dragAndDropDisabled: [{
|
|
587
|
-
type: Input
|
|
588
|
-
}], rowClicked: [{
|
|
589
|
-
type: Output
|
|
590
|
-
}], paginationClicked: [{
|
|
591
|
-
type: Output
|
|
592
|
-
}], paginationSet: [{
|
|
593
|
-
type: Output
|
|
594
|
-
}], search: [{
|
|
595
|
-
type: Output
|
|
596
|
-
}], sortChanged: [{
|
|
597
|
-
type: Output
|
|
598
|
-
}], moveRow: [{
|
|
599
|
-
type: Output
|
|
600
|
-
}], itemsReordered: [{
|
|
601
|
-
type: Output
|
|
602
|
-
}] } });
|
|
603
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyYm9uLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9jYXJib24tbGlzdC9jYXJib24tbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NhcmJvbi1saXN0L2NhcmJvbi1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBR2xGLE9BQU8sRUFLTCxLQUFLLEVBQ0wsZUFBZSxFQUNmLFNBQVMsRUFDVCxVQUFVLEdBQ1gsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUMsR0FBRyxJQUFJLElBQUksRUFBRSxPQUFPLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFFNUMsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2IsWUFBWSxFQUNaLEdBQUcsRUFFSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFNBQVMsRUFDVCxJQUFJLEdBQ0wsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBQyx3QkFBd0IsRUFBRSx3QkFBd0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FB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QUMsaUJBQWlCO2dCQUNGLE1BQU07c0JBQS9CLFNBQVM7dUJBQUMsS0FBSztnQkFjSCxLQUFLO3NCQUFqQixLQUFLO2dCQVFPLE1BQU07c0JBQWxCLEtBQUs7Z0JBUU8saUJBQWlCO3NCQUE3QixLQUFLO2dCQUlHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBS0ssVUFBVTtzQkFEcEIsS0FBSztnQkF1QkcsT0FBTztzQkFBZixLQUFLO2dCQUtHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRU8sZ0JBQWdCO3NCQUE1QixLQUFLO2dCQU9PLFNBQVM7c0JBQXJCLEtBQUs7Z0JBS0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBSUcsa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csMkJBQTJCO3NCQUFuQyxLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFFSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Rm9ybUNvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7QXJyb3dEb3duMTYsIEFycm93VXAxNiwgRHJhZ2dhYmxlMTYsIFNldHRpbmdzVmlldzE2fSBmcm9tICdAY2FyYm9uL2ljb25zJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1NvcnRTdGF0ZX0gZnJvbSAnQHZhbHRpbW8vZG9jdW1lbnQnO1xuaW1wb3J0IHtcbiAgSWNvblNlcnZpY2UsXG4gIE92ZXJmbG93TWVudSxcbiAgUGFnaW5hdGlvbk1vZGVsLFxuICBQYWdpbmF0aW9uVHJhbnNsYXRpb25zLFxuICBUYWJsZSxcbiAgVGFibGVIZWFkZXJJdGVtLFxuICBUYWJsZUl0ZW0sXG4gIFRhYmxlTW9kZWwsXG59IGZyb20gJ2NhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXInO1xuaW1wb3J0IHtnZXQgYXMgX2dldCwgaXNBcnJheX0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7TkdYTG9nZ2VyfSBmcm9tICduZ3gtbG9nZ2VyJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgZGVib3VuY2VUaW1lLFxuICBtYXAsXG4gIE9ic2VydmFibGUsXG4gIHN0YXJ0V2l0aCxcbiAgU3Vic2NyaXB0aW9uLFxuICBzd2l0Y2hNYXAsXG4gIHRha2UsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaWx0ZXIsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtCT09MRUFOX0NPTlZFUlRFUl9WQUxVRVMsIENBU0VTX1dJVEhPVVRfU1RBVFVTX0tFWX0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7XG4gIEFjdGlvbkl0ZW0sXG4gIENhcmJvbkxpc3RCYXRjaFRleHQsXG4gIENhcmJvbkxpc3RJdGVtLFxuICBDYXJib25MaXN0VHJhbnNsYXRpb25zLFxuICBDYXJib25QYWdpbmF0b3JDb25maWcsXG4gIENhcmJvblRhZyxcbiAgQ29sdW1uQ29uZmlnLFxuICBERUZBVUxUX0xJU1RfVFJBTlNMQVRJT05TLFxuICBERUZBVUxUX1BBR0lOQVRJT04sXG4gIERFRkFVTFRfUEFHSU5BVE9SX0NPTkZJRyxcbiAgTW92ZVJvd0RpcmVjdGlvbixcbiAgTW92ZVJvd0V2ZW50LFxuICBQYWdpbmF0aW9uLFxuICBUQUdfRUxMSVBTSVNfTElNSVQsXG4gIFZpZXdUeXBlLFxufSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtFbGxpcHNpc1BpcGV9IGZyb20gJy4uLy4uL3BpcGVzJztcbmltcG9ydCB7S2V5U3RhdGVTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9rZXktc3RhdGUuc2VydmljZSc7XG5pbXBvcnQge1ZpZXdDb250ZW50U2VydmljZX0gZnJvbSAnLi4vdmlldy1jb250ZW50L3ZpZXctY29udGVudC5zZXJ2aWNlJztcbmltcG9ydCB7Q2FyYm9uTGlzdEZpbHRlclBpcGV9IGZyb20gJy4vQ2FyYm9uTGlzdEZpbHRlclBpcGUuZGlyZWN0aXZlJztcbmltcG9ydCB7Q2FyYm9uTGlzdERyYWdBbmREcm9wU2VydmljZX0gZnJvbSAnLi9zZXJ2aWNlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tY2FyYm9uLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2FyYm9uLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jYXJib24tbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbQ2FyYm9uTGlzdEZpbHRlclBpcGUsIENhcmJvbkxpc3REcmFnQW5kRHJvcFNlcnZpY2VdLFxufSlcbmV4cG9ydCBjbGFzcyBDYXJib25MaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKCdhY3Rpb25zTWVudVRlbXBsYXRlJykgYWN0aW9uc01lbnVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8T3ZlcmZsb3dNZW51PjtcbiAgQFZpZXdDaGlsZCgnYWN0aW9uVGVtcGxhdGUnKSBhY3Rpb25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZCgnYm9vbGVhblRlbXBsYXRlJykgYm9vbGVhblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAVmlld0NoaWxkKCdtb3ZlUm93c1RlbXBsYXRlJykgbW92ZVJvd3NUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZCgnZHJhZ0FuZERyb3BUZW1wbGF0ZScpIGRyYWdBbmREcm9wVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBWaWV3Q2hpbGQoJ3Jvd0Rpc2FibGVkJykgcm93RGlzYWJsZWQ6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBWaWV3Q2hpbGQoJ3RhZ1RlbXBsYXRlJykgdGFnVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBWaWV3Q2hpbGQoJ2RlZmF1bHRUZW1wbGF0ZScpIGRlZmF1bHRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZChUYWJsZSkgcHJpdmF0ZSBfdGFibGU6IFRhYmxlO1xuXG4gIHByaXZhdGUgX2NvbXBsZXRlRGF0YVNvdXJjZTogVGFibGVJdGVtW11bXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9pdGVtcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENhcmJvbkxpc3RJdGVtW10+KFtdKTtcblxuICBwcml2YXRlIGdldCBfaXRlbXMoKTogQ2FyYm9uTGlzdEl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBpdGVtcygpOiBDYXJib25MaXN0SXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXM7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgaXRlbXModmFsdWU6IENhcmJvbkxpc3RJdGVtW10pIHtcbiAgICB0aGlzLl9pdGVtcyQubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgY3VycmVudE9wZW5BY3Rpb25JZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZmllbGRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29sdW1uQ29uZmlnW10+KFtdKTtcblxuICBASW5wdXQoKSBzZXQgZmllbGRzKHZhbHVlOiBDb2x1bW5Db25maWdbXSkge1xuICAgIHRoaXMuX2ZpZWxkcyQubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIF90YWJsZVRyYW5zbGF0aW9ucyQ6IEJlaGF2aW9yU3ViamVjdDxDYXJib25MaXN0VHJhbnNsYXRpb25zPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoXG4gICAgREVGQVVMVF9MSVNUX1RSQU5TTEFUSU9OU1xuICApO1xuXG4gIEBJbnB1dCgpIHNldCB0YWJsZVRyYW5zbGF0aW9ucyh2YWx1ZTogUGFydGlhbDxDYXJib25MaXN0VHJhbnNsYXRpb25zPikge1xuICAgIHRoaXMuX3RhYmxlVHJhbnNsYXRpb25zJC5uZXh0KHsuLi5ERUZBVUxUX0xJU1RfVFJBTlNMQVRJT05TLCAuLi52YWx1ZX0pO1xuICB9XG5cbiAgQElucHV0KCkgcGFnaW5hdG9yQ29uZmlnOiBDYXJib25QYWdpbmF0b3JDb25maWcgPSBERUZBVUxUX1BBR0lOQVRPUl9DT05GSUc7XG4gIHByaXZhdGUgX3BhZ2luYXRpb246IFBhZ2luYXRpb247XG4gIHByaXZhdGUgX2lzUGFnaW5hdGlvbkluaXQgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHBhZ2luYXRpb24odmFsdWU6IFBhcnRpYWw8UGFnaW5hdGlvbj4gfCBmYWxzZSkge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX3BhZ2luYXRpb24pIHtcbiAgICAgIHRoaXMuX3BhZ2luYXRpb24gPSB7Li4uREVGQVVMVF9QQUdJTkFUSU9OLCAuLi52YWx1ZX07XG4gICAgfVxuXG4gICAgdGhpcy5fcGFnaW5hdGlvbiA9IHsuLi50aGlzLl9wYWdpbmF0aW9uLCAuLi52YWx1ZX07XG4gICAgdGhpcy5idWlsZFBhZ2luYXRpb25Nb2RlbCgpO1xuXG4gICAgaWYgKHRoaXMuX2lzUGFnaW5hdGlvbkluaXQgfHwgIXZhbHVlLnNpemUpIHJldHVybjtcblxuICAgIHRoaXMuc2V0UGFnaW5hdGlvblNpemUodmFsdWUuc2l6ZS50b1N0cmluZygpKTtcbiAgICB0aGlzLl9pc1BhZ2luYXRpb25Jbml0ID0gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcGFnaW5hdGlvbigpOiBQYWdpbmF0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fcGFnaW5hdGlvbjtcbiAgfVxuXG4gIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFRoZSBhY3Rpb25zIGZpZWxkIGlzIGRlcHJlY2F0ZWQuIEFjdGlvbnMgY2FuIGJlIGFkZGVkIHRocm91Z2ggdGhlICoqQElucHV0IGZpZWxkKiouXG4gICAqL1xuICBASW5wdXQoKSBhY3Rpb25zOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKSBhY3Rpb25JdGVtczogQWN0aW9uSXRlbVtdO1xuICBASW5wdXQoKSBoZWFkZXI6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGhpZGVDb2x1bW5IZWFkZXI6IGJvb2xlYW47XG4gIHByaXZhdGUgX2lzU29ydEluaXQgPSBmYWxzZTtcbiAgQElucHV0KCkgc2V0IGluaXRpYWxTb3J0U3RhdGUodmFsdWU6IFNvcnRTdGF0ZSkge1xuICAgIGlmICghdmFsdWUgfHwgdGhpcy5faXNTb3J0SW5pdCkgcmV0dXJuO1xuXG4gICAgdGhpcy5faXNTb3J0SW5pdCA9IHRydWU7XG4gICAgdGhpcy5zb3J0JC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBzb3J0U3RhdGUodmFsdWU6IFNvcnRTdGF0ZSkge1xuICAgIGlmICghdmFsdWUpIHJldHVybjtcbiAgICB0aGlzLnNvcnQkLm5leHQodmFsdWUpO1xuICB9XG5cbiAgQElucHV0KCkgaXNTZWFyY2hhYmxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIGVuYWJsZVNpbmdsZVNlbGVjdGlvbiA9IGZhbHNlO1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVGhlIGxhc3RDb2x1bW5UZW1wbGF0ZSBmaWVsZCBpcyBkZXByZWNhdGVkLiBBbnkgdGVtcGxhdGUgY29sdW1uIGNhbiBiZSBhZGRlZCB0aHJvdWdoIHRoZSAqKkBJbnB1dCBmaWVsZCoqLlxuICAgKi9cbiAgQElucHV0KCkgbGFzdENvbHVtblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBwYWdpbmF0aW9uSWRlbnRpZmllcjogc3RyaW5nO1xuICBASW5wdXQoKSBzaG93U2VsZWN0aW9uQ29sdW1uID0gZmFsc2U7XG4gIEBJbnB1dCgpIHN0cmlwZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgaGlkZVRvb2xiYXIgPSBmYWxzZTtcbiAgQElucHV0KCkgbG9ja2VkVG9vbHRpcFRyYW5zbGF0aW9uS2V5ID0gJyc7XG4gIEBJbnB1dCgpIG1vdmluZ1Jvd3NFbmFibGVkOiBib29sZWFuO1xuICBASW5wdXQoKSBkcmFnQW5kRHJvcCA9IGZhbHNlO1xuICBASW5wdXQoKSBkcmFnQW5kRHJvcERpc2FibGVkID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIHJvd0NsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHBhZ2luYXRpb25DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSBwYWdpbmF0aW9uU2V0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBzZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHNvcnRDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxTb3J0U3RhdGU+KCk7XG4gIEBPdXRwdXQoKSBtb3ZlUm93ID0gbmV3IEV2ZW50RW1pdHRlcjxNb3ZlUm93RXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBpdGVtc1Jlb3JkZXJlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q2FyYm9uTGlzdEl0ZW1bXT4oKTtcblxuICBwdWJsaWMgYmF0Y2hUZXh0JDogT2JzZXJ2YWJsZTxDYXJib25MaXN0QmF0Y2hUZXh0PiA9IHRoaXMuX3RhYmxlVHJhbnNsYXRpb25zJC5waXBlKFxuICAgIHN3aXRjaE1hcCgodHJhbnNsYXRpb25zOiBDYXJib25MaXN0VHJhbnNsYXRpb25zKSA9PlxuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0odHJhbnNsYXRpb25zLnNlbGVjdC5zaW5nbGUpLFxuICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKHRyYW5zbGF0aW9ucy5zZWxlY3QubXVsdGlwbGUpLFxuICAgICAgXSkucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKFxuICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRyYW5zbGF0aW9ucy5zZWxlY3Quc2luZ2xlKSxcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0cmFuc2xhdGlvbnMuc2VsZWN0Lm11bHRpcGxlKVxuICAgICAgICApXG4gICAgICApXG4gICAgKSxcbiAgICBtYXAoKFtTSU5HTEUsIE1VTFRJUExFXSkgPT4gKHtTSU5HTEUsIE1VTFRJUExFfSkpXG4gICk7XG5cbiAgcHVibGljIHBhZ2luYXRpb25UcmFuc2xhdGlvbnMkOiBPYnNlcnZhYmxlPFBhcnRpYWw8UGFnaW5hdGlvblRyYW5zbGF0aW9ucz4+ID1cbiAgICB0aGlzLl90YWJsZVRyYW5zbGF0aW9ucyQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgodHJhbnNsYXRpb25zOiBDYXJib25MaXN0VHJhbnNsYXRpb25zKSA9PlxuICAgICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKHRyYW5zbGF0aW9ucy5wYWdpbmF0aW9uLml0ZW1zUGVyUGFnZSksXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSh0cmFuc2xhdGlvbnMucGFnaW5hdGlvbi50b3RhbEl0ZW0pLFxuICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0odHJhbnNsYXRpb25zLnBhZ2luYXRpb24udG90YWxJdGVtcyksXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSgnaW50ZXJmYWNlLmxpc3Qub2ZMYXN0UGFnZScpLFxuICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2ludGVyZmFjZS5saXN0Lm9mTGFzdFBhZ2VzJyksXG4gICAgICAgIF0pXG4gICAgICApLFxuICAgICAgbWFwKChbSVRFTVNfUEVSX1BBR0UsIFRPVEFMX0lURU0sIFRPVEFMX0lURU1TLCBPRl9MQVNUX1BBR0UsIE9GX0xBU1RfUEFHRVNdKSA9PiAoe1xuICAgICAgICBJVEVNU19QRVJfUEFHRSxcbiAgICAgICAgVE9UQUxfSVRFTSxcbiAgICAgICAgVE9UQUxfSVRFTVMsXG4gICAgICAgIE9GX0xBU1RfUEFHRSxcbiAgICAgICAgT0ZfTEFTVF9QQUdFUyxcbiAgICAgIH0pKVxuICAgICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHNvcnQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTb3J0U3RhdGU+KHtcbiAgICBzdGF0ZToge25hbWU6ICcnLCBkaXJlY3Rpb246ICdERVNDJ30sXG4gICAgaXNTb3J0aW5nOiBmYWxzZSxcbiAgfSk7XG4gIHB1YmxpYyByZWFkb25seSB0YWdNb2RhbE9wZW4kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyByZWFkb25seSB0YWdNb2RhbERhdGEkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDYXJib25UYWdbXT4oW10pO1xuXG4gIHB1YmxpYyByZWFkb25seSBDQVNFU19XSVRIT1VUX1NUQVRVU19LRVkgPSBDQVNFU19XSVRIT1VUX1NUQVRVU19LRVk7XG4gIHB1YmxpYyByZWFkb25seSBWaWV3VHlwZSA9IFZpZXdUeXBlO1xuICBwdWJsaWMgc2tlbGV0b25Nb2RlbCA9IFRhYmxlLnNrZWxldG9uTW9kZWwoNSwgNSk7XG4gIHB1YmxpYyBwYWdpbmF0aW9uTW9kZWw6IFBhZ2luYXRpb25Nb2RlbDtcbiAgcHVibGljIHNlYXJjaEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnKTtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBQQUdJTkFUSU9OX1NJWkUgPSAnUGFnaW5hdGlvblNpemUnO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRJdGVtcygpOiBDYXJib25MaXN0SXRlbVtdIHtcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMuX3RhYmxlLm1vZGVsO1xuXG4gICAgcmV0dXJuIG1vZGVsLmRhdGEucmVkdWNlKFxuICAgICAgKGl0ZW1zOiBDYXJib25MaXN0SXRlbVtdLCBfLCBpbmRleDogbnVtYmVyKSA9PlxuICAgICAgICBtb2RlbC5pc1Jvd1NlbGVjdGVkKGluZGV4KSA/IFsuLi5pdGVtcywgdGhpcy5pdGVtc1tpbmRleF1dIDogWy4uLml0ZW1zXSxcbiAgICAgIFtdXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZXdJbml0aWFsaXplZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBwdWJsaWMgZ2V0IHZpZXdJbml0aWFsaXplZCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3ZpZXdJbml0aWFsaXplZCQucGlwZShmaWx0ZXIoaW5pdGlhbGl6ZWQgPT4gaW5pdGlhbGl6ZWQpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbW9kZWwoKTogVGFibGVNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RhYmxlLm1vZGVsO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbGxpcHNpc1BpcGU6IEVsbGlwc2lzUGlwZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZpbHRlclBpcGU6IENhcmJvbkxpc3RGaWx0ZXJQaXBlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaWNvblNlcnZpY2U6IEljb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyOiBOR1hMb2dnZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdmlld0NvbnRlbnRTZXJ2aWNlOiBWaWV3Q29udGVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBrZXlTdGF0ZVNlcnZpY2U6IEtleVN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRyYWdBbmREcm9wU2VydmljZTogQ2FyYm9uTGlzdERyYWdBbmREcm9wU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWY6IEVsZW1lbnRSZWZcbiAgKSB7XG4gICAgdGhpcy5pY29uU2VydmljZS5yZWdpc3RlckFsbChbQXJyb3dEb3duMTYsIEFycm93VXAxNiwgU2V0dGluZ3NWaWV3MTYsIERyYWdnYWJsZTE2XSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGFnaW5hdGlvbikge1xuICAgICAgdGhpcy5sb2FkUGFnaW5hdGlvblNpemUoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuc2VhcmNoRm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICAgIC5waXBlKGRlYm91bmNlVGltZSg1MDApKVxuICAgICAgICAuc3Vic2NyaWJlKChzZWFyY2hTdHJpbmc6IHN0cmluZyB8IG51bGwpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2gub2JzZXJ2ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoLmVtaXQoc2VhcmNoU3RyaW5nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXNlYXJjaFN0cmluZykge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVyZWRJdGVtcyQubmV4dChudWxsKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9maWx0ZXJlZEl0ZW1zJC5uZXh0KFxuICAgICAgICAgICAgdGhpcy5maWx0ZXJQaXBlLnRyYW5zZm9ybSh0aGlzLl9jb21wbGV0ZURhdGFTb3VyY2UsIHNlYXJjaFN0cmluZyA/PyAnJylcbiAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3ZpZXdJbml0aWFsaXplZCQubmV4dCh0cnVlKTtcbiAgICB0aGlzLm9wZW5EcmFnQW5kRHJvcFN1YnNjcmlwdGlvbigpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBvcGVuRHJhZ0FuZERyb3BTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLmRyYWdBbmREcm9wU2VydmljZS5kcmFnQW5kRHJvcEV2ZW50cyQuc3Vic2NyaWJlKGRyYWdBbmREcm9wRXZlbnQgPT4ge1xuICAgICAgICBjb25zdCByZW9yZGVyZWRJdGVtcyA9IHRoaXMuc3dhcEl0ZW1zKFxuICAgICAgICAgIHRoaXMuX2l0ZW1zLFxuICAgICAgICAgIGRyYWdBbmREcm9wRXZlbnQuc3RhcnRJbmRleCxcbiAgICAgICAgICBkcmFnQW5kRHJvcEV2ZW50Lm5ld0luZGV4XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuaXRlbXNSZW9yZGVyZWQuZW1pdChyZW9yZGVyZWRJdGVtcyk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgb25Sb3dDbGljayhpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgcm93RGF0YSA9IHRoaXMuX3RhYmxlLm1vZGVsLmRhdGFbaW5kZXhdO1xuICAgIGNvbnN0IGZpcnN0SXRlbVdpdGhEYXRhID0gcm93RGF0YS5maW5kKGl0ZW0gPT4gISFpdGVtWydpdGVtJ10pO1xuICAgIGNvbnN0IGZpcnN0SXRlbSA9IGZpcnN0SXRlbVdpdGhEYXRhPy5bJ2l0ZW0nXTtcblxuICAgIGlmIChmaXJzdEl0ZW0pIGZpcnN0SXRlbS5jdHJsQ2xpY2sgPSB0aGlzLmtleVN0YXRlU2VydmljZS5nZXRDdHJsT3JDbWRTdGF0ZSgpO1xuXG4gICAgaWYgKCFmaXJzdEl0ZW0gfHwgZmlyc3RJdGVtPy5sb2NrZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5yb3dDbGlja2VkLmVtaXQoZmlyc3RJdGVtKTtcbiAgfVxuXG4gIHB1YmxpYyBvblNlbGVjdFBhZ2UocGFnZTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBhZ2luYXRpb25Nb2RlbC5wYWdlTGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGFnaW5hdGlvbi5zaXplICE9PSB0aGlzLnBhZ2luYXRpb25Nb2RlbC5wYWdlTGVuZ3RoKSB7XG4gICAgICB0aGlzLnNldFBhZ2luYXRpb25TaXplKHRoaXMucGFnaW5hdGlvbk1vZGVsLnBhZ2VMZW5ndGgudG9TdHJpbmcoKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wYWdpbmF0aW9uQ2xpY2tlZC5lbWl0KHBhZ2UpO1xuICB9XG5cbiAgcHVibGljIG9uU29ydChoZWFkZXJJdGVtOiBUYWJsZUhlYWRlckl0ZW0gJiB7a2V5OiBzdHJpbmd9KTogdm9pZCB7XG4gICAgY29uc3Qge2tleSwgc29ydGFibGV9ID0gaGVhZGVySXRlbTtcbiAgICBpZiAoIXNvcnRhYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zb3J0JC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShzb3J0ID0+IHtcbiAgICAgIGxldCBuZXdTdGF0ZTogU29ydFN0YXRlO1xuXG4gICAgICBpZiAoc29ydC5zdGF0ZS5uYW1lID09PSBrZXkpIHtcbiAgICAgICAgaWYgKCFzb3J0LmlzU29ydGluZykge1xuICAgICAgICAgIG5ld1N0YXRlID0ge3N0YXRlOiB7Li4uc29ydC5zdGF0ZSwgZGlyZWN0aW9uOiAnREVTQyd9LCBpc1NvcnRpbmc6IHRydWV9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChzb3J0LnN0YXRlLmRpcmVjdGlvbiA9PT0gJ0RFU0MnKSB7XG4gICAgICAgICAgICBuZXdTdGF0ZSA9IHsuLi5zb3J0LCBzdGF0ZTogey4uLnNvcnQuc3RhdGUsIGRpcmVjdGlvbjogJ0FTQyd9fTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB7c3RhdGU6IHsuLi5zb3J0LnN0YXRlLCBkaXJlY3Rpb246ICdERVNDJ30sIGlzU29ydGluZzogZmFsc2V9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3U3RhdGUgPSB7c3RhdGU6IHtuYW1lOiBrZXksIGRpcmVjdGlvbjogJ0RFU0MnfSwgaXNTb3J0aW5nOiB0cnVlfTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zb3J0JC5uZXh0KG5ld1N0YXRlKTtcbiAgICAgIHRoaXMuc29ydENoYW5nZWQuZW1pdChuZXdTdGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25EcmFnU3RhcnQoXG4gICAgbW91c2VFdmVudDogTW91c2VFdmVudCxcbiAgICBjYXJib25FdmVudDoge2luZGV4OiBudW1iZXI7IGl0ZW06IENhcmJvbkxpc3RJdGVtOyBsZW5ndGg6IG51bWJlcn1cbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZHJhZ0FuZERyb3BEaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgdGhpcy5kcmFnQW5kRHJvcFNlcnZpY2Uuc2V0Q2FyYm9uTGlzdEVsZW1lbnRSZWYodGhpcy5lbGVtZW50UmVmKTtcbiAgICB0aGlzLmRyYWdBbmREcm9wU2VydmljZS5zdGFydERyYWcobW91c2VFdmVudC55LCBjYXJib25FdmVudC5pbmRleCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGFnaW5hdGlvbk1vZGVsKCk6IHZvaWQge1xuICAgIHRoaXMucGFnaW5hdGlvbk1vZGVsID0ge1xuICAgICAgY3VycmVudFBhZ2U6IHRoaXMucGFnaW5hdGlvbi5wYWdlLFxuICAgICAgdG90YWxEYXRhTGVuZ3RoOiArdGhpcy5wYWdpbmF0aW9uLmNvbGxlY3Rpb25TaXplLFxuICAgICAgcGFnZUxlbmd0aDogdGhpcy5wYWdpbmF0aW9uLnNpemUsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX3RyYW5zbGF0ZWRGaWVsZHMkOiBPYnNlcnZhYmxlPENvbHVtbkNvbmZpZ1tdPiA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2tleScpLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuX2ZpZWxkcyQpLFxuICAgIGZpbHRlcigoZmllbGRzOiBDb2x1bW5Db25maWdbXSkgPT4gISFmaWVsZHMpLFxuICAgIG1hcCgoZmllbGRzOiBDb2x1bW5Db25maWdbXSkgPT5cbiAgICAgIGZpZWxkcy5tYXAoKGZpZWxkOiBDb2x1bW5Db25maWcpID0+ICh7XG4gICAgICAgIC4uLmZpZWxkLFxuICAgICAgICBsYWJlbDogIWZpZWxkLmxhYmVsID8gJycgOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChmaWVsZC5sYWJlbCksXG4gICAgICB9KSlcbiAgICApXG4gICk7XG5cbiAgcHJpdmF0ZSBfaGVhZGVySXRlbXMkOiBPYnNlcnZhYmxlPFRhYmxlSGVhZGVySXRlbVtdPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuX3RyYW5zbGF0ZWRGaWVsZHMkLFxuICAgIHRoaXMuc29ydCQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbdHJhbnNsYXRlZEZpZWxkcywgc29ydFN0YXRlXSkgPT5cbiAgICAgIHRyYW5zbGF0ZWRGaWVsZHMubWFwKFxuICAgICAgICAoZmllbGQ6IENvbHVtbkNvbmZpZykgPT5cbiAgICAgICAgICBuZXcgVGFibGVIZWFkZXJJdGVtKHtcbiAgICAgICAgICAgIGRhdGE6IGZpZWxkLmxhYmVsLFxuICAgICAgICAgICAgc29ydGFibGU6IGZpZWxkLnNvcnRhYmxlLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiBmaWVsZC5jbGFzc05hbWUsXG4gICAgICAgICAgICBrZXk6IGZpZWxkLmtleSxcbiAgICAgICAgICAgIHNvcnRlZDogc29ydFN0YXRlLmlzU29ydGluZyAmJiBmaWVsZC5rZXkgPT09IHNvcnRTdGF0ZS5zdGF0ZS5uYW1lLFxuICAgICAgICAgICAgYXNjZW5kaW5nOiBmaWVsZC5rZXkgPT09IHNvcnRTdGF0ZS5zdGF0ZS5uYW1lICYmIHNvcnRTdGF0ZS5zdGF0ZS5kaXJlY3Rpb24gPT09ICdBU0MnLFxuICAgICAgICAgIH0pXG4gICAgICApXG4gICAgKSxcbiAgICBtYXAoKGhlYWRlcjogVGFibGVIZWFkZXJJdGVtW10pID0+IFtcbiAgICAgIC4uLnRoaXMuZHJhZ0FuZERyb3BIZWFkZXJDb2x1bW5zLFxuICAgICAgLi4uaGVhZGVyLFxuICAgICAgLi4udGhpcy5leHRyYUNvbHVtbnMsXG4gICAgXSlcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF90YWJsZUl0ZW1zJDogT2JzZXJ2YWJsZTxUYWJsZUl0ZW1bXVtdPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuX2ZpZWxkcyQsXG4gICAgdGhpcy5faXRlbXMkLFxuICAgIHRoaXMuX3ZpZXdJbml0aWFsaXplZCQsXG4gIF0pLnBpcGUoXG4gICAgZmlsdGVyKChbZmllbGRzLCBpdGVtcywgdmlld0luaXRpYWxpemVkXSkgPT4gISFmaWVsZHMgJiYgISFpdGVtcyAmJiB2aWV3SW5pdGlhbGl6ZWQpLFxuICAgIG1hcCgoW2ZpZWxkcywgaXRlbXNdKSA9PlxuICAgICAgaXRlbXMubWFwKChpdGVtOiBDYXJib25MaXN0SXRlbSwgaW5kZXg6IG51bWJlcikgPT4gW1xuICAgICAgICAuLi50aGlzLmdldERyYWdBbmREcm9wSXRlbXNJdGVtcyhpdGVtLCBpbmRleCwgaXRlbXMubGVuZ3RoKSxcbiAgICAgICAgLi4uZmllbGRzLm1hcCgoZmllbGQ6IENvbHVtbkNvbmZpZykgPT4ge1xuICAgICAgICAgIHN3aXRjaCAoZmllbGQudmlld1R5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgVmlld1R5cGUuVEVNUExBVEU6XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgVGFibGVJdGVtKHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7aXRlbSwgaW5kZXgsIGxlbmd0aDogaXRlbXMubGVuZ3RoLCAuLi5maWVsZC50ZW1wbGF0ZURhdGF9LFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBmaWVsZC50ZW1wbGF0ZSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjYXNlIFZpZXdUeXBlLkJPT0xFQU46XG4gICAgICAgICAgICAgIGxldCBkYXRhID0gdGhpcy5yZXNvbHZlT2JqZWN0KGZpZWxkLCBpdGVtKTtcbiAgICAgICAgICAgICAgZGF0YSA9ICFCT09MRUFOX0NPTlZFUlRFUl9WQUxVRVMuaW5jbHVkZXMoZGF0YSlcbiAgICAgICAgICAgICAgICA/IGRhdGFcbiAgICAgICAgICAgICAgICA6IGAkeyd2aWV3VHlwZUNvbnZlcnRlci4nICsgZGF0YX1gO1xuICAgICAgICAgICAgICByZXR1cm4gbmV3IFRhYmxlSXRlbSh7XG4gICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogdGhpcy5ib29sZWFuVGVtcGxhdGUsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY2FzZSBWaWV3VHlwZS5UQUdTOiB7XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgVGFibGVJdGVtKHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICB0YWdzOiB0aGlzLnJlc29sdmVUYWdPYmplY3QoaXRlbSwgZmllbGQua2V5KSxcbiAgICAgICAgICAgICAgICAgIHRhZ0Ftb3VudDogZmllbGQ/LnRhZ0Ftb3VudCB8fCAxLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IHRoaXMudGFnVGVtcGxhdGUsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRPYmplY3Q6IHN0cmluZyA9IHRoaXMucmVzb2x2ZU9iamVjdChmaWVsZCwgaXRlbSk7XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgVGFibGVJdGVtKHtcbiAgICAgICAgICAgICAgICB0aXRsZTogcmVzb2x2ZWRPYmplY3QgPz8gJy0nLFxuICAgICAgICAgICAgICAgIGRhdGE6XG4gICAgICAgICAgICAgICAgICAoZmllbGQudG9vbHRpcENoYXJMaW1pdFxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZWxsaXBzaXNQaXBlLnRyYW5zZm9ybShyZXNvbHZlZE9iamVjdCwgZmllbGQudG9vbHRpcENoYXJMaW1pdClcbiAgICAgICAgICAgICAgICAgICAgOiByZXNvbHZlZE9iamVjdCkgPz8gJy0nLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiB0aGlzLmRlZmF1bHRUZW1wbGF0ZSxcbiAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICAuLi50aGlzLmdldEV4dHJhSXRlbXMoaXRlbSwgaW5kZXgsIGl0ZW1zLmxlbmd0aCksXG4gICAgICBdKVxuICAgICksXG4gICAgdGFwKChkYXRhOiBUYWJsZUl0ZW1bXVtdKSA9PiB7XG4gICAgICB0aGlzLl9jb21wbGV0ZURhdGFTb3VyY2UgPSBkYXRhO1xuICAgIH0pXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZmlsdGVyZWRJdGVtcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRhYmxlSXRlbVtdW10gfCBudWxsPihudWxsKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgbW9kZWwkOiBPYnNlcnZhYmxlPFRhYmxlTW9kZWw+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5faGVhZGVySXRlbXMkLFxuICAgIHRoaXMuX3RhYmxlSXRlbXMkLFxuICAgIHRoaXMuX2ZpbHRlcmVkSXRlbXMkLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW2hlYWRlciwgZGF0YSwgZmlsdGVyZWREYXRhXSkgPT4ge1xuICAgICAgY29uc3QgbW9kZWwgPSBuZXcgVGFibGVNb2RlbCgpO1xuICAgICAgbW9kZWwuaGVhZGVyID0gaGVhZGVyO1xuICAgICAgbW9kZWwuZGF0YSA9IGZpbHRlcmVkRGF0YSA/PyBkYXRhO1xuICAgICAgcmV0dXJuIG1vZGVsO1xuICAgIH0pLFxuICAgIHN0YXJ0V2l0aChuZXcgVGFibGVNb2RlbCgpKVxuICApO1xuXG4gIHByaXZhdGUgZ2V0IGRyYWdBbmREcm9wSGVhZGVyQ29sdW1ucygpOiBUYWJsZUhlYWRlckl0ZW1bXSB7XG4gICAgY29uc3QgZW1wdHlIZWFkZXIgPSBuZXcgVGFibGVIZWFkZXJJdGVtKCk7XG5cbiAgICBlbXB0eUhlYWRlci5zb3J0YWJsZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLih0aGlzLmRyYWdBbmREcm9wXG4gICAgICAgID8gW1xuICAgICAgICAgICAgbmV3IFRhYmxlSGVhZGVySXRlbSh7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3ZhbHRpbW8tY2FyYm9uLWxpc3RfX2FjdGlvbnMnLFxuICAgICAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdXG4gICAgICAgIDogW10pLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGdldCBleHRyYUNvbHVtbnMoKTogVGFibGVIZWFkZXJJdGVtW10ge1xuICAgIGNvbnN0IGVtcHR5SGVhZGVyID0gbmV3IFRhYmxlSGVhZGVySXRlbSgpO1xuXG4gICAgZW1wdHlIZWFkZXIuc29ydGFibGUgPSBmYWxzZTtcblxuICAgIHJldHVybiBbXG4gICAgICAuLi4odGhpcy5tb3ZpbmdSb3dzRW5hYmxlZFxuICAgICAgICA/IFtcbiAgICAgICAgICAgIG5ldyBUYWJsZUhlYWRlckl0ZW0oe1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICd2YWx0aW1vLWNhcmJvbi1saXN0X19hY3Rpb25zJyxcbiAgICAgICAgICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgXVxuICAgICAgICA6IFtdKSxcbiAgICAgIC4uLighIXRoaXMuYWN0aW9uc1xuICAgICAgICA/IHRoaXMuYWN0aW9ucy5tYXAoXG4gICAgICAgICAgICBhY3Rpb24gPT5cbiAgICAgICAgICAgICAgbmV3IFRhYmxlSGVhZGVySXRlbSh7XG4gICAgICAgICAgICAgICAgZGF0YTogYWN0aW9uLmNvbHVtbk5hbWUsXG4gICAgICAgICAgICAgICAga2V5OiBhY3Rpb24uY29sdW1uTmFtZSxcbiAgICAgICAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICA6IFtdKSxcbiAgICAgIC4uLighIXRoaXMubGFzdENvbHVtblRlbXBsYXRlID8gW2VtcHR5SGVhZGVyXSA6IFtdKSxcbiAgICAgIC4uLih0aGlzLl9pdGVtcz8uc29tZShpdGVtID0+IGl0ZW0ubG9ja2VkKSA/IFtlbXB0eUhlYWRlcl0gOiBbXSksXG4gICAgICAuLi4oISF0aGlzLmFjdGlvbkl0ZW1zXG4gICAgICAgID8gW1xuICAgICAgICAgICAgbmV3IFRhYmxlSGVhZGVySXRlbSh7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3ZhbHRpbW8tY2FyYm9uLWxpc3RfX2FjdGlvbnMnLFxuICAgICAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdXG4gICAgICAgIDogW10pLFxuICAgIF07XG4gIH1cblxuICBwdWJsaWMgb25Nb3ZlRG93bkNsaWNrKFxuICAgIGV2ZW50OiBFdmVudCxcbiAgICBkYXRhOiB7aW5kZXg6IG51bWJlcjsgaXRlbTogQ2FyYm9uTGlzdEl0ZW07IGxlbmd0aDogbnVtYmVyfVxuICApOiB2b2lkIHtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblxuICAgIGNvbnN0IG1vdmVSb3dFdmVudCA9IHtcbiAgICAgIGRpcmVjdGlvbjogTW92ZVJvd0RpcmVjdGlvbi5ET1dOLFxuICAgICAgaW5kZXg6IGRhdGEuaW5kZXgsXG4gICAgfTtcbiAgICBjb25zdCBvcmRlcmVkSXRlbXMgPSB0aGlzLnN3YXBJdGVtcyh0aGlzLl9pdGVtcywgbW92ZVJvd0V2ZW50LmluZGV4LCBtb3ZlUm93RXZlbnQuaW5kZXggKyAxKTtcblxuICAgIHRoaXMubW92ZVJvdy5lbWl0KG1vdmVSb3dFdmVudCk7XG4gICAgdGhpcy5pdGVtc1Jlb3JkZXJlZC5lbWl0KG9yZGVyZWRJdGVtcyk7XG4gIH1cblxuICBwdWJsaWMgb25Nb3ZlVXBDbGljayhcbiAgICBldmVudDogRXZlbnQsXG4gICAgZGF0YToge2luZGV4OiBudW1iZXI7IGl0ZW06IENhcmJvbkxpc3RJdGVtOyBsZW5ndGg6IG51bWJlcn1cbiAgKTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cbiAgICBjb25zdCBtb3ZlUm93RXZlbnQgPSB7XG4gICAgICBkaXJlY3Rpb246IE1vdmVSb3dEaXJlY3Rpb24uVVAsXG4gICAgICBpbmRleDogZGF0YS5pbmRleCxcbiAgICB9O1xuICAgIGNvbnN0IG9yZGVyZWRJdGVtcyA9IHRoaXMuc3dhcEl0ZW1zKHRoaXMuX2l0ZW1zLCBtb3ZlUm93RXZlbnQuaW5kZXggLSAxLCBtb3ZlUm93RXZlbnQuaW5kZXgpO1xuXG4gICAgdGhpcy5tb3ZlUm93LmVtaXQobW92ZVJvd0V2ZW50KTtcbiAgICB0aGlzLml0ZW1zUmVvcmRlcmVkLmVtaXQob3JkZXJlZEl0ZW1zKTtcbiAgfVxuXG4gIHB1YmxpYyBvblRhZ0NsaWNrKGV2ZW50OiBFdmVudCwgdGFnczogQ2FyYm9uVGFnW10pOiB2b2lkIHtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnRhZ01vZGFsT3BlbiQubmV4dCh0cnVlKTtcbiAgICB0aGlzLnRhZ01vZGFsRGF0YSQubmV4dCh0YWdzKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNsb3NlRXZlbnQoKTogdm9pZCB7XG4gICAgdGhpcy50YWdNb2RhbE9wZW4kLm5leHQoZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZUFjdGlvbk9wZW5DaGFuZ2UoYWN0aW9uSWQ6IHN0cmluZywgaXNPcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKGlzT3Blbikge1xuICAgICAgdGhpcy5jdXJyZW50T3BlbkFjdGlvbklkID0gYWN0aW9uSWQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRPcGVuQWN0aW9uSWQgPT09IGFjdGlvbklkKSB7XG4gICAgICB0aGlzLmN1cnJlbnRPcGVuQWN0aW9uSWQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0RHJhZ0FuZERyb3BJdGVtc0l0ZW1zKFxuICAgIGl0ZW06IENhcmJvbkxpc3RJdGVtLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgbGVuZ3RoOiBudW1iZXJcbiAgKTogVGFibGVJdGVtW10ge1xuICAgIHJldHVybiBbXG4gICAgICAuLi4oISF0aGlzLmRyYWdBbmREcm9wXG4gICAgICAgID8gW25ldyBUYWJsZUl0ZW0oe2RhdGE6IHtpdGVtLCBpbmRleCwgbGVuZ3RofSwgdGVtcGxhdGU6IHRoaXMuZHJhZ0FuZERyb3BUZW1wbGF0ZX0pXVxuICAgICAgICA6IFtdKSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFeHRyYUl0ZW1zKGl0ZW06IENhcmJvbkxpc3RJdGVtLCBpbmRleDogbnVtYmVyLCBsZW5ndGg6IG51bWJlcik6IFRhYmxlSXRlbVtdIHtcbiAgICByZXR1cm4gW1xuICAgICAgLi4uKCEhdGhpcy5hY3Rpb25zXG4gICAgICAgID8gdGhpcy5hY3Rpb25zLm1hcChcbiAgICAgICAgICAgIGFjdGlvbiA9PlxuICAgICAgICAgICAgICBuZXcgVGFibGVJdGVtKHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7aXRlbSwgY2FsbGJhY2s6IGFjdGlvbi5jYWxsYmFjaywgaWNvbkNsYXNzOiBhY3Rpb24uaWNvbkNsYXNzfSxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogdGhpcy5hY3Rpb25UZW1wbGF0ZSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKHRoaXMuX2l0ZW1zPy5zb21lKHRhYmxlSXRlbSA9PiB0YWJsZUl0ZW0ubG9ja2VkKVxuICAgICAgICA/IFtcbiAgICAgICAgICAgIG5ldyBUYWJsZUl0ZW0oe1xuICAgICAgICAgICAgICBkYXRhOiB7bG9ja2VkOiBpdGVtLmxvY2tlZH0sXG4gICAgICAgICAgICAgIHRlbXBsYXRlOiB0aGlzLnJvd0Rpc2FibGVkLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgXVxuICAgICAgICA6IFtdKSxcbiAgICAgIC4uLighIXRoaXMubGFzdENvbHVtblRlbXBsYXRlXG4gICAgICAgID8gW25ldyBUYWJsZUl0ZW0oe2RhdGE6IHtpdGVtLCBpbmRleCwgbGVuZ3RofSwgdGVtcGxhdGU6IHRoaXMubGFzdENvbHVtblRlbXBsYXRlfSldXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKHRoaXMubW92aW5nUm93c0VuYWJsZWRcbiAgICAgICAgPyBbXG4gICAgICAgICAgICBuZXcgVGFibGVJdGVtKHtcbiAgICAgICAgICAgICAgZGF0YToge2l0ZW0sIGluZGV4LCBsZW5ndGh9LFxuICAgICAgICAgICAgICB0ZW1wbGF0ZTogdGhpcy5tb3ZlUm93c1RlbXBsYXRlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgXVxuICAgICAgICA6IFtdKSxcbiAgICAgIC4uLighIXRoaXMuYWN0aW9uSXRlbXNcbiAgICAgICAgPyBbXG4gICAgICAgICAgICBuZXcgVGFibGVJdGVtKHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndmFsdGltby1jYXJib24tbGlzdF9fYWN0aW9ucycsXG4gICAgICAgICAgICAgIGRhdGE6IHthY3Rpb25zOiB0aGlzLmFjdGlvbkl0ZW1zLCBpdGVtfSxcbiAgICAgICAgICAgICAgdGVtcGxhdGU6IHRoaXMuYWN0aW9uc01lbnVUZW1wbGF0ZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXSksXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZFBhZ2luYXRpb25TaXplKCk6IHZvaWQge1xuICAgIGNvbnN0IGVudHJpZXMgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcbiAgICAgIGAke3RoaXMucGFnaW5hdGlvbklkZW50aWZpZXJ9JHtDYXJib25MaXN0Q29tcG9uZW50LlBBR0lOQVRJT05fU0laRX1gXG4gICAgKTtcbiAgICBpZiAoZW50cmllcyAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5wYWdpbmF0aW9uID0ge3NpemU6ICtlbnRyaWVzfTtcbiAgICAgIHRoaXMucGFnaW5hdGlvblNldC5lbWl0KCtlbnRyaWVzKTtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdQYWdpbmF0aW9uIGxvYWRlZCBmcm9tIGxvY2FsIHN0b3JhZ2UgZm9yIHRoaXMgbGlzdC4gQ3VycmVudDogJywgZW50cmllcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAnUGFnaW5hdGlvbiBkb2VzIE5PVCBleGlzdCBpbiBsb2NhbCBzdG9yYWdlIGZvciB0aGlzIGxpc3QuIFdpbGwgdXNlIGRlZmF1bHQuIENoYW5nZSBpdCB0byBjcmVhdGUgYW4gZW50cnkuJ1xuICAgICAgKTtcbiAgICAgIHRoaXMucGFnaW5hdGlvblNldC5lbWl0KDEwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFBhZ2luYXRpb25TaXplKG51bWJlck9mRW50cmllczogc3RyaW5nKTogdm9pZCB7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXG4gICAgICBgJHt0aGlzLnBhZ2luYXRpb25JZGVudGlmaWVyfSR7Q2FyYm9uTGlzdENvbXBvbmVudC5QQUdJTkFUSU9OX1NJWkV9YCxcbiAgICAgIG51bWJlck9mRW50cmllc1xuICAgICk7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ1BhZ2luYXRpb24gc2V0IGluIGxvY2FsIHN0b3JhZ2UgZm9yIHRoaXMgbGlzdDogJywgbnVtYmVyT2ZFbnRyaWVzKTtcbiAgICB0aGlzLnBhZ2luYXRpb25TZXQuZW1pdChudW1iZXJPZkVudHJpZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlT2JqZWN0KGRlZmluaXRpb246IGFueSwgb2JqOiBhbnkpIHtcbiAgICBjb25zdCBkZWZpbml0aW9uS2V5ID0gZGVmaW5pdGlvbi5rZXk7XG4gICAgY29uc3QgY3VzdG9tUHJvcFN0cmluZyA9ICckLic7XG4gICAgY29uc3Qga2V5ID0gZGVmaW5pdGlvbktleS5pbmNsdWRlcyhjdXN0b21Qcm9wU3RyaW5nKVxuICAgICAgPyBkZWZpbml0aW9uS2V5LnNwbGl0KGN1c3RvbVByb3BTdHJpbmcpWzFdXG4gICAgICA6IGRlZmluaXRpb25LZXk7XG4gICAgY29uc3QgcmVzb2x2ZWRPYmpWYWx1ZSA9IF9nZXQob2JqLCBrZXksIG51bGwpO1xuICAgIHJldHVybiB0aGlzLnZpZXdDb250ZW50U2VydmljZS5nZXQocmVzb2x2ZWRPYmpWYWx1ZSwgZGVmaW5pdGlvbik7XG4gIH1cblxuICBwcml2YXRlIHN3YXBJdGVtcyhpdGVtczogQ2FyYm9uTGlzdEl0ZW1bXSwgaW5kZXgxOiBudW1iZXIsIGluZGV4MjogbnVtYmVyKTogQ2FyYm9uTGlzdEl0ZW1bXSB7XG4gICAgY29uc3QgaXRlbVRvSW5zZXJ0ID0gaXRlbXNbaW5kZXgxXTtcbiAgICBjb25zdCBmaWx0ZXJlZEl0ZW1zID0gaXRlbXMuZmlsdGVyKChfLCBpbmRleCkgPT4gaW5kZXggIT09IGluZGV4MSk7XG4gICAgZmlsdGVyZWRJdGVtcy5zcGxpY2UoaW5kZXgyLCAwLCBpdGVtVG9JbnNlcnQpO1xuXG4gICAgcmV0dXJuIGZpbHRlcmVkSXRlbXM7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVUYWdPYmplY3QoaXRlbTogQ2FyYm9uTGlzdEl0ZW0sIGtleTogc3RyaW5nKTogQ2FyYm9uVGFnW10gfCBudWxsIHtcbiAgICBjb25zdCBvYmplY3Q6IHN0cmluZyB8IHN0cmluZ1tdIHwgQ2FyYm9uVGFnIHwgQ2FyYm9uVGFnW10gPSBpdGVtW2tleV07XG5cbiAgICBpZiAoIW9iamVjdCkgcmV0dXJuIG51bGw7XG5cbiAgICBpZiAoaXNBcnJheShvYmplY3QpICYmIHR5cGVvZiBvYmplY3RbMF0gIT09ICdzdHJpbmcnKSByZXR1cm4gb2JqZWN0IGFzIENhcmJvblRhZ1tdO1xuXG4gICAgaWYgKCFpc0FycmF5KG9iamVjdCkgJiYgdHlwZW9mIG9iamVjdCAhPT0gJ3N0cmluZycpIHJldHVybiBbb2JqZWN0IGFzIENhcmJvblRhZ107XG5cbiAgICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ3N0cmluZycpXG4gICAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgY29udGVudDogb2JqZWN0LFxuICAgICAgICAgIHR5cGU6ICdibHVlJyxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICByZXR1cm4gKG9iamVjdCBhcyBzdHJpbmdbXSkubWFwKChjb250ZW50OiBzdHJpbmcpID0+ICh7XG4gICAgICBjb250ZW50LFxuICAgICAgdHlwZTogJ2JsdWUnLFxuICAgIH0pKTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuPGNkcy10YWJsZS1jb250YWluZXJcbiAgKm5nSWY9XCJ7XG4gICAgc29ydDogc29ydCQgfCBhc3luYyxcbiAgICBtb2RlbDogbW9kZWwkIHwgYXN5bmMsXG4gICAgdmlld0luaXRpYWxpemVkOiB2aWV3SW5pdGlhbGl6ZWQkIHwgYXN5bmMsXG4gIH0gYXMgb2JzXCJcbiAgY2xhc3M9XCJ2YWx0aW1vLWNhcmJvbi1saXN0XCJcbj5cbiAgPGNkcy10YWJsZS1oZWFkZXIgKm5nSWY9XCJoZWFkZXJcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbaGVhZGVyXVwiPjwvbmctY29udGVudD5cbiAgPC9jZHMtdGFibGUtaGVhZGVyPlxuXG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIlt0YWJzXVwiPjwvbmctY29udGVudD5cblxuICA8Y2RzLXRhYmxlLXRvb2xiYXJcbiAgICAqbmdJZj1cIiFoaWRlVG9vbGJhclwiXG4gICAgY2xhc3M9XCJ2YWx0aW1vLWNhcmJvbi1saXN0X190b29sYmFyXCJcbiAgICBbbW9kZWxdPVwib2JzLm1vZGVsXCJcbiAgICBbYmF0Y2hUZXh0XT1cImJhdGNoVGV4dCQgfCBhc3luY1wiXG4gID5cbiAgICA8Y2RzLXRhYmxlLXRvb2xiYXItYWN0aW9ucz5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltjYXJib25Ub29sYmFyQWN0aW9uc11cIj4gPC9uZy1jb250ZW50PlxuICAgIDwvY2RzLXRhYmxlLXRvb2xiYXItYWN0aW9ucz5cblxuICAgIDxjZHMtdGFibGUtdG9vbGJhci1jb250ZW50PlxuICAgICAgPGNkcy10YWJsZS10b29sYmFyLXNlYXJjaFxuICAgICAgICAqbmdJZj1cImlzU2VhcmNoYWJsZVwiXG4gICAgICAgIFtleHBhbmRhYmxlXT1cInRydWVcIlxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwic2VhcmNoRm9ybUNvbnRyb2xcIlxuICAgICAgPjwvY2RzLXRhYmxlLXRvb2xiYXItc2VhcmNoPlxuXG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbY2FyYm9uVG9vbGJhckNvbnRlbnRdXCI+IDwvbmctY29udGVudD5cbiAgICA8L2Nkcy10YWJsZS10b29sYmFyLWNvbnRlbnQ+XG4gIDwvY2RzLXRhYmxlLXRvb2xiYXI+XG5cbiAgPGNkcy10YWJsZVxuICAgICpuZ0lmPVwiISFvYnMuc29ydFwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgJ3ZhbHRpbW8tY2FyYm9uLWxpc3RfX2hlYWRlci0taGlkZGVuJzogaGlkZUNvbHVtbkhlYWRlcixcbiAgICAgICd2YWx0aW1vLWNhcmJvbi1saXN0LS11bmNsaWNrYWJsZSc6ICF0aGlzLnJvd0NsaWNrZWQub2JzZXJ2ZWQsXG4gICAgfVwiXG4gICAgW2VuYWJsZVNpbmdsZVNlbGVjdF09XCJlbmFibGVTaW5nbGVTZWxlY3RcIlxuICAgIFttb2RlbF09XCJsb2FkaW5nIHx8ICFvYnMudmlld0luaXRpYWxpemVkID8gc2tlbGV0b25Nb2RlbCA6IG9icy5tb2RlbFwiXG4gICAgW3Nob3dTZWxlY3Rpb25Db2x1bW5dPVwic2hvd1NlbGVjdGlvbkNvbHVtblwiXG4gICAgW3NrZWxldG9uXT1cImxvYWRpbmdcIlxuICAgIFtzdHJpcGVkXT1cInN0cmlwZWRcIlxuICAgIChzb3J0KT1cIm9uU29ydChvYnMubW9kZWwuaGVhZGVyWyRldmVudF0pXCJcbiAgICAocm93Q2xpY2spPVwib25Sb3dDbGljaygkZXZlbnQpXCJcbiAgPlxuICAgIDx0Ym9keSBjZHNUYWJsZUJvZHk+XG4gICAgICA8dHIgY2xhc3M9XCJ2YWx0aW1vLWNhcmJvbi1saXN0X19uby1yZXN1bHRzXCI+XG4gICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cIm9icy5tb2RlbC5oZWFkZXIubGVuZ3RoICsgKHNob3dTZWxlY3Rpb25Db2x1bW4gPyAxIDogMClcIj5cbiAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvdGQ+XG5cbiAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwib2JzLm1vZGVsLmhlYWRlci5sZW5ndGggKyAoc2hvd1NlbGVjdGlvbkNvbHVtbiA/IDEgOiAwKVwiPlxuICAgICAgICAgIHt7ICdsaXN0Lm5vUmVzdWx0cycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgPC90Ym9keT5cbiAgPC9jZHMtdGFibGU+XG5cbiAgPGNkcy1wYWdpbmF0aW9uXG4gICAgKm5nSWY9XCJwYWdpbmF0aW9uTW9kZWwgJiYgaXRlbXM/Lmxlbmd0aFwiXG4gICAgW2l0ZW1zUGVyUGFnZU9wdGlvbnNdPVwicGFnaW5hdG9yQ29uZmlnLml0ZW1zUGVyUGFnZU9wdGlvbnNcIlxuICAgIFttb2RlbF09XCJwYWdpbmF0aW9uTW9kZWxcIlxuICAgIFtzaG93UGFnZUlucHV0XT1cInBhZ2luYXRvckNvbmZpZy5zaG93UGFnZUlucHV0XCJcbiAgICBbc2tlbGV0b25dPVwibG9hZGluZ1wiXG4gICAgW3RyYW5zbGF0aW9uc109XCJwYWdpbmF0aW9uVHJhbnNsYXRpb25zJCB8IGFzeW5jXCJcbiAgICAoc2VsZWN0UGFnZSk9XCJvblNlbGVjdFBhZ2UoJGV2ZW50KVwiXG4gID48L2Nkcy1wYWdpbmF0aW9uPlxuPC9jZHMtdGFibGUtY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI2FjdGlvblRlbXBsYXRlIGxldC1kYXRhPVwiZGF0YVwiPlxuICA8aVxuICAgIGNsYXNzPVwiY2xpY2thYmxlXCJcbiAgICBbbmdDbGFzc109XCJkYXRhLmljb25DbGFzc1wiXG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgZGF0YS5jYWxsYmFjayhkYXRhLml0ZW0pXCJcbiAgPjwvaT5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYm9vbGVhblRlbXBsYXRlIGxldC1kYXRhPVwiZGF0YVwiPlxuICB7eyBkYXRhIHwgdHJhbnNsYXRlIH19XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2FjdGlvbnNNZW51VGVtcGxhdGUgbGV0LWRhdGE9XCJkYXRhXCI+XG4gIDxjZHMtb3ZlcmZsb3ctbWVudVxuICAgIFtvcGVuXT1cImN1cnJlbnRPcGVuQWN0aW9uSWQgPT09IGRhdGEuaXRlbVwiXG4gICAgKG9wZW5DaGFuZ2UpPVwiaGFuZGxlQWN0aW9uT3BlbkNoYW5nZShkYXRhLml0ZW0sICRldmVudClcIlxuICAgIFtmbGlwXT1cInRydWVcIlxuICAgIFtvZmZzZXRdPVwie3g6IDAsIHk6IDUwfVwiXG4gICAgcGxhY2VtZW50PVwiYm90dG9tXCJcbiAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgPlxuICAgIEBmb3IgKGFjdGlvbiBvZiBkYXRhLmFjdGlvbnM7IHRyYWNrIGFjdGlvbi5sYWJlbCkge1xuICAgICAgPGNkcy1vdmVyZmxvdy1tZW51LW9wdGlvblxuICAgICAgICBbZGlzYWJsZWRdPVwiYWN0aW9uLmRpc2FibGVkQ2FsbGJhY2sgPyBhY3Rpb24uZGlzYWJsZWRDYWxsYmFjayhkYXRhLml0ZW0pIDogZmFsc2VcIlxuICAgICAgICBbdHlwZV09XCJhY3Rpb24udHlwZVwiXG4gICAgICAgIChzZWxlY3RlZCk9XCJhY3Rpb24uY2FsbGJhY2soZGF0YS5pdGVtKVwiXG4gICAgICA+XG4gICAgICAgIDxpICpuZ0lmPVwiISFhY3Rpb24uaWNvbkNsYXNzXCIgW25nQ2xhc3NdPVwiYWN0aW9uLmljb25DbGFzc1wiPjwvaT5cblxuICAgICAgICB7eyBhY3Rpb24ubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvY2RzLW92ZXJmbG93LW1lbnUtb3B0aW9uPlxuICAgIH1cbiAgPC9jZHMtb3ZlcmZsb3ctbWVudT5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjcm93RGlzYWJsZWQgbGV0LWRhdGE9XCJkYXRhXCI+XG4gIDxkaXYgKm5nSWY9XCJkYXRhLmxvY2tlZFwiIGNsYXNzPVwibG9ja2VkXCI+XG4gICAgPHNwYW5cbiAgICAgIGNsYXNzPVwiZmxvYXQtcmlnaHQgYmFkZ2UgYmFkZ2UtcGlsbCBiYWRnZS1zZWNvbmRhcnkgYmctZ3JleVwiXG4gICAgICBuZ2JUb29sdGlwPVwie3sgbG9ja2VkVG9vbHRpcFRyYW5zbGF0aW9uS2V5IHwgdHJhbnNsYXRlIH19XCJcbiAgICA+XG4gICAgICA8aSBjbGFzcz1cImljb24gbWRpIG1kaS1sb2NrXCI+PC9pPlxuICAgIDwvc3Bhbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21vdmVSb3dzVGVtcGxhdGUgbGV0LWRhdGE9XCJkYXRhXCI+XG4gIDxkaXYgY2xhc3M9XCJ2YWx0aW1vLWNhcmJvbi1saXN0X19tb3ZlLXJvd3NcIj5cbiAgICA8YnV0dG9uXG4gICAgICBjZHNCdXR0b249XCJ0ZXJ0aWFyeVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGF0YS5pbmRleCA9PT0gMFwiXG4gICAgICBbaWNvbk9ubHldPVwidHJ1ZVwiXG4gICAgICBzaXplPVwic21cIlxuICAgICAgKGNsaWNrKT1cIm9uTW92ZVVwQ2xpY2soJGV2ZW50LCBkYXRhKVwiXG4gICAgPlxuICAgICAgPHN2ZyBjZHNJY29uPVwiYXJyb3ctLXVwXCIgc2l6ZT1cIjE2XCIgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiPjwvc3ZnPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGJ1dHRvblxuICAgICAgY2RzQnV0dG9uPVwidGVydGlhcnlcIlxuICAgICAgW2Rpc2FibGVkXT1cImRhdGEuaW5kZXggPT09IGRhdGEubGVuZ3RoIC0gMVwiXG4gICAgICBbaWNvbk9ubHldPVwidHJ1ZVwiXG4gICAgICBzaXplPVwic21cIlxuICAgICAgKGNsaWNrKT1cIm9uTW92ZURvd25DbGljaygkZXZlbnQsIGRhdGEpXCJcbiAgICA+XG4gICAgICA8c3ZnIGNkc0ljb249XCJhcnJvdy0tZG93blwiIHNpemU9XCIxNlwiIGNsYXNzPVwiY2RzLS1idG5fX2ljb25cIj48L3N2Zz5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RyYWdBbmREcm9wVGVtcGxhdGUgbGV0LWRhdGE9XCJkYXRhXCI+XG4gIDxkaXYgY2xhc3M9XCJ2YWx0aW1vLWNhcmJvbi1saXN0X19kcmFnZ2FibGVcIj5cbiAgICA8YnV0dG9uXG4gICAgICBjZHNCdXR0b249XCJnaG9zdFwiXG4gICAgICBbZGlzYWJsZWRdPVwiZHJhZ0FuZERyb3BEaXNhYmxlZFwiXG4gICAgICBbaWNvbk9ubHldPVwidHJ1ZVwiXG4gICAgICBzaXplPVwic21cIlxuICAgICAgKG1vdXNlZG93bik9XCJvbkRyYWdTdGFydCgkZXZlbnQsIGRhdGEpXCJcbiAgICA+XG4gICAgICA8c3ZnIGNkc0ljb249XCJkcmFnZ2FibGVcIiBzaXplPVwiMTZcIiBjbGFzcz1cImNkcy0tYnRuX19pY29uXCI+PC9zdmc+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0YWdUZW1wbGF0ZSBsZXQtZGF0YT1cImRhdGFcIj5cbiAgQGlmICghZGF0YS50YWdzKSB7XG4gICAgLVxuICB9IEBlbHNlIHtcbiAgICA8ZGl2IGNsYXNzPVwidGFnLXRlbXBsYXRlXCI+XG4gICAgICBAaWYgKGRhdGEudGFncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLVxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIEBmb3IgKHRhZyBvZiBkYXRhLnRhZ3Muc2xpY2UoMCwgZGF0YS50YWdBbW91bnQpOyB0cmFjayB0YWcpIHtcbiAgICAgICAgICA8Y2RzLXRhZyBjbGFzcz1cImNkcy10YWctLW5vLW1hcmdpblwiIFt0eXBlXT1cInRhZy50eXBlXCI+XG4gICAgICAgICAgICB7eyB0YWcuZWxsaXBzaXNDb250ZW50ID8/IHRhZy5jb250ZW50IH19XG4gICAgICAgICAgPC9jZHMtdGFnPlxuICAgICAgICB9XG5cbiAgICAgICAgPGNkcy10YWdcbiAgICAgICAgICAqbmdJZj1cImRhdGEudGFncy5sZW5ndGggPiBkYXRhLnRhZ0Ftb3VudFwiXG4gICAgICAgICAgY2xhc3M9XCJjZHMtdGFnLS1uby1tYXJnaW4gdmFsdGltby1jYXJib24tbGlzdF9fZXhwYW5kLXRhZ1wiXG4gICAgICAgICAgdHlwZT1cImhpZ2gtY29udHJhc3RcIlxuICAgICAgICAgIChjbGljayk9XCJvblRhZ0NsaWNrKCRldmVudCwgZGF0YS50YWdzKVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBkYXRhLnRhZ3MubGVuZ3RoIC0gZGF0YS50YWdBbW91bnQgfX0gPHN2ZyBjZHNJY29uPVwiYWRkXCIgc2l6ZT1cIjE2XCI+PC9zdmc+XG4gICAgICAgIDwvY2RzLXRhZz5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0VGVtcGxhdGUgbGV0LWRhdGE9XCJkYXRhXCI+XG4gIDxzcGFuPnt7IGRhdGEgfX08L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48dmFsdGltby10YWdzLW1vZGFsXG4gIFtvcGVuXT1cInRhZ01vZGFsT3BlbiQgfCBhc3luY1wiXG4gIFt0YWdzXT1cInRhZ01vZGFsRGF0YSQgfCBhc3luY1wiXG4gIChjbG9zZUV2ZW50KT1cIm9uQ2xvc2VFdmVudCgpXCJcbj48L3ZhbHRpbW8tdGFncy1tb2RhbD5cbiJdfQ==
|