@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,468 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, ContentChild, ContentChildren, EventEmitter, Input, Output, TemplateRef, ViewEncapsulation, } from '@angular/core';
|
|
2
|
+
import { coerceBooleanProperty, coerceNumberProperty } from '@ardium-ui/devkit';
|
|
3
|
+
import { isDefined } from 'simple-bool';
|
|
4
|
+
import { _FocusableComponentBase } from '../_internal/focusable-component';
|
|
5
|
+
import { CheckboxState } from '../checkbox/checkbox.types';
|
|
6
|
+
import { PaginationAlign } from '../table-pagination/table-pagination.types';
|
|
7
|
+
import { ComponentColor, SimpleComponentColor } from '../types/colors.types';
|
|
8
|
+
import { TableItemStorage } from './table-item-storage';
|
|
9
|
+
import { ArdiumTableCaptionTemplateDirective, ArdiumTableCheckboxTemplateDirective, ArdiumTableHeaderCheckboxTemplateDirective, ArdiumTableTemplateDirective, } from './table.directives';
|
|
10
|
+
import { TableAlignType, TableAppearance, TablePaginationStrategy, TableVariant, } from './table.types';
|
|
11
|
+
import { isTableSubheader } from './utils';
|
|
12
|
+
import * as i0 from "@angular/core";
|
|
13
|
+
import * as i1 from "@angular/common";
|
|
14
|
+
import * as i2 from "../checkbox/checkbox.component";
|
|
15
|
+
import * as i3 from "../table-pagination/table-pagination.component";
|
|
16
|
+
import * as i4 from "../icon/icon.component";
|
|
17
|
+
export class ArdiumTableComponent extends _FocusableComponentBase {
|
|
18
|
+
constructor() {
|
|
19
|
+
super(...arguments);
|
|
20
|
+
this._itemStorage = new TableItemStorage(this);
|
|
21
|
+
this.DEFAULTS = {
|
|
22
|
+
rowDisabledFrom: 'disabled',
|
|
23
|
+
rowBoldFrom: 'bold',
|
|
24
|
+
};
|
|
25
|
+
this._invertRowDisabled = false;
|
|
26
|
+
this._invertRowBold = false;
|
|
27
|
+
this._selectableRows = false;
|
|
28
|
+
//! appearance
|
|
29
|
+
this.appearance = TableAppearance.Strong;
|
|
30
|
+
this.variant = TableVariant.Rounded;
|
|
31
|
+
this.color = ComponentColor.Primary;
|
|
32
|
+
this.align = TableAlignType.CenterLeft;
|
|
33
|
+
this.headerAlign = TableAlignType.CenterLeft;
|
|
34
|
+
this._compact = false;
|
|
35
|
+
this._zebra = false;
|
|
36
|
+
this._stickyHeader = false;
|
|
37
|
+
//! pagination
|
|
38
|
+
this._paginated = false;
|
|
39
|
+
this.paginationStrategy = TablePaginationStrategy.Noop;
|
|
40
|
+
this.paginationOptions = [10, 25, 50];
|
|
41
|
+
this.paginationColor = ComponentColor.None;
|
|
42
|
+
this.paginationAlign = PaginationAlign.Split;
|
|
43
|
+
this.itemsPerPageText = 'Items per page:';
|
|
44
|
+
this.currentItemsFormatFn = ({ currentItemsFirst, currentItemsLast, totalItems }) => {
|
|
45
|
+
return `${currentItemsFirst} – ${currentItemsLast} of ${totalItems}`;
|
|
46
|
+
};
|
|
47
|
+
this._pageFillRemaining = false;
|
|
48
|
+
this._paginationDisabled = false;
|
|
49
|
+
this._useFirstLastButtons = false;
|
|
50
|
+
this._itemsPerPage = 50;
|
|
51
|
+
this.itemsPerPageChange = new EventEmitter();
|
|
52
|
+
this._page = 1;
|
|
53
|
+
this.pageChange = new EventEmitter();
|
|
54
|
+
this._data = [];
|
|
55
|
+
this._treatDataSourceAsString = false;
|
|
56
|
+
this._itemTemplates = {};
|
|
57
|
+
this.selectedRowsChangeEvent = new EventEmitter();
|
|
58
|
+
this.failedSelectRowEvent = new EventEmitter();
|
|
59
|
+
this.selectRowEvent = new EventEmitter();
|
|
60
|
+
this.unselectRowEvent = new EventEmitter();
|
|
61
|
+
}
|
|
62
|
+
get invertRowDisabled() {
|
|
63
|
+
return this._invertRowDisabled;
|
|
64
|
+
}
|
|
65
|
+
set invertRowDisabled(v) {
|
|
66
|
+
this._invertRowDisabled = coerceBooleanProperty(v);
|
|
67
|
+
}
|
|
68
|
+
get invertRowBold() {
|
|
69
|
+
return this._invertRowBold;
|
|
70
|
+
}
|
|
71
|
+
set invertRowBold(v) {
|
|
72
|
+
this._invertRowBold = coerceBooleanProperty(v);
|
|
73
|
+
}
|
|
74
|
+
get selectableRows() {
|
|
75
|
+
return this._selectableRows;
|
|
76
|
+
}
|
|
77
|
+
set selectableRows(v) {
|
|
78
|
+
this._selectableRows = coerceBooleanProperty(v);
|
|
79
|
+
}
|
|
80
|
+
get compact() {
|
|
81
|
+
return this._compact;
|
|
82
|
+
}
|
|
83
|
+
set compact(v) {
|
|
84
|
+
this._compact = coerceBooleanProperty(v);
|
|
85
|
+
}
|
|
86
|
+
get zebra() {
|
|
87
|
+
return this._zebra;
|
|
88
|
+
}
|
|
89
|
+
set zebra(v) {
|
|
90
|
+
this._zebra = coerceBooleanProperty(v);
|
|
91
|
+
}
|
|
92
|
+
get stickyHeader() {
|
|
93
|
+
return this._stickyHeader;
|
|
94
|
+
}
|
|
95
|
+
set stickyHeader(v) {
|
|
96
|
+
this._stickyHeader = coerceBooleanProperty(v);
|
|
97
|
+
}
|
|
98
|
+
get ngClasses() {
|
|
99
|
+
return [
|
|
100
|
+
`ard-appearance-${this.appearance}`,
|
|
101
|
+
`ard-variant-${this.variant}`,
|
|
102
|
+
`ard-color-${this.color}`,
|
|
103
|
+
`ard-align-${this.align}`,
|
|
104
|
+
`ard-header-align-${this.headerAlign}`,
|
|
105
|
+
this.compact ? 'ard-compact' : '',
|
|
106
|
+
this.zebra ? 'ard-zebra-table' : '',
|
|
107
|
+
this.selectableRows ? 'ard-selectable-rows' : '',
|
|
108
|
+
this.stickyHeader ? 'ard-sticky-header' : '',
|
|
109
|
+
this.isLoading ? 'ard-table-loading' : '',
|
|
110
|
+
].join(' ');
|
|
111
|
+
}
|
|
112
|
+
get paginated() {
|
|
113
|
+
return this._paginated;
|
|
114
|
+
}
|
|
115
|
+
set paginated(v) {
|
|
116
|
+
this._paginated = coerceBooleanProperty(v);
|
|
117
|
+
}
|
|
118
|
+
get pageFillRemaining() {
|
|
119
|
+
return this._pageFillRemaining;
|
|
120
|
+
}
|
|
121
|
+
set pageFillRemaining(v) {
|
|
122
|
+
this._pageFillRemaining = coerceBooleanProperty(v);
|
|
123
|
+
}
|
|
124
|
+
get paginationDisabled() {
|
|
125
|
+
return this._paginationDisabled;
|
|
126
|
+
}
|
|
127
|
+
set paginationDisabled(v) {
|
|
128
|
+
this._paginationDisabled = coerceBooleanProperty(v);
|
|
129
|
+
}
|
|
130
|
+
get useFirstLastButtons() {
|
|
131
|
+
return this._useFirstLastButtons;
|
|
132
|
+
}
|
|
133
|
+
set useFirstLastButtons(v) {
|
|
134
|
+
this._useFirstLastButtons = coerceBooleanProperty(v);
|
|
135
|
+
}
|
|
136
|
+
get itemsPerPage() {
|
|
137
|
+
return this._itemsPerPage;
|
|
138
|
+
}
|
|
139
|
+
set itemsPerPage(v) {
|
|
140
|
+
this._itemsPerPage = coerceNumberProperty(v);
|
|
141
|
+
}
|
|
142
|
+
get page() {
|
|
143
|
+
return this._page;
|
|
144
|
+
}
|
|
145
|
+
set page(v) {
|
|
146
|
+
this._page = coerceNumberProperty(v);
|
|
147
|
+
}
|
|
148
|
+
get isDefinedTotalItems() {
|
|
149
|
+
return ((this.paginationStrategy == TablePaginationStrategy.Noop && isDefined(this.totalItems)) || this.paginationStrategy != TablePaginationStrategy.Noop);
|
|
150
|
+
}
|
|
151
|
+
get canDisplayPagination() {
|
|
152
|
+
//prettier-ignore
|
|
153
|
+
return this.paginated && this.isDefinedTotalItems;
|
|
154
|
+
}
|
|
155
|
+
//! item storage getters
|
|
156
|
+
get headerCells() {
|
|
157
|
+
return this._itemStorage.headerCells;
|
|
158
|
+
}
|
|
159
|
+
get dataRows() {
|
|
160
|
+
const items = this._itemStorage.paginatedItems;
|
|
161
|
+
if (!this.pageFillRemaining)
|
|
162
|
+
return items;
|
|
163
|
+
if (!this.isDefinedTotalItems) {
|
|
164
|
+
throw new Error('<ard-table> requires [totalItems] to be defined.');
|
|
165
|
+
}
|
|
166
|
+
if (this.page == 1)
|
|
167
|
+
return items;
|
|
168
|
+
for (let i = items.length; i < this.itemsPerPage; i++) {
|
|
169
|
+
items.push({
|
|
170
|
+
itemData: null,
|
|
171
|
+
index: i,
|
|
172
|
+
data: [],
|
|
173
|
+
dataColumns: [],
|
|
174
|
+
isEmpty: true,
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
return items;
|
|
178
|
+
}
|
|
179
|
+
//! columns/data setters
|
|
180
|
+
set columns(v) {
|
|
181
|
+
this._itemStorage.setColumns(v);
|
|
182
|
+
}
|
|
183
|
+
set data(v) {
|
|
184
|
+
this._data = v;
|
|
185
|
+
this._itemStorage.setItems(v);
|
|
186
|
+
}
|
|
187
|
+
get data() {
|
|
188
|
+
return this._data;
|
|
189
|
+
}
|
|
190
|
+
get treatDataSourceAsString() {
|
|
191
|
+
return this._treatDataSourceAsString;
|
|
192
|
+
}
|
|
193
|
+
set treatDataSourceAsString(v) {
|
|
194
|
+
this._treatDataSourceAsString = coerceBooleanProperty(v);
|
|
195
|
+
}
|
|
196
|
+
ngAfterContentInit() {
|
|
197
|
+
const templates = Array.from(this.templateChildren);
|
|
198
|
+
for (const instance of templates) {
|
|
199
|
+
if (!instance.name) {
|
|
200
|
+
console.error(new Error('[ard-table-tmp] requires a value to be specified.'));
|
|
201
|
+
continue;
|
|
202
|
+
}
|
|
203
|
+
this._itemTemplates[instance.name] = instance.template;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
getHeaderTemplate(tmp) {
|
|
207
|
+
if (typeof tmp == 'string')
|
|
208
|
+
return undefined;
|
|
209
|
+
return this.getCellTemplate(tmp.template);
|
|
210
|
+
}
|
|
211
|
+
getHeaderCheckboxColor() {
|
|
212
|
+
if (this.appearance == TableAppearance.Strong)
|
|
213
|
+
return SimpleComponentColor.CurrentColor;
|
|
214
|
+
return this.color;
|
|
215
|
+
}
|
|
216
|
+
getCellTemplate(tmp) {
|
|
217
|
+
//return undefined
|
|
218
|
+
if (!tmp)
|
|
219
|
+
return undefined;
|
|
220
|
+
//return template, if it is one
|
|
221
|
+
if (tmp instanceof TemplateRef)
|
|
222
|
+
return tmp;
|
|
223
|
+
//check if the name can be found
|
|
224
|
+
if (!(tmp in this._itemTemplates)) {
|
|
225
|
+
console.error(new Error(`<ard-table> error: cannot find template named "${tmp}"`));
|
|
226
|
+
return undefined;
|
|
227
|
+
}
|
|
228
|
+
//return the template
|
|
229
|
+
return this._itemTemplates[tmp];
|
|
230
|
+
}
|
|
231
|
+
getCellStyle(cell) {
|
|
232
|
+
if (isTableSubheader(cell))
|
|
233
|
+
return 'width:unset;min-width:unset';
|
|
234
|
+
const width = typeof cell.width == 'number' ? `${cell.width}px` : cell.width;
|
|
235
|
+
const minWidth = typeof cell.minWidth == 'number' ? `${cell.minWidth}px` : cell.minWidth;
|
|
236
|
+
return [`width:${width ?? 'unset'}`, `min-width:${minWidth ?? 'unset'}`].join(';');
|
|
237
|
+
}
|
|
238
|
+
//! click & hover handlers
|
|
239
|
+
onCheckboxClick(index) {
|
|
240
|
+
this.toggleRowSelected(index);
|
|
241
|
+
}
|
|
242
|
+
onRowClick(index, event) {
|
|
243
|
+
if (!this.selectableRows)
|
|
244
|
+
return;
|
|
245
|
+
event.stopPropagation();
|
|
246
|
+
this.toggleRowSelected(index);
|
|
247
|
+
}
|
|
248
|
+
onRowMouseOver(event) {
|
|
249
|
+
event.stopPropagation();
|
|
250
|
+
}
|
|
251
|
+
onRowMouseEnter(index, event) {
|
|
252
|
+
if (!this.selectableRows)
|
|
253
|
+
return;
|
|
254
|
+
event.stopPropagation();
|
|
255
|
+
this._itemStorage.highlightSingleItem(index);
|
|
256
|
+
}
|
|
257
|
+
onRowMouseLeave(index, event) {
|
|
258
|
+
if (!this.selectableRows)
|
|
259
|
+
return;
|
|
260
|
+
event.stopPropagation();
|
|
261
|
+
this._itemStorage.unhighlightItem(index);
|
|
262
|
+
}
|
|
263
|
+
//! select handlers
|
|
264
|
+
/**
|
|
265
|
+
* Toggles the selection state of a row in the table.
|
|
266
|
+
* @param selected a boolean value indicating if the row is currently selected.
|
|
267
|
+
* @param index the index of the row in the table.
|
|
268
|
+
*/
|
|
269
|
+
toggleRowSelected(index) {
|
|
270
|
+
if (this._itemStorage.isItemSelected(index)) {
|
|
271
|
+
const unselected = this._itemStorage.unselectItem(index);
|
|
272
|
+
this.unselectRowEvent.emit(unselected);
|
|
273
|
+
}
|
|
274
|
+
else {
|
|
275
|
+
const [selected, failed] = this._itemStorage.selectItem(index);
|
|
276
|
+
this.selectRowEvent.emit(selected);
|
|
277
|
+
this.failedSelectRowEvent.emit(failed);
|
|
278
|
+
}
|
|
279
|
+
this._emitSelect();
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Toggles the selection state of all rows in the table.
|
|
283
|
+
*/
|
|
284
|
+
toggleAllRowsSelected() {
|
|
285
|
+
if (this._itemStorage.areAllSelected) {
|
|
286
|
+
const unselected = this._itemStorage.unselectAll();
|
|
287
|
+
this.unselectRowEvent.emit(unselected);
|
|
288
|
+
}
|
|
289
|
+
else {
|
|
290
|
+
const [selected, failed] = this._itemStorage.selectAll();
|
|
291
|
+
this.selectRowEvent.emit(selected);
|
|
292
|
+
this.failedSelectRowEvent.emit(failed);
|
|
293
|
+
}
|
|
294
|
+
this._emitSelect();
|
|
295
|
+
}
|
|
296
|
+
_emitSelect() {
|
|
297
|
+
const v = this._itemStorage.value;
|
|
298
|
+
this.selectedRowsChangeEvent.emit(v);
|
|
299
|
+
}
|
|
300
|
+
isCellCheckbox(cell) {
|
|
301
|
+
return typeof cell == 'object' && '_ardCheckbox' in cell && 'index' in cell;
|
|
302
|
+
}
|
|
303
|
+
isHeaderCellCheckbox(cell) {
|
|
304
|
+
const dataCell = cell.cell;
|
|
305
|
+
if (isTableSubheader(dataCell))
|
|
306
|
+
return false;
|
|
307
|
+
if (typeof dataCell.dataSource == 'string')
|
|
308
|
+
return false;
|
|
309
|
+
return dataCell.dataSource.type == 'checkbox';
|
|
310
|
+
}
|
|
311
|
+
isHeaderCellSortable(cell) {
|
|
312
|
+
const dataCell = cell.cell;
|
|
313
|
+
if (isTableSubheader(dataCell))
|
|
314
|
+
return false;
|
|
315
|
+
return dataCell.sortable ?? false;
|
|
316
|
+
}
|
|
317
|
+
getHeaderContext(cell, index) {
|
|
318
|
+
if (typeof cell.header != 'string')
|
|
319
|
+
return null;
|
|
320
|
+
if (isTableSubheader(cell))
|
|
321
|
+
return {
|
|
322
|
+
$implicit: cell.header,
|
|
323
|
+
header: cell.header,
|
|
324
|
+
};
|
|
325
|
+
return {
|
|
326
|
+
$implicit: cell.header,
|
|
327
|
+
header: cell.header,
|
|
328
|
+
sortable: cell.sortable ?? false,
|
|
329
|
+
sortType: this._itemStorage.getColumnSortType(index),
|
|
330
|
+
onTriggerSort: (event) => this._itemStorage.toggleCurrentSortColumn(index),
|
|
331
|
+
onTriggerResetSort: (event) => {
|
|
332
|
+
this._itemStorage.resetSort();
|
|
333
|
+
event?.preventDefault();
|
|
334
|
+
event?.stopPropagation();
|
|
335
|
+
},
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
getHeaderCheckboxContext() {
|
|
339
|
+
let state = CheckboxState.Unselected;
|
|
340
|
+
if (this._itemStorage.isAnyItemSelected) {
|
|
341
|
+
state = CheckboxState.Indeterminate;
|
|
342
|
+
if (this._itemStorage.areAllSelected) {
|
|
343
|
+
state = CheckboxState.Selected;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
return {
|
|
347
|
+
$implicit: state,
|
|
348
|
+
state,
|
|
349
|
+
onChange: () => {
|
|
350
|
+
this.toggleAllRowsSelected();
|
|
351
|
+
},
|
|
352
|
+
};
|
|
353
|
+
}
|
|
354
|
+
getCheckboxContext(index) {
|
|
355
|
+
const item = this._itemStorage.items.find(v => v.index == index);
|
|
356
|
+
const selected = item.selected ?? false;
|
|
357
|
+
const disabled = item.disabled ?? false;
|
|
358
|
+
return {
|
|
359
|
+
$implicit: selected,
|
|
360
|
+
selected,
|
|
361
|
+
disabled,
|
|
362
|
+
onChange: () => {
|
|
363
|
+
this.onCheckboxClick(index);
|
|
364
|
+
},
|
|
365
|
+
};
|
|
366
|
+
}
|
|
367
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: ArdiumTableComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
368
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.7", type: ArdiumTableComponent, selector: "ard-table", inputs: { rowDisabledFrom: "rowDisabledFrom", rowBoldFrom: "rowBoldFrom", invertRowDisabled: "invertRowDisabled", invertRowBold: "invertRowBold", selectableRows: "selectableRows", caption: "caption", isLoading: "isLoading", loadingProgress: "loadingProgress", appearance: "appearance", variant: "variant", color: "color", align: "align", headerAlign: "headerAlign", compact: "compact", zebra: "zebra", stickyHeader: "stickyHeader", paginated: "paginated", paginationStrategy: "paginationStrategy", paginationOptions: "paginationOptions", totalItems: "totalItems", paginationColor: "paginationColor", paginationAlign: "paginationAlign", itemsPerPageText: "itemsPerPageText", currentItemsFormatFn: "currentItemsFormatFn", pageFillRemaining: "pageFillRemaining", paginationDisabled: "paginationDisabled", useFirstLastButtons: "useFirstLastButtons", itemsPerPage: "itemsPerPage", page: "page", columns: "columns", data: "data", treatDataSourceAsString: "treatDataSourceAsString" }, outputs: { itemsPerPageChange: "itemsPerPageChange", pageChange: "pageChange", selectedRowsChangeEvent: "selectedRowsChange", failedSelectRowEvent: "failedSelectRow", selectRowEvent: "selectRow", unselectRowEvent: "unselectRow" }, queries: [{ propertyName: "checkboxTemplate", first: true, predicate: ArdiumTableCheckboxTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "headerCheckboxTemplate", first: true, predicate: ArdiumTableHeaderCheckboxTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "captionTemplate", first: true, predicate: ArdiumTableCaptionTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "templateChildren", predicate: ArdiumTableTemplateDirective }], usesInheritance: true, ngImport: i0, template: "<table class=\"ard-table\" [ngClass]=\"ngClasses\">\r\n <caption\r\n *ngIf=\"caption\"\r\n class=\"ard-table__caption\"\r\n >\r\n <div class=\"ard-table__caption-container\">\r\n <ng-template #defaultCaptionTemplate let-captionText>\r\n {{ captionText }}\r\n </ng-template>\r\n \r\n <ng-template\r\n [ngTemplateOutlet]=\"captionTemplate ?? defaultCaptionTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: caption }\"\r\n />\r\n </div>\r\n </caption>\r\n <thead class=\"ard-table__header\">\r\n <tr class=\"ard-table__header-row\" *ngFor=\"let row of headerCells\">\r\n <th\r\n *ngFor=\"let cell of row; let index = index\"\r\n class=\"ard-table__header-cell\"\r\n [ngClass]=\"cell.cell.cellClass\"\r\n [class.ard-table__checkbox-cell]=\"isHeaderCellCheckbox(cell)\"\r\n [attr.colspan]=\"cell.colspan\"\r\n [attr.rowspan]=\"cell.rowspan\"\r\n [scope]=\"cell.colspan > 1 ? 'colgroup' : 'col'\"\r\n >\r\n <div\r\n class=\"ard-table__cell-container\"\r\n [class.ard-table__sortable]=\"isHeaderCellSortable(cell)\"\r\n [style.width]=\"cell.width\"\r\n [style.minWidth]=\"cell.minWidth\"\r\n >\r\n <ng-container *ngIf=\"isHeaderCellCheckbox(cell)\">\r\n <ng-template #defaultHeaderCheckboxTemplate let-state let-onChange=\"onChange\">\r\n <ard-checkbox [tabIndex]=\"isLoading ? -1 : tabIndex\" [state]=\"state\" [color]=\"getHeaderCheckboxColor()\" unselectedColor=\"currentColor\" (change)=\"onChange()\" />\r\n </ng-template>\r\n \r\n <ng-template\r\n [ngTemplateOutlet]=\"headerCheckboxTemplate ?? defaultHeaderCheckboxTemplate\"\r\n [ngTemplateOutletContext]=\"getHeaderCheckboxContext()\"\r\n />\r\n </ng-container>\r\n <ng-container *ngIf=\"!isHeaderCellCheckbox(cell)\">\r\n <ng-template\r\n #defaultHeaderCellTemplate\r\n let-content\r\n let-sortable=\"sortable\"\r\n let-sortType=\"sortType\"\r\n let-onTriggerSort=\"onTriggerSort\"\r\n let-onTriggerResetSort=\"onTriggerResetSort\"\r\n >\r\n <div\r\n class=\"ard-table__header-template-container\"\r\n [class.ard-sortable]=\"sortable\"\r\n [class.ard-nonsortable]=\"!sortable\"\r\n >\r\n <button\r\n class=\"ard-table__header-content-container\"\r\n *ngIf=\"sortable\"\r\n (click)=\"onTriggerSort($event)\"\r\n [tabindex]=\"tabIndex\"\r\n (keydown.Esc)=\"onTriggerResetSort($event)\"\r\n >\r\n <div class=\"ard-table__header-content\">{{ content }}</div>\r\n <div class=\"ard-table__header-sort-icon\" *ngIf=\"sortType != null\">\r\n <ard-icon *ngIf=\"sortType == 'ascending'\">south</ard-icon>\r\n <ard-icon *ngIf=\"sortType == 'descending'\">north</ard-icon>\r\n </div>\r\n </button>\r\n <div\r\n class=\"ard-table__header-content-container\"\r\n *ngIf=\"!sortable\"\r\n >\r\n <div class=\"ard-table__header-content\">{{ content }}</div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n \r\n <ng-template \r\n [ngTemplateOutlet]=\"getHeaderTemplate(cell.cell.header) ?? defaultHeaderCellTemplate\"\r\n [ngTemplateOutletContext]=\"getHeaderContext(cell.cell, index)\"\r\n />\r\n </ng-container>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"ard-table__body\">\r\n <ng-container *ngFor=\"let row of dataRows; let rowIndex = index;\">\r\n <tr *ngIf=\"row.isEmpty\" class=\"ard-table__empty-row\">\r\n <td class=\"ard-table__empty-cell\" colspan=\"9999\"></td>\r\n </tr>\r\n <tr\r\n *ngIf=\"!row.isEmpty\"\r\n class=\"ard-table__body-row\"\r\n [class.ard-table__selected-row]=\"row.selected\"\r\n [class.ard-table__highlighted-row]=\"row.highlighted\"\r\n [class.ard-table__disabled-row]=\"row.disabled\"\r\n [class.ard-table__bold-row]=\"row.bold\"\r\n (click)=\"onRowClick(rowIndex, $event)\"\r\n (mouseover)=\"onRowMouseOver($event)\"\r\n (mouseenter)=\"onRowMouseEnter(rowIndex, $event)\"\r\n (mouseleave)=\"onRowMouseLeave(rowIndex, $event)\"\r\n >\r\n <ng-container *ngFor=\"let cell of row.data; let cellIndex = index\">\r\n <ng-template #cellTmp>\r\n <div\r\n class=\"ard-table__cell-container\"\r\n [style]=\"getCellStyle(row.dataColumns[cellIndex])\"\r\n >\r\n <ng-container *ngIf=\"isCellCheckbox(cell)\">\r\n <ng-template #defaultCheckboxTemplate let-isChecked let-onChange=\"onChange\" let-disabled=\"disabled\">\r\n <ard-checkbox [tabIndex]=\"isLoading ? -1 : tabIndex\" [selected]=\"isChecked\" [color]=\"color\" [disabled]=\"disabled\" (change)=\"onChange()\" (click)=\"$event.stopPropagation()\" />\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"checkboxTemplate ?? defaultCheckboxTemplate\"\r\n [ngTemplateOutletContext]=\"getCheckboxContext(rowIndex)\"\r\n />\r\n </ng-container>\r\n <ng-container *ngIf=\"!isCellCheckbox(cell)\">\r\n <ng-template #defaultCellTemplate let-content>\r\n {{ content }}\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"getCellTemplate(row.dataColumns[cellIndex].template) ?? defaultCellTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: cell }\"\r\n />\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n <td\r\n *ngIf=\"!row.dataColumns[cellIndex].isRowHeader\"\r\n class=\"ard-table__body-cell\"\r\n [ngClass]=\"row.dataColumns[cellIndex].cellClass\"\r\n [class.ard-table__checkbox-cell]=\"isCellCheckbox(cell)\"\r\n >\r\n <ng-template [ngTemplateOutlet]=\"cellTmp\"></ng-template>\r\n </td>\r\n <th\r\n *ngIf=\"row.dataColumns[cellIndex].isRowHeader\"\r\n class=\"ard-table__body-cell ard-table__row-header\"\r\n scope=\"row\"\r\n [ngClass]=\"row.dataColumns[cellIndex].cellClass\"\r\n [class.ard-table__checkbox-cell]=\"isCellCheckbox(cell)\"\r\n >\r\n <ng-template [ngTemplateOutlet]=\"cellTmp\"></ng-template>\r\n </th>\r\n </ng-container>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n <tfoot class=\"ard-table__foot\" *ngIf=\"canDisplayPagination\">\r\n <tr class=\"ard-table__foot-row\">\r\n <td class=\"ard-table__pagination-cell\" colspan=\"9999\">\r\n <ard-table-pagination\r\n [options]=\"paginationOptions\"\r\n [(page)]=\"page\"\r\n [totalItems]=\"totalItems\"\r\n [disabled]=\"paginationDisabled\"\r\n [(itemsPerPage)]=\"itemsPerPage\"\r\n [align]=\"paginationAlign\"\r\n [isLoading]=\"isLoading\"\r\n [itemsPerPageText]=\"itemsPerPageText\"\r\n [currentItemsFormatFn]=\"currentItemsFormatFn\"\r\n (itemsPerPageChange)=\"itemsPerPageChange.emit($event)\"\r\n (pageChange)=\"pageChange.emit($event)\"\r\n ></ard-table-pagination>\r\n </td>\r\n </tr>\r\n </tfoot>\r\n</table>", styles: [".ard-table__cell-container,.ard-table__header-template-container{width:100%;height:100%}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ArdiumCheckboxComponent, selector: "ard-checkbox", inputs: ["wrapperClasses", "htmlId", "color", "unselectedColor", "state"], outputs: ["stateChange"] }, { kind: "component", type: i3.ArdiumTablePaginationComponent, selector: "ard-table-pagination", inputs: ["options", "itemsPerPage", "page", "totalItems", "color", "align", "compact", "useFirstLastButtons", "isLoading", "itemsPerPageText", "currentItemsFormatFn"], outputs: ["itemsPerPageChange", "pageChange"] }, { kind: "component", type: i4.ArdiumIconComponent, selector: "ard-icon", inputs: ["ariaLabel", "icon", "filled", "weight", "grade", "opticalSize"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
369
|
+
}
|
|
370
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: ArdiumTableComponent, decorators: [{
|
|
371
|
+
type: Component,
|
|
372
|
+
args: [{ selector: 'ard-table', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<table class=\"ard-table\" [ngClass]=\"ngClasses\">\r\n <caption\r\n *ngIf=\"caption\"\r\n class=\"ard-table__caption\"\r\n >\r\n <div class=\"ard-table__caption-container\">\r\n <ng-template #defaultCaptionTemplate let-captionText>\r\n {{ captionText }}\r\n </ng-template>\r\n \r\n <ng-template\r\n [ngTemplateOutlet]=\"captionTemplate ?? defaultCaptionTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: caption }\"\r\n />\r\n </div>\r\n </caption>\r\n <thead class=\"ard-table__header\">\r\n <tr class=\"ard-table__header-row\" *ngFor=\"let row of headerCells\">\r\n <th\r\n *ngFor=\"let cell of row; let index = index\"\r\n class=\"ard-table__header-cell\"\r\n [ngClass]=\"cell.cell.cellClass\"\r\n [class.ard-table__checkbox-cell]=\"isHeaderCellCheckbox(cell)\"\r\n [attr.colspan]=\"cell.colspan\"\r\n [attr.rowspan]=\"cell.rowspan\"\r\n [scope]=\"cell.colspan > 1 ? 'colgroup' : 'col'\"\r\n >\r\n <div\r\n class=\"ard-table__cell-container\"\r\n [class.ard-table__sortable]=\"isHeaderCellSortable(cell)\"\r\n [style.width]=\"cell.width\"\r\n [style.minWidth]=\"cell.minWidth\"\r\n >\r\n <ng-container *ngIf=\"isHeaderCellCheckbox(cell)\">\r\n <ng-template #defaultHeaderCheckboxTemplate let-state let-onChange=\"onChange\">\r\n <ard-checkbox [tabIndex]=\"isLoading ? -1 : tabIndex\" [state]=\"state\" [color]=\"getHeaderCheckboxColor()\" unselectedColor=\"currentColor\" (change)=\"onChange()\" />\r\n </ng-template>\r\n \r\n <ng-template\r\n [ngTemplateOutlet]=\"headerCheckboxTemplate ?? defaultHeaderCheckboxTemplate\"\r\n [ngTemplateOutletContext]=\"getHeaderCheckboxContext()\"\r\n />\r\n </ng-container>\r\n <ng-container *ngIf=\"!isHeaderCellCheckbox(cell)\">\r\n <ng-template\r\n #defaultHeaderCellTemplate\r\n let-content\r\n let-sortable=\"sortable\"\r\n let-sortType=\"sortType\"\r\n let-onTriggerSort=\"onTriggerSort\"\r\n let-onTriggerResetSort=\"onTriggerResetSort\"\r\n >\r\n <div\r\n class=\"ard-table__header-template-container\"\r\n [class.ard-sortable]=\"sortable\"\r\n [class.ard-nonsortable]=\"!sortable\"\r\n >\r\n <button\r\n class=\"ard-table__header-content-container\"\r\n *ngIf=\"sortable\"\r\n (click)=\"onTriggerSort($event)\"\r\n [tabindex]=\"tabIndex\"\r\n (keydown.Esc)=\"onTriggerResetSort($event)\"\r\n >\r\n <div class=\"ard-table__header-content\">{{ content }}</div>\r\n <div class=\"ard-table__header-sort-icon\" *ngIf=\"sortType != null\">\r\n <ard-icon *ngIf=\"sortType == 'ascending'\">south</ard-icon>\r\n <ard-icon *ngIf=\"sortType == 'descending'\">north</ard-icon>\r\n </div>\r\n </button>\r\n <div\r\n class=\"ard-table__header-content-container\"\r\n *ngIf=\"!sortable\"\r\n >\r\n <div class=\"ard-table__header-content\">{{ content }}</div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n \r\n <ng-template \r\n [ngTemplateOutlet]=\"getHeaderTemplate(cell.cell.header) ?? defaultHeaderCellTemplate\"\r\n [ngTemplateOutletContext]=\"getHeaderContext(cell.cell, index)\"\r\n />\r\n </ng-container>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"ard-table__body\">\r\n <ng-container *ngFor=\"let row of dataRows; let rowIndex = index;\">\r\n <tr *ngIf=\"row.isEmpty\" class=\"ard-table__empty-row\">\r\n <td class=\"ard-table__empty-cell\" colspan=\"9999\"></td>\r\n </tr>\r\n <tr\r\n *ngIf=\"!row.isEmpty\"\r\n class=\"ard-table__body-row\"\r\n [class.ard-table__selected-row]=\"row.selected\"\r\n [class.ard-table__highlighted-row]=\"row.highlighted\"\r\n [class.ard-table__disabled-row]=\"row.disabled\"\r\n [class.ard-table__bold-row]=\"row.bold\"\r\n (click)=\"onRowClick(rowIndex, $event)\"\r\n (mouseover)=\"onRowMouseOver($event)\"\r\n (mouseenter)=\"onRowMouseEnter(rowIndex, $event)\"\r\n (mouseleave)=\"onRowMouseLeave(rowIndex, $event)\"\r\n >\r\n <ng-container *ngFor=\"let cell of row.data; let cellIndex = index\">\r\n <ng-template #cellTmp>\r\n <div\r\n class=\"ard-table__cell-container\"\r\n [style]=\"getCellStyle(row.dataColumns[cellIndex])\"\r\n >\r\n <ng-container *ngIf=\"isCellCheckbox(cell)\">\r\n <ng-template #defaultCheckboxTemplate let-isChecked let-onChange=\"onChange\" let-disabled=\"disabled\">\r\n <ard-checkbox [tabIndex]=\"isLoading ? -1 : tabIndex\" [selected]=\"isChecked\" [color]=\"color\" [disabled]=\"disabled\" (change)=\"onChange()\" (click)=\"$event.stopPropagation()\" />\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"checkboxTemplate ?? defaultCheckboxTemplate\"\r\n [ngTemplateOutletContext]=\"getCheckboxContext(rowIndex)\"\r\n />\r\n </ng-container>\r\n <ng-container *ngIf=\"!isCellCheckbox(cell)\">\r\n <ng-template #defaultCellTemplate let-content>\r\n {{ content }}\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"getCellTemplate(row.dataColumns[cellIndex].template) ?? defaultCellTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: cell }\"\r\n />\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n <td\r\n *ngIf=\"!row.dataColumns[cellIndex].isRowHeader\"\r\n class=\"ard-table__body-cell\"\r\n [ngClass]=\"row.dataColumns[cellIndex].cellClass\"\r\n [class.ard-table__checkbox-cell]=\"isCellCheckbox(cell)\"\r\n >\r\n <ng-template [ngTemplateOutlet]=\"cellTmp\"></ng-template>\r\n </td>\r\n <th\r\n *ngIf=\"row.dataColumns[cellIndex].isRowHeader\"\r\n class=\"ard-table__body-cell ard-table__row-header\"\r\n scope=\"row\"\r\n [ngClass]=\"row.dataColumns[cellIndex].cellClass\"\r\n [class.ard-table__checkbox-cell]=\"isCellCheckbox(cell)\"\r\n >\r\n <ng-template [ngTemplateOutlet]=\"cellTmp\"></ng-template>\r\n </th>\r\n </ng-container>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n <tfoot class=\"ard-table__foot\" *ngIf=\"canDisplayPagination\">\r\n <tr class=\"ard-table__foot-row\">\r\n <td class=\"ard-table__pagination-cell\" colspan=\"9999\">\r\n <ard-table-pagination\r\n [options]=\"paginationOptions\"\r\n [(page)]=\"page\"\r\n [totalItems]=\"totalItems\"\r\n [disabled]=\"paginationDisabled\"\r\n [(itemsPerPage)]=\"itemsPerPage\"\r\n [align]=\"paginationAlign\"\r\n [isLoading]=\"isLoading\"\r\n [itemsPerPageText]=\"itemsPerPageText\"\r\n [currentItemsFormatFn]=\"currentItemsFormatFn\"\r\n (itemsPerPageChange)=\"itemsPerPageChange.emit($event)\"\r\n (pageChange)=\"pageChange.emit($event)\"\r\n ></ard-table-pagination>\r\n </td>\r\n </tr>\r\n </tfoot>\r\n</table>", styles: [".ard-table__cell-container,.ard-table__header-template-container{width:100%;height:100%}\n"] }]
|
|
373
|
+
}], propDecorators: { rowDisabledFrom: [{
|
|
374
|
+
type: Input
|
|
375
|
+
}], rowBoldFrom: [{
|
|
376
|
+
type: Input
|
|
377
|
+
}], invertRowDisabled: [{
|
|
378
|
+
type: Input
|
|
379
|
+
}], invertRowBold: [{
|
|
380
|
+
type: Input
|
|
381
|
+
}], selectableRows: [{
|
|
382
|
+
type: Input
|
|
383
|
+
}], caption: [{
|
|
384
|
+
type: Input
|
|
385
|
+
}], isLoading: [{
|
|
386
|
+
type: Input
|
|
387
|
+
}], loadingProgress: [{
|
|
388
|
+
type: Input
|
|
389
|
+
}], appearance: [{
|
|
390
|
+
type: Input
|
|
391
|
+
}], variant: [{
|
|
392
|
+
type: Input
|
|
393
|
+
}], color: [{
|
|
394
|
+
type: Input
|
|
395
|
+
}], align: [{
|
|
396
|
+
type: Input
|
|
397
|
+
}], headerAlign: [{
|
|
398
|
+
type: Input
|
|
399
|
+
}], compact: [{
|
|
400
|
+
type: Input
|
|
401
|
+
}], zebra: [{
|
|
402
|
+
type: Input
|
|
403
|
+
}], stickyHeader: [{
|
|
404
|
+
type: Input
|
|
405
|
+
}], paginated: [{
|
|
406
|
+
type: Input
|
|
407
|
+
}], paginationStrategy: [{
|
|
408
|
+
type: Input
|
|
409
|
+
}], paginationOptions: [{
|
|
410
|
+
type: Input
|
|
411
|
+
}], totalItems: [{
|
|
412
|
+
type: Input
|
|
413
|
+
}], paginationColor: [{
|
|
414
|
+
type: Input
|
|
415
|
+
}], paginationAlign: [{
|
|
416
|
+
type: Input
|
|
417
|
+
}], itemsPerPageText: [{
|
|
418
|
+
type: Input
|
|
419
|
+
}], currentItemsFormatFn: [{
|
|
420
|
+
type: Input
|
|
421
|
+
}], pageFillRemaining: [{
|
|
422
|
+
type: Input
|
|
423
|
+
}], paginationDisabled: [{
|
|
424
|
+
type: Input
|
|
425
|
+
}], useFirstLastButtons: [{
|
|
426
|
+
type: Input
|
|
427
|
+
}], itemsPerPage: [{
|
|
428
|
+
type: Input
|
|
429
|
+
}], itemsPerPageChange: [{
|
|
430
|
+
type: Output
|
|
431
|
+
}], page: [{
|
|
432
|
+
type: Input
|
|
433
|
+
}], pageChange: [{
|
|
434
|
+
type: Output
|
|
435
|
+
}], columns: [{
|
|
436
|
+
type: Input
|
|
437
|
+
}], data: [{
|
|
438
|
+
type: Input
|
|
439
|
+
}], treatDataSourceAsString: [{
|
|
440
|
+
type: Input
|
|
441
|
+
}], checkboxTemplate: [{
|
|
442
|
+
type: ContentChild,
|
|
443
|
+
args: [ArdiumTableCheckboxTemplateDirective, { read: TemplateRef }]
|
|
444
|
+
}], headerCheckboxTemplate: [{
|
|
445
|
+
type: ContentChild,
|
|
446
|
+
args: [ArdiumTableHeaderCheckboxTemplateDirective, {
|
|
447
|
+
read: TemplateRef,
|
|
448
|
+
}]
|
|
449
|
+
}], captionTemplate: [{
|
|
450
|
+
type: ContentChild,
|
|
451
|
+
args: [ArdiumTableCaptionTemplateDirective, { read: TemplateRef }]
|
|
452
|
+
}], templateChildren: [{
|
|
453
|
+
type: ContentChildren,
|
|
454
|
+
args: [ArdiumTableTemplateDirective]
|
|
455
|
+
}], selectedRowsChangeEvent: [{
|
|
456
|
+
type: Output,
|
|
457
|
+
args: ['selectedRowsChange']
|
|
458
|
+
}], failedSelectRowEvent: [{
|
|
459
|
+
type: Output,
|
|
460
|
+
args: ['failedSelectRow']
|
|
461
|
+
}], selectRowEvent: [{
|
|
462
|
+
type: Output,
|
|
463
|
+
args: ['selectRow']
|
|
464
|
+
}], unselectRowEvent: [{
|
|
465
|
+
type: Output,
|
|
466
|
+
args: ['unselectRow']
|
|
467
|
+
}] } });
|
|
468
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBRU4sV0FBVyxFQUNYLGlCQUFpQixHQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQXdCLGVBQWUsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ25HLE9BQU8sRUFBRSxjQUFjLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RSxPQUFPLEVBQTJCLGdCQUFnQixFQUF3QixNQUFNLHNCQUFzQixDQUFDO0FBQ3ZHLE9BQU8sRUFDSCxtQ0FBbUMsRUFDbkMsb0NBQW9DLEVBQ3BDLDBDQUEwQyxFQUMxQyw0QkFBNEIsR0FDL0IsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBRUgsY0FBYyxFQUNkLGVBQWUsRUFNZix1QkFBdUIsRUFFdkIsWUFBWSxHQUVmLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7Ozs7O0FBUzNDLE1BQU0sT0FBTyxv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QkFPSSxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBSUgsSUFBSTtzQkFEUCxLQUFLO2dCQU9JLFVBQVU7c0JBQW5CLE1BQU07Z0JBc0NILE9BQU87c0JBRFYsS0FBSztnQkFNRixJQUFJO3NCQURQLEtBQUs7Z0JBV0YsdUJBQXVCO3NCQUQxQixLQUFLO2dCQVVOLGdCQUFnQjtzQkFEZixZQUFZO3VCQUFDLG9DQUFvQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFLekUsc0JBQXNCO3NCQUhyQixZQUFZO3VCQUFDLDBDQUEwQyxFQUFFO3dCQUN0RCxJQUFJLEVBQUUsV0FBVztxQkFDcEI7Z0JBR0QsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLG1DQUFtQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFLeEUsZ0JBQWdCO3NCQURmLGVBQWU7dUJBQUMsNEJBQTRCO2dCQW1IZix1QkFBdUI7c0JBQXBELE1BQU07dUJBQUMsb0JBQW9CO2dCQUNELG9CQUFvQjtzQkFBOUMsTUFBTTt1QkFBQyxpQkFBaUI7Z0JBQ0osY0FBYztzQkFBbEMsTUFBTTt1QkFBQyxXQUFXO2dCQUNJLGdCQUFnQjtzQkFBdEMsTUFBTTt1QkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSwgY29lcmNlTnVtYmVyUHJvcGVydHkgfSBmcm9tICdAYXJkaXVtLXVpL2RldmtpdCc7XG5pbXBvcnQgeyBpc0RlZmluZWQgfSBmcm9tICdzaW1wbGUtYm9vbCc7XG5pbXBvcnQgeyBfRm9jdXNhYmxlQ29tcG9uZW50QmFzZSB9IGZyb20gJy4uL19pbnRlcm5hbC9mb2N1c2FibGUtY29tcG9uZW50JztcbmltcG9ydCB7IENoZWNrYm94U3RhdGUgfSBmcm9tICcuLi9jaGVja2JveC9jaGVja2JveC50eXBlcyc7XG5pbXBvcnQgeyBDdXJyZW50SXRlbXNGb3JtYXRGbiwgUGFnaW5hdGlvbkFsaWduIH0gZnJvbSAnLi4vdGFibGUtcGFnaW5hdGlvbi90YWJsZS1wYWdpbmF0aW9uLnR5cGVzJztcbmltcG9ydCB7IENvbXBvbmVudENvbG9yLCBTaW1wbGVDb21wb25lbnRDb2xvciB9IGZyb20gJy4uL3R5cGVzL2NvbG9ycy50eXBlcyc7XG5pbXBvcnQgeyBBcmRUYWJsZVJvdywgSGVhZGVyQ2VsbCwgVGFibGVJdGVtU3RvcmFnZSwgVGFibGVJdGVtU3RvcmFnZUhvc3QgfSBmcm9tICcuL3RhYmxlLWl0ZW0tc3RvcmFnZSc7XG5pbXBvcnQge1xuICAgIEFyZGl1bVRhYmxlQ2FwdGlvblRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIEFyZGl1bVRhYmxlQ2hlY2tib3hUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBBcmRpdW1UYWJsZUhlYWRlckNoZWNrYm94VGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgQXJkaXVtVGFibGVUZW1wbGF0ZURpcmVjdGl2ZSxcbn0gZnJvbSAnLi90YWJsZS5kaXJlY3RpdmVzJztcbmltcG9ydCB7XG4gICAgU29ydFR5cGUsXG4gICAgVGFibGVBbGlnblR5cGUsXG4gICAgVGFibGVBcHBlYXJhbmNlLFxuICAgIFRhYmxlQ2FwdGlvbkNvbnRleHQsXG4gICAgVGFibGVDaGVja2JveENvbnRleHQsXG4gICAgVGFibGVEYXRhQ29sdW1uLFxuICAgIFRhYmxlSGVhZGVyQ2hlY2tib3hDb250ZXh0LFxuICAgIFRhYmxlSGVhZGVyQ29udGV4dCxcbiAgICBUYWJsZVBhZ2luYXRpb25TdHJhdGVneSxcbiAgICBUYWJsZVN1YmhlYWRlcixcbiAgICBUYWJsZVZhcmlhbnQsXG4gICAgVGFibGVTdWJoZWFkZXJDb250ZXh0LFxufSBmcm9tICcuL3RhYmxlLnR5cGVzJztcbmltcG9ydCB7IGlzVGFibGVTdWJoZWFkZXIgfSBmcm9tICcuL3V0aWxzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcmQtdGFibGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBBcmRpdW1UYWJsZUNvbXBvbmVudCBleHRlbmRzIF9Gb2N1c2FibGVDb21wb25lbnRCYXNlIGltcGxlbWVudHMgVGFibGVJdGVtU3RvcmFnZUhvc3QsIEFmdGVyQ29udGVudEluaXQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2l0ZW1TdG9yYWdlID0gbmV3IFRhYmxlSXRlbVN0b3JhZ2UodGhpcyk7XG5cbiAgICByZWFkb25seSBERUZBVUxUUyA9IHtcbiAgICAgICAgcm93RGlzYWJsZWRGcm9tOiAnZGlzYWJsZWQnLFxuICAgICAgICByb3dCb2xkRnJvbTogJ2JvbGQnLFxuICAgIH07XG5cbiAgICBASW5wdXQoKSByb3dEaXNhYmxlZEZyb20/OiBzdHJpbmc7XG4gICAgQElucHV0KCkgcm93Qm9sZEZyb20/OiBzdHJpbmc7XG5cbiAgICBwcml2YXRlIF9pbnZlcnRSb3dEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGludmVydFJvd0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52ZXJ0Um93RGlzYWJsZWQ7XG4gICAgfVxuICAgIHNldCBpbnZlcnRSb3dEaXNhYmxlZCh2OiBhbnkpIHtcbiAgICAgICAgdGhpcy5faW52ZXJ0Um93RGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW52ZXJ0Um93Qm9sZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGludmVydFJvd0JvbGQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnZlcnRSb3dCb2xkO1xuICAgIH1cbiAgICBzZXQgaW52ZXJ0Um93Qm9sZCh2OiBhbnkpIHtcbiAgICAgICAgdGhpcy5faW52ZXJ0Um93Qm9sZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZWxlY3RhYmxlUm93czogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHNlbGVjdGFibGVSb3dzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0YWJsZVJvd3M7XG4gICAgfVxuICAgIHNldCBzZWxlY3RhYmxlUm93cyh2OiBhbnkpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0YWJsZVJvd3MgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodik7XG4gICAgfVxuXG4gICAgQElucHV0KCkgY2FwdGlvbj86IHN0cmluZztcblxuICAgIEBJbnB1dCgpIGlzTG9hZGluZz86IGJvb2xlYW47XG4gICAgQElucHV0KCkgbG9hZGluZ1Byb2dyZXNzPzogbnVtYmVyOyAvL1RPRE8gYWRkIHByb2dyZXNzIGJhclxuXG4gICAgLy8hIGFwcGVhcmFuY2VcbiAgICBASW5wdXQoKSBhcHBlYXJhbmNlOiBUYWJsZUFwcGVhcmFuY2UgPSBUYWJsZUFwcGVhcmFuY2UuU3Ryb25nO1xuICAgIEBJbnB1dCgpIHZhcmlhbnQ6IFRhYmxlVmFyaWFudCA9IFRhYmxlVmFyaWFudC5Sb3VuZGVkO1xuICAgIEBJbnB1dCgpIGNvbG9yOiBDb21wb25lbnRDb2xvciA9IENvbXBvbmVudENvbG9yLlByaW1hcnk7XG4gICAgQElucHV0KCkgYWxpZ246IFRhYmxlQWxpZ25UeXBlID0gVGFibGVBbGlnblR5cGUuQ2VudGVyTGVmdDtcbiAgICBASW5wdXQoKSBoZWFkZXJBbGlnbjogVGFibGVBbGlnblR5cGUgPSBUYWJsZUFsaWduVHlwZS5DZW50ZXJMZWZ0O1xuXG4gICAgcHJpdmF0ZSBfY29tcGFjdDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGNvbXBhY3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb21wYWN0O1xuICAgIH1cbiAgICBzZXQgY29tcGFjdCh2OiBhbnkpIHtcbiAgICAgICAgdGhpcy5fY29tcGFjdCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF96ZWJyYTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHplYnJhKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5femVicmE7XG4gICAgfVxuICAgIHNldCB6ZWJyYSh2OiBhbnkpIHtcbiAgICAgICAgdGhpcy5femVicmEgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc3RpY2t5SGVhZGVyOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgc3RpY2t5SGVhZGVyKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RpY2t5SGVhZGVyO1xuICAgIH1cbiAgICBzZXQgc3RpY2t5SGVhZGVyKHY6IGFueSkge1xuICAgICAgICB0aGlzLl9zdGlja3lIZWFkZXIgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodik7XG4gICAgfVxuXG4gICAgZ2V0IG5nQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgYGFyZC1hcHBlYXJhbmNlLSR7dGhpcy5hcHBlYXJhbmNlfWAsXG4gICAgICAgICAgICBgYXJkLXZhcmlhbnQtJHt0aGlzLnZhcmlhbnR9YCxcbiAgICAgICAgICAgIGBhcmQtY29sb3ItJHt0aGlzLmNvbG9yfWAsXG4gICAgICAgICAgICBgYXJkLWFsaWduLSR7dGhpcy5hbGlnbn1gLFxuICAgICAgICAgICAgYGFyZC1oZWFkZXItYWxpZ24tJHt0aGlzLmhlYWRlckFsaWdufWAsXG4gICAgICAgICAgICB0aGlzLmNvbXBhY3QgPyAnYXJkLWNvbXBhY3QnIDogJycsXG4gICAgICAgICAgICB0aGlzLnplYnJhID8gJ2FyZC16ZWJyYS10YWJsZScgOiAnJyxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0YWJsZVJvd3MgPyAnYXJkLXNlbGVjdGFibGUtcm93cycgOiAnJyxcbiAgICAgICAgICAgIHRoaXMuc3RpY2t5SGVhZGVyID8gJ2FyZC1zdGlja3ktaGVhZGVyJyA6ICcnLFxuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPyAnYXJkLXRhYmxlLWxvYWRpbmcnIDogJycsXG4gICAgICAgIF0uam9pbignICcpO1xuICAgIH1cblxuICAgIC8vISBwYWdpbmF0aW9uXG4gICAgcHJpdmF0ZSBfcGFnaW5hdGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgcGFnaW5hdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFnaW5hdGVkO1xuICAgIH1cbiAgICBzZXQgcGFnaW5hdGVkKHY6IGFueSkge1xuICAgICAgICB0aGlzLl9wYWdpbmF0ZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodik7XG4gICAgfVxuXG4gICAgQElucHV0KCkgcGFnaW5hdGlvblN0cmF0ZWd5OiBUYWJsZVBhZ2luYXRpb25TdHJhdGVneSA9IFRhYmxlUGFnaW5hdGlvblN0cmF0ZWd5Lk5vb3A7XG5cbiAgICBASW5wdXQoKSBwYWdpbmF0aW9uT3B0aW9uczogbnVtYmVyW10gfCB7IHZhbHVlOiBudW1iZXI7IGxhYmVsOiBzdHJpbmcgfVtdID0gWzEwLCAyNSwgNTBdO1xuICAgIEBJbnB1dCgpIHRvdGFsSXRlbXM/OiBudW1iZXI7XG4gICAgQElucHV0KCkgcGFnaW5hdGlvbkNvbG9yOiBDb21wb25lbnRDb2xvciA9IENvbXBvbmVudENvbG9yLk5vbmU7XG4gICAgQElucHV0KCkgcGFnaW5hdGlvbkFsaWduOiBQYWdpbmF0aW9uQWxpZ24gPSBQYWdpbmF0aW9uQWxpZ24uU3BsaXQ7XG4gICAgQElucHV0KCkgaXRlbXNQZXJQYWdlVGV4dDogc3RyaW5nID0gJ0l0ZW1zIHBlciBwYWdlOic7XG4gICAgQElucHV0KCkgY3VycmVudEl0ZW1zRm9ybWF0Rm46IEN1cnJlbnRJdGVtc0Zvcm1hdEZuID0gKHsgY3VycmVudEl0ZW1zRmlyc3QsIGN1cnJlbnRJdGVtc0xhc3QsIHRvdGFsSXRlbXMgfSkgPT4ge1xuICAgICAgICByZXR1cm4gYCR7Y3VycmVudEl0ZW1zRmlyc3R9IOKAkyAke2N1cnJlbnRJdGVtc0xhc3R9IG9mICR7dG90YWxJdGVtc31gO1xuICAgIH07XG5cbiAgICBwcml2YXRlIF9wYWdlRmlsbFJlbWFpbmluZzogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHBhZ2VGaWxsUmVtYWluaW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFnZUZpbGxSZW1haW5pbmc7XG4gICAgfVxuICAgIHNldCBwYWdlRmlsbFJlbWFpbmluZyh2OiBhbnkpIHtcbiAgICAgICAgdGhpcy5fcGFnZUZpbGxSZW1haW5pbmcgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcGFnaW5hdGlvbkRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgcGFnaW5hdGlvbkRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFnaW5hdGlvbkRpc2FibGVkO1xuICAgIH1cbiAgICBzZXQgcGFnaW5hdGlvbkRpc2FibGVkKHY6IGFueSkge1xuICAgICAgICB0aGlzLl9wYWdpbmF0aW9uRGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdXNlRmlyc3RMYXN0QnV0dG9uczogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHVzZUZpcnN0TGFzdEJ1dHRvbnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl91c2VGaXJzdExhc3RCdXR0b25zO1xuICAgIH1cbiAgICBzZXQgdXNlRmlyc3RMYXN0QnV0dG9ucyh2OiBhbnkpIHtcbiAgICAgICAgdGhpcy5fdXNlRmlyc3RMYXN0QnV0dG9ucyA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pdGVtc1BlclBhZ2U6IG51bWJlciA9IDUwO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGl0ZW1zUGVyUGFnZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5faXRlbXNQZXJQYWdlO1xuICAgIH1cbiAgICBzZXQgaXRlbXNQZXJQYWdlKHY6IGFueSkge1xuICAgICAgICB0aGlzLl9pdGVtc1BlclBhZ2UgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2KTtcbiAgICB9XG4gICAgQE91dHB1dCgpIGl0ZW1zUGVyUGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gICAgcHJpdmF0ZSBfcGFnZTogbnVtYmVyID0gMTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBwYWdlKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYWdlO1xuICAgIH1cbiAgICBzZXQgcGFnZSh2OiBhbnkpIHtcbiAgICAgICAgdGhpcy5fcGFnZSA9IGNvZXJjZU51bWJlclByb3BlcnR5KHYpO1xuICAgIH1cbiAgICBAT3V0cHV0KCkgcGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gICAgZ2V0IGlzRGVmaW5lZFRvdGFsSXRlbXMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAodGhpcy5wYWdpbmF0aW9uU3RyYXRlZ3kgPT0gVGFibGVQYWdpbmF0aW9uU3RyYXRlZ3kuTm9vcCAmJiBpc0RlZmluZWQodGhpcy50b3RhbEl0ZW1zKSkgfHwgdGhpcy5wYWdpbmF0aW9uU3RyYXRlZ3kgIT0gVGFibGVQYWdpbmF0aW9uU3RyYXRlZ3kuTm9vcFxuICAgICAgICApO1xuICAgIH1cbiAgICBnZXQgY2FuRGlzcGxheVBhZ2luYXRpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIC8vcHJldHRpZXItaWdub3JlXG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2luYXRlZCAmJiB0aGlzLmlzRGVmaW5lZFRvdGFsSXRlbXM7XG4gICAgfVxuXG4gICAgLy8hIGl0ZW0gc3RvcmFnZSBnZXR0ZXJzXG4gICAgZ2V0IGhlYWRlckNlbGxzKCk6IEhlYWRlckNlbGxbXVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1TdG9yYWdlLmhlYWRlckNlbGxzO1xuICAgIH1cbiAgICBnZXQgZGF0YVJvd3MoKTogQXJkVGFibGVSb3dbXSB7XG4gICAgICAgIGNvbnN0IGl0ZW1zOiBBcmRUYWJsZVJvd1tdID0gdGhpcy5faXRlbVN0b3JhZ2UucGFnaW5hdGVkSXRlbXM7XG5cbiAgICAgICAgaWYgKCF0aGlzLnBhZ2VGaWxsUmVtYWluaW5nKSByZXR1cm4gaXRlbXM7XG4gICAgICAgIGlmICghdGhpcy5pc0RlZmluZWRUb3RhbEl0ZW1zKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJzxhcmQtdGFibGU+IHJlcXVpcmVzIFt0b3RhbEl0ZW1zXSB0byBiZSBkZWZpbmVkLicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBhZ2UgPT0gMSkgcmV0dXJuIGl0ZW1zO1xuICAgICAgICBmb3IgKGxldCBpID0gaXRlbXMubGVuZ3RoOyBpIDwgdGhpcy5pdGVtc1BlclBhZ2U7IGkrKykge1xuICAgICAgICAgICAgaXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgaXRlbURhdGE6IG51bGwsXG4gICAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgICAgZGF0YTogW10sXG4gICAgICAgICAgICAgICAgZGF0YUNvbHVtbnM6IFtdLFxuICAgICAgICAgICAgICAgIGlzRW1wdHk6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuXG4gICAgLy8hIGNvbHVtbnMvZGF0YSBzZXR0ZXJzXG4gICAgQElucHV0KClcbiAgICBzZXQgY29sdW1ucyh2OiAoVGFibGVEYXRhQ29sdW1uIHwgVGFibGVTdWJoZWFkZXIpW10pIHtcbiAgICAgICAgdGhpcy5faXRlbVN0b3JhZ2Uuc2V0Q29sdW1ucyh2KTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfZGF0YTogYW55W10gPSBbXTtcbiAgICBASW5wdXQoKVxuICAgIHNldCBkYXRhKHY6IGFueVtdKSB7XG4gICAgICAgIHRoaXMuX2RhdGEgPSB2O1xuICAgICAgICB0aGlzLl9pdGVtU3RvcmFnZS5zZXRJdGVtcyh2KTtcbiAgICB9XG4gICAgZ2V0IGRhdGEoKTogYW55W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF90cmVhdERhdGFTb3VyY2VBc1N0cmluZzogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHRyZWF0RGF0YVNvdXJjZUFzU3RyaW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHJlYXREYXRhU291cmNlQXNTdHJpbmc7XG4gICAgfVxuICAgIHNldCB0cmVhdERhdGFTb3VyY2VBc1N0cmluZyh2OiBhbnkpIHtcbiAgICAgICAgdGhpcy5fdHJlYXREYXRhU291cmNlQXNTdHJpbmcgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodik7XG4gICAgfVxuXG4gICAgLy8hIHRlbXBsYXRlc1xuICAgIEBDb250ZW50Q2hpbGQoQXJkaXVtVGFibGVDaGVja2JveFRlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gICAgY2hlY2tib3hUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPFRhYmxlQ2hlY2tib3hDb250ZXh0PjtcbiAgICBAQ29udGVudENoaWxkKEFyZGl1bVRhYmxlSGVhZGVyQ2hlY2tib3hUZW1wbGF0ZURpcmVjdGl2ZSwge1xuICAgICAgICByZWFkOiBUZW1wbGF0ZVJlZixcbiAgICB9KVxuICAgIGhlYWRlckNoZWNrYm94VGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxUYWJsZUhlYWRlckNoZWNrYm94Q29udGV4dD47XG4gICAgQENvbnRlbnRDaGlsZChBcmRpdW1UYWJsZUNhcHRpb25UZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICAgIGNhcHRpb25UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPFRhYmxlQ2FwdGlvbkNvbnRleHQ+O1xuXG4gICAgcHJpdmF0ZSBfaXRlbVRlbXBsYXRlczogeyBba2V5OiBzdHJpbmddOiBUZW1wbGF0ZVJlZjxhbnk+IH0gPSB7fTtcbiAgICBAQ29udGVudENoaWxkcmVuKEFyZGl1bVRhYmxlVGVtcGxhdGVEaXJlY3RpdmUpXG4gICAgdGVtcGxhdGVDaGlsZHJlbiE6IFF1ZXJ5TGlzdDxBcmRpdW1UYWJsZVRlbXBsYXRlRGlyZWN0aXZlPjtcblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGVtcGxhdGVzID0gQXJyYXkuZnJvbSh0aGlzLnRlbXBsYXRlQ2hpbGRyZW4pO1xuICAgICAgICBmb3IgKGNvbnN0IGluc3RhbmNlIG9mIHRlbXBsYXRlcykge1xuICAgICAgICAgICAgaWYgKCFpbnN0YW5jZS5uYW1lKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihuZXcgRXJyb3IoJ1thcmQtdGFibGUtdG1wXSByZXF1aXJlcyBhIHZhbHVlIHRvIGJlIHNwZWNpZmllZC4nKSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9pdGVtVGVtcGxhdGVzW2luc3RhbmNlLm5hbWVdID0gaW5zdGFuY2UudGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRIZWFkZXJUZW1wbGF0ZSh0bXA6IHN0cmluZyB8IHsgdGVtcGxhdGU6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4gfSk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAodHlwZW9mIHRtcCA9PSAnc3RyaW5nJykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2VsbFRlbXBsYXRlKHRtcC50ZW1wbGF0ZSk7XG4gICAgfVxuICAgIGdldEhlYWRlckNoZWNrYm94Q29sb3IoKTogU2ltcGxlQ29tcG9uZW50Q29sb3Ige1xuICAgICAgICBpZiAodGhpcy5hcHBlYXJhbmNlID09IFRhYmxlQXBwZWFyYW5jZS5TdHJvbmcpIHJldHVybiBTaW1wbGVDb21wb25lbnRDb2xvci5DdXJyZW50Q29sb3I7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbG9yO1xuICAgIH1cbiAgICBnZXRDZWxsVGVtcGxhdGUodG1wPzogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pik6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgICAgICAvL3JldHVybiB1bmRlZmluZWRcbiAgICAgICAgaWYgKCF0bXApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIC8vcmV0dXJuIHRlbXBsYXRlLCBpZiBpdCBpcyBvbmVcbiAgICAgICAgaWYgKHRtcCBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSByZXR1cm4gdG1wO1xuICAgICAgICAvL2NoZWNrIGlmIHRoZSBuYW1lIGNhbiBiZSBmb3VuZFxuICAgICAgICBpZiAoISh0bXAgaW4gdGhpcy5faXRlbVRlbXBsYXRlcykpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IobmV3IEVycm9yKGA8YXJkLXRhYmxlPiBlcnJvcjogY2Fubm90IGZpbmQgdGVtcGxhdGUgbmFtZWQgXCIke3RtcH1cImApKTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy9yZXR1cm4gdGhlIHRlbXBsYXRlXG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtVGVtcGxhdGVzW3RtcF07XG4gICAgfVxuICAgIGdldENlbGxTdHlsZShjZWxsOiBUYWJsZURhdGFDb2x1bW4gfCBUYWJsZVN1YmhlYWRlcik6IHN0cmluZyB7XG4gICAgICAgIGlmIChpc1RhYmxlU3ViaGVhZGVyKGNlbGwpKSByZXR1cm4gJ3dpZHRoOnVuc2V0O21pbi13aWR0aDp1bnNldCc7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gdHlwZW9mIGNlbGwud2lkdGggPT0gJ251bWJlcicgPyBgJHtjZWxsLndpZHRofXB4YCA6IGNlbGwud2lkdGg7XG4gICAgICAgIGNvbnN0IG1pbldpZHRoID0gdHlwZW9mIGNlbGwubWluV2lkdGggPT0gJ251bWJlcicgPyBgJHtjZWxsLm1pbldpZHRofXB4YCA6IGNlbGwubWluV2lkdGg7XG4gICAgICAgIHJldHVybiBbYHdpZHRoOiR7d2lkdGggPz8gJ3Vuc2V0J31gLCBgbWluLXdpZHRoOiR7bWluV2lkdGggPz8gJ3Vuc2V0J31gXS5qb2luKCc7Jyk7XG4gICAgfVxuXG4gICAgLy8hIGNsaWNrICYgaG92ZXIgaGFuZGxlcnNcbiAgICBvbkNoZWNrYm94Q2xpY2soaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLnRvZ2dsZVJvd1NlbGVjdGVkKGluZGV4KTtcbiAgICB9XG4gICAgb25Sb3dDbGljayhpbmRleDogbnVtYmVyLCBldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0YWJsZVJvd3MpIHJldHVybjtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMudG9nZ2xlUm93U2VsZWN0ZWQoaW5kZXgpO1xuICAgIH1cbiAgICBvblJvd01vdXNlT3ZlcihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gICAgb25Sb3dNb3VzZUVudGVyKGluZGV4OiBudW1iZXIsIGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RhYmxlUm93cykgcmV0dXJuO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5faXRlbVN0b3JhZ2UuaGlnaGxpZ2h0U2luZ2xlSXRlbShpbmRleCk7XG4gICAgfVxuICAgIG9uUm93TW91c2VMZWF2ZShpbmRleDogbnVtYmVyLCBldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0YWJsZVJvd3MpIHJldHVybjtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMuX2l0ZW1TdG9yYWdlLnVuaGlnaGxpZ2h0SXRlbShpbmRleCk7XG4gICAgfVxuXG4gICAgLy8hIHNlbGVjdCBoYW5kbGVyc1xuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgdGhlIHNlbGVjdGlvbiBzdGF0ZSBvZiBhIHJvdyBpbiB0aGUgdGFibGUuXG4gICAgICogQHBhcmFtIHNlbGVjdGVkIGEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIGlmIHRoZSByb3cgaXMgY3VycmVudGx5IHNlbGVjdGVkLlxuICAgICAqIEBwYXJhbSBpbmRleCB0aGUgaW5kZXggb2YgdGhlIHJvdyBpbiB0aGUgdGFibGUuXG4gICAgICovXG4gICAgdG9nZ2xlUm93U2VsZWN0ZWQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5faXRlbVN0b3JhZ2UuaXNJdGVtU2VsZWN0ZWQoaW5kZXgpKSB7XG4gICAgICAgICAgICBjb25zdCB1bnNlbGVjdGVkID0gdGhpcy5faXRlbVN0b3JhZ2UudW5zZWxlY3RJdGVtKGluZGV4KTtcbiAgICAgICAgICAgIHRoaXMudW5zZWxlY3RSb3dFdmVudC5lbWl0KHVuc2VsZWN0ZWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgW3NlbGVjdGVkLCBmYWlsZWRdID0gdGhpcy5faXRlbVN0b3JhZ2Uuc2VsZWN0SXRlbShpbmRleCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFJvd0V2ZW50LmVtaXQoc2VsZWN0ZWQpO1xuICAgICAgICAgICAgdGhpcy5mYWlsZWRTZWxlY3RSb3dFdmVudC5lbWl0KGZhaWxlZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZW1pdFNlbGVjdCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUb2dnbGVzIHRoZSBzZWxlY3Rpb24gc3RhdGUgb2YgYWxsIHJvd3MgaW4gdGhlIHRhYmxlLlxuICAgICAqL1xuICAgIHRvZ2dsZUFsbFJvd3NTZWxlY3RlZCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2l0ZW1TdG9yYWdlLmFyZUFsbFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBjb25zdCB1bnNlbGVjdGVkID0gdGhpcy5faXRlbVN0b3JhZ2UudW5zZWxlY3RBbGwoKTtcbiAgICAgICAgICAgIHRoaXMudW5zZWxlY3RSb3dFdmVudC5lbWl0KHVuc2VsZWN0ZWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgW3NlbGVjdGVkLCBmYWlsZWRdID0gdGhpcy5faXRlbVN0b3JhZ2Uuc2VsZWN0QWxsKCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFJvd0V2ZW50LmVtaXQoc2VsZWN0ZWQpO1xuICAgICAgICAgICAgdGhpcy5mYWlsZWRTZWxlY3RSb3dFdmVudC5lbWl0KGZhaWxlZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZW1pdFNlbGVjdCgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9lbWl0U2VsZWN0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCB2ID0gdGhpcy5faXRlbVN0b3JhZ2UudmFsdWU7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzQ2hhbmdlRXZlbnQuZW1pdCh2KTtcbiAgICB9XG4gICAgaXNDZWxsQ2hlY2tib3goY2VsbDogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgY2VsbCA9PSAnb2JqZWN0JyAmJiAnX2FyZENoZWNrYm94JyBpbiBjZWxsICYmICdpbmRleCcgaW4gY2VsbDtcbiAgICB9XG4gICAgaXNIZWFkZXJDZWxsQ2hlY2tib3goY2VsbDogSGVhZGVyQ2VsbCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBkYXRhQ2VsbCA9IGNlbGwuY2VsbDtcbiAgICAgICAgaWYgKGlzVGFibGVTdWJoZWFkZXIoZGF0YUNlbGwpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YUNlbGwuZGF0YVNvdXJjZSA9PSAnc3RyaW5nJykgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gZGF0YUNlbGwuZGF0YVNvdXJjZS50eXBlID09ICdjaGVja2JveCc7XG4gICAgfVxuICAgIGlzSGVhZGVyQ2VsbFNvcnRhYmxlKGNlbGw6IEhlYWRlckNlbGwpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZGF0YUNlbGwgPSBjZWxsLmNlbGw7XG4gICAgICAgIGlmIChpc1RhYmxlU3ViaGVhZGVyKGRhdGFDZWxsKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gZGF0YUNlbGwuc29ydGFibGUgPz8gZmFsc2U7XG4gICAgfVxuXG4gICAgQE91dHB1dCgnc2VsZWN0ZWRSb3dzQ2hhbmdlJykgc2VsZWN0ZWRSb3dzQ2hhbmdlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xuICAgIEBPdXRwdXQoJ2ZhaWxlZFNlbGVjdFJvdycpIGZhaWxlZFNlbGVjdFJvd0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcbiAgICBAT3V0cHV0KCdzZWxlY3RSb3cnKSBzZWxlY3RSb3dFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG4gICAgQE91dHB1dCgndW5zZWxlY3RSb3cnKSB1bnNlbGVjdFJvd0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcblxuICAgIC8vISBjb250ZXh0c1xuICAgIGdldEhlYWRlckNvbnRleHQoY2VsbDogVGFibGVEYXRhQ29sdW1uLCBpbmRleDogbnVtYmVyKTogVGFibGVIZWFkZXJDb250ZXh0IHwgbnVsbDtcbiAgICBnZXRIZWFkZXJDb250ZXh0KGNlbGw6IFRhYmxlU3ViaGVhZGVyLCBpbmRleDogbnVtYmVyKTogVGFibGVTdWJoZWFkZXJDb250ZXh0IHwgbnVsbDtcbiAgICBnZXRIZWFkZXJDb250ZXh0KGNlbGw6IFRhYmxlRGF0YUNvbHVtbiB8IFRhYmxlU3ViaGVhZGVyLCBpbmRleDogbnVtYmVyKTogVGFibGVIZWFkZXJDb250ZXh0IHwgVGFibGVTdWJoZWFkZXJDb250ZXh0IHwgbnVsbDtcbiAgICBnZXRIZWFkZXJDb250ZXh0KGNlbGw6IFRhYmxlRGF0YUNvbHVtbiB8IFRhYmxlU3ViaGVhZGVyLCBpbmRleDogbnVtYmVyKTogVGFibGVIZWFkZXJDb250ZXh0IHwgVGFibGVTdWJoZWFkZXJDb250ZXh0IHwgbnVsbCB7XG4gICAgICAgIGlmICh0eXBlb2YgY2VsbC5oZWFkZXIgIT0gJ3N0cmluZycpIHJldHVybiBudWxsO1xuICAgICAgICBpZiAoaXNUYWJsZVN1YmhlYWRlcihjZWxsKSlcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgJGltcGxpY2l0OiBjZWxsLmhlYWRlcixcbiAgICAgICAgICAgICAgICBoZWFkZXI6IGNlbGwuaGVhZGVyLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICRpbXBsaWNpdDogY2VsbC5oZWFkZXIsXG4gICAgICAgICAgICBoZWFkZXI6IGNlbGwuaGVhZGVyLFxuICAgICAgICAgICAgc29ydGFibGU6IGNlbGwuc29ydGFibGUgPz8gZmFsc2UsXG4gICAgICAgICAgICBzb3J0VHlwZTogdGhpcy5faXRlbVN0b3JhZ2UuZ2V0Q29sdW1uU29ydFR5cGUoaW5kZXgpLFxuICAgICAgICAgICAgb25UcmlnZ2VyU29ydDogKGV2ZW50PzogRXZlbnQpID0+IHRoaXMuX2l0ZW1TdG9yYWdlLnRvZ2dsZUN1cnJlbnRTb3J0Q29sdW1uKGluZGV4KSxcbiAgICAgICAgICAgIG9uVHJpZ2dlclJlc2V0U29ydDogKGV2ZW50PzogRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pdGVtU3RvcmFnZS5yZXNldFNvcnQoKTtcbiAgICAgICAgICAgICAgICBldmVudD8ucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBnZXRIZWFkZXJDaGVja2JveENvbnRleHQoKTogVGFibGVIZWFkZXJDaGVja2JveENvbnRleHQge1xuICAgICAgICBsZXQgc3RhdGU6IENoZWNrYm94U3RhdGUgPSBDaGVja2JveFN0YXRlLlVuc2VsZWN0ZWQ7XG4gICAgICAgIGlmICh0aGlzLl9pdGVtU3RvcmFnZS5pc0FueUl0ZW1TZWxlY3RlZCkge1xuICAgICAgICAgICAgc3RhdGUgPSBDaGVja2JveFN0YXRlLkluZGV0ZXJtaW5hdGU7XG4gICAgICAgICAgICBpZiAodGhpcy5faXRlbVN0b3JhZ2UuYXJlQWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBzdGF0ZSA9IENoZWNrYm94U3RhdGUuU2VsZWN0ZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICRpbXBsaWNpdDogc3RhdGUsXG4gICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVBbGxSb3dzU2VsZWN0ZWQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGdldENoZWNrYm94Q29udGV4dChpbmRleDogbnVtYmVyKTogVGFibGVDaGVja2JveENvbnRleHQge1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5faXRlbVN0b3JhZ2UuaXRlbXMuZmluZCh2ID0+IHYuaW5kZXggPT0gaW5kZXgpITtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBpdGVtLnNlbGVjdGVkID8/IGZhbHNlO1xuICAgICAgICBjb25zdCBkaXNhYmxlZCA9IGl0ZW0uZGlzYWJsZWQgPz8gZmFsc2U7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAkaW1wbGljaXQ6IHNlbGVjdGVkLFxuICAgICAgICAgICAgc2VsZWN0ZWQsXG4gICAgICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoZWNrYm94Q2xpY2soaW5kZXgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG59XG4iLCI8dGFibGUgY2xhc3M9XCJhcmQtdGFibGVcIiBbbmdDbGFzc109XCJuZ0NsYXNzZXNcIj5cclxuICAgIDxjYXB0aW9uXHJcbiAgICAgICAgKm5nSWY9XCJjYXB0aW9uXCJcclxuICAgICAgICBjbGFzcz1cImFyZC10YWJsZV9fY2FwdGlvblwiXHJcbiAgICA+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFyZC10YWJsZV9fY2FwdGlvbi1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q2FwdGlvblRlbXBsYXRlIGxldC1jYXB0aW9uVGV4dD5cclxuICAgICAgICAgICAgICAgIHt7IGNhcHRpb25UZXh0IH19XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2FwdGlvblRlbXBsYXRlID8/IGRlZmF1bHRDYXB0aW9uVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBjYXB0aW9uIH1cIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9jYXB0aW9uPlxyXG4gICAgPHRoZWFkIGNsYXNzPVwiYXJkLXRhYmxlX19oZWFkZXJcIj5cclxuICAgICAgICA8dHIgY2xhc3M9XCJhcmQtdGFibGVfX2hlYWRlci1yb3dcIiAqbmdGb3I9XCJsZXQgcm93IG9mIGhlYWRlckNlbGxzXCI+XHJcbiAgICAgICAgICAgIDx0aFxyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNlbGwgb2Ygcm93OyBsZXQgaW5kZXggPSBpbmRleFwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFyZC10YWJsZV9faGVhZGVyLWNlbGxcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY2VsbC5jZWxsLmNlbGxDbGFzc1wiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYXJkLXRhYmxlX19jaGVja2JveC1jZWxsXT1cImlzSGVhZGVyQ2VsbENoZWNrYm94KGNlbGwpXCJcclxuICAgICAgICAgICAgICAgIFthdHRyLmNvbHNwYW5dPVwiY2VsbC5jb2xzcGFuXCJcclxuICAgICAgICAgICAgICAgIFthdHRyLnJvd3NwYW5dPVwiY2VsbC5yb3dzcGFuXCJcclxuICAgICAgICAgICAgICAgIFtzY29wZV09XCJjZWxsLmNvbHNwYW4gPiAxID8gJ2NvbGdyb3VwJyA6ICdjb2wnXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXJkLXRhYmxlX19jZWxsLWNvbnRhaW5lclwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFyZC10YWJsZV9fc29ydGFibGVdPVwiaXNIZWFkZXJDZWxsU29ydGFibGUoY2VsbClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJjZWxsLndpZHRoXCJcclxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUubWluV2lkdGhdPVwiY2VsbC5taW5XaWR0aFwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzSGVhZGVyQ2VsbENoZWNrYm94KGNlbGwpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEhlYWRlckNoZWNrYm94VGVtcGxhdGUgbGV0LXN0YXRlIGxldC1vbkNoYW5nZT1cIm9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJkLWNoZWNrYm94IFt0YWJJbmRleF09XCJpc0xvYWRpbmcgPyAtMSA6IHRhYkluZGV4XCIgW3N0YXRlXT1cInN0YXRlXCIgW2NvbG9yXT1cImdldEhlYWRlckNoZWNrYm94Q29sb3IoKVwiIHVuc2VsZWN0ZWRDb2xvcj1cImN1cnJlbnRDb2xvclwiIChjaGFuZ2UpPVwib25DaGFuZ2UoKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaGVhZGVyQ2hlY2tib3hUZW1wbGF0ZSA/PyBkZWZhdWx0SGVhZGVyQ2hlY2tib3hUZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiZ2V0SGVhZGVyQ2hlY2tib3hDb250ZXh0KClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNIZWFkZXJDZWxsQ2hlY2tib3goY2VsbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZGVmYXVsdEhlYWRlckNlbGxUZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0LWNvbnRlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldC1zb3J0YWJsZT1cInNvcnRhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldC1zb3J0VHlwZT1cInNvcnRUeXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldC1vblRyaWdnZXJTb3J0PVwib25UcmlnZ2VyU29ydFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQtb25UcmlnZ2VyUmVzZXRTb3J0PVwib25UcmlnZ2VyUmVzZXRTb3J0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXJkLXRhYmxlX19oZWFkZXItdGVtcGxhdGUtY29udGFpbmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYXJkLXNvcnRhYmxlXT1cInNvcnRhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYXJkLW5vbnNvcnRhYmxlXT1cIiFzb3J0YWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFyZC10YWJsZV9faGVhZGVyLWNvbnRlbnQtY29udGFpbmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzb3J0YWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblRyaWdnZXJTb3J0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwidGFiSW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5Fc2MpPVwib25UcmlnZ2VyUmVzZXRTb3J0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFyZC10YWJsZV9faGVhZGVyLWNvbnRlbnRcIj57eyBjb250ZW50IH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcmQtdGFibGVfX2hlYWRlci1zb3J0LWljb25cIiAqbmdJZj1cInNvcnRUeXBlICE9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcmQtaWNvbiAqbmdJZj1cInNvcnRUeXBlID09ICdhc2NlbmRpbmcnXCI+c291dGg8L2FyZC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFyZC1pY29uICpuZ0lmPVwic29ydFR5cGUgPT0gJ2Rlc2NlbmRpbmcnXCI+bm9ydGg8L2FyZC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXJkLXRhYmxlX19oZWFkZXItY29udGVudC1jb250YWluZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFzb3J0YWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXJkLXRhYmxlX19oZWFkZXItY29udGVudFwiPnt7IGNvbnRlbnQgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJnZXRIZWFkZXJUZW1wbGF0ZShjZWxsLmNlbGwuaGVhZGVyKSA/PyBkZWZhdWx0SGVhZGVyQ2VsbFRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJnZXRIZWFkZXJDb250ZXh0KGNlbGwuY2VsbCwgaW5kZXgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICA8L3RoZWFkPlxyXG4gICAgPHRib2R5IGNsYXNzPVwiYXJkLXRhYmxlX19ib2R5XCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcm93IG9mIGRhdGFSb3dzOyBsZXQgcm93SW5kZXggPSBpbmRleDtcIj5cclxuICAgICAgICAgICAgPHRyICpuZ0lmPVwicm93LmlzRW1wdHlcIiBjbGFzcz1cImFyZC10YWJsZV9fZW1wdHktcm93XCI+XHJcbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJhcmQtdGFibGVfX2VtcHR5LWNlbGxcIiBjb2xzcGFuPVwiOTk5OVwiPjwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDx0clxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhcm93LmlzRW1wdHlcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhcmQtdGFibGVfX2JvZHktcm93XCJcclxuICAgICAgICAgICAgICAgIFtjbGFzcy5hcmQtdGFibGVfX3NlbGVjdGVkLXJvd109XCJyb3cuc2VsZWN0ZWRcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzLmFyZC10YWJsZV9faGlnaGxpZ2h0ZWQtcm93XT1cInJvdy5oaWdobGlnaHRlZFwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYXJkLXRhYmxlX19kaXNhYmxlZC1yb3ddPVwicm93LmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgIFtjbGFzcy5hcmQtdGFibGVfX2JvbGQtcm93XT1cInJvdy5ib2xkXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKHJvd0luZGV4LCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChtb3VzZW92ZXIpPVwib25Sb3dNb3VzZU92ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJvblJvd01vdXNlRW50ZXIocm93SW5kZXgsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwib25Sb3dNb3VzZUxlYXZlKHJvd0luZGV4LCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2VsbCBvZiByb3cuZGF0YTsgbGV0IGNlbGxJbmRleCA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsVG1wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFyZC10YWJsZV9fY2VsbC1jb250YWluZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cImdldENlbGxTdHlsZShyb3cuZGF0YUNvbHVtbnNbY2VsbEluZGV4XSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNDZWxsQ2hlY2tib3goY2VsbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRDaGVja2JveFRlbXBsYXRlIGxldC1pc0NoZWNrZWQgbGV0LW9uQ2hhbmdlPVwib25DaGFuZ2VcIiBsZXQtZGlzYWJsZWQ9XCJkaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJkLWNoZWNrYm94IFt0YWJJbmRleF09XCJpc0xvYWRpbmcgPyAtMSA6IHRhYkluZGV4XCIgW3NlbGVjdGVkXT1cImlzQ2hlY2tlZFwiIFtjb2xvcl09XCJjb2xvclwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIChjaGFuZ2UpPVwib25DaGFuZ2UoKVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjaGVja2JveFRlbXBsYXRlID8/IGRlZmF1bHRDaGVja2JveFRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdldENoZWNrYm94Q29udGV4dChyb3dJbmRleClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNDZWxsQ2hlY2tib3goY2VsbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRDZWxsVGVtcGxhdGUgbGV0LWNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbnRlbnQgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZ2V0Q2VsbFRlbXBsYXRlKHJvdy5kYXRhQ29sdW1uc1tjZWxsSW5kZXhdLnRlbXBsYXRlKSA/PyBkZWZhdWx0Q2VsbFRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBjZWxsIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8dGRcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhcm93LmRhdGFDb2x1bW5zW2NlbGxJbmRleF0uaXNSb3dIZWFkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFyZC10YWJsZV9fYm9keS1jZWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwicm93LmRhdGFDb2x1bW5zW2NlbGxJbmRleF0uY2VsbENsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFyZC10YWJsZV9fY2hlY2tib3gtY2VsbF09XCJpc0NlbGxDaGVja2JveChjZWxsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2VsbFRtcFwiPjwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJyb3cuZGF0YUNvbHVtbnNbY2VsbEluZGV4XS5pc1Jvd0hlYWRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXJkLXRhYmxlX19ib2R5LWNlbGwgYXJkLXRhYmxlX19yb3ctaGVhZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGU9XCJyb3dcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJyb3cuZGF0YUNvbHVtbnNbY2VsbEluZGV4XS5jZWxsQ2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYXJkLXRhYmxlX19jaGVja2JveC1jZWxsXT1cImlzQ2VsbENoZWNrYm94KGNlbGwpXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjZWxsVG1wXCI+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L3Rib2R5PlxyXG4gICAgPHRmb290IGNsYXNzPVwiYXJkLXRhYmxlX19mb290XCIgKm5nSWY9XCJjYW5EaXNwbGF5UGFnaW5hdGlvblwiPlxyXG4gICAgICAgIDx0ciBjbGFzcz1cImFyZC10YWJsZV9fZm9vdC1yb3dcIj5cclxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiYXJkLXRhYmxlX19wYWdpbmF0aW9uLWNlbGxcIiBjb2xzcGFuPVwiOTk5OVwiPlxyXG4gICAgICAgICAgICAgICAgPGFyZC10YWJsZS1wYWdpbmF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwicGFnaW5hdGlvbk9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFsocGFnZSldPVwicGFnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3RvdGFsSXRlbXNdPVwidG90YWxJdGVtc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInBhZ2luYXRpb25EaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgWyhpdGVtc1BlclBhZ2UpXT1cIml0ZW1zUGVyUGFnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2FsaWduXT1cInBhZ2luYXRpb25BbGlnblwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2lzTG9hZGluZ109XCJpc0xvYWRpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtc1BlclBhZ2VUZXh0XT1cIml0ZW1zUGVyUGFnZVRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjdXJyZW50SXRlbXNGb3JtYXRGbl09XCJjdXJyZW50SXRlbXNGb3JtYXRGblwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGl0ZW1zUGVyUGFnZUNoYW5nZSk9XCJpdGVtc1BlclBhZ2VDaGFuZ2UuZW1pdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAocGFnZUNoYW5nZSk9XCJwYWdlQ2hhbmdlLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICA+PC9hcmQtdGFibGUtcGFnaW5hdGlvbj5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICA8L3RyPlxyXG4gICAgPC90Zm9vdD5cclxuPC90YWJsZT4iXX0=
|