@ardium-ui/ui 4.4.1 → 5.0.0-alpha.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/fesm2022/ardium-ui-ui.mjs +2525 -2413
- package/fesm2022/ardium-ui-ui.mjs.map +1 -1
- package/lib/_internal/boolean-component.d.ts +1 -1
- package/lib/_internal/disablable-component.d.ts +1 -1
- package/lib/_internal/focusable-component.d.ts +1 -1
- package/lib/_internal/form-field-component.d.ts +1 -1
- package/lib/_internal/ngmodel-component.d.ts +2 -2
- package/lib/_internal/selectable-list-component.d.ts +1 -1
- package/lib/_internal/utils/date.utils.d.ts +3 -0
- package/lib/buttons/_button-base.d.ts +1 -1
- package/lib/calendar/calendar.component.d.ts +8 -2
- package/lib/file-inputs/file-input-base.d.ts +7 -3
- package/lib/form-field/form-field-base.d.ts +1 -1
- package/lib/inputs/_simple-input-base.d.ts +3 -3
- package/lib/inputs/autocomplete-input/autocomplete-input.component.d.ts +66 -0
- package/lib/inputs/autocomplete-input/autocomplete-input.defaults.d.ts +15 -0
- package/lib/inputs/autocomplete-input/autocomplete-input.directives.d.ts +33 -0
- package/lib/inputs/autocomplete-input/autocomplete-input.module.d.ts +13 -0
- package/lib/inputs/autocomplete-input/index.d.ts +3 -0
- package/lib/inputs/date-input/date-input.component.d.ts +5 -2
- package/lib/inputs/input/index.d.ts +2 -1
- package/lib/inputs/input/input.component.d.ts +3 -56
- package/lib/inputs/input/input.defaults.d.ts +1 -10
- package/lib/inputs/input/input.directives.d.ts +0 -13
- package/lib/inputs/input/input.module.d.ts +3 -5
- package/lib/inputs/input-utils.d.ts +8 -8
- package/lib/inputs/number-input/number-input.component.d.ts +1 -0
- package/lib/option/option.component.d.ts +1 -1
- package/lib/slider/abstract-slider.d.ts +1 -1
- package/package.json +1 -3
- package/prebuilt-themes/default/inputs/{simple-input.css → autocomplete-input.css} +40 -15
- package/prebuilt-themes/default/inputs/autocomplete-input.css.map +1 -0
- package/prebuilt-themes/default/inputs/file-input.css +9 -4
- package/prebuilt-themes/default/inputs/file-input.css.map +1 -1
- package/prebuilt-themes/default/inputs/input.css +0 -25
- package/prebuilt-themes/default/inputs/input.css.map +1 -1
- package/public-api.d.ts +1 -1
- package/themes/default/inputs/autocomplete-input.scss +46 -0
- package/themes/default/inputs/file-input.scss +10 -2
- package/themes/default/inputs/input.scss +0 -34
- package/esm2022/ardium-ui-ui.mjs +0 -5
- package/esm2022/lib/_internal/boolean-component.mjs +0 -95
- package/esm2022/lib/_internal/clear-button/clear-button.component.mjs +0 -15
- package/esm2022/lib/_internal/clear-button/clear-button.module.mjs +0 -18
- package/esm2022/lib/_internal/disablable-component.mjs +0 -51
- package/esm2022/lib/_internal/focusable-component.mjs +0 -85
- package/esm2022/lib/_internal/form-field-component.mjs +0 -33
- package/esm2022/lib/_internal/item-storages/dropdown-item-storage.mjs +0 -453
- package/esm2022/lib/_internal/item-storages/simple-item-storage.mjs +0 -370
- package/esm2022/lib/_internal/item-storages/simplest-item-storage.mjs +0 -157
- package/esm2022/lib/_internal/models/pagination.model.mjs +0 -90
- package/esm2022/lib/_internal/models/queue.mjs +0 -59
- package/esm2022/lib/_internal/ngmodel-component.mjs +0 -99
- package/esm2022/lib/_internal/public-api.mjs +0 -2
- package/esm2022/lib/_internal/selectable-list-component.mjs +0 -271
- package/esm2022/lib/badge/badge.defaults.mjs +0 -20
- package/esm2022/lib/badge/badge.directive.mjs +0 -97
- package/esm2022/lib/badge/badge.module.mjs +0 -18
- package/esm2022/lib/badge/badge.types.mjs +0 -16
- package/esm2022/lib/badge/index.mjs +0 -5
- package/esm2022/lib/buttons/_button-base.defaults.mjs +0 -17
- package/esm2022/lib/buttons/_button-base.mjs +0 -26
- package/esm2022/lib/buttons/button/button.component.mjs +0 -38
- package/esm2022/lib/buttons/button/button.defaults.mjs +0 -17
- package/esm2022/lib/buttons/button/button.module.mjs +0 -18
- package/esm2022/lib/buttons/button/index.mjs +0 -4
- package/esm2022/lib/buttons/fab/fab.component.mjs +0 -33
- package/esm2022/lib/buttons/fab/fab.defaults.mjs +0 -17
- package/esm2022/lib/buttons/fab/fab.module.mjs +0 -18
- package/esm2022/lib/buttons/fab/index.mjs +0 -4
- package/esm2022/lib/buttons/general-button.types.mjs +0 -55
- package/esm2022/lib/buttons/icon-button/icon-button.component.mjs +0 -39
- package/esm2022/lib/buttons/icon-button/icon-button.defaults.mjs +0 -9
- package/esm2022/lib/buttons/icon-button/icon-button.module.mjs +0 -18
- package/esm2022/lib/buttons/icon-button/index.mjs +0 -4
- package/esm2022/lib/calendar/calendar.component.mjs +0 -466
- package/esm2022/lib/calendar/calendar.defaults.mjs +0 -26
- package/esm2022/lib/calendar/calendar.directives.mjs +0 -107
- package/esm2022/lib/calendar/calendar.internal-directives.mjs +0 -22
- package/esm2022/lib/calendar/calendar.internal-types.mjs +0 -2
- package/esm2022/lib/calendar/calendar.module.mjs +0 -71
- package/esm2022/lib/calendar/calendar.types.mjs +0 -6
- package/esm2022/lib/calendar/index.mjs +0 -6
- package/esm2022/lib/calendar/views/days-view/days-view.component.mjs +0 -282
- package/esm2022/lib/calendar/views/days-view/days-view.helpers.mjs +0 -65
- package/esm2022/lib/calendar/views/months-view/months-view.component.mjs +0 -245
- package/esm2022/lib/calendar/views/months-view/months-view.helpers.mjs +0 -22
- package/esm2022/lib/calendar/views/years-view/years-view.component.mjs +0 -244
- package/esm2022/lib/calendar/views/years-view/years-view.helpers.mjs +0 -14
- package/esm2022/lib/card/card.children.mjs +0 -96
- package/esm2022/lib/card/card.component.mjs +0 -38
- package/esm2022/lib/card/card.defaults.mjs +0 -17
- package/esm2022/lib/card/card.module.mjs +0 -59
- package/esm2022/lib/card/card.types.mjs +0 -9
- package/esm2022/lib/card/index.mjs +0 -6
- package/esm2022/lib/checkbox/checkbox.component.mjs +0 -68
- package/esm2022/lib/checkbox/checkbox.defaults.mjs +0 -17
- package/esm2022/lib/checkbox/checkbox.directives.mjs +0 -14
- package/esm2022/lib/checkbox/checkbox.internal-directives.mjs +0 -15
- package/esm2022/lib/checkbox/checkbox.module.mjs +0 -20
- package/esm2022/lib/checkbox/checkbox.types.mjs +0 -6
- package/esm2022/lib/checkbox/index.mjs +0 -6
- package/esm2022/lib/checkbox-list/checkbox-list.component.mjs +0 -116
- package/esm2022/lib/checkbox-list/checkbox-list.defaults.mjs +0 -25
- package/esm2022/lib/checkbox-list/checkbox-list.directives.mjs +0 -14
- package/esm2022/lib/checkbox-list/checkbox-list.module.mjs +0 -21
- package/esm2022/lib/checkbox-list/checkbox-list.types.mjs +0 -7
- package/esm2022/lib/checkbox-list/index.mjs +0 -6
- package/esm2022/lib/chip/chip.component.mjs +0 -36
- package/esm2022/lib/chip/chip.defaults.mjs +0 -20
- package/esm2022/lib/chip/chip.module.mjs +0 -21
- package/esm2022/lib/chip/deletable-chip/deletable-chip.component.mjs +0 -53
- package/esm2022/lib/chip/deletable-chip/deletable-chip.defaults.mjs +0 -17
- package/esm2022/lib/chip/index.mjs +0 -8
- package/esm2022/lib/chip/selectable-chip/selectable-chip.component.mjs +0 -53
- package/esm2022/lib/chip/selectable-chip/selectable-chip.defaults.mjs +0 -18
- package/esm2022/lib/dialog/dialog.component.mjs +0 -109
- package/esm2022/lib/dialog/dialog.defaults.mjs +0 -26
- package/esm2022/lib/dialog/dialog.directives.mjs +0 -25
- package/esm2022/lib/dialog/dialog.module.mjs +0 -21
- package/esm2022/lib/dialog/dialog.types.mjs +0 -10
- package/esm2022/lib/dialog/index.mjs +0 -6
- package/esm2022/lib/divider/divider.component.mjs +0 -19
- package/esm2022/lib/divider/divider.defaults.mjs +0 -13
- package/esm2022/lib/divider/divider.module.mjs +0 -18
- package/esm2022/lib/divider/index.mjs +0 -4
- package/esm2022/lib/dropdown-panel/dropdown-panel.component.mjs +0 -112
- package/esm2022/lib/dropdown-panel/dropdown-panel.defaults.mjs +0 -17
- package/esm2022/lib/dropdown-panel/dropdown-panel.module.mjs +0 -18
- package/esm2022/lib/dropdown-panel/dropdown-panel.types.mjs +0 -10
- package/esm2022/lib/dropdown-panel/index.mjs +0 -5
- package/esm2022/lib/file-inputs/file-drop-area/file-drop-area.component.mjs +0 -70
- package/esm2022/lib/file-inputs/file-drop-area/file-drop-area.defaults.mjs +0 -18
- package/esm2022/lib/file-inputs/file-drop-area/file-drop-area.directives.mjs +0 -42
- package/esm2022/lib/file-inputs/file-drop-area/file-drop-area.module.mjs +0 -52
- package/esm2022/lib/file-inputs/file-drop-area/index.mjs +0 -5
- package/esm2022/lib/file-inputs/file-input/file-input.component.mjs +0 -120
- package/esm2022/lib/file-inputs/file-input/file-input.defaults.mjs +0 -23
- package/esm2022/lib/file-inputs/file-input/file-input.directives.mjs +0 -86
- package/esm2022/lib/file-inputs/file-input/file-input.module.mjs +0 -55
- package/esm2022/lib/file-inputs/file-input/index.mjs +0 -5
- package/esm2022/lib/file-inputs/file-input-base.defaults.mjs +0 -8
- package/esm2022/lib/file-inputs/file-input-base.mjs +0 -333
- package/esm2022/lib/file-inputs/file-input-types.mjs +0 -8
- package/esm2022/lib/form-field/error/error.component.mjs +0 -17
- package/esm2022/lib/form-field/error/error.directive.mjs +0 -17
- package/esm2022/lib/form-field/form-field-base.mjs +0 -53
- package/esm2022/lib/form-field/form-field-child.token.mjs +0 -3
- package/esm2022/lib/form-field/form-field-native-inputs.mjs +0 -80
- package/esm2022/lib/form-field/form-field.component.mjs +0 -12
- package/esm2022/lib/form-field/form-field.defaults.mjs +0 -17
- package/esm2022/lib/form-field/form-field.module.mjs +0 -49
- package/esm2022/lib/form-field/hint/hint.component.mjs +0 -17
- package/esm2022/lib/form-field/hint/hint.directive.mjs +0 -30
- package/esm2022/lib/form-field/horizontal-form-field.component.mjs +0 -12
- package/esm2022/lib/form-field/index.mjs +0 -10
- package/esm2022/lib/form-field/label/label.component.mjs +0 -27
- package/esm2022/lib/form-field-frame/form-field-frame.component.mjs +0 -58
- package/esm2022/lib/form-field-frame/form-field-frame.defaults.mjs +0 -18
- package/esm2022/lib/form-field-frame/form-field-frame.directives.mjs +0 -25
- package/esm2022/lib/form-field-frame/form-field-frame.module.mjs +0 -19
- package/esm2022/lib/form-field-frame/index.mjs +0 -5
- package/esm2022/lib/icon/icon.component.mjs +0 -52
- package/esm2022/lib/icon/icon.defaults.mjs +0 -17
- package/esm2022/lib/icon/icon.module.mjs +0 -19
- package/esm2022/lib/icon/icon.pipe.mjs +0 -18
- package/esm2022/lib/icon/index.mjs +0 -5
- package/esm2022/lib/inputs/_simple-input-base.mjs +0 -153
- package/esm2022/lib/inputs/date-input/date-input.component.mjs +0 -375
- package/esm2022/lib/inputs/date-input/date-input.defaults.mjs +0 -38
- package/esm2022/lib/inputs/date-input/date-input.directive.mjs +0 -163
- package/esm2022/lib/inputs/date-input/date-input.module.mjs +0 -108
- package/esm2022/lib/inputs/date-input/date-input.serializers.mjs +0 -49
- package/esm2022/lib/inputs/date-input/date-input.types.mjs +0 -5
- package/esm2022/lib/inputs/date-input/index.mjs +0 -6
- package/esm2022/lib/inputs/digit-input/digit-input.component.mjs +0 -265
- package/esm2022/lib/inputs/digit-input/digit-input.defaults.mjs +0 -24
- package/esm2022/lib/inputs/digit-input/digit-input.model.mjs +0 -267
- package/esm2022/lib/inputs/digit-input/digit-input.module.mjs +0 -19
- package/esm2022/lib/inputs/digit-input/digit-input.types.mjs +0 -15
- package/esm2022/lib/inputs/digit-input/digit-input.utils.mjs +0 -8
- package/esm2022/lib/inputs/digit-input/index.mjs +0 -5
- package/esm2022/lib/inputs/hex-input/hex-input.component.mjs +0 -180
- package/esm2022/lib/inputs/hex-input/hex-input.defaults.mjs +0 -26
- package/esm2022/lib/inputs/hex-input/hex-input.directives.mjs +0 -36
- package/esm2022/lib/inputs/hex-input/hex-input.model.mjs +0 -97
- package/esm2022/lib/inputs/hex-input/hex-input.module.mjs +0 -37
- package/esm2022/lib/inputs/hex-input/index.mjs +0 -5
- package/esm2022/lib/inputs/input/index.mjs +0 -4
- package/esm2022/lib/inputs/input/input.component.mjs +0 -278
- package/esm2022/lib/inputs/input/input.defaults.mjs +0 -21
- package/esm2022/lib/inputs/input/input.directives.mjs +0 -58
- package/esm2022/lib/inputs/input/input.module.mjs +0 -61
- package/esm2022/lib/inputs/input-transformers.mjs +0 -66
- package/esm2022/lib/inputs/input-types.mjs +0 -6
- package/esm2022/lib/inputs/input-utils.mjs +0 -186
- package/esm2022/lib/inputs/number-input/index.mjs +0 -5
- package/esm2022/lib/inputs/number-input/number-input.component.mjs +0 -245
- package/esm2022/lib/inputs/number-input/number-input.defaults.mjs +0 -27
- package/esm2022/lib/inputs/number-input/number-input.directives.mjs +0 -14
- package/esm2022/lib/inputs/number-input/number-input.module.mjs +0 -21
- package/esm2022/lib/inputs/password-input/index.mjs +0 -6
- package/esm2022/lib/inputs/password-input/password-input.component.mjs +0 -167
- package/esm2022/lib/inputs/password-input/password-input.defaults.mjs +0 -24
- package/esm2022/lib/inputs/password-input/password-input.directives.mjs +0 -49
- package/esm2022/lib/inputs/password-input/password-input.module.mjs +0 -41
- package/esm2022/lib/inputs/password-input/password-input.types.mjs +0 -2
- package/esm2022/lib/inputs/simple-input/index.mjs +0 -5
- package/esm2022/lib/inputs/simple-input/simple-input.component.mjs +0 -50
- package/esm2022/lib/inputs/simple-input/simple-input.defaults.mjs +0 -25
- package/esm2022/lib/inputs/simple-input/simple-input.directives.mjs +0 -36
- package/esm2022/lib/inputs/simple-input/simple-input.module.mjs +0 -37
- package/esm2022/lib/kbd/index.mjs +0 -6
- package/esm2022/lib/kbd/kbd.component.mjs +0 -30
- package/esm2022/lib/kbd/kbd.defaults.mjs +0 -15
- package/esm2022/lib/kbd/kbd.directive.mjs +0 -33
- package/esm2022/lib/kbd/kbd.module.mjs +0 -20
- package/esm2022/lib/kbd/kbd.pipe.mjs +0 -21
- package/esm2022/lib/kbd-shortcut/index.mjs +0 -4
- package/esm2022/lib/kbd-shortcut/kbd-shortcut.component.mjs +0 -36
- package/esm2022/lib/kbd-shortcut/kbd-shortcut.defaults.mjs +0 -8
- package/esm2022/lib/kbd-shortcut/kbd-shortcut.module.mjs +0 -19
- package/esm2022/lib/modal/index.mjs +0 -5
- package/esm2022/lib/modal/modal.component.mjs +0 -95
- package/esm2022/lib/modal/modal.defaults.mjs +0 -20
- package/esm2022/lib/modal/modal.directives.mjs +0 -14
- package/esm2022/lib/modal/modal.module.mjs +0 -22
- package/esm2022/lib/option/index.mjs +0 -3
- package/esm2022/lib/option/option.component.mjs +0 -55
- package/esm2022/lib/option/option.module.mjs +0 -18
- package/esm2022/lib/progress-bar/index.mjs +0 -6
- package/esm2022/lib/progress-bar/progress-bar.component.mjs +0 -58
- package/esm2022/lib/progress-bar/progress-bar.defaults.mjs +0 -21
- package/esm2022/lib/progress-bar/progress-bar.directive.mjs +0 -14
- package/esm2022/lib/progress-bar/progress-bar.module.mjs +0 -19
- package/esm2022/lib/progress-bar/progress-bar.types.mjs +0 -19
- package/esm2022/lib/progress-circle/index.mjs +0 -6
- package/esm2022/lib/progress-circle/progress-circle.component.mjs +0 -45
- package/esm2022/lib/progress-circle/progress-circle.defaults.mjs +0 -21
- package/esm2022/lib/progress-circle/progress-circle.directive.mjs +0 -14
- package/esm2022/lib/progress-circle/progress-circle.module.mjs +0 -19
- package/esm2022/lib/progress-circle/progress-circle.types.mjs +0 -10
- package/esm2022/lib/radio/index.mjs +0 -5
- package/esm2022/lib/radio/radio/radio.component.mjs +0 -119
- package/esm2022/lib/radio/radio/radio.defaults.mjs +0 -16
- package/esm2022/lib/radio/radio-group.component.mjs +0 -203
- package/esm2022/lib/radio/radio.module.mjs +0 -19
- package/esm2022/lib/search-functions.mjs +0 -64
- package/esm2022/lib/segment/index.mjs +0 -6
- package/esm2022/lib/segment/segment.component.mjs +0 -125
- package/esm2022/lib/segment/segment.defaults.mjs +0 -26
- package/esm2022/lib/segment/segment.directives.mjs +0 -14
- package/esm2022/lib/segment/segment.module.mjs +0 -19
- package/esm2022/lib/segment/segment.types.mjs +0 -13
- package/esm2022/lib/select/index.mjs +0 -6
- package/esm2022/lib/select/select.component.mjs +0 -836
- package/esm2022/lib/select/select.defaults.mjs +0 -53
- package/esm2022/lib/select/select.directive.mjs +0 -171
- package/esm2022/lib/select/select.module.mjs +0 -112
- package/esm2022/lib/select/select.types.mjs +0 -2
- package/esm2022/lib/slide-toggle/index.mjs +0 -5
- package/esm2022/lib/slide-toggle/slide-toggle.component.mjs +0 -43
- package/esm2022/lib/slide-toggle/slide-toggle.defaults.mjs +0 -21
- package/esm2022/lib/slide-toggle/slide-toggle.module.mjs +0 -18
- package/esm2022/lib/slide-toggle/slide-toggle.types.mjs +0 -5
- package/esm2022/lib/slider/abstract-slider.mjs +0 -251
- package/esm2022/lib/slider/index.mjs +0 -8
- package/esm2022/lib/slider/range-slider/range-slider.component.mjs +0 -151
- package/esm2022/lib/slider/range-slider/range-slider.module.mjs +0 -18
- package/esm2022/lib/slider/slider.component.mjs +0 -100
- package/esm2022/lib/slider/slider.defaults.mjs +0 -14
- package/esm2022/lib/slider/slider.directive.mjs +0 -16
- package/esm2022/lib/slider/slider.module.mjs +0 -20
- package/esm2022/lib/slider/slider.types.mjs +0 -10
- package/esm2022/lib/snackbar/index.mjs +0 -5
- package/esm2022/lib/snackbar/snackbar-ref.mjs +0 -51
- package/esm2022/lib/snackbar/snackbar.component.mjs +0 -48
- package/esm2022/lib/snackbar/snackbar.service.mjs +0 -224
- package/esm2022/lib/snackbar/snackbar.token.mjs +0 -26
- package/esm2022/lib/snackbar/snackbar.types.mjs +0 -25
- package/esm2022/lib/spinner/index.mjs +0 -4
- package/esm2022/lib/spinner/spinner.component.mjs +0 -19
- package/esm2022/lib/spinner/spinner.defaults.mjs +0 -14
- package/esm2022/lib/spinner/spinner.module.mjs +0 -18
- package/esm2022/lib/star/index.mjs +0 -6
- package/esm2022/lib/star/rating-display/index.mjs +0 -6
- package/esm2022/lib/star/rating-display/rating-display.component.mjs +0 -71
- package/esm2022/lib/star/rating-display/rating-display.defaults.mjs +0 -16
- package/esm2022/lib/star/rating-display/rating-display.directives.mjs +0 -16
- package/esm2022/lib/star/rating-display/rating-display.module.mjs +0 -20
- package/esm2022/lib/star/rating-display/rating-display.types.mjs +0 -2
- package/esm2022/lib/star/rating-input/index.mjs +0 -6
- package/esm2022/lib/star/rating-input/rating-input.component.mjs +0 -191
- package/esm2022/lib/star/rating-input/rating-input.defaults.mjs +0 -17
- package/esm2022/lib/star/rating-input/rating-input.directives.mjs +0 -16
- package/esm2022/lib/star/rating-input/rating-input.module.mjs +0 -20
- package/esm2022/lib/star/rating-input/rating-input.types.mjs +0 -2
- package/esm2022/lib/star/star-button/index.mjs +0 -6
- package/esm2022/lib/star/star-button/star-button.component.mjs +0 -55
- package/esm2022/lib/star/star-button/star-button.defaults.mjs +0 -18
- package/esm2022/lib/star/star-button/star-button.directives.mjs +0 -16
- package/esm2022/lib/star/star-button/star-button.module.mjs +0 -20
- package/esm2022/lib/star/star-button/star-button.types.mjs +0 -2
- package/esm2022/lib/star/star.component.mjs +0 -36
- package/esm2022/lib/star/star.defaults.mjs +0 -15
- package/esm2022/lib/star/star.directives.mjs +0 -16
- package/esm2022/lib/star/star.module.mjs +0 -20
- package/esm2022/lib/star/star.types.mjs +0 -23
- package/esm2022/lib/statebox/index.mjs +0 -4
- package/esm2022/lib/statebox/statebox.component.mjs +0 -114
- package/esm2022/lib/statebox/statebox.defaults.mjs +0 -20
- package/esm2022/lib/statebox/statebox.module.mjs +0 -18
- package/esm2022/lib/statebox/statebox.types.mjs +0 -2
- package/esm2022/lib/tabber/index.mjs +0 -6
- package/esm2022/lib/tabber/tab/tab.component.mjs +0 -44
- package/esm2022/lib/tabber/tab/tab.defaults.mjs +0 -13
- package/esm2022/lib/tabber/tabber.component.mjs +0 -90
- package/esm2022/lib/tabber/tabber.defaults.mjs +0 -19
- package/esm2022/lib/tabber/tabber.module.mjs +0 -19
- package/esm2022/lib/table/index.mjs +0 -6
- package/esm2022/lib/table/table-item-storage.mjs +0 -564
- package/esm2022/lib/table/table.component.mjs +0 -367
- package/esm2022/lib/table/table.defaults.mjs +0 -53
- package/esm2022/lib/table/table.directives.mjs +0 -62
- package/esm2022/lib/table/table.module.mjs +0 -47
- package/esm2022/lib/table/table.types.mjs +0 -30
- package/esm2022/lib/table/utils.mjs +0 -18
- package/esm2022/lib/table-from-csv/index.mjs +0 -4
- package/esm2022/lib/table-from-csv/table-from-csv.component.mjs +0 -120
- package/esm2022/lib/table-from-csv/table-from-csv.defaults.mjs +0 -15
- package/esm2022/lib/table-from-csv/table-from-csv.module.mjs +0 -19
- package/esm2022/lib/table-pagination/index.mjs +0 -5
- package/esm2022/lib/table-pagination/table-pagination.component.mjs +0 -108
- package/esm2022/lib/table-pagination/table-pagination.defaults.mjs +0 -25
- package/esm2022/lib/table-pagination/table-pagination.module.mjs +0 -21
- package/esm2022/lib/table-pagination/table-pagination.types.mjs +0 -7
- package/esm2022/lib/text-list/index.mjs +0 -4
- package/esm2022/lib/text-list/text-list.component.mjs +0 -18
- package/esm2022/lib/text-list/text-list.module.mjs +0 -19
- package/esm2022/lib/text-list/text-list.pipe.mjs +0 -16
- package/esm2022/lib/types/alignment.types.mjs +0 -10
- package/esm2022/lib/types/button.types.mjs +0 -6
- package/esm2022/lib/types/colors.types.mjs +0 -43
- package/esm2022/lib/types/item-storage.types.mjs +0 -6
- package/esm2022/lib/types/theming.types.mjs +0 -48
- package/esm2022/lib/types/utility.types.mjs +0 -5
- package/esm2022/public-api.mjs +0 -74
- package/lib/inputs/simple-input/index.d.ts +0 -4
- package/lib/inputs/simple-input/simple-input.component.d.ts +0 -13
- package/lib/inputs/simple-input/simple-input.defaults.d.ts +0 -6
- package/lib/inputs/simple-input/simple-input.directives.d.ts +0 -20
- package/lib/inputs/simple-input/simple-input.module.d.ts +0 -11
- package/prebuilt-themes/default/inputs/simple-input.css.map +0 -1
- package/themes/default/inputs/simple-input.scss +0 -12
|
@@ -1,333 +0,0 @@
|
|
|
1
|
-
import { computed, Directive, inject, Input, input, output, signal, viewChild } from '@angular/core';
|
|
2
|
-
import { coerceBooleanProperty, coerceNumberProperty, FileSystemMethod, FileSystemService, } from '@ardium-ui/devkit';
|
|
3
|
-
import { isDefined } from 'simple-bool';
|
|
4
|
-
import { _FormFieldComponentBase } from '../_internal/form-field-component';
|
|
5
|
-
import { FileInputFailedUploadReason } from './file-input-types';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
export class _FileInputComponentBase extends _FormFieldComponentBase {
|
|
8
|
-
constructor() {
|
|
9
|
-
super(...arguments);
|
|
10
|
-
this._fileSystemService = inject(FileSystemService);
|
|
11
|
-
this.fileInputEl = viewChild('fileInput');
|
|
12
|
-
this.name = input('');
|
|
13
|
-
this._wasViewInit = false;
|
|
14
|
-
//! appearance
|
|
15
|
-
this.compact = input(false, { transform: v => coerceBooleanProperty(v) });
|
|
16
|
-
//! settings
|
|
17
|
-
this.multiple = input(false, { transform: v => coerceBooleanProperty(v) });
|
|
18
|
-
this.maxFiles = input(null, { transform: v => coerceNumberProperty(v, null) });
|
|
19
|
-
this.maxFilesWithMultiple = computed(() => (this.multiple() ? this.maxFiles() ?? Infinity : 1));
|
|
20
|
-
this.blockAfterUpload = input(false, { transform: v => coerceBooleanProperty(v) });
|
|
21
|
-
this.maxFileSizeBytes = input(null, { transform: v => coerceNumberProperty(v, null) });
|
|
22
|
-
this.accept = input('*');
|
|
23
|
-
this.directoryId = input(undefined);
|
|
24
|
-
this.startDirectory = input(undefined);
|
|
25
|
-
this.fileTypes = input(undefined);
|
|
26
|
-
this.acceptString = computed(() => {
|
|
27
|
-
const types = this.fileTypes();
|
|
28
|
-
if (types) {
|
|
29
|
-
const acceptEntries = [];
|
|
30
|
-
for (const type of types) {
|
|
31
|
-
if (type.accept) {
|
|
32
|
-
for (const mimeType in type.accept) {
|
|
33
|
-
const extensions = type.accept[mimeType];
|
|
34
|
-
if (extensions && extensions.length > 0) {
|
|
35
|
-
acceptEntries.push(...extensions);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
return acceptEntries.join(',');
|
|
41
|
-
}
|
|
42
|
-
const accept = this.accept();
|
|
43
|
-
if (Array.isArray(accept)) {
|
|
44
|
-
return accept.join(',');
|
|
45
|
-
}
|
|
46
|
-
return accept;
|
|
47
|
-
});
|
|
48
|
-
this.acceptedMimeTypes = computed(() => {
|
|
49
|
-
const types = this.fileTypes();
|
|
50
|
-
if (types) {
|
|
51
|
-
const mimeTypes = [];
|
|
52
|
-
for (const type of types) {
|
|
53
|
-
if (type.accept) {
|
|
54
|
-
for (const mimeType in type.accept) {
|
|
55
|
-
mimeTypes.push({ mimeType, extensions: new Set(type.accept[mimeType]) });
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
return mimeTypes;
|
|
60
|
-
}
|
|
61
|
-
return null;
|
|
62
|
-
});
|
|
63
|
-
//! value
|
|
64
|
-
this._value = null;
|
|
65
|
-
this.valueChange = output();
|
|
66
|
-
this.changeEvent = output({ alias: 'change' });
|
|
67
|
-
this.dragFilesEvent = output({ alias: 'dragFiles' });
|
|
68
|
-
this.failedUploadEvent = output({ alias: 'failedUpload' });
|
|
69
|
-
this._valueBeforeInit = null;
|
|
70
|
-
//! temporary value
|
|
71
|
-
//for drag event handling
|
|
72
|
-
this._draggedFiles = null;
|
|
73
|
-
//! view state
|
|
74
|
-
this.currentViewState = signal('idle');
|
|
75
|
-
this._beforeDragoverState = 'idle';
|
|
76
|
-
}
|
|
77
|
-
ngOnInit() {
|
|
78
|
-
super.ngOnInit();
|
|
79
|
-
if (!(window.File && window.FileReader && window.Blob)) {
|
|
80
|
-
console.error(new Error(`ARD-FT${this.componentId}0: Cannot use Ardium UI file features because this browser does not support file handling!`));
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
ngAfterViewInit() {
|
|
84
|
-
this._wasViewInit = true;
|
|
85
|
-
this._updateElementValue();
|
|
86
|
-
}
|
|
87
|
-
get shouldBeBlocked() {
|
|
88
|
-
return this.blockAfterUpload() && isDefined(this.value);
|
|
89
|
-
}
|
|
90
|
-
get value() {
|
|
91
|
-
return this._value;
|
|
92
|
-
}
|
|
93
|
-
set value(v) {
|
|
94
|
-
this.writeValue(v);
|
|
95
|
-
}
|
|
96
|
-
writeValue(v) {
|
|
97
|
-
this._writeValue(v, false);
|
|
98
|
-
}
|
|
99
|
-
_writeValue(v, emitEvents = true) {
|
|
100
|
-
if (!(v instanceof File) && !Array.isArray(v) && v !== null) {
|
|
101
|
-
console.error(new Error(`ARD-FT${this.componentId}1: <ard-file-input>'s value must be a File, an array of Files, or null.`));
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
if (v instanceof File) {
|
|
105
|
-
v = [v];
|
|
106
|
-
}
|
|
107
|
-
if (Array.isArray(v) && !this.multiple() && v.length > 1) {
|
|
108
|
-
console.warn(`ARD-WA${this.componentId}2: <ard-file-input> received an array of files but the 'multiple' input is not set to true. Only the first file will be used.`);
|
|
109
|
-
v = [v[0]];
|
|
110
|
-
}
|
|
111
|
-
if (Array.isArray(v) && v.length === 0) {
|
|
112
|
-
v = null;
|
|
113
|
-
}
|
|
114
|
-
if (v === null) {
|
|
115
|
-
this.currentViewState.set('idle');
|
|
116
|
-
}
|
|
117
|
-
else {
|
|
118
|
-
this.currentViewState.set('uploaded');
|
|
119
|
-
}
|
|
120
|
-
this._value = v;
|
|
121
|
-
if (this._wasViewInit)
|
|
122
|
-
this._updateElementValue();
|
|
123
|
-
if (emitEvents) {
|
|
124
|
-
this._emitChange();
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
_emitChange() {
|
|
128
|
-
const v = this.value;
|
|
129
|
-
this._onChangeRegistered?.(v);
|
|
130
|
-
this.valueChange.emit(v);
|
|
131
|
-
this.changeEvent.emit(v);
|
|
132
|
-
}
|
|
133
|
-
openBrowseDialog() {
|
|
134
|
-
if (this._fileSystemService.isFileSystemAPISupported('showOpenFilePicker') &&
|
|
135
|
-
(this.directoryId() || this.startDirectory() || this.fileTypes())) {
|
|
136
|
-
this._fileSystemService
|
|
137
|
-
.requestFileUpload({
|
|
138
|
-
method: FileSystemMethod.PreferFileSystem,
|
|
139
|
-
multiple: this.multiple(),
|
|
140
|
-
directoryId: this.directoryId() ?? undefined,
|
|
141
|
-
startDirectory: this.startDirectory() ?? undefined,
|
|
142
|
-
types: this.fileTypes() ?? undefined,
|
|
143
|
-
accept: this.accept() === '*' ? undefined : this.accept(),
|
|
144
|
-
})
|
|
145
|
-
.then(fileOrFiles => {
|
|
146
|
-
if (!fileOrFiles) {
|
|
147
|
-
this._writeValue(null);
|
|
148
|
-
this.currentViewState.set('idle');
|
|
149
|
-
return;
|
|
150
|
-
}
|
|
151
|
-
const files = Array.isArray(fileOrFiles) ? fileOrFiles : [fileOrFiles];
|
|
152
|
-
if (files.length === 0) {
|
|
153
|
-
this._writeValue(null);
|
|
154
|
-
this.currentViewState.set('idle');
|
|
155
|
-
return;
|
|
156
|
-
}
|
|
157
|
-
this._writeValue(files);
|
|
158
|
-
this.currentViewState.set('uploaded');
|
|
159
|
-
// this._changeDetectorRef.markForCheck();
|
|
160
|
-
});
|
|
161
|
-
return;
|
|
162
|
-
}
|
|
163
|
-
this.fileInputEl()?.nativeElement.click();
|
|
164
|
-
}
|
|
165
|
-
//! event handlers
|
|
166
|
-
onDragover(event) {
|
|
167
|
-
event.preventDefault();
|
|
168
|
-
if (this.shouldBeBlocked) {
|
|
169
|
-
if (!event.dataTransfer)
|
|
170
|
-
return;
|
|
171
|
-
event.dataTransfer.dropEffect = 'none';
|
|
172
|
-
return;
|
|
173
|
-
}
|
|
174
|
-
if (this.currentViewState() === 'dragover')
|
|
175
|
-
return;
|
|
176
|
-
this._draggedFiles = this._countDragenterFiles(event.dataTransfer);
|
|
177
|
-
if (!this._draggedFiles)
|
|
178
|
-
return;
|
|
179
|
-
this._beforeDragoverState = this.currentViewState();
|
|
180
|
-
this.currentViewState.set('dragover');
|
|
181
|
-
}
|
|
182
|
-
onDragleave() {
|
|
183
|
-
if (this.shouldBeBlocked)
|
|
184
|
-
return;
|
|
185
|
-
if (this.currentViewState() !== 'dragover')
|
|
186
|
-
return;
|
|
187
|
-
this.currentViewState.set(this._beforeDragoverState);
|
|
188
|
-
}
|
|
189
|
-
onDrop(event) {
|
|
190
|
-
event.preventDefault();
|
|
191
|
-
if (this.shouldBeBlocked)
|
|
192
|
-
return;
|
|
193
|
-
const filelist = event.dataTransfer?.files;
|
|
194
|
-
if (!filelist) {
|
|
195
|
-
this.currentViewState.set('idle');
|
|
196
|
-
return;
|
|
197
|
-
}
|
|
198
|
-
const files = Array.from(filelist);
|
|
199
|
-
if (!files) {
|
|
200
|
-
this.currentViewState.set('idle');
|
|
201
|
-
return;
|
|
202
|
-
}
|
|
203
|
-
const filteredFiles = [];
|
|
204
|
-
const failedFiles = [];
|
|
205
|
-
const acceptedMimeTypes = this.acceptedMimeTypes();
|
|
206
|
-
if (acceptedMimeTypes) {
|
|
207
|
-
let mimeTypeMatched = false;
|
|
208
|
-
fileLoop: for (const file of files) {
|
|
209
|
-
const { shouldAccept, reason } = this._filterFilesBasedOnSizeAndCount(file, filteredFiles.length);
|
|
210
|
-
if (!shouldAccept) {
|
|
211
|
-
failedFiles.push({ file, reason: reason });
|
|
212
|
-
continue;
|
|
213
|
-
}
|
|
214
|
-
mimeTypeMatched = false;
|
|
215
|
-
for (const mimeTypeObj of acceptedMimeTypes) {
|
|
216
|
-
if (isMimeTypeMatching(file, mimeTypeObj.mimeType)) {
|
|
217
|
-
mimeTypeMatched = true;
|
|
218
|
-
const extension = '.' + file.name.split('.').pop()?.toLowerCase();
|
|
219
|
-
if (mimeTypeObj.extensions.size === 0 || mimeTypeObj.extensions.has('*') || mimeTypeObj.extensions.has(extension)) {
|
|
220
|
-
filteredFiles.push(file);
|
|
221
|
-
continue fileLoop;
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
if (!mimeTypeMatched) {
|
|
226
|
-
failedFiles.push({ file, reason: FileInputFailedUploadReason.InvalidMimeType });
|
|
227
|
-
}
|
|
228
|
-
else {
|
|
229
|
-
failedFiles.push({ file, reason: FileInputFailedUploadReason.MimeTypeFoundButExtensionNotAllowed });
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
else {
|
|
234
|
-
const accept = this.accept();
|
|
235
|
-
let acceptEntries = [];
|
|
236
|
-
if (Array.isArray(accept)) {
|
|
237
|
-
acceptEntries = accept.map(e => e.trim().toLowerCase());
|
|
238
|
-
}
|
|
239
|
-
else {
|
|
240
|
-
acceptEntries = accept.split(',').map(e => e.trim().toLowerCase());
|
|
241
|
-
}
|
|
242
|
-
if (typeof accept === 'string' && accept === '*') {
|
|
243
|
-
for (const file of files) {
|
|
244
|
-
const { shouldAccept, reason } = this._filterFilesBasedOnSizeAndCount(file, filteredFiles.length);
|
|
245
|
-
if (!shouldAccept) {
|
|
246
|
-
failedFiles.push({ file, reason: reason });
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
else {
|
|
251
|
-
fileLoop: for (const file of files) {
|
|
252
|
-
const { shouldAccept, reason } = this._filterFilesBasedOnSizeAndCount(file, filteredFiles.length);
|
|
253
|
-
if (!shouldAccept) {
|
|
254
|
-
failedFiles.push({ file, reason: reason });
|
|
255
|
-
continue;
|
|
256
|
-
}
|
|
257
|
-
const extension = '.' + file.name.split('.').at(-1)?.toLowerCase();
|
|
258
|
-
for (const entry of acceptEntries) {
|
|
259
|
-
if (extension === entry) {
|
|
260
|
-
filteredFiles.push(file);
|
|
261
|
-
continue fileLoop;
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
failedFiles.push({ file, reason: FileInputFailedUploadReason.InvalidExtension });
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
this.dragFilesEvent.emit(filteredFiles);
|
|
269
|
-
this.failedUploadEvent.emit(failedFiles);
|
|
270
|
-
this.currentViewState.set('uploaded');
|
|
271
|
-
this._writeValue(filteredFiles.length > 0 ? filteredFiles : null);
|
|
272
|
-
}
|
|
273
|
-
onInputChange() {
|
|
274
|
-
const files = Array.from(this.fileInputEl()?.nativeElement.files ?? []);
|
|
275
|
-
if (files.length === 0) {
|
|
276
|
-
this._writeValue(null);
|
|
277
|
-
this.currentViewState.set('idle');
|
|
278
|
-
return;
|
|
279
|
-
}
|
|
280
|
-
this._writeValue(files);
|
|
281
|
-
this.currentViewState.set('uploaded');
|
|
282
|
-
}
|
|
283
|
-
//! helpers
|
|
284
|
-
_filterFilesBasedOnSizeAndCount(file, existingFileCount) {
|
|
285
|
-
// check count
|
|
286
|
-
if (existingFileCount >= this.maxFilesWithMultiple()) {
|
|
287
|
-
return { shouldAccept: false, reason: FileInputFailedUploadReason.TooManyFiles };
|
|
288
|
-
}
|
|
289
|
-
// check size
|
|
290
|
-
if (file.size > 0 && this.maxFileSizeBytes() !== null && file.size > this.maxFileSizeBytes()) {
|
|
291
|
-
return { shouldAccept: false, reason: FileInputFailedUploadReason.FileTooBig };
|
|
292
|
-
}
|
|
293
|
-
// all good
|
|
294
|
-
return { shouldAccept: true };
|
|
295
|
-
}
|
|
296
|
-
_countDragenterFiles(data) {
|
|
297
|
-
if (!data)
|
|
298
|
-
return null;
|
|
299
|
-
return Array.from(data.items).filter(item => item.kind === 'file').length;
|
|
300
|
-
}
|
|
301
|
-
_updateElementValue() {
|
|
302
|
-
const v = this.value;
|
|
303
|
-
const inputEl = this.fileInputEl()?.nativeElement;
|
|
304
|
-
if (!inputEl)
|
|
305
|
-
return;
|
|
306
|
-
if (!v) {
|
|
307
|
-
inputEl.files = null;
|
|
308
|
-
return;
|
|
309
|
-
}
|
|
310
|
-
const dataTransfer = new DataTransfer();
|
|
311
|
-
for (const file of v) {
|
|
312
|
-
dataTransfer.items.add(file);
|
|
313
|
-
}
|
|
314
|
-
inputEl.files = dataTransfer.files;
|
|
315
|
-
}
|
|
316
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: _FileInputComponentBase, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
317
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "18.2.13", type: _FileInputComponentBase, inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, compact: { classPropertyName: "compact", publicName: "compact", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, maxFiles: { classPropertyName: "maxFiles", publicName: "maxFiles", isSignal: true, isRequired: false, transformFunction: null }, blockAfterUpload: { classPropertyName: "blockAfterUpload", publicName: "blockAfterUpload", isSignal: true, isRequired: false, transformFunction: null }, maxFileSizeBytes: { classPropertyName: "maxFileSizeBytes", publicName: "maxFileSizeBytes", isSignal: true, isRequired: false, transformFunction: null }, accept: { classPropertyName: "accept", publicName: "accept", isSignal: true, isRequired: false, transformFunction: null }, directoryId: { classPropertyName: "directoryId", publicName: "directoryId", isSignal: true, isRequired: false, transformFunction: null }, startDirectory: { classPropertyName: "startDirectory", publicName: "startDirectory", isSignal: true, isRequired: false, transformFunction: null }, fileTypes: { classPropertyName: "fileTypes", publicName: "fileTypes", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", changeEvent: "change", dragFilesEvent: "dragFiles", failedUploadEvent: "failedUpload" }, viewQueries: [{ propertyName: "fileInputEl", first: true, predicate: ["fileInput"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0 }); }
|
|
318
|
-
}
|
|
319
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: _FileInputComponentBase, decorators: [{
|
|
320
|
-
type: Directive
|
|
321
|
-
}], propDecorators: { value: [{
|
|
322
|
-
type: Input
|
|
323
|
-
}] } });
|
|
324
|
-
function isMimeTypeMatching(file, mimeType) {
|
|
325
|
-
if (mimeType === '*')
|
|
326
|
-
return true;
|
|
327
|
-
if (mimeType.endsWith('/*')) {
|
|
328
|
-
const prefix = mimeType.slice(0, -2);
|
|
329
|
-
return file.type.startsWith(prefix);
|
|
330
|
-
}
|
|
331
|
-
return file.type === mimeType;
|
|
332
|
-
}
|
|
333
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1pbnB1dC1iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9maWxlLWlucHV0cy9maWxlLWlucHV0LWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFFBQVEsRUFDUixTQUFTLEVBRVQsTUFBTSxFQUNOLEtBQUssRUFDTCxLQUFLLEVBRUwsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixvQkFBb0IsRUFDcEIsZ0JBQWdCLEVBQ2hCLGlCQUFpQixHQUVsQixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDeEMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFHNUUsT0FBTyxFQUF5QiwyQkFBMkIsRUFBc0IsTUFBTSxvQkFBb0IsQ0FBQzs7QUFHNUcsTUFBTSxPQUFnQix1QkFBd0IsU0FBUSx1QkFBdUI7SUFEN0U7O1FBSW1CLHVCQUFrQixHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBSXZELGdCQUFXLEdBQUcsU0FBUyxDQUErQixXQUFXLENBQUMsQ0FBQztRQUVuRSxTQUFJLEdBQUcsS0FBSyxDQUFTLEVBQUUsQ0FBQyxDQUFDO1FBWXhCLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBTy9CLGNBQWM7UUFDTCxZQUFPLEdBQUcsS0FBSyxDQUFlLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUU1RixZQUFZO1FBQ0gsYUFBUSxHQUFHLEtBQUssQ0FBZSxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxD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S0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQixDQUFDO1FBQ0QsT0FBTyxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDO0lBQ3JDLENBQUM7K0dBaFdtQix1QkFBdUI7bUdBQXZCLHVCQUF1Qjs7NEZBQXZCLHVCQUF1QjtrQkFENUMsU0FBUzs4QkErRkosS0FBSztzQkFEUixLQUFLOztBQXNRUixTQUFTLGtCQUFrQixDQUFDLElBQVUsRUFBRSxRQUFnQjtJQUN0RCxJQUFJLFFBQVEsS0FBSyxHQUFHO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDbEMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDNUIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDO0FBQ2hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgY29tcHV0ZWQsXHJcbiAgRGlyZWN0aXZlLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgaW5qZWN0LFxyXG4gIElucHV0LFxyXG4gIGlucHV0LFxyXG4gIE9uSW5pdCxcclxuICBvdXRwdXQsXHJcbiAgc2lnbmFsLFxyXG4gIHZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSxcclxuICBjb2VyY2VOdW1iZXJQcm9wZXJ0eSxcclxuICBGaWxlU3lzdGVtTWV0aG9kLFxyXG4gIEZpbGVTeXN0ZW1TZXJ2aWNlLFxyXG4gIEZpbGVTeXN0ZW1TdGFydERpcmVjdG9yeSxcclxufSBmcm9tICdAYXJkaXVtLXVpL2RldmtpdCc7XHJcbmltcG9ydCB7IGlzRGVmaW5lZCB9IGZyb20gJ3NpbXBsZS1ib29sJztcclxuaW1wb3J0IHsgX0Zvcm1GaWVsZENvbXBvbmVudEJhc2UgfSBmcm9tICcuLi9faW50ZXJuYWwvZm9ybS1maWVsZC1jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBOdWxsYWJsZSB9IGZyb20gJy4uL3R5cGVzL3V0aWxpdHkudHlwZXMnO1xyXG5pbXBvcnQgeyBfRmlsZUlucHV0QmFzZURlZmF1bHRzIH0gZnJvbSAnLi9maWxlLWlucHV0LWJhc2UuZGVmYXVsdHMnO1xyXG5pbXBvcnQgeyBGaWxlSW5wdXRGYWlsZWRVcGxvYWQsIEZpbGVJbnB1dEZhaWxlZFVwbG9hZFJlYXNvbiwgRmlsZUlucHV0RmlsZVR5cGVzIH0gZnJvbSAnLi9maWxlLWlucHV0LXR5cGVzJztcclxuXHJcbkBEaXJlY3RpdmUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgX0ZpbGVJbnB1dENvbXBvbmVudEJhc2UgZXh0ZW5kcyBfRm9ybUZpZWxkQ29tcG9uZW50QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlYWRvbmx5IF9ERUZBVUxUUyE6IF9GaWxlSW5wdXRCYXNlRGVmYXVsdHM7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbGVTeXN0ZW1TZXJ2aWNlID0gaW5qZWN0KEZpbGVTeXN0ZW1TZXJ2aWNlKTtcclxuXHJcbiAgYWJzdHJhY3QgcmVhZG9ubHkgY29tcG9uZW50SWQ6IHN0cmluZztcclxuXHJcbiAgcmVhZG9ubHkgZmlsZUlucHV0RWwgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50Pj4oJ2ZpbGVJbnB1dCcpO1xyXG5cclxuICByZWFkb25seSBuYW1lID0gaW5wdXQ8c3RyaW5nPignJyk7XHJcblxyXG4gIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgIGlmICghKHdpbmRvdy5GaWxlICYmIHdpbmRvdy5GaWxlUmVhZGVyICYmIHdpbmRvdy5CbG9iKSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgIG5ldyBFcnJvcihcclxuICAgICAgICAgIGBBUkQtRlQke3RoaXMuY29tcG9uZW50SWR9MDogQ2Fubm90IHVzZSBBcmRpdW0gVUkgZmlsZSBmZWF0dXJlcyBiZWNhdXNlIHRoaXMgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IGZpbGUgaGFuZGxpbmchYFxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcbiAgcHJvdGVjdGVkIF93YXNWaWV3SW5pdCA9IGZhbHNlO1xyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3dhc1ZpZXdJbml0ID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLl91cGRhdGVFbGVtZW50VmFsdWUoKTtcclxuICB9XHJcblxyXG4gIC8vISBhcHBlYXJhbmNlXHJcbiAgcmVhZG9ubHkgY29tcGFjdCA9IGlucHV0PGJvb2xlYW4sIGFueT4oZmFsc2UsIHsgdHJhbnNmb3JtOiB2ID0+IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2KSB9KTtcclxuXHJcbiAgLy8hIHNldHRpbmdzXHJcbiAgcmVhZG9ubHkgbXVsdGlwbGUgPSBpbnB1dDxib29sZWFuLCBhbnk+KGZhbHNlLCB7IHRyYW5zZm9ybTogdiA9PiBjb2VyY2VCb29sZWFuUHJvcGVydHkodikgfSk7XHJcbiAgcmVhZG9ubHkgbWF4RmlsZXMgPSBpbnB1dDxOdWxsYWJsZTxudW1iZXI+LCBhbnk+KG51bGwsIHsgdHJhbnNmb3JtOiB2ID0+IGNvZXJjZU51bWJlclByb3BlcnR5KHYsIG51bGwpIH0pO1xyXG5cclxuICByZWFkb25seSBtYXhGaWxlc1dpdGhNdWx0aXBsZSA9IGNvbXB1dGVkPG51bWJlcj4oKCkgPT4gKHRoaXMubXVsdGlwbGUoKSA/IHRoaXMubWF4RmlsZXMoKSA/PyBJbmZpbml0eSA6IDEpKTtcclxuXHJcbiAgcmVhZG9ubHkgYmxvY2tBZnRlclVwbG9hZCA9IGlucHV0PGJvb2xlYW4sIGFueT4oZmFsc2UsIHsgdHJhbnNmb3JtOiB2ID0+IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2KSB9KTtcclxuXHJcbiAgZ2V0IHNob3VsZEJlQmxvY2tlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmJsb2NrQWZ0ZXJVcGxvYWQoKSAmJiBpc0RlZmluZWQodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICByZWFkb25seSBtYXhGaWxlU2l6ZUJ5dGVzID0gaW5wdXQ8TnVsbGFibGU8bnVtYmVyPiwgYW55PihudWxsLCB7IHRyYW5zZm9ybTogdiA9PiBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2LCBudWxsKSB9KTtcclxuXHJcbiAgcmVhZG9ubHkgYWNjZXB0ID0gaW5wdXQ8c3RyaW5nIHwgc3RyaW5nW10+KCcqJyk7XHJcbiAgcmVhZG9ubHkgZGlyZWN0b3J5SWQgPSBpbnB1dDxOdWxsYWJsZTxzdHJpbmc+Pih1bmRlZmluZWQpO1xyXG4gIHJlYWRvbmx5IHN0YXJ0RGlyZWN0b3J5ID0gaW5wdXQ8TnVsbGFibGU8RmlsZVN5c3RlbVN0YXJ0RGlyZWN0b3J5Pj4odW5kZWZpbmVkKTtcclxuICByZWFkb25seSBmaWxlVHlwZXMgPSBpbnB1dDxOdWxsYWJsZTxGaWxlSW5wdXRGaWxlVHlwZXM+Pih1bmRlZmluZWQpO1xyXG5cclxuICByZWFkb25seSBhY2NlcHRTdHJpbmcgPSBjb21wdXRlZDxzdHJpbmc+KCgpID0+IHtcclxuICAgIGNvbnN0IHR5cGVzID0gdGhpcy5maWxlVHlwZXMoKTtcclxuICAgIGlmICh0eXBlcykge1xyXG4gICAgICBjb25zdCBhY2NlcHRFbnRyaWVzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcclxuICAgICAgICBpZiAodHlwZS5hY2NlcHQpIHtcclxuICAgICAgICAgIGZvciAoY29uc3QgbWltZVR5cGUgaW4gdHlwZS5hY2NlcHQpIHtcclxuICAgICAgICAgICAgY29uc3QgZXh0ZW5zaW9ucyA9IHR5cGUuYWNjZXB0W21pbWVUeXBlXTtcclxuICAgICAgICAgICAgaWYgKGV4dGVuc2lvbnMgJiYgZXh0ZW5zaW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgYWNjZXB0RW50cmllcy5wdXNoKC4uLmV4dGVuc2lvbnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhY2NlcHRFbnRyaWVzLmpvaW4oJywnKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBhY2NlcHQgPSB0aGlzLmFjY2VwdCgpO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYWNjZXB0KSkge1xyXG4gICAgICByZXR1cm4gYWNjZXB0LmpvaW4oJywnKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYWNjZXB0O1xyXG4gIH0pO1xyXG5cclxuICByZWFkb25seSBhY2NlcHRlZE1pbWVUeXBlcyA9IGNvbXB1dGVkPHsgbWltZVR5cGU6IHN0cmluZzsgZXh0ZW5zaW9uczogU2V0PHN0cmluZz4gfVtdIHwgbnVsbD4oKCkgPT4ge1xyXG4gICAgY29uc3QgdHlwZXMgPSB0aGlzLmZpbGVUeXBlcygpO1xyXG4gICAgaWYgKHR5cGVzKSB7XHJcbiAgICAgIGNvbnN0IG1pbWVUeXBlczogeyBtaW1lVHlwZTogc3RyaW5nOyBleHRlbnNpb25zOiBTZXQ8c3RyaW5nPiB9W10gPSBbXTtcclxuICAgICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XHJcbiAgICAgICAgaWYgKHR5cGUuYWNjZXB0KSB7XHJcbiAgICAgICAgICBmb3IgKGNvbnN0IG1pbWVUeXBlIGluIHR5cGUuYWNjZXB0KSB7XHJcbiAgICAgICAgICAgIG1pbWVUeXBlcy5wdXNoKHsgbWltZVR5cGUsIGV4dGVuc2lvbnM6IG5ldyBTZXQodHlwZS5hY2NlcHRbbWltZVR5cGVdKSB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG1pbWVUeXBlcztcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH0pO1xyXG5cclxuICAvLyEgdmFsdWVcclxuICBwcm90ZWN0ZWQgX3ZhbHVlOiBGaWxlW10gfCBudWxsID0gbnVsbDtcclxuICBASW5wdXQoKVxyXG4gIGdldCB2YWx1ZSgpOiBGaWxlW10gfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcclxuICB9XHJcbiAgc2V0IHZhbHVlKHY6IEZpbGUgfCBGaWxlW10gfCBudWxsKSB7XHJcbiAgICB0aGlzLndyaXRlVmFsdWUodik7XHJcbiAgfVxyXG5cclxuICByZWFkb25seSB2YWx1ZUNoYW5nZSA9IG91dHB1dDxGaWxlW10gfCBudWxsPigpO1xyXG4gIHJlYWRvbmx5IGNoYW5nZUV2ZW50ID0gb3V0cHV0PEZpbGVbXSB8IG51bGw+KHsgYWxpYXM6ICdjaGFuZ2UnIH0pO1xyXG4gIHJlYWRvbmx5IGRyYWdGaWxlc0V2ZW50ID0gb3V0cHV0PEZpbGVbXT4oeyBhbGlhczogJ2RyYWdGaWxlcycgfSk7XHJcbiAgcmVhZG9ubHkgZmFpbGVkVXBsb2FkRXZlbnQgPSBvdXRwdXQ8RmlsZUlucHV0RmFpbGVkVXBsb2FkW10+KHsgYWxpYXM6ICdmYWlsZWRVcGxvYWQnIH0pO1xyXG5cclxuICBwcm90ZWN0ZWQgX3ZhbHVlQmVmb3JlSW5pdDogRmlsZVtdIHwgbnVsbCA9IG51bGw7XHJcbiAgd3JpdGVWYWx1ZSh2OiBGaWxlIHwgRmlsZVtdIHwgbnVsbCk6IHZvaWQge1xyXG4gICAgdGhpcy5fd3JpdGVWYWx1ZSh2LCBmYWxzZSk7XHJcbiAgfVxyXG4gIHByb3RlY3RlZCBfd3JpdGVWYWx1ZSh2OiBGaWxlIHwgRmlsZVtdIHwgbnVsbCwgZW1pdEV2ZW50cyA9IHRydWUpOiB2b2lkIHtcclxuICAgIGlmICghKHYgaW5zdGFuY2VvZiBGaWxlKSAmJiAhQXJyYXkuaXNBcnJheSh2KSAmJiB2ICE9PSBudWxsKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgbmV3IEVycm9yKGBBUkQtRlQke3RoaXMuY29tcG9uZW50SWR9MTogPGFyZC1maWxlLWlucHV0PidzIHZhbHVlIG11c3QgYmUgYSBGaWxlLCBhbiBhcnJheSBvZiBGaWxlcywgb3IgbnVsbC5gKVxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodiBpbnN0YW5jZW9mIEZpbGUpIHtcclxuICAgICAgdiA9IFt2XTtcclxuICAgIH1cclxuICAgIGlmIChBcnJheS5pc0FycmF5KHYpICYmICF0aGlzLm11bHRpcGxlKCkgJiYgdi5sZW5ndGggPiAxKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgQVJELVdBJHt0aGlzLmNvbXBvbmVudElkfTI6IDxhcmQtZmlsZS1pbnB1dD4gcmVjZWl2ZWQgYW4gYXJyYXkgb2YgZmlsZXMgYnV0IHRoZSAnbXVsdGlwbGUnIGlucHV0IGlzIG5vdCBzZXQgdG8gdHJ1ZS4gT25seSB0aGUgZmlyc3QgZmlsZSB3aWxsIGJlIHVzZWQuYFxyXG4gICAgICApO1xyXG4gICAgICB2ID0gW3ZbMF1dO1xyXG4gICAgfVxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodikgJiYgdi5sZW5ndGggPT09IDApIHtcclxuICAgICAgdiA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHYgPT09IG51bGwpIHtcclxuICAgICAgdGhpcy5jdXJyZW50Vmlld1N0YXRlLnNldCgnaWRsZScpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jdXJyZW50Vmlld1N0YXRlLnNldCgndXBsb2FkZWQnKTtcclxuICAgIH1cclxuICAgIHRoaXMuX3ZhbHVlID0gdjtcclxuXHJcbiAgICBpZiAodGhpcy5fd2FzVmlld0luaXQpIHRoaXMuX3VwZGF0ZUVsZW1lbnRWYWx1ZSgpO1xyXG5cclxuICAgIGlmIChlbWl0RXZlbnRzKSB7XHJcbiAgICAgIHRoaXMuX2VtaXRDaGFuZ2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBfZW1pdENoYW5nZSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHYgPSB0aGlzLnZhbHVlO1xyXG4gICAgdGhpcy5fb25DaGFuZ2VSZWdpc3RlcmVkPy4odik7XHJcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodik7XHJcbiAgICB0aGlzLmNoYW5nZUV2ZW50LmVtaXQodik7XHJcbiAgfVxyXG5cclxuICBvcGVuQnJvd3NlRGlhbG9nKCk6IHZvaWQge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLl9maWxlU3lzdGVtU2VydmljZS5pc0ZpbGVTeXN0ZW1BUElTdXBwb3J0ZWQoJ3Nob3dPcGVuRmlsZVBpY2tlcicpICYmXHJcbiAgICAgICh0aGlzLmRpcmVjdG9yeUlkKCkgfHwgdGhpcy5zdGFydERpcmVjdG9yeSgpIHx8IHRoaXMuZmlsZVR5cGVzKCkpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5fZmlsZVN5c3RlbVNlcnZpY2VcclxuICAgICAgICAucmVxdWVzdEZpbGVVcGxvYWQoe1xyXG4gICAgICAgICAgbWV0aG9kOiBGaWxlU3lzdGVtTWV0aG9kLlByZWZlckZpbGVTeXN0ZW0sXHJcbiAgICAgICAgICBtdWx0aXBsZTogdGhpcy5tdWx0aXBsZSgpLFxyXG4gICAgICAgICAgZGlyZWN0b3J5SWQ6IHRoaXMuZGlyZWN0b3J5SWQoKSA/PyB1bmRlZmluZWQsXHJcbiAgICAgICAgICBzdGFydERpcmVjdG9yeTogdGhpcy5zdGFydERpcmVjdG9yeSgpID8/IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHR5cGVzOiB0aGlzLmZpbGVUeXBlcygpID8/IHVuZGVmaW5lZCxcclxuICAgICAgICAgIGFjY2VwdDogdGhpcy5hY2NlcHQoKSA9PT0gJyonID8gdW5kZWZpbmVkIDogdGhpcy5hY2NlcHQoKSxcclxuICAgICAgICB9KVxyXG4gICAgICAgIC50aGVuKGZpbGVPckZpbGVzID0+IHtcclxuICAgICAgICAgIGlmICghZmlsZU9yRmlsZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5fd3JpdGVWYWx1ZShudWxsKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Vmlld1N0YXRlLnNldCgnaWRsZScpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zdCBmaWxlcyA9IEFycmF5LmlzQXJyYXkoZmlsZU9yRmlsZXMpID8gZmlsZU9yRmlsZXMgOiBbZmlsZU9yRmlsZXNdO1xyXG4gICAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl93cml0ZVZhbHVlKG51bGwpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRWaWV3U3RhdGUuc2V0KCdpZGxlJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuX3dyaXRlVmFsdWUoZmlsZXMpO1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50Vmlld1N0YXRlLnNldCgndXBsb2FkZWQnKTtcclxuICAgICAgICAgIC8vIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmZpbGVJbnB1dEVsKCk/Lm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcclxuICB9XHJcblxyXG4gIC8vISB0ZW1wb3JhcnkgdmFsdWVcclxuICAvL2ZvciBkcmFnIGV2ZW50IGhhbmRsaW5nXHJcbiAgcHJvdGVjdGVkIF9kcmFnZ2VkRmlsZXM6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICAvLyEgdmlldyBzdGF0ZVxyXG4gIHJlYWRvbmx5IGN1cnJlbnRWaWV3U3RhdGUgPSBzaWduYWw8J2lkbGUnIHwgJ2RyYWdvdmVyJyB8ICd1cGxvYWRlZCc+KCdpZGxlJyk7XHJcbiAgcHJpdmF0ZSBfYmVmb3JlRHJhZ292ZXJTdGF0ZTogJ2lkbGUnIHwgJ3VwbG9hZGVkJyA9ICdpZGxlJztcclxuXHJcbiAgLy8hIGV2ZW50IGhhbmRsZXJzXHJcbiAgb25EcmFnb3ZlcihldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgaWYgKHRoaXMuc2hvdWxkQmVCbG9ja2VkKSB7XHJcbiAgICAgIGlmICghZXZlbnQuZGF0YVRyYW5zZmVyKSByZXR1cm47XHJcblxyXG4gICAgICBldmVudC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdub25lJztcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY3VycmVudFZpZXdTdGF0ZSgpID09PSAnZHJhZ292ZXInKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5fZHJhZ2dlZEZpbGVzID0gdGhpcy5fY291bnREcmFnZW50ZXJGaWxlcyhldmVudC5kYXRhVHJhbnNmZXIpO1xyXG5cclxuICAgIGlmICghdGhpcy5fZHJhZ2dlZEZpbGVzKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5fYmVmb3JlRHJhZ292ZXJTdGF0ZSA9IHRoaXMuY3VycmVudFZpZXdTdGF0ZSgpIGFzICdpZGxlJyB8ICd1cGxvYWRlZCc7XHJcbiAgICB0aGlzLmN1cnJlbnRWaWV3U3RhdGUuc2V0KCdkcmFnb3ZlcicpO1xyXG4gIH1cclxuICBvbkRyYWdsZWF2ZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNob3VsZEJlQmxvY2tlZCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuY3VycmVudFZpZXdTdGF0ZSgpICE9PSAnZHJhZ292ZXInKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5jdXJyZW50Vmlld1N0YXRlLnNldCh0aGlzLl9iZWZvcmVEcmFnb3ZlclN0YXRlKTtcclxuICB9XHJcbiAgb25Ecm9wKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgaWYgKHRoaXMuc2hvdWxkQmVCbG9ja2VkKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgZmlsZWxpc3QgPSBldmVudC5kYXRhVHJhbnNmZXI/LmZpbGVzO1xyXG4gICAgaWYgKCFmaWxlbGlzdCkge1xyXG4gICAgICB0aGlzLmN1cnJlbnRWaWV3U3RhdGUuc2V0KCdpZGxlJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGZpbGVzID0gQXJyYXkuZnJvbShmaWxlbGlzdCk7XHJcbiAgICBpZiAoIWZpbGVzKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFZpZXdTdGF0ZS5zZXQoJ2lkbGUnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZmlsdGVyZWRGaWxlczogRmlsZVtdID0gW107XHJcbiAgICBjb25zdCBmYWlsZWRGaWxlczogRmlsZUlucHV0RmFpbGVkVXBsb2FkW10gPSBbXTtcclxuICAgIGNvbnN0IGFjY2VwdGVkTWltZVR5cGVzID0gdGhpcy5hY2NlcHRlZE1pbWVUeXBlcygpO1xyXG4gICAgaWYgKGFjY2VwdGVkTWltZVR5cGVzKSB7XHJcbiAgICAgIGxldCBtaW1lVHlwZU1hdGNoZWQgPSBmYWxzZTtcclxuICAgICAgZmlsZUxvb3A6IGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG4gICAgICAgIGNvbnN0IHsgc2hvdWxkQWNjZXB0LCByZWFzb24gfSA9IHRoaXMuX2ZpbHRlckZpbGVzQmFzZWRPblNpemVBbmRDb3VudChmaWxlLCBmaWx0ZXJlZEZpbGVzLmxlbmd0aCk7XHJcbiAgICAgICAgaWYgKCFzaG91bGRBY2NlcHQpIHtcclxuICAgICAgICAgIGZhaWxlZEZpbGVzLnB1c2goeyBmaWxlLCByZWFzb246IHJlYXNvbiEgfSk7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG1pbWVUeXBlTWF0Y2hlZCA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAoY29uc3QgbWltZVR5cGVPYmogb2YgYWNjZXB0ZWRNaW1lVHlwZXMpIHtcclxuICAgICAgICAgIGlmIChpc01pbWVUeXBlTWF0Y2hpbmcoZmlsZSwgbWltZVR5cGVPYmoubWltZVR5cGUpKSB7XHJcbiAgICAgICAgICAgIG1pbWVUeXBlTWF0Y2hlZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBleHRlbnNpb24gPSAnLicgKyBmaWxlLm5hbWUuc3BsaXQoJy4nKS5wb3AoKT8udG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgaWYgKG1pbWVUeXBlT2JqLmV4dGVuc2lvbnMuc2l6ZSA9PT0gMCB8fCBtaW1lVHlwZU9iai5leHRlbnNpb25zLmhhcygnKicpIHx8IG1pbWVUeXBlT2JqLmV4dGVuc2lvbnMuaGFzKGV4dGVuc2lvbikpIHtcclxuICAgICAgICAgICAgICBmaWx0ZXJlZEZpbGVzLnB1c2goZmlsZSk7XHJcbiAgICAgICAgICAgICAgY29udGludWUgZmlsZUxvb3A7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFtaW1lVHlwZU1hdGNoZWQpIHtcclxuICAgICAgICAgIGZhaWxlZEZpbGVzLnB1c2goeyBmaWxlLCByZWFzb246IEZpbGVJbnB1dEZhaWxlZFVwbG9hZFJlYXNvbi5JbnZhbGlkTWltZVR5cGUgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGZhaWxlZEZpbGVzLnB1c2goeyBmaWxlLCByZWFzb246IEZpbGVJbnB1dEZhaWxlZFVwbG9hZFJlYXNvbi5NaW1lVHlwZUZvdW5kQnV0RXh0ZW5zaW9uTm90QWxsb3dlZCB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGFjY2VwdCA9IHRoaXMuYWNjZXB0KCk7XHJcbiAgICAgIGxldCBhY2NlcHRFbnRyaWVzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShhY2NlcHQpKSB7XHJcbiAgICAgICAgYWNjZXB0RW50cmllcyA9IGFjY2VwdC5tYXAoZSA9PiBlLnRyaW0oKS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBhY2NlcHRFbnRyaWVzID0gYWNjZXB0LnNwbGl0KCcsJykubWFwKGUgPT4gZS50cmltKCkudG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHR5cGVvZiBhY2NlcHQgPT09ICdzdHJpbmcnICYmIGFjY2VwdCA9PT0gJyonKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcbiAgICAgICAgICBjb25zdCB7IHNob3VsZEFjY2VwdCwgcmVhc29uIH0gPSB0aGlzLl9maWx0ZXJGaWxlc0Jhc2VkT25TaXplQW5kQ291bnQoZmlsZSwgZmlsdGVyZWRGaWxlcy5sZW5ndGgpO1xyXG4gICAgICAgICAgaWYgKCFzaG91bGRBY2NlcHQpIHtcclxuICAgICAgICAgICAgZmFpbGVkRmlsZXMucHVzaCh7IGZpbGUsIHJlYXNvbjogcmVhc29uISB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZmlsZUxvb3A6IGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG4gICAgICAgICAgY29uc3QgeyBzaG91bGRBY2NlcHQsIHJlYXNvbiB9ID0gdGhpcy5fZmlsdGVyRmlsZXNCYXNlZE9uU2l6ZUFuZENvdW50KGZpbGUsIGZpbHRlcmVkRmlsZXMubGVuZ3RoKTtcclxuICAgICAgICAgIGlmICghc2hvdWxkQWNjZXB0KSB7XHJcbiAgICAgICAgICAgIGZhaWxlZEZpbGVzLnB1c2goeyBmaWxlLCByZWFzb246IHJlYXNvbiEgfSk7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbnN0IGV4dGVuc2lvbiA9ICcuJyArIGZpbGUubmFtZS5zcGxpdCgnLicpLmF0KC0xKT8udG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgYWNjZXB0RW50cmllcykge1xyXG4gICAgICAgICAgICBpZiAoZXh0ZW5zaW9uID09PSBlbnRyeSkge1xyXG4gICAgICAgICAgICAgIGZpbHRlcmVkRmlsZXMucHVzaChmaWxlKTtcclxuICAgICAgICAgICAgICBjb250aW51ZSBmaWxlTG9vcDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZmFpbGVkRmlsZXMucHVzaCh7IGZpbGUsIHJlYXNvbjogRmlsZUlucHV0RmFpbGVkVXBsb2FkUmVhc29uLkludmFsaWRFeHRlbnNpb24gfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kcmFnRmlsZXNFdmVudC5lbWl0KGZpbHRlcmVkRmlsZXMpO1xyXG4gICAgdGhpcy5mYWlsZWRVcGxvYWRFdmVudC5lbWl0KGZhaWxlZEZpbGVzKTtcclxuXHJcbiAgICB0aGlzLmN1cnJlbnRWaWV3U3RhdGUuc2V0KCd1cGxvYWRlZCcpO1xyXG4gICAgdGhpcy5fd3JpdGVWYWx1ZShmaWx0ZXJlZEZpbGVzLmxlbmd0aCA+IDAgPyBmaWx0ZXJlZEZpbGVzIDogbnVsbCk7XHJcbiAgfVxyXG4gIG9uSW5wdXRDaGFuZ2UoKTogdm9pZCB7XHJcbiAgICBjb25zdCBmaWxlcyA9IEFycmF5LmZyb20odGhpcy5maWxlSW5wdXRFbCgpPy5uYXRpdmVFbGVtZW50LmZpbGVzID8/IFtdKTtcclxuICAgIGlmIChmaWxlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhpcy5fd3JpdGVWYWx1ZShudWxsKTtcclxuICAgICAgdGhpcy5jdXJyZW50Vmlld1N0YXRlLnNldCgnaWRsZScpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl93cml0ZVZhbHVlKGZpbGVzKTtcclxuICAgIHRoaXMuY3VycmVudFZpZXdTdGF0ZS5zZXQoJ3VwbG9hZGVkJyk7XHJcbiAgfVxyXG5cclxuICAvLyEgaGVscGVyc1xyXG4gIHByaXZhdGUgX2ZpbHRlckZpbGVzQmFzZWRPblNpemVBbmRDb3VudChcclxuICAgIGZpbGU6IEZpbGUsXHJcbiAgICBleGlzdGluZ0ZpbGVDb3VudDogbnVtYmVyXHJcbiAgKTogeyBzaG91bGRBY2NlcHQ6IGJvb2xlYW47IHJlYXNvbj86IEZpbGVJbnB1dEZhaWxlZFVwbG9hZFJlYXNvbiB9IHtcclxuICAgIC8vIGNoZWNrIGNvdW50XHJcbiAgICBpZiAoZXhpc3RpbmdGaWxlQ291bnQgPj0gdGhpcy5tYXhGaWxlc1dpdGhNdWx0aXBsZSgpKSB7XHJcbiAgICAgIHJldHVybiB7IHNob3VsZEFjY2VwdDogZmFsc2UsIHJlYXNvbjogRmlsZUlucHV0RmFpbGVkVXBsb2FkUmVhc29uLlRvb01hbnlGaWxlcyB9O1xyXG4gICAgfVxyXG4gICAgLy8gY2hlY2sgc2l6ZVxyXG4gICAgaWYgKGZpbGUuc2l6ZSA+IDAgJiYgdGhpcy5tYXhGaWxlU2l6ZUJ5dGVzKCkgIT09IG51bGwgJiYgZmlsZS5zaXplID4gdGhpcy5tYXhGaWxlU2l6ZUJ5dGVzKCkhKSB7XHJcbiAgICAgIHJldHVybiB7IHNob3VsZEFjY2VwdDogZmFsc2UsIHJlYXNvbjogRmlsZUlucHV0RmFpbGVkVXBsb2FkUmVhc29uLkZpbGVUb29CaWcgfTtcclxuICAgIH1cclxuICAgIC8vIGFsbCBnb29kXHJcbiAgICByZXR1cm4geyBzaG91bGRBY2NlcHQ6IHRydWUgfTtcclxuICB9XHJcbiAgcHJvdGVjdGVkIF9jb3VudERyYWdlbnRlckZpbGVzKGRhdGE6IERhdGFUcmFuc2ZlciB8IG51bGwpOiBudW1iZXIgfCBudWxsIHtcclxuICAgIGlmICghZGF0YSkgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgcmV0dXJuIEFycmF5LmZyb20oZGF0YS5pdGVtcykuZmlsdGVyKGl0ZW0gPT4gaXRlbS5raW5kID09PSAnZmlsZScpLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBfdXBkYXRlRWxlbWVudFZhbHVlKCk6IHZvaWQge1xyXG4gICAgY29uc3QgdiA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgY29uc3QgaW5wdXRFbCA9IHRoaXMuZmlsZUlucHV0RWwoKT8ubmF0aXZlRWxlbWVudDtcclxuICAgIGlmICghaW5wdXRFbCkgcmV0dXJuO1xyXG4gICAgaWYgKCF2KSB7XHJcbiAgICAgIGlucHV0RWwuZmlsZXMgPSBudWxsO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZGF0YVRyYW5zZmVyID0gbmV3IERhdGFUcmFuc2ZlcigpO1xyXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIHYpIHtcclxuICAgICAgZGF0YVRyYW5zZmVyLml0ZW1zLmFkZChmaWxlKTtcclxuICAgIH1cclxuICAgIGlucHV0RWwuZmlsZXMgPSBkYXRhVHJhbnNmZXIuZmlsZXM7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc01pbWVUeXBlTWF0Y2hpbmcoZmlsZTogRmlsZSwgbWltZVR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gIGlmIChtaW1lVHlwZSA9PT0gJyonKSByZXR1cm4gdHJ1ZTtcclxuICBpZiAobWltZVR5cGUuZW5kc1dpdGgoJy8qJykpIHtcclxuICAgIGNvbnN0IHByZWZpeCA9IG1pbWVUeXBlLnNsaWNlKDAsIC0yKTtcclxuICAgIHJldHVybiBmaWxlLnR5cGUuc3RhcnRzV2l0aChwcmVmaXgpO1xyXG4gIH1cclxuICByZXR1cm4gZmlsZS50eXBlID09PSBtaW1lVHlwZTtcclxufVxyXG4iXX0=
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export const FileInputFailedUploadReason = {
|
|
2
|
-
InvalidMimeType: 'InvalidMimeType',
|
|
3
|
-
MimeTypeFoundButExtensionNotAllowed: 'MimeTypeFoundButExtensionNotAllowed',
|
|
4
|
-
InvalidExtension: 'InvalidExtension',
|
|
5
|
-
FileTooBig: 'FileTooBig',
|
|
6
|
-
TooManyFiles: 'TooManyFiles',
|
|
7
|
-
};
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1pbnB1dC10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvZmlsZS1pbnB1dHMvZmlsZS1pbnB1dC10eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrQ0EsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUc7SUFDekMsZUFBZSxFQUFFLGlCQUFpQjtJQUNsQyxtQ0FBbUMsRUFBRSxxQ0FBcUM7SUFDMUUsZ0JBQWdCLEVBQUUsa0JBQWtCO0lBQ3BDLFVBQVUsRUFBRSxZQUFZO0lBQ3hCLFlBQVksRUFBRSxjQUFjO0NBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIEZpbGVJbnB1dEJyb3dzZUNvbnRleHQge1xyXG4gIGJyb3dzZTogKCkgPT4gdm9pZDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGaWxlSW5wdXRGaWxlQW1vdW50Q29udGV4dCBleHRlbmRzIEZpbGVJbnB1dEJyb3dzZUNvbnRleHQge1xyXG4gIGFtb3VudDogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVJbnB1dEZpbGVzQ29udGV4dCBleHRlbmRzIEZpbGVJbnB1dEZpbGVBbW91bnRDb250ZXh0IHtcclxuICAkaW1wbGljaXQ6IEZpbGVbXTtcclxuICBmaWxlczogRmlsZVtdO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBGaWxlSW5wdXRGaWxlVHlwZSA9IHtcclxuICAvKipcclxuICAgKiBBbiBvcHRpb25hbCBkZXNjaXB0aW9uIG9mIHRoZSBjYXRlZ29yeSBvZiBmaWxlIHR5cGVzIGFsbG93ZWQuIERlZmF1bHQgdG8gYmUgYW4gZW1wdHkgc3RyaW5nLlxyXG4gICAqL1xyXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xyXG4gIC8qKlxyXG4gICAqIEFuIG9iamVjdCB3aXRoIHRoZSBrZXlzIHNldCB0byB0aGUgTUlNRSB0eXBlIGFuZCB0aGUgdmFsdWVzIGFuIGFycmF5IG9mIGZpbGUgZXh0ZW5zaW9ucyAoc2VlIGJlbG93IGZvciBhbiBleGFtcGxlKS5cclxuICAgKiBgYGB0c1xyXG4gICAqIHJlYWRvbmx5IEZJTEVfVFlQRVMgPSBbXHJcbiAgICogICB7XHJcbiAgICogICAgIGRlc2NyaXB0aW9uOiBcIlRleHQgZmlsZVwiLFxyXG4gICAqICAgICBhY2NlcHQ6IHsgXCJ0ZXh0L3BsYWluXCI6IFtcIi50eHRcIl0gfSxcclxuICAgKiAgIH0sXHJcbiAgICogXTtcclxuICAgKiBgYGBcclxuICAgKi9cclxuICBhY2NlcHQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPjtcclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIEZpbGVJbnB1dEZpbGVUeXBlcyA9IEZpbGVJbnB1dEZpbGVUeXBlW107XHJcblxyXG5leHBvcnQgY29uc3QgRmlsZUlucHV0RmFpbGVkVXBsb2FkUmVhc29uID0ge1xyXG4gIEludmFsaWRNaW1lVHlwZTogJ0ludmFsaWRNaW1lVHlwZScsXHJcbiAgTWltZVR5cGVGb3VuZEJ1dEV4dGVuc2lvbk5vdEFsbG93ZWQ6ICdNaW1lVHlwZUZvdW5kQnV0RXh0ZW5zaW9uTm90QWxsb3dlZCcsXHJcbiAgSW52YWxpZEV4dGVuc2lvbjogJ0ludmFsaWRFeHRlbnNpb24nLFxyXG4gIEZpbGVUb29CaWc6ICdGaWxlVG9vQmlnJyxcclxuICBUb29NYW55RmlsZXM6ICdUb29NYW55RmlsZXMnLFxyXG59IGFzIGNvbnN0O1xyXG5leHBvcnQgdHlwZSBGaWxlSW5wdXRGYWlsZWRVcGxvYWRSZWFzb24gPSB0eXBlb2YgRmlsZUlucHV0RmFpbGVkVXBsb2FkUmVhc29uW2tleW9mIHR5cGVvZiBGaWxlSW5wdXRGYWlsZWRVcGxvYWRSZWFzb25dO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGaWxlSW5wdXRGYWlsZWRVcGxvYWQge1xyXG4gIGZpbGU6IEZpbGU7XHJcbiAgcmVhc29uOiBGaWxlSW5wdXRGYWlsZWRVcGxvYWRSZWFzb247XHJcbn0iXX0=
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { Component } from '@angular/core';
|
|
2
|
-
import { ArdiumErrorDirective } from './error.directive';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "./error.directive";
|
|
5
|
-
export class ArdiumErrorComponent {
|
|
6
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumErrorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
7
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ArdiumErrorComponent, selector: "ard-error", hostDirectives: [{ directive: i1.ArdiumErrorDirective }], ngImport: i0, template: '<ng-content />', isInline: true }); }
|
|
8
|
-
}
|
|
9
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumErrorComponent, decorators: [{
|
|
10
|
-
type: Component,
|
|
11
|
-
args: [{
|
|
12
|
-
selector: 'ard-error',
|
|
13
|
-
template: '<ng-content />',
|
|
14
|
-
hostDirectives: [{ directive: ArdiumErrorDirective }],
|
|
15
|
-
}]
|
|
16
|
-
}] });
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9mb3JtLWZpZWxkL2Vycm9yL2Vycm9yLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7QUFPekQsTUFBTSxPQUFPLG9CQUFvQjsrR0FBcEIsb0JBQW9CO21HQUFwQixvQkFBb0IsMkdBSHJCLGdCQUFnQjs7NEZBR2Ysb0JBQW9CO2tCQUxoQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxXQUFXO29CQUNyQixRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixjQUFjLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxvQkFBb0IsRUFBRSxDQUFDO2lCQUN0RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBcmRpdW1FcnJvckRpcmVjdGl2ZSB9IGZyb20gJy4vZXJyb3IuZGlyZWN0aXZlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXJkLWVycm9yJyxcclxuICB0ZW1wbGF0ZTogJzxuZy1jb250ZW50IC8+JyxcclxuICBob3N0RGlyZWN0aXZlczogW3sgZGlyZWN0aXZlOiBBcmRpdW1FcnJvckRpcmVjdGl2ZSB9XSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFyZGl1bUVycm9yQ29tcG9uZW50IHt9XHJcbiJdfQ==
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { Directive } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export class ArdiumErrorDirective {
|
|
4
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumErrorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
5
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: ArdiumErrorDirective, isStandalone: true, selector: "[ard-error]", host: { properties: { "class.ard-error": "true" } }, ngImport: i0 }); }
|
|
6
|
-
}
|
|
7
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumErrorDirective, decorators: [{
|
|
8
|
-
type: Directive,
|
|
9
|
-
args: [{
|
|
10
|
-
selector: '[ard-error]',
|
|
11
|
-
standalone: true,
|
|
12
|
-
host: {
|
|
13
|
-
'[class.ard-error]': 'true',
|
|
14
|
-
},
|
|
15
|
-
}]
|
|
16
|
-
}] });
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9mb3JtLWZpZWxkL2Vycm9yL2Vycm9yLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQVMxQyxNQUFNLE9BQU8sb0JBQW9COytHQUFwQixvQkFBb0I7bUdBQXBCLG9CQUFvQjs7NEZBQXBCLG9CQUFvQjtrQkFQaEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsYUFBYTtvQkFDdkIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLElBQUksRUFBRTt3QkFDSixtQkFBbUIsRUFBRSxNQUFNO3FCQUM1QjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbYXJkLWVycm9yXScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBob3N0OiB7XHJcbiAgICAnW2NsYXNzLmFyZC1lcnJvcl0nOiAndHJ1ZScsXHJcbiAgfSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFyZGl1bUVycm9yRGlyZWN0aXZlIHt9XHJcbiJdfQ==
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { computed, contentChild, contentChildren, Directive, inject, input } from '@angular/core';
|
|
2
|
-
import { coerceBooleanProperty } from '@ardium-ui/devkit';
|
|
3
|
-
import { isFunction } from 'simple-bool';
|
|
4
|
-
import { SimpleOneAxisAlignment } from '../types/alignment.types';
|
|
5
|
-
import { ArdiumErrorDirective } from './error/error.directive';
|
|
6
|
-
import { ARD_FORM_FIELD_CONTROL } from './form-field-child.token';
|
|
7
|
-
import { ARD_FORM_FIELD_DEFAULTS } from './form-field.defaults';
|
|
8
|
-
import { ArdiumHintDirective } from './hint/hint.directive';
|
|
9
|
-
import { ArdiumLabelComponent } from './label/label.component';
|
|
10
|
-
import * as i0 from "@angular/core";
|
|
11
|
-
export class _FormFieldBase {
|
|
12
|
-
constructor() {
|
|
13
|
-
this._DEFAULTS = inject(ARD_FORM_FIELD_DEFAULTS);
|
|
14
|
-
this.alignHintToLeftByDefault = this._DEFAULTS.defaultHintAlign === SimpleOneAxisAlignment.Left;
|
|
15
|
-
this.control = contentChild(ARD_FORM_FIELD_CONTROL);
|
|
16
|
-
// get controlRequired() {
|
|
17
|
-
// const fnOrValue = this.control()?.required;
|
|
18
|
-
// return isFunction(fnOrValue) ? fnOrValue() : fnOrValue;
|
|
19
|
-
// }
|
|
20
|
-
this.label = contentChild(ArdiumLabelComponent);
|
|
21
|
-
this.hints = contentChildren(ArdiumHintDirective);
|
|
22
|
-
this.errors = contentChildren(ArdiumErrorDirective);
|
|
23
|
-
this.hasAnyError = computed(() => this.errors()?.length > 0);
|
|
24
|
-
this.reserveHintLine = input(this._DEFAULTS.reserveHintLine, { transform: v => coerceBooleanProperty(v) });
|
|
25
|
-
}
|
|
26
|
-
get controlHasError() {
|
|
27
|
-
const fnOrValue = this.control()?.hasError;
|
|
28
|
-
return isFunction(fnOrValue) ? fnOrValue() : fnOrValue;
|
|
29
|
-
}
|
|
30
|
-
get controlIsSuccess() {
|
|
31
|
-
const fnOrValue = this.control()?.isSuccess;
|
|
32
|
-
return isFunction(fnOrValue) ? fnOrValue() : fnOrValue;
|
|
33
|
-
}
|
|
34
|
-
get controlDisabled() {
|
|
35
|
-
const fnOrValue = this.control()?.disabled;
|
|
36
|
-
return isFunction(fnOrValue) ? fnOrValue() : fnOrValue;
|
|
37
|
-
}
|
|
38
|
-
get controlHtmlId() {
|
|
39
|
-
const fnOrValue = this.control()?.htmlId;
|
|
40
|
-
return isFunction(fnOrValue) ? fnOrValue() : fnOrValue;
|
|
41
|
-
}
|
|
42
|
-
ngOnInit() {
|
|
43
|
-
if (!this.control()) {
|
|
44
|
-
throw new Error(`ARD-FT5110: Form field component requires any control (input) to be present within the element. Found none.`);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: _FormFieldBase, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
48
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "18.2.13", type: _FormFieldBase, inputs: { reserveHintLine: { classPropertyName: "reserveHintLine", publicName: "reserveHintLine", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "control", first: true, predicate: ARD_FORM_FIELD_CONTROL, descendants: true, isSignal: true }, { propertyName: "label", first: true, predicate: ArdiumLabelComponent, descendants: true, isSignal: true }, { propertyName: "hints", predicate: ArdiumHintDirective, isSignal: true }, { propertyName: "errors", predicate: ArdiumErrorDirective, isSignal: true }], ngImport: i0 }); }
|
|
49
|
-
}
|
|
50
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: _FormFieldBase, decorators: [{
|
|
51
|
-
type: Directive
|
|
52
|
-
}] });
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC1iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9mb3JtLWZpZWxkL2Zvcm0tZmllbGQtYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEcsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDMUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsc0JBQXNCLEVBQXVCLE1BQU0sMEJBQTBCLENBQUM7QUFDdkYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDaEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBRy9ELE1BQU0sT0FBZ0IsY0FBYztJQURwQztRQUVxQixjQUFTLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFFL0MsNkJBQXdCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsS0FBSyxzQkFBc0IsQ0FBQyxJQUFJLENBQUM7UUFFbEcsWUFBTyxHQUFHLFlBQVksQ0FBc0Isc0JBQXNCLENBQUMsQ0FBQztRQWtCN0UsMEJBQTBCO1FBQzFCLGdEQUFnRDtRQUNoRCw0REFBNEQ7UUFDNUQsSUFBSTtRQUVLLFVBQUssR0FBRyxZQUFZLENBQXVCLG9CQUFvQixDQUFDLENBQUM7UUFFakUsVUFBSyxHQUFHLGVBQWUsQ0FBc0IsbUJBQW1CLENBQUMsQ0FBQztRQUNsRSxXQUFNLEdBQUcsZUFBZSxDQUF1QixvQkFBb0IsQ0FBQyxDQUFDO1FBQ3JFLGdCQUFXLEdBQUcsUUFBUSxDQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDakUsb0JBQWUsR0FBRyxLQUFLLENBQWUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7S0FTOUg7SUFuQ0MsSUFBSSxlQUFlO1FBQ2pCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxRQUFRLENBQUM7UUFDM0MsT0FBTyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDekQsQ0FBQztJQUNELElBQUksZ0JBQWdCO1FBQ2xCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxTQUFTLENBQUM7UUFDNUMsT0FBTyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDekQsQ0FBQztJQUNELElBQUksZUFBZTtRQUNqQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsUUFBUSxDQUFDO1FBQzNDLE9BQU8sVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3pELENBQUM7SUFDRCxJQUFJLGFBQWE7UUFDZixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxDQUFDO1FBQ3pDLE9BQU8sVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3pELENBQUM7SUFhRCxRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQ2IsNkdBQTZHLENBQzlHLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQzsrR0F6Q21CLGNBQWM7bUdBQWQsY0FBYyxpT0FLbUIsc0JBQXNCLHdGQXVCdkIsb0JBQW9CLDJFQUVsQixtQkFBbUIseURBQ2pCLG9CQUFvQjs7NEZBL0J4RCxjQUFjO2tCQURuQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQsIGNvbnRlbnRDaGlsZCwgY29udGVudENoaWxkcmVuLCBEaXJlY3RpdmUsIGluamVjdCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFyZGl1bS11aS9kZXZraXQnO1xyXG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnc2ltcGxlLWJvb2wnO1xyXG5pbXBvcnQgeyBTaW1wbGVPbmVBeGlzQWxpZ25tZW50IH0gZnJvbSAnLi4vdHlwZXMvYWxpZ25tZW50LnR5cGVzJztcclxuaW1wb3J0IHsgQXJkaXVtRXJyb3JEaXJlY3RpdmUgfSBmcm9tICcuL2Vycm9yL2Vycm9yLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEFSRF9GT1JNX0ZJRUxEX0NPTlRST0wsIEFyZEZvcm1GaWVsZENvbnRyb2wgfSBmcm9tICcuL2Zvcm0tZmllbGQtY2hpbGQudG9rZW4nO1xyXG5pbXBvcnQgeyBBUkRfRk9STV9GSUVMRF9ERUZBVUxUUyB9IGZyb20gJy4vZm9ybS1maWVsZC5kZWZhdWx0cyc7XHJcbmltcG9ydCB7IEFyZGl1bUhpbnREaXJlY3RpdmUgfSBmcm9tICcuL2hpbnQvaGludC5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBBcmRpdW1MYWJlbENvbXBvbmVudCB9IGZyb20gJy4vbGFiZWwvbGFiZWwuY29tcG9uZW50JztcclxuXHJcbkBEaXJlY3RpdmUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgX0Zvcm1GaWVsZEJhc2Uge1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBfREVGQVVMVFMgPSBpbmplY3QoQVJEX0ZPUk1fRklFTERfREVGQVVMVFMpO1xyXG5cclxuICBwdWJsaWMgcmVhZG9ubHkgYWxpZ25IaW50VG9MZWZ0QnlEZWZhdWx0ID0gdGhpcy5fREVGQVVMVFMuZGVmYXVsdEhpbnRBbGlnbiA9PT0gU2ltcGxlT25lQXhpc0FsaWdubWVudC5MZWZ0O1xyXG5cclxuICByZWFkb25seSBjb250cm9sID0gY29udGVudENoaWxkPEFyZEZvcm1GaWVsZENvbnRyb2w+KEFSRF9GT1JNX0ZJRUxEX0NPTlRST0wpO1xyXG5cclxuICBnZXQgY29udHJvbEhhc0Vycm9yKCkge1xyXG4gICAgY29uc3QgZm5PclZhbHVlID0gdGhpcy5jb250cm9sKCk/Lmhhc0Vycm9yO1xyXG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oZm5PclZhbHVlKSA/IGZuT3JWYWx1ZSgpIDogZm5PclZhbHVlO1xyXG4gIH1cclxuICBnZXQgY29udHJvbElzU3VjY2VzcygpIHtcclxuICAgIGNvbnN0IGZuT3JWYWx1ZSA9IHRoaXMuY29udHJvbCgpPy5pc1N1Y2Nlc3M7XHJcbiAgICByZXR1cm4gaXNGdW5jdGlvbihmbk9yVmFsdWUpID8gZm5PclZhbHVlKCkgOiBmbk9yVmFsdWU7XHJcbiAgfVxyXG4gIGdldCBjb250cm9sRGlzYWJsZWQoKSB7XHJcbiAgICBjb25zdCBmbk9yVmFsdWUgPSB0aGlzLmNvbnRyb2woKT8uZGlzYWJsZWQ7XHJcbiAgICByZXR1cm4gaXNGdW5jdGlvbihmbk9yVmFsdWUpID8gZm5PclZhbHVlKCkgOiBmbk9yVmFsdWU7XHJcbiAgfVxyXG4gIGdldCBjb250cm9sSHRtbElkKCkge1xyXG4gICAgY29uc3QgZm5PclZhbHVlID0gdGhpcy5jb250cm9sKCk/Lmh0bWxJZDtcclxuICAgIHJldHVybiBpc0Z1bmN0aW9uKGZuT3JWYWx1ZSkgPyBmbk9yVmFsdWUoKSA6IGZuT3JWYWx1ZTtcclxuICB9XHJcbiAgLy8gZ2V0IGNvbnRyb2xSZXF1aXJlZCgpIHtcclxuICAvLyAgIGNvbnN0IGZuT3JWYWx1ZSA9IHRoaXMuY29udHJvbCgpPy5yZXF1aXJlZDtcclxuICAvLyAgIHJldHVybiBpc0Z1bmN0aW9uKGZuT3JWYWx1ZSkgPyBmbk9yVmFsdWUoKSA6IGZuT3JWYWx1ZTtcclxuICAvLyB9XHJcblxyXG4gIHJlYWRvbmx5IGxhYmVsID0gY29udGVudENoaWxkPEFyZGl1bUxhYmVsQ29tcG9uZW50PihBcmRpdW1MYWJlbENvbXBvbmVudCk7XHJcblxyXG4gIHJlYWRvbmx5IGhpbnRzID0gY29udGVudENoaWxkcmVuPEFyZGl1bUhpbnREaXJlY3RpdmU+KEFyZGl1bUhpbnREaXJlY3RpdmUpO1xyXG4gIHJlYWRvbmx5IGVycm9ycyA9IGNvbnRlbnRDaGlsZHJlbjxBcmRpdW1FcnJvckRpcmVjdGl2ZT4oQXJkaXVtRXJyb3JEaXJlY3RpdmUpO1xyXG4gIHJlYWRvbmx5IGhhc0FueUVycm9yID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4gdGhpcy5lcnJvcnMoKT8ubGVuZ3RoID4gMCk7XHJcbiAgcmVhZG9ubHkgcmVzZXJ2ZUhpbnRMaW5lID0gaW5wdXQ8Ym9vbGVhbiwgYW55Pih0aGlzLl9ERUZBVUxUUy5yZXNlcnZlSGludExpbmUsIHsgdHJhbnNmb3JtOiB2ID0+IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2KSB9KTtcclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuY29udHJvbCgpKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQVJELUZUNTExMDogRm9ybSBmaWVsZCBjb21wb25lbnQgcmVxdWlyZXMgYW55IGNvbnRyb2wgKGlucHV0KSB0byBiZSBwcmVzZW50IHdpdGhpbiB0aGUgZWxlbWVudC4gRm91bmQgbm9uZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import { InjectionToken } from '@angular/core';
|
|
2
|
-
export const ARD_FORM_FIELD_CONTROL = new InjectionToken('ard-form-field-control');
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC1jaGlsZC50b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvZm9ybS1maWVsZC9mb3JtLWZpZWxkLWNoaWxkLnRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFZL0MsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxjQUFjLENBQXNCLHdCQUF3QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBcmRGb3JtRmllbGRDb250cm9sIHtcclxuICBoYXNFcnJvcjogKCgpID0+IGJvb2xlYW4pIHwgYm9vbGVhbjtcclxuICBpc1N1Y2Nlc3M/OiAoKCkgPT4gYm9vbGVhbikgfCBib29sZWFuO1xyXG4gIGRpc2FibGVkOiAoKCkgPT4gYm9vbGVhbikgfCBib29sZWFuO1xyXG4gIGh0bWxJZDogKCgpID0+IHN0cmluZykgfCBzdHJpbmc7XHJcbiAgLy8gcmVtb3ZlZCBmb3Igbm93XHJcbiAgLy8gd2lsbCBicmluZyBiYWNrIHdoZW4gSSBmaWd1cmUgb3V0IGhvdyAoYW5kIGlmKSB0byBwYXNzIGl0IG9udG8gdGhlIGxhYmVsXHJcbiAgLy8gcmVxdWlyZWQ/OiAoKCkgPT4gYm9vbGVhbikgfCBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgQVJEX0ZPUk1fRklFTERfQ09OVFJPTCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxBcmRGb3JtRmllbGRDb250cm9sPignYXJkLWZvcm0tZmllbGQtY29udHJvbCcpO1xyXG4iXX0=
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import { computed, Directive, inject, Injector, input, runInInjectionContext, signal } from '@angular/core';
|
|
2
|
-
import { toObservable } from '@angular/core/rxjs-interop';
|
|
3
|
-
import { NgControl, Validators } from '@angular/forms';
|
|
4
|
-
import { coerceBooleanProperty } from '@ardium-ui/devkit';
|
|
5
|
-
import { map } from 'rxjs';
|
|
6
|
-
import { TakeChance as Random } from 'take-chance';
|
|
7
|
-
import { ARD_FORM_FIELD_CONTROL } from './form-field-child.token';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
export class ArdiumFormFieldNativeInputAdapterDirective {
|
|
10
|
-
constructor() {
|
|
11
|
-
this._required = input(undefined, {
|
|
12
|
-
transform: v => coerceBooleanProperty(v),
|
|
13
|
-
alias: 'required',
|
|
14
|
-
});
|
|
15
|
-
this.isSuccess = input(false, { transform: v => coerceBooleanProperty(v) });
|
|
16
|
-
this.disabled = input(false, { transform: v => coerceBooleanProperty(v) });
|
|
17
|
-
//! form field related
|
|
18
|
-
this._injector = inject(Injector);
|
|
19
|
-
this.wasTouched = signal(false);
|
|
20
|
-
this._ngControl = null;
|
|
21
|
-
this.htmlId = input(Random.id());
|
|
22
|
-
this._hasError = input(undefined, {
|
|
23
|
-
transform: v => coerceBooleanProperty(v),
|
|
24
|
-
alias: 'hasError',
|
|
25
|
-
});
|
|
26
|
-
this._hasErrorInControl = signal(false);
|
|
27
|
-
this.hasError = computed(() => this._hasError() ?? (this.wasTouched() && this._hasErrorInControl()));
|
|
28
|
-
}
|
|
29
|
-
get required() {
|
|
30
|
-
return this._required() ?? !!this._ngControl?.control?.hasValidator(Validators.required);
|
|
31
|
-
}
|
|
32
|
-
ngOnInit() {
|
|
33
|
-
this._ngControl = this._injector.get(NgControl, null);
|
|
34
|
-
if (this._ngControl) {
|
|
35
|
-
// if (!this._ngControl.valueAccessor || (this && this instanceof (this._ngControl.valueAccessor as any).constructor)) {
|
|
36
|
-
// this._ngControl.valueAccessor = this;
|
|
37
|
-
// }
|
|
38
|
-
this._hasErrorInControl.set(this._ngControl.status === 'INVALID');
|
|
39
|
-
this._statusChangesSub = this._ngControl.statusChanges
|
|
40
|
-
?.pipe(map(v => v === 'INVALID'))
|
|
41
|
-
.subscribe(v => this._hasErrorInControl.set(v));
|
|
42
|
-
if (!this._ngControl.control)
|
|
43
|
-
return;
|
|
44
|
-
runInInjectionContext(this._injector, () => {
|
|
45
|
-
// do not read the next line of code if you are easily frightened
|
|
46
|
-
// I'm not proud of this part, but it had to be done. God please forgive me
|
|
47
|
-
// I didn't find any other feasible way to detect when the control changes its touched state
|
|
48
|
-
// so it had to be hacked like this
|
|
49
|
-
toObservable(this._ngControl?.control?.touchedReactive)?.subscribe(v => this.wasTouched.set(v));
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
ngOnDestroy() {
|
|
54
|
-
this._statusChangesSub?.unsubscribe();
|
|
55
|
-
}
|
|
56
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumFormFieldNativeInputAdapterDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
57
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.13", type: ArdiumFormFieldNativeInputAdapterDirective, selector: "ard-form-field > input, ard-form-field > textarea, ard-form-field > select, ard-horizontal-form-field > input, ard-horizontal-form-field > textarea, ard-horizontal-form-field > select", inputs: { _required: { classPropertyName: "_required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, isSuccess: { classPropertyName: "isSuccess", publicName: "isSuccess", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, htmlId: { classPropertyName: "htmlId", publicName: "htmlId", isSignal: true, isRequired: false, transformFunction: null }, _hasError: { classPropertyName: "_hasError", publicName: "hasError", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.ard-has-error": "hasError()", "class.ard-is-success": "isSuccess()" } }, providers: [
|
|
58
|
-
{
|
|
59
|
-
provide: ARD_FORM_FIELD_CONTROL,
|
|
60
|
-
useExisting: ArdiumFormFieldNativeInputAdapterDirective,
|
|
61
|
-
},
|
|
62
|
-
], ngImport: i0 }); }
|
|
63
|
-
}
|
|
64
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumFormFieldNativeInputAdapterDirective, decorators: [{
|
|
65
|
-
type: Directive,
|
|
66
|
-
args: [{
|
|
67
|
-
selector: 'ard-form-field > input, ard-form-field > textarea, ard-form-field > select, ard-horizontal-form-field > input, ard-horizontal-form-field > textarea, ard-horizontal-form-field > select',
|
|
68
|
-
providers: [
|
|
69
|
-
{
|
|
70
|
-
provide: ARD_FORM_FIELD_CONTROL,
|
|
71
|
-
useExisting: ArdiumFormFieldNativeInputAdapterDirective,
|
|
72
|
-
},
|
|
73
|
-
],
|
|
74
|
-
host: {
|
|
75
|
-
'[class.ard-has-error]': 'hasError()',
|
|
76
|
-
'[class.ard-is-success]': 'isSuccess()',
|
|
77
|
-
},
|
|
78
|
-
}]
|
|
79
|
-
}] });
|
|
80
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC1uYXRpdmUtaW5wdXRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9mb3JtLWZpZWxkL2Zvcm0tZmllbGQtbmF0aXZlLWlucHV0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxxQkFBcUIsRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDMUQsT0FBTyxFQUFFLEdBQUcsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFFLFVBQVUsSUFBSSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkQsT0FBTyxFQUFFLHNCQUFzQixFQUF1QixNQUFNLDBCQUEwQixDQUFDOztBQWdCdkYsTUFBTSxPQUFPLDBDQUEwQztJQWR2RDtRQWVXLGNBQVMsR0FBRyxLQUFLLENBQTJCLFNBQVMsRUFBRTtZQUM5RCxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7WUFDeEMsS0FBSyxFQUFFLFVBQVU7U0FDbEIsQ0FBQyxDQUFDO1FBS00sY0FBUyxHQUFHLEtBQUssQ0FBZSxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDckYsYUFBUSxHQUFHLEtBQUssQ0FBZSxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxx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QUFZO3dCQUNyQyx3QkFBd0IsRUFBRSxhQUFhO3FCQUN4QztpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbXB1dGVkLCBEaXJlY3RpdmUsIGluamVjdCwgSW5qZWN0b3IsIGlucHV0LCBydW5JbkluamVjdGlvbkNvbnRleHQsIFNpZ25hbCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHRvT2JzZXJ2YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuaW1wb3J0IHsgTmdDb250cm9sLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYXJkaXVtLXVpL2RldmtpdCc7XHJcbmltcG9ydCB7IG1hcCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFRha2VDaGFuY2UgYXMgUmFuZG9tIH0gZnJvbSAndGFrZS1jaGFuY2UnO1xyXG5pbXBvcnQgeyBBUkRfRk9STV9GSUVMRF9DT05UUk9MLCBBcmRGb3JtRmllbGRDb250cm9sIH0gZnJvbSAnLi9mb3JtLWZpZWxkLWNoaWxkLnRva2VuJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOlxyXG4gICAgJ2FyZC1mb3JtLWZpZWxkID4gaW5wdXQsIGFyZC1mb3JtLWZpZWxkID4gdGV4dGFyZWEsIGFyZC1mb3JtLWZpZWxkID4gc2VsZWN0LCBhcmQtaG9yaXpvbnRhbC1mb3JtLWZpZWxkID4gaW5wdXQsIGFyZC1ob3Jpem9udGFsLWZvcm0tZmllbGQgPiB0ZXh0YXJlYSwgYXJkLWhvcml6b250YWwtZm9ybS1maWVsZCA+IHNlbGVjdCcsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IEFSRF9GT1JNX0ZJRUxEX0NPTlRST0wsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBBcmRpdW1Gb3JtRmllbGROYXRpdmVJbnB1dEFkYXB0ZXJEaXJlY3RpdmUsXHJcbiAgICB9LFxyXG4gIF0sXHJcbiAgaG9zdDoge1xyXG4gICAgJ1tjbGFzcy5hcmQtaGFzLWVycm9yXSc6ICdoYXNFcnJvcigpJyxcclxuICAgICdbY2xhc3MuYXJkLWlzLXN1Y2Nlc3NdJzogJ2lzU3VjY2VzcygpJyxcclxuICB9LFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXJkaXVtRm9ybUZpZWxkTmF0aXZlSW5wdXRBZGFwdGVyRGlyZWN0aXZlIGltcGxlbWVudHMgQXJkRm9ybUZpZWxkQ29udHJvbCB7XHJcbiAgcmVhZG9ubHkgX3JlcXVpcmVkID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZCwgYW55Pih1bmRlZmluZWQsIHtcclxuICAgIHRyYW5zZm9ybTogdiA9PiBjb2VyY2VCb29sZWFuUHJvcGVydHkodiksXHJcbiAgICBhbGlhczogJ3JlcXVpcmVkJyxcclxuICB9KTtcclxuICBnZXQgcmVxdWlyZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQoKSA/PyAhIXRoaXMuX25nQ29udHJvbD8uY29udHJvbD8uaGFzVmFsaWRhdG9yKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gIH1cclxuXHJcbiAgcmVhZG9ubHkgaXNTdWNjZXNzID0gaW5wdXQ8Ym9vbGVhbiwgYW55PihmYWxzZSwgeyB0cmFuc2Zvcm06IHYgPT4gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpIH0pO1xyXG4gIHJlYWRvbmx5IGRpc2FibGVkID0gaW5wdXQ8Ym9vbGVhbiwgYW55PihmYWxzZSwgeyB0cmFuc2Zvcm06IHYgPT4gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpIH0pO1xyXG5cclxuICAvLyEgZm9ybSBmaWVsZCByZWxhdGVkXHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9pbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XHJcblxyXG4gIHJlYWRvbmx5IHdhc1RvdWNoZWQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBwcml2YXRlIF9zdGF0dXNDaGFuZ2VzU3ViPzogU3Vic2NyaXB0aW9uO1xyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fbmdDb250cm9sID0gdGhpcy5faW5qZWN0b3IuZ2V0KE5nQ29udHJvbCwgbnVsbCk7XHJcblxyXG4gICAgaWYgKHRoaXMuX25nQ29udHJvbCkge1xyXG4gICAgICAvLyBpZiAoIXRoaXMuX25nQ29udHJvbC52YWx1ZUFjY2Vzc29yIHx8ICh0aGlzICYmIHRoaXMgaW5zdGFuY2VvZiAodGhpcy5fbmdDb250cm9sLnZhbHVlQWNjZXNzb3IgYXMgYW55KS5jb25zdHJ1Y3RvcikpIHtcclxuICAgICAgLy8gICB0aGlzLl9uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XHJcbiAgICAgIC8vIH1cclxuXHJcbiAgICAgIHRoaXMuX2hhc0Vycm9ySW5Db250cm9sLnNldCh0aGlzLl9uZ0NvbnRyb2wuc3RhdHVzID09PSAnSU5WQUxJRCcpO1xyXG5cclxuICAgICAgdGhpcy5fc3RhdHVzQ2hhbmdlc1N1YiA9IHRoaXMuX25nQ29udHJvbC5zdGF0dXNDaGFuZ2VzXHJcbiAgICAgICAgPy5waXBlKG1hcCh2ID0+IHYgPT09ICdJTlZBTElEJykpXHJcbiAgICAgICAgLnN1YnNjcmliZSh2ID0+IHRoaXMuX2hhc0Vycm9ySW5Db250cm9sLnNldCh2KSk7XHJcblxyXG4gICAgICBpZiAoIXRoaXMuX25nQ29udHJvbC5jb250cm9sKSByZXR1cm47XHJcblxyXG4gICAgICBydW5JbkluamVjdGlvbkNvbnRleHQodGhpcy5faW5qZWN0b3IsICgpID0+IHtcclxuICAgICAgICAvLyBkbyBub3QgcmVhZCB0aGUgbmV4dCBsaW5lIG9mIGNvZGUgaWYgeW91IGFyZSBlYXNpbHkgZnJpZ2h0ZW5lZFxyXG4gICAgICAgIC8vIEknbSBub3QgcHJvdWQgb2YgdGhpcyBwYXJ0LCBidXQgaXQgaGFkIHRvIGJlIGRvbmUuIEdvZCBwbGVhc2UgZm9yZ2l2ZSBtZVxyXG4gICAgICAgIC8vIEkgZGlkbid0IGZpbmQgYW55IG90aGVyIGZlYXNpYmxlIHdheSB0byBkZXRlY3Qgd2hlbiB0aGUgY29udHJvbCBjaGFuZ2VzIGl0cyB0b3VjaGVkIHN0YXRlXHJcbiAgICAgICAgLy8gc28gaXQgaGFkIHRvIGJlIGhhY2tlZCBsaWtlIHRoaXNcclxuICAgICAgICB0b09ic2VydmFibGUoKHRoaXMuX25nQ29udHJvbD8uY29udHJvbCBhcyBhbnkgfCB1bmRlZmluZWQpPy50b3VjaGVkUmVhY3RpdmUgYXMgU2lnbmFsPGJvb2xlYW4+KT8uc3Vic2NyaWJlKHYgPT5cclxuICAgICAgICAgIHRoaXMud2FzVG91Y2hlZC5zZXQodilcclxuICAgICAgICApO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgcHJvdGVjdGVkIF9uZ0NvbnRyb2w6IE5nQ29udHJvbCB8IG51bGwgPSBudWxsO1xyXG5cclxuICByZWFkb25seSBodG1sSWQgPSBpbnB1dDxzdHJpbmc+KFJhbmRvbS5pZCgpKTtcclxuXHJcbiAgcmVhZG9ubHkgX2hhc0Vycm9yID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZCwgYW55Pih1bmRlZmluZWQsIHtcclxuICAgIHRyYW5zZm9ybTogdiA9PiBjb2VyY2VCb29sZWFuUHJvcGVydHkodiksXHJcbiAgICBhbGlhczogJ2hhc0Vycm9yJyxcclxuICB9KTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9oYXNFcnJvckluQ29udHJvbCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcbiAgcmVhZG9ubHkgaGFzRXJyb3IgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB0aGlzLl9oYXNFcnJvcigpID8/ICh0aGlzLndhc1RvdWNoZWQoKSAmJiB0aGlzLl9oYXNFcnJvckluQ29udHJvbCgpKSk7XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3RhdHVzQ2hhbmdlc1N1Yj8udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcbn1cclxuIl19
|