@leanix/components 0.4.20 → 0.4.22
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/{esm2020 → esm2022}/lib/core-ui/components/badge/badge.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/components/button/button.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/components/button-group/button-group.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/components/card/card.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/components/collapsible/collapsible.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/components/colored-label/colored-label.component.mjs +4 -4
- package/esm2022/lib/core-ui/components/ellipsis/ellipsis.component.mjs +139 -0
- package/{esm2020 → esm2022}/lib/core-ui/components/file-download-button/file-download-button.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/components/icon-scale/icon-scale.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/components/spinner/spinner.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/components/table/table-header/table-header.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/components/table/table.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/components/tiny-spinner/tiny-spinner.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/core-ui.module.mjs +72 -72
- package/{esm2020 → esm2022}/lib/core-ui/directives/after-view-init.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/directives/autoclose-group.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/directives/autoclose.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/directives/autofocus.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/directives/html.directive.mjs +4 -4
- package/esm2022/lib/core-ui/linkify/linkify.pipe.mjs +144 -0
- package/{esm2020 → esm2022}/lib/core-ui/linkify/unlinkify.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/pipes/br.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/pipes/contrast-color.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/pipes/custom-date.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/pipes/highlight-range.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/pipes/highlight-term.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/pipes/lx-is-uuid.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/pipes/lx-time-ago.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/pipes/lx-translate.pipe.mjs +5 -5
- package/{esm2020 → esm2022}/lib/core-ui/pipes/markdown.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/pipes/nbsp.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/pipes/sort.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/pipes/translation-after.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/pipes/translation-before.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/pipes/translation-between.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/pipes/unescape-curly-braces.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/services/resize-observer.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/core-ui/tooltip/tooltip.component.mjs +4 -4
- package/esm2022/lib/core-ui/tooltip/tooltip.directive.mjs +105 -0
- package/{esm2020 → esm2022}/lib/core-ui/tooltip/tooltip.module.mjs +5 -5
- package/esm2022/lib/forms-ui/components/basic-dropdown/basic-dropdown.component.mjs +120 -0
- package/{esm2020 → esm2022}/lib/forms-ui/components/basic-dropdown-item/basic-dropdown-item.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/components/breadcrumb/breadcrumb.component.mjs +4 -4
- package/esm2022/lib/forms-ui/components/cdk-options-dropdown/cdk-options-dropdown.component.mjs +216 -0
- package/{esm2020 → esm2022}/lib/forms-ui/components/cdk-options-sub-dropdown/cdk-options-sub-dropdown.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/components/copy-button/copy-button.component.mjs +4 -4
- package/esm2022/lib/forms-ui/components/currency/currency-input.component.mjs +145 -0
- package/{esm2020 → esm2022}/lib/forms-ui/components/currency/currency-symbol.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/components/date-input/date-input.component.mjs +7 -7
- package/{esm2020 → esm2022}/lib/forms-ui/components/date-picker-ui/datepicker-inner.component.mjs +6 -6
- package/esm2022/lib/forms-ui/components/date-picker-ui/datepicker-ui.module.mjs +27 -0
- package/esm2022/lib/forms-ui/components/date-picker-ui/datepicker.component.mjs +205 -0
- package/{esm2020 → esm2022}/lib/forms-ui/components/date-picker-ui/datepicker.config.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/components/date-picker-ui/daypicker.component.mjs +6 -6
- package/{esm2020 → esm2022}/lib/forms-ui/components/date-picker-ui/monthpicker.component.mjs +6 -6
- package/{esm2020 → esm2022}/lib/forms-ui/components/date-picker-ui/yearpicker.component.mjs +6 -6
- package/esm2022/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list-item/drag-and-drop-list-item.component.mjs +49 -0
- package/{esm2020 → esm2022}/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list.module.mjs +5 -5
- package/esm2022/lib/forms-ui/components/drag-and-drop-list/keyboard-sortable-item/keyboard-sortable-item.directive.mjs +134 -0
- package/{esm2020 → esm2022}/lib/forms-ui/components/drag-and-drop-list/keyboard-sortable-list/keyboard-sortable-list.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/components/error-message/error-message.component.mjs +7 -7
- package/{esm2020 → esm2022}/lib/forms-ui/components/expanded-dropdown/expanded-dropdown.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/components/form-error/form-error.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/components/icon/icon.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/components/input/input.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/components/keyboard-select.directive.mjs +4 -4
- package/esm2022/lib/forms-ui/components/multi-select/multi-select.component.mjs +255 -0
- package/esm2022/lib/forms-ui/components/option/option.component.mjs +84 -0
- package/{esm2020 → esm2022}/lib/forms-ui/components/option-group/option-group.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/components/option-group-dropdown/option-group-dropdown.component.mjs +4 -4
- package/esm2022/lib/forms-ui/components/options-dropdown/options-dropdown.component.mjs +185 -0
- package/{esm2020 → esm2022}/lib/forms-ui/components/options-sub-dropdown/options-sub-dropdown.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/components/picker/picker-trigger.directive.mjs +7 -7
- package/{esm2020 → esm2022}/lib/forms-ui/components/picker/picker.component.mjs +19 -19
- package/esm2022/lib/forms-ui/components/picker-option/picker-option.component.mjs +118 -0
- package/{esm2020 → esm2022}/lib/forms-ui/components/pill-item/pill-item.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/components/pill-list/pill-list.component.mjs +4 -4
- package/esm2022/lib/forms-ui/components/responsive-input/responsive-input.component.mjs +100 -0
- package/{esm2020 → esm2022}/lib/forms-ui/components/select-list/select-list.component.mjs +4 -4
- package/esm2022/lib/forms-ui/components/single-select/single-select.component.mjs +279 -0
- package/{esm2020 → esm2022}/lib/forms-ui/components/slider-toggle/slider-toggle.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/components/sorting-dropdown/sorting-dropdown.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/components/sorting-dropdown-trigger/sorting-dropdown-trigger.component.mjs +4 -4
- package/esm2022/lib/forms-ui/directives/contenteditable.directive.mjs +129 -0
- package/esm2022/lib/forms-ui/directives/form-error.directive.mjs +109 -0
- package/{esm2020 → esm2022}/lib/forms-ui/directives/form-submit.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/directives/keyboard-action-source.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/directives/mark-invalid.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/directives/select-dropdown.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/directives/selectable-item.directive.mjs +7 -7
- package/{esm2020 → esm2022}/lib/forms-ui/directives/selected-option.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/forms-ui.module.mjs +102 -102
- package/{esm2020 → esm2022}/lib/forms-ui/models/base-select.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/pipes/filter-selection.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/pipes/filter-term.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-ui/pipes/format-number.pipe.mjs +4 -4
- package/esm2022/lib/modal-ui/components/modal/modal.component.mjs +213 -0
- package/{esm2020 → esm2022}/lib/modal-ui/components/modal-footer/modal-footer.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modal-ui/components/modal-header/modal-header.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modal-ui/directives/modal-content.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modal-ui/modal.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/popover-ui/components/popover/popover.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/popover-ui/directives/popover-click.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/popover-ui/directives/popover-content.directive.mjs +4 -4
- package/esm2022/lib/popover-ui/directives/popover-hover.directive.mjs +87 -0
- package/{esm2020 → esm2022}/lib/popover-ui/popover-ui.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/tab-ui/components/tab/tab.component.mjs +14 -14
- package/esm2022/lib/tab-ui/components/tab-group/tab-group.component.mjs +71 -0
- package/{esm2020 → esm2022}/lib/tab-ui/tab-ui.module.mjs +5 -5
- package/{fesm2020 → fesm2022}/leanix-components.mjs +767 -768
- package/fesm2022/leanix-components.mjs.map +1 -0
- package/lib/core-ui/components/badge/badge.component.d.ts +1 -1
- package/lib/core-ui/components/button/button.component.d.ts +1 -1
- package/lib/core-ui/components/button-group/button-group.component.d.ts +1 -1
- package/lib/core-ui/components/card/card.component.d.ts +1 -1
- package/lib/core-ui/components/collapsible/collapsible.component.d.ts +1 -1
- package/lib/core-ui/components/colored-label/colored-label.component.d.ts +1 -1
- package/lib/core-ui/components/ellipsis/ellipsis.component.d.ts +1 -1
- package/lib/core-ui/components/file-download-button/file-download-button.component.d.ts +1 -1
- package/lib/core-ui/components/icon-scale/icon-scale.component.d.ts +1 -1
- package/lib/core-ui/components/spinner/spinner.component.d.ts +1 -1
- package/lib/core-ui/components/table/table-header/table-header.component.d.ts +1 -1
- package/lib/core-ui/components/table/table.component.d.ts +1 -1
- package/lib/core-ui/directives/autoclose.directive.d.ts +1 -1
- package/lib/core-ui/directives/autofocus.directive.d.ts +1 -1
- package/lib/core-ui/directives/html.directive.d.ts +1 -1
- package/lib/core-ui/pipes/sort.pipe.d.ts +1 -1
- package/lib/core-ui/services/resize-observer.service.d.ts +1 -1
- package/lib/core-ui/tooltip/tooltip.component.d.ts +1 -1
- package/lib/core-ui/tooltip/tooltip.directive.d.ts +1 -1
- package/lib/forms-ui/components/basic-dropdown/basic-dropdown.component.d.ts +1 -1
- package/lib/forms-ui/components/basic-dropdown-item/basic-dropdown-item.component.d.ts +1 -1
- package/lib/forms-ui/components/breadcrumb/breadcrumb.component.d.ts +2 -2
- package/lib/forms-ui/components/cdk-options-dropdown/cdk-options-dropdown.component.d.ts +1 -1
- package/lib/forms-ui/components/cdk-options-sub-dropdown/cdk-options-sub-dropdown.component.d.ts +1 -1
- package/lib/forms-ui/components/copy-button/copy-button.component.d.ts +1 -1
- package/lib/forms-ui/components/currency/currency-input.component.d.ts +4 -4
- package/lib/forms-ui/components/currency/currency-symbol.component.d.ts +1 -1
- package/lib/forms-ui/components/date-input/date-input.component.d.ts +2 -2
- package/lib/forms-ui/components/date-picker-ui/datepicker-inner.component.d.ts +1 -1
- package/lib/forms-ui/components/date-picker-ui/datepicker.component.d.ts +1 -1
- package/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list-item/drag-and-drop-list-item.component.d.ts +1 -1
- package/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list.component.d.ts +1 -1
- package/lib/forms-ui/components/drag-and-drop-list/keyboard-sortable-item/keyboard-sortable-item.directive.d.ts +1 -1
- package/lib/forms-ui/components/drag-and-drop-list/keyboard-sortable-list/keyboard-sortable-list.directive.d.ts +1 -1
- package/lib/forms-ui/components/error-message/error-message.component.d.ts +1 -1
- package/lib/forms-ui/components/expanded-dropdown/expanded-dropdown.component.d.ts +1 -1
- package/lib/forms-ui/components/form-error/form-error.component.d.ts +1 -1
- package/lib/forms-ui/components/icon/icon.component.d.ts +2 -2
- package/lib/forms-ui/components/input/input.component.d.ts +1 -1
- package/lib/forms-ui/components/keyboard-select.directive.d.ts +1 -1
- package/lib/forms-ui/components/multi-select/multi-select.component.d.ts +3 -3
- package/lib/forms-ui/components/option/option.component.d.ts +1 -1
- package/lib/forms-ui/components/option-group/option-group.component.d.ts +1 -1
- package/lib/forms-ui/components/option-group-dropdown/option-group-dropdown.component.d.ts +3 -3
- package/lib/forms-ui/components/options-dropdown/options-dropdown.component.d.ts +1 -1
- package/lib/forms-ui/components/options-sub-dropdown/options-sub-dropdown.component.d.ts +1 -1
- package/lib/forms-ui/components/picker/picker.component.d.ts +1 -1
- package/lib/forms-ui/components/picker-option/picker-option.component.d.ts +1 -1
- package/lib/forms-ui/components/pill-item/pill-item.component.d.ts +1 -1
- package/lib/forms-ui/components/pill-list/pill-list.component.d.ts +1 -1
- package/lib/forms-ui/components/select-list/select-list.component.d.ts +1 -1
- package/lib/forms-ui/components/single-select/single-select.component.d.ts +2 -2
- package/lib/forms-ui/components/slider-toggle/slider-toggle.component.d.ts +1 -1
- package/lib/forms-ui/components/sorting-dropdown/sorting-dropdown.component.d.ts +1 -1
- package/lib/forms-ui/components/sorting-dropdown-trigger/sorting-dropdown-trigger.component.d.ts +1 -1
- package/lib/forms-ui/directives/contenteditable.directive.d.ts +2 -2
- package/lib/forms-ui/directives/form-error.directive.d.ts +2 -2
- package/lib/forms-ui/directives/mark-invalid.directive.d.ts +1 -1
- package/lib/forms-ui/directives/selectable-item.directive.d.ts +1 -1
- package/lib/forms-ui/models/base-select.directive.d.ts +1 -1
- package/lib/forms-ui/models/single-select-padding.interface.d.ts +1 -1
- package/lib/forms-ui/models/sorting.interface.d.ts +1 -1
- package/lib/modal-ui/components/modal/modal.component.d.ts +1 -1
- package/lib/modal-ui/components/modal-footer/modal-footer.component.d.ts +1 -1
- package/lib/modal-ui/components/modal-header/modal-header.component.d.ts +1 -1
- package/lib/popover-ui/components/popover/popover.component.d.ts +1 -1
- package/lib/popover-ui/directives/popover-click.directive.d.ts +1 -1
- package/lib/popover-ui/directives/popover-hover.directive.d.ts +1 -1
- package/lib/tab-ui/components/tab/tab.component.d.ts +1 -1
- package/lib/tab-ui/components/tab-group/tab-group.component.d.ts +1 -1
- package/package.json +13 -19
- package/esm2020/lib/core-ui/components/ellipsis/ellipsis.component.mjs +0 -139
- package/esm2020/lib/core-ui/linkify/linkify.pipe.mjs +0 -144
- package/esm2020/lib/core-ui/tooltip/tooltip.directive.mjs +0 -105
- package/esm2020/lib/forms-ui/components/basic-dropdown/basic-dropdown.component.mjs +0 -120
- package/esm2020/lib/forms-ui/components/cdk-options-dropdown/cdk-options-dropdown.component.mjs +0 -216
- package/esm2020/lib/forms-ui/components/currency/currency-input.component.mjs +0 -145
- package/esm2020/lib/forms-ui/components/date-picker-ui/datepicker-ui.module.mjs +0 -28
- package/esm2020/lib/forms-ui/components/date-picker-ui/datepicker.component.mjs +0 -205
- package/esm2020/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list-item/drag-and-drop-list-item.component.mjs +0 -49
- package/esm2020/lib/forms-ui/components/drag-and-drop-list/keyboard-sortable-item/keyboard-sortable-item.directive.mjs +0 -134
- package/esm2020/lib/forms-ui/components/multi-select/multi-select.component.mjs +0 -255
- package/esm2020/lib/forms-ui/components/option/option.component.mjs +0 -84
- package/esm2020/lib/forms-ui/components/options-dropdown/options-dropdown.component.mjs +0 -185
- package/esm2020/lib/forms-ui/components/picker-option/picker-option.component.mjs +0 -118
- package/esm2020/lib/forms-ui/components/responsive-input/responsive-input.component.mjs +0 -100
- package/esm2020/lib/forms-ui/components/single-select/single-select.component.mjs +0 -279
- package/esm2020/lib/forms-ui/directives/contenteditable.directive.mjs +0 -129
- package/esm2020/lib/forms-ui/directives/form-error.directive.mjs +0 -109
- package/esm2020/lib/modal-ui/components/modal/modal.component.mjs +0 -213
- package/esm2020/lib/popover-ui/directives/popover-hover.directive.mjs +0 -87
- package/esm2020/lib/tab-ui/components/tab-group/tab-group.component.mjs +0 -71
- package/fesm2015/leanix-components.mjs +0 -8448
- package/fesm2015/leanix-components.mjs.map +0 -1
- package/fesm2020/leanix-components.mjs.map +0 -1
- package/src/lib/forms-ui/components/date-picker-ui/README.md +0 -8
- /package/{esm2020 → esm2022}/index.mjs +0 -0
- /package/{esm2020 → esm2022}/leanix-components.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core-ui/annotations/required.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core-ui/core-ui.constants.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core-ui/functions/core-css.helpers.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core-ui/tooltip/to-cdk-position.function.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core-ui/tooltip/tooltip-position.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/forms-ui/components/currency/currency-symbol-map.constant.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/forms-ui/components/date-picker-ui/date-formatter.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/forms-ui/components/date-picker-ui/isBs3.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/forms-ui/components/drag-and-drop-list/constants.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/forms-ui/helpers/key-codes.constants.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/forms-ui/helpers/keyboard-navigation.helpers.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/forms-ui/models/dropdown-item.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/forms-ui/models/single-select-padding.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/forms-ui/models/sorting.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/forms-ui/validators/date-in-foreseeable-future.validator.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/forms-ui/validators/string-not-in-array.validator.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modal-ui/modal.constants.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/shared/date-helpers.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/shared/html-helpers.function.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/shared/misc-helpers.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/shared/observe.mjs +0 -0
package/esm2020/lib/forms-ui/components/cdk-options-dropdown/cdk-options-dropdown.component.mjs
DELETED
|
@@ -1,216 +0,0 @@
|
|
|
1
|
-
import { CdkConnectedOverlay } from '@angular/cdk/overlay';
|
|
2
|
-
import { ChangeDetectionStrategy, Component, ContentChild, ContentChildren, Input, ViewChild } from '@angular/core';
|
|
3
|
-
import { BehaviorSubject, combineLatest, fromEvent, merge, Subject } from 'rxjs';
|
|
4
|
-
import { debounceTime, delay, distinctUntilChanged, filter, map, startWith, switchMap, takeUntil, withLatestFrom } from 'rxjs/operators';
|
|
5
|
-
import { TooltipDirective } from '../../../core-ui/tooltip/tooltip.directive';
|
|
6
|
-
import { KeyboardActionSourceDirective } from '../../directives/keyboard-action-source.directive';
|
|
7
|
-
import { KeyboardSelectAction } from '../keyboard-select.directive';
|
|
8
|
-
import { OptionComponent } from '../option/option.component';
|
|
9
|
-
import * as i0 from "@angular/core";
|
|
10
|
-
import * as i1 from "@angular/cdk/overlay";
|
|
11
|
-
const BOTTOM_LEFT_POSITION = {
|
|
12
|
-
originX: 'end',
|
|
13
|
-
overlayX: 'end',
|
|
14
|
-
originY: 'bottom',
|
|
15
|
-
overlayY: 'top'
|
|
16
|
-
};
|
|
17
|
-
const BOTTOM_RIGHT_POSITION = {
|
|
18
|
-
originX: 'start',
|
|
19
|
-
overlayX: 'start',
|
|
20
|
-
originY: 'bottom',
|
|
21
|
-
overlayY: 'top'
|
|
22
|
-
};
|
|
23
|
-
const TOP_LEFT_POSITION = {
|
|
24
|
-
originX: 'end',
|
|
25
|
-
overlayX: 'end',
|
|
26
|
-
originY: 'top',
|
|
27
|
-
overlayY: 'bottom'
|
|
28
|
-
};
|
|
29
|
-
const TOP_RIGHT_POSITION = {
|
|
30
|
-
originX: 'start',
|
|
31
|
-
overlayX: 'start',
|
|
32
|
-
originY: 'top',
|
|
33
|
-
overlayY: 'bottom'
|
|
34
|
-
};
|
|
35
|
-
const LEFT_ALIGN_POSITIONS = [BOTTOM_LEFT_POSITION, TOP_LEFT_POSITION, BOTTOM_RIGHT_POSITION, TOP_RIGHT_POSITION];
|
|
36
|
-
const RIGHT_ALIGN_POSITIONS = [BOTTOM_RIGHT_POSITION, TOP_RIGHT_POSITION, BOTTOM_LEFT_POSITION, TOP_LEFT_POSITION];
|
|
37
|
-
export class CdkOptionsDropdownComponent {
|
|
38
|
-
constructor(changeDetection) {
|
|
39
|
-
this.changeDetection = changeDetection;
|
|
40
|
-
this.align = 'right';
|
|
41
|
-
this.closeOnScroll = false;
|
|
42
|
-
this.disabled = false;
|
|
43
|
-
this.maxHeight = 'none';
|
|
44
|
-
this.highlightedOptionIndex$ = new BehaviorSubject(0);
|
|
45
|
-
this._open = false;
|
|
46
|
-
this.isSubdropdownExpanded = false;
|
|
47
|
-
this.destroyed$ = new Subject();
|
|
48
|
-
this.isPositionComputed = true;
|
|
49
|
-
}
|
|
50
|
-
set open(value) {
|
|
51
|
-
if (this.disabled) {
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
this._open = value;
|
|
55
|
-
if (this.trigger) {
|
|
56
|
-
// Don't emit keyboard actions while the dropdown is not open yet.
|
|
57
|
-
this.trigger.dontEmit = !this.open;
|
|
58
|
-
}
|
|
59
|
-
if (this.open) {
|
|
60
|
-
this.isSubdropdownExpanded = false;
|
|
61
|
-
this.setInitialHighlightingIndex();
|
|
62
|
-
}
|
|
63
|
-
this.reloadOverlayPosition(this.open);
|
|
64
|
-
}
|
|
65
|
-
get open() {
|
|
66
|
-
return this._open;
|
|
67
|
-
}
|
|
68
|
-
get options() {
|
|
69
|
-
return this._options.toArray();
|
|
70
|
-
}
|
|
71
|
-
ngAfterViewInit() {
|
|
72
|
-
this.trigger.dontEmit = !this.open;
|
|
73
|
-
this.overlay.positions = this.align === 'left' ? LEFT_ALIGN_POSITIONS : RIGHT_ALIGN_POSITIONS;
|
|
74
|
-
const optionsChanges$ = this._options.changes.pipe(startWith(this._options), map((options) => options.toArray()));
|
|
75
|
-
this.trigger.keyboardActions$
|
|
76
|
-
.pipe(filter((keyboardSelectAction) => keyboardSelectAction === KeyboardSelectAction.NEXT), withLatestFrom(this.highlightedOptionIndex$, optionsChanges$, (_, index, options) => this.next(index, options)))
|
|
77
|
-
.subscribe(this.highlightedOptionIndex$);
|
|
78
|
-
this.trigger.keyboardActions$
|
|
79
|
-
.pipe(filter((keyboardSelectAction) => keyboardSelectAction === KeyboardSelectAction.PREV), withLatestFrom(this.highlightedOptionIndex$, optionsChanges$, (_, index, options) => this.prev(index, options)))
|
|
80
|
-
.subscribe(this.highlightedOptionIndex$);
|
|
81
|
-
this.trigger.keyboardActions$
|
|
82
|
-
.pipe(filter((keyboardSelectAction) => keyboardSelectAction === KeyboardSelectAction.LEFT), withLatestFrom(this.highlightedOptionIndex$, optionsChanges$, (_, index, options) => this.isSubdropdownExpanded ? this.collapse(index, options) : this.expand(index, options)))
|
|
83
|
-
.subscribe(this.highlightedOptionIndex$);
|
|
84
|
-
this.trigger.keyboardActions$
|
|
85
|
-
.pipe(filter((keyboardSelectAction) => keyboardSelectAction === KeyboardSelectAction.RIGHT), withLatestFrom(this.highlightedOptionIndex$, optionsChanges$, (_, index, options) => this.isSubdropdownExpanded ? this.collapse(index, options) : this.expand(index, options)))
|
|
86
|
-
.subscribe(this.highlightedOptionIndex$);
|
|
87
|
-
this.trigger.keyboardActions$
|
|
88
|
-
.pipe(filter((keyboardSelectAction) => keyboardSelectAction === KeyboardSelectAction.CLOSE))
|
|
89
|
-
.subscribe(() => this.closeDropdown());
|
|
90
|
-
this.trigger.keyboardActions$
|
|
91
|
-
.pipe(filter((keyboardSelectAction) => keyboardSelectAction === KeyboardSelectAction.EXECUTE), withLatestFrom(this.highlightedOptionIndex$, (_, index) => index))
|
|
92
|
-
.subscribe((index) => {
|
|
93
|
-
this.options[index]?.selectOption();
|
|
94
|
-
});
|
|
95
|
-
/** Combined stream of all of the child options' select outputs. */
|
|
96
|
-
this._options.changes
|
|
97
|
-
.pipe(startWith(this._options), switchMap(() => merge(...this._options.map((option) => option.select), ...this._options.map((option) => option.selectedClick))), delay(0), takeUntil(this.destroyed$))
|
|
98
|
-
.subscribe((_value) => {
|
|
99
|
-
this.closeDropdown();
|
|
100
|
-
});
|
|
101
|
-
combineLatest([optionsChanges$, this.highlightedOptionIndex$])
|
|
102
|
-
.pipe(delay(0), map(([options, index]) => options[index]), distinctUntilChanged(), takeUntil(this.destroyed$))
|
|
103
|
-
.subscribe((optionToBeHighlighted) => {
|
|
104
|
-
this.options.forEach((option) => option.setHighlighted(optionToBeHighlighted === option));
|
|
105
|
-
this.changeDetection.markForCheck();
|
|
106
|
-
});
|
|
107
|
-
if (this.closeOnScroll) {
|
|
108
|
-
fromEvent(window, 'scroll')
|
|
109
|
-
.pipe(debounceTime(100), takeUntil(this.destroyed$))
|
|
110
|
-
.subscribe(() => {
|
|
111
|
-
this.open = false;
|
|
112
|
-
this.trigger.blur();
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
ngOnDestroy() {
|
|
117
|
-
this.destroyed$.next();
|
|
118
|
-
}
|
|
119
|
-
closeDropdown() {
|
|
120
|
-
this.tooltips.toArray().forEach((tooltip) => tooltip.hide());
|
|
121
|
-
this.open = false;
|
|
122
|
-
}
|
|
123
|
-
setInitialHighlightingIndex() {
|
|
124
|
-
const firstAvailableIndex = this.options.map((option) => !this.optionIsHighlightable(option)).indexOf(false, 0);
|
|
125
|
-
this.highlightedOptionIndex$.next(firstAvailableIndex);
|
|
126
|
-
}
|
|
127
|
-
prev(currentIndex, items) {
|
|
128
|
-
if (currentIndex > 0) {
|
|
129
|
-
const prevEnabledIndex = items.map((option) => !this.optionIsHighlightable(option)).lastIndexOf(false, currentIndex - 1);
|
|
130
|
-
return prevEnabledIndex !== -1 ? prevEnabledIndex : currentIndex;
|
|
131
|
-
}
|
|
132
|
-
else {
|
|
133
|
-
return currentIndex;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
next(currentIndex, items) {
|
|
137
|
-
if (currentIndex < items.length) {
|
|
138
|
-
const nextEnabledIndex = items.map((option) => !this.optionIsHighlightable(option)).indexOf(false, currentIndex + 1);
|
|
139
|
-
return nextEnabledIndex !== -1 ? nextEnabledIndex : currentIndex;
|
|
140
|
-
}
|
|
141
|
-
else {
|
|
142
|
-
return currentIndex;
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
expand(currentIndex, items) {
|
|
146
|
-
if (items[currentIndex]?.hasSubdropdown) {
|
|
147
|
-
this.isSubdropdownExpanded = true;
|
|
148
|
-
return this.next(currentIndex, items);
|
|
149
|
-
}
|
|
150
|
-
else {
|
|
151
|
-
return currentIndex;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
collapse(currentIndex, items) {
|
|
155
|
-
if (this.isSubdropdownExpanded) {
|
|
156
|
-
this.isSubdropdownExpanded = false;
|
|
157
|
-
return this.prev(currentIndex, items);
|
|
158
|
-
}
|
|
159
|
-
else {
|
|
160
|
-
return currentIndex;
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
optionIsHighlightable(option) {
|
|
164
|
-
const isToplevelOptionAndAllowed = !option.isSuboption && !this.isSubdropdownExpanded;
|
|
165
|
-
const isSecondlevelOptionAndAllowed = option.isSuboption && this.isSubdropdownExpanded;
|
|
166
|
-
return !option.disabled && (isToplevelOptionAndAllowed || isSecondlevelOptionAndAllowed);
|
|
167
|
-
}
|
|
168
|
-
reloadOverlayPosition(open) {
|
|
169
|
-
if (open) {
|
|
170
|
-
this.isPositionComputed = false;
|
|
171
|
-
setTimeout(() => {
|
|
172
|
-
const dropdownElement = this.dropdownContainer.nativeElement;
|
|
173
|
-
this.overlay.overlayRef.updateSize({
|
|
174
|
-
height: dropdownElement.offsetHeight,
|
|
175
|
-
width: dropdownElement.offsetWidth
|
|
176
|
-
});
|
|
177
|
-
this.overlay.overlayRef.updatePosition();
|
|
178
|
-
this.isPositionComputed = true;
|
|
179
|
-
this.changeDetection.markForCheck();
|
|
180
|
-
}, 0);
|
|
181
|
-
}
|
|
182
|
-
else {
|
|
183
|
-
this.changeDetection.markForCheck();
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
CdkOptionsDropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: CdkOptionsDropdownComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
188
|
-
CdkOptionsDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.1", type: CdkOptionsDropdownComponent, selector: "lx-cdk-options-dropdown", inputs: { align: "align", closeOnScroll: "closeOnScroll", disabled: "disabled", maxHeight: "maxHeight" }, queries: [{ propertyName: "trigger", first: true, predicate: KeyboardActionSourceDirective, descendants: true }, { propertyName: "_options", predicate: OptionComponent, descendants: true }, { propertyName: "tooltips", predicate: TooltipDirective, descendants: true }], viewQueries: [{ propertyName: "dropdownContainer", first: true, predicate: ["dropdown"], descendants: true }, { propertyName: "overlay", first: true, predicate: CdkConnectedOverlay, descendants: true }], ngImport: i0, template: "<div (click)=\"open = !open\" class=\"triggerContainer\" cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\">\n <ng-content select=\"[lxKeyboardActionSource]\"></ng-content>\n</div>\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"open\"\n (overlayOutsideClick)=\"closeDropdown()\"\n>\n <ul\n #dropdown\n [class.showScrollbar]=\"maxHeight !== 'none'\"\n [style.max-height]=\"maxHeight\"\n [style.visibility]=\"isPositionComputed ? null : 'hidden'\"\n >\n <ng-content></ng-content>\n </ul>\n</ng-template>\n", styles: [":host{display:inline-block;position:relative}ul{position:absolute;background-color:#fff;border-radius:3px;box-shadow:0 8px 12px 2px #00000026;border:solid 1px #e1e5eb;text-align:left;list-style:none;margin:0;padding-left:0;z-index:20;white-space:nowrap}ul::-webkit-scrollbar{width:.5em;height:.5em;background-color:transparent}ul::-webkit-scrollbar-thumb{background-color:#c2c9d6;border-radius:6px}ul::-webkit-scrollbar-track-piece{background-color:transparent}ul.left{right:0;padding-right:0}ul.showScrollbar{overflow-y:auto}.triggerContainer{display:inline-block}\n"], dependencies: [{ kind: "directive", type: i1.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
189
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: CdkOptionsDropdownComponent, decorators: [{
|
|
190
|
-
type: Component,
|
|
191
|
-
args: [{ selector: 'lx-cdk-options-dropdown', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div (click)=\"open = !open\" class=\"triggerContainer\" cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\">\n <ng-content select=\"[lxKeyboardActionSource]\"></ng-content>\n</div>\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"open\"\n (overlayOutsideClick)=\"closeDropdown()\"\n>\n <ul\n #dropdown\n [class.showScrollbar]=\"maxHeight !== 'none'\"\n [style.max-height]=\"maxHeight\"\n [style.visibility]=\"isPositionComputed ? null : 'hidden'\"\n >\n <ng-content></ng-content>\n </ul>\n</ng-template>\n", styles: [":host{display:inline-block;position:relative}ul{position:absolute;background-color:#fff;border-radius:3px;box-shadow:0 8px 12px 2px #00000026;border:solid 1px #e1e5eb;text-align:left;list-style:none;margin:0;padding-left:0;z-index:20;white-space:nowrap}ul::-webkit-scrollbar{width:.5em;height:.5em;background-color:transparent}ul::-webkit-scrollbar-thumb{background-color:#c2c9d6;border-radius:6px}ul::-webkit-scrollbar-track-piece{background-color:transparent}ul.left{right:0;padding-right:0}ul.showScrollbar{overflow-y:auto}.triggerContainer{display:inline-block}\n"] }]
|
|
192
|
-
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { dropdownContainer: [{
|
|
193
|
-
type: ViewChild,
|
|
194
|
-
args: ['dropdown']
|
|
195
|
-
}], align: [{
|
|
196
|
-
type: Input
|
|
197
|
-
}], closeOnScroll: [{
|
|
198
|
-
type: Input
|
|
199
|
-
}], disabled: [{
|
|
200
|
-
type: Input
|
|
201
|
-
}], maxHeight: [{
|
|
202
|
-
type: Input
|
|
203
|
-
}], trigger: [{
|
|
204
|
-
type: ContentChild,
|
|
205
|
-
args: [KeyboardActionSourceDirective]
|
|
206
|
-
}], overlay: [{
|
|
207
|
-
type: ViewChild,
|
|
208
|
-
args: [CdkConnectedOverlay]
|
|
209
|
-
}], _options: [{
|
|
210
|
-
type: ContentChildren,
|
|
211
|
-
args: [OptionComponent, { descendants: true }]
|
|
212
|
-
}], tooltips: [{
|
|
213
|
-
type: ContentChildren,
|
|
214
|
-
args: [TooltipDirective, { descendants: true }]
|
|
215
|
-
}] } });
|
|
216
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLW9wdGlvbnMtZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3NyYy9saWIvZm9ybXMtdWkvY29tcG9uZW50cy9jZGstb3B0aW9ucy1kcm9wZG93bi9jZGstb3B0aW9ucy1kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvc3JjL2xpYi9mb3Jtcy11aS9jb21wb25lbnRzL2Nkay1vcHRpb25zLWRyb3Bkb3duL2Nkay1vcHRpb25zLWRyb3Bkb3duLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBcUIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5RSxPQUFPLEVBRUwsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUVmLEtBQUssRUFHTCxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakYsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6SSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUNsRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7OztBQUU3RCxNQUFNLG9CQUFv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QUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNQO2FBQU07WUFDTCxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3JDO0lBQ0gsQ0FBQzs7d0hBdE5VLDJCQUEyQjs0R0FBM0IsMkJBQTJCLDhNQTRCeEIsNkJBQTZCLDhEQUcxQixlQUFlLDhEQUdmLGdCQUFnQix5TEFMdEIsbUJBQW1CLGdEQ3ZGaEMseWtCQWtCQTsyRkR3Q2EsMkJBQTJCO2tCQU52QyxTQUFTOytCQUNFLHlCQUF5QixtQkFHbEIsdUJBQXVCLENBQUMsTUFBTTt3R0FHeEIsaUJBQWlCO3NCQUF2QyxTQUFTO3VCQUFDLFVBQVU7Z0JBRVosS0FBSztzQkFBYixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQXNCdUMsT0FBTztzQkFBbkQsWUFBWTt1QkFBQyw2QkFBNkI7Z0JBQ1gsT0FBTztzQkFBdEMsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBRzlCLFFBQVE7c0JBRFAsZUFBZTt1QkFBQyxlQUFlLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQUl2RCxRQUFRO3NCQURQLGVBQWU7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrQ29ubmVjdGVkT3ZlcmxheSwgQ29ubmVjdGVkUG9zaXRpb24gfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIFF1ZXJ5TGlzdCxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmcm9tRXZlbnQsIG1lcmdlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRlbGF5LCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHdpdGhMYXRlc3RGcm9tIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUtdWkvdG9vbHRpcC90b29sdGlwLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBLZXlib2FyZEFjdGlvblNvdXJjZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMva2V5Ym9hcmQtYWN0aW9uLXNvdXJjZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgS2V5Ym9hcmRTZWxlY3RBY3Rpb24gfSBmcm9tICcuLi9rZXlib2FyZC1zZWxlY3QuZGlyZWN0aXZlJztcbmltcG9ydCB7IE9wdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL29wdGlvbi9vcHRpb24uY29tcG9uZW50JztcblxuY29uc3QgQk9UVE9NX0xFRlRfUE9TSVRJT046IENvbm5lY3RlZFBvc2l0aW9uID0ge1xuICBvcmlnaW5YOiAnZW5kJyxcbiAgb3ZlcmxheVg6ICdlbmQnLFxuICBvcmlnaW5ZOiAnYm90dG9tJyxcbiAgb3ZlcmxheVk6ICd0b3AnXG59O1xuXG5jb25zdCBCT1RUT01fUklHSFRfUE9TSVRJT046IENvbm5lY3RlZFBvc2l0aW9uID0ge1xuICBvcmlnaW5YOiAnc3RhcnQnLFxuICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgb3JpZ2luWTogJ2JvdHRvbScsXG4gIG92ZXJsYXlZOiAndG9wJ1xufTtcblxuY29uc3QgVE9QX0xFRlRfUE9TSVRJT046IENvbm5lY3RlZFBvc2l0aW9uID0ge1xuICBvcmlnaW5YOiAnZW5kJyxcbiAgb3ZlcmxheVg6ICdlbmQnLFxuICBvcmlnaW5ZOiAndG9wJyxcbiAgb3ZlcmxheVk6ICdib3R0b20nXG59O1xuXG5jb25zdCBUT1BfUklHSFRfUE9TSVRJT046IENvbm5lY3RlZFBvc2l0aW9uID0ge1xuICBvcmlnaW5YOiAnc3RhcnQnLFxuICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgb3JpZ2luWTogJ3RvcCcsXG4gIG92ZXJsYXlZOiAnYm90dG9tJ1xufTtcblxuY29uc3QgTEVGVF9BTElHTl9QT1NJVElPTlM6IENvbm5lY3RlZFBvc2l0aW9uW10gPSBbQk9UVE9NX0xFRlRfUE9TSVRJT04sIFRPUF9MRUZUX1BPU0lUSU9OLCBCT1RUT01fUklHSFRfUE9TSVRJT04sIFRPUF9SSUdIVF9QT1NJVElPTl07XG5jb25zdCBSSUdIVF9BTElHTl9QT1NJVElPTlM6IENvbm5lY3RlZFBvc2l0aW9uW10gPSBbQk9UVE9NX1JJR0hUX1BPU0lUSU9OLCBUT1BfUklHSFRfUE9TSVRJT04sIEJPVFRPTV9MRUZUX1BPU0lUSU9OLCBUT1BfTEVGVF9QT1NJVElPTl07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2x4LWNkay1vcHRpb25zLWRyb3Bkb3duJyxcbiAgdGVtcGxhdGVVcmw6ICdjZGstb3B0aW9ucy1kcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWydjZGstb3B0aW9ucy1kcm9wZG93bi5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBDZGtPcHRpb25zRHJvcGRvd25Db21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKCdkcm9wZG93bicpIGRyb3Bkb3duQ29udGFpbmVyITogRWxlbWVudFJlZjtcblxuICBASW5wdXQoKSBhbGlnbjogJ3JpZ2h0JyB8ICdsZWZ0JyA9ICdyaWdodCc7XG4gIEBJbnB1dCgpIGNsb3NlT25TY3JvbGw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgbWF4SGVpZ2h0OiBzdHJpbmcgPSAnbm9uZSc7XG5cbiAgc2V0IG9wZW4odmFsdWUpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX29wZW4gPSB2YWx1ZTtcbiAgICBpZiAodGhpcy50cmlnZ2VyKSB7XG4gICAgICAvLyBEb24ndCBlbWl0IGtleWJvYXJkIGFjdGlvbnMgd2hpbGUgdGhlIGRyb3Bkb3duIGlzIG5vdCBvcGVuIHlldC5cbiAgICAgIHRoaXMudHJpZ2dlci5kb250RW1pdCA9ICF0aGlzLm9wZW47XG4gICAgfVxuICAgIGlmICh0aGlzLm9wZW4pIHtcbiAgICAgIHRoaXMuaXNTdWJkcm9wZG93bkV4cGFuZGVkID0gZmFsc2U7XG4gICAgICB0aGlzLnNldEluaXRpYWxIaWdobGlnaHRpbmdJbmRleCgpO1xuICAgIH1cbiAgICB0aGlzLnJlbG9hZE92ZXJsYXlQb3NpdGlvbih0aGlzLm9wZW4pO1xuICB9XG4gIGdldCBvcGVuKCkge1xuICAgIHJldHVybiB0aGlzLl9vcGVuO1xuICB9XG5cbiAgQENvbnRlbnRDaGlsZChLZXlib2FyZEFjdGlvblNvdXJjZURpcmVjdGl2ZSkgdHJpZ2dlciE6IEtleWJvYXJkQWN0aW9uU291cmNlRGlyZWN0aXZlO1xuICBAVmlld0NoaWxkKENka0Nvbm5lY3RlZE92ZXJsYXkpIG92ZXJsYXkhOiBDZGtDb25uZWN0ZWRPdmVybGF5O1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oT3B0aW9uQ29tcG9uZW50LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gIF9vcHRpb25zITogUXVlcnlMaXN0PE9wdGlvbkNvbXBvbmVudD47XG5cbiAgQENvbnRlbnRDaGlsZHJlbihUb29sdGlwRGlyZWN0aXZlLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gIHRvb2x0aXBzITogUXVlcnlMaXN0PFRvb2x0aXBEaXJlY3RpdmU+O1xuXG4gIGdldCBvcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zLnRvQXJyYXkoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgaGlnaGxpZ2h0ZWRPcHRpb25JbmRleCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIHByaXZhdGUgX29wZW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBpc1N1YmRyb3Bkb3duRXhwYW5kZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3llZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGlzUG9zaXRpb25Db21wdXRlZCA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnRyaWdnZXIuZG9udEVtaXQgPSAhdGhpcy5vcGVuO1xuXG4gICAgdGhpcy5vdmVybGF5LnBvc2l0aW9ucyA9IHRoaXMuYWxpZ24gPT09ICdsZWZ0JyA/IExFRlRfQUxJR05fUE9TSVRJT05TIDogUklHSFRfQUxJR05fUE9TSVRJT05TO1xuXG4gICAgY29uc3Qgb3B0aW9uc0NoYW5nZXMkID0gdGhpcy5fb3B0aW9ucy5jaGFuZ2VzLnBpcGUoXG4gICAgICBzdGFydFdpdGgodGhpcy5fb3B0aW9ucyksXG4gICAgICBtYXAoKG9wdGlvbnM6IFF1ZXJ5TGlzdDxPcHRpb25Db21wb25lbnQ+KSA9PiBvcHRpb25zLnRvQXJyYXkoKSlcbiAgICApO1xuXG4gICAgdGhpcy50cmlnZ2VyLmtleWJvYXJkQWN0aW9ucyRcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKGtleWJvYXJkU2VsZWN0QWN0aW9uKSA9PiBrZXlib2FyZFNlbGVjdEFjdGlvbiA9PT0gS2V5Ym9hcmRTZWxlY3RBY3Rpb24uTkVYVCksXG4gICAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMuaGlnaGxpZ2h0ZWRPcHRpb25JbmRleCQsIG9wdGlvbnNDaGFuZ2VzJCwgKF8sIGluZGV4LCBvcHRpb25zKSA9PiB0aGlzLm5leHQoaW5kZXgsIG9wdGlvbnMpKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSh0aGlzLmhpZ2hsaWdodGVkT3B0aW9uSW5kZXgkKTtcblxuICAgIHRoaXMudHJpZ2dlci5rZXlib2FyZEFjdGlvbnMkXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKChrZXlib2FyZFNlbGVjdEFjdGlvbikgPT4ga2V5Ym9hcmRTZWxlY3RBY3Rpb24gPT09IEtleWJvYXJkU2VsZWN0QWN0aW9uLlBSRVYpLFxuICAgICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLmhpZ2hsaWdodGVkT3B0aW9uSW5kZXgkLCBvcHRpb25zQ2hhbmdlcyQsIChfLCBpbmRleCwgb3B0aW9ucykgPT4gdGhpcy5wcmV2KGluZGV4LCBvcHRpb25zKSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUodGhpcy5oaWdobGlnaHRlZE9wdGlvbkluZGV4JCk7XG5cbiAgICB0aGlzLnRyaWdnZXIua2V5Ym9hcmRBY3Rpb25zJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoa2V5Ym9hcmRTZWxlY3RBY3Rpb24pID0+IGtleWJvYXJkU2VsZWN0QWN0aW9uID09PSBLZXlib2FyZFNlbGVjdEFjdGlvbi5MRUZUKSxcbiAgICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5oaWdobGlnaHRlZE9wdGlvbkluZGV4JCwgb3B0aW9uc0NoYW5nZXMkLCAoXywgaW5kZXgsIG9wdGlvbnMpID0+XG4gICAgICAgICAgdGhpcy5pc1N1YmRyb3Bkb3duRXhwYW5kZWQgPyB0aGlzLmNvbGxhcHNlKGluZGV4LCBvcHRpb25zKSA6IHRoaXMuZXhwYW5kKGluZGV4LCBvcHRpb25zKVxuICAgICAgICApXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHRoaXMuaGlnaGxpZ2h0ZWRPcHRpb25JbmRleCQpO1xuXG4gICAgdGhpcy50cmlnZ2VyLmtleWJvYXJkQWN0aW9ucyRcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKGtleWJvYXJkU2VsZWN0QWN0aW9uKSA9PiBrZXlib2FyZFNlbGVjdEFjdGlvbiA9PT0gS2V5Ym9hcmRTZWxlY3RBY3Rpb24uUklHSFQpLFxuICAgICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLmhpZ2hsaWdodGVkT3B0aW9uSW5kZXgkLCBvcHRpb25zQ2hhbmdlcyQsIChfLCBpbmRleCwgb3B0aW9ucykgPT5cbiAgICAgICAgICB0aGlzLmlzU3ViZHJvcGRvd25FeHBhbmRlZCA/IHRoaXMuY29sbGFwc2UoaW5kZXgsIG9wdGlvbnMpIDogdGhpcy5leHBhbmQoaW5kZXgsIG9wdGlvbnMpXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUodGhpcy5oaWdobGlnaHRlZE9wdGlvbkluZGV4JCk7XG5cbiAgICB0aGlzLnRyaWdnZXIua2V5Ym9hcmRBY3Rpb25zJFxuICAgICAgLnBpcGUoZmlsdGVyKChrZXlib2FyZFNlbGVjdEFjdGlvbikgPT4ga2V5Ym9hcmRTZWxlY3RBY3Rpb24gPT09IEtleWJvYXJkU2VsZWN0QWN0aW9uLkNMT1NFKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbG9zZURyb3Bkb3duKCkpO1xuXG4gICAgdGhpcy50cmlnZ2VyLmtleWJvYXJkQWN0aW9ucyRcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKGtleWJvYXJkU2VsZWN0QWN0aW9uKSA9PiBrZXlib2FyZFNlbGVjdEFjdGlvbiA9PT0gS2V5Ym9hcmRTZWxlY3RBY3Rpb24uRVhFQ1VURSksXG4gICAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMuaGlnaGxpZ2h0ZWRPcHRpb25JbmRleCQsIChfLCBpbmRleCkgPT4gaW5kZXgpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChpbmRleCkgPT4ge1xuICAgICAgICB0aGlzLm9wdGlvbnNbaW5kZXhdPy5zZWxlY3RPcHRpb24oKTtcbiAgICAgIH0pO1xuXG4gICAgLyoqIENvbWJpbmVkIHN0cmVhbSBvZiBhbGwgb2YgdGhlIGNoaWxkIG9wdGlvbnMnIHNlbGVjdCBvdXRwdXRzLiAqL1xuICAgIHRoaXMuX29wdGlvbnMuY2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIHN0YXJ0V2l0aCh0aGlzLl9vcHRpb25zKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IG1lcmdlKC4uLnRoaXMuX29wdGlvbnMubWFwKChvcHRpb24pID0+IG9wdGlvbi5zZWxlY3QpLCAuLi50aGlzLl9vcHRpb25zLm1hcCgob3B0aW9uKSA9PiBvcHRpb24uc2VsZWN0ZWRDbGljaykpKSxcbiAgICAgICAgZGVsYXkoMCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChfdmFsdWUpID0+IHtcbiAgICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gICAgICB9KTtcblxuICAgIGNvbWJpbmVMYXRlc3QoW29wdGlvbnNDaGFuZ2VzJCwgdGhpcy5oaWdobGlnaHRlZE9wdGlvbkluZGV4JF0pXG4gICAgICAucGlwZShcbiAgICAgICAgZGVsYXkoMCksXG4gICAgICAgIG1hcCgoW29wdGlvbnMsIGluZGV4XTogW09wdGlvbkNvbXBvbmVudFtdLCBudW1iZXJdKSA9PiBvcHRpb25zW2luZGV4XSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChvcHRpb25Ub0JlSGlnaGxpZ2h0ZWQpID0+IHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZvckVhY2goKG9wdGlvbikgPT4gb3B0aW9uLnNldEhpZ2hsaWdodGVkKG9wdGlvblRvQmVIaWdobGlnaHRlZCA9PT0gb3B0aW9uKSk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0aW9uLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG5cbiAgICBpZiAodGhpcy5jbG9zZU9uU2Nyb2xsKSB7XG4gICAgICBmcm9tRXZlbnQod2luZG93LCAnc2Nyb2xsJylcbiAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDEwMCksIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLm9wZW4gPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnRyaWdnZXIuYmx1cigpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3llZCQubmV4dCgpO1xuICB9XG5cbiAgY2xvc2VEcm9wZG93bigpIHtcbiAgICB0aGlzLnRvb2x0aXBzLnRvQXJyYXkoKS5mb3JFYWNoKCh0b29sdGlwKSA9PiB0b29sdGlwLmhpZGUoKSk7XG4gICAgdGhpcy5vcGVuID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHNldEluaXRpYWxIaWdobGlnaHRpbmdJbmRleCgpIHtcbiAgICBjb25zdCBmaXJzdEF2YWlsYWJsZUluZGV4ID0gdGhpcy5vcHRpb25zLm1hcCgob3B0aW9uKSA9PiAhdGhpcy5vcHRpb25Jc0hpZ2hsaWdodGFibGUob3B0aW9uKSkuaW5kZXhPZihmYWxzZSwgMCk7XG4gICAgdGhpcy5oaWdobGlnaHRlZE9wdGlvbkluZGV4JC5uZXh0KGZpcnN0QXZhaWxhYmxlSW5kZXgpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmV2KGN1cnJlbnRJbmRleDogbnVtYmVyLCBpdGVtczogT3B0aW9uQ29tcG9uZW50W10pOiBudW1iZXIge1xuICAgIGlmIChjdXJyZW50SW5kZXggPiAwKSB7XG4gICAgICBjb25zdCBwcmV2RW5hYmxlZEluZGV4ID0gaXRlbXMubWFwKChvcHRpb24pID0+ICF0aGlzLm9wdGlvbklzSGlnaGxpZ2h0YWJsZShvcHRpb24pKS5sYXN0SW5kZXhPZihmYWxzZSwgY3VycmVudEluZGV4IC0gMSk7XG4gICAgICByZXR1cm4gcHJldkVuYWJsZWRJbmRleCAhPT0gLTEgPyBwcmV2RW5hYmxlZEluZGV4IDogY3VycmVudEluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY3VycmVudEluZGV4O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbmV4dChjdXJyZW50SW5kZXg6IG51bWJlciwgaXRlbXM6IE9wdGlvbkNvbXBvbmVudFtdKTogbnVtYmVyIHtcbiAgICBpZiAoY3VycmVudEluZGV4IDwgaXRlbXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBuZXh0RW5hYmxlZEluZGV4ID0gaXRlbXMubWFwKChvcHRpb24pID0+ICF0aGlzLm9wdGlvbklzSGlnaGxpZ2h0YWJsZShvcHRpb24pKS5pbmRleE9mKGZhbHNlLCBjdXJyZW50SW5kZXggKyAxKTtcbiAgICAgIHJldHVybiBuZXh0RW5hYmxlZEluZGV4ICE9PSAtMSA/IG5leHRFbmFibGVkSW5kZXggOiBjdXJyZW50SW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjdXJyZW50SW5kZXg7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBleHBhbmQoY3VycmVudEluZGV4OiBudW1iZXIsIGl0ZW1zOiBPcHRpb25Db21wb25lbnRbXSkge1xuICAgIGlmIChpdGVtc1tjdXJyZW50SW5kZXhdPy5oYXNTdWJkcm9wZG93bikge1xuICAgICAgdGhpcy5pc1N1YmRyb3Bkb3duRXhwYW5kZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMubmV4dChjdXJyZW50SW5kZXgsIGl0ZW1zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGN1cnJlbnRJbmRleDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbGxhcHNlKGN1cnJlbnRJbmRleDogbnVtYmVyLCBpdGVtczogT3B0aW9uQ29tcG9uZW50W10pIHtcbiAgICBpZiAodGhpcy5pc1N1YmRyb3Bkb3duRXhwYW5kZWQpIHtcbiAgICAgIHRoaXMuaXNTdWJkcm9wZG93bkV4cGFuZGVkID0gZmFsc2U7XG4gICAgICByZXR1cm4gdGhpcy5wcmV2KGN1cnJlbnRJbmRleCwgaXRlbXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY3VycmVudEluZGV4O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb3B0aW9uSXNIaWdobGlnaHRhYmxlKG9wdGlvbjogT3B0aW9uQ29tcG9uZW50KTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXNUb3BsZXZlbE9wdGlvbkFuZEFsbG93ZWQgPSAhb3B0aW9uLmlzU3Vib3B0aW9uICYmICF0aGlzLmlzU3ViZHJvcGRvd25FeHBhbmRlZDtcbiAgICBjb25zdCBpc1NlY29uZGxldmVsT3B0aW9uQW5kQWxsb3dlZCA9IG9wdGlvbi5pc1N1Ym9wdGlvbiAmJiB0aGlzLmlzU3ViZHJvcGRvd25FeHBhbmRlZDtcbiAgICByZXR1cm4gIW9wdGlvbi5kaXNhYmxlZCAmJiAoaXNUb3BsZXZlbE9wdGlvbkFuZEFsbG93ZWQgfHwgaXNTZWNvbmRsZXZlbE9wdGlvbkFuZEFsbG93ZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWxvYWRPdmVybGF5UG9zaXRpb24ob3BlbjogYm9vbGVhbikge1xuICAgIGlmIChvcGVuKSB7XG4gICAgICB0aGlzLmlzUG9zaXRpb25Db21wdXRlZCA9IGZhbHNlO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRyb3Bkb3duRWxlbWVudCA9IHRoaXMuZHJvcGRvd25Db250YWluZXIubmF0aXZlRWxlbWVudDtcblxuICAgICAgICB0aGlzLm92ZXJsYXkub3ZlcmxheVJlZi51cGRhdGVTaXplKHtcbiAgICAgICAgICBoZWlnaHQ6IGRyb3Bkb3duRWxlbWVudC5vZmZzZXRIZWlnaHQsXG4gICAgICAgICAgd2lkdGg6IGRyb3Bkb3duRWxlbWVudC5vZmZzZXRXaWR0aFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vdmVybGF5Lm92ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKTtcblxuICAgICAgICB0aGlzLmlzUG9zaXRpb25Db21wdXRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0aW9uLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSwgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0aW9uLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiAoY2xpY2spPVwib3BlbiA9ICFvcGVuXCIgY2xhc3M9XCJ0cmlnZ2VyQ29udGFpbmVyXCIgY2RrT3ZlcmxheU9yaWdpbiAjdHJpZ2dlcj1cImNka092ZXJsYXlPcmlnaW5cIj5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2x4S2V5Ym9hcmRBY3Rpb25Tb3VyY2VdXCI+PC9uZy1jb250ZW50PlxuPC9kaXY+XG48bmctdGVtcGxhdGVcbiAgY2RrQ29ubmVjdGVkT3ZlcmxheVxuICBbY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbl09XCJ0cmlnZ2VyXCJcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcGVuXT1cIm9wZW5cIlxuICAob3ZlcmxheU91dHNpZGVDbGljayk9XCJjbG9zZURyb3Bkb3duKClcIlxuPlxuICA8dWxcbiAgICAjZHJvcGRvd25cbiAgICBbY2xhc3Muc2hvd1Njcm9sbGJhcl09XCJtYXhIZWlnaHQgIT09ICdub25lJ1wiXG4gICAgW3N0eWxlLm1heC1oZWlnaHRdPVwibWF4SGVpZ2h0XCJcbiAgICBbc3R5bGUudmlzaWJpbGl0eV09XCJpc1Bvc2l0aW9uQ29tcHV0ZWQgPyBudWxsIDogJ2hpZGRlbidcIlxuICA+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8L3VsPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
import { __decorate } from "tslib";
|
|
2
|
-
import { ChangeDetectionStrategy, Component, EventEmitter, forwardRef, Input, Output, ViewChild } from '@angular/core';
|
|
3
|
-
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
4
|
-
import { fromEvent, ReplaySubject, Subject } from 'rxjs';
|
|
5
|
-
import { filter, takeUntil } from 'rxjs/operators';
|
|
6
|
-
import { Observe } from '../../../shared/observe';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "@angular/common";
|
|
9
|
-
import * as i2 from "@angular/forms";
|
|
10
|
-
import * as i3 from "./currency-symbol.component";
|
|
11
|
-
import * as i4 from "../../directives/mark-invalid.directive";
|
|
12
|
-
export class CurrencyInputComponent {
|
|
13
|
-
constructor(changeDetector) {
|
|
14
|
-
this.changeDetector = changeDetector;
|
|
15
|
-
this.decimalSeparator = '.';
|
|
16
|
-
this.data = 0;
|
|
17
|
-
this.disabled = false;
|
|
18
|
-
this.mode = 'edit';
|
|
19
|
-
this.iconPosition = 'first';
|
|
20
|
-
this.format = '1.2-2';
|
|
21
|
-
this.markInvalid = false;
|
|
22
|
-
this.onFocusLost = new EventEmitter();
|
|
23
|
-
this.onChange = new EventEmitter();
|
|
24
|
-
this.showCurrencyInput = false;
|
|
25
|
-
this.dataValue$ = new ReplaySubject();
|
|
26
|
-
this.destroyed$ = new Subject();
|
|
27
|
-
}
|
|
28
|
-
get allowedCharacters() {
|
|
29
|
-
return this.fieldDefinitionType === 'DOUBLE' ? new RegExp(`[0-9\e\\${this.decimalSeparator}\]`) : /[0-9\e\\]/;
|
|
30
|
-
}
|
|
31
|
-
ngOnInit() {
|
|
32
|
-
this.data$.pipe(takeUntil(this.destroyed$)).subscribe(this.dataValue$);
|
|
33
|
-
}
|
|
34
|
-
ngAfterViewInit() {
|
|
35
|
-
if (this.currencyInput) {
|
|
36
|
-
fromEvent(this.currencyInput.nativeElement, 'keypress')
|
|
37
|
-
.pipe(filter((keyboardEvent) => this.shouldRejectKey(keyboardEvent)), takeUntil(this.destroyed$))
|
|
38
|
-
.subscribe((keyboardEvent) => {
|
|
39
|
-
keyboardEvent.preventDefault();
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
ngOnDestroy() {
|
|
44
|
-
this.destroyed$.next();
|
|
45
|
-
}
|
|
46
|
-
valueChanged(value) {
|
|
47
|
-
if (typeof value === 'string') {
|
|
48
|
-
const invalidSeparator = this.decimalSeparator === '.' ? ',' : '.';
|
|
49
|
-
value = this.parseInput(value, invalidSeparator);
|
|
50
|
-
}
|
|
51
|
-
// fix copy & paste string values being interpreted wrongly
|
|
52
|
-
this.dataValue$.next(value);
|
|
53
|
-
this.onChange.emit(value);
|
|
54
|
-
this.propagateChange(value);
|
|
55
|
-
}
|
|
56
|
-
onBlur() {
|
|
57
|
-
this.showCurrencyInput = false;
|
|
58
|
-
this.onFocusLost.emit(true);
|
|
59
|
-
}
|
|
60
|
-
focusCurrencyInput() {
|
|
61
|
-
this.showCurrencyInput = true;
|
|
62
|
-
this.changeDetector.detectChanges();
|
|
63
|
-
this.currencyInput.nativeElement.focus();
|
|
64
|
-
this.currencyInput.nativeElement.setSelectionRange(0, 0);
|
|
65
|
-
}
|
|
66
|
-
shouldRejectKey(event) {
|
|
67
|
-
if (this.fieldDefinitionType === 'DOUBLE' && event.key === this.decimalSeparator) {
|
|
68
|
-
return this.containsSeparators(this.currencyInput.nativeElement.value);
|
|
69
|
-
}
|
|
70
|
-
return !this.allowedCharacters.test(event.key);
|
|
71
|
-
}
|
|
72
|
-
propagateChange(_newValue) { }
|
|
73
|
-
writeValue(newValue) {
|
|
74
|
-
this.dataValue$.next(newValue);
|
|
75
|
-
}
|
|
76
|
-
registerOnChange(fn) {
|
|
77
|
-
this.propagateChange = fn;
|
|
78
|
-
}
|
|
79
|
-
registerOnTouched(_fn) { }
|
|
80
|
-
setDisabledState(disabled) {
|
|
81
|
-
this.disabled = disabled;
|
|
82
|
-
}
|
|
83
|
-
parseInput(value, char) {
|
|
84
|
-
const countOccurences = value.split(char).length - 1;
|
|
85
|
-
if (countOccurences > 1) {
|
|
86
|
-
for (let i = 0; i < countOccurences; i++) {
|
|
87
|
-
value = value.replace(char, '');
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
const parsedValue = parseFloat(value.replace(',', '.').replace(/ /g, ''));
|
|
91
|
-
return isNaN(parsedValue) ? null : parsedValue;
|
|
92
|
-
}
|
|
93
|
-
containsSeparators(value) {
|
|
94
|
-
return value.indexOf(',') > -1 || value.indexOf('.') > -1;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
CurrencyInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: CurrencyInputComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
98
|
-
CurrencyInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.1", type: CurrencyInputComponent, selector: "lx-currency-input", inputs: { code: "code", decimalSeparator: "decimalSeparator", placeholder: "placeholder", data: "data", disabled: "disabled", mode: "mode", fieldDefinitionType: "fieldDefinitionType", iconPosition: "iconPosition", format: "format", markInvalid: "markInvalid" }, outputs: { onFocusLost: "onFocusLost", onChange: "onChange" }, providers: [
|
|
99
|
-
{
|
|
100
|
-
provide: NG_VALUE_ACCESSOR,
|
|
101
|
-
useExisting: forwardRef(() => CurrencyInputComponent),
|
|
102
|
-
multi: true
|
|
103
|
-
}
|
|
104
|
-
], viewQueries: [{ propertyName: "currencyInput", first: true, predicate: ["currencyInput"], descendants: true }], ngImport: i0, template: "<div *ngIf=\"mode === 'edit'\" class=\"container input-group\">\n <div *ngIf=\"iconPosition === 'first'\" class=\"labelContainer input-group-addon\">\n <lx-currency-symbol [code]=\"code\"></lx-currency-symbol>\n </div>\n <input\n [attr.disabled]=\"disabled ? true : null\"\n *ngIf=\"!showCurrencyInput\"\n type=\"text\"\n class=\"form-control currencyDisplayValue\"\n placeholder=\"{{ placeholder }}\"\n [lxMarkInvalid]=\"markInvalid\"\n [value]=\"dataValue$ | async | number : format\"\n (focus)=\"focusCurrencyInput()\"\n />\n <input\n autocomplete=\"off\"\n [attr.disabled]=\"disabled ? true : null\"\n [class.hideInput]=\"!showCurrencyInput\"\n type=\"text\"\n inputmode=\"numeric\"\n class=\"form-control currencyInput\"\n name=\"inputAmount\"\n #currencyInput\n placeholder=\"{{ placeholder }}\"\n [ngModel]=\"dataValue$ | async\"\n (blur)=\"onBlur()\"\n (ngModelChange)=\"valueChanged($event)\"\n />\n <div *ngIf=\"iconPosition === 'end'\" class=\"labelContainer input-group-addon\">\n <lx-currency-symbol [code]=\"code\"></lx-currency-symbol>\n </div>\n</div>\n<span *ngIf=\"mode === 'view'\" [class.placeholder]=\"(dataValue$ | async) === null && placeholder\">\n <!-- Not using Angular 2 currency pipe since a lot of currency symbols are missing: https://github.com/angular/angular/issues/6724 -->\n <lx-currency-symbol *ngIf=\"iconPosition === 'first'\" [code]=\"code\"></lx-currency-symbol>\n {{ (dataValue$ | async | number : format) || placeholder }}\n <lx-currency-symbol *ngIf=\"iconPosition === 'end'\" [code]=\"code\"></lx-currency-symbol>\n</span>\n", styles: [".container{width:100%!important;padding:0}.labelContainer{width:5%!important;min-width:40px}input{width:100%}.hideInput{display:none}.placeholder{color:#99a5bb}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.CurrencySymbolComponent, selector: "lx-currency-symbol", inputs: ["code"] }, { kind: "directive", type: i4.MarkInvalidDirective, selector: "[lxMarkInvalid]", inputs: ["lxMarkInvalid"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.DecimalPipe, name: "number" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
105
|
-
__decorate([
|
|
106
|
-
Observe('data')
|
|
107
|
-
], CurrencyInputComponent.prototype, "data$", void 0);
|
|
108
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: CurrencyInputComponent, decorators: [{
|
|
109
|
-
type: Component,
|
|
110
|
-
args: [{ selector: 'lx-currency-input', providers: [
|
|
111
|
-
{
|
|
112
|
-
provide: NG_VALUE_ACCESSOR,
|
|
113
|
-
useExisting: forwardRef(() => CurrencyInputComponent),
|
|
114
|
-
multi: true
|
|
115
|
-
}
|
|
116
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div *ngIf=\"mode === 'edit'\" class=\"container input-group\">\n <div *ngIf=\"iconPosition === 'first'\" class=\"labelContainer input-group-addon\">\n <lx-currency-symbol [code]=\"code\"></lx-currency-symbol>\n </div>\n <input\n [attr.disabled]=\"disabled ? true : null\"\n *ngIf=\"!showCurrencyInput\"\n type=\"text\"\n class=\"form-control currencyDisplayValue\"\n placeholder=\"{{ placeholder }}\"\n [lxMarkInvalid]=\"markInvalid\"\n [value]=\"dataValue$ | async | number : format\"\n (focus)=\"focusCurrencyInput()\"\n />\n <input\n autocomplete=\"off\"\n [attr.disabled]=\"disabled ? true : null\"\n [class.hideInput]=\"!showCurrencyInput\"\n type=\"text\"\n inputmode=\"numeric\"\n class=\"form-control currencyInput\"\n name=\"inputAmount\"\n #currencyInput\n placeholder=\"{{ placeholder }}\"\n [ngModel]=\"dataValue$ | async\"\n (blur)=\"onBlur()\"\n (ngModelChange)=\"valueChanged($event)\"\n />\n <div *ngIf=\"iconPosition === 'end'\" class=\"labelContainer input-group-addon\">\n <lx-currency-symbol [code]=\"code\"></lx-currency-symbol>\n </div>\n</div>\n<span *ngIf=\"mode === 'view'\" [class.placeholder]=\"(dataValue$ | async) === null && placeholder\">\n <!-- Not using Angular 2 currency pipe since a lot of currency symbols are missing: https://github.com/angular/angular/issues/6724 -->\n <lx-currency-symbol *ngIf=\"iconPosition === 'first'\" [code]=\"code\"></lx-currency-symbol>\n {{ (dataValue$ | async | number : format) || placeholder }}\n <lx-currency-symbol *ngIf=\"iconPosition === 'end'\" [code]=\"code\"></lx-currency-symbol>\n</span>\n", styles: [".container{width:100%!important;padding:0}.labelContainer{width:5%!important;min-width:40px}input{width:100%}.hideInput{display:none}.placeholder{color:#99a5bb}\n"] }]
|
|
117
|
-
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { code: [{
|
|
118
|
-
type: Input
|
|
119
|
-
}], decimalSeparator: [{
|
|
120
|
-
type: Input
|
|
121
|
-
}], placeholder: [{
|
|
122
|
-
type: Input
|
|
123
|
-
}], data: [{
|
|
124
|
-
type: Input
|
|
125
|
-
}], data$: [], disabled: [{
|
|
126
|
-
type: Input
|
|
127
|
-
}], mode: [{
|
|
128
|
-
type: Input
|
|
129
|
-
}], fieldDefinitionType: [{
|
|
130
|
-
type: Input
|
|
131
|
-
}], iconPosition: [{
|
|
132
|
-
type: Input
|
|
133
|
-
}], format: [{
|
|
134
|
-
type: Input
|
|
135
|
-
}], markInvalid: [{
|
|
136
|
-
type: Input
|
|
137
|
-
}], onFocusLost: [{
|
|
138
|
-
type: Output
|
|
139
|
-
}], onChange: [{
|
|
140
|
-
type: Output
|
|
141
|
-
}], currencyInput: [{
|
|
142
|
-
type: ViewChild,
|
|
143
|
-
args: ['currencyInput']
|
|
144
|
-
}] } });
|
|
145
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VycmVuY3ktaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3NyYy9saWIvZm9ybXMtdWkvY29tcG9uZW50cy9jdXJyZW5jeS9jdXJyZW5jeS1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvc3JjL2xpYi9mb3Jtcy11aS9jb21wb25lbnRzL2N1cnJlbmN5L2N1cnJlbmN5LWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsU0FBUyxFQUFjLGFBQWEsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckUsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7OztBQW9CbEQsTUFBTSxPQUFPLHNCQUFzQjtJQTJCakMsWUFBb0IsY0FBaUM7UUFBakMsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBekJyQyxxQkFBZ0IsR0FBcUIsR0FBRyxDQUFDO1FBRXpDLFNBQUksR0FBVyxDQUFDLENBQUM7UUFHakIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixTQUFJLEdBQXNCLE1BQU0sQ0FBQztRQUVqQyxpQkFBWSxHQUF5QixPQUFPLENBQUM7UUFDN0MsV0FBTSxHQUFXLE9BQU8sQ0FBQztRQUNoQyxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUVaLGdCQUFX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LENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVELENBQUM7O21IQTVHVSxzQkFBc0I7dUdBQXRCLHNCQUFzQixpWEFUdEI7UUFDVDtZQUNFLE9BQU8sRUFBRSxpQkFBaUI7WUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztZQUNyRCxLQUFLLEVBQUUsSUFBSTtTQUNaO0tBQ0YsMElDbENILGduREFzQ0E7QURJMkI7SUFBeEIsT0FBTyxDQUFTLE1BQU0sQ0FBQztxREFBNEI7MkZBTHpDLHNCQUFzQjtrQkFibEMsU0FBUzsrQkFDRSxtQkFBbUIsYUFHbEI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsdUJBQXVCLENBQUM7NEJBQ3JELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGLG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNO3dHQUcvQixJQUFJO3NCQUFuQixLQUFLO2dCQUNVLGdCQUFnQjtzQkFBL0IsS0FBSztnQkFDVSxXQUFXO3NCQUExQixLQUFLO2dCQUNVLElBQUk7c0JBQW5CLEtBQUs7Z0JBQ21CLEtBQUssTUFFZCxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLElBQUk7c0JBQW5CLEtBQUs7Z0JBQ1UsbUJBQW1CO3NCQUFsQyxLQUFLO2dCQUNVLFlBQVk7c0JBQTNCLEtBQUs7Z0JBQ1UsTUFBTTtzQkFBckIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVXLFdBQVc7c0JBQTNCLE1BQU07Z0JBQ1UsUUFBUTtzQkFBeEIsTUFBTTtnQkFFNkIsYUFBYTtzQkFBaEQsU0FBUzt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGZyb21FdmVudCwgT2JzZXJ2YWJsZSwgUmVwbGF5U3ViamVjdCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBPYnNlcnZlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL29ic2VydmUnO1xuXG5leHBvcnQgdHlwZSBDdXJyZW5jeUlucHV0TW9kZSA9ICd2aWV3JyB8ICdlZGl0JztcbmV4cG9ydCB0eXBlIEN1cnJlbmN5SWNvblBvc2l0aW9uID0gJ2ZpcnN0JyB8ICdlbmQnIHwgJ25vbmUnO1xuXG5leHBvcnQgdHlwZSBEZWNpbWFsU2VwYXJhdG9yID0gJywnIHwgJy4nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdseC1jdXJyZW5jeS1pbnB1dCcsXG4gIHRlbXBsYXRlVXJsOiAnY3VycmVuY3ktaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnY3VycmVuY3ktaW5wdXQuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDdXJyZW5jeUlucHV0Q29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBDdXJyZW5jeUlucHV0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0IHtcbiAgQElucHV0KCkgcHVibGljIGNvZGUhOiBzdHJpbmcgfCBudWxsO1xuICBASW5wdXQoKSBwdWJsaWMgZGVjaW1hbFNlcGFyYXRvcjogRGVjaW1hbFNlcGFyYXRvciA9ICcuJztcbiAgQElucHV0KCkgcHVibGljIHBsYWNlaG9sZGVyITogc3RyaW5nO1xuICBASW5wdXQoKSBwdWJsaWMgZGF0YTogbnVtYmVyID0gMDtcbiAgQE9ic2VydmU8bnVtYmVyPignZGF0YScpIGRhdGEkITogT2JzZXJ2YWJsZTxudW1iZXI+O1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgbW9kZTogQ3VycmVuY3lJbnB1dE1vZGUgPSAnZWRpdCc7XG4gIEBJbnB1dCgpIHB1YmxpYyBmaWVsZERlZmluaXRpb25UeXBlITogJ0RPVUJMRScgfCAnSU5URUdFUic7XG4gIEBJbnB1dCgpIHB1YmxpYyBpY29uUG9zaXRpb246IEN1cnJlbmN5SWNvblBvc2l0aW9uID0gJ2ZpcnN0JztcbiAgQElucHV0KCkgcHVibGljIGZvcm1hdDogc3RyaW5nID0gJzEuMi0yJztcbiAgQElucHV0KCkgbWFya0ludmFsaWQgPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgcHVibGljIG9uRm9jdXNMb3N0ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgcHVibGljIG9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgQFZpZXdDaGlsZCgnY3VycmVuY3lJbnB1dCcpIHByaXZhdGUgY3VycmVuY3lJbnB1dCE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG4gIHNob3dDdXJyZW5jeUlucHV0OiBib29sZWFuID0gZmFsc2U7XG4gIGRhdGFWYWx1ZSQgPSBuZXcgUmVwbGF5U3ViamVjdDxudW1iZXI+KCk7XG5cbiAgcHJpdmF0ZSBnZXQgYWxsb3dlZENoYXJhY3RlcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGREZWZpbml0aW9uVHlwZSA9PT0gJ0RPVUJMRScgPyBuZXcgUmVnRXhwKGBbMC05XFxlXFxcXCR7dGhpcy5kZWNpbWFsU2VwYXJhdG9yfVxcXWApIDogL1swLTlcXGVcXFxcXS87XG4gIH1cblxuICByZWFkb25seSBkZXN0cm95ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmRhdGEkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCkpLnN1YnNjcmliZSh0aGlzLmRhdGFWYWx1ZSQpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGlmICh0aGlzLmN1cnJlbmN5SW5wdXQpIHtcbiAgICAgIGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pih0aGlzLmN1cnJlbmN5SW5wdXQubmF0aXZlRWxlbWVudCwgJ2tleXByZXNzJylcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZmlsdGVyKChrZXlib2FyZEV2ZW50KSA9PiB0aGlzLnNob3VsZFJlamVjdEtleShrZXlib2FyZEV2ZW50KSksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChrZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAga2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3llZCQubmV4dCgpO1xuICB9XG5cbiAgdmFsdWVDaGFuZ2VkKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgaW52YWxpZFNlcGFyYXRvciA9IHRoaXMuZGVjaW1hbFNlcGFyYXRvciA9PT0gJy4nID8gJywnIDogJy4nO1xuICAgICAgdmFsdWUgPSB0aGlzLnBhcnNlSW5wdXQodmFsdWUsIGludmFsaWRTZXBhcmF0b3IpIGFzIG51bWJlcjtcbiAgICB9XG4gICAgLy8gZml4IGNvcHkgJiBwYXN0ZSBzdHJpbmcgdmFsdWVzIGJlaW5nIGludGVycHJldGVkIHdyb25nbHlcbiAgICB0aGlzLmRhdGFWYWx1ZSQubmV4dCh2YWx1ZSk7XG4gICAgdGhpcy5vbkNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh2YWx1ZSk7XG4gIH1cblxuICBvbkJsdXIoKSB7XG4gICAgdGhpcy5zaG93Q3VycmVuY3lJbnB1dCA9IGZhbHNlO1xuICAgIHRoaXMub25Gb2N1c0xvc3QuZW1pdCh0cnVlKTtcbiAgfVxuXG4gIGZvY3VzQ3VycmVuY3lJbnB1dCgpIHtcbiAgICB0aGlzLnNob3dDdXJyZW5jeUlucHV0ID0gdHJ1ZTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLmN1cnJlbmN5SW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIHRoaXMuY3VycmVuY3lJbnB1dC5uYXRpdmVFbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKDAsIDApO1xuICB9XG5cbiAgc2hvdWxkUmVqZWN0S2V5KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKHRoaXMuZmllbGREZWZpbml0aW9uVHlwZSA9PT0gJ0RPVUJMRScgJiYgZXZlbnQua2V5ID09PSB0aGlzLmRlY2ltYWxTZXBhcmF0b3IpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5zU2VwYXJhdG9ycyh0aGlzLmN1cnJlbmN5SW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiAhdGhpcy5hbGxvd2VkQ2hhcmFjdGVycy50ZXN0KGV2ZW50LmtleSk7XG4gIH1cblxuICBwcm9wYWdhdGVDaGFuZ2UoX25ld1ZhbHVlOiBudW1iZXIpIHt9XG5cbiAgd3JpdGVWYWx1ZShuZXdWYWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5kYXRhVmFsdWUkLm5leHQobmV3VmFsdWUpO1xuICB9XG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChfZm46IGFueSkge31cblxuICBzZXREaXNhYmxlZFN0YXRlKGRpc2FibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUlucHV0KHZhbHVlOiBzdHJpbmcsIGNoYXI6IHN0cmluZykge1xuICAgIGNvbnN0IGNvdW50T2NjdXJlbmNlcyA9IHZhbHVlLnNwbGl0KGNoYXIpLmxlbmd0aCAtIDE7XG4gICAgaWYgKGNvdW50T2NjdXJlbmNlcyA+IDEpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnRPY2N1cmVuY2VzOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKGNoYXIsICcnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlLnJlcGxhY2UoJywnLCAnLicpLnJlcGxhY2UoLyAvZywgJycpKTtcbiAgICByZXR1cm4gaXNOYU4ocGFyc2VkVmFsdWUpID8gbnVsbCA6IHBhcnNlZFZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBjb250YWluc1NlcGFyYXRvcnModmFsdWU6IHN0cmluZykge1xuICAgIHJldHVybiB2YWx1ZS5pbmRleE9mKCcsJykgPiAtMSB8fCB2YWx1ZS5pbmRleE9mKCcuJykgPiAtMTtcbiAgfVxufVxuIiwiPGRpdiAqbmdJZj1cIm1vZGUgPT09ICdlZGl0J1wiIGNsYXNzPVwiY29udGFpbmVyIGlucHV0LWdyb3VwXCI+XG4gIDxkaXYgKm5nSWY9XCJpY29uUG9zaXRpb24gPT09ICdmaXJzdCdcIiBjbGFzcz1cImxhYmVsQ29udGFpbmVyIGlucHV0LWdyb3VwLWFkZG9uXCI+XG4gICAgPGx4LWN1cnJlbmN5LXN5bWJvbCBbY29kZV09XCJjb2RlXCI+PC9seC1jdXJyZW5jeS1zeW1ib2w+XG4gIDwvZGl2PlxuICA8aW5wdXRcbiAgICBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZCA/IHRydWUgOiBudWxsXCJcbiAgICAqbmdJZj1cIiFzaG93Q3VycmVuY3lJbnB1dFwiXG4gICAgdHlwZT1cInRleHRcIlxuICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGN1cnJlbmN5RGlzcGxheVZhbHVlXCJcbiAgICBwbGFjZWhvbGRlcj1cInt7IHBsYWNlaG9sZGVyIH19XCJcbiAgICBbbHhNYXJrSW52YWxpZF09XCJtYXJrSW52YWxpZFwiXG4gICAgW3ZhbHVlXT1cImRhdGFWYWx1ZSQgfCBhc3luYyB8IG51bWJlciA6IGZvcm1hdFwiXG4gICAgKGZvY3VzKT1cImZvY3VzQ3VycmVuY3lJbnB1dCgpXCJcbiAgLz5cbiAgPGlucHV0XG4gICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZCA/IHRydWUgOiBudWxsXCJcbiAgICBbY2xhc3MuaGlkZUlucHV0XT1cIiFzaG93Q3VycmVuY3lJbnB1dFwiXG4gICAgdHlwZT1cInRleHRcIlxuICAgIGlucHV0bW9kZT1cIm51bWVyaWNcIlxuICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGN1cnJlbmN5SW5wdXRcIlxuICAgIG5hbWU9XCJpbnB1dEFtb3VudFwiXG4gICAgI2N1cnJlbmN5SW5wdXRcbiAgICBwbGFjZWhvbGRlcj1cInt7IHBsYWNlaG9sZGVyIH19XCJcbiAgICBbbmdNb2RlbF09XCJkYXRhVmFsdWUkIHwgYXN5bmNcIlxuICAgIChibHVyKT1cIm9uQmx1cigpXCJcbiAgICAobmdNb2RlbENoYW5nZSk9XCJ2YWx1ZUNoYW5nZWQoJGV2ZW50KVwiXG4gIC8+XG4gIDxkaXYgKm5nSWY9XCJpY29uUG9zaXRpb24gPT09ICdlbmQnXCIgY2xhc3M9XCJsYWJlbENvbnRhaW5lciBpbnB1dC1ncm91cC1hZGRvblwiPlxuICAgIDxseC1jdXJyZW5jeS1zeW1ib2wgW2NvZGVdPVwiY29kZVwiPjwvbHgtY3VycmVuY3ktc3ltYm9sPlxuICA8L2Rpdj5cbjwvZGl2PlxuPHNwYW4gKm5nSWY9XCJtb2RlID09PSAndmlldydcIiBbY2xhc3MucGxhY2Vob2xkZXJdPVwiKGRhdGFWYWx1ZSQgfCBhc3luYykgPT09IG51bGwgJiYgcGxhY2Vob2xkZXJcIj5cbiAgPCEtLSBOb3QgdXNpbmcgQW5ndWxhciAyIGN1cnJlbmN5IHBpcGUgc2luY2UgYSBsb3Qgb2YgY3VycmVuY3kgc3ltYm9scyBhcmUgbWlzc2luZzogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvNjcyNCAtLT5cbiAgPGx4LWN1cnJlbmN5LXN5bWJvbCAqbmdJZj1cImljb25Qb3NpdGlvbiA9PT0gJ2ZpcnN0J1wiIFtjb2RlXT1cImNvZGVcIj48L2x4LWN1cnJlbmN5LXN5bWJvbD5cbiAge3sgKGRhdGFWYWx1ZSQgfCBhc3luYyB8IG51bWJlciA6IGZvcm1hdCkgfHwgcGxhY2Vob2xkZXIgfX1cbiAgPGx4LWN1cnJlbmN5LXN5bWJvbCAqbmdJZj1cImljb25Qb3NpdGlvbiA9PT0gJ2VuZCdcIiBbY29kZV09XCJjb2RlXCI+PC9seC1jdXJyZW5jeS1zeW1ib2w+XG48L3NwYW4+XG4iXX0=
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { CommonModule } from '@angular/common';
|
|
2
|
-
import { NgModule } from '@angular/core';
|
|
3
|
-
import { FormsModule } from '@angular/forms';
|
|
4
|
-
import { DatePickerInnerComponent } from './datepicker-inner.component';
|
|
5
|
-
import { DatePickerComponent } from './datepicker.component';
|
|
6
|
-
import { DatepickerConfig } from './datepicker.config';
|
|
7
|
-
import { DayPickerComponent } from './daypicker.component';
|
|
8
|
-
import { MonthPickerComponent } from './monthpicker.component';
|
|
9
|
-
import { YearPickerComponent } from './yearpicker.component';
|
|
10
|
-
import * as i0 from "@angular/core";
|
|
11
|
-
export class DatepickerUiModule {
|
|
12
|
-
static forRoot() {
|
|
13
|
-
return { ngModule: DatepickerUiModule, providers: [DatepickerConfig] };
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
DatepickerUiModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: DatepickerUiModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
17
|
-
DatepickerUiModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.1.1", ngImport: i0, type: DatepickerUiModule, declarations: [DatePickerComponent, DatePickerInnerComponent, DayPickerComponent, MonthPickerComponent, YearPickerComponent], imports: [CommonModule, FormsModule], exports: [DatePickerComponent, DatePickerInnerComponent, DayPickerComponent, MonthPickerComponent, YearPickerComponent] });
|
|
18
|
-
DatepickerUiModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: DatepickerUiModule, imports: [CommonModule, FormsModule] });
|
|
19
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: DatepickerUiModule, decorators: [{
|
|
20
|
-
type: NgModule,
|
|
21
|
-
args: [{
|
|
22
|
-
imports: [CommonModule, FormsModule],
|
|
23
|
-
declarations: [DatePickerComponent, DatePickerInnerComponent, DayPickerComponent, MonthPickerComponent, YearPickerComponent],
|
|
24
|
-
exports: [DatePickerComponent, DatePickerInnerComponent, DayPickerComponent, MonthPickerComponent, YearPickerComponent],
|
|
25
|
-
entryComponents: [DatePickerComponent]
|
|
26
|
-
}]
|
|
27
|
-
}] });
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci11aS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvc3JjL2xpYi9mb3Jtcy11aS9jb21wb25lbnRzL2RhdGUtcGlja2VyLXVpL2RhdGVwaWNrZXItdWkubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQXVCLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDL0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7O0FBUTdELE1BQU0sT0FBTyxrQkFBa0I7SUFDN0IsTUFBTSxDQUFDLE9BQU87UUFDWixPQUFPLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztJQUN6RSxDQUFDOzsrR0FIVSxrQkFBa0I7Z0hBQWxCLGtCQUFrQixpQkFKZCxtQkFBbUIsRUFBRSx3QkFBd0IsRUFBRSxrQkFBa0IsRUFBRSxvQkFBb0IsRUFBRSxtQkFBbUIsYUFEakgsWUFBWSxFQUFFLFdBQVcsYUFFekIsbUJBQW1CLEVBQUUsd0JBQXdCLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUUsbUJBQW1CO2dIQUczRyxrQkFBa0IsWUFMbkIsWUFBWSxFQUFFLFdBQVc7MkZBS3hCLGtCQUFrQjtrQkFOOUIsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDO29CQUNwQyxZQUFZLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSx3QkFBd0IsRUFBRSxrQkFBa0IsRUFBRSxvQkFBb0IsRUFBRSxtQkFBbUIsQ0FBQztvQkFDNUgsT0FBTyxFQUFFLENBQUMsbUJBQW1CLEVBQUUsd0JBQXdCLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUUsbUJBQW1CLENBQUM7b0JBQ3ZILGVBQWUsRUFBRSxDQUFDLG1CQUFtQixDQUFDO2lCQUN2QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEYXRlUGlja2VySW5uZXJDb21wb25lbnQgfSBmcm9tICcuL2RhdGVwaWNrZXItaW5uZXIuY29tcG9uZW50JztcbmltcG9ydCB7IERhdGVQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuL2RhdGVwaWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7IERhdGVwaWNrZXJDb25maWcgfSBmcm9tICcuL2RhdGVwaWNrZXIuY29uZmlnJztcbmltcG9ydCB7IERheVBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4vZGF5cGlja2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNb250aFBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4vbW9udGhwaWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFllYXJQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuL3llYXJwaWNrZXIuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGVdLFxuICBkZWNsYXJhdGlvbnM6IFtEYXRlUGlja2VyQ29tcG9uZW50LCBEYXRlUGlja2VySW5uZXJDb21wb25lbnQsIERheVBpY2tlckNvbXBvbmVudCwgTW9udGhQaWNrZXJDb21wb25lbnQsIFllYXJQaWNrZXJDb21wb25lbnRdLFxuICBleHBvcnRzOiBbRGF0ZVBpY2tlckNvbXBvbmVudCwgRGF0ZVBpY2tlcklubmVyQ29tcG9uZW50LCBEYXlQaWNrZXJDb21wb25lbnQsIE1vbnRoUGlja2VyQ29tcG9uZW50LCBZZWFyUGlja2VyQ29tcG9uZW50XSxcbiAgZW50cnlDb21wb25lbnRzOiBbRGF0ZVBpY2tlckNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgRGF0ZXBpY2tlclVpTW9kdWxlIHtcbiAgc3RhdGljIGZvclJvb3QoKTogTW9kdWxlV2l0aFByb3ZpZGVyczxEYXRlcGlja2VyVWlNb2R1bGU+IHtcbiAgICByZXR1cm4geyBuZ01vZHVsZTogRGF0ZXBpY2tlclVpTW9kdWxlLCBwcm92aWRlcnM6IFtEYXRlcGlja2VyQ29uZmlnXSB9O1xuICB9XG59XG4iXX0=
|