@beautinique/frontend-components 1.0.7 → 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 +389 -14
- package/dist/auth/AuthBottomInstructions.d.cts +42 -0
- package/dist/auth/AuthBottomInstructions.d.cts.map +1 -0
- package/dist/auth/AuthBottomInstructions.d.ts +42 -0
- package/dist/auth/AuthBottomInstructions.d.ts.map +1 -0
- 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 +84 -0
- package/dist/auth/index.cjs.map +1 -0
- package/dist/auth/index.d.cts +3 -0
- package/dist/auth/index.d.cts.map +1 -0
- package/dist/auth/index.d.ts +3 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +81 -0
- package/dist/auth/index.js.map +1 -0
- 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 +21 -0
- package/dist/index.d.cts +3 -0
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -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/ScrollToTop.d.cts +36 -0
- package/dist/layout/ScrollToTop.d.cts.map +1 -0
- package/dist/layout/ScrollToTop.d.ts +36 -0
- package/dist/layout/ScrollToTop.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 +773 -0
- package/dist/layout/index.cjs.map +1 -0
- package/dist/layout/index.d.cts +14 -0
- package/dist/layout/index.d.cts.map +1 -0
- package/dist/layout/index.d.ts +14 -0
- package/dist/layout/index.d.ts.map +1 -0
- package/dist/layout/index.js +753 -0
- package/dist/layout/index.js.map +1 -0
- 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/content.d.cts +7 -0
- package/dist/lib/content.d.cts.map +1 -0
- package/dist/lib/content.d.ts +7 -0
- package/dist/lib/content.d.ts.map +1 -0
- package/dist/lib/countdown.d.cts +13 -0
- package/dist/lib/countdown.d.cts.map +1 -0
- package/dist/lib/countdown.d.ts +13 -0
- package/dist/lib/countdown.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/stepper.d.cts +9 -0
- package/dist/lib/stepper.d.cts.map +1 -0
- package/dist/lib/stepper.d.ts +9 -0
- package/dist/lib/stepper.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/linear-gradient/LinearGradient.d.cts +13 -0
- package/dist/linear-gradient/LinearGradient.d.cts.map +1 -0
- package/dist/linear-gradient/LinearGradient.d.ts +13 -0
- package/dist/linear-gradient/LinearGradient.d.ts.map +1 -0
- package/dist/linear-gradient/index.cjs +25 -0
- package/dist/linear-gradient/index.cjs.map +1 -0
- package/dist/linear-gradient/index.d.cts +2 -0
- package/dist/linear-gradient/index.d.cts.map +1 -0
- package/dist/linear-gradient/index.d.ts +2 -0
- package/dist/linear-gradient/index.d.ts.map +1 -0
- package/dist/linear-gradient/index.js +23 -0
- package/dist/linear-gradient/index.js.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/Resend.d.cts +37 -0
- package/dist/resend/Resend.d.cts.map +1 -0
- package/dist/resend/Resend.d.ts +37 -0
- package/dist/resend/Resend.d.ts.map +1 -0
- package/dist/resend/index.cjs +115 -0
- package/dist/resend/index.cjs.map +1 -0
- package/dist/resend/index.d.cts +2 -0
- package/dist/resend/index.d.cts.map +1 -0
- package/dist/resend/index.d.ts +2 -0
- package/dist/resend/index.d.ts.map +1 -0
- package/dist/resend/index.js +113 -0
- package/dist/resend/index.js.map +1 -0
- 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/stepper/Stepper.d.cts +35 -0
- package/dist/stepper/Stepper.d.cts.map +1 -0
- package/dist/stepper/Stepper.d.ts +35 -0
- package/dist/stepper/Stepper.d.ts.map +1 -0
- package/dist/stepper/index.cjs +149 -0
- package/dist/stepper/index.cjs.map +1 -0
- package/dist/stepper/index.d.cts +2 -0
- package/dist/stepper/index.d.cts.map +1 -0
- package/dist/stepper/index.d.ts +2 -0
- package/dist/stepper/index.d.ts.map +1 -0
- package/dist/stepper/index.js +147 -0
- package/dist/stepper/index.js.map +1 -0
- package/dist/stepper/stepper-icons.d.cts +10 -0
- package/dist/stepper/stepper-icons.d.cts.map +1 -0
- package/dist/stepper/stepper-icons.d.ts +10 -0
- package/dist/stepper/stepper-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/theme/Theme.d.cts +23 -0
- package/dist/theme/Theme.d.cts.map +1 -0
- package/dist/theme/Theme.d.ts +23 -0
- package/dist/theme/Theme.d.ts.map +1 -0
- package/dist/theme/index.cjs +76 -0
- package/dist/theme/index.cjs.map +1 -0
- package/dist/theme/index.d.cts +2 -0
- package/dist/theme/index.d.cts.map +1 -0
- package/dist/theme/index.d.ts +2 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +74 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/theme/theme-icons.d.cts +21 -0
- package/dist/theme/theme-icons.d.cts.map +1 -0
- package/dist/theme/theme-icons.d.ts +21 -0
- package/dist/theme/theme-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/dist/ui/Badge.d.cts +12 -0
- package/dist/ui/Badge.d.cts.map +1 -0
- package/dist/ui/Badge.d.ts +12 -0
- package/dist/ui/Badge.d.ts.map +1 -0
- package/dist/ui/Divider.d.cts +12 -0
- package/dist/ui/Divider.d.cts.map +1 -0
- package/dist/ui/Divider.d.ts +12 -0
- package/dist/ui/Divider.d.ts.map +1 -0
- package/dist/ui/GradientText.d.cts +30 -0
- package/dist/ui/GradientText.d.cts.map +1 -0
- package/dist/ui/GradientText.d.ts +30 -0
- package/dist/ui/GradientText.d.ts.map +1 -0
- package/dist/ui/index.cjs +37 -3
- package/dist/ui/index.cjs.map +1 -1
- package/dist/ui/index.d.cts +3 -0
- package/dist/ui/index.d.cts.map +1 -1
- package/dist/ui/index.d.ts +3 -0
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js +35 -4
- package/dist/ui/index.js.map +1 -1
- package/package.json +108 -6
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/lib/content.ts","../../src/lib/icon-registry.ts","../../src/layout/layout-icons.ts","../../src/layout/LoadingText.tsx","../../src/layout/LoadingRings.tsx","../../src/layout/ApiStatus.tsx","../../src/layout/BorderGradient.tsx","../../src/lib/useDismiss.ts","../../src/lib/focus.ts","../../src/lib/useFocusTrap.ts","../../src/lib/useIsClient.ts","../../src/lib/useScrollLock.ts","../../src/lib/mergeRefs.ts","../../src/lib/useScrollable.ts","../../src/layout/ScrollableGradientContainer.tsx","../../src/layout/ModalWrapper.tsx","../../src/layout/ConfirmModal.tsx","../../src/layout/Dropdown.tsx","../../src/layout/LoadingPage.tsx","../../src/layout/NetworkStatusToaster.tsx","../../src/layout/ScrollToTop.tsx","../../src/layout/Skeleton.tsx","../../src/layout/Table.tsx"],"names":["addCollection","jsxs","jsx","Icon","GradientText","Divider","useRef","useLayoutEffect","useEffect","useSyncExternalStore","useState","useMemo","LinearGradient","useId","createPortal","Fragment","Button","InputIcon","toastId"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ReactNode } from 'react';\n\n/**\n * Whether React would show something for `content`. `null`, `undefined`, booleans and an empty string\n * show nothing; `0` does show (the text \"0\"), which is why this is not a plain truthiness check.\n */\nexport const hasContent = (content: ReactNode) =>\n content !== null &&\n content !== undefined &&\n content !== false &&\n content !== true &&\n content !== '';\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 status of a page, the dialogs and the dropdown, 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 'danger-triangle-linear': {\n body: '<g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-width=\"1.5\"><path d=\"M5.31171 10.7615C8.23007 5.58716 9.68925 3 12 3C14.3107 3 15.7699 5.58716 18.6883 10.7615L19.0519 11.4063C21.4771 15.7061 22.6897 17.856 21.5937 19.428C20.4978 21 17.7864 21 12.3637 21H11.6363C6.21356 21 3.50217 21 2.40626 19.428C1.31034 17.856 2.52291 15.7061 4.94805 11.4063L5.31171 10.7615Z\"/><path d=\"M12 8V13\"/><path stroke-linejoin=\"round\" d=\"M12 16H12.0001\"/></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 'folder-error-linear': {\n body: '<g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-width=\"1.5\"><path d=\"M2 6.94975C2 6.06722 2 5.62595 2.06935 5.25839C2.37464 3.64031 3.64031 2.37464 5.25839 2.06935C5.62595 2 6.06722 2 6.94975 2C7.33642 2 7.52976 2 7.71557 2.01738C8.51665 2.09229 9.27652 2.40704 9.89594 2.92051C10.0396 3.03961 10.1763 3.17633 10.4497 3.44975L11 4C11.8158 4.81578 12.2237 5.22367 12.7121 5.49543C12.9804 5.64471 13.2651 5.7626 13.5604 5.84678C14.0979 6 14.6747 6 15.8284 6H16.2021C18.8345 6 20.1506 6 21.0062 6.76946C21.0849 6.84024 21.1598 6.91514 21.2305 6.99383C22 7.84935 22 9.16554 22 11.7979V14C22 17.7712 22 19.6569 20.8284 20.8284C19.6569 22 17.7712 22 14 22H10C6.22876 22 4.34315 22 3.17157 20.8284C2 19.6569 2 17.7712 2 14V6.94975Z\"/><path d=\"M10.5 15L13.5 12M13.5 15L10.5 12\"/></g>',\n },\n 'info-circle-outline': {\n body: '<g fill=\"currentColor\"><path d=\"M12 17.75C12.4142 17.75 12.75 17.4142 12.75 17V11C12.75 10.5858 12.4142 10.25 12 10.25C11.5858 10.25 11.25 10.5858 11.25 11V17C11.25 17.4142 11.5858 17.75 12 17.75Z\"/><path d=\"M12 7C12.5523 7 13 7.44772 13 8C13 8.55228 12.5523 9 12 9C11.4477 9 11 8.55228 11 8C11 7.44772 11.4477 7 12 7Z\"/><path fill-rule=\"evenodd\" d=\"M1.25 12C1.25 6.06294 6.06294 1.25 12 1.25C17.9371 1.25 22.75 6.06294 22.75 12C22.75 17.9371 17.9371 22.75 12 22.75C6.06294 22.75 1.25 17.9371 1.25 12ZM12 2.75C6.89137 2.75 2.75 6.89137 2.75 12C2.75 17.1086 6.89137 21.25 12 21.25C17.1086 21.25 21.25 17.1086 21.25 12C21.25 6.89137 17.1086 2.75 12 2.75Z\" clip-rule=\"evenodd\"/></g>',\n },\n 'alt-arrow-down-linear': {\n body: '<path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\" d=\"M19 9L12 15L5 9\"/>',\n },\n },\n },\n {\n prefix: 'lucide',\n width: 24,\n height: 24,\n icons: {\n x: {\n body: '<path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M18 6L6 18M6 6l12 12\"/>',\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: registerLayoutIcons, names: LAYOUT_ICON_NAMES } =\n createIconRegistry(ICON_SETS);\n","import type { CSSProperties } from 'react';\n\nimport type { IClassName } from '../types/component.js';\n\nexport interface ILoadingText extends IClassName {\n /** What is written, with a shine that goes over its letters. @default 'Loading' */\n text?: string;\n}\n\n/**\n * The word \"Loading\" (or another), with a shine that goes over its letters while the app waits. The\n * shine is drawn by the `loading-text` utility of `@beautinique/frontend-styles` from the `data-text`\n * attribute, which a screen reader does not read, so the text is also written for it\n * (`role=\"status\"`).\n */\nexport const LoadingText = ({ text = 'Loading', className = '' }: ILoadingText) => (\n <div role=\"status\" className={`w-fit ${className}`}>\n <span className=\"sr-only\">{text}</span>\n <div\n aria-hidden=\"true\"\n data-text={text}\n className=\"loading-text after:text-primary/0 w-fit font-mono text-[3.5vmin] font-extrabold after:content-[attr(data-text)]\"\n style={\n {\n '--loading-text-duration': `${String(Math.max(1, text.length * 0.08))}s`,\n } as CSSProperties\n }\n />\n </div>\n);\n","import type { CSSProperties } from 'react';\n\nimport type { IClassName } from '../types/component.js';\nimport { LoadingText } from './LoadingText.js';\n\nexport interface ILoadingRings extends IClassName {\n /** The word under the rings. @default 'Loading' */\n text?: string;\n}\n\n// Each ring is a circle with one side of its border drawn, turned in space (`rx`, `ry`, `z` degrees).\nconst RINGS = [\n { side: 'borderBottomWidth', color: 'red', rx: 45, ry: -45, z: 0 },\n { side: 'borderRightWidth', color: 'green', rx: 55, ry: 15, z: 90 },\n { side: 'borderTopWidth', color: 'blue', rx: 40, ry: 65, z: 180 },\n] as const;\n\n/**\n * Three rings that turn in space over a word, for a part of a page that is loading. The size follows\n * the window (`vmin`). The turning is drawn by the `ring-spin` animation of\n * `@beautinique/frontend-styles`, and stops for a person who asked for less motion.\n */\nexport const LoadingRings = ({ className = '', text = 'Loading' }: ILoadingRings) => (\n <div className={`flex h-full w-full items-center justify-center ${className}`}>\n <div className=\"relative flex flex-col items-center\">\n <div aria-hidden=\"true\" className=\"relative h-[20vmin] w-[20vmin]\">\n {RINGS.map((ring, index) => (\n <div\n key={ring.side}\n className=\"absolute inset-0 animate-[ring-spin_2s_linear_infinite] rounded-full border-solid shadow-[0_0_10px_rgb(var(--primary-rgb),0.15)] motion-reduce:animate-none\"\n style={\n {\n '--rx': `${String(ring.rx)}deg`,\n '--ry': `${String(ring.ry)}deg`,\n '--z': `${String(ring.z)}deg`,\n borderColor: ring.color,\n [ring.side]: '0.6vmin',\n animationDelay: `${String(index * -0.5)}s`,\n } as CSSProperties\n }\n />\n ))}\n </div>\n <LoadingText text={text} className=\"mt-[2vmin]\" />\n </div>\n </div>\n);\n","import { Icon } from '@iconify/react';\n\nimport { hasContent } from '../lib/content.js';\nimport type { IClassName, ITitleDescription } from '../types/component.js';\nimport { Divider, GradientText } from '../ui/index.js';\nimport { registerLayoutIcons } from './layout-icons.js';\nimport { LoadingRings } from './LoadingRings.js';\n\ntype TDescribedStatus = ITitleDescription &\n IClassName & {\n status: 'error' | 'empty' | 'success';\n /** A line under the message. */\n divider?: boolean;\n };\n\ninterface ILoadingStatus extends IClassName {\n status: 'loading';\n /** The word under the rings. @default 'Loading....' */\n text?: string;\n}\n\nexport type TApiStatus = TDescribedStatus | ILoadingStatus;\n\nconst STATUS_ICON: Record<TDescribedStatus['status'], string> = {\n error: 'solar:danger-triangle-linear',\n success: 'solar:check-circle-linear',\n empty: 'solar:folder-error-linear',\n};\n\n/**\n * What a request that is not finished or not good says, in the middle of the place where its result\n * would be: rings while it loads, and an icon with a title and a description when it failed\n * (`status=\"error\"`, said to a screen reader as an alert), came back empty or worked.\n */\nexport const ApiStatus = ({ className = '', ...props }: TApiStatus) => {\n registerLayoutIcons();\n\n return (\n <div\n className={`m-auto flex h-full min-h-60 w-full flex-col items-center justify-center gap-2 p-4 ${className}`}\n >\n {props.status === 'loading' ? (\n <LoadingRings text={props.text ?? 'Loading....'} />\n ) : (\n <div\n role={props.status === 'error' ? 'alert' : 'status'}\n className=\"flex flex-col items-center justify-center gap-2\"\n >\n <div className=\"bg-primary/5 grid size-8 place-items-center rounded-full p-2 md:size-10\">\n <Icon icon={STATUS_ICON[props.status]} className=\"text-silver-jet size-full shrink-0\" />\n </div>\n\n {hasContent(props.title) && (\n <GradientText type=\"silver\" className=\"text-sm text-shadow-sm sm:text-base md:text-lg\">\n {props.title}\n </GradientText>\n )}\n {hasContent(props.description) && (\n <div className=\"text-silver-jet text-center text-xs leading-6 font-normal sm:text-sm\">\n {props.description}\n </div>\n )}\n {props.divider === true && <Divider className=\"mt-1\" />}\n </div>\n )}\n </div>\n );\n};\n","import type { ComponentProps } from 'react';\n\nimport type { IContainerClassName } from '../types/component.js';\n\nexport interface IBorderGradient extends ComponentProps<'div'>, IContainerClassName {}\n\n/**\n * A card with a border that is a gradient: the outer box is the 1px border, the inner one is the\n * card. Any attribute of a `<div>` goes to the card (`className` too); `containerClassName` is for\n * the border box.\n */\nexport const BorderGradient = ({\n children,\n className = '',\n containerClassName = '',\n ...divProps\n}: IBorderGradient) => (\n <div className={`bg-border-gradient mx-auto w-full rounded-3xl p-px ${containerClassName}`}>\n <div\n {...divProps}\n className={`shadow-light-dark-soft bg-platinum-black base:p-6 rounded-[23px] p-4 ${className}`}\n >\n {children}\n </div>\n </div>\n);\n","import { type RefObject, useEffect, useLayoutEffect, useRef } from 'react';\n\nexport type TDismissReason = 'outside' | 'escape';\n\nexport interface IDismissOptions {\n /** Turn the listeners off (e.g. while a popup is closed). @default true */\n enabled?: boolean;\n /**\n * Elements that count as inside although they are not inside the element in the DOM: a popup that\n * is rendered with `createPortal()` into `document.body`. A press on one of them (or on anything in\n * it) is not \"outside\". Refs that are not attached are skipped. The list is read when the press\n * happens, so a new array on every render is fine.\n */\n ignore?: readonly RefObject<Element | null>[];\n /** Dismiss when the user presses outside the element. @default true */\n outside?: boolean;\n /** Dismiss when the user presses Escape. @default true */\n escape?: boolean;\n}\n\n// The popups that are open, the last one on top. Escape closes the one on top only: a select that is\n// open inside a dialog closes first, and the dialog stays until the next Escape.\nconst openStack: symbol[] = [];\n\n/**\n * Closes a popup (a select, a dialog, a menu) the way people expect: a press (mouse, touch or pen)\n * anywhere outside it, or Escape.\n *\n * - The press is listened for on `document` in the capture phase, so an inner `stopPropagation()`\n * cannot hide it, and \"inside\" is decided from the path the event took (`composedPath()`), which\n * stays right when the pressed node is removed by another listener first.\n * - A popup portalled out of the element is not inside it in the DOM: list its ref in `ignore`.\n * - Escape only reaches the popup that opened last, and not an Escape that something else already\n * handled (`defaultPrevented`).\n * - The listeners are added once and only when `enabled` changes: the latest `onDismiss` and `ignore`\n * are used, so passing new ones on every render costs nothing.\n *\n * @returns the ref to put on the popup (or on its trigger, when the popup is portalled).\n */\nexport const useDismiss = <T extends HTMLElement>(\n onDismiss: (reason: TDismissReason, event: Event) => void,\n { enabled = true, ignore, outside = true, escape = true }: IDismissOptions = {},\n): RefObject<T | null> => {\n const ref = useRef<T | null>(null);\n const onDismissRef = useRef(onDismiss);\n const ignoreRef = useRef(ignore);\n\n // Updated as soon as a render commits, so the listeners below never need them as dependencies.\n useLayoutEffect(() => {\n onDismissRef.current = onDismiss;\n ignoreRef.current = ignore;\n });\n\n useEffect(() => {\n if (!enabled) return;\n\n const token = Symbol('dismissable');\n\n // a popup that does not listen for Escape is not in the stack: it must not hide the ones below it\n if (escape) openStack.push(token);\n\n const handlePress = (event: PointerEvent) => {\n const element = ref.current;\n\n if (!outside || !element) return;\n\n const path = event.composedPath();\n const isInside =\n path.includes(element) ||\n (ignoreRef.current ?? []).some(({ current }) => current !== null && path.includes(current));\n\n if (!isInside) onDismissRef.current('outside', event);\n };\n\n const handleKey = (event: KeyboardEvent) => {\n if (!escape || event.key !== 'Escape' || event.defaultPrevented) return;\n if (openStack.at(-1) !== token) return;\n\n onDismissRef.current('escape', event);\n };\n\n document.addEventListener('pointerdown', handlePress, true);\n document.addEventListener('keydown', handleKey);\n\n return () => {\n document.removeEventListener('pointerdown', handlePress, true);\n document.removeEventListener('keydown', handleKey);\n\n const index = openStack.indexOf(token);\n\n if (index !== -1) openStack.splice(index, 1);\n };\n }, [enabled, outside, escape]);\n\n return ref;\n};\n","// What can be reached with the Tab key. An element is left out when it is disabled, when it has\n// `tabindex=\"-1\"`, when it is `hidden` (or inside something that is, or that is `inert`) and for a\n// hidden input.\nconst TABBABLE = [\n 'a[href]',\n 'area[href]',\n 'button:not([disabled])',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n 'summary',\n 'audio[controls]',\n 'video[controls]',\n '[contenteditable]:not([contenteditable=\"false\"])',\n '[tabindex]',\n].join(',');\n\nconst isTabbable = (element: HTMLElement) => {\n if (element.tabIndex < 0) return false;\n\n return !element.closest('[hidden], [inert]');\n};\n\n/** The elements inside `root` that the Tab key stops on, in the order it goes through them. */\nexport const getTabbable = (root: HTMLElement) =>\n [...root.querySelectorAll<HTMLElement>(TABBABLE)].filter(isTabbable);\n","import { type RefObject, useEffect, useRef } from 'react';\n\nimport { getTabbable } from './focus.js';\n\nexport interface IFocusTrapOptions {\n /** Turn the trap on (while the dialog is open). */\n enabled: boolean;\n /** The element that gets the focus first. Without it: the first element that Tab stops on, or the dialog. */\n initialFocus?: RefObject<HTMLElement | null>;\n /** Give the focus back to what had it before the dialog opened, when it closes. @default true */\n returnFocus?: boolean;\n}\n\n// The traps that are on, the last one on top: with a dialog open over another one only the top one\n// keeps the focus in.\nconst activeTraps: symbol[] = [];\n\n/**\n * Keeps the keyboard inside a dialog, the way a dialog has to behave:\n *\n * - when it opens the focus goes into it (to `initialFocus`, or the first thing Tab stops on, or the\n * dialog itself);\n * - Tab on the last element goes to the first, and Shift + Tab on the first goes to the last, so the\n * focus cannot get to the page behind;\n * - when it closes the focus goes back to what had it before, so a person who opened it with the\n * keyboard is where they were.\n *\n * @returns the ref for the dialog (it should have `tabIndex={-1}`, so it can hold the focus when it has\n * nothing to focus in it).\n */\nexport const useFocusTrap = <T extends HTMLElement>({\n enabled,\n initialFocus,\n returnFocus = true,\n}: IFocusTrapOptions): RefObject<T | null> => {\n const ref = useRef<T | null>(null);\n const initialFocusRef = useRef(initialFocus);\n\n useEffect(() => {\n initialFocusRef.current = initialFocus;\n });\n\n useEffect(() => {\n const dialog = ref.current;\n\n if (!enabled || !dialog) return;\n\n const token = Symbol('trap');\n const previous = document.activeElement instanceof HTMLElement ? document.activeElement : null;\n\n activeTraps.push(token);\n (initialFocusRef.current?.current ?? getTabbable(dialog).at(0) ?? dialog).focus();\n\n const handleKey = (event: KeyboardEvent) => {\n if (event.key !== 'Tab' || activeTraps.at(-1) !== token) return;\n\n const tabbable = getTabbable(dialog);\n const first = tabbable.at(0);\n const last = tabbable.at(-1);\n const current = document.activeElement;\n\n if (!first || !last) {\n event.preventDefault();\n dialog.focus();\n\n return;\n }\n\n if (!(current instanceof Node) || !dialog.contains(current) || current === dialog) {\n // the focus is on the dialog itself, or got out: bring it in\n event.preventDefault();\n (event.shiftKey ? last : first).focus();\n } else if (event.shiftKey && current === first) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && current === last) {\n event.preventDefault();\n first.focus();\n }\n };\n\n document.addEventListener('keydown', handleKey);\n\n return () => {\n document.removeEventListener('keydown', handleKey);\n\n const index = activeTraps.indexOf(token);\n\n if (index !== -1) activeTraps.splice(index, 1);\n\n if (returnFocus && previous?.isConnected) previous.focus();\n };\n }, [enabled, returnFocus]);\n\n return ref;\n};\n","import { useSyncExternalStore } from 'react';\n\nconst subscribe = () => () => undefined;\n\n/**\n * `false` on a server and while a page is hydrated, `true` in the browser after that. What needs the\n * `document` (a portal into `document.body`) waits for it, so the server and the first render in\n * the browser draw the same.\n */\nexport const useIsClient = () =>\n useSyncExternalStore(\n subscribe,\n () => true,\n () => false,\n );\n","import { useEffect } from 'react';\n\n// How many things (dialogs) hold the page still right now, and what the page had before the first did.\nlet holders = 0;\nlet saved: { overflow: string; paddingRight: string } | null = null;\n\nconst lock = () => {\n holders += 1;\n\n if (holders > 1) return;\n\n const { body, documentElement } = document;\n // the scrollbar goes away with `overflow: hidden`: its width is given back as padding, so the\n // page does not jump to the side\n const scrollbar = window.innerWidth - documentElement.clientWidth;\n\n saved = { overflow: body.style.overflow, paddingRight: body.style.paddingRight };\n body.style.overflow = 'hidden';\n\n if (scrollbar > 0) {\n body.style.paddingRight = `${String(parseFloat(getComputedStyle(body).paddingRight) + scrollbar)}px`;\n }\n};\n\nconst unlock = () => {\n holders = Math.max(0, holders - 1);\n\n if (holders > 0 || !saved) return;\n\n document.body.style.overflow = saved.overflow;\n document.body.style.paddingRight = saved.paddingRight;\n saved = null;\n};\n\n/**\n * Keeps the page behind a dialog from scrolling while it is open. Several dialogs can be open\n * together: the page is released when the last one closes, and gets back exactly what it had (not\n * what the first dialog saw after another had already changed it).\n */\nexport const useScrollLock = (enabled: boolean) => {\n useEffect(() => {\n if (!enabled) return;\n\n lock();\n\n return unlock;\n }, [enabled]);\n};\n","import type { Ref } from 'react';\n\nconst assign = <T>(ref: Ref<T> | undefined, node: T | null) => {\n if (typeof ref === 'function') return ref(node);\n\n if (ref) ref.current = node;\n\n return undefined;\n};\n\n/**\n * One ref callback that gives the element to all the refs it is given (a ref of the app, the ref that\n * `register()` of React Hook Form makes, a ref of the component itself). When the element goes away\n * every ref gets `null` again, or, for a ref callback that returns a cleanup function, that cleanup is\n * called. Keep the result stable (`useMemo`): a new function at every render makes React take the\n * element away from the refs and give it again.\n */\nexport const mergeRefs =\n <T>(...refs: (Ref<T> | undefined)[]) =>\n (node: T | null) => {\n const cleanups = refs.map((ref) => assign(ref, node));\n\n return () => {\n refs.forEach((ref, index) => {\n const cleanup = cleanups[index];\n\n if (typeof cleanup === 'function') cleanup();\n else assign(ref, null);\n });\n };\n };\n","import { type RefObject, useEffect, useRef, useState } from 'react';\n\nexport type TScrollDirection = 'horizontal' | 'vertical';\n\n/** The edges of a scrollable area that have more content behind them (where a fade is shown). */\nexport type TScrollEdges = Partial<Record<'top' | 'bottom' | 'left' | 'right', true>>;\n\n// Browsers report positions with a fraction (zoom, scaling): a gap this small is \"at the end\".\nconst SCROLL_EPSILON = 4;\n\n/**\n * Which edges of the scrollable element have more to scroll to. It follows the scroll, and the size\n * of the element and of its content (a ResizeObserver), so a list that grows or a window that is\n * resized is noticed. Nothing is reported on the server and on the first render.\n *\n * @returns `ref` for the element that scrolls and `edges` (e.g. `{ left: true }` once it was scrolled\n * a little, `{ left: true, right: true }` in the middle).\n */\nexport const useScrollable = <T extends HTMLElement>(\n direction: TScrollDirection,\n): { ref: RefObject<T | null>; edges: TScrollEdges } => {\n const ref = useRef<T | null>(null);\n const [edges, setEdges] = useState<TScrollEdges>({});\n\n useEffect(() => {\n const element = ref.current;\n\n if (!element) return;\n\n const check = () => {\n const isHorizontal = direction === 'horizontal';\n const size = isHorizontal ? element.clientWidth : element.clientHeight;\n const total = isHorizontal ? element.scrollWidth : element.scrollHeight;\n const position = isHorizontal ? element.scrollLeft : element.scrollTop;\n\n const hasScroll = total - size > SCROLL_EPSILON;\n const hasBefore = hasScroll && position > SCROLL_EPSILON;\n const hasAfter = hasScroll && total - (position + size) > SCROLL_EPSILON;\n\n const next: TScrollEdges = isHorizontal\n ? { ...(hasBefore && { left: true as const }), ...(hasAfter && { right: true as const }) }\n : { ...(hasBefore && { top: true as const }), ...(hasAfter && { bottom: true as const }) };\n\n // the same edges again: no new state, so no render\n setEdges((current) =>\n current.top === next.top &&\n current.bottom === next.bottom &&\n current.left === next.left &&\n current.right === next.right\n ? current\n : next,\n );\n };\n\n check();\n element.addEventListener('scroll', check, { passive: true });\n\n const observer = new ResizeObserver(check);\n\n observer.observe(element);\n if (element.firstElementChild) observer.observe(element.firstElementChild);\n\n return () => {\n element.removeEventListener('scroll', check);\n observer.disconnect();\n };\n }, [direction]);\n\n return { ref, edges };\n};\n","import { type ReactNode, type Ref, useMemo } from 'react';\n\nimport { LinearGradient, type TGradientPosition } from '../linear-gradient/index.js';\nimport { mergeRefs } from '../lib/mergeRefs.js';\nimport { type TScrollDirection, useScrollable } from '../lib/useScrollable.js';\nimport type { IClassName, IContainerClassName } from '../types/component.js';\n\nexport interface IScrollableGradientContainer extends IClassName, IContainerClassName {\n /** The way the content scrolls: a row (`'horizontal'`) or a column (`'vertical'`). */\n direction: TScrollDirection;\n /** Classes for the fade on each edge, e.g. `{ top: 'h-8!' }`. */\n gradientClassNames?: Partial<Record<TGradientPosition, string>>;\n /**\n * Names the area that scrolls for assistive technology (`role=\"region\"`). Give it when what scrolls\n * is a part of the page of its own (a list of thumbnails, a long form) and not the page.\n */\n label?: string;\n /** The element that scrolls, e.g. to move it to an item (`scrollLeft`, `scrollTop`). */\n scrollerRef?: Ref<HTMLDivElement>;\n children: ReactNode;\n}\n\nconst EDGES: readonly TGradientPosition[] = ['top', 'bottom', 'left', 'right'];\nconst NO_GRADIENT_CLASSES: Partial<Record<TGradientPosition, string>> = {};\n\n/**\n * Content that scrolls inside a box, with a fade on the edge that has more behind it. The fade\n * shows only once there is something to scroll to, and goes when the end is reached. The content is\n * centred while it fits, and starts at the beginning once it scrolls.\n *\n * A box that scrolls can be reached with the keyboard (it is a tab stop while it scrolls) so that\n * people who do not use a mouse can scroll it with the arrow keys.\n */\nexport const ScrollableGradientContainer = ({\n direction,\n gradientClassNames = NO_GRADIENT_CLASSES,\n className = '',\n containerClassName = '',\n label,\n scrollerRef,\n children,\n}: IScrollableGradientContainer) => {\n const { ref, edges } = useScrollable<HTMLDivElement>(direction);\n const mergedRef = useMemo(() => mergeRefs<HTMLDivElement>(ref, scrollerRef), [ref, scrollerRef]);\n\n const isVertical = direction === 'vertical';\n const isScrollable = EDGES.some((edge) => edges[edge]);\n\n return (\n <div\n className={`relative flex overflow-hidden ${isVertical ? 'h-full w-full flex-col' : 'h-fit w-full flex-row'} ${containerClassName}`}\n >\n {EDGES.filter((edge) => edges[edge]).map((edge) => (\n <LinearGradient key={edge} position={edge} className={gradientClassNames[edge]} />\n ))}\n <div\n ref={mergedRef}\n // a box that scrolls has to be reachable with the keyboard, or it cannot be scrolled with it\n tabIndex={isScrollable ? 0 : undefined}\n role={isScrollable && label ? 'region' : undefined}\n aria-label={isScrollable ? label : undefined}\n className={`relative scroll-smooth outline-none focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-blue-crayola-c motion-reduce:scroll-auto ${\n isVertical ? 'flex-1 overflow-y-auto' : 'grow overflow-x-auto'\n } ${className}`}\n >\n <div\n className={`flex h-full w-full gap-2 ${isVertical ? 'min-h-full flex-col' : 'min-w-full flex-row'} ${\n isScrollable ? 'items-start justify-start' : 'items-center justify-center'\n }`}\n >\n {children}\n </div>\n </div>\n </div>\n );\n};\n","import { Icon } from '@iconify/react';\nimport {\n type ComponentProps,\n type CSSProperties,\n type PointerEvent,\n type MouseEvent as ReactMouseEvent,\n type ReactNode,\n type RefObject,\n useId,\n useRef,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { useDismiss } from '../lib/useDismiss.js';\nimport { useFocusTrap } from '../lib/useFocusTrap.js';\nimport { useIsClient } from '../lib/useIsClient.js';\nimport { useScrollLock } from '../lib/useScrollLock.js';\nimport type { IClassName } from '../types/component.js';\nimport { GradientText } from '../ui/index.js';\nimport { registerLayoutIcons } from './layout-icons.js';\nimport { ScrollableGradientContainer } from './ScrollableGradientContainer.js';\n\nexport interface IModalHeader {\n /** The title: it is the name of the dialog for assistive technology. */\n title?: string;\n /** A button that closes the dialog. */\n showCloseIcon?: boolean;\n}\n\nexport interface IModalWrapper extends IClassName {\n isOpen: boolean;\n /** Called when the dialog asks to be closed: Escape, the close button, a press on the backdrop. */\n onClose: () => void;\n children: ReactNode;\n /** Attributes of the backdrop (the layer behind the dialog), e.g. `className`. */\n containerProps?: ComponentProps<'div'>;\n header?: IModalHeader;\n /** Pressing the backdrop closes the dialog. @default true */\n closeOnOutsideClick?: boolean;\n /** The style of the dialog box. */\n style?: CSSProperties;\n /**\n * A name for the dialog when it has no `header.title` (\"Sign in\"). Give one of the two: a dialog\n * that has no name is announced as just \"dialog\".\n */\n label?: string;\n /** The `id` of an element that names the dialog, when it is not the `header.title` or `label`. */\n labelledBy?: string;\n /** The `id` of the element that describes the dialog. */\n describedBy?: string;\n /** A dialog that interrupts to ask for a decision is an `alertdialog`. @default 'dialog' */\n role?: 'dialog' | 'alertdialog';\n /** The element that gets the focus when it opens. @default the first thing Tab stops on */\n initialFocus?: RefObject<HTMLElement | null>;\n /** What the close button is called, for assistive technology. @default 'Close' */\n closeLabel?: string;\n}\n\n/**\n * A dialog over the page, drawn in `document.body` over a backdrop.\n *\n * It behaves as a dialog has to: it is announced as one (`role=\"dialog\"`, `aria-modal`, named by its\n * title or `label`), the keyboard stays inside it (Tab goes round), the focus goes into it when it\n * opens and back to what had it when it closes, the page behind does not scroll, and Escape closes it\n * (only the one that is on top when there are several). A press on the backdrop closes it too, unless\n * `closeOnOutsideClick` is false; a press that starts inside the dialog and ends on the backdrop (a\n * text that is selected by dragging) does not.\n */\nexport const ModalWrapper = ({\n isOpen,\n onClose,\n children,\n containerProps,\n className = '',\n header,\n closeOnOutsideClick = true,\n style,\n label,\n labelledBy,\n describedBy,\n role = 'dialog',\n initialFocus,\n closeLabel = 'Close',\n}: IModalWrapper) => {\n registerLayoutIcons();\n\n const titleId = useId();\n const isClient = useIsClient();\n const isShown = isOpen && isClient;\n const pressedBackdropRef = useRef(false);\n\n const dialogRef = useFocusTrap<HTMLDivElement>({ enabled: isShown, initialFocus });\n\n useScrollLock(isShown);\n useDismiss(\n () => {\n onClose();\n },\n { enabled: isShown, outside: false },\n );\n\n if (!isShown) return null;\n\n const hasTitle = !!header?.title;\n const hasHeader = hasTitle || !!header?.showCloseIcon;\n\n const closeButton = (\n <button\n type=\"button\"\n aria-label={closeLabel}\n className=\"group cursor-pointer p-3 focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-blue-crayola-c\"\n onClick={onClose}\n >\n <Icon\n icon=\"lucide:x\"\n className=\"text-tertiary group-hover:text-primary size-4 transition-all duration-300 group-hover:scale-110 motion-reduce:transition-none sm:size-5\"\n />\n </button>\n );\n\n return createPortal(\n <div\n {...containerProps}\n onPointerDown={(event: PointerEvent<HTMLDivElement>) => {\n // a press that starts on the backdrop itself, not one that started in the dialog\n pressedBackdropRef.current = event.target === event.currentTarget;\n containerProps?.onPointerDown?.(event);\n }}\n onClick={(event: ReactMouseEvent<HTMLDivElement>) => {\n containerProps?.onClick?.(event);\n\n if (\n closeOnOutsideClick &&\n pressedBackdropRef.current &&\n event.target === event.currentTarget\n ) {\n onClose();\n }\n\n pressedBackdropRef.current = false;\n }}\n className={`bg-primary-invert/50 fixed inset-0 z-100 flex items-center justify-center p-8 backdrop-blur-xs ${\n containerProps?.className ?? ''\n }`}\n >\n <div\n ref={dialogRef}\n role={role}\n aria-modal=\"true\"\n aria-label={labelledBy || hasTitle ? undefined : label}\n aria-labelledby={labelledBy ?? (hasTitle ? titleId : undefined)}\n aria-describedby={describedBy}\n tabIndex={-1}\n className={`bg-primary-invert border-primary/20 relative flex max-h-[90dvh] w-full max-w-md flex-col overflow-hidden rounded-xl border shadow-lg outline-none ${className}`}\n style={style}\n >\n {hasHeader && (\n <div\n className={`bg-primary-invert z-20 flex max-h-16 items-center ${\n hasTitle\n ? 'border-b-primary/50 sticky inset-x-0 top-0 justify-between border-b px-6 py-4'\n : 'border-primary/20 shadow-primary/20 absolute top-0 right-0 justify-center rounded-bl-xl border-b border-l shadow-lg'\n }`}\n >\n {hasTitle && (\n <h2 id={titleId} className=\"flex-1 text-center text-lg font-semibold\">\n <GradientText text={header.title ?? ''} type=\"silver\" />\n </h2>\n )}\n {header.showCloseIcon && closeButton}\n </div>\n )}\n <ScrollableGradientContainer\n direction=\"vertical\"\n containerClassName=\"flex-1\"\n className=\"overscroll-contain p-4\"\n gradientClassNames={{ top: 'h-8!', bottom: 'h-8!' }}\n >\n {children}\n </ScrollableGradientContainer>\n </div>\n </div>,\n document.body,\n );\n};\n","import { Icon } from '@iconify/react';\nimport { type ReactNode, useId } from 'react';\n\nimport type { ITextButton } from '../types/component.js';\nimport { Button, GradientText } from '../ui/index.js';\nimport { registerLayoutIcons } from './layout-icons.js';\nimport { type IModalWrapper, ModalWrapper } from './ModalWrapper.js';\n\ntype TConfirmButton = Omit<ITextButton, 'pattern'>;\n\ninterface IConfirmButtons {\n /** The button on the left: it closes the dialog after its `onClick`. Usually the way out (\"Cancel\"). */\n left?: TConfirmButton;\n /**\n * The button on the right, the main one. With an `onClick` the dialog stays open (the app closes it\n * when what was asked is done); without one it closes the dialog.\n */\n right?: TConfirmButton;\n}\n\ninterface ICustomConfirmModal {\n /** Your own content, in the dialog. Give the dialog a name in `modalProps.label`. */\n type: 'custom';\n children: ReactNode;\n title?: never;\n description?: never;\n buttons?: IConfirmButtons;\n}\n\ninterface IDefaultConfirmModal {\n type: 'success' | 'error' | 'warning' | 'default';\n children?: never;\n title: string;\n description?: string;\n buttons: IConfirmButtons;\n}\n\nexport type TConfirmModal = (ICustomConfirmModal | IDefaultConfirmModal) & {\n /** `isOpen` and `onClose` are the app's; the rest is passed to the dialog (`className`, `label`, ...). */\n modalProps: Omit<IModalWrapper, 'children' | 'closeOnOutsideClick' | 'role'>;\n};\n\nconst TYPE_LOOK = {\n success: { icon: 'solar:check-circle-linear', rgb: 'var(--primary-green-rgb)' },\n error: { icon: 'solar:danger-triangle-linear', rgb: 'var(--primary-red-rgb)' },\n warning: { icon: 'solar:danger-triangle-linear', rgb: 'var(--primary-yellow-rgb)' },\n default: { icon: 'solar:info-circle-outline', rgb: 'var(--primary-rgb)' },\n} as const;\n\n/**\n * A dialog that asks for a decision (\"Delete this category?\") or tells how something went: an\n * icon and colour for the kind of message (`success`, `error`, `warning`, `default`), a title, a\n * description and up to two buttons. `type=\"custom\"` shows content of your own instead.\n *\n * It is an `alertdialog`, named by the title and described by the description, and the focus starts on\n * the first button (the way out). A press on the backdrop does not close it: a decision should not be\n * made by a stray click. Escape and the close button of `modalProps.header` do.\n */\nexport const ConfirmModal = ({\n type,\n buttons,\n children,\n description,\n modalProps,\n title,\n}: TConfirmModal) => {\n registerLayoutIcons();\n\n const baseId = useId();\n const titleId = `${baseId}-title`;\n const descriptionId = `${baseId}-description`;\n const look = TYPE_LOOK[type === 'custom' ? 'default' : type];\n\n return (\n <ModalWrapper\n {...modalProps}\n role=\"alertdialog\"\n closeOnOutsideClick={false}\n labelledBy={type === 'custom' ? modalProps.labelledBy : titleId}\n describedBy={type === 'custom' || !description ? modalProps.describedBy : descriptionId}\n className={`max-w-sm border-2 ${modalProps.className ?? ''}`}\n containerProps={{\n ...modalProps.containerProps,\n className: `p-6! ${modalProps.containerProps?.className ?? ''}`,\n }}\n style={{\n ...modalProps.style,\n borderColor: `rgba(${look.rgb}, 0.4)`,\n boxShadow: `0 10px 10px 0px rgba(${look.rgb}, 0.1)`,\n }}\n >\n <div className=\"grid w-full place-items-center gap-6\">\n {type === 'custom' ? (\n children\n ) : (\n <>\n <div\n className=\"grid size-10 shrink-0 place-items-center rounded-full border p-2 md:size-12 lg:size-14\"\n style={{\n borderColor: `rgba(${look.rgb}, 0.8)`,\n background: `radial-gradient(circle, rgba(${look.rgb}, 0.25) 25%, rgba(${look.rgb}, 0.5) 50%, rgba(${look.rgb}, 0.75) 75%, rgba(${look.rgb}, 1) 100%)`,\n boxShadow: `0 0 0 1px rgba(${look.rgb}, 0.08), 0 0 12px rgba(${look.rgb}, 0.18), 0 8px 24px rgba(${look.rgb}, 0.22)`,\n }}\n >\n <Icon icon={look.icon} className=\"size-full\" />\n </div>\n <div className=\"flex flex-col items-center gap-2 text-center\">\n <h2 id={titleId}>\n <GradientText\n text={title}\n type=\"silver\"\n className=\"block font-semibold text-shadow-lg md:text-lg lg:text-xl\"\n />\n </h2>\n {description && (\n <p id={descriptionId} className=\"text-tertiary text-xs font-light lg:text-sm\">\n {description}\n </p>\n )}\n </div>\n </>\n )}\n {buttons && (\n <div className=\"flex w-full items-center justify-center gap-4\">\n {buttons.left && (\n <Button\n pattern=\"secondary\"\n {...buttons.left}\n className={`max-h-10 rounded-md! ${buttons.left.className ?? ''}`}\n buttonProps={{\n ...buttons.left.buttonProps,\n onClick: (event) => {\n buttons.left?.buttonProps?.onClick?.(event);\n modalProps.onClose();\n },\n }}\n />\n )}\n {buttons.right && (\n <Button\n pattern=\"primary\"\n {...buttons.right}\n className={`max-h-10 rounded-md! ${buttons.right.className ?? ''}`}\n buttonProps={{\n ...buttons.right.buttonProps,\n onClick: (event) => {\n if (buttons.right?.buttonProps?.onClick)\n buttons.right.buttonProps.onClick(event);\n else modalProps.onClose();\n },\n }}\n />\n )}\n </div>\n )}\n </div>\n </ModalWrapper>\n );\n};\n","import { Icon } from '@iconify/react';\nimport { type ReactNode, useId, useState } from 'react';\n\nimport { useDismiss } from '../lib/useDismiss.js';\nimport { InputIcon, type TInputIcons } from '../inputs/index.js';\nimport type { IClassName } from '../types/component.js';\nimport { registerLayoutIcons } from './layout-icons.js';\n\nexport interface IDropdownApi {\n /** Closes the dropdown, e.g. when something in it was chosen. */\n close: () => void;\n}\n\nexport interface IDropdown extends IClassName {\n /** What the button says: text, or an element. */\n title: ReactNode;\n /** An icon on each side of the title. One with an `onClick` is a button and needs a `label`. */\n icons?: TInputIcons;\n /** What is in the dropdown, or a function that gets `{ close }` to close it. */\n children: ReactNode | ((api: IDropdownApi) => ReactNode);\n /** Open when it is first shown. @default false */\n defaultOpen?: boolean;\n /** A press outside closes it. @default false */\n closeOnOutsideClick?: boolean;\n /** Escape closes it (unless a popup over it takes the Escape first). @default false */\n closeOnEscape?: boolean;\n /** The content floats over the page under the button instead of pushing it down. @default false */\n isAbsolute?: boolean;\n showShadow?: boolean;\n isRounded?: boolean;\n}\n\n/**\n * A button that opens and closes a panel under it (a disclosure): `aria-expanded` says which it is, the\n * panel opens and closes with a slide, and a closed panel is out of reach of the keyboard and of\n * assistive technology (`inert`), not only out of sight. The slide stops for a person who asked for\n * less motion.\n */\nexport const Dropdown = ({\n title,\n icons,\n children,\n className = '',\n defaultOpen = false,\n closeOnOutsideClick = false,\n closeOnEscape = false,\n isAbsolute = false,\n showShadow = false,\n isRounded = false,\n}: IDropdown) => {\n registerLayoutIcons();\n\n const baseId = useId();\n const panelId = `${baseId}-panel`;\n const [isOpen, setIsOpen] = useState(defaultOpen);\n\n const ref = useDismiss<HTMLDivElement>(\n () => {\n setIsOpen(false);\n },\n { enabled: isOpen, outside: closeOnOutsideClick, escape: closeOnEscape },\n );\n\n const close = () => {\n setIsOpen(false);\n };\n\n return (\n <div\n ref={ref}\n className={`flex w-full flex-col items-start ${isAbsolute ? 'relative' : 'static'} ${className}`}\n >\n <button\n type=\"button\"\n aria-expanded={isOpen}\n aria-controls={panelId}\n className=\"bg-primary-invert group flex w-full cursor-pointer items-center justify-between gap-2 px-3 py-2 text-left transition-colors duration-300 focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-blue-crayola-c xl:py-3\"\n onClick={() => {\n setIsOpen((current) => !current);\n }}\n >\n <span className=\"flex items-center gap-3\">\n <InputIcon icon={icons?.left} />\n <span className=\"text-primary text-sm font-medium whitespace-nowrap\">{title}</span>\n <InputIcon icon={icons?.right} />\n </span>\n <Icon\n icon=\"solar:alt-arrow-down-linear\"\n className={`text-primary size-4 transition-transform duration-300 ease-in-out motion-reduce:transition-none md:size-5 ${\n isOpen ? 'rotate-180' : 'rotate-0'\n }`}\n />\n </button>\n <div\n id={panelId}\n inert={!isOpen}\n className={`bg-primary-invert grid w-full transition-[grid-template-rows,opacity] duration-500 ease-in-out motion-reduce:transition-none ${\n isOpen ? 'grid-rows-[1fr] opacity-100' : 'grid-rows-[0fr] opacity-0'\n } ${isAbsolute ? 'absolute inset-x-0 top-full z-10 mt-2' : ''} ${\n showShadow\n ? 'shadow-[rgba(var(--primary-rgb),0.08)_0px_4px_16px,rgba(var(--primary-rgb),0.1)_0px_8px_32px]'\n : ''\n } ${isRounded ? 'rounded-lg' : ''}`}\n >\n <div className=\"min-h-0 overflow-hidden *:px-3 *:py-2\">\n {typeof children === 'function' ? children({ close }) : children}\n </div>\n </div>\n </div>\n );\n};\n","import type { IClassName } from '../types/component.js';\nimport { LoadingRings } from './LoadingRings.js';\n\nexport interface ILoadingPage extends IClassName {\n /** The word under the rings. @default 'Loading' */\n text?: string;\n}\n\n/**\n * A whole page that is loading: the rings in the middle of the window, over what is behind. Put it\n * where the page goes (a route that is still being loaded).\n */\nexport const LoadingPage = ({ text, className = '' }: ILoadingPage) => (\n <div\n className={`bg-primary-invert/50 fixed inset-0 z-100 flex h-full w-full items-center justify-center ${className}`}\n >\n <LoadingRings text={text} />\n </div>\n);\n","import { useEffect, useRef } from 'react';\n\n/** How the connection is: `'connecting'` is back on the network but nothing has answered yet. */\nexport type TNetworkStatus = 'online' | 'offline' | 'connecting';\n\n/**\n * The part of the toaster of `@beautinique/frontend-stores` (`createToaster`) that this uses. The\n * toaster is the app's: it is given in, this package has none.\n */\nexport interface INetworkToaster {\n success: (data: { title: string; description?: string; closeTimer?: number }) => string;\n warning: (data: {\n title: string;\n description?: string;\n autoClose?: boolean;\n isClosable?: boolean;\n }) => string;\n loading: (data: { title: string; description?: string }) => string;\n remove: (toastId: string) => void;\n}\n\nexport interface INetworkStatusToaster {\n /** The state of the connection, e.g. `useOnlineStatus().status` of `@beautinique/frontend-hooks`. */\n status: TNetworkStatus;\n toaster: INetworkToaster;\n}\n\n/** How long \"Back online\" stays on screen. Offline and connecting stay until the status changes. */\nexport const BACK_ONLINE_TOAST_MS = 3000;\n\n/**\n * Tells the user when the internet goes away and when it comes back, with one toast at a time:\n * \"You're offline\" (stays), then \"Connecting to internet...\" (stays) once the network is back but\n * nothing has answered yet, then \"Back online\" (goes away by itself). Nothing is shown while the user\n * simply is online. It draws nothing itself.\n */\nexport const NetworkStatusToaster = ({ status, toaster }: INetworkStatusToaster) => {\n // Set when the connection gets into trouble and cleared once \"Back online\" has had its time: that\n // is what tells \"online again\" from \"online all along\".\n const hadTroubleRef = useRef(false);\n const toasterRef = useRef(toaster);\n\n useEffect(() => {\n toasterRef.current = toaster;\n });\n\n useEffect(() => {\n const current = toasterRef.current;\n\n if (status === 'online') {\n if (!hadTroubleRef.current) return;\n\n const toastId = current.success({\n title: 'Back online',\n description: \"You're connected to the internet again.\",\n closeTimer: BACK_ONLINE_TOAST_MS,\n });\n\n // Not cleared right away: React runs an effect twice in development, and the second run has to\n // show the toast again. It is cleared once the toast has had its time, so that an effect that\n // runs again without a change (Fast Refresh, or a hidden `<Activity>` shown again) does not.\n const timer = window.setTimeout(() => {\n hadTroubleRef.current = false;\n }, BACK_ONLINE_TOAST_MS);\n\n return () => {\n window.clearTimeout(timer);\n current.remove(toastId);\n };\n }\n\n hadTroubleRef.current = true;\n\n const toastId =\n status === 'offline'\n ? current.warning({\n title: \"You're offline\",\n description: \"Check your internet connection. We'll reconnect when it's back.\",\n autoClose: false,\n isClosable: false,\n })\n : current.loading({\n title: 'Connecting to internet...',\n description: \"Hang tight, we're getting you back online.\",\n });\n\n return () => {\n current.remove(toastId);\n };\n }, [status]);\n\n return null;\n};\n","import { useEffect, useRef } from 'react';\n\nexport interface IScrollToTop {\n /**\n * The current path of the page, from the router (`useLocation().pathname`). The scroll happens\n * when it changes. The query and the hash are not part of it: a search that only changes `?page=2`\n * does not throw people back to the top.\n */\n pathname: string;\n /**\n * The `id` of the element that scrolls: the one that holds the page. Nothing happens when the page\n * has no element with this id.\n * @default 'main'\n */\n id?: string;\n /**\n * `'smooth'` is turned into `'auto'` for a person who asked their system for less motion.\n * @default 'auto'\n */\n behavior?: ScrollBehavior;\n /** @default 'start' */\n block?: ScrollLogicalPosition;\n /** @default 'nearest' */\n inline?: ScrollLogicalPosition;\n /**\n * Leaves the page where it is when the component first shows, and scrolls only on the changes of\n * `pathname` after that. Needed when the browser puts the page back where it was on a reload.\n * @default false\n */\n skipInitial?: boolean;\n}\n\n/**\n * Scrolls an element of the page (`#main` unless told another) to the top each time the path\n * changes, as a router does not do it for a single page app. It draws nothing; put it once, inside\n * the layout that has the element.\n */\nexport const ScrollToTop = ({\n pathname,\n id = 'main',\n behavior = 'auto',\n block = 'start',\n inline = 'nearest',\n skipInitial = false,\n}: IScrollToTop) => {\n // The path that was scrolled for last. A change of `id`, `behavior`, `block` or `inline` alone is\n // not a new page, so it does not scroll. With `skipInitial` the first path counts as scrolled already.\n const scrolledPath = useRef(skipInitial ? pathname : undefined);\n\n useEffect(() => {\n if (scrolledPath.current === pathname) return;\n scrolledPath.current = pathname;\n\n const element = document.getElementById(id);\n if (!element) return;\n\n const reduceMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n\n element.scrollIntoView({\n behavior: behavior === 'smooth' && reduceMotion ? 'auto' : behavior,\n block,\n inline,\n });\n }, [pathname, id, behavior, block, inline]);\n\n return null;\n};\n","import type { ComponentProps } from 'react';\n\n/**\n * A grey block that pulses where something is still loading. It is only a picture of the shape, so\n * it is hidden from assistive technology: say that the area is loading where it is (`aria-busy` on\n * the area, a `role=\"status\"` text) and not on every block. The pulse stops for a person who asked\n * for less motion.\n */\nexport const Skeleton = ({ className = '', ...divProps }: ComponentProps<'div'>) => (\n <div\n aria-hidden=\"true\"\n {...divProps}\n className={`bg-primary/50 size-full animate-pulse rounded-xs motion-reduce:animate-none ${className}`}\n />\n);\n","import type { ComponentProps } from 'react';\n\n/*\n * The parts of a table, with the look of the apps. Every part is its own element (`<table>`,\n * `<thead>`, ...) and takes its attributes. Name the table for assistive technology: give `Table`\n * an `aria-label` (or an `aria-labelledby` that points at the heading above it).\n */\n\nexport const Table = ({ className = '', ...props }: ComponentProps<'table'>) => (\n <table {...props} className={`w-full table-auto ${className}`} />\n);\n\nexport const TableHead = ({ className = '', ...props }: ComponentProps<'thead'>) => (\n <thead {...props} className={`border-y-primary/10 bg-primary/2 border-y ${className}`} />\n);\n\nexport const TableBody = (props: ComponentProps<'tbody'>) => <tbody {...props} />;\n\nexport const TableRow = ({ className = '', ...props }: ComponentProps<'tr'>) => (\n <tr {...props} className={`transition-colors duration-100 ${className}`} />\n);\n\n/** A header cell. It is the header of its column unless told otherwise (`scope=\"row\"`). */\nexport const TableHeadCell = ({\n className = '',\n scope = 'col',\n ...props\n}: ComponentProps<'th'>) => (\n <th\n {...props}\n scope={scope}\n className={`text-primary/55 w-auto px-4 py-3 text-center text-xs font-semibold whitespace-nowrap uppercase transition-colors duration-100 ${className}`}\n />\n);\n\nexport const TableRowCell = ({ className = '', ...props }: ComponentProps<'td'>) => (\n <td\n {...props}\n className={`w-auto px-4 py-3 text-center align-middle text-sm whitespace-nowrap ${className}`}\n />\n);\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export { ApiStatus, type TApiStatus } from './ApiStatus.js';
|
|
2
|
+
export { BorderGradient, type IBorderGradient } from './BorderGradient.js';
|
|
3
|
+
export { ConfirmModal, type TConfirmModal } from './ConfirmModal.js';
|
|
4
|
+
export { Dropdown, type IDropdown, type IDropdownApi } from './Dropdown.js';
|
|
5
|
+
export { type ILoadingPage, LoadingPage } from './LoadingPage.js';
|
|
6
|
+
export { type ILoadingRings, LoadingRings } from './LoadingRings.js';
|
|
7
|
+
export { type ILoadingText, LoadingText } from './LoadingText.js';
|
|
8
|
+
export { type IModalHeader, type IModalWrapper, ModalWrapper } from './ModalWrapper.js';
|
|
9
|
+
export { BACK_ONLINE_TOAST_MS, type INetworkStatusToaster, type INetworkToaster, NetworkStatusToaster, type TNetworkStatus, } from './NetworkStatusToaster.js';
|
|
10
|
+
export { type IScrollableGradientContainer, ScrollableGradientContainer, } from './ScrollableGradientContainer.js';
|
|
11
|
+
export { type IScrollToTop, ScrollToTop } from './ScrollToTop.js';
|
|
12
|
+
export { Skeleton } from './Skeleton.js';
|
|
13
|
+
export { Table, TableBody, TableHead, TableHeadCell, TableRow, TableRowCell } from './Table.js';
|
|
14
|
+
//# sourceMappingURL=index.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../src/layout/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,KAAK,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,KAAK,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,KAAK,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,KAAK,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACxF,OAAO,EACL,oBAAoB,EACpB,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,oBAAoB,EACpB,KAAK,cAAc,GACpB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,KAAK,4BAA4B,EACjC,2BAA2B,GAC5B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,KAAK,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export { ApiStatus, type TApiStatus } from './ApiStatus.js';
|
|
2
|
+
export { BorderGradient, type IBorderGradient } from './BorderGradient.js';
|
|
3
|
+
export { ConfirmModal, type TConfirmModal } from './ConfirmModal.js';
|
|
4
|
+
export { Dropdown, type IDropdown, type IDropdownApi } from './Dropdown.js';
|
|
5
|
+
export { type ILoadingPage, LoadingPage } from './LoadingPage.js';
|
|
6
|
+
export { type ILoadingRings, LoadingRings } from './LoadingRings.js';
|
|
7
|
+
export { type ILoadingText, LoadingText } from './LoadingText.js';
|
|
8
|
+
export { type IModalHeader, type IModalWrapper, ModalWrapper } from './ModalWrapper.js';
|
|
9
|
+
export { BACK_ONLINE_TOAST_MS, type INetworkStatusToaster, type INetworkToaster, NetworkStatusToaster, type TNetworkStatus, } from './NetworkStatusToaster.js';
|
|
10
|
+
export { type IScrollableGradientContainer, ScrollableGradientContainer, } from './ScrollableGradientContainer.js';
|
|
11
|
+
export { type IScrollToTop, ScrollToTop } from './ScrollToTop.js';
|
|
12
|
+
export { Skeleton } from './Skeleton.js';
|
|
13
|
+
export { Table, TableBody, TableHead, TableHeadCell, TableRow, TableRowCell } from './Table.js';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/layout/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,KAAK,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,KAAK,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,KAAK,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,KAAK,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACxF,OAAO,EACL,oBAAoB,EACpB,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,oBAAoB,EACpB,KAAK,cAAc,GACpB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,KAAK,4BAA4B,EACjC,2BAA2B,GAC5B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,KAAK,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
|