@ptsecurity/mosaic 15.6.0 → 16.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_theming.scss +19 -0
- package/_visual.scss +2 -0
- package/autocomplete/autocomplete-trigger.directive.d.ts +6 -16
- package/autocomplete/autocomplete.component.d.ts +1 -1
- package/button/button.component.d.ts +1 -1
- package/button-toggle/button-toggle.component.d.ts +3 -3
- package/card/card.component.d.ts +1 -1
- package/checkbox/_checkbox-theme.scss +4 -0
- package/checkbox/checkbox-config.d.ts +1 -1
- package/checkbox/checkbox.d.ts +1 -1
- package/code-block/actionbar.component.d.ts +1 -1
- package/code-block/code-block.component.d.ts +1 -1
- package/core/common-behaviors/color.d.ts +1 -1
- package/core/common-behaviors/constructor.d.ts +2 -2
- package/core/common-behaviors/disabled.d.ts +1 -1
- package/core/common-behaviors/error-state.d.ts +1 -1
- package/core/common-behaviors/tabindex.d.ts +1 -1
- package/core/datetime/date-formats.d.ts +1 -1
- package/core/formatters/index.d.ts +1 -1
- package/core/formatters/number/formatter.d.ts +55 -0
- package/core/label/label-options.d.ts +1 -1
- package/core/locales/en-US.d.ts +13 -2
- package/core/locales/es-LA.d.ts +21 -0
- package/core/locales/fa-IR.d.ts +22 -0
- package/core/locales/locale-service.d.ts +111 -5
- package/core/locales/pt-BR.d.ts +21 -0
- package/core/locales/ru-RU.d.ts +13 -2
- package/core/locales/zh-CN.d.ts +20 -0
- package/core/option/action.d.ts +1 -1
- package/core/option/optgroup.d.ts +1 -1
- package/core/option/option.d.ts +37 -8
- package/core/overlay/overlay-position-map.d.ts +7 -1
- package/core/selection/pseudo-checkbox/pseudo-checkbox.d.ts +2 -2
- package/core/styles/_variables.scss +1 -0
- package/core/styles/theming/_theming.scss +1 -0
- package/datepicker/calendar-body.component.d.ts +2 -2
- package/datepicker/calendar-header.component.d.ts +9 -3
- package/datepicker/calendar.component.d.ts +4 -5
- package/datepicker/datepicker-input.directive.d.ts +1 -1
- package/datepicker/datepicker-toggle.component.d.ts +1 -1
- package/datepicker/datepicker.component.d.ts +1 -1
- package/datepicker/month-view.component.d.ts +4 -5
- package/divider/divider.component.d.ts +1 -1
- package/dl/dl.component.d.ts +1 -1
- package/dropdown/dropdown-item.component.d.ts +1 -1
- package/dropdown/dropdown-trigger.directive.d.ts +1 -1
- package/dropdown/dropdown.component.d.ts +1 -1
- package/dropdown/dropdown.types.d.ts +3 -3
- package/ellipsis-center/ellipsis-center.directive.d.ts +1 -1
- package/{esm2020 → esm2022}/autocomplete/autocomplete-origin.directive.mjs +4 -4
- package/esm2022/autocomplete/autocomplete-trigger.directive.mjs +555 -0
- package/{esm2020 → esm2022}/autocomplete/autocomplete.component.mjs +26 -26
- package/{esm2020 → esm2022}/autocomplete/autocomplete.module.mjs +10 -10
- package/esm2022/button/button.component.mjs +148 -0
- package/{esm2020 → esm2022}/button/button.module.mjs +13 -13
- package/esm2022/button-toggle/button-toggle.component.mjs +381 -0
- package/{esm2020 → esm2022}/button-toggle/button-toggle.module.mjs +5 -5
- package/esm2022/card/card.component.mjs +80 -0
- package/{esm2020 → esm2022}/card/card.module.mjs +9 -9
- package/{esm2020 → esm2022}/checkbox/checkbox-module.mjs +5 -5
- package/{esm2020 → esm2022}/checkbox/checkbox-required-validator.mjs +4 -4
- package/esm2022/checkbox/checkbox.mjs +300 -0
- package/{esm2020 → esm2022}/code-block/actionbar.component.mjs +4 -4
- package/esm2022/code-block/code-block.component.mjs +157 -0
- package/esm2022/code-block/code-block.module.mjs +60 -0
- package/esm2022/core/common-behaviors/color.mjs +33 -0
- package/{esm2020 → esm2022}/core/common-behaviors/common-module.mjs +5 -5
- package/{esm2020 → esm2022}/core/common-behaviors/disabled.mjs +6 -6
- package/{esm2020 → esm2022}/core/common-behaviors/tabindex.mjs +6 -6
- package/{esm2020 → esm2022}/core/error/error-options.mjs +7 -7
- package/{esm2020 → esm2022}/core/formatters/date/formatter.mjs +4 -4
- package/{esm2020 → esm2022}/core/formatters/date/formatter.pipe.mjs +40 -40
- package/esm2022/core/formatters/index.mjs +86 -0
- package/esm2022/core/formatters/number/formatter.mjs +350 -0
- package/{esm2020 → esm2022}/core/forms/forms-module.mjs +7 -7
- package/{esm2020 → esm2022}/core/forms/forms.directive.mjs +7 -7
- package/{esm2020 → esm2022}/core/highlight/highlight.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/core/highlight/index.mjs +5 -5
- package/{esm2020 → esm2022}/core/line/line.mjs +8 -8
- package/esm2022/core/locales/en-US.mjs +21 -0
- package/esm2022/core/locales/es-LA.mjs +27 -0
- package/esm2022/core/locales/fa-IR.mjs +28 -0
- package/{esm2020 → esm2022}/core/locales/locale-service.mjs +7 -7
- package/{esm2020 → esm2022}/core/locales/locale-service.module.mjs +7 -7
- package/esm2022/core/locales/pt-BR.mjs +27 -0
- package/esm2022/core/locales/ru-RU.mjs +21 -0
- package/esm2022/core/locales/zh-CN.mjs +26 -0
- package/{esm2020 → esm2022}/core/option/action.mjs +9 -9
- package/{esm2020 → esm2022}/core/option/optgroup.mjs +4 -4
- package/{esm2020 → esm2022}/core/option/option-module.mjs +5 -5
- package/esm2022/core/option/option.mjs +298 -0
- package/esm2022/core/overlay/overlay-position-map.mjs +251 -0
- package/{esm2020 → esm2022}/core/pop-up/pop-up-trigger.mjs +4 -4
- package/{esm2020 → esm2022}/core/pop-up/pop-up.mjs +4 -4
- package/{esm2020 → esm2022}/core/selection/pseudo-checkbox/pseudo-checkbox.mjs +4 -4
- package/{esm2020 → esm2022}/core/selection/pseudo-checkbox/pseudo-checkbox.module.mjs +5 -5
- package/esm2022/core/services/measure-scrollbar.service.mjs +48 -0
- package/{esm2020 → esm2022}/core/utils/data-size/data-size.pipe.mjs +8 -8
- package/{esm2020 → esm2022}/core/version.mjs +2 -2
- package/{esm2020 → esm2022}/datepicker/calendar-body.component.mjs +4 -4
- package/esm2022/datepicker/calendar-header.component.mjs +135 -0
- package/esm2022/datepicker/calendar.component.mjs +166 -0
- package/esm2022/datepicker/datepicker-input.directive.mjs +955 -0
- package/{esm2020 → esm2022}/datepicker/datepicker-intl.mjs +4 -4
- package/{esm2020 → esm2022}/datepicker/datepicker-module.mjs +38 -38
- package/esm2022/datepicker/datepicker-toggle.component.mjs +86 -0
- package/esm2022/datepicker/datepicker.component.mjs +393 -0
- package/esm2022/datepicker/month-view.component.mjs +149 -0
- package/{esm2020 → esm2022}/divider/divider.component.mjs +4 -4
- package/{esm2020 → esm2022}/divider/divider.module.mjs +5 -5
- package/{esm2020 → esm2022}/dl/dl.component.mjs +10 -10
- package/{esm2020 → esm2022}/dl/dl.module.mjs +13 -13
- package/{esm2020 → esm2022}/dropdown/dropdown-content.directive.mjs +4 -4
- package/{esm2020 → esm2022}/dropdown/dropdown-item.component.mjs +6 -6
- package/esm2022/dropdown/dropdown-trigger.directive.mjs +489 -0
- package/esm2022/dropdown/dropdown.component.mjs +292 -0
- package/{esm2020 → esm2022}/dropdown/dropdown.module.mjs +15 -15
- package/esm2022/ellipsis-center/ellipsis-center.directive.mjs +106 -0
- package/{esm2020 → esm2022}/file-upload/file-drop.mjs +4 -4
- package/{esm2020 → esm2022}/file-upload/file-upload.module.mjs +25 -25
- package/esm2022/file-upload/multiple-file-upload.component.mjs +165 -0
- package/esm2022/file-upload/single-file-upload.component.mjs +134 -0
- package/{esm2020 → esm2022}/form-field/cleaner.mjs +4 -4
- package/esm2022/form-field/form-field.mjs +267 -0
- package/{esm2020 → esm2022}/form-field/form-field.module.mjs +23 -23
- package/{esm2020 → esm2022}/form-field/hint.mjs +4 -4
- package/{esm2020 → esm2022}/form-field/password-hint.mjs +9 -9
- package/{esm2020 → esm2022}/form-field/prefix.mjs +4 -4
- package/{esm2020 → esm2022}/form-field/stepper.mjs +6 -6
- package/{esm2020 → esm2022}/form-field/suffix.mjs +4 -4
- package/esm2022/form-field/validate.directive.mjs +158 -0
- package/{esm2020 → esm2022}/icon/icon.component.mjs +7 -7
- package/{esm2020 → esm2022}/icon/icon.module.mjs +11 -11
- package/{esm2020 → esm2022}/input/input-number-validators.mjs +7 -7
- package/esm2022/input/input-number.mjs +168 -0
- package/esm2022/input/input-password.mjs +343 -0
- package/esm2022/input/input.mjs +297 -0
- package/{esm2020 → esm2022}/input/input.module.mjs +23 -23
- package/esm2022/link/link.component.mjs +122 -0
- package/{esm2020 → esm2022}/link/link.module.mjs +7 -7
- package/esm2022/list/list-selection.component.mjs +705 -0
- package/{esm2020 → esm2022}/list/list.component.mjs +7 -7
- package/{esm2020 → esm2022}/list/list.module.mjs +20 -20
- package/esm2022/loader-overlay/loader-overlay.component.mjs +103 -0
- package/{esm2020 → esm2022}/loader-overlay/loader-overlay.module.mjs +17 -17
- package/{esm2020 → esm2022}/markdown/markdown.component.mjs +13 -13
- package/{esm2020 → esm2022}/markdown/markdown.module.mjs +5 -5
- package/{esm2020 → esm2022}/markdown/markdown.service.mjs +4 -4
- package/{esm2020 → esm2022}/modal/css-unit.pipe.mjs +4 -4
- package/esm2022/modal/modal-control.service.mjs +85 -0
- package/esm2022/modal/modal.component.mjs +520 -0
- package/{esm2020 → esm2022}/modal/modal.directive.mjs +13 -13
- package/esm2022/modal/modal.module.mjs +75 -0
- package/{esm2020 → esm2022}/modal/modal.service.mjs +8 -8
- package/esm2022/navbar/navbar-item.component.mjs +606 -0
- package/esm2022/navbar/navbar.component.mjs +248 -0
- package/{esm2020 → esm2022}/navbar/navbar.module.mjs +37 -37
- package/{esm2020 → esm2022}/navbar/vertical-navbar.component.mjs +20 -17
- package/esm2022/popover/popover-confirm.component.mjs +108 -0
- package/esm2022/popover/popover.component.mjs +266 -0
- package/{esm2020 → esm2022}/popover/popover.module.mjs +8 -8
- package/{esm2020 → esm2022}/progress-bar/progress-bar.component.mjs +4 -4
- package/{esm2020 → esm2022}/progress-bar/progress-bar.module.mjs +7 -7
- package/{esm2020 → esm2022}/progress-spinner/progress-spinner.component.mjs +12 -12
- package/{esm2020 → esm2022}/progress-spinner/progress-spinner.module.mjs +7 -7
- package/esm2022/radio/radio.component.mjs +457 -0
- package/{esm2020 → esm2022}/radio/radio.module.mjs +5 -5
- package/esm2022/select/select-option.directive.mjs +65 -0
- package/esm2022/select/select.component.mjs +1160 -0
- package/{esm2020 → esm2022}/select/select.module.mjs +32 -32
- package/esm2022/sidebar/sidebar.component.mjs +146 -0
- package/{esm2020 → esm2022}/sidebar/sidebar.module.mjs +9 -9
- package/esm2022/sidepanel/sidepanel-container.component.mjs +110 -0
- package/{esm2020 → esm2022}/sidepanel/sidepanel-directives.mjs +18 -18
- package/{esm2020 → esm2022}/sidepanel/sidepanel.module.mjs +32 -32
- package/{esm2020 → esm2022}/sidepanel/sidepanel.service.mjs +10 -10
- package/esm2022/splitter/splitter.component.mjs +482 -0
- package/{esm2020 → esm2022}/splitter/splitter.module.mjs +12 -12
- package/{esm2020 → esm2022}/table/table.component.mjs +4 -4
- package/{esm2020 → esm2022}/table/table.module.mjs +9 -9
- package/esm2022/tabs/paginated-tab-header.mjs +488 -0
- package/esm2022/tabs/tab-body.component.mjs +179 -0
- package/{esm2020 → esm2022}/tabs/tab-content.directive.mjs +4 -4
- package/esm2022/tabs/tab-group.component.mjs +349 -0
- package/{esm2020 → esm2022}/tabs/tab-header.component.mjs +4 -4
- package/{esm2020 → esm2022}/tabs/tab-label-wrapper.directive.mjs +4 -4
- package/{esm2020 → esm2022}/tabs/tab-label.directive.mjs +4 -4
- package/esm2022/tabs/tab-nav-bar/tab-nav-bar.mjs +111 -0
- package/{esm2020 → esm2022}/tabs/tab.component.mjs +43 -34
- package/{esm2020 → esm2022}/tabs/tabs.module.mjs +42 -42
- package/esm2022/tags/tag-input.mjs +250 -0
- package/esm2022/tags/tag-list.component.mjs +718 -0
- package/esm2022/tags/tag.component.mjs +381 -0
- package/esm2022/tags/tag.module.mjs +56 -0
- package/esm2022/textarea/textarea.component.mjs +254 -0
- package/{esm2020 → esm2022}/textarea/textarea.module.mjs +5 -5
- package/esm2022/timepicker/timepicker.directive.mjs +647 -0
- package/{esm2020 → esm2022}/timepicker/timepicker.module.mjs +11 -11
- package/{esm2020 → esm2022}/timezone/cities-by-filter.pipe.mjs +4 -4
- package/esm2022/timezone/timezone-option.component.mjs +48 -0
- package/{esm2020 → esm2022}/timezone/timezone-option.directive.mjs +4 -4
- package/{esm2020 → esm2022}/timezone/timezone-select.component.mjs +11 -11
- package/{esm2020 → esm2022}/timezone/timezone.module.mjs +29 -29
- package/{esm2020 → esm2022}/timezone/utc-offset.pipe.mjs +4 -4
- package/esm2022/title/title.directive.mjs +107 -0
- package/{esm2020 → esm2022}/title/title.module.mjs +5 -5
- package/{esm2020 → esm2022}/toast/toast-container.component.mjs +4 -4
- package/esm2022/toast/toast.component.mjs +92 -0
- package/esm2022/toast/toast.module.mjs +48 -0
- package/esm2022/toast/toast.service.mjs +188 -0
- package/esm2022/toggle/toggle.component.mjs +156 -0
- package/{esm2020 → esm2022}/toggle/toggle.module.mjs +5 -5
- package/esm2022/tooltip/tooltip.component.mjs +299 -0
- package/{esm2020 → esm2022}/tooltip/tooltip.module.mjs +14 -14
- package/esm2022/tree/data-source/flat-data-source.mjs +162 -0
- package/{esm2020 → esm2022}/tree/node.mjs +4 -4
- package/{esm2020 → esm2022}/tree/outlet.mjs +4 -4
- package/esm2022/tree/padding.directive.mjs +113 -0
- package/esm2022/tree/toggle.mjs +81 -0
- package/esm2022/tree/tree-base.mjs +243 -0
- package/esm2022/tree/tree-option.component.mjs +303 -0
- package/esm2022/tree/tree-selection.component.mjs +558 -0
- package/{esm2020 → esm2022}/tree/tree.mjs +4 -4
- package/{esm2020 → esm2022}/tree/tree.module.mjs +21 -21
- package/esm2022/tree-select/tree-select.component.mjs +936 -0
- package/{esm2020 → esm2022}/tree-select/tree-select.module.mjs +17 -17
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-autocomplete.mjs +80 -77
- package/fesm2022/ptsecurity-mosaic-autocomplete.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-button-toggle.mjs +47 -47
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-button-toggle.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-button.mjs +25 -25
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-button.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-card.mjs +17 -17
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-card.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-checkbox.mjs +39 -39
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-checkbox.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-code-block.mjs +34 -34
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-code-block.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-core.mjs +598 -222
- package/fesm2022/ptsecurity-mosaic-core.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-datepicker.mjs +335 -351
- package/fesm2022/ptsecurity-mosaic-datepicker.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-divider.mjs +7 -7
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-divider.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-dl.mjs +21 -21
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-dl.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-dropdown.mjs +89 -89
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-dropdown.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-ellipsis-center.mjs +11 -11
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-ellipsis-center.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-file-upload.mjs +55 -47
- package/fesm2022/ptsecurity-mosaic-file-upload.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-form-field.mjs +80 -80
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-form-field.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-icon.mjs +16 -16
- package/fesm2022/ptsecurity-mosaic-icon.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-input.mjs +128 -128
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-input.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-link.mjs +22 -22
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-link.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-list.mjs +86 -86
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-list.mjs.map +1 -1
- package/fesm2022/ptsecurity-mosaic-loader-overlay.mjs +155 -0
- package/{fesm2015 → fesm2022}/ptsecurity-mosaic-loader-overlay.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-markdown.mjs +19 -19
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-markdown.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-modal.mjs +157 -144
- package/fesm2022/ptsecurity-mosaic-modal.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-navbar.mjs +184 -176
- package/fesm2022/ptsecurity-mosaic-navbar.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-popover.mjs +37 -37
- package/{fesm2015 → fesm2022}/ptsecurity-mosaic-popover.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-progress-bar.mjs +9 -9
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-progress-bar.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-progress-spinner.mjs +18 -18
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-progress-spinner.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-radio.mjs +78 -78
- package/{fesm2015 → fesm2022}/ptsecurity-mosaic-radio.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-select.mjs +188 -174
- package/fesm2022/ptsecurity-mosaic-select.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-sidebar.mjs +29 -29
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-sidebar.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-sidepanel.mjs +63 -63
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-sidepanel.mjs.map +1 -1
- package/{fesm2015 → fesm2022}/ptsecurity-mosaic-splitter.mjs +55 -55
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-splitter.mjs.map +1 -1
- package/fesm2022/ptsecurity-mosaic-table.mjs +45 -0
- package/fesm2022/ptsecurity-mosaic-table.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-tabs.mjs +188 -179
- package/fesm2022/ptsecurity-mosaic-tabs.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-tags.mjs +131 -131
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-tags.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-textarea.mjs +41 -41
- package/{fesm2015 → fesm2022}/ptsecurity-mosaic-textarea.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-timepicker.mjs +95 -95
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-timepicker.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-timezone.mjs +53 -53
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-timezone.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-title.mjs +18 -18
- package/fesm2022/ptsecurity-mosaic-title.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-toast.mjs +47 -41
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-toast.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-toggle.mjs +35 -35
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-toggle.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-tooltip.mjs +47 -47
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-tooltip.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-tree-select.mjs +122 -122
- package/fesm2022/ptsecurity-mosaic-tree-select.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/ptsecurity-mosaic-tree.mjs +202 -198
- package/fesm2022/ptsecurity-mosaic-tree.mjs.map +1 -0
- package/file-upload/file-upload.d.ts +1 -1
- package/file-upload/multiple-file-upload.component.d.ts +5 -4
- package/file-upload/single-file-upload.component.d.ts +5 -4
- package/form-field/_form-field-theme.scss +4 -0
- package/form-field/form-field.d.ts +1 -1
- package/form-field/hint.d.ts +1 -1
- package/form-field/password-hint.d.ts +1 -1
- package/icon/icon.component.d.ts +1 -1
- package/input/input-number-validators.d.ts +2 -2
- package/input/input-number.d.ts +1 -1
- package/input/input-password.d.ts +2 -2
- package/input/input.d.ts +1 -1
- package/link/link.component.d.ts +1 -1
- package/list/list-selection.component.d.ts +2 -2
- package/loader-overlay/loader-overlay.component.d.ts +1 -1
- package/loader-overlay/loader-overlay.scss +3 -0
- package/markdown/markdown.component.d.ts +1 -1
- package/modal/modal.component.d.ts +5 -2
- package/modal/modal.module.d.ts +2 -1
- package/modal/modal.scss +14 -2
- package/modal/modal.type.d.ts +3 -3
- package/navbar/navbar-item.component.d.ts +3 -3
- package/navbar/navbar.component.d.ts +7 -4
- package/navbar/vertical-navbar.component.d.ts +5 -3
- package/package.json +149 -239
- package/popover/popover-confirm.component.d.ts +1 -1
- package/popover/popover.component.d.ts +1 -1
- package/prebuilt-themes/dark-theme.css +1 -1
- package/prebuilt-themes/default-theme.css +1 -1
- package/prebuilt-visual/default-visual.css +1 -1
- package/progress-bar/progress-bar.component.d.ts +2 -2
- package/progress-spinner/progress-spinner.component.d.ts +3 -3
- package/radio/_radio-theme.scss +4 -0
- package/radio/radio.component.d.ts +2 -2
- package/select/select.component.d.ts +12 -9
- package/select/select.scss +1 -1
- package/sidebar/sidebar.component.d.ts +3 -3
- package/sidepanel/sidepanel-directives.d.ts +2 -2
- package/splitter/splitter.component.d.ts +3 -3
- package/tabs/paginated-tab-header.d.ts +3 -3
- package/tabs/tab-body.component.d.ts +3 -3
- package/tabs/tab-group.component.d.ts +2 -2
- package/tabs/tab-header.component.d.ts +2 -2
- package/tabs/tab-label-wrapper.directive.d.ts +1 -1
- package/tabs/tab-nav-bar/tab-nav-bar.d.ts +1 -1
- package/tabs/tab.component.d.ts +1 -1
- package/tags/tag-input.d.ts +1 -1
- package/tags/tag-list.component.d.ts +1 -1
- package/tags/tag.component.d.ts +1 -1
- package/textarea/textarea.component.d.ts +1 -1
- package/timepicker/timepicker.directive.d.ts +1 -1
- package/timezone/timezone-option.component.d.ts +1 -1
- package/toast/toast.type.d.ts +1 -1
- package/toggle/toggle.component.d.ts +2 -2
- package/tooltip/tooltip.component.d.ts +3 -3
- package/tree/node.d.ts +1 -1
- package/tree/padding.directive.d.ts +1 -1
- package/tree/toggle.d.ts +2 -2
- package/tree/tree-base.d.ts +1 -1
- package/tree/tree-option.component.d.ts +1 -1
- package/tree/tree-option.scss +4 -2
- package/tree/tree-selection.component.d.ts +1 -1
- package/tree-select/tree-select.component.d.ts +1 -1
- package/esm2020/autocomplete/autocomplete-trigger.directive.mjs +0 -552
- package/esm2020/button/button.component.mjs +0 -148
- package/esm2020/button-toggle/button-toggle.component.mjs +0 -381
- package/esm2020/card/card.component.mjs +0 -80
- package/esm2020/checkbox/checkbox.mjs +0 -300
- package/esm2020/code-block/code-block.component.mjs +0 -157
- package/esm2020/code-block/code-block.module.mjs +0 -60
- package/esm2020/core/common-behaviors/color.mjs +0 -33
- package/esm2020/core/formatters/index.mjs +0 -78
- package/esm2020/core/formatters/number/formatter.mjs +0 -129
- package/esm2020/core/locales/en-US.mjs +0 -10
- package/esm2020/core/locales/es-LA.mjs +0 -6
- package/esm2020/core/locales/fa-IR.mjs +0 -6
- package/esm2020/core/locales/pt-BR.mjs +0 -6
- package/esm2020/core/locales/ru-RU.mjs +0 -10
- package/esm2020/core/locales/zh-CN.mjs +0 -6
- package/esm2020/core/option/option.mjs +0 -262
- package/esm2020/core/overlay/overlay-position-map.mjs +0 -245
- package/esm2020/core/services/measure-scrollbar.service.mjs +0 -48
- package/esm2020/datepicker/calendar-header.component.mjs +0 -134
- package/esm2020/datepicker/calendar.component.mjs +0 -175
- package/esm2020/datepicker/datepicker-input.directive.mjs +0 -954
- package/esm2020/datepicker/datepicker-toggle.component.mjs +0 -86
- package/esm2020/datepicker/datepicker.component.mjs +0 -393
- package/esm2020/datepicker/month-view.component.mjs +0 -158
- package/esm2020/dropdown/dropdown-trigger.directive.mjs +0 -489
- package/esm2020/dropdown/dropdown.component.mjs +0 -292
- package/esm2020/ellipsis-center/ellipsis-center.directive.mjs +0 -106
- package/esm2020/file-upload/multiple-file-upload.component.mjs +0 -161
- package/esm2020/file-upload/single-file-upload.component.mjs +0 -130
- package/esm2020/form-field/form-field.mjs +0 -267
- package/esm2020/form-field/validate.directive.mjs +0 -158
- package/esm2020/input/input-number.mjs +0 -168
- package/esm2020/input/input-password.mjs +0 -343
- package/esm2020/input/input.mjs +0 -297
- package/esm2020/link/link.component.mjs +0 -122
- package/esm2020/list/list-selection.component.mjs +0 -705
- package/esm2020/loader-overlay/loader-overlay.component.mjs +0 -103
- package/esm2020/modal/modal-control.service.mjs +0 -85
- package/esm2020/modal/modal.component.mjs +0 -510
- package/esm2020/modal/modal.module.mjs +0 -71
- package/esm2020/navbar/navbar-item.component.mjs +0 -606
- package/esm2020/navbar/navbar.component.mjs +0 -239
- package/esm2020/popover/popover-confirm.component.mjs +0 -108
- package/esm2020/popover/popover.component.mjs +0 -266
- package/esm2020/radio/radio.component.mjs +0 -457
- package/esm2020/select/select-option.directive.mjs +0 -65
- package/esm2020/select/select.component.mjs +0 -1146
- package/esm2020/sidebar/sidebar.component.mjs +0 -146
- package/esm2020/sidepanel/sidepanel-container.component.mjs +0 -110
- package/esm2020/splitter/splitter.component.mjs +0 -482
- package/esm2020/tabs/paginated-tab-header.mjs +0 -488
- package/esm2020/tabs/tab-body.component.mjs +0 -179
- package/esm2020/tabs/tab-group.component.mjs +0 -349
- package/esm2020/tabs/tab-nav-bar/tab-nav-bar.mjs +0 -111
- package/esm2020/tags/tag-input.mjs +0 -250
- package/esm2020/tags/tag-list.component.mjs +0 -718
- package/esm2020/tags/tag.component.mjs +0 -381
- package/esm2020/tags/tag.module.mjs +0 -56
- package/esm2020/textarea/textarea.component.mjs +0 -254
- package/esm2020/timepicker/timepicker.directive.mjs +0 -647
- package/esm2020/timezone/timezone-option.component.mjs +0 -48
- package/esm2020/title/title.directive.mjs +0 -107
- package/esm2020/toast/toast.component.mjs +0 -92
- package/esm2020/toast/toast.module.mjs +0 -42
- package/esm2020/toast/toast.service.mjs +0 -188
- package/esm2020/toggle/toggle.component.mjs +0 -156
- package/esm2020/tooltip/tooltip.component.mjs +0 -299
- package/esm2020/tree/data-source/flat-data-source.mjs +0 -162
- package/esm2020/tree/padding.directive.mjs +0 -113
- package/esm2020/tree/toggle.mjs +0 -81
- package/esm2020/tree/tree-base.mjs +0 -243
- package/esm2020/tree/tree-option.component.mjs +0 -300
- package/esm2020/tree/tree-selection.component.mjs +0 -557
- package/esm2020/tree-select/tree-select.component.mjs +0 -936
- package/fesm2015/ptsecurity-mosaic-autocomplete.mjs +0 -753
- package/fesm2015/ptsecurity-mosaic-autocomplete.mjs.map +0 -1
- package/fesm2015/ptsecurity-mosaic-button-toggle.mjs +0 -405
- package/fesm2015/ptsecurity-mosaic-button-toggle.mjs.map +0 -1
- package/fesm2015/ptsecurity-mosaic-button.mjs +0 -193
- package/fesm2015/ptsecurity-mosaic-button.mjs.map +0 -1
- package/fesm2015/ptsecurity-mosaic-card.mjs +0 -111
- package/fesm2015/ptsecurity-mosaic-card.mjs.map +0 -1
- package/fesm2015/ptsecurity-mosaic-checkbox.mjs +0 -351
- package/fesm2015/ptsecurity-mosaic-checkbox.mjs.map +0 -1
- package/fesm2015/ptsecurity-mosaic-code-block.mjs +0 -280
- package/fesm2015/ptsecurity-mosaic-code-block.mjs.map +0 -1
- package/fesm2015/ptsecurity-mosaic-core.mjs +0 -2314
- package/fesm2015/ptsecurity-mosaic-core.mjs.map +0 -1
- package/fesm2015/ptsecurity-mosaic-datepicker.mjs +0 -2112
- package/fesm2015/ptsecurity-mosaic-datepicker.mjs.map +0 -1
- package/fesm2015/ptsecurity-mosaic-divider.mjs +0 -61
- package/fesm2015/ptsecurity-mosaic-divider.mjs.map +0 -1
- package/fesm2015/ptsecurity-mosaic-dl.mjs +0 -126
- package/fesm2015/ptsecurity-mosaic-dl.mjs.map +0 -1
- package/fesm2015/ptsecurity-mosaic-dropdown.mjs +0 -1115
- package/fesm2015/ptsecurity-mosaic-dropdown.mjs.map +0 -1
- package/fesm2015/ptsecurity-mosaic-ellipsis-center.mjs +0 -113
- package/fesm2015/ptsecurity-mosaic-ellipsis-center.mjs.map +0 -1
- package/fesm2015/ptsecurity-mosaic-file-upload.mjs +0 -392
- package/fesm2015/ptsecurity-mosaic-file-upload.mjs.map +0 -1
- package/fesm2015/ptsecurity-mosaic-form-field.mjs +0 -772
- package/fesm2015/ptsecurity-mosaic-form-field.mjs.map +0 -1
- package/fesm2015/ptsecurity-mosaic-icon.mjs +0 -86
- package/fesm2015/ptsecurity-mosaic-icon.mjs.map +0 -1
- package/fesm2015/ptsecurity-mosaic-input.mjs +0 -951
- package/fesm2015/ptsecurity-mosaic-input.mjs.map +0 -1
- package/fesm2015/ptsecurity-mosaic-link.mjs +0 -150
- package/fesm2015/ptsecurity-mosaic-link.mjs.map +0 -1
- package/fesm2015/ptsecurity-mosaic-list.mjs +0 -807
- package/fesm2015/ptsecurity-mosaic-list.mjs.map +0 -1
- package/fesm2015/ptsecurity-mosaic-loader-overlay.mjs +0 -157
- package/fesm2015/ptsecurity-mosaic-markdown.mjs +0 -128
- package/fesm2015/ptsecurity-mosaic-markdown.mjs.map +0 -1
- package/fesm2015/ptsecurity-mosaic-modal.mjs +0 -875
- package/fesm2015/ptsecurity-mosaic-modal.mjs.map +0 -1
- package/fesm2015/ptsecurity-mosaic-navbar.mjs +0 -1055
- package/fesm2015/ptsecurity-mosaic-navbar.mjs.map +0 -1
- package/fesm2015/ptsecurity-mosaic-popover.mjs +0 -411
- package/fesm2015/ptsecurity-mosaic-progress-bar.mjs +0 -74
- package/fesm2015/ptsecurity-mosaic-progress-bar.mjs.map +0 -1
- package/fesm2015/ptsecurity-mosaic-progress-spinner.mjs +0 -93
- package/fesm2015/ptsecurity-mosaic-progress-spinner.mjs.map +0 -1
- package/fesm2015/ptsecurity-mosaic-radio.mjs +0 -481
- package/fesm2015/ptsecurity-mosaic-select.mjs +0 -1286
- package/fesm2015/ptsecurity-mosaic-select.mjs.map +0 -1
- package/fesm2015/ptsecurity-mosaic-sidebar.mjs +0 -202
- package/fesm2015/ptsecurity-mosaic-sidebar.mjs.map +0 -1
- package/fesm2015/ptsecurity-mosaic-sidepanel.mjs +0 -622
- package/fesm2015/ptsecurity-mosaic-sidepanel.mjs.map +0 -1
- package/fesm2015/ptsecurity-mosaic-splitter.mjs.map +0 -1
- package/fesm2015/ptsecurity-mosaic-table.mjs +0 -45
- package/fesm2015/ptsecurity-mosaic-table.mjs.map +0 -1
- package/fesm2015/ptsecurity-mosaic-tabs.mjs +0 -1523
- package/fesm2015/ptsecurity-mosaic-tabs.mjs.map +0 -1
- package/fesm2015/ptsecurity-mosaic-tags.mjs +0 -1397
- package/fesm2015/ptsecurity-mosaic-tags.mjs.map +0 -1
- package/fesm2015/ptsecurity-mosaic-textarea.mjs +0 -280
- package/fesm2015/ptsecurity-mosaic-timepicker.mjs +0 -708
- package/fesm2015/ptsecurity-mosaic-timepicker.mjs.map +0 -1
- package/fesm2015/ptsecurity-mosaic-timezone.mjs +0 -316
- package/fesm2015/ptsecurity-mosaic-timezone.mjs.map +0 -1
- package/fesm2015/ptsecurity-mosaic-title.mjs +0 -128
- package/fesm2015/ptsecurity-mosaic-title.mjs.map +0 -1
- package/fesm2015/ptsecurity-mosaic-toast.mjs +0 -379
- package/fesm2015/ptsecurity-mosaic-toast.mjs.map +0 -1
- package/fesm2015/ptsecurity-mosaic-toggle.mjs +0 -178
- package/fesm2015/ptsecurity-mosaic-toggle.mjs.map +0 -1
- package/fesm2015/ptsecurity-mosaic-tooltip.mjs +0 -369
- package/fesm2015/ptsecurity-mosaic-tooltip.mjs.map +0 -1
- package/fesm2015/ptsecurity-mosaic-tree-select.mjs +0 -983
- package/fesm2015/ptsecurity-mosaic-tree-select.mjs.map +0 -1
- package/fesm2015/ptsecurity-mosaic-tree.mjs +0 -1816
- package/fesm2015/ptsecurity-mosaic-tree.mjs.map +0 -1
- package/fesm2020/ptsecurity-mosaic-autocomplete.mjs.map +0 -1
- package/fesm2020/ptsecurity-mosaic-core.mjs.map +0 -1
- package/fesm2020/ptsecurity-mosaic-datepicker.mjs.map +0 -1
- package/fesm2020/ptsecurity-mosaic-file-upload.mjs.map +0 -1
- package/fesm2020/ptsecurity-mosaic-icon.mjs.map +0 -1
- package/fesm2020/ptsecurity-mosaic-loader-overlay.mjs +0 -155
- package/fesm2020/ptsecurity-mosaic-loader-overlay.mjs.map +0 -1
- package/fesm2020/ptsecurity-mosaic-modal.mjs.map +0 -1
- package/fesm2020/ptsecurity-mosaic-navbar.mjs.map +0 -1
- package/fesm2020/ptsecurity-mosaic-popover.mjs.map +0 -1
- package/fesm2020/ptsecurity-mosaic-radio.mjs.map +0 -1
- package/fesm2020/ptsecurity-mosaic-select.mjs.map +0 -1
- package/fesm2020/ptsecurity-mosaic-splitter.mjs +0 -524
- package/fesm2020/ptsecurity-mosaic-table.mjs +0 -45
- package/fesm2020/ptsecurity-mosaic-table.mjs.map +0 -1
- package/fesm2020/ptsecurity-mosaic-tabs.mjs.map +0 -1
- package/fesm2020/ptsecurity-mosaic-textarea.mjs.map +0 -1
- package/fesm2020/ptsecurity-mosaic-title.mjs.map +0 -1
- package/fesm2020/ptsecurity-mosaic-tree-select.mjs.map +0 -1
- package/fesm2020/ptsecurity-mosaic-tree.mjs.map +0 -1
- package/fesm2020/ptsecurity-mosaic.mjs +0 -4
- package/fesm2020/ptsecurity-mosaic.mjs.map +0 -1
- /package/{esm2020 → esm2022}/autocomplete/index.mjs +0 -0
- /package/{esm2020 → esm2022}/autocomplete/ptsecurity-mosaic-autocomplete.mjs +0 -0
- /package/{esm2020 → esm2022}/autocomplete/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/button/index.mjs +0 -0
- /package/{esm2020 → esm2022}/button/ptsecurity-mosaic-button.mjs +0 -0
- /package/{esm2020 → esm2022}/button/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/button-toggle/index.mjs +0 -0
- /package/{esm2020 → esm2022}/button-toggle/ptsecurity-mosaic-button-toggle.mjs +0 -0
- /package/{esm2020 → esm2022}/button-toggle/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/card/index.mjs +0 -0
- /package/{esm2020 → esm2022}/card/ptsecurity-mosaic-card.mjs +0 -0
- /package/{esm2020 → esm2022}/card/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/checkbox/checkbox-config.mjs +0 -0
- /package/{esm2020 → esm2022}/checkbox/index.mjs +0 -0
- /package/{esm2020 → esm2022}/checkbox/ptsecurity-mosaic-checkbox.mjs +0 -0
- /package/{esm2020 → esm2022}/checkbox/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/code-block/code-block.types.mjs +0 -0
- /package/{esm2020 → esm2022}/code-block/index.mjs +0 -0
- /package/{esm2020 → esm2022}/code-block/ptsecurity-mosaic-code-block.mjs +0 -0
- /package/{esm2020 → esm2022}/code-block/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/core/animation/animation.mjs +0 -0
- /package/{esm2020 → esm2022}/core/animation/fade-animations.mjs +0 -0
- /package/{esm2020 → esm2022}/core/animation/index.mjs +0 -0
- /package/{esm2020 → esm2022}/core/animation/select-animations.mjs +0 -0
- /package/{esm2020 → esm2022}/core/common-behaviors/constructor.mjs +0 -0
- /package/{esm2020 → esm2022}/core/common-behaviors/error-state.mjs +0 -0
- /package/{esm2020 → esm2022}/core/common-behaviors/index.mjs +0 -0
- /package/{esm2020 → esm2022}/core/datetime/date-adapter.mjs +0 -0
- /package/{esm2020 → esm2022}/core/datetime/date-formats.mjs +0 -0
- /package/{esm2020 → esm2022}/core/datetime/index.mjs +0 -0
- /package/{esm2020 → esm2022}/core/forms/index.mjs +0 -0
- /package/{esm2020 → esm2022}/core/index.mjs +0 -0
- /package/{esm2020 → esm2022}/core/label/label-options.mjs +0 -0
- /package/{esm2020 → esm2022}/core/locales/index.mjs +0 -0
- /package/{esm2020 → esm2022}/core/option/index.mjs +0 -0
- /package/{esm2020 → esm2022}/core/pop-up/constants.mjs +0 -0
- /package/{esm2020 → esm2022}/core/pop-up/index.mjs +0 -0
- /package/{esm2020 → esm2022}/core/ptsecurity-mosaic-core.mjs +0 -0
- /package/{esm2020 → esm2022}/core/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/core/select/constants.mjs +0 -0
- /package/{esm2020 → esm2022}/core/select/errors.mjs +0 -0
- /package/{esm2020 → esm2022}/core/select/events.mjs +0 -0
- /package/{esm2020 → esm2022}/core/select/index.mjs +0 -0
- /package/{esm2020 → esm2022}/core/selection/constants.mjs +0 -0
- /package/{esm2020 → esm2022}/core/selection/index.mjs +0 -0
- /package/{esm2020 → esm2022}/core/title/index.mjs +0 -0
- /package/{esm2020 → esm2022}/core/title/title-text-ref.mjs +0 -0
- /package/{esm2020 → esm2022}/core/utils/data-size/config.mjs +0 -0
- /package/{esm2020 → esm2022}/core/utils/data-size/index.mjs +0 -0
- /package/{esm2020 → esm2022}/core/utils/data-size/size.mjs +0 -0
- /package/{esm2020 → esm2022}/core/utils/index.mjs +0 -0
- /package/{esm2020 → esm2022}/core/utils/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/core/utils/utils.mjs +0 -0
- /package/{esm2020 → esm2022}/core/validation/index.mjs +0 -0
- /package/{esm2020 → esm2022}/core/validation/validation.mjs +0 -0
- /package/{esm2020 → esm2022}/datepicker/datepicker-animations.mjs +0 -0
- /package/{esm2020 → esm2022}/datepicker/datepicker-errors.mjs +0 -0
- /package/{esm2020 → esm2022}/datepicker/index.mjs +0 -0
- /package/{esm2020 → esm2022}/datepicker/ptsecurity-mosaic-datepicker.mjs +0 -0
- /package/{esm2020 → esm2022}/datepicker/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/divider/index.mjs +0 -0
- /package/{esm2020 → esm2022}/divider/ptsecurity-mosaic-divider.mjs +0 -0
- /package/{esm2020 → esm2022}/divider/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/dl/index.mjs +0 -0
- /package/{esm2020 → esm2022}/dl/ptsecurity-mosaic-dl.mjs +0 -0
- /package/{esm2020 → esm2022}/dl/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/dropdown/dropdown-animations.mjs +0 -0
- /package/{esm2020 → esm2022}/dropdown/dropdown-errors.mjs +0 -0
- /package/{esm2020 → esm2022}/dropdown/dropdown.types.mjs +0 -0
- /package/{esm2020 → esm2022}/dropdown/index.mjs +0 -0
- /package/{esm2020 → esm2022}/dropdown/ptsecurity-mosaic-dropdown.mjs +0 -0
- /package/{esm2020 → esm2022}/dropdown/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/ellipsis-center/index.mjs +0 -0
- /package/{esm2020 → esm2022}/ellipsis-center/ptsecurity-mosaic-ellipsis-center.mjs +0 -0
- /package/{esm2020 → esm2022}/ellipsis-center/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/file-upload/file-upload.mjs +0 -0
- /package/{esm2020 → esm2022}/file-upload/index.mjs +0 -0
- /package/{esm2020 → esm2022}/file-upload/ptsecurity-mosaic-file-upload.mjs +0 -0
- /package/{esm2020 → esm2022}/file-upload/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/form-field/form-field-control.mjs +0 -0
- /package/{esm2020 → esm2022}/form-field/form-field-errors.mjs +0 -0
- /package/{esm2020 → esm2022}/form-field/index.mjs +0 -0
- /package/{esm2020 → esm2022}/form-field/ptsecurity-mosaic-form-field.mjs +0 -0
- /package/{esm2020 → esm2022}/form-field/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/icon/index.mjs +0 -0
- /package/{esm2020 → esm2022}/icon/ptsecurity-mosaic-icon.mjs +0 -0
- /package/{esm2020 → esm2022}/icon/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/index.mjs +0 -0
- /package/{esm2020 → esm2022}/input/index.mjs +0 -0
- /package/{esm2020 → esm2022}/input/input-errors.mjs +0 -0
- /package/{esm2020 → esm2022}/input/input-value-accessor.mjs +0 -0
- /package/{esm2020 → esm2022}/input/ptsecurity-mosaic-input.mjs +0 -0
- /package/{esm2020 → esm2022}/input/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/link/index.mjs +0 -0
- /package/{esm2020 → esm2022}/link/ptsecurity-mosaic-link.mjs +0 -0
- /package/{esm2020 → esm2022}/link/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/list/index.mjs +0 -0
- /package/{esm2020 → esm2022}/list/ptsecurity-mosaic-list.mjs +0 -0
- /package/{esm2020 → esm2022}/list/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/loader-overlay/index.mjs +0 -0
- /package/{esm2020 → esm2022}/loader-overlay/ptsecurity-mosaic-loader-overlay.mjs +0 -0
- /package/{esm2020 → esm2022}/loader-overlay/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/markdown/index.mjs +0 -0
- /package/{esm2020 → esm2022}/markdown/markdown.values.mjs +0 -0
- /package/{esm2020 → esm2022}/markdown/ptsecurity-mosaic-markdown.mjs +0 -0
- /package/{esm2020 → esm2022}/markdown/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/modal/index.mjs +0 -0
- /package/{esm2020 → esm2022}/modal/modal-ref.class.mjs +0 -0
- /package/{esm2020 → esm2022}/modal/modal-util.mjs +0 -0
- /package/{esm2020 → esm2022}/modal/modal.type.mjs +0 -0
- /package/{esm2020 → esm2022}/modal/ptsecurity-mosaic-modal.mjs +0 -0
- /package/{esm2020 → esm2022}/modal/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/navbar/index.mjs +0 -0
- /package/{esm2020 → esm2022}/navbar/ptsecurity-mosaic-navbar.mjs +0 -0
- /package/{esm2020 → esm2022}/navbar/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/navbar/vertical-navbar.animation.mjs +0 -0
- /package/{esm2020 → esm2022}/popover/index.mjs +0 -0
- /package/{esm2020 → esm2022}/popover/popover-animations.mjs +0 -0
- /package/{esm2020 → esm2022}/popover/ptsecurity-mosaic-popover.mjs +0 -0
- /package/{esm2020 → esm2022}/popover/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/progress-bar/index.mjs +0 -0
- /package/{esm2020 → esm2022}/progress-bar/ptsecurity-mosaic-progress-bar.mjs +0 -0
- /package/{esm2020 → esm2022}/progress-bar/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/progress-spinner/index.mjs +0 -0
- /package/{esm2020 → esm2022}/progress-spinner/ptsecurity-mosaic-progress-spinner.mjs +0 -0
- /package/{esm2020 → esm2022}/progress-spinner/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/ptsecurity-mosaic.mjs +0 -0
- /package/{esm2020 → esm2022}/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/radio/index.mjs +0 -0
- /package/{esm2020 → esm2022}/radio/ptsecurity-mosaic-radio.mjs +0 -0
- /package/{esm2020 → esm2022}/radio/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/select/index.mjs +0 -0
- /package/{esm2020 → esm2022}/select/ptsecurity-mosaic-select.mjs +0 -0
- /package/{esm2020 → esm2022}/select/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/sidebar/index.mjs +0 -0
- /package/{esm2020 → esm2022}/sidebar/ptsecurity-mosaic-sidebar.mjs +0 -0
- /package/{esm2020 → esm2022}/sidebar/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/sidebar/sidebar-animations.mjs +0 -0
- /package/{esm2020 → esm2022}/sidepanel/index.mjs +0 -0
- /package/{esm2020 → esm2022}/sidepanel/ptsecurity-mosaic-sidepanel.mjs +0 -0
- /package/{esm2020 → esm2022}/sidepanel/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/sidepanel/sidepanel-animations.mjs +0 -0
- /package/{esm2020 → esm2022}/sidepanel/sidepanel-config.mjs +0 -0
- /package/{esm2020 → esm2022}/sidepanel/sidepanel-ref.mjs +0 -0
- /package/{esm2020 → esm2022}/splitter/index.mjs +0 -0
- /package/{esm2020 → esm2022}/splitter/ptsecurity-mosaic-splitter.mjs +0 -0
- /package/{esm2020 → esm2022}/splitter/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/table/index.mjs +0 -0
- /package/{esm2020 → esm2022}/table/ptsecurity-mosaic-table.mjs +0 -0
- /package/{esm2020 → esm2022}/table/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/tabs/index.mjs +0 -0
- /package/{esm2020 → esm2022}/tabs/ptsecurity-mosaic-tabs.mjs +0 -0
- /package/{esm2020 → esm2022}/tabs/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/tabs/tab-nav-bar/index.mjs +0 -0
- /package/{esm2020 → esm2022}/tabs/tabs-animations.mjs +0 -0
- /package/{esm2020 → esm2022}/tags/index.mjs +0 -0
- /package/{esm2020 → esm2022}/tags/ptsecurity-mosaic-tags.mjs +0 -0
- /package/{esm2020 → esm2022}/tags/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/tags/tag-default-options.mjs +0 -0
- /package/{esm2020 → esm2022}/tags/tag-text-control.mjs +0 -0
- /package/{esm2020 → esm2022}/textarea/index.mjs +0 -0
- /package/{esm2020 → esm2022}/textarea/ptsecurity-mosaic-textarea.mjs +0 -0
- /package/{esm2020 → esm2022}/textarea/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/timepicker/index.mjs +0 -0
- /package/{esm2020 → esm2022}/timepicker/ptsecurity-mosaic-timepicker.mjs +0 -0
- /package/{esm2020 → esm2022}/timepicker/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/timepicker/timepicker.constants.mjs +0 -0
- /package/{esm2020 → esm2022}/timezone/index.mjs +0 -0
- /package/{esm2020 → esm2022}/timezone/ptsecurity-mosaic-timezone.mjs +0 -0
- /package/{esm2020 → esm2022}/timezone/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/timezone/timezone.models.mjs +0 -0
- /package/{esm2020 → esm2022}/timezone/timezone.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/title/index.mjs +0 -0
- /package/{esm2020 → esm2022}/title/ptsecurity-mosaic-title.mjs +0 -0
- /package/{esm2020 → esm2022}/title/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/toast/index.mjs +0 -0
- /package/{esm2020 → esm2022}/toast/ptsecurity-mosaic-toast.mjs +0 -0
- /package/{esm2020 → esm2022}/toast/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/toast/toast-animations.mjs +0 -0
- /package/{esm2020 → esm2022}/toast/toast.type.mjs +0 -0
- /package/{esm2020 → esm2022}/toggle/index.mjs +0 -0
- /package/{esm2020 → esm2022}/toggle/ptsecurity-mosaic-toggle.mjs +0 -0
- /package/{esm2020 → esm2022}/toggle/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/tooltip/index.mjs +0 -0
- /package/{esm2020 → esm2022}/tooltip/ptsecurity-mosaic-tooltip.mjs +0 -0
- /package/{esm2020 → esm2022}/tooltip/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/tooltip/tooltip.animations.mjs +0 -0
- /package/{esm2020 → esm2022}/tree/control/base-tree-control.mjs +0 -0
- /package/{esm2020 → esm2022}/tree/control/flat-tree-control.mjs +0 -0
- /package/{esm2020 → esm2022}/tree/control/nested-tree-control.mjs +0 -0
- /package/{esm2020 → esm2022}/tree/control/tree-control.mjs +0 -0
- /package/{esm2020 → esm2022}/tree/data-source/nested-data-source.mjs +0 -0
- /package/{esm2020 → esm2022}/tree/index.mjs +0 -0
- /package/{esm2020 → esm2022}/tree/ptsecurity-mosaic-tree.mjs +0 -0
- /package/{esm2020 → esm2022}/tree/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/tree/tree-errors.mjs +0 -0
- /package/{esm2020 → esm2022}/tree-select/index.mjs +0 -0
- /package/{esm2020 → esm2022}/tree-select/ptsecurity-mosaic-tree-select.mjs +0 -0
- /package/{esm2020 → esm2022}/tree-select/public-api.mjs +0 -0
- /package/{fesm2015 → fesm2022}/ptsecurity-mosaic.mjs +0 -0
- /package/{fesm2015 → fesm2022}/ptsecurity-mosaic.mjs.map +0 -0
@@ -0,0 +1,520 @@
|
|
1
|
+
import { FocusMonitor } from '@angular/cdk/a11y';
|
2
|
+
import { Overlay, OverlayRef } from '@angular/cdk/overlay';
|
3
|
+
import { DOCUMENT } from '@angular/common';
|
4
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ComponentFactoryResolver, ElementRef, EventEmitter, Inject, Injector, Input, Output, QueryList, Renderer2, TemplateRef, Type, ViewChild, ViewChildren, ViewContainerRef, ViewEncapsulation } from '@angular/core';
|
5
|
+
import { ESCAPE, ENTER } from '@ptsecurity/cdk/keycodes';
|
6
|
+
import { ThemePalette } from '@ptsecurity/mosaic/core';
|
7
|
+
import { take } from 'rxjs/operators';
|
8
|
+
import { McModalControlService } from './modal-control.service';
|
9
|
+
import { McModalRef } from './modal-ref.class';
|
10
|
+
import { modalUtilObject as ModalUtil } from './modal-util';
|
11
|
+
import { ModalSize } from './modal.type';
|
12
|
+
import * as i0 from "@angular/core";
|
13
|
+
import * as i1 from "@angular/cdk/overlay";
|
14
|
+
import * as i2 from "./modal-control.service";
|
15
|
+
import * as i3 from "@angular/cdk/a11y";
|
16
|
+
import * as i4 from "@angular/common";
|
17
|
+
import * as i5 from "@ptsecurity/mosaic/button";
|
18
|
+
import * as i6 from "@ptsecurity/mosaic/icon";
|
19
|
+
import * as i7 from "@ptsecurity/mosaic/title";
|
20
|
+
import * as i8 from "./css-unit.pipe";
|
21
|
+
// Duration when perform animations (ms)
|
22
|
+
export const MODAL_ANIMATE_DURATION = 200;
|
23
|
+
export class McModalComponent extends McModalRef {
|
24
|
+
get mcVisible() { return this._mcVisible; }
|
25
|
+
set mcVisible(value) { this._mcVisible = value; }
|
26
|
+
get mcClosable() { return this._mcClosable; }
|
27
|
+
set mcClosable(value) { this._mcClosable = value; }
|
28
|
+
get mcMask() { return this._mcMask; }
|
29
|
+
set mcMask(value) { this._mcMask = value; }
|
30
|
+
get mcMaskClosable() { return this._mcMaskClosable; }
|
31
|
+
set mcMaskClosable(value) { this._mcMaskClosable = value; }
|
32
|
+
get mcOkLoading() { return this._mcOkLoading; }
|
33
|
+
set mcOkLoading(value) { this._mcOkLoading = value; }
|
34
|
+
get mcCancelLoading() { return this._mcCancelLoading; }
|
35
|
+
set mcCancelLoading(value) { this._mcCancelLoading = value; }
|
36
|
+
// Observable alias for mcAfterOpen
|
37
|
+
get afterOpen() {
|
38
|
+
return this.mcAfterOpen.asObservable();
|
39
|
+
}
|
40
|
+
// Observable alias for mcAfterClose
|
41
|
+
get afterClose() {
|
42
|
+
return this.mcAfterClose.asObservable();
|
43
|
+
}
|
44
|
+
get okText() {
|
45
|
+
return this.mcOkText;
|
46
|
+
}
|
47
|
+
get cancelText() {
|
48
|
+
return this.mcCancelText;
|
49
|
+
}
|
50
|
+
// Indicate whether this dialog should hidden
|
51
|
+
get hidden() {
|
52
|
+
return !this.mcVisible && !this.animationState;
|
53
|
+
}
|
54
|
+
constructor(overlay, renderer, cfr, elementRef, viewContainer, modalControl, changeDetector, focusMonitor, document) {
|
55
|
+
super();
|
56
|
+
this.overlay = overlay;
|
57
|
+
this.renderer = renderer;
|
58
|
+
this.cfr = cfr;
|
59
|
+
this.elementRef = elementRef;
|
60
|
+
this.viewContainer = viewContainer;
|
61
|
+
this.modalControl = modalControl;
|
62
|
+
this.changeDetector = changeDetector;
|
63
|
+
this.focusMonitor = focusMonitor;
|
64
|
+
this.document = document;
|
65
|
+
this.themePalette = ThemePalette;
|
66
|
+
this.mcModalType = 'default';
|
67
|
+
this._mcVisible = false;
|
68
|
+
this.mcVisibleChange = new EventEmitter();
|
69
|
+
this.mcZIndex = 1000;
|
70
|
+
this.mcSize = ModalSize.Medium;
|
71
|
+
this.mcCloseByESC = true;
|
72
|
+
this._mcClosable = true;
|
73
|
+
this._mcMask = true;
|
74
|
+
this._mcMaskClosable = false;
|
75
|
+
// Trigger when modal open(visible) after animations
|
76
|
+
this.mcAfterOpen = new EventEmitter();
|
77
|
+
// Trigger when modal leave-animation over
|
78
|
+
this.mcAfterClose = new EventEmitter();
|
79
|
+
this.mcOkType = 'primary';
|
80
|
+
this.mcRestoreFocus = true;
|
81
|
+
this._mcOkLoading = false;
|
82
|
+
this.mcOnOk = new EventEmitter();
|
83
|
+
this._mcCancelLoading = false;
|
84
|
+
this.mcOnCancel = new EventEmitter();
|
85
|
+
this.isTopOverflow = false;
|
86
|
+
this.isBottomOverflow = false;
|
87
|
+
// The origin point that animation based on
|
88
|
+
this.transformOrigin = '0px 0px 0px';
|
89
|
+
this.mcGetContainer = () => this.overlay.create();
|
90
|
+
}
|
91
|
+
ngOnInit() {
|
92
|
+
// Create component along without View
|
93
|
+
if (this.isComponent(this.mcContent)) {
|
94
|
+
this.createDynamicComponent(this.mcContent);
|
95
|
+
}
|
96
|
+
// Setup default button options
|
97
|
+
if (this.isModalButtons(this.mcFooter)) {
|
98
|
+
this.mcFooter = this.formatModalButtons(this.mcFooter);
|
99
|
+
}
|
100
|
+
if (this.isComponent(this.mcComponent)) {
|
101
|
+
this.createDynamicComponent(this.mcComponent);
|
102
|
+
}
|
103
|
+
// Place the modal dom to elsewhere
|
104
|
+
this.container = typeof this.mcGetContainer === 'function' ? this.mcGetContainer() : this.mcGetContainer;
|
105
|
+
if (this.container instanceof HTMLElement) {
|
106
|
+
this.container.appendChild(this.elementRef.nativeElement);
|
107
|
+
}
|
108
|
+
else if (this.container instanceof OverlayRef) {
|
109
|
+
// NOTE: only attach the dom to overlay, the view container is not changed actually
|
110
|
+
this.container.overlayElement.appendChild(this.elementRef.nativeElement);
|
111
|
+
}
|
112
|
+
// Register modal when afterOpen/afterClose is stable
|
113
|
+
this.modalControl.registerModal(this);
|
114
|
+
}
|
115
|
+
// [NOTE] NOT available when using by service!
|
116
|
+
// Because ngOnChanges never be called when using by service,
|
117
|
+
// here we can't support "mcContent"(Component) etc. as inputs that initialized dynamically.
|
118
|
+
// BUT: User also can change "mcContent" dynamically to trigger UI changes
|
119
|
+
// (provided you don't use Component that needs initializations)
|
120
|
+
ngOnChanges(changes) {
|
121
|
+
if (changes.mcVisible) {
|
122
|
+
// Do not trigger animation while initializing
|
123
|
+
this.handleVisibleStateChange(this.mcVisible, !changes.mcVisible.firstChange);
|
124
|
+
}
|
125
|
+
}
|
126
|
+
ngAfterViewInit() {
|
127
|
+
// If using Component, it is the time to attach View while bodyContainer is ready
|
128
|
+
if (this.contentComponentRef) {
|
129
|
+
this.bodyContainer.insert(this.contentComponentRef.hostView);
|
130
|
+
}
|
131
|
+
this.getElement().getElementsByTagName('button')[0]?.focus();
|
132
|
+
for (const autoFocusedButton of this.autoFocusedButtons.toArray()) {
|
133
|
+
if (autoFocusedButton.nativeElement.autofocus) {
|
134
|
+
autoFocusedButton.nativeElement.focus();
|
135
|
+
break;
|
136
|
+
}
|
137
|
+
}
|
138
|
+
this.checkOverflow();
|
139
|
+
}
|
140
|
+
ngOnDestroy() {
|
141
|
+
if (this.container instanceof OverlayRef) {
|
142
|
+
this.container.dispose();
|
143
|
+
}
|
144
|
+
}
|
145
|
+
checkOverflow() {
|
146
|
+
const nativeElement = this.modalBody?.nativeElement;
|
147
|
+
if (!nativeElement) {
|
148
|
+
return;
|
149
|
+
}
|
150
|
+
const scrollTop = nativeElement.scrollTop;
|
151
|
+
const offsetHeight = nativeElement.offsetHeight;
|
152
|
+
const scrollHeight = nativeElement.scrollHeight;
|
153
|
+
this.isTopOverflow = scrollTop > 0;
|
154
|
+
this.isBottomOverflow = scrollTop + offsetHeight < scrollHeight;
|
155
|
+
}
|
156
|
+
open() {
|
157
|
+
this.focusedElementBeforeOpen = this.document.activeElement;
|
158
|
+
this.focusMonitor.monitor(this.modalContainer, true)
|
159
|
+
.pipe(take(1))
|
160
|
+
.subscribe((origin) => {
|
161
|
+
this.previouslyFocusedElementOrigin = origin;
|
162
|
+
this.focusMonitor.stopMonitoring(this.modalContainer);
|
163
|
+
});
|
164
|
+
this.changeVisibleFromInside(true);
|
165
|
+
}
|
166
|
+
close(result) {
|
167
|
+
this.changeVisibleFromInside(false, result).then(() => {
|
168
|
+
if (this.mcRestoreFocus && this.focusedElementBeforeOpen) {
|
169
|
+
this.focusMonitor.focusVia(this.focusedElementBeforeOpen, this.previouslyFocusedElementOrigin);
|
170
|
+
this.focusedElementBeforeOpen = null;
|
171
|
+
}
|
172
|
+
});
|
173
|
+
}
|
174
|
+
// Destroy equals Close
|
175
|
+
destroy(result) {
|
176
|
+
this.close(result);
|
177
|
+
}
|
178
|
+
markForCheck() {
|
179
|
+
this.changeDetector.markForCheck();
|
180
|
+
}
|
181
|
+
triggerOk() {
|
182
|
+
this.onClickOkCancel('ok');
|
183
|
+
}
|
184
|
+
triggerCancel() {
|
185
|
+
this.onClickOkCancel('cancel');
|
186
|
+
}
|
187
|
+
getInstance() {
|
188
|
+
return this;
|
189
|
+
}
|
190
|
+
getContentComponentRef() {
|
191
|
+
return this.contentComponentRef;
|
192
|
+
}
|
193
|
+
getContentComponent() {
|
194
|
+
return this.contentComponentRef && this.contentComponentRef.instance;
|
195
|
+
}
|
196
|
+
getElement() {
|
197
|
+
return this.elementRef && this.elementRef.nativeElement;
|
198
|
+
}
|
199
|
+
getMcFooter() {
|
200
|
+
return this.getElement().getElementsByClassName('mc-modal-footer').item(0);
|
201
|
+
}
|
202
|
+
onClickMask($event) {
|
203
|
+
if (this.mcMask &&
|
204
|
+
this.mcMaskClosable &&
|
205
|
+
$event.target.classList.contains('mc-modal-wrap') &&
|
206
|
+
this.mcVisible) {
|
207
|
+
this.onClickOkCancel('cancel');
|
208
|
+
}
|
209
|
+
}
|
210
|
+
// tslint:disable-next-line: no-reserved-keywords
|
211
|
+
isModalType(type) {
|
212
|
+
return this.mcModalType === type;
|
213
|
+
}
|
214
|
+
onKeyDown(event) {
|
215
|
+
// tslint:disable-next-line:deprecation .key isn't supported in Edge
|
216
|
+
if (event.keyCode === ESCAPE && this.container && (this.container instanceof OverlayRef)) {
|
217
|
+
this.close();
|
218
|
+
event.preventDefault();
|
219
|
+
}
|
220
|
+
// tslint:disable-next-line:deprecation .key isn't supported in Edge
|
221
|
+
if (event.ctrlKey && event.keyCode === ENTER) {
|
222
|
+
if (this.mcModalType === 'confirm') {
|
223
|
+
this.triggerOk();
|
224
|
+
}
|
225
|
+
this.getElement().querySelector('[mc-modal-main-action]')?.click();
|
226
|
+
event.preventDefault();
|
227
|
+
}
|
228
|
+
}
|
229
|
+
// AoT
|
230
|
+
onClickCloseBtn() {
|
231
|
+
if (this.mcVisible) {
|
232
|
+
this.onClickOkCancel('cancel');
|
233
|
+
}
|
234
|
+
}
|
235
|
+
// AoT
|
236
|
+
// tslint:disable-next-line: no-reserved-keywords
|
237
|
+
onClickOkCancel(type) {
|
238
|
+
const trigger = { ok: this.mcOnOk, cancel: this.mcOnCancel }[type];
|
239
|
+
const loadingKey = { ok: 'mcOkLoading', cancel: 'mcCancelLoading' }[type];
|
240
|
+
if (trigger instanceof EventEmitter) {
|
241
|
+
trigger.emit(this.getContentComponent());
|
242
|
+
}
|
243
|
+
else if (typeof trigger === 'function') {
|
244
|
+
const result = trigger(this.getContentComponent());
|
245
|
+
// Users can return "false" to prevent closing by default
|
246
|
+
const caseClose = (doClose) => (doClose !== false) && this.close(doClose);
|
247
|
+
if (isPromise(result)) {
|
248
|
+
this[loadingKey] = true;
|
249
|
+
const handleThen = (doClose) => {
|
250
|
+
this[loadingKey] = false;
|
251
|
+
caseClose(doClose);
|
252
|
+
};
|
253
|
+
result.then(handleThen).catch(handleThen);
|
254
|
+
}
|
255
|
+
else {
|
256
|
+
caseClose(result);
|
257
|
+
}
|
258
|
+
}
|
259
|
+
}
|
260
|
+
// AoT
|
261
|
+
isNonEmptyString(value) {
|
262
|
+
return typeof value === 'string' && value !== '';
|
263
|
+
}
|
264
|
+
// AoT
|
265
|
+
isTemplateRef(value) {
|
266
|
+
return value instanceof TemplateRef;
|
267
|
+
}
|
268
|
+
// AoT
|
269
|
+
isComponent(value) {
|
270
|
+
return value instanceof Type;
|
271
|
+
}
|
272
|
+
// AoT
|
273
|
+
isModalButtons(value) {
|
274
|
+
return Array.isArray(value) && value.length > 0;
|
275
|
+
}
|
276
|
+
// Lookup a button's property, if the prop is a function, call & then return the result, otherwise, return itself.
|
277
|
+
// AoT
|
278
|
+
getButtonCallableProp(options, prop) {
|
279
|
+
const value = options[prop];
|
280
|
+
const args = [];
|
281
|
+
if (this.contentComponentRef) {
|
282
|
+
args.push(this.contentComponentRef.instance);
|
283
|
+
}
|
284
|
+
return typeof value === 'function' ? value.apply(options, args) : value;
|
285
|
+
}
|
286
|
+
// On mcFooter's modal button click
|
287
|
+
// AoT
|
288
|
+
onButtonClick(button) {
|
289
|
+
// Call onClick directly
|
290
|
+
// tslint:disable-next-line:no-inferred-empty-object-type rule seems to be broken
|
291
|
+
const result = this.getButtonCallableProp(button, 'onClick');
|
292
|
+
if (isPromise(result)) {
|
293
|
+
button.loading = true;
|
294
|
+
result.then(() => button.loading = false).catch(() => button.loading = false);
|
295
|
+
}
|
296
|
+
}
|
297
|
+
// Do rest things when visible state changed
|
298
|
+
handleVisibleStateChange(visible, animation = true, closeResult) {
|
299
|
+
// Hide scrollbar at the first time when shown up
|
300
|
+
if (visible) {
|
301
|
+
this.changeBodyOverflow(1);
|
302
|
+
}
|
303
|
+
return Promise
|
304
|
+
.resolve(animation && this.animateTo(visible))
|
305
|
+
// Emit open/close event after animations over
|
306
|
+
.then(() => {
|
307
|
+
if (visible) {
|
308
|
+
this.mcAfterOpen.emit();
|
309
|
+
}
|
310
|
+
else {
|
311
|
+
this.mcAfterClose.emit(closeResult);
|
312
|
+
// Show/hide scrollbar when animation is over
|
313
|
+
this.changeBodyOverflow();
|
314
|
+
}
|
315
|
+
});
|
316
|
+
}
|
317
|
+
// Change mcVisible from inside
|
318
|
+
changeVisibleFromInside(visible, closeResult) {
|
319
|
+
if (this.mcVisible !== visible) {
|
320
|
+
// Change mcVisible value immediately
|
321
|
+
this.mcVisible = visible;
|
322
|
+
this.mcVisibleChange.emit(visible);
|
323
|
+
return this.handleVisibleStateChange(visible, true, closeResult);
|
324
|
+
}
|
325
|
+
return Promise.resolve();
|
326
|
+
}
|
327
|
+
changeAnimationState(state) {
|
328
|
+
this.animationState = state;
|
329
|
+
if (state) {
|
330
|
+
this.maskAnimationClassMap = {
|
331
|
+
[`fade-${state}`]: true,
|
332
|
+
[`fade-${state}-active`]: true
|
333
|
+
};
|
334
|
+
this.modalAnimationClassMap = {
|
335
|
+
[`zoom-${state}`]: true,
|
336
|
+
[`zoom-${state}-active`]: true
|
337
|
+
};
|
338
|
+
}
|
339
|
+
else {
|
340
|
+
// @ts-ignore
|
341
|
+
this.maskAnimationClassMap = this.modalAnimationClassMap = null;
|
342
|
+
}
|
343
|
+
if (this.contentComponentRef) {
|
344
|
+
this.contentComponentRef.changeDetectorRef.markForCheck();
|
345
|
+
}
|
346
|
+
else {
|
347
|
+
this.changeDetector.markForCheck();
|
348
|
+
}
|
349
|
+
}
|
350
|
+
animateTo(isVisible) {
|
351
|
+
// Figure out the lastest click position when shows up
|
352
|
+
if (isVisible) {
|
353
|
+
// [NOTE] Using timeout due to the document.click event is fired later than visible change,
|
354
|
+
// so if not postponed to next event-loop, we can't get the lastest click position
|
355
|
+
window.setTimeout(() => this.updateTransformOrigin());
|
356
|
+
}
|
357
|
+
this.changeAnimationState(isVisible ? 'enter' : 'leave');
|
358
|
+
// Return when animation is over
|
359
|
+
return new Promise((resolve) => {
|
360
|
+
return window.setTimeout(() => {
|
361
|
+
this.changeAnimationState(null);
|
362
|
+
resolve(null);
|
363
|
+
}, MODAL_ANIMATE_DURATION);
|
364
|
+
});
|
365
|
+
}
|
366
|
+
formatModalButtons(buttons) {
|
367
|
+
return buttons.map((button) => {
|
368
|
+
return {
|
369
|
+
...{
|
370
|
+
type: 'default',
|
371
|
+
size: 'default',
|
372
|
+
autoLoading: true,
|
373
|
+
show: true,
|
374
|
+
loading: false,
|
375
|
+
disabled: false
|
376
|
+
},
|
377
|
+
...button
|
378
|
+
};
|
379
|
+
});
|
380
|
+
}
|
381
|
+
/**
|
382
|
+
* Create a component dynamically but not attach to any View
|
383
|
+
* (this action will be executed when bodyContainer is ready)
|
384
|
+
* @param component Component class
|
385
|
+
*/
|
386
|
+
createDynamicComponent(component) {
|
387
|
+
const factory = this.cfr.resolveComponentFactory(component);
|
388
|
+
const childInjector = Injector.create({
|
389
|
+
providers: [{ provide: McModalRef, useValue: this }],
|
390
|
+
parent: this.viewContainer.injector
|
391
|
+
});
|
392
|
+
this.contentComponentRef = factory.create(childInjector);
|
393
|
+
if (this.mcComponentParams) {
|
394
|
+
// @ts-ignore
|
395
|
+
Object.assign(this.contentComponentRef.instance, this.mcComponentParams);
|
396
|
+
}
|
397
|
+
// Do the first change detection immediately
|
398
|
+
// (or we do detection at ngAfterViewInit, multi-changes error will be thrown)
|
399
|
+
this.contentComponentRef.changeDetectorRef.detectChanges();
|
400
|
+
}
|
401
|
+
// Update transform-origin to the last click position on document
|
402
|
+
updateTransformOrigin() {
|
403
|
+
const modalElement = this.modalContainer.nativeElement;
|
404
|
+
const lastPosition = ModalUtil.getLastClickPosition();
|
405
|
+
if (lastPosition) {
|
406
|
+
this.transformOrigin = `${lastPosition.x - modalElement.offsetLeft}px ${lastPosition.y - modalElement.offsetTop}px 0px`;
|
407
|
+
}
|
408
|
+
}
|
409
|
+
/**
|
410
|
+
* Take care of the body's overflow to decide the existense of scrollbar
|
411
|
+
* @param plusNum The number that the openModals.length will increase soon
|
412
|
+
*/
|
413
|
+
changeBodyOverflow(plusNum = 0) {
|
414
|
+
const openModals = this.modalControl.openModals;
|
415
|
+
if (openModals.length + plusNum > 0) {
|
416
|
+
this.renderer.setStyle(this.document.body, 'overflow', 'hidden');
|
417
|
+
}
|
418
|
+
else {
|
419
|
+
this.renderer.removeStyle(this.document.body, 'overflow');
|
420
|
+
}
|
421
|
+
}
|
422
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.5", ngImport: i0, type: McModalComponent, deps: [{ token: i1.Overlay }, { token: i0.Renderer2 }, { token: i0.ComponentFactoryResolver }, { token: i0.ElementRef }, { token: i0.ViewContainerRef }, { token: i2.McModalControlService }, { token: i0.ChangeDetectorRef }, { token: i3.FocusMonitor }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component }); }
|
423
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.5", type: McModalComponent, selector: "mc-modal", inputs: { mcModalType: "mcModalType", mcComponent: "mcComponent", mcContent: "mcContent", mcComponentParams: "mcComponentParams", mcFooter: "mcFooter", mcVisible: "mcVisible", mcZIndex: "mcZIndex", mcWidth: "mcWidth", mcSize: "mcSize", mcWrapClassName: "mcWrapClassName", mcClassName: "mcClassName", mcStyle: "mcStyle", mcTitle: "mcTitle", mcCloseByESC: "mcCloseByESC", mcClosable: "mcClosable", mcMask: "mcMask", mcMaskClosable: "mcMaskClosable", mcMaskStyle: "mcMaskStyle", mcBodyStyle: "mcBodyStyle", mcOkText: "mcOkText", mcOkType: "mcOkType", mcRestoreFocus: "mcRestoreFocus", mcOkLoading: "mcOkLoading", mcOnOk: "mcOnOk", mcCancelText: "mcCancelText", mcCancelLoading: "mcCancelLoading", mcOnCancel: "mcOnCancel", mcGetContainer: "mcGetContainer" }, outputs: { mcVisibleChange: "mcVisibleChange", mcAfterOpen: "mcAfterOpen", mcAfterClose: "mcAfterClose", mcOnOk: "mcOnOk", mcOnCancel: "mcOnCancel" }, host: { listeners: { "keydown": "onKeyDown($event)" } }, viewQueries: [{ propertyName: "modalContainer", first: true, predicate: ["modalContainer"], descendants: true, static: true }, { propertyName: "bodyContainer", first: true, predicate: ["bodyContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "modalBody", first: true, predicate: ["modalBody"], descendants: true }, { propertyName: "autoFocusedButtons", predicate: ["autoFocusedButton"], descendants: true, read: ElementRef }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<!-- Compatible: the <ng-content> can appear only once -->\n<ng-template #tplOriginContent>\n <ng-content></ng-content>\n</ng-template>\n\n<div>\n <div *ngIf=\"mcMask\"\n class=\"mc-modal-mask\"\n [ngClass]=\"maskAnimationClassMap\"\n [class.mc-modal-mask-hidden]=\"hidden\"\n [ngStyle]=\"mcMaskStyle\"\n [style.zIndex]=\"mcZIndex\"\n ></div>\n <div (mousedown)=\"onClickMask($event)\"\n class=\"mc-modal-wrap {{ mcWrapClassName }}\"\n [style.zIndex]=\"mcZIndex\"\n [style.display]=\"hidden ? 'none' : ''\"\n tabindex=\"-1\">\n\n <div #modalContainer\n class=\"mc-modal {{ mcClassName }} mc-modal_{{ mcSize }}\"\n [ngClass]=\"modalAnimationClassMap\"\n [ngStyle]=\"mcStyle\"\n [style.width]=\"mcWidth | toCssUnit\"\n [style.transform-origin]=\"transformOrigin\">\n\n <div class=\"mc-modal-content\" cdkTrapFocus>\n <button *ngIf=\"mcClosable\"\n mc-button\n (click)=\"onClickCloseBtn()\"\n class=\"mc-modal-close mc-button_transparent\">\n <i mc-icon=\"mc-close-L_16\" class=\"mc-icon mc-icon_light\" [color]=\"themePalette.Secondary\"></i>\n </button>\n <ng-container [ngSwitch]=\"true\">\n <ng-container *ngSwitchCase=\"isModalType('default')\"\n [ngTemplateOutlet]=\"tplContentDefault\"></ng-container>\n <ng-container *ngSwitchCase=\"isModalType('confirm')\"\n [ngTemplateOutlet]=\"tplContentConfirm\"></ng-container>\n <ng-container *ngSwitchCase=\"isModalType('custom')\"\n [ngTemplateOutlet]=\"tplContentCustom\"></ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #tplContentCustom>\n <ng-container #bodyContainer></ng-container>\n</ng-template>\n\n\n<!-- [Predefined] Default Modal Content -->\n<ng-template #tplContentDefault>\n <div *ngIf=\"mcTitle\"\n class=\"mc-modal-header\"\n [class.mc-modal-body_top-overflow]=\"isTopOverflow\"\n [class.mc-modal-header_closable]=\"mcClosable\"\n mc-title>\n <div class=\"mc-modal-title\" #mcTitleText>\n <ng-container [ngSwitch]=\"true\">\n <ng-container *ngSwitchCase=\"isTemplateRef(mcTitle)\" [ngTemplateOutlet]=\"$any(mcTitle)\"></ng-container>\n <ng-container *ngSwitchCase=\"isNonEmptyString(mcTitle)\">\n <div [innerHTML]=\"mcTitle\"></div>\n </ng-container>\n </ng-container>\n </div>\n </div>\n <div class=\"mc-modal-body mc-scrollbar\" #modalBody [ngStyle]=\"mcBodyStyle\" (scroll)=\"checkOverflow()\">\n <ng-container #bodyContainer>\n <ng-container *ngIf=\"!isComponent(mcContent)\" [ngSwitch]=\"true\">\n <ng-container *ngSwitchCase=\"isTemplateRef(mcContent)\" [ngTemplateOutlet]=\"$any(mcContent)\"></ng-container>\n <ng-container *ngSwitchCase=\"isNonEmptyString(mcContent)\">\n <div [innerHTML]=\"mcContent\"></div>\n </ng-container>\n <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"tplOriginContent\"></ng-container>\n </ng-container>\n </ng-container>\n </div>\n <div *ngIf=\"mcFooter || mcOkText || mcCancelText\" class=\"mc-modal-footer\" [class.mc-modal-body_bottom-overflow]=\"isBottomOverflow\">\n <ng-container [ngSwitch]=\"true\">\n <ng-container *ngSwitchCase=\"isTemplateRef(mcFooter)\" [ngTemplateOutlet]=\"$any(mcFooter)\"></ng-container>\n <ng-container *ngSwitchCase=\"isNonEmptyString(mcFooter)\">\n <div [innerHTML]=\"mcFooter\"></div>\n </ng-container>\n <ng-container *ngSwitchCase=\"isModalButtons(mcFooter)\">\n <ng-container *ngFor=\"let button of $any(mcFooter)\">\n <button\n mc-button\n #autoFocusedButton\n [attr.autofocus]=\"button.autoFocus\"\n [attr.mc-modal-main-action]=\"button.mcModalMainAction\"\n *ngIf=\"getButtonCallableProp(button, 'show')\"\n [disabled]=\"getButtonCallableProp(button, 'disabled')\"\n [class.mc-progress]=\"getButtonCallableProp(button, 'loading')\"\n (click)=\"onButtonClick(button)\"\n [color]=\"button.type\">\n {{ button.label }}\n </button>\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <button\n #autoFocusedButton\n [attr.autofocus]=\"true\"\n *ngIf=\"mcOkText\"\n mc-button\n [color]=\"themePalette.Primary\"\n (click)=\"onClickOkCancel('ok')\">\n\n {{ okText }}\n </button>\n <button *ngIf=\"mcCancelText\" mc-button (click)=\"onClickOkCancel('cancel')\">\n {{ cancelText }}\n </button>\n </ng-container>\n </ng-container>\n </div>\n</ng-template>\n<!-- /[Predefined] Default Modal Content -->\n\n<!-- [Predefined] Confirm Modal Content -->\n<ng-template #tplContentConfirm>\n <div class=\"mc-modal-body\" [ngStyle]=\"mcBodyStyle\">\n <div class=\"mc-confirm-body-wrapper\">\n <div class=\"mc-confirm-body\">\n <div class=\"mc-confirm-content\">\n <ng-container #bodyContainer>\n <ng-container *ngIf=\"!isComponent(mcContent)\" [ngSwitch]=\"true\">\n <ng-container *ngSwitchCase=\"isTemplateRef(mcContent)\"\n [ngTemplateOutlet]=\"$any(mcContent)\">\n </ng-container>\n <ng-container *ngSwitchCase=\"isNonEmptyString(mcContent)\">\n <div [innerHTML]=\"mcContent\"></div>\n </ng-container>\n <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"tplOriginContent\"></ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div> <!-- /.mc-confirm-body-wrapper -->\n </div>\n <div class=\"mc-confirm-btns\" *ngIf=\"mcOkText || mcCancelText\">\n <button\n mc-button\n #autoFocusedButton\n [color]=\"mcOkType\"\n [attr.autofocus]=\"true\"\n *ngIf=\"mcOkText\"\n (click)=\"onClickOkCancel('ok')\">\n\n {{ okText }}\n </button>\n\n <button mc-button [color]=\"themePalette.Secondary\" *ngIf=\"mcCancelText\" (click)=\"onClickOkCancel('cancel')\">\n {{ cancelText }}\n </button>\n </div>\n</ng-template>\n<!-- /[Predefined] Confirm Modal Content -->\n", styles: [".mc-confirm .mc-modal-header,.mc-confirm .mc-modal-close{display:none}.mc-confirm .mc-modal-body{padding:var(--mc-modal-confirm-size-padding, 24px)}.mc-confirm-body-wrapper{zoom:1}.mc-confirm-body-wrapper:before,.mc-confirm-body-wrapper:after{content:\"\";display:table}.mc-confirm-body-wrapper:after{clear:both}.mc-confirm-body .mc-confirm-title{display:block;overflow:auto}.mc-confirm .mc-confirm-btns{border-radius:var(--mc-modal-footer-size-border-radius, 0 0 4px 4px);text-align:right}.mc-confirm .mc-confirm-btns button+button,.mc-confirm .mc-confirm-btns button:only-child{margin:16px}.mc-modal{box-sizing:border-box;position:relative;top:var(--mc-modal-size-top, 48px);width:auto;margin:0 auto;list-style:none}.mc-modal.zoom-enter,.mc-modal.zoom-appear{animation-duration:.3s;transform:none;opacity:0}.mc-modal.mc-modal_small{width:var(--mc-modal-size-small, 400px)}.mc-modal.mc-modal_medium{width:var(--mc-modal-size-medium, 640px)}.mc-modal.mc-modal_large{width:var(--mc-modal-size-large, 960px)}.mc-modal .mc-modal-close{position:absolute;z-index:10;top:0;right:0;width:var(--mc-modal-size-close-width, 56px);height:var(--mc-modal-size-close-width, 56px)}.mc-modal-wrap{position:fixed;z-index:1000;inset:0;overflow:auto;-webkit-overflow-scrolling:touch;outline:0}.mc-modal-title{margin-top:8px;margin-bottom:8px;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}.mc-modal-content{position:relative;border-radius:var(--mc-modal-size-border-radius, 4px);background-clip:padding-box;background-color:#fff}.mc-modal-header{display:flex;align-items:center;min-height:var(--mc-modal-header-size-height, 56px);border-radius:var(--mc-modal-header-size-border-radius, 4px 4px 0 0);padding:var(--mc-modal-header-size-padding, 0 16px)}.mc-modal-header.mc-modal-header_closable{padding-right:calc(var(--mc-modal-size-close-width, 56px) + 8px)}.mc-modal-body{display:block;overflow-y:auto;max-height:var(--mc-modal-body-size-max-height, calc(100vh - 260px));padding:var(--mc-modal-body-size-padding, 16px 24px 24px);word-wrap:break-word}.mc-modal-footer{display:flex;align-items:center;justify-content:flex-end;height:var(--mc-modal-footer-size-height, 64px);border-radius:var(--mc-modal-footer-size-border-radius, 0 0 4px 4px);padding:var(--mc-modal-footer-size-padding, 0 16px)}.mc-modal-footer button+button{margin-left:16px;margin-bottom:0}.mc-modal-mask{position:fixed;z-index:1000;inset:0;height:100%}.mc-modal-mask.mc-modal-mask-hidden{display:none}.mc-modal-open{overflow:hidden}\n"], dependencies: [{ 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.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i3.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: i5.McButton, selector: "[mc-button]", inputs: ["color", "tabIndex", "disabled"] }, { kind: "directive", type: i5.McButtonCssStyler, selector: "[mc-button]" }, { kind: "component", type: i6.McIcon, selector: "[mc-icon]", inputs: ["color"] }, { kind: "directive", type: i6.McIconCSSStyler, selector: "[mc-icon]" }, { kind: "directive", type: i7.McTitleDirective, selector: "[mc-title]", exportAs: ["mcTitle"] }, { kind: "pipe", type: i8.CssUnitPipe, name: "toCssUnit" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
424
|
+
}
|
425
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.5", ngImport: i0, type: McModalComponent, decorators: [{
|
426
|
+
type: Component,
|
427
|
+
args: [{ selector: 'mc-modal', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
428
|
+
'(keydown)': 'onKeyDown($event)'
|
429
|
+
}, template: "<!-- Compatible: the <ng-content> can appear only once -->\n<ng-template #tplOriginContent>\n <ng-content></ng-content>\n</ng-template>\n\n<div>\n <div *ngIf=\"mcMask\"\n class=\"mc-modal-mask\"\n [ngClass]=\"maskAnimationClassMap\"\n [class.mc-modal-mask-hidden]=\"hidden\"\n [ngStyle]=\"mcMaskStyle\"\n [style.zIndex]=\"mcZIndex\"\n ></div>\n <div (mousedown)=\"onClickMask($event)\"\n class=\"mc-modal-wrap {{ mcWrapClassName }}\"\n [style.zIndex]=\"mcZIndex\"\n [style.display]=\"hidden ? 'none' : ''\"\n tabindex=\"-1\">\n\n <div #modalContainer\n class=\"mc-modal {{ mcClassName }} mc-modal_{{ mcSize }}\"\n [ngClass]=\"modalAnimationClassMap\"\n [ngStyle]=\"mcStyle\"\n [style.width]=\"mcWidth | toCssUnit\"\n [style.transform-origin]=\"transformOrigin\">\n\n <div class=\"mc-modal-content\" cdkTrapFocus>\n <button *ngIf=\"mcClosable\"\n mc-button\n (click)=\"onClickCloseBtn()\"\n class=\"mc-modal-close mc-button_transparent\">\n <i mc-icon=\"mc-close-L_16\" class=\"mc-icon mc-icon_light\" [color]=\"themePalette.Secondary\"></i>\n </button>\n <ng-container [ngSwitch]=\"true\">\n <ng-container *ngSwitchCase=\"isModalType('default')\"\n [ngTemplateOutlet]=\"tplContentDefault\"></ng-container>\n <ng-container *ngSwitchCase=\"isModalType('confirm')\"\n [ngTemplateOutlet]=\"tplContentConfirm\"></ng-container>\n <ng-container *ngSwitchCase=\"isModalType('custom')\"\n [ngTemplateOutlet]=\"tplContentCustom\"></ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #tplContentCustom>\n <ng-container #bodyContainer></ng-container>\n</ng-template>\n\n\n<!-- [Predefined] Default Modal Content -->\n<ng-template #tplContentDefault>\n <div *ngIf=\"mcTitle\"\n class=\"mc-modal-header\"\n [class.mc-modal-body_top-overflow]=\"isTopOverflow\"\n [class.mc-modal-header_closable]=\"mcClosable\"\n mc-title>\n <div class=\"mc-modal-title\" #mcTitleText>\n <ng-container [ngSwitch]=\"true\">\n <ng-container *ngSwitchCase=\"isTemplateRef(mcTitle)\" [ngTemplateOutlet]=\"$any(mcTitle)\"></ng-container>\n <ng-container *ngSwitchCase=\"isNonEmptyString(mcTitle)\">\n <div [innerHTML]=\"mcTitle\"></div>\n </ng-container>\n </ng-container>\n </div>\n </div>\n <div class=\"mc-modal-body mc-scrollbar\" #modalBody [ngStyle]=\"mcBodyStyle\" (scroll)=\"checkOverflow()\">\n <ng-container #bodyContainer>\n <ng-container *ngIf=\"!isComponent(mcContent)\" [ngSwitch]=\"true\">\n <ng-container *ngSwitchCase=\"isTemplateRef(mcContent)\" [ngTemplateOutlet]=\"$any(mcContent)\"></ng-container>\n <ng-container *ngSwitchCase=\"isNonEmptyString(mcContent)\">\n <div [innerHTML]=\"mcContent\"></div>\n </ng-container>\n <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"tplOriginContent\"></ng-container>\n </ng-container>\n </ng-container>\n </div>\n <div *ngIf=\"mcFooter || mcOkText || mcCancelText\" class=\"mc-modal-footer\" [class.mc-modal-body_bottom-overflow]=\"isBottomOverflow\">\n <ng-container [ngSwitch]=\"true\">\n <ng-container *ngSwitchCase=\"isTemplateRef(mcFooter)\" [ngTemplateOutlet]=\"$any(mcFooter)\"></ng-container>\n <ng-container *ngSwitchCase=\"isNonEmptyString(mcFooter)\">\n <div [innerHTML]=\"mcFooter\"></div>\n </ng-container>\n <ng-container *ngSwitchCase=\"isModalButtons(mcFooter)\">\n <ng-container *ngFor=\"let button of $any(mcFooter)\">\n <button\n mc-button\n #autoFocusedButton\n [attr.autofocus]=\"button.autoFocus\"\n [attr.mc-modal-main-action]=\"button.mcModalMainAction\"\n *ngIf=\"getButtonCallableProp(button, 'show')\"\n [disabled]=\"getButtonCallableProp(button, 'disabled')\"\n [class.mc-progress]=\"getButtonCallableProp(button, 'loading')\"\n (click)=\"onButtonClick(button)\"\n [color]=\"button.type\">\n {{ button.label }}\n </button>\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <button\n #autoFocusedButton\n [attr.autofocus]=\"true\"\n *ngIf=\"mcOkText\"\n mc-button\n [color]=\"themePalette.Primary\"\n (click)=\"onClickOkCancel('ok')\">\n\n {{ okText }}\n </button>\n <button *ngIf=\"mcCancelText\" mc-button (click)=\"onClickOkCancel('cancel')\">\n {{ cancelText }}\n </button>\n </ng-container>\n </ng-container>\n </div>\n</ng-template>\n<!-- /[Predefined] Default Modal Content -->\n\n<!-- [Predefined] Confirm Modal Content -->\n<ng-template #tplContentConfirm>\n <div class=\"mc-modal-body\" [ngStyle]=\"mcBodyStyle\">\n <div class=\"mc-confirm-body-wrapper\">\n <div class=\"mc-confirm-body\">\n <div class=\"mc-confirm-content\">\n <ng-container #bodyContainer>\n <ng-container *ngIf=\"!isComponent(mcContent)\" [ngSwitch]=\"true\">\n <ng-container *ngSwitchCase=\"isTemplateRef(mcContent)\"\n [ngTemplateOutlet]=\"$any(mcContent)\">\n </ng-container>\n <ng-container *ngSwitchCase=\"isNonEmptyString(mcContent)\">\n <div [innerHTML]=\"mcContent\"></div>\n </ng-container>\n <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"tplOriginContent\"></ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div> <!-- /.mc-confirm-body-wrapper -->\n </div>\n <div class=\"mc-confirm-btns\" *ngIf=\"mcOkText || mcCancelText\">\n <button\n mc-button\n #autoFocusedButton\n [color]=\"mcOkType\"\n [attr.autofocus]=\"true\"\n *ngIf=\"mcOkText\"\n (click)=\"onClickOkCancel('ok')\">\n\n {{ okText }}\n </button>\n\n <button mc-button [color]=\"themePalette.Secondary\" *ngIf=\"mcCancelText\" (click)=\"onClickOkCancel('cancel')\">\n {{ cancelText }}\n </button>\n </div>\n</ng-template>\n<!-- /[Predefined] Confirm Modal Content -->\n", styles: [".mc-confirm .mc-modal-header,.mc-confirm .mc-modal-close{display:none}.mc-confirm .mc-modal-body{padding:var(--mc-modal-confirm-size-padding, 24px)}.mc-confirm-body-wrapper{zoom:1}.mc-confirm-body-wrapper:before,.mc-confirm-body-wrapper:after{content:\"\";display:table}.mc-confirm-body-wrapper:after{clear:both}.mc-confirm-body .mc-confirm-title{display:block;overflow:auto}.mc-confirm .mc-confirm-btns{border-radius:var(--mc-modal-footer-size-border-radius, 0 0 4px 4px);text-align:right}.mc-confirm .mc-confirm-btns button+button,.mc-confirm .mc-confirm-btns button:only-child{margin:16px}.mc-modal{box-sizing:border-box;position:relative;top:var(--mc-modal-size-top, 48px);width:auto;margin:0 auto;list-style:none}.mc-modal.zoom-enter,.mc-modal.zoom-appear{animation-duration:.3s;transform:none;opacity:0}.mc-modal.mc-modal_small{width:var(--mc-modal-size-small, 400px)}.mc-modal.mc-modal_medium{width:var(--mc-modal-size-medium, 640px)}.mc-modal.mc-modal_large{width:var(--mc-modal-size-large, 960px)}.mc-modal .mc-modal-close{position:absolute;z-index:10;top:0;right:0;width:var(--mc-modal-size-close-width, 56px);height:var(--mc-modal-size-close-width, 56px)}.mc-modal-wrap{position:fixed;z-index:1000;inset:0;overflow:auto;-webkit-overflow-scrolling:touch;outline:0}.mc-modal-title{margin-top:8px;margin-bottom:8px;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}.mc-modal-content{position:relative;border-radius:var(--mc-modal-size-border-radius, 4px);background-clip:padding-box;background-color:#fff}.mc-modal-header{display:flex;align-items:center;min-height:var(--mc-modal-header-size-height, 56px);border-radius:var(--mc-modal-header-size-border-radius, 4px 4px 0 0);padding:var(--mc-modal-header-size-padding, 0 16px)}.mc-modal-header.mc-modal-header_closable{padding-right:calc(var(--mc-modal-size-close-width, 56px) + 8px)}.mc-modal-body{display:block;overflow-y:auto;max-height:var(--mc-modal-body-size-max-height, calc(100vh - 260px));padding:var(--mc-modal-body-size-padding, 16px 24px 24px);word-wrap:break-word}.mc-modal-footer{display:flex;align-items:center;justify-content:flex-end;height:var(--mc-modal-footer-size-height, 64px);border-radius:var(--mc-modal-footer-size-border-radius, 0 0 4px 4px);padding:var(--mc-modal-footer-size-padding, 0 16px)}.mc-modal-footer button+button{margin-left:16px;margin-bottom:0}.mc-modal-mask{position:fixed;z-index:1000;inset:0;height:100%}.mc-modal-mask.mc-modal-mask-hidden{display:none}.mc-modal-open{overflow:hidden}\n"] }]
|
430
|
+
}], ctorParameters: function () { return [{ type: i1.Overlay }, { type: i0.Renderer2 }, { type: i0.ComponentFactoryResolver }, { type: i0.ElementRef }, { type: i0.ViewContainerRef }, { type: i2.McModalControlService }, { type: i0.ChangeDetectorRef }, { type: i3.FocusMonitor }, { type: undefined, decorators: [{
|
431
|
+
type: Inject,
|
432
|
+
args: [DOCUMENT]
|
433
|
+
}] }]; }, propDecorators: { mcModalType: [{
|
434
|
+
type: Input
|
435
|
+
}], mcComponent: [{
|
436
|
+
type: Input
|
437
|
+
}], mcContent: [{
|
438
|
+
type: Input
|
439
|
+
}], mcComponentParams: [{
|
440
|
+
type: Input
|
441
|
+
}], mcFooter: [{
|
442
|
+
type: Input
|
443
|
+
}], mcVisible: [{
|
444
|
+
type: Input
|
445
|
+
}], mcVisibleChange: [{
|
446
|
+
type: Output
|
447
|
+
}], mcZIndex: [{
|
448
|
+
type: Input
|
449
|
+
}], mcWidth: [{
|
450
|
+
type: Input
|
451
|
+
}], mcSize: [{
|
452
|
+
type: Input
|
453
|
+
}], mcWrapClassName: [{
|
454
|
+
type: Input
|
455
|
+
}], mcClassName: [{
|
456
|
+
type: Input
|
457
|
+
}], mcStyle: [{
|
458
|
+
type: Input
|
459
|
+
}], mcTitle: [{
|
460
|
+
type: Input
|
461
|
+
}], mcCloseByESC: [{
|
462
|
+
type: Input
|
463
|
+
}], mcClosable: [{
|
464
|
+
type: Input
|
465
|
+
}], mcMask: [{
|
466
|
+
type: Input
|
467
|
+
}], mcMaskClosable: [{
|
468
|
+
type: Input
|
469
|
+
}], mcMaskStyle: [{
|
470
|
+
type: Input
|
471
|
+
}], mcBodyStyle: [{
|
472
|
+
type: Input
|
473
|
+
}], mcAfterOpen: [{
|
474
|
+
type: Output
|
475
|
+
}], mcAfterClose: [{
|
476
|
+
type: Output
|
477
|
+
}], mcOkText: [{
|
478
|
+
type: Input
|
479
|
+
}], mcOkType: [{
|
480
|
+
type: Input
|
481
|
+
}], mcRestoreFocus: [{
|
482
|
+
type: Input
|
483
|
+
}], mcOkLoading: [{
|
484
|
+
type: Input
|
485
|
+
}], mcOnOk: [{
|
486
|
+
type: Input
|
487
|
+
}, {
|
488
|
+
type: Output
|
489
|
+
}], mcCancelText: [{
|
490
|
+
type: Input
|
491
|
+
}], mcCancelLoading: [{
|
492
|
+
type: Input
|
493
|
+
}], mcOnCancel: [{
|
494
|
+
type: Input
|
495
|
+
}, {
|
496
|
+
type: Output
|
497
|
+
}], modalContainer: [{
|
498
|
+
type: ViewChild,
|
499
|
+
args: ['modalContainer', { static: true }]
|
500
|
+
}], bodyContainer: [{
|
501
|
+
type: ViewChild,
|
502
|
+
args: ['bodyContainer', { read: ViewContainerRef, static: false }]
|
503
|
+
}], autoFocusedButtons: [{
|
504
|
+
type: ViewChildren,
|
505
|
+
args: ['autoFocusedButton', { read: ElementRef }]
|
506
|
+
}], modalBody: [{
|
507
|
+
type: ViewChild,
|
508
|
+
args: ['modalBody']
|
509
|
+
}], mcGetContainer: [{
|
510
|
+
type: Input
|
511
|
+
}] } });
|
512
|
+
////////////
|
513
|
+
function isPromise(obj) {
|
514
|
+
// tslint:disable-next-line: no-unbound-method
|
515
|
+
return !!obj &&
|
516
|
+
(typeof obj === 'object' || typeof obj === 'function') &&
|
517
|
+
typeof obj.then === 'function' &&
|
518
|
+
typeof obj.catch === 'function';
|
519
|
+
}
|
520
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvbW9zYWljL21vZGFsL21vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21vc2FpYy9tb2RhbC9tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFlLE1BQU0sbUJBQW1CLENBQUM7QUFDOUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULHdCQUF3QixFQUV4QixVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUlMLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUVULFdBQVcsRUFDWCxJQUFJLEVBQ0osU0FBUyxFQUNULFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXZELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsSUFBSSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDNUQsT0FBTyxFQUFzQyxTQUFTLEVBQThCLE1BQU0sY0FBYyxDQUFDOzs7Ozs7Ozs7O0FB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O2dCQUdGLFdBQVc7c0JBRGQsS0FBSztnQkFLYSxNQUFNO3NCQUF4QixLQUFLOztzQkFBSSxNQUFNO2dCQUNQLFlBQVk7c0JBQXBCLEtBQUs7Z0JBR0YsZUFBZTtzQkFEbEIsS0FBSztnQkFLYSxVQUFVO3NCQUE1QixLQUFLOztzQkFBSSxNQUFNO2dCQUUrQixjQUFjO3NCQUE1RCxTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDMEIsYUFBYTtzQkFBbkYsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFFWixrQkFBa0I7c0JBQTFFLFlBQVk7dUJBQUMsbUJBQW1CLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUUvQixTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVc7Z0JBeURiLGNBQWM7c0JBQXRCLEtBQUs7O0FBaVpWLFlBQVk7QUFFWixTQUFTLFNBQVMsQ0FBQyxHQUFjO0lBQzdCLDhDQUE4QztJQUM5QyxPQUFPLENBQUMsQ0FBQyxHQUFHO1FBQ1IsQ0FBQyxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksT0FBTyxHQUFHLEtBQUssVUFBVSxDQUFDO1FBQ3RELE9BQVEsR0FBbUIsQ0FBQyxJQUFJLEtBQUssVUFBVTtRQUMvQyxPQUFRLEdBQW1CLENBQUMsS0FBSyxLQUFLLFVBQVUsQ0FBQztBQUN6RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9jdXNNb25pdG9yLCBGb2N1c09yaWdpbiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IE92ZXJsYXksIE92ZXJsYXlSZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBDb21wb25lbnRSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0LFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgUmVuZGVyZXIyLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVHlwZSxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdDb250YWluZXJSZWYsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFU0NBUEUsIEVOVEVSIH0gZnJvbSAnQHB0c2VjdXJpdHkvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7IFRoZW1lUGFsZXR0ZSB9IGZyb20gJ0BwdHNlY3VyaXR5L21vc2FpYy9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IE1jTW9kYWxDb250cm9sU2VydmljZSB9IGZyb20gJy4vbW9kYWwtY29udHJvbC5zZXJ2aWNlJztcbmltcG9ydCB7IE1jTW9kYWxSZWYgfSBmcm9tICcuL21vZGFsLXJlZi5jbGFzcyc7XG5pbXBvcnQgeyBtb2RhbFV0aWxPYmplY3QgYXMgTW9kYWxVdGlsIH0gZnJvbSAnLi9tb2RhbC11dGlsJztcbmltcG9ydCB7IElNb2RhbEJ1dHRvbk9wdGlvbnMsIElNb2RhbE9wdGlvbnMsIE1vZGFsU2l6ZSwgTW9kYWxUeXBlLCBPbkNsaWNrQ2FsbGJhY2sgfSBmcm9tICcuL21vZGFsLnR5cGUnO1xuXG5cbi8vIER1cmF0aW9uIHdoZW4gcGVyZm9ybSBhbmltYXRpb25zIChtcylcbmV4cG9ydCBjb25zdCBNT0RBTF9BTklNQVRFX0RVUkFUSU9OID0gMjAwO1xuXG50eXBlIEFuaW1hdGlvblN0YXRlID0gJ2VudGVyJyB8ICdsZWF2ZScgfCBudWxsO1xuXG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbWMtbW9kYWwnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vbW9kYWwuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaG9zdDoge1xuICAgICAgICAnKGtleWRvd24pJzogJ29uS2V5RG93bigkZXZlbnQpJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgTWNNb2RhbENvbXBvbmVudDxUID0gYW55LCBSID0gYW55PiBleHRlbmRzIE1jTW9kYWxSZWY8VCwgUj5cbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIElNb2RhbE9wdGlvbnMge1xuXG4gICAgdGhlbWVQYWxldHRlID0gVGhlbWVQYWxldHRlO1xuXG4gICAgQElucHV0KCkgbWNNb2RhbFR5cGU6IE1vZGFsVHlwZSA9ICdkZWZhdWx0JztcblxuICAgIC8vIFRoZSBpbnN0YW5jZSBvZiBjb21wb25lbnQgb3BlbmVkIGludG8gdGhlIGRpYWxvZy5cbiAgICBASW5wdXQoKSBtY0NvbXBvbmVudDogVHlwZTxUPjtcbiAgICAvLyBJZiBub3Qgc3BlY2lmaWVkLCB3aWxsIHVzZSA8bmctY29udGVudD5cbiAgICBASW5wdXQoKSBtY0NvbnRlbnQ6IHN0cmluZyB8IFRlbXBsYXRlUmVmPHt9PiB8IFR5cGU8VD47XG4gICAgLy8gYXZhaWxhYmxlIHdoZW4gbWNDb250ZW50IGlzIGEgY29tcG9uZW50XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIEBJbnB1dCgpIG1jQ29tcG9uZW50UGFyYW1zOiBhbnk7XG4gICAgLy8gRGVmYXVsdCBNb2RhbCBPTkxZXG4gICAgQElucHV0KCkgbWNGb290ZXI6IHN0cmluZyB8IFRlbXBsYXRlUmVmPHt9PiB8IElNb2RhbEJ1dHRvbk9wdGlvbnM8VD5bXTtcblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IG1jVmlzaWJsZSgpIHsgcmV0dXJuIHRoaXMuX21jVmlzaWJsZTsgfVxuICAgIHNldCBtY1Zpc2libGUodmFsdWUpIHsgdGhpcy5fbWNWaXNpYmxlID0gdmFsdWU7IH1cblxuICAgIHByaXZhdGUgX21jVmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgQE91dHB1dCgpIG1jVmlzaWJsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIEBJbnB1dCgpIG1jWkluZGV4OiBudW1iZXIgPSAxMDAwO1xuICAgIEBJbnB1dCgpIG1jV2lkdGg6IG51bWJlciB8IHN0cmluZztcbiAgICBASW5wdXQoKSBtY1NpemU6IE1vZGFsU2l6ZSA9IE1vZGFsU2l6ZS5NZWRpdW07XG4gICAgQElucHV0KCkgbWNXcmFwQ2xhc3NOYW1lOiBzdHJpbmc7XG4gICAgQElucHV0KCkgbWNDbGFzc05hbWU6IHN0cmluZztcbiAgICBASW5wdXQoKSBtY1N0eWxlOiBvYmplY3Q7XG4gICAgQElucHV0KCkgbWNUaXRsZTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8e30+O1xuICAgIEBJbnB1dCgpIG1jQ2xvc2VCeUVTQzogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCBtY0Nsb3NhYmxlKCkgeyByZXR1cm4gdGhpcy5fbWNDbG9zYWJsZTsgfVxuICAgIHNldCBtY0Nsb3NhYmxlKHZhbHVlKSB7IHRoaXMuX21jQ2xvc2FibGUgPSB2YWx1ZTsgfVxuICAgIHByaXZhdGUgX21jQ2xvc2FibGUgPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBnZXQgbWNNYXNrKCkgeyByZXR1cm4gdGhpcy5fbWNNYXNrOyB9XG4gICAgc2V0IG1jTWFzayh2YWx1ZSkgeyB0aGlzLl9tY01hc2sgPSB2YWx1ZTsgfVxuICAgIHByaXZhdGUgX21jTWFzayA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCBtY01hc2tDbG9zYWJsZSgpIHsgcmV0dXJuIHRoaXMuX21jTWFza0Nsb3NhYmxlOyB9XG4gICAgc2V0IG1jTWFza0Nsb3NhYmxlKHZhbHVlKSB7IHRoaXMuX21jTWFza0Nsb3NhYmxlID0gdmFsdWU7IH1cbiAgICBwcml2YXRlIF9tY01hc2tDbG9zYWJsZSA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgbWNNYXNrU3R5bGU6IG9iamVjdDtcbiAgICBASW5wdXQoKSBtY0JvZHlTdHlsZTogb2JqZWN0O1xuXG4gICAgLy8gVHJpZ2dlciB3aGVuIG1vZGFsIG9wZW4odmlzaWJsZSkgYWZ0ZXIgYW5pbWF0aW9uc1xuICAgIEBPdXRwdXQoKSBtY0FmdGVyT3BlbiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICAvLyBUcmlnZ2VyIHdoZW4gbW9kYWwgbGVhdmUtYW5pbWF0aW9uIG92ZXJcbiAgICBAT3V0cHV0KCkgbWNBZnRlckNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcjxSPigpO1xuXG4gICAgLy8gLS0tIFByZWRlZmluZWQgT0sgJiBDYW5jZWwgYnV0dG9uc1xuICAgIEBJbnB1dCgpIG1jT2tUZXh0OiBzdHJpbmc7XG4gICAgQElucHV0KCkgbWNPa1R5cGUgPSAncHJpbWFyeSc7XG5cbiAgICBASW5wdXQoKSBtY1Jlc3RvcmVGb2N1cyA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCBtY09rTG9hZGluZygpIHsgcmV0dXJuIHRoaXMuX21jT2tMb2FkaW5nOyB9XG4gICAgc2V0IG1jT2tMb2FkaW5nKHZhbHVlKSB7IHRoaXMuX21jT2tMb2FkaW5nID0gdmFsdWU7IH1cbiAgICBwcml2YXRlIF9tY09rTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgQE91dHB1dCgpIG1jT25PazogRXZlbnRFbWl0dGVyPFQ+IHwgT25DbGlja0NhbGxiYWNrPFQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xuICAgIEBJbnB1dCgpIG1jQ2FuY2VsVGV4dDogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBnZXQgbWNDYW5jZWxMb2FkaW5nKCkgeyByZXR1cm4gdGhpcy5fbWNDYW5jZWxMb2FkaW5nOyB9XG4gICAgc2V0IG1jQ2FuY2VsTG9hZGluZyh2YWx1ZSkgeyB0aGlzLl9tY0NhbmNlbExvYWRpbmcgPSB2YWx1ZTsgfVxuICAgIHByaXZhdGUgX21jQ2FuY2VsTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgQE91dHB1dCgpIG1jT25DYW5jZWw6IEV2ZW50RW1pdHRlcjxUPiB8IE9uQ2xpY2tDYWxsYmFjazxUPiA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcblxuICAgIEBWaWV3Q2hpbGQoJ21vZGFsQ29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSkgbW9kYWxDb250YWluZXI6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgnYm9keUNvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljOiBmYWxzZSB9KSBib2R5Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmO1xuICAgIC8vIE9ubHkgYWltIHRvIGZvY3VzIHRoZSBvayBidXR0b24gdGhhdCBuZWVkcyB0byBiZSBhdXRvIGZvY3VzZWRcbiAgICBAVmlld0NoaWxkcmVuKCdhdXRvRm9jdXNlZEJ1dHRvbicsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBhdXRvRm9jdXNlZEJ1dHRvbnM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcblxuICAgIEBWaWV3Q2hpbGQoJ21vZGFsQm9keScpIG1vZGFsQm9keTogRWxlbWVudFJlZjtcblxuICAgIGlzVG9wT3ZlcmZsb3c6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBpc0JvdHRvbU92ZXJmbG93OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBtYXNrQW5pbWF0aW9uQ2xhc3NNYXA6IG9iamVjdDtcbiAgICBtb2RhbEFuaW1hdGlvbkNsYXNzTWFwOiBvYmplY3Q7XG4gICAgLy8gVGhlIG9yaWdpbiBwb2ludCB0aGF0IGFuaW1hdGlvbiBiYXNlZCBvblxuICAgIHRyYW5zZm9ybU9yaWdpbiA9ICcwcHggMHB4IDBweCc7XG5cbiAgICAvLyBPYnNlcnZhYmxlIGFsaWFzIGZvciBtY0FmdGVyT3BlblxuICAgIGdldCBhZnRlck9wZW4oKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1jQWZ0ZXJPcGVuLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8vIE9ic2VydmFibGUgYWxpYXMgZm9yIG1jQWZ0ZXJDbG9zZVxuICAgIGdldCBhZnRlckNsb3NlKCk6IE9ic2VydmFibGU8Uj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tY0FmdGVyQ2xvc2UuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgZ2V0IG9rVGV4dCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5tY09rVGV4dDtcbiAgICB9XG5cbiAgICBnZXQgY2FuY2VsVGV4dCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5tY0NhbmNlbFRleHQ7XG4gICAgfVxuXG4gICAgLy8gSW5kaWNhdGUgd2hldGhlciB0aGlzIGRpYWxvZyBzaG91bGQgaGlkZGVuXG4gICAgZ2V0IGhpZGRlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLm1jVmlzaWJsZSAmJiAhdGhpcy5hbmltYXRpb25TdGF0ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZvY3VzZWRFbGVtZW50QmVmb3JlT3BlbjogSFRNTEVsZW1lbnQgfCBudWxsO1xuXG4gICAgcHJpdmF0ZSBwcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnRPcmlnaW46IEZvY3VzT3JpZ2luO1xuXG4gICAgLy8gSGFuZGxlIHRoZSByZWZlcmVuY2Ugd2hlbiB1c2luZyBtY0NvbnRlbnQgYXMgQ29tcG9uZW50XG4gICAgcHJpdmF0ZSBjb250ZW50Q29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8VD47XG4gICAgLy8gQ3VycmVudCBhbmltYXRpb24gc3RhdGVcbiAgICBwcml2YXRlIGFuaW1hdGlvblN0YXRlOiBBbmltYXRpb25TdGF0ZTtcbiAgICBwcml2YXRlIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQgfCBPdmVybGF5UmVmO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheSxcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIGNmcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgICAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgcHJpdmF0ZSBtb2RhbENvbnRyb2w6IE1jTW9kYWxDb250cm9sU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgZm9jdXNNb25pdG9yOiBGb2N1c01vbml0b3IsXG4gICAgICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IGFueVxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIG1jR2V0Q29udGFpbmVyOiBIVE1MRWxlbWVudCB8IE92ZXJsYXlSZWYgfCAoKCkgPT4gSFRNTEVsZW1lbnQgfCBPdmVybGF5UmVmKSA9ICgpID0+IHRoaXMub3ZlcmxheS5jcmVhdGUoKTtcblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICAvLyBDcmVhdGUgY29tcG9uZW50IGFsb25nIHdpdGhvdXQgVmlld1xuICAgICAgICBpZiAodGhpcy5pc0NvbXBvbmVudCh0aGlzLm1jQ29udGVudCkpIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlRHluYW1pY0NvbXBvbmVudCh0aGlzLm1jQ29udGVudCBhcyBUeXBlPFQ+KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldHVwIGRlZmF1bHQgYnV0dG9uIG9wdGlvbnNcbiAgICAgICAgaWYgKHRoaXMuaXNNb2RhbEJ1dHRvbnModGhpcy5tY0Zvb3RlcikpIHtcbiAgICAgICAgICAgIHRoaXMubWNGb290ZXIgPSB0aGlzLmZvcm1hdE1vZGFsQnV0dG9ucyh0aGlzLm1jRm9vdGVyIGFzIElNb2RhbEJ1dHRvbk9wdGlvbnM8VD5bXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0NvbXBvbmVudCh0aGlzLm1jQ29tcG9uZW50KSkge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVEeW5hbWljQ29tcG9uZW50KHRoaXMubWNDb21wb25lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGxhY2UgdGhlIG1vZGFsIGRvbSB0byBlbHNld2hlcmVcbiAgICAgICAgdGhpcy5jb250YWluZXIgPSB0eXBlb2YgdGhpcy5tY0dldENvbnRhaW5lciA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMubWNHZXRDb250YWluZXIoKSA6IHRoaXMubWNHZXRDb250YWluZXI7XG4gICAgICAgIGlmICh0aGlzLmNvbnRhaW5lciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb250YWluZXIgaW5zdGFuY2VvZiBPdmVybGF5UmVmKSB7XG4gICAgICAgICAgICAvLyBOT1RFOiBvbmx5IGF0dGFjaCB0aGUgZG9tIHRvIG92ZXJsYXksIHRoZSB2aWV3IGNvbnRhaW5lciBpcyBub3QgY2hhbmdlZCBhY3R1YWxseVxuICAgICAgICAgICAgdGhpcy5jb250YWluZXIub3ZlcmxheUVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVnaXN0ZXIgbW9kYWwgd2hlbiBhZnRlck9wZW4vYWZ0ZXJDbG9zZSBpcyBzdGFibGVcbiAgICAgICAgdGhpcy5tb2RhbENvbnRyb2wucmVnaXN0ZXJNb2RhbCh0aGlzKTtcbiAgICB9XG5cbiAgICAvLyBbTk9URV0gTk9UIGF2YWlsYWJsZSB3aGVuIHVzaW5nIGJ5IHNlcnZpY2UhXG4gICAgLy8gQmVjYXVzZSBuZ09uQ2hhbmdlcyBuZXZlciBiZSBjYWxsZWQgd2hlbiB1c2luZyBieSBzZXJ2aWNlLFxuICAgIC8vIGhlcmUgd2UgY2FuJ3Qgc3VwcG9ydCBcIm1jQ29udGVudFwiKENvbXBvbmVudCkgZXRjLiBhcyBpbnB1dHMgdGhhdCBpbml0aWFsaXplZCBkeW5hbWljYWxseS5cbiAgICAvLyBCVVQ6IFVzZXIgYWxzbyBjYW4gY2hhbmdlIFwibWNDb250ZW50XCIgZHluYW1pY2FsbHkgdG8gdHJpZ2dlciBVSSBjaGFuZ2VzXG4gICAgLy8gKHByb3ZpZGVkIHlvdSBkb24ndCB1c2UgXGJDb21wb25lbnQgdGhhdCBuZWVkcyBpbml0aWFsaXphdGlvbnMpXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBpZiAoY2hhbmdlcy5tY1Zpc2libGUpIHtcbiAgICAgICAgICAgIC8vIERvIG5vdCB0cmlnZ2VyIGFuaW1hdGlvbiB3aGlsZSBpbml0aWFsaXppbmdcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlVmlzaWJsZVN0YXRlQ2hhbmdlKHRoaXMubWNWaXNpYmxlLCAhY2hhbmdlcy5tY1Zpc2libGUuZmlyc3RDaGFuZ2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICAvLyBJZiB1c2luZyBDb21wb25lbnQsIGl0IGlzIHRoZSB0aW1lIHRvIGF0dGFjaCBWaWV3IHdoaWxlIGJvZHlDb250YWluZXIgaXMgcmVhZHlcbiAgICAgICAgaWYgKHRoaXMuY29udGVudENvbXBvbmVudFJlZikge1xuICAgICAgICAgICAgdGhpcy5ib2R5Q29udGFpbmVyLmluc2VydCh0aGlzLmNvbnRlbnRDb21wb25lbnRSZWYuaG9zdFZpZXcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2V0RWxlbWVudCgpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKVswXT8uZm9jdXMoKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGF1dG9Gb2N1c2VkQnV0dG9uIG9mIHRoaXMuYXV0b0ZvY3VzZWRCdXR0b25zLnRvQXJyYXkoKSkge1xuICAgICAgICAgICAgaWYgKGF1dG9Gb2N1c2VkQnV0dG9uLm5hdGl2ZUVsZW1lbnQuYXV0b2ZvY3VzKSB7XG4gICAgICAgICAgICAgICAgKGF1dG9Gb2N1c2VkQnV0dG9uLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEJ1dHRvbkVsZW1lbnQpLmZvY3VzKCk7XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2hlY2tPdmVyZmxvdygpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5jb250YWluZXIgaW5zdGFuY2VvZiBPdmVybGF5UmVmKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5kaXNwb3NlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjaGVja092ZXJmbG93KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBuYXRpdmVFbGVtZW50ID0gdGhpcy5tb2RhbEJvZHk/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgaWYgKCFuYXRpdmVFbGVtZW50KSB7IHJldHVybjsgfVxuXG4gICAgICAgIGNvbnN0IHNjcm9sbFRvcDogbnVtYmVyID0gbmF0aXZlRWxlbWVudC5zY3JvbGxUb3A7XG4gICAgICAgIGNvbnN0IG9mZnNldEhlaWdodDogbnVtYmVyID0gbmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIGNvbnN0IHNjcm9sbEhlaWdodDogbnVtYmVyID0gbmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQ7XG5cbiAgICAgICAgdGhpcy5pc1RvcE92ZXJmbG93ID0gc2Nyb2xsVG9wID4gMDtcblxuICAgICAgICB0aGlzLmlzQm90dG9tT3ZlcmZsb3cgPSAoc2Nyb2xsVG9wIGFzIG51bWJlciArIG9mZnNldEhlaWdodCBhcyBudW1iZXIpIDwgc2Nyb2xsSGVpZ2h0O1xuICAgIH1cblxuICAgIG9wZW4oKSB7XG4gICAgICAgIHRoaXMuZm9jdXNlZEVsZW1lbnRCZWZvcmVPcGVuID0gdGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgICB0aGlzLmZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMubW9kYWxDb250YWluZXIsIHRydWUpXG4gICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgob3JpZ2luKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnRPcmlnaW4gPSBvcmlnaW47XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5tb2RhbENvbnRhaW5lcik7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNoYW5nZVZpc2libGVGcm9tSW5zaWRlKHRydWUpO1xuICAgIH1cblxuICAgIGNsb3NlKHJlc3VsdD86IFIpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VWaXNpYmxlRnJvbUluc2lkZShmYWxzZSwgcmVzdWx0KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1jUmVzdG9yZUZvY3VzICYmIHRoaXMuZm9jdXNlZEVsZW1lbnRCZWZvcmVPcGVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c01vbml0b3IuZm9jdXNWaWEoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNlZEVsZW1lbnRCZWZvcmVPcGVuIGFzIEhUTUxFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXZpb3VzbHlGb2N1c2VkRWxlbWVudE9yaWdpblxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c2VkRWxlbWVudEJlZm9yZU9wZW4gPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBEZXN0cm95IGVxdWFscyBDbG9zZVxuICAgIGRlc3Ryb3kocmVzdWx0PzogUikge1xuICAgICAgICB0aGlzLmNsb3NlKHJlc3VsdCk7XG4gICAgfVxuXG4gICAgbWFya0ZvckNoZWNrKCkge1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHRyaWdnZXJPaygpIHtcbiAgICAgICAgdGhpcy5vbkNsaWNrT2tDYW5jZWwoJ29rJyk7XG4gICAgfVxuXG4gICAgdHJpZ2dlckNhbmNlbCgpIHtcbiAgICAgICAgdGhpcy5vbkNsaWNrT2tDYW5jZWwoJ2NhbmNlbCcpO1xuICAgIH1cblxuICAgIGdldEluc3RhbmNlKCk6IE1jTW9kYWxDb21wb25lbnQge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBnZXRDb250ZW50Q29tcG9uZW50UmVmKCk6IENvbXBvbmVudFJlZjxUPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRlbnRDb21wb25lbnRSZWY7XG4gICAgfVxuXG4gICAgZ2V0Q29udGVudENvbXBvbmVudCgpOiBUIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGVudENvbXBvbmVudFJlZiAmJiB0aGlzLmNvbnRlbnRDb21wb25lbnRSZWYuaW5zdGFuY2U7XG4gICAgfVxuXG4gICAgZ2V0RWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYgJiYgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgZ2V0TWNGb290ZXIoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRFbGVtZW50KCkuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbWMtbW9kYWwtZm9vdGVyJykuaXRlbSgwKSBhcyBIVE1MRWxlbWVudDtcbiAgICB9XG5cbiAgICBvbkNsaWNrTWFzaygkZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5tY01hc2sgJiZcbiAgICAgICAgICAgIHRoaXMubWNNYXNrQ2xvc2FibGUgJiZcbiAgICAgICAgICAgICgkZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbGFzc0xpc3QuY29udGFpbnMoJ21jLW1vZGFsLXdyYXAnKSAmJlxuICAgICAgICAgICAgdGhpcy5tY1Zpc2libGVcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLm9uQ2xpY2tPa0NhbmNlbCgnY2FuY2VsJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXJlc2VydmVkLWtleXdvcmRzXG4gICAgaXNNb2RhbFR5cGUodHlwZTogTW9kYWxUeXBlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1jTW9kYWxUeXBlID09PSB0eXBlO1xuICAgIH1cblxuICAgIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkZXByZWNhdGlvbiAua2V5IGlzbid0IHN1cHBvcnRlZCBpbiBFZGdlXG4gICAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSBFU0NBUEUgJiYgdGhpcy5jb250YWluZXIgJiYgKHRoaXMuY29udGFpbmVyIGluc3RhbmNlb2YgT3ZlcmxheVJlZikpIHtcblxuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6ZGVwcmVjYXRpb24gLmtleSBpc24ndCBzdXBwb3J0ZWQgaW4gRWRnZVxuICAgICAgICBpZiAoZXZlbnQuY3RybEtleSAmJiBldmVudC5rZXlDb2RlID09PSBFTlRFUikge1xuICAgICAgICAgICAgaWYgKHRoaXMubWNNb2RhbFR5cGUgPT09ICdjb25maXJtJykge1xuICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlck9rKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICh0aGlzLmdldEVsZW1lbnQoKS5xdWVyeVNlbGVjdG9yKCdbbWMtbW9kYWwtbWFpbi1hY3Rpb25dJykgYXMgSFRNTEVsZW1lbnQpPy5jbGljaygpO1xuXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQW9UXG4gICAgb25DbGlja0Nsb3NlQnRuKCkge1xuICAgICAgICBpZiAodGhpcy5tY1Zpc2libGUpIHtcbiAgICAgICAgICAgIHRoaXMub25DbGlja09rQ2FuY2VsKCdjYW5jZWwnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFvVFxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tcmVzZXJ2ZWQta2V5d29yZHNcbiAgICBvbkNsaWNrT2tDYW5jZWwodHlwZTogJ29rJyB8ICdjYW5jZWwnKSB7XG4gICAgICAgIGNvbnN0IHRyaWdnZXIgPSB7IG9rOiB0aGlzLm1jT25PaywgY2FuY2VsOiB0aGlzLm1jT25DYW5jZWwgfVt0eXBlXTtcbiAgICAgICAgY29uc3QgbG9hZGluZ0tleSA9IHsgb2s6ICdtY09rTG9hZGluZycsIGNhbmNlbDogJ21jQ2FuY2VsTG9hZGluZycgfVt0eXBlXTtcblxuICAgICAgICBpZiAodHJpZ2dlciBpbnN0YW5jZW9mIEV2ZW50RW1pdHRlcikge1xuICAgICAgICAgICAgdHJpZ2dlci5lbWl0KHRoaXMuZ2V0Q29udGVudENvbXBvbmVudCgpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdHJpZ2dlciA9PT0gJ2Z1bmN0aW9uJykge1xuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0cmlnZ2VyKHRoaXMuZ2V0Q29udGVudENvbXBvbmVudCgpKTtcbiAgICAgICAgICAgIC8vIFVzZXJzIGNhbiByZXR1cm4gXCJmYWxzZVwiIHRvIHByZXZlbnQgY2xvc2luZyBieSBkZWZhdWx0XG4gICAgICAgICAgICBjb25zdCBjYXNlQ2xvc2UgPSAoZG9DbG9zZTogYm9vbGVhbiB8IHZvaWQgfCB7fSkgPT4gKGRvQ2xvc2UgIT09IGZhbHNlKSAmJiB0aGlzLmNsb3NlKGRvQ2xvc2UgYXMgUik7XG5cbiAgICAgICAgICAgIGlmIChpc1Byb21pc2UocmVzdWx0KSkge1xuICAgICAgICAgICAgICAgIHRoaXNbbG9hZGluZ0tleV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZVRoZW4gPSAoZG9DbG9zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzW2xvYWRpbmdLZXldID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGNhc2VDbG9zZShkb0Nsb3NlKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIChyZXN1bHQgYXMgUHJvbWlzZTx2b2lkPikudGhlbihoYW5kbGVUaGVuKS5jYXRjaChoYW5kbGVUaGVuKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FzZUNsb3NlKHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBb1RcbiAgICBpc05vbkVtcHR5U3RyaW5nKHZhbHVlOiB7fSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZSAhPT0gJyc7XG4gICAgfVxuXG4gICAgLy8gQW9UXG4gICAgaXNUZW1wbGF0ZVJlZih2YWx1ZToge30pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgVGVtcGxhdGVSZWY7XG4gICAgfVxuXG4gICAgLy8gQW9UXG4gICAgaXNDb21wb25lbnQodmFsdWU6IHt9KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFR5cGU7XG4gICAgfVxuXG4gICAgLy8gQW9UXG4gICAgaXNNb2RhbEJ1dHRvbnModmFsdWU6IHt9KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIC8vIExvb2t1cCBhIGJ1dHRvbidzIHByb3BlcnR5LCBpZiB0aGUgcHJvcCBpcyBhIGZ1bmN0aW9uLCBjYWxsICYgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCwgb3RoZXJ3aXNlLCByZXR1cm4gaXRzZWxmLlxuICAgIC8vIEFvVFxuICAgIGdldEJ1dHRvbkNhbGxhYmxlUHJvcChvcHRpb25zOiBJTW9kYWxCdXR0b25PcHRpb25zPFQ+LCBwcm9wOiBzdHJpbmcpOiB7fSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gb3B0aW9uc1twcm9wXTtcbiAgICAgICAgY29uc3QgYXJnczogYW55W10gPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuY29udGVudENvbXBvbmVudFJlZikge1xuICAgICAgICAgICAgYXJncy5wdXNoKHRoaXMuY29udGVudENvbXBvbmVudFJlZi5pbnN0YW5jZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nID8gdmFsdWUuYXBwbHkob3B0aW9ucywgYXJncykgOiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvLyBPbiBtY0Zvb3RlcidzIG1vZGFsIGJ1dHRvbiBjbGlja1xuICAgIC8vIEFvVFxuICAgIG9uQnV0dG9uQ2xpY2soYnV0dG9uOiBJTW9kYWxCdXR0b25PcHRpb25zPFQ+KSB7XG4gICAgICAgIC8vIENhbGwgb25DbGljayBkaXJlY3RseVxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8taW5mZXJyZWQtZW1wdHktb2JqZWN0LXR5cGUgIHJ1bGUgc2VlbXMgdG8gYmUgYnJva2VuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZ2V0QnV0dG9uQ2FsbGFibGVQcm9wKGJ1dHRvbiwgJ29uQ2xpY2snKTtcbiAgICAgICAgaWYgKGlzUHJvbWlzZShyZXN1bHQpKSB7XG4gICAgICAgICAgICBidXR0b24ubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAocmVzdWx0IGFzIFByb21pc2U8e30+KS50aGVuKCgpID0+IGJ1dHRvbi5sb2FkaW5nID0gZmFsc2UpLmNhdGNoKCgpID0+IGJ1dHRvbi5sb2FkaW5nID0gZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gRG8gcmVzdCB0aGluZ3Mgd2hlbiB2aXNpYmxlIHN0YXRlIGNoYW5nZWRcbiAgICBwcml2YXRlIGhhbmRsZVZpc2libGVTdGF0ZUNoYW5nZSh2aXNpYmxlOiBib29sZWFuLCBhbmltYXRpb246IGJvb2xlYW4gPSB0cnVlLCBjbG9zZVJlc3VsdD86IFIpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICAvLyBIaWRlIHNjcm9sbGJhciBhdCB0aGUgZmlyc3QgdGltZSB3aGVuIHNob3duIHVwXG4gICAgICAgIGlmICh2aXNpYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZUJvZHlPdmVyZmxvdygxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlXG4gICAgICAgICAgICAucmVzb2x2ZShhbmltYXRpb24gJiYgdGhpcy5hbmltYXRlVG8odmlzaWJsZSkpXG4gICAgICAgICAgICAvLyBFbWl0IG9wZW4vY2xvc2UgZXZlbnQgYWZ0ZXIgYW5pbWF0aW9ucyBvdmVyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHZpc2libGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tY0FmdGVyT3Blbi5lbWl0KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tY0FmdGVyQ2xvc2UuZW1pdChjbG9zZVJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNob3cvaGlkZSBzY3JvbGxiYXIgd2hlbiBhbmltYXRpb24gaXMgb3ZlclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZUJvZHlPdmVyZmxvdygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIENoYW5nZSBtY1Zpc2libGUgZnJvbSBpbnNpZGVcbiAgICBwcml2YXRlIGNoYW5nZVZpc2libGVGcm9tSW5zaWRlKHZpc2libGU6IGJvb2xlYW4sIGNsb3NlUmVzdWx0PzogUik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5tY1Zpc2libGUgIT09IHZpc2libGUpIHtcbiAgICAgICAgICAgIC8vIENoYW5nZSBtY1Zpc2libGUgdmFsdWUgaW1tZWRpYXRlbHlcbiAgICAgICAgICAgIHRoaXMubWNWaXNpYmxlID0gdmlzaWJsZTtcbiAgICAgICAgICAgIHRoaXMubWNWaXNpYmxlQ2hhbmdlLmVtaXQodmlzaWJsZSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZVZpc2libGVTdGF0ZUNoYW5nZSh2aXNpYmxlLCB0cnVlLCBjbG9zZVJlc3VsdCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGFuZ2VBbmltYXRpb25TdGF0ZShzdGF0ZTogQW5pbWF0aW9uU3RhdGUpIHtcbiAgICAgICAgdGhpcy5hbmltYXRpb25TdGF0ZSA9IHN0YXRlO1xuICAgICAgICBpZiAoc3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMubWFza0FuaW1hdGlvbkNsYXNzTWFwID0ge1xuICAgICAgICAgICAgICAgIFtgZmFkZS0ke3N0YXRlfWBdOiB0cnVlLFxuICAgICAgICAgICAgICAgIFtgZmFkZS0ke3N0YXRlfS1hY3RpdmVgXTogdHJ1ZVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5tb2RhbEFuaW1hdGlvbkNsYXNzTWFwID0ge1xuICAgICAgICAgICAgICAgIFtgem9vbS0ke3N0YXRlfWBdOiB0cnVlLFxuICAgICAgICAgICAgICAgIFtgem9vbS0ke3N0YXRlfS1hY3RpdmVgXTogdHJ1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIHRoaXMubWFza0FuaW1hdGlvbkNsYXNzTWFwID0gdGhpcy5tb2RhbEFuaW1hdGlvbkNsYXNzTWFwID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnRDb21wb25lbnRSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGVudENvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFuaW1hdGVUbyhpc1Zpc2libGU6IGJvb2xlYW4pOiBQcm9taXNlPGFueT4ge1xuICAgICAgICAvLyBGaWd1cmUgb3V0IHRoZSBsYXN0ZXN0IGNsaWNrIHBvc2l0aW9uIHdoZW4gc2hvd3MgdXBcbiAgICAgICAgaWYgKGlzVmlzaWJsZSkge1xuICAgICAgICAgICAgLy8gW05PVEVdIFVzaW5nIHRpbWVvdXQgZHVlIHRvIHRoZSBkb2N1bWVudC5jbGljayBldmVudCBpcyBmaXJlZCBsYXRlciB0aGFuIHZpc2libGUgY2hhbmdlLFxuICAgICAgICAgICAgLy8gc28gaWYgbm90IHBvc3Rwb25lZCB0byBuZXh0IGV2ZW50LWxvb3AsIHdlIGNhbid0IGdldCB0aGUgbGFzdGVzdCBjbGljayBwb3NpdGlvblxuICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVUcmFuc2Zvcm1PcmlnaW4oKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNoYW5nZUFuaW1hdGlvblN0YXRlKGlzVmlzaWJsZSA/ICdlbnRlcicgOiAnbGVhdmUnKTtcblxuICAgICAgICAvLyBSZXR1cm4gd2hlbiBhbmltYXRpb24gaXMgb3ZlclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB3aW5kb3cuc2V0VGltZW91dChcbiAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlQW5pbWF0aW9uU3RhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBNT0RBTF9BTklNQVRFX0RVUkFUSU9OXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZvcm1hdE1vZGFsQnV0dG9ucyhidXR0b25zOiBJTW9kYWxCdXR0b25PcHRpb25zPFQ+W10pOiBJTW9kYWxCdXR0b25PcHRpb25zPFQ+W10ge1xuICAgICAgICByZXR1cm4gYnV0dG9ucy5tYXAoKGJ1dHRvbikgPT4ge1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLntcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2RlZmF1bHQnLFxuICAgICAgICAgICAgICAgICAgICBzaXplOiAnZGVmYXVsdCcsXG4gICAgICAgICAgICAgICAgICAgIGF1dG9Mb2FkaW5nOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzaG93OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAuLi5idXR0b25cbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIGNvbXBvbmVudCBkeW5hbWljYWxseSBidXQgbm90IGF0dGFjaCB0byBhbnkgVmlld1xuICAgICAqICh0aGlzIGFjdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gYm9keUNvbnRhaW5lciBpcyByZWFkeSlcbiAgICAgKiBAcGFyYW0gY29tcG9uZW50IENvbXBvbmVudCBjbGFzc1xuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlRHluYW1pY0NvbXBvbmVudChjb21wb25lbnQ6IFR5cGU8VD4pIHtcbiAgICAgICAgY29uc3QgZmFjdG9yeSA9IHRoaXMuY2ZyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGNvbXBvbmVudCk7XG4gICAgICAgIGNvbnN0IGNoaWxkSW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgICAgICAgcHJvdmlkZXJzOiBbe3Byb3ZpZGU6IE1jTW9kYWxSZWYsIHVzZVZhbHVlOiB0aGlzfV0sXG4gICAgICAgICAgICBwYXJlbnQ6IHRoaXMudmlld0NvbnRhaW5lci5pbmplY3RvclxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNvbnRlbnRDb21wb25lbnRSZWYgPSBmYWN0b3J5LmNyZWF0ZShjaGlsZEluamVjdG9yKTtcblxuICAgICAgICBpZiAodGhpcy5tY0NvbXBvbmVudFBhcmFtcykge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmNvbnRlbnRDb21wb25lbnRSZWYuaW5zdGFuY2UsIHRoaXMubWNDb21wb25lbnRQYXJhbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRG8gdGhlIGZpcnN0IGNoYW5nZSBkZXRlY3Rpb24gaW1tZWRpYXRlbHlcbiAgICAgICAgLy8gKG9yIHdlIGRvIGRldGVjdGlvbiBhdCBuZ0FmdGVyVmlld0luaXQsIG11bHRpLWNoYW5nZXMgZXJyb3Igd2lsbCBiZSB0aHJvd24pXG4gICAgICAgIHRoaXMuY29udGVudENvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHRyYW5zZm9ybS1vcmlnaW4gdG8gdGhlIGxhc3QgY2xpY2sgcG9zaXRpb24gb24gZG9jdW1lbnRcbiAgICBwcml2YXRlIHVwZGF0ZVRyYW5zZm9ybU9yaWdpbigpIHtcbiAgICAgICAgY29uc3QgbW9kYWxFbGVtZW50ID0gdGhpcy5tb2RhbENvbnRhaW5lci5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjb25zdCBsYXN0UG9zaXRpb24gPSBNb2RhbFV0aWwuZ2V0TGFzdENsaWNrUG9zaXRpb24oKTtcblxuICAgICAgICBpZiAobGFzdFBvc2l0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybU9yaWdpbiA9IGAke2xhc3RQb3NpdGlvbi54IC0gbW9kYWxFbGVtZW50Lm9mZnNldExlZnR9cHggJHtsYXN0UG9zaXRpb24ueSAtIG1vZGFsRWxlbWVudC5vZmZzZXRUb3B9cHggMHB4YDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRha2UgY2FyZSBvZiB0aGUgYm9keSdzIG92ZXJmbG93IHRvIGRlY2lkZSB0aGUgZXhpc3RlbnNlIG9mIHNjcm9sbGJhclxuICAgICAqIEBwYXJhbSBwbHVzTnVtIFRoZSBudW1iZXIgdGhhdCB0aGUgb3Blbk1vZGFscy5sZW5ndGggd2lsbCBpbmNyZWFzZSBzb29uXG4gICAgICovXG4gICAgcHJpdmF0ZSBjaGFuZ2VCb2R5T3ZlcmZsb3cocGx1c051bTogbnVtYmVyID0gMCkge1xuICAgICAgICBjb25zdCBvcGVuTW9kYWxzID0gdGhpcy5tb2RhbENvbnRyb2wub3Blbk1vZGFscztcblxuICAgICAgICBpZiAob3Blbk1vZGFscy5sZW5ndGggKyBwbHVzTnVtID4gMCkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmRvY3VtZW50LmJvZHksICdvdmVyZmxvdycsICdoaWRkZW4nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5kb2N1bWVudC5ib2R5LCAnb3ZlcmZsb3cnKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGlzUHJvbWlzZShvYmo6IHt9IHwgdm9pZCk6IGJvb2xlYW4ge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tdW5ib3VuZC1tZXRob2RcbiAgICByZXR1cm4gISFvYmogJiZcbiAgICAgICAgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnIHx8IHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpICYmXG4gICAgICAgIHR5cGVvZiAob2JqIGFzIFByb21pc2U8e30+KS50aGVuID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAgIHR5cGVvZiAob2JqIGFzIFByb21pc2U8e30+KS5jYXRjaCA9PT0gJ2Z1bmN0aW9uJztcbn1cbiIsIjwhLS0gQ29tcGF0aWJsZTogdGhlIDxuZy1jb250ZW50PiBjYW4gYXBwZWFyIG9ubHkgb25jZSAtLT5cbjxuZy10ZW1wbGF0ZSAjdHBsT3JpZ2luQ29udGVudD5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuXG48ZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJtY01hc2tcIlxuICAgICAgICAgY2xhc3M9XCJtYy1tb2RhbC1tYXNrXCJcbiAgICAgICAgIFtuZ0NsYXNzXT1cIm1hc2tBbmltYXRpb25DbGFzc01hcFwiXG4gICAgICAgICBbY2xhc3MubWMtbW9kYWwtbWFzay1oaWRkZW5dPVwiaGlkZGVuXCJcbiAgICAgICAgIFtuZ1N0eWxlXT1cIm1jTWFza1N0eWxlXCJcbiAgICAgICAgIFtzdHlsZS56SW5kZXhdPVwibWNaSW5kZXhcIlxuICAgID48L2Rpdj5cbiAgICA8ZGl2IChtb3VzZWRvd24pPVwib25DbGlja01hc2soJGV2ZW50KVwiXG4gICAgICAgICBjbGFzcz1cIm1jLW1vZGFsLXdyYXAge3sgbWNXcmFwQ2xhc3NOYW1lIH19XCJcbiAgICAgICAgIFtzdHlsZS56SW5kZXhdPVwibWNaSW5kZXhcIlxuICAgICAgICAgW3N0eWxlLmRpc3BsYXldPVwiaGlkZGVuID8gJ25vbmUnIDogJydcIlxuICAgICAgICAgdGFiaW5kZXg9XCItMVwiPlxuXG4gICAgICAgIDxkaXYgI21vZGFsQ29udGFpbmVyXG4gICAgICAgICAgICAgY2xhc3M9XCJtYy1tb2RhbCB7eyBtY0NsYXNzTmFtZSB9fSBtYy1tb2RhbF97eyBtY1NpemUgfX1cIlxuICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIm1vZGFsQW5pbWF0aW9uQ2xhc3NNYXBcIlxuICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIm1jU3R5bGVcIlxuICAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJtY1dpZHRoIHwgdG9Dc3NVbml0XCJcbiAgICAgICAgICAgICBbc3R5bGUudHJhbnNmb3JtLW9yaWdpbl09XCJ0cmFuc2Zvcm1PcmlnaW5cIj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1jLW1vZGFsLWNvbnRlbnRcIiBjZGtUcmFwRm9jdXM+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIm1jQ2xvc2FibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWMtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja0Nsb3NlQnRuKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYy1tb2RhbC1jbG9zZSBtYy1idXR0b25fdHJhbnNwYXJlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgbWMtaWNvbj1cIm1jLWNsb3NlLUxfMTZcIiBjbGFzcz1cIm1jLWljb24gbWMtaWNvbl9saWdodFwiIFtjb2xvcl09XCJ0aGVtZVBhbGV0dGUuU2Vjb25kYXJ5XCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiaXNNb2RhbFR5cGUoJ2RlZmF1bHQnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidHBsQ29udGVudERlZmF1bHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiaXNNb2RhbFR5cGUoJ2NvbmZpcm0nKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidHBsQ29udGVudENvbmZpcm1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiaXNNb2RhbFR5cGUoJ2N1c3RvbScpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0cGxDb250ZW50Q3VzdG9tXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICN0cGxDb250ZW50Q3VzdG9tPlxuICAgIDxuZy1jb250YWluZXIgI2JvZHlDb250YWluZXI+PC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG5cbjwhLS0gW1ByZWRlZmluZWRdIERlZmF1bHQgTW9kYWwgQ29udGVudCAtLT5cbjxuZy10ZW1wbGF0ZSAjdHBsQ29udGVudERlZmF1bHQ+XG4gICAgPGRpdiAqbmdJZj1cIm1jVGl0bGVcIlxuICAgICAgICAgY2xhc3M9XCJtYy1tb2RhbC1oZWFkZXJcIlxuICAgICAgICAgW2NsYXNzLm1jLW1vZGFsLWJvZHlfdG9wLW92ZXJmbG93XT1cImlzVG9wT3ZlcmZsb3dcIlxuICAgICAgICAgW2NsYXNzLm1jLW1vZGFsLWhlYWRlcl9jbG9zYWJsZV09XCJtY0Nsb3NhYmxlXCJcbiAgICAgICAgIG1jLXRpdGxlPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWMtbW9kYWwtdGl0bGVcIiAjbWNUaXRsZVRleHQ+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiaXNUZW1wbGF0ZVJlZihtY1RpdGxlKVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIiRhbnkobWNUaXRsZSlcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJpc05vbkVtcHR5U3RyaW5nKG1jVGl0bGUpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW2lubmVySFRNTF09XCJtY1RpdGxlXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm1jLW1vZGFsLWJvZHkgbWMtc2Nyb2xsYmFyXCIgI21vZGFsQm9keSBbbmdTdHlsZV09XCJtY0JvZHlTdHlsZVwiIChzY3JvbGwpPVwiY2hlY2tPdmVyZmxvdygpXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgI2JvZHlDb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzQ29tcG9uZW50KG1jQ29udGVudClcIiBbbmdTd2l0Y2hdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImlzVGVtcGxhdGVSZWYobWNDb250ZW50KVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIiRhbnkobWNDb250ZW50KVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImlzTm9uRW1wdHlTdHJpbmcobWNDb250ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFtpbm5lckhUTUxdPVwibWNDb250ZW50XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0IFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRwbE9yaWdpbkNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwibWNGb290ZXIgfHwgbWNPa1RleHQgfHwgbWNDYW5jZWxUZXh0XCIgY2xhc3M9XCJtYy1tb2RhbC1mb290ZXJcIiBbY2xhc3MubWMtbW9kYWwtYm9keV9ib3R0b20tb3ZlcmZsb3ddPVwiaXNCb3R0b21PdmVyZmxvd1wiPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJ0cnVlXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJpc1RlbXBsYXRlUmVmKG1jRm9vdGVyKVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIiRhbnkobWNGb290ZXIpXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJpc05vbkVtcHR5U3RyaW5nKG1jRm9vdGVyKVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgW2lubmVySFRNTF09XCJtY0Zvb3RlclwiPjwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJpc01vZGFsQnV0dG9ucyhtY0Zvb3RlcilcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBidXR0b24gb2YgJGFueShtY0Zvb3RlcilcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgbWMtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAjYXV0b0ZvY3VzZWRCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmF1dG9mb2N1c109XCJidXR0b24uYXV0b0ZvY3VzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLm1jLW1vZGFsLW1haW4tYWN0aW9uXT1cImJ1dHRvbi5tY01vZGFsTWFpbkFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImdldEJ1dHRvbkNhbGxhYmxlUHJvcChidXR0b24sICdzaG93JylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdldEJ1dHRvbkNhbGxhYmxlUHJvcChidXR0b24sICdkaXNhYmxlZCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5tYy1wcm9ncmVzc109XCJnZXRCdXR0b25DYWxsYWJsZVByb3AoYnV0dG9uLCAnbG9hZGluZycpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkJ1dHRvbkNsaWNrKGJ1dHRvbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImJ1dHRvbi50eXBlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBidXR0b24ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICNhdXRvRm9jdXNlZEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hdXRvZm9jdXNdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwibWNPa1RleHRcIlxuICAgICAgICAgICAgICAgICAgICBtYy1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cInRoZW1lUGFsZXR0ZS5QcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tPa0NhbmNlbCgnb2snKVwiPlxuXG4gICAgICAgICAgICAgICAgICAgIHt7IG9rVGV4dCB9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJtY0NhbmNlbFRleHRcIiBtYy1idXR0b24gKGNsaWNrKT1cIm9uQ2xpY2tPa0NhbmNlbCgnY2FuY2VsJylcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgY2FuY2VsVGV4dCB9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbjwhLS0gL1tQcmVkZWZpbmVkXSBEZWZhdWx0IE1vZGFsIENvbnRlbnQgLS0+XG5cbjwhLS0gW1ByZWRlZmluZWRdIENvbmZpcm0gTW9kYWwgQ29udGVudCAtLT5cbjxuZy10ZW1wbGF0ZSAjdHBsQ29udGVudENvbmZpcm0+XG4gICAgPGRpdiBjbGFzcz1cIm1jLW1vZGFsLWJvZHlcIiBbbmdTdHlsZV09XCJtY0JvZHlTdHlsZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWMtY29uZmlybS1ib2R5LXdyYXBwZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYy1jb25maXJtLWJvZHlcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWMtY29uZmlybS1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgI2JvZHlDb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzQ29tcG9uZW50KG1jQ29udGVudClcIiBbbmdTd2l0Y2hdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImlzVGVtcGxhdGVSZWYobWNDb250ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCIkYW55KG1jQ29udGVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJpc05vbkVtcHR5U3RyaW5nKG1jQ29udGVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cIm1jQ29udGVudFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdCBbbmdUZW1wbGF0ZU91dGxldF09XCJ0cGxPcmlnaW5Db250ZW50XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+IDwhLS0gLy5tYy1jb25maXJtLWJvZHktd3JhcHBlciAtLT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibWMtY29uZmlybS1idG5zXCIgKm5nSWY9XCJtY09rVGV4dCB8fCBtY0NhbmNlbFRleHRcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgbWMtYnV0dG9uXG4gICAgICAgICAgICAjYXV0b0ZvY3VzZWRCdXR0b25cbiAgICAgICAgICAgIFtjb2xvcl09XCJtY09rVHlwZVwiXG4gICAgICAgICAgICBbYXR0ci5hdXRvZm9jdXNdPVwidHJ1ZVwiXG4gICAgICAgICAgICAqbmdJZj1cIm1jT2tUZXh0XCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrT2tDYW5jZWwoJ29rJylcIj5cblxuICAgICAgICAgICAge3sgb2tUZXh0IH19XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxidXR0b24gbWMtYnV0dG9uIFtjb2xvcl09XCJ0aGVtZVBhbGV0dGUuU2Vjb25kYXJ5XCIgKm5nSWY9XCJtY0NhbmNlbFRleHRcIiAoY2xpY2spPVwib25DbGlja09rQ2FuY2VsKCdjYW5jZWwnKVwiPlxuICAgICAgICAgICAge3sgY2FuY2VsVGV4dCB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG48IS0tIC9bUHJlZGVmaW5lZF0gQ29uZmlybSBNb2RhbCBDb250ZW50IC0tPlxuIl19
|