@evotor-dev/ui-kit 7.1.0 → 7.2.0
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/README.md +71 -114
- package/esm2020/evotor-dev-ui-kit.mjs +4 -4
- package/esm2020/icons/category/evotor-dev-ui-kit-icons-category.mjs +4 -4
- package/esm2020/icons/category/index.mjs +61 -61
- package/esm2020/icons/emotions/evotor-dev-ui-kit-icons-emotions.mjs +4 -4
- package/esm2020/icons/emotions/index.mjs +17 -17
- package/esm2020/icons/evotor-dev-ui-kit-icons.mjs +4 -4
- package/esm2020/icons/header/evotor-dev-ui-kit-icons-header.mjs +4 -4
- package/esm2020/icons/header/index.mjs +27 -27
- package/esm2020/icons/index.mjs +8 -8
- package/esm2020/icons/info/evotor-dev-ui-kit-icons-info.mjs +4 -4
- package/esm2020/icons/info/index.mjs +39 -39
- package/esm2020/icons/navigation/evotor-dev-ui-kit-icons-navigation.mjs +4 -4
- package/esm2020/icons/navigation/index.mjs +56 -56
- package/esm2020/icons/side-menu/evotor-dev-ui-kit-icons-side-menu.mjs +4 -4
- package/esm2020/icons/side-menu/index.mjs +63 -63
- package/esm2020/icons/system/evotor-dev-ui-kit-icons-system.mjs +4 -4
- package/esm2020/icons/system/index.mjs +372 -372
- package/esm2020/lib/common/Serializable.mjs +5 -5
- package/esm2020/lib/common/animations/expand.animation.mjs +27 -27
- package/esm2020/lib/common/animations/index.mjs +3 -3
- package/esm2020/lib/common/animations/sidebar.animation.mjs +9 -9
- package/esm2020/lib/common/animations/skip-initial-render.animation.mjs +2 -2
- package/esm2020/lib/common/collection/evo-collection-fabric.mjs +9 -9
- package/esm2020/lib/common/collection/evo-collection.mjs +6 -6
- package/esm2020/lib/common/collection/index.mjs +2 -2
- package/esm2020/lib/common/constants/css-breakpoints.mjs +8 -8
- package/esm2020/lib/common/constants/view-breakpoint-streams.mjs +23 -23
- package/esm2020/lib/common/evo-base-control.mjs +45 -45
- package/esm2020/lib/common/evo-control-state-manager/evo-control-state-manager.mjs +12 -12
- package/esm2020/lib/common/evo-control-state-manager/evo-control-state.interface.mjs +1 -1
- package/esm2020/lib/common/evo-control-state-manager/evo-control-states.enum.mjs +5 -5
- package/esm2020/lib/common/form-helper/form-helper.mjs +30 -30
- package/esm2020/lib/common/types/evo-color.mjs +1 -1
- package/esm2020/lib/common/types/evo-size.mjs +1 -1
- package/esm2020/lib/common/types/index.mjs +2 -2
- package/esm2020/lib/components/evo-accordion/evo-accordion-content/evo-accordion-content.component.mjs +30 -30
- package/esm2020/lib/components/evo-accordion/evo-accordion-panel/evo-accordion-panel.component.mjs +18 -18
- package/esm2020/lib/components/evo-accordion/evo-accordion-title/evo-accordion-title.component.mjs +56 -56
- package/esm2020/lib/components/evo-accordion/evo-accordion.component.mjs +16 -16
- package/esm2020/lib/components/evo-accordion/evo-accordion.module.mjs +65 -65
- package/esm2020/lib/components/evo-accordion/index.mjs +1 -1
- package/esm2020/lib/components/evo-accordion/public-api.mjs +5 -5
- package/esm2020/lib/components/evo-alert/evo-alert.component.mjs +78 -78
- package/esm2020/lib/components/evo-alert/evo-alert.module.mjs +28 -28
- package/esm2020/lib/components/evo-alert/index.mjs +1 -1
- package/esm2020/lib/components/evo-alert/public-api.mjs +2 -2
- package/esm2020/lib/components/evo-autocomplete/components/evo-autocomplete.component.mjs +357 -357
- package/esm2020/lib/components/evo-autocomplete/components/templates/evo-autocomplete-default-option.component.mjs +42 -42
- package/esm2020/lib/components/evo-autocomplete/evo-autocomplete.module.mjs +57 -57
- package/esm2020/lib/components/evo-autocomplete/helpers/switch-query-to-list.mjs +6 -6
- package/esm2020/lib/components/evo-autocomplete/index.mjs +1 -1
- package/esm2020/lib/components/evo-autocomplete/models/DaDataParty.mjs +27 -27
- package/esm2020/lib/components/evo-autocomplete/models/dadata.model.mjs +47 -47
- package/esm2020/lib/components/evo-autocomplete/public-api.mjs +6 -6
- package/esm2020/lib/components/evo-autocomplete/types/evo-autocomplete-size.mjs +1 -1
- package/esm2020/lib/components/evo-badge/evo-badge.component.mjs +39 -39
- package/esm2020/lib/components/evo-badge/evo-badge.module.mjs +27 -27
- package/esm2020/lib/components/evo-badge/index.mjs +2 -2
- package/esm2020/lib/components/evo-badge/public-api.mjs +2 -2
- package/esm2020/lib/components/evo-badge/types/evo-badge-color.mjs +1 -1
- package/esm2020/lib/components/evo-badge/types/evo-badge-size.mjs +1 -1
- package/esm2020/lib/components/evo-badge/types/index.mjs +2 -2
- package/esm2020/lib/components/evo-banner/evo-banner.component.mjs +109 -109
- package/esm2020/lib/components/evo-banner/evo-banner.module.mjs +23 -23
- package/esm2020/lib/components/evo-banner/index.mjs +1 -1
- package/esm2020/lib/components/evo-banner/public-api.mjs +2 -2
- package/esm2020/lib/components/evo-button/components/evo-button/evo-button.component.mjs +86 -86
- package/esm2020/lib/components/evo-button/components/evo-button-old/evo-button-old.component.mjs +91 -91
- package/esm2020/lib/components/evo-button/constants/evo-button-themes-map.mjs +31 -31
- package/esm2020/lib/components/evo-button/evo-button.module.mjs +21 -21
- package/esm2020/lib/components/evo-button/index.mjs +1 -1
- package/esm2020/lib/components/evo-button/public-api.mjs +5 -5
- package/esm2020/lib/components/evo-button/types/evo-button-color.mjs +2 -2
- package/esm2020/lib/components/evo-button/types/evo-button-shape.mjs +2 -2
- package/esm2020/lib/components/evo-button/types/evo-button-size.mjs +2 -2
- package/esm2020/lib/components/evo-button/types/evo-button-theme-params.mjs +2 -2
- package/esm2020/lib/components/evo-button/types/evo-button-theme.mjs +2 -2
- package/esm2020/lib/components/evo-button/types/index.mjs +6 -6
- package/esm2020/lib/components/evo-checkbox/evo-checkbox.component.mjs +86 -86
- package/esm2020/lib/components/evo-checkbox/evo-checkbox.module.mjs +33 -33
- package/esm2020/lib/components/evo-checkbox/index.mjs +1 -1
- package/esm2020/lib/components/evo-checkbox/public-api.mjs +2 -2
- package/esm2020/lib/components/evo-chip/evo-chip.component.mjs +129 -129
- package/esm2020/lib/components/evo-chip/evo-chip.module.mjs +44 -44
- package/esm2020/lib/components/evo-chip/index.mjs +1 -1
- package/esm2020/lib/components/evo-chip/public-api.mjs +2 -2
- package/esm2020/lib/components/evo-control-error/evo-control-error.component.mjs +40 -40
- package/esm2020/lib/components/evo-control-error/evo-control-error.module.mjs +29 -29
- package/esm2020/lib/components/evo-control-error/index.mjs +1 -1
- package/esm2020/lib/components/evo-control-error/public-api.mjs +2 -2
- package/esm2020/lib/components/evo-control-label/evo-control-label.component.mjs +18 -18
- package/esm2020/lib/components/evo-control-label/evo-control-label.module.mjs +21 -21
- package/esm2020/lib/components/evo-control-label/index.mjs +1 -1
- package/esm2020/lib/components/evo-control-label/public-api.mjs +2 -2
- package/esm2020/lib/components/evo-counter/evo-counter.component.mjs +37 -37
- package/esm2020/lib/components/evo-counter/evo-counter.module.mjs +29 -29
- package/esm2020/lib/components/evo-counter/index.mjs +1 -1
- package/esm2020/lib/components/evo-counter/public-api.mjs +2 -2
- package/esm2020/lib/components/evo-datepicker/evo-datepicker.component.mjs +554 -554
- package/esm2020/lib/components/evo-datepicker/evo-datepicker.module.mjs +33 -33
- package/esm2020/lib/components/evo-datepicker/flatpickr-options.interface.mjs +1 -1
- package/esm2020/lib/components/evo-datepicker/index.mjs +1 -1
- package/esm2020/lib/components/evo-datepicker/public-api.mjs +2 -2
- package/esm2020/lib/components/evo-datepicker/templates/index.mjs +19 -19
- package/esm2020/lib/components/evo-dropdown/evo-dropdown-origin.directive.mjs +40 -40
- package/esm2020/lib/components/evo-dropdown/evo-dropdown-position-description.mjs +50 -50
- package/esm2020/lib/components/evo-dropdown/evo-dropdown.component.mjs +106 -106
- package/esm2020/lib/components/evo-dropdown/evo-dropdown.module.mjs +19 -19
- package/esm2020/lib/components/evo-dropdown/index.mjs +1 -1
- package/esm2020/lib/components/evo-dropdown/public-api.mjs +4 -4
- package/esm2020/lib/components/evo-dropdown/types/evo-dropdown-positions.mjs +1 -1
- package/esm2020/lib/components/evo-icon/classes/evo-icons-library.mjs +18 -18
- package/esm2020/lib/components/evo-icon/evo-icon.component.mjs +56 -56
- package/esm2020/lib/components/evo-icon/evo-icon.module.mjs +56 -56
- package/esm2020/lib/components/evo-icon/index.mjs +1 -1
- package/esm2020/lib/components/evo-icon/interfaces/icons-category.mjs +1 -1
- package/esm2020/lib/components/evo-icon/interfaces/icons-source.mjs +1 -1
- package/esm2020/lib/components/evo-icon/public-api.mjs +5 -5
- package/esm2020/lib/components/evo-icon-button/evo-icon-button.component.mjs +64 -64
- package/esm2020/lib/components/evo-icon-button/evo-icon-button.module.mjs +25 -25
- package/esm2020/lib/components/evo-icon-button/index.mjs +1 -1
- package/esm2020/lib/components/evo-icon-button/public-api.mjs +2 -2
- package/esm2020/lib/components/evo-icon-button/types/evo-icon-button-size.mjs +1 -1
- package/esm2020/lib/components/evo-icon-button/types/evo-icon-button-theme.mjs +1 -1
- package/esm2020/lib/components/evo-icon-number/components/evo-icon-number/evo-icon-number.component.mjs +13 -13
- package/esm2020/lib/components/evo-icon-number/evo-icon-number.module.mjs +17 -17
- package/esm2020/lib/components/evo-icon-number/index.mjs +1 -1
- package/esm2020/lib/components/evo-icon-number/public-api.mjs +2 -2
- package/esm2020/lib/components/evo-input/evo-input-icon/evo-input-icon.directive.mjs +12 -12
- package/esm2020/lib/components/evo-input/evo-input.component.mjs +358 -358
- package/esm2020/lib/components/evo-input/evo-input.module.mjs +65 -65
- package/esm2020/lib/components/evo-input/index.mjs +1 -1
- package/esm2020/lib/components/evo-input/public-api.mjs +3 -3
- package/esm2020/lib/components/evo-input-contenteditable/evo-input-contenteditable.component.mjs +149 -149
- package/esm2020/lib/components/evo-input-contenteditable/evo-input-contenteditable.module.mjs +33 -33
- package/esm2020/lib/components/evo-input-contenteditable/index.mjs +1 -1
- package/esm2020/lib/components/evo-input-contenteditable/public-api.mjs +2 -2
- package/esm2020/lib/components/evo-input-contenteditable/utils/clear-multiline.mjs +6 -6
- package/esm2020/lib/components/evo-loader/evo-circular-loader.component.mjs +18 -18
- package/esm2020/lib/components/evo-loader/evo-loader.component.mjs +27 -27
- package/esm2020/lib/components/evo-loader/evo-loader.module.mjs +32 -32
- package/esm2020/lib/components/evo-loader/index.mjs +1 -1
- package/esm2020/lib/components/evo-loader/public-api.mjs +3 -3
- package/esm2020/lib/components/evo-modal/evo-modal.component.mjs +127 -127
- package/esm2020/lib/components/evo-modal/evo-modal.module.mjs +31 -31
- package/esm2020/lib/components/evo-modal/evo-modal.service.mjs +31 -31
- package/esm2020/lib/components/evo-modal/index.mjs +1 -1
- package/esm2020/lib/components/evo-modal/public-api.mjs +3 -3
- package/esm2020/lib/components/evo-navbar/evo-navbar-item/evo-navbar-item.component.mjs +57 -57
- package/esm2020/lib/components/evo-navbar/evo-navbar.component.mjs +45 -45
- package/esm2020/lib/components/evo-navbar/evo-navbar.module.mjs +23 -23
- package/esm2020/lib/components/evo-navbar/index.mjs +1 -1
- package/esm2020/lib/components/evo-navbar/interfaces/nav-item-main-info.mjs +1 -1
- package/esm2020/lib/components/evo-navbar/interfaces/nav-item-router-link.mjs +1 -1
- package/esm2020/lib/components/evo-navbar/interfaces/nav-item.href.mjs +1 -1
- package/esm2020/lib/components/evo-navbar/public-api.mjs +3 -3
- package/esm2020/lib/components/evo-navbar/types/nav-item.mjs +1 -1
- package/esm2020/lib/components/evo-navigation-button/evo-navigation-button.component.mjs +12 -12
- package/esm2020/lib/components/evo-navigation-button/evo-navigation-button.module.mjs +45 -45
- package/esm2020/lib/components/evo-navigation-button/index.mjs +2 -2
- package/esm2020/lib/components/evo-navigation-button/public-api.mjs +3 -3
- package/esm2020/lib/components/evo-note/evo-note.component.mjs +39 -39
- package/esm2020/lib/components/evo-note/evo-note.module.mjs +44 -44
- package/esm2020/lib/components/evo-note/index.mjs +1 -1
- package/esm2020/lib/components/evo-note/public.api.mjs +3 -3
- package/esm2020/lib/components/evo-note/types/evo-note-type.mjs +1 -1
- package/esm2020/lib/components/evo-paginator/evo-paginator.component.mjs +107 -107
- package/esm2020/lib/components/evo-paginator/evo-paginator.module.mjs +21 -21
- package/esm2020/lib/components/evo-paginator/index.mjs +1 -1
- package/esm2020/lib/components/evo-paginator/public-api.mjs +2 -2
- package/esm2020/lib/components/evo-plus-minus/evo-plus-minus.component.mjs +25 -25
- package/esm2020/lib/components/evo-plus-minus/evo-plus-minus.module.mjs +21 -21
- package/esm2020/lib/components/evo-plus-minus/index.mjs +1 -1
- package/esm2020/lib/components/evo-plus-minus/public-api.mjs +2 -2
- package/esm2020/lib/components/evo-popover/evo-popover.component.mjs +173 -173
- package/esm2020/lib/components/evo-popover/evo-popover.module.mjs +25 -25
- package/esm2020/lib/components/evo-popover/index.mjs +1 -1
- package/esm2020/lib/components/evo-popover/public-api.mjs +2 -2
- package/esm2020/lib/components/evo-portal/evo-portal-outlet.class.mjs +6 -6
- package/esm2020/lib/components/evo-portal/evo-portal-outlet.directive.mjs +18 -18
- package/esm2020/lib/components/evo-portal/evo-portal.module.mjs +31 -31
- package/esm2020/lib/components/evo-portal/evo-portal.service.mjs +91 -91
- package/esm2020/lib/components/evo-portal/index.mjs +1 -1
- package/esm2020/lib/components/evo-portal/public-api.mjs +4 -4
- package/esm2020/lib/components/evo-radio/evo-radio.component.mjs +50 -50
- package/esm2020/lib/components/evo-radio/evo-radio.module.mjs +25 -25
- package/esm2020/lib/components/evo-radio/index.mjs +1 -1
- package/esm2020/lib/components/evo-radio/public-api.mjs +2 -2
- package/esm2020/lib/components/evo-radio-group/evo-radio-group.component.mjs +122 -122
- package/esm2020/lib/components/evo-radio-group/evo-radio-group.module.mjs +33 -33
- package/esm2020/lib/components/evo-radio-group/index.mjs +1 -1
- package/esm2020/lib/components/evo-radio-group/public-api.mjs +2 -2
- package/esm2020/lib/components/evo-radio-group/typings/options.mjs +1 -1
- package/esm2020/lib/components/evo-radioshape/components/evo-radioshape.component.mjs +55 -55
- package/esm2020/lib/components/evo-radioshape/evo-radioshape.module.mjs +32 -32
- package/esm2020/lib/components/evo-radioshape/index.mjs +1 -1
- package/esm2020/lib/components/evo-radioshape/public-api.mjs +2 -2
- package/esm2020/lib/components/evo-segmented-bar/evo-segmented-bar/evo-segmented-bar.component.mjs +21 -21
- package/esm2020/lib/components/evo-segmented-bar/evo-segmented-bar-button/evo-segmented-bar-button.component.mjs +77 -77
- package/esm2020/lib/components/evo-segmented-bar/evo-segmented-bar.module.mjs +24 -24
- package/esm2020/lib/components/evo-segmented-bar/index.mjs +1 -1
- package/esm2020/lib/components/evo-segmented-bar/public-api.mjs +3 -3
- package/esm2020/lib/components/evo-select/evo-select.component.mjs +115 -115
- package/esm2020/lib/components/evo-select/evo-select.module.mjs +33 -33
- package/esm2020/lib/components/evo-select/index.mjs +1 -1
- package/esm2020/lib/components/evo-select/public-api.mjs +2 -2
- package/esm2020/lib/components/evo-sidebar/enums/evo-sidebar-close-targets.mjs +7 -7
- package/esm2020/lib/components/evo-sidebar/enums/evo-sidebar-sizes.mjs +6 -6
- package/esm2020/lib/components/evo-sidebar/enums/evo-sidebar-states.mjs +5 -5
- package/esm2020/lib/components/evo-sidebar/evo-sidebar-content/evo-sidebar-content.component.mjs +32 -32
- package/esm2020/lib/components/evo-sidebar/evo-sidebar-footer/evo-sidebar-footer.component.mjs +12 -12
- package/esm2020/lib/components/evo-sidebar/evo-sidebar-header/evo-sidebar-header.component.mjs +39 -39
- package/esm2020/lib/components/evo-sidebar/evo-sidebar-portal.mjs +20 -20
- package/esm2020/lib/components/evo-sidebar/evo-sidebar.component.mjs +172 -172
- package/esm2020/lib/components/evo-sidebar/evo-sidebar.module.mjs +89 -89
- package/esm2020/lib/components/evo-sidebar/evo-sidebar.service.mjs +104 -104
- package/esm2020/lib/components/evo-sidebar/index.mjs +1 -1
- package/esm2020/lib/components/evo-sidebar/interfaces.mjs +1 -1
- package/esm2020/lib/components/evo-sidebar/public-api.mjs +11 -11
- package/esm2020/lib/components/evo-sidebar/sidebar-injection-token.mjs +2 -2
- package/esm2020/lib/components/evo-sidebar/tokens.mjs +11 -11
- package/esm2020/lib/components/evo-stepper/evo-stepper-events.mjs +24 -24
- package/esm2020/lib/components/evo-stepper/evo-stepper-item/evo-stepper-item.component.mjs +30 -30
- package/esm2020/lib/components/evo-stepper/evo-stepper.component.mjs +66 -66
- package/esm2020/lib/components/evo-stepper/evo-stepper.module.mjs +26 -26
- package/esm2020/lib/components/evo-stepper/index.mjs +1 -1
- package/esm2020/lib/components/evo-stepper/public-api.mjs +3 -3
- package/esm2020/lib/components/evo-submenu/evo-submenu.component.mjs +159 -159
- package/esm2020/lib/components/evo-submenu/evo-submenu.module.mjs +26 -26
- package/esm2020/lib/components/evo-submenu/index.mjs +1 -1
- package/esm2020/lib/components/evo-submenu/public-api.mjs +2 -2
- package/esm2020/lib/components/evo-switcher/components/evo-switcher-item/evo-switcher-item.component.mjs +10 -10
- package/esm2020/lib/components/evo-switcher/evo-switcher.component.mjs +31 -31
- package/esm2020/lib/components/evo-switcher/evo-switcher.module.mjs +26 -26
- package/esm2020/lib/components/evo-switcher/index.mjs +1 -1
- package/esm2020/lib/components/evo-switcher/public-api.mjs +3 -3
- package/esm2020/lib/components/evo-table/evo-table/evo-table.component.mjs +66 -66
- package/esm2020/lib/components/evo-table/evo-table-column/evo-table-column.component.mjs +30 -30
- package/esm2020/lib/components/evo-table/evo-table.module.mjs +22 -22
- package/esm2020/lib/components/evo-table/index.mjs +1 -1
- package/esm2020/lib/components/evo-table/public-api.mjs +3 -3
- package/esm2020/lib/components/evo-tabs/enums/evo-tabs-size.mjs +5 -5
- package/esm2020/lib/components/evo-tabs/evo-tab/evo-tab.component.mjs +87 -87
- package/esm2020/lib/components/evo-tabs/evo-tab-content/evo-tab-content.component.mjs +36 -36
- package/esm2020/lib/components/evo-tabs/evo-tab-state.collection.mjs +42 -42
- package/esm2020/lib/components/evo-tabs/evo-tabs-size.service.mjs +23 -23
- package/esm2020/lib/components/evo-tabs/evo-tabs.component.mjs +82 -82
- package/esm2020/lib/components/evo-tabs/evo-tabs.module.mjs +29 -29
- package/esm2020/lib/components/evo-tabs/evo-tabs.service.mjs +66 -66
- package/esm2020/lib/components/evo-tabs/index.mjs +1 -1
- package/esm2020/lib/components/evo-tabs/public-api.mjs +8 -8
- package/esm2020/lib/components/evo-textarea/evo-textarea.component.mjs +78 -78
- package/esm2020/lib/components/evo-textarea/evo-textarea.module.mjs +36 -36
- package/esm2020/lib/components/evo-textarea/index.mjs +1 -1
- package/esm2020/lib/components/evo-textarea/public-api.mjs +2 -2
- package/esm2020/lib/components/evo-toast/evo-toast.component.mjs +97 -97
- package/esm2020/lib/components/evo-toast/evo-toast.module.mjs +44 -44
- package/esm2020/lib/components/evo-toast/evo-toast.service.mjs +48 -48
- package/esm2020/lib/components/evo-toast/index.mjs +1 -1
- package/esm2020/lib/components/evo-toast/public-api.mjs +3 -3
- package/esm2020/lib/components/evo-toggle/evo-toggle.component.mjs +63 -63
- package/esm2020/lib/components/evo-toggle/evo-toggle.module.mjs +29 -29
- package/esm2020/lib/components/evo-toggle/index.mjs +1 -1
- package/esm2020/lib/components/evo-toggle/public-api.mjs +2 -2
- package/esm2020/lib/components/evo-upload/evo-upload.component.mjs +287 -287
- package/esm2020/lib/components/evo-upload/evo-upload.module.mjs +58 -58
- package/esm2020/lib/components/evo-upload/index.mjs +1 -1
- package/esm2020/lib/components/evo-upload/public-api.mjs +2 -2
- package/esm2020/lib/decorators/deprecate-method.decorator.mjs +7 -7
- package/esm2020/lib/decorators/deprecate-variable.decorator.mjs +16 -16
- package/esm2020/lib/decorators/index.mjs +1 -1
- package/esm2020/lib/decorators/public-api.mjs +2 -2
- package/esm2020/lib/directives/evo-click-outside.directive.mjs +39 -39
- package/esm2020/lib/directives/evo-is-expanded.directive.mjs +70 -70
- package/esm2020/lib/directives/evo-let/evo-let.directive.mjs +45 -45
- package/esm2020/lib/directives/evo-ui-class.directive.mjs +158 -158
- package/esm2020/lib/directives/index.mjs +1 -1
- package/esm2020/lib/directives/public-api.mjs +4 -4
- package/esm2020/lib/evo-ui-kit.module.mjs +64 -64
- package/esm2020/lib/operators/enter-zone.operator.mjs +8 -8
- package/esm2020/lib/operators/index.mjs +1 -1
- package/esm2020/lib/operators/public-api.mjs +1 -1
- package/esm2020/lib/pipes/declination.pipe.mjs +39 -39
- package/esm2020/lib/pipes/evo-pipes.module.mjs +16 -16
- package/esm2020/lib/pipes/index.mjs +1 -1
- package/esm2020/lib/pipes/public-api.mjs +3 -3
- package/esm2020/lib/pipes/safe-html.pipe.mjs +17 -17
- package/esm2020/lib/services/evo-expanded.service.mjs +22 -22
- package/esm2020/lib/services/index.mjs +1 -1
- package/esm2020/lib/services/public-api.mjs +1 -1
- package/esm2020/lib/services/window.service.mjs +48 -48
- package/esm2020/public_api.mjs +74 -74
- package/evotor-dev-ui-kit.d.ts +5 -5
- package/fesm2015/evotor-dev-ui-kit-icons-category.mjs +62 -62
- package/fesm2015/evotor-dev-ui-kit-icons-emotions.mjs +18 -18
- package/fesm2015/evotor-dev-ui-kit-icons-header.mjs +28 -28
- package/fesm2015/evotor-dev-ui-kit-icons-info.mjs +40 -40
- package/fesm2015/evotor-dev-ui-kit-icons-navigation.mjs +56 -56
- package/fesm2015/evotor-dev-ui-kit-icons-navigation.mjs.map +1 -1
- package/fesm2015/evotor-dev-ui-kit-icons-side-menu.mjs +64 -64
- package/fesm2015/evotor-dev-ui-kit-icons-system.mjs +372 -372
- package/fesm2015/evotor-dev-ui-kit-icons-system.mjs.map +1 -1
- package/fesm2015/evotor-dev-ui-kit-icons.mjs +628 -628
- package/fesm2015/evotor-dev-ui-kit-icons.mjs.map +1 -1
- package/fesm2015/evotor-dev-ui-kit.mjs +7041 -7041
- package/fesm2015/evotor-dev-ui-kit.mjs.map +1 -1
- package/fesm2020/evotor-dev-ui-kit-icons-category.mjs +62 -62
- package/fesm2020/evotor-dev-ui-kit-icons-emotions.mjs +18 -18
- package/fesm2020/evotor-dev-ui-kit-icons-header.mjs +28 -28
- package/fesm2020/evotor-dev-ui-kit-icons-info.mjs +40 -40
- package/fesm2020/evotor-dev-ui-kit-icons-navigation.mjs +56 -56
- package/fesm2020/evotor-dev-ui-kit-icons-navigation.mjs.map +1 -1
- package/fesm2020/evotor-dev-ui-kit-icons-side-menu.mjs +64 -64
- package/fesm2020/evotor-dev-ui-kit-icons-system.mjs +372 -372
- package/fesm2020/evotor-dev-ui-kit-icons-system.mjs.map +1 -1
- package/fesm2020/evotor-dev-ui-kit-icons.mjs +628 -628
- package/fesm2020/evotor-dev-ui-kit-icons.mjs.map +1 -1
- package/fesm2020/evotor-dev-ui-kit.mjs +7021 -7021
- package/fesm2020/evotor-dev-ui-kit.mjs.map +1 -1
- package/icons/category/evotor-dev-ui-kit-icons-category.d.ts +5 -5
- package/icons/category/index.d.ts +59 -59
- package/icons/emotions/evotor-dev-ui-kit-icons-emotions.d.ts +5 -5
- package/icons/emotions/index.d.ts +15 -15
- package/icons/evotor-dev-ui-kit-icons.d.ts +5 -5
- package/icons/header/evotor-dev-ui-kit-icons-header.d.ts +5 -5
- package/icons/header/index.d.ts +25 -25
- package/icons/index.d.ts +321 -321
- package/icons/info/evotor-dev-ui-kit-icons-info.d.ts +5 -5
- package/icons/info/index.d.ts +37 -37
- package/icons/navigation/evotor-dev-ui-kit-icons-navigation.d.ts +5 -5
- package/icons/navigation/index.d.ts +53 -53
- package/icons/side-menu/evotor-dev-ui-kit-icons-side-menu.d.ts +5 -5
- package/icons/side-menu/index.d.ts +61 -61
- package/icons/system/evotor-dev-ui-kit-icons-system.d.ts +5 -5
- package/icons/system/index.d.ts +369 -369
- package/lib/common/Serializable.d.ts +3 -3
- package/lib/common/animations/expand.animation.d.ts +1 -1
- package/lib/common/animations/index.d.ts +3 -3
- package/lib/common/animations/sidebar.animation.d.ts +2 -2
- package/lib/common/animations/skip-initial-render.animation.d.ts +1 -1
- package/lib/common/collection/evo-collection-fabric.d.ts +4 -4
- package/lib/common/collection/evo-collection.d.ts +3 -3
- package/lib/common/collection/index.d.ts +2 -2
- package/lib/common/constants/css-breakpoints.d.ts +8 -8
- package/lib/common/constants/view-breakpoint-streams.d.ts +9 -9
- package/lib/common/evo-base-control.d.ts +21 -21
- package/lib/common/evo-control-state-manager/evo-control-state-manager.d.ts +7 -7
- package/lib/common/evo-control-state-manager/evo-control-state.interface.d.ts +5 -5
- package/lib/common/evo-control-state-manager/evo-control-states.enum.d.ts +4 -4
- package/lib/common/form-helper/form-helper.d.ts +5 -5
- package/lib/common/types/evo-color.d.ts +1 -1
- package/lib/common/types/evo-size.d.ts +1 -1
- package/lib/common/types/index.d.ts +2 -2
- package/lib/components/evo-accordion/evo-accordion-content/evo-accordion-content.component.d.ts +11 -11
- package/lib/components/evo-accordion/evo-accordion-panel/evo-accordion-panel.component.d.ts +9 -9
- package/lib/components/evo-accordion/evo-accordion-title/evo-accordion-title.component.d.ts +11 -11
- package/lib/components/evo-accordion/evo-accordion.component.d.ts +9 -9
- package/lib/components/evo-accordion/evo-accordion.module.d.ts +13 -13
- package/lib/components/evo-accordion/index.d.ts +1 -1
- package/lib/components/evo-accordion/public-api.d.ts +5 -5
- package/lib/components/evo-alert/evo-alert.component.d.ts +38 -38
- package/lib/components/evo-alert/evo-alert.module.d.ts +9 -9
- package/lib/components/evo-alert/index.d.ts +1 -1
- package/lib/components/evo-alert/public-api.d.ts +2 -2
- package/lib/components/evo-autocomplete/components/evo-autocomplete.component.d.ts +115 -115
- package/lib/components/evo-autocomplete/components/templates/evo-autocomplete-default-option.component.d.ts +16 -16
- package/lib/components/evo-autocomplete/evo-autocomplete.module.d.ts +15 -15
- package/lib/components/evo-autocomplete/helpers/switch-query-to-list.d.ts +2 -2
- package/lib/components/evo-autocomplete/index.d.ts +1 -1
- package/lib/components/evo-autocomplete/models/DaDataParty.d.ts +37 -37
- package/lib/components/evo-autocomplete/models/dadata.model.d.ts +320 -320
- package/lib/components/evo-autocomplete/public-api.d.ts +6 -6
- package/lib/components/evo-autocomplete/types/evo-autocomplete-size.d.ts +1 -1
- package/lib/components/evo-badge/evo-badge.component.d.ts +12 -12
- package/lib/components/evo-badge/evo-badge.module.d.ts +9 -9
- package/lib/components/evo-badge/index.d.ts +2 -2
- package/lib/components/evo-badge/public-api.d.ts +2 -2
- package/lib/components/evo-badge/types/evo-badge-color.d.ts +2 -2
- package/lib/components/evo-badge/types/evo-badge-size.d.ts +2 -2
- package/lib/components/evo-badge/types/index.d.ts +2 -2
- package/lib/components/evo-banner/evo-banner.component.d.ts +46 -46
- package/lib/components/evo-banner/evo-banner.module.d.ts +9 -9
- package/lib/components/evo-banner/index.d.ts +1 -1
- package/lib/components/evo-banner/public-api.d.ts +2 -2
- package/lib/components/evo-button/components/evo-button/evo-button.component.d.ts +24 -24
- package/lib/components/evo-button/components/evo-button-old/evo-button-old.component.d.ts +39 -39
- package/lib/components/evo-button/constants/evo-button-themes-map.d.ts +2 -2
- package/lib/components/evo-button/evo-button.module.d.ts +11 -11
- package/lib/components/evo-button/index.d.ts +1 -1
- package/lib/components/evo-button/public-api.d.ts +4 -4
- package/lib/components/evo-button/types/evo-button-color.d.ts +5 -5
- package/lib/components/evo-button/types/evo-button-shape.d.ts +4 -4
- package/lib/components/evo-button/types/evo-button-size.d.ts +5 -5
- package/lib/components/evo-button/types/evo-button-theme-params.d.ts +5 -5
- package/lib/components/evo-button/types/evo-button-theme.d.ts +1 -1
- package/lib/components/evo-button/types/index.d.ts +5 -5
- package/lib/components/evo-checkbox/evo-checkbox.component.d.ts +29 -29
- package/lib/components/evo-checkbox/evo-checkbox.module.d.ts +11 -11
- package/lib/components/evo-checkbox/index.d.ts +1 -1
- package/lib/components/evo-checkbox/public-api.d.ts +2 -2
- package/lib/components/evo-chip/evo-chip.component.d.ts +45 -45
- package/lib/components/evo-chip/evo-chip.module.d.ts +11 -11
- package/lib/components/evo-chip/index.d.ts +1 -1
- package/lib/components/evo-chip/public-api.d.ts +2 -2
- package/lib/components/evo-control-error/evo-control-error.component.d.ts +14 -14
- package/lib/components/evo-control-error/evo-control-error.module.d.ts +10 -10
- package/lib/components/evo-control-error/index.d.ts +1 -1
- package/lib/components/evo-control-error/public-api.d.ts +2 -2
- package/lib/components/evo-control-label/evo-control-label.component.d.ts +9 -9
- package/lib/components/evo-control-label/evo-control-label.module.d.ts +8 -8
- package/lib/components/evo-control-label/index.d.ts +1 -1
- package/lib/components/evo-control-label/public-api.d.ts +2 -2
- package/lib/components/evo-counter/evo-counter.component.d.ts +16 -16
- package/lib/components/evo-counter/evo-counter.module.d.ts +9 -9
- package/lib/components/evo-counter/index.d.ts +1 -1
- package/lib/components/evo-counter/public-api.d.ts +2 -2
- package/lib/components/evo-datepicker/evo-datepicker.component.d.ts +174 -174
- package/lib/components/evo-datepicker/evo-datepicker.module.d.ts +11 -11
- package/lib/components/evo-datepicker/flatpickr-options.interface.d.ts +10 -10
- package/lib/components/evo-datepicker/index.d.ts +1 -1
- package/lib/components/evo-datepicker/public-api.d.ts +2 -2
- package/lib/components/evo-datepicker/templates/index.d.ts +16 -16
- package/lib/components/evo-dropdown/evo-dropdown-origin.directive.d.ts +15 -15
- package/lib/components/evo-dropdown/evo-dropdown-position-description.d.ts +3 -3
- package/lib/components/evo-dropdown/evo-dropdown.component.d.ts +34 -34
- package/lib/components/evo-dropdown/evo-dropdown.module.d.ts +10 -10
- package/lib/components/evo-dropdown/index.d.ts +1 -1
- package/lib/components/evo-dropdown/public-api.d.ts +4 -4
- package/lib/components/evo-dropdown/types/evo-dropdown-positions.d.ts +1 -1
- package/lib/components/evo-icon/classes/evo-icons-library.d.ts +11 -11
- package/lib/components/evo-icon/evo-icon.component.d.ts +20 -20
- package/lib/components/evo-icon/evo-icon.module.d.ts +16 -16
- package/lib/components/evo-icon/index.d.ts +1 -1
- package/lib/components/evo-icon/interfaces/icons-category.d.ts +5 -5
- package/lib/components/evo-icon/interfaces/icons-source.d.ts +3 -3
- package/lib/components/evo-icon/public-api.d.ts +5 -5
- package/lib/components/evo-icon-button/evo-icon-button.component.d.ts +26 -26
- package/lib/components/evo-icon-button/evo-icon-button.module.d.ts +8 -8
- package/lib/components/evo-icon-button/index.d.ts +1 -1
- package/lib/components/evo-icon-button/public-api.d.ts +2 -2
- package/lib/components/evo-icon-button/types/evo-icon-button-size.d.ts +2 -2
- package/lib/components/evo-icon-button/types/evo-icon-button-theme.d.ts +1 -1
- package/lib/components/evo-icon-number/components/evo-icon-number/evo-icon-number.component.d.ts +6 -6
- package/lib/components/evo-icon-number/evo-icon-number.module.d.ts +8 -8
- package/lib/components/evo-icon-number/index.d.ts +1 -1
- package/lib/components/evo-icon-number/public-api.d.ts +2 -2
- package/lib/components/evo-input/evo-input-icon/evo-input-icon.directive.d.ts +5 -5
- package/lib/components/evo-input/evo-input.component.d.ts +93 -93
- package/lib/components/evo-input/evo-input.module.d.ts +14 -14
- package/lib/components/evo-input/index.d.ts +1 -1
- package/lib/components/evo-input/public-api.d.ts +3 -3
- package/lib/components/evo-input-contenteditable/evo-input-contenteditable.component.d.ts +44 -44
- package/lib/components/evo-input-contenteditable/evo-input-contenteditable.module.d.ts +10 -10
- package/lib/components/evo-input-contenteditable/index.d.ts +1 -1
- package/lib/components/evo-input-contenteditable/public-api.d.ts +2 -2
- package/lib/components/evo-input-contenteditable/utils/clear-multiline.d.ts +1 -1
- package/lib/components/evo-loader/evo-circular-loader.component.d.ts +8 -8
- package/lib/components/evo-loader/evo-loader.component.d.ts +14 -14
- package/lib/components/evo-loader/evo-loader.module.d.ts +10 -10
- package/lib/components/evo-loader/index.d.ts +1 -1
- package/lib/components/evo-loader/public-api.d.ts +3 -3
- package/lib/components/evo-modal/evo-modal.component.d.ts +41 -41
- package/lib/components/evo-modal/evo-modal.module.d.ts +10 -10
- package/lib/components/evo-modal/evo-modal.service.d.ts +22 -22
- package/lib/components/evo-modal/index.d.ts +1 -1
- package/lib/components/evo-modal/public-api.d.ts +3 -3
- package/lib/components/evo-navbar/evo-navbar-item/evo-navbar-item.component.d.ts +21 -21
- package/lib/components/evo-navbar/evo-navbar.component.d.ts +18 -18
- package/lib/components/evo-navbar/evo-navbar.module.d.ts +12 -12
- package/lib/components/evo-navbar/index.d.ts +1 -1
- package/lib/components/evo-navbar/interfaces/nav-item-main-info.d.ts +5 -5
- package/lib/components/evo-navbar/interfaces/nav-item-router-link.d.ts +14 -14
- package/lib/components/evo-navbar/interfaces/nav-item.href.d.ts +4 -4
- package/lib/components/evo-navbar/public-api.d.ts +7 -7
- package/lib/components/evo-navbar/types/nav-item.d.ts +4 -4
- package/lib/components/evo-navigation-button/evo-navigation-button.component.d.ts +5 -5
- package/lib/components/evo-navigation-button/evo-navigation-button.module.d.ts +9 -9
- package/lib/components/evo-navigation-button/index.d.ts +1 -1
- package/lib/components/evo-navigation-button/public-api.d.ts +2 -2
- package/lib/components/evo-note/evo-note.component.d.ts +13 -13
- package/lib/components/evo-note/evo-note.module.d.ts +10 -10
- package/lib/components/evo-note/index.d.ts +1 -1
- package/lib/components/evo-note/public.api.d.ts +3 -3
- package/lib/components/evo-note/types/evo-note-type.d.ts +1 -1
- package/lib/components/evo-paginator/evo-paginator.component.d.ts +26 -26
- package/lib/components/evo-paginator/evo-paginator.module.d.ts +8 -8
- package/lib/components/evo-paginator/index.d.ts +1 -1
- package/lib/components/evo-paginator/public-api.d.ts +2 -2
- package/lib/components/evo-plus-minus/evo-plus-minus.component.d.ts +13 -13
- package/lib/components/evo-plus-minus/evo-plus-minus.module.d.ts +8 -8
- package/lib/components/evo-plus-minus/index.d.ts +1 -1
- package/lib/components/evo-plus-minus/public-api.d.ts +2 -2
- package/lib/components/evo-popover/evo-popover.component.d.ts +43 -43
- package/lib/components/evo-popover/evo-popover.module.d.ts +9 -9
- package/lib/components/evo-popover/index.d.ts +1 -1
- package/lib/components/evo-popover/public-api.d.ts +2 -2
- package/lib/components/evo-portal/evo-portal-outlet.class.d.ts +6 -6
- package/lib/components/evo-portal/evo-portal-outlet.directive.d.ts +10 -10
- package/lib/components/evo-portal/evo-portal.module.d.ts +8 -8
- package/lib/components/evo-portal/evo-portal.service.d.ts +27 -27
- package/lib/components/evo-portal/index.d.ts +1 -1
- package/lib/components/evo-portal/public-api.d.ts +4 -4
- package/lib/components/evo-radio/evo-radio.component.d.ts +18 -18
- package/lib/components/evo-radio/evo-radio.module.d.ts +9 -9
- package/lib/components/evo-radio/index.d.ts +1 -1
- package/lib/components/evo-radio/public-api.d.ts +2 -2
- package/lib/components/evo-radio-group/evo-radio-group.component.d.ts +56 -56
- package/lib/components/evo-radio-group/evo-radio-group.module.d.ts +11 -11
- package/lib/components/evo-radio-group/index.d.ts +1 -1
- package/lib/components/evo-radio-group/public-api.d.ts +2 -2
- package/lib/components/evo-radio-group/typings/options.d.ts +6 -6
- package/lib/components/evo-radioshape/components/evo-radioshape.component.d.ts +19 -19
- package/lib/components/evo-radioshape/evo-radioshape.module.d.ts +9 -9
- package/lib/components/evo-radioshape/index.d.ts +1 -1
- package/lib/components/evo-radioshape/public-api.d.ts +2 -2
- package/lib/components/evo-segmented-bar/evo-segmented-bar/evo-segmented-bar.component.d.ts +10 -10
- package/lib/components/evo-segmented-bar/evo-segmented-bar-button/evo-segmented-bar-button.component.d.ts +22 -22
- package/lib/components/evo-segmented-bar/evo-segmented-bar.module.d.ts +11 -11
- package/lib/components/evo-segmented-bar/index.d.ts +1 -1
- package/lib/components/evo-segmented-bar/public-api.d.ts +3 -3
- package/lib/components/evo-select/evo-select.component.d.ts +37 -37
- package/lib/components/evo-select/evo-select.module.d.ts +11 -11
- package/lib/components/evo-select/index.d.ts +1 -1
- package/lib/components/evo-select/public-api.d.ts +2 -2
- package/lib/components/evo-sidebar/enums/evo-sidebar-close-targets.d.ts +6 -6
- package/lib/components/evo-sidebar/enums/evo-sidebar-sizes.d.ts +5 -5
- package/lib/components/evo-sidebar/enums/evo-sidebar-states.d.ts +4 -4
- package/lib/components/evo-sidebar/evo-sidebar-content/evo-sidebar-content.component.d.ts +12 -12
- package/lib/components/evo-sidebar/evo-sidebar-footer/evo-sidebar-footer.component.d.ts +5 -5
- package/lib/components/evo-sidebar/evo-sidebar-header/evo-sidebar-header.component.d.ts +13 -13
- package/lib/components/evo-sidebar/evo-sidebar-portal.d.ts +13 -13
- package/lib/components/evo-sidebar/evo-sidebar.component.d.ts +42 -42
- package/lib/components/evo-sidebar/evo-sidebar.module.d.ts +17 -17
- package/lib/components/evo-sidebar/evo-sidebar.service.d.ts +26 -26
- package/lib/components/evo-sidebar/index.d.ts +1 -1
- package/lib/components/evo-sidebar/interfaces.d.ts +23 -23
- package/lib/components/evo-sidebar/public-api.d.ts +11 -11
- package/lib/components/evo-sidebar/sidebar-injection-token.d.ts +2 -2
- package/lib/components/evo-sidebar/tokens.d.ts +7 -7
- package/lib/components/evo-stepper/evo-stepper-events.d.ts +12 -12
- package/lib/components/evo-stepper/evo-stepper-item/evo-stepper-item.component.d.ts +13 -13
- package/lib/components/evo-stepper/evo-stepper.component.d.ts +27 -27
- package/lib/components/evo-stepper/evo-stepper.module.d.ts +10 -10
- package/lib/components/evo-stepper/index.d.ts +1 -1
- package/lib/components/evo-stepper/public-api.d.ts +3 -3
- package/lib/components/evo-submenu/evo-submenu.component.d.ts +49 -49
- package/lib/components/evo-submenu/evo-submenu.module.d.ts +11 -11
- package/lib/components/evo-submenu/index.d.ts +1 -1
- package/lib/components/evo-submenu/public-api.d.ts +2 -2
- package/lib/components/evo-switcher/components/evo-switcher-item/evo-switcher-item.component.d.ts +9 -9
- package/lib/components/evo-switcher/evo-switcher.component.d.ts +14 -14
- package/lib/components/evo-switcher/evo-switcher.module.d.ts +10 -10
- package/lib/components/evo-switcher/index.d.ts +1 -1
- package/lib/components/evo-switcher/public-api.d.ts +3 -3
- package/lib/components/evo-table/evo-table/evo-table.component.d.ts +35 -35
- package/lib/components/evo-table/evo-table-column/evo-table-column.component.d.ts +12 -12
- package/lib/components/evo-table/evo-table.module.d.ts +9 -9
- package/lib/components/evo-table/index.d.ts +1 -1
- package/lib/components/evo-table/public-api.d.ts +3 -3
- package/lib/components/evo-tabs/enums/evo-tabs-size.d.ts +4 -4
- package/lib/components/evo-tabs/evo-tab/evo-tab.component.d.ts +35 -35
- package/lib/components/evo-tabs/evo-tab-content/evo-tab-content.component.d.ts +16 -16
- package/lib/components/evo-tabs/evo-tab-state.collection.d.ts +15 -15
- package/lib/components/evo-tabs/evo-tabs-size.service.d.ts +12 -12
- package/lib/components/evo-tabs/evo-tabs.component.d.ts +22 -22
- package/lib/components/evo-tabs/evo-tabs.module.d.ts +11 -11
- package/lib/components/evo-tabs/evo-tabs.service.d.ts +19 -19
- package/lib/components/evo-tabs/index.d.ts +1 -1
- package/lib/components/evo-tabs/public-api.d.ts +8 -8
- package/lib/components/evo-textarea/evo-textarea.component.d.ts +25 -25
- package/lib/components/evo-textarea/evo-textarea.module.d.ts +11 -11
- package/lib/components/evo-textarea/index.d.ts +1 -1
- package/lib/components/evo-textarea/public-api.d.ts +2 -2
- package/lib/components/evo-toast/evo-toast.component.d.ts +23 -23
- package/lib/components/evo-toast/evo-toast.module.d.ts +10 -10
- package/lib/components/evo-toast/evo-toast.service.d.ts +22 -22
- package/lib/components/evo-toast/index.d.ts +1 -1
- package/lib/components/evo-toast/public-api.d.ts +3 -3
- package/lib/components/evo-toggle/evo-toggle.component.d.ts +20 -20
- package/lib/components/evo-toggle/evo-toggle.module.d.ts +10 -10
- package/lib/components/evo-toggle/index.d.ts +1 -1
- package/lib/components/evo-toggle/public-api.d.ts +2 -2
- package/lib/components/evo-upload/evo-upload.component.d.ts +65 -65
- package/lib/components/evo-upload/evo-upload.module.d.ts +13 -13
- package/lib/components/evo-upload/index.d.ts +1 -1
- package/lib/components/evo-upload/public-api.d.ts +2 -2
- package/lib/decorators/deprecate-method.decorator.d.ts +1 -1
- package/lib/decorators/deprecate-variable.decorator.d.ts +1 -1
- package/lib/decorators/index.d.ts +1 -1
- package/lib/decorators/public-api.d.ts +2 -2
- package/lib/directives/evo-click-outside.directive.d.ts +12 -12
- package/lib/directives/evo-is-expanded.directive.d.ts +19 -19
- package/lib/directives/evo-let/evo-let.directive.d.ts +33 -33
- package/lib/directives/evo-ui-class.directive.d.ts +61 -61
- package/lib/directives/index.d.ts +1 -1
- package/lib/directives/public-api.d.ts +4 -4
- package/lib/evo-ui-kit.module.d.ts +16 -16
- package/lib/operators/enter-zone.operator.d.ts +3 -3
- package/lib/operators/index.d.ts +1 -1
- package/lib/operators/public-api.d.ts +1 -1
- package/lib/pipes/declination.pipe.d.ts +7 -7
- package/lib/pipes/evo-pipes.module.d.ts +8 -8
- package/lib/pipes/index.d.ts +1 -1
- package/lib/pipes/public-api.d.ts +3 -3
- package/lib/pipes/safe-html.pipe.d.ts +10 -10
- package/lib/services/evo-expanded.service.d.ts +11 -11
- package/lib/services/index.d.ts +1 -1
- package/lib/services/public-api.d.ts +1 -1
- package/lib/services/window.service.d.ts +14 -14
- package/package.json +4 -2
- package/public_api.d.ts +63 -63
- package/styles/components/evo-button.scss +233 -233
- package/styles/components/evo-chip.scss +167 -167
- package/styles/components/evo-table.scss +42 -42
- package/styles/components/evo-title.scss +23 -23
- package/styles/globals.scss +78 -78
- package/styles/main.scss +24 -24
- package/styles/mixins/_evo-input-mixins.scss +74 -74
- package/styles/mixins/_evo-text-button-mixin.scss +24 -24
- package/styles/mixins/_evo-text-caption-mixin.scss +26 -26
- package/styles/mixins/_evo-text-field-mixin.scss +36 -36
- package/styles/mixins/_evo-text-header-mixin.scss +62 -62
- package/styles/mixins/_evo-text-mobile-header-mixin.scss +34 -34
- package/styles/mixins/_evo-text-paragraph-mixin.scss +34 -34
- package/styles/mixins/_evo-text-subtitle-mixin.scss +20 -20
- package/styles/mixins/_evo-text-tips-mixin.scss +9 -9
- package/styles/mixins/_media-mixins.scss +38 -38
- package/styles/mixins.scss +96 -96
- package/styles/partials/_fonts.scss +2 -2
- package/styles/partials/_typography.scss +135 -135
- package/styles/variables.scss +140 -140
|
@@ -1,287 +1,287 @@
|
|
|
1
|
-
import { __decorate } from "tslib";
|
|
2
|
-
import { Component, EventEmitter, forwardRef, Input, Output, ViewChild } from '@angular/core';
|
|
3
|
-
import { FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
4
|
-
import autobind from 'autobind-decorator';
|
|
5
|
-
import bytes from 'bytes';
|
|
6
|
-
import * as mime from 'mime';
|
|
7
|
-
import { EvoBaseControl } from '../../common/evo-base-control';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "@angular/forms";
|
|
10
|
-
import * as i2 from "../evo-icon/evo-icon.component";
|
|
11
|
-
import * as i3 from "../evo-alert/evo-alert.component";
|
|
12
|
-
import * as i4 from "../evo-button/components/evo-button/evo-button.component";
|
|
13
|
-
import * as i5 from "../../directives/evo-ui-class.directive";
|
|
14
|
-
import * as i6 from "@angular/common";
|
|
15
|
-
import * as i7 from "../../pipes/safe-html.pipe";
|
|
16
|
-
import * as i8 from "../../pipes/declination.pipe";
|
|
17
|
-
export class EvoUploadComponent extends EvoBaseControl {
|
|
18
|
-
constructor(formBuilder, injector) {
|
|
19
|
-
super(injector);
|
|
20
|
-
this.formBuilder = formBuilder;
|
|
21
|
-
this.injector = injector;
|
|
22
|
-
this.dropZoneLabel = 'Перетащите сюда файлы для загрузки';
|
|
23
|
-
this.hideClearButton = false;
|
|
24
|
-
this.hideSubmitButton = false;
|
|
25
|
-
this.clickableFiles = false;
|
|
26
|
-
this.earlyValidation = false;
|
|
27
|
-
this.loading = false;
|
|
28
|
-
this.submit = new EventEmitter();
|
|
29
|
-
this.addFiles = new EventEmitter();
|
|
30
|
-
this.remove = new EventEmitter();
|
|
31
|
-
this.clickFile = new EventEmitter();
|
|
32
|
-
this.isDisabled = false;
|
|
33
|
-
this.filesForm = this.formBuilder.array([], [this.maxFilesValidator]);
|
|
34
|
-
this.states = {
|
|
35
|
-
isDragOver: false,
|
|
36
|
-
};
|
|
37
|
-
this.onChange = (value) => { };
|
|
38
|
-
this.onTouched = () => { };
|
|
39
|
-
}
|
|
40
|
-
set accept(extensions) {
|
|
41
|
-
if (extensions) {
|
|
42
|
-
this.acceptedMimeTypes = extensions
|
|
43
|
-
.split(',')
|
|
44
|
-
.map(extension => mime.getType(extension));
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
set fileSizeLimit(fileSize) {
|
|
48
|
-
this.filesSizeLimitText = fileSize;
|
|
49
|
-
this.filesSizeLimitInBytes = bytes(fileSize);
|
|
50
|
-
}
|
|
51
|
-
ngOnInit() {
|
|
52
|
-
this.subscribeOnFormChanges();
|
|
53
|
-
}
|
|
54
|
-
ngAfterContentInit() {
|
|
55
|
-
this.mergeControlsErrors();
|
|
56
|
-
}
|
|
57
|
-
registerOnChange(fn) {
|
|
58
|
-
this.onChange = fn;
|
|
59
|
-
}
|
|
60
|
-
registerOnTouched(fn) {
|
|
61
|
-
this.onTouched = fn;
|
|
62
|
-
}
|
|
63
|
-
setDisabledState(isDisabled) {
|
|
64
|
-
this.isDisabled = isDisabled;
|
|
65
|
-
if (!isDisabled) {
|
|
66
|
-
this.mergeControlsErrors();
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
writeValue(fileList) {
|
|
70
|
-
if (fileList && fileList.length > 0) {
|
|
71
|
-
if (fileList instanceof Array || fileList instanceof FileList) {
|
|
72
|
-
this.wipeUploadList();
|
|
73
|
-
if (this.earlyValidation) {
|
|
74
|
-
this.earlyValidationFn(fileList);
|
|
75
|
-
if (this.filesForm.errors) {
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
this.processFiles(fileList);
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
throw Error('[EvoUiKit]: wrong initial value passed to "evo-upload" component. Only FileList and File[] are allowed');
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
getControlError(control) {
|
|
87
|
-
if (!control.errors) {
|
|
88
|
-
return null;
|
|
89
|
-
}
|
|
90
|
-
return Object.keys(control.errors)[0];
|
|
91
|
-
}
|
|
92
|
-
handleDragOver(event) {
|
|
93
|
-
event.preventDefault();
|
|
94
|
-
event.stopPropagation();
|
|
95
|
-
if (this.loading) {
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
this.states.isDragOver = true;
|
|
99
|
-
}
|
|
100
|
-
handleDragLeave(event) {
|
|
101
|
-
event.preventDefault();
|
|
102
|
-
event.stopPropagation();
|
|
103
|
-
this.states.isDragOver = false;
|
|
104
|
-
}
|
|
105
|
-
handleDrop(event) {
|
|
106
|
-
event.preventDefault();
|
|
107
|
-
event.stopPropagation();
|
|
108
|
-
const files = event.dataTransfer.files;
|
|
109
|
-
this.states.isDragOver = false;
|
|
110
|
-
if (files.length) {
|
|
111
|
-
if (this.earlyValidation) {
|
|
112
|
-
this.earlyValidationFn(files);
|
|
113
|
-
if (this.filesForm.errors) {
|
|
114
|
-
return;
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
this.addFiles.emit(files);
|
|
118
|
-
this.processFiles(files);
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
handleItemRemove(index) {
|
|
122
|
-
if (this.loading || this.isDisabled) {
|
|
123
|
-
return;
|
|
124
|
-
}
|
|
125
|
-
this.filesForm.removeAt(index);
|
|
126
|
-
this.remove.emit(index);
|
|
127
|
-
}
|
|
128
|
-
handleResetButtonClick() {
|
|
129
|
-
if (this.loading || this.isDisabled) {
|
|
130
|
-
return;
|
|
131
|
-
}
|
|
132
|
-
this.wipeUploadList();
|
|
133
|
-
}
|
|
134
|
-
handleSubmitButtonClick() {
|
|
135
|
-
this.submit.emit(this.filesForm.value);
|
|
136
|
-
}
|
|
137
|
-
inputChange(files) {
|
|
138
|
-
if (this.earlyValidation) {
|
|
139
|
-
this.earlyValidationFn(files);
|
|
140
|
-
if (this.filesForm.errors) {
|
|
141
|
-
return;
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
this.addFiles.emit(files);
|
|
145
|
-
this.processFiles(files);
|
|
146
|
-
}
|
|
147
|
-
earlyValidationFn(files) {
|
|
148
|
-
this.filesForm.setErrors(null);
|
|
149
|
-
const filesArray = Array.from(files);
|
|
150
|
-
const errors = [];
|
|
151
|
-
if (this.maxFiles && this.isFilesLengthValid(filesArray)) {
|
|
152
|
-
errors.push({ maxFiles: true });
|
|
153
|
-
}
|
|
154
|
-
if (this.filesSizeLimitInBytes && !this.isFilesSizeValid(filesArray)) {
|
|
155
|
-
errors.push({ size: true });
|
|
156
|
-
}
|
|
157
|
-
if (this.acceptedMimeTypes && !this.isFilesExtensionValid(filesArray)) {
|
|
158
|
-
errors.push({ extension: true });
|
|
159
|
-
}
|
|
160
|
-
if (errors.length) {
|
|
161
|
-
this.filesForm.setErrors(Object.assign({}, ...errors));
|
|
162
|
-
this.mergeControlsErrors();
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
isFilesLengthValid(files) {
|
|
166
|
-
return this.maxFiles < (files.length + this.filesForm.controls.length);
|
|
167
|
-
}
|
|
168
|
-
isFilesSizeValid(files) {
|
|
169
|
-
return !files.some(({ size }) => this.filesSizeLimitInBytes < size);
|
|
170
|
-
}
|
|
171
|
-
isFilesExtensionValid(files) {
|
|
172
|
-
return files.every(({ type }) => {
|
|
173
|
-
return this.acceptedMimeTypes.includes(type);
|
|
174
|
-
});
|
|
175
|
-
}
|
|
176
|
-
processFiles(files) {
|
|
177
|
-
if (this.loading) {
|
|
178
|
-
return;
|
|
179
|
-
}
|
|
180
|
-
Array.from(files).forEach((file) => {
|
|
181
|
-
this.filesForm.push(new FormControl(file, [this.fileExtensionValidator, this.fileSizeValidator]));
|
|
182
|
-
});
|
|
183
|
-
if (this.inputFileElement && this.inputFileElement.nativeElement) {
|
|
184
|
-
this.inputFileElement.nativeElement.value = '';
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
wipeUploadList() {
|
|
188
|
-
while (this.filesForm.controls.length) {
|
|
189
|
-
this.filesForm.removeAt(0);
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
mergeControlsErrors() {
|
|
193
|
-
if (!this.control) {
|
|
194
|
-
return;
|
|
195
|
-
}
|
|
196
|
-
const errors = Object.assign({}, this.filesForm.errors);
|
|
197
|
-
this.filesForm.controls.forEach((control) => {
|
|
198
|
-
Object.assign(errors, control.errors);
|
|
199
|
-
});
|
|
200
|
-
this.control.setErrors(Object.keys(errors).length ? errors : null);
|
|
201
|
-
}
|
|
202
|
-
subscribeOnFormChanges() {
|
|
203
|
-
this.filesForm.valueChanges.subscribe((value) => {
|
|
204
|
-
this.onChange(value);
|
|
205
|
-
this.mergeControlsErrors();
|
|
206
|
-
});
|
|
207
|
-
}
|
|
208
|
-
fileSizeValidator(control) {
|
|
209
|
-
if (!this.filesSizeLimitInBytes) {
|
|
210
|
-
return null;
|
|
211
|
-
}
|
|
212
|
-
return control.value.size > this.filesSizeLimitInBytes ? { size: true } : null;
|
|
213
|
-
}
|
|
214
|
-
fileExtensionValidator(control) {
|
|
215
|
-
if (!this.acceptedMimeTypes) {
|
|
216
|
-
return null;
|
|
217
|
-
}
|
|
218
|
-
const fileType = control.value.type;
|
|
219
|
-
const isExtensionAllowed = this.acceptedMimeTypes.includes(fileType);
|
|
220
|
-
return isExtensionAllowed ? null : { extension: true };
|
|
221
|
-
}
|
|
222
|
-
maxFilesValidator(control) {
|
|
223
|
-
if (!this.maxFiles) {
|
|
224
|
-
return;
|
|
225
|
-
}
|
|
226
|
-
return control.controls.length > this.maxFiles ? { maxFiles: true } : null;
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
EvoUploadComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: EvoUploadComponent, deps: [{ token: i1.FormBuilder }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
|
|
230
|
-
EvoUploadComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: EvoUploadComponent, selector: "evo-upload", inputs: { accept: "accept", dropZoneLabel: "dropZoneLabel", dropZoneHint: "dropZoneHint", hideClearButton: "hideClearButton", hideSubmitButton: "hideSubmitButton", clickableFiles: "clickableFiles", earlyValidation: "earlyValidation", fileSizeLimit: "fileSizeLimit", maxFiles: "maxFiles", loading: "loading" }, outputs: { submit: "submit", addFiles: "addFiles", remove: "remove", clickFile: "clickFile" }, providers: [
|
|
231
|
-
{
|
|
232
|
-
provide: NG_VALUE_ACCESSOR,
|
|
233
|
-
useExisting: forwardRef(() => EvoUploadComponent),
|
|
234
|
-
multi: true,
|
|
235
|
-
},
|
|
236
|
-
], viewQueries: [{ propertyName: "inputFileElement", first: true, predicate: ["inputFile"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"evo-upload\">\
|
|
237
|
-
__decorate([
|
|
238
|
-
autobind
|
|
239
|
-
], EvoUploadComponent.prototype, "fileSizeValidator", null);
|
|
240
|
-
__decorate([
|
|
241
|
-
autobind
|
|
242
|
-
], EvoUploadComponent.prototype, "fileExtensionValidator", null);
|
|
243
|
-
__decorate([
|
|
244
|
-
autobind
|
|
245
|
-
], EvoUploadComponent.prototype, "maxFilesValidator", null);
|
|
246
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: EvoUploadComponent, decorators: [{
|
|
247
|
-
type: Component,
|
|
248
|
-
args: [{ selector: 'evo-upload', providers: [
|
|
249
|
-
{
|
|
250
|
-
provide: NG_VALUE_ACCESSOR,
|
|
251
|
-
useExisting: forwardRef(() => EvoUploadComponent),
|
|
252
|
-
multi: true,
|
|
253
|
-
},
|
|
254
|
-
], template: "<div class=\"evo-upload\">\
|
|
255
|
-
}], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i0.Injector }]; }, propDecorators: { accept: [{
|
|
256
|
-
type: Input
|
|
257
|
-
}], dropZoneLabel: [{
|
|
258
|
-
type: Input
|
|
259
|
-
}], dropZoneHint: [{
|
|
260
|
-
type: Input
|
|
261
|
-
}], hideClearButton: [{
|
|
262
|
-
type: Input
|
|
263
|
-
}], hideSubmitButton: [{
|
|
264
|
-
type: Input
|
|
265
|
-
}], clickableFiles: [{
|
|
266
|
-
type: Input
|
|
267
|
-
}], earlyValidation: [{
|
|
268
|
-
type: Input
|
|
269
|
-
}], fileSizeLimit: [{
|
|
270
|
-
type: Input
|
|
271
|
-
}], maxFiles: [{
|
|
272
|
-
type: Input
|
|
273
|
-
}], loading: [{
|
|
274
|
-
type: Input
|
|
275
|
-
}], submit: [{
|
|
276
|
-
type: Output
|
|
277
|
-
}], addFiles: [{
|
|
278
|
-
type: Output
|
|
279
|
-
}], remove: [{
|
|
280
|
-
type: Output
|
|
281
|
-
}], clickFile: [{
|
|
282
|
-
type: Output
|
|
283
|
-
}], inputFileElement: [{
|
|
284
|
-
type: ViewChild,
|
|
285
|
-
args: ['inputFile']
|
|
286
|
-
}], fileSizeValidator: [], fileExtensionValidator: [], maxFilesValidator: [] } });
|
|
287
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZvLXVwbG9hZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ldm8tdWkta2l0L3NyYy9saWIvY29tcG9uZW50cy9ldm8tdXBsb2FkL2V2by11cGxvYWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXZvLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZXZvLXVwbG9hZC9ldm8tdXBsb2FkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUgsU0FBUyxFQUVULFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUtILFdBQVcsRUFDWCxpQkFBaUIsRUFDcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLFFBQVEsTUFBTSxvQkFBb0IsQ0FBQztBQUMxQyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7Ozs7Ozs7O0FBbUIvRCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsY0FBYztJQXdDbEQsWUFDWSxXQUF3QixFQUN0QixRQUFrQjtRQUU1QixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFIUixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBakN2QixrQkFBYSxHQUFHLG9DQUFvQyxDQUFDO1FBRXJELG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUN6QixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUN2QixvQkFBZSxHQUFHLEtBQUssQ0FBQztRQVF4QixZQUFPLEdBQUcsS0FBSyxDQUFDO1FB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QUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixDQUFDO1lBQ2pELEtBQUssRUFBRSxJQUFJO1NBQ2Q7S0FDSixnS0N0Q0wsdXhMQWlIQTtBRCtKSTtJQURDLFFBQVE7MkRBT1I7QUFHRDtJQURDLFFBQVE7Z0VBVVI7QUFHRDtJQURDLFFBQVE7MkRBT1I7MkZBblFRLGtCQUFrQjtrQkFaOUIsU0FBUzsrQkFDSSxZQUFZLGFBR1g7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsbUJBQW1CLENBQUM7NEJBQ2pELEtBQUssRUFBRSxJQUFJO3lCQUNkO3FCQUNKO3lIQUlZLE1BQU07c0JBQWxCLEtBQUs7Z0JBT0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFFTyxhQUFhO3NCQUF6QixLQUFLO2dCQUtHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUVJLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUVpQixnQkFBZ0I7c0JBQXZDLFNBQVM7dUJBQUMsV0FBVztnQkEyTWQsaUJBQWlCLE1BU2pCLHNCQUFzQixNQVl0QixpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsIEluamVjdG9yLFxuICAgIElucHV0LCBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQWJzdHJhY3RDb250cm9sLFxuICAgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgIEZvcm1BcnJheSxcbiAgICBGb3JtQnVpbGRlcixcbiAgICBGb3JtQ29udHJvbCxcbiAgICBOR19WQUxVRV9BQ0NFU1NPUlxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgYXV0b2JpbmQgZnJvbSAnYXV0b2JpbmQtZGVjb3JhdG9yJztcbmltcG9ydCBieXRlcyBmcm9tICdieXRlcyc7XG5pbXBvcnQgKiBhcyBtaW1lIGZyb20gJ21pbWUnO1xuaW1wb3J0IHsgRXZvQmFzZUNvbnRyb2wgfSBmcm9tICcuLi8uLi9jb21tb24vZXZvLWJhc2UtY29udHJvbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZvVXBsb2FkSXRlbUNsaWNrRXZlbnQge1xuICAgIGZpbGU6IEZpbGU7XG4gICAgaW5kZXg6IG51bWJlcjtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdldm8tdXBsb2FkJyxcbiAgICBzdHlsZVVybHM6IFsnLi9ldm8tdXBsb2FkLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgdGVtcGxhdGVVcmw6ICcuL2V2by11cGxvYWQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEV2b1VwbG9hZENvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBFdm9VcGxvYWRDb21wb25lbnQgZXh0ZW5kcyBFdm9CYXNlQ29udHJvbCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlckNvbnRlbnRJbml0LCBPbkluaXQge1xuXG4gICAgQElucHV0KCkgc2V0IGFjY2VwdChleHRlbnNpb25zOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKGV4dGVuc2lvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuYWNjZXB0ZWRNaW1lVHlwZXMgPSBleHRlbnNpb25zXG4gICAgICAgICAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgICAgICAgICAubWFwKGV4dGVuc2lvbiA9PiBtaW1lLmdldFR5cGUoZXh0ZW5zaW9uKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgQElucHV0KCkgZHJvcFpvbmVMYWJlbCA9ICfQn9C10YDQtdGC0LDRidC40YLQtSDRgdGO0LTQsCDRhNCw0LnQu9GLINC00LvRjyDQt9Cw0LPRgNGD0LfQutC4JztcbiAgICBASW5wdXQoKSBkcm9wWm9uZUhpbnQ6IHN0cmluZztcbiAgICBASW5wdXQoKSBoaWRlQ2xlYXJCdXR0b24gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBoaWRlU3VibWl0QnV0dG9uID0gZmFsc2U7XG4gICAgQElucHV0KCkgY2xpY2thYmxlRmlsZXMgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBlYXJseVZhbGlkYXRpb24gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIHNldCBmaWxlU2l6ZUxpbWl0KGZpbGVTaXplOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5maWxlc1NpemVMaW1pdFRleHQgPSBmaWxlU2l6ZTtcbiAgICAgICAgdGhpcy5maWxlc1NpemVMaW1pdEluQnl0ZXMgPSBieXRlcyhmaWxlU2l6ZSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgbWF4RmlsZXM6IG51bWJlcjtcbiAgICBASW5wdXQoKSBsb2FkaW5nID0gZmFsc2U7XG5cbiAgICBAT3V0cHV0KCkgc3VibWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlTGlzdD4oKTtcbiAgICBAT3V0cHV0KCkgYWRkRmlsZXMgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbGVMaXN0PigpO1xuICAgIEBPdXRwdXQoKSByZW1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgICBAT3V0cHV0KCkgY2xpY2tGaWxlID0gbmV3IEV2ZW50RW1pdHRlcjxFdm9VcGxvYWRJdGVtQ2xpY2tFdmVudD4oKTtcblxuICAgIEBWaWV3Q2hpbGQoJ2lucHV0RmlsZScpIGlucHV0RmlsZUVsZW1lbnQ6IEVsZW1lbnRSZWY7XG5cbiAgICBpc0Rpc2FibGVkID0gZmFsc2U7XG4gICAgZmlsZXNGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5hcnJheShbXSwgW3RoaXMubWF4RmlsZXNWYWxpZGF0b3JdKTtcbiAgICBmaWxlc1NpemVMaW1pdFRleHQ6IHN0cmluZztcbiAgICBmaWxlc1NpemVMaW1pdEluQnl0ZXM6IG51bWJlcjtcbiAgICBzdGF0ZXMgPSB7XG4gICAgICAgIGlzRHJhZ092ZXI6IGZhbHNlLFxuICAgIH07XG4gICAgYWNjZXB0ZWRNaW1lVHlwZXM6IHN0cmluZ1tdO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgICAgICBwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICkge1xuICAgICAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlT25Gb3JtQ2hhbmdlcygpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgdGhpcy5tZXJnZUNvbnRyb2xzRXJyb3JzKCk7XG4gICAgfVxuXG4gICAgb25DaGFuZ2UgPSAodmFsdWUpID0+IHt9O1xuICAgIG9uVG91Y2hlZCA9ICgpID0+IHt9O1xuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuaXNEaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG5cbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLm1lcmdlQ29udHJvbHNFcnJvcnMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdyaXRlVmFsdWUoZmlsZUxpc3Q6IEZpbGVMaXN0IHwgRmlsZVtdKSB7XG4gICAgICAgIGlmIChmaWxlTGlzdCAmJiBmaWxlTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBpZiAoZmlsZUxpc3QgaW5zdGFuY2VvZiBBcnJheSB8fCBmaWxlTGlzdCBpbnN0YW5jZW9mIEZpbGVMaXN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy53aXBlVXBsb2FkTGlzdCgpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmVhcmx5VmFsaWRhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVhcmx5VmFsaWRhdGlvbkZuKGZpbGVMaXN0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZmlsZXNGb3JtLmVycm9ycykgeyByZXR1cm47IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzRmlsZXMoZmlsZUxpc3QgYXMgRmlsZUxpc3QpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignW0V2b1VpS2l0XTogd3JvbmcgaW5pdGlhbCB2YWx1ZSBwYXNzZWQgdG8gXCJldm8tdXBsb2FkXCIgY29tcG9uZW50LiBPbmx5IEZpbGVMaXN0IGFuZCBGaWxlW10gYXJlIGFsbG93ZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldENvbnRyb2xFcnJvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIWNvbnRyb2wuZXJyb3JzKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhjb250cm9sLmVycm9ycylbMF07XG4gICAgfVxuXG4gICAgaGFuZGxlRHJhZ092ZXIoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGlmICh0aGlzLmxvYWRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXRlcy5pc0RyYWdPdmVyID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBoYW5kbGVEcmFnTGVhdmUoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLnN0YXRlcy5pc0RyYWdPdmVyID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaGFuZGxlRHJvcChldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGNvbnN0IGZpbGVzID0gZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzO1xuXG4gICAgICAgIHRoaXMuc3RhdGVzLmlzRHJhZ092ZXIgPSBmYWxzZTtcbiAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZWFybHlWYWxpZGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lYXJseVZhbGlkYXRpb25GbihmaWxlcyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZmlsZXNGb3JtLmVycm9ycykgeyByZXR1cm47IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYWRkRmlsZXMuZW1pdChmaWxlcyk7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NGaWxlcyhmaWxlcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVJdGVtUmVtb3ZlKGluZGV4KSB7XG4gICAgICAgIGlmICh0aGlzLmxvYWRpbmcgfHwgdGhpcy5pc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWxlc0Zvcm0ucmVtb3ZlQXQoaW5kZXgpO1xuICAgICAgICB0aGlzLnJlbW92ZS5lbWl0KGluZGV4KTtcbiAgICB9XG5cbiAgICBoYW5kbGVSZXNldEJ1dHRvbkNsaWNrKCkge1xuICAgICAgICBpZiAodGhpcy5sb2FkaW5nIHx8IHRoaXMuaXNEaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy53aXBlVXBsb2FkTGlzdCgpO1xuICAgIH1cblxuICAgIGhhbmRsZVN1Ym1pdEJ1dHRvbkNsaWNrKCkge1xuICAgICAgICB0aGlzLnN1Ym1pdC5lbWl0KHRoaXMuZmlsZXNGb3JtLnZhbHVlKTtcbiAgICB9XG5cbiAgICBpbnB1dENoYW5nZShmaWxlczogRmlsZUxpc3QpIHtcbiAgICAgICAgaWYgKHRoaXMuZWFybHlWYWxpZGF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmVhcmx5VmFsaWRhdGlvbkZuKGZpbGVzKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbGVzRm9ybS5lcnJvcnMpIHsgcmV0dXJuOyB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hZGRGaWxlcy5lbWl0KGZpbGVzKTtcbiAgICAgICAgdGhpcy5wcm9jZXNzRmlsZXMoZmlsZXMpO1xuICAgIH1cblxuICAgIGVhcmx5VmFsaWRhdGlvbkZuKGZpbGVzOiBGaWxlTGlzdCB8IEZpbGVbXSkge1xuICAgICAgICB0aGlzLmZpbGVzRm9ybS5zZXRFcnJvcnMobnVsbCk7XG4gICAgICAgIGNvbnN0IGZpbGVzQXJyYXkgPSBBcnJheS5mcm9tKGZpbGVzKTtcbiAgICAgICAgY29uc3QgZXJyb3JzID0gW107XG4gICAgICAgIGlmICh0aGlzLm1heEZpbGVzICYmIHRoaXMuaXNGaWxlc0xlbmd0aFZhbGlkKGZpbGVzQXJyYXkpKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaCh7IG1heEZpbGVzOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZpbGVzU2l6ZUxpbWl0SW5CeXRlcyAmJiAhdGhpcy5pc0ZpbGVzU2l6ZVZhbGlkKGZpbGVzQXJyYXkpKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaCh7IHNpemU6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYWNjZXB0ZWRNaW1lVHlwZXMgJiYgIXRoaXMuaXNGaWxlc0V4dGVuc2lvblZhbGlkKGZpbGVzQXJyYXkpKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaCh7IGV4dGVuc2lvbjogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5maWxlc0Zvcm0uc2V0RXJyb3JzKE9iamVjdC5hc3NpZ24oe30sIC4uLmVycm9ycykpO1xuICAgICAgICAgICAgdGhpcy5tZXJnZUNvbnRyb2xzRXJyb3JzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc0ZpbGVzTGVuZ3RoVmFsaWQoZmlsZXM6IEZpbGVbXSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXhGaWxlcyA8IChmaWxlcy5sZW5ndGggKyB0aGlzLmZpbGVzRm9ybS5jb250cm9scy5sZW5ndGgpO1xuICAgIH1cblxuICAgIGlzRmlsZXNTaXplVmFsaWQoZmlsZXM6IEZpbGVbXSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIWZpbGVzLnNvbWUoKHsgc2l6ZSB9KSA9PiB0aGlzLmZpbGVzU2l6ZUxpbWl0SW5CeXRlcyA8IHNpemUpO1xuICAgIH1cblxuICAgIGlzRmlsZXNFeHRlbnNpb25WYWxpZChmaWxlczogRmlsZVtdKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBmaWxlcy5ldmVyeSgoeyB0eXBlIH0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFjY2VwdGVkTWltZVR5cGVzLmluY2x1ZGVzKHR5cGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm9jZXNzRmlsZXMoZmlsZXM6IEZpbGVMaXN0KSB7XG4gICAgICAgIGlmICh0aGlzLmxvYWRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIEFycmF5LmZyb20oZmlsZXMpLmZvckVhY2goKGZpbGU6IEZpbGUpID0+IHsgLy8gdHNsaW50OmRpc2FibGU6bm8tZm9yLWVhY2gtcHVzaFxuICAgICAgICAgICAgdGhpcy5maWxlc0Zvcm0ucHVzaChuZXcgRm9ybUNvbnRyb2woZmlsZSwgW3RoaXMuZmlsZUV4dGVuc2lvblZhbGlkYXRvciwgdGhpcy5maWxlU2l6ZVZhbGlkYXRvcl0pKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuaW5wdXRGaWxlRWxlbWVudCAmJiB0aGlzLmlucHV0RmlsZUVsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dEZpbGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdpcGVVcGxvYWRMaXN0KCkge1xuICAgICAgICB3aGlsZSAodGhpcy5maWxlc0Zvcm0uY29udHJvbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmZpbGVzRm9ybS5yZW1vdmVBdCgwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgbWVyZ2VDb250cm9sc0Vycm9ycygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVycm9ycyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZmlsZXNGb3JtLmVycm9ycyk7XG4gICAgICAgIHRoaXMuZmlsZXNGb3JtLmNvbnRyb2xzLmZvckVhY2goKGNvbnRyb2w6IEZvcm1Db250cm9sKSA9PiB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGVycm9ycywgY29udHJvbC5lcnJvcnMpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jb250cm9sLnNldEVycm9ycyhPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCA/IGVycm9ycyA6IG51bGwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3Vic2NyaWJlT25Gb3JtQ2hhbmdlcygpIHtcbiAgICAgICAgdGhpcy5maWxlc0Zvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5tZXJnZUNvbnRyb2xzRXJyb3JzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIEBhdXRvYmluZFxuICAgIHByaXZhdGUgZmlsZVNpemVWYWxpZGF0b3IoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSB7XG4gICAgICAgIGlmICghdGhpcy5maWxlc1NpemVMaW1pdEluQnl0ZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRyb2wudmFsdWUuc2l6ZSA+IHRoaXMuZmlsZXNTaXplTGltaXRJbkJ5dGVzID8geyBzaXplOiB0cnVlIH0gOiBudWxsO1xuICAgIH1cblxuICAgIEBhdXRvYmluZFxuICAgIHByaXZhdGUgZmlsZUV4dGVuc2lvblZhbGlkYXRvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpIHtcbiAgICAgICAgaWYgKCF0aGlzLmFjY2VwdGVkTWltZVR5cGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVUeXBlID0gKGNvbnRyb2wudmFsdWUgYXMgRmlsZSkudHlwZTtcbiAgICAgICAgY29uc3QgaXNFeHRlbnNpb25BbGxvd2VkID0gdGhpcy5hY2NlcHRlZE1pbWVUeXBlcy5pbmNsdWRlcyhmaWxlVHlwZSk7XG5cbiAgICAgICAgcmV0dXJuIGlzRXh0ZW5zaW9uQWxsb3dlZCA/IG51bGwgOiB7IGV4dGVuc2lvbjogdHJ1ZSB9O1xuICAgIH1cblxuICAgIEBhdXRvYmluZFxuICAgIHByaXZhdGUgbWF4RmlsZXNWYWxpZGF0b3IoY29udHJvbDogRm9ybUFycmF5KSB7XG4gICAgICAgIGlmICghdGhpcy5tYXhGaWxlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRyb2wuY29udHJvbHMubGVuZ3RoID4gdGhpcy5tYXhGaWxlcyA/IHsgbWF4RmlsZXM6IHRydWUgfSA6IG51bGw7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImV2by11cGxvYWRcIj5cclxuICAgIDxsYWJlbFxyXG4gICAgICAgIGNsYXNzPVwiZXZvLXVwbG9hZF9fd3JhcHBlclwiXHJcbiAgICAgICAgW2V2b1VpQ2xhc3NdPVwie292ZXI6IHN0YXRlcy5pc0RyYWdPdmVyLCBkaXNhYmxlZDogaXNEaXNhYmxlZCB8fCBsb2FkaW5nfVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uVG91Y2hlZCgpXCJcclxuICAgICAgICAoZHJhZ292ZXIpPVwiaGFuZGxlRHJhZ092ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgKGRyYWdsZWF2ZSk9XCJoYW5kbGVEcmFnTGVhdmUoJGV2ZW50KVwiXHJcbiAgICAgICAgKGRyb3ApPVwiaGFuZGxlRHJvcCgkZXZlbnQpXCJcclxuICAgID5cclxuICAgICAgICA8ZXZvLWljb25cclxuICAgICAgICAgICAgc2hhcGU9XCJ1cGxvYWRcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImV2by11cGxvYWRfX3VwbG9hZC1pY29uXCJcclxuICAgICAgICAgICAgW2V2b1VpQ2xhc3NdPVwie2Rpc2FibGVkOiBpc0Rpc2FibGVkIHx8IGxvYWRpbmd9XCJcclxuICAgICAgICA+PC9ldm8taWNvbj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImV2by11cGxvYWRfX3RpdGxlXCIgW2V2b1VpQ2xhc3NdPVwie2Rpc2FibGVkOiBpc0Rpc2FibGVkIHx8IGxvYWRpbmd9XCI+e3sgZHJvcFpvbmVMYWJlbCB9fTwvc3Bhbj5cclxuXHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJldm8tdXBsb2FkX19oaW50XCIgW2V2b1VpQ2xhc3NdPVwie2Rpc2FibGVkOiBpc0Rpc2FibGVkIHx8IGxvYWRpbmd9XCI+XHJcbiAgICAgICAgICAgINC40LvQuFxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImV2by11cGxvYWRfX2Zha2UtbGlua1wiIFtldm9VaUNsYXNzXT1cIntkaXNhYmxlZDogaXNEaXNhYmxlZCB8fCBsb2FkaW5nfVwiPtC30LDQs9GA0YPQt9C40YLQtTwvc3Bhbj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRyb3Bab25lSGludFwiPlxyXG4gICAgICAgICAgICAgICAgKFxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJldm8tdXBsb2FkX19hZGRpdGlvbmFsLWhpbnRcIiBbaW5uZXJIVE1MXT1cImRyb3Bab25lSGludCB8IHNhZmVIdG1sXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAjaW5wdXRGaWxlXHJcbiAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJldm8tdXBsb2FkX19pbnB1dFwiXHJcbiAgICAgICAgICAgIFthY2NlcHRdPVwiYWNjZXB0XCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRpbmcgfHwgaXNEaXNhYmxlZFwiXHJcbiAgICAgICAgICAgIFthdHRyLm11bHRpcGxlXT1cIm1heEZpbGVzID09PSAxID8gbnVsbCA6IHRydWVcIlxyXG4gICAgICAgICAgICAoY2hhbmdlKT1cImlucHV0Q2hhbmdlKCRldmVudC50YXJnZXQuZmlsZXMpXCJcclxuICAgICAgICAvPlxyXG4gICAgPC9sYWJlbD5cclxuXHJcbiAgICA8ZXZvLWFsZXJ0ICpuZ0lmPVwiIWVhcmx5VmFsaWRhdGlvbiAmJiBmaWxlc0Zvcm0uZXJyb3JzPy5tYXhGaWxlc1wiIHR5cGU9XCJkYW5nZXJcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICDQndC10LvRjNC30Y8g0LfQsNCz0YDRg9C30LjRgtGMINCx0L7Qu9C10LUge3sgbWF4RmlsZXMgfHwgMSB8IGRlY2xpbmF0aW9uOltcItGE0LDQudC70LBcIiwgXCLRhNCw0LnQu9C+0LJcIiwgXCLRhNCw0LnQu9C+0LJcIl0gfX1cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZXZvLWFsZXJ0PlxyXG4gICAgPGV2by1hbGVydCAqbmdJZj1cImVhcmx5VmFsaWRhdGlvbiAmJiBmaWxlc0Zvcm0uZXJyb3JzXCIgdHlwZT1cImRhbmdlclwiPlxyXG4gICAgICAgIDx1bCBjbGFzcz1cImV2by1saXN0XCI+XHJcbiAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpbGVzRm9ybS5lcnJvcnMubWF4RmlsZXNcIj5cclxuICAgICAgICAgICAgICAgINCd0LXQu9GM0LfRjyDQt9Cw0LPRgNGD0LfQuNGC0Ywg0LHQvtC70LXQtSB7eyBtYXhGaWxlcyB8fCAxIHwgZGVjbGluYXRpb246W1wi0YTQsNC50LvQsFwiLCBcItGE0LDQudC70L7QslwiLCBcItGE0LDQudC70L7QslwiXSB9fVxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWxlc0Zvcm0uZXJyb3JzLnNpemVcIj7QnNCw0LrRgdC40LzQsNC70YzQvdGL0Lkg0YDQsNC30LzQtdGAINC+0LTQvdC+0LPQviDRhNCw0LnQu9CwINC90LUg0LHQvtC70LXQtSB7eyBmaWxlc1NpemVMaW1pdFRleHQgfX08L2xpPlxyXG4gICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWxlc0Zvcm0uZXJyb3JzLmV4dGVuc2lvblwiPtCS0YvQsdGA0LDQvSDRhNCw0LnQuyDQvdC10LTQvtC/0YPRgdGC0LjQvNC+0LPQviDRhNC+0YDQvNCw0YLQsDwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgIDwvZXZvLWFsZXJ0PlxyXG5cclxuICAgIDx1bCBjbGFzcz1cImV2by11cGxvYWRfX2xpc3RcIj5cclxuICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGZpbGUgb2YgZmlsZXNGb3JtLmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4XCIgY2xhc3M9XCJldm8tdXBsb2FkX19saXN0LWl0ZW1cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV2by11cGxvYWRfX2l0ZW0taW5uZXJcIj5cclxuICAgICAgICAgICAgICAgIDxldm8taWNvbiBzaGFwZT1cImZpbGVcIiBzdmdXaWR0aD1cIjI0XCIgc3ZnSGVpZ2h0PVwiMjRcIiBjbGFzcz1cImV2by11cGxvYWRfX2ZpbGUtaWNvblwiPjwvZXZvLWljb24+XHJcblxyXG4gICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNsaWNrYWJsZUZpbGVzXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV2by11cGxvYWRfX2xpbmsgZXZvLWxpbmtcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGlja0ZpbGUuZW1pdCh7IGZpbGU6IGZpbGUudmFsdWUsIGluZGV4OiBpIH0pXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICB7eyBmaWxlLnZhbHVlLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFjbGlja2FibGVGaWxlc1wiPnt7IGZpbGUudmFsdWUubmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZXZvLWljb25cclxuICAgICAgICAgICAgICAgIHNoYXBlPVwiZGVjbGluZVwiXHJcbiAgICAgICAgICAgICAgICBzdmdXaWR0aD1cIjI0XCJcclxuICAgICAgICAgICAgICAgIHN2Z0hlaWdodD1cIjI0XCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZXZvLXVwbG9hZF9fYnV0dG9uLXJlbW92ZVwiXHJcbiAgICAgICAgICAgICAgICBbZXZvVWlDbGFzc109XCJ7ZGlzYWJsZWQ6IGxvYWRpbmcgfHwgaXNEaXNhYmxlZH1cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUl0ZW1SZW1vdmUoaSlcIlxyXG4gICAgICAgICAgICA+PC9ldm8taWNvbj5cclxuXHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZXZvLXVwbG9hZF9fbGlzdC1kZWxpbWl0ZXJcIlxyXG4gICAgICAgICAgICAgICAgW2V2b1VpQ2xhc3NdPVwie2Vycm9yOiBmaWxlc0Zvcm0uY29udHJvbHNbaV0uZXJyb3JzfVwiXHJcbiAgICAgICAgICAgICAgICBbbmdTd2l0Y2hdPVwiZ2V0Q29udHJvbEVycm9yKGZpbGVzRm9ybS5jb250cm9sc1tpXSlcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc2l6ZSdcIj7QoNCw0LfQvNC10YAg0YTQsNC50LvQsCDQv9GA0LXQstGL0YjQsNC10YIg0LTQvtC/0YPRgdGC0LjQvNGL0Lk8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidleHRlbnNpb24nXCI+0J3QtdCy0LXRgNC90YvQuSDRhNC+0YDQvNCw0YIg0YTQsNC50LvQsDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2xpPlxyXG4gICAgPC91bD5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwiZmlsZXNGb3JtLmNvbnRyb2xzLmxlbmd0aFwiIGNsYXNzPVwiZXZvLXVwbG9hZF9fY29udHJvbHNcIj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICpuZ0lmPVwiIWhpZGVDbGVhckJ1dHRvblwiXHJcbiAgICAgICAgICAgIGV2b0J1dHRvblxyXG4gICAgICAgICAgICBjb2xvcj1cInNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgIHRoZW1lPVwicm91bmRlZC1vdXRsaW5lXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRpbmcgfHwgaXNEaXNhYmxlZFwiXHJcbiAgICAgICAgICAgIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlUmVzZXRCdXR0b25DbGljaygpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICAgINCj0LTQsNC70LjRgtGMINCy0YHRkVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgKm5nSWY9XCIhaGlkZVN1Ym1pdEJ1dHRvblwiXHJcbiAgICAgICAgICAgIGV2b0J1dHRvblxyXG4gICAgICAgICAgICBjb2xvcj1cInN1Y2Nlc3NcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImV2by11cGxvYWRfX3N1Ym1pdFwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWxlc0Zvcm0uaW52YWxpZCB8fCBsb2FkaW5nIHx8IGlzRGlzYWJsZWRcIlxyXG4gICAgICAgICAgICBbbG9hZGluZ109XCJsb2FkaW5nXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZVN1Ym1pdEJ1dHRvbkNsaWNrKClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgICAg0JfQsNCz0YDRg9C30LjRgtGMXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { Component, EventEmitter, forwardRef, Input, Output, ViewChild } from '@angular/core';
|
|
3
|
+
import { FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
4
|
+
import autobind from 'autobind-decorator';
|
|
5
|
+
import bytes from 'bytes';
|
|
6
|
+
import * as mime from 'mime';
|
|
7
|
+
import { EvoBaseControl } from '../../common/evo-base-control';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "@angular/forms";
|
|
10
|
+
import * as i2 from "../evo-icon/evo-icon.component";
|
|
11
|
+
import * as i3 from "../evo-alert/evo-alert.component";
|
|
12
|
+
import * as i4 from "../evo-button/components/evo-button/evo-button.component";
|
|
13
|
+
import * as i5 from "../../directives/evo-ui-class.directive";
|
|
14
|
+
import * as i6 from "@angular/common";
|
|
15
|
+
import * as i7 from "../../pipes/safe-html.pipe";
|
|
16
|
+
import * as i8 from "../../pipes/declination.pipe";
|
|
17
|
+
export class EvoUploadComponent extends EvoBaseControl {
|
|
18
|
+
constructor(formBuilder, injector) {
|
|
19
|
+
super(injector);
|
|
20
|
+
this.formBuilder = formBuilder;
|
|
21
|
+
this.injector = injector;
|
|
22
|
+
this.dropZoneLabel = 'Перетащите сюда файлы для загрузки';
|
|
23
|
+
this.hideClearButton = false;
|
|
24
|
+
this.hideSubmitButton = false;
|
|
25
|
+
this.clickableFiles = false;
|
|
26
|
+
this.earlyValidation = false;
|
|
27
|
+
this.loading = false;
|
|
28
|
+
this.submit = new EventEmitter();
|
|
29
|
+
this.addFiles = new EventEmitter();
|
|
30
|
+
this.remove = new EventEmitter();
|
|
31
|
+
this.clickFile = new EventEmitter();
|
|
32
|
+
this.isDisabled = false;
|
|
33
|
+
this.filesForm = this.formBuilder.array([], [this.maxFilesValidator]);
|
|
34
|
+
this.states = {
|
|
35
|
+
isDragOver: false,
|
|
36
|
+
};
|
|
37
|
+
this.onChange = (value) => { };
|
|
38
|
+
this.onTouched = () => { };
|
|
39
|
+
}
|
|
40
|
+
set accept(extensions) {
|
|
41
|
+
if (extensions) {
|
|
42
|
+
this.acceptedMimeTypes = extensions
|
|
43
|
+
.split(',')
|
|
44
|
+
.map(extension => mime.getType(extension));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
set fileSizeLimit(fileSize) {
|
|
48
|
+
this.filesSizeLimitText = fileSize;
|
|
49
|
+
this.filesSizeLimitInBytes = bytes(fileSize);
|
|
50
|
+
}
|
|
51
|
+
ngOnInit() {
|
|
52
|
+
this.subscribeOnFormChanges();
|
|
53
|
+
}
|
|
54
|
+
ngAfterContentInit() {
|
|
55
|
+
this.mergeControlsErrors();
|
|
56
|
+
}
|
|
57
|
+
registerOnChange(fn) {
|
|
58
|
+
this.onChange = fn;
|
|
59
|
+
}
|
|
60
|
+
registerOnTouched(fn) {
|
|
61
|
+
this.onTouched = fn;
|
|
62
|
+
}
|
|
63
|
+
setDisabledState(isDisabled) {
|
|
64
|
+
this.isDisabled = isDisabled;
|
|
65
|
+
if (!isDisabled) {
|
|
66
|
+
this.mergeControlsErrors();
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
writeValue(fileList) {
|
|
70
|
+
if (fileList && fileList.length > 0) {
|
|
71
|
+
if (fileList instanceof Array || fileList instanceof FileList) {
|
|
72
|
+
this.wipeUploadList();
|
|
73
|
+
if (this.earlyValidation) {
|
|
74
|
+
this.earlyValidationFn(fileList);
|
|
75
|
+
if (this.filesForm.errors) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
this.processFiles(fileList);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
throw Error('[EvoUiKit]: wrong initial value passed to "evo-upload" component. Only FileList and File[] are allowed');
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
getControlError(control) {
|
|
87
|
+
if (!control.errors) {
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
return Object.keys(control.errors)[0];
|
|
91
|
+
}
|
|
92
|
+
handleDragOver(event) {
|
|
93
|
+
event.preventDefault();
|
|
94
|
+
event.stopPropagation();
|
|
95
|
+
if (this.loading) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
this.states.isDragOver = true;
|
|
99
|
+
}
|
|
100
|
+
handleDragLeave(event) {
|
|
101
|
+
event.preventDefault();
|
|
102
|
+
event.stopPropagation();
|
|
103
|
+
this.states.isDragOver = false;
|
|
104
|
+
}
|
|
105
|
+
handleDrop(event) {
|
|
106
|
+
event.preventDefault();
|
|
107
|
+
event.stopPropagation();
|
|
108
|
+
const files = event.dataTransfer.files;
|
|
109
|
+
this.states.isDragOver = false;
|
|
110
|
+
if (files.length) {
|
|
111
|
+
if (this.earlyValidation) {
|
|
112
|
+
this.earlyValidationFn(files);
|
|
113
|
+
if (this.filesForm.errors) {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
this.addFiles.emit(files);
|
|
118
|
+
this.processFiles(files);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
handleItemRemove(index) {
|
|
122
|
+
if (this.loading || this.isDisabled) {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
this.filesForm.removeAt(index);
|
|
126
|
+
this.remove.emit(index);
|
|
127
|
+
}
|
|
128
|
+
handleResetButtonClick() {
|
|
129
|
+
if (this.loading || this.isDisabled) {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
this.wipeUploadList();
|
|
133
|
+
}
|
|
134
|
+
handleSubmitButtonClick() {
|
|
135
|
+
this.submit.emit(this.filesForm.value);
|
|
136
|
+
}
|
|
137
|
+
inputChange(files) {
|
|
138
|
+
if (this.earlyValidation) {
|
|
139
|
+
this.earlyValidationFn(files);
|
|
140
|
+
if (this.filesForm.errors) {
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
this.addFiles.emit(files);
|
|
145
|
+
this.processFiles(files);
|
|
146
|
+
}
|
|
147
|
+
earlyValidationFn(files) {
|
|
148
|
+
this.filesForm.setErrors(null);
|
|
149
|
+
const filesArray = Array.from(files);
|
|
150
|
+
const errors = [];
|
|
151
|
+
if (this.maxFiles && this.isFilesLengthValid(filesArray)) {
|
|
152
|
+
errors.push({ maxFiles: true });
|
|
153
|
+
}
|
|
154
|
+
if (this.filesSizeLimitInBytes && !this.isFilesSizeValid(filesArray)) {
|
|
155
|
+
errors.push({ size: true });
|
|
156
|
+
}
|
|
157
|
+
if (this.acceptedMimeTypes && !this.isFilesExtensionValid(filesArray)) {
|
|
158
|
+
errors.push({ extension: true });
|
|
159
|
+
}
|
|
160
|
+
if (errors.length) {
|
|
161
|
+
this.filesForm.setErrors(Object.assign({}, ...errors));
|
|
162
|
+
this.mergeControlsErrors();
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
isFilesLengthValid(files) {
|
|
166
|
+
return this.maxFiles < (files.length + this.filesForm.controls.length);
|
|
167
|
+
}
|
|
168
|
+
isFilesSizeValid(files) {
|
|
169
|
+
return !files.some(({ size }) => this.filesSizeLimitInBytes < size);
|
|
170
|
+
}
|
|
171
|
+
isFilesExtensionValid(files) {
|
|
172
|
+
return files.every(({ type }) => {
|
|
173
|
+
return this.acceptedMimeTypes.includes(type);
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
processFiles(files) {
|
|
177
|
+
if (this.loading) {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
Array.from(files).forEach((file) => {
|
|
181
|
+
this.filesForm.push(new FormControl(file, [this.fileExtensionValidator, this.fileSizeValidator]));
|
|
182
|
+
});
|
|
183
|
+
if (this.inputFileElement && this.inputFileElement.nativeElement) {
|
|
184
|
+
this.inputFileElement.nativeElement.value = '';
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
wipeUploadList() {
|
|
188
|
+
while (this.filesForm.controls.length) {
|
|
189
|
+
this.filesForm.removeAt(0);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
mergeControlsErrors() {
|
|
193
|
+
if (!this.control) {
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
const errors = Object.assign({}, this.filesForm.errors);
|
|
197
|
+
this.filesForm.controls.forEach((control) => {
|
|
198
|
+
Object.assign(errors, control.errors);
|
|
199
|
+
});
|
|
200
|
+
this.control.setErrors(Object.keys(errors).length ? errors : null);
|
|
201
|
+
}
|
|
202
|
+
subscribeOnFormChanges() {
|
|
203
|
+
this.filesForm.valueChanges.subscribe((value) => {
|
|
204
|
+
this.onChange(value);
|
|
205
|
+
this.mergeControlsErrors();
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
fileSizeValidator(control) {
|
|
209
|
+
if (!this.filesSizeLimitInBytes) {
|
|
210
|
+
return null;
|
|
211
|
+
}
|
|
212
|
+
return control.value.size > this.filesSizeLimitInBytes ? { size: true } : null;
|
|
213
|
+
}
|
|
214
|
+
fileExtensionValidator(control) {
|
|
215
|
+
if (!this.acceptedMimeTypes) {
|
|
216
|
+
return null;
|
|
217
|
+
}
|
|
218
|
+
const fileType = control.value.type;
|
|
219
|
+
const isExtensionAllowed = this.acceptedMimeTypes.includes(fileType);
|
|
220
|
+
return isExtensionAllowed ? null : { extension: true };
|
|
221
|
+
}
|
|
222
|
+
maxFilesValidator(control) {
|
|
223
|
+
if (!this.maxFiles) {
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
return control.controls.length > this.maxFiles ? { maxFiles: true } : null;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
EvoUploadComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: EvoUploadComponent, deps: [{ token: i1.FormBuilder }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
|
|
230
|
+
EvoUploadComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: EvoUploadComponent, selector: "evo-upload", inputs: { accept: "accept", dropZoneLabel: "dropZoneLabel", dropZoneHint: "dropZoneHint", hideClearButton: "hideClearButton", hideSubmitButton: "hideSubmitButton", clickableFiles: "clickableFiles", earlyValidation: "earlyValidation", fileSizeLimit: "fileSizeLimit", maxFiles: "maxFiles", loading: "loading" }, outputs: { submit: "submit", addFiles: "addFiles", remove: "remove", clickFile: "clickFile" }, providers: [
|
|
231
|
+
{
|
|
232
|
+
provide: NG_VALUE_ACCESSOR,
|
|
233
|
+
useExisting: forwardRef(() => EvoUploadComponent),
|
|
234
|
+
multi: true,
|
|
235
|
+
},
|
|
236
|
+
], viewQueries: [{ propertyName: "inputFileElement", first: true, predicate: ["inputFile"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"evo-upload\">\n <label\n class=\"evo-upload__wrapper\"\n [evoUiClass]=\"{over: states.isDragOver, disabled: isDisabled || loading}\"\n (click)=\"onTouched()\"\n (dragover)=\"handleDragOver($event)\"\n (dragleave)=\"handleDragLeave($event)\"\n (drop)=\"handleDrop($event)\"\n >\n <evo-icon\n shape=\"upload\"\n class=\"evo-upload__upload-icon\"\n [evoUiClass]=\"{disabled: isDisabled || loading}\"\n ></evo-icon>\n <span class=\"evo-upload__title\" [evoUiClass]=\"{disabled: isDisabled || loading}\">{{ dropZoneLabel }}</span>\n\n <span class=\"evo-upload__hint\" [evoUiClass]=\"{disabled: isDisabled || loading}\">\n \u0438\u043B\u0438\n <span class=\"evo-upload__fake-link\" [evoUiClass]=\"{disabled: isDisabled || loading}\">\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435</span>\n <ng-container *ngIf=\"dropZoneHint\">\n (\n <span class=\"evo-upload__additional-hint\" [innerHTML]=\"dropZoneHint | safeHtml\"></span>\n )\n </ng-container>\n </span>\n\n <input\n #inputFile\n type=\"file\"\n class=\"evo-upload__input\"\n [accept]=\"accept\"\n [disabled]=\"loading || isDisabled\"\n [attr.multiple]=\"maxFiles === 1 ? null : true\"\n (change)=\"inputChange($event.target.files)\"\n />\n </label>\n\n <evo-alert *ngIf=\"!earlyValidation && filesForm.errors?.maxFiles\" type=\"danger\">\n <ng-container>\n \u041D\u0435\u043B\u044C\u0437\u044F \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u0431\u043E\u043B\u0435\u0435 {{ maxFiles || 1 | declination:[\"\u0444\u0430\u0439\u043B\u0430\", \"\u0444\u0430\u0439\u043B\u043E\u0432\", \"\u0444\u0430\u0439\u043B\u043E\u0432\"] }}\n </ng-container>\n </evo-alert>\n <evo-alert *ngIf=\"earlyValidation && filesForm.errors\" type=\"danger\">\n <ul class=\"evo-list\">\n <li *ngIf=\"filesForm.errors.maxFiles\">\n \u041D\u0435\u043B\u044C\u0437\u044F \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u0431\u043E\u043B\u0435\u0435 {{ maxFiles || 1 | declination:[\"\u0444\u0430\u0439\u043B\u0430\", \"\u0444\u0430\u0439\u043B\u043E\u0432\", \"\u0444\u0430\u0439\u043B\u043E\u0432\"] }}\n </li>\n <li *ngIf=\"filesForm.errors.size\">\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0440\u0430\u0437\u043C\u0435\u0440 \u043E\u0434\u043D\u043E\u0433\u043E \u0444\u0430\u0439\u043B\u0430 \u043D\u0435 \u0431\u043E\u043B\u0435\u0435 {{ filesSizeLimitText }}</li>\n <li *ngIf=\"filesForm.errors.extension\">\u0412\u044B\u0431\u0440\u0430\u043D \u0444\u0430\u0439\u043B \u043D\u0435\u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u043E\u0433\u043E \u0444\u043E\u0440\u043C\u0430\u0442\u0430</li>\n </ul>\n </evo-alert>\n\n <ul class=\"evo-upload__list\">\n <li *ngFor=\"let file of filesForm.controls; let i = index\" class=\"evo-upload__list-item\">\n <div class=\"evo-upload__item-inner\">\n <evo-icon shape=\"file\" svgWidth=\"24\" svgHeight=\"24\" class=\"evo-upload__file-icon\"></evo-icon>\n\n <span\n *ngIf=\"clickableFiles\"\n class=\"evo-upload__link evo-link\"\n (click)=\"clickFile.emit({ file: file.value, index: i })\"\n >\n {{ file.value.name }}\n </span>\n\n <span *ngIf=\"!clickableFiles\">{{ file.value.name }}</span>\n </div>\n\n <evo-icon\n shape=\"decline\"\n svgWidth=\"24\"\n svgHeight=\"24\"\n class=\"evo-upload__button-remove\"\n [evoUiClass]=\"{disabled: loading || isDisabled}\"\n (click)=\"handleItemRemove(i)\"\n ></evo-icon>\n\n <div\n class=\"evo-upload__list-delimiter\"\n [evoUiClass]=\"{error: filesForm.controls[i].errors}\"\n [ngSwitch]=\"getControlError(filesForm.controls[i])\"\n >\n <ng-container *ngSwitchCase=\"'size'\">\u0420\u0430\u0437\u043C\u0435\u0440 \u0444\u0430\u0439\u043B\u0430 \u043F\u0440\u0435\u0432\u044B\u0448\u0430\u0435\u0442 \u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u044B\u0439</ng-container>\n <ng-container *ngSwitchCase=\"'extension'\">\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0444\u043E\u0440\u043C\u0430\u0442 \u0444\u0430\u0439\u043B\u0430</ng-container>\n </div>\n </li>\n </ul>\n\n <div *ngIf=\"filesForm.controls.length\" class=\"evo-upload__controls\">\n <button\n *ngIf=\"!hideClearButton\"\n evoButton\n color=\"secondary\"\n theme=\"rounded-outline\"\n [disabled]=\"loading || isDisabled\"\n [loading]=\"loading\"\n (click)=\"handleResetButtonClick()\"\n >\n \u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0432\u0441\u0451\n </button>\n <button\n *ngIf=\"!hideSubmitButton\"\n evoButton\n color=\"success\"\n class=\"evo-upload__submit\"\n [disabled]=\"filesForm.invalid || loading || isDisabled\"\n [loading]=\"loading\"\n (click)=\"handleSubmitButtonClick()\"\n >\n \u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C\n </button>\n </div>\n</div>\n", styles: [".evo-link,.evo-upload__fake-link{color:#0986e2;font-weight:600;text-decoration:none;border-bottom:1px solid transparent;transition:color .3s,border-color .3s}.evo-link:hover,.evo-upload__fake-link:hover{color:#0986e2;border-bottom-color:#0986e2}.evo-link:active,.evo-upload__fake-link:active{color:#0879cb}.evo-link_dashed{border-bottom:1px dashed}.evo-link_dashed:hover{text-decoration:none;border-bottom-color:transparent}.evo-link_danger{color:#ff1817}.evo-link_danger:hover{color:#ff4645;border-bottom-color:#ff4645}.evo-link_danger:active{color:#e51715;border-bottom-color:#e51715}.evo-upload{width:100%}.evo-upload__wrapper{display:flex;flex-direction:column;align-items:center;width:100%;margin-bottom:24px;padding:32px 0;color:#231f20;background:#F4F6F8;border:2px solid transparent;border-radius:8px}@media (max-width: 767px){.evo-upload__wrapper{padding:16px}}.evo-upload__wrapper_disabled{pointer-events:none}.evo-upload__wrapper_over{border-color:#dbe3ea}.evo-upload__upload-icon{flex:0 0 48px;width:48px;height:48px;margin-bottom:24px;transition:fill .3s;fill:#91b1b8}.evo-upload__upload-icon_disabled{fill:#727272}@media (max-width: 767px){.evo-upload__upload-icon{margin-bottom:16px}}.evo-upload__title{margin-bottom:8px;font-weight:700;font-size:24px;text-align:center;transition:color .3s}.evo-upload__title_disabled{color:#727272}@media (max-width: 767px){.evo-upload__title{font-size:16px}}.evo-upload__hint{font-size:18px;text-align:center;transition:color .3s}.evo-upload__hint_disabled{color:#727272}@media (max-width: 767px){.evo-upload__hint{font-size:14px}}.evo-upload__fake-link_disabled{color:#727272}.evo-upload__input{display:none}.evo-upload__list{margin-top:24px;margin-bottom:24px}.evo-upload__list:empty{display:none}.evo-upload__file-icon{margin-right:8px;fill:#91b1b8}.evo-upload__list-item{display:flex;flex-wrap:wrap;align-items:center;margin-bottom:15px;color:#212121;font-weight:600;font-size:16px}.evo-upload__list-item:last-of-type{margin-bottom:24px}.evo-upload__item-inner{display:flex;flex-flow:row wrap;align-items:center}.evo-upload__list-delimiter{width:100%;margin-top:15px;color:#ff1817;font-size:14px;font-style:italic;line-height:22px;border-top:1px solid #C6C6C6}.evo-upload__list-delimiter_error{border-top-color:#ff1817}.evo-upload__button-remove{margin-left:auto;cursor:pointer;transition:fill .3s;fill:#91b1b8}.evo-upload__button-remove:not(.evo-upload__button-remove_disabled):hover{fill:#231f20}.evo-upload__button-remove_disabled{cursor:default;fill:#c6c6c6}.evo-upload__controls{display:flex;justify-content:space-between}.evo-upload__submit{margin-left:auto}.evo-upload__link{cursor:pointer}.evo-list{margin-bottom:0}.evo-list li:before{color:#fff}\n"], components: [{ type: i2.EvoIconComponent, selector: "evo-icon", inputs: ["shape", "svgWidth", "svgHeight", "svgViewBox"] }, { type: i3.EvoAlertComponent, selector: "evo-alert", inputs: ["closable", "icon", "iconSrc", "type", "size"], outputs: ["close"] }, { type: i4.EvoButtonComponent, selector: "button[evoButton], a[evoButton]", inputs: ["size", "color", "theme", "disabled", "loading"] }], directives: [{ type: i5.EvoUiClassDirective, selector: "[evoUiClass]", inputs: ["class", "evoUiClass"] }, { type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i6.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }], pipes: { "safeHtml": i7.SafeHtmlPipe, "declination": i8.DeclinationPipe } });
|
|
237
|
+
__decorate([
|
|
238
|
+
autobind
|
|
239
|
+
], EvoUploadComponent.prototype, "fileSizeValidator", null);
|
|
240
|
+
__decorate([
|
|
241
|
+
autobind
|
|
242
|
+
], EvoUploadComponent.prototype, "fileExtensionValidator", null);
|
|
243
|
+
__decorate([
|
|
244
|
+
autobind
|
|
245
|
+
], EvoUploadComponent.prototype, "maxFilesValidator", null);
|
|
246
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: EvoUploadComponent, decorators: [{
|
|
247
|
+
type: Component,
|
|
248
|
+
args: [{ selector: 'evo-upload', providers: [
|
|
249
|
+
{
|
|
250
|
+
provide: NG_VALUE_ACCESSOR,
|
|
251
|
+
useExisting: forwardRef(() => EvoUploadComponent),
|
|
252
|
+
multi: true,
|
|
253
|
+
},
|
|
254
|
+
], template: "<div class=\"evo-upload\">\n <label\n class=\"evo-upload__wrapper\"\n [evoUiClass]=\"{over: states.isDragOver, disabled: isDisabled || loading}\"\n (click)=\"onTouched()\"\n (dragover)=\"handleDragOver($event)\"\n (dragleave)=\"handleDragLeave($event)\"\n (drop)=\"handleDrop($event)\"\n >\n <evo-icon\n shape=\"upload\"\n class=\"evo-upload__upload-icon\"\n [evoUiClass]=\"{disabled: isDisabled || loading}\"\n ></evo-icon>\n <span class=\"evo-upload__title\" [evoUiClass]=\"{disabled: isDisabled || loading}\">{{ dropZoneLabel }}</span>\n\n <span class=\"evo-upload__hint\" [evoUiClass]=\"{disabled: isDisabled || loading}\">\n \u0438\u043B\u0438\n <span class=\"evo-upload__fake-link\" [evoUiClass]=\"{disabled: isDisabled || loading}\">\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435</span>\n <ng-container *ngIf=\"dropZoneHint\">\n (\n <span class=\"evo-upload__additional-hint\" [innerHTML]=\"dropZoneHint | safeHtml\"></span>\n )\n </ng-container>\n </span>\n\n <input\n #inputFile\n type=\"file\"\n class=\"evo-upload__input\"\n [accept]=\"accept\"\n [disabled]=\"loading || isDisabled\"\n [attr.multiple]=\"maxFiles === 1 ? null : true\"\n (change)=\"inputChange($event.target.files)\"\n />\n </label>\n\n <evo-alert *ngIf=\"!earlyValidation && filesForm.errors?.maxFiles\" type=\"danger\">\n <ng-container>\n \u041D\u0435\u043B\u044C\u0437\u044F \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u0431\u043E\u043B\u0435\u0435 {{ maxFiles || 1 | declination:[\"\u0444\u0430\u0439\u043B\u0430\", \"\u0444\u0430\u0439\u043B\u043E\u0432\", \"\u0444\u0430\u0439\u043B\u043E\u0432\"] }}\n </ng-container>\n </evo-alert>\n <evo-alert *ngIf=\"earlyValidation && filesForm.errors\" type=\"danger\">\n <ul class=\"evo-list\">\n <li *ngIf=\"filesForm.errors.maxFiles\">\n \u041D\u0435\u043B\u044C\u0437\u044F \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u0431\u043E\u043B\u0435\u0435 {{ maxFiles || 1 | declination:[\"\u0444\u0430\u0439\u043B\u0430\", \"\u0444\u0430\u0439\u043B\u043E\u0432\", \"\u0444\u0430\u0439\u043B\u043E\u0432\"] }}\n </li>\n <li *ngIf=\"filesForm.errors.size\">\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0440\u0430\u0437\u043C\u0435\u0440 \u043E\u0434\u043D\u043E\u0433\u043E \u0444\u0430\u0439\u043B\u0430 \u043D\u0435 \u0431\u043E\u043B\u0435\u0435 {{ filesSizeLimitText }}</li>\n <li *ngIf=\"filesForm.errors.extension\">\u0412\u044B\u0431\u0440\u0430\u043D \u0444\u0430\u0439\u043B \u043D\u0435\u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u043E\u0433\u043E \u0444\u043E\u0440\u043C\u0430\u0442\u0430</li>\n </ul>\n </evo-alert>\n\n <ul class=\"evo-upload__list\">\n <li *ngFor=\"let file of filesForm.controls; let i = index\" class=\"evo-upload__list-item\">\n <div class=\"evo-upload__item-inner\">\n <evo-icon shape=\"file\" svgWidth=\"24\" svgHeight=\"24\" class=\"evo-upload__file-icon\"></evo-icon>\n\n <span\n *ngIf=\"clickableFiles\"\n class=\"evo-upload__link evo-link\"\n (click)=\"clickFile.emit({ file: file.value, index: i })\"\n >\n {{ file.value.name }}\n </span>\n\n <span *ngIf=\"!clickableFiles\">{{ file.value.name }}</span>\n </div>\n\n <evo-icon\n shape=\"decline\"\n svgWidth=\"24\"\n svgHeight=\"24\"\n class=\"evo-upload__button-remove\"\n [evoUiClass]=\"{disabled: loading || isDisabled}\"\n (click)=\"handleItemRemove(i)\"\n ></evo-icon>\n\n <div\n class=\"evo-upload__list-delimiter\"\n [evoUiClass]=\"{error: filesForm.controls[i].errors}\"\n [ngSwitch]=\"getControlError(filesForm.controls[i])\"\n >\n <ng-container *ngSwitchCase=\"'size'\">\u0420\u0430\u0437\u043C\u0435\u0440 \u0444\u0430\u0439\u043B\u0430 \u043F\u0440\u0435\u0432\u044B\u0448\u0430\u0435\u0442 \u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u044B\u0439</ng-container>\n <ng-container *ngSwitchCase=\"'extension'\">\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0444\u043E\u0440\u043C\u0430\u0442 \u0444\u0430\u0439\u043B\u0430</ng-container>\n </div>\n </li>\n </ul>\n\n <div *ngIf=\"filesForm.controls.length\" class=\"evo-upload__controls\">\n <button\n *ngIf=\"!hideClearButton\"\n evoButton\n color=\"secondary\"\n theme=\"rounded-outline\"\n [disabled]=\"loading || isDisabled\"\n [loading]=\"loading\"\n (click)=\"handleResetButtonClick()\"\n >\n \u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0432\u0441\u0451\n </button>\n <button\n *ngIf=\"!hideSubmitButton\"\n evoButton\n color=\"success\"\n class=\"evo-upload__submit\"\n [disabled]=\"filesForm.invalid || loading || isDisabled\"\n [loading]=\"loading\"\n (click)=\"handleSubmitButtonClick()\"\n >\n \u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C\n </button>\n </div>\n</div>\n", styles: [".evo-link,.evo-upload__fake-link{color:#0986e2;font-weight:600;text-decoration:none;border-bottom:1px solid transparent;transition:color .3s,border-color .3s}.evo-link:hover,.evo-upload__fake-link:hover{color:#0986e2;border-bottom-color:#0986e2}.evo-link:active,.evo-upload__fake-link:active{color:#0879cb}.evo-link_dashed{border-bottom:1px dashed}.evo-link_dashed:hover{text-decoration:none;border-bottom-color:transparent}.evo-link_danger{color:#ff1817}.evo-link_danger:hover{color:#ff4645;border-bottom-color:#ff4645}.evo-link_danger:active{color:#e51715;border-bottom-color:#e51715}.evo-upload{width:100%}.evo-upload__wrapper{display:flex;flex-direction:column;align-items:center;width:100%;margin-bottom:24px;padding:32px 0;color:#231f20;background:#F4F6F8;border:2px solid transparent;border-radius:8px}@media (max-width: 767px){.evo-upload__wrapper{padding:16px}}.evo-upload__wrapper_disabled{pointer-events:none}.evo-upload__wrapper_over{border-color:#dbe3ea}.evo-upload__upload-icon{flex:0 0 48px;width:48px;height:48px;margin-bottom:24px;transition:fill .3s;fill:#91b1b8}.evo-upload__upload-icon_disabled{fill:#727272}@media (max-width: 767px){.evo-upload__upload-icon{margin-bottom:16px}}.evo-upload__title{margin-bottom:8px;font-weight:700;font-size:24px;text-align:center;transition:color .3s}.evo-upload__title_disabled{color:#727272}@media (max-width: 767px){.evo-upload__title{font-size:16px}}.evo-upload__hint{font-size:18px;text-align:center;transition:color .3s}.evo-upload__hint_disabled{color:#727272}@media (max-width: 767px){.evo-upload__hint{font-size:14px}}.evo-upload__fake-link_disabled{color:#727272}.evo-upload__input{display:none}.evo-upload__list{margin-top:24px;margin-bottom:24px}.evo-upload__list:empty{display:none}.evo-upload__file-icon{margin-right:8px;fill:#91b1b8}.evo-upload__list-item{display:flex;flex-wrap:wrap;align-items:center;margin-bottom:15px;color:#212121;font-weight:600;font-size:16px}.evo-upload__list-item:last-of-type{margin-bottom:24px}.evo-upload__item-inner{display:flex;flex-flow:row wrap;align-items:center}.evo-upload__list-delimiter{width:100%;margin-top:15px;color:#ff1817;font-size:14px;font-style:italic;line-height:22px;border-top:1px solid #C6C6C6}.evo-upload__list-delimiter_error{border-top-color:#ff1817}.evo-upload__button-remove{margin-left:auto;cursor:pointer;transition:fill .3s;fill:#91b1b8}.evo-upload__button-remove:not(.evo-upload__button-remove_disabled):hover{fill:#231f20}.evo-upload__button-remove_disabled{cursor:default;fill:#c6c6c6}.evo-upload__controls{display:flex;justify-content:space-between}.evo-upload__submit{margin-left:auto}.evo-upload__link{cursor:pointer}.evo-list{margin-bottom:0}.evo-list li:before{color:#fff}\n"] }]
|
|
255
|
+
}], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i0.Injector }]; }, propDecorators: { accept: [{
|
|
256
|
+
type: Input
|
|
257
|
+
}], dropZoneLabel: [{
|
|
258
|
+
type: Input
|
|
259
|
+
}], dropZoneHint: [{
|
|
260
|
+
type: Input
|
|
261
|
+
}], hideClearButton: [{
|
|
262
|
+
type: Input
|
|
263
|
+
}], hideSubmitButton: [{
|
|
264
|
+
type: Input
|
|
265
|
+
}], clickableFiles: [{
|
|
266
|
+
type: Input
|
|
267
|
+
}], earlyValidation: [{
|
|
268
|
+
type: Input
|
|
269
|
+
}], fileSizeLimit: [{
|
|
270
|
+
type: Input
|
|
271
|
+
}], maxFiles: [{
|
|
272
|
+
type: Input
|
|
273
|
+
}], loading: [{
|
|
274
|
+
type: Input
|
|
275
|
+
}], submit: [{
|
|
276
|
+
type: Output
|
|
277
|
+
}], addFiles: [{
|
|
278
|
+
type: Output
|
|
279
|
+
}], remove: [{
|
|
280
|
+
type: Output
|
|
281
|
+
}], clickFile: [{
|
|
282
|
+
type: Output
|
|
283
|
+
}], inputFileElement: [{
|
|
284
|
+
type: ViewChild,
|
|
285
|
+
args: ['inputFile']
|
|
286
|
+
}], fileSizeValidator: [], fileExtensionValidator: [], maxFilesValidator: [] } });
|
|
287
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZvLXVwbG9hZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ldm8tdWkta2l0L3NyYy9saWIvY29tcG9uZW50cy9ldm8tdXBsb2FkL2V2by11cGxvYWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXZvLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZXZvLXVwbG9hZC9ldm8tdXBsb2FkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUgsU0FBUyxFQUVULFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUtILFdBQVcsRUFDWCxpQkFBaUIsRUFDcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLFFBQVEsTUFBTSxvQkFBb0IsQ0FBQztBQUMxQyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7Ozs7Ozs7O0FBbUIvRCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsY0FBYztJQXdDbEQsWUFDWSxXQUF3QixFQUN0QixRQUFrQjtRQUU1QixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFIUixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBakN2QixrQkFBYSxHQUFHLG9DQUFvQyxDQUFDO1FBRXJELG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUN6QixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUN2QixvQkFBZSxHQUFHLEtBQUssQ0FBQztRQVF4QixZQUFPLEdBQUcsS0FBSyxDQUFDO1FB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QUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixDQUFDO1lBQ2pELEtBQUssRUFBRSxJQUFJO1NBQ2Q7S0FDSixnS0N0Q0wscWpMQWlIQTtBRCtKSTtJQURDLFFBQVE7MkRBT1I7QUFHRDtJQURDLFFBQVE7Z0VBVVI7QUFHRDtJQURDLFFBQVE7MkRBT1I7MkZBblFRLGtCQUFrQjtrQkFaOUIsU0FBUzsrQkFDSSxZQUFZLGFBR1g7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsbUJBQW1CLENBQUM7NEJBQ2pELEtBQUssRUFBRSxJQUFJO3lCQUNkO3FCQUNKO3lIQUlZLE1BQU07c0JBQWxCLEtBQUs7Z0JBT0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFFTyxhQUFhO3NCQUF6QixLQUFLO2dCQUtHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUVJLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUVpQixnQkFBZ0I7c0JBQXZDLFNBQVM7dUJBQUMsV0FBVztnQkEyTWQsaUJBQWlCLE1BU2pCLHNCQUFzQixNQVl0QixpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsIEluamVjdG9yLFxuICAgIElucHV0LCBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQWJzdHJhY3RDb250cm9sLFxuICAgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgIEZvcm1BcnJheSxcbiAgICBGb3JtQnVpbGRlcixcbiAgICBGb3JtQ29udHJvbCxcbiAgICBOR19WQUxVRV9BQ0NFU1NPUlxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgYXV0b2JpbmQgZnJvbSAnYXV0b2JpbmQtZGVjb3JhdG9yJztcbmltcG9ydCBieXRlcyBmcm9tICdieXRlcyc7XG5pbXBvcnQgKiBhcyBtaW1lIGZyb20gJ21pbWUnO1xuaW1wb3J0IHsgRXZvQmFzZUNvbnRyb2wgfSBmcm9tICcuLi8uLi9jb21tb24vZXZvLWJhc2UtY29udHJvbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZvVXBsb2FkSXRlbUNsaWNrRXZlbnQge1xuICAgIGZpbGU6IEZpbGU7XG4gICAgaW5kZXg6IG51bWJlcjtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdldm8tdXBsb2FkJyxcbiAgICBzdHlsZVVybHM6IFsnLi9ldm8tdXBsb2FkLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgdGVtcGxhdGVVcmw6ICcuL2V2by11cGxvYWQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEV2b1VwbG9hZENvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBFdm9VcGxvYWRDb21wb25lbnQgZXh0ZW5kcyBFdm9CYXNlQ29udHJvbCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlckNvbnRlbnRJbml0LCBPbkluaXQge1xuXG4gICAgQElucHV0KCkgc2V0IGFjY2VwdChleHRlbnNpb25zOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKGV4dGVuc2lvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuYWNjZXB0ZWRNaW1lVHlwZXMgPSBleHRlbnNpb25zXG4gICAgICAgICAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgICAgICAgICAubWFwKGV4dGVuc2lvbiA9PiBtaW1lLmdldFR5cGUoZXh0ZW5zaW9uKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgQElucHV0KCkgZHJvcFpvbmVMYWJlbCA9ICfQn9C10YDQtdGC0LDRidC40YLQtSDRgdGO0LTQsCDRhNCw0LnQu9GLINC00LvRjyDQt9Cw0LPRgNGD0LfQutC4JztcbiAgICBASW5wdXQoKSBkcm9wWm9uZUhpbnQ6IHN0cmluZztcbiAgICBASW5wdXQoKSBoaWRlQ2xlYXJCdXR0b24gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBoaWRlU3VibWl0QnV0dG9uID0gZmFsc2U7XG4gICAgQElucHV0KCkgY2xpY2thYmxlRmlsZXMgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBlYXJseVZhbGlkYXRpb24gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIHNldCBmaWxlU2l6ZUxpbWl0KGZpbGVTaXplOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5maWxlc1NpemVMaW1pdFRleHQgPSBmaWxlU2l6ZTtcbiAgICAgICAgdGhpcy5maWxlc1NpemVMaW1pdEluQnl0ZXMgPSBieXRlcyhmaWxlU2l6ZSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgbWF4RmlsZXM6IG51bWJlcjtcbiAgICBASW5wdXQoKSBsb2FkaW5nID0gZmFsc2U7XG5cbiAgICBAT3V0cHV0KCkgc3VibWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlTGlzdD4oKTtcbiAgICBAT3V0cHV0KCkgYWRkRmlsZXMgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbGVMaXN0PigpO1xuICAgIEBPdXRwdXQoKSByZW1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgICBAT3V0cHV0KCkgY2xpY2tGaWxlID0gbmV3IEV2ZW50RW1pdHRlcjxFdm9VcGxvYWRJdGVtQ2xpY2tFdmVudD4oKTtcblxuICAgIEBWaWV3Q2hpbGQoJ2lucHV0RmlsZScpIGlucHV0RmlsZUVsZW1lbnQ6IEVsZW1lbnRSZWY7XG5cbiAgICBpc0Rpc2FibGVkID0gZmFsc2U7XG4gICAgZmlsZXNGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5hcnJheShbXSwgW3RoaXMubWF4RmlsZXNWYWxpZGF0b3JdKTtcbiAgICBmaWxlc1NpemVMaW1pdFRleHQ6IHN0cmluZztcbiAgICBmaWxlc1NpemVMaW1pdEluQnl0ZXM6IG51bWJlcjtcbiAgICBzdGF0ZXMgPSB7XG4gICAgICAgIGlzRHJhZ092ZXI6IGZhbHNlLFxuICAgIH07XG4gICAgYWNjZXB0ZWRNaW1lVHlwZXM6IHN0cmluZ1tdO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgICAgICBwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICkge1xuICAgICAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlT25Gb3JtQ2hhbmdlcygpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgdGhpcy5tZXJnZUNvbnRyb2xzRXJyb3JzKCk7XG4gICAgfVxuXG4gICAgb25DaGFuZ2UgPSAodmFsdWUpID0+IHt9O1xuICAgIG9uVG91Y2hlZCA9ICgpID0+IHt9O1xuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuaXNEaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG5cbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLm1lcmdlQ29udHJvbHNFcnJvcnMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdyaXRlVmFsdWUoZmlsZUxpc3Q6IEZpbGVMaXN0IHwgRmlsZVtdKSB7XG4gICAgICAgIGlmIChmaWxlTGlzdCAmJiBmaWxlTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBpZiAoZmlsZUxpc3QgaW5zdGFuY2VvZiBBcnJheSB8fCBmaWxlTGlzdCBpbnN0YW5jZW9mIEZpbGVMaXN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy53aXBlVXBsb2FkTGlzdCgpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmVhcmx5VmFsaWRhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVhcmx5VmFsaWRhdGlvbkZuKGZpbGVMaXN0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZmlsZXNGb3JtLmVycm9ycykgeyByZXR1cm47IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzRmlsZXMoZmlsZUxpc3QgYXMgRmlsZUxpc3QpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignW0V2b1VpS2l0XTogd3JvbmcgaW5pdGlhbCB2YWx1ZSBwYXNzZWQgdG8gXCJldm8tdXBsb2FkXCIgY29tcG9uZW50LiBPbmx5IEZpbGVMaXN0IGFuZCBGaWxlW10gYXJlIGFsbG93ZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldENvbnRyb2xFcnJvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIWNvbnRyb2wuZXJyb3JzKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhjb250cm9sLmVycm9ycylbMF07XG4gICAgfVxuXG4gICAgaGFuZGxlRHJhZ092ZXIoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGlmICh0aGlzLmxvYWRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXRlcy5pc0RyYWdPdmVyID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBoYW5kbGVEcmFnTGVhdmUoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLnN0YXRlcy5pc0RyYWdPdmVyID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaGFuZGxlRHJvcChldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGNvbnN0IGZpbGVzID0gZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzO1xuXG4gICAgICAgIHRoaXMuc3RhdGVzLmlzRHJhZ092ZXIgPSBmYWxzZTtcbiAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZWFybHlWYWxpZGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lYXJseVZhbGlkYXRpb25GbihmaWxlcyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZmlsZXNGb3JtLmVycm9ycykgeyByZXR1cm47IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYWRkRmlsZXMuZW1pdChmaWxlcyk7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NGaWxlcyhmaWxlcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVJdGVtUmVtb3ZlKGluZGV4KSB7XG4gICAgICAgIGlmICh0aGlzLmxvYWRpbmcgfHwgdGhpcy5pc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWxlc0Zvcm0ucmVtb3ZlQXQoaW5kZXgpO1xuICAgICAgICB0aGlzLnJlbW92ZS5lbWl0KGluZGV4KTtcbiAgICB9XG5cbiAgICBoYW5kbGVSZXNldEJ1dHRvbkNsaWNrKCkge1xuICAgICAgICBpZiAodGhpcy5sb2FkaW5nIHx8IHRoaXMuaXNEaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy53aXBlVXBsb2FkTGlzdCgpO1xuICAgIH1cblxuICAgIGhhbmRsZVN1Ym1pdEJ1dHRvbkNsaWNrKCkge1xuICAgICAgICB0aGlzLnN1Ym1pdC5lbWl0KHRoaXMuZmlsZXNGb3JtLnZhbHVlKTtcbiAgICB9XG5cbiAgICBpbnB1dENoYW5nZShmaWxlczogRmlsZUxpc3QpIHtcbiAgICAgICAgaWYgKHRoaXMuZWFybHlWYWxpZGF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmVhcmx5VmFsaWRhdGlvbkZuKGZpbGVzKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbGVzRm9ybS5lcnJvcnMpIHsgcmV0dXJuOyB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hZGRGaWxlcy5lbWl0KGZpbGVzKTtcbiAgICAgICAgdGhpcy5wcm9jZXNzRmlsZXMoZmlsZXMpO1xuICAgIH1cblxuICAgIGVhcmx5VmFsaWRhdGlvbkZuKGZpbGVzOiBGaWxlTGlzdCB8IEZpbGVbXSkge1xuICAgICAgICB0aGlzLmZpbGVzRm9ybS5zZXRFcnJvcnMobnVsbCk7XG4gICAgICAgIGNvbnN0IGZpbGVzQXJyYXkgPSBBcnJheS5mcm9tKGZpbGVzKTtcbiAgICAgICAgY29uc3QgZXJyb3JzID0gW107XG4gICAgICAgIGlmICh0aGlzLm1heEZpbGVzICYmIHRoaXMuaXNGaWxlc0xlbmd0aFZhbGlkKGZpbGVzQXJyYXkpKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaCh7IG1heEZpbGVzOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZpbGVzU2l6ZUxpbWl0SW5CeXRlcyAmJiAhdGhpcy5pc0ZpbGVzU2l6ZVZhbGlkKGZpbGVzQXJyYXkpKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaCh7IHNpemU6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYWNjZXB0ZWRNaW1lVHlwZXMgJiYgIXRoaXMuaXNGaWxlc0V4dGVuc2lvblZhbGlkKGZpbGVzQXJyYXkpKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaCh7IGV4dGVuc2lvbjogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5maWxlc0Zvcm0uc2V0RXJyb3JzKE9iamVjdC5hc3NpZ24oe30sIC4uLmVycm9ycykpO1xuICAgICAgICAgICAgdGhpcy5tZXJnZUNvbnRyb2xzRXJyb3JzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc0ZpbGVzTGVuZ3RoVmFsaWQoZmlsZXM6IEZpbGVbXSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXhGaWxlcyA8IChmaWxlcy5sZW5ndGggKyB0aGlzLmZpbGVzRm9ybS5jb250cm9scy5sZW5ndGgpO1xuICAgIH1cblxuICAgIGlzRmlsZXNTaXplVmFsaWQoZmlsZXM6IEZpbGVbXSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIWZpbGVzLnNvbWUoKHsgc2l6ZSB9KSA9PiB0aGlzLmZpbGVzU2l6ZUxpbWl0SW5CeXRlcyA8IHNpemUpO1xuICAgIH1cblxuICAgIGlzRmlsZXNFeHRlbnNpb25WYWxpZChmaWxlczogRmlsZVtdKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBmaWxlcy5ldmVyeSgoeyB0eXBlIH0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFjY2VwdGVkTWltZVR5cGVzLmluY2x1ZGVzKHR5cGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm9jZXNzRmlsZXMoZmlsZXM6IEZpbGVMaXN0KSB7XG4gICAgICAgIGlmICh0aGlzLmxvYWRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIEFycmF5LmZyb20oZmlsZXMpLmZvckVhY2goKGZpbGU6IEZpbGUpID0+IHsgLy8gdHNsaW50OmRpc2FibGU6bm8tZm9yLWVhY2gtcHVzaFxuICAgICAgICAgICAgdGhpcy5maWxlc0Zvcm0ucHVzaChuZXcgRm9ybUNvbnRyb2woZmlsZSwgW3RoaXMuZmlsZUV4dGVuc2lvblZhbGlkYXRvciwgdGhpcy5maWxlU2l6ZVZhbGlkYXRvcl0pKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuaW5wdXRGaWxlRWxlbWVudCAmJiB0aGlzLmlucHV0RmlsZUVsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dEZpbGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdpcGVVcGxvYWRMaXN0KCkge1xuICAgICAgICB3aGlsZSAodGhpcy5maWxlc0Zvcm0uY29udHJvbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmZpbGVzRm9ybS5yZW1vdmVBdCgwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgbWVyZ2VDb250cm9sc0Vycm9ycygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVycm9ycyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZmlsZXNGb3JtLmVycm9ycyk7XG4gICAgICAgIHRoaXMuZmlsZXNGb3JtLmNvbnRyb2xzLmZvckVhY2goKGNvbnRyb2w6IEZvcm1Db250cm9sKSA9PiB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGVycm9ycywgY29udHJvbC5lcnJvcnMpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jb250cm9sLnNldEVycm9ycyhPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCA/IGVycm9ycyA6IG51bGwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3Vic2NyaWJlT25Gb3JtQ2hhbmdlcygpIHtcbiAgICAgICAgdGhpcy5maWxlc0Zvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5tZXJnZUNvbnRyb2xzRXJyb3JzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIEBhdXRvYmluZFxuICAgIHByaXZhdGUgZmlsZVNpemVWYWxpZGF0b3IoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSB7XG4gICAgICAgIGlmICghdGhpcy5maWxlc1NpemVMaW1pdEluQnl0ZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRyb2wudmFsdWUuc2l6ZSA+IHRoaXMuZmlsZXNTaXplTGltaXRJbkJ5dGVzID8geyBzaXplOiB0cnVlIH0gOiBudWxsO1xuICAgIH1cblxuICAgIEBhdXRvYmluZFxuICAgIHByaXZhdGUgZmlsZUV4dGVuc2lvblZhbGlkYXRvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpIHtcbiAgICAgICAgaWYgKCF0aGlzLmFjY2VwdGVkTWltZVR5cGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVUeXBlID0gKGNvbnRyb2wudmFsdWUgYXMgRmlsZSkudHlwZTtcbiAgICAgICAgY29uc3QgaXNFeHRlbnNpb25BbGxvd2VkID0gdGhpcy5hY2NlcHRlZE1pbWVUeXBlcy5pbmNsdWRlcyhmaWxlVHlwZSk7XG5cbiAgICAgICAgcmV0dXJuIGlzRXh0ZW5zaW9uQWxsb3dlZCA/IG51bGwgOiB7IGV4dGVuc2lvbjogdHJ1ZSB9O1xuICAgIH1cblxuICAgIEBhdXRvYmluZFxuICAgIHByaXZhdGUgbWF4RmlsZXNWYWxpZGF0b3IoY29udHJvbDogRm9ybUFycmF5KSB7XG4gICAgICAgIGlmICghdGhpcy5tYXhGaWxlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRyb2wuY29udHJvbHMubGVuZ3RoID4gdGhpcy5tYXhGaWxlcyA/IHsgbWF4RmlsZXM6IHRydWUgfSA6IG51bGw7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImV2by11cGxvYWRcIj5cbiAgICA8bGFiZWxcbiAgICAgICAgY2xhc3M9XCJldm8tdXBsb2FkX193cmFwcGVyXCJcbiAgICAgICAgW2V2b1VpQ2xhc3NdPVwie292ZXI6IHN0YXRlcy5pc0RyYWdPdmVyLCBkaXNhYmxlZDogaXNEaXNhYmxlZCB8fCBsb2FkaW5nfVwiXG4gICAgICAgIChjbGljayk9XCJvblRvdWNoZWQoKVwiXG4gICAgICAgIChkcmFnb3Zlcik9XCJoYW5kbGVEcmFnT3ZlcigkZXZlbnQpXCJcbiAgICAgICAgKGRyYWdsZWF2ZSk9XCJoYW5kbGVEcmFnTGVhdmUoJGV2ZW50KVwiXG4gICAgICAgIChkcm9wKT1cImhhbmRsZURyb3AoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgICA8ZXZvLWljb25cbiAgICAgICAgICAgIHNoYXBlPVwidXBsb2FkXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZXZvLXVwbG9hZF9fdXBsb2FkLWljb25cIlxuICAgICAgICAgICAgW2V2b1VpQ2xhc3NdPVwie2Rpc2FibGVkOiBpc0Rpc2FibGVkIHx8IGxvYWRpbmd9XCJcbiAgICAgICAgPjwvZXZvLWljb24+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZXZvLXVwbG9hZF9fdGl0bGVcIiBbZXZvVWlDbGFzc109XCJ7ZGlzYWJsZWQ6IGlzRGlzYWJsZWQgfHwgbG9hZGluZ31cIj57eyBkcm9wWm9uZUxhYmVsIH19PC9zcGFuPlxuXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZXZvLXVwbG9hZF9faGludFwiIFtldm9VaUNsYXNzXT1cIntkaXNhYmxlZDogaXNEaXNhYmxlZCB8fCBsb2FkaW5nfVwiPlxuICAgICAgICAgICAg0LjQu9C4XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImV2by11cGxvYWRfX2Zha2UtbGlua1wiIFtldm9VaUNsYXNzXT1cIntkaXNhYmxlZDogaXNEaXNhYmxlZCB8fCBsb2FkaW5nfVwiPtC30LDQs9GA0YPQt9C40YLQtTwvc3Bhbj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkcm9wWm9uZUhpbnRcIj5cbiAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJldm8tdXBsb2FkX19hZGRpdGlvbmFsLWhpbnRcIiBbaW5uZXJIVE1MXT1cImRyb3Bab25lSGludCB8IHNhZmVIdG1sXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAjaW5wdXRGaWxlXG4gICAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgICBjbGFzcz1cImV2by11cGxvYWRfX2lucHV0XCJcbiAgICAgICAgICAgIFthY2NlcHRdPVwiYWNjZXB0XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJsb2FkaW5nIHx8IGlzRGlzYWJsZWRcIlxuICAgICAgICAgICAgW2F0dHIubXVsdGlwbGVdPVwibWF4RmlsZXMgPT09IDEgPyBudWxsIDogdHJ1ZVwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cImlucHV0Q2hhbmdlKCRldmVudC50YXJnZXQuZmlsZXMpXCJcbiAgICAgICAgLz5cbiAgICA8L2xhYmVsPlxuXG4gICAgPGV2by1hbGVydCAqbmdJZj1cIiFlYXJseVZhbGlkYXRpb24gJiYgZmlsZXNGb3JtLmVycm9ycz8ubWF4RmlsZXNcIiB0eXBlPVwiZGFuZ2VyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgICDQndC10LvRjNC30Y8g0LfQsNCz0YDRg9C30LjRgtGMINCx0L7Qu9C10LUge3sgbWF4RmlsZXMgfHwgMSB8IGRlY2xpbmF0aW9uOltcItGE0LDQudC70LBcIiwgXCLRhNCw0LnQu9C+0LJcIiwgXCLRhNCw0LnQu9C+0LJcIl0gfX1cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9ldm8tYWxlcnQ+XG4gICAgPGV2by1hbGVydCAqbmdJZj1cImVhcmx5VmFsaWRhdGlvbiAmJiBmaWxlc0Zvcm0uZXJyb3JzXCIgdHlwZT1cImRhbmdlclwiPlxuICAgICAgICA8dWwgY2xhc3M9XCJldm8tbGlzdFwiPlxuICAgICAgICAgICAgPGxpICpuZ0lmPVwiZmlsZXNGb3JtLmVycm9ycy5tYXhGaWxlc1wiPlxuICAgICAgICAgICAgICAgINCd0LXQu9GM0LfRjyDQt9Cw0LPRgNGD0LfQuNGC0Ywg0LHQvtC70LXQtSB7eyBtYXhGaWxlcyB8fCAxIHwgZGVjbGluYXRpb246W1wi0YTQsNC50LvQsFwiLCBcItGE0LDQudC70L7QslwiLCBcItGE0LDQudC70L7QslwiXSB9fVxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDxsaSAqbmdJZj1cImZpbGVzRm9ybS5lcnJvcnMuc2l6ZVwiPtCc0LDQutGB0LjQvNCw0LvRjNC90YvQuSDRgNCw0LfQvNC10YAg0L7QtNC90L7Qs9C+INGE0LDQudC70LAg0L3QtSDQsdC+0LvQtdC1IHt7IGZpbGVzU2l6ZUxpbWl0VGV4dCB9fTwvbGk+XG4gICAgICAgICAgICA8bGkgKm5nSWY9XCJmaWxlc0Zvcm0uZXJyb3JzLmV4dGVuc2lvblwiPtCS0YvQsdGA0LDQvSDRhNCw0LnQuyDQvdC10LTQvtC/0YPRgdGC0LjQvNC+0LPQviDRhNC+0YDQvNCw0YLQsDwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgPC9ldm8tYWxlcnQ+XG5cbiAgICA8dWwgY2xhc3M9XCJldm8tdXBsb2FkX19saXN0XCI+XG4gICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgZmlsZSBvZiBmaWxlc0Zvcm0uY29udHJvbHM7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cImV2by11cGxvYWRfX2xpc3QtaXRlbVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV2by11cGxvYWRfX2l0ZW0taW5uZXJcIj5cbiAgICAgICAgICAgICAgICA8ZXZvLWljb24gc2hhcGU9XCJmaWxlXCIgc3ZnV2lkdGg9XCIyNFwiIHN2Z0hlaWdodD1cIjI0XCIgY2xhc3M9XCJldm8tdXBsb2FkX19maWxlLWljb25cIj48L2V2by1pY29uPlxuXG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjbGlja2FibGVGaWxlc1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXZvLXVwbG9hZF9fbGluayBldm8tbGlua1wiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGlja0ZpbGUuZW1pdCh7IGZpbGU6IGZpbGUudmFsdWUsIGluZGV4OiBpIH0pXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7IGZpbGUudmFsdWUubmFtZSB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWNsaWNrYWJsZUZpbGVzXCI+e3sgZmlsZS52YWx1ZS5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxldm8taWNvblxuICAgICAgICAgICAgICAgIHNoYXBlPVwiZGVjbGluZVwiXG4gICAgICAgICAgICAgICAgc3ZnV2lkdGg9XCIyNFwiXG4gICAgICAgICAgICAgICAgc3ZnSGVpZ2h0PVwiMjRcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZXZvLXVwbG9hZF9fYnV0dG9uLXJlbW92ZVwiXG4gICAgICAgICAgICAgICAgW2V2b1VpQ2xhc3NdPVwie2Rpc2FibGVkOiBsb2FkaW5nIHx8IGlzRGlzYWJsZWR9XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlSXRlbVJlbW92ZShpKVwiXG4gICAgICAgICAgICA+PC9ldm8taWNvbj5cblxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZXZvLXVwbG9hZF9fbGlzdC1kZWxpbWl0ZXJcIlxuICAgICAgICAgICAgICAgIFtldm9VaUNsYXNzXT1cIntlcnJvcjogZmlsZXNGb3JtLmNvbnRyb2xzW2ldLmVycm9yc31cIlxuICAgICAgICAgICAgICAgIFtuZ1N3aXRjaF09XCJnZXRDb250cm9sRXJyb3IoZmlsZXNGb3JtLmNvbnRyb2xzW2ldKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3NpemUnXCI+0KDQsNC30LzQtdGAINGE0LDQudC70LAg0L/RgNC10LLRi9GI0LDQtdGCINC00L7Qv9GD0YHRgtC40LzRi9C5PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2V4dGVuc2lvbidcIj7QndC10LLQtdGA0L3Ri9C5INGE0L7RgNC80LDRgiDRhNCw0LnQu9CwPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9saT5cbiAgICA8L3VsPlxuXG4gICAgPGRpdiAqbmdJZj1cImZpbGVzRm9ybS5jb250cm9scy5sZW5ndGhcIiBjbGFzcz1cImV2by11cGxvYWRfX2NvbnRyb2xzXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiIWhpZGVDbGVhckJ1dHRvblwiXG4gICAgICAgICAgICBldm9CdXR0b25cbiAgICAgICAgICAgIGNvbG9yPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgIHRoZW1lPVwicm91bmRlZC1vdXRsaW5lXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJsb2FkaW5nIHx8IGlzRGlzYWJsZWRcIlxuICAgICAgICAgICAgW2xvYWRpbmddPVwibG9hZGluZ1wiXG4gICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlUmVzZXRCdXR0b25DbGljaygpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAg0KPQtNCw0LvQuNGC0Ywg0LLRgdGRXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cIiFoaWRlU3VibWl0QnV0dG9uXCJcbiAgICAgICAgICAgIGV2b0J1dHRvblxuICAgICAgICAgICAgY29sb3I9XCJzdWNjZXNzXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZXZvLXVwbG9hZF9fc3VibWl0XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWxlc0Zvcm0uaW52YWxpZCB8fCBsb2FkaW5nIHx8IGlzRGlzYWJsZWRcIlxuICAgICAgICAgICAgW2xvYWRpbmddPVwibG9hZGluZ1wiXG4gICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlU3VibWl0QnV0dG9uQ2xpY2soKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgINCX0LDQs9GA0YPQt9C40YLRjFxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
|