valtech-components 2.0.821 → 2.0.824
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/container/container.component.mjs +52 -0
- package/esm2022/lib/components/atoms/container/types.mjs +2 -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/glass/glass.component.mjs +125 -0
- package/esm2022/lib/components/atoms/glass/types.mjs +2 -0
- package/esm2022/lib/components/atoms/glow/glow.component.mjs +95 -0
- package/esm2022/lib/components/atoms/glow/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/pattern/motifs.mjs +147 -0
- package/esm2022/lib/components/atoms/pattern/pattern.component.mjs +178 -0
- package/esm2022/lib/components/atoms/pattern/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/atoms/user-avatar/types.mjs +2 -0
- package/esm2022/lib/components/atoms/user-avatar/user-avatar.component.mjs +209 -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 +273 -0
- package/esm2022/lib/components/molecules/action-card/types.mjs +11 -0
- package/esm2022/lib/components/molecules/action-header/action-header.component.mjs +55 -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/checkbox-radio-input/checkbox-radio-input.component.mjs +79 -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 +210 -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 +249 -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 +179 -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 +203 -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 +92 -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/page-links/page-links.component.mjs +150 -0
- package/esm2022/lib/components/molecules/page-links/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/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 +202 -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/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/refresher/refresher.component.mjs +275 -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 +129 -0
- package/esm2022/lib/components/molecules/segment-control/types.mjs +2 -0
- package/esm2022/lib/components/molecules/select-input/select-input.component.mjs +148 -0
- package/esm2022/lib/components/molecules/select-search/select-search.component.mjs +434 -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 +211 -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/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/types.mjs +42 -0
- package/esm2022/lib/components/molecules/update-banner/update-banner.component.mjs +243 -0
- package/esm2022/lib/components/molecules/username-input/types.mjs +2 -0
- package/esm2022/lib/components/molecules/username-input/username-input.component.mjs +295 -0
- package/esm2022/lib/components/organisms/article/article.component.mjs +578 -0
- package/esm2022/lib/components/organisms/article/types.mjs +183 -0
- package/esm2022/lib/components/organisms/avatar-upload/avatar-upload.component.mjs +325 -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 +383 -0
- package/esm2022/lib/components/organisms/bottom-nav/types.mjs +19 -0
- package/esm2022/lib/components/organisms/cards-carousel/cards-carousel.component.mjs +108 -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/cookie-banner/cookie-banner.component.mjs +199 -0
- package/esm2022/lib/components/organisms/cookie-banner/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/faq/faq.component.mjs +176 -0
- package/esm2022/lib/components/organisms/faq/types.mjs +9 -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 +510 -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 +735 -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/skeleton-layout/skeleton-layout.component.mjs +423 -0
- package/esm2022/lib/components/organisms/skeleton-layout/types.mjs +10 -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 +255 -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 +164 -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/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 +238 -0
- package/esm2022/lib/components/templates/page-wrapper/types.mjs +2 -0
- package/esm2022/lib/components/templates/simple/simple.component.mjs +123 -0
- package/esm2022/lib/components/templates/simple/types.mjs +2 -0
- package/esm2022/lib/components/types.mjs +60 -0
- package/esm2022/lib/config/company-footer.config.mjs +125 -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/app-version/app-version.service.mjs +187 -0
- package/esm2022/lib/services/app-version/config.mjs +42 -0
- package/esm2022/lib/services/app-version/index.mjs +24 -0
- package/esm2022/lib/services/app-version/types.mjs +17 -0
- package/esm2022/lib/services/auth/auth-state.service.mjs +207 -0
- package/esm2022/lib/services/auth/auth.service.mjs +1142 -0
- package/esm2022/lib/services/auth/config.mjs +75 -0
- package/esm2022/lib/services/auth/device.service.mjs +135 -0
- package/esm2022/lib/services/auth/guards.mjs +199 -0
- package/esm2022/lib/services/auth/handoff.service.mjs +152 -0
- package/esm2022/lib/services/auth/index.mjs +98 -0
- package/esm2022/lib/services/auth/interceptor.mjs +122 -0
- package/esm2022/lib/services/auth/notification-action.service.mjs +117 -0
- package/esm2022/lib/services/auth/oauth-callback.component.mjs +169 -0
- package/esm2022/lib/services/auth/oauth.service.mjs +322 -0
- package/esm2022/lib/services/auth/org-switch.service.mjs +137 -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 +189 -0
- package/esm2022/lib/services/confirmation-dialog/types.mjs +14 -0
- package/esm2022/lib/services/content/content-types/blog.mjs +275 -0
- package/esm2022/lib/services/content/content-types/documentation.mjs +303 -0
- package/esm2022/lib/services/content/content-types/news.mjs +277 -0
- package/esm2022/lib/services/content/index.mjs +51 -0
- package/esm2022/lib/services/content/transformer.mjs +265 -0
- package/esm2022/lib/services/content/types.mjs +41 -0
- package/esm2022/lib/services/docs/docs-navigation.service.mjs +91 -0
- package/esm2022/lib/services/donation/config.mjs +41 -0
- package/esm2022/lib/services/donation/donation.service.mjs +92 -0
- package/esm2022/lib/services/donation/index.mjs +25 -0
- package/esm2022/lib/services/donation/types.mjs +10 -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 +506 -0
- package/esm2022/lib/services/firebase/firestore-collection.mjs +301 -0
- package/esm2022/lib/services/firebase/firestore.service.mjs +571 -0
- package/esm2022/lib/services/firebase/index.mjs +56 -0
- package/esm2022/lib/services/firebase/messaging.service.mjs +721 -0
- package/esm2022/lib/services/firebase/notifications.service.mjs +274 -0
- package/esm2022/lib/services/firebase/shared-config.mjs +147 -0
- package/esm2022/lib/services/firebase/storage.service.mjs +484 -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 +128 -0
- package/esm2022/lib/services/i18n/default-content.mjs +577 -0
- package/esm2022/lib/services/i18n/i18n.service.mjs +217 -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 +83 -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/legal-link/legal-link.service.mjs +85 -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/markdown-article/legal-content.service.mjs +107 -0
- package/esm2022/lib/services/markdown-article/markdown-article-parser.mjs +302 -0
- package/esm2022/lib/services/markdown-article/markdown-article-parser.service.mjs +20 -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 +220 -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/page-refresh/page-refresh.service.mjs +104 -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/preferences/index.mjs +3 -0
- package/esm2022/lib/services/preferences/preferences.service.mjs +198 -0
- package/esm2022/lib/services/preferences/preferences.types.mjs +7 -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/refreshable-stream/index.mjs +8 -0
- package/esm2022/lib/services/refreshable-stream/refreshable-stream.mjs +112 -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 +153 -0
- package/esm2022/lib/services/toast.service.mjs +53 -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/datetime.mjs +24 -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 +367 -0
- package/esm2022/valtech-components.mjs +5 -0
- package/fesm2022/valtech-components.mjs +1 -1
- package/fesm2022/valtech-components.mjs.map +1 -1
- 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/container/container.component.d.ts +30 -0
- package/lib/components/atoms/container/types.d.ts +11 -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/glass/glass.component.d.ts +43 -0
- package/lib/components/atoms/glass/types.d.ts +70 -0
- package/lib/components/atoms/glow/glow.component.d.ts +42 -0
- package/lib/components/atoms/glow/types.d.ts +40 -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/pattern/motifs.d.ts +60 -0
- package/lib/components/atoms/pattern/pattern.component.d.ts +68 -0
- package/lib/components/atoms/pattern/types.d.ts +61 -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/atoms/user-avatar/types.d.ts +74 -0
- package/lib/components/atoms/user-avatar/user-avatar.component.d.ts +55 -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 +27 -0
- package/lib/components/molecules/action-header/types.d.ts +27 -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/checkbox-radio-input/checkbox-radio-input.component.d.ts +17 -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/image-crop/index.d.ts +1 -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 +33 -0
- package/lib/components/molecules/notes-box/types.d.ts +35 -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/page-links/page-links.component.d.ts +29 -0
- package/lib/components/molecules/page-links/types.d.ts +38 -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/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 +44 -0
- package/lib/components/molecules/pill/types.d.ts +63 -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/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/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 +57 -0
- package/lib/components/molecules/select-search/select-search.component.d.ts +78 -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/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/types.d.ts +41 -0
- package/lib/components/molecules/update-banner/update-banner.component.d.ts +48 -0
- package/lib/components/molecules/username-input/types.d.ts +36 -0
- package/lib/components/molecules/username-input/username-input.component.d.ts +58 -0
- package/lib/components/organisms/article/article.component.d.ts +108 -0
- package/lib/components/organisms/article/types.d.ts +367 -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 +91 -0
- package/lib/components/organisms/bottom-nav/types.d.ts +120 -0
- package/lib/components/organisms/cards-carousel/cards-carousel.component.d.ts +36 -0
- package/lib/components/organisms/cards-carousel/types.d.ts +40 -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/cookie-banner/cookie-banner.component.d.ts +36 -0
- package/lib/components/organisms/cookie-banner/types.d.ts +62 -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/faq/faq.component.d.ts +46 -0
- package/lib/components/organisms/faq/types.d.ts +53 -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 +72 -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/skeleton-layout/skeleton-layout.component.d.ts +37 -0
- package/lib/components/organisms/skeleton-layout/types.d.ts +50 -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 +62 -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/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 +99 -0
- package/lib/components/templates/page-wrapper/types.d.ts +26 -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 +304 -0
- package/lib/config/company-footer.config.d.ts +118 -0
- package/lib/config/index.d.ts +4 -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/app-version/app-version.service.d.ts +64 -0
- package/lib/services/app-version/config.d.ts +35 -0
- package/lib/services/app-version/index.d.ts +23 -0
- package/lib/services/app-version/types.d.ts +35 -0
- package/lib/services/auth/auth-state.service.d.ts +106 -0
- package/lib/services/auth/auth.service.d.ts +429 -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 +126 -0
- package/lib/services/auth/handoff.service.d.ts +159 -0
- package/lib/services/auth/index.d.ts +89 -0
- package/lib/services/auth/interceptor.d.ts +22 -0
- package/lib/services/auth/notification-action.service.d.ts +34 -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/org-switch.service.d.ts +127 -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 +862 -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/content/content-types/blog.d.ts +148 -0
- package/lib/services/content/content-types/documentation.d.ts +183 -0
- package/lib/services/content/content-types/news.d.ts +162 -0
- package/lib/services/content/index.d.ts +49 -0
- package/lib/services/content/transformer.d.ts +96 -0
- package/lib/services/content/types.d.ts +220 -0
- package/lib/services/docs/docs-navigation.service.d.ts +51 -0
- package/lib/services/donation/config.d.ts +33 -0
- package/lib/services/donation/donation.service.d.ts +54 -0
- package/lib/services/donation/index.d.ts +25 -0
- package/lib/services/donation/types.d.ts +85 -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 +303 -0
- package/lib/services/firebase/firestore-collection.d.ts +199 -0
- package/lib/services/firebase/firestore.service.d.ts +335 -0
- package/lib/services/firebase/index.d.ts +44 -0
- package/lib/services/firebase/messaging.service.d.ts +341 -0
- package/lib/services/firebase/notifications.service.d.ts +158 -0
- package/lib/services/firebase/shared-config.d.ts +151 -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 +128 -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/index.d.ts +2 -0
- package/lib/services/image/types.d.ts +74 -0
- package/lib/services/in-app-browser.service.d.ts +16 -0
- package/lib/services/legal-link/legal-link.service.d.ts +73 -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/markdown-article/legal-content.service.d.ts +73 -0
- package/lib/services/markdown-article/markdown-article-parser.d.ts +38 -0
- package/lib/services/markdown-article/markdown-article-parser.service.d.ts +12 -0
- package/lib/services/meta/index.d.ts +2 -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/index.d.ts +2 -0
- package/lib/services/navigation/navigation.service.d.ts +134 -0
- package/lib/services/navigation/types.d.ts +67 -0
- package/lib/services/page-refresh/page-refresh.service.d.ts +86 -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/preferences/index.d.ts +2 -0
- package/lib/services/preferences/preferences.service.d.ts +61 -0
- package/lib/services/preferences/preferences.types.d.ts +35 -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/refreshable-stream/index.d.ts +7 -0
- package/lib/services/refreshable-stream/refreshable-stream.d.ts +113 -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 +76 -0
- package/lib/services/toast.service.d.ts +28 -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/datetime.d.ts +21 -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 +1 -1
- package/public-api.d.ts +316 -0
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import QRCodeStyling from 'qr-code-styling';
|
|
3
|
+
import { QR_PRESETS, } from './types';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
/**
|
|
6
|
+
* QrGeneratorService
|
|
7
|
+
*
|
|
8
|
+
* A comprehensive service for generating, customizing, and manipulating QR codes.
|
|
9
|
+
* Uses qr-code-styling library for high-quality, customizable QR code generation.
|
|
10
|
+
*
|
|
11
|
+
* @example Basic usage
|
|
12
|
+
* ```typescript
|
|
13
|
+
* const qr = await this.qrService.generate({ data: 'https://example.com' });
|
|
14
|
+
* console.log(qr.dataUrl); // base64 image
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* @example With customization
|
|
18
|
+
* ```typescript
|
|
19
|
+
* const qr = await this.qrService.generate({
|
|
20
|
+
* data: 'https://example.com',
|
|
21
|
+
* width: 400,
|
|
22
|
+
* dotsStyle: 'rounded',
|
|
23
|
+
* dotsColor: '#3880ff',
|
|
24
|
+
* logo: { src: 'logo.png', width: 60 }
|
|
25
|
+
* });
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* @example Using presets
|
|
29
|
+
* ```typescript
|
|
30
|
+
* const qr = await this.qrService.generateFromPreset('modern', 'https://example.com');
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export class QrGeneratorService {
|
|
34
|
+
/**
|
|
35
|
+
* Generate a QR code with the given configuration.
|
|
36
|
+
*
|
|
37
|
+
* @param config - QR code configuration
|
|
38
|
+
* @returns Promise<QrResult> - Generated QR code result
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```typescript
|
|
42
|
+
* const qr = await this.qrService.generate({
|
|
43
|
+
* data: 'https://myapp.com/product/123',
|
|
44
|
+
* width: 300,
|
|
45
|
+
* dotsStyle: 'rounded',
|
|
46
|
+
* dotsColor: '#000000',
|
|
47
|
+
* backgroundColor: '#ffffff'
|
|
48
|
+
* });
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
async generate(config) {
|
|
52
|
+
// Merge with defaults
|
|
53
|
+
const finalConfig = {
|
|
54
|
+
width: 300,
|
|
55
|
+
height: config.height || config.width || 300,
|
|
56
|
+
margin: 0,
|
|
57
|
+
dotsStyle: 'square',
|
|
58
|
+
dotsColor: '#000000',
|
|
59
|
+
backgroundColor: '#ffffff',
|
|
60
|
+
errorCorrectionLevel: 'M',
|
|
61
|
+
format: 'png',
|
|
62
|
+
quality: 1,
|
|
63
|
+
...config,
|
|
64
|
+
};
|
|
65
|
+
// Build qr-code-styling options
|
|
66
|
+
const qrOptions = {
|
|
67
|
+
width: finalConfig.width,
|
|
68
|
+
height: finalConfig.height,
|
|
69
|
+
data: finalConfig.data,
|
|
70
|
+
margin: finalConfig.margin,
|
|
71
|
+
qrOptions: {
|
|
72
|
+
errorCorrectionLevel: finalConfig.errorCorrectionLevel,
|
|
73
|
+
},
|
|
74
|
+
dotsOptions: {
|
|
75
|
+
type: finalConfig.dotsStyle,
|
|
76
|
+
...this.buildColorOptions(finalConfig.dotsColor),
|
|
77
|
+
},
|
|
78
|
+
backgroundOptions: {
|
|
79
|
+
...this.buildColorOptions(finalConfig.backgroundColor),
|
|
80
|
+
},
|
|
81
|
+
cornersSquareOptions: finalConfig.cornersSquareColor || finalConfig.cornersSquareStyle
|
|
82
|
+
? {
|
|
83
|
+
type: finalConfig.cornersSquareStyle,
|
|
84
|
+
...this.buildColorOptions(finalConfig.cornersSquareColor || finalConfig.dotsColor),
|
|
85
|
+
}
|
|
86
|
+
: undefined,
|
|
87
|
+
cornersDotOptions: finalConfig.cornersDotColor || finalConfig.cornersDotStyle
|
|
88
|
+
? {
|
|
89
|
+
type: finalConfig.cornersDotStyle,
|
|
90
|
+
...this.buildColorOptions(finalConfig.cornersDotColor || finalConfig.dotsColor),
|
|
91
|
+
}
|
|
92
|
+
: undefined,
|
|
93
|
+
};
|
|
94
|
+
// Add logo if provided
|
|
95
|
+
if (finalConfig.logo) {
|
|
96
|
+
qrOptions.image = finalConfig.logo.src;
|
|
97
|
+
qrOptions.imageOptions = {
|
|
98
|
+
hideBackgroundDots: finalConfig.logo.hideBackgroundDots ?? true,
|
|
99
|
+
imageSize: 0.4,
|
|
100
|
+
margin: finalConfig.logo.margin ?? 5,
|
|
101
|
+
crossOrigin: 'anonymous',
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
// Create QR code instance
|
|
105
|
+
const qrCode = new QRCodeStyling(qrOptions);
|
|
106
|
+
// Generate blob
|
|
107
|
+
const format = finalConfig.format || 'png';
|
|
108
|
+
const mimeType = this.getMimeType(format);
|
|
109
|
+
const extension = format === 'jpeg' ? 'jpg' : format;
|
|
110
|
+
let blob;
|
|
111
|
+
let svg;
|
|
112
|
+
let dataUrl;
|
|
113
|
+
if (format === 'svg') {
|
|
114
|
+
// Get SVG data
|
|
115
|
+
const svgData = await qrCode.getRawData('svg');
|
|
116
|
+
if (!svgData) {
|
|
117
|
+
throw new Error('Failed to generate SVG');
|
|
118
|
+
}
|
|
119
|
+
blob = svgData;
|
|
120
|
+
svg = await blob.text();
|
|
121
|
+
dataUrl = `data:${mimeType};base64,${btoa(svg)}`;
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
// Get image blob
|
|
125
|
+
const imageBlob = await qrCode.getRawData(format);
|
|
126
|
+
if (!imageBlob) {
|
|
127
|
+
throw new Error('Failed to generate image');
|
|
128
|
+
}
|
|
129
|
+
blob = imageBlob;
|
|
130
|
+
dataUrl = await this.blobToDataUrl(blob);
|
|
131
|
+
}
|
|
132
|
+
return {
|
|
133
|
+
config: finalConfig,
|
|
134
|
+
dataUrl,
|
|
135
|
+
blob,
|
|
136
|
+
svg,
|
|
137
|
+
mimeType,
|
|
138
|
+
extension,
|
|
139
|
+
generatedAt: new Date(),
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Generate a QR code using a preset configuration.
|
|
144
|
+
*
|
|
145
|
+
* @param preset - Preset name ('default', 'rounded', 'dots', 'classy', 'modern')
|
|
146
|
+
* @param data - Data to encode
|
|
147
|
+
* @param overrides - Optional configuration overrides
|
|
148
|
+
* @returns Promise<QrResult>
|
|
149
|
+
*/
|
|
150
|
+
async generateFromPreset(preset, data, overrides) {
|
|
151
|
+
const presetConfig = QR_PRESETS[preset] || QR_PRESETS['default'];
|
|
152
|
+
return this.generate({
|
|
153
|
+
...presetConfig,
|
|
154
|
+
...overrides,
|
|
155
|
+
data,
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Download the QR code as a file.
|
|
160
|
+
*
|
|
161
|
+
* @param qr - QR result to download
|
|
162
|
+
* @param options - Download options
|
|
163
|
+
*/
|
|
164
|
+
async download(qr, options) {
|
|
165
|
+
const filename = options?.filename || `qr-code-${Date.now()}`;
|
|
166
|
+
const format = options?.format || qr.config.format || 'png';
|
|
167
|
+
const extension = format === 'jpeg' ? 'jpg' : format;
|
|
168
|
+
let blob = qr.blob;
|
|
169
|
+
// Convert if different format requested
|
|
170
|
+
if (options?.format && options.format !== qr.config.format) {
|
|
171
|
+
const newQr = await this.generate({
|
|
172
|
+
...qr.config,
|
|
173
|
+
format: options.format,
|
|
174
|
+
});
|
|
175
|
+
blob = newQr.blob;
|
|
176
|
+
}
|
|
177
|
+
// Create download link
|
|
178
|
+
const url = URL.createObjectURL(blob);
|
|
179
|
+
const link = document.createElement('a');
|
|
180
|
+
link.href = url;
|
|
181
|
+
link.download = `${filename}.${extension}`;
|
|
182
|
+
document.body.appendChild(link);
|
|
183
|
+
link.click();
|
|
184
|
+
document.body.removeChild(link);
|
|
185
|
+
URL.revokeObjectURL(url);
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Copy the QR code to clipboard as an image.
|
|
189
|
+
*
|
|
190
|
+
* @param qr - QR result to copy
|
|
191
|
+
* @returns Promise<boolean> - Whether copy was successful
|
|
192
|
+
*/
|
|
193
|
+
async copyToClipboard(qr) {
|
|
194
|
+
try {
|
|
195
|
+
// Clipboard API requires PNG format
|
|
196
|
+
let pngBlob = qr.blob;
|
|
197
|
+
if (qr.mimeType !== 'image/png') {
|
|
198
|
+
const pngQr = await this.generate({
|
|
199
|
+
...qr.config,
|
|
200
|
+
format: 'png',
|
|
201
|
+
});
|
|
202
|
+
pngBlob = pngQr.blob;
|
|
203
|
+
}
|
|
204
|
+
await navigator.clipboard.write([
|
|
205
|
+
new ClipboardItem({
|
|
206
|
+
'image/png': pngBlob,
|
|
207
|
+
}),
|
|
208
|
+
]);
|
|
209
|
+
return true;
|
|
210
|
+
}
|
|
211
|
+
catch (error) {
|
|
212
|
+
console.error('Failed to copy QR to clipboard:', error);
|
|
213
|
+
return false;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Share the QR code using Web Share API.
|
|
218
|
+
*
|
|
219
|
+
* @param qr - QR result to share
|
|
220
|
+
* @param options - Share options
|
|
221
|
+
* @returns Promise<boolean> - Whether share was successful
|
|
222
|
+
*/
|
|
223
|
+
async share(qr, options) {
|
|
224
|
+
if (!navigator.share || !navigator.canShare) {
|
|
225
|
+
console.warn('Web Share API not available');
|
|
226
|
+
return false;
|
|
227
|
+
}
|
|
228
|
+
try {
|
|
229
|
+
const filename = options?.filename || `qr-code-${Date.now()}.${qr.extension}`;
|
|
230
|
+
const file = new File([qr.blob], filename, { type: qr.mimeType });
|
|
231
|
+
const shareData = {
|
|
232
|
+
title: options?.title || 'QR Code',
|
|
233
|
+
text: options?.text,
|
|
234
|
+
files: [file],
|
|
235
|
+
};
|
|
236
|
+
if (navigator.canShare(shareData)) {
|
|
237
|
+
await navigator.share(shareData);
|
|
238
|
+
return true;
|
|
239
|
+
}
|
|
240
|
+
// Fallback without file
|
|
241
|
+
await navigator.share({
|
|
242
|
+
title: options?.title || 'QR Code',
|
|
243
|
+
text: options?.text,
|
|
244
|
+
});
|
|
245
|
+
return true;
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
if (error.name !== 'AbortError') {
|
|
249
|
+
console.error('Failed to share QR:', error);
|
|
250
|
+
}
|
|
251
|
+
return false;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Get the QR code as a base64 string (without data URL prefix).
|
|
256
|
+
*
|
|
257
|
+
* @param qr - QR result
|
|
258
|
+
* @returns Base64 string
|
|
259
|
+
*/
|
|
260
|
+
toBase64(qr) {
|
|
261
|
+
const prefix = `data:${qr.mimeType};base64,`;
|
|
262
|
+
if (qr.dataUrl.startsWith(prefix)) {
|
|
263
|
+
return qr.dataUrl.substring(prefix.length);
|
|
264
|
+
}
|
|
265
|
+
return qr.dataUrl;
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Get the QR code as a data URL.
|
|
269
|
+
*
|
|
270
|
+
* @param qr - QR result
|
|
271
|
+
* @returns Data URL string
|
|
272
|
+
*/
|
|
273
|
+
toDataUrl(qr) {
|
|
274
|
+
return qr.dataUrl;
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Get the QR code as a Blob.
|
|
278
|
+
*
|
|
279
|
+
* @param qr - QR result
|
|
280
|
+
* @returns Blob
|
|
281
|
+
*/
|
|
282
|
+
toBlob(qr) {
|
|
283
|
+
return qr.blob;
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Check if Web Share API is available.
|
|
287
|
+
*/
|
|
288
|
+
canShare() {
|
|
289
|
+
return !!(navigator.share && navigator.canShare);
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Check if Clipboard API is available for images.
|
|
293
|
+
*/
|
|
294
|
+
canCopyToClipboard() {
|
|
295
|
+
return !!(navigator.clipboard && navigator.clipboard.write);
|
|
296
|
+
}
|
|
297
|
+
// === Private Helpers ===
|
|
298
|
+
buildColorOptions(color) {
|
|
299
|
+
if (!color) {
|
|
300
|
+
return {};
|
|
301
|
+
}
|
|
302
|
+
if (typeof color === 'string') {
|
|
303
|
+
return { color };
|
|
304
|
+
}
|
|
305
|
+
// Gradient
|
|
306
|
+
const gradient = color;
|
|
307
|
+
return {
|
|
308
|
+
gradient: {
|
|
309
|
+
type: gradient.type,
|
|
310
|
+
rotation: gradient.rotation || 0,
|
|
311
|
+
colorStops: gradient.colorStops,
|
|
312
|
+
},
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
getMimeType(format) {
|
|
316
|
+
const mimeTypes = {
|
|
317
|
+
png: 'image/png',
|
|
318
|
+
jpeg: 'image/jpeg',
|
|
319
|
+
webp: 'image/webp',
|
|
320
|
+
svg: 'image/svg+xml',
|
|
321
|
+
};
|
|
322
|
+
return mimeTypes[format] || 'image/png';
|
|
323
|
+
}
|
|
324
|
+
blobToDataUrl(blob) {
|
|
325
|
+
return new Promise((resolve, reject) => {
|
|
326
|
+
const reader = new FileReader();
|
|
327
|
+
reader.onloadend = () => resolve(reader.result);
|
|
328
|
+
reader.onerror = reject;
|
|
329
|
+
reader.readAsDataURL(blob);
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: QrGeneratorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
333
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: QrGeneratorService, providedIn: 'root' }); }
|
|
334
|
+
}
|
|
335
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: QrGeneratorService, decorators: [{
|
|
336
|
+
type: Injectable,
|
|
337
|
+
args: [{
|
|
338
|
+
providedIn: 'root',
|
|
339
|
+
}]
|
|
340
|
+
}] });
|
|
341
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXItZ2VuZXJhdG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL3FyLWdlbmVyYXRvci9xci1nZW5lcmF0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sYUFBYSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFPTCxVQUFVLEdBQ1gsTUFBTSxTQUFTLENBQUM7O0FBRWpCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQkc7QUFJSCxNQUFNLE9BQU8sa0JBQWtCO0lBQzdCOzs7Ozs7Ozs7Ozs7Ozs7O09BZ0JHO0lBQ0gsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFnQjtRQUU3QixzQkFBc0I7UUFDdEIsTUFBTSxXQUFXLEdBQWE7WUFDNUIsS0FBSyxFQUFFLEdBQUc7WUFDVixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxJQUFJLEdBQUc7WUFDNUMsTUFBTSxFQUFFLENBQUM7WUFDVCxTQUFTLEVBQUUsUUFBUTtZQUNuQixTQUFTLEVBQUUsU0FBUztZQUNwQixlQUFlLEVBQUUsU0FBUztZQUMxQixvQkFBb0IsRUFBRSxHQUFHO1lBQ3pCLE1BQU0sRUFBRSxLQUFLO1lBQ2IsT0FBTyxFQUFFLENBQUM7WUFDVixHQUFHLE1BQU07U0FDVixDQUFDO1FBRUYsZ0NBQWdDO1FBQ2hDLE1BQU0sU0FBUyxHQUFRO1lBQ3JCLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSztZQUN4QixNQUFNLEVBQUUsV0FBVyxDQUFDLE1BQU07WUFDMUIsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJO1lBQ3RCLE1BQU0sRUFBRSxXQUFXLENBQUMsTUFBTTtZQUMxQixTQUFTLEVBQUU7Z0JBQ1Qsb0JBQW9CLEVBQUUsV0FBVyxDQUFDLG9CQUFvQjth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QUFDLENBQUM7SUFDTCxDQUFDOytHQTdVVSxrQkFBa0I7bUhBQWxCLGtCQUFrQixjQUZqQixNQUFNOzs0RkFFUCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IFFSQ29kZVN0eWxpbmcgZnJvbSAncXItY29kZS1zdHlsaW5nJztcbmltcG9ydCB7XG4gIFFyQ29uZmlnLFxuICBRclJlc3VsdCxcbiAgUXJEb3dubG9hZE9wdGlvbnMsXG4gIFFyU2hhcmVPcHRpb25zLFxuICBRckNvbG9yQ29uZmlnLFxuICBRckdyYWRpZW50LFxuICBRUl9QUkVTRVRTLFxufSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBRckdlbmVyYXRvclNlcnZpY2VcbiAqXG4gKiBBIGNvbXByZWhlbnNpdmUgc2VydmljZSBmb3IgZ2VuZXJhdGluZywgY3VzdG9taXppbmcsIGFuZCBtYW5pcHVsYXRpbmcgUVIgY29kZXMuXG4gKiBVc2VzIHFyLWNvZGUtc3R5bGluZyBsaWJyYXJ5IGZvciBoaWdoLXF1YWxpdHksIGN1c3RvbWl6YWJsZSBRUiBjb2RlIGdlbmVyYXRpb24uXG4gKlxuICogQGV4YW1wbGUgQmFzaWMgdXNhZ2VcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHFyID0gYXdhaXQgdGhpcy5xclNlcnZpY2UuZ2VuZXJhdGUoeyBkYXRhOiAnaHR0cHM6Ly9leGFtcGxlLmNvbScgfSk7XG4gKiBjb25zb2xlLmxvZyhxci5kYXRhVXJsKTsgLy8gYmFzZTY0IGltYWdlXG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBXaXRoIGN1c3RvbWl6YXRpb25cbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHFyID0gYXdhaXQgdGhpcy5xclNlcnZpY2UuZ2VuZXJhdGUoe1xuICogICBkYXRhOiAnaHR0cHM6Ly9leGFtcGxlLmNvbScsXG4gKiAgIHdpZHRoOiA0MDAsXG4gKiAgIGRvdHNTdHlsZTogJ3JvdW5kZWQnLFxuICogICBkb3RzQ29sb3I6ICcjMzg4MGZmJyxcbiAqICAgbG9nbzogeyBzcmM6ICdsb2dvLnBuZycsIHdpZHRoOiA2MCB9XG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIFVzaW5nIHByZXNldHNcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHFyID0gYXdhaXQgdGhpcy5xclNlcnZpY2UuZ2VuZXJhdGVGcm9tUHJlc2V0KCdtb2Rlcm4nLCAnaHR0cHM6Ly9leGFtcGxlLmNvbScpO1xuICogYGBgXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBRckdlbmVyYXRvclNlcnZpY2Uge1xuICAvKipcbiAgICogR2VuZXJhdGUgYSBRUiBjb2RlIHdpdGggdGhlIGdpdmVuIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWcgLSBRUiBjb2RlIGNvbmZpZ3VyYXRpb25cbiAgICogQHJldHVybnMgUHJvbWlzZTxRclJlc3VsdD4gLSBHZW5lcmF0ZWQgUVIgY29kZSByZXN1bHRcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBxciA9IGF3YWl0IHRoaXMucXJTZXJ2aWNlLmdlbmVyYXRlKHtcbiAgICogICBkYXRhOiAnaHR0cHM6Ly9teWFwcC5jb20vcHJvZHVjdC8xMjMnLFxuICAgKiAgIHdpZHRoOiAzMDAsXG4gICAqICAgZG90c1N0eWxlOiAncm91bmRlZCcsXG4gICAqICAgZG90c0NvbG9yOiAnIzAwMDAwMCcsXG4gICAqICAgYmFja2dyb3VuZENvbG9yOiAnI2ZmZmZmZidcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgZ2VuZXJhdGUoY29uZmlnOiBRckNvbmZpZyk6IFByb21pc2U8UXJSZXN1bHQ+IHtcblxuICAgIC8vIE1lcmdlIHdpdGggZGVmYXVsdHNcbiAgICBjb25zdCBmaW5hbENvbmZpZzogUXJDb25maWcgPSB7XG4gICAgICB3aWR0aDogMzAwLFxuICAgICAgaGVpZ2h0OiBjb25maWcuaGVpZ2h0IHx8IGNvbmZpZy53aWR0aCB8fCAzMDAsXG4gICAgICBtYXJnaW46IDAsXG4gICAgICBkb3RzU3R5bGU6ICdzcXVhcmUnLFxuICAgICAgZG90c0NvbG9yOiAnIzAwMDAwMCcsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmZmZmZmJyxcbiAgICAgIGVycm9yQ29ycmVjdGlvbkxldmVsOiAnTScsXG4gICAgICBmb3JtYXQ6ICdwbmcnLFxuICAgICAgcXVhbGl0eTogMSxcbiAgICAgIC4uLmNvbmZpZyxcbiAgICB9O1xuXG4gICAgLy8gQnVpbGQgcXItY29kZS1zdHlsaW5nIG9wdGlvbnNcbiAgICBjb25zdCBxck9wdGlvbnM6IGFueSA9IHtcbiAgICAgIHdpZHRoOiBmaW5hbENvbmZpZy53aWR0aCxcbiAgICAgIGhlaWdodDogZmluYWxDb25maWcuaGVpZ2h0LFxuICAgICAgZGF0YTogZmluYWxDb25maWcuZGF0YSxcbiAgICAgIG1hcmdpbjogZmluYWxDb25maWcubWFyZ2luLFxuICAgICAgcXJPcHRpb25zOiB7XG4gICAgICAgIGVycm9yQ29ycmVjdGlvbkxldmVsOiBmaW5hbENvbmZpZy5lcnJvckNvcnJlY3Rpb25MZXZlbCxcbiAgICAgIH0sXG4gICAgICBkb3RzT3B0aW9uczoge1xuICAgICAgICB0eXBlOiBmaW5hbENvbmZpZy5kb3RzU3R5bGUsXG4gICAgICAgIC4uLnRoaXMuYnVpbGRDb2xvck9wdGlvbnMoZmluYWxDb25maWcuZG90c0NvbG9yKSxcbiAgICAgIH0sXG4gICAgICBiYWNrZ3JvdW5kT3B0aW9uczoge1xuICAgICAgICAuLi50aGlzLmJ1aWxkQ29sb3JPcHRpb25zKGZpbmFsQ29uZmlnLmJhY2tncm91bmRDb2xvciksXG4gICAgICB9LFxuICAgICAgY29ybmVyc1NxdWFyZU9wdGlvbnM6IGZpbmFsQ29uZmlnLmNvcm5lcnNTcXVhcmVDb2xvciB8fCBmaW5hbENvbmZpZy5jb3JuZXJzU3F1YXJlU3R5bGVcbiAgICAgICAgPyB7XG4gICAgICAgICAgICB0eXBlOiBmaW5hbENvbmZpZy5jb3JuZXJzU3F1YXJlU3R5bGUsXG4gICAgICAgICAgICAuLi50aGlzLmJ1aWxkQ29sb3JPcHRpb25zKGZpbmFsQ29uZmlnLmNvcm5lcnNTcXVhcmVDb2xvciB8fCBmaW5hbENvbmZpZy5kb3RzQ29sb3IpLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBjb3JuZXJzRG90T3B0aW9uczogZmluYWxDb25maWcuY29ybmVyc0RvdENvbG9yIHx8IGZpbmFsQ29uZmlnLmNvcm5lcnNEb3RTdHlsZVxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHR5cGU6IGZpbmFsQ29uZmlnLmNvcm5lcnNEb3RTdHlsZSxcbiAgICAgICAgICAgIC4uLnRoaXMuYnVpbGRDb2xvck9wdGlvbnMoZmluYWxDb25maWcuY29ybmVyc0RvdENvbG9yIHx8IGZpbmFsQ29uZmlnLmRvdHNDb2xvciksXG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9O1xuXG4gICAgLy8gQWRkIGxvZ28gaWYgcHJvdmlkZWRcbiAgICBpZiAoZmluYWxDb25maWcubG9nbykge1xuICAgICAgcXJPcHRpb25zLmltYWdlID0gZmluYWxDb25maWcubG9nby5zcmM7XG4gICAgICBxck9wdGlvbnMuaW1hZ2VPcHRpb25zID0ge1xuICAgICAgICBoaWRlQmFja2dyb3VuZERvdHM6IGZpbmFsQ29uZmlnLmxvZ28uaGlkZUJhY2tncm91bmREb3RzID8/IHRydWUsXG4gICAgICAgIGltYWdlU2l6ZTogMC40LFxuICAgICAgICBtYXJnaW46IGZpbmFsQ29uZmlnLmxvZ28ubWFyZ2luID8/IDUsXG4gICAgICAgIGNyb3NzT3JpZ2luOiAnYW5vbnltb3VzJyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIFFSIGNvZGUgaW5zdGFuY2VcbiAgICBjb25zdCBxckNvZGUgPSBuZXcgUVJDb2RlU3R5bGluZyhxck9wdGlvbnMpO1xuXG4gICAgLy8gR2VuZXJhdGUgYmxvYlxuICAgIGNvbnN0IGZvcm1hdCA9IGZpbmFsQ29uZmlnLmZvcm1hdCB8fCAncG5nJztcbiAgICBjb25zdCBtaW1lVHlwZSA9IHRoaXMuZ2V0TWltZVR5cGUoZm9ybWF0KTtcbiAgICBjb25zdCBleHRlbnNpb24gPSBmb3JtYXQgPT09ICdqcGVnJyA/ICdqcGcnIDogZm9ybWF0O1xuXG4gICAgbGV0IGJsb2I6IEJsb2I7XG4gICAgbGV0IHN2Zzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGxldCBkYXRhVXJsOiBzdHJpbmc7XG5cbiAgICBpZiAoZm9ybWF0ID09PSAnc3ZnJykge1xuICAgICAgLy8gR2V0IFNWRyBkYXRhXG4gICAgICBjb25zdCBzdmdEYXRhID0gYXdhaXQgcXJDb2RlLmdldFJhd0RhdGEoJ3N2ZycpO1xuICAgICAgaWYgKCFzdmdEYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIFNWRycpO1xuICAgICAgfVxuICAgICAgYmxvYiA9IHN2Z0RhdGEgYXMgQmxvYjtcbiAgICAgIHN2ZyA9IGF3YWl0IGJsb2IudGV4dCgpO1xuICAgICAgZGF0YVVybCA9IGBkYXRhOiR7bWltZVR5cGV9O2Jhc2U2NCwke2J0b2Eoc3ZnKX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBHZXQgaW1hZ2UgYmxvYlxuICAgICAgY29uc3QgaW1hZ2VCbG9iID0gYXdhaXQgcXJDb2RlLmdldFJhd0RhdGEoZm9ybWF0IGFzICdwbmcnIHwgJ2pwZWcnIHwgJ3dlYnAnKTtcbiAgICAgIGlmICghaW1hZ2VCbG9iKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIGltYWdlJyk7XG4gICAgICB9XG4gICAgICBibG9iID0gaW1hZ2VCbG9iIGFzIEJsb2I7XG4gICAgICBkYXRhVXJsID0gYXdhaXQgdGhpcy5ibG9iVG9EYXRhVXJsKGJsb2IpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb25maWc6IGZpbmFsQ29uZmlnLFxuICAgICAgZGF0YVVybCxcbiAgICAgIGJsb2IsXG4gICAgICBzdmcsXG4gICAgICBtaW1lVHlwZSxcbiAgICAgIGV4dGVuc2lvbixcbiAgICAgIGdlbmVyYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYSBRUiBjb2RlIHVzaW5nIGEgcHJlc2V0IGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBwcmVzZXQgLSBQcmVzZXQgbmFtZSAoJ2RlZmF1bHQnLCAncm91bmRlZCcsICdkb3RzJywgJ2NsYXNzeScsICdtb2Rlcm4nKVxuICAgKiBAcGFyYW0gZGF0YSAtIERhdGEgdG8gZW5jb2RlXG4gICAqIEBwYXJhbSBvdmVycmlkZXMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIG92ZXJyaWRlc1xuICAgKiBAcmV0dXJucyBQcm9taXNlPFFyUmVzdWx0PlxuICAgKi9cbiAgYXN5bmMgZ2VuZXJhdGVGcm9tUHJlc2V0KFxuICAgIHByZXNldDoga2V5b2YgdHlwZW9mIFFSX1BSRVNFVFMgfCBzdHJpbmcsXG4gICAgZGF0YTogc3RyaW5nLFxuICAgIG92ZXJyaWRlcz86IFBhcnRpYWw8UXJDb25maWc+XG4gICk6IFByb21pc2U8UXJSZXN1bHQ+IHtcbiAgICBjb25zdCBwcmVzZXRDb25maWcgPSBRUl9QUkVTRVRTW3ByZXNldF0gfHwgUVJfUFJFU0VUU1snZGVmYXVsdCddO1xuICAgIHJldHVybiB0aGlzLmdlbmVyYXRlKHtcbiAgICAgIC4uLnByZXNldENvbmZpZyxcbiAgICAgIC4uLm92ZXJyaWRlcyxcbiAgICAgIGRhdGEsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRG93bmxvYWQgdGhlIFFSIGNvZGUgYXMgYSBmaWxlLlxuICAgKlxuICAgKiBAcGFyYW0gcXIgLSBRUiByZXN1bHQgdG8gZG93bmxvYWRcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBEb3dubG9hZCBvcHRpb25zXG4gICAqL1xuICBhc3luYyBkb3dubG9hZChxcjogUXJSZXN1bHQsIG9wdGlvbnM/OiBRckRvd25sb2FkT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZpbGVuYW1lID0gb3B0aW9ucz8uZmlsZW5hbWUgfHwgYHFyLWNvZGUtJHtEYXRlLm5vdygpfWA7XG4gICAgY29uc3QgZm9ybWF0ID0gb3B0aW9ucz8uZm9ybWF0IHx8IHFyLmNvbmZpZy5mb3JtYXQgfHwgJ3BuZyc7XG4gICAgY29uc3QgZXh0ZW5zaW9uID0gZm9ybWF0ID09PSAnanBlZycgPyAnanBnJyA6IGZvcm1hdDtcblxuICAgIGxldCBibG9iID0gcXIuYmxvYjtcblxuICAgIC8vIENvbnZlcnQgaWYgZGlmZmVyZW50IGZvcm1hdCByZXF1ZXN0ZWRcbiAgICBpZiAob3B0aW9ucz8uZm9ybWF0ICYmIG9wdGlvbnMuZm9ybWF0ICE9PSBxci5jb25maWcuZm9ybWF0KSB7XG4gICAgICBjb25zdCBuZXdRciA9IGF3YWl0IHRoaXMuZ2VuZXJhdGUoe1xuICAgICAgICAuLi5xci5jb25maWcsXG4gICAgICAgIGZvcm1hdDogb3B0aW9ucy5mb3JtYXQsXG4gICAgICB9KTtcbiAgICAgIGJsb2IgPSBuZXdRci5ibG9iO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBkb3dubG9hZCBsaW5rXG4gICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGxpbmsuaHJlZiA9IHVybDtcbiAgICBsaW5rLmRvd25sb2FkID0gYCR7ZmlsZW5hbWV9LiR7ZXh0ZW5zaW9ufWA7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICBsaW5rLmNsaWNrKCk7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcbiAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XG4gIH1cblxuICAvKipcbiAgICogQ29weSB0aGUgUVIgY29kZSB0byBjbGlwYm9hcmQgYXMgYW4gaW1hZ2UuXG4gICAqXG4gICAqIEBwYXJhbSBxciAtIFFSIHJlc3VsdCB0byBjb3B5XG4gICAqIEByZXR1cm5zIFByb21pc2U8Ym9vbGVhbj4gLSBXaGV0aGVyIGNvcHkgd2FzIHN1Y2Nlc3NmdWxcbiAgICovXG4gIGFzeW5jIGNvcHlUb0NsaXBib2FyZChxcjogUXJSZXN1bHQpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0cnkge1xuICAgICAgLy8gQ2xpcGJvYXJkIEFQSSByZXF1aXJlcyBQTkcgZm9ybWF0XG4gICAgICBsZXQgcG5nQmxvYiA9IHFyLmJsb2I7XG5cbiAgICAgIGlmIChxci5taW1lVHlwZSAhPT0gJ2ltYWdlL3BuZycpIHtcbiAgICAgICAgY29uc3QgcG5nUXIgPSBhd2FpdCB0aGlzLmdlbmVyYXRlKHtcbiAgICAgICAgICAuLi5xci5jb25maWcsXG4gICAgICAgICAgZm9ybWF0OiAncG5nJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHBuZ0Jsb2IgPSBwbmdRci5ibG9iO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlKFtcbiAgICAgICAgbmV3IENsaXBib2FyZEl0ZW0oe1xuICAgICAgICAgICdpbWFnZS9wbmcnOiBwbmdCbG9iLFxuICAgICAgICB9KSxcbiAgICAgIF0pO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGNvcHkgUVIgdG8gY2xpcGJvYXJkOicsIGVycm9yKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2hhcmUgdGhlIFFSIGNvZGUgdXNpbmcgV2ViIFNoYXJlIEFQSS5cbiAgICpcbiAgICogQHBhcmFtIHFyIC0gUVIgcmVzdWx0IHRvIHNoYXJlXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gU2hhcmUgb3B0aW9uc1xuICAgKiBAcmV0dXJucyBQcm9taXNlPGJvb2xlYW4+IC0gV2hldGhlciBzaGFyZSB3YXMgc3VjY2Vzc2Z1bFxuICAgKi9cbiAgYXN5bmMgc2hhcmUocXI6IFFyUmVzdWx0LCBvcHRpb25zPzogUXJTaGFyZU9wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIW5hdmlnYXRvci5zaGFyZSB8fCAhbmF2aWdhdG9yLmNhblNoYXJlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1dlYiBTaGFyZSBBUEkgbm90IGF2YWlsYWJsZScpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWxlbmFtZSA9IG9wdGlvbnM/LmZpbGVuYW1lIHx8IGBxci1jb2RlLSR7RGF0ZS5ub3coKX0uJHtxci5leHRlbnNpb259YDtcbiAgICAgIGNvbnN0IGZpbGUgPSBuZXcgRmlsZShbcXIuYmxvYl0sIGZpbGVuYW1lLCB7IHR5cGU6IHFyLm1pbWVUeXBlIH0pO1xuXG4gICAgICBjb25zdCBzaGFyZURhdGE6IFNoYXJlRGF0YSA9IHtcbiAgICAgICAgdGl0bGU6IG9wdGlvbnM/LnRpdGxlIHx8ICdRUiBDb2RlJyxcbiAgICAgICAgdGV4dDogb3B0aW9ucz8udGV4dCxcbiAgICAgICAgZmlsZXM6IFtmaWxlXSxcbiAgICAgIH07XG5cbiAgICAgIGlmIChuYXZpZ2F0b3IuY2FuU2hhcmUoc2hhcmVEYXRhKSkge1xuICAgICAgICBhd2FpdCBuYXZpZ2F0b3Iuc2hhcmUoc2hhcmVEYXRhKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIEZhbGxiYWNrIHdpdGhvdXQgZmlsZVxuICAgICAgYXdhaXQgbmF2aWdhdG9yLnNoYXJlKHtcbiAgICAgICAgdGl0bGU6IG9wdGlvbnM/LnRpdGxlIHx8ICdRUiBDb2RlJyxcbiAgICAgICAgdGV4dDogb3B0aW9ucz8udGV4dCxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKChlcnJvciBhcyBFcnJvcikubmFtZSAhPT0gJ0Fib3J0RXJyb3InKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBzaGFyZSBRUjonLCBlcnJvcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgUVIgY29kZSBhcyBhIGJhc2U2NCBzdHJpbmcgKHdpdGhvdXQgZGF0YSBVUkwgcHJlZml4KS5cbiAgICpcbiAgICogQHBhcmFtIHFyIC0gUVIgcmVzdWx0XG4gICAqIEByZXR1cm5zIEJhc2U2NCBzdHJpbmdcbiAgICovXG4gIHRvQmFzZTY0KHFyOiBRclJlc3VsdCk6IHN0cmluZyB7XG4gICAgY29uc3QgcHJlZml4ID0gYGRhdGE6JHtxci5taW1lVHlwZX07YmFzZTY0LGA7XG4gICAgaWYgKHFyLmRhdGFVcmwuc3RhcnRzV2l0aChwcmVmaXgpKSB7XG4gICAgICByZXR1cm4gcXIuZGF0YVVybC5zdWJzdHJpbmcocHJlZml4Lmxlbmd0aCk7XG4gICAgfVxuICAgIHJldHVybiBxci5kYXRhVXJsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgUVIgY29kZSBhcyBhIGRhdGEgVVJMLlxuICAgKlxuICAgKiBAcGFyYW0gcXIgLSBRUiByZXN1bHRcbiAgICogQHJldHVybnMgRGF0YSBVUkwgc3RyaW5nXG4gICAqL1xuICB0b0RhdGFVcmwocXI6IFFyUmVzdWx0KTogc3RyaW5nIHtcbiAgICByZXR1cm4gcXIuZGF0YVVybDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIFFSIGNvZGUgYXMgYSBCbG9iLlxuICAgKlxuICAgKiBAcGFyYW0gcXIgLSBRUiByZXN1bHRcbiAgICogQHJldHVybnMgQmxvYlxuICAgKi9cbiAgdG9CbG9iKHFyOiBRclJlc3VsdCk6IEJsb2Ige1xuICAgIHJldHVybiBxci5ibG9iO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIFdlYiBTaGFyZSBBUEkgaXMgYXZhaWxhYmxlLlxuICAgKi9cbiAgY2FuU2hhcmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhKG5hdmlnYXRvci5zaGFyZSAmJiBuYXZpZ2F0b3IuY2FuU2hhcmUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIENsaXBib2FyZCBBUEkgaXMgYXZhaWxhYmxlIGZvciBpbWFnZXMuXG4gICAqL1xuICBjYW5Db3B5VG9DbGlwYm9hcmQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhKG5hdmlnYXRvci5jbGlwYm9hcmQgJiYgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZSk7XG4gIH1cblxuICAvLyA9PT0gUHJpdmF0ZSBIZWxwZXJzID09PVxuXG4gIHByaXZhdGUgYnVpbGRDb2xvck9wdGlvbnMoY29sb3I/OiBRckNvbG9yQ29uZmlnKTogYW55IHtcbiAgICBpZiAoIWNvbG9yKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb2xvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB7IGNvbG9yIH07XG4gICAgfVxuXG4gICAgLy8gR3JhZGllbnRcbiAgICBjb25zdCBncmFkaWVudCA9IGNvbG9yIGFzIFFyR3JhZGllbnQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIGdyYWRpZW50OiB7XG4gICAgICAgIHR5cGU6IGdyYWRpZW50LnR5cGUsXG4gICAgICAgIHJvdGF0aW9uOiBncmFkaWVudC5yb3RhdGlvbiB8fCAwLFxuICAgICAgICBjb2xvclN0b3BzOiBncmFkaWVudC5jb2xvclN0b3BzLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNaW1lVHlwZShmb3JtYXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbWltZVR5cGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgcG5nOiAnaW1hZ2UvcG5nJyxcbiAgICAgIGpwZWc6ICdpbWFnZS9qcGVnJyxcbiAgICAgIHdlYnA6ICdpbWFnZS93ZWJwJyxcbiAgICAgIHN2ZzogJ2ltYWdlL3N2Zyt4bWwnLFxuICAgIH07XG4gICAgcmV0dXJuIG1pbWVUeXBlc1tmb3JtYXRdIHx8ICdpbWFnZS9wbmcnO1xuICB9XG5cbiAgcHJpdmF0ZSBibG9iVG9EYXRhVXJsKGJsb2I6IEJsb2IpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgcmVhZGVyLm9ubG9hZGVuZCA9ICgpID0+IHJlc29sdmUocmVhZGVyLnJlc3VsdCBhcyBzdHJpbmcpO1xuICAgICAgcmVhZGVyLm9uZXJyb3IgPSByZWplY3Q7XG4gICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChibG9iKTtcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default presets for quick styling.
|
|
3
|
+
*/
|
|
4
|
+
export const QR_PRESETS = {
|
|
5
|
+
default: {
|
|
6
|
+
width: 300,
|
|
7
|
+
dotsStyle: 'square',
|
|
8
|
+
dotsColor: '#000000',
|
|
9
|
+
backgroundColor: '#ffffff',
|
|
10
|
+
errorCorrectionLevel: 'M',
|
|
11
|
+
},
|
|
12
|
+
rounded: {
|
|
13
|
+
width: 300,
|
|
14
|
+
dotsStyle: 'rounded',
|
|
15
|
+
cornersSquareStyle: 'extra-rounded',
|
|
16
|
+
cornersDotStyle: 'dot',
|
|
17
|
+
dotsColor: '#000000',
|
|
18
|
+
backgroundColor: '#ffffff',
|
|
19
|
+
},
|
|
20
|
+
dots: {
|
|
21
|
+
width: 300,
|
|
22
|
+
dotsStyle: 'dots',
|
|
23
|
+
cornersSquareStyle: 'dot',
|
|
24
|
+
cornersDotStyle: 'dot',
|
|
25
|
+
dotsColor: '#000000',
|
|
26
|
+
backgroundColor: '#ffffff',
|
|
27
|
+
},
|
|
28
|
+
classy: {
|
|
29
|
+
width: 300,
|
|
30
|
+
dotsStyle: 'classy',
|
|
31
|
+
cornersSquareStyle: 'extra-rounded',
|
|
32
|
+
cornersDotStyle: 'dot',
|
|
33
|
+
dotsColor: '#000000',
|
|
34
|
+
backgroundColor: '#ffffff',
|
|
35
|
+
},
|
|
36
|
+
modern: {
|
|
37
|
+
width: 300,
|
|
38
|
+
dotsStyle: 'extra-rounded',
|
|
39
|
+
cornersSquareStyle: 'extra-rounded',
|
|
40
|
+
cornersDotStyle: 'dot',
|
|
41
|
+
dotsColor: '#1a1a1a',
|
|
42
|
+
backgroundColor: '#ffffff',
|
|
43
|
+
margin: 2,
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL3FyLWdlbmVyYXRvci90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrS0E7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQXNDO0lBQzNELE9BQU8sRUFBRTtRQUNQLEtBQUssRUFBRSxHQUFHO1FBQ1YsU0FBUyxFQUFFLFFBQVE7UUFDbkIsU0FBUyxFQUFFLFNBQVM7UUFDcEIsZUFBZSxFQUFFLFNBQVM7UUFDMUIsb0JBQW9CLEVBQUUsR0FBRztLQUMxQjtJQUNELE9BQU8sRUFBRTtRQUNQLEtBQUssRUFBRSxHQUFHO1FBQ1YsU0FBUyxFQUFFLFNBQVM7UUFDcEIsa0JBQWtCLEVBQUUsZUFBZTtRQUNuQyxlQUFlLEVBQUUsS0FBSztRQUN0QixTQUFTLEVBQUUsU0FBUztRQUNwQixlQUFlLEVBQUUsU0FBUztLQUMzQjtJQUNELElBQUksRUFBRTtRQUNKLEtBQUssRUFBRSxHQUFHO1FBQ1YsU0FBUyxFQUFFLE1BQU07UUFDakIsa0JBQWtCLEVBQUUsS0FBSztRQUN6QixlQUFlLEVBQUUsS0FBSztRQUN0QixTQUFTLEVBQUUsU0FBUztRQUNwQixlQUFlLEVBQUUsU0FBUztLQUMzQjtJQUNELE1BQU0sRUFBRTtRQUNOLEtBQUssRUFBRSxHQUFHO1FBQ1YsU0FBUyxFQUFFLFFBQVE7UUFDbkIsa0JBQWtCLEVBQUUsZUFBZTtRQUNuQyxlQUFlLEVBQUUsS0FBSztRQUN0QixTQUFTLEVBQUUsU0FBUztRQUNwQixlQUFlLEVBQUUsU0FBUztLQUMzQjtJQUNELE1BQU0sRUFBRTtRQUNOLEtBQUssRUFBRSxHQUFHO1FBQ1YsU0FBUyxFQUFFLGVBQWU7UUFDMUIsa0JBQWtCLEVBQUUsZUFBZTtRQUNuQyxlQUFlLEVBQUUsS0FBSztRQUN0QixTQUFTLEVBQUUsU0FBUztRQUNwQixlQUFlLEVBQUUsU0FBUztRQUMxQixNQUFNLEVBQUUsQ0FBQztLQUNWO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU3R5bGUgb3B0aW9ucyBmb3IgUVIgY29kZSBkb3RzIChkYXRhIG1vZHVsZXMpLlxuICovXG5leHBvcnQgdHlwZSBRckRvdHNTdHlsZSA9ICdzcXVhcmUnIHwgJ2RvdHMnIHwgJ3JvdW5kZWQnIHwgJ2V4dHJhLXJvdW5kZWQnIHwgJ2NsYXNzeScgfCAnY2xhc3N5LXJvdW5kZWQnO1xuXG4vKipcbiAqIFN0eWxlIG9wdGlvbnMgZm9yIFFSIGNvZGUgY29ybmVyIHNxdWFyZXMuXG4gKi9cbmV4cG9ydCB0eXBlIFFyQ29ybmVyc1NxdWFyZVN0eWxlID0gJ3NxdWFyZScgfCAnZG90JyB8ICdleHRyYS1yb3VuZGVkJztcblxuLyoqXG4gKiBTdHlsZSBvcHRpb25zIGZvciBRUiBjb2RlIGNvcm5lciBkb3RzLlxuICovXG5leHBvcnQgdHlwZSBRckNvcm5lcnNEb3RTdHlsZSA9ICdzcXVhcmUnIHwgJ2RvdCc7XG5cbi8qKlxuICogT3V0cHV0IGZvcm1hdCBmb3IgdGhlIGdlbmVyYXRlZCBRUiBjb2RlLlxuICovXG5leHBvcnQgdHlwZSBRck91dHB1dEZvcm1hdCA9ICdzdmcnIHwgJ3BuZycgfCAnanBlZycgfCAnd2VicCc7XG5cbi8qKlxuICogRXJyb3IgY29ycmVjdGlvbiBsZXZlbCBmb3IgUVIgY29kZXMuXG4gKiBIaWdoZXIgbGV2ZWxzIGFsbG93IG1vcmUgZGFtYWdlIHRvbGVyYW5jZSBidXQgcmVkdWNlIGRhdGEgY2FwYWNpdHkuXG4gKi9cbmV4cG9ydCB0eXBlIFFyRXJyb3JDb3JyZWN0aW9uTGV2ZWwgPSAnTCcgfCAnTScgfCAnUScgfCAnSCc7XG5cbi8qKlxuICogTG9nby9pbWFnZSBjb25maWd1cmF0aW9uIGZvciB0aGUgUVIgY29kZSBjZW50ZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXJMb2dvQ29uZmlnIHtcbiAgLyoqIEltYWdlIHNvdXJjZSBVUkwgb3IgYmFzZTY0ICovXG4gIHNyYzogc3RyaW5nO1xuICAvKiogTG9nbyB3aWR0aCAoZGVmYXVsdDogMjUlIG9mIFFSIHNpemUpICovXG4gIHdpZHRoPzogbnVtYmVyO1xuICAvKiogTG9nbyBoZWlnaHQgKGRlZmF1bHQ6IHNhbWUgYXMgd2lkdGgpICovXG4gIGhlaWdodD86IG51bWJlcjtcbiAgLyoqIE1hcmdpbiBhcm91bmQgdGhlIGxvZ28gKi9cbiAgbWFyZ2luPzogbnVtYmVyO1xuICAvKiogQm9yZGVyIHJhZGl1cyBmb3Igcm91bmRlZCBjb3JuZXJzICovXG4gIGJvcmRlclJhZGl1cz86IG51bWJlcjtcbiAgLyoqIFdoZXRoZXIgdG8gaGlkZSBkb3RzIGJlaGluZCB0aGUgbG9nbyAqL1xuICBoaWRlQmFja2dyb3VuZERvdHM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEdyYWRpZW50IGNvbmZpZ3VyYXRpb24gZm9yIFFSIGVsZW1lbnRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFFyR3JhZGllbnQge1xuICAvKiogR3JhZGllbnQgdHlwZSAqL1xuICB0eXBlOiAnbGluZWFyJyB8ICdyYWRpYWwnO1xuICAvKiogUm90YXRpb24gYW5nbGUgaW4gZGVncmVlcyAoZm9yIGxpbmVhcikgKi9cbiAgcm90YXRpb24/OiBudW1iZXI7XG4gIC8qKiBDb2xvciBzdG9wcyAqL1xuICBjb2xvclN0b3BzOiBBcnJheTx7XG4gICAgb2Zmc2V0OiBudW1iZXI7XG4gICAgY29sb3I6IHN0cmluZztcbiAgfT47XG59XG5cbi8qKlxuICogQ29sb3IgY29uZmlndXJhdGlvbiAtIGNhbiBiZSBzb2xpZCBjb2xvciBvciBncmFkaWVudC5cbiAqL1xuZXhwb3J0IHR5cGUgUXJDb2xvckNvbmZpZyA9IHN0cmluZyB8IFFyR3JhZGllbnQ7XG5cbi8qKlxuICogQ29tcGxldGUgY29uZmlndXJhdGlvbiBmb3IgUVIgY29kZSBnZW5lcmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFFyQ29uZmlnIHtcbiAgLyoqIFRoZSBkYXRhIHRvIGVuY29kZSAoVVJMLCB0ZXh0LCBldGMuKSAqL1xuICBkYXRhOiBzdHJpbmc7XG5cbiAgLy8gPT09IFNpemUgPT09XG4gIC8qKiBRUiBjb2RlIHdpZHRoIGluIHBpeGVscyAoZGVmYXVsdDogMzAwKSAqL1xuICB3aWR0aD86IG51bWJlcjtcbiAgLyoqIFFSIGNvZGUgaGVpZ2h0IGluIHBpeGVscyAoZGVmYXVsdDogc2FtZSBhcyB3aWR0aCkgKi9cbiAgaGVpZ2h0PzogbnVtYmVyO1xuICAvKiogUXVpZXQgem9uZSBtYXJnaW4gaW4gbW9kdWxlcyAoZGVmYXVsdDogMCkgKi9cbiAgbWFyZ2luPzogbnVtYmVyO1xuXG4gIC8vID09PSBDb2xvcnMgPT09XG4gIC8qKiBDb2xvci9ncmFkaWVudCBmb3IgZGF0YSBkb3RzICovXG4gIGRvdHNDb2xvcj86IFFyQ29sb3JDb25maWc7XG4gIC8qKiBCYWNrZ3JvdW5kIGNvbG9yIChkZWZhdWx0OiB3aGl0ZSkgKi9cbiAgYmFja2dyb3VuZENvbG9yPzogUXJDb2xvckNvbmZpZztcbiAgLyoqIENvbG9yIGZvciBjb3JuZXIgc3F1YXJlcyAqL1xuICBjb3JuZXJzU3F1YXJlQ29sb3I/OiBRckNvbG9yQ29uZmlnO1xuICAvKiogQ29sb3IgZm9yIGNvcm5lciBkb3RzICovXG4gIGNvcm5lcnNEb3RDb2xvcj86IFFyQ29sb3JDb25maWc7XG5cbiAgLy8gPT09IFN0eWxlcyA9PT1cbiAgLyoqIFN0eWxlIG9mIGRhdGEgZG90cyAoZGVmYXVsdDogJ3NxdWFyZScpICovXG4gIGRvdHNTdHlsZT86IFFyRG90c1N0eWxlO1xuICAvKiogU3R5bGUgb2YgY29ybmVyIHNxdWFyZXMgKGRlZmF1bHQ6ICdzcXVhcmUnKSAqL1xuICBjb3JuZXJzU3F1YXJlU3R5bGU/OiBRckNvcm5lcnNTcXVhcmVTdHlsZTtcbiAgLyoqIFN0eWxlIG9mIGNvcm5lciBkb3RzIChkZWZhdWx0OiAnc3F1YXJlJykgKi9cbiAgY29ybmVyc0RvdFN0eWxlPzogUXJDb3JuZXJzRG90U3R5bGU7XG5cbiAgLy8gPT09IExvZ28gPT09XG4gIC8qKiBMb2dvL2ltYWdlIGNvbmZpZ3VyYXRpb24gKi9cbiAgbG9nbz86IFFyTG9nb0NvbmZpZztcblxuICAvLyA9PT0gVGVjaG5pY2FsID09PVxuICAvKiogRXJyb3IgY29ycmVjdGlvbiBsZXZlbCAoZGVmYXVsdDogJ00nKSAqL1xuICBlcnJvckNvcnJlY3Rpb25MZXZlbD86IFFyRXJyb3JDb3JyZWN0aW9uTGV2ZWw7XG5cbiAgLy8gPT09IE91dHB1dCA9PT1cbiAgLyoqIE91dHB1dCBmb3JtYXQgKGRlZmF1bHQ6ICdwbmcnKSAqL1xuICBmb3JtYXQ/OiBRck91dHB1dEZvcm1hdDtcbiAgLyoqIFF1YWxpdHkgZm9yIGpwZWcvd2VicCAoMC0xLCBkZWZhdWx0OiAxKSAqL1xuICBxdWFsaXR5PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJlc3VsdCBmcm9tIFFSIGNvZGUgZ2VuZXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBRclJlc3VsdCB7XG4gIC8qKiBPcmlnaW5hbCBjb25maWd1cmF0aW9uIHVzZWQgKi9cbiAgY29uZmlnOiBRckNvbmZpZztcbiAgLyoqIEdlbmVyYXRlZCBkYXRhIGFzIGJhc2U2NCBkYXRhIFVSTCAqL1xuICBkYXRhVXJsOiBzdHJpbmc7XG4gIC8qKiBHZW5lcmF0ZWQgZGF0YSBhcyBCbG9iICovXG4gIGJsb2I6IEJsb2I7XG4gIC8qKiBTVkcgc3RyaW5nIChvbmx5IHdoZW4gZm9ybWF0IGlzICdzdmcnKSAqL1xuICBzdmc/OiBzdHJpbmc7XG4gIC8qKiBNSU1FIHR5cGUgb2YgdGhlIGdlbmVyYXRlZCBpbWFnZSAqL1xuICBtaW1lVHlwZTogc3RyaW5nO1xuICAvKiogRmlsZSBleHRlbnNpb24gKi9cbiAgZXh0ZW5zaW9uOiBzdHJpbmc7XG4gIC8qKiBUaW1lc3RhbXAgb2YgZ2VuZXJhdGlvbiAqL1xuICBnZW5lcmF0ZWRBdDogRGF0ZTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBkb3dubG9hZGluZyB0aGUgUVIgY29kZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBRckRvd25sb2FkT3B0aW9ucyB7XG4gIC8qKiBDdXN0b20gZmlsZW5hbWUgKHdpdGhvdXQgZXh0ZW5zaW9uKSAqL1xuICBmaWxlbmFtZT86IHN0cmluZztcbiAgLyoqIE92ZXJyaWRlIGZvcm1hdCBmb3IgZG93bmxvYWQgKi9cbiAgZm9ybWF0PzogUXJPdXRwdXRGb3JtYXQ7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Igc2hhcmluZyB0aGUgUVIgY29kZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBRclNoYXJlT3B0aW9ucyB7XG4gIC8qKiBTaGFyZSB0aXRsZSAqL1xuICB0aXRsZT86IHN0cmluZztcbiAgLyoqIFNoYXJlIHRleHQvZGVzY3JpcHRpb24gKi9cbiAgdGV4dD86IHN0cmluZztcbiAgLyoqIEN1c3RvbSBmaWxlbmFtZSBmb3IgdGhlIHNoYXJlZCBmaWxlICovXG4gIGZpbGVuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByZXNldCBjb25maWd1cmF0aW9ucyBmb3IgY29tbW9uIHVzZSBjYXNlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBRclByZXNldCB7XG4gIG5hbWU6IHN0cmluZztcbiAgY29uZmlnOiBQYXJ0aWFsPFFyQ29uZmlnPjtcbn1cblxuLyoqXG4gKiBEZWZhdWx0IHByZXNldHMgZm9yIHF1aWNrIHN0eWxpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBRUl9QUkVTRVRTOiBSZWNvcmQ8c3RyaW5nLCBQYXJ0aWFsPFFyQ29uZmlnPj4gPSB7XG4gIGRlZmF1bHQ6IHtcbiAgICB3aWR0aDogMzAwLFxuICAgIGRvdHNTdHlsZTogJ3NxdWFyZScsXG4gICAgZG90c0NvbG9yOiAnIzAwMDAwMCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2ZmZmZmZicsXG4gICAgZXJyb3JDb3JyZWN0aW9uTGV2ZWw6ICdNJyxcbiAgfSxcbiAgcm91bmRlZDoge1xuICAgIHdpZHRoOiAzMDAsXG4gICAgZG90c1N0eWxlOiAncm91bmRlZCcsXG4gICAgY29ybmVyc1NxdWFyZVN0eWxlOiAnZXh0cmEtcm91bmRlZCcsXG4gICAgY29ybmVyc0RvdFN0eWxlOiAnZG90JyxcbiAgICBkb3RzQ29sb3I6ICcjMDAwMDAwJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmZmZmZmJyxcbiAgfSxcbiAgZG90czoge1xuICAgIHdpZHRoOiAzMDAsXG4gICAgZG90c1N0eWxlOiAnZG90cycsXG4gICAgY29ybmVyc1NxdWFyZVN0eWxlOiAnZG90JyxcbiAgICBjb3JuZXJzRG90U3R5bGU6ICdkb3QnLFxuICAgIGRvdHNDb2xvcjogJyMwMDAwMDAnLFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNmZmZmZmYnLFxuICB9LFxuICBjbGFzc3k6IHtcbiAgICB3aWR0aDogMzAwLFxuICAgIGRvdHNTdHlsZTogJ2NsYXNzeScsXG4gICAgY29ybmVyc1NxdWFyZVN0eWxlOiAnZXh0cmEtcm91bmRlZCcsXG4gICAgY29ybmVyc0RvdFN0eWxlOiAnZG90JyxcbiAgICBkb3RzQ29sb3I6ICcjMDAwMDAwJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmZmZmZmJyxcbiAgfSxcbiAgbW9kZXJuOiB7XG4gICAgd2lkdGg6IDMwMCxcbiAgICBkb3RzU3R5bGU6ICdleHRyYS1yb3VuZGVkJyxcbiAgICBjb3JuZXJzU3F1YXJlU3R5bGU6ICdleHRyYS1yb3VuZGVkJyxcbiAgICBjb3JuZXJzRG90U3R5bGU6ICdkb3QnLFxuICAgIGRvdHNDb2xvcjogJyMxYTFhMWEnLFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNmZmZmZmYnLFxuICAgIG1hcmdpbjogMixcbiAgfSxcbn07XG4iXX0=
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Refreshable Stream
|
|
3
|
+
*
|
|
4
|
+
* Helper `createRefreshableStream` para vistas con datos Firestore.
|
|
5
|
+
* Soporta modo one-shot y real-time, con gate de `firebaseAuthReady`.
|
|
6
|
+
*/
|
|
7
|
+
export { createRefreshableStream, } from './refreshable-stream';
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL3JlZnJlc2hhYmxlLXN0cmVhbS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUNILE9BQU8sRUFDTCx1QkFBdUIsR0FHeEIsTUFBTSxzQkFBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVmcmVzaGFibGUgU3RyZWFtXG4gKlxuICogSGVscGVyIGBjcmVhdGVSZWZyZXNoYWJsZVN0cmVhbWAgcGFyYSB2aXN0YXMgY29uIGRhdG9zIEZpcmVzdG9yZS5cbiAqIFNvcG9ydGEgbW9kbyBvbmUtc2hvdCB5IHJlYWwtdGltZSwgY29uIGdhdGUgZGUgYGZpcmViYXNlQXV0aFJlYWR5YC5cbiAqL1xuZXhwb3J0IHtcbiAgY3JlYXRlUmVmcmVzaGFibGVTdHJlYW0sXG4gIHR5cGUgUmVmcmVzaGFibGVTdHJlYW0sXG4gIHR5cGUgUmVmcmVzaGFibGVTdHJlYW1PcHRpb25zLFxufSBmcm9tICcuL3JlZnJlc2hhYmxlLXN0cmVhbSc7XG4iXX0=
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Refreshable Stream
|
|
3
|
+
*
|
|
4
|
+
* Helper estándar para vistas que consumen datos de Firestore. Soporta DOS
|
|
5
|
+
* modos — el caller decide cuál vía la `factory`:
|
|
6
|
+
*
|
|
7
|
+
* - **one-shot** (recomendado por defecto): `() => from(svc.getAllOnce())`.
|
|
8
|
+
* Carga una vez y completa. Más barato — sin listener vivo.
|
|
9
|
+
* - **real-time**: `() => svc.getAll()`. Listener Firestore que auto-actualiza.
|
|
10
|
+
* Solo donde importa (inbox de notificaciones, badges).
|
|
11
|
+
*
|
|
12
|
+
* En ambos modos la primera suscripción se gatea por `firebaseAuthReady`
|
|
13
|
+
* (sesión de Firebase Auth lista) — así el listener/lectura nunca se adjunta
|
|
14
|
+
* antes de que `request.auth` esté disponible en las reglas de Firestore, lo
|
|
15
|
+
* que cierra la ventana de `permission-denied` en cold start de PWA.
|
|
16
|
+
*
|
|
17
|
+
* El `retry` con backoff corto es solo red de seguridad para reconexiones
|
|
18
|
+
* transitorias (no para cubrir cold start — eso lo cubre el gate de auth).
|
|
19
|
+
*/
|
|
20
|
+
import { inject, Injector } from '@angular/core';
|
|
21
|
+
import { toObservable, toSignal } from '@angular/core/rxjs-interop';
|
|
22
|
+
import { signal } from '@angular/core';
|
|
23
|
+
import { of, race, timer } from 'rxjs';
|
|
24
|
+
import { catchError, retry, switchMap, take, tap, timeout } from 'rxjs/operators';
|
|
25
|
+
import { FirebaseService } from '../firebase/firebase.service';
|
|
26
|
+
/**
|
|
27
|
+
* Crea un stream refrescable a partir de una factory de Observable.
|
|
28
|
+
*
|
|
29
|
+
* DEBE llamarse en un injection context (field initializer o constructor) —
|
|
30
|
+
* usa `toSignal`/`toObservable`/`inject` internamente.
|
|
31
|
+
*
|
|
32
|
+
* @param factory - Función que produce el Observable a consumir. El caller
|
|
33
|
+
* decide el modo: `() => from(svc.getAllOnce())` (one-shot) o
|
|
34
|
+
* `() => svc.getAll()` (real-time).
|
|
35
|
+
* @param options - Configuración opcional (fallback, retry, gate).
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```typescript
|
|
39
|
+
* // one-shot (recomendado por defecto)
|
|
40
|
+
* private readonly stream = createRefreshableStream(
|
|
41
|
+
* () => from(this.svc.getAllOnce()),
|
|
42
|
+
* );
|
|
43
|
+
*
|
|
44
|
+
* // real-time (inbox)
|
|
45
|
+
* private readonly stream = createRefreshableStream(
|
|
46
|
+
* () => this.notifs.getAll(50),
|
|
47
|
+
* );
|
|
48
|
+
*
|
|
49
|
+
* readonly items = this.stream.data;
|
|
50
|
+
* readonly loading = this.stream.loading;
|
|
51
|
+
*
|
|
52
|
+
* ionViewWillEnter() {
|
|
53
|
+
* this.pageRefresh.register(() => this.stream.reload());
|
|
54
|
+
* }
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export function createRefreshableStream(factory, options) {
|
|
58
|
+
const injector = options?.injector ?? inject(Injector);
|
|
59
|
+
const fallback = (options?.fallback ?? null);
|
|
60
|
+
const retryCount = options?.retryCount ?? 4;
|
|
61
|
+
const retryBaseDelayMs = options?.retryBaseDelayMs ?? 500;
|
|
62
|
+
const gateOnFirebaseAuth = options?.gateOnFirebaseAuth ?? true;
|
|
63
|
+
const authGateTimeoutMs = options?.authGateTimeoutMs ?? 20000;
|
|
64
|
+
const firstEmitTimeoutMs = options?.firstEmitTimeoutMs ?? 20000;
|
|
65
|
+
// FirebaseService es opcional — sin él (apps sin Firebase) no se gatea.
|
|
66
|
+
const firebase = gateOnFirebaseAuth ? injector.get(FirebaseService, null) : null;
|
|
67
|
+
const _reload = signal(0);
|
|
68
|
+
const _loading = signal(true);
|
|
69
|
+
const _error = signal(false);
|
|
70
|
+
// Gate de Firebase Auth: el stream no abre la primera suscripción hasta que
|
|
71
|
+
// la sesión esté confirmada. `race` con un `timer` de seguridad — si la
|
|
72
|
+
// sesión NUNCA se establece (token inválido, signInWithFirebase falló), el
|
|
73
|
+
// gate igual se libera tras `authGateTimeoutMs` y la factory procede: si no
|
|
74
|
+
// hay permiso terminará en estado `error`, jamás en skeleton infinito.
|
|
75
|
+
const authGate$ = firebase
|
|
76
|
+
? race(firebase.firebaseAuthReady$, timer(authGateTimeoutMs)).pipe(take(1))
|
|
77
|
+
: of(true);
|
|
78
|
+
const data = toSignal(toObservable(_reload, { injector }).pipe(tap(() => {
|
|
79
|
+
_loading.set(true);
|
|
80
|
+
_error.set(false);
|
|
81
|
+
}),
|
|
82
|
+
// Esperar a Firebase Auth listo antes de cada (re)suscripción. Como
|
|
83
|
+
// `firebaseAuthReady$` completa tras la primera emisión, las reloads
|
|
84
|
+
// posteriores resuelven el gate de inmediato (auth ya está listo).
|
|
85
|
+
switchMap(() => authGate$.pipe(switchMap(() => factory().pipe(tap(() => {
|
|
86
|
+
_loading.set(false);
|
|
87
|
+
_error.set(false);
|
|
88
|
+
}),
|
|
89
|
+
// Backoff corto exponencial acotado — solo red de seguridad para
|
|
90
|
+
// reconexiones transitorias, NO para cubrir cold start.
|
|
91
|
+
retry({
|
|
92
|
+
count: retryCount,
|
|
93
|
+
delay: (_err, attempt) => timer(Math.min(retryBaseDelayMs * 2 ** (attempt - 1), 4000)),
|
|
94
|
+
}),
|
|
95
|
+
// Techo absoluto para la PRIMERA emisión. Si la factory no emite
|
|
96
|
+
// ni valor ni error (servicio nunca inicializado → `EMPTY` →
|
|
97
|
+
// silencio), `timeout` dispara un error → `catchError` → estado
|
|
98
|
+
// `error`. Nunca skeleton perpetuo. Va DESPUÉS de `retry` para
|
|
99
|
+
// que cuente el tiempo total, no por intento.
|
|
100
|
+
timeout({ first: firstEmitTimeoutMs }), catchError(() => {
|
|
101
|
+
_loading.set(false);
|
|
102
|
+
_error.set(true);
|
|
103
|
+
return of(fallback);
|
|
104
|
+
})))))), { initialValue: null, injector });
|
|
105
|
+
return {
|
|
106
|
+
data,
|
|
107
|
+
loading: _loading.asReadonly(),
|
|
108
|
+
error: _error.asReadonly(),
|
|
109
|
+
reload: () => _reload.update(n => n + 1),
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmcmVzaGFibGUtc3RyZWFtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9yZWZyZXNoYWJsZS1zdHJlYW0vcmVmcmVzaGFibGUtc3RyZWFtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQWdFL0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUNILE1BQU0sVUFBVSx1QkFBdUIsQ0FDckMsT0FBNEIsRUFDNUIsT0FBcUM7SUFFckMsTUFBTSxRQUFRLEdBQUcsT0FBTyxFQUFFLFFBQVEsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdkQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxJQUFJLElBQUksQ0FBYSxDQUFDO0lBQ3pELE1BQU0sVUFBVSxHQUFHLE9BQU8sRUFBRSxVQUFVLElBQUksQ0FBQyxDQUFDO0lBQzVDLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxFQUFFLGdCQUFnQixJQUFJLEdBQUcsQ0FBQztJQUMxRCxNQUFNLGtCQUFrQixHQUFHLE9BQU8sRUFBRSxrQkFB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LENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ3pDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZWZyZXNoYWJsZSBTdHJlYW1cbiAqXG4gKiBIZWxwZXIgZXN0w6FuZGFyIHBhcmEgdmlzdGFzIHF1ZSBjb25zdW1lbiBkYXRvcyBkZSBGaXJlc3RvcmUuIFNvcG9ydGEgRE9TXG4gKiBtb2RvcyDigJQgZWwgY2FsbGVyIGRlY2lkZSBjdcOhbCB2w61hIGxhIGBmYWN0b3J5YDpcbiAqXG4gKiAgLSAqKm9uZS1zaG90KiogKHJlY29tZW5kYWRvIHBvciBkZWZlY3RvKTogYCgpID0+IGZyb20oc3ZjLmdldEFsbE9uY2UoKSlgLlxuICogICAgQ2FyZ2EgdW5hIHZleiB5IGNvbXBsZXRhLiBNw6FzIGJhcmF0byDigJQgc2luIGxpc3RlbmVyIHZpdm8uXG4gKiAgLSAqKnJlYWwtdGltZSoqOiBgKCkgPT4gc3ZjLmdldEFsbCgpYC4gTGlzdGVuZXIgRmlyZXN0b3JlIHF1ZSBhdXRvLWFjdHVhbGl6YS5cbiAqICAgIFNvbG8gZG9uZGUgaW1wb3J0YSAoaW5ib3ggZGUgbm90aWZpY2FjaW9uZXMsIGJhZGdlcykuXG4gKlxuICogRW4gYW1ib3MgbW9kb3MgbGEgcHJpbWVyYSBzdXNjcmlwY2nDs24gc2UgZ2F0ZWEgcG9yIGBmaXJlYmFzZUF1dGhSZWFkeWBcbiAqIChzZXNpw7NuIGRlIEZpcmViYXNlIEF1dGggbGlzdGEpIOKAlCBhc8OtIGVsIGxpc3RlbmVyL2xlY3R1cmEgbnVuY2Egc2UgYWRqdW50YVxuICogYW50ZXMgZGUgcXVlIGByZXF1ZXN0LmF1dGhgIGVzdMOpIGRpc3BvbmlibGUgZW4gbGFzIHJlZ2xhcyBkZSBGaXJlc3RvcmUsIGxvXG4gKiBxdWUgY2llcnJhIGxhIHZlbnRhbmEgZGUgYHBlcm1pc3Npb24tZGVuaWVkYCBlbiBjb2xkIHN0YXJ0IGRlIFBXQS5cbiAqXG4gKiBFbCBgcmV0cnlgIGNvbiBiYWNrb2ZmIGNvcnRvIGVzIHNvbG8gcmVkIGRlIHNlZ3VyaWRhZCBwYXJhIHJlY29uZXhpb25lc1xuICogdHJhbnNpdG9yaWFzIChubyBwYXJhIGN1YnJpciBjb2xkIHN0YXJ0IOKAlCBlc28gbG8gY3VicmUgZWwgZ2F0ZSBkZSBhdXRoKS5cbiAqL1xuXG5pbXBvcnQgeyBpbmplY3QsIEluamVjdG9yLCBTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvT2JzZXJ2YWJsZSwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCByYWNlLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgcmV0cnksIHN3aXRjaE1hcCwgdGFrZSwgdGFwLCB0aW1lb3V0IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBGaXJlYmFzZVNlcnZpY2UgfSBmcm9tICcuLi9maXJlYmFzZS9maXJlYmFzZS5zZXJ2aWNlJztcblxuLyoqIE9wY2lvbmVzIGRlIGNvbmZpZ3VyYWNpw7NuIHBhcmEgYGNyZWF0ZVJlZnJlc2hhYmxlU3RyZWFtYC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaGFibGVTdHJlYW1PcHRpb25zPFQ+IHtcbiAgLyoqXG4gICAqIFZhbG9yIGVtaXRpZG8gY3VhbmRvIGxhIGZhY3RvcnkgZmFsbGEgdHJhcyBhZ290YXIgbG9zIHJlaW50ZW50b3MuXG4gICAqIERlZmF1bHQ6IGBudWxsYC5cbiAgICovXG4gIGZhbGxiYWNrPzogVDtcbiAgLyoqXG4gICAqIE7Dum1lcm8gbcOheGltbyBkZSByZWludGVudG9zIGFudGUgdW4gZXJyb3IgZGUgbGEgZmFjdG9yeS5cbiAgICogQmFja29mZiBjb3J0byDigJQgTk8gY3VicmUgY29sZCBzdGFydCAoZXNvIGxvIGhhY2UgZWwgZ2F0ZSBkZSBhdXRoKSwgc29sb1xuICAgKiByZWNvbmV4aW9uZXMgdHJhbnNpdG9yaWFzLiBEZWZhdWx0OiA0LlxuICAgKi9cbiAgcmV0cnlDb3VudD86IG51bWJlcjtcbiAgLyoqXG4gICAqIERlbGF5IGJhc2UgZGVsIGJhY2tvZmYgKG1zKS4gRWwgZGVsYXkgZWZlY3Rpdm8gY3JlY2UgZXhwb25lbmNpYWxtZW50ZVxuICAgKiBhY290YWRvOiA1MDBtcyDihpIgMXMg4oaSIDJzIC4uLiBEZWZhdWx0OiA1MDAuXG4gICAqL1xuICByZXRyeUJhc2VEZWxheU1zPzogbnVtYmVyO1xuICAvKipcbiAgICogU2kgYGZhbHNlYCwgTk8gZXNwZXJhIGEgYGZpcmViYXNlQXV0aFJlYWR5YCBhbnRlcyBkZSBsYSBwcmltZXJhXG4gICAqIHN1c2NyaXBjacOzbi4gw5p0aWwgcGFyYSBzdHJlYW1zIHF1ZSBubyBsZWVuIEZpcmVzdG9yZS4gRGVmYXVsdDogYHRydWVgLlxuICAgKi9cbiAgZ2F0ZU9uRmlyZWJhc2VBdXRoPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRpbWVvdXQgKG1zKSBkZWwgZ2F0ZSBkZSBGaXJlYmFzZSBBdXRoLiBTaSBsYSBzZXNpw7NuIGRlIEZpcmViYXNlIEF1dGggbm9cbiAgICogc2UgZXN0YWJsZWNlIGVuIGVzdGUgdGllbXBvLCBlbCBzdHJlYW0gcHJvY2VkZSBpZ3VhbCAobGEgZmFjdG9yeSBjb3JyZXLDoVxuICAgKiB5LCBzaSBubyBoYXkgcGVybWlzbywgdGVybWluYXLDoSBlbiBlc3RhZG8gYGVycm9yYCDigJQgTlVOQ0EgZW4gc2tlbGV0b25cbiAgICogaW5maW5pdG8pLiBNdXkgcG9yIGVuY2ltYSBkZSBjdWFscXVpZXIgaGFuZHNoYWtlIHJlYWwuIERlZmF1bHQ6IDIwMDAwLlxuICAgKi9cbiAgYXV0aEdhdGVUaW1lb3V0TXM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaW1lb3V0IChtcykgZGUgbGEgUFJJTUVSQSBlbWlzacOzbiBkZSBsYSBmYWN0b3J5LiBTaSBsYSBmYWN0b3J5IG5vIGVtaXRlXG4gICAqIG5pIHVuIHZhbG9yIG5pIHVuIGVycm9yIGVuIGVzdGUgdGllbXBvIChjYXNvIHTDrXBpY286IHVuIHNlcnZpY2lvIEZpcmVzdG9yZVxuICAgKiBxdWUgbnVuY2Egc2UgaW5pY2lhbGl6w7Mg4oaSIGBFTVBUWWAg4oaSIHNpbGVuY2lvIHRvdGFsKSwgZWwgc3RyZWFtIHBhc2EgYVxuICAgKiBlc3RhZG8gYGVycm9yYCBlbiB2ZXogZGUgcXVlZGFyc2UgZW4gc2tlbGV0b24gcGVycGV0dW8uIERlZmF1bHQ6IDIwMDAwLlxuICAgKi9cbiAgZmlyc3RFbWl0VGltZW91dE1zPzogbnVtYmVyO1xuICAvKipcbiAgICogSW5qZWN0b3IgZXhwbMOtY2l0by4gU29sbyBuZWNlc2FyaW8gc2kgYGNyZWF0ZVJlZnJlc2hhYmxlU3RyZWFtYCBzZSBsbGFtYVxuICAgKiBmdWVyYSBkZSB1biBpbmplY3Rpb24gY29udGV4dCAocmFybykuIFBvciBkZWZlY3RvIHVzYSBgaW5qZWN0KEluamVjdG9yKWAuXG4gICAqL1xuICBpbmplY3Rvcj86IEluamVjdG9yO1xufVxuXG4vKipcbiAqIFJlc3VsdGFkbyBkZSBgY3JlYXRlUmVmcmVzaGFibGVTdHJlYW1gLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZnJlc2hhYmxlU3RyZWFtPFQ+IHtcbiAgLyoqIERhdG9zIGFjdHVhbGVzLiBgbnVsbGAgbWllbnRyYXMgbGEgcHJpbWVyYSBlbWlzacOzbiBubyBoYSBsbGVnYWRvLiAqL1xuICByZWFkb25seSBkYXRhOiBTaWduYWw8VCB8IG51bGw+O1xuICAvKiogYHRydWVgIG1pZW50cmFzIHNlIGVzcGVyYSBsYSBwcmltZXJhIGVtaXNpw7NuIGRlIGxhIHN1c2NyaXBjacOzbiBhY3R1YWwuICovXG4gIHJlYWRvbmx5IGxvYWRpbmc6IFNpZ25hbDxib29sZWFuPjtcbiAgLyoqIGB0cnVlYCBzaSBsYSBmYWN0b3J5IGZhbGzDsyB0cmFzIGFnb3RhciBsb3MgcmVpbnRlbnRvcy4gKi9cbiAgcmVhZG9ubHkgZXJyb3I6IFNpZ25hbDxib29sZWFuPjtcbiAgLyoqXG4gICAqIFJlLXN1c2NyaWJlIGxhIGZhY3RvcnkgZGVzZGUgY2VybyAobnVldm8gbGlzdGVuZXIgLyBudWV2YSBsZWN0dXJhKS5cbiAgICogRXMgbG8gcXVlIHJlZ2lzdHJhIGVsIGBQYWdlUmVmcmVzaFNlcnZpY2VgIGNvbW8gaGFuZGxlciBkZSBwdWxsLXRvLXJlZnJlc2gsXG4gICAqIHkgdGFtYmnDqW4gZWwgXCJyZWNvbmVjdGFyIG1hbnVhbFwiIHNpIHVuIGxpc3RlbmVyIG11cmnDsy5cbiAgICovXG4gIHJlbG9hZDogKCkgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBDcmVhIHVuIHN0cmVhbSByZWZyZXNjYWJsZSBhIHBhcnRpciBkZSB1bmEgZmFjdG9yeSBkZSBPYnNlcnZhYmxlLlxuICpcbiAqIERFQkUgbGxhbWFyc2UgZW4gdW4gaW5qZWN0aW9uIGNvbnRleHQgKGZpZWxkIGluaXRpYWxpemVyIG8gY29uc3RydWN0b3IpIOKAlFxuICogdXNhIGB0b1NpZ25hbGAvYHRvT2JzZXJ2YWJsZWAvYGluamVjdGAgaW50ZXJuYW1lbnRlLlxuICpcbiAqIEBwYXJhbSBmYWN0b3J5IC0gRnVuY2nDs24gcXVlIHByb2R1Y2UgZWwgT2JzZXJ2YWJsZSBhIGNvbnN1bWlyLiBFbCBjYWxsZXJcbiAqICAgZGVjaWRlIGVsIG1vZG86IGAoKSA9PiBmcm9tKHN2Yy5nZXRBbGxPbmNlKCkpYCAob25lLXNob3QpIG9cbiAqICAgYCgpID0+IHN2Yy5nZXRBbGwoKWAgKHJlYWwtdGltZSkuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIENvbmZpZ3VyYWNpw7NuIG9wY2lvbmFsIChmYWxsYmFjaywgcmV0cnksIGdhdGUpLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBvbmUtc2hvdCAocmVjb21lbmRhZG8gcG9yIGRlZmVjdG8pXG4gKiBwcml2YXRlIHJlYWRvbmx5IHN0cmVhbSA9IGNyZWF0ZVJlZnJlc2hhYmxlU3RyZWFtKFxuICogICAoKSA9PiBmcm9tKHRoaXMuc3ZjLmdldEFsbE9uY2UoKSksXG4gKiApO1xuICpcbiAqIC8vIHJlYWwtdGltZSAoaW5ib3gpXG4gKiBwcml2YXRlIHJlYWRvbmx5IHN0cmVhbSA9IGNyZWF0ZVJlZnJlc2hhYmxlU3RyZWFtKFxuICogICAoKSA9PiB0aGlzLm5vdGlmcy5nZXRBbGwoNTApLFxuICogKTtcbiAqXG4gKiByZWFkb25seSBpdGVtcyA9IHRoaXMuc3RyZWFtLmRhdGE7XG4gKiByZWFkb25seSBsb2FkaW5nID0gdGhpcy5zdHJlYW0ubG9hZGluZztcbiAqXG4gKiBpb25WaWV3V2lsbEVudGVyKCkge1xuICogICB0aGlzLnBhZ2VSZWZyZXNoLnJlZ2lzdGVyKCgpID0+IHRoaXMuc3RyZWFtLnJlbG9hZCgpKTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVmcmVzaGFibGVTdHJlYW08VD4oXG4gIGZhY3Rvcnk6ICgpID0+IE9ic2VydmFibGU8VD4sXG4gIG9wdGlvbnM/OiBSZWZyZXNoYWJsZVN0cmVhbU9wdGlvbnM8VD5cbik6IFJlZnJlc2hhYmxlU3RyZWFtPFQ+IHtcbiAgY29uc3QgaW5qZWN0b3IgPSBvcHRpb25zPy5pbmplY3RvciA/PyBpbmplY3QoSW5qZWN0b3IpO1xuICBjb25zdCBmYWxsYmFjayA9IChvcHRpb25zPy5mYWxsYmFjayA/PyBudWxsKSBhcyBUIHwgbnVsbDtcbiAgY29uc3QgcmV0cnlDb3VudCA9IG9wdGlvbnM/LnJldHJ5Q291bnQgPz8gNDtcbiAgY29uc3QgcmV0cnlCYXNlRGVsYXlNcyA9IG9wdGlvbnM/LnJldHJ5QmFzZURlbGF5TXMgPz8gNTAwO1xuICBjb25zdCBnYXRlT25GaXJlYmFzZUF1dGggPSBvcHRpb25zPy5nYXRlT25GaXJlYmFzZUF1dGggPz8gdHJ1ZTtcbiAgY29uc3QgYXV0aEdhdGVUaW1lb3V0TXMgPSBvcHRpb25zPy5hdXRoR2F0ZVRpbWVvdXRNcyA/PyAyMDAwMDtcbiAgY29uc3QgZmlyc3RFbWl0VGltZW91dE1zID0gb3B0aW9ucz8uZmlyc3RFbWl0VGltZW91dE1zID8/IDIwMDAwO1xuXG4gIC8vIEZpcmViYXNlU2VydmljZSBlcyBvcGNpb25hbCDigJQgc2luIMOpbCAoYXBwcyBzaW4gRmlyZWJhc2UpIG5vIHNlIGdhdGVhLlxuICBjb25zdCBmaXJlYmFzZSA9IGdhdGVPbkZpcmViYXNlQXV0aCA/IGluamVjdG9yLmdldChGaXJlYmFzZVNlcnZpY2UsIG51bGwpIDogbnVsbDtcblxuICBjb25zdCBfcmVsb2FkID0gc2lnbmFsKDApO1xuICBjb25zdCBfbG9hZGluZyA9IHNpZ25hbCh0cnVlKTtcbiAgY29uc3QgX2Vycm9yID0gc2lnbmFsKGZhbHNlKTtcblxuICAvLyBHYXRlIGRlIEZpcmViYXNlIEF1dGg6IGVsIHN0cmVhbSBubyBhYnJlIGxhIHByaW1lcmEgc3VzY3JpcGNpw7NuIGhhc3RhIHF1ZVxuICAvLyBsYSBzZXNpw7NuIGVzdMOpIGNvbmZpcm1hZGEuIGByYWNlYCBjb24gdW4gYHRpbWVyYCBkZSBzZWd1cmlkYWQg4oCUIHNpIGxhXG4gIC8vIHNlc2nDs24gTlVOQ0Egc2UgZXN0YWJsZWNlICh0b2tlbiBpbnbDoWxpZG8sIHNpZ25JbldpdGhGaXJlYmFzZSBmYWxsw7MpLCBlbFxuICAvLyBnYXRlIGlndWFsIHNlIGxpYmVyYSB0cmFzIGBhdXRoR2F0ZVRpbWVvdXRNc2AgeSBsYSBmYWN0b3J5IHByb2NlZGU6IHNpIG5vXG4gIC8vIGhheSBwZXJtaXNvIHRlcm1pbmFyw6EgZW4gZXN0YWRvIGBlcnJvcmAsIGphbcOhcyBlbiBza2VsZXRvbiBpbmZpbml0by5cbiAgY29uc3QgYXV0aEdhdGUkOiBPYnNlcnZhYmxlPHVua25vd24+ID0gZmlyZWJhc2VcbiAgICA/IHJhY2UoZmlyZWJhc2UuZmlyZWJhc2VBdXRoUmVhZHkkLCB0aW1lcihhdXRoR2F0ZVRpbWVvdXRNcykpLnBpcGUodGFrZSgxKSlcbiAgICA6IG9mKHRydWUpO1xuXG4gIGNvbnN0IGRhdGEgPSB0b1NpZ25hbChcbiAgICB0b09ic2VydmFibGUoX3JlbG9hZCwgeyBpbmplY3RvciB9KS5waXBlKFxuICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgX2xvYWRpbmcuc2V0KHRydWUpO1xuICAgICAgICBfZXJyb3Iuc2V0KGZhbHNlKTtcbiAgICAgIH0pLFxuICAgICAgLy8gRXNwZXJhciBhIEZpcmViYXNlIEF1dGggbGlzdG8gYW50ZXMgZGUgY2FkYSAocmUpc3VzY3JpcGNpw7NuLiBDb21vXG4gICAgICAvLyBgZmlyZWJhc2VBdXRoUmVhZHkkYCBjb21wbGV0YSB0cmFzIGxhIHByaW1lcmEgZW1pc2nDs24sIGxhcyByZWxvYWRzXG4gICAgICAvLyBwb3N0ZXJpb3JlcyByZXN1ZWx2ZW4gZWwgZ2F0ZSBkZSBpbm1lZGlhdG8gKGF1dGggeWEgZXN0w6EgbGlzdG8pLlxuICAgICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICAgIGF1dGhHYXRlJC5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICAgICAgZmFjdG9yeSgpLnBpcGUoXG4gICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgX2xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICBfZXJyb3Iuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIC8vIEJhY2tvZmYgY29ydG8gZXhwb25lbmNpYWwgYWNvdGFkbyDigJQgc29sbyByZWQgZGUgc2VndXJpZGFkIHBhcmFcbiAgICAgICAgICAgICAgLy8gcmVjb25leGlvbmVzIHRyYW5zaXRvcmlhcywgTk8gcGFyYSBjdWJyaXIgY29sZCBzdGFydC5cbiAgICAgICAgICAgICAgcmV0cnkoe1xuICAgICAgICAgICAgICAgIGNvdW50OiByZXRyeUNvdW50LFxuICAgICAgICAgICAgICAgIGRlbGF5OiAoX2VyciwgYXR0ZW1wdCkgPT5cbiAgICAgICAgICAgICAgICAgIHRpbWVyKE1hdGgubWluKHJldHJ5QmFzZURlbGF5TXMgKiAyICoqIChhdHRlbXB0IC0gMSksIDQwMDApKSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIC8vIFRlY2hvIGFic29sdXRvIHBhcmEgbGEgUFJJTUVSQSBlbWlzacOzbi4gU2kgbGEgZmFjdG9yeSBubyBlbWl0ZVxuICAgICAgICAgICAgICAvLyBuaSB2YWxvciBuaSBlcnJvciAoc2VydmljaW8gbnVuY2EgaW5pY2lhbGl6YWRvIOKGkiBgRU1QVFlgIOKGklxuICAgICAgICAgICAgICAvLyBzaWxlbmNpbyksIGB0aW1lb3V0YCBkaXNwYXJhIHVuIGVycm9yIOKGkiBgY2F0Y2hFcnJvcmAg4oaSIGVzdGFkb1xuICAgICAgICAgICAgICAvLyBgZXJyb3JgLiBOdW5jYSBza2VsZXRvbiBwZXJwZXR1by4gVmEgREVTUFXDiVMgZGUgYHJldHJ5YCBwYXJhXG4gICAgICAgICAgICAgIC8vIHF1ZSBjdWVudGUgZWwgdGllbXBvIHRvdGFsLCBubyBwb3IgaW50ZW50by5cbiAgICAgICAgICAgICAgdGltZW91dCh7IGZpcnN0OiBmaXJzdEVtaXRUaW1lb3V0TXMgfSksXG4gICAgICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4ge1xuICAgICAgICAgICAgICAgIF9sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgX2Vycm9yLnNldCh0cnVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoZmFsbGJhY2sgYXMgVCk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKSxcbiAgICB7IGluaXRpYWxWYWx1ZTogbnVsbCBhcyBUIHwgbnVsbCwgaW5qZWN0b3IgfVxuICApO1xuXG4gIHJldHVybiB7XG4gICAgZGF0YSxcbiAgICBsb2FkaW5nOiBfbG9hZGluZy5hc1JlYWRvbmx5KCksXG4gICAgZXJyb3I6IF9lcnJvci5hc1JlYWRvbmx5KCksXG4gICAgcmVsb2FkOiAoKSA9PiBfcmVsb2FkLnVwZGF0ZShuID0+IG4gKyAxKSxcbiAgfTtcbn1cbiJdfQ==
|