valtech-components 2.0.819 → 2.0.821
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/fesm2022/valtech-components.mjs +1 -1
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/package.json +1 -1
- package/esm2022/lib/components/atoms/avatar/avatar.component.mjs +0 -94
- package/esm2022/lib/components/atoms/avatar/types.mjs +0 -2
- package/esm2022/lib/components/atoms/box/box.component.mjs +0 -88
- package/esm2022/lib/components/atoms/box/types.mjs +0 -2
- package/esm2022/lib/components/atoms/button/button.component.mjs +0 -174
- package/esm2022/lib/components/atoms/button/factory.mjs +0 -217
- package/esm2022/lib/components/atoms/container/container.component.mjs +0 -52
- package/esm2022/lib/components/atoms/container/types.mjs +0 -2
- package/esm2022/lib/components/atoms/countdown/countdown.component.mjs +0 -340
- package/esm2022/lib/components/atoms/countdown/types.mjs +0 -27
- package/esm2022/lib/components/atoms/display/display.component.mjs +0 -51
- package/esm2022/lib/components/atoms/display/types.mjs +0 -2
- package/esm2022/lib/components/atoms/divider/divider.component.mjs +0 -27
- package/esm2022/lib/components/atoms/divider/types.mjs +0 -2
- package/esm2022/lib/components/atoms/fab/fab.component.mjs +0 -190
- package/esm2022/lib/components/atoms/fab/types.mjs +0 -2
- package/esm2022/lib/components/atoms/glass/glass.component.mjs +0 -125
- package/esm2022/lib/components/atoms/glass/types.mjs +0 -2
- package/esm2022/lib/components/atoms/glow/glow.component.mjs +0 -95
- package/esm2022/lib/components/atoms/glow/types.mjs +0 -2
- package/esm2022/lib/components/atoms/horizontal-scroll/horizontal-scroll.component.mjs +0 -82
- package/esm2022/lib/components/atoms/horizontal-scroll/types.mjs +0 -2
- package/esm2022/lib/components/atoms/href/href.component.mjs +0 -62
- package/esm2022/lib/components/atoms/href/types.mjs +0 -2
- package/esm2022/lib/components/atoms/icon/icon.component.mjs +0 -29
- package/esm2022/lib/components/atoms/icon/types.mjs +0 -2
- package/esm2022/lib/components/atoms/image/image.component.mjs +0 -507
- package/esm2022/lib/components/atoms/image/types.mjs +0 -2
- package/esm2022/lib/components/atoms/pattern/motifs.mjs +0 -147
- package/esm2022/lib/components/atoms/pattern/pattern.component.mjs +0 -178
- package/esm2022/lib/components/atoms/pattern/types.mjs +0 -2
- package/esm2022/lib/components/atoms/price-tag/price-tag.component.mjs +0 -235
- package/esm2022/lib/components/atoms/price-tag/types.mjs +0 -15
- package/esm2022/lib/components/atoms/progress-bar/progress-bar.component.mjs +0 -91
- package/esm2022/lib/components/atoms/progress-bar/types.mjs +0 -2
- package/esm2022/lib/components/atoms/progress-ring/progress-ring.component.mjs +0 -149
- package/esm2022/lib/components/atoms/progress-ring/types.mjs +0 -2
- package/esm2022/lib/components/atoms/qr-code/qr-code.component.mjs +0 -394
- package/esm2022/lib/components/atoms/qr-code/types.mjs +0 -2
- package/esm2022/lib/components/atoms/rights-footer/rights-footer.component.mjs +0 -108
- package/esm2022/lib/components/atoms/rights-footer/types.mjs +0 -2
- package/esm2022/lib/components/atoms/skeleton/skeleton.component.mjs +0 -193
- package/esm2022/lib/components/atoms/skeleton/types.mjs +0 -13
- package/esm2022/lib/components/atoms/text/text.component.mjs +0 -132
- package/esm2022/lib/components/atoms/text/types.mjs +0 -2
- package/esm2022/lib/components/atoms/title/title.component.mjs +0 -68
- package/esm2022/lib/components/atoms/title/types.mjs +0 -22
- package/esm2022/lib/components/atoms/user-avatar/types.mjs +0 -2
- package/esm2022/lib/components/atoms/user-avatar/user-avatar.component.mjs +0 -209
- package/esm2022/lib/components/molecules/accordion/accordion.component.mjs +0 -120
- package/esm2022/lib/components/molecules/accordion/types.mjs +0 -2
- package/esm2022/lib/components/molecules/action-card/action-card.component.mjs +0 -273
- package/esm2022/lib/components/molecules/action-card/types.mjs +0 -11
- package/esm2022/lib/components/molecules/action-header/action-header.component.mjs +0 -55
- package/esm2022/lib/components/molecules/action-header/types.mjs +0 -2
- package/esm2022/lib/components/molecules/ad-slot/ad-slot.component.mjs +0 -274
- package/esm2022/lib/components/molecules/alert-box/alert-box.component.mjs +0 -119
- package/esm2022/lib/components/molecules/alert-box/types.mjs +0 -2
- package/esm2022/lib/components/molecules/breadcrumb/breadcrumb.component.mjs +0 -130
- package/esm2022/lib/components/molecules/breadcrumb/types.mjs +0 -2
- package/esm2022/lib/components/molecules/button-group/button-group.component.mjs +0 -63
- package/esm2022/lib/components/molecules/button-group/types.mjs +0 -2
- package/esm2022/lib/components/molecules/card/card.component.mjs +0 -450
- package/esm2022/lib/components/molecules/card/types.mjs +0 -16
- package/esm2022/lib/components/molecules/check-input/check-input.component.mjs +0 -82
- package/esm2022/lib/components/molecules/checkbox-radio-input/checkbox-radio-input.component.mjs +0 -79
- package/esm2022/lib/components/molecules/chip-group/chip-group.component.mjs +0 -166
- package/esm2022/lib/components/molecules/chip-group/types.mjs +0 -2
- package/esm2022/lib/components/molecules/code-display/code-display.component.mjs +0 -115
- package/esm2022/lib/components/molecules/code-display/types.mjs +0 -2
- package/esm2022/lib/components/molecules/command-display/command-display.component.mjs +0 -49
- package/esm2022/lib/components/molecules/command-display/types.mjs +0 -2
- package/esm2022/lib/components/molecules/comment/comment.component.mjs +0 -618
- package/esm2022/lib/components/molecules/comment/types.mjs +0 -2
- package/esm2022/lib/components/molecules/comment-input/comment-input.component.mjs +0 -41
- package/esm2022/lib/components/molecules/comment-input/types.mjs +0 -2
- package/esm2022/lib/components/molecules/content-loader/content-loader.component.mjs +0 -42
- package/esm2022/lib/components/molecules/content-loader/types.mjs +0 -2
- package/esm2022/lib/components/molecules/content-reaction/content-reaction.component.mjs +0 -210
- package/esm2022/lib/components/molecules/content-reaction/types.mjs +0 -2
- package/esm2022/lib/components/molecules/currency-input/currency-input.component.mjs +0 -347
- package/esm2022/lib/components/molecules/currency-input/types.mjs +0 -18
- package/esm2022/lib/components/molecules/date-input/date-input.component.mjs +0 -148
- package/esm2022/lib/components/molecules/date-input/types.mjs +0 -2
- package/esm2022/lib/components/molecules/date-range-input/date-range-input.component.mjs +0 -416
- package/esm2022/lib/components/molecules/date-range-input/types.mjs +0 -2
- package/esm2022/lib/components/molecules/docs-api-table/docs-api-table.component.mjs +0 -222
- package/esm2022/lib/components/molecules/docs-api-table/types.mjs +0 -11
- package/esm2022/lib/components/molecules/docs-breadcrumb/docs-breadcrumb.component.mjs +0 -144
- package/esm2022/lib/components/molecules/docs-breadcrumb/types.mjs +0 -2
- package/esm2022/lib/components/molecules/docs-callout/docs-callout.component.mjs +0 -60
- package/esm2022/lib/components/molecules/docs-code-example/docs-code-example.component.mjs +0 -249
- package/esm2022/lib/components/molecules/docs-code-example/types.mjs +0 -2
- package/esm2022/lib/components/molecules/docs-nav-links/docs-nav-links.component.mjs +0 -140
- package/esm2022/lib/components/molecules/docs-nav-links/types.mjs +0 -2
- package/esm2022/lib/components/molecules/docs-search/docs-search.component.mjs +0 -268
- package/esm2022/lib/components/molecules/docs-search/types.mjs +0 -2
- package/esm2022/lib/components/molecules/docs-section/docs-section.component.mjs +0 -85
- package/esm2022/lib/components/molecules/docs-section/types.mjs +0 -2
- package/esm2022/lib/components/molecules/email-input/email-input.component.mjs +0 -68
- package/esm2022/lib/components/molecules/expandable-text/expandable-text.component.mjs +0 -77
- package/esm2022/lib/components/molecules/expandable-text/types.mjs +0 -2
- package/esm2022/lib/components/molecules/features-list/features-list.component.mjs +0 -179
- package/esm2022/lib/components/molecules/features-list/types.mjs +0 -11
- package/esm2022/lib/components/molecules/feedback-form/feedback-form.component.mjs +0 -354
- package/esm2022/lib/components/molecules/feedback-form/types.mjs +0 -2
- package/esm2022/lib/components/molecules/file-input/file-input.component.mjs +0 -90
- package/esm2022/lib/components/molecules/file-input/types.mjs +0 -2
- package/esm2022/lib/components/molecules/footer-links/footer-links.component.mjs +0 -391
- package/esm2022/lib/components/molecules/footer-links/types.mjs +0 -2
- package/esm2022/lib/components/molecules/glow-card/glow-card.component.mjs +0 -314
- package/esm2022/lib/components/molecules/glow-card/types.mjs +0 -11
- package/esm2022/lib/components/molecules/hint/hint.component.mjs +0 -90
- package/esm2022/lib/components/molecules/hour-input/hour-input.component.mjs +0 -28
- package/esm2022/lib/components/molecules/image-crop/image-crop.component.mjs +0 -174
- package/esm2022/lib/components/molecules/image-crop/index.mjs +0 -2
- package/esm2022/lib/components/molecules/info/info.component.mjs +0 -49
- package/esm2022/lib/components/molecules/info/types.mjs +0 -2
- package/esm2022/lib/components/molecules/language-selector/language-selector.component.mjs +0 -221
- package/esm2022/lib/components/molecules/language-selector/types.mjs +0 -2
- package/esm2022/lib/components/molecules/layered-card/layered-card.component.mjs +0 -104
- package/esm2022/lib/components/molecules/layered-card/types.mjs +0 -2
- package/esm2022/lib/components/molecules/link/link.component.mjs +0 -64
- package/esm2022/lib/components/molecules/link/types.mjs +0 -2
- package/esm2022/lib/components/molecules/linked-providers/linked-providers.component.mjs +0 -236
- package/esm2022/lib/components/molecules/linked-providers/types.mjs +0 -27
- package/esm2022/lib/components/molecules/links-accordion/links-accordion.component.mjs +0 -203
- package/esm2022/lib/components/molecules/links-accordion/types.mjs +0 -2
- package/esm2022/lib/components/molecules/links-cake/links-cake.component.mjs +0 -51
- package/esm2022/lib/components/molecules/links-cake/types.mjs +0 -2
- package/esm2022/lib/components/molecules/multi-select-search/multi-select-search.component.mjs +0 -488
- package/esm2022/lib/components/molecules/notes-box/notes-box.component.mjs +0 -92
- package/esm2022/lib/components/molecules/notes-box/types.mjs +0 -2
- package/esm2022/lib/components/molecules/number-from-to/number-from-to.component.mjs +0 -143
- package/esm2022/lib/components/molecules/number-from-to/types.mjs +0 -2
- package/esm2022/lib/components/molecules/number-input/number-input.component.mjs +0 -34
- package/esm2022/lib/components/molecules/number-stepper/number-stepper.component.mjs +0 -379
- package/esm2022/lib/components/molecules/number-stepper/types.mjs +0 -2
- package/esm2022/lib/components/molecules/page-links/page-links.component.mjs +0 -150
- package/esm2022/lib/components/molecules/page-links/types.mjs +0 -2
- package/esm2022/lib/components/molecules/pagination/pagination.component.mjs +0 -253
- package/esm2022/lib/components/molecules/pagination/types.mjs +0 -2
- package/esm2022/lib/components/molecules/password-input/password-input.component.mjs +0 -93
- package/esm2022/lib/components/molecules/phone-input/phone-input.component.mjs +0 -365
- package/esm2022/lib/components/molecules/phone-input/types.mjs +0 -19
- package/esm2022/lib/components/molecules/pill/pill.component.mjs +0 -202
- package/esm2022/lib/components/molecules/pill/types.mjs +0 -2
- package/esm2022/lib/components/molecules/pin-input/pin-input.component.mjs +0 -78
- package/esm2022/lib/components/molecules/pin-input/types.mjs +0 -2
- package/esm2022/lib/components/molecules/plain-code-box/plain-code-box.component.mjs +0 -82
- package/esm2022/lib/components/molecules/plain-code-box/types.mjs +0 -2
- package/esm2022/lib/components/molecules/popover-selector/popover-selector.component.mjs +0 -188
- package/esm2022/lib/components/molecules/popover-selector/types.mjs +0 -2
- package/esm2022/lib/components/molecules/progress-status/progress-status.component.mjs +0 -105
- package/esm2022/lib/components/molecules/progress-status/types.mjs +0 -2
- package/esm2022/lib/components/molecules/prompter/prompter.component.mjs +0 -85
- package/esm2022/lib/components/molecules/prompter/types.mjs +0 -2
- package/esm2022/lib/components/molecules/quote-box/quote-box.component.mjs +0 -155
- package/esm2022/lib/components/molecules/radio-input/radio-input.component.mjs +0 -52
- package/esm2022/lib/components/molecules/range-input/range-input.component.mjs +0 -127
- package/esm2022/lib/components/molecules/range-input/types.mjs +0 -2
- package/esm2022/lib/components/molecules/rating/rating.component.mjs +0 -166
- package/esm2022/lib/components/molecules/rating/types.mjs +0 -2
- package/esm2022/lib/components/molecules/refresher/refresher.component.mjs +0 -275
- package/esm2022/lib/components/molecules/refresher/types.mjs +0 -15
- package/esm2022/lib/components/molecules/searchbar/searchbar.component.mjs +0 -127
- package/esm2022/lib/components/molecules/searchbar/types.mjs +0 -2
- package/esm2022/lib/components/molecules/segment-control/segment-control.component.mjs +0 -129
- package/esm2022/lib/components/molecules/segment-control/types.mjs +0 -2
- package/esm2022/lib/components/molecules/select-input/select-input.component.mjs +0 -148
- package/esm2022/lib/components/molecules/select-search/select-search.component.mjs +0 -434
- package/esm2022/lib/components/molecules/share-buttons/share-buttons.component.mjs +0 -274
- package/esm2022/lib/components/molecules/share-buttons/types.mjs +0 -88
- package/esm2022/lib/components/molecules/stats-card/stats-card.component.mjs +0 -211
- package/esm2022/lib/components/molecules/stats-card/types.mjs +0 -2
- package/esm2022/lib/components/molecules/stepper/stepper.component.mjs +0 -242
- package/esm2022/lib/components/molecules/stepper/types.mjs +0 -2
- package/esm2022/lib/components/molecules/swipe-carousel/swipe-carousel.component.mjs +0 -206
- package/esm2022/lib/components/molecules/swipe-carousel/types.mjs +0 -2
- package/esm2022/lib/components/molecules/tabs/tabs.component.mjs +0 -139
- package/esm2022/lib/components/molecules/tabs/types.mjs +0 -2
- package/esm2022/lib/components/molecules/testimonial-card/testimonial-card.component.mjs +0 -138
- package/esm2022/lib/components/molecules/testimonial-card/types.mjs +0 -2
- package/esm2022/lib/components/molecules/text-input/text-input.component.mjs +0 -77
- package/esm2022/lib/components/molecules/textarea-input/textarea-input.component.mjs +0 -213
- package/esm2022/lib/components/molecules/textarea-input/types.mjs +0 -2
- package/esm2022/lib/components/molecules/timeline/timeline.component.mjs +0 -140
- package/esm2022/lib/components/molecules/timeline/types.mjs +0 -2
- package/esm2022/lib/components/molecules/title-block/title-block.component.mjs +0 -102
- package/esm2022/lib/components/molecules/title-block/types.mjs +0 -2
- package/esm2022/lib/components/molecules/toggle-input/toggle-input.component.mjs +0 -93
- package/esm2022/lib/components/molecules/toggle-input/types.mjs +0 -2
- package/esm2022/lib/components/molecules/update-banner/types.mjs +0 -42
- package/esm2022/lib/components/molecules/update-banner/update-banner.component.mjs +0 -243
- package/esm2022/lib/components/molecules/username-input/types.mjs +0 -2
- package/esm2022/lib/components/molecules/username-input/username-input.component.mjs +0 -295
- package/esm2022/lib/components/organisms/article/article.component.mjs +0 -578
- package/esm2022/lib/components/organisms/article/types.mjs +0 -183
- package/esm2022/lib/components/organisms/avatar-upload/avatar-upload.component.mjs +0 -325
- package/esm2022/lib/components/organisms/avatar-upload/types.mjs +0 -15
- package/esm2022/lib/components/organisms/banner/banner.component.mjs +0 -111
- package/esm2022/lib/components/organisms/banner/types.mjs +0 -2
- package/esm2022/lib/components/organisms/bottom-nav/bottom-nav.component.mjs +0 -383
- package/esm2022/lib/components/organisms/bottom-nav/types.mjs +0 -19
- package/esm2022/lib/components/organisms/cards-carousel/cards-carousel.component.mjs +0 -108
- package/esm2022/lib/components/organisms/cards-carousel/types.mjs +0 -2
- package/esm2022/lib/components/organisms/comment-section/comment-section.component.mjs +0 -537
- package/esm2022/lib/components/organisms/comment-section/types.mjs +0 -2
- package/esm2022/lib/components/organisms/company-footer/company-footer.component.mjs +0 -76
- package/esm2022/lib/components/organisms/company-footer/types.mjs +0 -2
- package/esm2022/lib/components/organisms/cookie-banner/cookie-banner.component.mjs +0 -199
- package/esm2022/lib/components/organisms/cookie-banner/types.mjs +0 -2
- package/esm2022/lib/components/organisms/data-table/data-table.component.mjs +0 -1081
- package/esm2022/lib/components/organisms/data-table/types.mjs +0 -13
- package/esm2022/lib/components/organisms/docs-sidebar/docs-sidebar.component.mjs +0 -290
- package/esm2022/lib/components/organisms/docs-sidebar/types.mjs +0 -2
- package/esm2022/lib/components/organisms/docs-toc/docs-toc.component.mjs +0 -307
- package/esm2022/lib/components/organisms/docs-toc/types.mjs +0 -2
- package/esm2022/lib/components/organisms/faq/faq.component.mjs +0 -176
- package/esm2022/lib/components/organisms/faq/types.mjs +0 -9
- package/esm2022/lib/components/organisms/footer/footer.component.mjs +0 -73
- package/esm2022/lib/components/organisms/footer/types.mjs +0 -2
- package/esm2022/lib/components/organisms/form/factory.mjs +0 -29
- package/esm2022/lib/components/organisms/form/form-footer/form-footer.component.mjs +0 -83
- package/esm2022/lib/components/organisms/form/form.component.mjs +0 -510
- package/esm2022/lib/components/organisms/fun-header/fun-header.component.mjs +0 -225
- package/esm2022/lib/components/organisms/fun-header/types.mjs +0 -2
- package/esm2022/lib/components/organisms/header/header.component.mjs +0 -51
- package/esm2022/lib/components/organisms/header/types.mjs +0 -2
- package/esm2022/lib/components/organisms/infinite-list/infinite-list.component.mjs +0 -620
- package/esm2022/lib/components/organisms/infinite-list/types.mjs +0 -15
- package/esm2022/lib/components/organisms/item-list/item-list.component.mjs +0 -418
- package/esm2022/lib/components/organisms/item-list/types.mjs +0 -2
- package/esm2022/lib/components/organisms/login/login.component.mjs +0 -735
- package/esm2022/lib/components/organisms/login/types.mjs +0 -11
- package/esm2022/lib/components/organisms/menu/menu.component.mjs +0 -206
- package/esm2022/lib/components/organisms/menu/types.mjs +0 -2
- package/esm2022/lib/components/organisms/no-content/no-content.component.mjs +0 -66
- package/esm2022/lib/components/organisms/no-content/types.mjs +0 -2
- package/esm2022/lib/components/organisms/rotating-text/rotating-text.component.mjs +0 -180
- package/esm2022/lib/components/organisms/rotating-text/types.mjs +0 -2
- package/esm2022/lib/components/organisms/skeleton-layout/skeleton-layout.component.mjs +0 -423
- package/esm2022/lib/components/organisms/skeleton-layout/types.mjs +0 -10
- package/esm2022/lib/components/organisms/tabbed-content/tabbed-content.component.mjs +0 -170
- package/esm2022/lib/components/organisms/tabbed-content/types.mjs +0 -2
- package/esm2022/lib/components/organisms/terminal-404/terminal-404.component.mjs +0 -214
- package/esm2022/lib/components/organisms/terminal-404/types.mjs +0 -2
- package/esm2022/lib/components/organisms/testimonial-carousel/testimonial-carousel.component.mjs +0 -72
- package/esm2022/lib/components/organisms/testimonial-carousel/types.mjs +0 -2
- package/esm2022/lib/components/organisms/toolbar/toolbar.component.mjs +0 -255
- package/esm2022/lib/components/organisms/toolbar/types.mjs +0 -2
- package/esm2022/lib/components/organisms/wizard/types.mjs +0 -10
- package/esm2022/lib/components/organisms/wizard/wizard-footer/wizard-footer.component.mjs +0 -111
- package/esm2022/lib/components/organisms/wizard/wizard.component.mjs +0 -161
- package/esm2022/lib/components/templates/auth-background/auth-background.component.mjs +0 -164
- package/esm2022/lib/components/templates/auth-background/types.mjs +0 -2
- package/esm2022/lib/components/templates/docs-layout/docs-layout.component.mjs +0 -221
- package/esm2022/lib/components/templates/docs-layout/types.mjs +0 -2
- package/esm2022/lib/components/templates/docs-page/docs-page.component.mjs +0 -251
- package/esm2022/lib/components/templates/docs-page/types.mjs +0 -2
- package/esm2022/lib/components/templates/docs-shell/docs-shell.component.mjs +0 -376
- package/esm2022/lib/components/templates/docs-shell/types.mjs +0 -2
- package/esm2022/lib/components/templates/maintenance-page/maintenance-page.component.mjs +0 -153
- package/esm2022/lib/components/templates/maintenance-page/types.mjs +0 -2
- package/esm2022/lib/components/templates/page-content/page-content.component.mjs +0 -193
- package/esm2022/lib/components/templates/page-content/types.mjs +0 -2
- package/esm2022/lib/components/templates/page-template/page-template.component.mjs +0 -188
- package/esm2022/lib/components/templates/page-template/types.mjs +0 -2
- package/esm2022/lib/components/templates/page-wrapper/page-wrapper.component.mjs +0 -238
- package/esm2022/lib/components/templates/page-wrapper/types.mjs +0 -2
- package/esm2022/lib/components/templates/simple/simple.component.mjs +0 -123
- package/esm2022/lib/components/templates/simple/types.mjs +0 -2
- package/esm2022/lib/components/types.mjs +0 -60
- package/esm2022/lib/config/company-footer.config.mjs +0 -125
- package/esm2022/lib/config/index.mjs +0 -5
- package/esm2022/lib/services/ads/ads-loader.service.mjs +0 -120
- package/esm2022/lib/services/ads/ads.service.mjs +0 -236
- package/esm2022/lib/services/ads/config.mjs +0 -81
- package/esm2022/lib/services/ads/index.mjs +0 -13
- package/esm2022/lib/services/ads/types.mjs +0 -23
- package/esm2022/lib/services/app-config/app-config.service.mjs +0 -209
- package/esm2022/lib/services/app-config/config.mjs +0 -47
- package/esm2022/lib/services/app-config/index.mjs +0 -48
- package/esm2022/lib/services/app-config/types.mjs +0 -13
- package/esm2022/lib/services/app-config/version.mjs +0 -85
- package/esm2022/lib/services/app-version/app-version.service.mjs +0 -187
- package/esm2022/lib/services/app-version/config.mjs +0 -42
- package/esm2022/lib/services/app-version/index.mjs +0 -24
- package/esm2022/lib/services/app-version/types.mjs +0 -17
- package/esm2022/lib/services/auth/auth-state.service.mjs +0 -207
- package/esm2022/lib/services/auth/auth.service.mjs +0 -1142
- package/esm2022/lib/services/auth/config.mjs +0 -75
- package/esm2022/lib/services/auth/device.service.mjs +0 -135
- package/esm2022/lib/services/auth/guards.mjs +0 -199
- package/esm2022/lib/services/auth/handoff.service.mjs +0 -152
- package/esm2022/lib/services/auth/index.mjs +0 -98
- package/esm2022/lib/services/auth/interceptor.mjs +0 -122
- package/esm2022/lib/services/auth/notification-action.service.mjs +0 -117
- package/esm2022/lib/services/auth/oauth-callback.component.mjs +0 -169
- package/esm2022/lib/services/auth/oauth.service.mjs +0 -322
- package/esm2022/lib/services/auth/org-switch.service.mjs +0 -137
- package/esm2022/lib/services/auth/session.service.mjs +0 -78
- package/esm2022/lib/services/auth/storage.service.mjs +0 -152
- package/esm2022/lib/services/auth/sync.service.mjs +0 -149
- package/esm2022/lib/services/auth/token.service.mjs +0 -122
- package/esm2022/lib/services/auth/types.mjs +0 -30
- package/esm2022/lib/services/confirmation-dialog/confirmation-dialog.service.mjs +0 -189
- package/esm2022/lib/services/confirmation-dialog/types.mjs +0 -14
- package/esm2022/lib/services/content/content-types/blog.mjs +0 -275
- package/esm2022/lib/services/content/content-types/documentation.mjs +0 -303
- package/esm2022/lib/services/content/content-types/news.mjs +0 -277
- package/esm2022/lib/services/content/index.mjs +0 -51
- package/esm2022/lib/services/content/transformer.mjs +0 -265
- package/esm2022/lib/services/content/types.mjs +0 -41
- package/esm2022/lib/services/docs/docs-navigation.service.mjs +0 -91
- package/esm2022/lib/services/donation/config.mjs +0 -41
- package/esm2022/lib/services/donation/donation.service.mjs +0 -92
- package/esm2022/lib/services/donation/index.mjs +0 -25
- package/esm2022/lib/services/donation/types.mjs +0 -10
- package/esm2022/lib/services/download.service.mjs +0 -80
- package/esm2022/lib/services/feedback/config.mjs +0 -49
- package/esm2022/lib/services/feedback/feedback.service.mjs +0 -296
- package/esm2022/lib/services/feedback/index.mjs +0 -44
- package/esm2022/lib/services/feedback/types.mjs +0 -30
- package/esm2022/lib/services/firebase/analytics-error-handler.mjs +0 -141
- package/esm2022/lib/services/firebase/analytics-router-tracker.mjs +0 -99
- package/esm2022/lib/services/firebase/analytics-types.mjs +0 -7
- package/esm2022/lib/services/firebase/analytics.service.mjs +0 -620
- package/esm2022/lib/services/firebase/config.mjs +0 -131
- package/esm2022/lib/services/firebase/firebase.service.mjs +0 -506
- package/esm2022/lib/services/firebase/firestore-collection.mjs +0 -301
- package/esm2022/lib/services/firebase/firestore.service.mjs +0 -571
- package/esm2022/lib/services/firebase/index.mjs +0 -56
- package/esm2022/lib/services/firebase/messaging.service.mjs +0 -721
- package/esm2022/lib/services/firebase/notifications.service.mjs +0 -274
- package/esm2022/lib/services/firebase/shared-config.mjs +0 -147
- package/esm2022/lib/services/firebase/storage.service.mjs +0 -484
- package/esm2022/lib/services/firebase/types.mjs +0 -18
- package/esm2022/lib/services/firebase/utils/path-builder.mjs +0 -195
- package/esm2022/lib/services/firebase/utils/query-builder.mjs +0 -302
- package/esm2022/lib/services/i18n/config.mjs +0 -128
- package/esm2022/lib/services/i18n/default-content.mjs +0 -577
- package/esm2022/lib/services/i18n/i18n.service.mjs +0 -217
- package/esm2022/lib/services/i18n/index.mjs +0 -13
- package/esm2022/lib/services/i18n/input-i18n.helper.mjs +0 -97
- package/esm2022/lib/services/i18n/translate.pipe.mjs +0 -50
- package/esm2022/lib/services/i18n/types.mjs +0 -15
- package/esm2022/lib/services/icons.service.mjs +0 -83
- package/esm2022/lib/services/image/image.service.mjs +0 -244
- package/esm2022/lib/services/image/index.mjs +0 -3
- package/esm2022/lib/services/image/types.mjs +0 -13
- package/esm2022/lib/services/in-app-browser.service.mjs +0 -35
- package/esm2022/lib/services/legal-link/legal-link.service.mjs +0 -85
- package/esm2022/lib/services/link-processor.service.mjs +0 -259
- package/esm2022/lib/services/local-storage.service.mjs +0 -37
- package/esm2022/lib/services/locale.service.mjs +0 -75
- package/esm2022/lib/services/markdown-article/legal-content.service.mjs +0 -107
- package/esm2022/lib/services/markdown-article/markdown-article-parser.mjs +0 -302
- package/esm2022/lib/services/markdown-article/markdown-article-parser.service.mjs +0 -20
- package/esm2022/lib/services/meta/index.mjs +0 -3
- package/esm2022/lib/services/meta/meta.service.mjs +0 -63
- package/esm2022/lib/services/meta/types.mjs +0 -2
- package/esm2022/lib/services/modal/modal.service.mjs +0 -220
- package/esm2022/lib/services/modal/simple-modal-content.component.mjs +0 -133
- package/esm2022/lib/services/modal/types.mjs +0 -26
- package/esm2022/lib/services/navigation/index.mjs +0 -3
- package/esm2022/lib/services/navigation/navigation.service.mjs +0 -216
- package/esm2022/lib/services/navigation/types.mjs +0 -16
- package/esm2022/lib/services/page-refresh/page-refresh.service.mjs +0 -104
- package/esm2022/lib/services/pagination/index.mjs +0 -5
- package/esm2022/lib/services/pagination/pagination.service.mjs +0 -218
- package/esm2022/lib/services/pagination/types.mjs +0 -14
- package/esm2022/lib/services/preferences/index.mjs +0 -3
- package/esm2022/lib/services/preferences/preferences.service.mjs +0 -198
- package/esm2022/lib/services/preferences/preferences.types.mjs +0 -7
- package/esm2022/lib/services/presets/config.mjs +0 -46
- package/esm2022/lib/services/presets/index.mjs +0 -5
- package/esm2022/lib/services/presets/preset.service.mjs +0 -104
- package/esm2022/lib/services/presets/types.mjs +0 -2
- package/esm2022/lib/services/qr-generator/qr-generator.service.mjs +0 -341
- package/esm2022/lib/services/qr-generator/types.mjs +0 -46
- package/esm2022/lib/services/refreshable-stream/index.mjs +0 -8
- package/esm2022/lib/services/refreshable-stream/refreshable-stream.mjs +0 -112
- package/esm2022/lib/services/skeleton/config.mjs +0 -79
- package/esm2022/lib/services/skeleton/directives/loading.directive.mjs +0 -215
- package/esm2022/lib/services/skeleton/index.mjs +0 -16
- package/esm2022/lib/services/skeleton/skeleton.service.mjs +0 -198
- package/esm2022/lib/services/skeleton/templates/detail-skeleton.component.mjs +0 -223
- package/esm2022/lib/services/skeleton/templates/form-skeleton.component.mjs +0 -127
- package/esm2022/lib/services/skeleton/templates/grid-skeleton.component.mjs +0 -154
- package/esm2022/lib/services/skeleton/templates/list-skeleton.component.mjs +0 -110
- package/esm2022/lib/services/skeleton/templates/profile-skeleton.component.mjs +0 -207
- package/esm2022/lib/services/skeleton/templates/table-skeleton.component.mjs +0 -116
- package/esm2022/lib/services/skeleton/types.mjs +0 -11
- package/esm2022/lib/services/theme.service.mjs +0 -153
- package/esm2022/lib/services/toast.service.mjs +0 -53
- package/esm2022/lib/services/types.mjs +0 -5
- package/esm2022/lib/shared/constants/storage.mjs +0 -3
- package/esm2022/lib/shared/pipes/process-links.pipe.mjs +0 -69
- package/esm2022/lib/shared/utils/datetime.mjs +0 -24
- package/esm2022/lib/shared/utils/dom.mjs +0 -27
- package/esm2022/lib/shared/utils/form-defaults.mjs +0 -112
- package/esm2022/lib/shared/utils/styles.mjs +0 -37
- package/esm2022/lib/shared/utils/text.mjs +0 -12
- package/esm2022/lib/version.mjs +0 -6
- package/esm2022/public-api.mjs +0 -367
- package/esm2022/valtech-components.mjs +0 -5
- package/index.d.ts +0 -5
- package/lib/components/atoms/avatar/avatar.component.d.ts +0 -36
- package/lib/components/atoms/avatar/types.d.ts +0 -15
- package/lib/components/atoms/box/box.component.d.ts +0 -26
- package/lib/components/atoms/box/types.d.ts +0 -19
- package/lib/components/atoms/button/button.component.d.ts +0 -63
- package/lib/components/atoms/button/factory.d.ts +0 -71
- package/lib/components/atoms/container/container.component.d.ts +0 -30
- package/lib/components/atoms/container/types.d.ts +0 -11
- package/lib/components/atoms/countdown/countdown.component.d.ts +0 -38
- package/lib/components/atoms/countdown/types.d.ts +0 -108
- package/lib/components/atoms/display/display.component.d.ts +0 -19
- package/lib/components/atoms/display/types.d.ts +0 -33
- package/lib/components/atoms/divider/divider.component.d.ts +0 -27
- package/lib/components/atoms/divider/types.d.ts +0 -12
- package/lib/components/atoms/fab/fab.component.d.ts +0 -36
- package/lib/components/atoms/fab/types.d.ts +0 -45
- package/lib/components/atoms/glass/glass.component.d.ts +0 -43
- package/lib/components/atoms/glass/types.d.ts +0 -70
- package/lib/components/atoms/glow/glow.component.d.ts +0 -42
- package/lib/components/atoms/glow/types.d.ts +0 -40
- package/lib/components/atoms/horizontal-scroll/horizontal-scroll.component.d.ts +0 -41
- package/lib/components/atoms/horizontal-scroll/types.d.ts +0 -13
- package/lib/components/atoms/href/href.component.d.ts +0 -25
- package/lib/components/atoms/href/types.d.ts +0 -19
- package/lib/components/atoms/icon/icon.component.d.ts +0 -18
- package/lib/components/atoms/icon/types.d.ts +0 -13
- package/lib/components/atoms/image/image.component.d.ts +0 -41
- package/lib/components/atoms/image/types.d.ts +0 -37
- package/lib/components/atoms/pattern/motifs.d.ts +0 -60
- package/lib/components/atoms/pattern/pattern.component.d.ts +0 -68
- package/lib/components/atoms/pattern/types.d.ts +0 -61
- package/lib/components/atoms/price-tag/price-tag.component.d.ts +0 -15
- package/lib/components/atoms/price-tag/types.d.ts +0 -59
- package/lib/components/atoms/progress-bar/progress-bar.component.d.ts +0 -35
- package/lib/components/atoms/progress-bar/types.d.ts +0 -19
- package/lib/components/atoms/progress-ring/progress-ring.component.d.ts +0 -20
- package/lib/components/atoms/progress-ring/types.d.ts +0 -24
- package/lib/components/atoms/qr-code/qr-code.component.d.ts +0 -33
- package/lib/components/atoms/qr-code/types.d.ts +0 -124
- package/lib/components/atoms/rights-footer/rights-footer.component.d.ts +0 -53
- package/lib/components/atoms/rights-footer/types.d.ts +0 -21
- package/lib/components/atoms/skeleton/skeleton.component.d.ts +0 -12
- package/lib/components/atoms/skeleton/types.d.ts +0 -29
- package/lib/components/atoms/text/text.component.d.ts +0 -33
- package/lib/components/atoms/text/types.d.ts +0 -42
- package/lib/components/atoms/title/title.component.d.ts +0 -21
- package/lib/components/atoms/title/types.d.ts +0 -36
- package/lib/components/atoms/user-avatar/types.d.ts +0 -74
- package/lib/components/atoms/user-avatar/user-avatar.component.d.ts +0 -55
- package/lib/components/molecules/accordion/accordion.component.d.ts +0 -18
- package/lib/components/molecules/accordion/types.d.ts +0 -47
- package/lib/components/molecules/action-card/action-card.component.d.ts +0 -90
- package/lib/components/molecules/action-card/types.d.ts +0 -83
- package/lib/components/molecules/action-header/action-header.component.d.ts +0 -27
- package/lib/components/molecules/action-header/types.d.ts +0 -27
- package/lib/components/molecules/ad-slot/ad-slot.component.d.ts +0 -69
- package/lib/components/molecules/alert-box/alert-box.component.d.ts +0 -39
- package/lib/components/molecules/alert-box/types.d.ts +0 -37
- package/lib/components/molecules/breadcrumb/breadcrumb.component.d.ts +0 -22
- package/lib/components/molecules/breadcrumb/types.d.ts +0 -45
- package/lib/components/molecules/button-group/button-group.component.d.ts +0 -23
- package/lib/components/molecules/button-group/types.d.ts +0 -13
- package/lib/components/molecules/card/card.component.d.ts +0 -49
- package/lib/components/molecules/card/types.d.ts +0 -32
- package/lib/components/molecules/check-input/check-input.component.d.ts +0 -36
- package/lib/components/molecules/checkbox-radio-input/checkbox-radio-input.component.d.ts +0 -17
- package/lib/components/molecules/chip-group/chip-group.component.d.ts +0 -22
- package/lib/components/molecules/chip-group/types.d.ts +0 -65
- package/lib/components/molecules/code-display/code-display.component.d.ts +0 -24
- package/lib/components/molecules/code-display/types.d.ts +0 -10
- package/lib/components/molecules/command-display/command-display.component.d.ts +0 -11
- package/lib/components/molecules/command-display/types.d.ts +0 -3
- package/lib/components/molecules/comment/comment.component.d.ts +0 -42
- package/lib/components/molecules/comment/types.d.ts +0 -171
- package/lib/components/molecules/comment-input/comment-input.component.d.ts +0 -16
- package/lib/components/molecules/comment-input/types.d.ts +0 -59
- package/lib/components/molecules/content-loader/content-loader.component.d.ts +0 -18
- package/lib/components/molecules/content-loader/types.d.ts +0 -15
- package/lib/components/molecules/content-reaction/content-reaction.component.d.ts +0 -58
- package/lib/components/molecules/content-reaction/types.d.ts +0 -77
- package/lib/components/molecules/currency-input/currency-input.component.d.ts +0 -40
- package/lib/components/molecules/currency-input/types.d.ts +0 -96
- package/lib/components/molecules/date-input/date-input.component.d.ts +0 -40
- package/lib/components/molecules/date-input/types.d.ts +0 -74
- package/lib/components/molecules/date-range-input/date-range-input.component.d.ts +0 -50
- package/lib/components/molecules/date-range-input/types.d.ts +0 -109
- package/lib/components/molecules/docs-api-table/docs-api-table.component.d.ts +0 -41
- package/lib/components/molecules/docs-api-table/types.d.ts +0 -62
- package/lib/components/molecules/docs-breadcrumb/docs-breadcrumb.component.d.ts +0 -31
- package/lib/components/molecules/docs-breadcrumb/types.d.ts +0 -20
- package/lib/components/molecules/docs-callout/docs-callout.component.d.ts +0 -17
- package/lib/components/molecules/docs-code-example/docs-code-example.component.d.ts +0 -45
- package/lib/components/molecules/docs-code-example/types.d.ts +0 -63
- package/lib/components/molecules/docs-nav-links/docs-nav-links.component.d.ts +0 -30
- package/lib/components/molecules/docs-nav-links/types.d.ts +0 -31
- package/lib/components/molecules/docs-search/docs-search.component.d.ts +0 -47
- package/lib/components/molecules/docs-search/types.d.ts +0 -27
- package/lib/components/molecules/docs-section/docs-section.component.d.ts +0 -29
- package/lib/components/molecules/docs-section/types.d.ts +0 -27
- package/lib/components/molecules/email-input/email-input.component.d.ts +0 -34
- package/lib/components/molecules/expandable-text/expandable-text.component.d.ts +0 -23
- package/lib/components/molecules/expandable-text/types.d.ts +0 -14
- package/lib/components/molecules/features-list/features-list.component.d.ts +0 -66
- package/lib/components/molecules/features-list/types.d.ts +0 -36
- package/lib/components/molecules/feedback-form/feedback-form.component.d.ts +0 -58
- package/lib/components/molecules/feedback-form/types.d.ts +0 -54
- package/lib/components/molecules/file-input/file-input.component.d.ts +0 -25
- package/lib/components/molecules/file-input/types.d.ts +0 -72
- package/lib/components/molecules/footer-links/footer-links.component.d.ts +0 -47
- package/lib/components/molecules/footer-links/types.d.ts +0 -50
- package/lib/components/molecules/glow-card/glow-card.component.d.ts +0 -60
- package/lib/components/molecules/glow-card/types.d.ts +0 -94
- package/lib/components/molecules/hint/hint.component.d.ts +0 -19
- package/lib/components/molecules/hour-input/hour-input.component.d.ts +0 -15
- package/lib/components/molecules/image-crop/image-crop.component.d.ts +0 -59
- package/lib/components/molecules/image-crop/index.d.ts +0 -1
- package/lib/components/molecules/info/info.component.d.ts +0 -9
- package/lib/components/molecules/info/types.d.ts +0 -10
- package/lib/components/molecules/language-selector/language-selector.component.d.ts +0 -40
- package/lib/components/molecules/language-selector/types.d.ts +0 -82
- package/lib/components/molecules/layered-card/layered-card.component.d.ts +0 -10
- package/lib/components/molecules/layered-card/types.d.ts +0 -15
- package/lib/components/molecules/link/link.component.d.ts +0 -24
- package/lib/components/molecules/link/types.d.ts +0 -19
- package/lib/components/molecules/linked-providers/linked-providers.component.d.ts +0 -30
- package/lib/components/molecules/linked-providers/types.d.ts +0 -38
- package/lib/components/molecules/links-accordion/links-accordion.component.d.ts +0 -61
- package/lib/components/molecules/links-accordion/types.d.ts +0 -39
- package/lib/components/molecules/links-cake/links-cake.component.d.ts +0 -17
- package/lib/components/molecules/links-cake/types.d.ts +0 -13
- package/lib/components/molecules/multi-select-search/multi-select-search.component.d.ts +0 -76
- package/lib/components/molecules/notes-box/notes-box.component.d.ts +0 -33
- package/lib/components/molecules/notes-box/types.d.ts +0 -35
- package/lib/components/molecules/number-from-to/number-from-to.component.d.ts +0 -27
- package/lib/components/molecules/number-from-to/types.d.ts +0 -76
- package/lib/components/molecules/number-input/number-input.component.d.ts +0 -16
- package/lib/components/molecules/number-stepper/number-stepper.component.d.ts +0 -38
- package/lib/components/molecules/number-stepper/types.d.ts +0 -88
- package/lib/components/molecules/page-links/page-links.component.d.ts +0 -29
- package/lib/components/molecules/page-links/types.d.ts +0 -38
- package/lib/components/molecules/pagination/pagination.component.d.ts +0 -15
- package/lib/components/molecules/pagination/types.d.ts +0 -41
- package/lib/components/molecules/password-input/password-input.component.d.ts +0 -37
- package/lib/components/molecules/phone-input/phone-input.component.d.ts +0 -59
- package/lib/components/molecules/phone-input/types.d.ts +0 -98
- package/lib/components/molecules/pill/pill.component.d.ts +0 -44
- package/lib/components/molecules/pill/types.d.ts +0 -63
- package/lib/components/molecules/pin-input/pin-input.component.d.ts +0 -21
- package/lib/components/molecules/pin-input/types.d.ts +0 -69
- package/lib/components/molecules/plain-code-box/plain-code-box.component.d.ts +0 -22
- package/lib/components/molecules/plain-code-box/types.d.ts +0 -10
- package/lib/components/molecules/popover-selector/popover-selector.component.d.ts +0 -42
- package/lib/components/molecules/popover-selector/types.d.ts +0 -69
- package/lib/components/molecules/progress-status/progress-status.component.d.ts +0 -23
- package/lib/components/molecules/progress-status/types.d.ts +0 -20
- package/lib/components/molecules/prompter/prompter.component.d.ts +0 -10
- package/lib/components/molecules/prompter/types.d.ts +0 -25
- package/lib/components/molecules/quote-box/quote-box.component.d.ts +0 -26
- package/lib/components/molecules/radio-input/radio-input.component.d.ts +0 -15
- package/lib/components/molecules/range-input/range-input.component.d.ts +0 -25
- package/lib/components/molecules/range-input/types.d.ts +0 -59
- package/lib/components/molecules/rating/rating.component.d.ts +0 -23
- package/lib/components/molecules/rating/types.d.ts +0 -41
- package/lib/components/molecules/refresher/refresher.component.d.ts +0 -84
- package/lib/components/molecules/refresher/types.d.ts +0 -86
- package/lib/components/molecules/searchbar/searchbar.component.d.ts +0 -43
- package/lib/components/molecules/searchbar/types.d.ts +0 -33
- package/lib/components/molecules/segment-control/segment-control.component.d.ts +0 -35
- package/lib/components/molecules/segment-control/types.d.ts +0 -46
- package/lib/components/molecules/select-input/select-input.component.d.ts +0 -57
- package/lib/components/molecules/select-search/select-search.component.d.ts +0 -78
- package/lib/components/molecules/share-buttons/share-buttons.component.d.ts +0 -22
- package/lib/components/molecules/share-buttons/types.d.ts +0 -108
- package/lib/components/molecules/stats-card/stats-card.component.d.ts +0 -20
- package/lib/components/molecules/stats-card/types.d.ts +0 -60
- package/lib/components/molecules/stepper/stepper.component.d.ts +0 -31
- package/lib/components/molecules/stepper/types.d.ts +0 -66
- package/lib/components/molecules/swipe-carousel/swipe-carousel.component.d.ts +0 -66
- package/lib/components/molecules/swipe-carousel/types.d.ts +0 -35
- package/lib/components/molecules/tabs/tabs.component.d.ts +0 -34
- package/lib/components/molecules/tabs/types.d.ts +0 -45
- package/lib/components/molecules/testimonial-card/testimonial-card.component.d.ts +0 -41
- package/lib/components/molecules/testimonial-card/types.d.ts +0 -25
- package/lib/components/molecules/text-input/text-input.component.d.ts +0 -42
- package/lib/components/molecules/textarea-input/textarea-input.component.d.ts +0 -46
- package/lib/components/molecules/textarea-input/types.d.ts +0 -74
- package/lib/components/molecules/timeline/timeline.component.d.ts +0 -14
- package/lib/components/molecules/timeline/types.d.ts +0 -39
- package/lib/components/molecules/title-block/title-block.component.d.ts +0 -12
- package/lib/components/molecules/title-block/types.d.ts +0 -15
- package/lib/components/molecules/toggle-input/toggle-input.component.d.ts +0 -39
- package/lib/components/molecules/toggle-input/types.d.ts +0 -30
- package/lib/components/molecules/update-banner/types.d.ts +0 -41
- package/lib/components/molecules/update-banner/update-banner.component.d.ts +0 -48
- package/lib/components/molecules/username-input/types.d.ts +0 -36
- package/lib/components/molecules/username-input/username-input.component.d.ts +0 -58
- package/lib/components/organisms/article/article.component.d.ts +0 -108
- package/lib/components/organisms/article/types.d.ts +0 -367
- package/lib/components/organisms/avatar-upload/avatar-upload.component.d.ts +0 -84
- package/lib/components/organisms/avatar-upload/types.d.ts +0 -62
- package/lib/components/organisms/banner/banner.component.d.ts +0 -16
- package/lib/components/organisms/banner/types.d.ts +0 -29
- package/lib/components/organisms/bottom-nav/bottom-nav.component.d.ts +0 -91
- package/lib/components/organisms/bottom-nav/types.d.ts +0 -120
- package/lib/components/organisms/cards-carousel/cards-carousel.component.d.ts +0 -36
- package/lib/components/organisms/cards-carousel/types.d.ts +0 -40
- package/lib/components/organisms/comment-section/comment-section.component.d.ts +0 -50
- package/lib/components/organisms/comment-section/types.d.ts +0 -144
- package/lib/components/organisms/company-footer/company-footer.component.d.ts +0 -37
- package/lib/components/organisms/company-footer/types.d.ts +0 -15
- package/lib/components/organisms/cookie-banner/cookie-banner.component.d.ts +0 -36
- package/lib/components/organisms/cookie-banner/types.d.ts +0 -62
- package/lib/components/organisms/data-table/data-table.component.d.ts +0 -63
- package/lib/components/organisms/data-table/types.d.ts +0 -219
- package/lib/components/organisms/docs-sidebar/docs-sidebar.component.d.ts +0 -51
- package/lib/components/organisms/docs-sidebar/types.d.ts +0 -93
- package/lib/components/organisms/docs-toc/docs-toc.component.d.ts +0 -62
- package/lib/components/organisms/docs-toc/types.d.ts +0 -62
- package/lib/components/organisms/faq/faq.component.d.ts +0 -46
- package/lib/components/organisms/faq/types.d.ts +0 -53
- package/lib/components/organisms/footer/footer.component.d.ts +0 -36
- package/lib/components/organisms/footer/types.d.ts +0 -16
- package/lib/components/organisms/form/factory.d.ts +0 -17
- package/lib/components/organisms/form/form-footer/form-footer.component.d.ts +0 -17
- package/lib/components/organisms/form/form.component.d.ts +0 -72
- package/lib/components/organisms/fun-header/fun-header.component.d.ts +0 -72
- package/lib/components/organisms/fun-header/types.d.ts +0 -28
- package/lib/components/organisms/header/header.component.d.ts +0 -22
- package/lib/components/organisms/header/types.d.ts +0 -16
- package/lib/components/organisms/infinite-list/infinite-list.component.d.ts +0 -113
- package/lib/components/organisms/infinite-list/types.d.ts +0 -197
- package/lib/components/organisms/item-list/item-list.component.d.ts +0 -43
- package/lib/components/organisms/item-list/types.d.ts +0 -126
- package/lib/components/organisms/login/login.component.d.ts +0 -79
- package/lib/components/organisms/login/types.d.ts +0 -70
- package/lib/components/organisms/menu/menu.component.d.ts +0 -44
- package/lib/components/organisms/menu/types.d.ts +0 -23
- package/lib/components/organisms/no-content/no-content.component.d.ts +0 -14
- package/lib/components/organisms/no-content/types.d.ts +0 -17
- package/lib/components/organisms/rotating-text/rotating-text.component.d.ts +0 -47
- package/lib/components/organisms/rotating-text/types.d.ts +0 -28
- package/lib/components/organisms/skeleton-layout/skeleton-layout.component.d.ts +0 -37
- package/lib/components/organisms/skeleton-layout/types.d.ts +0 -50
- package/lib/components/organisms/tabbed-content/tabbed-content.component.d.ts +0 -65
- package/lib/components/organisms/tabbed-content/types.d.ts +0 -53
- package/lib/components/organisms/terminal-404/terminal-404.component.d.ts +0 -42
- package/lib/components/organisms/terminal-404/types.d.ts +0 -22
- package/lib/components/organisms/testimonial-carousel/testimonial-carousel.component.d.ts +0 -33
- package/lib/components/organisms/testimonial-carousel/types.d.ts +0 -8
- package/lib/components/organisms/toolbar/toolbar.component.d.ts +0 -85
- package/lib/components/organisms/toolbar/types.d.ts +0 -31
- package/lib/components/organisms/wizard/types.d.ts +0 -42
- package/lib/components/organisms/wizard/wizard-footer/wizard-footer.component.d.ts +0 -23
- package/lib/components/organisms/wizard/wizard.component.d.ts +0 -27
- package/lib/components/templates/auth-background/auth-background.component.d.ts +0 -62
- package/lib/components/templates/auth-background/types.d.ts +0 -30
- package/lib/components/templates/docs-layout/docs-layout.component.d.ts +0 -42
- package/lib/components/templates/docs-layout/types.d.ts +0 -39
- package/lib/components/templates/docs-page/docs-page.component.d.ts +0 -61
- package/lib/components/templates/docs-page/types.d.ts +0 -121
- package/lib/components/templates/docs-shell/docs-shell.component.d.ts +0 -33
- package/lib/components/templates/docs-shell/types.d.ts +0 -152
- package/lib/components/templates/maintenance-page/maintenance-page.component.d.ts +0 -57
- package/lib/components/templates/maintenance-page/types.d.ts +0 -12
- package/lib/components/templates/page-content/page-content.component.d.ts +0 -107
- package/lib/components/templates/page-content/types.d.ts +0 -27
- package/lib/components/templates/page-template/page-template.component.d.ts +0 -54
- package/lib/components/templates/page-template/types.d.ts +0 -17
- package/lib/components/templates/page-wrapper/page-wrapper.component.d.ts +0 -99
- package/lib/components/templates/page-wrapper/types.d.ts +0 -26
- package/lib/components/templates/simple/simple.component.d.ts +0 -14
- package/lib/components/templates/simple/types.d.ts +0 -10
- package/lib/components/types.d.ts +0 -304
- package/lib/config/company-footer.config.d.ts +0 -118
- package/lib/config/index.d.ts +0 -4
- package/lib/services/ads/ads-loader.service.d.ts +0 -41
- package/lib/services/ads/ads.service.d.ts +0 -99
- package/lib/services/ads/config.d.ts +0 -53
- package/lib/services/ads/index.d.ts +0 -9
- package/lib/services/ads/types.d.ts +0 -106
- package/lib/services/app-config/app-config.service.d.ts +0 -115
- package/lib/services/app-config/config.d.ts +0 -31
- package/lib/services/app-config/index.d.ts +0 -47
- package/lib/services/app-config/types.d.ts +0 -54
- package/lib/services/app-config/version.d.ts +0 -64
- package/lib/services/app-version/app-version.service.d.ts +0 -64
- package/lib/services/app-version/config.d.ts +0 -35
- package/lib/services/app-version/index.d.ts +0 -23
- package/lib/services/app-version/types.d.ts +0 -35
- package/lib/services/auth/auth-state.service.d.ts +0 -106
- package/lib/services/auth/auth.service.d.ts +0 -429
- package/lib/services/auth/config.d.ts +0 -38
- package/lib/services/auth/device.service.d.ts +0 -101
- package/lib/services/auth/guards.d.ts +0 -126
- package/lib/services/auth/handoff.service.d.ts +0 -159
- package/lib/services/auth/index.d.ts +0 -89
- package/lib/services/auth/interceptor.d.ts +0 -22
- package/lib/services/auth/notification-action.service.d.ts +0 -34
- package/lib/services/auth/oauth-callback.component.d.ts +0 -34
- package/lib/services/auth/oauth.service.d.ts +0 -99
- package/lib/services/auth/org-switch.service.d.ts +0 -127
- package/lib/services/auth/session.service.d.ts +0 -60
- package/lib/services/auth/storage.service.d.ts +0 -52
- package/lib/services/auth/sync.service.d.ts +0 -49
- package/lib/services/auth/token.service.d.ts +0 -57
- package/lib/services/auth/types.d.ts +0 -862
- package/lib/services/confirmation-dialog/confirmation-dialog.service.d.ts +0 -71
- package/lib/services/confirmation-dialog/types.d.ts +0 -61
- package/lib/services/content/content-types/blog.d.ts +0 -148
- package/lib/services/content/content-types/documentation.d.ts +0 -183
- package/lib/services/content/content-types/news.d.ts +0 -162
- package/lib/services/content/index.d.ts +0 -49
- package/lib/services/content/transformer.d.ts +0 -96
- package/lib/services/content/types.d.ts +0 -220
- package/lib/services/docs/docs-navigation.service.d.ts +0 -51
- package/lib/services/donation/config.d.ts +0 -33
- package/lib/services/donation/donation.service.d.ts +0 -54
- package/lib/services/donation/index.d.ts +0 -25
- package/lib/services/donation/types.d.ts +0 -85
- package/lib/services/download.service.d.ts +0 -21
- package/lib/services/feedback/config.d.ts +0 -35
- package/lib/services/feedback/feedback.service.d.ts +0 -134
- package/lib/services/feedback/index.d.ts +0 -40
- package/lib/services/feedback/types.d.ts +0 -173
- package/lib/services/firebase/analytics-error-handler.d.ts +0 -54
- package/lib/services/firebase/analytics-router-tracker.d.ts +0 -51
- package/lib/services/firebase/analytics-types.d.ts +0 -221
- package/lib/services/firebase/analytics.service.d.ts +0 -256
- package/lib/services/firebase/config.d.ts +0 -49
- package/lib/services/firebase/firebase.service.d.ts +0 -303
- package/lib/services/firebase/firestore-collection.d.ts +0 -199
- package/lib/services/firebase/firestore.service.d.ts +0 -335
- package/lib/services/firebase/index.d.ts +0 -44
- package/lib/services/firebase/messaging.service.d.ts +0 -341
- package/lib/services/firebase/notifications.service.d.ts +0 -158
- package/lib/services/firebase/shared-config.d.ts +0 -151
- package/lib/services/firebase/storage.service.d.ts +0 -238
- package/lib/services/firebase/types.d.ts +0 -374
- package/lib/services/firebase/utils/path-builder.d.ts +0 -132
- package/lib/services/firebase/utils/query-builder.d.ts +0 -210
- package/lib/services/i18n/config.d.ts +0 -29
- package/lib/services/i18n/default-content.d.ts +0 -30
- package/lib/services/i18n/i18n.service.d.ts +0 -128
- package/lib/services/i18n/index.d.ts +0 -6
- package/lib/services/i18n/input-i18n.helper.d.ts +0 -70
- package/lib/services/i18n/translate.pipe.d.ts +0 -36
- package/lib/services/i18n/types.d.ts +0 -93
- package/lib/services/icons.service.d.ts +0 -9
- package/lib/services/image/image.service.d.ts +0 -76
- package/lib/services/image/index.d.ts +0 -2
- package/lib/services/image/types.d.ts +0 -74
- package/lib/services/in-app-browser.service.d.ts +0 -16
- package/lib/services/legal-link/legal-link.service.d.ts +0 -73
- package/lib/services/link-processor.service.d.ts +0 -104
- package/lib/services/local-storage.service.d.ts +0 -27
- package/lib/services/locale.service.d.ts +0 -52
- package/lib/services/markdown-article/legal-content.service.d.ts +0 -73
- package/lib/services/markdown-article/markdown-article-parser.d.ts +0 -38
- package/lib/services/markdown-article/markdown-article-parser.service.d.ts +0 -12
- package/lib/services/meta/index.d.ts +0 -2
- package/lib/services/meta/meta.service.d.ts +0 -23
- package/lib/services/meta/types.d.ts +0 -12
- package/lib/services/modal/modal.service.d.ts +0 -100
- package/lib/services/modal/simple-modal-content.component.d.ts +0 -19
- package/lib/services/modal/types.d.ts +0 -155
- package/lib/services/navigation/index.d.ts +0 -2
- package/lib/services/navigation/navigation.service.d.ts +0 -134
- package/lib/services/navigation/types.d.ts +0 -67
- package/lib/services/page-refresh/page-refresh.service.d.ts +0 -86
- package/lib/services/pagination/index.d.ts +0 -2
- package/lib/services/pagination/pagination.service.d.ts +0 -43
- package/lib/services/pagination/types.d.ts +0 -113
- package/lib/services/preferences/index.d.ts +0 -2
- package/lib/services/preferences/preferences.service.d.ts +0 -61
- package/lib/services/preferences/preferences.types.d.ts +0 -35
- package/lib/services/presets/config.d.ts +0 -32
- package/lib/services/presets/index.d.ts +0 -3
- package/lib/services/presets/preset.service.d.ts +0 -69
- package/lib/services/presets/types.d.ts +0 -39
- package/lib/services/qr-generator/qr-generator.service.d.ts +0 -115
- package/lib/services/qr-generator/types.d.ts +0 -141
- package/lib/services/refreshable-stream/index.d.ts +0 -7
- package/lib/services/refreshable-stream/refreshable-stream.d.ts +0 -113
- package/lib/services/skeleton/config.d.ts +0 -30
- package/lib/services/skeleton/directives/loading.directive.d.ts +0 -71
- package/lib/services/skeleton/index.d.ts +0 -10
- package/lib/services/skeleton/skeleton.service.d.ts +0 -127
- package/lib/services/skeleton/templates/detail-skeleton.component.d.ts +0 -18
- package/lib/services/skeleton/templates/form-skeleton.component.d.ts +0 -22
- package/lib/services/skeleton/templates/grid-skeleton.component.d.ts +0 -18
- package/lib/services/skeleton/templates/list-skeleton.component.d.ts +0 -17
- package/lib/services/skeleton/templates/profile-skeleton.component.d.ts +0 -20
- package/lib/services/skeleton/templates/table-skeleton.component.d.ts +0 -17
- package/lib/services/skeleton/types.d.ts +0 -111
- package/lib/services/theme.service.d.ts +0 -76
- package/lib/services/toast.service.d.ts +0 -28
- package/lib/services/types.d.ts +0 -1
- package/lib/shared/constants/storage.d.ts +0 -2
- package/lib/shared/pipes/process-links.pipe.d.ts +0 -55
- package/lib/shared/utils/datetime.d.ts +0 -21
- package/lib/shared/utils/dom.d.ts +0 -13
- package/lib/shared/utils/form-defaults.d.ts +0 -30
- package/lib/shared/utils/styles.d.ts +0 -13
- package/lib/shared/utils/text.d.ts +0 -11
- package/lib/version.d.ts +0 -5
- package/public-api.d.ts +0 -316
|
@@ -1,341 +0,0 @@
|
|
|
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
|
|
@@ -1,46 +0,0 @@
|
|
|
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=
|
|
@@ -1,8 +0,0 @@
|
|
|
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=
|
|
@@ -1,112 +0,0 @@
|
|
|
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==
|