@yuuvis/client-framework 2.0.0-beta.0 → 2.0.0-beta.2
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 +11 -11
- 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 +43 -69
- 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,324 +0,0 @@
|
|
|
1
|
-
import { Component, ElementRef, HostListener, NgZone, contentChild, inject, input, output, viewChild } from '@angular/core';
|
|
2
|
-
import { CommonModule } from '@angular/common';
|
|
3
|
-
import { YvcOverlayService } from '@yuuvis/components/overlay';
|
|
4
|
-
import { YvcAutocompleteModule } from '@yuuvis/components/autocomplete';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@angular/common";
|
|
7
|
-
import * as i2 from "@yuuvis/components/autocomplete";
|
|
8
|
-
// TODO: Move to @yuuvis/components
|
|
9
|
-
export class TokenInputComponent {
|
|
10
|
-
constructor() {
|
|
11
|
-
this.elRef = inject(ElementRef);
|
|
12
|
-
this.overlay = inject(YvcOverlayService);
|
|
13
|
-
this.ngZone = inject(NgZone);
|
|
14
|
-
this.optionsTemplate = viewChild.required('options');
|
|
15
|
-
/**
|
|
16
|
-
* Template to be used for rendering selected tokens
|
|
17
|
-
*/
|
|
18
|
-
this.tokenTemplate = contentChild('tokenTemplate');
|
|
19
|
-
/**
|
|
20
|
-
* Template to be used for rendering autocomplete suggestion entries
|
|
21
|
-
*/
|
|
22
|
-
this.optionTemplate = contentChild('optionTemplate');
|
|
23
|
-
this.TEXT_TOKEN_TYPE = 'txt';
|
|
24
|
-
this.tokens = input([]);
|
|
25
|
-
this.caseSensitive = input(false);
|
|
26
|
-
this.change = output();
|
|
27
|
-
this._cleanFormTokens = [this._newTextToken()];
|
|
28
|
-
this.formTokens = structuredClone(this._cleanFormTokens);
|
|
29
|
-
this.autocompleteValues = [];
|
|
30
|
-
this.autocompleteSelectedIndex = -1;
|
|
31
|
-
this.focusedTokenIndex = -1;
|
|
32
|
-
}
|
|
33
|
-
onArrowUpKey(event) {
|
|
34
|
-
event.preventDefault();
|
|
35
|
-
event.stopPropagation();
|
|
36
|
-
if (this.autocompleteSelectedIndex > 0)
|
|
37
|
-
this.autocompleteSelectedIndex--;
|
|
38
|
-
}
|
|
39
|
-
onArrowDownKey(event) {
|
|
40
|
-
event.preventDefault();
|
|
41
|
-
event.stopPropagation();
|
|
42
|
-
if (this.autocompleteValues && this.autocompleteSelectedIndex < this.autocompleteValues.length - 1)
|
|
43
|
-
this.autocompleteSelectedIndex++;
|
|
44
|
-
}
|
|
45
|
-
onEnterKey(event) {
|
|
46
|
-
if (this.autocompleteValues.length && this.autocompleteSelectedIndex >= 0) {
|
|
47
|
-
event.preventDefault();
|
|
48
|
-
event.stopPropagation();
|
|
49
|
-
this.onOptionSelect(this.autocompleteValues[this.autocompleteSelectedIndex]);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
clear() {
|
|
53
|
-
this.formTokens = structuredClone(this._cleanFormTokens);
|
|
54
|
-
this._inputElement.innerText = '';
|
|
55
|
-
this._emitChange(true);
|
|
56
|
-
}
|
|
57
|
-
onInputFocus(e) {
|
|
58
|
-
this._inputElement = e.target;
|
|
59
|
-
this.focusedTokenIndex = this._inputElement ? this.formTokens.findIndex((t) => t.id === this._inputElement.getAttribute('data-id')) : -1;
|
|
60
|
-
// console.log('FIndex: ' + this.focusedTokenIndex);
|
|
61
|
-
}
|
|
62
|
-
onInput(e) {
|
|
63
|
-
this._processValue();
|
|
64
|
-
this._emitChange();
|
|
65
|
-
}
|
|
66
|
-
onArrowLeft(e) {
|
|
67
|
-
const cp = this._getCaretPos(e.target);
|
|
68
|
-
if (cp === 0) {
|
|
69
|
-
e.stopPropagation();
|
|
70
|
-
e.preventDefault();
|
|
71
|
-
this._focusInput(-1);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
onArrowRight(e) {
|
|
75
|
-
const cp = this._getCaretPos(e.target);
|
|
76
|
-
if (cp === e.target.innerText.length) {
|
|
77
|
-
e.stopPropagation();
|
|
78
|
-
e.preventDefault();
|
|
79
|
-
this._focusInput(1);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
onDelete(e, index) {
|
|
83
|
-
const cp = this._getCaretPos(e.target);
|
|
84
|
-
if (cp === e.target.innerText.length) {
|
|
85
|
-
e.stopPropagation();
|
|
86
|
-
e.preventDefault();
|
|
87
|
-
// remove next token
|
|
88
|
-
if (index < this.formTokens.length - 2) {
|
|
89
|
-
this.formTokens.splice(index + 1, 1);
|
|
90
|
-
// if prev token is also a text token => merge
|
|
91
|
-
const nextIdx = index + 1;
|
|
92
|
-
if (nextIdx < this.formTokens.length && this.formTokens[nextIdx].type === this.TEXT_TOKEN_TYPE) {
|
|
93
|
-
const content = this.formTokens[index].label;
|
|
94
|
-
const nextContent = this.formTokens[nextIdx].label;
|
|
95
|
-
const mergedToken = {
|
|
96
|
-
id: this.formTokens[index + 1].id,
|
|
97
|
-
label: `${content} ${nextContent}`,
|
|
98
|
-
type: this.TEXT_TOKEN_TYPE
|
|
99
|
-
};
|
|
100
|
-
this.formTokens.splice(index + 1, 2, mergedToken);
|
|
101
|
-
const el = this.elRef.nativeElement.querySelector(`[data-id="${this.formTokens[index + 1].id}"]`);
|
|
102
|
-
if (el) {
|
|
103
|
-
el.innerText = mergedToken.label;
|
|
104
|
-
this._setCaretPos(el, content.length);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
this._emitChange();
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
onBackspace(e, index) {
|
|
112
|
-
const cp = this._getCaretPos(e.target);
|
|
113
|
-
if (cp === 0) {
|
|
114
|
-
e.stopPropagation();
|
|
115
|
-
e.preventDefault();
|
|
116
|
-
// remove prev token
|
|
117
|
-
if (index > 0) {
|
|
118
|
-
this.formTokens.splice(index - 1, 1);
|
|
119
|
-
// if prev token is also a text token => merge
|
|
120
|
-
const prevIdx = index - 2;
|
|
121
|
-
if (prevIdx >= 0 && this.formTokens[prevIdx].type === this.TEXT_TOKEN_TYPE) {
|
|
122
|
-
const content = this.formTokens[index - 1].label;
|
|
123
|
-
const prevContent = this.formTokens[prevIdx].label;
|
|
124
|
-
const mergedToken = {
|
|
125
|
-
id: this.formTokens[prevIdx].id,
|
|
126
|
-
label: `${prevContent} ${content}`,
|
|
127
|
-
type: this.TEXT_TOKEN_TYPE
|
|
128
|
-
};
|
|
129
|
-
this.formTokens.splice(prevIdx, 2, mergedToken);
|
|
130
|
-
const el = this.elRef.nativeElement.querySelector(`[data-id="${this.formTokens[prevIdx].id}"]`);
|
|
131
|
-
if (el) {
|
|
132
|
-
el.innerText = mergedToken.label;
|
|
133
|
-
this._setCaretPos(el, prevContent.length);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
else {
|
|
137
|
-
this._focusFirst();
|
|
138
|
-
}
|
|
139
|
-
this._emitChange();
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
_focusFirst() {
|
|
144
|
-
const el = this.elRef.nativeElement.querySelector(`[contenteditable]`);
|
|
145
|
-
if (el)
|
|
146
|
-
setTimeout(() => {
|
|
147
|
-
el?.focus();
|
|
148
|
-
});
|
|
149
|
-
}
|
|
150
|
-
_focusInput(offset) {
|
|
151
|
-
const inputs = Array.from(this.elRef.nativeElement.querySelectorAll('[contenteditable]'));
|
|
152
|
-
let i = inputs.findIndex((i) => i === document.activeElement);
|
|
153
|
-
i = i + offset;
|
|
154
|
-
if (i > inputs.length - 1)
|
|
155
|
-
i = 0;
|
|
156
|
-
if (i < 0)
|
|
157
|
-
i = inputs.length - 1;
|
|
158
|
-
this.ngZone.run(() => inputs[i].focus());
|
|
159
|
-
this._setCaretPos(inputs[i], offset > 0 || inputs[i].innerText.length === 0 ? 0 : inputs[i].innerText.length);
|
|
160
|
-
}
|
|
161
|
-
_setCaretPos(element, pos) {
|
|
162
|
-
const targetNode = element.childNodes.length ? element.childNodes[0] : element;
|
|
163
|
-
const range = document.createRange();
|
|
164
|
-
range.selectNode(element);
|
|
165
|
-
range.setStart(targetNode, pos);
|
|
166
|
-
range.setEnd(targetNode, pos);
|
|
167
|
-
const selection = window.getSelection();
|
|
168
|
-
selection.removeAllRanges();
|
|
169
|
-
selection.addRange(range);
|
|
170
|
-
}
|
|
171
|
-
_getCaretPos(node) {
|
|
172
|
-
const selection = window.getSelection();
|
|
173
|
-
const range = selection.getRangeAt(0);
|
|
174
|
-
const clonedRange = range.cloneRange();
|
|
175
|
-
clonedRange.selectNodeContents(node);
|
|
176
|
-
clonedRange.setEnd(range.endContainer, range.endOffset);
|
|
177
|
-
return clonedRange.toString().length;
|
|
178
|
-
}
|
|
179
|
-
onOptionSelect(o) {
|
|
180
|
-
let tokensAdded = 0;
|
|
181
|
-
let tokensRemoved = 0;
|
|
182
|
-
const inputValue = this._getInputValue();
|
|
183
|
-
const wordTokens = this._tokenize(inputValue);
|
|
184
|
-
const lastWord = wordTokens[wordTokens.length - 1];
|
|
185
|
-
if (lastWord.length === inputValue.length) {
|
|
186
|
-
this.formTokens.pop();
|
|
187
|
-
tokensRemoved++;
|
|
188
|
-
}
|
|
189
|
-
this.formTokens.splice(this.focusedTokenIndex + 1, 0, structuredClone(o));
|
|
190
|
-
tokensAdded++;
|
|
191
|
-
const shadowTokens = [];
|
|
192
|
-
// check for inbetween tokens
|
|
193
|
-
let txtTokenCount = -1;
|
|
194
|
-
this.formTokens.forEach((t, i) => {
|
|
195
|
-
if (t.type === this.TEXT_TOKEN_TYPE) {
|
|
196
|
-
txtTokenCount++;
|
|
197
|
-
t.id = this._textTokenId(txtTokenCount);
|
|
198
|
-
}
|
|
199
|
-
shadowTokens.push(t);
|
|
200
|
-
const nextToken = this.formTokens[i + 1];
|
|
201
|
-
if (t.type !== this.TEXT_TOKEN_TYPE && nextToken && nextToken.type !== this.TEXT_TOKEN_TYPE) {
|
|
202
|
-
// add inbetween token
|
|
203
|
-
txtTokenCount++;
|
|
204
|
-
shadowTokens.push(this._newTextToken(txtTokenCount));
|
|
205
|
-
tokensAdded++;
|
|
206
|
-
}
|
|
207
|
-
});
|
|
208
|
-
if (this.formTokens[this.formTokens.length - 1].type !== this.TEXT_TOKEN_TYPE) {
|
|
209
|
-
// add empty text token at the end
|
|
210
|
-
txtTokenCount++;
|
|
211
|
-
shadowTokens.push(this._newTextToken(txtTokenCount));
|
|
212
|
-
tokensAdded++;
|
|
213
|
-
}
|
|
214
|
-
this.formTokens = shadowTokens;
|
|
215
|
-
this._inputElement.innerText = inputValue.substring(0, inputValue.length - lastWord.length).trim();
|
|
216
|
-
this._emitChange();
|
|
217
|
-
setTimeout(() => {
|
|
218
|
-
// console.log(`fi: ${this.focusedTokenIndex}, ta: ${tokensAdded}, tr: ${tokensRemoved}, ne: ${this.focusedTokenIndex + (tokensAdded - tokensRemoved)}`);
|
|
219
|
-
this._focusTokenInput(this.focusedTokenIndex + (tokensAdded - tokensRemoved));
|
|
220
|
-
});
|
|
221
|
-
this.closeOptions();
|
|
222
|
-
}
|
|
223
|
-
_focusTokenInput(index) {
|
|
224
|
-
const selector = index === undefined ? 'div:last-child' : `div:nth-child(${index + 1})`;
|
|
225
|
-
console.log(selector);
|
|
226
|
-
const lastInput = this.elRef.nativeElement.querySelector(selector);
|
|
227
|
-
lastInput.focus();
|
|
228
|
-
return lastInput;
|
|
229
|
-
}
|
|
230
|
-
// private _focusInput(): HTMLElement {
|
|
231
|
-
// const lastInput: HTMLElement = (
|
|
232
|
-
// this.elRef.nativeElement as HTMLElement
|
|
233
|
-
// ).querySelector('[contenteditable]:last-child') as HTMLElement;
|
|
234
|
-
// lastInput.focus();
|
|
235
|
-
// return lastInput;
|
|
236
|
-
// }
|
|
237
|
-
openOptions() {
|
|
238
|
-
if (this._overlayRef || !this.autocompleteValues.length)
|
|
239
|
-
return;
|
|
240
|
-
this._overlayRef = this.overlay.open(this.optionsTemplate(), null, {
|
|
241
|
-
lightDismiss: true,
|
|
242
|
-
maxHeight: '97vh'
|
|
243
|
-
}, this.elRef);
|
|
244
|
-
}
|
|
245
|
-
closeOptions() {
|
|
246
|
-
if (this._overlayRef) {
|
|
247
|
-
this._overlayRef.close();
|
|
248
|
-
this._overlayRef = undefined;
|
|
249
|
-
}
|
|
250
|
-
this.autocompleteSelectedIndex = -1;
|
|
251
|
-
this.autocompleteValues = [];
|
|
252
|
-
}
|
|
253
|
-
onTokenEnter(e) {
|
|
254
|
-
e.preventDefault();
|
|
255
|
-
}
|
|
256
|
-
_emitChange(focusFirst = false) {
|
|
257
|
-
// need to set timeout so DOM changes are applied before accessing elements
|
|
258
|
-
setTimeout(() => {
|
|
259
|
-
this.formTokens.forEach((t) => {
|
|
260
|
-
if (t.type === this.TEXT_TOKEN_TYPE) {
|
|
261
|
-
const el = this.elRef.nativeElement.querySelector(`[data-id="${t.id}"]`);
|
|
262
|
-
if (el)
|
|
263
|
-
t.label = el.innerText;
|
|
264
|
-
}
|
|
265
|
-
});
|
|
266
|
-
this.change.emit(this.formTokens
|
|
267
|
-
.filter((t) => t.type !== this.TEXT_TOKEN_TYPE || t.label.length > 0)
|
|
268
|
-
.map((t) => ({
|
|
269
|
-
id: t.id,
|
|
270
|
-
label: t.label,
|
|
271
|
-
type: t.type
|
|
272
|
-
})));
|
|
273
|
-
if (focusFirst)
|
|
274
|
-
this._focusFirst();
|
|
275
|
-
});
|
|
276
|
-
}
|
|
277
|
-
_newTextToken(idx) {
|
|
278
|
-
const index = idx !== undefined ? idx : this.formTokens?.length ? this.formTokens.filter((t) => t.type === this.TEXT_TOKEN_TYPE).length : 0;
|
|
279
|
-
return {
|
|
280
|
-
id: this._textTokenId(index),
|
|
281
|
-
label: '',
|
|
282
|
-
type: this.TEXT_TOKEN_TYPE
|
|
283
|
-
};
|
|
284
|
-
}
|
|
285
|
-
_textTokenId(i) {
|
|
286
|
-
return `txt_${i}`;
|
|
287
|
-
}
|
|
288
|
-
_tokenize(value) {
|
|
289
|
-
const wordTokens = value.split(/\W+/).filter((t) => t?.length);
|
|
290
|
-
return wordTokens;
|
|
291
|
-
}
|
|
292
|
-
_getInputValue() {
|
|
293
|
-
return this._inputElement.innerText.replaceAll(' ', '');
|
|
294
|
-
}
|
|
295
|
-
_processValue() {
|
|
296
|
-
const wordTokens = this._tokenize(this._getInputValue());
|
|
297
|
-
const lastWord = wordTokens[wordTokens.length - 1];
|
|
298
|
-
this.autocompleteValues =
|
|
299
|
-
!lastWord || lastWord.length < 2
|
|
300
|
-
? []
|
|
301
|
-
: this.tokens().filter((t) => lastWord && new RegExp(lastWord, this.caseSensitive() ? '' : 'i').test(t.label));
|
|
302
|
-
this.autocompleteSelectedIndex = this.autocompleteValues.length ? 0 : -1;
|
|
303
|
-
if (this.autocompleteValues.length)
|
|
304
|
-
this.openOptions();
|
|
305
|
-
else
|
|
306
|
-
this.closeOptions();
|
|
307
|
-
}
|
|
308
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TokenInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
309
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: TokenInputComponent, isStandalone: true, selector: "yuv-token-input", inputs: { tokens: { classPropertyName: "tokens", publicName: "tokens", isSignal: true, isRequired: false, transformFunction: null }, caseSensitive: { classPropertyName: "caseSensitive", publicName: "caseSensitive", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { change: "change" }, host: { listeners: { "keydown.arrowUp": "onArrowUpKey($event)", "keydown.arrowDown": "onArrowDownKey($event)", "keydown.enter": "onEnterKey($event)" } }, queries: [{ propertyName: "tokenTemplate", first: true, predicate: ["tokenTemplate"], descendants: true, isSignal: true }, { propertyName: "optionTemplate", first: true, predicate: ["optionTemplate"], descendants: true, isSignal: true }], viewQueries: [{ propertyName: "optionsTemplate", first: true, predicate: ["options"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- fi {{focusedTokenIndex}} -->\n\n@for (ft of formTokens; let i = $index; track $index) {\n @if (ft.type === TEXT_TOKEN_TYPE) {\n <div\n contenteditable\n [attr.data-id]=\"ft.id\"\n (input)=\"onInput($event)\"\n (focus)=\"onInputFocus($event)\"\n (keydown.enter)=\"onTokenEnter($event)\"\n (keydown.arrowLeft)=\"onArrowLeft($event)\"\n (keydown.arrowRight)=\"onArrowRight($event)\"\n (keydown.delete)=\"onDelete($event, i)\"\n (keydown.backspace)=\"onBackspace($event, i)\"\n ></div>\n } @else {\n @if (tokenTemplate()) {\n <ng-container *ngTemplateOutlet=\"tokenTemplate()!; context: { $implicit: ft }\"></ng-container>\n } @else {\n <div class=\"chip\">{{ ft.label }}</div>\n }\n }\n}\n\n<ng-template #options>\n <yvc-autocomplete-options\n class=\"popover animateIn\"\n [values]=\"autocompleteValues\"\n [(focusedIndex)]=\"autocompleteSelectedIndex\"\n [autocompleteOptionTemplate]=\"optionTemplate() || null\"\n (optionSelect)=\"onOptionSelect($event)\"\n [field]=\"'label'\"\n ></yvc-autocomplete-options>\n</ng-template>\n", styles: [":host{--token-input-chip-border-color: var(--item-focus-border-color);--token-input-chip-background-color: var(--item-focus-background-color);--token-padding-y: .15em;display:flex;align-items:center;flex-flow:row wrap;padding:2px}:host [contenteditable],:host .chip{border:1px solid transparent;border-radius:2px}:host [contenteditable]{display:inline-block;padding:var(--token-padding-y) 2px;min-width:1px}:host [contenteditable]:focus-visible{outline:0}:host [contenteditable]:last-child{flex:1}:host .chip{padding:var(--token-padding-y) .25em;border-color:var(--token-input-chip-border-color);background-color:var(--token-input-chip-background-color)}:host .chip>span{font-size:var(--font-hint);color:var(--text-color-hint)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: YvcAutocompleteModule }, { kind: "component", type: i2.AutocompleteOptionsComponent, selector: "yvc-autocomplete-options", inputs: ["autocompleteOptionTemplate", "values", "field", "focusedIndex"], outputs: ["focusedIndexChange", "optionSelect"] }] }); }
|
|
310
|
-
}
|
|
311
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TokenInputComponent, decorators: [{
|
|
312
|
-
type: Component,
|
|
313
|
-
args: [{ selector: 'yuv-token-input', standalone: true, imports: [CommonModule, YvcAutocompleteModule], template: "<!-- fi {{focusedTokenIndex}} -->\n\n@for (ft of formTokens; let i = $index; track $index) {\n @if (ft.type === TEXT_TOKEN_TYPE) {\n <div\n contenteditable\n [attr.data-id]=\"ft.id\"\n (input)=\"onInput($event)\"\n (focus)=\"onInputFocus($event)\"\n (keydown.enter)=\"onTokenEnter($event)\"\n (keydown.arrowLeft)=\"onArrowLeft($event)\"\n (keydown.arrowRight)=\"onArrowRight($event)\"\n (keydown.delete)=\"onDelete($event, i)\"\n (keydown.backspace)=\"onBackspace($event, i)\"\n ></div>\n } @else {\n @if (tokenTemplate()) {\n <ng-container *ngTemplateOutlet=\"tokenTemplate()!; context: { $implicit: ft }\"></ng-container>\n } @else {\n <div class=\"chip\">{{ ft.label }}</div>\n }\n }\n}\n\n<ng-template #options>\n <yvc-autocomplete-options\n class=\"popover animateIn\"\n [values]=\"autocompleteValues\"\n [(focusedIndex)]=\"autocompleteSelectedIndex\"\n [autocompleteOptionTemplate]=\"optionTemplate() || null\"\n (optionSelect)=\"onOptionSelect($event)\"\n [field]=\"'label'\"\n ></yvc-autocomplete-options>\n</ng-template>\n", styles: [":host{--token-input-chip-border-color: var(--item-focus-border-color);--token-input-chip-background-color: var(--item-focus-background-color);--token-padding-y: .15em;display:flex;align-items:center;flex-flow:row wrap;padding:2px}:host [contenteditable],:host .chip{border:1px solid transparent;border-radius:2px}:host [contenteditable]{display:inline-block;padding:var(--token-padding-y) 2px;min-width:1px}:host [contenteditable]:focus-visible{outline:0}:host [contenteditable]:last-child{flex:1}:host .chip{padding:var(--token-padding-y) .25em;border-color:var(--token-input-chip-border-color);background-color:var(--token-input-chip-background-color)}:host .chip>span{font-size:var(--font-hint);color:var(--text-color-hint)}\n"] }]
|
|
314
|
-
}], propDecorators: { onArrowUpKey: [{
|
|
315
|
-
type: HostListener,
|
|
316
|
-
args: ['keydown.arrowUp', ['$event']]
|
|
317
|
-
}], onArrowDownKey: [{
|
|
318
|
-
type: HostListener,
|
|
319
|
-
args: ['keydown.arrowDown', ['$event']]
|
|
320
|
-
}], onEnterKey: [{
|
|
321
|
-
type: HostListener,
|
|
322
|
-
args: ['keydown.enter', ['$event']]
|
|
323
|
-
}] } });
|
|
324
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4taW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy95dXV2aXMvY2xpZW50LWZyYW1ld29yay9jb21tb24vc3JjL2xpYi9jb21wb25lbnRzL3Rva2VuLWlucHV0L3Rva2VuLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMveXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvY29tbW9uL3NyYy9saWIvY29tcG9uZW50cy90b2tlbi1pbnB1dC90b2tlbi1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFlLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekksT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBaUIsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7OztBQUV4RSxtQ0FBbUM7QUFRbkMsTUFBTSxPQUFPLG1CQUFtQjtJQVBoQztRQVFVLFVBQUssR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDM0IsWUFBTyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3BDLFdBQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFaEMsb0JBQWUsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFtQixTQUFTLENBQUMsQ0FBQztRQUNsRTs7V0FFRztRQUNILGtCQUFhLEdBQUcsWUFBWSxDQUFtQixlQUFlLENBQUMsQ0FBQztRQUNoRTs7V0FFRztRQUNILG1CQUFjLEdBQUcs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LFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQzlCLENBQUMsQ0FBQyxFQUFFO2dCQUNKLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBYSxFQUFFLEVBQUUsQ0FBQyxRQUFRLElBQUksSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDL0gsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekUsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTTtZQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQzs7WUFDbEQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzNCLENBQUM7K0dBL1VVLG1CQUFtQjttR0FBbkIsbUJBQW1CLHM0QkNkaEMsc21DQWtDQSxreEJEeEJZLFlBQVkscU1BQUUscUJBQXFCOzs0RkFJbEMsbUJBQW1CO2tCQVAvQixTQUFTOytCQUNFLGlCQUFpQixjQUNmLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxxQkFBcUIsQ0FBQzs4QkFrQ0QsWUFBWTtzQkFBeEQsWUFBWTt1QkFBQyxpQkFBaUIsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFLSSxjQUFjO3NCQUE1RCxZQUFZO3VCQUFDLG1CQUFtQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQUtGLFVBQVU7c0JBQXBELFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIE5nWm9uZSwgVGVtcGxhdGVSZWYsIGNvbnRlbnRDaGlsZCwgaW5qZWN0LCBpbnB1dCwgb3V0cHV0LCB2aWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbm5lcklucHV0VG9rZW4sIElucHV0VG9rZW4gfSBmcm9tICcuL3Rva2VuLWlucHV0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBZdmNPdmVybGF5UmVmLCBZdmNPdmVybGF5U2VydmljZSB9IGZyb20gJ0B5dXV2aXMvY29tcG9uZW50cy9vdmVybGF5JztcbmltcG9ydCB7IFl2Y0F1dG9jb21wbGV0ZU1vZHVsZSB9IGZyb20gJ0B5dXV2aXMvY29tcG9uZW50cy9hdXRvY29tcGxldGUnO1xuXG4vLyBUT0RPOiBNb3ZlIHRvIEB5dXV2aXMvY29tcG9uZW50c1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAneXV2LXRva2VuLWlucHV0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgWXZjQXV0b2NvbXBsZXRlTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3Rva2VuLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3Rva2VuLWlucHV0LmNvbXBvbmVudC5zY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBUb2tlbklucHV0Q29tcG9uZW50IHtcbiAgcHJpdmF0ZSBlbFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgcHJpdmF0ZSBvdmVybGF5ID0gaW5qZWN0KFl2Y092ZXJsYXlTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBuZ1pvbmUgPSBpbmplY3QoTmdab25lKTtcblxuICBvcHRpb25zVGVtcGxhdGUgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8VGVtcGxhdGVSZWY8YW55Pj4oJ29wdGlvbnMnKTtcbiAgLyoqXG4gICAqIFRlbXBsYXRlIHRvIGJlIHVzZWQgZm9yIHJlbmRlcmluZyBzZWxlY3RlZCB0b2tlbnNcbiAgICovXG4gIHRva2VuVGVtcGxhdGUgPSBjb250ZW50Q2hpbGQ8VGVtcGxhdGVSZWY8YW55Pj4oJ3Rva2VuVGVtcGxhdGUnKTtcbiAgLyoqXG4gICAqIFRlbXBsYXRlIHRvIGJlIHVzZWQgZm9yIHJlbmRlcmluZyBhdXRvY29tcGxldGUgc3VnZ2VzdGlvbiBlbnRyaWVzXG4gICAqL1xuICBvcHRpb25UZW1wbGF0ZSA9IGNvbnRlbnRDaGlsZDxUZW1wbGF0ZVJlZjxhbnk+Pignb3B0aW9uVGVtcGxhdGUnKTtcblxuICBURVhUX1RPS0VOX1RZUEUgPSAndHh0JztcbiAgcHJpdmF0ZSBfaW5wdXRFbGVtZW50PzogSFRNTElucHV0RWxlbWVudDtcbiAgcHJpdmF0ZSBfb3ZlcmxheVJlZj86IFl2Y092ZXJsYXlSZWY7XG5cbiAgdG9rZW5zID0gaW5wdXQ8SW5wdXRUb2tlbltdPihbXSk7XG4gIGNhc2VTZW5zaXRpdmUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgY2hhbmdlID0gb3V0cHV0PElucHV0VG9rZW5bXT4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9jbGVhbkZvcm1Ub2tlbnM6IElucHV0VG9rZW5bXSA9IFt0aGlzLl9uZXdUZXh0VG9rZW4oKV07XG4gIGZvcm1Ub2tlbnM6IElucHV0VG9rZW5bXSA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLl9jbGVhbkZvcm1Ub2tlbnMpO1xuICBhdXRvY29tcGxldGVWYWx1ZXM6IElucHV0VG9rZW5bXSA9IFtdO1xuICBhdXRvY29tcGxldGVTZWxlY3RlZEluZGV4ID0gLTE7XG4gIGZvY3VzZWRUb2tlbkluZGV4ID0gLTE7XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd1VwJywgWyckZXZlbnQnXSkgb25BcnJvd1VwS2V5KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAodGhpcy5hdXRvY29tcGxldGVTZWxlY3RlZEluZGV4ID4gMCkgdGhpcy5hdXRvY29tcGxldGVTZWxlY3RlZEluZGV4LS07XG4gIH1cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd0Rvd24nLCBbJyRldmVudCddKSBvbkFycm93RG93bktleShldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlVmFsdWVzICYmIHRoaXMuYXV0b2NvbXBsZXRlU2VsZWN0ZWRJbmRleCA8IHRoaXMuYXV0b2NvbXBsZXRlVmFsdWVzLmxlbmd0aCAtIDEpIHRoaXMuYXV0b2NvbXBsZXRlU2VsZWN0ZWRJbmRleCsrO1xuICB9XG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZW50ZXInLCBbJyRldmVudCddKSBvbkVudGVyS2V5KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlVmFsdWVzLmxlbmd0aCAmJiB0aGlzLmF1dG9jb21wbGV0ZVNlbGVjdGVkSW5kZXggPj0gMCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy5vbk9wdGlvblNlbGVjdCh0aGlzLmF1dG9jb21wbGV0ZVZhbHVlc1t0aGlzLmF1dG9jb21wbGV0ZVNlbGVjdGVkSW5kZXhdKTtcbiAgICB9XG4gIH1cblxuICBjbGVhcigpIHtcbiAgICB0aGlzLmZvcm1Ub2tlbnMgPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5fY2xlYW5Gb3JtVG9rZW5zKTtcbiAgICB0aGlzLl9pbnB1dEVsZW1lbnQhLmlubmVyVGV4dCA9ICcnO1xuICAgIHRoaXMuX2VtaXRDaGFuZ2UodHJ1ZSk7XG4gIH1cblxuICBvbklucHV0Rm9jdXMoZTogYW55KSB7XG4gICAgdGhpcy5faW5wdXRFbGVtZW50ID0gZS50YXJnZXQ7XG4gICAgdGhpcy5mb2N1c2VkVG9rZW5JbmRleCA9IHRoaXMuX2lucHV0RWxlbWVudCA/IHRoaXMuZm9ybVRva2Vucy5maW5kSW5kZXgoKHQpID0+IHQuaWQgPT09IHRoaXMuX2lucHV0RWxlbWVudCEuZ2V0QXR0cmlidXRlKCdkYXRhLWlkJykpIDogLTE7XG4gICAgLy8gY29uc29sZS5sb2coJ0ZJbmRleDogJyArIHRoaXMuZm9jdXNlZFRva2VuSW5kZXgpO1xuICB9XG5cbiAgb25JbnB1dChlOiBhbnkpIHtcbiAgICB0aGlzLl9wcm9jZXNzVmFsdWUoKTtcbiAgICB0aGlzLl9lbWl0Q2hhbmdlKCk7XG4gIH1cblxuICBvbkFycm93TGVmdChlOiBFdmVudCkge1xuICAgIGNvbnN0IGNwID0gdGhpcy5fZ2V0Q2FyZXRQb3MoZS50YXJnZXQgYXMgTm9kZSk7XG4gICAgaWYgKGNwID09PSAwKSB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5fZm9jdXNJbnB1dCgtMSk7XG4gICAgfVxuICB9XG4gIG9uQXJyb3dSaWdodChlOiBFdmVudCkge1xuICAgIGNvbnN0IGNwID0gdGhpcy5fZ2V0Q2FyZXRQb3MoZS50YXJnZXQgYXMgTm9kZSk7XG4gICAgaWYgKGNwID09PSAoZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmlubmVyVGV4dC5sZW5ndGgpIHtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLl9mb2N1c0lucHV0KDEpO1xuICAgIH1cbiAgfVxuXG4gIG9uRGVsZXRlKGU6IEV2ZW50LCBpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgY3AgPSB0aGlzLl9nZXRDYXJldFBvcyhlLnRhcmdldCBhcyBOb2RlKTtcbiAgICBpZiAoY3AgPT09IChlLnRhcmdldCBhcyBIVE1MRWxlbWVudCkuaW5uZXJUZXh0Lmxlbmd0aCkge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgLy8gcmVtb3ZlIG5leHQgdG9rZW5cbiAgICAgIGlmIChpbmRleCA8IHRoaXMuZm9ybVRva2Vucy5sZW5ndGggLSAyKSB7XG4gICAgICAgIHRoaXMuZm9ybVRva2Vucy5zcGxpY2UoaW5kZXggKyAxLCAxKTtcblxuICAgICAgICAvLyBpZiBwcmV2IHRva2VuIGlzIGFsc28gYSB0ZXh0IHRva2VuID0+IG1lcmdlXG4gICAgICAgIGNvbnN0IG5leHRJZHggPSBpbmRleCArIDE7XG4gICAgICAgIGlmIChuZXh0SWR4IDwgdGhpcy5mb3JtVG9rZW5zLmxlbmd0aCAmJiB0aGlzLmZvcm1Ub2tlbnNbbmV4dElkeF0udHlwZSA9PT0gdGhpcy5URVhUX1RPS0VOX1RZUEUpIHtcbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5mb3JtVG9rZW5zW2luZGV4XS5sYWJlbDtcbiAgICAgICAgICBjb25zdCBuZXh0Q29udGVudCA9IHRoaXMuZm9ybVRva2Vuc1tuZXh0SWR4XS5sYWJlbDtcbiAgICAgICAgICBjb25zdCBtZXJnZWRUb2tlbjogSW5wdXRUb2tlbiA9IHtcbiAgICAgICAgICAgIGlkOiB0aGlzLmZvcm1Ub2tlbnNbaW5kZXggKyAxXS5pZCxcbiAgICAgICAgICAgIGxhYmVsOiBgJHtjb250ZW50fSAke25leHRDb250ZW50fWAsXG4gICAgICAgICAgICB0eXBlOiB0aGlzLlRFWFRfVE9LRU5fVFlQRVxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5mb3JtVG9rZW5zLnNwbGljZShpbmRleCArIDEsIDIsIG1lcmdlZFRva2VuKTtcblxuICAgICAgICAgIGNvbnN0IGVsOiBIVE1MRWxlbWVudCB8IG51bGwgPSAodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5xdWVyeVNlbGVjdG9yKGBbZGF0YS1pZD1cIiR7dGhpcy5mb3JtVG9rZW5zW2luZGV4ICsgMV0uaWR9XCJdYCk7XG4gICAgICAgICAgaWYgKGVsKSB7XG4gICAgICAgICAgICBlbC5pbm5lclRleHQgPSBtZXJnZWRUb2tlbi5sYWJlbDtcbiAgICAgICAgICAgIHRoaXMuX3NldENhcmV0UG9zKGVsLCBjb250ZW50Lmxlbmd0aCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2VtaXRDaGFuZ2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkJhY2tzcGFjZShlOiBFdmVudCwgaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IGNwID0gdGhpcy5fZ2V0Q2FyZXRQb3MoZS50YXJnZXQgYXMgTm9kZSk7XG4gICAgaWYgKGNwID09PSAwKSB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAvLyByZW1vdmUgcHJldiB0b2tlblxuICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICB0aGlzLmZvcm1Ub2tlbnMuc3BsaWNlKGluZGV4IC0gMSwgMSk7XG4gICAgICAgIC8vIGlmIHByZXYgdG9rZW4gaXMgYWxzbyBhIHRleHQgdG9rZW4gPT4gbWVyZ2VcbiAgICAgICAgY29uc3QgcHJldklkeCA9IGluZGV4IC0gMjtcbiAgICAgICAgaWYgKHByZXZJZHggPj0gMCAmJiB0aGlzLmZvcm1Ub2tlbnNbcHJldklkeF0udHlwZSA9PT0gdGhpcy5URVhUX1RPS0VOX1RZUEUpIHtcbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5mb3JtVG9rZW5zW2luZGV4IC0gMV0ubGFiZWw7XG4gICAgICAgICAgY29uc3QgcHJldkNvbnRlbnQgPSB0aGlzLmZvcm1Ub2tlbnNbcHJldklkeF0ubGFiZWw7XG4gICAgICAgICAgY29uc3QgbWVyZ2VkVG9rZW46IElucHV0VG9rZW4gPSB7XG4gICAgICAgICAgICBpZDogdGhpcy5mb3JtVG9rZW5zW3ByZXZJZHhdLmlkLFxuICAgICAgICAgICAgbGFiZWw6IGAke3ByZXZDb250ZW50fSAke2NvbnRlbnR9YCxcbiAgICAgICAgICAgIHR5cGU6IHRoaXMuVEVYVF9UT0tFTl9UWVBFXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLmZvcm1Ub2tlbnMuc3BsaWNlKHByZXZJZHgsIDIsIG1lcmdlZFRva2VuKTtcbiAgICAgICAgICBjb25zdCBlbDogSFRNTEVsZW1lbnQgfCBudWxsID0gKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkucXVlcnlTZWxlY3RvcihgW2RhdGEtaWQ9XCIke3RoaXMuZm9ybVRva2Vuc1twcmV2SWR4XS5pZH1cIl1gKTtcbiAgICAgICAgICBpZiAoZWwpIHtcbiAgICAgICAgICAgIGVsLmlubmVyVGV4dCA9IG1lcmdlZFRva2VuLmxhYmVsO1xuICAgICAgICAgICAgdGhpcy5fc2V0Q2FyZXRQb3MoZWwsIHByZXZDb250ZW50Lmxlbmd0aCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX2ZvY3VzRmlyc3QoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9lbWl0Q2hhbmdlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZm9jdXNGaXJzdCgpIHtcbiAgICBjb25zdCBlbDogSFRNTEVsZW1lbnQgfCBudWxsID0gKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkucXVlcnlTZWxlY3RvcihgW2NvbnRlbnRlZGl0YWJsZV1gKTtcbiAgICBpZiAoZWwpXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZWw/LmZvY3VzKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2ZvY3VzSW5wdXQob2Zmc2V0OiBudW1iZXIpIHtcbiAgICBjb25zdCBpbnB1dHM6IEhUTUxJbnB1dEVsZW1lbnRbXSA9IEFycmF5LmZyb20odGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tjb250ZW50ZWRpdGFibGVdJykpO1xuICAgIGxldCBpID0gaW5wdXRzLmZpbmRJbmRleCgoaSkgPT4gaSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XG4gICAgaSA9IGkgKyBvZmZzZXQ7XG4gICAgaWYgKGkgPiBpbnB1dHMubGVuZ3RoIC0gMSkgaSA9IDA7XG4gICAgaWYgKGkgPCAwKSBpID0gaW5wdXRzLmxlbmd0aCAtIDE7XG4gICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IGlucHV0c1tpXS5mb2N1cygpKTtcblxuICAgIHRoaXMuX3NldENhcmV0UG9zKGlucHV0c1tpXSwgb2Zmc2V0ID4gMCB8fCBpbnB1dHNbaV0uaW5uZXJUZXh0Lmxlbmd0aCA9PT0gMCA/IDAgOiBpbnB1dHNbaV0uaW5uZXJUZXh0Lmxlbmd0aCk7XG4gIH1cblxuICBwcml2YXRlIF9zZXRDYXJldFBvcyhlbGVtZW50OiBIVE1MRWxlbWVudCwgcG9zOiBudW1iZXIpIHtcbiAgICBjb25zdCB0YXJnZXROb2RlID0gZWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aCA/IGVsZW1lbnQuY2hpbGROb2Rlc1swXSA6IGVsZW1lbnQ7XG4gICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgIHJhbmdlLnNlbGVjdE5vZGUoZWxlbWVudCk7XG4gICAgcmFuZ2Uuc2V0U3RhcnQodGFyZ2V0Tm9kZSwgcG9zKTtcbiAgICByYW5nZS5zZXRFbmQodGFyZ2V0Tm9kZSwgcG9zKTtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgc2VsZWN0aW9uIS5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICBzZWxlY3Rpb24hLmFkZFJhbmdlKHJhbmdlKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldENhcmV0UG9zKG5vZGU6IE5vZGUpOiBudW1iZXIge1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbiEuZ2V0UmFuZ2VBdCgwKTtcbiAgICBjb25zdCBjbG9uZWRSYW5nZSA9IHJhbmdlLmNsb25lUmFuZ2UoKTtcbiAgICBjbG9uZWRSYW5nZS5zZWxlY3ROb2RlQ29udGVudHMobm9kZSk7XG4gICAgY2xvbmVkUmFuZ2Uuc2V0RW5kKHJhbmdlLmVuZENvbnRhaW5lciwgcmFuZ2UuZW5kT2Zmc2V0KTtcbiAgICByZXR1cm4gY2xvbmVkUmFuZ2UudG9TdHJpbmcoKS5sZW5ndGg7XG4gIH1cblxuICBvbk9wdGlvblNlbGVjdChvOiBJbnB1dFRva2VuKSB7XG4gICAgbGV0IHRva2Vuc0FkZGVkID0gMDtcbiAgICBsZXQgdG9rZW5zUmVtb3ZlZCA9IDA7XG4gICAgY29uc3QgaW5wdXRWYWx1ZSA9IHRoaXMuX2dldElucHV0VmFsdWUoKTtcbiAgICBjb25zdCB3b3JkVG9rZW5zOiBzdHJpbmdbXSA9IHRoaXMuX3Rva2VuaXplKGlucHV0VmFsdWUpO1xuICAgIGNvbnN0IGxhc3RXb3JkID0gd29yZFRva2Vuc1t3b3JkVG9rZW5zLmxlbmd0aCAtIDFdO1xuICAgIGlmIChsYXN0V29yZC5sZW5ndGggPT09IGlucHV0VmFsdWUubGVuZ3RoKSB7XG4gICAgICB0aGlzLmZvcm1Ub2tlbnMucG9wKCk7XG4gICAgICB0b2tlbnNSZW1vdmVkKys7XG4gICAgfVxuXG4gICAgdGhpcy5mb3JtVG9rZW5zLnNwbGljZSh0aGlzLmZvY3VzZWRUb2tlbkluZGV4ICsgMSwgMCwgc3RydWN0dXJlZENsb25lKG8pKTtcbiAgICB0b2tlbnNBZGRlZCsrO1xuXG4gICAgY29uc3Qgc2hhZG93VG9rZW5zOiBJbnB1dFRva2VuW10gPSBbXTtcbiAgICAvLyBjaGVjayBmb3IgaW5iZXR3ZWVuIHRva2Vuc1xuICAgIGxldCB0eHRUb2tlbkNvdW50ID0gLTE7XG4gICAgdGhpcy5mb3JtVG9rZW5zLmZvckVhY2goKHQ6IElucHV0VG9rZW4sIGk6IG51bWJlcikgPT4ge1xuICAgICAgaWYgKHQudHlwZSA9PT0gdGhpcy5URVhUX1RPS0VOX1RZUEUpIHtcbiAgICAgICAgdHh0VG9rZW5Db3VudCsrO1xuICAgICAgICB0LmlkID0gdGhpcy5fdGV4dFRva2VuSWQodHh0VG9rZW5Db3VudCk7XG4gICAgICB9XG4gICAgICBzaGFkb3dUb2tlbnMucHVzaCh0KTtcbiAgICAgIGNvbnN0IG5leHRUb2tlbiA9IHRoaXMuZm9ybVRva2Vuc1tpICsgMV07XG4gICAgICBpZiAodC50eXBlICE9PSB0aGlzLlRFWFRfVE9LRU5fVFlQRSAmJiBuZXh0VG9rZW4gJiYgbmV4dFRva2VuLnR5cGUgIT09IHRoaXMuVEVYVF9UT0tFTl9UWVBFKSB7XG4gICAgICAgIC8vIGFkZCBpbmJldHdlZW4gdG9rZW5cbiAgICAgICAgdHh0VG9rZW5Db3VudCsrO1xuICAgICAgICBzaGFkb3dUb2tlbnMucHVzaCh0aGlzLl9uZXdUZXh0VG9rZW4odHh0VG9rZW5Db3VudCkpO1xuICAgICAgICB0b2tlbnNBZGRlZCsrO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuZm9ybVRva2Vuc1t0aGlzLmZvcm1Ub2tlbnMubGVuZ3RoIC0gMV0udHlwZSAhPT0gdGhpcy5URVhUX1RPS0VOX1RZUEUpIHtcbiAgICAgIC8vIGFkZCBlbXB0eSB0ZXh0IHRva2VuIGF0IHRoZSBlbmRcbiAgICAgIHR4dFRva2VuQ291bnQrKztcbiAgICAgIHNoYWRvd1Rva2Vucy5wdXNoKHRoaXMuX25ld1RleHRUb2tlbih0eHRUb2tlbkNvdW50KSk7XG4gICAgICB0b2tlbnNBZGRlZCsrO1xuICAgIH1cbiAgICB0aGlzLmZvcm1Ub2tlbnMgPSBzaGFkb3dUb2tlbnM7XG4gICAgdGhpcy5faW5wdXRFbGVtZW50IS5pbm5lclRleHQgPSBpbnB1dFZhbHVlLnN1YnN0cmluZygwLCBpbnB1dFZhbHVlLmxlbmd0aCAtIGxhc3RXb3JkLmxlbmd0aCkudHJpbSgpO1xuICAgIHRoaXMuX2VtaXRDaGFuZ2UoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKGBmaTogJHt0aGlzLmZvY3VzZWRUb2tlbkluZGV4fSwgdGE6ICR7dG9rZW5zQWRkZWR9LCB0cjogJHt0b2tlbnNSZW1vdmVkfSwgbmU6ICR7dGhpcy5mb2N1c2VkVG9rZW5JbmRleCArICh0b2tlbnNBZGRlZCAtIHRva2Vuc1JlbW92ZWQpfWApO1xuXG4gICAgICB0aGlzLl9mb2N1c1Rva2VuSW5wdXQodGhpcy5mb2N1c2VkVG9rZW5JbmRleCArICh0b2tlbnNBZGRlZCAtIHRva2Vuc1JlbW92ZWQpKTtcbiAgICB9KTtcblxuICAgIHRoaXMuY2xvc2VPcHRpb25zKCk7XG4gIH1cblxuICBwcml2YXRlIF9mb2N1c1Rva2VuSW5wdXQoaW5kZXg/OiBudW1iZXIpOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3Qgc2VsZWN0b3IgPSBpbmRleCA9PT0gdW5kZWZpbmVkID8gJ2RpdjpsYXN0LWNoaWxkJyA6IGBkaXY6bnRoLWNoaWxkKCR7aW5kZXggKyAxfSlgO1xuICAgIGNvbnNvbGUubG9nKHNlbGVjdG9yKTtcblxuICAgIGNvbnN0IGxhc3RJbnB1dDogSFRNTEVsZW1lbnQgPSAodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKSBhcyBIVE1MRWxlbWVudDtcbiAgICBsYXN0SW5wdXQuZm9jdXMoKTtcbiAgICByZXR1cm4gbGFzdElucHV0O1xuICB9XG5cbiAgLy8gcHJpdmF0ZSBfZm9jdXNJbnB1dCgpOiBIVE1MRWxlbWVudCB7XG4gIC8vICAgY29uc3QgbGFzdElucHV0OiBIVE1MRWxlbWVudCA9IChcbiAgLy8gICAgIHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudFxuICAvLyAgICkucXVlcnlTZWxlY3RvcignW2NvbnRlbnRlZGl0YWJsZV06bGFzdC1jaGlsZCcpIGFzIEhUTUxFbGVtZW50O1xuICAvLyAgIGxhc3RJbnB1dC5mb2N1cygpO1xuICAvLyAgIHJldHVybiBsYXN0SW5wdXQ7XG4gIC8vIH1cblxuICBvcGVuT3B0aW9ucygpIHtcbiAgICBpZiAodGhpcy5fb3ZlcmxheVJlZiB8fCAhdGhpcy5hdXRvY29tcGxldGVWYWx1ZXMubGVuZ3RoKSByZXR1cm47XG4gICAgdGhpcy5fb3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5vcGVuKFxuICAgICAgdGhpcy5vcHRpb25zVGVtcGxhdGUoKSxcbiAgICAgIG51bGwsXG4gICAgICB7XG4gICAgICAgIGxpZ2h0RGlzbWlzczogdHJ1ZSxcbiAgICAgICAgbWF4SGVpZ2h0OiAnOTd2aCdcbiAgICAgIH0sXG4gICAgICB0aGlzLmVsUmVmXG4gICAgKTtcbiAgfVxuXG4gIGNsb3NlT3B0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fb3ZlcmxheVJlZikge1xuICAgICAgdGhpcy5fb3ZlcmxheVJlZi5jbG9zZSgpO1xuICAgICAgdGhpcy5fb3ZlcmxheVJlZiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5hdXRvY29tcGxldGVTZWxlY3RlZEluZGV4ID0gLTE7XG4gICAgdGhpcy5hdXRvY29tcGxldGVWYWx1ZXMgPSBbXTtcbiAgfVxuXG4gIG9uVG9rZW5FbnRlcihlOiBFdmVudCkge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2VtaXRDaGFuZ2UoZm9jdXNGaXJzdCA9IGZhbHNlKSB7XG4gICAgLy8gbmVlZCB0byBzZXQgdGltZW91dCBzbyBET00gY2hhbmdlcyBhcmUgYXBwbGllZCBiZWZvcmUgYWNjZXNzaW5nIGVsZW1lbnRzXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmZvcm1Ub2tlbnMuZm9yRWFjaCgodCkgPT4ge1xuICAgICAgICBpZiAodC50eXBlID09PSB0aGlzLlRFWFRfVE9LRU5fVFlQRSkge1xuICAgICAgICAgIGNvbnN0IGVsOiBIVE1MRWxlbWVudCB8IG51bGwgPSAodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5xdWVyeVNlbGVjdG9yKGBbZGF0YS1pZD1cIiR7dC5pZH1cIl1gKTtcbiAgICAgICAgICBpZiAoZWwpIHQubGFiZWwgPSBlbC5pbm5lclRleHQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5jaGFuZ2UuZW1pdChcbiAgICAgICAgdGhpcy5mb3JtVG9rZW5zXG4gICAgICAgICAgLmZpbHRlcigodDogSW5uZXJJbnB1dFRva2VuKSA9PiB0LnR5cGUgIT09IHRoaXMuVEVYVF9UT0tFTl9UWVBFIHx8IHQubGFiZWwubGVuZ3RoID4gMClcbiAgICAgICAgICAubWFwKCh0OiBJbm5lcklucHV0VG9rZW4pID0+ICh7XG4gICAgICAgICAgICBpZDogdC5pZCxcbiAgICAgICAgICAgIGxhYmVsOiB0LmxhYmVsLFxuICAgICAgICAgICAgdHlwZTogdC50eXBlXG4gICAgICAgICAgfSkpXG4gICAgICApO1xuICAgICAgaWYgKGZvY3VzRmlyc3QpIHRoaXMuX2ZvY3VzRmlyc3QoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX25ld1RleHRUb2tlbihpZHg/OiBudW1iZXIpOiBJbm5lcklucHV0VG9rZW4ge1xuICAgIGNvbnN0IGluZGV4ID0gaWR4ICE9PSB1bmRlZmluZWQgPyBpZHggOiB0aGlzLmZvcm1Ub2tlbnM/Lmxlbmd0aCA/IHRoaXMuZm9ybVRva2Vucy5maWx0ZXIoKHQpID0+IHQudHlwZSA9PT0gdGhpcy5URVhUX1RPS0VOX1RZUEUpLmxlbmd0aCA6IDA7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB0aGlzLl90ZXh0VG9rZW5JZChpbmRleCksXG4gICAgICBsYWJlbDogJycsXG4gICAgICB0eXBlOiB0aGlzLlRFWFRfVE9LRU5fVFlQRVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIF90ZXh0VG9rZW5JZChpOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBgdHh0XyR7aX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBfdG9rZW5pemUodmFsdWU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCB3b3JkVG9rZW5zOiBzdHJpbmdbXSA9IHZhbHVlLnNwbGl0KC9cXFcrLykuZmlsdGVyKCh0OiBzdHJpbmcpID0+IHQ/Lmxlbmd0aCk7XG4gICAgcmV0dXJuIHdvcmRUb2tlbnM7XG4gIH1cblxuICBwcml2YXRlIF9nZXRJbnB1dFZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2lucHV0RWxlbWVudCEuaW5uZXJUZXh0LnJlcGxhY2VBbGwoJyZuYnNwOycsICcnKTtcbiAgfVxuXG4gIHByaXZhdGUgX3Byb2Nlc3NWYWx1ZSgpIHtcbiAgICBjb25zdCB3b3JkVG9rZW5zOiBzdHJpbmdbXSA9IHRoaXMuX3Rva2VuaXplKHRoaXMuX2dldElucHV0VmFsdWUoKSk7XG4gICAgY29uc3QgbGFzdFdvcmQgPSB3b3JkVG9rZW5zW3dvcmRUb2tlbnMubGVuZ3RoIC0gMV07XG5cbiAgICB0aGlzLmF1dG9jb21wbGV0ZVZhbHVlcyA9XG4gICAgICAhbGFzdFdvcmQgfHwgbGFzdFdvcmQubGVuZ3RoIDwgMlxuICAgICAgICA/IFtdXG4gICAgICAgIDogdGhpcy50b2tlbnMoKS5maWx0ZXIoKHQ6IElucHV0VG9rZW4pID0+IGxhc3RXb3JkICYmIG5ldyBSZWdFeHAobGFzdFdvcmQsIHRoaXMuY2FzZVNlbnNpdGl2ZSgpID8gJycgOiAnaScpLnRlc3QodC5sYWJlbCkpO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlU2VsZWN0ZWRJbmRleCA9IHRoaXMuYXV0b2NvbXBsZXRlVmFsdWVzLmxlbmd0aCA/IDAgOiAtMTtcbiAgICBpZiAodGhpcy5hdXRvY29tcGxldGVWYWx1ZXMubGVuZ3RoKSB0aGlzLm9wZW5PcHRpb25zKCk7XG4gICAgZWxzZSB0aGlzLmNsb3NlT3B0aW9ucygpO1xuICB9XG59XG4iLCI8IS0tIGZpIHt7Zm9jdXNlZFRva2VuSW5kZXh9fSAtLT5cblxuQGZvciAoZnQgb2YgZm9ybVRva2VuczsgbGV0IGkgPSAkaW5kZXg7IHRyYWNrICRpbmRleCkge1xuICBAaWYgKGZ0LnR5cGUgPT09IFRFWFRfVE9LRU5fVFlQRSkge1xuICAgIDxkaXZcbiAgICAgIGNvbnRlbnRlZGl0YWJsZVxuICAgICAgW2F0dHIuZGF0YS1pZF09XCJmdC5pZFwiXG4gICAgICAoaW5wdXQpPVwib25JbnB1dCgkZXZlbnQpXCJcbiAgICAgIChmb2N1cyk9XCJvbklucHV0Rm9jdXMoJGV2ZW50KVwiXG4gICAgICAoa2V5ZG93bi5lbnRlcik9XCJvblRva2VuRW50ZXIoJGV2ZW50KVwiXG4gICAgICAoa2V5ZG93bi5hcnJvd0xlZnQpPVwib25BcnJvd0xlZnQoJGV2ZW50KVwiXG4gICAgICAoa2V5ZG93bi5hcnJvd1JpZ2h0KT1cIm9uQXJyb3dSaWdodCgkZXZlbnQpXCJcbiAgICAgIChrZXlkb3duLmRlbGV0ZSk9XCJvbkRlbGV0ZSgkZXZlbnQsIGkpXCJcbiAgICAgIChrZXlkb3duLmJhY2tzcGFjZSk9XCJvbkJhY2tzcGFjZSgkZXZlbnQsIGkpXCJcbiAgICA+PC9kaXY+XG4gIH0gQGVsc2Uge1xuICAgIEBpZiAodG9rZW5UZW1wbGF0ZSgpKSB7XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidG9rZW5UZW1wbGF0ZSgpITsgY29udGV4dDogeyAkaW1wbGljaXQ6IGZ0IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICB9IEBlbHNlIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJjaGlwXCI+e3sgZnQubGFiZWwgfX08L2Rpdj5cbiAgICB9XG4gIH1cbn1cblxuPG5nLXRlbXBsYXRlICNvcHRpb25zPlxuICA8eXZjLWF1dG9jb21wbGV0ZS1vcHRpb25zXG4gICAgY2xhc3M9XCJwb3BvdmVyIGFuaW1hdGVJblwiXG4gICAgW3ZhbHVlc109XCJhdXRvY29tcGxldGVWYWx1ZXNcIlxuICAgIFsoZm9jdXNlZEluZGV4KV09XCJhdXRvY29tcGxldGVTZWxlY3RlZEluZGV4XCJcbiAgICBbYXV0b2NvbXBsZXRlT3B0aW9uVGVtcGxhdGVdPVwib3B0aW9uVGVtcGxhdGUoKSB8fCBudWxsXCJcbiAgICAob3B0aW9uU2VsZWN0KT1cIm9uT3B0aW9uU2VsZWN0KCRldmVudClcIlxuICAgIFtmaWVsZF09XCInbGFiZWwnXCJcbiAgPjwveXZjLWF1dG9jb21wbGV0ZS1vcHRpb25zPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4taW5wdXQuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy95dXV2aXMvY2xpZW50LWZyYW1ld29yay9jb21tb24vc3JjL2xpYi9jb21wb25lbnRzL3Rva2VuLWlucHV0L3Rva2VuLWlucHV0LmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBJbnB1dFRva2VuIHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBJbm5lcklucHV0VG9rZW4gZXh0ZW5kcyBJbnB1dFRva2VuIHtcbiAgaXNJbmJldHdlZW5Ub2tlbj86IGJvb2xlYW47XG59XG4iXX0=
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import { Directive, ElementRef, HostBinding, Input, inject } from '@angular/core';
|
|
2
|
-
import { Utils } from '@yuuvis/client-core';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
/**
|
|
5
|
-
* A directive that will overlay its host component with a translucent background
|
|
6
|
-
* and a loading spinner once the condition resolves with true. This is useful for example to
|
|
7
|
-
* prevent user intercation while component data is loading or some processing is done.
|
|
8
|
-
*
|
|
9
|
-
* It'll also set the `inert` attribute on the host element. This will disable the host and
|
|
10
|
-
* all elements inside (like buttons, inputs etc.)
|
|
11
|
-
*
|
|
12
|
-
* @example
|
|
13
|
-
* <div class="result-list" [yuvBusyOverlay]="waitingForServerResponse">...</div>
|
|
14
|
-
*
|
|
15
|
-
*/
|
|
16
|
-
export class BusyOverlayDirective {
|
|
17
|
-
constructor() {
|
|
18
|
-
this.stylePosition = 'initial';
|
|
19
|
-
this.#elRef = inject(ElementRef);
|
|
20
|
-
this.#overlayId = null;
|
|
21
|
-
}
|
|
22
|
-
#elRef;
|
|
23
|
-
#overlayId;
|
|
24
|
-
/**
|
|
25
|
-
* The Boolean expression to evaluate as the condition for showing the busy overlay
|
|
26
|
-
*/
|
|
27
|
-
set yuvBusyOverlay(b) {
|
|
28
|
-
if (b === true) {
|
|
29
|
-
this.#addBusyOverlay();
|
|
30
|
-
}
|
|
31
|
-
else if (this.#overlayId) {
|
|
32
|
-
this.#removeBusyOverlay();
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
#addBusyOverlay() {
|
|
36
|
-
this.stylePosition = 'relative';
|
|
37
|
-
const overlay = document.createElement('div');
|
|
38
|
-
overlay.style.position = 'absolute';
|
|
39
|
-
overlay.style.transition = 'opacity 200ms';
|
|
40
|
-
overlay.style.opacity = '0';
|
|
41
|
-
overlay.style.inset = '0';
|
|
42
|
-
overlay.style.display = 'grid';
|
|
43
|
-
overlay.style.alignItems = 'center';
|
|
44
|
-
overlay.style.justifyContent = 'center';
|
|
45
|
-
overlay.style.zIndex = '5';
|
|
46
|
-
overlay.style.backgroundColor = 'var(--busy-overlay-background)';
|
|
47
|
-
this.#overlayId = `p${Utils.uuid()}`;
|
|
48
|
-
overlay.setAttribute('id', this.#overlayId);
|
|
49
|
-
const spinner = document.createElement('div');
|
|
50
|
-
spinner.setAttribute('class', 'yuv-loader');
|
|
51
|
-
overlay.append(spinner);
|
|
52
|
-
const el = this.#elRef.nativeElement;
|
|
53
|
-
el.setAttribute('inert', '');
|
|
54
|
-
el.append(overlay);
|
|
55
|
-
setTimeout(() => {
|
|
56
|
-
overlay.style.opacity = '1';
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
#removeBusyOverlay() {
|
|
60
|
-
const el = this.#elRef.nativeElement.querySelector(`#${this.#overlayId}`);
|
|
61
|
-
if (el) {
|
|
62
|
-
el.style.opacity = '0';
|
|
63
|
-
setTimeout(() => {
|
|
64
|
-
el.remove();
|
|
65
|
-
}, 200);
|
|
66
|
-
}
|
|
67
|
-
this.#elRef.nativeElement.removeAttribute('inert');
|
|
68
|
-
this.#overlayId = null;
|
|
69
|
-
}
|
|
70
|
-
ngOnInit() {
|
|
71
|
-
this.stylePosition = getComputedStyle(this.#elRef.nativeElement).position;
|
|
72
|
-
}
|
|
73
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BusyOverlayDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
74
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: BusyOverlayDirective, isStandalone: true, selector: "[yuvBusyOverlay]", inputs: { yuvBusyOverlay: "yuvBusyOverlay" }, host: { properties: { "style.position": "this.stylePosition" } }, ngImport: i0 }); }
|
|
75
|
-
}
|
|
76
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BusyOverlayDirective, decorators: [{
|
|
77
|
-
type: Directive,
|
|
78
|
-
args: [{
|
|
79
|
-
selector: '[yuvBusyOverlay]',
|
|
80
|
-
standalone: true
|
|
81
|
-
}]
|
|
82
|
-
}], propDecorators: { stylePosition: [{
|
|
83
|
-
type: HostBinding,
|
|
84
|
-
args: ['style.position']
|
|
85
|
-
}], yuvBusyOverlay: [{
|
|
86
|
-
type: Input
|
|
87
|
-
}] } });
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVzeS1vdmVybGF5LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMveXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvY29tbW9uL3NyYy9saWIvZGlyZWN0aXZlcy9idXN5LW92ZXJsYXkuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFFNUM7Ozs7Ozs7Ozs7O0dBV0c7QUFLSCxNQUFNLE9BQU8sb0JBQW9CO0lBSmpDO1FBS2lDLGtCQUFhLEdBQUcsU0FBUyxDQUFDO1FBRXpELFdBQU0sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFNUIsZUFBVSxHQUFrQixJQUFJLENBQUM7S0FxRGxDO0lBdkRDLE1BQU0sQ0FBc0I7SUFFNUIsVUFBVSxDQUF1QjtJQUNqQzs7T0FFRztJQUNILElBQWEsY0FBYyxDQUFDLENBQVU7UUFDcEMsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDekIsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDO1FBQ2hDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO1FBQ3BDLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLGVBQWUsQ0FBQztRQUMzQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7UUFDNUIsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO1FBQzFCLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUMvQixPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7UUFDcEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO1FBQ3hDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztRQUMzQixPQUFPLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxnQ0FBZ0MsQ0FBQztRQUVqRSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7UUFDckMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDNUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4QixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQTRCLENBQUM7UUFDcEQsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDN0IsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuQixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUMxRSxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ1AsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO1lBQ3ZCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2QsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztJQUN6QixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDNUUsQ0FBQzsrR0F6RFUsb0JBQW9CO21HQUFwQixvQkFBb0I7OzRGQUFwQixvQkFBb0I7a0JBSmhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOzhCQUVnQyxhQUFhO3NCQUEzQyxXQUFXO3VCQUFDLGdCQUFnQjtnQkFRaEIsY0FBYztzQkFBMUIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkluaXQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICdAeXV1dmlzL2NsaWVudC1jb3JlJztcblxuLyoqXG4gKiBBIGRpcmVjdGl2ZSB0aGF0IHdpbGwgb3ZlcmxheSBpdHMgaG9zdCBjb21wb25lbnQgd2l0aCBhIHRyYW5zbHVjZW50IGJhY2tncm91bmRcbiAqIGFuZCBhIGxvYWRpbmcgc3Bpbm5lciBvbmNlIHRoZSBjb25kaXRpb24gcmVzb2x2ZXMgd2l0aCB0cnVlLiBUaGlzIGlzIHVzZWZ1bCBmb3IgZXhhbXBsZSB0b1xuICogcHJldmVudCB1c2VyIGludGVyY2F0aW9uIHdoaWxlIGNvbXBvbmVudCBkYXRhIGlzIGxvYWRpbmcgb3Igc29tZSBwcm9jZXNzaW5nIGlzIGRvbmUuXG4gKlxuICogSXQnbGwgYWxzbyBzZXQgdGhlIGBpbmVydGAgYXR0cmlidXRlIG9uIHRoZSBob3N0IGVsZW1lbnQuIFRoaXMgd2lsbCBkaXNhYmxlIHRoZSBob3N0IGFuZFxuICogYWxsIGVsZW1lbnRzIGluc2lkZSAobGlrZSBidXR0b25zLCBpbnB1dHMgZXRjLilcbiAqXG4gKiBAZXhhbXBsZVxuICogPGRpdiBjbGFzcz1cInJlc3VsdC1saXN0XCIgW3l1dkJ1c3lPdmVybGF5XT1cIndhaXRpbmdGb3JTZXJ2ZXJSZXNwb25zZVwiPi4uLjwvZGl2PlxuICpcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3l1dkJ1c3lPdmVybGF5XScsXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgQnVzeU92ZXJsYXlEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xuICBASG9zdEJpbmRpbmcoJ3N0eWxlLnBvc2l0aW9uJykgc3R5bGVQb3NpdGlvbiA9ICdpbml0aWFsJztcblxuICAjZWxSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG5cbiAgI292ZXJsYXlJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIC8qKlxuICAgKiBUaGUgQm9vbGVhbiBleHByZXNzaW9uIHRvIGV2YWx1YXRlIGFzIHRoZSBjb25kaXRpb24gZm9yIHNob3dpbmcgdGhlIGJ1c3kgb3ZlcmxheVxuICAgKi9cbiAgQElucHV0KCkgc2V0IHl1dkJ1c3lPdmVybGF5KGI6IGJvb2xlYW4pIHtcbiAgICBpZiAoYiA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy4jYWRkQnVzeU92ZXJsYXkoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuI292ZXJsYXlJZCkge1xuICAgICAgdGhpcy4jcmVtb3ZlQnVzeU92ZXJsYXkoKTtcbiAgICB9XG4gIH1cblxuICAjYWRkQnVzeU92ZXJsYXkoKSB7XG4gICAgdGhpcy5zdHlsZVBvc2l0aW9uID0gJ3JlbGF0aXZlJztcbiAgICBjb25zdCBvdmVybGF5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgb3ZlcmxheS5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgb3ZlcmxheS5zdHlsZS50cmFuc2l0aW9uID0gJ29wYWNpdHkgMjAwbXMnO1xuICAgIG92ZXJsYXkuc3R5bGUub3BhY2l0eSA9ICcwJztcbiAgICBvdmVybGF5LnN0eWxlLmluc2V0ID0gJzAnO1xuICAgIG92ZXJsYXkuc3R5bGUuZGlzcGxheSA9ICdncmlkJztcbiAgICBvdmVybGF5LnN0eWxlLmFsaWduSXRlbXMgPSAnY2VudGVyJztcbiAgICBvdmVybGF5LnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcic7XG4gICAgb3ZlcmxheS5zdHlsZS56SW5kZXggPSAnNSc7XG4gICAgb3ZlcmxheS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAndmFyKC0tYnVzeS1vdmVybGF5LWJhY2tncm91bmQpJztcblxuICAgIHRoaXMuI292ZXJsYXlJZCA9IGBwJHtVdGlscy51dWlkKCl9YDtcbiAgICBvdmVybGF5LnNldEF0dHJpYnV0ZSgnaWQnLCB0aGlzLiNvdmVybGF5SWQpO1xuICAgIGNvbnN0IHNwaW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBzcGlubmVyLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAneXV2LWxvYWRlcicpO1xuICAgIG92ZXJsYXkuYXBwZW5kKHNwaW5uZXIpO1xuICAgIGNvbnN0IGVsID0gdGhpcy4jZWxSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICBlbC5zZXRBdHRyaWJ1dGUoJ2luZXJ0JywgJycpO1xuICAgIGVsLmFwcGVuZChvdmVybGF5KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIG92ZXJsYXkuc3R5bGUub3BhY2l0eSA9ICcxJztcbiAgICB9KTtcbiAgfVxuXG4gICNyZW1vdmVCdXN5T3ZlcmxheSgpIHtcbiAgICBjb25zdCBlbCA9IHRoaXMuI2VsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihgIyR7dGhpcy4jb3ZlcmxheUlkfWApO1xuICAgIGlmIChlbCkge1xuICAgICAgZWwuc3R5bGUub3BhY2l0eSA9ICcwJztcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBlbC5yZW1vdmUoKTtcbiAgICAgIH0sIDIwMCk7XG4gICAgfVxuICAgIHRoaXMuI2VsUmVmLm5hdGl2ZUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdpbmVydCcpO1xuICAgIHRoaXMuI292ZXJsYXlJZCA9IG51bGw7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnN0eWxlUG9zaXRpb24gPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMuI2VsUmVmLm5hdGl2ZUVsZW1lbnQpLnBvc2l0aW9uO1xuICB9XG59XG4iXX0=
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { Directive, EventEmitter, HostListener, Input, Output } from '@angular/core';
|
|
2
|
-
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
3
|
-
import { Subject } from 'rxjs';
|
|
4
|
-
import { debounceTime } from 'rxjs/operators';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
/**
|
|
7
|
-
* Fixes the issue of 'click' event beeing triggered on 'doubleclick' by defining new outputs that
|
|
8
|
-
* distinguish between single and double click.
|
|
9
|
-
*/
|
|
10
|
-
export class ClickDoubleDirective {
|
|
11
|
-
constructor() {
|
|
12
|
-
this.debounceTime = 200;
|
|
13
|
-
this.doubleClick = new EventEmitter();
|
|
14
|
-
this.singleClick = new EventEmitter();
|
|
15
|
-
this.clicksSubject = new Subject();
|
|
16
|
-
this.clicksSubject.pipe(takeUntilDestroyed(), debounceTime(this.debounceTime)).subscribe({
|
|
17
|
-
next: (event) => {
|
|
18
|
-
if (event.type === 'click') {
|
|
19
|
-
this.singleClick.emit(event);
|
|
20
|
-
}
|
|
21
|
-
else {
|
|
22
|
-
this.doubleClick.emit(event);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
clickEvent(event) {
|
|
28
|
-
event.preventDefault();
|
|
29
|
-
event.stopPropagation();
|
|
30
|
-
this.clicksSubject.next(event);
|
|
31
|
-
}
|
|
32
|
-
doubleClickEvent(event) {
|
|
33
|
-
event.preventDefault();
|
|
34
|
-
event.stopPropagation();
|
|
35
|
-
this.clicksSubject.next(event);
|
|
36
|
-
}
|
|
37
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ClickDoubleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
38
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: ClickDoubleDirective, isStandalone: true, selector: "[click.single],[click.double]", inputs: { debounceTime: "debounceTime" }, outputs: { doubleClick: "click.double", singleClick: "click.single" }, host: { listeners: { "click": "clickEvent($event)", "dblclick": "doubleClickEvent($event)" } }, ngImport: i0 }); }
|
|
39
|
-
}
|
|
40
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ClickDoubleDirective, decorators: [{
|
|
41
|
-
type: Directive,
|
|
42
|
-
args: [{
|
|
43
|
-
selector: '[click.single],[click.double]',
|
|
44
|
-
standalone: true
|
|
45
|
-
}]
|
|
46
|
-
}], ctorParameters: () => [], propDecorators: { debounceTime: [{
|
|
47
|
-
type: Input
|
|
48
|
-
}], doubleClick: [{
|
|
49
|
-
type: Output,
|
|
50
|
-
args: ['click.double']
|
|
51
|
-
}], singleClick: [{
|
|
52
|
-
type: Output,
|
|
53
|
-
args: ['click.single']
|
|
54
|
-
}], clickEvent: [{
|
|
55
|
-
type: HostListener,
|
|
56
|
-
args: ['click', ['$event']]
|
|
57
|
-
}], doubleClickEvent: [{
|
|
58
|
-
type: HostListener,
|
|
59
|
-
args: ['dblclick', ['$event']]
|
|
60
|
-
}] } });
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpY2stZG91YmxlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMveXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvY29tbW9uL3NyYy9saWIvZGlyZWN0aXZlcy9jbGljay1kb3VibGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUU5Qzs7O0dBR0c7QUFLSCxNQUFNLE9BQU8sb0JBQW9CO0lBTy9CO1FBTlMsaUJBQVksR0FBRyxHQUFHLENBQUM7UUFDSixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDakMsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRWpELGtCQUFhLEdBQUcsSUFBSSxPQUFPLEVBQWMsQ0FBQztRQUdoRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDdkYsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2QsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO29CQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDL0IsQ0FBQztxQkFBTSxDQUFDO29CQUNOLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMvQixDQUFDO1lBQ0gsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFHRCxVQUFVLENBQUMsS0FBaUI7UUFDMUIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBaUI7UUFDaEMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDOytHQTlCVSxvQkFBb0I7bUdBQXBCLG9CQUFvQjs7NEZBQXBCLG9CQUFvQjtrQkFKaEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsK0JBQStCO29CQUN6QyxVQUFVLEVBQUUsSUFBSTtpQkFDakI7d0RBRVUsWUFBWTtzQkFBcEIsS0FBSztnQkFDa0IsV0FBVztzQkFBbEMsTUFBTTt1QkFBQyxjQUFjO2dCQUNFLFdBQVc7c0JBQWxDLE1BQU07dUJBQUMsY0FBYztnQkFpQnRCLFVBQVU7c0JBRFQsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBT2pDLGdCQUFnQjtzQkFEZixZQUFZO3VCQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuLyoqXG4gKiBGaXhlcyB0aGUgaXNzdWUgb2YgJ2NsaWNrJyBldmVudCBiZWVpbmcgdHJpZ2dlcmVkIG9uICdkb3VibGVjbGljaycgYnkgZGVmaW5pbmcgbmV3IG91dHB1dHMgdGhhdFxuICogZGlzdGluZ3Vpc2ggYmV0d2VlbiBzaW5nbGUgYW5kIGRvdWJsZSBjbGljay5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2NsaWNrLnNpbmdsZV0sW2NsaWNrLmRvdWJsZV0nLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIENsaWNrRG91YmxlRGlyZWN0aXZlIHtcbiAgQElucHV0KCkgZGVib3VuY2VUaW1lID0gMjAwO1xuICBAT3V0cHV0KCdjbGljay5kb3VibGUnKSBkb3VibGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgnY2xpY2suc2luZ2xlJykgc2luZ2xlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHJpdmF0ZSBjbGlja3NTdWJqZWN0ID0gbmV3IFN1YmplY3Q8TW91c2VFdmVudD4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNsaWNrc1N1YmplY3QucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSwgZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2VUaW1lKSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChldmVudCkgPT4ge1xuICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2NsaWNrJykge1xuICAgICAgICAgIHRoaXMuc2luZ2xlQ2xpY2suZW1pdChldmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kb3VibGVDbGljay5lbWl0KGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICBjbGlja0V2ZW50KGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmNsaWNrc1N1YmplY3QubmV4dChldmVudCk7XG4gIH1cbiAgQEhvc3RMaXN0ZW5lcignZGJsY2xpY2snLCBbJyRldmVudCddKVxuICBkb3VibGVDbGlja0V2ZW50KGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmNsaWNrc1N1YmplY3QubmV4dChldmVudCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { Directive, ElementRef, NgZone, inject, output } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
/**
|
|
4
|
-
* Directive to watch the size of an element inside the DOM. Usefull for example to provide
|
|
5
|
-
* a different layout (different components) depending on the available screen estate. You
|
|
6
|
-
* should first try to use CSS container queries but somtimes you need a different set of
|
|
7
|
-
* components to be loaded for a certain component size.
|
|
8
|
-
*
|
|
9
|
-
* Let's say you have components designed for bigger screens. You do not want to load them
|
|
10
|
-
* if there is not enough space for them. So you rather load components that are designed to
|
|
11
|
-
* take less space by providing the best user experience on smaller devices.
|
|
12
|
-
*
|
|
13
|
-
* ```html
|
|
14
|
-
* <div yuvContainerSize (containerHeight)="onContainerResize($event)" (containerWidth)="onContainerResize($event)"></div>
|
|
15
|
-
* ```
|
|
16
|
-
*
|
|
17
|
-
*/
|
|
18
|
-
export class ContainerSizeDirective {
|
|
19
|
-
constructor() {
|
|
20
|
-
this.elRef = inject(ElementRef);
|
|
21
|
-
this.ngZone = inject(NgZone);
|
|
22
|
-
this.containerHeight = output();
|
|
23
|
-
this.containerWidth = output();
|
|
24
|
-
this._resizeObserver = new ResizeObserver((entries) => {
|
|
25
|
-
const size = entries[0].borderBoxSize[0];
|
|
26
|
-
if (!this._size || size.blockSize !== this._size.blockSize) {
|
|
27
|
-
this._emit(size.blockSize, true);
|
|
28
|
-
}
|
|
29
|
-
if (!this._size || size.inlineSize !== this._size.inlineSize) {
|
|
30
|
-
this._emit(size.inlineSize);
|
|
31
|
-
}
|
|
32
|
-
this._size = size;
|
|
33
|
-
});
|
|
34
|
-
this._resizeObserver.observe(this.elRef.nativeElement);
|
|
35
|
-
}
|
|
36
|
-
_emit(value, isHeight = false) {
|
|
37
|
-
// ResizeObserver callback is not covered by change detection
|
|
38
|
-
// so it has to be executed withing ngZone
|
|
39
|
-
this.ngZone.run(() => {
|
|
40
|
-
(isHeight ? this.containerHeight : this.containerWidth).emit(value);
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
ngOnDestroy() {
|
|
44
|
-
this._resizeObserver.unobserve(this.elRef.nativeElement);
|
|
45
|
-
}
|
|
46
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ContainerSizeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
47
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: ContainerSizeDirective, isStandalone: true, selector: "[yuvContainerSize]", outputs: { containerHeight: "containerHeight", containerWidth: "containerWidth" }, ngImport: i0 }); }
|
|
48
|
-
}
|
|
49
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ContainerSizeDirective, decorators: [{
|
|
50
|
-
type: Directive,
|
|
51
|
-
args: [{
|
|
52
|
-
selector: '[yuvContainerSize]',
|
|
53
|
-
standalone: true
|
|
54
|
-
}]
|
|
55
|
-
}], ctorParameters: () => [] });
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGFpbmVyLXNpemUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy95dXV2aXMvY2xpZW50LWZyYW1ld29yay9jb21tb24vc3JjL2xpYi9kaXJlY3RpdmVzL2NvbnRhaW5lci1zaXplLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQWEsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFFekY7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFLSCxNQUFNLE9BQU8sc0JBQXNCO0lBbUJqQztRQWxCUSxVQUFLLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzNCLFdBQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFaEMsb0JBQWUsR0FBRyxNQUFNLEVBQVUsQ0FBQztRQUNuQyxtQkFBYyxHQUFHLE1BQU0sRUFBVSxDQUFDO1FBRzFCLG9CQUFlLEdBQUcsSUFBSSxjQUFjLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUN2RCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDM0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ25DLENBQUM7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQzdELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzlCLENBQUM7WUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FBQztRQUdELElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVPLEtBQUssQ0FBQyxLQUFhLEVBQUUsUUFBUSxHQUFHLEtBQUs7UUFDM0MsNkRBQTZEO1FBQzdELDBDQUEwQztRQUMxQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDbkIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDM0QsQ0FBQzsrR0FqQ1Usc0JBQXNCO21HQUF0QixzQkFBc0I7OzRGQUF0QixzQkFBc0I7a0JBSmxDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG9CQUFvQjtvQkFDOUIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBOZ1pvbmUsIE9uRGVzdHJveSwgaW5qZWN0LCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBEaXJlY3RpdmUgdG8gd2F0Y2ggdGhlIHNpemUgb2YgYW4gZWxlbWVudCBpbnNpZGUgdGhlIERPTS4gVXNlZnVsbCBmb3IgZXhhbXBsZSB0byBwcm92aWRlXG4gKiBhIGRpZmZlcmVudCBsYXlvdXQgKGRpZmZlcmVudCBjb21wb25lbnRzKSBkZXBlbmRpbmcgb24gdGhlIGF2YWlsYWJsZSBzY3JlZW4gZXN0YXRlLiBZb3VcbiAqIHNob3VsZCBmaXJzdCB0cnkgdG8gdXNlIENTUyBjb250YWluZXIgcXVlcmllcyBidXQgc29tdGltZXMgeW91IG5lZWQgYSBkaWZmZXJlbnQgc2V0IG9mXG4gKiBjb21wb25lbnRzIHRvIGJlIGxvYWRlZCBmb3IgYSBjZXJ0YWluIGNvbXBvbmVudCBzaXplLlxuICpcbiAqIExldCdzIHNheSB5b3UgaGF2ZSBjb21wb25lbnRzIGRlc2lnbmVkIGZvciBiaWdnZXIgc2NyZWVucy4gWW91IGRvIG5vdCB3YW50IHRvIGxvYWQgdGhlbVxuICogaWYgdGhlcmUgaXMgbm90IGVub3VnaCBzcGFjZSBmb3IgdGhlbS4gU28geW91IHJhdGhlciBsb2FkIGNvbXBvbmVudHMgdGhhdCBhcmUgZGVzaWduZWQgdG9cbiAqIHRha2UgbGVzcyBzcGFjZSBieSBwcm92aWRpbmcgdGhlIGJlc3QgdXNlciBleHBlcmllbmNlIG9uIHNtYWxsZXIgZGV2aWNlcy5cbiAqXG4gKiBgYGBodG1sXG4gKiA8ZGl2IHl1dkNvbnRhaW5lclNpemUgKGNvbnRhaW5lckhlaWdodCk9XCJvbkNvbnRhaW5lclJlc2l6ZSgkZXZlbnQpXCIgKGNvbnRhaW5lcldpZHRoKT1cIm9uQ29udGFpbmVyUmVzaXplKCRldmVudClcIj48L2Rpdj5cbiAqIGBgYFxuICpcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3l1dkNvbnRhaW5lclNpemVdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBDb250YWluZXJTaXplRGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBlbFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgcHJpdmF0ZSBuZ1pvbmUgPSBpbmplY3QoTmdab25lKTtcblxuICBjb250YWluZXJIZWlnaHQgPSBvdXRwdXQ8bnVtYmVyPigpO1xuICBjb250YWluZXJXaWR0aCA9IG91dHB1dDxudW1iZXI+KCk7XG5cbiAgcHJpdmF0ZSBfc2l6ZT86IFJlc2l6ZU9ic2VydmVyU2l6ZTtcbiAgcHJpdmF0ZSBfcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcbiAgICBjb25zdCBzaXplID0gZW50cmllc1swXS5ib3JkZXJCb3hTaXplWzBdO1xuICAgIGlmICghdGhpcy5fc2l6ZSB8fCBzaXplLmJsb2NrU2l6ZSAhPT0gdGhpcy5fc2l6ZS5ibG9ja1NpemUpIHtcbiAgICAgIHRoaXMuX2VtaXQoc2l6ZS5ibG9ja1NpemUsIHRydWUpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX3NpemUgfHwgc2l6ZS5pbmxpbmVTaXplICE9PSB0aGlzLl9zaXplLmlubGluZVNpemUpIHtcbiAgICAgIHRoaXMuX2VtaXQoc2l6ZS5pbmxpbmVTaXplKTtcbiAgICB9XG4gICAgdGhpcy5fc2l6ZSA9IHNpemU7XG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgX2VtaXQodmFsdWU6IG51bWJlciwgaXNIZWlnaHQgPSBmYWxzZSkge1xuICAgIC8vIFJlc2l6ZU9ic2VydmVyIGNhbGxiYWNrIGlzIG5vdCBjb3ZlcmVkIGJ5IGNoYW5nZSBkZXRlY3Rpb25cbiAgICAvLyBzbyBpdCBoYXMgdG8gYmUgZXhlY3V0ZWQgd2l0aGluZyBuZ1pvbmVcbiAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgKGlzSGVpZ2h0ID8gdGhpcy5jb250YWluZXJIZWlnaHQgOiB0aGlzLmNvbnRhaW5lcldpZHRoKS5lbWl0KHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyLnVub2JzZXJ2ZSh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG59XG4iXX0=
|