@ardium-ui/ui 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -0
- package/esm2022/ardium-ui-ui.mjs +5 -0
- package/esm2022/lib/_internal/boolean-component.mjs +108 -0
- package/esm2022/lib/_internal/clear-button/clear-button.component.mjs +12 -0
- package/esm2022/lib/_internal/clear-button/clear-button.module.mjs +18 -0
- package/esm2022/lib/_internal/disablable-component.mjs +44 -0
- package/esm2022/lib/_internal/focusable-component.mjs +91 -0
- package/esm2022/lib/_internal/item-storages/dropdown-item-storage.mjs +436 -0
- package/esm2022/lib/_internal/item-storages/simple-item-storage.mjs +349 -0
- package/esm2022/lib/_internal/item-storages/simplest-item-storage.mjs +155 -0
- package/esm2022/lib/_internal/models/pagination.model.mjs +124 -0
- package/esm2022/lib/_internal/ngmodel-component.mjs +42 -0
- package/esm2022/lib/_internal/queue.mjs +59 -0
- package/esm2022/lib/_internal/selectable-list-component.mjs +304 -0
- package/esm2022/lib/badge/badge.directive.mjs +123 -0
- package/esm2022/lib/badge/badge.module.mjs +18 -0
- package/esm2022/lib/badge/badge.types.mjs +16 -0
- package/esm2022/lib/buttons/_button-base.mjs +45 -0
- package/esm2022/lib/buttons/button/button.component.mjs +49 -0
- package/esm2022/lib/buttons/button/button.module.mjs +18 -0
- package/esm2022/lib/buttons/fab/fab.component.mjs +40 -0
- package/esm2022/lib/buttons/fab/fab.module.mjs +18 -0
- package/esm2022/lib/buttons/general-button.types.mjs +55 -0
- package/esm2022/lib/buttons/icon-button/icon-button.component.mjs +37 -0
- package/esm2022/lib/buttons/icon-button/icon-button.module.mjs +18 -0
- package/esm2022/lib/calendar/calendar.component.mjs +982 -0
- package/esm2022/lib/calendar/calendar.directives.mjs +107 -0
- package/esm2022/lib/calendar/calendar.helpers.mjs +47 -0
- package/esm2022/lib/calendar/calendar.module.mjs +21 -0
- package/esm2022/lib/calendar/calendar.types.mjs +11 -0
- package/esm2022/lib/card/card.children.mjs +97 -0
- package/esm2022/lib/card/card.component.mjs +40 -0
- package/esm2022/lib/card/card.module.mjs +59 -0
- package/esm2022/lib/card/card.types.mjs +9 -0
- package/esm2022/lib/checkbox/checkbox.component.mjs +73 -0
- package/esm2022/lib/checkbox/checkbox.module.mjs +18 -0
- package/esm2022/lib/checkbox/checkbox.types.mjs +6 -0
- package/esm2022/lib/checkbox-list/checkbox-list.component.mjs +139 -0
- package/esm2022/lib/checkbox-list/checkbox-list.module.mjs +19 -0
- package/esm2022/lib/checkbox-list/checkbox-list.types.mjs +7 -0
- package/esm2022/lib/chip/chip.component.mjs +55 -0
- package/esm2022/lib/chip/chip.module.mjs +21 -0
- package/esm2022/lib/chip/deletable-chip/deletable-chip.component.mjs +80 -0
- package/esm2022/lib/chip/selectable-chip/selectable-chip.component.mjs +77 -0
- package/esm2022/lib/color/color-display/color-display.component.mjs +48 -0
- package/esm2022/lib/color/color-display/color-display.module.mjs +18 -0
- package/esm2022/lib/color/color-display/color-display.types.mjs +9 -0
- package/esm2022/lib/color/color-picker/color-picker.component.mjs +484 -0
- package/esm2022/lib/color/color-picker/color-picker.directives.mjs +55 -0
- package/esm2022/lib/color/color-picker/color-picker.module.mjs +43 -0
- package/esm2022/lib/color/color-picker/color-picker.types.mjs +11 -0
- package/esm2022/lib/dialog/dialog.component.mjs +167 -0
- package/esm2022/lib/dialog/dialog.directives.mjs +14 -0
- package/esm2022/lib/dialog/dialog.module.mjs +21 -0
- package/esm2022/lib/dialog/dialog.types.mjs +6 -0
- package/esm2022/lib/divider/divider.component.mjs +26 -0
- package/esm2022/lib/divider/divider.module.mjs +18 -0
- package/esm2022/lib/dropdown-panel/dropdown-panel.component.mjs +130 -0
- package/esm2022/lib/dropdown-panel/dropdown-panel.module.mjs +18 -0
- package/esm2022/lib/dropdown-panel/dropdown-panel.types.mjs +10 -0
- package/esm2022/lib/file-inputs/file-drop-area/file-drop-area.component.mjs +82 -0
- package/esm2022/lib/file-inputs/file-drop-area/file-drop-area.directives.mjs +42 -0
- package/esm2022/lib/file-inputs/file-drop-area/file-drop-area.module.mjs +58 -0
- package/esm2022/lib/file-inputs/file-input/file-input.component.mjs +153 -0
- package/esm2022/lib/file-inputs/file-input/file-input.directives.mjs +73 -0
- package/esm2022/lib/file-inputs/file-input/file-input.module.mjs +21 -0
- package/esm2022/lib/file-inputs/file-input-base.mjs +187 -0
- package/esm2022/lib/file-inputs/file-input-types.mjs +2 -0
- package/esm2022/lib/form-field-frame/form-field-frame.component.mjs +74 -0
- package/esm2022/lib/form-field-frame/form-field-frame.directives.mjs +25 -0
- package/esm2022/lib/form-field-frame/form-field-frame.module.mjs +19 -0
- package/esm2022/lib/icon/icon.component.mjs +85 -0
- package/esm2022/lib/icon/icon.module.mjs +19 -0
- package/esm2022/lib/icon/icon.pipe.mjs +18 -0
- package/esm2022/lib/inputs/color-input/color-input.component.mjs +421 -0
- package/esm2022/lib/inputs/color-input/color-input.directives.mjs +101 -0
- package/esm2022/lib/inputs/color-input/color-input.module.mjs +85 -0
- package/esm2022/lib/inputs/color-input/color-input.types.mjs +2 -0
- package/esm2022/lib/inputs/digit-input/digit-input.component.mjs +218 -0
- package/esm2022/lib/inputs/digit-input/digit-input.model.mjs +217 -0
- package/esm2022/lib/inputs/digit-input/digit-input.module.mjs +18 -0
- package/esm2022/lib/inputs/digit-input/digit-input.types.mjs +15 -0
- package/esm2022/lib/inputs/digit-input/digit-input.utils.mjs +8 -0
- package/esm2022/lib/inputs/hex-input/hex-input.component.mjs +234 -0
- package/esm2022/lib/inputs/hex-input/hex-input.directives.mjs +36 -0
- package/esm2022/lib/inputs/hex-input/hex-input.module.mjs +21 -0
- package/esm2022/lib/inputs/hex-input.model.mjs +106 -0
- package/esm2022/lib/inputs/input/input.component.mjs +344 -0
- package/esm2022/lib/inputs/input/input.directives.mjs +58 -0
- package/esm2022/lib/inputs/input/input.module.mjs +47 -0
- package/esm2022/lib/inputs/input-transformers.mjs +66 -0
- package/esm2022/lib/inputs/input-types.mjs +6 -0
- package/esm2022/lib/inputs/input-utils.mjs +205 -0
- package/esm2022/lib/inputs/number-input/number-input.component.mjs +289 -0
- package/esm2022/lib/inputs/number-input/number-input.directives.mjs +14 -0
- package/esm2022/lib/inputs/number-input/number-input.module.mjs +21 -0
- package/esm2022/lib/inputs/password-input/password-input.component.mjs +222 -0
- package/esm2022/lib/inputs/password-input/password-input.directives.mjs +49 -0
- package/esm2022/lib/inputs/password-input/password-input.module.mjs +41 -0
- package/esm2022/lib/inputs/password-input/password-input.types.mjs +2 -0
- package/esm2022/lib/inputs/simple-input/simple-input.component.mjs +219 -0
- package/esm2022/lib/inputs/simple-input/simple-input.directives.mjs +36 -0
- package/esm2022/lib/inputs/simple-input/simple-input.module.mjs +37 -0
- package/esm2022/lib/kbd/kbd.component.mjs +42 -0
- package/esm2022/lib/kbd/kbd.module.mjs +19 -0
- package/esm2022/lib/kbd/kbd.pipe.mjs +17 -0
- package/esm2022/lib/kbd-shortcut/kbd-shortcut.component.mjs +55 -0
- package/esm2022/lib/kbd-shortcut/kbd-shortcut.module.mjs +19 -0
- package/esm2022/lib/modal/modal.component.mjs +120 -0
- package/esm2022/lib/modal/modal.module.mjs +21 -0
- package/esm2022/lib/option/option.component.mjs +77 -0
- package/esm2022/lib/option/option.module.mjs +18 -0
- package/esm2022/lib/progress-bar/progress-bar.component.mjs +95 -0
- package/esm2022/lib/progress-bar/progress-bar.directive.mjs +14 -0
- package/esm2022/lib/progress-bar/progress-bar.module.mjs +19 -0
- package/esm2022/lib/progress-bar/progress-bar.types.mjs +19 -0
- package/esm2022/lib/progress-circle/progress-circle.component.mjs +94 -0
- package/esm2022/lib/progress-circle/progress-circle.directive.mjs +14 -0
- package/esm2022/lib/progress-circle/progress-circle.module.mjs +19 -0
- package/esm2022/lib/progress-circle/progress-circle.types.mjs +10 -0
- package/esm2022/lib/radio/radio/radio.component.mjs +53 -0
- package/esm2022/lib/radio/radio-group.component.mjs +207 -0
- package/esm2022/lib/radio/radio.module.mjs +19 -0
- package/esm2022/lib/search-functions.mjs +64 -0
- package/esm2022/lib/segment/segment.component.mjs +168 -0
- package/esm2022/lib/segment/segment.directives.mjs +14 -0
- package/esm2022/lib/segment/segment.module.mjs +19 -0
- package/esm2022/lib/segment/segment.types.mjs +12 -0
- package/esm2022/lib/select/select.component.mjs +1160 -0
- package/esm2022/lib/select/select.directive.mjs +171 -0
- package/esm2022/lib/select/select.module.mjs +112 -0
- package/esm2022/lib/select/select.types.mjs +2 -0
- package/esm2022/lib/slide-toggle/slide-toggle.component.mjs +46 -0
- package/esm2022/lib/slide-toggle/slide-toggle.module.mjs +18 -0
- package/esm2022/lib/slider/abstract-slider.mjs +330 -0
- package/esm2022/lib/slider/range-slider/range-slider.component.mjs +143 -0
- package/esm2022/lib/slider/range-slider/range-slider.module.mjs +18 -0
- package/esm2022/lib/slider/slider.component.mjs +93 -0
- package/esm2022/lib/slider/slider.directive.mjs +16 -0
- package/esm2022/lib/slider/slider.module.mjs +20 -0
- package/esm2022/lib/slider/slider.types.mjs +10 -0
- package/esm2022/lib/snackbar/index.mjs +5 -0
- package/esm2022/lib/snackbar/snackbar-ref.mjs +51 -0
- package/esm2022/lib/snackbar/snackbar.component.mjs +48 -0
- package/esm2022/lib/snackbar/snackbar.service.mjs +227 -0
- package/esm2022/lib/snackbar/snackbar.token.mjs +20 -0
- package/esm2022/lib/snackbar/snackbar.types.mjs +25 -0
- package/esm2022/lib/spinner/spinner.component.mjs +22 -0
- package/esm2022/lib/spinner/spinner.module.mjs +18 -0
- package/esm2022/lib/star/star-button/star-button.component.mjs +53 -0
- package/esm2022/lib/star/star-button/star-button.module.mjs +19 -0
- package/esm2022/lib/star/star-display/star-display.component.mjs +66 -0
- package/esm2022/lib/star/star-display/star-display.module.mjs +19 -0
- package/esm2022/lib/star/star-input/star-input.component.mjs +221 -0
- package/esm2022/lib/star/star-input/star-input.module.mjs +19 -0
- package/esm2022/lib/star/star.component.mjs +28 -0
- package/esm2022/lib/star/star.module.mjs +18 -0
- package/esm2022/lib/star/star.types.mjs +23 -0
- package/esm2022/lib/statebox/statebox.component.mjs +158 -0
- package/esm2022/lib/statebox/statebox.module.mjs +18 -0
- package/esm2022/lib/statebox/statebox.types.mjs +2 -0
- package/esm2022/lib/table/table-item-storage.mjs +560 -0
- package/esm2022/lib/table/table.component.mjs +468 -0
- package/esm2022/lib/table/table.directives.mjs +64 -0
- package/esm2022/lib/table/table.module.mjs +46 -0
- package/esm2022/lib/table/table.types.mjs +30 -0
- package/esm2022/lib/table/utils.mjs +18 -0
- package/esm2022/lib/table-from-csv/table-from-csv.component.mjs +64 -0
- package/esm2022/lib/table-from-csv/table-from-csv.module.mjs +19 -0
- package/esm2022/lib/table-pagination/table-pagination.component.mjs +172 -0
- package/esm2022/lib/table-pagination/table-pagination.module.mjs +21 -0
- package/esm2022/lib/table-pagination/table-pagination.types.mjs +7 -0
- package/esm2022/lib/types/alignment.types.mjs +10 -0
- package/esm2022/lib/types/colors.types.mjs +43 -0
- package/esm2022/lib/types/item-storage.types.mjs +6 -0
- package/esm2022/lib/types/theming.types.mjs +48 -0
- package/esm2022/lib/types/utility.types.mjs +5 -0
- package/esm2022/public-api.mjs +194 -0
- package/fesm2022/ardium-ui-ui.mjs +14316 -0
- package/fesm2022/ardium-ui-ui.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/_internal/boolean-component.d.ts +50 -0
- package/lib/_internal/clear-button/clear-button.component.d.ts +6 -0
- package/lib/_internal/clear-button/clear-button.module.d.ts +8 -0
- package/lib/_internal/disablable-component.d.ts +11 -0
- package/lib/_internal/focusable-component.d.ts +52 -0
- package/lib/_internal/item-storages/dropdown-item-storage.d.ts +87 -0
- package/lib/_internal/item-storages/simple-item-storage.d.ts +159 -0
- package/lib/_internal/item-storages/simplest-item-storage.d.ts +70 -0
- package/lib/_internal/models/pagination.model.d.ts +53 -0
- package/lib/_internal/ngmodel-component.d.ts +42 -0
- package/lib/_internal/queue.d.ts +21 -0
- package/lib/_internal/selectable-list-component.d.ts +71 -0
- package/lib/badge/badge.directive.d.ts +31 -0
- package/lib/badge/badge.module.d.ts +8 -0
- package/lib/badge/badge.types.d.ts +17 -0
- package/lib/buttons/_button-base.d.ts +18 -0
- package/lib/buttons/button/button.component.d.ts +15 -0
- package/lib/buttons/button/button.module.d.ts +8 -0
- package/lib/buttons/fab/fab.component.d.ts +12 -0
- package/lib/buttons/fab/fab.module.d.ts +8 -0
- package/lib/buttons/general-button.types.d.ts +57 -0
- package/lib/buttons/icon-button/icon-button.component.d.ts +13 -0
- package/lib/buttons/icon-button/icon-button.module.d.ts +8 -0
- package/lib/calendar/calendar.component.d.ts +155 -0
- package/lib/calendar/calendar.directives.d.ts +51 -0
- package/lib/calendar/calendar.helpers.d.ts +15 -0
- package/lib/calendar/calendar.module.d.ts +11 -0
- package/lib/calendar/calendar.types.d.ts +80 -0
- package/lib/card/card.children.d.ts +43 -0
- package/lib/card/card.component.d.ts +13 -0
- package/lib/card/card.module.d.ts +9 -0
- package/lib/card/card.types.d.ts +10 -0
- package/lib/checkbox/checkbox.component.d.ts +21 -0
- package/lib/checkbox/checkbox.module.d.ts +8 -0
- package/lib/checkbox/checkbox.types.d.ts +6 -0
- package/lib/checkbox-list/checkbox-list.component.d.ts +50 -0
- package/lib/checkbox-list/checkbox-list.module.d.ts +9 -0
- package/lib/checkbox-list/checkbox-list.types.d.ts +7 -0
- package/lib/chip/chip.component.d.ts +18 -0
- package/lib/chip/chip.module.d.ts +11 -0
- package/lib/chip/deletable-chip/deletable-chip.component.d.ts +24 -0
- package/lib/chip/selectable-chip/selectable-chip.component.d.ts +24 -0
- package/lib/color/color-display/color-display.component.d.ts +17 -0
- package/lib/color/color-display/color-display.module.d.ts +8 -0
- package/lib/color/color-display/color-display.types.d.ts +9 -0
- package/lib/color/color-picker/color-picker.component.d.ts +125 -0
- package/lib/color/color-picker/color-picker.directives.d.ts +27 -0
- package/lib/color/color-picker/color-picker.module.d.ts +13 -0
- package/lib/color/color-picker/color-picker.types.d.ts +21 -0
- package/lib/dialog/dialog.component.d.ts +44 -0
- package/lib/dialog/dialog.directives.d.ts +9 -0
- package/lib/dialog/dialog.module.d.ts +11 -0
- package/lib/dialog/dialog.types.d.ts +28 -0
- package/lib/divider/divider.component.d.ts +8 -0
- package/lib/divider/divider.module.d.ts +8 -0
- package/lib/dropdown-panel/dropdown-panel.component.d.ts +37 -0
- package/lib/dropdown-panel/dropdown-panel.module.d.ts +8 -0
- package/lib/dropdown-panel/dropdown-panel.types.d.ts +12 -0
- package/lib/file-inputs/file-drop-area/file-drop-area.component.d.ts +22 -0
- package/lib/file-inputs/file-drop-area/file-drop-area.directives.d.ts +21 -0
- package/lib/file-inputs/file-drop-area/file-drop-area.module.d.ts +12 -0
- package/lib/file-inputs/file-input/file-input.component.d.ts +41 -0
- package/lib/file-inputs/file-input/file-input.directives.d.ts +39 -0
- package/lib/file-inputs/file-input/file-input.module.d.ts +11 -0
- package/lib/file-inputs/file-input-base.d.ts +43 -0
- package/lib/file-inputs/file-input-types.d.ts +10 -0
- package/lib/form-field-frame/form-field-frame.component.d.ts +32 -0
- package/lib/form-field-frame/form-field-frame.directives.d.ts +14 -0
- package/lib/form-field-frame/form-field-frame.module.d.ts +9 -0
- package/lib/icon/icon.component.d.ts +32 -0
- package/lib/icon/icon.module.d.ts +9 -0
- package/lib/icon/icon.pipe.d.ts +7 -0
- package/lib/inputs/color-input/color-input.component.d.ts +147 -0
- package/lib/inputs/color-input/color-input.directives.d.ts +52 -0
- package/lib/inputs/color-input/color-input.module.d.ts +16 -0
- package/lib/inputs/color-input/color-input.types.d.ts +5 -0
- package/lib/inputs/digit-input/digit-input.component.d.ts +50 -0
- package/lib/inputs/digit-input/digit-input.model.d.ts +26 -0
- package/lib/inputs/digit-input/digit-input.module.d.ts +8 -0
- package/lib/inputs/digit-input/digit-input.types.d.ts +27 -0
- package/lib/inputs/digit-input/digit-input.utils.d.ts +17 -0
- package/lib/inputs/hex-input/hex-input.component.d.ts +60 -0
- package/lib/inputs/hex-input/hex-input.directives.d.ts +20 -0
- package/lib/inputs/hex-input/hex-input.module.d.ts +11 -0
- package/lib/inputs/hex-input.model.d.ts +27 -0
- package/lib/inputs/input/input.component.d.ts +79 -0
- package/lib/inputs/input/input.directives.d.ts +33 -0
- package/lib/inputs/input/input.module.d.ts +13 -0
- package/lib/inputs/input-transformers.d.ts +24 -0
- package/lib/inputs/input-types.d.ts +6 -0
- package/lib/inputs/input-utils.d.ts +58 -0
- package/lib/inputs/number-input/number-input.component.d.ts +70 -0
- package/lib/inputs/number-input/number-input.directives.d.ts +8 -0
- package/lib/inputs/number-input/number-input.module.d.ts +11 -0
- package/lib/inputs/password-input/password-input.component.d.ts +54 -0
- package/lib/inputs/password-input/password-input.directives.d.ts +27 -0
- package/lib/inputs/password-input/password-input.module.d.ts +11 -0
- package/lib/inputs/password-input/password-input.types.d.ts +3 -0
- package/lib/inputs/simple-input/simple-input.component.d.ts +58 -0
- package/lib/inputs/simple-input/simple-input.directives.d.ts +20 -0
- package/lib/inputs/simple-input/simple-input.module.d.ts +11 -0
- package/lib/kbd/kbd.component.d.ts +15 -0
- package/lib/kbd/kbd.module.d.ts +9 -0
- package/lib/kbd/kbd.pipe.d.ts +7 -0
- package/lib/kbd-shortcut/kbd-shortcut.component.d.ts +18 -0
- package/lib/kbd-shortcut/kbd-shortcut.module.d.ts +9 -0
- package/lib/modal/modal.component.d.ts +36 -0
- package/lib/modal/modal.module.d.ts +11 -0
- package/lib/option/option.component.d.ts +29 -0
- package/lib/option/option.module.d.ts +8 -0
- package/lib/progress-bar/progress-bar.component.d.ts +26 -0
- package/lib/progress-bar/progress-bar.directive.d.ts +9 -0
- package/lib/progress-bar/progress-bar.module.d.ts +9 -0
- package/lib/progress-bar/progress-bar.types.d.ts +26 -0
- package/lib/progress-circle/progress-circle.component.d.ts +28 -0
- package/lib/progress-circle/progress-circle.directive.d.ts +9 -0
- package/lib/progress-circle/progress-circle.module.d.ts +9 -0
- package/lib/progress-circle/progress-circle.types.d.ts +17 -0
- package/lib/radio/radio/radio.component.d.ts +23 -0
- package/lib/radio/radio-group.component.d.ts +43 -0
- package/lib/radio/radio.module.d.ts +9 -0
- package/lib/search-functions.d.ts +10 -0
- package/lib/segment/segment.component.d.ts +48 -0
- package/lib/segment/segment.directives.d.ts +9 -0
- package/lib/segment/segment.module.d.ts +9 -0
- package/lib/segment/segment.types.d.ts +16 -0
- package/lib/select/select.component.d.ts +255 -0
- package/lib/select/select.directive.d.ts +94 -0
- package/lib/select/select.module.d.ts +14 -0
- package/lib/select/select.types.d.ts +109 -0
- package/lib/slide-toggle/slide-toggle.component.d.ts +14 -0
- package/lib/slide-toggle/slide-toggle.module.d.ts +8 -0
- package/lib/slider/abstract-slider.d.ts +88 -0
- package/lib/slider/range-slider/range-slider.component.d.ts +29 -0
- package/lib/slider/range-slider/range-slider.module.d.ts +8 -0
- package/lib/slider/slider.component.d.ts +18 -0
- package/lib/slider/slider.directive.d.ts +9 -0
- package/lib/slider/slider.module.d.ts +10 -0
- package/lib/slider/slider.types.d.ts +28 -0
- package/lib/snackbar/index.d.ts +4 -0
- package/lib/snackbar/snackbar-ref.d.ts +37 -0
- package/lib/snackbar/snackbar.component.d.ts +16 -0
- package/lib/snackbar/snackbar.service.d.ts +31 -0
- package/lib/snackbar/snackbar.token.d.ts +5 -0
- package/lib/snackbar/snackbar.types.d.ts +48 -0
- package/lib/spinner/spinner.component.d.ts +8 -0
- package/lib/spinner/spinner.module.d.ts +8 -0
- package/lib/star/star-button/star-button.component.d.ts +16 -0
- package/lib/star/star-button/star-button.module.d.ts +9 -0
- package/lib/star/star-display/star-display.component.d.ts +16 -0
- package/lib/star/star-display/star-display.module.d.ts +9 -0
- package/lib/star/star-input/star-input.component.d.ts +51 -0
- package/lib/star/star-input/star-input.module.d.ts +9 -0
- package/lib/star/star.component.d.ts +10 -0
- package/lib/star/star.module.d.ts +8 -0
- package/lib/star/star.types.d.ts +30 -0
- package/lib/statebox/statebox.component.d.ts +31 -0
- package/lib/statebox/statebox.module.d.ts +8 -0
- package/lib/statebox/statebox.types.d.ts +22 -0
- package/lib/table/table-item-storage.d.ts +266 -0
- package/lib/table/table.component.d.ts +127 -0
- package/lib/table/table.directives.d.ts +35 -0
- package/lib/table/table.module.d.ts +12 -0
- package/lib/table/table.types.d.ts +83 -0
- package/lib/table/utils.d.ts +4 -0
- package/lib/table-from-csv/table-from-csv.component.d.ts +16 -0
- package/lib/table-from-csv/table-from-csv.module.d.ts +9 -0
- package/lib/table-pagination/table-pagination.component.d.ts +48 -0
- package/lib/table-pagination/table-pagination.module.d.ts +11 -0
- package/lib/table-pagination/table-pagination.types.d.ts +9 -0
- package/lib/types/alignment.types.d.ts +11 -0
- package/lib/types/colors.types.d.ts +71 -0
- package/lib/types/item-storage.types.d.ts +98 -0
- package/lib/types/theming.types.d.ts +61 -0
- package/lib/types/utility.types.d.ts +11 -0
- package/package.json +36 -0
- package/prebuilt-themes/default/badge.css +208 -0
- package/prebuilt-themes/default/badge.css.map +1 -0
- package/prebuilt-themes/default/buttons/button.css +290 -0
- package/prebuilt-themes/default/buttons/button.css.map +1 -0
- package/prebuilt-themes/default/buttons/fab.css +307 -0
- package/prebuilt-themes/default/buttons/fab.css.map +1 -0
- package/prebuilt-themes/default/buttons/icon-button.css +288 -0
- package/prebuilt-themes/default/buttons/icon-button.css.map +1 -0
- package/prebuilt-themes/default/calendar.css +293 -0
- package/prebuilt-themes/default/calendar.css.map +1 -0
- package/prebuilt-themes/default/card.css +122 -0
- package/prebuilt-themes/default/card.css.map +1 -0
- package/prebuilt-themes/default/checkbox-list.css +65 -0
- package/prebuilt-themes/default/checkbox-list.css.map +1 -0
- package/prebuilt-themes/default/checkbox.css +365 -0
- package/prebuilt-themes/default/checkbox.css.map +1 -0
- package/prebuilt-themes/default/chips.css +367 -0
- package/prebuilt-themes/default/chips.css.map +1 -0
- package/prebuilt-themes/default/color-display.css +29 -0
- package/prebuilt-themes/default/color-display.css.map +1 -0
- package/prebuilt-themes/default/color-picker.css +106 -0
- package/prebuilt-themes/default/color-picker.css.map +1 -0
- package/prebuilt-themes/default/core.css +84 -0
- package/prebuilt-themes/default/core.css.map +1 -0
- package/prebuilt-themes/default/dialog.css +18 -0
- package/prebuilt-themes/default/dialog.css.map +1 -0
- package/prebuilt-themes/default/divider.css +11 -0
- package/prebuilt-themes/default/divider.css.map +1 -0
- package/prebuilt-themes/default/dropdown-panel.css +37 -0
- package/prebuilt-themes/default/dropdown-panel.css.map +1 -0
- package/prebuilt-themes/default/file-drop-area.css +279 -0
- package/prebuilt-themes/default/file-drop-area.css.map +1 -0
- package/prebuilt-themes/default/form-field-frame.css +84 -0
- package/prebuilt-themes/default/form-field-frame.css.map +1 -0
- package/prebuilt-themes/default/inputs/color-input.css +139 -0
- package/prebuilt-themes/default/inputs/color-input.css.map +1 -0
- package/prebuilt-themes/default/inputs/digit-input.css +45 -0
- package/prebuilt-themes/default/inputs/digit-input.css.map +1 -0
- package/prebuilt-themes/default/inputs/file-input.css +169 -0
- package/prebuilt-themes/default/inputs/file-input.css.map +1 -0
- package/prebuilt-themes/default/inputs/hex-input.css +119 -0
- package/prebuilt-themes/default/inputs/hex-input.css.map +1 -0
- package/prebuilt-themes/default/inputs/input.css +139 -0
- package/prebuilt-themes/default/inputs/input.css.map +1 -0
- package/prebuilt-themes/default/inputs/number-input.css +150 -0
- package/prebuilt-themes/default/inputs/number-input.css.map +1 -0
- package/prebuilt-themes/default/inputs/password-input.css +73 -0
- package/prebuilt-themes/default/inputs/password-input.css.map +1 -0
- package/prebuilt-themes/default/inputs/search-bar.css +114 -0
- package/prebuilt-themes/default/inputs/search-bar.css.map +1 -0
- package/prebuilt-themes/default/inputs/simple-input.css +114 -0
- package/prebuilt-themes/default/inputs/simple-input.css.map +1 -0
- package/prebuilt-themes/default/kbd-shortcut.css +12 -0
- package/prebuilt-themes/default/kbd-shortcut.css.map +1 -0
- package/prebuilt-themes/default/kbd.css +17 -0
- package/prebuilt-themes/default/kbd.css.map +1 -0
- package/prebuilt-themes/default/modal.css +73 -0
- package/prebuilt-themes/default/modal.css.map +1 -0
- package/prebuilt-themes/default/progress-bar.css +267 -0
- package/prebuilt-themes/default/progress-bar.css.map +1 -0
- package/prebuilt-themes/default/progress-circle.css +167 -0
- package/prebuilt-themes/default/progress-circle.css.map +1 -0
- package/prebuilt-themes/default/radio.css +226 -0
- package/prebuilt-themes/default/radio.css.map +1 -0
- package/prebuilt-themes/default/segment.css +391 -0
- package/prebuilt-themes/default/segment.css.map +1 -0
- package/prebuilt-themes/default/select.css +275 -0
- package/prebuilt-themes/default/select.css.map +1 -0
- package/prebuilt-themes/default/slide-toggle.css +264 -0
- package/prebuilt-themes/default/slide-toggle.css.map +1 -0
- package/prebuilt-themes/default/slider.css +354 -0
- package/prebuilt-themes/default/slider.css.map +1 -0
- package/prebuilt-themes/default/snackbar.css +183 -0
- package/prebuilt-themes/default/snackbar.css.map +1 -0
- package/prebuilt-themes/default/spinner.css +151 -0
- package/prebuilt-themes/default/spinner.css.map +1 -0
- package/prebuilt-themes/default/stars.css +291 -0
- package/prebuilt-themes/default/stars.css.map +1 -0
- package/prebuilt-themes/default/statebox.css +235 -0
- package/prebuilt-themes/default/statebox.css.map +1 -0
- package/prebuilt-themes/default/table-pagination.css +48 -0
- package/prebuilt-themes/default/table-pagination.css.map +1 -0
- package/prebuilt-themes/default/table.css +418 -0
- package/prebuilt-themes/default/table.css.map +1 -0
- package/public-api.d.ts +145 -0
- package/themes/_variables.scss +121 -0
- package/themes/default/_clear-button.scss +73 -0
- package/themes/default/_coloring.scss +137 -0
- package/themes/default/_dropdown-arrow.scss +12 -0
- package/themes/default/_mixins.scss +70 -0
- package/themes/default/badge.scss +94 -0
- package/themes/default/buttons/_button-mixins.scss +144 -0
- package/themes/default/buttons/button.scss +62 -0
- package/themes/default/buttons/fab.scss +72 -0
- package/themes/default/buttons/icon-button.scss +59 -0
- package/themes/default/calendar.scss +182 -0
- package/themes/default/card.scss +126 -0
- package/themes/default/checkbox-list.scss +83 -0
- package/themes/default/checkbox.scss +109 -0
- package/themes/default/chips.scss +206 -0
- package/themes/default/color-display.scss +41 -0
- package/themes/default/color-picker.scss +111 -0
- package/themes/default/core.scss +96 -0
- package/themes/default/dialog.scss +16 -0
- package/themes/default/divider.scss +13 -0
- package/themes/default/dropdown-panel.scss +45 -0
- package/themes/default/file-drop-area.scss +162 -0
- package/themes/default/form-field-frame.scss +78 -0
- package/themes/default/inputs/_shared.scss +46 -0
- package/themes/default/inputs/color-input.scss +46 -0
- package/themes/default/inputs/digit-input.scss +56 -0
- package/themes/default/inputs/file-input.scss +78 -0
- package/themes/default/inputs/hex-input.scss +27 -0
- package/themes/default/inputs/input.scss +52 -0
- package/themes/default/inputs/number-input.scss +121 -0
- package/themes/default/inputs/password-input.scss +43 -0
- package/themes/default/inputs/search-bar.scss +19 -0
- package/themes/default/inputs/simple-input.scss +19 -0
- package/themes/default/kbd-shortcut.scss +13 -0
- package/themes/default/kbd.scss +20 -0
- package/themes/default/modal.scss +93 -0
- package/themes/default/progress-bar.scss +166 -0
- package/themes/default/progress-circle.scss +56 -0
- package/themes/default/radio.scss +112 -0
- package/themes/default/segment.scss +339 -0
- package/themes/default/select.scss +253 -0
- package/themes/default/slide-toggle.scss +151 -0
- package/themes/default/slider.scss +224 -0
- package/themes/default/snackbar.scss +60 -0
- package/themes/default/spinner.scss +21 -0
- package/themes/default/stars.scss +122 -0
- package/themes/default/statebox.scss +109 -0
- package/themes/default/table-pagination.scss +56 -0
- package/themes/default/table.scss +403 -0
|
@@ -0,0 +1,436 @@
|
|
|
1
|
+
import resolvePath from 'resolve-object-path';
|
|
2
|
+
import { any, evaluate, isArray, isDefined, isObject, isPrimitive, isPromise } from 'simple-bool';
|
|
3
|
+
export class ItemStorage {
|
|
4
|
+
constructor(_ardParentComp) {
|
|
5
|
+
this._ardParentComp = _ardParentComp;
|
|
6
|
+
this._groups = this._createEmptyGroupMap();
|
|
7
|
+
this._items = [];
|
|
8
|
+
this._filteredItems = [];
|
|
9
|
+
this._highlightedItems = [];
|
|
10
|
+
this._highlightedGroups = [];
|
|
11
|
+
this._selectedItems = [];
|
|
12
|
+
this._wasValueWriteDeferred = false;
|
|
13
|
+
}
|
|
14
|
+
get groups() {
|
|
15
|
+
return Array.from(this._groups.entries())
|
|
16
|
+
.map(([_, group]) => group)
|
|
17
|
+
.filter(group => group.children.length);
|
|
18
|
+
}
|
|
19
|
+
get items() {
|
|
20
|
+
return this._items;
|
|
21
|
+
}
|
|
22
|
+
get filteredItems() {
|
|
23
|
+
return this._filteredItems;
|
|
24
|
+
}
|
|
25
|
+
get selectedItems() {
|
|
26
|
+
if (this._ardParentComp.sortMultipleValues) {
|
|
27
|
+
return this._selectedItems.sort((a, b) => {
|
|
28
|
+
return a.index - b.index;
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
return this._selectedItems;
|
|
32
|
+
}
|
|
33
|
+
get highlightedItems() {
|
|
34
|
+
return this._highlightedItems;
|
|
35
|
+
}
|
|
36
|
+
get lastSelectedItem() {
|
|
37
|
+
return this._filteredItems.last(1, item => !item.disabled);
|
|
38
|
+
}
|
|
39
|
+
get value() {
|
|
40
|
+
return this._itemsToValue(this.selectedItems);
|
|
41
|
+
}
|
|
42
|
+
_itemsToValue(items) {
|
|
43
|
+
return items.map(item => item.value);
|
|
44
|
+
}
|
|
45
|
+
get isNoItemsToSelect() {
|
|
46
|
+
return this._items.length == this._selectedItems.length;
|
|
47
|
+
}
|
|
48
|
+
get isNoItemsFound() {
|
|
49
|
+
return this._filteredItems.length == 0;
|
|
50
|
+
}
|
|
51
|
+
get isAnyItemSelected() {
|
|
52
|
+
return this._selectedItems.length > 0;
|
|
53
|
+
}
|
|
54
|
+
get isAnyItemHighlighted() {
|
|
55
|
+
return this._highlightedItems.length > 0;
|
|
56
|
+
}
|
|
57
|
+
get isItemLimitReached() {
|
|
58
|
+
return (this._ardParentComp.multiselectable &&
|
|
59
|
+
isDefined(this._ardParentComp.maxSelectedItems) &&
|
|
60
|
+
this._ardParentComp.maxSelectedItems <= this.selectedItems.length);
|
|
61
|
+
}
|
|
62
|
+
setItems(items) {
|
|
63
|
+
let areItemsPrimitive = false;
|
|
64
|
+
if (this._ardParentComp.groupItems && this._ardParentComp.itemsAlreadyGrouped) {
|
|
65
|
+
let newItems = [];
|
|
66
|
+
for (const group of items) {
|
|
67
|
+
let children;
|
|
68
|
+
[children, areItemsPrimitive] = this._ungroupAlreadyGroupedItems(group);
|
|
69
|
+
newItems.push(...children);
|
|
70
|
+
}
|
|
71
|
+
items = newItems;
|
|
72
|
+
}
|
|
73
|
+
if (any(items, isPrimitive)) {
|
|
74
|
+
items = items.map(this._primitiveItemsMapFn);
|
|
75
|
+
areItemsPrimitive = true;
|
|
76
|
+
}
|
|
77
|
+
this._items = items.map((item, index) => {
|
|
78
|
+
return this._setItemsMapFn(item, index, areItemsPrimitive);
|
|
79
|
+
});
|
|
80
|
+
//add all items to filter array
|
|
81
|
+
this._filteredItems = this._items;
|
|
82
|
+
//add items to groups
|
|
83
|
+
this._populateGroups();
|
|
84
|
+
//write value if it was
|
|
85
|
+
if (this._valueToWriteAfterItemsLoad !== undefined) {
|
|
86
|
+
this.handleWriteValue(this._valueToWriteAfterItemsLoad);
|
|
87
|
+
}
|
|
88
|
+
return areItemsPrimitive;
|
|
89
|
+
}
|
|
90
|
+
_addSingleItem(item) {
|
|
91
|
+
let isItemPrimitive = isPrimitive(item);
|
|
92
|
+
//map a primitive item to a usable object
|
|
93
|
+
if (isItemPrimitive) {
|
|
94
|
+
item = this._primitiveItemsMapFn(item);
|
|
95
|
+
}
|
|
96
|
+
//map the item to create data bindings
|
|
97
|
+
const ardOption = this._setItemsMapFn(item, this._items.last()?.index + 1, isItemPrimitive);
|
|
98
|
+
//push the item into all items
|
|
99
|
+
this._items.push(ardOption);
|
|
100
|
+
//add item to groups
|
|
101
|
+
this._populateGroups();
|
|
102
|
+
return ardOption;
|
|
103
|
+
}
|
|
104
|
+
_primitiveItemsMapFn(item) {
|
|
105
|
+
return { value: item };
|
|
106
|
+
}
|
|
107
|
+
_ungroupAlreadyGroupedItems(group) {
|
|
108
|
+
//determine groupBy (groupLabel) path
|
|
109
|
+
let groupBy = this._ardParentComp.groupLabelFrom ?? this._ardParentComp.DEFAULTS.groupLabelFrom;
|
|
110
|
+
//get group label from object
|
|
111
|
+
let groupName;
|
|
112
|
+
if (typeof groupBy == 'string') {
|
|
113
|
+
groupName = resolvePath(group, groupBy);
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
groupName = groupBy(group);
|
|
117
|
+
}
|
|
118
|
+
//determine group children path
|
|
119
|
+
let childrenPath = this._ardParentComp.childrenFrom ?? this._ardParentComp.DEFAULTS.childrenFrom;
|
|
120
|
+
//get group children
|
|
121
|
+
let groupItems = resolvePath(group, childrenPath);
|
|
122
|
+
//return empty array if groupItems is not an array or is empty
|
|
123
|
+
if (!isArray(groupItems) || groupItems.length == 0)
|
|
124
|
+
return [[], false];
|
|
125
|
+
//check if the array is an array of primitives, and map it if needed
|
|
126
|
+
let areItemsPrimitive = false;
|
|
127
|
+
if (any(groupItems, isPrimitive)) {
|
|
128
|
+
groupItems = groupItems.map(this._primitiveItemsMapFn);
|
|
129
|
+
}
|
|
130
|
+
//add group name to every child
|
|
131
|
+
groupItems = groupItems.map((item) => {
|
|
132
|
+
item.$ardgroup = groupName;
|
|
133
|
+
return item;
|
|
134
|
+
});
|
|
135
|
+
return [groupItems, areItemsPrimitive];
|
|
136
|
+
}
|
|
137
|
+
_setItemsMapFn(rawItemData, index, areItemsPrimitive) {
|
|
138
|
+
if (areItemsPrimitive) {
|
|
139
|
+
return {
|
|
140
|
+
itemData: rawItemData,
|
|
141
|
+
index,
|
|
142
|
+
value: rawItemData.value,
|
|
143
|
+
label: rawItemData.value?.toString?.() ?? String(rawItemData.value),
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
//get value
|
|
147
|
+
const valuePath = this._ardParentComp.valueFrom ?? this._ardParentComp.labelFrom ?? this._ardParentComp.DEFAULTS.valueFrom;
|
|
148
|
+
const value = resolvePath(rawItemData, valuePath);
|
|
149
|
+
//get label
|
|
150
|
+
const labelPath = this._ardParentComp.labelFrom ?? this._ardParentComp.valueFrom ?? this._ardParentComp.DEFAULTS.labelFrom;
|
|
151
|
+
const label = resolvePath(rawItemData, labelPath) ?? value;
|
|
152
|
+
//get disabled
|
|
153
|
+
const disabledPath = this._ardParentComp.disabledFrom ?? this._ardParentComp.DEFAULTS.disabledFrom;
|
|
154
|
+
let disabled = evaluate(resolvePath(rawItemData, disabledPath));
|
|
155
|
+
if (this._ardParentComp.invertDisabled) {
|
|
156
|
+
disabled = !disabled;
|
|
157
|
+
}
|
|
158
|
+
//get groups
|
|
159
|
+
let group = undefined;
|
|
160
|
+
if (this._ardParentComp.groupItems) {
|
|
161
|
+
if (rawItemData.$ardgroup) {
|
|
162
|
+
group = rawItemData.$ardgroup;
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
let groupBy = this._ardParentComp.groupLabelFrom ?? this._ardParentComp.DEFAULTS.groupLabelFrom;
|
|
166
|
+
if (typeof groupBy == 'string') {
|
|
167
|
+
group = resolvePath(rawItemData, groupBy);
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
group = groupBy(rawItemData);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
const itemData = areItemsPrimitive ? rawItemData.value : rawItemData;
|
|
175
|
+
//return
|
|
176
|
+
return {
|
|
177
|
+
itemData,
|
|
178
|
+
index,
|
|
179
|
+
value,
|
|
180
|
+
label: label?.toString?.() ?? String(label),
|
|
181
|
+
disabled,
|
|
182
|
+
group,
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
_populateGroups() {
|
|
186
|
+
this._groups = this._createEmptyGroupMap();
|
|
187
|
+
for (const item of this._filteredItems) {
|
|
188
|
+
if (this._ardParentComp.hideSelected && item.selected)
|
|
189
|
+
continue;
|
|
190
|
+
this._addToGroup(item);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
_addToGroup(item) {
|
|
194
|
+
const groupKey = item.group;
|
|
195
|
+
let targetGroup = this._groups.get(groupKey);
|
|
196
|
+
//create new group if needed
|
|
197
|
+
if (!targetGroup) {
|
|
198
|
+
this._groups.set(groupKey, {
|
|
199
|
+
label: String(groupKey ?? ''),
|
|
200
|
+
children: [item],
|
|
201
|
+
});
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
targetGroup.children.push(item);
|
|
205
|
+
}
|
|
206
|
+
_createEmptyGroupMap() {
|
|
207
|
+
return new Map([[undefined, { label: '', children: [] }]]);
|
|
208
|
+
}
|
|
209
|
+
_isWriteValueValid(ngModel) {
|
|
210
|
+
return ngModel.every(item => {
|
|
211
|
+
if (!isDefined(this._ardParentComp.compareWith) && isObject(item) && this._ardParentComp.valueFrom) {
|
|
212
|
+
console.warn(`Setting object(${JSON.stringify(item)}) as your model with [valueFrom] is not allowed unless [compareWith] is used.`);
|
|
213
|
+
return false;
|
|
214
|
+
}
|
|
215
|
+
return true;
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
handleWriteValue(ngModel) {
|
|
219
|
+
//defer writing the value if no options are yet loaded
|
|
220
|
+
if (!this._wasValueWriteDeferred && this._items.length == 0) {
|
|
221
|
+
this._valueToWriteAfterItemsLoad = ngModel;
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
this.clearAllSelected();
|
|
225
|
+
if (!this._isWriteValueValid(ngModel)) {
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
const selectItemByValue = (value) => {
|
|
229
|
+
let item = this.findItemByValue(value);
|
|
230
|
+
if (item) {
|
|
231
|
+
this.selectItem(item);
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
console.warn(`Couldn't find an item with value ${value?.toString?.() || String(value)}.`);
|
|
235
|
+
};
|
|
236
|
+
for (const modelValue of ngModel) {
|
|
237
|
+
selectItemByValue(modelValue);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
findItemByValue(valueToFind) {
|
|
241
|
+
let findBy;
|
|
242
|
+
if (this._ardParentComp.compareWith) {
|
|
243
|
+
findBy = item => this._ardParentComp.compareWith(valueToFind, item.value);
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
findBy = item => item.value === valueToFind;
|
|
247
|
+
}
|
|
248
|
+
return this._items.find(item => findBy(item));
|
|
249
|
+
}
|
|
250
|
+
async addCustomOption(value, fn) {
|
|
251
|
+
const fnResult = fn(value);
|
|
252
|
+
let optionValue = fnResult;
|
|
253
|
+
if (isPromise(optionValue))
|
|
254
|
+
optionValue = await optionValue;
|
|
255
|
+
const newOptionObj = this._addSingleItem(optionValue);
|
|
256
|
+
return newOptionObj;
|
|
257
|
+
}
|
|
258
|
+
clearAllSelected(repopulateGroups = false) {
|
|
259
|
+
for (const item of this._selectedItems) {
|
|
260
|
+
item.selected = false;
|
|
261
|
+
}
|
|
262
|
+
let removedItemValues = this._itemsToValue(this._selectedItems);
|
|
263
|
+
this._selectedItems = [];
|
|
264
|
+
if (repopulateGroups && this._ardParentComp.hideSelected)
|
|
265
|
+
this._populateGroups();
|
|
266
|
+
return removedItemValues;
|
|
267
|
+
}
|
|
268
|
+
clearLastSelected() {
|
|
269
|
+
let item = this._selectedItems.last();
|
|
270
|
+
if (!item)
|
|
271
|
+
return item;
|
|
272
|
+
this.unselectItem(item);
|
|
273
|
+
return item;
|
|
274
|
+
}
|
|
275
|
+
selectItem(...items) {
|
|
276
|
+
if (this.isItemLimitReached) {
|
|
277
|
+
return [[], [], this._itemsToValue(items)];
|
|
278
|
+
}
|
|
279
|
+
let unselected = [];
|
|
280
|
+
if (!this._ardParentComp.multiselectable) {
|
|
281
|
+
unselected = this.clearAllSelected(false);
|
|
282
|
+
}
|
|
283
|
+
let itemsSelectedCount = 0;
|
|
284
|
+
const itemsSelected = [];
|
|
285
|
+
for (const item of items) {
|
|
286
|
+
itemsSelectedCount++;
|
|
287
|
+
if (item.selected)
|
|
288
|
+
continue;
|
|
289
|
+
if (this.isItemLimitReached) {
|
|
290
|
+
break;
|
|
291
|
+
}
|
|
292
|
+
item.selected = true;
|
|
293
|
+
this._selectedItems.push(item);
|
|
294
|
+
itemsSelected.push(item);
|
|
295
|
+
}
|
|
296
|
+
if (this._ardParentComp.hideSelected) {
|
|
297
|
+
this._populateGroups();
|
|
298
|
+
}
|
|
299
|
+
const itemsFailedToSelect = items.slice(itemsSelectedCount - 1);
|
|
300
|
+
return [this._itemsToValue(itemsSelected), unselected, this._itemsToValue(itemsFailedToSelect)];
|
|
301
|
+
}
|
|
302
|
+
unselectItem(...items) {
|
|
303
|
+
for (const item of items) {
|
|
304
|
+
if (!item.selected)
|
|
305
|
+
continue;
|
|
306
|
+
item.selected = false;
|
|
307
|
+
}
|
|
308
|
+
this._selectedItems = this._selectedItems.filter(v => v.selected);
|
|
309
|
+
if (this._ardParentComp.hideSelected)
|
|
310
|
+
this._populateGroups();
|
|
311
|
+
return this._itemsToValue(items);
|
|
312
|
+
}
|
|
313
|
+
clearAllHighlights() {
|
|
314
|
+
for (const item of this._highlightedItems) {
|
|
315
|
+
item.highlighted = false;
|
|
316
|
+
}
|
|
317
|
+
for (const group of this._highlightedGroups) {
|
|
318
|
+
group.highlighted = false;
|
|
319
|
+
}
|
|
320
|
+
this._highlightedItems = [];
|
|
321
|
+
this._highlightedGroups = [];
|
|
322
|
+
}
|
|
323
|
+
highlightGroup(group) {
|
|
324
|
+
this.clearAllHighlights();
|
|
325
|
+
group.highlighted = true;
|
|
326
|
+
this.highlightItem(...group.children);
|
|
327
|
+
return group.children.first();
|
|
328
|
+
}
|
|
329
|
+
highlightSingleItem(item) {
|
|
330
|
+
if (!item || item.disabled)
|
|
331
|
+
return null;
|
|
332
|
+
this.clearAllHighlights();
|
|
333
|
+
return this.highlightItem(item);
|
|
334
|
+
}
|
|
335
|
+
highlightItem(...items) {
|
|
336
|
+
for (const item of items) {
|
|
337
|
+
item.highlighted = true;
|
|
338
|
+
}
|
|
339
|
+
this._highlightedItems.push(...items);
|
|
340
|
+
return items.last();
|
|
341
|
+
}
|
|
342
|
+
unhighlightItem(...items) {
|
|
343
|
+
for (const item of items) {
|
|
344
|
+
if (!item || !item.highlighted)
|
|
345
|
+
return;
|
|
346
|
+
item.highlighted = false;
|
|
347
|
+
}
|
|
348
|
+
this._highlightedItems = this._highlightedItems.filter(v => v.highlighted);
|
|
349
|
+
}
|
|
350
|
+
highlightFirstItem() {
|
|
351
|
+
this.clearAllHighlights();
|
|
352
|
+
let itemsToHighlight = this._getHiglightableItems();
|
|
353
|
+
return this.highlightSingleItem(itemsToHighlight.first());
|
|
354
|
+
}
|
|
355
|
+
highlightLastItem() {
|
|
356
|
+
this.clearAllHighlights();
|
|
357
|
+
let itemsToHighlight = this._getHiglightableItems();
|
|
358
|
+
return this.highlightSingleItem(itemsToHighlight.last());
|
|
359
|
+
}
|
|
360
|
+
_getHiglightableItems() {
|
|
361
|
+
let itemsToHighlight = this._filteredItems.filter(item => !item.disabled);
|
|
362
|
+
if (this._ardParentComp.hideSelected) {
|
|
363
|
+
itemsToHighlight = itemsToHighlight.filter(item => !item.selected);
|
|
364
|
+
}
|
|
365
|
+
return itemsToHighlight;
|
|
366
|
+
}
|
|
367
|
+
highlightAllItems() {
|
|
368
|
+
let itemsToHighlight = this._filteredItems.filter(item => !item.disabled);
|
|
369
|
+
if (this._ardParentComp.hideSelected) {
|
|
370
|
+
itemsToHighlight = itemsToHighlight.filter(item => !item.selected);
|
|
371
|
+
}
|
|
372
|
+
this.highlightItem(...itemsToHighlight);
|
|
373
|
+
}
|
|
374
|
+
_clearRecentlyHighlighted() {
|
|
375
|
+
if (this._recentlyHighlightedItem) {
|
|
376
|
+
this._recentlyHighlightedItem.highlighted_recently = false;
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
setRecentlyHighlighted(item) {
|
|
380
|
+
this._clearRecentlyHighlighted();
|
|
381
|
+
this._recentlyHighlightedItem = item;
|
|
382
|
+
this._recentlyHighlightedItem.highlighted_recently = true;
|
|
383
|
+
}
|
|
384
|
+
highlightNextItem(offset, hasShift) {
|
|
385
|
+
if (!this.isAnyItemHighlighted) {
|
|
386
|
+
return this.highlightFirstItem();
|
|
387
|
+
}
|
|
388
|
+
const currentItem = this.highlightedItems.last();
|
|
389
|
+
const highlightableItems = this._getHiglightableItems();
|
|
390
|
+
const currentIndexInFiltered = highlightableItems.findIndex(item => item.index == currentItem.index);
|
|
391
|
+
let nextItemIndex = currentIndexInFiltered + offset;
|
|
392
|
+
if (nextItemIndex >= highlightableItems.length) {
|
|
393
|
+
nextItemIndex -= highlightableItems.length;
|
|
394
|
+
}
|
|
395
|
+
if (nextItemIndex < 0) {
|
|
396
|
+
nextItemIndex += highlightableItems.length;
|
|
397
|
+
}
|
|
398
|
+
const itemToHighlight = highlightableItems[nextItemIndex];
|
|
399
|
+
if (hasShift && this._ardParentComp.multiselectable) {
|
|
400
|
+
if (itemToHighlight.highlighted) {
|
|
401
|
+
this.unhighlightItem(currentItem);
|
|
402
|
+
}
|
|
403
|
+
return this.highlightItem(itemToHighlight);
|
|
404
|
+
}
|
|
405
|
+
return this.highlightSingleItem(itemToHighlight);
|
|
406
|
+
}
|
|
407
|
+
filter(filterTerm) {
|
|
408
|
+
if (!filterTerm) {
|
|
409
|
+
this.resetFiltered();
|
|
410
|
+
return this._itemsToValue(this._filteredItems);
|
|
411
|
+
}
|
|
412
|
+
if (!this._ardParentComp.searchCaseSensitive) {
|
|
413
|
+
filterTerm = filterTerm.toLocaleLowerCase();
|
|
414
|
+
}
|
|
415
|
+
const searchFn = this._ardParentComp.searchFn;
|
|
416
|
+
this._filteredItems = this._items.filter(item => searchFn(filterTerm, item));
|
|
417
|
+
this._populateGroups();
|
|
418
|
+
if (!this.isNoItemsFound)
|
|
419
|
+
this.highlightFirstItem();
|
|
420
|
+
else
|
|
421
|
+
this.clearAllHighlights();
|
|
422
|
+
return this._itemsToValue(this._filteredItems);
|
|
423
|
+
}
|
|
424
|
+
resetFiltered() {
|
|
425
|
+
if (this._filteredItems.length == this._items.length)
|
|
426
|
+
return;
|
|
427
|
+
if (this._ardParentComp.hideSelected && this.isAnyItemSelected) {
|
|
428
|
+
this._filteredItems = this._items.filter(item => !item.selected);
|
|
429
|
+
}
|
|
430
|
+
else {
|
|
431
|
+
this._filteredItems = this._items;
|
|
432
|
+
}
|
|
433
|
+
this._populateGroups();
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24taXRlbS1zdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9faW50ZXJuYWwvaXRlbS1zdG9yYWdlcy9kcm9wZG93bi1pdGVtLXN0b3JhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxXQUFXLE1BQU0scUJBQXFCLENBQUM7QUFDOUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQWlDbEcsTUFBTSxPQUFPLFdBQVc7SUFTcEIsWUFBb0IsY0FBK0I7UUFBL0IsbUJBQWMsR0FBZCxjQUFjLENBQWlCO1FBUjNDLFlBQU8sR0FBb0IsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDdkQsV0FBTSxHQUFnQixFQUFFLENBQUM7UUFDekIsbUJBQWMsR0FBZ0IsRUFBRSxDQUFDO1FBQ2pDLHNCQUFpQixHQUFnQixFQUFFLENBQUM7UUFDcEMsdUJBQWtCLEdBQXFCLEVBQUUsQ0FBQztRQUUxQyxtQkFBYyxHQUFnQixFQUFFLENBQUM7UUFxT2pDLDJCQUFzQixHQUFZLEtBQUssQ0FBQztJQW5PTSxDQUFDO0lBRXZELElBQUksTUFBTTtRQUNOLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQ3BDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUM7YUFDMUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBQ0QsSUFBSSxLQUFLO1FBQ0wsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENB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QixFQUFFO1lBQzFDLFVBQVUsR0FBRyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztTQUMvQztRQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO1FBQzlDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFN0UsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXZCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYztZQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDOztZQUMvQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUUvQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFDRCxhQUFhO1FBQ1QsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBRTdELElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQzVELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNwRTthQUFNO1lBQ0gsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQ3JDO1FBQ0QsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzNCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFyZE9wdGlvbkdyb3VwLCBBcmRPcHRpb24sIEdyb3VwQnlGbiwgQXJkSXRlbUdyb3VwTWFwLCBTZWFyY2hGbiwgQ29tcGFyZVdpdGhGbiB9IGZyb20gJy4uLy4uL3R5cGVzL2l0ZW0tc3RvcmFnZS50eXBlcyc7XG5pbXBvcnQgcmVzb2x2ZVBhdGggZnJvbSAncmVzb2x2ZS1vYmplY3QtcGF0aCc7XG5pbXBvcnQgeyBhbnksIGV2YWx1YXRlLCBpc0FycmF5LCBpc0RlZmluZWQsIGlzT2JqZWN0LCBpc1ByaW1pdGl2ZSwgaXNQcm9taXNlIH0gZnJvbSAnc2ltcGxlLWJvb2wnO1xuaW1wb3J0IHsgQWRkQ3VzdG9tRm4gfSBmcm9tICcuLi8uLi9zZWxlY3Qvc2VsZWN0LnR5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBJdGVtU3RvcmFnZUhvc3REZWZhdWx0cyB7XG4gICAgdmFsdWVGcm9tOiBzdHJpbmc7XG4gICAgbGFiZWxGcm9tOiBzdHJpbmc7XG4gICAgZGlzYWJsZWRGcm9tOiBzdHJpbmc7XG4gICAgZ3JvdXBMYWJlbEZyb206IHN0cmluZztcbiAgICBncm91cERpc2FibGVkRnJvbTogc3RyaW5nO1xuICAgIGNoaWxkcmVuRnJvbTogc3RyaW5nO1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSXRlbVN0b3JhZ2VIb3N0IHtcbiAgICB2YWx1ZUZyb20/OiBzdHJpbmc7XG4gICAgbGFiZWxGcm9tPzogc3RyaW5nO1xuICAgIGRpc2FibGVkRnJvbT86IHN0cmluZztcbiAgICBpbnZlcnREaXNhYmxlZD86IGJvb2xlYW47XG4gICAgZ3JvdXBMYWJlbEZyb20/OiBzdHJpbmcgfCBHcm91cEJ5Rm47XG4gICAgZ3JvdXBEaXNhYmxlZEZyb20/OiBzdHJpbmc7XG4gICAgY2hpbGRyZW5Gcm9tPzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IERFRkFVTFRTOiBJdGVtU3RvcmFnZUhvc3REZWZhdWx0cztcbiAgICBncm91cEl0ZW1zPzogYm9vbGVhbjtcbiAgICBpdGVtc0FscmVhZHlHcm91cGVkPzogYm9vbGVhbjtcbiAgICBoaWRlU2VsZWN0ZWQ6IGJvb2xlYW47XG4gICAgc2VhcmNoQ2FzZVNlbnNpdGl2ZTogYm9vbGVhbjtcbiAgICBzZWFyY2hGbjogU2VhcmNoRm47XG4gICAgY29tcGFyZVdpdGg/OiBDb21wYXJlV2l0aEZuO1xuICAgIG11bHRpc2VsZWN0YWJsZTogYm9vbGVhbjtcbiAgICBzb3J0TXVsdGlwbGVWYWx1ZXM6IGJvb2xlYW47XG4gICAgbWF4U2VsZWN0ZWRJdGVtcz86IG51bWJlcjtcbiAgICBhZGRDdXN0b206IGJvb2xlYW4gfCBBZGRDdXN0b21Gbjxhbnk+IHwgQWRkQ3VzdG9tRm48UHJvbWlzZTxhbnk+Pjtcbn1cblxuZXhwb3J0IGNsYXNzIEl0ZW1TdG9yYWdlIHtcbiAgICBwcml2YXRlIF9ncm91cHM6IEFyZEl0ZW1Hcm91cE1hcCA9IHRoaXMuX2NyZWF0ZUVtcHR5R3JvdXBNYXAoKTtcbiAgICBwcml2YXRlIF9pdGVtczogQXJkT3B0aW9uW10gPSBbXTtcbiAgICBwcml2YXRlIF9maWx0ZXJlZEl0ZW1zOiBBcmRPcHRpb25bXSA9IFtdO1xuICAgIHByaXZhdGUgX2hpZ2hsaWdodGVkSXRlbXM6IEFyZE9wdGlvbltdID0gW107XG4gICAgcHJpdmF0ZSBfaGlnaGxpZ2h0ZWRHcm91cHM6IEFyZE9wdGlvbkdyb3VwW10gPSBbXTtcbiAgICBwcml2YXRlIF9yZWNlbnRseUhpZ2hsaWdodGVkSXRlbT86IEFyZE9wdGlvbjtcbiAgICBwcml2YXRlIF9zZWxlY3RlZEl0ZW1zOiBBcmRPcHRpb25bXSA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfYXJkUGFyZW50Q29tcDogSXRlbVN0b3JhZ2VIb3N0KSB7fVxuXG4gICAgZ2V0IGdyb3VwcygpOiBBcmRPcHRpb25Hcm91cFtdIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5fZ3JvdXBzLmVudHJpZXMoKSlcbiAgICAgICAgICAgIC5tYXAoKFtfLCBncm91cF0pID0+IGdyb3VwKVxuICAgICAgICAgICAgLmZpbHRlcihncm91cCA9PiBncm91cC5jaGlsZHJlbi5sZW5ndGgpO1xuICAgIH1cbiAgICBnZXQgaXRlbXMoKTogQXJkT3B0aW9uW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXRlbXM7XG4gICAgfVxuICAgIGdldCBmaWx0ZXJlZEl0ZW1zKCk6IEFyZE9wdGlvbltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcmVkSXRlbXM7XG4gICAgfVxuICAgIGdldCBzZWxlY3RlZEl0ZW1zKCk6IEFyZE9wdGlvbltdIHtcbiAgICAgICAgaWYgKHRoaXMuX2FyZFBhcmVudENvbXAuc29ydE11bHRpcGxlVmFsdWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJdGVtcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkSXRlbXM7XG4gICAgfVxuICAgIGdldCBoaWdobGlnaHRlZEl0ZW1zKCk6IEFyZE9wdGlvbltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hpZ2hsaWdodGVkSXRlbXM7XG4gICAgfVxuICAgIGdldCBsYXN0U2VsZWN0ZWRJdGVtKCk6IEFyZE9wdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJlZEl0ZW1zLmxhc3QoMSwgaXRlbSA9PiAhaXRlbS5kaXNhYmxlZCk7XG4gICAgfVxuICAgIGdldCB2YWx1ZSgpOiBhbnlbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtc1RvVmFsdWUodGhpcy5zZWxlY3RlZEl0ZW1zKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaXRlbXNUb1ZhbHVlKGl0ZW1zOiBBcmRPcHRpb25bXSk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zLm1hcChpdGVtID0+IGl0ZW0udmFsdWUpO1xuICAgIH1cblxuICAgIGdldCBpc05vSXRlbXNUb1NlbGVjdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zLmxlbmd0aCA9PSB0aGlzLl9zZWxlY3RlZEl0ZW1zLmxlbmd0aDtcbiAgICB9XG4gICAgZ2V0IGlzTm9JdGVtc0ZvdW5kKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVyZWRJdGVtcy5sZW5ndGggPT0gMDtcbiAgICB9XG4gICAgZ2V0IGlzQW55SXRlbVNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwO1xuICAgIH1cbiAgICBnZXQgaXNBbnlJdGVtSGlnaGxpZ2h0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oaWdobGlnaHRlZEl0ZW1zLmxlbmd0aCA+IDA7XG4gICAgfVxuICAgIGdldCBpc0l0ZW1MaW1pdFJlYWNoZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLl9hcmRQYXJlbnRDb21wLm11bHRpc2VsZWN0YWJsZSAmJlxuICAgICAgICAgICAgaXNEZWZpbmVkKHRoaXMuX2FyZFBhcmVudENvbXAubWF4U2VsZWN0ZWRJdGVtcykgJiZcbiAgICAgICAgICAgIHRoaXMuX2FyZFBhcmVudENvbXAubWF4U2VsZWN0ZWRJdGVtcyEgPD0gdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHNldEl0ZW1zKGl0ZW1zOiBhbnlbXSk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgYXJlSXRlbXNQcmltaXRpdmUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuX2FyZFBhcmVudENvbXAuZ3JvdXBJdGVtcyAmJiB0aGlzLl9hcmRQYXJlbnRDb21wLml0ZW1zQWxyZWFkeUdyb3VwZWQpIHtcbiAgICAgICAgICAgIGxldCBuZXdJdGVtcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBncm91cCBvZiBpdGVtcykge1xuICAgICAgICAgICAgICAgIGxldCBjaGlsZHJlbjogYW55W107XG4gICAgICAgICAgICAgICAgW2NoaWxkcmVuLCBhcmVJdGVtc1ByaW1pdGl2ZV0gPSB0aGlzLl91bmdyb3VwQWxyZWFkeUdyb3VwZWRJdGVtcyhncm91cCk7XG4gICAgICAgICAgICAgICAgbmV3SXRlbXMucHVzaCguLi5jaGlsZHJlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVtcyA9IG5ld0l0ZW1zO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbnkoaXRlbXMsIGlzUHJpbWl0aXZlKSkge1xuICAgICAgICAgICAgaXRlbXMgPSBpdGVtcy5tYXAodGhpcy5fcHJpbWl0aXZlSXRlbXNNYXBGbik7XG4gICAgICAgICAgICBhcmVJdGVtc1ByaW1pdGl2ZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9pdGVtcyA9IGl0ZW1zLm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZXRJdGVtc01hcEZuKGl0ZW0sIGluZGV4LCBhcmVJdGVtc1ByaW1pdGl2ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vYWRkIGFsbCBpdGVtcyB0byBmaWx0ZXIgYXJyYXlcbiAgICAgICAgdGhpcy5fZmlsdGVyZWRJdGVtcyA9IHRoaXMuX2l0ZW1zO1xuXG4gICAgICAgIC8vYWRkIGl0ZW1zIHRvIGdyb3Vwc1xuICAgICAgICB0aGlzLl9wb3B1bGF0ZUdyb3VwcygpO1xuXG4gICAgICAgIC8vd3JpdGUgdmFsdWUgaWYgaXQgd2FzXG4gICAgICAgIGlmICh0aGlzLl92YWx1ZVRvV3JpdGVBZnRlckl0ZW1zTG9hZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVdyaXRlVmFsdWUodGhpcy5fdmFsdWVUb1dyaXRlQWZ0ZXJJdGVtc0xvYWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFyZUl0ZW1zUHJpbWl0aXZlO1xuICAgIH1cbiAgICBwcml2YXRlIF9hZGRTaW5nbGVJdGVtKGl0ZW06IGFueSk6IEFyZE9wdGlvbiB7XG4gICAgICAgIGxldCBpc0l0ZW1QcmltaXRpdmUgPSBpc1ByaW1pdGl2ZShpdGVtKTtcbiAgICAgICAgLy9tYXAgYSBwcmltaXRpdmUgaXRlbSB0byBhIHVzYWJsZSBvYmplY3RcbiAgICAgICAgaWYgKGlzSXRlbVByaW1pdGl2ZSkge1xuICAgICAgICAgICAgaXRlbSA9IHRoaXMuX3ByaW1pdGl2ZUl0ZW1zTWFwRm4oaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgLy9tYXAgdGhlIGl0ZW0gdG8gY3JlYXRlIGRhdGEgYmluZGluZ3NcbiAgICAgICAgY29uc3QgYXJkT3B0aW9uID0gdGhpcy5fc2V0SXRlbXNNYXBGbihpdGVtLCB0aGlzLl9pdGVtcy5sYXN0KCk/LmluZGV4ICsgMSwgaXNJdGVtUHJpbWl0aXZlKTtcblxuICAgICAgICAvL3B1c2ggdGhlIGl0ZW0gaW50byBhbGwgaXRlbXNcbiAgICAgICAgdGhpcy5faXRlbXMucHVzaChhcmRPcHRpb24pO1xuXG4gICAgICAgIC8vYWRkIGl0ZW0gdG8gZ3JvdXBzXG4gICAgICAgIHRoaXMuX3BvcHVsYXRlR3JvdXBzKCk7XG5cbiAgICAgICAgcmV0dXJuIGFyZE9wdGlvbjtcbiAgICB9XG4gICAgcHJpdmF0ZSBfcHJpbWl0aXZlSXRlbXNNYXBGbjxUPihpdGVtOiBUKTogeyB2YWx1ZTogVCB9IHtcbiAgICAgICAgcmV0dXJuIHsgdmFsdWU6IGl0ZW0gfTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfdW5ncm91cEFscmVhZHlHcm91cGVkSXRlbXM8VCBleHRlbmRzIG9iamVjdD4oZ3JvdXA6IFQpOiBbYW55W10sIGJvb2xlYW5dIHtcbiAgICAgICAgLy9kZXRlcm1pbmUgZ3JvdXBCeSAoZ3JvdXBMYWJlbCkgcGF0aFxuICAgICAgICBsZXQgZ3JvdXBCeSA9IHRoaXMuX2FyZFBhcmVudENvbXAuZ3JvdXBMYWJlbEZyb20gPz8gdGhpcy5fYXJkUGFyZW50Q29tcC5ERUZBVUxUUy5ncm91cExhYmVsRnJvbTtcblxuICAgICAgICAvL2dldCBncm91cCBsYWJlbCBmcm9tIG9iamVjdFxuICAgICAgICBsZXQgZ3JvdXBOYW1lOiBhbnk7XG4gICAgICAgIGlmICh0eXBlb2YgZ3JvdXBCeSA9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZ3JvdXBOYW1lID0gcmVzb2x2ZVBhdGgoZ3JvdXAsIGdyb3VwQnkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ3JvdXBOYW1lID0gZ3JvdXBCeShncm91cCk7XG4gICAgICAgIH1cblxuICAgICAgICAvL2RldGVybWluZSBncm91cCBjaGlsZHJlbiBwYXRoXG4gICAgICAgIGxldCBjaGlsZHJlblBhdGggPSB0aGlzLl9hcmRQYXJlbnRDb21wLmNoaWxkcmVuRnJvbSA/PyB0aGlzLl9hcmRQYXJlbnRDb21wLkRFRkFVTFRTLmNoaWxkcmVuRnJvbTtcblxuICAgICAgICAvL2dldCBncm91cCBjaGlsZHJlblxuICAgICAgICBsZXQgZ3JvdXBJdGVtczogYW55ID0gcmVzb2x2ZVBhdGgoZ3JvdXAsIGNoaWxkcmVuUGF0aCk7XG5cbiAgICAgICAgLy9yZXR1cm4gZW1wdHkgYXJyYXkgaWYgZ3JvdXBJdGVtcyBpcyBub3QgYW4gYXJyYXkgb3IgaXMgZW1wdHlcbiAgICAgICAgaWYgKCFpc0FycmF5KGdyb3VwSXRlbXMpIHx8IGdyb3VwSXRlbXMubGVuZ3RoID09IDApIHJldHVybiBbW10sIGZhbHNlXTtcblxuICAgICAgICAvL2NoZWNrIGlmIHRoZSBhcnJheSBpcyBhbiBhcnJheSBvZiBwcmltaXRpdmVzLCBhbmQgbWFwIGl0IGlmIG5lZWRlZFxuICAgICAgICBsZXQgYXJlSXRlbXNQcmltaXRpdmUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGFueShncm91cEl0ZW1zLCBpc1ByaW1pdGl2ZSkpIHtcbiAgICAgICAgICAgIGdyb3VwSXRlbXMgPSBncm91cEl0ZW1zLm1hcCh0aGlzLl9wcmltaXRpdmVJdGVtc01hcEZuKTtcbiAgICAgICAgfVxuICAgICAgICAvL2FkZCBncm91cCBuYW1lIHRvIGV2ZXJ5IGNoaWxkXG4gICAgICAgIGdyb3VwSXRlbXMgPSBncm91cEl0ZW1zLm1hcCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICBpdGVtLiRhcmRncm91cCA9IGdyb3VwTmFtZTtcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gW2dyb3VwSXRlbXMsIGFyZUl0ZW1zUHJpbWl0aXZlXTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfc2V0SXRlbXNNYXBGbihyYXdJdGVtRGF0YTogYW55LCBpbmRleDogbnVtYmVyLCBhcmVJdGVtc1ByaW1pdGl2ZTogYm9vbGVhbik6IEFyZE9wdGlvbiB7XG4gICAgICAgIGlmIChhcmVJdGVtc1ByaW1pdGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpdGVtRGF0YTogcmF3SXRlbURhdGEsXG4gICAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHJhd0l0ZW1EYXRhLnZhbHVlLFxuICAgICAgICAgICAgICAgIGxhYmVsOiByYXdJdGVtRGF0YS52YWx1ZT8udG9TdHJpbmc/LigpID8/IFN0cmluZyhyYXdJdGVtRGF0YS52YWx1ZSksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIC8vZ2V0IHZhbHVlXG4gICAgICAgIGNvbnN0IHZhbHVlUGF0aCA9IHRoaXMuX2FyZFBhcmVudENvbXAudmFsdWVGcm9tID8/IHRoaXMuX2FyZFBhcmVudENvbXAubGFiZWxGcm9tID8/IHRoaXMuX2FyZFBhcmVudENvbXAuREVGQVVMVFMudmFsdWVGcm9tO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHJlc29sdmVQYXRoKHJhd0l0ZW1EYXRhLCB2YWx1ZVBhdGgpO1xuXG4gICAgICAgIC8vZ2V0IGxhYmVsXG4gICAgICAgIGNvbnN0IGxhYmVsUGF0aCA9IHRoaXMuX2FyZFBhcmVudENvbXAubGFiZWxGcm9tID8/IHRoaXMuX2FyZFBhcmVudENvbXAudmFsdWVGcm9tID8/IHRoaXMuX2FyZFBhcmVudENvbXAuREVGQVVMVFMubGFiZWxGcm9tO1xuICAgICAgICBjb25zdCBsYWJlbCA9IHJlc29sdmVQYXRoKHJhd0l0ZW1EYXRhLCBsYWJlbFBhdGgpID8/IHZhbHVlO1xuXG4gICAgICAgIC8vZ2V0IGRpc2FibGVkXG4gICAgICAgIGNvbnN0IGRpc2FibGVkUGF0aCA9IHRoaXMuX2FyZFBhcmVudENvbXAuZGlzYWJsZWRGcm9tID8/IHRoaXMuX2FyZFBhcmVudENvbXAuREVGQVVMVFMuZGlzYWJsZWRGcm9tO1xuICAgICAgICBsZXQgZGlzYWJsZWQgPSBldmFsdWF0ZShyZXNvbHZlUGF0aChyYXdJdGVtRGF0YSwgZGlzYWJsZWRQYXRoKSk7XG4gICAgICAgIGlmICh0aGlzLl9hcmRQYXJlbnRDb21wLmludmVydERpc2FibGVkKSB7XG4gICAgICAgICAgICBkaXNhYmxlZCA9ICFkaXNhYmxlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vZ2V0IGdyb3Vwc1xuICAgICAgICBsZXQgZ3JvdXA6IGFueSA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHRoaXMuX2FyZFBhcmVudENvbXAuZ3JvdXBJdGVtcykge1xuICAgICAgICAgICAgaWYgKHJhd0l0ZW1EYXRhLiRhcmRncm91cCkge1xuICAgICAgICAgICAgICAgIGdyb3VwID0gcmF3SXRlbURhdGEuJGFyZGdyb3VwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgZ3JvdXBCeSA9IHRoaXMuX2FyZFBhcmVudENvbXAuZ3JvdXBMYWJlbEZyb20gPz8gdGhpcy5fYXJkUGFyZW50Q29tcC5ERUZBVUxUUy5ncm91cExhYmVsRnJvbTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGdyb3VwQnkgPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXAgPSByZXNvbHZlUGF0aChyYXdJdGVtRGF0YSwgZ3JvdXBCeSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXAgPSAoZ3JvdXBCeSBhcyBHcm91cEJ5Rm4pKHJhd0l0ZW1EYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpdGVtRGF0YSA9IGFyZUl0ZW1zUHJpbWl0aXZlID8gcmF3SXRlbURhdGEudmFsdWUgOiByYXdJdGVtRGF0YTtcblxuICAgICAgICAvL3JldHVyblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXRlbURhdGEsXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgbGFiZWw6IGxhYmVsPy50b1N0cmluZz8uKCkgPz8gU3RyaW5nKGxhYmVsKSxcbiAgICAgICAgICAgIGRpc2FibGVkLFxuICAgICAgICAgICAgZ3JvdXAsXG4gICAgICAgIH07XG4gICAgfVxuICAgIHByaXZhdGUgX3BvcHVsYXRlR3JvdXBzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9ncm91cHMgPSB0aGlzLl9jcmVhdGVFbXB0eUdyb3VwTWFwKCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuX2ZpbHRlcmVkSXRlbXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9hcmRQYXJlbnRDb21wLmhpZGVTZWxlY3RlZCAmJiBpdGVtLnNlbGVjdGVkKSBjb250aW51ZTtcblxuICAgICAgICAgICAgdGhpcy5fYWRkVG9Hcm91cChpdGVtKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcml2YXRlIF9hZGRUb0dyb3VwKGl0ZW06IEFyZE9wdGlvbik6IHZvaWQge1xuICAgICAgICBjb25zdCBncm91cEtleSA9IGl0ZW0uZ3JvdXA7XG4gICAgICAgIGxldCB0YXJnZXRHcm91cCA9IHRoaXMuX2dyb3Vwcy5nZXQoZ3JvdXBLZXkpO1xuICAgICAgICAvL2NyZWF0ZSBuZXcgZ3JvdXAgaWYgbmVlZGVkXG4gICAgICAgIGlmICghdGFyZ2V0R3JvdXApIHtcbiAgICAgICAgICAgIHRoaXMuX2dyb3Vwcy5zZXQoZ3JvdXBLZXksIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogU3RyaW5nKGdyb3VwS2V5ID8/ICcnKSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogW2l0ZW1dLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGFyZ2V0R3JvdXAuY2hpbGRyZW4ucHVzaChpdGVtKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfY3JlYXRlRW1wdHlHcm91cE1hcCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNYXAoW1t1bmRlZmluZWQsIHsgbGFiZWw6ICcnLCBjaGlsZHJlbjogW10gfV1dKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaXNXcml0ZVZhbHVlVmFsaWQobmdNb2RlbDogYW55W10pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIG5nTW9kZWwuZXZlcnkoaXRlbSA9PiB7XG4gICAgICAgICAgICBpZiAoIWlzRGVmaW5lZCh0aGlzLl9hcmRQYXJlbnRDb21wLmNvbXBhcmVXaXRoKSAmJiBpc09iamVjdChpdGVtKSAmJiB0aGlzLl9hcmRQYXJlbnRDb21wLnZhbHVlRnJvbSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgU2V0dGluZyBvYmplY3QoJHtKU09OLnN0cmluZ2lmeShpdGVtKX0pIGFzIHlvdXIgbW9kZWwgd2l0aCBbdmFsdWVGcm9tXSBpcyBub3QgYWxsb3dlZCB1bmxlc3MgW2NvbXBhcmVXaXRoXSBpcyB1c2VkLmApO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfdmFsdWVUb1dyaXRlQWZ0ZXJJdGVtc0xvYWQ6IGFueTtcbiAgICBwcml2YXRlIF93YXNWYWx1ZVdyaXRlRGVmZXJyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBoYW5kbGVXcml0ZVZhbHVlKG5nTW9kZWw6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIC8vZGVmZXIgd3JpdGluZyB0aGUgdmFsdWUgaWYgbm8gb3B0aW9ucyBhcmUgeWV0IGxvYWRlZFxuICAgICAgICBpZiAoIXRoaXMuX3dhc1ZhbHVlV3JpdGVEZWZlcnJlZCAmJiB0aGlzLl9pdGVtcy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5fdmFsdWVUb1dyaXRlQWZ0ZXJJdGVtc0xvYWQgPSBuZ01vZGVsO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jbGVhckFsbFNlbGVjdGVkKCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLl9pc1dyaXRlVmFsdWVWYWxpZChuZ01vZGVsKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0SXRlbUJ5VmFsdWUgPSAodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICAgICAgbGV0IGl0ZW0gPSB0aGlzLmZpbmRJdGVtQnlWYWx1ZSh2YWx1ZSk7XG5cbiAgICAgICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RJdGVtKGl0ZW0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgQ291bGRuJ3QgZmluZCBhbiBpdGVtIHdpdGggdmFsdWUgJHt2YWx1ZT8udG9TdHJpbmc/LigpIHx8IFN0cmluZyh2YWx1ZSl9LmApO1xuICAgICAgICB9O1xuXG4gICAgICAgIGZvciAoY29uc3QgbW9kZWxWYWx1ZSBvZiBuZ01vZGVsKSB7XG4gICAgICAgICAgICBzZWxlY3RJdGVtQnlWYWx1ZShtb2RlbFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmaW5kSXRlbUJ5VmFsdWUodmFsdWVUb0ZpbmQ6IGFueSk6IEFyZE9wdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGxldCBmaW5kQnk6IChpdGVtOiBBcmRPcHRpb24pID0+IGJvb2xlYW47XG4gICAgICAgIGlmICh0aGlzLl9hcmRQYXJlbnRDb21wLmNvbXBhcmVXaXRoKSB7XG4gICAgICAgICAgICBmaW5kQnkgPSBpdGVtID0+IHRoaXMuX2FyZFBhcmVudENvbXAuY29tcGFyZVdpdGghKHZhbHVlVG9GaW5kLCBpdGVtLnZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpbmRCeSA9IGl0ZW0gPT4gaXRlbS52YWx1ZSA9PT0gdmFsdWVUb0ZpbmQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zLmZpbmQoaXRlbSA9PiBmaW5kQnkoaXRlbSkpO1xuICAgIH1cbiAgICBhc3luYyBhZGRDdXN0b21PcHRpb24odmFsdWU6IHN0cmluZywgZm46IEFkZEN1c3RvbUZuPGFueT4gfCBBZGRDdXN0b21GbjxQcm9taXNlPGFueT4+KTogUHJvbWlzZTxBcmRPcHRpb24+IHtcbiAgICAgICAgY29uc3QgZm5SZXN1bHQgPSBmbih2YWx1ZSk7XG5cbiAgICAgICAgbGV0IG9wdGlvblZhbHVlID0gZm5SZXN1bHQ7XG4gICAgICAgIGlmIChpc1Byb21pc2Uob3B0aW9uVmFsdWUpKSBvcHRpb25WYWx1ZSA9IGF3YWl0IG9wdGlvblZhbHVlO1xuXG4gICAgICAgIGNvbnN0IG5ld09wdGlvbk9iaiA9IHRoaXMuX2FkZFNpbmdsZUl0ZW0ob3B0aW9uVmFsdWUpO1xuXG4gICAgICAgIHJldHVybiBuZXdPcHRpb25PYmo7XG4gICAgfVxuXG4gICAgY2xlYXJBbGxTZWxlY3RlZChyZXBvcHVsYXRlR3JvdXBzOiBib29sZWFuID0gZmFsc2UpOiBhbnlbXSB7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLl9zZWxlY3RlZEl0ZW1zKSB7XG4gICAgICAgICAgICBpdGVtLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlbW92ZWRJdGVtVmFsdWVzID0gdGhpcy5faXRlbXNUb1ZhbHVlKHRoaXMuX3NlbGVjdGVkSXRlbXMpO1xuICAgICAgICB0aGlzLl9zZWxlY3RlZEl0ZW1zID0gW107XG5cbiAgICAgICAgaWYgKHJlcG9wdWxhdGVHcm91cHMgJiYgdGhpcy5fYXJkUGFyZW50Q29tcC5oaWRlU2VsZWN0ZWQpIHRoaXMuX3BvcHVsYXRlR3JvdXBzKCk7XG5cbiAgICAgICAgcmV0dXJuIHJlbW92ZWRJdGVtVmFsdWVzO1xuICAgIH1cbiAgICBjbGVhckxhc3RTZWxlY3RlZCgpOiBBcmRPcHRpb24ge1xuICAgICAgICBsZXQgaXRlbSA9IHRoaXMuX3NlbGVjdGVkSXRlbXMubGFzdCgpO1xuICAgICAgICBpZiAoIWl0ZW0pIHJldHVybiBpdGVtO1xuICAgICAgICB0aGlzLnVuc2VsZWN0SXRlbShpdGVtKTtcbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuICAgIHNlbGVjdEl0ZW0oLi4uaXRlbXM6IEFyZE9wdGlvbltdKTogW2FueVtdLCBhbnlbXSwgYW55W11dIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJdGVtTGltaXRSZWFjaGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gW1tdLCBbXSwgdGhpcy5faXRlbXNUb1ZhbHVlKGl0ZW1zKV07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHVuc2VsZWN0ZWQgPSBbXTtcbiAgICAgICAgaWYgKCF0aGlzLl9hcmRQYXJlbnRDb21wLm11bHRpc2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgdW5zZWxlY3RlZCA9IHRoaXMuY2xlYXJBbGxTZWxlY3RlZChmYWxzZSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaXRlbXNTZWxlY3RlZENvdW50ID0gMDtcbiAgICAgICAgY29uc3QgaXRlbXNTZWxlY3RlZCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgICAgIGl0ZW1zU2VsZWN0ZWRDb3VudCsrO1xuICAgICAgICAgICAgaWYgKGl0ZW0uc2VsZWN0ZWQpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNJdGVtTGltaXRSZWFjaGVkKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVtLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkSXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgICAgIGl0ZW1zU2VsZWN0ZWQucHVzaChpdGVtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9hcmRQYXJlbnRDb21wLmhpZGVTZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5fcG9wdWxhdGVHcm91cHMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGl0ZW1zRmFpbGVkVG9TZWxlY3QgPSBpdGVtcy5zbGljZShpdGVtc1NlbGVjdGVkQ291bnQgLSAxKTtcbiAgICAgICAgcmV0dXJuIFt0aGlzLl9pdGVtc1RvVmFsdWUoaXRlbXNTZWxlY3RlZCksIHVuc2VsZWN0ZWQsIHRoaXMuX2l0ZW1zVG9WYWx1ZShpdGVtc0ZhaWxlZFRvU2VsZWN0KV07XG4gICAgfVxuICAgIHVuc2VsZWN0SXRlbSguLi5pdGVtczogQXJkT3B0aW9uW10pOiBhbnlbXSB7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICAgICAgaWYgKCFpdGVtLnNlbGVjdGVkKSBjb250aW51ZTtcbiAgICAgICAgICAgIGl0ZW0uc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zZWxlY3RlZEl0ZW1zID0gdGhpcy5fc2VsZWN0ZWRJdGVtcy5maWx0ZXIodiA9PiB2LnNlbGVjdGVkKTtcblxuICAgICAgICBpZiAodGhpcy5fYXJkUGFyZW50Q29tcC5oaWRlU2VsZWN0ZWQpIHRoaXMuX3BvcHVsYXRlR3JvdXBzKCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zVG9WYWx1ZShpdGVtcyk7XG4gICAgfVxuXG4gICAgY2xlYXJBbGxIaWdobGlnaHRzKCk6IHZvaWQge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5faGlnaGxpZ2h0ZWRJdGVtcykge1xuICAgICAgICAgICAgaXRlbS5oaWdobGlnaHRlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgZ3JvdXAgb2YgdGhpcy5faGlnaGxpZ2h0ZWRHcm91cHMpIHtcbiAgICAgICAgICAgIGdyb3VwLmhpZ2hsaWdodGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faGlnaGxpZ2h0ZWRJdGVtcyA9IFtdO1xuICAgICAgICB0aGlzLl9oaWdobGlnaHRlZEdyb3VwcyA9IFtdO1xuICAgIH1cbiAgICBoaWdobGlnaHRHcm91cChncm91cDogQXJkT3B0aW9uR3JvdXApOiBBcmRPcHRpb24ge1xuICAgICAgICB0aGlzLmNsZWFyQWxsSGlnaGxpZ2h0cygpO1xuICAgICAgICBncm91cC5oaWdobGlnaHRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0SXRlbSguLi5ncm91cC5jaGlsZHJlbik7XG4gICAgICAgIHJldHVybiBncm91cC5jaGlsZHJlbi5maXJzdCgpO1xuICAgIH1cbiAgICBoaWdobGlnaHRTaW5nbGVJdGVtKGl0ZW06IEFyZE9wdGlvbik6IEFyZE9wdGlvbiB8IG51bGwge1xuICAgICAgICBpZiAoIWl0ZW0gfHwgaXRlbS5kaXNhYmxlZCkgcmV0dXJuIG51bGw7XG4gICAgICAgIHRoaXMuY2xlYXJBbGxIaWdobGlnaHRzKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodEl0ZW0oaXRlbSk7XG4gICAgfVxuICAgIGhpZ2hsaWdodEl0ZW0oLi4uaXRlbXM6IEFyZE9wdGlvbltdKTogQXJkT3B0aW9uIHtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgICBpdGVtLmhpZ2hsaWdodGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9oaWdobGlnaHRlZEl0ZW1zLnB1c2goLi4uaXRlbXMpO1xuICAgICAgICByZXR1cm4gaXRlbXMubGFzdCgpO1xuICAgIH1cbiAgICB1bmhpZ2hsaWdodEl0ZW0oLi4uaXRlbXM6IEFyZE9wdGlvbltdKTogdm9pZCB7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICAgICAgaWYgKCFpdGVtIHx8ICFpdGVtLmhpZ2hsaWdodGVkKSByZXR1cm47XG5cbiAgICAgICAgICAgIGl0ZW0uaGlnaGxpZ2h0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9oaWdobGlnaHRlZEl0ZW1zID0gdGhpcy5faGlnaGxpZ2h0ZWRJdGVtcy5maWx0ZXIodiA9PiB2LmhpZ2hsaWdodGVkKTtcbiAgICB9XG4gICAgaGlnaGxpZ2h0Rmlyc3RJdGVtKCk6IEFyZE9wdGlvbiB8IG51bGwge1xuICAgICAgICB0aGlzLmNsZWFyQWxsSGlnaGxpZ2h0cygpO1xuICAgICAgICBsZXQgaXRlbXNUb0hpZ2hsaWdodCA9IHRoaXMuX2dldEhpZ2xpZ2h0YWJsZUl0ZW1zKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodFNpbmdsZUl0ZW0oaXRlbXNUb0hpZ2hsaWdodC5maXJzdCgpKTtcbiAgICB9XG4gICAgaGlnaGxpZ2h0TGFzdEl0ZW0oKTogQXJkT3B0aW9uIHwgbnVsbCB7XG4gICAgICAgIHRoaXMuY2xlYXJBbGxIaWdobGlnaHRzKCk7XG4gICAgICAgIGxldCBpdGVtc1RvSGlnaGxpZ2h0ID0gdGhpcy5fZ2V0SGlnbGlnaHRhYmxlSXRlbXMoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0U2luZ2xlSXRlbShpdGVtc1RvSGlnaGxpZ2h0Lmxhc3QoKSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2dldEhpZ2xpZ2h0YWJsZUl0ZW1zKCk6IEFyZE9wdGlvbltdIHtcbiAgICAgICAgbGV0IGl0ZW1zVG9IaWdobGlnaHQgPSB0aGlzLl9maWx0ZXJlZEl0ZW1zLmZpbHRlcihpdGVtID0+ICFpdGVtLmRpc2FibGVkKTtcbiAgICAgICAgaWYgKHRoaXMuX2FyZFBhcmVudENvbXAuaGlkZVNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpdGVtc1RvSGlnaGxpZ2h0ID0gaXRlbXNUb0hpZ2hsaWdodC5maWx0ZXIoaXRlbSA9PiAhaXRlbS5zZWxlY3RlZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW1zVG9IaWdobGlnaHQ7XG4gICAgfVxuICAgIGhpZ2hsaWdodEFsbEl0ZW1zKCk6IHZvaWQge1xuICAgICAgICBsZXQgaXRlbXNUb0hpZ2hsaWdodCA9IHRoaXMuX2ZpbHRlcmVkSXRlbXMuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0uZGlzYWJsZWQpO1xuXG4gICAgICAgIGlmICh0aGlzLl9hcmRQYXJlbnRDb21wLmhpZGVTZWxlY3RlZCkge1xuICAgICAgICAgICAgaXRlbXNUb0hpZ2hsaWdodCA9IGl0ZW1zVG9IaWdobGlnaHQuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0uc2VsZWN0ZWQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0SXRlbSguLi5pdGVtc1RvSGlnaGxpZ2h0KTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfY2xlYXJSZWNlbnRseUhpZ2hsaWdodGVkKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fcmVjZW50bHlIaWdobGlnaHRlZEl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMuX3JlY2VudGx5SGlnaGxpZ2h0ZWRJdGVtLmhpZ2hsaWdodGVkX3JlY2VudGx5ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0UmVjZW50bHlIaWdobGlnaHRlZChpdGVtOiBBcmRPcHRpb24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2xlYXJSZWNlbnRseUhpZ2hsaWdodGVkKCk7XG4gICAgICAgIHRoaXMuX3JlY2VudGx5SGlnaGxpZ2h0ZWRJdGVtID0gaXRlbTtcbiAgICAgICAgdGhpcy5fcmVjZW50bHlIaWdobGlnaHRlZEl0ZW0uaGlnaGxpZ2h0ZWRfcmVjZW50bHkgPSB0cnVlO1xuICAgIH1cbiAgICBoaWdobGlnaHROZXh0SXRlbShvZmZzZXQ6IG51bWJlciwgaGFzU2hpZnQ/OiBib29sZWFuKTogQXJkT3B0aW9uIHwgbnVsbCB7XG4gICAgICAgIGlmICghdGhpcy5pc0FueUl0ZW1IaWdobGlnaHRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0Rmlyc3RJdGVtKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VycmVudEl0ZW0gPSB0aGlzLmhpZ2hsaWdodGVkSXRlbXMubGFzdCgpO1xuICAgICAgICBjb25zdCBoaWdobGlnaHRhYmxlSXRlbXMgPSB0aGlzLl9nZXRIaWdsaWdodGFibGVJdGVtcygpO1xuICAgICAgICBjb25zdCBjdXJyZW50SW5kZXhJbkZpbHRlcmVkID0gaGlnaGxpZ2h0YWJsZUl0ZW1zLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaW5kZXggPT0gY3VycmVudEl0ZW0uaW5kZXgpO1xuXG4gICAgICAgIGxldCBuZXh0SXRlbUluZGV4ID0gY3VycmVudEluZGV4SW5GaWx0ZXJlZCArIG9mZnNldDtcbiAgICAgICAgaWYgKG5leHRJdGVtSW5kZXggPj0gaGlnaGxpZ2h0YWJsZUl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgbmV4dEl0ZW1JbmRleCAtPSBoaWdobGlnaHRhYmxlSXRlbXMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuZXh0SXRlbUluZGV4IDwgMCkge1xuICAgICAgICAgICAgbmV4dEl0ZW1JbmRleCArPSBoaWdobGlnaHRhYmxlSXRlbXMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGl0ZW1Ub0hpZ2hsaWdodCA9IGhpZ2hsaWdodGFibGVJdGVtc1tuZXh0SXRlbUluZGV4XTtcblxuICAgICAgICBpZiAoaGFzU2hpZnQgJiYgdGhpcy5fYXJkUGFyZW50Q29tcC5tdWx0aXNlbGVjdGFibGUpIHtcbiAgICAgICAgICAgIGlmIChpdGVtVG9IaWdobGlnaHQuaGlnaGxpZ2h0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVuaGlnaGxpZ2h0SXRlbShjdXJyZW50SXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRJdGVtKGl0ZW1Ub0hpZ2hsaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0U2luZ2xlSXRlbShpdGVtVG9IaWdobGlnaHQpO1xuICAgIH1cbiAgICBmaWx0ZXIoZmlsdGVyVGVybTogc3RyaW5nKTogYW55W10ge1xuICAgICAgICBpZiAoIWZpbHRlclRlcm0pIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRGaWx0ZXJlZCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zVG9WYWx1ZSh0aGlzLl9maWx0ZXJlZEl0ZW1zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2FyZFBhcmVudENvbXAuc2VhcmNoQ2FzZVNlbnNpdGl2ZSkge1xuICAgICAgICAgICAgZmlsdGVyVGVybSA9IGZpbHRlclRlcm0udG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlYXJjaEZuID0gdGhpcy5fYXJkUGFyZW50Q29tcC5zZWFyY2hGbjtcbiAgICAgICAgdGhpcy5fZmlsdGVyZWRJdGVtcyA9IHRoaXMuX2l0ZW1zLmZpbHRlcihpdGVtID0+IHNlYXJjaEZuKGZpbHRlclRlcm0sIGl0ZW0pKTtcblxuICAgICAgICB0aGlzLl9wb3B1bGF0ZUdyb3VwcygpO1xuXG4gICAgICAgIGlmICghdGhpcy5pc05vSXRlbXNGb3VuZCkgdGhpcy5oaWdobGlnaHRGaXJzdEl0ZW0oKTtcbiAgICAgICAgZWxzZSB0aGlzLmNsZWFyQWxsSGlnaGxpZ2h0cygpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtc1RvVmFsdWUodGhpcy5fZmlsdGVyZWRJdGVtcyk7XG4gICAgfVxuICAgIHJlc2V0RmlsdGVyZWQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJlZEl0ZW1zLmxlbmd0aCA9PSB0aGlzLl9pdGVtcy5sZW5ndGgpIHJldHVybjtcblxuICAgICAgICBpZiAodGhpcy5fYXJkUGFyZW50Q29tcC5oaWRlU2VsZWN0ZWQgJiYgdGhpcy5pc0FueUl0ZW1TZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVyZWRJdGVtcyA9IHRoaXMuX2l0ZW1zLmZpbHRlcihpdGVtID0+ICFpdGVtLnNlbGVjdGVkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2ZpbHRlcmVkSXRlbXMgPSB0aGlzLl9pdGVtcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9wb3B1bGF0ZUdyb3VwcygpO1xuICAgIH1cbn1cbiJdfQ==
|