@ardium-ui/ui 4.4.2 → 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 +2482 -2400
- 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 +1 -1
- 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 +1 -1
- 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/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/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/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 -101
- 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 -356
- 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 -250
- 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,453 +0,0 @@
|
|
|
1
|
-
import { computed, signal } from '@angular/core';
|
|
2
|
-
import { resolvePath } from 'resolve-object-path';
|
|
3
|
-
import { any, evaluate, isArray, isDefined, isObject, isPrimitive, isPromise } from 'simple-bool';
|
|
4
|
-
export class ItemStorage {
|
|
5
|
-
constructor(_ardParentComp) {
|
|
6
|
-
this._ardParentComp = _ardParentComp;
|
|
7
|
-
this._groups = signal(this._createEmptyGroupMap());
|
|
8
|
-
this._items = signal([]);
|
|
9
|
-
this._filteredItems = signal([]);
|
|
10
|
-
this._highlightedItems = signal([]);
|
|
11
|
-
this._highlightedGroups = signal([]);
|
|
12
|
-
this._recentlyHighlightedItem = signal(undefined);
|
|
13
|
-
this._selectedItems = signal([]);
|
|
14
|
-
this.groups = computed(() => Array.from(this._groups().entries())
|
|
15
|
-
.map(([, group]) => group)
|
|
16
|
-
.filter(group => group.children().length));
|
|
17
|
-
this.items = this._items.asReadonly();
|
|
18
|
-
this.filteredItems = this._filteredItems.asReadonly();
|
|
19
|
-
this.highlightedItems = this._highlightedItems.asReadonly();
|
|
20
|
-
this.selectedItems = computed(() => {
|
|
21
|
-
if (this._ardParentComp.sortMultipleValues()) {
|
|
22
|
-
return this._selectedItems().sort((a, b) => {
|
|
23
|
-
return a.index - b.index;
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
return this._selectedItems();
|
|
27
|
-
});
|
|
28
|
-
this.lastSelectedItem = computed(() => this._filteredItems().last(1, item => !item.disabled()));
|
|
29
|
-
this.value = computed(() => this._itemsToValue(this.selectedItems()));
|
|
30
|
-
this.isNoItemsToSelect = computed(() => this._items().length === this._selectedItems().length);
|
|
31
|
-
this.isNoItemsFound = computed(() => this._filteredItems().length === 0);
|
|
32
|
-
this.isAnyItemSelected = computed(() => this._selectedItems().length > 0);
|
|
33
|
-
this.isAnyItemHighlighted = computed(() => this._highlightedItems().length > 0);
|
|
34
|
-
this.isItemLimitReached = computed(() => this._ardParentComp.multiselectable() &&
|
|
35
|
-
isDefined(this._ardParentComp.maxSelectedItems()) &&
|
|
36
|
-
this._ardParentComp.maxSelectedItems() <= this.selectedItems().length);
|
|
37
|
-
this._valueToWriteAfterItemsLoad = signal(undefined);
|
|
38
|
-
this._wasValueWriteDeferred = signal(false);
|
|
39
|
-
}
|
|
40
|
-
_itemsToValue(items) {
|
|
41
|
-
return items.map(item => item.value());
|
|
42
|
-
}
|
|
43
|
-
setItems(items) {
|
|
44
|
-
let areItemsPrimitive = false;
|
|
45
|
-
if (this._ardParentComp.groupLabelFrom() && this._ardParentComp.itemsAlreadyGrouped()) {
|
|
46
|
-
const newItems = [];
|
|
47
|
-
for (const group of items) {
|
|
48
|
-
let children;
|
|
49
|
-
[children, areItemsPrimitive] = this._ungroupAlreadyGroupedItems(group);
|
|
50
|
-
newItems.push(...children);
|
|
51
|
-
}
|
|
52
|
-
items = newItems;
|
|
53
|
-
}
|
|
54
|
-
if (any(items, isPrimitive)) {
|
|
55
|
-
items = items.map(this._primitiveItemsMapFn);
|
|
56
|
-
areItemsPrimitive = true;
|
|
57
|
-
}
|
|
58
|
-
this._items.set(items.map((item, index) => {
|
|
59
|
-
return this._setItemsMapFn(item, index, areItemsPrimitive);
|
|
60
|
-
}));
|
|
61
|
-
//add all items to filter array
|
|
62
|
-
this._filteredItems.set(this._items());
|
|
63
|
-
//add items to groups
|
|
64
|
-
this._populateGroups();
|
|
65
|
-
//write value if it was
|
|
66
|
-
const toWrite = this._valueToWriteAfterItemsLoad();
|
|
67
|
-
if (toWrite !== undefined) {
|
|
68
|
-
this.handleWriteValue(toWrite);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
_addSingleItem(item) {
|
|
72
|
-
const isItemPrimitive = isPrimitive(item);
|
|
73
|
-
//map a primitive item to a usable object
|
|
74
|
-
if (isItemPrimitive) {
|
|
75
|
-
item = this._primitiveItemsMapFn(item);
|
|
76
|
-
}
|
|
77
|
-
//map the item to create data bindings
|
|
78
|
-
const ardOption = this._setItemsMapFn(item, (this._items().last()?.index ?? 0) + 1, isItemPrimitive);
|
|
79
|
-
//push the item into all items
|
|
80
|
-
this._items.update(v => [...v, ardOption]);
|
|
81
|
-
//add all items to filter array
|
|
82
|
-
this._filteredItems.set(this._items());
|
|
83
|
-
//add item to groups
|
|
84
|
-
this._populateGroups();
|
|
85
|
-
return ardOption;
|
|
86
|
-
}
|
|
87
|
-
_primitiveItemsMapFn(item) {
|
|
88
|
-
return { value: item };
|
|
89
|
-
}
|
|
90
|
-
_ungroupAlreadyGroupedItems(group) {
|
|
91
|
-
//determine groupBy (groupLabel) path
|
|
92
|
-
const groupBy = this._ardParentComp.groupLabelFrom();
|
|
93
|
-
//get group label from object
|
|
94
|
-
let groupName;
|
|
95
|
-
if (typeof groupBy === 'string') {
|
|
96
|
-
groupName = resolvePath(group, groupBy);
|
|
97
|
-
}
|
|
98
|
-
else {
|
|
99
|
-
groupName = groupBy(group);
|
|
100
|
-
}
|
|
101
|
-
//determine group children path
|
|
102
|
-
const childrenPath = this._ardParentComp.childrenFrom();
|
|
103
|
-
//get group children
|
|
104
|
-
let groupItems = resolvePath(group, childrenPath);
|
|
105
|
-
//return empty array if groupItems is not an array or is empty
|
|
106
|
-
if (!isArray(groupItems) || groupItems.length === 0)
|
|
107
|
-
return [[], false];
|
|
108
|
-
//check if the array is an array of primitives, and map it if needed
|
|
109
|
-
const areItemsPrimitive = false;
|
|
110
|
-
if (any(groupItems, isPrimitive)) {
|
|
111
|
-
groupItems = groupItems.map(this._primitiveItemsMapFn);
|
|
112
|
-
}
|
|
113
|
-
//add group name to every child
|
|
114
|
-
groupItems = groupItems.map((item) => {
|
|
115
|
-
item.$ardgroup = groupName;
|
|
116
|
-
return item;
|
|
117
|
-
});
|
|
118
|
-
return [groupItems, areItemsPrimitive];
|
|
119
|
-
}
|
|
120
|
-
_setItemsMapFn(rawItemData, index, areItemsPrimitive) {
|
|
121
|
-
if (areItemsPrimitive) {
|
|
122
|
-
return {
|
|
123
|
-
itemData: signal(rawItemData),
|
|
124
|
-
index: index,
|
|
125
|
-
value: signal(rawItemData.value),
|
|
126
|
-
label: signal(rawItemData.value?.toString?.() ?? String(rawItemData.value)),
|
|
127
|
-
disabled: signal(false),
|
|
128
|
-
selected: signal(false),
|
|
129
|
-
highlighted: signal(false),
|
|
130
|
-
group: undefined,
|
|
131
|
-
highlighted_recently: signal(false),
|
|
132
|
-
};
|
|
133
|
-
}
|
|
134
|
-
//get value
|
|
135
|
-
const valuePath = this._ardParentComp.valueFrom() ?? this._ardParentComp.labelFrom();
|
|
136
|
-
const value = resolvePath(rawItemData, valuePath);
|
|
137
|
-
//get label
|
|
138
|
-
const labelPath = this._ardParentComp.labelFrom() ?? this._ardParentComp.valueFrom();
|
|
139
|
-
const label = resolvePath(rawItemData, labelPath) ?? value;
|
|
140
|
-
//get disabled
|
|
141
|
-
const disabledPath = this._ardParentComp.disabledFrom();
|
|
142
|
-
let disabled = evaluate(resolvePath(rawItemData, disabledPath));
|
|
143
|
-
if (this._ardParentComp.invertDisabled()) {
|
|
144
|
-
disabled = !disabled;
|
|
145
|
-
}
|
|
146
|
-
//get groups
|
|
147
|
-
let group = undefined;
|
|
148
|
-
const groupBy = this._ardParentComp.groupLabelFrom();
|
|
149
|
-
if (groupBy) {
|
|
150
|
-
if (rawItemData.$ardgroup) {
|
|
151
|
-
group = rawItemData.$ardgroup;
|
|
152
|
-
}
|
|
153
|
-
else {
|
|
154
|
-
if (typeof groupBy === 'string') {
|
|
155
|
-
group = resolvePath(rawItemData, groupBy);
|
|
156
|
-
}
|
|
157
|
-
else {
|
|
158
|
-
group = groupBy(rawItemData);
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
return {
|
|
163
|
-
itemData: signal(rawItemData),
|
|
164
|
-
index: index,
|
|
165
|
-
value: signal(value),
|
|
166
|
-
label: signal(label?.toString?.() ?? String(label)),
|
|
167
|
-
disabled: signal(disabled),
|
|
168
|
-
group: group,
|
|
169
|
-
selected: signal(false),
|
|
170
|
-
highlighted: signal(false),
|
|
171
|
-
highlighted_recently: signal(false),
|
|
172
|
-
};
|
|
173
|
-
}
|
|
174
|
-
_populateGroups() {
|
|
175
|
-
this._groups.set(this._createEmptyGroupMap());
|
|
176
|
-
for (const item of this._filteredItems()) {
|
|
177
|
-
if (this._ardParentComp.hideSelected() && item.selected())
|
|
178
|
-
continue;
|
|
179
|
-
this._addToGroup(item);
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
_addToGroup(item) {
|
|
183
|
-
const groupKey = item.group;
|
|
184
|
-
const targetGroup = this._groups().get(groupKey);
|
|
185
|
-
//create new group if no such group exists
|
|
186
|
-
if (!targetGroup) {
|
|
187
|
-
this._groups.update(v => {
|
|
188
|
-
const map = new Map(v);
|
|
189
|
-
map.set(groupKey, {
|
|
190
|
-
label: signal(String(groupKey ?? '')),
|
|
191
|
-
children: signal([item]),
|
|
192
|
-
disabled: signal(false),
|
|
193
|
-
selected: signal(false),
|
|
194
|
-
highlighted: signal(false),
|
|
195
|
-
});
|
|
196
|
-
return map;
|
|
197
|
-
});
|
|
198
|
-
return;
|
|
199
|
-
}
|
|
200
|
-
targetGroup.children.update(v => [...v, item]);
|
|
201
|
-
}
|
|
202
|
-
_createEmptyGroupMap() {
|
|
203
|
-
return new Map([
|
|
204
|
-
[
|
|
205
|
-
undefined,
|
|
206
|
-
{
|
|
207
|
-
label: signal(''),
|
|
208
|
-
children: signal([]),
|
|
209
|
-
disabled: signal(false),
|
|
210
|
-
selected: signal(false),
|
|
211
|
-
highlighted: signal(false),
|
|
212
|
-
},
|
|
213
|
-
],
|
|
214
|
-
]);
|
|
215
|
-
}
|
|
216
|
-
_isWriteValueValid(ngModel) {
|
|
217
|
-
return ngModel.every(item => {
|
|
218
|
-
if (!isDefined(this._ardParentComp.compareWith) && isObject(item) && this._ardParentComp.valueFrom()) {
|
|
219
|
-
console.warn(`ARD-WA${this._ardParentComp._componentId}0: [valueFrom] can only point to a property of a primitive type. Define [compareWith] if using objects as a value is needed.`);
|
|
220
|
-
return false;
|
|
221
|
-
}
|
|
222
|
-
return true;
|
|
223
|
-
});
|
|
224
|
-
}
|
|
225
|
-
handleWriteValue(ngModel) {
|
|
226
|
-
if (!isArray(ngModel)) {
|
|
227
|
-
ngModel = [ngModel];
|
|
228
|
-
}
|
|
229
|
-
//defer writing the value if no options are yet loaded
|
|
230
|
-
if (!this._wasValueWriteDeferred() && this._items().length === 0) {
|
|
231
|
-
this._valueToWriteAfterItemsLoad.set(ngModel);
|
|
232
|
-
return;
|
|
233
|
-
}
|
|
234
|
-
this.clearAllSelected();
|
|
235
|
-
if (!this._isWriteValueValid(ngModel)) {
|
|
236
|
-
return;
|
|
237
|
-
}
|
|
238
|
-
const selectItemByValue = (value) => {
|
|
239
|
-
if (value === null || value === undefined) {
|
|
240
|
-
this.unselectItem(...this._selectedItems());
|
|
241
|
-
return;
|
|
242
|
-
}
|
|
243
|
-
const item = this.findItemByValue(value);
|
|
244
|
-
if (item) {
|
|
245
|
-
this.selectItem(item);
|
|
246
|
-
return;
|
|
247
|
-
}
|
|
248
|
-
console.warn(`ARD-WA${this._ardParentComp._componentId}1: Couldn't find an item with value ${value?.toString?.() || String(value)} when trying to select it.`);
|
|
249
|
-
};
|
|
250
|
-
for (const modelValue of ngModel) {
|
|
251
|
-
selectItemByValue(modelValue);
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
findItemByValue(valueToFind) {
|
|
255
|
-
let findBy;
|
|
256
|
-
if (this._ardParentComp.compareWith()) {
|
|
257
|
-
findBy = item => this._ardParentComp.compareWith()(valueToFind, item.value());
|
|
258
|
-
}
|
|
259
|
-
else {
|
|
260
|
-
findBy = item => item.value() === valueToFind;
|
|
261
|
-
}
|
|
262
|
-
return this._items().find(item => findBy(item));
|
|
263
|
-
}
|
|
264
|
-
async addCustomOption(value, fn) {
|
|
265
|
-
const fnResult = fn(value);
|
|
266
|
-
let optionValue = fnResult;
|
|
267
|
-
if (isPromise(optionValue)) {
|
|
268
|
-
try {
|
|
269
|
-
optionValue = await optionValue;
|
|
270
|
-
}
|
|
271
|
-
catch (error) {
|
|
272
|
-
console.error(`ARD-NF${this._ardParentComp._componentId}2: Failed to add a custom option. The promise was rejected with the following error:`, error);
|
|
273
|
-
return null;
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
const newOptionObj = this._addSingleItem(optionValue);
|
|
277
|
-
return newOptionObj;
|
|
278
|
-
}
|
|
279
|
-
clearAllSelected(repopulateGroups = false) {
|
|
280
|
-
for (const item of this._selectedItems()) {
|
|
281
|
-
item.selected.set(false);
|
|
282
|
-
}
|
|
283
|
-
const removedItemValues = this._itemsToValue(this._selectedItems());
|
|
284
|
-
this._selectedItems.set([]);
|
|
285
|
-
if (repopulateGroups && this._ardParentComp.hideSelected())
|
|
286
|
-
this._populateGroups();
|
|
287
|
-
return removedItemValues;
|
|
288
|
-
}
|
|
289
|
-
clearLastSelected() {
|
|
290
|
-
const item = this._selectedItems().last();
|
|
291
|
-
if (!item)
|
|
292
|
-
return item;
|
|
293
|
-
this.unselectItem(item);
|
|
294
|
-
return item;
|
|
295
|
-
}
|
|
296
|
-
selectItem(...items) {
|
|
297
|
-
if (this.isItemLimitReached()) {
|
|
298
|
-
return [[], [], this._itemsToValue(items)];
|
|
299
|
-
}
|
|
300
|
-
let unselected = [];
|
|
301
|
-
if (!this._ardParentComp.multiselectable()) {
|
|
302
|
-
unselected = this.clearAllSelected(false);
|
|
303
|
-
}
|
|
304
|
-
let itemsSelectedCount = 0;
|
|
305
|
-
const itemsSelected = [];
|
|
306
|
-
for (const item of items) {
|
|
307
|
-
itemsSelectedCount++;
|
|
308
|
-
if (item.selected())
|
|
309
|
-
continue;
|
|
310
|
-
if (this.isItemLimitReached()) {
|
|
311
|
-
break;
|
|
312
|
-
}
|
|
313
|
-
item.selected.set(true);
|
|
314
|
-
this._selectedItems.update(v => [...v, item]);
|
|
315
|
-
itemsSelected.push(item);
|
|
316
|
-
}
|
|
317
|
-
if (this._ardParentComp.hideSelected()) {
|
|
318
|
-
this._populateGroups();
|
|
319
|
-
}
|
|
320
|
-
const itemsFailedToSelect = items.slice(itemsSelectedCount - 1);
|
|
321
|
-
return [this._itemsToValue(itemsSelected), unselected, this._itemsToValue(itemsFailedToSelect)];
|
|
322
|
-
}
|
|
323
|
-
unselectItem(...items) {
|
|
324
|
-
for (const item of items) {
|
|
325
|
-
if (!item.selected())
|
|
326
|
-
continue;
|
|
327
|
-
item.selected.set(false);
|
|
328
|
-
}
|
|
329
|
-
this._selectedItems.update(v => v.filter(v => v.selected()));
|
|
330
|
-
if (this._ardParentComp.hideSelected()) {
|
|
331
|
-
this._populateGroups();
|
|
332
|
-
}
|
|
333
|
-
return this._itemsToValue(items);
|
|
334
|
-
}
|
|
335
|
-
clearAllHighlights() {
|
|
336
|
-
for (const item of this._highlightedItems()) {
|
|
337
|
-
item.highlighted.set(false);
|
|
338
|
-
}
|
|
339
|
-
for (const group of this._highlightedGroups()) {
|
|
340
|
-
group.highlighted.set(false);
|
|
341
|
-
}
|
|
342
|
-
this._highlightedItems.set([]);
|
|
343
|
-
this._highlightedGroups.set([]);
|
|
344
|
-
}
|
|
345
|
-
highlightGroup(group) {
|
|
346
|
-
this.clearAllHighlights();
|
|
347
|
-
group.highlighted.set(true);
|
|
348
|
-
this.highlightItem(...group.children());
|
|
349
|
-
return group.children().first();
|
|
350
|
-
}
|
|
351
|
-
highlightSingleItem(item) {
|
|
352
|
-
if (!item || item.disabled())
|
|
353
|
-
return null;
|
|
354
|
-
this.clearAllHighlights();
|
|
355
|
-
return this.highlightItem(item);
|
|
356
|
-
}
|
|
357
|
-
highlightItem(...items) {
|
|
358
|
-
for (const item of items) {
|
|
359
|
-
item.highlighted.set(true);
|
|
360
|
-
}
|
|
361
|
-
this._highlightedItems.update(v => [...v, ...items]);
|
|
362
|
-
return items.last();
|
|
363
|
-
}
|
|
364
|
-
unhighlightItem(...items) {
|
|
365
|
-
for (const item of items) {
|
|
366
|
-
if (!item || !item.highlighted)
|
|
367
|
-
return;
|
|
368
|
-
item.highlighted.set(false);
|
|
369
|
-
}
|
|
370
|
-
this._highlightedItems.update(v => v.filter(v => v.highlighted()));
|
|
371
|
-
}
|
|
372
|
-
highlightFirstItem() {
|
|
373
|
-
this.clearAllHighlights();
|
|
374
|
-
const itemsToHighlight = this._getHiglightableItems();
|
|
375
|
-
return this.highlightSingleItem(itemsToHighlight.first());
|
|
376
|
-
}
|
|
377
|
-
highlightLastItem() {
|
|
378
|
-
this.clearAllHighlights();
|
|
379
|
-
const itemsToHighlight = this._getHiglightableItems();
|
|
380
|
-
return this.highlightSingleItem(itemsToHighlight.last());
|
|
381
|
-
}
|
|
382
|
-
_getHiglightableItems() {
|
|
383
|
-
let itemsToHighlight = this._filteredItems().filter(item => !item.disabled());
|
|
384
|
-
if (this._ardParentComp.hideSelected()) {
|
|
385
|
-
itemsToHighlight = itemsToHighlight.filter(item => !item.selected());
|
|
386
|
-
}
|
|
387
|
-
return itemsToHighlight;
|
|
388
|
-
}
|
|
389
|
-
highlightAllItems() {
|
|
390
|
-
this.highlightItem(...this._getHiglightableItems());
|
|
391
|
-
}
|
|
392
|
-
_clearRecentlyHighlighted() {
|
|
393
|
-
if (this._recentlyHighlightedItem()) {
|
|
394
|
-
this._recentlyHighlightedItem().highlighted_recently.set(false);
|
|
395
|
-
}
|
|
396
|
-
}
|
|
397
|
-
setRecentlyHighlighted(item) {
|
|
398
|
-
this._clearRecentlyHighlighted();
|
|
399
|
-
item.highlighted_recently.set(true);
|
|
400
|
-
this._recentlyHighlightedItem.set(item);
|
|
401
|
-
}
|
|
402
|
-
highlightNextItem(offset, hasShift) {
|
|
403
|
-
if (!this.isAnyItemHighlighted()) {
|
|
404
|
-
return this.highlightFirstItem();
|
|
405
|
-
}
|
|
406
|
-
const currentItem = this.highlightedItems().last();
|
|
407
|
-
const highlightableItems = this._getHiglightableItems();
|
|
408
|
-
const currentIndexInFiltered = highlightableItems.findIndex(item => item.index === currentItem.index);
|
|
409
|
-
let nextItemIndex = currentIndexInFiltered + offset;
|
|
410
|
-
if (nextItemIndex >= highlightableItems.length) {
|
|
411
|
-
nextItemIndex -= highlightableItems.length;
|
|
412
|
-
}
|
|
413
|
-
if (nextItemIndex < 0) {
|
|
414
|
-
nextItemIndex += highlightableItems.length;
|
|
415
|
-
}
|
|
416
|
-
const itemToHighlight = highlightableItems[nextItemIndex];
|
|
417
|
-
if (hasShift && this._ardParentComp.multiselectable()) {
|
|
418
|
-
if (itemToHighlight.highlighted()) {
|
|
419
|
-
this.unhighlightItem(currentItem);
|
|
420
|
-
}
|
|
421
|
-
return this.highlightItem(itemToHighlight);
|
|
422
|
-
}
|
|
423
|
-
return this.highlightSingleItem(itemToHighlight);
|
|
424
|
-
}
|
|
425
|
-
filter(filterTerm) {
|
|
426
|
-
if (!filterTerm) {
|
|
427
|
-
return this._itemsToValue(this.resetFiltered());
|
|
428
|
-
}
|
|
429
|
-
if (!this._ardParentComp.searchCaseSensitive()) {
|
|
430
|
-
filterTerm = filterTerm.toLocaleLowerCase();
|
|
431
|
-
}
|
|
432
|
-
const searchFn = this._ardParentComp.searchFn();
|
|
433
|
-
const newFilteredItems = this._items().filter(item => searchFn(filterTerm, item));
|
|
434
|
-
this._filteredItems.set(newFilteredItems);
|
|
435
|
-
this._populateGroups();
|
|
436
|
-
if (!this.isNoItemsFound)
|
|
437
|
-
this.highlightFirstItem();
|
|
438
|
-
else
|
|
439
|
-
this.clearAllHighlights();
|
|
440
|
-
return this._itemsToValue(newFilteredItems);
|
|
441
|
-
}
|
|
442
|
-
resetFiltered() {
|
|
443
|
-
if (this._filteredItems().length === this._items().length)
|
|
444
|
-
return this._items();
|
|
445
|
-
let newFilteredItems = this._items();
|
|
446
|
-
if (this._ardParentComp.hideSelected() && this.isAnyItemSelected()) {
|
|
447
|
-
newFilteredItems = newFilteredItems.filter(item => !item.selected());
|
|
448
|
-
}
|
|
449
|
-
this._populateGroups();
|
|
450
|
-
return newFilteredItems;
|
|
451
|
-
}
|
|
452
|
-
}
|
|
453
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24taXRlbS1zdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9faW50ZXJuYWwvaXRlbS1zdG9yYWdlcy9kcm9wZG93bi1pdGVtLXN0b3JhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFVLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUF5QmxHLE1BQU0sT0FBTyxXQUFXO0lBU3RCLFlBQTZCLGNBQStCO1FBQS9CLG1CQUFjLEdBQWQsY0FBYyxDQUFpQjtRQVIzQyxZQUFPLEdBQUcsTUFBTSxDQUFrQixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELFdBQU0sR0FBRyxNQUFNLENBQWMsRUFBRSxDQUFDLENBQUM7UUFDakMsbUJBQWMsR0FBRyxNQUFNLENBQWMsRUFBRSxDQUFDLENBQUM7UUFDekMsc0JBQWlCLEdBQUcsTUFBTSxDQUFjLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLHVCQUFrQixHQUFHLE1BQU0sQ0FBbUIsRUFBRSxDQUFDLENBQUM7UUFDbEQsNkJBQXdCLEdBQUcsTUFBTSxDQUFzQixTQUFTLENBQUMsQ0FBQztRQUNsRSxtQkFBYyxHQUFHLE1BQU0sQ0FBYyxFQUFFLENBQUMsQ0FBQztRQUlqRCxXQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUM5QixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FB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bEYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUUxQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjO1lBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7O1lBQy9DLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBRS9CLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFDRCxhQUFhO1FBQ1gsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFaEYsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDckMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUM7WUFDbkUsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN2RSxDQUFDO1FBQ0QsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sZ0JBQWdCLENBQUM7SUFDMUIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2lnbmFsLCBjb21wdXRlZCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHJlc29sdmVQYXRoIH0gZnJvbSAncmVzb2x2ZS1vYmplY3QtcGF0aCc7XHJcbmltcG9ydCB7IGFueSwgZXZhbHVhdGUsIGlzQXJyYXksIGlzRGVmaW5lZCwgaXNPYmplY3QsIGlzUHJpbWl0aXZlLCBpc1Byb21pc2UgfSBmcm9tICdzaW1wbGUtYm9vbCc7XHJcbmltcG9ydCB7IEFkZEN1c3RvbUZuIH0gZnJvbSAnLi4vLi4vc2VsZWN0L3NlbGVjdC50eXBlcyc7XHJcbmltcG9ydCB7IEFyZEl0ZW1Hcm91cE1hcCwgQXJkT3B0aW9uLCBBcmRPcHRpb25Hcm91cCwgQ29tcGFyZVdpdGhGbiwgR3JvdXBCeUZuLCBTZWFyY2hGbiB9IGZyb20gJy4uLy4uL3R5cGVzL2l0ZW0tc3RvcmFnZS50eXBlcyc7XHJcbmltcG9ydCB7IE51bGxhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMvdXRpbGl0eS50eXBlcyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEl0ZW1TdG9yYWdlSG9zdCB7XHJcbiAgcmVhZG9ubHkgdmFsdWVGcm9tOiBTaWduYWw8c3RyaW5nPjtcclxuICByZWFkb25seSBsYWJlbEZyb206IFNpZ25hbDxzdHJpbmc+O1xyXG4gIHJlYWRvbmx5IGRpc2FibGVkRnJvbTogU2lnbmFsPHN0cmluZz47XHJcbiAgcmVhZG9ubHkgaW52ZXJ0RGlzYWJsZWQ6IFNpZ25hbDxib29sZWFuPjtcclxuICByZWFkb25seSBncm91cExhYmVsRnJvbTogU2lnbmFsPHN0cmluZyB8IEdyb3VwQnlGbj47XHJcbiAgcmVhZG9ubHkgZ3JvdXBEaXNhYmxlZEZyb206IFNpZ25hbDxzdHJpbmc+O1xyXG4gIHJlYWRvbmx5IGNoaWxkcmVuRnJvbTogU2lnbmFsPHN0cmluZz47XHJcbiAgcmVhZG9ubHkgaXRlbXNBbHJlYWR5R3JvdXBlZDogU2lnbmFsPE51bGxhYmxlPGJvb2xlYW4+PjtcclxuICByZWFkb25seSBoaWRlU2VsZWN0ZWQ6IFNpZ25hbDxib29sZWFuPjtcclxuICByZWFkb25seSBzZWFyY2hDYXNlU2Vuc2l0aXZlOiBTaWduYWw8Ym9vbGVhbj47XHJcbiAgcmVhZG9ubHkgc2VhcmNoRm46IFNpZ25hbDxTZWFyY2hGbj47XHJcbiAgcmVhZG9ubHkgY29tcGFyZVdpdGg6IFNpZ25hbDxOdWxsYWJsZTxDb21wYXJlV2l0aEZuPj47XHJcbiAgcmVhZG9ubHkgbXVsdGlzZWxlY3RhYmxlOiBTaWduYWw8Ym9vbGVhbj47XHJcbiAgcmVhZG9ubHkgc29ydE11bHRpcGxlVmFsdWVzOiBTaWduYWw8Ym9vbGVhbj47XHJcbiAgcmVhZG9ubHkgbWF4U2VsZWN0ZWRJdGVtczogU2lnbmFsPE51bGxhYmxlPG51bWJlcj4+O1xyXG4gIHJlYWRvbmx5IGFkZEN1c3RvbTogU2lnbmFsPGJvb2xlYW4gfCBBZGRDdXN0b21Gbjxhbnk+IHwgQWRkQ3VzdG9tRm48UHJvbWlzZTxhbnk+Pj47XHJcbiAgcmVhZG9ubHkgX2NvbXBvbmVudElkOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtU3RvcmFnZSB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfZ3JvdXBzID0gc2lnbmFsPEFyZEl0ZW1Hcm91cE1hcD4odGhpcy5fY3JlYXRlRW1wdHlHcm91cE1hcCgpKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9pdGVtcyA9IHNpZ25hbDxBcmRPcHRpb25bXT4oW10pO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbHRlcmVkSXRlbXMgPSBzaWduYWw8QXJkT3B0aW9uW10+KFtdKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9oaWdobGlnaHRlZEl0ZW1zID0gc2lnbmFsPEFyZE9wdGlvbltdPihbXSk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfaGlnaGxpZ2h0ZWRHcm91cHMgPSBzaWduYWw8QXJkT3B0aW9uR3JvdXBbXT4oW10pO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlY2VudGx5SGlnaGxpZ2h0ZWRJdGVtID0gc2lnbmFsPE51bGxhYmxlPEFyZE9wdGlvbj4+KHVuZGVmaW5lZCk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfc2VsZWN0ZWRJdGVtcyA9IHNpZ25hbDxBcmRPcHRpb25bXT4oW10pO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF9hcmRQYXJlbnRDb21wOiBJdGVtU3RvcmFnZUhvc3QpIHt9XHJcblxyXG4gIHJlYWRvbmx5IGdyb3VwcyA9IGNvbXB1dGVkKCgpID0+XHJcbiAgICBBcnJheS5mcm9tKHRoaXMuX2dyb3VwcygpLmVudHJpZXMoKSlcclxuICAgICAgLm1hcCgoWywgZ3JvdXBdKSA9PiBncm91cClcclxuICAgICAgLmZpbHRlcihncm91cCA9PiBncm91cC5jaGlsZHJlbigpLmxlbmd0aClcclxuICApO1xyXG4gIHJlYWRvbmx5IGl0ZW1zID0gdGhpcy5faXRlbXMuYXNSZWFkb25seSgpO1xyXG4gIHJlYWRvbmx5IGZpbHRlcmVkSXRlbXMgPSB0aGlzLl9maWx0ZXJlZEl0ZW1zLmFzUmVhZG9ubHkoKTtcclxuICByZWFkb25seSBoaWdobGlnaHRlZEl0ZW1zID0gdGhpcy5faGlnaGxpZ2h0ZWRJdGVtcy5hc1JlYWRvbmx5KCk7XHJcblxyXG4gIHJlYWRvbmx5IHNlbGVjdGVkSXRlbXMgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBpZiAodGhpcy5fYXJkUGFyZW50Q29tcC5zb3J0TXVsdGlwbGVWYWx1ZXMoKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJdGVtcygpLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICByZXR1cm4gYS5pbmRleCAtIGIuaW5kZXg7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkSXRlbXMoKTtcclxuICB9KTtcclxuICByZWFkb25seSBsYXN0U2VsZWN0ZWRJdGVtID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5fZmlsdGVyZWRJdGVtcygpLmxhc3QoMSwgaXRlbSA9PiAhaXRlbS5kaXNhYmxlZCgpKSk7XHJcblxyXG4gIHJlYWRvbmx5IHZhbHVlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5faXRlbXNUb1ZhbHVlKHRoaXMuc2VsZWN0ZWRJdGVtcygpKSk7XHJcbiAgcHJpdmF0ZSBfaXRlbXNUb1ZhbHVlKGl0ZW1zOiBBcmRPcHRpb25bXSk6IGFueVtdIHtcclxuICAgIHJldHVybiBpdGVtcy5tYXAoaXRlbSA9PiBpdGVtLnZhbHVlKCkpO1xyXG4gIH1cclxuXHJcbiAgcmVhZG9ubHkgaXNOb0l0ZW1zVG9TZWxlY3QgPSBjb21wdXRlZCgoKSA9PiB0aGlzLl9pdGVtcygpLmxlbmd0aCA9PT0gdGhpcy5fc2VsZWN0ZWRJdGVtcygpLmxlbmd0aCk7XHJcbiAgcmVhZG9ubHkgaXNOb0l0ZW1zRm91bmQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLl9maWx0ZXJlZEl0ZW1zKCkubGVuZ3RoID09PSAwKTtcclxuICByZWFkb25seSBpc0FueUl0ZW1TZWxlY3RlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuX3NlbGVjdGVkSXRlbXMoKS5sZW5ndGggPiAwKTtcclxuICByZWFkb25seSBpc0FueUl0ZW1IaWdobGlnaHRlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuX2hpZ2hsaWdodGVkSXRlbXMoKS5sZW5ndGggPiAwKTtcclxuICByZWFkb25seSBpc0l0ZW1MaW1pdFJlYWNoZWQgPSBjb21wdXRlZChcclxuICAgICgpID0+XHJcbiAgICAgIHRoaXMuX2FyZFBhcmVudENvbXAubXVsdGlzZWxlY3RhYmxlKCkgJiZcclxuICAgICAgaXNEZWZpbmVkKHRoaXMuX2FyZFBhcmVudENvbXAubWF4U2VsZWN0ZWRJdGVtcygpKSAmJlxyXG4gICAgICB0aGlzLl9hcmRQYXJlbnRDb21wLm1heFNlbGVjdGVkSXRlbXMoKSEgPD0gdGhpcy5zZWxlY3RlZEl0ZW1zKCkubGVuZ3RoXHJcbiAgKTtcclxuXHJcbiAgc2V0SXRlbXMoaXRlbXM6IGFueVtdKTogdm9pZCB7XHJcbiAgICBsZXQgYXJlSXRlbXNQcmltaXRpdmUgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLl9hcmRQYXJlbnRDb21wLmdyb3VwTGFiZWxGcm9tKCkgJiYgdGhpcy5fYXJkUGFyZW50Q29tcC5pdGVtc0FscmVhZHlHcm91cGVkKCkpIHtcclxuICAgICAgY29uc3QgbmV3SXRlbXMgPSBbXTtcclxuICAgICAgZm9yIChjb25zdCBncm91cCBvZiBpdGVtcykge1xyXG4gICAgICAgIGxldCBjaGlsZHJlbjogYW55W107XHJcbiAgICAgICAgW2NoaWxkcmVuLCBhcmVJdGVtc1ByaW1pdGl2ZV0gPSB0aGlzLl91bmdyb3VwQWxyZWFkeUdyb3VwZWRJdGVtcyhncm91cCk7XHJcbiAgICAgICAgbmV3SXRlbXMucHVzaCguLi5jaGlsZHJlbik7XHJcbiAgICAgIH1cclxuICAgICAgaXRlbXMgPSBuZXdJdGVtcztcclxuICAgIH1cclxuICAgIGlmIChhbnkoaXRlbXMsIGlzUHJpbWl0aXZlKSkge1xyXG4gICAgICBpdGVtcyA9IGl0ZW1zLm1hcCh0aGlzLl9wcmltaXRpdmVJdGVtc01hcEZuKTtcclxuICAgICAgYXJlSXRlbXNQcmltaXRpdmUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2l0ZW1zLnNldChcclxuICAgICAgaXRlbXMubWFwKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZXRJdGVtc01hcEZuKGl0ZW0sIGluZGV4LCBhcmVJdGVtc1ByaW1pdGl2ZSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIC8vYWRkIGFsbCBpdGVtcyB0byBmaWx0ZXIgYXJyYXlcclxuICAgIHRoaXMuX2ZpbHRlcmVkSXRlbXMuc2V0KHRoaXMuX2l0ZW1zKCkpO1xyXG5cclxuICAgIC8vYWRkIGl0ZW1zIHRvIGdyb3Vwc1xyXG4gICAgdGhpcy5fcG9wdWxhdGVHcm91cHMoKTtcclxuXHJcbiAgICAvL3dyaXRlIHZhbHVlIGlmIGl0IHdhc1xyXG4gICAgY29uc3QgdG9Xcml0ZSA9IHRoaXMuX3ZhbHVlVG9Xcml0ZUFmdGVySXRlbXNMb2FkKCk7XHJcbiAgICBpZiAodG9Xcml0ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlV3JpdGVWYWx1ZSh0b1dyaXRlKTtcclxuICAgIH1cclxuICB9XHJcbiAgcHJpdmF0ZSBfYWRkU2luZ2xlSXRlbShpdGVtOiBhbnkpOiBBcmRPcHRpb24ge1xyXG4gICAgY29uc3QgaXNJdGVtUHJpbWl0aXZlID0gaXNQcmltaXRpdmUoaXRlbSk7XHJcbiAgICAvL21hcCBhIHByaW1pdGl2ZSBpdGVtIHRvIGEgdXNhYmxlIG9iamVjdFxyXG4gICAgaWYgKGlzSXRlbVByaW1pdGl2ZSkge1xyXG4gICAgICBpdGVtID0gdGhpcy5fcHJpbWl0aXZlSXRlbXNNYXBGbihpdGVtKTtcclxuICAgIH1cclxuICAgIC8vbWFwIHRoZSBpdGVtIHRvIGNyZWF0ZSBkYXRhIGJpbmRpbmdzXHJcbiAgICBjb25zdCBhcmRPcHRpb24gPSB0aGlzLl9zZXRJdGVtc01hcEZuKGl0ZW0sICh0aGlzLl9pdGVtcygpLmxhc3QoKT8uaW5kZXggPz8gMCkgKyAxLCBpc0l0ZW1QcmltaXRpdmUpO1xyXG5cclxuICAgIC8vcHVzaCB0aGUgaXRlbSBpbnRvIGFsbCBpdGVtc1xyXG4gICAgdGhpcy5faXRlbXMudXBkYXRlKHYgPT4gWy4uLnYsIGFyZE9wdGlvbl0pO1xyXG5cclxuICAgIC8vYWRkIGFsbCBpdGVtcyB0byBmaWx0ZXIgYXJyYXlcclxuICAgIHRoaXMuX2ZpbHRlcmVkSXRlbXMuc2V0KHRoaXMuX2l0ZW1zKCkpO1xyXG5cclxuICAgIC8vYWRkIGl0ZW0gdG8gZ3JvdXBzXHJcbiAgICB0aGlzLl9wb3B1bGF0ZUdyb3VwcygpO1xyXG5cclxuICAgIHJldHVybiBhcmRPcHRpb247XHJcbiAgfVxyXG4gIHByaXZhdGUgX3ByaW1pdGl2ZUl0ZW1zTWFwRm48VD4oaXRlbTogVCk6IHsgdmFsdWU6IFQgfSB7XHJcbiAgICByZXR1cm4geyB2YWx1ZTogaXRlbSB9O1xyXG4gIH1cclxuICBwcml2YXRlIF91bmdyb3VwQWxyZWFkeUdyb3VwZWRJdGVtczxUIGV4dGVuZHMgb2JqZWN0Pihncm91cDogVCk6IFthbnlbXSwgYm9vbGVhbl0ge1xyXG4gICAgLy9kZXRlcm1pbmUgZ3JvdXBCeSAoZ3JvdXBMYWJlbCkgcGF0aFxyXG4gICAgY29uc3QgZ3JvdXBCeSA9IHRoaXMuX2FyZFBhcmVudENvbXAuZ3JvdXBMYWJlbEZyb20oKTtcclxuXHJcbiAgICAvL2dldCBncm91cCBsYWJlbCBmcm9tIG9iamVjdFxyXG4gICAgbGV0IGdyb3VwTmFtZTogYW55O1xyXG4gICAgaWYgKHR5cGVvZiBncm91cEJ5ID09PSAnc3RyaW5nJykge1xyXG4gICAgICBncm91cE5hbWUgPSByZXNvbHZlUGF0aChncm91cCwgZ3JvdXBCeSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBncm91cE5hbWUgPSBncm91cEJ5KGdyb3VwKTtcclxuICAgIH1cclxuXHJcbiAgICAvL2RldGVybWluZSBncm91cCBjaGlsZHJlbiBwYXRoXHJcbiAgICBjb25zdCBjaGlsZHJlblBhdGggPSB0aGlzLl9hcmRQYXJlbnRDb21wLmNoaWxkcmVuRnJvbSgpO1xyXG5cclxuICAgIC8vZ2V0IGdyb3VwIGNoaWxkcmVuXHJcbiAgICBsZXQgZ3JvdXBJdGVtczogYW55ID0gcmVzb2x2ZVBhdGgoZ3JvdXAsIGNoaWxkcmVuUGF0aCk7XHJcblxyXG4gICAgLy9yZXR1cm4gZW1wdHkgYXJyYXkgaWYgZ3JvdXBJdGVtcyBpcyBub3QgYW4gYXJyYXkgb3IgaXMgZW1wdHlcclxuICAgIGlmICghaXNBcnJheShncm91cEl0ZW1zKSB8fCBncm91cEl0ZW1zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFtbXSwgZmFsc2VdO1xyXG5cclxuICAgIC8vY2hlY2sgaWYgdGhlIGFycmF5IGlzIGFuIGFycmF5IG9mIHByaW1pdGl2ZXMsIGFuZCBtYXAgaXQgaWYgbmVlZGVkXHJcbiAgICBjb25zdCBhcmVJdGVtc1ByaW1pdGl2ZSA9IGZhbHNlO1xyXG4gICAgaWYgKGFueShncm91cEl0ZW1zLCBpc1ByaW1pdGl2ZSkpIHtcclxuICAgICAgZ3JvdXBJdGVtcyA9IGdyb3VwSXRlbXMubWFwKHRoaXMuX3ByaW1pdGl2ZUl0ZW1zTWFwRm4pO1xyXG4gICAgfVxyXG4gICAgLy9hZGQgZ3JvdXAgbmFtZSB0byBldmVyeSBjaGlsZFxyXG4gICAgZ3JvdXBJdGVtcyA9IGdyb3VwSXRlbXMubWFwKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgaXRlbS4kYXJkZ3JvdXAgPSBncm91cE5hbWU7XHJcbiAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIFtncm91cEl0ZW1zLCBhcmVJdGVtc1ByaW1pdGl2ZV07XHJcbiAgfVxyXG4gIHByaXZhdGUgX3NldEl0ZW1zTWFwRm4ocmF3SXRlbURhdGE6IGFueSwgaW5kZXg6IG51bWJlciwgYXJlSXRlbXNQcmltaXRpdmU6IGJvb2xlYW4pOiBBcmRPcHRpb24ge1xyXG4gICAgaWYgKGFyZUl0ZW1zUHJpbWl0aXZlKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaXRlbURhdGE6IHNpZ25hbChyYXdJdGVtRGF0YSksXHJcbiAgICAgICAgaW5kZXg6IGluZGV4LFxyXG4gICAgICAgIHZhbHVlOiBzaWduYWwocmF3SXRlbURhdGEudmFsdWUpLFxyXG4gICAgICAgIGxhYmVsOiBzaWduYWwocmF3SXRlbURhdGEudmFsdWU/LnRvU3RyaW5nPy4oKSA/PyBTdHJpbmcocmF3SXRlbURhdGEudmFsdWUpKSxcclxuICAgICAgICBkaXNhYmxlZDogc2lnbmFsKGZhbHNlKSxcclxuICAgICAgICBzZWxlY3RlZDogc2lnbmFsKGZhbHNlKSxcclxuICAgICAgICBoaWdobGlnaHRlZDogc2lnbmFsKGZhbHNlKSxcclxuICAgICAgICBncm91cDogdW5kZWZpbmVkLFxyXG4gICAgICAgIGhpZ2hsaWdodGVkX3JlY2VudGx5OiBzaWduYWwoZmFsc2UpLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgLy9nZXQgdmFsdWVcclxuICAgIGNvbnN0IHZhbHVlUGF0aCA9IHRoaXMuX2FyZFBhcmVudENvbXAudmFsdWVGcm9tKCkgPz8gdGhpcy5fYXJkUGFyZW50Q29tcC5sYWJlbEZyb20oKTtcclxuICAgIGNvbnN0IHZhbHVlID0gcmVzb2x2ZVBhdGgocmF3SXRlbURhdGEsIHZhbHVlUGF0aCk7XHJcblxyXG4gICAgLy9nZXQgbGFiZWxcclxuICAgIGNvbnN0IGxhYmVsUGF0aCA9IHRoaXMuX2FyZFBhcmVudENvbXAubGFiZWxGcm9tKCkgPz8gdGhpcy5fYXJkUGFyZW50Q29tcC52YWx1ZUZyb20oKTtcclxuICAgIGNvbnN0IGxhYmVsID0gcmVzb2x2ZVBhdGgocmF3SXRlbURhdGEsIGxhYmVsUGF0aCkgPz8gdmFsdWU7XHJcblxyXG4gICAgLy9nZXQgZGlzYWJsZWRcclxuICAgIGNvbnN0IGRpc2FibGVkUGF0aCA9IHRoaXMuX2FyZFBhcmVudENvbXAuZGlzYWJsZWRGcm9tKCk7XHJcbiAgICBsZXQgZGlzYWJsZWQgPSBldmFsdWF0ZShyZXNvbHZlUGF0aChyYXdJdGVtRGF0YSwgZGlzYWJsZWRQYXRoKSk7XHJcbiAgICBpZiAodGhpcy5fYXJkUGFyZW50Q29tcC5pbnZlcnREaXNhYmxlZCgpKSB7XHJcbiAgICAgIGRpc2FibGVkID0gIWRpc2FibGVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8vZ2V0IGdyb3Vwc1xyXG4gICAgbGV0IGdyb3VwOiBhbnkgPSB1bmRlZmluZWQ7XHJcbiAgICBjb25zdCBncm91cEJ5ID0gdGhpcy5fYXJkUGFyZW50Q29tcC5ncm91cExhYmVsRnJvbSgpO1xyXG4gICAgaWYgKGdyb3VwQnkpIHtcclxuICAgICAgaWYgKHJhd0l0ZW1EYXRhLiRhcmRncm91cCkge1xyXG4gICAgICAgIGdyb3VwID0gcmF3SXRlbURhdGEuJGFyZGdyb3VwO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh0eXBlb2YgZ3JvdXBCeSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgIGdyb3VwID0gcmVzb2x2ZVBhdGgocmF3SXRlbURhdGEsIGdyb3VwQnkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBncm91cCA9IGdyb3VwQnkocmF3SXRlbURhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGl0ZW1EYXRhOiBzaWduYWwocmF3SXRlbURhdGEpLFxyXG4gICAgICBpbmRleDogaW5kZXgsXHJcbiAgICAgIHZhbHVlOiBzaWduYWwodmFsdWUpLFxyXG4gICAgICBsYWJlbDogc2lnbmFsKGxhYmVsPy50b1N0cmluZz8uKCkgPz8gU3RyaW5nKGxhYmVsKSksXHJcbiAgICAgIGRpc2FibGVkOiBzaWduYWwoZGlzYWJsZWQpLFxyXG4gICAgICBncm91cDogZ3JvdXAsXHJcbiAgICAgIHNlbGVjdGVkOiBzaWduYWwoZmFsc2UpLFxyXG4gICAgICBoaWdobGlnaHRlZDogc2lnbmFsKGZhbHNlKSxcclxuICAgICAgaGlnaGxpZ2h0ZWRfcmVjZW50bHk6IHNpZ25hbChmYWxzZSksXHJcbiAgICB9O1xyXG4gIH1cclxuICBwcml2YXRlIF9wb3B1bGF0ZUdyb3VwcygpOiB2b2lkIHtcclxuICAgIHRoaXMuX2dyb3Vwcy5zZXQodGhpcy5fY3JlYXRlRW1wdHlHcm91cE1hcCgpKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5fZmlsdGVyZWRJdGVtcygpKSB7XHJcbiAgICAgIGlmICh0aGlzLl9hcmRQYXJlbnRDb21wLmhpZGVTZWxlY3RlZCgpICYmIGl0ZW0uc2VsZWN0ZWQoKSkgY29udGludWU7XHJcblxyXG4gICAgICB0aGlzLl9hZGRUb0dyb3VwKGl0ZW0pO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIF9hZGRUb0dyb3VwKGl0ZW06IEFyZE9wdGlvbik6IHZvaWQge1xyXG4gICAgY29uc3QgZ3JvdXBLZXkgPSBpdGVtLmdyb3VwO1xyXG4gICAgY29uc3QgdGFyZ2V0R3JvdXAgPSB0aGlzLl9ncm91cHMoKS5nZXQoZ3JvdXBLZXkpO1xyXG4gICAgLy9jcmVhdGUgbmV3IGdyb3VwIGlmIG5vIHN1Y2ggZ3JvdXAgZXhpc3RzXHJcbiAgICBpZiAoIXRhcmdldEdyb3VwKSB7XHJcbiAgICAgIHRoaXMuX2dyb3Vwcy51cGRhdGUodiA9PiB7XHJcbiAgICAgICAgY29uc3QgbWFwID0gbmV3IE1hcCh2KTtcclxuICAgICAgICBtYXAuc2V0KGdyb3VwS2V5LCB7XHJcbiAgICAgICAgICBsYWJlbDogc2lnbmFsKFN0cmluZyhncm91cEtleSA/PyAnJykpLFxyXG4gICAgICAgICAgY2hpbGRyZW46IHNpZ25hbChbaXRlbV0pLFxyXG4gICAgICAgICAgZGlzYWJsZWQ6IHNpZ25hbChmYWxzZSksXHJcbiAgICAgICAgICBzZWxlY3RlZDogc2lnbmFsKGZhbHNlKSxcclxuICAgICAgICAgIGhpZ2hsaWdodGVkOiBzaWduYWwoZmFsc2UpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBtYXA7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0YXJnZXRHcm91cC5jaGlsZHJlbi51cGRhdGUodiA9PiBbLi4udiwgaXRlbV0pO1xyXG4gIH1cclxuICBwcml2YXRlIF9jcmVhdGVFbXB0eUdyb3VwTWFwKCk6IEFyZEl0ZW1Hcm91cE1hcCB7XHJcbiAgICByZXR1cm4gbmV3IE1hcChbXHJcbiAgICAgIFtcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbGFiZWw6IHNpZ25hbCgnJyksXHJcbiAgICAgICAgICBjaGlsZHJlbjogc2lnbmFsKFtdKSxcclxuICAgICAgICAgIGRpc2FibGVkOiBzaWduYWwoZmFsc2UpLFxyXG4gICAgICAgICAgc2VsZWN0ZWQ6IHNpZ25hbChmYWxzZSksXHJcbiAgICAgICAgICBoaWdobGlnaHRlZDogc2lnbmFsKGZhbHNlKSxcclxuICAgICAgICB9LFxyXG4gICAgICBdLFxyXG4gICAgXSkgYXMgQXJkSXRlbUdyb3VwTWFwO1xyXG4gIH1cclxuICBwcml2YXRlIF9pc1dyaXRlVmFsdWVWYWxpZChuZ01vZGVsOiBhbnlbXSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIG5nTW9kZWwuZXZlcnkoaXRlbSA9PiB7XHJcbiAgICAgIGlmICghaXNEZWZpbmVkKHRoaXMuX2FyZFBhcmVudENvbXAuY29tcGFyZVdpdGgpICYmIGlzT2JqZWN0KGl0ZW0pICYmIHRoaXMuX2FyZFBhcmVudENvbXAudmFsdWVGcm9tKCkpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICBgQVJELVdBJHt0aGlzLl9hcmRQYXJlbnRDb21wLl9jb21wb25lbnRJZH0wOiBbdmFsdWVGcm9tXSBjYW4gb25seSBwb2ludCB0byBhIHByb3BlcnR5IG9mIGEgcHJpbWl0aXZlIHR5cGUuIERlZmluZSBbY29tcGFyZVdpdGhdIGlmIHVzaW5nIG9iamVjdHMgYXMgYSB2YWx1ZSBpcyBuZWVkZWQuYFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZhbHVlVG9Xcml0ZUFmdGVySXRlbXNMb2FkID0gc2lnbmFsPGFueT4odW5kZWZpbmVkKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF93YXNWYWx1ZVdyaXRlRGVmZXJyZWQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGhhbmRsZVdyaXRlVmFsdWUobmdNb2RlbDogYW55W10pOiB2b2lkIHtcclxuICAgIGlmICghaXNBcnJheShuZ01vZGVsKSkge1xyXG4gICAgICBuZ01vZGVsID0gW25nTW9kZWxdO1xyXG4gICAgfVxyXG4gICAgLy9kZWZlciB3cml0aW5nIHRoZSB2YWx1ZSBpZiBubyBvcHRpb25zIGFyZSB5ZXQgbG9hZGVkXHJcbiAgICBpZiAoIXRoaXMuX3dhc1ZhbHVlV3JpdGVEZWZlcnJlZCgpICYmIHRoaXMuX2l0ZW1zKCkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMuX3ZhbHVlVG9Xcml0ZUFmdGVySXRlbXNMb2FkLnNldChuZ01vZGVsKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2xlYXJBbGxTZWxlY3RlZCgpO1xyXG5cclxuICAgIGlmICghdGhpcy5faXNXcml0ZVZhbHVlVmFsaWQobmdNb2RlbCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNlbGVjdEl0ZW1CeVZhbHVlID0gKHZhbHVlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLnVuc2VsZWN0SXRlbSguLi50aGlzLl9zZWxlY3RlZEl0ZW1zKCkpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5maW5kSXRlbUJ5VmFsdWUodmFsdWUpO1xyXG5cclxuICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICB0aGlzLnNlbGVjdEl0ZW0oaXRlbSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgQVJELVdBJHt0aGlzLl9hcmRQYXJlbnRDb21wLl9jb21wb25lbnRJZH0xOiBDb3VsZG4ndCBmaW5kIGFuIGl0ZW0gd2l0aCB2YWx1ZSAke1xyXG4gICAgICAgICAgdmFsdWU/LnRvU3RyaW5nPy4oKSB8fCBTdHJpbmcodmFsdWUpXHJcbiAgICAgICAgfSB3aGVuIHRyeWluZyB0byBzZWxlY3QgaXQuYFxyXG4gICAgICApO1xyXG4gICAgfTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IG1vZGVsVmFsdWUgb2YgbmdNb2RlbCkge1xyXG4gICAgICBzZWxlY3RJdGVtQnlWYWx1ZShtb2RlbFZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcbiAgZmluZEl0ZW1CeVZhbHVlKHZhbHVlVG9GaW5kOiBhbnkpOiBBcmRPcHRpb24gfCB1bmRlZmluZWQge1xyXG4gICAgbGV0IGZpbmRCeTogKGl0ZW06IEFyZE9wdGlvbikgPT4gYm9vbGVhbjtcclxuICAgIGlmICh0aGlzLl9hcmRQYXJlbnRDb21wLmNvbXBhcmVXaXRoKCkpIHtcclxuICAgICAgZmluZEJ5ID0gaXRlbSA9PiB0aGlzLl9hcmRQYXJlbnRDb21wLmNvbXBhcmVXaXRoKCkhKHZhbHVlVG9GaW5kLCBpdGVtLnZhbHVlKCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZmluZEJ5ID0gaXRlbSA9PiBpdGVtLnZhbHVlKCkgPT09IHZhbHVlVG9GaW5kO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zKCkuZmluZChpdGVtID0+IGZpbmRCeShpdGVtKSk7XHJcbiAgfVxyXG4gIGFzeW5jIGFkZEN1c3RvbU9wdGlvbih2YWx1ZTogc3RyaW5nLCBmbjogQWRkQ3VzdG9tRm48YW55PiB8IEFkZEN1c3RvbUZuPFByb21pc2U8YW55Pj4pOiBQcm9taXNlPEFyZE9wdGlvbiB8IG51bGw+IHtcclxuICAgIGNvbnN0IGZuUmVzdWx0ID0gZm4odmFsdWUpO1xyXG5cclxuICAgIGxldCBvcHRpb25WYWx1ZSA9IGZuUmVzdWx0O1xyXG4gICAgaWYgKGlzUHJvbWlzZShvcHRpb25WYWx1ZSkpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBvcHRpb25WYWx1ZSA9IGF3YWl0IG9wdGlvblZhbHVlO1xyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgICBgQVJELU5GJHt0aGlzLl9hcmRQYXJlbnRDb21wLl9jb21wb25lbnRJZH0yOiBGYWlsZWQgdG8gYWRkIGEgY3VzdG9tIG9wdGlvbi4gVGhlIHByb21pc2Ugd2FzIHJlamVjdGVkIHdpdGggdGhlIGZvbGxvd2luZyBlcnJvcjpgLFxyXG4gICAgICAgICAgZXJyb3JcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbmV3T3B0aW9uT2JqID0gdGhpcy5fYWRkU2luZ2xlSXRlbShvcHRpb25WYWx1ZSk7XHJcbiAgICByZXR1cm4gbmV3T3B0aW9uT2JqO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJBbGxTZWxlY3RlZChyZXBvcHVsYXRlR3JvdXBzID0gZmFsc2UpOiBhbnlbXSB7XHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5fc2VsZWN0ZWRJdGVtcygpKSB7XHJcbiAgICAgIGl0ZW0uc2VsZWN0ZWQuc2V0KGZhbHNlKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHJlbW92ZWRJdGVtVmFsdWVzID0gdGhpcy5faXRlbXNUb1ZhbHVlKHRoaXMuX3NlbGVjdGVkSXRlbXMoKSk7XHJcbiAgICB0aGlzLl9zZWxlY3RlZEl0ZW1zLnNldChbXSk7XHJcblxyXG4gICAgaWYgKHJlcG9wdWxhdGVHcm91cHMgJiYgdGhpcy5fYXJkUGFyZW50Q29tcC5oaWRlU2VsZWN0ZWQoKSkgdGhpcy5fcG9wdWxhdGVHcm91cHMoKTtcclxuXHJcbiAgICByZXR1cm4gcmVtb3ZlZEl0ZW1WYWx1ZXM7XHJcbiAgfVxyXG4gIGNsZWFyTGFzdFNlbGVjdGVkKCk6IEFyZE9wdGlvbiB7XHJcbiAgICBjb25zdCBpdGVtID0gdGhpcy5fc2VsZWN0ZWRJdGVtcygpLmxhc3QoKTtcclxuICAgIGlmICghaXRlbSkgcmV0dXJuIGl0ZW07XHJcbiAgICB0aGlzLnVuc2VsZWN0SXRlbShpdGVtKTtcclxuICAgIHJldHVybiBpdGVtO1xyXG4gIH1cclxuICBzZWxlY3RJdGVtKC4uLml0ZW1zOiBBcmRPcHRpb25bXSk6IFthbnlbXSwgYW55W10sIGFueVtdXSB7XHJcbiAgICBpZiAodGhpcy5pc0l0ZW1MaW1pdFJlYWNoZWQoKSkge1xyXG4gICAgICByZXR1cm4gW1tdLCBbXSwgdGhpcy5faXRlbXNUb1ZhbHVlKGl0ZW1zKV07XHJcbiAgICB9XHJcbiAgICBsZXQgdW5zZWxlY3RlZCA9IFtdO1xyXG4gICAgaWYgKCF0aGlzLl9hcmRQYXJlbnRDb21wLm11bHRpc2VsZWN0YWJsZSgpKSB7XHJcbiAgICAgIHVuc2VsZWN0ZWQgPSB0aGlzLmNsZWFyQWxsU2VsZWN0ZWQoZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBpdGVtc1NlbGVjdGVkQ291bnQgPSAwO1xyXG4gICAgY29uc3QgaXRlbXNTZWxlY3RlZCA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XHJcbiAgICAgIGl0ZW1zU2VsZWN0ZWRDb3VudCsrO1xyXG4gICAgICBpZiAoaXRlbS5zZWxlY3RlZCgpKSBjb250aW51ZTtcclxuICAgICAgaWYgKHRoaXMuaXNJdGVtTGltaXRSZWFjaGVkKCkpIHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBpdGVtLnNlbGVjdGVkLnNldCh0cnVlKTtcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRJdGVtcy51cGRhdGUodiA9PiBbLi4udiwgaXRlbV0pO1xyXG4gICAgICBpdGVtc1NlbGVjdGVkLnB1c2goaXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2FyZFBhcmVudENvbXAuaGlkZVNlbGVjdGVkKCkpIHtcclxuICAgICAgdGhpcy5fcG9wdWxhdGVHcm91cHMoKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpdGVtc0ZhaWxlZFRvU2VsZWN0ID0gaXRlbXMuc2xpY2UoaXRlbXNTZWxlY3RlZENvdW50IC0gMSk7XHJcbiAgICByZXR1cm4gW3RoaXMuX2l0ZW1zVG9WYWx1ZShpdGVtc1NlbGVjdGVkKSwgdW5zZWxlY3RlZCwgdGhpcy5faXRlbXNUb1ZhbHVlKGl0ZW1zRmFpbGVkVG9TZWxlY3QpXTtcclxuICB9XHJcbiAgdW5zZWxlY3RJdGVtKC4uLml0ZW1zOiBBcmRPcHRpb25bXSk6IGFueVtdIHtcclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xyXG4gICAgICBpZiAoIWl0ZW0uc2VsZWN0ZWQoKSkgY29udGludWU7XHJcbiAgICAgIGl0ZW0uc2VsZWN0ZWQuc2V0KGZhbHNlKTtcclxuICAgIH1cclxuICAgIHRoaXMuX3NlbGVjdGVkSXRlbXMudXBkYXRlKHYgPT4gdi5maWx0ZXIodiA9PiB2LnNlbGVjdGVkKCkpKTtcclxuXHJcbiAgICBpZiAodGhpcy5fYXJkUGFyZW50Q29tcC5oaWRlU2VsZWN0ZWQoKSkge1xyXG4gICAgICB0aGlzLl9wb3B1bGF0ZUdyb3VwcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLl9pdGVtc1RvVmFsdWUoaXRlbXMpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJBbGxIaWdobGlnaHRzKCk6IHZvaWQge1xyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuX2hpZ2hsaWdodGVkSXRlbXMoKSkge1xyXG4gICAgICBpdGVtLmhpZ2hsaWdodGVkLnNldChmYWxzZSk7XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIHRoaXMuX2hpZ2hsaWdodGVkR3JvdXBzKCkpIHtcclxuICAgICAgZ3JvdXAuaGlnaGxpZ2h0ZWQuc2V0KGZhbHNlKTtcclxuICAgIH1cclxuICAgIHRoaXMuX2hpZ2hsaWdodGVkSXRlbXMuc2V0KFtdKTtcclxuICAgIHRoaXMuX2hpZ2hsaWdodGVkR3JvdXBzLnNldChbXSk7XHJcbiAgfVxyXG4gIGhpZ2hsaWdodEdyb3VwKGdyb3VwOiBBcmRPcHRpb25Hcm91cCk6IEFyZE9wdGlvbiB7XHJcbiAgICB0aGlzLmNsZWFyQWxsSGlnaGxpZ2h0cygpO1xyXG4gICAgZ3JvdXAuaGlnaGxpZ2h0ZWQuc2V0KHRydWUpO1xyXG4gICAgdGhpcy5oaWdobGlnaHRJdGVtKC4uLmdyb3VwLmNoaWxkcmVuKCkpO1xyXG4gICAgcmV0dXJuIGdyb3VwLmNoaWxkcmVuKCkuZmlyc3QoKTtcclxuICB9XHJcbiAgaGlnaGxpZ2h0U2luZ2xlSXRlbShpdGVtOiBBcmRPcHRpb24pOiBBcmRPcHRpb24gfCBudWxsIHtcclxuICAgIGlmICghaXRlbSB8fCBpdGVtLmRpc2FibGVkKCkpIHJldHVybiBudWxsO1xyXG4gICAgdGhpcy5jbGVhckFsbEhpZ2hsaWdodHMoKTtcclxuICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodEl0ZW0oaXRlbSk7XHJcbiAgfVxyXG4gIGhpZ2hsaWdodEl0ZW0oLi4uaXRlbXM6IEFyZE9wdGlvbltdKTogQXJkT3B0aW9uIHtcclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xyXG4gICAgICBpdGVtLmhpZ2hsaWdodGVkLnNldCh0cnVlKTtcclxuICAgIH1cclxuICAgIHRoaXMuX2hpZ2hsaWdodGVkSXRlbXMudXBkYXRlKHYgPT4gWy4uLnYsIC4uLml0ZW1zXSk7XHJcbiAgICByZXR1cm4gaXRlbXMubGFzdCgpO1xyXG4gIH1cclxuICB1bmhpZ2hsaWdodEl0ZW0oLi4uaXRlbXM6IEFyZE9wdGlvbltdKTogdm9pZCB7XHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcclxuICAgICAgaWYgKCFpdGVtIHx8ICFpdGVtLmhpZ2hsaWdodGVkKSByZXR1cm47XHJcblxyXG4gICAgICBpdGVtLmhpZ2hsaWdodGVkLnNldChmYWxzZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9oaWdobGlnaHRlZEl0ZW1zLnVwZGF0ZSh2ID0+IHYuZmlsdGVyKHYgPT4gdi5oaWdobGlnaHRlZCgpKSk7XHJcbiAgfVxyXG4gIGhpZ2hsaWdodEZpcnN0SXRlbSgpOiBBcmRPcHRpb24gfCBudWxsIHtcclxuICAgIHRoaXMuY2xlYXJBbGxIaWdobGlnaHRzKCk7XHJcbiAgICBjb25zdCBpdGVtc1RvSGlnaGxpZ2h0ID0gdGhpcy5fZ2V0SGlnbGlnaHRhYmxlSXRlbXMoKTtcclxuICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodFNpbmdsZUl0ZW0oaXRlbXNUb0hpZ2hsaWdodC5maXJzdCgpKTtcclxuICB9XHJcbiAgaGlnaGxpZ2h0TGFzdEl0ZW0oKTogQXJkT3B0aW9uIHwgbnVsbCB7XHJcbiAgICB0aGlzLmNsZWFyQWxsSGlnaGxpZ2h0cygpO1xyXG4gICAgY29uc3QgaXRlbXNUb0hpZ2hsaWdodCA9IHRoaXMuX2dldEhpZ2xpZ2h0YWJsZUl0ZW1zKCk7XHJcbiAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRTaW5nbGVJdGVtKGl0ZW1zVG9IaWdobGlnaHQubGFzdCgpKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfZ2V0SGlnbGlnaHRhYmxlSXRlbXMoKTogQXJkT3B0aW9uW10ge1xyXG4gICAgbGV0IGl0ZW1zVG9IaWdobGlnaHQgPSB0aGlzLl9maWx0ZXJlZEl0ZW1zKCkuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0uZGlzYWJsZWQoKSk7XHJcbiAgICBpZiAodGhpcy5fYXJkUGFyZW50Q29tcC5oaWRlU2VsZWN0ZWQoKSkge1xyXG4gICAgICBpdGVtc1RvSGlnaGxpZ2h0ID0gaXRlbXNUb0hpZ2hsaWdodC5maWx0ZXIoaXRlbSA9PiAhaXRlbS5zZWxlY3RlZCgpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBpdGVtc1RvSGlnaGxpZ2h0O1xyXG4gIH1cclxuICBoaWdobGlnaHRBbGxJdGVtcygpOiB2b2lkIHtcclxuICAgIHRoaXMuaGlnaGxpZ2h0SXRlbSguLi50aGlzLl9nZXRIaWdsaWdodGFibGVJdGVtcygpKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfY2xlYXJSZWNlbnRseUhpZ2hsaWdodGVkKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX3JlY2VudGx5SGlnaGxpZ2h0ZWRJdGVtKCkpIHtcclxuICAgICAgdGhpcy5fcmVjZW50bHlIaWdobGlnaHRlZEl0ZW0oKSEuaGlnaGxpZ2h0ZWRfcmVjZW50bHkuc2V0KGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcbiAgc2V0UmVjZW50bHlIaWdobGlnaHRlZChpdGVtOiBBcmRPcHRpb24pOiB2b2lkIHtcclxuICAgIHRoaXMuX2NsZWFyUmVjZW50bHlIaWdobGlnaHRlZCgpO1xyXG4gICAgaXRlbS5oaWdobGlnaHRlZF9yZWNlbnRseS5zZXQodHJ1ZSk7XHJcbiAgICB0aGlzLl9yZWNlbnRseUhpZ2hsaWdodGVkSXRlbS5zZXQoaXRlbSk7XHJcbiAgfVxyXG4gIGhpZ2hsaWdodE5leHRJdGVtKG9mZnNldDogbnVtYmVyLCBoYXNTaGlmdD86IGJvb2xlYW4pOiBBcmRPcHRpb24gfCBudWxsIHtcclxuICAgIGlmICghdGhpcy5pc0FueUl0ZW1IaWdobGlnaHRlZCgpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodEZpcnN0SXRlbSgpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY3VycmVudEl0ZW0gPSB0aGlzLmhpZ2hsaWdodGVkSXRlbXMoKS5sYXN0KCk7XHJcbiAgICBjb25zdCBoaWdobGlnaHRhYmxlSXRlbXMgPSB0aGlzLl9nZXRIaWdsaWdodGFibGVJdGVtcygpO1xyXG4gICAgY29uc3QgY3VycmVudEluZGV4SW5GaWx0ZXJlZCA9IGhpZ2hsaWdodGFibGVJdGVtcy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmluZGV4ID09PSBjdXJyZW50SXRlbS5pbmRleCk7XHJcblxyXG4gICAgbGV0IG5leHRJdGVtSW5kZXggPSBjdXJyZW50SW5kZXhJbkZpbHRlcmVkICsgb2Zmc2V0O1xyXG4gICAgaWYgKG5leHRJdGVtSW5kZXggPj0gaGlnaGxpZ2h0YWJsZUl0ZW1zLmxlbmd0aCkge1xyXG4gICAgICBuZXh0SXRlbUluZGV4IC09IGhpZ2hsaWdodGFibGVJdGVtcy5sZW5ndGg7XHJcbiAgICB9XHJcbiAgICBpZiAobmV4dEl0ZW1JbmRleCA8IDApIHtcclxuICAgICAgbmV4dEl0ZW1JbmRleCArPSBoaWdobGlnaHRhYmxlSXRlbXMubGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaXRlbVRvSGlnaGxpZ2h0ID0gaGlnaGxpZ2h0YWJsZUl0ZW1zW25leHRJdGVtSW5kZXhdO1xyXG5cclxuICAgIGlmIChoYXNTaGlmdCAmJiB0aGlzLl9hcmRQYXJlbnRDb21wLm11bHRpc2VsZWN0YWJsZSgpKSB7XHJcbiAgICAgIGlmIChpdGVtVG9IaWdobGlnaHQuaGlnaGxpZ2h0ZWQoKSkge1xyXG4gICAgICAgIHRoaXMudW5oaWdobGlnaHRJdGVtKGN1cnJlbnRJdGVtKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRJdGVtKGl0ZW1Ub0hpZ2hsaWdodCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRTaW5nbGVJdGVtKGl0ZW1Ub0hpZ2hsaWdodCk7XHJcbiAgfVxyXG4gIGZpbHRlcihmaWx0ZXJUZXJtOiBzdHJpbmcpOiBhbnlbXSB7XHJcbiAgICBpZiAoIWZpbHRlclRlcm0pIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zVG9WYWx1ZSh0aGlzLnJlc2V0RmlsdGVyZWQoKSk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuX2FyZFBhcmVudENvbXAuc2VhcmNoQ2FzZVNlbnNpdGl2ZSgpKSB7XHJcbiAgICAgIGZpbHRlclRlcm0gPSBmaWx0ZXJUZXJtLnRvTG9jYWxlTG93ZXJDYXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2VhcmNoRm4gPSB0aGlzLl9hcmRQYXJlbnRDb21wLnNlYXJjaEZuKCk7XHJcbiAgICBjb25zdCBuZXdGaWx0ZXJlZEl0ZW1zID0gdGhpcy5faXRlbXMoKS5maWx0ZXIoaXRlbSA9PiBzZWFyY2hGbihmaWx0ZXJUZXJtLCBpdGVtKSk7XHJcbiAgICB0aGlzLl9maWx0ZXJlZEl0ZW1zLnNldChuZXdGaWx0ZXJlZEl0ZW1zKTtcclxuXHJcbiAgICB0aGlzLl9wb3B1bGF0ZUdyb3VwcygpO1xyXG5cclxuICAgIGlmICghdGhpcy5pc05vSXRlbXNGb3VuZCkgdGhpcy5oaWdobGlnaHRGaXJzdEl0ZW0oKTtcclxuICAgIGVsc2UgdGhpcy5jbGVhckFsbEhpZ2hsaWdodHMoKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5faXRlbXNUb1ZhbHVlKG5ld0ZpbHRlcmVkSXRlbXMpO1xyXG4gIH1cclxuICByZXNldEZpbHRlcmVkKCk6IEFyZE9wdGlvbltdIHtcclxuICAgIGlmICh0aGlzLl9maWx0ZXJlZEl0ZW1zKCkubGVuZ3RoID09PSB0aGlzLl9pdGVtcygpLmxlbmd0aCkgcmV0dXJuIHRoaXMuX2l0ZW1zKCk7XHJcblxyXG4gICAgbGV0IG5ld0ZpbHRlcmVkSXRlbXMgPSB0aGlzLl9pdGVtcygpO1xyXG4gICAgaWYgKHRoaXMuX2FyZFBhcmVudENvbXAuaGlkZVNlbGVjdGVkKCkgJiYgdGhpcy5pc0FueUl0ZW1TZWxlY3RlZCgpKSB7XHJcbiAgICAgIG5ld0ZpbHRlcmVkSXRlbXMgPSBuZXdGaWx0ZXJlZEl0ZW1zLmZpbHRlcihpdGVtID0+ICFpdGVtLnNlbGVjdGVkKCkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fcG9wdWxhdGVHcm91cHMoKTtcclxuICAgIHJldHVybiBuZXdGaWx0ZXJlZEl0ZW1zO1xyXG4gIH1cclxufVxyXG4iXX0=
|