@yuuvis/client-framework 2.0.0-beta.0 → 2.0.0-beta.10
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/actions/lib/actions/delete-action/delete/delete.component.d.ts +3 -3
- package/actions/lib/actions/delete-action/delete-action.d.ts +1 -1
- package/actions/lib/actions.service.d.ts +7 -3
- package/actions/lib/components/contextmenu/contextmenu.component.d.ts +3 -1
- package/autocomplete/README.md +3 -0
- package/autocomplete/index.d.ts +3 -0
- package/autocomplete/lib/autocomplete.component.d.ts +72 -0
- package/autocomplete/lib/autocomplete.interface.d.ts +4 -0
- package/autocomplete/lib/autocomplete.module.d.ts +7 -0
- package/common/index.d.ts +4 -4
- package/common/lib/common.module.d.ts +19 -0
- package/common/lib/common.utils.d.ts +2 -0
- package/common/lib/components/confirm/confirm.component.d.ts +7 -0
- package/common/lib/components/confirm/confirm.interface.d.ts +7 -0
- package/common/lib/components/confirm/confirm.service.d.ts +9 -0
- package/common/lib/components/dialog/dialog.component.d.ts +6 -0
- package/common/lib/components/dialog/dialog.options.d.ts +7 -0
- package/common/lib/components/index.d.ts +5 -0
- package/common/lib/directives/autofocus-child.directive.d.ts +13 -0
- package/common/lib/directives/autofocus-delayed.directive.d.ts +18 -0
- package/common/lib/directives/drag-scroll.directive.d.ts +20 -0
- package/common/lib/directives/index.d.ts +8 -4
- package/common/lib/directives/noop-value-accessor.directive.d.ts +2 -2
- package/common/lib/mat-form-field.abstract.d.ts +41 -0
- package/common/lib/services/index.d.ts +1 -1
- package/common/lib/services/layout-settings/layout-settings.service.d.ts +18 -0
- package/datepicker/README.md +3 -0
- package/datepicker/index.d.ts +5 -0
- package/datepicker/lib/calendar/calendar.component.d.ts +72 -0
- package/datepicker/lib/date-input/date-input-element/date-input-element.component.d.ts +43 -0
- package/datepicker/lib/date-input/date-input-hour-element/date-input-hour-element.component.d.ts +11 -0
- package/datepicker/lib/date-input/date-input.component.d.ts +61 -0
- package/datepicker/lib/datepicker-calendar/datepicker-calendar-trigger.component.d.ts +7 -0
- package/datepicker/lib/datepicker-calendar/datepicker-calendar.component.d.ts +12 -0
- package/datepicker/lib/datepicker.component.d.ts +80 -0
- package/datepicker/lib/datepicker.interface.d.ts +34 -0
- package/datepicker/lib/datepicker.module.d.ts +9 -0
- package/datepicker/lib/datepicker.service.d.ts +46 -0
- package/datepicker/lib/datepicker.utils.d.ts +23 -0
- package/datepicker/lib/time-input/time-input.component.d.ts +36 -0
- package/datepicker/lib/time-input/time-input.interface.d.ts +6 -0
- package/fesm2022/yuuvis-client-framework-actions.mjs +147 -105
- package/fesm2022/yuuvis-client-framework-actions.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-app-bar.mjs +7 -8
- package/fesm2022/yuuvis-client-framework-app-bar.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-autocomplete.mjs +210 -0
- package/fesm2022/yuuvis-client-framework-autocomplete.mjs.map +1 -0
- package/fesm2022/yuuvis-client-framework-clipboard.mjs +9 -9
- package/fesm2022/yuuvis-client-framework-clipboard.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-common.mjs +853 -780
- package/fesm2022/yuuvis-client-framework-common.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-datepicker.mjs +1688 -0
- package/fesm2022/yuuvis-client-framework-datepicker.mjs.map +1 -0
- package/fesm2022/yuuvis-client-framework-forms.mjs +945 -1157
- package/fesm2022/yuuvis-client-framework-forms.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-icons.mjs +85 -12
- package/fesm2022/yuuvis-client-framework-icons.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-list.mjs +81 -45
- package/fesm2022/yuuvis-client-framework-list.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-master-details.mjs +112 -0
- package/fesm2022/yuuvis-client-framework-master-details.mjs.map +1 -0
- package/fesm2022/yuuvis-client-framework-metadata-form-defaults.mjs +60 -0
- package/fesm2022/yuuvis-client-framework-metadata-form-defaults.mjs.map +1 -0
- package/fesm2022/yuuvis-client-framework-metadata-form.mjs +125 -100
- package/fesm2022/yuuvis-client-framework-metadata-form.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-details.mjs +49 -59
- package/fesm2022/yuuvis-client-framework-object-details.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-flavor.mjs +188 -77
- package/fesm2022/yuuvis-client-framework-object-flavor.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-form.mjs +99 -184
- package/fesm2022/yuuvis-client-framework-object-form.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-preview.mjs +12 -12
- package/fesm2022/yuuvis-client-framework-object-preview.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-summary.mjs +46 -42
- package/fesm2022/yuuvis-client-framework-object-summary.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-overflow-menu.mjs +126 -0
- package/fesm2022/yuuvis-client-framework-overflow-menu.mjs.map +1 -0
- package/fesm2022/yuuvis-client-framework-pagination.mjs +7 -9
- package/fesm2022/yuuvis-client-framework-pagination.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-panel.mjs +8 -7
- package/fesm2022/yuuvis-client-framework-panel.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-popout.mjs +212 -0
- package/fesm2022/yuuvis-client-framework-popout.mjs.map +1 -0
- package/fesm2022/yuuvis-client-framework-renderer.mjs +99 -72
- package/fesm2022/yuuvis-client-framework-renderer.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-sequence-list.mjs +29 -112
- package/fesm2022/yuuvis-client-framework-sequence-list.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-simple-search.mjs +40 -21
- package/fesm2022/yuuvis-client-framework-simple-search.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-split-view.mjs +188 -0
- package/fesm2022/yuuvis-client-framework-split-view.mjs.map +1 -0
- package/fesm2022/yuuvis-client-framework-tile-list.mjs +100 -93
- package/fesm2022/yuuvis-client-framework-tile-list.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-tree.mjs +15 -15
- package/fesm2022/yuuvis-client-framework-tree.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-upload-progress.mjs +16 -21
- package/fesm2022/yuuvis-client-framework-upload-progress.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework.mjs +4 -4
- package/fesm2022/yuuvis-client-framework.mjs.map +1 -1
- package/forms/index.d.ts +7 -1
- package/forms/lib/elements/catalog/catalog.component.d.ts +17 -56
- package/forms/lib/elements/data-grid/edit-table-data/edit-data.component.d.ts +5 -4
- package/forms/lib/elements/datetime/datetime.component.d.ts +19 -10
- package/forms/lib/elements/datetime-range/datetime-range.component.d.ts +12 -27
- package/forms/lib/elements/index.d.ts +0 -1
- package/forms/lib/elements/number/number.component.d.ts +21 -30
- package/forms/lib/elements/number-range/number-range.component.d.ts +12 -7
- package/forms/lib/elements/organization/organization.component.d.ts +23 -51
- package/forms/lib/elements/range-select-date/range-select-date.component.d.ts +12 -7
- package/forms/lib/elements/range-select-filesize/range-select-filesize.component.d.ts +12 -7
- package/forms/lib/elements/string/string.component.d.ts +15 -20
- package/forms/lib/forms.module.d.ts +8 -11
- package/icons/index.d.ts +1 -0
- package/icons/lib/icon.component.d.ts +20 -0
- package/lib/assets/i18n/de.json +7 -23
- package/lib/assets/i18n/en.json +10 -26
- package/list/index.d.ts +1 -0
- package/list/lib/list-item.directive.d.ts +5 -4
- package/list/lib/list.component.d.ts +6 -3
- package/list/lib/list.module.d.ts +8 -0
- package/master-details/README.md +3 -0
- package/master-details/index.d.ts +2 -0
- package/master-details/lib/master-details.component.d.ts +58 -0
- package/master-details/lib/master-details.interface.d.ts +7 -0
- package/master-details/lib/master-details.module.d.ts +7 -0
- package/metadata-form/index.d.ts +4 -1
- package/metadata-form/lib/metadata-form-field/metadata-form-field.component.d.ts +4 -17
- package/metadata-form/lib/metadata-form-field/metadata-form-field.interface.d.ts +11 -0
- package/metadata-form/lib/object-metadata-element-error.directive.d.ts +13 -0
- package/metadata-form/lib/object-metadata-element-label.directive.d.ts +10 -0
- package/metadata-form/lib/object-metadata-element-template.directive.d.ts +3 -3
- package/metadata-form-defaults/README.md +3 -0
- package/metadata-form-defaults/index.d.ts +2 -0
- package/metadata-form-defaults/lib/metadata-form-defaults.module.d.ts +7 -0
- package/object-details/lib/object-audit/object-audit.component.d.ts +3 -9
- package/object-details/lib/object-details.component.d.ts +0 -2
- package/object-details/lib/object-metadata/object-metadata.component.d.ts +4 -3
- package/object-details/lib/retention-badge/retention-badge.component.d.ts +0 -3
- package/object-flavor/index.d.ts +1 -0
- package/object-flavor/lib/abstract-apply-create-flavor/abstract-apply-create-flavor.component.d.ts +1 -2
- package/object-flavor/lib/abstract-apply-object-flavor/abstract-apply-object-flavor.component.d.ts +3 -2
- package/object-flavor/lib/default-apply-flavor/default-apply-flavor.component.d.ts +19 -0
- package/object-flavor/lib/flavor-chip/flavor-chip.component.d.ts +1 -1
- package/object-flavor/lib/object-flavor/object-flavor.component.d.ts +3 -6
- package/object-flavor/lib/object-flavor-picker/object-flavor-picker.component.d.ts +0 -1
- package/object-form/index.d.ts +1 -1
- package/object-form/lib/object-form-element/object-form-element.component.d.ts +2 -2
- package/object-form/lib/object-form-group/object-form-group.component.d.ts +1 -3
- package/object-form/lib/object-form.component.d.ts +2 -2
- package/object-form/lib/object-form.interface.d.ts +0 -44
- package/object-form/lib/object-form.module.d.ts +7 -0
- package/object-form/lib/object-form.service.d.ts +1 -2
- package/object-form/lib/object-form.utils.d.ts +1 -1
- package/object-summary/lib/object-summary/object-summary.component.d.ts +13 -15
- package/overflow-menu/README.md +3 -0
- package/overflow-menu/index.d.ts +3 -0
- package/overflow-menu/lib/overflow-menu.component.d.ts +31 -0
- package/overflow-menu/lib/overflow-menu.interface.d.ts +9 -0
- package/overflow-menu/lib/overflow-menu.module.d.ts +7 -0
- package/package.json +44 -70
- package/popout/README.md +3 -0
- package/popout/index.d.ts +3 -0
- package/popout/lib/popout.component.d.ts +58 -0
- package/popout/lib/popout.interface.d.ts +17 -0
- package/popout/lib/popout.module.d.ts +7 -0
- package/renderer/lib/property-renderer/abstract.renderer.d.ts +4 -4
- package/renderer/lib/property-renderer/icon.renderer.component.d.ts +2 -0
- package/renderer/lib/renderer.directive.d.ts +4 -3
- package/sequence-list/index.d.ts +0 -1
- package/sequence-list/lib/sequence-list.component.d.ts +0 -4
- package/simple-search/index.d.ts +0 -1
- package/simple-search/lib/simple-search/simple-search.component.d.ts +6 -10
- package/split-view/README.md +3 -0
- package/split-view/index.d.ts +4 -0
- package/split-view/lib/split-area.directive.d.ts +16 -0
- package/split-view/lib/split-view.component.d.ts +76 -0
- package/split-view/lib/split-view.interface.d.ts +10 -0
- package/split-view/lib/split-view.module.d.ts +8 -0
- package/styles/client-framework.scss +21 -67
- package/tile-list/lib/tile/tile.component.d.ts +1 -2
- package/tile-list/lib/tile-config/property-select/property-select.component.d.ts +0 -1
- package/tile-list/lib/tile-config/tile-config-trigger/tile-config-trigger.component.d.ts +1 -2
- package/tile-list/lib/tile-config/tile-config.component.d.ts +0 -3
- package/tile-list/lib/tile-list/tile-list.component.d.ts +5 -5
- package/upload-progress/lib/upload-progress/upload-progress-overlay/upload-progress-overlay.component.d.ts +0 -5
- package/upload-progress/lib/upload-progress/upload-progress.component.d.ts +0 -4
- package/common/lib/components/focus-indicator/focus-indicator.component.d.ts +0 -7
- package/common/lib/components/token-input/token-input.component.d.ts +0 -55
- package/common/lib/components/token-input/token-input.interface.d.ts +0 -8
- package/common/lib/services/error-messages/error-messages.service.d.ts +0 -7
- package/esm2022/actions/index.mjs +0 -7
- package/esm2022/actions/lib/actions/copy-action/copy-action.mjs +0 -31
- package/esm2022/actions/lib/actions/cut-action/cut-action.mjs +0 -30
- package/esm2022/actions/lib/actions/delete-action/delete/delete.component.mjs +0 -67
- package/esm2022/actions/lib/actions/delete-action/delete-action.mjs +0 -38
- package/esm2022/actions/lib/actions/download-action/download-action.mjs +0 -33
- package/esm2022/actions/lib/actions.icon.mjs +0 -8
- package/esm2022/actions/lib/actions.interface.mjs +0 -19
- package/esm2022/actions/lib/actions.module.mjs +0 -16
- package/esm2022/actions/lib/actions.service.mjs +0 -89
- package/esm2022/actions/lib/components/contextmenu/contextmenu.component.mjs +0 -27
- package/esm2022/actions/yuuvis-client-framework-actions.mjs +0 -5
- package/esm2022/app-bar/index.mjs +0 -2
- package/esm2022/app-bar/lib/app-bar.component.mjs +0 -89
- package/esm2022/app-bar/yuuvis-client-framework-app-bar.mjs +0 -5
- package/esm2022/clipboard/index.mjs +0 -2
- package/esm2022/clipboard/lib/clipboard.component.mjs +0 -48
- package/esm2022/clipboard/yuuvis-client-framework-clipboard.mjs +0 -5
- package/esm2022/common/index.mjs +0 -7
- package/esm2022/common/lib/components/focus-indicator/focus-indicator.component.mjs +0 -41
- package/esm2022/common/lib/components/token-input/token-input.component.mjs +0 -324
- package/esm2022/common/lib/components/token-input/token-input.interface.mjs +0 -2
- package/esm2022/common/lib/directives/busy-overlay.directive.mjs +0 -88
- package/esm2022/common/lib/directives/click-double.directive.mjs +0 -61
- package/esm2022/common/lib/directives/container-size.directive.mjs +0 -56
- package/esm2022/common/lib/directives/drag-select.directive.mjs +0 -114
- package/esm2022/common/lib/directives/file-drop-zone/file-drop-zone.directive.mjs +0 -153
- package/esm2022/common/lib/directives/file-drop-zone/file-drop-zone.interface.mjs +0 -2
- package/esm2022/common/lib/directives/focus-within.directive.mjs +0 -81
- package/esm2022/common/lib/directives/index.mjs +0 -9
- package/esm2022/common/lib/directives/light-dismiss.directive.mjs +0 -44
- package/esm2022/common/lib/directives/longpress.directive.mjs +0 -36
- package/esm2022/common/lib/directives/noop-value-accessor.directive.mjs +0 -42
- package/esm2022/common/lib/services/error-messages/error-messages.service.mjs +0 -68
- package/esm2022/common/lib/services/index.mjs +0 -2
- package/esm2022/common/yuuvis-client-framework-common.mjs +0 -5
- package/esm2022/forms/index.mjs +0 -24
- package/esm2022/forms/lib/elements/catalog/catalog.component.mjs +0 -118
- package/esm2022/forms/lib/elements/data-grid/data-grid/data-grid.component.mjs +0 -172
- package/esm2022/forms/lib/elements/data-grid/edit-table-data/edit-data.component.mjs +0 -95
- package/esm2022/forms/lib/elements/data-grid/model/data-grid.interface.mjs +0 -9
- package/esm2022/forms/lib/elements/datetime/datetime.component.mjs +0 -82
- package/esm2022/forms/lib/elements/datetime-range/datetime-range.component.mjs +0 -166
- package/esm2022/forms/lib/elements/index.mjs +0 -11
- package/esm2022/forms/lib/elements/number/number.component.mjs +0 -195
- package/esm2022/forms/lib/elements/number-range/number-range.component.mjs +0 -176
- package/esm2022/forms/lib/elements/organization/organization.component.mjs +0 -286
- package/esm2022/forms/lib/elements/range-select-date/date-range-picker/date-range-picker.component.mjs +0 -38
- package/esm2022/forms/lib/elements/range-select-date/range-select-date.component.mjs +0 -181
- package/esm2022/forms/lib/elements/range-select-date/range-select-date.interface.mjs +0 -2
- package/esm2022/forms/lib/elements/range-select-filesize/range-select-filesize.component.mjs +0 -98
- package/esm2022/forms/lib/elements/range-select-filesize/range-select-filesize.interface.mjs +0 -2
- package/esm2022/forms/lib/elements/string/string.component.mjs +0 -261
- package/esm2022/forms/lib/form-input/form-input.component.mjs +0 -88
- package/esm2022/forms/lib/forms.module.mjs +0 -58
- package/esm2022/forms/yuuvis-client-framework-forms.mjs +0 -5
- package/esm2022/icons/index.mjs +0 -4
- package/esm2022/icons/lib/icon.service.mjs +0 -59
- package/esm2022/icons/lib/icons.mjs +0 -32
- package/esm2022/icons/lib/object-type-icon/object-type-icon.component.mjs +0 -29
- package/esm2022/icons/yuuvis-client-framework-icons.mjs +0 -5
- package/esm2022/index.mjs +0 -2
- package/esm2022/lib/yuuvis-client-framework.module.mjs +0 -15
- package/esm2022/list/index.mjs +0 -3
- package/esm2022/list/lib/list-item.directive.mjs +0 -72
- package/esm2022/list/lib/list.component.mjs +0 -135
- package/esm2022/list/yuuvis-client-framework-list.mjs +0 -5
- package/esm2022/metadata-form/index.mjs +0 -4
- package/esm2022/metadata-form/lib/metadata-default-templates/metadata-default-templates.component.mjs +0 -32
- package/esm2022/metadata-form/lib/metadata-form-element-registry.service.mjs +0 -99
- package/esm2022/metadata-form/lib/metadata-form-field/metadata-form-field.component.mjs +0 -83
- package/esm2022/metadata-form/lib/object-metadata-element-template.directive.mjs +0 -52
- package/esm2022/metadata-form/yuuvis-client-framework-metadata-form.mjs +0 -5
- package/esm2022/object-details/index.mjs +0 -8
- package/esm2022/object-details/lib/object-audit/object-audit.component.mjs +0 -195
- package/esm2022/object-details/lib/object-details-shell/object-details-shell.component.mjs +0 -127
- package/esm2022/object-details/lib/object-details.component.mjs +0 -61
- package/esm2022/object-details/lib/object-metadata/form-section-group.pipe.mjs +0 -17
- package/esm2022/object-details/lib/object-metadata/object-metadata.component.mjs +0 -202
- package/esm2022/object-details/lib/object-metadata/object-metadata.interface.mjs +0 -2
- package/esm2022/object-details/lib/retention-badge/retention-badge.component.mjs +0 -27
- package/esm2022/object-details/yuuvis-client-framework-object-details.mjs +0 -5
- package/esm2022/object-flavor/index.mjs +0 -6
- package/esm2022/object-flavor/lib/abstract-apply-create-flavor/abstract-apply-create-flavor.component.mjs +0 -25
- package/esm2022/object-flavor/lib/abstract-apply-object-flavor/abstract-apply-object-flavor.component.mjs +0 -21
- package/esm2022/object-flavor/lib/flavor-chip/flavor-chip.component.mjs +0 -35
- package/esm2022/object-flavor/lib/object-flavor/object-flavor.component.mjs +0 -93
- package/esm2022/object-flavor/lib/object-flavor-picker/object-flavor-picker.component.mjs +0 -43
- package/esm2022/object-flavor/yuuvis-client-framework-object-flavor.mjs +0 -5
- package/esm2022/object-form/index.mjs +0 -5
- package/esm2022/object-form/lib/form-scripting.api.interface.mjs +0 -2
- package/esm2022/object-form/lib/form-scripting.service.mjs +0 -160
- package/esm2022/object-form/lib/object-form-element/object-form-element.component.mjs +0 -87
- package/esm2022/object-form/lib/object-form-extension.interface.mjs +0 -36
- package/esm2022/object-form/lib/object-form-group/object-form-group.component.mjs +0 -85
- package/esm2022/object-form/lib/object-form-script/form-scripting-element-extension/form-scripting-element-extension.component.mjs +0 -23
- package/esm2022/object-form/lib/object-form-script/object-form-script.service.mjs +0 -115
- package/esm2022/object-form/lib/object-form-script/object-form-scripting-scope.mjs +0 -251
- package/esm2022/object-form/lib/object-form-translate.service.mjs +0 -73
- package/esm2022/object-form/lib/object-form.component.mjs +0 -628
- package/esm2022/object-form/lib/object-form.interface.mjs +0 -9
- package/esm2022/object-form/lib/object-form.model.mjs +0 -20
- package/esm2022/object-form/lib/object-form.service.mjs +0 -130
- package/esm2022/object-form/lib/object-form.utils.mjs +0 -55
- package/esm2022/object-form/lib/object-form.validation.mjs +0 -48
- package/esm2022/object-form/yuuvis-client-framework-object-form.mjs +0 -5
- package/esm2022/object-preview/index.mjs +0 -3
- package/esm2022/object-preview/lib/components/index.mjs +0 -3
- package/esm2022/object-preview/lib/components/object-email-preview/object-email-preview.component.mjs +0 -45
- package/esm2022/object-preview/lib/components/object-preview/object-preview.component.mjs +0 -78
- package/esm2022/object-preview/lib/services/object-preview.service.mjs +0 -119
- package/esm2022/object-preview/yuuvis-client-framework-object-preview.mjs +0 -5
- package/esm2022/object-summary/index.mjs +0 -5
- package/esm2022/object-summary/lib/multi-object-summary/multi-object-summary.component.mjs +0 -33
- package/esm2022/object-summary/lib/object-summary/object-summary.component.mjs +0 -275
- package/esm2022/object-summary/lib/object-summary-data/object-summary-data.component.mjs +0 -80
- package/esm2022/object-summary/lib/object-summary.module.mjs +0 -15
- package/esm2022/object-summary/yuuvis-client-framework-object-summary.mjs +0 -5
- package/esm2022/pagination/index.mjs +0 -3
- package/esm2022/pagination/lib/pagination.component.mjs +0 -46
- package/esm2022/pagination/lib/pagination.interface.mjs +0 -2
- package/esm2022/pagination/yuuvis-client-framework-pagination.mjs +0 -5
- package/esm2022/panel/index.mjs +0 -2
- package/esm2022/panel/lib/panel.component.mjs +0 -20
- package/esm2022/panel/yuuvis-client-framework-panel.mjs +0 -5
- package/esm2022/renderer/index.mjs +0 -11
- package/esm2022/renderer/lib/property-renderer/abstract.renderer.mjs +0 -29
- package/esm2022/renderer/lib/property-renderer/datetime.renderer.mjs +0 -13
- package/esm2022/renderer/lib/property-renderer/decimal.renderer.component.mjs +0 -12
- package/esm2022/renderer/lib/property-renderer/filesize.renderer.component.mjs +0 -28
- package/esm2022/renderer/lib/property-renderer/icon.renderer.component.mjs +0 -23
- package/esm2022/renderer/lib/property-renderer/integer.renderer.component.mjs +0 -12
- package/esm2022/renderer/lib/property-renderer/organization.renderer.mjs +0 -19
- package/esm2022/renderer/lib/property-renderer/string.renderer.component.mjs +0 -12
- package/esm2022/renderer/lib/property-renderer/unknown.renderer.mjs +0 -12
- package/esm2022/renderer/lib/renderer.directive.mjs +0 -51
- package/esm2022/renderer/lib/services/renderer/renderer.interface.mjs +0 -2
- package/esm2022/renderer/lib/services/renderer/renderer.service.mjs +0 -84
- package/esm2022/renderer/yuuvis-client-framework-renderer.mjs +0 -5
- package/esm2022/sequence-list/index.mjs +0 -4
- package/esm2022/sequence-list/lib/due-date-picker/due-date-picker.component.mjs +0 -99
- package/esm2022/sequence-list/lib/sequence-list.component.mjs +0 -141
- package/esm2022/sequence-list/lib/sequence-list.interface.mjs +0 -2
- package/esm2022/sequence-list/yuuvis-client-framework-sequence-list.mjs +0 -5
- package/esm2022/simple-search/index.mjs +0 -3
- package/esm2022/simple-search/lib/simple-search/simple-search.component.mjs +0 -111
- package/esm2022/simple-search/lib/simple-search/simple-search.interface.mjs +0 -2
- package/esm2022/simple-search/yuuvis-client-framework-simple-search.mjs +0 -5
- package/esm2022/tile-list/index.mjs +0 -11
- package/esm2022/tile-list/lib/tile/tile.component.mjs +0 -53
- package/esm2022/tile-list/lib/tile-config/action-select/action-select.component.mjs +0 -25
- package/esm2022/tile-list/lib/tile-config/icon-select/icon-select.component.mjs +0 -33
- package/esm2022/tile-list/lib/tile-config/property-select/property-select.component.mjs +0 -91
- package/esm2022/tile-list/lib/tile-config/tile-config-tile/tile-config-tile.component.mjs +0 -66
- package/esm2022/tile-list/lib/tile-config/tile-config-trigger/tile-config-trigger.component.mjs +0 -46
- package/esm2022/tile-list/lib/tile-config/tile-config.component.mjs +0 -156
- package/esm2022/tile-list/lib/tile-extension/directive/tile-extension.directive.mjs +0 -37
- package/esm2022/tile-list/lib/tile-extension/extensions/email.extension.mjs +0 -42
- package/esm2022/tile-list/lib/tile-extension/tile-extension.service.mjs +0 -35
- package/esm2022/tile-list/lib/tile-list/tile-list.component.mjs +0 -510
- package/esm2022/tile-list/lib/tile-list/tile-list.interface.mjs +0 -2
- package/esm2022/tile-list/yuuvis-client-framework-tile-list.mjs +0 -5
- package/esm2022/token-search/index.mjs +0 -3
- package/esm2022/token-search/token-search.component.mjs +0 -78
- package/esm2022/token-search/token-search.interface.mjs +0 -2
- package/esm2022/token-search/yuuvis-client-framework-token-search.mjs +0 -5
- package/esm2022/tree/index.mjs +0 -3
- package/esm2022/tree/lib/tree-node/tree-node.component.mjs +0 -65
- package/esm2022/tree/lib/tree.component.mjs +0 -148
- package/esm2022/tree/lib/tree.interface.mjs +0 -2
- package/esm2022/tree/lib/tree.service.mjs +0 -95
- package/esm2022/tree/yuuvis-client-framework-tree.mjs +0 -5
- package/esm2022/upload-progress/index.mjs +0 -2
- package/esm2022/upload-progress/lib/upload-progress/upload-progress-overlay/upload-progress-overlay.component.mjs +0 -49
- package/esm2022/upload-progress/lib/upload-progress/upload-progress.component.mjs +0 -37
- package/esm2022/upload-progress/yuuvis-client-framework-upload-progress.mjs +0 -5
- package/esm2022/user-avatar/index.mjs +0 -3
- package/esm2022/user-avatar/lib/user-avatar.component.mjs +0 -69
- package/esm2022/user-avatar/lib/user-avatar.module.mjs +0 -24
- package/esm2022/user-avatar/yuuvis-client-framework-user-avatar.mjs +0 -5
- package/esm2022/yuuvis-client-framework.mjs +0 -5
- package/fesm2022/yuuvis-client-framework-token-search.mjs +0 -85
- package/fesm2022/yuuvis-client-framework-token-search.mjs.map +0 -1
- package/fesm2022/yuuvis-client-framework-user-avatar.mjs +0 -96
- package/fesm2022/yuuvis-client-framework-user-avatar.mjs.map +0 -1
- package/forms/lib/form-input/form-input.component.d.ts +0 -48
- package/object-form/lib/object-form-translate.service.d.ts +0 -15
- package/object-form/lib/object-form.model.d.ts +0 -18
- package/sequence-list/lib/due-date-picker/due-date-picker.component.d.ts +0 -28
- package/simple-search/lib/simple-search/simple-search.interface.d.ts +0 -4
- package/token-search/README.md +0 -3
- package/token-search/index.d.ts +0 -2
- package/token-search/token-search.component.d.ts +0 -22
- package/token-search/token-search.interface.d.ts +0 -4
- package/user-avatar/README.md +0 -3
- package/user-avatar/index.d.ts +0 -2
- package/user-avatar/lib/user-avatar.component.d.ts +0 -44
- package/user-avatar/lib/user-avatar.module.d.ts +0 -8
- /package/{metadata-form → metadata-form-defaults}/lib/metadata-default-templates/metadata-default-templates.component.d.ts +0 -0
|
@@ -1,195 +0,0 @@
|
|
|
1
|
-
import { Component, forwardRef, Input } from '@angular/core';
|
|
2
|
-
import { FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
|
-
import { Classification, TranslateService, Utils } from '@yuuvis/client-core';
|
|
4
|
-
import { FileSizePipe, LocaleNumberPipe } from '@yuuvis/client-core';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@yuuvis/client-core";
|
|
7
|
-
import * as i2 from "@angular/forms";
|
|
8
|
-
/**
|
|
9
|
-
* Creates form input for number values.
|
|
10
|
-
*
|
|
11
|
-
* Implements `ControlValueAccessor` so it can be used within Angular forms.
|
|
12
|
-
*
|
|
13
|
-
* @example
|
|
14
|
-
* <yuv-number [scale]="2"></yuv-number>
|
|
15
|
-
*
|
|
16
|
-
*/
|
|
17
|
-
export class NumberComponent {
|
|
18
|
-
/**
|
|
19
|
-
* Number of decimal places
|
|
20
|
-
*/
|
|
21
|
-
set scale(val) {
|
|
22
|
-
this._scale = Math.min(val || 0, 30);
|
|
23
|
-
}
|
|
24
|
-
get scale() {
|
|
25
|
-
return this._scale;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Overall amount of digits allowed (including decimal places)
|
|
29
|
-
*/
|
|
30
|
-
set precision(val) {
|
|
31
|
-
this._precision = Math.min(val || 100, 100);
|
|
32
|
-
}
|
|
33
|
-
get precision() {
|
|
34
|
-
return this._precision;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Set to true to group number by pattern
|
|
38
|
-
*/
|
|
39
|
-
set grouping(val) {
|
|
40
|
-
this._grouping = val ?? true;
|
|
41
|
-
}
|
|
42
|
-
get grouping() {
|
|
43
|
-
return this._grouping;
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* The pattern to group number value by
|
|
47
|
-
*/
|
|
48
|
-
set groupPattern(val) {
|
|
49
|
-
this._pattern = val;
|
|
50
|
-
}
|
|
51
|
-
get groupPattern() {
|
|
52
|
-
return this._pattern;
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* classification property adds some semantics to the value of this component.
|
|
56
|
-
* If you provide a value of `filesize` numbers typed into the control will be
|
|
57
|
-
* handled like file sizes (calculates differnt units)
|
|
58
|
-
*/
|
|
59
|
-
set classifications(classifications) {
|
|
60
|
-
this.numberPipe =
|
|
61
|
-
classifications && classifications.includes(Classification.NUMBER_FILESIZE) ? new FileSizePipe(this.translate) : new LocaleNumberPipe(this.translate);
|
|
62
|
-
}
|
|
63
|
-
static betweenTwoNumbers(val, minVal, maxVal) {
|
|
64
|
-
const min = !Utils.isEmpty(minVal) ? minVal : -Infinity;
|
|
65
|
-
const max = !Utils.isEmpty(maxVal) ? maxVal : Infinity;
|
|
66
|
-
return val >= min && val <= max;
|
|
67
|
-
}
|
|
68
|
-
constructor(translate) {
|
|
69
|
-
this.translate = translate;
|
|
70
|
-
this.innerValue = null;
|
|
71
|
-
this._grouping = false;
|
|
72
|
-
this.validationErrors = [];
|
|
73
|
-
/**
|
|
74
|
-
* Will prevent the input from being changed (default: false)
|
|
75
|
-
*/
|
|
76
|
-
this.readonly = false;
|
|
77
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
|
|
78
|
-
this.propagateChange = (_) => { };
|
|
79
|
-
this.numberPipe = new LocaleNumberPipe(this.translate);
|
|
80
|
-
}
|
|
81
|
-
writeValue(value) {
|
|
82
|
-
this.value = value != null ? value : null;
|
|
83
|
-
this.innerValue = value != null ? this.numberPipe.numberToString(value, this.grouping, this.groupPattern, this.scale) : null;
|
|
84
|
-
}
|
|
85
|
-
registerOnChange(fn) {
|
|
86
|
-
this.propagateChange = fn;
|
|
87
|
-
}
|
|
88
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
89
|
-
registerOnTouched() { }
|
|
90
|
-
onValueChange(evt) {
|
|
91
|
-
this.validationErrors = [];
|
|
92
|
-
if (Utils.isEmpty(evt)) {
|
|
93
|
-
this.value = undefined;
|
|
94
|
-
this.propagateChange(this.value);
|
|
95
|
-
return;
|
|
96
|
-
}
|
|
97
|
-
// validate input
|
|
98
|
-
const val = this.numberPipe.stringToNumber(evt);
|
|
99
|
-
// general number validation
|
|
100
|
-
if (isNaN(val) || typeof val !== 'number') {
|
|
101
|
-
this.validationErrors.push({ key: 'number' });
|
|
102
|
-
}
|
|
103
|
-
else {
|
|
104
|
-
const split = evt.replaceAll(this.numberPipe.separator, '').split(this.numberPipe.decimalSeparator);
|
|
105
|
-
// check precision
|
|
106
|
-
if (this.precision !== undefined) {
|
|
107
|
-
const prePointDigits = this.precision - (this.scale || 0);
|
|
108
|
-
if (split[0]?.length > prePointDigits) {
|
|
109
|
-
this.validationErrors.push({ key: 'precision', params: { prePointDigits } });
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
// check scale
|
|
113
|
-
if (this.scale && split[1]?.length > this.scale) {
|
|
114
|
-
this.validationErrors.push({ key: 'scale', params: { scale: this.scale } });
|
|
115
|
-
}
|
|
116
|
-
// min max
|
|
117
|
-
if (!NumberComponent.betweenTwoNumbers(val, this.minValue, this.maxValue)) {
|
|
118
|
-
if (Utils.isEmpty(this.minValue)) {
|
|
119
|
-
this.validationErrors.push({ key: 'maxvalue', params: { maxValue: this.maxValue } });
|
|
120
|
-
}
|
|
121
|
-
else if (Utils.isEmpty(this.maxValue)) {
|
|
122
|
-
this.validationErrors.push({ key: 'minvalue', params: { minValue: this.minValue } });
|
|
123
|
-
}
|
|
124
|
-
else {
|
|
125
|
-
this.validationErrors.push({ key: 'minmax', params: { minValue: this.minValue, maxValue: this.maxValue } });
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
if (!this.validationErrors.length) {
|
|
129
|
-
this.value = val;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
this.propagateChange(this.value);
|
|
133
|
-
}
|
|
134
|
-
// called when the input looses focus
|
|
135
|
-
format() {
|
|
136
|
-
if (!this.readonly && typeof this.value === 'number' && this.validationErrors.length === 0) {
|
|
137
|
-
this.innerValue = this.numberPipe.numberToString(this.value, this.grouping, this.groupPattern, this.scale);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
// called when the input get focus
|
|
141
|
-
unformat() {
|
|
142
|
-
if (!this.readonly && typeof this.value === 'number' && this.validationErrors.length === 0) {
|
|
143
|
-
this.innerValue = this.numberPipe.transform(this.value, false);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
// returns null when valid else the validation object
|
|
147
|
-
validate() {
|
|
148
|
-
return this.validationErrors.length ? Utils.arrayToObject(this.validationErrors, 'key', (err) => ({ valid: false, ...err })) : null;
|
|
149
|
-
}
|
|
150
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NumberComponent, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
151
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NumberComponent, isStandalone: true, selector: "yuv-number", inputs: { scale: "scale", precision: "precision", grouping: "grouping", groupPattern: "groupPattern", readonly: "readonly", minValue: "minValue", maxValue: "maxValue", classifications: "classifications" }, providers: [
|
|
152
|
-
{
|
|
153
|
-
provide: NG_VALUE_ACCESSOR,
|
|
154
|
-
useExisting: forwardRef(() => NumberComponent),
|
|
155
|
-
multi: true
|
|
156
|
-
},
|
|
157
|
-
{
|
|
158
|
-
provide: NG_VALIDATORS,
|
|
159
|
-
useExisting: forwardRef(() => NumberComponent),
|
|
160
|
-
multi: true
|
|
161
|
-
}
|
|
162
|
-
], ngImport: i0, template: "<input type=\"string\" [(ngModel)]=\"innerValue\" (focus)=\"unformat()\" (blur)=\"format()\" class=\"input-number\"\n [readonly]=\"readonly\" (ngModelChange)=\"onValueChange($event)\" />\n", styles: [":host{display:flex}:host input{width:100%;border:0;background-color:transparent}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
|
|
163
|
-
}
|
|
164
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NumberComponent, decorators: [{
|
|
165
|
-
type: Component,
|
|
166
|
-
args: [{ selector: 'yuv-number', standalone: true, imports: [FormsModule], providers: [
|
|
167
|
-
{
|
|
168
|
-
provide: NG_VALUE_ACCESSOR,
|
|
169
|
-
useExisting: forwardRef(() => NumberComponent),
|
|
170
|
-
multi: true
|
|
171
|
-
},
|
|
172
|
-
{
|
|
173
|
-
provide: NG_VALIDATORS,
|
|
174
|
-
useExisting: forwardRef(() => NumberComponent),
|
|
175
|
-
multi: true
|
|
176
|
-
}
|
|
177
|
-
], template: "<input type=\"string\" [(ngModel)]=\"innerValue\" (focus)=\"unformat()\" (blur)=\"format()\" class=\"input-number\"\n [readonly]=\"readonly\" (ngModelChange)=\"onValueChange($event)\" />\n", styles: [":host{display:flex}:host input{width:100%;border:0;background-color:transparent}\n"] }]
|
|
178
|
-
}], ctorParameters: () => [{ type: i1.TranslateService }], propDecorators: { scale: [{
|
|
179
|
-
type: Input
|
|
180
|
-
}], precision: [{
|
|
181
|
-
type: Input
|
|
182
|
-
}], grouping: [{
|
|
183
|
-
type: Input
|
|
184
|
-
}], groupPattern: [{
|
|
185
|
-
type: Input
|
|
186
|
-
}], readonly: [{
|
|
187
|
-
type: Input
|
|
188
|
-
}], minValue: [{
|
|
189
|
-
type: Input
|
|
190
|
-
}], maxValue: [{
|
|
191
|
-
type: Input
|
|
192
|
-
}], classifications: [{
|
|
193
|
-
type: Input
|
|
194
|
-
}] } });
|
|
195
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMveXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvZm9ybXMvc3JjL2xpYi9lbGVtZW50cy9udW1iZXIvbnVtYmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMveXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvZm9ybXMvc3JjL2xpYi9lbGVtZW50cy9udW1iZXIvbnVtYmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQXdCLFdBQVcsRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQStCLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEksT0FBTyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7QUFFckU7Ozs7Ozs7O0dBUUc7QUFvQkgsTUFBTSxPQUFPLGVBQWU7SUFVMUI7O09BRUc7SUFDSCxJQUNJLEtBQUssQ0FBQyxHQUF1QjtRQUMvQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBQ0QsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFDRDs7T0FFRztJQUNILElBQ0ksU0FBUyxDQUFDLEdBQXVCO1FBQ25DLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsQ0FBQyxD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aUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQztnQkFDOUMsS0FBSyxFQUFFLElBQUk7YUFDWjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxhQUFhO2dCQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQztnQkFDOUMsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGLDBCQy9CSCwrTEFFQSwySURlWSxXQUFXOzs0RkFnQlYsZUFBZTtrQkFuQjNCLFNBQVM7K0JBQ0UsWUFBWSxjQUNWLElBQUksV0FDUCxDQUFDLFdBQVcsQ0FBQyxhQUdYO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLGdCQUFnQixDQUFDOzRCQUM5QyxLQUFLLEVBQUUsSUFBSTt5QkFDWjt3QkFDRDs0QkFDRSxPQUFPLEVBQUUsYUFBYTs0QkFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLENBQUM7NEJBQzlDLEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO3FGQWdCRyxLQUFLO3NCQURSLEtBQUs7Z0JBV0YsU0FBUztzQkFEWixLQUFLO2dCQVdGLFFBQVE7c0JBRFgsS0FBSztnQkFXRixZQUFZO3NCQURmLEtBQUs7Z0JBVUcsUUFBUTtzQkFBaEIsS0FBSztnQkFLRyxRQUFRO3NCQUFoQixLQUFLO2dCQU1HLFFBQVE7c0JBQWhCLEtBQUs7Z0JBT08sZUFBZTtzQkFBM0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgZm9yd2FyZFJlZiwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3Jtc01vZHVsZSwgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1IsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENsYXNzaWZpY2F0aW9uLCBUcmFuc2xhdGVTZXJ2aWNlLCBVdGlscyB9IGZyb20gJ0B5dXV2aXMvY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgRmlsZVNpemVQaXBlLCBMb2NhbGVOdW1iZXJQaXBlIH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtY29yZSc7XG5cbi8qKlxuICogQ3JlYXRlcyBmb3JtIGlucHV0IGZvciBudW1iZXIgdmFsdWVzLlxuICpcbiAqIEltcGxlbWVudHMgYENvbnRyb2xWYWx1ZUFjY2Vzc29yYCBzbyBpdCBjYW4gYmUgdXNlZCB3aXRoaW4gQW5ndWxhciBmb3Jtcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogPHl1di1udW1iZXIgW3NjYWxlXT1cIjJcIj48L3l1di1udW1iZXI+XG4gKlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd5dXYtbnVtYmVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0Zvcm1zTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL251bWJlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL251bWJlci5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE51bWJlckNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE51bWJlckNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBOdW1iZXJDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yIHtcbiAgdmFsdWU/OiBudW1iZXI7XG4gIGlubmVyVmFsdWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBfc2NhbGU/OiBudW1iZXI7XG4gIF9wcmVjaXNpb24/OiBudW1iZXI7XG4gIF9wYXR0ZXJuPzogc3RyaW5nO1xuICBfZ3JvdXBpbmcgPSBmYWxzZTtcbiAgdmFsaWRhdGlvbkVycm9yczogVmFsaWRhdGlvbkVycm9yc1tdID0gW107XG4gIG51bWJlclBpcGU6IExvY2FsZU51bWJlclBpcGUgfCBGaWxlU2l6ZVBpcGU7XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiBkZWNpbWFsIHBsYWNlc1xuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IHNjYWxlKHZhbDogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fc2NhbGUgPSBNYXRoLm1pbih2YWwgfHwgMCwgMzApO1xuICB9XG4gIGdldCBzY2FsZSgpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9zY2FsZTtcbiAgfVxuICAvKipcbiAgICogT3ZlcmFsbCBhbW91bnQgb2YgZGlnaXRzIGFsbG93ZWQgKGluY2x1ZGluZyBkZWNpbWFsIHBsYWNlcylcbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBwcmVjaXNpb24odmFsOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9wcmVjaXNpb24gPSBNYXRoLm1pbih2YWwgfHwgMTAwLCAxMDApO1xuICB9XG4gIGdldCBwcmVjaXNpb24oKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fcHJlY2lzaW9uO1xuICB9XG4gIC8qKlxuICAgKiAgU2V0IHRvIHRydWUgdG8gZ3JvdXAgbnVtYmVyIGJ5IHBhdHRlcm5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBncm91cGluZyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9ncm91cGluZyA9IHZhbCA/PyB0cnVlO1xuICB9XG4gIGdldCBncm91cGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZ3JvdXBpbmc7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBwYXR0ZXJuIHRvIGdyb3VwIG51bWJlciB2YWx1ZSBieVxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGdyb3VwUGF0dGVybih2YWw6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3BhdHRlcm4gPSB2YWw7XG4gIH1cbiAgZ2V0IGdyb3VwUGF0dGVybigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9wYXR0ZXJuO1xuICB9XG4gIC8qKlxuICAgKiBXaWxsIHByZXZlbnQgdGhlIGlucHV0IGZyb20gYmVpbmcgY2hhbmdlZCAoZGVmYXVsdDogZmFsc2UpXG4gICAqL1xuICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBzZXQgbWluaW11bSBpbnB1dCB2YWx1ZVxuICAgKi9cbiAgQElucHV0KCkgbWluVmFsdWU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIHNldCBtYXhpbXVtIGlucHV0IHZhbHVlXG4gICAqXG4gICAqL1xuICBASW5wdXQoKSBtYXhWYWx1ZT86IG51bWJlcjtcblxuICAvKipcbiAgICogY2xhc3NpZmljYXRpb24gcHJvcGVydHkgYWRkcyBzb21lIHNlbWFudGljcyB0byB0aGUgdmFsdWUgb2YgdGhpcyBjb21wb25lbnQuXG4gICAqIElmIHlvdSBwcm92aWRlIGEgdmFsdWUgb2YgYGZpbGVzaXplYCBudW1iZXJzIHR5cGVkIGludG8gdGhlIGNvbnRyb2wgd2lsbCBiZVxuICAgKiBoYW5kbGVkIGxpa2UgZmlsZSBzaXplcyAoY2FsY3VsYXRlcyBkaWZmZXJudCB1bml0cylcbiAgICovXG4gIEBJbnB1dCgpIHNldCBjbGFzc2lmaWNhdGlvbnMoY2xhc3NpZmljYXRpb25zOiBzdHJpbmdbXSkge1xuICAgIHRoaXMubnVtYmVyUGlwZSA9XG4gICAgICBjbGFzc2lmaWNhdGlvbnMgJiYgY2xhc3NpZmljYXRpb25zLmluY2x1ZGVzKENsYXNzaWZpY2F0aW9uLk5VTUJFUl9GSUxFU0laRSkgPyBuZXcgRmlsZVNpemVQaXBlKHRoaXMudHJhbnNsYXRlKSA6IG5ldyBMb2NhbGVOdW1iZXJQaXBlKHRoaXMudHJhbnNsYXRlKTtcbiAgfVxuXG4gIHN0YXRpYyBiZXR3ZWVuVHdvTnVtYmVycyh2YWw6IG51bWJlciwgbWluVmFsOiBudW1iZXIgfCB1bmRlZmluZWQsIG1heFZhbDogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgbWluID0gIVV0aWxzLmlzRW1wdHkobWluVmFsKSA/IG1pblZhbCA6IC1JbmZpbml0eTtcbiAgICBjb25zdCBtYXggPSAhVXRpbHMuaXNFbXB0eShtYXhWYWwpID8gbWF4VmFsIDogSW5maW5pdHk7XG4gICAgcmV0dXJuIHZhbCA+PSAobWluIGFzIG51bWJlcikgJiYgdmFsIDw9IChtYXggYXMgbnVtYmVyKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlKSB7XG4gICAgdGhpcy5udW1iZXJQaXBlID0gbmV3IExvY2FsZU51bWJlclBpcGUodGhpcy50cmFuc2xhdGUpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycywgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIHByb3BhZ2F0ZUNoYW5nZSA9IChfOiBhbnkpID0+IHt9O1xuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZSAhPSBudWxsID8gdmFsdWUgOiBudWxsO1xuICAgIHRoaXMuaW5uZXJWYWx1ZSA9IHZhbHVlICE9IG51bGwgPyB0aGlzLm51bWJlclBpcGUubnVtYmVyVG9TdHJpbmcodmFsdWUsIHRoaXMuZ3JvdXBpbmcsIHRoaXMuZ3JvdXBQYXR0ZXJuLCB0aGlzLnNjYWxlKSA6IG51bGw7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICByZWdpc3Rlck9uVG91Y2hlZCgpOiB2b2lkIHt9XG5cbiAgb25WYWx1ZUNoYW5nZShldnQ6IGFueSkge1xuICAgIHRoaXMudmFsaWRhdGlvbkVycm9ycyA9IFtdO1xuXG4gICAgaWYgKFV0aWxzLmlzRW1wdHkoZXZ0KSkge1xuICAgICAgdGhpcy52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMudmFsdWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHZhbGlkYXRlIGlucHV0XG4gICAgY29uc3QgdmFsID0gdGhpcy5udW1iZXJQaXBlLnN0cmluZ1RvTnVtYmVyKGV2dCk7XG4gICAgLy8gZ2VuZXJhbCBudW1iZXIgdmFsaWRhdGlvblxuICAgIGlmIChpc05hTih2YWwpIHx8IHR5cGVvZiB2YWwgIT09ICdudW1iZXInKSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25FcnJvcnMucHVzaCh7IGtleTogJ251bWJlcicgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNwbGl0ID0gZXZ0LnJlcGxhY2VBbGwodGhpcy5udW1iZXJQaXBlLnNlcGFyYXRvciwgJycpLnNwbGl0KHRoaXMubnVtYmVyUGlwZS5kZWNpbWFsU2VwYXJhdG9yKTtcbiAgICAgIC8vIGNoZWNrIHByZWNpc2lvblxuICAgICAgaWYgKHRoaXMucHJlY2lzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgcHJlUG9pbnREaWdpdHMgPSB0aGlzLnByZWNpc2lvbiAtICh0aGlzLnNjYWxlIHx8IDApO1xuICAgICAgICBpZiAoc3BsaXRbMF0/Lmxlbmd0aCA+IHByZVBvaW50RGlnaXRzKSB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3JzLnB1c2goeyBrZXk6ICdwcmVjaXNpb24nLCBwYXJhbXM6IHsgcHJlUG9pbnREaWdpdHMgfSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gY2hlY2sgc2NhbGVcbiAgICAgIGlmICh0aGlzLnNjYWxlICYmIHNwbGl0WzFdPy5sZW5ndGggPiB0aGlzLnNjYWxlKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9ycy5wdXNoKHsga2V5OiAnc2NhbGUnLCBwYXJhbXM6IHsgc2NhbGU6IHRoaXMuc2NhbGUgfSB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gbWluIG1heFxuICAgICAgaWYgKCFOdW1iZXJDb21wb25lbnQuYmV0d2VlblR3b051bWJlcnModmFsLCB0aGlzLm1pblZhbHVlLCB0aGlzLm1heFZhbHVlKSkge1xuICAgICAgICBpZiAoVXRpbHMuaXNFbXB0eSh0aGlzLm1pblZhbHVlKSkge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9ycy5wdXNoKHsga2V5OiAnbWF4dmFsdWUnLCBwYXJhbXM6IHsgbWF4VmFsdWU6IHRoaXMubWF4VmFsdWUgfSB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChVdGlscy5pc0VtcHR5KHRoaXMubWF4VmFsdWUpKSB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3JzLnB1c2goeyBrZXk6ICdtaW52YWx1ZScsIHBhcmFtczogeyBtaW5WYWx1ZTogdGhpcy5taW5WYWx1ZSB9IH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9ycy5wdXNoKHsga2V5OiAnbWlubWF4JywgcGFyYW1zOiB7IG1pblZhbHVlOiB0aGlzLm1pblZhbHVlLCBtYXhWYWx1ZTogdGhpcy5tYXhWYWx1ZSB9IH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy52YWxpZGF0aW9uRXJyb3JzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIC8vIGNhbGxlZCB3aGVuIHRoZSBpbnB1dCBsb29zZXMgZm9jdXNcbiAgcHVibGljIGZvcm1hdCgpIHtcbiAgICBpZiAoIXRoaXMucmVhZG9ubHkgJiYgdHlwZW9mIHRoaXMudmFsdWUgPT09ICdudW1iZXInICYmIHRoaXMudmFsaWRhdGlvbkVycm9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuaW5uZXJWYWx1ZSA9IHRoaXMubnVtYmVyUGlwZS5udW1iZXJUb1N0cmluZyh0aGlzLnZhbHVlLCB0aGlzLmdyb3VwaW5nLCB0aGlzLmdyb3VwUGF0dGVybiwgdGhpcy5zY2FsZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gY2FsbGVkIHdoZW4gdGhlIGlucHV0IGdldCBmb2N1c1xuICBwdWJsaWMgdW5mb3JtYXQoKSB7XG4gICAgaWYgKCF0aGlzLnJlYWRvbmx5ICYmIHR5cGVvZiB0aGlzLnZhbHVlID09PSAnbnVtYmVyJyAmJiB0aGlzLnZhbGlkYXRpb25FcnJvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmlubmVyVmFsdWUgPSB0aGlzLm51bWJlclBpcGUudHJhbnNmb3JtKHRoaXMudmFsdWUsIGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICAvLyByZXR1cm5zIG51bGwgd2hlbiB2YWxpZCBlbHNlIHRoZSB2YWxpZGF0aW9uIG9iamVjdFxuICBwdWJsaWMgdmFsaWRhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsaWRhdGlvbkVycm9ycy5sZW5ndGggPyBVdGlscy5hcnJheVRvT2JqZWN0KHRoaXMudmFsaWRhdGlvbkVycm9ycywgJ2tleScsIChlcnIpID0+ICh7IHZhbGlkOiBmYWxzZSwgLi4uZXJyIH0pKSA6IG51bGw7XG4gIH1cbn1cbiIsIjxpbnB1dCB0eXBlPVwic3RyaW5nXCIgWyhuZ01vZGVsKV09XCJpbm5lclZhbHVlXCIgKGZvY3VzKT1cInVuZm9ybWF0KClcIiAoYmx1cik9XCJmb3JtYXQoKVwiIGNsYXNzPVwiaW5wdXQtbnVtYmVyXCJcbiAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCIgKG5nTW9kZWxDaGFuZ2UpPVwib25WYWx1ZUNoYW5nZSgkZXZlbnQpXCIgLz5cbiJdfQ==
|
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
import { CommonModule } from '@angular/common';
|
|
2
|
-
import { Component, forwardRef, Input } from '@angular/core';
|
|
3
|
-
import { FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, ReactiveFormsModule, UntypedFormControl, UntypedFormGroup } from '@angular/forms';
|
|
4
|
-
import { Operator, OperatorLabel } from '@yuuvis/client-core';
|
|
5
|
-
import { YvcDropdownModule } from '@yuuvis/components/dropdown';
|
|
6
|
-
import { NumberComponent } from '../number/number.component';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "@yuuvis/components/dropdown";
|
|
9
|
-
import * as i2 from "@angular/forms";
|
|
10
|
-
/**
|
|
11
|
-
* Creates form input for ranges of numeric values.
|
|
12
|
-
*
|
|
13
|
-
* Implements `ControlValueAccessor` so it can be used within Angular forms.
|
|
14
|
-
*
|
|
15
|
-
* @example
|
|
16
|
-
* <yuv-number-range [scale]="2"></yuv-number-range>
|
|
17
|
-
*
|
|
18
|
-
*/
|
|
19
|
-
export class NumberRangeComponent {
|
|
20
|
-
constructor() {
|
|
21
|
-
/**
|
|
22
|
-
* Set to true to group number by pattern
|
|
23
|
-
*/
|
|
24
|
-
this.grouping = false;
|
|
25
|
-
/**
|
|
26
|
-
* Will prevent the input from being changed (default: false)
|
|
27
|
-
*/
|
|
28
|
-
this.readonly = false;
|
|
29
|
-
/**
|
|
30
|
-
* classification property adds some semantics to the value of this component.
|
|
31
|
-
* If you provide a value of `filesize` numbers typed into the control will be
|
|
32
|
-
* handled like file sizes (calculates differnt units)
|
|
33
|
-
*/
|
|
34
|
-
this.classifications = [];
|
|
35
|
-
this.rangeForm = new UntypedFormGroup({
|
|
36
|
-
numberValue: new UntypedFormControl(),
|
|
37
|
-
numberValueFrom: new UntypedFormControl()
|
|
38
|
-
});
|
|
39
|
-
this.isValid = true;
|
|
40
|
-
// options for search situation
|
|
41
|
-
this.availableSearchOptions = [
|
|
42
|
-
{ label: OperatorLabel.EQUAL, value: Operator.EQUAL },
|
|
43
|
-
{ label: OperatorLabel.GREATER_OR_EQUAL, value: Operator.GREATER_OR_EQUAL },
|
|
44
|
-
{ label: OperatorLabel.LESS_OR_EQUAL, value: Operator.LESS_OR_EQUAL },
|
|
45
|
-
{ label: OperatorLabel.INTERVAL_INCLUDE_BOTH, value: Operator.INTERVAL_INCLUDE_BOTH }
|
|
46
|
-
];
|
|
47
|
-
// the selected search option
|
|
48
|
-
this.searchOption = this.availableSearchOptions[1].value;
|
|
49
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
|
|
50
|
-
this.propagateChange = (_) => { };
|
|
51
|
-
this.rangeForm.valueChanges.forEach(() => {
|
|
52
|
-
this.onValueChange();
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
writeValue(value) {
|
|
56
|
-
if (value && (value.firstValue != null || value.secondValue != null)) {
|
|
57
|
-
const match = this.availableSearchOptions.find((o) => o.value === value.operator);
|
|
58
|
-
this.searchOption = match ? match.value : this.availableSearchOptions[0].value;
|
|
59
|
-
this.value = value;
|
|
60
|
-
if (value.secondValue == null) {
|
|
61
|
-
this.rangeForm.setValue({
|
|
62
|
-
numberValueFrom: null,
|
|
63
|
-
numberValue: value.firstValue != null ? value.firstValue : null
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
this.rangeForm.setValue({
|
|
68
|
-
numberValueFrom: value.firstValue != null ? value.firstValue : null,
|
|
69
|
-
numberValue: value.secondValue
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
this.searchOption = this.availableSearchOptions[0].value;
|
|
75
|
-
this.value = undefined;
|
|
76
|
-
this.rangeForm.reset();
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
registerOnChange(fn) {
|
|
80
|
-
this.propagateChange = fn;
|
|
81
|
-
}
|
|
82
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
|
|
83
|
-
registerOnTouched(fn) { }
|
|
84
|
-
onValueChange() {
|
|
85
|
-
this.isValid = this.rangeForm.valid;
|
|
86
|
-
if (this.searchOption === Operator.INTERVAL_INCLUDE_BOTH) {
|
|
87
|
-
this.isValid = this.rangeForm.valid && this.rangeForm.value.numberValueFrom != null && this.rangeForm.value.numberValue != null;
|
|
88
|
-
this.value = !this.isValid
|
|
89
|
-
? {
|
|
90
|
-
operator: this.searchOption,
|
|
91
|
-
firstValue: undefined,
|
|
92
|
-
secondValue: undefined
|
|
93
|
-
}
|
|
94
|
-
: {
|
|
95
|
-
operator: this.searchOption,
|
|
96
|
-
firstValue: this.rangeForm.value.numberValueFrom,
|
|
97
|
-
secondValue: this.rangeForm.value.numberValue
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
this.value = !this.isValid
|
|
102
|
-
? {
|
|
103
|
-
operator: this.searchOption,
|
|
104
|
-
firstValue: undefined,
|
|
105
|
-
secondValue: undefined
|
|
106
|
-
}
|
|
107
|
-
: {
|
|
108
|
-
operator: this.searchOption,
|
|
109
|
-
firstValue: this.rangeForm.value.numberValue,
|
|
110
|
-
secondValue: undefined
|
|
111
|
-
};
|
|
112
|
-
}
|
|
113
|
-
this.propagateChange(this.value);
|
|
114
|
-
}
|
|
115
|
-
// returns null when valid else the validation object
|
|
116
|
-
validate() {
|
|
117
|
-
let err;
|
|
118
|
-
if (this.searchOption === Operator.EQUAL) {
|
|
119
|
-
err = { number: { valid: false } };
|
|
120
|
-
}
|
|
121
|
-
else if (this.searchOption === Operator.INTERVAL_INCLUDE_BOTH && this.value?.firstValue && this.value?.secondValue) {
|
|
122
|
-
// make sure that on ranges, the first value is earlier than the last
|
|
123
|
-
this.isValid = this.value.firstValue < this.value.secondValue;
|
|
124
|
-
err = { numberrangeorder: { valid: false } };
|
|
125
|
-
}
|
|
126
|
-
else {
|
|
127
|
-
err = { numberrange: { valid: false } };
|
|
128
|
-
}
|
|
129
|
-
return this.isValid ? null : err;
|
|
130
|
-
}
|
|
131
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NumberRangeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
132
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: NumberRangeComponent, isStandalone: true, selector: "yuv-number-range", inputs: { scale: "scale", precision: "precision", grouping: "grouping", pattern: "pattern", readonly: "readonly", classifications: "classifications", minValue: "minValue", maxValue: "maxValue" }, providers: [
|
|
133
|
-
{
|
|
134
|
-
provide: NG_VALUE_ACCESSOR,
|
|
135
|
-
useExisting: forwardRef(() => NumberRangeComponent),
|
|
136
|
-
multi: true
|
|
137
|
-
},
|
|
138
|
-
{
|
|
139
|
-
provide: NG_VALIDATORS,
|
|
140
|
-
useExisting: forwardRef(() => NumberRangeComponent),
|
|
141
|
-
multi: true
|
|
142
|
-
}
|
|
143
|
-
], ngImport: i0, template: "<form class=\"yuv-number-range\" [formGroup]=\"rangeForm\">\n @if(searchOption === 'gtelte'){\n <yuv-number\n class=\"first\"\n [readonly]=\"readonly\"\n [scale]=\"scale\"\n [precision]=\"precision\"\n [grouping]=\"grouping\"\n [groupPattern]=\"pattern\"\n formControlName=\"numberValueFrom\"\n [classifications]=\"classifications\"\n [minValue]=\"minValue\"\n [maxValue]=\"maxValue\"\n ></yuv-number>}\n\n <yvc-dropdown\n class=\"no-trigger\"\n [(ngModel)]=\"searchOption\"\n (ngModelChange)=\"onValueChange()\"\n [disabled]=\"readonly\"\n [disableClearButton]=\"true\"\n [ngModelOptions]=\"{ standalone: true }\"\n [options]=\"availableSearchOptions\"\n ></yvc-dropdown>\n\n <yuv-number\n [scale]=\"scale\"\n [readonly]=\"readonly\"\n [precision]=\"precision\"\n [grouping]=\"grouping\"\n [groupPattern]=\"pattern\"\n formControlName=\"numberValue\"\n [classifications]=\"classifications\"\n [minValue]=\"minValue\"\n [maxValue]=\"maxValue\"\n >\n </yuv-number>\n</form>\n", styles: [":host>form{display:flex;flex-flow:row nowrap;gap:3px}:host>form yuv-number{flex:1 1 auto}:host>form yvc-dropdown{--yvc-form-element-border-color: var(--text-color-hint);--yvc-form-element-focus-border-color: var(--color-accent);padding:0;min-width:auto;border-radius:2px;background-color:var(--list-item-hover-background)}:host>form yvc-dropdown:hover{background-color:var(--list-item-selected-background)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: NumberComponent, selector: "yuv-number", inputs: ["scale", "precision", "grouping", "groupPattern", "readonly", "minValue", "maxValue", "classifications"] }, { kind: "ngmodule", type: YvcDropdownModule }, { kind: "component", type: i1.Dropdown, selector: "yvc-dropdown", inputs: ["options", "filter", "disabled", "multiple", "disableClearButton"], outputs: ["onDropdownOptionsClose"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] }); }
|
|
144
|
-
}
|
|
145
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NumberRangeComponent, decorators: [{
|
|
146
|
-
type: Component,
|
|
147
|
-
args: [{ selector: 'yuv-number-range', standalone: true, imports: [CommonModule, NumberComponent, YvcDropdownModule, FormsModule, ReactiveFormsModule], providers: [
|
|
148
|
-
{
|
|
149
|
-
provide: NG_VALUE_ACCESSOR,
|
|
150
|
-
useExisting: forwardRef(() => NumberRangeComponent),
|
|
151
|
-
multi: true
|
|
152
|
-
},
|
|
153
|
-
{
|
|
154
|
-
provide: NG_VALIDATORS,
|
|
155
|
-
useExisting: forwardRef(() => NumberRangeComponent),
|
|
156
|
-
multi: true
|
|
157
|
-
}
|
|
158
|
-
], template: "<form class=\"yuv-number-range\" [formGroup]=\"rangeForm\">\n @if(searchOption === 'gtelte'){\n <yuv-number\n class=\"first\"\n [readonly]=\"readonly\"\n [scale]=\"scale\"\n [precision]=\"precision\"\n [grouping]=\"grouping\"\n [groupPattern]=\"pattern\"\n formControlName=\"numberValueFrom\"\n [classifications]=\"classifications\"\n [minValue]=\"minValue\"\n [maxValue]=\"maxValue\"\n ></yuv-number>}\n\n <yvc-dropdown\n class=\"no-trigger\"\n [(ngModel)]=\"searchOption\"\n (ngModelChange)=\"onValueChange()\"\n [disabled]=\"readonly\"\n [disableClearButton]=\"true\"\n [ngModelOptions]=\"{ standalone: true }\"\n [options]=\"availableSearchOptions\"\n ></yvc-dropdown>\n\n <yuv-number\n [scale]=\"scale\"\n [readonly]=\"readonly\"\n [precision]=\"precision\"\n [grouping]=\"grouping\"\n [groupPattern]=\"pattern\"\n formControlName=\"numberValue\"\n [classifications]=\"classifications\"\n [minValue]=\"minValue\"\n [maxValue]=\"maxValue\"\n >\n </yuv-number>\n</form>\n", styles: [":host>form{display:flex;flex-flow:row nowrap;gap:3px}:host>form yuv-number{flex:1 1 auto}:host>form yvc-dropdown{--yvc-form-element-border-color: var(--text-color-hint);--yvc-form-element-focus-border-color: var(--color-accent);padding:0;min-width:auto;border-radius:2px;background-color:var(--list-item-hover-background)}:host>form yvc-dropdown:hover{background-color:var(--list-item-selected-background)}\n"] }]
|
|
159
|
-
}], ctorParameters: () => [], propDecorators: { scale: [{
|
|
160
|
-
type: Input
|
|
161
|
-
}], precision: [{
|
|
162
|
-
type: Input
|
|
163
|
-
}], grouping: [{
|
|
164
|
-
type: Input
|
|
165
|
-
}], pattern: [{
|
|
166
|
-
type: Input
|
|
167
|
-
}], readonly: [{
|
|
168
|
-
type: Input
|
|
169
|
-
}], classifications: [{
|
|
170
|
-
type: Input
|
|
171
|
-
}], minValue: [{
|
|
172
|
-
type: Input
|
|
173
|
-
}], maxValue: [{
|
|
174
|
-
type: Input
|
|
175
|
-
}] } });
|
|
176
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyLXJhbmdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMveXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvZm9ybXMvc3JjL2xpYi9lbGVtZW50cy9udW1iZXItcmFuZ2UvbnVtYmVyLXJhbmdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMveXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvZm9ybXMvc3JjL2xpYi9lbGVtZW50cy9udW1iZXItcmFuZ2UvbnVtYmVyLXJhbmdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUVMLFdBQVcsRUFDWCxhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBRWpCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQWMsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7QUFFN0Q7Ozs7Ozs7O0dBUUc7QUFvQkgsTUFBTSxPQUFPLG9CQUFvQjtJQXdEL0I7UUEvQ0E7O1dBRUc7UUFDTSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBSzFCOztXQUVHO1FBQ00sYUFBUSxHQUFHLEtBQUssQ0FBQztRQUUxQjs7OztXQUlHO1FBQ00sb0JBQWUsR0FBYSxFQUFFLENBQUM7UUFXakMsY0FBUyxHQUFHLElBQUksZ0JBQWdCLENBQUM7WUFDdEMsV0FBVyxF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QUMsR0FBRyxFQUFFLENBQUMsb0JBQW9CLENBQUM7Z0JBQ25ELEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRiwwQkMxQ0gsc2lDQXNDQSxpZERWWSxZQUFZLCtCQUFFLGVBQWUseUtBQUUsaUJBQWlCLG9OQUFFLFdBQVcsbW1CQUFFLG1CQUFtQjs7NEZBZ0JqRixvQkFBb0I7a0JBbkJoQyxTQUFTOytCQUNFLGtCQUFrQixjQUNoQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyxhQUdsRjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQzs0QkFDbkQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7d0JBQ0Q7NEJBQ0UsT0FBTyxFQUFFLGFBQWE7NEJBQ3RCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHFCQUFxQixDQUFDOzRCQUNuRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjt3REFNUSxLQUFLO3NCQUFiLEtBQUs7Z0JBSUcsU0FBUztzQkFBakIsS0FBSztnQkFJRyxRQUFRO3NCQUFoQixLQUFLO2dCQUlHLE9BQU87c0JBQWYsS0FBSztnQkFJRyxRQUFRO3NCQUFoQixLQUFLO2dCQU9HLGVBQWU7c0JBQXZCLEtBQUs7Z0JBSUcsUUFBUTtzQkFBaEIsS0FBSztnQkFLRyxRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgZm9yd2FyZFJlZiwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBGb3Jtc01vZHVsZSxcbiAgTkdfVkFMSURBVE9SUyxcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gIFVudHlwZWRGb3JtQ29udHJvbCxcbiAgVW50eXBlZEZvcm1Hcm91cCxcbiAgVmFsaWRhdG9yXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE9wZXJhdG9yLCBPcGVyYXRvckxhYmVsLCBSYW5nZVZhbHVlIH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBZdmNEcm9wZG93bk1vZHVsZSB9IGZyb20gJ0B5dXV2aXMvY29tcG9uZW50cy9kcm9wZG93bic7XG5pbXBvcnQgeyBOdW1iZXJDb21wb25lbnQgfSBmcm9tICcuLi9udW1iZXIvbnVtYmVyLmNvbXBvbmVudCc7XG5cbi8qKlxuICogQ3JlYXRlcyBmb3JtIGlucHV0IGZvciByYW5nZXMgb2YgbnVtZXJpYyB2YWx1ZXMuXG4gKlxuICogSW1wbGVtZW50cyBgQ29udHJvbFZhbHVlQWNjZXNzb3JgIHNvIGl0IGNhbiBiZSB1c2VkIHdpdGhpbiBBbmd1bGFyIGZvcm1zLlxuICpcbiAqIEBleGFtcGxlXG4gKiA8eXV2LW51bWJlci1yYW5nZSBbc2NhbGVdPVwiMlwiPjwveXV2LW51bWJlci1yYW5nZT5cbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3l1di1udW1iZXItcmFuZ2UnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBOdW1iZXJDb21wb25lbnQsIFl2Y0Ryb3Bkb3duTW9kdWxlLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9udW1iZXItcmFuZ2UuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9udW1iZXItcmFuZ2UuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBOdW1iZXJSYW5nZUNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE51bWJlclJhbmdlQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIE51bWJlclJhbmdlQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciB7XG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgZGVjaW1hbCBwbGFjZXNcbiAgICovXG4gIEBJbnB1dCgpIHNjYWxlPzogbnVtYmVyO1xuICAvKipcbiAgICogT3ZlcmFsbCBhbW91bnQgb2YgZGlnaXRzIGFsbG93ZWQgKGluY2x1ZGluZyBkZWNpbWFsIHBsYWNlcylcbiAgICovXG4gIEBJbnB1dCgpIHByZWNpc2lvbj86IG51bWJlcjtcbiAgLyoqXG4gICAqICBTZXQgdG8gdHJ1ZSB0byBncm91cCBudW1iZXIgYnkgcGF0dGVyblxuICAgKi9cbiAgQElucHV0KCkgZ3JvdXBpbmcgPSBmYWxzZTtcbiAgLyoqXG4gICAqIFRoZSBwYXR0ZXJuIHRvIGdyb3VwIG51bWJlciB2YWx1ZSBieVxuICAgKi9cbiAgQElucHV0KCkgcGF0dGVybj86IHN0cmluZztcbiAgLyoqXG4gICAqIFdpbGwgcHJldmVudCB0aGUgaW5wdXQgZnJvbSBiZWluZyBjaGFuZ2VkIChkZWZhdWx0OiBmYWxzZSlcbiAgICovXG4gIEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIGNsYXNzaWZpY2F0aW9uIHByb3BlcnR5IGFkZHMgc29tZSBzZW1hbnRpY3MgdG8gdGhlIHZhbHVlIG9mIHRoaXMgY29tcG9uZW50LlxuICAgKiBJZiB5b3UgcHJvdmlkZSBhIHZhbHVlIG9mIGBmaWxlc2l6ZWAgbnVtYmVycyB0eXBlZCBpbnRvIHRoZSBjb250cm9sIHdpbGwgYmVcbiAgICogaGFuZGxlZCBsaWtlIGZpbGUgc2l6ZXMgKGNhbGN1bGF0ZXMgZGlmZmVybnQgdW5pdHMpXG4gICAqL1xuICBASW5wdXQoKSBjbGFzc2lmaWNhdGlvbnM6IHN0cmluZ1tdID0gW107XG4gIC8qKlxuICAgKiBzZXQgbWluaW11bSBpbnB1dCB2YWx1ZVxuICAgKi9cbiAgQElucHV0KCkgbWluVmFsdWU/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBzZXQgbWF4aW11bSBpbnB1dCB2YWx1ZVxuICAgKlxuICAgKi9cbiAgQElucHV0KCkgbWF4VmFsdWU/OiBudW1iZXI7XG5cbiAgcHVibGljIHJhbmdlRm9ybSA9IG5ldyBVbnR5cGVkRm9ybUdyb3VwKHtcbiAgICBudW1iZXJWYWx1ZTogbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpLFxuICAgIG51bWJlclZhbHVlRnJvbTogbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpXG4gIH0pO1xuXG4gIHZhbHVlPzogUmFuZ2VWYWx1ZTtcbiAgcHJpdmF0ZSBpc1ZhbGlkID0gdHJ1ZTtcblxuICAvLyBvcHRpb25zIGZvciBzZWFyY2ggc2l0dWF0aW9uXG4gIHB1YmxpYyBhdmFpbGFibGVTZWFyY2hPcHRpb25zID0gW1xuICAgIHsgbGFiZWw6IE9wZXJhdG9yTGFiZWwuRVFVQUwsIHZhbHVlOiBPcGVyYXRvci5FUVVBTCB9LFxuICAgIHsgbGFiZWw6IE9wZXJhdG9yTGFiZWwuR1JFQVRFUl9PUl9FUVVBTCwgdmFsdWU6IE9wZXJhdG9yLkdSRUFURVJfT1JfRVFVQUwgfSxcbiAgICB7IGxhYmVsOiBPcGVyYXRvckxhYmVsLkxFU1NfT1JfRVFVQUwsIHZhbHVlOiBPcGVyYXRvci5MRVNTX09SX0VRVUFMIH0sXG4gICAgeyBsYWJlbDogT3BlcmF0b3JMYWJlbC5JTlRFUlZBTF9JTkNMVURFX0JPVEgsIHZhbHVlOiBPcGVyYXRvci5JTlRFUlZBTF9JTkNMVURFX0JPVEggfVxuICBdO1xuICAvLyB0aGUgc2VsZWN0ZWQgc2VhcmNoIG9wdGlvblxuICBwdWJsaWMgc2VhcmNoT3B0aW9uID0gdGhpcy5hdmFpbGFibGVTZWFyY2hPcHRpb25zWzFdLnZhbHVlO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMucmFuZ2VGb3JtLnZhbHVlQ2hhbmdlcy5mb3JFYWNoKCgpID0+IHtcbiAgICAgIHRoaXMub25WYWx1ZUNoYW5nZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycywgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIHByb3BhZ2F0ZUNoYW5nZSA9IChfOiBhbnkpID0+IHt9O1xuXG4gIHdyaXRlVmFsdWUodmFsdWU6IFJhbmdlVmFsdWUpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUgJiYgKHZhbHVlLmZpcnN0VmFsdWUgIT0gbnVsbCB8fCB2YWx1ZS5zZWNvbmRWYWx1ZSAhPSBudWxsKSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSB0aGlzLmF2YWlsYWJsZVNlYXJjaE9wdGlvbnMuZmluZCgobykgPT4gby52YWx1ZSA9PT0gdmFsdWUub3BlcmF0b3IpO1xuICAgICAgdGhpcy5zZWFyY2hPcHRpb24gPSBtYXRjaCA/IG1hdGNoLnZhbHVlIDogdGhpcy5hdmFpbGFibGVTZWFyY2hPcHRpb25zWzBdLnZhbHVlO1xuXG4gICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICBpZiAodmFsdWUuc2Vjb25kVmFsdWUgPT0gbnVsbCkge1xuICAgICAgICB0aGlzLnJhbmdlRm9ybS5zZXRWYWx1ZSh7XG4gICAgICAgICAgbnVtYmVyVmFsdWVGcm9tOiBudWxsLFxuICAgICAgICAgIG51bWJlclZhbHVlOiB2YWx1ZS5maXJzdFZhbHVlICE9IG51bGwgPyB2YWx1ZS5maXJzdFZhbHVlIDogbnVsbFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmFuZ2VGb3JtLnNldFZhbHVlKHtcbiAgICAgICAgICBudW1iZXJWYWx1ZUZyb206IHZhbHVlLmZpcnN0VmFsdWUgIT0gbnVsbCA/IHZhbHVlLmZpcnN0VmFsdWUgOiBudWxsLFxuICAgICAgICAgIG51bWJlclZhbHVlOiB2YWx1ZS5zZWNvbmRWYWx1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWFyY2hPcHRpb24gPSB0aGlzLmF2YWlsYWJsZVNlYXJjaE9wdGlvbnNbMF0udmFsdWU7XG4gICAgICB0aGlzLnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5yYW5nZUZvcm0ucmVzZXQoKTtcbiAgICB9XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuO1xuICB9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMsIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7fVxuXG4gIG9uVmFsdWVDaGFuZ2UoKSB7XG4gICAgdGhpcy5pc1ZhbGlkID0gdGhpcy5yYW5nZUZvcm0udmFsaWQ7XG4gICAgaWYgKHRoaXMuc2VhcmNoT3B0aW9uID09PSBPcGVyYXRvci5JTlRFUlZBTF9JTkNMVURFX0JPVEgpIHtcbiAgICAgIHRoaXMuaXNWYWxpZCA9IHRoaXMucmFuZ2VGb3JtLnZhbGlkICYmIHRoaXMucmFuZ2VGb3JtLnZhbHVlLm51bWJlclZhbHVlRnJvbSAhPSBudWxsICYmIHRoaXMucmFuZ2VGb3JtLnZhbHVlLm51bWJlclZhbHVlICE9IG51bGw7XG4gICAgICB0aGlzLnZhbHVlID0gIXRoaXMuaXNWYWxpZFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIG9wZXJhdG9yOiB0aGlzLnNlYXJjaE9wdGlvbixcbiAgICAgICAgICAgIGZpcnN0VmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHNlY29uZFZhbHVlOiB1bmRlZmluZWRcbiAgICAgICAgICB9XG4gICAgICAgIDoge1xuICAgICAgICAgICAgb3BlcmF0b3I6IHRoaXMuc2VhcmNoT3B0aW9uLFxuICAgICAgICAgICAgZmlyc3RWYWx1ZTogdGhpcy5yYW5nZUZvcm0udmFsdWUubnVtYmVyVmFsdWVGcm9tLFxuICAgICAgICAgICAgc2Vjb25kVmFsdWU6IHRoaXMucmFuZ2VGb3JtLnZhbHVlLm51bWJlclZhbHVlXG4gICAgICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWx1ZSA9ICF0aGlzLmlzVmFsaWRcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBvcGVyYXRvcjogdGhpcy5zZWFyY2hPcHRpb24sXG4gICAgICAgICAgICBmaXJzdFZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBzZWNvbmRWYWx1ZTogdW5kZWZpbmVkXG4gICAgICAgICAgfVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIG9wZXJhdG9yOiB0aGlzLnNlYXJjaE9wdGlvbixcbiAgICAgICAgICAgIGZpcnN0VmFsdWU6IHRoaXMucmFuZ2VGb3JtLnZhbHVlLm51bWJlclZhbHVlLFxuICAgICAgICAgICAgc2Vjb25kVmFsdWU6IHVuZGVmaW5lZFxuICAgICAgICAgIH07XG4gICAgfVxuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMudmFsdWUpO1xuICB9XG5cbiAgLy8gcmV0dXJucyBudWxsIHdoZW4gdmFsaWQgZWxzZSB0aGUgdmFsaWRhdGlvbiBvYmplY3RcbiAgcHVibGljIHZhbGlkYXRlKCkge1xuICAgIGxldCBlcnI6IGFueTtcbiAgICBpZiAodGhpcy5zZWFyY2hPcHRpb24gPT09IE9wZXJhdG9yLkVRVUFMKSB7XG4gICAgICBlcnIgPSB7IG51bWJlcjogeyB2YWxpZDogZmFsc2UgfSB9O1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZWFyY2hPcHRpb24gPT09IE9wZXJhdG9yLklOVEVSVkFMX0lOQ0xVREVfQk9USCAmJiB0aGlzLnZhbHVlPy5maXJzdFZhbHVlICYmIHRoaXMudmFsdWU/LnNlY29uZFZhbHVlKSB7XG4gICAgICAvLyBtYWtlIHN1cmUgdGhhdCBvbiByYW5nZXMsIHRoZSBmaXJzdCB2YWx1ZSBpcyBlYXJsaWVyIHRoYW4gdGhlIGxhc3RcbiAgICAgIHRoaXMuaXNWYWxpZCA9IHRoaXMudmFsdWUhLmZpcnN0VmFsdWUgPCB0aGlzLnZhbHVlIS5zZWNvbmRWYWx1ZTtcbiAgICAgIGVyciA9IHsgbnVtYmVycmFuZ2VvcmRlcjogeyB2YWxpZDogZmFsc2UgfSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBlcnIgPSB7IG51bWJlcnJhbmdlOiB7IHZhbGlkOiBmYWxzZSB9IH07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBudWxsIDogZXJyO1xuICB9XG59XG4iLCI8Zm9ybSBjbGFzcz1cInl1di1udW1iZXItcmFuZ2VcIiBbZm9ybUdyb3VwXT1cInJhbmdlRm9ybVwiPlxuICBAaWYoc2VhcmNoT3B0aW9uID09PSAnZ3RlbHRlJyl7XG4gIDx5dXYtbnVtYmVyXG4gICAgY2xhc3M9XCJmaXJzdFwiXG4gICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICBbc2NhbGVdPVwic2NhbGVcIlxuICAgIFtwcmVjaXNpb25dPVwicHJlY2lzaW9uXCJcbiAgICBbZ3JvdXBpbmddPVwiZ3JvdXBpbmdcIlxuICAgIFtncm91cFBhdHRlcm5dPVwicGF0dGVyblwiXG4gICAgZm9ybUNvbnRyb2xOYW1lPVwibnVtYmVyVmFsdWVGcm9tXCJcbiAgICBbY2xhc3NpZmljYXRpb25zXT1cImNsYXNzaWZpY2F0aW9uc1wiXG4gICAgW21pblZhbHVlXT1cIm1pblZhbHVlXCJcbiAgICBbbWF4VmFsdWVdPVwibWF4VmFsdWVcIlxuICA+PC95dXYtbnVtYmVyPn1cblxuICA8eXZjLWRyb3Bkb3duXG4gICAgY2xhc3M9XCJuby10cmlnZ2VyXCJcbiAgICBbKG5nTW9kZWwpXT1cInNlYXJjaE9wdGlvblwiXG4gICAgKG5nTW9kZWxDaGFuZ2UpPVwib25WYWx1ZUNoYW5nZSgpXCJcbiAgICBbZGlzYWJsZWRdPVwicmVhZG9ubHlcIlxuICAgIFtkaXNhYmxlQ2xlYXJCdXR0b25dPVwidHJ1ZVwiXG4gICAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcbiAgICBbb3B0aW9uc109XCJhdmFpbGFibGVTZWFyY2hPcHRpb25zXCJcbiAgPjwveXZjLWRyb3Bkb3duPlxuXG4gIDx5dXYtbnVtYmVyXG4gICAgW3NjYWxlXT1cInNjYWxlXCJcbiAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgIFtwcmVjaXNpb25dPVwicHJlY2lzaW9uXCJcbiAgICBbZ3JvdXBpbmddPVwiZ3JvdXBpbmdcIlxuICAgIFtncm91cFBhdHRlcm5dPVwicGF0dGVyblwiXG4gICAgZm9ybUNvbnRyb2xOYW1lPVwibnVtYmVyVmFsdWVcIlxuICAgIFtjbGFzc2lmaWNhdGlvbnNdPVwiY2xhc3NpZmljYXRpb25zXCJcbiAgICBbbWluVmFsdWVdPVwibWluVmFsdWVcIlxuICAgIFttYXhWYWx1ZV09XCJtYXhWYWx1ZVwiXG4gID5cbiAgPC95dXYtbnVtYmVyPlxuPC9mb3JtPlxuIl19
|