@arolariu/components 1.0.0 → 2.0.0
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/CHANGELOG.md +89 -0
- package/EXAMPLES.md +2510 -0
- package/dist/components/ui/accordion.js +3 -3
- package/dist/components/ui/accordion.js.map +1 -1
- package/dist/components/ui/accordion_module.css.map +1 -1
- package/dist/components/ui/alert-dialog.d.ts +4 -16
- package/dist/components/ui/alert-dialog.d.ts.map +1 -1
- package/dist/components/ui/alert-dialog.js +21 -17
- package/dist/components/ui/alert-dialog.js.map +1 -1
- package/dist/components/ui/alert-dialog_module.css +1 -1
- package/dist/components/ui/alert-dialog_module.css.map +1 -1
- package/dist/components/ui/alert.js +4 -4
- package/dist/components/ui/alert.js.map +1 -1
- package/dist/components/ui/alert_module.css.map +1 -1
- package/dist/components/ui/aspect-ratio.js +2 -2
- package/dist/components/ui/aspect-ratio.js.map +1 -1
- package/dist/components/ui/aspect-ratio_module.css.map +1 -1
- package/dist/components/ui/async-boundary.js +2 -2
- package/dist/components/ui/async-boundary.js.map +1 -1
- package/dist/components/ui/avatar.d.ts +3 -12
- package/dist/components/ui/avatar.d.ts.map +1 -1
- package/dist/components/ui/avatar.js +18 -15
- package/dist/components/ui/avatar.js.map +1 -1
- package/dist/components/ui/avatar_module.css.map +1 -1
- package/dist/components/ui/background-beams.js +3 -3
- package/dist/components/ui/background-beams.js.map +1 -1
- package/dist/components/ui/background-beams_module.css.map +1 -1
- package/dist/components/ui/badge.js +2 -2
- package/dist/components/ui/badge.js.map +1 -1
- package/dist/components/ui/badge_module.css.map +1 -1
- package/dist/components/ui/breadcrumb.js +10 -10
- package/dist/components/ui/breadcrumb.js.map +1 -1
- package/dist/components/ui/breadcrumb_module.css.map +1 -1
- package/dist/components/ui/bubble-background.js +5 -5
- package/dist/components/ui/bubble-background.js.map +1 -1
- package/dist/components/ui/bubble-background_module.css.map +1 -1
- package/dist/components/ui/button-group.d.ts +1 -1
- package/dist/components/ui/button-group.d.ts.map +1 -1
- package/dist/components/ui/button-group.js +6 -6
- package/dist/components/ui/button-group.js.map +1 -1
- package/dist/components/ui/button-group_module.css.map +1 -1
- package/dist/components/ui/button.js +4 -4
- package/dist/components/ui/button.js.map +1 -1
- package/dist/components/ui/button_module.css.map +1 -1
- package/dist/components/ui/calendar.d.ts +3 -5
- package/dist/components/ui/calendar.d.ts.map +1 -1
- package/dist/components/ui/calendar.js +9 -9
- package/dist/components/ui/calendar.js.map +1 -1
- package/dist/components/ui/calendar_module.css.map +1 -1
- package/dist/components/ui/card-skeleton.js +2 -2
- package/dist/components/ui/card-skeleton.js.map +1 -1
- package/dist/components/ui/card-skeleton_module.css.map +1 -1
- package/dist/components/ui/card.js +8 -8
- package/dist/components/ui/card.js.map +1 -1
- package/dist/components/ui/card_module.css.map +1 -1
- package/dist/components/ui/carousel.d.ts.map +1 -1
- package/dist/components/ui/carousel.js +16 -16
- package/dist/components/ui/carousel.js.map +1 -1
- package/dist/components/ui/carousel_module.css +1 -1
- package/dist/components/ui/carousel_module.css.map +1 -1
- package/dist/components/ui/chart.d.ts +6 -3
- package/dist/components/ui/chart.d.ts.map +1 -1
- package/dist/components/ui/chart.js +70 -70
- package/dist/components/ui/chart.js.map +1 -1
- package/dist/components/ui/chart_module.css.map +1 -1
- package/dist/components/ui/checkbox-group.d.ts +2 -6
- package/dist/components/ui/checkbox-group.d.ts.map +1 -1
- package/dist/components/ui/checkbox-group.js +8 -7
- package/dist/components/ui/checkbox-group.js.map +1 -1
- package/dist/components/ui/checkbox-group_module.css.map +1 -1
- package/dist/components/ui/checkbox.d.ts +3 -1
- package/dist/components/ui/checkbox.d.ts.map +1 -1
- package/dist/components/ui/checkbox.js +6 -3
- package/dist/components/ui/checkbox.js.map +1 -1
- package/dist/components/ui/checkbox_module.css.map +1 -1
- package/dist/components/ui/collapsible.d.ts.map +1 -1
- package/dist/components/ui/collapsible.js +4 -4
- package/dist/components/ui/collapsible.js.map +1 -1
- package/dist/components/ui/collapsible_module.css.map +1 -1
- package/dist/components/ui/combobox.d.ts +335 -0
- package/dist/components/ui/combobox.d.ts.map +1 -0
- package/dist/components/ui/combobox.js +206 -0
- package/dist/components/ui/combobox.js.map +1 -0
- package/dist/components/ui/combobox.module.js +23 -0
- package/dist/components/ui/combobox.module.js.map +1 -0
- package/dist/components/ui/combobox_module.css +142 -0
- package/dist/components/ui/combobox_module.css.map +1 -0
- package/dist/components/ui/command.d.ts.map +1 -1
- package/dist/components/ui/command.js +62 -53
- package/dist/components/ui/command.js.map +1 -1
- package/dist/components/ui/command_module.css +1 -1
- package/dist/components/ui/command_module.css.map +1 -1
- package/dist/components/ui/context-menu.d.ts.map +1 -1
- package/dist/components/ui/context-menu.js +6 -6
- package/dist/components/ui/context-menu.js.map +1 -1
- package/dist/components/ui/context-menu_module.css.map +1 -1
- package/dist/components/ui/copy-button.js +6 -6
- package/dist/components/ui/copy-button.js.map +1 -1
- package/dist/components/ui/copy-button_module.css.map +1 -1
- package/dist/components/ui/counting-number.js +6 -6
- package/dist/components/ui/counting-number.js.map +1 -1
- package/dist/components/ui/counting-number_module.css.map +1 -1
- package/dist/components/ui/dialog.js +6 -6
- package/dist/components/ui/dialog.js.map +1 -1
- package/dist/components/ui/dialog_module.css +1 -1
- package/dist/components/ui/dialog_module.css.map +1 -1
- package/dist/components/ui/dot-background_module.css.map +1 -1
- package/dist/components/ui/drawer.d.ts.map +1 -1
- package/dist/components/ui/drawer.js +5 -5
- package/dist/components/ui/drawer.js.map +1 -1
- package/dist/components/ui/drawer_module.css.map +1 -1
- package/dist/components/ui/dropdown-menu.d.ts.map +1 -1
- package/dist/components/ui/dropdown-menu.js +6 -6
- package/dist/components/ui/dropdown-menu.js.map +1 -1
- package/dist/components/ui/dropdown-menu_module.css.map +1 -1
- package/dist/components/ui/dropdrawer.d.ts +10 -16
- package/dist/components/ui/dropdrawer.d.ts.map +1 -1
- package/dist/components/ui/dropdrawer.js +73 -65
- package/dist/components/ui/dropdrawer.js.map +1 -1
- package/dist/components/ui/dropdrawer_module.css.map +1 -1
- package/dist/components/ui/empty.js +7 -7
- package/dist/components/ui/empty.js.map +1 -1
- package/dist/components/ui/empty_module.css.map +1 -1
- package/dist/components/ui/error-boundary.js +2 -2
- package/dist/components/ui/error-boundary.js.map +1 -1
- package/dist/components/ui/error-boundary_module.css.map +1 -1
- package/dist/components/ui/field.js +12 -12
- package/dist/components/ui/field.js.map +1 -1
- package/dist/components/ui/field_module.css.map +1 -1
- package/dist/components/ui/fireworks-background.js +6 -6
- package/dist/components/ui/fireworks-background.js.map +1 -1
- package/dist/components/ui/fireworks-background_module.css.map +1 -1
- package/dist/components/ui/flip-button.js +5 -5
- package/dist/components/ui/flip-button.js.map +1 -1
- package/dist/components/ui/flip-button_module.css.map +1 -1
- package/dist/components/ui/focus-scope.js +6 -6
- package/dist/components/ui/focus-scope.js.map +1 -1
- package/dist/components/ui/focus-scope_module.css.map +1 -1
- package/dist/components/ui/form-skeleton.js +2 -2
- package/dist/components/ui/form-skeleton.js.map +1 -1
- package/dist/components/ui/form-skeleton_module.css.map +1 -1
- package/dist/components/ui/form.d.ts +3 -3
- package/dist/components/ui/form.d.ts.map +1 -1
- package/dist/components/ui/form.js +13 -13
- package/dist/components/ui/form.js.map +1 -1
- package/dist/components/ui/form_module.css.map +1 -1
- package/dist/components/ui/gradient-background.js +2 -2
- package/dist/components/ui/gradient-background.js.map +1 -1
- package/dist/components/ui/gradient-background_module.css.map +1 -1
- package/dist/components/ui/gradient-text.js +2 -2
- package/dist/components/ui/gradient-text.js.map +1 -1
- package/dist/components/ui/gradient-text_module.css.map +1 -1
- package/dist/components/ui/highlight-text.js +4 -4
- package/dist/components/ui/highlight-text.js.map +1 -1
- package/dist/components/ui/highlight-text_module.css.map +1 -1
- package/dist/components/ui/hole-background.js +21 -21
- package/dist/components/ui/hole-background.js.map +1 -1
- package/dist/components/ui/hole-background_module.css.map +1 -1
- package/dist/components/ui/hover-card.js +3 -3
- package/dist/components/ui/hover-card.js.map +1 -1
- package/dist/components/ui/hover-card_module.css.map +1 -1
- package/dist/components/ui/input-group.js +7 -7
- package/dist/components/ui/input-group.js.map +1 -1
- package/dist/components/ui/input-group_module.css.map +1 -1
- package/dist/components/ui/input-otp.d.ts +3 -3
- package/dist/components/ui/input-otp.d.ts.map +1 -1
- package/dist/components/ui/input-otp.js +6 -6
- package/dist/components/ui/input-otp.js.map +1 -1
- package/dist/components/ui/input-otp_module.css.map +1 -1
- package/dist/components/ui/input.js +2 -2
- package/dist/components/ui/input.js.map +1 -1
- package/dist/components/ui/input_module.css.map +1 -1
- package/dist/components/ui/item.d.ts +1 -1
- package/dist/components/ui/item.d.ts.map +1 -1
- package/dist/components/ui/item.js +13 -13
- package/dist/components/ui/item.js.map +1 -1
- package/dist/components/ui/item_module.css.map +1 -1
- package/dist/components/ui/kbd.js +3 -3
- package/dist/components/ui/kbd.js.map +1 -1
- package/dist/components/ui/kbd_module.css.map +1 -1
- package/dist/components/ui/label.js +2 -2
- package/dist/components/ui/label.js.map +1 -1
- package/dist/components/ui/label_module.css.map +1 -1
- package/dist/components/ui/list-skeleton.js +2 -2
- package/dist/components/ui/list-skeleton.js.map +1 -1
- package/dist/components/ui/list-skeleton_module.css.map +1 -1
- package/dist/components/ui/loading-overlay.js +2 -2
- package/dist/components/ui/loading-overlay.js.map +1 -1
- package/dist/components/ui/loading-overlay_module.css.map +1 -1
- package/dist/components/ui/menubar.d.ts +11 -13
- package/dist/components/ui/menubar.d.ts.map +1 -1
- package/dist/components/ui/menubar.js +4 -4
- package/dist/components/ui/menubar.js.map +1 -1
- package/dist/components/ui/menubar_module.css.map +1 -1
- package/dist/components/ui/meter.d.ts +8 -24
- package/dist/components/ui/meter.d.ts.map +1 -1
- package/dist/components/ui/meter.js +23 -19
- package/dist/components/ui/meter.js.map +1 -1
- package/dist/components/ui/meter_module.css.map +1 -1
- package/dist/components/ui/navigation-menu.d.ts +3 -12
- package/dist/components/ui/navigation-menu.d.ts.map +1 -1
- package/dist/components/ui/navigation-menu.js +15 -12
- package/dist/components/ui/navigation-menu.js.map +1 -1
- package/dist/components/ui/navigation-menu_module.css +1 -1
- package/dist/components/ui/navigation-menu_module.css.map +1 -1
- package/dist/components/ui/number-field.d.ts +6 -12
- package/dist/components/ui/number-field.d.ts.map +1 -1
- package/dist/components/ui/number-field.js +3 -3
- package/dist/components/ui/number-field.js.map +1 -1
- package/dist/components/ui/number-field_module.css.map +1 -1
- package/dist/components/ui/pagination.js +8 -8
- package/dist/components/ui/pagination.js.map +1 -1
- package/dist/components/ui/pagination_module.css.map +1 -1
- package/dist/components/ui/popover.js +5 -5
- package/dist/components/ui/popover.js.map +1 -1
- package/dist/components/ui/popover_module.css.map +1 -1
- package/dist/components/ui/progress.d.ts +1 -4
- package/dist/components/ui/progress.d.ts.map +1 -1
- package/dist/components/ui/progress.js +10 -9
- package/dist/components/ui/progress.js.map +1 -1
- package/dist/components/ui/progress_module.css.map +1 -1
- package/dist/components/ui/radio-group.d.ts +2 -4
- package/dist/components/ui/radio-group.d.ts.map +1 -1
- package/dist/components/ui/radio-group.js +3 -3
- package/dist/components/ui/radio-group.js.map +1 -1
- package/dist/components/ui/radio-group_module.css.map +1 -1
- package/dist/components/ui/resizable.d.ts +13 -29
- package/dist/components/ui/resizable.d.ts.map +1 -1
- package/dist/components/ui/resizable.js +8 -7
- package/dist/components/ui/resizable.js.map +1 -1
- package/dist/components/ui/resizable_module.css.map +1 -1
- package/dist/components/ui/ripple-button.js +9 -9
- package/dist/components/ui/ripple-button.js.map +1 -1
- package/dist/components/ui/ripple-button_module.css.map +1 -1
- package/dist/components/ui/scratcher.d.ts +1 -1
- package/dist/components/ui/scratcher.d.ts.map +1 -1
- package/dist/components/ui/scratcher.js +5 -4
- package/dist/components/ui/scratcher.js.map +1 -1
- package/dist/components/ui/scratcher_module.css.map +1 -1
- package/dist/components/ui/scroll-area.d.ts +2 -4
- package/dist/components/ui/scroll-area.d.ts.map +1 -1
- package/dist/components/ui/scroll-area.js +2 -2
- package/dist/components/ui/scroll-area.js.map +1 -1
- package/dist/components/ui/scroll-area_module.css.map +1 -1
- package/dist/components/ui/select.js +4 -4
- package/dist/components/ui/select.js.map +1 -1
- package/dist/components/ui/select_module.css.map +1 -1
- package/dist/components/ui/separator.d.ts +1 -4
- package/dist/components/ui/separator.d.ts.map +1 -1
- package/dist/components/ui/separator.js +9 -8
- package/dist/components/ui/separator.js.map +1 -1
- package/dist/components/ui/separator_module.css.map +1 -1
- package/dist/components/ui/sheet.d.ts.map +1 -1
- package/dist/components/ui/sheet.js +6 -6
- package/dist/components/ui/sheet.js.map +1 -1
- package/dist/components/ui/sheet_module.css.map +1 -1
- package/dist/components/ui/sidebar.d.ts +1 -1
- package/dist/components/ui/sidebar.d.ts.map +1 -1
- package/dist/components/ui/sidebar.js +36 -36
- package/dist/components/ui/sidebar.js.map +1 -1
- package/dist/components/ui/sidebar_module.css.map +1 -1
- package/dist/components/ui/skeleton.js +2 -2
- package/dist/components/ui/skeleton.js.map +1 -1
- package/dist/components/ui/skeleton_module.css.map +1 -1
- package/dist/components/ui/slider.js +2 -2
- package/dist/components/ui/slider.js.map +1 -1
- package/dist/components/ui/slider_module.css.map +1 -1
- package/dist/components/ui/spinner.js +2 -2
- package/dist/components/ui/spinner.js.map +1 -1
- package/dist/components/ui/spinner_module.css.map +1 -1
- package/dist/components/ui/stepper.js +2 -2
- package/dist/components/ui/stepper.js.map +1 -1
- package/dist/components/ui/stepper_module.css.map +1 -1
- package/dist/components/ui/switch.js +2 -2
- package/dist/components/ui/switch.js.map +1 -1
- package/dist/components/ui/switch_module.css.map +1 -1
- package/dist/components/ui/table-skeleton.js +2 -2
- package/dist/components/ui/table-skeleton.js.map +1 -1
- package/dist/components/ui/table-skeleton_module.css.map +1 -1
- package/dist/components/ui/table.js +9 -9
- package/dist/components/ui/table.js.map +1 -1
- package/dist/components/ui/table_module.css.map +1 -1
- package/dist/components/ui/tabs.js +3 -3
- package/dist/components/ui/tabs.js.map +1 -1
- package/dist/components/ui/tabs_module.css.map +1 -1
- package/dist/components/ui/textarea.js +2 -2
- package/dist/components/ui/textarea.js.map +1 -1
- package/dist/components/ui/textarea_module.css.map +1 -1
- package/dist/components/ui/timeline.js +5 -5
- package/dist/components/ui/timeline.js.map +1 -1
- package/dist/components/ui/timeline_module.css.map +1 -1
- package/dist/components/ui/{sonner.d.ts → toast.d.ts} +15 -6
- package/dist/components/ui/toast.d.ts.map +1 -0
- package/dist/components/ui/{sonner.js → toast.js} +43 -42
- package/dist/components/ui/toast.js.map +1 -0
- package/dist/components/ui/toast.module.js +34 -0
- package/dist/components/ui/toast.module.js.map +1 -0
- package/dist/components/ui/{sonner_module.css → toast_module.css} +35 -35
- package/dist/components/ui/toast_module.css.map +1 -0
- package/dist/components/ui/toggle-group.d.ts +2 -8
- package/dist/components/ui/toggle-group.d.ts.map +1 -1
- package/dist/components/ui/toggle-group.js +14 -12
- package/dist/components/ui/toggle-group.js.map +1 -1
- package/dist/components/ui/toggle-group_module.css.map +1 -1
- package/dist/components/ui/toggle.js +2 -2
- package/dist/components/ui/toggle.js.map +1 -1
- package/dist/components/ui/toggle_module.css.map +1 -1
- package/dist/components/ui/toolbar.d.ts +10 -30
- package/dist/components/ui/toolbar.d.ts.map +1 -1
- package/dist/components/ui/toolbar.js +28 -23
- package/dist/components/ui/toolbar.js.map +1 -1
- package/dist/components/ui/toolbar_module.css.map +1 -1
- package/dist/components/ui/tooltip.js +4 -4
- package/dist/components/ui/tooltip.js.map +1 -1
- package/dist/components/ui/tooltip_module.css.map +1 -1
- package/dist/components/ui/typewriter.js +4 -4
- package/dist/components/ui/typewriter.js.map +1 -1
- package/dist/components/ui/typewriter_module.css.map +1 -1
- package/dist/components/ui/visually-hidden.js +2 -2
- package/dist/components/ui/visually-hidden.js.map +1 -1
- package/dist/components/ui/visually-hidden_module.css.map +1 -1
- package/dist/hooks/useAnnounce.js +5 -5
- package/dist/hooks/useAnnounce.js.map +1 -1
- package/dist/hooks/useClipboard.d.ts +77 -0
- package/dist/hooks/useClipboard.d.ts.map +1 -0
- package/dist/hooks/useClipboard.js +42 -0
- package/dist/hooks/useClipboard.js.map +1 -0
- package/dist/hooks/useControllableState.d.ts +54 -0
- package/dist/hooks/useControllableState.d.ts.map +1 -0
- package/dist/hooks/useControllableState.js +29 -0
- package/dist/hooks/useControllableState.js.map +1 -0
- package/dist/hooks/useDebounce.d.ts +33 -0
- package/dist/hooks/useDebounce.d.ts.map +1 -0
- package/dist/hooks/useDebounce.js +20 -0
- package/dist/hooks/useDebounce.js.map +1 -0
- package/dist/hooks/useEventCallback.d.ts +34 -0
- package/dist/hooks/useEventCallback.d.ts.map +1 -0
- package/dist/hooks/useEventCallback.js +12 -0
- package/dist/hooks/useEventCallback.js.map +1 -0
- package/dist/hooks/useFocusManager.js +6 -6
- package/dist/hooks/useFocusManager.js.map +1 -1
- package/dist/hooks/useFocusVisible.js +5 -5
- package/dist/hooks/useFocusVisible.js.map +1 -1
- package/dist/hooks/useId.d.ts +30 -0
- package/dist/hooks/useId.d.ts.map +1 -0
- package/dist/hooks/useId.js +9 -0
- package/dist/hooks/useId.js.map +1 -0
- package/dist/hooks/useIntersectionObserver.d.ts +51 -0
- package/dist/hooks/useIntersectionObserver.d.ts.map +1 -0
- package/dist/hooks/useIntersectionObserver.js +25 -0
- package/dist/hooks/useIntersectionObserver.js.map +1 -0
- package/dist/hooks/useInterval.d.ts +55 -0
- package/dist/hooks/useInterval.d.ts.map +1 -0
- package/dist/hooks/useInterval.js +24 -0
- package/dist/hooks/useInterval.js.map +1 -0
- package/dist/hooks/useLocalStorage.d.ts +43 -0
- package/dist/hooks/useLocalStorage.d.ts.map +1 -0
- package/dist/hooks/useLocalStorage.js +53 -0
- package/dist/hooks/useLocalStorage.js.map +1 -0
- package/dist/hooks/useMediaQuery.js +3 -3
- package/dist/hooks/useMediaQuery.js.map +1 -1
- package/dist/hooks/useMergedRefs.d.ts +27 -0
- package/dist/hooks/useMergedRefs.d.ts.map +1 -0
- package/dist/hooks/useMergedRefs.js +11 -0
- package/dist/hooks/useMergedRefs.js.map +1 -0
- package/dist/hooks/useOnClickOutside.d.ts +32 -0
- package/dist/hooks/useOnClickOutside.d.ts.map +1 -0
- package/dist/hooks/useOnClickOutside.js +23 -0
- package/dist/hooks/useOnClickOutside.js.map +1 -0
- package/dist/hooks/usePrevious.d.ts +33 -0
- package/dist/hooks/usePrevious.d.ts.map +1 -0
- package/dist/hooks/usePrevious.js +14 -0
- package/dist/hooks/usePrevious.js.map +1 -0
- package/dist/hooks/useThrottle.d.ts +37 -0
- package/dist/hooks/useThrottle.d.ts.map +1 -0
- package/dist/hooks/useThrottle.js +34 -0
- package/dist/hooks/useThrottle.js.map +1 -0
- package/dist/hooks/useTimeout.d.ts +28 -0
- package/dist/hooks/useTimeout.d.ts.map +1 -0
- package/dist/hooks/useTimeout.js +24 -0
- package/dist/hooks/useTimeout.js.map +1 -0
- package/dist/index.css.map +1 -1
- package/dist/index.d.ts +17 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -1
- package/dist/lib/utilities.d.ts +2 -3
- package/dist/lib/utilities.d.ts.map +1 -1
- package/dist/lib/utilities.js.map +1 -1
- package/dist/motion/Collapse.js +2 -2
- package/dist/motion/Collapse.js.map +1 -1
- package/dist/motion/Collapse_module.css.map +1 -1
- package/dist/motion/tokens.js +5 -5
- package/dist/motion/tokens.js.map +1 -1
- package/package.json +88 -10
- package/src/components/ui/alert-dialog.tsx +15 -8
- package/src/components/ui/avatar.tsx +9 -6
- package/src/components/ui/calendar.tsx +9 -14
- package/src/components/ui/carousel.tsx +2 -0
- package/src/components/ui/chart.tsx +65 -62
- package/src/components/ui/checkbox-group.tsx +4 -5
- package/src/components/ui/checkbox.tsx +10 -2
- package/src/components/ui/collapsible.tsx +1 -0
- package/src/components/ui/combobox.module.css +158 -0
- package/src/components/ui/combobox.tsx +569 -0
- package/src/components/ui/command.tsx +31 -15
- package/src/components/ui/context-menu.tsx +3 -0
- package/src/components/ui/drawer.tsx +2 -0
- package/src/components/ui/dropdown-menu.tsx +3 -0
- package/src/components/ui/dropdrawer.tsx +80 -62
- package/src/components/ui/form.tsx +28 -3
- package/src/components/ui/input-otp.tsx +3 -3
- package/src/components/ui/menubar.tsx +9 -10
- package/src/components/ui/meter.tsx +16 -17
- package/src/components/ui/navigation-menu.tsx +41 -33
- package/src/components/ui/number-field.tsx +6 -13
- package/src/components/ui/progress.tsx +3 -2
- package/src/components/ui/radio-group.tsx +2 -5
- package/src/components/ui/resizable.tsx +15 -18
- package/src/components/ui/scratcher.tsx +6 -10
- package/src/components/ui/scroll-area.tsx +2 -5
- package/src/components/ui/separator.tsx +4 -3
- package/src/components/ui/sheet.tsx +3 -0
- package/src/components/ui/sidebar.tsx +1 -0
- package/src/components/ui/{sonner.module.css → toast.module.css} +1 -1
- package/src/components/ui/{sonner.tsx → toast.tsx} +22 -14
- package/src/components/ui/toggle-group.tsx +6 -4
- package/src/components/ui/toolbar.tsx +20 -21
- package/src/hooks/useClipboard.tsx +137 -0
- package/src/hooks/useControllableState.tsx +81 -0
- package/src/hooks/useDebounce.tsx +50 -0
- package/src/hooks/useEventCallback.tsx +47 -0
- package/src/hooks/useId.tsx +36 -0
- package/src/hooks/useIntersectionObserver.tsx +81 -0
- package/src/hooks/useInterval.tsx +80 -0
- package/src/hooks/useLocalStorage.tsx +111 -0
- package/src/hooks/useMergedRefs.tsx +48 -0
- package/src/hooks/useOnClickOutside.tsx +55 -0
- package/src/hooks/usePrevious.tsx +44 -0
- package/src/hooks/useThrottle.tsx +78 -0
- package/src/hooks/useTimeout.tsx +51 -0
- package/src/index.ts +27 -4
- package/src/lib/utilities.ts +4 -4
- package/src/motion/tokens.ts +4 -4
- package/src/stories/DesignPrinciples.mdx +48 -0
- package/src/stories/GettingStarted.mdx +92 -0
- package/src/stories/Welcome.mdx +44 -0
- package/dist/components/ui/sonner.d.ts.map +0 -1
- package/dist/components/ui/sonner.js.map +0 -1
- package/dist/components/ui/sonner.module.js +0 -34
- package/dist/components/ui/sonner.module.js.map +0 -1
- package/dist/components/ui/sonner_module.css.map +0 -1
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Detects clicks or touch events outside a referenced element.
|
|
7
|
+
*
|
|
8
|
+
* @remarks
|
|
9
|
+
* This hook is commonly used for implementing dropdown menus, modals, and popovers
|
|
10
|
+
* that should close when the user interacts outside their boundaries. It listens
|
|
11
|
+
* to both mouse and touch events to ensure broad device compatibility.
|
|
12
|
+
*
|
|
13
|
+
* The event listeners are automatically cleaned up when the component unmounts.
|
|
14
|
+
*
|
|
15
|
+
* @param ref - A ref object pointing to the element to monitor.
|
|
16
|
+
* @param handler - Callback invoked when a click or touch occurs outside the element.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```tsx
|
|
20
|
+
* function Dropdown() {
|
|
21
|
+
* const [isOpen, setIsOpen] = useState(false);
|
|
22
|
+
* const dropdownRef = useRef<HTMLDivElement>(null);
|
|
23
|
+
*
|
|
24
|
+
* useOnClickOutside(dropdownRef, () => setIsOpen(false));
|
|
25
|
+
*
|
|
26
|
+
* return (
|
|
27
|
+
* <div ref={dropdownRef}>
|
|
28
|
+
* {isOpen && <DropdownMenu />}
|
|
29
|
+
* </div>
|
|
30
|
+
* );
|
|
31
|
+
* }
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export function useOnClickOutside(ref: React.RefObject<HTMLElement | null>, handler: (event: MouseEvent | TouchEvent) => void): void {
|
|
35
|
+
React.useEffect(() => {
|
|
36
|
+
const listener = (event: MouseEvent | TouchEvent) => {
|
|
37
|
+
const element = ref.current;
|
|
38
|
+
|
|
39
|
+
// Do nothing if clicking ref's element or descendent elements
|
|
40
|
+
if (!element || element.contains(event.target as Node)) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
handler(event);
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
globalThis.document.addEventListener("mousedown", listener);
|
|
48
|
+
globalThis.document.addEventListener("touchstart", listener);
|
|
49
|
+
|
|
50
|
+
return () => {
|
|
51
|
+
globalThis.document.removeEventListener("mousedown", listener);
|
|
52
|
+
globalThis.document.removeEventListener("touchstart", listener);
|
|
53
|
+
};
|
|
54
|
+
}, [ref, handler]);
|
|
55
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Tracks and returns the previous value of a state or prop.
|
|
7
|
+
*
|
|
8
|
+
* @remarks
|
|
9
|
+
* This hook stores the value from the previous render cycle, allowing you to compare
|
|
10
|
+
* current and previous values. On the initial render, it returns `undefined` since
|
|
11
|
+
* there is no previous value yet.
|
|
12
|
+
*
|
|
13
|
+
* Useful for detecting changes, implementing undo functionality, or creating
|
|
14
|
+
* animations based on value transitions.
|
|
15
|
+
*
|
|
16
|
+
* @typeParam T - The type of the value being tracked.
|
|
17
|
+
* @param value - The current value to track.
|
|
18
|
+
* @returns The value from the previous render, or `undefined` on the first render.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```tsx
|
|
22
|
+
* function Counter() {
|
|
23
|
+
* const [count, setCount] = useState(0);
|
|
24
|
+
* const previousCount = usePrevious(count);
|
|
25
|
+
*
|
|
26
|
+
* return (
|
|
27
|
+
* <div>
|
|
28
|
+
* <p>Current: {count}</p>
|
|
29
|
+
* <p>Previous: {previousCount ?? "N/A"}</p>
|
|
30
|
+
* <button onClick={() => setCount(count + 1)}>Increment</button>
|
|
31
|
+
* </div>
|
|
32
|
+
* );
|
|
33
|
+
* }
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export function usePrevious<T>(value: T): T | undefined {
|
|
37
|
+
const ref = React.useRef<T | undefined>(undefined);
|
|
38
|
+
|
|
39
|
+
React.useEffect(() => {
|
|
40
|
+
ref.current = value;
|
|
41
|
+
}, [value]);
|
|
42
|
+
|
|
43
|
+
return ref.current;
|
|
44
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Throttles a callback function, limiting how often it can be invoked.
|
|
7
|
+
*
|
|
8
|
+
* @remarks
|
|
9
|
+
* This hook returns a throttled version of the provided callback that can only
|
|
10
|
+
* be executed once per specified interval. Subsequent calls within the interval
|
|
11
|
+
* are ignored. Useful for rate-limiting expensive operations triggered by high-frequency
|
|
12
|
+
* events like scrolling, resizing, or mouse movement.
|
|
13
|
+
*
|
|
14
|
+
* Unlike debouncing, throttling ensures the callback is invoked at regular intervals
|
|
15
|
+
* during continuous events, providing more predictable execution timing.
|
|
16
|
+
*
|
|
17
|
+
* @typeParam Args - The tuple type of the callback's arguments.
|
|
18
|
+
* @param callback - The function to throttle.
|
|
19
|
+
* @param delay - The minimum interval in milliseconds between invocations.
|
|
20
|
+
* @returns A throttled version of the callback.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```tsx
|
|
24
|
+
* function ScrollTracker() {
|
|
25
|
+
* const [scrollPos, setScrollPos] = useState(0);
|
|
26
|
+
*
|
|
27
|
+
* const handleScroll = useThrottle(() => {
|
|
28
|
+
* setScrollPos(window.scrollY);
|
|
29
|
+
* }, 200);
|
|
30
|
+
*
|
|
31
|
+
* useEffect(() => {
|
|
32
|
+
* window.addEventListener("scroll", handleScroll);
|
|
33
|
+
* return () => window.removeEventListener("scroll", handleScroll);
|
|
34
|
+
* }, [handleScroll]);
|
|
35
|
+
*
|
|
36
|
+
* return <p>Scroll position: {scrollPos}</p>;
|
|
37
|
+
* }
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
export function useThrottle<Args extends unknown[]>(callback: (...args: Args) => void, delay: number): (...args: Args) => void {
|
|
41
|
+
const lastRunRef = React.useRef(0);
|
|
42
|
+
const timeoutRef = React.useRef<ReturnType<typeof setTimeout> | undefined>(undefined);
|
|
43
|
+
const callbackRef = React.useRef(callback);
|
|
44
|
+
|
|
45
|
+
React.useEffect(() => {
|
|
46
|
+
callbackRef.current = callback;
|
|
47
|
+
}, [callback]);
|
|
48
|
+
|
|
49
|
+
React.useEffect(() => {
|
|
50
|
+
return () => {
|
|
51
|
+
if (timeoutRef.current) {
|
|
52
|
+
globalThis.clearTimeout(timeoutRef.current);
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
}, []);
|
|
56
|
+
|
|
57
|
+
return React.useCallback(
|
|
58
|
+
(...args: Args) => {
|
|
59
|
+
const now = Date.now();
|
|
60
|
+
const timeSinceLastRun = now - lastRunRef.current;
|
|
61
|
+
|
|
62
|
+
if (timeSinceLastRun >= delay) {
|
|
63
|
+
callbackRef.current(...args);
|
|
64
|
+
lastRunRef.current = now;
|
|
65
|
+
} else {
|
|
66
|
+
if (timeoutRef.current) {
|
|
67
|
+
globalThis.clearTimeout(timeoutRef.current);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
timeoutRef.current = globalThis.setTimeout(() => {
|
|
71
|
+
callbackRef.current(...args);
|
|
72
|
+
lastRunRef.current = Date.now();
|
|
73
|
+
}, delay - timeSinceLastRun);
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
[delay],
|
|
77
|
+
);
|
|
78
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Executes a callback after a specified delay with automatic cleanup.
|
|
7
|
+
*
|
|
8
|
+
* @remarks
|
|
9
|
+
* This hook wraps `setTimeout` and automatically clears the timeout when the component
|
|
10
|
+
* unmounts or when the delay changes. Setting `delay` to `null` disables the timeout.
|
|
11
|
+
*
|
|
12
|
+
* The timeout is reset whenever the `callback` or `delay` changes, ensuring the most
|
|
13
|
+
* recent callback is always executed.
|
|
14
|
+
*
|
|
15
|
+
* @param callback - The function to execute after the delay.
|
|
16
|
+
* @param delay - The delay in milliseconds, or `null` to disable the timeout.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```tsx
|
|
20
|
+
* function DelayedMessage() {
|
|
21
|
+
* const [visible, setVisible] = useState(false);
|
|
22
|
+
*
|
|
23
|
+
* useTimeout(() => {
|
|
24
|
+
* setVisible(true);
|
|
25
|
+
* }, 3000);
|
|
26
|
+
*
|
|
27
|
+
* return visible ? <p>Message appeared!</p> : <p>Waiting...</p>;
|
|
28
|
+
* }
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export function useTimeout(callback: () => void, delay: number | null): void {
|
|
32
|
+
const savedCallback = React.useRef(callback);
|
|
33
|
+
|
|
34
|
+
React.useLayoutEffect(() => {
|
|
35
|
+
savedCallback.current = callback;
|
|
36
|
+
}, [callback]);
|
|
37
|
+
|
|
38
|
+
React.useEffect(() => {
|
|
39
|
+
if (delay === null) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const timeoutId = globalThis.setTimeout(() => {
|
|
44
|
+
savedCallback.current();
|
|
45
|
+
}, delay);
|
|
46
|
+
|
|
47
|
+
return () => {
|
|
48
|
+
globalThis.clearTimeout(timeoutId);
|
|
49
|
+
};
|
|
50
|
+
}, [delay]);
|
|
51
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -149,6 +149,16 @@ export {Checkbox} from "./components/ui/checkbox";
|
|
|
149
149
|
|
|
150
150
|
export {Collapsible, CollapsibleContent, CollapsibleTrigger} from "./components/ui/collapsible";
|
|
151
151
|
|
|
152
|
+
export {
|
|
153
|
+
Combobox,
|
|
154
|
+
ComboboxContent,
|
|
155
|
+
ComboboxEmpty,
|
|
156
|
+
ComboboxGroup,
|
|
157
|
+
ComboboxItem,
|
|
158
|
+
ComboboxSeparator,
|
|
159
|
+
ComboboxTrigger,
|
|
160
|
+
} from "./components/ui/combobox";
|
|
161
|
+
|
|
152
162
|
export {
|
|
153
163
|
Command,
|
|
154
164
|
CommandDialog,
|
|
@@ -383,8 +393,8 @@ export {RadioGroup, RadioGroupItem} from "./components/ui/radio-group";
|
|
|
383
393
|
|
|
384
394
|
export {ResizableHandle, ResizablePanel, ResizablePanelGroup} from "./components/ui/resizable";
|
|
385
395
|
export type {
|
|
386
|
-
|
|
387
|
-
|
|
396
|
+
GroupImperativeHandle,
|
|
397
|
+
PanelImperativeHandle,
|
|
388
398
|
ResizableHandleProps,
|
|
389
399
|
ResizablePanelGroupProps,
|
|
390
400
|
ResizablePanelProps,
|
|
@@ -453,8 +463,8 @@ export {Spinner} from "./components/ui/spinner";
|
|
|
453
463
|
|
|
454
464
|
export {Slider} from "./components/ui/slider";
|
|
455
465
|
|
|
456
|
-
export {Toaster, toast} from "./components/ui/
|
|
457
|
-
export type {Toast} from "./components/ui/
|
|
466
|
+
export {Toaster, toast} from "./components/ui/toast";
|
|
467
|
+
export type {Toast} from "./components/ui/toast";
|
|
458
468
|
|
|
459
469
|
export {Switch} from "./components/ui/switch";
|
|
460
470
|
|
|
@@ -489,12 +499,25 @@ export {
|
|
|
489
499
|
export {VisuallyHidden, type VisuallyHiddenProps} from "./components/ui/visually-hidden";
|
|
490
500
|
|
|
491
501
|
export {useBreakpoint, type Breakpoint} from "./hooks/useBreakpoint";
|
|
502
|
+
export {useClipboard, type UseClipboardOptions, type UseClipboardReturn} from "./hooks/useClipboard";
|
|
492
503
|
export {useColorScheme, type ColorScheme} from "./hooks/useColorScheme";
|
|
504
|
+
export {useControllableState, type UseControllableStateOptions} from "./hooks/useControllableState";
|
|
505
|
+
export {useDebounce} from "./hooks/useDebounce";
|
|
506
|
+
export {useEventCallback} from "./hooks/useEventCallback";
|
|
493
507
|
export {useFocusVisible} from "./hooks/useFocusVisible";
|
|
508
|
+
export {useId} from "./hooks/useId";
|
|
509
|
+
export {useIntersectionObserver} from "./hooks/useIntersectionObserver";
|
|
510
|
+
export {useInterval} from "./hooks/useInterval";
|
|
494
511
|
export {useIsMobile} from "./hooks/useIsMobile";
|
|
512
|
+
export {useLocalStorage} from "./hooks/useLocalStorage";
|
|
495
513
|
export {useMediaQuery} from "./hooks/useMediaQuery";
|
|
514
|
+
export {useMergedRefs} from "./hooks/useMergedRefs";
|
|
515
|
+
export {useOnClickOutside} from "./hooks/useOnClickOutside";
|
|
496
516
|
export {usePrefersContrast} from "./hooks/usePrefersContrast";
|
|
517
|
+
export {usePrevious} from "./hooks/usePrevious";
|
|
497
518
|
export {useReducedMotion} from "./hooks/useReducedMotion";
|
|
519
|
+
export {useThrottle} from "./hooks/useThrottle";
|
|
520
|
+
export {useTimeout} from "./hooks/useTimeout";
|
|
498
521
|
export {useWindowSize} from "./hooks/useWindowSize";
|
|
499
522
|
|
|
500
523
|
export {
|
package/src/lib/utilities.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import {clsx
|
|
1
|
+
import {clsx} from "clsx";
|
|
2
|
+
|
|
3
|
+
export type {ClassValue} from "clsx";
|
|
2
4
|
|
|
3
5
|
/**
|
|
4
6
|
* Helper function that merges CSS class names.
|
|
@@ -6,8 +8,6 @@ import {clsx, type ClassValue} from "clsx";
|
|
|
6
8
|
* @param inputs Array of class names
|
|
7
9
|
* @returns Merged class names string
|
|
8
10
|
*/
|
|
9
|
-
export function cn(...inputs: ReadonlyArray<ClassValue>): string {
|
|
11
|
+
export function cn(...inputs: ReadonlyArray<import("clsx").ClassValue>): string {
|
|
10
12
|
return clsx(inputs);
|
|
11
13
|
}
|
|
12
|
-
|
|
13
|
-
export type {ClassValue};
|
package/src/motion/tokens.ts
CHANGED
|
@@ -19,10 +19,10 @@ export const durations = {
|
|
|
19
19
|
* Standard easing curves for consistent motion across the library.
|
|
20
20
|
*/
|
|
21
21
|
export const easings = {
|
|
22
|
-
ease: [0.25, 0.1, 0.25, 1
|
|
23
|
-
easeIn: [0.42, 0, 1
|
|
24
|
-
easeOut: [0, 0, 0.58, 1
|
|
25
|
-
easeInOut: [0.42, 0, 0.58, 1
|
|
22
|
+
ease: [0.25, 0.1, 0.25, 1],
|
|
23
|
+
easeIn: [0.42, 0, 1, 1],
|
|
24
|
+
easeOut: [0, 0, 0.58, 1],
|
|
25
|
+
easeInOut: [0.42, 0, 0.58, 1],
|
|
26
26
|
spring: {type: "spring" as const, stiffness: 300, damping: 24},
|
|
27
27
|
} as const;
|
|
28
28
|
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{/* @meta title: Introduction/Design Principles */}
|
|
2
|
+
|
|
3
|
+
# Design Principles
|
|
4
|
+
|
|
5
|
+
## 🎯 Accessibility First
|
|
6
|
+
|
|
7
|
+
Every component is built on **Base UI** primitives, ensuring:
|
|
8
|
+
- Correct ARIA attributes and roles
|
|
9
|
+
- Keyboard navigation support
|
|
10
|
+
- Screen reader compatibility
|
|
11
|
+
- Focus management
|
|
12
|
+
- Color contrast compliance (WCAG 2.1 AA)
|
|
13
|
+
|
|
14
|
+
## 🎨 Design Tokens
|
|
15
|
+
|
|
16
|
+
We use **OKLCH** color space for perceptually uniform colors:
|
|
17
|
+
- Colors stay visually consistent across light and dark themes
|
|
18
|
+
- Tokens are CSS custom properties (`--ac-*` prefix)
|
|
19
|
+
- Override any token to create custom themes
|
|
20
|
+
|
|
21
|
+
## 🧩 Composition Over Configuration
|
|
22
|
+
|
|
23
|
+
Components follow the **compound component** pattern:
|
|
24
|
+
```tsx
|
|
25
|
+
<Card>
|
|
26
|
+
<CardHeader>
|
|
27
|
+
<CardTitle>Title</CardTitle>
|
|
28
|
+
</CardHeader>
|
|
29
|
+
<CardContent>Content</CardContent>
|
|
30
|
+
<CardFooter>Footer</CardFooter>
|
|
31
|
+
</Card>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## 🔧 Progressive Enhancement
|
|
35
|
+
|
|
36
|
+
- Server Components by default
|
|
37
|
+
- `"use client"` only when hooks/interactivity needed
|
|
38
|
+
- CSS Modules for scoped, predictable styles
|
|
39
|
+
- No runtime CSS-in-JS overhead
|
|
40
|
+
|
|
41
|
+
## 📐 Consistent API
|
|
42
|
+
|
|
43
|
+
Every component follows these conventions:
|
|
44
|
+
- `className` prop for custom styling
|
|
45
|
+
- `forwardRef` for DOM access
|
|
46
|
+
- `displayName` for debugging
|
|
47
|
+
- JSDoc for API documentation
|
|
48
|
+
- Co-located tests and stories
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
{/* @meta title: Introduction/Getting Started */}
|
|
2
|
+
|
|
3
|
+
# Getting Started
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
Install the package and its peer dependencies:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install @arolariu/components @base-ui/react motion react react-dom
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Setup
|
|
14
|
+
|
|
15
|
+
### 1. Import Styles
|
|
16
|
+
|
|
17
|
+
Add the required CSS import to your app entry point:
|
|
18
|
+
|
|
19
|
+
```tsx
|
|
20
|
+
// app/layout.tsx or main.tsx
|
|
21
|
+
import "@arolariu/components/styles";
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### 2. Use Components
|
|
25
|
+
|
|
26
|
+
```tsx
|
|
27
|
+
import {Button, Card, CardContent, CardHeader, CardTitle} from "@arolariu/components";
|
|
28
|
+
|
|
29
|
+
export function MyCard() {
|
|
30
|
+
return (
|
|
31
|
+
<Card>
|
|
32
|
+
<CardHeader>
|
|
33
|
+
<CardTitle>Hello World</CardTitle>
|
|
34
|
+
</CardHeader>
|
|
35
|
+
<CardContent>
|
|
36
|
+
<p>Your first component!</p>
|
|
37
|
+
<Button>Click me</Button>
|
|
38
|
+
</CardContent>
|
|
39
|
+
</Card>
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### 3. Dark Mode
|
|
45
|
+
|
|
46
|
+
Add `data-theme="dark"` to your root element:
|
|
47
|
+
|
|
48
|
+
```tsx
|
|
49
|
+
<html data-theme="dark">
|
|
50
|
+
<body>{children}</body>
|
|
51
|
+
</html>
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Or toggle with JavaScript:
|
|
55
|
+
```tsx
|
|
56
|
+
document.documentElement.setAttribute("data-theme", "dark");
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### 4. Tree-Shaking
|
|
60
|
+
|
|
61
|
+
Import individual components for smaller bundles:
|
|
62
|
+
|
|
63
|
+
```tsx
|
|
64
|
+
// ✅ Import from subpath (tree-shakeable)
|
|
65
|
+
import {Button} from "@arolariu/components/button";
|
|
66
|
+
import {useMediaQuery} from "@arolariu/components/useMediaQuery";
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## TypeScript
|
|
70
|
+
|
|
71
|
+
All components are fully typed. Use `Readonly<Props>` for component props:
|
|
72
|
+
|
|
73
|
+
```tsx
|
|
74
|
+
import type {ButtonProps} from "@arolariu/components";
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Next.js Integration
|
|
78
|
+
|
|
79
|
+
The library works with Next.js App Router. Server Components can import components — client-only ones have `"use client"` directives.
|
|
80
|
+
|
|
81
|
+
```tsx
|
|
82
|
+
// app/page.tsx (Server Component)
|
|
83
|
+
import {Card, CardContent} from "@arolariu/components";
|
|
84
|
+
|
|
85
|
+
export default function Page() {
|
|
86
|
+
return (
|
|
87
|
+
<Card>
|
|
88
|
+
<CardContent>Server-rendered!</CardContent>
|
|
89
|
+
</Card>
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
```
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{/* @meta title: Introduction/Welcome */}
|
|
2
|
+
|
|
3
|
+
# 👋 Welcome to @arolariu/components
|
|
4
|
+
|
|
5
|
+
A modern, accessible React component library built on **Base UI** primitives with **CSS Modules** and **OKLCH** design tokens.
|
|
6
|
+
|
|
7
|
+
## ✨ Highlights
|
|
8
|
+
|
|
9
|
+
- **84+ components** — From buttons to data tables, charts to animated backgrounds
|
|
10
|
+
- **23 hooks** — Utility hooks for state, media queries, clipboard, local storage
|
|
11
|
+
- **Base UI foundation** — Accessible, composable, lightweight
|
|
12
|
+
- **CSS Modules** — Scoped styles, zero Tailwind dependency
|
|
13
|
+
- **OKLCH color space** — Perceptually uniform, modern color tokens
|
|
14
|
+
- **95%+ test coverage** — 1300+ tests across all components
|
|
15
|
+
- **TypeScript strict** — Full type safety, no `any` types
|
|
16
|
+
- **Dark mode** — Built-in light/dark theme support via CSS variables
|
|
17
|
+
- **Motion system** — Animation tokens, presets, and utilities
|
|
18
|
+
|
|
19
|
+
## 🚀 Quick Start
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npm install @arolariu/components @base-ui/react motion
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
```tsx
|
|
26
|
+
import "@arolariu/components/styles";
|
|
27
|
+
import {Button} from "@arolariu/components";
|
|
28
|
+
|
|
29
|
+
function App() {
|
|
30
|
+
return <Button variant="default">Click me</Button>;
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## 📚 Explore
|
|
35
|
+
|
|
36
|
+
- **[Design Tokens](?path=/docs/foundations-design-tokens--docs)** — Colors, spacing, typography, radius
|
|
37
|
+
- **[Components](?path=/docs/components-actions-button--docs)** — Interactive UI building blocks
|
|
38
|
+
- **[Hooks](?path=/docs/components-actions-button--docs)** — Utility hooks for common patterns
|
|
39
|
+
|
|
40
|
+
## 🔗 Links
|
|
41
|
+
|
|
42
|
+
- [GitHub Repository](https://github.com/arolariu/arolariu.ro)
|
|
43
|
+
- [npm Package](https://www.npmjs.com/package/@arolariu/components)
|
|
44
|
+
- [arolariu.ro](https://arolariu.ro)
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sonner.d.ts","sourceRoot":"","sources":["../../../src/components/ui/sonner.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"components/ui/sonner.js","sources":["../../../src/components/ui/sonner.tsx"],"sourcesContent":["\"use client\";\r\n\r\n/**\r\n * @fileoverview Base UI-backed toast provider and imperative toast bridge.\r\n *\r\n * Replaces the previous `sonner` runtime dependency while preserving the existing public exports:\r\n * `Toaster` for container rendering and `toast` for imperative notifications used throughout the\r\n * website and component consumers.\r\n */\r\n\r\nimport {Toast} from \"@base-ui/react/toast\";\r\nimport {AlertCircle, BellRing, CheckCircle2, Info, LoaderCircle, TriangleAlert, X} from \"lucide-react\";\r\nimport * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\nimport styles from \"./sonner.module.css\";\r\n\r\nconst DEFAULT_TOAST_DURATION = 5000;\r\nconst DEFAULT_TOAST_LIMIT = 3;\r\nconst DEFAULT_TOAST_CLOSE_LABEL = \"Close notification\";\r\nconst DEFAULT_VIEWPORT_ARIA_LABEL = \"Notifications\";\r\n\r\ntype ToastPosition = \"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\" | \"top-center\" | \"bottom-center\";\r\ntype ToastVariant = \"default\" | \"success\" | \"error\" | \"info\" | \"warning\" | \"loading\";\r\ntype ToastIdentifier = number | string;\r\ntype ToastRenderable = React.ReactNode | (() => React.ReactNode);\r\ntype ToastPromise<Value> = Promise<Value> | (() => Promise<Value>);\r\ntype ResolvedPromiseState = ToastRenderable | ToastPromiseResolvedOptions | undefined;\r\n\r\ninterface ToastAction {\r\n label: React.ReactNode;\r\n onClick: (event: React.MouseEvent<HTMLButtonElement>) => void;\r\n}\r\n\r\ntype ToastActionRenderable = React.ReactNode | ToastAction;\r\n\r\ninterface ToastOptions {\r\n id?: ToastIdentifier;\r\n description?: ToastRenderable;\r\n duration?: number;\r\n className?: string;\r\n descriptionClassName?: string;\r\n closeButton?: boolean;\r\n closeButtonAriaLabel?: string;\r\n style?: React.CSSProperties;\r\n priority?: \"high\" | \"low\";\r\n action?: ToastActionRenderable;\r\n cancel?: ToastActionRenderable;\r\n onDismiss?: (toast: ToastSnapshot) => void;\r\n onAutoClose?: (toast: ToastSnapshot) => void;\r\n}\r\n\r\ninterface ToastPromiseResolvedOptions extends ToastOptions {\r\n message: ToastRenderable;\r\n}\r\n\r\ntype ToastPromiseState<Value> =\r\n | ToastRenderable\r\n | ToastPromiseResolvedOptions\r\n | ((value: Value) => ToastRenderable | ToastPromiseResolvedOptions | Promise<ToastRenderable | ToastPromiseResolvedOptions>);\r\n\r\ninterface ToastPromiseOptions<Value> extends ToastOptions {\r\n loading?: ToastRenderable | ToastPromiseResolvedOptions;\r\n success?: ToastPromiseState<Value>;\r\n error?: ToastPromiseState<unknown>;\r\n finally?: () => void | Promise<void>;\r\n}\r\n\r\ninterface ToasterProps {\r\n /**\r\n * Screen position used for the toast viewport.\r\n * @default \"bottom-right\"\r\n */\r\n position?: ToastPosition;\r\n /**\r\n * Default auto-dismiss duration, in milliseconds, for each toast.\r\n * @default 5000\r\n */\r\n duration?: number;\r\n /**\r\n * Maximum number of simultaneously visible toasts.\r\n * @default 3\r\n */\r\n visibleToasts?: number;\r\n /**\r\n * Whether to render a close button for each toast by default.\r\n * @default true\r\n */\r\n closeButton?: boolean;\r\n /**\r\n * Accessible label announced for the toast viewport container.\r\n * @default \"Notifications\"\r\n */\r\n containerAriaLabel?: string;\r\n /**\r\n * Additional CSS classes merged with the toast viewport.\r\n * @default undefined\r\n */\r\n className?: string;\r\n /**\r\n * Inline styles applied to the toast viewport.\r\n * @default undefined\r\n */\r\n style?: React.CSSProperties;\r\n /**\r\n * Default options merged into each toast created while this toaster is mounted.\r\n * @default undefined\r\n */\r\n toastOptions?: ToastOptions;\r\n}\r\n\r\ninterface ToastSnapshot {\r\n id: string;\r\n variant: ToastVariant;\r\n title?: React.ReactNode;\r\n description?: React.ReactNode;\r\n}\r\n\r\ninterface ToastMetadata {\r\n variant: ToastVariant;\r\n className?: string;\r\n descriptionClassName?: string;\r\n closeButton: boolean;\r\n closeButtonAriaLabel: string;\r\n style?: React.CSSProperties;\r\n action?: ToastActionRenderable;\r\n cancel?: ToastActionRenderable;\r\n customContent?: React.ReactNode;\r\n}\r\n\r\ninterface ToastUpdateOptions extends ToastOptions {\r\n message?: ToastRenderable;\r\n variant?: ToastVariant;\r\n}\r\n\r\ninterface ToasterRegistration {\r\n closeButton: boolean;\r\n toastOptions: ToastOptions;\r\n}\r\n\r\ninterface ToastRecord {\r\n metadata: ToastMetadata;\r\n options: ToastOptions;\r\n snapshot: ToastSnapshot;\r\n}\r\n\r\ninterface ToastApi {\r\n (message: ToastRenderable, options?: ToastOptions): string;\r\n success: (message: ToastRenderable, options?: ToastOptions) => string;\r\n error: (message: ToastRenderable, options?: ToastOptions) => string;\r\n info: (message: ToastRenderable, options?: ToastOptions) => string;\r\n warning: (message: ToastRenderable, options?: ToastOptions) => string;\r\n loading: (message: ToastRenderable, options?: ToastOptions) => string;\r\n message: (message: ToastRenderable, options?: ToastOptions) => string;\r\n update: (toastId: ToastIdentifier, options: ToastUpdateOptions) => string;\r\n dismiss: (toastId?: ToastIdentifier) => string | undefined;\r\n promise: <Value>(promise: ToastPromise<Value>, options?: ToastPromiseOptions<Value>) => Promise<Value>;\r\n custom: (renderer: (toastId: string) => React.ReactElement, options?: ToastOptions) => string;\r\n getToasts: () => ReadonlyArray<ToastSnapshot>;\r\n getHistory: () => ReadonlyArray<ToastSnapshot>;\r\n}\r\n\r\nconst positionStyles: Record<ToastPosition, string> = {\r\n \"bottom-center\": styles.viewportBottomCenter,\r\n \"bottom-left\": styles.viewportBottomLeft,\r\n \"bottom-right\": styles.viewportBottomRight,\r\n \"top-center\": styles.viewportTopCenter,\r\n \"top-left\": styles.viewportTopLeft,\r\n \"top-right\": styles.viewportTopRight,\r\n};\r\n\r\nconst variantStyles: Record<ToastVariant, string> = {\r\n default: styles.default,\r\n error: styles.error,\r\n info: styles.info,\r\n loading: styles.loading,\r\n success: styles.success,\r\n warning: styles.warning,\r\n};\r\n\r\nconst toastManager = Toast.createToastManager<ToastMetadata>();\r\ntype ToastAddOptions = Parameters<typeof toastManager.add>[0];\r\ntype ToastUpdatePayload = Parameters<typeof toastManager.update>[1];\r\nconst toastHistory: ToastSnapshot[] = [];\r\nconst activeToasts = new Map<string, ToastSnapshot>();\r\nconst toastRecords = new Map<string, ToastRecord>();\r\nconst toasterRegistrations = new Map<string, ToasterRegistration>();\r\n\r\nlet toastSequence = 0;\r\n\r\nfunction createToastIdentifier(identifier?: ToastIdentifier): string {\r\n if (identifier !== undefined) {\r\n return String(identifier);\r\n }\r\n\r\n if (typeof globalThis.crypto?.randomUUID === \"function\") {\r\n return globalThis.crypto.randomUUID();\r\n }\r\n\r\n toastSequence += 1;\r\n return `toast-${String(toastSequence)}`;\r\n}\r\n\r\nfunction isRenderableFactory(value: ToastRenderable | undefined): value is () => React.ReactNode {\r\n return typeof value === \"function\";\r\n}\r\n\r\n// eslint-disable-next-line sonarjs/function-return-type -- React renderables intentionally normalize to one public node type.\r\nfunction resolveRenderable(value?: ToastRenderable): React.ReactNode | undefined {\r\n const resolvedValue = isRenderableFactory(value) ? value() : value;\r\n return resolvedValue;\r\n}\r\n\r\nfunction getSnapshot(id: string, variant: ToastVariant, title?: React.ReactNode, description?: React.ReactNode): ToastSnapshot {\r\n return {\r\n description,\r\n id,\r\n title,\r\n variant,\r\n };\r\n}\r\n\r\nfunction registerToast(snapshot: ToastSnapshot): void {\r\n activeToasts.set(snapshot.id, snapshot);\r\n toastHistory.push(snapshot);\r\n}\r\n\r\nfunction registerToastRecord(record: ToastRecord): void {\r\n toastRecords.set(record.snapshot.id, record);\r\n registerToast(record.snapshot);\r\n}\r\n\r\nfunction replaceToastHistorySnapshot(snapshot: ToastSnapshot): void {\r\n for (let index = toastHistory.length - 1; index >= 0; index -= 1) {\r\n if (toastHistory[index]?.id === snapshot.id) {\r\n toastHistory[index] = snapshot;\r\n return;\r\n }\r\n }\r\n\r\n toastHistory.push(snapshot);\r\n}\r\n\r\nfunction replaceToastRecord(record: ToastRecord): void {\r\n toastRecords.set(record.snapshot.id, record);\r\n activeToasts.set(record.snapshot.id, record.snapshot);\r\n replaceToastHistorySnapshot(record.snapshot);\r\n}\r\n\r\nfunction unregisterToast(toastId?: string): void {\r\n if (!toastId) {\r\n activeToasts.clear();\r\n toastRecords.clear();\r\n return;\r\n }\r\n\r\n activeToasts.delete(toastId);\r\n toastRecords.delete(toastId);\r\n}\r\n\r\nfunction getActiveToasterRegistration(): ToasterRegistration {\r\n const registrations = [...toasterRegistrations.values()];\r\n return registrations.at(-1) ?? {closeButton: true, toastOptions: {}};\r\n}\r\n\r\nfunction mergeToastOptions(options?: ToastOptions): ToastOptions {\r\n return {\r\n ...getActiveToasterRegistration().toastOptions,\r\n ...options,\r\n };\r\n}\r\n\r\nfunction isToastVariant(value: string | undefined): value is ToastVariant {\r\n return value === \"default\" || value === \"error\" || value === \"info\" || value === \"loading\" || value === \"success\" || value === \"warning\";\r\n}\r\n\r\nfunction createToastMetadata(\r\n variant: ToastVariant,\r\n options: ToastOptions,\r\n closeButton: boolean,\r\n customContent?: React.ReactNode,\r\n): ToastMetadata {\r\n return {\r\n action: options.action,\r\n cancel: options.cancel,\r\n className: options.className,\r\n closeButton,\r\n closeButtonAriaLabel: options.closeButtonAriaLabel ?? DEFAULT_TOAST_CLOSE_LABEL,\r\n customContent,\r\n descriptionClassName: options.descriptionClassName,\r\n style: options.style,\r\n variant,\r\n };\r\n}\r\n\r\nfunction createToastRecord({\r\n id,\r\n message,\r\n options,\r\n variant,\r\n customContent,\r\n}: Readonly<{\r\n customContent?: React.ReactNode;\r\n id: string;\r\n message?: ToastRenderable;\r\n options: ToastOptions;\r\n variant: ToastVariant;\r\n}>): ToastRecord {\r\n const activeRegistration = getActiveToasterRegistration();\r\n const closeButton = options.closeButton ?? activeRegistration.closeButton;\r\n const title = message === undefined ? undefined : resolveRenderable(message);\r\n const description = resolveRenderable(options.description);\r\n const snapshot = getSnapshot(id, variant, title, description);\r\n\r\n return {\r\n metadata: createToastMetadata(variant, options, closeButton, customContent),\r\n options,\r\n snapshot,\r\n };\r\n}\r\n\r\nfunction createToastLifecycleHandlers(toastId: string, record: ToastRecord): Pick<ToastAddOptions, \"onClose\" | \"onRemove\"> {\r\n return {\r\n onClose: () => {\r\n record.options.onDismiss?.(activeToasts.get(toastId) ?? record.snapshot);\r\n },\r\n onRemove: () => {\r\n const snapshot = activeToasts.get(toastId) ?? record.snapshot;\r\n unregisterToast(toastId);\r\n record.options.onAutoClose?.(snapshot);\r\n },\r\n };\r\n}\r\n\r\nfunction createToastAddPayload(record: ToastRecord): ToastAddOptions {\r\n const lifecycleHandlers = createToastLifecycleHandlers(record.snapshot.id, record);\r\n\r\n return {\r\n description: record.snapshot.description,\r\n id: record.snapshot.id,\r\n priority: record.options.priority,\r\n timeout: record.options.duration,\r\n title: record.snapshot.title,\r\n type: record.snapshot.variant,\r\n data: record.metadata,\r\n ...lifecycleHandlers,\r\n };\r\n}\r\n\r\nfunction buildToastOptions(message: ToastRenderable, variant: ToastVariant, options?: ToastOptions): ToastAddOptions {\r\n const mergedOptions = mergeToastOptions(options);\r\n const toastId = createToastIdentifier(mergedOptions.id);\r\n const record = createToastRecord({\r\n id: toastId,\r\n message,\r\n options: mergedOptions,\r\n variant,\r\n });\r\n\r\n registerToastRecord(record);\r\n\r\n return createToastAddPayload(record);\r\n}\r\n\r\nfunction showToast(message: ToastRenderable, variant: ToastVariant, options?: ToastOptions): string {\r\n const payload = buildToastOptions(message, variant, options);\r\n return toastManager.add(payload);\r\n}\r\n\r\nfunction dismissToast(toastId?: ToastIdentifier): string | undefined {\r\n if (toastId === undefined) {\r\n unregisterToast();\r\n toastManager.close();\r\n return undefined;\r\n }\r\n\r\n const normalizedToastId = String(toastId);\r\n unregisterToast(normalizedToastId);\r\n toastManager.close(normalizedToastId);\r\n return normalizedToastId;\r\n}\r\n\r\nfunction updateToast(toastId: ToastIdentifier, options: ToastUpdateOptions): string {\r\n const normalizedToastId = String(toastId);\r\n const existingRecord = toastRecords.get(normalizedToastId);\r\n const mergedOptions: ToastOptions = {\r\n ...(existingRecord?.options ?? {}),\r\n ...options,\r\n };\r\n const variant = options.variant ?? existingRecord?.snapshot.variant ?? \"default\";\r\n const nextMessage = options.message === undefined ? existingRecord?.snapshot.title : resolveRenderable(options.message);\r\n const nextDescription = options.description === undefined ? existingRecord?.snapshot.description : resolveRenderable(options.description);\r\n const metadata = createToastMetadata(\r\n variant,\r\n mergedOptions,\r\n mergedOptions.closeButton ?? existingRecord?.metadata.closeButton ?? getActiveToasterRegistration().closeButton,\r\n existingRecord?.metadata.customContent,\r\n );\r\n const record: ToastRecord = {\r\n metadata,\r\n options: mergedOptions,\r\n snapshot: getSnapshot(normalizedToastId, variant, nextMessage, nextDescription),\r\n };\r\n\r\n replaceToastRecord(record);\r\n\r\n const payload: ToastUpdatePayload = {\r\n description: record.snapshot.description,\r\n priority: record.options.priority,\r\n timeout: record.options.duration,\r\n title: record.snapshot.title,\r\n type: record.snapshot.variant,\r\n data: record.metadata,\r\n ...createToastLifecycleHandlers(normalizedToastId, record),\r\n };\r\n\r\n toastManager.update(normalizedToastId, payload);\r\n\r\n return normalizedToastId;\r\n}\r\n\r\nfunction resolvePromiseState<Value>(state: ToastPromiseState<Value> | ResolvedPromiseState, value: Value): Promise<ResolvedPromiseState> {\r\n if (typeof state === \"function\") {\r\n return Promise.resolve(state(value));\r\n }\r\n\r\n return Promise.resolve(state);\r\n}\r\n\r\nfunction isPromiseResolvedOptions(value: ToastRenderable | ToastPromiseResolvedOptions | undefined): value is ToastPromiseResolvedOptions {\r\n return typeof value === \"object\" && value !== null && \"message\" in value;\r\n}\r\n\r\nfunction isToastAction(value: ToastActionRenderable | undefined): value is ToastAction {\r\n if (React.isValidElement(value)) {\r\n return false;\r\n }\r\n\r\n return typeof value === \"object\" && value !== null && \"label\" in value && \"onClick\" in value;\r\n}\r\n\r\n// eslint-disable-next-line sonarjs/function-return-type -- Variant selection intentionally maps to React nodes for a single icon slot.\r\nfunction getVariantIcon(variant: ToastVariant): React.ReactNode {\r\n const icons: Record<ToastVariant, React.ReactNode> = {\r\n default: (\r\n <BellRing\r\n aria-hidden='true'\r\n className={styles.icon}\r\n />\r\n ),\r\n error: (\r\n <AlertCircle\r\n aria-hidden='true'\r\n className={styles.icon}\r\n />\r\n ),\r\n info: (\r\n <Info\r\n aria-hidden='true'\r\n className={styles.icon}\r\n />\r\n ),\r\n loading: (\r\n <LoaderCircle\r\n aria-hidden='true'\r\n className={cn(styles.icon, styles.iconSpin)}\r\n />\r\n ),\r\n success: (\r\n <CheckCircle2\r\n aria-hidden='true'\r\n className={styles.icon}\r\n />\r\n ),\r\n warning: (\r\n <TriangleAlert\r\n aria-hidden='true'\r\n className={styles.icon}\r\n />\r\n ),\r\n };\r\n\r\n return icons[variant];\r\n}\r\n\r\nfunction ToastActions({\r\n toastId,\r\n action,\r\n cancel,\r\n}: Readonly<{toastId: string; action?: ToastActionRenderable; cancel?: ToastActionRenderable}>): React.JSX.Element | null {\r\n if (!action && !cancel) {\r\n return null;\r\n }\r\n\r\n const renderAction = (value: ToastActionRenderable | undefined, className: string): React.ReactElement | null => {\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n if (React.isValidElement(value)) {\r\n return value;\r\n }\r\n\r\n if (isToastAction(value)) {\r\n return (\r\n <button\r\n className={className}\r\n type='button'\r\n onClick={(event) => {\r\n value.onClick(event);\r\n dismissToast(toastId);\r\n }}>\r\n {value.label}\r\n </button>\r\n );\r\n }\r\n\r\n return null;\r\n };\r\n\r\n return (\r\n <div className={styles.actions}>\r\n {renderAction(cancel, styles.secondaryAction)}\r\n {renderAction(action, styles.primaryAction)}\r\n </div>\r\n );\r\n}\r\n\r\nfunction ToastViewportContent(): React.JSX.Element {\r\n const {toasts} = Toast.useToastManager<ToastMetadata>();\r\n\r\n return (\r\n <>\r\n {toasts.map((toastItem) => {\r\n const variant = isToastVariant(toastItem.type) ? toastItem.type : \"default\";\r\n const action = toastItem.data?.action;\r\n const cancel = toastItem.data?.cancel;\r\n\r\n return (\r\n <Toast.Root\r\n key={toastItem.id}\r\n toast={toastItem}\r\n className={cn(styles.root, variantStyles[variant], toastItem.data?.className)}\r\n data-variant={variant}\r\n style={toastItem.data?.style}>\r\n <Toast.Content className={styles.content}>\r\n {toastItem.data?.customContent ?? (\r\n <>\r\n <div className={styles.leading}>{getVariantIcon(variant)}</div>\r\n <div className={styles.body}>\r\n {toastItem.title ? <Toast.Title className={styles.title}>{toastItem.title}</Toast.Title> : null}\r\n {toastItem.description ? (\r\n <Toast.Description className={cn(styles.description, toastItem.data?.descriptionClassName)}>\r\n {toastItem.description}\r\n </Toast.Description>\r\n ) : null}\r\n <ToastActions\r\n action={action}\r\n cancel={cancel}\r\n toastId={toastItem.id}\r\n />\r\n </div>\r\n {toastItem.data?.closeButton ? (\r\n <Toast.Close\r\n aria-label={toastItem.data.closeButtonAriaLabel}\r\n className={styles.close}>\r\n <X\r\n aria-hidden='true'\r\n className={styles.closeIcon}\r\n />\r\n </Toast.Close>\r\n ) : null}\r\n </>\r\n )}\r\n </Toast.Content>\r\n </Toast.Root>\r\n );\r\n })}\r\n </>\r\n );\r\n}\r\n\r\n/**\r\n * Toast notification container.\r\n *\r\n * @remarks\r\n * Renders the Base UI provider, portal, and viewport with defaults that preserve the previous\r\n * shared `Toaster` export behavior used by the website.\r\n *\r\n * @example\r\n * ```tsx\r\n * <Toaster position='top-right' visibleToasts={5} />\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/toast | Base UI Toast Docs}\r\n */\r\nfunction Toaster({\r\n className,\r\n closeButton = true,\r\n containerAriaLabel = DEFAULT_VIEWPORT_ARIA_LABEL,\r\n duration = DEFAULT_TOAST_DURATION,\r\n position = \"bottom-right\",\r\n style,\r\n toastOptions,\r\n visibleToasts = DEFAULT_TOAST_LIMIT,\r\n}: Readonly<ToasterProps>): React.JSX.Element {\r\n const toasterId = React.useId();\r\n\r\n React.useEffect(() => {\r\n toasterRegistrations.set(toasterId, {\r\n closeButton,\r\n toastOptions: toastOptions ?? {},\r\n });\r\n\r\n return () => {\r\n toasterRegistrations.delete(toasterId);\r\n };\r\n }, [closeButton, toastOptions, toasterId]);\r\n\r\n return (\r\n <Toast.Provider\r\n limit={visibleToasts}\r\n timeout={duration}\r\n toastManager={toastManager}>\r\n <Toast.Portal>\r\n <Toast.Viewport\r\n aria-label={containerAriaLabel}\r\n className={cn(styles.viewport, positionStyles[position], className)}\r\n style={style}>\r\n <ToastViewportContent />\r\n </Toast.Viewport>\r\n </Toast.Portal>\r\n </Toast.Provider>\r\n );\r\n}\r\n\r\nToaster.displayName = \"Toaster\";\r\n\r\n/**\r\n * Imperative toast API for creating transient notifications outside React render flows.\r\n *\r\n * @remarks\r\n * Built on Base UI's toast manager and preserved as a drop-in replacement for the previous\r\n * `sonner` export surface.\r\n *\r\n * @example\r\n * ```tsx\r\n * toast.success(\"Profile updated\");\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/toast | Base UI Toast Docs}\r\n */\r\nconst toast = ((message: ToastRenderable, options?: ToastOptions): string => showToast(message, \"default\", options)) as ToastApi;\r\n\r\ntoast.success = (message: ToastRenderable, options?: ToastOptions): string => showToast(message, \"success\", options);\r\ntoast.error = (message: ToastRenderable, options?: ToastOptions): string => showToast(message, \"error\", options);\r\ntoast.info = (message: ToastRenderable, options?: ToastOptions): string => showToast(message, \"info\", options);\r\ntoast.warning = (message: ToastRenderable, options?: ToastOptions): string => showToast(message, \"warning\", options);\r\ntoast.loading = (message: ToastRenderable, options?: ToastOptions): string => showToast(message, \"loading\", options);\r\ntoast.message = (message: ToastRenderable, options?: ToastOptions): string => showToast(message, \"default\", options);\r\ntoast.update = (toastId: ToastIdentifier, options: ToastUpdateOptions): string => updateToast(toastId, options);\r\ntoast.dismiss = (toastId?: ToastIdentifier): string | undefined => dismissToast(toastId);\r\ntoast.custom = (renderer: (toastId: string) => React.ReactElement, options?: ToastOptions): string => {\r\n const mergedOptions = mergeToastOptions(options);\r\n const toastId = createToastIdentifier(mergedOptions.id);\r\n const record = createToastRecord({\r\n customContent: renderer(toastId),\r\n id: toastId,\r\n options: mergedOptions,\r\n variant: \"default\",\r\n });\r\n\r\n registerToastRecord(record);\r\n\r\n toastManager.add(createToastAddPayload(record));\r\n\r\n return toastId;\r\n};\r\nfunction mergePromiseToastOptions(baseOptions: ToastOptions, override?: ToastPromiseResolvedOptions): ToastOptions {\r\n if (!override) {\r\n return baseOptions;\r\n }\r\n\r\n return {\r\n action: override.action ?? baseOptions.action,\r\n cancel: override.cancel ?? baseOptions.cancel,\r\n className: override.className ?? baseOptions.className,\r\n closeButton: override.closeButton ?? baseOptions.closeButton,\r\n closeButtonAriaLabel: override.closeButtonAriaLabel ?? baseOptions.closeButtonAriaLabel,\r\n description: override.description ?? baseOptions.description,\r\n descriptionClassName: override.descriptionClassName ?? baseOptions.descriptionClassName,\r\n duration: override.duration ?? baseOptions.duration,\r\n id: override.id ?? baseOptions.id,\r\n onAutoClose: override.onAutoClose ?? baseOptions.onAutoClose,\r\n onDismiss: override.onDismiss ?? baseOptions.onDismiss,\r\n priority: override.priority ?? baseOptions.priority,\r\n style: override.style ?? baseOptions.style,\r\n };\r\n}\r\n\r\nfunction getPromiseBaseOptions<Value>(options?: ToastPromiseOptions<Value>): ToastOptions {\r\n return {\r\n action: options?.action,\r\n cancel: options?.cancel,\r\n className: options?.className,\r\n closeButton: options?.closeButton,\r\n closeButtonAriaLabel: options?.closeButtonAriaLabel,\r\n description: options?.description,\r\n descriptionClassName: options?.descriptionClassName,\r\n duration: options?.duration,\r\n id: options?.id,\r\n onAutoClose: options?.onAutoClose,\r\n onDismiss: options?.onDismiss,\r\n priority: options?.priority,\r\n style: options?.style,\r\n };\r\n}\r\n\r\nfunction showResolvedPromiseToast(\r\n loadingToastId: string | undefined,\r\n variant: Exclude<ToastVariant, \"default\">,\r\n resolvedState: ToastRenderable | ToastPromiseResolvedOptions | undefined,\r\n baseOptions: ToastOptions,\r\n): void {\r\n if (!resolvedState) {\r\n if (loadingToastId) {\r\n dismissToast(loadingToastId);\r\n }\r\n\r\n return;\r\n }\r\n\r\n const overrideOptions = isPromiseResolvedOptions(resolvedState) ? resolvedState : undefined;\r\n const message = isPromiseResolvedOptions(resolvedState) ? resolvedState.message : resolvedState;\r\n const mergedOptions = mergePromiseToastOptions(baseOptions, overrideOptions);\r\n\r\n if (loadingToastId) {\r\n toast.update(loadingToastId, {\r\n ...mergedOptions,\r\n message,\r\n variant,\r\n });\r\n\r\n return;\r\n }\r\n\r\n showToast(message, variant, mergedOptions);\r\n}\r\n\r\ntoast.promise = async function promise<Value>(promiseValue: ToastPromise<Value>, options?: ToastPromiseOptions<Value>): Promise<Value> {\r\n const pendingPromise = typeof promiseValue === \"function\" ? promiseValue() : promiseValue;\r\n const baseOptions = getPromiseBaseOptions(options);\r\n const loadingState = options?.loading;\r\n const loadingOptions = isPromiseResolvedOptions(loadingState) ? loadingState : undefined;\r\n const loadingMessage = isPromiseResolvedOptions(loadingState) ? loadingState.message : loadingState;\r\n const loadingToastId = loadingMessage ? toast.loading(loadingMessage, mergePromiseToastOptions(baseOptions, loadingOptions)) : undefined;\r\n\r\n try {\r\n const result = await pendingPromise;\r\n const successState = await resolvePromiseState(options?.success, result);\r\n showResolvedPromiseToast(loadingToastId, \"success\", successState, baseOptions);\r\n\r\n return result;\r\n } catch (error: unknown) {\r\n const errorState = await resolvePromiseState(options?.error, error);\r\n showResolvedPromiseToast(loadingToastId, \"error\", errorState, baseOptions);\r\n\r\n throw error;\r\n } finally {\r\n const handleFinally = options?.finally;\r\n if (handleFinally) {\r\n await handleFinally();\r\n }\r\n }\r\n};\r\ntoast.getToasts = (): ReadonlyArray<ToastSnapshot> => [...activeToasts.values()];\r\ntoast.getHistory = (): ReadonlyArray<ToastSnapshot> => [...toastHistory];\r\n\r\nexport type {Toast} from \"@base-ui/react/toast\";\r\nexport {toast, Toaster};\r\n"],"names":["DEFAULT_TOAST_DURATION","DEFAULT_TOAST_LIMIT","DEFAULT_TOAST_CLOSE_LABEL","DEFAULT_VIEWPORT_ARIA_LABEL","positionStyles","styles","variantStyles","toastManager","Toast","toastHistory","activeToasts","Map","toastRecords","toasterRegistrations","toastSequence","createToastIdentifier","identifier","undefined","String","globalThis","isRenderableFactory","value","resolveRenderable","resolvedValue","getSnapshot","id","variant","title","description","registerToast","snapshot","registerToastRecord","record","replaceToastHistorySnapshot","index","replaceToastRecord","unregisterToast","toastId","getActiveToasterRegistration","registrations","mergeToastOptions","options","isToastVariant","createToastMetadata","closeButton","customContent","createToastRecord","message","activeRegistration","createToastLifecycleHandlers","createToastAddPayload","lifecycleHandlers","buildToastOptions","mergedOptions","showToast","payload","dismissToast","normalizedToastId","updateToast","existingRecord","nextMessage","nextDescription","metadata","resolvePromiseState","state","Promise","isPromiseResolvedOptions","isToastAction","React","getVariantIcon","icons","BellRing","AlertCircle","Info","LoaderCircle","cn","CheckCircle2","TriangleAlert","ToastActions","action","cancel","renderAction","className","event","ToastViewportContent","toasts","toastItem","X","Toaster","containerAriaLabel","duration","position","style","toastOptions","visibleToasts","toasterId","toast","renderer","mergePromiseToastOptions","baseOptions","override","getPromiseBaseOptions","showResolvedPromiseToast","loadingToastId","resolvedState","overrideOptions","promiseValue","pendingPromise","loadingState","loadingOptions","loadingMessage","result","successState","error","errorState","handleFinally"],"mappings":"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"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import "./sonner_module.css";
|
|
2
|
-
const sonner_module = {
|
|
3
|
-
viewport: "viewport-H8aveR",
|
|
4
|
-
viewportTopLeft: "viewportTopLeft-xM6PF1",
|
|
5
|
-
viewportTopRight: "viewportTopRight-J7LgEN",
|
|
6
|
-
viewportBottomLeft: "viewportBottomLeft-gduLsn",
|
|
7
|
-
viewportBottomRight: "viewportBottomRight-cgRbCY",
|
|
8
|
-
viewportTopCenter: "viewportTopCenter-GmipAX",
|
|
9
|
-
viewportBottomCenter: "viewportBottomCenter-iNRY6t",
|
|
10
|
-
root: "root-Rvm8fE",
|
|
11
|
-
content: "content-y92flZ",
|
|
12
|
-
leading: "leading-GRRnqU",
|
|
13
|
-
body: "body-Lw99EO",
|
|
14
|
-
title: "title-ymKu15",
|
|
15
|
-
description: "description-ZtIAQh",
|
|
16
|
-
close: "close-n3q99W",
|
|
17
|
-
closeIcon: "closeIcon-gqyKiy",
|
|
18
|
-
icon: "icon-vXiuPh",
|
|
19
|
-
iconSpin: "iconSpin-ly7P4C",
|
|
20
|
-
"toast-spin": "toast-spin-u5gKWc",
|
|
21
|
-
toastSpin: "toast-spin-u5gKWc",
|
|
22
|
-
actions: "actions-wq9nP1",
|
|
23
|
-
primaryAction: "primaryAction-IbtEiI",
|
|
24
|
-
secondaryAction: "secondaryAction-DWySkL",
|
|
25
|
-
default: "default-ecwLjq",
|
|
26
|
-
success: "success-pLAR9p",
|
|
27
|
-
error: "error-pOqy4L",
|
|
28
|
-
info: "info-t5y2YI",
|
|
29
|
-
warning: "warning-M6kW38",
|
|
30
|
-
loading: "loading-pRuJz9"
|
|
31
|
-
};
|
|
32
|
-
export default sonner_module;
|
|
33
|
-
|
|
34
|
-
//# sourceMappingURL=sonner.module.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"components/ui/sonner.module.js","sources":["../../../src/components/ui/sonner.module.css"],"sourcesContent":["// extracted by LIB_CSS_EXTRACT_LOADER\nimport \"./sonner_module.css\"\nexport default {\"viewport\":\"viewport-H8aveR\",\"viewportTopLeft\":\"viewportTopLeft-xM6PF1\",\"viewportTopRight\":\"viewportTopRight-J7LgEN\",\"viewportBottomLeft\":\"viewportBottomLeft-gduLsn\",\"viewportBottomRight\":\"viewportBottomRight-cgRbCY\",\"viewportTopCenter\":\"viewportTopCenter-GmipAX\",\"viewportBottomCenter\":\"viewportBottomCenter-iNRY6t\",\"root\":\"root-Rvm8fE\",\"content\":\"content-y92flZ\",\"leading\":\"leading-GRRnqU\",\"body\":\"body-Lw99EO\",\"title\":\"title-ymKu15\",\"description\":\"description-ZtIAQh\",\"close\":\"close-n3q99W\",\"closeIcon\":\"closeIcon-gqyKiy\",\"icon\":\"icon-vXiuPh\",\"iconSpin\":\"iconSpin-ly7P4C\",\"toast-spin\":\"toast-spin-u5gKWc\",\"toastSpin\":\"toast-spin-u5gKWc\",\"actions\":\"actions-wq9nP1\",\"primaryAction\":\"primaryAction-IbtEiI\",\"secondaryAction\":\"secondaryAction-DWySkL\",\"default\":\"default-ecwLjq\",\"success\":\"success-pLAR9p\",\"error\":\"error-pOqy4L\",\"info\":\"info-t5y2YI\",\"warning\":\"warning-M6kW38\",\"loading\":\"loading-pRuJz9\"};"],"names":[],"mappings":";AAEA,sBAAe;IAAC,UAAW;IAAkB,iBAAkB;IAAyB,kBAAmB;IAA0B,oBAAqB;IAA4B,qBAAsB;IAA6B,mBAAoB;IAA2B,sBAAuB;IAA8B,MAAO;IAAc,SAAU;IAAiB,SAAU;IAAiB,MAAO;IAAc,OAAQ;IAAe,aAAc;IAAqB,OAAQ;IAAe,WAAY;IAAmB,MAAO;IAAc,UAAW;IAAkB,cAAa;IAAoB,WAAY;IAAoB,SAAU;IAAiB,eAAgB;IAAuB,iBAAkB;IAAyB,SAAU;IAAiB,SAAU;IAAiB,OAAQ;IAAe,MAAO;IAAc,SAAU;IAAiB,SAAU;AAAgB"}
|