@sth87/shadcn-design-system 0.0.36 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AI_CONTEXT.md +212 -214
- package/dist/cjs/components/Accordion/Accordion.cjs +1 -1
- package/dist/cjs/components/Accordion/Accordion.cjs.map +1 -1
- package/dist/cjs/components/Avatar/Avatar.cjs +1 -1
- package/dist/cjs/components/Avatar/Avatar.cjs.map +1 -1
- package/dist/cjs/components/Badge/Badge.cjs +1 -1
- package/dist/cjs/components/Badge/Badge.cjs.map +1 -1
- package/dist/cjs/components/Breadcrumb/Breadcrumb.cjs +1 -1
- package/dist/cjs/components/Breadcrumb/Breadcrumb.cjs.map +1 -1
- package/dist/cjs/components/Button/Button.cjs +1 -1
- package/dist/cjs/components/Button/Button.cjs.map +1 -1
- package/dist/cjs/components/Calendar/Calendar.cjs +1 -1
- package/dist/cjs/components/Calendar/Calendar.cjs.map +1 -1
- package/dist/cjs/components/Carousel/Carousel.cjs +1 -1
- package/dist/cjs/components/Carousel/Carousel.cjs.map +1 -1
- package/dist/cjs/components/Checkbox/Checkbox.cjs +1 -1
- package/dist/cjs/components/Checkbox/Checkbox.cjs.map +1 -1
- package/dist/cjs/components/Collapsible/Collapsible.cjs +1 -1
- package/dist/cjs/components/Collapsible/Collapsible.cjs.map +1 -1
- package/dist/cjs/components/Command/Command.cjs +1 -1
- package/dist/cjs/components/Command/Command.cjs.map +1 -1
- package/dist/cjs/components/ContextMenu/ContextMenu.cjs +1 -1
- package/dist/cjs/components/ContextMenu/ContextMenu.cjs.map +1 -1
- package/dist/cjs/components/Cropper/Cropper.cjs +1 -1
- package/dist/cjs/components/Cropper/Cropper.cjs.map +1 -1
- package/dist/cjs/components/DatePicker/DatePicker.cjs +1 -1
- package/dist/cjs/components/DatePicker/DatePicker.cjs.map +1 -1
- package/dist/cjs/components/DatePicker/RangePicker.cjs +1 -1
- package/dist/cjs/components/DatePicker/RangePicker.cjs.map +1 -1
- package/dist/cjs/components/DatePicker/TimePicker.cjs +1 -1
- package/dist/cjs/components/DatePicker/TimePicker.cjs.map +1 -1
- package/dist/cjs/components/Dialog/Dialog.cjs +1 -1
- package/dist/cjs/components/Dialog/Dialog.cjs.map +1 -1
- package/dist/cjs/components/DropdownMenu/DropdownMenu.cjs +1 -1
- package/dist/cjs/components/DropdownMenu/DropdownMenu.cjs.map +1 -1
- package/dist/cjs/components/FloatLabel.cjs +1 -1
- package/dist/cjs/components/FloatLabel.cjs.map +1 -1
- package/dist/cjs/components/Glass/Glass.cjs +1 -1
- package/dist/cjs/components/Glass/Glass.cjs.map +1 -1
- package/dist/cjs/components/ImageViewer/ImageViewer.cjs +1 -1
- package/dist/cjs/components/ImageViewer/ImageViewer.cjs.map +1 -1
- package/dist/cjs/components/Input/Input.cjs +1 -1
- package/dist/cjs/components/Input/Input.cjs.map +1 -1
- package/dist/cjs/components/InputOTP/InputOTP.cjs +1 -1
- package/dist/cjs/components/InputOTP/InputOTP.cjs.map +1 -1
- package/dist/cjs/components/Interactive/CursorFollow.cjs +1 -1
- package/dist/cjs/components/Interactive/CursorFollow.cjs.map +1 -1
- package/dist/cjs/components/Marquee/Marquee.cjs +1 -1
- package/dist/cjs/components/Marquee/Marquee.cjs.map +1 -1
- package/dist/cjs/components/Pagination/Pagination.cjs +1 -1
- package/dist/cjs/components/Pagination/Pagination.cjs.map +1 -1
- package/dist/cjs/components/QrCode/QrCode.cjs +1 -1
- package/dist/cjs/components/QrCode/QrCode.cjs.map +1 -1
- package/dist/cjs/components/Radio/Radio.cjs +1 -1
- package/dist/cjs/components/Radio/Radio.cjs.map +1 -1
- package/dist/cjs/components/Rate/Rate.cjs +1 -1
- package/dist/cjs/components/Rate/Rate.cjs.map +1 -1
- package/dist/cjs/components/Resizable/Resizable.cjs +1 -1
- package/dist/cjs/components/Resizable/Resizable.cjs.map +1 -1
- package/dist/cjs/components/ScrollArea/ScrollArea.cjs +1 -1
- package/dist/cjs/components/ScrollArea/ScrollArea.cjs.map +1 -1
- package/dist/cjs/components/Select/Select.cjs +1 -1
- package/dist/cjs/components/Select/Select.cjs.map +1 -1
- package/dist/cjs/components/Sheet/Sheet.cjs +2 -2
- package/dist/cjs/components/Sheet/Sheet.cjs.map +1 -1
- package/dist/cjs/components/Slider/Slider.cjs +1 -1
- package/dist/cjs/components/Slider/Slider.cjs.map +1 -1
- package/dist/cjs/components/Stepper/Stepper.cjs +1 -1
- package/dist/cjs/components/Stepper/Stepper.cjs.map +1 -1
- package/dist/cjs/components/Stepper/StepperWrapper.cjs +1 -1
- package/dist/cjs/components/Stepper/StepperWrapper.cjs.map +1 -1
- package/dist/cjs/components/Switch/Switch.cjs +1 -1
- package/dist/cjs/components/Switch/Switch.cjs.map +1 -1
- package/dist/cjs/components/Table/TableFilter/data-table-date-filter.cjs +1 -1
- package/dist/cjs/components/Table/TableFilter/data-table-date-filter.cjs.map +1 -1
- package/dist/cjs/components/Table/TableFilter/data-table-filter-popover.cjs +1 -1
- package/dist/cjs/components/Table/TableFilter/data-table-filter-popover.cjs.map +1 -1
- package/dist/cjs/components/Table/TableFilter/data-table-slider-filter.cjs +1 -1
- package/dist/cjs/components/Table/TableFilter/data-table-slider-filter.cjs.map +1 -1
- package/dist/cjs/components/Table/data-table-column-header.cjs +1 -1
- package/dist/cjs/components/Table/data-table-column-header.cjs.map +1 -1
- package/dist/cjs/components/Table/data-table-pagination.cjs +1 -1
- package/dist/cjs/components/Table/data-table-pagination.cjs.map +1 -1
- package/dist/cjs/components/Table/data-table.cjs +1 -1
- package/dist/cjs/components/Table/data-table.cjs.map +1 -1
- package/dist/cjs/components/Tabs/Tabs.cjs +1 -1
- package/dist/cjs/components/Tabs/Tabs.cjs.map +1 -1
- package/dist/cjs/components/Tabs/classes.cjs +1 -1
- package/dist/cjs/components/Tabs/classes.cjs.map +1 -1
- package/dist/cjs/components/Textarea/Textarea.cjs +1 -1
- package/dist/cjs/components/Textarea/Textarea.cjs.map +1 -1
- package/dist/cjs/components/TimeGridView.cjs +1 -1
- package/dist/cjs/components/TimeGridView.cjs.map +1 -1
- package/dist/cjs/components/Toast/Toast.cjs +1 -1
- package/dist/cjs/components/Toast/Toast.cjs.map +1 -1
- package/dist/cjs/components/Tooltip/Tooltip.cjs +1 -1
- package/dist/cjs/components/Tooltip/Tooltip.cjs.map +1 -1
- package/dist/cjs/components/Tour/Tour.cjs +1 -1
- package/dist/cjs/components/Tour/Tour.cjs.map +1 -1
- package/dist/cjs/components/Tour/TourWrapper.cjs +1 -1
- package/dist/cjs/components/Tour/TourWrapper.cjs.map +1 -1
- package/dist/cjs/components/Upload/Upload.cjs +3 -3
- package/dist/cjs/components/Upload/Upload.cjs.map +1 -1
- package/dist/cjs/components/WheelColumn.cjs +1 -1
- package/dist/cjs/components/WheelColumn.cjs.map +1 -1
- package/dist/cjs/lib/TextAnimation/BlurText.cjs +1 -1
- package/dist/cjs/lib/TextAnimation/BlurText.cjs.map +1 -1
- package/dist/cjs/lib/TextAnimation/CircularText.cjs +1 -1
- package/dist/cjs/lib/TextAnimation/CircularText.cjs.map +1 -1
- package/dist/cjs/lib/TextAnimation/FlipWords.cjs +1 -1
- package/dist/cjs/lib/TextAnimation/FlipWords.cjs.map +1 -1
- package/dist/cjs/lib/TextAnimation/GradientText.cjs +1 -1
- package/dist/cjs/lib/TextAnimation/GradientText.cjs.map +1 -1
- package/dist/cjs/lib/TextAnimation/RollingText.cjs +1 -1
- package/dist/cjs/lib/TextAnimation/RollingText.cjs.map +1 -1
- package/dist/cjs/lib/TextAnimation/RotatingText.cjs +1 -1
- package/dist/cjs/lib/TextAnimation/RotatingText.cjs.map +1 -1
- package/dist/cjs/lib/TextAnimation/ShimmeringText.cjs +1 -1
- package/dist/cjs/lib/TextAnimation/ShimmeringText.cjs.map +1 -1
- package/dist/cjs/lib/TextAnimation/TextGenerateEffect.cjs +1 -1
- package/dist/cjs/lib/TextAnimation/TextGenerateEffect.cjs.map +1 -1
- package/dist/cjs/lib/TextAnimation/TextHoverEffect.cjs +1 -1
- package/dist/cjs/lib/TextAnimation/TextHoverEffect.cjs.map +1 -1
- package/dist/cjs/lib/TextAnimation/TextPressureEffect.cjs +2 -2
- package/dist/cjs/lib/TextAnimation/TextPressureEffect.cjs.map +1 -1
- package/dist/cjs/lib/TextAnimation/TypingText.cjs +1 -1
- package/dist/cjs/lib/TextAnimation/TypingText.cjs.map +1 -1
- package/dist/cjs/lib/TextAnimation/WritingText.cjs +1 -1
- package/dist/cjs/lib/TextAnimation/WritingText.cjs.map +1 -1
- package/dist/cjs/node_modules/.pnpm/nuqs@2.8.0_next@15.5.9_@babel_core@7.28.5_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1/node_modules/nuqs/dist/server.cjs.map +1 -0
- package/dist/cjs/packages/ui/src/components/accordion.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/accordion.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/alert-dialog.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/alert-dialog.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/avatar.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/avatar.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/badge.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/badge.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/breadcrumb.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/breadcrumb.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/button-group.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/button-group.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/button.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/button.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/calendar.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/calendar.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/checkbox.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/checkbox.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/combobox.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/combobox.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/command.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/command.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/context-menu.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/context-menu.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/dialog.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/dialog.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/drawer.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/drawer.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/dropdown-menu.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/dropdown-menu.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/input-otp.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/input-otp.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/input.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/input.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/label.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/label.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/pagination.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/pagination.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/popover.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/popover.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/radio-group.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/radio-group.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/resizable.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/resizable.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/scroll-area.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/scroll-area.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/select.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/select.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/separator.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/separator.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/sheet.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/sheet.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/sidebar.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/sidebar.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/skeleton.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/skeleton.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/switch.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/switch.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/table.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/table.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/tabs.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/tabs.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/textarea.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/textarea.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/toggle.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/toggle.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/tooltip.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/tooltip.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/tree-view.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/tree-view.cjs.map +1 -1
- package/dist/cjs/styles/index.css +1 -1
- package/dist/cjs/utils/animations.cjs +1 -1
- package/dist/cjs/utils/animations.cjs.map +1 -1
- package/dist/cjs/utils/css.cjs +1 -1
- package/dist/cjs/utils/css.cjs.map +1 -1
- package/dist/cjs/utils/parsers.cjs +1 -1
- package/dist/cjs/utils/parsers.cjs.map +1 -1
- package/dist/esm/components/Accordion/Accordion.js +60 -60
- package/dist/esm/components/Accordion/Accordion.js.map +1 -1
- package/dist/esm/components/Avatar/Avatar.js +40 -40
- package/dist/esm/components/Avatar/Avatar.js.map +1 -1
- package/dist/esm/components/Badge/Badge.js +1 -1
- package/dist/esm/components/Badge/Badge.js.map +1 -1
- package/dist/esm/components/Breadcrumb/Breadcrumb.js +36 -36
- package/dist/esm/components/Breadcrumb/Breadcrumb.js.map +1 -1
- package/dist/esm/components/Button/Button.js +9 -9
- package/dist/esm/components/Button/Button.js.map +1 -1
- package/dist/esm/components/Calendar/Calendar.js +4 -4
- package/dist/esm/components/Calendar/Calendar.js.map +1 -1
- package/dist/esm/components/Carousel/Carousel.js +165 -165
- package/dist/esm/components/Carousel/Carousel.js.map +1 -1
- package/dist/esm/components/Checkbox/Checkbox.js +26 -26
- package/dist/esm/components/Checkbox/Checkbox.js.map +1 -1
- package/dist/esm/components/Collapsible/Collapsible.js +43 -43
- package/dist/esm/components/Collapsible/Collapsible.js.map +1 -1
- package/dist/esm/components/Command/Command.js +28 -28
- package/dist/esm/components/Command/Command.js.map +1 -1
- package/dist/esm/components/ContextMenu/ContextMenu.js +11 -11
- package/dist/esm/components/ContextMenu/ContextMenu.js.map +1 -1
- package/dist/esm/components/Cropper/Cropper.js +132 -132
- package/dist/esm/components/Cropper/Cropper.js.map +1 -1
- package/dist/esm/components/DatePicker/DatePicker.js +75 -75
- package/dist/esm/components/DatePicker/DatePicker.js.map +1 -1
- package/dist/esm/components/DatePicker/RangePicker.js +136 -136
- package/dist/esm/components/DatePicker/RangePicker.js.map +1 -1
- package/dist/esm/components/DatePicker/TimePicker.js +150 -150
- package/dist/esm/components/DatePicker/TimePicker.js.map +1 -1
- package/dist/esm/components/Dialog/Dialog.js +114 -114
- package/dist/esm/components/Dialog/Dialog.js.map +1 -1
- package/dist/esm/components/DropdownMenu/DropdownMenu.js +13 -13
- package/dist/esm/components/DropdownMenu/DropdownMenu.js.map +1 -1
- package/dist/esm/components/FloatLabel.js +44 -44
- package/dist/esm/components/FloatLabel.js.map +1 -1
- package/dist/esm/components/Glass/Glass.js +15 -15
- package/dist/esm/components/Glass/Glass.js.map +1 -1
- package/dist/esm/components/ImageViewer/ImageViewer.js +53 -53
- package/dist/esm/components/ImageViewer/ImageViewer.js.map +1 -1
- package/dist/esm/components/Input/Input.js +104 -104
- package/dist/esm/components/Input/Input.js.map +1 -1
- package/dist/esm/components/InputOTP/InputOTP.js +16 -16
- package/dist/esm/components/InputOTP/InputOTP.js.map +1 -1
- package/dist/esm/components/Interactive/CursorFollow.js +49 -49
- package/dist/esm/components/Interactive/CursorFollow.js.map +1 -1
- package/dist/esm/components/Marquee/Marquee.js +130 -130
- package/dist/esm/components/Marquee/Marquee.js.map +1 -1
- package/dist/esm/components/Pagination/Pagination.js +68 -68
- package/dist/esm/components/Pagination/Pagination.js.map +1 -1
- package/dist/esm/components/QrCode/QrCode.js +37 -37
- package/dist/esm/components/QrCode/QrCode.js.map +1 -1
- package/dist/esm/components/Radio/Radio.js +16 -16
- package/dist/esm/components/Radio/Radio.js.map +1 -1
- package/dist/esm/components/Rate/Rate.js +62 -62
- package/dist/esm/components/Rate/Rate.js.map +1 -1
- package/dist/esm/components/Resizable/Resizable.js +6 -6
- package/dist/esm/components/Resizable/Resizable.js.map +1 -1
- package/dist/esm/components/ScrollArea/ScrollArea.js +10 -10
- package/dist/esm/components/ScrollArea/ScrollArea.js.map +1 -1
- package/dist/esm/components/Select/Select.js +64 -64
- package/dist/esm/components/Select/Select.js.map +1 -1
- package/dist/esm/components/Sheet/Sheet.js +21 -21
- package/dist/esm/components/Sheet/Sheet.js.map +1 -1
- package/dist/esm/components/Slider/Slider.js +54 -54
- package/dist/esm/components/Slider/Slider.js.map +1 -1
- package/dist/esm/components/Stepper/Stepper.js +198 -198
- package/dist/esm/components/Stepper/Stepper.js.map +1 -1
- package/dist/esm/components/Stepper/StepperWrapper.js +15 -15
- package/dist/esm/components/Stepper/StepperWrapper.js.map +1 -1
- package/dist/esm/components/Switch/Switch.js +38 -38
- package/dist/esm/components/Switch/Switch.js.map +1 -1
- package/dist/esm/components/Table/TableFilter/data-table-date-filter.js +37 -37
- package/dist/esm/components/Table/TableFilter/data-table-date-filter.js.map +1 -1
- package/dist/esm/components/Table/TableFilter/data-table-filter-popover.js +25 -25
- package/dist/esm/components/Table/TableFilter/data-table-filter-popover.js.map +1 -1
- package/dist/esm/components/Table/TableFilter/data-table-slider-filter.js +64 -64
- package/dist/esm/components/Table/TableFilter/data-table-slider-filter.js.map +1 -1
- package/dist/esm/components/Table/data-table-column-header.js +18 -18
- package/dist/esm/components/Table/data-table-column-header.js.map +1 -1
- package/dist/esm/components/Table/data-table-pagination.js +21 -21
- package/dist/esm/components/Table/data-table-pagination.js.map +1 -1
- package/dist/esm/components/Table/data-table.js +18 -18
- package/dist/esm/components/Table/data-table.js.map +1 -1
- package/dist/esm/components/Tabs/Tabs.js +242 -242
- package/dist/esm/components/Tabs/Tabs.js.map +1 -1
- package/dist/esm/components/Tabs/classes.js +51 -51
- package/dist/esm/components/Tabs/classes.js.map +1 -1
- package/dist/esm/components/Textarea/Textarea.js +49 -49
- package/dist/esm/components/Textarea/Textarea.js.map +1 -1
- package/dist/esm/components/TimeGridView.js +12 -12
- package/dist/esm/components/TimeGridView.js.map +1 -1
- package/dist/esm/components/Toast/Toast.js +45 -45
- package/dist/esm/components/Toast/Toast.js.map +1 -1
- package/dist/esm/components/Tooltip/Tooltip.js +19 -19
- package/dist/esm/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/esm/components/Tour/Tour.js +11 -11
- package/dist/esm/components/Tour/Tour.js.map +1 -1
- package/dist/esm/components/Tour/TourWrapper.js +15 -15
- package/dist/esm/components/Tour/TourWrapper.js.map +1 -1
- package/dist/esm/components/Upload/Upload.js +405 -405
- package/dist/esm/components/Upload/Upload.js.map +1 -1
- package/dist/esm/components/WheelColumn.js +47 -47
- package/dist/esm/components/WheelColumn.js.map +1 -1
- package/dist/esm/lib/TextAnimation/BlurText.js +18 -18
- package/dist/esm/lib/TextAnimation/BlurText.js.map +1 -1
- package/dist/esm/lib/TextAnimation/CircularText.js +7 -7
- package/dist/esm/lib/TextAnimation/CircularText.js.map +1 -1
- package/dist/esm/lib/TextAnimation/FlipWords.js +21 -21
- package/dist/esm/lib/TextAnimation/FlipWords.js.map +1 -1
- package/dist/esm/lib/TextAnimation/GradientText.js +4 -4
- package/dist/esm/lib/TextAnimation/GradientText.js.map +1 -1
- package/dist/esm/lib/TextAnimation/RollingText.js +24 -24
- package/dist/esm/lib/TextAnimation/RollingText.js.map +1 -1
- package/dist/esm/lib/TextAnimation/RotatingText.js +6 -6
- package/dist/esm/lib/TextAnimation/RotatingText.js.map +1 -1
- package/dist/esm/lib/TextAnimation/ShimmeringText.js +9 -9
- package/dist/esm/lib/TextAnimation/ShimmeringText.js.map +1 -1
- package/dist/esm/lib/TextAnimation/TextGenerateEffect.js +14 -14
- package/dist/esm/lib/TextAnimation/TextGenerateEffect.js.map +1 -1
- package/dist/esm/lib/TextAnimation/TextHoverEffect.js +9 -9
- package/dist/esm/lib/TextAnimation/TextHoverEffect.js.map +1 -1
- package/dist/esm/lib/TextAnimation/TextPressureEffect.js +3 -3
- package/dist/esm/lib/TextAnimation/TextPressureEffect.js.map +1 -1
- package/dist/esm/lib/TextAnimation/TypingText.js +17 -17
- package/dist/esm/lib/TextAnimation/TypingText.js.map +1 -1
- package/dist/esm/lib/TextAnimation/WritingText.js +10 -10
- package/dist/esm/lib/TextAnimation/WritingText.js.map +1 -1
- package/dist/esm/node_modules/.pnpm/nuqs@2.8.0_next@15.5.9_@babel_core@7.28.5_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1/node_modules/nuqs/dist/server.js.map +1 -0
- package/dist/esm/packages/ui/src/components/accordion.js +31 -31
- package/dist/esm/packages/ui/src/components/accordion.js.map +1 -1
- package/dist/esm/packages/ui/src/components/alert-dialog.js +33 -33
- package/dist/esm/packages/ui/src/components/alert-dialog.js.map +1 -1
- package/dist/esm/packages/ui/src/components/avatar.js +20 -20
- package/dist/esm/packages/ui/src/components/avatar.js.map +1 -1
- package/dist/esm/packages/ui/src/components/badge.js +53 -53
- package/dist/esm/packages/ui/src/components/badge.js.map +1 -1
- package/dist/esm/packages/ui/src/components/breadcrumb.js +20 -20
- package/dist/esm/packages/ui/src/components/breadcrumb.js.map +1 -1
- package/dist/esm/packages/ui/src/components/button-group.js +31 -31
- package/dist/esm/packages/ui/src/components/button-group.js.map +1 -1
- package/dist/esm/packages/ui/src/components/button.js +90 -90
- package/dist/esm/packages/ui/src/components/button.js.map +1 -1
- package/dist/esm/packages/ui/src/components/calendar.js +94 -94
- package/dist/esm/packages/ui/src/components/calendar.js.map +1 -1
- package/dist/esm/packages/ui/src/components/checkbox.js +47 -47
- package/dist/esm/packages/ui/src/components/checkbox.js.map +1 -1
- package/dist/esm/packages/ui/src/components/combobox.js +64 -64
- package/dist/esm/packages/ui/src/components/combobox.js.map +1 -1
- package/dist/esm/packages/ui/src/components/command.js +77 -77
- package/dist/esm/packages/ui/src/components/command.js.map +1 -1
- package/dist/esm/packages/ui/src/components/context-menu.js +76 -76
- package/dist/esm/packages/ui/src/components/context-menu.js.map +1 -1
- package/dist/esm/packages/ui/src/components/dialog.js +54 -54
- package/dist/esm/packages/ui/src/components/dialog.js.map +1 -1
- package/dist/esm/packages/ui/src/components/drawer.js +39 -39
- package/dist/esm/packages/ui/src/components/drawer.js.map +1 -1
- package/dist/esm/packages/ui/src/components/dropdown-menu.js +109 -109
- package/dist/esm/packages/ui/src/components/dropdown-menu.js.map +1 -1
- package/dist/esm/packages/ui/src/components/input-otp.js +30 -30
- package/dist/esm/packages/ui/src/components/input-otp.js.map +1 -1
- package/dist/esm/packages/ui/src/components/input.js +19 -19
- package/dist/esm/packages/ui/src/components/input.js.map +1 -1
- package/dist/esm/packages/ui/src/components/label.js +9 -9
- package/dist/esm/packages/ui/src/components/label.js.map +1 -1
- package/dist/esm/packages/ui/src/components/pagination.js +26 -26
- package/dist/esm/packages/ui/src/components/pagination.js.map +1 -1
- package/dist/esm/packages/ui/src/components/popover.js +13 -13
- package/dist/esm/packages/ui/src/components/popover.js.map +1 -1
- package/dist/esm/packages/ui/src/components/radio-group.js +45 -45
- package/dist/esm/packages/ui/src/components/radio-group.js.map +1 -1
- package/dist/esm/packages/ui/src/components/resizable.js +18 -18
- package/dist/esm/packages/ui/src/components/resizable.js.map +1 -1
- package/dist/esm/packages/ui/src/components/scroll-area.js +31 -31
- package/dist/esm/packages/ui/src/components/scroll-area.js.map +1 -1
- package/dist/esm/packages/ui/src/components/select.js +119 -119
- package/dist/esm/packages/ui/src/components/select.js.map +1 -1
- package/dist/esm/packages/ui/src/components/separator.js +86 -86
- package/dist/esm/packages/ui/src/components/separator.js.map +1 -1
- package/dist/esm/packages/ui/src/components/sheet.js +50 -50
- package/dist/esm/packages/ui/src/components/sheet.js.map +1 -1
- package/dist/esm/packages/ui/src/components/sidebar.js +198 -198
- package/dist/esm/packages/ui/src/components/sidebar.js.map +1 -1
- package/dist/esm/packages/ui/src/components/skeleton.js +3 -3
- package/dist/esm/packages/ui/src/components/skeleton.js.map +1 -1
- package/dist/esm/packages/ui/src/components/switch.js +57 -57
- package/dist/esm/packages/ui/src/components/switch.js.map +1 -1
- package/dist/esm/packages/ui/src/components/table.js +17 -17
- package/dist/esm/packages/ui/src/components/table.js.map +1 -1
- package/dist/esm/packages/ui/src/components/tabs.js +33 -33
- package/dist/esm/packages/ui/src/components/tabs.js.map +1 -1
- package/dist/esm/packages/ui/src/components/textarea.js +17 -17
- package/dist/esm/packages/ui/src/components/textarea.js.map +1 -1
- package/dist/esm/packages/ui/src/components/toggle.js +36 -36
- package/dist/esm/packages/ui/src/components/toggle.js.map +1 -1
- package/dist/esm/packages/ui/src/components/tooltip.js +20 -20
- package/dist/esm/packages/ui/src/components/tooltip.js.map +1 -1
- package/dist/esm/packages/ui/src/components/tree-view.js +218 -218
- package/dist/esm/packages/ui/src/components/tree-view.js.map +1 -1
- package/dist/esm/styles/index.css +1 -1
- package/dist/esm/utils/animations.js +55 -55
- package/dist/esm/utils/animations.js.map +1 -1
- package/dist/esm/utils/css.js +7 -7
- package/dist/esm/utils/css.js.map +1 -1
- package/dist/esm/utils/parsers.js +1 -1
- package/dist/types/components/DatePicker/RangePicker.d.ts.map +1 -1
- package/dist/types/lib/TextAnimation/TextPressureEffect.d.ts.map +1 -1
- package/dist/types/lib/TextAnimation/TypingText.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/cjs/node_modules/.pnpm/nuqs@2.8.0_next@15.5.9_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1/node_modules/nuqs/dist/server.cjs.map +0 -1
- package/dist/esm/node_modules/.pnpm/nuqs@2.8.0_next@15.5.9_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1/node_modules/nuqs/dist/server.js.map +0 -1
- /package/dist/cjs/node_modules/.pnpm/{nuqs@2.8.0_next@15.5.9_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1 → nuqs@2.8.0_next@15.5.9_@babel_core@7.28.5_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1}/node_modules/nuqs/dist/server.cjs +0 -0
- /package/dist/esm/node_modules/.pnpm/{nuqs@2.8.0_next@15.5.9_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1 → nuqs@2.8.0_next@15.5.9_@babel_core@7.28.5_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1}/node_modules/nuqs/dist/server.js +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const s=require("react/jsx-runtime"),j=require("react"),a=require("../../packages/ui/src/components/resizable.cjs"),i=require("../../packages/ui/src/lib/utils.cjs"),n=P=>{const{direction:r="horizontal",panels:l,withHandle:p=!0,handleVariant:S,handleIcon:f,autoSaveId:o,onLayout:t,className:
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const s=require("react/jsx-runtime"),j=require("react"),a=require("../../packages/ui/src/components/resizable.cjs"),i=require("../../packages/ui/src/lib/utils.cjs"),n=P=>{const{direction:r="horizontal",panels:l,withHandle:p=!0,handleVariant:S,handleIcon:f,autoSaveId:o,onLayout:t,className:d,panelClassName:x,handleClassName:N,children:c,keyboardResizeBy:u,storage:z}=P;return c&&!l?s.jsx(a.ResizablePanelGroup,{direction:r,autoSaveId:o,onLayout:t,className:i.cn("ds:h-full ds:w-full",d),keyboardResizeBy:u,storage:z,children:c}):!l||l.length===0?null:s.jsx(a.ResizablePanelGroup,{direction:r,autoSaveId:o,onLayout:t,className:i.cn("ds:h-full ds:w-full",d),keyboardResizeBy:u,storage:z,children:l.map((e,b)=>s.jsxs(j.Fragment,{children:[s.jsx(a.ResizablePanel,{id:e.id,defaultSize:e.defaultSize,minSize:e.minSize,maxSize:e.maxSize,collapsible:e.collapsible,collapsedSize:e.collapsedSize,onCollapse:e.onCollapse,onExpand:e.onExpand,onResize:e.onResize,order:e.order,className:i.cn(x,e.className),children:e.children}),b<l.length-1&&s.jsx(a.ResizableHandle,{withHandle:p,variant:S,icon:f,className:N})]},e.id||`panel-${b}`))})};n.displayName="Resizable";const R=a.ResizablePanel,m=a.ResizableHandle,h=Object.assign(n,{Panel:R,Handle:m,PanelGroup:a.ResizablePanelGroup});exports.ResizableHandle=a.ResizableHandle;exports.ResizablePanel=a.ResizablePanel;exports.ResizablePanelGroup=a.ResizablePanelGroup;exports.Handle=m;exports.Panel=R;exports.Resizable=h;exports.ResizableWrapper=n;exports.default=h;
|
|
2
2
|
//# sourceMappingURL=Resizable.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Resizable.cjs","sources":["../../../../src/components/Resizable/Resizable.tsx"],"sourcesContent":["import React from \"react\";\nimport {\n ResizablePanelGroup,\n ResizablePanel,\n ResizableHandle,\n resizableHandleVariants,\n} from \"@dsui/ui/components/resizable\";\nimport { cn } from \"@dsui/ui/lib/utils\";\nimport type { VariantProps } from \"class-variance-authority\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type ResizableDirection = \"horizontal\" | \"vertical\";\n\nexport type ResizableHandleVariant = VariantProps<\n typeof resizableHandleVariants\n>[\"variant\"];\n\nexport interface ResizablePanelConfig {\n id?: string;\n defaultSize?: number;\n minSize?: number;\n maxSize?: number;\n collapsible?: boolean;\n collapsedSize?: number;\n onCollapse?: () => void;\n onExpand?: () => void;\n onResize?: (size: number) => void;\n className?: string;\n children?: React.ReactNode;\n order?: number;\n}\n\ntype PanelGroupOnLayout = (sizes: number[]) => void;\n\nexport interface ResizableProps {\n /** Direction of the resizable panels */\n direction?: ResizableDirection;\n /** Configuration for panels when using wrapper mode */\n panels?: ResizablePanelConfig[];\n /** Show handle with grip icon */\n withHandle?: boolean;\n /** Handle variant: 'default' shows icon, 'line' highlights on hover */\n handleVariant?: ResizableHandleVariant;\n /** Custom icon for the handle (only works with default variant) */\n handleIcon?: React.ReactNode;\n /** Auto save layout to localStorage with this id */\n autoSaveId?: string;\n /** Callback when layout changes */\n onLayout?: PanelGroupOnLayout;\n /** Additional class for the panel group */\n className?: string;\n /** Additional class for each panel */\n panelClassName?: string;\n /** Additional class for handles */\n handleClassName?: string;\n /** Children for primitive usage */\n children?: React.ReactNode;\n /** Keyboard resize by delta percentage (default: 10) */\n keyboardResizeBy?: number;\n /** Storage object for saving layout (default: localStorage) */\n storage?: {\n getItem: (name: string) => string | null;\n setItem: (name: string, value: string) => void;\n };\n}\n\n// ============================================================================\n// Wrapper Component\n// ============================================================================\n\nconst ResizableWrapper = (props: ResizableProps) => {\n const {\n direction = \"horizontal\",\n panels,\n withHandle = true,\n handleVariant,\n handleIcon,\n autoSaveId,\n onLayout,\n className,\n panelClassName,\n handleClassName,\n children,\n keyboardResizeBy,\n storage,\n } = props;\n\n // If children are provided, use primitive mode\n if (children && !panels) {\n return (\n <ResizablePanelGroup\n direction={direction}\n autoSaveId={autoSaveId}\n onLayout={onLayout}\n className={cn(\"h-full w-full\", className)}\n keyboardResizeBy={keyboardResizeBy}\n storage={storage}\n >\n {children}\n </ResizablePanelGroup>\n );\n }\n\n // Wrapper mode with panels config\n if (!panels || panels.length === 0) {\n return null;\n }\n\n return (\n <ResizablePanelGroup\n direction={direction}\n autoSaveId={autoSaveId}\n onLayout={onLayout}\n className={cn(\"h-full w-full\", className)}\n keyboardResizeBy={keyboardResizeBy}\n storage={storage}\n >\n {panels.map((panel, index) => (\n <React.Fragment key={panel.id || `panel-${index}`}>\n <ResizablePanel\n id={panel.id}\n defaultSize={panel.defaultSize}\n minSize={panel.minSize}\n maxSize={panel.maxSize}\n collapsible={panel.collapsible}\n collapsedSize={panel.collapsedSize}\n onCollapse={panel.onCollapse}\n onExpand={panel.onExpand}\n onResize={panel.onResize}\n order={panel.order}\n className={cn(panelClassName, panel.className)}\n >\n {panel.children}\n </ResizablePanel>\n {index < panels.length - 1 && (\n <ResizableHandle\n withHandle={withHandle}\n variant={handleVariant}\n icon={handleIcon}\n className={handleClassName}\n />\n )}\n </React.Fragment>\n ))}\n </ResizablePanelGroup>\n );\n};\n\nResizableWrapper.displayName = \"Resizable\";\n\n// ============================================================================\n// Sub-components for primitive usage\n// ============================================================================\n\nexport type ResizablePanelProps = React.ComponentProps<typeof ResizablePanel>;\nexport type ResizableHandleProps = React.ComponentProps<typeof ResizableHandle>;\nexport type ResizablePanelGroupProps = React.ComponentProps<\n typeof ResizablePanelGroup\n>;\n\n// Re-export Panel and Handle from shadcn for primitive usage\nconst Panel = ResizablePanel;\nconst Handle = ResizableHandle;\n\n// ============================================================================\n// Export with Object.assign pattern\n// ============================================================================\n\nconst Resizable = Object.assign(ResizableWrapper, {\n Panel,\n Handle,\n PanelGroup: ResizablePanelGroup,\n});\n\nexport default Resizable;\nexport {\n Resizable,\n ResizableWrapper,\n ResizablePanelGroup,\n ResizablePanel,\n ResizableHandle,\n Panel,\n Handle,\n};\n"],"names":["ResizableWrapper","props","direction","panels","withHandle","handleVariant","handleIcon","autoSaveId","onLayout","className","panelClassName","handleClassName","children","keyboardResizeBy","storage","jsx","ResizablePanelGroup","cn","panel","index","jsxs","React","ResizablePanel","ResizableHandle","Panel","Handle","Resizable"],"mappings":"iRAyEMA,EAAoBC,GAA0B,CAClD,KAAM,CACJ,UAAAC,EAAY,aACZ,OAAAC,EACA,WAAAC,EAAa,GACb,cAAAC,EACA,WAAAC,EACA,WAAAC,EACA,SAAAC,EACA,UAAAC,EACA,eAAAC,EACA,gBAAAC,EACA,SAAAC,EACA,iBAAAC,EACA,QAAAC,CAAA,EACEb,EAGJ,OAAIW,GAAY,CAACT,EAEbY,EAAAA,IAACC,EAAAA,oBAAA,CACC,UAAAd,EACA,WAAAK,EACA,SAAAC,EACA,UAAWS,EAAAA,GAAG,
|
|
1
|
+
{"version":3,"file":"Resizable.cjs","sources":["../../../../src/components/Resizable/Resizable.tsx"],"sourcesContent":["import React from \"react\";\nimport {\n ResizablePanelGroup,\n ResizablePanel,\n ResizableHandle,\n resizableHandleVariants,\n} from \"@dsui/ui/components/resizable\";\nimport { cn } from \"@dsui/ui/lib/utils\";\nimport type { VariantProps } from \"class-variance-authority\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type ResizableDirection = \"horizontal\" | \"vertical\";\n\nexport type ResizableHandleVariant = VariantProps<\n typeof resizableHandleVariants\n>[\"variant\"];\n\nexport interface ResizablePanelConfig {\n id?: string;\n defaultSize?: number;\n minSize?: number;\n maxSize?: number;\n collapsible?: boolean;\n collapsedSize?: number;\n onCollapse?: () => void;\n onExpand?: () => void;\n onResize?: (size: number) => void;\n className?: string;\n children?: React.ReactNode;\n order?: number;\n}\n\ntype PanelGroupOnLayout = (sizes: number[]) => void;\n\nexport interface ResizableProps {\n /** Direction of the resizable panels */\n direction?: ResizableDirection;\n /** Configuration for panels when using wrapper mode */\n panels?: ResizablePanelConfig[];\n /** Show handle with grip icon */\n withHandle?: boolean;\n /** Handle variant: 'default' shows icon, 'line' highlights on hover */\n handleVariant?: ResizableHandleVariant;\n /** Custom icon for the handle (only works with default variant) */\n handleIcon?: React.ReactNode;\n /** Auto save layout to localStorage with this id */\n autoSaveId?: string;\n /** Callback when layout changes */\n onLayout?: PanelGroupOnLayout;\n /** Additional class for the panel group */\n className?: string;\n /** Additional class for each panel */\n panelClassName?: string;\n /** Additional class for handles */\n handleClassName?: string;\n /** Children for primitive usage */\n children?: React.ReactNode;\n /** Keyboard resize by delta percentage (default: 10) */\n keyboardResizeBy?: number;\n /** Storage object for saving layout (default: localStorage) */\n storage?: {\n getItem: (name: string) => string | null;\n setItem: (name: string, value: string) => void;\n };\n}\n\n// ============================================================================\n// Wrapper Component\n// ============================================================================\n\nconst ResizableWrapper = (props: ResizableProps) => {\n const {\n direction = \"horizontal\",\n panels,\n withHandle = true,\n handleVariant,\n handleIcon,\n autoSaveId,\n onLayout,\n className,\n panelClassName,\n handleClassName,\n children,\n keyboardResizeBy,\n storage,\n } = props;\n\n // If children are provided, use primitive mode\n if (children && !panels) {\n return (\n <ResizablePanelGroup\n direction={direction}\n autoSaveId={autoSaveId}\n onLayout={onLayout}\n className={cn(\"ds:h-full ds:w-full\", className)}\n keyboardResizeBy={keyboardResizeBy}\n storage={storage}\n >\n {children}\n </ResizablePanelGroup>\n );\n }\n\n // Wrapper mode with panels config\n if (!panels || panels.length === 0) {\n return null;\n }\n\n return (\n <ResizablePanelGroup\n direction={direction}\n autoSaveId={autoSaveId}\n onLayout={onLayout}\n className={cn(\"ds:h-full ds:w-full\", className)}\n keyboardResizeBy={keyboardResizeBy}\n storage={storage}\n >\n {panels.map((panel, index) => (\n <React.Fragment key={panel.id || `panel-${index}`}>\n <ResizablePanel\n id={panel.id}\n defaultSize={panel.defaultSize}\n minSize={panel.minSize}\n maxSize={panel.maxSize}\n collapsible={panel.collapsible}\n collapsedSize={panel.collapsedSize}\n onCollapse={panel.onCollapse}\n onExpand={panel.onExpand}\n onResize={panel.onResize}\n order={panel.order}\n className={cn(panelClassName, panel.className)}\n >\n {panel.children}\n </ResizablePanel>\n {index < panels.length - 1 && (\n <ResizableHandle\n withHandle={withHandle}\n variant={handleVariant}\n icon={handleIcon}\n className={handleClassName}\n />\n )}\n </React.Fragment>\n ))}\n </ResizablePanelGroup>\n );\n};\n\nResizableWrapper.displayName = \"Resizable\";\n\n// ============================================================================\n// Sub-components for primitive usage\n// ============================================================================\n\nexport type ResizablePanelProps = React.ComponentProps<typeof ResizablePanel>;\nexport type ResizableHandleProps = React.ComponentProps<typeof ResizableHandle>;\nexport type ResizablePanelGroupProps = React.ComponentProps<\n typeof ResizablePanelGroup\n>;\n\n// Re-export Panel and Handle from shadcn for primitive usage\nconst Panel = ResizablePanel;\nconst Handle = ResizableHandle;\n\n// ============================================================================\n// Export with Object.assign pattern\n// ============================================================================\n\nconst Resizable = Object.assign(ResizableWrapper, {\n Panel,\n Handle,\n PanelGroup: ResizablePanelGroup,\n});\n\nexport default Resizable;\nexport {\n Resizable,\n ResizableWrapper,\n ResizablePanelGroup,\n ResizablePanel,\n ResizableHandle,\n Panel,\n Handle,\n};\n"],"names":["ResizableWrapper","props","direction","panels","withHandle","handleVariant","handleIcon","autoSaveId","onLayout","className","panelClassName","handleClassName","children","keyboardResizeBy","storage","jsx","ResizablePanelGroup","cn","panel","index","jsxs","React","ResizablePanel","ResizableHandle","Panel","Handle","Resizable"],"mappings":"iRAyEMA,EAAoBC,GAA0B,CAClD,KAAM,CACJ,UAAAC,EAAY,aACZ,OAAAC,EACA,WAAAC,EAAa,GACb,cAAAC,EACA,WAAAC,EACA,WAAAC,EACA,SAAAC,EACA,UAAAC,EACA,eAAAC,EACA,gBAAAC,EACA,SAAAC,EACA,iBAAAC,EACA,QAAAC,CAAA,EACEb,EAGJ,OAAIW,GAAY,CAACT,EAEbY,EAAAA,IAACC,EAAAA,oBAAA,CACC,UAAAd,EACA,WAAAK,EACA,SAAAC,EACA,UAAWS,EAAAA,GAAG,sBAAuBR,CAAS,EAC9C,iBAAAI,EACA,QAAAC,EAEC,SAAAF,CAAA,CAAA,EAMH,CAACT,GAAUA,EAAO,SAAW,EACxB,KAIPY,EAAAA,IAACC,EAAAA,oBAAA,CACC,UAAAd,EACA,WAAAK,EACA,SAAAC,EACA,UAAWS,EAAAA,GAAG,sBAAuBR,CAAS,EAC9C,iBAAAI,EACA,QAAAC,EAEC,SAAAX,EAAO,IAAI,CAACe,EAAOC,IAClBC,EAAAA,KAACC,EAAM,SAAN,CACC,SAAA,CAAAN,EAAAA,IAACO,EAAAA,eAAA,CACC,GAAIJ,EAAM,GACV,YAAaA,EAAM,YACnB,QAASA,EAAM,QACf,QAASA,EAAM,QACf,YAAaA,EAAM,YACnB,cAAeA,EAAM,cACrB,WAAYA,EAAM,WAClB,SAAUA,EAAM,SAChB,SAAUA,EAAM,SAChB,MAAOA,EAAM,MACb,UAAWD,EAAAA,GAAGP,EAAgBQ,EAAM,SAAS,EAE5C,SAAAA,EAAM,QAAA,CAAA,EAERC,EAAQhB,EAAO,OAAS,GACvBY,EAAAA,IAACQ,EAAAA,gBAAA,CACC,WAAAnB,EACA,QAASC,EACT,KAAMC,EACN,UAAWK,CAAA,CAAA,CACb,CAAA,EAtBiBO,EAAM,IAAM,SAASC,CAAK,EAwB/C,CACD,CAAA,CAAA,CAGP,EAEAnB,EAAiB,YAAc,YAa/B,MAAMwB,EAAQF,EAAAA,eACRG,EAASF,EAAAA,gBAMTG,EAAY,OAAO,OAAO1B,EAAkB,CAChD,MAAAwB,EACA,OAAAC,EACA,WAAYT,EAAAA,mBACd,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const S=require("react/jsx-runtime"),
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const S=require("react/jsx-runtime"),s=require("react"),d=require("../../packages/ui/src/components/scroll-area.cjs"),l=require("../../packages/ui/src/lib/utils.cjs"),f=s.forwardRef(({className:a,children:n,snapType:e,viewportClassName:o,...A},t)=>{const u=s.useRef(null),i=s.useMemo(()=>{if(!e||e==="none")return"snap-none";const[r,c]=e.split(" ");return l.cn(`ds:snap-${r}`,c&&`ds:snap-${c}`)},[e]);return s.useEffect(()=>{if(u.current&&(i||o)){const r=u.current.querySelector("[data-radix-scroll-area-viewport]");if(r){const c=l.cn(i,o);c&&(r.className=l.cn(r.className,c))}}},[i,o]),S.jsx(d.ScrollArea,{ref:r=>{u.current=r,typeof t=="function"?t(r):t&&(t.current=r)},className:l.cn(a),...A,children:n})});f.displayName="ScrollArea";const m=s.forwardRef(({className:a,...n},e)=>S.jsx(d.ScrollBar,{ref:e,className:l.cn(a),...n}));m.displayName="ScrollBar";exports.ScrollArea=f;exports.ScrollBar=m;exports.default=f;
|
|
2
2
|
//# sourceMappingURL=ScrollArea.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScrollArea.cjs","sources":["../../../../src/components/ScrollArea/ScrollArea.tsx"],"sourcesContent":["import React, { useEffect, useRef } from \"react\";\nimport {\n ScrollArea as SScrollArea,\n ScrollBar as SScrollBar,\n} from \"@dsui/ui/components/scroll-area\";\nimport { cn } from \"@dsui/ui/lib/utils\";\n\nexport interface ScrollAreaProps\n extends React.ComponentProps<typeof SScrollArea> {\n /**\n * Type of scroll snap behavior\n * @default undefined\n */\n snapType?:\n | \"none\"\n | \"x\"\n | \"y\"\n | \"both\"\n | \"x mandatory\"\n | \"y mandatory\"\n | \"both mandatory\"\n | \"x proximity\"\n | \"y proximity\"\n | \"both proximity\";\n /**\n * Additional className for the viewport (where scroll happens)\n */\n viewportClassName?: string;\n}\n\nexport type ScrollBarProps = React.ComponentProps<typeof SScrollBar>;\n\nconst ScrollArea = React.forwardRef<HTMLDivElement, ScrollAreaProps>(\n ({ className, children, snapType, viewportClassName, ...props }, ref) => {\n const scrollAreaRef = useRef<HTMLDivElement>(null);\n\n const snapClass = React.useMemo(() => {\n if (!snapType || snapType === \"none\") return \"snap-none\";\n\n const [axis, alignment] = snapType.split(\" \");\n return cn(`snap-${axis}`, alignment && `snap-${alignment}`);\n }, [snapType]);\n\n // const snapClass = snapType\n // ? snapType === \"none\"\n // ? \"snap-none\"\n // : snapType === \"x\"\n // ? \"snap-x\"\n // : snapType === \"y\"\n // ? \"snap-y\"\n // : snapType === \"both\"\n // ? \"snap-both\"\n // : snapType === \"x mandatory\"\n // ? \"snap-x snap-mandatory\"\n // : snapType === \"y mandatory\"\n // ? \"snap-y snap-mandatory\"\n // : snapType === \"both mandatory\"\n // ? \"snap-both snap-mandatory\"\n // : snapType === \"x proximity\"\n // ? \"snap-x snap-proximity\"\n // : snapType === \"y proximity\"\n // ? \"snap-y snap-proximity\"\n // : snapType === \"both proximity\"\n // ? \"snap-both snap-proximity\"\n // : \"\"\n // : \"\";\n\n useEffect(() => {\n if (scrollAreaRef.current && (snapClass || viewportClassName)) {\n const viewport = scrollAreaRef.current.querySelector(\n \"[data-radix-scroll-area-viewport]\"\n );\n if (viewport) {\n const classes = cn(snapClass, viewportClassName);\n if (classes) {\n viewport.className = cn(viewport.className, classes);\n }\n }\n }\n }, [snapClass, viewportClassName]);\n\n return (\n <SScrollArea\n ref={(node) => {\n scrollAreaRef.current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n }}\n className={cn(className)}\n {...props}\n >\n {children}\n </SScrollArea>\n );\n }\n);\nScrollArea.displayName = \"ScrollArea\";\n\nconst ScrollBar = React.forwardRef<HTMLDivElement, ScrollBarProps>(\n ({ className, ...props }, ref) => {\n return <SScrollBar ref={ref} className={cn(className)} {...props} />;\n }\n);\nScrollBar.displayName = \"ScrollBar\";\n\nexport { ScrollArea, ScrollBar };\nexport default ScrollArea;\n"],"names":["ScrollArea","React","className","children","snapType","viewportClassName","props","ref","scrollAreaRef","useRef","snapClass","axis","alignment","cn","useEffect","viewport","classes","jsx","SScrollArea","node","ScrollBar","SScrollBar"],"mappings":"mRAgCMA,EAAaC,EAAM,WACvB,CAAC,CAAE,UAAAC,EAAW,SAAAC,EAAU,SAAAC,EAAU,kBAAAC,EAAmB,GAAGC,CAAA,EAASC,IAAQ,CACvE,MAAMC,EAAgBC,EAAAA,OAAuB,IAAI,EAE3CC,EAAYT,EAAM,QAAQ,IAAM,CACpC,GAAI,CAACG,GAAYA,IAAa,OAAQ,MAAO,YAE7C,KAAM,CAACO,EAAMC,CAAS,EAAIR,EAAS,MAAM,GAAG,EAC5C,OAAOS,EAAAA,GAAG,
|
|
1
|
+
{"version":3,"file":"ScrollArea.cjs","sources":["../../../../src/components/ScrollArea/ScrollArea.tsx"],"sourcesContent":["import React, { useEffect, useRef } from \"react\";\nimport {\n ScrollArea as SScrollArea,\n ScrollBar as SScrollBar,\n} from \"@dsui/ui/components/scroll-area\";\nimport { cn } from \"@dsui/ui/lib/utils\";\n\nexport interface ScrollAreaProps\n extends React.ComponentProps<typeof SScrollArea> {\n /**\n * Type of scroll snap behavior\n * @default undefined\n */\n snapType?:\n | \"none\"\n | \"x\"\n | \"y\"\n | \"both\"\n | \"x mandatory\"\n | \"y mandatory\"\n | \"both mandatory\"\n | \"x proximity\"\n | \"y proximity\"\n | \"both proximity\";\n /**\n * Additional className for the viewport (where scroll happens)\n */\n viewportClassName?: string;\n}\n\nexport type ScrollBarProps = React.ComponentProps<typeof SScrollBar>;\n\nconst ScrollArea = React.forwardRef<HTMLDivElement, ScrollAreaProps>(\n ({ className, children, snapType, viewportClassName, ...props }, ref) => {\n const scrollAreaRef = useRef<HTMLDivElement>(null);\n\n const snapClass = React.useMemo(() => {\n if (!snapType || snapType === \"none\") return \"snap-none\";\n\n const [axis, alignment] = snapType.split(\" \");\n return cn(`ds:snap-${axis}`, alignment && `ds:snap-${alignment}`);\n }, [snapType]);\n\n // const snapClass = snapType\n // ? snapType === \"none\"\n // ? \"snap-none\"\n // : snapType === \"x\"\n // ? \"snap-x\"\n // : snapType === \"y\"\n // ? \"snap-y\"\n // : snapType === \"both\"\n // ? \"snap-both\"\n // : snapType === \"x mandatory\"\n // ? \"snap-x snap-mandatory\"\n // : snapType === \"y mandatory\"\n // ? \"snap-y snap-mandatory\"\n // : snapType === \"both mandatory\"\n // ? \"snap-both snap-mandatory\"\n // : snapType === \"x proximity\"\n // ? \"snap-x snap-proximity\"\n // : snapType === \"y proximity\"\n // ? \"snap-y snap-proximity\"\n // : snapType === \"both proximity\"\n // ? \"snap-both snap-proximity\"\n // : \"\"\n // : \"\";\n\n useEffect(() => {\n if (scrollAreaRef.current && (snapClass || viewportClassName)) {\n const viewport = scrollAreaRef.current.querySelector(\n \"[data-radix-scroll-area-viewport]\"\n );\n if (viewport) {\n const classes = cn(snapClass, viewportClassName);\n if (classes) {\n viewport.className = cn(viewport.className, classes);\n }\n }\n }\n }, [snapClass, viewportClassName]);\n\n return (\n <SScrollArea\n ref={(node) => {\n scrollAreaRef.current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n }}\n className={cn(className)}\n {...props}\n >\n {children}\n </SScrollArea>\n );\n }\n);\nScrollArea.displayName = \"ScrollArea\";\n\nconst ScrollBar = React.forwardRef<HTMLDivElement, ScrollBarProps>(\n ({ className, ...props }, ref) => {\n return <SScrollBar ref={ref} className={cn(className)} {...props} />;\n }\n);\nScrollBar.displayName = \"ScrollBar\";\n\nexport { ScrollArea, ScrollBar };\nexport default ScrollArea;\n"],"names":["ScrollArea","React","className","children","snapType","viewportClassName","props","ref","scrollAreaRef","useRef","snapClass","axis","alignment","cn","useEffect","viewport","classes","jsx","SScrollArea","node","ScrollBar","SScrollBar"],"mappings":"mRAgCMA,EAAaC,EAAM,WACvB,CAAC,CAAE,UAAAC,EAAW,SAAAC,EAAU,SAAAC,EAAU,kBAAAC,EAAmB,GAAGC,CAAA,EAASC,IAAQ,CACvE,MAAMC,EAAgBC,EAAAA,OAAuB,IAAI,EAE3CC,EAAYT,EAAM,QAAQ,IAAM,CACpC,GAAI,CAACG,GAAYA,IAAa,OAAQ,MAAO,YAE7C,KAAM,CAACO,EAAMC,CAAS,EAAIR,EAAS,MAAM,GAAG,EAC5C,OAAOS,EAAAA,GAAG,WAAWF,CAAI,GAAIC,GAAa,WAAWA,CAAS,EAAE,CAClE,EAAG,CAACR,CAAQ,CAAC,EA0BbU,OAAAA,EAAAA,UAAU,IAAM,CACd,GAAIN,EAAc,UAAYE,GAAaL,GAAoB,CAC7D,MAAMU,EAAWP,EAAc,QAAQ,cACrC,mCAAA,EAEF,GAAIO,EAAU,CACZ,MAAMC,EAAUH,EAAAA,GAAGH,EAAWL,CAAiB,EAC3CW,IACFD,EAAS,UAAYF,EAAAA,GAAGE,EAAS,UAAWC,CAAO,EAEvD,CACF,CACF,EAAG,CAACN,EAAWL,CAAiB,CAAC,EAG/BY,EAAAA,IAACC,EAAAA,WAAA,CACC,IAAMC,GAAS,CACbX,EAAc,QAAUW,EACpB,OAAOZ,GAAQ,WACjBA,EAAIY,CAAI,EACCZ,IACTA,EAAI,QAAUY,EAElB,EACA,UAAWN,EAAAA,GAAGX,CAAS,EACtB,GAAGI,EAEH,SAAAH,CAAA,CAAA,CAGP,CACF,EACAH,EAAW,YAAc,aAEzB,MAAMoB,EAAYnB,EAAM,WACtB,CAAC,CAAE,UAAAC,EAAW,GAAGI,CAAA,EAASC,IACjBU,EAAAA,IAACI,aAAW,IAAAd,EAAU,UAAWM,EAAAA,GAAGX,CAAS,EAAI,GAAGI,EAAO,CAEtE,EACAc,EAAU,YAAc"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),n=require("react"),a=require("../../packages/ui/src/components/select.cjs"),Q=require("../../packages/ui/src/components/combobox.cjs"),x=require("../../packages/ui/src/lib/utils.cjs"),V=require("../FloatLabel.cjs"),U=require("lucide-react"),W=require("../Tooltip/Tooltip.cjs"),_=n.forwardRef(({className:b,label:o,helperText:v,state:m="default",size:t="normal",isFloatLabel:r,infoTooltip:j,clearable:y=!1,placeholder:N="",options:g=[],tagRender:i,multiple:p=!1,value:c,defaultValue:F,onValueChange:w,values:G,defaultValues:S,onValuesChange:q,search:h,clickToRemove:H=!0,overflowBehavior:P="wrap-when-open",disabled:I,onChange:f,onFocus:C,onBlur:k,required:M},R)=>{const u=n.useId(),[T,E]=n.useState(c??F??"");n.useEffect(()=>{!p&&c!==void 0&&E(c)},[p,c]);const A=n.useCallback(l=>{const d=l||"";c===void 0&&E(d),w?.(d),f?.(d)},[w,f,c]),D=n.useCallback(l=>{q?.(l),f?.(l)},[q,f]),J={default:"ds:text-muted-foreground",success:"ds:text-success",warning:"ds:text-warning",error:"ds:text-error"},O=r?t==="xl"||t==="lg"?t:"xl":t,K=n.useMemo(()=>{const l=new Map;return g.forEach(d=>{const s=d.group;l.has(s)||l.set(s,[]),l.get(s).push(d)}),l},[g]);return e.jsx("div",{className:b,children:e.jsxs("div",{ref:R,className:x.cn("ds:flex ds:flex-col ds:gap-1.5 ds:relative",{"ds:floating-label ds:relative":r}),children:[!r&&o&&e.jsxs("label",{htmlFor:u,className:"ds:flex ds:gap-2 ds:text-sm ds:font-medium ds:leading-none ds:peer-disabled:cursor-not-allowed ds:peer-disabled:opacity-70",children:[e.jsxs("span",{children:[o,M&&e.jsx("span",{className:"ds:text-error ds:ml-0.5",children:"*"})]}),j&&e.jsx(W.Tooltip,{content:j,children:e.jsx(U.Info,{className:"ds:size-3.5 ds:min-w-3.5"})})]}),e.jsx("div",{className:"ds:relative",children:p?e.jsxs(a.MultiSelect,{values:G,defaultValues:typeof S=="string"?[S]:S,onValuesChange:D,children:[e.jsx(a.MultiSelectTrigger,{id:u,disabled:I,className:x.cn("ds:peer ds:w-full",{"ds:pt-5 ds:pb-1":r&&t!=="lg"},b),size:O,state:m,onFocus:C,onBlur:k,children:e.jsx(a.MultiSelectValue,{placeholder:N,clickToRemove:H&&y,overflowBehavior:P})}),r&&e.jsx(V.FloatingLabel,{htmlFor:u,size:t,infoTooltip:j,required:M,children:o}),e.jsx(a.MultiSelectContent,{search:h,children:[...K.entries()].map(([l,d])=>l?e.jsxs(n.Fragment,{children:[e.jsx(a.MultiSelectGroup,{heading:l,children:d.map(s=>e.jsx(a.MultiSelectItem,{value:s.value,disabled:s?.disabled,icon:s?.icon,tagRender:!!i,children:i?i(s):s.label},s.value))}),e.jsx(a.MultiSelectSeparator,{})]},l):d.map(s=>e.jsx(a.MultiSelectItem,{value:s.value,disabled:s?.disabled,icon:s?.icon,tagRender:!!i,children:i?i(s):s.label},s.value)))})]}):e.jsxs(e.Fragment,{children:[e.jsx(Q.Combobox,{value:c??T,options:g,placeHolder:N,emptyText:typeof h=="object"?h.emptyMessage:"No results found",onChange:A,clearable:y,disabled:I,id:u,className:x.cn("ds:peer ds:w-full ds:justify-start",{"ds:pt-5 ds:pb-1":r&&t!=="lg"}),size:O,state:m,dropdownClassName:x.cn("ds:opacity-40",{"ds:translate-y-[-8px]":r&&t!=="lg"}),searchable:!!h,tagRender:i,onFocus:C,onBlur:k}),r&&e.jsx(V.FloatingLabel,{htmlFor:u,size:t,infoTooltip:j,required:M,shouldFloat:!!(c??T),className:"ds:pointer-events-none",children:o})]})}),v&&e.jsx("p",{className:x.cn("ds:text-xs",m?J[m]:""),children:v})]})})});_.displayName="Select";exports.default=_;
|
|
2
2
|
//# sourceMappingURL=Select.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Select.cjs","sources":["../../../../src/components/Select/Select.tsx"],"sourcesContent":["import React from \"react\";\nimport {\n MultiSelect as BaseMultiSelect,\n MultiSelectTrigger as BaseMultiSelectTrigger,\n MultiSelectValue as BaseMultiSelectValue,\n MultiSelectContent as BaseMultiSelectContent,\n MultiSelectItem as BaseMultiSelectItem,\n MultiSelectGroup as BaseMultiSelectGroup,\n MultiSelectSeparator as BaseMultiSelectSeparator,\n} from \"@dsui/ui/components/select\";\nimport {\n Combobox,\n type ComboboxProps,\n type SelectOption as SSelectOption,\n} from \"@dsui/ui/components/combobox\";\nimport { cn } from \"@dsui/ui/lib/utils\";\nimport { FloatingLabel } from \"@/components/FloatLabel\";\nimport { Info } from \"lucide-react\";\nimport { Tooltip } from \"../Tooltip/Tooltip\";\n\nexport type SelectOption = SSelectOption;\n\nexport type SelectProps = Omit<ComboboxProps, \"ref\"> & {\n label?: string;\n helperText?: React.ReactNode;\n state?: \"default\" | \"success\" | \"warning\" | \"error\";\n size?: \"xs\" | \"sm\" | \"normal\" | \"lg\" | \"xl\";\n isFloatLabel?: boolean;\n infoTooltip?: React.ReactNode;\n clearable?: boolean;\n placeholder?: string;\n options?: SelectOption[];\n tagRender?: (option: SelectOption) => React.ReactNode;\n multiple?: boolean;\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n values?: string[];\n defaultValues?: string | string[];\n onValuesChange?: (values: string[]) => void;\n search?: boolean | { placeholder?: string; emptyMessage?: string };\n clickToRemove?: boolean;\n overflowBehavior?: \"wrap\" | \"wrap-when-open\" | \"cutoff\";\n className?: string;\n disabled?: boolean;\n onChange?: (value: string | string[]) => void;\n onFocus?: (event: React.FocusEvent<HTMLInputElement>) => void;\n onBlur?: (event: React.FocusEvent<HTMLInputElement>) => void;\n required?: boolean;\n};\n\nconst Select = React.forwardRef<HTMLDivElement, SelectProps>(\n (\n {\n className,\n label,\n helperText,\n state = \"default\",\n size = \"normal\",\n isFloatLabel,\n infoTooltip,\n clearable = false,\n placeholder = \"\",\n options = [],\n tagRender,\n multiple = false,\n value,\n defaultValue,\n onValueChange,\n values,\n defaultValues,\n onValuesChange,\n search,\n clickToRemove = true,\n overflowBehavior = \"wrap-when-open\",\n disabled,\n onChange,\n onFocus,\n onBlur,\n required,\n },\n ref\n ) => {\n const selectId = React.useId();\n\n // For single select, use controlled value or internal state\n const [internalValue, setInternalValue] = React.useState(\n value ?? defaultValue ?? \"\"\n );\n\n React.useEffect(() => {\n if (!multiple && value !== undefined) {\n setInternalValue(value);\n }\n }, [multiple, value]);\n\n // Handle single select value change\n const handleSingleValueChange = React.useCallback(\n (newValue?: string | null) => {\n const val = newValue || \"\";\n if (value === undefined) {\n setInternalValue(val);\n }\n onValueChange?.(val);\n onChange?.(val);\n },\n [onValueChange, onChange, value]\n );\n\n // Handle multi select values change\n const handleMultiValuesChange = React.useCallback(\n (newValues: string[]) => {\n onValuesChange?.(newValues);\n onChange?.(newValues);\n },\n [onValuesChange, onChange]\n );\n\n // Helper text styles\n const helperTextStyles = {\n default: \"text-muted-foreground\",\n success: \"text-success\",\n warning: \"text-warning\",\n error: \"text-error\",\n };\n\n // Calculate current size\n const currentSize = isFloatLabel\n ? size === \"xl\" || size === \"lg\"\n ? size\n : \"xl\"\n : size;\n\n // Group options by group property\n const groupedOptions = React.useMemo(() => {\n const groups = new Map<string | undefined, SelectOption[]>();\n options.forEach((option) => {\n const group = option.group;\n if (!groups.has(group)) {\n groups.set(group, []);\n }\n groups.get(group)!.push(option);\n });\n return groups;\n }, [options]);\n\n return (\n <div className={className}>\n <div\n ref={ref}\n className={cn(\"flex flex-col gap-1.5 relative\", {\n \"floating-label relative\": isFloatLabel,\n })}\n >\n {!isFloatLabel && label && (\n <label\n htmlFor={selectId}\n className=\"flex gap-2 text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n >\n <span>\n {label}\n {required && <span className=\"text-error ml-0.5\">*</span>}\n </span>\n {infoTooltip && (\n <Tooltip content={infoTooltip}>\n <Info className=\"size-3.5 min-w-3.5\" />\n </Tooltip>\n )}\n </label>\n )}\n\n <div className=\"relative\">\n {!multiple ? (\n // Single Mode\n <>\n <Combobox\n value={value ?? internalValue}\n options={options}\n placeHolder={placeholder}\n emptyText={\n typeof search === \"object\"\n ? search.emptyMessage\n : \"No results found\"\n }\n onChange={handleSingleValueChange}\n clearable={clearable}\n disabled={disabled}\n id={selectId}\n className={cn(\n \"peer w-full justify-start\",\n {\n \"pt-5 pb-1\": isFloatLabel && size !== \"lg\",\n }\n // className,\n )}\n size={currentSize}\n state={state}\n dropdownClassName={cn(\"opacity-40\", {\n \"translate-y-[-8px]\": isFloatLabel && size !== \"lg\",\n })}\n searchable={!!search}\n tagRender={tagRender}\n onFocus={onFocus}\n onBlur={onBlur}\n />\n {isFloatLabel && (\n <FloatingLabel\n htmlFor={selectId}\n size={size}\n infoTooltip={infoTooltip}\n required={required}\n shouldFloat={!!(value ?? internalValue)}\n className=\"pointer-events-none\"\n >\n {label}\n </FloatingLabel>\n )}\n </>\n ) : (\n // Multi Mode\n <BaseMultiSelect\n values={values}\n defaultValues={\n typeof defaultValues === \"string\"\n ? [defaultValues]\n : defaultValues\n }\n onValuesChange={handleMultiValuesChange}\n >\n <BaseMultiSelectTrigger\n id={selectId}\n disabled={disabled}\n className={cn(\n \"peer w-full\",\n {\n \"pt-5 pb-1\": isFloatLabel && size !== \"lg\",\n },\n className\n )}\n size={currentSize}\n state={state}\n onFocus={onFocus}\n onBlur={onBlur}\n >\n <BaseMultiSelectValue\n placeholder={placeholder}\n clickToRemove={clickToRemove && clearable}\n overflowBehavior={overflowBehavior}\n />\n </BaseMultiSelectTrigger>\n\n {isFloatLabel && (\n <FloatingLabel\n htmlFor={selectId}\n size={size}\n infoTooltip={infoTooltip}\n required={required}\n >\n {label}\n </FloatingLabel>\n )}\n\n <BaseMultiSelectContent search={search}>\n {[...groupedOptions.entries()].map(([group, items]) => {\n if (group) {\n return (\n <React.Fragment key={group}>\n <BaseMultiSelectGroup heading={group}>\n {items.map((option) => (\n <BaseMultiSelectItem\n key={option.value}\n value={option.value}\n disabled={option?.disabled}\n icon={option?.icon}\n tagRender={!!tagRender}\n >\n {tagRender ? tagRender(option) : option.label}\n </BaseMultiSelectItem>\n ))}\n </BaseMultiSelectGroup>\n <BaseMultiSelectSeparator />\n </React.Fragment>\n );\n }\n return items.map((option) => (\n <BaseMultiSelectItem\n key={option.value}\n value={option.value}\n disabled={option?.disabled}\n icon={option?.icon}\n tagRender={!!tagRender}\n >\n {tagRender ? tagRender(option) : option.label}\n </BaseMultiSelectItem>\n ));\n })}\n </BaseMultiSelectContent>\n </BaseMultiSelect>\n )}\n </div>\n\n {helperText && (\n <p className={cn(\"text-xs\", state ? helperTextStyles[state] : \"\")}>\n {helperText}\n </p>\n )}\n </div>\n </div>\n );\n }\n);\n\nSelect.displayName = \"Select\";\nexport default Select;\n"],"names":["Select","React","className","label","helperText","state","size","isFloatLabel","infoTooltip","clearable","placeholder","options","tagRender","multiple","value","defaultValue","onValueChange","values","defaultValues","onValuesChange","search","clickToRemove","overflowBehavior","disabled","onChange","onFocus","onBlur","required","ref","selectId","internalValue","setInternalValue","handleSingleValueChange","newValue","val","handleMultiValuesChange","newValues","helperTextStyles","currentSize","groupedOptions","groups","option","group","jsx","jsxs","cn","Tooltip","Info","BaseMultiSelect","BaseMultiSelectTrigger","BaseMultiSelectValue","FloatingLabel","BaseMultiSelectContent","items","BaseMultiSelectGroup","BaseMultiSelectItem","BaseMultiSelectSeparator","Fragment","Combobox"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Select.cjs","sources":["../../../../src/components/Select/Select.tsx"],"sourcesContent":["import React from \"react\";\nimport {\n MultiSelect as BaseMultiSelect,\n MultiSelectTrigger as BaseMultiSelectTrigger,\n MultiSelectValue as BaseMultiSelectValue,\n MultiSelectContent as BaseMultiSelectContent,\n MultiSelectItem as BaseMultiSelectItem,\n MultiSelectGroup as BaseMultiSelectGroup,\n MultiSelectSeparator as BaseMultiSelectSeparator,\n} from \"@dsui/ui/components/select\";\nimport {\n Combobox,\n type ComboboxProps,\n type SelectOption as SSelectOption,\n} from \"@dsui/ui/components/combobox\";\nimport { cn } from \"@dsui/ui/lib/utils\";\nimport { FloatingLabel } from \"@/components/FloatLabel\";\nimport { Info } from \"lucide-react\";\nimport { Tooltip } from \"../Tooltip/Tooltip\";\n\nexport type SelectOption = SSelectOption;\n\nexport type SelectProps = Omit<ComboboxProps, \"ref\"> & {\n label?: string;\n helperText?: React.ReactNode;\n state?: \"default\" | \"success\" | \"warning\" | \"error\";\n size?: \"xs\" | \"sm\" | \"normal\" | \"lg\" | \"xl\";\n isFloatLabel?: boolean;\n infoTooltip?: React.ReactNode;\n clearable?: boolean;\n placeholder?: string;\n options?: SelectOption[];\n tagRender?: (option: SelectOption) => React.ReactNode;\n multiple?: boolean;\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n values?: string[];\n defaultValues?: string | string[];\n onValuesChange?: (values: string[]) => void;\n search?: boolean | { placeholder?: string; emptyMessage?: string };\n clickToRemove?: boolean;\n overflowBehavior?: \"wrap\" | \"wrap-when-open\" | \"cutoff\";\n className?: string;\n disabled?: boolean;\n onChange?: (value: string | string[]) => void;\n onFocus?: (event: React.FocusEvent<HTMLInputElement>) => void;\n onBlur?: (event: React.FocusEvent<HTMLInputElement>) => void;\n required?: boolean;\n};\n\nconst Select = React.forwardRef<HTMLDivElement, SelectProps>(\n (\n {\n className,\n label,\n helperText,\n state = \"default\",\n size = \"normal\",\n isFloatLabel,\n infoTooltip,\n clearable = false,\n placeholder = \"\",\n options = [],\n tagRender,\n multiple = false,\n value,\n defaultValue,\n onValueChange,\n values,\n defaultValues,\n onValuesChange,\n search,\n clickToRemove = true,\n overflowBehavior = \"wrap-when-open\",\n disabled,\n onChange,\n onFocus,\n onBlur,\n required,\n },\n ref\n ) => {\n const selectId = React.useId();\n\n // For single select, use controlled value or internal state\n const [internalValue, setInternalValue] = React.useState(\n value ?? defaultValue ?? \"\"\n );\n\n React.useEffect(() => {\n if (!multiple && value !== undefined) {\n setInternalValue(value);\n }\n }, [multiple, value]);\n\n // Handle single select value change\n const handleSingleValueChange = React.useCallback(\n (newValue?: string | null) => {\n const val = newValue || \"\";\n if (value === undefined) {\n setInternalValue(val);\n }\n onValueChange?.(val);\n onChange?.(val);\n },\n [onValueChange, onChange, value]\n );\n\n // Handle multi select values change\n const handleMultiValuesChange = React.useCallback(\n (newValues: string[]) => {\n onValuesChange?.(newValues);\n onChange?.(newValues);\n },\n [onValuesChange, onChange]\n );\n\n // Helper text styles\n const helperTextStyles = {\n default: \"ds:text-muted-foreground\",\n success: \"ds:text-success\",\n warning: \"ds:text-warning\",\n error: \"ds:text-error\",\n };\n\n // Calculate current size\n const currentSize = isFloatLabel\n ? size === \"xl\" || size === \"lg\"\n ? size\n : \"xl\"\n : size;\n\n // Group options by group property\n const groupedOptions = React.useMemo(() => {\n const groups = new Map<string | undefined, SelectOption[]>();\n options.forEach((option) => {\n const group = option.group;\n if (!groups.has(group)) {\n groups.set(group, []);\n }\n groups.get(group)!.push(option);\n });\n return groups;\n }, [options]);\n\n return (\n <div className={className}>\n <div\n ref={ref}\n className={cn(\"ds:flex ds:flex-col ds:gap-1.5 ds:relative\", {\n \"ds:floating-label ds:relative\": isFloatLabel,\n })}\n >\n {!isFloatLabel && label && (\n <label\n htmlFor={selectId}\n className=\"ds:flex ds:gap-2 ds:text-sm ds:font-medium ds:leading-none ds:peer-disabled:cursor-not-allowed ds:peer-disabled:opacity-70\"\n >\n <span>\n {label}\n {required && <span className=\"ds:text-error ds:ml-0.5\">*</span>}\n </span>\n {infoTooltip && (\n <Tooltip content={infoTooltip}>\n <Info className=\"ds:size-3.5 ds:min-w-3.5\" />\n </Tooltip>\n )}\n </label>\n )}\n\n <div className=\"ds:relative\">\n {!multiple ? (\n // Single Mode\n <>\n <Combobox\n value={value ?? internalValue}\n options={options}\n placeHolder={placeholder}\n emptyText={\n typeof search === \"object\"\n ? search.emptyMessage\n : \"No results found\"\n }\n onChange={handleSingleValueChange}\n clearable={clearable}\n disabled={disabled}\n id={selectId}\n className={cn(\n \"ds:peer ds:w-full ds:justify-start\",\n {\n \"ds:pt-5 ds:pb-1\": isFloatLabel && size !== \"lg\",\n }\n // className,\n )}\n size={currentSize}\n state={state}\n dropdownClassName={cn(\"ds:opacity-40\", {\n \"ds:translate-y-[-8px]\": isFloatLabel && size !== \"lg\",\n })}\n searchable={!!search}\n tagRender={tagRender}\n onFocus={onFocus}\n onBlur={onBlur}\n />\n {isFloatLabel && (\n <FloatingLabel\n htmlFor={selectId}\n size={size}\n infoTooltip={infoTooltip}\n required={required}\n shouldFloat={!!(value ?? internalValue)}\n className=\"ds:pointer-events-none\"\n >\n {label}\n </FloatingLabel>\n )}\n </>\n ) : (\n // Multi Mode\n <BaseMultiSelect\n values={values}\n defaultValues={\n typeof defaultValues === \"string\"\n ? [defaultValues]\n : defaultValues\n }\n onValuesChange={handleMultiValuesChange}\n >\n <BaseMultiSelectTrigger\n id={selectId}\n disabled={disabled}\n className={cn(\n \"ds:peer ds:w-full\",\n {\n \"ds:pt-5 ds:pb-1\": isFloatLabel && size !== \"lg\",\n },\n className\n )}\n size={currentSize}\n state={state}\n onFocus={onFocus}\n onBlur={onBlur}\n >\n <BaseMultiSelectValue\n placeholder={placeholder}\n clickToRemove={clickToRemove && clearable}\n overflowBehavior={overflowBehavior}\n />\n </BaseMultiSelectTrigger>\n\n {isFloatLabel && (\n <FloatingLabel\n htmlFor={selectId}\n size={size}\n infoTooltip={infoTooltip}\n required={required}\n >\n {label}\n </FloatingLabel>\n )}\n\n <BaseMultiSelectContent search={search}>\n {[...groupedOptions.entries()].map(([group, items]) => {\n if (group) {\n return (\n <React.Fragment key={group}>\n <BaseMultiSelectGroup heading={group}>\n {items.map((option) => (\n <BaseMultiSelectItem\n key={option.value}\n value={option.value}\n disabled={option?.disabled}\n icon={option?.icon}\n tagRender={!!tagRender}\n >\n {tagRender ? tagRender(option) : option.label}\n </BaseMultiSelectItem>\n ))}\n </BaseMultiSelectGroup>\n <BaseMultiSelectSeparator />\n </React.Fragment>\n );\n }\n return items.map((option) => (\n <BaseMultiSelectItem\n key={option.value}\n value={option.value}\n disabled={option?.disabled}\n icon={option?.icon}\n tagRender={!!tagRender}\n >\n {tagRender ? tagRender(option) : option.label}\n </BaseMultiSelectItem>\n ));\n })}\n </BaseMultiSelectContent>\n </BaseMultiSelect>\n )}\n </div>\n\n {helperText && (\n <p className={cn(\"ds:text-xs\", state ? helperTextStyles[state] : \"\")}>\n {helperText}\n </p>\n )}\n </div>\n </div>\n );\n }\n);\n\nSelect.displayName = \"Select\";\nexport default Select;\n"],"names":["Select","React","className","label","helperText","state","size","isFloatLabel","infoTooltip","clearable","placeholder","options","tagRender","multiple","value","defaultValue","onValueChange","values","defaultValues","onValuesChange","search","clickToRemove","overflowBehavior","disabled","onChange","onFocus","onBlur","required","ref","selectId","internalValue","setInternalValue","handleSingleValueChange","newValue","val","handleMultiValuesChange","newValues","helperTextStyles","currentSize","groupedOptions","groups","option","group","jsx","jsxs","cn","Tooltip","Info","BaseMultiSelect","BaseMultiSelectTrigger","BaseMultiSelectValue","FloatingLabel","BaseMultiSelectContent","items","BaseMultiSelectGroup","BaseMultiSelectItem","BaseMultiSelectSeparator","Fragment","Combobox"],"mappings":"saAmDMA,EAASC,EAAM,WACnB,CACE,CACE,UAAAC,EACA,MAAAC,EACA,WAAAC,EACA,MAAAC,EAAQ,UACR,KAAAC,EAAO,SACP,aAAAC,EACA,YAAAC,EACA,UAAAC,EAAY,GACZ,YAAAC,EAAc,GACd,QAAAC,EAAU,CAAA,EACV,UAAAC,EACA,SAAAC,EAAW,GACX,MAAAC,EACA,aAAAC,EACA,cAAAC,EACA,OAAAC,EACA,cAAAC,EACA,eAAAC,EACA,OAAAC,EACA,cAAAC,EAAgB,GAChB,iBAAAC,EAAmB,iBACnB,SAAAC,EACA,SAAAC,EACA,QAAAC,EACA,OAAAC,EACA,SAAAC,CAAA,EAEFC,IACG,CACH,MAAMC,EAAW5B,EAAM,MAAA,EAGjB,CAAC6B,EAAeC,CAAgB,EAAI9B,EAAM,SAC9Ca,GAASC,GAAgB,EAAA,EAG3Bd,EAAM,UAAU,IAAM,CAChB,CAACY,GAAYC,IAAU,QACzBiB,EAAiBjB,CAAK,CAE1B,EAAG,CAACD,EAAUC,CAAK,CAAC,EAGpB,MAAMkB,EAA0B/B,EAAM,YACnCgC,GAA6B,CAC5B,MAAMC,EAAMD,GAAY,GACpBnB,IAAU,QACZiB,EAAiBG,CAAG,EAEtBlB,IAAgBkB,CAAG,EACnBV,IAAWU,CAAG,CAChB,EACA,CAAClB,EAAeQ,EAAUV,CAAK,CAAA,EAI3BqB,EAA0BlC,EAAM,YACnCmC,GAAwB,CACvBjB,IAAiBiB,CAAS,EAC1BZ,IAAWY,CAAS,CACtB,EACA,CAACjB,EAAgBK,CAAQ,CAAA,EAIrBa,EAAmB,CACvB,QAAS,2BACT,QAAS,kBACT,QAAS,kBACT,MAAO,eAAA,EAIHC,EAAc/B,EAChBD,IAAS,MAAQA,IAAS,KACxBA,EACA,KACFA,EAGEiC,EAAiBtC,EAAM,QAAQ,IAAM,CACzC,MAAMuC,MAAa,IACnB,OAAA7B,EAAQ,QAAS8B,GAAW,CAC1B,MAAMC,EAAQD,EAAO,MAChBD,EAAO,IAAIE,CAAK,GACnBF,EAAO,IAAIE,EAAO,EAAE,EAEtBF,EAAO,IAAIE,CAAK,EAAG,KAAKD,CAAM,CAChC,CAAC,EACMD,CACT,EAAG,CAAC7B,CAAO,CAAC,EAEZ,OACEgC,EAAAA,IAAC,OAAI,UAAAzC,EACH,SAAA0C,EAAAA,KAAC,MAAA,CACC,IAAAhB,EACA,UAAWiB,EAAAA,GAAG,6CAA8C,CAC1D,gCAAiCtC,CAAA,CAClC,EAEA,SAAA,CAAA,CAACA,GAAgBJ,GAChByC,EAAAA,KAAC,QAAA,CACC,QAASf,EACT,UAAU,6HAEV,SAAA,CAAAe,OAAC,OAAA,CACE,SAAA,CAAAzC,EACAwB,GAAYgB,EAAAA,IAAC,OAAA,CAAK,UAAU,0BAA0B,SAAA,GAAA,CAAC,CAAA,EAC1D,EACCnC,SACEsC,UAAA,CAAQ,QAAStC,EAChB,SAAAmC,EAAAA,IAACI,EAAAA,KAAA,CAAK,UAAU,0BAAA,CAA2B,CAAA,CAC7C,CAAA,CAAA,CAAA,EAKNJ,EAAAA,IAAC,MAAA,CAAI,UAAU,cACZ,SAAC9B,EAgDA+B,EAAAA,KAACI,EAAAA,YAAA,CACC,OAAA/B,EACA,cACE,OAAOC,GAAkB,SACrB,CAACA,CAAa,EACdA,EAEN,eAAgBiB,EAEhB,SAAA,CAAAQ,EAAAA,IAACM,EAAAA,mBAAA,CACC,GAAIpB,EACJ,SAAAN,EACA,UAAWsB,EAAAA,GACT,oBACA,CACE,kBAAmBtC,GAAgBD,IAAS,IAAA,EAE9CJ,CAAA,EAEF,KAAMoC,EACN,MAAAjC,EACA,QAAAoB,EACA,OAAAC,EAEA,SAAAiB,EAAAA,IAACO,EAAAA,iBAAA,CACC,YAAAxC,EACA,cAAeW,GAAiBZ,EAChC,iBAAAa,CAAA,CAAA,CACF,CAAA,EAGDf,GACCoC,EAAAA,IAACQ,EAAAA,cAAA,CACC,QAAStB,EACT,KAAAvB,EACA,YAAAE,EACA,SAAAmB,EAEC,SAAAxB,CAAA,CAAA,EAILwC,EAAAA,IAACS,EAAAA,mBAAA,CAAuB,OAAAhC,EACrB,SAAA,CAAC,GAAGmB,EAAe,QAAA,CAAS,EAAE,IAAI,CAAC,CAACG,EAAOW,CAAK,IAC3CX,EAEAE,OAAC3C,EAAM,SAAN,CACC,SAAA,CAAA0C,MAACW,EAAAA,kBAAqB,QAASZ,EAC5B,SAAAW,EAAM,IAAKZ,GACVE,EAAAA,IAACY,EAAAA,gBAAA,CAEC,MAAOd,EAAO,MACd,SAAUA,GAAQ,SAClB,KAAMA,GAAQ,KACd,UAAW,CAAC,CAAC7B,EAEZ,SAAAA,EAAYA,EAAU6B,CAAM,EAAIA,EAAO,KAAA,EANnCA,EAAO,KAAA,CAQf,EACH,QACCe,EAAAA,qBAAA,CAAA,CAAyB,CAAA,CAAA,EAdPd,CAerB,EAGGW,EAAM,IAAKZ,GAChBE,EAAAA,IAACY,EAAAA,gBAAA,CAEC,MAAOd,EAAO,MACd,SAAUA,GAAQ,SAClB,KAAMA,GAAQ,KACd,UAAW,CAAC,CAAC7B,EAEZ,SAAAA,EAAYA,EAAU6B,CAAM,EAAIA,EAAO,KAAA,EANnCA,EAAO,KAAA,CAQf,CACF,CAAA,CACH,CAAA,CAAA,CAAA,EA1HFG,OAAAa,EAAAA,SAAA,CACE,SAAA,CAAAd,EAAAA,IAACe,EAAAA,SAAA,CACC,MAAO5C,GAASgB,EAChB,QAAAnB,EACA,YAAaD,EACb,UACE,OAAOU,GAAW,SACdA,EAAO,aACP,mBAEN,SAAUY,EACV,UAAAvB,EACA,SAAAc,EACA,GAAIM,EACJ,UAAWgB,EAAAA,GACT,qCACA,CACE,kBAAmBtC,GAAgBD,IAAS,IAAA,CAC9C,EAGF,KAAMgC,EACN,MAAAjC,EACA,kBAAmBwC,EAAAA,GAAG,gBAAiB,CACrC,wBAAyBtC,GAAgBD,IAAS,IAAA,CACnD,EACD,WAAY,CAAC,CAACc,EACd,UAAAR,EACA,QAAAa,EACA,OAAAC,CAAA,CAAA,EAEDnB,GACCoC,EAAAA,IAACQ,EAAAA,cAAA,CACC,QAAStB,EACT,KAAAvB,EACA,YAAAE,EACA,SAAAmB,EACA,YAAa,CAAC,EAAEb,GAASgB,GACzB,UAAU,yBAET,SAAA3B,CAAA,CAAA,CACH,CAAA,CAEJ,EAkFJ,EAECC,GACCuC,EAAAA,IAAC,IAAA,CAAE,UAAWE,EAAAA,GAAG,aAAcxC,EAAQgC,EAAiBhC,CAAK,EAAI,EAAE,EAChE,SAAAD,CAAA,CACH,CAAA,CAAA,CAAA,EAGN,CAEJ,CACF,EAEAJ,EAAO,YAAc"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),u=require("react"),l=require("../../packages/ui/src/components/sheet.cjs"),n=require("../../packages/ui/src/components/drawer.cjs"),s=require("../../packages/ui/src/lib/utils.cjs"),z=require("../../packages/ui/src/components/scroll-area.cjs"),K=require("../../utils/animations.cjs"),P=require("react-device-detect"),H=(f,o)=>{const t=o==="top"||o==="bottom";return{sm:t?"max-h-[20vh]!":"sm:max-w-sm",md:t?"max-h-[40vh]!":"sm:max-w-md",lg:t?"max-h-[60vh]!":"sm:max-w-lg",xl:t?"max-h-[80vh]!":"sm:max-w-xl",full:t?"max-h-full!":"sm:max-w-full"}[f]},R=u.forwardRef((f,o)=>{const{open:t,onOpenChange:p,title:a,description:r,children:
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),u=require("react"),l=require("../../packages/ui/src/components/sheet.cjs"),n=require("../../packages/ui/src/components/drawer.cjs"),s=require("../../packages/ui/src/lib/utils.cjs"),z=require("../../packages/ui/src/components/scroll-area.cjs"),K=require("../../utils/animations.cjs"),P=require("react-device-detect"),H=(f,o)=>{const t=o==="top"||o==="bottom";return{sm:t?"max-h-[20vh]!":"sm:max-w-sm",md:t?"max-h-[40vh]!":"sm:max-w-md",lg:t?"max-h-[60vh]!":"sm:max-w-lg",xl:t?"max-h-[80vh]!":"sm:max-w-xl",full:t?"max-h-full!":"sm:max-w-full"}[f]},R=u.forwardRef((f,o)=>{const{open:t,onOpenChange:p,title:a,description:r,children:i,trigger:m,footer:c,side:v="right",closeOnEsc:A=!0,closeOnOutside:F=!0,showCloseButton:k=!0,autoDrawerOnMobile:E=!0,size:g="md",stickyHeader:h=!1,stickyFooter:x=!1,autoHeight:_=!0,animation:N,className:j,contentClassName:D,headerClassName:y,titleClassName:C,descriptionClassName:w,footerClassName:S,overlayClassName:B}=f,b=u.useMemo(()=>N?K.animationClass(N):{className:""},[N]),I=s.cn("ds:!p-0 ds:!gap-0 ds:flex ds:flex-col",H(g,v),b.className,j),M=s.cn("ds:px-6 ds:pt-6 ds:text-left",y),q=s.cn("ds:px-6 ds:pb-6 ds:flex-col-reverse ds:sm:flex-row ds:sm:justify-end ds:sm:space-x-2",S),O=u.useMemo(()=>a||r?e.jsxs(l.SheetHeader,{className:s.cn("ds:py-4",{"ds:border-b":h},M),children:[a&&e.jsx(l.SheetTitle,{className:C,children:a}),r&&e.jsx(l.SheetDescription,{className:w,children:r})]}):null,[a,r,M,C,w,h]),T=u.useMemo(()=>c?e.jsx(l.SheetFooter,{className:s.cn("ds:py-4",{"ds:border-t":x},q),children:c}):null,[c,q,x]);if(P.isMobile&&E){const d=s.cn("ds:flex ds:flex-col",b.className,j);return e.jsxs(n.Drawer,{open:t,onOpenChange:p,direction:"bottom",children:[m&&e.jsx(n.DrawerTrigger,{asChild:!0,children:m}),e.jsxs(n.DrawerContent,{ref:o,className:s.cn(d,_?"":H(g,"bottom")),children:[(a||r)&&e.jsxs(n.DrawerHeader,{className:y,children:[a&&e.jsx(n.DrawerTitle,{className:C,children:a}),r&&e.jsx(n.DrawerDescription,{className:w,children:r})]}),e.jsx(z.ScrollArea,{className:s.cn("ds:flex ds:flex-col ds:overflow-hidden"),children:i&&e.jsx("div",{className:s.cn("ds:px-4 ds:py-2",D),children:i})}),c&&e.jsx(n.DrawerFooter,{className:S,children:c})]})]})}return e.jsxs(l.Sheet,{open:t,onOpenChange:p,children:[m&&e.jsx(l.SheetTrigger,{asChild:!0,children:m}),e.jsxs(l.SheetContent,{ref:o,side:v,className:s.cn(j,I),onEscapeKeyDown:d=>!A&&d.preventDefault(),onInteractOutside:d=>!F&&d.preventDefault(),overlayClassName:s.cn(B),children:[!k&&e.jsx("style",{children:`
|
|
2
2
|
[data-slot="sheet-content"] > [data-slot="sheet-close"] {
|
|
3
3
|
display: none;
|
|
4
4
|
}
|
|
5
|
-
`}),h&&O,e.jsxs(z.ScrollArea,{className:"flex max-h-full flex-col overflow-hidden",children:[!h&&O,
|
|
5
|
+
`}),h&&O,e.jsxs(z.ScrollArea,{className:"ds:flex ds:max-h-full ds:flex-col ds:overflow-hidden",children:[!h&&O,i&&e.jsx("div",{className:s.cn("ds:px-6 ds:py-4",D),children:i}),!x&&T]}),x&&T]})]})});R.displayName="Sheet";exports.default=R;
|
|
6
6
|
//# sourceMappingURL=Sheet.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sheet.cjs","sources":["../../../../src/components/Sheet/Sheet.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport {\n Sheet as SSheet,\n SheetContent as SSheetContent,\n SheetDescription,\n SheetFooter,\n SheetHeader,\n SheetTitle,\n SheetTrigger,\n SheetClose,\n} from \"@dsui/ui/components/sheet\";\nimport {\n Drawer,\n DrawerClose,\n DrawerContent,\n DrawerDescription,\n DrawerFooter,\n DrawerHeader,\n DrawerTitle,\n DrawerTrigger,\n} from \"@dsui/ui/components/drawer\";\nimport { cn } from \"@dsui/ui/lib/utils\";\nimport { ScrollArea } from \"@dsui/ui/components/scroll-area\";\nimport type { BasicAnimation } from \"@/types/variables\";\nimport { animationClass } from \"@/utils/animations\";\nimport { isMobile } from \"react-device-detect\";\n\nexport type SheetSide = \"top\" | \"right\" | \"bottom\" | \"left\";\nexport type SheetSize = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\n\nexport interface SheetProps {\n // Core props\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n\n // Content\n title?: React.ReactNode;\n description?: React.ReactNode;\n children?: React.ReactNode;\n trigger?: React.ReactNode;\n footer?: React.ReactNode;\n\n // Behavior\n side?: SheetSide;\n closeOnEsc?: boolean;\n closeOnOutside?: boolean;\n showCloseButton?: boolean;\n autoDrawerOnMobile?: boolean;\n\n // Layout\n size?: SheetSize;\n stickyHeader?: boolean;\n stickyFooter?: boolean;\n autoHeight?: boolean;\n\n // Animation\n animation?: BasicAnimation;\n\n // Styling\n className?: string;\n contentClassName?: string;\n headerClassName?: string;\n titleClassName?: string;\n descriptionClassName?: string;\n footerClassName?: string;\n overlayClassName?: string;\n}\n\nconst getSizeClasses = (size: SheetSize, side: SheetSide): string => {\n const isVertical = side === \"top\" || side === \"bottom\";\n const sizeMap: Record<SheetSize, string> = {\n sm: isVertical ? \"max-h-[20vh]!\" : \"sm:max-w-sm\",\n md: isVertical ? \"max-h-[40vh]!\" : \"sm:max-w-md\",\n lg: isVertical ? \"max-h-[60vh]!\" : \"sm:max-w-lg\",\n xl: isVertical ? \"max-h-[80vh]!\" : \"sm:max-w-xl\",\n full: isVertical ? \"max-h-full!\" : \"sm:max-w-full\",\n };\n return sizeMap[size];\n};\n\nconst Sheet = React.forwardRef<HTMLDivElement, SheetProps>((props, ref) => {\n const {\n open,\n onOpenChange,\n title,\n description,\n children,\n trigger,\n footer,\n side = \"right\",\n closeOnEsc = true,\n closeOnOutside = true,\n showCloseButton = true,\n autoDrawerOnMobile = true,\n size = \"md\",\n stickyHeader = false,\n stickyFooter = false,\n autoHeight = true,\n animation,\n className,\n contentClassName,\n headerClassName,\n titleClassName,\n descriptionClassName,\n footerClassName,\n overlayClassName,\n } = props;\n\n const animationResult = useMemo(() => {\n return animation ? animationClass(animation) : { className: \"\" };\n }, [animation]);\n\n const contentClasses = cn(\n // Remove default padding and gap to allow custom header/footer\n \"!p-0 !gap-0 flex flex-col\",\n getSizeClasses(size, side),\n animationResult.className,\n className\n );\n\n const headerClasses = cn(\"px-6 pt-6 text-left\", headerClassName);\n\n const footerClasses = cn(\n \"px-6 pb-6 flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n footerClassName\n );\n\n const headerComponents = useMemo(() => {\n return title || description ? (\n <SheetHeader\n className={cn(\"py-4\", { \"border-b\": stickyHeader }, headerClasses)}\n >\n {title && <SheetTitle className={titleClassName}>{title}</SheetTitle>}\n {description && (\n <SheetDescription className={descriptionClassName}>\n {description}\n </SheetDescription>\n )}\n </SheetHeader>\n ) : null;\n }, [\n title,\n description,\n headerClasses,\n titleClassName,\n descriptionClassName,\n stickyHeader,\n ]);\n\n const footerComponents = useMemo(() => {\n return footer ? (\n <SheetFooter\n className={cn(\"py-4\", { \"border-t\": stickyFooter }, footerClasses)}\n >\n {footer}\n </SheetFooter>\n ) : null;\n }, [footer, footerClasses, stickyFooter]);\n\n // Mobile: use drawer with bottom direction if enabled\n if (isMobile && autoDrawerOnMobile) {\n const drawerContentClasses = cn(\n \"flex flex-col\",\n animationResult.className,\n className\n );\n\n return (\n <Drawer open={open} onOpenChange={onOpenChange} direction=\"bottom\">\n {trigger && <DrawerTrigger asChild>{trigger}</DrawerTrigger>}\n <DrawerContent\n ref={ref}\n className={cn(\n drawerContentClasses,\n autoHeight ? \"\" : getSizeClasses(size, \"bottom\")\n )}\n >\n {(title || description) && (\n <DrawerHeader className={headerClassName}>\n {title && (\n <DrawerTitle className={titleClassName}>{title}</DrawerTitle>\n )}\n {description && (\n <DrawerDescription className={descriptionClassName}>\n {description}\n </DrawerDescription>\n )}\n </DrawerHeader>\n )}\n\n <ScrollArea className={cn(\"flex flex-col overflow-hidden\")}>\n {children && (\n <div className={cn(\"px-4 py-2\", contentClassName)}>\n {children}\n </div>\n )}\n </ScrollArea>\n\n {footer && (\n <DrawerFooter className={footerClassName}>{footer}</DrawerFooter>\n )}\n </DrawerContent>\n </Drawer>\n );\n }\n\n // Desktop: use sheet with original behavior\n return (\n <SSheet open={open} onOpenChange={onOpenChange}>\n {trigger && <SheetTrigger asChild>{trigger}</SheetTrigger>}\n <SSheetContent\n ref={ref}\n side={side}\n className={cn(className, contentClasses)}\n onEscapeKeyDown={(e) => !closeOnEsc && e.preventDefault()}\n onInteractOutside={(e) => !closeOnOutside && e.preventDefault()}\n overlayClassName={cn(overlayClassName)}\n >\n {/* Hide default close button if showCloseButton is false */}\n {!showCloseButton && (\n <style>{`\n [data-slot=\"sheet-content\"] > [data-slot=\"sheet-close\"] {\n display: none;\n }\n `}</style>\n )}\n\n {stickyHeader && headerComponents}\n\n <ScrollArea className=\"flex max-h-full flex-col overflow-hidden\">\n {!stickyHeader && headerComponents}\n {children && (\n <div className={cn(\"px-6 py-4\", contentClassName)}>{children}</div>\n )}\n {!stickyFooter && footerComponents}\n </ScrollArea>\n\n {stickyFooter && footerComponents}\n </SSheetContent>\n </SSheet>\n );\n});\n\nSheet.displayName = \"Sheet\";\n\nexport { SheetClose, DrawerClose };\nexport default Sheet;\n"],"names":["getSizeClasses","size","side","isVertical","Sheet","React","props","ref","open","onOpenChange","title","description","children","trigger","footer","closeOnEsc","closeOnOutside","showCloseButton","autoDrawerOnMobile","stickyHeader","stickyFooter","autoHeight","animation","className","contentClassName","headerClassName","titleClassName","descriptionClassName","footerClassName","overlayClassName","animationResult","useMemo","animationClass","contentClasses","cn","headerClasses","footerClasses","headerComponents","jsxs","SheetHeader","jsx","SheetTitle","SheetDescription","footerComponents","SheetFooter","isMobile","drawerContentClasses","Drawer","DrawerTrigger","DrawerContent","DrawerHeader","DrawerTitle","DrawerDescription","ScrollArea","DrawerFooter","SSheet","SheetTrigger","SSheetContent","e"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Sheet.cjs","sources":["../../../../src/components/Sheet/Sheet.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport {\n Sheet as SSheet,\n SheetContent as SSheetContent,\n SheetDescription,\n SheetFooter,\n SheetHeader,\n SheetTitle,\n SheetTrigger,\n SheetClose,\n} from \"@dsui/ui/components/sheet\";\nimport {\n Drawer,\n DrawerClose,\n DrawerContent,\n DrawerDescription,\n DrawerFooter,\n DrawerHeader,\n DrawerTitle,\n DrawerTrigger,\n} from \"@dsui/ui/components/drawer\";\nimport { cn } from \"@dsui/ui/lib/utils\";\nimport { ScrollArea } from \"@dsui/ui/components/scroll-area\";\nimport type { BasicAnimation } from \"@/types/variables\";\nimport { animationClass } from \"@/utils/animations\";\nimport { isMobile } from \"react-device-detect\";\n\nexport type SheetSide = \"top\" | \"right\" | \"bottom\" | \"left\";\nexport type SheetSize = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\n\nexport interface SheetProps {\n // Core props\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n\n // Content\n title?: React.ReactNode;\n description?: React.ReactNode;\n children?: React.ReactNode;\n trigger?: React.ReactNode;\n footer?: React.ReactNode;\n\n // Behavior\n side?: SheetSide;\n closeOnEsc?: boolean;\n closeOnOutside?: boolean;\n showCloseButton?: boolean;\n autoDrawerOnMobile?: boolean;\n\n // Layout\n size?: SheetSize;\n stickyHeader?: boolean;\n stickyFooter?: boolean;\n autoHeight?: boolean;\n\n // Animation\n animation?: BasicAnimation;\n\n // Styling\n className?: string;\n contentClassName?: string;\n headerClassName?: string;\n titleClassName?: string;\n descriptionClassName?: string;\n footerClassName?: string;\n overlayClassName?: string;\n}\n\nconst getSizeClasses = (size: SheetSize, side: SheetSide): string => {\n const isVertical = side === \"top\" || side === \"bottom\";\n const sizeMap: Record<SheetSize, string> = {\n sm: isVertical ? \"max-h-[20vh]!\" : \"sm:max-w-sm\",\n md: isVertical ? \"max-h-[40vh]!\" : \"sm:max-w-md\",\n lg: isVertical ? \"max-h-[60vh]!\" : \"sm:max-w-lg\",\n xl: isVertical ? \"max-h-[80vh]!\" : \"sm:max-w-xl\",\n full: isVertical ? \"max-h-full!\" : \"sm:max-w-full\",\n };\n return sizeMap[size];\n};\n\nconst Sheet = React.forwardRef<HTMLDivElement, SheetProps>((props, ref) => {\n const {\n open,\n onOpenChange,\n title,\n description,\n children,\n trigger,\n footer,\n side = \"right\",\n closeOnEsc = true,\n closeOnOutside = true,\n showCloseButton = true,\n autoDrawerOnMobile = true,\n size = \"md\",\n stickyHeader = false,\n stickyFooter = false,\n autoHeight = true,\n animation,\n className,\n contentClassName,\n headerClassName,\n titleClassName,\n descriptionClassName,\n footerClassName,\n overlayClassName,\n } = props;\n\n const animationResult = useMemo(() => {\n return animation ? animationClass(animation) : { className: \"\" };\n }, [animation]);\n\n const contentClasses = cn(\n // Remove default padding and gap to allow custom header/footer\n \"ds:!p-0 ds:!gap-0 ds:flex ds:flex-col\",\n getSizeClasses(size, side),\n animationResult.className,\n className\n );\n\n const headerClasses = cn(\"ds:px-6 ds:pt-6 ds:text-left\", headerClassName);\n\n const footerClasses = cn(\n \"ds:px-6 ds:pb-6 ds:flex-col-reverse ds:sm:flex-row ds:sm:justify-end ds:sm:space-x-2\",\n footerClassName\n );\n\n const headerComponents = useMemo(() => {\n return title || description ? (\n <SheetHeader\n className={cn(\"ds:py-4\", { \"ds:border-b\": stickyHeader }, headerClasses)}\n >\n {title && <SheetTitle className={titleClassName}>{title}</SheetTitle>}\n {description && (\n <SheetDescription className={descriptionClassName}>\n {description}\n </SheetDescription>\n )}\n </SheetHeader>\n ) : null;\n }, [\n title,\n description,\n headerClasses,\n titleClassName,\n descriptionClassName,\n stickyHeader,\n ]);\n\n const footerComponents = useMemo(() => {\n return footer ? (\n <SheetFooter\n className={cn(\"ds:py-4\", { \"ds:border-t\": stickyFooter }, footerClasses)}\n >\n {footer}\n </SheetFooter>\n ) : null;\n }, [footer, footerClasses, stickyFooter]);\n\n // Mobile: use drawer with bottom direction if enabled\n if (isMobile && autoDrawerOnMobile) {\n const drawerContentClasses = cn(\n \"ds:flex ds:flex-col\",\n animationResult.className,\n className\n );\n\n return (\n <Drawer open={open} onOpenChange={onOpenChange} direction=\"bottom\">\n {trigger && <DrawerTrigger asChild>{trigger}</DrawerTrigger>}\n <DrawerContent\n ref={ref}\n className={cn(\n drawerContentClasses,\n autoHeight ? \"\" : getSizeClasses(size, \"bottom\")\n )}\n >\n {(title || description) && (\n <DrawerHeader className={headerClassName}>\n {title && (\n <DrawerTitle className={titleClassName}>{title}</DrawerTitle>\n )}\n {description && (\n <DrawerDescription className={descriptionClassName}>\n {description}\n </DrawerDescription>\n )}\n </DrawerHeader>\n )}\n\n <ScrollArea className={cn(\"ds:flex ds:flex-col ds:overflow-hidden\")}>\n {children && (\n <div className={cn(\"ds:px-4 ds:py-2\", contentClassName)}>\n {children}\n </div>\n )}\n </ScrollArea>\n\n {footer && (\n <DrawerFooter className={footerClassName}>{footer}</DrawerFooter>\n )}\n </DrawerContent>\n </Drawer>\n );\n }\n\n // Desktop: use sheet with original behavior\n return (\n <SSheet open={open} onOpenChange={onOpenChange}>\n {trigger && <SheetTrigger asChild>{trigger}</SheetTrigger>}\n <SSheetContent\n ref={ref}\n side={side}\n className={cn(className, contentClasses)}\n onEscapeKeyDown={(e) => !closeOnEsc && e.preventDefault()}\n onInteractOutside={(e) => !closeOnOutside && e.preventDefault()}\n overlayClassName={cn(overlayClassName)}\n >\n {/* Hide default close button if showCloseButton is false */}\n {!showCloseButton && (\n <style>{`\n [data-slot=\"sheet-content\"] > [data-slot=\"sheet-close\"] {\n display: none;\n }\n `}</style>\n )}\n\n {stickyHeader && headerComponents}\n\n <ScrollArea className=\"ds:flex ds:max-h-full ds:flex-col ds:overflow-hidden\">\n {!stickyHeader && headerComponents}\n {children && (\n <div className={cn(\"ds:px-6 ds:py-4\", contentClassName)}>{children}</div>\n )}\n {!stickyFooter && footerComponents}\n </ScrollArea>\n\n {stickyFooter && footerComponents}\n </SSheetContent>\n </SSheet>\n );\n});\n\nSheet.displayName = \"Sheet\";\n\nexport { SheetClose, DrawerClose };\nexport default Sheet;\n"],"names":["getSizeClasses","size","side","isVertical","Sheet","React","props","ref","open","onOpenChange","title","description","children","trigger","footer","closeOnEsc","closeOnOutside","showCloseButton","autoDrawerOnMobile","stickyHeader","stickyFooter","autoHeight","animation","className","contentClassName","headerClassName","titleClassName","descriptionClassName","footerClassName","overlayClassName","animationResult","useMemo","animationClass","contentClasses","cn","headerClasses","footerClasses","headerComponents","jsxs","SheetHeader","jsx","SheetTitle","SheetDescription","footerComponents","SheetFooter","isMobile","drawerContentClasses","Drawer","DrawerTrigger","DrawerContent","DrawerHeader","DrawerTitle","DrawerDescription","ScrollArea","DrawerFooter","SSheet","SheetTrigger","SSheetContent","e"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const o=require("react/jsx-runtime"),n=require("react"),C=require("@radix-ui/react-slider"),i=require("../../packages/ui/src/lib/utils.cjs"),w=require("motion/react"),K=require("@number-flow/react"),tt=require("../Badge/Badge.cjs");function rt(a){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(a){for(const e in a)if(e!=="default"){const s=Object.getOwnPropertyDescriptor(a,e);Object.defineProperty(t,e,s.get?s:{enumerable:!0,get:()=>a[e]})}}return t.default=a,Object.freeze(t)}const h=rt(C),Q={primary:{range:"bg-primary",thumb:"border-primary/50",labelBg:"bg-primary",labelText:"text-primary-foreground"},secondary:{range:"bg-secondary",thumb:"border-secondary/50",labelBg:"bg-secondary",labelText:"text-secondary-foreground"},success:{range:"bg-success",thumb:"border-success/50",labelBg:"bg-success",labelText:"text-success-foreground"},warning:{range:"bg-warning",thumb:"border-warning/50",labelBg:"bg-warning",labelText:"text-warning-foreground"},error:{range:"bg-error",thumb:"border-error/50",labelBg:"bg-error",labelText:"text-error-foreground"},glass:{range:"bg-white/30 backdrop-blur-sm",thumb:"border-white/30 backdrop-blur-sm",labelBg:"bg-white/15",labelText:"text-foreground"},muted:{range:"bg-muted-foreground",thumb:"border-muted-foreground/50",labelBg:"bg-muted",labelText:"text-muted-foreground"},accent:{range:"bg-accent",thumb:"border-accent/50",labelBg:"bg-accent",labelText:"text-accent-foreground"}},et={sm:{track:"data-[orientation=horizontal]:h-1 data-[orientation=vertical]:w-1",thumb:"size-3"},md:{track:"data-[orientation=horizontal]:h-1.5 data-[orientation=vertical]:w-1.5",thumb:"size-4"},lg:{track:"data-[orientation=horizontal]:h-2 data-[orientation=vertical]:w-2",thumb:"size-5"}},U=(a,t)=>a==="horizontal"?t==="bottom"?"bottom":t==="left"?"left":t==="right"?"right":"top":t==="right"?"right":t==="top"?"top":t==="bottom"?"bottom":"left",V=(a,t)=>{const e=t==="top"?"t":t==="bottom"?"b":t==="left"?"l":"r";return{primary:`border-${e}-primary`,secondary:`border-${e}-secondary`,success:`border-${e}-success`,warning:`border-${e}-warning`,error:`border-${e}-error`,glass:`border-${e}-white/15`,muted:`border-${e}-muted`,accent:`border-${e}-accent`}[a]},at=(a,t)=>({"horizontal-top":{badge:"left-1/2 -translate-x-1/2 bottom-full -translate-y-1/2",arrow:"top-full left-1/2 -translate-x-1/2 border-t-[6px] border-l-[6px] border-r-[6px] border-b-0 border-l-transparent border-r-transparent"},"horizontal-bottom":{badge:"left-1/2 -translate-x-1/2 top-full translate-y-1/2",arrow:"bottom-full left-1/2 -translate-x-1/2 border-b-[6px] border-l-[6px] border-r-[6px] border-t-0 border-l-transparent border-r-transparent"},"horizontal-left":{badge:"top-1/2 -translate-y-1/2 right-full -translate-x-1/2",arrow:"left-full top-1/2 -translate-y-1/2 border-l-[6px] border-t-[6px] border-b-[6px] border-r-0 border-t-transparent border-b-transparent"},"horizontal-right":{badge:"top-1/2 -translate-y-1/2 left-full translate-x-1/2",arrow:"right-full top-1/2 -translate-y-1/2 border-r-[6px] border-t-[6px] border-b-[6px] border-l-0 border-t-transparent border-b-transparent"},"vertical-left":{badge:"top-1/2 -translate-y-1/2 right-full -translate-x-1/2",arrow:"left-full top-1/2 -translate-y-1/2 border-l-[6px] border-t-[6px] border-b-[6px] border-r-0 border-t-transparent border-b-transparent"},"vertical-right":{badge:"top-1/2 -translate-y-1/2 left-full translate-x-1/2",arrow:"right-full top-1/2 -translate-y-1/2 border-r-[6px] border-t-[6px] border-b-[6px] border-l-0 border-t-transparent border-b-transparent"},"vertical-top":{badge:"left-1/2 -translate-x-1/2 bottom-full -translate-y-1/2",arrow:"top-full left-1/2 -translate-x-1/2 border-t-[6px] border-l-[6px] border-r-[6px] border-b-0 border-l-transparent border-r-transparent"},"vertical-bottom":{badge:"left-1/2 -translate-x-1/2 top-full translate-y-1/2",arrow:"bottom-full left-1/2 -translate-x-1/2 border-b-[6px] border-l-[6px] border-r-[6px] border-t-0 border-l-transparent border-r-transparent"}})[`${a}-${t}`],ot=(a,t)=>({"horizontal-top":"data-[orientation=horizontal]:bottom-full data-[orientation=horizontal]:left-1/2 data-[orientation=horizontal]:-translate-x-1/2 data-[orientation=horizontal]:-translate-y-1/2","horizontal-bottom":"data-[orientation=horizontal]:top-full data-[orientation=horizontal]:left-1/2 data-[orientation=horizontal]:-translate-x-1/2 data-[orientation=horizontal]:translate-y-1/2","horizontal-left":"data-[orientation=horizontal]:top-1/2 data-[orientation=horizontal]:right-full data-[orientation=horizontal]:-translate-y-1/2 data-[orientation=horizontal]:-translate-x-1/2","horizontal-right":"data-[orientation=horizontal]:top-1/2 data-[orientation=horizontal]:left-full data-[orientation=horizontal]:-translate-y-1/2 data-[orientation=horizontal]:translate-x-1/2","vertical-left":"data-[orientation=vertical]:right-full data-[orientation=vertical]:top-1/2 data-[orientation=vertical]:-translate-x-1/2 data-[orientation=vertical]:-translate-y-1/2","vertical-right":"data-[orientation=vertical]:left-full data-[orientation=vertical]:top-1/2 data-[orientation=vertical]:translate-x-1/2 data-[orientation=vertical]:-translate-y-1/2","vertical-top":"data-[orientation=vertical]:bottom-full data-[orientation=vertical]:left-1/2 data-[orientation=vertical]:-translate-x-1/2 data-[orientation=vertical]:-translate-y-1/2","vertical-bottom":"data-[orientation=vertical]:top-full data-[orientation=vertical]:left-1/2 data-[orientation=vertical]:-translate-x-1/2 data-[orientation=vertical]:translate-y-1/2"})[`${a}-${t}`],W=n.forwardRef(({className:a,color:t="primary",size:e="md",showLabel:s=!1,labelArrow:S=!1,labelAnimation:m="none",labelFormatter:q=c=>`${c}`,labelPosition:b="top",labelColor:l,labelTextColor:d,labelArrowColor:N,sliderColor:O,thumbBorderColor:R,defaultValue:f,value:g,min:z=0,max:j=100,..._},A)=>{const c=n.useMemo(()=>Array.isArray(g)?g:Array.isArray(f)?f:[z,j],[g,f,z,j]),[P,E]=n.useState(!1);n.useEffect(()=>{g!==void 0&&!Array.isArray(g)&&console.error("[Slider] value prop must be an array of numbers, e.g., [50] or [25, 75]"),f!==void 0&&!Array.isArray(f)&&console.error("[Slider] defaultValue prop must be an array of numbers, e.g., [50] or [25, 75]")},[g,f]);const u=_.orientation||"horizontal",I=w.useMotionValue(0),D=w.useMotionValue(0),F=n.useRef(0),G={stiffness:150,damping:15,mass:1},x=w.useSpring(0,G),y=w.useSpring(0,G);n.useEffect(()=>{if(m==="spec"&&c.length>0){const r=c[0],p=r-F.current,v=5,T=Math.max(-v,Math.min(v,p));D.set(T),I.set(r);const Y=-T*12,L=-T*20;x.set(Y),y.set(L),setTimeout(()=>{x.set(0),y.set(0)},100),F.current=r}},[c,m,D,I,x,y]);const k=n.useMemo(()=>{if(O||R)return{range:O||"bg-primary",thumb:R||"border-primary/50"};const r=Q[t];return{range:r.range,thumb:r.thumb}},[t,O,R]),M=n.useMemo(()=>et[e],[e]),H=n.useMemo(()=>{if(l||d)return i.cn(l,d);const r=Q[t],p=U(u,b),v=V(t,p);return t==="glass"?`${r.labelBg} ${r.labelText} backdrop-blur-sm shadow-lg [&>div.arrow]:${v}`:`${r.labelBg} ${r.labelText} [&>div.arrow]:${v}`},[t,b,u,l,d]),B=n.useMemo(()=>{if(N)return N;const r=U(u,b);return V(t,r)},[t,b,u,N]),Z=n.useMemo(()=>s==="hover"?"scale-0 group-hover:scale-100":s==="always"?"scale-100":"hidden",[s]),$=n.useMemo(()=>at(u,b),[b,u]),J=n.useMemo(()=>ot(u,b),[b,u]),X=n.useCallback(r=>m==="spec"?o.jsxs(w.motion.div,{className:i.cn("pointer-events-none absolute z-50 flex flex-col items-center justify-center rounded-md px-3 py-1.5 text-xs shadow-xl",J,l&&l,d&&d,!l&&!d&&H),"data-orientation":u,initial:s==="always"?{opacity:1,y:-5,scale:1}:{opacity:0,y:20,scale:0},animate:P&&s==="hover"||s==="always"?{opacity:1,y:-5,scale:1}:{opacity:0,y:20,scale:0},transition:{type:"tween",duration:.2,ease:"easeOut"},style:{x,rotate:y,whiteSpace:"nowrap"},children:[o.jsx("div",{className:"relative z-1",children:o.jsx(K,{value:c[r],format:{notation:"standard"},isolate:!0})}),S&&o.jsx("div",{className:i.cn("arrow absolute border-transparent",$.arrow,B)})]}):o.jsxs(tt.default,{size:"lg",color:l||d||t==="glass"?"custom":t==="muted"?"muted":t==="accent"?"accent":t,variant:"solid",className:i.cn("transition-transform absolute px-3 rounded-md",$.badge,Z,l&&l,d&&d,!l&&!d&&t==="glass"&&"bg-white/15 text-foreground backdrop-blur-sm shadow-lg [&>div.arrow]:border-t-white/15"),children:[m==="number-flow"?o.jsx(K,{value:c[r],format:{notation:"standard"},isolate:!0}):o.jsx("span",{children:q(c[r])}),S&&o.jsx("div",{className:i.cn("arrow absolute border-transparent",$.arrow,B)})]}),[m,J,l,d,H,u,s,x,y,q,c,t,$,Z,S,B,P]);return s?o.jsxs(h.Root,{ref:A,"data-slot":"slider",defaultValue:f,value:g,min:z,max:j,className:i.cn("relative flex w-full touch-none items-center select-none data-disabled:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col",a),..._,children:[o.jsx(h.Track,{"data-slot":"slider-track",className:i.cn("bg-muted relative grow overflow-hidden rounded-full data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full",M.track),children:o.jsx(h.Range,{"data-slot":"slider-range",className:i.cn("absolute data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full",k.range)})}),Array.from({length:c.length},(r,p)=>o.jsx(h.Thumb,{"data-slot":"slider-thumb",className:i.cn("group block shrink-0 rounded-full border bg-white shadow-sm transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50 ring-ring/50",k.thumb,M.thumb),onMouseEnter:()=>E(!0),onMouseLeave:()=>E(!1),children:X(p)},p))]}):o.jsxs(h.Root,{ref:A,"data-slot":"slider",defaultValue:f,value:g,min:z,max:j,className:i.cn("relative flex w-full touch-none items-center select-none data-disabled:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col",a),..._,children:[o.jsx(h.Track,{"data-slot":"slider-track",className:i.cn("bg-muted relative grow overflow-hidden rounded-full data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full",M.track),children:o.jsx(h.Range,{"data-slot":"slider-range",className:i.cn("absolute data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full",k.range)})}),Array.from({length:c.length},(r,p)=>o.jsx(h.Thumb,{"data-slot":"slider-thumb",className:i.cn("block shrink-0 rounded-full border bg-white shadow-sm transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50 ring-ring/50",k.thumb,M.thumb)},p))]})});W.displayName="Slider";exports.default=W;
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const o=require("react/jsx-runtime"),n=require("react"),C=require("@radix-ui/react-slider"),s=require("../../packages/ui/src/lib/utils.cjs"),w=require("motion/react"),K=require("@number-flow/react"),tt=require("../Badge/Badge.cjs");function rt(a){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(a){for(const e in a)if(e!=="default"){const i=Object.getOwnPropertyDescriptor(a,e);Object.defineProperty(t,e,i.get?i:{enumerable:!0,get:()=>a[e]})}}return t.default=a,Object.freeze(t)}const h=rt(C),Q={primary:{range:"bg-primary",thumb:"border-primary/50",labelBg:"bg-primary",labelText:"text-primary-foreground"},secondary:{range:"bg-secondary",thumb:"border-secondary/50",labelBg:"bg-secondary",labelText:"text-secondary-foreground"},success:{range:"bg-success",thumb:"border-success/50",labelBg:"bg-success",labelText:"text-success-foreground"},warning:{range:"bg-warning",thumb:"border-warning/50",labelBg:"bg-warning",labelText:"text-warning-foreground"},error:{range:"bg-error",thumb:"border-error/50",labelBg:"bg-error",labelText:"text-error-foreground"},glass:{range:"bg-white/30 backdrop-blur-sm",thumb:"border-white/30 backdrop-blur-sm",labelBg:"bg-white/15",labelText:"text-foreground"},muted:{range:"bg-muted-foreground",thumb:"border-muted-foreground/50",labelBg:"bg-muted",labelText:"text-muted-foreground"},accent:{range:"bg-accent",thumb:"border-accent/50",labelBg:"bg-accent",labelText:"text-accent-foreground"}},et={sm:{track:"data-[orientation=horizontal]:h-1 data-[orientation=vertical]:w-1",thumb:"size-3"},md:{track:"data-[orientation=horizontal]:h-1.5 data-[orientation=vertical]:w-1.5",thumb:"size-4"},lg:{track:"data-[orientation=horizontal]:h-2 data-[orientation=vertical]:w-2",thumb:"size-5"}},U=(a,t)=>a==="horizontal"?t==="bottom"?"bottom":t==="left"?"left":t==="right"?"right":"top":t==="right"?"right":t==="top"?"top":t==="bottom"?"bottom":"left",V=(a,t)=>{const e=t==="top"?"t":t==="bottom"?"b":t==="left"?"l":"r";return{primary:`border-${e}-primary`,secondary:`border-${e}-secondary`,success:`border-${e}-success`,warning:`border-${e}-warning`,error:`border-${e}-error`,glass:`border-${e}-white/15`,muted:`border-${e}-muted`,accent:`border-${e}-accent`}[a]},at=(a,t)=>({"horizontal-top":{badge:"left-1/2 -translate-x-1/2 bottom-full -translate-y-1/2",arrow:"top-full left-1/2 -translate-x-1/2 border-t-[6px] border-l-[6px] border-r-[6px] border-b-0 border-l-transparent border-r-transparent"},"horizontal-bottom":{badge:"left-1/2 -translate-x-1/2 top-full translate-y-1/2",arrow:"bottom-full left-1/2 -translate-x-1/2 border-b-[6px] border-l-[6px] border-r-[6px] border-t-0 border-l-transparent border-r-transparent"},"horizontal-left":{badge:"top-1/2 -translate-y-1/2 right-full -translate-x-1/2",arrow:"left-full top-1/2 -translate-y-1/2 border-l-[6px] border-t-[6px] border-b-[6px] border-r-0 border-t-transparent border-b-transparent"},"horizontal-right":{badge:"top-1/2 -translate-y-1/2 left-full translate-x-1/2",arrow:"right-full top-1/2 -translate-y-1/2 border-r-[6px] border-t-[6px] border-b-[6px] border-l-0 border-t-transparent border-b-transparent"},"vertical-left":{badge:"top-1/2 -translate-y-1/2 right-full -translate-x-1/2",arrow:"left-full top-1/2 -translate-y-1/2 border-l-[6px] border-t-[6px] border-b-[6px] border-r-0 border-t-transparent border-b-transparent"},"vertical-right":{badge:"top-1/2 -translate-y-1/2 left-full translate-x-1/2",arrow:"right-full top-1/2 -translate-y-1/2 border-r-[6px] border-t-[6px] border-b-[6px] border-l-0 border-t-transparent border-b-transparent"},"vertical-top":{badge:"left-1/2 -translate-x-1/2 bottom-full -translate-y-1/2",arrow:"top-full left-1/2 -translate-x-1/2 border-t-[6px] border-l-[6px] border-r-[6px] border-b-0 border-l-transparent border-r-transparent"},"vertical-bottom":{badge:"left-1/2 -translate-x-1/2 top-full translate-y-1/2",arrow:"bottom-full left-1/2 -translate-x-1/2 border-b-[6px] border-l-[6px] border-r-[6px] border-t-0 border-l-transparent border-r-transparent"}})[`${a}-${t}`],ot=(a,t)=>({"horizontal-top":"data-[orientation=horizontal]:bottom-full data-[orientation=horizontal]:left-1/2 data-[orientation=horizontal]:-translate-x-1/2 data-[orientation=horizontal]:-translate-y-1/2","horizontal-bottom":"data-[orientation=horizontal]:top-full data-[orientation=horizontal]:left-1/2 data-[orientation=horizontal]:-translate-x-1/2 data-[orientation=horizontal]:translate-y-1/2","horizontal-left":"data-[orientation=horizontal]:top-1/2 data-[orientation=horizontal]:right-full data-[orientation=horizontal]:-translate-y-1/2 data-[orientation=horizontal]:-translate-x-1/2","horizontal-right":"data-[orientation=horizontal]:top-1/2 data-[orientation=horizontal]:left-full data-[orientation=horizontal]:-translate-y-1/2 data-[orientation=horizontal]:translate-x-1/2","vertical-left":"data-[orientation=vertical]:right-full data-[orientation=vertical]:top-1/2 data-[orientation=vertical]:-translate-x-1/2 data-[orientation=vertical]:-translate-y-1/2","vertical-right":"data-[orientation=vertical]:left-full data-[orientation=vertical]:top-1/2 data-[orientation=vertical]:translate-x-1/2 data-[orientation=vertical]:-translate-y-1/2","vertical-top":"data-[orientation=vertical]:bottom-full data-[orientation=vertical]:left-1/2 data-[orientation=vertical]:-translate-x-1/2 data-[orientation=vertical]:-translate-y-1/2","vertical-bottom":"data-[orientation=vertical]:top-full data-[orientation=vertical]:left-1/2 data-[orientation=vertical]:-translate-x-1/2 data-[orientation=vertical]:translate-y-1/2"})[`${a}-${t}`],W=n.forwardRef(({className:a,color:t="primary",size:e="md",showLabel:i=!1,labelArrow:S=!1,labelAnimation:m="none",labelFormatter:q=c=>`${c}`,labelPosition:b="top",labelColor:d,labelTextColor:l,labelArrowColor:N,sliderColor:O,thumbBorderColor:R,defaultValue:f,value:g,min:z=0,max:j=100,..._},A)=>{const c=n.useMemo(()=>Array.isArray(g)?g:Array.isArray(f)?f:[z,j],[g,f,z,j]),[P,E]=n.useState(!1);n.useEffect(()=>{g!==void 0&&!Array.isArray(g)&&console.error("[Slider] value prop must be an array of numbers, e.g., [50] or [25, 75]"),f!==void 0&&!Array.isArray(f)&&console.error("[Slider] defaultValue prop must be an array of numbers, e.g., [50] or [25, 75]")},[g,f]);const u=_.orientation||"horizontal",I=w.useMotionValue(0),D=w.useMotionValue(0),F=n.useRef(0),G={stiffness:150,damping:15,mass:1},x=w.useSpring(0,G),y=w.useSpring(0,G);n.useEffect(()=>{if(m==="spec"&&c.length>0){const r=c[0],p=r-F.current,v=5,T=Math.max(-v,Math.min(v,p));D.set(T),I.set(r);const Y=-T*12,L=-T*20;x.set(Y),y.set(L),setTimeout(()=>{x.set(0),y.set(0)},100),F.current=r}},[c,m,D,I,x,y]);const k=n.useMemo(()=>{if(O||R)return{range:O||"bg-primary",thumb:R||"border-primary/50"};const r=Q[t];return{range:r.range,thumb:r.thumb}},[t,O,R]),M=n.useMemo(()=>et[e],[e]),H=n.useMemo(()=>{if(d||l)return s.cn(d,l);const r=Q[t],p=U(u,b),v=V(t,p);return t==="glass"?`${r.labelBg} ${r.labelText} backdrop-blur-sm shadow-lg [&>div.arrow]:${v}`:`${r.labelBg} ${r.labelText} [&>div.arrow]:${v}`},[t,b,u,d,l]),B=n.useMemo(()=>{if(N)return N;const r=U(u,b);return V(t,r)},[t,b,u,N]),Z=n.useMemo(()=>i==="hover"?"scale-0 group-hover:scale-100":i==="always"?"scale-100":"hidden",[i]),$=n.useMemo(()=>at(u,b),[b,u]),J=n.useMemo(()=>ot(u,b),[b,u]),X=n.useCallback(r=>m==="spec"?o.jsxs(w.motion.div,{className:s.cn("ds:pointer-events-none ds:absolute ds:z-50 ds:flex ds:flex-col ds:items-center ds:justify-center ds:rounded-md ds:px-3 ds:py-1.5 ds:text-xs ds:shadow-xl",J,d&&d,l&&l,!d&&!l&&H),"data-orientation":u,initial:i==="always"?{opacity:1,y:-5,scale:1}:{opacity:0,y:20,scale:0},animate:P&&i==="hover"||i==="always"?{opacity:1,y:-5,scale:1}:{opacity:0,y:20,scale:0},transition:{type:"tween",duration:.2,ease:"easeOut"},style:{x,rotate:y,whiteSpace:"nowrap"},children:[o.jsx("div",{className:"ds:relative ds:z-1",children:o.jsx(K,{value:c[r],format:{notation:"standard"},isolate:!0})}),S&&o.jsx("div",{className:s.cn("ds:arrow ds:absolute ds:border-transparent",$.arrow,B)})]}):o.jsxs(tt.default,{size:"lg",color:d||l||t==="glass"?"custom":t==="muted"?"muted":t==="accent"?"accent":t,variant:"solid",className:s.cn("ds:transition-transform ds:absolute ds:px-3 ds:rounded-md",$.badge,Z,d&&d,l&&l,!d&&!l&&t==="glass"&&"ds:bg-white/15 ds:text-foreground ds:backdrop-blur-sm ds:shadow-lg ds:[&>div.arrow]:border-t-white/15"),children:[m==="number-flow"?o.jsx(K,{value:c[r],format:{notation:"standard"},isolate:!0}):o.jsx("span",{children:q(c[r])}),S&&o.jsx("div",{className:s.cn("ds:arrow ds:absolute ds:border-transparent",$.arrow,B)})]}),[m,J,d,l,H,u,i,x,y,q,c,t,$,Z,S,B,P]);return i?o.jsxs(h.Root,{ref:A,"data-slot":"slider",defaultValue:f,value:g,min:z,max:j,className:s.cn("ds:relative ds:flex ds:w-full ds:touch-none ds:items-center ds:select-none ds:data-disabled:opacity-50 ds:data-[orientation=vertical]:h-full ds:data-[orientation=vertical]:min-h-44 ds:data-[orientation=vertical]:w-auto ds:data-[orientation=vertical]:flex-col",a),..._,children:[o.jsx(h.Track,{"data-slot":"slider-track",className:s.cn("ds:bg-muted ds:relative ds:grow ds:overflow-hidden ds:rounded-full ds:data-[orientation=horizontal]:w-full ds:data-[orientation=vertical]:h-full",M.track),children:o.jsx(h.Range,{"data-slot":"slider-range",className:s.cn("ds:absolute ds:data-[orientation=horizontal]:h-full ds:data-[orientation=vertical]:w-full",k.range)})}),Array.from({length:c.length},(r,p)=>o.jsx(h.Thumb,{"data-slot":"slider-thumb",className:s.cn("ds:group ds:block ds:shrink-0 ds:rounded-full ds:border ds:bg-white ds:shadow-sm ds:transition-[color,box-shadow] ds:hover:ring-4 ds:focus-visible:ring-4 ds:focus-visible:outline-hidden ds:disabled:pointer-events-none ds:disabled:opacity-50 ds:ring-ring/50",k.thumb,M.thumb),onMouseEnter:()=>E(!0),onMouseLeave:()=>E(!1),children:X(p)},p))]}):o.jsxs(h.Root,{ref:A,"data-slot":"slider",defaultValue:f,value:g,min:z,max:j,className:s.cn("ds:relative ds:flex ds:w-full ds:touch-none ds:items-center ds:select-none ds:data-disabled:opacity-50 ds:data-[orientation=vertical]:h-full ds:data-[orientation=vertical]:min-h-44 ds:data-[orientation=vertical]:w-auto ds:data-[orientation=vertical]:flex-col",a),..._,children:[o.jsx(h.Track,{"data-slot":"slider-track",className:s.cn("ds:bg-muted ds:relative ds:grow ds:overflow-hidden ds:rounded-full ds:data-[orientation=horizontal]:w-full ds:data-[orientation=vertical]:h-full",M.track),children:o.jsx(h.Range,{"data-slot":"slider-range",className:s.cn("ds:absolute ds:data-[orientation=horizontal]:h-full ds:data-[orientation=vertical]:w-full",k.range)})}),Array.from({length:c.length},(r,p)=>o.jsx(h.Thumb,{"data-slot":"slider-thumb",className:s.cn("ds:block ds:shrink-0 ds:rounded-full ds:border ds:bg-white ds:shadow-sm ds:transition-[color,box-shadow] ds:hover:ring-4 ds:focus-visible:ring-4 ds:focus-visible:outline-hidden ds:disabled:pointer-events-none ds:disabled:opacity-50 ds:ring-ring/50",k.thumb,M.thumb)},p))]})});W.displayName="Slider";exports.default=W;
|
|
2
2
|
//# sourceMappingURL=Slider.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Slider.cjs","sources":["../../../../src/components/Slider/Slider.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport * as SliderPrimitive from \"@radix-ui/react-slider\";\nimport { cn } from \"@dsui/ui/lib/utils\";\nimport { motion, useMotionValue, useSpring, useTransform } from \"motion/react\";\nimport NumberFlow from \"@number-flow/react\";\nimport type { BasicColor } from \"@/types/variables\";\nimport { Badge } from \"../Badge\";\n\ntype LabelAnimation = \"number-flow\" | \"spec\" | \"none\";\ntype LabelDisplay = false | \"hover\" | \"always\";\ntype SliderColor = BasicColor | \"muted\" | \"accent\";\ntype SliderSize = \"sm\" | \"md\" | \"lg\";\ntype LabelPosition = \"top\" | \"bottom\" | \"left\" | \"right\";\n\nexport type SliderProps = Omit<\n React.ComponentPropsWithoutRef<typeof SliderPrimitive.Root>,\n \"color\" | \"defaultValue\" | \"value\" | \"min\" | \"max\"\n> & {\n color?: SliderColor;\n size?: SliderSize;\n showLabel?: LabelDisplay;\n labelArrow?: boolean;\n labelAnimation?: LabelAnimation;\n labelFormatter?: (value: number) => string;\n labelPosition?: LabelPosition;\n labelColor?: string;\n labelTextColor?: string;\n labelArrowColor?: string;\n sliderColor?: string;\n thumbBorderColor?: string;\n defaultValue?: number[];\n value?: number[];\n min?: number;\n max?: number;\n};\n\n// Color mapping configuration\nconst COLOR_CONFIG: Record<\n SliderColor,\n {\n range: string;\n thumb: string;\n labelBg: string;\n labelText: string;\n }\n> = {\n primary: {\n range: \"bg-primary\",\n thumb: \"border-primary/50\",\n labelBg: \"bg-primary\",\n labelText: \"text-primary-foreground\",\n },\n secondary: {\n range: \"bg-secondary\",\n thumb: \"border-secondary/50\",\n labelBg: \"bg-secondary\",\n labelText: \"text-secondary-foreground\",\n },\n success: {\n range: \"bg-success\",\n thumb: \"border-success/50\",\n labelBg: \"bg-success\",\n labelText: \"text-success-foreground\",\n },\n warning: {\n range: \"bg-warning\",\n thumb: \"border-warning/50\",\n labelBg: \"bg-warning\",\n labelText: \"text-warning-foreground\",\n },\n error: {\n range: \"bg-error\",\n thumb: \"border-error/50\",\n labelBg: \"bg-error\",\n labelText: \"text-error-foreground\",\n },\n glass: {\n range: \"bg-white/30 backdrop-blur-sm\",\n thumb: \"border-white/30 backdrop-blur-sm\",\n labelBg: \"bg-white/15\",\n labelText: \"text-foreground\",\n },\n muted: {\n range: \"bg-muted-foreground\",\n thumb: \"border-muted-foreground/50\",\n labelBg: \"bg-muted\",\n labelText: \"text-muted-foreground\",\n },\n accent: {\n range: \"bg-accent\",\n thumb: \"border-accent/50\",\n labelBg: \"bg-accent\",\n labelText: \"text-accent-foreground\",\n },\n};\n\n// Size configuration\nconst SIZE_CONFIG: Record<\n SliderSize,\n {\n track: string;\n thumb: string;\n }\n> = {\n sm: {\n track: \"data-[orientation=horizontal]:h-1 data-[orientation=vertical]:w-1\",\n thumb: \"size-3\",\n },\n md: {\n track:\n \"data-[orientation=horizontal]:h-1.5 data-[orientation=vertical]:w-1.5\",\n thumb: \"size-4\",\n },\n lg: {\n track: \"data-[orientation=horizontal]:h-2 data-[orientation=vertical]:w-2\",\n thumb: \"size-5\",\n },\n};\n\n// Helper to get arrow direction based on orientation and position\nconst getArrowDirection = (\n orientation: \"horizontal\" | \"vertical\",\n position: LabelPosition\n): \"top\" | \"bottom\" | \"left\" | \"right\" => {\n if (orientation === \"horizontal\") {\n if (position === \"bottom\") return \"bottom\";\n if (position === \"left\") return \"left\";\n if (position === \"right\") return \"right\";\n return \"top\";\n }\n // vertical\n if (position === \"right\") return \"right\";\n if (position === \"top\") return \"top\";\n if (position === \"bottom\") return \"bottom\";\n return \"left\";\n};\n\n// Helper to get arrow color class\nconst getArrowColorClass = (\n color: SliderColor,\n direction: \"top\" | \"bottom\" | \"left\" | \"right\"\n): string => {\n // Generate full border class (e.g., \"border-t-primary\")\n const prefix =\n direction === \"top\"\n ? \"t\"\n : direction === \"bottom\"\n ? \"b\"\n : direction === \"left\"\n ? \"l\"\n : \"r\";\n const colorMap: Record<SliderColor, string> = {\n primary: `border-${prefix}-primary`,\n secondary: `border-${prefix}-secondary`,\n success: `border-${prefix}-success`,\n warning: `border-${prefix}-warning`,\n error: `border-${prefix}-error`,\n glass: `border-${prefix}-white/15`,\n muted: `border-${prefix}-muted`,\n accent: `border-${prefix}-accent`,\n };\n\n return colorMap[color];\n};\n\n// Helper to get label position classes\nconst getLabelPositionClasses = (\n orientation: \"horizontal\" | \"vertical\",\n position: LabelPosition\n): { badge: string; arrow: string } => {\n const positions: Record<string, { badge: string; arrow: string }> = {\n \"horizontal-top\": {\n badge: \"left-1/2 -translate-x-1/2 bottom-full -translate-y-1/2\",\n arrow:\n \"top-full left-1/2 -translate-x-1/2 border-t-[6px] border-l-[6px] border-r-[6px] border-b-0 border-l-transparent border-r-transparent\",\n },\n \"horizontal-bottom\": {\n badge: \"left-1/2 -translate-x-1/2 top-full translate-y-1/2\",\n arrow:\n \"bottom-full left-1/2 -translate-x-1/2 border-b-[6px] border-l-[6px] border-r-[6px] border-t-0 border-l-transparent border-r-transparent\",\n },\n \"horizontal-left\": {\n badge: \"top-1/2 -translate-y-1/2 right-full -translate-x-1/2\",\n arrow:\n \"left-full top-1/2 -translate-y-1/2 border-l-[6px] border-t-[6px] border-b-[6px] border-r-0 border-t-transparent border-b-transparent\",\n },\n \"horizontal-right\": {\n badge: \"top-1/2 -translate-y-1/2 left-full translate-x-1/2\",\n arrow:\n \"right-full top-1/2 -translate-y-1/2 border-r-[6px] border-t-[6px] border-b-[6px] border-l-0 border-t-transparent border-b-transparent\",\n },\n \"vertical-left\": {\n badge: \"top-1/2 -translate-y-1/2 right-full -translate-x-1/2\",\n arrow:\n \"left-full top-1/2 -translate-y-1/2 border-l-[6px] border-t-[6px] border-b-[6px] border-r-0 border-t-transparent border-b-transparent\",\n },\n \"vertical-right\": {\n badge: \"top-1/2 -translate-y-1/2 left-full translate-x-1/2\",\n arrow:\n \"right-full top-1/2 -translate-y-1/2 border-r-[6px] border-t-[6px] border-b-[6px] border-l-0 border-t-transparent border-b-transparent\",\n },\n \"vertical-top\": {\n badge: \"left-1/2 -translate-x-1/2 bottom-full -translate-y-1/2\",\n arrow:\n \"top-full left-1/2 -translate-x-1/2 border-t-[6px] border-l-[6px] border-r-[6px] border-b-0 border-l-transparent border-r-transparent\",\n },\n \"vertical-bottom\": {\n badge: \"left-1/2 -translate-x-1/2 top-full translate-y-1/2\",\n arrow:\n \"bottom-full left-1/2 -translate-x-1/2 border-b-[6px] border-l-[6px] border-r-[6px] border-t-0 border-l-transparent border-r-transparent\",\n },\n };\n\n return positions[`${orientation}-${position}`];\n};\n\n// Helper to get spec label position classes\nconst getSpecLabelPositionClass = (\n orientation: \"horizontal\" | \"vertical\",\n position: LabelPosition\n): string => {\n const positions: Record<string, string> = {\n \"horizontal-top\":\n \"data-[orientation=horizontal]:bottom-full data-[orientation=horizontal]:left-1/2 data-[orientation=horizontal]:-translate-x-1/2 data-[orientation=horizontal]:-translate-y-1/2\",\n \"horizontal-bottom\":\n \"data-[orientation=horizontal]:top-full data-[orientation=horizontal]:left-1/2 data-[orientation=horizontal]:-translate-x-1/2 data-[orientation=horizontal]:translate-y-1/2\",\n \"horizontal-left\":\n \"data-[orientation=horizontal]:top-1/2 data-[orientation=horizontal]:right-full data-[orientation=horizontal]:-translate-y-1/2 data-[orientation=horizontal]:-translate-x-1/2\",\n \"horizontal-right\":\n \"data-[orientation=horizontal]:top-1/2 data-[orientation=horizontal]:left-full data-[orientation=horizontal]:-translate-y-1/2 data-[orientation=horizontal]:translate-x-1/2\",\n \"vertical-left\":\n \"data-[orientation=vertical]:right-full data-[orientation=vertical]:top-1/2 data-[orientation=vertical]:-translate-x-1/2 data-[orientation=vertical]:-translate-y-1/2\",\n \"vertical-right\":\n \"data-[orientation=vertical]:left-full data-[orientation=vertical]:top-1/2 data-[orientation=vertical]:translate-x-1/2 data-[orientation=vertical]:-translate-y-1/2\",\n \"vertical-top\":\n \"data-[orientation=vertical]:bottom-full data-[orientation=vertical]:left-1/2 data-[orientation=vertical]:-translate-x-1/2 data-[orientation=vertical]:-translate-y-1/2\",\n \"vertical-bottom\":\n \"data-[orientation=vertical]:top-full data-[orientation=vertical]:left-1/2 data-[orientation=vertical]:-translate-x-1/2 data-[orientation=vertical]:translate-y-1/2\",\n };\n\n return positions[`${orientation}-${position}`];\n};\n\nconst Slider = React.forwardRef<HTMLSpanElement, SliderProps>(\n (\n {\n className,\n color = \"primary\",\n size = \"md\",\n showLabel = false,\n labelArrow = false,\n labelAnimation = \"none\",\n labelFormatter = (value) => `${value}`,\n labelPosition = \"top\",\n labelColor,\n labelTextColor,\n labelArrowColor,\n sliderColor,\n thumbBorderColor,\n defaultValue,\n value,\n min = 0,\n max = 100,\n ...props\n },\n ref\n ) => {\n const _values = React.useMemo(\n () =>\n Array.isArray(value)\n ? value\n : Array.isArray(defaultValue)\n ? defaultValue\n : [min, max],\n [value, defaultValue, min, max]\n );\n\n // State for hover detection\n const [isHovered, setIsHovered] = React.useState(false);\n React.useEffect(() => {\n if (value !== undefined && !Array.isArray(value)) {\n console.error(\n \"[Slider] value prop must be an array of numbers, e.g., [50] or [25, 75]\"\n );\n }\n if (defaultValue !== undefined && !Array.isArray(defaultValue)) {\n console.error(\n \"[Slider] defaultValue prop must be an array of numbers, e.g., [50] or [25, 75]\"\n );\n }\n }, [value, defaultValue]);\n\n const orientation = props.orientation || \"horizontal\";\n\n // For spec animation - track thumb position and velocity\n const thumbPosition = useMotionValue(0);\n const thumbVelocity = useMotionValue(0);\n const prevThumbPosition = React.useRef(0);\n\n // Spring physics for label following effect - more dramatic\n const springConfig = { stiffness: 150, damping: 15, mass: 1 };\n const labelOffset = useSpring(0, springConfig);\n const labelRotate = useSpring(0, springConfig);\n\n // Track value changes to calculate velocity\n React.useEffect(() => {\n if (labelAnimation === \"spec\" && _values.length > 0) {\n const currentPos = _values[0];\n const velocity = currentPos - prevThumbPosition.current;\n\n // Cap velocity to prevent large jumps (e.g., on click or initial load)\n const maxVelocity = 5; // Maximum velocity threshold\n const cappedVelocity = Math.max(\n -maxVelocity,\n Math.min(maxVelocity, velocity)\n );\n\n // Update velocity and position\n thumbVelocity.set(cappedVelocity);\n thumbPosition.set(currentPos);\n\n // Calculate offset and rotation based on capped velocity\n // Negative velocity (moving left) -> positive offset (label lags behind to the right)\n const offsetAmount = -cappedVelocity * 12;\n const rotateAmount = -cappedVelocity * 20;\n\n labelOffset.set(offsetAmount);\n labelRotate.set(rotateAmount);\n\n // Reset to center when stopped\n setTimeout(() => {\n labelOffset.set(0);\n labelRotate.set(0);\n }, 100);\n\n prevThumbPosition.current = currentPos;\n }\n }, [\n _values,\n labelAnimation,\n thumbVelocity,\n thumbPosition,\n labelOffset,\n labelRotate,\n ]);\n\n // Memoized computed values\n const sliderColorClass = useMemo(() => {\n if (sliderColor || thumbBorderColor) {\n return {\n range: sliderColor || \"bg-primary\",\n thumb: thumbBorderColor || \"border-primary/50\",\n };\n }\n const config = COLOR_CONFIG[color];\n return {\n range: config.range,\n thumb: config.thumb,\n };\n }, [color, sliderColor, thumbBorderColor]);\n\n const sliderSizeClass = useMemo(() => SIZE_CONFIG[size], [size]);\n\n const labelColorClass = useMemo(() => {\n if (labelColor || labelTextColor) {\n return cn(labelColor, labelTextColor);\n }\n\n const config = COLOR_CONFIG[color];\n const direction = getArrowDirection(orientation, labelPosition);\n const arrowColor = getArrowColorClass(color, direction);\n\n if (color === \"glass\") {\n return `${config.labelBg} ${config.labelText} backdrop-blur-sm shadow-lg [&>div.arrow]:${arrowColor}`;\n }\n\n return `${config.labelBg} ${config.labelText} [&>div.arrow]:${arrowColor}`;\n }, [color, labelPosition, orientation, labelColor, labelTextColor]);\n\n const arrowColorClass = useMemo(() => {\n if (labelArrowColor) return labelArrowColor;\n const direction = getArrowDirection(orientation, labelPosition);\n return getArrowColorClass(color, direction);\n }, [color, labelPosition, orientation, labelArrowColor]);\n\n const labelVisibilityClass = useMemo(() => {\n if (showLabel === \"hover\") return \"scale-0 group-hover:scale-100\";\n if (showLabel === \"always\") return \"scale-100\";\n return \"hidden\";\n }, [showLabel]);\n\n const labelPositionClass = useMemo(\n () => getLabelPositionClasses(orientation, labelPosition),\n [labelPosition, orientation]\n );\n\n const labelPositionClassSpec = useMemo(\n () => getSpecLabelPositionClass(orientation, labelPosition),\n [labelPosition, orientation]\n );\n\n // Render label based on animation type\n const renderLabel = React.useCallback(\n (index: number) => {\n if (labelAnimation === \"spec\") {\n return (\n <motion.div\n className={cn(\n \"pointer-events-none absolute z-50 flex flex-col items-center justify-center rounded-md px-3 py-1.5 text-xs shadow-xl\",\n labelPositionClassSpec,\n labelColor && labelColor,\n labelTextColor && labelTextColor,\n !labelColor && !labelTextColor && labelColorClass\n )}\n data-orientation={orientation}\n initial={\n showLabel === \"always\"\n ? { opacity: 1, y: -5, scale: 1 }\n : { opacity: 0, y: 20, scale: 0 }\n }\n animate={\n (isHovered && showLabel === \"hover\") || showLabel === \"always\"\n ? {\n opacity: 1,\n y: -5,\n scale: 1,\n }\n : {\n opacity: 0,\n y: 20,\n scale: 0,\n }\n }\n transition={{\n type: \"tween\",\n duration: 0.2,\n ease: \"easeOut\",\n }}\n style={{\n x: labelOffset,\n rotate: labelRotate,\n whiteSpace: \"nowrap\",\n }}\n >\n <div className=\"relative z-1\">\n <NumberFlow\n value={_values[index]}\n format={{ notation: \"standard\" }}\n isolate\n />\n </div>\n {labelArrow && (\n <div\n className={cn(\n \"arrow absolute border-transparent\",\n labelPositionClass.arrow,\n arrowColorClass\n )}\n />\n )}\n </motion.div>\n );\n }\n\n // Standard or number-flow animation\n return (\n <Badge\n size=\"lg\"\n color={\n labelColor || labelTextColor\n ? \"custom\"\n : color === \"glass\"\n ? \"custom\"\n : color === \"muted\"\n ? \"muted\"\n : color === \"accent\"\n ? \"accent\"\n : color\n }\n variant=\"solid\"\n className={cn(\n \"transition-transform absolute px-3 rounded-md\",\n labelPositionClass.badge,\n labelVisibilityClass,\n labelColor && labelColor,\n labelTextColor && labelTextColor,\n !labelColor &&\n !labelTextColor &&\n color === \"glass\" &&\n \"bg-white/15 text-foreground backdrop-blur-sm shadow-lg [&>div.arrow]:border-t-white/15\"\n )}\n >\n {labelAnimation === \"number-flow\" ? (\n <NumberFlow\n value={_values[index]}\n format={{ notation: \"standard\" }}\n isolate\n />\n ) : (\n <span>{labelFormatter(_values[index])}</span>\n )}\n {labelArrow && (\n <div\n className={cn(\n \"arrow absolute border-transparent\",\n labelPositionClass.arrow,\n arrowColorClass\n )}\n />\n )}\n </Badge>\n );\n },\n [\n labelAnimation,\n labelPositionClassSpec,\n labelColor,\n labelTextColor,\n labelColorClass,\n orientation,\n showLabel,\n labelOffset,\n labelRotate,\n labelFormatter,\n _values,\n color,\n labelPositionClass,\n labelVisibilityClass,\n labelArrow,\n arrowColorClass,\n isHovered,\n ]\n );\n\n // Render without label - use custom slider with color\n if (!showLabel) {\n return (\n <SliderPrimitive.Root\n ref={ref}\n data-slot=\"slider\"\n defaultValue={defaultValue}\n value={value}\n min={min}\n max={max}\n className={cn(\n \"relative flex w-full touch-none items-center select-none data-disabled:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col\",\n className\n )}\n {...props}\n >\n <SliderPrimitive.Track\n data-slot=\"slider-track\"\n className={cn(\n \"bg-muted relative grow overflow-hidden rounded-full data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full\",\n sliderSizeClass.track\n )}\n >\n <SliderPrimitive.Range\n data-slot=\"slider-range\"\n className={cn(\n \"absolute data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full\",\n sliderColorClass.range\n )}\n />\n </SliderPrimitive.Track>\n {Array.from({ length: _values.length }, (_, index) => (\n <SliderPrimitive.Thumb\n key={index}\n data-slot=\"slider-thumb\"\n className={cn(\n \"block shrink-0 rounded-full border bg-white shadow-sm transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50 ring-ring/50\",\n sliderColorClass.thumb,\n sliderSizeClass.thumb\n )}\n />\n ))}\n </SliderPrimitive.Root>\n );\n }\n\n // Render with label (standard, number-flow, or spec animation)\n return (\n <SliderPrimitive.Root\n ref={ref}\n data-slot=\"slider\"\n defaultValue={defaultValue}\n value={value}\n min={min}\n max={max}\n className={cn(\n \"relative flex w-full touch-none items-center select-none data-disabled:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col\",\n className\n )}\n {...props}\n >\n <SliderPrimitive.Track\n data-slot=\"slider-track\"\n className={cn(\n \"bg-muted relative grow overflow-hidden rounded-full data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full\",\n sliderSizeClass.track\n )}\n >\n <SliderPrimitive.Range\n data-slot=\"slider-range\"\n className={cn(\n \"absolute data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full\",\n sliderColorClass.range\n )}\n />\n </SliderPrimitive.Track>\n {Array.from({ length: _values.length }, (_, index) => (\n <SliderPrimitive.Thumb\n key={index}\n data-slot=\"slider-thumb\"\n className={cn(\n \"group block shrink-0 rounded-full border bg-white shadow-sm transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50 ring-ring/50\",\n sliderColorClass.thumb,\n sliderSizeClass.thumb\n )}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n {renderLabel(index)}\n </SliderPrimitive.Thumb>\n ))}\n </SliderPrimitive.Root>\n );\n }\n);\n\nSlider.displayName = \"Slider\";\n\nexport default Slider;\n"],"names":["COLOR_CONFIG","SIZE_CONFIG","getArrowDirection","orientation","position","getArrowColorClass","color","direction","prefix","getLabelPositionClasses","getSpecLabelPositionClass","Slider","React","className","size","showLabel","labelArrow","labelAnimation","labelFormatter","value","labelPosition","labelColor","labelTextColor","labelArrowColor","sliderColor","thumbBorderColor","defaultValue","min","max","props","ref","_values","isHovered","setIsHovered","thumbPosition","useMotionValue","thumbVelocity","prevThumbPosition","springConfig","labelOffset","useSpring","labelRotate","currentPos","velocity","maxVelocity","cappedVelocity","offsetAmount","rotateAmount","sliderColorClass","useMemo","config","sliderSizeClass","labelColorClass","cn","arrowColor","arrowColorClass","labelVisibilityClass","labelPositionClass","labelPositionClassSpec","renderLabel","index","jsxs","motion","jsx","NumberFlow","Badge","SliderPrimitive","_"],"mappings":"gnBAqCMA,EAQF,CACF,QAAS,CACP,MAAO,aACP,MAAO,oBACP,QAAS,aACT,UAAW,yBAAA,EAEb,UAAW,CACT,MAAO,eACP,MAAO,sBACP,QAAS,eACT,UAAW,2BAAA,EAEb,QAAS,CACP,MAAO,aACP,MAAO,oBACP,QAAS,aACT,UAAW,yBAAA,EAEb,QAAS,CACP,MAAO,aACP,MAAO,oBACP,QAAS,aACT,UAAW,yBAAA,EAEb,MAAO,CACL,MAAO,WACP,MAAO,kBACP,QAAS,WACT,UAAW,uBAAA,EAEb,MAAO,CACL,MAAO,+BACP,MAAO,mCACP,QAAS,cACT,UAAW,iBAAA,EAEb,MAAO,CACL,MAAO,sBACP,MAAO,6BACP,QAAS,WACT,UAAW,uBAAA,EAEb,OAAQ,CACN,MAAO,YACP,MAAO,mBACP,QAAS,YACT,UAAW,wBAAA,CAEf,EAGMC,GAMF,CACF,GAAI,CACF,MAAO,oEACP,MAAO,QAAA,EAET,GAAI,CACF,MACE,wEACF,MAAO,QAAA,EAET,GAAI,CACF,MAAO,oEACP,MAAO,QAAA,CAEX,EAGMC,EAAoB,CACxBC,EACAC,IAEID,IAAgB,aACdC,IAAa,SAAiB,SAC9BA,IAAa,OAAe,OAC5BA,IAAa,QAAgB,QAC1B,MAGLA,IAAa,QAAgB,QAC7BA,IAAa,MAAc,MAC3BA,IAAa,SAAiB,SAC3B,OAIHC,EAAqB,CACzBC,EACAC,IACW,CAEX,MAAMC,EACJD,IAAc,MACV,IACAA,IAAc,SACZ,IACAA,IAAc,OACZ,IACA,IAYV,MAX8C,CAC5C,QAAS,UAAUC,CAAM,WACzB,UAAW,UAAUA,CAAM,aAC3B,QAAS,UAAUA,CAAM,WACzB,QAAS,UAAUA,CAAM,WACzB,MAAO,UAAUA,CAAM,SACvB,MAAO,UAAUA,CAAM,YACvB,MAAO,UAAUA,CAAM,SACvB,OAAQ,UAAUA,CAAM,SAAA,EAGVF,CAAK,CACvB,EAGMG,GAA0B,CAC9BN,EACAC,KAEoE,CAClE,iBAAkB,CAChB,MAAO,yDACP,MACE,sIAAA,EAEJ,oBAAqB,CACnB,MAAO,qDACP,MACE,yIAAA,EAEJ,kBAAmB,CACjB,MAAO,uDACP,MACE,sIAAA,EAEJ,mBAAoB,CAClB,MAAO,qDACP,MACE,uIAAA,EAEJ,gBAAiB,CACf,MAAO,uDACP,MACE,sIAAA,EAEJ,iBAAkB,CAChB,MAAO,qDACP,MACE,uIAAA,EAEJ,eAAgB,CACd,MAAO,yDACP,MACE,sIAAA,EAEJ,kBAAmB,CACjB,MAAO,qDACP,MACE,yIAAA,CACJ,GAGe,GAAGD,CAAW,IAAIC,CAAQ,EAAE,EAIzCM,GAA4B,CAChCP,EACAC,KAE0C,CACxC,iBACE,iLACF,oBACE,6KACF,kBACE,+KACF,mBACE,6KACF,gBACE,uKACF,iBACE,qKACF,eACE,yKACF,kBACE,oKAAA,GAGa,GAAGD,CAAW,IAAIC,CAAQ,EAAE,EAGzCO,EAASC,EAAM,WACnB,CACE,CACE,UAAAC,EACA,MAAAP,EAAQ,UACR,KAAAQ,EAAO,KACP,UAAAC,EAAY,GACZ,WAAAC,EAAa,GACb,eAAAC,EAAiB,OACjB,eAAAC,EAAkBC,GAAU,GAAGA,CAAK,GACpC,cAAAC,EAAgB,MAChB,WAAAC,EACA,eAAAC,EACA,gBAAAC,EACA,YAAAC,EACA,iBAAAC,EACA,aAAAC,EACA,MAAAP,EACA,IAAAQ,EAAM,EACN,IAAAC,EAAM,IACN,GAAGC,CAAA,EAELC,IACG,CACH,MAAMC,EAAUnB,EAAM,QACpB,IACE,MAAM,QAAQO,CAAK,EACfA,EACA,MAAM,QAAQO,CAAY,EACxBA,EACA,CAACC,EAAKC,CAAG,EACjB,CAACT,EAAOO,EAAcC,EAAKC,CAAG,CAAA,EAI1B,CAACI,EAAWC,CAAY,EAAIrB,EAAM,SAAS,EAAK,EACtDA,EAAM,UAAU,IAAM,CAChBO,IAAU,QAAa,CAAC,MAAM,QAAQA,CAAK,GAC7C,QAAQ,MACN,yEAAA,EAGAO,IAAiB,QAAa,CAAC,MAAM,QAAQA,CAAY,GAC3D,QAAQ,MACN,gFAAA,CAGN,EAAG,CAACP,EAAOO,CAAY,CAAC,EAExB,MAAMvB,EAAc0B,EAAM,aAAe,aAGnCK,EAAgBC,EAAAA,eAAe,CAAC,EAChCC,EAAgBD,EAAAA,eAAe,CAAC,EAChCE,EAAoBzB,EAAM,OAAO,CAAC,EAGlC0B,EAAe,CAAE,UAAW,IAAK,QAAS,GAAI,KAAM,CAAA,EACpDC,EAAcC,EAAAA,UAAU,EAAGF,CAAY,EACvCG,EAAcD,EAAAA,UAAU,EAAGF,CAAY,EAG7C1B,EAAM,UAAU,IAAM,CACpB,GAAIK,IAAmB,QAAUc,EAAQ,OAAS,EAAG,CACnD,MAAMW,EAAaX,EAAQ,CAAC,EACtBY,EAAWD,EAAaL,EAAkB,QAG1CO,EAAc,EACdC,EAAiB,KAAK,IAC1B,CAACD,EACD,KAAK,IAAIA,EAAaD,CAAQ,CAAA,EAIhCP,EAAc,IAAIS,CAAc,EAChCX,EAAc,IAAIQ,CAAU,EAI5B,MAAMI,EAAe,CAACD,EAAiB,GACjCE,EAAe,CAACF,EAAiB,GAEvCN,EAAY,IAAIO,CAAY,EAC5BL,EAAY,IAAIM,CAAY,EAG5B,WAAW,IAAM,CACfR,EAAY,IAAI,CAAC,EACjBE,EAAY,IAAI,CAAC,CACnB,EAAG,GAAG,EAENJ,EAAkB,QAAUK,CAC9B,CACF,EAAG,CACDX,EACAd,EACAmB,EACAF,EACAK,EACAE,CAAA,CACD,EAGD,MAAMO,EAAmBC,EAAAA,QAAQ,IAAM,CACrC,GAAIzB,GAAeC,EACjB,MAAO,CACL,MAAOD,GAAe,aACtB,MAAOC,GAAoB,mBAAA,EAG/B,MAAMyB,EAASlD,EAAaM,CAAK,EACjC,MAAO,CACL,MAAO4C,EAAO,MACd,MAAOA,EAAO,KAAA,CAElB,EAAG,CAAC5C,EAAOkB,EAAaC,CAAgB,CAAC,EAEnC0B,EAAkBF,EAAAA,QAAQ,IAAMhD,GAAYa,CAAI,EAAG,CAACA,CAAI,CAAC,EAEzDsC,EAAkBH,EAAAA,QAAQ,IAAM,CACpC,GAAI5B,GAAcC,EAChB,OAAO+B,EAAAA,GAAGhC,EAAYC,CAAc,EAGtC,MAAM4B,EAASlD,EAAaM,CAAK,EAC3BC,EAAYL,EAAkBC,EAAaiB,CAAa,EACxDkC,EAAajD,EAAmBC,EAAOC,CAAS,EAEtD,OAAID,IAAU,QACL,GAAG4C,EAAO,OAAO,IAAIA,EAAO,SAAS,6CAA6CI,CAAU,GAG9F,GAAGJ,EAAO,OAAO,IAAIA,EAAO,SAAS,kBAAkBI,CAAU,EAC1E,EAAG,CAAChD,EAAOc,EAAejB,EAAakB,EAAYC,CAAc,CAAC,EAE5DiC,EAAkBN,EAAAA,QAAQ,IAAM,CACpC,GAAI1B,EAAiB,OAAOA,EAC5B,MAAMhB,EAAYL,EAAkBC,EAAaiB,CAAa,EAC9D,OAAOf,EAAmBC,EAAOC,CAAS,CAC5C,EAAG,CAACD,EAAOc,EAAejB,EAAaoB,CAAe,CAAC,EAEjDiC,EAAuBP,EAAAA,QAAQ,IAC/BlC,IAAc,QAAgB,gCAC9BA,IAAc,SAAiB,YAC5B,SACN,CAACA,CAAS,CAAC,EAER0C,EAAqBR,EAAAA,QACzB,IAAMxC,GAAwBN,EAAaiB,CAAa,EACxD,CAACA,EAAejB,CAAW,CAAA,EAGvBuD,EAAyBT,EAAAA,QAC7B,IAAMvC,GAA0BP,EAAaiB,CAAa,EAC1D,CAACA,EAAejB,CAAW,CAAA,EAIvBwD,EAAc/C,EAAM,YACvBgD,GACK3C,IAAmB,OAEnB4C,EAAAA,KAACC,EAAAA,OAAO,IAAP,CACC,UAAWT,EAAAA,GACT,uHACAK,EACArC,GAAcA,EACdC,GAAkBA,EAClB,CAACD,GAAc,CAACC,GAAkB8B,CAAA,EAEpC,mBAAkBjD,EAClB,QACEY,IAAc,SACV,CAAE,QAAS,EAAG,EAAG,GAAI,MAAO,CAAA,EAC5B,CAAE,QAAS,EAAG,EAAG,GAAI,MAAO,CAAA,EAElC,QACGiB,GAAajB,IAAc,SAAYA,IAAc,SAClD,CACE,QAAS,EACT,EAAG,GACH,MAAO,CAAA,EAET,CACE,QAAS,EACT,EAAG,GACH,MAAO,CAAA,EAGf,WAAY,CACV,KAAM,QACN,SAAU,GACV,KAAM,SAAA,EAER,MAAO,CACLwB,EACA,OAAQE,EACR,WAAY,QAAA,EAGd,SAAA,CAAAsB,EAAAA,IAAC,MAAA,CAAI,UAAU,eACb,SAAAA,EAAAA,IAACC,EAAA,CACC,MAAOjC,EAAQ6B,CAAK,EACpB,OAAQ,CAAE,SAAU,UAAA,EACpB,QAAO,EAAA,CAAA,EAEX,EACC5C,GACC+C,EAAAA,IAAC,MAAA,CACC,UAAWV,EAAAA,GACT,oCACAI,EAAmB,MACnBF,CAAA,CACF,CAAA,CACF,CAAA,CAAA,EAQNM,EAAAA,KAACI,GAAAA,QAAA,CACC,KAAK,KACL,MACE5C,GAAcC,GAEVhB,IAAU,QADV,SAGEA,IAAU,QACR,QACAA,IAAU,SACR,SACAA,EAEZ,QAAQ,QACR,UAAW+C,EAAAA,GACT,gDACAI,EAAmB,MACnBD,EACAnC,GAAcA,EACdC,GAAkBA,EAClB,CAACD,GACC,CAACC,GACDhB,IAAU,SACV,wFAAA,EAGH,SAAA,CAAAW,IAAmB,cAClB8C,EAAAA,IAACC,EAAA,CACC,MAAOjC,EAAQ6B,CAAK,EACpB,OAAQ,CAAE,SAAU,UAAA,EACpB,QAAO,EAAA,CAAA,EAGTG,EAAAA,IAAC,OAAA,CAAM,WAAehC,EAAQ6B,CAAK,CAAC,EAAE,EAEvC5C,GACC+C,EAAAA,IAAC,MAAA,CACC,UAAWV,EAAAA,GACT,oCACAI,EAAmB,MACnBF,CAAA,CACF,CAAA,CACF,CAAA,CAAA,EAKR,CACEtC,EACAyC,EACArC,EACAC,EACA8B,EACAjD,EACAY,EACAwB,EACAE,EACAvB,EACAa,EACAzB,EACAmD,EACAD,EACAxC,EACAuC,EACAvB,CAAA,CACF,EAIF,OAAKjB,EA+CH8C,EAAAA,KAACK,EAAgB,KAAhB,CACC,IAAApC,EACA,YAAU,SACV,aAAAJ,EACA,MAAAP,EACA,IAAAQ,EACA,IAAAC,EACA,UAAWyB,EAAAA,GACT,oOACAxC,CAAA,EAED,GAAGgB,EAEJ,SAAA,CAAAkC,EAAAA,IAACG,EAAgB,MAAhB,CACC,YAAU,eACV,UAAWb,EAAAA,GACT,8HACAF,EAAgB,KAAA,EAGlB,SAAAY,EAAAA,IAACG,EAAgB,MAAhB,CACC,YAAU,eACV,UAAWb,EAAAA,GACT,mFACAL,EAAiB,KAAA,CACnB,CAAA,CACF,CAAA,EAED,MAAM,KAAK,CAAE,OAAQjB,EAAQ,QAAU,CAACoC,EAAGP,IAC1CG,EAAAA,IAACG,EAAgB,MAAhB,CAEC,YAAU,eACV,UAAWb,EAAAA,GACT,yNACAL,EAAiB,MACjBG,EAAgB,KAAA,EAElB,aAAc,IAAMlB,EAAa,EAAI,EACrC,aAAc,IAAMA,EAAa,EAAK,EAErC,WAAY2B,CAAK,CAAA,EAVbA,CAAA,CAYR,CAAA,CAAA,CAAA,EAvFDC,EAAAA,KAACK,EAAgB,KAAhB,CACC,IAAApC,EACA,YAAU,SACV,aAAAJ,EACA,MAAAP,EACA,IAAAQ,EACA,IAAAC,EACA,UAAWyB,EAAAA,GACT,oOACAxC,CAAA,EAED,GAAGgB,EAEJ,SAAA,CAAAkC,EAAAA,IAACG,EAAgB,MAAhB,CACC,YAAU,eACV,UAAWb,EAAAA,GACT,8HACAF,EAAgB,KAAA,EAGlB,SAAAY,EAAAA,IAACG,EAAgB,MAAhB,CACC,YAAU,eACV,UAAWb,EAAAA,GACT,mFACAL,EAAiB,KAAA,CACnB,CAAA,CACF,CAAA,EAED,MAAM,KAAK,CAAE,OAAQjB,EAAQ,QAAU,CAACoC,EAAGP,IAC1CG,EAAAA,IAACG,EAAgB,MAAhB,CAEC,YAAU,eACV,UAAWb,EAAAA,GACT,mNACAL,EAAiB,MACjBG,EAAgB,KAAA,CAClB,EANKS,CAAA,CAQR,CAAA,CAAA,CAAA,CAoDT,CACF,EAEAjD,EAAO,YAAc"}
|
|
1
|
+
{"version":3,"file":"Slider.cjs","sources":["../../../../src/components/Slider/Slider.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport * as SliderPrimitive from \"@radix-ui/react-slider\";\nimport { cn } from \"@dsui/ui/lib/utils\";\nimport { motion, useMotionValue, useSpring, useTransform } from \"motion/react\";\nimport NumberFlow from \"@number-flow/react\";\nimport type { BasicColor } from \"@/types/variables\";\nimport { Badge } from \"../Badge\";\n\ntype LabelAnimation = \"number-flow\" | \"spec\" | \"none\";\ntype LabelDisplay = false | \"hover\" | \"always\";\ntype SliderColor = BasicColor | \"muted\" | \"accent\";\ntype SliderSize = \"sm\" | \"md\" | \"lg\";\ntype LabelPosition = \"top\" | \"bottom\" | \"left\" | \"right\";\n\nexport type SliderProps = Omit<\n React.ComponentPropsWithoutRef<typeof SliderPrimitive.Root>,\n \"color\" | \"defaultValue\" | \"value\" | \"min\" | \"max\"\n> & {\n color?: SliderColor;\n size?: SliderSize;\n showLabel?: LabelDisplay;\n labelArrow?: boolean;\n labelAnimation?: LabelAnimation;\n labelFormatter?: (value: number) => string;\n labelPosition?: LabelPosition;\n labelColor?: string;\n labelTextColor?: string;\n labelArrowColor?: string;\n sliderColor?: string;\n thumbBorderColor?: string;\n defaultValue?: number[];\n value?: number[];\n min?: number;\n max?: number;\n};\n\n// Color mapping configuration\nconst COLOR_CONFIG: Record<\n SliderColor,\n {\n range: string;\n thumb: string;\n labelBg: string;\n labelText: string;\n }\n> = {\n primary: {\n range: \"bg-primary\",\n thumb: \"border-primary/50\",\n labelBg: \"bg-primary\",\n labelText: \"text-primary-foreground\",\n },\n secondary: {\n range: \"bg-secondary\",\n thumb: \"border-secondary/50\",\n labelBg: \"bg-secondary\",\n labelText: \"text-secondary-foreground\",\n },\n success: {\n range: \"bg-success\",\n thumb: \"border-success/50\",\n labelBg: \"bg-success\",\n labelText: \"text-success-foreground\",\n },\n warning: {\n range: \"bg-warning\",\n thumb: \"border-warning/50\",\n labelBg: \"bg-warning\",\n labelText: \"text-warning-foreground\",\n },\n error: {\n range: \"bg-error\",\n thumb: \"border-error/50\",\n labelBg: \"bg-error\",\n labelText: \"text-error-foreground\",\n },\n glass: {\n range: \"bg-white/30 backdrop-blur-sm\",\n thumb: \"border-white/30 backdrop-blur-sm\",\n labelBg: \"bg-white/15\",\n labelText: \"text-foreground\",\n },\n muted: {\n range: \"bg-muted-foreground\",\n thumb: \"border-muted-foreground/50\",\n labelBg: \"bg-muted\",\n labelText: \"text-muted-foreground\",\n },\n accent: {\n range: \"bg-accent\",\n thumb: \"border-accent/50\",\n labelBg: \"bg-accent\",\n labelText: \"text-accent-foreground\",\n },\n};\n\n// Size configuration\nconst SIZE_CONFIG: Record<\n SliderSize,\n {\n track: string;\n thumb: string;\n }\n> = {\n sm: {\n track: \"data-[orientation=horizontal]:h-1 data-[orientation=vertical]:w-1\",\n thumb: \"size-3\",\n },\n md: {\n track:\n \"data-[orientation=horizontal]:h-1.5 data-[orientation=vertical]:w-1.5\",\n thumb: \"size-4\",\n },\n lg: {\n track: \"data-[orientation=horizontal]:h-2 data-[orientation=vertical]:w-2\",\n thumb: \"size-5\",\n },\n};\n\n// Helper to get arrow direction based on orientation and position\nconst getArrowDirection = (\n orientation: \"horizontal\" | \"vertical\",\n position: LabelPosition\n): \"top\" | \"bottom\" | \"left\" | \"right\" => {\n if (orientation === \"horizontal\") {\n if (position === \"bottom\") return \"bottom\";\n if (position === \"left\") return \"left\";\n if (position === \"right\") return \"right\";\n return \"top\";\n }\n // vertical\n if (position === \"right\") return \"right\";\n if (position === \"top\") return \"top\";\n if (position === \"bottom\") return \"bottom\";\n return \"left\";\n};\n\n// Helper to get arrow color class\nconst getArrowColorClass = (\n color: SliderColor,\n direction: \"top\" | \"bottom\" | \"left\" | \"right\"\n): string => {\n // Generate full border class (e.g., \"border-t-primary\")\n const prefix =\n direction === \"top\"\n ? \"t\"\n : direction === \"bottom\"\n ? \"b\"\n : direction === \"left\"\n ? \"l\"\n : \"r\";\n const colorMap: Record<SliderColor, string> = {\n primary: `border-${prefix}-primary`,\n secondary: `border-${prefix}-secondary`,\n success: `border-${prefix}-success`,\n warning: `border-${prefix}-warning`,\n error: `border-${prefix}-error`,\n glass: `border-${prefix}-white/15`,\n muted: `border-${prefix}-muted`,\n accent: `border-${prefix}-accent`,\n };\n\n return colorMap[color];\n};\n\n// Helper to get label position classes\nconst getLabelPositionClasses = (\n orientation: \"horizontal\" | \"vertical\",\n position: LabelPosition\n): { badge: string; arrow: string } => {\n const positions: Record<string, { badge: string; arrow: string }> = {\n \"horizontal-top\": {\n badge: \"left-1/2 -translate-x-1/2 bottom-full -translate-y-1/2\",\n arrow:\n \"top-full left-1/2 -translate-x-1/2 border-t-[6px] border-l-[6px] border-r-[6px] border-b-0 border-l-transparent border-r-transparent\",\n },\n \"horizontal-bottom\": {\n badge: \"left-1/2 -translate-x-1/2 top-full translate-y-1/2\",\n arrow:\n \"bottom-full left-1/2 -translate-x-1/2 border-b-[6px] border-l-[6px] border-r-[6px] border-t-0 border-l-transparent border-r-transparent\",\n },\n \"horizontal-left\": {\n badge: \"top-1/2 -translate-y-1/2 right-full -translate-x-1/2\",\n arrow:\n \"left-full top-1/2 -translate-y-1/2 border-l-[6px] border-t-[6px] border-b-[6px] border-r-0 border-t-transparent border-b-transparent\",\n },\n \"horizontal-right\": {\n badge: \"top-1/2 -translate-y-1/2 left-full translate-x-1/2\",\n arrow:\n \"right-full top-1/2 -translate-y-1/2 border-r-[6px] border-t-[6px] border-b-[6px] border-l-0 border-t-transparent border-b-transparent\",\n },\n \"vertical-left\": {\n badge: \"top-1/2 -translate-y-1/2 right-full -translate-x-1/2\",\n arrow:\n \"left-full top-1/2 -translate-y-1/2 border-l-[6px] border-t-[6px] border-b-[6px] border-r-0 border-t-transparent border-b-transparent\",\n },\n \"vertical-right\": {\n badge: \"top-1/2 -translate-y-1/2 left-full translate-x-1/2\",\n arrow:\n \"right-full top-1/2 -translate-y-1/2 border-r-[6px] border-t-[6px] border-b-[6px] border-l-0 border-t-transparent border-b-transparent\",\n },\n \"vertical-top\": {\n badge: \"left-1/2 -translate-x-1/2 bottom-full -translate-y-1/2\",\n arrow:\n \"top-full left-1/2 -translate-x-1/2 border-t-[6px] border-l-[6px] border-r-[6px] border-b-0 border-l-transparent border-r-transparent\",\n },\n \"vertical-bottom\": {\n badge: \"left-1/2 -translate-x-1/2 top-full translate-y-1/2\",\n arrow:\n \"bottom-full left-1/2 -translate-x-1/2 border-b-[6px] border-l-[6px] border-r-[6px] border-t-0 border-l-transparent border-r-transparent\",\n },\n };\n\n return positions[`${orientation}-${position}`];\n};\n\n// Helper to get spec label position classes\nconst getSpecLabelPositionClass = (\n orientation: \"horizontal\" | \"vertical\",\n position: LabelPosition\n): string => {\n const positions: Record<string, string> = {\n \"horizontal-top\":\n \"data-[orientation=horizontal]:bottom-full data-[orientation=horizontal]:left-1/2 data-[orientation=horizontal]:-translate-x-1/2 data-[orientation=horizontal]:-translate-y-1/2\",\n \"horizontal-bottom\":\n \"data-[orientation=horizontal]:top-full data-[orientation=horizontal]:left-1/2 data-[orientation=horizontal]:-translate-x-1/2 data-[orientation=horizontal]:translate-y-1/2\",\n \"horizontal-left\":\n \"data-[orientation=horizontal]:top-1/2 data-[orientation=horizontal]:right-full data-[orientation=horizontal]:-translate-y-1/2 data-[orientation=horizontal]:-translate-x-1/2\",\n \"horizontal-right\":\n \"data-[orientation=horizontal]:top-1/2 data-[orientation=horizontal]:left-full data-[orientation=horizontal]:-translate-y-1/2 data-[orientation=horizontal]:translate-x-1/2\",\n \"vertical-left\":\n \"data-[orientation=vertical]:right-full data-[orientation=vertical]:top-1/2 data-[orientation=vertical]:-translate-x-1/2 data-[orientation=vertical]:-translate-y-1/2\",\n \"vertical-right\":\n \"data-[orientation=vertical]:left-full data-[orientation=vertical]:top-1/2 data-[orientation=vertical]:translate-x-1/2 data-[orientation=vertical]:-translate-y-1/2\",\n \"vertical-top\":\n \"data-[orientation=vertical]:bottom-full data-[orientation=vertical]:left-1/2 data-[orientation=vertical]:-translate-x-1/2 data-[orientation=vertical]:-translate-y-1/2\",\n \"vertical-bottom\":\n \"data-[orientation=vertical]:top-full data-[orientation=vertical]:left-1/2 data-[orientation=vertical]:-translate-x-1/2 data-[orientation=vertical]:translate-y-1/2\",\n };\n\n return positions[`${orientation}-${position}`];\n};\n\nconst Slider = React.forwardRef<HTMLSpanElement, SliderProps>(\n (\n {\n className,\n color = \"primary\",\n size = \"md\",\n showLabel = false,\n labelArrow = false,\n labelAnimation = \"none\",\n labelFormatter = (value) => `${value}`,\n labelPosition = \"top\",\n labelColor,\n labelTextColor,\n labelArrowColor,\n sliderColor,\n thumbBorderColor,\n defaultValue,\n value,\n min = 0,\n max = 100,\n ...props\n },\n ref\n ) => {\n const _values = React.useMemo(\n () =>\n Array.isArray(value)\n ? value\n : Array.isArray(defaultValue)\n ? defaultValue\n : [min, max],\n [value, defaultValue, min, max]\n );\n\n // State for hover detection\n const [isHovered, setIsHovered] = React.useState(false);\n React.useEffect(() => {\n if (value !== undefined && !Array.isArray(value)) {\n console.error(\n \"[Slider] value prop must be an array of numbers, e.g., [50] or [25, 75]\"\n );\n }\n if (defaultValue !== undefined && !Array.isArray(defaultValue)) {\n console.error(\n \"[Slider] defaultValue prop must be an array of numbers, e.g., [50] or [25, 75]\"\n );\n }\n }, [value, defaultValue]);\n\n const orientation = props.orientation || \"horizontal\";\n\n // For spec animation - track thumb position and velocity\n const thumbPosition = useMotionValue(0);\n const thumbVelocity = useMotionValue(0);\n const prevThumbPosition = React.useRef(0);\n\n // Spring physics for label following effect - more dramatic\n const springConfig = { stiffness: 150, damping: 15, mass: 1 };\n const labelOffset = useSpring(0, springConfig);\n const labelRotate = useSpring(0, springConfig);\n\n // Track value changes to calculate velocity\n React.useEffect(() => {\n if (labelAnimation === \"spec\" && _values.length > 0) {\n const currentPos = _values[0];\n const velocity = currentPos - prevThumbPosition.current;\n\n // Cap velocity to prevent large jumps (e.g., on click or initial load)\n const maxVelocity = 5; // Maximum velocity threshold\n const cappedVelocity = Math.max(\n -maxVelocity,\n Math.min(maxVelocity, velocity)\n );\n\n // Update velocity and position\n thumbVelocity.set(cappedVelocity);\n thumbPosition.set(currentPos);\n\n // Calculate offset and rotation based on capped velocity\n // Negative velocity (moving left) -> positive offset (label lags behind to the right)\n const offsetAmount = -cappedVelocity * 12;\n const rotateAmount = -cappedVelocity * 20;\n\n labelOffset.set(offsetAmount);\n labelRotate.set(rotateAmount);\n\n // Reset to center when stopped\n setTimeout(() => {\n labelOffset.set(0);\n labelRotate.set(0);\n }, 100);\n\n prevThumbPosition.current = currentPos;\n }\n }, [\n _values,\n labelAnimation,\n thumbVelocity,\n thumbPosition,\n labelOffset,\n labelRotate,\n ]);\n\n // Memoized computed values\n const sliderColorClass = useMemo(() => {\n if (sliderColor || thumbBorderColor) {\n return {\n range: sliderColor || \"bg-primary\",\n thumb: thumbBorderColor || \"border-primary/50\",\n };\n }\n const config = COLOR_CONFIG[color];\n return {\n range: config.range,\n thumb: config.thumb,\n };\n }, [color, sliderColor, thumbBorderColor]);\n\n const sliderSizeClass = useMemo(() => SIZE_CONFIG[size], [size]);\n\n const labelColorClass = useMemo(() => {\n if (labelColor || labelTextColor) {\n return cn(labelColor, labelTextColor);\n }\n\n const config = COLOR_CONFIG[color];\n const direction = getArrowDirection(orientation, labelPosition);\n const arrowColor = getArrowColorClass(color, direction);\n\n if (color === \"glass\") {\n return `${config.labelBg} ${config.labelText} backdrop-blur-sm shadow-lg [&>div.arrow]:${arrowColor}`;\n }\n\n return `${config.labelBg} ${config.labelText} [&>div.arrow]:${arrowColor}`;\n }, [color, labelPosition, orientation, labelColor, labelTextColor]);\n\n const arrowColorClass = useMemo(() => {\n if (labelArrowColor) return labelArrowColor;\n const direction = getArrowDirection(orientation, labelPosition);\n return getArrowColorClass(color, direction);\n }, [color, labelPosition, orientation, labelArrowColor]);\n\n const labelVisibilityClass = useMemo(() => {\n if (showLabel === \"hover\") return \"scale-0 group-hover:scale-100\";\n if (showLabel === \"always\") return \"scale-100\";\n return \"hidden\";\n }, [showLabel]);\n\n const labelPositionClass = useMemo(\n () => getLabelPositionClasses(orientation, labelPosition),\n [labelPosition, orientation]\n );\n\n const labelPositionClassSpec = useMemo(\n () => getSpecLabelPositionClass(orientation, labelPosition),\n [labelPosition, orientation]\n );\n\n // Render label based on animation type\n const renderLabel = React.useCallback(\n (index: number) => {\n if (labelAnimation === \"spec\") {\n return (\n <motion.div\n className={cn(\n \"ds:pointer-events-none ds:absolute ds:z-50 ds:flex ds:flex-col ds:items-center ds:justify-center ds:rounded-md ds:px-3 ds:py-1.5 ds:text-xs ds:shadow-xl\",\n labelPositionClassSpec,\n labelColor && labelColor,\n labelTextColor && labelTextColor,\n !labelColor && !labelTextColor && labelColorClass\n )}\n data-orientation={orientation}\n initial={\n showLabel === \"always\"\n ? { opacity: 1, y: -5, scale: 1 }\n : { opacity: 0, y: 20, scale: 0 }\n }\n animate={\n (isHovered && showLabel === \"hover\") || showLabel === \"always\"\n ? {\n opacity: 1,\n y: -5,\n scale: 1,\n }\n : {\n opacity: 0,\n y: 20,\n scale: 0,\n }\n }\n transition={{\n type: \"tween\",\n duration: 0.2,\n ease: \"easeOut\",\n }}\n style={{\n x: labelOffset,\n rotate: labelRotate,\n whiteSpace: \"nowrap\",\n }}\n >\n <div className=\"ds:relative ds:z-1\">\n <NumberFlow\n value={_values[index]}\n format={{ notation: \"standard\" }}\n isolate\n />\n </div>\n {labelArrow && (\n <div\n className={cn(\n \"ds:arrow ds:absolute ds:border-transparent\",\n labelPositionClass.arrow,\n arrowColorClass\n )}\n />\n )}\n </motion.div>\n );\n }\n\n // Standard or number-flow animation\n return (\n <Badge\n size=\"lg\"\n color={\n labelColor || labelTextColor\n ? \"custom\"\n : color === \"glass\"\n ? \"custom\"\n : color === \"muted\"\n ? \"muted\"\n : color === \"accent\"\n ? \"accent\"\n : color\n }\n variant=\"solid\"\n className={cn(\n \"ds:transition-transform ds:absolute ds:px-3 ds:rounded-md\",\n labelPositionClass.badge,\n labelVisibilityClass,\n labelColor && labelColor,\n labelTextColor && labelTextColor,\n !labelColor &&\n !labelTextColor &&\n color === \"glass\" &&\n \"ds:bg-white/15 ds:text-foreground ds:backdrop-blur-sm ds:shadow-lg ds:[&>div.arrow]:border-t-white/15\"\n )}\n >\n {labelAnimation === \"number-flow\" ? (\n <NumberFlow\n value={_values[index]}\n format={{ notation: \"standard\" }}\n isolate\n />\n ) : (\n <span>{labelFormatter(_values[index])}</span>\n )}\n {labelArrow && (\n <div\n className={cn(\n \"ds:arrow ds:absolute ds:border-transparent\",\n labelPositionClass.arrow,\n arrowColorClass\n )}\n />\n )}\n </Badge>\n );\n },\n [\n labelAnimation,\n labelPositionClassSpec,\n labelColor,\n labelTextColor,\n labelColorClass,\n orientation,\n showLabel,\n labelOffset,\n labelRotate,\n labelFormatter,\n _values,\n color,\n labelPositionClass,\n labelVisibilityClass,\n labelArrow,\n arrowColorClass,\n isHovered,\n ]\n );\n\n // Render without label - use custom slider with color\n if (!showLabel) {\n return (\n <SliderPrimitive.Root\n ref={ref}\n data-slot=\"slider\"\n defaultValue={defaultValue}\n value={value}\n min={min}\n max={max}\n className={cn(\n \"ds:relative ds:flex ds:w-full ds:touch-none ds:items-center ds:select-none ds:data-disabled:opacity-50 ds:data-[orientation=vertical]:h-full ds:data-[orientation=vertical]:min-h-44 ds:data-[orientation=vertical]:w-auto ds:data-[orientation=vertical]:flex-col\",\n className\n )}\n {...props}\n >\n <SliderPrimitive.Track\n data-slot=\"slider-track\"\n className={cn(\n \"ds:bg-muted ds:relative ds:grow ds:overflow-hidden ds:rounded-full ds:data-[orientation=horizontal]:w-full ds:data-[orientation=vertical]:h-full\",\n sliderSizeClass.track\n )}\n >\n <SliderPrimitive.Range\n data-slot=\"slider-range\"\n className={cn(\n \"ds:absolute ds:data-[orientation=horizontal]:h-full ds:data-[orientation=vertical]:w-full\",\n sliderColorClass.range\n )}\n />\n </SliderPrimitive.Track>\n {Array.from({ length: _values.length }, (_, index) => (\n <SliderPrimitive.Thumb\n key={index}\n data-slot=\"slider-thumb\"\n className={cn(\n \"ds:block ds:shrink-0 ds:rounded-full ds:border ds:bg-white ds:shadow-sm ds:transition-[color,box-shadow] ds:hover:ring-4 ds:focus-visible:ring-4 ds:focus-visible:outline-hidden ds:disabled:pointer-events-none ds:disabled:opacity-50 ds:ring-ring/50\",\n sliderColorClass.thumb,\n sliderSizeClass.thumb\n )}\n />\n ))}\n </SliderPrimitive.Root>\n );\n }\n\n // Render with label (standard, number-flow, or spec animation)\n return (\n <SliderPrimitive.Root\n ref={ref}\n data-slot=\"slider\"\n defaultValue={defaultValue}\n value={value}\n min={min}\n max={max}\n className={cn(\n \"ds:relative ds:flex ds:w-full ds:touch-none ds:items-center ds:select-none ds:data-disabled:opacity-50 ds:data-[orientation=vertical]:h-full ds:data-[orientation=vertical]:min-h-44 ds:data-[orientation=vertical]:w-auto ds:data-[orientation=vertical]:flex-col\",\n className\n )}\n {...props}\n >\n <SliderPrimitive.Track\n data-slot=\"slider-track\"\n className={cn(\n \"ds:bg-muted ds:relative ds:grow ds:overflow-hidden ds:rounded-full ds:data-[orientation=horizontal]:w-full ds:data-[orientation=vertical]:h-full\",\n sliderSizeClass.track\n )}\n >\n <SliderPrimitive.Range\n data-slot=\"slider-range\"\n className={cn(\n \"ds:absolute ds:data-[orientation=horizontal]:h-full ds:data-[orientation=vertical]:w-full\",\n sliderColorClass.range\n )}\n />\n </SliderPrimitive.Track>\n {Array.from({ length: _values.length }, (_, index) => (\n <SliderPrimitive.Thumb\n key={index}\n data-slot=\"slider-thumb\"\n className={cn(\n \"ds:group ds:block ds:shrink-0 ds:rounded-full ds:border ds:bg-white ds:shadow-sm ds:transition-[color,box-shadow] ds:hover:ring-4 ds:focus-visible:ring-4 ds:focus-visible:outline-hidden ds:disabled:pointer-events-none ds:disabled:opacity-50 ds:ring-ring/50\",\n sliderColorClass.thumb,\n sliderSizeClass.thumb\n )}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n {renderLabel(index)}\n </SliderPrimitive.Thumb>\n ))}\n </SliderPrimitive.Root>\n );\n }\n);\n\nSlider.displayName = \"Slider\";\n\nexport default Slider;\n"],"names":["COLOR_CONFIG","SIZE_CONFIG","getArrowDirection","orientation","position","getArrowColorClass","color","direction","prefix","getLabelPositionClasses","getSpecLabelPositionClass","Slider","React","className","size","showLabel","labelArrow","labelAnimation","labelFormatter","value","labelPosition","labelColor","labelTextColor","labelArrowColor","sliderColor","thumbBorderColor","defaultValue","min","max","props","ref","_values","isHovered","setIsHovered","thumbPosition","useMotionValue","thumbVelocity","prevThumbPosition","springConfig","labelOffset","useSpring","labelRotate","currentPos","velocity","maxVelocity","cappedVelocity","offsetAmount","rotateAmount","sliderColorClass","useMemo","config","sliderSizeClass","labelColorClass","cn","arrowColor","arrowColorClass","labelVisibilityClass","labelPositionClass","labelPositionClassSpec","renderLabel","index","jsxs","motion","jsx","NumberFlow","Badge","SliderPrimitive","_"],"mappings":"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"}
|