valtech-components 2.0.691 → 2.0.692
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 +269 -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 +42067 -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,536 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Firestore Service
|
|
3
|
+
*
|
|
4
|
+
* Servicio genérico para operaciones CRUD en Firestore.
|
|
5
|
+
* Soporta lecturas one-time, subscripciones real-time, paginación y queries complejas.
|
|
6
|
+
*/
|
|
7
|
+
import { inject, Injectable } from '@angular/core';
|
|
8
|
+
import { addDoc, collection, collectionData, deleteDoc, doc, docData, getDoc, getDocs, limit, orderBy, query, serverTimestamp, setDoc, startAfter, startAt, endBefore, endAt, Timestamp, updateDoc, where, writeBatch, increment, arrayUnion, arrayRemove, } from '@angular/fire/firestore';
|
|
9
|
+
import { map } from 'rxjs';
|
|
10
|
+
import { VALTECH_FIREBASE_CONFIG } from './config';
|
|
11
|
+
import { buildPath } from './utils/path-builder';
|
|
12
|
+
import * as i0 from "@angular/core";
|
|
13
|
+
import * as i1 from "@angular/fire/firestore";
|
|
14
|
+
/**
|
|
15
|
+
* Servicio para operaciones CRUD en Firestore.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* interface User extends FirestoreDocument {
|
|
20
|
+
* name: string;
|
|
21
|
+
* email: string;
|
|
22
|
+
* role: 'admin' | 'user';
|
|
23
|
+
* }
|
|
24
|
+
*
|
|
25
|
+
* @Component({...})
|
|
26
|
+
* export class UsersComponent {
|
|
27
|
+
* private firestore = inject(FirestoreService);
|
|
28
|
+
*
|
|
29
|
+
* // Lectura one-time
|
|
30
|
+
* async loadUser(id: string) {
|
|
31
|
+
* const user = await this.firestore.getDoc<User>('users', id);
|
|
32
|
+
* }
|
|
33
|
+
*
|
|
34
|
+
* // Subscripción real-time
|
|
35
|
+
* users$ = this.firestore.collectionChanges<User>('users', {
|
|
36
|
+
* where: [{ field: 'role', operator: '==', value: 'admin' }],
|
|
37
|
+
* orderBy: [{ field: 'name', direction: 'asc' }]
|
|
38
|
+
* });
|
|
39
|
+
*
|
|
40
|
+
* // Crear documento
|
|
41
|
+
* async createUser(data: Omit<User, 'id'>) {
|
|
42
|
+
* const user = await this.firestore.addDoc<User>('users', data);
|
|
43
|
+
* }
|
|
44
|
+
* }
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
export class FirestoreService {
|
|
48
|
+
constructor(firestore) {
|
|
49
|
+
this.firestore = firestore;
|
|
50
|
+
this.config = inject(VALTECH_FIREBASE_CONFIG, { optional: true });
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Prefija el path de colección con el appId si está configurado.
|
|
54
|
+
* Si no hay appId, retorna el path sin modificar (backward compatible).
|
|
55
|
+
*
|
|
56
|
+
* @internal
|
|
57
|
+
*/
|
|
58
|
+
prefixCollectionPath(collectionPath) {
|
|
59
|
+
if (!this.config?.appId)
|
|
60
|
+
return collectionPath;
|
|
61
|
+
return `apps/${this.config.appId}/${collectionPath}`;
|
|
62
|
+
}
|
|
63
|
+
// ===========================================================================
|
|
64
|
+
// LECTURAS ONE-TIME (Promise)
|
|
65
|
+
// ===========================================================================
|
|
66
|
+
/**
|
|
67
|
+
* Obtiene un documento por ID (lectura única).
|
|
68
|
+
*
|
|
69
|
+
* @param collectionPath - Ruta de la colección
|
|
70
|
+
* @param docId - ID del documento
|
|
71
|
+
* @returns Documento o null si no existe
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```typescript
|
|
75
|
+
* const user = await firestoreService.getDoc<User>('users', 'abc123');
|
|
76
|
+
* if (user) {
|
|
77
|
+
* console.log(user.name);
|
|
78
|
+
* }
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
async getDoc(collectionPath, docId) {
|
|
82
|
+
const prefixedPath = this.prefixCollectionPath(collectionPath);
|
|
83
|
+
const docRef = doc(this.firestore, prefixedPath, docId);
|
|
84
|
+
const snapshot = await getDoc(docRef);
|
|
85
|
+
if (!snapshot.exists()) {
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
return this.mapDocument(snapshot);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Obtiene múltiples documentos con opciones de query.
|
|
92
|
+
*
|
|
93
|
+
* @param collectionPath - Ruta de la colección
|
|
94
|
+
* @param options - Opciones de query (where, orderBy, limit)
|
|
95
|
+
* @returns Array de documentos
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* ```typescript
|
|
99
|
+
* // Todos los usuarios activos ordenados por nombre
|
|
100
|
+
* const users = await firestoreService.getDocs<User>('users', {
|
|
101
|
+
* where: [{ field: 'active', operator: '==', value: true }],
|
|
102
|
+
* orderBy: [{ field: 'name', direction: 'asc' }],
|
|
103
|
+
* limit: 50
|
|
104
|
+
* });
|
|
105
|
+
* ```
|
|
106
|
+
*/
|
|
107
|
+
async getDocs(collectionPath, options) {
|
|
108
|
+
const prefixedPath = this.prefixCollectionPath(collectionPath);
|
|
109
|
+
const collectionRef = collection(this.firestore, prefixedPath);
|
|
110
|
+
const constraints = this.buildQueryConstraints(options);
|
|
111
|
+
const q = query(collectionRef, ...constraints);
|
|
112
|
+
const snapshot = await getDocs(q);
|
|
113
|
+
return snapshot.docs.map((doc) => this.mapDocument(doc));
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Obtiene documentos con paginación basada en cursores.
|
|
117
|
+
*
|
|
118
|
+
* @param collectionPath - Ruta de la colección
|
|
119
|
+
* @param options - Opciones de query (debe incluir limit)
|
|
120
|
+
* @returns Resultado paginado con cursor para la siguiente página
|
|
121
|
+
*
|
|
122
|
+
* @example
|
|
123
|
+
* ```typescript
|
|
124
|
+
* // Primera página
|
|
125
|
+
* const page1 = await firestoreService.getPaginated<User>('users', {
|
|
126
|
+
* orderBy: [{ field: 'createdAt', direction: 'desc' }],
|
|
127
|
+
* limit: 10
|
|
128
|
+
* });
|
|
129
|
+
*
|
|
130
|
+
* // Siguiente página
|
|
131
|
+
* if (page1.hasMore) {
|
|
132
|
+
* const page2 = await firestoreService.getPaginated<User>('users', {
|
|
133
|
+
* orderBy: [{ field: 'createdAt', direction: 'desc' }],
|
|
134
|
+
* limit: 10,
|
|
135
|
+
* startAfter: page1.lastDoc
|
|
136
|
+
* });
|
|
137
|
+
* }
|
|
138
|
+
* ```
|
|
139
|
+
*/
|
|
140
|
+
async getPaginated(collectionPath, options) {
|
|
141
|
+
const prefixedPath = this.prefixCollectionPath(collectionPath);
|
|
142
|
+
const collectionRef = collection(this.firestore, prefixedPath);
|
|
143
|
+
const constraints = this.buildQueryConstraints(options);
|
|
144
|
+
// Pedir uno más para saber si hay más páginas
|
|
145
|
+
const q = query(collectionRef, ...constraints, limit(options.limit + 1));
|
|
146
|
+
const snapshot = await getDocs(q);
|
|
147
|
+
const docs = snapshot.docs;
|
|
148
|
+
const hasMore = docs.length > options.limit;
|
|
149
|
+
// Si hay más, remover el documento extra
|
|
150
|
+
const resultDocs = hasMore ? docs.slice(0, -1) : docs;
|
|
151
|
+
const lastDoc = resultDocs.length > 0 ? resultDocs[resultDocs.length - 1] : null;
|
|
152
|
+
return {
|
|
153
|
+
data: resultDocs.map((doc) => this.mapDocument(doc)),
|
|
154
|
+
hasMore,
|
|
155
|
+
lastDoc,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Verifica si un documento existe.
|
|
160
|
+
*
|
|
161
|
+
* @param collectionPath - Ruta de la colección
|
|
162
|
+
* @param docId - ID del documento
|
|
163
|
+
* @returns true si el documento existe
|
|
164
|
+
*/
|
|
165
|
+
async exists(collectionPath, docId) {
|
|
166
|
+
const prefixedPath = this.prefixCollectionPath(collectionPath);
|
|
167
|
+
const docRef = doc(this.firestore, prefixedPath, docId);
|
|
168
|
+
const snapshot = await getDoc(docRef);
|
|
169
|
+
return snapshot.exists();
|
|
170
|
+
}
|
|
171
|
+
// ===========================================================================
|
|
172
|
+
// SUBSCRIPCIONES REAL-TIME (Observable)
|
|
173
|
+
// ===========================================================================
|
|
174
|
+
/**
|
|
175
|
+
* Suscribe a cambios de un documento (real-time).
|
|
176
|
+
*
|
|
177
|
+
* @param collectionPath - Ruta de la colección
|
|
178
|
+
* @param docId - ID del documento
|
|
179
|
+
* @returns Observable que emite cuando el documento cambia
|
|
180
|
+
*
|
|
181
|
+
* @example
|
|
182
|
+
* ```typescript
|
|
183
|
+
* // En el componente
|
|
184
|
+
* user$ = this.firestoreService.docChanges<User>('users', this.userId);
|
|
185
|
+
*
|
|
186
|
+
* // En el template
|
|
187
|
+
* @if (user$ | async; as user) {
|
|
188
|
+
* <p>{{ user.name }}</p>
|
|
189
|
+
* }
|
|
190
|
+
* ```
|
|
191
|
+
*/
|
|
192
|
+
docChanges(collectionPath, docId) {
|
|
193
|
+
const prefixedPath = this.prefixCollectionPath(collectionPath);
|
|
194
|
+
const docRef = doc(this.firestore, prefixedPath, docId);
|
|
195
|
+
return docData(docRef, { idField: 'id' }).pipe(map((data) => {
|
|
196
|
+
if (!data)
|
|
197
|
+
return null;
|
|
198
|
+
return this.convertTimestamps(data);
|
|
199
|
+
}));
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Suscribe a cambios de una colección (real-time).
|
|
203
|
+
*
|
|
204
|
+
* @param collectionPath - Ruta de la colección
|
|
205
|
+
* @param options - Opciones de query
|
|
206
|
+
* @returns Observable que emite cuando la colección cambia
|
|
207
|
+
*
|
|
208
|
+
* @example
|
|
209
|
+
* ```typescript
|
|
210
|
+
* // Usuarios activos en tiempo real
|
|
211
|
+
* activeUsers$ = this.firestoreService.collectionChanges<User>('users', {
|
|
212
|
+
* where: [{ field: 'status', operator: '==', value: 'online' }]
|
|
213
|
+
* });
|
|
214
|
+
* ```
|
|
215
|
+
*/
|
|
216
|
+
collectionChanges(collectionPath, options) {
|
|
217
|
+
const prefixedPath = this.prefixCollectionPath(collectionPath);
|
|
218
|
+
const collectionRef = collection(this.firestore, prefixedPath);
|
|
219
|
+
const constraints = this.buildQueryConstraints(options);
|
|
220
|
+
const q = query(collectionRef, ...constraints);
|
|
221
|
+
return collectionData(q, { idField: 'id' }).pipe(map((docs) => docs.map((doc) => this.convertTimestamps(doc))));
|
|
222
|
+
}
|
|
223
|
+
// ===========================================================================
|
|
224
|
+
// ESCRITURA
|
|
225
|
+
// ===========================================================================
|
|
226
|
+
/**
|
|
227
|
+
* Agrega un documento con ID auto-generado.
|
|
228
|
+
*
|
|
229
|
+
* @param collectionPath - Ruta de la colección
|
|
230
|
+
* @param data - Datos del documento (sin id, createdAt, updatedAt)
|
|
231
|
+
* @returns Documento creado con su ID
|
|
232
|
+
*
|
|
233
|
+
* @example
|
|
234
|
+
* ```typescript
|
|
235
|
+
* const newUser = await firestoreService.addDoc<User>('users', {
|
|
236
|
+
* name: 'John Doe',
|
|
237
|
+
* email: 'john@example.com',
|
|
238
|
+
* role: 'user'
|
|
239
|
+
* });
|
|
240
|
+
* console.log('Created user with ID:', newUser.id);
|
|
241
|
+
* ```
|
|
242
|
+
*/
|
|
243
|
+
async addDoc(collectionPath, data) {
|
|
244
|
+
const prefixedPath = this.prefixCollectionPath(collectionPath);
|
|
245
|
+
const collectionRef = collection(this.firestore, prefixedPath);
|
|
246
|
+
const timestamp = serverTimestamp();
|
|
247
|
+
const docData = {
|
|
248
|
+
...data,
|
|
249
|
+
createdAt: timestamp,
|
|
250
|
+
updatedAt: timestamp,
|
|
251
|
+
};
|
|
252
|
+
const docRef = await addDoc(collectionRef, docData);
|
|
253
|
+
// Obtener el documento creado para retornarlo con timestamps resueltos
|
|
254
|
+
const snapshot = await getDoc(docRef);
|
|
255
|
+
return this.mapDocument(snapshot);
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Crea o sobrescribe un documento con ID específico.
|
|
259
|
+
*
|
|
260
|
+
* @param collectionPath - Ruta de la colección
|
|
261
|
+
* @param docId - ID del documento
|
|
262
|
+
* @param data - Datos del documento
|
|
263
|
+
* @param options - Opciones (merge: true para merge en lugar de sobrescribir)
|
|
264
|
+
*
|
|
265
|
+
* @example
|
|
266
|
+
* ```typescript
|
|
267
|
+
* // Sobrescribir completamente
|
|
268
|
+
* await firestoreService.setDoc<User>('users', 'user123', userData);
|
|
269
|
+
*
|
|
270
|
+
* // Merge con datos existentes
|
|
271
|
+
* await firestoreService.setDoc<User>('users', 'user123', { name: 'New Name' }, { merge: true });
|
|
272
|
+
* ```
|
|
273
|
+
*/
|
|
274
|
+
async setDoc(collectionPath, docId, data, options) {
|
|
275
|
+
const prefixedPath = this.prefixCollectionPath(collectionPath);
|
|
276
|
+
const docRef = doc(this.firestore, prefixedPath, docId);
|
|
277
|
+
const timestamp = serverTimestamp();
|
|
278
|
+
const docData = {
|
|
279
|
+
...data,
|
|
280
|
+
updatedAt: timestamp,
|
|
281
|
+
...(options?.merge ? {} : { createdAt: timestamp }),
|
|
282
|
+
};
|
|
283
|
+
await setDoc(docRef, docData, { merge: options?.merge ?? false });
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Actualiza campos específicos de un documento.
|
|
287
|
+
*
|
|
288
|
+
* @param collectionPath - Ruta de la colección
|
|
289
|
+
* @param docId - ID del documento
|
|
290
|
+
* @param data - Campos a actualizar
|
|
291
|
+
*
|
|
292
|
+
* @example
|
|
293
|
+
* ```typescript
|
|
294
|
+
* await firestoreService.updateDoc<User>('users', 'user123', {
|
|
295
|
+
* name: 'Updated Name',
|
|
296
|
+
* lastLogin: new Date()
|
|
297
|
+
* });
|
|
298
|
+
* ```
|
|
299
|
+
*/
|
|
300
|
+
async updateDoc(collectionPath, docId, data) {
|
|
301
|
+
const prefixedPath = this.prefixCollectionPath(collectionPath);
|
|
302
|
+
const docRef = doc(this.firestore, prefixedPath, docId);
|
|
303
|
+
await updateDoc(docRef, {
|
|
304
|
+
...data,
|
|
305
|
+
updatedAt: serverTimestamp(),
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Elimina un documento.
|
|
310
|
+
*
|
|
311
|
+
* @param collectionPath - Ruta de la colección
|
|
312
|
+
* @param docId - ID del documento
|
|
313
|
+
*
|
|
314
|
+
* @example
|
|
315
|
+
* ```typescript
|
|
316
|
+
* await firestoreService.deleteDoc('users', 'user123');
|
|
317
|
+
* ```
|
|
318
|
+
*/
|
|
319
|
+
async deleteDoc(collectionPath, docId) {
|
|
320
|
+
const prefixedPath = this.prefixCollectionPath(collectionPath);
|
|
321
|
+
const docRef = doc(this.firestore, prefixedPath, docId);
|
|
322
|
+
await deleteDoc(docRef);
|
|
323
|
+
}
|
|
324
|
+
// ===========================================================================
|
|
325
|
+
// OPERACIONES EN LOTE
|
|
326
|
+
// ===========================================================================
|
|
327
|
+
/**
|
|
328
|
+
* Ejecuta múltiples operaciones de escritura de forma atómica.
|
|
329
|
+
*
|
|
330
|
+
* @param operations - Función que recibe el batch y agrega operaciones
|
|
331
|
+
*
|
|
332
|
+
* @example
|
|
333
|
+
* ```typescript
|
|
334
|
+
* await firestoreService.batch((batch) => {
|
|
335
|
+
* batch.set('users/user1', { name: 'User 1' });
|
|
336
|
+
* batch.update('users/user2', { status: 'inactive' });
|
|
337
|
+
* batch.delete('users/user3');
|
|
338
|
+
* });
|
|
339
|
+
* ```
|
|
340
|
+
*/
|
|
341
|
+
async batch(operations) {
|
|
342
|
+
const batch = writeBatch(this.firestore);
|
|
343
|
+
const batchApi = {
|
|
344
|
+
set: (path, data) => {
|
|
345
|
+
const [collectionPath, docId] = this.splitPath(path);
|
|
346
|
+
const prefixedPath = this.prefixCollectionPath(collectionPath);
|
|
347
|
+
const docRef = doc(this.firestore, prefixedPath, docId);
|
|
348
|
+
batch.set(docRef, {
|
|
349
|
+
...data,
|
|
350
|
+
createdAt: serverTimestamp(),
|
|
351
|
+
updatedAt: serverTimestamp(),
|
|
352
|
+
});
|
|
353
|
+
},
|
|
354
|
+
update: (path, data) => {
|
|
355
|
+
const [collectionPath, docId] = this.splitPath(path);
|
|
356
|
+
const prefixedPath = this.prefixCollectionPath(collectionPath);
|
|
357
|
+
const docRef = doc(this.firestore, prefixedPath, docId);
|
|
358
|
+
batch.update(docRef, {
|
|
359
|
+
...data,
|
|
360
|
+
updatedAt: serverTimestamp(),
|
|
361
|
+
});
|
|
362
|
+
},
|
|
363
|
+
delete: (path) => {
|
|
364
|
+
const [collectionPath, docId] = this.splitPath(path);
|
|
365
|
+
const prefixedPath = this.prefixCollectionPath(collectionPath);
|
|
366
|
+
const docRef = doc(this.firestore, prefixedPath, docId);
|
|
367
|
+
batch.delete(docRef);
|
|
368
|
+
},
|
|
369
|
+
};
|
|
370
|
+
operations(batchApi);
|
|
371
|
+
await batch.commit();
|
|
372
|
+
}
|
|
373
|
+
// ===========================================================================
|
|
374
|
+
// UTILIDADES
|
|
375
|
+
// ===========================================================================
|
|
376
|
+
/**
|
|
377
|
+
* Construye una ruta a partir de un template.
|
|
378
|
+
*
|
|
379
|
+
* @param template - Template con placeholders {param}
|
|
380
|
+
* @param params - Valores para los placeholders
|
|
381
|
+
* @returns Ruta construida
|
|
382
|
+
*
|
|
383
|
+
* @example
|
|
384
|
+
* ```typescript
|
|
385
|
+
* const path = firestoreService.buildPath('users/{userId}/documents/{docId}', {
|
|
386
|
+
* userId: 'user123',
|
|
387
|
+
* docId: 'doc456'
|
|
388
|
+
* });
|
|
389
|
+
* // => 'users/user123/documents/doc456'
|
|
390
|
+
* ```
|
|
391
|
+
*/
|
|
392
|
+
buildPath(template, params) {
|
|
393
|
+
return buildPath(template, params);
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* Genera un ID único para un documento (sin crearlo).
|
|
397
|
+
*
|
|
398
|
+
* @param collectionPath - Ruta de la colección
|
|
399
|
+
* @returns ID único generado por Firestore
|
|
400
|
+
*/
|
|
401
|
+
generateId(collectionPath) {
|
|
402
|
+
const prefixedPath = this.prefixCollectionPath(collectionPath);
|
|
403
|
+
const collectionRef = collection(this.firestore, prefixedPath);
|
|
404
|
+
return doc(collectionRef).id;
|
|
405
|
+
}
|
|
406
|
+
/**
|
|
407
|
+
* Retorna un valor de timestamp del servidor.
|
|
408
|
+
* Usar en campos de fecha para que Firestore asigne el timestamp.
|
|
409
|
+
*/
|
|
410
|
+
serverTimestamp() {
|
|
411
|
+
return serverTimestamp();
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* Retorna un valor para agregar elementos a un array.
|
|
415
|
+
*
|
|
416
|
+
* @example
|
|
417
|
+
* ```typescript
|
|
418
|
+
* await firestoreService.updateDoc('users', 'user123', {
|
|
419
|
+
* tags: firestoreService.arrayUnion('new-tag')
|
|
420
|
+
* });
|
|
421
|
+
* ```
|
|
422
|
+
*/
|
|
423
|
+
arrayUnion(...elements) {
|
|
424
|
+
return arrayUnion(...elements);
|
|
425
|
+
}
|
|
426
|
+
/**
|
|
427
|
+
* Retorna un valor para remover elementos de un array.
|
|
428
|
+
*/
|
|
429
|
+
arrayRemove(...elements) {
|
|
430
|
+
return arrayRemove(...elements);
|
|
431
|
+
}
|
|
432
|
+
/**
|
|
433
|
+
* Retorna un valor para incrementar un campo numérico.
|
|
434
|
+
*
|
|
435
|
+
* @example
|
|
436
|
+
* ```typescript
|
|
437
|
+
* await firestoreService.updateDoc('users', 'user123', {
|
|
438
|
+
* loginCount: firestoreService.increment(1)
|
|
439
|
+
* });
|
|
440
|
+
* ```
|
|
441
|
+
*/
|
|
442
|
+
increment(n) {
|
|
443
|
+
return increment(n);
|
|
444
|
+
}
|
|
445
|
+
// ===========================================================================
|
|
446
|
+
// MÉTODOS PRIVADOS
|
|
447
|
+
// ===========================================================================
|
|
448
|
+
/**
|
|
449
|
+
* Construye los QueryConstraints a partir de QueryOptions
|
|
450
|
+
*/
|
|
451
|
+
buildQueryConstraints(options) {
|
|
452
|
+
const constraints = [];
|
|
453
|
+
if (!options)
|
|
454
|
+
return constraints;
|
|
455
|
+
// Where clauses
|
|
456
|
+
if (options.where) {
|
|
457
|
+
for (const clause of options.where) {
|
|
458
|
+
constraints.push(where(clause.field, clause.operator, clause.value));
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
// OrderBy clauses
|
|
462
|
+
if (options.orderBy) {
|
|
463
|
+
for (const clause of options.orderBy) {
|
|
464
|
+
constraints.push(orderBy(clause.field, clause.direction));
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
// Cursors para paginación
|
|
468
|
+
if (options.startAfter) {
|
|
469
|
+
constraints.push(startAfter(options.startAfter));
|
|
470
|
+
}
|
|
471
|
+
if (options.startAt) {
|
|
472
|
+
constraints.push(startAt(options.startAt));
|
|
473
|
+
}
|
|
474
|
+
if (options.endBefore) {
|
|
475
|
+
constraints.push(endBefore(options.endBefore));
|
|
476
|
+
}
|
|
477
|
+
if (options.endAt) {
|
|
478
|
+
constraints.push(endAt(options.endAt));
|
|
479
|
+
}
|
|
480
|
+
// Limit (se agrega al final)
|
|
481
|
+
if (options.limit) {
|
|
482
|
+
constraints.push(limit(options.limit));
|
|
483
|
+
}
|
|
484
|
+
return constraints;
|
|
485
|
+
}
|
|
486
|
+
/**
|
|
487
|
+
* Mapea un DocumentSnapshot a nuestro tipo
|
|
488
|
+
*/
|
|
489
|
+
mapDocument(snapshot) {
|
|
490
|
+
const data = snapshot.data();
|
|
491
|
+
if (!data) {
|
|
492
|
+
throw new Error('Documento no tiene datos');
|
|
493
|
+
}
|
|
494
|
+
return {
|
|
495
|
+
id: snapshot.id,
|
|
496
|
+
...this.convertTimestamps(data),
|
|
497
|
+
};
|
|
498
|
+
}
|
|
499
|
+
/**
|
|
500
|
+
* Convierte Timestamps de Firestore a Date de JavaScript
|
|
501
|
+
*/
|
|
502
|
+
convertTimestamps(data) {
|
|
503
|
+
const result = {};
|
|
504
|
+
for (const [key, value] of Object.entries(data)) {
|
|
505
|
+
if (value instanceof Timestamp) {
|
|
506
|
+
result[key] = value.toDate();
|
|
507
|
+
}
|
|
508
|
+
else if (value && typeof value === 'object' && !Array.isArray(value)) {
|
|
509
|
+
result[key] = this.convertTimestamps(value);
|
|
510
|
+
}
|
|
511
|
+
else {
|
|
512
|
+
result[key] = value;
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
return result;
|
|
516
|
+
}
|
|
517
|
+
/**
|
|
518
|
+
* Divide una ruta de documento en colección e ID
|
|
519
|
+
*/
|
|
520
|
+
splitPath(path) {
|
|
521
|
+
const segments = path.split('/');
|
|
522
|
+
if (segments.length < 2 || segments.length % 2 !== 0) {
|
|
523
|
+
throw new Error(`Ruta de documento inválida: ${path}`);
|
|
524
|
+
}
|
|
525
|
+
const docId = segments.pop();
|
|
526
|
+
const collectionPath = segments.join('/');
|
|
527
|
+
return [collectionPath, docId];
|
|
528
|
+
}
|
|
529
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FirestoreService, deps: [{ token: i1.Firestore }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
530
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FirestoreService, providedIn: 'root' }); }
|
|
531
|
+
}
|
|
532
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FirestoreService, decorators: [{
|
|
533
|
+
type: Injectable,
|
|
534
|
+
args: [{ providedIn: 'root' }]
|
|
535
|
+
}], ctorParameters: () => [{ type: i1.Firestore }] });
|
|
536
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlyZXN0b3JlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2ZpcmViYXNlL2ZpcmVzdG9yZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUNMLE1BQU0sRUFDTixVQUFVLEVBQ1YsY0FBYyxFQUNkLFNBQVMsRUFDVCxHQUFHLEVBQ0gsT0FBTyxFQUtQLE1BQU0sRUFDTixPQUFPLEVBQ1AsS0FBSyxFQUNMLE9BQU8sRUFDUCxLQUFLLEVBRUwsZUFBZSxFQUNmLE1BQU0sRUFDTixVQUFVLEVBQ1YsT0FBTyxFQUNQLFNBQVMsRUFDVCxLQUFLLEVBQ0wsU0FBUyxFQUNULFNBQVMsRUFDVCxLQUFLLEVBQ0wsVUFBVSxFQUNWLFNBQVMsRUFDVCxVQUFVLEVBQ1YsV0FBVyxHQUVaLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLEdBQUcsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUV2QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7QUFFakQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBZ0NHO0FBRUgsTUFBTSxPQUFPLGdCQUFnQjtJQUczQixZQUFvQixTQUFvQjtRQUFwQixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBRmhDLFdBQU0sR0FBRyxNQUFNLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUUxQixDQUFDO0lBRTVDOzs7OztPQUtHO0lBQ0ssb0JBQW9CLENBQUMsY0FBc0I7UUFDakQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSztZ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SyxDQUFDLCtCQUErQixJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFDRCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFHLENBQUM7UUFDOUIsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQyxPQUFPLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7K0dBdmpCVSxnQkFBZ0I7bUhBQWhCLGdCQUFnQixjQURILE1BQU07OzRGQUNuQixnQkFBZ0I7a0JBRDVCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGaXJlc3RvcmUgU2VydmljZVxuICpcbiAqIFNlcnZpY2lvIGdlbsOpcmljbyBwYXJhIG9wZXJhY2lvbmVzIENSVUQgZW4gRmlyZXN0b3JlLlxuICogU29wb3J0YSBsZWN0dXJhcyBvbmUtdGltZSwgc3Vic2NyaXBjaW9uZXMgcmVhbC10aW1lLCBwYWdpbmFjacOzbiB5IHF1ZXJpZXMgY29tcGxlamFzLlxuICovXG5cbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgYWRkRG9jLFxuICBjb2xsZWN0aW9uLFxuICBjb2xsZWN0aW9uRGF0YSxcbiAgZGVsZXRlRG9jLFxuICBkb2MsXG4gIGRvY0RhdGEsXG4gIERvY3VtZW50RGF0YSxcbiAgRG9jdW1lbnRSZWZlcmVuY2UsXG4gIERvY3VtZW50U25hcHNob3QsXG4gIEZpcmVzdG9yZSxcbiAgZ2V0RG9jLFxuICBnZXREb2NzLFxuICBsaW1pdCxcbiAgb3JkZXJCeSxcbiAgcXVlcnksXG4gIFF1ZXJ5Q29uc3RyYWludCxcbiAgc2VydmVyVGltZXN0YW1wLFxuICBzZXREb2MsXG4gIHN0YXJ0QWZ0ZXIsXG4gIHN0YXJ0QXQsXG4gIGVuZEJlZm9yZSxcbiAgZW5kQXQsXG4gIFRpbWVzdGFtcCxcbiAgdXBkYXRlRG9jLFxuICB3aGVyZSxcbiAgd3JpdGVCYXRjaCxcbiAgaW5jcmVtZW50LFxuICBhcnJheVVuaW9uLFxuICBhcnJheVJlbW92ZSxcbiAgRmllbGRWYWx1ZSxcbn0gZnJvbSAnQGFuZ3VsYXIvZmlyZS9maXJlc3RvcmUnO1xuaW1wb3J0IHsgbWFwLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFZBTFRFQ0hfRklSRUJBU0VfQ09ORklHIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgRmlyZXN0b3JlRG9jdW1lbnQsIFBhZ2luYXRlZFJlc3VsdCwgUXVlcnlPcHRpb25zIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBidWlsZFBhdGggfSBmcm9tICcuL3V0aWxzL3BhdGgtYnVpbGRlcic7XG5cbi8qKlxuICogU2VydmljaW8gcGFyYSBvcGVyYWNpb25lcyBDUlVEIGVuIEZpcmVzdG9yZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW50ZXJmYWNlIFVzZXIgZXh0ZW5kcyBGaXJlc3RvcmVEb2N1bWVudCB7XG4gKiAgIG5hbWU6IHN0cmluZztcbiAqICAgZW1haWw6IHN0cmluZztcbiAqICAgcm9sZTogJ2FkbWluJyB8ICd1c2VyJztcbiAqIH1cbiAqXG4gKiBAQ29tcG9uZW50KHsuLi59KVxuICogZXhwb3J0IGNsYXNzIFVzZXJzQ29tcG9uZW50IHtcbiAqICAgcHJpdmF0ZSBmaXJlc3RvcmUgPSBpbmplY3QoRmlyZXN0b3JlU2VydmljZSk7XG4gKlxuICogICAvLyBMZWN0dXJhIG9uZS10aW1lXG4gKiAgIGFzeW5jIGxvYWRVc2VyKGlkOiBzdHJpbmcpIHtcbiAqICAgICBjb25zdCB1c2VyID0gYXdhaXQgdGhpcy5maXJlc3RvcmUuZ2V0RG9jPFVzZXI+KCd1c2VycycsIGlkKTtcbiAqICAgfVxuICpcbiAqICAgLy8gU3Vic2NyaXBjacOzbiByZWFsLXRpbWVcbiAqICAgdXNlcnMkID0gdGhpcy5maXJlc3RvcmUuY29sbGVjdGlvbkNoYW5nZXM8VXNlcj4oJ3VzZXJzJywge1xuICogICAgIHdoZXJlOiBbeyBmaWVsZDogJ3JvbGUnLCBvcGVyYXRvcjogJz09JywgdmFsdWU6ICdhZG1pbicgfV0sXG4gKiAgICAgb3JkZXJCeTogW3sgZmllbGQ6ICduYW1lJywgZGlyZWN0aW9uOiAnYXNjJyB9XVxuICogICB9KTtcbiAqXG4gKiAgIC8vIENyZWFyIGRvY3VtZW50b1xuICogICBhc3luYyBjcmVhdGVVc2VyKGRhdGE6IE9taXQ8VXNlciwgJ2lkJz4pIHtcbiAqICAgICBjb25zdCB1c2VyID0gYXdhaXQgdGhpcy5maXJlc3RvcmUuYWRkRG9jPFVzZXI+KCd1c2VycycsIGRhdGEpO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBGaXJlc3RvcmVTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBjb25maWcgPSBpbmplY3QoVkFMVEVDSF9GSVJFQkFTRV9DT05GSUcsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmaXJlc3RvcmU6IEZpcmVzdG9yZSkge31cblxuICAvKipcbiAgICogUHJlZmlqYSBlbCBwYXRoIGRlIGNvbGVjY2nDs24gY29uIGVsIGFwcElkIHNpIGVzdMOhIGNvbmZpZ3VyYWRvLlxuICAgKiBTaSBubyBoYXkgYXBwSWQsIHJldG9ybmEgZWwgcGF0aCBzaW4gbW9kaWZpY2FyIChiYWNrd2FyZCBjb21wYXRpYmxlKS5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIHByZWZpeENvbGxlY3Rpb25QYXRoKGNvbGxlY3Rpb25QYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5jb25maWc/LmFwcElkKSByZXR1cm4gY29sbGVjdGlvblBhdGg7XG4gICAgcmV0dXJuIGBhcHBzLyR7dGhpcy5jb25maWcuYXBwSWR9LyR7Y29sbGVjdGlvblBhdGh9YDtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRUNUVVJBUyBPTkUtVElNRSAoUHJvbWlzZSlcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIE9idGllbmUgdW4gZG9jdW1lbnRvIHBvciBJRCAobGVjdHVyYSDDum5pY2EpLlxuICAgKlxuICAgKiBAcGFyYW0gY29sbGVjdGlvblBhdGggLSBSdXRhIGRlIGxhIGNvbGVjY2nDs25cbiAgICogQHBhcmFtIGRvY0lkIC0gSUQgZGVsIGRvY3VtZW50b1xuICAgKiBAcmV0dXJucyBEb2N1bWVudG8gbyBudWxsIHNpIG5vIGV4aXN0ZVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHVzZXIgPSBhd2FpdCBmaXJlc3RvcmVTZXJ2aWNlLmdldERvYzxVc2VyPigndXNlcnMnLCAnYWJjMTIzJyk7XG4gICAqIGlmICh1c2VyKSB7XG4gICAqICAgY29uc29sZS5sb2codXNlci5uYW1lKTtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGdldERvYzxUIGV4dGVuZHMgRmlyZXN0b3JlRG9jdW1lbnQ+KFxuICAgIGNvbGxlY3Rpb25QYXRoOiBzdHJpbmcsXG4gICAgZG9jSWQ6IHN0cmluZ1xuICApOiBQcm9taXNlPFQgfCBudWxsPiB7XG4gICAgY29uc3QgcHJlZml4ZWRQYXRoID0gdGhpcy5wcmVmaXhDb2xsZWN0aW9uUGF0aChjb2xsZWN0aW9uUGF0aCk7XG4gICAgY29uc3QgZG9jUmVmID0gZG9jKHRoaXMuZmlyZXN0b3JlLCBwcmVmaXhlZFBhdGgsIGRvY0lkKTtcbiAgICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IGdldERvYyhkb2NSZWYpO1xuXG4gICAgaWYgKCFzbmFwc2hvdC5leGlzdHMoKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubWFwRG9jdW1lbnQ8VD4oc25hcHNob3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9idGllbmUgbcO6bHRpcGxlcyBkb2N1bWVudG9zIGNvbiBvcGNpb25lcyBkZSBxdWVyeS5cbiAgICpcbiAgICogQHBhcmFtIGNvbGxlY3Rpb25QYXRoIC0gUnV0YSBkZSBsYSBjb2xlY2Npw7NuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3BjaW9uZXMgZGUgcXVlcnkgKHdoZXJlLCBvcmRlckJ5LCBsaW1pdClcbiAgICogQHJldHVybnMgQXJyYXkgZGUgZG9jdW1lbnRvc1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIFRvZG9zIGxvcyB1c3VhcmlvcyBhY3Rpdm9zIG9yZGVuYWRvcyBwb3Igbm9tYnJlXG4gICAqIGNvbnN0IHVzZXJzID0gYXdhaXQgZmlyZXN0b3JlU2VydmljZS5nZXREb2NzPFVzZXI+KCd1c2VycycsIHtcbiAgICogICB3aGVyZTogW3sgZmllbGQ6ICdhY3RpdmUnLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IHRydWUgfV0sXG4gICAqICAgb3JkZXJCeTogW3sgZmllbGQ6ICduYW1lJywgZGlyZWN0aW9uOiAnYXNjJyB9XSxcbiAgICogICBsaW1pdDogNTBcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgZ2V0RG9jczxUIGV4dGVuZHMgRmlyZXN0b3JlRG9jdW1lbnQ+KFxuICAgIGNvbGxlY3Rpb25QYXRoOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IFF1ZXJ5T3B0aW9uc1xuICApOiBQcm9taXNlPFRbXT4ge1xuICAgIGNvbnN0IHByZWZpeGVkUGF0aCA9IHRoaXMucHJlZml4Q29sbGVjdGlvblBhdGgoY29sbGVjdGlvblBhdGgpO1xuICAgIGNvbnN0IGNvbGxlY3Rpb25SZWYgPSBjb2xsZWN0aW9uKHRoaXMuZmlyZXN0b3JlLCBwcmVmaXhlZFBhdGgpO1xuICAgIGNvbnN0IGNvbnN0cmFpbnRzID0gdGhpcy5idWlsZFF1ZXJ5Q29uc3RyYWludHMob3B0aW9ucyk7XG4gICAgY29uc3QgcSA9IHF1ZXJ5KGNvbGxlY3Rpb25SZWYsIC4uLmNvbnN0cmFpbnRzKTtcbiAgICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IGdldERvY3MocSk7XG5cbiAgICByZXR1cm4gc25hcHNob3QuZG9jcy5tYXAoKGRvYykgPT4gdGhpcy5tYXBEb2N1bWVudDxUPihkb2MpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGRvY3VtZW50b3MgY29uIHBhZ2luYWNpw7NuIGJhc2FkYSBlbiBjdXJzb3Jlcy5cbiAgICpcbiAgICogQHBhcmFtIGNvbGxlY3Rpb25QYXRoIC0gUnV0YSBkZSBsYSBjb2xlY2Npw7NuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3BjaW9uZXMgZGUgcXVlcnkgKGRlYmUgaW5jbHVpciBsaW1pdClcbiAgICogQHJldHVybnMgUmVzdWx0YWRvIHBhZ2luYWRvIGNvbiBjdXJzb3IgcGFyYSBsYSBzaWd1aWVudGUgcMOhZ2luYVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIFByaW1lcmEgcMOhZ2luYVxuICAgKiBjb25zdCBwYWdlMSA9IGF3YWl0IGZpcmVzdG9yZVNlcnZpY2UuZ2V0UGFnaW5hdGVkPFVzZXI+KCd1c2VycycsIHtcbiAgICogICBvcmRlckJ5OiBbeyBmaWVsZDogJ2NyZWF0ZWRBdCcsIGRpcmVjdGlvbjogJ2Rlc2MnIH1dLFxuICAgKiAgIGxpbWl0OiAxMFxuICAgKiB9KTtcbiAgICpcbiAgICogLy8gU2lndWllbnRlIHDDoWdpbmFcbiAgICogaWYgKHBhZ2UxLmhhc01vcmUpIHtcbiAgICogICBjb25zdCBwYWdlMiA9IGF3YWl0IGZpcmVzdG9yZVNlcnZpY2UuZ2V0UGFnaW5hdGVkPFVzZXI+KCd1c2VycycsIHtcbiAgICogICAgIG9yZGVyQnk6IFt7IGZpZWxkOiAnY3JlYXRlZEF0JywgZGlyZWN0aW9uOiAnZGVzYycgfV0sXG4gICAqICAgICBsaW1pdDogMTAsXG4gICAqICAgICBzdGFydEFmdGVyOiBwYWdlMS5sYXN0RG9jXG4gICAqICAgfSk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBnZXRQYWdpbmF0ZWQ8VCBleHRlbmRzIEZpcmVzdG9yZURvY3VtZW50PihcbiAgICBjb2xsZWN0aW9uUGF0aDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IFF1ZXJ5T3B0aW9ucyAmIHsgbGltaXQ6IG51bWJlciB9XG4gICk6IFByb21pc2U8UGFnaW5hdGVkUmVzdWx0PFQ+PiB7XG4gICAgY29uc3QgcHJlZml4ZWRQYXRoID0gdGhpcy5wcmVmaXhDb2xsZWN0aW9uUGF0aChjb2xsZWN0aW9uUGF0aCk7XG4gICAgY29uc3QgY29sbGVjdGlvblJlZiA9IGNvbGxlY3Rpb24odGhpcy5maXJlc3RvcmUsIHByZWZpeGVkUGF0aCk7XG4gICAgY29uc3QgY29uc3RyYWludHMgPSB0aGlzLmJ1aWxkUXVlcnlDb25zdHJhaW50cyhvcHRpb25zKTtcblxuICAgIC8vIFBlZGlyIHVubyBtw6FzIHBhcmEgc2FiZXIgc2kgaGF5IG3DoXMgcMOhZ2luYXNcbiAgICBjb25zdCBxID0gcXVlcnkoY29sbGVjdGlvblJlZiwgLi4uY29uc3RyYWludHMsIGxpbWl0KG9wdGlvbnMubGltaXQgKyAxKSk7XG4gICAgY29uc3Qgc25hcHNob3QgPSBhd2FpdCBnZXREb2NzKHEpO1xuXG4gICAgY29uc3QgZG9jcyA9IHNuYXBzaG90LmRvY3M7XG4gICAgY29uc3QgaGFzTW9yZSA9IGRvY3MubGVuZ3RoID4gb3B0aW9ucy5saW1pdDtcblxuICAgIC8vIFNpIGhheSBtw6FzLCByZW1vdmVyIGVsIGRvY3VtZW50byBleHRyYVxuICAgIGNvbnN0IHJlc3VsdERvY3MgPSBoYXNNb3JlID8gZG9jcy5zbGljZSgwLCAtMSkgOiBkb2NzO1xuICAgIGNvbnN0IGxhc3REb2MgPSByZXN1bHREb2NzLmxlbmd0aCA+IDAgPyByZXN1bHREb2NzW3Jlc3VsdERvY3MubGVuZ3RoIC0gMV0gOiBudWxsO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGE6IHJlc3VsdERvY3MubWFwKChkb2MpID0+IHRoaXMubWFwRG9jdW1lbnQ8VD4oZG9jKSksXG4gICAgICBoYXNNb3JlLFxuICAgICAgbGFzdERvYyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIHVuIGRvY3VtZW50byBleGlzdGUuXG4gICAqXG4gICAqIEBwYXJhbSBjb2xsZWN0aW9uUGF0aCAtIFJ1dGEgZGUgbGEgY29sZWNjacOzblxuICAgKiBAcGFyYW0gZG9jSWQgLSBJRCBkZWwgZG9jdW1lbnRvXG4gICAqIEByZXR1cm5zIHRydWUgc2kgZWwgZG9jdW1lbnRvIGV4aXN0ZVxuICAgKi9cbiAgYXN5bmMgZXhpc3RzKGNvbGxlY3Rpb25QYXRoOiBzdHJpbmcsIGRvY0lkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBwcmVmaXhlZFBhdGggPSB0aGlzLnByZWZpeENvbGxlY3Rpb25QYXRoKGNvbGxlY3Rpb25QYXRoKTtcbiAgICBjb25zdCBkb2NSZWYgPSBkb2ModGhpcy5maXJlc3RvcmUsIHByZWZpeGVkUGF0aCwgZG9jSWQpO1xuICAgIGNvbnN0IHNuYXBzaG90ID0gYXdhaXQgZ2V0RG9jKGRvY1JlZik7XG4gICAgcmV0dXJuIHNuYXBzaG90LmV4aXN0cygpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFNVQlNDUklQQ0lPTkVTIFJFQUwtVElNRSAoT2JzZXJ2YWJsZSlcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFN1c2NyaWJlIGEgY2FtYmlvcyBkZSB1biBkb2N1bWVudG8gKHJlYWwtdGltZSkuXG4gICAqXG4gICAqIEBwYXJhbSBjb2xsZWN0aW9uUGF0aCAtIFJ1dGEgZGUgbGEgY29sZWNjacOzblxuICAgKiBAcGFyYW0gZG9jSWQgLSBJRCBkZWwgZG9jdW1lbnRvXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgcXVlIGVtaXRlIGN1YW5kbyBlbCBkb2N1bWVudG8gY2FtYmlhXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gRW4gZWwgY29tcG9uZW50ZVxuICAgKiB1c2VyJCA9IHRoaXMuZmlyZXN0b3JlU2VydmljZS5kb2NDaGFuZ2VzPFVzZXI+KCd1c2VycycsIHRoaXMudXNlcklkKTtcbiAgICpcbiAgICogLy8gRW4gZWwgdGVtcGxhdGVcbiAgICogQGlmICh1c2VyJCB8IGFzeW5jOyBhcyB1c2VyKSB7XG4gICAqICAgPHA+e3sgdXNlci5uYW1lIH19PC9wPlxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgZG9jQ2hhbmdlczxUIGV4dGVuZHMgRmlyZXN0b3JlRG9jdW1lbnQ+KFxuICAgIGNvbGxlY3Rpb25QYXRoOiBzdHJpbmcsXG4gICAgZG9jSWQ6IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPFQgfCBudWxsPiB7XG4gICAgY29uc3QgcHJlZml4ZWRQYXRoID0gdGhpcy5wcmVmaXhDb2xsZWN0aW9uUGF0aChjb2xsZWN0aW9uUGF0aCk7XG4gICAgY29uc3QgZG9jUmVmID0gZG9jKHRoaXMuZmlyZXN0b3JlLCBwcmVmaXhlZFBhdGgsIGRvY0lkKTtcbiAgICByZXR1cm4gZG9jRGF0YShkb2NSZWYsIHsgaWRGaWVsZDogJ2lkJyB9KS5waXBlKFxuICAgICAgbWFwKChkYXRhKSA9PiB7XG4gICAgICAgIGlmICghZGF0YSkgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRUaW1lc3RhbXBzKGRhdGEgYXMgRG9jdW1lbnREYXRhKSBhcyBUO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1c2NyaWJlIGEgY2FtYmlvcyBkZSB1bmEgY29sZWNjacOzbiAocmVhbC10aW1lKS5cbiAgICpcbiAgICogQHBhcmFtIGNvbGxlY3Rpb25QYXRoIC0gUnV0YSBkZSBsYSBjb2xlY2Npw7NuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3BjaW9uZXMgZGUgcXVlcnlcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBxdWUgZW1pdGUgY3VhbmRvIGxhIGNvbGVjY2nDs24gY2FtYmlhXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gVXN1YXJpb3MgYWN0aXZvcyBlbiB0aWVtcG8gcmVhbFxuICAgKiBhY3RpdmVVc2VycyQgPSB0aGlzLmZpcmVzdG9yZVNlcnZpY2UuY29sbGVjdGlvbkNoYW5nZXM8VXNlcj4oJ3VzZXJzJywge1xuICAgKiAgIHdoZXJlOiBbeyBmaWVsZDogJ3N0YXR1cycsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogJ29ubGluZScgfV1cbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgY29sbGVjdGlvbkNoYW5nZXM8VCBleHRlbmRzIEZpcmVzdG9yZURvY3VtZW50PihcbiAgICBjb2xsZWN0aW9uUGF0aDogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBRdWVyeU9wdGlvbnNcbiAgKTogT2JzZXJ2YWJsZTxUW10+IHtcbiAgICBjb25zdCBwcmVmaXhlZFBhdGggPSB0aGlzLnByZWZpeENvbGxlY3Rpb25QYXRoKGNvbGxlY3Rpb25QYXRoKTtcbiAgICBjb25zdCBjb2xsZWN0aW9uUmVmID0gY29sbGVjdGlvbih0aGlzLmZpcmVzdG9yZSwgcHJlZml4ZWRQYXRoKTtcbiAgICBjb25zdCBjb25zdHJhaW50cyA9IHRoaXMuYnVpbGRRdWVyeUNvbnN0cmFpbnRzKG9wdGlvbnMpO1xuICAgIGNvbnN0IHEgPSBxdWVyeShjb2xsZWN0aW9uUmVmLCAuLi5jb25zdHJhaW50cyk7XG5cbiAgICByZXR1cm4gY29sbGVjdGlvbkRhdGEocSwgeyBpZEZpZWxkOiAnaWQnIH0pLnBpcGUoXG4gICAgICBtYXAoKGRvY3MpID0+IGRvY3MubWFwKChkb2MpID0+IHRoaXMuY29udmVydFRpbWVzdGFtcHMoZG9jKSBhcyBUKSlcbiAgICApO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEVTQ1JJVFVSQVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogQWdyZWdhIHVuIGRvY3VtZW50byBjb24gSUQgYXV0by1nZW5lcmFkby5cbiAgICpcbiAgICogQHBhcmFtIGNvbGxlY3Rpb25QYXRoIC0gUnV0YSBkZSBsYSBjb2xlY2Npw7NuXG4gICAqIEBwYXJhbSBkYXRhIC0gRGF0b3MgZGVsIGRvY3VtZW50byAoc2luIGlkLCBjcmVhdGVkQXQsIHVwZGF0ZWRBdClcbiAgICogQHJldHVybnMgRG9jdW1lbnRvIGNyZWFkbyBjb24gc3UgSURcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBuZXdVc2VyID0gYXdhaXQgZmlyZXN0b3JlU2VydmljZS5hZGREb2M8VXNlcj4oJ3VzZXJzJywge1xuICAgKiAgIG5hbWU6ICdKb2huIERvZScsXG4gICAqICAgZW1haWw6ICdqb2huQGV4YW1wbGUuY29tJyxcbiAgICogICByb2xlOiAndXNlcidcbiAgICogfSk7XG4gICAqIGNvbnNvbGUubG9nKCdDcmVhdGVkIHVzZXIgd2l0aCBJRDonLCBuZXdVc2VyLmlkKTtcbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBhZGREb2M8VCBleHRlbmRzIEZpcmVzdG9yZURvY3VtZW50PihcbiAgICBjb2xsZWN0aW9uUGF0aDogc3RyaW5nLFxuICAgIGRhdGE6IE9taXQ8VCwgJ2lkJyB8ICdjcmVhdGVkQXQnIHwgJ3VwZGF0ZWRBdCc+XG4gICk6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IHByZWZpeGVkUGF0aCA9IHRoaXMucHJlZml4Q29sbGVjdGlvblBhdGgoY29sbGVjdGlvblBhdGgpO1xuICAgIGNvbnN0IGNvbGxlY3Rpb25SZWYgPSBjb2xsZWN0aW9uKHRoaXMuZmlyZXN0b3JlLCBwcmVmaXhlZFBhdGgpO1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IHNlcnZlclRpbWVzdGFtcCgpO1xuXG4gICAgY29uc3QgZG9jRGF0YSA9IHtcbiAgICAgIC4uLmRhdGEsXG4gICAgICBjcmVhdGVkQXQ6IHRpbWVzdGFtcCxcbiAgICAgIHVwZGF0ZWRBdDogdGltZXN0YW1wLFxuICAgIH07XG5cbiAgICBjb25zdCBkb2NSZWYgPSBhd2FpdCBhZGREb2MoY29sbGVjdGlvblJlZiwgZG9jRGF0YSk7XG5cbiAgICAvLyBPYnRlbmVyIGVsIGRvY3VtZW50byBjcmVhZG8gcGFyYSByZXRvcm5hcmxvIGNvbiB0aW1lc3RhbXBzIHJlc3VlbHRvc1xuICAgIGNvbnN0IHNuYXBzaG90ID0gYXdhaXQgZ2V0RG9jKGRvY1JlZik7XG4gICAgcmV0dXJuIHRoaXMubWFwRG9jdW1lbnQ8VD4oc25hcHNob3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWEgbyBzb2JyZXNjcmliZSB1biBkb2N1bWVudG8gY29uIElEIGVzcGVjw61maWNvLlxuICAgKlxuICAgKiBAcGFyYW0gY29sbGVjdGlvblBhdGggLSBSdXRhIGRlIGxhIGNvbGVjY2nDs25cbiAgICogQHBhcmFtIGRvY0lkIC0gSUQgZGVsIGRvY3VtZW50b1xuICAgKiBAcGFyYW0gZGF0YSAtIERhdG9zIGRlbCBkb2N1bWVudG9cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcGNpb25lcyAobWVyZ2U6IHRydWUgcGFyYSBtZXJnZSBlbiBsdWdhciBkZSBzb2JyZXNjcmliaXIpXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gU29icmVzY3JpYmlyIGNvbXBsZXRhbWVudGVcbiAgICogYXdhaXQgZmlyZXN0b3JlU2VydmljZS5zZXREb2M8VXNlcj4oJ3VzZXJzJywgJ3VzZXIxMjMnLCB1c2VyRGF0YSk7XG4gICAqXG4gICAqIC8vIE1lcmdlIGNvbiBkYXRvcyBleGlzdGVudGVzXG4gICAqIGF3YWl0IGZpcmVzdG9yZVNlcnZpY2Uuc2V0RG9jPFVzZXI+KCd1c2VycycsICd1c2VyMTIzJywgeyBuYW1lOiAnTmV3IE5hbWUnIH0sIHsgbWVyZ2U6IHRydWUgfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgc2V0RG9jPFQgZXh0ZW5kcyBGaXJlc3RvcmVEb2N1bWVudD4oXG4gICAgY29sbGVjdGlvblBhdGg6IHN0cmluZyxcbiAgICBkb2NJZDogc3RyaW5nLFxuICAgIGRhdGE6IE9taXQ8VCwgJ2lkJz4sXG4gICAgb3B0aW9ucz86IHsgbWVyZ2U/OiBib29sZWFuIH1cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcHJlZml4ZWRQYXRoID0gdGhpcy5wcmVmaXhDb2xsZWN0aW9uUGF0aChjb2xsZWN0aW9uUGF0aCk7XG4gICAgY29uc3QgZG9jUmVmID0gZG9jKHRoaXMuZmlyZXN0b3JlLCBwcmVmaXhlZFBhdGgsIGRvY0lkKTtcbiAgICBjb25zdCB0aW1lc3RhbXAgPSBzZXJ2ZXJUaW1lc3RhbXAoKTtcblxuICAgIGNvbnN0IGRvY0RhdGEgPSB7XG4gICAgICAuLi5kYXRhLFxuICAgICAgdXBkYXRlZEF0OiB0aW1lc3RhbXAsXG4gICAgICAuLi4ob3B0aW9ucz8ubWVyZ2UgPyB7fSA6IHsgY3JlYXRlZEF0OiB0aW1lc3RhbXAgfSksXG4gICAgfTtcblxuICAgIGF3YWl0IHNldERvYyhkb2NSZWYsIGRvY0RhdGEsIHsgbWVyZ2U6IG9wdGlvbnM/Lm1lcmdlID8/IGZhbHNlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFjdHVhbGl6YSBjYW1wb3MgZXNwZWPDrWZpY29zIGRlIHVuIGRvY3VtZW50by5cbiAgICpcbiAgICogQHBhcmFtIGNvbGxlY3Rpb25QYXRoIC0gUnV0YSBkZSBsYSBjb2xlY2Npw7NuXG4gICAqIEBwYXJhbSBkb2NJZCAtIElEIGRlbCBkb2N1bWVudG9cbiAgICogQHBhcmFtIGRhdGEgLSBDYW1wb3MgYSBhY3R1YWxpemFyXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYXdhaXQgZmlyZXN0b3JlU2VydmljZS51cGRhdGVEb2M8VXNlcj4oJ3VzZXJzJywgJ3VzZXIxMjMnLCB7XG4gICAqICAgbmFtZTogJ1VwZGF0ZWQgTmFtZScsXG4gICAqICAgbGFzdExvZ2luOiBuZXcgRGF0ZSgpXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIHVwZGF0ZURvYzxUIGV4dGVuZHMgRmlyZXN0b3JlRG9jdW1lbnQ+KFxuICAgIGNvbGxlY3Rpb25QYXRoOiBzdHJpbmcsXG4gICAgZG9jSWQ6IHN0cmluZyxcbiAgICBkYXRhOiBQYXJ0aWFsPE9taXQ8VCwgJ2lkJyB8ICdjcmVhdGVkQXQnPj5cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcHJlZml4ZWRQYXRoID0gdGhpcy5wcmVmaXhDb2xsZWN0aW9uUGF0aChjb2xsZWN0aW9uUGF0aCk7XG4gICAgY29uc3QgZG9jUmVmID0gZG9jKHRoaXMuZmlyZXN0b3JlLCBwcmVmaXhlZFBhdGgsIGRvY0lkKTtcblxuICAgIGF3YWl0IHVwZGF0ZURvYyhkb2NSZWYsIHtcbiAgICAgIC4uLmRhdGEsXG4gICAgICB1cGRhdGVkQXQ6IHNlcnZlclRpbWVzdGFtcCgpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEVsaW1pbmEgdW4gZG9jdW1lbnRvLlxuICAgKlxuICAgKiBAcGFyYW0gY29sbGVjdGlvblBhdGggLSBSdXRhIGRlIGxhIGNvbGVjY2nDs25cbiAgICogQHBhcmFtIGRvY0lkIC0gSUQgZGVsIGRvY3VtZW50b1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGF3YWl0IGZpcmVzdG9yZVNlcnZpY2UuZGVsZXRlRG9jKCd1c2VycycsICd1c2VyMTIzJyk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgZGVsZXRlRG9jKGNvbGxlY3Rpb25QYXRoOiBzdHJpbmcsIGRvY0lkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwcmVmaXhlZFBhdGggPSB0aGlzLnByZWZpeENvbGxlY3Rpb25QYXRoKGNvbGxlY3Rpb25QYXRoKTtcbiAgICBjb25zdCBkb2NSZWYgPSBkb2ModGhpcy5maXJlc3RvcmUsIHByZWZpeGVkUGF0aCwgZG9jSWQpO1xuICAgIGF3YWl0IGRlbGV0ZURvYyhkb2NSZWYpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIE9QRVJBQ0lPTkVTIEVOIExPVEVcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEVqZWN1dGEgbcO6bHRpcGxlcyBvcGVyYWNpb25lcyBkZSBlc2NyaXR1cmEgZGUgZm9ybWEgYXTDs21pY2EuXG4gICAqXG4gICAqIEBwYXJhbSBvcGVyYXRpb25zIC0gRnVuY2nDs24gcXVlIHJlY2liZSBlbCBiYXRjaCB5IGFncmVnYSBvcGVyYWNpb25lc1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGF3YWl0IGZpcmVzdG9yZVNlcnZpY2UuYmF0Y2goKGJhdGNoKSA9PiB7XG4gICAqICAgYmF0Y2guc2V0KCd1c2Vycy91c2VyMScsIHsgbmFtZTogJ1VzZXIgMScgfSk7XG4gICAqICAgYmF0Y2gudXBkYXRlKCd1c2Vycy91c2VyMicsIHsgc3RhdHVzOiAnaW5hY3RpdmUnIH0pO1xuICAgKiAgIGJhdGNoLmRlbGV0ZSgndXNlcnMvdXNlcjMnKTtcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgYmF0Y2goXG4gICAgb3BlcmF0aW9uczogKGJhdGNoOiB7XG4gICAgICBzZXQ6IDxUPihwYXRoOiBzdHJpbmcsIGRhdGE6IFQpID0+IHZvaWQ7XG4gICAgICB1cGRhdGU6IDxUPihwYXRoOiBzdHJpbmcsIGRhdGE6IFBhcnRpYWw8VD4pID0+IHZvaWQ7XG4gICAgICBkZWxldGU6IChwYXRoOiBzdHJpbmcpID0+IHZvaWQ7XG4gICAgfSkgPT4gdm9pZFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBiYXRjaCA9IHdyaXRlQmF0Y2godGhpcy5maXJlc3RvcmUpO1xuXG4gICAgY29uc3QgYmF0Y2hBcGkgPSB7XG4gICAgICBzZXQ6IDxUPihwYXRoOiBzdHJpbmcsIGRhdGE6IFQpID0+IHtcbiAgICAgICAgY29uc3QgW2NvbGxlY3Rpb25QYXRoLCBkb2NJZF0gPSB0aGlzLnNwbGl0UGF0aChwYXRoKTtcbiAgICAgICAgY29uc3QgcHJlZml4ZWRQYXRoID0gdGhpcy5wcmVmaXhDb2xsZWN0aW9uUGF0aChjb2xsZWN0aW9uUGF0aCk7XG4gICAgICAgIGNvbnN0IGRvY1JlZiA9IGRvYyh0aGlzLmZpcmVzdG9yZSwgcHJlZml4ZWRQYXRoLCBkb2NJZCk7XG4gICAgICAgIGJhdGNoLnNldChkb2NSZWYsIHtcbiAgICAgICAgICAuLi5kYXRhLFxuICAgICAgICAgIGNyZWF0ZWRBdDogc2VydmVyVGltZXN0YW1wKCksXG4gICAgICAgICAgdXBkYXRlZEF0OiBzZXJ2ZXJUaW1lc3RhbXAoKSxcbiAgICAgICAgfSBhcyBEb2N1bWVudERhdGEpO1xuICAgICAgfSxcbiAgICAgIHVwZGF0ZTogPFQ+KHBhdGg6IHN0cmluZywgZGF0YTogUGFydGlhbDxUPikgPT4ge1xuICAgICAgICBjb25zdCBbY29sbGVjdGlvblBhdGgsIGRvY0lkXSA9IHRoaXMuc3BsaXRQYXRoKHBhdGgpO1xuICAgICAgICBjb25zdCBwcmVmaXhlZFBhdGggPSB0aGlzLnByZWZpeENvbGxlY3Rpb25QYXRoKGNvbGxlY3Rpb25QYXRoKTtcbiAgICAgICAgY29uc3QgZG9jUmVmID0gZG9jKHRoaXMuZmlyZXN0b3JlLCBwcmVmaXhlZFBhdGgsIGRvY0lkKTtcbiAgICAgICAgYmF0Y2gudXBkYXRlKGRvY1JlZiwge1xuICAgICAgICAgIC4uLmRhdGEsXG4gICAgICAgICAgdXBkYXRlZEF0OiBzZXJ2ZXJUaW1lc3RhbXAoKSxcbiAgICAgICAgfSBhcyBEb2N1bWVudERhdGEpO1xuICAgICAgfSxcbiAgICAgIGRlbGV0ZTogKHBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBbY29sbGVjdGlvblBhdGgsIGRvY0lkXSA9IHRoaXMuc3BsaXRQYXRoKHBhdGgpO1xuICAgICAgICBjb25zdCBwcmVmaXhlZFBhdGggPSB0aGlzLnByZWZpeENvbGxlY3Rpb25QYXRoKGNvbGxlY3Rpb25QYXRoKTtcbiAgICAgICAgY29uc3QgZG9jUmVmID0gZG9jKHRoaXMuZmlyZXN0b3JlLCBwcmVmaXhlZFBhdGgsIGRvY0lkKTtcbiAgICAgICAgYmF0Y2guZGVsZXRlKGRvY1JlZik7XG4gICAgICB9LFxuICAgIH07XG5cbiAgICBvcGVyYXRpb25zKGJhdGNoQXBpKTtcbiAgICBhd2FpdCBiYXRjaC5jb21taXQoKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBVVElMSURBREVTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1eWUgdW5hIHJ1dGEgYSBwYXJ0aXIgZGUgdW4gdGVtcGxhdGUuXG4gICAqXG4gICAqIEBwYXJhbSB0ZW1wbGF0ZSAtIFRlbXBsYXRlIGNvbiBwbGFjZWhvbGRlcnMge3BhcmFtfVxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVmFsb3JlcyBwYXJhIGxvcyBwbGFjZWhvbGRlcnNcbiAgICogQHJldHVybnMgUnV0YSBjb25zdHJ1aWRhXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgcGF0aCA9IGZpcmVzdG9yZVNlcnZpY2UuYnVpbGRQYXRoKCd1c2Vycy97dXNlcklkfS9kb2N1bWVudHMve2RvY0lkfScsIHtcbiAgICogICB1c2VySWQ6ICd1c2VyMTIzJyxcbiAgICogICBkb2NJZDogJ2RvYzQ1NidcbiAgICogfSk7XG4gICAqIC8vID0+ICd1c2Vycy91c2VyMTIzL2RvY3VtZW50cy9kb2M0NTYnXG4gICAqIGBgYFxuICAgKi9cbiAgYnVpbGRQYXRoKHRlbXBsYXRlOiBzdHJpbmcsIHBhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGJ1aWxkUGF0aCh0ZW1wbGF0ZSwgcGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmEgdW4gSUQgw7puaWNvIHBhcmEgdW4gZG9jdW1lbnRvIChzaW4gY3JlYXJsbykuXG4gICAqXG4gICAqIEBwYXJhbSBjb2xsZWN0aW9uUGF0aCAtIFJ1dGEgZGUgbGEgY29sZWNjacOzblxuICAgKiBAcmV0dXJucyBJRCDDum5pY28gZ2VuZXJhZG8gcG9yIEZpcmVzdG9yZVxuICAgKi9cbiAgZ2VuZXJhdGVJZChjb2xsZWN0aW9uUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBwcmVmaXhlZFBhdGggPSB0aGlzLnByZWZpeENvbGxlY3Rpb25QYXRoKGNvbGxlY3Rpb25QYXRoKTtcbiAgICBjb25zdCBjb2xsZWN0aW9uUmVmID0gY29sbGVjdGlvbih0aGlzLmZpcmVzdG9yZSwgcHJlZml4ZWRQYXRoKTtcbiAgICByZXR1cm4gZG9jKGNvbGxlY3Rpb25SZWYpLmlkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldG9ybmEgdW4gdmFsb3IgZGUgdGltZXN0YW1wIGRlbCBzZXJ2aWRvci5cbiAgICogVXNhciBlbiBjYW1wb3MgZGUgZmVjaGEgcGFyYSBxdWUgRmlyZXN0b3JlIGFzaWduZSBlbCB0aW1lc3RhbXAuXG4gICAqL1xuICBzZXJ2ZXJUaW1lc3RhbXAoKTogRmllbGRWYWx1ZSB7XG4gICAgcmV0dXJuIHNlcnZlclRpbWVzdGFtcCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldG9ybmEgdW4gdmFsb3IgcGFyYSBhZ3JlZ2FyIGVsZW1lbnRvcyBhIHVuIGFycmF5LlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGF3YWl0IGZpcmVzdG9yZVNlcnZpY2UudXBkYXRlRG9jKCd1c2VycycsICd1c2VyMTIzJywge1xuICAgKiAgIHRhZ3M6IGZpcmVzdG9yZVNlcnZpY2UuYXJyYXlVbmlvbignbmV3LXRhZycpXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIGFycmF5VW5pb24oLi4uZWxlbWVudHM6IHVua25vd25bXSk6IEZpZWxkVmFsdWUge1xuICAgIHJldHVybiBhcnJheVVuaW9uKC4uLmVsZW1lbnRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRvcm5hIHVuIHZhbG9yIHBhcmEgcmVtb3ZlciBlbGVtZW50b3MgZGUgdW4gYXJyYXkuXG4gICAqL1xuICBhcnJheVJlbW92ZSguLi5lbGVtZW50czogdW5rbm93bltdKTogRmllbGRWYWx1ZSB7XG4gICAgcmV0dXJuIGFycmF5UmVtb3ZlKC4uLmVsZW1lbnRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRvcm5hIHVuIHZhbG9yIHBhcmEgaW5jcmVtZW50YXIgdW4gY2FtcG8gbnVtw6lyaWNvLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGF3YWl0IGZpcmVzdG9yZVNlcnZpY2UudXBkYXRlRG9jKCd1c2VycycsICd1c2VyMTIzJywge1xuICAgKiAgIGxvZ2luQ291bnQ6IGZpcmVzdG9yZVNlcnZpY2UuaW5jcmVtZW50KDEpXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIGluY3JlbWVudChuOiBudW1iZXIpOiBGaWVsZFZhbHVlIHtcbiAgICByZXR1cm4gaW5jcmVtZW50KG4pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIE3DiVRPRE9TIFBSSVZBRE9TXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1eWUgbG9zIFF1ZXJ5Q29uc3RyYWludHMgYSBwYXJ0aXIgZGUgUXVlcnlPcHRpb25zXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkUXVlcnlDb25zdHJhaW50cyhvcHRpb25zPzogUXVlcnlPcHRpb25zKTogUXVlcnlDb25zdHJhaW50W10ge1xuICAgIGNvbnN0IGNvbnN0cmFpbnRzOiBRdWVyeUNvbnN0cmFpbnRbXSA9IFtdO1xuXG4gICAgaWYgKCFvcHRpb25zKSByZXR1cm4gY29uc3RyYWludHM7XG5cbiAgICAvLyBXaGVyZSBjbGF1c2VzXG4gICAgaWYgKG9wdGlvbnMud2hlcmUpIHtcbiAgICAgIGZvciAoY29uc3QgY2xhdXNlIG9mIG9wdGlvbnMud2hlcmUpIHtcbiAgICAgICAgY29uc3RyYWludHMucHVzaCh3aGVyZShjbGF1c2UuZmllbGQsIGNsYXVzZS5vcGVyYXRvciwgY2xhdXNlLnZhbHVlKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gT3JkZXJCeSBjbGF1c2VzXG4gICAgaWYgKG9wdGlvbnMub3JkZXJCeSkge1xuICAgICAgZm9yIChjb25zdCBjbGF1c2Ugb2Ygb3B0aW9ucy5vcmRlckJ5KSB7XG4gICAgICAgIGNvbnN0cmFpbnRzLnB1c2gob3JkZXJCeShjbGF1c2UuZmllbGQsIGNsYXVzZS5kaXJlY3Rpb24pKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDdXJzb3JzIHBhcmEgcGFnaW5hY2nDs25cbiAgICBpZiAob3B0aW9ucy5zdGFydEFmdGVyKSB7XG4gICAgICBjb25zdHJhaW50cy5wdXNoKHN0YXJ0QWZ0ZXIob3B0aW9ucy5zdGFydEFmdGVyKSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnN0YXJ0QXQpIHtcbiAgICAgIGNvbnN0cmFpbnRzLnB1c2goc3RhcnRBdChvcHRpb25zLnN0YXJ0QXQpKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuZW5kQmVmb3JlKSB7XG4gICAgICBjb25zdHJhaW50cy5wdXNoKGVuZEJlZm9yZShvcHRpb25zLmVuZEJlZm9yZSkpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5lbmRBdCkge1xuICAgICAgY29uc3RyYWludHMucHVzaChlbmRBdChvcHRpb25zLmVuZEF0KSk7XG4gICAgfVxuXG4gICAgLy8gTGltaXQgKHNlIGFncmVnYSBhbCBmaW5hbClcbiAgICBpZiAob3B0aW9ucy5saW1pdCkge1xuICAgICAgY29uc3RyYWludHMucHVzaChsaW1pdChvcHRpb25zLmxpbWl0KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnN0cmFpbnRzO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcGVhIHVuIERvY3VtZW50U25hcHNob3QgYSBudWVzdHJvIHRpcG9cbiAgICovXG4gIHByaXZhdGUgbWFwRG9jdW1lbnQ8VCBleHRlbmRzIEZpcmVzdG9yZURvY3VtZW50PihcbiAgICBzbmFwc2hvdDogRG9jdW1lbnRTbmFwc2hvdDxEb2N1bWVudERhdGE+XG4gICk6IFQge1xuICAgIGNvbnN0IGRhdGEgPSBzbmFwc2hvdC5kYXRhKCk7XG4gICAgaWYgKCFkYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RvY3VtZW50byBubyB0aWVuZSBkYXRvcycpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpZDogc25hcHNob3QuaWQsXG4gICAgICAuLi50aGlzLmNvbnZlcnRUaW1lc3RhbXBzKGRhdGEpLFxuICAgIH0gYXMgVDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252aWVydGUgVGltZXN0YW1wcyBkZSBGaXJlc3RvcmUgYSBEYXRlIGRlIEphdmFTY3JpcHRcbiAgICovXG4gIHByaXZhdGUgY29udmVydFRpbWVzdGFtcHMoZGF0YTogRG9jdW1lbnREYXRhKTogRG9jdW1lbnREYXRhIHtcbiAgICBjb25zdCByZXN1bHQ6IERvY3VtZW50RGF0YSA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpIHtcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFRpbWVzdGFtcCkge1xuICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlLnRvRGF0ZSgpO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXN1bHRba2V5XSA9IHRoaXMuY29udmVydFRpbWVzdGFtcHModmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIERpdmlkZSB1bmEgcnV0YSBkZSBkb2N1bWVudG8gZW4gY29sZWNjacOzbiBlIElEXG4gICAqL1xuICBwcml2YXRlIHNwbGl0UGF0aChwYXRoOiBzdHJpbmcpOiBbc3RyaW5nLCBzdHJpbmddIHtcbiAgICBjb25zdCBzZWdtZW50cyA9IHBhdGguc3BsaXQoJy8nKTtcbiAgICBpZiAoc2VnbWVudHMubGVuZ3RoIDwgMiB8fCBzZWdtZW50cy5sZW5ndGggJSAyICE9PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFJ1dGEgZGUgZG9jdW1lbnRvIGludsOhbGlkYTogJHtwYXRofWApO1xuICAgIH1cbiAgICBjb25zdCBkb2NJZCA9IHNlZ21lbnRzLnBvcCgpITtcbiAgICBjb25zdCBjb2xsZWN0aW9uUGF0aCA9IHNlZ21lbnRzLmpvaW4oJy8nKTtcbiAgICByZXR1cm4gW2NvbGxlY3Rpb25QYXRoLCBkb2NJZF07XG4gIH1cbn1cbiJdfQ==
|