valtech-components 2.0.691 → 2.0.693
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/esm2022/lib/components/atoms/avatar/avatar.component.mjs +94 -0
- package/esm2022/lib/components/atoms/avatar/types.mjs +2 -0
- package/esm2022/lib/components/atoms/box/box.component.mjs +88 -0
- package/esm2022/lib/components/atoms/box/types.mjs +2 -0
- package/esm2022/lib/components/atoms/button/button.component.mjs +174 -0
- package/esm2022/lib/components/atoms/button/factory.mjs +217 -0
- package/esm2022/lib/components/atoms/countdown/countdown.component.mjs +340 -0
- package/esm2022/lib/components/atoms/countdown/types.mjs +27 -0
- package/esm2022/lib/components/atoms/display/display.component.mjs +51 -0
- package/esm2022/lib/components/atoms/display/types.mjs +2 -0
- package/esm2022/lib/components/atoms/divider/divider.component.mjs +27 -0
- package/esm2022/lib/components/atoms/divider/types.mjs +2 -0
- package/esm2022/lib/components/atoms/fab/fab.component.mjs +190 -0
- package/esm2022/lib/components/atoms/fab/types.mjs +2 -0
- package/esm2022/lib/components/atoms/horizontal-scroll/horizontal-scroll.component.mjs +82 -0
- package/esm2022/lib/components/atoms/horizontal-scroll/types.mjs +2 -0
- package/esm2022/lib/components/atoms/href/href.component.mjs +62 -0
- package/esm2022/lib/components/atoms/href/types.mjs +2 -0
- package/esm2022/lib/components/atoms/icon/icon.component.mjs +29 -0
- package/esm2022/lib/components/atoms/icon/types.mjs +2 -0
- package/esm2022/lib/components/atoms/image/image.component.mjs +507 -0
- package/esm2022/lib/components/atoms/image/types.mjs +2 -0
- package/esm2022/lib/components/atoms/price-tag/price-tag.component.mjs +235 -0
- package/esm2022/lib/components/atoms/price-tag/types.mjs +15 -0
- package/esm2022/lib/components/atoms/progress-bar/progress-bar.component.mjs +91 -0
- package/esm2022/lib/components/atoms/progress-bar/types.mjs +2 -0
- package/esm2022/lib/components/atoms/progress-ring/progress-ring.component.mjs +149 -0
- package/esm2022/lib/components/atoms/progress-ring/types.mjs +2 -0
- package/esm2022/lib/components/atoms/qr-code/qr-code.component.mjs +394 -0
- package/esm2022/lib/components/atoms/qr-code/types.mjs +2 -0
- package/esm2022/lib/components/atoms/rights-footer/rights-footer.component.mjs +108 -0
- package/esm2022/lib/components/atoms/rights-footer/types.mjs +2 -0
- package/esm2022/lib/components/atoms/skeleton/skeleton.component.mjs +193 -0
- package/esm2022/lib/components/atoms/skeleton/types.mjs +13 -0
- package/esm2022/lib/components/atoms/text/text.component.mjs +132 -0
- package/esm2022/lib/components/atoms/text/types.mjs +2 -0
- package/esm2022/lib/components/atoms/title/title.component.mjs +68 -0
- package/esm2022/lib/components/atoms/title/types.mjs +22 -0
- package/esm2022/lib/components/molecules/accordion/accordion.component.mjs +120 -0
- package/esm2022/lib/components/molecules/accordion/types.mjs +2 -0
- package/esm2022/lib/components/molecules/action-card/action-card.component.mjs +298 -0
- package/esm2022/lib/components/molecules/action-card/types.mjs +11 -0
- package/esm2022/lib/components/molecules/action-header/action-header.component.mjs +26 -0
- package/esm2022/lib/components/molecules/action-header/types.mjs +2 -0
- package/esm2022/lib/components/molecules/ad-slot/ad-slot.component.mjs +274 -0
- package/esm2022/lib/components/molecules/alert-box/alert-box.component.mjs +119 -0
- package/esm2022/lib/components/molecules/alert-box/types.mjs +2 -0
- package/esm2022/lib/components/molecules/breadcrumb/breadcrumb.component.mjs +130 -0
- package/esm2022/lib/components/molecules/breadcrumb/types.mjs +2 -0
- package/esm2022/lib/components/molecules/button-group/button-group.component.mjs +63 -0
- package/esm2022/lib/components/molecules/button-group/types.mjs +2 -0
- package/esm2022/lib/components/molecules/card/card.component.mjs +450 -0
- package/esm2022/lib/components/molecules/card/types.mjs +16 -0
- package/esm2022/lib/components/molecules/check-input/check-input.component.mjs +82 -0
- package/esm2022/lib/components/molecules/chip-group/chip-group.component.mjs +166 -0
- package/esm2022/lib/components/molecules/chip-group/types.mjs +2 -0
- package/esm2022/lib/components/molecules/code-display/code-display.component.mjs +115 -0
- package/esm2022/lib/components/molecules/code-display/types.mjs +2 -0
- package/esm2022/lib/components/molecules/command-display/command-display.component.mjs +49 -0
- package/esm2022/lib/components/molecules/command-display/types.mjs +2 -0
- package/esm2022/lib/components/molecules/comment/comment.component.mjs +618 -0
- package/esm2022/lib/components/molecules/comment/types.mjs +2 -0
- package/esm2022/lib/components/molecules/comment-input/comment-input.component.mjs +41 -0
- package/esm2022/lib/components/molecules/comment-input/types.mjs +2 -0
- package/esm2022/lib/components/molecules/content-loader/content-loader.component.mjs +42 -0
- package/esm2022/lib/components/molecules/content-loader/types.mjs +2 -0
- package/esm2022/lib/components/molecules/content-reaction/content-reaction.component.mjs +218 -0
- package/esm2022/lib/components/molecules/content-reaction/types.mjs +2 -0
- package/esm2022/lib/components/molecules/currency-input/currency-input.component.mjs +347 -0
- package/esm2022/lib/components/molecules/currency-input/types.mjs +18 -0
- package/esm2022/lib/components/molecules/date-input/date-input.component.mjs +148 -0
- package/esm2022/lib/components/molecules/date-input/types.mjs +2 -0
- package/esm2022/lib/components/molecules/date-range-input/date-range-input.component.mjs +416 -0
- package/esm2022/lib/components/molecules/date-range-input/types.mjs +2 -0
- package/esm2022/lib/components/molecules/docs-api-table/docs-api-table.component.mjs +222 -0
- package/esm2022/lib/components/molecules/docs-api-table/types.mjs +11 -0
- package/esm2022/lib/components/molecules/docs-breadcrumb/docs-breadcrumb.component.mjs +144 -0
- package/esm2022/lib/components/molecules/docs-breadcrumb/types.mjs +2 -0
- package/esm2022/lib/components/molecules/docs-callout/docs-callout.component.mjs +60 -0
- package/esm2022/lib/components/molecules/docs-code-example/docs-code-example.component.mjs +255 -0
- package/esm2022/lib/components/molecules/docs-code-example/types.mjs +2 -0
- package/esm2022/lib/components/molecules/docs-nav-links/docs-nav-links.component.mjs +140 -0
- package/esm2022/lib/components/molecules/docs-nav-links/types.mjs +2 -0
- package/esm2022/lib/components/molecules/docs-search/docs-search.component.mjs +268 -0
- package/esm2022/lib/components/molecules/docs-search/types.mjs +2 -0
- package/esm2022/lib/components/molecules/docs-section/docs-section.component.mjs +85 -0
- package/esm2022/lib/components/molecules/docs-section/types.mjs +2 -0
- package/esm2022/lib/components/molecules/email-input/email-input.component.mjs +68 -0
- package/esm2022/lib/components/molecules/expandable-text/expandable-text.component.mjs +77 -0
- package/esm2022/lib/components/molecules/expandable-text/types.mjs +2 -0
- package/esm2022/lib/components/molecules/features-list/features-list.component.mjs +185 -0
- package/esm2022/lib/components/molecules/features-list/types.mjs +11 -0
- package/esm2022/lib/components/molecules/feedback-form/feedback-form.component.mjs +354 -0
- package/esm2022/lib/components/molecules/feedback-form/types.mjs +2 -0
- package/esm2022/lib/components/molecules/file-input/file-input.component.mjs +90 -0
- package/esm2022/lib/components/molecules/file-input/types.mjs +2 -0
- package/esm2022/lib/components/molecules/footer-links/footer-links.component.mjs +391 -0
- package/esm2022/lib/components/molecules/footer-links/types.mjs +2 -0
- package/esm2022/lib/components/molecules/glow-card/glow-card.component.mjs +314 -0
- package/esm2022/lib/components/molecules/glow-card/types.mjs +11 -0
- package/esm2022/lib/components/molecules/hint/hint.component.mjs +90 -0
- package/esm2022/lib/components/molecules/hour-input/hour-input.component.mjs +28 -0
- package/esm2022/lib/components/molecules/image-crop/image-crop.component.mjs +174 -0
- package/esm2022/lib/components/molecules/image-crop/index.mjs +2 -0
- package/esm2022/lib/components/molecules/info/info.component.mjs +49 -0
- package/esm2022/lib/components/molecules/info/types.mjs +2 -0
- package/esm2022/lib/components/molecules/language-selector/language-selector.component.mjs +221 -0
- package/esm2022/lib/components/molecules/language-selector/types.mjs +2 -0
- package/esm2022/lib/components/molecules/layered-card/layered-card.component.mjs +104 -0
- package/esm2022/lib/components/molecules/layered-card/types.mjs +2 -0
- package/esm2022/lib/components/molecules/link/link.component.mjs +64 -0
- package/esm2022/lib/components/molecules/link/types.mjs +2 -0
- package/esm2022/lib/components/molecules/linked-providers/linked-providers.component.mjs +236 -0
- package/esm2022/lib/components/molecules/linked-providers/types.mjs +27 -0
- package/esm2022/lib/components/molecules/links-accordion/links-accordion.component.mjs +185 -0
- package/esm2022/lib/components/molecules/links-accordion/types.mjs +2 -0
- package/esm2022/lib/components/molecules/links-cake/links-cake.component.mjs +51 -0
- package/esm2022/lib/components/molecules/links-cake/types.mjs +2 -0
- package/esm2022/lib/components/molecules/multi-select-search/multi-select-search.component.mjs +488 -0
- package/esm2022/lib/components/molecules/notes-box/notes-box.component.mjs +69 -0
- package/esm2022/lib/components/molecules/notes-box/types.mjs +2 -0
- package/esm2022/lib/components/molecules/number-from-to/number-from-to.component.mjs +143 -0
- package/esm2022/lib/components/molecules/number-from-to/types.mjs +2 -0
- package/esm2022/lib/components/molecules/number-input/number-input.component.mjs +34 -0
- package/esm2022/lib/components/molecules/number-stepper/number-stepper.component.mjs +379 -0
- package/esm2022/lib/components/molecules/number-stepper/types.mjs +2 -0
- package/esm2022/lib/components/molecules/pagination/pagination.component.mjs +253 -0
- package/esm2022/lib/components/molecules/pagination/types.mjs +2 -0
- package/esm2022/lib/components/molecules/participant-card/participant-card.component.mjs +514 -0
- package/esm2022/lib/components/molecules/participant-card/types.mjs +21 -0
- package/esm2022/lib/components/molecules/password-input/password-input.component.mjs +93 -0
- package/esm2022/lib/components/molecules/phone-input/phone-input.component.mjs +365 -0
- package/esm2022/lib/components/molecules/phone-input/types.mjs +19 -0
- package/esm2022/lib/components/molecules/pill/pill.component.mjs +92 -0
- package/esm2022/lib/components/molecules/pill/types.mjs +2 -0
- package/esm2022/lib/components/molecules/pin-input/pin-input.component.mjs +78 -0
- package/esm2022/lib/components/molecules/pin-input/types.mjs +2 -0
- package/esm2022/lib/components/molecules/plain-code-box/plain-code-box.component.mjs +82 -0
- package/esm2022/lib/components/molecules/plain-code-box/types.mjs +2 -0
- package/esm2022/lib/components/molecules/popover-selector/popover-selector.component.mjs +188 -0
- package/esm2022/lib/components/molecules/popover-selector/types.mjs +2 -0
- package/esm2022/lib/components/molecules/progress-status/progress-status.component.mjs +105 -0
- package/esm2022/lib/components/molecules/progress-status/types.mjs +2 -0
- package/esm2022/lib/components/molecules/prompter/prompter.component.mjs +85 -0
- package/esm2022/lib/components/molecules/prompter/types.mjs +2 -0
- package/esm2022/lib/components/molecules/quote-box/quote-box.component.mjs +155 -0
- package/esm2022/lib/components/molecules/radio-input/radio-input.component.mjs +52 -0
- package/esm2022/lib/components/molecules/raffle-status-card/raffle-status-card.component.mjs +476 -0
- package/esm2022/lib/components/molecules/raffle-status-card/types.mjs +23 -0
- package/esm2022/lib/components/molecules/range-input/range-input.component.mjs +127 -0
- package/esm2022/lib/components/molecules/range-input/types.mjs +2 -0
- package/esm2022/lib/components/molecules/rating/rating.component.mjs +166 -0
- package/esm2022/lib/components/molecules/rating/types.mjs +2 -0
- package/esm2022/lib/components/molecules/recap-card/recap-card.component.mjs +78 -0
- package/esm2022/lib/components/molecules/recap-card/types.mjs +2 -0
- package/esm2022/lib/components/molecules/refresher/refresher.component.mjs +271 -0
- package/esm2022/lib/components/molecules/refresher/types.mjs +15 -0
- package/esm2022/lib/components/molecules/searchbar/searchbar.component.mjs +127 -0
- package/esm2022/lib/components/molecules/searchbar/types.mjs +2 -0
- package/esm2022/lib/components/molecules/segment-control/segment-control.component.mjs +137 -0
- package/esm2022/lib/components/molecules/segment-control/types.mjs +2 -0
- package/esm2022/lib/components/molecules/select-input/select-input.component.mjs +130 -0
- package/esm2022/lib/components/molecules/select-search/select-search.component.mjs +420 -0
- package/esm2022/lib/components/molecules/share-buttons/share-buttons.component.mjs +274 -0
- package/esm2022/lib/components/molecules/share-buttons/types.mjs +88 -0
- package/esm2022/lib/components/molecules/stats-card/stats-card.component.mjs +213 -0
- package/esm2022/lib/components/molecules/stats-card/types.mjs +2 -0
- package/esm2022/lib/components/molecules/stepper/stepper.component.mjs +242 -0
- package/esm2022/lib/components/molecules/stepper/types.mjs +2 -0
- package/esm2022/lib/components/molecules/swipe-carousel/swipe-carousel.component.mjs +206 -0
- package/esm2022/lib/components/molecules/swipe-carousel/types.mjs +2 -0
- package/esm2022/lib/components/molecules/tabs/tabs.component.mjs +139 -0
- package/esm2022/lib/components/molecules/tabs/types.mjs +2 -0
- package/esm2022/lib/components/molecules/testimonial-card/testimonial-card.component.mjs +138 -0
- package/esm2022/lib/components/molecules/testimonial-card/types.mjs +2 -0
- package/esm2022/lib/components/molecules/text-input/text-input.component.mjs +77 -0
- package/esm2022/lib/components/molecules/textarea-input/textarea-input.component.mjs +213 -0
- package/esm2022/lib/components/molecules/textarea-input/types.mjs +2 -0
- package/esm2022/lib/components/molecules/ticket-grid/ticket-grid.component.mjs +489 -0
- package/esm2022/lib/components/molecules/ticket-grid/types.mjs +11 -0
- package/esm2022/lib/components/molecules/timeline/timeline.component.mjs +140 -0
- package/esm2022/lib/components/molecules/timeline/types.mjs +2 -0
- package/esm2022/lib/components/molecules/title-block/title-block.component.mjs +102 -0
- package/esm2022/lib/components/molecules/title-block/types.mjs +2 -0
- package/esm2022/lib/components/molecules/toggle-input/toggle-input.component.mjs +93 -0
- package/esm2022/lib/components/molecules/toggle-input/types.mjs +2 -0
- package/esm2022/lib/components/molecules/update-banner/update-banner.component.mjs +112 -0
- package/esm2022/lib/components/molecules/username-input/types.mjs +2 -0
- package/esm2022/lib/components/molecules/username-input/username-input.component.mjs +260 -0
- package/esm2022/lib/components/molecules/winner-display/types.mjs +9 -0
- package/esm2022/lib/components/molecules/winner-display/winner-display.component.mjs +359 -0
- package/esm2022/lib/components/organisms/article/article.component.mjs +573 -0
- package/esm2022/lib/components/organisms/article/types.mjs +183 -0
- package/esm2022/lib/components/organisms/avatar-upload/avatar-upload.component.mjs +372 -0
- package/esm2022/lib/components/organisms/avatar-upload/types.mjs +15 -0
- package/esm2022/lib/components/organisms/banner/banner.component.mjs +111 -0
- package/esm2022/lib/components/organisms/banner/types.mjs +2 -0
- package/esm2022/lib/components/organisms/bottom-nav/bottom-nav.component.mjs +368 -0
- package/esm2022/lib/components/organisms/bottom-nav/types.mjs +18 -0
- package/esm2022/lib/components/organisms/cards-carousel/cards-carousel.component.mjs +61 -0
- package/esm2022/lib/components/organisms/cards-carousel/types.mjs +2 -0
- package/esm2022/lib/components/organisms/comment-section/comment-section.component.mjs +537 -0
- package/esm2022/lib/components/organisms/comment-section/types.mjs +2 -0
- package/esm2022/lib/components/organisms/company-footer/company-footer.component.mjs +76 -0
- package/esm2022/lib/components/organisms/company-footer/types.mjs +2 -0
- package/esm2022/lib/components/organisms/data-table/data-table.component.mjs +1081 -0
- package/esm2022/lib/components/organisms/data-table/types.mjs +13 -0
- package/esm2022/lib/components/organisms/docs-sidebar/docs-sidebar.component.mjs +290 -0
- package/esm2022/lib/components/organisms/docs-sidebar/types.mjs +2 -0
- package/esm2022/lib/components/organisms/docs-toc/docs-toc.component.mjs +307 -0
- package/esm2022/lib/components/organisms/docs-toc/types.mjs +2 -0
- package/esm2022/lib/components/organisms/footer/footer.component.mjs +73 -0
- package/esm2022/lib/components/organisms/footer/types.mjs +2 -0
- package/esm2022/lib/components/organisms/form/factory.mjs +29 -0
- package/esm2022/lib/components/organisms/form/form-footer/form-footer.component.mjs +83 -0
- package/esm2022/lib/components/organisms/form/form.component.mjs +417 -0
- package/esm2022/lib/components/organisms/fun-header/fun-header.component.mjs +225 -0
- package/esm2022/lib/components/organisms/fun-header/types.mjs +2 -0
- package/esm2022/lib/components/organisms/header/header.component.mjs +51 -0
- package/esm2022/lib/components/organisms/header/types.mjs +2 -0
- package/esm2022/lib/components/organisms/infinite-list/infinite-list.component.mjs +620 -0
- package/esm2022/lib/components/organisms/infinite-list/types.mjs +15 -0
- package/esm2022/lib/components/organisms/item-list/item-list.component.mjs +418 -0
- package/esm2022/lib/components/organisms/item-list/types.mjs +2 -0
- package/esm2022/lib/components/organisms/login/login.component.mjs +741 -0
- package/esm2022/lib/components/organisms/login/types.mjs +11 -0
- package/esm2022/lib/components/organisms/menu/menu.component.mjs +206 -0
- package/esm2022/lib/components/organisms/menu/types.mjs +2 -0
- package/esm2022/lib/components/organisms/no-content/no-content.component.mjs +66 -0
- package/esm2022/lib/components/organisms/no-content/types.mjs +2 -0
- package/esm2022/lib/components/organisms/rotating-text/rotating-text.component.mjs +180 -0
- package/esm2022/lib/components/organisms/rotating-text/types.mjs +2 -0
- package/esm2022/lib/components/organisms/tabbed-content/tabbed-content.component.mjs +170 -0
- package/esm2022/lib/components/organisms/tabbed-content/types.mjs +2 -0
- package/esm2022/lib/components/organisms/terminal-404/terminal-404.component.mjs +214 -0
- package/esm2022/lib/components/organisms/terminal-404/types.mjs +2 -0
- package/esm2022/lib/components/organisms/testimonial-carousel/testimonial-carousel.component.mjs +72 -0
- package/esm2022/lib/components/organisms/testimonial-carousel/types.mjs +2 -0
- package/esm2022/lib/components/organisms/toolbar/toolbar.component.mjs +237 -0
- package/esm2022/lib/components/organisms/toolbar/types.mjs +2 -0
- package/esm2022/lib/components/organisms/wizard/types.mjs +10 -0
- package/esm2022/lib/components/organisms/wizard/wizard-footer/wizard-footer.component.mjs +111 -0
- package/esm2022/lib/components/organisms/wizard/wizard.component.mjs +161 -0
- package/esm2022/lib/components/templates/auth-background/auth-background.component.mjs +149 -0
- package/esm2022/lib/components/templates/auth-background/types.mjs +2 -0
- package/esm2022/lib/components/templates/docs-layout/docs-layout.component.mjs +221 -0
- package/esm2022/lib/components/templates/docs-layout/types.mjs +2 -0
- package/esm2022/lib/components/templates/docs-page/docs-page.component.mjs +251 -0
- package/esm2022/lib/components/templates/docs-page/types.mjs +2 -0
- package/esm2022/lib/components/templates/docs-shell/docs-shell.component.mjs +376 -0
- package/esm2022/lib/components/templates/docs-shell/types.mjs +2 -0
- package/esm2022/lib/components/templates/layout/layout.component.mjs +19 -0
- package/esm2022/lib/components/templates/maintenance-page/maintenance-page.component.mjs +153 -0
- package/esm2022/lib/components/templates/maintenance-page/types.mjs +2 -0
- package/esm2022/lib/components/templates/page-content/page-content.component.mjs +193 -0
- package/esm2022/lib/components/templates/page-content/types.mjs +2 -0
- package/esm2022/lib/components/templates/page-template/page-template.component.mjs +188 -0
- package/esm2022/lib/components/templates/page-template/types.mjs +2 -0
- package/esm2022/lib/components/templates/page-wrapper/page-wrapper.component.mjs +192 -0
- package/esm2022/lib/components/templates/page-wrapper/types.mjs +2 -0
- package/esm2022/lib/components/templates/simple/simple.component.mjs +125 -0
- package/esm2022/lib/components/templates/simple/types.mjs +2 -0
- package/esm2022/lib/components/types.mjs +58 -0
- package/esm2022/lib/config/company-footer.config.mjs +109 -0
- package/esm2022/lib/config/index.mjs +5 -0
- package/esm2022/lib/services/ads/ads-loader.service.mjs +120 -0
- package/esm2022/lib/services/ads/ads.service.mjs +236 -0
- package/esm2022/lib/services/ads/config.mjs +81 -0
- package/esm2022/lib/services/ads/index.mjs +13 -0
- package/esm2022/lib/services/ads/types.mjs +23 -0
- package/esm2022/lib/services/app-config/app-config.service.mjs +209 -0
- package/esm2022/lib/services/app-config/config.mjs +47 -0
- package/esm2022/lib/services/app-config/index.mjs +48 -0
- package/esm2022/lib/services/app-config/types.mjs +13 -0
- package/esm2022/lib/services/app-config/version.mjs +85 -0
- package/esm2022/lib/services/auth/auth-state.service.mjs +186 -0
- package/esm2022/lib/services/auth/auth.service.mjs +1087 -0
- package/esm2022/lib/services/auth/config.mjs +77 -0
- package/esm2022/lib/services/auth/device.service.mjs +135 -0
- package/esm2022/lib/services/auth/guards.mjs +194 -0
- package/esm2022/lib/services/auth/index.mjs +92 -0
- package/esm2022/lib/services/auth/interceptor.mjs +122 -0
- package/esm2022/lib/services/auth/oauth-callback.component.mjs +169 -0
- package/esm2022/lib/services/auth/oauth.service.mjs +318 -0
- package/esm2022/lib/services/auth/session.service.mjs +78 -0
- package/esm2022/lib/services/auth/storage.service.mjs +152 -0
- package/esm2022/lib/services/auth/sync.service.mjs +149 -0
- package/esm2022/lib/services/auth/token.service.mjs +122 -0
- package/esm2022/lib/services/auth/types.mjs +30 -0
- package/esm2022/lib/services/confirmation-dialog/confirmation-dialog.service.mjs +180 -0
- package/esm2022/lib/services/confirmation-dialog/types.mjs +14 -0
- package/esm2022/lib/services/docs/docs-navigation.service.mjs +91 -0
- package/esm2022/lib/services/download.service.mjs +80 -0
- package/esm2022/lib/services/feedback/config.mjs +49 -0
- package/esm2022/lib/services/feedback/feedback.service.mjs +296 -0
- package/esm2022/lib/services/feedback/index.mjs +44 -0
- package/esm2022/lib/services/feedback/types.mjs +30 -0
- package/esm2022/lib/services/firebase/analytics-error-handler.mjs +141 -0
- package/esm2022/lib/services/firebase/analytics-router-tracker.mjs +99 -0
- package/esm2022/lib/services/firebase/analytics-types.mjs +7 -0
- package/esm2022/lib/services/firebase/analytics.service.mjs +620 -0
- package/esm2022/lib/services/firebase/config.mjs +131 -0
- package/esm2022/lib/services/firebase/firebase.service.mjs +456 -0
- package/esm2022/lib/services/firebase/firestore-collection.mjs +262 -0
- package/esm2022/lib/services/firebase/firestore.service.mjs +536 -0
- package/esm2022/lib/services/firebase/index.mjs +56 -0
- package/esm2022/lib/services/firebase/messaging.service.mjs +597 -0
- package/esm2022/lib/services/firebase/notifications.service.mjs +210 -0
- package/esm2022/lib/services/firebase/shared-config.mjs +114 -0
- package/esm2022/lib/services/firebase/storage.service.mjs +472 -0
- package/esm2022/lib/services/firebase/types.mjs +18 -0
- package/esm2022/lib/services/firebase/utils/path-builder.mjs +195 -0
- package/esm2022/lib/services/firebase/utils/query-builder.mjs +302 -0
- package/esm2022/lib/services/i18n/config.mjs +110 -0
- package/esm2022/lib/services/i18n/default-content.mjs +563 -0
- package/esm2022/lib/services/i18n/i18n.service.mjs +196 -0
- package/esm2022/lib/services/i18n/index.mjs +13 -0
- package/esm2022/lib/services/i18n/input-i18n.helper.mjs +97 -0
- package/esm2022/lib/services/i18n/translate.pipe.mjs +50 -0
- package/esm2022/lib/services/i18n/types.mjs +15 -0
- package/esm2022/lib/services/icons.service.mjs +76 -0
- package/esm2022/lib/services/image/image.service.mjs +244 -0
- package/esm2022/lib/services/image/index.mjs +3 -0
- package/esm2022/lib/services/image/types.mjs +13 -0
- package/esm2022/lib/services/in-app-browser.service.mjs +35 -0
- package/esm2022/lib/services/link-processor.service.mjs +259 -0
- package/esm2022/lib/services/local-storage.service.mjs +37 -0
- package/esm2022/lib/services/locale.service.mjs +75 -0
- package/esm2022/lib/services/meta/index.mjs +3 -0
- package/esm2022/lib/services/meta/meta.service.mjs +63 -0
- package/esm2022/lib/services/meta/types.mjs +2 -0
- package/esm2022/lib/services/modal/modal.service.mjs +212 -0
- package/esm2022/lib/services/modal/simple-modal-content.component.mjs +133 -0
- package/esm2022/lib/services/modal/types.mjs +26 -0
- package/esm2022/lib/services/navigation/index.mjs +3 -0
- package/esm2022/lib/services/navigation/navigation.service.mjs +216 -0
- package/esm2022/lib/services/navigation/types.mjs +16 -0
- package/esm2022/lib/services/pagination/index.mjs +5 -0
- package/esm2022/lib/services/pagination/pagination.service.mjs +218 -0
- package/esm2022/lib/services/pagination/types.mjs +14 -0
- package/esm2022/lib/services/presets/config.mjs +46 -0
- package/esm2022/lib/services/presets/index.mjs +5 -0
- package/esm2022/lib/services/presets/preset.service.mjs +104 -0
- package/esm2022/lib/services/presets/types.mjs +2 -0
- package/esm2022/lib/services/qr-generator/qr-generator.service.mjs +341 -0
- package/esm2022/lib/services/qr-generator/types.mjs +46 -0
- package/esm2022/lib/services/skeleton/config.mjs +79 -0
- package/esm2022/lib/services/skeleton/directives/loading.directive.mjs +215 -0
- package/esm2022/lib/services/skeleton/index.mjs +16 -0
- package/esm2022/lib/services/skeleton/skeleton.service.mjs +198 -0
- package/esm2022/lib/services/skeleton/templates/detail-skeleton.component.mjs +223 -0
- package/esm2022/lib/services/skeleton/templates/form-skeleton.component.mjs +127 -0
- package/esm2022/lib/services/skeleton/templates/grid-skeleton.component.mjs +154 -0
- package/esm2022/lib/services/skeleton/templates/list-skeleton.component.mjs +110 -0
- package/esm2022/lib/services/skeleton/templates/profile-skeleton.component.mjs +207 -0
- package/esm2022/lib/services/skeleton/templates/table-skeleton.component.mjs +116 -0
- package/esm2022/lib/services/skeleton/types.mjs +11 -0
- package/esm2022/lib/services/theme.service.mjs +144 -0
- package/esm2022/lib/services/toast.service.mjs +47 -0
- package/esm2022/lib/services/types.mjs +5 -0
- package/esm2022/lib/shared/constants/storage.mjs +3 -0
- package/esm2022/lib/shared/pipes/process-links.pipe.mjs +69 -0
- package/esm2022/lib/shared/utils/dom.mjs +27 -0
- package/esm2022/lib/shared/utils/form-defaults.mjs +112 -0
- package/esm2022/lib/shared/utils/styles.mjs +37 -0
- package/esm2022/lib/shared/utils/text.mjs +12 -0
- package/esm2022/lib/version.mjs +6 -0
- package/esm2022/public-api.mjs +333 -0
- package/esm2022/valtech-components.mjs +5 -0
- package/fesm2022/valtech-components.mjs +42069 -0
- package/fesm2022/valtech-components.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/components/atoms/avatar/avatar.component.d.ts +36 -0
- package/lib/components/atoms/avatar/types.d.ts +15 -0
- package/lib/components/atoms/box/box.component.d.ts +26 -0
- package/lib/components/atoms/box/types.d.ts +19 -0
- package/lib/components/atoms/button/button.component.d.ts +63 -0
- package/lib/components/atoms/button/factory.d.ts +71 -0
- package/lib/components/atoms/countdown/countdown.component.d.ts +38 -0
- package/lib/components/atoms/countdown/types.d.ts +108 -0
- package/lib/components/atoms/display/display.component.d.ts +19 -0
- package/lib/components/atoms/display/types.d.ts +33 -0
- package/lib/components/atoms/divider/divider.component.d.ts +27 -0
- package/lib/components/atoms/divider/types.d.ts +12 -0
- package/lib/components/atoms/fab/fab.component.d.ts +36 -0
- package/lib/components/atoms/fab/types.d.ts +45 -0
- package/lib/components/atoms/horizontal-scroll/horizontal-scroll.component.d.ts +41 -0
- package/lib/components/atoms/horizontal-scroll/types.d.ts +13 -0
- package/lib/components/atoms/href/href.component.d.ts +25 -0
- package/lib/components/atoms/href/types.d.ts +19 -0
- package/lib/components/atoms/icon/icon.component.d.ts +18 -0
- package/lib/components/atoms/icon/types.d.ts +13 -0
- package/lib/components/atoms/image/image.component.d.ts +41 -0
- package/lib/components/atoms/image/types.d.ts +37 -0
- package/lib/components/atoms/price-tag/price-tag.component.d.ts +15 -0
- package/lib/components/atoms/price-tag/types.d.ts +59 -0
- package/lib/components/atoms/progress-bar/progress-bar.component.d.ts +35 -0
- package/lib/components/atoms/progress-bar/types.d.ts +19 -0
- package/lib/components/atoms/progress-ring/progress-ring.component.d.ts +20 -0
- package/lib/components/atoms/progress-ring/types.d.ts +24 -0
- package/lib/components/atoms/qr-code/qr-code.component.d.ts +33 -0
- package/lib/components/atoms/qr-code/types.d.ts +124 -0
- package/lib/components/atoms/rights-footer/rights-footer.component.d.ts +53 -0
- package/lib/components/atoms/rights-footer/types.d.ts +21 -0
- package/lib/components/atoms/skeleton/skeleton.component.d.ts +12 -0
- package/lib/components/atoms/skeleton/types.d.ts +29 -0
- package/lib/components/atoms/text/text.component.d.ts +33 -0
- package/lib/components/atoms/text/types.d.ts +42 -0
- package/lib/components/atoms/title/title.component.d.ts +21 -0
- package/lib/components/atoms/title/types.d.ts +36 -0
- package/lib/components/molecules/accordion/accordion.component.d.ts +18 -0
- package/lib/components/molecules/accordion/types.d.ts +47 -0
- package/lib/components/molecules/action-card/action-card.component.d.ts +90 -0
- package/lib/components/molecules/action-card/types.d.ts +83 -0
- package/lib/components/molecules/action-header/action-header.component.d.ts +7 -0
- package/lib/components/molecules/action-header/types.d.ts +6 -0
- package/lib/components/molecules/ad-slot/ad-slot.component.d.ts +69 -0
- package/lib/components/molecules/alert-box/alert-box.component.d.ts +39 -0
- package/lib/components/molecules/alert-box/types.d.ts +37 -0
- package/lib/components/molecules/breadcrumb/breadcrumb.component.d.ts +22 -0
- package/lib/components/molecules/breadcrumb/types.d.ts +45 -0
- package/lib/components/molecules/button-group/button-group.component.d.ts +23 -0
- package/lib/components/molecules/button-group/types.d.ts +13 -0
- package/lib/components/molecules/card/card.component.d.ts +49 -0
- package/lib/components/molecules/card/types.d.ts +32 -0
- package/lib/components/molecules/check-input/check-input.component.d.ts +36 -0
- package/lib/components/molecules/chip-group/chip-group.component.d.ts +22 -0
- package/lib/components/molecules/chip-group/types.d.ts +65 -0
- package/lib/components/molecules/code-display/code-display.component.d.ts +24 -0
- package/lib/components/molecules/code-display/types.d.ts +10 -0
- package/lib/components/molecules/command-display/command-display.component.d.ts +11 -0
- package/lib/components/molecules/command-display/types.d.ts +3 -0
- package/lib/components/molecules/comment/comment.component.d.ts +42 -0
- package/lib/components/molecules/comment/types.d.ts +171 -0
- package/lib/components/molecules/comment-input/comment-input.component.d.ts +16 -0
- package/lib/components/molecules/comment-input/types.d.ts +59 -0
- package/lib/components/molecules/content-loader/content-loader.component.d.ts +18 -0
- package/lib/components/molecules/content-loader/types.d.ts +15 -0
- package/lib/components/molecules/content-reaction/content-reaction.component.d.ts +58 -0
- package/lib/components/molecules/content-reaction/types.d.ts +77 -0
- package/lib/components/molecules/currency-input/currency-input.component.d.ts +40 -0
- package/lib/components/molecules/currency-input/types.d.ts +96 -0
- package/lib/components/molecules/date-input/date-input.component.d.ts +40 -0
- package/lib/components/molecules/date-input/types.d.ts +74 -0
- package/lib/components/molecules/date-range-input/date-range-input.component.d.ts +50 -0
- package/lib/components/molecules/date-range-input/types.d.ts +109 -0
- package/lib/components/molecules/docs-api-table/docs-api-table.component.d.ts +41 -0
- package/lib/components/molecules/docs-api-table/types.d.ts +62 -0
- package/lib/components/molecules/docs-breadcrumb/docs-breadcrumb.component.d.ts +31 -0
- package/lib/components/molecules/docs-breadcrumb/types.d.ts +20 -0
- package/lib/components/molecules/docs-callout/docs-callout.component.d.ts +17 -0
- package/lib/components/molecules/docs-code-example/docs-code-example.component.d.ts +45 -0
- package/lib/components/molecules/docs-code-example/types.d.ts +63 -0
- package/lib/components/molecules/docs-nav-links/docs-nav-links.component.d.ts +30 -0
- package/lib/components/molecules/docs-nav-links/types.d.ts +31 -0
- package/lib/components/molecules/docs-search/docs-search.component.d.ts +47 -0
- package/lib/components/molecules/docs-search/types.d.ts +27 -0
- package/lib/components/molecules/docs-section/docs-section.component.d.ts +29 -0
- package/lib/components/molecules/docs-section/types.d.ts +27 -0
- package/lib/components/molecules/email-input/email-input.component.d.ts +34 -0
- package/lib/components/molecules/expandable-text/expandable-text.component.d.ts +23 -0
- package/lib/components/molecules/expandable-text/types.d.ts +14 -0
- package/lib/components/molecules/features-list/features-list.component.d.ts +66 -0
- package/lib/components/molecules/features-list/types.d.ts +36 -0
- package/lib/components/molecules/feedback-form/feedback-form.component.d.ts +58 -0
- package/lib/components/molecules/feedback-form/types.d.ts +54 -0
- package/lib/components/molecules/file-input/file-input.component.d.ts +25 -0
- package/lib/components/molecules/file-input/types.d.ts +72 -0
- package/lib/components/molecules/footer-links/footer-links.component.d.ts +47 -0
- package/lib/components/molecules/footer-links/types.d.ts +50 -0
- package/lib/components/molecules/glow-card/glow-card.component.d.ts +60 -0
- package/lib/components/molecules/glow-card/types.d.ts +94 -0
- package/lib/components/molecules/hint/hint.component.d.ts +19 -0
- package/lib/components/molecules/hour-input/hour-input.component.d.ts +15 -0
- package/lib/components/molecules/image-crop/image-crop.component.d.ts +59 -0
- package/lib/components/molecules/info/info.component.d.ts +9 -0
- package/lib/components/molecules/info/types.d.ts +10 -0
- package/lib/components/molecules/language-selector/language-selector.component.d.ts +40 -0
- package/lib/components/molecules/language-selector/types.d.ts +82 -0
- package/lib/components/molecules/layered-card/layered-card.component.d.ts +10 -0
- package/lib/components/molecules/layered-card/types.d.ts +15 -0
- package/lib/components/molecules/link/link.component.d.ts +24 -0
- package/lib/components/molecules/link/types.d.ts +19 -0
- package/lib/components/molecules/linked-providers/linked-providers.component.d.ts +30 -0
- package/lib/components/molecules/linked-providers/types.d.ts +38 -0
- package/lib/components/molecules/links-accordion/links-accordion.component.d.ts +61 -0
- package/lib/components/molecules/links-accordion/types.d.ts +39 -0
- package/lib/components/molecules/links-cake/links-cake.component.d.ts +17 -0
- package/lib/components/molecules/links-cake/types.d.ts +13 -0
- package/lib/components/molecules/multi-select-search/multi-select-search.component.d.ts +76 -0
- package/lib/components/molecules/notes-box/notes-box.component.d.ts +21 -0
- package/lib/components/molecules/notes-box/types.d.ts +21 -0
- package/lib/components/molecules/number-from-to/number-from-to.component.d.ts +27 -0
- package/lib/components/molecules/number-from-to/types.d.ts +76 -0
- package/lib/components/molecules/number-input/number-input.component.d.ts +16 -0
- package/lib/components/molecules/number-stepper/number-stepper.component.d.ts +38 -0
- package/lib/components/molecules/number-stepper/types.d.ts +88 -0
- package/lib/components/molecules/pagination/pagination.component.d.ts +15 -0
- package/lib/components/molecules/pagination/types.d.ts +41 -0
- package/lib/components/molecules/participant-card/participant-card.component.d.ts +34 -0
- package/lib/components/molecules/participant-card/types.d.ts +132 -0
- package/lib/components/molecules/password-input/password-input.component.d.ts +37 -0
- package/lib/components/molecules/phone-input/phone-input.component.d.ts +59 -0
- package/lib/components/molecules/phone-input/types.d.ts +98 -0
- package/lib/components/molecules/pill/pill.component.d.ts +33 -0
- package/lib/components/molecules/pill/types.d.ts +9 -0
- package/lib/components/molecules/pin-input/pin-input.component.d.ts +21 -0
- package/lib/components/molecules/pin-input/types.d.ts +69 -0
- package/lib/components/molecules/plain-code-box/plain-code-box.component.d.ts +22 -0
- package/lib/components/molecules/plain-code-box/types.d.ts +10 -0
- package/lib/components/molecules/popover-selector/popover-selector.component.d.ts +42 -0
- package/lib/components/molecules/popover-selector/types.d.ts +69 -0
- package/lib/components/molecules/progress-status/progress-status.component.d.ts +23 -0
- package/lib/components/molecules/progress-status/types.d.ts +20 -0
- package/lib/components/molecules/prompter/prompter.component.d.ts +10 -0
- package/lib/components/molecules/prompter/types.d.ts +25 -0
- package/lib/components/molecules/quote-box/quote-box.component.d.ts +26 -0
- package/lib/components/molecules/radio-input/radio-input.component.d.ts +15 -0
- package/lib/components/molecules/raffle-status-card/raffle-status-card.component.d.ts +21 -0
- package/lib/components/molecules/raffle-status-card/types.d.ts +108 -0
- package/lib/components/molecules/range-input/range-input.component.d.ts +25 -0
- package/lib/components/molecules/range-input/types.d.ts +59 -0
- package/lib/components/molecules/rating/rating.component.d.ts +23 -0
- package/lib/components/molecules/rating/types.d.ts +41 -0
- package/lib/components/molecules/recap-card/recap-card.component.d.ts +36 -0
- package/lib/components/molecules/recap-card/types.d.ts +30 -0
- package/lib/components/molecules/refresher/refresher.component.d.ts +84 -0
- package/lib/components/molecules/refresher/types.d.ts +86 -0
- package/lib/components/molecules/searchbar/searchbar.component.d.ts +43 -0
- package/lib/components/molecules/searchbar/types.d.ts +33 -0
- package/lib/components/molecules/segment-control/segment-control.component.d.ts +35 -0
- package/lib/components/molecules/segment-control/types.d.ts +46 -0
- package/lib/components/molecules/select-input/select-input.component.d.ts +48 -0
- package/lib/components/molecules/select-search/select-search.component.d.ts +76 -0
- package/lib/components/molecules/share-buttons/share-buttons.component.d.ts +22 -0
- package/lib/components/molecules/share-buttons/types.d.ts +108 -0
- package/lib/components/molecules/stats-card/stats-card.component.d.ts +20 -0
- package/lib/components/molecules/stats-card/types.d.ts +60 -0
- package/lib/components/molecules/stepper/stepper.component.d.ts +31 -0
- package/lib/components/molecules/stepper/types.d.ts +66 -0
- package/lib/components/molecules/swipe-carousel/swipe-carousel.component.d.ts +66 -0
- package/lib/components/molecules/swipe-carousel/types.d.ts +35 -0
- package/lib/components/molecules/tabs/tabs.component.d.ts +34 -0
- package/lib/components/molecules/tabs/types.d.ts +45 -0
- package/lib/components/molecules/testimonial-card/testimonial-card.component.d.ts +41 -0
- package/lib/components/molecules/testimonial-card/types.d.ts +25 -0
- package/lib/components/molecules/text-input/text-input.component.d.ts +42 -0
- package/lib/components/molecules/textarea-input/textarea-input.component.d.ts +46 -0
- package/lib/components/molecules/textarea-input/types.d.ts +74 -0
- package/lib/components/molecules/ticket-grid/ticket-grid.component.d.ts +40 -0
- package/lib/components/molecules/ticket-grid/types.d.ts +122 -0
- package/lib/components/molecules/timeline/timeline.component.d.ts +14 -0
- package/lib/components/molecules/timeline/types.d.ts +39 -0
- package/lib/components/molecules/title-block/title-block.component.d.ts +12 -0
- package/lib/components/molecules/title-block/types.d.ts +15 -0
- package/lib/components/molecules/toggle-input/toggle-input.component.d.ts +39 -0
- package/lib/components/molecules/toggle-input/types.d.ts +30 -0
- package/lib/components/molecules/update-banner/update-banner.component.d.ts +42 -0
- package/lib/components/molecules/username-input/types.d.ts +34 -0
- package/lib/components/molecules/username-input/username-input.component.d.ts +45 -0
- package/lib/components/molecules/winner-display/types.d.ts +103 -0
- package/lib/components/molecules/winner-display/winner-display.component.d.ts +36 -0
- package/lib/components/organisms/article/article.component.d.ts +108 -0
- package/lib/components/organisms/article/types.d.ts +359 -0
- package/lib/components/organisms/avatar-upload/avatar-upload.component.d.ts +84 -0
- package/lib/components/organisms/avatar-upload/types.d.ts +62 -0
- package/lib/components/organisms/banner/banner.component.d.ts +16 -0
- package/lib/components/organisms/banner/types.d.ts +29 -0
- package/lib/components/organisms/bottom-nav/bottom-nav.component.d.ts +88 -0
- package/lib/components/organisms/bottom-nav/types.d.ts +118 -0
- package/lib/components/organisms/cards-carousel/cards-carousel.component.d.ts +30 -0
- package/lib/components/organisms/cards-carousel/types.d.ts +11 -0
- package/lib/components/organisms/comment-section/comment-section.component.d.ts +50 -0
- package/lib/components/organisms/comment-section/types.d.ts +144 -0
- package/lib/components/organisms/company-footer/company-footer.component.d.ts +37 -0
- package/lib/components/organisms/company-footer/types.d.ts +15 -0
- package/lib/components/organisms/data-table/data-table.component.d.ts +63 -0
- package/lib/components/organisms/data-table/types.d.ts +219 -0
- package/lib/components/organisms/docs-sidebar/docs-sidebar.component.d.ts +51 -0
- package/lib/components/organisms/docs-sidebar/types.d.ts +93 -0
- package/lib/components/organisms/docs-toc/docs-toc.component.d.ts +62 -0
- package/lib/components/organisms/docs-toc/types.d.ts +62 -0
- package/lib/components/organisms/footer/footer.component.d.ts +36 -0
- package/lib/components/organisms/footer/types.d.ts +16 -0
- package/lib/components/organisms/form/factory.d.ts +17 -0
- package/lib/components/organisms/form/form-footer/form-footer.component.d.ts +17 -0
- package/lib/components/organisms/form/form.component.d.ts +48 -0
- package/lib/components/organisms/fun-header/fun-header.component.d.ts +72 -0
- package/lib/components/organisms/fun-header/types.d.ts +28 -0
- package/lib/components/organisms/header/header.component.d.ts +22 -0
- package/lib/components/organisms/header/types.d.ts +16 -0
- package/lib/components/organisms/infinite-list/infinite-list.component.d.ts +113 -0
- package/lib/components/organisms/infinite-list/types.d.ts +197 -0
- package/lib/components/organisms/item-list/item-list.component.d.ts +43 -0
- package/lib/components/organisms/item-list/types.d.ts +126 -0
- package/lib/components/organisms/login/login.component.d.ts +79 -0
- package/lib/components/organisms/login/types.d.ts +70 -0
- package/lib/components/organisms/menu/menu.component.d.ts +44 -0
- package/lib/components/organisms/menu/types.d.ts +23 -0
- package/lib/components/organisms/no-content/no-content.component.d.ts +14 -0
- package/lib/components/organisms/no-content/types.d.ts +17 -0
- package/lib/components/organisms/rotating-text/rotating-text.component.d.ts +47 -0
- package/lib/components/organisms/rotating-text/types.d.ts +28 -0
- package/lib/components/organisms/tabbed-content/tabbed-content.component.d.ts +65 -0
- package/lib/components/organisms/tabbed-content/types.d.ts +53 -0
- package/lib/components/organisms/terminal-404/terminal-404.component.d.ts +42 -0
- package/lib/components/organisms/terminal-404/types.d.ts +22 -0
- package/lib/components/organisms/testimonial-carousel/testimonial-carousel.component.d.ts +33 -0
- package/lib/components/organisms/testimonial-carousel/types.d.ts +8 -0
- package/lib/components/organisms/toolbar/toolbar.component.d.ts +85 -0
- package/lib/components/organisms/toolbar/types.d.ts +31 -0
- package/lib/components/organisms/wizard/types.d.ts +42 -0
- package/lib/components/organisms/wizard/wizard-footer/wizard-footer.component.d.ts +23 -0
- package/lib/components/organisms/wizard/wizard.component.d.ts +27 -0
- package/lib/components/templates/auth-background/auth-background.component.d.ts +59 -0
- package/lib/components/templates/auth-background/types.d.ts +30 -0
- package/lib/components/templates/docs-layout/docs-layout.component.d.ts +42 -0
- package/lib/components/templates/docs-layout/types.d.ts +39 -0
- package/lib/components/templates/docs-page/docs-page.component.d.ts +61 -0
- package/lib/components/templates/docs-page/types.d.ts +121 -0
- package/lib/components/templates/docs-shell/docs-shell.component.d.ts +33 -0
- package/lib/components/templates/docs-shell/types.d.ts +152 -0
- package/lib/components/templates/layout/layout.component.d.ts +5 -0
- package/lib/components/templates/maintenance-page/maintenance-page.component.d.ts +57 -0
- package/lib/components/templates/maintenance-page/types.d.ts +12 -0
- package/lib/components/templates/page-content/page-content.component.d.ts +107 -0
- package/lib/components/templates/page-content/types.d.ts +27 -0
- package/lib/components/templates/page-template/page-template.component.d.ts +54 -0
- package/lib/components/templates/page-template/types.d.ts +17 -0
- package/lib/components/templates/page-wrapper/page-wrapper.component.d.ts +89 -0
- package/lib/components/templates/page-wrapper/types.d.ts +19 -0
- package/lib/components/templates/simple/simple.component.d.ts +14 -0
- package/lib/components/templates/simple/types.d.ts +10 -0
- package/lib/components/types.d.ts +289 -0
- package/lib/config/company-footer.config.d.ts +98 -0
- package/lib/services/ads/ads-loader.service.d.ts +41 -0
- package/lib/services/ads/ads.service.d.ts +99 -0
- package/lib/services/ads/config.d.ts +53 -0
- package/lib/services/ads/index.d.ts +9 -0
- package/lib/services/ads/types.d.ts +106 -0
- package/lib/services/app-config/app-config.service.d.ts +115 -0
- package/lib/services/app-config/config.d.ts +31 -0
- package/lib/services/app-config/index.d.ts +47 -0
- package/lib/services/app-config/types.d.ts +54 -0
- package/lib/services/app-config/version.d.ts +64 -0
- package/lib/services/auth/auth-state.service.d.ts +92 -0
- package/lib/services/auth/auth.service.d.ts +401 -0
- package/lib/services/auth/config.d.ts +38 -0
- package/lib/services/auth/device.service.d.ts +101 -0
- package/lib/services/auth/guards.d.ts +123 -0
- package/lib/services/auth/index.d.ts +83 -0
- package/lib/services/auth/interceptor.d.ts +22 -0
- package/lib/services/auth/oauth-callback.component.d.ts +34 -0
- package/lib/services/auth/oauth.service.d.ts +99 -0
- package/lib/services/auth/session.service.d.ts +60 -0
- package/lib/services/auth/storage.service.d.ts +52 -0
- package/lib/services/auth/sync.service.d.ts +49 -0
- package/lib/services/auth/token.service.d.ts +57 -0
- package/lib/services/auth/types.d.ts +842 -0
- package/lib/services/confirmation-dialog/confirmation-dialog.service.d.ts +71 -0
- package/lib/services/confirmation-dialog/types.d.ts +61 -0
- package/lib/services/docs/docs-navigation.service.d.ts +51 -0
- package/lib/services/download.service.d.ts +21 -0
- package/lib/services/feedback/config.d.ts +35 -0
- package/lib/services/feedback/feedback.service.d.ts +134 -0
- package/lib/services/feedback/index.d.ts +40 -0
- package/lib/services/feedback/types.d.ts +173 -0
- package/lib/services/firebase/analytics-error-handler.d.ts +54 -0
- package/lib/services/firebase/analytics-router-tracker.d.ts +51 -0
- package/lib/services/firebase/analytics-types.d.ts +221 -0
- package/lib/services/firebase/analytics.service.d.ts +256 -0
- package/lib/services/firebase/config.d.ts +49 -0
- package/lib/services/firebase/firebase.service.d.ts +251 -0
- package/lib/services/firebase/firestore-collection.d.ts +180 -0
- package/lib/services/firebase/firestore.service.d.ts +312 -0
- package/lib/services/firebase/index.d.ts +44 -0
- package/lib/services/firebase/messaging.service.d.ts +293 -0
- package/lib/services/firebase/notifications.service.d.ts +126 -0
- package/lib/services/firebase/shared-config.d.ts +118 -0
- package/lib/services/firebase/storage.service.d.ts +238 -0
- package/lib/services/firebase/types.d.ts +374 -0
- package/lib/services/firebase/utils/path-builder.d.ts +132 -0
- package/lib/services/firebase/utils/query-builder.d.ts +210 -0
- package/lib/services/i18n/config.d.ts +29 -0
- package/lib/services/i18n/default-content.d.ts +30 -0
- package/lib/services/i18n/i18n.service.d.ts +112 -0
- package/lib/services/i18n/index.d.ts +6 -0
- package/lib/services/i18n/input-i18n.helper.d.ts +70 -0
- package/lib/services/i18n/translate.pipe.d.ts +36 -0
- package/lib/services/i18n/types.d.ts +93 -0
- package/lib/services/icons.service.d.ts +9 -0
- package/lib/services/image/image.service.d.ts +76 -0
- package/lib/services/image/types.d.ts +74 -0
- package/lib/services/in-app-browser.service.d.ts +16 -0
- package/lib/services/link-processor.service.d.ts +104 -0
- package/lib/services/local-storage.service.d.ts +27 -0
- package/lib/services/locale.service.d.ts +52 -0
- package/lib/services/meta/meta.service.d.ts +23 -0
- package/lib/services/meta/types.d.ts +12 -0
- package/lib/services/modal/modal.service.d.ts +100 -0
- package/lib/services/modal/simple-modal-content.component.d.ts +19 -0
- package/lib/services/modal/types.d.ts +155 -0
- package/lib/services/navigation/navigation.service.d.ts +134 -0
- package/lib/services/navigation/types.d.ts +67 -0
- package/lib/services/pagination/index.d.ts +2 -0
- package/lib/services/pagination/pagination.service.d.ts +43 -0
- package/lib/services/pagination/types.d.ts +113 -0
- package/lib/services/presets/config.d.ts +32 -0
- package/lib/services/presets/index.d.ts +3 -0
- package/lib/services/presets/preset.service.d.ts +69 -0
- package/lib/services/presets/types.d.ts +39 -0
- package/lib/services/qr-generator/qr-generator.service.d.ts +115 -0
- package/lib/services/qr-generator/types.d.ts +141 -0
- package/lib/services/skeleton/config.d.ts +30 -0
- package/lib/services/skeleton/directives/loading.directive.d.ts +71 -0
- package/lib/services/skeleton/index.d.ts +10 -0
- package/lib/services/skeleton/skeleton.service.d.ts +127 -0
- package/lib/services/skeleton/templates/detail-skeleton.component.d.ts +18 -0
- package/lib/services/skeleton/templates/form-skeleton.component.d.ts +22 -0
- package/lib/services/skeleton/templates/grid-skeleton.component.d.ts +18 -0
- package/lib/services/skeleton/templates/list-skeleton.component.d.ts +17 -0
- package/lib/services/skeleton/templates/profile-skeleton.component.d.ts +20 -0
- package/lib/services/skeleton/templates/table-skeleton.component.d.ts +17 -0
- package/lib/services/skeleton/types.d.ts +111 -0
- package/lib/services/theme.service.d.ts +70 -0
- package/lib/services/toast.service.d.ts +22 -0
- package/lib/services/types.d.ts +1 -0
- package/lib/shared/constants/storage.d.ts +2 -0
- package/lib/shared/pipes/process-links.pipe.d.ts +55 -0
- package/lib/shared/utils/dom.d.ts +13 -0
- package/lib/shared/utils/form-defaults.d.ts +30 -0
- package/lib/shared/utils/styles.d.ts +13 -0
- package/lib/shared/utils/text.d.ts +11 -0
- package/lib/version.d.ts +5 -0
- package/package.json +16 -64
- package/public-api.d.ts +295 -0
- package/.editorconfig +0 -16
- package/.prettierignore +0 -6
- package/.prettierrc +0 -30
- package/.storybook/main.ts +0 -21
- package/.storybook/preview-body.html +0 -60
- package/.storybook/preview-head.html +0 -48
- package/.storybook/preview.ts +0 -52
- package/.storybook/tsconfig.json +0 -12
- package/I18N-COMPONENTS-MIGRATION.md +0 -496
- package/angular.json +0 -60
- package/ng-package.json +0 -16
- package/scripts/publish.sh +0 -30
- package/scripts/update-apps.sh +0 -94
- package/src/lib/components/atoms/avatar/avatar.component.scss +0 -31
- package/src/lib/components/atoms/avatar/avatar.component.ts +0 -95
- package/src/lib/components/atoms/avatar/avatar.stories.ts +0 -243
- package/src/lib/components/atoms/avatar/types.ts +0 -15
- package/src/lib/components/atoms/box/box.component.scss +0 -57
- package/src/lib/components/atoms/box/box.component.ts +0 -77
- package/src/lib/components/atoms/box/box.stories.ts +0 -280
- package/src/lib/components/atoms/box/types.ts +0 -20
- package/src/lib/components/atoms/button/button.component.scss +0 -20
- package/src/lib/components/atoms/button/button.component.ts +0 -174
- package/src/lib/components/atoms/button/button.stories.ts +0 -293
- package/src/lib/components/atoms/button/factory.ts +0 -444
- package/src/lib/components/atoms/countdown/countdown.component.scss +0 -256
- package/src/lib/components/atoms/countdown/countdown.component.ts +0 -293
- package/src/lib/components/atoms/countdown/countdown.stories.ts +0 -316
- package/src/lib/components/atoms/countdown/types.ts +0 -144
- package/src/lib/components/atoms/display/display.component.scss +0 -17
- package/src/lib/components/atoms/display/display.component.ts +0 -54
- package/src/lib/components/atoms/display/display.stories.ts +0 -185
- package/src/lib/components/atoms/display/types.ts +0 -35
- package/src/lib/components/atoms/divider/divider.component.scss +0 -62
- package/src/lib/components/atoms/divider/divider.component.ts +0 -35
- package/src/lib/components/atoms/divider/divider.stories.ts +0 -202
- package/src/lib/components/atoms/divider/types.ts +0 -12
- package/src/lib/components/atoms/fab/fab.component.scss +0 -26
- package/src/lib/components/atoms/fab/fab.component.ts +0 -166
- package/src/lib/components/atoms/fab/fab.stories.ts +0 -360
- package/src/lib/components/atoms/fab/types.ts +0 -47
- package/src/lib/components/atoms/horizontal-scroll/horizontal-scroll.component.scss +0 -39
- package/src/lib/components/atoms/horizontal-scroll/horizontal-scroll.component.ts +0 -67
- package/src/lib/components/atoms/horizontal-scroll/horizontal-scroll.stories.ts +0 -351
- package/src/lib/components/atoms/horizontal-scroll/types.ts +0 -13
- package/src/lib/components/atoms/href/href.component.scss +0 -25
- package/src/lib/components/atoms/href/href.component.ts +0 -64
- package/src/lib/components/atoms/href/href.stories.ts +0 -214
- package/src/lib/components/atoms/href/types.ts +0 -20
- package/src/lib/components/atoms/icon/icon.component.scss +0 -33
- package/src/lib/components/atoms/icon/icon.component.ts +0 -38
- package/src/lib/components/atoms/icon/icon.stories.ts +0 -160
- package/src/lib/components/atoms/icon/types.ts +0 -14
- package/src/lib/components/atoms/image/README.md +0 -0
- package/src/lib/components/atoms/image/image.component.scss +0 -281
- package/src/lib/components/atoms/image/image.component.ts +0 -399
- package/src/lib/components/atoms/image/image.stories.ts +0 -317
- package/src/lib/components/atoms/image/types.ts +0 -37
- package/src/lib/components/atoms/price-tag/price-tag.component.scss +0 -228
- package/src/lib/components/atoms/price-tag/price-tag.component.ts +0 -188
- package/src/lib/components/atoms/price-tag/price-tag.stories.ts +0 -315
- package/src/lib/components/atoms/price-tag/types.ts +0 -78
- package/src/lib/components/atoms/progress-bar/progress-bar.component.scss +0 -22
- package/src/lib/components/atoms/progress-bar/progress-bar.component.ts +0 -88
- package/src/lib/components/atoms/progress-bar/progress-bar.stories.ts +0 -375
- package/src/lib/components/atoms/progress-bar/types.ts +0 -20
- package/src/lib/components/atoms/progress-ring/progress-ring.component.scss +0 -35
- package/src/lib/components/atoms/progress-ring/progress-ring.component.ts +0 -114
- package/src/lib/components/atoms/progress-ring/progress-ring.stories.ts +0 -323
- package/src/lib/components/atoms/progress-ring/types.ts +0 -25
- package/src/lib/components/atoms/qr-code/qr-code.component.scss +0 -353
- package/src/lib/components/atoms/qr-code/qr-code.component.ts +0 -313
- package/src/lib/components/atoms/qr-code/qr-code.stories.ts +0 -767
- package/src/lib/components/atoms/qr-code/types.ts +0 -173
- package/src/lib/components/atoms/rights-footer/rights-footer.component.scss +0 -20
- package/src/lib/components/atoms/rights-footer/rights-footer.component.ts +0 -98
- package/src/lib/components/atoms/rights-footer/rights-footer.stories.ts +0 -229
- package/src/lib/components/atoms/rights-footer/types.ts +0 -21
- package/src/lib/components/atoms/skeleton/skeleton.component.scss +0 -58
- package/src/lib/components/atoms/skeleton/skeleton.component.ts +0 -129
- package/src/lib/components/atoms/skeleton/skeleton.stories.ts +0 -242
- package/src/lib/components/atoms/skeleton/types.ts +0 -39
- package/src/lib/components/atoms/text/text.component.scss +0 -38
- package/src/lib/components/atoms/text/text.component.ts +0 -123
- package/src/lib/components/atoms/text/text.stories.ts +0 -174
- package/src/lib/components/atoms/text/types.ts +0 -50
- package/src/lib/components/atoms/title/title.component.scss +0 -33
- package/src/lib/components/atoms/title/title.component.ts +0 -65
- package/src/lib/components/atoms/title/title.stories.ts +0 -167
- package/src/lib/components/atoms/title/types.ts +0 -46
- package/src/lib/components/molecules/accordion/accordion.component.scss +0 -34
- package/src/lib/components/molecules/accordion/accordion.component.ts +0 -103
- package/src/lib/components/molecules/accordion/accordion.stories.ts +0 -236
- package/src/lib/components/molecules/accordion/types.ts +0 -49
- package/src/lib/components/molecules/action-card/action-card.component.scss +0 -226
- package/src/lib/components/molecules/action-card/action-card.component.ts +0 -246
- package/src/lib/components/molecules/action-card/action-card.stories.ts +0 -396
- package/src/lib/components/molecules/action-card/types.ts +0 -102
- package/src/lib/components/molecules/action-header/action-header.component.ts +0 -28
- package/src/lib/components/molecules/action-header/action-header.stories.ts +0 -481
- package/src/lib/components/molecules/action-header/types.ts +0 -7
- package/src/lib/components/molecules/ad-slot/ad-slot.component.ts +0 -352
- package/src/lib/components/molecules/alert-box/alert-box.component.scss +0 -10
- package/src/lib/components/molecules/alert-box/alert-box.component.ts +0 -125
- package/src/lib/components/molecules/alert-box/alert-box.stories.ts +0 -248
- package/src/lib/components/molecules/alert-box/types.ts +0 -39
- package/src/lib/components/molecules/breadcrumb/breadcrumb.component.scss +0 -34
- package/src/lib/components/molecules/breadcrumb/breadcrumb.component.ts +0 -109
- package/src/lib/components/molecules/breadcrumb/breadcrumb.stories.ts +0 -271
- package/src/lib/components/molecules/breadcrumb/types.ts +0 -47
- package/src/lib/components/molecules/button-group/button-group.component.scss +0 -41
- package/src/lib/components/molecules/button-group/button-group.component.ts +0 -65
- package/src/lib/components/molecules/button-group/button-group.stories.ts +0 -296
- package/src/lib/components/molecules/button-group/types.ts +0 -14
- package/src/lib/components/molecules/card/card.component.scss +0 -62
- package/src/lib/components/molecules/card/card.component.ts +0 -300
- package/src/lib/components/molecules/card/card.stories.ts +0 -360
- package/src/lib/components/molecules/card/types.ts +0 -36
- package/src/lib/components/molecules/check-input/check-input.component.scss +0 -0
- package/src/lib/components/molecules/check-input/check-input.component.ts +0 -88
- package/src/lib/components/molecules/check-input/check-input.stories.ts +0 -54
- package/src/lib/components/molecules/chip-group/chip-group.component.scss +0 -70
- package/src/lib/components/molecules/chip-group/chip-group.component.ts +0 -150
- package/src/lib/components/molecules/chip-group/chip-group.stories.ts +0 -307
- package/src/lib/components/molecules/chip-group/types.ts +0 -69
- package/src/lib/components/molecules/code-display/code-display.component.scss +0 -239
- package/src/lib/components/molecules/code-display/code-display.component.ts +0 -109
- package/src/lib/components/molecules/code-display/code-display.stories.ts +0 -402
- package/src/lib/components/molecules/code-display/types.ts +0 -11
- package/src/lib/components/molecules/command-display/command-display.component.scss +0 -38
- package/src/lib/components/molecules/command-display/command-display.component.ts +0 -45
- package/src/lib/components/molecules/command-display/command-display.stories.ts +0 -110
- package/src/lib/components/molecules/command-display/types.ts +0 -3
- package/src/lib/components/molecules/comment/comment.component.scss +0 -339
- package/src/lib/components/molecules/comment/comment.component.ts +0 -496
- package/src/lib/components/molecules/comment/comment.stories.ts +0 -384
- package/src/lib/components/molecules/comment/types.ts +0 -181
- package/src/lib/components/molecules/comment-input/comment-input.component.scss +0 -0
- package/src/lib/components/molecules/comment-input/comment-input.component.ts +0 -42
- package/src/lib/components/molecules/comment-input/comment-input.stories.ts +0 -124
- package/src/lib/components/molecules/comment-input/types.ts +0 -69
- package/src/lib/components/molecules/content-loader/content-loader.component.scss +0 -42
- package/src/lib/components/molecules/content-loader/content-loader.component.ts +0 -45
- package/src/lib/components/molecules/content-loader/content-loader.stories.ts +0 -370
- package/src/lib/components/molecules/content-loader/types.ts +0 -16
- package/src/lib/components/molecules/content-reaction/content-reaction.component.html +0 -81
- package/src/lib/components/molecules/content-reaction/content-reaction.component.scss +0 -157
- package/src/lib/components/molecules/content-reaction/content-reaction.component.ts +0 -273
- package/src/lib/components/molecules/content-reaction/content-reaction.stories.ts +0 -453
- package/src/lib/components/molecules/content-reaction/types.ts +0 -99
- package/src/lib/components/molecules/currency-input/currency-input.component.scss +0 -101
- package/src/lib/components/molecules/currency-input/currency-input.component.ts +0 -327
- package/src/lib/components/molecules/currency-input/currency-input.stories.ts +0 -279
- package/src/lib/components/molecules/currency-input/types.ts +0 -125
- package/src/lib/components/molecules/date-input/date-input.component.scss +0 -11
- package/src/lib/components/molecules/date-input/date-input.component.ts +0 -136
- package/src/lib/components/molecules/date-input/date-input.stories.ts +0 -205
- package/src/lib/components/molecules/date-input/types.ts +0 -84
- package/src/lib/components/molecules/date-range-input/date-range-input.component.scss +0 -119
- package/src/lib/components/molecules/date-range-input/date-range-input.component.ts +0 -364
- package/src/lib/components/molecules/date-range-input/date-range-input.stories.ts +0 -288
- package/src/lib/components/molecules/date-range-input/types.ts +0 -122
- package/src/lib/components/molecules/docs-api-table/docs-api-table.component.scss +0 -278
- package/src/lib/components/molecules/docs-api-table/docs-api-table.component.ts +0 -138
- package/src/lib/components/molecules/docs-api-table/types.ts +0 -81
- package/src/lib/components/molecules/docs-breadcrumb/docs-breadcrumb.component.ts +0 -161
- package/src/lib/components/molecules/docs-breadcrumb/types.ts +0 -21
- package/src/lib/components/molecules/docs-callout/docs-callout.component.scss +0 -136
- package/src/lib/components/molecules/docs-callout/docs-callout.component.ts +0 -55
- package/src/lib/components/molecules/docs-code-example/docs-code-example.component.ts +0 -535
- package/src/lib/components/molecules/docs-code-example/types.ts +0 -75
- package/src/lib/components/molecules/docs-nav-links/docs-nav-links.component.ts +0 -216
- package/src/lib/components/molecules/docs-nav-links/types.ts +0 -36
- package/src/lib/components/molecules/docs-search/docs-search.component.scss +0 -195
- package/src/lib/components/molecules/docs-search/docs-search.component.ts +0 -228
- package/src/lib/components/molecules/docs-search/types.ts +0 -30
- package/src/lib/components/molecules/docs-section/docs-section.component.ts +0 -99
- package/src/lib/components/molecules/docs-section/types.ts +0 -31
- package/src/lib/components/molecules/email-input/email-input.component.scss +0 -0
- package/src/lib/components/molecules/email-input/email-input.component.ts +0 -77
- package/src/lib/components/molecules/email-input/email-input.stories.ts +0 -176
- package/src/lib/components/molecules/expandable-text/expandable-text.component.ts +0 -111
- package/src/lib/components/molecules/expandable-text/expandable-text.stories.ts +0 -287
- package/src/lib/components/molecules/expandable-text/types.ts +0 -14
- package/src/lib/components/molecules/features-list/features-list.component.ts +0 -251
- package/src/lib/components/molecules/features-list/types.ts +0 -44
- package/src/lib/components/molecules/feedback-form/feedback-form.component.ts +0 -355
- package/src/lib/components/molecules/feedback-form/types.ts +0 -77
- package/src/lib/components/molecules/file-input/file-input.component.scss +0 -11
- package/src/lib/components/molecules/file-input/file-input.component.ts +0 -87
- package/src/lib/components/molecules/file-input/file-input.stories.ts +0 -107
- package/src/lib/components/molecules/file-input/types.ts +0 -85
- package/src/lib/components/molecules/footer-links/footer-links.component.scss +0 -130
- package/src/lib/components/molecules/footer-links/footer-links.component.ts +0 -244
- package/src/lib/components/molecules/footer-links/footer-links.stories.ts +0 -188
- package/src/lib/components/molecules/footer-links/types.ts +0 -52
- package/src/lib/components/molecules/glow-card/glow-card.component.scss +0 -295
- package/src/lib/components/molecules/glow-card/glow-card.component.ts +0 -284
- package/src/lib/components/molecules/glow-card/glow-card.stories.ts +0 -680
- package/src/lib/components/molecules/glow-card/types.ts +0 -117
- package/src/lib/components/molecules/hint/hint.component.scss +0 -5
- package/src/lib/components/molecules/hint/hint.component.ts +0 -89
- package/src/lib/components/molecules/hint/hint.stories.ts +0 -233
- package/src/lib/components/molecules/hour-input/hour-input.component.scss +0 -0
- package/src/lib/components/molecules/hour-input/hour-input.component.ts +0 -34
- package/src/lib/components/molecules/hour-input/hour-input.stories.ts +0 -145
- package/src/lib/components/molecules/image-crop/image-crop.component.ts +0 -195
- package/src/lib/components/molecules/info/info.component.ts +0 -35
- package/src/lib/components/molecules/info/info.stories.ts +0 -276
- package/src/lib/components/molecules/info/types.ts +0 -11
- package/src/lib/components/molecules/language-selector/language-selector.component.scss +0 -128
- package/src/lib/components/molecules/language-selector/language-selector.component.ts +0 -204
- package/src/lib/components/molecules/language-selector/language-selector.stories.ts +0 -261
- package/src/lib/components/molecules/language-selector/types.ts +0 -84
- package/src/lib/components/molecules/layered-card/layered-card.component.scss +0 -84
- package/src/lib/components/molecules/layered-card/layered-card.component.ts +0 -66
- package/src/lib/components/molecules/layered-card/layered-card.stories.ts +0 -313
- package/src/lib/components/molecules/layered-card/types.ts +0 -16
- package/src/lib/components/molecules/link/link.component.scss +0 -11
- package/src/lib/components/molecules/link/link.component.ts +0 -73
- package/src/lib/components/molecules/link/link.stories.ts +0 -307
- package/src/lib/components/molecules/link/types.ts +0 -20
- package/src/lib/components/molecules/linked-providers/index.ts +0 -2
- package/src/lib/components/molecules/linked-providers/linked-providers.component.ts +0 -289
- package/src/lib/components/molecules/linked-providers/types.ts +0 -63
- package/src/lib/components/molecules/links-accordion/links-accordion.component.scss +0 -17
- package/src/lib/components/molecules/links-accordion/links-accordion.component.ts +0 -152
- package/src/lib/components/molecules/links-accordion/links-accordion.stories.ts +0 -209
- package/src/lib/components/molecules/links-accordion/types.ts +0 -41
- package/src/lib/components/molecules/links-cake/links-cake.component.scss +0 -9
- package/src/lib/components/molecules/links-cake/links-cake.component.ts +0 -49
- package/src/lib/components/molecules/links-cake/links-cake.stories.ts +0 -160
- package/src/lib/components/molecules/links-cake/types.ts +0 -14
- package/src/lib/components/molecules/multi-select-search/multi-select-search.component.scss +0 -168
- package/src/lib/components/molecules/multi-select-search/multi-select-search.component.ts +0 -471
- package/src/lib/components/molecules/multi-select-search/multi-select-search.stories.ts +0 -188
- package/src/lib/components/molecules/notes-box/notes-box.component.scss +0 -5
- package/src/lib/components/molecules/notes-box/notes-box.component.ts +0 -62
- package/src/lib/components/molecules/notes-box/notes-box.stories.ts +0 -308
- package/src/lib/components/molecules/notes-box/types.ts +0 -22
- package/src/lib/components/molecules/number-from-to/number-from-to.component.scss +0 -10
- package/src/lib/components/molecules/number-from-to/number-from-to.component.ts +0 -134
- package/src/lib/components/molecules/number-from-to/number-from-to.stories.ts +0 -203
- package/src/lib/components/molecules/number-from-to/types.ts +0 -91
- package/src/lib/components/molecules/number-input/number-input.component.scss +0 -0
- package/src/lib/components/molecules/number-input/number-input.component.ts +0 -41
- package/src/lib/components/molecules/number-input/number-input.stories.ts +0 -151
- package/src/lib/components/molecules/number-stepper/number-stepper.component.scss +0 -252
- package/src/lib/components/molecules/number-stepper/number-stepper.component.ts +0 -302
- package/src/lib/components/molecules/number-stepper/number-stepper.stories.ts +0 -417
- package/src/lib/components/molecules/number-stepper/types.ts +0 -101
- package/src/lib/components/molecules/pagination/pagination.component.scss +0 -50
- package/src/lib/components/molecules/pagination/pagination.component.ts +0 -194
- package/src/lib/components/molecules/pagination/pagination.stories.ts +0 -260
- package/src/lib/components/molecules/pagination/types.ts +0 -43
- package/src/lib/components/molecules/participant-card/participant-card.component.scss +0 -371
- package/src/lib/components/molecules/participant-card/participant-card.component.ts +0 -402
- package/src/lib/components/molecules/participant-card/participant-card.stories.ts +0 -479
- package/src/lib/components/molecules/participant-card/types.ts +0 -170
- package/src/lib/components/molecules/password-input/password-input.component.scss +0 -7
- package/src/lib/components/molecules/password-input/password-input.component.ts +0 -93
- package/src/lib/components/molecules/password-input/password-input.stories.ts +0 -187
- package/src/lib/components/molecules/phone-input/phone-input.component.scss +0 -157
- package/src/lib/components/molecules/phone-input/phone-input.component.ts +0 -354
- package/src/lib/components/molecules/phone-input/phone-input.stories.ts +0 -229
- package/src/lib/components/molecules/phone-input/types.ts +0 -126
- package/src/lib/components/molecules/pill/pill.component.scss +0 -35
- package/src/lib/components/molecules/pill/pill.component.ts +0 -89
- package/src/lib/components/molecules/pill/pill.stories.ts +0 -219
- package/src/lib/components/molecules/pill/types.ts +0 -10
- package/src/lib/components/molecules/pin-input/pin-input.component.scss +0 -22
- package/src/lib/components/molecules/pin-input/pin-input.component.ts +0 -83
- package/src/lib/components/molecules/pin-input/pin-input.stories.ts +0 -196
- package/src/lib/components/molecules/pin-input/types.ts +0 -80
- package/src/lib/components/molecules/plain-code-box/plain-code-box.component.scss +0 -191
- package/src/lib/components/molecules/plain-code-box/plain-code-box.component.ts +0 -86
- package/src/lib/components/molecules/plain-code-box/plain-code-box.stories.ts +0 -174
- package/src/lib/components/molecules/plain-code-box/types.ts +0 -12
- package/src/lib/components/molecules/popover-selector/popover-selector.component.scss +0 -220
- package/src/lib/components/molecules/popover-selector/popover-selector.component.ts +0 -163
- package/src/lib/components/molecules/popover-selector/popover-selector.stories.ts +0 -324
- package/src/lib/components/molecules/popover-selector/types.ts +0 -71
- package/src/lib/components/molecules/progress-status/progress-status.component.scss +0 -41
- package/src/lib/components/molecules/progress-status/progress-status.component.ts +0 -90
- package/src/lib/components/molecules/progress-status/progress-status.stories.ts +0 -415
- package/src/lib/components/molecules/progress-status/types.ts +0 -21
- package/src/lib/components/molecules/prompter/prompter.component.scss +0 -45
- package/src/lib/components/molecules/prompter/prompter.component.ts +0 -55
- package/src/lib/components/molecules/prompter/prompter.stories.ts +0 -193
- package/src/lib/components/molecules/prompter/types.ts +0 -26
- package/src/lib/components/molecules/quote-box/quote-box.component.scss +0 -253
- package/src/lib/components/molecules/quote-box/quote-box.component.ts +0 -104
- package/src/lib/components/molecules/quote-box/quote-box.stories.ts +0 -264
- package/src/lib/components/molecules/radio-input/radio-input.component.scss +0 -0
- package/src/lib/components/molecules/radio-input/radio-input.component.ts +0 -51
- package/src/lib/components/molecules/radio-input/radio-input.stories.ts +0 -197
- package/src/lib/components/molecules/raffle-status-card/raffle-status-card.component.scss +0 -418
- package/src/lib/components/molecules/raffle-status-card/raffle-status-card.component.ts +0 -320
- package/src/lib/components/molecules/raffle-status-card/raffle-status-card.stories.ts +0 -509
- package/src/lib/components/molecules/raffle-status-card/types.ts +0 -150
- package/src/lib/components/molecules/range-input/range-input.component.scss +0 -15
- package/src/lib/components/molecules/range-input/range-input.component.ts +0 -106
- package/src/lib/components/molecules/range-input/range-input.stories.ts +0 -331
- package/src/lib/components/molecules/range-input/types.ts +0 -61
- package/src/lib/components/molecules/rating/rating.component.scss +0 -60
- package/src/lib/components/molecules/rating/rating.component.ts +0 -154
- package/src/lib/components/molecules/rating/rating.stories.ts +0 -332
- package/src/lib/components/molecules/rating/types.ts +0 -43
- package/src/lib/components/molecules/recap-card/recap-card.component.scss +0 -35
- package/src/lib/components/molecules/recap-card/recap-card.component.ts +0 -64
- package/src/lib/components/molecules/recap-card/recap-card.stories.ts +0 -174
- package/src/lib/components/molecules/recap-card/types.ts +0 -30
- package/src/lib/components/molecules/refresher/refresher.component.ts +0 -257
- package/src/lib/components/molecules/refresher/types.ts +0 -103
- package/src/lib/components/molecules/searchbar/searchbar.component.scss +0 -9
- package/src/lib/components/molecules/searchbar/searchbar.component.ts +0 -122
- package/src/lib/components/molecules/searchbar/searchbar.stories.ts +0 -192
- package/src/lib/components/molecules/searchbar/types.ts +0 -38
- package/src/lib/components/molecules/segment-control/segment-control.component.scss +0 -27
- package/src/lib/components/molecules/segment-control/segment-control.component.ts +0 -121
- package/src/lib/components/molecules/segment-control/segment-control.stories.ts +0 -296
- package/src/lib/components/molecules/segment-control/types.ts +0 -48
- package/src/lib/components/molecules/select-input/select-input.component.scss +0 -0
- package/src/lib/components/molecules/select-input/select-input.component.ts +0 -133
- package/src/lib/components/molecules/select-input/select-input.stories.ts +0 -330
- package/src/lib/components/molecules/select-search/select-search.component.ts +0 -420
- package/src/lib/components/molecules/select-search/select-search.stories.ts +0 -218
- package/src/lib/components/molecules/share-buttons/share-buttons.component.scss +0 -195
- package/src/lib/components/molecules/share-buttons/share-buttons.component.ts +0 -269
- package/src/lib/components/molecules/share-buttons/share-buttons.stories.ts +0 -343
- package/src/lib/components/molecules/share-buttons/types.ts +0 -211
- package/src/lib/components/molecules/stats-card/stats-card.component.scss +0 -198
- package/src/lib/components/molecules/stats-card/stats-card.component.ts +0 -157
- package/src/lib/components/molecules/stats-card/stats-card.stories.ts +0 -481
- package/src/lib/components/molecules/stats-card/types.ts +0 -63
- package/src/lib/components/molecules/stepper/stepper.component.scss +0 -156
- package/src/lib/components/molecules/stepper/stepper.component.ts +0 -201
- package/src/lib/components/molecules/stepper/stepper.stories.ts +0 -308
- package/src/lib/components/molecules/stepper/types.ts +0 -70
- package/src/lib/components/molecules/swipe-carousel/swipe-carousel.component.scss +0 -164
- package/src/lib/components/molecules/swipe-carousel/swipe-carousel.component.ts +0 -215
- package/src/lib/components/molecules/swipe-carousel/swipe-carousel.stories.ts +0 -406
- package/src/lib/components/molecules/swipe-carousel/types.ts +0 -32
- package/src/lib/components/molecules/tabs/tabs.component.scss +0 -35
- package/src/lib/components/molecules/tabs/tabs.component.ts +0 -125
- package/src/lib/components/molecules/tabs/tabs.stories.ts +0 -283
- package/src/lib/components/molecules/tabs/types.ts +0 -47
- package/src/lib/components/molecules/testimonial-card/testimonial-card.component.scss +0 -25
- package/src/lib/components/molecules/testimonial-card/testimonial-card.component.ts +0 -121
- package/src/lib/components/molecules/testimonial-card/testimonial-card.stories.ts +0 -130
- package/src/lib/components/molecules/testimonial-card/types.ts +0 -26
- package/src/lib/components/molecules/text-input/text-input.component.scss +0 -1
- package/src/lib/components/molecules/text-input/text-input.component.ts +0 -86
- package/src/lib/components/molecules/text-input/text-input.stories.ts +0 -301
- package/src/lib/components/molecules/textarea-input/textarea-input.component.scss +0 -62
- package/src/lib/components/molecules/textarea-input/textarea-input.component.ts +0 -195
- package/src/lib/components/molecules/textarea-input/textarea-input.stories.ts +0 -329
- package/src/lib/components/molecules/textarea-input/types.ts +0 -83
- package/src/lib/components/molecules/ticket-grid/ticket-grid.component.scss +0 -270
- package/src/lib/components/molecules/ticket-grid/ticket-grid.component.ts +0 -429
- package/src/lib/components/molecules/ticket-grid/ticket-grid.stories.ts +0 -436
- package/src/lib/components/molecules/ticket-grid/types.ts +0 -145
- package/src/lib/components/molecules/timeline/timeline.component.scss +0 -168
- package/src/lib/components/molecules/timeline/timeline.component.ts +0 -98
- package/src/lib/components/molecules/timeline/timeline.stories.ts +0 -259
- package/src/lib/components/molecules/timeline/types.ts +0 -41
- package/src/lib/components/molecules/title-block/title-block.component.scss +0 -48
- package/src/lib/components/molecules/title-block/title-block.component.ts +0 -72
- package/src/lib/components/molecules/title-block/title-block.stories.ts +0 -351
- package/src/lib/components/molecules/title-block/types.ts +0 -16
- package/src/lib/components/molecules/toggle-input/toggle-input.component.scss +0 -7
- package/src/lib/components/molecules/toggle-input/toggle-input.component.ts +0 -94
- package/src/lib/components/molecules/toggle-input/toggle-input.stories.ts +0 -240
- package/src/lib/components/molecules/toggle-input/types.ts +0 -31
- package/src/lib/components/molecules/update-banner/index.ts +0 -1
- package/src/lib/components/molecules/update-banner/update-banner.component.ts +0 -118
- package/src/lib/components/molecules/username-input/index.ts +0 -2
- package/src/lib/components/molecules/username-input/types.ts +0 -36
- package/src/lib/components/molecules/username-input/username-input.component.ts +0 -336
- package/src/lib/components/molecules/winner-display/types.ts +0 -129
- package/src/lib/components/molecules/winner-display/winner-display.component.scss +0 -501
- package/src/lib/components/molecules/winner-display/winner-display.component.ts +0 -284
- package/src/lib/components/molecules/winner-display/winner-display.stories.ts +0 -468
- package/src/lib/components/organisms/article/README.md +0 -569
- package/src/lib/components/organisms/article/article.component.scss +0 -433
- package/src/lib/components/organisms/article/article.component.ts +0 -469
- package/src/lib/components/organisms/article/article.stories.ts +0 -625
- package/src/lib/components/organisms/article/types.ts +0 -550
- package/src/lib/components/organisms/avatar-upload/avatar-upload.component.scss +0 -119
- package/src/lib/components/organisms/avatar-upload/avatar-upload.component.ts +0 -349
- package/src/lib/components/organisms/avatar-upload/index.ts +0 -2
- package/src/lib/components/organisms/avatar-upload/types.ts +0 -71
- package/src/lib/components/organisms/banner/banner.component.scss +0 -51
- package/src/lib/components/organisms/banner/banner.component.ts +0 -95
- package/src/lib/components/organisms/banner/banner.stories.ts +0 -462
- package/src/lib/components/organisms/banner/types.ts +0 -30
- package/src/lib/components/organisms/bottom-nav/bottom-nav.component.scss +0 -350
- package/src/lib/components/organisms/bottom-nav/bottom-nav.component.ts +0 -362
- package/src/lib/components/organisms/bottom-nav/types.ts +0 -139
- package/src/lib/components/organisms/cards-carousel/cards-carousel.component.ts +0 -53
- package/src/lib/components/organisms/cards-carousel/cards-carousel.stories.ts +0 -241
- package/src/lib/components/organisms/cards-carousel/types.ts +0 -12
- package/src/lib/components/organisms/comment-section/comment-section.component.scss +0 -269
- package/src/lib/components/organisms/comment-section/comment-section.component.ts +0 -429
- package/src/lib/components/organisms/comment-section/comment-section.stories.ts +0 -305
- package/src/lib/components/organisms/comment-section/types.ts +0 -169
- package/src/lib/components/organisms/company-footer/company-footer.component.ts +0 -73
- package/src/lib/components/organisms/company-footer/company-footer.stories.ts +0 -216
- package/src/lib/components/organisms/company-footer/types.ts +0 -16
- package/src/lib/components/organisms/data-table/data-table.component.scss +0 -907
- package/src/lib/components/organisms/data-table/data-table.component.ts +0 -821
- package/src/lib/components/organisms/data-table/data-table.stories.ts +0 -787
- package/src/lib/components/organisms/data-table/types.ts +0 -258
- package/src/lib/components/organisms/docs-sidebar/docs-sidebar.component.scss +0 -228
- package/src/lib/components/organisms/docs-sidebar/docs-sidebar.component.ts +0 -213
- package/src/lib/components/organisms/docs-sidebar/types.ts +0 -112
- package/src/lib/components/organisms/docs-toc/docs-toc.component.scss +0 -119
- package/src/lib/components/organisms/docs-toc/docs-toc.component.ts +0 -320
- package/src/lib/components/organisms/docs-toc/types.ts +0 -73
- package/src/lib/components/organisms/footer/footer.component.scss +0 -3
- package/src/lib/components/organisms/footer/footer.component.ts +0 -65
- package/src/lib/components/organisms/footer/footer.stories.ts +0 -278
- package/src/lib/components/organisms/footer/types.ts +0 -17
- package/src/lib/components/organisms/form/factory.ts +0 -46
- package/src/lib/components/organisms/form/form-footer/form-footer.component.scss +0 -0
- package/src/lib/components/organisms/form/form-footer/form-footer.component.ts +0 -72
- package/src/lib/components/organisms/form/form.component.scss +0 -24
- package/src/lib/components/organisms/form/form.component.ts +0 -367
- package/src/lib/components/organisms/form/form.stories.ts +0 -505
- package/src/lib/components/organisms/fun-header/fun-header.component.scss +0 -36
- package/src/lib/components/organisms/fun-header/fun-header.component.ts +0 -209
- package/src/lib/components/organisms/fun-header/fun-header.stories.ts +0 -272
- package/src/lib/components/organisms/fun-header/types.ts +0 -29
- package/src/lib/components/organisms/header/header.component.scss +0 -5
- package/src/lib/components/organisms/header/header.component.ts +0 -53
- package/src/lib/components/organisms/header/header.stories.ts +0 -293
- package/src/lib/components/organisms/header/types.ts +0 -17
- package/src/lib/components/organisms/infinite-list/infinite-list.component.ts +0 -602
- package/src/lib/components/organisms/infinite-list/types.ts +0 -235
- package/src/lib/components/organisms/item-list/item-list.component.scss +0 -53
- package/src/lib/components/organisms/item-list/item-list.component.ts +0 -269
- package/src/lib/components/organisms/item-list/item-list.stories.ts +0 -363
- package/src/lib/components/organisms/item-list/types.ts +0 -130
- package/src/lib/components/organisms/login/login.component.html +0 -244
- package/src/lib/components/organisms/login/login.component.scss +0 -118
- package/src/lib/components/organisms/login/login.component.ts +0 -866
- package/src/lib/components/organisms/login/types.ts +0 -89
- package/src/lib/components/organisms/menu/menu.component.scss +0 -23
- package/src/lib/components/organisms/menu/menu.component.ts +0 -152
- package/src/lib/components/organisms/menu/menu.stories.ts +0 -223
- package/src/lib/components/organisms/menu/types.ts +0 -24
- package/src/lib/components/organisms/no-content/no-content.component.scss +0 -11
- package/src/lib/components/organisms/no-content/no-content.component.ts +0 -68
- package/src/lib/components/organisms/no-content/no-content.stories.ts +0 -259
- package/src/lib/components/organisms/no-content/types.ts +0 -18
- package/src/lib/components/organisms/rotating-text/rotating-text.component.ts +0 -239
- package/src/lib/components/organisms/rotating-text/types.ts +0 -29
- package/src/lib/components/organisms/tabbed-content/tabbed-content.component.scss +0 -89
- package/src/lib/components/organisms/tabbed-content/tabbed-content.component.ts +0 -165
- package/src/lib/components/organisms/tabbed-content/tabbed-content.stories.ts +0 -326
- package/src/lib/components/organisms/tabbed-content/types.ts +0 -56
- package/src/lib/components/organisms/terminal-404/terminal-404.component.ts +0 -339
- package/src/lib/components/organisms/terminal-404/types.ts +0 -22
- package/src/lib/components/organisms/testimonial-carousel/testimonial-carousel.component.ts +0 -70
- package/src/lib/components/organisms/testimonial-carousel/testimonial-carousel.stories.ts +0 -173
- package/src/lib/components/organisms/testimonial-carousel/types.ts +0 -9
- package/src/lib/components/organisms/toolbar/toolbar.component.scss +0 -13
- package/src/lib/components/organisms/toolbar/toolbar.component.ts +0 -195
- package/src/lib/components/organisms/toolbar/toolbar.stories.ts +0 -263
- package/src/lib/components/organisms/toolbar/types.ts +0 -32
- package/src/lib/components/organisms/wizard/types.ts +0 -46
- package/src/lib/components/organisms/wizard/wizard-footer/wizard-footer.component.scss +0 -0
- package/src/lib/components/organisms/wizard/wizard-footer/wizard-footer.component.ts +0 -104
- package/src/lib/components/organisms/wizard/wizard.component.scss +0 -16
- package/src/lib/components/organisms/wizard/wizard.component.ts +0 -165
- package/src/lib/components/organisms/wizard/wizard.stories.ts +0 -653
- package/src/lib/components/templates/auth-background/auth-background.component.ts +0 -258
- package/src/lib/components/templates/auth-background/types.ts +0 -34
- package/src/lib/components/templates/docs-layout/docs-layout.component.scss +0 -218
- package/src/lib/components/templates/docs-layout/docs-layout.component.ts +0 -161
- package/src/lib/components/templates/docs-layout/types.ts +0 -45
- package/src/lib/components/templates/docs-page/docs-page.component.ts +0 -534
- package/src/lib/components/templates/docs-page/types.ts +0 -141
- package/src/lib/components/templates/docs-shell/docs-shell.component.ts +0 -494
- package/src/lib/components/templates/docs-shell/types.ts +0 -176
- package/src/lib/components/templates/layout/layout.component.scss +0 -25
- package/src/lib/components/templates/layout/layout.component.ts +0 -14
- package/src/lib/components/templates/maintenance-page/index.ts +0 -2
- package/src/lib/components/templates/maintenance-page/maintenance-page.component.scss +0 -44
- package/src/lib/components/templates/maintenance-page/maintenance-page.component.ts +0 -120
- package/src/lib/components/templates/maintenance-page/types.ts +0 -12
- package/src/lib/components/templates/page-content/page-content.component.ts +0 -188
- package/src/lib/components/templates/page-content/page-content.stories.ts +0 -169
- package/src/lib/components/templates/page-content/types.ts +0 -28
- package/src/lib/components/templates/page-template/page-template.component.ts +0 -164
- package/src/lib/components/templates/page-template/page-template.stories.ts +0 -174
- package/src/lib/components/templates/page-template/types.ts +0 -17
- package/src/lib/components/templates/page-wrapper/page-wrapper.component.ts +0 -183
- package/src/lib/components/templates/page-wrapper/page-wrapper.stories.ts +0 -149
- package/src/lib/components/templates/page-wrapper/types.ts +0 -20
- package/src/lib/components/templates/simple/simple.component.ts +0 -92
- package/src/lib/components/templates/simple/types.ts +0 -11
- package/src/lib/components/types.ts +0 -311
- package/src/lib/config/company-footer.config.ts +0 -137
- package/src/lib/services/ads/ads-consent.service.ts +0 -166
- package/src/lib/services/ads/ads-loader.service.ts +0 -133
- package/src/lib/services/ads/ads.service.ts +0 -268
- package/src/lib/services/ads/config.ts +0 -92
- package/src/lib/services/ads/index.ts +0 -29
- package/src/lib/services/ads/types.ts +0 -187
- package/src/lib/services/app-config/app-config.service.ts +0 -228
- package/src/lib/services/app-config/config.ts +0 -62
- package/src/lib/services/app-config/index.ts +0 -48
- package/src/lib/services/app-config/types.ts +0 -62
- package/src/lib/services/app-config/version.ts +0 -104
- package/src/lib/services/auth/auth-state.service.ts +0 -225
- package/src/lib/services/auth/auth.service.ts +0 -1306
- package/src/lib/services/auth/config.ts +0 -93
- package/src/lib/services/auth/device.service.ts +0 -163
- package/src/lib/services/auth/guards.ts +0 -234
- package/src/lib/services/auth/index.ts +0 -111
- package/src/lib/services/auth/interceptor.ts +0 -177
- package/src/lib/services/auth/oauth-callback.component.ts +0 -202
- package/src/lib/services/auth/oauth.service.ts +0 -352
- package/src/lib/services/auth/session.service.ts +0 -83
- package/src/lib/services/auth/storage.service.ts +0 -181
- package/src/lib/services/auth/sync.service.ts +0 -158
- package/src/lib/services/auth/token.service.ts +0 -132
- package/src/lib/services/auth/types.ts +0 -1023
- package/src/lib/services/confirmation-dialog/confirmation-dialog.service.ts +0 -199
- package/src/lib/services/confirmation-dialog/types.ts +0 -74
- package/src/lib/services/content/content-types/blog.ts +0 -324
- package/src/lib/services/content/content-types/documentation.ts +0 -369
- package/src/lib/services/content/content-types/news.ts +0 -328
- package/src/lib/services/content/index.ts +0 -71
- package/src/lib/services/content/transformer.ts +0 -312
- package/src/lib/services/content/types.ts +0 -276
- package/src/lib/services/docs/docs-navigation.service.ts +0 -91
- package/src/lib/services/download.service.ts +0 -75
- package/src/lib/services/feedback/config.ts +0 -61
- package/src/lib/services/feedback/feedback.service.ts +0 -348
- package/src/lib/services/feedback/index.ts +0 -59
- package/src/lib/services/feedback/types.ts +0 -239
- package/src/lib/services/firebase/README.md +0 -328
- package/src/lib/services/firebase/analytics-error-handler.ts +0 -155
- package/src/lib/services/firebase/analytics-router-tracker.ts +0 -109
- package/src/lib/services/firebase/analytics-types.ts +0 -277
- package/src/lib/services/firebase/analytics.service.ts +0 -707
- package/src/lib/services/firebase/config.ts +0 -172
- package/src/lib/services/firebase/firebase.service.ts +0 -502
- package/src/lib/services/firebase/firestore-collection.ts +0 -336
- package/src/lib/services/firebase/firestore.service.ts +0 -649
- package/src/lib/services/firebase/index.ts +0 -88
- package/src/lib/services/firebase/messaging.service.ts +0 -672
- package/src/lib/services/firebase/notifications.service.ts +0 -253
- package/src/lib/services/firebase/shared-config.ts +0 -167
- package/src/lib/services/firebase/storage.service.ts +0 -519
- package/src/lib/services/firebase/types.ts +0 -461
- package/src/lib/services/firebase/utils/path-builder.ts +0 -210
- package/src/lib/services/firebase/utils/query-builder.ts +0 -339
- package/src/lib/services/i18n/config.ts +0 -129
- package/src/lib/services/i18n/default-content.ts +0 -640
- package/src/lib/services/i18n/i18n.service.ts +0 -223
- package/src/lib/services/i18n/index.ts +0 -29
- package/src/lib/services/i18n/input-i18n.helper.ts +0 -141
- package/src/lib/services/i18n/translate.pipe.ts +0 -43
- package/src/lib/services/i18n/types.ts +0 -108
- package/src/lib/services/icons.service.ts +0 -122
- package/src/lib/services/image/image.service.ts +0 -328
- package/src/lib/services/image/types.ts +0 -79
- package/src/lib/services/in-app-browser.service.ts +0 -30
- package/src/lib/services/link-processor.service.ts +0 -311
- package/src/lib/services/local-storage.service.ts +0 -39
- package/src/lib/services/locale.service.ts +0 -86
- package/src/lib/services/meta/meta.service.ts +0 -64
- package/src/lib/services/meta/types.ts +0 -13
- package/src/lib/services/modal/modal.service.ts +0 -244
- package/src/lib/services/modal/simple-modal-content.component.ts +0 -138
- package/src/lib/services/modal/types.ts +0 -180
- package/src/lib/services/navigation/navigation.service.ts +0 -255
- package/src/lib/services/navigation/types.ts +0 -86
- package/src/lib/services/pagination/index.ts +0 -13
- package/src/lib/services/pagination/pagination.service.ts +0 -243
- package/src/lib/services/pagination/types.ts +0 -133
- package/src/lib/services/presets/config.ts +0 -51
- package/src/lib/services/presets/index.ts +0 -8
- package/src/lib/services/presets/preset.service.ts +0 -105
- package/src/lib/services/presets/types.ts +0 -41
- package/src/lib/services/qr-generator/qr-generator.service.ts +0 -378
- package/src/lib/services/qr-generator/types.ts +0 -207
- package/src/lib/services/skeleton/config.ts +0 -82
- package/src/lib/services/skeleton/directives/index.ts +0 -1
- package/src/lib/services/skeleton/directives/loading.directive.ts +0 -230
- package/src/lib/services/skeleton/index.ts +0 -30
- package/src/lib/services/skeleton/skeleton.service.ts +0 -220
- package/src/lib/services/skeleton/templates/detail-skeleton.component.ts +0 -166
- package/src/lib/services/skeleton/templates/form-skeleton.component.ts +0 -115
- package/src/lib/services/skeleton/templates/grid-skeleton.component.ts +0 -127
- package/src/lib/services/skeleton/templates/index.ts +0 -6
- package/src/lib/services/skeleton/templates/list-skeleton.component.ts +0 -90
- package/src/lib/services/skeleton/templates/profile-skeleton.component.ts +0 -174
- package/src/lib/services/skeleton/templates/table-skeleton.component.ts +0 -113
- package/src/lib/services/skeleton/types.ts +0 -142
- package/src/lib/services/theme.service.ts +0 -154
- package/src/lib/services/toast.service.ts +0 -42
- package/src/lib/services/types.ts +0 -6
- package/src/lib/shared/constants/storage.ts +0 -2
- package/src/lib/shared/pipes/process-links.pipe.ts +0 -64
- package/src/lib/shared/utils/dom.ts +0 -29
- package/src/lib/shared/utils/form-defaults.ts +0 -119
- package/src/lib/shared/utils/styles.ts +0 -39
- package/src/lib/shared/utils/text.ts +0 -12
- package/src/lib/version.ts +0 -5
- package/src/public-api.ts +0 -352
- package/src/stories/Introduction.mdx +0 -649
- package/src/stories/helpers/mock-services.ts +0 -27
- package/src/stories/helpers/storybook-helpers.ts +0 -89
- package/tsconfig.json +0 -32
- package/tsconfig.lib.json +0 -15
- package/tsconfig.lib.prod.json +0 -10
- package/tsconfig.spec.json +0 -14
- /package/{src/lib/components/molecules/image-crop/index.ts → lib/components/molecules/image-crop/index.d.ts} +0 -0
- /package/{src/lib/config/index.ts → lib/config/index.d.ts} +0 -0
- /package/{src/lib/services/image/index.ts → lib/services/image/index.d.ts} +0 -0
- /package/{src/lib/services/meta/index.ts → lib/services/meta/index.d.ts} +0 -0
- /package/{src/lib/services/navigation/index.ts → lib/services/navigation/index.d.ts} +0 -0
|
@@ -0,0 +1,741 @@
|
|
|
1
|
+
import { Component, computed, EventEmitter, inject, Input, Output, signal, } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { Validators } from '@angular/forms';
|
|
4
|
+
import { Router } from '@angular/router';
|
|
5
|
+
import { IonButton, IonButtons, IonContent, IonHeader, IonIcon, IonModal, IonText, IonToolbar, } from '@ionic/angular/standalone';
|
|
6
|
+
import { AuthService } from '../../../services/auth';
|
|
7
|
+
import { ToastService } from '../../../services/toast.service';
|
|
8
|
+
import { I18nService, InputI18nHelper } from '../../../services/i18n';
|
|
9
|
+
import { FormComponent } from '../form/form.component';
|
|
10
|
+
import { ImageComponent } from '../../atoms/image/image.component';
|
|
11
|
+
import { InputType, ComponentStates, } from '../../types';
|
|
12
|
+
import { SolidDefaultBlock } from '../../atoms/button/factory';
|
|
13
|
+
import { LOGIN_DEFAULTS, } from './types';
|
|
14
|
+
import * as i0 from "@angular/core";
|
|
15
|
+
export class LoginComponent {
|
|
16
|
+
constructor() {
|
|
17
|
+
this.props = {};
|
|
18
|
+
this.onSuccess = new EventEmitter();
|
|
19
|
+
this.onError = new EventEmitter();
|
|
20
|
+
this.onMFARequired = new EventEmitter();
|
|
21
|
+
// Services
|
|
22
|
+
this.authService = inject(AuthService);
|
|
23
|
+
this.toastService = inject(ToastService);
|
|
24
|
+
this.router = inject(Router);
|
|
25
|
+
this.i18n = inject(I18nService);
|
|
26
|
+
this.i18nHelper = inject(InputI18nHelper);
|
|
27
|
+
// Timers
|
|
28
|
+
this.resendTimer = null;
|
|
29
|
+
this.resetResendTimer = null;
|
|
30
|
+
// State
|
|
31
|
+
this.isOAuthLoading = false;
|
|
32
|
+
this.isRegisterModalOpen = false;
|
|
33
|
+
this.isVerifyModalOpen = false;
|
|
34
|
+
this.isForgotPasswordModalOpen = false;
|
|
35
|
+
this.isResetPasswordModalOpen = false;
|
|
36
|
+
this.isMFAVerifyModalOpen = false;
|
|
37
|
+
this.pendingVerificationEmail = '';
|
|
38
|
+
this.pendingResetEmail = '';
|
|
39
|
+
this.resendCooldown = 0;
|
|
40
|
+
this.resetResendCooldown = 0;
|
|
41
|
+
// ==========================================
|
|
42
|
+
// FORM STATE SIGNALS
|
|
43
|
+
// ==========================================
|
|
44
|
+
this._loginFormState = signal(ComponentStates.ENABLED);
|
|
45
|
+
this._registerFormState = signal(ComponentStates.ENABLED);
|
|
46
|
+
this._verifyFormState = signal(ComponentStates.ENABLED);
|
|
47
|
+
this._verifyFormSectionName = signal('');
|
|
48
|
+
this._mfaVerifyFormState = signal(ComponentStates.ENABLED);
|
|
49
|
+
this._mfaMethod = signal('TOTP');
|
|
50
|
+
this._forgotPasswordFormState = signal(ComponentStates.ENABLED);
|
|
51
|
+
this._resetPasswordFormState = signal(ComponentStates.ENABLED);
|
|
52
|
+
this._resetFormSectionName = signal('');
|
|
53
|
+
// ==========================================
|
|
54
|
+
// LOGIN FORM (computed)
|
|
55
|
+
// ==========================================
|
|
56
|
+
this.loginFormProps = computed(() => this.i18nHelper.resolveForm({
|
|
57
|
+
nameKey: 'loginTitle',
|
|
58
|
+
i18nNamespace: '_auth',
|
|
59
|
+
sections: [
|
|
60
|
+
{
|
|
61
|
+
name: '',
|
|
62
|
+
order: 0,
|
|
63
|
+
fields: [
|
|
64
|
+
{
|
|
65
|
+
type: InputType.EMAIL,
|
|
66
|
+
name: 'email',
|
|
67
|
+
token: 'login-email',
|
|
68
|
+
hint: '',
|
|
69
|
+
labelKey: 'email',
|
|
70
|
+
placeholderKey: 'emailPlaceholder',
|
|
71
|
+
errorKeys: {
|
|
72
|
+
required: 'emailRequired',
|
|
73
|
+
email: 'emailInvalid',
|
|
74
|
+
},
|
|
75
|
+
validators: [Validators.required, Validators.email],
|
|
76
|
+
order: 0,
|
|
77
|
+
state: ComponentStates.ENABLED,
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
type: InputType.PASSWORD,
|
|
81
|
+
name: 'password',
|
|
82
|
+
token: 'login-password',
|
|
83
|
+
hint: '',
|
|
84
|
+
labelKey: 'password',
|
|
85
|
+
placeholderKey: 'passwordPlaceholder',
|
|
86
|
+
errorKeys: {
|
|
87
|
+
required: 'passwordRequired',
|
|
88
|
+
},
|
|
89
|
+
validators: [Validators.required],
|
|
90
|
+
order: 1,
|
|
91
|
+
state: ComponentStates.ENABLED,
|
|
92
|
+
},
|
|
93
|
+
],
|
|
94
|
+
},
|
|
95
|
+
],
|
|
96
|
+
actions: {
|
|
97
|
+
...SolidDefaultBlock('', 'submit'),
|
|
98
|
+
token: 'login-submit',
|
|
99
|
+
textKey: 'loginSubmit',
|
|
100
|
+
},
|
|
101
|
+
state: this._loginFormState(),
|
|
102
|
+
}));
|
|
103
|
+
// ==========================================
|
|
104
|
+
// REGISTER FORM (computed)
|
|
105
|
+
// ==========================================
|
|
106
|
+
this.registerFormProps = computed(() => this.i18nHelper.resolveForm({
|
|
107
|
+
nameKey: 'registerTitle',
|
|
108
|
+
i18nNamespace: '_auth',
|
|
109
|
+
sections: [
|
|
110
|
+
{
|
|
111
|
+
name: '',
|
|
112
|
+
order: 0,
|
|
113
|
+
fields: [
|
|
114
|
+
{
|
|
115
|
+
type: InputType.TEXT,
|
|
116
|
+
name: 'name',
|
|
117
|
+
token: 'register-name',
|
|
118
|
+
hint: '',
|
|
119
|
+
labelKey: 'fullName',
|
|
120
|
+
placeholderKey: 'namePlaceholder',
|
|
121
|
+
errorKeys: {
|
|
122
|
+
required: 'nameRequired',
|
|
123
|
+
minlength: 'nameMinLength',
|
|
124
|
+
},
|
|
125
|
+
validators: [Validators.required, Validators.minLength(2)],
|
|
126
|
+
order: 0,
|
|
127
|
+
state: ComponentStates.ENABLED,
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
type: InputType.EMAIL,
|
|
131
|
+
name: 'email',
|
|
132
|
+
token: 'register-email',
|
|
133
|
+
hint: '',
|
|
134
|
+
labelKey: 'email',
|
|
135
|
+
placeholderKey: 'emailPlaceholder',
|
|
136
|
+
errorKeys: {
|
|
137
|
+
required: 'emailRequired',
|
|
138
|
+
email: 'emailInvalid',
|
|
139
|
+
},
|
|
140
|
+
validators: [Validators.required, Validators.email],
|
|
141
|
+
order: 1,
|
|
142
|
+
state: ComponentStates.ENABLED,
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
type: InputType.PASSWORD,
|
|
146
|
+
name: 'password',
|
|
147
|
+
token: 'register-password',
|
|
148
|
+
hint: '',
|
|
149
|
+
labelKey: 'password',
|
|
150
|
+
placeholderKey: 'passwordPlaceholder',
|
|
151
|
+
errorKeys: {
|
|
152
|
+
required: 'passwordRequired',
|
|
153
|
+
minlength: 'passwordMinLength',
|
|
154
|
+
},
|
|
155
|
+
validators: [Validators.required, Validators.minLength(8)],
|
|
156
|
+
order: 2,
|
|
157
|
+
state: ComponentStates.ENABLED,
|
|
158
|
+
},
|
|
159
|
+
],
|
|
160
|
+
},
|
|
161
|
+
],
|
|
162
|
+
actions: {
|
|
163
|
+
...SolidDefaultBlock('', 'submit'),
|
|
164
|
+
token: 'register-submit',
|
|
165
|
+
textKey: 'registerSubmit',
|
|
166
|
+
},
|
|
167
|
+
state: this._registerFormState(),
|
|
168
|
+
}));
|
|
169
|
+
// ==========================================
|
|
170
|
+
// VERIFY EMAIL FORM (computed)
|
|
171
|
+
// ==========================================
|
|
172
|
+
this.verifyFormProps = computed(() => {
|
|
173
|
+
const sectionName = this._verifyFormSectionName() || this.t('verifyDescription');
|
|
174
|
+
return this.i18nHelper.resolveForm({
|
|
175
|
+
nameKey: 'verifyTitle',
|
|
176
|
+
i18nNamespace: '_auth',
|
|
177
|
+
sections: [
|
|
178
|
+
{
|
|
179
|
+
name: sectionName,
|
|
180
|
+
order: 0,
|
|
181
|
+
fields: [
|
|
182
|
+
{
|
|
183
|
+
type: InputType.PIN_CODE,
|
|
184
|
+
label: '',
|
|
185
|
+
name: 'code',
|
|
186
|
+
token: 'verify-pin',
|
|
187
|
+
hint: '',
|
|
188
|
+
placeholder: '',
|
|
189
|
+
errorKeys: {
|
|
190
|
+
required: 'codeRequired',
|
|
191
|
+
minlength: 'codeMinLength',
|
|
192
|
+
},
|
|
193
|
+
validators: [Validators.required, Validators.minLength(6)],
|
|
194
|
+
order: 0,
|
|
195
|
+
state: ComponentStates.ENABLED,
|
|
196
|
+
length: 6,
|
|
197
|
+
allowNumbersOnly: true,
|
|
198
|
+
autoFocus: true,
|
|
199
|
+
},
|
|
200
|
+
],
|
|
201
|
+
},
|
|
202
|
+
],
|
|
203
|
+
actions: {
|
|
204
|
+
...SolidDefaultBlock('', 'submit'),
|
|
205
|
+
token: 'verify-submit',
|
|
206
|
+
textKey: 'verifySubmit',
|
|
207
|
+
},
|
|
208
|
+
state: this._verifyFormState(),
|
|
209
|
+
});
|
|
210
|
+
});
|
|
211
|
+
// ==========================================
|
|
212
|
+
// MFA VERIFY FORM (computed)
|
|
213
|
+
// ==========================================
|
|
214
|
+
this.mfaVerifyFormProps = computed(() => {
|
|
215
|
+
const method = this._mfaMethod();
|
|
216
|
+
const sectionName = method === 'TOTP'
|
|
217
|
+
? this.t('mfaTOTP')
|
|
218
|
+
: method === 'EMAIL'
|
|
219
|
+
? this.t('mfaEmail')
|
|
220
|
+
: this.t('mfaSMS');
|
|
221
|
+
return this.i18nHelper.resolveForm({
|
|
222
|
+
nameKey: 'mfaTitle',
|
|
223
|
+
i18nNamespace: '_auth',
|
|
224
|
+
sections: [
|
|
225
|
+
{
|
|
226
|
+
name: sectionName,
|
|
227
|
+
order: 0,
|
|
228
|
+
fields: [
|
|
229
|
+
{
|
|
230
|
+
type: InputType.PIN_CODE,
|
|
231
|
+
label: '',
|
|
232
|
+
name: 'code',
|
|
233
|
+
token: 'mfa-pin',
|
|
234
|
+
hint: '',
|
|
235
|
+
placeholder: '',
|
|
236
|
+
errorKeys: {
|
|
237
|
+
required: 'codeRequired',
|
|
238
|
+
minlength: 'codeMinLength',
|
|
239
|
+
},
|
|
240
|
+
validators: [Validators.required, Validators.minLength(6)],
|
|
241
|
+
order: 0,
|
|
242
|
+
state: ComponentStates.ENABLED,
|
|
243
|
+
length: 6,
|
|
244
|
+
allowNumbersOnly: true,
|
|
245
|
+
autoFocus: true,
|
|
246
|
+
},
|
|
247
|
+
],
|
|
248
|
+
},
|
|
249
|
+
],
|
|
250
|
+
actions: {
|
|
251
|
+
...SolidDefaultBlock('', 'submit'),
|
|
252
|
+
token: 'mfa-verify-submit',
|
|
253
|
+
textKey: 'verifySubmit',
|
|
254
|
+
},
|
|
255
|
+
state: this._mfaVerifyFormState(),
|
|
256
|
+
});
|
|
257
|
+
});
|
|
258
|
+
// ==========================================
|
|
259
|
+
// FORGOT PASSWORD FORM (computed)
|
|
260
|
+
// ==========================================
|
|
261
|
+
this.forgotPasswordFormProps = computed(() => this.i18nHelper.resolveForm({
|
|
262
|
+
nameKey: 'forgotTitle',
|
|
263
|
+
i18nNamespace: '_auth',
|
|
264
|
+
sections: [
|
|
265
|
+
{
|
|
266
|
+
name: this.t('forgotDescription'),
|
|
267
|
+
order: 0,
|
|
268
|
+
fields: [
|
|
269
|
+
{
|
|
270
|
+
type: InputType.EMAIL,
|
|
271
|
+
label: '',
|
|
272
|
+
name: 'email',
|
|
273
|
+
token: 'forgot-email',
|
|
274
|
+
hint: '',
|
|
275
|
+
placeholderKey: 'emailPlaceholder',
|
|
276
|
+
errorKeys: {
|
|
277
|
+
required: 'emailRequired',
|
|
278
|
+
email: 'emailInvalid',
|
|
279
|
+
},
|
|
280
|
+
validators: [Validators.required, Validators.email],
|
|
281
|
+
order: 0,
|
|
282
|
+
state: ComponentStates.ENABLED,
|
|
283
|
+
},
|
|
284
|
+
],
|
|
285
|
+
},
|
|
286
|
+
],
|
|
287
|
+
actions: {
|
|
288
|
+
...SolidDefaultBlock('', 'submit'),
|
|
289
|
+
token: 'forgot-submit',
|
|
290
|
+
textKey: 'forgotSubmit',
|
|
291
|
+
},
|
|
292
|
+
state: this._forgotPasswordFormState(),
|
|
293
|
+
}));
|
|
294
|
+
// ==========================================
|
|
295
|
+
// RESET PASSWORD FORM (computed)
|
|
296
|
+
// ==========================================
|
|
297
|
+
this.resetPasswordFormProps = computed(() => {
|
|
298
|
+
const sectionName = this._resetFormSectionName() || this.t('resetDescription');
|
|
299
|
+
return this.i18nHelper.resolveForm({
|
|
300
|
+
nameKey: 'resetTitle',
|
|
301
|
+
i18nNamespace: '_auth',
|
|
302
|
+
sections: [
|
|
303
|
+
{
|
|
304
|
+
name: sectionName,
|
|
305
|
+
order: 0,
|
|
306
|
+
fields: [
|
|
307
|
+
{
|
|
308
|
+
type: InputType.PIN_CODE,
|
|
309
|
+
label: '',
|
|
310
|
+
name: 'code',
|
|
311
|
+
token: 'reset-pin',
|
|
312
|
+
hint: '',
|
|
313
|
+
placeholder: '',
|
|
314
|
+
errorKeys: {
|
|
315
|
+
required: 'codeRequired',
|
|
316
|
+
minlength: 'codeMinLength',
|
|
317
|
+
},
|
|
318
|
+
validators: [Validators.required, Validators.minLength(6)],
|
|
319
|
+
order: 0,
|
|
320
|
+
state: ComponentStates.ENABLED,
|
|
321
|
+
length: 6,
|
|
322
|
+
allowNumbersOnly: true,
|
|
323
|
+
autoFocus: true,
|
|
324
|
+
},
|
|
325
|
+
{
|
|
326
|
+
type: InputType.PASSWORD,
|
|
327
|
+
name: 'newPassword',
|
|
328
|
+
token: 'reset-new-password',
|
|
329
|
+
labelKey: 'newPassword',
|
|
330
|
+
hintKey: 'newPasswordHint',
|
|
331
|
+
placeholderKey: 'passwordPlaceholder',
|
|
332
|
+
errorKeys: {
|
|
333
|
+
required: 'passwordRequired',
|
|
334
|
+
minlength: 'passwordMinLength',
|
|
335
|
+
},
|
|
336
|
+
validators: [Validators.required, Validators.minLength(8)],
|
|
337
|
+
order: 1,
|
|
338
|
+
state: ComponentStates.ENABLED,
|
|
339
|
+
},
|
|
340
|
+
],
|
|
341
|
+
},
|
|
342
|
+
],
|
|
343
|
+
actions: {
|
|
344
|
+
...SolidDefaultBlock('', 'submit'),
|
|
345
|
+
token: 'reset-submit',
|
|
346
|
+
textKey: 'resetSubmit',
|
|
347
|
+
},
|
|
348
|
+
state: this._resetPasswordFormState(),
|
|
349
|
+
});
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Helper method for translating auth-related strings.
|
|
354
|
+
* Exposed to template for dynamic text.
|
|
355
|
+
*/
|
|
356
|
+
t(key, data) {
|
|
357
|
+
return this.i18n.t(key, '_auth', data);
|
|
358
|
+
}
|
|
359
|
+
// Resolved props with defaults
|
|
360
|
+
get config() {
|
|
361
|
+
return { ...LOGIN_DEFAULTS, ...this.props };
|
|
362
|
+
}
|
|
363
|
+
// ==========================================
|
|
364
|
+
// HANDLERS
|
|
365
|
+
// ==========================================
|
|
366
|
+
loginHandler(event) {
|
|
367
|
+
const email = event.fields['email'];
|
|
368
|
+
const password = event.fields['password'];
|
|
369
|
+
if (!email || !password) {
|
|
370
|
+
this.showToast(this.t('completeAllFields'));
|
|
371
|
+
return;
|
|
372
|
+
}
|
|
373
|
+
this._loginFormState.set(ComponentStates.WORKING);
|
|
374
|
+
this.authService.signin({ email, password }).subscribe({
|
|
375
|
+
next: () => {
|
|
376
|
+
this._loginFormState.set(ComponentStates.ENABLED);
|
|
377
|
+
if (this.authService.mfaPending().required) {
|
|
378
|
+
this.openMFAVerifyModal();
|
|
379
|
+
return;
|
|
380
|
+
}
|
|
381
|
+
this.handleLoginSuccess();
|
|
382
|
+
},
|
|
383
|
+
error: (err) => {
|
|
384
|
+
this._loginFormState.set(ComponentStates.ENABLED);
|
|
385
|
+
const errorCode = err?.code;
|
|
386
|
+
if (errorCode === 'AUTHV2_EMAIL_NOT_VERIFIED') {
|
|
387
|
+
this.openVerifyModal(email);
|
|
388
|
+
return;
|
|
389
|
+
}
|
|
390
|
+
this.handleError(err, 'signin');
|
|
391
|
+
},
|
|
392
|
+
});
|
|
393
|
+
}
|
|
394
|
+
loginWithOAuth(provider) {
|
|
395
|
+
this.isOAuthLoading = true;
|
|
396
|
+
this.authService.signinWithOAuth(provider).subscribe({
|
|
397
|
+
next: () => {
|
|
398
|
+
this.isOAuthLoading = false;
|
|
399
|
+
if (this.authService.mfaPending().required) {
|
|
400
|
+
this.openMFAVerifyModal();
|
|
401
|
+
return;
|
|
402
|
+
}
|
|
403
|
+
this.handleLoginSuccess(provider);
|
|
404
|
+
},
|
|
405
|
+
error: (err) => {
|
|
406
|
+
this.isOAuthLoading = false;
|
|
407
|
+
const errorCode = err?.code;
|
|
408
|
+
if (errorCode === 'POPUP_CLOSED') {
|
|
409
|
+
return;
|
|
410
|
+
}
|
|
411
|
+
this.handleError(err, 'oauth');
|
|
412
|
+
},
|
|
413
|
+
});
|
|
414
|
+
}
|
|
415
|
+
// ==========================================
|
|
416
|
+
// REGISTER HANDLERS
|
|
417
|
+
// ==========================================
|
|
418
|
+
openRegisterModal() {
|
|
419
|
+
this.isRegisterModalOpen = true;
|
|
420
|
+
}
|
|
421
|
+
closeRegisterModal() {
|
|
422
|
+
this.isRegisterModalOpen = false;
|
|
423
|
+
}
|
|
424
|
+
registerHandler(event) {
|
|
425
|
+
const name = event.fields['name'];
|
|
426
|
+
const email = event.fields['email'];
|
|
427
|
+
const password = event.fields['password'];
|
|
428
|
+
if (!name || !email || !password) {
|
|
429
|
+
this.showToast(this.t('completeAllFields'));
|
|
430
|
+
return;
|
|
431
|
+
}
|
|
432
|
+
this._registerFormState.set(ComponentStates.WORKING);
|
|
433
|
+
this.authService.signup({ name, email, password }).subscribe({
|
|
434
|
+
next: () => {
|
|
435
|
+
this._registerFormState.set(ComponentStates.ENABLED);
|
|
436
|
+
this.closeRegisterModal();
|
|
437
|
+
this.openVerifyModal(email);
|
|
438
|
+
},
|
|
439
|
+
error: (err) => {
|
|
440
|
+
this._registerFormState.set(ComponentStates.ENABLED);
|
|
441
|
+
this.handleError(err, 'signup');
|
|
442
|
+
},
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
// ==========================================
|
|
446
|
+
// VERIFY EMAIL HANDLERS
|
|
447
|
+
// ==========================================
|
|
448
|
+
openVerifyModal(email) {
|
|
449
|
+
this.pendingVerificationEmail = email;
|
|
450
|
+
this._verifyFormSectionName.set(`${this.t('verifyDescription').replace('.', '')} (${email})`);
|
|
451
|
+
this._verifyFormState.set(ComponentStates.ENABLED);
|
|
452
|
+
this.isVerifyModalOpen = true;
|
|
453
|
+
this.startResendCooldown();
|
|
454
|
+
}
|
|
455
|
+
closeVerifyModal() {
|
|
456
|
+
this.isVerifyModalOpen = false;
|
|
457
|
+
this.pendingVerificationEmail = '';
|
|
458
|
+
this._verifyFormSectionName.set('');
|
|
459
|
+
this.stopResendCooldown();
|
|
460
|
+
}
|
|
461
|
+
verifyHandler(event) {
|
|
462
|
+
const code = event.fields['code'];
|
|
463
|
+
this._verifyFormState.set(ComponentStates.WORKING);
|
|
464
|
+
this.authService
|
|
465
|
+
.verifyEmail({
|
|
466
|
+
email: this.pendingVerificationEmail,
|
|
467
|
+
code,
|
|
468
|
+
})
|
|
469
|
+
.subscribe({
|
|
470
|
+
next: () => {
|
|
471
|
+
this._verifyFormState.set(ComponentStates.ENABLED);
|
|
472
|
+
this.showToast(this.t('emailVerified'));
|
|
473
|
+
this.closeVerifyModal();
|
|
474
|
+
this.handleLoginSuccess();
|
|
475
|
+
},
|
|
476
|
+
error: (err) => {
|
|
477
|
+
this._verifyFormState.set(ComponentStates.ENABLED);
|
|
478
|
+
this.handleError(err, 'verify');
|
|
479
|
+
},
|
|
480
|
+
});
|
|
481
|
+
}
|
|
482
|
+
resendCode() {
|
|
483
|
+
if (this.resendCooldown > 0)
|
|
484
|
+
return;
|
|
485
|
+
this.authService
|
|
486
|
+
.resendCode({
|
|
487
|
+
email: this.pendingVerificationEmail,
|
|
488
|
+
type: 'EMAIL_VERIFY',
|
|
489
|
+
})
|
|
490
|
+
.subscribe({
|
|
491
|
+
next: () => {
|
|
492
|
+
this.showToast(this.t('codeSent'));
|
|
493
|
+
this.startResendCooldown();
|
|
494
|
+
},
|
|
495
|
+
error: (err) => {
|
|
496
|
+
this.handleError(err, 'verify');
|
|
497
|
+
},
|
|
498
|
+
});
|
|
499
|
+
}
|
|
500
|
+
// ==========================================
|
|
501
|
+
// MFA HANDLERS
|
|
502
|
+
// ==========================================
|
|
503
|
+
openMFAVerifyModal() {
|
|
504
|
+
const method = this.authService.mfaPending().method;
|
|
505
|
+
this._mfaMethod.set(method);
|
|
506
|
+
this._mfaVerifyFormState.set(ComponentStates.ENABLED);
|
|
507
|
+
this.isMFAVerifyModalOpen = true;
|
|
508
|
+
this.onMFARequired.emit({ method });
|
|
509
|
+
}
|
|
510
|
+
closeMFAVerifyModal() {
|
|
511
|
+
this.isMFAVerifyModalOpen = false;
|
|
512
|
+
}
|
|
513
|
+
verifyMFAHandler(event) {
|
|
514
|
+
const code = event.fields['code'];
|
|
515
|
+
this._mfaVerifyFormState.set(ComponentStates.WORKING);
|
|
516
|
+
this.authService.verifyMFA(code).subscribe({
|
|
517
|
+
next: () => {
|
|
518
|
+
this._mfaVerifyFormState.set(ComponentStates.ENABLED);
|
|
519
|
+
this.closeMFAVerifyModal();
|
|
520
|
+
this.handleLoginSuccess(undefined, true);
|
|
521
|
+
},
|
|
522
|
+
error: (err) => {
|
|
523
|
+
this._mfaVerifyFormState.set(ComponentStates.ENABLED);
|
|
524
|
+
this.handleError(err, 'mfa');
|
|
525
|
+
},
|
|
526
|
+
});
|
|
527
|
+
}
|
|
528
|
+
// ==========================================
|
|
529
|
+
// FORGOT PASSWORD HANDLERS
|
|
530
|
+
// ==========================================
|
|
531
|
+
openForgotPasswordModal() {
|
|
532
|
+
this.isForgotPasswordModalOpen = true;
|
|
533
|
+
}
|
|
534
|
+
closeForgotPasswordModal() {
|
|
535
|
+
this.isForgotPasswordModalOpen = false;
|
|
536
|
+
}
|
|
537
|
+
forgotPasswordHandler(event) {
|
|
538
|
+
const email = event.fields['email'];
|
|
539
|
+
if (!email) {
|
|
540
|
+
this.showToast(this.t('enterEmail'));
|
|
541
|
+
return;
|
|
542
|
+
}
|
|
543
|
+
this._forgotPasswordFormState.set(ComponentStates.WORKING);
|
|
544
|
+
this.authService.forgotPassword({ email }).subscribe({
|
|
545
|
+
next: () => {
|
|
546
|
+
this._forgotPasswordFormState.set(ComponentStates.ENABLED);
|
|
547
|
+
this.closeForgotPasswordModal();
|
|
548
|
+
this.openResetPasswordModal(email);
|
|
549
|
+
this.showToast(this.t('codeSent'));
|
|
550
|
+
},
|
|
551
|
+
error: (err) => {
|
|
552
|
+
this._forgotPasswordFormState.set(ComponentStates.ENABLED);
|
|
553
|
+
this.handleError(err, 'forgot');
|
|
554
|
+
},
|
|
555
|
+
});
|
|
556
|
+
}
|
|
557
|
+
// ==========================================
|
|
558
|
+
// RESET PASSWORD HANDLERS
|
|
559
|
+
// ==========================================
|
|
560
|
+
openResetPasswordModal(email) {
|
|
561
|
+
this.pendingResetEmail = email;
|
|
562
|
+
this._resetFormSectionName.set(`${this.t('resetDescription').replace('.', '')} (${email})`);
|
|
563
|
+
this._resetPasswordFormState.set(ComponentStates.ENABLED);
|
|
564
|
+
this.isResetPasswordModalOpen = true;
|
|
565
|
+
this.startResetResendCooldown();
|
|
566
|
+
}
|
|
567
|
+
closeResetPasswordModal() {
|
|
568
|
+
this.isResetPasswordModalOpen = false;
|
|
569
|
+
this.pendingResetEmail = '';
|
|
570
|
+
this._resetFormSectionName.set('');
|
|
571
|
+
this.stopResetResendCooldown();
|
|
572
|
+
}
|
|
573
|
+
resetPasswordHandler(event) {
|
|
574
|
+
const code = event.fields['code'];
|
|
575
|
+
const newPassword = event.fields['newPassword'];
|
|
576
|
+
this._resetPasswordFormState.set(ComponentStates.WORKING);
|
|
577
|
+
this.authService
|
|
578
|
+
.resetPassword({
|
|
579
|
+
email: this.pendingResetEmail,
|
|
580
|
+
code,
|
|
581
|
+
newPassword,
|
|
582
|
+
})
|
|
583
|
+
.subscribe({
|
|
584
|
+
next: () => {
|
|
585
|
+
this._resetPasswordFormState.set(ComponentStates.ENABLED);
|
|
586
|
+
this.showToast(this.t('passwordUpdated'));
|
|
587
|
+
this.closeResetPasswordModal();
|
|
588
|
+
},
|
|
589
|
+
error: (err) => {
|
|
590
|
+
this._resetPasswordFormState.set(ComponentStates.ENABLED);
|
|
591
|
+
this.handleError(err, 'reset');
|
|
592
|
+
},
|
|
593
|
+
});
|
|
594
|
+
}
|
|
595
|
+
resendResetCode() {
|
|
596
|
+
if (this.resetResendCooldown > 0)
|
|
597
|
+
return;
|
|
598
|
+
this.authService
|
|
599
|
+
.resendCode({
|
|
600
|
+
email: this.pendingResetEmail,
|
|
601
|
+
type: 'PASSWORD_RESET',
|
|
602
|
+
})
|
|
603
|
+
.subscribe({
|
|
604
|
+
next: () => {
|
|
605
|
+
this.showToast(this.t('codeSent'));
|
|
606
|
+
this.startResetResendCooldown();
|
|
607
|
+
},
|
|
608
|
+
error: (err) => {
|
|
609
|
+
this.handleError(err, 'reset');
|
|
610
|
+
},
|
|
611
|
+
});
|
|
612
|
+
}
|
|
613
|
+
// ==========================================
|
|
614
|
+
// HELPERS
|
|
615
|
+
// ==========================================
|
|
616
|
+
handleLoginSuccess(oauthProvider, mfaCompleted) {
|
|
617
|
+
this.showToast(this.t('welcome'));
|
|
618
|
+
this.onSuccess.emit({
|
|
619
|
+
user: this.authService.user(),
|
|
620
|
+
mfaCompleted,
|
|
621
|
+
oauthProvider,
|
|
622
|
+
});
|
|
623
|
+
if (this.props.redirectOnSuccess) {
|
|
624
|
+
this.router.navigate([this.props.redirectOnSuccess]);
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
handleError(err, operation) {
|
|
628
|
+
const message = this.getErrorMessage(err);
|
|
629
|
+
this.showToast(message);
|
|
630
|
+
this.onError.emit({
|
|
631
|
+
code: err?.code,
|
|
632
|
+
message,
|
|
633
|
+
operation,
|
|
634
|
+
});
|
|
635
|
+
}
|
|
636
|
+
showToast(message) {
|
|
637
|
+
this.toastService.show({
|
|
638
|
+
message,
|
|
639
|
+
duration: 3500,
|
|
640
|
+
position: 'top',
|
|
641
|
+
color: 'dark',
|
|
642
|
+
});
|
|
643
|
+
}
|
|
644
|
+
getErrorMessage(err) {
|
|
645
|
+
const error = err;
|
|
646
|
+
// Map error codes to i18n keys
|
|
647
|
+
const errorKeyMap = {
|
|
648
|
+
// Signin
|
|
649
|
+
AUTHV2_INVALID_CREDENTIALS: 'errorInvalidCredentials',
|
|
650
|
+
AUTHV2_EMAIL_NOT_VERIFIED: 'errorEmailNotVerified',
|
|
651
|
+
AUTHV2_ACCOUNT_SUSPENDED: 'errorAccountSuspended',
|
|
652
|
+
// Signup
|
|
653
|
+
AUTHV2_EMAIL_EXISTS: 'errorEmailExists',
|
|
654
|
+
AUTHV2_WEAK_PASSWORD: 'errorWeakPassword',
|
|
655
|
+
// Verification codes
|
|
656
|
+
AUTHV2_INVALID_CODE: 'errorInvalidCode',
|
|
657
|
+
AUTHV2_EXPIRED_CODE: 'errorExpiredCode',
|
|
658
|
+
AUTHV2_CODE_EXPIRED: 'errorExpiredCode',
|
|
659
|
+
AUTHV2_TOO_MANY_ATTEMPTS: 'errorTooManyAttempts',
|
|
660
|
+
// MFA
|
|
661
|
+
AUTHV2_MFA_INVALID_CODE: 'errorMFAInvalidCode',
|
|
662
|
+
// OAuth
|
|
663
|
+
POPUP_BLOCKED: 'errorPopupBlocked',
|
|
664
|
+
OAUTH_FAILED: 'errorOAuthFailed',
|
|
665
|
+
};
|
|
666
|
+
const errorCode = error?.error?.code || error?.code;
|
|
667
|
+
if (errorCode && errorKeyMap[errorCode]) {
|
|
668
|
+
return this.t(errorKeyMap[errorCode]);
|
|
669
|
+
}
|
|
670
|
+
if (error?.error?.message) {
|
|
671
|
+
return error.error.message;
|
|
672
|
+
}
|
|
673
|
+
return this.t('errorGeneric');
|
|
674
|
+
}
|
|
675
|
+
// ==========================================
|
|
676
|
+
// COOLDOWN TIMERS
|
|
677
|
+
// ==========================================
|
|
678
|
+
startResendCooldown() {
|
|
679
|
+
this.resendCooldown = 30;
|
|
680
|
+
this.resendTimer = setInterval(() => {
|
|
681
|
+
this.resendCooldown--;
|
|
682
|
+
if (this.resendCooldown <= 0) {
|
|
683
|
+
this.stopResendCooldown();
|
|
684
|
+
}
|
|
685
|
+
}, 1000);
|
|
686
|
+
}
|
|
687
|
+
stopResendCooldown() {
|
|
688
|
+
if (this.resendTimer) {
|
|
689
|
+
clearInterval(this.resendTimer);
|
|
690
|
+
this.resendTimer = null;
|
|
691
|
+
}
|
|
692
|
+
this.resendCooldown = 0;
|
|
693
|
+
}
|
|
694
|
+
startResetResendCooldown() {
|
|
695
|
+
this.resetResendCooldown = 30;
|
|
696
|
+
this.resetResendTimer = setInterval(() => {
|
|
697
|
+
this.resetResendCooldown--;
|
|
698
|
+
if (this.resetResendCooldown <= 0) {
|
|
699
|
+
this.stopResetResendCooldown();
|
|
700
|
+
}
|
|
701
|
+
}, 1000);
|
|
702
|
+
}
|
|
703
|
+
stopResetResendCooldown() {
|
|
704
|
+
if (this.resetResendTimer) {
|
|
705
|
+
clearInterval(this.resetResendTimer);
|
|
706
|
+
this.resetResendTimer = null;
|
|
707
|
+
}
|
|
708
|
+
this.resetResendCooldown = 0;
|
|
709
|
+
}
|
|
710
|
+
ngOnDestroy() {
|
|
711
|
+
this.stopResendCooldown();
|
|
712
|
+
this.stopResetResendCooldown();
|
|
713
|
+
}
|
|
714
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LoginComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
715
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LoginComponent, isStandalone: true, selector: "val-login", inputs: { props: "props" }, outputs: { onSuccess: "onSuccess", onError: "onError", onMFARequired: "onMFARequired" }, ngImport: i0, template: "<div class=\"val-login\" [class.val-login--card]=\"config.showCard\">\n <!-- Logo -->\n @if (props.logo) {\n <div class=\"logo-container\">\n <val-image [props]=\"props.logo\" />\n </div>\n }\n\n <!-- Login Form -->\n <val-form [props]=\"loginFormProps()\" (onSubmit)=\"loginHandler($event)\" />\n\n <!-- OAuth Section -->\n @if (config.showOAuth && config.oauthProviders.length > 0) {\n <div class=\"oauth-separator\">\n <span>{{ t('orContinueWith') }}</span>\n </div>\n\n <div class=\"oauth-buttons\">\n @for (provider of config.oauthProviders; track provider) {\n <ion-button\n expand=\"block\"\n fill=\"outline\"\n color=\"dark\"\n (click)=\"loginWithOAuth(provider)\"\n [disabled]=\"isOAuthLoading\"\n >\n @switch (provider) {\n @case ('google') {\n <ion-icon slot=\"start\" name=\"logo-google\"></ion-icon>\n {{ isOAuthLoading ? t('connecting') : t('continueWithGoogle') }}\n }\n @case ('apple') {\n <ion-icon slot=\"start\" name=\"logo-apple\"></ion-icon>\n {{ isOAuthLoading ? t('connecting') : t('continueWithApple') }}\n }\n @case ('microsoft') {\n <ion-icon slot=\"start\" name=\"logo-microsoft\"></ion-icon>\n {{ isOAuthLoading ? t('connecting') : t('continueWithMicrosoft') }}\n }\n }\n </ion-button>\n }\n </div>\n }\n\n <!-- Register Link -->\n @if (config.showRegister) {\n <div class=\"auth-link\">\n <ion-text color=\"dark\">\n {{ t('noAccount') }}\n <a (click)=\"openRegisterModal()\">{{ t('register') }}</a>\n </ion-text>\n </div>\n }\n\n <!-- Forgot Password Link -->\n @if (config.showForgotPassword) {\n <div class=\"auth-link forgot-password\">\n <ion-text color=\"dark\">\n {{ t('forgotLink') }}\n <a (click)=\"openForgotPasswordModal()\">{{ t('recoverPassword') }}</a>\n </ion-text>\n </div>\n }\n\n <!-- Legal Notice -->\n @if (props.legal) {\n <div class=\"legal-notice\">\n <ion-text color=\"medium\">\n <p>\n {{ t('legalPrefix') }}\n @if (props.legal.companyLink) {\n <a [href]=\"props.legal.companyLink\"><strong>{{ props.legal.companyName }}</strong></a>\n } @else {\n <strong>{{ props.legal.companyName }}</strong>\n }\n {{ t('legalSuffix') }}\n @if (props.legal.termsLink) {\n <a [href]=\"props.legal.termsLink\">{{ t('termsAndConditions') }}</a>\n } @else {\n <span>{{ t('termsAndConditions') }}</span>\n }\n {{ t('and') }}\n @if (props.legal.privacyLink) {\n <a [href]=\"props.legal.privacyLink\">{{ t('privacyPolicy') }}</a>\n } @else {\n <span>{{ t('privacyPolicy') }}</span>\n }.\n </p>\n </ion-text>\n </div>\n }\n</div>\n\n<!-- Register Modal -->\n<ion-modal [isOpen]=\"isRegisterModalOpen\" (didDismiss)=\"closeRegisterModal()\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button fill=\"clear\" (click)=\"closeRegisterModal()\">\n <ion-icon name=\"close-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\">\n <section class=\"modal-form-section\">\n @if (props.logo) {\n <div class=\"logo-container\">\n <val-image [props]=\"props.logo\" />\n </div>\n }\n <val-form [props]=\"registerFormProps()\" (onSubmit)=\"registerHandler($event)\" />\n <div class=\"auth-link\">\n <ion-text color=\"dark\">\n {{ t('hasAccount') }}\n <a (click)=\"closeRegisterModal()\">{{ t('signIn') }}</a>\n </ion-text>\n </div>\n </section>\n </ion-content>\n </ng-template>\n</ion-modal>\n\n<!-- Verify Email Modal -->\n<ion-modal [isOpen]=\"isVerifyModalOpen\" [backdropDismiss]=\"false\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button fill=\"clear\" (click)=\"closeVerifyModal()\">\n <ion-icon name=\"close-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\">\n <section class=\"modal-form-section\">\n @if (props.logo) {\n <div class=\"logo-container\">\n <val-image [props]=\"props.logo\" />\n </div>\n }\n <val-form [props]=\"verifyFormProps()\" (onSubmit)=\"verifyHandler($event)\" />\n <div class=\"resend-link\">\n <ion-text color=\"dark\">\n {{ t('noCodeReceived') }}\n @if (resendCooldown > 0) {\n <span class=\"cooldown\">{{ t('resendIn', { seconds: resendCooldown.toString() }) }}</span>\n } @else {\n <a (click)=\"resendCode()\">{{ t('resend') }}</a>\n }\n </ion-text>\n </div>\n </section>\n </ion-content>\n </ng-template>\n</ion-modal>\n\n<!-- Forgot Password Modal -->\n<ion-modal [isOpen]=\"isForgotPasswordModalOpen\" (didDismiss)=\"closeForgotPasswordModal()\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button fill=\"clear\" (click)=\"closeForgotPasswordModal()\">\n <ion-icon name=\"close-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\">\n <section class=\"modal-form-section\">\n @if (props.logo) {\n <div class=\"logo-container\">\n <val-image [props]=\"props.logo\" />\n </div>\n }\n <val-form [props]=\"forgotPasswordFormProps()\" (onSubmit)=\"forgotPasswordHandler($event)\" />\n </section>\n </ion-content>\n </ng-template>\n</ion-modal>\n\n<!-- Reset Password Modal -->\n<ion-modal [isOpen]=\"isResetPasswordModalOpen\" [backdropDismiss]=\"false\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button fill=\"clear\" (click)=\"closeResetPasswordModal()\">\n <ion-icon name=\"close-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\">\n <section class=\"modal-form-section\">\n @if (props.logo) {\n <div class=\"logo-container\">\n <val-image [props]=\"props.logo\" />\n </div>\n }\n <val-form [props]=\"resetPasswordFormProps()\" (onSubmit)=\"resetPasswordHandler($event)\" />\n <div class=\"resend-link\">\n <ion-text color=\"dark\">\n {{ t('noCodeReceived') }}\n @if (resetResendCooldown > 0) {\n <span class=\"cooldown\">{{ t('resendIn', { seconds: resetResendCooldown.toString() }) }}</span>\n } @else {\n <a (click)=\"resendResetCode()\">{{ t('resend') }}</a>\n }\n </ion-text>\n </div>\n </section>\n </ion-content>\n </ng-template>\n</ion-modal>\n\n<!-- MFA Verify Modal -->\n<ion-modal [isOpen]=\"isMFAVerifyModalOpen\" [backdropDismiss]=\"false\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button fill=\"clear\" (click)=\"closeMFAVerifyModal()\">\n <ion-icon name=\"close-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\">\n <section class=\"modal-form-section\">\n @if (props.logo) {\n <div class=\"logo-container\">\n <val-image [props]=\"props.logo\" />\n </div>\n }\n <val-form [props]=\"mfaVerifyFormProps()\" (onSubmit)=\"verifyMFAHandler($event)\" />\n </section>\n </ion-content>\n </ng-template>\n</ion-modal>\n", styles: [".val-login{width:100%}.val-login--card{padding:1rem;background:var(--ion-color-light);border-radius:16px;box-shadow:0 2px 8px #00000014}.logo-container{max-width:130px;margin-bottom:1.5rem}.auth-link{text-align:center;margin-top:1rem;font-size:.9rem}.auth-link a{color:var(--ion-color-primary);text-decoration:none;font-weight:500;cursor:pointer}.auth-link a:hover{text-decoration:underline}.oauth-separator{display:flex;align-items:center;margin:1.5rem 0}.oauth-separator:before,.oauth-separator:after{content:\"\";flex:1;height:1px;background:var(--ion-color-medium-tint)}.oauth-separator span{padding:0 1rem;color:var(--ion-color-dark);font-size:.85rem}.oauth-buttons{margin-bottom:1rem}.oauth-buttons ion-button{--border-radius: 8px;--border-width: 1px}.oauth-buttons ion-icon{font-size:1.2rem;margin-right:.5rem}.legal-notice{margin-top:1.5rem;padding-top:1rem;border-top:1px solid var(--ion-color-medium-tint)}.legal-notice p{font-size:.75rem;line-height:1.5;text-align:center;margin:0}.legal-notice a{color:var(--ion-color-primary);text-decoration:none}.legal-notice a:hover{text-decoration:underline}.resend-link{text-align:center;margin-top:1rem;font-size:.9rem}.resend-link a{color:var(--ion-color-primary);cursor:pointer;font-weight:500}.resend-link a:hover{text-decoration:underline}.resend-link .cooldown{color:var(--ion-color-medium)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonModal, selector: "ion-modal" }, { kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: FormComponent, selector: "val-form", inputs: ["props"], outputs: ["onSubmit", "onInvalid", "onSelectChange"] }, { kind: "component", type: ImageComponent, selector: "val-image", inputs: ["props"] }] }); }
|
|
716
|
+
}
|
|
717
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LoginComponent, decorators: [{
|
|
718
|
+
type: Component,
|
|
719
|
+
args: [{ selector: 'val-login', standalone: true, imports: [
|
|
720
|
+
CommonModule,
|
|
721
|
+
IonButton,
|
|
722
|
+
IonButtons,
|
|
723
|
+
IonContent,
|
|
724
|
+
IonHeader,
|
|
725
|
+
IonIcon,
|
|
726
|
+
IonModal,
|
|
727
|
+
IonText,
|
|
728
|
+
IonToolbar,
|
|
729
|
+
FormComponent,
|
|
730
|
+
ImageComponent,
|
|
731
|
+
], template: "<div class=\"val-login\" [class.val-login--card]=\"config.showCard\">\n <!-- Logo -->\n @if (props.logo) {\n <div class=\"logo-container\">\n <val-image [props]=\"props.logo\" />\n </div>\n }\n\n <!-- Login Form -->\n <val-form [props]=\"loginFormProps()\" (onSubmit)=\"loginHandler($event)\" />\n\n <!-- OAuth Section -->\n @if (config.showOAuth && config.oauthProviders.length > 0) {\n <div class=\"oauth-separator\">\n <span>{{ t('orContinueWith') }}</span>\n </div>\n\n <div class=\"oauth-buttons\">\n @for (provider of config.oauthProviders; track provider) {\n <ion-button\n expand=\"block\"\n fill=\"outline\"\n color=\"dark\"\n (click)=\"loginWithOAuth(provider)\"\n [disabled]=\"isOAuthLoading\"\n >\n @switch (provider) {\n @case ('google') {\n <ion-icon slot=\"start\" name=\"logo-google\"></ion-icon>\n {{ isOAuthLoading ? t('connecting') : t('continueWithGoogle') }}\n }\n @case ('apple') {\n <ion-icon slot=\"start\" name=\"logo-apple\"></ion-icon>\n {{ isOAuthLoading ? t('connecting') : t('continueWithApple') }}\n }\n @case ('microsoft') {\n <ion-icon slot=\"start\" name=\"logo-microsoft\"></ion-icon>\n {{ isOAuthLoading ? t('connecting') : t('continueWithMicrosoft') }}\n }\n }\n </ion-button>\n }\n </div>\n }\n\n <!-- Register Link -->\n @if (config.showRegister) {\n <div class=\"auth-link\">\n <ion-text color=\"dark\">\n {{ t('noAccount') }}\n <a (click)=\"openRegisterModal()\">{{ t('register') }}</a>\n </ion-text>\n </div>\n }\n\n <!-- Forgot Password Link -->\n @if (config.showForgotPassword) {\n <div class=\"auth-link forgot-password\">\n <ion-text color=\"dark\">\n {{ t('forgotLink') }}\n <a (click)=\"openForgotPasswordModal()\">{{ t('recoverPassword') }}</a>\n </ion-text>\n </div>\n }\n\n <!-- Legal Notice -->\n @if (props.legal) {\n <div class=\"legal-notice\">\n <ion-text color=\"medium\">\n <p>\n {{ t('legalPrefix') }}\n @if (props.legal.companyLink) {\n <a [href]=\"props.legal.companyLink\"><strong>{{ props.legal.companyName }}</strong></a>\n } @else {\n <strong>{{ props.legal.companyName }}</strong>\n }\n {{ t('legalSuffix') }}\n @if (props.legal.termsLink) {\n <a [href]=\"props.legal.termsLink\">{{ t('termsAndConditions') }}</a>\n } @else {\n <span>{{ t('termsAndConditions') }}</span>\n }\n {{ t('and') }}\n @if (props.legal.privacyLink) {\n <a [href]=\"props.legal.privacyLink\">{{ t('privacyPolicy') }}</a>\n } @else {\n <span>{{ t('privacyPolicy') }}</span>\n }.\n </p>\n </ion-text>\n </div>\n }\n</div>\n\n<!-- Register Modal -->\n<ion-modal [isOpen]=\"isRegisterModalOpen\" (didDismiss)=\"closeRegisterModal()\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button fill=\"clear\" (click)=\"closeRegisterModal()\">\n <ion-icon name=\"close-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\">\n <section class=\"modal-form-section\">\n @if (props.logo) {\n <div class=\"logo-container\">\n <val-image [props]=\"props.logo\" />\n </div>\n }\n <val-form [props]=\"registerFormProps()\" (onSubmit)=\"registerHandler($event)\" />\n <div class=\"auth-link\">\n <ion-text color=\"dark\">\n {{ t('hasAccount') }}\n <a (click)=\"closeRegisterModal()\">{{ t('signIn') }}</a>\n </ion-text>\n </div>\n </section>\n </ion-content>\n </ng-template>\n</ion-modal>\n\n<!-- Verify Email Modal -->\n<ion-modal [isOpen]=\"isVerifyModalOpen\" [backdropDismiss]=\"false\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button fill=\"clear\" (click)=\"closeVerifyModal()\">\n <ion-icon name=\"close-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\">\n <section class=\"modal-form-section\">\n @if (props.logo) {\n <div class=\"logo-container\">\n <val-image [props]=\"props.logo\" />\n </div>\n }\n <val-form [props]=\"verifyFormProps()\" (onSubmit)=\"verifyHandler($event)\" />\n <div class=\"resend-link\">\n <ion-text color=\"dark\">\n {{ t('noCodeReceived') }}\n @if (resendCooldown > 0) {\n <span class=\"cooldown\">{{ t('resendIn', { seconds: resendCooldown.toString() }) }}</span>\n } @else {\n <a (click)=\"resendCode()\">{{ t('resend') }}</a>\n }\n </ion-text>\n </div>\n </section>\n </ion-content>\n </ng-template>\n</ion-modal>\n\n<!-- Forgot Password Modal -->\n<ion-modal [isOpen]=\"isForgotPasswordModalOpen\" (didDismiss)=\"closeForgotPasswordModal()\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button fill=\"clear\" (click)=\"closeForgotPasswordModal()\">\n <ion-icon name=\"close-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\">\n <section class=\"modal-form-section\">\n @if (props.logo) {\n <div class=\"logo-container\">\n <val-image [props]=\"props.logo\" />\n </div>\n }\n <val-form [props]=\"forgotPasswordFormProps()\" (onSubmit)=\"forgotPasswordHandler($event)\" />\n </section>\n </ion-content>\n </ng-template>\n</ion-modal>\n\n<!-- Reset Password Modal -->\n<ion-modal [isOpen]=\"isResetPasswordModalOpen\" [backdropDismiss]=\"false\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button fill=\"clear\" (click)=\"closeResetPasswordModal()\">\n <ion-icon name=\"close-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\">\n <section class=\"modal-form-section\">\n @if (props.logo) {\n <div class=\"logo-container\">\n <val-image [props]=\"props.logo\" />\n </div>\n }\n <val-form [props]=\"resetPasswordFormProps()\" (onSubmit)=\"resetPasswordHandler($event)\" />\n <div class=\"resend-link\">\n <ion-text color=\"dark\">\n {{ t('noCodeReceived') }}\n @if (resetResendCooldown > 0) {\n <span class=\"cooldown\">{{ t('resendIn', { seconds: resetResendCooldown.toString() }) }}</span>\n } @else {\n <a (click)=\"resendResetCode()\">{{ t('resend') }}</a>\n }\n </ion-text>\n </div>\n </section>\n </ion-content>\n </ng-template>\n</ion-modal>\n\n<!-- MFA Verify Modal -->\n<ion-modal [isOpen]=\"isMFAVerifyModalOpen\" [backdropDismiss]=\"false\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button fill=\"clear\" (click)=\"closeMFAVerifyModal()\">\n <ion-icon name=\"close-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\">\n <section class=\"modal-form-section\">\n @if (props.logo) {\n <div class=\"logo-container\">\n <val-image [props]=\"props.logo\" />\n </div>\n }\n <val-form [props]=\"mfaVerifyFormProps()\" (onSubmit)=\"verifyMFAHandler($event)\" />\n </section>\n </ion-content>\n </ng-template>\n</ion-modal>\n", styles: [".val-login{width:100%}.val-login--card{padding:1rem;background:var(--ion-color-light);border-radius:16px;box-shadow:0 2px 8px #00000014}.logo-container{max-width:130px;margin-bottom:1.5rem}.auth-link{text-align:center;margin-top:1rem;font-size:.9rem}.auth-link a{color:var(--ion-color-primary);text-decoration:none;font-weight:500;cursor:pointer}.auth-link a:hover{text-decoration:underline}.oauth-separator{display:flex;align-items:center;margin:1.5rem 0}.oauth-separator:before,.oauth-separator:after{content:\"\";flex:1;height:1px;background:var(--ion-color-medium-tint)}.oauth-separator span{padding:0 1rem;color:var(--ion-color-dark);font-size:.85rem}.oauth-buttons{margin-bottom:1rem}.oauth-buttons ion-button{--border-radius: 8px;--border-width: 1px}.oauth-buttons ion-icon{font-size:1.2rem;margin-right:.5rem}.legal-notice{margin-top:1.5rem;padding-top:1rem;border-top:1px solid var(--ion-color-medium-tint)}.legal-notice p{font-size:.75rem;line-height:1.5;text-align:center;margin:0}.legal-notice a{color:var(--ion-color-primary);text-decoration:none}.legal-notice a:hover{text-decoration:underline}.resend-link{text-align:center;margin-top:1rem;font-size:.9rem}.resend-link a{color:var(--ion-color-primary);cursor:pointer;font-weight:500}.resend-link a:hover{text-decoration:underline}.resend-link .cooldown{color:var(--ion-color-medium)}\n"] }]
|
|
732
|
+
}], propDecorators: { props: [{
|
|
733
|
+
type: Input
|
|
734
|
+
}], onSuccess: [{
|
|
735
|
+
type: Output
|
|
736
|
+
}], onError: [{
|
|
737
|
+
type: Output
|
|
738
|
+
}], onMFARequired: [{
|
|
739
|
+
type: Output
|
|
740
|
+
}] } });
|
|
741
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9sb2dpbi9sb2dpbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2xvZ2luL2xvZ2luLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsUUFBUSxFQUNSLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sRUFDTixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFNBQVMsRUFDVCxPQUFPLEVBQ1AsUUFBUSxFQUNSLE9BQU8sRUFDUCxVQUFVLEdBQ1gsTUFBTSwyQkFBMkIsQ0FBQztBQUVuQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBR0wsU0FBUyxFQUNULGVBQWUsR0FFaEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0s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d0JBQ1AsWUFBWTt3QkFDWixTQUFTO3dCQUNULFVBQVU7d0JBQ1YsVUFBVTt3QkFDVixTQUFTO3dCQUNULE9BQU87d0JBQ1AsUUFBUTt3QkFDUixPQUFPO3dCQUNQLFVBQVU7d0JBQ1YsYUFBYTt3QkFDYixjQUFjO3FCQUNmOzhCQUtRLEtBQUs7c0JBQWIsS0FBSztnQkFFSSxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIEV2ZW50RW1pdHRlcixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBJb25CdXR0b24sXG4gIElvbkJ1dHRvbnMsXG4gIElvbkNvbnRlbnQsXG4gIElvbkhlYWRlcixcbiAgSW9uSWNvbixcbiAgSW9uTW9kYWwsXG4gIElvblRleHQsXG4gIElvblRvb2xiYXIsXG59IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGgnO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdG9hc3Quc2VydmljZSc7XG5pbXBvcnQgeyBJMThuU2VydmljZSwgSW5wdXRJMThuSGVscGVyIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaTE4bic7XG5pbXBvcnQgeyBGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vZm9ybS9mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbWFnZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL2ltYWdlL2ltYWdlLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBGb3JtTWV0YWRhdGEsXG4gIEZvcm1TdWJtaXQsXG4gIElucHV0VHlwZSxcbiAgQ29tcG9uZW50U3RhdGVzLFxuICBDb21wb25lbnRTdGF0ZSxcbn0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgU29saWREZWZhdWx0QmxvY2sgfSBmcm9tICcuLi8uLi9hdG9tcy9idXR0b24vZmFjdG9yeSc7XG5pbXBvcnQge1xuICBMb2dpbk1ldGFkYXRhLFxuICBMb2dpblN1Y2Nlc3NFdmVudCxcbiAgTG9naW5FcnJvckV2ZW50LFxuICBNRkFSZXF1aXJlZEV2ZW50LFxuICBMT0dJTl9ERUZBVUxUUyxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1sb2dpbicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgSW9uQnV0dG9uLFxuICAgIElvbkJ1dHRvbnMsXG4gICAgSW9uQ29udGVudCxcbiAgICBJb25IZWFkZXIsXG4gICAgSW9uSWNvbixcbiAgICBJb25Nb2RhbCxcbiAgICBJb25UZXh0LFxuICAgIElvblRvb2xiYXIsXG4gICAgRm9ybUNvbXBvbmVudCxcbiAgICBJbWFnZUNvbXBvbmVudCxcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2xvZ2luLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbG9naW4uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgTG9naW5Db21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBwcm9wczogTG9naW5NZXRhZGF0YSA9IHt9O1xuXG4gIEBPdXRwdXQoKSBvblN1Y2Nlc3MgPSBuZXcgRXZlbnRFbWl0dGVyPExvZ2luU3VjY2Vzc0V2ZW50PigpO1xuICBAT3V0cHV0KCkgb25FcnJvciA9IG5ldyBFdmVudEVtaXR0ZXI8TG9naW5FcnJvckV2ZW50PigpO1xuICBAT3V0cHV0KCkgb25NRkFSZXF1aXJlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TUZBUmVxdWlyZWRFdmVudD4oKTtcblxuICAvLyBTZXJ2aWNlc1xuICBhdXRoU2VydmljZSA9IGluamVjdChBdXRoU2VydmljZSk7XG4gIHByaXZhdGUgdG9hc3RTZXJ2aWNlID0gaW5qZWN0KFRvYXN0U2VydmljZSk7XG4gIHByaXZhdGUgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIHByaXZhdGUgaTE4biA9IGluamVjdChJMThuU2VydmljZSk7XG4gIHByaXZhdGUgaTE4bkhlbHBlciA9IGluamVjdChJbnB1dEkxOG5IZWxwZXIpO1xuXG4gIC8qKlxuICAgKiBIZWxwZXIgbWV0aG9kIGZvciB0cmFuc2xhdGluZyBhdXRoLXJlbGF0ZWQgc3RyaW5ncy5cbiAgICogRXhwb3NlZCB0byB0ZW1wbGF0ZSBmb3IgZHluYW1pYyB0ZXh0LlxuICAgKi9cbiAgdChrZXk6IHN0cmluZywgZGF0YT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmkxOG4udChrZXksICdfYXV0aCcsIGRhdGEpO1xuICB9XG5cbiAgLy8gVGltZXJzXG4gIHByaXZhdGUgcmVzZW5kVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHJlc2V0UmVzZW5kVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPiB8IG51bGwgPSBudWxsO1xuXG4gIC8vIFN0YXRlXG4gIGlzT0F1dGhMb2FkaW5nID0gZmFsc2U7XG4gIGlzUmVnaXN0ZXJNb2RhbE9wZW4gPSBmYWxzZTtcbiAgaXNWZXJpZnlNb2RhbE9wZW4gPSBmYWxzZTtcbiAgaXNGb3Jnb3RQYXNzd29yZE1vZGFsT3BlbiA9IGZhbHNlO1xuICBpc1Jlc2V0UGFzc3dvcmRNb2RhbE9wZW4gPSBmYWxzZTtcbiAgaXNNRkFWZXJpZnlNb2RhbE9wZW4gPSBmYWxzZTtcblxuICBwZW5kaW5nVmVyaWZpY2F0aW9uRW1haWwgPSAnJztcbiAgcGVuZGluZ1Jlc2V0RW1haWwgPSAnJztcbiAgcmVzZW5kQ29vbGRvd24gPSAwO1xuICByZXNldFJlc2VuZENvb2xkb3duID0gMDtcblxuICAvLyBSZXNvbHZlZCBwcm9wcyB3aXRoIGRlZmF1bHRzXG4gIGdldCBjb25maWcoKTogUmVxdWlyZWQ8T21pdDxMb2dpbk1ldGFkYXRhLCAnbG9nbycgfCAnbGVnYWwnIHwgJ3JlZGlyZWN0T25TdWNjZXNzJz4+ICYgTG9naW5NZXRhZGF0YSB7XG4gICAgcmV0dXJuIHsgLi4uTE9HSU5fREVGQVVMVFMsIC4uLnRoaXMucHJvcHMgfTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBGT1JNIFNUQVRFIFNJR05BTFNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcHJpdmF0ZSBfbG9naW5Gb3JtU3RhdGUgPSBzaWduYWw8Q29tcG9uZW50U3RhdGU+KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgcHJpdmF0ZSBfcmVnaXN0ZXJGb3JtU3RhdGUgPSBzaWduYWw8Q29tcG9uZW50U3RhdGU+KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgcHJpdmF0ZSBfdmVyaWZ5Rm9ybVN0YXRlID0gc2lnbmFsPENvbXBvbmVudFN0YXRlPihDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gIHByaXZhdGUgX3ZlcmlmeUZvcm1TZWN0aW9uTmFtZSA9IHNpZ25hbCgnJyk7XG4gIHByaXZhdGUgX21mYVZlcmlmeUZvcm1TdGF0ZSA9IHNpZ25hbDxDb21wb25lbnRTdGF0ZT4oQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICBwcml2YXRlIF9tZmFNZXRob2QgPSBzaWduYWw8J1RPVFAnIHwgJ0VNQUlMJyB8ICdTTVMnPignVE9UUCcpO1xuICBwcml2YXRlIF9mb3Jnb3RQYXNzd29yZEZvcm1TdGF0ZSA9IHNpZ25hbDxDb21wb25lbnRTdGF0ZT4oQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICBwcml2YXRlIF9yZXNldFBhc3N3b3JkRm9ybVN0YXRlID0gc2lnbmFsPENvbXBvbmVudFN0YXRlPihDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gIHByaXZhdGUgX3Jlc2V0Rm9ybVNlY3Rpb25OYW1lID0gc2lnbmFsKCcnKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTE9HSU4gRk9STSAoY29tcHV0ZWQpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHJlYWRvbmx5IGxvZ2luRm9ybVByb3BzID0gY29tcHV0ZWQ8Rm9ybU1ldGFkYXRhPigoKSA9PlxuICAgIHRoaXMuaTE4bkhlbHBlci5yZXNvbHZlRm9ybSh7XG4gICAgICBuYW1lS2V5OiAnbG9naW5UaXRsZScsXG4gICAgICBpMThuTmFtZXNwYWNlOiAnX2F1dGgnLFxuICAgICAgc2VjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICcnLFxuICAgICAgICAgIG9yZGVyOiAwLFxuICAgICAgICAgIGZpZWxkczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBJbnB1dFR5cGUuRU1BSUwsXG4gICAgICAgICAgICAgIG5hbWU6ICdlbWFpbCcsXG4gICAgICAgICAgICAgIHRva2VuOiAnbG9naW4tZW1haWwnLFxuICAgICAgICAgICAgICBoaW50OiAnJyxcbiAgICAgICAgICAgICAgbGFiZWxLZXk6ICdlbWFpbCcsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyS2V5OiAnZW1haWxQbGFjZWhvbGRlcicsXG4gICAgICAgICAgICAgIGVycm9yS2V5czoge1xuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiAnZW1haWxSZXF1aXJlZCcsXG4gICAgICAgICAgICAgICAgZW1haWw6ICdlbWFpbEludmFsaWQnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5lbWFpbF0sXG4gICAgICAgICAgICAgIG9yZGVyOiAwLFxuICAgICAgICAgICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBJbnB1dFR5cGUuUEFTU1dPUkQsXG4gICAgICAgICAgICAgIG5hbWU6ICdwYXNzd29yZCcsXG4gICAgICAgICAgICAgIHRva2VuOiAnbG9naW4tcGFzc3dvcmQnLFxuICAgICAgICAgICAgICBoaW50OiAnJyxcbiAgICAgICAgICAgICAgbGFiZWxLZXk6ICdwYXNzd29yZCcsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyS2V5OiAncGFzc3dvcmRQbGFjZWhvbGRlcicsXG4gICAgICAgICAgICAgIGVycm9yS2V5czoge1xuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiAncGFzc3dvcmRSZXF1aXJlZCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgICAgICAgb3JkZXI6IDEsXG4gICAgICAgICAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBhY3Rpb25zOiB7XG4gICAgICAgIC4uLlNvbGlkRGVmYXVsdEJsb2NrKCcnLCAnc3VibWl0JyksXG4gICAgICAgIHRva2VuOiAnbG9naW4tc3VibWl0JyxcbiAgICAgICAgdGV4dEtleTogJ2xvZ2luU3VibWl0JyxcbiAgICAgIH0sXG4gICAgICBzdGF0ZTogdGhpcy5fbG9naW5Gb3JtU3RhdGUoKSxcbiAgICB9KVxuICApO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBSRUdJU1RFUiBGT1JNIChjb21wdXRlZClcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcmVhZG9ubHkgcmVnaXN0ZXJGb3JtUHJvcHMgPSBjb21wdXRlZDxGb3JtTWV0YWRhdGE+KCgpID0+XG4gICAgdGhpcy5pMThuSGVscGVyLnJlc29sdmVGb3JtKHtcbiAgICAgIG5hbWVLZXk6ICdyZWdpc3RlclRpdGxlJyxcbiAgICAgIGkxOG5OYW1lc3BhY2U6ICdfYXV0aCcsXG4gICAgICBzZWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJycsXG4gICAgICAgICAgb3JkZXI6IDAsXG4gICAgICAgICAgZmllbGRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IElucHV0VHlwZS5URVhULFxuICAgICAgICAgICAgICBuYW1lOiAnbmFtZScsXG4gICAgICAgICAgICAgIHRva2VuOiAncmVnaXN0ZXItbmFtZScsXG4gICAgICAgICAgICAgIGhpbnQ6ICcnLFxuICAgICAgICAgICAgICBsYWJlbEtleTogJ2Z1bGxOYW1lJyxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXJLZXk6ICduYW1lUGxhY2Vob2xkZXInLFxuICAgICAgICAgICAgICBlcnJvcktleXM6IHtcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogJ25hbWVSZXF1aXJlZCcsXG4gICAgICAgICAgICAgICAgbWlubGVuZ3RoOiAnbmFtZU1pbkxlbmd0aCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCgyKV0sXG4gICAgICAgICAgICAgIG9yZGVyOiAwLFxuICAgICAgICAgICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBJbnB1dFR5cGUuRU1BSUwsXG4gICAgICAgICAgICAgIG5hbWU6ICdlbWFpbCcsXG4gICAgICAgICAgICAgIHRva2VuOiAncmVnaXN0ZXItZW1haWwnLFxuICAgICAgICAgICAgICBoaW50OiAnJyxcbiAgICAgICAgICAgICAgbGFiZWxLZXk6ICdlbWFpbCcsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyS2V5OiAnZW1haWxQbGFjZWhvbGRlcicsXG4gICAgICAgICAgICAgIGVycm9yS2V5czoge1xuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiAnZW1haWxSZXF1aXJlZCcsXG4gICAgICAgICAgICAgICAgZW1haWw6ICdlbWFpbEludmFsaWQnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5lbWFpbF0sXG4gICAgICAgICAgICAgIG9yZGVyOiAxLFxuICAgICAgICAgICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBJbnB1dFR5cGUuUEFTU1dPUkQsXG4gICAgICAgICAgICAgIG5hbWU6ICdwYXNzd29yZCcsXG4gICAgICAgICAgICAgIHRva2VuOiAncmVnaXN0ZXItcGFzc3dvcmQnLFxuICAgICAgICAgICAgICBoaW50OiAnJyxcbiAgICAgICAgICAgICAgbGFiZWxLZXk6ICdwYXNzd29yZCcsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyS2V5OiAncGFzc3dvcmRQbGFjZWhvbGRlcicsXG4gICAgICAgICAgICAgIGVycm9yS2V5czoge1xuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiAncGFzc3dvcmRSZXF1aXJlZCcsXG4gICAgICAgICAgICAgICAgbWlubGVuZ3RoOiAncGFzc3dvcmRNaW5MZW5ndGgnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoOCldLFxuICAgICAgICAgICAgICBvcmRlcjogMixcbiAgICAgICAgICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGFjdGlvbnM6IHtcbiAgICAgICAgLi4uU29saWREZWZhdWx0QmxvY2soJycsICdzdWJtaXQnKSxcbiAgICAgICAgdG9rZW46ICdyZWdpc3Rlci1zdWJtaXQnLFxuICAgICAgICB0ZXh0S2V5OiAncmVnaXN0ZXJTdWJtaXQnLFxuICAgICAgfSxcbiAgICAgIHN0YXRlOiB0aGlzLl9yZWdpc3RlckZvcm1TdGF0ZSgpLFxuICAgIH0pXG4gICk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFZFUklGWSBFTUFJTCBGT1JNIChjb21wdXRlZClcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcmVhZG9ubHkgdmVyaWZ5Rm9ybVByb3BzID0gY29tcHV0ZWQ8Rm9ybU1ldGFkYXRhPigoKSA9PiB7XG4gICAgY29uc3Qgc2VjdGlvbk5hbWUgPSB0aGlzLl92ZXJpZnlGb3JtU2VjdGlvbk5hbWUoKSB8fCB0aGlzLnQoJ3ZlcmlmeURlc2NyaXB0aW9uJyk7XG4gICAgcmV0dXJuIHRoaXMuaTE4bkhlbHBlci5yZXNvbHZlRm9ybSh7XG4gICAgICBuYW1lS2V5OiAndmVyaWZ5VGl0bGUnLFxuICAgICAgaTE4bk5hbWVzcGFjZTogJ19hdXRoJyxcbiAgICAgIHNlY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBzZWN0aW9uTmFtZSxcbiAgICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogSW5wdXRUeXBlLlBJTl9DT0RFLFxuICAgICAgICAgICAgICBsYWJlbDogJycsXG4gICAgICAgICAgICAgIG5hbWU6ICdjb2RlJyxcbiAgICAgICAgICAgICAgdG9rZW46ICd2ZXJpZnktcGluJyxcbiAgICAgICAgICAgICAgaGludDogJycsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAnJyxcbiAgICAgICAgICAgICAgZXJyb3JLZXlzOiB7XG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICdjb2RlUmVxdWlyZWQnLFxuICAgICAgICAgICAgICAgIG1pbmxlbmd0aDogJ2NvZGVNaW5MZW5ndGgnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoNildLFxuICAgICAgICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgICAgICAgICAgICBsZW5ndGg6IDYsXG4gICAgICAgICAgICAgIGFsbG93TnVtYmVyc09ubHk6IHRydWUsXG4gICAgICAgICAgICAgIGF1dG9Gb2N1czogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBhY3Rpb25zOiB7XG4gICAgICAgIC4uLlNvbGlkRGVmYXVsdEJsb2NrKCcnLCAnc3VibWl0JyksXG4gICAgICAgIHRva2VuOiAndmVyaWZ5LXN1Ym1pdCcsXG4gICAgICAgIHRleHRLZXk6ICd2ZXJpZnlTdWJtaXQnLFxuICAgICAgfSxcbiAgICAgIHN0YXRlOiB0aGlzLl92ZXJpZnlGb3JtU3RhdGUoKSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIE1GQSBWRVJJRlkgRk9STSAoY29tcHV0ZWQpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHJlYWRvbmx5IG1mYVZlcmlmeUZvcm1Qcm9wcyA9IGNvbXB1dGVkPEZvcm1NZXRhZGF0YT4oKCkgPT4ge1xuICAgIGNvbnN0IG1ldGhvZCA9IHRoaXMuX21mYU1ldGhvZCgpO1xuICAgIGNvbnN0IHNlY3Rpb25OYW1lID1cbiAgICAgIG1ldGhvZCA9PT0gJ1RPVFAnXG4gICAgICAgID8gdGhpcy50KCdtZmFUT1RQJylcbiAgICAgICAgOiBtZXRob2QgPT09ICdFTUFJTCdcbiAgICAgICAgICA/IHRoaXMudCgnbWZhRW1haWwnKVxuICAgICAgICAgIDogdGhpcy50KCdtZmFTTVMnKTtcblxuICAgIHJldHVybiB0aGlzLmkxOG5IZWxwZXIucmVzb2x2ZUZvcm0oe1xuICAgICAgbmFtZUtleTogJ21mYVRpdGxlJyxcbiAgICAgIGkxOG5OYW1lc3BhY2U6ICdfYXV0aCcsXG4gICAgICBzZWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogc2VjdGlvbk5hbWUsXG4gICAgICAgICAgb3JkZXI6IDAsXG4gICAgICAgICAgZmllbGRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IElucHV0VHlwZS5QSU5fQ09ERSxcbiAgICAgICAgICAgICAgbGFiZWw6ICcnLFxuICAgICAgICAgICAgICBuYW1lOiAnY29kZScsXG4gICAgICAgICAgICAgIHRva2VuOiAnbWZhLXBpbicsXG4gICAgICAgICAgICAgIGhpbnQ6ICcnLFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogJycsXG4gICAgICAgICAgICAgIGVycm9yS2V5czoge1xuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiAnY29kZVJlcXVpcmVkJyxcbiAgICAgICAgICAgICAgICBtaW5sZW5ndGg6ICdjb2RlTWluTGVuZ3RoJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDYpXSxcbiAgICAgICAgICAgICAgb3JkZXI6IDAsXG4gICAgICAgICAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgICAgICAgICAgbGVuZ3RoOiA2LFxuICAgICAgICAgICAgICBhbGxvd051bWJlcnNPbmx5OiB0cnVlLFxuICAgICAgICAgICAgICBhdXRvRm9jdXM6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgYWN0aW9uczoge1xuICAgICAgICAuLi5Tb2xpZERlZmF1bHRCbG9jaygnJywgJ3N1Ym1pdCcpLFxuICAgICAgICB0b2tlbjogJ21mYS12ZXJpZnktc3VibWl0JyxcbiAgICAgICAgdGV4dEtleTogJ3ZlcmlmeVN1Ym1pdCcsXG4gICAgICB9LFxuICAgICAgc3RhdGU6IHRoaXMuX21mYVZlcmlmeUZvcm1TdGF0ZSgpLFxuICAgIH0pO1xuICB9KTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRk9SR09UIFBBU1NXT1JEIEZPUk0gKGNvbXB1dGVkKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICByZWFkb25seSBmb3Jnb3RQYXNzd29yZEZvcm1Qcm9wcyA9IGNvbXB1dGVkPEZvcm1NZXRhZGF0YT4oKCkgPT5cbiAgICB0aGlzLmkxOG5IZWxwZXIucmVzb2x2ZUZvcm0oe1xuICAgICAgbmFtZUtleTogJ2ZvcmdvdFRpdGxlJyxcbiAgICAgIGkxOG5OYW1lc3BhY2U6ICdfYXV0aCcsXG4gICAgICBzZWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogdGhpcy50KCdmb3Jnb3REZXNjcmlwdGlvbicpLFxuICAgICAgICAgIG9yZGVyOiAwLFxuICAgICAgICAgIGZpZWxkczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBJbnB1dFR5cGUuRU1BSUwsXG4gICAgICAgICAgICAgIGxhYmVsOiAnJyxcbiAgICAgICAgICAgICAgbmFtZTogJ2VtYWlsJyxcbiAgICAgICAgICAgICAgdG9rZW46ICdmb3Jnb3QtZW1haWwnLFxuICAgICAgICAgICAgICBoaW50OiAnJyxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXJLZXk6ICdlbWFpbFBsYWNlaG9sZGVyJyxcbiAgICAgICAgICAgICAgZXJyb3JLZXlzOiB7XG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICdlbWFpbFJlcXVpcmVkJyxcbiAgICAgICAgICAgICAgICBlbWFpbDogJ2VtYWlsSW52YWxpZCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLmVtYWlsXSxcbiAgICAgICAgICAgICAgb3JkZXI6IDAsXG4gICAgICAgICAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBhY3Rpb25zOiB7XG4gICAgICAgIC4uLlNvbGlkRGVmYXVsdEJsb2NrKCcnLCAnc3VibWl0JyksXG4gICAgICAgIHRva2VuOiAnZm9yZ290LXN1Ym1pdCcsXG4gICAgICAgIHRleHRLZXk6ICdmb3Jnb3RTdWJtaXQnLFxuICAgICAgfSxcbiAgICAgIHN0YXRlOiB0aGlzLl9mb3Jnb3RQYXNzd29yZEZvcm1TdGF0ZSgpLFxuICAgIH0pXG4gICk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFJFU0VUIFBBU1NXT1JEIEZPUk0gKGNvbXB1dGVkKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICByZWFkb25seSByZXNldFBhc3N3b3JkRm9ybVByb3BzID0gY29tcHV0ZWQ8Rm9ybU1ldGFkYXRhPigoKSA9PiB7XG4gICAgY29uc3Qgc2VjdGlvbk5hbWUgPSB0aGlzLl9yZXNldEZvcm1TZWN0aW9uTmFtZSgpIHx8IHRoaXMudCgncmVzZXREZXNjcmlwdGlvbicpO1xuICAgIHJldHVybiB0aGlzLmkxOG5IZWxwZXIucmVzb2x2ZUZvcm0oe1xuICAgICAgbmFtZUtleTogJ3Jlc2V0VGl0bGUnLFxuICAgICAgaTE4bk5hbWVzcGFjZTogJ19hdXRoJyxcbiAgICAgIHNlY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBzZWN0aW9uTmFtZSxcbiAgICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogSW5wdXRUeXBlLlBJTl9DT0RFLFxuICAgICAgICAgICAgICBsYWJlbDogJycsXG4gICAgICAgICAgICAgIG5hbWU6ICdjb2RlJyxcbiAgICAgICAgICAgICAgdG9rZW46ICdyZXNldC1waW4nLFxuICAgICAgICAgICAgICBoaW50OiAnJyxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICcnLFxuICAgICAgICAgICAgICBlcnJvcktleXM6IHtcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogJ2NvZGVSZXF1aXJlZCcsXG4gICAgICAgICAgICAgICAgbWlubGVuZ3RoOiAnY29kZU1pbkxlbmd0aCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCg2KV0sXG4gICAgICAgICAgICAgIG9yZGVyOiAwLFxuICAgICAgICAgICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICAgICAgICAgIGxlbmd0aDogNixcbiAgICAgICAgICAgICAgYWxsb3dOdW1iZXJzT25seTogdHJ1ZSxcbiAgICAgICAgICAgICAgYXV0b0ZvY3VzOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogSW5wdXRUeXBlLlBBU1NXT1JELFxuICAgICAgICAgICAgICBuYW1lOiAnbmV3UGFzc3dvcmQnLFxuICAgICAgICAgICAgICB0b2tlbjogJ3Jlc2V0LW5ldy1wYXNzd29yZCcsXG4gICAgICAgICAgICAgIGxhYmVsS2V5OiAnbmV3UGFzc3dvcmQnLFxuICAgICAgICAgICAgICBoaW50S2V5OiAnbmV3UGFzc3dvcmRIaW50JyxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXJLZXk6ICdwYXNzd29yZFBsYWNlaG9sZGVyJyxcbiAgICAgICAgICAgICAgZXJyb3JLZXlzOiB7XG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICdwYXNzd29yZFJlcXVpcmVkJyxcbiAgICAgICAgICAgICAgICBtaW5sZW5ndGg6ICdwYXNzd29yZE1pbkxlbmd0aCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCg4KV0sXG4gICAgICAgICAgICAgIG9yZGVyOiAxLFxuICAgICAgICAgICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgYWN0aW9uczoge1xuICAgICAgICAuLi5Tb2xpZERlZmF1bHRCbG9jaygnJywgJ3N1Ym1pdCcpLFxuICAgICAgICB0b2tlbjogJ3Jlc2V0LXN1Ym1pdCcsXG4gICAgICAgIHRleHRLZXk6ICdyZXNldFN1Ym1pdCcsXG4gICAgICB9LFxuICAgICAgc3RhdGU6IHRoaXMuX3Jlc2V0UGFzc3dvcmRGb3JtU3RhdGUoKSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEhBTkRMRVJTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIGxvZ2luSGFuZGxlcihldmVudDogRm9ybVN1Ym1pdCk6IHZvaWQge1xuICAgIGNvbnN0IGVtYWlsID0gZXZlbnQuZmllbGRzWydlbWFpbCddO1xuICAgIGNvbnN0IHBhc3N3b3JkID0gZXZlbnQuZmllbGRzWydwYXNzd29yZCddO1xuXG4gICAgaWYgKCFlbWFpbCB8fCAhcGFzc3dvcmQpIHtcbiAgICAgIHRoaXMuc2hvd1RvYXN0KHRoaXMudCgnY29tcGxldGVBbGxGaWVsZHMnKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbG9naW5Gb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5XT1JLSU5HKTtcblxuICAgIHRoaXMuYXV0aFNlcnZpY2Uuc2lnbmluKHsgZW1haWwsIHBhc3N3b3JkIH0pLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuX2xvZ2luRm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG5cbiAgICAgICAgaWYgKHRoaXMuYXV0aFNlcnZpY2UubWZhUGVuZGluZygpLnJlcXVpcmVkKSB7XG4gICAgICAgICAgdGhpcy5vcGVuTUZBVmVyaWZ5TW9kYWwoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmhhbmRsZUxvZ2luU3VjY2VzcygpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMuX2xvZ2luRm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG5cbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gKGVyciBhcyB7IGNvZGU/OiBzdHJpbmcgfSk/LmNvZGU7XG4gICAgICAgIGlmIChlcnJvckNvZGUgPT09ICdBVVRIVjJfRU1BSUxfTk9UX1ZFUklGSUVEJykge1xuICAgICAgICAgIHRoaXMub3BlblZlcmlmeU1vZGFsKGVtYWlsKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVyciwgJ3NpZ25pbicpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGxvZ2luV2l0aE9BdXRoKHByb3ZpZGVyOiAnZ29vZ2xlJyB8ICdhcHBsZScgfCAnbWljcm9zb2Z0Jyk6IHZvaWQge1xuICAgIHRoaXMuaXNPQXV0aExvYWRpbmcgPSB0cnVlO1xuXG4gICAgdGhpcy5hdXRoU2VydmljZS5zaWduaW5XaXRoT0F1dGgocHJvdmlkZXIpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNPQXV0aExvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICBpZiAodGhpcy5hdXRoU2VydmljZS5tZmFQZW5kaW5nKCkucmVxdWlyZWQpIHtcbiAgICAgICAgICB0aGlzLm9wZW5NRkFWZXJpZnlNb2RhbCgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGFuZGxlTG9naW5TdWNjZXNzKHByb3ZpZGVyKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICB0aGlzLmlzT0F1dGhMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gKGVyciBhcyB7IGNvZGU/OiBzdHJpbmcgfSk/LmNvZGU7XG4gICAgICAgIGlmIChlcnJvckNvZGUgPT09ICdQT1BVUF9DTE9TRUQnKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIsICdvYXV0aCcpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBSRUdJU1RFUiBIQU5ETEVSU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBvcGVuUmVnaXN0ZXJNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzUmVnaXN0ZXJNb2RhbE9wZW4gPSB0cnVlO1xuICB9XG5cbiAgY2xvc2VSZWdpc3Rlck1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuaXNSZWdpc3Rlck1vZGFsT3BlbiA9IGZhbHNlO1xuICB9XG5cbiAgcmVnaXN0ZXJIYW5kbGVyKGV2ZW50OiBGb3JtU3VibWl0KTogdm9pZCB7XG4gICAgY29uc3QgbmFtZSA9IGV2ZW50LmZpZWxkc1snbmFtZSddO1xuICAgIGNvbnN0IGVtYWlsID0gZXZlbnQuZmllbGRzWydlbWFpbCddO1xuICAgIGNvbnN0IHBhc3N3b3JkID0gZXZlbnQuZmllbGRzWydwYXNzd29yZCddO1xuXG4gICAgaWYgKCFuYW1lIHx8ICFlbWFpbCB8fCAhcGFzc3dvcmQpIHtcbiAgICAgIHRoaXMuc2hvd1RvYXN0KHRoaXMudCgnY29tcGxldGVBbGxGaWVsZHMnKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fcmVnaXN0ZXJGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5XT1JLSU5HKTtcblxuICAgIHRoaXMuYXV0aFNlcnZpY2Uuc2lnbnVwKHsgbmFtZSwgZW1haWwsIHBhc3N3b3JkIH0pLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuX3JlZ2lzdGVyRm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gICAgICAgIHRoaXMuY2xvc2VSZWdpc3Rlck1vZGFsKCk7XG4gICAgICAgIHRoaXMub3BlblZlcmlmeU1vZGFsKGVtYWlsKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICB0aGlzLl9yZWdpc3RlckZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVyciwgJ3NpZ251cCcpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBWRVJJRlkgRU1BSUwgSEFORExFUlNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgb3BlblZlcmlmeU1vZGFsKGVtYWlsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnBlbmRpbmdWZXJpZmljYXRpb25FbWFpbCA9IGVtYWlsO1xuICAgIHRoaXMuX3ZlcmlmeUZvcm1TZWN0aW9uTmFtZS5zZXQoYCR7dGhpcy50KCd2ZXJpZnlEZXNjcmlwdGlvbicpLnJlcGxhY2UoJy4nLCAnJyl9ICgke2VtYWlsfSlgKTtcbiAgICB0aGlzLl92ZXJpZnlGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgICB0aGlzLmlzVmVyaWZ5TW9kYWxPcGVuID0gdHJ1ZTtcbiAgICB0aGlzLnN0YXJ0UmVzZW5kQ29vbGRvd24oKTtcbiAgfVxuXG4gIGNsb3NlVmVyaWZ5TW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5pc1ZlcmlmeU1vZGFsT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMucGVuZGluZ1ZlcmlmaWNhdGlvbkVtYWlsID0gJyc7XG4gICAgdGhpcy5fdmVyaWZ5Rm9ybVNlY3Rpb25OYW1lLnNldCgnJyk7XG4gICAgdGhpcy5zdG9wUmVzZW5kQ29vbGRvd24oKTtcbiAgfVxuXG4gIHZlcmlmeUhhbmRsZXIoZXZlbnQ6IEZvcm1TdWJtaXQpOiB2b2lkIHtcbiAgICBjb25zdCBjb2RlID0gZXZlbnQuZmllbGRzWydjb2RlJ107XG5cbiAgICB0aGlzLl92ZXJpZnlGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5XT1JLSU5HKTtcblxuICAgIHRoaXMuYXV0aFNlcnZpY2VcbiAgICAgIC52ZXJpZnlFbWFpbCh7XG4gICAgICAgIGVtYWlsOiB0aGlzLnBlbmRpbmdWZXJpZmljYXRpb25FbWFpbCxcbiAgICAgICAgY29kZSxcbiAgICAgIH0pXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX3ZlcmlmeUZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgICAgICAgIHRoaXMuc2hvd1RvYXN0KHRoaXMudCgnZW1haWxWZXJpZmllZCcpKTtcbiAgICAgICAgICB0aGlzLmNsb3NlVmVyaWZ5TW9kYWwoKTtcbiAgICAgICAgICB0aGlzLmhhbmRsZUxvZ2luU3VjY2VzcygpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgIHRoaXMuX3ZlcmlmeUZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyLCAndmVyaWZ5Jyk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIHJlc2VuZENvZGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVzZW5kQ29vbGRvd24gPiAwKSByZXR1cm47XG5cbiAgICB0aGlzLmF1dGhTZXJ2aWNlXG4gICAgICAucmVzZW5kQ29kZSh7XG4gICAgICAgIGVtYWlsOiB0aGlzLnBlbmRpbmdWZXJpZmljYXRpb25FbWFpbCxcbiAgICAgICAgdHlwZTogJ0VNQUlMX1ZFUklGWScsXG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnNob3dUb2FzdCh0aGlzLnQoJ2NvZGVTZW50JykpO1xuICAgICAgICAgIHRoaXMuc3RhcnRSZXNlbmRDb29sZG93bigpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyLCAndmVyaWZ5Jyk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBNRkEgSEFORExFUlNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgb3Blbk1GQVZlcmlmeU1vZGFsKCk6IHZvaWQge1xuICAgIGNvbnN0IG1ldGhvZCA9IHRoaXMuYXV0aFNlcnZpY2UubWZhUGVuZGluZygpLm1ldGhvZCBhcyAnVE9UUCcgfCAnRU1BSUwnIHwgJ1NNUyc7XG4gICAgdGhpcy5fbWZhTWV0aG9kLnNldChtZXRob2QpO1xuICAgIHRoaXMuX21mYVZlcmlmeUZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgIHRoaXMuaXNNRkFWZXJpZnlNb2RhbE9wZW4gPSB0cnVlO1xuXG4gICAgdGhpcy5vbk1GQVJlcXVpcmVkLmVtaXQoeyBtZXRob2QgfSk7XG4gIH1cblxuICBjbG9zZU1GQVZlcmlmeU1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuaXNNRkFWZXJpZnlNb2RhbE9wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIHZlcmlmeU1GQUhhbmRsZXIoZXZlbnQ6IEZvcm1TdWJtaXQpOiB2b2lkIHtcbiAgICBjb25zdCBjb2RlID0gZXZlbnQuZmllbGRzWydjb2RlJ107XG5cbiAgICB0aGlzLl9tZmFWZXJpZnlGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5XT1JLSU5HKTtcblxuICAgIHRoaXMuYXV0aFNlcnZpY2UudmVyaWZ5TUZBKGNvZGUpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuX21mYVZlcmlmeUZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgICAgICB0aGlzLmNsb3NlTUZBVmVyaWZ5TW9kYWwoKTtcbiAgICAgICAgdGhpcy5oYW5kbGVMb2dpblN1Y2Nlc3ModW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICB0aGlzLl9tZmFWZXJpZnlGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIsICdtZmEnKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRk9SR09UIFBBU1NXT1JEIEhBTkRMRVJTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIG9wZW5Gb3Jnb3RQYXNzd29yZE1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuaXNGb3Jnb3RQYXNzd29yZE1vZGFsT3BlbiA9IHRydWU7XG4gIH1cblxuICBjbG9zZUZvcmdvdFBhc3N3b3JkTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5pc0ZvcmdvdFBhc3N3b3JkTW9kYWxPcGVuID0gZmFsc2U7XG4gIH1cblxuICBmb3Jnb3RQYXNzd29yZEhhbmRsZXIoZXZlbnQ6IEZvcm1TdWJtaXQpOiB2b2lkIHtcbiAgICBjb25zdCBlbWFpbCA9IGV2ZW50LmZpZWxkc1snZW1haWwnXTtcblxuICAgIGlmICghZW1haWwpIHtcbiAgICAgIHRoaXMuc2hvd1RvYXN0KHRoaXMudCgnZW50ZXJFbWFpbCcpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9mb3Jnb3RQYXNzd29yZEZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLldPUktJTkcpO1xuXG4gICAgdGhpcy5hdXRoU2VydmljZS5mb3Jnb3RQYXNzd29yZCh7IGVtYWlsIH0pLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuX2ZvcmdvdFBhc3N3b3JkRm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gICAgICAgIHRoaXMuY2xvc2VGb3Jnb3RQYXNzd29yZE1vZGFsKCk7XG4gICAgICAgIHRoaXMub3BlblJlc2V0UGFzc3dvcmRNb2RhbChlbWFpbCk7XG4gICAgICAgIHRoaXMuc2hvd1RvYXN0KHRoaXMudCgnY29kZVNlbnQnKSk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5fZm9yZ290UGFzc3dvcmRGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKTtcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIsICdmb3Jnb3QnKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUkVTRVQgUEFTU1dPUkQgSEFORExFUlNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgb3BlblJlc2V0UGFzc3dvcmRNb2RhbChlbWFpbDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wZW5kaW5nUmVzZXRFbWFpbCA9IGVtYWlsO1xuICAgIHRoaXMuX3Jlc2V0Rm9ybVNlY3Rpb25OYW1lLnNldChgJHt0aGlzLnQoJ3Jlc2V0RGVzY3JpcHRpb24nKS5yZXBsYWNlKCcuJywgJycpfSAoJHtlbWFpbH0pYCk7XG4gICAgdGhpcy5fcmVzZXRQYXNzd29yZEZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgIHRoaXMuaXNSZXNldFBhc3N3b3JkTW9kYWxPcGVuID0gdHJ1ZTtcbiAgICB0aGlzLnN0YXJ0UmVzZXRSZXNlbmRDb29sZG93bigpO1xuICB9XG5cbiAgY2xvc2VSZXNldFBhc3N3b3JkTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5pc1Jlc2V0UGFzc3dvcmRNb2RhbE9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLnBlbmRpbmdSZXNldEVtYWlsID0gJyc7XG4gICAgdGhpcy5fcmVzZXRGb3JtU2VjdGlvbk5hbWUuc2V0KCcnKTtcbiAgICB0aGlzLnN0b3BSZXNldFJlc2VuZENvb2xkb3duKCk7XG4gIH1cblxuICByZXNldFBhc3N3b3JkSGFuZGxlcihldmVudDogRm9ybVN1Ym1pdCk6IHZvaWQge1xuICAgIGNvbnN0IGNvZGUgPSBldmVudC5maWVsZHNbJ2NvZGUnXTtcbiAgICBjb25zdCBuZXdQYXNzd29yZCA9IGV2ZW50LmZpZWxkc1snbmV3UGFzc3dvcmQnXTtcblxuICAgIHRoaXMuX3Jlc2V0UGFzc3dvcmRGb3JtU3RhdGUuc2V0KENvbXBvbmVudFN0YXRlcy5XT1JLSU5HKTtcblxuICAgIHRoaXMuYXV0aFNlcnZpY2VcbiAgICAgIC5yZXNldFBhc3N3b3JkKHtcbiAgICAgICAgZW1haWw6IHRoaXMucGVuZGluZ1Jlc2V0RW1haWwsXG4gICAgICAgIGNvZGUsXG4gICAgICAgIG5ld1Bhc3N3b3JkLFxuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fcmVzZXRQYXNzd29yZEZvcm1TdGF0ZS5zZXQoQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpO1xuICAgICAgICAgIHRoaXMuc2hvd1RvYXN0KHRoaXMudCgncGFzc3dvcmRVcGRhdGVkJykpO1xuICAgICAgICAgIHRoaXMuY2xvc2VSZXNldFBhc3N3b3JkTW9kYWwoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICB0aGlzLl9yZXNldFBhc3N3b3JkRm9ybVN0YXRlLnNldChDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCk7XG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIsICdyZXNldCcpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cblxuICByZXNlbmRSZXNldENvZGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVzZXRSZXNlbmRDb29sZG93biA+IDApIHJldHVybjtcblxuICAgIHRoaXMuYXV0aFNlcnZpY2VcbiAgICAgIC5yZXNlbmRDb2RlKHtcbiAgICAgICAgZW1haWw6IHRoaXMucGVuZGluZ1Jlc2V0RW1haWwsXG4gICAgICAgIHR5cGU6ICdQQVNTV09SRF9SRVNFVCcsXG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnNob3dUb2FzdCh0aGlzLnQoJ2NvZGVTZW50JykpO1xuICAgICAgICAgIHRoaXMuc3RhcnRSZXNldFJlc2VuZENvb2xkb3duKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIsICdyZXNldCcpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gSEVMUEVSU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBwcml2YXRlIGhhbmRsZUxvZ2luU3VjY2VzcyhvYXV0aFByb3ZpZGVyPzogJ2dvb2dsZScgfCAnYXBwbGUnIHwgJ21pY3Jvc29mdCcsIG1mYUNvbXBsZXRlZD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnNob3dUb2FzdCh0aGlzLnQoJ3dlbGNvbWUnKSk7XG5cbiAgICB0aGlzLm9uU3VjY2Vzcy5lbWl0KHtcbiAgICAgIHVzZXI6IHRoaXMuYXV0aFNlcnZpY2UudXNlcigpLFxuICAgICAgbWZhQ29tcGxldGVkLFxuICAgICAgb2F1dGhQcm92aWRlcixcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnByb3BzLnJlZGlyZWN0T25TdWNjZXNzKSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5wcm9wcy5yZWRpcmVjdE9uU3VjY2Vzc10pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRXJyb3IoZXJyOiB1bmtub3duLCBvcGVyYXRpb246IExvZ2luRXJyb3JFdmVudFsnb3BlcmF0aW9uJ10pOiB2b2lkIHtcbiAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyKTtcbiAgICB0aGlzLnNob3dUb2FzdChtZXNzYWdlKTtcblxuICAgIHRoaXMub25FcnJvci5lbWl0KHtcbiAgICAgIGNvZGU6IChlcnIgYXMgeyBjb2RlPzogc3RyaW5nIH0pPy5jb2RlLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIG9wZXJhdGlvbixcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd1RvYXN0KG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3coe1xuICAgICAgbWVzc2FnZSxcbiAgICAgIGR1cmF0aW9uOiAzNTAwLFxuICAgICAgcG9zaXRpb246ICd0b3AnLFxuICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RXJyb3JNZXNzYWdlKGVycjogdW5rbm93bik6IHN0cmluZyB7XG4gICAgY29uc3QgZXJyb3IgPSBlcnIgYXMge1xuICAgICAgZXJyb3I/OiB7IG1lc3NhZ2U/OiBzdHJpbmc7IGNvZGU/OiBzdHJpbmcgfTtcbiAgICAgIGNvZGU/OiBzdHJpbmc7XG4gICAgfTtcblxuICAgIC8vIE1hcCBlcnJvciBjb2RlcyB0byBpMThuIGtleXNcbiAgICBjb25zdCBlcnJvcktleU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgIC8vIFNpZ25pblxuICAgICAgQVVUSFYyX0lOVkFMSURfQ1JFREVOVElBTFM6ICdlcnJvckludmFsaWRDcmVkZW50aWFscycsXG4gICAgICBBVVRIVjJfRU1BSUxfTk9UX1ZFUklGSUVEOiAnZXJyb3JFbWFpbE5vdFZlcmlmaWVkJyxcbiAgICAgIEFVVEhWMl9BQ0NPVU5UX1NVU1BFTkRFRDogJ2Vycm9yQWNjb3VudFN1c3BlbmRlZCcsXG5cbiAgICAgIC8vIFNpZ251cFxuICAgICAgQVVUSFYyX0VNQUlMX0VYSVNUUzogJ2Vycm9yRW1haWxFeGlzdHMnLFxuICAgICAgQVVUSFYyX1dFQUtfUEFTU1dPUkQ6ICdlcnJvcldlYWtQYXNzd29yZCcsXG5cbiAgICAgIC8vIFZlcmlmaWNhdGlvbiBjb2Rlc1xuICAgICAgQVVUSFYyX0lOVkFMSURfQ09ERTogJ2Vycm9ySW52YWxpZENvZGUnLFxuICAgICAgQVVUSFYyX0VYUElSRURfQ09ERTogJ2Vycm9yRXhwaXJlZENvZGUnLFxuICAgICAgQVVUSFYyX0NPREVfRVhQSVJFRDogJ2Vycm9yRXhwaXJlZENvZGUnLFxuICAgICAgQVVUSFYyX1RPT19NQU5ZX0FUVEVNUFRTOiAnZXJyb3JUb29NYW55QXR0ZW1wdHMnLFxuXG4gICAgICAvLyBNRkFcbiAgICAgIEFVVEhWMl9NRkFfSU5WQUxJRF9DT0RFOiAnZXJyb3JNRkFJbnZhbGlkQ29kZScsXG5cbiAgICAgIC8vIE9BdXRoXG4gICAgICBQT1BVUF9CTE9DS0VEOiAnZXJyb3JQb3B1cEJsb2NrZWQnLFxuICAgICAgT0FVVEhfRkFJTEVEOiAnZXJyb3JPQXV0aEZhaWxlZCcsXG4gICAgfTtcblxuICAgIGNvbnN0IGVycm9yQ29kZSA9IGVycm9yPy5lcnJvcj8uY29kZSB8fCBlcnJvcj8uY29kZTtcbiAgICBpZiAoZXJyb3JDb2RlICYmIGVycm9yS2V5TWFwW2Vycm9yQ29kZV0pIHtcbiAgICAgIHJldHVybiB0aGlzLnQoZXJyb3JLZXlNYXBbZXJyb3JDb2RlXSk7XG4gICAgfVxuXG4gICAgaWYgKGVycm9yPy5lcnJvcj8ubWVzc2FnZSkge1xuICAgICAgcmV0dXJuIGVycm9yLmVycm9yLm1lc3NhZ2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudCgnZXJyb3JHZW5lcmljJyk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gQ09PTERPV04gVElNRVJTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHByaXZhdGUgc3RhcnRSZXNlbmRDb29sZG93bigpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2VuZENvb2xkb3duID0gMzA7XG4gICAgdGhpcy5yZXNlbmRUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMucmVzZW5kQ29vbGRvd24tLTtcbiAgICAgIGlmICh0aGlzLnJlc2VuZENvb2xkb3duIDw9IDApIHtcbiAgICAgICAgdGhpcy5zdG9wUmVzZW5kQ29vbGRvd24oKTtcbiAgICAgIH1cbiAgICB9LCAxMDAwKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcFJlc2VuZENvb2xkb3duKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlc2VuZFRpbWVyKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMucmVzZW5kVGltZXIpO1xuICAgICAgdGhpcy5yZXNlbmRUaW1lciA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMucmVzZW5kQ29vbGRvd24gPSAwO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydFJlc2V0UmVzZW5kQ29vbGRvd24oKTogdm9pZCB7XG4gICAgdGhpcy5yZXNldFJlc2VuZENvb2xkb3duID0gMzA7XG4gICAgdGhpcy5yZXNldFJlc2VuZFRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5yZXNldFJlc2VuZENvb2xkb3duLS07XG4gICAgICBpZiAodGhpcy5yZXNldFJlc2VuZENvb2xkb3duIDw9IDApIHtcbiAgICAgICAgdGhpcy5zdG9wUmVzZXRSZXNlbmRDb29sZG93bigpO1xuICAgICAgfVxuICAgIH0sIDEwMDApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdG9wUmVzZXRSZXNlbmRDb29sZG93bigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZXNldFJlc2VuZFRpbWVyKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMucmVzZXRSZXNlbmRUaW1lcik7XG4gICAgICB0aGlzLnJlc2V0UmVzZW5kVGltZXIgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLnJlc2V0UmVzZW5kQ29vbGRvd24gPSAwO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdG9wUmVzZW5kQ29vbGRvd24oKTtcbiAgICB0aGlzLnN0b3BSZXNldFJlc2VuZENvb2xkb3duKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ2YWwtbG9naW5cIiBbY2xhc3MudmFsLWxvZ2luLS1jYXJkXT1cImNvbmZpZy5zaG93Q2FyZFwiPlxuICA8IS0tIExvZ28gLS0+XG4gIEBpZiAocHJvcHMubG9nbykge1xuICAgIDxkaXYgY2xhc3M9XCJsb2dvLWNvbnRhaW5lclwiPlxuICAgICAgPHZhbC1pbWFnZSBbcHJvcHNdPVwicHJvcHMubG9nb1wiIC8+XG4gICAgPC9kaXY+XG4gIH1cblxuICA8IS0tIExvZ2luIEZvcm0gLS0+XG4gIDx2YWwtZm9ybSBbcHJvcHNdPVwibG9naW5Gb3JtUHJvcHMoKVwiIChvblN1Ym1pdCk9XCJsb2dpbkhhbmRsZXIoJGV2ZW50KVwiIC8+XG5cbiAgPCEtLSBPQXV0aCBTZWN0aW9uIC0tPlxuICBAaWYgKGNvbmZpZy5zaG93T0F1dGggJiYgY29uZmlnLm9hdXRoUHJvdmlkZXJzLmxlbmd0aCA+IDApIHtcbiAgICA8ZGl2IGNsYXNzPVwib2F1dGgtc2VwYXJhdG9yXCI+XG4gICAgICA8c3Bhbj57eyB0KCdvckNvbnRpbnVlV2l0aCcpIH19PC9zcGFuPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIm9hdXRoLWJ1dHRvbnNcIj5cbiAgICAgIEBmb3IgKHByb3ZpZGVyIG9mIGNvbmZpZy5vYXV0aFByb3ZpZGVyczsgdHJhY2sgcHJvdmlkZXIpIHtcbiAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICBleHBhbmQ9XCJibG9ja1wiXG4gICAgICAgICAgZmlsbD1cIm91dGxpbmVcIlxuICAgICAgICAgIGNvbG9yPVwiZGFya1wiXG4gICAgICAgICAgKGNsaWNrKT1cImxvZ2luV2l0aE9BdXRoKHByb3ZpZGVyKVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImlzT0F1dGhMb2FkaW5nXCJcbiAgICAgICAgPlxuICAgICAgICAgIEBzd2l0Y2ggKHByb3ZpZGVyKSB7XG4gICAgICAgICAgICBAY2FzZSAoJ2dvb2dsZScpIHtcbiAgICAgICAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJzdGFydFwiIG5hbWU9XCJsb2dvLWdvb2dsZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgIHt7IGlzT0F1dGhMb2FkaW5nID8gdCgnY29ubmVjdGluZycpIDogdCgnY29udGludWVXaXRoR29vZ2xlJykgfX1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBjYXNlICgnYXBwbGUnKSB7XG4gICAgICAgICAgICAgIDxpb24taWNvbiBzbG90PVwic3RhcnRcIiBuYW1lPVwibG9nby1hcHBsZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgIHt7IGlzT0F1dGhMb2FkaW5nID8gdCgnY29ubmVjdGluZycpIDogdCgnY29udGludWVXaXRoQXBwbGUnKSB9fVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGNhc2UgKCdtaWNyb3NvZnQnKSB7XG4gICAgICAgICAgICAgIDxpb24taWNvbiBzbG90PVwic3RhcnRcIiBuYW1lPVwibG9nby1taWNyb3NvZnRcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICB7eyBpc09BdXRoTG9hZGluZyA/IHQoJ2Nvbm5lY3RpbmcnKSA6IHQoJ2NvbnRpbnVlV2l0aE1pY3Jvc29mdCcpIH19XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIH1cblxuICA8IS0tIFJlZ2lzdGVyIExpbmsgLS0+XG4gIEBpZiAoY29uZmlnLnNob3dSZWdpc3Rlcikge1xuICAgIDxkaXYgY2xhc3M9XCJhdXRoLWxpbmtcIj5cbiAgICAgIDxpb24tdGV4dCBjb2xvcj1cImRhcmtcIj5cbiAgICAgICAge3sgdCgnbm9BY2NvdW50JykgfX1cbiAgICAgICAgPGEgKGNsaWNrKT1cIm9wZW5SZWdpc3Rlck1vZGFsKClcIj57eyB0KCdyZWdpc3RlcicpIH19PC9hPlxuICAgICAgPC9pb24tdGV4dD5cbiAgICA8L2Rpdj5cbiAgfVxuXG4gIDwhLS0gRm9yZ290IFBhc3N3b3JkIExpbmsgLS0+XG4gIEBpZiAoY29uZmlnLnNob3dGb3Jnb3RQYXNzd29yZCkge1xuICAgIDxkaXYgY2xhc3M9XCJhdXRoLWxpbmsgZm9yZ290LXBhc3N3b3JkXCI+XG4gICAgICA8aW9uLXRleHQgY29sb3I9XCJkYXJrXCI+XG4gICAgICAgIHt7IHQoJ2ZvcmdvdExpbmsnKSB9fVxuICAgICAgICA8YSAoY2xpY2spPVwib3BlbkZvcmdvdFBhc3N3b3JkTW9kYWwoKVwiPnt7IHQoJ3JlY292ZXJQYXNzd29yZCcpIH19PC9hPlxuICAgICAgPC9pb24tdGV4dD5cbiAgICA8L2Rpdj5cbiAgfVxuXG4gIDwhLS0gTGVnYWwgTm90aWNlIC0tPlxuICBAaWYgKHByb3BzLmxlZ2FsKSB7XG4gICAgPGRpdiBjbGFzcz1cImxlZ2FsLW5vdGljZVwiPlxuICAgICAgPGlvbi10ZXh0IGNvbG9yPVwibWVkaXVtXCI+XG4gICAgICAgIDxwPlxuICAgICAgICAgIHt7IHQoJ2xlZ2FsUHJlZml4JykgfX1cbiAgICAgICAgICBAaWYgKHByb3BzLmxlZ2FsLmNvbXBhbnlMaW5rKSB7XG4gICAgICAgICAgICA8YSBbaHJlZl09XCJwcm9wcy5sZWdhbC5jb21wYW55TGlua1wiPjxzdHJvbmc+e3sgcHJvcHMubGVnYWwuY29tcGFueU5hbWUgfX08L3N0cm9uZz48L2E+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8c3Ryb25nPnt7IHByb3BzLmxlZ2FsLmNvbXBhbnlOYW1lIH19PC9zdHJvbmc+XG4gICAgICAgICAgfVxuICAgICAgICAgIHt7IHQoJ2xlZ2FsU3VmZml4JykgfX1cbiAgICAgICAgICBAaWYgKHByb3BzLmxlZ2FsLnRlcm1zTGluaykge1xuICAgICAgICAgICAgPGEgW2hyZWZdPVwicHJvcHMubGVnYWwudGVybXNMaW5rXCI+e3sgdCgndGVybXNBbmRDb25kaXRpb25zJykgfX08L2E+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8c3Bhbj57eyB0KCd0ZXJtc0FuZENvbmRpdGlvbnMnKSB9fTwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgICAge3sgdCgnYW5kJykgfX1cbiAgICAgICAgICBAaWYgKHByb3BzLmxlZ2FsLnByaXZhY3lMaW5rKSB7XG4gICAgICAgICAgICA8YSBbaHJlZl09XCJwcm9wcy5sZWdhbC5wcml2YWN5TGlua1wiPnt7IHQoJ3ByaXZhY3lQb2xpY3knKSB9fTwvYT5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxzcGFuPnt7IHQoJ3ByaXZhY3lQb2xpY3knKSB9fTwvc3Bhbj5cbiAgICAgICAgICB9LlxuICAgICAgICA8L3A+XG4gICAgICA8L2lvbi10ZXh0PlxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cblxuPCEtLSBSZWdpc3RlciBNb2RhbCAtLT5cbjxpb24tbW9kYWwgW2lzT3Blbl09XCJpc1JlZ2lzdGVyTW9kYWxPcGVuXCIgKGRpZERpc21pc3MpPVwiY2xvc2VSZWdpc3Rlck1vZGFsKClcIj5cbiAgPG5nLXRlbXBsYXRlPlxuICAgIDxpb24taGVhZGVyPlxuICAgICAgPGlvbi10b29sYmFyPlxuICAgICAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cImVuZFwiPlxuICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIChjbGljayk9XCJjbG9zZVJlZ2lzdGVyTW9kYWwoKVwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZS1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgICA8L2lvbi10b29sYmFyPlxuICAgIDwvaW9uLWhlYWRlcj5cbiAgICA8aW9uLWNvbnRlbnQgY2xhc3M9XCJpb24tcGFkZGluZ1wiPlxuICAgICAgPHNlY3Rpb24gY2xhc3M9XCJtb2RhbC1mb3JtLXNlY3Rpb25cIj5cbiAgICAgICAgQGlmIChwcm9wcy5sb2dvKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxvZ28tY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8dmFsLWltYWdlIFtwcm9wc109XCJwcm9wcy5sb2dvXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8dmFsLWZvcm0gW3Byb3BzXT1cInJlZ2lzdGVyRm9ybVByb3BzKClcIiAob25TdWJtaXQpPVwicmVnaXN0ZXJIYW5kbGVyKCRldmVudClcIiAvPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXV0aC1saW5rXCI+XG4gICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwiZGFya1wiPlxuICAgICAgICAgICAge3sgdCgnaGFzQWNjb3VudCcpIH19XG4gICAgICAgICAgICA8YSAoY2xpY2spPVwiY2xvc2VSZWdpc3Rlck1vZGFsKClcIj57eyB0KCdzaWduSW4nKSB9fTwvYT5cbiAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc2VjdGlvbj5cbiAgICA8L2lvbi1jb250ZW50PlxuICA8L25nLXRlbXBsYXRlPlxuPC9pb24tbW9kYWw+XG5cbjwhLS0gVmVyaWZ5IEVtYWlsIE1vZGFsIC0tPlxuPGlvbi1tb2RhbCBbaXNPcGVuXT1cImlzVmVyaWZ5TW9kYWxPcGVuXCIgW2JhY2tkcm9wRGlzbWlzc109XCJmYWxzZVwiPlxuICA8bmctdGVtcGxhdGU+XG4gICAgPGlvbi1oZWFkZXI+XG4gICAgICA8aW9uLXRvb2xiYXI+XG4gICAgICAgIDxpb24tYnV0dG9ucyBzbG90PVwiZW5kXCI+XG4gICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cImNsZWFyXCIgKGNsaWNrKT1cImNsb3NlVmVyaWZ5TW9kYWwoKVwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZS1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgICA8L2lvbi10b29sYmFyPlxuICAgIDwvaW9uLWhlYWRlcj5cbiAgICA8aW9uLWNvbnRlbnQgY2xhc3M9XCJpb24tcGFkZGluZ1wiPlxuICAgICAgPHNlY3Rpb24gY2xhc3M9XCJtb2RhbC1mb3JtLXNlY3Rpb25cIj5cbiAgICAgICAgQGlmIChwcm9wcy5sb2dvKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxvZ28tY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8dmFsLWltYWdlIFtwcm9wc109XCJwcm9wcy5sb2dvXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8dmFsLWZvcm0gW3Byb3BzXT1cInZlcmlmeUZvcm1Qcm9wcygpXCIgKG9uU3VibWl0KT1cInZlcmlmeUhhbmRsZXIoJGV2ZW50KVwiIC8+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZXNlbmQtbGlua1wiPlxuICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cImRhcmtcIj5cbiAgICAgICAgICAgIHt7IHQoJ25vQ29kZVJlY2VpdmVkJykgfX1cbiAgICAgICAgICAgIEBpZiAocmVzZW5kQ29vbGRvd24gPiAwKSB7XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29vbGRvd25cIj57eyB0KCdyZXNlbmRJbicsIHsgc2Vjb25kczogcmVzZW5kQ29vbGRvd24udG9TdHJpbmcoKSB9KSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICA8YSAoY2xpY2spPVwicmVzZW5kQ29kZSgpXCI+e3sgdCgncmVzZW5kJykgfX08L2E+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgPC9pb24tY29udGVudD5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvaW9uLW1vZGFsPlxuXG48IS0tIEZvcmdvdCBQYXNzd29yZCBNb2RhbCAtLT5cbjxpb24tbW9kYWwgW2lzT3Blbl09XCJpc0ZvcmdvdFBhc3N3b3JkTW9kYWxPcGVuXCIgKGRpZERpc21pc3MpPVwiY2xvc2VGb3Jnb3RQYXNzd29yZE1vZGFsKClcIj5cbiAgPG5nLXRlbXBsYXRlPlxuICAgIDxpb24taGVhZGVyPlxuICAgICAgPGlvbi10b29sYmFyPlxuICAgICAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cImVuZFwiPlxuICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIChjbGljayk9XCJjbG9zZUZvcmdvdFBhc3N3b3JkTW9kYWwoKVwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZS1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgICA8L2lvbi10b29sYmFyPlxuICAgIDwvaW9uLWhlYWRlcj5cbiAgICA8aW9uLWNvbnRlbnQgY2xhc3M9XCJpb24tcGFkZGluZ1wiPlxuICAgICAgPHNlY3Rpb24gY2xhc3M9XCJtb2RhbC1mb3JtLXNlY3Rpb25cIj5cbiAgICAgICAgQGlmIChwcm9wcy5sb2dvKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxvZ28tY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8dmFsLWltYWdlIFtwcm9wc109XCJwcm9wcy5sb2dvXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8dmFsLWZvcm0gW3Byb3BzXT1cImZvcmdvdFBhc3N3b3JkRm9ybVByb3BzKClcIiAob25TdWJtaXQpPVwiZm9yZ290UGFzc3dvcmRIYW5kbGVyKCRldmVudClcIiAvPlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvaW9uLWNvbnRlbnQ+XG4gIDwvbmctdGVtcGxhdGU+XG48L2lvbi1tb2RhbD5cblxuPCEtLSBSZXNldCBQYXNzd29yZCBNb2RhbCAtLT5cbjxpb24tbW9kYWwgW2lzT3Blbl09XCJpc1Jlc2V0UGFzc3dvcmRNb2RhbE9wZW5cIiBbYmFja2Ryb3BEaXNtaXNzXT1cImZhbHNlXCI+XG4gIDxuZy10ZW1wbGF0ZT5cbiAgICA8aW9uLWhlYWRlcj5cbiAgICAgIDxpb24tdG9vbGJhcj5cbiAgICAgICAgPGlvbi1idXR0b25zIHNsb3Q9XCJlbmRcIj5cbiAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwiY2xlYXJcIiAoY2xpY2spPVwiY2xvc2VSZXNldFBhc3N3b3JkTW9kYWwoKVwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZS1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgICA8L2lvbi10b29sYmFyPlxuICAgIDwvaW9uLWhlYWRlcj5cbiAgICA8aW9uLWNvbnRlbnQgY2xhc3M9XCJpb24tcGFkZGluZ1wiPlxuICAgICAgPHNlY3Rpb24gY2xhc3M9XCJtb2RhbC1mb3JtLXNlY3Rpb25cIj5cbiAgICAgICAgQGlmIChwcm9wcy5sb2dvKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxvZ28tY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8dmFsLWltYWdlIFtwcm9wc109XCJwcm9wcy5sb2dvXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8dmFsLWZvcm0gW3Byb3BzXT1cInJlc2V0UGFzc3dvcmRGb3JtUHJvcHMoKVwiIChvblN1Ym1pdCk9XCJyZXNldFBhc3N3b3JkSGFuZGxlcigkZXZlbnQpXCIgLz5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlc2VuZC1saW5rXCI+XG4gICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwiZGFya1wiPlxuICAgICAgICAgICAge3sgdCgnbm9Db2RlUmVjZWl2ZWQnKSB9fVxuICAgICAgICAgICAgQGlmIChyZXNldFJlc2VuZENvb2xkb3duID4gMCkge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvb2xkb3duXCI+e3sgdCgncmVzZW5kSW4nLCB7IHNlY29uZHM6IHJlc2V0UmVzZW5kQ29vbGRvd24udG9TdHJpbmcoKSB9KSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICA8YSAoY2xpY2spPVwicmVzZW5kUmVzZXRDb2RlKClcIj57eyB0KCdyZXNlbmQnKSB9fTwvYT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc2VjdGlvbj5cbiAgICA8L2lvbi1jb250ZW50PlxuICA8L25nLXRlbXBsYXRlPlxuPC9pb24tbW9kYWw+XG5cbjwhLS0gTUZBIFZlcmlmeSBNb2RhbCAtLT5cbjxpb24tbW9kYWwgW2lzT3Blbl09XCJpc01GQVZlcmlmeU1vZGFsT3BlblwiIFtiYWNrZHJvcERpc21pc3NdPVwiZmFsc2VcIj5cbiAgPG5nLXRlbXBsYXRlPlxuICAgIDxpb24taGVhZGVyPlxuICAgICAgPGlvbi10b29sYmFyPlxuICAgICAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cImVuZFwiPlxuICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIChjbGljayk9XCJjbG9zZU1GQVZlcmlmeU1vZGFsKClcIj5cbiAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2xvc2Utb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8L2lvbi1idXR0b25zPlxuICAgICAgPC9pb24tdG9vbGJhcj5cbiAgICA8L2lvbi1oZWFkZXI+XG4gICAgPGlvbi1jb250ZW50IGNsYXNzPVwiaW9uLXBhZGRpbmdcIj5cbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwibW9kYWwtZm9ybS1zZWN0aW9uXCI+XG4gICAgICAgIEBpZiAocHJvcHMubG9nbykge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2dvLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPHZhbC1pbWFnZSBbcHJvcHNdPVwicHJvcHMubG9nb1wiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPHZhbC1mb3JtIFtwcm9wc109XCJtZmFWZXJpZnlGb3JtUHJvcHMoKVwiIChvblN1Ym1pdCk9XCJ2ZXJpZnlNRkFIYW5kbGVyKCRldmVudClcIiAvPlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvaW9uLWNvbnRlbnQ+XG4gIDwvbmctdGVtcGxhdGU+XG48L2lvbi1tb2RhbD5cbiJdfQ==
|