@sth87/shadcn-design-system 0.1.8 → 0.2.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/AI_README.md +114 -51
- package/README.md +83 -27
- package/dist/AI_CONTEXT.md +51 -52
- package/dist/cjs/_virtual/_commonjsHelpers.cjs +0 -1
- package/dist/cjs/_virtual/index.cjs +0 -1
- package/dist/cjs/_virtual/index2.cjs +0 -1
- package/dist/cjs/components/Accordion/Accordion.cjs +0 -1
- package/dist/cjs/components/Accordion/index.cjs +1 -0
- package/dist/cjs/components/Avatar/Avatar.cjs +1 -2
- package/dist/cjs/components/Avatar/index.cjs +1 -0
- package/dist/cjs/components/Badge/Badge.cjs +0 -1
- package/dist/cjs/components/Badge/index.cjs +1 -0
- package/dist/cjs/components/Breadcrumb/Breadcrumb.cjs +0 -1
- package/dist/cjs/components/Breadcrumb/index.cjs +1 -0
- package/dist/cjs/components/Button/Button.cjs +0 -1
- package/dist/cjs/components/Button/ButtonGroup.cjs +0 -1
- package/dist/cjs/components/Button/index.cjs +1 -0
- package/dist/cjs/components/Calendar/Calendar.cjs +1 -2
- package/dist/cjs/components/Calendar/index.cjs +1 -0
- package/dist/cjs/components/Carousel/Carousel.cjs +0 -1
- package/dist/cjs/components/Carousel/index.cjs +1 -0
- package/dist/cjs/components/Checkbox/Checkbox.cjs +1 -2
- package/dist/cjs/components/Checkbox/index.cjs +1 -0
- package/dist/cjs/components/Collapsible/Collapsible.cjs +0 -1
- package/dist/cjs/components/Collapsible/index.cjs +1 -0
- package/dist/cjs/components/Command/Command.cjs +0 -1
- package/dist/cjs/components/Command/index.cjs +0 -1
- package/dist/cjs/components/ContextMenu/ContextMenu.cjs +0 -1
- package/dist/cjs/components/ContextMenu/index.cjs +0 -1
- package/dist/cjs/components/Cropper/Cropper.cjs +1 -2
- package/dist/cjs/components/Cropper/CropperTool.cjs +0 -1
- package/dist/cjs/components/Cropper/index.cjs +1 -0
- package/dist/cjs/components/Cropper/utils.cjs +0 -1
- package/dist/cjs/components/DatePicker/DatePicker.cjs +1 -2
- package/dist/cjs/components/DatePicker/RangePicker.cjs +1 -2
- package/dist/cjs/components/DatePicker/TimePicker.cjs +1 -2
- package/dist/cjs/components/DatePicker/index.cjs +1 -0
- package/dist/cjs/components/Dialog/Dialog.cjs +0 -1
- package/dist/cjs/components/Dialog/index.cjs +1 -0
- package/dist/cjs/components/DropdownMenu/DropdownMenu.cjs +0 -1
- package/dist/cjs/components/DropdownMenu/index.cjs +0 -1
- package/dist/cjs/components/FloatLabel.cjs +0 -1
- package/dist/cjs/components/Glass/Glass.cjs +1 -2
- package/dist/cjs/components/Glass/index.cjs +1 -0
- package/dist/cjs/components/ImageViewer/ImageViewer.cjs +1 -2
- package/dist/cjs/components/ImageViewer/index.cjs +1 -0
- package/dist/cjs/components/Input/Input.cjs +1 -2
- package/dist/cjs/components/Input/index.cjs +1 -0
- package/dist/cjs/components/InputOTP/InputOTP.cjs +1 -2
- package/dist/cjs/components/InputOTP/index.cjs +1 -0
- package/dist/cjs/components/Interactive/CursorFollow.cjs +1 -2
- package/dist/cjs/components/Interactive/index.cjs +1 -0
- package/dist/cjs/components/Label/index.cjs +1 -0
- package/dist/cjs/components/Marquee/Marquee.cjs +1 -2
- package/dist/cjs/components/Marquee/MarqueeWrapper.cjs +0 -1
- package/dist/cjs/components/Marquee/index.cjs +0 -1
- package/dist/cjs/components/Masonry/Masonry.cjs +1 -2
- package/dist/cjs/components/Masonry/MasonryWrapper.cjs +0 -1
- package/dist/cjs/components/Masonry/index.cjs +1 -0
- package/dist/cjs/components/Pagination/Pagination.cjs +0 -1
- package/dist/cjs/components/Pagination/index.cjs +0 -1
- package/dist/cjs/components/Popover/Popover.cjs +0 -1
- package/dist/cjs/components/Popover/index.cjs +1 -2
- package/dist/cjs/components/QrCode/QrCode.cjs +1 -2
- package/dist/cjs/components/QrCode/index.cjs +0 -1
- package/dist/cjs/components/Radio/Radio.cjs +1 -2
- package/dist/cjs/components/Radio/index.cjs +1 -0
- package/dist/cjs/components/Rate/Rate.cjs +0 -1
- package/dist/cjs/components/Rate/index.cjs +1 -0
- package/dist/cjs/components/Resizable/Resizable.cjs +0 -1
- package/dist/cjs/components/Resizable/index.cjs +1 -0
- package/dist/cjs/components/ScrollArea/ScrollArea.cjs +0 -1
- package/dist/cjs/components/ScrollArea/index.cjs +1 -0
- package/dist/cjs/components/Select/Select.cjs +1 -2
- package/dist/cjs/components/Select/index.cjs +1 -0
- package/dist/cjs/components/Separator/Separator.cjs +0 -1
- package/dist/cjs/components/Separator/index.cjs +1 -0
- package/dist/cjs/components/Sheet/Sheet.cjs +0 -1
- package/dist/cjs/components/Sheet/index.cjs +1 -0
- package/dist/cjs/components/Sidebar/Sidebar.cjs +0 -1
- package/dist/cjs/components/Sidebar/index.cjs +1 -0
- package/dist/cjs/components/Skeleton/Skeleton.cjs +0 -1
- package/dist/cjs/components/Skeleton/index.cjs +1 -0
- package/dist/cjs/components/Slider/Slider.cjs +0 -1
- package/dist/cjs/components/Slider/index.cjs +1 -0
- package/dist/cjs/components/Stepper/Stepper.cjs +1 -2
- package/dist/cjs/components/Stepper/StepperWrapper.cjs +1 -2
- package/dist/cjs/components/Stepper/index.cjs +0 -1
- package/dist/cjs/components/Switch/Switch.cjs +0 -1
- package/dist/cjs/components/Switch/index.cjs +1 -0
- package/dist/cjs/components/Table/TableFilter/data-table-date-filter.cjs +1 -2
- package/dist/cjs/components/Table/TableFilter/data-table-filter-popover.cjs +1 -2
- package/dist/cjs/components/Table/TableFilter/data-table-slider-filter.cjs +1 -2
- package/dist/cjs/components/Table/data-table-column-header.cjs +1 -2
- package/dist/cjs/components/Table/data-table-pagination.cjs +1 -2
- package/dist/cjs/components/Table/data-table-toolbar.cjs +1 -2
- package/dist/cjs/components/Table/data-table-view-options.cjs +1 -2
- package/dist/cjs/components/Table/data-table.cjs +1 -2
- package/dist/cjs/components/Table/index.cjs +1 -0
- package/dist/cjs/components/Table/select-column.cjs +0 -1
- package/dist/cjs/components/Tabs/Tabs.cjs +1 -2
- package/dist/cjs/components/Tabs/classes.cjs +1 -2
- package/dist/cjs/components/Tabs/index.cjs +1 -0
- package/dist/cjs/components/Textarea/Textarea.cjs +1 -2
- package/dist/cjs/components/Textarea/index.cjs +1 -0
- package/dist/cjs/components/TimeGridView.cjs +1 -2
- package/dist/cjs/components/Toast/Toast.cjs +1 -2
- package/dist/cjs/components/Toast/index.cjs +1 -0
- package/dist/cjs/components/Toggle/Toggle.cjs +0 -1
- package/dist/cjs/components/Toggle/index.cjs +1 -0
- package/dist/cjs/components/Tooltip/Tooltip.cjs +1 -2
- package/dist/cjs/components/Tooltip/index.cjs +1 -0
- package/dist/cjs/components/Tour/Tour.cjs +1 -2
- package/dist/cjs/components/Tour/TourWrapper.cjs +0 -1
- package/dist/cjs/components/Tour/index.cjs +0 -1
- package/dist/cjs/components/TreeSelect/TreeSelect.cjs +0 -1
- package/dist/cjs/components/TreeSelect/index.cjs +1 -0
- package/dist/cjs/components/Upload/Upload.cjs +0 -1
- package/dist/cjs/components/Upload/index.cjs +1 -0
- package/dist/cjs/components/WheelColumn.cjs +1 -2
- package/dist/cjs/config/data-table.cjs +0 -1
- package/dist/cjs/constants/common.cjs +0 -1
- package/dist/cjs/hooks/index.cjs +1 -0
- package/dist/cjs/hooks/use-callback-ref.cjs +0 -1
- package/dist/cjs/hooks/use-data-table.cjs +1 -2
- package/dist/cjs/hooks/use-debounced-callback.cjs +1 -2
- package/dist/cjs/hooks/use-debounced-value.cjs +1 -2
- package/dist/cjs/hooks/use-event-listener.cjs +1 -2
- package/dist/cjs/hooks/use-intersection-observer.cjs +0 -1
- package/dist/cjs/hooks/use-isomorphic-layout-effect.cjs +0 -1
- package/dist/cjs/hooks/use-media-query.cjs +1 -2
- package/dist/cjs/hooks/use-mouse-position.cjs +1 -0
- package/dist/cjs/hooks/use-on-click-outside.cjs +1 -2
- package/dist/cjs/hooks/use-script.cjs +0 -1
- package/dist/cjs/hooks/use-scroll-lock.cjs +1 -2
- package/dist/cjs/index.cjs +1 -2
- package/dist/cjs/lib/TextAnimation/BlurText.cjs +0 -1
- package/dist/cjs/lib/TextAnimation/CircularText.cjs +0 -1
- package/dist/cjs/lib/TextAnimation/FlipWords.cjs +1 -2
- package/dist/cjs/lib/TextAnimation/GradientText.cjs +1 -2
- package/dist/cjs/lib/TextAnimation/RollingText.cjs +0 -1
- package/dist/cjs/lib/TextAnimation/RotatingText.cjs +1 -2
- package/dist/cjs/lib/TextAnimation/ShimmeringText.cjs +1 -2
- package/dist/cjs/lib/TextAnimation/SplittingText.cjs +0 -1
- package/dist/cjs/lib/TextAnimation/TextGenerateEffect.cjs +1 -2
- package/dist/cjs/lib/TextAnimation/TextHoverEffect.cjs +0 -1
- package/dist/cjs/lib/TextAnimation/TextPressureEffect.cjs +0 -1
- package/dist/cjs/lib/TextAnimation/TypingText.cjs +0 -1
- package/dist/cjs/lib/TextAnimation/WritingText.cjs +0 -1
- package/dist/cjs/lib/TextAnimation/index.cjs +1 -0
- package/dist/cjs/lib/utils.cjs +1 -0
- package/dist/cjs/node_modules/.pnpm/@dnd-kit_accessibility@3.1.1_react@19.1.1/node_modules/@dnd-kit/accessibility/dist/accessibility.esm.cjs +0 -1
- package/dist/cjs/node_modules/.pnpm/@dnd-kit_core@6.3.1_react-dom@19.1.1_react@19.1.1__react@19.1.1/node_modules/@dnd-kit/core/dist/core.esm.cjs +0 -1
- package/dist/cjs/node_modules/.pnpm/@dnd-kit_sortable@10.0.0_@dnd-kit_core@6.3.1_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1/node_modules/@dnd-kit/sortable/dist/sortable.esm.cjs +0 -1
- package/dist/cjs/node_modules/.pnpm/@dnd-kit_utilities@3.2.2_react@19.1.1/node_modules/@dnd-kit/utilities/dist/utilities.esm.cjs +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/node_modules/nuqs/dist/server.cjs +0 -1
- package/dist/cjs/node_modules/.pnpm/react-viewer@3.2.2/node_modules/react-viewer/dist/index.cjs +0 -1
- package/dist/cjs/packages/ui/src/components/accordion.cjs +0 -1
- package/dist/cjs/packages/ui/src/components/alert-dialog.cjs +0 -1
- package/dist/cjs/packages/ui/src/components/avatar.cjs +0 -1
- package/dist/cjs/packages/ui/src/components/badge.cjs +0 -1
- package/dist/cjs/packages/ui/src/components/breadcrumb.cjs +0 -1
- package/dist/cjs/packages/ui/src/components/button-group.cjs +0 -1
- package/dist/cjs/packages/ui/src/components/button.cjs +0 -1
- package/dist/cjs/packages/ui/src/components/calendar.cjs +0 -1
- package/dist/cjs/packages/ui/src/components/checkbox.cjs +0 -1
- package/dist/cjs/packages/ui/src/components/collapsible.cjs +0 -1
- package/dist/cjs/packages/ui/src/components/combobox.cjs +1 -2
- package/dist/cjs/packages/ui/src/components/command.cjs +0 -1
- package/dist/cjs/packages/ui/src/components/context-menu.cjs +0 -1
- package/dist/cjs/packages/ui/src/components/dialog.cjs +0 -1
- package/dist/cjs/packages/ui/src/components/drawer.cjs +0 -1
- package/dist/cjs/packages/ui/src/components/dropdown-menu.cjs +0 -1
- package/dist/cjs/packages/ui/src/components/input-otp.cjs +0 -1
- package/dist/cjs/packages/ui/src/components/input.cjs +0 -1
- package/dist/cjs/packages/ui/src/components/label.cjs +0 -1
- package/dist/cjs/packages/ui/src/components/pagination.cjs +0 -1
- package/dist/cjs/packages/ui/src/components/popover.cjs +0 -1
- package/dist/cjs/packages/ui/src/components/radio-group.cjs +0 -1
- package/dist/cjs/packages/ui/src/components/resizable.cjs +0 -1
- package/dist/cjs/packages/ui/src/components/scroll-area.cjs +0 -1
- package/dist/cjs/packages/ui/src/components/select.cjs +1 -2
- package/dist/cjs/packages/ui/src/components/separator.cjs +0 -1
- package/dist/cjs/packages/ui/src/components/sheet.cjs +0 -1
- package/dist/cjs/packages/ui/src/components/sidebar.cjs +0 -1
- package/dist/cjs/packages/ui/src/components/skeleton.cjs +0 -1
- package/dist/cjs/packages/ui/src/components/switch.cjs +0 -1
- package/dist/cjs/packages/ui/src/components/table.cjs +0 -1
- package/dist/cjs/packages/ui/src/components/tabs.cjs +0 -1
- package/dist/cjs/packages/ui/src/components/textarea.cjs +0 -1
- package/dist/cjs/packages/ui/src/components/toggle.cjs +0 -1
- package/dist/cjs/packages/ui/src/components/tooltip.cjs +0 -1
- package/dist/cjs/packages/ui/src/components/tree-view.cjs +0 -1
- package/dist/cjs/packages/ui/src/hooks/use-mobile.cjs +0 -1
- package/dist/cjs/packages/ui/src/lib/compose-refs.cjs +0 -1
- package/dist/cjs/packages/ui/src/lib/utils.cjs +0 -1
- package/dist/cjs/utils/animations.cjs +1 -2
- package/dist/cjs/utils/css.cjs +0 -1
- package/dist/cjs/utils/data-table.cjs +0 -1
- package/dist/cjs/utils/datetime.cjs +0 -1
- package/dist/cjs/utils/parsers.cjs +0 -1
- package/dist/esm/_virtual/_commonjsHelpers.js +0 -1
- package/dist/esm/_virtual/index.js +0 -1
- package/dist/esm/_virtual/index2.js +0 -1
- package/dist/esm/components/Accordion/Accordion.js +0 -1
- package/dist/esm/components/Accordion/index.js +9 -0
- package/dist/esm/components/Avatar/Avatar.js +32 -63
- package/dist/esm/components/Avatar/index.js +4 -0
- package/dist/esm/components/Badge/Badge.js +0 -1
- package/dist/esm/components/Badge/index.js +5 -0
- package/dist/esm/components/Breadcrumb/Breadcrumb.js +0 -1
- package/dist/esm/components/Breadcrumb/index.js +5 -0
- package/dist/esm/components/Button/Button.js +0 -1
- package/dist/esm/components/Button/ButtonGroup.js +0 -1
- package/dist/esm/components/Button/index.js +10 -0
- package/dist/esm/components/Calendar/Calendar.js +25 -57
- package/dist/esm/components/Calendar/index.js +5 -0
- package/dist/esm/components/Carousel/Carousel.js +0 -1
- package/dist/esm/components/Carousel/index.js +6 -0
- package/dist/esm/components/Checkbox/Checkbox.js +29 -58
- package/dist/esm/components/Checkbox/index.js +5 -0
- package/dist/esm/components/Collapsible/Collapsible.js +0 -1
- package/dist/esm/components/Collapsible/index.js +5 -0
- package/dist/esm/components/Command/Command.js +0 -1
- package/dist/esm/components/Command/index.js +0 -1
- package/dist/esm/components/ContextMenu/ContextMenu.js +0 -1
- package/dist/esm/components/ContextMenu/index.js +0 -1
- package/dist/esm/components/Cropper/Cropper.js +261 -292
- package/dist/esm/components/Cropper/CropperTool.js +0 -1
- package/dist/esm/components/Cropper/index.js +17 -0
- package/dist/esm/components/Cropper/utils.js +0 -1
- package/dist/esm/components/DatePicker/DatePicker.js +94 -122
- package/dist/esm/components/DatePicker/RangePicker.js +202 -230
- package/dist/esm/components/DatePicker/TimePicker.js +63 -92
- package/dist/esm/components/DatePicker/index.js +8 -0
- package/dist/esm/components/Dialog/Dialog.js +0 -1
- package/dist/esm/components/Dialog/index.js +5 -0
- package/dist/esm/components/DropdownMenu/DropdownMenu.js +0 -1
- package/dist/esm/components/DropdownMenu/index.js +0 -1
- package/dist/esm/components/FloatLabel.js +0 -1
- package/dist/esm/components/Glass/Glass.js +7 -39
- package/dist/esm/components/Glass/index.js +5 -0
- package/dist/esm/components/ImageViewer/ImageViewer.js +95 -126
- package/dist/esm/components/ImageViewer/index.js +7 -0
- package/dist/esm/components/Input/Input.js +0 -1
- package/dist/esm/components/Input/index.js +5 -0
- package/dist/esm/components/InputOTP/InputOTP.js +28 -58
- package/dist/esm/components/InputOTP/index.js +5 -0
- package/dist/esm/components/Interactive/CursorFollow.js +90 -122
- package/dist/esm/components/Interactive/index.js +9 -0
- package/dist/esm/components/Label/index.js +4 -0
- package/dist/esm/components/Marquee/Marquee.js +78 -109
- package/dist/esm/components/Marquee/MarqueeWrapper.js +0 -1
- package/dist/esm/components/Marquee/index.js +0 -1
- package/dist/esm/components/Masonry/Masonry.js +67 -100
- package/dist/esm/components/Masonry/MasonryWrapper.js +0 -1
- package/dist/esm/components/Masonry/index.js +10 -0
- package/dist/esm/components/Pagination/Pagination.js +0 -1
- package/dist/esm/components/Pagination/index.js +0 -1
- package/dist/esm/components/Popover/Popover.js +0 -1
- package/dist/esm/components/Popover/index.js +3 -3
- package/dist/esm/components/QrCode/QrCode.js +126 -157
- package/dist/esm/components/QrCode/index.js +0 -1
- package/dist/esm/components/Radio/Radio.js +36 -67
- package/dist/esm/components/Radio/index.js +5 -0
- package/dist/esm/components/Rate/Rate.js +0 -1
- package/dist/esm/components/Rate/index.js +5 -0
- package/dist/esm/components/Resizable/Resizable.js +0 -1
- package/dist/esm/components/Resizable/index.js +13 -0
- package/dist/esm/components/ScrollArea/ScrollArea.js +0 -1
- package/dist/esm/components/ScrollArea/index.js +5 -0
- package/dist/esm/components/Select/Select.js +0 -1
- package/dist/esm/components/Select/index.js +5 -0
- package/dist/esm/components/Separator/Separator.js +0 -1
- package/dist/esm/components/Separator/index.js +5 -0
- package/dist/esm/components/Sheet/Sheet.js +0 -1
- package/dist/esm/components/Sheet/index.js +5 -0
- package/dist/esm/components/Sidebar/Sidebar.js +0 -1
- package/dist/esm/components/Sidebar/index.js +29 -0
- package/dist/esm/components/Skeleton/Skeleton.js +0 -1
- package/dist/esm/components/Skeleton/index.js +5 -0
- package/dist/esm/components/Slider/Slider.js +0 -1
- package/dist/esm/components/Slider/index.js +5 -0
- package/dist/esm/components/Stepper/Stepper.js +72 -102
- package/dist/esm/components/Stepper/StepperWrapper.js +42 -74
- package/dist/esm/components/Stepper/index.js +0 -1
- package/dist/esm/components/Switch/Switch.js +0 -1
- package/dist/esm/components/Switch/index.js +5 -0
- package/dist/esm/components/Table/TableFilter/data-table-date-filter.js +2 -3
- package/dist/esm/components/Table/TableFilter/data-table-filter-popover.js +12 -13
- package/dist/esm/components/Table/TableFilter/data-table-slider-filter.js +66 -97
- package/dist/esm/components/Table/data-table-column-header.js +41 -73
- package/dist/esm/components/Table/data-table-pagination.js +30 -63
- package/dist/esm/components/Table/data-table-toolbar.js +43 -74
- package/dist/esm/components/Table/data-table-view-options.js +85 -116
- package/dist/esm/components/Table/data-table.js +52 -85
- package/dist/esm/components/Table/index.js +20 -0
- package/dist/esm/components/Table/select-column.js +0 -1
- package/dist/esm/components/Tabs/Tabs.js +0 -1
- package/dist/esm/components/Tabs/classes.js +23 -57
- package/dist/esm/components/Tabs/index.js +5 -0
- package/dist/esm/components/Textarea/Textarea.js +0 -1
- package/dist/esm/components/Textarea/index.js +5 -0
- package/dist/esm/components/TimeGridView.js +33 -65
- package/dist/esm/components/Toast/Toast.js +39 -71
- package/dist/esm/components/Toast/index.js +6 -0
- package/dist/esm/components/Toggle/Toggle.js +0 -1
- package/dist/esm/components/Toggle/index.js +5 -0
- package/dist/esm/components/Tooltip/Tooltip.js +34 -65
- package/dist/esm/components/Tooltip/index.js +4 -0
- package/dist/esm/components/Tour/Tour.js +331 -361
- package/dist/esm/components/Tour/TourWrapper.js +0 -1
- package/dist/esm/components/Tour/index.js +0 -1
- package/dist/esm/components/TreeSelect/TreeSelect.js +0 -1
- package/dist/esm/components/TreeSelect/index.js +5 -0
- package/dist/esm/components/Upload/Upload.js +0 -1
- package/dist/esm/components/Upload/index.js +4 -0
- package/dist/esm/components/WheelColumn.js +37 -69
- package/dist/esm/config/data-table.js +0 -1
- package/dist/esm/constants/common.js +0 -1
- package/dist/esm/hooks/index.js +26 -0
- package/dist/esm/hooks/use-callback-ref.js +0 -1
- package/dist/esm/hooks/use-data-table.js +45 -44
- package/dist/esm/hooks/use-debounced-callback.js +0 -1
- package/dist/esm/hooks/use-debounced-value.js +0 -1
- package/dist/esm/hooks/use-event-listener.js +0 -1
- package/dist/esm/hooks/use-intersection-observer.js +0 -1
- package/dist/esm/hooks/use-isomorphic-layout-effect.js +0 -1
- package/dist/esm/hooks/use-media-query.js +0 -1
- package/dist/esm/hooks/use-mouse-position.js +27 -0
- package/dist/esm/hooks/use-on-click-outside.js +0 -1
- package/dist/esm/hooks/use-script.js +0 -1
- package/dist/esm/hooks/use-scroll-lock.js +0 -1
- package/dist/esm/index.js +241 -268
- package/dist/esm/lib/TextAnimation/BlurText.js +0 -1
- package/dist/esm/lib/TextAnimation/CircularText.js +0 -1
- package/dist/esm/lib/TextAnimation/FlipWords.js +28 -60
- package/dist/esm/lib/TextAnimation/GradientText.js +26 -58
- package/dist/esm/lib/TextAnimation/RollingText.js +0 -1
- package/dist/esm/lib/TextAnimation/RotatingText.js +27 -59
- package/dist/esm/lib/TextAnimation/ShimmeringText.js +26 -58
- package/dist/esm/lib/TextAnimation/SplittingText.js +0 -1
- package/dist/esm/lib/TextAnimation/TextGenerateEffect.js +29 -61
- package/dist/esm/lib/TextAnimation/TextHoverEffect.js +0 -1
- package/dist/esm/lib/TextAnimation/TextPressureEffect.js +0 -1
- package/dist/esm/lib/TextAnimation/TypingText.js +0 -1
- package/dist/esm/lib/TextAnimation/WritingText.js +0 -1
- package/dist/esm/lib/TextAnimation/index.js +28 -0
- package/dist/esm/lib/utils.js +12 -0
- package/dist/esm/node_modules/.pnpm/@dnd-kit_accessibility@3.1.1_react@19.1.1/node_modules/@dnd-kit/accessibility/dist/accessibility.esm.js +0 -1
- package/dist/esm/node_modules/.pnpm/@dnd-kit_core@6.3.1_react-dom@19.1.1_react@19.1.1__react@19.1.1/node_modules/@dnd-kit/core/dist/core.esm.js +0 -1
- package/dist/esm/node_modules/.pnpm/@dnd-kit_sortable@10.0.0_@dnd-kit_core@6.3.1_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1/node_modules/@dnd-kit/sortable/dist/sortable.esm.js +0 -1
- package/dist/esm/node_modules/.pnpm/@dnd-kit_utilities@3.2.2_react@19.1.1/node_modules/@dnd-kit/utilities/dist/utilities.esm.js +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 +0 -1
- package/dist/esm/node_modules/.pnpm/react-viewer@3.2.2/node_modules/react-viewer/dist/index.js +0 -1
- package/dist/esm/packages/ui/src/components/accordion.js +0 -1
- package/dist/esm/packages/ui/src/components/alert-dialog.js +0 -1
- package/dist/esm/packages/ui/src/components/avatar.js +0 -1
- package/dist/esm/packages/ui/src/components/badge.js +0 -1
- package/dist/esm/packages/ui/src/components/breadcrumb.js +0 -1
- package/dist/esm/packages/ui/src/components/button-group.js +0 -1
- package/dist/esm/packages/ui/src/components/button.js +0 -1
- package/dist/esm/packages/ui/src/components/calendar.js +0 -1
- package/dist/esm/packages/ui/src/components/checkbox.js +0 -1
- package/dist/esm/packages/ui/src/components/collapsible.js +0 -1
- package/dist/esm/packages/ui/src/components/combobox.js +96 -81
- package/dist/esm/packages/ui/src/components/command.js +0 -1
- package/dist/esm/packages/ui/src/components/context-menu.js +0 -1
- package/dist/esm/packages/ui/src/components/dialog.js +0 -1
- package/dist/esm/packages/ui/src/components/drawer.js +0 -1
- package/dist/esm/packages/ui/src/components/dropdown-menu.js +0 -1
- package/dist/esm/packages/ui/src/components/input-otp.js +0 -1
- package/dist/esm/packages/ui/src/components/input.js +0 -1
- package/dist/esm/packages/ui/src/components/label.js +0 -1
- package/dist/esm/packages/ui/src/components/pagination.js +0 -1
- package/dist/esm/packages/ui/src/components/popover.js +0 -1
- package/dist/esm/packages/ui/src/components/radio-group.js +0 -1
- package/dist/esm/packages/ui/src/components/resizable.js +0 -1
- package/dist/esm/packages/ui/src/components/scroll-area.js +0 -1
- package/dist/esm/packages/ui/src/components/select.js +89 -83
- package/dist/esm/packages/ui/src/components/separator.js +0 -1
- package/dist/esm/packages/ui/src/components/sheet.js +0 -1
- package/dist/esm/packages/ui/src/components/sidebar.js +0 -1
- package/dist/esm/packages/ui/src/components/skeleton.js +0 -1
- package/dist/esm/packages/ui/src/components/switch.js +0 -1
- package/dist/esm/packages/ui/src/components/table.js +0 -1
- package/dist/esm/packages/ui/src/components/tabs.js +0 -1
- package/dist/esm/packages/ui/src/components/textarea.js +0 -1
- package/dist/esm/packages/ui/src/components/toggle.js +0 -1
- package/dist/esm/packages/ui/src/components/tooltip.js +0 -1
- package/dist/esm/packages/ui/src/components/tree-view.js +1 -2
- package/dist/esm/packages/ui/src/hooks/use-mobile.js +0 -1
- package/dist/esm/packages/ui/src/lib/compose-refs.js +0 -1
- package/dist/esm/packages/ui/src/lib/utils.js +0 -1
- package/dist/esm/utils/animations.js +40 -73
- package/dist/esm/utils/css.js +0 -1
- package/dist/esm/utils/data-table.js +0 -1
- package/dist/esm/utils/datetime.js +0 -1
- package/dist/esm/utils/parsers.js +0 -1
- package/dist/types/components/Accordion/index.d.ts +1 -1
- package/dist/types/components/Accordion/index.d.ts.map +1 -1
- package/dist/types/components/Badge/index.d.ts +1 -1
- package/dist/types/components/Badge/index.d.ts.map +1 -1
- package/dist/types/components/Breadcrumb/index.d.ts +1 -1
- package/dist/types/components/Breadcrumb/index.d.ts.map +1 -1
- package/dist/types/components/Button/index.d.ts +1 -1
- package/dist/types/components/Button/index.d.ts.map +1 -1
- package/dist/types/components/Checkbox/Checkbox.d.ts +1 -1
- package/dist/types/components/Checkbox/index.d.ts +1 -1
- package/dist/types/components/Checkbox/index.d.ts.map +1 -1
- package/dist/types/components/Collapsible/index.d.ts +1 -1
- package/dist/types/components/Collapsible/index.d.ts.map +1 -1
- package/dist/types/components/Cropper/Cropper.d.ts.map +1 -1
- package/dist/types/components/Dialog/index.d.ts +1 -1
- package/dist/types/components/Dialog/index.d.ts.map +1 -1
- package/dist/types/components/Glass/index.d.ts +1 -1
- package/dist/types/components/Glass/index.d.ts.map +1 -1
- package/dist/types/components/Input/index.d.ts +1 -1
- package/dist/types/components/Input/index.d.ts.map +1 -1
- package/dist/types/components/InputOTP/index.d.ts +1 -1
- package/dist/types/components/InputOTP/index.d.ts.map +1 -1
- package/dist/types/components/Label/Label.d.ts +1 -1
- package/dist/types/components/Label/Label.d.ts.map +1 -1
- package/dist/types/components/Marquee/Marquee.d.ts +1 -1
- package/dist/types/components/Marquee/Marquee.d.ts.map +1 -1
- package/dist/types/components/Masonry/Masonry.d.ts.map +1 -1
- package/dist/types/components/Popover/index.d.ts +1 -0
- package/dist/types/components/Popover/index.d.ts.map +1 -1
- package/dist/types/components/QrCode/QrCode.d.ts.map +1 -1
- package/dist/types/components/Radio/index.d.ts +1 -1
- package/dist/types/components/Radio/index.d.ts.map +1 -1
- package/dist/types/components/ScrollArea/index.d.ts +1 -1
- package/dist/types/components/ScrollArea/index.d.ts.map +1 -1
- package/dist/types/components/Select/index.d.ts +1 -1
- package/dist/types/components/Select/index.d.ts.map +1 -1
- package/dist/types/components/Sheet/index.d.ts +1 -1
- package/dist/types/components/Sheet/index.d.ts.map +1 -1
- package/dist/types/components/Skeleton/index.d.ts +1 -1
- package/dist/types/components/Skeleton/index.d.ts.map +1 -1
- package/dist/types/components/Slider/Slider.d.ts +1 -1
- package/dist/types/components/Slider/index.d.ts +1 -1
- package/dist/types/components/Slider/index.d.ts.map +1 -1
- package/dist/types/components/Stepper/Stepper.d.ts.map +1 -1
- package/dist/types/components/Switch/Switch.d.ts +1 -1
- package/dist/types/components/Switch/index.d.ts +1 -1
- package/dist/types/components/Switch/index.d.ts.map +1 -1
- package/dist/types/components/Tabs/index.d.ts +1 -1
- package/dist/types/components/Tabs/index.d.ts.map +1 -1
- package/dist/types/components/Textarea/index.d.ts +1 -1
- package/dist/types/components/Textarea/index.d.ts.map +1 -1
- package/dist/types/components/Toggle/Toggle.d.ts +1 -1
- package/dist/types/components/Toggle/index.d.ts +1 -1
- package/dist/types/components/Toggle/index.d.ts.map +1 -1
- package/dist/types/components/Tour/Tour.d.ts.map +1 -1
- package/dist/types/hooks/index.d.ts +3 -0
- package/dist/types/hooks/index.d.ts.map +1 -1
- package/dist/types/hooks/use-data-table.d.ts.map +1 -1
- package/dist/types/index.d.ts +23 -6
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/lib/utils.d.ts +1 -1
- package/dist/types/lib/utils.d.ts.map +1 -1
- package/dist/types/packages/ui/src/components/badge.d.ts +3 -3
- package/dist/types/packages/ui/src/components/button.d.ts +2 -2
- package/dist/types/packages/ui/src/components/checkbox.d.ts +1 -1
- package/dist/types/packages/ui/src/components/combobox.d.ts +2 -2
- package/dist/types/packages/ui/src/components/combobox.d.ts.map +1 -1
- package/dist/types/packages/ui/src/components/input-otp.d.ts +1 -1
- package/dist/types/packages/ui/src/components/input.d.ts +1 -1
- package/dist/types/packages/ui/src/components/radio-group.d.ts +1 -1
- package/dist/types/packages/ui/src/components/select.d.ts +2 -2
- package/dist/types/packages/ui/src/components/select.d.ts.map +1 -1
- package/dist/types/packages/ui/src/components/switch.d.ts +1 -1
- package/dist/types/packages/ui/src/components/textarea.d.ts +1 -1
- package/dist/types/packages/ui/src/components/toggle.d.ts +1 -1
- package/dist/types/utils/parsers.d.ts +1 -1
- package/package.json +258 -258
- package/dist/cjs/_virtual/_commonjsHelpers.cjs.map +0 -1
- package/dist/cjs/_virtual/index.cjs.map +0 -1
- package/dist/cjs/_virtual/index2.cjs.map +0 -1
- package/dist/cjs/components/Accordion/Accordion.cjs.map +0 -1
- package/dist/cjs/components/Avatar/Avatar.cjs.map +0 -1
- package/dist/cjs/components/Badge/Badge.cjs.map +0 -1
- package/dist/cjs/components/Breadcrumb/Breadcrumb.cjs.map +0 -1
- package/dist/cjs/components/Button/Button.cjs.map +0 -1
- package/dist/cjs/components/Button/ButtonGroup.cjs.map +0 -1
- package/dist/cjs/components/Calendar/Calendar.cjs.map +0 -1
- package/dist/cjs/components/Carousel/Carousel.cjs.map +0 -1
- package/dist/cjs/components/Checkbox/Checkbox.cjs.map +0 -1
- package/dist/cjs/components/Collapsible/Collapsible.cjs.map +0 -1
- package/dist/cjs/components/Command/Command.cjs.map +0 -1
- package/dist/cjs/components/Command/index.cjs.map +0 -1
- package/dist/cjs/components/ContextMenu/ContextMenu.cjs.map +0 -1
- package/dist/cjs/components/ContextMenu/index.cjs.map +0 -1
- package/dist/cjs/components/Cropper/Cropper.cjs.map +0 -1
- package/dist/cjs/components/Cropper/CropperTool.cjs.map +0 -1
- package/dist/cjs/components/Cropper/utils.cjs.map +0 -1
- package/dist/cjs/components/DatePicker/DatePicker.cjs.map +0 -1
- package/dist/cjs/components/DatePicker/RangePicker.cjs.map +0 -1
- package/dist/cjs/components/DatePicker/TimePicker.cjs.map +0 -1
- package/dist/cjs/components/Dialog/Dialog.cjs.map +0 -1
- package/dist/cjs/components/DropdownMenu/DropdownMenu.cjs.map +0 -1
- package/dist/cjs/components/DropdownMenu/index.cjs.map +0 -1
- package/dist/cjs/components/FloatLabel.cjs.map +0 -1
- package/dist/cjs/components/Glass/Glass.cjs.map +0 -1
- package/dist/cjs/components/ImageViewer/ImageViewer.cjs.map +0 -1
- package/dist/cjs/components/Input/Input.cjs.map +0 -1
- package/dist/cjs/components/InputOTP/InputOTP.cjs.map +0 -1
- package/dist/cjs/components/Interactive/CursorFollow.cjs.map +0 -1
- package/dist/cjs/components/Marquee/Marquee.cjs.map +0 -1
- package/dist/cjs/components/Marquee/MarqueeWrapper.cjs.map +0 -1
- package/dist/cjs/components/Marquee/index.cjs.map +0 -1
- package/dist/cjs/components/Masonry/Masonry.cjs.map +0 -1
- package/dist/cjs/components/Masonry/MasonryWrapper.cjs.map +0 -1
- package/dist/cjs/components/Pagination/Pagination.cjs.map +0 -1
- package/dist/cjs/components/Pagination/index.cjs.map +0 -1
- package/dist/cjs/components/Popover/Popover.cjs.map +0 -1
- package/dist/cjs/components/Popover/index.cjs.map +0 -1
- package/dist/cjs/components/QrCode/QrCode.cjs.map +0 -1
- package/dist/cjs/components/QrCode/index.cjs.map +0 -1
- package/dist/cjs/components/Radio/Radio.cjs.map +0 -1
- package/dist/cjs/components/Rate/Rate.cjs.map +0 -1
- package/dist/cjs/components/Resizable/Resizable.cjs.map +0 -1
- package/dist/cjs/components/ScrollArea/ScrollArea.cjs.map +0 -1
- package/dist/cjs/components/Select/Select.cjs.map +0 -1
- package/dist/cjs/components/Separator/Separator.cjs.map +0 -1
- package/dist/cjs/components/Sheet/Sheet.cjs.map +0 -1
- package/dist/cjs/components/Sidebar/Sidebar.cjs.map +0 -1
- package/dist/cjs/components/Skeleton/Skeleton.cjs.map +0 -1
- package/dist/cjs/components/Slider/Slider.cjs.map +0 -1
- package/dist/cjs/components/Stepper/Stepper.cjs.map +0 -1
- package/dist/cjs/components/Stepper/StepperWrapper.cjs.map +0 -1
- package/dist/cjs/components/Stepper/index.cjs.map +0 -1
- package/dist/cjs/components/Switch/Switch.cjs.map +0 -1
- package/dist/cjs/components/Table/TableFilter/data-table-date-filter.cjs.map +0 -1
- package/dist/cjs/components/Table/TableFilter/data-table-filter-popover.cjs.map +0 -1
- package/dist/cjs/components/Table/TableFilter/data-table-slider-filter.cjs.map +0 -1
- package/dist/cjs/components/Table/data-table-column-header.cjs.map +0 -1
- package/dist/cjs/components/Table/data-table-pagination.cjs.map +0 -1
- package/dist/cjs/components/Table/data-table-toolbar.cjs.map +0 -1
- package/dist/cjs/components/Table/data-table-view-options.cjs.map +0 -1
- package/dist/cjs/components/Table/data-table.cjs.map +0 -1
- package/dist/cjs/components/Table/select-column.cjs.map +0 -1
- package/dist/cjs/components/Tabs/Tabs.cjs.map +0 -1
- package/dist/cjs/components/Tabs/classes.cjs.map +0 -1
- package/dist/cjs/components/Textarea/Textarea.cjs.map +0 -1
- package/dist/cjs/components/TimeGridView.cjs.map +0 -1
- package/dist/cjs/components/Toast/Toast.cjs.map +0 -1
- package/dist/cjs/components/Toggle/Toggle.cjs.map +0 -1
- package/dist/cjs/components/Tooltip/Tooltip.cjs.map +0 -1
- package/dist/cjs/components/Tour/Tour.cjs.map +0 -1
- package/dist/cjs/components/Tour/TourWrapper.cjs.map +0 -1
- package/dist/cjs/components/Tour/index.cjs.map +0 -1
- package/dist/cjs/components/TreeSelect/TreeSelect.cjs.map +0 -1
- package/dist/cjs/components/Upload/Upload.cjs.map +0 -1
- package/dist/cjs/components/WheelColumn.cjs.map +0 -1
- package/dist/cjs/config/data-table.cjs.map +0 -1
- package/dist/cjs/constants/common.cjs.map +0 -1
- package/dist/cjs/hooks/use-callback-ref.cjs.map +0 -1
- package/dist/cjs/hooks/use-data-table.cjs.map +0 -1
- package/dist/cjs/hooks/use-debounced-callback.cjs.map +0 -1
- package/dist/cjs/hooks/use-debounced-value.cjs.map +0 -1
- package/dist/cjs/hooks/use-event-listener.cjs.map +0 -1
- package/dist/cjs/hooks/use-intersection-observer.cjs.map +0 -1
- package/dist/cjs/hooks/use-isomorphic-layout-effect.cjs.map +0 -1
- package/dist/cjs/hooks/use-media-query.cjs.map +0 -1
- package/dist/cjs/hooks/use-on-click-outside.cjs.map +0 -1
- package/dist/cjs/hooks/use-script.cjs.map +0 -1
- package/dist/cjs/hooks/use-scroll-lock.cjs.map +0 -1
- package/dist/cjs/index.cjs.map +0 -1
- package/dist/cjs/lib/TextAnimation/BlurText.cjs.map +0 -1
- package/dist/cjs/lib/TextAnimation/CircularText.cjs.map +0 -1
- package/dist/cjs/lib/TextAnimation/FlipWords.cjs.map +0 -1
- package/dist/cjs/lib/TextAnimation/GradientText.cjs.map +0 -1
- package/dist/cjs/lib/TextAnimation/RollingText.cjs.map +0 -1
- package/dist/cjs/lib/TextAnimation/RotatingText.cjs.map +0 -1
- package/dist/cjs/lib/TextAnimation/ShimmeringText.cjs.map +0 -1
- package/dist/cjs/lib/TextAnimation/SplittingText.cjs.map +0 -1
- package/dist/cjs/lib/TextAnimation/TextGenerateEffect.cjs.map +0 -1
- package/dist/cjs/lib/TextAnimation/TextHoverEffect.cjs.map +0 -1
- package/dist/cjs/lib/TextAnimation/TextPressureEffect.cjs.map +0 -1
- package/dist/cjs/lib/TextAnimation/TypingText.cjs.map +0 -1
- package/dist/cjs/lib/TextAnimation/WritingText.cjs.map +0 -1
- package/dist/cjs/node_modules/.pnpm/@dnd-kit_accessibility@3.1.1_react@19.1.1/node_modules/@dnd-kit/accessibility/dist/accessibility.esm.cjs.map +0 -1
- package/dist/cjs/node_modules/.pnpm/@dnd-kit_core@6.3.1_react-dom@19.1.1_react@19.1.1__react@19.1.1/node_modules/@dnd-kit/core/dist/core.esm.cjs.map +0 -1
- package/dist/cjs/node_modules/.pnpm/@dnd-kit_sortable@10.0.0_@dnd-kit_core@6.3.1_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1/node_modules/@dnd-kit/sortable/dist/sortable.esm.cjs.map +0 -1
- package/dist/cjs/node_modules/.pnpm/@dnd-kit_utilities@3.2.2_react@19.1.1/node_modules/@dnd-kit/utilities/dist/utilities.esm.cjs.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/node_modules/nuqs/dist/server.cjs.map +0 -1
- package/dist/cjs/node_modules/.pnpm/react-viewer@3.2.2/node_modules/react-viewer/dist/index.cjs.map +0 -1
- package/dist/cjs/packages/ui/src/components/accordion.cjs.map +0 -1
- package/dist/cjs/packages/ui/src/components/alert-dialog.cjs.map +0 -1
- package/dist/cjs/packages/ui/src/components/avatar.cjs.map +0 -1
- package/dist/cjs/packages/ui/src/components/badge.cjs.map +0 -1
- package/dist/cjs/packages/ui/src/components/breadcrumb.cjs.map +0 -1
- package/dist/cjs/packages/ui/src/components/button-group.cjs.map +0 -1
- package/dist/cjs/packages/ui/src/components/button.cjs.map +0 -1
- package/dist/cjs/packages/ui/src/components/calendar.cjs.map +0 -1
- package/dist/cjs/packages/ui/src/components/checkbox.cjs.map +0 -1
- package/dist/cjs/packages/ui/src/components/collapsible.cjs.map +0 -1
- package/dist/cjs/packages/ui/src/components/combobox.cjs.map +0 -1
- package/dist/cjs/packages/ui/src/components/command.cjs.map +0 -1
- package/dist/cjs/packages/ui/src/components/context-menu.cjs.map +0 -1
- package/dist/cjs/packages/ui/src/components/dialog.cjs.map +0 -1
- package/dist/cjs/packages/ui/src/components/drawer.cjs.map +0 -1
- package/dist/cjs/packages/ui/src/components/dropdown-menu.cjs.map +0 -1
- package/dist/cjs/packages/ui/src/components/input-otp.cjs.map +0 -1
- package/dist/cjs/packages/ui/src/components/input.cjs.map +0 -1
- package/dist/cjs/packages/ui/src/components/label.cjs.map +0 -1
- package/dist/cjs/packages/ui/src/components/pagination.cjs.map +0 -1
- package/dist/cjs/packages/ui/src/components/popover.cjs.map +0 -1
- package/dist/cjs/packages/ui/src/components/radio-group.cjs.map +0 -1
- package/dist/cjs/packages/ui/src/components/resizable.cjs.map +0 -1
- package/dist/cjs/packages/ui/src/components/scroll-area.cjs.map +0 -1
- package/dist/cjs/packages/ui/src/components/select.cjs.map +0 -1
- package/dist/cjs/packages/ui/src/components/separator.cjs.map +0 -1
- package/dist/cjs/packages/ui/src/components/sheet.cjs.map +0 -1
- package/dist/cjs/packages/ui/src/components/sidebar.cjs.map +0 -1
- package/dist/cjs/packages/ui/src/components/skeleton.cjs.map +0 -1
- package/dist/cjs/packages/ui/src/components/switch.cjs.map +0 -1
- package/dist/cjs/packages/ui/src/components/table.cjs.map +0 -1
- package/dist/cjs/packages/ui/src/components/tabs.cjs.map +0 -1
- package/dist/cjs/packages/ui/src/components/textarea.cjs.map +0 -1
- package/dist/cjs/packages/ui/src/components/toggle.cjs.map +0 -1
- package/dist/cjs/packages/ui/src/components/tooltip.cjs.map +0 -1
- package/dist/cjs/packages/ui/src/components/tree-view.cjs.map +0 -1
- package/dist/cjs/packages/ui/src/hooks/use-mobile.cjs.map +0 -1
- package/dist/cjs/packages/ui/src/lib/compose-refs.cjs.map +0 -1
- package/dist/cjs/packages/ui/src/lib/utils.cjs.map +0 -1
- package/dist/cjs/utils/animations.cjs.map +0 -1
- package/dist/cjs/utils/css.cjs.map +0 -1
- package/dist/cjs/utils/data-table.cjs.map +0 -1
- package/dist/cjs/utils/datetime.cjs.map +0 -1
- package/dist/cjs/utils/parsers.cjs.map +0 -1
- package/dist/esm/_virtual/_commonjsHelpers.js.map +0 -1
- package/dist/esm/_virtual/index.js.map +0 -1
- package/dist/esm/_virtual/index2.js.map +0 -1
- package/dist/esm/components/Accordion/Accordion.js.map +0 -1
- package/dist/esm/components/Avatar/Avatar.js.map +0 -1
- package/dist/esm/components/Badge/Badge.js.map +0 -1
- package/dist/esm/components/Breadcrumb/Breadcrumb.js.map +0 -1
- package/dist/esm/components/Button/Button.js.map +0 -1
- package/dist/esm/components/Button/ButtonGroup.js.map +0 -1
- package/dist/esm/components/Calendar/Calendar.js.map +0 -1
- package/dist/esm/components/Carousel/Carousel.js.map +0 -1
- package/dist/esm/components/Checkbox/Checkbox.js.map +0 -1
- package/dist/esm/components/Collapsible/Collapsible.js.map +0 -1
- package/dist/esm/components/Command/Command.js.map +0 -1
- package/dist/esm/components/Command/index.js.map +0 -1
- package/dist/esm/components/ContextMenu/ContextMenu.js.map +0 -1
- package/dist/esm/components/ContextMenu/index.js.map +0 -1
- package/dist/esm/components/Cropper/Cropper.js.map +0 -1
- package/dist/esm/components/Cropper/CropperTool.js.map +0 -1
- package/dist/esm/components/Cropper/utils.js.map +0 -1
- package/dist/esm/components/DatePicker/DatePicker.js.map +0 -1
- package/dist/esm/components/DatePicker/RangePicker.js.map +0 -1
- package/dist/esm/components/DatePicker/TimePicker.js.map +0 -1
- package/dist/esm/components/Dialog/Dialog.js.map +0 -1
- package/dist/esm/components/DropdownMenu/DropdownMenu.js.map +0 -1
- package/dist/esm/components/DropdownMenu/index.js.map +0 -1
- package/dist/esm/components/FloatLabel.js.map +0 -1
- package/dist/esm/components/Glass/Glass.js.map +0 -1
- package/dist/esm/components/ImageViewer/ImageViewer.js.map +0 -1
- package/dist/esm/components/Input/Input.js.map +0 -1
- package/dist/esm/components/InputOTP/InputOTP.js.map +0 -1
- package/dist/esm/components/Interactive/CursorFollow.js.map +0 -1
- package/dist/esm/components/Marquee/Marquee.js.map +0 -1
- package/dist/esm/components/Marquee/MarqueeWrapper.js.map +0 -1
- package/dist/esm/components/Marquee/index.js.map +0 -1
- package/dist/esm/components/Masonry/Masonry.js.map +0 -1
- package/dist/esm/components/Masonry/MasonryWrapper.js.map +0 -1
- package/dist/esm/components/Pagination/Pagination.js.map +0 -1
- package/dist/esm/components/Pagination/index.js.map +0 -1
- package/dist/esm/components/Popover/Popover.js.map +0 -1
- package/dist/esm/components/Popover/index.js.map +0 -1
- package/dist/esm/components/QrCode/QrCode.js.map +0 -1
- package/dist/esm/components/QrCode/index.js.map +0 -1
- package/dist/esm/components/Radio/Radio.js.map +0 -1
- package/dist/esm/components/Rate/Rate.js.map +0 -1
- package/dist/esm/components/Resizable/Resizable.js.map +0 -1
- package/dist/esm/components/ScrollArea/ScrollArea.js.map +0 -1
- package/dist/esm/components/Select/Select.js.map +0 -1
- package/dist/esm/components/Separator/Separator.js.map +0 -1
- package/dist/esm/components/Sheet/Sheet.js.map +0 -1
- package/dist/esm/components/Sidebar/Sidebar.js.map +0 -1
- package/dist/esm/components/Skeleton/Skeleton.js.map +0 -1
- package/dist/esm/components/Slider/Slider.js.map +0 -1
- package/dist/esm/components/Stepper/Stepper.js.map +0 -1
- package/dist/esm/components/Stepper/StepperWrapper.js.map +0 -1
- package/dist/esm/components/Stepper/index.js.map +0 -1
- package/dist/esm/components/Switch/Switch.js.map +0 -1
- package/dist/esm/components/Table/TableFilter/data-table-date-filter.js.map +0 -1
- package/dist/esm/components/Table/TableFilter/data-table-filter-popover.js.map +0 -1
- package/dist/esm/components/Table/TableFilter/data-table-slider-filter.js.map +0 -1
- package/dist/esm/components/Table/data-table-column-header.js.map +0 -1
- package/dist/esm/components/Table/data-table-pagination.js.map +0 -1
- package/dist/esm/components/Table/data-table-toolbar.js.map +0 -1
- package/dist/esm/components/Table/data-table-view-options.js.map +0 -1
- package/dist/esm/components/Table/data-table.js.map +0 -1
- package/dist/esm/components/Table/select-column.js.map +0 -1
- package/dist/esm/components/Tabs/Tabs.js.map +0 -1
- package/dist/esm/components/Tabs/classes.js.map +0 -1
- package/dist/esm/components/Textarea/Textarea.js.map +0 -1
- package/dist/esm/components/TimeGridView.js.map +0 -1
- package/dist/esm/components/Toast/Toast.js.map +0 -1
- package/dist/esm/components/Toggle/Toggle.js.map +0 -1
- package/dist/esm/components/Tooltip/Tooltip.js.map +0 -1
- package/dist/esm/components/Tour/Tour.js.map +0 -1
- package/dist/esm/components/Tour/TourWrapper.js.map +0 -1
- package/dist/esm/components/Tour/index.js.map +0 -1
- package/dist/esm/components/TreeSelect/TreeSelect.js.map +0 -1
- package/dist/esm/components/Upload/Upload.js.map +0 -1
- package/dist/esm/components/WheelColumn.js.map +0 -1
- package/dist/esm/config/data-table.js.map +0 -1
- package/dist/esm/constants/common.js.map +0 -1
- package/dist/esm/hooks/use-callback-ref.js.map +0 -1
- package/dist/esm/hooks/use-data-table.js.map +0 -1
- package/dist/esm/hooks/use-debounced-callback.js.map +0 -1
- package/dist/esm/hooks/use-debounced-value.js.map +0 -1
- package/dist/esm/hooks/use-event-listener.js.map +0 -1
- package/dist/esm/hooks/use-intersection-observer.js.map +0 -1
- package/dist/esm/hooks/use-isomorphic-layout-effect.js.map +0 -1
- package/dist/esm/hooks/use-media-query.js.map +0 -1
- package/dist/esm/hooks/use-on-click-outside.js.map +0 -1
- package/dist/esm/hooks/use-script.js.map +0 -1
- package/dist/esm/hooks/use-scroll-lock.js.map +0 -1
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/lib/TextAnimation/BlurText.js.map +0 -1
- package/dist/esm/lib/TextAnimation/CircularText.js.map +0 -1
- package/dist/esm/lib/TextAnimation/FlipWords.js.map +0 -1
- package/dist/esm/lib/TextAnimation/GradientText.js.map +0 -1
- package/dist/esm/lib/TextAnimation/RollingText.js.map +0 -1
- package/dist/esm/lib/TextAnimation/RotatingText.js.map +0 -1
- package/dist/esm/lib/TextAnimation/ShimmeringText.js.map +0 -1
- package/dist/esm/lib/TextAnimation/SplittingText.js.map +0 -1
- package/dist/esm/lib/TextAnimation/TextGenerateEffect.js.map +0 -1
- package/dist/esm/lib/TextAnimation/TextHoverEffect.js.map +0 -1
- package/dist/esm/lib/TextAnimation/TextPressureEffect.js.map +0 -1
- package/dist/esm/lib/TextAnimation/TypingText.js.map +0 -1
- package/dist/esm/lib/TextAnimation/WritingText.js.map +0 -1
- package/dist/esm/node_modules/.pnpm/@dnd-kit_accessibility@3.1.1_react@19.1.1/node_modules/@dnd-kit/accessibility/dist/accessibility.esm.js.map +0 -1
- package/dist/esm/node_modules/.pnpm/@dnd-kit_core@6.3.1_react-dom@19.1.1_react@19.1.1__react@19.1.1/node_modules/@dnd-kit/core/dist/core.esm.js.map +0 -1
- package/dist/esm/node_modules/.pnpm/@dnd-kit_sortable@10.0.0_@dnd-kit_core@6.3.1_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1/node_modules/@dnd-kit/sortable/dist/sortable.esm.js.map +0 -1
- package/dist/esm/node_modules/.pnpm/@dnd-kit_utilities@3.2.2_react@19.1.1/node_modules/@dnd-kit/utilities/dist/utilities.esm.js.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/esm/node_modules/.pnpm/react-viewer@3.2.2/node_modules/react-viewer/dist/index.js.map +0 -1
- package/dist/esm/packages/ui/src/components/accordion.js.map +0 -1
- package/dist/esm/packages/ui/src/components/alert-dialog.js.map +0 -1
- package/dist/esm/packages/ui/src/components/avatar.js.map +0 -1
- package/dist/esm/packages/ui/src/components/badge.js.map +0 -1
- package/dist/esm/packages/ui/src/components/breadcrumb.js.map +0 -1
- package/dist/esm/packages/ui/src/components/button-group.js.map +0 -1
- package/dist/esm/packages/ui/src/components/button.js.map +0 -1
- package/dist/esm/packages/ui/src/components/calendar.js.map +0 -1
- package/dist/esm/packages/ui/src/components/checkbox.js.map +0 -1
- package/dist/esm/packages/ui/src/components/collapsible.js.map +0 -1
- package/dist/esm/packages/ui/src/components/combobox.js.map +0 -1
- package/dist/esm/packages/ui/src/components/command.js.map +0 -1
- package/dist/esm/packages/ui/src/components/context-menu.js.map +0 -1
- package/dist/esm/packages/ui/src/components/dialog.js.map +0 -1
- package/dist/esm/packages/ui/src/components/drawer.js.map +0 -1
- package/dist/esm/packages/ui/src/components/dropdown-menu.js.map +0 -1
- package/dist/esm/packages/ui/src/components/input-otp.js.map +0 -1
- package/dist/esm/packages/ui/src/components/input.js.map +0 -1
- package/dist/esm/packages/ui/src/components/label.js.map +0 -1
- package/dist/esm/packages/ui/src/components/pagination.js.map +0 -1
- package/dist/esm/packages/ui/src/components/popover.js.map +0 -1
- package/dist/esm/packages/ui/src/components/radio-group.js.map +0 -1
- package/dist/esm/packages/ui/src/components/resizable.js.map +0 -1
- package/dist/esm/packages/ui/src/components/scroll-area.js.map +0 -1
- package/dist/esm/packages/ui/src/components/select.js.map +0 -1
- package/dist/esm/packages/ui/src/components/separator.js.map +0 -1
- package/dist/esm/packages/ui/src/components/sheet.js.map +0 -1
- package/dist/esm/packages/ui/src/components/sidebar.js.map +0 -1
- package/dist/esm/packages/ui/src/components/skeleton.js.map +0 -1
- package/dist/esm/packages/ui/src/components/switch.js.map +0 -1
- package/dist/esm/packages/ui/src/components/table.js.map +0 -1
- package/dist/esm/packages/ui/src/components/tabs.js.map +0 -1
- package/dist/esm/packages/ui/src/components/textarea.js.map +0 -1
- package/dist/esm/packages/ui/src/components/toggle.js.map +0 -1
- package/dist/esm/packages/ui/src/components/tooltip.js.map +0 -1
- package/dist/esm/packages/ui/src/components/tree-view.js.map +0 -1
- package/dist/esm/packages/ui/src/hooks/use-mobile.js.map +0 -1
- package/dist/esm/packages/ui/src/lib/compose-refs.js.map +0 -1
- package/dist/esm/packages/ui/src/lib/utils.js.map +0 -1
- package/dist/esm/utils/animations.js.map +0 -1
- package/dist/esm/utils/css.js.map +0 -1
- package/dist/esm/utils/data-table.js.map +0 -1
- package/dist/esm/utils/datetime.js.map +0 -1
- package/dist/esm/utils/parsers.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_commonjsHelpers.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index2.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Accordion.cjs","sources":["../../../../src/components/Accordion/Accordion.tsx"],"sourcesContent":["import React from \"react\";\nimport {\n Accordion as SAccordion,\n AccordionItem,\n AccordionTrigger,\n AccordionContent,\n} from \"@dsui/ui/components/accordion\";\nimport { cn } from \"@dsui/ui/lib/utils\";\nimport { type BasicColor } from \"@/types/variables\";\n\nexport type AccordionItemConfig = {\n value: string;\n trigger: React.ReactNode;\n content?: React.ReactNode;\n disabled?: boolean;\n className?: string;\n triggerClassName?: string;\n contentClassName?: string;\n};\n\ntype AccordionBaseProps = {\n items?: AccordionItemConfig[];\n variant?: \"default\" | \"bordered\" | \"separated\" | \"ghost\";\n color?: BasicColor;\n itemClassName?: string;\n triggerClassName?: string;\n contentClassName?: string;\n children?: React.ReactNode;\n className?: string;\n disabled?: boolean;\n dir?: \"ltr\" | \"rtl\";\n orientation?: \"horizontal\" | \"vertical\";\n asChild?: boolean;\n};\n\ntype AccordionSingleProps = AccordionBaseProps & {\n type: \"single\";\n value?: string;\n defaultValue?: string;\n collapsible?: boolean;\n onValueChange?: (newValue: string) => void;\n};\n\ntype AccordionMultipleProps = AccordionBaseProps & {\n type: \"multiple\";\n value?: string[];\n defaultValue?: string[];\n onValueChange?: (newValue: string[]) => void;\n};\n\nexport type AccordionProps = AccordionSingleProps | AccordionMultipleProps;\n\nconst colorVariants = {\n primary: {\n trigger:\n \"ds:data-[state=open]:bg-primary/10 ds:data-[state=open]:text-primary ds:data-[state=open]:rounded-b-none ds:data-[state=open]:border-primary/20\",\n content: \"ds:bg-primary/10 ds:rounded-b-md\",\n },\n secondary: {\n trigger:\n \"ds:data-[state=open]:bg-secondary/10 ds:data-[state=open]:text-secondary ds:data-[state=open]:rounded-b-none ds:data-[state=open]:border-secondary/20\",\n content: \"ds:bg-secondary/10 ds:rounded-b-md\",\n },\n success: {\n trigger:\n \"ds:data-[state=open]:bg-success/10 ds:data-[state=open]:text-success ds:data-[state=open]:rounded-b-none ds:data-[state=open]:border-success/20\",\n content: \"ds:bg-success/10 ds:rounded-b-md\",\n },\n warning: {\n trigger:\n \"ds:data-[state=open]:bg-warning/10 ds:data-[state=open]:text-warning ds:data-[state=open]:rounded-b-none ds:data-[state=open]:border-warning/20\",\n content: \"ds:bg-warning/10 ds:rounded-b-md\",\n },\n error: {\n trigger:\n \"ds:data-[state=open]:bg-error/10 ds:data-[state=open]:text-error ds:data-[state=open]:rounded-b-none ds:data-[state=open]:border-error/20\",\n content: \"ds:bg-error/10 ds:rounded-b-md\",\n },\n glass: {\n trigger:\n \"ds:data-[state=open]:bg-glass/10 ds:data-[state=open]:text-glass ds:data-[state=open]:rounded-b-none ds:data-[state=open]:border-glass/20\",\n content: \"ds:bg-glass/10 ds:rounded-b-md\",\n },\n};\n\nconst variantStyles = {\n default: {\n root: \"ds:rounded-lg\",\n item: \"ds:px-0\",\n trigger: \"ds:px-4 ds:hover:bg-accent/50\",\n content: \"ds:px-4\",\n },\n bordered: {\n root: \"ds:rounded-lg ds:border-2 ds:divide-y-2\",\n item: \"ds:px-0 ds:border-0\",\n trigger: \"ds:px-4 ds:font-semibold ds:hover:bg-accent\",\n content: \"ds:px-4\",\n },\n separated: {\n root: \"ds:space-y-2\",\n item: \"ds:rounded-lg ds:border ds:bg-card ds:last:border-b\",\n trigger: \"ds:px-4 ds:hover:bg-accent/50\",\n content: \"ds:px-4\",\n },\n ghost: {\n root: \"\",\n item: \"ds:border-0\",\n trigger: \"ds:px-2 ds:hover:bg-accent/30 ds:rounded-md\",\n content: \"ds:px-2\",\n },\n};\n\nconst Accordion = React.forwardRef<HTMLDivElement, AccordionProps>(\n (props, ref) => {\n const {\n items,\n variant = \"default\",\n color,\n className,\n itemClassName,\n triggerClassName,\n contentClassName,\n children,\n type,\n ...rest\n } = props;\n\n const styles = variantStyles[variant];\n const triggerColorClass = color ? colorVariants[color].trigger : \"\";\n const contentColorClass = color ? colorVariants[color].content : \"\";\n\n // If children are provided, use them directly (primitive usage)\n if (children && !items) {\n if (type === \"multiple\") {\n return (\n <SAccordion\n ref={ref}\n type=\"multiple\"\n className={cn(styles.root, className)}\n {...(rest as Omit<\n AccordionMultipleProps,\n keyof AccordionBaseProps | \"type\"\n >)}\n >\n {children}\n </SAccordion>\n );\n }\n return (\n <SAccordion\n ref={ref}\n type=\"single\"\n className={cn(styles.root, className)}\n {...(rest as Omit<\n AccordionSingleProps,\n keyof AccordionBaseProps | \"type\"\n >)}\n >\n {children}\n </SAccordion>\n );\n }\n\n // Wrapper usage with items array\n if (type === \"multiple\") {\n return (\n <SAccordion\n ref={ref}\n type=\"multiple\"\n className={cn(styles.root, className)}\n {...(rest as Omit<\n AccordionMultipleProps,\n keyof AccordionBaseProps | \"type\"\n >)}\n >\n {items?.map((item) => (\n <AccordionItem\n key={item.value}\n value={item.value}\n disabled={item.disabled}\n className={cn(styles.item, itemClassName, item.className)}\n >\n <AccordionTrigger\n className={cn(\n styles.trigger,\n triggerColorClass,\n triggerClassName,\n item.triggerClassName\n )}\n >\n {item.trigger}\n </AccordionTrigger>\n <AccordionContent\n className={cn(\n styles.content,\n contentColorClass,\n contentClassName,\n item.contentClassName\n )}\n >\n {item.content}\n </AccordionContent>\n </AccordionItem>\n ))}\n </SAccordion>\n );\n }\n\n return (\n <SAccordion\n ref={ref}\n type=\"single\"\n className={cn(styles.root, className)}\n {...(rest as Omit<\n AccordionSingleProps,\n keyof AccordionBaseProps | \"type\"\n >)}\n >\n {items?.map((item) => (\n <AccordionItem\n key={item.value}\n value={item.value}\n disabled={item.disabled}\n className={cn(styles.item, itemClassName, item.className)}\n >\n <AccordionTrigger\n className={cn(\n styles.trigger,\n triggerColorClass,\n triggerClassName,\n item.triggerClassName\n )}\n >\n {item.trigger}\n </AccordionTrigger>\n <AccordionContent\n className={cn(\n styles.content,\n contentColorClass,\n contentClassName,\n item.contentClassName\n )}\n >\n {item?.content}\n </AccordionContent>\n </AccordionItem>\n ))}\n </SAccordion>\n );\n }\n);\n\nAccordion.displayName = \"Accordion\";\n\n// Create compound component\nconst AccordionCompound = Object.assign(Accordion, {\n Item: AccordionItem,\n Trigger: AccordionTrigger,\n Content: AccordionContent,\n});\n\nexport default AccordionCompound;\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent };\n"],"names":["colorVariants","variantStyles","Accordion","React","props","ref","items","variant","color","className","itemClassName","triggerClassName","contentClassName","children","type","rest","styles","triggerColorClass","contentColorClass","jsx","SAccordion","cn","item","jsxs","AccordionItem","AccordionTrigger","AccordionContent","AccordionCompound"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Avatar.cjs","sources":["../../../../src/components/Avatar/Avatar.tsx"],"sourcesContent":["import * as React from \"react\";\nimport {\n Avatar as DsAvatar,\n AvatarImage,\n AvatarFallback,\n} from \"@dsui/ui/components/avatar\";\nimport { cn } from \"@dsui/ui/index\";\nimport type { BasicAnimation, BasicColor } from \"@/types/variables\";\nimport { animationClass } from \"@/utils/animations\";\n\ntype Color = BasicColor | \"dark\" | \"light\" | \"inverted\";\n\ntype Size = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n\ntype Variant = \"circle\" | \"square\";\n\nexport type AvatarProps = React.ComponentProps<typeof DsAvatar> & {\n size?: Size;\n variant?: Variant;\n animation?: BasicAnimation;\n color?: Color | string;\n src?: string;\n alt?: string;\n fallback?: React.ReactNode;\n};\n\nexport function Avatar({\n size = \"md\",\n variant = \"circle\",\n animation,\n color,\n className,\n src,\n alt,\n fallback,\n ...props\n}: AvatarProps) {\n const avatarAnimation = React.useMemo<{ className?: string } | null>(() => {\n return animationClass(animation, className);\n }, [animation, className]);\n\n const avatarSize = React.useMemo<string>(() => {\n switch (size) {\n case \"xs\":\n return \"ds:size-6\";\n case \"sm\":\n return \"ds:size-8\";\n case \"md\":\n return \"ds:size-10\";\n case \"lg\":\n return \"ds:size-12\";\n case \"xl\":\n return \"ds:size-16\";\n default:\n return \"ds:size-10\";\n }\n }, [size]);\n\n const avatarVariant = React.useMemo<string>(() => {\n switch (variant) {\n case \"circle\":\n return \"ds:rounded-full\";\n case \"square\":\n return \"ds:rounded-md\";\n default:\n return \"ds:rounded-full\";\n }\n }, [variant]);\n\n const avatarColor = React.useMemo<string>(() => {\n switch (color) {\n case \"primary\":\n return \"ds:bg-primary ds:text-primary-foreground\";\n case \"secondary\":\n return \"ds:bg-secondary ds:text-secondary-foreground\";\n case \"dark\":\n return \"ds:bg-neutral-900 ds:text-white\";\n case \"light\":\n return \"ds:bg-neutral-200 ds:text-neutral-950\";\n case \"inverted\":\n return \"ds:dark:bg-white ds:dark:text-black\";\n case \"success\":\n return \"ds:bg-success ds:text-success-foreground\";\n case \"warning\":\n return \"ds:bg-warning ds:text-warning-foreground\";\n case \"error\":\n return \"ds:bg-error ds:text-error-foreground\";\n case \"glass\":\n return \"ds:bg-white/15 ds:backdrop-blur-sm\";\n default:\n return \"\";\n }\n }, [color]);\n\n return (\n <DsAvatar\n className={cn(\n \"ds:relative ds:flex ds:shrink-0 ds:transition-all ds:duration-300\",\n avatarSize,\n avatarVariant,\n avatarAnimation?.className,\n avatarColor,\n className\n )}\n {...props}\n >\n {src && <AvatarImage src={src} alt={alt} className=\"ds:rounded-[inherit]\" />}\n <AvatarFallback\n className={cn(\"ds:rounded-[inherit]\", avatarColor, className)}\n >\n {fallback}\n </AvatarFallback>\n </DsAvatar>\n );\n}\n"],"names":["Avatar","size","variant","animation","color","className","src","alt","fallback","props","avatarAnimation","React","animationClass","avatarSize","avatarVariant","avatarColor","jsxs","DsAvatar","cn","jsx","AvatarImage","AvatarFallback"],"mappings":"q4DA0BO,SAASA,EAAO,CACrB,KAAAC,EAAO,KACP,QAAAC,EAAU,SACV,UAAAC,EACA,MAAAC,EACA,UAAAC,EACA,IAAAC,EACA,IAAAC,EACA,SAAAC,EACA,GAAGC,CACL,EAAgB,CACd,MAAMC,EAAkBC,EAAM,QAAuC,IAC5DC,EAAAA,eAAeT,EAAWE,CAAS,EACzC,CAACF,EAAWE,CAAS,CAAC,EAEnBQ,EAAaF,EAAM,QAAgB,IAAM,CAC7C,OAAQV,EAAA,CACN,IAAK,KACH,MAAO,YACT,IAAK,KACH,MAAO,YACT,IAAK,KACH,MAAO,aACT,IAAK,KACH,MAAO,aACT,IAAK,KACH,MAAO,aACT,QACE,MAAO,YAAA,CAEb,EAAG,CAACA,CAAI,CAAC,EAEHa,EAAgBH,EAAM,QAAgB,IAAM,CAChD,OAAQT,EAAA,CACN,IAAK,SACH,MAAO,kBACT,IAAK,SACH,MAAO,gBACT,QACE,MAAO,iBAAA,CAEb,EAAG,CAACA,CAAO,CAAC,EAENa,EAAcJ,EAAM,QAAgB,IAAM,CAC9C,OAAQP,EAAA,CACN,IAAK,UACH,MAAO,2CACT,IAAK,YACH,MAAO,+CACT,IAAK,OACH,MAAO,kCACT,IAAK,QACH,MAAO,wCACT,IAAK,WACH,MAAO,sCACT,IAAK,UACH,MAAO,2CACT,IAAK,UACH,MAAO,2CACT,IAAK,QACH,MAAO,uCACT,IAAK,QACH,MAAO,qCACT,QACE,MAAO,EAAA,CAEb,EAAG,CAACA,CAAK,CAAC,EAEV,OACEY,EAAAA,KAACC,EAAAA,OAAA,CACC,UAAWC,EAAAA,GACT,oEACAL,EACAC,EACAJ,GAAiB,UACjBK,EACAV,CAAA,EAED,GAAGI,EAEH,SAAA,CAAAH,GAAOa,EAAAA,IAACC,cAAA,CAAY,IAAAd,EAAU,IAAAC,EAAU,UAAU,uBAAuB,EAC1EY,EAAAA,IAACE,EAAAA,eAAA,CACC,UAAWH,EAAAA,GAAG,uBAAwBH,EAAaV,CAAS,EAE3D,SAAAG,CAAA,CAAA,CACH,CAAA,CAAA,CAGN"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Badge.cjs","sources":["../../../../src/components/Badge/Badge.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport {\n badgeVariants,\n Badge as SBadge,\n type BadgeProps as SBadgeProps,\n} from \"@dsui/ui/components/badge\";\nimport { cn } from \"@dsui/ui/lib/utils\";\nimport type { BadgeAnimation } from \"@/types/variables\";\nimport { LoaderCircle } from \"lucide-react\";\nimport { animationEffect } from \"@/utils/animations\";\n\nexport type BadgeProps = SBadgeProps & {\n animation?: BadgeAnimation;\n isLoading?: boolean;\n};\n\ntype AnimResult = {\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n variant?: SBadgeProps[\"variant\"];\n};\n\nconst Badge = React.forwardRef<HTMLSpanElement, BadgeProps>((props, ref) => {\n const { animation, ...rest } = props;\n\n const badgeAnimation = useMemo<AnimResult | null>(() => {\n return animationEffect<BadgeAnimation, SBadgeProps[\"variant\"]>({\n animation,\n children: rest?.children,\n className: rest?.className,\n rootClassName: badgeVariants({\n variant: rest?.variant,\n size: rest?.size,\n }),\n });\n }, [animation, rest]);\n\n return (\n <SBadge\n ref={ref}\n {...rest}\n className={cn(rest?.className, badgeAnimation?.className)}\n asChild={badgeAnimation?.children ? true : rest.asChild}\n >\n <>\n {rest?.isLoading && <LoaderCircle className=\"ds:animate-spin\" />}\n {!rest?.isLoading && (badgeAnimation?.children ?? rest.children)}\n </>\n </SBadge>\n );\n});\n\nBadge.displayName = \"Badge\";\nexport default Badge;\n"],"names":["Badge","React","props","ref","animation","rest","badgeAnimation","useMemo","animationEffect","badgeVariants","jsx","SBadge","cn","jsxs","Fragment","LoaderCircle"],"mappings":"+UAuBMA,EAAQC,EAAM,WAAwC,CAACC,EAAOC,IAAQ,CAC1E,KAAM,CAAE,UAAAC,EAAW,GAAGC,CAAA,EAASH,EAEzBI,EAAiBC,EAAAA,QAA2B,IACzCC,kBAAwD,CAC7D,UAAAJ,EACA,SAAUC,GAAM,SAChB,UAAWA,GAAM,UACjB,cAAeI,EAAAA,cAAc,CAC3B,QAASJ,GAAM,QACf,KAAMA,GAAM,IAAA,CACb,CAAA,CACF,EACA,CAACD,EAAWC,CAAI,CAAC,EAEpB,OACEK,EAAAA,IAACC,EAAAA,MAAA,CACC,IAAAR,EACC,GAAGE,EACJ,UAAWO,EAAAA,GAAGP,GAAM,UAAWC,GAAgB,SAAS,EACxD,QAASA,GAAgB,SAAW,GAAOD,EAAK,QAEhD,SAAAQ,EAAAA,KAAAC,WAAA,CACG,SAAA,CAAAT,GAAM,WAAaK,EAAAA,IAACK,EAAAA,aAAA,CAAa,UAAU,kBAAkB,EAC7D,CAACV,GAAM,YAAcC,GAAgB,UAAYD,EAAK,SAAA,CAAA,CACzD,CAAA,CAAA,CAGN,CAAC,EAEDL,EAAM,YAAc"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Breadcrumb.cjs","sources":["../../../../src/components/Breadcrumb/Breadcrumb.tsx"],"sourcesContent":["import React from \"react\";\nimport {\n Breadcrumb as SBreadcrumb,\n BreadcrumbList as SBreadcrumbList,\n BreadcrumbItem as SBreadcrumbItem,\n BreadcrumbLink as SBreadcrumbLink,\n BreadcrumbPage as SBreadcrumbPage,\n BreadcrumbSeparator as SBreadcrumbSeparator,\n BreadcrumbEllipsis as SBreadcrumbEllipsis,\n} from \"@dsui/ui/components/breadcrumb\";\nimport { cn } from \"@dsui/ui/lib/utils\";\nimport { Home } from \"lucide-react\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@dsui/ui/components/popover\";\n\nexport type BreadcrumbItemType = {\n label?: React.ReactNode;\n href?: string;\n icon?: React.ReactNode;\n};\n\nexport type BreadcrumbProps = React.ComponentProps<\"nav\"> & {\n variant?: \"default\" | \"compact\" | \"badge\" | \"bordered\";\n color?:\n | \"default\"\n | \"primary\"\n | \"secondary\"\n | \"accent\"\n | \"destructive\"\n | \"muted\"\n | \"success\"\n | \"error\"\n | \"warning\";\n items: BreadcrumbItemType[];\n separator?: React.ReactNode;\n maxItems?: number;\n showEllipsis?: boolean;\n showHome?:\n | boolean\n | \"label\"\n | \"icon\"\n | \"both\"\n | React.ReactNode\n | { label?: React.ReactNode; icon?: React.ReactNode; href?: string };\n showPopoverOnEllipsis?: boolean;\n};\n\nconst colorClasses = {\n default: \"\",\n primary:\n \"ds:text-primary ds:[&_[data-slot=breadcrumb-link]:hover]:text-primary/80 ds:[&_[data-slot=breadcrumb-page]]:text-primary\",\n secondary:\n \"ds:text-secondary ds:[&_[data-slot=breadcrumb-link]:hover]:text-secondary/80 ds:[&_[data-slot=breadcrumb-page]]:text-secondary\",\n accent:\n \"ds:text-accent ds:[&_[data-slot=breadcrumb-link]:hover]:text-accent/80 ds:[&_[data-slot=breadcrumb-page]]:text-accent\",\n destructive:\n \"ds:text-destructive ds:[&_[data-slot=breadcrumb-link]:hover]:text-destructive/80 ds:[&_[data-slot=breadcrumb-page]]:text-destructive\",\n muted:\n \"ds:text-muted-foreground ds:[&_[data-slot=breadcrumb-link]:hover]:text-muted-foreground/80 ds:[&_[data-slot=breadcrumb-page]]:text-muted-foreground\",\n success:\n \"ds:text-success ds:[&_[data-slot=breadcrumb-link]:hover]:text-success/80 ds:[&_[data-slot=breadcrumb-page]]:text-success\",\n error:\n \"ds:text-error ds:[&_[data-slot=breadcrumb-link]:hover]:text-error/80 ds:[&_[data-slot=breadcrumb-page]]:text-error\",\n warning:\n \"ds:text-warning ds:[&_[data-slot=breadcrumb-link]:hover]:text-warning/80 ds:[&_[data-slot=breadcrumb-page]]:text-warning\",\n};\n\nconst variantClasses = {\n default: \"\",\n compact:\n \"ds:text-xs ds:[&_[data-slot=breadcrumb-list]]:gap-1 ds:[&_[data-slot=breadcrumb-separator]>svg]:size-3\",\n badge:\n \"ds:[&_[data-slot=breadcrumb-list]]:gap-1 ds:[&_[data-slot=breadcrumb-item]]:border ds:[&_[data-slot=breadcrumb-item]]:bg-muted ds:[&_[data-slot=breadcrumb-item]]:px-2 ds:[&_[data-slot=breadcrumb-item]]:py-0.5 ds:[&_[data-slot=breadcrumb-item]]:rounded-full ds:[&_[data-slot=breadcrumb-item]]:text-sm\",\n bordered: \"ds:border ds:rounded-md ds:px-3 ds:py-2\",\n};\n\nconst Breadcrumb = React.forwardRef<HTMLElement, BreadcrumbProps>(\n (\n {\n className,\n variant = \"default\",\n color = \"default\",\n items,\n separator,\n maxItems,\n showEllipsis = true,\n showHome = \"label\",\n showPopoverOnEllipsis = false,\n ...props\n },\n ref\n ) => {\n const [popoverOpen, setPopoverOpen] = React.useState(false);\n const userItems = items;\n let homeItem: BreadcrumbItemType[] = [];\n const normalizedShowHome = showHome === true ? \"label\" : showHome;\n if (normalizedShowHome) {\n if (normalizedShowHome === \"label\") {\n homeItem = [{ label: \"Home\", href: \"/\" }];\n } else if (normalizedShowHome === \"icon\") {\n homeItem = [{ icon: <Home className=\"ds:size-4\" />, href: \"/\" }];\n } else if (normalizedShowHome === \"both\") {\n homeItem = [\n { label: \"Home\", icon: <Home className=\"ds:size-4\" />, href: \"/\" },\n ];\n } else if (\n typeof normalizedShowHome === \"object\" &&\n !React.isValidElement(normalizedShowHome)\n ) {\n // custom object\n homeItem = [normalizedShowHome as BreadcrumbItemType];\n } else {\n // ReactNode\n homeItem = [\n { label: normalizedShowHome as React.ReactNode, href: \"/\" },\n ];\n }\n }\n // Calculate which items to display\n let displayItems: BreadcrumbItemType[] = [];\n let hasEllipsis = false;\n let hiddenItems: BreadcrumbItemType[] = [];\n\n if (maxItems === 0) {\n displayItems = [...homeItem, ...userItems];\n } else if (maxItems) {\n const numUserItems = maxItems - homeItem.length;\n const truncatedUserItems =\n numUserItems > 0 ? userItems.slice(-numUserItems) : [];\n displayItems = [...homeItem, ...truncatedUserItems];\n hasEllipsis =\n numUserItems > 0 && userItems.length > numUserItems && showEllipsis;\n hiddenItems =\n numUserItems > 0 ? userItems.slice(0, -numUserItems) : userItems;\n } else {\n displayItems = [...homeItem, ...userItems];\n }\n\n const renderEllipsis = () => {\n if (showPopoverOnEllipsis) {\n return (\n <Popover open={popoverOpen} onOpenChange={setPopoverOpen}>\n <PopoverTrigger asChild>\n <SBreadcrumbItem>\n <SBreadcrumbEllipsis />\n </SBreadcrumbItem>\n </PopoverTrigger>\n <PopoverContent className=\"ds:w-auto ds:max-w-64 ds:p-2\">\n {hiddenItems.map((item, index) => (\n <div\n key={index}\n className=\"ds:flex ds:items-center ds:gap-2 ds:py-1 ds:px-3 ds:rounded ds:hover:bg-muted\"\n >\n {item.icon}\n {item.label && (\n <a href={item.href} className=\"ds:text-sm ds:hover:underline\">\n {item.label}\n </a>\n )}\n </div>\n ))}\n </PopoverContent>\n </Popover>\n );\n }\n return (\n <SBreadcrumbItem>\n <SBreadcrumbEllipsis />\n </SBreadcrumbItem>\n );\n };\n\n return (\n <SBreadcrumb\n ref={ref}\n className={cn(variantClasses[variant], className)}\n {...props}\n >\n <SBreadcrumbList className={colorClasses[color]}>\n {hasEllipsis && homeItem.length === 0 && (\n <>\n {renderEllipsis()}\n <SBreadcrumbSeparator>{separator}</SBreadcrumbSeparator>\n </>\n )}\n {displayItems.map((item, index) => {\n const isLast = index === displayItems.length - 1;\n const shouldShowEllipsisAfter =\n hasEllipsis && index === 0 && homeItem.length > 0;\n return (\n <React.Fragment key={index}>\n <SBreadcrumbItem>\n {isLast ? (\n <SBreadcrumbPage>\n <div className=\"ds:flex ds:items-center ds:gap-1\">\n {item.icon}\n {item.label}\n </div>\n </SBreadcrumbPage>\n ) : (\n <SBreadcrumbLink href={item.href}>\n <div className=\"ds:flex ds:items-center ds:gap-1\">\n {item.icon}\n {item.label}\n </div>\n </SBreadcrumbLink>\n )}\n </SBreadcrumbItem>\n {shouldShowEllipsisAfter && (\n <>\n <SBreadcrumbSeparator>{separator}</SBreadcrumbSeparator>\n {renderEllipsis()}\n </>\n )}\n {!isLast && (\n <SBreadcrumbSeparator>{separator}</SBreadcrumbSeparator>\n )}\n </React.Fragment>\n );\n })}\n </SBreadcrumbList>\n </SBreadcrumb>\n );\n }\n);\n\nBreadcrumb.displayName = \"Breadcrumb\";\n\nexport default Breadcrumb;\n"],"names":["colorClasses","variantClasses","Breadcrumb","React","className","variant","color","items","separator","maxItems","showEllipsis","showHome","showPopoverOnEllipsis","props","ref","popoverOpen","setPopoverOpen","userItems","homeItem","normalizedShowHome","jsx","Home","displayItems","hasEllipsis","hiddenItems","numUserItems","truncatedUserItems","renderEllipsis","jsxs","Popover","PopoverTrigger","SBreadcrumbItem","SBreadcrumbEllipsis","PopoverContent","item","index","SBreadcrumb","cn","SBreadcrumbList","Fragment","SBreadcrumbSeparator","isLast","shouldShowEllipsisAfter","SBreadcrumbPage","SBreadcrumbLink"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Button.cjs","sources":["../../../../src/components/Button/Button.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport {\n buttonVariants,\n Button as SButton,\n type ButtonProps as SButtonProps,\n} from \"@dsui/ui/components/button\";\nimport { cn } from \"@dsui/ui/lib/utils\";\nimport type { ButtonAnimation } from \"@/types/variables\";\nimport { LoaderCircle } from \"lucide-react\";\nimport { animationEffect } from \"@/utils/animations\";\n\nexport type ButtonProps = SButtonProps & {\n animation?: ButtonAnimation;\n isLoading?: boolean;\n};\n\ntype AnimResult = {\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n variant?: SButtonProps[\"variant\"];\n};\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (props, ref) => {\n const {\n variant = \"solid\",\n size = \"normal\",\n animation,\n ...rest\n } = props;\n\n const buttonAnimation = useMemo<AnimResult | null>(() => {\n return animationEffect<ButtonAnimation, SButtonProps[\"variant\"]>({\n animation,\n children: rest?.children,\n className: rest?.className,\n rootClassName: buttonVariants({\n variant: variant,\n size: size,\n }),\n variantType: variant,\n ...rest,\n });\n }, [animation, rest, size, variant]);\n\n // Disable asChild when loading to avoid React.Children.only error\n const shouldUseAsChild =\n (buttonAnimation?.children ? true : rest.asChild) && !rest?.isLoading;\n\n const buttonContent = rest?.isLoading ? (\n <>\n <LoaderCircle className=\"ds:animate-spin\" />\n {\n (buttonAnimation?.children ??\n rest.children ??\n null) as SButtonProps[\"children\"]\n }\n </>\n ) : (\n ((buttonAnimation?.children ??\n rest.children ??\n null) as SButtonProps[\"children\"])\n );\n\n return (\n <SButton\n ref={ref}\n {...rest}\n className={cn(\n \"ds:cursor-pointer ds:group\",\n rest?.className,\n buttonAnimation?.className\n )}\n asChild={shouldUseAsChild}\n style={{ ...(rest.style || {}), ...(buttonAnimation?.style || {}) }}\n variant={buttonAnimation?.variant ?? variant}\n size={size}\n >\n {buttonContent}\n </SButton>\n );\n }\n);\n\nButton.displayName = \"Button\";\nexport default Button;\n"],"names":["Button","React","props","ref","variant","size","animation","rest","buttonAnimation","useMemo","animationEffect","buttonVariants","shouldUseAsChild","buttonContent","jsxs","Fragment","jsx","LoaderCircle","SButton","cn"],"mappings":"gVAuBMA,EAASC,EAAM,WACnB,CAACC,EAAOC,IAAQ,CACd,KAAM,CACJ,QAAAC,EAAU,QACV,KAAAC,EAAO,SACP,UAAAC,EACA,GAAGC,CAAA,EACDL,EAEEM,EAAkBC,EAAAA,QAA2B,IAC1CC,kBAA0D,CAC/D,UAAAJ,EACA,SAAUC,GAAM,SAChB,UAAWA,GAAM,UACjB,cAAeI,EAAAA,eAAe,CAC5B,QAAAP,EACA,KAAAC,CAAA,CACD,EACD,YAAaD,EACb,GAAGG,CAAA,CACJ,EACA,CAACD,EAAWC,EAAMF,EAAMD,CAAO,CAAC,EAG7BQ,GACHJ,GAAiB,SAAW,GAAOD,EAAK,UAAY,CAACA,GAAM,UAExDM,EAAgBN,GAAM,UAC1BO,EAAAA,KAAAC,EAAAA,SAAA,CACE,SAAA,CAAAC,EAAAA,IAACC,EAAAA,aAAA,CAAa,UAAU,iBAAA,CAAkB,EAEvCT,GAAiB,UAChBD,EAAK,UACL,IAAA,CAAA,CAEN,EAEEC,GAAiB,UACjBD,EAAK,UACL,KAGJ,OACES,EAAAA,IAACE,EAAAA,OAAA,CACC,IAAAf,EACC,GAAGI,EACJ,UAAWY,EAAAA,GACT,6BACAZ,GAAM,UACNC,GAAiB,SAAA,EAEnB,QAASI,EACT,MAAO,CAAE,GAAIL,EAAK,OAAS,CAAA,EAAK,GAAIC,GAAiB,OAAS,EAAC,EAC/D,QAASA,GAAiB,SAAWJ,EACrC,KAAAC,EAEC,SAAAQ,CAAA,CAAA,CAGP,CACF,EAEAb,EAAO,YAAc"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ButtonGroup.cjs","sources":["../../../../src/components/Button/ButtonGroup.tsx"],"sourcesContent":["import React from \"react\";\nimport {\n ButtonGroup as SButtonGroup,\n ButtonGroupSeparator,\n ButtonGroupText,\n buttonGroupVariants,\n} from \"@dsui/ui/components/button-group\";\nimport { cn } from \"@dsui/ui/lib/utils\";\nimport { type VariantProps } from \"class-variance-authority\";\nimport Button, { type ButtonProps } from \"./Button\";\n\nexport type ButtonGroupProps = React.ComponentProps<typeof SButtonGroup> &\n VariantProps<typeof buttonGroupVariants> & {\n variant?: ButtonProps[\"variant\"];\n color?: ButtonProps[\"color\"];\n size?: ButtonProps[\"size\"];\n animation?: ButtonProps[\"animation\"];\n isLoading?: ButtonProps[\"isLoading\"];\n disabled?: boolean;\n };\n\nconst ButtonGroup = React.forwardRef<HTMLDivElement, ButtonGroupProps>(\n (\n {\n className,\n orientation = \"horizontal\",\n variant,\n color,\n size,\n animation,\n isLoading,\n disabled,\n children,\n ...props\n },\n ref\n ) => {\n const childrenWithProps = React.Children.map(children, (child) => {\n if (React.isValidElement(child) && child.type === Button) {\n const childProps = child.props as ButtonProps;\n return React.cloneElement(child as React.ReactElement<ButtonProps>, {\n variant:\n animation === \"glass\" ? \"ghost\" : (childProps.variant ?? variant),\n color: childProps.color ?? color,\n size: childProps.size ?? size,\n animation: childProps.animation ?? animation,\n isLoading: childProps.isLoading ?? isLoading,\n disabled: childProps.disabled ?? disabled,\n });\n }\n return child;\n });\n\n return (\n <SButtonGroup\n ref={ref}\n orientation={orientation}\n className={cn(className)}\n {...props}\n >\n {childrenWithProps}\n </SButtonGroup>\n );\n }\n);\n\nButtonGroup.displayName = \"ButtonGroup\";\n\nexport { ButtonGroupSeparator, ButtonGroupText };\nexport default ButtonGroup;\n"],"names":["ButtonGroup","React","className","orientation","variant","color","size","animation","isLoading","disabled","children","props","ref","childrenWithProps","child","Button","childProps","jsx","SButtonGroup","cn"],"mappings":"wVAqBMA,EAAcC,EAAM,WACxB,CACE,CACE,UAAAC,EACA,YAAAC,EAAc,aACd,QAAAC,EACA,MAAAC,EACA,KAAAC,EACA,UAAAC,EACA,UAAAC,EACA,SAAAC,EACA,SAAAC,EACA,GAAGC,CAAA,EAELC,IACG,CACH,MAAMC,EAAoBZ,EAAM,SAAS,IAAIS,EAAWI,GAAU,CAChE,GAAIb,EAAM,eAAea,CAAK,GAAKA,EAAM,OAASC,UAAQ,CACxD,MAAMC,EAAaF,EAAM,MACzB,OAAOb,EAAM,aAAaa,EAA0C,CAClE,QACEP,IAAc,QAAU,QAAWS,EAAW,SAAWZ,EAC3D,MAAOY,EAAW,OAASX,EAC3B,KAAMW,EAAW,MAAQV,EACzB,UAAWU,EAAW,WAAaT,EACnC,UAAWS,EAAW,WAAaR,EACnC,SAAUQ,EAAW,UAAYP,CAAA,CAClC,CACH,CACA,OAAOK,CACT,CAAC,EAED,OACEG,EAAAA,IAACC,EAAAA,YAAA,CACC,IAAAN,EACA,YAAAT,EACA,UAAWgB,EAAAA,GAAGjB,CAAS,EACtB,GAAGS,EAEH,SAAAE,CAAA,CAAA,CAGP,CACF,EAEAb,EAAY,YAAc"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Calendar.cjs","sources":["../../../../src/components/Calendar/Calendar.tsx"],"sourcesContent":["import {\n CalendarDayButton as SCalendarDayButton,\n type CalendarDayButtonProps as SCalendarDayButtonProps,\n Calendar as SCalendar,\n type CalendarProps as SCalendarProps,\n type CalendarColor,\n} from \"@dsui/ui/components/calendar\";\nimport { cn } from \"@dsui/ui/index\";\nimport { vi, enUS } from \"date-fns/locale\";\n\nexport type DateRange = {\n from: Date | undefined;\n to?: Date | undefined;\n};\n\nexport type CalendarProps = SCalendarProps & {\n language?: \"vi\" | \"en\";\n variant?: \"default\" | \"rounded\";\n color?: CalendarColor;\n};\n\nexport function Calendar({\n language = \"vi\",\n className,\n captionLayout = \"dropdown\",\n formatters,\n buttonVariant,\n locale,\n variant = \"default\",\n color = \"primary\",\n ...props\n}: CalendarProps) {\n const _locale = locale ? locale : language === \"en\" ? enUS : vi;\n\n return (\n <SCalendar\n {...props}\n locale={_locale}\n buttonVariant={buttonVariant}\n captionLayout={captionLayout}\n variant={variant}\n color={color}\n formatters={{\n formatMonthDropdown: (date: Date) =>\n date.toLocaleString(_locale.code, { month: \"short\" }),\n ...formatters,\n }}\n className={cn(\n \"ds:mx-auto ds:[--cell-size:clamp(0px,calc(100vw/7.5),40px)]\",\n className\n )}\n />\n );\n}\n\nexport const CalendarDayButton = SCalendarDayButton;\nexport type {\n CalendarDayButtonProps,\n CalendarColor,\n} from \"@dsui/ui/components/calendar\";\n"],"names":["Calendar","language","className","captionLayout","formatters","buttonVariant","locale","variant","color","props","_locale","enUS","vi","jsx","SCalendar","date","cn","CalendarDayButton","SCalendarDayButton"],"mappings":"smDAqBO,SAASA,EAAS,CACvB,SAAAC,EAAW,KACX,UAAAC,EACA,cAAAC,EAAgB,WAChB,WAAAC,EACA,cAAAC,EAAA,OACAC,EACA,QAAAC,EAAU,UACV,MAAAC,EAAQ,UACR,GAAGC,CACL,EAAkB,CAChB,MAAMC,EAAUJ,IAAkBL,IAAa,KAAOU,EAAAA,KAAOC,EAAAA,IAE7D,OACEC,EAAAA,IAACC,EAAAA,SAAA,CACE,GAAGL,EACJ,OAAQC,EACR,cAAAL,EACA,cAAAF,EACA,QAAAI,EACA,MAAAC,EACA,WAAY,CACV,oBAAsBO,GACpBA,EAAK,eAAeL,EAAQ,KAAM,CAAE,MAAO,QAAS,EACtD,GAAGN,CAAA,EAEL,UAAWY,EAAAA,GACT,8DACAd,CAAA,CACF,CAAA,CAGN,CAEO,MAAMe,EAAoBC,EAAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Carousel.cjs","sources":["../../../../src/components/Carousel/Carousel.tsx"],"sourcesContent":["import React, {\n useState,\n useEffect,\n useRef,\n useCallback,\n useMemo,\n Children,\n isValidElement,\n cloneElement,\n} from \"react\";\nimport {\n ChevronLeft,\n ChevronRight,\n ChevronUp,\n ChevronDown,\n} from \"lucide-react\";\nimport { cn } from \"@dsui/ui/lib/utils\";\nimport { ImageViewer } from \"../ImageViewer\";\nimport type { ImageInfo } from \"../ImageViewer\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type SliderEffect =\n | \"slide\"\n | \"fade\"\n | \"cube\"\n | \"coverflow\"\n | \"flip\"\n | \"cards\";\n\nexport type SliderDirection = \"horizontal\" | \"vertical\";\n\nexport type PaginationType =\n | \"bullets\"\n | \"fraction\"\n | \"progressbar\"\n | \"scrollbar\"\n | \"custom\";\n\nexport interface AutoplayOptions {\n delay?: number;\n disableOnInteraction?: boolean;\n pauseOnMouseEnter?: boolean;\n reverseDirection?: boolean;\n stopOnLastSlide?: boolean;\n}\n\nexport interface BreakpointOptions {\n slidesPerView?: number;\n spaceBetween?: number;\n slidesPerGroup?: number;\n}\n\nexport interface NavigationOptions {\n enabled?: boolean;\n prevEl?: React.ReactNode;\n nextEl?: React.ReactNode;\n hideOnClick?: boolean;\n position?: \"inside\" | \"outside\"; // inside = overlay on image, outside = beside image\n}\n\nexport interface PaginationOptions {\n enabled?: boolean;\n type?: PaginationType;\n clickable?: boolean;\n dynamicBullets?: boolean;\n dynamicMainBullets?: number;\n position?: \"inside\" | \"outside\"; // inside = overlay on image, outside = below image\n renderBullet?: (index: number, className: string) => React.ReactNode;\n renderFraction?: (\n currentClass: string,\n totalClass: string\n ) => React.ReactNode;\n renderProgressbar?: (progressbarFillClass: string) => React.ReactNode;\n renderScrollbar?: (scrollbarDragClass: string) => React.ReactNode;\n renderCustom?: (current: number, total: number) => React.ReactNode;\n}\n\nexport interface CarouselProps {\n children: React.ReactNode;\n // Core\n initialSlide?: number;\n direction?: SliderDirection;\n speed?: number;\n spaceBetween?: number;\n slidesPerView?: number | \"auto\";\n slidesPerGroup?: number;\n centeredSlides?: boolean;\n loop?: boolean;\n loopedSlides?: number;\n rewind?: boolean;\n effect?: SliderEffect;\n // Responsive breakpoints\n breakpoints?: Record<number, BreakpointOptions>;\n // Navigation\n navigation?: boolean | NavigationOptions;\n // Pagination\n pagination?: boolean | PaginationOptions;\n // Autoplay\n autoplay?: boolean | AutoplayOptions;\n // Interaction\n allowTouchMove?: boolean;\n grabCursor?: boolean;\n keyboard?: boolean;\n mousewheel?: boolean;\n freeMode?: boolean;\n // Styling\n className?: string;\n containerClassName?: string;\n wrapperClassName?: string;\n slideClassName?: string;\n // Image Viewer\n enableImageViewer?: boolean;\n // Callbacks\n onSlideChange?: (swiper: { activeIndex: number; realIndex: number }) => void;\n onReachBeginning?: () => void;\n onReachEnd?: () => void;\n onAutoplayStart?: () => void;\n onAutoplayStop?: () => void;\n}\n\n// ============================================================================\n// Carousel Slide Component Types\n// ============================================================================\n\nexport interface CarouselSlideProps\n extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n}\n\n// ============================================================================\n// Carousel Component\n// ============================================================================\n\nexport const Carousel = React.forwardRef<HTMLDivElement, CarouselProps>(\n (\n {\n children,\n initialSlide = 0,\n direction = \"horizontal\",\n speed = 300,\n spaceBetween = 0,\n slidesPerView = 1,\n slidesPerGroup = 1,\n centeredSlides = false,\n loop = false,\n rewind = false,\n effect = \"slide\",\n breakpoints,\n navigation = false,\n pagination = false,\n autoplay = false,\n allowTouchMove = true,\n grabCursor = true,\n keyboard = false,\n mousewheel = false,\n className,\n containerClassName,\n wrapperClassName,\n slideClassName,\n enableImageViewer = false,\n onSlideChange,\n onReachBeginning,\n onReachEnd,\n onAutoplayStart,\n onAutoplayStop,\n },\n ref\n ) => {\n // Parse navigation options\n const navigationOptions: NavigationOptions =\n typeof navigation === \"boolean\"\n ? { enabled: navigation, position: \"inside\" }\n : { enabled: true, position: \"inside\", ...navigation };\n\n // Parse pagination options\n const paginationOptions: PaginationOptions =\n typeof pagination === \"boolean\"\n ? { enabled: pagination, type: \"bullets\", position: \"inside\" }\n : { enabled: true, type: \"bullets\", position: \"inside\", ...pagination };\n\n // Parse autoplay options\n const autoplayOptions: AutoplayOptions = useMemo(\n () =>\n typeof autoplay === \"boolean\"\n ? { delay: 3000, disableOnInteraction: true }\n : { delay: 3000, disableOnInteraction: true, ...autoplay },\n [autoplay]\n );\n\n // State\n const [activeIndex, setActiveIndex] = useState(initialSlide);\n const [isBeginning, setIsBeginning] = useState(initialSlide === 0);\n const [isEnd, setIsEnd] = useState(false);\n const [isDragging, setIsDragging] = useState(false);\n const [translate, setTranslate] = useState(0);\n const [isAutoplayRunning, setIsAutoplayRunning] = useState(false);\n const [showScrollbar, setShowScrollbar] = useState(false);\n const [windowWidth, setWindowWidth] = useState(\n typeof window !== \"undefined\" ? window.innerWidth : 1024\n );\n const [viewerVisible, setViewerVisible] = useState(false);\n const [viewerIndex, setViewerIndex] = useState(0);\n\n // Handle window resize for breakpoints\n useEffect(() => {\n if (!breakpoints) return;\n\n const handleResize = () => {\n setWindowWidth(window.innerWidth);\n };\n\n window.addEventListener(\"resize\", handleResize);\n return () => window.removeEventListener(\"resize\", handleResize);\n }, [breakpoints]);\n\n // Get current breakpoint values\n const currentBreakpoint = useMemo(() => {\n if (!breakpoints) {\n return { slidesPerView, spaceBetween, slidesPerGroup };\n }\n\n const breakpointKeys = Object.keys(breakpoints)\n .map(Number)\n .sort((a, b) => b - a); // Sort descending\n\n for (const breakpoint of breakpointKeys) {\n if (windowWidth >= breakpoint) {\n return {\n slidesPerView:\n breakpoints[breakpoint].slidesPerView ?? slidesPerView,\n spaceBetween: breakpoints[breakpoint].spaceBetween ?? spaceBetween,\n slidesPerGroup:\n breakpoints[breakpoint].slidesPerGroup ?? slidesPerGroup,\n };\n }\n }\n\n return { slidesPerView, spaceBetween, slidesPerGroup };\n }, [breakpoints, windowWidth, slidesPerView, spaceBetween, slidesPerGroup]);\n\n // Use breakpoint values\n const actualSlidesPerView = currentBreakpoint.slidesPerView;\n const actualSpaceBetween = currentBreakpoint.spaceBetween;\n const actualSlidesPerGroup = currentBreakpoint.slidesPerGroup;\n\n // Refs\n const containerRef = useRef<HTMLDivElement>(null);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const autoplayTimerRef = useRef<number | null>(null);\n const scrollbarTimerRef = useRef<number | null>(null);\n const dragStateRef = useRef({\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n });\n const hasDraggedRef = useRef(false);\n\n // Get slides\n const slides = Children.toArray(children).filter(\n (child) => isValidElement(child) && child.type === CarouselSlide\n );\n const totalSlides = slides.length;\n\n // Helper function to find image in children\n const findImageInChildren = useCallback(\n (\n children: React.ReactNode\n ): React.ReactElement<\n React.ImgHTMLAttributes<HTMLImageElement>\n > | null => {\n let result: React.ReactElement<\n React.ImgHTMLAttributes<HTMLImageElement>\n > | null = null;\n\n React.Children.forEach(children, (child) => {\n if (result) return;\n\n if (isValidElement(child)) {\n if (child.type === \"img\") {\n result = child as React.ReactElement<\n React.ImgHTMLAttributes<HTMLImageElement>\n >;\n } else if (\n child.props &&\n typeof child.props === \"object\" &&\n \"children\" in child.props\n ) {\n result = findImageInChildren(\n child.props.children as React.ReactNode\n );\n }\n }\n });\n\n return result;\n },\n []\n );\n\n // Extract images for ImageViewer\n const imageInfos = useMemo((): ImageInfo[] => {\n if (!enableImageViewer) return [];\n\n return slides.map((slide) => {\n const slideElement = slide as React.ReactElement<CarouselSlideProps>;\n const imgElement = findImageInChildren(slideElement.props.children);\n\n if (imgElement) {\n return {\n src: imgElement.props.src || \"\",\n alt: imgElement.props.alt || \"\",\n };\n }\n\n return { src: \"\", alt: \"\" };\n });\n }, [slides, enableImageViewer, findImageInChildren]);\n\n // Handle slide click for image viewer\n const handleSlideClick = useCallback(\n (index: number) => {\n console.log(\"Slide clicked:\", {\n index,\n enableImageViewer,\n hasSrc: !!imageInfos[index]?.src,\n hasDragged: hasDraggedRef.current,\n imageInfos,\n });\n\n // Only open viewer if not dragged\n if (\n enableImageViewer &&\n imageInfos[index]?.src &&\n !hasDraggedRef.current\n ) {\n console.log(\"Opening viewer at index:\", index);\n setViewerIndex(index);\n setViewerVisible(true);\n }\n },\n [enableImageViewer, imageInfos]\n );\n\n // Calculate visible slides\n const visibleSlides =\n actualSlidesPerView === \"auto\"\n ? 1\n : Math.min(actualSlidesPerView as number, totalSlides);\n\n // Update beginning/end state\n useEffect(() => {\n if (loop) {\n setIsBeginning(false);\n setIsEnd(false);\n } else {\n setIsBeginning(activeIndex === 0);\n setIsEnd(activeIndex >= totalSlides - visibleSlides);\n }\n }, [activeIndex, totalSlides, visibleSlides, loop]);\n\n // Slide to index\n const slideTo = useCallback(\n (index: number) => {\n let newIndex = index;\n\n if (loop) {\n // In loop mode, allow any index\n newIndex = ((index % totalSlides) + totalSlides) % totalSlides;\n } else if (rewind) {\n // In rewind mode, wrap around\n if (index < 0) newIndex = totalSlides - 1;\n else if (index >= totalSlides) newIndex = 0;\n else newIndex = index;\n } else {\n // Normal mode, clamp to bounds\n newIndex = Math.max(0, Math.min(index, totalSlides - visibleSlides));\n }\n\n setActiveIndex(newIndex);\n\n // Calculate translate\n const containerSize =\n direction === \"horizontal\"\n ? containerRef.current?.offsetWidth || 0\n : containerRef.current?.offsetHeight || 0;\n\n const slideSize = containerSize / visibleSlides;\n let newTranslate = -newIndex * (slideSize + actualSpaceBetween);\n\n if (centeredSlides && visibleSlides < totalSlides) {\n newTranslate += containerSize / 2 - slideSize / 2;\n }\n\n setTranslate(newTranslate);\n\n // Show scrollbar on slide change\n if (paginationOptions.type === \"scrollbar\") {\n setShowScrollbar(true);\n if (scrollbarTimerRef.current) {\n clearTimeout(scrollbarTimerRef.current);\n }\n scrollbarTimerRef.current = setTimeout(() => {\n setShowScrollbar(false);\n }, 1000) as unknown as number;\n }\n\n // Callbacks\n onSlideChange?.({ activeIndex: newIndex, realIndex: newIndex });\n\n if (newIndex === 0) onReachBeginning?.();\n if (newIndex >= totalSlides - visibleSlides) onReachEnd?.();\n },\n [\n totalSlides,\n visibleSlides,\n loop,\n rewind,\n direction,\n actualSpaceBetween,\n centeredSlides,\n paginationOptions.type,\n onSlideChange,\n onReachBeginning,\n onReachEnd,\n ]\n );\n\n // Navigation\n const slideNext = useCallback(() => {\n slideTo(activeIndex + actualSlidesPerGroup);\n }, [activeIndex, actualSlidesPerGroup, slideTo]);\n\n const slidePrev = useCallback(() => {\n slideTo(activeIndex - actualSlidesPerGroup);\n }, [activeIndex, actualSlidesPerGroup, slideTo]);\n\n // Autoplay\n const stopAutoplay = useCallback(() => {\n if (autoplayTimerRef.current) {\n clearInterval(autoplayTimerRef.current);\n autoplayTimerRef.current = null;\n }\n setIsAutoplayRunning(false);\n onAutoplayStop?.();\n }, [onAutoplayStop]);\n\n const startAutoplay = useCallback(() => {\n if (!autoplay) return;\n\n autoplayTimerRef.current = setInterval(() => {\n if (autoplayOptions.reverseDirection) {\n slidePrev();\n } else {\n slideNext();\n }\n\n if (autoplayOptions.stopOnLastSlide && isEnd) {\n stopAutoplay();\n }\n }, autoplayOptions.delay) as unknown as number;\n\n setIsAutoplayRunning(true);\n onAutoplayStart?.();\n }, [\n autoplayOptions,\n autoplay,\n slideNext,\n slidePrev,\n isEnd,\n onAutoplayStart,\n stopAutoplay,\n ]);\n\n // Auto-start autoplay\n useEffect(() => {\n if (autoplay) {\n startAutoplay();\n }\n return () => stopAutoplay();\n }, [autoplay, startAutoplay, stopAutoplay]);\n\n // Pause on hover\n const handleMouseEnter = useCallback(() => {\n if (autoplayOptions.pauseOnMouseEnter && isAutoplayRunning) {\n stopAutoplay();\n }\n }, [autoplayOptions.pauseOnMouseEnter, isAutoplayRunning, stopAutoplay]);\n\n const handleMouseLeave = useCallback(() => {\n if (autoplayOptions.pauseOnMouseEnter && autoplay && !isAutoplayRunning) {\n startAutoplay();\n }\n }, [\n autoplayOptions.pauseOnMouseEnter,\n autoplay,\n isAutoplayRunning,\n startAutoplay,\n ]);\n\n // Touch/drag handlers\n const handlePointerDown = useCallback(\n (e: React.PointerEvent) => {\n if (!allowTouchMove) return;\n\n try {\n e.currentTarget.setPointerCapture(e.pointerId);\n } catch (err) {\n console.error(\"Failed to capture pointer:\", err);\n }\n\n dragStateRef.current.startX = e.clientX;\n dragStateRef.current.startY = e.clientY;\n dragStateRef.current.currentX = e.clientX;\n dragStateRef.current.currentY = e.clientY;\n hasDraggedRef.current = false;\n setIsDragging(true);\n\n if (autoplayOptions.disableOnInteraction) {\n stopAutoplay();\n }\n },\n [allowTouchMove, autoplayOptions.disableOnInteraction, stopAutoplay]\n );\n\n const handlePointerMove = useCallback(\n (e: React.PointerEvent) => {\n if (!allowTouchMove) return;\n\n const startX = dragStateRef.current.startX;\n const startY = dragStateRef.current.startY;\n\n // Check if drag has started (startX/Y are set)\n if (startX === 0 && startY === 0) return;\n\n e.preventDefault();\n dragStateRef.current.currentX = e.clientX;\n dragStateRef.current.currentY = e.clientY;\n\n // Mark as dragged if moved more than 5px\n const diffX = Math.abs(e.clientX - dragStateRef.current.startX);\n const diffY = Math.abs(e.clientY - dragStateRef.current.startY);\n if (diffX > 5 || diffY > 5) {\n hasDraggedRef.current = true;\n }\n\n setIsDragging(true);\n },\n [allowTouchMove]\n );\n\n const handlePointerUp = useCallback(() => {\n const startX = dragStateRef.current.startX;\n const startY = dragStateRef.current.startY;\n\n // Check if we actually dragged\n if (startX === 0 && startY === 0) return;\n\n const diffX = dragStateRef.current.currentX - startX;\n const diffY = dragStateRef.current.currentY - startY;\n const diff = direction === \"horizontal\" ? diffX : diffY;\n\n // Determine slide action with lower threshold\n const threshold = 0;\n if (Math.abs(diff) > threshold && hasDraggedRef.current) {\n if (diff > 0) {\n // Swipe right/down = previous slide\n slidePrev();\n } else {\n // Swipe left/up = next slide\n slideNext();\n }\n } else {\n // Snap back to current\n slideTo(activeIndex);\n }\n\n // Reset after a small delay to allow onClick to check the flag\n setTimeout(() => {\n setIsDragging(false);\n dragStateRef.current.startX = 0;\n dragStateRef.current.startY = 0;\n dragStateRef.current.currentX = 0;\n dragStateRef.current.currentY = 0;\n hasDraggedRef.current = false;\n }, 50);\n }, [direction, slidePrev, slideNext, slideTo, activeIndex]);\n\n // Keyboard navigation\n useEffect(() => {\n if (!keyboard) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"ArrowLeft\" || e.key === \"ArrowUp\") {\n e.preventDefault();\n slidePrev();\n } else if (e.key === \"ArrowRight\" || e.key === \"ArrowDown\") {\n e.preventDefault();\n slideNext();\n }\n };\n\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\n }, [keyboard, slideNext, slidePrev]);\n\n // Mousewheel navigation\n useEffect(() => {\n if (!mousewheel) return;\n\n const handleWheel = (e: WheelEvent) => {\n e.preventDefault();\n if (e.deltaY > 0) slideNext();\n else if (e.deltaY < 0) slidePrev();\n };\n\n const container = containerRef.current;\n if (container) {\n container.addEventListener(\"wheel\", handleWheel, { passive: false });\n return () => container.removeEventListener(\"wheel\", handleWheel);\n }\n }, [mousewheel, slideNext, slidePrev]);\n\n // Render pagination\n const renderPagination = () => {\n if (!paginationOptions.enabled) return null;\n\n const {\n type,\n clickable,\n dynamicBullets,\n dynamicMainBullets = 1,\n position = \"inside\",\n } = paginationOptions;\n\n const isOutside = position === \"outside\";\n\n if (type === \"bullets\") {\n const bulletsToShow = dynamicBullets\n ? Math.min(dynamicMainBullets * 2 + 1, totalSlides)\n : totalSlides;\n\n return (\n <div\n className={cn(\n \"ds:flex ds:items-center ds:justify-center ds:gap-2\",\n isOutside\n ? \"ds:mt-4\" // Outside: margin-top for spacing\n : \"ds:absolute ds:bottom-4 ds:left-1/2 ds:-translate-x-1/2\", // Inside: overlay\n direction === \"vertical\" &&\n !isOutside &&\n \"ds:flex-col ds:right-4 ds:left-auto ds:top-1/2 ds:-translate-y-1/2 ds:translate-x-0 ds:bottom-auto\"\n )}\n >\n {Array.from({ length: bulletsToShow }).map((_, i) => {\n const bulletIndex = dynamicBullets\n ? Math.max(\n 0,\n Math.min(\n i + activeIndex - dynamicMainBullets,\n totalSlides - 1\n )\n )\n : i;\n\n const isActive = bulletIndex === activeIndex;\n\n return paginationOptions.renderBullet ? (\n <React.Fragment key={bulletIndex}>\n {paginationOptions.renderBullet(\n bulletIndex,\n cn(\n \"ds:carousel-pagination-bullet\",\n isActive && \"ds:carousel-pagination-bullet-active\"\n )\n )}\n </React.Fragment>\n ) : (\n <button\n key={bulletIndex}\n onClick={() => clickable && slideTo(bulletIndex)}\n className={cn(\n \"ds:rounded-full ds:transition-all\",\n direction === \"horizontal\" ? \"ds:w-2 ds:h-2\" : \"ds:w-2 ds:h-2\",\n isActive\n ? direction === \"horizontal\"\n ? \"ds:bg-primary ds:w-6\"\n : \"ds:bg-primary ds:h-6\"\n : \"ds:bg-muted-foreground/30 ds:hover:bg-muted-foreground/50\",\n clickable && \"ds:cursor-pointer\"\n )}\n aria-label={`Go to slide ${bulletIndex + 1}`}\n />\n );\n })}\n </div>\n );\n }\n\n if (type === \"fraction\") {\n return (\n <div\n className={cn(\n \"ds:text-center ds:text-sm ds:text-muted-foreground ds:bg-background/80 ds:backdrop-blur ds:px-3 ds:py-1 ds:rounded-full\",\n isOutside\n ? \"ds:mt-4 ds:mx-auto ds:w-fit\" // Outside: centered with margin\n : \"ds:absolute ds:bottom-4 ds:left-1/2 ds:-translate-x-1/2\" // Inside: overlay\n )}\n >\n {paginationOptions.renderFraction ? (\n paginationOptions.renderFraction(\n \"carousel-pagination-current\",\n \"carousel-pagination-total\"\n )\n ) : (\n <>\n <span className=\"ds:carousel-pagination-current ds:font-semibold ds:text-foreground\">\n {activeIndex + 1}\n </span>\n {\" / \"}\n <span className=\"ds:carousel-pagination-total\">{totalSlides}</span>\n </>\n )}\n </div>\n );\n }\n\n if (type === \"progressbar\") {\n const progress = ((activeIndex + 1) / totalSlides) * 100;\n const isInside = paginationOptions.position === \"inside\";\n\n const handleProgressbarClick = (\n e: React.MouseEvent<HTMLDivElement>\n ) => {\n if (!clickable) return;\n const rect = e.currentTarget.getBoundingClientRect();\n const clickX = e.clientX - rect.left;\n const percentage = clickX / rect.width;\n const targetIndex = Math.floor(percentage * totalSlides);\n slideTo(Math.min(targetIndex, totalSlides - 1));\n };\n\n return (\n <div\n onClick={handleProgressbarClick}\n className={cn(\n \"ds:w-full ds:h-1 ds:bg-muted ds:rounded-full ds:overflow-hidden\",\n isInside\n ? \"ds:absolute ds:bottom-0 ds:left-0 ds:right-0 ds:rounded-none\"\n : \"ds:mt-4\",\n clickable && \"ds:cursor-pointer\"\n )}\n >\n {paginationOptions.renderProgressbar ? (\n paginationOptions.renderProgressbar(\"carousel-progressbar-fill\")\n ) : (\n <div\n className=\"ds:carousel-progressbar-fill ds:h-full ds:bg-primary ds:transition-all ds:duration-300\"\n style={{ width: `${progress}%` }}\n />\n )}\n </div>\n );\n }\n\n if (type === \"custom\" && paginationOptions.renderCustom) {\n return (\n <div\n className={cn(\n isOutside\n ? \"ds:mt-4 ds:flex ds:justify-center\" // Outside: centered with margin\n : \"ds:absolute ds:bottom-4 ds:left-1/2 ds:-translate-x-1/2\" // Inside: overlay\n )}\n >\n {paginationOptions.renderCustom(activeIndex + 1, totalSlides)}\n </div>\n );\n }\n\n if (type === \"scrollbar\") {\n const dragWidth = (1 / totalSlides) * 100;\n const scrollPosition =\n (activeIndex / (totalSlides - 1)) * (100 - dragWidth);\n\n const handleScrollbarClick = (e: React.MouseEvent<HTMLDivElement>) => {\n if (!clickable) return;\n\n // Show scrollbar on click\n setShowScrollbar(true);\n if (scrollbarTimerRef.current) {\n clearTimeout(scrollbarTimerRef.current);\n }\n\n const rect = e.currentTarget.getBoundingClientRect();\n const clickX = e.clientX - rect.left;\n const percentage = clickX / rect.width;\n const targetIndex = Math.round(percentage * (totalSlides - 1));\n slideTo(Math.max(0, Math.min(targetIndex, totalSlides - 1)));\n\n // Hide after 1s\n scrollbarTimerRef.current = setTimeout(() => {\n setShowScrollbar(false);\n }, 1000) as unknown as number;\n };\n\n return (\n <div\n onClick={handleScrollbarClick}\n className={cn(\n \"ds:w-full ds:h-1 ds:bg-muted/50 ds:rounded-full ds:transition-opacity ds:duration-300\",\n isOutside\n ? \"ds:mt-4\" // Outside: margin-top for spacing\n : \"ds:absolute ds:bottom-0 ds:left-1/2 ds:-translate-x-1/2\", // Inside: overlay at bottom\n clickable && \"ds:cursor-pointer\",\n showScrollbar ? \"ds:opacity-100\" : \"ds:opacity-0\"\n )}\n >\n {paginationOptions.renderScrollbar ? (\n paginationOptions.renderScrollbar(\"carousel-scrollbar-drag\")\n ) : (\n <div\n className=\"ds:carousel-scrollbar-drag ds:h-full ds:bg-primary ds:rounded-full ds:transition-all ds:duration-300 ds:absolute ds:left-0\"\n style={{\n width: `${dragWidth}%`,\n left: `${scrollPosition}%`,\n }}\n />\n )}\n </div>\n );\n }\n\n return null;\n };\n\n // Get effect transform/classes for slides\n const getSlideTransform = (index: number) => {\n const diff = index - activeIndex;\n\n switch (effect) {\n case \"fade\":\n return {\n opacity: diff === 0 ? 1 : 0,\n zIndex: diff === 0 ? 10 : 0,\n };\n case \"cube\":\n return {\n transform: `translateX(${diff * 100}%) rotateY(${diff * -90}deg)`,\n transformOrigin: diff > 0 ? \"left center\" : \"right center\",\n };\n case \"coverflow\":\n return {\n transform: `translateX(${diff * 60}%) translateZ(${Math.abs(diff) * -100}px) rotateY(${diff * -50}deg)`,\n zIndex: -Math.abs(diff),\n };\n case \"flip\":\n return {\n transform: `rotateY(${diff * 180}deg)`,\n backfaceVisibility: \"hidden\" as const,\n };\n case \"cards\":\n return {\n transform: `translateX(${diff * 50}px) translateZ(${-Math.abs(diff) * 100}px) scale(${1 - Math.abs(diff) * 0.2})`,\n opacity: diff === 0 ? 1 : 0.5,\n zIndex: 100 - Math.abs(diff) * 10,\n transition: \"all 0.5s ease\",\n };\n default:\n return {};\n }\n };\n\n return (\n <>\n <div\n ref={ref}\n className={cn(\"ds:carousel-container\", containerClassName, className)}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n <div\n ref={containerRef}\n className={cn(\n \"ds:carousel ds:relative ds:overflow-hidden\",\n (effect === \"fade\" ||\n effect === \"cube\" ||\n effect === \"flip\" ||\n effect === \"cards\") &&\n \"ds:aspect-4/3\",\n effect === \"coverflow\" && \"ds:aspect-4/2 ds:rounded-xl\",\n direction === \"vertical\" && effect === \"slide\" && \"ds:h-full\",\n grabCursor && allowTouchMove && !isDragging && \"ds:cursor-grab\",\n isDragging && \"ds:cursor-grabbing\"\n )}\n >\n {/* Wrapper */}\n <div\n ref={wrapperRef}\n className={cn(\n \"ds:carousel-wrapper ds:select-none\",\n effect === \"slide\" && \"ds:flex\",\n direction === \"vertical\" &&\n effect === \"slide\" &&\n \"ds:flex-col ds:h-full\",\n effect !== \"slide\" && \"ds:relative\",\n wrapperClassName\n )}\n style={{\n transform:\n effect === \"slide\"\n ? direction === \"horizontal\"\n ? `translateX(${translate}px)`\n : `translateY(${translate}px)`\n : undefined,\n transition: isDragging ? \"none\" : `transform ${speed}ms ease`,\n gap: effect === \"slide\" ? `${actualSpaceBetween}px` : undefined,\n perspective:\n effect !== \"slide\" && effect !== \"fade\"\n ? \"1200px\"\n : undefined,\n touchAction: allowTouchMove ? \"none\" : \"auto\",\n height:\n direction === \"vertical\" && effect === \"slide\"\n ? \"100%\"\n : undefined,\n }}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onPointerCancel={handlePointerUp}\n >\n {slides.map((slide, index) => {\n const isActive = index === activeIndex;\n const slideElement =\n slide as React.ReactElement<CarouselSlideProps>;\n\n return cloneElement(slideElement, {\n key: index,\n className: cn(\n \"ds:carousel-slide\",\n slideClassName,\n slideElement.props.className,\n effect !== \"slide\" && \"ds:absolute ds:inset-0\",\n effect === \"fade\" && \"ds:transition-opacity ds:duration-300\",\n effect !== \"slide\" &&\n effect !== \"fade\" &&\n \"ds:transition-all ds:duration-500\",\n enableImageViewer &&\n imageInfos[index]?.src &&\n \"ds:cursor-pointer\"\n ),\n style: {\n flex:\n effect === \"slide\"\n ? direction === \"vertical\"\n ? `0 0 100%`\n : `0 0 calc(${100 / visibleSlides}% - ${(actualSpaceBetween * (visibleSlides - 1)) / visibleSlides}px)`\n : undefined,\n minWidth:\n effect === \"slide\" && direction === \"horizontal\"\n ? 0\n : undefined,\n minHeight:\n effect === \"slide\" && direction === \"vertical\"\n ? 0\n : undefined,\n height:\n direction === \"vertical\" && effect === \"slide\"\n ? \"100%\"\n : undefined,\n userSelect: \"none\",\n // @ts-expect-error - WebkitUserDrag is not in CSSProperties but is valid CSS\n WebkitUserDrag: \"none\",\n ...(effect !== \"slide\" ? getSlideTransform(index) : {}),\n ...slideElement.props.style,\n } as React.CSSProperties,\n onClick: (e: React.MouseEvent) => {\n e.stopPropagation();\n handleSlideClick(index);\n },\n onDragStart: (e: React.DragEvent) => e.preventDefault(),\n \"data-active\": isActive,\n \"data-index\": index,\n } as Partial<CarouselSlideProps>);\n })}\n </div>\n\n {/* Pagination - Inside only (overlay on slider) */}\n {paginationOptions.enabled &&\n paginationOptions.position !== \"outside\" &&\n renderPagination()}\n\n {/* Navigation - Inside (overlay on slider) */}\n {navigationOptions.enabled &&\n navigationOptions.position === \"inside\" && (\n <>\n <button\n onClick={slidePrev}\n disabled={!loop && !rewind && isBeginning}\n className={cn(\n \"ds:absolute ds:z-10 ds:w-10 ds:h-10 ds:rounded-full ds:bg-background/80 ds:backdrop-blur ds:shadow-lg ds:flex ds:items-center ds:justify-center ds:transition-all ds:hover:bg-background ds:disabled:opacity-30 ds:disabled:cursor-not-allowed\",\n direction === \"horizontal\"\n ? \"ds:left-4 ds:top-1/2 ds:-translate-y-1/2\"\n : \"ds:top-4 ds:left-1/2 ds:-translate-x-1/2\"\n )}\n aria-label=\"Previous slide\"\n >\n {navigationOptions.prevEl ||\n (direction === \"horizontal\" ? (\n <ChevronLeft className=\"ds:w-5 ds:h-5\" />\n ) : (\n <ChevronUp className=\"ds:w-5 ds:h-5\" />\n ))}\n </button>\n <button\n onClick={slideNext}\n disabled={!loop && !rewind && isEnd}\n className={cn(\n \"ds:absolute ds:z-10 ds:w-10 ds:h-10 ds:rounded-full ds:bg-background/80 ds:backdrop-blur ds:shadow-lg ds:flex ds:items-center ds:justify-center ds:transition-all ds:hover:bg-background ds:disabled:opacity-30 ds:disabled:cursor-not-allowed\",\n direction === \"horizontal\"\n ? \"ds:right-4 ds:top-1/2 ds:-translate-y-1/2\"\n : \"ds:bottom-4 ds:left-1/2 ds:-translate-x-1/2\"\n )}\n aria-label=\"Next slide\"\n >\n {navigationOptions.nextEl ||\n (direction === \"horizontal\" ? (\n <ChevronRight className=\"ds:w-5 ds:h-5\" />\n ) : (\n <ChevronDown className=\"ds:w-5 ds:h-5\" />\n ))}\n </button>\n </>\n )}\n </div>\n\n {/* Pagination - Outside (below slider) */}\n {paginationOptions.enabled &&\n paginationOptions.position === \"outside\" &&\n renderPagination()}\n </div>\n\n {/* Image Viewer */}\n {enableImageViewer && imageInfos.length > 0 && (\n <ImageViewer\n images={imageInfos}\n visible={viewerVisible}\n onClose={() => {\n console.log(\"Closing viewer\");\n setViewerVisible(false);\n }}\n activeIndex={viewerIndex}\n onIndexChange={setViewerIndex}\n />\n )}\n {/* {enableImageViewer && (\n <div\n style={{\n position: \"fixed\",\n top: 10,\n right: 10,\n background: \"white\",\n padding: \"10px\",\n zIndex: 9999,\n fontSize: \"12px\",\n }}\n >\n Debug: visible={String(viewerVisible)}, images={imageInfos.length},\n index={viewerIndex}\n </div>\n )} */}\n </>\n );\n }\n);\n\nCarousel.displayName = \"Carousel\";\n\n// ============================================================================\n// Carousel Slide Component\n// ============================================================================\n\nexport const CarouselSlide = React.forwardRef<\n HTMLDivElement,\n CarouselSlideProps\n>(({ children, className, style, ...props }, ref) => {\n return (\n <div ref={ref} className={className} style={style} {...props}>\n {children}\n </div>\n );\n});\n\nCarouselSlide.displayName = \"CarouselSlide\";\n\nexport default Carousel;\n"],"names":["Carousel","React","children","initialSlide","direction","speed","spaceBetween","slidesPerView","slidesPerGroup","centeredSlides","loop","rewind","effect","breakpoints","navigation","pagination","autoplay","allowTouchMove","grabCursor","keyboard","mousewheel","className","containerClassName","wrapperClassName","slideClassName","enableImageViewer","onSlideChange","onReachBeginning","onReachEnd","onAutoplayStart","onAutoplayStop","ref","navigationOptions","paginationOptions","autoplayOptions","useMemo","activeIndex","setActiveIndex","useState","isBeginning","setIsBeginning","isEnd","setIsEnd","isDragging","setIsDragging","translate","setTranslate","isAutoplayRunning","setIsAutoplayRunning","showScrollbar","setShowScrollbar","windowWidth","setWindowWidth","viewerVisible","setViewerVisible","viewerIndex","setViewerIndex","useEffect","handleResize","currentBreakpoint","breakpointKeys","a","b","breakpoint","actualSlidesPerView","actualSpaceBetween","actualSlidesPerGroup","containerRef","useRef","wrapperRef","autoplayTimerRef","scrollbarTimerRef","dragStateRef","hasDraggedRef","slides","Children","child","isValidElement","CarouselSlide","totalSlides","findImageInChildren","useCallback","result","imageInfos","slide","imgElement","handleSlideClick","index","visibleSlides","slideTo","newIndex","containerSize","slideSize","newTranslate","slideNext","slidePrev","stopAutoplay","startAutoplay","handleMouseEnter","handleMouseLeave","handlePointerDown","e","err","handlePointerMove","startX","startY","diffX","diffY","handlePointerUp","diff","handleKeyDown","handleWheel","container","renderPagination","type","clickable","dynamicBullets","dynamicMainBullets","position","isOutside","bulletsToShow","jsx","cn","i","bulletIndex","isActive","jsxs","Fragment","progress","isInside","handleProgressbarClick","rect","percentage","targetIndex","dragWidth","scrollPosition","handleScrollbarClick","getSlideTransform","slideElement","cloneElement","ChevronLeft","ChevronUp","ChevronRight","ChevronDown","ImageViewer","style","props"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Checkbox.cjs","sources":["../../../../src/components/Checkbox/Checkbox.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport { Checkbox as SCheckbox } from \"@dsui/ui/components/checkbox\";\nimport { cn } from \"@dsui/ui/index\";\nimport { Tooltip } from \"../Tooltip/Tooltip\";\nimport { Label } from \"../Label\";\nimport { Info } from \"lucide-react\";\nimport { AnimatePresence } from \"motion/react\";\nimport { ConfettiPiece } from \"@/utils/css\";\nimport type { CheckedState } from \"@radix-ui/react-checkbox\";\n\nexport type CheckboxProps = Omit<\n React.ComponentPropsWithoutRef<typeof SCheckbox>,\n \"onCheckedChange\" | \"variant\" | \"size\" | \"color\" | \"icon\"\n> & {\n onCheckedChange?: (checked: CheckedState) => void;\n variant?: \"default\" | \"circle\";\n size?: \"sm\" | \"default\" | \"lg\";\n color?:\n | \"primary\"\n | \"secondary\"\n | \"accent\"\n | \"destructive\"\n | \"muted\"\n | \"success\"\n | \"error\"\n | \"warning\";\n icon?: React.ReactNode;\n label?: React.ReactNode;\n labelPosition?: \"top\" | \"left\" | \"right\" | \"bottom\";\n labelAlignment?: \"start\" | \"center\" | \"end\";\n infoTooltip?: React.ReactNode;\n helperText?: React.ReactNode;\n state?: \"default\" | \"error\" | \"success\" | \"warning\";\n animation?: \"confetti\" | undefined;\n};\n\nconst Checkbox = React.forwardRef<HTMLButtonElement, CheckboxProps>(\n (props, ref) => {\n const {\n label,\n infoTooltip,\n helperText,\n state,\n variant = \"default\",\n size = \"default\",\n color,\n labelPosition = \"right\",\n labelAlignment = \"center\",\n icon,\n animation,\n id,\n onCheckedChange,\n ...rest\n } = props;\n const [showConfetti, setShowConfetti] = useState(false);\n const generatedId = React.useId();\n const inputId = id || generatedId;\n\n // State\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 const handleCheckedChange = (checked: CheckedState) => {\n if (checked) {\n setShowConfetti(true);\n setTimeout(() => setShowConfetti(false), 800);\n }\n onCheckedChange?.(checked);\n };\n\n const isVertical = labelPosition === \"top\" || labelPosition === \"bottom\";\n const flexDirection = isVertical ? \"ds:flex-col\" : \"ds:flex-row\";\n const gapClass = isVertical ? \"ds:gap-1.5\" : \"ds:gap-2\";\n\n const alignmentClass =\n labelAlignment === \"start\"\n ? \"ds:items-start\"\n : labelAlignment === \"center\"\n ? \"ds:items-center\"\n : \"ds:items-end\";\n\n const labelClass =\n \"ds:flex ds:gap-2 ds:peer-disabled:cursor-not-allowed ds:peer-disabled:opacity-70\";\n\n return (\n <div className={cn(\"ds:flex ds:flex-col ds:gap-1.5 ds:relative\", {})}>\n <div className={cn(\"ds:flex\", flexDirection, gapClass, alignmentClass)}>\n {(labelPosition === \"top\" || labelPosition === \"left\") && label && (\n <Label htmlFor={inputId} className={labelClass}>\n {label}\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 ds:inline-flex\">\n <SCheckbox\n ref={ref}\n id={inputId}\n {...rest}\n variant={variant}\n size={size}\n color={color}\n icon={icon}\n onCheckedChange={\n animation ? handleCheckedChange : onCheckedChange\n }\n />\n\n <AnimatePresence>\n {showConfetti && (\n <div className=\"ds:pointer-events-none ds:absolute ds:inset-0\">\n {[...Array(12)].map((_, i) => (\n <ConfettiPiece key={i} index={i} />\n ))}\n </div>\n )}\n </AnimatePresence>\n </div>\n\n {(labelPosition === \"bottom\" || labelPosition === \"right\") &&\n label && (\n <Label htmlFor={inputId} className={labelClass}>\n {label}\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 </div>\n\n {helperText && (\n <div className=\"ds:flex ds:items-center ds:justify-between ds:text-xs ds:gap-2\">\n {helperText && (\n <p\n className={cn(\n \"ds:text-xs\",\n state ? helperTextStyles?.[state] : \"\"\n )}\n >\n {helperText}\n </p>\n )}\n </div>\n )}\n </div>\n );\n }\n);\n\nCheckbox.displayName = \"Checkbox\";\nexport default Checkbox;\n"],"names":["Checkbox","React","props","ref","label","infoTooltip","helperText","state","variant","size","color","labelPosition","labelAlignment","icon","animation","id","onCheckedChange","rest","showConfetti","setShowConfetti","useState","generatedId","inputId","helperTextStyles","handleCheckedChange","checked","isVertical","flexDirection","gapClass","alignmentClass","labelClass","cn","jsxs","Label","Tooltip","jsx","Info","SCheckbox","AnimatePresence","_","i","ConfettiPiece"],"mappings":"wsDAoCMA,EAAWC,EAAM,WACrB,CAACC,EAAOC,IAAQ,CACd,KAAM,CAAA,MACJC,EACA,YAAAC,EACA,WAAAC,EACA,MAAAC,EACA,QAAAC,EAAU,UACV,KAAAC,EAAO,UACP,MAAAC,EACA,cAAAC,EAAgB,QAChB,eAAAC,EAAiB,SACjB,KAAAC,EACA,UAAAC,EACA,GAAAC,EACA,gBAAAC,EACA,GAAGC,CAAA,EACDf,EACE,CAACgB,EAAcC,CAAe,EAAIC,EAAAA,SAAS,EAAK,EAChDC,EAAcpB,EAAM,MAAA,EACpBqB,EAAUP,GAAMM,EAGhBE,EAAmB,CACvB,QAAS,2BACT,QAAS,kBACT,QAAS,kBACT,MAAO,eAAA,EAGHC,EAAuBC,GAA0B,CACjDA,IACFN,EAAgB,EAAI,EACpB,WAAW,IAAMA,EAAgB,EAAK,EAAG,GAAG,GAE9CH,IAAkBS,CAAO,CAC3B,EAEMC,EAAaf,IAAkB,OAASA,IAAkB,SAC1DgB,EAAgBD,EAAa,cAAgB,cAC7CE,EAAWF,EAAa,aAAe,WAEvCG,EACJjB,IAAmB,QACf,iBACAA,IAAmB,SACjB,kBACA,eAEFkB,EACJ,mFAEF,cACG,MAAA,CAAI,UAAWC,EAAAA,GAAG,6CAA8C,CAAA,CAAE,EACjE,SAAA,CAAAC,OAAC,OAAI,UAAWD,EAAAA,GAAG,UAAWJ,EAAeC,EAAUC,CAAc,EACjE,SAAA,EAAAlB,IAAkB,OAASA,IAAkB,SAAWP,UACvD6B,EAAAA,MAAA,CAAM,QAASX,EAAS,UAAWQ,EACjC,SAAA,CAAA1B,EACAC,SACE6B,UAAA,CAAQ,QAAS7B,EAChB,SAAA8B,EAAAA,IAACC,EAAAA,KAAA,CAAK,UAAU,0BAAA,CAA2B,CAAA,CAC7C,CAAA,EAEJ,EAGFJ,EAAAA,KAAC,MAAA,CAAI,UAAU,6BACb,SAAA,CAAAG,EAAAA,IAACE,EAAAA,SAAA,CACC,IAAAlC,EACA,GAAImB,EACH,GAAGL,EACJ,QAAAT,EACA,KAAAC,EACA,MAAAC,EACA,KAAAG,EACA,gBACEC,EAAYU,EAAsBR,CAAA,CAAA,EAItCmB,EAAAA,IAACG,EAAAA,gBAAA,CACE,SAAApB,GACCiB,EAAAA,IAAC,MAAA,CAAI,UAAU,gDACZ,SAAA,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,CAACI,EAAGC,IACtBL,EAAAA,IAACM,EAAAA,cAAA,CAAsB,MAAOD,CAAA,EAAVA,CAAa,CAClC,CAAA,CACH,CAAA,CAEJ,CAAA,EACF,GAEE7B,IAAkB,UAAYA,IAAkB,UAChDP,UACG6B,EAAAA,MAAA,CAAM,QAASX,EAAS,UAAWQ,EACjC,SAAA,CAAA1B,EACAC,SACE6B,UAAA,CAAQ,QAAS7B,EAChB,SAAA8B,EAAAA,IAACC,EAAAA,KAAA,CAAK,UAAU,0BAAA,CAA2B,CAAA,CAC7C,CAAA,CAAA,CAEJ,CAAA,EAEN,EAEC9B,GACC6B,EAAAA,IAAC,MAAA,CAAI,UAAU,iEACZ,SAAA7B,GACC6B,EAAAA,IAAC,IAAA,CACC,UAAWJ,EAAAA,GACT,aACAxB,EAAQgB,IAAmBhB,CAAK,EAAI,EAAA,EAGrC,SAAAD,CAAA,CAAA,CACH,CAEJ,CAAA,EAEJ,CAEJ,CACF,EAEAN,EAAS,YAAc"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Collapsible.cjs","sources":["../../../../src/components/Collapsible/Collapsible.tsx"],"sourcesContent":["import React from \"react\";\nimport {\n Collapsible as SCollapsible,\n CollapsibleTrigger,\n CollapsibleContent,\n} from \"@dsui/ui/components/collapsible\";\nimport { cn } from \"@dsui/ui/lib/utils\";\nimport { ChevronDown } from \"lucide-react\";\n\nexport type CollapsibleProps = Omit<\n React.ComponentPropsWithoutRef<typeof SCollapsible>,\n \"children\" | \"content\" | \"open\" | \"defaultOpen\" | \"onOpenChange\"\n> & {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n trigger?: React.ReactNode;\n content?: React.ReactNode;\n showIcon?: boolean;\n iconPosition?: \"left\" | \"right\";\n iconRotation?: boolean;\n triggerClassName?: string;\n contentClassName?: string;\n variant?: \"default\" | \"bordered\" | \"ghost\";\n children?: React.ReactNode;\n};\n\nconst Collapsible = React.forwardRef<\n React.ElementRef<typeof SCollapsible>,\n CollapsibleProps\n>((props, ref) => {\n const {\n trigger,\n content,\n showIcon = true,\n iconPosition = \"right\",\n iconRotation = true,\n triggerClassName,\n contentClassName,\n variant = \"default\",\n className,\n open,\n defaultOpen,\n onOpenChange,\n children,\n ...rest\n } = props;\n\n const [isOpen, setIsOpen] = React.useState(defaultOpen ?? false);\n\n React.useEffect(() => {\n if (open !== undefined) {\n setIsOpen(open);\n }\n }, [open]);\n\n const handleOpenChange = (newOpen: boolean) => {\n setIsOpen(newOpen);\n onOpenChange?.(newOpen);\n };\n\n const variantStyles = {\n default: {\n root: \"ds:rounded-lg ds:border ds:bg-card\",\n trigger: \"ds:px-4 ds:py-3 ds:hover:bg-accent/50\",\n content: \"ds:px-4 ds:py-3 ds:border-t\",\n },\n bordered: {\n root: \"ds:rounded-lg ds:border-2\",\n trigger: \"ds:px-4 ds:py-3 ds:font-semibold ds:hover:bg-accent\",\n content: \"ds:px-4 ds:py-3 ds:border-t-2\",\n },\n ghost: {\n root: \"\",\n trigger: \"ds:px-2 ds:py-2 ds:hover:bg-accent/30 ds:rounded-md\",\n content: \"ds:px-2 ds:py-2\",\n },\n };\n\n const styles = variantStyles[variant];\n\n // If children are provided, use them directly (custom implementation)\n if (children && !trigger && !content) {\n return (\n <SCollapsible\n ref={ref}\n open={isOpen}\n onOpenChange={handleOpenChange}\n className={cn(styles.root, className)}\n {...rest}\n >\n {children}\n </SCollapsible>\n );\n }\n\n // Default implementation with trigger and content\n return (\n <SCollapsible\n ref={ref}\n open={isOpen}\n onOpenChange={handleOpenChange}\n className={cn(styles.root, className)}\n {...rest}\n >\n <CollapsibleTrigger\n className={cn(\n \"ds:flex ds:w-full ds:items-center ds:justify-between ds:transition-colors\",\n styles.trigger,\n triggerClassName\n )}\n >\n {iconPosition === \"left\" && showIcon && (\n <ChevronDown\n className={cn(\n \"ds:size-4 ds:transition-transform ds:duration-200\",\n iconRotation && isOpen && \"ds:rotate-180\"\n )}\n />\n )}\n <span className=\"ds:flex-1 ds:text-left\">{trigger}</span>\n {iconPosition === \"right\" && showIcon && (\n <ChevronDown\n className={cn(\n \"ds:size-4 ds:transition-transform ds:duration-200\",\n iconRotation && isOpen && \"ds:rotate-180\"\n )}\n />\n )}\n </CollapsibleTrigger>\n <CollapsibleContent className={cn(styles.content, contentClassName)}>\n {content}\n </CollapsibleContent>\n </SCollapsible>\n );\n});\n\nCollapsible.displayName = \"Collapsible\";\n\nexport default Collapsible;\nexport { CollapsibleTrigger, CollapsibleContent };\n"],"names":["Collapsible","React","props","ref","trigger","content","showIcon","iconPosition","iconRotation","triggerClassName","contentClassName","variant","className","open","defaultOpen","onOpenChange","children","rest","isOpen","setIsOpen","handleOpenChange","newOpen","styles","jsx","SCollapsible","cn","jsxs","CollapsibleTrigger","ChevronDown","CollapsibleContent"],"mappings":"6SA2BMA,EAAcC,EAAM,WAGxB,CAACC,EAAOC,IAAQ,CAChB,KAAM,CACJ,QAAAC,EACA,QAAAC,EACA,SAAAC,EAAW,GACX,aAAAC,EAAe,QACf,aAAAC,EAAe,GACf,iBAAAC,EACA,iBAAAC,EACA,QAAAC,EAAU,UACV,UAAAC,EACA,KAAAC,EACA,YAAAC,EACA,aAAAC,EACA,SAAAC,EACA,GAAGC,CAAA,EACDf,EAEE,CAACgB,EAAQC,CAAS,EAAIlB,EAAM,SAASa,GAAe,EAAK,EAE/Db,EAAM,UAAU,IAAM,CAChBY,IAAS,QACXM,EAAUN,CAAI,CAElB,EAAG,CAACA,CAAI,CAAC,EAET,MAAMO,EAAoBC,GAAqB,CAC7CF,EAAUE,CAAO,EACjBN,IAAeM,CAAO,CACxB,EAoBMC,EAlBgB,CACpB,QAAS,CACP,KAAM,qCACN,QAAS,wCACT,QAAS,6BAAA,EAEX,SAAU,CACR,KAAM,4BACN,QAAS,sDACT,QAAS,+BAAA,EAEX,MAAO,CACL,KAAM,GACN,QAAS,sDACT,QAAS,iBAAA,CACX,EAG2BX,CAAO,EAGpC,OAAIK,GAAY,CAACZ,GAAW,CAACC,EAEzBkB,EAAAA,IAACC,EAAAA,YAAA,CACC,IAAArB,EACA,KAAMe,EACN,aAAcE,EACd,UAAWK,EAAAA,GAAGH,EAAO,KAAMV,CAAS,EACnC,GAAGK,EAEH,SAAAD,CAAA,CAAA,EAOLU,EAAAA,KAACF,EAAAA,YAAA,CACC,IAAArB,EACA,KAAMe,EACN,aAAcE,EACd,UAAWK,EAAAA,GAAGH,EAAO,KAAMV,CAAS,EACnC,GAAGK,EAEJ,SAAA,CAAAS,EAAAA,KAACC,EAAAA,mBAAA,CACC,UAAWF,EAAAA,GACT,4EACAH,EAAO,QACPb,CAAA,EAGD,SAAA,CAAAF,IAAiB,QAAUD,GAC1BiB,EAAAA,IAACK,EAAAA,YAAA,CACC,UAAWH,EAAAA,GACT,oDACAjB,GAAgBU,GAAU,eAAA,CAC5B,CAAA,EAGJK,EAAAA,IAAC,OAAA,CAAK,UAAU,yBAA0B,SAAAnB,EAAQ,EACjDG,IAAiB,SAAWD,GAC3BiB,EAAAA,IAACK,EAAAA,YAAA,CACC,UAAWH,EAAAA,GACT,oDACAjB,GAAgBU,GAAU,eAAA,CAC5B,CAAA,CACF,CAAA,CAAA,EAGJK,MAACM,EAAAA,oBAAmB,UAAWJ,EAAAA,GAAGH,EAAO,QAASZ,CAAgB,EAC/D,SAAAL,CAAA,CACH,CAAA,CAAA,CAAA,CAGN,CAAC,EAEDL,EAAY,YAAc"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Command.cjs","sources":["../../../../src/components/Command/Command.tsx"],"sourcesContent":["import React from \"react\";\nimport {\n Command as SCommand,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandSeparator,\n CommandItem,\n CommandShortcut,\n} from \"@dsui/ui/components/command\";\nimport { cn } from \"@dsui/ui/lib/utils\";\n\nexport interface CommandItem {\n readonly type: \"item\";\n label?: string;\n icon?: React.ComponentType<{ className?: string }>;\n shortcut?: string;\n disabled?: boolean;\n className?: string;\n onClick?: () => void;\n children?: React.ReactNode;\n}\n\nexport interface CommandGroup {\n readonly type: \"group\";\n heading: string;\n className?: string;\n items: CommandItem[];\n}\n\nexport interface CommandSeparator {\n readonly type: \"separator\";\n}\n\nexport type CommandItemType = CommandItem | CommandGroup | CommandSeparator;\n\nexport interface CommandProps {\n className?: string;\n children?: React.ReactNode;\n items?: CommandItemType[];\n search?: boolean | string;\n\n // Dialog mode props\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n modal?: boolean;\n title?: string;\n description?: string;\n showCloseButton?: boolean;\n}\n\nconst Command = React.forwardRef<HTMLDivElement, CommandProps>((props, ref) => {\n const {\n className,\n children,\n items,\n search,\n open,\n defaultOpen,\n onOpenChange,\n modal = false,\n title = \"Command Palette\",\n description = \"Search for a command to run...\",\n showCloseButton = true,\n ...rest\n } = props;\n\n const renderItems = (items: CommandItemType[]) => {\n return items.map((item, index) => {\n switch (item.type) {\n case \"item\":\n return (\n <CommandItem\n key={index}\n disabled={item.disabled}\n className={item.className}\n onSelect={item.onClick}\n >\n {item.children ? (\n item.children\n ) : (\n <>\n {item.icon && <item.icon className=\"ds:mr-2 ds:h-4 ds:w-4\" />}\n <span>{item.label}</span>\n {item.shortcut && (\n <CommandShortcut>{item.shortcut}</CommandShortcut>\n )}\n </>\n )}\n </CommandItem>\n );\n case \"group\":\n return (\n <CommandGroup\n key={index}\n heading={item.heading}\n className={item.className}\n >\n {item.items.map((subItem, subIndex) => (\n <CommandItem\n key={subIndex}\n disabled={subItem.disabled}\n className={subItem.className}\n onSelect={subItem.onClick}\n >\n {subItem.children ? (\n subItem.children\n ) : (\n <>\n {subItem.icon && (\n <subItem.icon className=\"ds:mr-2 ds:h-4 ds:w-4\" />\n )}\n <span>{subItem.label}</span>\n {subItem.shortcut && (\n <CommandShortcut>{subItem.shortcut}</CommandShortcut>\n )}\n </>\n )}\n </CommandItem>\n ))}\n </CommandGroup>\n );\n case \"separator\":\n return <CommandSeparator key={index} />;\n default:\n return null;\n }\n });\n };\n\n const commandContent = (\n <SCommand\n ref={ref}\n className={cn(\n \"ds:bg-popover ds:text-popover-foreground ds:flex ds:h-full ds:w-full ds:flex-col ds:overflow-hidden ds:rounded-md\",\n className\n )}\n {...rest}\n >\n {search && (\n <CommandInput\n placeholder={\n typeof search === \"string\" ? search : \"Type a command or search...\"\n }\n />\n )}\n <CommandList>\n {items ? (\n <>\n <CommandEmpty>No results found.</CommandEmpty>\n {renderItems(items)}\n </>\n ) : (\n children\n )}\n </CommandList>\n </SCommand>\n );\n\n // If dialog props are provided, render as dialog\n if (\n modal &&\n (open !== undefined || onOpenChange || defaultOpen !== undefined)\n ) {\n return (\n <CommandDialog\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n modal={modal}\n title={title}\n description={description}\n showCloseButton={showCloseButton}\n >\n <Command\n className={className}\n items={items}\n search={search}\n {...rest}\n />\n </CommandDialog>\n );\n }\n\n // Otherwise, render as regular command\n return commandContent;\n});\n\nCommand.displayName = \"Command\";\n\nexport default Command;\n"],"names":["Command","React","props","ref","className","children","items","search","open","defaultOpen","onOpenChange","modal","title","description","showCloseButton","rest","renderItems","item","index","jsx","CommandItem","jsxs","Fragment","CommandShortcut","CommandGroup","subItem","subIndex","CommandSeparator","commandContent","SCommand","cn","CommandInput","CommandList","CommandEmpty","CommandDialog"],"mappings":"+QAsDMA,EAAUC,EAAM,WAAyC,CAACC,EAAOC,IAAQ,CAC7E,KAAM,CACJ,UAAAC,EACA,SAAAC,EACA,MAAAC,EACA,OAAAC,EACA,KAAAC,EACA,YAAAC,EACA,aAAAC,EACA,MAAAC,EAAQ,GACR,MAAAC,EAAQ,kBACR,YAAAC,EAAc,iCACd,gBAAAC,EAAkB,GAClB,GAAGC,CAAA,EACDb,EAEEc,EAAeV,GACZA,EAAM,IAAI,CAACW,EAAMC,IAAU,CAChC,OAAQD,EAAK,KAAA,CACX,IAAK,OACH,OACEE,EAAAA,IAACC,EAAAA,YAAA,CAEC,SAAUH,EAAK,SACf,UAAWA,EAAK,UAChB,SAAUA,EAAK,QAEd,SAAAA,EAAK,SACJA,EAAK,SAELI,OAAAC,EAAAA,SAAA,CACG,SAAA,CAAAL,EAAK,MAAQE,MAACF,EAAK,KAAL,CAAU,UAAU,wBAAwB,EAC3DE,EAAAA,IAAC,OAAA,CAAM,SAAAF,EAAK,KAAA,CAAM,EACjBA,EAAK,UACJE,MAACI,EAAAA,gBAAA,CAAiB,WAAK,QAAA,CAAS,CAAA,CAAA,CAEpC,CAAA,EAdGL,CAAA,EAkBX,IAAK,QACH,OACEC,EAAAA,IAACK,EAAAA,aAAA,CAEC,QAASP,EAAK,QACd,UAAWA,EAAK,UAEf,SAAAA,EAAK,MAAM,IAAI,CAACQ,EAASC,IACxBP,EAAAA,IAACC,EAAAA,YAAA,CAEC,SAAUK,EAAQ,SAClB,UAAWA,EAAQ,UACnB,SAAUA,EAAQ,QAEjB,SAAAA,EAAQ,SACPA,EAAQ,SAERJ,OAAAC,EAAAA,SAAA,CACG,SAAA,CAAAG,EAAQ,MACPN,MAACM,EAAQ,KAAR,CAAa,UAAU,wBAAwB,EAElDN,EAAAA,IAAC,OAAA,CAAM,SAAAM,EAAQ,KAAA,CAAM,EACpBA,EAAQ,UACPN,MAACI,EAAAA,gBAAA,CAAiB,WAAQ,QAAA,CAAS,CAAA,CAAA,CAEvC,CAAA,EAhBGG,CAAA,CAmBR,CAAA,EAzBIR,CAAA,EA4BX,IAAK,YACH,OAAOC,MAACQ,EAAAA,oBAAsBT,CAAO,EACvC,QACE,OAAO,IAAA,CAEb,CAAC,EAGGU,EACJP,EAAAA,KAACQ,EAAAA,QAAA,CACC,IAAA1B,EACA,UAAW2B,EAAAA,GACT,oHACA1B,CAAA,EAED,GAAGW,EAEH,SAAA,CAAAR,GACCY,EAAAA,IAACY,EAAAA,aAAA,CACC,YACE,OAAOxB,GAAW,SAAWA,EAAS,6BAAA,CAAA,EAI5CY,EAAAA,IAACa,EAAAA,YAAA,CACE,SAAA1B,EACCe,OAAAC,EAAAA,SAAA,CACE,SAAA,CAAAH,EAAAA,IAACc,EAAAA,cAAa,SAAA,mBAAA,CAAiB,EAC9BjB,EAAYV,CAAK,CAAA,CAAA,CACpB,EAEAD,CAAA,CAEJ,CAAA,CAAA,CAAA,EAKJ,OACEM,IACCH,IAAS,QAAaE,GAAgBD,IAAgB,QAGrDU,EAAAA,IAACe,EAAAA,cAAA,CACC,KAAA1B,EACA,YAAAC,EACA,aAAAC,EACA,MAAAC,EACA,MAAAC,EACA,YAAAC,EACA,gBAAAC,EAEA,SAAAK,EAAAA,IAACnB,EAAA,CACC,UAAAI,EACA,MAAAE,EACA,OAAAC,EACC,GAAGQ,CAAA,CAAA,CACN,CAAA,EAMCa,CACT,CAAC,EAED5B,EAAQ,YAAc"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../../src/components/Command/index.ts"],"sourcesContent":["import CommandWrapper, {\n type CommandProps,\n type CommandItemType,\n} from \"./Command\";\nimport {\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandSeparator,\n CommandItem,\n CommandShortcut,\n} from \"@dsui/ui/components/command\";\n\nconst Command = Object.assign(CommandWrapper, {\n Dialog: CommandDialog,\n Input: CommandInput,\n List: CommandList,\n Empty: CommandEmpty,\n Group: CommandGroup,\n Separator: CommandSeparator,\n Item: CommandItem,\n Shortcut: CommandShortcut,\n});\n\nexport { Command };\nexport type { CommandProps, CommandItemType };\n"],"names":["Command","CommandWrapper","CommandDialog","CommandInput","CommandList","CommandEmpty","CommandGroup","CommandSeparator","CommandItem","CommandShortcut"],"mappings":"2KAeMA,EAAU,OAAO,OAAOC,UAAgB,CAC5C,OAAQC,EAAAA,cACR,MAAOC,EAAAA,aACP,KAAMC,EAAAA,YACN,MAAOC,EAAAA,aACP,MAAOC,EAAAA,aACP,UAAWC,EAAAA,iBACX,KAAMC,EAAAA,YACN,SAAUC,EAAAA,eACZ,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ContextMenu.cjs","sources":["../../../../src/components/ContextMenu/ContextMenu.tsx"],"sourcesContent":["import React from \"react\";\nimport {\n ContextMenu as SContextMenu,\n ContextMenuTrigger as SContextMenuTrigger,\n ContextMenuContent as SContextMenuContent,\n ContextMenuItem as SContextMenuItem,\n ContextMenuCheckboxItem as SContextMenuCheckboxItem,\n ContextMenuRadioItem as SContextMenuRadioItem,\n ContextMenuRadioGroup as SContextMenuRadioGroup,\n ContextMenuLabel as SContextMenuLabel,\n ContextMenuSeparator as SContextMenuSeparator,\n ContextMenuGroup as SContextMenuGroup,\n ContextMenuSub as SContextMenuSub,\n ContextMenuSubTrigger as SContextMenuSubTrigger,\n ContextMenuSubContent as SContextMenuSubContent,\n ContextMenuShortcut as SContextMenuShortcut,\n} from \"@dsui/ui/components/context-menu\";\nimport { cn } from \"@dsui/ui/lib/utils\";\n\nexport type ContextMenuItem =\n | {\n key: string;\n label?: string;\n icon?: React.ReactNode;\n shortcut?: string;\n children?: ContextMenuItem[];\n type?: \"item\";\n checked?: boolean;\n disabled?: boolean;\n variant?: \"default\" | \"destructive\";\n onClick?: () => void;\n className?: string;\n }\n | {\n key: string;\n type: \"checkbox\";\n label?: string;\n icon?: React.ReactNode;\n shortcut?: string;\n checked?: boolean;\n disabled?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n className?: string;\n }\n | {\n key: string;\n type: \"radio\";\n label?: string;\n icon?: React.ReactNode;\n shortcut?: string;\n group: string;\n value?: string;\n disabled?: boolean;\n onClick?: () => void;\n className?: string;\n }\n | {\n key: string;\n type: \"separator\";\n }\n | {\n key: string;\n type: \"group\";\n label?: string;\n children: ContextMenuItem[];\n disabled?: boolean;\n }\n | {\n key: string;\n type: \"label\";\n label: string;\n inset?: boolean;\n className?: string;\n };\n\nexport interface ContextMenuProps {\n // Core props\n onOpenChange?: (open: boolean) => void;\n modal?: boolean;\n\n // Content\n children?: React.ReactNode;\n trigger?: React.ReactNode;\n content?: React.ReactNode;\n items?: ContextMenuItem[];\n\n // Styling\n className?: string;\n contentClassName?: string;\n triggerClassName?: string;\n}\n\nconst ContextMenu = React.forwardRef<HTMLDivElement, ContextMenuProps>(\n (props, ref) => {\n const {\n onOpenChange,\n modal = false,\n children,\n trigger,\n content,\n items,\n className,\n contentClassName,\n triggerClassName,\n } = props;\n\n // If children are provided (compound pattern), render them directly\n if (children) {\n return (\n <SContextMenu onOpenChange={onOpenChange} modal={modal}>\n {children}\n </SContextMenu>\n );\n }\n\n // Render items if provided\n const renderItems = (menuItems: ContextMenuItem[]): React.ReactNode => {\n return menuItems.map((item) => {\n switch (item.type) {\n case \"separator\":\n return <SContextMenuSeparator key={item.key} />;\n\n case \"label\":\n return (\n <SContextMenuLabel\n key={item.key}\n inset={item.inset}\n className={item.className}\n >\n {item.label}\n </SContextMenuLabel>\n );\n\n case \"group\":\n return (\n <SContextMenuGroup key={item.key}>\n {item.label && (\n <SContextMenuLabel>{item.label}</SContextMenuLabel>\n )}\n {renderItems(item.children)}\n </SContextMenuGroup>\n );\n\n case \"checkbox\":\n return (\n <SContextMenuCheckboxItem\n key={item.key}\n checked={item.checked}\n disabled={item.disabled}\n className={item.className}\n onCheckedChange={item.onCheckedChange}\n >\n {item.icon}\n {item.label}\n {item.shortcut && (\n <SContextMenuShortcut>{item.shortcut}</SContextMenuShortcut>\n )}\n </SContextMenuCheckboxItem>\n );\n\n case \"radio\":\n return (\n <SContextMenuRadioGroup\n key={item.key}\n value={item.value || item.group}\n >\n <SContextMenuRadioItem\n value={item.value || item.key}\n disabled={item.disabled}\n onClick={item.onClick}\n className={item.className}\n >\n {item.icon}\n {item.label}\n {item.shortcut && (\n <SContextMenuShortcut>{item.shortcut}</SContextMenuShortcut>\n )}\n </SContextMenuRadioItem>\n </SContextMenuRadioGroup>\n );\n\n default: {\n // item or undefined type\n if (item.children && item.children.length > 0) {\n // Submenu\n return (\n <SContextMenuSub key={item.key}>\n <SContextMenuSubTrigger\n disabled={item.disabled}\n className={cn(\n item.disabled ? \"ds:opacity-50 ds:cursor-not-allowed\" : \"\",\n item.className\n )}\n >\n {item.icon}\n {item.label}\n </SContextMenuSubTrigger>\n <SContextMenuSubContent>\n {renderItems(item.children)}\n </SContextMenuSubContent>\n </SContextMenuSub>\n );\n } else {\n // Regular item\n return (\n <SContextMenuItem\n key={item.key}\n disabled={item.disabled}\n variant={item.variant}\n onClick={item.onClick}\n className={item.className}\n >\n {item.icon}\n {item.label}\n {item.shortcut && (\n <SContextMenuShortcut>{item.shortcut}</SContextMenuShortcut>\n )}\n </SContextMenuItem>\n );\n }\n }\n }\n });\n };\n\n // Props-based pattern with trigger and items\n const triggerElement = trigger ? (\n <SContextMenuTrigger asChild className={cn(triggerClassName)}>\n {trigger}\n </SContextMenuTrigger>\n ) : null;\n\n const contentElement =\n content || items ? (\n <SContextMenuContent\n ref={ref}\n className={cn(className, contentClassName)}\n >\n {content}\n {items && renderItems(items)}\n </SContextMenuContent>\n ) : null;\n\n return (\n <SContextMenu onOpenChange={onOpenChange} modal={modal}>\n {triggerElement}\n {contentElement}\n </SContextMenu>\n );\n }\n);\n\nContextMenu.displayName = \"ContextMenu\";\n\nexport default ContextMenu;\n"],"names":["ContextMenu","React","props","ref","onOpenChange","modal","children","trigger","content","items","className","contentClassName","triggerClassName","jsx","SContextMenu","renderItems","menuItems","item","SContextMenuSeparator","SContextMenuLabel","SContextMenuGroup","jsxs","SContextMenuCheckboxItem","SContextMenuShortcut","SContextMenuRadioGroup","SContextMenuRadioItem","SContextMenuSub","SContextMenuSubTrigger","cn","SContextMenuSubContent","SContextMenuItem","triggerElement","SContextMenuTrigger","contentElement","SContextMenuContent"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../../src/components/ContextMenu/index.ts"],"sourcesContent":["import ContextMenuWrapper, { type ContextMenuProps } from \"./ContextMenu\";\nimport {\n ContextMenu as ContextMenuPrimitive,\n ContextMenuPortal,\n ContextMenuTrigger,\n ContextMenuContent,\n ContextMenuGroup,\n ContextMenuLabel,\n ContextMenuItem,\n ContextMenuCheckboxItem,\n ContextMenuRadioGroup,\n ContextMenuRadioItem,\n ContextMenuSeparator,\n ContextMenuShortcut,\n ContextMenuSub,\n ContextMenuSubTrigger,\n ContextMenuSubContent,\n} from \"@dsui/ui/components/context-menu\";\n\nconst ContextMenu = Object.assign(ContextMenuWrapper, {\n // Primitives\n Root: ContextMenuPrimitive,\n Portal: ContextMenuPortal,\n Trigger: ContextMenuTrigger,\n Content: ContextMenuContent,\n Group: ContextMenuGroup,\n Label: ContextMenuLabel,\n Item: ContextMenuItem,\n CheckboxItem: ContextMenuCheckboxItem,\n RadioGroup: ContextMenuRadioGroup,\n RadioItem: ContextMenuRadioItem,\n Separator: ContextMenuSeparator,\n Shortcut: ContextMenuShortcut,\n Sub: ContextMenuSub,\n SubTrigger: ContextMenuSubTrigger,\n SubContent: ContextMenuSubContent,\n});\n\nexport { ContextMenu };\nexport type { ContextMenuProps };\nexport type { ContextMenuItem } from \"./ContextMenu\";\n"],"names":["ContextMenu","ContextMenuWrapper","ContextMenuPrimitive","ContextMenuPortal","ContextMenuTrigger","ContextMenuContent","ContextMenuGroup","ContextMenuLabel","ContextMenuItem","ContextMenuCheckboxItem","ContextMenuRadioGroup","ContextMenuRadioItem","ContextMenuSeparator","ContextMenuShortcut","ContextMenuSub","ContextMenuSubTrigger","ContextMenuSubContent"],"mappings":"oLAmBMA,EAAc,OAAO,OAAOC,UAAoB,CAEpD,KAAMC,EAAAA,YACN,OAAQC,EAAAA,kBACR,QAASC,EAAAA,mBACT,QAASC,EAAAA,mBACT,MAAOC,EAAAA,iBACP,MAAOC,EAAAA,iBACP,KAAMC,EAAAA,gBACN,aAAcC,EAAAA,wBACd,WAAYC,EAAAA,sBACZ,UAAWC,EAAAA,qBACX,UAAWC,EAAAA,qBACX,SAAUC,EAAAA,oBACV,IAAKC,EAAAA,eACL,WAAYC,EAAAA,sBACZ,WAAYC,EAAAA,qBACd,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Cropper.cjs","sources":["../../../../src/components/Cropper/Cropper.tsx"],"sourcesContent":["\"use client\";\n\nimport { cn, Slot, useComposedRefs } from \"@dsui/ui/index\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\n\nconst ROOT_NAME = \"Cropper\";\nconst CONTENT_NAME = \"CropperContent\";\nconst IMAGE_NAME = \"CropperImage\";\nconst VIDEO_NAME = \"CropperVideo\";\nconst AREA_NAME = \"CropperArea\";\n\ninterface Point {\n x: number;\n y: number;\n}\n\ninterface GestureEvent extends UIEvent {\n rotation: number;\n scale: number;\n clientX: number;\n clientY: number;\n}\n\ninterface Size {\n width: number;\n height: number;\n}\n\ninterface Area {\n width: number;\n height: number;\n x: number;\n y: number;\n}\n\ninterface MediaSize {\n width: number;\n height: number;\n naturalWidth: number;\n naturalHeight: number;\n}\n\ntype Shape = \"rectangle\" | \"circle\";\ntype ObjectFit = \"contain\" | \"cover\" | \"horizontal-cover\" | \"vertical-cover\";\n\ninterface DivProps extends React.ComponentProps<\"div\"> {\n asChild?: boolean;\n}\n\nconst MAX_CACHE_SIZE = 200;\nconst DPR = typeof window !== \"undefined\" ? window.devicePixelRatio || 1 : 1;\n\nconst rotationSizeCache = new Map<string, Size>();\nconst cropSizeCache = new Map<string, Size>();\nconst croppedAreaCache = new Map<\n string,\n { croppedAreaPercentages: Area; croppedAreaPixels: Area }\n>();\nconst onPositionClampCache = new Map<string, Point>();\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n\nfunction quantize(n: number, step = 2 / DPR): number {\n return Math.round(n / step) * step;\n}\n\nfunction quantizePosition(n: number, step = 4 / DPR): number {\n return Math.round(n / step) * step;\n}\n\nfunction quantizeZoom(n: number, step = 0.01): number {\n return Math.round(n / step) * step;\n}\n\nfunction quantizeRotation(n: number, step = 1.0): number {\n return Math.round(n / step) * step;\n}\n\nfunction snapToDevicePixel(n: number): number {\n return Math.round(n * DPR) / DPR;\n}\n\nfunction lruGet<K, V>(map: Map<K, V>, key: K): V | undefined {\n const v = map.get(key);\n if (v !== undefined) {\n map.delete(key);\n map.set(key, v);\n }\n return v;\n}\n\nfunction lruSet<K, V>(\n map: Map<K, V>,\n key: K,\n val: V,\n max = MAX_CACHE_SIZE\n): void {\n if (map.has(key)) {\n map.delete(key);\n }\n map.set(key, val);\n if (map.size > max) {\n const firstKey = map.keys().next().value;\n if (firstKey !== undefined) {\n map.delete(firstKey);\n }\n }\n}\n\nfunction getDistanceBetweenPoints(pointA: Point, pointB: Point): number {\n return Math.sqrt((pointA.y - pointB.y) ** 2 + (pointA.x - pointB.x) ** 2);\n}\n\nfunction getCenter(a: Point, b: Point): Point {\n return {\n x: (b.x + a.x) * 0.5,\n y: (b.y + a.y) * 0.5,\n };\n}\n\nfunction getRotationBetweenPoints(pointA: Point, pointB: Point): number {\n return (Math.atan2(pointB.y - pointA.y, pointB.x - pointA.x) * 180) / Math.PI;\n}\n\nfunction getRadianAngle(degreeValue: number): number {\n return (degreeValue * Math.PI) / 180;\n}\n\nfunction rotateSize(width: number, height: number, rotation: number): Size {\n const cacheKey = `${quantize(width)}-${quantize(height)}-${quantizeRotation(rotation)}`;\n\n const cached = lruGet(rotationSizeCache, cacheKey);\n if (cached) {\n return cached;\n }\n const rotRad = getRadianAngle(rotation);\n const cosRot = Math.cos(rotRad);\n const sinRot = Math.sin(rotRad);\n\n const result: Size = {\n width: Math.abs(cosRot * width) + Math.abs(sinRot * height),\n height: Math.abs(sinRot * width) + Math.abs(cosRot * height),\n };\n\n lruSet(rotationSizeCache, cacheKey, result, MAX_CACHE_SIZE);\n return result;\n}\n\nfunction getCropSize(\n mediaWidth: number,\n mediaHeight: number,\n contentWidth: number,\n contentHeight: number,\n aspect: number,\n rotation = 0\n): Size {\n const cacheKey = `${quantize(mediaWidth, 8)}-${quantize(mediaHeight, 8)}-${quantize(contentWidth, 8)}-${quantize(contentHeight, 8)}-${quantize(aspect, 0.01)}-${quantizeRotation(rotation)}`;\n\n const cached = lruGet(cropSizeCache, cacheKey);\n if (cached) {\n return cached;\n }\n const { width, height } = rotateSize(mediaWidth, mediaHeight, rotation);\n const fittingWidth = Math.min(width, contentWidth);\n const fittingHeight = Math.min(height, contentHeight);\n\n const result: Size =\n fittingWidth > fittingHeight * aspect\n ? {\n width: fittingHeight * aspect,\n height: fittingHeight,\n }\n : {\n width: fittingWidth,\n height: fittingWidth / aspect,\n };\n\n lruSet(cropSizeCache, cacheKey, result, MAX_CACHE_SIZE);\n return result;\n}\n\nfunction onPositionClamp(\n position: Point,\n mediaSize: Size,\n cropSize: Size,\n zoom: number,\n rotation = 0\n): Point {\n const quantizedX = quantizePosition(position.x);\n const quantizedY = quantizePosition(position.y);\n\n const cacheKey = `${quantizedX}-${quantizedY}-${quantize(mediaSize.width)}-${quantize(mediaSize.height)}-${quantize(cropSize.width)}-${quantize(cropSize.height)}-${quantizeZoom(zoom)}-${quantizeRotation(rotation)}`;\n\n const cached = lruGet(onPositionClampCache, cacheKey);\n if (cached) {\n return cached;\n }\n const { width, height } = rotateSize(\n mediaSize.width,\n mediaSize.height,\n rotation\n );\n\n const maxPositionX = width * zoom * 0.5 - cropSize.width * 0.5;\n const maxPositionY = height * zoom * 0.5 - cropSize.height * 0.5;\n\n const result: Point = {\n x: clamp(position.x, -maxPositionX, maxPositionX),\n y: clamp(position.y, -maxPositionY, maxPositionY),\n };\n\n lruSet(onPositionClampCache, cacheKey, result, MAX_CACHE_SIZE);\n return result;\n}\n\nfunction getCroppedArea(\n crop: Point,\n mediaSize: MediaSize,\n cropSize: Size,\n aspect: number,\n zoom: number,\n rotation = 0,\n allowOverflow = false\n): { croppedAreaPercentages: Area; croppedAreaPixels: Area } {\n const cacheKey = `${quantizePosition(crop.x)}-${quantizePosition(crop.y)}-${quantize(mediaSize.width)}-${quantize(mediaSize.height)}-${quantize(mediaSize.naturalWidth)}-${quantize(mediaSize.naturalHeight)}-${quantize(cropSize.width)}-${quantize(cropSize.height)}-${quantize(aspect, 0.01)}-${quantizeZoom(zoom)}-${quantizeRotation(rotation)}-${allowOverflow}`;\n\n const cached = lruGet(croppedAreaCache, cacheKey);\n\n if (cached) return cached;\n\n const onAreaLimit = !allowOverflow\n ? (max: number, value: number) => Math.min(max, Math.max(0, value))\n : (_max: number, value: number) => value;\n\n const mediaBBoxSize = rotateSize(mediaSize.width, mediaSize.height, rotation);\n const mediaNaturalBBoxSize = rotateSize(\n mediaSize.naturalWidth,\n mediaSize.naturalHeight,\n rotation\n );\n\n const croppedAreaPercentages: Area = {\n x: onAreaLimit(\n 100,\n (((mediaBBoxSize.width - cropSize.width / zoom) / 2 - crop.x / zoom) /\n mediaBBoxSize.width) *\n 100\n ),\n y: onAreaLimit(\n 100,\n (((mediaBBoxSize.height - cropSize.height / zoom) / 2 - crop.y / zoom) /\n mediaBBoxSize.height) *\n 100\n ),\n width: onAreaLimit(\n 100,\n ((cropSize.width / mediaBBoxSize.width) * 100) / zoom\n ),\n height: onAreaLimit(\n 100,\n ((cropSize.height / mediaBBoxSize.height) * 100) / zoom\n ),\n };\n\n const widthInPixels = Math.round(\n onAreaLimit(\n mediaNaturalBBoxSize.width,\n (croppedAreaPercentages.width * mediaNaturalBBoxSize.width) / 100\n )\n );\n const heightInPixels = Math.round(\n onAreaLimit(\n mediaNaturalBBoxSize.height,\n (croppedAreaPercentages.height * mediaNaturalBBoxSize.height) / 100\n )\n );\n const isImageWiderThanHigh =\n mediaNaturalBBoxSize.width >= mediaNaturalBBoxSize.height * aspect;\n\n const sizePixels: Size = isImageWiderThanHigh\n ? {\n width: Math.round(heightInPixels * aspect),\n height: heightInPixels,\n }\n : {\n width: widthInPixels,\n height: Math.round(widthInPixels / aspect),\n };\n\n const croppedAreaPixels: Area = {\n ...sizePixels,\n x: Math.round(\n onAreaLimit(\n mediaNaturalBBoxSize.width - sizePixels.width,\n (croppedAreaPercentages.x * mediaNaturalBBoxSize.width) / 100\n )\n ),\n y: Math.round(\n onAreaLimit(\n mediaNaturalBBoxSize.height - sizePixels.height,\n (croppedAreaPercentages.y * mediaNaturalBBoxSize.height) / 100\n )\n ),\n };\n\n const result = { croppedAreaPercentages, croppedAreaPixels };\n\n lruSet(croppedAreaCache, cacheKey, result, MAX_CACHE_SIZE);\n return result;\n}\n\nfunction useLazyRef<T>(fn: () => T) {\n const ref = React.useRef<T | null>(null);\n\n if (ref.current === null) {\n ref.current = fn();\n }\n\n return ref as React.RefObject<T>;\n}\n\nconst useIsomorphicLayoutEffect =\n typeof window !== \"undefined\" ? React.useLayoutEffect : React.useEffect;\n\ninterface StoreState {\n crop: Point;\n zoom: number;\n rotation: number;\n mediaSize: MediaSize | null;\n cropSize: Size | null;\n isDragging: boolean;\n isWheelZooming: boolean;\n}\n\ninterface Store {\n subscribe: (callback: () => void) => () => void;\n getState: () => StoreState;\n setState: <K extends keyof StoreState>(key: K, value: StoreState[K]) => void;\n notify: () => void;\n batch: (fn: () => void) => void;\n}\n\nfunction createStore(\n listenersRef: React.RefObject<Set<() => void>>,\n stateRef: React.RefObject<StoreState>,\n aspectRatio: number,\n allowOverflow: boolean,\n onCropChange?: (crop: Point) => void,\n onCropSizeChange?: (cropSize: Size) => void,\n onCropAreaChange?: (croppedArea: Area, croppedAreaPixels: Area) => void,\n onCropComplete?: (croppedArea: Area, croppedAreaPixels: Area) => void,\n onZoomChange?: (zoom: number) => void,\n onRotationChange?: (rotation: number) => void,\n onMediaLoaded?: (mediaSize: MediaSize) => void,\n onInteractionStart?: () => void,\n onInteractionEnd?: () => void\n): Store {\n let isBatching = false;\n let raf: number | null = null;\n\n function notifyCropAreaChange() {\n if (raf != null) return;\n raf = requestAnimationFrame(() => {\n raf = null;\n const s = stateRef.current;\n if (s?.mediaSize && s.cropSize && onCropAreaChange) {\n const { croppedAreaPercentages, croppedAreaPixels } = getCroppedArea(\n s.crop,\n s.mediaSize,\n s.cropSize,\n aspectRatio,\n s.zoom,\n s.rotation,\n allowOverflow\n );\n onCropAreaChange(croppedAreaPercentages, croppedAreaPixels);\n }\n });\n }\n\n const store: Store = {\n subscribe: (cb) => {\n if (listenersRef.current) {\n listenersRef.current.add(cb);\n return () => listenersRef.current?.delete(cb);\n }\n return () => {};\n },\n getState: () =>\n stateRef.current ?? {\n crop: { x: 0, y: 0 },\n zoom: 1,\n rotation: 0,\n mediaSize: null,\n cropSize: null,\n isDragging: false,\n isWheelZooming: false,\n },\n setState: (key, value) => {\n const state = stateRef.current;\n if (!state || Object.is(state[key], value)) return;\n\n state[key] = value;\n\n if (\n key === \"crop\" &&\n typeof value === \"object\" &&\n value &&\n \"x\" in value\n ) {\n onCropChange?.(value);\n } else if (key === \"zoom\" && typeof value === \"number\") {\n onZoomChange?.(value);\n } else if (key === \"rotation\" && typeof value === \"number\") {\n onRotationChange?.(value);\n } else if (\n key === \"cropSize\" &&\n typeof value === \"object\" &&\n value &&\n \"width\" in value\n ) {\n onCropSizeChange?.(value);\n } else if (\n key === \"mediaSize\" &&\n typeof value === \"object\" &&\n value &&\n \"naturalWidth\" in value\n ) {\n onMediaLoaded?.(value);\n } else if (key === \"isDragging\") {\n if (value) {\n onInteractionStart?.();\n } else {\n onInteractionEnd?.();\n const currentState = stateRef.current;\n if (\n currentState?.mediaSize &&\n currentState.cropSize &&\n onCropComplete\n ) {\n const { croppedAreaPercentages, croppedAreaPixels } =\n getCroppedArea(\n currentState.crop,\n currentState.mediaSize,\n currentState.cropSize,\n aspectRatio,\n currentState.zoom,\n currentState.rotation,\n allowOverflow\n );\n onCropComplete(croppedAreaPercentages, croppedAreaPixels);\n }\n }\n }\n\n if (\n (key === \"crop\" ||\n key === \"zoom\" ||\n key === \"rotation\" ||\n key === \"mediaSize\" ||\n key === \"cropSize\") &&\n onCropAreaChange\n ) {\n notifyCropAreaChange();\n }\n\n if (!isBatching) {\n store.notify();\n }\n },\n notify: () => {\n if (listenersRef.current) {\n for (const cb of listenersRef.current) {\n cb();\n }\n }\n },\n batch: (fn: () => void) => {\n if (isBatching) {\n fn();\n return;\n }\n isBatching = true;\n try {\n fn();\n } finally {\n isBatching = false;\n store.notify();\n }\n },\n };\n\n return store;\n}\n\nconst StoreContext = React.createContext<Store | null>(null);\n\nfunction useStoreContext(consumerName: string) {\n const context = React.useContext(StoreContext);\n if (!context) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${ROOT_NAME}\\``);\n }\n return context;\n}\n\nfunction useStore<T>(selector: (state: StoreState) => T): T {\n const store = useStoreContext(\"useStore\");\n\n const getSnapshot = React.useCallback(\n () => selector(store.getState()),\n [store, selector]\n );\n\n return React.useSyncExternalStore(store.subscribe, getSnapshot, getSnapshot);\n}\n\ntype RootElement = React.ComponentRef<typeof CropperRootImpl>;\n\ninterface CropperContextValue {\n aspectRatio: number;\n minZoom: number;\n maxZoom: number;\n zoomSpeed: number;\n keyboardStep: number;\n shape: Shape;\n objectFit: ObjectFit;\n rootRef: React.RefObject<RootElement | null>;\n allowOverflow: boolean;\n preventScrollZoom: boolean;\n withGrid: boolean;\n}\n\nconst CropperContext = React.createContext<CropperContextValue | null>(null);\n\nfunction useCropperContext(consumerName: string) {\n const context = React.useContext(CropperContext);\n if (!context) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${ROOT_NAME}\\``);\n }\n return context;\n}\n\ninterface CropperRootProps extends DivProps {\n crop?: Point;\n zoom?: number;\n minZoom?: number;\n maxZoom?: number;\n zoomSpeed?: number;\n rotation?: number;\n keyboardStep?: number;\n aspectRatio?: number;\n shape?: Shape;\n objectFit?: ObjectFit;\n allowOverflow?: boolean;\n preventScrollZoom?: boolean;\n withGrid?: boolean;\n onCropChange?: (crop: Point) => void;\n onCropSizeChange?: (cropSize: Size) => void;\n onCropAreaChange?: (croppedArea: Area, croppedAreaPixels: Area) => void;\n onCropComplete?: (croppedArea: Area, croppedAreaPixels: Area) => void;\n onZoomChange?: (zoom: number) => void;\n onRotationChange?: (rotation: number) => void;\n onMediaLoaded?: (mediaSize: MediaSize) => void;\n onInteractionStart?: () => void;\n onInteractionEnd?: () => void;\n onWheelZoom?: (event: WheelEvent) => void;\n}\n\nfunction CropperRoot(props: CropperRootProps) {\n const {\n crop = { x: 0, y: 0 },\n zoom = 1,\n minZoom = 1,\n maxZoom = 3,\n zoomSpeed = 1,\n rotation = 0,\n keyboardStep = 1,\n aspectRatio = 4 / 3,\n shape = \"rectangle\",\n objectFit = \"contain\",\n allowOverflow = false,\n preventScrollZoom = false,\n withGrid = false,\n onCropChange,\n onCropSizeChange,\n onCropAreaChange,\n onCropComplete,\n onZoomChange,\n onRotationChange,\n onMediaLoaded,\n onInteractionStart,\n onInteractionEnd,\n className,\n ...rootProps\n } = props;\n\n const listenersRef = useLazyRef(() => new Set<() => void>());\n const stateRef = useLazyRef<StoreState>(() => ({\n crop,\n zoom,\n rotation,\n mediaSize: null,\n cropSize: null,\n isDragging: false,\n isWheelZooming: false,\n }));\n\n const rootRef = React.useRef<RootElement>(null);\n\n const store = React.useMemo(\n () =>\n createStore(\n listenersRef,\n stateRef,\n aspectRatio,\n allowOverflow,\n onCropChange,\n onCropSizeChange,\n onCropAreaChange,\n onCropComplete,\n onZoomChange,\n onRotationChange,\n onMediaLoaded,\n onInteractionStart,\n onInteractionEnd\n ),\n [\n listenersRef,\n stateRef,\n aspectRatio,\n allowOverflow,\n onCropChange,\n onCropSizeChange,\n onCropAreaChange,\n onCropComplete,\n onZoomChange,\n onRotationChange,\n onMediaLoaded,\n onInteractionStart,\n onInteractionEnd,\n ]\n );\n\n useIsomorphicLayoutEffect(() => {\n const updates: Partial<StoreState> = {};\n let hasUpdates = false;\n let shouldRecompute = false;\n\n if (crop !== undefined) {\n const currentState = store.getState();\n if (!Object.is(currentState.crop, crop)) {\n updates.crop = crop;\n hasUpdates = true;\n }\n }\n\n if (zoom !== undefined) {\n const currentState = store.getState();\n if (currentState.zoom !== zoom) {\n updates.zoom = zoom;\n hasUpdates = true;\n shouldRecompute = true;\n }\n }\n\n if (rotation !== undefined) {\n const currentState = store.getState();\n if (currentState.rotation !== rotation) {\n updates.rotation = rotation;\n hasUpdates = true;\n shouldRecompute = true;\n }\n }\n\n if (hasUpdates) {\n store.batch(() => {\n Object.entries(updates).forEach(([key, value]) => {\n store.setState(key as keyof StoreState, value);\n });\n });\n\n if (shouldRecompute && rootRef.current) {\n requestAnimationFrame(() => {\n const currentState = store.getState();\n if (currentState.cropSize && currentState.mediaSize) {\n const newPosition = !allowOverflow\n ? onPositionClamp(\n currentState.crop,\n currentState.mediaSize,\n currentState.cropSize,\n currentState.zoom,\n currentState.rotation\n )\n : currentState.crop;\n\n if (\n Math.abs(newPosition.x - currentState.crop.x) > 0.001 ||\n Math.abs(newPosition.y - currentState.crop.y) > 0.001\n ) {\n store.setState(\"crop\", newPosition);\n }\n }\n });\n }\n }\n }, [crop, zoom, rotation, store, allowOverflow]);\n\n const contextValue = React.useMemo<CropperContextValue>(\n () => ({\n minZoom,\n maxZoom,\n zoomSpeed,\n keyboardStep,\n aspectRatio,\n shape,\n objectFit,\n preventScrollZoom,\n allowOverflow,\n withGrid,\n rootRef,\n }),\n [\n minZoom,\n maxZoom,\n zoomSpeed,\n keyboardStep,\n aspectRatio,\n shape,\n objectFit,\n preventScrollZoom,\n allowOverflow,\n withGrid,\n ]\n );\n\n return (\n <StoreContext.Provider value={store}>\n <CropperContext.Provider value={contextValue}>\n <div\n data-slot=\"cropper-wrapper\"\n className={cn(\"ds:relative ds:size-full ds:overflow-hidden\", className)}\n >\n <CropperRootImpl {...rootProps} />\n </div>\n </CropperContext.Provider>\n </StoreContext.Provider>\n );\n}\n\ninterface CropperRootImplProps extends CropperRootProps {\n onWheelZoom?: (event: WheelEvent) => void;\n}\n\nfunction CropperRootImpl(props: CropperRootImplProps) {\n const { className, asChild, ref, ...contentProps } = props;\n\n const context = useCropperContext(CONTENT_NAME);\n const store = useStoreContext(CONTENT_NAME);\n const crop = useStore((state) => state.crop);\n const zoom = useStore((state) => state.zoom);\n const rotation = useStore((state) => state.rotation);\n const mediaSize = useStore((state) => state.mediaSize);\n const cropSize = useStore((state) => state.cropSize);\n\n const composedRef = useComposedRefs(ref, context.rootRef);\n const dragStartPositionRef = React.useRef<Point>({ x: 0, y: 0 });\n const dragStartCropRef = React.useRef<Point>({ x: 0, y: 0 });\n const contentPositionRef = React.useRef<Point>({ x: 0, y: 0 });\n const lastPinchDistanceRef = React.useRef(0);\n const lastPinchRotationRef = React.useRef(0);\n const rafDragTimeoutRef = React.useRef<number | null>(null);\n const rafPinchTimeoutRef = React.useRef<number | null>(null);\n const wheelTimerRef = React.useRef<number | null>(null);\n const isTouchingRef = React.useRef(false);\n const gestureZoomStartRef = React.useRef(0);\n const gestureRotationStartRef = React.useRef(0);\n\n const onRefsCleanup = React.useCallback(() => {\n if (rafDragTimeoutRef.current) {\n cancelAnimationFrame(rafDragTimeoutRef.current);\n rafDragTimeoutRef.current = null;\n }\n if (rafPinchTimeoutRef.current) {\n cancelAnimationFrame(rafPinchTimeoutRef.current);\n rafPinchTimeoutRef.current = null;\n }\n if (wheelTimerRef.current) {\n clearTimeout(wheelTimerRef.current);\n wheelTimerRef.current = null;\n }\n isTouchingRef.current = false;\n }, []);\n\n const onCachesCleanup = React.useCallback(() => {\n if (onPositionClampCache.size > MAX_CACHE_SIZE * 1.5) {\n onPositionClampCache.clear();\n }\n if (croppedAreaCache.size > MAX_CACHE_SIZE * 1.5) {\n croppedAreaCache.clear();\n }\n }, []);\n\n const getMousePoint = React.useCallback(\n (event: MouseEvent | React.MouseEvent) => ({\n x: Number(event.clientX),\n y: Number(event.clientY),\n }),\n []\n );\n\n const getTouchPoint = React.useCallback(\n (touch: Touch | React.Touch) => ({\n x: Number(touch.clientX),\n y: Number(touch.clientY),\n }),\n []\n );\n\n const onContentPositionChange = React.useCallback(() => {\n if (context.rootRef?.current) {\n const bounds = context.rootRef.current.getBoundingClientRect();\n contentPositionRef.current = { x: bounds.left, y: bounds.top };\n }\n }, [context.rootRef]);\n\n const getPointOnContent = React.useCallback(\n ({ x, y }: Point, contentTopLeft: Point): Point => {\n if (!context.rootRef?.current) {\n return { x: 0, y: 0 };\n }\n const contentRect = context.rootRef.current.getBoundingClientRect();\n return {\n x: contentRect.width / 2 - (x - contentTopLeft.x),\n y: contentRect.height / 2 - (y - contentTopLeft.y),\n };\n },\n [context.rootRef]\n );\n\n const getPointOnMedia = React.useCallback(\n ({ x, y }: Point) => {\n return {\n x: (x + crop.x) / zoom,\n y: (y + crop.y) / zoom,\n };\n },\n [crop, zoom]\n );\n\n const recomputeCropPosition = React.useCallback(() => {\n if (!cropSize || !mediaSize) return;\n\n const newPosition = !context.allowOverflow\n ? onPositionClamp(crop, mediaSize, cropSize, zoom, rotation)\n : crop;\n\n if (\n Math.abs(newPosition.x - crop.x) > 0.001 ||\n Math.abs(newPosition.y - crop.y) > 0.001\n ) {\n store.setState(\"crop\", newPosition);\n }\n }, [cropSize, mediaSize, context.allowOverflow, crop, zoom, rotation, store]);\n\n const onZoomChange = React.useCallback(\n (newZoom: number, point: Point, shouldUpdatePosition = true) => {\n if (!cropSize || !mediaSize) return;\n\n const clampedZoom = clamp(newZoom, context.minZoom, context.maxZoom);\n\n store.batch(() => {\n if (shouldUpdatePosition) {\n const zoomPoint = getPointOnContent(\n point,\n contentPositionRef.current\n );\n const zoomTarget = getPointOnMedia(zoomPoint);\n const requestedPosition = {\n x: zoomTarget.x * clampedZoom - zoomPoint.x,\n y: zoomTarget.y * clampedZoom - zoomPoint.y,\n };\n\n const newPosition = !context.allowOverflow\n ? onPositionClamp(\n requestedPosition,\n mediaSize,\n cropSize,\n clampedZoom,\n rotation\n )\n : requestedPosition;\n\n store.setState(\"crop\", newPosition);\n }\n store.setState(\"zoom\", clampedZoom);\n });\n\n requestAnimationFrame(() => {\n recomputeCropPosition();\n });\n },\n [\n cropSize,\n mediaSize,\n context.minZoom,\n context.maxZoom,\n context.allowOverflow,\n getPointOnContent,\n getPointOnMedia,\n rotation,\n store,\n recomputeCropPosition,\n ]\n );\n\n const onDragStart = React.useCallback(\n ({ x, y }: Point) => {\n dragStartPositionRef.current = { x, y };\n dragStartCropRef.current = { ...crop };\n store.setState(\"isDragging\", true);\n },\n [crop, store]\n );\n\n const onDrag = React.useCallback(\n ({ x, y }: Point) => {\n if (rafDragTimeoutRef.current) {\n cancelAnimationFrame(rafDragTimeoutRef.current);\n }\n\n rafDragTimeoutRef.current = requestAnimationFrame(() => {\n if (!cropSize || !mediaSize) return;\n if (x === undefined || y === undefined) return;\n\n const offsetX = x - dragStartPositionRef.current.x;\n const offsetY = y - dragStartPositionRef.current.y;\n\n if (Math.abs(offsetX) < 2 && Math.abs(offsetY) < 2) {\n return;\n }\n\n const requestedPosition = {\n x: dragStartCropRef.current.x + offsetX,\n y: dragStartCropRef.current.y + offsetY,\n };\n\n const newPosition = !context.allowOverflow\n ? onPositionClamp(\n requestedPosition,\n mediaSize,\n cropSize,\n zoom,\n rotation\n )\n : requestedPosition;\n\n const currentCrop = store.getState().crop;\n if (\n Math.abs(newPosition.x - currentCrop.x) > 1 ||\n Math.abs(newPosition.y - currentCrop.y) > 1\n ) {\n store.setState(\"crop\", newPosition);\n }\n });\n },\n [cropSize, mediaSize, context.allowOverflow, zoom, rotation, store]\n );\n\n const onMouseMove = React.useCallback(\n (event: MouseEvent) => onDrag(getMousePoint(event)),\n [getMousePoint, onDrag]\n );\n\n const onTouchMove = React.useCallback(\n (event: TouchEvent) => {\n event.preventDefault();\n if (event.touches.length === 2) {\n const [firstTouch, secondTouch] = event.touches ?? [];\n if (firstTouch && secondTouch) {\n const pointA = getTouchPoint(firstTouch);\n const pointB = getTouchPoint(secondTouch);\n const center = getCenter(pointA, pointB);\n onDrag(center);\n\n if (rafPinchTimeoutRef.current) {\n cancelAnimationFrame(rafPinchTimeoutRef.current);\n }\n\n rafPinchTimeoutRef.current = requestAnimationFrame(() => {\n const distance = getDistanceBetweenPoints(pointA, pointB);\n const distanceRatio = distance / lastPinchDistanceRef.current;\n\n if (Math.abs(distanceRatio - 1) > 0.01) {\n const newZoom = zoom * distanceRatio;\n onZoomChange(newZoom, center, false);\n lastPinchDistanceRef.current = distance;\n }\n\n const rotationAngle = getRotationBetweenPoints(pointA, pointB);\n const rotationDiff = rotationAngle - lastPinchRotationRef.current;\n\n if (Math.abs(rotationDiff) > 0.5) {\n const newRotation = rotation + rotationDiff;\n store.setState(\"rotation\", newRotation);\n lastPinchRotationRef.current = rotationAngle;\n }\n });\n }\n } else if (event.touches.length === 1) {\n const firstTouch = event.touches[0];\n if (firstTouch) {\n onDrag(getTouchPoint(firstTouch));\n }\n }\n },\n [getTouchPoint, onDrag, zoom, onZoomChange, rotation, store]\n );\n\n const onGestureChange = React.useCallback(\n (event: GestureEvent) => {\n event.preventDefault();\n if (isTouchingRef.current) {\n return;\n }\n\n const point = { x: Number(event.clientX), y: Number(event.clientY) };\n const newZoom = gestureZoomStartRef.current - 1 + event.scale;\n onZoomChange(newZoom, point, true);\n\n const newRotation = gestureRotationStartRef.current + event.rotation;\n store.setState(\"rotation\", newRotation);\n },\n [onZoomChange, store]\n );\n\n const onGestureEnd = React.useCallback(() => {\n document.removeEventListener(\n \"gesturechange\",\n onGestureChange as EventListener\n );\n document.removeEventListener(\"gestureend\", onGestureEnd as EventListener);\n }, [onGestureChange]);\n\n const onGestureStart = React.useCallback(\n (event: GestureEvent) => {\n event.preventDefault();\n document.addEventListener(\n \"gesturechange\",\n onGestureChange as EventListener\n );\n document.addEventListener(\"gestureend\", onGestureEnd as EventListener);\n gestureZoomStartRef.current = zoom;\n gestureRotationStartRef.current = rotation;\n },\n [zoom, rotation, onGestureChange, onGestureEnd]\n );\n\n const onSafariZoomPrevent = React.useCallback(\n (event: Event) => event.preventDefault(),\n []\n );\n\n const onEventsCleanup = React.useCallback(() => {\n document.removeEventListener(\"mousemove\", onMouseMove);\n document.removeEventListener(\"touchmove\", onTouchMove);\n document.removeEventListener(\n \"gesturechange\",\n onGestureChange as EventListener\n );\n document.removeEventListener(\"gestureend\", onGestureEnd as EventListener);\n }, [onMouseMove, onTouchMove, onGestureChange, onGestureEnd]);\n\n const onDragStopped = React.useCallback(() => {\n isTouchingRef.current = false;\n store.setState(\"isDragging\", false);\n onRefsCleanup();\n document.removeEventListener(\"mouseup\", onDragStopped);\n document.removeEventListener(\"touchend\", onDragStopped);\n onEventsCleanup();\n }, [store, onEventsCleanup, onRefsCleanup]);\n\n const getWheelDelta = React.useCallback((event: WheelEvent) => {\n let deltaX = event.deltaX;\n let deltaY = event.deltaY;\n let deltaZ = event.deltaZ;\n\n if (event.deltaMode === 1) {\n deltaX *= 16;\n deltaY *= 16;\n deltaZ *= 16;\n } else if (event.deltaMode === 2) {\n deltaX *= 400;\n deltaY *= 400;\n deltaZ *= 400;\n }\n\n return { deltaX, deltaY, deltaZ };\n }, []);\n\n const onWheelZoom = React.useCallback(\n (event: WheelEvent) => {\n contentProps.onWheelZoom?.(event);\n if (event.defaultPrevented) return;\n\n event.preventDefault();\n const point = getMousePoint(event);\n const { deltaY } = getWheelDelta(event);\n const newZoom = zoom - (deltaY * context.zoomSpeed) / 200;\n onZoomChange(newZoom, point, true);\n\n store.batch(() => {\n const currentState = store.getState();\n if (!currentState.isWheelZooming) {\n store.setState(\"isWheelZooming\", true);\n }\n if (!currentState.isDragging) {\n store.setState(\"isDragging\", true);\n }\n });\n\n if (wheelTimerRef.current) {\n clearTimeout(wheelTimerRef.current);\n }\n wheelTimerRef.current = window.setTimeout(() => {\n store.batch(() => {\n store.setState(\"isWheelZooming\", false);\n store.setState(\"isDragging\", false);\n });\n }, 250);\n },\n [\n contentProps.onWheelZoom,\n getMousePoint,\n zoom,\n context.zoomSpeed,\n onZoomChange,\n getWheelDelta,\n store,\n ]\n );\n\n const onKeyUp = React.useCallback(\n (event: React.KeyboardEvent<RootElement>) => {\n contentProps.onKeyUp?.(event);\n if (event.defaultPrevented) return;\n\n const arrowKeys = new Set([\n \"ArrowUp\",\n \"ArrowDown\",\n \"ArrowLeft\",\n \"ArrowRight\",\n ]);\n\n if (arrowKeys.has(event.key)) {\n event.preventDefault();\n store.setState(\"isDragging\", false);\n }\n },\n [contentProps.onKeyUp, store]\n );\n\n const onKeyDown = React.useCallback(\n (event: React.KeyboardEvent<RootElement>) => {\n contentProps.onKeyDown?.(event);\n if (event.defaultPrevented || !cropSize || !mediaSize) return;\n\n let step = context.keyboardStep;\n if (event.shiftKey) {\n step *= 0.2;\n }\n\n const keyCallbacks: Record<string, () => Point> = {\n ArrowUp: () => ({ ...crop, y: crop.y - step }),\n ArrowDown: () => ({ ...crop, y: crop.y + step }),\n ArrowLeft: () => ({ ...crop, x: crop.x - step }),\n ArrowRight: () => ({ ...crop, x: crop.x + step }),\n } as const;\n\n const callback = keyCallbacks[event.key];\n if (!callback) return;\n\n event.preventDefault();\n\n let newCrop = callback();\n\n if (!context.allowOverflow) {\n newCrop = onPositionClamp(newCrop, mediaSize, cropSize, zoom, rotation);\n }\n\n if (!event.repeat) {\n store.setState(\"isDragging\", true);\n }\n\n store.setState(\"crop\", newCrop);\n },\n [\n contentProps.onKeyDown,\n cropSize,\n mediaSize,\n context.keyboardStep,\n context.allowOverflow,\n crop,\n zoom,\n rotation,\n store,\n ]\n );\n\n const onMouseDown = React.useCallback(\n (event: React.MouseEvent<RootElement>) => {\n contentProps.onMouseDown?.(event);\n if (event.defaultPrevented) return;\n\n event.preventDefault();\n document.addEventListener(\"mousemove\", onMouseMove);\n document.addEventListener(\"mouseup\", onDragStopped);\n onContentPositionChange();\n onDragStart(getMousePoint(event));\n },\n [\n contentProps.onMouseDown,\n getMousePoint,\n onDragStart,\n onDragStopped,\n onMouseMove,\n onContentPositionChange,\n ]\n );\n\n const onTouchStart = React.useCallback(\n (event: React.TouchEvent<RootElement>) => {\n contentProps.onTouchStart?.(event);\n if (event.defaultPrevented) return;\n\n isTouchingRef.current = true;\n document.addEventListener(\"touchmove\", onTouchMove, { passive: false });\n document.addEventListener(\"touchend\", onDragStopped);\n onContentPositionChange();\n\n if (event.touches.length === 2) {\n const [firstTouch, secondTouch] = event.touches\n ? Array.from(event.touches)\n : [];\n if (firstTouch && secondTouch) {\n const pointA = getTouchPoint(firstTouch);\n const pointB = getTouchPoint(secondTouch);\n lastPinchDistanceRef.current = getDistanceBetweenPoints(\n pointA,\n pointB\n );\n lastPinchRotationRef.current = getRotationBetweenPoints(\n pointA,\n pointB\n );\n onDragStart(getCenter(pointA, pointB));\n }\n } else if (event.touches.length === 1) {\n const firstTouch = event.touches[0];\n if (firstTouch) {\n onDragStart(getTouchPoint(firstTouch));\n }\n }\n },\n [\n contentProps.onTouchStart,\n onDragStopped,\n onTouchMove,\n onContentPositionChange,\n getTouchPoint,\n onDragStart,\n ]\n );\n\n React.useEffect(() => {\n const content = context.rootRef?.current;\n if (!content) return;\n\n if (!context.preventScrollZoom) {\n content.addEventListener(\"wheel\", onWheelZoom, { passive: false });\n }\n\n content.addEventListener(\"gesturestart\", onSafariZoomPrevent);\n content.addEventListener(\"gesturestart\", onGestureStart as EventListener);\n\n return () => {\n if (!context.preventScrollZoom) {\n content.removeEventListener(\"wheel\", onWheelZoom);\n }\n content.removeEventListener(\"gesturestart\", onSafariZoomPrevent);\n content.removeEventListener(\n \"gesturestart\",\n onGestureStart as EventListener\n );\n onRefsCleanup();\n };\n }, [\n context.rootRef,\n context.preventScrollZoom,\n onWheelZoom,\n onRefsCleanup,\n onSafariZoomPrevent,\n onGestureStart,\n ]);\n\n React.useEffect(() => {\n return () => {\n onRefsCleanup();\n onCachesCleanup();\n };\n }, [onRefsCleanup, onCachesCleanup]);\n\n const RootPrimitive = asChild ? Slot : \"div\";\n\n return (\n <RootPrimitive\n data-slot=\"cropper\"\n tabIndex={0}\n {...contentProps}\n ref={composedRef}\n className={cn(\n \"ds:absolute ds:inset-0 ds:flex ds:cursor-move ds:touch-none ds:select-none ds:items-center ds:justify-center ds:overflow-hidden ds:outline-none\",\n className\n )}\n onKeyUp={onKeyUp}\n onKeyDown={onKeyDown}\n onMouseDown={onMouseDown}\n onTouchStart={onTouchStart}\n />\n );\n}\n\nconst cropperMediaVariants = cva(\"ds:will-change-transform\", {\n variants: {\n objectFit: {\n contain: \"ds:absolute ds:inset-0 ds:m-auto ds:max-h-full ds:max-w-full\",\n cover: \"ds:h-auto ds:w-full\",\n \"horizontal-cover\": \"ds:h-auto ds:w-full\",\n \"vertical-cover\": \"ds:h-full ds:w-auto\",\n },\n },\n defaultVariants: {\n objectFit: \"contain\",\n },\n});\n\ninterface UseMediaComputationProps<\n T extends HTMLImageElement | HTMLVideoElement,\n> {\n mediaRef: React.RefObject<T | null>;\n context: CropperContextValue;\n store: Store;\n rotation: number;\n getNaturalDimensions: (media: T) => Size;\n}\n\nfunction useMediaComputation<T extends HTMLImageElement | HTMLVideoElement>({\n mediaRef,\n context,\n store,\n rotation,\n getNaturalDimensions,\n}: UseMediaComputationProps<T>) {\n const computeSizes = React.useCallback(() => {\n const media = mediaRef.current;\n const content = context.rootRef?.current;\n if (!media || !content) return;\n\n const contentRect = content.getBoundingClientRect();\n const containerAspect = contentRect.width / contentRect.height;\n const { width: naturalWidth, height: naturalHeight } =\n getNaturalDimensions(media);\n const isScaledDown =\n media.offsetWidth < naturalWidth || media.offsetHeight < naturalHeight;\n const mediaAspect = naturalWidth / naturalHeight;\n\n let renderedMediaSize: Size;\n\n if (isScaledDown) {\n const objectFitCallbacks = {\n contain: () =>\n containerAspect > mediaAspect\n ? {\n width: contentRect.height * mediaAspect,\n height: contentRect.height,\n }\n : {\n width: contentRect.width,\n height: contentRect.width / mediaAspect,\n },\n \"horizontal-cover\": () => ({\n width: contentRect.width,\n height: contentRect.width / mediaAspect,\n }),\n \"vertical-cover\": () => ({\n width: contentRect.height * mediaAspect,\n height: contentRect.height,\n }),\n cover: () =>\n containerAspect < mediaAspect\n ? {\n width: contentRect.width,\n height: contentRect.width / mediaAspect,\n }\n : {\n width: contentRect.height * mediaAspect,\n height: contentRect.height,\n },\n } as const;\n\n const callback = objectFitCallbacks[context.objectFit];\n renderedMediaSize = callback\n ? callback()\n : containerAspect > mediaAspect\n ? {\n width: contentRect.height * mediaAspect,\n height: contentRect.height,\n }\n : {\n width: contentRect.width,\n height: contentRect.width / mediaAspect,\n };\n } else {\n renderedMediaSize = {\n width: media.offsetWidth,\n height: media.offsetHeight,\n };\n }\n\n const mediaSize: MediaSize = {\n ...renderedMediaSize,\n naturalWidth,\n naturalHeight,\n };\n\n store.setState(\"mediaSize\", mediaSize);\n\n const cropSize = getCropSize(\n mediaSize.width,\n mediaSize.height,\n contentRect.width,\n contentRect.height,\n context.aspectRatio,\n rotation\n );\n\n store.setState(\"cropSize\", cropSize);\n\n requestAnimationFrame(() => {\n const currentState = store.getState();\n if (currentState.cropSize && currentState.mediaSize) {\n const newPosition = onPositionClamp(\n currentState.crop,\n currentState.mediaSize,\n currentState.cropSize,\n currentState.zoom,\n currentState.rotation\n );\n\n if (\n Math.abs(newPosition.x - currentState.crop.x) > 0.001 ||\n Math.abs(newPosition.y - currentState.crop.y) > 0.001\n ) {\n store.setState(\"crop\", newPosition);\n }\n }\n });\n\n return { mediaSize, cropSize };\n }, [\n mediaRef,\n context.aspectRatio,\n context.rootRef,\n context.objectFit,\n store,\n rotation,\n getNaturalDimensions,\n ]);\n\n return { computeSizes };\n}\n\ninterface CropperImageProps\n extends React.ComponentProps<\"img\">,\n VariantProps<typeof cropperMediaVariants> {\n asChild?: boolean;\n snapPixels?: boolean;\n}\n\nfunction CropperImage(props: CropperImageProps) {\n const {\n className,\n style,\n asChild,\n ref,\n onLoad,\n objectFit,\n snapPixels = false,\n ...imageProps\n } = props;\n\n const context = useCropperContext(IMAGE_NAME);\n const store = useStoreContext(IMAGE_NAME);\n const crop = useStore((state) => state.crop);\n const zoom = useStore((state) => state.zoom);\n const rotation = useStore((state) => state.rotation);\n\n const imageRef = React.useRef<HTMLImageElement>(null);\n const composedRef = useComposedRefs(ref, imageRef);\n\n const getNaturalDimensions = React.useCallback(\n (image: HTMLImageElement) => ({\n width: image.naturalWidth,\n height: image.naturalHeight,\n }),\n []\n );\n\n const { computeSizes } = useMediaComputation({\n mediaRef: imageRef,\n context,\n store,\n rotation,\n getNaturalDimensions,\n });\n\n const onMediaLoad = React.useCallback(() => {\n const image = imageRef.current;\n if (!image) return;\n\n computeSizes();\n\n onLoad?.(\n new Event(\"load\") as unknown as React.SyntheticEvent<HTMLImageElement>\n );\n }, [computeSizes, onLoad]);\n\n React.useEffect(() => {\n const image = imageRef.current;\n if (image?.complete && image.naturalWidth > 0) {\n onMediaLoad();\n }\n }, [onMediaLoad]);\n\n React.useEffect(() => {\n const content = context.rootRef?.current;\n if (!content) return;\n\n if (typeof ResizeObserver !== \"undefined\") {\n let isFirstResize = true;\n const resizeObserver = new ResizeObserver(() => {\n if (isFirstResize) {\n isFirstResize = false;\n return;\n }\n\n const callback = () => {\n const image = imageRef.current;\n if (image?.complete && image.naturalWidth > 0) {\n computeSizes();\n }\n };\n\n if (\"requestIdleCallback\" in window) {\n requestIdleCallback(callback);\n } else {\n setTimeout(callback, 16);\n }\n });\n\n resizeObserver.observe(content);\n\n return () => {\n resizeObserver.disconnect();\n };\n } else {\n const onWindowResize = () => {\n const image = imageRef.current;\n if (image?.complete && image.naturalWidth > 0) {\n computeSizes();\n }\n };\n\n window.addEventListener(\"resize\", onWindowResize);\n return () => {\n window.removeEventListener(\"resize\", onWindowResize);\n };\n }\n }, [context.rootRef, computeSizes]);\n\n const ImagePrimitive = asChild ? Slot : \"img\";\n\n return (\n <ImagePrimitive\n data-slot=\"cropper-image\"\n {...imageProps}\n ref={composedRef}\n className={cn(\n cropperMediaVariants({\n objectFit: objectFit ?? context.objectFit,\n className,\n })\n )}\n style={{\n transform: snapPixels\n ? `translate(${snapToDevicePixel(crop.x)}px, ${snapToDevicePixel(crop.y)}px) rotate(${rotation}deg) scale(${zoom})`\n : `translate(${crop.x}px, ${crop.y}px) rotate(${rotation}deg) scale(${zoom})`,\n ...style,\n }}\n onLoad={onMediaLoad}\n />\n );\n}\n\ninterface CropperVideoProps\n extends React.ComponentProps<\"video\">,\n VariantProps<typeof cropperMediaVariants> {\n asChild?: boolean;\n snapPixels?: boolean;\n}\n\nfunction CropperVideo(props: CropperVideoProps) {\n const {\n className,\n style,\n asChild,\n ref,\n onLoadedMetadata,\n objectFit,\n snapPixels = false,\n ...videoProps\n } = props;\n\n const context = useCropperContext(VIDEO_NAME);\n const store = useStoreContext(VIDEO_NAME);\n const crop = useStore((state) => state.crop);\n const zoom = useStore((state) => state.zoom);\n const rotation = useStore((state) => state.rotation);\n\n const videoRef = React.useRef<HTMLVideoElement>(null);\n const composedRef = useComposedRefs(ref, videoRef);\n\n const getNaturalDimensions = React.useCallback(\n (video: HTMLVideoElement) => ({\n width: video.videoWidth,\n height: video.videoHeight,\n }),\n []\n );\n\n const { computeSizes } = useMediaComputation({\n mediaRef: videoRef,\n context,\n store,\n rotation,\n getNaturalDimensions,\n });\n\n const onMediaLoad = React.useCallback(() => {\n const video = videoRef.current;\n if (!video) return;\n\n computeSizes();\n\n onLoadedMetadata?.(\n new Event(\n \"loadedmetadata\"\n ) as unknown as React.SyntheticEvent<HTMLVideoElement>\n );\n }, [computeSizes, onLoadedMetadata]);\n\n React.useEffect(() => {\n const content = context.rootRef?.current;\n if (!content) return;\n\n if (typeof ResizeObserver !== \"undefined\") {\n let isFirstResize = true;\n const resizeObserver = new ResizeObserver(() => {\n if (isFirstResize) {\n isFirstResize = false;\n return;\n }\n\n const callback = () => {\n const video = videoRef.current;\n if (video && video.videoWidth > 0 && video.videoHeight > 0) {\n computeSizes();\n }\n };\n\n if (\"requestIdleCallback\" in window) {\n requestIdleCallback(callback);\n } else {\n setTimeout(callback, 16);\n }\n });\n\n resizeObserver.observe(content);\n\n return () => {\n resizeObserver.disconnect();\n };\n } else {\n const onWindowResize = () => {\n const video = videoRef.current;\n if (video && video.videoWidth > 0 && video.videoHeight > 0) {\n computeSizes();\n }\n };\n\n window.addEventListener(\"resize\", onWindowResize);\n return () => {\n window.removeEventListener(\"resize\", onWindowResize);\n };\n }\n }, [context.rootRef, computeSizes]);\n\n const VideoPrimitive = asChild ? Slot : \"video\";\n\n return (\n <VideoPrimitive\n data-slot=\"cropper-video\"\n autoPlay\n playsInline\n loop\n muted\n controls={false}\n {...videoProps}\n ref={composedRef}\n className={cn(\n cropperMediaVariants({\n objectFit: objectFit ?? context.objectFit,\n className,\n })\n )}\n style={{\n transform: snapPixels\n ? `translate(${snapToDevicePixel(crop.x)}px, ${snapToDevicePixel(crop.y)}px) rotate(${rotation}deg) scale(${zoom})`\n : `translate(${crop.x}px, ${crop.y}px) rotate(${rotation}deg) scale(${zoom})`,\n ...style,\n }}\n onLoadedMetadata={onMediaLoad}\n />\n );\n}\n\nconst cropperAreaVariants = cva(\n \"ds:-translate-x-1/2 ds:-translate-y-1/2 ds:absolute ds:top-1/2 ds:left-1/2 ds:box-border ds:overflow-hidden ds:border ds:border-[2.5px] ds:border-white/90 ds:shadow-[0_0_0_9999em_rgba(0,0,0,0.5)]\",\n {\n variants: {\n shape: {\n rectangle: \"\",\n circle: \"ds:rounded-full\",\n },\n withGrid: {\n true: \"ds:before:absolute ds:before:top-0 ds:before:right-1/3 ds:before:bottom-0 ds:before:left-1/3 ds:before:box-border ds:before:border ds:before:border-white/50 ds:before:border-t-0 ds:before:border-b-0 ds:before:content-[''] ds:after:absolute ds:after:top-1/3 ds:after:right-0 ds:after:bottom-1/3 ds:after:left-0 ds:after:box-border ds:after:border ds:after:border-white/50 ds:after:border-r-0 ds:after:border-l-0 ds:after:content-['']\",\n false: \"\",\n },\n },\n defaultVariants: {\n shape: \"rectangle\",\n withGrid: false,\n },\n }\n);\n\ninterface CropperAreaProps\n extends DivProps,\n VariantProps<typeof cropperAreaVariants> {\n snapPixels?: boolean;\n}\n\nfunction CropperArea(props: CropperAreaProps) {\n const {\n className,\n style,\n asChild,\n ref,\n snapPixels = false,\n shape,\n withGrid,\n ...areaProps\n } = props;\n\n const context = useCropperContext(AREA_NAME);\n const cropSize = useStore((state) => state.cropSize);\n\n if (!cropSize) return null;\n\n const AreaPrimitive = asChild ? Slot : \"div\";\n\n return (\n <AreaPrimitive\n data-slot=\"cropper-area\"\n {...areaProps}\n ref={ref}\n className={cn(\n cropperAreaVariants({\n shape: shape ?? context.shape,\n withGrid: withGrid ?? context.withGrid,\n className,\n })\n )}\n style={{\n width: snapPixels ? Math.round(cropSize.width) : cropSize.width,\n height: snapPixels ? Math.round(cropSize.height) : cropSize.height,\n ...style,\n }}\n />\n );\n}\n\nexport {\n CropperRoot as Root,\n CropperImage as Image,\n CropperVideo as Video,\n CropperArea as Area,\n //\n CropperRoot as Cropper,\n CropperImage,\n CropperVideo,\n CropperArea,\n //\n useStore as useCropper,\n //\n type CropperRootProps as CropperProps,\n type Point as CropperPoint,\n type Size as CropperSize,\n type Area as CropperAreaData,\n type Shape as CropperShape,\n type ObjectFit as CropperObjectFit,\n};\n"],"names":["ROOT_NAME","CONTENT_NAME","IMAGE_NAME","VIDEO_NAME","AREA_NAME","MAX_CACHE_SIZE","DPR","rotationSizeCache","cropSizeCache","croppedAreaCache","onPositionClampCache","clamp","value","min","max","quantize","n","step","quantizePosition","quantizeZoom","quantizeRotation","snapToDevicePixel","lruGet","map","key","v","lruSet","val","firstKey","getDistanceBetweenPoints","pointA","pointB","getCenter","a","b","getRotationBetweenPoints","getRadianAngle","degreeValue","rotateSize","width","height","rotation","cacheKey","cached","rotRad","cosRot","sinRot","result","getCropSize","mediaWidth","mediaHeight","contentWidth","contentHeight","aspect","fittingWidth","fittingHeight","onPositionClamp","position","mediaSize","cropSize","zoom","quantizedX","quantizedY","maxPositionX","maxPositionY","getCroppedArea","crop","allowOverflow","onAreaLimit","_max","mediaBBoxSize","mediaNaturalBBoxSize","croppedAreaPercentages","widthInPixels","heightInPixels","sizePixels","croppedAreaPixels","useLazyRef","fn","ref","React","useIsomorphicLayoutEffect","createStore","listenersRef","stateRef","aspectRatio","onCropChange","onCropSizeChange","onCropAreaChange","onCropComplete","onZoomChange","onRotationChange","onMediaLoaded","onInteractionStart","onInteractionEnd","isBatching","raf","notifyCropAreaChange","s","store","cb","state","currentState","StoreContext","useStoreContext","consumerName","context","useStore","selector","getSnapshot","CropperContext","useCropperContext","CropperRoot","props","minZoom","maxZoom","zoomSpeed","keyboardStep","shape","objectFit","preventScrollZoom","withGrid","className","rootProps","rootRef","updates","hasUpdates","shouldRecompute","newPosition","contextValue","jsx","cn","CropperRootImpl","asChild","contentProps","composedRef","useComposedRefs","dragStartPositionRef","dragStartCropRef","contentPositionRef","lastPinchDistanceRef","lastPinchRotationRef","rafDragTimeoutRef","rafPinchTimeoutRef","wheelTimerRef","isTouchingRef","gestureZoomStartRef","gestureRotationStartRef","onRefsCleanup","onCachesCleanup","getMousePoint","event","getTouchPoint","touch","onContentPositionChange","bounds","getPointOnContent","x","y","contentTopLeft","contentRect","getPointOnMedia","recomputeCropPosition","newZoom","point","shouldUpdatePosition","clampedZoom","zoomPoint","zoomTarget","requestedPosition","onDragStart","onDrag","offsetX","offsetY","currentCrop","onMouseMove","onTouchMove","firstTouch","secondTouch","center","distance","distanceRatio","rotationAngle","rotationDiff","newRotation","onGestureChange","onGestureEnd","onGestureStart","onSafariZoomPrevent","onEventsCleanup","onDragStopped","getWheelDelta","deltaX","deltaY","deltaZ","onWheelZoom","onKeyUp","onKeyDown","callback","newCrop","onMouseDown","onTouchStart","content","RootPrimitive","Slot","cropperMediaVariants","cva","useMediaComputation","mediaRef","getNaturalDimensions","media","containerAspect","naturalWidth","naturalHeight","isScaledDown","mediaAspect","renderedMediaSize","CropperImage","style","onLoad","snapPixels","imageProps","imageRef","image","computeSizes","onMediaLoad","isFirstResize","resizeObserver","onWindowResize","ImagePrimitive","CropperVideo","onLoadedMetadata","videoProps","videoRef","video","VideoPrimitive","cropperAreaVariants","CropperArea","areaProps","AreaPrimitive"],"mappings":"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"}
|