@sebgroup/green-angular 0.0.0-v-angular-20250113082841
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 +68 -0
- package/esm2022/index.mjs +18 -0
- package/esm2022/lib/accordion/accordion-list-item.component.mjs +50 -0
- package/esm2022/lib/accordion/accordion.component.mjs +72 -0
- package/esm2022/lib/accordion/accordion.module.mjs +19 -0
- package/esm2022/lib/accordion/index.mjs +4 -0
- package/esm2022/lib/badge/badge.component.mjs +80 -0
- package/esm2022/lib/badge/badge.module.mjs +18 -0
- package/esm2022/lib/badge/index.mjs +3 -0
- package/esm2022/lib/button/button.component.mjs +28 -0
- package/esm2022/lib/button/button.module.mjs +18 -0
- package/esm2022/lib/button/index.mjs +3 -0
- package/esm2022/lib/cell-table/cell-table-item.component.mjs +91 -0
- package/esm2022/lib/cell-table/cell-table.component.mjs +97 -0
- package/esm2022/lib/cell-table/cell-table.module.mjs +26 -0
- package/esm2022/lib/cell-table/cell-table.types.mjs +7 -0
- package/esm2022/lib/cell-table/cell-underline.directive.mjs +55 -0
- package/esm2022/lib/cell-table/index.mjs +4 -0
- package/esm2022/lib/context-menu/context-menu.component.mjs +73 -0
- package/esm2022/lib/context-menu/context-menu.module.mjs +20 -0
- package/esm2022/lib/context-menu/index.mjs +3 -0
- package/esm2022/lib/datepicker/datepicker.component.mjs +138 -0
- package/esm2022/lib/datepicker/datepicker.module.mjs +20 -0
- package/esm2022/lib/datepicker/index.mjs +3 -0
- package/esm2022/lib/dropdown/dropdown-button.directive.mjs +16 -0
- package/esm2022/lib/dropdown/dropdown-option.directive.mjs +16 -0
- package/esm2022/lib/dropdown/dropdown.component.mjs +222 -0
- package/esm2022/lib/dropdown/dropdown.module.mjs +34 -0
- package/esm2022/lib/dropdown/index.mjs +5 -0
- package/esm2022/lib/green-angular.module.mjs +72 -0
- package/esm2022/lib/in-page-wizard/in-page-wizard-step-card.component.mjs +61 -0
- package/esm2022/lib/in-page-wizard/in-page-wizard.module.mjs +18 -0
- package/esm2022/lib/in-page-wizard/index.mjs +3 -0
- package/esm2022/lib/modal/index.mjs +5 -0
- package/esm2022/lib/modal/modal-footer.directive.mjs +16 -0
- package/esm2022/lib/modal/modal-header.directive.mjs +16 -0
- package/esm2022/lib/modal/modal.component.mjs +309 -0
- package/esm2022/lib/modal/modal.module.mjs +41 -0
- package/esm2022/lib/pagination/index.mjs +3 -0
- package/esm2022/lib/pagination/pagination.component.mjs +175 -0
- package/esm2022/lib/pagination/pagination.module.mjs +18 -0
- package/esm2022/lib/progress-circle/index.mjs +3 -0
- package/esm2022/lib/progress-circle/progress-circle.component.mjs +41 -0
- package/esm2022/lib/progress-circle/progress-circle.module.mjs +18 -0
- package/esm2022/lib/segmented-control/index.mjs +3 -0
- package/esm2022/lib/segmented-control/segmented-control.component.mjs +35 -0
- package/esm2022/lib/segmented-control/segmented-control.module.mjs +19 -0
- package/esm2022/lib/shared/core-element/core-element.directive.mjs +33 -0
- package/esm2022/lib/shared/core-element/core-element.module.mjs +18 -0
- package/esm2022/lib/shared/core-element/index.mjs +3 -0
- package/esm2022/lib/shared/index.mjs +4 -0
- package/esm2022/lib/shared/on-scroll.directive.mjs +47 -0
- package/esm2022/lib/shared/shared.module.mjs +18 -0
- package/esm2022/lib/slider/index.mjs +3 -0
- package/esm2022/lib/slider/slider.component.mjs +113 -0
- package/esm2022/lib/slider/slider.module.mjs +19 -0
- package/esm2022/lib/sortable-list/index.mjs +3 -0
- package/esm2022/lib/sortable-list/sortable-list.component.mjs +181 -0
- package/esm2022/lib/sortable-list/sortable-list.module.mjs +20 -0
- package/esm2022/sebgroup-green-angular.mjs +5 -0
- package/esm2022/src/lib/accordion/accordion-list-item.component.mjs +50 -0
- package/esm2022/src/lib/accordion/accordion.component.mjs +72 -0
- package/esm2022/src/lib/accordion/accordion.module.mjs +19 -0
- package/esm2022/src/lib/accordion/index.mjs +4 -0
- package/esm2022/src/lib/accordion/sebgroup-green-angular-src-lib-accordion.mjs +5 -0
- package/esm2022/src/lib/badge/badge.component.mjs +80 -0
- package/esm2022/src/lib/badge/badge.module.mjs +18 -0
- package/esm2022/src/lib/badge/index.mjs +3 -0
- package/esm2022/src/lib/badge/sebgroup-green-angular-src-lib-badge.mjs +5 -0
- package/esm2022/src/lib/button/button.component.mjs +28 -0
- package/esm2022/src/lib/button/button.module.mjs +18 -0
- package/esm2022/src/lib/button/index.mjs +3 -0
- package/esm2022/src/lib/button/sebgroup-green-angular-src-lib-button.mjs +5 -0
- package/esm2022/src/lib/cell-table/cell-table-item.component.mjs +91 -0
- package/esm2022/src/lib/cell-table/cell-table.component.mjs +97 -0
- package/esm2022/src/lib/cell-table/cell-table.module.mjs +26 -0
- package/esm2022/src/lib/cell-table/cell-table.types.mjs +7 -0
- package/esm2022/src/lib/cell-table/cell-underline.directive.mjs +55 -0
- package/esm2022/src/lib/cell-table/index.mjs +4 -0
- package/esm2022/src/lib/cell-table/sebgroup-green-angular-src-lib-cell-table.mjs +5 -0
- package/esm2022/src/lib/context-menu/context-menu.component.mjs +73 -0
- package/esm2022/src/lib/context-menu/context-menu.module.mjs +20 -0
- package/esm2022/src/lib/context-menu/index.mjs +3 -0
- package/esm2022/src/lib/context-menu/sebgroup-green-angular-src-lib-context-menu.mjs +5 -0
- package/esm2022/src/lib/datepicker/datepicker.component.mjs +138 -0
- package/esm2022/src/lib/datepicker/datepicker.module.mjs +20 -0
- package/esm2022/src/lib/datepicker/index.mjs +3 -0
- package/esm2022/src/lib/datepicker/sebgroup-green-angular-src-lib-datepicker.mjs +5 -0
- package/esm2022/src/lib/dropdown/dropdown-button.directive.mjs +16 -0
- package/esm2022/src/lib/dropdown/dropdown-option.directive.mjs +16 -0
- package/esm2022/src/lib/dropdown/dropdown.component.mjs +222 -0
- package/esm2022/src/lib/dropdown/dropdown.module.mjs +34 -0
- package/esm2022/src/lib/dropdown/index.mjs +5 -0
- package/esm2022/src/lib/dropdown/sebgroup-green-angular-src-lib-dropdown.mjs +5 -0
- package/esm2022/src/lib/in-page-wizard/in-page-wizard-step-card.component.mjs +61 -0
- package/esm2022/src/lib/in-page-wizard/in-page-wizard.module.mjs +18 -0
- package/esm2022/src/lib/in-page-wizard/index.mjs +3 -0
- package/esm2022/src/lib/in-page-wizard/sebgroup-green-angular-src-lib-in-page-wizard.mjs +5 -0
- package/esm2022/src/lib/modal/index.mjs +5 -0
- package/esm2022/src/lib/modal/modal-footer.directive.mjs +16 -0
- package/esm2022/src/lib/modal/modal-header.directive.mjs +16 -0
- package/esm2022/src/lib/modal/modal.component.mjs +309 -0
- package/esm2022/src/lib/modal/modal.module.mjs +41 -0
- package/esm2022/src/lib/modal/sebgroup-green-angular-src-lib-modal.mjs +5 -0
- package/esm2022/src/lib/pagination/index.mjs +3 -0
- package/esm2022/src/lib/pagination/pagination.component.mjs +175 -0
- package/esm2022/src/lib/pagination/pagination.module.mjs +18 -0
- package/esm2022/src/lib/pagination/sebgroup-green-angular-src-lib-pagination.mjs +5 -0
- package/esm2022/src/lib/progress-circle/index.mjs +3 -0
- package/esm2022/src/lib/progress-circle/progress-circle.component.mjs +41 -0
- package/esm2022/src/lib/progress-circle/progress-circle.module.mjs +18 -0
- package/esm2022/src/lib/progress-circle/sebgroup-green-angular-src-lib-progress-circle.mjs +5 -0
- package/esm2022/src/lib/segmented-control/index.mjs +3 -0
- package/esm2022/src/lib/segmented-control/sebgroup-green-angular-src-lib-segmented-control.mjs +5 -0
- package/esm2022/src/lib/segmented-control/segmented-control.component.mjs +35 -0
- package/esm2022/src/lib/segmented-control/segmented-control.module.mjs +19 -0
- package/esm2022/src/lib/shared/core-element/core-element.directive.mjs +33 -0
- package/esm2022/src/lib/shared/core-element/core-element.module.mjs +18 -0
- package/esm2022/src/lib/shared/core-element/index.mjs +3 -0
- package/esm2022/src/lib/shared/index.mjs +4 -0
- package/esm2022/src/lib/shared/on-scroll.directive.mjs +47 -0
- package/esm2022/src/lib/shared/sebgroup-green-angular-src-lib-shared.mjs +5 -0
- package/esm2022/src/lib/shared/shared.module.mjs +18 -0
- package/esm2022/src/lib/slider/index.mjs +3 -0
- package/esm2022/src/lib/slider/sebgroup-green-angular-src-lib-slider.mjs +5 -0
- package/esm2022/src/lib/slider/slider.component.mjs +113 -0
- package/esm2022/src/lib/slider/slider.module.mjs +19 -0
- package/esm2022/src/lib/sortable-list/index.mjs +3 -0
- package/esm2022/src/lib/sortable-list/sebgroup-green-angular-src-lib-sortable-list.mjs +5 -0
- package/esm2022/src/lib/sortable-list/sortable-list.component.mjs +181 -0
- package/esm2022/src/lib/sortable-list/sortable-list.module.mjs +20 -0
- package/esm2022/src/v-angular/account-number/account-number.module.mjs +18 -0
- package/esm2022/src/v-angular/account-number/account-number.pipe.mjs +54 -0
- package/esm2022/src/v-angular/account-number/index.mjs +3 -0
- package/esm2022/src/v-angular/account-number/sebgroup-green-angular-src-v-angular-account-number.mjs +5 -0
- package/esm2022/src/v-angular/alert/alert.component.mjs +47 -0
- package/esm2022/src/v-angular/alert/alert.models.mjs +8 -0
- package/esm2022/src/v-angular/alert/alert.module.mjs +18 -0
- package/esm2022/src/v-angular/alert/index.mjs +4 -0
- package/esm2022/src/v-angular/alert/sebgroup-green-angular-src-v-angular-alert.mjs +5 -0
- package/esm2022/src/v-angular/base-control-value-accessor/base-control-value-accessor.component.mjs +297 -0
- package/esm2022/src/v-angular/base-control-value-accessor/base-control-value-accessor.module.mjs +17 -0
- package/esm2022/src/v-angular/base-control-value-accessor/index.mjs +3 -0
- package/esm2022/src/v-angular/base-control-value-accessor/sebgroup-green-angular-src-v-angular-base-control-value-accessor.mjs +5 -0
- package/esm2022/src/v-angular/breadcrumbs/breadcrumbs.component.mjs +25 -0
- package/esm2022/src/v-angular/breadcrumbs/breadcrumbs.module.mjs +20 -0
- package/esm2022/src/v-angular/breadcrumbs/index.mjs +3 -0
- package/esm2022/src/v-angular/breadcrumbs/sebgroup-green-angular-src-v-angular-breadcrumbs.mjs +5 -0
- package/esm2022/src/v-angular/button/button.component.mjs +108 -0
- package/esm2022/src/v-angular/button/button.module.mjs +20 -0
- package/esm2022/src/v-angular/button/index.mjs +3 -0
- package/esm2022/src/v-angular/button/sebgroup-green-angular-src-v-angular-button.mjs +5 -0
- package/esm2022/src/v-angular/card/card.component.mjs +11 -0
- package/esm2022/src/v-angular/card/card.module.mjs +18 -0
- package/esm2022/src/v-angular/card/index.mjs +3 -0
- package/esm2022/src/v-angular/card/sebgroup-green-angular-src-v-angular-card.mjs +5 -0
- package/esm2022/src/v-angular/character-countdown/character-countdown.directive.mjs +51 -0
- package/esm2022/src/v-angular/character-countdown/character-countdown.module.mjs +18 -0
- package/esm2022/src/v-angular/character-countdown/index.mjs +3 -0
- package/esm2022/src/v-angular/character-countdown/sebgroup-green-angular-src-v-angular-character-countdown.mjs +5 -0
- package/esm2022/src/v-angular/checkbox/checkbox.component.mjs +74 -0
- package/esm2022/src/v-angular/checkbox/checkbox.module.mjs +21 -0
- package/esm2022/src/v-angular/checkbox/index.mjs +3 -0
- package/esm2022/src/v-angular/checkbox/sebgroup-green-angular-src-v-angular-checkbox.mjs +5 -0
- package/esm2022/src/v-angular/core/core.globals.mjs +20 -0
- package/esm2022/src/v-angular/core/core.utils.mjs +62 -0
- package/esm2022/src/v-angular/core/index.mjs +3 -0
- package/esm2022/src/v-angular/core/sebgroup-green-angular-src-v-angular-core.mjs +5 -0
- package/esm2022/src/v-angular/datepicker/components/calendar/calendar.component.mjs +200 -0
- package/esm2022/src/v-angular/datepicker/components/calendar-control/calendar-control.component.mjs +115 -0
- package/esm2022/src/v-angular/datepicker/components/date-input/date-input.component.mjs +203 -0
- package/esm2022/src/v-angular/datepicker/components/datepicker/datepicker.component.mjs +135 -0
- package/esm2022/src/v-angular/datepicker/date-control-value-accessor/date-control-value-accessor.component.mjs +408 -0
- package/esm2022/src/v-angular/datepicker/datepicker.globals.mjs +20 -0
- package/esm2022/src/v-angular/datepicker/datepicker.models.mjs +56 -0
- package/esm2022/src/v-angular/datepicker/datepicker.module.mjs +63 -0
- package/esm2022/src/v-angular/datepicker/datepicker.utils.mjs +196 -0
- package/esm2022/src/v-angular/datepicker/directives/calendar-date.directive.mjs +47 -0
- package/esm2022/src/v-angular/datepicker/index.mjs +17 -0
- package/esm2022/src/v-angular/datepicker/models/dates.mjs +291 -0
- package/esm2022/src/v-angular/datepicker/pipes/date-thook.pipe.mjs +30 -0
- package/esm2022/src/v-angular/datepicker/pipes/is-disabled.pipe.mjs +37 -0
- package/esm2022/src/v-angular/datepicker/pipes/matches.pipe.mjs +17 -0
- package/esm2022/src/v-angular/datepicker/sebgroup-green-angular-src-v-angular-datepicker.mjs +5 -0
- package/esm2022/src/v-angular/drag-drop/drag-drop.component.mjs +496 -0
- package/esm2022/src/v-angular/drag-drop/drag-drop.models.mjs +2 -0
- package/esm2022/src/v-angular/drag-drop/drag-drop.module.mjs +49 -0
- package/esm2022/src/v-angular/drag-drop/drag-drop.pipes.mjs +70 -0
- package/esm2022/src/v-angular/drag-drop/drag-drop.utils.mjs +75 -0
- package/esm2022/src/v-angular/drag-drop/index.mjs +5 -0
- package/esm2022/src/v-angular/drag-drop/sebgroup-green-angular-src-v-angular-drag-drop.mjs +5 -0
- package/esm2022/src/v-angular/dropdown/dropdown-list/dropdown-list.component.mjs +271 -0
- package/esm2022/src/v-angular/dropdown/dropdown-list/index.mjs +2 -0
- package/esm2022/src/v-angular/dropdown/dropdown.component.mjs +246 -0
- package/esm2022/src/v-angular/dropdown/dropdown.module.mjs +38 -0
- package/esm2022/src/v-angular/dropdown/index.mjs +6 -0
- package/esm2022/src/v-angular/dropdown/sebgroup-green-angular-src-v-angular-dropdown.mjs +5 -0
- package/esm2022/src/v-angular/dropdown/typeahead/index.mjs +6 -0
- package/esm2022/src/v-angular/dropdown/typeahead/typeahead-dropdown-list/typeahead-dropdown-list.component.mjs +98 -0
- package/esm2022/src/v-angular/dropdown/typeahead/typeahead-highlight/typeahead-highlight.component.mjs +85 -0
- package/esm2022/src/v-angular/dropdown/typeahead/typeahead-input/typeahead-input.component.mjs +132 -0
- package/esm2022/src/v-angular/dropdown/typeahead/typeahead.directive.mjs +177 -0
- package/esm2022/src/v-angular/dropdown/typeahead/typeahead.module.mjs +33 -0
- package/esm2022/src/v-angular/external-link/external-link.directive.mjs +37 -0
- package/esm2022/src/v-angular/external-link/external-link.module.mjs +18 -0
- package/esm2022/src/v-angular/external-link/index.mjs +3 -0
- package/esm2022/src/v-angular/external-link/sebgroup-green-angular-src-v-angular-external-link.mjs +5 -0
- package/esm2022/src/v-angular/i18n/i18n.json +12 -0
- package/esm2022/src/v-angular/i18n/i18n.module.mjs +89 -0
- package/esm2022/src/v-angular/i18n/i18n.test.module.mjs +89 -0
- package/esm2022/src/v-angular/i18n/index.mjs +3 -0
- package/esm2022/src/v-angular/i18n/sebgroup-green-angular-src-v-angular-i18n.mjs +5 -0
- package/esm2022/src/v-angular/info-circle/index.mjs +3 -0
- package/esm2022/src/v-angular/info-circle/info-circle.component.mjs +28 -0
- package/esm2022/src/v-angular/info-circle/info-circle.module.mjs +21 -0
- package/esm2022/src/v-angular/info-circle/sebgroup-green-angular-src-v-angular-info-circle.mjs +5 -0
- package/esm2022/src/v-angular/input/index.mjs +3 -0
- package/esm2022/src/v-angular/input/input.component.mjs +218 -0
- package/esm2022/src/v-angular/input/input.module.mjs +41 -0
- package/esm2022/src/v-angular/input/sebgroup-green-angular-src-v-angular-input.mjs +5 -0
- package/esm2022/src/v-angular/input-mask/config.mjs +9 -0
- package/esm2022/src/v-angular/input-mask/constants.mjs +2 -0
- package/esm2022/src/v-angular/input-mask/index.mjs +6 -0
- package/esm2022/src/v-angular/input-mask/input-mask-format.pipe.mjs +21 -0
- package/esm2022/src/v-angular/input-mask/input-mask.directive.mjs +165 -0
- package/esm2022/src/v-angular/input-mask/input-mask.module.mjs +35 -0
- package/esm2022/src/v-angular/input-mask/input-mask.types.mjs +2 -0
- package/esm2022/src/v-angular/input-mask/sebgroup-green-angular-src-v-angular-input-mask.mjs +5 -0
- package/esm2022/src/v-angular/modal/dialog/dialog.component.mjs +217 -0
- package/esm2022/src/v-angular/modal/fold-out/fold-out.component.mjs +157 -0
- package/esm2022/src/v-angular/modal/fold-out/fold-out.directive.mjs +19 -0
- package/esm2022/src/v-angular/modal/fold-out/keyboard-key.enum.mjs +9 -0
- package/esm2022/src/v-angular/modal/index.mjs +6 -0
- package/esm2022/src/v-angular/modal/modal.globals.mjs +20 -0
- package/esm2022/src/v-angular/modal/modal.module.mjs +53 -0
- package/esm2022/src/v-angular/modal/modal.types.mjs +2 -0
- package/esm2022/src/v-angular/modal/sebgroup-green-angular-src-v-angular-modal.mjs +5 -0
- package/esm2022/src/v-angular/modal/slide-out/slide-out.component.mjs +253 -0
- package/esm2022/src/v-angular/pagination/index.mjs +3 -0
- package/esm2022/src/v-angular/pagination/pagination.component.mjs +144 -0
- package/esm2022/src/v-angular/pagination/pagination.module.mjs +37 -0
- package/esm2022/src/v-angular/pagination/sebgroup-green-angular-src-v-angular-pagination.mjs +5 -0
- package/esm2022/src/v-angular/radio/index.mjs +3 -0
- package/esm2022/src/v-angular/radio/radio.component.mjs +132 -0
- package/esm2022/src/v-angular/radio/radio.module.mjs +21 -0
- package/esm2022/src/v-angular/radio/sebgroup-green-angular-src-v-angular-radio.mjs +5 -0
- package/esm2022/src/v-angular/slug/index.mjs +3 -0
- package/esm2022/src/v-angular/slug/sebgroup-green-angular-src-v-angular-slug.mjs +5 -0
- package/esm2022/src/v-angular/slug/slug.module.mjs +18 -0
- package/esm2022/src/v-angular/slug/slug.pipe.mjs +27 -0
- package/esm2022/src/v-angular/table/index.mjs +9 -0
- package/esm2022/src/v-angular/table/sebgroup-green-angular-src-v-angular-table.mjs +5 -0
- package/esm2022/src/v-angular/table/table.component.mjs +387 -0
- package/esm2022/src/v-angular/table/table.directive.mjs +110 -0
- package/esm2022/src/v-angular/table/table.models.mjs +2 -0
- package/esm2022/src/v-angular/table/table.module.mjs +40 -0
- package/esm2022/src/v-angular/table/table.tools.mjs +29 -0
- package/esm2022/src/v-angular/table/tr-thook.pipe.mjs +22 -0
- package/esm2022/src/v-angular/tabs/index.mjs +8 -0
- package/esm2022/src/v-angular/tabs/sebgroup-green-angular-src-v-angular-tabs.mjs +5 -0
- package/esm2022/src/v-angular/tabs/tab.directive.mjs +81 -0
- package/esm2022/src/v-angular/tabs/tabs.component.mjs +260 -0
- package/esm2022/src/v-angular/tabs/tabs.models.mjs +2 -0
- package/esm2022/src/v-angular/tabs/tabs.module.mjs +21 -0
- package/esm2022/src/v-angular/textarea/index.mjs +3 -0
- package/esm2022/src/v-angular/textarea/sebgroup-green-angular-src-v-angular-textarea.mjs +5 -0
- package/esm2022/src/v-angular/textarea/textarea.component.mjs +105 -0
- package/esm2022/src/v-angular/textarea/textarea.module.mjs +34 -0
- package/esm2022/src/v-angular/toast/index.mjs +8 -0
- package/esm2022/src/v-angular/toast/sebgroup-green-angular-src-v-angular-toast.mjs +5 -0
- package/esm2022/src/v-angular/toast/toast-message.service.mjs +63 -0
- package/esm2022/src/v-angular/toast/toast.component.mjs +70 -0
- package/esm2022/src/v-angular/toast/toast.models.mjs +8 -0
- package/esm2022/src/v-angular/toast/toast.module.mjs +21 -0
- package/esm2022/src/v-angular/tooltip/index.mjs +3 -0
- package/esm2022/src/v-angular/tooltip/sebgroup-green-angular-src-v-angular-tooltip.mjs +5 -0
- package/esm2022/src/v-angular/tooltip/tooltip.directive.mjs +293 -0
- package/esm2022/src/v-angular/tooltip/tooltip.module.mjs +18 -0
- package/esm2022/src/v-angular/tooltip/tooltip.styles.mjs +60 -0
- package/esm2022/v-angular/alert/alert.component.mjs +47 -0
- package/esm2022/v-angular/alert/alert.models.mjs +8 -0
- package/esm2022/v-angular/alert/alert.module.mjs +18 -0
- package/esm2022/v-angular/alert/index.mjs +4 -0
- package/esm2022/v-angular/base-control-value-accessor/base-control-value-accessor.component.mjs +297 -0
- package/esm2022/v-angular/base-control-value-accessor/base-control-value-accessor.module.mjs +17 -0
- package/esm2022/v-angular/base-control-value-accessor/index.mjs +3 -0
- package/esm2022/v-angular/breadcrumbs/breadcrumbs.component.mjs +25 -0
- package/esm2022/v-angular/breadcrumbs/breadcrumbs.module.mjs +20 -0
- package/esm2022/v-angular/breadcrumbs/index.mjs +3 -0
- package/esm2022/v-angular/button/button.component.mjs +108 -0
- package/esm2022/v-angular/button/button.module.mjs +20 -0
- package/esm2022/v-angular/button/index.mjs +3 -0
- package/esm2022/v-angular/card/card.component.mjs +11 -0
- package/esm2022/v-angular/card/card.module.mjs +18 -0
- package/esm2022/v-angular/card/index.mjs +3 -0
- package/esm2022/v-angular/character-countdown/character-countdown.directive.mjs +51 -0
- package/esm2022/v-angular/character-countdown/character-countdown.module.mjs +18 -0
- package/esm2022/v-angular/character-countdown/index.mjs +3 -0
- package/esm2022/v-angular/checkbox/checkbox.component.mjs +74 -0
- package/esm2022/v-angular/checkbox/checkbox.module.mjs +21 -0
- package/esm2022/v-angular/checkbox/index.mjs +3 -0
- package/esm2022/v-angular/datepicker/components/calendar/calendar.component.mjs +200 -0
- package/esm2022/v-angular/datepicker/components/calendar-control/calendar-control.component.mjs +115 -0
- package/esm2022/v-angular/datepicker/components/date-input/date-input.component.mjs +203 -0
- package/esm2022/v-angular/datepicker/components/datepicker/datepicker.component.mjs +135 -0
- package/esm2022/v-angular/datepicker/date-control-value-accessor/date-control-value-accessor.component.mjs +408 -0
- package/esm2022/v-angular/datepicker/datepicker.globals.mjs +20 -0
- package/esm2022/v-angular/datepicker/datepicker.models.mjs +56 -0
- package/esm2022/v-angular/datepicker/datepicker.module.mjs +63 -0
- package/esm2022/v-angular/datepicker/datepicker.utils.mjs +196 -0
- package/esm2022/v-angular/datepicker/directives/calendar-date.directive.mjs +47 -0
- package/esm2022/v-angular/datepicker/index.mjs +17 -0
- package/esm2022/v-angular/datepicker/models/dates.mjs +291 -0
- package/esm2022/v-angular/datepicker/pipes/date-thook.pipe.mjs +30 -0
- package/esm2022/v-angular/datepicker/pipes/is-disabled.pipe.mjs +37 -0
- package/esm2022/v-angular/datepicker/pipes/matches.pipe.mjs +17 -0
- package/esm2022/v-angular/drag-drop/drag-drop.component.mjs +496 -0
- package/esm2022/v-angular/drag-drop/drag-drop.models.mjs +2 -0
- package/esm2022/v-angular/drag-drop/drag-drop.module.mjs +49 -0
- package/esm2022/v-angular/drag-drop/drag-drop.pipes.mjs +70 -0
- package/esm2022/v-angular/drag-drop/drag-drop.utils.mjs +75 -0
- package/esm2022/v-angular/drag-drop/index.mjs +5 -0
- package/esm2022/v-angular/dropdown/dropdown-list/dropdown-list.component.mjs +271 -0
- package/esm2022/v-angular/dropdown/dropdown-list/index.mjs +2 -0
- package/esm2022/v-angular/dropdown/dropdown.component.mjs +246 -0
- package/esm2022/v-angular/dropdown/dropdown.module.mjs +38 -0
- package/esm2022/v-angular/dropdown/index.mjs +6 -0
- package/esm2022/v-angular/dropdown/typeahead/index.mjs +6 -0
- package/esm2022/v-angular/dropdown/typeahead/typeahead-dropdown-list/typeahead-dropdown-list.component.mjs +98 -0
- package/esm2022/v-angular/dropdown/typeahead/typeahead-highlight/typeahead-highlight.component.mjs +85 -0
- package/esm2022/v-angular/dropdown/typeahead/typeahead-input/typeahead-input.component.mjs +132 -0
- package/esm2022/v-angular/dropdown/typeahead/typeahead.directive.mjs +177 -0
- package/esm2022/v-angular/dropdown/typeahead/typeahead.module.mjs +33 -0
- package/esm2022/v-angular/external-link/external-link.directive.mjs +37 -0
- package/esm2022/v-angular/external-link/external-link.module.mjs +18 -0
- package/esm2022/v-angular/external-link/index.mjs +3 -0
- package/esm2022/v-angular/i18n/i18n.json +12 -0
- package/esm2022/v-angular/i18n/i18n.module.mjs +89 -0
- package/esm2022/v-angular/i18n/i18n.test.module.mjs +89 -0
- package/esm2022/v-angular/i18n/index.mjs +3 -0
- package/esm2022/v-angular/index.mjs +27 -0
- package/esm2022/v-angular/info-circle/index.mjs +3 -0
- package/esm2022/v-angular/info-circle/info-circle.component.mjs +28 -0
- package/esm2022/v-angular/info-circle/info-circle.module.mjs +21 -0
- package/esm2022/v-angular/input/index.mjs +3 -0
- package/esm2022/v-angular/input/input.component.mjs +218 -0
- package/esm2022/v-angular/input/input.module.mjs +41 -0
- package/esm2022/v-angular/input-mask/config.mjs +9 -0
- package/esm2022/v-angular/input-mask/constants.mjs +2 -0
- package/esm2022/v-angular/input-mask/index.mjs +6 -0
- package/esm2022/v-angular/input-mask/input-mask-format.pipe.mjs +21 -0
- package/esm2022/v-angular/input-mask/input-mask.directive.mjs +165 -0
- package/esm2022/v-angular/input-mask/input-mask.module.mjs +35 -0
- package/esm2022/v-angular/input-mask/input-mask.types.mjs +2 -0
- package/esm2022/v-angular/modal/dialog/dialog.component.mjs +217 -0
- package/esm2022/v-angular/modal/fold-out/fold-out.component.mjs +157 -0
- package/esm2022/v-angular/modal/fold-out/fold-out.directive.mjs +19 -0
- package/esm2022/v-angular/modal/fold-out/keyboard-key.enum.mjs +9 -0
- package/esm2022/v-angular/modal/index.mjs +6 -0
- package/esm2022/v-angular/modal/modal.globals.mjs +20 -0
- package/esm2022/v-angular/modal/modal.module.mjs +53 -0
- package/esm2022/v-angular/modal/modal.types.mjs +2 -0
- package/esm2022/v-angular/modal/slide-out/slide-out.component.mjs +253 -0
- package/esm2022/v-angular/pagination/index.mjs +3 -0
- package/esm2022/v-angular/pagination/pagination.component.mjs +144 -0
- package/esm2022/v-angular/pagination/pagination.module.mjs +37 -0
- package/esm2022/v-angular/radio/index.mjs +3 -0
- package/esm2022/v-angular/radio/radio.component.mjs +132 -0
- package/esm2022/v-angular/radio/radio.module.mjs +21 -0
- package/esm2022/v-angular/sebgroup-green-angular-v-angular.mjs +5 -0
- package/esm2022/v-angular/slug/index.mjs +3 -0
- package/esm2022/v-angular/slug/slug.module.mjs +18 -0
- package/esm2022/v-angular/slug/slug.pipe.mjs +27 -0
- package/esm2022/v-angular/table/index.mjs +9 -0
- package/esm2022/v-angular/table/table.component.mjs +387 -0
- package/esm2022/v-angular/table/table.directive.mjs +110 -0
- package/esm2022/v-angular/table/table.models.mjs +2 -0
- package/esm2022/v-angular/table/table.module.mjs +40 -0
- package/esm2022/v-angular/table/table.tools.mjs +29 -0
- package/esm2022/v-angular/table/tr-thook.pipe.mjs +22 -0
- package/esm2022/v-angular/tabs/index.mjs +8 -0
- package/esm2022/v-angular/tabs/tab.directive.mjs +81 -0
- package/esm2022/v-angular/tabs/tabs.component.mjs +260 -0
- package/esm2022/v-angular/tabs/tabs.models.mjs +2 -0
- package/esm2022/v-angular/tabs/tabs.module.mjs +21 -0
- package/esm2022/v-angular/textarea/index.mjs +3 -0
- package/esm2022/v-angular/textarea/textarea.component.mjs +105 -0
- package/esm2022/v-angular/textarea/textarea.module.mjs +34 -0
- package/esm2022/v-angular/toast/index.mjs +8 -0
- package/esm2022/v-angular/toast/toast-message.service.mjs +63 -0
- package/esm2022/v-angular/toast/toast.component.mjs +70 -0
- package/esm2022/v-angular/toast/toast.models.mjs +8 -0
- package/esm2022/v-angular/toast/toast.module.mjs +21 -0
- package/esm2022/v-angular/tooltip/index.mjs +3 -0
- package/esm2022/v-angular/tooltip/tooltip.directive.mjs +293 -0
- package/esm2022/v-angular/tooltip/tooltip.module.mjs +18 -0
- package/esm2022/v-angular/tooltip/tooltip.styles.mjs +60 -0
- package/esm2022/v-angular/v-angular.module.mjs +120 -0
- package/fesm2022/sebgroup-green-angular-src-lib-accordion.mjs +141 -0
- package/fesm2022/sebgroup-green-angular-src-lib-accordion.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular-src-lib-badge.mjs +102 -0
- package/fesm2022/sebgroup-green-angular-src-lib-badge.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular-src-lib-button.mjs +50 -0
- package/fesm2022/sebgroup-green-angular-src-lib-button.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular-src-lib-cell-table.mjs +270 -0
- package/fesm2022/sebgroup-green-angular-src-lib-cell-table.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular-src-lib-context-menu.mjs +97 -0
- package/fesm2022/sebgroup-green-angular-src-lib-context-menu.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular-src-lib-datepicker.mjs +162 -0
- package/fesm2022/sebgroup-green-angular-src-lib-datepicker.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular-src-lib-dropdown.mjs +284 -0
- package/fesm2022/sebgroup-green-angular-src-lib-dropdown.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular-src-lib-in-page-wizard.mjs +83 -0
- package/fesm2022/sebgroup-green-angular-src-lib-in-page-wizard.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular-src-lib-modal.mjs +377 -0
- package/fesm2022/sebgroup-green-angular-src-lib-modal.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular-src-lib-pagination.mjs +197 -0
- package/fesm2022/sebgroup-green-angular-src-lib-pagination.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular-src-lib-progress-circle.mjs +63 -0
- package/fesm2022/sebgroup-green-angular-src-lib-progress-circle.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular-src-lib-segmented-control.mjs +58 -0
- package/fesm2022/sebgroup-green-angular-src-lib-segmented-control.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular-src-lib-shared.mjs +113 -0
- package/fesm2022/sebgroup-green-angular-src-lib-shared.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular-src-lib-slider.mjs +135 -0
- package/fesm2022/sebgroup-green-angular-src-lib-slider.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular-src-lib-sortable-list.mjs +204 -0
- package/fesm2022/sebgroup-green-angular-src-lib-sortable-list.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-account-number.mjs +76 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-account-number.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-alert.mjs +76 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-alert.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-base-control-value-accessor.mjs +318 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-base-control-value-accessor.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-breadcrumbs.mjs +49 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-breadcrumbs.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-button.mjs +131 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-button.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-card.mjs +33 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-card.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-character-countdown.mjs +73 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-character-countdown.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-checkbox.mjs +98 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-checkbox.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-core.mjs +88 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-core.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-datepicker.mjs +1759 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-datepicker.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-drag-drop.mjs +685 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-drag-drop.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-dropdown.mjs +1037 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-dropdown.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-external-link.mjs +58 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-external-link.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-i18n.mjs +198 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-i18n.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-info-circle.mjs +53 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-info-circle.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-input-mask.mjs +227 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-input-mask.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-input.mjs +262 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-input.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-modal.mjs +717 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-modal.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-pagination.mjs +185 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-pagination.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-radio.mjs +156 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-radio.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-slug.mjs +49 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-slug.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-table.mjs +585 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-table.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-tabs.mjs +365 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-tabs.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-textarea.mjs +141 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-textarea.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-toast.mjs +166 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-toast.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-tooltip.mjs +374 -0
- package/fesm2022/sebgroup-green-angular-src-v-angular-tooltip.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular-v-angular.mjs +7538 -0
- package/fesm2022/sebgroup-green-angular-v-angular.mjs.map +1 -0
- package/fesm2022/sebgroup-green-angular.mjs +2229 -0
- package/fesm2022/sebgroup-green-angular.mjs.map +1 -0
- package/index.d.ts +17 -0
- package/lib/accordion/accordion-list-item.component.d.ts +16 -0
- package/lib/accordion/accordion.component.d.ts +16 -0
- package/lib/accordion/accordion.module.d.ts +9 -0
- package/lib/accordion/index.d.ts +3 -0
- package/lib/badge/badge.component.d.ts +25 -0
- package/lib/badge/badge.module.d.ts +8 -0
- package/lib/badge/index.d.ts +2 -0
- package/lib/button/button.component.d.ts +9 -0
- package/lib/button/button.module.d.ts +8 -0
- package/lib/button/index.d.ts +2 -0
- package/lib/cell-table/cell-table-item.component.d.ts +14 -0
- package/lib/cell-table/cell-table.component.d.ts +44 -0
- package/lib/cell-table/cell-table.module.d.ts +10 -0
- package/lib/cell-table/cell-table.types.d.ts +34 -0
- package/lib/cell-table/cell-underline.directive.d.ts +14 -0
- package/lib/cell-table/index.d.ts +3 -0
- package/lib/context-menu/context-menu.component.d.ts +44 -0
- package/lib/context-menu/context-menu.module.d.ts +9 -0
- package/lib/context-menu/index.d.ts +2 -0
- package/lib/datepicker/datepicker.component.d.ts +59 -0
- package/lib/datepicker/datepicker.module.d.ts +9 -0
- package/lib/datepicker/index.d.ts +2 -0
- package/lib/dropdown/dropdown-button.directive.d.ts +8 -0
- package/lib/dropdown/dropdown-option.directive.d.ts +8 -0
- package/lib/dropdown/dropdown.component.d.ts +78 -0
- package/lib/dropdown/dropdown.module.d.ts +11 -0
- package/lib/dropdown/index.d.ts +4 -0
- package/lib/green-angular.module.d.ts +21 -0
- package/lib/in-page-wizard/in-page-wizard-step-card.component.d.ts +19 -0
- package/lib/in-page-wizard/in-page-wizard.module.d.ts +8 -0
- package/lib/in-page-wizard/index.d.ts +2 -0
- package/lib/modal/index.d.ts +4 -0
- package/lib/modal/modal-footer.directive.d.ts +8 -0
- package/lib/modal/modal-header.directive.d.ts +8 -0
- package/lib/modal/modal.component.d.ts +67 -0
- package/lib/modal/modal.module.d.ts +11 -0
- package/lib/pagination/index.d.ts +2 -0
- package/lib/pagination/pagination.component.d.ts +42 -0
- package/lib/pagination/pagination.module.d.ts +8 -0
- package/lib/progress-circle/index.d.ts +2 -0
- package/lib/progress-circle/progress-circle.component.d.ts +14 -0
- package/lib/progress-circle/progress-circle.module.d.ts +8 -0
- package/lib/segmented-control/index.d.ts +2 -0
- package/lib/segmented-control/segmented-control.component.d.ts +11 -0
- package/lib/segmented-control/segmented-control.module.d.ts +9 -0
- package/lib/shared/core-element/core-element.directive.d.ts +13 -0
- package/lib/shared/core-element/core-element.module.d.ts +8 -0
- package/lib/shared/core-element/index.d.ts +2 -0
- package/lib/shared/index.d.ts +3 -0
- package/lib/shared/on-scroll.directive.d.ts +14 -0
- package/lib/shared/shared.module.d.ts +8 -0
- package/lib/slider/index.d.ts +2 -0
- package/lib/slider/slider.component.d.ts +38 -0
- package/lib/slider/slider.module.d.ts +9 -0
- package/lib/sortable-list/index.d.ts +2 -0
- package/lib/sortable-list/sortable-list.component.d.ts +91 -0
- package/lib/sortable-list/sortable-list.module.d.ts +10 -0
- package/package.json +308 -0
- package/src/lib/accordion/accordion-list-item.component.d.ts +16 -0
- package/src/lib/accordion/accordion.component.d.ts +16 -0
- package/src/lib/accordion/accordion.module.d.ts +9 -0
- package/src/lib/accordion/index.d.ts +3 -0
- package/src/lib/badge/badge.component.d.ts +25 -0
- package/src/lib/badge/badge.module.d.ts +8 -0
- package/src/lib/badge/index.d.ts +2 -0
- package/src/lib/button/button.component.d.ts +9 -0
- package/src/lib/button/button.module.d.ts +8 -0
- package/src/lib/button/index.d.ts +2 -0
- package/src/lib/cell-table/cell-table-item.component.d.ts +14 -0
- package/src/lib/cell-table/cell-table.component.d.ts +44 -0
- package/src/lib/cell-table/cell-table.module.d.ts +10 -0
- package/src/lib/cell-table/cell-table.types.d.ts +34 -0
- package/src/lib/cell-table/cell-underline.directive.d.ts +14 -0
- package/src/lib/cell-table/index.d.ts +3 -0
- package/src/lib/context-menu/context-menu.component.d.ts +44 -0
- package/src/lib/context-menu/context-menu.module.d.ts +9 -0
- package/src/lib/context-menu/index.d.ts +2 -0
- package/src/lib/datepicker/datepicker.component.d.ts +59 -0
- package/src/lib/datepicker/datepicker.module.d.ts +9 -0
- package/src/lib/datepicker/index.d.ts +2 -0
- package/src/lib/dropdown/dropdown-button.directive.d.ts +8 -0
- package/src/lib/dropdown/dropdown-option.directive.d.ts +8 -0
- package/src/lib/dropdown/dropdown.component.d.ts +78 -0
- package/src/lib/dropdown/dropdown.module.d.ts +11 -0
- package/src/lib/dropdown/index.d.ts +4 -0
- package/src/lib/in-page-wizard/in-page-wizard-step-card.component.d.ts +19 -0
- package/src/lib/in-page-wizard/in-page-wizard.module.d.ts +8 -0
- package/src/lib/in-page-wizard/index.d.ts +2 -0
- package/src/lib/modal/index.d.ts +4 -0
- package/src/lib/modal/modal-footer.directive.d.ts +8 -0
- package/src/lib/modal/modal-header.directive.d.ts +8 -0
- package/src/lib/modal/modal.component.d.ts +67 -0
- package/src/lib/modal/modal.module.d.ts +11 -0
- package/src/lib/pagination/index.d.ts +2 -0
- package/src/lib/pagination/pagination.component.d.ts +42 -0
- package/src/lib/pagination/pagination.module.d.ts +8 -0
- package/src/lib/progress-circle/index.d.ts +2 -0
- package/src/lib/progress-circle/progress-circle.component.d.ts +14 -0
- package/src/lib/progress-circle/progress-circle.module.d.ts +8 -0
- package/src/lib/segmented-control/index.d.ts +2 -0
- package/src/lib/segmented-control/segmented-control.component.d.ts +11 -0
- package/src/lib/segmented-control/segmented-control.module.d.ts +9 -0
- package/src/lib/shared/core-element/core-element.directive.d.ts +13 -0
- package/src/lib/shared/core-element/core-element.module.d.ts +8 -0
- package/src/lib/shared/core-element/index.d.ts +2 -0
- package/src/lib/shared/index.d.ts +3 -0
- package/src/lib/shared/on-scroll.directive.d.ts +14 -0
- package/src/lib/shared/shared.module.d.ts +8 -0
- package/src/lib/slider/index.d.ts +2 -0
- package/src/lib/slider/slider.component.d.ts +38 -0
- package/src/lib/slider/slider.module.d.ts +9 -0
- package/src/lib/sortable-list/index.d.ts +2 -0
- package/src/lib/sortable-list/sortable-list.component.d.ts +91 -0
- package/src/lib/sortable-list/sortable-list.module.d.ts +10 -0
- package/src/v-angular/account-number/README.md +70 -0
- package/src/v-angular/account-number/account-number.module.d.ts +8 -0
- package/src/v-angular/account-number/account-number.pipe.d.ts +32 -0
- package/src/v-angular/account-number/index.d.ts +2 -0
- package/src/v-angular/alert/alert.component.d.ts +19 -0
- package/src/v-angular/alert/alert.models.d.ts +13 -0
- package/src/v-angular/alert/alert.module.d.ts +8 -0
- package/src/v-angular/alert/index.d.ts +3 -0
- package/src/v-angular/base-control-value-accessor/base-control-value-accessor.component.d.ts +130 -0
- package/src/v-angular/base-control-value-accessor/base-control-value-accessor.module.d.ts +7 -0
- package/src/v-angular/base-control-value-accessor/index.d.ts +2 -0
- package/src/v-angular/breadcrumbs/breadcrumbs.component.d.ts +18 -0
- package/src/v-angular/breadcrumbs/breadcrumbs.module.d.ts +10 -0
- package/src/v-angular/breadcrumbs/index.d.ts +2 -0
- package/src/v-angular/button/button.component.d.ts +62 -0
- package/src/v-angular/button/button.module.d.ts +10 -0
- package/src/v-angular/button/index.d.ts +2 -0
- package/src/v-angular/card/card.component.d.ts +5 -0
- package/src/v-angular/card/card.module.d.ts +8 -0
- package/src/v-angular/card/index.d.ts +2 -0
- package/src/v-angular/character-countdown/character-countdown.directive.d.ts +17 -0
- package/src/v-angular/character-countdown/character-countdown.module.d.ts +8 -0
- package/src/v-angular/character-countdown/index.d.ts +2 -0
- package/src/v-angular/checkbox/checkbox.component.d.ts +28 -0
- package/src/v-angular/checkbox/checkbox.module.d.ts +10 -0
- package/src/v-angular/checkbox/index.d.ts +2 -0
- package/src/v-angular/core/core.globals.d.ts +13 -0
- package/src/v-angular/core/core.utils.d.ts +23 -0
- package/src/v-angular/core/index.d.ts +2 -0
- package/src/v-angular/datepicker/components/calendar/calendar.component.d.ts +36 -0
- package/src/v-angular/datepicker/components/calendar-control/calendar-control.component.d.ts +30 -0
- package/src/v-angular/datepicker/components/date-input/date-input.component.d.ts +102 -0
- package/src/v-angular/datepicker/components/datepicker/datepicker.component.d.ts +62 -0
- package/src/v-angular/datepicker/date-control-value-accessor/date-control-value-accessor.component.d.ts +165 -0
- package/src/v-angular/datepicker/datepicker.globals.d.ts +13 -0
- package/src/v-angular/datepicker/datepicker.models.d.ts +50 -0
- package/src/v-angular/datepicker/datepicker.module.d.ts +19 -0
- package/src/v-angular/datepicker/datepicker.utils.d.ts +39 -0
- package/src/v-angular/datepicker/directives/calendar-date.directive.d.ts +21 -0
- package/src/v-angular/datepicker/index.d.ts +13 -0
- package/src/v-angular/datepicker/models/dates.d.ts +15 -0
- package/src/v-angular/datepicker/pipes/date-thook.pipe.d.ts +8 -0
- package/src/v-angular/datepicker/pipes/is-disabled.pipe.d.ts +8 -0
- package/src/v-angular/datepicker/pipes/matches.pipe.d.ts +7 -0
- package/src/v-angular/drag-drop/drag-drop.component.d.ts +131 -0
- package/src/v-angular/drag-drop/drag-drop.models.d.ts +49 -0
- package/src/v-angular/drag-drop/drag-drop.module.d.ts +13 -0
- package/src/v-angular/drag-drop/drag-drop.pipes.d.ts +40 -0
- package/src/v-angular/drag-drop/drag-drop.utils.d.ts +33 -0
- package/src/v-angular/drag-drop/index.d.ts +4 -0
- package/src/v-angular/dropdown/dropdown-list/dropdown-list.component.d.ts +96 -0
- package/src/v-angular/dropdown/dropdown-list/index.d.ts +1 -0
- package/src/v-angular/dropdown/dropdown.component.d.ts +103 -0
- package/src/v-angular/dropdown/dropdown.module.d.ts +13 -0
- package/src/v-angular/dropdown/index.d.ts +5 -0
- package/src/v-angular/dropdown/typeahead/index.d.ts +5 -0
- package/src/v-angular/dropdown/typeahead/typeahead-dropdown-list/typeahead-dropdown-list.component.d.ts +34 -0
- package/src/v-angular/dropdown/typeahead/typeahead-highlight/typeahead-highlight.component.d.ts +34 -0
- package/src/v-angular/dropdown/typeahead/typeahead-input/typeahead-input.component.d.ts +59 -0
- package/src/v-angular/dropdown/typeahead/typeahead.directive.d.ts +76 -0
- package/src/v-angular/dropdown/typeahead/typeahead.module.d.ts +11 -0
- package/src/v-angular/external-link/external-link.directive.d.ts +17 -0
- package/src/v-angular/external-link/external-link.module.d.ts +8 -0
- package/src/v-angular/external-link/index.d.ts +2 -0
- package/src/v-angular/i18n/i18n.module.d.ts +15 -0
- package/src/v-angular/i18n/i18n.test.module.d.ts +27 -0
- package/src/v-angular/i18n/index.d.ts +2 -0
- package/src/v-angular/info-circle/index.d.ts +2 -0
- package/src/v-angular/info-circle/info-circle.component.d.ts +16 -0
- package/src/v-angular/info-circle/info-circle.module.d.ts +10 -0
- package/src/v-angular/input/index.d.ts +2 -0
- package/src/v-angular/input/input.component.d.ts +85 -0
- package/src/v-angular/input/input.module.d.ts +13 -0
- package/src/v-angular/input-mask/config.d.ts +6 -0
- package/src/v-angular/input-mask/constants.d.ts +2 -0
- package/src/v-angular/input-mask/index.d.ts +5 -0
- package/src/v-angular/input-mask/input-mask-format.pipe.d.ts +8 -0
- package/src/v-angular/input-mask/input-mask.directive.d.ts +39 -0
- package/src/v-angular/input-mask/input-mask.module.d.ts +11 -0
- package/src/v-angular/input-mask/input-mask.types.d.ts +20 -0
- package/src/v-angular/modal/dialog/dialog.component.d.ts +64 -0
- package/src/v-angular/modal/fold-out/fold-out.component.d.ts +47 -0
- package/src/v-angular/modal/fold-out/fold-out.directive.d.ts +6 -0
- package/src/v-angular/modal/fold-out/keyboard-key.enum.d.ts +7 -0
- package/src/v-angular/modal/index.d.ts +5 -0
- package/src/v-angular/modal/modal.globals.d.ts +13 -0
- package/src/v-angular/modal/modal.module.d.ts +15 -0
- package/src/v-angular/modal/modal.types.d.ts +5 -0
- package/src/v-angular/modal/slide-out/slide-out.component.d.ts +83 -0
- package/src/v-angular/pagination/index.d.ts +2 -0
- package/src/v-angular/pagination/pagination.component.d.ts +64 -0
- package/src/v-angular/pagination/pagination.module.d.ts +12 -0
- package/src/v-angular/radio/index.d.ts +2 -0
- package/src/v-angular/radio/radio.component.d.ts +49 -0
- package/src/v-angular/radio/radio.module.d.ts +10 -0
- package/src/v-angular/slug/index.d.ts +2 -0
- package/src/v-angular/slug/slug.module.d.ts +8 -0
- package/src/v-angular/slug/slug.pipe.d.ts +12 -0
- package/src/v-angular/table/index.d.ts +5 -0
- package/src/v-angular/table/table.component.d.ts +229 -0
- package/src/v-angular/table/table.directive.d.ts +36 -0
- package/src/v-angular/table/table.models.d.ts +62 -0
- package/src/v-angular/table/table.module.d.ts +12 -0
- package/src/v-angular/table/table.tools.d.ts +5 -0
- package/src/v-angular/table/tr-thook.pipe.d.ts +7 -0
- package/src/v-angular/tabs/index.d.ts +4 -0
- package/src/v-angular/tabs/tab.directive.d.ts +37 -0
- package/src/v-angular/tabs/tabs.component.d.ts +65 -0
- package/src/v-angular/tabs/tabs.models.d.ts +25 -0
- package/src/v-angular/tabs/tabs.module.d.ts +11 -0
- package/src/v-angular/textarea/index.d.ts +2 -0
- package/src/v-angular/textarea/textarea.component.d.ts +45 -0
- package/src/v-angular/textarea/textarea.module.d.ts +12 -0
- package/src/v-angular/toast/index.d.ts +4 -0
- package/src/v-angular/toast/toast-message.service.d.ts +17 -0
- package/src/v-angular/toast/toast.component.d.ts +22 -0
- package/src/v-angular/toast/toast.models.d.ts +15 -0
- package/src/v-angular/toast/toast.module.d.ts +10 -0
- package/src/v-angular/tooltip/index.d.ts +2 -0
- package/src/v-angular/tooltip/tooltip.directive.d.ts +108 -0
- package/src/v-angular/tooltip/tooltip.module.d.ts +8 -0
- package/src/v-angular/tooltip/tooltip.styles.d.ts +11 -0
- package/v-angular/alert/alert.component.d.ts +19 -0
- package/v-angular/alert/alert.models.d.ts +13 -0
- package/v-angular/alert/alert.module.d.ts +8 -0
- package/v-angular/alert/index.d.ts +3 -0
- package/v-angular/base-control-value-accessor/base-control-value-accessor.component.d.ts +130 -0
- package/v-angular/base-control-value-accessor/base-control-value-accessor.module.d.ts +7 -0
- package/v-angular/base-control-value-accessor/index.d.ts +2 -0
- package/v-angular/breadcrumbs/breadcrumbs.component.d.ts +18 -0
- package/v-angular/breadcrumbs/breadcrumbs.module.d.ts +10 -0
- package/v-angular/breadcrumbs/index.d.ts +2 -0
- package/v-angular/button/button.component.d.ts +62 -0
- package/v-angular/button/button.module.d.ts +10 -0
- package/v-angular/button/index.d.ts +2 -0
- package/v-angular/card/card.component.d.ts +5 -0
- package/v-angular/card/card.module.d.ts +8 -0
- package/v-angular/card/index.d.ts +2 -0
- package/v-angular/character-countdown/character-countdown.directive.d.ts +17 -0
- package/v-angular/character-countdown/character-countdown.module.d.ts +8 -0
- package/v-angular/character-countdown/index.d.ts +2 -0
- package/v-angular/checkbox/checkbox.component.d.ts +28 -0
- package/v-angular/checkbox/checkbox.module.d.ts +10 -0
- package/v-angular/checkbox/index.d.ts +2 -0
- package/v-angular/datepicker/components/calendar/calendar.component.d.ts +36 -0
- package/v-angular/datepicker/components/calendar-control/calendar-control.component.d.ts +30 -0
- package/v-angular/datepicker/components/date-input/date-input.component.d.ts +102 -0
- package/v-angular/datepicker/components/datepicker/datepicker.component.d.ts +62 -0
- package/v-angular/datepicker/date-control-value-accessor/date-control-value-accessor.component.d.ts +165 -0
- package/v-angular/datepicker/datepicker.globals.d.ts +13 -0
- package/v-angular/datepicker/datepicker.models.d.ts +50 -0
- package/v-angular/datepicker/datepicker.module.d.ts +19 -0
- package/v-angular/datepicker/datepicker.utils.d.ts +39 -0
- package/v-angular/datepicker/directives/calendar-date.directive.d.ts +21 -0
- package/v-angular/datepicker/index.d.ts +13 -0
- package/v-angular/datepicker/models/dates.d.ts +15 -0
- package/v-angular/datepicker/pipes/date-thook.pipe.d.ts +8 -0
- package/v-angular/datepicker/pipes/is-disabled.pipe.d.ts +8 -0
- package/v-angular/datepicker/pipes/matches.pipe.d.ts +7 -0
- package/v-angular/drag-drop/drag-drop.component.d.ts +131 -0
- package/v-angular/drag-drop/drag-drop.models.d.ts +49 -0
- package/v-angular/drag-drop/drag-drop.module.d.ts +13 -0
- package/v-angular/drag-drop/drag-drop.pipes.d.ts +40 -0
- package/v-angular/drag-drop/drag-drop.utils.d.ts +33 -0
- package/v-angular/drag-drop/index.d.ts +4 -0
- package/v-angular/dropdown/dropdown-list/dropdown-list.component.d.ts +96 -0
- package/v-angular/dropdown/dropdown-list/index.d.ts +1 -0
- package/v-angular/dropdown/dropdown.component.d.ts +103 -0
- package/v-angular/dropdown/dropdown.module.d.ts +13 -0
- package/v-angular/dropdown/index.d.ts +5 -0
- package/v-angular/dropdown/typeahead/index.d.ts +5 -0
- package/v-angular/dropdown/typeahead/typeahead-dropdown-list/typeahead-dropdown-list.component.d.ts +34 -0
- package/v-angular/dropdown/typeahead/typeahead-highlight/typeahead-highlight.component.d.ts +34 -0
- package/v-angular/dropdown/typeahead/typeahead-input/typeahead-input.component.d.ts +59 -0
- package/v-angular/dropdown/typeahead/typeahead.directive.d.ts +76 -0
- package/v-angular/dropdown/typeahead/typeahead.module.d.ts +11 -0
- package/v-angular/external-link/external-link.directive.d.ts +17 -0
- package/v-angular/external-link/external-link.module.d.ts +8 -0
- package/v-angular/external-link/index.d.ts +2 -0
- package/v-angular/i18n/i18n.module.d.ts +15 -0
- package/v-angular/i18n/i18n.test.module.d.ts +27 -0
- package/v-angular/i18n/index.d.ts +2 -0
- package/v-angular/index.d.ts +26 -0
- package/v-angular/info-circle/index.d.ts +2 -0
- package/v-angular/info-circle/info-circle.component.d.ts +16 -0
- package/v-angular/info-circle/info-circle.module.d.ts +10 -0
- package/v-angular/input/index.d.ts +2 -0
- package/v-angular/input/input.component.d.ts +85 -0
- package/v-angular/input/input.module.d.ts +13 -0
- package/v-angular/input-mask/config.d.ts +6 -0
- package/v-angular/input-mask/constants.d.ts +2 -0
- package/v-angular/input-mask/index.d.ts +5 -0
- package/v-angular/input-mask/input-mask-format.pipe.d.ts +8 -0
- package/v-angular/input-mask/input-mask.directive.d.ts +39 -0
- package/v-angular/input-mask/input-mask.module.d.ts +11 -0
- package/v-angular/input-mask/input-mask.types.d.ts +20 -0
- package/v-angular/modal/dialog/dialog.component.d.ts +64 -0
- package/v-angular/modal/fold-out/fold-out.component.d.ts +47 -0
- package/v-angular/modal/fold-out/fold-out.directive.d.ts +6 -0
- package/v-angular/modal/fold-out/keyboard-key.enum.d.ts +7 -0
- package/v-angular/modal/index.d.ts +5 -0
- package/v-angular/modal/modal.globals.d.ts +13 -0
- package/v-angular/modal/modal.module.d.ts +15 -0
- package/v-angular/modal/modal.types.d.ts +5 -0
- package/v-angular/modal/slide-out/slide-out.component.d.ts +83 -0
- package/v-angular/pagination/index.d.ts +2 -0
- package/v-angular/pagination/pagination.component.d.ts +64 -0
- package/v-angular/pagination/pagination.module.d.ts +12 -0
- package/v-angular/radio/index.d.ts +2 -0
- package/v-angular/radio/radio.component.d.ts +49 -0
- package/v-angular/radio/radio.module.d.ts +10 -0
- package/v-angular/slug/index.d.ts +2 -0
- package/v-angular/slug/slug.module.d.ts +8 -0
- package/v-angular/slug/slug.pipe.d.ts +12 -0
- package/v-angular/table/index.d.ts +5 -0
- package/v-angular/table/table.component.d.ts +229 -0
- package/v-angular/table/table.directive.d.ts +36 -0
- package/v-angular/table/table.models.d.ts +62 -0
- package/v-angular/table/table.module.d.ts +12 -0
- package/v-angular/table/table.tools.d.ts +5 -0
- package/v-angular/table/tr-thook.pipe.d.ts +7 -0
- package/v-angular/tabs/index.d.ts +4 -0
- package/v-angular/tabs/tab.directive.d.ts +37 -0
- package/v-angular/tabs/tabs.component.d.ts +65 -0
- package/v-angular/tabs/tabs.models.d.ts +25 -0
- package/v-angular/tabs/tabs.module.d.ts +11 -0
- package/v-angular/textarea/index.d.ts +2 -0
- package/v-angular/textarea/textarea.component.d.ts +45 -0
- package/v-angular/textarea/textarea.module.d.ts +12 -0
- package/v-angular/toast/index.d.ts +4 -0
- package/v-angular/toast/toast-message.service.d.ts +17 -0
- package/v-angular/toast/toast.component.d.ts +22 -0
- package/v-angular/toast/toast.models.d.ts +15 -0
- package/v-angular/toast/toast.module.d.ts +10 -0
- package/v-angular/tooltip/index.d.ts +2 -0
- package/v-angular/tooltip/tooltip.directive.d.ts +108 -0
- package/v-angular/tooltip/tooltip.module.d.ts +8 -0
- package/v-angular/tooltip/tooltip.styles.d.ts +11 -0
- package/v-angular/v-angular.module.d.ts +33 -0
|
@@ -0,0 +1,496 @@
|
|
|
1
|
+
import { HttpEventType } from '@angular/common/http';
|
|
2
|
+
import { Component, EventEmitter, HostBinding, HostListener, Input, Output, ViewChild, } from '@angular/core';
|
|
3
|
+
import { timer } from 'rxjs';
|
|
4
|
+
import { filter, retryWhen, switchMap, take, tap } from 'rxjs/operators';
|
|
5
|
+
import { NggvDialogComponent, } from '@sebgroup/green-angular/src/v-angular/modal';
|
|
6
|
+
import { extendFile, isDragDropAvailable, pick, retryStrategy, verifyAccept, } from './drag-drop.utils';
|
|
7
|
+
import '@sebgroup/green-core/components/icon/icons/cloud-upload.js';
|
|
8
|
+
import '@sebgroup/green-core/components/icon/icons/cross-small.js';
|
|
9
|
+
import '@sebgroup/green-core/components/icon/icons/checkmark.js';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "@jsverse/transloco";
|
|
12
|
+
import * as i2 from "@sebgroup/green-angular/src/v-angular/modal";
|
|
13
|
+
import * as i3 from "@sebgroup/green-angular/src/lib/shared";
|
|
14
|
+
import * as i4 from "@angular/common";
|
|
15
|
+
import * as i5 from "./drag-drop.pipes";
|
|
16
|
+
export class NggvDragDropComponent {
|
|
17
|
+
constructor() {
|
|
18
|
+
/** Special property used for selecting DOM elements during automated UI testing. */
|
|
19
|
+
this.thook = 'drag-drop';
|
|
20
|
+
/** Disables deletion or cancellation during defined states [local | uploading | aborted | uploaded | validating | error | deleted | done]. */
|
|
21
|
+
this.disableRemove = [];
|
|
22
|
+
/** File size limit in mega bytes. */
|
|
23
|
+
this.fileLimit = 250 * 1024 * 1024;
|
|
24
|
+
/** Allowing selecting or dropping multiple files. */
|
|
25
|
+
this.multiple = true;
|
|
26
|
+
/** Determines if list should be shown under upload, disabling list disables multiple upload. */
|
|
27
|
+
this.list = true;
|
|
28
|
+
/** Frequency of requests which to send to the API requesting status updates. */
|
|
29
|
+
this.throttle = 5000;
|
|
30
|
+
/** Maximum number of attempts to request a status update from the API if service is unreachable. */
|
|
31
|
+
this.retryAttempts = 5;
|
|
32
|
+
/** If selection of multiple file should be possible with a checkbox.
|
|
33
|
+
* @experimental work in progress and should not yet be used.
|
|
34
|
+
* @internal
|
|
35
|
+
*/
|
|
36
|
+
this.selectable = false;
|
|
37
|
+
/** Allows multiple values from `apiFile.status` to be mapped to a single file upload state. */
|
|
38
|
+
this.stateMap = {
|
|
39
|
+
local: 'local',
|
|
40
|
+
uploading: 'uploading',
|
|
41
|
+
aborted: 'aborted',
|
|
42
|
+
uploaded: 'uploaded',
|
|
43
|
+
validating: 'validating',
|
|
44
|
+
error: 'error',
|
|
45
|
+
deleted: 'deleted',
|
|
46
|
+
done: 'done',
|
|
47
|
+
};
|
|
48
|
+
/** Statuses allowed to be fetch during the initial load. Used to hide "done" states from list. */
|
|
49
|
+
this.fetchStatuses = [];
|
|
50
|
+
/** Statuses allowed be shown when status is "rejected". Will fallback to generic message. `null` allows all. */
|
|
51
|
+
this.errorCodes = null;
|
|
52
|
+
/** Event triggered on initialization and every time the "uploadState" for a file changes. */
|
|
53
|
+
this.stateChange = new EventEmitter();
|
|
54
|
+
/** Event triggered when view details is clicked. */
|
|
55
|
+
this.detailsClick = new EventEmitter();
|
|
56
|
+
/** @internal */
|
|
57
|
+
this.isDragDropAvailable = isDragDropAvailable();
|
|
58
|
+
/** @internal */
|
|
59
|
+
this.componentState = 'normal';
|
|
60
|
+
/** @internal */
|
|
61
|
+
this.files = new Map();
|
|
62
|
+
/** @internal */
|
|
63
|
+
this.selected = [];
|
|
64
|
+
/** @internal */
|
|
65
|
+
this.loading = false;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Initialize the component and warn if service is not defined. Will also fetch files for the list if enabled.
|
|
69
|
+
*/
|
|
70
|
+
ngOnInit() {
|
|
71
|
+
if (!this.service) {
|
|
72
|
+
return console.error('Drag and drop component will not work without the [service] property defined!');
|
|
73
|
+
}
|
|
74
|
+
if (this.list) {
|
|
75
|
+
this.service.fetchFiles(this.fetchStatuses).subscribe((apiFiles) => {
|
|
76
|
+
for (const apiFile of apiFiles) {
|
|
77
|
+
const extendedFile = extendFile(undefined, apiFile, {
|
|
78
|
+
progress: 100,
|
|
79
|
+
uploadState: this.determineUploadState(apiFile.status),
|
|
80
|
+
internalStatusReasonCode: this.fallbackError(apiFile.internalStatusReasonCode),
|
|
81
|
+
});
|
|
82
|
+
this.files.set(extendedFile.id, extendedFile);
|
|
83
|
+
this.stateChange.emit(pick(extendedFile, 'uploadState', 'fileName', 'id', 'status', 'internalStatusReasonCode', 'statusReasonInformation'));
|
|
84
|
+
// Check if validation is required, then start polling
|
|
85
|
+
if (extendedFile.uploadState === 'uploaded' ||
|
|
86
|
+
extendedFile.uploadState === 'validating') {
|
|
87
|
+
this.checkValidity(extendedFile, this.throttle);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/** Destroy all event listeners and polling running */
|
|
94
|
+
ngOnDestroy() {
|
|
95
|
+
this.files.forEach((file) => {
|
|
96
|
+
file.uploadRequests?.unsubscribe();
|
|
97
|
+
if (file.uploadState === 'uploading') {
|
|
98
|
+
file.uploadState = 'aborted';
|
|
99
|
+
file.internalStatusReasonCode = 'MFEFHM004';
|
|
100
|
+
this.stateChange.emit(pick(file, 'uploadState', 'fileName', 'status', 'internalStatusReasonCode'));
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
/** @internal Warn user trying to leave page before all uploads are done. Custom message only works in older browsers. */
|
|
105
|
+
onBeforeUnload(event) {
|
|
106
|
+
if (!this.allUploadingDone(this.files)) {
|
|
107
|
+
const confirmationMessage = `You still have files uploading, are you sure you want to leave this page?`;
|
|
108
|
+
(event || window.event).returnValue =
|
|
109
|
+
confirmationMessage;
|
|
110
|
+
return confirmationMessage;
|
|
111
|
+
}
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
/* Drag & Drop Events */
|
|
115
|
+
/** @internal Event handler for when a file is held over the drop area */
|
|
116
|
+
onDragEnter(event) {
|
|
117
|
+
if (!this.service)
|
|
118
|
+
return;
|
|
119
|
+
event.preventDefault();
|
|
120
|
+
// Update the visual state
|
|
121
|
+
this.componentState = 'over';
|
|
122
|
+
}
|
|
123
|
+
/** @internal Event handler for when a file leaves the drop area */
|
|
124
|
+
onDragLeave(event) {
|
|
125
|
+
if (!this.service)
|
|
126
|
+
return;
|
|
127
|
+
event.preventDefault();
|
|
128
|
+
this.componentState = 'normal';
|
|
129
|
+
}
|
|
130
|
+
/** @internal Event handler for when a file is dropped on the drop area or when `input` files are selected */
|
|
131
|
+
onDrop(event) {
|
|
132
|
+
if (!this.service)
|
|
133
|
+
return;
|
|
134
|
+
event.preventDefault();
|
|
135
|
+
this.componentState = 'normal';
|
|
136
|
+
let files;
|
|
137
|
+
// Determine if files are from the drop event or input element
|
|
138
|
+
if (event instanceof DragEvent && event.dataTransfer) {
|
|
139
|
+
files = event.dataTransfer.files;
|
|
140
|
+
}
|
|
141
|
+
else if (event.target &&
|
|
142
|
+
event.target instanceof HTMLInputElement &&
|
|
143
|
+
event.target.files) {
|
|
144
|
+
files = event.target.files;
|
|
145
|
+
}
|
|
146
|
+
if (files) {
|
|
147
|
+
const extendedFiles = Array.from(files, (file) => {
|
|
148
|
+
let abort = false;
|
|
149
|
+
let statusCode = null;
|
|
150
|
+
// Check if file size is larger than limit
|
|
151
|
+
if (file.size > this.fileLimit) {
|
|
152
|
+
abort = true;
|
|
153
|
+
statusCode = 'MFEFHM003';
|
|
154
|
+
}
|
|
155
|
+
// Check if file type is not acceptable
|
|
156
|
+
if (!verifyAccept(file.type, this.accept)) {
|
|
157
|
+
abort = true;
|
|
158
|
+
statusCode = 'MFEFHM002';
|
|
159
|
+
}
|
|
160
|
+
// Add default values expected by the API
|
|
161
|
+
const extendedFile = extendFile(file, {
|
|
162
|
+
internalStatusReasonCode: statusCode,
|
|
163
|
+
uploadState: (abort ? 'aborted' : 'local'),
|
|
164
|
+
});
|
|
165
|
+
// Emit initial local upload event
|
|
166
|
+
this.stateChange.emit({
|
|
167
|
+
uploadState: 'local',
|
|
168
|
+
fileName: extendedFile.fileName,
|
|
169
|
+
});
|
|
170
|
+
if (abort) {
|
|
171
|
+
// Emit aborted upload event
|
|
172
|
+
this.stateChange.emit({
|
|
173
|
+
uploadState: 'aborted',
|
|
174
|
+
fileName: extendedFile.fileName,
|
|
175
|
+
status: 'aborted',
|
|
176
|
+
internalStatusReasonCode: statusCode,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
return extendedFile;
|
|
180
|
+
});
|
|
181
|
+
// Append to previous files
|
|
182
|
+
let i = 0;
|
|
183
|
+
for (const file of extendedFiles) {
|
|
184
|
+
// If multiple or list is false append only file then break loop
|
|
185
|
+
if ((!this.multiple || !this.list) && i >= 1)
|
|
186
|
+
break;
|
|
187
|
+
this.lastFile = file;
|
|
188
|
+
this.files.set(file.id, file);
|
|
189
|
+
i++;
|
|
190
|
+
}
|
|
191
|
+
// Clear file input so that same file can be uploaded
|
|
192
|
+
if (event.target &&
|
|
193
|
+
event.target instanceof HTMLInputElement &&
|
|
194
|
+
event.target.files) {
|
|
195
|
+
event.target.value = '';
|
|
196
|
+
}
|
|
197
|
+
this.onSubmit();
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
/** @internal Event trigger for when delete button is pressed */
|
|
201
|
+
onRemove(id, state) {
|
|
202
|
+
// Only allow removal in certain states
|
|
203
|
+
if (!this.service || this.disableRemove.includes(state))
|
|
204
|
+
return;
|
|
205
|
+
const file = this.files.get(id);
|
|
206
|
+
if (!file)
|
|
207
|
+
return;
|
|
208
|
+
// Skip confirmation for aborted and deleted files
|
|
209
|
+
if (file.uploadState === 'error' ||
|
|
210
|
+
file.uploadState === 'aborted' ||
|
|
211
|
+
file.uploadState === 'deleted') {
|
|
212
|
+
this.onConfirmRemove({ original: undefined, payload: file });
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
this.markedForDeletion = file;
|
|
216
|
+
this.deleteModalRef.open();
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
/** @internal */
|
|
220
|
+
onConfirmRemove(event) {
|
|
221
|
+
const { payload: file } = event;
|
|
222
|
+
if (!file || !this.service)
|
|
223
|
+
return;
|
|
224
|
+
// Abort upload and set local state to aborted to inform user
|
|
225
|
+
switch (file.uploadState) {
|
|
226
|
+
case 'local':
|
|
227
|
+
case 'uploading':
|
|
228
|
+
file.uploadRequests?.unsubscribe();
|
|
229
|
+
file.uploadState = 'aborted';
|
|
230
|
+
file.internalStatusReasonCode = 'MFEFHM004';
|
|
231
|
+
this.stateChange.emit(pick(file, 'uploadState', 'fileName', 'status', 'internalStatusReasonCode'));
|
|
232
|
+
break;
|
|
233
|
+
// Remove file from service then set local state to aborted to inform user
|
|
234
|
+
case 'uploaded':
|
|
235
|
+
case 'validating':
|
|
236
|
+
this.service
|
|
237
|
+
.removeFile(file.id)
|
|
238
|
+
.subscribe({
|
|
239
|
+
error: console.warn,
|
|
240
|
+
})
|
|
241
|
+
.add(() => {
|
|
242
|
+
// Abort regardless of response from server
|
|
243
|
+
file.uploadRequests?.unsubscribe();
|
|
244
|
+
file.uploadState = 'aborted';
|
|
245
|
+
file.internalStatusReasonCode = 'MFEFHM005';
|
|
246
|
+
this.stateChange.emit(pick(file, 'uploadState', 'fileName', 'status', 'internalStatusReasonCode'));
|
|
247
|
+
});
|
|
248
|
+
break;
|
|
249
|
+
// Remove file from service then locally for "completed" states
|
|
250
|
+
case 'error':
|
|
251
|
+
case 'done':
|
|
252
|
+
;
|
|
253
|
+
(this.service.removeFileFor
|
|
254
|
+
? this.service.removeFileFor(file)
|
|
255
|
+
: this.service.removeFile(file.id))
|
|
256
|
+
.subscribe({
|
|
257
|
+
error: console.warn,
|
|
258
|
+
})
|
|
259
|
+
.add(() => {
|
|
260
|
+
// Remove regardless of response from server
|
|
261
|
+
this.files.delete(file.id);
|
|
262
|
+
const event = pick(file, 'uploadState', 'fileName', 'id', 'status', 'internalStatusReasonCode', 'statusReasonInformation');
|
|
263
|
+
event.uploadState = 'deleted';
|
|
264
|
+
this.stateChange.emit(event);
|
|
265
|
+
});
|
|
266
|
+
break;
|
|
267
|
+
// Just remove the file locally to clean up
|
|
268
|
+
case 'aborted':
|
|
269
|
+
case 'deleted':
|
|
270
|
+
default:
|
|
271
|
+
this.files.delete(file.id);
|
|
272
|
+
this.stateChange.emit({
|
|
273
|
+
...pick(file, 'uploadState', 'fileName', 'id', 'status', 'internalStatusReasonCode', 'statusReasonInformation'),
|
|
274
|
+
uploadState: 'deleted',
|
|
275
|
+
});
|
|
276
|
+
break;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
/** @internal Event handler for when the files should be uploaded */
|
|
280
|
+
onSubmit() {
|
|
281
|
+
if (!this.files || !this.service)
|
|
282
|
+
return;
|
|
283
|
+
// If list is not enabled update the component state to show progress
|
|
284
|
+
if (!this.list)
|
|
285
|
+
this.componentState = 'uploading';
|
|
286
|
+
this.loading = true;
|
|
287
|
+
this.files.forEach((file) => {
|
|
288
|
+
// Filter out all files that aren't currently considered local
|
|
289
|
+
if (!file.raw || file.uploadState !== 'local')
|
|
290
|
+
return;
|
|
291
|
+
file.uploadRequests = this.service.uploadFile(file.raw).subscribe({
|
|
292
|
+
next: (event) => {
|
|
293
|
+
switch (event.type) {
|
|
294
|
+
case HttpEventType.UploadProgress:
|
|
295
|
+
// Update upload progress
|
|
296
|
+
if (file.uploadState !== 'uploading') {
|
|
297
|
+
file.uploadState = 'uploading';
|
|
298
|
+
this.stateChange.emit(pick(file, 'uploadState', 'fileName'));
|
|
299
|
+
}
|
|
300
|
+
file.progress = Math.round((100 * event.loaded) / (event.total || 100));
|
|
301
|
+
file.uploadState = 'uploading';
|
|
302
|
+
break;
|
|
303
|
+
case HttpEventType.Response:
|
|
304
|
+
if (event.body?.id) {
|
|
305
|
+
// Remove old file id
|
|
306
|
+
this.files.delete(file.id);
|
|
307
|
+
// Update file with information from the API
|
|
308
|
+
Object.assign(file, event.body);
|
|
309
|
+
file.progress = 100;
|
|
310
|
+
file.uploadState = this.determineUploadState(file.status);
|
|
311
|
+
// Update with new file id
|
|
312
|
+
this.files.set(file.id, file);
|
|
313
|
+
}
|
|
314
|
+
this.stateChange.emit(pick(file, 'uploadState', 'fileName', 'id', 'status', 'statusReasonInformation'));
|
|
315
|
+
// Check if validation is required, then start polling
|
|
316
|
+
if (file.uploadState === 'uploaded' ||
|
|
317
|
+
file.uploadState === 'validating') {
|
|
318
|
+
this.checkValidity(file, this.throttle);
|
|
319
|
+
}
|
|
320
|
+
else
|
|
321
|
+
this.setComponentStateDone();
|
|
322
|
+
this.loading = false;
|
|
323
|
+
break;
|
|
324
|
+
}
|
|
325
|
+
},
|
|
326
|
+
error: (error) => {
|
|
327
|
+
console.warn(error);
|
|
328
|
+
file.uploadState = 'aborted';
|
|
329
|
+
file.status = 'aborted';
|
|
330
|
+
// todo: wrong
|
|
331
|
+
file.statusReasonInformation = [
|
|
332
|
+
{ originatorId: 'local', reason: 'dragDrop.error.MFEFHM001' },
|
|
333
|
+
];
|
|
334
|
+
this.stateChange.emit(pick(file, 'uploadState', 'fileName', 'id', 'status', 'statusReasonInformation'));
|
|
335
|
+
this.loading = false;
|
|
336
|
+
},
|
|
337
|
+
});
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* @internal
|
|
342
|
+
* Using the state map convert `apiFile.state` to one of {@link UploadState}
|
|
343
|
+
* @param apiState the state given by the file to be used for mapping
|
|
344
|
+
*/
|
|
345
|
+
determineUploadState(apiState) {
|
|
346
|
+
// Reverse so that later states override earlier
|
|
347
|
+
const stateEntries = Object.entries(this.stateMap).reverse();
|
|
348
|
+
for (const [uploadState, apiStates] of stateEntries) {
|
|
349
|
+
if (this.uploadStateIsArray(apiStates)) {
|
|
350
|
+
if (apiStates.includes(apiState))
|
|
351
|
+
return uploadState;
|
|
352
|
+
}
|
|
353
|
+
else {
|
|
354
|
+
if (apiStates === apiState)
|
|
355
|
+
return uploadState;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
return 'error';
|
|
359
|
+
}
|
|
360
|
+
/** @internal */
|
|
361
|
+
uploadStateIsArray(state) {
|
|
362
|
+
return Array.isArray(state);
|
|
363
|
+
}
|
|
364
|
+
/** @internal used for translation templating parameters */
|
|
365
|
+
translateParams(file) {
|
|
366
|
+
return { ...file, fileLimit: (this.fileLimit / 1024 / 1024).toFixed(3) };
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Poll the status endpoint to determine when file is valid
|
|
370
|
+
* @param file file used to check state and update
|
|
371
|
+
* @param delay how long each interval should wait before sending a request
|
|
372
|
+
*/
|
|
373
|
+
checkValidity(file, delay) {
|
|
374
|
+
if (!this.service)
|
|
375
|
+
return;
|
|
376
|
+
file.uploadRequests = timer(0, delay)
|
|
377
|
+
.pipe(switchMap(() => {
|
|
378
|
+
const asyncFetchStatus = this.service && this.service.fetchStatusFor
|
|
379
|
+
? this.service.fetchStatusFor(file)
|
|
380
|
+
: this.service.fetchStatus(file.id);
|
|
381
|
+
return asyncFetchStatus;
|
|
382
|
+
}), retryWhen(retryStrategy({
|
|
383
|
+
maxRetryAttempts: this.retryAttempts,
|
|
384
|
+
})), tap((fileStatus) => {
|
|
385
|
+
// Continuously update file state to show step progress
|
|
386
|
+
if (fileStatus) {
|
|
387
|
+
// Emit event when status changes
|
|
388
|
+
if (file.status !== fileStatus.status) {
|
|
389
|
+
file.status = fileStatus.status;
|
|
390
|
+
file.internalStatusReasonCode = this.fallbackError(fileStatus.internalStatusReasonCode);
|
|
391
|
+
file.statusReasonInformation = fileStatus.statusReasonInformation;
|
|
392
|
+
file.uploadState = this.determineUploadState(fileStatus.status);
|
|
393
|
+
this.stateChange.emit(pick(file, 'uploadState', 'fileName', 'id', 'status', 'internalStatusReasonCode', 'statusReasonInformation'));
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
}),
|
|
397
|
+
// Remove validation state
|
|
398
|
+
filter((apiFile) => !!apiFile &&
|
|
399
|
+
this.determineUploadState(apiFile.status) !== 'uploaded' &&
|
|
400
|
+
this.determineUploadState(apiFile.status) !== 'validating'),
|
|
401
|
+
// Take first state after validation
|
|
402
|
+
take(1))
|
|
403
|
+
.subscribe({
|
|
404
|
+
next: () => {
|
|
405
|
+
if (this.allValidationDone(this.files)) {
|
|
406
|
+
this.setComponentStateDone();
|
|
407
|
+
}
|
|
408
|
+
},
|
|
409
|
+
error: (err) => {
|
|
410
|
+
console.warn(err);
|
|
411
|
+
file.uploadState = 'aborted';
|
|
412
|
+
file.status = 'aborted';
|
|
413
|
+
file.internalStatusReasonCode = 'MFEFHM001';
|
|
414
|
+
this.stateChange.emit(pick(file, 'uploadState', 'fileName', 'id', 'status', 'internalStatusReasonCode'));
|
|
415
|
+
this.setComponentStateDone();
|
|
416
|
+
},
|
|
417
|
+
});
|
|
418
|
+
}
|
|
419
|
+
fallbackError(code) {
|
|
420
|
+
if (this.errorCodes == null || (code && this.errorCodes.includes(code))) {
|
|
421
|
+
return code ?? null;
|
|
422
|
+
}
|
|
423
|
+
else {
|
|
424
|
+
return 'MFEFHM001';
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
/**
|
|
428
|
+
* Check so that no files are still validating
|
|
429
|
+
*/
|
|
430
|
+
allValidationDone(files) {
|
|
431
|
+
return Array.from(files.values()).every((file) => file.uploadState !== 'validating');
|
|
432
|
+
}
|
|
433
|
+
/**
|
|
434
|
+
* Check so that no files are still uploading
|
|
435
|
+
*/
|
|
436
|
+
allUploadingDone(files) {
|
|
437
|
+
return Array.from(files.values()).every((file) => file.uploadState !== 'uploading');
|
|
438
|
+
}
|
|
439
|
+
/**
|
|
440
|
+
* Helper to update the component state to done and then back to normal
|
|
441
|
+
*/
|
|
442
|
+
setComponentStateDone() {
|
|
443
|
+
if (!this.list)
|
|
444
|
+
this.componentState = 'done';
|
|
445
|
+
setTimeout(() => {
|
|
446
|
+
if (this.componentState === 'done')
|
|
447
|
+
this.componentState = 'normal';
|
|
448
|
+
}, 3000);
|
|
449
|
+
}
|
|
450
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NggvDragDropComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
451
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: NggvDragDropComponent, selector: "nggv-drag-drop", inputs: { thook: "thook", service: "service", accept: "accept", disableRemove: "disableRemove", fileLimit: "fileLimit", multiple: "multiple", list: "list", throttle: "throttle", retryAttempts: "retryAttempts", selectable: "selectable", stateMap: "stateMap", fetchStatuses: "fetchStatuses", errorCodes: "errorCodes" }, outputs: { stateChange: "stateChange", detailsClick: "detailsClick" }, host: { listeners: { "window:beforeunload": "onBeforeUnload($event)" }, properties: { "attr.data-thook": "this.thook" } }, viewQueries: [{ propertyName: "deleteModalRef", first: true, predicate: ["deleteModalRef"], descendants: true }], ngImport: i0, template: "<ng-container *transloco=\"let t\">\n <form enctype=\"multipart/form-data\" #dragDropForm>\n <div class=\"gds-drag-drop\">\n <input\n class=\"gds-drag-drop__input\"\n id=\"drag-drop\"\n type=\"file\"\n [accept]=\"accept\"\n [multiple]=\"multiple && list\"\n (change)=\"onDrop($event)\"\n />\n <label\n [ngClass]=\"{\n 'gds-drag-drop__label': true,\n 'gds-drag-drop__label--above': componentState === 'over',\n }\"\n for=\"drag-drop\"\n [attr.data-thook]=\"thook + '-picker'\"\n [attr.aria-busy]=\"loading\"\n (dragenter)=\"onDragEnter($event)\"\n (dragover)=\"onDragEnter($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (dragend)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n [ngSwitch]=\"componentState\"\n >\n <!-- COMPONENT STATE NORMAL -->\n <ng-template [ngSwitchCase]=\"'normal'\">\n <gds-icon-cloud-upload *nggCoreElement></gds-icon-cloud-upload\n ><em>{{ t('dragDrop.label.fileChoose') }}</em>\n <ng-template [ngIf]=\"isDragDropAvailable\">\n {{ t('dragDrop.label.fileDrag') }}</ng-template\n >\n </ng-template>\n\n <!-- COMPONENT STATE OVER -->\n <ng-template [ngSwitchCase]=\"'over'\">\n <gds-icon-cloud-upload *nggCoreElement></gds-icon-cloud-upload\n >{{ t('dragDrop.label.fileDrop') }}\n </ng-template>\n\n <!-- COMPONENT STATE UPLOADING -->\n <ng-template [ngSwitchCase]=\"'uploading'\">\n <strong class=\"filename\">{{ lastFile?.fileName }}</strong>\n\n <!-- UPLOADING STATE -->\n <ng-template [ngIf]=\"lastFile?.uploadState === 'uploading'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: lastFile,\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- UPLOADED STATE -->\n <ng-template [ngIf]=\"lastFile?.uploadState === 'uploaded'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: lastFile,\n text: t('dragDrop.text.fileStateUploaded'),\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- VALIDATING STATE -->\n <ng-template [ngIf]=\"lastFile?.uploadState === 'validating'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: lastFile,\n text: t('dragDrop.text.fileStateValidating'),\n }\"\n ></ng-template>\n </ng-template>\n </ng-template>\n\n <!-- COMPONENT STATE DONE -->\n <ng-template [ngSwitchCase]=\"'done'\">\n {{ t('dragDrop.label.fileUploaded', { filename: lastFile?.fileName })\n }}<gds-icon-checkmark *nggCoreElement></gds-icon-checkmark>\n </ng-template>\n </label>\n\n <!-- LIST -->\n <table\n class=\"gds-table file-list\"\n [attr.data-thook]=\"thook + '-file-list'\"\n *ngIf=\"list\"\n >\n <thead>\n <tr>\n <th *ngIf=\"selectable\">\n <div class=\"gds-field-checkbox-wrap\">\n <input\n type=\"checkbox\"\n aria-label=\"Field label\"\n id=\"select-all\"\n />\n <label for=\"select-all\"></label>\n </div>\n </th>\n <th class=\"gds-table__primary-col col-name\">\n {{ t('dragDrop.label.fileName') }}\n </th>\n <th class=\"col-status\">\n {{ t('dragDrop.label.fileStatus') }}\n </th>\n <th class=\"col-actions\"></th>\n </tr>\n </thead>\n <tbody>\n <tr\n [attr.data-thook]=\"thook + '-file'\"\n *ngFor=\"let file of files | value\"\n >\n <td *ngIf=\"selectable\">\n <div class=\"gds-field-checkbox-wrap\">\n <input\n type=\"checkbox\"\n aria-label=\"Field label\"\n [id]=\"'file-checkbox-' + file.id\"\n />\n <label [for]=\"'file-checkbox-' + file.id\"></label>\n </div>\n </td>\n <td\n class=\"gds-table__primary-col\"\n [attr.data-thook]=\"thook + '-file-name'\"\n >\n {{ file.fileName }}\n </td>\n <td\n [attr.data-thook]=\"thook + '-file-status'\"\n [ngSwitch]=\"file.uploadState\"\n >\n <!-- UPLOADING STATE -->\n <ng-template [ngSwitchCase]=\"'uploading'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: file,\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- UPLOADED STATE -->\n <ng-template [ngSwitchCase]=\"'uploaded'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: file,\n text: t('dragDrop.text.fileStateUploaded'),\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- VALIDATING STATE -->\n <ng-template [ngSwitchCase]=\"'validating'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: file,\n text: t('dragDrop.text.fileStateValidating'),\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- ABORTED STATE -->\n <ng-template [ngSwitchCase]=\"'aborted'\">\n <span\n class=\"error-text\"\n [transloco]=\"\n 'dragDrop.error.' + file.internalStatusReasonCode\n \"\n [translocoParams]=\"translateParams(file)\"\n *ngIf=\"file.internalStatusReasonCode\"\n ></span>\n </ng-template>\n\n <!-- ERROR STATE -->\n <ng-template [ngSwitchCase]=\"'error'\">\n <span\n class=\"error-text\"\n [transloco]=\"\n 'dragDrop.error.' + file.internalStatusReasonCode\n \"\n [translocoParams]=\"translateParams(file)\"\n *ngIf=\"file.internalStatusReasonCode\"\n ></span>\n <br />\n <a\n (click)=\"detailsClick.emit(file)\"\n style=\"cursor: pointer\"\n *ngIf=\"\n file.statusReasonInformation &&\n file.statusReasonInformation.length\n \"\n >\n {{ t('dragDrop.link.viewDetails') }}\n </a>\n </ng-template>\n\n <!-- DONE STATE -->\n <ng-template [ngSwitchCase]=\"'done'\">\n <span class=\"success-text\">{{\n t('dragDrop.text.fileStateDone')\n }}</span>\n </ng-template>\n </td>\n\n <td class=\"gds-table__numeric-col\">\n <a\n class=\"remove\"\n tabindex=\"0\"\n (click)=\"onRemove(file.id, file.uploadState)\"\n *ngIf=\"!disableRemove.includes(file.uploadState)\"\n >\n <gds-icon-cross-small *nggCoreElement></gds-icon-cross-small>\n </a>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </form>\n\n <nggv-dialog\n #deleteModalRef\n [title]=\"t('dragDrop.text.fileCancelModalTitle')\"\n [content]=\"\n t('dragDrop.text.fileCancelModalContent', {\n name: markedForDeletion?.fileName,\n })\n \"\n [payload]=\"markedForDeletion\"\n [buttons]=\"{\n negative: 'dragDrop.text.fileCancelConfirm',\n positive: 'dragDrop.text.fileCancelDeny',\n }\"\n (nggvNegativeEvent)=\"onConfirmRemove($any($event))\"\n ></nggv-dialog>\n\n <!-- PROGRESS TEMPLATE -->\n\n <ng-template\n #progressTemplate\n let-file=\"\n file\"\n let-text=\"text\"\n >\n <div class=\"progress-wrapper\">\n <progress\n class=\"gds-progress-bar progress\"\n max=\"100\"\n [value]=\"file.progress\"\n >\n {{\n t('dragDrop.text.fileStateUploading', {\n uploaded:\n (file.raw?.size * (file.progress / 100)) / 1024 | number: '0.0-0',\n size: file.raw?.size / 1024 | number: '0.0-0',\n progress: file.progress,\n unit: 'kB',\n })\n }}\n </progress>\n <ng-template [ngIf]=\"stateMap.validating.length\">\n <div\n class=\"gds-progress-indicator indicator\"\n *ngIf=\"uploadStateIsArray(stateMap.validating); else singleValidation\"\n >\n <div\n class=\"gds-progress-indicator__step\"\n [class.-done]=\"i <= stateMap.validating.indexOf(file.status)\"\n *ngFor=\"let state of stateMap.validating; let i = index\"\n ></div>\n </div>\n </ng-template>\n <ng-template #singleValidation>\n <div class=\"gds-progress-indicator indicator\">\n <!-- eslint-disable @angular-eslint/template/eqeqeq -->\n <div\n class=\"gds-progress-indicator__step\"\n [class.-done]=\"file.status == stateMap.validating\"\n ></div>\n <!-- eslint-enable @angular-eslint/template/eqeqeq -->\n </div>\n </ng-template>\n </div>\n <span class=\"progress-text\">\n {{\n text ||\n t('dragDrop.text.fileStateUploading', {\n uploaded:\n (file.raw?.size * (file.progress / 100)) / 1024 | number: '0.0-0',\n size: file.raw?.size / 1024 | number: '0.0-0',\n progress: file.progress,\n unit: 'kB',\n })\n }}\n </span>\n </ng-template>\n</ng-container>\n", styles: [":host .gds-drag-drop{width:100%}:host .gds-drag-drop__input{width:.1px;height:.1px;opacity:0;overflow:hidden;position:absolute;z-index:-1}:host .gds-drag-drop__label{display:flex;justify-content:center;align-items:center;gap:.5rem;border:2px dashed #868686;font-weight:500;padding:2.25em 1.5em}:host .gds-drag-drop__input+.gds-drag-drop__label em{font-style:normal;color:#0092e1;cursor:pointer}:host .gds-drag-drop table,:host .gds-drag-drop .gds-table{margin-top:2.25em}:host .gds-table{width:100%;font-family:SEBSansSerif,Arial,sans-serif;border-spacing:0}:host .gds-table th,:host .gds-table td{text-align:left;border-bottom:1px solid #e9e9e9}:host .gds-table thead{color:#333;font-size:1em}:host .gds-table thead tr{min-height:2em}:host .gds-table thead th,:host .gds-table thead td{border-bottom:1px solid #cecece;font-weight:500}:host .gds-table tbody{font-size:1em}:host .gds-table tbody tr{height:2.5em;border-bottom:1px solid #adadad}:host .gds-table tbody tr:hover td,:host .gds-table tbody tr:hover th{background-color:#f8f8f8}:host .gds-table tfoot{font-weight:500;font-size:1em}:host .gds-table tfoot tr{height:2.5em}:host .gds-table tfoot td{border-top:1px solid #cecece;border-bottom-width:0}:host tr .gds-table__numeric-col{text-align:right}:host tr .gds-table__negative-col{color:#bb000c}:host tr .gds-table__primary-col{color:#000}:host .gds-table__sortable-col{cursor:pointer;white-space:nowrap;margin-left:.5em}:host .gds-table__sortable-col:after{content:\"\";display:inline-block;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%23adadad' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%23adadad' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\");background-repeat:no-repeat;margin-left:.25rem;width:.625rem;height:1rem;vertical-align:text-bottom}:host .gds-table__sortable-col:hover:after{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%23cecece' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%23cecece' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\")}:host .gds-table__sortable-col--asc:after{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%23adadad' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%23007ac7' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\")}:host .gds-table__sortable-col--asc:hover:after{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%23cecece' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%2341b0ee' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\")}:host .gds-table__sortable-col--desc:after{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%23007ac7' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%23adadad' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\")}:host .gds-table__sortable-col--desc:hover:after{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%2341b0ee' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%23cecece' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\")}:host .gds-table .gds-field-checkbox-wrap{width:2.5rem}:host .gds-table .gds-field-checkbox-wrap label{box-shadow:none!important}:host .gds-table--fixed-l-col{overflow:auto;display:block;position:relative;max-width:100%}:host .gds-table--fixed-l-col td,:host .gds-table--fixed-l-col th{width:auto!important;min-width:150px}:host .gds-table--fixed-l-col td:first-child,:host .gds-table--fixed-l-col th:first-child{position:sticky;left:0;background-color:#fff;border-right:1px solid #e9e9e9}:host .gds-table--fixed-l-col thead th{top:0;z-index:1;position:sticky;background-color:#fff}:host .gds-table--fixed-l-col thead th:first-child{z-index:2}:host .gds-progress-bar{appearance:none;height:.3125rem;width:100%;position:relative;overflow:hidden;color:#45b400;border-width:0;background-color:#e9e9e9}:host .gds-progress-bar:before{display:block;position:absolute;content:\"\";left:-200px;width:200px;height:.3125rem;background-color:#45b400;animation:gds-progressbar-loading 2s linear infinite}:host .gds-progress-bar::-webkit-progress-value{background-color:transparent}:host .gds-progress-bar::-moz-progress-bar{background-color:transparent}:host .gds-progress-bar::-ms-fill{background-color:transparent;border-width:0}:host .gds-progress-bar::-webkit-progress-bar{background-color:#e9e9e9}@keyframes gds-progressbar-loading{0%{left:-30%;width:30%}50%{width:30%}70%{width:70%}80%{left:50%}95%{left:120%}to{left:100%}}:host .gds-progress-bar[value]:before{content:none}:host .gds-progress-bar[value]::-webkit-progress-value{background-color:#45b400}:host .gds-progress-bar[value]::-moz-progress-bar{background-color:#45b400}:host .gds-progress-bar[value]::-ms-fill{background-color:#45b400}:host .gds-progress-indicator{display:flex;width:100%}:host .gds-progress-indicator__step{flex-grow:1;height:.5rem;margin-right:.125rem;background-color:#e9e9e9}:host .gds-progress-indicator__step.-done{background-color:#45b400}:host .gds-progress-indicator__step:last-child{margin-right:0}:host .file-list th:first-child,:host .file-list td:first-child{width:auto}:host .filename{display:block;margin-bottom:.5rem}:host .col-name{width:40%}:host .col-status{width:30%}:host .col-actions{width:.1%}:host .progress-wrapper{display:flex}:host .progress,:host .indicator{height:.5rem}:host .gds-progress-indicator__step{margin-right:0}:host .progress{color:#45b400}:host .progress::-webkit-progress-value{background-color:#45b400}:host .progress::-moz-progress-bar{background-color:#45b400}:host .progress::-ms-fill{background-color:#45b400}:host .progress-text{display:block;margin-top:.125rem}:host .error-text{color:#bb000c}:host .success-text{color:#308800}:host .remove{padding:0 .5rem;font-size:1.5em;color:#868686;cursor:pointer;display:grid;place-content:center}:host .remove:hover,:host .remove:focus{color:#bb000c}\n"], dependencies: [{ kind: "directive", type: i1.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "component", type: i2.NggvDialogComponent, selector: "nggv-dialog", inputs: ["thook", "shown", "initiallyShown", "heading", "title", "content", "autoClose", "payload", "dialogTitleId", "dialogBodyId", "closeModalOnEscape", "closeButtonAriaLabel", "buttons"], outputs: ["nggvCloseEvent", "nggvPositiveEvent", "nggvNeutralEvent", "nggvNegativeEvent"], exportAs: ["dialog"] }, { kind: "directive", type: i3.NggCoreElementDirective, selector: "[nggCoreElement]" }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "pipe", type: i4.DecimalPipe, name: "number" }, { kind: "pipe", type: i5.ValuePipe, name: "value" }] }); }
|
|
452
|
+
}
|
|
453
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NggvDragDropComponent, decorators: [{
|
|
454
|
+
type: Component,
|
|
455
|
+
args: [{ selector: 'nggv-drag-drop', template: "<ng-container *transloco=\"let t\">\n <form enctype=\"multipart/form-data\" #dragDropForm>\n <div class=\"gds-drag-drop\">\n <input\n class=\"gds-drag-drop__input\"\n id=\"drag-drop\"\n type=\"file\"\n [accept]=\"accept\"\n [multiple]=\"multiple && list\"\n (change)=\"onDrop($event)\"\n />\n <label\n [ngClass]=\"{\n 'gds-drag-drop__label': true,\n 'gds-drag-drop__label--above': componentState === 'over',\n }\"\n for=\"drag-drop\"\n [attr.data-thook]=\"thook + '-picker'\"\n [attr.aria-busy]=\"loading\"\n (dragenter)=\"onDragEnter($event)\"\n (dragover)=\"onDragEnter($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (dragend)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n [ngSwitch]=\"componentState\"\n >\n <!-- COMPONENT STATE NORMAL -->\n <ng-template [ngSwitchCase]=\"'normal'\">\n <gds-icon-cloud-upload *nggCoreElement></gds-icon-cloud-upload\n ><em>{{ t('dragDrop.label.fileChoose') }}</em>\n <ng-template [ngIf]=\"isDragDropAvailable\">\n {{ t('dragDrop.label.fileDrag') }}</ng-template\n >\n </ng-template>\n\n <!-- COMPONENT STATE OVER -->\n <ng-template [ngSwitchCase]=\"'over'\">\n <gds-icon-cloud-upload *nggCoreElement></gds-icon-cloud-upload\n >{{ t('dragDrop.label.fileDrop') }}\n </ng-template>\n\n <!-- COMPONENT STATE UPLOADING -->\n <ng-template [ngSwitchCase]=\"'uploading'\">\n <strong class=\"filename\">{{ lastFile?.fileName }}</strong>\n\n <!-- UPLOADING STATE -->\n <ng-template [ngIf]=\"lastFile?.uploadState === 'uploading'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: lastFile,\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- UPLOADED STATE -->\n <ng-template [ngIf]=\"lastFile?.uploadState === 'uploaded'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: lastFile,\n text: t('dragDrop.text.fileStateUploaded'),\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- VALIDATING STATE -->\n <ng-template [ngIf]=\"lastFile?.uploadState === 'validating'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: lastFile,\n text: t('dragDrop.text.fileStateValidating'),\n }\"\n ></ng-template>\n </ng-template>\n </ng-template>\n\n <!-- COMPONENT STATE DONE -->\n <ng-template [ngSwitchCase]=\"'done'\">\n {{ t('dragDrop.label.fileUploaded', { filename: lastFile?.fileName })\n }}<gds-icon-checkmark *nggCoreElement></gds-icon-checkmark>\n </ng-template>\n </label>\n\n <!-- LIST -->\n <table\n class=\"gds-table file-list\"\n [attr.data-thook]=\"thook + '-file-list'\"\n *ngIf=\"list\"\n >\n <thead>\n <tr>\n <th *ngIf=\"selectable\">\n <div class=\"gds-field-checkbox-wrap\">\n <input\n type=\"checkbox\"\n aria-label=\"Field label\"\n id=\"select-all\"\n />\n <label for=\"select-all\"></label>\n </div>\n </th>\n <th class=\"gds-table__primary-col col-name\">\n {{ t('dragDrop.label.fileName') }}\n </th>\n <th class=\"col-status\">\n {{ t('dragDrop.label.fileStatus') }}\n </th>\n <th class=\"col-actions\"></th>\n </tr>\n </thead>\n <tbody>\n <tr\n [attr.data-thook]=\"thook + '-file'\"\n *ngFor=\"let file of files | value\"\n >\n <td *ngIf=\"selectable\">\n <div class=\"gds-field-checkbox-wrap\">\n <input\n type=\"checkbox\"\n aria-label=\"Field label\"\n [id]=\"'file-checkbox-' + file.id\"\n />\n <label [for]=\"'file-checkbox-' + file.id\"></label>\n </div>\n </td>\n <td\n class=\"gds-table__primary-col\"\n [attr.data-thook]=\"thook + '-file-name'\"\n >\n {{ file.fileName }}\n </td>\n <td\n [attr.data-thook]=\"thook + '-file-status'\"\n [ngSwitch]=\"file.uploadState\"\n >\n <!-- UPLOADING STATE -->\n <ng-template [ngSwitchCase]=\"'uploading'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: file,\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- UPLOADED STATE -->\n <ng-template [ngSwitchCase]=\"'uploaded'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: file,\n text: t('dragDrop.text.fileStateUploaded'),\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- VALIDATING STATE -->\n <ng-template [ngSwitchCase]=\"'validating'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: file,\n text: t('dragDrop.text.fileStateValidating'),\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- ABORTED STATE -->\n <ng-template [ngSwitchCase]=\"'aborted'\">\n <span\n class=\"error-text\"\n [transloco]=\"\n 'dragDrop.error.' + file.internalStatusReasonCode\n \"\n [translocoParams]=\"translateParams(file)\"\n *ngIf=\"file.internalStatusReasonCode\"\n ></span>\n </ng-template>\n\n <!-- ERROR STATE -->\n <ng-template [ngSwitchCase]=\"'error'\">\n <span\n class=\"error-text\"\n [transloco]=\"\n 'dragDrop.error.' + file.internalStatusReasonCode\n \"\n [translocoParams]=\"translateParams(file)\"\n *ngIf=\"file.internalStatusReasonCode\"\n ></span>\n <br />\n <a\n (click)=\"detailsClick.emit(file)\"\n style=\"cursor: pointer\"\n *ngIf=\"\n file.statusReasonInformation &&\n file.statusReasonInformation.length\n \"\n >\n {{ t('dragDrop.link.viewDetails') }}\n </a>\n </ng-template>\n\n <!-- DONE STATE -->\n <ng-template [ngSwitchCase]=\"'done'\">\n <span class=\"success-text\">{{\n t('dragDrop.text.fileStateDone')\n }}</span>\n </ng-template>\n </td>\n\n <td class=\"gds-table__numeric-col\">\n <a\n class=\"remove\"\n tabindex=\"0\"\n (click)=\"onRemove(file.id, file.uploadState)\"\n *ngIf=\"!disableRemove.includes(file.uploadState)\"\n >\n <gds-icon-cross-small *nggCoreElement></gds-icon-cross-small>\n </a>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </form>\n\n <nggv-dialog\n #deleteModalRef\n [title]=\"t('dragDrop.text.fileCancelModalTitle')\"\n [content]=\"\n t('dragDrop.text.fileCancelModalContent', {\n name: markedForDeletion?.fileName,\n })\n \"\n [payload]=\"markedForDeletion\"\n [buttons]=\"{\n negative: 'dragDrop.text.fileCancelConfirm',\n positive: 'dragDrop.text.fileCancelDeny',\n }\"\n (nggvNegativeEvent)=\"onConfirmRemove($any($event))\"\n ></nggv-dialog>\n\n <!-- PROGRESS TEMPLATE -->\n\n <ng-template\n #progressTemplate\n let-file=\"\n file\"\n let-text=\"text\"\n >\n <div class=\"progress-wrapper\">\n <progress\n class=\"gds-progress-bar progress\"\n max=\"100\"\n [value]=\"file.progress\"\n >\n {{\n t('dragDrop.text.fileStateUploading', {\n uploaded:\n (file.raw?.size * (file.progress / 100)) / 1024 | number: '0.0-0',\n size: file.raw?.size / 1024 | number: '0.0-0',\n progress: file.progress,\n unit: 'kB',\n })\n }}\n </progress>\n <ng-template [ngIf]=\"stateMap.validating.length\">\n <div\n class=\"gds-progress-indicator indicator\"\n *ngIf=\"uploadStateIsArray(stateMap.validating); else singleValidation\"\n >\n <div\n class=\"gds-progress-indicator__step\"\n [class.-done]=\"i <= stateMap.validating.indexOf(file.status)\"\n *ngFor=\"let state of stateMap.validating; let i = index\"\n ></div>\n </div>\n </ng-template>\n <ng-template #singleValidation>\n <div class=\"gds-progress-indicator indicator\">\n <!-- eslint-disable @angular-eslint/template/eqeqeq -->\n <div\n class=\"gds-progress-indicator__step\"\n [class.-done]=\"file.status == stateMap.validating\"\n ></div>\n <!-- eslint-enable @angular-eslint/template/eqeqeq -->\n </div>\n </ng-template>\n </div>\n <span class=\"progress-text\">\n {{\n text ||\n t('dragDrop.text.fileStateUploading', {\n uploaded:\n (file.raw?.size * (file.progress / 100)) / 1024 | number: '0.0-0',\n size: file.raw?.size / 1024 | number: '0.0-0',\n progress: file.progress,\n unit: 'kB',\n })\n }}\n </span>\n </ng-template>\n</ng-container>\n", styles: [":host .gds-drag-drop{width:100%}:host .gds-drag-drop__input{width:.1px;height:.1px;opacity:0;overflow:hidden;position:absolute;z-index:-1}:host .gds-drag-drop__label{display:flex;justify-content:center;align-items:center;gap:.5rem;border:2px dashed #868686;font-weight:500;padding:2.25em 1.5em}:host .gds-drag-drop__input+.gds-drag-drop__label em{font-style:normal;color:#0092e1;cursor:pointer}:host .gds-drag-drop table,:host .gds-drag-drop .gds-table{margin-top:2.25em}:host .gds-table{width:100%;font-family:SEBSansSerif,Arial,sans-serif;border-spacing:0}:host .gds-table th,:host .gds-table td{text-align:left;border-bottom:1px solid #e9e9e9}:host .gds-table thead{color:#333;font-size:1em}:host .gds-table thead tr{min-height:2em}:host .gds-table thead th,:host .gds-table thead td{border-bottom:1px solid #cecece;font-weight:500}:host .gds-table tbody{font-size:1em}:host .gds-table tbody tr{height:2.5em;border-bottom:1px solid #adadad}:host .gds-table tbody tr:hover td,:host .gds-table tbody tr:hover th{background-color:#f8f8f8}:host .gds-table tfoot{font-weight:500;font-size:1em}:host .gds-table tfoot tr{height:2.5em}:host .gds-table tfoot td{border-top:1px solid #cecece;border-bottom-width:0}:host tr .gds-table__numeric-col{text-align:right}:host tr .gds-table__negative-col{color:#bb000c}:host tr .gds-table__primary-col{color:#000}:host .gds-table__sortable-col{cursor:pointer;white-space:nowrap;margin-left:.5em}:host .gds-table__sortable-col:after{content:\"\";display:inline-block;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%23adadad' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%23adadad' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\");background-repeat:no-repeat;margin-left:.25rem;width:.625rem;height:1rem;vertical-align:text-bottom}:host .gds-table__sortable-col:hover:after{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%23cecece' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%23cecece' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\")}:host .gds-table__sortable-col--asc:after{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%23adadad' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%23007ac7' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\")}:host .gds-table__sortable-col--asc:hover:after{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%23cecece' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%2341b0ee' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\")}:host .gds-table__sortable-col--desc:after{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%23007ac7' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%23adadad' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\")}:host .gds-table__sortable-col--desc:hover:after{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 644'%3E%3Cpath fill='%2341b0ee' transform='translate(0 260)' d='M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z'/%3E%3Cpath fill='%23cecece' transform='translate(0 -120)' d='M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z'/%3E%3C/svg%3E\")}:host .gds-table .gds-field-checkbox-wrap{width:2.5rem}:host .gds-table .gds-field-checkbox-wrap label{box-shadow:none!important}:host .gds-table--fixed-l-col{overflow:auto;display:block;position:relative;max-width:100%}:host .gds-table--fixed-l-col td,:host .gds-table--fixed-l-col th{width:auto!important;min-width:150px}:host .gds-table--fixed-l-col td:first-child,:host .gds-table--fixed-l-col th:first-child{position:sticky;left:0;background-color:#fff;border-right:1px solid #e9e9e9}:host .gds-table--fixed-l-col thead th{top:0;z-index:1;position:sticky;background-color:#fff}:host .gds-table--fixed-l-col thead th:first-child{z-index:2}:host .gds-progress-bar{appearance:none;height:.3125rem;width:100%;position:relative;overflow:hidden;color:#45b400;border-width:0;background-color:#e9e9e9}:host .gds-progress-bar:before{display:block;position:absolute;content:\"\";left:-200px;width:200px;height:.3125rem;background-color:#45b400;animation:gds-progressbar-loading 2s linear infinite}:host .gds-progress-bar::-webkit-progress-value{background-color:transparent}:host .gds-progress-bar::-moz-progress-bar{background-color:transparent}:host .gds-progress-bar::-ms-fill{background-color:transparent;border-width:0}:host .gds-progress-bar::-webkit-progress-bar{background-color:#e9e9e9}@keyframes gds-progressbar-loading{0%{left:-30%;width:30%}50%{width:30%}70%{width:70%}80%{left:50%}95%{left:120%}to{left:100%}}:host .gds-progress-bar[value]:before{content:none}:host .gds-progress-bar[value]::-webkit-progress-value{background-color:#45b400}:host .gds-progress-bar[value]::-moz-progress-bar{background-color:#45b400}:host .gds-progress-bar[value]::-ms-fill{background-color:#45b400}:host .gds-progress-indicator{display:flex;width:100%}:host .gds-progress-indicator__step{flex-grow:1;height:.5rem;margin-right:.125rem;background-color:#e9e9e9}:host .gds-progress-indicator__step.-done{background-color:#45b400}:host .gds-progress-indicator__step:last-child{margin-right:0}:host .file-list th:first-child,:host .file-list td:first-child{width:auto}:host .filename{display:block;margin-bottom:.5rem}:host .col-name{width:40%}:host .col-status{width:30%}:host .col-actions{width:.1%}:host .progress-wrapper{display:flex}:host .progress,:host .indicator{height:.5rem}:host .gds-progress-indicator__step{margin-right:0}:host .progress{color:#45b400}:host .progress::-webkit-progress-value{background-color:#45b400}:host .progress::-moz-progress-bar{background-color:#45b400}:host .progress::-ms-fill{background-color:#45b400}:host .progress-text{display:block;margin-top:.125rem}:host .error-text{color:#bb000c}:host .success-text{color:#308800}:host .remove{padding:0 .5rem;font-size:1.5em;color:#868686;cursor:pointer;display:grid;place-content:center}:host .remove:hover,:host .remove:focus{color:#bb000c}\n"] }]
|
|
456
|
+
}], propDecorators: { deleteModalRef: [{
|
|
457
|
+
type: ViewChild,
|
|
458
|
+
args: ['deleteModalRef']
|
|
459
|
+
}], thook: [{
|
|
460
|
+
type: HostBinding,
|
|
461
|
+
args: ['attr.data-thook']
|
|
462
|
+
}, {
|
|
463
|
+
type: Input
|
|
464
|
+
}], service: [{
|
|
465
|
+
type: Input
|
|
466
|
+
}], accept: [{
|
|
467
|
+
type: Input
|
|
468
|
+
}], disableRemove: [{
|
|
469
|
+
type: Input
|
|
470
|
+
}], fileLimit: [{
|
|
471
|
+
type: Input
|
|
472
|
+
}], multiple: [{
|
|
473
|
+
type: Input
|
|
474
|
+
}], list: [{
|
|
475
|
+
type: Input
|
|
476
|
+
}], throttle: [{
|
|
477
|
+
type: Input
|
|
478
|
+
}], retryAttempts: [{
|
|
479
|
+
type: Input
|
|
480
|
+
}], selectable: [{
|
|
481
|
+
type: Input
|
|
482
|
+
}], stateMap: [{
|
|
483
|
+
type: Input
|
|
484
|
+
}], fetchStatuses: [{
|
|
485
|
+
type: Input
|
|
486
|
+
}], errorCodes: [{
|
|
487
|
+
type: Input
|
|
488
|
+
}], stateChange: [{
|
|
489
|
+
type: Output
|
|
490
|
+
}], detailsClick: [{
|
|
491
|
+
type: Output
|
|
492
|
+
}], onBeforeUnload: [{
|
|
493
|
+
type: HostListener,
|
|
494
|
+
args: ['window:beforeunload', ['$event']]
|
|
495
|
+
}] } });
|
|
496
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1kcm9wLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9zcmMvdi1hbmd1bGFyL2RyYWctZHJvcC9kcmFnLWRyb3AuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy92LWFuZ3VsYXIvZHJhZy1kcm9wL2RyYWctZHJvcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDcEQsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzVCLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFeEUsT0FBTyxFQUVMLG1CQUFtQixHQUNwQixNQUFNLDZDQUE2QyxDQUFBO0FBQ3BELE9BQU8sRUFDTCxVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLElBQUksRUFDSixhQUFhLEVBQ2IsWUFBWSxHQUNiLE1BQU0sbUJBQW1CLENBQUE7QUFXMUIsT0FBTyw0REFBNEQsQ0FBQTtBQUNuRSxPQUFPLDJEQUEyRCxDQUFBO0FBQ2xFLE9BQU8seURBQXlELENBQUE7Ozs7Ozs7QUFTaEUsTUFBTSxPQUFPLHFCQUFxQjtJQUxsQztRQVNFLG9GQUFvRjtRQUMzQyxVQUFLLEdBQzVDLFdBQVcsQ0FBQTtRQVFiLDhJQUE4STtRQUNySSxrQkFBYSxHQUFrQixFQUFFLENBQUE7UUFFMUMscUNBQXFDO1FBQzVCLGNBQVMsR0FBVyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQTtR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QUFjLEdBQUcsUUFBUSxDQUFBO1FBQ3BFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUNWLENBQUM7K0dBamxCVSxxQkFBcUI7bUdBQXJCLHFCQUFxQix3cUJDL0NsQyxnMlVBaVRBOzs0RkRsUWEscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLGdCQUFnQjs4QkFNRyxjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFHYyxLQUFLO3NCQUE3QyxXQUFXO3VCQUFDLGlCQUFpQjs7c0JBQUcsS0FBSztnQkFJN0IsT0FBTztzQkFBZixLQUFLO2dCQUdHLE1BQU07c0JBQWQsS0FBSztnQkFHRyxhQUFhO3NCQUFyQixLQUFLO2dCQUdHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0csUUFBUTtzQkFBaEIsS0FBSztnQkFHRyxJQUFJO3NCQUFaLEtBQUs7Z0JBR0csUUFBUTtzQkFBaEIsS0FBSztnQkFHRyxhQUFhO3NCQUFyQixLQUFLO2dCQU1HLFVBQVU7c0JBQWxCLEtBQUs7Z0JBR0csUUFBUTtzQkFBaEIsS0FBSztnQkFZRyxhQUFhO3NCQUFyQixLQUFLO2dCQUdHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBR0ksV0FBVztzQkFBcEIsTUFBTTtnQkFHRyxZQUFZO3NCQUFyQixNQUFNO2dCQW9GUCxjQUFjO3NCQURiLFlBQVk7dUJBQUMscUJBQXFCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXZlbnRUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnXG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IHRpbWVyIH0gZnJvbSAncnhqcydcbmltcG9ydCB7IGZpbHRlciwgcmV0cnlXaGVuLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuXG5pbXBvcnQge1xuICBEaWFsb2dFdmVudCxcbiAgTmdndkRpYWxvZ0NvbXBvbmVudCxcbn0gZnJvbSAnQHNlYmdyb3VwL2dyZWVuLWFuZ3VsYXIvc3JjL3YtYW5ndWxhci9tb2RhbCdcbmltcG9ydCB7XG4gIGV4dGVuZEZpbGUsXG4gIGlzRHJhZ0Ryb3BBdmFpbGFibGUsXG4gIHBpY2ssXG4gIHJldHJ5U3RyYXRlZ3ksXG4gIHZlcmlmeUFjY2VwdCxcbn0gZnJvbSAnLi9kcmFnLWRyb3AudXRpbHMnXG5cbmltcG9ydCB0eXBlIHtcbiAgQVBJRmlsZSxcbiAgRXZlbnRTdGF0ZUNoYW5nZSxcbiAgRmlsZVNlcnZpY2UsXG4gIExvY2FsRmlsZSxcbiAgU3RhdGVNYXAsXG4gIFVwbG9hZFN0YXRlLFxufSBmcm9tICcuL2RyYWctZHJvcC5tb2RlbHMnXG5cbmltcG9ydCAnQHNlYmdyb3VwL2dyZWVuLWNvcmUvY29tcG9uZW50cy9pY29uL2ljb25zL2Nsb3VkLXVwbG9hZC5qcydcbmltcG9ydCAnQHNlYmdyb3VwL2dyZWVuLWNvcmUvY29tcG9uZW50cy9pY29uL2ljb25zL2Nyb3NzLXNtYWxsLmpzJ1xuaW1wb3J0ICdAc2ViZ3JvdXAvZ3JlZW4tY29yZS9jb21wb25lbnRzL2ljb24vaWNvbnMvY2hlY2ttYXJrLmpzJ1xuXG5leHBvcnQgdHlwZSBEcmFnRHJvcFN0YXRlID0gJ25vcm1hbCcgfCAnb3ZlcicgfCAndXBsb2FkaW5nJyB8ICdkb25lJ1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ2d2LWRyYWctZHJvcCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kcmFnLWRyb3AuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kcmFnLWRyb3AuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgTmdndkRyYWdEcm9wQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKiogQGludGVybmFsICovXG4gIEBWaWV3Q2hpbGQoJ2RlbGV0ZU1vZGFsUmVmJykgZGVsZXRlTW9kYWxSZWYhOiBOZ2d2RGlhbG9nQ29tcG9uZW50XG5cbiAgLyoqIFNwZWNpYWwgcHJvcGVydHkgdXNlZCBmb3Igc2VsZWN0aW5nIERPTSBlbGVtZW50cyBkdXJpbmcgYXV0b21hdGVkIFVJIHRlc3RpbmcuICovXG4gIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLXRob29rJykgQElucHV0KCkgdGhvb2s6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPVxuICAgICdkcmFnLWRyb3AnXG5cbiAgLyoqIEFsbG93aW5nIHNlbGVjdGluZyBvciBkcm9wcGluZyBtdWx0aXBsZSBmaWxlcy4gKi9cbiAgQElucHV0KCkgc2VydmljZTogRmlsZVNlcnZpY2UgfCB1bmRlZmluZWRcblxuICAvKiogTWltZSB0eXBlcyBhbGxvd2VkLiAqL1xuICBASW5wdXQoKSBhY2NlcHQ/OiBzdHJpbmdcblxuICAvKiogRGlzYWJsZXMgZGVsZXRpb24gb3IgY2FuY2VsbGF0aW9uIGR1cmluZyBkZWZpbmVkIHN0YXRlcyBbbG9jYWwgfCB1cGxvYWRpbmcgfCBhYm9ydGVkIHwgdXBsb2FkZWQgfCB2YWxpZGF0aW5nIHwgZXJyb3IgfCBkZWxldGVkIHwgZG9uZV0uICovXG4gIEBJbnB1dCgpIGRpc2FibGVSZW1vdmU6IFVwbG9hZFN0YXRlW10gPSBbXVxuXG4gIC8qKiBGaWxlIHNpemUgbGltaXQgaW4gbWVnYSBieXRlcy4gKi9cbiAgQElucHV0KCkgZmlsZUxpbWl0OiBudW1iZXIgPSAyNTAgKiAxMDI0ICogMTAyNFxuXG4gIC8qKiBBbGxvd2luZyBzZWxlY3Rpbmcgb3IgZHJvcHBpbmcgbXVsdGlwbGUgZmlsZXMuICovXG4gIEBJbnB1dCgpIG11bHRpcGxlID0gdHJ1ZVxuXG4gIC8qKiBEZXRlcm1pbmVzIGlmIGxpc3Qgc2hvdWxkIGJlIHNob3duIHVuZGVyIHVwbG9hZCwgZGlzYWJsaW5nIGxpc3QgZGlzYWJsZXMgbXVsdGlwbGUgdXBsb2FkLiAqL1xuICBASW5wdXQoKSBsaXN0ID0gdHJ1ZVxuXG4gIC8qKiBGcmVxdWVuY3kgb2YgcmVxdWVzdHMgd2hpY2ggdG8gc2VuZCB0byB0aGUgQVBJIHJlcXVlc3Rpbmcgc3RhdHVzIHVwZGF0ZXMuICovXG4gIEBJbnB1dCgpIHRocm90dGxlID0gNTAwMFxuXG4gIC8qKiBNYXhpbXVtIG51bWJlciBvZiBhdHRlbXB0cyB0byByZXF1ZXN0IGEgc3RhdHVzIHVwZGF0ZSBmcm9tIHRoZSBBUEkgaWYgc2VydmljZSBpcyB1bnJlYWNoYWJsZS4gKi9cbiAgQElucHV0KCkgcmV0cnlBdHRlbXB0cyA9IDVcblxuICAvKiogSWYgc2VsZWN0aW9uIG9mIG11bHRpcGxlIGZpbGUgc2hvdWxkIGJlIHBvc3NpYmxlIHdpdGggYSBjaGVja2JveC5cbiAgICogQGV4cGVyaW1lbnRhbCB3b3JrIGluIHByb2dyZXNzIGFuZCBzaG91bGQgbm90IHlldCBiZSB1c2VkLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIEBJbnB1dCgpIHNlbGVjdGFibGUgPSBmYWxzZVxuXG4gIC8qKiBBbGxvd3MgbXVsdGlwbGUgdmFsdWVzIGZyb20gYGFwaUZpbGUuc3RhdHVzYCB0byBiZSBtYXBwZWQgdG8gYSBzaW5nbGUgZmlsZSB1cGxvYWQgc3RhdGUuICovXG4gIEBJbnB1dCgpIHN0YXRlTWFwOiBTdGF0ZU1hcCA9IHtcbiAgICBsb2NhbDogJ2xvY2FsJyxcbiAgICB1cGxvYWRpbmc6ICd1cGxvYWRpbmcnLFxuICAgIGFib3J0ZWQ6ICdhYm9ydGVkJyxcbiAgICB1cGxvYWRlZDogJ3VwbG9hZGVkJyxcbiAgICB2YWxpZGF0aW5nOiAndmFsaWRhdGluZycsXG4gICAgZXJyb3I6ICdlcnJvcicsXG4gICAgZGVsZXRlZDogJ2RlbGV0ZWQnLFxuICAgIGRvbmU6ICdkb25lJyxcbiAgfVxuXG4gIC8qKiBTdGF0dXNlcyBhbGxvd2VkIHRvIGJlIGZldGNoIGR1cmluZyB0aGUgaW5pdGlhbCBsb2FkLiBVc2VkIHRvIGhpZGUgXCJkb25lXCIgc3RhdGVzIGZyb20gbGlzdC4gKi9cbiAgQElucHV0KCkgZmV0Y2hTdGF0dXNlczogc3RyaW5nW10gPSBbXVxuXG4gIC8qKiBTdGF0dXNlcyBhbGxvd2VkIGJlIHNob3duIHdoZW4gc3RhdHVzIGlzIFwicmVqZWN0ZWRcIi4gV2lsbCBmYWxsYmFjayB0byBnZW5lcmljIG1lc3NhZ2UuIGBudWxsYCBhbGxvd3MgYWxsLiAqL1xuICBASW5wdXQoKSBlcnJvckNvZGVzOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsXG5cbiAgLyoqIEV2ZW50IHRyaWdnZXJlZCBvbiBpbml0aWFsaXphdGlvbiBhbmQgZXZlcnkgdGltZSB0aGUgXCJ1cGxvYWRTdGF0ZVwiIGZvciBhIGZpbGUgY2hhbmdlcy4gKi9cbiAgQE91dHB1dCgpIHN0YXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudFN0YXRlQ2hhbmdlPigpXG5cbiAgLyoqIEV2ZW50IHRyaWdnZXJlZCB3aGVuIHZpZXcgZGV0YWlscyBpcyBjbGlja2VkLiAqL1xuICBAT3V0cHV0KCkgZGV0YWlsc0NsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxMb2NhbEZpbGUgJiBBUElGaWxlPigpXG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBpc0RyYWdEcm9wQXZhaWxhYmxlID0gaXNEcmFnRHJvcEF2YWlsYWJsZSgpXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgY29tcG9uZW50U3RhdGU6IERyYWdEcm9wU3RhdGUgPSAnbm9ybWFsJ1xuICAvKiogQGludGVybmFsICovXG4gIGZpbGVzOiBNYXA8c3RyaW5nLCBMb2NhbEZpbGUgJiBBUElGaWxlPiA9IG5ldyBNYXAoKVxuICAvKiogQGludGVybmFsICovXG4gIGxhc3RGaWxlOiAoTG9jYWxGaWxlICYgQVBJRmlsZSkgfCB1bmRlZmluZWRcbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBzZWxlY3RlZDogc3RyaW5nW10gPSBbXVxuICAvKiogQGludGVybmFsICovXG4gIGxvYWRpbmcgPSBmYWxzZVxuICAvKiogQGludGVybmFsICovXG4gIG1hcmtlZEZvckRlbGV0aW9uOiBBUElGaWxlIHwgdW5kZWZpbmVkXG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIGNvbXBvbmVudCBhbmQgd2FybiBpZiBzZXJ2aWNlIGlzIG5vdCBkZWZpbmVkLiBXaWxsIGFsc28gZmV0Y2ggZmlsZXMgZm9yIHRoZSBsaXN0IGlmIGVuYWJsZWQuXG4gICAqL1xuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAoIXRoaXMuc2VydmljZSkge1xuICAgICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICdEcmFnIGFuZCBkcm9wIGNvbXBvbmVudCB3aWxsIG5vdCB3b3JrIHdpdGhvdXQgdGhlIFtzZXJ2aWNlXSBwcm9wZXJ0eSBkZWZpbmVkIScsXG4gICAgICApXG4gICAgfVxuXG4gICAgaWYgKHRoaXMubGlzdCkge1xuICAgICAgdGhpcy5zZXJ2aWNlLmZldGNoRmlsZXModGhpcy5mZXRjaFN0YXR1c2VzKS5zdWJzY3JpYmUoKGFwaUZpbGVzKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgYXBpRmlsZSBvZiBhcGlGaWxlcykge1xuICAgICAgICAgIGNvbnN0IGV4dGVuZGVkRmlsZSA9IGV4dGVuZEZpbGUodW5kZWZpbmVkLCBhcGlGaWxlLCB7XG4gICAgICAgICAgICBwcm9ncmVzczogMTAwLFxuICAgICAgICAgICAgdXBsb2FkU3RhdGU6IHRoaXMuZGV0ZXJtaW5lVXBsb2FkU3RhdGUoYXBpRmlsZS5zdGF0dXMpLFxuICAgICAgICAgICAgaW50ZXJuYWxTdGF0dXNSZWFzb25Db2RlOiB0aGlzLmZhbGxiYWNrRXJyb3IoXG4gICAgICAgICAgICAgIGFwaUZpbGUuaW50ZXJuYWxTdGF0dXNSZWFzb25Db2RlLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIHRoaXMuZmlsZXMuc2V0KGV4dGVuZGVkRmlsZS5pZCwgZXh0ZW5kZWRGaWxlKVxuICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2UuZW1pdChcbiAgICAgICAgICAgIHBpY2soXG4gICAgICAgICAgICAgIGV4dGVuZGVkRmlsZSxcbiAgICAgICAgICAgICAgJ3VwbG9hZFN0YXRlJyxcbiAgICAgICAgICAgICAgJ2ZpbGVOYW1lJyxcbiAgICAgICAgICAgICAgJ2lkJyxcbiAgICAgICAgICAgICAgJ3N0YXR1cycsXG4gICAgICAgICAgICAgICdpbnRlcm5hbFN0YXR1c1JlYXNvbkNvZGUnLFxuICAgICAgICAgICAgICAnc3RhdHVzUmVhc29uSW5mb3JtYXRpb24nLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApXG5cbiAgICAgICAgICAvLyBDaGVjayBpZiB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkLCB0aGVuIHN0YXJ0IHBvbGxpbmdcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBleHRlbmRlZEZpbGUudXBsb2FkU3RhdGUgPT09ICd1cGxvYWRlZCcgfHxcbiAgICAgICAgICAgIGV4dGVuZGVkRmlsZS51cGxvYWRTdGF0ZSA9PT0gJ3ZhbGlkYXRpbmcnXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrVmFsaWRpdHkoZXh0ZW5kZWRGaWxlLCB0aGlzLnRocm90dGxlKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICAvKiogRGVzdHJveSBhbGwgZXZlbnQgbGlzdGVuZXJzIGFuZCBwb2xsaW5nIHJ1bm5pbmcgKi9cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5maWxlcy5mb3JFYWNoKChmaWxlKSA9PiB7XG4gICAgICBmaWxlLnVwbG9hZFJlcXVlc3RzPy51bnN1YnNjcmliZSgpXG4gICAgICBpZiAoZmlsZS51cGxvYWRTdGF0ZSA9PT0gJ3VwbG9hZGluZycpIHtcbiAgICAgICAgZmlsZS51cGxvYWRTdGF0ZSA9ICdhYm9ydGVkJ1xuICAgICAgICBmaWxlLmludGVybmFsU3RhdHVzUmVhc29uQ29kZSA9ICdNRkVGSE0wMDQnXG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2UuZW1pdChcbiAgICAgICAgICBwaWNrKFxuICAgICAgICAgICAgZmlsZSxcbiAgICAgICAgICAgICd1cGxvYWRTdGF0ZScsXG4gICAgICAgICAgICAnZmlsZU5hbWUnLFxuICAgICAgICAgICAgJ3N0YXR1cycsXG4gICAgICAgICAgICAnaW50ZXJuYWxTdGF0dXNSZWFzb25Db2RlJyxcbiAgICAgICAgICApLFxuICAgICAgICApXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgV2FybiB1c2VyIHRyeWluZyB0byBsZWF2ZSBwYWdlIGJlZm9yZSBhbGwgdXBsb2FkcyBhcmUgZG9uZS4gQ3VzdG9tIG1lc3NhZ2Ugb25seSB3b3JrcyBpbiBvbGRlciBicm93c2Vycy4gKi9cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmJlZm9yZXVubG9hZCcsIFsnJGV2ZW50J10pXG4gIG9uQmVmb3JlVW5sb2FkKGV2ZW50OiBFdmVudCkge1xuICAgIGlmICghdGhpcy5hbGxVcGxvYWRpbmdEb25lKHRoaXMuZmlsZXMpKSB7XG4gICAgICBjb25zdCBjb25maXJtYXRpb25NZXNzYWdlID0gYFlvdSBzdGlsbCBoYXZlIGZpbGVzIHVwbG9hZGluZywgYXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGxlYXZlIHRoaXMgcGFnZT9gXG4gICAgICA7KChldmVudCBhcyBhbnkpIHx8ICh3aW5kb3cuZXZlbnQgYXMgYW55KSkucmV0dXJuVmFsdWUgPVxuICAgICAgICBjb25maXJtYXRpb25NZXNzYWdlXG4gICAgICByZXR1cm4gY29uZmlybWF0aW9uTWVzc2FnZVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuXG4gIC8qIERyYWcgJiBEcm9wIEV2ZW50cyAqL1xuXG4gIC8qKiBAaW50ZXJuYWwgRXZlbnQgaGFuZGxlciBmb3Igd2hlbiBhIGZpbGUgaXMgaGVsZCBvdmVyIHRoZSBkcm9wIGFyZWEgKi9cbiAgb25EcmFnRW50ZXIoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZXJ2aWNlKSByZXR1cm5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgLy8gVXBkYXRlIHRoZSB2aXN1YWwgc3RhdGVcbiAgICB0aGlzLmNvbXBvbmVudFN0YXRlID0gJ292ZXInXG4gIH1cblxuICAvKiogQGludGVybmFsIEV2ZW50IGhhbmRsZXIgZm9yIHdoZW4gYSBmaWxlIGxlYXZlcyB0aGUgZHJvcCBhcmVhICovXG4gIG9uRHJhZ0xlYXZlKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2VydmljZSkgcmV0dXJuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgIHRoaXMuY29tcG9uZW50U3RhdGUgPSAnbm9ybWFsJ1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCBFdmVudCBoYW5kbGVyIGZvciB3aGVuIGEgZmlsZSBpcyBkcm9wcGVkIG9uIHRoZSBkcm9wIGFyZWEgb3Igd2hlbiBgaW5wdXRgIGZpbGVzIGFyZSBzZWxlY3RlZCAqL1xuICBvbkRyb3AoZXZlbnQ6IERyYWdFdmVudCB8IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNlcnZpY2UpIHJldHVyblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICB0aGlzLmNvbXBvbmVudFN0YXRlID0gJ25vcm1hbCdcblxuICAgIGxldCBmaWxlczogRmlsZUxpc3QgfCB1bmRlZmluZWRcblxuICAgIC8vIERldGVybWluZSBpZiBmaWxlcyBhcmUgZnJvbSB0aGUgZHJvcCBldmVudCBvciBpbnB1dCBlbGVtZW50XG4gICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgRHJhZ0V2ZW50ICYmIGV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgICAgZmlsZXMgPSBldmVudC5kYXRhVHJhbnNmZXIuZmlsZXNcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgZXZlbnQudGFyZ2V0ICYmXG4gICAgICBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmXG4gICAgICBldmVudC50YXJnZXQuZmlsZXNcbiAgICApIHtcbiAgICAgIGZpbGVzID0gZXZlbnQudGFyZ2V0LmZpbGVzXG4gICAgfVxuXG4gICAgaWYgKGZpbGVzKSB7XG4gICAgICBjb25zdCBleHRlbmRlZEZpbGVzID0gQXJyYXkuZnJvbShmaWxlcywgKGZpbGUpID0+IHtcbiAgICAgICAgbGV0IGFib3J0ID0gZmFsc2VcbiAgICAgICAgbGV0IHN0YXR1c0NvZGU6IHN0cmluZyB8IG51bGwgPSBudWxsXG4gICAgICAgIC8vIENoZWNrIGlmIGZpbGUgc2l6ZSBpcyBsYXJnZXIgdGhhbiBsaW1pdFxuICAgICAgICBpZiAoZmlsZS5zaXplID4gdGhpcy5maWxlTGltaXQpIHtcbiAgICAgICAgICBhYm9ydCA9IHRydWVcbiAgICAgICAgICBzdGF0dXNDb2RlID0gJ01GRUZITTAwMydcbiAgICAgICAgfVxuICAgICAgICAvLyBDaGVjayBpZiBmaWxlIHR5cGUgaXMgbm90IGFjY2VwdGFibGVcbiAgICAgICAgaWYgKCF2ZXJpZnlBY2NlcHQoZmlsZS50eXBlLCB0aGlzLmFjY2VwdCkpIHtcbiAgICAgICAgICBhYm9ydCA9IHRydWVcbiAgICAgICAgICBzdGF0dXNDb2RlID0gJ01GRUZITTAwMidcbiAgICAgICAgfVxuICAgICAgICAvLyBBZGQgZGVmYXVsdCB2YWx1ZXMgZXhwZWN0ZWQgYnkgdGhlIEFQSVxuICAgICAgICBjb25zdCBleHRlbmRlZEZpbGUgPSBleHRlbmRGaWxlKGZpbGUsIHtcbiAgICAgICAgICBpbnRlcm5hbFN0YXR1c1JlYXNvbkNvZGU6IHN0YXR1c0NvZGUsXG4gICAgICAgICAgdXBsb2FkU3RhdGU6IChhYm9ydCA/ICdhYm9ydGVkJyA6ICdsb2NhbCcpIGFzIFVwbG9hZFN0YXRlLFxuICAgICAgICB9KVxuXG4gICAgICAgIC8vIEVtaXQgaW5pdGlhbCBsb2NhbCB1cGxvYWQgZXZlbnRcbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZS5lbWl0KHtcbiAgICAgICAgICB1cGxvYWRTdGF0ZTogJ2xvY2FsJyxcbiAgICAgICAgICBmaWxlTmFtZTogZXh0ZW5kZWRGaWxlLmZpbGVOYW1lLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmIChhYm9ydCkge1xuICAgICAgICAgIC8vIEVtaXQgYWJvcnRlZCB1cGxvYWQgZXZlbnRcbiAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgdXBsb2FkU3RhdGU6ICdhYm9ydGVkJyxcbiAgICAgICAgICAgIGZpbGVOYW1lOiBleHRlbmRlZEZpbGUuZmlsZU5hbWUsXG4gICAgICAgICAgICBzdGF0dXM6ICdhYm9ydGVkJyxcbiAgICAgICAgICAgIGludGVybmFsU3RhdHVzUmVhc29uQ29kZTogc3RhdHVzQ29kZSxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGV4dGVuZGVkRmlsZVxuICAgICAgfSlcblxuICAgICAgLy8gQXBwZW5kIHRvIHByZXZpb3VzIGZpbGVzXG4gICAgICBsZXQgaSA9IDBcbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBleHRlbmRlZEZpbGVzKSB7XG4gICAgICAgIC8vIElmIG11bHRpcGxlIG9yIGxpc3QgaXMgZmFsc2UgYXBwZW5kIG9ubHkgZmlsZSB0aGVuIGJyZWFrIGxvb3BcbiAgICAgICAgaWYgKCghdGhpcy5tdWx0aXBsZSB8fCAhdGhpcy5saXN0KSAmJiBpID49IDEpIGJyZWFrXG4gICAgICAgIHRoaXMubGFzdEZpbGUgPSBmaWxlXG4gICAgICAgIHRoaXMuZmlsZXMuc2V0KGZpbGUuaWQsIGZpbGUpXG4gICAgICAgIGkrK1xuICAgICAgfVxuXG4gICAgICAvLyBDbGVhciBmaWxlIGlucHV0IHNvIHRoYXQgc2FtZSBmaWxlIGNhbiBiZSB1cGxvYWRlZFxuICAgICAgaWYgKFxuICAgICAgICBldmVudC50YXJnZXQgJiZcbiAgICAgICAgZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJlxuICAgICAgICBldmVudC50YXJnZXQuZmlsZXNcbiAgICAgICkge1xuICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSAnJ1xuICAgICAgfVxuXG4gICAgICB0aGlzLm9uU3VibWl0KClcbiAgICB9XG4gIH1cblxuICAvKiogQGludGVybmFsIEV2ZW50IHRyaWdnZXIgZm9yIHdoZW4gZGVsZXRlIGJ1dHRvbiBpcyBwcmVzc2VkICovXG4gIG9uUmVtb3ZlKGlkOiBzdHJpbmcsIHN0YXRlOiBVcGxvYWRTdGF0ZSk6IHZvaWQge1xuICAgIC8vIE9ubHkgYWxsb3cgcmVtb3ZhbCBpbiBjZXJ0YWluIHN0YXRlc1xuICAgIGlmICghdGhpcy5zZXJ2aWNlIHx8IHRoaXMuZGlzYWJsZVJlbW92ZS5pbmNsdWRlcyhzdGF0ZSkpIHJldHVyblxuICAgIGNvbnN0IGZpbGUgPSB0aGlzLmZpbGVzLmdldChpZClcbiAgICBpZiAoIWZpbGUpIHJldHVyblxuICAgIC8vIFNraXAgY29uZmlybWF0aW9uIGZvciBhYm9ydGVkIGFuZCBkZWxldGVkIGZpbGVzXG4gICAgaWYgKFxuICAgICAgZmlsZS51cGxvYWRTdGF0ZSA9PT0gJ2Vycm9yJyB8fFxuICAgICAgZmlsZS51cGxvYWRTdGF0ZSA9PT0gJ2Fib3J0ZWQnIHx8XG4gICAgICBmaWxlLnVwbG9hZFN0YXRlID09PSAnZGVsZXRlZCdcbiAgICApIHtcbiAgICAgIHRoaXMub25Db25maXJtUmVtb3ZlKHsgb3JpZ2luYWw6IHVuZGVmaW5lZCwgcGF5bG9hZDogZmlsZSB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1hcmtlZEZvckRlbGV0aW9uID0gZmlsZVxuICAgICAgdGhpcy5kZWxldGVNb2RhbFJlZi5vcGVuKClcbiAgICB9XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIG9uQ29uZmlybVJlbW92ZShldmVudDogRGlhbG9nRXZlbnQ8TG9jYWxGaWxlICYgQVBJRmlsZT4pIHtcbiAgICBjb25zdCB7IHBheWxvYWQ6IGZpbGUgfSA9IGV2ZW50XG4gICAgaWYgKCFmaWxlIHx8ICF0aGlzLnNlcnZpY2UpIHJldHVyblxuXG4gICAgLy8gQWJvcnQgdXBsb2FkIGFuZCBzZXQgbG9jYWwgc3RhdGUgdG8gYWJvcnRlZCB0byBpbmZvcm0gdXNlclxuICAgIHN3aXRjaCAoZmlsZS51cGxvYWRTdGF0ZSkge1xuICAgICAgY2FzZSAnbG9jYWwnOlxuICAgICAgY2FzZSAndXBsb2FkaW5nJzpcbiAgICAgICAgZmlsZS51cGxvYWRSZXF1ZXN0cz8udW5zdWJzY3JpYmUoKVxuICAgICAgICBmaWxlLnVwbG9hZFN0YXRlID0gJ2Fib3J0ZWQnXG4gICAgICAgIGZpbGUuaW50ZXJuYWxTdGF0dXNSZWFzb25Db2RlID0gJ01GRUZITTAwNCdcbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZS5lbWl0KFxuICAgICAgICAgIHBpY2soXG4gICAgICAgICAgICBmaWxlLFxuICAgICAgICAgICAgJ3VwbG9hZFN0YXRlJyxcbiAgICAgICAgICAgICdmaWxlTmFtZScsXG4gICAgICAgICAgICAnc3RhdHVzJyxcbiAgICAgICAgICAgICdpbnRlcm5hbFN0YXR1c1JlYXNvbkNvZGUnLFxuICAgICAgICAgICksXG4gICAgICAgIClcbiAgICAgICAgYnJlYWtcblxuICAgICAgLy8gUmVtb3ZlIGZpbGUgZnJvbSBzZXJ2aWNlIHRoZW4gc2V0IGxvY2FsIHN0YXRlIHRvIGFib3J0ZWQgdG8gaW5mb3JtIHVzZXJcbiAgICAgIGNhc2UgJ3VwbG9hZGVkJzpcbiAgICAgIGNhc2UgJ3ZhbGlkYXRpbmcnOlxuICAgICAgICB0aGlzLnNlcnZpY2VcbiAgICAgICAgICAucmVtb3ZlRmlsZShmaWxlLmlkKVxuICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgZXJyb3I6IGNvbnNvbGUud2FybixcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5hZGQoKCkgPT4ge1xuICAgICAgICAgICAgLy8gQWJvcnQgcmVnYXJkbGVzcyBvZiByZXNwb25zZSBmcm9tIHNlcnZlclxuICAgICAgICAgICAgZmlsZS51cGxvYWRSZXF1ZXN0cz8udW5zdWJzY3JpYmUoKVxuICAgICAgICAgICAgZmlsZS51cGxvYWRTdGF0ZSA9ICdhYm9ydGVkJ1xuICAgICAgICAgICAgZmlsZS5pbnRlcm5hbFN0YXR1c1JlYXNvbkNvZGUgPSAnTUZFRkhNMDA1J1xuICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZS5lbWl0KFxuICAgICAgICAgICAgICBwaWNrKFxuICAgICAgICAgICAgICAgIGZpbGUsXG4gICAgICAgICAgICAgICAgJ3VwbG9hZFN0YXRlJyxcbiAgICAgICAgICAgICAgICAnZmlsZU5hbWUnLFxuICAgICAgICAgICAgICAgICdzdGF0dXMnLFxuICAgICAgICAgICAgICAgICdpbnRlcm5hbFN0YXR1c1JlYXNvbkNvZGUnLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pXG4gICAgICAgIGJyZWFrXG5cbiAgICAgIC8vIFJlbW92ZSBmaWxlIGZyb20gc2VydmljZSB0aGVuIGxvY2FsbHkgZm9yIFwiY29tcGxldGVkXCIgc3RhdGVzXG4gICAgICBjYXNlICdlcnJvcic6XG4gICAgICBjYXNlICdkb25lJzpcbiAgICAgICAgOyh0aGlzLnNlcnZpY2UucmVtb3ZlRmlsZUZvclxuICAgICAgICAgID8gdGhpcy5zZXJ2aWNlLnJlbW92ZUZpbGVGb3IoZmlsZSlcbiAgICAgICAgICA6IHRoaXMuc2VydmljZS5yZW1vdmVGaWxlKGZpbGUuaWQpXG4gICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIGVycm9yOiBjb25zb2xlLndhcm4sXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuYWRkKCgpID0+IHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSByZWdhcmRsZXNzIG9mIHJlc3BvbnNlIGZyb20gc2VydmVyXG4gICAgICAgICAgICB0aGlzLmZpbGVzLmRlbGV0ZShmaWxlLmlkKVxuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBwaWNrKFxuICAgICAgICAgICAgICBmaWxlLFxuICAgICAgICAgICAgICAndXBsb2FkU3RhdGUnLFxuICAgICAgICAgICAgICAnZmlsZU5hbWUnLFxuICAgICAgICAgICAgICAnaWQnLFxuICAgICAgICAgICAgICAnc3RhdHVzJyxcbiAgICAgICAgICAgICAgJ2ludGVybmFsU3RhdHVzUmVhc29uQ29kZScsXG4gICAgICAgICAgICAgICdzdGF0dXNSZWFzb25JbmZvcm1hdGlvbicsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBldmVudC51cGxvYWRTdGF0ZSA9ICdkZWxldGVkJ1xuICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZS5lbWl0KGV2ZW50KVxuICAgICAgICAgIH0pXG4gICAgICAgIGJyZWFrXG5cbiAgICAgIC8vIEp1c3QgcmVtb3ZlIHRoZSBmaWxlIGxvY2FsbHkgdG8gY2xlYW4gdXBcbiAgICAgIGNhc2UgJ2Fib3J0ZWQnOlxuICAgICAgY2FzZSAnZGVsZXRlZCc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmZpbGVzLmRlbGV0ZShmaWxlLmlkKVxuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlLmVtaXQoe1xuICAgICAgICAgIC4uLnBpY2soXG4gICAgICAgICAgICBmaWxlLFxuICAgICAgICAgICAgJ3VwbG9hZFN0YXRlJyxcbiAgICAgICAgICAgICdmaWxlTmFtZScsXG4gICAgICAgICAgICAnaWQnLFxuICAgICAgICAgICAgJ3N0YXR1cycsXG4gICAgICAgICAgICAnaW50ZXJuYWxTdGF0dXNSZWFzb25Db2RlJyxcbiAgICAgICAgICAgICdzdGF0dXNSZWFzb25JbmZvcm1hdGlvbicsXG4gICAgICAgICAgKSxcbiAgICAgICAgICB1cGxvYWRTdGF0ZTogJ2RlbGV0ZWQnLFxuICAgICAgICB9KVxuICAgICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgRXZlbnQgaGFuZGxlciBmb3Igd2hlbiB0aGUgZmlsZXMgc2hvdWxkIGJlIHVwbG9hZGVkICovXG4gIG9uU3VibWl0KCkge1xuICAgIGlmICghdGhpcy5maWxlcyB8fCAhdGhpcy5zZXJ2aWNlKSByZXR1cm5cbiAgICAvLyBJZiBsaXN0IGlzIG5vdCBlbmFibGVkIHVwZGF0ZSB0aGUgY29tcG9uZW50IHN0YXRlIHRvIHNob3cgcHJvZ3Jlc3NcbiAgICBpZiAoIXRoaXMubGlzdCkgdGhpcy5jb21wb25lbnRTdGF0ZSA9ICd1cGxvYWRpbmcnXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZVxuICAgIHRoaXMuZmlsZXMuZm9yRWFjaCgoZmlsZSkgPT4ge1xuICAgICAgLy8gRmlsdGVyIG91dCBhbGwgZmlsZXMgdGhhdCBhcmVuJ3QgY3VycmVudGx5IGNvbnNpZGVyZWQgbG9jYWxcbiAgICAgIGlmICghZmlsZS5yYXcgfHwgZmlsZS51cGxvYWRTdGF0ZSAhPT0gJ2xvY2FsJykgcmV0dXJuXG4gICAgICBmaWxlLnVwbG9hZFJlcXVlc3RzID0gdGhpcy5zZXJ2aWNlIS51cGxvYWRGaWxlKGZpbGUucmF3ISkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKGV2ZW50KSA9PiB7XG4gICAgICAgICAgc3dpdGNoIChldmVudC50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3M6XG4gICAgICAgICAgICAgIC8vIFVwZGF0ZSB1cGxvYWQgcHJvZ3Jlc3NcbiAgICAgICAgICAgICAgaWYgKGZpbGUudXBsb2FkU3RhdGUgIT09ICd1cGxvYWRpbmcnKSB7XG4gICAgICAgICAgICAgICAgZmlsZS51cGxvYWRTdGF0ZSA9ICd1cGxvYWRpbmcnXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZS5lbWl0KHBpY2soZmlsZSwgJ3VwbG9hZFN0YXRlJywgJ2ZpbGVOYW1lJykpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZmlsZS5wcm9ncmVzcyA9IE1hdGgucm91bmQoXG4gICAgICAgICAgICAgICAgKDEwMCAqIGV2ZW50LmxvYWRlZCkgLyAoZXZlbnQudG90YWwgfHwgMTAwKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBmaWxlLnVwbG9hZFN0YXRlID0gJ3VwbG9hZGluZydcbiAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgY2FzZSBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlOlxuICAgICAgICAgICAgICBpZiAoZXZlbnQuYm9keT8uaWQpIHtcbiAgICAgICAgICAgICAgICAvLyBSZW1vdmUgb2xkIGZpbGUgaWRcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVzLmRlbGV0ZShmaWxlLmlkKVxuICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBmaWxlIHdpdGggaW5mb3JtYXRpb24gZnJvbSB0aGUgQVBJXG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihmaWxlLCBldmVudC5ib2R5KVxuICAgICAgICAgICAgICAgIGZpbGUucHJvZ3Jlc3MgPSAxMDBcbiAgICAgICAgICAgICAgICBmaWxlLnVwbG9hZFN0YXRlID0gdGhpcy5kZXRlcm1pbmVVcGxvYWRTdGF0ZShmaWxlLnN0YXR1cylcbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgd2l0aCBuZXcgZmlsZSBpZFxuICAgICAgICAgICAgICAgIHRoaXMuZmlsZXMuc2V0KGZpbGUuaWQsIGZpbGUpXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlLmVtaXQoXG4gICAgICAgICAgICAgICAgcGljayhcbiAgICAgICAgICAgICAgICAgIGZpbGUsXG4gICAgICAgICAgICAgICAgICAndXBsb2FkU3RhdGUnLFxuICAgICAgICAgICAgICAgICAgJ2ZpbGVOYW1lJyxcbiAgICAgICAgICAgICAgICAgICdpZCcsXG4gICAgICAgICAgICAgICAgICAnc3RhdHVzJyxcbiAgICAgICAgICAgICAgICAgICdzdGF0dXNSZWFzb25JbmZvcm1hdGlvbicsXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgIC8vIENoZWNrIGlmIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQsIHRoZW4gc3RhcnQgcG9sbGluZ1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZmlsZS51cGxvYWRTdGF0ZSA9PT0gJ3VwbG9hZGVkJyB8fFxuICAgICAgICAgICAgICAgIGZpbGUudXBsb2FkU3RhdGUgPT09ICd2YWxpZGF0aW5nJ1xuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrVmFsaWRpdHkoZmlsZSwgdGhpcy50aHJvdHRsZSlcbiAgICAgICAgICAgICAgfSBlbHNlIHRoaXMuc2V0Q29tcG9uZW50U3RhdGVEb25lKClcbiAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oZXJyb3IpXG4gICAgICAgICAgZmlsZS51cGxvYWRTdGF0ZSA9ICdhYm9ydGVkJ1xuICAgICAgICAgIGZpbGUuc3RhdHVzID0gJ2Fib3J0ZWQnXG4gICAgICAgICAgLy8gdG9kbzogd3JvbmdcbiAgICAgICAgICBmaWxlLnN0YXR1c1JlYXNvbkluZm9ybWF0aW9uID0gW1xuICAgICAgICAgICAgeyBvcmlnaW5hdG9ySWQ6ICdsb2NhbCcsIHJlYXNvbjogJ2RyYWdEcm9wLmVycm9yLk1GRUZITTAwMScgfSxcbiAgICAgICAgICBdXG4gICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZS5lbWl0KFxuICAgICAgICAgICAgcGljayhcbiAgICAgICAgICAgICAgZmlsZSxcbiAgICAgICAgICAgICAgJ3VwbG9hZFN0YXRlJyxcbiAgICAgICAgICAgICAgJ2ZpbGVOYW1lJyxcbiAgICAgICAgICAgICAgJ2lkJyxcbiAgICAgICAgICAgICAgJ3N0YXR1cycsXG4gICAgICAgICAgICAgICdzdGF0dXNSZWFzb25JbmZvcm1hdGlvbicsXG4gICAgICAgICAgICApLFxuICAgICAgICAgIClcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBVc2luZyB0aGUgc3RhdGUgbWFwIGNvbnZlcnQgYGFwaUZpbGUuc3RhdGVgIHRvIG9uZSBvZiB7QGxpbmsgVXBsb2FkU3RhdGV9XG4gICAqIEBwYXJhbSBhcGlTdGF0ZSB0aGUgc3RhdGUgZ2l2ZW4gYnkgdGhlIGZpbGUgdG8gYmUgdXNlZCBmb3IgbWFwcGluZ1xuICAgKi9cbiAgZGV0ZXJtaW5lVXBsb2FkU3RhdGUoYXBpU3RhdGU6IHN0cmluZyk6IFVwbG9hZFN0YXRlIHtcbiAgICAvLyBSZXZlcnNlIHNvIHRoYXQgbGF0ZXIgc3RhdGVzIG92ZXJyaWRlIGVhcmxpZXJcbiAgICBjb25zdCBzdGF0ZUVudHJpZXMgPSBPYmplY3QuZW50cmllcyh0aGlzLnN0YXRlTWFwKS5yZXZlcnNlKClcbiAgICBmb3IgKGNvbnN0IFt1cGxvYWRTdGF0ZSwgYXBpU3RhdGVzXSBvZiBzdGF0ZUVudHJpZXMpIHtcbiAgICAgIGlmICh0aGlzLnVwbG9hZFN0YXRlSXNBcnJheShhcGlTdGF0ZXMpKSB7XG4gICAgICAgIGlmIChhcGlTdGF0ZXMuaW5jbHVkZXMoYXBpU3RhdGUpKSByZXR1cm4gdXBsb2FkU3RhdGUgYXMgYW55XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoYXBpU3RhdGVzID09PSBhcGlTdGF0ZSkgcmV0dXJuIHVwbG9hZFN0YXRlIGFzIGFueVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJ2Vycm9yJ1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICB1cGxvYWRTdGF0ZUlzQXJyYXkoc3RhdGU6IHN0cmluZyB8IHN0cmluZ1tdKTogc3RhdGUgaXMgc3RyaW5nW10ge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHN0YXRlKVxuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCB1c2VkIGZvciB0cmFuc2xhdGlvbiB0ZW1wbGF0aW5nIHBhcmFtZXRlcnMgKi9cbiAgdHJhbnNsYXRlUGFyYW1zKGZpbGU6IExvY2FsRmlsZSAmIEFQSUZpbGUpIHtcbiAgICByZXR1cm4geyAuLi5maWxlLCBmaWxlTGltaXQ6ICh0aGlzLmZpbGVMaW1pdCAvIDEwMjQgLyAxMDI0KS50b0ZpeGVkKDMpIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQb2xsIHRoZSBzdGF0dXMgZW5kcG9pbnQgdG8gZGV0ZXJtaW5lIHdoZW4gZmlsZSBpcyB2YWxpZFxuICAgKiBAcGFyYW0gZmlsZSBmaWxlIHVzZWQgdG8gY2hlY2sgc3RhdGUgYW5kIHVwZGF0ZVxuICAgKiBAcGFyYW0gZGVsYXkgaG93IGxvbmcgZWFjaCBpbnRlcnZhbCBzaG91bGQgd2FpdCBiZWZvcmUgc2VuZGluZyBhIHJlcXVlc3RcbiAgICovXG4gIHByaXZhdGUgY2hlY2tWYWxpZGl0eShmaWxlOiBMb2NhbEZpbGUgJiBBUElGaWxlLCBkZWxheTogbnVtYmVyKSB7XG4gICAgaWYgKCF0aGlzLnNlcnZpY2UpIHJldHVyblxuICAgIGZpbGUudXBsb2FkUmVxdWVzdHMgPSB0aW1lcigwLCBkZWxheSlcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFzeW5jRmV0Y2hTdGF0dXMgPVxuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlICYmIHRoaXMuc2VydmljZS5mZXRjaFN0YXR1c0ZvclxuICAgICAgICAgICAgICA/IHRoaXMuc2VydmljZS5mZXRjaFN0YXR1c0ZvcihmaWxlKVxuICAgICAgICAgICAgICA6IHRoaXMuc2VydmljZSEuZmV0Y2hTdGF0dXMoZmlsZS5pZClcbiAgICAgICAgICByZXR1cm4gYXN5bmNGZXRjaFN0YXR1c1xuICAgICAgICB9KSxcbiAgICAgICAgcmV0cnlXaGVuKFxuICAgICAgICAgIHJldHJ5U3RyYXRlZ3koe1xuICAgICAgICAgICAgbWF4UmV0cnlBdHRlbXB0czogdGhpcy5yZXRyeUF0dGVtcHRzLFxuICAgICAgICAgIH0pLFxuICAgICAgICApLFxuICAgICAgICB0YXAoKGZpbGVTdGF0dXMpID0+IHtcbiAgICAgICAgICAvLyBDb250aW51b3VzbHkgdXBkYXRlIGZpbGUgc3RhdGUgdG8gc2hvdyBzdGVwIHByb2dyZXNzXG4gICAgICAgICAgaWYgKGZpbGVTdGF0dXMpIHtcbiAgICAgICAgICAgIC8vIEVtaXQgZXZlbnQgd2hlbiBzdGF0dXMgY2hhbmdlc1xuICAgICAgICAgICAgaWYgKGZpbGUuc3RhdHVzICE9PSBmaWxlU3RhdHVzLnN0YXR1cykge1xuICAgICAgICAgICAgICBmaWxlLnN0YXR1cyA9IGZpbGVTdGF0dXMuc3RhdHVzXG4gICAgICAgICAgICAgIGZpbGUuaW50ZXJuYWxTdGF0dXNSZWFzb25Db2RlID0gdGhpcy5mYWxsYmFja0Vycm9yKFxuICAgICAgICAgICAgICAgIGZpbGVTdGF0dXMuaW50ZXJuYWxTdGF0dXNSZWFzb25Db2RlLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGZpbGUuc3RhdHVzUmVhc29uSW5mb3JtYXRpb24gPSBmaWxlU3RhdHVzLnN0YXR1c1JlYXNvbkluZm9ybWF0aW9uXG4gICAgICAgICAgICAgIGZpbGUudXBsb2FkU3RhdGUgPSB0aGlzLmRldGVybWluZVVwbG9hZFN0YXRlKGZpbGVTdGF0dXMuc3RhdHVzKVxuICAgICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlLmVtaXQoXG4gICAgICAgICAgICAgICAgcGljayhcbiAgICAgICAgICAgICAgICAgIGZpbGUsXG4gICAgICAgICAgICAgICAgICAndXBsb2FkU3RhdGUnLFxuICAgICAgICAgICAgICAgICAgJ2ZpbGVOYW1lJyxcbiAgICAgICAgICAgICAgICAgICdpZCcsXG4gICAgICAgICAgICAgICAgICAnc3RhdHVzJyxcbiAgICAgICAgICAgICAgICAgICdpbnRlcm5hbFN0YXR1c1JlYXNvbkNvZGUnLFxuICAgICAgICAgICAgICAgICAgJ3N0YXR1c1JlYXNvbkluZm9ybWF0aW9uJyxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgLy8gUmVtb3ZlIHZhbGlkYXRpb24gc3RhdGVcbiAgICAgICAgZmlsdGVyKFxuICAgICAgICAgIChhcGlGaWxlKSA9PlxuICAgICAgICAgICAgISFhcGlGaWxlICYmXG4gICAgICAgICAgICB0aGlzLmRldGVybWluZVVwbG9hZFN0YXRlKGFwaUZpbGUuc3RhdHVzKSAhPT0gJ3VwbG9hZGVkJyAmJlxuICAgICAgICAgICAgdGhpcy5kZXRlcm1pbmVVcGxvYWRTdGF0ZShhcGlGaWxlLnN0YXR1cykgIT09ICd2YWxpZGF0aW5nJyxcbiAgICAgICAgKSxcbiAgICAgICAgLy8gVGFrZSBmaXJzdCBzdGF0ZSBhZnRlciB2YWxpZGF0aW9uXG4gICAgICAgIHRha2UoMSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmFsbFZhbGlkYXRpb25Eb25lKHRoaXMuZmlsZXMpKSB7XG4gICAgICAgICAgICB0aGlzLnNldENvbXBvbmVudFN0YXRlRG9uZSgpXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUud2FybihlcnIpXG4gICAgICAgICAgZmlsZS51cGxvYWRTdGF0ZSA9ICdhYm9ydGVkJ1xuICAgICAgICAgIGZpbGUuc3RhdHVzID0gJ2Fib3J0ZWQnXG4gICAgICAgICAgZmlsZS5pbnRlcm5hbFN0YXR1c1JlYXNvbkNvZGUgPSAnTUZFRkhNMDAxJ1xuICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2UuZW1pdChcbiAgICAgICAgICAgIHBpY2soXG4gICAgICAgICAgICAgIGZpbGUsXG4gICAgICAgICAgICAgICd1cGxvYWRTdGF0ZScsXG4gICAgICAgICAgICAgICdmaWxlTmFtZScsXG4gICAgICAgICAgICAgICdpZCcsXG4gICAgICAgICAgICAgICdzdGF0dXMnLFxuICAgICAgICAgICAgICAnaW50ZXJuYWxTdGF0dXNSZWFzb25Db2RlJyxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKVxuICAgICAgICAgIHRoaXMuc2V0Q29tcG9uZW50U3RhdGVEb25lKClcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gIH1cblxuICBwcml2YXRlIGZhbGxiYWNrRXJyb3IoY29kZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICh0aGlzLmVycm9yQ29kZXMgPT0gbnVsbCB8fCAoY29kZSAmJiB0aGlzLmVycm9yQ29kZXMuaW5jbHVkZXMoY29kZSkpKSB7XG4gICAgICByZXR1cm4gY29kZSA/PyBudWxsXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnTUZFRkhNMDAxJ1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBzbyB0aGF0IG5vIGZpbGVzIGFyZSBzdGlsbCB2YWxpZGF0aW5nXG4gICAqL1xuICBwcml2YXRlIGFsbFZhbGlkYXRpb25Eb25lKGZpbGVzOiBNYXA8c3RyaW5nLCBMb2NhbEZpbGU+KSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oZmlsZXMudmFsdWVzKCkpLmV2ZXJ5KFxuICAgICAgKGZpbGUpID0+IGZpbGUudXBsb2FkU3RhdGUgIT09ICd2YWxpZGF0aW5nJyxcbiAgICApXG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgc28gdGhhdCBubyBmaWxlcyBhcmUgc3RpbGwgdXBsb2FkaW5nXG4gICAqL1xuICBwcml2YXRlIGFsbFVwbG9hZGluZ0RvbmUoZmlsZXM6IE1hcDxzdHJpbmcsIExvY2FsRmlsZT4pIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShmaWxlcy52YWx1ZXMoKSkuZXZlcnkoXG4gICAgICAoZmlsZSkgPT4gZmlsZS51cGxvYWRTdGF0ZSAhPT0gJ3VwbG9hZGluZycsXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciB0byB1cGRhdGUgdGhlIGNvbXBvbmVudCBzdGF0ZSB0byBkb25lIGFuZCB0aGVuIGJhY2sgdG8gbm9ybWFsXG4gICAqL1xuICBwcml2YXRlIHNldENvbXBvbmVudFN0YXRlRG9uZSgpIHtcbiAgICBpZiAoIXRoaXMubGlzdCkgdGhpcy5jb21wb25lbnRTdGF0ZSA9ICdkb25lJ1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY29tcG9uZW50U3RhdGUgPT09ICdkb25lJykgdGhpcy5jb21wb25lbnRTdGF0ZSA9ICdub3JtYWwnXG4gICAgfSwgMzAwMClcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqdHJhbnNsb2NvPVwibGV0IHRcIj5cbiAgPGZvcm0gZW5jdHlwZT1cIm11bHRpcGFydC9mb3JtLWRhdGFcIiAjZHJhZ0Ryb3BGb3JtPlxuICAgIDxkaXYgY2xhc3M9XCJnZHMtZHJhZy1kcm9wXCI+XG4gICAgICA8aW5wdXRcbiAgICAgICAgY2xhc3M9XCJnZHMtZHJhZy1kcm9wX19pbnB1dFwiXG4gICAgICAgIGlkPVwiZHJhZy1kcm9wXCJcbiAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICBbYWNjZXB0XT1cImFjY2VwdFwiXG4gICAgICAgIFttdWx0aXBsZV09XCJtdWx0aXBsZSAmJiBsaXN0XCJcbiAgICAgICAgKGNoYW5nZSk9XCJvbkRyb3AoJGV2ZW50KVwiXG4gICAgICAvPlxuICAgICAgPGxhYmVsXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAnZ2RzLWRyYWctZHJvcF9fbGFiZWwnOiB0cnVlLFxuICAgICAgICAgICdnZHMtZHJhZy1kcm9wX19sYWJlbC0tYWJvdmUnOiBjb21wb25lbnRTdGF0ZSA9PT0gJ292ZXInLFxuICAgICAgICB9XCJcbiAgICAgICAgZm9yPVwiZHJhZy1kcm9wXCJcbiAgICAgICAgW2F0dHIuZGF0YS10aG9va109XCJ0aG9vayArICctcGlja2VyJ1wiXG4gICAgICAgIFthdHRyLmFyaWEtYnVzeV09XCJsb2FkaW5nXCJcbiAgICAgICAgKGRyYWdlbnRlcik9XCJvbkRyYWdFbnRlcigkZXZlbnQpXCJcbiAgICAgICAgKGRyYWdvdmVyKT1cIm9uRHJhZ0VudGVyKCRldmVudClcIlxuICAgICAgICAoZHJhZ2xlYXZlKT1cIm9uRHJhZ0xlYXZlKCRldmVudClcIlxuICAgICAgICAoZHJhZ2VuZCk9XCJvbkRyYWdMZWF2ZSgkZXZlbnQpXCJcbiAgICAgICAgKGRyb3ApPVwib25Ecm9wKCRldmVudClcIlxuICAgICAgICBbbmdTd2l0Y2hdPVwiY29tcG9uZW50U3RhdGVcIlxuICAgICAgPlxuICAgICAgICA8IS0tIENPTVBPTkVOVCBTVEFURSBOT1JNQUwgLS0+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT1cIidub3JtYWwnXCI+XG4gICAgICAgICAgPGdkcy1pY29uLWNsb3VkLXVwbG9hZCAqbmdnQ29yZUVsZW1lbnQ+PC9nZHMtaWNvbi1jbG91ZC11cGxvYWRcbiAgICAgICAgICA+PGVtPnt7IHQoJ2RyYWdEcm9wLmxhYmVsLmZpbGVDaG9vc2UnKSB9fTwvZW0+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cImlzRHJhZ0Ryb3BBdmFpbGFibGVcIj5cbiAgICAgICAgICAgIHt7IHQoJ2RyYWdEcm9wLmxhYmVsLmZpbGVEcmFnJykgfX08L25nLXRlbXBsYXRlXG4gICAgICAgICAgPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDwhLS0gQ09NUE9ORU5UIFNUQVRFIE9WRVIgLS0+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT1cIidvdmVyJ1wiPlxuICAgICAgICAgIDxnZHMtaWNvbi1jbG91ZC11cGxvYWQgKm5nZ0NvcmVFbGVtZW50PjwvZ2RzLWljb24tY2xvdWQtdXBsb2FkXG4gICAgICAgICAgPnt7IHQoJ2RyYWdEcm9wLmxhYmVsLmZpbGVEcm9wJykgfX1cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8IS0tIENPTVBPTkVOVCBTVEFURSBVUExPQURJTkcgLS0+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT1cIid1cGxvYWRpbmcnXCI+XG4gICAgICAgICAgPHN0cm9uZyBjbGFzcz1cImZpbGVuYW1lXCI+e3sgbGFzdEZpbGU/LmZpbGVOYW1lIH19PC9zdHJvbmc+XG5cbiAgICAgICAgICA8IS0tIFVQTE9BRElORyBTVEFURSAtLT5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwibGFzdEZpbGU/LnVwbG9hZFN0YXRlID09PSAndXBsb2FkaW5nJ1wiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInByb2dyZXNzVGVtcGxhdGVcIlxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgIGZpbGU6IGxhc3RGaWxlLFxuICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICA8IS0tIFVQTE9BREVEIFNUQVRFIC0tPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJsYXN0RmlsZT8udXBsb2FkU3RhdGUgPT09ICd1cGxvYWRlZCdcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJwcm9ncmVzc1RlbXBsYXRlXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICBmaWxlOiBsYXN0RmlsZSxcbiAgICAgICAgICAgICAgICB0ZXh0OiB0KCdkcmFnRHJvcC50ZXh0LmZpbGVTdGF0ZVVwbG9hZGVkJyksXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgIDwhLS0gVkFMSURBVElORyBTVEFURSAtLT5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwibGFzdEZpbGU/LnVwbG9hZFN0YXRlID09PSAndmFsaWRhdGluZydcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJwcm9ncmVzc1RlbXBsYXRlXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICBmaWxlOiBsYXN0RmlsZSxcbiAgICAgICAgICAgICAgICB0ZXh0OiB0KCdkcmFnRHJvcC50ZXh0LmZpbGVTdGF0ZVZhbGlkYXRpbmcnKSxcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDwhLS0gQ09NUE9ORU5UIFNUQVRFIERPTkUgLS0+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT1cIidkb25lJ1wiPlxuICAgICAgICAgIHt7IHQoJ2RyYWdEcm9wLmxhYmVsLmZpbGVVcGxvYWRlZCcsIHsgZmlsZW5hbWU6IGxhc3RGaWxlPy5maWxlTmFtZSB9KVxuICAgICAgICAgIH19PGdkcy1pY29uLWNoZWNrbWFyayAqbmdnQ29yZUVsZW1lbnQ+PC9nZHMtaWNvbi1jaGVja21hcms+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2xhYmVsPlxuXG4gICAgICA8IS0tIExJU1QgLS0+XG4gICAgICA8dGFibGVcbiAgICAgICAgY2xhc3M9XCJnZHMtdGFibGUgZmlsZS1saXN0XCJcbiAgICAgICAgW2F0dHIuZGF0YS10aG9va109XCJ0aG9vayArICctZmlsZS1saXN0J1wiXG4gICAgICAgICpuZ0lmPVwibGlzdFwiXG4gICAgICA+XG4gICAgICAgIDx0aGVhZD5cbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICA8dGggKm5nSWY9XCJzZWxlY3RhYmxlXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnZHMtZmllbGQtY2hlY2tib3gtd3JhcFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJGaWVsZCBsYWJlbFwiXG4gICAgICAgICAgICAgICAgICBpZD1cInNlbGVjdC1hbGxcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInNlbGVjdC1hbGxcIj48L2xhYmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICA8dGggY2xhc3M9XCJnZHMtdGFibGVfX3ByaW1hcnktY29sIGNvbC1uYW1lXCI+XG4gICAgICAgICAgICAgIHt7IHQoJ2RyYWdEcm9wLmxhYmVsLmZpbGVOYW1lJykgfX1cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICA8dGggY2xhc3M9XCJjb2wtc3RhdHVzXCI+XG4gICAgICAgICAgICAgIHt7IHQoJ2RyYWdEcm9wLmxhYmVsLmZpbGVTdGF0dXMnKSB9fVxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDx0aCBjbGFzcz1cImNvbC1hY3Rpb25zXCI+PC90aD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RoZWFkPlxuICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgPHRyXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXRob29rXT1cInRob29rICsgJy1maWxlJ1wiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgZmlsZSBvZiBmaWxlcyB8IHZhbHVlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8dGQgKm5nSWY9XCJzZWxlY3RhYmxlXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnZHMtZmllbGQtY2hlY2tib3gtd3JhcFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJGaWVsZCBsYWJlbFwiXG4gICAgICAgICAgICAgICAgICBbaWRdPVwiJ2ZpbGUtY2hlY2tib3gtJyArIGZpbGUuaWRcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPGxhYmVsIFtmb3JdPVwiJ2ZpbGUtY2hlY2tib3gtJyArIGZpbGUuaWRcIj48L2xhYmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgY2xhc3M9XCJnZHMtdGFibGVfX3ByaW1hcnktY29sXCJcbiAgICAgICAgICAgICAgW2F0dHIuZGF0YS10aG9va109XCJ0aG9vayArICctZmlsZS1uYW1lJ1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IGZpbGUuZmlsZU5hbWUgfX1cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgW2F0dHIuZGF0YS10aG9va109XCJ0aG9vayArICctZmlsZS1zdGF0dXMnXCJcbiAgICAgICAgICAgICAgW25nU3dpdGNoXT1cImZpbGUudXBsb2FkU3RhdGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8IS0tIFVQTE9BRElORyBTVEFURSAtLT5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPVwiJ3VwbG9hZGluZydcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInByb2dyZXNzVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgZmlsZTogZmlsZSxcbiAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgICAgIDwhLS0gVVBMT0FERUQgU1RBVEUgLS0+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT1cIid1cGxvYWRlZCdcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInByb2dyZXNzVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgZmlsZTogZmlsZSxcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogdCgnZHJhZ0Ryb3AudGV4dC5maWxlU3RhdGVVcGxvYWRlZCcpLFxuICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICAgICAgPCEtLSBWQUxJREFUSU5HIFNUQVRFIC0tPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09XCIndmFsaWRhdGluZydcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInByb2dyZXNzVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgZmlsZTogZmlsZSxcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogdCgnZHJhZ0Ryb3AudGV4dC5maWxlU3RhdGVWYWxpZGF0aW5nJyksXG4gICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICA8IS0tIEFCT1JURUQgU1RBVEUgLS0+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT1cIidhYm9ydGVkJ1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImVycm9yLXRleHRcIlxuICAgICAgICAgICAgICAgICAgW3RyYW5zbG9jb109XCJcbiAgICAgICAgICAgICAgICAgICAgJ2RyYWdEcm9wLmVycm9yLicgKyBmaWxlLmludGVybmFsU3RhdHVzUmVhc29uQ29kZVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIFt0cmFuc2xvY29QYXJhbXNdPVwidHJhbnNsYXRlUGFyYW1zKGZpbGUpXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmlsZS5pbnRlcm5hbFN0YXR1c1JlYXNvbkNvZGVcIlxuICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICAgICAgPCEtLSBFUlJPUiBTVEFURSAtLT5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPVwiJ2Vycm9yJ1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImVycm9yLXRleHRcIlxuICAgICAgICAgICAgICAgICAgW3RyYW5zbG9jb109XCJcbiAgICAgICAgICAgICAgICAgICAgJ2RyYWdEcm9wLmVycm9yLicgKyBmaWxlLmludGVybmFsU3RhdHVzUmVhc29uQ29kZVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIFt0cmFuc2xvY29QYXJhbXNdPVwidHJhbnNsYXRlUGFyYW1zKGZpbGUpXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmlsZS5pbnRlcm5hbFN0YXR1c1JlYXNvbkNvZGVcIlxuICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgPGJyIC8+XG4gICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZXRhaWxzQ2xpY2suZW1pdChmaWxlKVwiXG4gICAgICAgICAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICBmaWxlLnN0YXR1c1JlYXNvbkluZm9ybWF0aW9uICYmXG4gICAgICAgICAgICAgICAgICAgIGZpbGUuc3RhdHVzUmVhc29uSW5mb3JtYXRpb24ubGVuZ3RoXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IHQoJ2RyYWdEcm9wLmxpbmsudmlld0RldGFpbHMnKSB9fVxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICA8IS0tIERPTkUgU1RBVEUgLS0+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT1cIidkb25lJ1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3VjY2Vzcy10ZXh0XCI+e3tcbiAgICAgICAgICAgICAgICAgIHQoJ2RyYWdEcm9wLnRleHQuZmlsZVN0YXRlRG9uZScpXG4gICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3RkPlxuXG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnZHMtdGFibGVfX251bWVyaWMtY29sXCI+XG4gICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJyZW1vdmVcIlxuICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUmVtb3ZlKGZpbGUuaWQsIGZpbGUudXBsb2FkU3RhdGUpXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFkaXNhYmxlUmVtb3ZlLmluY2x1ZGVzKGZpbGUudXBsb2FkU3RhdGUpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxnZHMtaWNvbi1jcm9zcy1zbWFsbCAqbmdnQ29yZUVsZW1lbnQ+PC9nZHMtaWNvbi1jcm9zcy1zbWFsbD5cbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9mb3JtPlxuXG4gIDxuZ2d2LWRpYWxvZ1xuICAgICNkZWxldGVNb2RhbFJlZlxuICAgIFt0aXRsZV09XCJ0KCdkcmFnRHJvcC50ZXh0LmZpbGVDYW5jZWxNb2RhbFRpdGxlJylcIlxuICAgIFtjb250ZW50XT1cIlxuICAgICAgdCgnZHJhZ0Ryb3AudGV4dC5maWxlQ2FuY2VsTW9kYWxDb250ZW50Jywge1xuICAgICAgICBuYW1lOiBtYXJrZWRGb3JEZWxldGlvbj8uZmlsZU5hbWUsXG4gICAgICB9KVxuICAgIFwiXG4gICAgW3BheWxvYWRdPVwibWFya2VkRm9yRGVsZXRpb25cIlxuICAgIFtidXR0b25zXT1cIntcbiAgICAgIG5lZ2F0aXZlOiAnZHJhZ0Ryb3AudGV4dC5maWxlQ2FuY2VsQ29uZmlybScsXG4gICAgICBwb3NpdGl2ZTogJ2RyYWdEcm9wLnRleHQuZmlsZUNhbmNlbERlbnknLFxuICAgIH1cIlxuICAgIChuZ2d2TmVnYXRpdmVFdmVudCk9XCJvbkNvbmZpcm1SZW1vdmUoJGFueSgkZXZlbnQpKVwiXG4gID48L25nZ3YtZGlhbG9nPlxuXG4gIDwhLS0gUFJPR1JFU1MgVEVNUExBVEUgLS0+XG5cbiAgPG5nLXRlbXBsYXRlXG4gICAgI3Byb2dyZXNzVGVtcGxhdGVcbiAgICBsZXQtZmlsZT1cIlxuICAgIGZpbGVcIlxuICAgIGxldC10ZXh0PVwidGV4dFwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3Mtd3JhcHBlclwiPlxuICAgICAgPHByb2dyZXNzXG4gICAgICAgIGNsYXNzPVwiZ2RzLXByb2dyZXNzLWJhciBwcm9ncmVzc1wiXG4gICAgICAgIG1heD1cIjEwMFwiXG4gICAgICAgIFt2YWx1ZV09XCJmaWxlLnByb2dyZXNzXCJcbiAgICAgID5cbiAgICAgICAge3tcbiAgICAgICAgICB0KCdkcmFnRHJvcC50ZXh0LmZpbGVTdGF0ZVVwbG9hZGluZycsIHtcbiAgICAgICAgICAgIHVwbG9hZGVkOlxuICAgICAgICAgICAgICAoZmlsZS5yYXc/LnNpemUgKiAoZmlsZS5wcm9ncmVzcyAvIDEwMCkpIC8gMTAyNCB8IG51bWJlcjogJzAuMC0wJyxcbiAgICAgICAgICAgIHNpemU6IGZpbGUucmF3Py5zaXplIC8gMTAyNCB8IG51bWJlcjogJzAuMC0wJyxcbiAgICAgICAgICAgIHByb2dyZXNzOiBmaWxlLnByb2dyZXNzLFxuICAgICAgICAgICAgdW5pdDogJ2tCJyxcbiAgICAgICAgICB9KVxuICAgICAgICB9fVxuICAgICAgPC9wcm9ncmVzcz5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJzdGF0ZU1hcC52YWxpZGF0aW5nLmxlbmd0aFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJnZHMtcHJvZ3Jlc3MtaW5kaWNhdG9yIGluZGljYXRvclwiXG4gICAgICAgICAgKm5nSWY9XCJ1cGxvYWRTdGF0ZUlzQXJyYXkoc3RhdGVNYXAudmFsaWRhdGluZyk7IGVsc2Ugc2luZ2xlVmFsaWRhdGlvblwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImdkcy1wcm9ncmVzcy1pbmRpY2F0b3JfX3N0ZXBcIlxuICAgICAgICAgICAgW2NsYXNzLi1kb25lXT1cImkgPD0gc3RhdGVNYXAudmFsaWRhdGluZy5pbmRleE9mKGZpbGUuc3RhdHVzKVwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgc3RhdGUgb2Ygc3RhdGVNYXAudmFsaWRhdGluZzsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgI3NpbmdsZVZhbGlkYXRpb24+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJnZHMtcHJvZ3Jlc3MtaW5kaWNhdG9yIGluZGljYXRvclwiPlxuICAgICAgICAgIDwhLS0gZXNsaW50LWRpc2FibGUgQGFuZ3VsYXItZXNsaW50L3RlbXBsYXRlL2VxZXFlcSAtLT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImdkcy1wcm9ncmVzcy1pbmRpY2F0b3JfX3N0ZXBcIlxuICAgICAgICAgICAgW2NsYXNzLi1kb25lXT1cImZpbGUuc3RhdHVzID09IHN0YXRlTWFwLnZhbGlkYXRpbmdcIlxuICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICA8IS0tIGVzbGludC1lbmFibGUgQGFuZ3VsYXItZXNsaW50L3RlbXBsYXRlL2VxZXFlcSAtLT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICAgIDxzcGFuIGNsYXNzPVwicHJvZ3Jlc3MtdGV4dFwiPlxuICAgICAge3tcbiAgICAgICAgdGV4dCB8fFxuICAgICAgICAgIHQoJ2RyYWdEcm9wLnRleHQuZmlsZVN0YXRlVXBsb2FkaW5nJywge1xuICAgICAgICAgICAgdXBsb2FkZWQ6XG4gICAgICAgICAgICAgIChmaWxlLnJhdz8uc2l6ZSAqIChmaWxlLnByb2dyZXNzIC8gMTAwKSkgLyAxMDI0IHwgbnVtYmVyOiAnMC4wLTAnLFxuICAgICAgICAgICAgc2l6ZTogZmlsZS5yYXc/LnNpemUgLyAxMDI0IHwgbnVtYmVyOiAnMC4wLTAnLFxuICAgICAgICAgICAgcHJvZ3Jlc3M6IGZpbGUucHJvZ3Jlc3MsXG4gICAgICAgICAgICB1bml0OiAna0InLFxuICAgICAgICAgIH0pXG4gICAgICB9fVxuICAgIDwvc3Bhbj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvbmctY29udGFpbmVyPlxuIl19
|