@colijnit/corecomponents_v12 12.2.26 → 12.2.28
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/bundles/colijnit-corecomponents_v12.umd.js +13792 -13682
- package/bundles/colijnit-corecomponents_v12.umd.js.map +1 -1
- package/colijnit-corecomponents_v12.d.ts +43 -43
- package/colijnit-corecomponents_v12.metadata.json +1 -1
- package/esm2015/colijnit-corecomponents_v12.js +43 -43
- package/esm2015/lib/components/article-tile/article-tile.component.js +49 -49
- package/esm2015/lib/components/article-tile/article-tile.module.js +34 -34
- package/esm2015/lib/components/base/base-input.component.js +833 -833
- package/esm2015/lib/components/base/base.module.js +21 -21
- package/esm2015/lib/components/base/commit-buttons/commit-buttons.component.js +85 -85
- package/esm2015/lib/components/base/commit-buttons/commit-buttons.module.js +20 -20
- package/esm2015/lib/components/base/dialog-base.component.js +5 -5
- package/esm2015/lib/components/base-input-date-picker/base-input-date-picker.directive.js +24 -24
- package/esm2015/lib/components/button/button.component.js +73 -73
- package/esm2015/lib/components/button/button.module.js +18 -18
- package/esm2015/lib/components/calendar/calendar-template.component.js +281 -281
- package/esm2015/lib/components/calendar/calendar.component.js +32 -32
- package/esm2015/lib/components/calendar/calendar.module.js +27 -27
- package/esm2015/lib/components/card/card.component.js +50 -50
- package/esm2015/lib/components/card/card.module.js +34 -34
- package/esm2015/lib/components/carousel/carousel.component.js +109 -109
- package/esm2015/lib/components/carousel/carousel.module.js +31 -31
- package/esm2015/lib/components/carousel-3d/carousel-3d.component.js +293 -293
- package/esm2015/lib/components/carousel-3d/carousel-3d.module.js +18 -18
- package/esm2015/lib/components/carousel-3d/carouselItem.js +53 -53
- package/esm2015/lib/components/checkmark-overlay/checkmark-overlay.component.js +72 -72
- package/esm2015/lib/components/checkmark-overlay/checkmark-overlay.module.js +18 -18
- package/esm2015/lib/components/co-dialog/co-dialog.component.js +91 -91
- package/esm2015/lib/components/co-dialog/co-dialog.module.js +18 -18
- package/esm2015/lib/components/co-dialog-wizard/co-dialog-wizard.component.js +35 -35
- package/esm2015/lib/components/co-dialog-wizard/co-dialog-wizard.module.js +16 -16
- package/esm2015/lib/components/collapsible/collapsible.component.js +67 -67
- package/esm2015/lib/components/collapsible/collapsible.module.js +18 -18
- package/esm2015/lib/components/color-picker/color-picker.component.js +33 -33
- package/esm2015/lib/components/color-picker/color-picker.module.js +20 -20
- package/esm2015/lib/components/core-dialog/confirmation-dialog/confirmation-dialog.component.js +46 -46
- package/esm2015/lib/components/core-dialog/core-dialog.module.js +38 -38
- package/esm2015/lib/components/core-dialog/core-dialog.service.js +66 -66
- package/esm2015/lib/components/core-dialog/core-dynamic-component.service.js +92 -92
- package/esm2015/lib/components/double-calendar/double-calendar.component.js +62 -62
- package/esm2015/lib/components/double-calendar/double-calendar.module.js +24 -24
- package/esm2015/lib/components/filter-item/filter-item-viewmodel.js +12 -12
- package/esm2015/lib/components/filter-item/filter-item.component.js +496 -496
- package/esm2015/lib/components/filter-item/filter-item.module.js +42 -42
- package/esm2015/lib/components/filter-item/filter-viewmodel.js +10 -10
- package/esm2015/lib/components/form/form.component.js +181 -181
- package/esm2015/lib/components/form/form.module.js +22 -22
- package/esm2015/lib/components/grid-toolbar/grid-toolbar.component.js +48 -48
- package/esm2015/lib/components/grid-toolbar/grid-toolbar.module.js +22 -22
- package/esm2015/lib/components/grid-toolbar-button/grid-toolbar-button.component.js +23 -23
- package/esm2015/lib/components/grid-toolbar-button/grid-toolbar-button.module.js +18 -18
- package/esm2015/lib/components/icon/icon-cache.service.js +51 -51
- package/esm2015/lib/components/icon/icon.component.js +47 -47
- package/esm2015/lib/components/icon/icon.module.js +24 -24
- package/esm2015/lib/components/icon-collapse-handle/icon-collapse-handle.component.js +56 -56
- package/esm2015/lib/components/icon-collapse-handle/icon-collapse-handle.module.js +22 -22
- package/esm2015/lib/components/image/image.component.js +31 -31
- package/esm2015/lib/components/image/image.module.js +13 -13
- package/esm2015/lib/components/input-checkbox/input-checkbox.component.js +71 -71
- package/esm2015/lib/components/input-checkbox/input-checkbox.module.js +18 -18
- package/esm2015/lib/components/input-date-picker/input-date-picker.component.js +74 -74
- package/esm2015/lib/components/input-date-picker/input-date-picker.module.js +25 -25
- package/esm2015/lib/components/input-date-range-picker/input-date-range-picker.component.js +107 -107
- package/esm2015/lib/components/input-date-range-picker/input-date-range-picker.module.js +26 -26
- package/esm2015/lib/components/input-number-picker/input-number-picker.component.js +285 -285
- package/esm2015/lib/components/input-number-picker/input-number-picker.module.js +22 -22
- package/esm2015/lib/components/input-radio-button/input-radio-button.component.js +77 -77
- package/esm2015/lib/components/input-radio-button/input-radio-button.module.js +18 -18
- package/esm2015/lib/components/input-scanner/bar-code-scanner.js +22 -22
- package/esm2015/lib/components/input-scanner/input-scanner.component.js +56 -56
- package/esm2015/lib/components/input-scanner/input-scanner.module.js +20 -20
- package/esm2015/lib/components/input-scanner/scanner.service.js +27 -27
- package/esm2015/lib/components/input-search/input-search.component.js +67 -63
- package/esm2015/lib/components/input-search/input-search.module.js +20 -20
- package/esm2015/lib/components/input-text/input-text.component.js +198 -194
- package/esm2015/lib/components/input-text/input-text.module.js +32 -32
- package/esm2015/lib/components/input-textarea/input-textarea.component.js +55 -55
- package/esm2015/lib/components/input-textarea/input-textarea.module.js +26 -26
- package/esm2015/lib/components/level-indicator/level-indicator-level.enum.js +6 -6
- package/esm2015/lib/components/level-indicator/level-indicator.component.js +29 -29
- package/esm2015/lib/components/level-indicator/level-indicator.module.js +14 -14
- package/esm2015/lib/components/list-of-values/list-of-values-multiselect-popup.component.js +87 -87
- package/esm2015/lib/components/list-of-values/list-of-values-popup.component.js +218 -218
- package/esm2015/lib/components/list-of-values/list-of-values.component.js +199 -199
- package/esm2015/lib/components/list-of-values/list-of-values.module.js +37 -37
- package/esm2015/lib/components/loader/loader.component.js +16 -16
- package/esm2015/lib/components/loader/loader.module.js +18 -18
- package/esm2015/lib/components/pagination/paginate.pipe.js +98 -98
- package/esm2015/lib/components/pagination/pagination-instance.js +1 -1
- package/esm2015/lib/components/pagination/pagination.component.js +107 -107
- package/esm2015/lib/components/pagination/pagination.module.js +27 -27
- package/esm2015/lib/components/pagination/pagination.service.js +87 -87
- package/esm2015/lib/components/pagination-bar/pagination-bar.component.js +136 -136
- package/esm2015/lib/components/pagination-bar/pagination-bar.module.js +18 -18
- package/esm2015/lib/components/popup/const/popup-window-token.js +2 -2
- package/esm2015/lib/components/popup/interface/popup-button.js +7 -7
- package/esm2015/lib/components/popup/interface/popup-close-event.js +1 -1
- package/esm2015/lib/components/popup/interface/popup-settings.js +41 -41
- package/esm2015/lib/components/popup/interface/popup.js +1 -1
- package/esm2015/lib/components/popup/model/popup-button-globals.js +10 -10
- package/esm2015/lib/components/popup/model/popup-window.js +37 -37
- package/esm2015/lib/components/popup/popup-buttons.component.js +42 -42
- package/esm2015/lib/components/popup/popup-message-display.component.js +37 -37
- package/esm2015/lib/components/popup/popup-window-shell.component.js +141 -141
- package/esm2015/lib/components/popup/popup.module.js +48 -48
- package/esm2015/lib/components/popup/service/popup-shower.service.js +89 -89
- package/esm2015/lib/components/popup/service/prompt.service.js +126 -126
- package/esm2015/lib/components/popup/text-input-popup.component.js +33 -33
- package/esm2015/lib/components/responsive-text/responsive-text.component.js +17 -17
- package/esm2015/lib/components/responsive-text/responsive-text.module.js +18 -18
- package/esm2015/lib/components/simple-grid/base-simple-grid.component.js +166 -164
- package/esm2015/lib/components/simple-grid/simple-grid-cell.component.js +141 -141
- package/esm2015/lib/components/simple-grid/simple-grid-column.directive.js +113 -111
- package/esm2015/lib/components/simple-grid/simple-grid.component.js +553 -412
- package/esm2015/lib/components/simple-grid/simple-grid.module.js +45 -41
- package/esm2015/lib/components/tile/tile.component.js +44 -44
- package/esm2015/lib/components/tile/tile.module.js +22 -22
- package/esm2015/lib/components/tile-select/tile-select.component.js +26 -26
- package/esm2015/lib/components/tile-select/tile-select.module.js +20 -20
- package/esm2015/lib/components/tooltip/tooltip.component.js +74 -74
- package/esm2015/lib/components/tooltip/tooltip.module.js +18 -18
- package/esm2015/lib/components/validation-error/validation-error.component.js +30 -30
- package/esm2015/lib/components/validation-error/validation-error.module.js +24 -24
- package/esm2015/lib/components/view-mode-buttons/content-view-mode.enum.js +10 -10
- package/esm2015/lib/components/view-mode-buttons/view-mode-buttons.component.js +41 -41
- package/esm2015/lib/components/view-mode-buttons/view-mode-buttons.module.js +20 -20
- package/esm2015/lib/core/constant/default-upper-bound-for-range-components.js +3 -3
- package/esm2015/lib/core/constant/java-max-int.js +1 -1
- package/esm2015/lib/core/constant/number-inputs-key-down-white-list.js +44 -44
- package/esm2015/lib/core/decorator/input-boolean.decorator.js +33 -33
- package/esm2015/lib/core/enum/co-direction.js +8 -8
- package/esm2015/lib/core/enum/co-document-image-display-kind.enum.js +6 -6
- package/esm2015/lib/core/enum/co-document-type.enum.js +10 -10
- package/esm2015/lib/core/enum/co-orientation.js +16 -16
- package/esm2015/lib/core/enum/core-components-icon.enum.js +299 -299
- package/esm2015/lib/core/enum/file-type-internal.enum.js +16 -16
- package/esm2015/lib/core/enum/file-type.enum.js +10 -10
- package/esm2015/lib/core/enum/filterItem-mode.enum.js +42 -42
- package/esm2015/lib/core/enum/input-number-picker-show-mode.enum.js +7 -7
- package/esm2015/lib/core/enum/keyboard-code.enum.js +73 -73
- package/esm2015/lib/core/enum/keyboard-key.enum.js +75 -75
- package/esm2015/lib/core/enum/object-right-type.enum.js +6 -6
- package/esm2015/lib/core/enum/popup-button-type.enum.js +11 -11
- package/esm2015/lib/core/enum/popup-type.enum.js +10 -10
- package/esm2015/lib/core/enum/table-name.enum.js +80 -80
- package/esm2015/lib/core/function/any-nill.function.js +5 -5
- package/esm2015/lib/core/function/is-nill.function.js +4 -4
- package/esm2015/lib/core/function/none-nill.function.js +16 -16
- package/esm2015/lib/core/function/not-nill.function.js +4 -4
- package/esm2015/lib/core/model/bounds-constrained-number-value.js +170 -170
- package/esm2015/lib/core/model/check-precision-and-scale-result.js +1 -1
- package/esm2015/lib/core/model/check-within-stepped-bounds-result.js +1 -1
- package/esm2015/lib/core/model/co-document-right.bo.js +2 -2
- package/esm2015/lib/core/model/co-document.bo.js +120 -120
- package/esm2015/lib/core/model/core-components-icon-svg.js +298 -298
- package/esm2015/lib/core/model/element-position.js +9 -9
- package/esm2015/lib/core/model/event/string-prompt-result-event.js +7 -7
- package/esm2015/lib/core/service/form-input-user-change-listener.service.js +24 -24
- package/esm2015/lib/core/service/form-master.service.js +101 -101
- package/esm2015/lib/core/service/ng-zone-wrapper.service.js +19 -19
- package/esm2015/lib/core/utils/array-utils.js +263 -263
- package/esm2015/lib/core/utils/browser-utils.js +99 -99
- package/esm2015/lib/core/utils/direction-enum-utils.js +13 -13
- package/esm2015/lib/core/utils/event-utils.js +52 -52
- package/esm2015/lib/core/utils/file-utils.js +266 -266
- package/esm2015/lib/core/utils/number-utils.js +308 -308
- package/esm2015/lib/core/utils/object-utils.js +185 -185
- package/esm2015/lib/core/utils/string-utils.js +93 -93
- package/esm2015/lib/core/validator/email.validator.js +5 -5
- package/esm2015/lib/core/validator/equal.validator.js +10 -10
- package/esm2015/lib/core/validator/max-string-length.validator.js +9 -9
- package/esm2015/lib/core/validator/password.validator.js +30 -30
- package/esm2015/lib/core/validator/precision-scale.validator.js +10 -10
- package/esm2015/lib/core/validator/required.validator.js +4 -4
- package/esm2015/lib/directives/clickoutside/click-outside-master.service.js +56 -56
- package/esm2015/lib/directives/clickoutside/click-outside.directive.js +70 -70
- package/esm2015/lib/directives/clickoutside/clickoutside.module.js +18 -18
- package/esm2015/lib/directives/observe-visibility/observe-visibility.directive.js +52 -52
- package/esm2015/lib/directives/observe-visibility/observe-visibility.module.js +14 -14
- package/esm2015/lib/directives/overlay/overlay-parent.directive.js +18 -18
- package/esm2015/lib/directives/overlay/overlay.directive.js +160 -160
- package/esm2015/lib/directives/overlay/overlay.module.js +17 -17
- package/esm2015/lib/directives/ripple/ripple-ref.js +25 -25
- package/esm2015/lib/directives/ripple/ripple-renderer.js +159 -159
- package/esm2015/lib/directives/ripple/ripple.directive.js +79 -79
- package/esm2015/lib/directives/ripple/ripple.module.js +23 -23
- package/esm2015/lib/directives/ripple/scroll-dispatcher.service.js +107 -107
- package/esm2015/lib/directives/ripple/scrollable.directive.js +39 -39
- package/esm2015/lib/directives/ripple/viewport-ruler.service.js +72 -72
- package/esm2015/lib/directives/screen-configuration/screen-configuration.directive.js +157 -157
- package/esm2015/lib/directives/screen-configuration/screen-configuration.module.js +18 -18
- package/esm2015/lib/directives/stopclick/stop-click.directive.js +37 -37
- package/esm2015/lib/directives/stopclick/stop-click.module.js +14 -14
- package/esm2015/lib/directives/template-wrapper/template-wrapper.directive.js +67 -67
- package/esm2015/lib/directives/template-wrapper/template-wrapper.module.js +14 -14
- package/esm2015/lib/directives/tooltip/tooltip-directive.module.js +18 -18
- package/esm2015/lib/directives/tooltip/tooltip.directive.js +77 -77
- package/esm2015/lib/interfaces/dialog-response.interface.js +1 -1
- package/esm2015/lib/interfaces/scanner-input.interface.js +1 -1
- package/esm2015/lib/interfaces/screen-config-adapter-component-interface-name.js +3 -3
- package/esm2015/lib/interfaces/screen-config-adapter.component.interface.js +1 -1
- package/esm2015/lib/model/enum/app-button-type.enum.js +10 -10
- package/esm2015/lib/model/enum/app-popup-type.enum.js +7 -7
- package/esm2015/lib/pipes/append.pipe.js +16 -16
- package/esm2015/lib/pipes/append.pipe.module.js +14 -14
- package/esm2015/lib/pipes/filter.pipe.js +15 -15
- package/esm2015/lib/pipes/filter.pipe.module.js +14 -14
- package/esm2015/lib/pipes/prepend.pipe.js +16 -16
- package/esm2015/lib/pipes/prepend.pipe.module.js +14 -14
- package/esm2015/lib/pipes/price-display-pipe.module.js +14 -14
- package/esm2015/lib/pipes/price-display.pipe.js +19 -19
- package/esm2015/lib/service/base-module-screen-config.service.js +204 -204
- package/esm2015/lib/service/base-module.service.js +41 -41
- package/esm2015/lib/service/color-sequence.service.js +22 -22
- package/esm2015/lib/service/overlay.service.js +72 -72
- package/esm2015/lib/translation/core-components-translation.module.js +28 -28
- package/esm2015/lib/translation/core-components-translation.service.js +16 -16
- package/esm2015/lib/translation/core-dictionary.service.js +28 -28
- package/esm2015/lib/translation/core-localize.pipe.js +25 -25
- package/esm2015/public-api.js +129 -129
- package/fesm2015/colijnit-corecomponents_v12.js +12271 -12118
- package/fesm2015/colijnit-corecomponents_v12.js.map +1 -1
- package/lib/components/article-tile/article-tile.component.d.ts +22 -22
- package/lib/components/article-tile/article-tile.module.d.ts +2 -2
- package/lib/components/base/base-input.component.d.ts +182 -182
- package/lib/components/base/base.module.d.ts +2 -2
- package/lib/components/base/commit-buttons/commit-buttons.component.d.ts +21 -21
- package/lib/components/base/commit-buttons/commit-buttons.module.d.ts +2 -2
- package/lib/components/base/dialog-base.component.d.ts +4 -4
- package/lib/components/base-input-date-picker/base-input-date-picker.directive.d.ts +15 -15
- package/lib/components/button/button.component.d.ts +29 -29
- package/lib/components/button/button.module.d.ts +2 -2
- package/lib/components/calendar/calendar-template.component.d.ts +60 -60
- package/lib/components/calendar/calendar.component.d.ts +13 -13
- package/lib/components/calendar/calendar.module.d.ts +2 -2
- package/lib/components/card/card.component.d.ts +23 -23
- package/lib/components/card/card.module.d.ts +2 -2
- package/lib/components/carousel/carousel.component.d.ts +23 -23
- package/lib/components/carousel/carousel.module.d.ts +6 -6
- package/lib/components/carousel-3d/carousel-3d.component.d.ts +55 -55
- package/lib/components/carousel-3d/carousel-3d.module.d.ts +2 -2
- package/lib/components/carousel-3d/carouselItem.d.ts +13 -13
- package/lib/components/checkmark-overlay/checkmark-overlay.component.d.ts +17 -17
- package/lib/components/checkmark-overlay/checkmark-overlay.module.d.ts +2 -2
- package/lib/components/co-dialog/co-dialog.component.d.ts +23 -23
- package/lib/components/co-dialog/co-dialog.module.d.ts +2 -2
- package/lib/components/co-dialog-wizard/co-dialog-wizard.component.d.ts +9 -9
- package/lib/components/co-dialog-wizard/co-dialog-wizard.module.d.ts +2 -2
- package/lib/components/collapsible/collapsible.component.d.ts +22 -22
- package/lib/components/collapsible/collapsible.module.d.ts +2 -2
- package/lib/components/color-picker/color-picker.component.d.ts +6 -6
- package/lib/components/color-picker/color-picker.module.d.ts +2 -2
- package/lib/components/core-dialog/confirmation-dialog/confirmation-dialog.component.d.ts +20 -20
- package/lib/components/core-dialog/core-dialog.module.d.ts +4 -4
- package/lib/components/core-dialog/core-dialog.service.d.ts +15 -15
- package/lib/components/core-dialog/core-dynamic-component.service.d.ts +12 -12
- package/lib/components/double-calendar/double-calendar.component.d.ts +18 -18
- package/lib/components/double-calendar/double-calendar.module.d.ts +2 -2
- package/lib/components/filter-item/filter-item-viewmodel.d.ts +9 -9
- package/lib/components/filter-item/filter-item.component.d.ts +80 -80
- package/lib/components/filter-item/filter-item.module.d.ts +2 -2
- package/lib/components/filter-item/filter-viewmodel.d.ts +8 -8
- package/lib/components/form/form.component.d.ts +39 -39
- package/lib/components/form/form.module.d.ts +2 -2
- package/lib/components/grid-toolbar/grid-toolbar.component.d.ts +19 -19
- package/lib/components/grid-toolbar/grid-toolbar.module.d.ts +2 -2
- package/lib/components/grid-toolbar-button/grid-toolbar-button.component.d.ts +8 -8
- package/lib/components/grid-toolbar-button/grid-toolbar-button.module.d.ts +2 -2
- package/lib/components/icon/icon-cache.service.d.ts +20 -20
- package/lib/components/icon/icon.component.d.ts +17 -17
- package/lib/components/icon/icon.module.d.ts +2 -2
- package/lib/components/icon-collapse-handle/icon-collapse-handle.component.d.ts +21 -21
- package/lib/components/icon-collapse-handle/icon-collapse-handle.module.d.ts +2 -2
- package/lib/components/image/image.component.d.ts +20 -20
- package/lib/components/image/image.module.d.ts +2 -2
- package/lib/components/input-checkbox/input-checkbox.component.d.ts +24 -24
- package/lib/components/input-checkbox/input-checkbox.module.d.ts +2 -2
- package/lib/components/input-date-picker/input-date-picker.component.d.ts +12 -12
- package/lib/components/input-date-picker/input-date-picker.module.d.ts +2 -2
- package/lib/components/input-date-range-picker/input-date-range-picker.component.d.ts +20 -20
- package/lib/components/input-date-range-picker/input-date-range-picker.module.d.ts +2 -2
- package/lib/components/input-number-picker/input-number-picker.component.d.ts +73 -73
- package/lib/components/input-number-picker/input-number-picker.module.d.ts +2 -2
- package/lib/components/input-radio-button/input-radio-button.component.d.ts +19 -19
- package/lib/components/input-radio-button/input-radio-button.module.d.ts +2 -2
- package/lib/components/input-scanner/bar-code-scanner.d.ts +7 -7
- package/lib/components/input-scanner/input-scanner.component.d.ts +24 -24
- package/lib/components/input-scanner/input-scanner.module.d.ts +2 -2
- package/lib/components/input-scanner/scanner.service.d.ts +11 -11
- package/lib/components/input-search/input-search.component.d.ts +20 -19
- package/lib/components/input-search/input-search.module.d.ts +2 -2
- package/lib/components/input-text/input-text.component.d.ts +66 -65
- package/lib/components/input-text/input-text.module.d.ts +2 -2
- package/lib/components/input-textarea/input-textarea.component.d.ts +19 -19
- package/lib/components/input-textarea/input-textarea.module.d.ts +2 -2
- package/lib/components/level-indicator/level-indicator-level.enum.d.ts +5 -5
- package/lib/components/level-indicator/level-indicator.component.d.ts +10 -10
- package/lib/components/level-indicator/level-indicator.module.d.ts +2 -2
- package/lib/components/list-of-values/list-of-values-multiselect-popup.component.d.ts +25 -25
- package/lib/components/list-of-values/list-of-values-popup.component.d.ts +47 -47
- package/lib/components/list-of-values/list-of-values.component.d.ts +37 -37
- package/lib/components/list-of-values/list-of-values.module.d.ts +2 -2
- package/lib/components/loader/loader.component.d.ts +3 -3
- package/lib/components/loader/loader.module.d.ts +2 -2
- package/lib/components/pagination/paginate.pipe.d.ts +15 -15
- package/lib/components/pagination/pagination-instance.d.ts +14 -14
- package/lib/components/pagination/pagination.component.d.ts +38 -38
- package/lib/components/pagination/pagination.module.d.ts +2 -2
- package/lib/components/pagination/pagination.service.d.ts +24 -24
- package/lib/components/pagination-bar/pagination-bar.component.d.ts +33 -33
- package/lib/components/pagination-bar/pagination-bar.module.d.ts +2 -2
- package/lib/components/popup/const/popup-window-token.d.ts +3 -3
- package/lib/components/popup/interface/popup-button.d.ts +8 -8
- package/lib/components/popup/interface/popup-close-event.d.ts +5 -5
- package/lib/components/popup/interface/popup-settings.d.ts +21 -21
- package/lib/components/popup/interface/popup.d.ts +9 -9
- package/lib/components/popup/model/popup-button-globals.d.ts +9 -9
- package/lib/components/popup/model/popup-window.d.ts +21 -21
- package/lib/components/popup/popup-buttons.component.d.ts +13 -13
- package/lib/components/popup/popup-message-display.component.d.ts +12 -12
- package/lib/components/popup/popup-window-shell.component.d.ts +42 -42
- package/lib/components/popup/popup.module.d.ts +4 -4
- package/lib/components/popup/service/popup-shower.service.d.ts +17 -17
- package/lib/components/popup/service/prompt.service.d.ts +17 -17
- package/lib/components/popup/text-input-popup.component.d.ts +12 -12
- package/lib/components/responsive-text/responsive-text.component.d.ts +4 -4
- package/lib/components/responsive-text/responsive-text.module.d.ts +2 -2
- package/lib/components/simple-grid/base-simple-grid.component.d.ts +53 -52
- package/lib/components/simple-grid/simple-grid-cell.component.d.ts +30 -30
- package/lib/components/simple-grid/simple-grid-column.directive.d.ts +43 -42
- package/lib/components/simple-grid/simple-grid.component.d.ts +77 -64
- package/lib/components/simple-grid/simple-grid.module.d.ts +2 -2
- package/lib/components/simple-grid/style/_layout.scss +68 -0
- package/lib/components/tile/tile.component.d.ts +16 -16
- package/lib/components/tile/tile.module.d.ts +2 -2
- package/lib/components/tile-select/tile-select.component.d.ts +8 -8
- package/lib/components/tile-select/tile-select.module.d.ts +2 -2
- package/lib/components/tooltip/tooltip.component.d.ts +18 -18
- package/lib/components/tooltip/tooltip.module.d.ts +2 -2
- package/lib/components/validation-error/validation-error.component.d.ts +12 -12
- package/lib/components/validation-error/validation-error.module.d.ts +2 -2
- package/lib/components/view-mode-buttons/content-view-mode.enum.d.ts +8 -8
- package/lib/components/view-mode-buttons/view-mode-buttons.component.d.ts +17 -17
- package/lib/components/view-mode-buttons/view-mode-buttons.module.d.ts +2 -2
- package/lib/core/constant/default-upper-bound-for-range-components.d.ts +2 -2
- package/lib/core/constant/java-max-int.d.ts +1 -1
- package/lib/core/constant/number-inputs-key-down-white-list.d.ts +2 -2
- package/lib/core/decorator/input-boolean.decorator.d.ts +8 -8
- package/lib/core/enum/co-direction.d.ts +6 -6
- package/lib/core/enum/co-document-image-display-kind.enum.d.ts +5 -5
- package/lib/core/enum/co-document-type.enum.d.ts +5 -5
- package/lib/core/enum/co-orientation.d.ts +6 -6
- package/lib/core/enum/core-components-icon.enum.d.ts +298 -298
- package/lib/core/enum/file-type-internal.enum.d.ts +15 -15
- package/lib/core/enum/file-type.enum.d.ts +5 -5
- package/lib/core/enum/filterItem-mode.enum.d.ts +15 -15
- package/lib/core/enum/input-number-picker-show-mode.enum.d.ts +5 -5
- package/lib/core/enum/keyboard-code.enum.d.ts +71 -71
- package/lib/core/enum/keyboard-key.enum.d.ts +70 -70
- package/lib/core/enum/object-right-type.enum.d.ts +5 -5
- package/lib/core/enum/popup-button-type.enum.d.ts +9 -9
- package/lib/core/enum/popup-type.enum.d.ts +9 -9
- package/lib/core/enum/table-name.enum.d.ts +79 -79
- package/lib/core/function/any-nill.function.d.ts +1 -1
- package/lib/core/function/is-nill.function.d.ts +1 -1
- package/lib/core/function/none-nill.function.d.ts +1 -1
- package/lib/core/function/not-nill.function.d.ts +1 -1
- package/lib/core/model/bounds-constrained-number-value.d.ts +46 -46
- package/lib/core/model/check-precision-and-scale-result.d.ts +4 -4
- package/lib/core/model/check-within-stepped-bounds-result.d.ts +8 -8
- package/lib/core/model/co-document-right.bo.d.ts +6 -6
- package/lib/core/model/co-document.bo.d.ts +61 -61
- package/lib/core/model/core-components-icon-svg.d.ts +4 -4
- package/lib/core/model/element-position.d.ts +7 -7
- package/lib/core/model/event/string-prompt-result-event.d.ts +6 -6
- package/lib/core/service/form-input-user-change-listener.service.d.ts +10 -10
- package/lib/core/service/form-master.service.d.ts +26 -26
- package/lib/core/service/ng-zone-wrapper.service.d.ts +6 -6
- package/lib/core/utils/array-utils.d.ts +85 -85
- package/lib/core/utils/browser-utils.d.ts +15 -15
- package/lib/core/utils/direction-enum-utils.d.ts +5 -5
- package/lib/core/utils/event-utils.d.ts +12 -12
- package/lib/core/utils/file-utils.d.ts +29 -29
- package/lib/core/utils/number-utils.d.ts +89 -89
- package/lib/core/utils/object-utils.d.ts +31 -31
- package/lib/core/utils/string-utils.d.ts +25 -25
- package/lib/core/validator/email.validator.d.ts +2 -2
- package/lib/core/validator/equal.validator.d.ts +2 -2
- package/lib/core/validator/max-string-length.validator.d.ts +2 -2
- package/lib/core/validator/password.validator.d.ts +3 -3
- package/lib/core/validator/precision-scale.validator.d.ts +2 -2
- package/lib/core/validator/required.validator.d.ts +2 -2
- package/lib/directives/clickoutside/click-outside-master.service.d.ts +15 -15
- package/lib/directives/clickoutside/click-outside.directive.d.ts +18 -18
- package/lib/directives/clickoutside/clickoutside.module.d.ts +2 -2
- package/lib/directives/observe-visibility/observe-visibility.directive.d.ts +14 -14
- package/lib/directives/observe-visibility/observe-visibility.module.d.ts +2 -2
- package/lib/directives/overlay/overlay-parent.directive.d.ts +6 -6
- package/lib/directives/overlay/overlay.directive.d.ts +25 -25
- package/lib/directives/overlay/overlay.module.d.ts +2 -2
- package/lib/directives/ripple/ripple-ref.d.ts +21 -21
- package/lib/directives/ripple/ripple-renderer.d.ts +56 -56
- package/lib/directives/ripple/ripple.directive.d.ts +56 -56
- package/lib/directives/ripple/ripple.module.d.ts +2 -2
- package/lib/directives/ripple/scroll-dispatcher.service.d.ts +51 -51
- package/lib/directives/ripple/scrollable.directive.d.ts +20 -20
- package/lib/directives/ripple/viewport-ruler.service.d.ts +29 -29
- package/lib/directives/screen-configuration/screen-configuration.directive.d.ts +32 -32
- package/lib/directives/screen-configuration/screen-configuration.module.d.ts +2 -2
- package/lib/directives/stopclick/stop-click.directive.d.ts +10 -10
- package/lib/directives/stopclick/stop-click.module.d.ts +2 -2
- package/lib/directives/template-wrapper/template-wrapper.directive.d.ts +13 -13
- package/lib/directives/template-wrapper/template-wrapper.module.d.ts +2 -2
- package/lib/directives/tooltip/tooltip-directive.module.d.ts +2 -2
- package/lib/directives/tooltip/tooltip.directive.d.ts +20 -20
- package/lib/interfaces/dialog-response.interface.d.ts +6 -6
- package/lib/interfaces/scanner-input.interface.d.ts +3 -3
- package/lib/interfaces/screen-config-adapter-component-interface-name.d.ts +3 -3
- package/lib/interfaces/screen-config-adapter.component.interface.d.ts +10 -10
- package/lib/model/enum/app-button-type.enum.d.ts +9 -9
- package/lib/model/enum/app-popup-type.enum.d.ts +6 -6
- package/lib/pipes/append.pipe.d.ts +4 -4
- package/lib/pipes/append.pipe.module.d.ts +2 -2
- package/lib/pipes/filter.pipe.d.ts +4 -4
- package/lib/pipes/filter.pipe.module.d.ts +2 -2
- package/lib/pipes/prepend.pipe.d.ts +4 -4
- package/lib/pipes/prepend.pipe.module.d.ts +2 -2
- package/lib/pipes/price-display-pipe.module.d.ts +2 -2
- package/lib/pipes/price-display.pipe.d.ts +4 -4
- package/lib/service/base-module-screen-config.service.d.ts +47 -47
- package/lib/service/base-module.service.d.ts +22 -22
- package/lib/service/color-sequence.service.d.ts +4 -4
- package/lib/service/overlay.service.d.ts +13 -13
- package/lib/translation/core-components-translation.module.d.ts +4 -4
- package/lib/translation/core-components-translation.service.d.ts +6 -6
- package/lib/translation/core-dictionary.service.d.ts +12 -12
- package/lib/translation/core-localize.pipe.d.ts +7 -7
- package/package.json +1 -1
- package/public-api.d.ts +126 -126
|
@@ -1,242 +1,242 @@
|
|
|
1
|
-
import { __decorate } from "tslib";
|
|
2
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ComponentFactoryResolver, ElementRef, EventEmitter, forwardRef, HostBinding, Inject, Input, NgZone, Optional, Output, ViewEncapsulation } from '@angular/core';
|
|
3
|
-
import { BaseInputComponent } from '../base/base-input.component';
|
|
4
|
-
import { InputBoolean } from '../../core/decorator/input-boolean.decorator';
|
|
5
|
-
import { BoundsConstrainedNumberValue } from '../../core/model/bounds-constrained-number-value';
|
|
6
|
-
import { NUMBER_INPUTS_KEY_DOWN_WHITE_LIST } from '../../core/constant/number-inputs-key-down-white-list';
|
|
7
|
-
import { FormInputUserModelChangeListenerService } from '../../core/service/form-input-user-change-listener.service';
|
|
8
|
-
import { InputNumberPickerButtonShowMode } from '../../core/enum/input-number-picker-show-mode.enum';
|
|
9
|
-
import { IconCacheService } from '../icon/icon-cache.service';
|
|
10
|
-
import { CoreComponentsIcon } from '../../core/enum/core-components-icon.enum';
|
|
11
|
-
import { SCREEN_CONFIG_ADAPTER_COMPONENT_INTERFACE_NAME } from '../../interfaces/screen-config-adapter-component-interface-name';
|
|
12
|
-
import { FormComponent } from '../form/form.component';
|
|
13
|
-
import { OverlayService } from '../../service/overlay.service';
|
|
14
|
-
import { NgZoneWrapperService } from '../../core/service/ng-zone-wrapper.service';
|
|
15
|
-
// A component that lets users pick a number by increasing and decreasing it with buttons, or by typing.
|
|
16
|
-
export class InputNumberPickerComponent extends BaseInputComponent {
|
|
17
|
-
constructor(formComponent, iconCacheService, overlayService, _ngZone, componentFactoryResolver, changeDetector, formUserChangeListener, ngZoneWrapper, elementRef) {
|
|
18
|
-
super(changeDetector, componentFactoryResolver, overlayService, formUserChangeListener, ngZoneWrapper, elementRef);
|
|
19
|
-
this.formComponent = formComponent;
|
|
20
|
-
this.iconCacheService = iconCacheService;
|
|
21
|
-
this.overlayService = overlayService;
|
|
22
|
-
this._ngZone = _ngZone;
|
|
23
|
-
this.componentFactoryResolver = componentFactoryResolver;
|
|
24
|
-
this.ngZoneWrapper = ngZoneWrapper;
|
|
25
|
-
this.elementRef = elementRef;
|
|
26
|
-
this.modelChangeOnEnter = true;
|
|
27
|
-
this.minusIcon = CoreComponentsIcon.MinusSimple;
|
|
28
|
-
this.plusIcon = CoreComponentsIcon.PlusSimple;
|
|
29
|
-
// Whether to show buttons 'always', 'onFocusOnly', or 'never'
|
|
30
|
-
this.buttonShowMode = InputNumberPickerButtonShowMode.Always;
|
|
31
|
-
// @override Default true for us.
|
|
32
|
-
this.noValidation = true;
|
|
33
|
-
// @override
|
|
34
|
-
this.modelChange = new EventEmitter();
|
|
35
|
-
this.iconClick = new EventEmitter();
|
|
36
|
-
this.myKeyDownWhiteList = NUMBER_INPUTS_KEY_DOWN_WHITE_LIST;
|
|
37
|
-
this.numberLogic = new BoundsConstrainedNumberValue();
|
|
38
|
-
this.minSelected = false;
|
|
39
|
-
this.plusSelected = false;
|
|
40
|
-
this._numberInputHasFocus = false;
|
|
41
|
-
this._changeFromButton = false;
|
|
42
|
-
this._delayBeforeStartAutoCountMs = 666;
|
|
43
|
-
// the 'speed gears' for auto counting
|
|
44
|
-
this._stepFactors = [1, 10, 20];
|
|
45
|
-
// increase step size timing
|
|
46
|
-
this._msChangeStepFactor = 1000;
|
|
47
|
-
// step speed
|
|
48
|
-
this._msDoStep = 5;
|
|
49
|
-
// hold the mouse down and this increases for a faster auto increment
|
|
50
|
-
this._stepFactor = this._stepFactors[0];
|
|
51
|
-
this._mayAutoCount = false;
|
|
52
|
-
this._numberLogicValueChangeSub = this.numberLogic.valueChange.subscribe((value) => {
|
|
53
|
-
if (!this._mayAutoCount) {
|
|
54
|
-
this.model = value;
|
|
55
|
-
if (!this.modelChangeOnEnter || this._changeFromButton) {
|
|
56
|
-
this.modelChange.emit(value);
|
|
57
|
-
}
|
|
58
|
-
// custom form user chagne listener .next because we don't user super.updateModel() which normally does that for us
|
|
59
|
-
if (this._markedAsUserTouched) {
|
|
60
|
-
this.formUserChangeListener.userModelChange.next(value);
|
|
61
|
-
this.userModelChange.next(value);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
// @override
|
|
67
|
-
set model(model) {
|
|
68
|
-
this.setValue(model, true);
|
|
69
|
-
super.model = model;
|
|
70
|
-
}
|
|
71
|
-
get model() {
|
|
72
|
-
return super.model;
|
|
73
|
-
}
|
|
74
|
-
set min(min) {
|
|
75
|
-
this.numberLogic.min = min;
|
|
76
|
-
}
|
|
77
|
-
set step(step) {
|
|
78
|
-
this.numberLogic.step = step;
|
|
79
|
-
}
|
|
80
|
-
set max(max) {
|
|
81
|
-
this.numberLogic.max = max;
|
|
82
|
-
}
|
|
83
|
-
set decimals(decimals) {
|
|
84
|
-
this.numberLogic.decimals = decimals;
|
|
85
|
-
}
|
|
86
|
-
get showButtonsOnFocusOnly() {
|
|
87
|
-
return this.buttonShowMode === InputNumberPickerButtonShowMode.OnFocusOnly;
|
|
88
|
-
}
|
|
89
|
-
get hasLabel() {
|
|
90
|
-
return !!this.label;
|
|
91
|
-
}
|
|
92
|
-
showClass() {
|
|
93
|
-
return true;
|
|
94
|
-
}
|
|
95
|
-
ngOnInit() {
|
|
96
|
-
// this.numberLogic.setValue(this.model, true);
|
|
97
|
-
// this.numberLogic.init(true);
|
|
98
|
-
this._updateButtonsShowState();
|
|
99
|
-
}
|
|
100
|
-
ngOnDestroy() {
|
|
101
|
-
this._numberLogicValueChangeSub.unsubscribe();
|
|
102
|
-
clearTimeout(this._autoCountTimeout);
|
|
103
|
-
clearTimeout(this._stepIncrementTimeout);
|
|
104
|
-
clearTimeout(this._startAutocountTimeout);
|
|
105
|
-
}
|
|
106
|
-
// Note: recursive through setTimeout().
|
|
107
|
-
doIncrementAuto() {
|
|
108
|
-
this._mayAutoCount = true;
|
|
109
|
-
this.increment(this._stepFactor);
|
|
110
|
-
this._ngZone.runOutsideAngular(() => {
|
|
111
|
-
this._autoCountTimeout = window.setTimeout(() => {
|
|
112
|
-
if (this._mayAutoCount) {
|
|
113
|
-
this.doIncrementAuto();
|
|
114
|
-
this.changeDetector.detectChanges();
|
|
115
|
-
}
|
|
116
|
-
}, this._msDoStep);
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
handleInputKeyDown(event) {
|
|
120
|
-
// event.preventDefault();
|
|
121
|
-
if (event.code === 'Enter' || event.code === 'NumpadEnter') {
|
|
122
|
-
this.modelChange.next(this.model);
|
|
123
|
-
return false;
|
|
124
|
-
}
|
|
125
|
-
if (this.myKeyDownWhiteList.find((k) => k === event.keyCode) === undefined) {
|
|
126
|
-
return false;
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
handleBlur() {
|
|
130
|
-
this.modelChange.next(this.model);
|
|
131
|
-
}
|
|
132
|
-
handleChangeModel(value) {
|
|
133
|
-
this._changeFromButton = false;
|
|
134
|
-
this.numberLogic.setValue(value);
|
|
135
|
-
}
|
|
136
|
-
// Note: recursive through setTimeout().
|
|
137
|
-
doDecrementAuto() {
|
|
138
|
-
this._mayAutoCount = true;
|
|
139
|
-
this.decrement(this._stepFactor);
|
|
140
|
-
this._ngZone.runOutsideAngular(() => {
|
|
141
|
-
this._autoCountTimeout = window.setTimeout(() => {
|
|
142
|
-
if (this._mayAutoCount) {
|
|
143
|
-
this.doDecrementAuto();
|
|
144
|
-
this.changeDetector.detectChanges();
|
|
145
|
-
}
|
|
146
|
-
}, this._msDoStep);
|
|
147
|
-
});
|
|
148
|
-
}
|
|
149
|
-
stopAutoCounting() {
|
|
150
|
-
this.minSelected = false;
|
|
151
|
-
this.plusSelected = false;
|
|
152
|
-
this._mayAutoCount = false;
|
|
153
|
-
this._stepFactor = this._stepFactors[0];
|
|
154
|
-
}
|
|
155
|
-
// Sets the current number value with given newValue, optionally silent (no valueChange event fired).
|
|
156
|
-
setValue(newValue, silent = false) {
|
|
157
|
-
this.numberLogic.setValue(newValue, silent);
|
|
158
|
-
}
|
|
159
|
-
increment(steps = 1) {
|
|
160
|
-
this._changeFromButton = true;
|
|
161
|
-
this.numberLogic.increment(steps);
|
|
162
|
-
}
|
|
163
|
-
decrement(steps = 1) {
|
|
164
|
-
this._changeFromButton = true;
|
|
165
|
-
this.numberLogic.decrement(steps);
|
|
166
|
-
}
|
|
167
|
-
onPlusMouseDown(event) {
|
|
168
|
-
if (this.readonly) {
|
|
169
|
-
event.preventDefault();
|
|
170
|
-
return;
|
|
171
|
-
}
|
|
172
|
-
this.plusSelected = true;
|
|
173
|
-
this._markedAsUserTouched = true;
|
|
174
|
-
// keeps focus on input text instead of button
|
|
175
|
-
event.preventDefault();
|
|
176
|
-
this.increment();
|
|
177
|
-
this._mayAutoCount = true;
|
|
178
|
-
clearTimeout(this._startAutocountTimeout);
|
|
179
|
-
this._startAutocountTimeout = window.setTimeout(() => {
|
|
180
|
-
if (this._mayAutoCount) {
|
|
181
|
-
this.doIncrementAuto();
|
|
182
|
-
this._doIncreaseStepFactor();
|
|
183
|
-
}
|
|
184
|
-
}, this._delayBeforeStartAutoCountMs);
|
|
185
|
-
}
|
|
186
|
-
onMinusMouseDown(event) {
|
|
187
|
-
if (this.readonly) {
|
|
188
|
-
event.preventDefault();
|
|
189
|
-
return;
|
|
190
|
-
}
|
|
191
|
-
this.minSelected = true;
|
|
192
|
-
this._markedAsUserTouched = true;
|
|
193
|
-
// keeps focus on input text instead of button
|
|
194
|
-
event.preventDefault();
|
|
195
|
-
this.decrement();
|
|
196
|
-
this._mayAutoCount = true;
|
|
197
|
-
clearTimeout(this._startAutocountTimeout);
|
|
198
|
-
this._startAutocountTimeout = window.setTimeout(() => {
|
|
199
|
-
if (this._mayAutoCount) {
|
|
200
|
-
this.doDecrementAuto();
|
|
201
|
-
this._doIncreaseStepFactor();
|
|
202
|
-
}
|
|
203
|
-
}, this._delayBeforeStartAutoCountMs);
|
|
204
|
-
}
|
|
205
|
-
// Note: recursive.
|
|
206
|
-
_doIncreaseStepFactor() {
|
|
207
|
-
this._stepIncrementTimeout = window.setTimeout(() => {
|
|
208
|
-
if (this._mayAutoCount) {
|
|
209
|
-
this._stepFactor = this._getNextStepFactorMouseDown();
|
|
210
|
-
this._doIncreaseStepFactor();
|
|
211
|
-
}
|
|
212
|
-
}, this._msChangeStepFactor);
|
|
213
|
-
}
|
|
214
|
-
_getNextStepFactorMouseDown() {
|
|
215
|
-
const curIdx = this._stepFactors.indexOf(this._stepFactor);
|
|
216
|
-
if (curIdx < this._stepFactors.length - 1) {
|
|
217
|
-
return this._stepFactors[curIdx + 1];
|
|
218
|
-
}
|
|
219
|
-
return this._stepFactor;
|
|
220
|
-
}
|
|
221
|
-
// Show or hide + and - buttons. Might hide buttons if number input lost focus and button show mode is on focus only.
|
|
222
|
-
_updateButtonsShowState() {
|
|
223
|
-
switch (this.buttonShowMode) {
|
|
224
|
-
case InputNumberPickerButtonShowMode.Always:
|
|
225
|
-
default:
|
|
226
|
-
this.showButtons = true;
|
|
227
|
-
break;
|
|
228
|
-
case InputNumberPickerButtonShowMode.OnFocusOnly:
|
|
229
|
-
this.showButtons = this._numberInputHasFocus;
|
|
230
|
-
break;
|
|
231
|
-
case InputNumberPickerButtonShowMode.Never:
|
|
232
|
-
this.showButtons = false;
|
|
233
|
-
break;
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
InputNumberPickerComponent.decorators = [
|
|
238
|
-
{ type: Component, args: [{
|
|
239
|
-
selector: 'co-input-number-picker',
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ComponentFactoryResolver, ElementRef, EventEmitter, forwardRef, HostBinding, Inject, Input, NgZone, Optional, Output, ViewEncapsulation } from '@angular/core';
|
|
3
|
+
import { BaseInputComponent } from '../base/base-input.component';
|
|
4
|
+
import { InputBoolean } from '../../core/decorator/input-boolean.decorator';
|
|
5
|
+
import { BoundsConstrainedNumberValue } from '../../core/model/bounds-constrained-number-value';
|
|
6
|
+
import { NUMBER_INPUTS_KEY_DOWN_WHITE_LIST } from '../../core/constant/number-inputs-key-down-white-list';
|
|
7
|
+
import { FormInputUserModelChangeListenerService } from '../../core/service/form-input-user-change-listener.service';
|
|
8
|
+
import { InputNumberPickerButtonShowMode } from '../../core/enum/input-number-picker-show-mode.enum';
|
|
9
|
+
import { IconCacheService } from '../icon/icon-cache.service';
|
|
10
|
+
import { CoreComponentsIcon } from '../../core/enum/core-components-icon.enum';
|
|
11
|
+
import { SCREEN_CONFIG_ADAPTER_COMPONENT_INTERFACE_NAME } from '../../interfaces/screen-config-adapter-component-interface-name';
|
|
12
|
+
import { FormComponent } from '../form/form.component';
|
|
13
|
+
import { OverlayService } from '../../service/overlay.service';
|
|
14
|
+
import { NgZoneWrapperService } from '../../core/service/ng-zone-wrapper.service';
|
|
15
|
+
// A component that lets users pick a number by increasing and decreasing it with buttons, or by typing.
|
|
16
|
+
export class InputNumberPickerComponent extends BaseInputComponent {
|
|
17
|
+
constructor(formComponent, iconCacheService, overlayService, _ngZone, componentFactoryResolver, changeDetector, formUserChangeListener, ngZoneWrapper, elementRef) {
|
|
18
|
+
super(changeDetector, componentFactoryResolver, overlayService, formUserChangeListener, ngZoneWrapper, elementRef);
|
|
19
|
+
this.formComponent = formComponent;
|
|
20
|
+
this.iconCacheService = iconCacheService;
|
|
21
|
+
this.overlayService = overlayService;
|
|
22
|
+
this._ngZone = _ngZone;
|
|
23
|
+
this.componentFactoryResolver = componentFactoryResolver;
|
|
24
|
+
this.ngZoneWrapper = ngZoneWrapper;
|
|
25
|
+
this.elementRef = elementRef;
|
|
26
|
+
this.modelChangeOnEnter = true;
|
|
27
|
+
this.minusIcon = CoreComponentsIcon.MinusSimple;
|
|
28
|
+
this.plusIcon = CoreComponentsIcon.PlusSimple;
|
|
29
|
+
// Whether to show buttons 'always', 'onFocusOnly', or 'never'
|
|
30
|
+
this.buttonShowMode = InputNumberPickerButtonShowMode.Always;
|
|
31
|
+
// @override Default true for us.
|
|
32
|
+
this.noValidation = true;
|
|
33
|
+
// @override
|
|
34
|
+
this.modelChange = new EventEmitter();
|
|
35
|
+
this.iconClick = new EventEmitter();
|
|
36
|
+
this.myKeyDownWhiteList = NUMBER_INPUTS_KEY_DOWN_WHITE_LIST;
|
|
37
|
+
this.numberLogic = new BoundsConstrainedNumberValue();
|
|
38
|
+
this.minSelected = false;
|
|
39
|
+
this.plusSelected = false;
|
|
40
|
+
this._numberInputHasFocus = false;
|
|
41
|
+
this._changeFromButton = false;
|
|
42
|
+
this._delayBeforeStartAutoCountMs = 666;
|
|
43
|
+
// the 'speed gears' for auto counting
|
|
44
|
+
this._stepFactors = [1, 10, 20];
|
|
45
|
+
// increase step size timing
|
|
46
|
+
this._msChangeStepFactor = 1000;
|
|
47
|
+
// step speed
|
|
48
|
+
this._msDoStep = 5;
|
|
49
|
+
// hold the mouse down and this increases for a faster auto increment
|
|
50
|
+
this._stepFactor = this._stepFactors[0];
|
|
51
|
+
this._mayAutoCount = false;
|
|
52
|
+
this._numberLogicValueChangeSub = this.numberLogic.valueChange.subscribe((value) => {
|
|
53
|
+
if (!this._mayAutoCount) {
|
|
54
|
+
this.model = value;
|
|
55
|
+
if (!this.modelChangeOnEnter || this._changeFromButton) {
|
|
56
|
+
this.modelChange.emit(value);
|
|
57
|
+
}
|
|
58
|
+
// custom form user chagne listener .next because we don't user super.updateModel() which normally does that for us
|
|
59
|
+
if (this._markedAsUserTouched) {
|
|
60
|
+
this.formUserChangeListener.userModelChange.next(value);
|
|
61
|
+
this.userModelChange.next(value);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
// @override
|
|
67
|
+
set model(model) {
|
|
68
|
+
this.setValue(model, true);
|
|
69
|
+
super.model = model;
|
|
70
|
+
}
|
|
71
|
+
get model() {
|
|
72
|
+
return super.model;
|
|
73
|
+
}
|
|
74
|
+
set min(min) {
|
|
75
|
+
this.numberLogic.min = min;
|
|
76
|
+
}
|
|
77
|
+
set step(step) {
|
|
78
|
+
this.numberLogic.step = step;
|
|
79
|
+
}
|
|
80
|
+
set max(max) {
|
|
81
|
+
this.numberLogic.max = max;
|
|
82
|
+
}
|
|
83
|
+
set decimals(decimals) {
|
|
84
|
+
this.numberLogic.decimals = decimals;
|
|
85
|
+
}
|
|
86
|
+
get showButtonsOnFocusOnly() {
|
|
87
|
+
return this.buttonShowMode === InputNumberPickerButtonShowMode.OnFocusOnly;
|
|
88
|
+
}
|
|
89
|
+
get hasLabel() {
|
|
90
|
+
return !!this.label;
|
|
91
|
+
}
|
|
92
|
+
showClass() {
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
ngOnInit() {
|
|
96
|
+
// this.numberLogic.setValue(this.model, true);
|
|
97
|
+
// this.numberLogic.init(true);
|
|
98
|
+
this._updateButtonsShowState();
|
|
99
|
+
}
|
|
100
|
+
ngOnDestroy() {
|
|
101
|
+
this._numberLogicValueChangeSub.unsubscribe();
|
|
102
|
+
clearTimeout(this._autoCountTimeout);
|
|
103
|
+
clearTimeout(this._stepIncrementTimeout);
|
|
104
|
+
clearTimeout(this._startAutocountTimeout);
|
|
105
|
+
}
|
|
106
|
+
// Note: recursive through setTimeout().
|
|
107
|
+
doIncrementAuto() {
|
|
108
|
+
this._mayAutoCount = true;
|
|
109
|
+
this.increment(this._stepFactor);
|
|
110
|
+
this._ngZone.runOutsideAngular(() => {
|
|
111
|
+
this._autoCountTimeout = window.setTimeout(() => {
|
|
112
|
+
if (this._mayAutoCount) {
|
|
113
|
+
this.doIncrementAuto();
|
|
114
|
+
this.changeDetector.detectChanges();
|
|
115
|
+
}
|
|
116
|
+
}, this._msDoStep);
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
handleInputKeyDown(event) {
|
|
120
|
+
// event.preventDefault();
|
|
121
|
+
if (event.code === 'Enter' || event.code === 'NumpadEnter') {
|
|
122
|
+
this.modelChange.next(this.model);
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
if (this.myKeyDownWhiteList.find((k) => k === event.keyCode) === undefined) {
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
handleBlur() {
|
|
130
|
+
this.modelChange.next(this.model);
|
|
131
|
+
}
|
|
132
|
+
handleChangeModel(value) {
|
|
133
|
+
this._changeFromButton = false;
|
|
134
|
+
this.numberLogic.setValue(value);
|
|
135
|
+
}
|
|
136
|
+
// Note: recursive through setTimeout().
|
|
137
|
+
doDecrementAuto() {
|
|
138
|
+
this._mayAutoCount = true;
|
|
139
|
+
this.decrement(this._stepFactor);
|
|
140
|
+
this._ngZone.runOutsideAngular(() => {
|
|
141
|
+
this._autoCountTimeout = window.setTimeout(() => {
|
|
142
|
+
if (this._mayAutoCount) {
|
|
143
|
+
this.doDecrementAuto();
|
|
144
|
+
this.changeDetector.detectChanges();
|
|
145
|
+
}
|
|
146
|
+
}, this._msDoStep);
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
stopAutoCounting() {
|
|
150
|
+
this.minSelected = false;
|
|
151
|
+
this.plusSelected = false;
|
|
152
|
+
this._mayAutoCount = false;
|
|
153
|
+
this._stepFactor = this._stepFactors[0];
|
|
154
|
+
}
|
|
155
|
+
// Sets the current number value with given newValue, optionally silent (no valueChange event fired).
|
|
156
|
+
setValue(newValue, silent = false) {
|
|
157
|
+
this.numberLogic.setValue(newValue, silent);
|
|
158
|
+
}
|
|
159
|
+
increment(steps = 1) {
|
|
160
|
+
this._changeFromButton = true;
|
|
161
|
+
this.numberLogic.increment(steps);
|
|
162
|
+
}
|
|
163
|
+
decrement(steps = 1) {
|
|
164
|
+
this._changeFromButton = true;
|
|
165
|
+
this.numberLogic.decrement(steps);
|
|
166
|
+
}
|
|
167
|
+
onPlusMouseDown(event) {
|
|
168
|
+
if (this.readonly) {
|
|
169
|
+
event.preventDefault();
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
this.plusSelected = true;
|
|
173
|
+
this._markedAsUserTouched = true;
|
|
174
|
+
// keeps focus on input text instead of button
|
|
175
|
+
event.preventDefault();
|
|
176
|
+
this.increment();
|
|
177
|
+
this._mayAutoCount = true;
|
|
178
|
+
clearTimeout(this._startAutocountTimeout);
|
|
179
|
+
this._startAutocountTimeout = window.setTimeout(() => {
|
|
180
|
+
if (this._mayAutoCount) {
|
|
181
|
+
this.doIncrementAuto();
|
|
182
|
+
this._doIncreaseStepFactor();
|
|
183
|
+
}
|
|
184
|
+
}, this._delayBeforeStartAutoCountMs);
|
|
185
|
+
}
|
|
186
|
+
onMinusMouseDown(event) {
|
|
187
|
+
if (this.readonly) {
|
|
188
|
+
event.preventDefault();
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
this.minSelected = true;
|
|
192
|
+
this._markedAsUserTouched = true;
|
|
193
|
+
// keeps focus on input text instead of button
|
|
194
|
+
event.preventDefault();
|
|
195
|
+
this.decrement();
|
|
196
|
+
this._mayAutoCount = true;
|
|
197
|
+
clearTimeout(this._startAutocountTimeout);
|
|
198
|
+
this._startAutocountTimeout = window.setTimeout(() => {
|
|
199
|
+
if (this._mayAutoCount) {
|
|
200
|
+
this.doDecrementAuto();
|
|
201
|
+
this._doIncreaseStepFactor();
|
|
202
|
+
}
|
|
203
|
+
}, this._delayBeforeStartAutoCountMs);
|
|
204
|
+
}
|
|
205
|
+
// Note: recursive.
|
|
206
|
+
_doIncreaseStepFactor() {
|
|
207
|
+
this._stepIncrementTimeout = window.setTimeout(() => {
|
|
208
|
+
if (this._mayAutoCount) {
|
|
209
|
+
this._stepFactor = this._getNextStepFactorMouseDown();
|
|
210
|
+
this._doIncreaseStepFactor();
|
|
211
|
+
}
|
|
212
|
+
}, this._msChangeStepFactor);
|
|
213
|
+
}
|
|
214
|
+
_getNextStepFactorMouseDown() {
|
|
215
|
+
const curIdx = this._stepFactors.indexOf(this._stepFactor);
|
|
216
|
+
if (curIdx < this._stepFactors.length - 1) {
|
|
217
|
+
return this._stepFactors[curIdx + 1];
|
|
218
|
+
}
|
|
219
|
+
return this._stepFactor;
|
|
220
|
+
}
|
|
221
|
+
// Show or hide + and - buttons. Might hide buttons if number input lost focus and button show mode is on focus only.
|
|
222
|
+
_updateButtonsShowState() {
|
|
223
|
+
switch (this.buttonShowMode) {
|
|
224
|
+
case InputNumberPickerButtonShowMode.Always:
|
|
225
|
+
default:
|
|
226
|
+
this.showButtons = true;
|
|
227
|
+
break;
|
|
228
|
+
case InputNumberPickerButtonShowMode.OnFocusOnly:
|
|
229
|
+
this.showButtons = this._numberInputHasFocus;
|
|
230
|
+
break;
|
|
231
|
+
case InputNumberPickerButtonShowMode.Never:
|
|
232
|
+
this.showButtons = false;
|
|
233
|
+
break;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
InputNumberPickerComponent.decorators = [
|
|
238
|
+
{ type: Component, args: [{
|
|
239
|
+
selector: 'co-input-number-picker',
|
|
240
240
|
template: `
|
|
241
241
|
<div class="icon-wrapper" *ngIf="leftIconData">
|
|
242
242
|
<co-icon class="input-number-picker-icon" [iconData]="leftIconData" (click)="iconClick.emit($event)"></co-icon>
|
|
@@ -265,50 +265,50 @@ InputNumberPickerComponent.decorators = [
|
|
|
265
265
|
(mousedown)="onPlusMouseDown($event)"
|
|
266
266
|
(mouseup)="stopAutoCounting()" (mouseleave)="stopAutoCounting()"></co-button>
|
|
267
267
|
</div>
|
|
268
|
-
`,
|
|
269
|
-
providers: [
|
|
270
|
-
OverlayService, {
|
|
271
|
-
provide: SCREEN_CONFIG_ADAPTER_COMPONENT_INTERFACE_NAME, useExisting: forwardRef(() => InputNumberPickerComponent)
|
|
272
|
-
}, {
|
|
273
|
-
provide: BaseInputComponent,
|
|
274
|
-
useExisting: InputNumberPickerComponent
|
|
275
|
-
}
|
|
276
|
-
],
|
|
277
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
278
|
-
encapsulation: ViewEncapsulation.None
|
|
279
|
-
},] }
|
|
280
|
-
];
|
|
281
|
-
InputNumberPickerComponent.ctorParameters = () => [
|
|
282
|
-
{ type: FormComponent, decorators: [{ type: Optional }] },
|
|
283
|
-
{ type: IconCacheService, decorators: [{ type: Inject, args: [IconCacheService,] }] },
|
|
284
|
-
{ type: OverlayService },
|
|
285
|
-
{ type: NgZone },
|
|
286
|
-
{ type: ComponentFactoryResolver },
|
|
287
|
-
{ type: ChangeDetectorRef },
|
|
288
|
-
{ type: FormInputUserModelChangeListenerService },
|
|
289
|
-
{ type: NgZoneWrapperService },
|
|
290
|
-
{ type: ElementRef }
|
|
291
|
-
];
|
|
292
|
-
InputNumberPickerComponent.propDecorators = {
|
|
293
|
-
model: [{ type: Input }],
|
|
294
|
-
modelChangeOnEnter: [{ type: Input }],
|
|
295
|
-
leftIconData: [{ type: HostBinding, args: ['class.has-icon',] }, { type: Input }],
|
|
296
|
-
min: [{ type: Input }],
|
|
297
|
-
step: [{ type: Input }],
|
|
298
|
-
max: [{ type: Input }],
|
|
299
|
-
ngModelOptions: [{ type: Input }],
|
|
300
|
-
minusIcon: [{ type: Input }],
|
|
301
|
-
plusIcon: [{ type: Input }],
|
|
302
|
-
buttonShowMode: [{ type: Input }],
|
|
303
|
-
noValidation: [{ type: Input }],
|
|
304
|
-
decimals: [{ type: Input }],
|
|
305
|
-
modelChange: [{ type: Output }],
|
|
306
|
-
iconClick: [{ type: Output }],
|
|
307
|
-
showButtonsOnFocusOnly: [{ type: HostBinding, args: ['class.show-buttons-on-focus-only',] }],
|
|
308
|
-
hasLabel: [{ type: HostBinding, args: ['class.has-label',] }],
|
|
309
|
-
showClass: [{ type: HostBinding, args: ['class.co-input-number-picker',] }]
|
|
310
|
-
};
|
|
311
|
-
__decorate([
|
|
312
|
-
InputBoolean()
|
|
313
|
-
], InputNumberPickerComponent.prototype, "noValidation", void 0);
|
|
268
|
+
`,
|
|
269
|
+
providers: [
|
|
270
|
+
OverlayService, {
|
|
271
|
+
provide: SCREEN_CONFIG_ADAPTER_COMPONENT_INTERFACE_NAME, useExisting: forwardRef(() => InputNumberPickerComponent)
|
|
272
|
+
}, {
|
|
273
|
+
provide: BaseInputComponent,
|
|
274
|
+
useExisting: InputNumberPickerComponent
|
|
275
|
+
}
|
|
276
|
+
],
|
|
277
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
278
|
+
encapsulation: ViewEncapsulation.None
|
|
279
|
+
},] }
|
|
280
|
+
];
|
|
281
|
+
InputNumberPickerComponent.ctorParameters = () => [
|
|
282
|
+
{ type: FormComponent, decorators: [{ type: Optional }] },
|
|
283
|
+
{ type: IconCacheService, decorators: [{ type: Inject, args: [IconCacheService,] }] },
|
|
284
|
+
{ type: OverlayService },
|
|
285
|
+
{ type: NgZone },
|
|
286
|
+
{ type: ComponentFactoryResolver },
|
|
287
|
+
{ type: ChangeDetectorRef },
|
|
288
|
+
{ type: FormInputUserModelChangeListenerService },
|
|
289
|
+
{ type: NgZoneWrapperService },
|
|
290
|
+
{ type: ElementRef }
|
|
291
|
+
];
|
|
292
|
+
InputNumberPickerComponent.propDecorators = {
|
|
293
|
+
model: [{ type: Input }],
|
|
294
|
+
modelChangeOnEnter: [{ type: Input }],
|
|
295
|
+
leftIconData: [{ type: HostBinding, args: ['class.has-icon',] }, { type: Input }],
|
|
296
|
+
min: [{ type: Input }],
|
|
297
|
+
step: [{ type: Input }],
|
|
298
|
+
max: [{ type: Input }],
|
|
299
|
+
ngModelOptions: [{ type: Input }],
|
|
300
|
+
minusIcon: [{ type: Input }],
|
|
301
|
+
plusIcon: [{ type: Input }],
|
|
302
|
+
buttonShowMode: [{ type: Input }],
|
|
303
|
+
noValidation: [{ type: Input }],
|
|
304
|
+
decimals: [{ type: Input }],
|
|
305
|
+
modelChange: [{ type: Output }],
|
|
306
|
+
iconClick: [{ type: Output }],
|
|
307
|
+
showButtonsOnFocusOnly: [{ type: HostBinding, args: ['class.show-buttons-on-focus-only',] }],
|
|
308
|
+
hasLabel: [{ type: HostBinding, args: ['class.has-label',] }],
|
|
309
|
+
showClass: [{ type: HostBinding, args: ['class.co-input-number-picker',] }]
|
|
310
|
+
};
|
|
311
|
+
__decorate([
|
|
312
|
+
InputBoolean()
|
|
313
|
+
], InputNumberPickerComponent.prototype, "noValidation", void 0);
|
|
314
314
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtbnVtYmVyLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvaW5wdXQtbnVtYmVyLXBpY2tlci9pbnB1dC1udW1iZXItcGlja2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULHdCQUF3QixFQUFFLFVBQVUsRUFDcEMsWUFBWSxFQUNaLFVBQVUsRUFDVixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBR04sUUFBUSxFQUNSLE1BQU0sRUFFTixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDhDQUE4QyxDQUFDO0FBRTFFLE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLGtEQUFrRCxDQUFDO0FBQzlGLE9BQU8sRUFBQyxpQ0FBaUMsRUFBQyxNQUFNLHVEQUF1RCxDQUFDO0FBR3hHLE9BQU8sRUFBQyx1Q0FBdUMsRUFBQyxNQUFNLDREQUE0RCxDQUFDO0FBQ25ILE9BQU8sRUFBQywrQkFBK0IsRUFBQyxNQUFNLG9EQUFvRCxDQUFDO0FBQ25HLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBQzdFLE9BQU8sRUFBQyw4Q0FBOEMsRUFBQyxNQUFNLGlFQUFpRSxDQUFDO0FBQy9ILE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFFN0Qs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Q0FBa0M7dUJBSzlDLFdBQVcsU0FBQyxpQkFBaUI7d0JBSzdCLFdBQVcsU0FBQyw4QkFBOEI7O0FBeEIzQztJQURVLFlBQVksRUFBRTtnRUFDWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QmFzZUlucHV0Q29tcG9uZW50fSBmcm9tICcuLi9iYXNlL2Jhc2UtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7SW5wdXRCb29sZWFufSBmcm9tICcuLi8uLi9jb3JlL2RlY29yYXRvci9pbnB1dC1ib29sZWFuLmRlY29yYXRvcic7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0JvdW5kc0NvbnN0cmFpbmVkTnVtYmVyVmFsdWV9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWwvYm91bmRzLWNvbnN0cmFpbmVkLW51bWJlci12YWx1ZSc7XG5pbXBvcnQge05VTUJFUl9JTlBVVFNfS0VZX0RPV05fV0hJVEVfTElTVH0gZnJvbSAnLi4vLi4vY29yZS9jb25zdGFudC9udW1iZXItaW5wdXRzLWtleS1kb3duLXdoaXRlLWxpc3QnO1xuaW1wb3J0IHtLZXlib2FyZENvZGV9IGZyb20gJy4uLy4uL2NvcmUvZW51bS9rZXlib2FyZC1jb2RlLmVudW0nO1xuaW1wb3J0IHtJbnB1dFRleHRDb21wb25lbnR9IGZyb20gJy4uL2lucHV0LXRleHQvaW5wdXQtdGV4dC5jb21wb25lbnQnO1xuaW1wb3J0IHtGb3JtSW5wdXRVc2VyTW9kZWxDaGFuZ2VMaXN0ZW5lclNlcnZpY2V9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZS9mb3JtLWlucHV0LXVzZXItY2hhbmdlLWxpc3RlbmVyLnNlcnZpY2UnO1xuaW1wb3J0IHtJbnB1dE51bWJlclBpY2tlckJ1dHRvblNob3dNb2RlfSBmcm9tICcuLi8uLi9jb3JlL2VudW0vaW5wdXQtbnVtYmVyLXBpY2tlci1zaG93LW1vZGUuZW51bSc7XG5pbXBvcnQge0ljb25DYWNoZVNlcnZpY2V9IGZyb20gJy4uL2ljb24vaWNvbi1jYWNoZS5zZXJ2aWNlJztcbmltcG9ydCB7Q29yZUNvbXBvbmVudHNJY29ufSBmcm9tICcuLi8uLi9jb3JlL2VudW0vY29yZS1jb21wb25lbnRzLWljb24uZW51bSc7XG5pbXBvcnQge1NDUkVFTl9DT05GSUdfQURBUFRFUl9DT01QT05FTlRfSU5URVJGQUNFX05BTUV9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvc2NyZWVuLWNvbmZpZy1hZGFwdGVyLWNvbXBvbmVudC1pbnRlcmZhY2UtbmFtZSc7XG5pbXBvcnQge0Zvcm1Db21wb25lbnR9IGZyb20gJy4uL2Zvcm0vZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHtPdmVybGF5U2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZS9vdmVybGF5LnNlcnZpY2UnO1xuaW1wb3J0IHtTYWZlSHRtbH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQge05nWm9uZVdyYXBwZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2Uvbmctem9uZS13cmFwcGVyLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2NvLWlucHV0LW51bWJlci1waWNrZXInLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLXdyYXBwZXJcIiAqbmdJZj1cImxlZnRJY29uRGF0YVwiPlxuICAgICAgICAgICAgPGNvLWljb24gY2xhc3M9XCJpbnB1dC1udW1iZXItcGlja2VyLWljb25cIiBbaWNvbkRhdGFdPVwibGVmdEljb25EYXRhXCIgKGNsaWNrKT1cImljb25DbGljay5lbWl0KCRldmVudClcIj48L2NvLWljb24+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3BhY2VyXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uLXdyYXBwZXJcIj5cbiAgICAgICAgICAgIDxjby1idXR0b24gKm5nSWY9XCJzaG93QnV0dG9uc1wiIGNsYXNzPVwibWludXMtb3BlcmF0b3JcIiBbY2xhc3Muc2VsZWN0XT1cIm1pblNlbGVjdGVkXCIgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyZWFkb25seVwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtpY29uRGF0YV09XCJpY29uQ2FjaGVTZXJ2aWNlLmdldEljb24obWludXNJY29uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwib25NaW51c01vdXNlRG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNldXApPVwic3RvcEF1dG9Db3VudGluZygpXCIgKG1vdXNlbGVhdmUpPVwic3RvcEF1dG9Db3VudGluZygpXCI+PC9jby1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgW3RhYkluZGV4XT1cInJlYWRvbmx5ID8gLTEgOiAwXCJcbiAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm1vZGVsXCJcbiAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImhhbmRsZUNoYW5nZU1vZGVsKCRldmVudClcIlxuICAgICAgICAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlSW5wdXRLZXlEb3duKCRldmVudClcIlxuICAgICAgICAgICAgICAgKGJsdXIpPVwiaGFuZGxlQmx1cigpXCIvPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uLXdyYXBwZXJcIj5cbiAgICAgICAgICAgIDxjby1idXR0b24gKm5nSWY9XCJzaG93QnV0dG9uc1wiIGNsYXNzPVwicGx1cy1vcGVyYXRvclwiIFtjbGFzcy5zZWxlY3RdPVwicGx1c1NlbGVjdGVkXCIgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyZWFkb25seVwiXG4gICAgICAgICAgICAgICAgICAgICAgIFtpY29uRGF0YV09XCJpY29uQ2FjaGVTZXJ2aWNlLmdldEljb24ocGx1c0ljb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJvblBsdXNNb3VzZURvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgIChtb3VzZXVwKT1cInN0b3BBdXRvQ291bnRpbmcoKVwiIChtb3VzZWxlYXZlKT1cInN0b3BBdXRvQ291bnRpbmcoKVwiPjwvY28tYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICBgLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBPdmVybGF5U2VydmljZSwge1xuICAgICAgICAgICAgcHJvdmlkZTogU0NSRUVOX0NPTkZJR19BREFQVEVSX0NPTVBPTkVOVF9JTlRFUkZBQ0VfTkFNRSwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gSW5wdXROdW1iZXJQaWNrZXJDb21wb25lbnQpXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEJhc2VJbnB1dENvbXBvbmVudCxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBJbnB1dE51bWJlclBpY2tlckNvbXBvbmVudFxuICAgICAgICB9XSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbi8vIEEgY29tcG9uZW50IHRoYXQgbGV0cyB1c2VycyBwaWNrIGEgbnVtYmVyIGJ5IGluY3JlYXNpbmcgYW5kIGRlY3JlYXNpbmcgaXQgd2l0aCBidXR0b25zLCBvciBieSB0eXBpbmcuXG5leHBvcnQgY2xhc3MgSW5wdXROdW1iZXJQaWNrZXJDb21wb25lbnQgZXh0ZW5kcyBCYXNlSW5wdXRDb21wb25lbnQ8bnVtYmVyPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAgIC8vIEBvdmVycmlkZVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBtb2RlbChtb2RlbDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0VmFsdWUobW9kZWwsIHRydWUpO1xuICAgICAgICBzdXBlci5tb2RlbCA9IG1vZGVsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbW9kZWwoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLm1vZGVsO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG1vZGVsQ2hhbmdlT25FbnRlcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmhhcy1pY29uJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBsZWZ0SWNvbkRhdGE6IFNhZmVIdG1sIHwgdW5kZWZpbmVkO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IG1pbihtaW46IG51bWJlcikge1xuICAgICAgICB0aGlzLm51bWJlckxvZ2ljLm1pbiA9IG1pbjtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgc3RlcChzdGVwOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5udW1iZXJMb2dpYy5zdGVwID0gc3RlcDtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgbWF4KG1heDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMubnVtYmVyTG9naWMubWF4ID0gbWF4O1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG5nTW9kZWxPcHRpb25zOiBhbnk7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBtaW51c0ljb246IENvcmVDb21wb25lbnRzSWNvbiA9IENvcmVDb21wb25lbnRzSWNvbi5NaW51c1NpbXBsZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHBsdXNJY29uOiBDb3JlQ29tcG9uZW50c0ljb24gPSBDb3JlQ29tcG9uZW50c0ljb24uUGx1c1NpbXBsZTtcblxuICAgIC8vIFdoZXRoZXIgdG8gc2hvdyBidXR0b25zICdhbHdheXMnLCAnb25Gb2N1c09ubHknLCBvciAnbmV2ZXInXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYnV0dG9uU2hvd01vZGU6IElucHV0TnVtYmVyUGlja2VyQnV0dG9uU2hvd01vZGUgPSBJbnB1dE51bWJlclBpY2tlckJ1dHRvblNob3dNb2RlLkFsd2F5cztcblxuICAgIC8vIEBvdmVycmlkZSBEZWZhdWx0IHRydWUgZm9yIHVzLlxuICAgIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKVxuICAgIHB1YmxpYyBub1ZhbGlkYXRpb246IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGRlY2ltYWxzKGRlY2ltYWxzOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5udW1iZXJMb2dpYy5kZWNpbWFscyA9IGRlY2ltYWxzO1xuICAgIH1cblxuICAgIC8vIEBvdmVycmlkZVxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyByZWFkb25seSBtb2RlbENoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyByZWFkb25seSBpY29uQ2xpY2s6IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4oKTtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3Muc2hvdy1idXR0b25zLW9uLWZvY3VzLW9ubHknKVxuICAgIHB1YmxpYyBnZXQgc2hvd0J1dHRvbnNPbkZvY3VzT25seSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnV0dG9uU2hvd01vZGUgPT09IElucHV0TnVtYmVyUGlja2VyQnV0dG9uU2hvd01vZGUuT25Gb2N1c09ubHk7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5oYXMtbGFiZWwnKVxuICAgIHB1YmxpYyBnZXQgaGFzTGFiZWwoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMubGFiZWw7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5jby1pbnB1dC1udW1iZXItcGlja2VyJylcbiAgICBwdWJsaWMgc2hvd0NsYXNzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd0J1dHRvbnM6IGJvb2xlYW47XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgbXlLZXlEb3duV2hpdGVMaXN0OiBLZXlib2FyZENvZGVbXSA9IE5VTUJFUl9JTlBVVFNfS0VZX0RPV05fV0hJVEVfTElTVDtcblxuICAgIHB1YmxpYyByZWFkb25seSBudW1iZXJMb2dpYzogQm91bmRzQ29uc3RyYWluZWROdW1iZXJWYWx1ZSA9IG5ldyBCb3VuZHNDb25zdHJhaW5lZE51bWJlclZhbHVlKCk7XG5cbiAgICBwdWJsaWMgbWluU2VsZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgcGx1c1NlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF9udW1iZXJJbnB1dEhhc0ZvY3VzOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfY2hhbmdlRnJvbUJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfbnVtYmVyTG9naWNWYWx1ZUNoYW5nZVN1YjogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2RlbGF5QmVmb3JlU3RhcnRBdXRvQ291bnRNczogbnVtYmVyID0gNjY2O1xuICAgIC8vIHRoZSAnc3BlZWQgZ2VhcnMnIGZvciBhdXRvIGNvdW50aW5nXG4gICAgcHJpdmF0ZSByZWFkb25seSBfc3RlcEZhY3RvcnM6IG51bWJlcltdID0gWzEsIDEwLCAyMF07XG4gICAgLy8gaW5jcmVhc2Ugc3RlcCBzaXplIHRpbWluZ1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX21zQ2hhbmdlU3RlcEZhY3RvcjogbnVtYmVyID0gMTAwMDtcbiAgICAvLyBzdGVwIHNwZWVkXG4gICAgcHJpdmF0ZSByZWFkb25seSBfbXNEb1N0ZXA6IG51bWJlciA9IDU7XG4gICAgLy8gaG9sZCB0aGUgbW91c2UgZG93biBhbmQgdGhpcyBpbmNyZWFzZXMgZm9yIGEgZmFzdGVyIGF1dG8gaW5jcmVtZW50XG4gICAgcHJpdmF0ZSBfc3RlcEZhY3RvcjogbnVtYmVyID0gdGhpcy5fc3RlcEZhY3RvcnNbMF07XG4gICAgcHJpdmF0ZSBfbWF5QXV0b0NvdW50OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF9hdXRvQ291bnRUaW1lb3V0OiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfc3RlcEluY3JlbWVudFRpbWVvdXQ6IG51bWJlcjtcbiAgICBwcml2YXRlIF9zdGFydEF1dG9jb3VudFRpbWVvdXQ6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBAT3B0aW9uYWwoKSBwdWJsaWMgZm9ybUNvbXBvbmVudDogRm9ybUNvbXBvbmVudCxcbiAgICAgICAgQEluamVjdChJY29uQ2FjaGVTZXJ2aWNlKSBwdWJsaWMgaWNvbkNhY2hlU2VydmljZTogSWNvbkNhY2hlU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIG92ZXJsYXlTZXJ2aWNlOiBPdmVybGF5U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIHByb3RlY3RlZCBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICAgICAgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBmb3JtVXNlckNoYW5nZUxpc3RlbmVyOiBGb3JtSW5wdXRVc2VyTW9kZWxDaGFuZ2VMaXN0ZW5lclNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBuZ1pvbmVXcmFwcGVyPzogTmdab25lV3JhcHBlclNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBlbGVtZW50UmVmPzogRWxlbWVudFJlZixcbiAgICApIHtcbiAgICAgICAgc3VwZXIoY2hhbmdlRGV0ZWN0b3IsIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgb3ZlcmxheVNlcnZpY2UsIGZvcm1Vc2VyQ2hhbmdlTGlzdGVuZXIsIG5nWm9uZVdyYXBwZXIsIGVsZW1lbnRSZWYpO1xuXG4gICAgICAgIHRoaXMuX251bWJlckxvZ2ljVmFsdWVDaGFuZ2VTdWIgPSB0aGlzLm51bWJlckxvZ2ljLnZhbHVlQ2hhbmdlLnN1YnNjcmliZSgodmFsdWU6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9tYXlBdXRvQ291bnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1vZGVsQ2hhbmdlT25FbnRlciB8fCB0aGlzLl9jaGFuZ2VGcm9tQnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWxDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGN1c3RvbSBmb3JtIHVzZXIgY2hhZ25lIGxpc3RlbmVyIC5uZXh0IGJlY2F1c2Ugd2UgZG9uJ3QgdXNlciBzdXBlci51cGRhdGVNb2RlbCgpIHdoaWNoIG5vcm1hbGx5IGRvZXMgdGhhdCBmb3IgdXNcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbWFya2VkQXNVc2VyVG91Y2hlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Vc2VyQ2hhbmdlTGlzdGVuZXIudXNlck1vZGVsQ2hhbmdlLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXJNb2RlbENoYW5nZS5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICAvLyB0aGlzLm51bWJlckxvZ2ljLnNldFZhbHVlKHRoaXMubW9kZWwsIHRydWUpO1xuICAgICAgICAvLyB0aGlzLm51bWJlckxvZ2ljLmluaXQodHJ1ZSk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUJ1dHRvbnNTaG93U3RhdGUoKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbnVtYmVyTG9naWNWYWx1ZUNoYW5nZVN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fYXV0b0NvdW50VGltZW91dCk7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9zdGVwSW5jcmVtZW50VGltZW91dCk7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9zdGFydEF1dG9jb3VudFRpbWVvdXQpO1xuICAgIH1cblxuICAgIC8vIE5vdGU6IHJlY3Vyc2l2ZSB0aHJvdWdoIHNldFRpbWVvdXQoKS5cbiAgICBwdWJsaWMgZG9JbmNyZW1lbnRBdXRvKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9tYXlBdXRvQ291bnQgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuaW5jcmVtZW50KHRoaXMuX3N0ZXBGYWN0b3IpO1xuXG4gICAgICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9hdXRvQ291bnRUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9tYXlBdXRvQ291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kb0luY3JlbWVudEF1dG8oKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgdGhpcy5fbXNEb1N0ZXApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFuZGxlSW5wdXRLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIC8vIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmIChldmVudC5jb2RlID09PSAnRW50ZXInIHx8IGV2ZW50LmNvZGUgPT09ICdOdW1wYWRFbnRlcicpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWxDaGFuZ2UubmV4dCh0aGlzLm1vZGVsKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5teUtleURvd25XaGl0ZUxpc3QuZmluZCgoaykgPT4gayA9PT0gZXZlbnQua2V5Q29kZSkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZUJsdXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubW9kZWxDaGFuZ2UubmV4dCh0aGlzLm1vZGVsKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFuZGxlQ2hhbmdlTW9kZWwodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9jaGFuZ2VGcm9tQnV0dG9uID0gZmFsc2U7XG4gICAgICAgIHRoaXMubnVtYmVyTG9naWMuc2V0VmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIC8vIE5vdGU6IHJlY3Vyc2l2ZSB0aHJvdWdoIHNldFRpbWVvdXQoKS5cbiAgICBwdWJsaWMgZG9EZWNyZW1lbnRBdXRvKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9tYXlBdXRvQ291bnQgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuZGVjcmVtZW50KHRoaXMuX3N0ZXBGYWN0b3IpO1xuXG4gICAgICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9hdXRvQ291bnRUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9tYXlBdXRvQ291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kb0RlY3JlbWVudEF1dG8oKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgdGhpcy5fbXNEb1N0ZXApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RvcEF1dG9Db3VudGluZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5taW5TZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBsdXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9tYXlBdXRvQ291bnQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RlcEZhY3RvciA9IHRoaXMuX3N0ZXBGYWN0b3JzWzBdO1xuICAgIH1cblxuICAgIC8vIFNldHMgdGhlIGN1cnJlbnQgbnVtYmVyIHZhbHVlIHdpdGggZ2l2ZW4gbmV3VmFsdWUsIG9wdGlvbmFsbHkgc2lsZW50IChubyB2YWx1ZUNoYW5nZSBldmVudCBmaXJlZCkuXG4gICAgcHVibGljIHNldFZhbHVlKG5ld1ZhbHVlOiBudW1iZXIsIHNpbGVudDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIHRoaXMubnVtYmVyTG9naWMuc2V0VmFsdWUobmV3VmFsdWUsIHNpbGVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIGluY3JlbWVudChzdGVwczogbnVtYmVyID0gMSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jaGFuZ2VGcm9tQnV0dG9uID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5udW1iZXJMb2dpYy5pbmNyZW1lbnQoc3RlcHMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZWNyZW1lbnQoc3RlcHM6IG51bWJlciA9IDEpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2hhbmdlRnJvbUJ1dHRvbiA9IHRydWU7XG4gICAgICAgIHRoaXMubnVtYmVyTG9naWMuZGVjcmVtZW50KHN0ZXBzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25QbHVzTW91c2VEb3duKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5yZWFkb25seSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBsdXNTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX21hcmtlZEFzVXNlclRvdWNoZWQgPSB0cnVlO1xuXG4gICAgICAgIC8vIGtlZXBzIGZvY3VzIG9uIGlucHV0IHRleHQgaW5zdGVhZCBvZiBidXR0b25cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICB0aGlzLmluY3JlbWVudCgpO1xuICAgICAgICB0aGlzLl9tYXlBdXRvQ291bnQgPSB0cnVlO1xuXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9zdGFydEF1dG9jb3VudFRpbWVvdXQpO1xuICAgICAgICB0aGlzLl9zdGFydEF1dG9jb3VudFRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbWF5QXV0b0NvdW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kb0luY3JlbWVudEF1dG8oKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kb0luY3JlYXNlU3RlcEZhY3RvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCB0aGlzLl9kZWxheUJlZm9yZVN0YXJ0QXV0b0NvdW50TXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk1pbnVzTW91c2VEb3duKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5yZWFkb25seSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1pblNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fbWFya2VkQXNVc2VyVG91Y2hlZCA9IHRydWU7XG4gICAgICAgIC8vIGtlZXBzIGZvY3VzIG9uIGlucHV0IHRleHQgaW5zdGVhZCBvZiBidXR0b25cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICB0aGlzLmRlY3JlbWVudCgpO1xuICAgICAgICB0aGlzLl9tYXlBdXRvQ291bnQgPSB0cnVlO1xuXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9zdGFydEF1dG9jb3VudFRpbWVvdXQpO1xuICAgICAgICB0aGlzLl9zdGFydEF1dG9jb3VudFRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbWF5QXV0b0NvdW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kb0RlY3JlbWVudEF1dG8oKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kb0luY3JlYXNlU3RlcEZhY3RvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCB0aGlzLl9kZWxheUJlZm9yZVN0YXJ0QXV0b0NvdW50TXMpO1xuICAgIH1cblxuICAgIC8vIE5vdGU6IHJlY3Vyc2l2ZS5cbiAgICBwcml2YXRlIF9kb0luY3JlYXNlU3RlcEZhY3RvcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3RlcEluY3JlbWVudFRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbWF5QXV0b0NvdW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RlcEZhY3RvciA9IHRoaXMuX2dldE5leHRTdGVwRmFjdG9yTW91c2VEb3duKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZG9JbmNyZWFzZVN0ZXBGYWN0b3IoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcy5fbXNDaGFuZ2VTdGVwRmFjdG9yKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXROZXh0U3RlcEZhY3Rvck1vdXNlRG93bigpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBjdXJJZHg6IG51bWJlciA9IHRoaXMuX3N0ZXBGYWN0b3JzLmluZGV4T2YodGhpcy5fc3RlcEZhY3Rvcik7XG4gICAgICAgIGlmIChjdXJJZHggPCB0aGlzLl9zdGVwRmFjdG9ycy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RlcEZhY3RvcnNbY3VySWR4ICsgMV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0ZXBGYWN0b3I7XG4gICAgfVxuXG4gICAgLy8gU2hvdyBvciBoaWRlICsgYW5kIC0gYnV0dG9ucy4gTWlnaHQgaGlkZSBidXR0b25zIGlmIG51bWJlciBpbnB1dCBsb3N0IGZvY3VzIGFuZCBidXR0b24gc2hvdyBtb2RlIGlzIG9uIGZvY3VzIG9ubHkuXG4gICAgcHJpdmF0ZSBfdXBkYXRlQnV0dG9uc1Nob3dTdGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLmJ1dHRvblNob3dNb2RlKSB7XG4gICAgICAgICAgICBjYXNlIElucHV0TnVtYmVyUGlja2VyQnV0dG9uU2hvd01vZGUuQWx3YXlzOlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dCdXR0b25zID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgSW5wdXROdW1iZXJQaWNrZXJCdXR0b25TaG93TW9kZS5PbkZvY3VzT25seTpcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dCdXR0b25zID0gdGhpcy5fbnVtYmVySW5wdXRIYXNGb2N1cztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgSW5wdXROdW1iZXJQaWNrZXJCdXR0b25TaG93TW9kZS5OZXZlcjpcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dCdXR0b25zID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|