@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/mergeRefs.ts","../../src/lib/icon-registry.ts","../../src/inputs/inputs-icons.ts","../../src/inputs/InputError.tsx","../../src/inputs/useFieldIds.ts","../../src/inputs/Checkbox.tsx","../../src/inputs/InputIcon.tsx","../../src/inputs/InputLabel.tsx","../../src/inputs/Input.tsx","../../src/inputs/Radio.tsx","../../src/lib/dropdown-position.ts","../../src/lib/scrollRowIntoView.ts","../../src/lib/typeahead.ts","../../src/lib/useDismiss.ts","../../src/inputs/Select.tsx","../../src/inputs/Textarea.tsx"],"names":["jsxs","jsx","className","iconProps","Icon","useMemo","useId","useRef","useEffect","useLayoutEffect"],"mappings":"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","file":"index.js","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 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 { 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 error line, the select and the check of a chosen option, 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 'info-circle-linear': {\n body: '<g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-width=\"1.5\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M12 17V11\"/><path stroke-linejoin=\"round\" d=\"M12 8H12.0001\"/></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 'unread-linear': {\n body: '<path fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\" d=\"M7 12.9L10.1429 16.5L18 7.5\"/>',\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: registerInputIcons, names: INPUT_ICON_NAMES } =\n createIconRegistry(ICON_SETS);\n","import { Icon } from '@iconify/react';\nimport type { ComponentProps } from 'react';\n\nimport { registerInputIcons } from './inputs-icons.js';\n\nexport interface IInputError extends Omit<ComponentProps<'p'>, 'children'> {\n /** The message. Nothing is drawn while it is empty. */\n error?: string;\n}\n\n/**\n * The message under a field. It is an alert: a screen reader says it as soon as it appears. Give it an\n * `id` and put that id in the `aria-describedby` of the field, so the message is read with the field.\n */\nexport const InputError = ({ error = '', className = '', ...pProps }: IInputError) => {\n registerInputIcons();\n\n if (!error) return null;\n\n return (\n <p\n role=\"alert\"\n {...pProps}\n className={`text-red-c flex w-full items-center gap-1 text-start text-[11px] ${className}`}\n >\n <Icon icon=\"solar:info-circle-linear\" className=\"mb-0.5 shrink-0\" />\n <span className=\"line-clamp-2 leading-3 whitespace-pre-line first-letter:uppercase\">\n {error}\n </span>\n </p>\n );\n};\n","import { useId } from 'react';\n\ninterface IFieldIdsOptions {\n /** The `id` of the field, when the app gave one. */\n id?: string;\n /** Its `name`: it is the `id` when there is no other. */\n name?: string;\n /** The message under the field. */\n error?: string;\n /** What the field is already described by (an `aria-describedby` of the app). */\n describedBy?: string;\n}\n\n/**\n * What a field needs to be understood by assistive technology: an `id` for its label to point at, an\n * id for its message, and the attributes that say it is invalid and that the message describes it.\n * The `id` is the one the app gave, then the `name`, then one made here: a field with no name of its\n * own still gets a label that works.\n */\nexport const useFieldIds = ({ id, name, error, describedBy }: IFieldIdsOptions) => {\n const generated = useId();\n const fieldId = id ?? name ?? generated;\n const errorId = `${fieldId}-error`;\n\n return {\n id: fieldId,\n errorId,\n 'aria-invalid': error ? (true as const) : undefined,\n 'aria-describedby':\n [describedBy, error ? errorId : undefined].filter(Boolean).join(' ') || undefined,\n };\n};\n","import {\n type ChangeEvent,\n type FocusEvent,\n type InputHTMLAttributes,\n type ReactNode,\n type Ref,\n useMemo,\n} from 'react';\n\nimport { hasContent } from '../lib/content.js';\nimport { mergeRefs } from '../lib/mergeRefs.js';\nimport type { ITooltip } from '../types/component.js';\nimport { Tooltip } from '../ui/index.js';\nimport { InputError } from './InputError.js';\nimport type { IFieldBase, IFieldRegistration } from './types.js';\nimport { useFieldIds } from './useFieldIds.js';\n\nexport interface ICheckbox extends Omit<IFieldBase, 'label'> {\n /** The words next to the switch. They are its label: pressing them switches it, a screen reader reads them. */\n content?: ReactNode;\n /** Any attribute of the `<input>` except `type`: `name`, `checked`, `onChange`, `disabled`... */\n checkboxProps: Omit<InputHTMLAttributes<HTMLInputElement>, 'type'>;\n /** What `register('name')` of React Hook Form gives back. */\n register?: IFieldRegistration;\n /** A tooltip on the switch (it shows when `required` is true). */\n tooltip?: Pick<ITooltip, 'required' | 'description' | 'title' | 'placement'>;\n /** The `<input>` itself, e.g. to move the focus to it. */\n ref?: Ref<HTMLInputElement>;\n}\n\n/**\n * An on / off switch with the words that say what it is for. It is a real checkbox (`role=\"switch\"`),\n * so it works with the keyboard (Space) and with a form, and a screen reader says \"on\" or \"off\".\n */\nexport const Checkbox = ({\n register,\n className = '',\n content,\n checkboxProps,\n containerClassName = '',\n error = '',\n tooltip,\n ref,\n}: ICheckbox) => {\n const { id, errorId, ...aria } = useFieldIds({\n id: checkboxProps.id,\n name: checkboxProps.name ?? register?.name,\n error,\n describedBy: checkboxProps['aria-describedby'],\n });\n\n const mergedRef = useMemo(\n () => mergeRefs<HTMLInputElement>(register?.ref, ref),\n [register?.ref, ref],\n );\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n if (checkboxProps.disabled) return;\n\n void register?.onChange(event);\n checkboxProps.onChange?.(event);\n };\n\n const handleBlur = (event: FocusEvent<HTMLInputElement>) => {\n checkboxProps.onBlur?.(event);\n void register?.onBlur(event);\n };\n\n return (\n <div className={`flex max-w-full min-w-0 flex-col gap-1.5 ${containerClassName}`}>\n <div className=\"flex items-center gap-2 sm:gap-3\">\n <Tooltip\n title={tooltip?.title}\n description={tooltip?.description}\n placement={tooltip?.placement}\n required={tooltip?.required ?? false}\n >\n <label className=\"relative inline-block h-6 w-12 shrink-0\">\n <input\n {...register}\n {...checkboxProps}\n {...aria}\n type=\"checkbox\"\n role=\"switch\"\n ref={mergedRef}\n id={id}\n onChange={handleChange}\n onBlur={handleBlur}\n className=\"peer sr-only\"\n />\n <span\n aria-hidden=\"true\"\n className={`border-primary/10 bg-tertiary-invert peer-checked:border-blue-crayola-c before:bg-silver-duo peer-checked:before:bg-accent-duo absolute inset-0 cursor-pointer rounded-full border transition-all duration-400 ease-[cubic-bezier(0.175,0.885,0.32,1.275)] peer-checked:shadow-[0_0_10px_rgba(var(--blue-crayola-c-rgb),0.8)] peer-focus-visible:outline-2 peer-focus-visible:outline-offset-2 peer-focus-visible:outline-blue-crayola-c peer-disabled:cursor-not-allowed peer-disabled:opacity-60 motion-reduce:transition-none before:absolute before:top-1/2 before:left-1 before:aspect-square before:h-[70%] before:-translate-y-1/2 before:rounded-full before:transition-all before:duration-400 before:ease-[cubic-bezier(0.23,1,0.32,1)] before:content-[''] motion-reduce:before:transition-none peer-checked:before:translate-x-[calc(150%)] ${className}`}\n />\n </label>\n </Tooltip>\n {hasContent(content) && (\n <label\n htmlFor={id}\n className=\"text-primary/50 cursor-pointer text-xs font-medium whitespace-break-spaces sm:text-[13px] md:text-sm\"\n >\n {content}\n </label>\n )}\n </div>\n <InputError id={errorId} error={error} />\n </div>\n );\n};\n","import { Icon } from '@iconify/react';\nimport { isValidElement } from 'react';\n\nimport type { TInputIcon } from './types.js';\n\nconst BUTTON_CSS =\n 'flex shrink-0 cursor-pointer items-center rounded-sm focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-crayola-c disabled:cursor-not-allowed disabled:opacity-60';\n\n/**\n * An icon at one end of a field. An element is drawn as it is. An icon of Iconify is drawn as a\n * picture, or, when it has an `onClick`, inside a `<button>` that has the `label` as its name.\n */\nexport const InputIcon = ({ icon }: { icon?: TInputIcon }) => {\n if (!icon) return null;\n\n if (isValidElement(icon)) return icon;\n\n if (icon.onClick) {\n const { onClick, label, disabled, className = '', ...iconProps } = icon;\n\n return (\n <button\n type=\"button\"\n aria-label={label}\n disabled={disabled}\n onClick={onClick}\n className={BUTTON_CSS}\n >\n <Icon {...iconProps} className={className} />\n </button>\n );\n }\n\n const { className = '', ...iconProps } = icon;\n\n return <Icon {...iconProps} className={`shrink-0 ${className}`} />;\n};\n","import type { ComponentProps } from 'react';\n\nimport { hasContent } from '../lib/content.js';\n\n/**\n * The label that sits on the top border of a field. It draws nothing when it has no text. Give it\n * `htmlFor` (the `id` of the field) so that pressing it focuses the field and a screen reader reads it\n * as the name of the field.\n */\nexport const InputLabel = ({\n children,\n className = '',\n htmlFor,\n ...labelProps\n}: ComponentProps<'label'>) =>\n hasContent(children) ? (\n <label\n {...labelProps}\n htmlFor={htmlFor}\n className={`text-primary/50 border-primary/10 bg-smoke-eerie absolute top-0 left-3 -translate-y-1/2 transform rounded-sm border px-1 py-0.5 pt-1 text-[10px] leading-none md:px-2 ${htmlFor ? 'cursor-pointer' : 'cursor-default'} ${className}`}\n >\n {children}\n </label>\n ) : null;\n","import {\n type ChangeEvent,\n type FocusEvent,\n type InputHTMLAttributes,\n type Ref,\n useEffect,\n useMemo,\n useRef,\n} from 'react';\n\nimport { mergeRefs } from '../lib/mergeRefs.js';\nimport { InputError } from './InputError.js';\nimport { InputIcon } from './InputIcon.js';\nimport { InputLabel } from './InputLabel.js';\nimport type { IFieldBase, IFieldRegistration, TInputIcons } from './types.js';\nimport { useFieldIds } from './useFieldIds.js';\n\nexport interface IInput extends IFieldBase {\n /** Any attribute of an `<input>`: `type`, `name`, `value`, `onChange`, `placeholder`, `disabled`... */\n inputProps: InputHTMLAttributes<HTMLInputElement>;\n /** An icon at each end of the field. One with an `onClick` is a button and needs a `label`. */\n icons?: TInputIcons;\n /** What `register('name')` of React Hook Form gives back. */\n register?: IFieldRegistration;\n /** Puts the cursor in the field when it is shown. */\n needRef?: boolean;\n /** The `<input>` itself, e.g. to move the focus to it. */\n ref?: Ref<HTMLInputElement>;\n}\n\n/**\n * A text field (any `type` of `<input>`) with its label on the top border, a message under it, and an\n * icon at each end.\n *\n * - The label is the name of the field: it is tied to it through `id` (the `id` of `inputProps`, or\n * its `name`, or one made here), so pressing the label focuses the field and a screen reader reads it.\n * - While there is an `error` the field is `aria-invalid` and described by the message, which is\n * said as soon as it shows up.\n * - Both `inputProps` and `register` are heard: `onChange` and `onBlur` of each are called.\n */\nexport const Input = ({\n label = '',\n register,\n className = '',\n error = '',\n containerClassName = '',\n icons,\n inputProps,\n needRef = false,\n ref,\n}: IInput) => {\n const inputRef = useRef<HTMLInputElement | null>(null);\n const { id, errorId, ...aria } = useFieldIds({\n id: inputProps.id,\n name: inputProps.name ?? register?.name,\n error,\n describedBy: inputProps['aria-describedby'],\n });\n\n const mergedRef = useMemo(\n () => mergeRefs<HTMLInputElement>(register?.ref, ref, inputRef),\n [register?.ref, ref],\n );\n\n useEffect(() => {\n if (needRef) inputRef.current?.focus();\n }, [needRef]);\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n if (inputProps.disabled) return;\n\n inputProps.onChange?.(event);\n void register?.onChange(event);\n };\n\n const handleBlur = (event: FocusEvent<HTMLInputElement>) => {\n inputProps.onBlur?.(event);\n void register?.onBlur(event);\n };\n\n return (\n <div className={`flex max-w-full min-w-0 flex-col gap-1.5 ${containerClassName}`}>\n <div className=\"relative\">\n <InputLabel htmlFor={id}>{label}</InputLabel>\n <div\n data-invalid={error ? '' : undefined}\n className={`border-primary/10 bg-smoke-eerie focus-within:border-blue-crayola-c data-invalid:border-red-c flex items-center gap-3 overflow-hidden rounded-lg border px-3 ${className}`}\n >\n <InputIcon icon={icons?.left} />\n <input\n {...register}\n {...inputProps}\n {...aria}\n ref={mergedRef}\n id={id}\n onChange={handleChange}\n onBlur={handleBlur}\n onWheel={(event) => {\n inputProps.onWheel?.(event);\n // a number field that is scrolled over changes its value: let go of it instead\n if (inputProps.type === 'number') event.currentTarget.blur();\n }}\n className={`text-primary placeholder:text-primary/30 autofill-effect min-w-0 flex-1 border-none bg-transparent py-2 text-[13px] leading-normal outline-hidden placeholder:text-[13px] focus:border-none focus:outline-hidden disabled:cursor-not-allowed xl:py-3 ${inputProps.className ?? ''}`}\n />\n <InputIcon icon={icons?.right} />\n </div>\n </div>\n <InputError id={errorId} error={error} />\n </div>\n );\n};\n","import { type ReactNode, useId } from 'react';\n\nimport type { IClassName, IContainerClassName } from '../types/component.js';\nimport { InputError } from './InputError.js';\nimport type { IFieldBase } from './types.js';\n\nexport interface IRadioOption {\n label: ReactNode;\n value: string;\n}\n\nexport interface IRadio extends IClassName, IContainerClassName, Pick<IFieldBase, 'error'> {\n /** The value of the chosen option. A value that is not one of the options chooses none. */\n value: string;\n onChange: (value: string) => void;\n options: IRadioOption[];\n /** Names the group for assistive technology (\"Gender\"): the options are its only visible text. */\n label?: string;\n /** Groups the radios; one is made when it is not given. */\n name?: string;\n disabled?: boolean;\n}\n\n/**\n * A group of options of which one is chosen, drawn as a bar with a marker that slides to the chosen\n * one. It is a real radio group: the arrow keys move the choice, Tab leaves the group, and the\n * message under it is read with it.\n */\nexport const Radio = ({\n value,\n onChange,\n options,\n className = '',\n containerClassName = '',\n error = '',\n label,\n name,\n disabled = false,\n}: IRadio) => {\n const generated = useId();\n const groupName = name ?? generated;\n const errorId = `${groupName}-error`;\n const index = options.findIndex((option) => option.value === value);\n\n return (\n <div className={`flex max-w-full min-w-0 flex-col gap-1.5 ${containerClassName}`}>\n <div\n role=\"radiogroup\"\n aria-label={label}\n aria-invalid={error ? true : undefined}\n aria-describedby={error ? errorId : undefined}\n className={`border-battleship-davys-gray mx-auto flex w-full items-center justify-center gap-4 overflow-hidden rounded-full border ${className}`}\n >\n <div className=\"bg-smoke-eerie shadow-primary-btn hover:shadow-primary-btn-hover relative flex h-9 w-full items-center justify-between rounded-full transition-shadow duration-300\">\n {/* the marker under the chosen option */}\n {index >= 0 && (\n <div\n aria-hidden=\"true\"\n className=\"bg-accent-duo absolute h-full transform rounded-full shadow-lg transition-transform duration-300 ease-in-out motion-reduce:transition-none\"\n style={{\n width: `${String(100 / options.length)}%`,\n transform: `translateX(${String(index * 100)}%)`,\n }}\n />\n )}\n\n {options.map((option) => (\n <label\n key={option.value}\n className={`has-focus-visible:outline-blue-crayola-c relative z-1 inline-block flex-1 rounded-full text-center text-sm has-focus-visible:outline-2 has-focus-visible:outline-offset-2 ${\n disabled ? 'cursor-not-allowed opacity-60' : 'cursor-pointer'\n } ${\n value === option.value\n ? 'font-semibold text-white/90'\n : 'text-primary/50 font-medium'\n }`}\n >\n <input\n type=\"radio\"\n name={groupName}\n value={option.value}\n checked={value === option.value}\n disabled={disabled}\n onChange={() => {\n onChange(option.value);\n }}\n className=\"sr-only\"\n />\n {option.label}\n </label>\n ))}\n </div>\n </div>\n <InputError id={errorId} error={error} />\n </div>\n );\n};\n","export type TDropdownPlacement = 'top' | 'bottom';\n\nexport interface IDropdownRect {\n top: number;\n bottom: number;\n left: number;\n width: number;\n}\n\n/** The gap between the field and the list. */\nexport const DROPDOWN_GAP = 8;\n\n/**\n * Where a list that opens from a field goes: where the app asked (`desired`), unless that side of the\n * field has not room for the list and the other one has more. A list that fits on neither stays\n * where it was asked to open.\n *\n * @param needed how tall the list is, or the most it can be (its `max-height`).\n */\nexport const getDropdownPlacement = ({\n rect,\n viewportHeight,\n desired,\n needed,\n}: {\n rect: Pick<IDropdownRect, 'top' | 'bottom'>;\n viewportHeight: number;\n desired: TDropdownPlacement;\n needed: number;\n}): TDropdownPlacement => {\n const below = viewportHeight - rect.bottom - DROPDOWN_GAP;\n const above = rect.top - DROPDOWN_GAP;\n const room = desired === 'bottom' ? below : above;\n const other = desired === 'bottom' ? above : below;\n\n if (room >= needed || other <= room) return desired;\n\n return desired === 'bottom' ? 'top' : 'bottom';\n};\n\n/** The `style` of a list that is `position: fixed` under or over the field, as wide as it is. */\nexport const getDropdownStyle = (\n rect: IDropdownRect,\n placement: TDropdownPlacement,\n viewportHeight: number,\n) => ({\n left: rect.left,\n width: rect.width,\n ...(placement === 'top'\n ? { bottom: viewportHeight - rect.top + DROPDOWN_GAP }\n : { top: rect.bottom + DROPDOWN_GAP }),\n});\n","/**\n * Scrolls `list` just enough to show `row` (an element inside it), and nothing else: the page is not\n * moved, as `scrollIntoView()` would do, and it works where that function does not exist. `list`\n * must be the `offsetParent` of the row (give it `position: relative`).\n */\nexport const scrollRowIntoView = (list: HTMLElement, row: HTMLElement) => {\n const top = row.offsetTop;\n const bottom = top + row.offsetHeight;\n\n if (top < list.scrollTop) list.scrollTop = top;\n else if (bottom > list.scrollTop + list.clientHeight) list.scrollTop = bottom - list.clientHeight;\n};\n","/**\n * The option a person reaches by typing, for a list of options (a select, a menu): the next one whose\n * label starts with what was typed, looking from `fromIndex` on and starting over at the top.\n *\n * - Typing a letter that was just typed again (`\"aaa\"`) goes through the options that start with it,\n * one at a time, as pressing the same key does in a native select.\n * - Several different letters (`\"ban\"`) look for an option that starts with all of them, beginning\n * at the current one, so the choice does not leave it while it still matches.\n * - Options that cannot be chosen (`disabled`) are skipped.\n *\n * @returns the index of the option, or -1 when none matches.\n */\nexport const findTypeaheadMatch = (\n options: readonly { label: string; disabled?: boolean }[],\n typed: string,\n fromIndex: number,\n) => {\n const text = typed.toLowerCase();\n\n if (!text || options.length === 0) return -1;\n\n const isRepeat = text.length > 1 && new Set(text).size === 1;\n const query = isRepeat ? text.slice(0, 1) : text;\n // one more letter of the same key: start after the current option, so it is not found again\n const start = isRepeat ? fromIndex + 1 : fromIndex;\n\n for (let step = 0; step < options.length; step += 1) {\n const index = (((start + step) % options.length) + options.length) % options.length;\n const option = options.at(index);\n\n if (option && !option.disabled && option.label.toLowerCase().startsWith(query)) return index;\n }\n\n return -1;\n};\n\n/** The next option that can be chosen from `from` going `step` (1 or -1), or -1 at the end of the list. */\nexport const findEnabledIndex = (\n options: readonly { disabled?: boolean }[],\n from: number,\n step: 1 | -1,\n) => {\n for (let index = from + step; index >= 0 && index < options.length; index += step) {\n if (!options[index]?.disabled) return index;\n }\n\n return -1;\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","import { Icon } from '@iconify/react';\nimport {\n type KeyboardEvent,\n type ReactNode,\n useEffect,\n useId,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport {\n getDropdownPlacement,\n getDropdownStyle,\n type IDropdownRect,\n type TDropdownPlacement,\n} from '../lib/dropdown-position.js';\nimport { scrollRowIntoView } from '../lib/scrollRowIntoView.js';\nimport { findEnabledIndex, findTypeaheadMatch } from '../lib/typeahead.js';\nimport { useDismiss } from '../lib/useDismiss.js';\nimport { InputError } from './InputError.js';\nimport { InputIcon } from './InputIcon.js';\nimport { registerInputIcons } from './inputs-icons.js';\nimport { InputLabel } from './InputLabel.js';\nimport type { IFieldBase, TInputIcons } from './types.js';\n\nexport interface ISelectOption {\n /** What is shown for the option, in the list and in the field once it is chosen. */\n label: ReactNode;\n value: string | number;\n /** The option is shown but cannot be chosen. */\n disabled?: boolean;\n /**\n * The text typing looks for when `label` is not text (an icon and a name). It is the label when that\n * is text.\n */\n searchLabel?: string;\n}\n\nexport interface ISelectProps {\n /** The value of the chosen option. A value that is not one of the options chooses none. */\n value: ISelectOption['value'];\n /** Gets the value of the option that was chosen, and `''` when the choice was taken away. */\n onChange: (value: ISelectOption['value']) => void;\n disabled?: boolean;\n /** What the field says while nothing is chosen. */\n placeholder?: string;\n /** The `id` of the field, for something that has to point at it. */\n id?: string;\n}\n\nexport interface ISelect extends IFieldBase {\n selectProps: ISelectProps;\n options: ISelectOption[];\n /** An icon at each end of the field. One with an `onClick` is a button and needs a `label`. */\n icons?: TInputIcons;\n /** Classes for the list of options. */\n optionsClassName?: string;\n /** Which side of the field the list opens on, unless there is no room there. @default 'bottom' */\n position?: TDropdownPlacement;\n /** Pressing the chosen option again takes the choice away. @default true */\n clearable?: boolean;\n}\n\ninterface IOpenList {\n rect: IDropdownRect;\n placement: TDropdownPlacement;\n}\n\n// The tallest the list gets (`max-h-60`) and the room its frame takes.\nconst LIST_MAX_HEIGHT = 240 + 10;\nconst TYPEAHEAD_RESET_MS = 700;\n\nconst labelTextOf = (option: ISelectOption) =>\n option.searchLabel ?? (typeof option.label === 'string' ? option.label : String(option.value));\n\n/**\n * A field that opens a list of options. It follows the pattern of a select that is a combobox: the field\n * keeps the focus and tells assistive technology which option is the active one while the arrow\n * keys move through the list.\n *\n * - Keyboard: Arrow Down / Up (or Enter, Space) open it and move; Home / End jump to the first and the\n * last; Enter or Space chooses; Escape or Tab close it; typing letters goes to the option that\n * starts with them.\n * - The list is drawn in `document.body`, so it is not cut by a parent that scrolls or hides what\n * overflows. It opens on the other side of the field when there is no room on the one asked for, and\n * follows the field while the page scrolls.\n * - Pressing outside closes it. Pressing the chosen option again takes the choice away (`clearable`).\n */\nexport const Select = ({\n label = '',\n className = '',\n error = '',\n containerClassName = '',\n optionsClassName = '',\n icons,\n selectProps,\n options,\n position = 'bottom',\n clearable = true,\n}: ISelect) => {\n registerInputIcons();\n\n const baseId = useId();\n const triggerId = selectProps.id ?? `${baseId}-field`;\n const listId = `${baseId}-list`;\n const errorId = `${baseId}-error`;\n const optionId = (index: number) => `${baseId}-option-${String(index)}`;\n\n const [isOpenState, setIsOpen] = useState(false);\n const [activeIndex, setActiveIndex] = useState(-1);\n const [list, setList] = useState<IOpenList | null>(null);\n\n const triggerBoxRef = useRef<HTMLDivElement | null>(null);\n const listRef = useRef<HTMLDivElement | null>(null);\n const activeOptionRef = useRef<HTMLLIElement | null>(null);\n const listboxRef = useRef<HTMLUListElement | null>(null);\n const typedRef = useRef({ text: '', timer: 0 });\n\n const selectedIndex = options.findIndex((option) => option.value === selectProps.value);\n const optionAt = (index: number): ISelectOption | undefined =>\n index >= 0 && index < options.length ? options[index] : undefined;\n const selected = optionAt(selectedIndex);\n const hasValue = selected !== undefined && selected.value !== '';\n const canOpen = options.length > 0;\n // a field that is disabled while its list is open closes the list\n const isOpen = isOpenState && !selectProps.disabled;\n\n const containerRef = useDismiss<HTMLDivElement>(\n () => {\n setIsOpen(false);\n },\n { enabled: isOpen, ignore: [listRef] },\n );\n\n const open = (at: number) => {\n if (!canOpen) return;\n\n setActiveIndex(at);\n setIsOpen(true);\n };\n\n const close = () => {\n setIsOpen(false);\n };\n\n const choose = (index: number) => {\n const option = optionAt(index);\n\n if (!option || option.disabled || selectProps.disabled) return;\n\n selectProps.onChange(clearable && index === selectedIndex ? '' : option.value);\n close();\n };\n\n // Where the list is: under or over the field, as wide as it, and again whenever the page moves. It is\n // measured before the browser paints, so the list never shows in the wrong place for a moment.\n useLayoutEffect(() => {\n if (!isOpen) return;\n\n const update = () => {\n const box = triggerBoxRef.current;\n\n if (!box) return;\n\n const rect = box.getBoundingClientRect();\n const placement = getDropdownPlacement({\n rect,\n viewportHeight: window.innerHeight,\n desired: position,\n needed: Math.min(options.length * 32 + 8, LIST_MAX_HEIGHT),\n });\n\n setList({ rect, placement });\n };\n\n update();\n window.addEventListener('scroll', update, true);\n window.addEventListener('resize', update);\n\n return () => {\n window.removeEventListener('scroll', update, true);\n window.removeEventListener('resize', update);\n };\n }, [isOpen, position, options.length]);\n\n // The active option stays in view while the arrow keys move it.\n useEffect(() => {\n const row = activeOptionRef.current;\n const scroller = listboxRef.current;\n\n if (isOpen && scroller && row) scrollRowIntoView(scroller, row);\n }, [isOpen, activeIndex, list]);\n\n useEffect(() => {\n const typed = typedRef.current;\n\n return () => {\n window.clearTimeout(typed.timer);\n };\n }, []);\n\n const typeAhead = (character: string) => {\n const typed = typedRef.current;\n\n window.clearTimeout(typed.timer);\n typed.text += character;\n typed.timer = window.setTimeout(() => {\n typed.text = '';\n }, TYPEAHEAD_RESET_MS);\n\n const match = findTypeaheadMatch(\n options.map((option) => ({ label: labelTextOf(option), disabled: option.disabled })),\n typed.text,\n isOpen ? activeIndex : selectedIndex,\n );\n\n if (match === -1) return;\n\n if (isOpen) setActiveIndex(match);\n else open(match);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLButtonElement>) => {\n if (selectProps.disabled || event.altKey || event.ctrlKey || event.metaKey) return;\n\n const first = findEnabledIndex(options, -1, 1);\n const last = findEnabledIndex(options, options.length, -1);\n\n switch (event.key) {\n case 'ArrowDown':\n case 'ArrowUp': {\n event.preventDefault();\n\n if (!isOpen) {\n open(selectedIndex !== -1 ? selectedIndex : event.key === 'ArrowDown' ? first : last);\n\n return;\n }\n\n const next = findEnabledIndex(options, activeIndex, event.key === 'ArrowDown' ? 1 : -1);\n\n if (next !== -1) setActiveIndex(next);\n\n return;\n }\n\n case 'Home':\n case 'End':\n event.preventDefault();\n\n if (isOpen) setActiveIndex(event.key === 'Home' ? first : last);\n else open(event.key === 'Home' ? first : last);\n\n return;\n\n case 'Enter':\n case ' ':\n event.preventDefault();\n\n if (isOpen) choose(activeIndex);\n else open(selectedIndex !== -1 ? selectedIndex : first);\n\n return;\n\n case 'Tab':\n close();\n\n return;\n\n default:\n // a letter, a digit: go to the option that starts with what was typed\n if (event.key.length === 1) {\n event.preventDefault();\n typeAhead(event.key);\n }\n }\n };\n\n return (\n <div\n ref={containerRef}\n className={`flex max-w-full min-w-0 flex-col gap-1.5 ${containerClassName}`}\n >\n <div className=\"relative\" ref={triggerBoxRef}>\n <InputLabel htmlFor={triggerId} className=\"z-2\">\n {label}\n </InputLabel>\n <div\n data-invalid={error ? '' : undefined}\n className={`border-primary/10 bg-smoke-eerie focus-within:border-blue-crayola-c data-invalid:border-red-c flex items-center gap-3 overflow-hidden rounded-lg border px-3 ${className}`}\n >\n <InputIcon icon={icons?.left} />\n <button\n id={triggerId}\n type=\"button\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-controls={isOpen ? listId : undefined}\n aria-activedescendant={isOpen && activeIndex !== -1 ? optionId(activeIndex) : undefined}\n aria-invalid={error ? true : undefined}\n aria-describedby={error ? errorId : undefined}\n disabled={selectProps.disabled}\n onClick={() => {\n if (isOpen) close();\n else open(selectedIndex);\n }}\n onKeyDown={handleKeyDown}\n className={`text-primary flex min-w-0 flex-1 items-center justify-between gap-0.5 truncate border-none bg-transparent text-left text-[13px] outline-hidden ${\n selectProps.disabled ? 'cursor-no-drop' : 'cursor-pointer'\n }`}\n >\n <span\n className={`flex-1 truncate py-2 first-letter:capitalize xl:py-3 ${hasValue ? '' : 'text-primary/30'}`}\n >\n {selected?.label ?? selectProps.placeholder}\n </span>\n <Icon\n icon=\"solar:alt-arrow-down-linear\"\n className={`size-4 transition-transform motion-reduce:transition-none md:size-5 ${\n isOpen ? 'rotate-180' : ''\n } ${hasValue ? 'text-primary' : 'text-primary/30'}`}\n />\n </button>\n <InputIcon icon={icons?.right} />\n </div>\n </div>\n <InputError id={errorId} error={error} />\n {isOpen &&\n list &&\n createPortal(\n <div\n ref={listRef}\n className={`border-primary/10 bg-smoke-eerie fixed z-3 overflow-hidden rounded-lg border shadow-md ${optionsClassName}`}\n style={getDropdownStyle(list.rect, list.placement, window.innerHeight)}\n >\n <ul\n id={listId}\n ref={listboxRef}\n role=\"listbox\"\n aria-label={label || undefined}\n className=\"relative flex max-h-60 flex-col gap-0.5 overflow-auto p-1\"\n >\n {options.map((option, index) => {\n const isSelected = index === selectedIndex;\n const isActive = index === activeIndex;\n\n return (\n <li\n key={option.value}\n id={optionId(index)}\n ref={isActive ? activeOptionRef : null}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled ? true : undefined}\n className={`text-tertiary flex items-center justify-between gap-2 rounded-sm px-2 py-1.5 text-[13px] ${\n option.disabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'\n } ${isActive ? 'bg-primary/5' : ''} ${isSelected ? 'bg-primary/8' : ''}`}\n onMouseMove={() => {\n if (!option.disabled && !isActive) setActiveIndex(index);\n }}\n onClick={() => {\n choose(index);\n }}\n >\n <span className=\"flex-1 text-left text-[13px] first-letter:capitalize\">\n {option.label}\n </span>\n {isSelected && (\n <Icon icon=\"solar:unread-linear\" className=\"text-primary size-4 md:size-5\" />\n )}\n </li>\n );\n })}\n </ul>\n </div>,\n document.body,\n )}\n </div>\n );\n};\n","import {\n type ChangeEvent,\n type FocusEvent,\n type Ref,\n type TextareaHTMLAttributes,\n useEffect,\n useMemo,\n useRef,\n} from 'react';\n\nimport { mergeRefs } from '../lib/mergeRefs.js';\nimport { InputError } from './InputError.js';\nimport { InputLabel } from './InputLabel.js';\nimport type { IFieldBase, IFieldRegistration } from './types.js';\nimport { useFieldIds } from './useFieldIds.js';\n\nexport interface ITextarea extends IFieldBase {\n /** Any attribute of a `<textarea>`: `name`, `value`, `onChange`, `placeholder`, `rows`... */\n textAreaProps: TextareaHTMLAttributes<HTMLTextAreaElement>;\n /** What `register('name')` of React Hook Form gives back. */\n register?: IFieldRegistration<HTMLTextAreaElement>;\n /** Puts the cursor in the field when it is shown. */\n needRef?: boolean;\n /** The `<textarea>` itself, e.g. to move the focus to it. */\n ref?: Ref<HTMLTextAreaElement>;\n}\n\n/**\n * A multi-line text field: the same as `Input` (label on the border, message under it, `register`\n * and `textAreaProps` both heard, `aria-invalid` and `aria-describedby` while there is an `error`),\n * five rows tall unless `rows` says otherwise.\n */\nexport const Textarea = ({\n label = '',\n register,\n className = '',\n error = '',\n containerClassName = '',\n textAreaProps,\n needRef = false,\n ref,\n}: ITextarea) => {\n const textareaRef = useRef<HTMLTextAreaElement | null>(null);\n const { id, errorId, ...aria } = useFieldIds({\n id: textAreaProps.id,\n name: textAreaProps.name ?? register?.name,\n error,\n describedBy: textAreaProps['aria-describedby'],\n });\n\n const mergedRef = useMemo(\n () => mergeRefs<HTMLTextAreaElement>(register?.ref, ref, textareaRef),\n [register?.ref, ref],\n );\n\n useEffect(() => {\n if (needRef) textareaRef.current?.focus();\n }, [needRef]);\n\n const handleChange = (event: ChangeEvent<HTMLTextAreaElement>) => {\n if (textAreaProps.disabled) return;\n\n textAreaProps.onChange?.(event);\n void register?.onChange(event);\n };\n\n const handleBlur = (event: FocusEvent<HTMLTextAreaElement>) => {\n textAreaProps.onBlur?.(event);\n void register?.onBlur(event);\n };\n\n return (\n <div className={`flex max-w-full min-w-0 flex-col gap-1.5 ${containerClassName}`}>\n <div className=\"relative\">\n <InputLabel htmlFor={id}>{label}</InputLabel>\n <div\n data-invalid={error ? '' : undefined}\n className={`border-primary/10 bg-smoke-eerie focus-within:border-blue-crayola-c data-invalid:border-red-c overflow-hidden rounded-lg border ${className}`}\n >\n <textarea\n {...register}\n {...textAreaProps}\n {...aria}\n ref={mergedRef}\n id={id}\n rows={textAreaProps.rows ?? 5}\n onChange={handleChange}\n onBlur={handleBlur}\n className={`text-primary placeholder:text-primary/30 autofill-effect block w-full resize-y border-none bg-transparent px-3 py-2 text-[13px] leading-normal outline-hidden placeholder:text-[13px] focus:border-none focus:outline-hidden disabled:cursor-not-allowed xl:py-3 ${textAreaProps.className ?? ''}`}\n />\n </div>\n </div>\n <InputError id={errorId} error={error} />\n </div>\n );\n};\n"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registers the icons above with Iconify; the components of this entry call it when they render
|
|
3
|
+
* (calling it again is harmless).
|
|
4
|
+
*/
|
|
5
|
+
export declare const registerInputIcons: () => void, INPUT_ICON_NAMES: string[];
|
|
6
|
+
//# sourceMappingURL=inputs-icons.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inputs-icons.d.cts","sourceRoot":"","sources":["../../src/inputs/inputs-icons.ts"],"names":[],"mappings":"AA4BA;;;GAGG;AACH,eAAO,MAAkB,kBAAkB,cAAS,gBAAgB,UACrC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registers the icons above with Iconify; the components of this entry call it when they render
|
|
3
|
+
* (calling it again is harmless).
|
|
4
|
+
*/
|
|
5
|
+
export declare const registerInputIcons: () => void, INPUT_ICON_NAMES: string[];
|
|
6
|
+
//# sourceMappingURL=inputs-icons.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inputs-icons.d.ts","sourceRoot":"","sources":["../../src/inputs/inputs-icons.ts"],"names":[],"mappings":"AA4BA;;;GAGG;AACH,eAAO,MAAkB,kBAAkB,cAAS,gBAAgB,UACrC,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { IconProps } from '@iconify/react';
|
|
2
|
+
import type { ChangeEvent, FocusEvent, InputHTMLAttributes, MouseEvent, ReactElement, RefCallback } from 'react';
|
|
3
|
+
import type { IClassName, IContainerClassName } from '../types/component.js';
|
|
4
|
+
/** An icon that only decorates the field. */
|
|
5
|
+
export interface IInputDecorationIcon extends Omit<IconProps, 'onClick'> {
|
|
6
|
+
onClick?: undefined;
|
|
7
|
+
/** Only an icon that does something has a label: it names its button. */
|
|
8
|
+
label?: never;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* An icon that does something when it is pressed (shows the password, clears the search). It is
|
|
12
|
+
* drawn inside a real `<button>`, which has to be named: a screen reader says the name, not the icon.
|
|
13
|
+
*/
|
|
14
|
+
export interface IInputActionIcon extends Omit<IconProps, 'onClick'> {
|
|
15
|
+
onClick: (event: MouseEvent<HTMLButtonElement>) => void;
|
|
16
|
+
/** What the button does, e.g. `"Show password"`. */
|
|
17
|
+
label: string;
|
|
18
|
+
/** The button cannot be pressed. */
|
|
19
|
+
disabled?: boolean;
|
|
20
|
+
}
|
|
21
|
+
/** An icon of Iconify (`{ icon: 'solar:eye-linear' }`) or any element. */
|
|
22
|
+
export type TInputIcon = IInputDecorationIcon | IInputActionIcon | ReactElement;
|
|
23
|
+
export type TInputIcons = Partial<Record<'left' | 'right', TInputIcon>>;
|
|
24
|
+
/**
|
|
25
|
+
* What the `register()` of React Hook Form gives back, as far as a field needs it. It is described
|
|
26
|
+
* here (not imported) so this package does not need React Hook Form: its own type fits.
|
|
27
|
+
*/
|
|
28
|
+
export interface IFieldRegistration<TElement extends HTMLElement = HTMLInputElement> {
|
|
29
|
+
name: string;
|
|
30
|
+
onChange: (event: ChangeEvent<TElement>) => unknown;
|
|
31
|
+
onBlur: (event: FocusEvent<TElement>) => unknown;
|
|
32
|
+
ref: RefCallback<TElement>;
|
|
33
|
+
min?: InputHTMLAttributes<TElement>['min'];
|
|
34
|
+
max?: InputHTMLAttributes<TElement>['max'];
|
|
35
|
+
maxLength?: number;
|
|
36
|
+
minLength?: number;
|
|
37
|
+
pattern?: string;
|
|
38
|
+
required?: boolean;
|
|
39
|
+
disabled?: boolean;
|
|
40
|
+
}
|
|
41
|
+
/** What every field has: a label on its border, a message under it, and a class for each box. */
|
|
42
|
+
export interface IFieldBase extends IClassName, IContainerClassName {
|
|
43
|
+
/** The text on the border of the field. It names the field for assistive technology. */
|
|
44
|
+
label?: string;
|
|
45
|
+
/** The message under the field; the field is marked as invalid while there is one. */
|
|
46
|
+
error?: string;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=types.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.cts","sourceRoot":"","sources":["../../src/inputs/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,mBAAmB,EACnB,UAAU,EACV,YAAY,EACZ,WAAW,EACZ,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE7E,6CAA6C;AAC7C,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC;IACtE,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,yEAAyE;IACzE,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC;IAClE,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IACxD,oDAAoD;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,0EAA0E;AAC1E,MAAM,MAAM,UAAU,GAAG,oBAAoB,GAAG,gBAAgB,GAAG,YAAY,CAAC;AAEhF,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;AAExE;;;GAGG;AACH,MAAM,WAAW,kBAAkB,CAAC,QAAQ,SAAS,WAAW,GAAG,gBAAgB;IACjF,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC,KAAK,OAAO,CAAC;IACpD,MAAM,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,OAAO,CAAC;IACjD,GAAG,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC3B,GAAG,CAAC,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC;IAC3C,GAAG,CAAC,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,iGAAiG;AACjG,MAAM,WAAW,UAAW,SAAQ,UAAU,EAAE,mBAAmB;IACjE,wFAAwF;IACxF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sFAAsF;IACtF,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { IconProps } from '@iconify/react';
|
|
2
|
+
import type { ChangeEvent, FocusEvent, InputHTMLAttributes, MouseEvent, ReactElement, RefCallback } from 'react';
|
|
3
|
+
import type { IClassName, IContainerClassName } from '../types/component.js';
|
|
4
|
+
/** An icon that only decorates the field. */
|
|
5
|
+
export interface IInputDecorationIcon extends Omit<IconProps, 'onClick'> {
|
|
6
|
+
onClick?: undefined;
|
|
7
|
+
/** Only an icon that does something has a label: it names its button. */
|
|
8
|
+
label?: never;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* An icon that does something when it is pressed (shows the password, clears the search). It is
|
|
12
|
+
* drawn inside a real `<button>`, which has to be named: a screen reader says the name, not the icon.
|
|
13
|
+
*/
|
|
14
|
+
export interface IInputActionIcon extends Omit<IconProps, 'onClick'> {
|
|
15
|
+
onClick: (event: MouseEvent<HTMLButtonElement>) => void;
|
|
16
|
+
/** What the button does, e.g. `"Show password"`. */
|
|
17
|
+
label: string;
|
|
18
|
+
/** The button cannot be pressed. */
|
|
19
|
+
disabled?: boolean;
|
|
20
|
+
}
|
|
21
|
+
/** An icon of Iconify (`{ icon: 'solar:eye-linear' }`) or any element. */
|
|
22
|
+
export type TInputIcon = IInputDecorationIcon | IInputActionIcon | ReactElement;
|
|
23
|
+
export type TInputIcons = Partial<Record<'left' | 'right', TInputIcon>>;
|
|
24
|
+
/**
|
|
25
|
+
* What the `register()` of React Hook Form gives back, as far as a field needs it. It is described
|
|
26
|
+
* here (not imported) so this package does not need React Hook Form: its own type fits.
|
|
27
|
+
*/
|
|
28
|
+
export interface IFieldRegistration<TElement extends HTMLElement = HTMLInputElement> {
|
|
29
|
+
name: string;
|
|
30
|
+
onChange: (event: ChangeEvent<TElement>) => unknown;
|
|
31
|
+
onBlur: (event: FocusEvent<TElement>) => unknown;
|
|
32
|
+
ref: RefCallback<TElement>;
|
|
33
|
+
min?: InputHTMLAttributes<TElement>['min'];
|
|
34
|
+
max?: InputHTMLAttributes<TElement>['max'];
|
|
35
|
+
maxLength?: number;
|
|
36
|
+
minLength?: number;
|
|
37
|
+
pattern?: string;
|
|
38
|
+
required?: boolean;
|
|
39
|
+
disabled?: boolean;
|
|
40
|
+
}
|
|
41
|
+
/** What every field has: a label on its border, a message under it, and a class for each box. */
|
|
42
|
+
export interface IFieldBase extends IClassName, IContainerClassName {
|
|
43
|
+
/** The text on the border of the field. It names the field for assistive technology. */
|
|
44
|
+
label?: string;
|
|
45
|
+
/** The message under the field; the field is marked as invalid while there is one. */
|
|
46
|
+
error?: string;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/inputs/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,mBAAmB,EACnB,UAAU,EACV,YAAY,EACZ,WAAW,EACZ,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE7E,6CAA6C;AAC7C,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC;IACtE,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,yEAAyE;IACzE,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC;IAClE,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IACxD,oDAAoD;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,0EAA0E;AAC1E,MAAM,MAAM,UAAU,GAAG,oBAAoB,GAAG,gBAAgB,GAAG,YAAY,CAAC;AAEhF,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;AAExE;;;GAGG;AACH,MAAM,WAAW,kBAAkB,CAAC,QAAQ,SAAS,WAAW,GAAG,gBAAgB;IACjF,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC,KAAK,OAAO,CAAC;IACpD,MAAM,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,OAAO,CAAC;IACjD,GAAG,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC3B,GAAG,CAAC,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC;IAC3C,GAAG,CAAC,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,iGAAiG;AACjG,MAAM,WAAW,UAAW,SAAQ,UAAU,EAAE,mBAAmB;IACjE,wFAAwF;IACxF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sFAAsF;IACtF,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
interface IFieldIdsOptions {
|
|
2
|
+
/** The `id` of the field, when the app gave one. */
|
|
3
|
+
id?: string;
|
|
4
|
+
/** Its `name`: it is the `id` when there is no other. */
|
|
5
|
+
name?: string;
|
|
6
|
+
/** The message under the field. */
|
|
7
|
+
error?: string;
|
|
8
|
+
/** What the field is already described by (an `aria-describedby` of the app). */
|
|
9
|
+
describedBy?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* What a field needs to be understood by assistive technology: an `id` for its label to point at, an
|
|
13
|
+
* id for its message, and the attributes that say it is invalid and that the message describes it.
|
|
14
|
+
* The `id` is the one the app gave, then the `name`, then one made here: a field with no name of its
|
|
15
|
+
* own still gets a label that works.
|
|
16
|
+
*/
|
|
17
|
+
export declare const useFieldIds: ({ id, name, error, describedBy }: IFieldIdsOptions) => {
|
|
18
|
+
id: string;
|
|
19
|
+
errorId: string;
|
|
20
|
+
'aria-invalid': true | undefined;
|
|
21
|
+
'aria-describedby': string | undefined;
|
|
22
|
+
};
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=useFieldIds.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFieldIds.d.cts","sourceRoot":"","sources":["../../src/inputs/useFieldIds.ts"],"names":[],"mappings":"AAEA,UAAU,gBAAgB;IACxB,oDAAoD;IACpD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,yDAAyD;IACzD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GAAI,kCAAkC,gBAAgB;;;;;CAY7E,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
interface IFieldIdsOptions {
|
|
2
|
+
/** The `id` of the field, when the app gave one. */
|
|
3
|
+
id?: string;
|
|
4
|
+
/** Its `name`: it is the `id` when there is no other. */
|
|
5
|
+
name?: string;
|
|
6
|
+
/** The message under the field. */
|
|
7
|
+
error?: string;
|
|
8
|
+
/** What the field is already described by (an `aria-describedby` of the app). */
|
|
9
|
+
describedBy?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* What a field needs to be understood by assistive technology: an `id` for its label to point at, an
|
|
13
|
+
* id for its message, and the attributes that say it is invalid and that the message describes it.
|
|
14
|
+
* The `id` is the one the app gave, then the `name`, then one made here: a field with no name of its
|
|
15
|
+
* own still gets a label that works.
|
|
16
|
+
*/
|
|
17
|
+
export declare const useFieldIds: ({ id, name, error, describedBy }: IFieldIdsOptions) => {
|
|
18
|
+
id: string;
|
|
19
|
+
errorId: string;
|
|
20
|
+
'aria-invalid': true | undefined;
|
|
21
|
+
'aria-describedby': string | undefined;
|
|
22
|
+
};
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=useFieldIds.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFieldIds.d.ts","sourceRoot":"","sources":["../../src/inputs/useFieldIds.ts"],"names":[],"mappings":"AAEA,UAAU,gBAAgB;IACxB,oDAAoD;IACpD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,yDAAyD;IACzD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GAAI,kCAAkC,gBAAgB;;;;;CAY7E,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { IClassName, ITitleDescription } from '../types/component.js';
|
|
2
|
+
type TDescribedStatus = ITitleDescription & IClassName & {
|
|
3
|
+
status: 'error' | 'empty' | 'success';
|
|
4
|
+
/** A line under the message. */
|
|
5
|
+
divider?: boolean;
|
|
6
|
+
};
|
|
7
|
+
interface ILoadingStatus extends IClassName {
|
|
8
|
+
status: 'loading';
|
|
9
|
+
/** The word under the rings. @default 'Loading....' */
|
|
10
|
+
text?: string;
|
|
11
|
+
}
|
|
12
|
+
export type TApiStatus = TDescribedStatus | ILoadingStatus;
|
|
13
|
+
/**
|
|
14
|
+
* What a request that is not finished or not good says, in the middle of the place where its result
|
|
15
|
+
* would be: rings while it loads, and an icon with a title and a description when it failed
|
|
16
|
+
* (`status="error"`, said to a screen reader as an alert), came back empty or worked.
|
|
17
|
+
*/
|
|
18
|
+
export declare const ApiStatus: ({ className, ...props }: TApiStatus) => import("react").JSX.Element;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=ApiStatus.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApiStatus.d.cts","sourceRoot":"","sources":["../../src/layout/ApiStatus.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAK3E,KAAK,gBAAgB,GAAG,iBAAiB,GACvC,UAAU,GAAG;IACX,MAAM,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;IACtC,gCAAgC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEJ,UAAU,cAAe,SAAQ,UAAU;IACzC,MAAM,EAAE,SAAS,CAAC;IAClB,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,UAAU,GAAG,gBAAgB,GAAG,cAAc,CAAC;AAQ3D;;;;GAIG;AACH,eAAO,MAAM,SAAS,GAAI,yBAA8B,UAAU,gCAiCjE,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { IClassName, ITitleDescription } from '../types/component.js';
|
|
2
|
+
type TDescribedStatus = ITitleDescription & IClassName & {
|
|
3
|
+
status: 'error' | 'empty' | 'success';
|
|
4
|
+
/** A line under the message. */
|
|
5
|
+
divider?: boolean;
|
|
6
|
+
};
|
|
7
|
+
interface ILoadingStatus extends IClassName {
|
|
8
|
+
status: 'loading';
|
|
9
|
+
/** The word under the rings. @default 'Loading....' */
|
|
10
|
+
text?: string;
|
|
11
|
+
}
|
|
12
|
+
export type TApiStatus = TDescribedStatus | ILoadingStatus;
|
|
13
|
+
/**
|
|
14
|
+
* What a request that is not finished or not good says, in the middle of the place where its result
|
|
15
|
+
* would be: rings while it loads, and an icon with a title and a description when it failed
|
|
16
|
+
* (`status="error"`, said to a screen reader as an alert), came back empty or worked.
|
|
17
|
+
*/
|
|
18
|
+
export declare const ApiStatus: ({ className, ...props }: TApiStatus) => import("react").JSX.Element;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=ApiStatus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApiStatus.d.ts","sourceRoot":"","sources":["../../src/layout/ApiStatus.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAK3E,KAAK,gBAAgB,GAAG,iBAAiB,GACvC,UAAU,GAAG;IACX,MAAM,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;IACtC,gCAAgC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEJ,UAAU,cAAe,SAAQ,UAAU;IACzC,MAAM,EAAE,SAAS,CAAC;IAClB,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,UAAU,GAAG,gBAAgB,GAAG,cAAc,CAAC;AAQ3D;;;;GAIG;AACH,eAAO,MAAM,SAAS,GAAI,yBAA8B,UAAU,gCAiCjE,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ComponentProps } from 'react';
|
|
2
|
+
import type { IContainerClassName } from '../types/component.js';
|
|
3
|
+
export interface IBorderGradient extends ComponentProps<'div'>, IContainerClassName {
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* A card with a border that is a gradient: the outer box is the 1px border, the inner one is the
|
|
7
|
+
* card. Any attribute of a `<div>` goes to the card (`className` too); `containerClassName` is for
|
|
8
|
+
* the border box.
|
|
9
|
+
*/
|
|
10
|
+
export declare const BorderGradient: ({ children, className, containerClassName, ...divProps }: IBorderGradient) => import("react").JSX.Element;
|
|
11
|
+
//# sourceMappingURL=BorderGradient.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BorderGradient.d.cts","sourceRoot":"","sources":["../../src/layout/BorderGradient.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAE5C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,MAAM,WAAW,eAAgB,SAAQ,cAAc,CAAC,KAAK,CAAC,EAAE,mBAAmB;CAAG;AAEtF;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,0DAK5B,eAAe,gCASjB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ComponentProps } from 'react';
|
|
2
|
+
import type { IContainerClassName } from '../types/component.js';
|
|
3
|
+
export interface IBorderGradient extends ComponentProps<'div'>, IContainerClassName {
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* A card with a border that is a gradient: the outer box is the 1px border, the inner one is the
|
|
7
|
+
* card. Any attribute of a `<div>` goes to the card (`className` too); `containerClassName` is for
|
|
8
|
+
* the border box.
|
|
9
|
+
*/
|
|
10
|
+
export declare const BorderGradient: ({ children, className, containerClassName, ...divProps }: IBorderGradient) => import("react").JSX.Element;
|
|
11
|
+
//# sourceMappingURL=BorderGradient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BorderGradient.d.ts","sourceRoot":"","sources":["../../src/layout/BorderGradient.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAE5C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,MAAM,WAAW,eAAgB,SAAQ,cAAc,CAAC,KAAK,CAAC,EAAE,mBAAmB;CAAG;AAEtF;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,0DAK5B,eAAe,gCASjB,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import type { ITextButton } from '../types/component.js';
|
|
3
|
+
import { type IModalWrapper } from './ModalWrapper.js';
|
|
4
|
+
type TConfirmButton = Omit<ITextButton, 'pattern'>;
|
|
5
|
+
interface IConfirmButtons {
|
|
6
|
+
/** The button on the left: it closes the dialog after its `onClick`. Usually the way out ("Cancel"). */
|
|
7
|
+
left?: TConfirmButton;
|
|
8
|
+
/**
|
|
9
|
+
* The button on the right, the main one. With an `onClick` the dialog stays open (the app closes it
|
|
10
|
+
* when what was asked is done); without one it closes the dialog.
|
|
11
|
+
*/
|
|
12
|
+
right?: TConfirmButton;
|
|
13
|
+
}
|
|
14
|
+
interface ICustomConfirmModal {
|
|
15
|
+
/** Your own content, in the dialog. Give the dialog a name in `modalProps.label`. */
|
|
16
|
+
type: 'custom';
|
|
17
|
+
children: ReactNode;
|
|
18
|
+
title?: never;
|
|
19
|
+
description?: never;
|
|
20
|
+
buttons?: IConfirmButtons;
|
|
21
|
+
}
|
|
22
|
+
interface IDefaultConfirmModal {
|
|
23
|
+
type: 'success' | 'error' | 'warning' | 'default';
|
|
24
|
+
children?: never;
|
|
25
|
+
title: string;
|
|
26
|
+
description?: string;
|
|
27
|
+
buttons: IConfirmButtons;
|
|
28
|
+
}
|
|
29
|
+
export type TConfirmModal = (ICustomConfirmModal | IDefaultConfirmModal) & {
|
|
30
|
+
/** `isOpen` and `onClose` are the app's; the rest is passed to the dialog (`className`, `label`, ...). */
|
|
31
|
+
modalProps: Omit<IModalWrapper, 'children' | 'closeOnOutsideClick' | 'role'>;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* A dialog that asks for a decision ("Delete this category?") or tells how something went: an
|
|
35
|
+
* icon and colour for the kind of message (`success`, `error`, `warning`, `default`), a title, a
|
|
36
|
+
* description and up to two buttons. `type="custom"` shows content of your own instead.
|
|
37
|
+
*
|
|
38
|
+
* It is an `alertdialog`, named by the title and described by the description, and the focus starts on
|
|
39
|
+
* the first button (the way out). A press on the backdrop does not close it: a decision should not be
|
|
40
|
+
* made by a stray click. Escape and the close button of `modalProps.header` do.
|
|
41
|
+
*/
|
|
42
|
+
export declare const ConfirmModal: ({ type, buttons, children, description, modalProps, title, }: TConfirmModal) => import("react").JSX.Element;
|
|
43
|
+
export {};
|
|
44
|
+
//# sourceMappingURL=ConfirmModal.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfirmModal.d.cts","sourceRoot":"","sources":["../../src/layout/ConfirmModal.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,SAAS,EAAS,MAAM,OAAO,CAAC;AAE9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGzD,OAAO,EAAE,KAAK,aAAa,EAAgB,MAAM,mBAAmB,CAAC;AAErE,KAAK,cAAc,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;AAEnD,UAAU,eAAe;IACvB,wGAAwG;IACxG,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB;;;OAGG;IACH,KAAK,CAAC,EAAE,cAAc,CAAC;CACxB;AAED,UAAU,mBAAmB;IAC3B,qFAAqF;IACrF,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,WAAW,CAAC,EAAE,KAAK,CAAC;IACpB,OAAO,CAAC,EAAE,eAAe,CAAC;CAC3B;AAED,UAAU,oBAAoB;IAC5B,IAAI,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;IAClD,QAAQ,CAAC,EAAE,KAAK,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,eAAe,CAAC;CAC1B;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,mBAAmB,GAAG,oBAAoB,CAAC,GAAG;IACzE,0GAA0G;IAC1G,UAAU,EAAE,IAAI,CAAC,aAAa,EAAE,UAAU,GAAG,qBAAqB,GAAG,MAAM,CAAC,CAAC;CAC9E,CAAC;AASF;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY,GAAI,8DAO1B,aAAa,gCA6Ff,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import type { ITextButton } from '../types/component.js';
|
|
3
|
+
import { type IModalWrapper } from './ModalWrapper.js';
|
|
4
|
+
type TConfirmButton = Omit<ITextButton, 'pattern'>;
|
|
5
|
+
interface IConfirmButtons {
|
|
6
|
+
/** The button on the left: it closes the dialog after its `onClick`. Usually the way out ("Cancel"). */
|
|
7
|
+
left?: TConfirmButton;
|
|
8
|
+
/**
|
|
9
|
+
* The button on the right, the main one. With an `onClick` the dialog stays open (the app closes it
|
|
10
|
+
* when what was asked is done); without one it closes the dialog.
|
|
11
|
+
*/
|
|
12
|
+
right?: TConfirmButton;
|
|
13
|
+
}
|
|
14
|
+
interface ICustomConfirmModal {
|
|
15
|
+
/** Your own content, in the dialog. Give the dialog a name in `modalProps.label`. */
|
|
16
|
+
type: 'custom';
|
|
17
|
+
children: ReactNode;
|
|
18
|
+
title?: never;
|
|
19
|
+
description?: never;
|
|
20
|
+
buttons?: IConfirmButtons;
|
|
21
|
+
}
|
|
22
|
+
interface IDefaultConfirmModal {
|
|
23
|
+
type: 'success' | 'error' | 'warning' | 'default';
|
|
24
|
+
children?: never;
|
|
25
|
+
title: string;
|
|
26
|
+
description?: string;
|
|
27
|
+
buttons: IConfirmButtons;
|
|
28
|
+
}
|
|
29
|
+
export type TConfirmModal = (ICustomConfirmModal | IDefaultConfirmModal) & {
|
|
30
|
+
/** `isOpen` and `onClose` are the app's; the rest is passed to the dialog (`className`, `label`, ...). */
|
|
31
|
+
modalProps: Omit<IModalWrapper, 'children' | 'closeOnOutsideClick' | 'role'>;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* A dialog that asks for a decision ("Delete this category?") or tells how something went: an
|
|
35
|
+
* icon and colour for the kind of message (`success`, `error`, `warning`, `default`), a title, a
|
|
36
|
+
* description and up to two buttons. `type="custom"` shows content of your own instead.
|
|
37
|
+
*
|
|
38
|
+
* It is an `alertdialog`, named by the title and described by the description, and the focus starts on
|
|
39
|
+
* the first button (the way out). A press on the backdrop does not close it: a decision should not be
|
|
40
|
+
* made by a stray click. Escape and the close button of `modalProps.header` do.
|
|
41
|
+
*/
|
|
42
|
+
export declare const ConfirmModal: ({ type, buttons, children, description, modalProps, title, }: TConfirmModal) => import("react").JSX.Element;
|
|
43
|
+
export {};
|
|
44
|
+
//# sourceMappingURL=ConfirmModal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfirmModal.d.ts","sourceRoot":"","sources":["../../src/layout/ConfirmModal.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,SAAS,EAAS,MAAM,OAAO,CAAC;AAE9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGzD,OAAO,EAAE,KAAK,aAAa,EAAgB,MAAM,mBAAmB,CAAC;AAErE,KAAK,cAAc,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;AAEnD,UAAU,eAAe;IACvB,wGAAwG;IACxG,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB;;;OAGG;IACH,KAAK,CAAC,EAAE,cAAc,CAAC;CACxB;AAED,UAAU,mBAAmB;IAC3B,qFAAqF;IACrF,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,WAAW,CAAC,EAAE,KAAK,CAAC;IACpB,OAAO,CAAC,EAAE,eAAe,CAAC;CAC3B;AAED,UAAU,oBAAoB;IAC5B,IAAI,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;IAClD,QAAQ,CAAC,EAAE,KAAK,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,eAAe,CAAC;CAC1B;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,mBAAmB,GAAG,oBAAoB,CAAC,GAAG;IACzE,0GAA0G;IAC1G,UAAU,EAAE,IAAI,CAAC,aAAa,EAAE,UAAU,GAAG,qBAAqB,GAAG,MAAM,CAAC,CAAC;CAC9E,CAAC;AASF;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY,GAAI,8DAO1B,aAAa,gCA6Ff,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import { type TInputIcons } from '../inputs/index.js';
|
|
3
|
+
import type { IClassName } from '../types/component.js';
|
|
4
|
+
export interface IDropdownApi {
|
|
5
|
+
/** Closes the dropdown, e.g. when something in it was chosen. */
|
|
6
|
+
close: () => void;
|
|
7
|
+
}
|
|
8
|
+
export interface IDropdown extends IClassName {
|
|
9
|
+
/** What the button says: text, or an element. */
|
|
10
|
+
title: ReactNode;
|
|
11
|
+
/** An icon on each side of the title. One with an `onClick` is a button and needs a `label`. */
|
|
12
|
+
icons?: TInputIcons;
|
|
13
|
+
/** What is in the dropdown, or a function that gets `{ close }` to close it. */
|
|
14
|
+
children: ReactNode | ((api: IDropdownApi) => ReactNode);
|
|
15
|
+
/** Open when it is first shown. @default false */
|
|
16
|
+
defaultOpen?: boolean;
|
|
17
|
+
/** A press outside closes it. @default false */
|
|
18
|
+
closeOnOutsideClick?: boolean;
|
|
19
|
+
/** Escape closes it (unless a popup over it takes the Escape first). @default false */
|
|
20
|
+
closeOnEscape?: boolean;
|
|
21
|
+
/** The content floats over the page under the button instead of pushing it down. @default false */
|
|
22
|
+
isAbsolute?: boolean;
|
|
23
|
+
showShadow?: boolean;
|
|
24
|
+
isRounded?: boolean;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* A button that opens and closes a panel under it (a disclosure): `aria-expanded` says which it is, the
|
|
28
|
+
* panel opens and closes with a slide, and a closed panel is out of reach of the keyboard and of
|
|
29
|
+
* assistive technology (`inert`), not only out of sight. The slide stops for a person who asked for
|
|
30
|
+
* less motion.
|
|
31
|
+
*/
|
|
32
|
+
export declare const Dropdown: ({ title, icons, children, className, defaultOpen, closeOnOutsideClick, closeOnEscape, isAbsolute, showShadow, isRounded, }: IDropdown) => import("react").JSX.Element;
|
|
33
|
+
//# sourceMappingURL=Dropdown.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dropdown.d.cts","sourceRoot":"","sources":["../../src/layout/Dropdown.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,SAAS,EAAmB,MAAM,OAAO,CAAC;AAGxD,OAAO,EAAa,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGxD,MAAM,WAAW,YAAY;IAC3B,iEAAiE;IACjE,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,SAAU,SAAQ,UAAU;IAC3C,iDAAiD;IACjD,KAAK,EAAE,SAAS,CAAC;IACjB,gGAAgG;IAChG,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,gFAAgF;IAChF,QAAQ,EAAE,SAAS,GAAG,CAAC,CAAC,GAAG,EAAE,YAAY,KAAK,SAAS,CAAC,CAAC;IACzD,kDAAkD;IAClD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gDAAgD;IAChD,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,uFAAuF;IACvF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,mGAAmG;IACnG,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GAAI,4HAWtB,SAAS,gCA6DX,CAAC"}
|