@beautinique/frontend-components 1.0.8 → 1.0.9
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/README.md +225 -16
- package/dist/auth/SocialAuth.d.cts +33 -0
- package/dist/auth/SocialAuth.d.cts.map +1 -0
- package/dist/auth/SocialAuth.d.ts +33 -0
- package/dist/auth/SocialAuth.d.ts.map +1 -0
- package/dist/auth/index.cjs +34 -26
- package/dist/auth/index.cjs.map +1 -1
- package/dist/auth/index.d.cts +1 -0
- package/dist/auth/index.d.cts.map +1 -1
- package/dist/auth/index.d.ts +1 -0
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +32 -25
- package/dist/auth/index.js.map +1 -1
- package/dist/breadcrumb/Breadcrumb.d.cts +34 -0
- package/dist/breadcrumb/Breadcrumb.d.cts.map +1 -0
- package/dist/breadcrumb/Breadcrumb.d.ts +34 -0
- package/dist/breadcrumb/Breadcrumb.d.ts.map +1 -0
- package/dist/breadcrumb/breadcrumb-icons.d.cts +6 -0
- package/dist/breadcrumb/breadcrumb-icons.d.cts.map +1 -0
- package/dist/breadcrumb/breadcrumb-icons.d.ts +6 -0
- package/dist/breadcrumb/breadcrumb-icons.d.ts.map +1 -0
- package/dist/breadcrumb/getBreadcrumbItems.d.cts +16 -0
- package/dist/breadcrumb/getBreadcrumbItems.d.cts.map +1 -0
- package/dist/breadcrumb/getBreadcrumbItems.d.ts +16 -0
- package/dist/breadcrumb/getBreadcrumbItems.d.ts.map +1 -0
- package/dist/breadcrumb/index.cjs +110 -0
- package/dist/breadcrumb/index.cjs.map +1 -0
- package/dist/breadcrumb/index.d.cts +3 -0
- package/dist/breadcrumb/index.d.cts.map +1 -0
- package/dist/breadcrumb/index.d.ts +3 -0
- package/dist/breadcrumb/index.d.ts.map +1 -0
- package/dist/breadcrumb/index.js +107 -0
- package/dist/breadcrumb/index.js.map +1 -0
- package/dist/color-input/ColorInput.d.cts +33 -0
- package/dist/color-input/ColorInput.d.cts.map +1 -0
- package/dist/color-input/ColorInput.d.ts +33 -0
- package/dist/color-input/ColorInput.d.ts.map +1 -0
- package/dist/color-input/color-input-icons.d.cts +6 -0
- package/dist/color-input/color-input-icons.d.cts.map +1 -0
- package/dist/color-input/color-input-icons.d.ts +6 -0
- package/dist/color-input/color-input-icons.d.ts.map +1 -0
- package/dist/color-input/color.d.cts +10 -0
- package/dist/color-input/color.d.cts.map +1 -0
- package/dist/color-input/color.d.ts +10 -0
- package/dist/color-input/color.d.ts.map +1 -0
- package/dist/color-input/index.cjs +375 -0
- package/dist/color-input/index.cjs.map +1 -0
- package/dist/color-input/index.d.cts +2 -0
- package/dist/color-input/index.d.cts.map +1 -0
- package/dist/color-input/index.d.ts +2 -0
- package/dist/color-input/index.d.ts.map +1 -0
- package/dist/color-input/index.js +373 -0
- package/dist/color-input/index.js.map +1 -0
- package/dist/file-input/FileInput.d.cts +53 -0
- package/dist/file-input/FileInput.d.cts.map +1 -0
- package/dist/file-input/FileInput.d.ts +53 -0
- package/dist/file-input/FileInput.d.ts.map +1 -0
- package/dist/file-input/file-input-icons.d.cts +6 -0
- package/dist/file-input/file-input-icons.d.cts.map +1 -0
- package/dist/file-input/file-input-icons.d.ts +6 -0
- package/dist/file-input/file-input-icons.d.ts.map +1 -0
- package/dist/file-input/index.cjs +259 -0
- package/dist/file-input/index.cjs.map +1 -0
- package/dist/file-input/index.d.cts +3 -0
- package/dist/file-input/index.d.cts.map +1 -0
- package/dist/file-input/index.d.ts +3 -0
- package/dist/file-input/index.d.ts.map +1 -0
- package/dist/file-input/index.js +256 -0
- package/dist/file-input/index.js.map +1 -0
- package/dist/file-input/media-type.d.cts +8 -0
- package/dist/file-input/media-type.d.cts.map +1 -0
- package/dist/file-input/media-type.d.ts +8 -0
- package/dist/file-input/media-type.d.ts.map +1 -0
- package/dist/file-input/useObjectUrls.d.cts +10 -0
- package/dist/file-input/useObjectUrls.d.cts.map +1 -0
- package/dist/file-input/useObjectUrls.d.ts +10 -0
- package/dist/file-input/useObjectUrls.d.ts.map +1 -0
- package/dist/hierarchy-select/HierarchySelect.d.cts +58 -0
- package/dist/hierarchy-select/HierarchySelect.d.cts.map +1 -0
- package/dist/hierarchy-select/HierarchySelect.d.ts +58 -0
- package/dist/hierarchy-select/HierarchySelect.d.ts.map +1 -0
- package/dist/hierarchy-select/hierarchy-select-icons.d.cts +6 -0
- package/dist/hierarchy-select/hierarchy-select-icons.d.cts.map +1 -0
- package/dist/hierarchy-select/hierarchy-select-icons.d.ts +6 -0
- package/dist/hierarchy-select/hierarchy-select-icons.d.ts.map +1 -0
- package/dist/hierarchy-select/index.cjs +596 -0
- package/dist/hierarchy-select/index.cjs.map +1 -0
- package/dist/hierarchy-select/index.d.cts +2 -0
- package/dist/hierarchy-select/index.d.cts.map +1 -0
- package/dist/hierarchy-select/index.d.ts +2 -0
- package/dist/hierarchy-select/index.d.ts.map +1 -0
- package/dist/hierarchy-select/index.js +594 -0
- package/dist/hierarchy-select/index.js.map +1 -0
- package/dist/hierarchy-select/tree.d.cts +38 -0
- package/dist/hierarchy-select/tree.d.cts.map +1 -0
- package/dist/hierarchy-select/tree.d.ts +38 -0
- package/dist/hierarchy-select/tree.d.ts.map +1 -0
- package/dist/index.cjs +7 -0
- package/dist/index.d.cts +1 -0
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/inputs/Checkbox.d.cts +21 -0
- package/dist/inputs/Checkbox.d.cts.map +1 -0
- package/dist/inputs/Checkbox.d.ts +21 -0
- package/dist/inputs/Checkbox.d.ts.map +1 -0
- package/dist/inputs/Input.d.cts +26 -0
- package/dist/inputs/Input.d.cts.map +1 -0
- package/dist/inputs/Input.d.ts +26 -0
- package/dist/inputs/Input.d.ts.map +1 -0
- package/dist/inputs/InputError.d.cts +11 -0
- package/dist/inputs/InputError.d.cts.map +1 -0
- package/dist/inputs/InputError.d.ts +11 -0
- package/dist/inputs/InputError.d.ts.map +1 -0
- package/dist/inputs/InputIcon.d.cts +9 -0
- package/dist/inputs/InputIcon.d.cts.map +1 -0
- package/dist/inputs/InputIcon.d.ts +9 -0
- package/dist/inputs/InputIcon.d.ts.map +1 -0
- package/dist/inputs/InputLabel.d.cts +8 -0
- package/dist/inputs/InputLabel.d.cts.map +1 -0
- package/dist/inputs/InputLabel.d.ts +8 -0
- package/dist/inputs/InputLabel.d.ts.map +1 -0
- package/dist/inputs/Radio.d.cts +25 -0
- package/dist/inputs/Radio.d.cts.map +1 -0
- package/dist/inputs/Radio.d.ts +25 -0
- package/dist/inputs/Radio.d.ts.map +1 -0
- package/dist/inputs/Select.d.cts +53 -0
- package/dist/inputs/Select.d.cts.map +1 -0
- package/dist/inputs/Select.d.ts +53 -0
- package/dist/inputs/Select.d.ts.map +1 -0
- package/dist/inputs/Textarea.d.cts +19 -0
- package/dist/inputs/Textarea.d.cts.map +1 -0
- package/dist/inputs/Textarea.d.ts +19 -0
- package/dist/inputs/Textarea.d.ts.map +1 -0
- package/dist/inputs/index.cjs +746 -0
- package/dist/inputs/index.cjs.map +1 -0
- package/dist/inputs/index.d.cts +10 -0
- package/dist/inputs/index.d.cts.map +1 -0
- package/dist/inputs/index.d.ts +10 -0
- package/dist/inputs/index.d.ts.map +1 -0
- package/dist/inputs/index.js +737 -0
- package/dist/inputs/index.js.map +1 -0
- package/dist/inputs/inputs-icons.d.cts +6 -0
- package/dist/inputs/inputs-icons.d.cts.map +1 -0
- package/dist/inputs/inputs-icons.d.ts +6 -0
- package/dist/inputs/inputs-icons.d.ts.map +1 -0
- package/dist/inputs/types.d.cts +48 -0
- package/dist/inputs/types.d.cts.map +1 -0
- package/dist/inputs/types.d.ts +48 -0
- package/dist/inputs/types.d.ts.map +1 -0
- package/dist/inputs/useFieldIds.d.cts +24 -0
- package/dist/inputs/useFieldIds.d.cts.map +1 -0
- package/dist/inputs/useFieldIds.d.ts +24 -0
- package/dist/inputs/useFieldIds.d.ts.map +1 -0
- package/dist/layout/ApiStatus.d.cts +20 -0
- package/dist/layout/ApiStatus.d.cts.map +1 -0
- package/dist/layout/ApiStatus.d.ts +20 -0
- package/dist/layout/ApiStatus.d.ts.map +1 -0
- package/dist/layout/BorderGradient.d.cts +11 -0
- package/dist/layout/BorderGradient.d.cts.map +1 -0
- package/dist/layout/BorderGradient.d.ts +11 -0
- package/dist/layout/BorderGradient.d.ts.map +1 -0
- package/dist/layout/ConfirmModal.d.cts +44 -0
- package/dist/layout/ConfirmModal.d.cts.map +1 -0
- package/dist/layout/ConfirmModal.d.ts +44 -0
- package/dist/layout/ConfirmModal.d.ts.map +1 -0
- package/dist/layout/Dropdown.d.cts +33 -0
- package/dist/layout/Dropdown.d.cts.map +1 -0
- package/dist/layout/Dropdown.d.ts +33 -0
- package/dist/layout/Dropdown.d.ts.map +1 -0
- package/dist/layout/LoadingPage.d.cts +11 -0
- package/dist/layout/LoadingPage.d.cts.map +1 -0
- package/dist/layout/LoadingPage.d.ts +11 -0
- package/dist/layout/LoadingPage.d.ts.map +1 -0
- package/dist/layout/LoadingRings.d.cts +12 -0
- package/dist/layout/LoadingRings.d.cts.map +1 -0
- package/dist/layout/LoadingRings.d.ts +12 -0
- package/dist/layout/LoadingRings.d.ts.map +1 -0
- package/dist/layout/LoadingText.d.cts +13 -0
- package/dist/layout/LoadingText.d.cts.map +1 -0
- package/dist/layout/LoadingText.d.ts +13 -0
- package/dist/layout/LoadingText.d.ts.map +1 -0
- package/dist/layout/ModalWrapper.d.cts +48 -0
- package/dist/layout/ModalWrapper.d.cts.map +1 -0
- package/dist/layout/ModalWrapper.d.ts +48 -0
- package/dist/layout/ModalWrapper.d.ts.map +1 -0
- package/dist/layout/NetworkStatusToaster.d.cts +39 -0
- package/dist/layout/NetworkStatusToaster.d.cts.map +1 -0
- package/dist/layout/NetworkStatusToaster.d.ts +39 -0
- package/dist/layout/NetworkStatusToaster.d.ts.map +1 -0
- package/dist/layout/ScrollableGradientContainer.d.cts +28 -0
- package/dist/layout/ScrollableGradientContainer.d.cts.map +1 -0
- package/dist/layout/ScrollableGradientContainer.d.ts +28 -0
- package/dist/layout/ScrollableGradientContainer.d.ts.map +1 -0
- package/dist/layout/Skeleton.d.cts +9 -0
- package/dist/layout/Skeleton.d.cts.map +1 -0
- package/dist/layout/Skeleton.d.ts +9 -0
- package/dist/layout/Skeleton.d.ts.map +1 -0
- package/dist/layout/Table.d.cts +9 -0
- package/dist/layout/Table.d.cts.map +1 -0
- package/dist/layout/Table.d.ts +9 -0
- package/dist/layout/Table.d.ts.map +1 -0
- package/dist/layout/index.cjs +743 -3
- package/dist/layout/index.cjs.map +1 -1
- package/dist/layout/index.d.cts +12 -0
- package/dist/layout/index.d.cts.map +1 -1
- package/dist/layout/index.d.ts +12 -0
- package/dist/layout/index.d.ts.map +1 -1
- package/dist/layout/index.js +724 -2
- package/dist/layout/index.js.map +1 -1
- package/dist/layout/layout-icons.d.cts +6 -0
- package/dist/layout/layout-icons.d.cts.map +1 -0
- package/dist/layout/layout-icons.d.ts +6 -0
- package/dist/layout/layout-icons.d.ts.map +1 -0
- package/dist/lib/dropdown-position.d.cts +33 -0
- package/dist/lib/dropdown-position.d.cts.map +1 -0
- package/dist/lib/dropdown-position.d.ts +33 -0
- package/dist/lib/dropdown-position.d.ts.map +1 -0
- package/dist/lib/focus.d.cts +3 -0
- package/dist/lib/focus.d.cts.map +1 -0
- package/dist/lib/focus.d.ts +3 -0
- package/dist/lib/focus.d.ts.map +1 -0
- package/dist/lib/icon-registry.d.cts +14 -0
- package/dist/lib/icon-registry.d.cts.map +1 -0
- package/dist/lib/icon-registry.d.ts +14 -0
- package/dist/lib/icon-registry.d.ts.map +1 -0
- package/dist/lib/mergeRefs.d.cts +10 -0
- package/dist/lib/mergeRefs.d.cts.map +1 -0
- package/dist/lib/mergeRefs.d.ts +10 -0
- package/dist/lib/mergeRefs.d.ts.map +1 -0
- package/dist/lib/scrollRowIntoView.d.cts +7 -0
- package/dist/lib/scrollRowIntoView.d.cts.map +1 -0
- package/dist/lib/scrollRowIntoView.d.ts +7 -0
- package/dist/lib/scrollRowIntoView.d.ts.map +1 -0
- package/dist/lib/typeahead.d.cts +21 -0
- package/dist/lib/typeahead.d.cts.map +1 -0
- package/dist/lib/typeahead.d.ts +21 -0
- package/dist/lib/typeahead.d.ts.map +1 -0
- package/dist/lib/useAnchoredBox.d.cts +26 -0
- package/dist/lib/useAnchoredBox.d.cts.map +1 -0
- package/dist/lib/useAnchoredBox.d.ts +26 -0
- package/dist/lib/useAnchoredBox.d.ts.map +1 -0
- package/dist/lib/useDismiss.d.cts +34 -0
- package/dist/lib/useDismiss.d.cts.map +1 -0
- package/dist/lib/useDismiss.d.ts +34 -0
- package/dist/lib/useDismiss.d.ts.map +1 -0
- package/dist/lib/useFocusTrap.d.cts +24 -0
- package/dist/lib/useFocusTrap.d.cts.map +1 -0
- package/dist/lib/useFocusTrap.d.ts +24 -0
- package/dist/lib/useFocusTrap.d.ts.map +1 -0
- package/dist/lib/useIsClient.d.cts +7 -0
- package/dist/lib/useIsClient.d.cts.map +1 -0
- package/dist/lib/useIsClient.d.ts +7 -0
- package/dist/lib/useIsClient.d.ts.map +1 -0
- package/dist/lib/usePrefersReducedMotion.d.cts +7 -0
- package/dist/lib/usePrefersReducedMotion.d.cts.map +1 -0
- package/dist/lib/usePrefersReducedMotion.d.ts +7 -0
- package/dist/lib/usePrefersReducedMotion.d.ts.map +1 -0
- package/dist/lib/useScrollLock.d.cts +7 -0
- package/dist/lib/useScrollLock.d.cts.map +1 -0
- package/dist/lib/useScrollLock.d.ts +7 -0
- package/dist/lib/useScrollLock.d.ts.map +1 -0
- package/dist/lib/useScrollable.d.cts +17 -0
- package/dist/lib/useScrollable.d.cts.map +1 -0
- package/dist/lib/useScrollable.d.ts +17 -0
- package/dist/lib/useScrollable.d.ts.map +1 -0
- package/dist/loading-screen/LoadingScreen.d.cts +21 -0
- package/dist/loading-screen/LoadingScreen.d.cts.map +1 -0
- package/dist/loading-screen/LoadingScreen.d.ts +21 -0
- package/dist/loading-screen/LoadingScreen.d.ts.map +1 -0
- package/dist/loading-screen/Teddy.d.cts +10 -0
- package/dist/loading-screen/Teddy.d.cts.map +1 -0
- package/dist/loading-screen/Teddy.d.ts +10 -0
- package/dist/loading-screen/Teddy.d.ts.map +1 -0
- package/dist/loading-screen/WakeUpProgress.d.cts +16 -0
- package/dist/loading-screen/WakeUpProgress.d.cts.map +1 -0
- package/dist/loading-screen/WakeUpProgress.d.ts +16 -0
- package/dist/loading-screen/WakeUpProgress.d.ts.map +1 -0
- package/dist/loading-screen/beauty-facts.d.cts +4 -0
- package/dist/loading-screen/beauty-facts.d.cts.map +1 -0
- package/dist/loading-screen/beauty-facts.d.ts +4 -0
- package/dist/loading-screen/beauty-facts.d.ts.map +1 -0
- package/dist/loading-screen/index.cjs +405 -0
- package/dist/loading-screen/index.cjs.map +1 -0
- package/dist/loading-screen/index.d.cts +5 -0
- package/dist/loading-screen/index.d.cts.map +1 -0
- package/dist/loading-screen/index.d.ts +5 -0
- package/dist/loading-screen/index.d.ts.map +1 -0
- package/dist/loading-screen/index.js +400 -0
- package/dist/loading-screen/index.js.map +1 -0
- package/dist/loading-screen/loading-screen-icons.d.cts +6 -0
- package/dist/loading-screen/loading-screen-icons.d.cts.map +1 -0
- package/dist/loading-screen/loading-screen-icons.d.ts +6 -0
- package/dist/loading-screen/loading-screen-icons.d.ts.map +1 -0
- package/dist/media/MediaCarousel.d.cts +30 -0
- package/dist/media/MediaCarousel.d.cts.map +1 -0
- package/dist/media/MediaCarousel.d.ts +30 -0
- package/dist/media/MediaCarousel.d.ts.map +1 -0
- package/dist/media/MediaCarouselWithModal.d.cts +17 -0
- package/dist/media/MediaCarouselWithModal.d.cts.map +1 -0
- package/dist/media/MediaCarouselWithModal.d.ts +17 -0
- package/dist/media/MediaCarouselWithModal.d.ts.map +1 -0
- package/dist/media/MediaCarouselWithParentMedia.d.cts +30 -0
- package/dist/media/MediaCarouselWithParentMedia.d.cts.map +1 -0
- package/dist/media/MediaCarouselWithParentMedia.d.ts +30 -0
- package/dist/media/MediaCarouselWithParentMedia.d.ts.map +1 -0
- package/dist/media/MediaModal.d.cts +27 -0
- package/dist/media/MediaModal.d.cts.map +1 -0
- package/dist/media/MediaModal.d.ts +27 -0
- package/dist/media/MediaModal.d.ts.map +1 -0
- package/dist/media/VideoPlayer.d.cts +37 -0
- package/dist/media/VideoPlayer.d.cts.map +1 -0
- package/dist/media/VideoPlayer.d.ts +37 -0
- package/dist/media/VideoPlayer.d.ts.map +1 -0
- package/dist/media/captureVideoPoster.d.cts +20 -0
- package/dist/media/captureVideoPoster.d.cts.map +1 -0
- package/dist/media/captureVideoPoster.d.ts +20 -0
- package/dist/media/captureVideoPoster.d.ts.map +1 -0
- package/dist/media/index.cjs +613 -0
- package/dist/media/index.cjs.map +1 -0
- package/dist/media/index.d.cts +8 -0
- package/dist/media/index.d.cts.map +1 -0
- package/dist/media/index.d.ts +8 -0
- package/dist/media/index.d.ts.map +1 -0
- package/dist/media/index.js +605 -0
- package/dist/media/index.js.map +1 -0
- package/dist/media/labels.d.cts +33 -0
- package/dist/media/labels.d.cts.map +1 -0
- package/dist/media/labels.d.ts +33 -0
- package/dist/media/labels.d.ts.map +1 -0
- package/dist/media/media-icons.d.cts +6 -0
- package/dist/media/media-icons.d.cts.map +1 -0
- package/dist/media/media-icons.d.ts +6 -0
- package/dist/media/media-icons.d.ts.map +1 -0
- package/dist/media/streaming.d.cts +18 -0
- package/dist/media/streaming.d.cts.map +1 -0
- package/dist/media/streaming.d.ts +18 -0
- package/dist/media/streaming.d.ts.map +1 -0
- package/dist/resend/index.cjs +5 -28
- package/dist/resend/index.cjs.map +1 -1
- package/dist/resend/index.js +1 -24
- package/dist/resend/index.js.map +1 -1
- package/dist/static-page/StaticPage.d.cts +91 -0
- package/dist/static-page/StaticPage.d.cts.map +1 -0
- package/dist/static-page/StaticPage.d.ts +91 -0
- package/dist/static-page/StaticPage.d.ts.map +1 -0
- package/dist/static-page/index.cjs +247 -0
- package/dist/static-page/index.cjs.map +1 -0
- package/dist/static-page/index.d.cts +2 -0
- package/dist/static-page/index.d.cts.map +1 -0
- package/dist/static-page/index.d.ts +2 -0
- package/dist/static-page/index.d.ts.map +1 -0
- package/dist/static-page/index.js +235 -0
- package/dist/static-page/index.js.map +1 -0
- package/dist/static-page/static-page-icons.d.cts +6 -0
- package/dist/static-page/static-page-icons.d.cts.map +1 -0
- package/dist/static-page/static-page-icons.d.ts +6 -0
- package/dist/static-page/static-page-icons.d.ts.map +1 -0
- package/dist/testimonials/TestimonialCarousel.d.cts +40 -0
- package/dist/testimonials/TestimonialCarousel.d.cts.map +1 -0
- package/dist/testimonials/TestimonialCarousel.d.ts +40 -0
- package/dist/testimonials/TestimonialCarousel.d.ts.map +1 -0
- package/dist/testimonials/index.cjs +246 -0
- package/dist/testimonials/index.cjs.map +1 -0
- package/dist/testimonials/index.d.cts +2 -0
- package/dist/testimonials/index.d.cts.map +1 -0
- package/dist/testimonials/index.d.ts +2 -0
- package/dist/testimonials/index.d.ts.map +1 -0
- package/dist/testimonials/index.js +244 -0
- package/dist/testimonials/index.js.map +1 -0
- package/dist/testimonials/testimonials-icons.d.cts +6 -0
- package/dist/testimonials/testimonials-icons.d.cts.map +1 -0
- package/dist/testimonials/testimonials-icons.d.ts +6 -0
- package/dist/testimonials/testimonials-icons.d.ts.map +1 -0
- package/dist/toast/index.cjs +2 -38
- package/dist/toast/index.cjs.map +1 -1
- package/dist/toast/index.js +1 -37
- package/dist/toast/index.js.map +1 -1
- package/package.json +67 -1
|
@@ -0,0 +1,405 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var react = require('react');
|
|
5
|
+
require('@beautinique/frontend-styles/teddy.css');
|
|
6
|
+
var react$1 = require('@iconify/react');
|
|
7
|
+
|
|
8
|
+
var __defProp = Object.defineProperty;
|
|
9
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
10
|
+
var Accent = /* @__PURE__ */ __name(({ children }) => /* @__PURE__ */ jsxRuntime.jsx("span", { className: "gradient-text-accent", children }), "Accent");
|
|
11
|
+
var BEAUTY_FACTS = [
|
|
12
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
13
|
+
"The term ",
|
|
14
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: '"Clean Beauty"' }),
|
|
15
|
+
" refers to skincare and makeup products made without harmful chemicals and toxins."
|
|
16
|
+
] }),
|
|
17
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
18
|
+
"In ",
|
|
19
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: '"1915"' }),
|
|
20
|
+
", Maurice Levy invented the first ",
|
|
21
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: '"twist-up lipstick"' }),
|
|
22
|
+
", revolutionizing the beauty industry."
|
|
23
|
+
] }),
|
|
24
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
25
|
+
"The first-ever commercial mascara, ",
|
|
26
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: '"Maybelline Cake Mascara"' }),
|
|
27
|
+
", was introduced in ",
|
|
28
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: '"1917"' }),
|
|
29
|
+
"."
|
|
30
|
+
] }),
|
|
31
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
32
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "BB Cream (2011)" }),
|
|
33
|
+
" became a global sensation by combining skincare and foundation into one product."
|
|
34
|
+
] }),
|
|
35
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
36
|
+
"The first ",
|
|
37
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "cruelty-free certification" }),
|
|
38
|
+
" was introduced in ",
|
|
39
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: '"1996"' }),
|
|
40
|
+
" to support ethical beauty practices."
|
|
41
|
+
] }),
|
|
42
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
43
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "Vegan beauty" }),
|
|
44
|
+
" is on the rise, with brands formulating products without any animal-derived ingredients."
|
|
45
|
+
] }),
|
|
46
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
47
|
+
"Dermatologists recommend ",
|
|
48
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "SPF 30+" }),
|
|
49
|
+
" for daily sun protection to prevent premature aging and skin damage."
|
|
50
|
+
] }),
|
|
51
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
52
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "Serums" }),
|
|
53
|
+
" contain concentrated active ingredients that penetrate deeper into the skin for enhanced benefits."
|
|
54
|
+
] }),
|
|
55
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
56
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "Micellar Water" }),
|
|
57
|
+
" is a gentle yet effective way to cleanse the skin without rinsing, perfect for all skin types."
|
|
58
|
+
] }),
|
|
59
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
60
|
+
"The world's first ",
|
|
61
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "organic beauty brand" }),
|
|
62
|
+
" was founded in ",
|
|
63
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "1978" }),
|
|
64
|
+
", paving the way for natural cosmetics."
|
|
65
|
+
] }),
|
|
66
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
67
|
+
"Some beauty brands use ",
|
|
68
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "AI-powered tools" }),
|
|
69
|
+
" to personalize skincare recommendations based on user preferences."
|
|
70
|
+
] }),
|
|
71
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
72
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "Hyaluronic Acid" }),
|
|
73
|
+
" is a powerful hydrating ingredient that can hold up to 1,000 times its weight in water."
|
|
74
|
+
] }),
|
|
75
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
76
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "Retinol" }),
|
|
77
|
+
" is a dermatologist-approved ingredient known for reducing fine lines and improving skin texture."
|
|
78
|
+
] }),
|
|
79
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
80
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "Green Beauty" }),
|
|
81
|
+
" focuses on sustainable packaging and eco-friendly formulations to reduce environmental impact."
|
|
82
|
+
] }),
|
|
83
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
84
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "Sheet masks" }),
|
|
85
|
+
" originated in Indian and have become a staple in self-care and skincare routines worldwide."
|
|
86
|
+
] }),
|
|
87
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
88
|
+
"The global ",
|
|
89
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "cosmetic industry" }),
|
|
90
|
+
" is expected to reach ",
|
|
91
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "$500 billion" }),
|
|
92
|
+
" by ",
|
|
93
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "2026" }),
|
|
94
|
+
"."
|
|
95
|
+
] }),
|
|
96
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
97
|
+
"The first-ever ",
|
|
98
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "waterproof mascara" }),
|
|
99
|
+
" was developed in ",
|
|
100
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "1938" }),
|
|
101
|
+
" and changed the beauty game."
|
|
102
|
+
] }),
|
|
103
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
104
|
+
"The first ",
|
|
105
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "liquid foundation" }),
|
|
106
|
+
" was launched in the ",
|
|
107
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "1950s" }),
|
|
108
|
+
", offering a more natural finish."
|
|
109
|
+
] }),
|
|
110
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
111
|
+
'The term "glass skin" was popularized by ',
|
|
112
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "Indian beauty" }),
|
|
113
|
+
" trends, emphasizing dewy, radiant skin."
|
|
114
|
+
] }),
|
|
115
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
116
|
+
"The first commercial ",
|
|
117
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "lip gloss" }),
|
|
118
|
+
" was introduced by Max Factor in ",
|
|
119
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "1930" }),
|
|
120
|
+
"."
|
|
121
|
+
] }),
|
|
122
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
123
|
+
"In the early ",
|
|
124
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "2000s" }),
|
|
125
|
+
", mineral makeup became a sought-after trend for its natural ingredients and skin benefits."
|
|
126
|
+
] }),
|
|
127
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
128
|
+
"The ",
|
|
129
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "Beauty Blender," }),
|
|
130
|
+
" launched in ",
|
|
131
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "2007" }),
|
|
132
|
+
", transformed the way people applied foundation."
|
|
133
|
+
] }),
|
|
134
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
135
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "Facial oils" }),
|
|
136
|
+
" have gained popularity for their nourishing and hydrating properties, even for oily skin types."
|
|
137
|
+
] }),
|
|
138
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
139
|
+
"Some brands are experimenting with ",
|
|
140
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "AI makeup try-ons" }),
|
|
141
|
+
" to help users choose the perfect shade before purchasing."
|
|
142
|
+
] }),
|
|
143
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
144
|
+
"The concept of a ",
|
|
145
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "beauty subscription box" }),
|
|
146
|
+
" allows customers to try new products every month."
|
|
147
|
+
] }),
|
|
148
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
149
|
+
"Some experts believe that ",
|
|
150
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "customized skincare" }),
|
|
151
|
+
" could be the future of the beauty industry."
|
|
152
|
+
] }),
|
|
153
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
154
|
+
"Others caution about potential risks of certain ",
|
|
155
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "skincare ingredients," }),
|
|
156
|
+
" such as parabens and sulfates."
|
|
157
|
+
] }),
|
|
158
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
159
|
+
"The development of ",
|
|
160
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "sustainable beauty" }),
|
|
161
|
+
" aims to reduce plastic waste and promote ethical sourcing."
|
|
162
|
+
] }),
|
|
163
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
164
|
+
"Despite trends, timeless beauty practices like ",
|
|
165
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "hydration" }),
|
|
166
|
+
" and ",
|
|
167
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "healthy eating" }),
|
|
168
|
+
" remain essential for glowing skin."
|
|
169
|
+
] }),
|
|
170
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
171
|
+
"The first known use of the term ",
|
|
172
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: '"cosmeceuticals"' }),
|
|
173
|
+
" was in ",
|
|
174
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "1984" }),
|
|
175
|
+
" to describe skincare products with medical benefits."
|
|
176
|
+
] }),
|
|
177
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
178
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "Fermented skincare" }),
|
|
179
|
+
" is gaining popularity for its probiotic benefits that improve skin health."
|
|
180
|
+
] }),
|
|
181
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
182
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "Beauty influencers" }),
|
|
183
|
+
" have a huge impact on the cosmetic industry, shaping trends and product demands."
|
|
184
|
+
] }),
|
|
185
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
186
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "AR beauty" }),
|
|
187
|
+
" apps are helping customers try on makeup virtually before making a purchase."
|
|
188
|
+
] }),
|
|
189
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
190
|
+
"The concept of ",
|
|
191
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "smart skincare devices" }),
|
|
192
|
+
" is transforming beauty routines with AI-powered technology."
|
|
193
|
+
] }),
|
|
194
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
195
|
+
"Some companies are developing ",
|
|
196
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "biodegradable glitter" }),
|
|
197
|
+
" to make beauty more sustainable."
|
|
198
|
+
] }),
|
|
199
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
200
|
+
"The future of ",
|
|
201
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "clean beauty" }),
|
|
202
|
+
" is focused on transparency, sustainability, and effective formulations."
|
|
203
|
+
] }),
|
|
204
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
205
|
+
"The first ",
|
|
206
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "fragrance-free makeup line" }),
|
|
207
|
+
" was launched in ",
|
|
208
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "1980" }),
|
|
209
|
+
" to cater to sensitive skin."
|
|
210
|
+
] }),
|
|
211
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
212
|
+
"The term ",
|
|
213
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "dermocosmetics" }),
|
|
214
|
+
" is used for products that bridge the gap between skincare and dermatology."
|
|
215
|
+
] }),
|
|
216
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
217
|
+
"The rise of ",
|
|
218
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "gender-neutral beauty" }),
|
|
219
|
+
" is redefining the industry with inclusive products for all."
|
|
220
|
+
] }),
|
|
221
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
222
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "Biodegradable packaging" }),
|
|
223
|
+
" is becoming more common in the beauty industry to reduce waste."
|
|
224
|
+
] }),
|
|
225
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
226
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "Refillable makeup" }),
|
|
227
|
+
" is a growing trend that allows users to reuse packaging and minimize waste."
|
|
228
|
+
] }),
|
|
229
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
230
|
+
"The first commercial ",
|
|
231
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "nail polish" }),
|
|
232
|
+
" was inspired by automobile paint and introduced in ",
|
|
233
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "1932" }),
|
|
234
|
+
"."
|
|
235
|
+
] }),
|
|
236
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
237
|
+
"The term ",
|
|
238
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: '"blue beauty"' }),
|
|
239
|
+
" refers to eco-conscious products designed to protect ocean ecosystems."
|
|
240
|
+
] }),
|
|
241
|
+
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
242
|
+
/* @__PURE__ */ jsxRuntime.jsx(Accent, { children: "Glass packaging" }),
|
|
243
|
+
" is being used more in luxury beauty to reduce plastic waste and enhance sustainability."
|
|
244
|
+
] })
|
|
245
|
+
];
|
|
246
|
+
var Teddy = /* @__PURE__ */ __name((divProps) => /* @__PURE__ */ jsxRuntime.jsxs("div", { "aria-label": "Loading Teddy", role: "img", ...divProps, className: "article", children: [
|
|
247
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "body", children: [
|
|
248
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "shadow" }),
|
|
249
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "chest", children: [
|
|
250
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "leg" }),
|
|
251
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "leg" }),
|
|
252
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "arm" }),
|
|
253
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "arm" })
|
|
254
|
+
] })
|
|
255
|
+
] }),
|
|
256
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "head", children: [
|
|
257
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "ear" }),
|
|
258
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "ear" }),
|
|
259
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "face", children: [
|
|
260
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "eye" }),
|
|
261
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "eye" }),
|
|
262
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "nose" }),
|
|
263
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "cheek" }),
|
|
264
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "cheek" }),
|
|
265
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mouth" }),
|
|
266
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "hair" })
|
|
267
|
+
] })
|
|
268
|
+
] })
|
|
269
|
+
] }), "Teddy");
|
|
270
|
+
var randomIndex = /* @__PURE__ */ __name((length, except) => {
|
|
271
|
+
if (length <= 1) return 0;
|
|
272
|
+
const index = Math.floor(Math.random() * (except === void 0 ? length : length - 1));
|
|
273
|
+
return except !== void 0 && index >= except ? index + 1 : index;
|
|
274
|
+
}, "randomIndex");
|
|
275
|
+
var LoadingScreen = /* @__PURE__ */ __name(({
|
|
276
|
+
className = "",
|
|
277
|
+
children,
|
|
278
|
+
facts = BEAUTY_FACTS,
|
|
279
|
+
interval = 5e3,
|
|
280
|
+
label = "Loading"
|
|
281
|
+
}) => {
|
|
282
|
+
const [index, setIndex] = react.useState(() => randomIndex(facts.length));
|
|
283
|
+
react.useEffect(() => {
|
|
284
|
+
if (facts.length <= 1) return;
|
|
285
|
+
const timer = window.setInterval(() => {
|
|
286
|
+
setIndex((current) => randomIndex(facts.length, current));
|
|
287
|
+
}, interval);
|
|
288
|
+
return () => {
|
|
289
|
+
window.clearInterval(timer);
|
|
290
|
+
};
|
|
291
|
+
}, [facts.length, interval]);
|
|
292
|
+
const hasChildren = children !== void 0 && children !== null && children !== false;
|
|
293
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
294
|
+
"div",
|
|
295
|
+
{
|
|
296
|
+
className: `fixed inset-0 z-100 flex h-dvh w-dvw flex-col items-center justify-center px-10 ${hasChildren ? "" : "bg-[radial-gradient(circle,rgba(var(--primary-rgb),0.5)_0%,rgba(var(--primary-rgb),0.2)_30%,rgba(var(--primary-invert-rgb),0.2)_60%,rgba(var(--primary-invert-rgb),1)_100%)]"} ${className}`,
|
|
297
|
+
children: [
|
|
298
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { role: "status", className: "sr-only", children: label }),
|
|
299
|
+
hasChildren ? children : /* @__PURE__ */ jsxRuntime.jsx(Teddy, {}),
|
|
300
|
+
facts.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-primary/50 absolute bottom-[10%] mx-10 max-w-4xl rounded-xl border px-4 py-2 text-center backdrop-blur-2xl", children: /* @__PURE__ */ jsxRuntime.jsx("p", { "aria-live": "off", className: "gradient-text-silver text-sm text-shadow-2xs md:text-lg", children: facts[index % facts.length] }) })
|
|
301
|
+
]
|
|
302
|
+
}
|
|
303
|
+
);
|
|
304
|
+
}, "LoadingScreen");
|
|
305
|
+
var createIconRegistry = /* @__PURE__ */ __name((sets) => {
|
|
306
|
+
let registered = false;
|
|
307
|
+
return {
|
|
308
|
+
register: /* @__PURE__ */ __name(() => {
|
|
309
|
+
if (registered) return;
|
|
310
|
+
for (const set of sets) react$1.addCollection(set);
|
|
311
|
+
registered = true;
|
|
312
|
+
}, "register"),
|
|
313
|
+
names: sets.flatMap(
|
|
314
|
+
({ prefix, icons, aliases }) => [...Object.keys(icons), ...Object.keys(aliases ?? {})].map((name) => `${prefix}:${name}`)
|
|
315
|
+
)
|
|
316
|
+
};
|
|
317
|
+
}, "createIconRegistry");
|
|
318
|
+
|
|
319
|
+
// src/loading-screen/loading-screen-icons.ts
|
|
320
|
+
var ICON_SETS = [
|
|
321
|
+
{
|
|
322
|
+
prefix: "solar",
|
|
323
|
+
width: 24,
|
|
324
|
+
height: 24,
|
|
325
|
+
icons: {
|
|
326
|
+
"clock-circle-linear": {
|
|
327
|
+
body: '<g fill="none" stroke="currentColor" stroke-linecap="round" stroke-width="1.5"><circle cx="12" cy="12" r="10"/><path stroke-linejoin="round" d="M12 8V12L14.5 14.5"/></g>'
|
|
328
|
+
},
|
|
329
|
+
"refresh-linear": {
|
|
330
|
+
body: '<g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"><path d="M3.67981 13L3.67981 11.3333C3.67981 6.73096 7.4402 3 12.0789 3C15.1178 3 17.7799 4.60136 19.2545 7M2 11.3333L3.67981 13L5.35962 11.3333"/><path d="M20.3139 11V12.6667C20.3139 17.269 16.5391 21 11.8827 21C8.83213 21 6.15995 19.3986 4.67969 17M22.0001 12.6667L20.3139 11L18.6277 12.6667"/></g>'
|
|
331
|
+
},
|
|
332
|
+
"check-circle-linear": {
|
|
333
|
+
body: '<g fill="none" stroke="currentColor" stroke-linecap="round" stroke-width="1.5"><circle cx="12" cy="12" r="10"/><path stroke-linejoin="round" d="M8.5 12.5L10.5 14.5L15.5 9.5"/></g>'
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
];
|
|
338
|
+
var { register: registerLoadingScreenIcons, names: LOADING_SCREEN_ICON_NAMES } = createIconRegistry(ICON_SETS);
|
|
339
|
+
var STEP_ICON = {
|
|
340
|
+
pending: { icon: "solar:clock-circle-linear", className: "text-primary/30" },
|
|
341
|
+
active: {
|
|
342
|
+
icon: "solar:refresh-linear",
|
|
343
|
+
className: "text-primary animate-spin motion-reduce:animate-none"
|
|
344
|
+
},
|
|
345
|
+
done: { icon: "solar:check-circle-linear", className: "text-primary-green" }
|
|
346
|
+
};
|
|
347
|
+
var StepRow = /* @__PURE__ */ __name(({ state, label }) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2.5", children: [
|
|
348
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
349
|
+
react$1.Icon,
|
|
350
|
+
{
|
|
351
|
+
icon: STEP_ICON[state].icon,
|
|
352
|
+
className: `size-4 shrink-0 ${STEP_ICON[state].className}`
|
|
353
|
+
}
|
|
354
|
+
),
|
|
355
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: `text-sm ${state === "pending" ? "text-primary/40" : "text-primary"}`, children: label })
|
|
356
|
+
] }), "StepRow");
|
|
357
|
+
var WakeUpProgress = /* @__PURE__ */ __name(({ phase, services, awakeServices }) => {
|
|
358
|
+
registerLoadingScreenIcons();
|
|
359
|
+
const gatewayState = phase === "gateway" ? "active" : "done";
|
|
360
|
+
const servicesState = phase === "gateway" ? "pending" : phase === "services" ? "active" : "done";
|
|
361
|
+
const servicesLabel = {
|
|
362
|
+
pending: "Services - waiting for the gateway",
|
|
363
|
+
active: `Waking up services (${String(awakeServices.length)}/${String(services.length)})`,
|
|
364
|
+
done: "Services are awake"
|
|
365
|
+
}[servicesState];
|
|
366
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
367
|
+
"div",
|
|
368
|
+
{
|
|
369
|
+
role: "status",
|
|
370
|
+
"aria-live": "polite",
|
|
371
|
+
className: "border-primary/20 relative z-10 mt-6 flex w-full max-w-xs flex-col gap-2.5 rounded-xl border px-5 py-4 backdrop-blur-2xl",
|
|
372
|
+
children: [
|
|
373
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
374
|
+
StepRow,
|
|
375
|
+
{
|
|
376
|
+
state: gatewayState,
|
|
377
|
+
label: gatewayState === "active" ? "Waking up the gateway" : "Gateway is awake"
|
|
378
|
+
}
|
|
379
|
+
),
|
|
380
|
+
/* @__PURE__ */ jsxRuntime.jsx(StepRow, { state: servicesState, label: servicesLabel }),
|
|
381
|
+
servicesState === "active" && /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "flex flex-wrap gap-1.5 pl-6.5", children: services.map((service) => {
|
|
382
|
+
const isAwake = awakeServices.includes(service);
|
|
383
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
384
|
+
"li",
|
|
385
|
+
{
|
|
386
|
+
className: `rounded-full border px-2 py-0.5 text-[11px] capitalize transition-colors motion-reduce:transition-none ${isAwake ? "border-primary-green/40 text-primary-green" : "border-primary/20 text-primary/50"}`,
|
|
387
|
+
children: [
|
|
388
|
+
service,
|
|
389
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: isAwake ? " (awake)" : " (waking up)" })
|
|
390
|
+
]
|
|
391
|
+
},
|
|
392
|
+
service
|
|
393
|
+
);
|
|
394
|
+
}) })
|
|
395
|
+
]
|
|
396
|
+
}
|
|
397
|
+
);
|
|
398
|
+
}, "WakeUpProgress");
|
|
399
|
+
|
|
400
|
+
exports.BEAUTY_FACTS = BEAUTY_FACTS;
|
|
401
|
+
exports.LoadingScreen = LoadingScreen;
|
|
402
|
+
exports.Teddy = Teddy;
|
|
403
|
+
exports.WakeUpProgress = WakeUpProgress;
|
|
404
|
+
//# sourceMappingURL=index.cjs.map
|
|
405
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/loading-screen/beauty-facts.tsx","../../src/loading-screen/Teddy.tsx","../../src/loading-screen/LoadingScreen.tsx","../../src/lib/icon-registry.ts","../../src/loading-screen/loading-screen-icons.ts","../../src/loading-screen/WakeUpProgress.tsx"],"names":["jsxs","Fragment","jsx","useState","useEffect","addCollection","Icon"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ReactNode } from 'react';\n\n// The words of a fact that stand out: the `gradient-text-accent` utility of `@beautinique/frontend-styles`.\nconst Accent = ({ children }: { children: ReactNode }) => (\n <span className=\"gradient-text-accent\">{children}</span>\n);\n\n/** The facts the loading screen shows while it waits, one at a time. */\nexport const BEAUTY_FACTS: readonly ReactNode[] = [\n <>\n {'The term '}\n <Accent>{'\"Clean Beauty\"'}</Accent>\n {' refers to skincare and makeup products made without harmful chemicals and toxins.'}\n </>,\n <>\n {'In '}\n <Accent>{'\"1915\"'}</Accent>\n {', Maurice Levy invented the first '}\n <Accent>{'\"twist-up lipstick\"'}</Accent>\n {', revolutionizing the beauty industry.'}\n </>,\n <>\n {'The first-ever commercial mascara, '}\n <Accent>{'\"Maybelline Cake Mascara\"'}</Accent>\n {', was introduced in '}\n <Accent>{'\"1917\"'}</Accent>\n {'.'}\n </>,\n <>\n <Accent>{'BB Cream (2011)'}</Accent>\n {' became a global sensation by combining skincare and foundation into one product.'}\n </>,\n <>\n {'The first '}\n <Accent>{'cruelty-free certification'}</Accent>\n {' was introduced in '}\n <Accent>{'\"1996\"'}</Accent>\n {' to support ethical beauty practices.'}\n </>,\n <>\n <Accent>{'Vegan beauty'}</Accent>\n {' is on the rise, with brands formulating products without any animal-derived ingredients.'}\n </>,\n <>\n {'Dermatologists recommend '}\n <Accent>{'SPF 30+'}</Accent>\n {' for daily sun protection to prevent premature aging and skin damage.'}\n </>,\n <>\n <Accent>{'Serums'}</Accent>\n {\n ' contain concentrated active ingredients that penetrate deeper into the skin for enhanced benefits.'\n }\n </>,\n <>\n <Accent>{'Micellar Water'}</Accent>\n {\n ' is a gentle yet effective way to cleanse the skin without rinsing, perfect for all skin types.'\n }\n </>,\n <>\n {\"The world's first \"}\n <Accent>{'organic beauty brand'}</Accent>\n {' was founded in '}\n <Accent>{'1978'}</Accent>\n {', paving the way for natural cosmetics.'}\n </>,\n <>\n {'Some beauty brands use '}\n <Accent>{'AI-powered tools'}</Accent>\n {' to personalize skincare recommendations based on user preferences.'}\n </>,\n <>\n <Accent>{'Hyaluronic Acid'}</Accent>\n {' is a powerful hydrating ingredient that can hold up to 1,000 times its weight in water.'}\n </>,\n <>\n <Accent>{'Retinol'}</Accent>\n {\n ' is a dermatologist-approved ingredient known for reducing fine lines and improving skin texture.'\n }\n </>,\n <>\n <Accent>{'Green Beauty'}</Accent>\n {\n ' focuses on sustainable packaging and eco-friendly formulations to reduce environmental impact.'\n }\n </>,\n <>\n <Accent>{'Sheet masks'}</Accent>\n {' originated in Indian and have become a staple in self-care and skincare routines worldwide.'}\n </>,\n <>\n {'The global '}\n <Accent>{'cosmetic industry'}</Accent>\n {' is expected to reach '}\n <Accent>{'$500 billion'}</Accent>\n {' by '}\n <Accent>{'2026'}</Accent>\n {'.'}\n </>,\n <>\n {'The first-ever '}\n <Accent>{'waterproof mascara'}</Accent>\n {' was developed in '}\n <Accent>{'1938'}</Accent>\n {' and changed the beauty game.'}\n </>,\n <>\n {'The first '}\n <Accent>{'liquid foundation'}</Accent>\n {' was launched in the '}\n <Accent>{'1950s'}</Accent>\n {', offering a more natural finish.'}\n </>,\n <>\n {'The term \"glass skin\" was popularized by '}\n <Accent>{'Indian beauty'}</Accent>\n {' trends, emphasizing dewy, radiant skin.'}\n </>,\n <>\n {'The first commercial '}\n <Accent>{'lip gloss'}</Accent>\n {' was introduced by Max Factor in '}\n <Accent>{'1930'}</Accent>\n {'.'}\n </>,\n <>\n {'In the early '}\n <Accent>{'2000s'}</Accent>\n {', mineral makeup became a sought-after trend for its natural ingredients and skin benefits.'}\n </>,\n <>\n {'The '}\n <Accent>{'Beauty Blender,'}</Accent>\n {' launched in '}\n <Accent>{'2007'}</Accent>\n {', transformed the way people applied foundation.'}\n </>,\n <>\n <Accent>{'Facial oils'}</Accent>\n {\n ' have gained popularity for their nourishing and hydrating properties, even for oily skin types.'\n }\n </>,\n <>\n {'Some brands are experimenting with '}\n <Accent>{'AI makeup try-ons'}</Accent>\n {' to help users choose the perfect shade before purchasing.'}\n </>,\n <>\n {'The concept of a '}\n <Accent>{'beauty subscription box'}</Accent>\n {' allows customers to try new products every month.'}\n </>,\n <>\n {'Some experts believe that '}\n <Accent>{'customized skincare'}</Accent>\n {' could be the future of the beauty industry.'}\n </>,\n <>\n {'Others caution about potential risks of certain '}\n <Accent>{'skincare ingredients,'}</Accent>\n {' such as parabens and sulfates.'}\n </>,\n <>\n {'The development of '}\n <Accent>{'sustainable beauty'}</Accent>\n {' aims to reduce plastic waste and promote ethical sourcing.'}\n </>,\n <>\n {'Despite trends, timeless beauty practices like '}\n <Accent>{'hydration'}</Accent>\n {' and '}\n <Accent>{'healthy eating'}</Accent>\n {' remain essential for glowing skin.'}\n </>,\n <>\n {'The first known use of the term '}\n <Accent>{'\"cosmeceuticals\"'}</Accent>\n {' was in '}\n <Accent>{'1984'}</Accent>\n {' to describe skincare products with medical benefits.'}\n </>,\n <>\n <Accent>{'Fermented skincare'}</Accent>\n {' is gaining popularity for its probiotic benefits that improve skin health.'}\n </>,\n <>\n <Accent>{'Beauty influencers'}</Accent>\n {' have a huge impact on the cosmetic industry, shaping trends and product demands.'}\n </>,\n <>\n <Accent>{'AR beauty'}</Accent>\n {' apps are helping customers try on makeup virtually before making a purchase.'}\n </>,\n <>\n {'The concept of '}\n <Accent>{'smart skincare devices'}</Accent>\n {' is transforming beauty routines with AI-powered technology.'}\n </>,\n <>\n {'Some companies are developing '}\n <Accent>{'biodegradable glitter'}</Accent>\n {' to make beauty more sustainable.'}\n </>,\n <>\n {'The future of '}\n <Accent>{'clean beauty'}</Accent>\n {' is focused on transparency, sustainability, and effective formulations.'}\n </>,\n <>\n {'The first '}\n <Accent>{'fragrance-free makeup line'}</Accent>\n {' was launched in '}\n <Accent>{'1980'}</Accent>\n {' to cater to sensitive skin.'}\n </>,\n <>\n {'The term '}\n <Accent>{'dermocosmetics'}</Accent>\n {' is used for products that bridge the gap between skincare and dermatology.'}\n </>,\n <>\n {'The rise of '}\n <Accent>{'gender-neutral beauty'}</Accent>\n {' is redefining the industry with inclusive products for all.'}\n </>,\n <>\n <Accent>{'Biodegradable packaging'}</Accent>\n {' is becoming more common in the beauty industry to reduce waste.'}\n </>,\n <>\n <Accent>{'Refillable makeup'}</Accent>\n {' is a growing trend that allows users to reuse packaging and minimize waste.'}\n </>,\n <>\n {'The first commercial '}\n <Accent>{'nail polish'}</Accent>\n {' was inspired by automobile paint and introduced in '}\n <Accent>{'1932'}</Accent>\n {'.'}\n </>,\n <>\n {'The term '}\n <Accent>{'\"blue beauty\"'}</Accent>\n {' refers to eco-conscious products designed to protect ocean ecosystems.'}\n </>,\n <>\n <Accent>{'Glass packaging'}</Accent>\n {' is being used more in luxury beauty to reduce plastic waste and enhance sustainability.'}\n </>,\n];\n","import '@beautinique/frontend-styles/teddy.css';\n\nimport type { ComponentProps } from 'react';\n\nexport type TTeddy = Omit<ComponentProps<'div'>, 'children' | 'className'>;\n\n/**\n * The bear of the loading screen, drawn with css (`teddy.css` of `@beautinique/frontend-styles`, which\n * this imports). It is a picture with a name: a screen reader says \"Loading Teddy\" unless given another\n * `aria-label`.\n */\nexport const Teddy = (divProps: TTeddy) => (\n <div aria-label=\"Loading Teddy\" role=\"img\" {...divProps} className=\"article\">\n <div className=\"body\">\n <div className=\"shadow\" />\n <div className=\"chest\">\n <div className=\"leg\" />\n <div className=\"leg\" />\n <div className=\"arm\" />\n <div className=\"arm\" />\n </div>\n </div>\n <div className=\"head\">\n <div className=\"ear\" />\n <div className=\"ear\" />\n <div className=\"face\">\n <div className=\"eye\" />\n <div className=\"eye\" />\n <div className=\"nose\" />\n <div className=\"cheek\" />\n <div className=\"cheek\" />\n <div className=\"mouth\" />\n <div className=\"hair\" />\n </div>\n </div>\n </div>\n);\n","import { type ReactNode, useEffect, useState } from 'react';\n\nimport type { IClassName } from '../types/component.js';\nimport { BEAUTY_FACTS } from './beauty-facts.js';\nimport { Teddy } from './Teddy.js';\n\nexport interface ILoadingScreen extends IClassName {\n /** What is in the middle, instead of the bear (e.g. the bear and a `WakeUpProgress`). */\n children?: ReactNode;\n /** The facts that come one after the other under the picture. @default BEAUTY_FACTS */\n facts?: readonly ReactNode[];\n /** How long a fact stays, in milliseconds. @default 5000 */\n interval?: number;\n /** What a screen reader says for the screen. @default 'Loading' */\n label?: string;\n}\n\nconst randomIndex = (length: number, except?: number) => {\n if (length <= 1) return 0;\n\n const index = Math.floor(Math.random() * (except === undefined ? length : length - 1));\n\n // one of the others: the same fact twice in a row would look like nothing happened\n return except !== undefined && index >= except ? index + 1 : index;\n};\n\n/**\n * The screen of the start of the app: a picture in the middle (the bear unless told another), and a\n * fact under it that is changed every few seconds, for as long as the app is not ready. It covers the\n * window. The facts are not announced when they change (a screen reader only says `label`).\n *\n * It is a screen for the browser: the first fact is chosen at random when it is shown.\n */\nexport const LoadingScreen = ({\n className = '',\n children,\n facts = BEAUTY_FACTS,\n interval = 5000,\n label = 'Loading',\n}: ILoadingScreen) => {\n const [index, setIndex] = useState(() => randomIndex(facts.length));\n\n useEffect(() => {\n if (facts.length <= 1) return;\n\n const timer = window.setInterval(() => {\n setIndex((current) => randomIndex(facts.length, current));\n }, interval);\n\n return () => {\n window.clearInterval(timer);\n };\n }, [facts.length, interval]);\n\n const hasChildren = children !== undefined && children !== null && children !== false;\n\n return (\n <div\n className={`fixed inset-0 z-100 flex h-dvh w-dvw flex-col items-center justify-center px-10 ${\n hasChildren\n ? ''\n : 'bg-[radial-gradient(circle,rgba(var(--primary-rgb),0.5)_0%,rgba(var(--primary-rgb),0.2)_30%,rgba(var(--primary-invert-rgb),0.2)_60%,rgba(var(--primary-invert-rgb),1)_100%)]'\n } ${className}`}\n >\n <span role=\"status\" className=\"sr-only\">\n {label}\n </span>\n {hasChildren ? children : <Teddy />}\n {facts.length > 0 && (\n <div className=\"border-primary/50 absolute bottom-[10%] mx-10 max-w-4xl rounded-xl border px-4 py-2 text-center backdrop-blur-2xl\">\n <p aria-live=\"off\" className=\"gradient-text-silver text-sm text-shadow-2xs md:text-lg\">\n {facts[index % facts.length]}\n </p>\n </div>\n )}\n </div>\n );\n};\n","import { addCollection, type IconifyJSON } from '@iconify/react';\n\n/**\n * Makes the registration of a bundled icon set: `register` puts the sets in Iconify (once, calling it\n * again does nothing) and `names` lists every icon, e.g. `solar:info-circle-linear`.\n *\n * A component calls `register` when it renders, not when its file is imported: an app that never\n * renders the component never runs it, and nothing depends on the bundler keeping an import that is\n * only there for its effect (the build says \"ignored-bare-import\" for those).\n */\nexport const createIconRegistry = (sets: readonly IconifyJSON[]) => {\n let registered = false;\n\n return {\n register: () => {\n if (registered) return;\n\n for (const set of sets) addCollection(set);\n registered = true;\n },\n names: sets.flatMap(({ prefix, icons, aliases }) =>\n [...Object.keys(icons), ...Object.keys(aliases ?? {})].map((name) => `${prefix}:${name}`),\n ),\n };\n};\n","import type { IconifyJSON } from '@iconify/react';\n\nimport { createIconRegistry } from '../lib/icon-registry.js';\n\n/*\n * The icons of the steps of the wake-up progress, bundled so they show without a network and without waiting for the\n * Iconify API (see `toast/toast-icons.ts`). The data is what\n * `https://api.iconify.design/<prefix>.json?icons=<name>` answers.\n */\nconst ICON_SETS: IconifyJSON[] = [\n {\n prefix: 'solar',\n width: 24,\n height: 24,\n icons: {\n 'clock-circle-linear': {\n body: '<g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-width=\"1.5\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path stroke-linejoin=\"round\" d=\"M12 8V12L14.5 14.5\"/></g>',\n },\n 'refresh-linear': {\n body: '<g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"><path d=\"M3.67981 13L3.67981 11.3333C3.67981 6.73096 7.4402 3 12.0789 3C15.1178 3 17.7799 4.60136 19.2545 7M2 11.3333L3.67981 13L5.35962 11.3333\"/><path d=\"M20.3139 11V12.6667C20.3139 17.269 16.5391 21 11.8827 21C8.83213 21 6.15995 19.3986 4.67969 17M22.0001 12.6667L20.3139 11L18.6277 12.6667\"/></g>',\n },\n 'check-circle-linear': {\n body: '<g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-width=\"1.5\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path stroke-linejoin=\"round\" d=\"M8.5 12.5L10.5 14.5L15.5 9.5\"/></g>',\n },\n },\n },\n];\n\n/**\n * Registers the icons above with Iconify; the components of this entry call it when they render\n * (calling it again is harmless).\n */\nexport const { register: registerLoadingScreenIcons, names: LOADING_SCREEN_ICON_NAMES } =\n createIconRegistry(ICON_SETS);\n","import { Icon } from '@iconify/react';\n\nimport { registerLoadingScreenIcons } from './loading-screen-icons.js';\n\n/** Where the wake-up is: the gateway wakes first, then every service at once, then it is done. */\nexport type TWakeUpPhase = 'gateway' | 'services' | 'done';\n\ntype TStepState = 'pending' | 'active' | 'done';\n\nexport interface IWakeUpProgress {\n phase: TWakeUpPhase;\n /** Every service there is, in the order they are listed. */\n services: readonly string[];\n /** The ones that have answered. */\n awakeServices: readonly string[];\n}\n\nconst STEP_ICON: Record<TStepState, { icon: string; className: string }> = {\n pending: { icon: 'solar:clock-circle-linear', className: 'text-primary/30' },\n active: {\n icon: 'solar:refresh-linear',\n className: 'text-primary animate-spin motion-reduce:animate-none',\n },\n done: { icon: 'solar:check-circle-linear', className: 'text-primary-green' },\n};\n\nconst StepRow = ({ state, label }: { state: TStepState; label: string }) => (\n <div className=\"flex items-center gap-2.5\">\n <Icon\n icon={STEP_ICON[state].icon}\n className={`size-4 shrink-0 ${STEP_ICON[state].className}`}\n />\n <span className={`text-sm ${state === 'pending' ? 'text-primary/40' : 'text-primary'}`}>\n {label}\n </span>\n </div>\n);\n\n/**\n * The state of the start of the app while the backend wakes up (a free server sleeps after a while):\n * the gateway first, then every service at once, and each service is ticked off as it answers. It is\n * a polite status, so a screen reader follows it without being interrupted.\n */\nexport const WakeUpProgress = ({ phase, services, awakeServices }: IWakeUpProgress) => {\n registerLoadingScreenIcons();\n\n const gatewayState: TStepState = phase === 'gateway' ? 'active' : 'done';\n const servicesState: TStepState =\n phase === 'gateway' ? 'pending' : phase === 'services' ? 'active' : 'done';\n\n const servicesLabel = {\n pending: 'Services - waiting for the gateway',\n active: `Waking up services (${String(awakeServices.length)}/${String(services.length)})`,\n done: 'Services are awake',\n }[servicesState];\n\n return (\n <div\n role=\"status\"\n aria-live=\"polite\"\n className=\"border-primary/20 relative z-10 mt-6 flex w-full max-w-xs flex-col gap-2.5 rounded-xl border px-5 py-4 backdrop-blur-2xl\"\n >\n <StepRow\n state={gatewayState}\n label={gatewayState === 'active' ? 'Waking up the gateway' : 'Gateway is awake'}\n />\n <StepRow state={servicesState} label={servicesLabel} />\n\n {servicesState === 'active' && (\n <ul className=\"flex flex-wrap gap-1.5 pl-6.5\">\n {services.map((service) => {\n const isAwake = awakeServices.includes(service);\n\n return (\n <li\n key={service}\n className={`rounded-full border px-2 py-0.5 text-[11px] capitalize transition-colors motion-reduce:transition-none ${\n isAwake\n ? 'border-primary-green/40 text-primary-green'\n : 'border-primary/20 text-primary/50'\n }`}\n >\n {service}\n <span className=\"sr-only\">{isAwake ? ' (awake)' : ' (waking up)'}</span>\n </li>\n );\n })}\n </ul>\n )}\n </div>\n );\n};\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { BEAUTY_FACTS } from './beauty-facts.js';
|
|
2
|
+
export { type ILoadingScreen, LoadingScreen } from './LoadingScreen.js';
|
|
3
|
+
export { Teddy, type TTeddy } from './Teddy.js';
|
|
4
|
+
export { type IWakeUpProgress, type TWakeUpPhase, WakeUpProgress } from './WakeUpProgress.js';
|
|
5
|
+
//# sourceMappingURL=index.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../src/loading-screen/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,KAAK,cAAc,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,KAAK,EAAE,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { BEAUTY_FACTS } from './beauty-facts.js';
|
|
2
|
+
export { type ILoadingScreen, LoadingScreen } from './LoadingScreen.js';
|
|
3
|
+
export { Teddy, type TTeddy } from './Teddy.js';
|
|
4
|
+
export { type IWakeUpProgress, type TWakeUpPhase, WakeUpProgress } from './WakeUpProgress.js';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/loading-screen/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,KAAK,cAAc,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,KAAK,EAAE,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
|