@sth87/shadcn-design-system 0.0.35 → 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/README.md +20 -2
- 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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WheelColumn.js","sources":["../../../src/components/WheelColumn.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { memo, useCallback, useEffect, useRef, useState } from \"react\";\nimport { cn } from \"@dsui/ui/index\";\nimport type { CalendarColor } from \"./Calendar/Calendar\";\n\nconst pad = (num: number): string => String(num).padStart(2, \"0\");\n\n// Color variants for time picker items\nconst getColorClass = (color: CalendarColor = \"primary\"): string => {\n const colorMap = {\n primary: \"text-primary\",\n secondary: \"text-secondary\",\n accent: \"text-accent\",\n destructive: \"text-destructive\",\n muted: \"text-muted-foreground\",\n success: \"text-success\",\n error: \"text-error\",\n warning: \"text-warning\",\n foreground: \"text-foreground\",\n };\n return colorMap[color];\n};\n\ntype TimeColumnwheelProps = {\n items: number[];\n value: number | undefined;\n onChange: (val: number) => void;\n timeLabel?: string;\n itemClassName?: string;\n isItemDisabled: (item: number) => boolean;\n disabled: boolean;\n color?: CalendarColor;\n};\n\nexport const TimeColumnwheel = memo(\n React.forwardRef<HTMLDivElement, TimeColumnwheelProps>(\n (\n {\n items,\n value: selectedValue,\n onChange: onChangeCol,\n timeLabel,\n itemClassName,\n isItemDisabled,\n disabled,\n color = \"primary\",\n },\n ref\n ) => {\n const debounceTimerRef = useRef<ReturnType<typeof setTimeout> | null>(\n null\n );\n const containerRef = useRef<HTMLDivElement | null>(null);\n const [scrollTop, setScrollTop] = useState(0);\n\n // Debounced scroll handler\n const handleScroll = useCallback(() => {\n if (!containerRef.current || disabled) return;\n\n const container = containerRef.current;\n const currentScrollTop = container.scrollTop;\n setScrollTop(currentScrollTop);\n\n // Clear previous timer\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n\n // Set new timer\n debounceTimerRef.current = setTimeout(() => {\n const scrollTop = container.scrollTop;\n const itemHeight = 40; // h-10 = 40px\n const containerHeight = container.clientHeight;\n const dividerCenter = containerHeight / 2; // Divider lines ở giữa container\n\n // Calculate which item is at the divider center\n // Account for top spacer (h-30 = 120px)\n const adjustedScrollTop = scrollTop - 120;\n const dividerPosition = adjustedScrollTop + dividerCenter;\n\n // Find the item whose center is closest to divider center\n let closestItem = items[0];\n let minDistance = Infinity;\n\n items.forEach((item, index) => {\n const itemTop = index * itemHeight;\n const itemCenter = itemTop + itemHeight / 2;\n const distance = Math.abs(itemCenter - dividerPosition);\n\n if (distance < minDistance) {\n minDistance = distance;\n closestItem = item;\n }\n });\n\n // Only trigger change if different from current value and not disabled\n if (!isItemDisabled(closestItem)) {\n // Always update if item is different, or snap to correct position\n if (closestItem !== selectedValue) {\n onChangeCol(closestItem);\n } else {\n // Re-trigger to ensure input reflects the snapped value\n // This handles cases where user scrolled slightly but ended on same value\n const itemIndex = items.indexOf(closestItem);\n const targetScrollTop =\n 120 +\n itemIndex * itemHeight -\n containerHeight / 2 +\n itemHeight / 2;\n\n if (Math.abs(container.scrollTop - targetScrollTop) > 5) {\n container.scrollTo({\n top: targetScrollTop,\n behavior: \"smooth\",\n });\n }\n }\n }\n }, 100); // 100ms debounce for faster response\n }, [items, selectedValue, onChangeCol, isItemDisabled, disabled]);\n\n // Set up scroll listener\n useEffect(() => {\n const container = containerRef.current;\n if (container) {\n container.addEventListener(\"scroll\", handleScroll, { passive: true });\n return () => {\n container.removeEventListener(\"scroll\", handleScroll);\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n };\n }\n }, [handleScroll]);\n\n // Scroll to selected value when it changes or on mount\n useEffect(() => {\n if (containerRef.current && selectedValue !== undefined) {\n const itemIndex = items.indexOf(selectedValue);\n if (itemIndex !== -1) {\n const itemHeight = 40;\n const containerHeight = containerRef.current.clientHeight;\n const targetScrollTop =\n 120 +\n itemIndex * itemHeight -\n containerHeight / 2 +\n itemHeight / 2;\n\n containerRef.current.scrollTo({\n top: targetScrollTop,\n behavior: \"smooth\",\n });\n }\n }\n }, [selectedValue, items]);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n };\n }, []);\n\n const getItemStyle = (index: number, isSelected: boolean) => {\n const itemHeight = 40;\n const containerHeight = 256; // h-64 = 256px\n const centerY = containerHeight / 2;\n const itemCenterY = 120 + index * itemHeight + itemHeight / 2; // 120px spacer + item position\n const distanceFromCenter = Math.abs(\n itemCenterY - (scrollTop + centerY)\n );\n const maxDistance = containerHeight / 2;\n\n // Calculate opacity and scale based on distance\n const opacity = Math.max(\n 0.3,\n 1 - (distanceFromCenter / maxDistance) * 0.7\n );\n const fontSize = isSelected ? \"1.3rem\" : \"1rem\";\n\n return {\n opacity,\n fontSize,\n transition: \"opacity 0.2s ease, transform 0.2s ease\",\n };\n };\n\n return (\n <div className=\"flex flex-col items-center gap-2 w-full h-full max-h-72\">\n {timeLabel && (\n <div className=\"text-xs font-semibold text-muted-foreground uppercase p-2 border-b w-full text-center h-8\">\n {timeLabel}\n </div>\n )}\n <div\n className={cn(\n \"relative w-full\",\n timeLabel ? \"h-[calc(100%_-_2rem)]\" : \" h-full\"\n )}\n >\n {/* wheel style divider lines */}\n <div className=\"absolute top-1/2 left-0 right-0 h-10 -translate-y-1/2 border-t border-b border-border pointer-events-none z-10\" />\n\n <div\n ref={(el) => {\n containerRef.current = el;\n if (typeof ref === \"function\") {\n ref(el);\n } else if (ref) {\n ref.current = el;\n }\n }}\n className={cn(\n \"relative h-full w-full min-w-20 min-h-60 overflow-y-scroll scroll-smooth\",\n \"[&::-webkit-scrollbar]:w-1 [&::-webkit-scrollbar-track]:bg-transparent\",\n \"[&::-webkit-scrollbar-thumb]:bg-border [&::-webkit-scrollbar-thumb]:rounded\",\n \"flex flex-col snap-y snap-mandatory\",\n itemClassName\n )}\n style={{\n maskImage: `linear-gradient(to bottom, transparent 0%, black 15%, black 85%, transparent 100%)`,\n WebkitMaskImage: `linear-gradient(to bottom, transparent 0%, black 15%, black 85%, transparent 100%)`,\n }}\n >\n {/* Spacer Top */}\n <div className=\"h-[calc(50%-1.25rem)] flex-shrink-0\" />\n\n {items.map((item, index) => {\n const itemDisabled = isItemDisabled(item);\n const isSelected =\n selectedValue !== undefined && item === selectedValue;\n const itemStyle = getItemStyle(index, isSelected);\n\n return (\n <div\n key={item}\n onClick={\n disabled || itemDisabled\n ? undefined\n : () => onChangeCol(item)\n }\n data-selected={isSelected || undefined}\n className={cn(\n \"h-10 flex-shrink-0 flex items-center justify-center transition-all snap-center\",\n \"cursor-pointer text-lg font-medium select-none\",\n \"disabled:opacity-30 disabled:cursor-not-allowed disabled:line-through\",\n isSelected\n ? `${getColorClass(color)} font-bold`\n : \"text-muted-foreground\"\n )}\n style={itemStyle}\n >\n {pad(item)}\n </div>\n );\n })}\n\n {/* Spacer Bottom */}\n <div className=\"h-[calc(50%-1.25rem)] flex-shrink-0\" />\n </div>\n </div>\n </div>\n );\n }\n )\n);\n\nTimeColumnwheel.displayName = \"TimeColumnwheel\";\n"],"names":["pad","num","getColorClass","color","TimeColumnwheel","memo","React","items","selectedValue","onChangeCol","timeLabel","itemClassName","isItemDisabled","disabled","ref","debounceTimerRef","useRef","containerRef","scrollTop","setScrollTop","useState","handleScroll","useCallback","container","currentScrollTop","itemHeight","containerHeight","dividerCenter","dividerPosition","closestItem","minDistance","item","index","itemCenter","distance","targetScrollTop","useEffect","itemIndex","getItemStyle","isSelected","itemCenterY","distanceFromCenter","maxDistance","jsxs","jsx","cn","el","itemDisabled","itemStyle"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"WheelColumn.js","sources":["../../../src/components/WheelColumn.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { memo, useCallback, useEffect, useRef, useState } from \"react\";\nimport { cn } from \"@dsui/ui/index\";\nimport type { CalendarColor } from \"./Calendar/Calendar\";\n\nconst pad = (num: number): string => String(num).padStart(2, \"0\");\n\n// Color variants for time picker items\nconst getColorClass = (color: CalendarColor = \"primary\"): string => {\n const colorMap = {\n primary: \"text-primary\",\n secondary: \"text-secondary\",\n accent: \"text-accent\",\n destructive: \"text-destructive\",\n muted: \"text-muted-foreground\",\n success: \"text-success\",\n error: \"text-error\",\n warning: \"text-warning\",\n foreground: \"text-foreground\",\n };\n return colorMap[color];\n};\n\ntype TimeColumnwheelProps = {\n items: number[];\n value: number | undefined;\n onChange: (val: number) => void;\n timeLabel?: string;\n itemClassName?: string;\n isItemDisabled: (item: number) => boolean;\n disabled: boolean;\n color?: CalendarColor;\n};\n\nexport const TimeColumnwheel = memo(\n React.forwardRef<HTMLDivElement, TimeColumnwheelProps>(\n (\n {\n items,\n value: selectedValue,\n onChange: onChangeCol,\n timeLabel,\n itemClassName,\n isItemDisabled,\n disabled,\n color = \"primary\",\n },\n ref\n ) => {\n const debounceTimerRef = useRef<ReturnType<typeof setTimeout> | null>(\n null\n );\n const containerRef = useRef<HTMLDivElement | null>(null);\n const [scrollTop, setScrollTop] = useState(0);\n\n // Debounced scroll handler\n const handleScroll = useCallback(() => {\n if (!containerRef.current || disabled) return;\n\n const container = containerRef.current;\n const currentScrollTop = container.scrollTop;\n setScrollTop(currentScrollTop);\n\n // Clear previous timer\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n\n // Set new timer\n debounceTimerRef.current = setTimeout(() => {\n const scrollTop = container.scrollTop;\n const itemHeight = 40; // h-10 = 40px\n const containerHeight = container.clientHeight;\n const dividerCenter = containerHeight / 2; // Divider lines ở giữa container\n\n // Calculate which item is at the divider center\n // Account for top spacer (h-30 = 120px)\n const adjustedScrollTop = scrollTop - 120;\n const dividerPosition = adjustedScrollTop + dividerCenter;\n\n // Find the item whose center is closest to divider center\n let closestItem = items[0];\n let minDistance = Infinity;\n\n items.forEach((item, index) => {\n const itemTop = index * itemHeight;\n const itemCenter = itemTop + itemHeight / 2;\n const distance = Math.abs(itemCenter - dividerPosition);\n\n if (distance < minDistance) {\n minDistance = distance;\n closestItem = item;\n }\n });\n\n // Only trigger change if different from current value and not disabled\n if (!isItemDisabled(closestItem)) {\n // Always update if item is different, or snap to correct position\n if (closestItem !== selectedValue) {\n onChangeCol(closestItem);\n } else {\n // Re-trigger to ensure input reflects the snapped value\n // This handles cases where user scrolled slightly but ended on same value\n const itemIndex = items.indexOf(closestItem);\n const targetScrollTop =\n 120 +\n itemIndex * itemHeight -\n containerHeight / 2 +\n itemHeight / 2;\n\n if (Math.abs(container.scrollTop - targetScrollTop) > 5) {\n container.scrollTo({\n top: targetScrollTop,\n behavior: \"smooth\",\n });\n }\n }\n }\n }, 100); // 100ms debounce for faster response\n }, [items, selectedValue, onChangeCol, isItemDisabled, disabled]);\n\n // Set up scroll listener\n useEffect(() => {\n const container = containerRef.current;\n if (container) {\n container.addEventListener(\"scroll\", handleScroll, { passive: true });\n return () => {\n container.removeEventListener(\"scroll\", handleScroll);\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n };\n }\n }, [handleScroll]);\n\n // Scroll to selected value when it changes or on mount\n useEffect(() => {\n if (containerRef.current && selectedValue !== undefined) {\n const itemIndex = items.indexOf(selectedValue);\n if (itemIndex !== -1) {\n const itemHeight = 40;\n const containerHeight = containerRef.current.clientHeight;\n const targetScrollTop =\n 120 +\n itemIndex * itemHeight -\n containerHeight / 2 +\n itemHeight / 2;\n\n containerRef.current.scrollTo({\n top: targetScrollTop,\n behavior: \"smooth\",\n });\n }\n }\n }, [selectedValue, items]);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n };\n }, []);\n\n const getItemStyle = (index: number, isSelected: boolean) => {\n const itemHeight = 40;\n const containerHeight = 256; // h-64 = 256px\n const centerY = containerHeight / 2;\n const itemCenterY = 120 + index * itemHeight + itemHeight / 2; // 120px spacer + item position\n const distanceFromCenter = Math.abs(\n itemCenterY - (scrollTop + centerY)\n );\n const maxDistance = containerHeight / 2;\n\n // Calculate opacity and scale based on distance\n const opacity = Math.max(\n 0.3,\n 1 - (distanceFromCenter / maxDistance) * 0.7\n );\n const fontSize = isSelected ? \"1.3rem\" : \"1rem\";\n\n return {\n opacity,\n fontSize,\n transition: \"opacity 0.2s ease, transform 0.2s ease\",\n };\n };\n\n return (\n <div className=\"ds:flex ds:flex-col ds:items-center ds:gap-2 ds:w-full ds:h-full ds:max-h-72\">\n {timeLabel && (\n <div className=\"ds:text-xs ds:font-semibold ds:text-muted-foreground ds:uppercase ds:p-2 ds:border-b ds:w-full ds:text-center ds:h-8\">\n {timeLabel}\n </div>\n )}\n <div\n className={cn(\n \"ds:relative ds:w-full\",\n timeLabel ? \"ds:h-[calc(100%_-_2rem)]\" : \" ds:h-full\"\n )}\n >\n {/* wheel style divider lines */}\n <div className=\"ds:absolute ds:top-1/2 ds:left-0 ds:right-0 ds:h-10 ds:-translate-y-1/2 ds:border-t ds:border-b ds:border-border ds:pointer-events-none ds:z-10\" />\n\n <div\n ref={(el) => {\n containerRef.current = el;\n if (typeof ref === \"function\") {\n ref(el);\n } else if (ref) {\n ref.current = el;\n }\n }}\n className={cn(\n \"ds:relative ds:h-full ds:w-full ds:min-w-20 ds:min-h-60 ds:overflow-y-scroll ds:scroll-smooth\",\n \"ds:[&::-webkit-scrollbar]:w-1 ds:[&::-webkit-scrollbar-track]:bg-transparent\",\n \"ds:[&::-webkit-scrollbar-thumb]:bg-border ds:[&::-webkit-scrollbar-thumb]:rounded\",\n \"ds:flex ds:flex-col ds:snap-y ds:snap-mandatory\",\n itemClassName\n )}\n style={{\n maskImage: `linear-gradient(to bottom, transparent 0%, black 15%, black 85%, transparent 100%)`,\n WebkitMaskImage: `linear-gradient(to bottom, transparent 0%, black 15%, black 85%, transparent 100%)`,\n }}\n >\n {/* Spacer Top */}\n <div className=\"ds:h-[calc(50%-1.25rem)] ds:flex-shrink-0\" />\n\n {items.map((item, index) => {\n const itemDisabled = isItemDisabled(item);\n const isSelected =\n selectedValue !== undefined && item === selectedValue;\n const itemStyle = getItemStyle(index, isSelected);\n\n return (\n <div\n key={item}\n onClick={\n disabled || itemDisabled\n ? undefined\n : () => onChangeCol(item)\n }\n data-selected={isSelected || undefined}\n className={cn(\n \"ds:h-10 ds:flex-shrink-0 ds:flex ds:items-center ds:justify-center ds:transition-all ds:snap-center\",\n \"ds:cursor-pointer ds:text-lg ds:font-medium ds:select-none\",\n \"ds:disabled:opacity-30 ds:disabled:cursor-not-allowed ds:disabled:line-through\",\n isSelected\n ? `${getColorClass(color)} ds:font-bold`\n : \"ds:text-muted-foreground\"\n )}\n style={itemStyle}\n >\n {pad(item)}\n </div>\n );\n })}\n\n {/* Spacer Bottom */}\n <div className=\"ds:h-[calc(50%-1.25rem)] ds:flex-shrink-0\" />\n </div>\n </div>\n </div>\n );\n }\n )\n);\n\nTimeColumnwheel.displayName = \"TimeColumnwheel\";\n"],"names":["pad","num","getColorClass","color","TimeColumnwheel","memo","React","items","selectedValue","onChangeCol","timeLabel","itemClassName","isItemDisabled","disabled","ref","debounceTimerRef","useRef","containerRef","scrollTop","setScrollTop","useState","handleScroll","useCallback","container","currentScrollTop","itemHeight","containerHeight","dividerCenter","dividerPosition","closestItem","minDistance","item","index","itemCenter","distance","targetScrollTop","useEffect","itemIndex","getItemStyle","isSelected","itemCenterY","distanceFromCenter","maxDistance","jsxs","jsx","cn","el","itemDisabled","itemStyle"],"mappings":"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"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { jsx as T, jsxs as A } from "react/jsx-runtime";
|
|
2
2
|
import { motion as E } from "motion/react";
|
|
3
3
|
import { useState as K, useRef as V, useEffect as D, useMemo as y } from "react";
|
|
4
|
-
const F = (
|
|
4
|
+
const F = (r, a) => {
|
|
5
5
|
const p = /* @__PURE__ */ new Set([
|
|
6
|
-
...Object.keys(
|
|
6
|
+
...Object.keys(r),
|
|
7
7
|
...a.flatMap((t) => Object.keys(t))
|
|
8
8
|
]), n = {};
|
|
9
9
|
return p.forEach((t) => {
|
|
10
|
-
n[t] = [
|
|
10
|
+
n[t] = [r[t], ...a.map((l) => l[t])];
|
|
11
11
|
}), n;
|
|
12
12
|
}, _ = ({
|
|
13
|
-
text:
|
|
13
|
+
text: r = "",
|
|
14
14
|
delay: a = 200,
|
|
15
15
|
className: p = "",
|
|
16
16
|
animateBy: n = "words",
|
|
@@ -18,21 +18,21 @@ const F = (s, a) => {
|
|
|
18
18
|
threshold: l = 0.1,
|
|
19
19
|
rootMargin: f = "0px",
|
|
20
20
|
animationFrom: b,
|
|
21
|
-
animationTo:
|
|
22
|
-
easing:
|
|
23
|
-
onAnimationComplete:
|
|
24
|
-
stepDuration:
|
|
21
|
+
animationTo: d,
|
|
22
|
+
easing: w = (o) => o,
|
|
23
|
+
onAnimationComplete: h,
|
|
24
|
+
stepDuration: x = 0.35
|
|
25
25
|
}) => {
|
|
26
|
-
const o = n === "words" ?
|
|
26
|
+
const o = n === "words" ? r.split(" ") : r.split(""), [v, g] = K(!1), i = V(null);
|
|
27
27
|
D(() => {
|
|
28
28
|
if (!i.current) return;
|
|
29
|
-
const
|
|
29
|
+
const s = new IntersectionObserver(
|
|
30
30
|
([e]) => {
|
|
31
|
-
e.isIntersecting && (g(!0),
|
|
31
|
+
e.isIntersecting && (g(!0), s.unobserve(i.current));
|
|
32
32
|
},
|
|
33
33
|
{ threshold: l, rootMargin: f }
|
|
34
34
|
);
|
|
35
|
-
return
|
|
35
|
+
return s.observe(i.current), () => s.disconnect();
|
|
36
36
|
}, [l, f]);
|
|
37
37
|
const j = y(
|
|
38
38
|
() => t === "top" ? { filter: "blur(10px)", opacity: 0, y: -50 } : { filter: "blur(10px)", opacity: 0, y: 50 },
|
|
@@ -47,16 +47,16 @@ const F = (s, a) => {
|
|
|
47
47
|
{ filter: "blur(0px)", opacity: 1, y: 0 }
|
|
48
48
|
],
|
|
49
49
|
[t]
|
|
50
|
-
), u = b ?? j, m =
|
|
50
|
+
), u = b ?? j, m = d ?? S, c = m.length + 1, k = x * (c - 1), C = Array.from(
|
|
51
51
|
{ length: c },
|
|
52
|
-
(
|
|
52
|
+
(s, e) => c === 1 ? 0 : e / (c - 1)
|
|
53
53
|
);
|
|
54
|
-
return /* @__PURE__ */ T("p", { ref: i, className: `blur-text ${p} flex flex-wrap`, children: o.map((
|
|
54
|
+
return /* @__PURE__ */ T("p", { ref: i, className: `ds:blur-text ${p} ds:flex ds:flex-wrap`, children: o.map((s, e) => {
|
|
55
55
|
const I = F(u, m), O = {
|
|
56
56
|
duration: k,
|
|
57
57
|
times: C,
|
|
58
58
|
delay: e * a / 1e3,
|
|
59
|
-
ease:
|
|
59
|
+
ease: w
|
|
60
60
|
};
|
|
61
61
|
return /* @__PURE__ */ A(
|
|
62
62
|
E.span,
|
|
@@ -64,13 +64,13 @@ const F = (s, a) => {
|
|
|
64
64
|
initial: u,
|
|
65
65
|
animate: v ? I : u,
|
|
66
66
|
transition: O,
|
|
67
|
-
onAnimationComplete: e === o.length - 1 ?
|
|
67
|
+
onAnimationComplete: e === o.length - 1 ? h : void 0,
|
|
68
68
|
style: {
|
|
69
69
|
display: "inline-block",
|
|
70
70
|
willChange: "transform, filter, opacity"
|
|
71
71
|
},
|
|
72
72
|
children: [
|
|
73
|
-
|
|
73
|
+
s === " " ? " " : s,
|
|
74
74
|
n === "words" && e < o.length - 1 && " "
|
|
75
75
|
]
|
|
76
76
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlurText.js","sources":["../../../../src/lib/TextAnimation/BlurText.tsx"],"sourcesContent":["\"use client\";\nimport { motion, type Transition, type Easing } from \"motion/react\";\nimport { useEffect, useRef, useState, useMemo } from \"react\";\ntype BlurTextProps = {\n text?: string;\n delay?: number;\n className?: string;\n animateBy?: \"words\" | \"letters\";\n direction?: \"top\" | \"bottom\";\n threshold?: number;\n rootMargin?: string;\n animationFrom?: Record<string, string | number>;\n animationTo?: Array<Record<string, string | number>>;\n easing?: Easing | Easing[];\n onAnimationComplete?: () => void;\n stepDuration?: number;\n};\nconst buildKeyframes = (\n from: Record<string, string | number>,\n steps: Array<Record<string, string | number>>\n): Record<string, Array<string | number>> => {\n const keys = new Set<string>([\n ...Object.keys(from),\n ...steps.flatMap((s) => Object.keys(s)),\n ]);\n const keyframes: Record<string, Array<string | number>> = {};\n keys.forEach((k) => {\n keyframes[k] = [from[k], ...steps.map((s) => s[k])];\n });\n return keyframes;\n};\nconst BlurText: React.FC<BlurTextProps> = ({\n text = \"\",\n delay = 200,\n className = \"\",\n animateBy = \"words\",\n direction = \"top\",\n threshold = 0.1,\n rootMargin = \"0px\",\n animationFrom,\n animationTo,\n easing = (t: number) => t,\n onAnimationComplete,\n stepDuration = 0.35,\n}) => {\n const elements = animateBy === \"words\" ? text.split(\" \") : text.split(\"\");\n const [inView, setInView] = useState(false);\n const ref = useRef<HTMLParagraphElement>(null);\n useEffect(() => {\n if (!ref.current) return;\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) {\n setInView(true);\n observer.unobserve(ref.current as Element);\n }\n },\n { threshold, rootMargin }\n );\n observer.observe(ref.current);\n return () => observer.disconnect();\n }, [threshold, rootMargin]);\n const defaultFrom = useMemo(\n () =>\n direction === \"top\"\n ? { filter: \"blur(10px)\", opacity: 0, y: -50 }\n : { filter: \"blur(10px)\", opacity: 0, y: 50 },\n [direction]\n );\n const defaultTo = useMemo(\n () => [\n {\n filter: \"blur(5px)\",\n opacity: 0.5,\n y: direction === \"top\" ? 5 : -5,\n },\n { filter: \"blur(0px)\", opacity: 1, y: 0 },\n ],\n [direction]\n );\n const fromSnapshot = animationFrom ?? defaultFrom;\n const toSnapshots = animationTo ?? defaultTo;\n const stepCount = toSnapshots.length + 1;\n const totalDuration = stepDuration * (stepCount - 1);\n const times = Array.from({ length: stepCount }, (_, i) =>\n stepCount === 1 ? 0 : i / (stepCount - 1)\n );\n return (\n <p ref={ref} className={`blur-text ${className} flex flex-wrap`}>\n {elements.map((segment, index) => {\n const animateKeyframes = buildKeyframes(fromSnapshot, toSnapshots);\n const spanTransition: Transition = {\n duration: totalDuration,\n times,\n delay: (index * delay) / 1000,\n ease: easing,\n };\n return (\n <motion.span\n key={index}\n initial={fromSnapshot}\n animate={inView ? animateKeyframes : fromSnapshot}\n transition={spanTransition}\n onAnimationComplete={\n index === elements.length - 1 ? onAnimationComplete : undefined\n }\n style={{\n display: \"inline-block\",\n willChange: \"transform, filter, opacity\",\n }}\n >\n {segment === \" \" ? \"\\u00A0\" : segment}\n {animateBy === \"words\" && index < elements.length - 1 && \"\\u00A0\"}\n </motion.span>\n );\n })}\n </p>\n );\n};\nexport default BlurText;\n"],"names":["buildKeyframes","from","steps","keys","s","keyframes","k","BlurText","text","delay","className","animateBy","direction","threshold","rootMargin","animationFrom","animationTo","easing","t","onAnimationComplete","stepDuration","elements","inView","setInView","useState","ref","useRef","useEffect","observer","entry","defaultFrom","useMemo","defaultTo","fromSnapshot","toSnapshots","stepCount","totalDuration","times","_","i","jsx","segment","index","animateKeyframes","spanTransition","jsxs","motion"],"mappings":";;;AAiBA,MAAMA,IAAiB,CACrBC,GACAC,MAC2C;AAC3C,QAAMC,wBAAW,IAAY;AAAA,IAC3B,GAAG,OAAO,KAAKF,CAAI;AAAA,IACnB,GAAGC,EAAM,QAAQ,CAACE,MAAM,OAAO,KAAKA,CAAC,CAAC;AAAA,EAAA,CACvC,GACKC,IAAoD,CAAA;AAC1D,SAAAF,EAAK,QAAQ,CAACG,MAAM;AAClB,IAAAD,EAAUC,CAAC,IAAI,CAACL,EAAKK,CAAC,GAAG,GAAGJ,EAAM,IAAI,CAACE,MAAMA,EAAEE,CAAC,CAAC,CAAC;AAAA,EACpD,CAAC,GACMD;AACT,GACME,IAAoC,CAAC;AAAA,EACzC,MAAAC,IAAO;AAAA,EACP,OAAAC,IAAQ;AAAA,EACR,WAAAC,IAAY;AAAA,EACZ,WAAAC,IAAY;AAAA,EACZ,WAAAC,IAAY;AAAA,EACZ,WAAAC,IAAY;AAAA,EACZ,YAAAC,IAAa;AAAA,EACb,eAAAC;AAAA,EACA,aAAAC;AAAA,EACA,QAAAC,IAAS,CAACC,MAAcA;AAAA,EACxB,qBAAAC;AAAA,EACA,cAAAC,IAAe;AACjB,MAAM;AACJ,QAAMC,IAAWV,MAAc,UAAUH,EAAK,MAAM,GAAG,IAAIA,EAAK,MAAM,EAAE,GAClE,CAACc,GAAQC,CAAS,IAAIC,EAAS,EAAK,GACpCC,IAAMC,EAA6B,IAAI;AAC7C,EAAAC,EAAU,MAAM;AACd,QAAI,CAACF,EAAI,QAAS;AAClB,UAAMG,IAAW,IAAI;AAAA,MACnB,CAAC,CAACC,CAAK,MAAM;AACX,QAAIA,EAAM,mBACRN,EAAU,EAAI,GACdK,EAAS,UAAUH,EAAI,OAAkB;AAAA,MAE7C;AAAA,MACA,EAAE,WAAAZ,GAAW,YAAAC,EAAA;AAAA,IAAW;AAE1B,WAAAc,EAAS,QAAQH,EAAI,OAAO,GACrB,MAAMG,EAAS,WAAA;AAAA,EACxB,GAAG,CAACf,GAAWC,CAAU,CAAC;AAC1B,QAAMgB,IAAcC;AAAA,IAClB,MACEnB,MAAc,QACV,EAAE,QAAQ,cAAc,SAAS,GAAG,GAAG,IAAA,IACvC,EAAE,QAAQ,cAAc,SAAS,GAAG,GAAG,GAAA;AAAA,IAC7C,CAACA,CAAS;AAAA,EAAA,GAENoB,IAAYD;AAAA,IAChB,MAAM;AAAA,MACJ;AAAA,QACE,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,GAAGnB,MAAc,QAAQ,IAAI;AAAA,MAAA;AAAA,MAE/B,EAAE,QAAQ,aAAa,SAAS,GAAG,GAAG,EAAA;AAAA,IAAE;AAAA,IAE1C,CAACA,CAAS;AAAA,EAAA,GAENqB,IAAelB,KAAiBe,GAChCI,IAAclB,KAAegB,GAC7BG,IAAYD,EAAY,SAAS,GACjCE,IAAgBhB,KAAgBe,IAAY,IAC5CE,IAAQ,MAAM;AAAA,IAAK,EAAE,QAAQF,EAAA;AAAA,IAAa,CAACG,GAAGC,MAClDJ,MAAc,IAAI,IAAII,KAAKJ,IAAY;AAAA,EAAA;AAEzC,SACE,gBAAAK,EAAC,KAAA,EAAE,KAAAf,GAAU,WAAW,
|
|
1
|
+
{"version":3,"file":"BlurText.js","sources":["../../../../src/lib/TextAnimation/BlurText.tsx"],"sourcesContent":["\"use client\";\nimport { motion, type Transition, type Easing } from \"motion/react\";\nimport { useEffect, useRef, useState, useMemo } from \"react\";\ntype BlurTextProps = {\n text?: string;\n delay?: number;\n className?: string;\n animateBy?: \"words\" | \"letters\";\n direction?: \"top\" | \"bottom\";\n threshold?: number;\n rootMargin?: string;\n animationFrom?: Record<string, string | number>;\n animationTo?: Array<Record<string, string | number>>;\n easing?: Easing | Easing[];\n onAnimationComplete?: () => void;\n stepDuration?: number;\n};\nconst buildKeyframes = (\n from: Record<string, string | number>,\n steps: Array<Record<string, string | number>>\n): Record<string, Array<string | number>> => {\n const keys = new Set<string>([\n ...Object.keys(from),\n ...steps.flatMap((s) => Object.keys(s)),\n ]);\n const keyframes: Record<string, Array<string | number>> = {};\n keys.forEach((k) => {\n keyframes[k] = [from[k], ...steps.map((s) => s[k])];\n });\n return keyframes;\n};\nconst BlurText: React.FC<BlurTextProps> = ({\n text = \"\",\n delay = 200,\n className = \"\",\n animateBy = \"words\",\n direction = \"top\",\n threshold = 0.1,\n rootMargin = \"0px\",\n animationFrom,\n animationTo,\n easing = (t: number) => t,\n onAnimationComplete,\n stepDuration = 0.35,\n}) => {\n const elements = animateBy === \"words\" ? text.split(\" \") : text.split(\"\");\n const [inView, setInView] = useState(false);\n const ref = useRef<HTMLParagraphElement>(null);\n useEffect(() => {\n if (!ref.current) return;\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) {\n setInView(true);\n observer.unobserve(ref.current as Element);\n }\n },\n { threshold, rootMargin }\n );\n observer.observe(ref.current);\n return () => observer.disconnect();\n }, [threshold, rootMargin]);\n const defaultFrom = useMemo(\n () =>\n direction === \"top\"\n ? { filter: \"blur(10px)\", opacity: 0, y: -50 }\n : { filter: \"blur(10px)\", opacity: 0, y: 50 },\n [direction]\n );\n const defaultTo = useMemo(\n () => [\n {\n filter: \"blur(5px)\",\n opacity: 0.5,\n y: direction === \"top\" ? 5 : -5,\n },\n { filter: \"blur(0px)\", opacity: 1, y: 0 },\n ],\n [direction]\n );\n const fromSnapshot = animationFrom ?? defaultFrom;\n const toSnapshots = animationTo ?? defaultTo;\n const stepCount = toSnapshots.length + 1;\n const totalDuration = stepDuration * (stepCount - 1);\n const times = Array.from({ length: stepCount }, (_, i) =>\n stepCount === 1 ? 0 : i / (stepCount - 1)\n );\n return (\n <p ref={ref} className={`ds:blur-text ${className} ds:flex ds:flex-wrap`}>\n {elements.map((segment, index) => {\n const animateKeyframes = buildKeyframes(fromSnapshot, toSnapshots);\n const spanTransition: Transition = {\n duration: totalDuration,\n times,\n delay: (index * delay) / 1000,\n ease: easing,\n };\n return (\n <motion.span\n key={index}\n initial={fromSnapshot}\n animate={inView ? animateKeyframes : fromSnapshot}\n transition={spanTransition}\n onAnimationComplete={\n index === elements.length - 1 ? onAnimationComplete : undefined\n }\n style={{\n display: \"inline-block\",\n willChange: \"transform, filter, opacity\",\n }}\n >\n {segment === \" \" ? \"\\u00A0\" : segment}\n {animateBy === \"words\" && index < elements.length - 1 && \"\\u00A0\"}\n </motion.span>\n );\n })}\n </p>\n );\n};\nexport default BlurText;\n"],"names":["buildKeyframes","from","steps","keys","s","keyframes","k","BlurText","text","delay","className","animateBy","direction","threshold","rootMargin","animationFrom","animationTo","easing","t","onAnimationComplete","stepDuration","elements","inView","setInView","useState","ref","useRef","useEffect","observer","entry","defaultFrom","useMemo","defaultTo","fromSnapshot","toSnapshots","stepCount","totalDuration","times","_","i","jsx","segment","index","animateKeyframes","spanTransition","jsxs","motion"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsx as
|
|
1
|
+
import { jsx as p } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect as h } from "react";
|
|
3
3
|
import { useAnimation as y, useMotionValue as k, motion as w } from "motion/react";
|
|
4
4
|
const M = (a, e, r = !0) => ({
|
|
@@ -66,22 +66,22 @@ const M = (a, e, r = !0) => ({
|
|
|
66
66
|
transition: n(e, t)
|
|
67
67
|
});
|
|
68
68
|
};
|
|
69
|
-
return /* @__PURE__ */
|
|
69
|
+
return /* @__PURE__ */ p(
|
|
70
70
|
w.div,
|
|
71
71
|
{
|
|
72
|
-
className: `m-0 mx-auto rounded-full w-[200px] h-[200px] relative font-black text-foreground text-center cursor-pointer origin-center ${g}`,
|
|
72
|
+
className: `ds:m-0 ds:mx-auto ds:rounded-full ds:w-[200px] ds:h-[200px] ds:relative ds:font-black ds:text-foreground ds:text-center ds:cursor-pointer ds:origin-center ${g}`,
|
|
73
73
|
style: { rotate: i },
|
|
74
74
|
initial: { rotate: 0 },
|
|
75
75
|
animate: o,
|
|
76
76
|
onMouseEnter: m,
|
|
77
77
|
onMouseLeave: u,
|
|
78
78
|
children: l.map((t, s) => {
|
|
79
|
-
const c = 360 / l.length * s,
|
|
80
|
-
return /* @__PURE__ */
|
|
79
|
+
const c = 360 / l.length * s, d = Math.PI / l.length, x = d * s, b = d * s, f = `rotateZ(${c}deg) translate3d(${x}px, ${b}px, 0)`;
|
|
80
|
+
return /* @__PURE__ */ p(
|
|
81
81
|
"span",
|
|
82
82
|
{
|
|
83
|
-
className: "absolute inline-block inset-0 text-2xl transition-all duration-500 ease-[cubic-bezier(0,0,0,1)]",
|
|
84
|
-
style: { transform:
|
|
83
|
+
className: "ds:absolute ds:inline-block ds:inset-0 ds:text-2xl ds:transition-all ds:duration-500 ds:ease-[cubic-bezier(0,0,0,1)]",
|
|
84
|
+
style: { transform: f, WebkitTransform: f },
|
|
85
85
|
children: t
|
|
86
86
|
},
|
|
87
87
|
s
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CircularText.js","sources":["../../../../src/lib/TextAnimation/CircularText.tsx"],"sourcesContent":["\"use client\";\nimport React, { useEffect } from \"react\";\nimport {\n motion,\n useAnimation,\n useMotionValue,\n MotionValue,\n type Transition,\n} from \"motion/react\";\n\ninterface CircularTextProps {\n text: string;\n spinDuration?: number;\n onHover?: \"slowDown\" | \"speedUp\" | \"pause\" | \"goBonkers\";\n className?: string;\n}\n\nconst getRotationTransition = (\n duration: number,\n from: number,\n loop: boolean = true\n) => ({\n from,\n to: from + 360,\n ease: \"linear\" as const,\n duration,\n type: \"tween\" as const,\n repeat: loop ? Infinity : 0,\n});\n\nconst getTransition = (duration: number, from: number) => ({\n rotate: getRotationTransition(duration, from),\n scale: {\n type: \"spring\" as const,\n damping: 20,\n stiffness: 300,\n },\n});\n\nconst CircularText: React.FC<CircularTextProps> = ({\n text,\n spinDuration = 20,\n onHover = \"speedUp\",\n className = \"\",\n}) => {\n const letters = Array.from(text);\n const controls = useAnimation();\n const rotation: MotionValue<number> = useMotionValue(0);\n useEffect(() => {\n const start = rotation.get();\n controls.start({\n rotate: start + 360,\n scale: 1,\n transition: getTransition(spinDuration, start),\n });\n }, [spinDuration, text, onHover, controls, rotation]);\n const handleHoverStart = () => {\n const start = rotation.get();\n if (!onHover) return;\n let transitionConfig: ReturnType<typeof getTransition> | Transition;\n let scaleVal = 1;\n switch (onHover) {\n case \"slowDown\":\n transitionConfig = getTransition(spinDuration * 2, start);\n break;\n case \"speedUp\":\n transitionConfig = getTransition(spinDuration / 4, start);\n break;\n case \"pause\":\n transitionConfig = {\n rotate: { type: \"spring\", damping: 20, stiffness: 300 },\n scale: { type: \"spring\", damping: 20, stiffness: 300 },\n };\n break;\n case \"goBonkers\":\n transitionConfig = getTransition(spinDuration / 20, start);\n scaleVal = 0.8;\n break;\n default:\n transitionConfig = getTransition(spinDuration, start);\n }\n controls.start({\n rotate: start + 360,\n scale: scaleVal,\n transition: transitionConfig,\n });\n };\n const handleHoverEnd = () => {\n const start = rotation.get();\n controls.start({\n rotate: start + 360,\n scale: 1,\n transition: getTransition(spinDuration, start),\n });\n };\n return (\n <motion.div\n className={`m-0 mx-auto rounded-full w-[200px] h-[200px] relative font-black text-foreground text-center cursor-pointer origin-center ${className}`}\n style={{ rotate: rotation }}\n initial={{ rotate: 0 }}\n animate={controls}\n onMouseEnter={handleHoverStart}\n onMouseLeave={handleHoverEnd}\n >\n {letters.map((letter, i) => {\n const rotationDeg = (360 / letters.length) * i;\n const factor = Math.PI / letters.length;\n const x = factor * i;\n const y = factor * i;\n const transform = `rotateZ(${rotationDeg}deg) translate3d(${x}px, ${y}px, 0)`;\n return (\n <span\n key={i}\n className=\"absolute inline-block inset-0 text-2xl transition-all duration-500 ease-[cubic-bezier(0,0,0,1)]\"\n style={{ transform, WebkitTransform: transform }}\n >\n {letter}\n </span>\n );\n })}\n </motion.div>\n );\n};\n\nexport default CircularText;\n"],"names":["getRotationTransition","duration","from","loop","getTransition","CircularText","text","spinDuration","onHover","className","letters","controls","useAnimation","rotation","useMotionValue","useEffect","start","handleHoverStart","transitionConfig","scaleVal","handleHoverEnd","jsx","motion","letter","i","rotationDeg","factor","y","transform"],"mappings":";;;AAiBA,MAAMA,IAAwB,CAC5BC,GACAC,GACAC,IAAgB,QACZ;AAAA,EACJ,MAAAD;AAAA,EACA,IAAIA,IAAO;AAAA,EACX,MAAM;AAAA,EACN,UAAAD;AAAA,EACA,MAAM;AAAA,EACN,QAAQE,IAAO,QAAW;AAC5B,IAEMC,IAAgB,CAACH,GAAkBC,OAAkB;AAAA,EACzD,QAAQF,EAAsBC,GAAUC,CAAI;AAAA,EAC5C,OAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,WAAW;AAAA,EAAA;AAEf,IAEMG,IAA4C,CAAC;AAAA,EACjD,MAAAC;AAAA,EACA,cAAAC,IAAe;AAAA,EACf,SAAAC,IAAU;AAAA,EACV,WAAAC,IAAY;AACd,MAAM;AACJ,QAAMC,IAAU,MAAM,KAAKJ,CAAI,GACzBK,IAAWC,EAAA,GACXC,IAAgCC,EAAe,CAAC;AACtD,EAAAC,EAAU,MAAM;AACd,UAAMC,IAAQH,EAAS,IAAA;AACvB,IAAAF,EAAS,MAAM;AAAA,MACb,QAAQK,IAAQ;AAAA,MAChB,OAAO;AAAA,MACP,YAAYZ,EAAcG,GAAcS,CAAK;AAAA,IAAA,CAC9C;AAAA,EACH,GAAG,CAACT,GAAcD,GAAME,GAASG,GAAUE,CAAQ,CAAC;AACpD,QAAMI,IAAmB,MAAM;AAC7B,UAAMD,IAAQH,EAAS,IAAA;AACvB,QAAI,CAACL,EAAS;AACd,QAAIU,GACAC,IAAW;AACf,YAAQX,GAAA;AAAA,MACN,KAAK;AACH,QAAAU,IAAmBd,EAAcG,IAAe,GAAGS,CAAK;AACxD;AAAA,MACF,KAAK;AACH,QAAAE,IAAmBd,EAAcG,IAAe,GAAGS,CAAK;AACxD;AAAA,MACF,KAAK;AACH,QAAAE,IAAmB;AAAA,UACjB,QAAQ,EAAE,MAAM,UAAU,SAAS,IAAI,WAAW,IAAA;AAAA,UAClD,OAAO,EAAE,MAAM,UAAU,SAAS,IAAI,WAAW,IAAA;AAAA,QAAI;AAEvD;AAAA,MACF,KAAK;AACH,QAAAA,IAAmBd,EAAcG,IAAe,IAAIS,CAAK,GACzDG,IAAW;AACX;AAAA,MACF;AACE,QAAAD,IAAmBd,EAAcG,GAAcS,CAAK;AAAA,IAAA;AAExD,IAAAL,EAAS,MAAM;AAAA,MACb,QAAQK,IAAQ;AAAA,MAChB,OAAOG;AAAA,MACP,YAAYD;AAAA,IAAA,CACb;AAAA,EACH,GACME,IAAiB,MAAM;AAC3B,UAAMJ,IAAQH,EAAS,IAAA;AACvB,IAAAF,EAAS,MAAM;AAAA,MACb,QAAQK,IAAQ;AAAA,MAChB,OAAO;AAAA,MACP,YAAYZ,EAAcG,GAAcS,CAAK;AAAA,IAAA,CAC9C;AAAA,EACH;AACA,SACE,gBAAAK;AAAA,IAACC,EAAO;AAAA,IAAP;AAAA,MACC,WAAW,
|
|
1
|
+
{"version":3,"file":"CircularText.js","sources":["../../../../src/lib/TextAnimation/CircularText.tsx"],"sourcesContent":["\"use client\";\nimport React, { useEffect } from \"react\";\nimport {\n motion,\n useAnimation,\n useMotionValue,\n MotionValue,\n type Transition,\n} from \"motion/react\";\n\ninterface CircularTextProps {\n text: string;\n spinDuration?: number;\n onHover?: \"slowDown\" | \"speedUp\" | \"pause\" | \"goBonkers\";\n className?: string;\n}\n\nconst getRotationTransition = (\n duration: number,\n from: number,\n loop: boolean = true\n) => ({\n from,\n to: from + 360,\n ease: \"linear\" as const,\n duration,\n type: \"tween\" as const,\n repeat: loop ? Infinity : 0,\n});\n\nconst getTransition = (duration: number, from: number) => ({\n rotate: getRotationTransition(duration, from),\n scale: {\n type: \"spring\" as const,\n damping: 20,\n stiffness: 300,\n },\n});\n\nconst CircularText: React.FC<CircularTextProps> = ({\n text,\n spinDuration = 20,\n onHover = \"speedUp\",\n className = \"\",\n}) => {\n const letters = Array.from(text);\n const controls = useAnimation();\n const rotation: MotionValue<number> = useMotionValue(0);\n useEffect(() => {\n const start = rotation.get();\n controls.start({\n rotate: start + 360,\n scale: 1,\n transition: getTransition(spinDuration, start),\n });\n }, [spinDuration, text, onHover, controls, rotation]);\n const handleHoverStart = () => {\n const start = rotation.get();\n if (!onHover) return;\n let transitionConfig: ReturnType<typeof getTransition> | Transition;\n let scaleVal = 1;\n switch (onHover) {\n case \"slowDown\":\n transitionConfig = getTransition(spinDuration * 2, start);\n break;\n case \"speedUp\":\n transitionConfig = getTransition(spinDuration / 4, start);\n break;\n case \"pause\":\n transitionConfig = {\n rotate: { type: \"spring\", damping: 20, stiffness: 300 },\n scale: { type: \"spring\", damping: 20, stiffness: 300 },\n };\n break;\n case \"goBonkers\":\n transitionConfig = getTransition(spinDuration / 20, start);\n scaleVal = 0.8;\n break;\n default:\n transitionConfig = getTransition(spinDuration, start);\n }\n controls.start({\n rotate: start + 360,\n scale: scaleVal,\n transition: transitionConfig,\n });\n };\n const handleHoverEnd = () => {\n const start = rotation.get();\n controls.start({\n rotate: start + 360,\n scale: 1,\n transition: getTransition(spinDuration, start),\n });\n };\n return (\n <motion.div\n className={`ds:m-0 ds:mx-auto ds:rounded-full ds:w-[200px] ds:h-[200px] ds:relative ds:font-black ds:text-foreground ds:text-center ds:cursor-pointer ds:origin-center ${className}`}\n style={{ rotate: rotation }}\n initial={{ rotate: 0 }}\n animate={controls}\n onMouseEnter={handleHoverStart}\n onMouseLeave={handleHoverEnd}\n >\n {letters.map((letter, i) => {\n const rotationDeg = (360 / letters.length) * i;\n const factor = Math.PI / letters.length;\n const x = factor * i;\n const y = factor * i;\n const transform = `rotateZ(${rotationDeg}deg) translate3d(${x}px, ${y}px, 0)`;\n return (\n <span\n key={i}\n className=\"ds:absolute ds:inline-block ds:inset-0 ds:text-2xl ds:transition-all ds:duration-500 ds:ease-[cubic-bezier(0,0,0,1)]\"\n style={{ transform, WebkitTransform: transform }}\n >\n {letter}\n </span>\n );\n })}\n </motion.div>\n );\n};\n\nexport default CircularText;\n"],"names":["getRotationTransition","duration","from","loop","getTransition","CircularText","text","spinDuration","onHover","className","letters","controls","useAnimation","rotation","useMotionValue","useEffect","start","handleHoverStart","transitionConfig","scaleVal","handleHoverEnd","jsx","motion","letter","i","rotationDeg","factor","y","transform"],"mappings":"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"}
|
|
@@ -34,31 +34,31 @@ import "@radix-ui/react-slider";
|
|
|
34
34
|
import "../../packages/ui/src/components/tabs.js";
|
|
35
35
|
import "../../packages/ui/src/components/toggle.js";
|
|
36
36
|
function ei({
|
|
37
|
-
ref:
|
|
37
|
+
ref: d,
|
|
38
38
|
words: r,
|
|
39
39
|
duration: n = 3e3,
|
|
40
|
-
letterDelay:
|
|
41
|
-
wordDelay:
|
|
42
|
-
className:
|
|
43
|
-
...
|
|
40
|
+
letterDelay: y = 0.05,
|
|
41
|
+
wordDelay: s = 0.3,
|
|
42
|
+
className: h,
|
|
43
|
+
...b
|
|
44
44
|
}) {
|
|
45
|
-
const
|
|
45
|
+
const l = t.useRef(null);
|
|
46
46
|
t.useImperativeHandle(
|
|
47
|
-
|
|
48
|
-
() =>
|
|
47
|
+
d,
|
|
48
|
+
() => l.current
|
|
49
49
|
);
|
|
50
|
-
const [o,
|
|
50
|
+
const [o, x] = t.useState(r[0]), [m, c] = t.useState(!1), f = t.useCallback(() => {
|
|
51
51
|
const i = r[r.indexOf(o) + 1] || r[0];
|
|
52
|
-
|
|
52
|
+
x(i), c(!0);
|
|
53
53
|
}, [o, r]);
|
|
54
54
|
return t.useEffect(() => {
|
|
55
|
-
if (!
|
|
55
|
+
if (!m) {
|
|
56
56
|
const i = setTimeout(() => {
|
|
57
57
|
f();
|
|
58
58
|
}, n);
|
|
59
59
|
return () => clearTimeout(i);
|
|
60
60
|
}
|
|
61
|
-
}, [
|
|
61
|
+
}, [m, n, f]), /* @__PURE__ */ e("span", { ref: l, "data-slot": "flip-words", ...b, children: /* @__PURE__ */ e(
|
|
62
62
|
A,
|
|
63
63
|
{
|
|
64
64
|
onExitComplete: () => {
|
|
@@ -89,8 +89,8 @@ function ei({
|
|
|
89
89
|
position: "absolute"
|
|
90
90
|
},
|
|
91
91
|
className: N(
|
|
92
|
-
"inline-block relative text-left px-2 will-change-transform will-change-opacity will-change-filter",
|
|
93
|
-
|
|
92
|
+
"ds:inline-block ds:relative ds:text-left ds:px-2 ds:will-change-transform ds:will-change-opacity ds:will-change-filter",
|
|
93
|
+
h
|
|
94
94
|
),
|
|
95
95
|
children: o.split(" ").map((i, a) => /* @__PURE__ */ k(
|
|
96
96
|
p.span,
|
|
@@ -98,26 +98,26 @@ function ei({
|
|
|
98
98
|
initial: { opacity: 0, y: 10, filter: "blur(8px)" },
|
|
99
99
|
animate: { opacity: 1, y: 0, filter: "blur(0px)" },
|
|
100
100
|
transition: {
|
|
101
|
-
delay: a *
|
|
101
|
+
delay: a * s,
|
|
102
102
|
duration: 0.3
|
|
103
103
|
},
|
|
104
|
-
className: "inline-block whitespace-nowrap",
|
|
104
|
+
className: "ds:inline-block ds:whitespace-nowrap",
|
|
105
105
|
children: [
|
|
106
|
-
i.split("").map((
|
|
106
|
+
i.split("").map((g, u) => /* @__PURE__ */ e(
|
|
107
107
|
p.span,
|
|
108
108
|
{
|
|
109
109
|
initial: { opacity: 0, y: 10, filter: "blur(8px)" },
|
|
110
110
|
animate: { opacity: 1, y: 0, filter: "blur(0px)" },
|
|
111
111
|
transition: {
|
|
112
|
-
delay: a *
|
|
112
|
+
delay: a * s + u * y,
|
|
113
113
|
duration: 0.2
|
|
114
114
|
},
|
|
115
|
-
className: "inline-block will-change-transform will-change-opacity will-change-filter",
|
|
116
|
-
children:
|
|
115
|
+
className: "ds:inline-block ds:will-change-transform ds:will-change-opacity ds:will-change-filter",
|
|
116
|
+
children: g
|
|
117
117
|
},
|
|
118
118
|
`${i}-${u}`
|
|
119
119
|
)),
|
|
120
|
-
/* @__PURE__ */ e("span", { className: "inline-block", children: " " })
|
|
120
|
+
/* @__PURE__ */ e("span", { className: "ds:inline-block", children: " " })
|
|
121
121
|
]
|
|
122
122
|
},
|
|
123
123
|
`${i}-${a}`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FlipWords.js","sources":["../../../../src/lib/TextAnimation/FlipWords.tsx"],"sourcesContent":["\"use client\";\nimport * as React from \"react\";\nimport { AnimatePresence, motion } from \"motion/react\";\nimport { cn } from \"@dsui/ui/index\";\n\ntype FlipWordsProps = Omit<React.ComponentProps<\"span\">, \"children\"> & {\n words: string[];\n duration?: number;\n letterDelay?: number;\n wordDelay?: number;\n};\n\nfunction FlipWords({\n ref,\n words,\n duration = 3000,\n letterDelay = 0.05,\n wordDelay = 0.3,\n className,\n ...props\n}: FlipWordsProps) {\n const localRef = React.useRef<HTMLSpanElement>(null);\n React.useImperativeHandle(\n ref as any,\n () => localRef.current as HTMLSpanElement\n );\n const [currentWord, setCurrentWord] = React.useState(words[0]);\n const [isAnimating, setIsAnimating] = React.useState<boolean>(false);\n\n const startAnimation = React.useCallback(() => {\n const word = words[words.indexOf(currentWord) + 1] || words[0];\n setCurrentWord(word);\n setIsAnimating(true);\n }, [currentWord, words]);\n\n React.useEffect(() => {\n if (!isAnimating) {\n const timeoutId = setTimeout(() => {\n startAnimation();\n }, duration);\n return () => clearTimeout(timeoutId);\n }\n }, [isAnimating, duration, startAnimation]);\n\n return (\n <span ref={localRef} data-slot=\"flip-words\" {...(props as any)}>\n <AnimatePresence\n onExitComplete={() => {\n setIsAnimating(false);\n }}\n >\n <motion.span\n initial={{\n opacity: 0,\n y: 10,\n }}\n animate={{\n opacity: 1,\n y: 0,\n }}\n transition={{\n type: \"spring\",\n stiffness: 100,\n damping: 10,\n }}\n exit={{\n opacity: 0,\n y: -40,\n x: 40,\n filter: \"blur(8px)\",\n scale: 2,\n position: \"absolute\",\n }}\n className={cn(\n \"inline-block relative text-left px-2 will-change-transform will-change-opacity will-change-filter\",\n className\n )}\n key={currentWord}\n >\n {currentWord.split(\" \").map((word, wordIndex) => (\n <motion.span\n key={`${word}-${wordIndex}`}\n initial={{ opacity: 0, y: 10, filter: \"blur(8px)\" }}\n animate={{ opacity: 1, y: 0, filter: \"blur(0px)\" }}\n transition={{\n delay: wordIndex * wordDelay,\n duration: 0.3,\n }}\n className=\"inline-block whitespace-nowrap\"\n >\n {word.split(\"\").map((letter, letterIndex) => (\n <motion.span\n key={`${word}-${letterIndex}`}\n initial={{ opacity: 0, y: 10, filter: \"blur(8px)\" }}\n animate={{ opacity: 1, y: 0, filter: \"blur(0px)\" }}\n transition={{\n delay: wordIndex * wordDelay + letterIndex * letterDelay,\n duration: 0.2,\n }}\n className=\"inline-block will-change-transform will-change-opacity will-change-filter\"\n >\n {letter}\n </motion.span>\n ))}\n <span className=\"inline-block\"> </span>\n </motion.span>\n ))}\n </motion.span>\n </AnimatePresence>\n </span>\n );\n}\n\nexport { FlipWords, type FlipWordsProps };\n"],"names":["FlipWords","ref","words","duration","letterDelay","wordDelay","className","props","localRef","React","currentWord","setCurrentWord","isAnimating","setIsAnimating","startAnimation","word","timeoutId","jsx","AnimatePresence","motion","cn","wordIndex","jsxs","letter","letterIndex"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,SAASA,GAAU;AAAA,EACjB,KAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,aAAAC,IAAc;AAAA,EACd,WAAAC,IAAY;AAAA,EACZ,WAAAC;AAAA,EACA,GAAGC;AACL,GAAmB;AACjB,QAAMC,IAAWC,EAAM,OAAwB,IAAI;AACnD,EAAAA,EAAM;AAAA,IACJR;AAAA,IACA,MAAMO,EAAS;AAAA,EAAA;AAEjB,QAAM,CAACE,GAAaC,CAAc,IAAIF,EAAM,SAASP,EAAM,CAAC,CAAC,GACvD,CAACU,GAAaC,CAAc,IAAIJ,EAAM,SAAkB,EAAK,GAE7DK,IAAiBL,EAAM,YAAY,MAAM;AAC7C,UAAMM,IAAOb,EAAMA,EAAM,QAAQQ,CAAW,IAAI,CAAC,KAAKR,EAAM,CAAC;AAC7D,IAAAS,EAAeI,CAAI,GACnBF,EAAe,EAAI;AAAA,EACrB,GAAG,CAACH,GAAaR,CAAK,CAAC;AAEvB,SAAAO,EAAM,UAAU,MAAM;AACpB,QAAI,CAACG,GAAa;AAChB,YAAMI,IAAY,WAAW,MAAM;AACjC,QAAAF,EAAA;AAAA,MACF,GAAGX,CAAQ;AACX,aAAO,MAAM,aAAaa,CAAS;AAAA,IACrC;AAAA,EACF,GAAG,CAACJ,GAAaT,GAAUW,CAAc,CAAC,qBAGvC,QAAA,EAAK,KAAKN,GAAU,aAAU,cAAc,GAAID,GAC/C,UAAA,gBAAAU;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,gBAAgB,MAAM;AACpB,QAAAL,EAAe,EAAK;AAAA,MACtB;AAAA,MAEA,UAAA,gBAAAI;AAAA,QAACE,EAAO;AAAA,QAAP;AAAA,UACC,SAAS;AAAA,YACP,SAAS;AAAA,YACT,GAAG;AAAA,UAAA;AAAA,UAEL,SAAS;AAAA,YACP,SAAS;AAAA,YACT,GAAG;AAAA,UAAA;AAAA,UAEL,YAAY;AAAA,YACV,MAAM;AAAA,YACN,WAAW;AAAA,YACX,SAAS;AAAA,UAAA;AAAA,UAEX,MAAM;AAAA,YACJ,SAAS;AAAA,YACT,GAAG;AAAA,YACH,GAAG;AAAA,YACH,QAAQ;AAAA,YACR,OAAO;AAAA,YACP,UAAU;AAAA,UAAA;AAAA,UAEZ,WAAWC;AAAA,YACT;AAAA,YACAd;AAAA,UAAA;AAAA,UAID,YAAY,MAAM,GAAG,EAAE,IAAI,CAACS,GAAMM,MACjC,gBAAAC;AAAA,YAACH,EAAO;AAAA,YAAP;AAAA,cAEC,SAAS,EAAE,SAAS,GAAG,GAAG,IAAI,QAAQ,YAAA;AAAA,cACtC,SAAS,EAAE,SAAS,GAAG,GAAG,GAAG,QAAQ,YAAA;AAAA,cACrC,YAAY;AAAA,gBACV,OAAOE,IAAYhB;AAAA,gBACnB,UAAU;AAAA,cAAA;AAAA,cAEZ,WAAU;AAAA,cAET,UAAA;AAAA,gBAAAU,EAAK,MAAM,EAAE,EAAE,IAAI,CAACQ,GAAQC,MAC3B,gBAAAP;AAAA,kBAACE,EAAO;AAAA,kBAAP;AAAA,oBAEC,SAAS,EAAE,SAAS,GAAG,GAAG,IAAI,QAAQ,YAAA;AAAA,oBACtC,SAAS,EAAE,SAAS,GAAG,GAAG,GAAG,QAAQ,YAAA;AAAA,oBACrC,YAAY;AAAA,sBACV,OAAOE,IAAYhB,IAAYmB,IAAcpB;AAAA,sBAC7C,UAAU;AAAA,oBAAA;AAAA,oBAEZ,WAAU;AAAA,oBAET,UAAAmB;AAAA,kBAAA;AAAA,kBATI,GAAGR,CAAI,IAAIS,CAAW;AAAA,gBAAA,CAW9B;AAAA,gBACD,gBAAAP,EAAC,QAAA,EAAK,WAAU,
|
|
1
|
+
{"version":3,"file":"FlipWords.js","sources":["../../../../src/lib/TextAnimation/FlipWords.tsx"],"sourcesContent":["\"use client\";\nimport * as React from \"react\";\nimport { AnimatePresence, motion } from \"motion/react\";\nimport { cn } from \"@dsui/ui/index\";\n\ntype FlipWordsProps = Omit<React.ComponentProps<\"span\">, \"children\"> & {\n words: string[];\n duration?: number;\n letterDelay?: number;\n wordDelay?: number;\n};\n\nfunction FlipWords({\n ref,\n words,\n duration = 3000,\n letterDelay = 0.05,\n wordDelay = 0.3,\n className,\n ...props\n}: FlipWordsProps) {\n const localRef = React.useRef<HTMLSpanElement>(null);\n React.useImperativeHandle(\n ref as any,\n () => localRef.current as HTMLSpanElement\n );\n const [currentWord, setCurrentWord] = React.useState(words[0]);\n const [isAnimating, setIsAnimating] = React.useState<boolean>(false);\n\n const startAnimation = React.useCallback(() => {\n const word = words[words.indexOf(currentWord) + 1] || words[0];\n setCurrentWord(word);\n setIsAnimating(true);\n }, [currentWord, words]);\n\n React.useEffect(() => {\n if (!isAnimating) {\n const timeoutId = setTimeout(() => {\n startAnimation();\n }, duration);\n return () => clearTimeout(timeoutId);\n }\n }, [isAnimating, duration, startAnimation]);\n\n return (\n <span ref={localRef} data-slot=\"flip-words\" {...(props as any)}>\n <AnimatePresence\n onExitComplete={() => {\n setIsAnimating(false);\n }}\n >\n <motion.span\n initial={{\n opacity: 0,\n y: 10,\n }}\n animate={{\n opacity: 1,\n y: 0,\n }}\n transition={{\n type: \"spring\",\n stiffness: 100,\n damping: 10,\n }}\n exit={{\n opacity: 0,\n y: -40,\n x: 40,\n filter: \"blur(8px)\",\n scale: 2,\n position: \"absolute\",\n }}\n className={cn(\n \"ds:inline-block ds:relative ds:text-left ds:px-2 ds:will-change-transform ds:will-change-opacity ds:will-change-filter\",\n className\n )}\n key={currentWord}\n >\n {currentWord.split(\" \").map((word, wordIndex) => (\n <motion.span\n key={`${word}-${wordIndex}`}\n initial={{ opacity: 0, y: 10, filter: \"blur(8px)\" }}\n animate={{ opacity: 1, y: 0, filter: \"blur(0px)\" }}\n transition={{\n delay: wordIndex * wordDelay,\n duration: 0.3,\n }}\n className=\"ds:inline-block ds:whitespace-nowrap\"\n >\n {word.split(\"\").map((letter, letterIndex) => (\n <motion.span\n key={`${word}-${letterIndex}`}\n initial={{ opacity: 0, y: 10, filter: \"blur(8px)\" }}\n animate={{ opacity: 1, y: 0, filter: \"blur(0px)\" }}\n transition={{\n delay: wordIndex * wordDelay + letterIndex * letterDelay,\n duration: 0.2,\n }}\n className=\"ds:inline-block ds:will-change-transform ds:will-change-opacity ds:will-change-filter\"\n >\n {letter}\n </motion.span>\n ))}\n <span className=\"ds:inline-block\"> </span>\n </motion.span>\n ))}\n </motion.span>\n </AnimatePresence>\n </span>\n );\n}\n\nexport { FlipWords, type FlipWordsProps };\n"],"names":["FlipWords","ref","words","duration","letterDelay","wordDelay","className","props","localRef","React","currentWord","setCurrentWord","isAnimating","setIsAnimating","startAnimation","word","timeoutId","jsx","AnimatePresence","motion","cn","wordIndex","jsxs","letter","letterIndex"],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@ import "../../packages/ui/src/components/button-group.js";
|
|
|
7
7
|
import "../../packages/ui/src/components/input.js";
|
|
8
8
|
import "../../packages/ui/src/components/textarea.js";
|
|
9
9
|
import "@radix-ui/react-label";
|
|
10
|
-
import { cn as
|
|
10
|
+
import { cn as d } from "../../packages/ui/src/lib/utils.js";
|
|
11
11
|
import "../../packages/ui/src/components/select.js";
|
|
12
12
|
import "../../packages/ui/src/components/combobox.js";
|
|
13
13
|
import "@radix-ui/react-tooltip";
|
|
@@ -52,13 +52,13 @@ function R({
|
|
|
52
52
|
"span",
|
|
53
53
|
{
|
|
54
54
|
"data-slot": "gradient-text",
|
|
55
|
-
className:
|
|
55
|
+
className: d("ds:relative ds:inline-block", p),
|
|
56
56
|
...n,
|
|
57
57
|
children: [
|
|
58
58
|
/* @__PURE__ */ o(
|
|
59
59
|
m.span,
|
|
60
60
|
{
|
|
61
|
-
className: "m-0 text-transparent",
|
|
61
|
+
className: "ds:m-0 ds:text-transparent",
|
|
62
62
|
style: i,
|
|
63
63
|
animate: { backgroundPosition: ["0% 0%", "200% 0%"] },
|
|
64
64
|
transition: r,
|
|
@@ -68,7 +68,7 @@ function R({
|
|
|
68
68
|
a && /* @__PURE__ */ o(
|
|
69
69
|
m.span,
|
|
70
70
|
{
|
|
71
|
-
className: "m-0 absolute top-0 left-0 text-transparent blur-sm mix-blend-plus-lighter",
|
|
71
|
+
className: "ds:m-0 ds:absolute ds:top-0 ds:left-0 ds:text-transparent ds:blur-sm ds:mix-blend-plus-lighter",
|
|
72
72
|
style: i,
|
|
73
73
|
animate: { backgroundPosition: ["0% 0%", "200% 0%"] },
|
|
74
74
|
transition: r,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GradientText.js","sources":["../../../../src/lib/TextAnimation/GradientText.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { motion, type Transition } from \"motion/react\";\nimport { cn } from \"@dsui/ui/index\";\n\ntype GradientTextProps = React.ComponentProps<\"span\"> & {\n text: string;\n gradient?: string;\n neon?: boolean;\n transition?: Transition;\n};\n\nfunction GradientText({\n text,\n className,\n gradient = \"linear-gradient(90deg, #3b82f6 0%, #a855f7 20%, #ec4899 50%, #a855f7 80%, #3b82f6 100%)\",\n neon = false,\n transition = { duration: 3, repeat: Infinity, ease: \"linear\" },\n ...props\n}: GradientTextProps) {\n const baseStyle: React.CSSProperties = {\n backgroundImage: gradient,\n backgroundClip: \"text\",\n WebkitBackgroundClip: \"text\",\n backgroundSize: \"200% 100%\",\n color: \"transparent\",\n };\n\n return (\n <span\n data-slot=\"gradient-text\"\n className={cn(\"relative inline-block\", className)}\n {...(props as any)}\n >\n <motion.span\n className=\"m-0 text-transparent\"\n style={baseStyle as any}\n animate={{ backgroundPosition: [\"0% 0%\", \"200% 0%\"] }}\n transition={transition}\n >\n {text}\n </motion.span>\n\n {neon && (\n <motion.span\n className=\"m-0 absolute top-0 left-0 text-transparent blur-sm mix-blend-plus-lighter\"\n style={baseStyle as any}\n animate={{ backgroundPosition: [\"0% 0%\", \"200% 0%\"] }}\n transition={transition}\n >\n {text}\n </motion.span>\n )}\n </span>\n );\n}\n\nexport { GradientText, type GradientTextProps };\n"],"names":["GradientText","text","className","gradient","neon","transition","props","baseStyle","jsxs","cn","jsx","motion"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaA,SAASA,EAAa;AAAA,EACpB,MAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,MAAAC,IAAO;AAAA,EACP,YAAAC,IAAa,EAAE,UAAU,GAAG,QAAQ,OAAU,MAAM,SAAA;AAAA,EACpD,GAAGC;AACL,GAAsB;AACpB,QAAMC,IAAiC;AAAA,IACrC,iBAAiBJ;AAAA,IACjB,gBAAgB;AAAA,IAChB,sBAAsB;AAAA,IACtB,gBAAgB;AAAA,IAChB,OAAO;AAAA,EAAA;AAGT,SACE,gBAAAK;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAWC,EAAG,
|
|
1
|
+
{"version":3,"file":"GradientText.js","sources":["../../../../src/lib/TextAnimation/GradientText.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { motion, type Transition } from \"motion/react\";\nimport { cn } from \"@dsui/ui/index\";\n\ntype GradientTextProps = React.ComponentProps<\"span\"> & {\n text: string;\n gradient?: string;\n neon?: boolean;\n transition?: Transition;\n};\n\nfunction GradientText({\n text,\n className,\n gradient = \"linear-gradient(90deg, #3b82f6 0%, #a855f7 20%, #ec4899 50%, #a855f7 80%, #3b82f6 100%)\",\n neon = false,\n transition = { duration: 3, repeat: Infinity, ease: \"linear\" },\n ...props\n}: GradientTextProps) {\n const baseStyle: React.CSSProperties = {\n backgroundImage: gradient,\n backgroundClip: \"text\",\n WebkitBackgroundClip: \"text\",\n backgroundSize: \"200% 100%\",\n color: \"transparent\",\n };\n\n return (\n <span\n data-slot=\"gradient-text\"\n className={cn(\"ds:relative ds:inline-block\", className)}\n {...(props as any)}\n >\n <motion.span\n className=\"ds:m-0 ds:text-transparent\"\n style={baseStyle as any}\n animate={{ backgroundPosition: [\"0% 0%\", \"200% 0%\"] }}\n transition={transition}\n >\n {text}\n </motion.span>\n\n {neon && (\n <motion.span\n className=\"ds:m-0 ds:absolute ds:top-0 ds:left-0 ds:text-transparent ds:blur-sm ds:mix-blend-plus-lighter\"\n style={baseStyle as any}\n animate={{ backgroundPosition: [\"0% 0%\", \"200% 0%\"] }}\n transition={transition}\n >\n {text}\n </motion.span>\n )}\n </span>\n );\n}\n\nexport { GradientText, type GradientTextProps };\n"],"names":["GradientText","text","className","gradient","neon","transition","props","baseStyle","jsxs","cn","jsx","motion"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaA,SAASA,EAAa;AAAA,EACpB,MAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,MAAAC,IAAO;AAAA,EACP,YAAAC,IAAa,EAAE,UAAU,GAAG,QAAQ,OAAU,MAAM,SAAA;AAAA,EACpD,GAAGC;AACL,GAAsB;AACpB,QAAMC,IAAiC;AAAA,IACrC,iBAAiBJ;AAAA,IACjB,gBAAgB;AAAA,IAChB,sBAAsB;AAAA,IACtB,gBAAgB;AAAA,IAChB,OAAO;AAAA,EAAA;AAGT,SACE,gBAAAK;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAWC,EAAG,+BAA+BP,CAAS;AAAA,MACrD,GAAII;AAAA,MAEL,UAAA;AAAA,QAAA,gBAAAI;AAAA,UAACC,EAAO;AAAA,UAAP;AAAA,YACC,WAAU;AAAA,YACV,OAAOJ;AAAA,YACP,SAAS,EAAE,oBAAoB,CAAC,SAAS,SAAS,EAAA;AAAA,YAClD,YAAAF;AAAA,YAEC,UAAAJ;AAAA,UAAA;AAAA,QAAA;AAAA,QAGFG,KACC,gBAAAM;AAAA,UAACC,EAAO;AAAA,UAAP;AAAA,YACC,WAAU;AAAA,YACV,OAAOJ;AAAA,YACP,SAAS,EAAE,oBAAoB,CAAC,SAAS,SAAS,EAAA;AAAA,YAClD,YAAAF;AAAA,YAEC,UAAAJ;AAAA,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,EAAA;AAIR;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import * as
|
|
3
|
-
import { useInView as y, motion as
|
|
1
|
+
import { jsxs as c, jsx as i } from "react/jsx-runtime";
|
|
2
|
+
import * as l from "react";
|
|
3
|
+
import { useInView as y, motion as m } from "motion/react";
|
|
4
4
|
const p = {
|
|
5
5
|
initial: { rotateX: 0 },
|
|
6
6
|
animate: { rotateX: 90 }
|
|
@@ -14,54 +14,54 @@ function k({
|
|
|
14
14
|
inView: f = !1,
|
|
15
15
|
inViewMargin: N = "0px",
|
|
16
16
|
inViewOnce: b = !0,
|
|
17
|
-
text:
|
|
17
|
+
text: s,
|
|
18
18
|
...h
|
|
19
19
|
}) {
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
const I = y(
|
|
20
|
+
const d = l.useRef(null);
|
|
21
|
+
l.useImperativeHandle(e, () => d.current);
|
|
22
|
+
const I = y(d, {
|
|
23
23
|
once: b,
|
|
24
24
|
margin: N
|
|
25
|
-
}),
|
|
26
|
-
return /* @__PURE__ */
|
|
27
|
-
v.map((
|
|
25
|
+
}), r = !f || I, v = l.useMemo(() => s.split(""), [s]);
|
|
26
|
+
return /* @__PURE__ */ c("span", { "data-slot": "rolling-text", ...h, ref: e, children: [
|
|
27
|
+
v.map((n, t) => /* @__PURE__ */ c(
|
|
28
28
|
"span",
|
|
29
29
|
{
|
|
30
|
-
className: "relative inline-block perspective-[9999999px] transform-3d w-auto",
|
|
30
|
+
className: "ds:relative ds:inline-block ds:perspective-[9999999px] ds:transform-3d ds:w-auto",
|
|
31
31
|
"aria-hidden": "true",
|
|
32
32
|
children: [
|
|
33
33
|
/* @__PURE__ */ i(
|
|
34
|
-
|
|
34
|
+
m.span,
|
|
35
35
|
{
|
|
36
|
-
className: "absolute inline-block backface-hidden origin-[50%_25%]",
|
|
36
|
+
className: "ds:absolute ds:inline-block ds:backface-hidden ds:origin-[50%_25%]",
|
|
37
37
|
initial: p.initial,
|
|
38
|
-
animate:
|
|
38
|
+
animate: r ? p.animate : void 0,
|
|
39
39
|
transition: {
|
|
40
40
|
...a,
|
|
41
|
-
delay:
|
|
41
|
+
delay: t * (a?.delay ?? 0)
|
|
42
42
|
},
|
|
43
|
-
children: o(
|
|
43
|
+
children: o(n)
|
|
44
44
|
}
|
|
45
45
|
),
|
|
46
46
|
/* @__PURE__ */ i(
|
|
47
|
-
|
|
47
|
+
m.span,
|
|
48
48
|
{
|
|
49
|
-
className: "absolute inline-block backface-hidden origin-[50%_100%]",
|
|
49
|
+
className: "ds:absolute ds:inline-block ds:backface-hidden ds:origin-[50%_100%]",
|
|
50
50
|
initial: u.initial,
|
|
51
|
-
animate:
|
|
51
|
+
animate: r ? u.animate : void 0,
|
|
52
52
|
transition: {
|
|
53
53
|
...a,
|
|
54
|
-
delay:
|
|
54
|
+
delay: t * (a?.delay ?? 0) + 0.3
|
|
55
55
|
},
|
|
56
|
-
children: o(
|
|
56
|
+
children: o(n)
|
|
57
57
|
}
|
|
58
58
|
),
|
|
59
|
-
/* @__PURE__ */ i("span", { className: "invisible", children: o(
|
|
59
|
+
/* @__PURE__ */ i("span", { className: "ds:invisible", children: o(n) })
|
|
60
60
|
]
|
|
61
61
|
},
|
|
62
|
-
|
|
62
|
+
t
|
|
63
63
|
)),
|
|
64
|
-
/* @__PURE__ */ i("span", { className: "sr-only", children:
|
|
64
|
+
/* @__PURE__ */ i("span", { className: "ds:sr-only", children: s })
|
|
65
65
|
] });
|
|
66
66
|
}
|
|
67
67
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RollingText.js","sources":["../../../../src/lib/TextAnimation/RollingText.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n motion,\n useInView,\n type UseInViewOptions,\n type Transition,\n} from \"motion/react\";\n\nconst ENTRY_ANIMATION = {\n initial: { rotateX: 0 },\n animate: { rotateX: 90 },\n};\n\nconst EXIT_ANIMATION = {\n initial: { rotateX: 90 },\n animate: { rotateX: 0 },\n};\n\nconst formatCharacter = (char: string) => (char === \" \" ? \"\\u00A0\" : char);\n\ntype RollingTextProps = Omit<React.ComponentProps<\"span\">, \"children\"> & {\n transition?: Transition;\n inView?: boolean;\n inViewMargin?: UseInViewOptions[\"margin\"];\n inViewOnce?: boolean;\n text: string;\n};\n\nfunction RollingText({\n ref,\n transition = { duration: 0.5, delay: 0.1, ease: \"easeOut\" },\n inView = false,\n inViewMargin = \"0px\",\n inViewOnce = true,\n text,\n ...props\n}: RollingTextProps) {\n const localRef = React.useRef<HTMLSpanElement>(null);\n React.useImperativeHandle(ref as any, () => localRef.current!);\n\n const inViewResult = useInView(localRef, {\n once: inViewOnce,\n margin: inViewMargin,\n });\n const isInView = !inView || inViewResult;\n\n const characters = React.useMemo(() => text.split(\"\"), [text]);\n\n return (\n <span data-slot=\"rolling-text\" {...(props as any)} ref={ref}>\n {characters.map((char, idx) => (\n <span\n key={idx}\n className=\"relative inline-block perspective-[9999999px] transform-3d w-auto\"\n aria-hidden=\"true\"\n >\n <motion.span\n className=\"absolute inline-block backface-hidden origin-[50%_25%]\"\n initial={ENTRY_ANIMATION.initial}\n animate={isInView ? ENTRY_ANIMATION.animate : undefined}\n transition={{\n ...transition,\n delay: idx * (transition?.delay ?? 0),\n }}\n >\n {formatCharacter(char)}\n </motion.span>\n <motion.span\n className=\"absolute inline-block backface-hidden origin-[50%_100%]\"\n initial={EXIT_ANIMATION.initial}\n animate={isInView ? EXIT_ANIMATION.animate : undefined}\n transition={{\n ...transition,\n delay: idx * (transition?.delay ?? 0) + 0.3,\n }}\n >\n {formatCharacter(char)}\n </motion.span>\n <span className=\"invisible\">{formatCharacter(char)}</span>\n </span>\n ))}\n\n <span className=\"sr-only\">{text}</span>\n </span>\n );\n}\n\nexport { RollingText, type RollingTextProps };\n"],"names":["ENTRY_ANIMATION","EXIT_ANIMATION","formatCharacter","char","RollingText","ref","transition","inView","inViewMargin","inViewOnce","text","props","localRef","React","inViewResult","useInView","isInView","characters","idx","jsxs","jsx","motion"],"mappings":";;;AAUA,MAAMA,IAAkB;AAAA,EACtB,SAAS,EAAE,SAAS,EAAA;AAAA,EACpB,SAAS,EAAE,SAAS,GAAA;AACtB,GAEMC,IAAiB;AAAA,EACrB,SAAS,EAAE,SAAS,GAAA;AAAA,EACpB,SAAS,EAAE,SAAS,EAAA;AACtB,GAEMC,IAAkB,CAACC,MAAkBA,MAAS,MAAM,MAAWA;AAUrE,SAASC,EAAY;AAAA,EACnB,KAAAC;AAAA,EACA,YAAAC,IAAa,EAAE,UAAU,KAAK,OAAO,KAAK,MAAM,UAAA;AAAA,EAChD,QAAAC,IAAS;AAAA,EACT,cAAAC,IAAe;AAAA,EACf,YAAAC,IAAa;AAAA,EACb,MAAAC;AAAA,EACA,GAAGC;AACL,GAAqB;AACnB,QAAMC,IAAWC,EAAM,OAAwB,IAAI;AACnD,EAAAA,EAAM,oBAAoBR,GAAY,MAAMO,EAAS,OAAQ;AAE7D,QAAME,IAAeC,EAAUH,GAAU;AAAA,IACvC,MAAMH;AAAA,IACN,QAAQD;AAAA,EAAA,CACT,GACKQ,IAAW,CAACT,KAAUO,GAEtBG,IAAaJ,EAAM,QAAQ,MAAMH,EAAK,MAAM,EAAE,GAAG,CAACA,CAAI,CAAC;AAE7D,2BACG,QAAA,EAAK,aAAU,gBAAgB,GAAIC,GAAe,KAAAN,GAChD,UAAA;AAAA,IAAAY,EAAW,IAAI,CAACd,GAAMe,MACrB,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,WAAU;AAAA,QACV,eAAY;AAAA,QAEZ,UAAA;AAAA,UAAA,gBAAAC;AAAA,YAACC,EAAO;AAAA,YAAP;AAAA,cACC,WAAU;AAAA,cACV,SAASrB,EAAgB;AAAA,cACzB,SAASgB,IAAWhB,EAAgB,UAAU;AAAA,cAC9C,YAAY;AAAA,gBACV,GAAGM;AAAA,gBACH,OAAOY,KAAOZ,GAAY,SAAS;AAAA,cAAA;AAAA,cAGpC,YAAgBH,CAAI;AAAA,YAAA;AAAA,UAAA;AAAA,UAEvB,gBAAAiB;AAAA,YAACC,EAAO;AAAA,YAAP;AAAA,cACC,WAAU;AAAA,cACV,SAASpB,EAAe;AAAA,cACxB,SAASe,IAAWf,EAAe,UAAU;AAAA,cAC7C,YAAY;AAAA,gBACV,GAAGK;AAAA,gBACH,OAAOY,KAAOZ,GAAY,SAAS,KAAK;AAAA,cAAA;AAAA,cAGzC,YAAgBH,CAAI;AAAA,YAAA;AAAA,UAAA;AAAA,4BAEtB,QAAA,EAAK,WAAU,
|
|
1
|
+
{"version":3,"file":"RollingText.js","sources":["../../../../src/lib/TextAnimation/RollingText.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n motion,\n useInView,\n type UseInViewOptions,\n type Transition,\n} from \"motion/react\";\n\nconst ENTRY_ANIMATION = {\n initial: { rotateX: 0 },\n animate: { rotateX: 90 },\n};\n\nconst EXIT_ANIMATION = {\n initial: { rotateX: 90 },\n animate: { rotateX: 0 },\n};\n\nconst formatCharacter = (char: string) => (char === \" \" ? \"\\u00A0\" : char);\n\ntype RollingTextProps = Omit<React.ComponentProps<\"span\">, \"children\"> & {\n transition?: Transition;\n inView?: boolean;\n inViewMargin?: UseInViewOptions[\"margin\"];\n inViewOnce?: boolean;\n text: string;\n};\n\nfunction RollingText({\n ref,\n transition = { duration: 0.5, delay: 0.1, ease: \"easeOut\" },\n inView = false,\n inViewMargin = \"0px\",\n inViewOnce = true,\n text,\n ...props\n}: RollingTextProps) {\n const localRef = React.useRef<HTMLSpanElement>(null);\n React.useImperativeHandle(ref as any, () => localRef.current!);\n\n const inViewResult = useInView(localRef, {\n once: inViewOnce,\n margin: inViewMargin,\n });\n const isInView = !inView || inViewResult;\n\n const characters = React.useMemo(() => text.split(\"\"), [text]);\n\n return (\n <span data-slot=\"rolling-text\" {...(props as any)} ref={ref}>\n {characters.map((char, idx) => (\n <span\n key={idx}\n className=\"ds:relative ds:inline-block ds:perspective-[9999999px] ds:transform-3d ds:w-auto\"\n aria-hidden=\"true\"\n >\n <motion.span\n className=\"ds:absolute ds:inline-block ds:backface-hidden ds:origin-[50%_25%]\"\n initial={ENTRY_ANIMATION.initial}\n animate={isInView ? ENTRY_ANIMATION.animate : undefined}\n transition={{\n ...transition,\n delay: idx * (transition?.delay ?? 0),\n }}\n >\n {formatCharacter(char)}\n </motion.span>\n <motion.span\n className=\"ds:absolute ds:inline-block ds:backface-hidden ds:origin-[50%_100%]\"\n initial={EXIT_ANIMATION.initial}\n animate={isInView ? EXIT_ANIMATION.animate : undefined}\n transition={{\n ...transition,\n delay: idx * (transition?.delay ?? 0) + 0.3,\n }}\n >\n {formatCharacter(char)}\n </motion.span>\n <span className=\"ds:invisible\">{formatCharacter(char)}</span>\n </span>\n ))}\n\n <span className=\"ds:sr-only\">{text}</span>\n </span>\n );\n}\n\nexport { RollingText, type RollingTextProps };\n"],"names":["ENTRY_ANIMATION","EXIT_ANIMATION","formatCharacter","char","RollingText","ref","transition","inView","inViewMargin","inViewOnce","text","props","localRef","React","inViewResult","useInView","isInView","characters","idx","jsxs","jsx","motion"],"mappings":";;;AAUA,MAAMA,IAAkB;AAAA,EACtB,SAAS,EAAE,SAAS,EAAA;AAAA,EACpB,SAAS,EAAE,SAAS,GAAA;AACtB,GAEMC,IAAiB;AAAA,EACrB,SAAS,EAAE,SAAS,GAAA;AAAA,EACpB,SAAS,EAAE,SAAS,EAAA;AACtB,GAEMC,IAAkB,CAACC,MAAkBA,MAAS,MAAM,MAAWA;AAUrE,SAASC,EAAY;AAAA,EACnB,KAAAC;AAAA,EACA,YAAAC,IAAa,EAAE,UAAU,KAAK,OAAO,KAAK,MAAM,UAAA;AAAA,EAChD,QAAAC,IAAS;AAAA,EACT,cAAAC,IAAe;AAAA,EACf,YAAAC,IAAa;AAAA,EACb,MAAAC;AAAA,EACA,GAAGC;AACL,GAAqB;AACnB,QAAMC,IAAWC,EAAM,OAAwB,IAAI;AACnD,EAAAA,EAAM,oBAAoBR,GAAY,MAAMO,EAAS,OAAQ;AAE7D,QAAME,IAAeC,EAAUH,GAAU;AAAA,IACvC,MAAMH;AAAA,IACN,QAAQD;AAAA,EAAA,CACT,GACKQ,IAAW,CAACT,KAAUO,GAEtBG,IAAaJ,EAAM,QAAQ,MAAMH,EAAK,MAAM,EAAE,GAAG,CAACA,CAAI,CAAC;AAE7D,2BACG,QAAA,EAAK,aAAU,gBAAgB,GAAIC,GAAe,KAAAN,GAChD,UAAA;AAAA,IAAAY,EAAW,IAAI,CAACd,GAAMe,MACrB,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,WAAU;AAAA,QACV,eAAY;AAAA,QAEZ,UAAA;AAAA,UAAA,gBAAAC;AAAA,YAACC,EAAO;AAAA,YAAP;AAAA,cACC,WAAU;AAAA,cACV,SAASrB,EAAgB;AAAA,cACzB,SAASgB,IAAWhB,EAAgB,UAAU;AAAA,cAC9C,YAAY;AAAA,gBACV,GAAGM;AAAA,gBACH,OAAOY,KAAOZ,GAAY,SAAS;AAAA,cAAA;AAAA,cAGpC,YAAgBH,CAAI;AAAA,YAAA;AAAA,UAAA;AAAA,UAEvB,gBAAAiB;AAAA,YAACC,EAAO;AAAA,YAAP;AAAA,cACC,WAAU;AAAA,cACV,SAASpB,EAAe;AAAA,cACxB,SAASe,IAAWf,EAAe,UAAU;AAAA,cAC7C,YAAY;AAAA,gBACV,GAAGK;AAAA,gBACH,OAAOY,KAAOZ,GAAY,SAAS,KAAK;AAAA,cAAA;AAAA,cAGzC,YAAgBH,CAAI;AAAA,YAAA;AAAA,UAAA;AAAA,4BAEtB,QAAA,EAAK,WAAU,gBAAgB,UAAAD,EAAgBC,CAAI,EAAA,CAAE;AAAA,QAAA;AAAA,MAAA;AAAA,MA1BjDe;AAAA,IAAA,CA4BR;AAAA,IAED,gBAAAE,EAAC,QAAA,EAAK,WAAU,cAAc,UAAAV,EAAA,CAAK;AAAA,EAAA,GACrC;AAEJ;"}
|
|
@@ -41,16 +41,16 @@ function Y({
|
|
|
41
41
|
containerClassName: n,
|
|
42
42
|
...a
|
|
43
43
|
}) {
|
|
44
|
-
const [
|
|
44
|
+
const [s, c] = p.useState(0);
|
|
45
45
|
p.useEffect(() => {
|
|
46
46
|
if (!Array.isArray(r)) return;
|
|
47
|
-
const
|
|
48
|
-
|
|
47
|
+
const d = setInterval(() => {
|
|
48
|
+
c((l) => (l + 1) % r.length);
|
|
49
49
|
}, o);
|
|
50
|
-
return () => clearInterval(
|
|
50
|
+
return () => clearInterval(d);
|
|
51
51
|
}, [r, o]);
|
|
52
|
-
const m = Array.isArray(r) ? r[
|
|
53
|
-
return /* @__PURE__ */ i("div", { className: u("overflow-hidden py-1", n), children: /* @__PURE__ */ i(f, { mode: "wait", children: /* @__PURE__ */ i(
|
|
52
|
+
const m = Array.isArray(r) ? r[s] : r;
|
|
53
|
+
return /* @__PURE__ */ i("div", { className: u("ds:overflow-hidden ds:py-1", n), children: /* @__PURE__ */ i(f, { mode: "wait", children: /* @__PURE__ */ i(
|
|
54
54
|
y.div,
|
|
55
55
|
{
|
|
56
56
|
transition: e,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RotatingText.js","sources":["../../../../src/lib/TextAnimation/RotatingText.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n AnimatePresence,\n motion,\n type HTMLMotionProps,\n type Transition,\n} from \"motion/react\";\nimport { cn } from \"@dsui/ui/index\";\n\ntype RotatingTextProps = {\n text: string | string[];\n duration?: number;\n transition?: Transition;\n y?: number;\n containerClassName?: string;\n} & HTMLMotionProps<\"div\">;\n\nfunction RotatingText({\n text,\n y = -50,\n duration = 2000,\n transition = { duration: 0.3, ease: \"easeOut\" },\n containerClassName,\n ...props\n}: RotatingTextProps) {\n const [index, setIndex] = React.useState(0);\n\n React.useEffect(() => {\n if (!Array.isArray(text)) return;\n const interval = setInterval(() => {\n setIndex((prevIndex) => (prevIndex + 1) % text.length);\n }, duration);\n return () => clearInterval(interval);\n }, [text, duration]);\n\n const currentText = Array.isArray(text) ? text[index] : text;\n\n return (\n <div className={cn(\"overflow-hidden py-1\", containerClassName)}>\n <AnimatePresence mode=\"wait\">\n <motion.div\n key={currentText}\n transition={transition}\n initial={{ opacity: 0, y: -y }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y }}\n {...(props as any)}\n >\n {currentText}\n </motion.div>\n </AnimatePresence>\n </div>\n );\n}\n\nexport { RotatingText, type RotatingTextProps };\n"],"names":["RotatingText","text","y","duration","transition","containerClassName","props","index","setIndex","React","interval","prevIndex","currentText","jsx","cn","AnimatePresence","motion"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,SAASA,EAAa;AAAA,EACpB,MAAAC;AAAA,EACA,GAAAC,IAAI;AAAA,EACJ,UAAAC,IAAW;AAAA,EACX,YAAAC,IAAa,EAAE,UAAU,KAAK,MAAM,UAAA;AAAA,EACpC,oBAAAC;AAAA,EACA,GAAGC;AACL,GAAsB;AACpB,QAAM,CAACC,GAAOC,CAAQ,IAAIC,EAAM,SAAS,CAAC;AAE1C,EAAAA,EAAM,UAAU,MAAM;AACpB,QAAI,CAAC,MAAM,QAAQR,CAAI,EAAG;AAC1B,UAAMS,IAAW,YAAY,MAAM;AACjC,MAAAF,EAAS,CAACG,OAAeA,IAAY,KAAKV,EAAK,MAAM;AAAA,IACvD,GAAGE,CAAQ;AACX,WAAO,MAAM,cAAcO,CAAQ;AAAA,EACrC,GAAG,CAACT,GAAME,CAAQ,CAAC;AAEnB,QAAMS,IAAc,MAAM,QAAQX,CAAI,IAAIA,EAAKM,CAAK,IAAIN;AAExD,SACE,gBAAAY,EAAC,OAAA,EAAI,WAAWC,EAAG,
|
|
1
|
+
{"version":3,"file":"RotatingText.js","sources":["../../../../src/lib/TextAnimation/RotatingText.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n AnimatePresence,\n motion,\n type HTMLMotionProps,\n type Transition,\n} from \"motion/react\";\nimport { cn } from \"@dsui/ui/index\";\n\ntype RotatingTextProps = {\n text: string | string[];\n duration?: number;\n transition?: Transition;\n y?: number;\n containerClassName?: string;\n} & HTMLMotionProps<\"div\">;\n\nfunction RotatingText({\n text,\n y = -50,\n duration = 2000,\n transition = { duration: 0.3, ease: \"easeOut\" },\n containerClassName,\n ...props\n}: RotatingTextProps) {\n const [index, setIndex] = React.useState(0);\n\n React.useEffect(() => {\n if (!Array.isArray(text)) return;\n const interval = setInterval(() => {\n setIndex((prevIndex) => (prevIndex + 1) % text.length);\n }, duration);\n return () => clearInterval(interval);\n }, [text, duration]);\n\n const currentText = Array.isArray(text) ? text[index] : text;\n\n return (\n <div className={cn(\"ds:overflow-hidden ds:py-1\", containerClassName)}>\n <AnimatePresence mode=\"wait\">\n <motion.div\n key={currentText}\n transition={transition}\n initial={{ opacity: 0, y: -y }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y }}\n {...(props as any)}\n >\n {currentText}\n </motion.div>\n </AnimatePresence>\n </div>\n );\n}\n\nexport { RotatingText, type RotatingTextProps };\n"],"names":["RotatingText","text","y","duration","transition","containerClassName","props","index","setIndex","React","interval","prevIndex","currentText","jsx","cn","AnimatePresence","motion"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,SAASA,EAAa;AAAA,EACpB,MAAAC;AAAA,EACA,GAAAC,IAAI;AAAA,EACJ,UAAAC,IAAW;AAAA,EACX,YAAAC,IAAa,EAAE,UAAU,KAAK,MAAM,UAAA;AAAA,EACpC,oBAAAC;AAAA,EACA,GAAGC;AACL,GAAsB;AACpB,QAAM,CAACC,GAAOC,CAAQ,IAAIC,EAAM,SAAS,CAAC;AAE1C,EAAAA,EAAM,UAAU,MAAM;AACpB,QAAI,CAAC,MAAM,QAAQR,CAAI,EAAG;AAC1B,UAAMS,IAAW,YAAY,MAAM;AACjC,MAAAF,EAAS,CAACG,OAAeA,IAAY,KAAKV,EAAK,MAAM;AAAA,IACvD,GAAGE,CAAQ;AACX,WAAO,MAAM,cAAcO,CAAQ;AAAA,EACrC,GAAG,CAACT,GAAME,CAAQ,CAAC;AAEnB,QAAMS,IAAc,MAAM,QAAQX,CAAI,IAAIA,EAAKM,CAAK,IAAIN;AAExD,SACE,gBAAAY,EAAC,OAAA,EAAI,WAAWC,EAAG,8BAA8BT,CAAkB,GACjE,UAAA,gBAAAQ,EAACE,GAAA,EAAgB,MAAK,QACpB,UAAA,gBAAAF;AAAA,IAACG,EAAO;AAAA,IAAP;AAAA,MAEC,YAAAZ;AAAA,MACA,SAAS,EAAE,SAAS,GAAG,GAAG,CAACF,EAAA;AAAA,MAC3B,SAAS,EAAE,SAAS,GAAG,GAAG,EAAA;AAAA,MAC1B,MAAM,EAAE,SAAS,GAAG,GAAAA,EAAA;AAAA,MACnB,GAAII;AAAA,MAEJ,UAAAM;AAAA,IAAA;AAAA,IAPIA;AAAA,EAAA,GAST,EAAA,CACF;AAEJ;"}
|