valtech-components 2.0.689 → 2.0.690
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/atoms/avatar/avatar.component.mjs +94 -0
- package/esm2022/lib/components/atoms/avatar/types.mjs +2 -0
- package/esm2022/lib/components/atoms/box/box.component.mjs +88 -0
- package/esm2022/lib/components/atoms/box/types.mjs +2 -0
- package/esm2022/lib/components/atoms/button/button.component.mjs +174 -0
- package/esm2022/lib/components/atoms/button/factory.mjs +217 -0
- package/esm2022/lib/components/atoms/countdown/countdown.component.mjs +340 -0
- package/esm2022/lib/components/atoms/countdown/types.mjs +27 -0
- package/esm2022/lib/components/atoms/display/display.component.mjs +51 -0
- package/esm2022/lib/components/atoms/display/types.mjs +2 -0
- package/esm2022/lib/components/atoms/divider/divider.component.mjs +27 -0
- package/esm2022/lib/components/atoms/divider/types.mjs +2 -0
- package/esm2022/lib/components/atoms/fab/fab.component.mjs +190 -0
- package/esm2022/lib/components/atoms/fab/types.mjs +2 -0
- package/esm2022/lib/components/atoms/horizontal-scroll/horizontal-scroll.component.mjs +82 -0
- package/esm2022/lib/components/atoms/horizontal-scroll/types.mjs +2 -0
- package/esm2022/lib/components/atoms/href/href.component.mjs +62 -0
- package/esm2022/lib/components/atoms/href/types.mjs +2 -0
- package/esm2022/lib/components/atoms/icon/icon.component.mjs +29 -0
- package/esm2022/lib/components/atoms/icon/types.mjs +2 -0
- package/esm2022/lib/components/atoms/image/image.component.mjs +507 -0
- package/esm2022/lib/components/atoms/image/types.mjs +2 -0
- package/esm2022/lib/components/atoms/price-tag/price-tag.component.mjs +235 -0
- package/esm2022/lib/components/atoms/price-tag/types.mjs +15 -0
- package/esm2022/lib/components/atoms/progress-bar/progress-bar.component.mjs +91 -0
- package/esm2022/lib/components/atoms/progress-bar/types.mjs +2 -0
- package/esm2022/lib/components/atoms/progress-ring/progress-ring.component.mjs +149 -0
- package/esm2022/lib/components/atoms/progress-ring/types.mjs +2 -0
- package/esm2022/lib/components/atoms/qr-code/qr-code.component.mjs +394 -0
- package/esm2022/lib/components/atoms/qr-code/types.mjs +2 -0
- package/esm2022/lib/components/atoms/rights-footer/rights-footer.component.mjs +108 -0
- package/esm2022/lib/components/atoms/rights-footer/types.mjs +2 -0
- package/esm2022/lib/components/atoms/skeleton/skeleton.component.mjs +193 -0
- package/esm2022/lib/components/atoms/skeleton/types.mjs +13 -0
- package/esm2022/lib/components/atoms/text/text.component.mjs +132 -0
- package/esm2022/lib/components/atoms/text/types.mjs +2 -0
- package/esm2022/lib/components/atoms/title/title.component.mjs +68 -0
- package/esm2022/lib/components/atoms/title/types.mjs +22 -0
- package/esm2022/lib/components/molecules/accordion/accordion.component.mjs +120 -0
- package/esm2022/lib/components/molecules/accordion/types.mjs +2 -0
- package/esm2022/lib/components/molecules/action-card/action-card.component.mjs +298 -0
- package/esm2022/lib/components/molecules/action-card/types.mjs +11 -0
- package/esm2022/lib/components/molecules/action-header/action-header.component.mjs +26 -0
- package/esm2022/lib/components/molecules/action-header/types.mjs +2 -0
- package/esm2022/lib/components/molecules/ad-slot/ad-slot.component.mjs +274 -0
- package/esm2022/lib/components/molecules/alert-box/alert-box.component.mjs +119 -0
- package/esm2022/lib/components/molecules/alert-box/types.mjs +2 -0
- package/esm2022/lib/components/molecules/breadcrumb/breadcrumb.component.mjs +130 -0
- package/esm2022/lib/components/molecules/breadcrumb/types.mjs +2 -0
- package/esm2022/lib/components/molecules/button-group/button-group.component.mjs +63 -0
- package/esm2022/lib/components/molecules/button-group/types.mjs +2 -0
- package/esm2022/lib/components/molecules/card/card.component.mjs +450 -0
- package/esm2022/lib/components/molecules/card/types.mjs +16 -0
- package/esm2022/lib/components/molecules/check-input/check-input.component.mjs +82 -0
- package/esm2022/lib/components/molecules/chip-group/chip-group.component.mjs +166 -0
- package/esm2022/lib/components/molecules/chip-group/types.mjs +2 -0
- package/esm2022/lib/components/molecules/code-display/code-display.component.mjs +115 -0
- package/esm2022/lib/components/molecules/code-display/types.mjs +2 -0
- package/esm2022/lib/components/molecules/command-display/command-display.component.mjs +49 -0
- package/esm2022/lib/components/molecules/command-display/types.mjs +2 -0
- package/esm2022/lib/components/molecules/comment/comment.component.mjs +618 -0
- package/esm2022/lib/components/molecules/comment/types.mjs +2 -0
- package/esm2022/lib/components/molecules/comment-input/comment-input.component.mjs +41 -0
- package/esm2022/lib/components/molecules/comment-input/types.mjs +2 -0
- package/esm2022/lib/components/molecules/content-loader/content-loader.component.mjs +42 -0
- package/esm2022/lib/components/molecules/content-loader/types.mjs +2 -0
- package/esm2022/lib/components/molecules/content-reaction/content-reaction.component.mjs +218 -0
- package/esm2022/lib/components/molecules/content-reaction/types.mjs +2 -0
- package/esm2022/lib/components/molecules/currency-input/currency-input.component.mjs +347 -0
- package/esm2022/lib/components/molecules/currency-input/types.mjs +18 -0
- package/esm2022/lib/components/molecules/date-input/date-input.component.mjs +148 -0
- package/esm2022/lib/components/molecules/date-input/types.mjs +2 -0
- package/esm2022/lib/components/molecules/date-range-input/date-range-input.component.mjs +416 -0
- package/esm2022/lib/components/molecules/date-range-input/types.mjs +2 -0
- package/esm2022/lib/components/molecules/docs-api-table/docs-api-table.component.mjs +222 -0
- package/esm2022/lib/components/molecules/docs-api-table/types.mjs +11 -0
- package/esm2022/lib/components/molecules/docs-breadcrumb/docs-breadcrumb.component.mjs +144 -0
- package/esm2022/lib/components/molecules/docs-breadcrumb/types.mjs +2 -0
- package/esm2022/lib/components/molecules/docs-callout/docs-callout.component.mjs +60 -0
- package/esm2022/lib/components/molecules/docs-code-example/docs-code-example.component.mjs +255 -0
- package/esm2022/lib/components/molecules/docs-code-example/types.mjs +2 -0
- package/esm2022/lib/components/molecules/docs-nav-links/docs-nav-links.component.mjs +140 -0
- package/esm2022/lib/components/molecules/docs-nav-links/types.mjs +2 -0
- package/esm2022/lib/components/molecules/docs-search/docs-search.component.mjs +268 -0
- package/esm2022/lib/components/molecules/docs-search/types.mjs +2 -0
- package/esm2022/lib/components/molecules/docs-section/docs-section.component.mjs +85 -0
- package/esm2022/lib/components/molecules/docs-section/types.mjs +2 -0
- package/esm2022/lib/components/molecules/email-input/email-input.component.mjs +68 -0
- package/esm2022/lib/components/molecules/expandable-text/expandable-text.component.mjs +77 -0
- package/esm2022/lib/components/molecules/expandable-text/types.mjs +2 -0
- package/esm2022/lib/components/molecules/features-list/features-list.component.mjs +185 -0
- package/esm2022/lib/components/molecules/features-list/types.mjs +11 -0
- package/esm2022/lib/components/molecules/feedback-form/feedback-form.component.mjs +354 -0
- package/esm2022/lib/components/molecules/feedback-form/types.mjs +2 -0
- package/esm2022/lib/components/molecules/file-input/file-input.component.mjs +90 -0
- package/esm2022/lib/components/molecules/file-input/types.mjs +2 -0
- package/esm2022/lib/components/molecules/footer-links/footer-links.component.mjs +391 -0
- package/esm2022/lib/components/molecules/footer-links/types.mjs +2 -0
- package/esm2022/lib/components/molecules/glow-card/glow-card.component.mjs +314 -0
- package/esm2022/lib/components/molecules/glow-card/types.mjs +11 -0
- package/esm2022/lib/components/molecules/hint/hint.component.mjs +90 -0
- package/esm2022/lib/components/molecules/hour-input/hour-input.component.mjs +28 -0
- package/esm2022/lib/components/molecules/image-crop/image-crop.component.mjs +174 -0
- package/esm2022/lib/components/molecules/image-crop/index.mjs +2 -0
- package/esm2022/lib/components/molecules/info/info.component.mjs +49 -0
- package/esm2022/lib/components/molecules/info/types.mjs +2 -0
- package/esm2022/lib/components/molecules/language-selector/language-selector.component.mjs +221 -0
- package/esm2022/lib/components/molecules/language-selector/types.mjs +2 -0
- package/esm2022/lib/components/molecules/layered-card/layered-card.component.mjs +104 -0
- package/esm2022/lib/components/molecules/layered-card/types.mjs +2 -0
- package/esm2022/lib/components/molecules/link/link.component.mjs +64 -0
- package/esm2022/lib/components/molecules/link/types.mjs +2 -0
- package/esm2022/lib/components/molecules/linked-providers/linked-providers.component.mjs +236 -0
- package/esm2022/lib/components/molecules/linked-providers/types.mjs +27 -0
- package/esm2022/lib/components/molecules/links-accordion/links-accordion.component.mjs +185 -0
- package/esm2022/lib/components/molecules/links-accordion/types.mjs +2 -0
- package/esm2022/lib/components/molecules/links-cake/links-cake.component.mjs +51 -0
- package/esm2022/lib/components/molecules/links-cake/types.mjs +2 -0
- package/esm2022/lib/components/molecules/multi-select-search/multi-select-search.component.mjs +488 -0
- package/esm2022/lib/components/molecules/notes-box/notes-box.component.mjs +69 -0
- package/esm2022/lib/components/molecules/notes-box/types.mjs +2 -0
- package/esm2022/lib/components/molecules/number-from-to/number-from-to.component.mjs +143 -0
- package/esm2022/lib/components/molecules/number-from-to/types.mjs +2 -0
- package/esm2022/lib/components/molecules/number-input/number-input.component.mjs +34 -0
- package/esm2022/lib/components/molecules/number-stepper/number-stepper.component.mjs +379 -0
- package/esm2022/lib/components/molecules/number-stepper/types.mjs +2 -0
- package/esm2022/lib/components/molecules/pagination/pagination.component.mjs +253 -0
- package/esm2022/lib/components/molecules/pagination/types.mjs +2 -0
- package/esm2022/lib/components/molecules/participant-card/participant-card.component.mjs +514 -0
- package/esm2022/lib/components/molecules/participant-card/types.mjs +21 -0
- package/esm2022/lib/components/molecules/password-input/password-input.component.mjs +93 -0
- package/esm2022/lib/components/molecules/phone-input/phone-input.component.mjs +365 -0
- package/esm2022/lib/components/molecules/phone-input/types.mjs +19 -0
- package/esm2022/lib/components/molecules/pill/pill.component.mjs +92 -0
- package/esm2022/lib/components/molecules/pill/types.mjs +2 -0
- package/esm2022/lib/components/molecules/pin-input/pin-input.component.mjs +78 -0
- package/esm2022/lib/components/molecules/pin-input/types.mjs +2 -0
- package/esm2022/lib/components/molecules/plain-code-box/plain-code-box.component.mjs +82 -0
- package/esm2022/lib/components/molecules/plain-code-box/types.mjs +2 -0
- package/esm2022/lib/components/molecules/popover-selector/popover-selector.component.mjs +188 -0
- package/esm2022/lib/components/molecules/popover-selector/types.mjs +2 -0
- package/esm2022/lib/components/molecules/progress-status/progress-status.component.mjs +105 -0
- package/esm2022/lib/components/molecules/progress-status/types.mjs +2 -0
- package/esm2022/lib/components/molecules/prompter/prompter.component.mjs +85 -0
- package/esm2022/lib/components/molecules/prompter/types.mjs +2 -0
- package/esm2022/lib/components/molecules/quote-box/quote-box.component.mjs +155 -0
- package/esm2022/lib/components/molecules/radio-input/radio-input.component.mjs +52 -0
- package/esm2022/lib/components/molecules/raffle-status-card/raffle-status-card.component.mjs +476 -0
- package/esm2022/lib/components/molecules/raffle-status-card/types.mjs +23 -0
- package/esm2022/lib/components/molecules/range-input/range-input.component.mjs +127 -0
- package/esm2022/lib/components/molecules/range-input/types.mjs +2 -0
- package/esm2022/lib/components/molecules/rating/rating.component.mjs +166 -0
- package/esm2022/lib/components/molecules/rating/types.mjs +2 -0
- package/esm2022/lib/components/molecules/recap-card/recap-card.component.mjs +78 -0
- package/esm2022/lib/components/molecules/recap-card/types.mjs +2 -0
- package/esm2022/lib/components/molecules/refresher/refresher.component.mjs +269 -0
- package/esm2022/lib/components/molecules/refresher/types.mjs +15 -0
- package/esm2022/lib/components/molecules/searchbar/searchbar.component.mjs +127 -0
- package/esm2022/lib/components/molecules/searchbar/types.mjs +2 -0
- package/esm2022/lib/components/molecules/segment-control/segment-control.component.mjs +137 -0
- package/esm2022/lib/components/molecules/segment-control/types.mjs +2 -0
- package/esm2022/lib/components/molecules/select-input/select-input.component.mjs +130 -0
- package/esm2022/lib/components/molecules/select-search/select-search.component.mjs +420 -0
- package/esm2022/lib/components/molecules/share-buttons/share-buttons.component.mjs +274 -0
- package/esm2022/lib/components/molecules/share-buttons/types.mjs +88 -0
- package/esm2022/lib/components/molecules/stats-card/stats-card.component.mjs +213 -0
- package/esm2022/lib/components/molecules/stats-card/types.mjs +2 -0
- package/esm2022/lib/components/molecules/stepper/stepper.component.mjs +242 -0
- package/esm2022/lib/components/molecules/stepper/types.mjs +2 -0
- package/esm2022/lib/components/molecules/swipe-carousel/swipe-carousel.component.mjs +206 -0
- package/esm2022/lib/components/molecules/swipe-carousel/types.mjs +2 -0
- package/esm2022/lib/components/molecules/tabs/tabs.component.mjs +139 -0
- package/esm2022/lib/components/molecules/tabs/types.mjs +2 -0
- package/esm2022/lib/components/molecules/testimonial-card/testimonial-card.component.mjs +138 -0
- package/esm2022/lib/components/molecules/testimonial-card/types.mjs +2 -0
- package/esm2022/lib/components/molecules/text-input/text-input.component.mjs +77 -0
- package/esm2022/lib/components/molecules/textarea-input/textarea-input.component.mjs +213 -0
- package/esm2022/lib/components/molecules/textarea-input/types.mjs +2 -0
- package/esm2022/lib/components/molecules/ticket-grid/ticket-grid.component.mjs +489 -0
- package/esm2022/lib/components/molecules/ticket-grid/types.mjs +11 -0
- package/esm2022/lib/components/molecules/timeline/timeline.component.mjs +140 -0
- package/esm2022/lib/components/molecules/timeline/types.mjs +2 -0
- package/esm2022/lib/components/molecules/title-block/title-block.component.mjs +102 -0
- package/esm2022/lib/components/molecules/title-block/types.mjs +2 -0
- package/esm2022/lib/components/molecules/toggle-input/toggle-input.component.mjs +93 -0
- package/esm2022/lib/components/molecules/toggle-input/types.mjs +2 -0
- package/esm2022/lib/components/molecules/update-banner/update-banner.component.mjs +112 -0
- package/esm2022/lib/components/molecules/username-input/types.mjs +2 -0
- package/esm2022/lib/components/molecules/username-input/username-input.component.mjs +260 -0
- package/esm2022/lib/components/molecules/winner-display/types.mjs +9 -0
- package/esm2022/lib/components/molecules/winner-display/winner-display.component.mjs +359 -0
- package/esm2022/lib/components/organisms/article/article.component.mjs +573 -0
- package/esm2022/lib/components/organisms/article/types.mjs +183 -0
- package/esm2022/lib/components/organisms/avatar-upload/avatar-upload.component.mjs +372 -0
- package/esm2022/lib/components/organisms/avatar-upload/types.mjs +15 -0
- package/esm2022/lib/components/organisms/banner/banner.component.mjs +111 -0
- package/esm2022/lib/components/organisms/banner/types.mjs +2 -0
- package/esm2022/lib/components/organisms/bottom-nav/bottom-nav.component.mjs +368 -0
- package/esm2022/lib/components/organisms/bottom-nav/types.mjs +18 -0
- package/esm2022/lib/components/organisms/cards-carousel/cards-carousel.component.mjs +61 -0
- package/esm2022/lib/components/organisms/cards-carousel/types.mjs +2 -0
- package/esm2022/lib/components/organisms/comment-section/comment-section.component.mjs +537 -0
- package/esm2022/lib/components/organisms/comment-section/types.mjs +2 -0
- package/esm2022/lib/components/organisms/company-footer/company-footer.component.mjs +76 -0
- package/esm2022/lib/components/organisms/company-footer/types.mjs +2 -0
- package/esm2022/lib/components/organisms/data-table/data-table.component.mjs +1081 -0
- package/esm2022/lib/components/organisms/data-table/types.mjs +13 -0
- package/esm2022/lib/components/organisms/docs-sidebar/docs-sidebar.component.mjs +290 -0
- package/esm2022/lib/components/organisms/docs-sidebar/types.mjs +2 -0
- package/esm2022/lib/components/organisms/docs-toc/docs-toc.component.mjs +307 -0
- package/esm2022/lib/components/organisms/docs-toc/types.mjs +2 -0
- package/esm2022/lib/components/organisms/footer/footer.component.mjs +73 -0
- package/esm2022/lib/components/organisms/footer/types.mjs +2 -0
- package/esm2022/lib/components/organisms/form/factory.mjs +29 -0
- package/esm2022/lib/components/organisms/form/form-footer/form-footer.component.mjs +83 -0
- package/esm2022/lib/components/organisms/form/form.component.mjs +417 -0
- package/esm2022/lib/components/organisms/fun-header/fun-header.component.mjs +225 -0
- package/esm2022/lib/components/organisms/fun-header/types.mjs +2 -0
- package/esm2022/lib/components/organisms/header/header.component.mjs +51 -0
- package/esm2022/lib/components/organisms/header/types.mjs +2 -0
- package/esm2022/lib/components/organisms/infinite-list/infinite-list.component.mjs +620 -0
- package/esm2022/lib/components/organisms/infinite-list/types.mjs +15 -0
- package/esm2022/lib/components/organisms/item-list/item-list.component.mjs +418 -0
- package/esm2022/lib/components/organisms/item-list/types.mjs +2 -0
- package/esm2022/lib/components/organisms/login/login.component.mjs +741 -0
- package/esm2022/lib/components/organisms/login/types.mjs +11 -0
- package/esm2022/lib/components/organisms/menu/menu.component.mjs +206 -0
- package/esm2022/lib/components/organisms/menu/types.mjs +2 -0
- package/esm2022/lib/components/organisms/no-content/no-content.component.mjs +66 -0
- package/esm2022/lib/components/organisms/no-content/types.mjs +2 -0
- package/esm2022/lib/components/organisms/rotating-text/rotating-text.component.mjs +180 -0
- package/esm2022/lib/components/organisms/rotating-text/types.mjs +2 -0
- package/esm2022/lib/components/organisms/tabbed-content/tabbed-content.component.mjs +170 -0
- package/esm2022/lib/components/organisms/tabbed-content/types.mjs +2 -0
- package/esm2022/lib/components/organisms/terminal-404/terminal-404.component.mjs +214 -0
- package/esm2022/lib/components/organisms/terminal-404/types.mjs +2 -0
- package/esm2022/lib/components/organisms/testimonial-carousel/testimonial-carousel.component.mjs +72 -0
- package/esm2022/lib/components/organisms/testimonial-carousel/types.mjs +2 -0
- package/esm2022/lib/components/organisms/toolbar/toolbar.component.mjs +237 -0
- package/esm2022/lib/components/organisms/toolbar/types.mjs +2 -0
- package/esm2022/lib/components/organisms/wizard/types.mjs +10 -0
- package/esm2022/lib/components/organisms/wizard/wizard-footer/wizard-footer.component.mjs +111 -0
- package/esm2022/lib/components/organisms/wizard/wizard.component.mjs +161 -0
- package/esm2022/lib/components/templates/auth-background/auth-background.component.mjs +149 -0
- package/esm2022/lib/components/templates/auth-background/types.mjs +2 -0
- package/esm2022/lib/components/templates/docs-layout/docs-layout.component.mjs +221 -0
- package/esm2022/lib/components/templates/docs-layout/types.mjs +2 -0
- package/esm2022/lib/components/templates/docs-page/docs-page.component.mjs +251 -0
- package/esm2022/lib/components/templates/docs-page/types.mjs +2 -0
- package/esm2022/lib/components/templates/docs-shell/docs-shell.component.mjs +376 -0
- package/esm2022/lib/components/templates/docs-shell/types.mjs +2 -0
- package/esm2022/lib/components/templates/layout/layout.component.mjs +19 -0
- package/esm2022/lib/components/templates/maintenance-page/maintenance-page.component.mjs +153 -0
- package/esm2022/lib/components/templates/maintenance-page/types.mjs +2 -0
- package/esm2022/lib/components/templates/page-content/page-content.component.mjs +193 -0
- package/esm2022/lib/components/templates/page-content/types.mjs +2 -0
- package/esm2022/lib/components/templates/page-template/page-template.component.mjs +188 -0
- package/esm2022/lib/components/templates/page-template/types.mjs +2 -0
- package/esm2022/lib/components/templates/page-wrapper/page-wrapper.component.mjs +192 -0
- package/esm2022/lib/components/templates/page-wrapper/types.mjs +2 -0
- package/esm2022/lib/components/templates/simple/simple.component.mjs +125 -0
- package/esm2022/lib/components/templates/simple/types.mjs +2 -0
- package/esm2022/lib/components/types.mjs +58 -0
- package/esm2022/lib/config/company-footer.config.mjs +109 -0
- package/esm2022/lib/config/index.mjs +5 -0
- package/esm2022/lib/services/ads/ads-loader.service.mjs +120 -0
- package/esm2022/lib/services/ads/ads.service.mjs +236 -0
- package/esm2022/lib/services/ads/config.mjs +81 -0
- package/esm2022/lib/services/ads/index.mjs +13 -0
- package/esm2022/lib/services/ads/types.mjs +23 -0
- package/esm2022/lib/services/app-config/app-config.service.mjs +209 -0
- package/esm2022/lib/services/app-config/config.mjs +47 -0
- package/esm2022/lib/services/app-config/index.mjs +48 -0
- package/esm2022/lib/services/app-config/types.mjs +13 -0
- package/esm2022/lib/services/app-config/version.mjs +85 -0
- package/esm2022/lib/services/auth/auth-state.service.mjs +186 -0
- package/esm2022/lib/services/auth/auth.service.mjs +1087 -0
- package/esm2022/lib/services/auth/config.mjs +77 -0
- package/esm2022/lib/services/auth/device.service.mjs +135 -0
- package/esm2022/lib/services/auth/guards.mjs +194 -0
- package/esm2022/lib/services/auth/index.mjs +92 -0
- package/esm2022/lib/services/auth/interceptor.mjs +122 -0
- package/esm2022/lib/services/auth/oauth-callback.component.mjs +169 -0
- package/esm2022/lib/services/auth/oauth.service.mjs +318 -0
- package/esm2022/lib/services/auth/session.service.mjs +78 -0
- package/esm2022/lib/services/auth/storage.service.mjs +152 -0
- package/esm2022/lib/services/auth/sync.service.mjs +149 -0
- package/esm2022/lib/services/auth/token.service.mjs +122 -0
- package/esm2022/lib/services/auth/types.mjs +30 -0
- package/esm2022/lib/services/confirmation-dialog/confirmation-dialog.service.mjs +180 -0
- package/esm2022/lib/services/confirmation-dialog/types.mjs +14 -0
- package/esm2022/lib/services/docs/docs-navigation.service.mjs +91 -0
- package/esm2022/lib/services/download.service.mjs +80 -0
- package/esm2022/lib/services/feedback/config.mjs +49 -0
- package/esm2022/lib/services/feedback/feedback.service.mjs +296 -0
- package/esm2022/lib/services/feedback/index.mjs +44 -0
- package/esm2022/lib/services/feedback/types.mjs +30 -0
- package/esm2022/lib/services/firebase/analytics-error-handler.mjs +141 -0
- package/esm2022/lib/services/firebase/analytics-router-tracker.mjs +99 -0
- package/esm2022/lib/services/firebase/analytics-types.mjs +7 -0
- package/esm2022/lib/services/firebase/analytics.service.mjs +620 -0
- package/esm2022/lib/services/firebase/config.mjs +131 -0
- package/esm2022/lib/services/firebase/firebase.service.mjs +456 -0
- package/esm2022/lib/services/firebase/firestore-collection.mjs +262 -0
- package/esm2022/lib/services/firebase/firestore.service.mjs +536 -0
- package/esm2022/lib/services/firebase/index.mjs +56 -0
- package/esm2022/lib/services/firebase/messaging.service.mjs +597 -0
- package/esm2022/lib/services/firebase/notifications.service.mjs +210 -0
- package/esm2022/lib/services/firebase/shared-config.mjs +114 -0
- package/esm2022/lib/services/firebase/storage.service.mjs +472 -0
- package/esm2022/lib/services/firebase/types.mjs +18 -0
- package/esm2022/lib/services/firebase/utils/path-builder.mjs +195 -0
- package/esm2022/lib/services/firebase/utils/query-builder.mjs +302 -0
- package/esm2022/lib/services/i18n/config.mjs +110 -0
- package/esm2022/lib/services/i18n/default-content.mjs +563 -0
- package/esm2022/lib/services/i18n/i18n.service.mjs +196 -0
- package/esm2022/lib/services/i18n/index.mjs +13 -0
- package/esm2022/lib/services/i18n/input-i18n.helper.mjs +97 -0
- package/esm2022/lib/services/i18n/translate.pipe.mjs +50 -0
- package/esm2022/lib/services/i18n/types.mjs +15 -0
- package/esm2022/lib/services/icons.service.mjs +76 -0
- package/esm2022/lib/services/image/image.service.mjs +244 -0
- package/esm2022/lib/services/image/index.mjs +3 -0
- package/esm2022/lib/services/image/types.mjs +13 -0
- package/esm2022/lib/services/in-app-browser.service.mjs +35 -0
- package/esm2022/lib/services/link-processor.service.mjs +259 -0
- package/esm2022/lib/services/local-storage.service.mjs +37 -0
- package/esm2022/lib/services/locale.service.mjs +75 -0
- package/esm2022/lib/services/meta/index.mjs +3 -0
- package/esm2022/lib/services/meta/meta.service.mjs +63 -0
- package/esm2022/lib/services/meta/types.mjs +2 -0
- package/esm2022/lib/services/modal/modal.service.mjs +212 -0
- package/esm2022/lib/services/modal/simple-modal-content.component.mjs +133 -0
- package/esm2022/lib/services/modal/types.mjs +26 -0
- package/esm2022/lib/services/navigation/index.mjs +3 -0
- package/esm2022/lib/services/navigation/navigation.service.mjs +216 -0
- package/esm2022/lib/services/navigation/types.mjs +16 -0
- package/esm2022/lib/services/pagination/index.mjs +5 -0
- package/esm2022/lib/services/pagination/pagination.service.mjs +218 -0
- package/esm2022/lib/services/pagination/types.mjs +14 -0
- package/esm2022/lib/services/presets/config.mjs +46 -0
- package/esm2022/lib/services/presets/index.mjs +5 -0
- package/esm2022/lib/services/presets/preset.service.mjs +104 -0
- package/esm2022/lib/services/presets/types.mjs +2 -0
- package/esm2022/lib/services/qr-generator/qr-generator.service.mjs +341 -0
- package/esm2022/lib/services/qr-generator/types.mjs +46 -0
- package/esm2022/lib/services/skeleton/config.mjs +79 -0
- package/esm2022/lib/services/skeleton/directives/loading.directive.mjs +215 -0
- package/esm2022/lib/services/skeleton/index.mjs +16 -0
- package/esm2022/lib/services/skeleton/skeleton.service.mjs +198 -0
- package/esm2022/lib/services/skeleton/templates/detail-skeleton.component.mjs +223 -0
- package/esm2022/lib/services/skeleton/templates/form-skeleton.component.mjs +127 -0
- package/esm2022/lib/services/skeleton/templates/grid-skeleton.component.mjs +154 -0
- package/esm2022/lib/services/skeleton/templates/list-skeleton.component.mjs +110 -0
- package/esm2022/lib/services/skeleton/templates/profile-skeleton.component.mjs +207 -0
- package/esm2022/lib/services/skeleton/templates/table-skeleton.component.mjs +116 -0
- package/esm2022/lib/services/skeleton/types.mjs +11 -0
- package/esm2022/lib/services/theme.service.mjs +144 -0
- package/esm2022/lib/services/toast.service.mjs +47 -0
- package/esm2022/lib/services/types.mjs +5 -0
- package/esm2022/lib/shared/constants/storage.mjs +3 -0
- package/esm2022/lib/shared/pipes/process-links.pipe.mjs +69 -0
- package/esm2022/lib/shared/utils/dom.mjs +27 -0
- package/esm2022/lib/shared/utils/form-defaults.mjs +112 -0
- package/esm2022/lib/shared/utils/styles.mjs +37 -0
- package/esm2022/lib/shared/utils/text.mjs +12 -0
- package/esm2022/lib/version.mjs +6 -0
- package/esm2022/public-api.mjs +333 -0
- package/esm2022/valtech-components.mjs +5 -0
- package/fesm2022/valtech-components.mjs +42067 -0
- package/fesm2022/valtech-components.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/components/atoms/avatar/avatar.component.d.ts +36 -0
- package/lib/components/atoms/avatar/types.d.ts +15 -0
- package/lib/components/atoms/box/box.component.d.ts +26 -0
- package/lib/components/atoms/box/types.d.ts +19 -0
- package/lib/components/atoms/button/button.component.d.ts +63 -0
- package/lib/components/atoms/button/factory.d.ts +71 -0
- package/lib/components/atoms/countdown/countdown.component.d.ts +38 -0
- package/lib/components/atoms/countdown/types.d.ts +108 -0
- package/lib/components/atoms/display/display.component.d.ts +19 -0
- package/lib/components/atoms/display/types.d.ts +33 -0
- package/lib/components/atoms/divider/divider.component.d.ts +27 -0
- package/lib/components/atoms/divider/types.d.ts +12 -0
- package/lib/components/atoms/fab/fab.component.d.ts +36 -0
- package/lib/components/atoms/fab/types.d.ts +45 -0
- package/lib/components/atoms/horizontal-scroll/horizontal-scroll.component.d.ts +41 -0
- package/lib/components/atoms/horizontal-scroll/types.d.ts +13 -0
- package/lib/components/atoms/href/href.component.d.ts +25 -0
- package/lib/components/atoms/href/types.d.ts +19 -0
- package/lib/components/atoms/icon/icon.component.d.ts +18 -0
- package/lib/components/atoms/icon/types.d.ts +13 -0
- package/lib/components/atoms/image/image.component.d.ts +41 -0
- package/lib/components/atoms/image/types.d.ts +37 -0
- package/lib/components/atoms/price-tag/price-tag.component.d.ts +15 -0
- package/lib/components/atoms/price-tag/types.d.ts +59 -0
- package/lib/components/atoms/progress-bar/progress-bar.component.d.ts +35 -0
- package/lib/components/atoms/progress-bar/types.d.ts +19 -0
- package/lib/components/atoms/progress-ring/progress-ring.component.d.ts +20 -0
- package/lib/components/atoms/progress-ring/types.d.ts +24 -0
- package/lib/components/atoms/qr-code/qr-code.component.d.ts +33 -0
- package/lib/components/atoms/qr-code/types.d.ts +124 -0
- package/lib/components/atoms/rights-footer/rights-footer.component.d.ts +53 -0
- package/lib/components/atoms/rights-footer/types.d.ts +21 -0
- package/lib/components/atoms/skeleton/skeleton.component.d.ts +12 -0
- package/lib/components/atoms/skeleton/types.d.ts +29 -0
- package/lib/components/atoms/text/text.component.d.ts +33 -0
- package/lib/components/atoms/text/types.d.ts +42 -0
- package/lib/components/atoms/title/title.component.d.ts +21 -0
- package/lib/components/atoms/title/types.d.ts +36 -0
- package/lib/components/molecules/accordion/accordion.component.d.ts +18 -0
- package/lib/components/molecules/accordion/types.d.ts +47 -0
- package/lib/components/molecules/action-card/action-card.component.d.ts +90 -0
- package/lib/components/molecules/action-card/types.d.ts +83 -0
- package/lib/components/molecules/action-header/action-header.component.d.ts +7 -0
- package/lib/components/molecules/action-header/types.d.ts +6 -0
- package/lib/components/molecules/ad-slot/ad-slot.component.d.ts +69 -0
- package/lib/components/molecules/alert-box/alert-box.component.d.ts +39 -0
- package/lib/components/molecules/alert-box/types.d.ts +37 -0
- package/lib/components/molecules/breadcrumb/breadcrumb.component.d.ts +22 -0
- package/lib/components/molecules/breadcrumb/types.d.ts +45 -0
- package/lib/components/molecules/button-group/button-group.component.d.ts +23 -0
- package/lib/components/molecules/button-group/types.d.ts +13 -0
- package/lib/components/molecules/card/card.component.d.ts +49 -0
- package/lib/components/molecules/card/types.d.ts +32 -0
- package/lib/components/molecules/check-input/check-input.component.d.ts +36 -0
- package/lib/components/molecules/chip-group/chip-group.component.d.ts +22 -0
- package/lib/components/molecules/chip-group/types.d.ts +65 -0
- package/lib/components/molecules/code-display/code-display.component.d.ts +24 -0
- package/lib/components/molecules/code-display/types.d.ts +10 -0
- package/lib/components/molecules/command-display/command-display.component.d.ts +11 -0
- package/lib/components/molecules/command-display/types.d.ts +3 -0
- package/lib/components/molecules/comment/comment.component.d.ts +42 -0
- package/lib/components/molecules/comment/types.d.ts +171 -0
- package/lib/components/molecules/comment-input/comment-input.component.d.ts +16 -0
- package/lib/components/molecules/comment-input/types.d.ts +59 -0
- package/lib/components/molecules/content-loader/content-loader.component.d.ts +18 -0
- package/lib/components/molecules/content-loader/types.d.ts +15 -0
- package/lib/components/molecules/content-reaction/content-reaction.component.d.ts +58 -0
- package/lib/components/molecules/content-reaction/types.d.ts +77 -0
- package/lib/components/molecules/currency-input/currency-input.component.d.ts +40 -0
- package/lib/components/molecules/currency-input/types.d.ts +96 -0
- package/lib/components/molecules/date-input/date-input.component.d.ts +40 -0
- package/lib/components/molecules/date-input/types.d.ts +74 -0
- package/lib/components/molecules/date-range-input/date-range-input.component.d.ts +50 -0
- package/lib/components/molecules/date-range-input/types.d.ts +109 -0
- package/lib/components/molecules/docs-api-table/docs-api-table.component.d.ts +41 -0
- package/lib/components/molecules/docs-api-table/types.d.ts +62 -0
- package/lib/components/molecules/docs-breadcrumb/docs-breadcrumb.component.d.ts +31 -0
- package/lib/components/molecules/docs-breadcrumb/types.d.ts +20 -0
- package/lib/components/molecules/docs-callout/docs-callout.component.d.ts +17 -0
- package/lib/components/molecules/docs-code-example/docs-code-example.component.d.ts +45 -0
- package/lib/components/molecules/docs-code-example/types.d.ts +63 -0
- package/lib/components/molecules/docs-nav-links/docs-nav-links.component.d.ts +30 -0
- package/lib/components/molecules/docs-nav-links/types.d.ts +31 -0
- package/lib/components/molecules/docs-search/docs-search.component.d.ts +47 -0
- package/lib/components/molecules/docs-search/types.d.ts +27 -0
- package/lib/components/molecules/docs-section/docs-section.component.d.ts +29 -0
- package/lib/components/molecules/docs-section/types.d.ts +27 -0
- package/lib/components/molecules/email-input/email-input.component.d.ts +34 -0
- package/lib/components/molecules/expandable-text/expandable-text.component.d.ts +23 -0
- package/lib/components/molecules/expandable-text/types.d.ts +14 -0
- package/lib/components/molecules/features-list/features-list.component.d.ts +66 -0
- package/lib/components/molecules/features-list/types.d.ts +36 -0
- package/lib/components/molecules/feedback-form/feedback-form.component.d.ts +58 -0
- package/lib/components/molecules/feedback-form/types.d.ts +54 -0
- package/lib/components/molecules/file-input/file-input.component.d.ts +25 -0
- package/lib/components/molecules/file-input/types.d.ts +72 -0
- package/lib/components/molecules/footer-links/footer-links.component.d.ts +47 -0
- package/lib/components/molecules/footer-links/types.d.ts +50 -0
- package/lib/components/molecules/glow-card/glow-card.component.d.ts +60 -0
- package/lib/components/molecules/glow-card/types.d.ts +94 -0
- package/lib/components/molecules/hint/hint.component.d.ts +19 -0
- package/lib/components/molecules/hour-input/hour-input.component.d.ts +15 -0
- package/lib/components/molecules/image-crop/image-crop.component.d.ts +59 -0
- package/lib/components/molecules/info/info.component.d.ts +9 -0
- package/lib/components/molecules/info/types.d.ts +10 -0
- package/lib/components/molecules/language-selector/language-selector.component.d.ts +40 -0
- package/lib/components/molecules/language-selector/types.d.ts +82 -0
- package/lib/components/molecules/layered-card/layered-card.component.d.ts +10 -0
- package/lib/components/molecules/layered-card/types.d.ts +15 -0
- package/lib/components/molecules/link/link.component.d.ts +24 -0
- package/lib/components/molecules/link/types.d.ts +19 -0
- package/lib/components/molecules/linked-providers/linked-providers.component.d.ts +30 -0
- package/lib/components/molecules/linked-providers/types.d.ts +38 -0
- package/lib/components/molecules/links-accordion/links-accordion.component.d.ts +61 -0
- package/lib/components/molecules/links-accordion/types.d.ts +39 -0
- package/lib/components/molecules/links-cake/links-cake.component.d.ts +17 -0
- package/lib/components/molecules/links-cake/types.d.ts +13 -0
- package/lib/components/molecules/multi-select-search/multi-select-search.component.d.ts +76 -0
- package/lib/components/molecules/notes-box/notes-box.component.d.ts +21 -0
- package/lib/components/molecules/notes-box/types.d.ts +21 -0
- package/lib/components/molecules/number-from-to/number-from-to.component.d.ts +27 -0
- package/lib/components/molecules/number-from-to/types.d.ts +76 -0
- package/lib/components/molecules/number-input/number-input.component.d.ts +16 -0
- package/lib/components/molecules/number-stepper/number-stepper.component.d.ts +38 -0
- package/lib/components/molecules/number-stepper/types.d.ts +88 -0
- package/lib/components/molecules/pagination/pagination.component.d.ts +15 -0
- package/lib/components/molecules/pagination/types.d.ts +41 -0
- package/lib/components/molecules/participant-card/participant-card.component.d.ts +34 -0
- package/lib/components/molecules/participant-card/types.d.ts +132 -0
- package/lib/components/molecules/password-input/password-input.component.d.ts +37 -0
- package/lib/components/molecules/phone-input/phone-input.component.d.ts +59 -0
- package/lib/components/molecules/phone-input/types.d.ts +98 -0
- package/lib/components/molecules/pill/pill.component.d.ts +33 -0
- package/lib/components/molecules/pill/types.d.ts +9 -0
- package/lib/components/molecules/pin-input/pin-input.component.d.ts +21 -0
- package/lib/components/molecules/pin-input/types.d.ts +69 -0
- package/lib/components/molecules/plain-code-box/plain-code-box.component.d.ts +22 -0
- package/lib/components/molecules/plain-code-box/types.d.ts +10 -0
- package/lib/components/molecules/popover-selector/popover-selector.component.d.ts +42 -0
- package/lib/components/molecules/popover-selector/types.d.ts +69 -0
- package/lib/components/molecules/progress-status/progress-status.component.d.ts +23 -0
- package/lib/components/molecules/progress-status/types.d.ts +20 -0
- package/lib/components/molecules/prompter/prompter.component.d.ts +10 -0
- package/lib/components/molecules/prompter/types.d.ts +25 -0
- package/lib/components/molecules/quote-box/quote-box.component.d.ts +26 -0
- package/lib/components/molecules/radio-input/radio-input.component.d.ts +15 -0
- package/lib/components/molecules/raffle-status-card/raffle-status-card.component.d.ts +21 -0
- package/lib/components/molecules/raffle-status-card/types.d.ts +108 -0
- package/lib/components/molecules/range-input/range-input.component.d.ts +25 -0
- package/lib/components/molecules/range-input/types.d.ts +59 -0
- package/lib/components/molecules/rating/rating.component.d.ts +23 -0
- package/lib/components/molecules/rating/types.d.ts +41 -0
- package/lib/components/molecules/recap-card/recap-card.component.d.ts +36 -0
- package/lib/components/molecules/recap-card/types.d.ts +30 -0
- package/lib/components/molecules/refresher/refresher.component.d.ts +84 -0
- package/lib/components/molecules/refresher/types.d.ts +86 -0
- package/lib/components/molecules/searchbar/searchbar.component.d.ts +43 -0
- package/lib/components/molecules/searchbar/types.d.ts +33 -0
- package/lib/components/molecules/segment-control/segment-control.component.d.ts +35 -0
- package/lib/components/molecules/segment-control/types.d.ts +46 -0
- package/lib/components/molecules/select-input/select-input.component.d.ts +48 -0
- package/lib/components/molecules/select-search/select-search.component.d.ts +76 -0
- package/lib/components/molecules/share-buttons/share-buttons.component.d.ts +22 -0
- package/lib/components/molecules/share-buttons/types.d.ts +108 -0
- package/lib/components/molecules/stats-card/stats-card.component.d.ts +20 -0
- package/lib/components/molecules/stats-card/types.d.ts +60 -0
- package/lib/components/molecules/stepper/stepper.component.d.ts +31 -0
- package/lib/components/molecules/stepper/types.d.ts +66 -0
- package/lib/components/molecules/swipe-carousel/swipe-carousel.component.d.ts +66 -0
- package/lib/components/molecules/swipe-carousel/types.d.ts +35 -0
- package/lib/components/molecules/tabs/tabs.component.d.ts +34 -0
- package/lib/components/molecules/tabs/types.d.ts +45 -0
- package/lib/components/molecules/testimonial-card/testimonial-card.component.d.ts +41 -0
- package/lib/components/molecules/testimonial-card/types.d.ts +25 -0
- package/lib/components/molecules/text-input/text-input.component.d.ts +42 -0
- package/lib/components/molecules/textarea-input/textarea-input.component.d.ts +46 -0
- package/lib/components/molecules/textarea-input/types.d.ts +74 -0
- package/lib/components/molecules/ticket-grid/ticket-grid.component.d.ts +40 -0
- package/lib/components/molecules/ticket-grid/types.d.ts +122 -0
- package/lib/components/molecules/timeline/timeline.component.d.ts +14 -0
- package/lib/components/molecules/timeline/types.d.ts +39 -0
- package/lib/components/molecules/title-block/title-block.component.d.ts +12 -0
- package/lib/components/molecules/title-block/types.d.ts +15 -0
- package/lib/components/molecules/toggle-input/toggle-input.component.d.ts +39 -0
- package/lib/components/molecules/toggle-input/types.d.ts +30 -0
- package/lib/components/molecules/update-banner/update-banner.component.d.ts +42 -0
- package/lib/components/molecules/username-input/types.d.ts +34 -0
- package/lib/components/molecules/username-input/username-input.component.d.ts +45 -0
- package/lib/components/molecules/winner-display/types.d.ts +103 -0
- package/lib/components/molecules/winner-display/winner-display.component.d.ts +36 -0
- package/lib/components/organisms/article/article.component.d.ts +108 -0
- package/lib/components/organisms/article/types.d.ts +359 -0
- package/lib/components/organisms/avatar-upload/avatar-upload.component.d.ts +84 -0
- package/lib/components/organisms/avatar-upload/types.d.ts +62 -0
- package/lib/components/organisms/banner/banner.component.d.ts +16 -0
- package/lib/components/organisms/banner/types.d.ts +29 -0
- package/lib/components/organisms/bottom-nav/bottom-nav.component.d.ts +88 -0
- package/lib/components/organisms/bottom-nav/types.d.ts +118 -0
- package/lib/components/organisms/cards-carousel/cards-carousel.component.d.ts +30 -0
- package/lib/components/organisms/cards-carousel/types.d.ts +11 -0
- package/lib/components/organisms/comment-section/comment-section.component.d.ts +50 -0
- package/lib/components/organisms/comment-section/types.d.ts +144 -0
- package/lib/components/organisms/company-footer/company-footer.component.d.ts +37 -0
- package/lib/components/organisms/company-footer/types.d.ts +15 -0
- package/lib/components/organisms/data-table/data-table.component.d.ts +63 -0
- package/lib/components/organisms/data-table/types.d.ts +219 -0
- package/lib/components/organisms/docs-sidebar/docs-sidebar.component.d.ts +51 -0
- package/lib/components/organisms/docs-sidebar/types.d.ts +93 -0
- package/lib/components/organisms/docs-toc/docs-toc.component.d.ts +62 -0
- package/lib/components/organisms/docs-toc/types.d.ts +62 -0
- package/lib/components/organisms/footer/footer.component.d.ts +36 -0
- package/lib/components/organisms/footer/types.d.ts +16 -0
- package/lib/components/organisms/form/factory.d.ts +17 -0
- package/lib/components/organisms/form/form-footer/form-footer.component.d.ts +17 -0
- package/lib/components/organisms/form/form.component.d.ts +48 -0
- package/lib/components/organisms/fun-header/fun-header.component.d.ts +72 -0
- package/lib/components/organisms/fun-header/types.d.ts +28 -0
- package/lib/components/organisms/header/header.component.d.ts +22 -0
- package/lib/components/organisms/header/types.d.ts +16 -0
- package/lib/components/organisms/infinite-list/infinite-list.component.d.ts +113 -0
- package/lib/components/organisms/infinite-list/types.d.ts +197 -0
- package/lib/components/organisms/item-list/item-list.component.d.ts +43 -0
- package/lib/components/organisms/item-list/types.d.ts +126 -0
- package/lib/components/organisms/login/login.component.d.ts +79 -0
- package/lib/components/organisms/login/types.d.ts +70 -0
- package/lib/components/organisms/menu/menu.component.d.ts +44 -0
- package/lib/components/organisms/menu/types.d.ts +23 -0
- package/lib/components/organisms/no-content/no-content.component.d.ts +14 -0
- package/lib/components/organisms/no-content/types.d.ts +17 -0
- package/lib/components/organisms/rotating-text/rotating-text.component.d.ts +47 -0
- package/lib/components/organisms/rotating-text/types.d.ts +28 -0
- package/lib/components/organisms/tabbed-content/tabbed-content.component.d.ts +65 -0
- package/lib/components/organisms/tabbed-content/types.d.ts +53 -0
- package/lib/components/organisms/terminal-404/terminal-404.component.d.ts +42 -0
- package/lib/components/organisms/terminal-404/types.d.ts +22 -0
- package/lib/components/organisms/testimonial-carousel/testimonial-carousel.component.d.ts +33 -0
- package/lib/components/organisms/testimonial-carousel/types.d.ts +8 -0
- package/lib/components/organisms/toolbar/toolbar.component.d.ts +85 -0
- package/lib/components/organisms/toolbar/types.d.ts +31 -0
- package/lib/components/organisms/wizard/types.d.ts +42 -0
- package/lib/components/organisms/wizard/wizard-footer/wizard-footer.component.d.ts +23 -0
- package/lib/components/organisms/wizard/wizard.component.d.ts +27 -0
- package/lib/components/templates/auth-background/auth-background.component.d.ts +59 -0
- package/lib/components/templates/auth-background/types.d.ts +30 -0
- package/lib/components/templates/docs-layout/docs-layout.component.d.ts +42 -0
- package/lib/components/templates/docs-layout/types.d.ts +39 -0
- package/lib/components/templates/docs-page/docs-page.component.d.ts +61 -0
- package/lib/components/templates/docs-page/types.d.ts +121 -0
- package/lib/components/templates/docs-shell/docs-shell.component.d.ts +33 -0
- package/lib/components/templates/docs-shell/types.d.ts +152 -0
- package/lib/components/templates/layout/layout.component.d.ts +5 -0
- package/lib/components/templates/maintenance-page/maintenance-page.component.d.ts +57 -0
- package/lib/components/templates/maintenance-page/types.d.ts +12 -0
- package/lib/components/templates/page-content/page-content.component.d.ts +107 -0
- package/lib/components/templates/page-content/types.d.ts +27 -0
- package/lib/components/templates/page-template/page-template.component.d.ts +54 -0
- package/lib/components/templates/page-template/types.d.ts +17 -0
- package/lib/components/templates/page-wrapper/page-wrapper.component.d.ts +89 -0
- package/lib/components/templates/page-wrapper/types.d.ts +19 -0
- package/lib/components/templates/simple/simple.component.d.ts +14 -0
- package/lib/components/templates/simple/types.d.ts +10 -0
- package/lib/components/types.d.ts +289 -0
- package/lib/config/company-footer.config.d.ts +98 -0
- package/lib/services/ads/ads-loader.service.d.ts +41 -0
- package/lib/services/ads/ads.service.d.ts +99 -0
- package/lib/services/ads/config.d.ts +53 -0
- package/lib/services/ads/index.d.ts +9 -0
- package/lib/services/ads/types.d.ts +106 -0
- package/lib/services/app-config/app-config.service.d.ts +115 -0
- package/lib/services/app-config/config.d.ts +31 -0
- package/lib/services/app-config/index.d.ts +47 -0
- package/lib/services/app-config/types.d.ts +54 -0
- package/lib/services/app-config/version.d.ts +64 -0
- package/lib/services/auth/auth-state.service.d.ts +92 -0
- package/lib/services/auth/auth.service.d.ts +401 -0
- package/lib/services/auth/config.d.ts +38 -0
- package/lib/services/auth/device.service.d.ts +101 -0
- package/lib/services/auth/guards.d.ts +123 -0
- package/lib/services/auth/index.d.ts +83 -0
- package/lib/services/auth/interceptor.d.ts +22 -0
- package/lib/services/auth/oauth-callback.component.d.ts +34 -0
- package/lib/services/auth/oauth.service.d.ts +99 -0
- package/lib/services/auth/session.service.d.ts +60 -0
- package/lib/services/auth/storage.service.d.ts +52 -0
- package/lib/services/auth/sync.service.d.ts +49 -0
- package/lib/services/auth/token.service.d.ts +57 -0
- package/lib/services/auth/types.d.ts +842 -0
- package/lib/services/confirmation-dialog/confirmation-dialog.service.d.ts +71 -0
- package/lib/services/confirmation-dialog/types.d.ts +61 -0
- package/lib/services/docs/docs-navigation.service.d.ts +51 -0
- package/lib/services/download.service.d.ts +21 -0
- package/lib/services/feedback/config.d.ts +35 -0
- package/lib/services/feedback/feedback.service.d.ts +134 -0
- package/lib/services/feedback/index.d.ts +40 -0
- package/lib/services/feedback/types.d.ts +173 -0
- package/lib/services/firebase/analytics-error-handler.d.ts +54 -0
- package/lib/services/firebase/analytics-router-tracker.d.ts +51 -0
- package/lib/services/firebase/analytics-types.d.ts +221 -0
- package/lib/services/firebase/analytics.service.d.ts +256 -0
- package/lib/services/firebase/config.d.ts +49 -0
- package/lib/services/firebase/firebase.service.d.ts +251 -0
- package/lib/services/firebase/firestore-collection.d.ts +180 -0
- package/lib/services/firebase/firestore.service.d.ts +312 -0
- package/lib/services/firebase/index.d.ts +44 -0
- package/lib/services/firebase/messaging.service.d.ts +293 -0
- package/lib/services/firebase/notifications.service.d.ts +126 -0
- package/lib/services/firebase/shared-config.d.ts +118 -0
- package/lib/services/firebase/storage.service.d.ts +238 -0
- package/lib/services/firebase/types.d.ts +374 -0
- package/lib/services/firebase/utils/path-builder.d.ts +132 -0
- package/lib/services/firebase/utils/query-builder.d.ts +210 -0
- package/lib/services/i18n/config.d.ts +29 -0
- package/lib/services/i18n/default-content.d.ts +30 -0
- package/lib/services/i18n/i18n.service.d.ts +112 -0
- package/lib/services/i18n/index.d.ts +6 -0
- package/lib/services/i18n/input-i18n.helper.d.ts +70 -0
- package/lib/services/i18n/translate.pipe.d.ts +36 -0
- package/lib/services/i18n/types.d.ts +93 -0
- package/lib/services/icons.service.d.ts +9 -0
- package/lib/services/image/image.service.d.ts +76 -0
- package/lib/services/image/types.d.ts +74 -0
- package/lib/services/in-app-browser.service.d.ts +16 -0
- package/lib/services/link-processor.service.d.ts +104 -0
- package/lib/services/local-storage.service.d.ts +27 -0
- package/lib/services/locale.service.d.ts +52 -0
- package/lib/services/meta/meta.service.d.ts +23 -0
- package/lib/services/meta/types.d.ts +12 -0
- package/lib/services/modal/modal.service.d.ts +100 -0
- package/lib/services/modal/simple-modal-content.component.d.ts +19 -0
- package/lib/services/modal/types.d.ts +155 -0
- package/lib/services/navigation/navigation.service.d.ts +134 -0
- package/lib/services/navigation/types.d.ts +67 -0
- package/lib/services/pagination/index.d.ts +2 -0
- package/lib/services/pagination/pagination.service.d.ts +43 -0
- package/lib/services/pagination/types.d.ts +113 -0
- package/lib/services/presets/config.d.ts +32 -0
- package/lib/services/presets/index.d.ts +3 -0
- package/lib/services/presets/preset.service.d.ts +69 -0
- package/lib/services/presets/types.d.ts +39 -0
- package/lib/services/qr-generator/qr-generator.service.d.ts +115 -0
- package/lib/services/qr-generator/types.d.ts +141 -0
- package/lib/services/skeleton/config.d.ts +30 -0
- package/lib/services/skeleton/directives/loading.directive.d.ts +71 -0
- package/lib/services/skeleton/index.d.ts +10 -0
- package/lib/services/skeleton/skeleton.service.d.ts +127 -0
- package/lib/services/skeleton/templates/detail-skeleton.component.d.ts +18 -0
- package/lib/services/skeleton/templates/form-skeleton.component.d.ts +22 -0
- package/lib/services/skeleton/templates/grid-skeleton.component.d.ts +18 -0
- package/lib/services/skeleton/templates/list-skeleton.component.d.ts +17 -0
- package/lib/services/skeleton/templates/profile-skeleton.component.d.ts +20 -0
- package/lib/services/skeleton/templates/table-skeleton.component.d.ts +17 -0
- package/lib/services/skeleton/types.d.ts +111 -0
- package/lib/services/theme.service.d.ts +70 -0
- package/lib/services/toast.service.d.ts +22 -0
- package/lib/services/types.d.ts +1 -0
- package/lib/shared/constants/storage.d.ts +2 -0
- package/lib/shared/pipes/process-links.pipe.d.ts +55 -0
- package/lib/shared/utils/dom.d.ts +13 -0
- package/lib/shared/utils/form-defaults.d.ts +30 -0
- package/lib/shared/utils/styles.d.ts +13 -0
- package/lib/shared/utils/text.d.ts +11 -0
- package/lib/version.d.ts +5 -0
- package/package.json +16 -64
- package/public-api.d.ts +295 -0
- package/.editorconfig +0 -16
- package/.prettierignore +0 -6
- package/.prettierrc +0 -30
- package/.storybook/main.ts +0 -21
- package/.storybook/preview-body.html +0 -60
- package/.storybook/preview-head.html +0 -48
- package/.storybook/preview.ts +0 -52
- package/.storybook/tsconfig.json +0 -12
- package/I18N-COMPONENTS-MIGRATION.md +0 -496
- package/angular.json +0 -60
- package/ng-package.json +0 -16
- package/scripts/publish.sh +0 -30
- package/scripts/update-apps.sh +0 -94
- package/src/lib/components/atoms/avatar/avatar.component.scss +0 -31
- package/src/lib/components/atoms/avatar/avatar.component.ts +0 -95
- package/src/lib/components/atoms/avatar/avatar.stories.ts +0 -243
- package/src/lib/components/atoms/avatar/types.ts +0 -15
- package/src/lib/components/atoms/box/box.component.scss +0 -57
- package/src/lib/components/atoms/box/box.component.ts +0 -77
- package/src/lib/components/atoms/box/box.stories.ts +0 -280
- package/src/lib/components/atoms/box/types.ts +0 -20
- package/src/lib/components/atoms/button/button.component.scss +0 -20
- package/src/lib/components/atoms/button/button.component.ts +0 -174
- package/src/lib/components/atoms/button/button.stories.ts +0 -293
- package/src/lib/components/atoms/button/factory.ts +0 -444
- package/src/lib/components/atoms/countdown/countdown.component.scss +0 -256
- package/src/lib/components/atoms/countdown/countdown.component.ts +0 -293
- package/src/lib/components/atoms/countdown/countdown.stories.ts +0 -316
- package/src/lib/components/atoms/countdown/types.ts +0 -144
- package/src/lib/components/atoms/display/display.component.scss +0 -17
- package/src/lib/components/atoms/display/display.component.ts +0 -54
- package/src/lib/components/atoms/display/display.stories.ts +0 -185
- package/src/lib/components/atoms/display/types.ts +0 -35
- package/src/lib/components/atoms/divider/divider.component.scss +0 -62
- package/src/lib/components/atoms/divider/divider.component.ts +0 -35
- package/src/lib/components/atoms/divider/divider.stories.ts +0 -202
- package/src/lib/components/atoms/divider/types.ts +0 -12
- package/src/lib/components/atoms/fab/fab.component.scss +0 -26
- package/src/lib/components/atoms/fab/fab.component.ts +0 -166
- package/src/lib/components/atoms/fab/fab.stories.ts +0 -360
- package/src/lib/components/atoms/fab/types.ts +0 -47
- package/src/lib/components/atoms/horizontal-scroll/horizontal-scroll.component.scss +0 -39
- package/src/lib/components/atoms/horizontal-scroll/horizontal-scroll.component.ts +0 -67
- package/src/lib/components/atoms/horizontal-scroll/horizontal-scroll.stories.ts +0 -351
- package/src/lib/components/atoms/horizontal-scroll/types.ts +0 -13
- package/src/lib/components/atoms/href/href.component.scss +0 -25
- package/src/lib/components/atoms/href/href.component.ts +0 -64
- package/src/lib/components/atoms/href/href.stories.ts +0 -214
- package/src/lib/components/atoms/href/types.ts +0 -20
- package/src/lib/components/atoms/icon/icon.component.scss +0 -33
- package/src/lib/components/atoms/icon/icon.component.ts +0 -38
- package/src/lib/components/atoms/icon/icon.stories.ts +0 -160
- package/src/lib/components/atoms/icon/types.ts +0 -14
- package/src/lib/components/atoms/image/README.md +0 -0
- package/src/lib/components/atoms/image/image.component.scss +0 -281
- package/src/lib/components/atoms/image/image.component.ts +0 -399
- package/src/lib/components/atoms/image/image.stories.ts +0 -317
- package/src/lib/components/atoms/image/types.ts +0 -37
- package/src/lib/components/atoms/price-tag/price-tag.component.scss +0 -228
- package/src/lib/components/atoms/price-tag/price-tag.component.ts +0 -188
- package/src/lib/components/atoms/price-tag/price-tag.stories.ts +0 -315
- package/src/lib/components/atoms/price-tag/types.ts +0 -78
- package/src/lib/components/atoms/progress-bar/progress-bar.component.scss +0 -22
- package/src/lib/components/atoms/progress-bar/progress-bar.component.ts +0 -88
- package/src/lib/components/atoms/progress-bar/progress-bar.stories.ts +0 -375
- package/src/lib/components/atoms/progress-bar/types.ts +0 -20
- package/src/lib/components/atoms/progress-ring/progress-ring.component.scss +0 -35
- package/src/lib/components/atoms/progress-ring/progress-ring.component.ts +0 -114
- package/src/lib/components/atoms/progress-ring/progress-ring.stories.ts +0 -323
- package/src/lib/components/atoms/progress-ring/types.ts +0 -25
- package/src/lib/components/atoms/qr-code/qr-code.component.scss +0 -353
- package/src/lib/components/atoms/qr-code/qr-code.component.ts +0 -313
- package/src/lib/components/atoms/qr-code/qr-code.stories.ts +0 -767
- package/src/lib/components/atoms/qr-code/types.ts +0 -173
- package/src/lib/components/atoms/rights-footer/rights-footer.component.scss +0 -20
- package/src/lib/components/atoms/rights-footer/rights-footer.component.ts +0 -98
- package/src/lib/components/atoms/rights-footer/rights-footer.stories.ts +0 -229
- package/src/lib/components/atoms/rights-footer/types.ts +0 -21
- package/src/lib/components/atoms/skeleton/skeleton.component.scss +0 -58
- package/src/lib/components/atoms/skeleton/skeleton.component.ts +0 -129
- package/src/lib/components/atoms/skeleton/skeleton.stories.ts +0 -242
- package/src/lib/components/atoms/skeleton/types.ts +0 -39
- package/src/lib/components/atoms/text/text.component.scss +0 -38
- package/src/lib/components/atoms/text/text.component.ts +0 -123
- package/src/lib/components/atoms/text/text.stories.ts +0 -174
- package/src/lib/components/atoms/text/types.ts +0 -50
- package/src/lib/components/atoms/title/title.component.scss +0 -33
- package/src/lib/components/atoms/title/title.component.ts +0 -65
- package/src/lib/components/atoms/title/title.stories.ts +0 -167
- package/src/lib/components/atoms/title/types.ts +0 -46
- package/src/lib/components/molecules/accordion/accordion.component.scss +0 -34
- package/src/lib/components/molecules/accordion/accordion.component.ts +0 -103
- package/src/lib/components/molecules/accordion/accordion.stories.ts +0 -236
- package/src/lib/components/molecules/accordion/types.ts +0 -49
- package/src/lib/components/molecules/action-card/action-card.component.scss +0 -226
- package/src/lib/components/molecules/action-card/action-card.component.ts +0 -246
- package/src/lib/components/molecules/action-card/action-card.stories.ts +0 -396
- package/src/lib/components/molecules/action-card/types.ts +0 -102
- package/src/lib/components/molecules/action-header/action-header.component.ts +0 -28
- package/src/lib/components/molecules/action-header/action-header.stories.ts +0 -481
- package/src/lib/components/molecules/action-header/types.ts +0 -7
- package/src/lib/components/molecules/ad-slot/ad-slot.component.ts +0 -352
- package/src/lib/components/molecules/alert-box/alert-box.component.scss +0 -10
- package/src/lib/components/molecules/alert-box/alert-box.component.ts +0 -125
- package/src/lib/components/molecules/alert-box/alert-box.stories.ts +0 -248
- package/src/lib/components/molecules/alert-box/types.ts +0 -39
- package/src/lib/components/molecules/breadcrumb/breadcrumb.component.scss +0 -34
- package/src/lib/components/molecules/breadcrumb/breadcrumb.component.ts +0 -109
- package/src/lib/components/molecules/breadcrumb/breadcrumb.stories.ts +0 -271
- package/src/lib/components/molecules/breadcrumb/types.ts +0 -47
- package/src/lib/components/molecules/button-group/button-group.component.scss +0 -41
- package/src/lib/components/molecules/button-group/button-group.component.ts +0 -65
- package/src/lib/components/molecules/button-group/button-group.stories.ts +0 -296
- package/src/lib/components/molecules/button-group/types.ts +0 -14
- package/src/lib/components/molecules/card/card.component.scss +0 -62
- package/src/lib/components/molecules/card/card.component.ts +0 -300
- package/src/lib/components/molecules/card/card.stories.ts +0 -360
- package/src/lib/components/molecules/card/types.ts +0 -36
- package/src/lib/components/molecules/check-input/check-input.component.scss +0 -0
- package/src/lib/components/molecules/check-input/check-input.component.ts +0 -88
- package/src/lib/components/molecules/check-input/check-input.stories.ts +0 -54
- package/src/lib/components/molecules/chip-group/chip-group.component.scss +0 -70
- package/src/lib/components/molecules/chip-group/chip-group.component.ts +0 -150
- package/src/lib/components/molecules/chip-group/chip-group.stories.ts +0 -307
- package/src/lib/components/molecules/chip-group/types.ts +0 -69
- package/src/lib/components/molecules/code-display/code-display.component.scss +0 -239
- package/src/lib/components/molecules/code-display/code-display.component.ts +0 -109
- package/src/lib/components/molecules/code-display/code-display.stories.ts +0 -402
- package/src/lib/components/molecules/code-display/types.ts +0 -11
- package/src/lib/components/molecules/command-display/command-display.component.scss +0 -38
- package/src/lib/components/molecules/command-display/command-display.component.ts +0 -45
- package/src/lib/components/molecules/command-display/command-display.stories.ts +0 -110
- package/src/lib/components/molecules/command-display/types.ts +0 -3
- package/src/lib/components/molecules/comment/comment.component.scss +0 -339
- package/src/lib/components/molecules/comment/comment.component.ts +0 -496
- package/src/lib/components/molecules/comment/comment.stories.ts +0 -384
- package/src/lib/components/molecules/comment/types.ts +0 -181
- package/src/lib/components/molecules/comment-input/comment-input.component.scss +0 -0
- package/src/lib/components/molecules/comment-input/comment-input.component.ts +0 -42
- package/src/lib/components/molecules/comment-input/comment-input.stories.ts +0 -124
- package/src/lib/components/molecules/comment-input/types.ts +0 -69
- package/src/lib/components/molecules/content-loader/content-loader.component.scss +0 -42
- package/src/lib/components/molecules/content-loader/content-loader.component.ts +0 -45
- package/src/lib/components/molecules/content-loader/content-loader.stories.ts +0 -370
- package/src/lib/components/molecules/content-loader/types.ts +0 -16
- package/src/lib/components/molecules/content-reaction/content-reaction.component.html +0 -81
- package/src/lib/components/molecules/content-reaction/content-reaction.component.scss +0 -157
- package/src/lib/components/molecules/content-reaction/content-reaction.component.ts +0 -273
- package/src/lib/components/molecules/content-reaction/content-reaction.stories.ts +0 -453
- package/src/lib/components/molecules/content-reaction/types.ts +0 -99
- package/src/lib/components/molecules/currency-input/currency-input.component.scss +0 -101
- package/src/lib/components/molecules/currency-input/currency-input.component.ts +0 -327
- package/src/lib/components/molecules/currency-input/currency-input.stories.ts +0 -279
- package/src/lib/components/molecules/currency-input/types.ts +0 -125
- package/src/lib/components/molecules/date-input/date-input.component.scss +0 -11
- package/src/lib/components/molecules/date-input/date-input.component.ts +0 -136
- package/src/lib/components/molecules/date-input/date-input.stories.ts +0 -205
- package/src/lib/components/molecules/date-input/types.ts +0 -84
- package/src/lib/components/molecules/date-range-input/date-range-input.component.scss +0 -119
- package/src/lib/components/molecules/date-range-input/date-range-input.component.ts +0 -364
- package/src/lib/components/molecules/date-range-input/date-range-input.stories.ts +0 -288
- package/src/lib/components/molecules/date-range-input/types.ts +0 -122
- package/src/lib/components/molecules/docs-api-table/docs-api-table.component.scss +0 -278
- package/src/lib/components/molecules/docs-api-table/docs-api-table.component.ts +0 -138
- package/src/lib/components/molecules/docs-api-table/types.ts +0 -81
- package/src/lib/components/molecules/docs-breadcrumb/docs-breadcrumb.component.ts +0 -161
- package/src/lib/components/molecules/docs-breadcrumb/types.ts +0 -21
- package/src/lib/components/molecules/docs-callout/docs-callout.component.scss +0 -136
- package/src/lib/components/molecules/docs-callout/docs-callout.component.ts +0 -55
- package/src/lib/components/molecules/docs-code-example/docs-code-example.component.ts +0 -535
- package/src/lib/components/molecules/docs-code-example/types.ts +0 -75
- package/src/lib/components/molecules/docs-nav-links/docs-nav-links.component.ts +0 -216
- package/src/lib/components/molecules/docs-nav-links/types.ts +0 -36
- package/src/lib/components/molecules/docs-search/docs-search.component.scss +0 -195
- package/src/lib/components/molecules/docs-search/docs-search.component.ts +0 -228
- package/src/lib/components/molecules/docs-search/types.ts +0 -30
- package/src/lib/components/molecules/docs-section/docs-section.component.ts +0 -99
- package/src/lib/components/molecules/docs-section/types.ts +0 -31
- package/src/lib/components/molecules/email-input/email-input.component.scss +0 -0
- package/src/lib/components/molecules/email-input/email-input.component.ts +0 -77
- package/src/lib/components/molecules/email-input/email-input.stories.ts +0 -176
- package/src/lib/components/molecules/expandable-text/expandable-text.component.ts +0 -111
- package/src/lib/components/molecules/expandable-text/expandable-text.stories.ts +0 -287
- package/src/lib/components/molecules/expandable-text/types.ts +0 -14
- package/src/lib/components/molecules/features-list/features-list.component.ts +0 -251
- package/src/lib/components/molecules/features-list/types.ts +0 -44
- package/src/lib/components/molecules/feedback-form/feedback-form.component.ts +0 -355
- package/src/lib/components/molecules/feedback-form/types.ts +0 -77
- package/src/lib/components/molecules/file-input/file-input.component.scss +0 -11
- package/src/lib/components/molecules/file-input/file-input.component.ts +0 -87
- package/src/lib/components/molecules/file-input/file-input.stories.ts +0 -107
- package/src/lib/components/molecules/file-input/types.ts +0 -85
- package/src/lib/components/molecules/footer-links/footer-links.component.scss +0 -130
- package/src/lib/components/molecules/footer-links/footer-links.component.ts +0 -244
- package/src/lib/components/molecules/footer-links/footer-links.stories.ts +0 -188
- package/src/lib/components/molecules/footer-links/types.ts +0 -52
- package/src/lib/components/molecules/glow-card/glow-card.component.scss +0 -295
- package/src/lib/components/molecules/glow-card/glow-card.component.ts +0 -284
- package/src/lib/components/molecules/glow-card/glow-card.stories.ts +0 -680
- package/src/lib/components/molecules/glow-card/types.ts +0 -117
- package/src/lib/components/molecules/hint/hint.component.scss +0 -5
- package/src/lib/components/molecules/hint/hint.component.ts +0 -89
- package/src/lib/components/molecules/hint/hint.stories.ts +0 -233
- package/src/lib/components/molecules/hour-input/hour-input.component.scss +0 -0
- package/src/lib/components/molecules/hour-input/hour-input.component.ts +0 -34
- package/src/lib/components/molecules/hour-input/hour-input.stories.ts +0 -145
- package/src/lib/components/molecules/image-crop/image-crop.component.ts +0 -195
- package/src/lib/components/molecules/info/info.component.ts +0 -35
- package/src/lib/components/molecules/info/info.stories.ts +0 -276
- package/src/lib/components/molecules/info/types.ts +0 -11
- package/src/lib/components/molecules/language-selector/language-selector.component.scss +0 -128
- package/src/lib/components/molecules/language-selector/language-selector.component.ts +0 -204
- package/src/lib/components/molecules/language-selector/language-selector.stories.ts +0 -261
- package/src/lib/components/molecules/language-selector/types.ts +0 -84
- package/src/lib/components/molecules/layered-card/layered-card.component.scss +0 -84
- package/src/lib/components/molecules/layered-card/layered-card.component.ts +0 -66
- package/src/lib/components/molecules/layered-card/layered-card.stories.ts +0 -313
- package/src/lib/components/molecules/layered-card/types.ts +0 -16
- package/src/lib/components/molecules/link/link.component.scss +0 -11
- package/src/lib/components/molecules/link/link.component.ts +0 -73
- package/src/lib/components/molecules/link/link.stories.ts +0 -307
- package/src/lib/components/molecules/link/types.ts +0 -20
- package/src/lib/components/molecules/linked-providers/index.ts +0 -2
- package/src/lib/components/molecules/linked-providers/linked-providers.component.ts +0 -289
- package/src/lib/components/molecules/linked-providers/types.ts +0 -63
- package/src/lib/components/molecules/links-accordion/links-accordion.component.scss +0 -17
- package/src/lib/components/molecules/links-accordion/links-accordion.component.ts +0 -152
- package/src/lib/components/molecules/links-accordion/links-accordion.stories.ts +0 -209
- package/src/lib/components/molecules/links-accordion/types.ts +0 -41
- package/src/lib/components/molecules/links-cake/links-cake.component.scss +0 -9
- package/src/lib/components/molecules/links-cake/links-cake.component.ts +0 -49
- package/src/lib/components/molecules/links-cake/links-cake.stories.ts +0 -160
- package/src/lib/components/molecules/links-cake/types.ts +0 -14
- package/src/lib/components/molecules/multi-select-search/multi-select-search.component.scss +0 -168
- package/src/lib/components/molecules/multi-select-search/multi-select-search.component.ts +0 -471
- package/src/lib/components/molecules/multi-select-search/multi-select-search.stories.ts +0 -188
- package/src/lib/components/molecules/notes-box/notes-box.component.scss +0 -5
- package/src/lib/components/molecules/notes-box/notes-box.component.ts +0 -62
- package/src/lib/components/molecules/notes-box/notes-box.stories.ts +0 -308
- package/src/lib/components/molecules/notes-box/types.ts +0 -22
- package/src/lib/components/molecules/number-from-to/number-from-to.component.scss +0 -10
- package/src/lib/components/molecules/number-from-to/number-from-to.component.ts +0 -134
- package/src/lib/components/molecules/number-from-to/number-from-to.stories.ts +0 -203
- package/src/lib/components/molecules/number-from-to/types.ts +0 -91
- package/src/lib/components/molecules/number-input/number-input.component.scss +0 -0
- package/src/lib/components/molecules/number-input/number-input.component.ts +0 -41
- package/src/lib/components/molecules/number-input/number-input.stories.ts +0 -151
- package/src/lib/components/molecules/number-stepper/number-stepper.component.scss +0 -252
- package/src/lib/components/molecules/number-stepper/number-stepper.component.ts +0 -302
- package/src/lib/components/molecules/number-stepper/number-stepper.stories.ts +0 -417
- package/src/lib/components/molecules/number-stepper/types.ts +0 -101
- package/src/lib/components/molecules/pagination/pagination.component.scss +0 -50
- package/src/lib/components/molecules/pagination/pagination.component.ts +0 -194
- package/src/lib/components/molecules/pagination/pagination.stories.ts +0 -260
- package/src/lib/components/molecules/pagination/types.ts +0 -43
- package/src/lib/components/molecules/participant-card/participant-card.component.scss +0 -371
- package/src/lib/components/molecules/participant-card/participant-card.component.ts +0 -402
- package/src/lib/components/molecules/participant-card/participant-card.stories.ts +0 -479
- package/src/lib/components/molecules/participant-card/types.ts +0 -170
- package/src/lib/components/molecules/password-input/password-input.component.scss +0 -7
- package/src/lib/components/molecules/password-input/password-input.component.ts +0 -93
- package/src/lib/components/molecules/password-input/password-input.stories.ts +0 -187
- package/src/lib/components/molecules/phone-input/phone-input.component.scss +0 -157
- package/src/lib/components/molecules/phone-input/phone-input.component.ts +0 -354
- package/src/lib/components/molecules/phone-input/phone-input.stories.ts +0 -229
- package/src/lib/components/molecules/phone-input/types.ts +0 -126
- package/src/lib/components/molecules/pill/pill.component.scss +0 -35
- package/src/lib/components/molecules/pill/pill.component.ts +0 -89
- package/src/lib/components/molecules/pill/pill.stories.ts +0 -219
- package/src/lib/components/molecules/pill/types.ts +0 -10
- package/src/lib/components/molecules/pin-input/pin-input.component.scss +0 -22
- package/src/lib/components/molecules/pin-input/pin-input.component.ts +0 -83
- package/src/lib/components/molecules/pin-input/pin-input.stories.ts +0 -196
- package/src/lib/components/molecules/pin-input/types.ts +0 -80
- package/src/lib/components/molecules/plain-code-box/plain-code-box.component.scss +0 -191
- package/src/lib/components/molecules/plain-code-box/plain-code-box.component.ts +0 -86
- package/src/lib/components/molecules/plain-code-box/plain-code-box.stories.ts +0 -174
- package/src/lib/components/molecules/plain-code-box/types.ts +0 -12
- package/src/lib/components/molecules/popover-selector/popover-selector.component.scss +0 -220
- package/src/lib/components/molecules/popover-selector/popover-selector.component.ts +0 -163
- package/src/lib/components/molecules/popover-selector/popover-selector.stories.ts +0 -324
- package/src/lib/components/molecules/popover-selector/types.ts +0 -71
- package/src/lib/components/molecules/progress-status/progress-status.component.scss +0 -41
- package/src/lib/components/molecules/progress-status/progress-status.component.ts +0 -90
- package/src/lib/components/molecules/progress-status/progress-status.stories.ts +0 -415
- package/src/lib/components/molecules/progress-status/types.ts +0 -21
- package/src/lib/components/molecules/prompter/prompter.component.scss +0 -45
- package/src/lib/components/molecules/prompter/prompter.component.ts +0 -55
- package/src/lib/components/molecules/prompter/prompter.stories.ts +0 -193
- package/src/lib/components/molecules/prompter/types.ts +0 -26
- package/src/lib/components/molecules/quote-box/quote-box.component.scss +0 -253
- package/src/lib/components/molecules/quote-box/quote-box.component.ts +0 -104
- package/src/lib/components/molecules/quote-box/quote-box.stories.ts +0 -264
- package/src/lib/components/molecules/radio-input/radio-input.component.scss +0 -0
- package/src/lib/components/molecules/radio-input/radio-input.component.ts +0 -51
- package/src/lib/components/molecules/radio-input/radio-input.stories.ts +0 -197
- package/src/lib/components/molecules/raffle-status-card/raffle-status-card.component.scss +0 -418
- package/src/lib/components/molecules/raffle-status-card/raffle-status-card.component.ts +0 -320
- package/src/lib/components/molecules/raffle-status-card/raffle-status-card.stories.ts +0 -509
- package/src/lib/components/molecules/raffle-status-card/types.ts +0 -150
- package/src/lib/components/molecules/range-input/range-input.component.scss +0 -15
- package/src/lib/components/molecules/range-input/range-input.component.ts +0 -106
- package/src/lib/components/molecules/range-input/range-input.stories.ts +0 -331
- package/src/lib/components/molecules/range-input/types.ts +0 -61
- package/src/lib/components/molecules/rating/rating.component.scss +0 -60
- package/src/lib/components/molecules/rating/rating.component.ts +0 -154
- package/src/lib/components/molecules/rating/rating.stories.ts +0 -332
- package/src/lib/components/molecules/rating/types.ts +0 -43
- package/src/lib/components/molecules/recap-card/recap-card.component.scss +0 -35
- package/src/lib/components/molecules/recap-card/recap-card.component.ts +0 -64
- package/src/lib/components/molecules/recap-card/recap-card.stories.ts +0 -174
- package/src/lib/components/molecules/recap-card/types.ts +0 -30
- package/src/lib/components/molecules/refresher/refresher.component.ts +0 -257
- package/src/lib/components/molecules/refresher/types.ts +0 -103
- package/src/lib/components/molecules/searchbar/searchbar.component.scss +0 -9
- package/src/lib/components/molecules/searchbar/searchbar.component.ts +0 -122
- package/src/lib/components/molecules/searchbar/searchbar.stories.ts +0 -192
- package/src/lib/components/molecules/searchbar/types.ts +0 -38
- package/src/lib/components/molecules/segment-control/segment-control.component.scss +0 -27
- package/src/lib/components/molecules/segment-control/segment-control.component.ts +0 -121
- package/src/lib/components/molecules/segment-control/segment-control.stories.ts +0 -296
- package/src/lib/components/molecules/segment-control/types.ts +0 -48
- package/src/lib/components/molecules/select-input/select-input.component.scss +0 -0
- package/src/lib/components/molecules/select-input/select-input.component.ts +0 -133
- package/src/lib/components/molecules/select-input/select-input.stories.ts +0 -330
- package/src/lib/components/molecules/select-search/select-search.component.ts +0 -420
- package/src/lib/components/molecules/select-search/select-search.stories.ts +0 -218
- package/src/lib/components/molecules/share-buttons/share-buttons.component.scss +0 -195
- package/src/lib/components/molecules/share-buttons/share-buttons.component.ts +0 -269
- package/src/lib/components/molecules/share-buttons/share-buttons.stories.ts +0 -343
- package/src/lib/components/molecules/share-buttons/types.ts +0 -211
- package/src/lib/components/molecules/stats-card/stats-card.component.scss +0 -198
- package/src/lib/components/molecules/stats-card/stats-card.component.ts +0 -157
- package/src/lib/components/molecules/stats-card/stats-card.stories.ts +0 -481
- package/src/lib/components/molecules/stats-card/types.ts +0 -63
- package/src/lib/components/molecules/stepper/stepper.component.scss +0 -156
- package/src/lib/components/molecules/stepper/stepper.component.ts +0 -201
- package/src/lib/components/molecules/stepper/stepper.stories.ts +0 -308
- package/src/lib/components/molecules/stepper/types.ts +0 -70
- package/src/lib/components/molecules/swipe-carousel/swipe-carousel.component.scss +0 -164
- package/src/lib/components/molecules/swipe-carousel/swipe-carousel.component.ts +0 -215
- package/src/lib/components/molecules/swipe-carousel/swipe-carousel.stories.ts +0 -406
- package/src/lib/components/molecules/swipe-carousel/types.ts +0 -32
- package/src/lib/components/molecules/tabs/tabs.component.scss +0 -35
- package/src/lib/components/molecules/tabs/tabs.component.ts +0 -125
- package/src/lib/components/molecules/tabs/tabs.stories.ts +0 -283
- package/src/lib/components/molecules/tabs/types.ts +0 -47
- package/src/lib/components/molecules/testimonial-card/testimonial-card.component.scss +0 -25
- package/src/lib/components/molecules/testimonial-card/testimonial-card.component.ts +0 -121
- package/src/lib/components/molecules/testimonial-card/testimonial-card.stories.ts +0 -130
- package/src/lib/components/molecules/testimonial-card/types.ts +0 -26
- package/src/lib/components/molecules/text-input/text-input.component.scss +0 -1
- package/src/lib/components/molecules/text-input/text-input.component.ts +0 -86
- package/src/lib/components/molecules/text-input/text-input.stories.ts +0 -301
- package/src/lib/components/molecules/textarea-input/textarea-input.component.scss +0 -62
- package/src/lib/components/molecules/textarea-input/textarea-input.component.ts +0 -195
- package/src/lib/components/molecules/textarea-input/textarea-input.stories.ts +0 -329
- package/src/lib/components/molecules/textarea-input/types.ts +0 -83
- package/src/lib/components/molecules/ticket-grid/ticket-grid.component.scss +0 -270
- package/src/lib/components/molecules/ticket-grid/ticket-grid.component.ts +0 -429
- package/src/lib/components/molecules/ticket-grid/ticket-grid.stories.ts +0 -436
- package/src/lib/components/molecules/ticket-grid/types.ts +0 -145
- package/src/lib/components/molecules/timeline/timeline.component.scss +0 -168
- package/src/lib/components/molecules/timeline/timeline.component.ts +0 -98
- package/src/lib/components/molecules/timeline/timeline.stories.ts +0 -259
- package/src/lib/components/molecules/timeline/types.ts +0 -41
- package/src/lib/components/molecules/title-block/title-block.component.scss +0 -48
- package/src/lib/components/molecules/title-block/title-block.component.ts +0 -72
- package/src/lib/components/molecules/title-block/title-block.stories.ts +0 -351
- package/src/lib/components/molecules/title-block/types.ts +0 -16
- package/src/lib/components/molecules/toggle-input/toggle-input.component.scss +0 -7
- package/src/lib/components/molecules/toggle-input/toggle-input.component.ts +0 -94
- package/src/lib/components/molecules/toggle-input/toggle-input.stories.ts +0 -240
- package/src/lib/components/molecules/toggle-input/types.ts +0 -31
- package/src/lib/components/molecules/update-banner/index.ts +0 -1
- package/src/lib/components/molecules/update-banner/update-banner.component.ts +0 -118
- package/src/lib/components/molecules/username-input/index.ts +0 -2
- package/src/lib/components/molecules/username-input/types.ts +0 -36
- package/src/lib/components/molecules/username-input/username-input.component.ts +0 -336
- package/src/lib/components/molecules/winner-display/types.ts +0 -129
- package/src/lib/components/molecules/winner-display/winner-display.component.scss +0 -501
- package/src/lib/components/molecules/winner-display/winner-display.component.ts +0 -284
- package/src/lib/components/molecules/winner-display/winner-display.stories.ts +0 -468
- package/src/lib/components/organisms/article/README.md +0 -569
- package/src/lib/components/organisms/article/article.component.scss +0 -433
- package/src/lib/components/organisms/article/article.component.ts +0 -469
- package/src/lib/components/organisms/article/article.stories.ts +0 -625
- package/src/lib/components/organisms/article/types.ts +0 -550
- package/src/lib/components/organisms/avatar-upload/avatar-upload.component.scss +0 -119
- package/src/lib/components/organisms/avatar-upload/avatar-upload.component.ts +0 -349
- package/src/lib/components/organisms/avatar-upload/index.ts +0 -2
- package/src/lib/components/organisms/avatar-upload/types.ts +0 -71
- package/src/lib/components/organisms/banner/banner.component.scss +0 -51
- package/src/lib/components/organisms/banner/banner.component.ts +0 -95
- package/src/lib/components/organisms/banner/banner.stories.ts +0 -462
- package/src/lib/components/organisms/banner/types.ts +0 -30
- package/src/lib/components/organisms/bottom-nav/bottom-nav.component.scss +0 -350
- package/src/lib/components/organisms/bottom-nav/bottom-nav.component.ts +0 -362
- package/src/lib/components/organisms/bottom-nav/types.ts +0 -139
- package/src/lib/components/organisms/cards-carousel/cards-carousel.component.ts +0 -53
- package/src/lib/components/organisms/cards-carousel/cards-carousel.stories.ts +0 -241
- package/src/lib/components/organisms/cards-carousel/types.ts +0 -12
- package/src/lib/components/organisms/comment-section/comment-section.component.scss +0 -269
- package/src/lib/components/organisms/comment-section/comment-section.component.ts +0 -429
- package/src/lib/components/organisms/comment-section/comment-section.stories.ts +0 -305
- package/src/lib/components/organisms/comment-section/types.ts +0 -169
- package/src/lib/components/organisms/company-footer/company-footer.component.ts +0 -73
- package/src/lib/components/organisms/company-footer/company-footer.stories.ts +0 -216
- package/src/lib/components/organisms/company-footer/types.ts +0 -16
- package/src/lib/components/organisms/data-table/data-table.component.scss +0 -907
- package/src/lib/components/organisms/data-table/data-table.component.ts +0 -821
- package/src/lib/components/organisms/data-table/data-table.stories.ts +0 -787
- package/src/lib/components/organisms/data-table/types.ts +0 -258
- package/src/lib/components/organisms/docs-sidebar/docs-sidebar.component.scss +0 -228
- package/src/lib/components/organisms/docs-sidebar/docs-sidebar.component.ts +0 -213
- package/src/lib/components/organisms/docs-sidebar/types.ts +0 -112
- package/src/lib/components/organisms/docs-toc/docs-toc.component.scss +0 -119
- package/src/lib/components/organisms/docs-toc/docs-toc.component.ts +0 -320
- package/src/lib/components/organisms/docs-toc/types.ts +0 -73
- package/src/lib/components/organisms/footer/footer.component.scss +0 -3
- package/src/lib/components/organisms/footer/footer.component.ts +0 -65
- package/src/lib/components/organisms/footer/footer.stories.ts +0 -278
- package/src/lib/components/organisms/footer/types.ts +0 -17
- package/src/lib/components/organisms/form/factory.ts +0 -46
- package/src/lib/components/organisms/form/form-footer/form-footer.component.scss +0 -0
- package/src/lib/components/organisms/form/form-footer/form-footer.component.ts +0 -72
- package/src/lib/components/organisms/form/form.component.scss +0 -24
- package/src/lib/components/organisms/form/form.component.ts +0 -367
- package/src/lib/components/organisms/form/form.stories.ts +0 -505
- package/src/lib/components/organisms/fun-header/fun-header.component.scss +0 -36
- package/src/lib/components/organisms/fun-header/fun-header.component.ts +0 -209
- package/src/lib/components/organisms/fun-header/fun-header.stories.ts +0 -272
- package/src/lib/components/organisms/fun-header/types.ts +0 -29
- package/src/lib/components/organisms/header/header.component.scss +0 -5
- package/src/lib/components/organisms/header/header.component.ts +0 -53
- package/src/lib/components/organisms/header/header.stories.ts +0 -293
- package/src/lib/components/organisms/header/types.ts +0 -17
- package/src/lib/components/organisms/infinite-list/infinite-list.component.ts +0 -602
- package/src/lib/components/organisms/infinite-list/types.ts +0 -235
- package/src/lib/components/organisms/item-list/item-list.component.scss +0 -53
- package/src/lib/components/organisms/item-list/item-list.component.ts +0 -269
- package/src/lib/components/organisms/item-list/item-list.stories.ts +0 -363
- package/src/lib/components/organisms/item-list/types.ts +0 -130
- package/src/lib/components/organisms/login/login.component.html +0 -244
- package/src/lib/components/organisms/login/login.component.scss +0 -118
- package/src/lib/components/organisms/login/login.component.ts +0 -866
- package/src/lib/components/organisms/login/types.ts +0 -89
- package/src/lib/components/organisms/menu/menu.component.scss +0 -23
- package/src/lib/components/organisms/menu/menu.component.ts +0 -152
- package/src/lib/components/organisms/menu/menu.stories.ts +0 -223
- package/src/lib/components/organisms/menu/types.ts +0 -24
- package/src/lib/components/organisms/no-content/no-content.component.scss +0 -11
- package/src/lib/components/organisms/no-content/no-content.component.ts +0 -68
- package/src/lib/components/organisms/no-content/no-content.stories.ts +0 -259
- package/src/lib/components/organisms/no-content/types.ts +0 -18
- package/src/lib/components/organisms/rotating-text/rotating-text.component.ts +0 -239
- package/src/lib/components/organisms/rotating-text/types.ts +0 -29
- package/src/lib/components/organisms/tabbed-content/tabbed-content.component.scss +0 -89
- package/src/lib/components/organisms/tabbed-content/tabbed-content.component.ts +0 -165
- package/src/lib/components/organisms/tabbed-content/tabbed-content.stories.ts +0 -326
- package/src/lib/components/organisms/tabbed-content/types.ts +0 -56
- package/src/lib/components/organisms/terminal-404/terminal-404.component.ts +0 -339
- package/src/lib/components/organisms/terminal-404/types.ts +0 -22
- package/src/lib/components/organisms/testimonial-carousel/testimonial-carousel.component.ts +0 -70
- package/src/lib/components/organisms/testimonial-carousel/testimonial-carousel.stories.ts +0 -173
- package/src/lib/components/organisms/testimonial-carousel/types.ts +0 -9
- package/src/lib/components/organisms/toolbar/toolbar.component.scss +0 -13
- package/src/lib/components/organisms/toolbar/toolbar.component.ts +0 -195
- package/src/lib/components/organisms/toolbar/toolbar.stories.ts +0 -263
- package/src/lib/components/organisms/toolbar/types.ts +0 -32
- package/src/lib/components/organisms/wizard/types.ts +0 -46
- package/src/lib/components/organisms/wizard/wizard-footer/wizard-footer.component.scss +0 -0
- package/src/lib/components/organisms/wizard/wizard-footer/wizard-footer.component.ts +0 -104
- package/src/lib/components/organisms/wizard/wizard.component.scss +0 -16
- package/src/lib/components/organisms/wizard/wizard.component.ts +0 -165
- package/src/lib/components/organisms/wizard/wizard.stories.ts +0 -653
- package/src/lib/components/templates/auth-background/auth-background.component.ts +0 -258
- package/src/lib/components/templates/auth-background/types.ts +0 -34
- package/src/lib/components/templates/docs-layout/docs-layout.component.scss +0 -218
- package/src/lib/components/templates/docs-layout/docs-layout.component.ts +0 -161
- package/src/lib/components/templates/docs-layout/types.ts +0 -45
- package/src/lib/components/templates/docs-page/docs-page.component.ts +0 -534
- package/src/lib/components/templates/docs-page/types.ts +0 -141
- package/src/lib/components/templates/docs-shell/docs-shell.component.ts +0 -494
- package/src/lib/components/templates/docs-shell/types.ts +0 -176
- package/src/lib/components/templates/layout/layout.component.scss +0 -25
- package/src/lib/components/templates/layout/layout.component.ts +0 -14
- package/src/lib/components/templates/maintenance-page/index.ts +0 -2
- package/src/lib/components/templates/maintenance-page/maintenance-page.component.scss +0 -44
- package/src/lib/components/templates/maintenance-page/maintenance-page.component.ts +0 -120
- package/src/lib/components/templates/maintenance-page/types.ts +0 -12
- package/src/lib/components/templates/page-content/page-content.component.ts +0 -188
- package/src/lib/components/templates/page-content/page-content.stories.ts +0 -169
- package/src/lib/components/templates/page-content/types.ts +0 -28
- package/src/lib/components/templates/page-template/page-template.component.ts +0 -164
- package/src/lib/components/templates/page-template/page-template.stories.ts +0 -174
- package/src/lib/components/templates/page-template/types.ts +0 -17
- package/src/lib/components/templates/page-wrapper/page-wrapper.component.ts +0 -183
- package/src/lib/components/templates/page-wrapper/page-wrapper.stories.ts +0 -149
- package/src/lib/components/templates/page-wrapper/types.ts +0 -20
- package/src/lib/components/templates/simple/simple.component.ts +0 -92
- package/src/lib/components/templates/simple/types.ts +0 -11
- package/src/lib/components/types.ts +0 -311
- package/src/lib/config/company-footer.config.ts +0 -137
- package/src/lib/services/ads/ads-consent.service.ts +0 -166
- package/src/lib/services/ads/ads-loader.service.ts +0 -133
- package/src/lib/services/ads/ads.service.ts +0 -268
- package/src/lib/services/ads/config.ts +0 -92
- package/src/lib/services/ads/index.ts +0 -29
- package/src/lib/services/ads/types.ts +0 -187
- package/src/lib/services/app-config/app-config.service.ts +0 -228
- package/src/lib/services/app-config/config.ts +0 -62
- package/src/lib/services/app-config/index.ts +0 -48
- package/src/lib/services/app-config/types.ts +0 -62
- package/src/lib/services/app-config/version.ts +0 -104
- package/src/lib/services/auth/auth-state.service.ts +0 -225
- package/src/lib/services/auth/auth.service.ts +0 -1306
- package/src/lib/services/auth/config.ts +0 -93
- package/src/lib/services/auth/device.service.ts +0 -163
- package/src/lib/services/auth/guards.ts +0 -234
- package/src/lib/services/auth/index.ts +0 -111
- package/src/lib/services/auth/interceptor.ts +0 -177
- package/src/lib/services/auth/oauth-callback.component.ts +0 -202
- package/src/lib/services/auth/oauth.service.ts +0 -352
- package/src/lib/services/auth/session.service.ts +0 -83
- package/src/lib/services/auth/storage.service.ts +0 -181
- package/src/lib/services/auth/sync.service.ts +0 -158
- package/src/lib/services/auth/token.service.ts +0 -132
- package/src/lib/services/auth/types.ts +0 -1023
- package/src/lib/services/confirmation-dialog/confirmation-dialog.service.ts +0 -199
- package/src/lib/services/confirmation-dialog/types.ts +0 -74
- package/src/lib/services/content/content-types/blog.ts +0 -324
- package/src/lib/services/content/content-types/documentation.ts +0 -369
- package/src/lib/services/content/content-types/news.ts +0 -328
- package/src/lib/services/content/index.ts +0 -71
- package/src/lib/services/content/transformer.ts +0 -312
- package/src/lib/services/content/types.ts +0 -276
- package/src/lib/services/docs/docs-navigation.service.ts +0 -91
- package/src/lib/services/download.service.ts +0 -75
- package/src/lib/services/feedback/config.ts +0 -61
- package/src/lib/services/feedback/feedback.service.ts +0 -348
- package/src/lib/services/feedback/index.ts +0 -59
- package/src/lib/services/feedback/types.ts +0 -239
- package/src/lib/services/firebase/README.md +0 -328
- package/src/lib/services/firebase/analytics-error-handler.ts +0 -155
- package/src/lib/services/firebase/analytics-router-tracker.ts +0 -109
- package/src/lib/services/firebase/analytics-types.ts +0 -277
- package/src/lib/services/firebase/analytics.service.ts +0 -707
- package/src/lib/services/firebase/config.ts +0 -172
- package/src/lib/services/firebase/firebase.service.ts +0 -502
- package/src/lib/services/firebase/firestore-collection.ts +0 -336
- package/src/lib/services/firebase/firestore.service.ts +0 -649
- package/src/lib/services/firebase/index.ts +0 -88
- package/src/lib/services/firebase/messaging.service.ts +0 -672
- package/src/lib/services/firebase/notifications.service.ts +0 -253
- package/src/lib/services/firebase/shared-config.ts +0 -167
- package/src/lib/services/firebase/storage.service.ts +0 -519
- package/src/lib/services/firebase/types.ts +0 -461
- package/src/lib/services/firebase/utils/path-builder.ts +0 -210
- package/src/lib/services/firebase/utils/query-builder.ts +0 -339
- package/src/lib/services/i18n/config.ts +0 -129
- package/src/lib/services/i18n/default-content.ts +0 -640
- package/src/lib/services/i18n/i18n.service.ts +0 -223
- package/src/lib/services/i18n/index.ts +0 -29
- package/src/lib/services/i18n/input-i18n.helper.ts +0 -141
- package/src/lib/services/i18n/translate.pipe.ts +0 -43
- package/src/lib/services/i18n/types.ts +0 -108
- package/src/lib/services/icons.service.ts +0 -122
- package/src/lib/services/image/image.service.ts +0 -328
- package/src/lib/services/image/types.ts +0 -79
- package/src/lib/services/in-app-browser.service.ts +0 -30
- package/src/lib/services/link-processor.service.ts +0 -311
- package/src/lib/services/local-storage.service.ts +0 -39
- package/src/lib/services/locale.service.ts +0 -86
- package/src/lib/services/meta/meta.service.ts +0 -64
- package/src/lib/services/meta/types.ts +0 -13
- package/src/lib/services/modal/modal.service.ts +0 -244
- package/src/lib/services/modal/simple-modal-content.component.ts +0 -138
- package/src/lib/services/modal/types.ts +0 -180
- package/src/lib/services/navigation/navigation.service.ts +0 -255
- package/src/lib/services/navigation/types.ts +0 -86
- package/src/lib/services/pagination/index.ts +0 -13
- package/src/lib/services/pagination/pagination.service.ts +0 -243
- package/src/lib/services/pagination/types.ts +0 -133
- package/src/lib/services/presets/config.ts +0 -51
- package/src/lib/services/presets/index.ts +0 -8
- package/src/lib/services/presets/preset.service.ts +0 -105
- package/src/lib/services/presets/types.ts +0 -41
- package/src/lib/services/qr-generator/qr-generator.service.ts +0 -378
- package/src/lib/services/qr-generator/types.ts +0 -207
- package/src/lib/services/skeleton/config.ts +0 -82
- package/src/lib/services/skeleton/directives/index.ts +0 -1
- package/src/lib/services/skeleton/directives/loading.directive.ts +0 -230
- package/src/lib/services/skeleton/index.ts +0 -30
- package/src/lib/services/skeleton/skeleton.service.ts +0 -220
- package/src/lib/services/skeleton/templates/detail-skeleton.component.ts +0 -166
- package/src/lib/services/skeleton/templates/form-skeleton.component.ts +0 -115
- package/src/lib/services/skeleton/templates/grid-skeleton.component.ts +0 -127
- package/src/lib/services/skeleton/templates/index.ts +0 -6
- package/src/lib/services/skeleton/templates/list-skeleton.component.ts +0 -90
- package/src/lib/services/skeleton/templates/profile-skeleton.component.ts +0 -174
- package/src/lib/services/skeleton/templates/table-skeleton.component.ts +0 -113
- package/src/lib/services/skeleton/types.ts +0 -142
- package/src/lib/services/theme.service.ts +0 -154
- package/src/lib/services/toast.service.ts +0 -42
- package/src/lib/services/types.ts +0 -6
- package/src/lib/shared/constants/storage.ts +0 -2
- package/src/lib/shared/pipes/process-links.pipe.ts +0 -64
- package/src/lib/shared/utils/dom.ts +0 -29
- package/src/lib/shared/utils/form-defaults.ts +0 -119
- package/src/lib/shared/utils/styles.ts +0 -39
- package/src/lib/shared/utils/text.ts +0 -12
- package/src/lib/version.ts +0 -5
- package/src/public-api.ts +0 -352
- package/src/stories/Introduction.mdx +0 -649
- package/src/stories/helpers/mock-services.ts +0 -27
- package/src/stories/helpers/storybook-helpers.ts +0 -89
- package/tsconfig.json +0 -32
- package/tsconfig.lib.json +0 -15
- package/tsconfig.lib.prod.json +0 -10
- package/tsconfig.spec.json +0 -14
- /package/{src/lib/components/molecules/image-crop/index.ts → lib/components/molecules/image-crop/index.d.ts} +0 -0
- /package/{src/lib/config/index.ts → lib/config/index.d.ts} +0 -0
- /package/{src/lib/services/image/index.ts → lib/services/image/index.d.ts} +0 -0
- /package/{src/lib/services/meta/index.ts → lib/services/meta/index.d.ts} +0 -0
- /package/{src/lib/services/navigation/index.ts → lib/services/navigation/index.d.ts} +0 -0
|
@@ -0,0 +1,1081 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { Component, Input, Output, EventEmitter, inject, ChangeDetectionStrategy, ChangeDetectorRef, } from '@angular/core';
|
|
3
|
+
import { FormsModule } from '@angular/forms';
|
|
4
|
+
import { IonButton, IonIcon, IonCheckbox, IonSpinner, IonSelect, IonSelectOption, } from '@ionic/angular/standalone';
|
|
5
|
+
import { addIcons } from 'ionicons';
|
|
6
|
+
import { chevronUpOutline, chevronDownOutline, chevronBackOutline, chevronForwardOutline, documentOutline, } from 'ionicons/icons';
|
|
7
|
+
import { I18nService } from '../../../services/i18n';
|
|
8
|
+
import { DEFAULT_PAGE_SIZE_OPTIONS, } from './types';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "@angular/common";
|
|
11
|
+
addIcons({
|
|
12
|
+
chevronUpOutline,
|
|
13
|
+
chevronDownOutline,
|
|
14
|
+
chevronBackOutline,
|
|
15
|
+
chevronForwardOutline,
|
|
16
|
+
documentOutline,
|
|
17
|
+
});
|
|
18
|
+
/**
|
|
19
|
+
* val-data-table
|
|
20
|
+
*
|
|
21
|
+
* A flexible data table component for displaying tabular data with sorting,
|
|
22
|
+
* pagination, and selection features.
|
|
23
|
+
*
|
|
24
|
+
* @example Basic usage
|
|
25
|
+
* ```html
|
|
26
|
+
* <val-data-table
|
|
27
|
+
* [props]="{
|
|
28
|
+
* columns: [
|
|
29
|
+
* { key: 'name', label: 'Nombre', sortable: true },
|
|
30
|
+
* { key: 'email', label: 'Email' },
|
|
31
|
+
* { key: 'status', label: 'Estado' }
|
|
32
|
+
* ],
|
|
33
|
+
* data: users
|
|
34
|
+
* }"
|
|
35
|
+
* ></val-data-table>
|
|
36
|
+
* ```
|
|
37
|
+
*
|
|
38
|
+
* @example With pagination and selection
|
|
39
|
+
* ```html
|
|
40
|
+
* <val-data-table
|
|
41
|
+
* [props]="{
|
|
42
|
+
* columns: columns,
|
|
43
|
+
* data: participants,
|
|
44
|
+
* showPagination: true,
|
|
45
|
+
* pagination: {
|
|
46
|
+
* page: 0,
|
|
47
|
+
* pageSize: 25,
|
|
48
|
+
* total: totalCount
|
|
49
|
+
* },
|
|
50
|
+
* selection: {
|
|
51
|
+
* mode: 'multiple',
|
|
52
|
+
* selected: selectedParticipants
|
|
53
|
+
* },
|
|
54
|
+
* showSelectionColumn: true
|
|
55
|
+
* }"
|
|
56
|
+
* (selectionChange)="onSelectionChange($event)"
|
|
57
|
+
* (pageChange)="onPageChange($event)"
|
|
58
|
+
* ></val-data-table>
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
export class DataTableComponent {
|
|
62
|
+
constructor() {
|
|
63
|
+
this.rowClick = new EventEmitter();
|
|
64
|
+
this.selectionChange = new EventEmitter();
|
|
65
|
+
this.sortChange = new EventEmitter();
|
|
66
|
+
this.pageChange = new EventEmitter();
|
|
67
|
+
this.displayedData = [];
|
|
68
|
+
this.currentSort = null;
|
|
69
|
+
this.selectedRows = new Set();
|
|
70
|
+
/** Cached visible columns for performance */
|
|
71
|
+
this._visibleColumns = [];
|
|
72
|
+
this.cdr = inject(ChangeDetectorRef);
|
|
73
|
+
this.i18n = inject(I18nService);
|
|
74
|
+
}
|
|
75
|
+
ngOnInit() {
|
|
76
|
+
this.initializeState();
|
|
77
|
+
this.updateDisplayedData();
|
|
78
|
+
}
|
|
79
|
+
ngOnChanges(changes) {
|
|
80
|
+
if (changes['props']) {
|
|
81
|
+
this.initializeState();
|
|
82
|
+
this.updateDisplayedData();
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
initializeState() {
|
|
86
|
+
// Cache visible columns for performance
|
|
87
|
+
this._visibleColumns = this.props.columns.filter(c => c.visible !== false);
|
|
88
|
+
// Initialize sort
|
|
89
|
+
this.currentSort = this.props.sort || null;
|
|
90
|
+
// Initialize selection
|
|
91
|
+
if (this.props.selection?.selected) {
|
|
92
|
+
this.selectedRows = new Set(this.props.selection.selected.map(row => this.getRowId(row)));
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
updateDisplayedData() {
|
|
96
|
+
let data = [...this.props.data];
|
|
97
|
+
// Apply client-side sorting
|
|
98
|
+
if (this.props.clientSort && this.currentSort) {
|
|
99
|
+
data = this.sortData(data);
|
|
100
|
+
}
|
|
101
|
+
// Apply client-side pagination
|
|
102
|
+
if (this.props.clientPagination && this.props.pagination) {
|
|
103
|
+
const start = this.props.pagination.page * this.props.pagination.pageSize;
|
|
104
|
+
const end = start + this.props.pagination.pageSize;
|
|
105
|
+
data = data.slice(start, end);
|
|
106
|
+
}
|
|
107
|
+
this.displayedData = data;
|
|
108
|
+
this.cdr.markForCheck();
|
|
109
|
+
}
|
|
110
|
+
sortData(data) {
|
|
111
|
+
if (!this.currentSort)
|
|
112
|
+
return data;
|
|
113
|
+
const column = this.props.columns.find(c => c.key === this.currentSort?.column);
|
|
114
|
+
if (!column)
|
|
115
|
+
return data;
|
|
116
|
+
return [...data].sort((a, b) => {
|
|
117
|
+
if (column.sortFn) {
|
|
118
|
+
const result = column.sortFn(a, b);
|
|
119
|
+
return this.currentSort?.direction === 'desc' ? -result : result;
|
|
120
|
+
}
|
|
121
|
+
const valueA = this.getCellValue(a, column);
|
|
122
|
+
const valueB = this.getCellValue(b, column);
|
|
123
|
+
let comparison = 0;
|
|
124
|
+
if (valueA == null && valueB == null)
|
|
125
|
+
comparison = 0;
|
|
126
|
+
else if (valueA == null)
|
|
127
|
+
comparison = 1;
|
|
128
|
+
else if (valueB == null)
|
|
129
|
+
comparison = -1;
|
|
130
|
+
else if (typeof valueA === 'string' && typeof valueB === 'string') {
|
|
131
|
+
comparison = valueA.localeCompare(valueB);
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
comparison = valueA < valueB ? -1 : valueA > valueB ? 1 : 0;
|
|
135
|
+
}
|
|
136
|
+
return this.currentSort?.direction === 'desc' ? -comparison : comparison;
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
get visibleColumns() {
|
|
140
|
+
return this._visibleColumns;
|
|
141
|
+
}
|
|
142
|
+
get totalColumns() {
|
|
143
|
+
let count = this.visibleColumns.length;
|
|
144
|
+
if (this.props.showSelectionColumn)
|
|
145
|
+
count++;
|
|
146
|
+
if (this.props.showRowNumbers)
|
|
147
|
+
count++;
|
|
148
|
+
if (this.props.actionsTemplate)
|
|
149
|
+
count++;
|
|
150
|
+
return count;
|
|
151
|
+
}
|
|
152
|
+
get emptyState() {
|
|
153
|
+
const defaultEmptyState = {
|
|
154
|
+
icon: 'document-outline',
|
|
155
|
+
title: this.i18n.t('noData'),
|
|
156
|
+
description: this.i18n.t('noRecordsFound'),
|
|
157
|
+
};
|
|
158
|
+
return this.props.emptyState || defaultEmptyState;
|
|
159
|
+
}
|
|
160
|
+
/** Get actions column label */
|
|
161
|
+
getActionsLabel() {
|
|
162
|
+
return this.props.actionsLabel || this.i18n.t('actions');
|
|
163
|
+
}
|
|
164
|
+
/** Get pagination info text */
|
|
165
|
+
getPaginationInfoText() {
|
|
166
|
+
return `${this.i18n.t('showing')} ${this.paginationStart}-${this.paginationEnd} ${this.i18n.t('of')} ${this.props.pagination?.total}`;
|
|
167
|
+
}
|
|
168
|
+
/** Get per page text */
|
|
169
|
+
getPerPageText(size) {
|
|
170
|
+
return `${size} ${this.i18n.t('perPage')}`;
|
|
171
|
+
}
|
|
172
|
+
/** Get first page aria label */
|
|
173
|
+
getFirstPageLabel() {
|
|
174
|
+
return this.i18n.t('firstPage');
|
|
175
|
+
}
|
|
176
|
+
/** Get previous page aria label */
|
|
177
|
+
getPreviousPageLabel() {
|
|
178
|
+
return this.i18n.t('previousPage');
|
|
179
|
+
}
|
|
180
|
+
/** Get next page aria label */
|
|
181
|
+
getNextPageLabel() {
|
|
182
|
+
return this.i18n.t('nextPage');
|
|
183
|
+
}
|
|
184
|
+
/** Get last page aria label */
|
|
185
|
+
getLastPageLabel() {
|
|
186
|
+
return this.i18n.t('lastPage');
|
|
187
|
+
}
|
|
188
|
+
get pageSizeOptions() {
|
|
189
|
+
return this.props.pagination?.pageSizeOptions || DEFAULT_PAGE_SIZE_OPTIONS;
|
|
190
|
+
}
|
|
191
|
+
get totalPages() {
|
|
192
|
+
if (!this.props.pagination)
|
|
193
|
+
return 1;
|
|
194
|
+
return Math.ceil(this.props.pagination.total / this.props.pagination.pageSize);
|
|
195
|
+
}
|
|
196
|
+
get paginationStart() {
|
|
197
|
+
if (!this.props.pagination)
|
|
198
|
+
return 1;
|
|
199
|
+
return this.props.pagination.page * this.props.pagination.pageSize + 1;
|
|
200
|
+
}
|
|
201
|
+
get paginationEnd() {
|
|
202
|
+
if (!this.props.pagination)
|
|
203
|
+
return this.displayedData.length;
|
|
204
|
+
return Math.min((this.props.pagination.page + 1) * this.props.pagination.pageSize, this.props.pagination.total);
|
|
205
|
+
}
|
|
206
|
+
get isAllSelected() {
|
|
207
|
+
if (this.displayedData.length === 0)
|
|
208
|
+
return false;
|
|
209
|
+
return this.displayedData.every(row => this.isRowSelected(row));
|
|
210
|
+
}
|
|
211
|
+
get isIndeterminate() {
|
|
212
|
+
const selectedCount = this.displayedData.filter(row => this.isRowSelected(row)).length;
|
|
213
|
+
return selectedCount > 0 && selectedCount < this.displayedData.length;
|
|
214
|
+
}
|
|
215
|
+
getCellValue(row, column) {
|
|
216
|
+
const field = column.field || column.key;
|
|
217
|
+
return field.split('.').reduce((obj, key) => obj?.[key], row);
|
|
218
|
+
}
|
|
219
|
+
getFormattedValue(row, column) {
|
|
220
|
+
const value = this.getCellValue(row, column);
|
|
221
|
+
if (column.format) {
|
|
222
|
+
return column.format(value, row);
|
|
223
|
+
}
|
|
224
|
+
return value ?? '';
|
|
225
|
+
}
|
|
226
|
+
getColumnClass(column) {
|
|
227
|
+
const classes = [column.cssClass || ''];
|
|
228
|
+
if (column.sticky) {
|
|
229
|
+
classes.push(`sticky-${column.sticky}`);
|
|
230
|
+
}
|
|
231
|
+
if (column.align) {
|
|
232
|
+
classes.push(`align-${column.align}`);
|
|
233
|
+
}
|
|
234
|
+
return classes.filter(Boolean).join(' ');
|
|
235
|
+
}
|
|
236
|
+
getAriaSort(column) {
|
|
237
|
+
if (!column.sortable)
|
|
238
|
+
return null;
|
|
239
|
+
if (this.currentSort?.column !== column.key)
|
|
240
|
+
return 'none';
|
|
241
|
+
return this.currentSort.direction === 'asc' ? 'ascending' : 'descending';
|
|
242
|
+
}
|
|
243
|
+
getRowNumber(index) {
|
|
244
|
+
const start = this.props.rowNumberStart ?? 1;
|
|
245
|
+
if (this.props.pagination) {
|
|
246
|
+
return start + this.props.pagination.page * this.props.pagination.pageSize + index;
|
|
247
|
+
}
|
|
248
|
+
return start + index;
|
|
249
|
+
}
|
|
250
|
+
getRowId(row) {
|
|
251
|
+
if (this.props.selection?.trackBy) {
|
|
252
|
+
return this.props.selection.trackBy(row);
|
|
253
|
+
}
|
|
254
|
+
return row;
|
|
255
|
+
}
|
|
256
|
+
trackByFn(row) {
|
|
257
|
+
return this.getRowId(row);
|
|
258
|
+
}
|
|
259
|
+
isRowSelected(row) {
|
|
260
|
+
return this.selectedRows.has(this.getRowId(row));
|
|
261
|
+
}
|
|
262
|
+
onSort(column) {
|
|
263
|
+
if (!column.sortable)
|
|
264
|
+
return;
|
|
265
|
+
let direction = 'asc';
|
|
266
|
+
if (this.currentSort?.column === column.key) {
|
|
267
|
+
if (this.currentSort.direction === 'asc') {
|
|
268
|
+
direction = 'desc';
|
|
269
|
+
}
|
|
270
|
+
else {
|
|
271
|
+
direction = null;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
if (direction) {
|
|
275
|
+
this.currentSort = { column: column.key, direction };
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
this.currentSort = null;
|
|
279
|
+
}
|
|
280
|
+
this.sortChange.emit({
|
|
281
|
+
column: column.key,
|
|
282
|
+
direction,
|
|
283
|
+
});
|
|
284
|
+
if (this.props.clientSort) {
|
|
285
|
+
this.updateDisplayedData();
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
onRowClick(row, index, event) {
|
|
289
|
+
if (!this.props.rowClickable)
|
|
290
|
+
return;
|
|
291
|
+
this.rowClick.emit({
|
|
292
|
+
row,
|
|
293
|
+
index,
|
|
294
|
+
event,
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
toggleSelectAll(event) {
|
|
298
|
+
const checked = event.detail.checked;
|
|
299
|
+
if (checked) {
|
|
300
|
+
this.displayedData.forEach(row => {
|
|
301
|
+
this.selectedRows.add(this.getRowId(row));
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
else {
|
|
305
|
+
this.displayedData.forEach(row => {
|
|
306
|
+
this.selectedRows.delete(this.getRowId(row));
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
this.emitSelectionChange(checked ? 'selectAll' : 'deselectAll');
|
|
310
|
+
}
|
|
311
|
+
toggleRowSelection(row, event) {
|
|
312
|
+
const rowId = this.getRowId(row);
|
|
313
|
+
const checked = event.detail.checked;
|
|
314
|
+
if (checked) {
|
|
315
|
+
this.selectedRows.add(rowId);
|
|
316
|
+
}
|
|
317
|
+
else {
|
|
318
|
+
this.selectedRows.delete(rowId);
|
|
319
|
+
}
|
|
320
|
+
this.emitSelectionChange(checked ? 'select' : 'deselect', row);
|
|
321
|
+
}
|
|
322
|
+
selectSingleRow(row) {
|
|
323
|
+
const rowId = this.getRowId(row);
|
|
324
|
+
const wasSelected = this.selectedRows.has(rowId);
|
|
325
|
+
this.selectedRows.clear();
|
|
326
|
+
if (!wasSelected) {
|
|
327
|
+
this.selectedRows.add(rowId);
|
|
328
|
+
this.emitSelectionChange('select', row);
|
|
329
|
+
}
|
|
330
|
+
else {
|
|
331
|
+
this.emitSelectionChange('deselect', row);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
emitSelectionChange(action, changedRow) {
|
|
335
|
+
const selected = this.props.data.filter(row => this.isRowSelected(row));
|
|
336
|
+
this.selectionChange.emit({
|
|
337
|
+
selected,
|
|
338
|
+
changedRow,
|
|
339
|
+
action,
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
goToPage(page) {
|
|
343
|
+
if (!this.props.pagination)
|
|
344
|
+
return;
|
|
345
|
+
const previousPage = this.props.pagination.page;
|
|
346
|
+
const maxPage = this.totalPages - 1;
|
|
347
|
+
const newPage = Math.max(0, Math.min(page, maxPage));
|
|
348
|
+
this.pageChange.emit({
|
|
349
|
+
page: newPage,
|
|
350
|
+
pageSize: this.props.pagination.pageSize,
|
|
351
|
+
previousPage,
|
|
352
|
+
});
|
|
353
|
+
if (this.props.clientPagination) {
|
|
354
|
+
this.props.pagination.page = newPage;
|
|
355
|
+
this.updateDisplayedData();
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
onPageSizeChange(event) {
|
|
359
|
+
if (!this.props.pagination)
|
|
360
|
+
return;
|
|
361
|
+
const newPageSize = event.detail.value;
|
|
362
|
+
const previousPage = this.props.pagination.page;
|
|
363
|
+
// Recalculate page to keep first visible item
|
|
364
|
+
const firstItem = previousPage * this.props.pagination.pageSize;
|
|
365
|
+
const newPage = Math.floor(firstItem / newPageSize);
|
|
366
|
+
this.pageChange.emit({
|
|
367
|
+
page: newPage,
|
|
368
|
+
pageSize: newPageSize,
|
|
369
|
+
previousPage,
|
|
370
|
+
});
|
|
371
|
+
if (this.props.clientPagination) {
|
|
372
|
+
this.props.pagination.pageSize = newPageSize;
|
|
373
|
+
this.props.pagination.page = newPage;
|
|
374
|
+
this.updateDisplayedData();
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DataTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
378
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: DataTableComponent, isStandalone: true, selector: "val-data-table", inputs: { props: "props" }, outputs: { rowClick: "rowClick", selectionChange: "selectionChange", sortChange: "sortChange", pageChange: "pageChange" }, usesOnChanges: true, ngImport: i0, template: `
|
|
379
|
+
<div
|
|
380
|
+
class="data-table-container"
|
|
381
|
+
[class]="props.cssClass"
|
|
382
|
+
[class.size-small]="props.size === 'small'"
|
|
383
|
+
[class.size-medium]="props.size === 'medium' || !props.size"
|
|
384
|
+
[class.size-large]="props.size === 'large'"
|
|
385
|
+
[class.bordered]="props.bordered"
|
|
386
|
+
[class.striped]="props.striped"
|
|
387
|
+
[class.hoverable]="props.hoverable !== false"
|
|
388
|
+
[class.sticky-header]="props.stickyHeader"
|
|
389
|
+
[class.responsive-cards]="props.responsiveMode === 'cards'"
|
|
390
|
+
[class.elevation-none]="props.elevation === 'none'"
|
|
391
|
+
[class.elevation-low]="props.elevation === 'low'"
|
|
392
|
+
[class.elevation-high]="props.elevation === 'high'"
|
|
393
|
+
[class.header-gradient]="props.headerGradient"
|
|
394
|
+
[class.checkbox-circular]="props.checkboxStyle === 'circular'"
|
|
395
|
+
[class.row-highlight-border]="props.rowHighlightStyle === 'border-left'"
|
|
396
|
+
[class.row-highlight-both]="props.rowHighlightStyle === 'both'"
|
|
397
|
+
[style.--max-height]="props.maxHeight"
|
|
398
|
+
>
|
|
399
|
+
<!-- Toolbar slot -->
|
|
400
|
+
<div class="table-toolbar" #toolbarContainer>
|
|
401
|
+
<ng-content select="[toolbar]"></ng-content>
|
|
402
|
+
</div>
|
|
403
|
+
|
|
404
|
+
<!-- Loading overlay -->
|
|
405
|
+
@if (props.loadingState?.loading) {
|
|
406
|
+
<div class="loading-overlay">
|
|
407
|
+
<ion-spinner name="crescent"></ion-spinner>
|
|
408
|
+
@if (props.loadingState?.message) {
|
|
409
|
+
<span class="loading-message">{{ props.loadingState.message }}</span>
|
|
410
|
+
}
|
|
411
|
+
</div>
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
<div class="table-wrapper" [class.is-loading]="props.loadingState?.loading">
|
|
415
|
+
<table
|
|
416
|
+
role="grid"
|
|
417
|
+
[attr.aria-label]="props.ariaLabel"
|
|
418
|
+
>
|
|
419
|
+
@if (props.caption) {
|
|
420
|
+
<caption class="sr-only">{{ props.caption }}</caption>
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
<thead>
|
|
424
|
+
<tr>
|
|
425
|
+
<!-- Selection column -->
|
|
426
|
+
@if (props.showSelectionColumn && props.selection?.mode === 'multiple') {
|
|
427
|
+
<th class="selection-cell">
|
|
428
|
+
<ion-checkbox
|
|
429
|
+
[checked]="isAllSelected"
|
|
430
|
+
[indeterminate]="isIndeterminate"
|
|
431
|
+
(ionChange)="toggleSelectAll($event)"
|
|
432
|
+
></ion-checkbox>
|
|
433
|
+
</th>
|
|
434
|
+
}
|
|
435
|
+
@if (props.showSelectionColumn && props.selection?.mode === 'single') {
|
|
436
|
+
<th class="selection-cell"></th>
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
<!-- Row number column -->
|
|
440
|
+
@if (props.showRowNumbers) {
|
|
441
|
+
<th class="row-number-cell">#</th>
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
<!-- Data columns -->
|
|
445
|
+
@for (column of visibleColumns; track column.key) {
|
|
446
|
+
<th
|
|
447
|
+
[class]="getColumnClass(column)"
|
|
448
|
+
[style.width]="column.width"
|
|
449
|
+
[style.min-width]="column.minWidth"
|
|
450
|
+
[style.max-width]="column.maxWidth"
|
|
451
|
+
[class.sortable]="column.sortable"
|
|
452
|
+
[class.sorted]="currentSort?.column === column.key"
|
|
453
|
+
(click)="column.sortable ? onSort(column) : null"
|
|
454
|
+
[attr.aria-sort]="getAriaSort(column)"
|
|
455
|
+
>
|
|
456
|
+
@if (column.headerTemplate) {
|
|
457
|
+
<ng-container *ngTemplateOutlet="column.headerTemplate; context: { column }"></ng-container>
|
|
458
|
+
} @else {
|
|
459
|
+
<span class="header-content">
|
|
460
|
+
{{ column.label }}
|
|
461
|
+
@if (column.sortable) {
|
|
462
|
+
<span class="sort-icons">
|
|
463
|
+
<ion-icon
|
|
464
|
+
name="chevron-up-outline"
|
|
465
|
+
[class.active]="currentSort?.column === column.key && currentSort?.direction === 'asc'"
|
|
466
|
+
></ion-icon>
|
|
467
|
+
<ion-icon
|
|
468
|
+
name="chevron-down-outline"
|
|
469
|
+
[class.active]="currentSort?.column === column.key && currentSort?.direction === 'desc'"
|
|
470
|
+
></ion-icon>
|
|
471
|
+
</span>
|
|
472
|
+
}
|
|
473
|
+
</span>
|
|
474
|
+
}
|
|
475
|
+
</th>
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
<!-- Actions column -->
|
|
479
|
+
@if (props.actionsTemplate) {
|
|
480
|
+
<th class="actions-cell" [style.width]="props.actionsWidth || '100px'">
|
|
481
|
+
{{ getActionsLabel() }}
|
|
482
|
+
</th>
|
|
483
|
+
}
|
|
484
|
+
</tr>
|
|
485
|
+
</thead>
|
|
486
|
+
|
|
487
|
+
<tbody>
|
|
488
|
+
@if (displayedData.length === 0 && !props.loadingState?.loading) {
|
|
489
|
+
<tr class="empty-row">
|
|
490
|
+
<td [attr.colspan]="totalColumns">
|
|
491
|
+
<div class="empty-state">
|
|
492
|
+
@if (emptyState.template) {
|
|
493
|
+
<ng-container *ngTemplateOutlet="emptyState.template"></ng-container>
|
|
494
|
+
} @else {
|
|
495
|
+
@if (emptyState.icon) {
|
|
496
|
+
<ion-icon [name]="emptyState.icon" class="empty-icon"></ion-icon>
|
|
497
|
+
}
|
|
498
|
+
@if (emptyState.title) {
|
|
499
|
+
<h4 class="empty-title">{{ emptyState.title }}</h4>
|
|
500
|
+
}
|
|
501
|
+
@if (emptyState.description) {
|
|
502
|
+
<p class="empty-description">{{ emptyState.description }}</p>
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
</div>
|
|
506
|
+
</td>
|
|
507
|
+
</tr>
|
|
508
|
+
} @else {
|
|
509
|
+
@for (row of displayedData; track trackByFn(row); let i = $index) {
|
|
510
|
+
<tr
|
|
511
|
+
[class.selected]="isRowSelected(row)"
|
|
512
|
+
[class.clickable]="props.rowClickable"
|
|
513
|
+
(click)="onRowClick(row, i, $event)"
|
|
514
|
+
>
|
|
515
|
+
<!-- Selection cell -->
|
|
516
|
+
@if (props.showSelectionColumn) {
|
|
517
|
+
<td class="selection-cell">
|
|
518
|
+
@if (props.selection?.mode === 'multiple') {
|
|
519
|
+
<ion-checkbox
|
|
520
|
+
[checked]="isRowSelected(row)"
|
|
521
|
+
(ionChange)="toggleRowSelection(row, $event)"
|
|
522
|
+
(click)="$event.stopPropagation()"
|
|
523
|
+
></ion-checkbox>
|
|
524
|
+
} @else if (props.selection?.mode === 'single') {
|
|
525
|
+
<input
|
|
526
|
+
type="radio"
|
|
527
|
+
[checked]="isRowSelected(row)"
|
|
528
|
+
(click)="selectSingleRow(row); $event.stopPropagation()"
|
|
529
|
+
/>
|
|
530
|
+
}
|
|
531
|
+
</td>
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
<!-- Row number -->
|
|
535
|
+
@if (props.showRowNumbers) {
|
|
536
|
+
<td class="row-number-cell">{{ getRowNumber(i) }}</td>
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
<!-- Data cells -->
|
|
540
|
+
@for (column of visibleColumns; track column.key) {
|
|
541
|
+
<td
|
|
542
|
+
[class]="getColumnClass(column)"
|
|
543
|
+
[style.text-align]="column.align"
|
|
544
|
+
>
|
|
545
|
+
@if (column.cellTemplate) {
|
|
546
|
+
<ng-container *ngTemplateOutlet="column.cellTemplate; context: { row, column, value: getCellValue(row, column) }"></ng-container>
|
|
547
|
+
} @else {
|
|
548
|
+
{{ getFormattedValue(row, column) }}
|
|
549
|
+
}
|
|
550
|
+
</td>
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
<!-- Actions cell -->
|
|
554
|
+
@if (props.actionsTemplate) {
|
|
555
|
+
<td class="actions-cell">
|
|
556
|
+
<ng-container *ngTemplateOutlet="props.actionsTemplate; context: { row, index: i }"></ng-container>
|
|
557
|
+
</td>
|
|
558
|
+
}
|
|
559
|
+
</tr>
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
</tbody>
|
|
563
|
+
</table>
|
|
564
|
+
</div>
|
|
565
|
+
|
|
566
|
+
<!-- Card view (responsive mobile) -->
|
|
567
|
+
@if (props.responsiveMode === 'cards') {
|
|
568
|
+
<div class="card-list">
|
|
569
|
+
@if (displayedData.length === 0 && !props.loadingState?.loading) {
|
|
570
|
+
<div class="empty-state">
|
|
571
|
+
@if (emptyState.icon) {
|
|
572
|
+
<ion-icon [name]="emptyState.icon" class="empty-icon"></ion-icon>
|
|
573
|
+
}
|
|
574
|
+
@if (emptyState.title) {
|
|
575
|
+
<h4 class="empty-title">{{ emptyState.title }}</h4>
|
|
576
|
+
}
|
|
577
|
+
@if (emptyState.description) {
|
|
578
|
+
<p class="empty-description">{{ emptyState.description }}</p>
|
|
579
|
+
}
|
|
580
|
+
</div>
|
|
581
|
+
} @else {
|
|
582
|
+
@for (row of displayedData; track trackByFn(row); let i = $index) {
|
|
583
|
+
@if (props.mobileCardTemplate) {
|
|
584
|
+
<ng-container *ngTemplateOutlet="props.mobileCardTemplate; context: { row, index: i, columns: visibleColumns }"></ng-container>
|
|
585
|
+
} @else {
|
|
586
|
+
<div
|
|
587
|
+
class="data-card"
|
|
588
|
+
[class.selected]="isRowSelected(row)"
|
|
589
|
+
[class.clickable]="props.rowClickable"
|
|
590
|
+
(click)="onRowClick(row, i, $event)"
|
|
591
|
+
>
|
|
592
|
+
<!-- Card header with selection -->
|
|
593
|
+
@if (props.showSelectionColumn) {
|
|
594
|
+
<div class="card-header">
|
|
595
|
+
<div class="card-selection">
|
|
596
|
+
@if (props.selection?.mode === 'multiple') {
|
|
597
|
+
<ion-checkbox
|
|
598
|
+
[checked]="isRowSelected(row)"
|
|
599
|
+
(ionChange)="toggleRowSelection(row, $event)"
|
|
600
|
+
(click)="$event.stopPropagation()"
|
|
601
|
+
></ion-checkbox>
|
|
602
|
+
} @else if (props.selection?.mode === 'single') {
|
|
603
|
+
<input
|
|
604
|
+
type="radio"
|
|
605
|
+
[checked]="isRowSelected(row)"
|
|
606
|
+
(click)="selectSingleRow(row); $event.stopPropagation()"
|
|
607
|
+
/>
|
|
608
|
+
}
|
|
609
|
+
</div>
|
|
610
|
+
@if (props.showRowNumbers) {
|
|
611
|
+
<span class="row-number">{{ getRowNumber(i) }}</span>
|
|
612
|
+
}
|
|
613
|
+
</div>
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
<!-- Card body with fields -->
|
|
617
|
+
<div class="card-body">
|
|
618
|
+
@for (column of visibleColumns; track column.key) {
|
|
619
|
+
<div class="card-field">
|
|
620
|
+
<span class="card-field__label">{{ column.label }}</span>
|
|
621
|
+
<span class="card-field__value">
|
|
622
|
+
@if (column.cellTemplate) {
|
|
623
|
+
<ng-container *ngTemplateOutlet="column.cellTemplate; context: { row, column, value: getCellValue(row, column) }"></ng-container>
|
|
624
|
+
} @else {
|
|
625
|
+
{{ getFormattedValue(row, column) }}
|
|
626
|
+
}
|
|
627
|
+
</span>
|
|
628
|
+
</div>
|
|
629
|
+
}
|
|
630
|
+
</div>
|
|
631
|
+
|
|
632
|
+
<!-- Card actions -->
|
|
633
|
+
@if (props.actionsTemplate) {
|
|
634
|
+
<div class="card-actions">
|
|
635
|
+
<ng-container *ngTemplateOutlet="props.actionsTemplate; context: { row, index: i }"></ng-container>
|
|
636
|
+
</div>
|
|
637
|
+
}
|
|
638
|
+
</div>
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
</div>
|
|
643
|
+
}
|
|
644
|
+
|
|
645
|
+
<!-- Pagination -->
|
|
646
|
+
@if (props.showPagination && props.pagination) {
|
|
647
|
+
<div class="pagination-container">
|
|
648
|
+
<div class="pagination-info">
|
|
649
|
+
<span>
|
|
650
|
+
{{ getPaginationInfoText() }}
|
|
651
|
+
</span>
|
|
652
|
+
|
|
653
|
+
@if (pageSizeOptions.length > 1) {
|
|
654
|
+
<ion-select
|
|
655
|
+
[value]="props.pagination.pageSize"
|
|
656
|
+
(ionChange)="onPageSizeChange($event)"
|
|
657
|
+
interface="popover"
|
|
658
|
+
class="page-size-select"
|
|
659
|
+
>
|
|
660
|
+
@for (size of pageSizeOptions; track size) {
|
|
661
|
+
<ion-select-option [value]="size">{{ getPerPageText(size) }}</ion-select-option>
|
|
662
|
+
}
|
|
663
|
+
</ion-select>
|
|
664
|
+
}
|
|
665
|
+
</div>
|
|
666
|
+
|
|
667
|
+
<div class="pagination-controls">
|
|
668
|
+
<ion-button
|
|
669
|
+
fill="clear"
|
|
670
|
+
size="small"
|
|
671
|
+
[disabled]="props.pagination.page === 0"
|
|
672
|
+
(click)="goToPage(0)"
|
|
673
|
+
[attr.aria-label]="getFirstPageLabel()"
|
|
674
|
+
>
|
|
675
|
+
<ion-icon slot="icon-only" name="chevron-back-outline"></ion-icon>
|
|
676
|
+
<ion-icon slot="icon-only" name="chevron-back-outline" style="margin-left: -12px"></ion-icon>
|
|
677
|
+
</ion-button>
|
|
678
|
+
|
|
679
|
+
<ion-button
|
|
680
|
+
fill="clear"
|
|
681
|
+
size="small"
|
|
682
|
+
[disabled]="props.pagination.page === 0"
|
|
683
|
+
(click)="goToPage(props.pagination.page - 1)"
|
|
684
|
+
[attr.aria-label]="getPreviousPageLabel()"
|
|
685
|
+
>
|
|
686
|
+
<ion-icon slot="icon-only" name="chevron-back-outline"></ion-icon>
|
|
687
|
+
</ion-button>
|
|
688
|
+
|
|
689
|
+
<span class="page-indicator">
|
|
690
|
+
{{ props.pagination.page + 1 }} / {{ totalPages }}
|
|
691
|
+
</span>
|
|
692
|
+
|
|
693
|
+
<ion-button
|
|
694
|
+
fill="clear"
|
|
695
|
+
size="small"
|
|
696
|
+
[disabled]="props.pagination.page >= totalPages - 1"
|
|
697
|
+
(click)="goToPage(props.pagination.page + 1)"
|
|
698
|
+
[attr.aria-label]="getNextPageLabel()"
|
|
699
|
+
>
|
|
700
|
+
<ion-icon slot="icon-only" name="chevron-forward-outline"></ion-icon>
|
|
701
|
+
</ion-button>
|
|
702
|
+
|
|
703
|
+
<ion-button
|
|
704
|
+
fill="clear"
|
|
705
|
+
size="small"
|
|
706
|
+
[disabled]="props.pagination.page >= totalPages - 1"
|
|
707
|
+
(click)="goToPage(totalPages - 1)"
|
|
708
|
+
[attr.aria-label]="getLastPageLabel()"
|
|
709
|
+
>
|
|
710
|
+
<ion-icon slot="icon-only" name="chevron-forward-outline"></ion-icon>
|
|
711
|
+
<ion-icon slot="icon-only" name="chevron-forward-outline" style="margin-left: -12px"></ion-icon>
|
|
712
|
+
</ion-button>
|
|
713
|
+
</div>
|
|
714
|
+
</div>
|
|
715
|
+
}
|
|
716
|
+
</div>
|
|
717
|
+
`, isInline: true, styles: [":host{display:block}.data-table-container{--dt-elevation-none: none;--dt-elevation-low: 0 1px 3px rgba(0, 0, 0, .08), 0 1px 2px rgba(0, 0, 0, .04);--dt-elevation-medium: 0 4px 6px -1px rgba(0, 0, 0, .1), 0 2px 4px -1px rgba(0, 0, 0, .06);--dt-elevation-high: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -2px rgba(0, 0, 0, .05);--dt-primary: var(--ion-color-primary, #4f46e5);--dt-primary-rgb: var(--ion-color-primary-rgb, 79, 70, 229);--dt-surface: var(--ion-background-color, #ffffff);--dt-surface-variant: #f8fafc;--dt-border: #e2e8f0;--dt-text-primary: #1e293b;--dt-text-secondary: #64748b;--dt-text-muted: #94a3b8;--dt-gradient-start: #6366f1;--dt-gradient-end: #8b5cf6;--dt-border-radius: 16px;--dt-cell-padding-x: 16px;--dt-cell-padding-y: 14px;--dt-header-padding-y: 12px}.data-table-container{position:relative;background:var(--dt-surface);border-radius:var(--dt-border-radius);box-shadow:var(--dt-elevation-medium);border:1px solid var(--dt-border);overflow:hidden}.data-table-container.elevation-none{box-shadow:var(--dt-elevation-none)}.data-table-container.elevation-low{box-shadow:var(--dt-elevation-low)}.data-table-container.elevation-high{box-shadow:var(--dt-elevation-high)}.data-table-container.header-gradient:before{content:\"\";position:absolute;top:0;left:0;right:0;height:4px;background:linear-gradient(90deg,var(--dt-gradient-start),var(--dt-gradient-end));border-radius:var(--dt-border-radius) var(--dt-border-radius) 0 0;z-index:2}.loading-overlay{position:absolute;inset:0;background:#ffffffe6;backdrop-filter:blur(2px);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;z-index:10}.loading-overlay ion-spinner{--color: var(--dt-primary);width:32px;height:32px}.loading-message{font-size:14px;font-weight:500;color:var(--dt-text-secondary)}.table-wrapper{overflow-x:auto;max-height:var(--max-height)}.table-wrapper.is-loading{opacity:.5;pointer-events:none}.table-wrapper::-webkit-scrollbar{height:8px;width:8px}.table-wrapper::-webkit-scrollbar-track{background:var(--dt-surface-variant);border-radius:4px}.table-wrapper::-webkit-scrollbar-thumb{background:var(--dt-border);border-radius:4px}.table-wrapper::-webkit-scrollbar-thumb:hover{background:var(--dt-text-muted)}table{width:100%;border-collapse:collapse;font-size:14px}th,td{padding:var(--dt-cell-padding-y) var(--dt-cell-padding-x);text-align:left;vertical-align:middle}thead{background:var(--dt-surface-variant)}thead th{font-weight:600;font-size:13px;color:var(--dt-text-secondary);white-space:nowrap;position:relative;border-bottom:1px solid var(--dt-border);padding:var(--dt-header-padding-y) var(--dt-cell-padding-x);transition:all .2s ease}thead th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}thead th.sortable:hover{background:#00000008;color:var(--dt-text-primary)}thead th.sorted{color:var(--dt-primary);background:rgba(var(--dt-primary-rgb),.04)}.header-content{display:flex;align-items:center;gap:8px}.sort-icons{display:flex;flex-direction:column;gap:0;opacity:.4;transition:opacity .2s ease}.sortable:hover .sort-icons{opacity:.7}.sorted .sort-icons{opacity:1}.sort-icons ion-icon{font-size:12px;color:var(--dt-text-muted);margin:-3px 0;transition:all .2s ease}.sort-icons ion-icon.active{color:var(--dt-primary);transform:scale(1.2)}tbody tr{border-bottom:1px solid var(--dt-border)}tbody tr:last-child{border-bottom:none}tbody tr.clickable{cursor:pointer}tbody tr.selected{background:rgba(var(--dt-primary-rgb),.06)}tbody td{color:var(--dt-text-primary);font-size:14px}.hoverable tbody tr:hover:not(.empty-row){background:var(--dt-surface-variant)}.hoverable tbody tr:hover:not(.empty-row).selected{background:rgba(var(--dt-primary-rgb),.08)}.align-left{text-align:left}.align-center{text-align:center}.align-right{text-align:right}.selection-cell{width:52px;min-width:52px;max-width:52px;text-align:center;padding:8px 12px;box-sizing:border-box}.selection-cell ion-checkbox{--size: 20px;--border-radius: 50%;--border-width: 2px;--border-color: var(--dt-border);--border-color-checked: var(--dt-primary);--background: transparent;--background-checked: var(--dt-primary);--checkmark-color: white;--checkmark-width: 2px;margin:0;display:block}.selection-cell ion-checkbox::part(container){border-radius:50%}.selection-cell input[type=radio]{width:20px;height:20px;cursor:pointer;accent-color:var(--dt-primary);margin:0;display:block}.checkbox-circular .selection-cell ion-checkbox{--border-radius: 50%}.checkbox-circular .selection-cell ion-checkbox::part(container){border-radius:50%}.row-number-cell{width:60px;text-align:center;color:var(--dt-text-muted);font-size:12px;font-weight:500}.actions-cell{text-align:center;white-space:nowrap}.sticky-start{position:sticky;left:0;background:inherit;z-index:1;box-shadow:2px 0 4px #0000000d}.sticky-end{position:sticky;right:0;background:inherit;z-index:1;box-shadow:-2px 0 4px #0000000d}.empty-row td{padding:64px 16px}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;color:var(--dt-text-secondary)}.empty-icon{font-size:56px;margin-bottom:20px;opacity:.4;color:var(--dt-text-muted)}.empty-title{font-size:18px;font-weight:600;margin:0 0 8px;color:var(--dt-text-primary)}.empty-description{font-size:14px;margin:0;max-width:320px;color:var(--dt-text-secondary);line-height:1.5}.pagination-container{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-top:1px solid var(--dt-border);background:var(--dt-surface);flex-wrap:wrap;gap:16px}.pagination-info{display:flex;align-items:center;gap:20px;font-size:14px;color:var(--dt-text-secondary)}.pagination-info span{font-weight:500}.page-size-select{--padding-start: 12px;--padding-end: 12px;font-size:14px;min-width:140px;--background: var(--dt-surface-variant);--border-radius: 8px}.pagination-controls{display:flex;align-items:center;gap:8px}.pagination-controls ion-button{--padding-start: 10px;--padding-end: 10px;--border-radius: 8px;--background: var(--dt-surface-variant);--background-hover: var(--dt-border);--color: var(--dt-text-secondary);--color-hover: var(--dt-text-primary);margin:0;height:36px;min-width:36px}.pagination-controls ion-button:disabled{opacity:.4}.pagination-controls ion-button ion-icon{font-size:16px}.page-indicator{padding:0 16px;font-size:14px;color:var(--dt-text-primary);font-weight:600;background:var(--dt-surface-variant);border-radius:8px;height:36px;display:flex;align-items:center;min-width:80px;justify-content:center}.bordered th,.bordered td{border:1px solid var(--dt-border)}.striped tbody tr:nth-child(2n){background:var(--dt-surface-variant)}.striped tbody tr:nth-child(2n).selected{background:rgba(var(--dt-primary-rgb),.08)}.sticky-header .table-wrapper{overflow-y:auto}.sticky-header thead{position:sticky;top:0;z-index:5;box-shadow:0 1px 0 var(--dt-border)}.size-small{--dt-cell-padding-x: 12px;--dt-cell-padding-y: 10px;--dt-header-padding-y: 10px}.size-small th,.size-small td{font-size:13px}.size-small thead th{font-size:12px}.size-small .selection-cell{width:44px;padding:6px 8px}.size-small .selection-cell ion-checkbox{--size: 18px}.size-small .row-number-cell{width:48px;font-size:11px}.size-small .pagination-container{padding:12px 16px}.size-small .pagination-info,.size-small .page-indicator{font-size:13px}.size-small .pagination-controls ion-button{height:32px;min-width:32px}.size-small .page-indicator{height:32px;min-width:70px}.size-large{--dt-cell-padding-x: 20px;--dt-cell-padding-y: 18px;--dt-header-padding-y: 16px}.size-large th,.size-large td{font-size:15px}.size-large thead th{font-size:14px}.size-large .selection-cell{width:60px;padding:12px 16px}.size-large .selection-cell ion-checkbox{--size: 24px}.size-large .row-number-cell{width:72px;font-size:14px}.size-large .pagination-container{padding:20px 24px}.size-large .pagination-info,.size-large .page-indicator{font-size:15px}.size-large .pagination-controls ion-button{height:40px;min-width:40px}.size-large .page-indicator{height:40px;min-width:90px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media (max-width: 768px){.data-table-container{--dt-border-radius: 12px}.pagination-container{flex-direction:column;align-items:stretch;gap:12px}.pagination-info{justify-content:space-between}.pagination-controls{justify-content:center}}.table-toolbar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:20px;border-bottom:1px solid var(--dt-border);background:var(--dt-surface);flex-wrap:wrap}.table-toolbar:empty{display:none}@media (max-width: 576px){.table-toolbar{flex-direction:column;align-items:stretch;padding:16px}}.status-badge{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:9999px;font-size:12px;font-weight:600;white-space:nowrap;letter-spacing:.025em}.status-badge--success{background:#dcfce7;color:#15803d}.status-badge--warning{background:#fef3c7;color:#b45309}.status-badge--danger{background:#fee2e2;color:#dc2626}.status-badge--primary{background:#e0e7ff;color:#4338ca}.status-badge--secondary{background:#f1f5f9;color:#475569}.status-badge--medium{background:#f1f5f9;color:#64748b}.status-badge--tertiary{background:#f3e8ff;color:#7c3aed}.status-badge--filled.status-badge--success{background:#22c55e;color:#fff}.status-badge--filled.status-badge--warning{background:#f59e0b;color:#fff}.status-badge--filled.status-badge--danger{background:#ef4444;color:#fff}.status-badge--filled.status-badge--primary{background:var(--dt-primary);color:#fff}.status-badge--outlined{background:transparent;border:1.5px solid currentColor}.status-badge--outlined.status-badge--success{color:#16a34a}.status-badge--outlined.status-badge--warning{color:#d97706}.status-badge--outlined.status-badge--danger{color:#dc2626}.status-badge--outlined.status-badge--primary{color:var(--dt-primary)}.action-buttons{display:flex;gap:6px;justify-content:center}.action-buttons ion-button{--padding-start: 8px;--padding-end: 8px;--border-radius: 8px;margin:0}.action-buttons ion-button ion-icon{font-size:18px}.card-list{display:none;padding:12px;gap:12px}.data-card{background:var(--dt-surface);border:1px solid var(--dt-border);border-radius:12px;padding:16px;margin-bottom:12px;transition:all .2s ease}.data-card.selected{border-color:var(--dt-primary);background:rgba(var(--dt-primary-rgb),.04);box-shadow:0 0 0 1px var(--dt-primary)}.data-card.clickable{cursor:pointer}.data-card.clickable:hover{box-shadow:var(--dt-elevation-medium);transform:translateY(-2px)}.data-card.clickable:active{transform:translateY(0)}.card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid var(--dt-border)}.card-selection{display:flex;align-items:center}.card-body{display:flex;flex-direction:column;gap:12px}.card-field{display:flex;justify-content:space-between;align-items:flex-start;gap:16px}.card-field__label{font-size:12px;font-weight:600;color:var(--dt-text-muted);flex-shrink:0}.card-field__value{font-size:14px;color:var(--dt-text-primary);text-align:right;word-break:break-word;font-weight:500}.card-actions{display:flex;justify-content:flex-end;margin-top:16px;padding-top:12px;border-top:1px solid var(--dt-border)}@media (max-width: 768px){.responsive-cards .table-wrapper{display:none}.responsive-cards .card-list{display:block}}@media (prefers-color-scheme: dark){.data-table-container{--dt-surface: #1e293b;--dt-surface-variant: #334155;--dt-border: #475569;--dt-text-primary: #f1f5f9;--dt-text-secondary: #94a3b8;--dt-text-muted: #64748b}.loading-overlay{background:#1e293be6}.status-badge--success{background:#22c55e33;color:#4ade80}.status-badge--warning{background:#f59e0b33;color:#fbbf24}.status-badge--danger{background:#ef444433;color:#f87171}.status-badge--primary{background:#6366f133;color:#a5b4fc}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonCheckbox, selector: "ion-checkbox", inputs: ["checked", "color", "disabled", "errorText", "helperText", "indeterminate", "justify", "labelPlacement", "mode", "name", "value"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: IonSelect, selector: "ion-select", inputs: ["cancelText", "color", "compareWith", "disabled", "errorText", "expandedIcon", "fill", "helperText", "interface", "interfaceOptions", "justify", "label", "labelPlacement", "mode", "multiple", "name", "okText", "placeholder", "selectedText", "shape", "toggleIcon", "value"] }, { kind: "component", type: IonSelectOption, selector: "ion-select-option", inputs: ["disabled", "value"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
718
|
+
}
|
|
719
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DataTableComponent, decorators: [{
|
|
720
|
+
type: Component,
|
|
721
|
+
args: [{ selector: 'val-data-table', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
722
|
+
CommonModule,
|
|
723
|
+
FormsModule,
|
|
724
|
+
IonButton,
|
|
725
|
+
IonIcon,
|
|
726
|
+
IonCheckbox,
|
|
727
|
+
IonSpinner,
|
|
728
|
+
IonSelect,
|
|
729
|
+
IonSelectOption,
|
|
730
|
+
], template: `
|
|
731
|
+
<div
|
|
732
|
+
class="data-table-container"
|
|
733
|
+
[class]="props.cssClass"
|
|
734
|
+
[class.size-small]="props.size === 'small'"
|
|
735
|
+
[class.size-medium]="props.size === 'medium' || !props.size"
|
|
736
|
+
[class.size-large]="props.size === 'large'"
|
|
737
|
+
[class.bordered]="props.bordered"
|
|
738
|
+
[class.striped]="props.striped"
|
|
739
|
+
[class.hoverable]="props.hoverable !== false"
|
|
740
|
+
[class.sticky-header]="props.stickyHeader"
|
|
741
|
+
[class.responsive-cards]="props.responsiveMode === 'cards'"
|
|
742
|
+
[class.elevation-none]="props.elevation === 'none'"
|
|
743
|
+
[class.elevation-low]="props.elevation === 'low'"
|
|
744
|
+
[class.elevation-high]="props.elevation === 'high'"
|
|
745
|
+
[class.header-gradient]="props.headerGradient"
|
|
746
|
+
[class.checkbox-circular]="props.checkboxStyle === 'circular'"
|
|
747
|
+
[class.row-highlight-border]="props.rowHighlightStyle === 'border-left'"
|
|
748
|
+
[class.row-highlight-both]="props.rowHighlightStyle === 'both'"
|
|
749
|
+
[style.--max-height]="props.maxHeight"
|
|
750
|
+
>
|
|
751
|
+
<!-- Toolbar slot -->
|
|
752
|
+
<div class="table-toolbar" #toolbarContainer>
|
|
753
|
+
<ng-content select="[toolbar]"></ng-content>
|
|
754
|
+
</div>
|
|
755
|
+
|
|
756
|
+
<!-- Loading overlay -->
|
|
757
|
+
@if (props.loadingState?.loading) {
|
|
758
|
+
<div class="loading-overlay">
|
|
759
|
+
<ion-spinner name="crescent"></ion-spinner>
|
|
760
|
+
@if (props.loadingState?.message) {
|
|
761
|
+
<span class="loading-message">{{ props.loadingState.message }}</span>
|
|
762
|
+
}
|
|
763
|
+
</div>
|
|
764
|
+
}
|
|
765
|
+
|
|
766
|
+
<div class="table-wrapper" [class.is-loading]="props.loadingState?.loading">
|
|
767
|
+
<table
|
|
768
|
+
role="grid"
|
|
769
|
+
[attr.aria-label]="props.ariaLabel"
|
|
770
|
+
>
|
|
771
|
+
@if (props.caption) {
|
|
772
|
+
<caption class="sr-only">{{ props.caption }}</caption>
|
|
773
|
+
}
|
|
774
|
+
|
|
775
|
+
<thead>
|
|
776
|
+
<tr>
|
|
777
|
+
<!-- Selection column -->
|
|
778
|
+
@if (props.showSelectionColumn && props.selection?.mode === 'multiple') {
|
|
779
|
+
<th class="selection-cell">
|
|
780
|
+
<ion-checkbox
|
|
781
|
+
[checked]="isAllSelected"
|
|
782
|
+
[indeterminate]="isIndeterminate"
|
|
783
|
+
(ionChange)="toggleSelectAll($event)"
|
|
784
|
+
></ion-checkbox>
|
|
785
|
+
</th>
|
|
786
|
+
}
|
|
787
|
+
@if (props.showSelectionColumn && props.selection?.mode === 'single') {
|
|
788
|
+
<th class="selection-cell"></th>
|
|
789
|
+
}
|
|
790
|
+
|
|
791
|
+
<!-- Row number column -->
|
|
792
|
+
@if (props.showRowNumbers) {
|
|
793
|
+
<th class="row-number-cell">#</th>
|
|
794
|
+
}
|
|
795
|
+
|
|
796
|
+
<!-- Data columns -->
|
|
797
|
+
@for (column of visibleColumns; track column.key) {
|
|
798
|
+
<th
|
|
799
|
+
[class]="getColumnClass(column)"
|
|
800
|
+
[style.width]="column.width"
|
|
801
|
+
[style.min-width]="column.minWidth"
|
|
802
|
+
[style.max-width]="column.maxWidth"
|
|
803
|
+
[class.sortable]="column.sortable"
|
|
804
|
+
[class.sorted]="currentSort?.column === column.key"
|
|
805
|
+
(click)="column.sortable ? onSort(column) : null"
|
|
806
|
+
[attr.aria-sort]="getAriaSort(column)"
|
|
807
|
+
>
|
|
808
|
+
@if (column.headerTemplate) {
|
|
809
|
+
<ng-container *ngTemplateOutlet="column.headerTemplate; context: { column }"></ng-container>
|
|
810
|
+
} @else {
|
|
811
|
+
<span class="header-content">
|
|
812
|
+
{{ column.label }}
|
|
813
|
+
@if (column.sortable) {
|
|
814
|
+
<span class="sort-icons">
|
|
815
|
+
<ion-icon
|
|
816
|
+
name="chevron-up-outline"
|
|
817
|
+
[class.active]="currentSort?.column === column.key && currentSort?.direction === 'asc'"
|
|
818
|
+
></ion-icon>
|
|
819
|
+
<ion-icon
|
|
820
|
+
name="chevron-down-outline"
|
|
821
|
+
[class.active]="currentSort?.column === column.key && currentSort?.direction === 'desc'"
|
|
822
|
+
></ion-icon>
|
|
823
|
+
</span>
|
|
824
|
+
}
|
|
825
|
+
</span>
|
|
826
|
+
}
|
|
827
|
+
</th>
|
|
828
|
+
}
|
|
829
|
+
|
|
830
|
+
<!-- Actions column -->
|
|
831
|
+
@if (props.actionsTemplate) {
|
|
832
|
+
<th class="actions-cell" [style.width]="props.actionsWidth || '100px'">
|
|
833
|
+
{{ getActionsLabel() }}
|
|
834
|
+
</th>
|
|
835
|
+
}
|
|
836
|
+
</tr>
|
|
837
|
+
</thead>
|
|
838
|
+
|
|
839
|
+
<tbody>
|
|
840
|
+
@if (displayedData.length === 0 && !props.loadingState?.loading) {
|
|
841
|
+
<tr class="empty-row">
|
|
842
|
+
<td [attr.colspan]="totalColumns">
|
|
843
|
+
<div class="empty-state">
|
|
844
|
+
@if (emptyState.template) {
|
|
845
|
+
<ng-container *ngTemplateOutlet="emptyState.template"></ng-container>
|
|
846
|
+
} @else {
|
|
847
|
+
@if (emptyState.icon) {
|
|
848
|
+
<ion-icon [name]="emptyState.icon" class="empty-icon"></ion-icon>
|
|
849
|
+
}
|
|
850
|
+
@if (emptyState.title) {
|
|
851
|
+
<h4 class="empty-title">{{ emptyState.title }}</h4>
|
|
852
|
+
}
|
|
853
|
+
@if (emptyState.description) {
|
|
854
|
+
<p class="empty-description">{{ emptyState.description }}</p>
|
|
855
|
+
}
|
|
856
|
+
}
|
|
857
|
+
</div>
|
|
858
|
+
</td>
|
|
859
|
+
</tr>
|
|
860
|
+
} @else {
|
|
861
|
+
@for (row of displayedData; track trackByFn(row); let i = $index) {
|
|
862
|
+
<tr
|
|
863
|
+
[class.selected]="isRowSelected(row)"
|
|
864
|
+
[class.clickable]="props.rowClickable"
|
|
865
|
+
(click)="onRowClick(row, i, $event)"
|
|
866
|
+
>
|
|
867
|
+
<!-- Selection cell -->
|
|
868
|
+
@if (props.showSelectionColumn) {
|
|
869
|
+
<td class="selection-cell">
|
|
870
|
+
@if (props.selection?.mode === 'multiple') {
|
|
871
|
+
<ion-checkbox
|
|
872
|
+
[checked]="isRowSelected(row)"
|
|
873
|
+
(ionChange)="toggleRowSelection(row, $event)"
|
|
874
|
+
(click)="$event.stopPropagation()"
|
|
875
|
+
></ion-checkbox>
|
|
876
|
+
} @else if (props.selection?.mode === 'single') {
|
|
877
|
+
<input
|
|
878
|
+
type="radio"
|
|
879
|
+
[checked]="isRowSelected(row)"
|
|
880
|
+
(click)="selectSingleRow(row); $event.stopPropagation()"
|
|
881
|
+
/>
|
|
882
|
+
}
|
|
883
|
+
</td>
|
|
884
|
+
}
|
|
885
|
+
|
|
886
|
+
<!-- Row number -->
|
|
887
|
+
@if (props.showRowNumbers) {
|
|
888
|
+
<td class="row-number-cell">{{ getRowNumber(i) }}</td>
|
|
889
|
+
}
|
|
890
|
+
|
|
891
|
+
<!-- Data cells -->
|
|
892
|
+
@for (column of visibleColumns; track column.key) {
|
|
893
|
+
<td
|
|
894
|
+
[class]="getColumnClass(column)"
|
|
895
|
+
[style.text-align]="column.align"
|
|
896
|
+
>
|
|
897
|
+
@if (column.cellTemplate) {
|
|
898
|
+
<ng-container *ngTemplateOutlet="column.cellTemplate; context: { row, column, value: getCellValue(row, column) }"></ng-container>
|
|
899
|
+
} @else {
|
|
900
|
+
{{ getFormattedValue(row, column) }}
|
|
901
|
+
}
|
|
902
|
+
</td>
|
|
903
|
+
}
|
|
904
|
+
|
|
905
|
+
<!-- Actions cell -->
|
|
906
|
+
@if (props.actionsTemplate) {
|
|
907
|
+
<td class="actions-cell">
|
|
908
|
+
<ng-container *ngTemplateOutlet="props.actionsTemplate; context: { row, index: i }"></ng-container>
|
|
909
|
+
</td>
|
|
910
|
+
}
|
|
911
|
+
</tr>
|
|
912
|
+
}
|
|
913
|
+
}
|
|
914
|
+
</tbody>
|
|
915
|
+
</table>
|
|
916
|
+
</div>
|
|
917
|
+
|
|
918
|
+
<!-- Card view (responsive mobile) -->
|
|
919
|
+
@if (props.responsiveMode === 'cards') {
|
|
920
|
+
<div class="card-list">
|
|
921
|
+
@if (displayedData.length === 0 && !props.loadingState?.loading) {
|
|
922
|
+
<div class="empty-state">
|
|
923
|
+
@if (emptyState.icon) {
|
|
924
|
+
<ion-icon [name]="emptyState.icon" class="empty-icon"></ion-icon>
|
|
925
|
+
}
|
|
926
|
+
@if (emptyState.title) {
|
|
927
|
+
<h4 class="empty-title">{{ emptyState.title }}</h4>
|
|
928
|
+
}
|
|
929
|
+
@if (emptyState.description) {
|
|
930
|
+
<p class="empty-description">{{ emptyState.description }}</p>
|
|
931
|
+
}
|
|
932
|
+
</div>
|
|
933
|
+
} @else {
|
|
934
|
+
@for (row of displayedData; track trackByFn(row); let i = $index) {
|
|
935
|
+
@if (props.mobileCardTemplate) {
|
|
936
|
+
<ng-container *ngTemplateOutlet="props.mobileCardTemplate; context: { row, index: i, columns: visibleColumns }"></ng-container>
|
|
937
|
+
} @else {
|
|
938
|
+
<div
|
|
939
|
+
class="data-card"
|
|
940
|
+
[class.selected]="isRowSelected(row)"
|
|
941
|
+
[class.clickable]="props.rowClickable"
|
|
942
|
+
(click)="onRowClick(row, i, $event)"
|
|
943
|
+
>
|
|
944
|
+
<!-- Card header with selection -->
|
|
945
|
+
@if (props.showSelectionColumn) {
|
|
946
|
+
<div class="card-header">
|
|
947
|
+
<div class="card-selection">
|
|
948
|
+
@if (props.selection?.mode === 'multiple') {
|
|
949
|
+
<ion-checkbox
|
|
950
|
+
[checked]="isRowSelected(row)"
|
|
951
|
+
(ionChange)="toggleRowSelection(row, $event)"
|
|
952
|
+
(click)="$event.stopPropagation()"
|
|
953
|
+
></ion-checkbox>
|
|
954
|
+
} @else if (props.selection?.mode === 'single') {
|
|
955
|
+
<input
|
|
956
|
+
type="radio"
|
|
957
|
+
[checked]="isRowSelected(row)"
|
|
958
|
+
(click)="selectSingleRow(row); $event.stopPropagation()"
|
|
959
|
+
/>
|
|
960
|
+
}
|
|
961
|
+
</div>
|
|
962
|
+
@if (props.showRowNumbers) {
|
|
963
|
+
<span class="row-number">{{ getRowNumber(i) }}</span>
|
|
964
|
+
}
|
|
965
|
+
</div>
|
|
966
|
+
}
|
|
967
|
+
|
|
968
|
+
<!-- Card body with fields -->
|
|
969
|
+
<div class="card-body">
|
|
970
|
+
@for (column of visibleColumns; track column.key) {
|
|
971
|
+
<div class="card-field">
|
|
972
|
+
<span class="card-field__label">{{ column.label }}</span>
|
|
973
|
+
<span class="card-field__value">
|
|
974
|
+
@if (column.cellTemplate) {
|
|
975
|
+
<ng-container *ngTemplateOutlet="column.cellTemplate; context: { row, column, value: getCellValue(row, column) }"></ng-container>
|
|
976
|
+
} @else {
|
|
977
|
+
{{ getFormattedValue(row, column) }}
|
|
978
|
+
}
|
|
979
|
+
</span>
|
|
980
|
+
</div>
|
|
981
|
+
}
|
|
982
|
+
</div>
|
|
983
|
+
|
|
984
|
+
<!-- Card actions -->
|
|
985
|
+
@if (props.actionsTemplate) {
|
|
986
|
+
<div class="card-actions">
|
|
987
|
+
<ng-container *ngTemplateOutlet="props.actionsTemplate; context: { row, index: i }"></ng-container>
|
|
988
|
+
</div>
|
|
989
|
+
}
|
|
990
|
+
</div>
|
|
991
|
+
}
|
|
992
|
+
}
|
|
993
|
+
}
|
|
994
|
+
</div>
|
|
995
|
+
}
|
|
996
|
+
|
|
997
|
+
<!-- Pagination -->
|
|
998
|
+
@if (props.showPagination && props.pagination) {
|
|
999
|
+
<div class="pagination-container">
|
|
1000
|
+
<div class="pagination-info">
|
|
1001
|
+
<span>
|
|
1002
|
+
{{ getPaginationInfoText() }}
|
|
1003
|
+
</span>
|
|
1004
|
+
|
|
1005
|
+
@if (pageSizeOptions.length > 1) {
|
|
1006
|
+
<ion-select
|
|
1007
|
+
[value]="props.pagination.pageSize"
|
|
1008
|
+
(ionChange)="onPageSizeChange($event)"
|
|
1009
|
+
interface="popover"
|
|
1010
|
+
class="page-size-select"
|
|
1011
|
+
>
|
|
1012
|
+
@for (size of pageSizeOptions; track size) {
|
|
1013
|
+
<ion-select-option [value]="size">{{ getPerPageText(size) }}</ion-select-option>
|
|
1014
|
+
}
|
|
1015
|
+
</ion-select>
|
|
1016
|
+
}
|
|
1017
|
+
</div>
|
|
1018
|
+
|
|
1019
|
+
<div class="pagination-controls">
|
|
1020
|
+
<ion-button
|
|
1021
|
+
fill="clear"
|
|
1022
|
+
size="small"
|
|
1023
|
+
[disabled]="props.pagination.page === 0"
|
|
1024
|
+
(click)="goToPage(0)"
|
|
1025
|
+
[attr.aria-label]="getFirstPageLabel()"
|
|
1026
|
+
>
|
|
1027
|
+
<ion-icon slot="icon-only" name="chevron-back-outline"></ion-icon>
|
|
1028
|
+
<ion-icon slot="icon-only" name="chevron-back-outline" style="margin-left: -12px"></ion-icon>
|
|
1029
|
+
</ion-button>
|
|
1030
|
+
|
|
1031
|
+
<ion-button
|
|
1032
|
+
fill="clear"
|
|
1033
|
+
size="small"
|
|
1034
|
+
[disabled]="props.pagination.page === 0"
|
|
1035
|
+
(click)="goToPage(props.pagination.page - 1)"
|
|
1036
|
+
[attr.aria-label]="getPreviousPageLabel()"
|
|
1037
|
+
>
|
|
1038
|
+
<ion-icon slot="icon-only" name="chevron-back-outline"></ion-icon>
|
|
1039
|
+
</ion-button>
|
|
1040
|
+
|
|
1041
|
+
<span class="page-indicator">
|
|
1042
|
+
{{ props.pagination.page + 1 }} / {{ totalPages }}
|
|
1043
|
+
</span>
|
|
1044
|
+
|
|
1045
|
+
<ion-button
|
|
1046
|
+
fill="clear"
|
|
1047
|
+
size="small"
|
|
1048
|
+
[disabled]="props.pagination.page >= totalPages - 1"
|
|
1049
|
+
(click)="goToPage(props.pagination.page + 1)"
|
|
1050
|
+
[attr.aria-label]="getNextPageLabel()"
|
|
1051
|
+
>
|
|
1052
|
+
<ion-icon slot="icon-only" name="chevron-forward-outline"></ion-icon>
|
|
1053
|
+
</ion-button>
|
|
1054
|
+
|
|
1055
|
+
<ion-button
|
|
1056
|
+
fill="clear"
|
|
1057
|
+
size="small"
|
|
1058
|
+
[disabled]="props.pagination.page >= totalPages - 1"
|
|
1059
|
+
(click)="goToPage(totalPages - 1)"
|
|
1060
|
+
[attr.aria-label]="getLastPageLabel()"
|
|
1061
|
+
>
|
|
1062
|
+
<ion-icon slot="icon-only" name="chevron-forward-outline"></ion-icon>
|
|
1063
|
+
<ion-icon slot="icon-only" name="chevron-forward-outline" style="margin-left: -12px"></ion-icon>
|
|
1064
|
+
</ion-button>
|
|
1065
|
+
</div>
|
|
1066
|
+
</div>
|
|
1067
|
+
}
|
|
1068
|
+
</div>
|
|
1069
|
+
`, styles: [":host{display:block}.data-table-container{--dt-elevation-none: none;--dt-elevation-low: 0 1px 3px rgba(0, 0, 0, .08), 0 1px 2px rgba(0, 0, 0, .04);--dt-elevation-medium: 0 4px 6px -1px rgba(0, 0, 0, .1), 0 2px 4px -1px rgba(0, 0, 0, .06);--dt-elevation-high: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -2px rgba(0, 0, 0, .05);--dt-primary: var(--ion-color-primary, #4f46e5);--dt-primary-rgb: var(--ion-color-primary-rgb, 79, 70, 229);--dt-surface: var(--ion-background-color, #ffffff);--dt-surface-variant: #f8fafc;--dt-border: #e2e8f0;--dt-text-primary: #1e293b;--dt-text-secondary: #64748b;--dt-text-muted: #94a3b8;--dt-gradient-start: #6366f1;--dt-gradient-end: #8b5cf6;--dt-border-radius: 16px;--dt-cell-padding-x: 16px;--dt-cell-padding-y: 14px;--dt-header-padding-y: 12px}.data-table-container{position:relative;background:var(--dt-surface);border-radius:var(--dt-border-radius);box-shadow:var(--dt-elevation-medium);border:1px solid var(--dt-border);overflow:hidden}.data-table-container.elevation-none{box-shadow:var(--dt-elevation-none)}.data-table-container.elevation-low{box-shadow:var(--dt-elevation-low)}.data-table-container.elevation-high{box-shadow:var(--dt-elevation-high)}.data-table-container.header-gradient:before{content:\"\";position:absolute;top:0;left:0;right:0;height:4px;background:linear-gradient(90deg,var(--dt-gradient-start),var(--dt-gradient-end));border-radius:var(--dt-border-radius) var(--dt-border-radius) 0 0;z-index:2}.loading-overlay{position:absolute;inset:0;background:#ffffffe6;backdrop-filter:blur(2px);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;z-index:10}.loading-overlay ion-spinner{--color: var(--dt-primary);width:32px;height:32px}.loading-message{font-size:14px;font-weight:500;color:var(--dt-text-secondary)}.table-wrapper{overflow-x:auto;max-height:var(--max-height)}.table-wrapper.is-loading{opacity:.5;pointer-events:none}.table-wrapper::-webkit-scrollbar{height:8px;width:8px}.table-wrapper::-webkit-scrollbar-track{background:var(--dt-surface-variant);border-radius:4px}.table-wrapper::-webkit-scrollbar-thumb{background:var(--dt-border);border-radius:4px}.table-wrapper::-webkit-scrollbar-thumb:hover{background:var(--dt-text-muted)}table{width:100%;border-collapse:collapse;font-size:14px}th,td{padding:var(--dt-cell-padding-y) var(--dt-cell-padding-x);text-align:left;vertical-align:middle}thead{background:var(--dt-surface-variant)}thead th{font-weight:600;font-size:13px;color:var(--dt-text-secondary);white-space:nowrap;position:relative;border-bottom:1px solid var(--dt-border);padding:var(--dt-header-padding-y) var(--dt-cell-padding-x);transition:all .2s ease}thead th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}thead th.sortable:hover{background:#00000008;color:var(--dt-text-primary)}thead th.sorted{color:var(--dt-primary);background:rgba(var(--dt-primary-rgb),.04)}.header-content{display:flex;align-items:center;gap:8px}.sort-icons{display:flex;flex-direction:column;gap:0;opacity:.4;transition:opacity .2s ease}.sortable:hover .sort-icons{opacity:.7}.sorted .sort-icons{opacity:1}.sort-icons ion-icon{font-size:12px;color:var(--dt-text-muted);margin:-3px 0;transition:all .2s ease}.sort-icons ion-icon.active{color:var(--dt-primary);transform:scale(1.2)}tbody tr{border-bottom:1px solid var(--dt-border)}tbody tr:last-child{border-bottom:none}tbody tr.clickable{cursor:pointer}tbody tr.selected{background:rgba(var(--dt-primary-rgb),.06)}tbody td{color:var(--dt-text-primary);font-size:14px}.hoverable tbody tr:hover:not(.empty-row){background:var(--dt-surface-variant)}.hoverable tbody tr:hover:not(.empty-row).selected{background:rgba(var(--dt-primary-rgb),.08)}.align-left{text-align:left}.align-center{text-align:center}.align-right{text-align:right}.selection-cell{width:52px;min-width:52px;max-width:52px;text-align:center;padding:8px 12px;box-sizing:border-box}.selection-cell ion-checkbox{--size: 20px;--border-radius: 50%;--border-width: 2px;--border-color: var(--dt-border);--border-color-checked: var(--dt-primary);--background: transparent;--background-checked: var(--dt-primary);--checkmark-color: white;--checkmark-width: 2px;margin:0;display:block}.selection-cell ion-checkbox::part(container){border-radius:50%}.selection-cell input[type=radio]{width:20px;height:20px;cursor:pointer;accent-color:var(--dt-primary);margin:0;display:block}.checkbox-circular .selection-cell ion-checkbox{--border-radius: 50%}.checkbox-circular .selection-cell ion-checkbox::part(container){border-radius:50%}.row-number-cell{width:60px;text-align:center;color:var(--dt-text-muted);font-size:12px;font-weight:500}.actions-cell{text-align:center;white-space:nowrap}.sticky-start{position:sticky;left:0;background:inherit;z-index:1;box-shadow:2px 0 4px #0000000d}.sticky-end{position:sticky;right:0;background:inherit;z-index:1;box-shadow:-2px 0 4px #0000000d}.empty-row td{padding:64px 16px}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;color:var(--dt-text-secondary)}.empty-icon{font-size:56px;margin-bottom:20px;opacity:.4;color:var(--dt-text-muted)}.empty-title{font-size:18px;font-weight:600;margin:0 0 8px;color:var(--dt-text-primary)}.empty-description{font-size:14px;margin:0;max-width:320px;color:var(--dt-text-secondary);line-height:1.5}.pagination-container{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-top:1px solid var(--dt-border);background:var(--dt-surface);flex-wrap:wrap;gap:16px}.pagination-info{display:flex;align-items:center;gap:20px;font-size:14px;color:var(--dt-text-secondary)}.pagination-info span{font-weight:500}.page-size-select{--padding-start: 12px;--padding-end: 12px;font-size:14px;min-width:140px;--background: var(--dt-surface-variant);--border-radius: 8px}.pagination-controls{display:flex;align-items:center;gap:8px}.pagination-controls ion-button{--padding-start: 10px;--padding-end: 10px;--border-radius: 8px;--background: var(--dt-surface-variant);--background-hover: var(--dt-border);--color: var(--dt-text-secondary);--color-hover: var(--dt-text-primary);margin:0;height:36px;min-width:36px}.pagination-controls ion-button:disabled{opacity:.4}.pagination-controls ion-button ion-icon{font-size:16px}.page-indicator{padding:0 16px;font-size:14px;color:var(--dt-text-primary);font-weight:600;background:var(--dt-surface-variant);border-radius:8px;height:36px;display:flex;align-items:center;min-width:80px;justify-content:center}.bordered th,.bordered td{border:1px solid var(--dt-border)}.striped tbody tr:nth-child(2n){background:var(--dt-surface-variant)}.striped tbody tr:nth-child(2n).selected{background:rgba(var(--dt-primary-rgb),.08)}.sticky-header .table-wrapper{overflow-y:auto}.sticky-header thead{position:sticky;top:0;z-index:5;box-shadow:0 1px 0 var(--dt-border)}.size-small{--dt-cell-padding-x: 12px;--dt-cell-padding-y: 10px;--dt-header-padding-y: 10px}.size-small th,.size-small td{font-size:13px}.size-small thead th{font-size:12px}.size-small .selection-cell{width:44px;padding:6px 8px}.size-small .selection-cell ion-checkbox{--size: 18px}.size-small .row-number-cell{width:48px;font-size:11px}.size-small .pagination-container{padding:12px 16px}.size-small .pagination-info,.size-small .page-indicator{font-size:13px}.size-small .pagination-controls ion-button{height:32px;min-width:32px}.size-small .page-indicator{height:32px;min-width:70px}.size-large{--dt-cell-padding-x: 20px;--dt-cell-padding-y: 18px;--dt-header-padding-y: 16px}.size-large th,.size-large td{font-size:15px}.size-large thead th{font-size:14px}.size-large .selection-cell{width:60px;padding:12px 16px}.size-large .selection-cell ion-checkbox{--size: 24px}.size-large .row-number-cell{width:72px;font-size:14px}.size-large .pagination-container{padding:20px 24px}.size-large .pagination-info,.size-large .page-indicator{font-size:15px}.size-large .pagination-controls ion-button{height:40px;min-width:40px}.size-large .page-indicator{height:40px;min-width:90px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media (max-width: 768px){.data-table-container{--dt-border-radius: 12px}.pagination-container{flex-direction:column;align-items:stretch;gap:12px}.pagination-info{justify-content:space-between}.pagination-controls{justify-content:center}}.table-toolbar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:20px;border-bottom:1px solid var(--dt-border);background:var(--dt-surface);flex-wrap:wrap}.table-toolbar:empty{display:none}@media (max-width: 576px){.table-toolbar{flex-direction:column;align-items:stretch;padding:16px}}.status-badge{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:9999px;font-size:12px;font-weight:600;white-space:nowrap;letter-spacing:.025em}.status-badge--success{background:#dcfce7;color:#15803d}.status-badge--warning{background:#fef3c7;color:#b45309}.status-badge--danger{background:#fee2e2;color:#dc2626}.status-badge--primary{background:#e0e7ff;color:#4338ca}.status-badge--secondary{background:#f1f5f9;color:#475569}.status-badge--medium{background:#f1f5f9;color:#64748b}.status-badge--tertiary{background:#f3e8ff;color:#7c3aed}.status-badge--filled.status-badge--success{background:#22c55e;color:#fff}.status-badge--filled.status-badge--warning{background:#f59e0b;color:#fff}.status-badge--filled.status-badge--danger{background:#ef4444;color:#fff}.status-badge--filled.status-badge--primary{background:var(--dt-primary);color:#fff}.status-badge--outlined{background:transparent;border:1.5px solid currentColor}.status-badge--outlined.status-badge--success{color:#16a34a}.status-badge--outlined.status-badge--warning{color:#d97706}.status-badge--outlined.status-badge--danger{color:#dc2626}.status-badge--outlined.status-badge--primary{color:var(--dt-primary)}.action-buttons{display:flex;gap:6px;justify-content:center}.action-buttons ion-button{--padding-start: 8px;--padding-end: 8px;--border-radius: 8px;margin:0}.action-buttons ion-button ion-icon{font-size:18px}.card-list{display:none;padding:12px;gap:12px}.data-card{background:var(--dt-surface);border:1px solid var(--dt-border);border-radius:12px;padding:16px;margin-bottom:12px;transition:all .2s ease}.data-card.selected{border-color:var(--dt-primary);background:rgba(var(--dt-primary-rgb),.04);box-shadow:0 0 0 1px var(--dt-primary)}.data-card.clickable{cursor:pointer}.data-card.clickable:hover{box-shadow:var(--dt-elevation-medium);transform:translateY(-2px)}.data-card.clickable:active{transform:translateY(0)}.card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid var(--dt-border)}.card-selection{display:flex;align-items:center}.card-body{display:flex;flex-direction:column;gap:12px}.card-field{display:flex;justify-content:space-between;align-items:flex-start;gap:16px}.card-field__label{font-size:12px;font-weight:600;color:var(--dt-text-muted);flex-shrink:0}.card-field__value{font-size:14px;color:var(--dt-text-primary);text-align:right;word-break:break-word;font-weight:500}.card-actions{display:flex;justify-content:flex-end;margin-top:16px;padding-top:12px;border-top:1px solid var(--dt-border)}@media (max-width: 768px){.responsive-cards .table-wrapper{display:none}.responsive-cards .card-list{display:block}}@media (prefers-color-scheme: dark){.data-table-container{--dt-surface: #1e293b;--dt-surface-variant: #334155;--dt-border: #475569;--dt-text-primary: #f1f5f9;--dt-text-secondary: #94a3b8;--dt-text-muted: #64748b}.loading-overlay{background:#1e293be6}.status-badge--success{background:#22c55e33;color:#4ade80}.status-badge--warning{background:#f59e0b33;color:#fbbf24}.status-badge--danger{background:#ef444433;color:#f87171}.status-badge--primary{background:#6366f133;color:#a5b4fc}}\n"] }]
|
|
1070
|
+
}], propDecorators: { props: [{
|
|
1071
|
+
type: Input
|
|
1072
|
+
}], rowClick: [{
|
|
1073
|
+
type: Output
|
|
1074
|
+
}], selectionChange: [{
|
|
1075
|
+
type: Output
|
|
1076
|
+
}], sortChange: [{
|
|
1077
|
+
type: Output
|
|
1078
|
+
}], pageChange: [{
|
|
1079
|
+
type: Output
|
|
1080
|
+
}] } });
|
|
1081
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBSVosTUFBTSxFQUNOLHVCQUF1QixFQUN2QixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsT0FBTyxFQUNQLFdBQVcsRUFDWCxVQUFVLEVBQ1YsU0FBUyxFQUNULGVBQWUsR0FDaEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixxQkFBcUIsRUFDckIsZUFBZSxHQUNoQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBU0wseUJBQXlCLEdBQzFCLE1BQU0sU0FBUyxDQUFDOzs7QUFFakIsUUFBUSxDQUFDO0lBQ1AsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQixrQkFBa0I7SUFDbEIscUJBQXFCO0lBQ3JCLGVBQWU7Q0FDaEIsQ0FBQyxDQUFDO0FBc1dIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQ0c7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBL1kvQjtRQWtaWSxhQUFRLEdBQUcsSUFBSSxZQUFZLEVB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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1WVDs4QkErQ1EsS0FBSztzQkFBYixLQUFLO2dCQUVJLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIE9uSW5pdCxcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBpbmplY3QsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIElvbkJ1dHRvbixcbiAgSW9uSWNvbixcbiAgSW9uQ2hlY2tib3gsXG4gIElvblNwaW5uZXIsXG4gIElvblNlbGVjdCxcbiAgSW9uU2VsZWN0T3B0aW9uLFxufSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IGFkZEljb25zIH0gZnJvbSAnaW9uaWNvbnMnO1xuaW1wb3J0IHtcbiAgY2hldnJvblVwT3V0bGluZSxcbiAgY2hldnJvbkRvd25PdXRsaW5lLFxuICBjaGV2cm9uQmFja091dGxpbmUsXG4gIGNoZXZyb25Gb3J3YXJkT3V0bGluZSxcbiAgZG9jdW1lbnRPdXRsaW5lLFxufSBmcm9tICdpb25pY29ucy9pY29ucyc7XG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2kxOG4nO1xuaW1wb3J0IHtcbiAgRGF0YVRhYmxlTWV0YWRhdGEsXG4gIERhdGFUYWJsZUNvbHVtbixcbiAgRGF0YVRhYmxlU29ydCxcbiAgRGF0YVRhYmxlUm93Q2xpY2tFdmVudCxcbiAgRGF0YVRhYmxlU2VsZWN0aW9uQ2hhbmdlRXZlbnQsXG4gIERhdGFUYWJsZVNvcnRDaGFuZ2VFdmVudCxcbiAgRGF0YVRhYmxlUGFnZUNoYW5nZUV2ZW50LFxuICBEYXRhVGFibGVFbXB0eVN0YXRlLFxuICBERUZBVUxUX1BBR0VfU0laRV9PUFRJT05TLFxufSBmcm9tICcuL3R5cGVzJztcblxuYWRkSWNvbnMoe1xuICBjaGV2cm9uVXBPdXRsaW5lLFxuICBjaGV2cm9uRG93bk91dGxpbmUsXG4gIGNoZXZyb25CYWNrT3V0bGluZSxcbiAgY2hldnJvbkZvcndhcmRPdXRsaW5lLFxuICBkb2N1bWVudE91dGxpbmUsXG59KTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLWRhdGEtdGFibGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBJb25CdXR0b24sXG4gICAgSW9uSWNvbixcbiAgICBJb25DaGVja2JveCxcbiAgICBJb25TcGlubmVyLFxuICAgIElvblNlbGVjdCxcbiAgICBJb25TZWxlY3RPcHRpb24sXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiXG4gICAgICBbY2xhc3NdPVwicHJvcHMuY3NzQ2xhc3NcIlxuICAgICAgW2NsYXNzLnNpemUtc21hbGxdPVwicHJvcHMuc2l6ZSA9PT0gJ3NtYWxsJ1wiXG4gICAgICBbY2xhc3Muc2l6ZS1tZWRpdW1dPVwicHJvcHMuc2l6ZSA9PT0gJ21lZGl1bScgfHwgIXByb3BzLnNpemVcIlxuICAgICAgW2NsYXNzLnNpemUtbGFyZ2VdPVwicHJvcHMuc2l6ZSA9PT0gJ2xhcmdlJ1wiXG4gICAgICBbY2xhc3MuYm9yZGVyZWRdPVwicHJvcHMuYm9yZGVyZWRcIlxuICAgICAgW2NsYXNzLnN0cmlwZWRdPVwicHJvcHMuc3RyaXBlZFwiXG4gICAgICBbY2xhc3MuaG92ZXJhYmxlXT1cInByb3BzLmhvdmVyYWJsZSAhPT0gZmFsc2VcIlxuICAgICAgW2NsYXNzLnN0aWNreS1oZWFkZXJdPVwicHJvcHMuc3RpY2t5SGVhZGVyXCJcbiAgICAgIFtjbGFzcy5yZXNwb25zaXZlLWNhcmRzXT1cInByb3BzLnJlc3BvbnNpdmVNb2RlID09PSAnY2FyZHMnXCJcbiAgICAgIFtjbGFzcy5lbGV2YXRpb24tbm9uZV09XCJwcm9wcy5lbGV2YXRpb24gPT09ICdub25lJ1wiXG4gICAgICBbY2xhc3MuZWxldmF0aW9uLWxvd109XCJwcm9wcy5lbGV2YXRpb24gPT09ICdsb3cnXCJcbiAgICAgIFtjbGFzcy5lbGV2YXRpb24taGlnaF09XCJwcm9wcy5lbGV2YXRpb24gPT09ICdoaWdoJ1wiXG4gICAgICBbY2xhc3MuaGVhZGVyLWdyYWRpZW50XT1cInByb3BzLmhlYWRlckdyYWRpZW50XCJcbiAgICAgIFtjbGFzcy5jaGVja2JveC1jaXJjdWxhcl09XCJwcm9wcy5jaGVja2JveFN0eWxlID09PSAnY2lyY3VsYXInXCJcbiAgICAgIFtjbGFzcy5yb3ctaGlnaGxpZ2h0LWJvcmRlcl09XCJwcm9wcy5yb3dIaWdobGlnaHRTdHlsZSA9PT0gJ2JvcmRlci1sZWZ0J1wiXG4gICAgICBbY2xhc3Mucm93LWhpZ2hsaWdodC1ib3RoXT1cInByb3BzLnJvd0hpZ2hsaWdodFN0eWxlID09PSAnYm90aCdcIlxuICAgICAgW3N0eWxlLi0tbWF4LWhlaWdodF09XCJwcm9wcy5tYXhIZWlnaHRcIlxuICAgID5cbiAgICAgIDwhLS0gVG9vbGJhciBzbG90IC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRvb2xiYXJcIiAjdG9vbGJhckNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3Rvb2xiYXJdXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gTG9hZGluZyBvdmVybGF5IC0tPlxuICAgICAgQGlmIChwcm9wcy5sb2FkaW5nU3RhdGU/LmxvYWRpbmcpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImxvYWRpbmctb3ZlcmxheVwiPlxuICAgICAgICAgIDxpb24tc3Bpbm5lciBuYW1lPVwiY3Jlc2NlbnRcIj48L2lvbi1zcGlubmVyPlxuICAgICAgICAgIEBpZiAocHJvcHMubG9hZGluZ1N0YXRlPy5tZXNzYWdlKSB7XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxvYWRpbmctbWVzc2FnZVwiPnt7IHByb3BzLmxvYWRpbmdTdGF0ZS5tZXNzYWdlIH19PC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS13cmFwcGVyXCIgW2NsYXNzLmlzLWxvYWRpbmddPVwicHJvcHMubG9hZGluZ1N0YXRlPy5sb2FkaW5nXCI+XG4gICAgICAgIDx0YWJsZVxuICAgICAgICAgIHJvbGU9XCJncmlkXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInByb3BzLmFyaWFMYWJlbFwiXG4gICAgICAgID5cbiAgICAgICAgICBAaWYgKHByb3BzLmNhcHRpb24pIHtcbiAgICAgICAgICAgIDxjYXB0aW9uIGNsYXNzPVwic3Itb25seVwiPnt7IHByb3BzLmNhcHRpb24gfX08L2NhcHRpb24+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8IS0tIFNlbGVjdGlvbiBjb2x1bW4gLS0+XG4gICAgICAgICAgICAgIEBpZiAocHJvcHMuc2hvd1NlbGVjdGlvbkNvbHVtbiAmJiBwcm9wcy5zZWxlY3Rpb24/Lm1vZGUgPT09ICdtdWx0aXBsZScpIHtcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJzZWxlY3Rpb24tY2VsbFwiPlxuICAgICAgICAgICAgICAgICAgPGlvbi1jaGVja2JveFxuICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc0FsbFNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiaXNJbmRldGVybWluYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgKGlvbkNoYW5nZSk9XCJ0b2dnbGVTZWxlY3RBbGwoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICA+PC9pb24tY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKHByb3BzLnNob3dTZWxlY3Rpb25Db2x1bW4gJiYgcHJvcHMuc2VsZWN0aW9uPy5tb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInNlbGVjdGlvbi1jZWxsXCI+PC90aD5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIDwhLS0gUm93IG51bWJlciBjb2x1bW4gLS0+XG4gICAgICAgICAgICAgIEBpZiAocHJvcHMuc2hvd1Jvd051bWJlcnMpIHtcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJyb3ctbnVtYmVyLWNlbGxcIj4jPC90aD5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIDwhLS0gRGF0YSBjb2x1bW5zIC0tPlxuICAgICAgICAgICAgICBAZm9yIChjb2x1bW4gb2YgdmlzaWJsZUNvbHVtbnM7IHRyYWNrIGNvbHVtbi5rZXkpIHtcbiAgICAgICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJnZXRDb2x1bW5DbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJjb2x1bW4ud2lkdGhcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aF09XCJjb2x1bW4ubWluV2lkdGhcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLm1heC13aWR0aF09XCJjb2x1bW4ubWF4V2lkdGhcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLnNvcnRhYmxlXT1cImNvbHVtbi5zb3J0YWJsZVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3Muc29ydGVkXT1cImN1cnJlbnRTb3J0Py5jb2x1bW4gPT09IGNvbHVtbi5rZXlcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbHVtbi5zb3J0YWJsZSA/IG9uU29ydChjb2x1bW4pIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXNvcnRdPVwiZ2V0QXJpYVNvcnQoY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgQGlmIChjb2x1bW4uaGVhZGVyVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbHVtbi5oZWFkZXJUZW1wbGF0ZTsgY29udGV4dDogeyBjb2x1bW4gfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVhZGVyLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBjb2x1bW4ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGNvbHVtbi5zb3J0YWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzb3J0LWljb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpb24taWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJjaGV2cm9uLXVwLW91dGxpbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiY3VycmVudFNvcnQ/LmNvbHVtbiA9PT0gY29sdW1uLmtleSAmJiBjdXJyZW50U29ydD8uZGlyZWN0aW9uID09PSAnYXNjJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID48L2lvbi1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiY2hldnJvbi1kb3duLW91dGxpbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiY3VycmVudFNvcnQ/LmNvbHVtbiA9PT0gY29sdW1uLmtleSAmJiBjdXJyZW50U29ydD8uZGlyZWN0aW9uID09PSAnZGVzYydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgPCEtLSBBY3Rpb25zIGNvbHVtbiAtLT5cbiAgICAgICAgICAgICAgQGlmIChwcm9wcy5hY3Rpb25zVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJhY3Rpb25zLWNlbGxcIiBbc3R5bGUud2lkdGhdPVwicHJvcHMuYWN0aW9uc1dpZHRoIHx8ICcxMDBweCdcIj5cbiAgICAgICAgICAgICAgICAgIHt7IGdldEFjdGlvbnNMYWJlbCgpIH19XG4gICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L3RoZWFkPlxuXG4gICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgQGlmIChkaXNwbGF5ZWREYXRhLmxlbmd0aCA9PT0gMCAmJiAhcHJvcHMubG9hZGluZ1N0YXRlPy5sb2FkaW5nKSB7XG4gICAgICAgICAgICAgIDx0ciBjbGFzcz1cImVtcHR5LXJvd1wiPlxuICAgICAgICAgICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cInRvdGFsQ29sdW1uc1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoZW1wdHlTdGF0ZS50ZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJlbXB0eVN0YXRlLnRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZW1wdHlTdGF0ZS5pY29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gW25hbWVdPVwiZW1wdHlTdGF0ZS5pY29uXCIgY2xhc3M9XCJlbXB0eS1pY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgQGlmIChlbXB0eVN0YXRlLnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJlbXB0eS10aXRsZVwiPnt7IGVtcHR5U3RhdGUudGl0bGUgfX08L2g0PlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGVtcHR5U3RhdGUuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZW1wdHktZGVzY3JpcHRpb25cIj57eyBlbXB0eVN0YXRlLmRlc2NyaXB0aW9uIH19PC9wPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICBAZm9yIChyb3cgb2YgZGlzcGxheWVkRGF0YTsgdHJhY2sgdHJhY2tCeUZuKHJvdyk7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgPHRyXG4gICAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiaXNSb3dTZWxlY3RlZChyb3cpXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5jbGlja2FibGVdPVwicHJvcHMucm93Q2xpY2thYmxlXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKHJvdywgaSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPCEtLSBTZWxlY3Rpb24gY2VsbCAtLT5cbiAgICAgICAgICAgICAgICAgIEBpZiAocHJvcHMuc2hvd1NlbGVjdGlvbkNvbHVtbikge1xuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJzZWxlY3Rpb24tY2VsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAocHJvcHMuc2VsZWN0aW9uPy5tb2RlID09PSAnbXVsdGlwbGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzUm93U2VsZWN0ZWQocm93KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChpb25DaGFuZ2UpPVwidG9nZ2xlUm93U2VsZWN0aW9uKHJvdywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvaW9uLWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2UgaWYgKHByb3BzLnNlbGVjdGlvbj8ubW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc1Jvd1NlbGVjdGVkKHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0U2luZ2xlUm93KHJvdyk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgPCEtLSBSb3cgbnVtYmVyIC0tPlxuICAgICAgICAgICAgICAgICAgQGlmIChwcm9wcy5zaG93Um93TnVtYmVycykge1xuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJyb3ctbnVtYmVyLWNlbGxcIj57eyBnZXRSb3dOdW1iZXIoaSkgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICA8IS0tIERhdGEgY2VsbHMgLS0+XG4gICAgICAgICAgICAgICAgICBAZm9yIChjb2x1bW4gb2YgdmlzaWJsZUNvbHVtbnM7IHRyYWNrIGNvbHVtbi5rZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImdldENvbHVtbkNsYXNzKGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS50ZXh0LWFsaWduXT1cImNvbHVtbi5hbGlnblwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGNvbHVtbi5jZWxsVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb2x1bW4uY2VsbFRlbXBsYXRlOyBjb250ZXh0OiB7IHJvdywgY29sdW1uLCB2YWx1ZTogZ2V0Q2VsbFZhbHVlKHJvdywgY29sdW1uKSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXRGb3JtYXR0ZWRWYWx1ZShyb3csIGNvbHVtbikgfX1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIDwhLS0gQWN0aW9ucyBjZWxsIC0tPlxuICAgICAgICAgICAgICAgICAgQGlmIChwcm9wcy5hY3Rpb25zVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWN0aW9ucy1jZWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInByb3BzLmFjdGlvbnNUZW1wbGF0ZTsgY29udGV4dDogeyByb3csIGluZGV4OiBpIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgPC90YWJsZT5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIENhcmQgdmlldyAocmVzcG9uc2l2ZSBtb2JpbGUpIC0tPlxuICAgICAgQGlmIChwcm9wcy5yZXNwb25zaXZlTW9kZSA9PT0gJ2NhcmRzJykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1saXN0XCI+XG4gICAgICAgICAgQGlmIChkaXNwbGF5ZWREYXRhLmxlbmd0aCA9PT0gMCAmJiAhcHJvcHMubG9hZGluZ1N0YXRlPy5sb2FkaW5nKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1wdHktc3RhdGVcIj5cbiAgICAgICAgICAgICAgQGlmIChlbXB0eVN0YXRlLmljb24pIHtcbiAgICAgICAgICAgICAgICA8aW9uLWljb24gW25hbWVdPVwiZW1wdHlTdGF0ZS5pY29uXCIgY2xhc3M9XCJlbXB0eS1pY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKGVtcHR5U3RhdGUudGl0bGUpIHtcbiAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJlbXB0eS10aXRsZVwiPnt7IGVtcHR5U3RhdGUudGl0bGUgfX08L2g0PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBpZiAoZW1wdHlTdGF0ZS5kZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZW1wdHktZGVzY3JpcHRpb25cIj57eyBlbXB0eVN0YXRlLmRlc2NyaXB0aW9uIH19PC9wPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIEBmb3IgKHJvdyBvZiBkaXNwbGF5ZWREYXRhOyB0cmFjayB0cmFja0J5Rm4ocm93KTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgQGlmIChwcm9wcy5tb2JpbGVDYXJkVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicHJvcHMubW9iaWxlQ2FyZFRlbXBsYXRlOyBjb250ZXh0OiB7IHJvdywgaW5kZXg6IGksIGNvbHVtbnM6IHZpc2libGVDb2x1bW5zIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWNhcmRcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImlzUm93U2VsZWN0ZWQocm93KVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuY2xpY2thYmxlXT1cInByb3BzLnJvd0NsaWNrYWJsZVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Sb3dDbGljayhyb3csIGksICRldmVudClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDwhLS0gQ2FyZCBoZWFkZXIgd2l0aCBzZWxlY3Rpb24gLS0+XG4gICAgICAgICAgICAgICAgICBAaWYgKHByb3BzLnNob3dTZWxlY3Rpb25Db2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtc2VsZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHByb3BzLnNlbGVjdGlvbj8ubW9kZSA9PT0gJ211bHRpcGxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNSb3dTZWxlY3RlZChyb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW9uQ2hhbmdlKT1cInRvZ2dsZVJvd1NlbGVjdGlvbihyb3csICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9pb24tY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIGlmIChwcm9wcy5zZWxlY3Rpb24/Lm1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNSb3dTZWxlY3RlZChyb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0U2luZ2xlUm93KHJvdyk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgQGlmIChwcm9wcy5zaG93Um93TnVtYmVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyb3ctbnVtYmVyXCI+e3sgZ2V0Um93TnVtYmVyKGkpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIDwhLS0gQ2FyZCBib2R5IHdpdGggZmllbGRzIC0tPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChjb2x1bW4gb2YgdmlzaWJsZUNvbHVtbnM7IHRyYWNrIGNvbHVtbi5rZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkLWZpZWxkX19sYWJlbFwiPnt7IGNvbHVtbi5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZC1maWVsZF9fdmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChjb2x1bW4uY2VsbFRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbHVtbi5jZWxsVGVtcGxhdGU7IGNvbnRleHQ6IHsgcm93LCBjb2x1bW4sIHZhbHVlOiBnZXRDZWxsVmFsdWUocm93LCBjb2x1bW4pIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZ2V0Rm9ybWF0dGVkVmFsdWUocm93LCBjb2x1bW4pIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIDwhLS0gQ2FyZCBhY3Rpb25zIC0tPlxuICAgICAgICAgICAgICAgICAgQGlmIChwcm9wcy5hY3Rpb25zVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwcm9wcy5hY3Rpb25zVGVtcGxhdGU7IGNvbnRleHQ6IHsgcm93LCBpbmRleDogaSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cblxuICAgICAgPCEtLSBQYWdpbmF0aW9uIC0tPlxuICAgICAgQGlmIChwcm9wcy5zaG93UGFnaW5hdGlvbiAmJiBwcm9wcy5wYWdpbmF0aW9uKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYWdpbmF0aW9uLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWdpbmF0aW9uLWluZm9cIj5cbiAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICB7eyBnZXRQYWdpbmF0aW9uSW5mb1RleHQoKSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICBAaWYgKHBhZ2VTaXplT3B0aW9ucy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgIDxpb24tc2VsZWN0XG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInByb3BzLnBhZ2luYXRpb24ucGFnZVNpemVcIlxuICAgICAgICAgICAgICAgIChpb25DaGFuZ2UpPVwib25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBpbnRlcmZhY2U9XCJwb3BvdmVyXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInBhZ2Utc2l6ZS1zZWxlY3RcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQGZvciAoc2l6ZSBvZiBwYWdlU2l6ZU9wdGlvbnM7IHRyYWNrIHNpemUpIHtcbiAgICAgICAgICAgICAgICAgIDxpb24tc2VsZWN0LW9wdGlvbiBbdmFsdWVdPVwic2l6ZVwiPnt7IGdldFBlclBhZ2VUZXh0KHNpemUpIH19PC9pb24tc2VsZWN0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvaW9uLXNlbGVjdD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWdpbmF0aW9uLWNvbnRyb2xzXCI+XG4gICAgICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgICAgICBmaWxsPVwiY2xlYXJcIlxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicHJvcHMucGFnaW5hdGlvbi5wYWdlID09PSAwXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImdvVG9QYWdlKDApXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJnZXRGaXJzdFBhZ2VMYWJlbCgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJpY29uLW9ubHlcIiBuYW1lPVwiY2hldnJvbi1iYWNrLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIG5hbWU9XCJjaGV2cm9uLWJhY2stb3V0bGluZVwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IC0xMnB4XCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cblxuICAgICAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICAgICAgZmlsbD1cImNsZWFyXCJcbiAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInByb3BzLnBhZ2luYXRpb24ucGFnZSA9PT0gMFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJnb1RvUGFnZShwcm9wcy5wYWdpbmF0aW9uLnBhZ2UgLSAxKVwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZ2V0UHJldmlvdXNQYWdlTGFiZWwoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpb24taWNvbiBzbG90PVwiaWNvbi1vbmx5XCIgbmFtZT1cImNoZXZyb24tYmFjay1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cblxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWdlLWluZGljYXRvclwiPlxuICAgICAgICAgICAgICB7eyBwcm9wcy5wYWdpbmF0aW9uLnBhZ2UgKyAxIH19IC8ge3sgdG90YWxQYWdlcyB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgICAgICBmaWxsPVwiY2xlYXJcIlxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicHJvcHMucGFnaW5hdGlvbi5wYWdlID49IHRvdGFsUGFnZXMgLSAxXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImdvVG9QYWdlKHByb3BzLnBhZ2luYXRpb24ucGFnZSArIDEpXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJnZXROZXh0UGFnZUxhYmVsKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIG5hbWU9XCJjaGV2cm9uLWZvcndhcmQtb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICA8L2lvbi1idXR0b24+XG5cbiAgICAgICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgICAgIGZpbGw9XCJjbGVhclwiXG4gICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJwcm9wcy5wYWdpbmF0aW9uLnBhZ2UgPj0gdG90YWxQYWdlcyAtIDFcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiZ29Ub1BhZ2UodG90YWxQYWdlcyAtIDEpXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJnZXRMYXN0UGFnZUxhYmVsKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIG5hbWU9XCJjaGV2cm9uLWZvcndhcmQtb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgIDxpb24taWNvbiBzbG90PVwiaWNvbi1vbmx5XCIgbmFtZT1cImNoZXZyb24tZm9yd2FyZC1vdXRsaW5lXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogLTEycHhcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVVcmxzOiBbJy4vZGF0YS10YWJsZS5jb21wb25lbnQuc2NzcyddLFxufSlcbi8qKlxuICogdmFsLWRhdGEtdGFibGVcbiAqXG4gKiBBIGZsZXhpYmxlIGRhdGEgdGFibGUgY29tcG9uZW50IGZvciBkaXNwbGF5aW5nIHRhYnVsYXIgZGF0YSB3aXRoIHNvcnRpbmcsXG4gKiBwYWdpbmF0aW9uLCBhbmQgc2VsZWN0aW9uIGZlYXR1cmVzLlxuICpcbiAqIEBleGFtcGxlIEJhc2ljIHVzYWdlXG4gKiBgYGBodG1sXG4gKiA8dmFsLWRhdGEtdGFibGVcbiAqICAgW3Byb3BzXT1cIntcbiAqICAgICBjb2x1bW5zOiBbXG4gKiAgICAgICB7IGtleTogJ25hbWUnLCBsYWJlbDogJ05vbWJyZScsIHNvcnRhYmxlOiB0cnVlIH0sXG4gKiAgICAgICB7IGtleTogJ2VtYWlsJywgbGFiZWw6ICdFbWFpbCcgfSxcbiAqICAgICAgIHsga2V5OiAnc3RhdHVzJywgbGFiZWw6ICdFc3RhZG8nIH1cbiAqICAgICBdLFxuICogICAgIGRhdGE6IHVzZXJzXG4gKiAgIH1cIlxuICogPjwvdmFsLWRhdGEtdGFibGU+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBXaXRoIHBhZ2luYXRpb24gYW5kIHNlbGVjdGlvblxuICogYGBgaHRtbFxuICogPHZhbC1kYXRhLXRhYmxlXG4gKiAgIFtwcm9wc109XCJ7XG4gKiAgICAgY29sdW1uczogY29sdW1ucyxcbiAqICAgICBkYXRhOiBwYXJ0aWNpcGFudHMsXG4gKiAgICAgc2hvd1BhZ2luYXRpb246IHRydWUsXG4gKiAgICAgcGFnaW5hdGlvbjoge1xuICogICAgICAgcGFnZTogMCxcbiAqICAgICAgIHBhZ2VTaXplOiAyNSxcbiAqICAgICAgIHRvdGFsOiB0b3RhbENvdW50XG4gKiAgICAgfSxcbiAqICAgICBzZWxlY3Rpb246IHtcbiAqICAgICAgIG1vZGU6ICdtdWx0aXBsZScsXG4gKiAgICAgICBzZWxlY3RlZDogc2VsZWN0ZWRQYXJ0aWNpcGFudHNcbiAqICAgICB9LFxuICogICAgIHNob3dTZWxlY3Rpb25Db2x1bW46IHRydWVcbiAqICAgfVwiXG4gKiAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gKiAgIChwYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCJcbiAqID48L3ZhbC1kYXRhLXRhYmxlPlxuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhVGFibGVDb21wb25lbnQ8VCA9IGFueT4gaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIHByb3BzOiBEYXRhVGFibGVNZXRhZGF0YTxUPjtcblxuICBAT3V0cHV0KCkgcm93Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGFUYWJsZVJvd0NsaWNrRXZlbnQ8VD4+KCk7XG4gIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGFUYWJsZVNlbGVjdGlvbkNoYW5nZUV2ZW50PFQ+PigpO1xuICBAT3V0cHV0KCkgc29ydENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YVRhYmxlU29ydENoYW5nZUV2ZW50PigpO1xuICBAT3V0cHV0KCkgcGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YVRhYmxlUGFnZUNoYW5nZUV2ZW50PigpO1xuXG4gIGRpc3BsYXllZERhdGE6IFRbXSA9IFtdO1xuICBjdXJyZW50U29ydDogRGF0YVRhYmxlU29ydCB8IG51bGwgPSBudWxsO1xuICBzZWxlY3RlZFJvd3M6IFNldDxhbnk+ID0gbmV3IFNldCgpO1xuXG4gIC8qKiBDYWNoZWQgdmlzaWJsZSBjb2x1bW5zIGZvciBwZXJmb3JtYW5jZSAqL1xuICBwcml2YXRlIF92aXNpYmxlQ29sdW1uczogRGF0YVRhYmxlQ29sdW1uPFQ+W10gPSBbXTtcblxuICBwcml2YXRlIGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHByaXZhdGUgaTE4biA9IGluamVjdChJMThuU2VydmljZSk7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0aWFsaXplU3RhdGUoKTtcbiAgICB0aGlzLnVwZGF0ZURpc3BsYXllZERhdGEoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1sncHJvcHMnXSkge1xuICAgICAgdGhpcy5pbml0aWFsaXplU3RhdGUoKTtcbiAgICAgIHRoaXMudXBkYXRlRGlzcGxheWVkRGF0YSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVN0YXRlKCk6IHZvaWQge1xuICAgIC8vIENhY2hlIHZpc2libGUgY29sdW1ucyBmb3IgcGVyZm9ybWFuY2VcbiAgICB0aGlzLl92aXNpYmxlQ29sdW1ucyA9IHRoaXMucHJvcHMuY29sdW1ucy5maWx0ZXIoYyA9PiBjLnZpc2libGUgIT09IGZhbHNlKTtcblxuICAgIC8vIEluaXRpYWxpemUgc29ydFxuICAgIHRoaXMuY3VycmVudFNvcnQgPSB0aGlzLnByb3BzLnNvcnQgfHwgbnVsbDtcblxuICAgIC8vIEluaXRpYWxpemUgc2VsZWN0aW9uXG4gICAgaWYgKHRoaXMucHJvcHMuc2VsZWN0aW9uPy5zZWxlY3RlZCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFJvd3MgPSBuZXcgU2V0KFxuICAgICAgICB0aGlzLnByb3BzLnNlbGVjdGlvbi5zZWxlY3RlZC5tYXAocm93ID0+IHRoaXMuZ2V0Um93SWQocm93KSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEaXNwbGF5ZWREYXRhKCk6IHZvaWQge1xuICAgIGxldCBkYXRhID0gWy4uLnRoaXMucHJvcHMuZGF0YV07XG5cbiAgICAvLyBBcHBseSBjbGllbnQtc2lkZSBzb3J0aW5nXG4gICAgaWYgKHRoaXMucHJvcHMuY2xpZW50U29ydCAmJiB0aGlzLmN1cnJlbnRTb3J0KSB7XG4gICAgICBkYXRhID0gdGhpcy5zb3J0RGF0YShkYXRhKTtcbiAgICB9XG5cbiAgICAvLyBBcHBseSBjbGllbnQtc2lkZSBwYWdpbmF0aW9uXG4gICAgaWYgKHRoaXMucHJvcHMuY2xpZW50UGFnaW5hdGlvbiAmJiB0aGlzLnByb3BzLnBhZ2luYXRpb24pIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5wcm9wcy5wYWdpbmF0aW9uLnBhZ2UgKiB0aGlzLnByb3BzLnBhZ2luYXRpb24ucGFnZVNpemU7XG4gICAgICBjb25zdCBlbmQgPSBzdGFydCArIHRoaXMucHJvcHMucGFnaW5hdGlvbi5wYWdlU2l6ZTtcbiAgICAgIGRhdGEgPSBkYXRhLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAgIH1cblxuICAgIHRoaXMuZGlzcGxheWVkRGF0YSA9IGRhdGE7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIHNvcnREYXRhKGRhdGE6IFRbXSk6IFRbXSB7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRTb3J0KSByZXR1cm4gZGF0YTtcblxuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMucHJvcHMuY29sdW1ucy5maW5kKGMgPT4gYy5rZXkgPT09IHRoaXMuY3VycmVudFNvcnQ/LmNvbHVtbik7XG4gICAgaWYgKCFjb2x1bW4pIHJldHVybiBkYXRhO1xuXG4gICAgcmV0dXJuIFsuLi5kYXRhXS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBpZiAoY29sdW1uLnNvcnRGbikge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb2x1bW4uc29ydEZuKGEsIGIpO1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50U29ydD8uZGlyZWN0aW9uID09PSAnZGVzYycgPyAtcmVzdWx0IDogcmVzdWx0O1xuICAgICAgfVxuXG4gICAgICBjb25zdCB2YWx1ZUEgPSB0aGlzLmdldENlbGxWYWx1ZShhLCBjb2x1bW4pO1xuICAgICAgY29uc3QgdmFsdWVCID0gdGhpcy5nZXRDZWxsVmFsdWUoYiwgY29sdW1uKTtcblxuICAgICAgbGV0IGNvbXBhcmlzb24gPSAwO1xuICAgICAgaWYgKHZhbHVlQSA9PSBudWxsICYmIHZhbHVlQiA9PSBudWxsKSBjb21wYXJpc29uID0gMDtcbiAgICAgIGVsc2UgaWYgKHZhbHVlQSA9PSBudWxsKSBjb21wYXJpc29uID0gMTtcbiAgICAgIGVsc2UgaWYgKHZhbHVlQiA9PSBudWxsKSBjb21wYXJpc29uID0gLTE7XG4gICAgICBlbHNlIGlmICh0eXBlb2YgdmFsdWVBID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgdmFsdWVCID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb21wYXJpc29uID0gdmFsdWVBLmxvY2FsZUNvbXBhcmUodmFsdWVCKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbXBhcmlzb24gPSB2YWx1ZUEgPCB2YWx1ZUIgPyAtMSA6IHZhbHVlQSA+IHZhbHVlQiA/IDEgOiAwO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5jdXJyZW50U29ydD8uZGlyZWN0aW9uID09PSAnZGVzYycgPyAtY29tcGFyaXNvbiA6IGNvbXBhcmlzb247XG4gICAgfSk7XG4gIH1cblxuICBnZXQgdmlzaWJsZUNvbHVtbnMoKTogRGF0YVRhYmxlQ29sdW1uPFQ+W10ge1xuICAgIHJldHVybiB0aGlzLl92aXNpYmxlQ29sdW1ucztcbiAgfVxuXG4gIGdldCB0b3RhbENvbHVtbnMoKTogbnVtYmVyIHtcbiAgICBsZXQgY291bnQgPSB0aGlzLnZpc2libGVDb2x1bW5zLmxlbmd0aDtcbiAgICBpZiAodGhpcy5wcm9wcy5zaG93U2VsZWN0aW9uQ29sdW1uKSBjb3VudCsrO1xuICAgIGlmICh0aGlzLnByb3BzLnNob3dSb3dOdW1iZXJzKSBjb3VudCsrO1xuICAgIGlmICh0aGlzLnByb3BzLmFjdGlvbnNUZW1wbGF0ZSkgY291bnQrKztcbiAgICByZXR1cm4gY291bnQ7XG4gIH1cblxuICBnZXQgZW1wdHlTdGF0ZSgpOiBEYXRhVGFibGVFbXB0eVN0YXRlIHtcbiAgICBjb25zdCBkZWZhdWx0RW1wdHlTdGF0ZTogRGF0YVRhYmxlRW1wdHlTdGF0ZSA9IHtcbiAgICAgIGljb246ICdkb2N1bWVudC1vdXRsaW5lJyxcbiAgICAgIHRpdGxlOiB0aGlzLmkxOG4udCgnbm9EYXRhJyksXG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5pMThuLnQoJ25vUmVjb3Jkc0ZvdW5kJyksXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5lbXB0eVN0YXRlIHx8IGRlZmF1bHRFbXB0eVN0YXRlO1xuICB9XG5cbiAgLyoqIEdldCBhY3Rpb25zIGNvbHVtbiBsYWJlbCAqL1xuICBnZXRBY3Rpb25zTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5hY3Rpb25zTGFiZWwgfHwgdGhpcy5pMThuLnQoJ2FjdGlvbnMnKTtcbiAgfVxuXG4gIC8qKiBHZXQgcGFnaW5hdGlvbiBpbmZvIHRleHQgKi9cbiAgZ2V0UGFnaW5hdGlvbkluZm9UZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuaTE4bi50KCdzaG93aW5nJyl9ICR7dGhpcy5wYWdpbmF0aW9uU3RhcnR9LSR7dGhpcy5wYWdpbmF0aW9uRW5kfSAke3RoaXMuaTE4bi50KCdvZicpfSAke3RoaXMucHJvcHMucGFnaW5hdGlvbj8udG90YWx9YDtcbiAgfVxuXG4gIC8qKiBHZXQgcGVyIHBhZ2UgdGV4dCAqL1xuICBnZXRQZXJQYWdlVGV4dChzaXplOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtzaXplfSAke3RoaXMuaTE4bi50KCdwZXJQYWdlJyl9YDtcbiAgfVxuXG4gIC8qKiBHZXQgZmlyc3QgcGFnZSBhcmlhIGxhYmVsICovXG4gIGdldEZpcnN0UGFnZUxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaTE4bi50KCdmaXJzdFBhZ2UnKTtcbiAgfVxuXG4gIC8qKiBHZXQgcHJldmlvdXMgcGFnZSBhcmlhIGxhYmVsICovXG4gIGdldFByZXZpb3VzUGFnZUxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaTE4bi50KCdwcmV2aW91c1BhZ2UnKTtcbiAgfVxuXG4gIC8qKiBHZXQgbmV4dCBwYWdlIGFyaWEgbGFiZWwgKi9cbiAgZ2V0TmV4dFBhZ2VMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmkxOG4udCgnbmV4dFBhZ2UnKTtcbiAgfVxuXG4gIC8qKiBHZXQgbGFzdCBwYWdlIGFyaWEgbGFiZWwgKi9cbiAgZ2V0TGFzdFBhZ2VMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmkxOG4udCgnbGFzdFBhZ2UnKTtcbiAgfVxuXG4gIGdldCBwYWdlU2l6ZU9wdGlvbnMoKTogbnVtYmVyW10ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnBhZ2luYXRpb24/LnBhZ2VTaXplT3B0aW9ucyB8fCBERUZBVUxUX1BBR0VfU0laRV9PUFRJT05TO1xuICB9XG5cbiAgZ2V0IHRvdGFsUGFnZXMoKTogbnVtYmVyIHtcbiAgICBpZiAoIXRoaXMucHJvcHMucGFnaW5hdGlvbikgcmV0dXJuIDE7XG4gICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLnByb3BzLnBhZ2luYXRpb24udG90YWwgLyB0aGlzLnByb3BzLnBhZ2luYXRpb24ucGFnZVNpemUpO1xuICB9XG5cbiAgZ2V0IHBhZ2luYXRpb25TdGFydCgpOiBudW1iZXIge1xuICAgIGlmICghdGhpcy5wcm9wcy5wYWdpbmF0aW9uKSByZXR1cm4gMTtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5wYWdpbmF0aW9uLnBhZ2UgKiB0aGlzLnByb3BzLnBhZ2luYXRpb24ucGFnZVNpemUgKyAxO1xuICB9XG5cbiAgZ2V0IHBhZ2luYXRpb25FbmQoKTogbnVtYmVyIHtcbiAgICBpZiAoIXRoaXMucHJvcHMucGFnaW5hdGlvbikgcmV0dXJuIHRoaXMuZGlzcGxheWVkRGF0YS5sZW5ndGg7XG4gICAgcmV0dXJuIE1hdGgubWluKFxuICAgICAgKHRoaXMucHJvcHMucGFnaW5hdGlvbi5wYWdlICsgMSkgKiB0aGlzLnByb3BzLnBhZ2luYXRpb24ucGFnZVNpemUsXG4gICAgICB0aGlzLnByb3BzLnBhZ2luYXRpb24udG90YWxcbiAgICApO1xuICB9XG5cbiAgZ2V0IGlzQWxsU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuZGlzcGxheWVkRGF0YS5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5ZWREYXRhLmV2ZXJ5KHJvdyA9PiB0aGlzLmlzUm93U2VsZWN0ZWQocm93KSk7XG4gIH1cblxuICBnZXQgaXNJbmRldGVybWluYXRlKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlbGVjdGVkQ291bnQgPSB0aGlzLmRpc3BsYXllZERhdGEuZmlsdGVyKHJvdyA9PiB0aGlzLmlzUm93U2VsZWN0ZWQocm93KSkubGVuZ3RoO1xuICAgIHJldHVybiBzZWxlY3RlZENvdW50ID4gMCAmJiBzZWxlY3RlZENvdW50IDwgdGhpcy5kaXNwbGF5ZWREYXRhLmxlbmd0aDtcbiAgfVxuXG4gIGdldENlbGxWYWx1ZShyb3c6IFQsIGNvbHVtbjogRGF0YVRhYmxlQ29sdW1uPFQ+KTogYW55IHtcbiAgICBjb25zdCBmaWVsZCA9IGNvbHVtbi5maWVsZCB8fCBjb2x1bW4ua2V5O1xuICAgIHJldHVybiBmaWVsZC5zcGxpdCgnLicpLnJlZHVjZSgob2JqOiBhbnksIGtleSkgPT4gb2JqPy5ba2V5XSwgcm93KTtcbiAgfVxuXG4gIGdldEZvcm1hdHRlZFZhbHVlKHJvdzogVCwgY29sdW1uOiBEYXRhVGFibGVDb2x1bW48VD4pOiBzdHJpbmcge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRDZWxsVmFsdWUocm93LCBjb2x1bW4pO1xuICAgIGlmIChjb2x1bW4uZm9ybWF0KSB7XG4gICAgICByZXR1cm4gY29sdW1uLmZvcm1hdCh2YWx1ZSwgcm93KTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlID8/ICcnO1xuICB9XG5cbiAgZ2V0Q29sdW1uQ2xhc3MoY29sdW1uOiBEYXRhVGFibGVDb2x1bW48VD4pOiBzdHJpbmcge1xuICAgIGNvbnN0IGNsYXNzZXMgPSBbY29sdW1uLmNzc0NsYXNzIHx8ICcnXTtcbiAgICBpZiAoY29sdW1uLnN0aWNreSkge1xuICAgICAgY2xhc3Nlcy5wdXNoKGBzdGlja3ktJHtjb2x1bW4uc3RpY2t5fWApO1xuICAgIH1cbiAgICBpZiAoY29sdW1uLmFsaWduKSB7XG4gICAgICBjbGFzc2VzLnB1c2goYGFsaWduLSR7Y29sdW1uLmFsaWdufWApO1xuICAgIH1cbiAgICByZXR1cm4gY2xhc3Nlcy5maWx0ZXIoQm9vbGVhbikuam9pbignICcpO1xuICB9XG5cbiAgZ2V0QXJpYVNvcnQoY29sdW1uOiBEYXRhVGFibGVDb2x1bW48VD4pOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAoIWNvbHVtbi5zb3J0YWJsZSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKHRoaXMuY3VycmVudFNvcnQ/LmNvbHVtbiAhPT0gY29sdW1uLmtleSkgcmV0dXJuICdub25lJztcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50U29ydC5kaXJlY3Rpb24gPT09ICdhc2MnID8gJ2FzY2VuZGluZycgOiAnZGVzY2VuZGluZyc7XG4gIH1cblxuICBnZXRSb3dOdW1iZXIoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3Qgc3RhcnQgPSB0aGlzLnByb3BzLnJvd051bWJlclN0YXJ0ID8/IDE7XG4gICAgaWYgKHRoaXMucHJvcHMucGFnaW5hdGlvbikge1xuICAgICAgcmV0dXJuIHN0YXJ0ICsgdGhpcy5wcm9wcy5wYWdpbmF0aW9uLnBhZ2UgKiB0aGlzLnByb3BzLnBhZ2luYXRpb24ucGFnZVNpemUgKyBpbmRleDtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXJ0ICsgaW5kZXg7XG4gIH1cblxuICBnZXRSb3dJZChyb3c6IFQpOiBhbnkge1xuICAgIGlmICh0aGlzLnByb3BzLnNlbGVjdGlvbj8udHJhY2tCeSkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMuc2VsZWN0aW9uLnRyYWNrQnkocm93KTtcbiAgICB9XG4gICAgcmV0dXJuIHJvdztcbiAgfVxuXG4gIHRyYWNrQnlGbihyb3c6IFQpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFJvd0lkKHJvdyk7XG4gIH1cblxuICBpc1Jvd1NlbGVjdGVkKHJvdzogVCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkUm93cy5oYXModGhpcy5nZXRSb3dJZChyb3cpKTtcbiAgfVxuXG4gIG9uU29ydChjb2x1bW46IERhdGFUYWJsZUNvbHVtbjxUPik6IHZvaWQge1xuICAgIGlmICghY29sdW1uLnNvcnRhYmxlKSByZXR1cm47XG5cbiAgICBsZXQgZGlyZWN0aW9uOiAnYXNjJyB8ICdkZXNjJyB8IG51bGwgPSAnYXNjJztcblxuICAgIGlmICh0aGlzLmN1cnJlbnRTb3J0Py5jb2x1bW4gPT09IGNvbHVtbi5rZXkpIHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRTb3J0LmRpcmVjdGlvbiA9PT0gJ2FzYycpIHtcbiAgICAgICAgZGlyZWN0aW9uID0gJ2Rlc2MnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlyZWN0aW9uID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGlyZWN0aW9uKSB7XG4gICAgICB0aGlzLmN1cnJlbnRTb3J0ID0geyBjb2x1bW46IGNvbHVtbi5rZXksIGRpcmVjdGlvbiB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnJlbnRTb3J0ID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnNvcnRDaGFuZ2UuZW1pdCh7XG4gICAgICBjb2x1bW46IGNvbHVtbi5rZXksXG4gICAgICBkaXJlY3Rpb24sXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5wcm9wcy5jbGllbnRTb3J0KSB7XG4gICAgICB0aGlzLnVwZGF0ZURpc3BsYXllZERhdGEoKTtcbiAgICB9XG4gIH1cblxuICBvblJvd0NsaWNrKHJvdzogVCwgaW5kZXg6IG51bWJlciwgZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucHJvcHMucm93Q2xpY2thYmxlKSByZXR1cm47XG5cbiAgICB0aGlzLnJvd0NsaWNrLmVtaXQoe1xuICAgICAgcm93LFxuICAgICAgaW5kZXgsXG4gICAgICBldmVudCxcbiAgICB9KTtcbiAgfVxuXG4gIHRvZ2dsZVNlbGVjdEFsbChldmVudDogQ3VzdG9tRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBjaGVja2VkID0gZXZlbnQuZGV0YWlsLmNoZWNrZWQ7XG5cbiAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgdGhpcy5kaXNwbGF5ZWREYXRhLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MuYWRkKHRoaXMuZ2V0Um93SWQocm93KSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNwbGF5ZWREYXRhLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MuZGVsZXRlKHRoaXMuZ2V0Um93SWQocm93KSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2UoY2hlY2tlZCA/ICdzZWxlY3RBbGwnIDogJ2Rlc2VsZWN0QWxsJyk7XG4gIH1cblxuICB0b2dnbGVSb3dTZWxlY3Rpb24ocm93OiBULCBldmVudDogQ3VzdG9tRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCByb3dJZCA9IHRoaXMuZ2V0Um93SWQocm93KTtcbiAgICBjb25zdCBjaGVja2VkID0gZXZlbnQuZGV0YWlsLmNoZWNrZWQ7XG5cbiAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFJvd3MuYWRkKHJvd0lkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZFJvd3MuZGVsZXRlKHJvd0lkKTtcbiAgICB9XG5cbiAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2UoY2hlY2tlZCA/ICdzZWxlY3QnIDogJ2Rlc2VsZWN0Jywgcm93KTtcbiAgfVxuXG4gIHNlbGVjdFNpbmdsZVJvdyhyb3c6IFQpOiB2b2lkIHtcbiAgICBjb25zdCByb3dJZCA9IHRoaXMuZ2V0Um93SWQocm93KTtcbiAgICBjb25zdCB3YXNTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRSb3dzLmhhcyhyb3dJZCk7XG5cbiAgICB0aGlzLnNlbGVjdGVkUm93cy5jbGVhcigpO1xuXG4gICAgaWYgKCF3YXNTZWxlY3RlZCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFJvd3MuYWRkKHJvd0lkKTtcbiAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZSgnc2VsZWN0Jywgcm93KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlKCdkZXNlbGVjdCcsIHJvdyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBlbWl0U2VsZWN0aW9uQ2hhbmdlKFxuICAgIGFjdGlvbjogJ3NlbGVjdCcgfCAnZGVzZWxlY3QnIHwgJ3NlbGVjdEFsbCcgfCAnZGVzZWxlY3RBbGwnLFxuICAgIGNoYW5nZWRSb3c/OiBUXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5wcm9wcy5kYXRhLmZpbHRlcihyb3cgPT4gdGhpcy5pc1Jvd1NlbGVjdGVkKHJvdykpO1xuXG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh7XG4gICAgICBzZWxlY3RlZCxcbiAgICAgIGNoYW5nZWRSb3csXG4gICAgICBhY3Rpb24sXG4gICAgfSk7XG4gIH1cblxuICBnb1RvUGFnZShwYWdlOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucHJvcHMucGFnaW5hdGlvbikgcmV0dXJuO1xuXG4gICAgY29uc3QgcHJldmlvdXNQYWdlID0gdGhpcy5wcm9wcy5wYWdpbmF0aW9uLnBhZ2U7XG4gICAgY29uc3QgbWF4UGFnZSA9IHRoaXMudG90YWxQYWdlcyAtIDE7XG4gICAgY29uc3QgbmV3UGFnZSA9IE1hdGgubWF4KDAsIE1hdGgubWluKHBhZ2UsIG1heFBhZ2UpKTtcblxuICAgIHRoaXMucGFnZUNoYW5nZS5lbWl0KHtcbiAgICAgIHBhZ2U6IG5ld1BhZ2UsXG4gICAgICBwYWdlU2l6ZTogdGhpcy5wcm9wcy5wYWdpbmF0aW9uLnBhZ2VTaXplLFxuICAgICAgcHJldmlvdXNQYWdlLFxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMucHJvcHMuY2xpZW50UGFnaW5hdGlvbikge1xuICAgICAgdGhpcy5wcm9wcy5wYWdpbmF0aW9uLnBhZ2UgPSBuZXdQYWdlO1xuICAgICAgdGhpcy51cGRhdGVEaXNwbGF5ZWREYXRhKCk7XG4gICAgfVxuICB9XG5cbiAgb25QYWdlU2l6ZUNoYW5nZShldmVudDogQ3VzdG9tRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucHJvcHMucGFnaW5hdGlvbikgcmV0dXJuO1xuXG4gICAgY29uc3QgbmV3UGFnZVNpemUgPSBldmVudC5kZXRhaWwudmFsdWU7XG4gICAgY29uc3QgcHJldmlvdXNQYWdlID0gdGhpcy5wcm9wcy5wYWdpbmF0aW9uLnBhZ2U7XG5cbiAgICAvLyBSZWNhbGN1bGF0ZSBwYWdlIHRvIGtlZXAgZmlyc3QgdmlzaWJsZSBpdGVtXG4gICAgY29uc3QgZmlyc3RJdGVtID0gcHJldmlvdXNQYWdlICogdGhpcy5wcm9wcy5wYWdpbmF0aW9uLnBhZ2VTaXplO1xuICAgIGNvbnN0IG5ld1BhZ2UgPSBNYXRoLmZsb29yKGZpcnN0SXRlbSAvIG5ld1BhZ2VTaXplKTtcblxuICAgIHRoaXMucGFnZUNoYW5nZS5lbWl0KHtcbiAgICAgIHBhZ2U6IG5ld1BhZ2UsXG4gICAgICBwYWdlU2l6ZTogbmV3UGFnZVNpemUsXG4gICAgICBwcmV2aW91c1BhZ2UsXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5wcm9wcy5jbGllbnRQYWdpbmF0aW9uKSB7XG4gICAgICB0aGlzLnByb3BzLnBhZ2luYXRpb24ucGFnZVNpemUgPSBuZXdQYWdlU2l6ZTtcbiAgICAgIHRoaXMucHJvcHMucGFnaW5hdGlvbi5wYWdlID0gbmV3UGFnZTtcbiAgICAgIHRoaXMudXBkYXRlRGlzcGxheWVkRGF0YSgpO1xuICAgIH1cbiAgfVxufVxuIl19
|