@sth87/shadcn-design-system 0.0.36 → 0.1.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/dist/AI_CONTEXT.md +212 -214
- package/dist/cjs/components/Accordion/Accordion.cjs +1 -1
- package/dist/cjs/components/Accordion/Accordion.cjs.map +1 -1
- package/dist/cjs/components/Avatar/Avatar.cjs +1 -1
- package/dist/cjs/components/Avatar/Avatar.cjs.map +1 -1
- package/dist/cjs/components/Badge/Badge.cjs +1 -1
- package/dist/cjs/components/Badge/Badge.cjs.map +1 -1
- package/dist/cjs/components/Breadcrumb/Breadcrumb.cjs +1 -1
- package/dist/cjs/components/Breadcrumb/Breadcrumb.cjs.map +1 -1
- package/dist/cjs/components/Button/Button.cjs +1 -1
- package/dist/cjs/components/Button/Button.cjs.map +1 -1
- package/dist/cjs/components/Calendar/Calendar.cjs +1 -1
- package/dist/cjs/components/Calendar/Calendar.cjs.map +1 -1
- package/dist/cjs/components/Carousel/Carousel.cjs +1 -1
- package/dist/cjs/components/Carousel/Carousel.cjs.map +1 -1
- package/dist/cjs/components/Checkbox/Checkbox.cjs +1 -1
- package/dist/cjs/components/Checkbox/Checkbox.cjs.map +1 -1
- package/dist/cjs/components/Collapsible/Collapsible.cjs +1 -1
- package/dist/cjs/components/Collapsible/Collapsible.cjs.map +1 -1
- package/dist/cjs/components/Command/Command.cjs +1 -1
- package/dist/cjs/components/Command/Command.cjs.map +1 -1
- package/dist/cjs/components/ContextMenu/ContextMenu.cjs +1 -1
- package/dist/cjs/components/ContextMenu/ContextMenu.cjs.map +1 -1
- package/dist/cjs/components/Cropper/Cropper.cjs +1 -1
- package/dist/cjs/components/Cropper/Cropper.cjs.map +1 -1
- package/dist/cjs/components/DatePicker/DatePicker.cjs +1 -1
- package/dist/cjs/components/DatePicker/DatePicker.cjs.map +1 -1
- package/dist/cjs/components/DatePicker/RangePicker.cjs +1 -1
- package/dist/cjs/components/DatePicker/RangePicker.cjs.map +1 -1
- package/dist/cjs/components/DatePicker/TimePicker.cjs +1 -1
- package/dist/cjs/components/DatePicker/TimePicker.cjs.map +1 -1
- package/dist/cjs/components/Dialog/Dialog.cjs +1 -1
- package/dist/cjs/components/Dialog/Dialog.cjs.map +1 -1
- package/dist/cjs/components/DropdownMenu/DropdownMenu.cjs +1 -1
- package/dist/cjs/components/DropdownMenu/DropdownMenu.cjs.map +1 -1
- package/dist/cjs/components/FloatLabel.cjs +1 -1
- package/dist/cjs/components/FloatLabel.cjs.map +1 -1
- package/dist/cjs/components/Glass/Glass.cjs +1 -1
- package/dist/cjs/components/Glass/Glass.cjs.map +1 -1
- package/dist/cjs/components/ImageViewer/ImageViewer.cjs +1 -1
- package/dist/cjs/components/ImageViewer/ImageViewer.cjs.map +1 -1
- package/dist/cjs/components/Input/Input.cjs +1 -1
- package/dist/cjs/components/Input/Input.cjs.map +1 -1
- package/dist/cjs/components/InputOTP/InputOTP.cjs +1 -1
- package/dist/cjs/components/InputOTP/InputOTP.cjs.map +1 -1
- package/dist/cjs/components/Interactive/CursorFollow.cjs +1 -1
- package/dist/cjs/components/Interactive/CursorFollow.cjs.map +1 -1
- package/dist/cjs/components/Marquee/Marquee.cjs +1 -1
- package/dist/cjs/components/Marquee/Marquee.cjs.map +1 -1
- package/dist/cjs/components/Pagination/Pagination.cjs +1 -1
- package/dist/cjs/components/Pagination/Pagination.cjs.map +1 -1
- package/dist/cjs/components/QrCode/QrCode.cjs +1 -1
- package/dist/cjs/components/QrCode/QrCode.cjs.map +1 -1
- package/dist/cjs/components/Radio/Radio.cjs +1 -1
- package/dist/cjs/components/Radio/Radio.cjs.map +1 -1
- package/dist/cjs/components/Rate/Rate.cjs +1 -1
- package/dist/cjs/components/Rate/Rate.cjs.map +1 -1
- package/dist/cjs/components/Resizable/Resizable.cjs +1 -1
- package/dist/cjs/components/Resizable/Resizable.cjs.map +1 -1
- package/dist/cjs/components/ScrollArea/ScrollArea.cjs +1 -1
- package/dist/cjs/components/ScrollArea/ScrollArea.cjs.map +1 -1
- package/dist/cjs/components/Select/Select.cjs +1 -1
- package/dist/cjs/components/Select/Select.cjs.map +1 -1
- package/dist/cjs/components/Sheet/Sheet.cjs +2 -2
- package/dist/cjs/components/Sheet/Sheet.cjs.map +1 -1
- package/dist/cjs/components/Slider/Slider.cjs +1 -1
- package/dist/cjs/components/Slider/Slider.cjs.map +1 -1
- package/dist/cjs/components/Stepper/Stepper.cjs +1 -1
- package/dist/cjs/components/Stepper/Stepper.cjs.map +1 -1
- package/dist/cjs/components/Stepper/StepperWrapper.cjs +1 -1
- package/dist/cjs/components/Stepper/StepperWrapper.cjs.map +1 -1
- package/dist/cjs/components/Switch/Switch.cjs +1 -1
- package/dist/cjs/components/Switch/Switch.cjs.map +1 -1
- package/dist/cjs/components/Table/TableFilter/data-table-date-filter.cjs +1 -1
- package/dist/cjs/components/Table/TableFilter/data-table-date-filter.cjs.map +1 -1
- package/dist/cjs/components/Table/TableFilter/data-table-filter-popover.cjs +1 -1
- package/dist/cjs/components/Table/TableFilter/data-table-filter-popover.cjs.map +1 -1
- package/dist/cjs/components/Table/TableFilter/data-table-slider-filter.cjs +1 -1
- package/dist/cjs/components/Table/TableFilter/data-table-slider-filter.cjs.map +1 -1
- package/dist/cjs/components/Table/data-table-column-header.cjs +1 -1
- package/dist/cjs/components/Table/data-table-column-header.cjs.map +1 -1
- package/dist/cjs/components/Table/data-table-pagination.cjs +1 -1
- package/dist/cjs/components/Table/data-table-pagination.cjs.map +1 -1
- package/dist/cjs/components/Table/data-table.cjs +1 -1
- package/dist/cjs/components/Table/data-table.cjs.map +1 -1
- package/dist/cjs/components/Tabs/Tabs.cjs +1 -1
- package/dist/cjs/components/Tabs/Tabs.cjs.map +1 -1
- package/dist/cjs/components/Tabs/classes.cjs +1 -1
- package/dist/cjs/components/Tabs/classes.cjs.map +1 -1
- package/dist/cjs/components/Textarea/Textarea.cjs +1 -1
- package/dist/cjs/components/Textarea/Textarea.cjs.map +1 -1
- package/dist/cjs/components/TimeGridView.cjs +1 -1
- package/dist/cjs/components/TimeGridView.cjs.map +1 -1
- package/dist/cjs/components/Toast/Toast.cjs +1 -1
- package/dist/cjs/components/Toast/Toast.cjs.map +1 -1
- package/dist/cjs/components/Tooltip/Tooltip.cjs +1 -1
- package/dist/cjs/components/Tooltip/Tooltip.cjs.map +1 -1
- package/dist/cjs/components/Tour/Tour.cjs +1 -1
- package/dist/cjs/components/Tour/Tour.cjs.map +1 -1
- package/dist/cjs/components/Tour/TourWrapper.cjs +1 -1
- package/dist/cjs/components/Tour/TourWrapper.cjs.map +1 -1
- package/dist/cjs/components/Upload/Upload.cjs +3 -3
- package/dist/cjs/components/Upload/Upload.cjs.map +1 -1
- package/dist/cjs/components/WheelColumn.cjs +1 -1
- package/dist/cjs/components/WheelColumn.cjs.map +1 -1
- package/dist/cjs/lib/TextAnimation/BlurText.cjs +1 -1
- package/dist/cjs/lib/TextAnimation/BlurText.cjs.map +1 -1
- package/dist/cjs/lib/TextAnimation/CircularText.cjs +1 -1
- package/dist/cjs/lib/TextAnimation/CircularText.cjs.map +1 -1
- package/dist/cjs/lib/TextAnimation/FlipWords.cjs +1 -1
- package/dist/cjs/lib/TextAnimation/FlipWords.cjs.map +1 -1
- package/dist/cjs/lib/TextAnimation/GradientText.cjs +1 -1
- package/dist/cjs/lib/TextAnimation/GradientText.cjs.map +1 -1
- package/dist/cjs/lib/TextAnimation/RollingText.cjs +1 -1
- package/dist/cjs/lib/TextAnimation/RollingText.cjs.map +1 -1
- package/dist/cjs/lib/TextAnimation/RotatingText.cjs +1 -1
- package/dist/cjs/lib/TextAnimation/RotatingText.cjs.map +1 -1
- package/dist/cjs/lib/TextAnimation/ShimmeringText.cjs +1 -1
- package/dist/cjs/lib/TextAnimation/ShimmeringText.cjs.map +1 -1
- package/dist/cjs/lib/TextAnimation/TextGenerateEffect.cjs +1 -1
- package/dist/cjs/lib/TextAnimation/TextGenerateEffect.cjs.map +1 -1
- package/dist/cjs/lib/TextAnimation/TextHoverEffect.cjs +1 -1
- package/dist/cjs/lib/TextAnimation/TextHoverEffect.cjs.map +1 -1
- package/dist/cjs/lib/TextAnimation/TextPressureEffect.cjs +2 -2
- package/dist/cjs/lib/TextAnimation/TextPressureEffect.cjs.map +1 -1
- package/dist/cjs/lib/TextAnimation/TypingText.cjs +1 -1
- package/dist/cjs/lib/TextAnimation/TypingText.cjs.map +1 -1
- package/dist/cjs/lib/TextAnimation/WritingText.cjs +1 -1
- package/dist/cjs/lib/TextAnimation/WritingText.cjs.map +1 -1
- package/dist/cjs/node_modules/.pnpm/nuqs@2.8.0_next@15.5.9_@babel_core@7.28.5_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1/node_modules/nuqs/dist/server.cjs.map +1 -0
- package/dist/cjs/packages/ui/src/components/accordion.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/accordion.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/alert-dialog.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/alert-dialog.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/avatar.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/avatar.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/badge.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/badge.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/breadcrumb.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/breadcrumb.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/button-group.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/button-group.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/button.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/button.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/calendar.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/calendar.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/checkbox.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/checkbox.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/combobox.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/combobox.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/command.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/command.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/context-menu.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/context-menu.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/dialog.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/dialog.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/drawer.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/drawer.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/dropdown-menu.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/dropdown-menu.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/input-otp.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/input-otp.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/input.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/input.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/label.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/label.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/pagination.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/pagination.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/popover.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/popover.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/radio-group.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/radio-group.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/resizable.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/resizable.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/scroll-area.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/scroll-area.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/select.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/select.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/separator.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/separator.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/sheet.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/sheet.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/sidebar.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/sidebar.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/skeleton.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/skeleton.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/switch.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/switch.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/table.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/table.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/tabs.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/tabs.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/textarea.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/textarea.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/toggle.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/toggle.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/tooltip.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/tooltip.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/tree-view.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/tree-view.cjs.map +1 -1
- package/dist/cjs/styles/index.css +1 -1
- package/dist/cjs/utils/animations.cjs +1 -1
- package/dist/cjs/utils/animations.cjs.map +1 -1
- package/dist/cjs/utils/css.cjs +1 -1
- package/dist/cjs/utils/css.cjs.map +1 -1
- package/dist/cjs/utils/parsers.cjs +1 -1
- package/dist/cjs/utils/parsers.cjs.map +1 -1
- package/dist/esm/components/Accordion/Accordion.js +60 -60
- package/dist/esm/components/Accordion/Accordion.js.map +1 -1
- package/dist/esm/components/Avatar/Avatar.js +40 -40
- package/dist/esm/components/Avatar/Avatar.js.map +1 -1
- package/dist/esm/components/Badge/Badge.js +1 -1
- package/dist/esm/components/Badge/Badge.js.map +1 -1
- package/dist/esm/components/Breadcrumb/Breadcrumb.js +36 -36
- package/dist/esm/components/Breadcrumb/Breadcrumb.js.map +1 -1
- package/dist/esm/components/Button/Button.js +9 -9
- package/dist/esm/components/Button/Button.js.map +1 -1
- package/dist/esm/components/Calendar/Calendar.js +4 -4
- package/dist/esm/components/Calendar/Calendar.js.map +1 -1
- package/dist/esm/components/Carousel/Carousel.js +165 -165
- package/dist/esm/components/Carousel/Carousel.js.map +1 -1
- package/dist/esm/components/Checkbox/Checkbox.js +26 -26
- package/dist/esm/components/Checkbox/Checkbox.js.map +1 -1
- package/dist/esm/components/Collapsible/Collapsible.js +43 -43
- package/dist/esm/components/Collapsible/Collapsible.js.map +1 -1
- package/dist/esm/components/Command/Command.js +28 -28
- package/dist/esm/components/Command/Command.js.map +1 -1
- package/dist/esm/components/ContextMenu/ContextMenu.js +11 -11
- package/dist/esm/components/ContextMenu/ContextMenu.js.map +1 -1
- package/dist/esm/components/Cropper/Cropper.js +132 -132
- package/dist/esm/components/Cropper/Cropper.js.map +1 -1
- package/dist/esm/components/DatePicker/DatePicker.js +75 -75
- package/dist/esm/components/DatePicker/DatePicker.js.map +1 -1
- package/dist/esm/components/DatePicker/RangePicker.js +136 -136
- package/dist/esm/components/DatePicker/RangePicker.js.map +1 -1
- package/dist/esm/components/DatePicker/TimePicker.js +150 -150
- package/dist/esm/components/DatePicker/TimePicker.js.map +1 -1
- package/dist/esm/components/Dialog/Dialog.js +114 -114
- package/dist/esm/components/Dialog/Dialog.js.map +1 -1
- package/dist/esm/components/DropdownMenu/DropdownMenu.js +13 -13
- package/dist/esm/components/DropdownMenu/DropdownMenu.js.map +1 -1
- package/dist/esm/components/FloatLabel.js +44 -44
- package/dist/esm/components/FloatLabel.js.map +1 -1
- package/dist/esm/components/Glass/Glass.js +15 -15
- package/dist/esm/components/Glass/Glass.js.map +1 -1
- package/dist/esm/components/ImageViewer/ImageViewer.js +53 -53
- package/dist/esm/components/ImageViewer/ImageViewer.js.map +1 -1
- package/dist/esm/components/Input/Input.js +104 -104
- package/dist/esm/components/Input/Input.js.map +1 -1
- package/dist/esm/components/InputOTP/InputOTP.js +16 -16
- package/dist/esm/components/InputOTP/InputOTP.js.map +1 -1
- package/dist/esm/components/Interactive/CursorFollow.js +49 -49
- package/dist/esm/components/Interactive/CursorFollow.js.map +1 -1
- package/dist/esm/components/Marquee/Marquee.js +130 -130
- package/dist/esm/components/Marquee/Marquee.js.map +1 -1
- package/dist/esm/components/Pagination/Pagination.js +68 -68
- package/dist/esm/components/Pagination/Pagination.js.map +1 -1
- package/dist/esm/components/QrCode/QrCode.js +37 -37
- package/dist/esm/components/QrCode/QrCode.js.map +1 -1
- package/dist/esm/components/Radio/Radio.js +16 -16
- package/dist/esm/components/Radio/Radio.js.map +1 -1
- package/dist/esm/components/Rate/Rate.js +62 -62
- package/dist/esm/components/Rate/Rate.js.map +1 -1
- package/dist/esm/components/Resizable/Resizable.js +6 -6
- package/dist/esm/components/Resizable/Resizable.js.map +1 -1
- package/dist/esm/components/ScrollArea/ScrollArea.js +10 -10
- package/dist/esm/components/ScrollArea/ScrollArea.js.map +1 -1
- package/dist/esm/components/Select/Select.js +64 -64
- package/dist/esm/components/Select/Select.js.map +1 -1
- package/dist/esm/components/Sheet/Sheet.js +21 -21
- package/dist/esm/components/Sheet/Sheet.js.map +1 -1
- package/dist/esm/components/Slider/Slider.js +54 -54
- package/dist/esm/components/Slider/Slider.js.map +1 -1
- package/dist/esm/components/Stepper/Stepper.js +198 -198
- package/dist/esm/components/Stepper/Stepper.js.map +1 -1
- package/dist/esm/components/Stepper/StepperWrapper.js +15 -15
- package/dist/esm/components/Stepper/StepperWrapper.js.map +1 -1
- package/dist/esm/components/Switch/Switch.js +38 -38
- package/dist/esm/components/Switch/Switch.js.map +1 -1
- package/dist/esm/components/Table/TableFilter/data-table-date-filter.js +37 -37
- package/dist/esm/components/Table/TableFilter/data-table-date-filter.js.map +1 -1
- package/dist/esm/components/Table/TableFilter/data-table-filter-popover.js +25 -25
- package/dist/esm/components/Table/TableFilter/data-table-filter-popover.js.map +1 -1
- package/dist/esm/components/Table/TableFilter/data-table-slider-filter.js +64 -64
- package/dist/esm/components/Table/TableFilter/data-table-slider-filter.js.map +1 -1
- package/dist/esm/components/Table/data-table-column-header.js +18 -18
- package/dist/esm/components/Table/data-table-column-header.js.map +1 -1
- package/dist/esm/components/Table/data-table-pagination.js +21 -21
- package/dist/esm/components/Table/data-table-pagination.js.map +1 -1
- package/dist/esm/components/Table/data-table.js +18 -18
- package/dist/esm/components/Table/data-table.js.map +1 -1
- package/dist/esm/components/Tabs/Tabs.js +242 -242
- package/dist/esm/components/Tabs/Tabs.js.map +1 -1
- package/dist/esm/components/Tabs/classes.js +51 -51
- package/dist/esm/components/Tabs/classes.js.map +1 -1
- package/dist/esm/components/Textarea/Textarea.js +49 -49
- package/dist/esm/components/Textarea/Textarea.js.map +1 -1
- package/dist/esm/components/TimeGridView.js +12 -12
- package/dist/esm/components/TimeGridView.js.map +1 -1
- package/dist/esm/components/Toast/Toast.js +45 -45
- package/dist/esm/components/Toast/Toast.js.map +1 -1
- package/dist/esm/components/Tooltip/Tooltip.js +19 -19
- package/dist/esm/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/esm/components/Tour/Tour.js +11 -11
- package/dist/esm/components/Tour/Tour.js.map +1 -1
- package/dist/esm/components/Tour/TourWrapper.js +15 -15
- package/dist/esm/components/Tour/TourWrapper.js.map +1 -1
- package/dist/esm/components/Upload/Upload.js +405 -405
- package/dist/esm/components/Upload/Upload.js.map +1 -1
- package/dist/esm/components/WheelColumn.js +47 -47
- package/dist/esm/components/WheelColumn.js.map +1 -1
- package/dist/esm/lib/TextAnimation/BlurText.js +18 -18
- package/dist/esm/lib/TextAnimation/BlurText.js.map +1 -1
- package/dist/esm/lib/TextAnimation/CircularText.js +7 -7
- package/dist/esm/lib/TextAnimation/CircularText.js.map +1 -1
- package/dist/esm/lib/TextAnimation/FlipWords.js +21 -21
- package/dist/esm/lib/TextAnimation/FlipWords.js.map +1 -1
- package/dist/esm/lib/TextAnimation/GradientText.js +4 -4
- package/dist/esm/lib/TextAnimation/GradientText.js.map +1 -1
- package/dist/esm/lib/TextAnimation/RollingText.js +24 -24
- package/dist/esm/lib/TextAnimation/RollingText.js.map +1 -1
- package/dist/esm/lib/TextAnimation/RotatingText.js +6 -6
- package/dist/esm/lib/TextAnimation/RotatingText.js.map +1 -1
- package/dist/esm/lib/TextAnimation/ShimmeringText.js +9 -9
- package/dist/esm/lib/TextAnimation/ShimmeringText.js.map +1 -1
- package/dist/esm/lib/TextAnimation/TextGenerateEffect.js +14 -14
- package/dist/esm/lib/TextAnimation/TextGenerateEffect.js.map +1 -1
- package/dist/esm/lib/TextAnimation/TextHoverEffect.js +9 -9
- package/dist/esm/lib/TextAnimation/TextHoverEffect.js.map +1 -1
- package/dist/esm/lib/TextAnimation/TextPressureEffect.js +3 -3
- package/dist/esm/lib/TextAnimation/TextPressureEffect.js.map +1 -1
- package/dist/esm/lib/TextAnimation/TypingText.js +17 -17
- package/dist/esm/lib/TextAnimation/TypingText.js.map +1 -1
- package/dist/esm/lib/TextAnimation/WritingText.js +10 -10
- package/dist/esm/lib/TextAnimation/WritingText.js.map +1 -1
- package/dist/esm/node_modules/.pnpm/nuqs@2.8.0_next@15.5.9_@babel_core@7.28.5_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1/node_modules/nuqs/dist/server.js.map +1 -0
- package/dist/esm/packages/ui/src/components/accordion.js +31 -31
- package/dist/esm/packages/ui/src/components/accordion.js.map +1 -1
- package/dist/esm/packages/ui/src/components/alert-dialog.js +33 -33
- package/dist/esm/packages/ui/src/components/alert-dialog.js.map +1 -1
- package/dist/esm/packages/ui/src/components/avatar.js +20 -20
- package/dist/esm/packages/ui/src/components/avatar.js.map +1 -1
- package/dist/esm/packages/ui/src/components/badge.js +53 -53
- package/dist/esm/packages/ui/src/components/badge.js.map +1 -1
- package/dist/esm/packages/ui/src/components/breadcrumb.js +20 -20
- package/dist/esm/packages/ui/src/components/breadcrumb.js.map +1 -1
- package/dist/esm/packages/ui/src/components/button-group.js +31 -31
- package/dist/esm/packages/ui/src/components/button-group.js.map +1 -1
- package/dist/esm/packages/ui/src/components/button.js +90 -90
- package/dist/esm/packages/ui/src/components/button.js.map +1 -1
- package/dist/esm/packages/ui/src/components/calendar.js +94 -94
- package/dist/esm/packages/ui/src/components/calendar.js.map +1 -1
- package/dist/esm/packages/ui/src/components/checkbox.js +47 -47
- package/dist/esm/packages/ui/src/components/checkbox.js.map +1 -1
- package/dist/esm/packages/ui/src/components/combobox.js +64 -64
- package/dist/esm/packages/ui/src/components/combobox.js.map +1 -1
- package/dist/esm/packages/ui/src/components/command.js +77 -77
- package/dist/esm/packages/ui/src/components/command.js.map +1 -1
- package/dist/esm/packages/ui/src/components/context-menu.js +76 -76
- package/dist/esm/packages/ui/src/components/context-menu.js.map +1 -1
- package/dist/esm/packages/ui/src/components/dialog.js +54 -54
- package/dist/esm/packages/ui/src/components/dialog.js.map +1 -1
- package/dist/esm/packages/ui/src/components/drawer.js +39 -39
- package/dist/esm/packages/ui/src/components/drawer.js.map +1 -1
- package/dist/esm/packages/ui/src/components/dropdown-menu.js +109 -109
- package/dist/esm/packages/ui/src/components/dropdown-menu.js.map +1 -1
- package/dist/esm/packages/ui/src/components/input-otp.js +30 -30
- package/dist/esm/packages/ui/src/components/input-otp.js.map +1 -1
- package/dist/esm/packages/ui/src/components/input.js +19 -19
- package/dist/esm/packages/ui/src/components/input.js.map +1 -1
- package/dist/esm/packages/ui/src/components/label.js +9 -9
- package/dist/esm/packages/ui/src/components/label.js.map +1 -1
- package/dist/esm/packages/ui/src/components/pagination.js +26 -26
- package/dist/esm/packages/ui/src/components/pagination.js.map +1 -1
- package/dist/esm/packages/ui/src/components/popover.js +13 -13
- package/dist/esm/packages/ui/src/components/popover.js.map +1 -1
- package/dist/esm/packages/ui/src/components/radio-group.js +45 -45
- package/dist/esm/packages/ui/src/components/radio-group.js.map +1 -1
- package/dist/esm/packages/ui/src/components/resizable.js +18 -18
- package/dist/esm/packages/ui/src/components/resizable.js.map +1 -1
- package/dist/esm/packages/ui/src/components/scroll-area.js +31 -31
- package/dist/esm/packages/ui/src/components/scroll-area.js.map +1 -1
- package/dist/esm/packages/ui/src/components/select.js +119 -119
- package/dist/esm/packages/ui/src/components/select.js.map +1 -1
- package/dist/esm/packages/ui/src/components/separator.js +86 -86
- package/dist/esm/packages/ui/src/components/separator.js.map +1 -1
- package/dist/esm/packages/ui/src/components/sheet.js +50 -50
- package/dist/esm/packages/ui/src/components/sheet.js.map +1 -1
- package/dist/esm/packages/ui/src/components/sidebar.js +198 -198
- package/dist/esm/packages/ui/src/components/sidebar.js.map +1 -1
- package/dist/esm/packages/ui/src/components/skeleton.js +3 -3
- package/dist/esm/packages/ui/src/components/skeleton.js.map +1 -1
- package/dist/esm/packages/ui/src/components/switch.js +57 -57
- package/dist/esm/packages/ui/src/components/switch.js.map +1 -1
- package/dist/esm/packages/ui/src/components/table.js +17 -17
- package/dist/esm/packages/ui/src/components/table.js.map +1 -1
- package/dist/esm/packages/ui/src/components/tabs.js +33 -33
- package/dist/esm/packages/ui/src/components/tabs.js.map +1 -1
- package/dist/esm/packages/ui/src/components/textarea.js +17 -17
- package/dist/esm/packages/ui/src/components/textarea.js.map +1 -1
- package/dist/esm/packages/ui/src/components/toggle.js +36 -36
- package/dist/esm/packages/ui/src/components/toggle.js.map +1 -1
- package/dist/esm/packages/ui/src/components/tooltip.js +20 -20
- package/dist/esm/packages/ui/src/components/tooltip.js.map +1 -1
- package/dist/esm/packages/ui/src/components/tree-view.js +218 -218
- package/dist/esm/packages/ui/src/components/tree-view.js.map +1 -1
- package/dist/esm/styles/index.css +1 -1
- package/dist/esm/utils/animations.js +55 -55
- package/dist/esm/utils/animations.js.map +1 -1
- package/dist/esm/utils/css.js +7 -7
- package/dist/esm/utils/css.js.map +1 -1
- package/dist/esm/utils/parsers.js +1 -1
- package/dist/types/components/DatePicker/RangePicker.d.ts.map +1 -1
- package/dist/types/lib/TextAnimation/TextPressureEffect.d.ts.map +1 -1
- package/dist/types/lib/TextAnimation/TypingText.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/cjs/node_modules/.pnpm/nuqs@2.8.0_next@15.5.9_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1/node_modules/nuqs/dist/server.cjs.map +0 -1
- package/dist/esm/node_modules/.pnpm/nuqs@2.8.0_next@15.5.9_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1/node_modules/nuqs/dist/server.js.map +0 -1
- /package/dist/cjs/node_modules/.pnpm/{nuqs@2.8.0_next@15.5.9_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1 → nuqs@2.8.0_next@15.5.9_@babel_core@7.28.5_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1}/node_modules/nuqs/dist/server.cjs +0 -0
- /package/dist/esm/node_modules/.pnpm/{nuqs@2.8.0_next@15.5.9_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1 → nuqs@2.8.0_next@15.5.9_@babel_core@7.28.5_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1}/node_modules/nuqs/dist/server.js +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsx as
|
|
1
|
+
import { jsx as p, jsxs as L, Fragment as z } from "react/jsx-runtime";
|
|
2
2
|
import * as t from "react";
|
|
3
3
|
import { useMotionValue as k, AnimatePresence as M, motion as H, useSpring as F } from "motion/react";
|
|
4
4
|
import "@radix-ui/react-slot";
|
|
@@ -41,54 +41,54 @@ const B = {
|
|
|
41
41
|
}, N = t.createContext(
|
|
42
42
|
void 0
|
|
43
43
|
), X = () => {
|
|
44
|
-
const
|
|
45
|
-
if (!
|
|
44
|
+
const f = t.useContext(N);
|
|
45
|
+
if (!f)
|
|
46
46
|
throw new Error("useCursor must be used within a CursorProvider");
|
|
47
|
-
return
|
|
47
|
+
return f;
|
|
48
48
|
}, I = {
|
|
49
49
|
default: null,
|
|
50
50
|
// Use system cursor
|
|
51
|
-
pointer: /* @__PURE__ */
|
|
51
|
+
pointer: /* @__PURE__ */ p("div", { className: "ds:h-5 ds:w-5 ds:rounded-full ds:bg-white/30 ds:border-2 ds:border-white" })
|
|
52
52
|
};
|
|
53
53
|
function be({
|
|
54
|
-
ref:
|
|
54
|
+
ref: f,
|
|
55
55
|
children: e,
|
|
56
|
-
cursorType:
|
|
56
|
+
cursorType: s = "default",
|
|
57
57
|
followText: v,
|
|
58
58
|
showFollow: b,
|
|
59
59
|
followAlign: x = "bottom-right",
|
|
60
|
-
followSideOffset:
|
|
60
|
+
followSideOffset: n = 15,
|
|
61
61
|
followTransition: y = "normal",
|
|
62
62
|
...E
|
|
63
63
|
}) {
|
|
64
64
|
const [g, m] = t.useState({ x: 0, y: 0 }), [i, C] = t.useState(!1), r = t.useRef(null), h = t.useRef(null);
|
|
65
|
-
t.useImperativeHandle(
|
|
65
|
+
t.useImperativeHandle(f, () => r.current), t.useEffect(() => {
|
|
66
66
|
if (!r.current) return;
|
|
67
67
|
const u = r.current.parentElement;
|
|
68
68
|
if (!u) return;
|
|
69
69
|
getComputedStyle(u).position === "static" && (u.style.position = "relative");
|
|
70
|
-
const w = (
|
|
70
|
+
const w = (d) => {
|
|
71
71
|
const l = u.getBoundingClientRect();
|
|
72
|
-
m({ x:
|
|
72
|
+
m({ x: d.clientX - l.left, y: d.clientY - l.top }), C(!0);
|
|
73
73
|
}, S = () => C(!1);
|
|
74
74
|
return u.addEventListener("mousemove", w), u.addEventListener("mouseleave", S), () => {
|
|
75
75
|
u.removeEventListener("mousemove", w), u.removeEventListener("mouseleave", S);
|
|
76
76
|
};
|
|
77
77
|
}, []);
|
|
78
|
-
const c =
|
|
79
|
-
return /* @__PURE__ */
|
|
78
|
+
const c = s !== void 0, P = b ?? v !== void 0, o = B[y];
|
|
79
|
+
return /* @__PURE__ */ p(
|
|
80
80
|
N.Provider,
|
|
81
81
|
{
|
|
82
82
|
value: { cursorPos: g, isActive: i, containerRef: r, cursorRef: h },
|
|
83
83
|
children: /* @__PURE__ */ L("div", { ref: r, "data-slot": "cursor-provider", ...E, children: [
|
|
84
84
|
e,
|
|
85
|
-
c && /* @__PURE__ */
|
|
86
|
-
P && /* @__PURE__ */
|
|
85
|
+
c && /* @__PURE__ */ p(Y, { cursorType: s }),
|
|
86
|
+
P && /* @__PURE__ */ p(
|
|
87
87
|
j,
|
|
88
88
|
{
|
|
89
89
|
followText: v,
|
|
90
90
|
align: x,
|
|
91
|
-
sideOffset:
|
|
91
|
+
sideOffset: n,
|
|
92
92
|
transition: o
|
|
93
93
|
}
|
|
94
94
|
)
|
|
@@ -97,30 +97,30 @@ function be({
|
|
|
97
97
|
);
|
|
98
98
|
}
|
|
99
99
|
function Y({
|
|
100
|
-
ref:
|
|
100
|
+
ref: f,
|
|
101
101
|
children: e,
|
|
102
|
-
cursorType:
|
|
102
|
+
cursorType: s = "default",
|
|
103
103
|
className: v,
|
|
104
104
|
style: b,
|
|
105
105
|
...x
|
|
106
106
|
}) {
|
|
107
|
-
const { cursorPos:
|
|
108
|
-
t.useImperativeHandle(
|
|
109
|
-
const m = k(0), i = k(0), r = e || (typeof
|
|
107
|
+
const { cursorPos: n, isActive: y, containerRef: E, cursorRef: g } = X();
|
|
108
|
+
t.useImperativeHandle(f, () => g.current);
|
|
109
|
+
const m = k(0), i = k(0), r = e || (typeof s == "string" && s in I ? I[s] : s), h = r !== null;
|
|
110
110
|
return t.useEffect(() => {
|
|
111
111
|
const c = E.current?.parentElement;
|
|
112
112
|
return c && y && h && (c.style.cursor = "none"), () => {
|
|
113
113
|
c && (c.style.cursor = "default");
|
|
114
114
|
};
|
|
115
115
|
}, [E, y, h]), t.useEffect(() => {
|
|
116
|
-
m.set(
|
|
117
|
-
}, [
|
|
116
|
+
m.set(n.x), i.set(n.y);
|
|
117
|
+
}, [n, m, i]), r ? /* @__PURE__ */ p(M, { children: y && /* @__PURE__ */ p(
|
|
118
118
|
H.div,
|
|
119
119
|
{
|
|
120
120
|
ref: g,
|
|
121
121
|
"data-slot": "cursor",
|
|
122
122
|
className: A(
|
|
123
|
-
"transform-[translate(-50%,-50%)] pointer-events-none z-9999 absolute",
|
|
123
|
+
"ds:transform-[translate(-50%,-50%)] ds:pointer-events-none ds:z-9999 ds:absolute",
|
|
124
124
|
v
|
|
125
125
|
),
|
|
126
126
|
style: { top: i, left: m, ...b },
|
|
@@ -133,26 +133,26 @@ function Y({
|
|
|
133
133
|
) }) : null;
|
|
134
134
|
}
|
|
135
135
|
function j({
|
|
136
|
-
ref:
|
|
136
|
+
ref: f,
|
|
137
137
|
sideOffset: e = 15,
|
|
138
|
-
align:
|
|
138
|
+
align: s = "bottom-right",
|
|
139
139
|
children: v,
|
|
140
140
|
className: b,
|
|
141
141
|
style: x,
|
|
142
|
-
followText:
|
|
142
|
+
followText: n,
|
|
143
143
|
transition: y,
|
|
144
144
|
transitionPreset: E = "normal",
|
|
145
145
|
...g
|
|
146
146
|
}) {
|
|
147
147
|
const { cursorPos: m, isActive: i, cursorRef: C } = X(), r = t.useRef(null);
|
|
148
148
|
t.useImperativeHandle(
|
|
149
|
-
|
|
149
|
+
f,
|
|
150
150
|
() => r.current
|
|
151
151
|
);
|
|
152
152
|
const h = k(0), c = k(0), P = y || B[E], o = F(h, P), u = F(c, P), w = t.useCallback(() => {
|
|
153
|
-
const
|
|
153
|
+
const d = r.current?.getBoundingClientRect(), l = d?.width ?? 0, R = d?.height ?? 0;
|
|
154
154
|
let a;
|
|
155
|
-
switch (
|
|
155
|
+
switch (s) {
|
|
156
156
|
case "center":
|
|
157
157
|
a = { x: l / 2, y: R / 2 };
|
|
158
158
|
break;
|
|
@@ -184,19 +184,19 @@ function j({
|
|
|
184
184
|
a = { x: 0, y: 0 };
|
|
185
185
|
}
|
|
186
186
|
return a;
|
|
187
|
-
}, [
|
|
187
|
+
}, [s, e]);
|
|
188
188
|
t.useEffect(() => {
|
|
189
|
-
const
|
|
190
|
-
h.set(m.x -
|
|
189
|
+
const d = w(), l = C.current?.getBoundingClientRect(), R = l?.width ?? 20, a = l?.height ?? 20;
|
|
190
|
+
h.set(m.x - d.x + R / 2), c.set(m.y - d.y + a / 2);
|
|
191
191
|
}, [w, m, C, h, c]);
|
|
192
|
-
const S = () => v || (
|
|
193
|
-
return /* @__PURE__ */
|
|
192
|
+
const S = () => v || (n ? typeof n == "string" ? /* @__PURE__ */ p("div", { className: "ds:px-4 ds:py-2 ds:bg-white ds:rounded-md ds:shadow-lg ds:text-sm ds:font-medium", children: n }) : n : null);
|
|
193
|
+
return /* @__PURE__ */ p(M, { children: i && /* @__PURE__ */ p(
|
|
194
194
|
H.div,
|
|
195
195
|
{
|
|
196
196
|
ref: r,
|
|
197
197
|
"data-slot": "cursor-follow",
|
|
198
198
|
className: A(
|
|
199
|
-
"transform-[translate(-50%,-50%)] pointer-events-none z-9998 absolute",
|
|
199
|
+
"ds:transform-[translate(-50%,-50%)] ds:pointer-events-none ds:z-9998 ds:absolute",
|
|
200
200
|
b
|
|
201
201
|
),
|
|
202
202
|
style: { top: u, left: o, ...x },
|
|
@@ -208,24 +208,24 @@ function j({
|
|
|
208
208
|
}
|
|
209
209
|
) });
|
|
210
210
|
}
|
|
211
|
-
function xe(
|
|
211
|
+
function xe(f = {}) {
|
|
212
212
|
const {
|
|
213
213
|
cursorType: e = "default",
|
|
214
|
-
followText:
|
|
214
|
+
followText: s,
|
|
215
215
|
showFollow: v,
|
|
216
216
|
align: b = "bottom-right",
|
|
217
217
|
sideOffset: x = 15,
|
|
218
|
-
transitionPreset:
|
|
218
|
+
transitionPreset: n = "normal",
|
|
219
219
|
className: y,
|
|
220
220
|
style: E
|
|
221
|
-
} =
|
|
221
|
+
} = f, [g, m] = t.useState({ x: 0, y: 0 }), [i, C] = t.useState(!1), r = t.useRef(null), h = t.useRef(null);
|
|
222
222
|
t.useEffect(() => {
|
|
223
223
|
if (!r.current) return;
|
|
224
224
|
const o = r.current;
|
|
225
225
|
getComputedStyle(o).position === "static" && (o.style.position = "relative");
|
|
226
226
|
const u = (S) => {
|
|
227
|
-
const
|
|
228
|
-
m({ x: S.clientX -
|
|
227
|
+
const d = o.getBoundingClientRect();
|
|
228
|
+
m({ x: S.clientX - d.left, y: S.clientY - d.top }), C(!0);
|
|
229
229
|
}, w = () => C(!1);
|
|
230
230
|
return o.addEventListener("mousemove", u), o.addEventListener("mouseleave", w), () => {
|
|
231
231
|
o.removeEventListener("mousemove", u), o.removeEventListener("mouseleave", w);
|
|
@@ -244,14 +244,14 @@ function xe(d = {}) {
|
|
|
244
244
|
{
|
|
245
245
|
value: { cursorPos: g, isActive: i, containerRef: r, cursorRef: h },
|
|
246
246
|
children: [
|
|
247
|
-
/* @__PURE__ */
|
|
248
|
-
(v ??
|
|
247
|
+
/* @__PURE__ */ p(Y, { cursorType: e }),
|
|
248
|
+
(v ?? s !== void 0) && /* @__PURE__ */ p(
|
|
249
249
|
j,
|
|
250
250
|
{
|
|
251
|
-
followText:
|
|
251
|
+
followText: s,
|
|
252
252
|
align: b,
|
|
253
253
|
sideOffset: x,
|
|
254
|
-
transitionPreset:
|
|
254
|
+
transitionPreset: n
|
|
255
255
|
}
|
|
256
256
|
)
|
|
257
257
|
]
|
|
@@ -260,15 +260,15 @@ function xe(d = {}) {
|
|
|
260
260
|
i,
|
|
261
261
|
g,
|
|
262
262
|
e,
|
|
263
|
-
|
|
263
|
+
s,
|
|
264
264
|
v,
|
|
265
265
|
b,
|
|
266
266
|
x,
|
|
267
|
-
|
|
267
|
+
n
|
|
268
268
|
]);
|
|
269
269
|
return {
|
|
270
270
|
ref: r,
|
|
271
|
-
className: A("relative", y),
|
|
271
|
+
className: A("ds:relative", y),
|
|
272
272
|
style: { ...E },
|
|
273
273
|
"data-cursor-container": !0,
|
|
274
274
|
children: (o) => /* @__PURE__ */ L(z, { children: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CursorFollow.js","sources":["../../../../src/components/Interactive/CursorFollow.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n motion,\n useMotionValue,\n useSpring,\n AnimatePresence,\n type HTMLMotionProps,\n type SpringOptions,\n} from \"motion/react\";\n\nimport { cn } from \"@dsui/ui/index\";\n\n// Transition presets\ntype TransitionPreset = \"slow\" | \"normal\" | \"fast\" | \"realtime\";\n\nconst TRANSITION_PRESETS: Record<TransitionPreset, SpringOptions> = {\n slow: { stiffness: 100, damping: 20, bounce: 0 },\n normal: { stiffness: 500, damping: 50, bounce: 0 },\n fast: { stiffness: 1000, damping: 80, bounce: 0 },\n realtime: { stiffness: 2000, damping: 100, bounce: 0 },\n};\n\ntype CursorContextType = {\n cursorPos: { x: number; y: number };\n isActive: boolean;\n containerRef: React.RefObject<HTMLDivElement | null>;\n cursorRef: React.RefObject<HTMLDivElement | null>;\n};\n\nconst CursorContext = React.createContext<CursorContextType | undefined>(\n undefined\n);\n\nconst useCursor = (): CursorContextType => {\n const context = React.useContext(CursorContext);\n if (!context) {\n throw new Error(\"useCursor must be used within a CursorProvider\");\n }\n return context;\n};\n\ntype Align =\n | \"top\"\n | \"top-left\"\n | \"top-right\"\n | \"bottom\"\n | \"bottom-left\"\n | \"bottom-right\"\n | \"left\"\n | \"right\"\n | \"center\";\n\ntype CursorVariantKey = \"default\" | \"pointer\";\ntype CursorVariant = CursorVariantKey | React.ReactNode;\n\n// Predefined cursor variants\nconst cursorVariants: Record<CursorVariantKey, React.ReactNode> = {\n default: null, // Use system cursor\n pointer: (\n <div className=\"h-5 w-5 rounded-full bg-white/30 border-2 border-white\" />\n ),\n};\n\ntype CursorProviderProps = React.ComponentProps<\"div\"> & {\n children: React.ReactNode;\n /** Auto-setup cursor with variant (preset key or custom ReactNode) */\n cursorType?: CursorVariant;\n /** Auto-setup follow element with content */\n followText?: React.ReactNode;\n /** Show follow element (default: true when followText is provided) */\n showFollow?: boolean;\n /** Follow element alignment */\n followAlign?: Align;\n /** Follow element side offset */\n followSideOffset?: number;\n /** Follow element transition preset */\n followTransition?: TransitionPreset;\n};\n\nfunction CursorProvider({\n ref,\n children,\n cursorType = \"default\",\n followText,\n showFollow,\n followAlign = \"bottom-right\",\n followSideOffset = 15,\n followTransition = \"normal\",\n ...props\n}: CursorProviderProps) {\n const [cursorPos, setCursorPos] = React.useState({ x: 0, y: 0 });\n const [isActive, setIsActive] = React.useState(false);\n const containerRef = React.useRef<HTMLDivElement>(null);\n const cursorRef = React.useRef<HTMLDivElement>(null);\n React.useImperativeHandle(ref as React.Ref<HTMLDivElement>, () => containerRef.current as HTMLDivElement);\n\n React.useEffect(() => {\n if (!containerRef.current) return;\n\n const parent = containerRef.current.parentElement;\n if (!parent) return;\n\n if (getComputedStyle(parent).position === \"static\") {\n parent.style.position = \"relative\";\n }\n\n const handleMouseMove = (e: MouseEvent) => {\n const rect = parent.getBoundingClientRect();\n setCursorPos({ x: e.clientX - rect.left, y: e.clientY - rect.top });\n setIsActive(true);\n };\n const handleMouseLeave = () => setIsActive(false);\n\n parent.addEventListener(\"mousemove\", handleMouseMove);\n parent.addEventListener(\"mouseleave\", handleMouseLeave);\n\n return () => {\n parent.removeEventListener(\"mousemove\", handleMouseMove);\n parent.removeEventListener(\"mouseleave\", handleMouseLeave);\n };\n }, []);\n\n // Auto-setup: determine if we should show cursor and follow\n const shouldShowCursor = cursorType !== undefined;\n const shouldShowFollowElement = showFollow ?? followText !== undefined;\n\n // Convert preset to SpringOptions\n const transitionConfig = TRANSITION_PRESETS[followTransition];\n\n return (\n <CursorContext.Provider\n value={{ cursorPos, isActive, containerRef, cursorRef }}\n >\n <div ref={containerRef} data-slot=\"cursor-provider\" {...props}>\n {children}\n\n {/* Auto-setup Cursor */}\n {shouldShowCursor && <Cursor cursorType={cursorType} />}\n\n {/* Auto-setup CursorFollow */}\n {shouldShowFollowElement && (\n <CursorFollow\n followText={followText}\n align={followAlign}\n sideOffset={followSideOffset}\n transition={transitionConfig}\n />\n )}\n </div>\n </CursorContext.Provider>\n );\n}\n\ntype CursorProps = HTMLMotionProps<\"div\"> & {\n children?: React.ReactNode;\n cursorType?: CursorVariant;\n};\n\nfunction Cursor({\n ref,\n children,\n cursorType = \"default\",\n className,\n style,\n ...props\n}: CursorProps) {\n const { cursorPos, isActive, containerRef, cursorRef } = useCursor();\n React.useImperativeHandle(ref as React.Ref<HTMLDivElement>, () => cursorRef.current as HTMLDivElement);\n\n const x = useMotionValue(0);\n const y = useMotionValue(0);\n\n // Determine which content to render\n const getCursorContent = () => {\n if (children) return children;\n\n // Check if cursorType is a preset key\n if (typeof cursorType === \"string\" && cursorType in cursorVariants) {\n return cursorVariants[cursorType as CursorVariantKey];\n }\n\n // Otherwise treat it as custom ReactNode\n return cursorType;\n };\n\n const cursorContent = getCursorContent();\n\n // Only hide system cursor if we have custom content to show\n const shouldHideSystemCursor = cursorContent !== null;\n\n React.useEffect(() => {\n const parentElement = containerRef.current?.parentElement;\n\n if (parentElement && isActive && shouldHideSystemCursor) {\n parentElement.style.cursor = \"none\";\n }\n\n return () => {\n if (parentElement) parentElement.style.cursor = \"default\";\n };\n }, [containerRef, isActive, shouldHideSystemCursor]);\n\n React.useEffect(() => {\n x.set(cursorPos.x);\n y.set(cursorPos.y);\n }, [cursorPos, x, y]);\n\n // Only render if we have content to show\n if (!cursorContent) return null;\n\n return (\n <AnimatePresence>\n {isActive && (\n <motion.div\n ref={cursorRef}\n data-slot=\"cursor\"\n className={cn(\n \"transform-[translate(-50%,-50%)] pointer-events-none z-9999 absolute\",\n className\n )}\n style={{ top: y, left: x, ...style }}\n initial={{ scale: 0, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n exit={{ scale: 0, opacity: 0 }}\n {...props}\n >\n {cursorContent}\n </motion.div>\n )}\n </AnimatePresence>\n );\n}\n\ntype CursorFollowProps = HTMLMotionProps<\"div\"> & {\n sideOffset?: number;\n align?: Align;\n transition?: SpringOptions;\n transitionPreset?: TransitionPreset;\n children?: React.ReactNode;\n followText?: React.ReactNode;\n};\n\nfunction CursorFollow({\n ref,\n sideOffset = 15,\n align = \"bottom-right\",\n children,\n className,\n style,\n followText,\n transition,\n transitionPreset = \"normal\",\n ...props\n}: CursorFollowProps) {\n const { cursorPos, isActive, cursorRef } = useCursor();\n const cursorFollowRef = React.useRef<HTMLDivElement>(null);\n React.useImperativeHandle(\n ref as React.Ref<HTMLDivElement>,\n () => cursorFollowRef.current as HTMLDivElement\n );\n\n const x = useMotionValue(0);\n const y = useMotionValue(0);\n\n // Use custom transition if provided, otherwise use preset\n const finalTransition = transition || TRANSITION_PRESETS[transitionPreset];\n\n const springX = useSpring(x, finalTransition);\n const springY = useSpring(y, finalTransition);\n\n const calculateOffset = React.useCallback(() => {\n const rect = cursorFollowRef.current?.getBoundingClientRect();\n const width = rect?.width ?? 0;\n const height = rect?.height ?? 0;\n\n let newOffset;\n\n switch (align) {\n case \"center\":\n newOffset = { x: width / 2, y: height / 2 };\n break;\n case \"top\":\n newOffset = { x: width / 2, y: height + sideOffset };\n break;\n case \"top-left\":\n newOffset = { x: width + sideOffset, y: height + sideOffset };\n break;\n case \"top-right\":\n newOffset = { x: -sideOffset, y: height + sideOffset };\n break;\n case \"bottom\":\n newOffset = { x: width / 2, y: -sideOffset };\n break;\n case \"bottom-left\":\n newOffset = { x: width + sideOffset, y: -sideOffset };\n break;\n case \"bottom-right\":\n newOffset = { x: -sideOffset, y: -sideOffset };\n break;\n case \"left\":\n newOffset = { x: width + sideOffset, y: height / 2 };\n break;\n case \"right\":\n newOffset = { x: -sideOffset, y: height / 2 };\n break;\n default:\n newOffset = { x: 0, y: 0 };\n }\n\n return newOffset;\n }, [align, sideOffset]);\n\n React.useEffect(() => {\n const offset = calculateOffset();\n const cursorRect = cursorRef.current?.getBoundingClientRect();\n const cursorWidth = cursorRect?.width ?? 20;\n const cursorHeight = cursorRect?.height ?? 20;\n\n x.set(cursorPos.x - offset.x + cursorWidth / 2);\n y.set(cursorPos.y - offset.y + cursorHeight / 2);\n }, [calculateOffset, cursorPos, cursorRef, x, y]);\n\n // Determine follow content based on children or followText\n const getFollowContent = () => {\n if (children) return children;\n\n if (followText) {\n // If followText is a string, wrap it with default styling\n if (typeof followText === \"string\") {\n return (\n <div className=\"px-4 py-2 bg-white rounded-md shadow-lg text-sm font-medium\">\n {followText}\n </div>\n );\n }\n // If it's a ReactNode, render it directly\n return followText;\n }\n\n return null;\n };\n\n return (\n <AnimatePresence>\n {isActive && (\n <motion.div\n ref={cursorFollowRef}\n data-slot=\"cursor-follow\"\n className={cn(\n \"transform-[translate(-50%,-50%)] pointer-events-none z-9998 absolute\",\n className\n )}\n style={{ top: springY, left: springX, ...style }}\n initial={{ scale: 0, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n exit={{ scale: 0, opacity: 0 }}\n {...props}\n >\n {getFollowContent()}\n </motion.div>\n )}\n </AnimatePresence>\n );\n}\n\n// Hook for easy cursor setup (Method 2)\ntype useCursorFollowOptions = {\n /** Cursor variant type (preset key or custom ReactNode) */\n cursorType?: CursorVariant;\n /** Follow element content */\n followText?: React.ReactNode;\n /** Show follow element */\n showFollow?: boolean;\n /** Follow element alignment */\n align?: Align;\n /** Follow element side offset */\n sideOffset?: number;\n /** Follow element transition preset */\n transitionPreset?: TransitionPreset;\n /** Additional className for the container */\n className?: string;\n /** Additional style for the container */\n style?: React.CSSProperties;\n};\n\ntype UseCursorFollowType = {\n ref: React.RefObject<HTMLDivElement | null>;\n className: string;\n style: React.CSSProperties;\n \"data-cursor-container\": true;\n children: (children: React.ReactNode) => React.ReactElement;\n};\n\nfunction useCursorFollow(\n options: useCursorFollowOptions = {}\n): UseCursorFollowType {\n const {\n cursorType = \"default\",\n followText,\n showFollow,\n align = \"bottom-right\",\n sideOffset = 15,\n transitionPreset = \"normal\",\n className,\n style,\n } = options;\n\n const [cursorPos, setCursorPos] = React.useState({ x: 0, y: 0 });\n const [isActive, setIsActive] = React.useState(false);\n const containerRef = React.useRef<HTMLDivElement>(null);\n const cursorRef = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n if (!containerRef.current) return;\n\n const element = containerRef.current;\n if (getComputedStyle(element).position === \"static\") {\n element.style.position = \"relative\";\n }\n\n const handleMouseMove = (e: MouseEvent) => {\n const rect = element.getBoundingClientRect();\n setCursorPos({ x: e.clientX - rect.left, y: e.clientY - rect.top });\n setIsActive(true);\n };\n const handleMouseLeave = () => setIsActive(false);\n\n element.addEventListener(\"mousemove\", handleMouseMove);\n element.addEventListener(\"mouseleave\", handleMouseLeave);\n\n return () => {\n element.removeEventListener(\"mousemove\", handleMouseMove);\n element.removeEventListener(\"mouseleave\", handleMouseLeave);\n };\n }, []);\n\n // Only hide system cursor if cursorType is not 'default'\n const shouldHideSystemCursor = cursorType !== \"default\";\n\n React.useEffect(() => {\n if (!containerRef.current || !isActive || !shouldHideSystemCursor) return;\n const element = containerRef.current;\n element.style.cursor = \"none\";\n return () => {\n element.style.cursor = \"default\";\n };\n }, [isActive, shouldHideSystemCursor]);\n\n // Render function for cursor elements\n const renderCursorElements = React.useCallback(() => {\n if (!isActive) return null;\n\n return (\n <CursorContext.Provider\n value={{ cursorPos, isActive, containerRef, cursorRef }}\n >\n <Cursor cursorType={cursorType} />\n {(showFollow ?? followText !== undefined) && (\n <CursorFollow\n followText={followText}\n align={align}\n sideOffset={sideOffset}\n transitionPreset={transitionPreset}\n />\n )}\n </CursorContext.Provider>\n );\n }, [\n isActive,\n cursorPos,\n cursorType,\n followText,\n showFollow,\n align,\n sideOffset,\n transitionPreset,\n ]);\n\n // Return props that can be spread on the container element\n return {\n ref: containerRef,\n className: cn(\"relative\", className),\n style: { ...style },\n \"data-cursor-container\": true as const,\n children: (children: React.ReactNode) => (\n <>\n {children}\n {renderCursorElements()}\n </>\n ),\n };\n}\n\nexport {\n CursorProvider,\n Cursor,\n CursorFollow,\n useCursor,\n useCursorFollow,\n TRANSITION_PRESETS,\n type CursorContextType,\n type CursorProviderProps,\n type CursorProps,\n type CursorFollowProps,\n type CursorVariant,\n type CursorVariantKey,\n type Align,\n type useCursorFollowOptions,\n type TransitionPreset,\n};\n"],"names":["TRANSITION_PRESETS","CursorContext","React","useCursor","context","cursorVariants","jsx","CursorProvider","ref","children","cursorType","followText","showFollow","followAlign","followSideOffset","followTransition","props","cursorPos","setCursorPos","isActive","setIsActive","containerRef","cursorRef","parent","handleMouseMove","e","rect","handleMouseLeave","shouldShowCursor","shouldShowFollowElement","transitionConfig","Cursor","CursorFollow","className","style","x","useMotionValue","y","cursorContent","shouldHideSystemCursor","parentElement","AnimatePresence","motion","cn","sideOffset","align","transition","transitionPreset","cursorFollowRef","finalTransition","springX","useSpring","springY","calculateOffset","width","height","newOffset","offset","cursorRect","cursorWidth","cursorHeight","getFollowContent","useCursorFollow","options","element","renderCursorElements","jsxs","Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CursorFollow.js","sources":["../../../../src/components/Interactive/CursorFollow.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n motion,\n useMotionValue,\n useSpring,\n AnimatePresence,\n type HTMLMotionProps,\n type SpringOptions,\n} from \"motion/react\";\n\nimport { cn } from \"@dsui/ui/index\";\n\n// Transition presets\ntype TransitionPreset = \"slow\" | \"normal\" | \"fast\" | \"realtime\";\n\nconst TRANSITION_PRESETS: Record<TransitionPreset, SpringOptions> = {\n slow: { stiffness: 100, damping: 20, bounce: 0 },\n normal: { stiffness: 500, damping: 50, bounce: 0 },\n fast: { stiffness: 1000, damping: 80, bounce: 0 },\n realtime: { stiffness: 2000, damping: 100, bounce: 0 },\n};\n\ntype CursorContextType = {\n cursorPos: { x: number; y: number };\n isActive: boolean;\n containerRef: React.RefObject<HTMLDivElement | null>;\n cursorRef: React.RefObject<HTMLDivElement | null>;\n};\n\nconst CursorContext = React.createContext<CursorContextType | undefined>(\n undefined\n);\n\nconst useCursor = (): CursorContextType => {\n const context = React.useContext(CursorContext);\n if (!context) {\n throw new Error(\"useCursor must be used within a CursorProvider\");\n }\n return context;\n};\n\ntype Align =\n | \"top\"\n | \"top-left\"\n | \"top-right\"\n | \"bottom\"\n | \"bottom-left\"\n | \"bottom-right\"\n | \"left\"\n | \"right\"\n | \"center\";\n\ntype CursorVariantKey = \"default\" | \"pointer\";\ntype CursorVariant = CursorVariantKey | React.ReactNode;\n\n// Predefined cursor variants\nconst cursorVariants: Record<CursorVariantKey, React.ReactNode> = {\n default: null, // Use system cursor\n pointer: (\n <div className=\"ds:h-5 ds:w-5 ds:rounded-full ds:bg-white/30 ds:border-2 ds:border-white\" />\n ),\n};\n\ntype CursorProviderProps = React.ComponentProps<\"div\"> & {\n children: React.ReactNode;\n /** Auto-setup cursor with variant (preset key or custom ReactNode) */\n cursorType?: CursorVariant;\n /** Auto-setup follow element with content */\n followText?: React.ReactNode;\n /** Show follow element (default: true when followText is provided) */\n showFollow?: boolean;\n /** Follow element alignment */\n followAlign?: Align;\n /** Follow element side offset */\n followSideOffset?: number;\n /** Follow element transition preset */\n followTransition?: TransitionPreset;\n};\n\nfunction CursorProvider({\n ref,\n children,\n cursorType = \"default\",\n followText,\n showFollow,\n followAlign = \"bottom-right\",\n followSideOffset = 15,\n followTransition = \"normal\",\n ...props\n}: CursorProviderProps) {\n const [cursorPos, setCursorPos] = React.useState({ x: 0, y: 0 });\n const [isActive, setIsActive] = React.useState(false);\n const containerRef = React.useRef<HTMLDivElement>(null);\n const cursorRef = React.useRef<HTMLDivElement>(null);\n React.useImperativeHandle(ref as React.Ref<HTMLDivElement>, () => containerRef.current as HTMLDivElement);\n\n React.useEffect(() => {\n if (!containerRef.current) return;\n\n const parent = containerRef.current.parentElement;\n if (!parent) return;\n\n if (getComputedStyle(parent).position === \"static\") {\n parent.style.position = \"relative\";\n }\n\n const handleMouseMove = (e: MouseEvent) => {\n const rect = parent.getBoundingClientRect();\n setCursorPos({ x: e.clientX - rect.left, y: e.clientY - rect.top });\n setIsActive(true);\n };\n const handleMouseLeave = () => setIsActive(false);\n\n parent.addEventListener(\"mousemove\", handleMouseMove);\n parent.addEventListener(\"mouseleave\", handleMouseLeave);\n\n return () => {\n parent.removeEventListener(\"mousemove\", handleMouseMove);\n parent.removeEventListener(\"mouseleave\", handleMouseLeave);\n };\n }, []);\n\n // Auto-setup: determine if we should show cursor and follow\n const shouldShowCursor = cursorType !== undefined;\n const shouldShowFollowElement = showFollow ?? followText !== undefined;\n\n // Convert preset to SpringOptions\n const transitionConfig = TRANSITION_PRESETS[followTransition];\n\n return (\n <CursorContext.Provider\n value={{ cursorPos, isActive, containerRef, cursorRef }}\n >\n <div ref={containerRef} data-slot=\"cursor-provider\" {...props}>\n {children}\n\n {/* Auto-setup Cursor */}\n {shouldShowCursor && <Cursor cursorType={cursorType} />}\n\n {/* Auto-setup CursorFollow */}\n {shouldShowFollowElement && (\n <CursorFollow\n followText={followText}\n align={followAlign}\n sideOffset={followSideOffset}\n transition={transitionConfig}\n />\n )}\n </div>\n </CursorContext.Provider>\n );\n}\n\ntype CursorProps = HTMLMotionProps<\"div\"> & {\n children?: React.ReactNode;\n cursorType?: CursorVariant;\n};\n\nfunction Cursor({\n ref,\n children,\n cursorType = \"default\",\n className,\n style,\n ...props\n}: CursorProps) {\n const { cursorPos, isActive, containerRef, cursorRef } = useCursor();\n React.useImperativeHandle(ref as React.Ref<HTMLDivElement>, () => cursorRef.current as HTMLDivElement);\n\n const x = useMotionValue(0);\n const y = useMotionValue(0);\n\n // Determine which content to render\n const getCursorContent = () => {\n if (children) return children;\n\n // Check if cursorType is a preset key\n if (typeof cursorType === \"string\" && cursorType in cursorVariants) {\n return cursorVariants[cursorType as CursorVariantKey];\n }\n\n // Otherwise treat it as custom ReactNode\n return cursorType;\n };\n\n const cursorContent = getCursorContent();\n\n // Only hide system cursor if we have custom content to show\n const shouldHideSystemCursor = cursorContent !== null;\n\n React.useEffect(() => {\n const parentElement = containerRef.current?.parentElement;\n\n if (parentElement && isActive && shouldHideSystemCursor) {\n parentElement.style.cursor = \"none\";\n }\n\n return () => {\n if (parentElement) parentElement.style.cursor = \"default\";\n };\n }, [containerRef, isActive, shouldHideSystemCursor]);\n\n React.useEffect(() => {\n x.set(cursorPos.x);\n y.set(cursorPos.y);\n }, [cursorPos, x, y]);\n\n // Only render if we have content to show\n if (!cursorContent) return null;\n\n return (\n <AnimatePresence>\n {isActive && (\n <motion.div\n ref={cursorRef}\n data-slot=\"cursor\"\n className={cn(\n \"ds:transform-[translate(-50%,-50%)] ds:pointer-events-none ds:z-9999 ds:absolute\",\n className\n )}\n style={{ top: y, left: x, ...style }}\n initial={{ scale: 0, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n exit={{ scale: 0, opacity: 0 }}\n {...props}\n >\n {cursorContent}\n </motion.div>\n )}\n </AnimatePresence>\n );\n}\n\ntype CursorFollowProps = HTMLMotionProps<\"div\"> & {\n sideOffset?: number;\n align?: Align;\n transition?: SpringOptions;\n transitionPreset?: TransitionPreset;\n children?: React.ReactNode;\n followText?: React.ReactNode;\n};\n\nfunction CursorFollow({\n ref,\n sideOffset = 15,\n align = \"bottom-right\",\n children,\n className,\n style,\n followText,\n transition,\n transitionPreset = \"normal\",\n ...props\n}: CursorFollowProps) {\n const { cursorPos, isActive, cursorRef } = useCursor();\n const cursorFollowRef = React.useRef<HTMLDivElement>(null);\n React.useImperativeHandle(\n ref as React.Ref<HTMLDivElement>,\n () => cursorFollowRef.current as HTMLDivElement\n );\n\n const x = useMotionValue(0);\n const y = useMotionValue(0);\n\n // Use custom transition if provided, otherwise use preset\n const finalTransition = transition || TRANSITION_PRESETS[transitionPreset];\n\n const springX = useSpring(x, finalTransition);\n const springY = useSpring(y, finalTransition);\n\n const calculateOffset = React.useCallback(() => {\n const rect = cursorFollowRef.current?.getBoundingClientRect();\n const width = rect?.width ?? 0;\n const height = rect?.height ?? 0;\n\n let newOffset;\n\n switch (align) {\n case \"center\":\n newOffset = { x: width / 2, y: height / 2 };\n break;\n case \"top\":\n newOffset = { x: width / 2, y: height + sideOffset };\n break;\n case \"top-left\":\n newOffset = { x: width + sideOffset, y: height + sideOffset };\n break;\n case \"top-right\":\n newOffset = { x: -sideOffset, y: height + sideOffset };\n break;\n case \"bottom\":\n newOffset = { x: width / 2, y: -sideOffset };\n break;\n case \"bottom-left\":\n newOffset = { x: width + sideOffset, y: -sideOffset };\n break;\n case \"bottom-right\":\n newOffset = { x: -sideOffset, y: -sideOffset };\n break;\n case \"left\":\n newOffset = { x: width + sideOffset, y: height / 2 };\n break;\n case \"right\":\n newOffset = { x: -sideOffset, y: height / 2 };\n break;\n default:\n newOffset = { x: 0, y: 0 };\n }\n\n return newOffset;\n }, [align, sideOffset]);\n\n React.useEffect(() => {\n const offset = calculateOffset();\n const cursorRect = cursorRef.current?.getBoundingClientRect();\n const cursorWidth = cursorRect?.width ?? 20;\n const cursorHeight = cursorRect?.height ?? 20;\n\n x.set(cursorPos.x - offset.x + cursorWidth / 2);\n y.set(cursorPos.y - offset.y + cursorHeight / 2);\n }, [calculateOffset, cursorPos, cursorRef, x, y]);\n\n // Determine follow content based on children or followText\n const getFollowContent = () => {\n if (children) return children;\n\n if (followText) {\n // If followText is a string, wrap it with default styling\n if (typeof followText === \"string\") {\n return (\n <div className=\"ds:px-4 ds:py-2 ds:bg-white ds:rounded-md ds:shadow-lg ds:text-sm ds:font-medium\">\n {followText}\n </div>\n );\n }\n // If it's a ReactNode, render it directly\n return followText;\n }\n\n return null;\n };\n\n return (\n <AnimatePresence>\n {isActive && (\n <motion.div\n ref={cursorFollowRef}\n data-slot=\"cursor-follow\"\n className={cn(\n \"ds:transform-[translate(-50%,-50%)] ds:pointer-events-none ds:z-9998 ds:absolute\",\n className\n )}\n style={{ top: springY, left: springX, ...style }}\n initial={{ scale: 0, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n exit={{ scale: 0, opacity: 0 }}\n {...props}\n >\n {getFollowContent()}\n </motion.div>\n )}\n </AnimatePresence>\n );\n}\n\n// Hook for easy cursor setup (Method 2)\ntype useCursorFollowOptions = {\n /** Cursor variant type (preset key or custom ReactNode) */\n cursorType?: CursorVariant;\n /** Follow element content */\n followText?: React.ReactNode;\n /** Show follow element */\n showFollow?: boolean;\n /** Follow element alignment */\n align?: Align;\n /** Follow element side offset */\n sideOffset?: number;\n /** Follow element transition preset */\n transitionPreset?: TransitionPreset;\n /** Additional className for the container */\n className?: string;\n /** Additional style for the container */\n style?: React.CSSProperties;\n};\n\ntype UseCursorFollowType = {\n ref: React.RefObject<HTMLDivElement | null>;\n className: string;\n style: React.CSSProperties;\n \"data-cursor-container\": true;\n children: (children: React.ReactNode) => React.ReactElement;\n};\n\nfunction useCursorFollow(\n options: useCursorFollowOptions = {}\n): UseCursorFollowType {\n const {\n cursorType = \"default\",\n followText,\n showFollow,\n align = \"bottom-right\",\n sideOffset = 15,\n transitionPreset = \"normal\",\n className,\n style,\n } = options;\n\n const [cursorPos, setCursorPos] = React.useState({ x: 0, y: 0 });\n const [isActive, setIsActive] = React.useState(false);\n const containerRef = React.useRef<HTMLDivElement>(null);\n const cursorRef = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n if (!containerRef.current) return;\n\n const element = containerRef.current;\n if (getComputedStyle(element).position === \"static\") {\n element.style.position = \"relative\";\n }\n\n const handleMouseMove = (e: MouseEvent) => {\n const rect = element.getBoundingClientRect();\n setCursorPos({ x: e.clientX - rect.left, y: e.clientY - rect.top });\n setIsActive(true);\n };\n const handleMouseLeave = () => setIsActive(false);\n\n element.addEventListener(\"mousemove\", handleMouseMove);\n element.addEventListener(\"mouseleave\", handleMouseLeave);\n\n return () => {\n element.removeEventListener(\"mousemove\", handleMouseMove);\n element.removeEventListener(\"mouseleave\", handleMouseLeave);\n };\n }, []);\n\n // Only hide system cursor if cursorType is not 'default'\n const shouldHideSystemCursor = cursorType !== \"default\";\n\n React.useEffect(() => {\n if (!containerRef.current || !isActive || !shouldHideSystemCursor) return;\n const element = containerRef.current;\n element.style.cursor = \"none\";\n return () => {\n element.style.cursor = \"default\";\n };\n }, [isActive, shouldHideSystemCursor]);\n\n // Render function for cursor elements\n const renderCursorElements = React.useCallback(() => {\n if (!isActive) return null;\n\n return (\n <CursorContext.Provider\n value={{ cursorPos, isActive, containerRef, cursorRef }}\n >\n <Cursor cursorType={cursorType} />\n {(showFollow ?? followText !== undefined) && (\n <CursorFollow\n followText={followText}\n align={align}\n sideOffset={sideOffset}\n transitionPreset={transitionPreset}\n />\n )}\n </CursorContext.Provider>\n );\n }, [\n isActive,\n cursorPos,\n cursorType,\n followText,\n showFollow,\n align,\n sideOffset,\n transitionPreset,\n ]);\n\n // Return props that can be spread on the container element\n return {\n ref: containerRef,\n className: cn(\"ds:relative\", className),\n style: { ...style },\n \"data-cursor-container\": true as const,\n children: (children: React.ReactNode) => (\n <>\n {children}\n {renderCursorElements()}\n </>\n ),\n };\n}\n\nexport {\n CursorProvider,\n Cursor,\n CursorFollow,\n useCursor,\n useCursorFollow,\n TRANSITION_PRESETS,\n type CursorContextType,\n type CursorProviderProps,\n type CursorProps,\n type CursorFollowProps,\n type CursorVariant,\n type CursorVariantKey,\n type Align,\n type useCursorFollowOptions,\n type TransitionPreset,\n};\n"],"names":["TRANSITION_PRESETS","CursorContext","React","useCursor","context","cursorVariants","jsx","CursorProvider","ref","children","cursorType","followText","showFollow","followAlign","followSideOffset","followTransition","props","cursorPos","setCursorPos","isActive","setIsActive","containerRef","cursorRef","parent","handleMouseMove","e","rect","handleMouseLeave","shouldShowCursor","shouldShowFollowElement","transitionConfig","Cursor","CursorFollow","className","style","x","useMotionValue","y","cursorContent","shouldHideSystemCursor","parentElement","AnimatePresence","motion","cn","sideOffset","align","transition","transitionPreset","cursorFollowRef","finalTransition","springX","useSpring","springY","calculateOffset","width","height","newOffset","offset","cursorRect","cursorWidth","cursorHeight","getFollowContent","useCursorFollow","options","element","renderCursorElements","jsxs","Fragment"],"mappings":"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"}
|