@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":"Select.cjs","sources":["../../../../src/components/Select/Select.tsx"],"sourcesContent":["import React from \"react\";\nimport {\n MultiSelect as BaseMultiSelect,\n MultiSelectTrigger as BaseMultiSelectTrigger,\n MultiSelectValue as BaseMultiSelectValue,\n MultiSelectContent as BaseMultiSelectContent,\n MultiSelectItem as BaseMultiSelectItem,\n MultiSelectGroup as BaseMultiSelectGroup,\n MultiSelectSeparator as BaseMultiSelectSeparator,\n} from \"@dsui/ui/components/select\";\nimport {\n Combobox,\n type ComboboxProps,\n type SelectOption as SSelectOption,\n} from \"@dsui/ui/components/combobox\";\nimport { cn } from \"@dsui/ui/lib/utils\";\nimport { FloatingLabel } from \"@/components/FloatLabel\";\nimport { Info } from \"lucide-react\";\nimport { Tooltip } from \"../Tooltip/Tooltip\";\nimport { Label } from \"../Label\";\n\nexport type SelectOption = SSelectOption;\n\nexport type SelectProps = Omit<ComboboxProps, \"ref\"> & {\n label?: string;\n helperText?: React.ReactNode;\n state?: \"default\" | \"success\" | \"warning\" | \"error\";\n size?: \"xs\" | \"sm\" | \"normal\" | \"lg\" | \"xl\";\n isFloatLabel?: boolean;\n infoTooltip?: React.ReactNode;\n clearable?: boolean;\n placeholder?: string;\n options?: SelectOption[];\n tagRender?: (option: SelectOption) => React.ReactNode;\n multiple?: boolean;\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n values?: string[];\n defaultValues?: string | string[];\n onValuesChange?: (values: string[]) => void;\n search?: boolean | { placeholder?: string; emptyMessage?: string };\n clickToRemove?: boolean;\n overflowBehavior?: \"wrap\" | \"wrap-when-open\" | \"cutoff\";\n className?: string;\n disabled?: boolean;\n onChange?: (value: string | string[]) => void;\n onFocus?: (event: React.FocusEvent<HTMLInputElement>) => void;\n onBlur?: (event: React.FocusEvent<HTMLInputElement>) => void;\n required?: boolean;\n};\n\nconst Select = React.forwardRef<HTMLDivElement, SelectProps>(\n (\n {\n className,\n label,\n helperText,\n state = \"default\",\n size = \"normal\",\n isFloatLabel,\n infoTooltip,\n clearable = false,\n placeholder = \"\",\n options = [],\n tagRender,\n multiple = false,\n value,\n defaultValue,\n onValueChange,\n values,\n defaultValues,\n onValuesChange,\n search,\n clickToRemove = true,\n overflowBehavior = \"wrap-when-open\",\n disabled,\n onChange,\n onFocus,\n onBlur,\n required,\n },\n ref\n ) => {\n const selectId = React.useId();\n\n // For single select, use controlled value or internal state\n const [internalValue, setInternalValue] = React.useState(\n value ?? defaultValue ?? \"\"\n );\n\n React.useEffect(() => {\n if (!multiple && value !== undefined) {\n setInternalValue(value);\n }\n }, [multiple, value]);\n\n // Handle single select value change\n const handleSingleValueChange = React.useCallback(\n (newValue?: string | null) => {\n const val = newValue || \"\";\n if (value === undefined) {\n setInternalValue(val);\n }\n onValueChange?.(val);\n onChange?.(val);\n },\n [onValueChange, onChange, value]\n );\n\n // Handle multi select values change\n const handleMultiValuesChange = React.useCallback(\n (newValues: string[]) => {\n onValuesChange?.(newValues);\n onChange?.(newValues);\n },\n [onValuesChange, onChange]\n );\n\n // Helper text styles\n const helperTextStyles = {\n default: \"ds:text-muted-foreground\",\n success: \"ds:text-success\",\n warning: \"ds:text-warning\",\n error: \"ds:text-error\",\n };\n\n // Calculate current size\n const currentSize = isFloatLabel\n ? size === \"xl\" || size === \"lg\"\n ? size\n : \"xl\"\n : size;\n\n // Group options by group property\n const groupedOptions = React.useMemo(() => {\n const groups = new Map<string | undefined, SelectOption[]>();\n options.forEach((option) => {\n const group = option.group;\n if (!groups.has(group)) {\n groups.set(group, []);\n }\n groups.get(group)!.push(option);\n });\n return groups;\n }, [options]);\n\n return (\n <div className={className}>\n <div\n ref={ref}\n className={cn(\"ds:flex ds:flex-col ds:gap-1.5 ds:relative\", {\n \"ds:floating-label ds:relative\": isFloatLabel,\n })}\n >\n {!isFloatLabel && label && (\n <Label\n htmlFor={selectId}\n className=\"ds:flex ds:gap-2 ds:text-sm ds:font-medium ds:leading-none ds:peer-disabled:cursor-not-allowed ds:peer-disabled:opacity-70\"\n >\n <span>\n {label}\n {required && <span className=\"ds:text-error ds:ml-0.5\">*</span>}\n </span>\n {infoTooltip && (\n <Tooltip content={infoTooltip}>\n <Info className=\"ds:size-3.5 ds:min-w-3.5\" />\n </Tooltip>\n )}\n </Label>\n )}\n\n <div className=\"ds:relative\">\n {!multiple ? (\n // Single Mode\n <>\n <Combobox\n value={value ?? internalValue}\n options={options}\n placeHolder={placeholder}\n emptyText={\n typeof search === \"object\"\n ? search.emptyMessage\n : \"No results found\"\n }\n onChange={handleSingleValueChange}\n clearable={clearable}\n disabled={disabled}\n id={selectId}\n className={cn(\n \"ds:peer ds:w-full ds:justify-start\",\n {\n \"ds:pt-5 ds:pb-1\": isFloatLabel && size !== \"lg\",\n }\n // className,\n )}\n size={currentSize}\n state={state}\n dropdownClassName={cn(\"ds:opacity-40\", {\n \"ds:translate-y-[-8px]\": isFloatLabel && size !== \"lg\",\n })}\n searchable={!!search}\n tagRender={tagRender}\n onFocus={onFocus}\n onBlur={onBlur}\n />\n {isFloatLabel && (\n <FloatingLabel\n htmlFor={selectId}\n size={size}\n infoTooltip={infoTooltip}\n required={required}\n shouldFloat={!!(value ?? internalValue)}\n className=\"ds:pointer-events-none\"\n >\n {label}\n </FloatingLabel>\n )}\n </>\n ) : (\n // Multi Mode\n <BaseMultiSelect\n values={values}\n defaultValues={\n typeof defaultValues === \"string\"\n ? [defaultValues]\n : defaultValues\n }\n onValuesChange={handleMultiValuesChange}\n >\n <BaseMultiSelectTrigger\n id={selectId}\n disabled={disabled}\n className={cn(\n \"ds:peer ds:w-full\",\n {\n \"ds:pt-5 ds:pb-1\": isFloatLabel && size !== \"lg\",\n },\n className\n )}\n size={currentSize}\n state={state}\n onFocus={onFocus}\n onBlur={onBlur}\n >\n <BaseMultiSelectValue\n placeholder={placeholder}\n clickToRemove={clickToRemove && clearable}\n overflowBehavior={overflowBehavior}\n />\n </BaseMultiSelectTrigger>\n\n {isFloatLabel && (\n <FloatingLabel\n htmlFor={selectId}\n size={size}\n infoTooltip={infoTooltip}\n required={required}\n >\n {label}\n </FloatingLabel>\n )}\n\n <BaseMultiSelectContent search={search}>\n {[...groupedOptions.entries()].map(([group, items]) => {\n if (group) {\n return (\n <React.Fragment key={group}>\n <BaseMultiSelectGroup heading={group}>\n {items.map((option) => (\n <BaseMultiSelectItem\n key={option.value}\n value={option.value}\n disabled={option?.disabled}\n icon={option?.icon}\n tagRender={!!tagRender}\n >\n {tagRender ? tagRender(option) : option.label}\n </BaseMultiSelectItem>\n ))}\n </BaseMultiSelectGroup>\n <BaseMultiSelectSeparator />\n </React.Fragment>\n );\n }\n return items.map((option) => (\n <BaseMultiSelectItem\n key={option.value}\n value={option.value}\n disabled={option?.disabled}\n icon={option?.icon}\n tagRender={!!tagRender}\n >\n {tagRender ? tagRender(option) : option.label}\n </BaseMultiSelectItem>\n ));\n })}\n </BaseMultiSelectContent>\n </BaseMultiSelect>\n )}\n </div>\n\n {helperText && (\n <p className={cn(\"ds:text-xs\", state ? helperTextStyles[state] : \"\")}>\n {helperText}\n </p>\n )}\n </div>\n </div>\n );\n }\n);\n\nSelect.displayName = \"Select\";\nexport default Select;\n"],"names":["Select","React","className","label","helperText","state","size","isFloatLabel","infoTooltip","clearable","placeholder","options","tagRender","multiple","value","defaultValue","onValueChange","values","defaultValues","onValuesChange","search","clickToRemove","overflowBehavior","disabled","onChange","onFocus","onBlur","required","ref","selectId","internalValue","setInternalValue","handleSingleValueChange","newValue","val","handleMultiValuesChange","newValues","helperTextStyles","currentSize","groupedOptions","groups","option","group","jsx","jsxs","cn","Label","Tooltip","Info","BaseMultiSelect","BaseMultiSelectTrigger","BaseMultiSelectValue","FloatingLabel","BaseMultiSelectContent","items","BaseMultiSelectGroup","BaseMultiSelectItem","BaseMultiSelectSeparator","Fragment","Combobox"],"mappings":"8dAoDMA,EAASC,EAAM,WACnB,CACE,CACE,UAAAC,EAAA,MACAC,EACA,WAAAC,EACA,MAAAC,EAAQ,UACR,KAAAC,EAAO,SACP,aAAAC,EACA,YAAAC,EACA,UAAAC,EAAY,GACZ,YAAAC,EAAc,GACd,QAAAC,EAAU,CAAA,EACV,UAAAC,EACA,SAAAC,EAAW,GACX,MAAAC,EACA,aAAAC,EACA,cAAAC,EACA,OAAAC,EACA,cAAAC,EACA,eAAAC,EACA,OAAAC,EACA,cAAAC,EAAgB,GAChB,iBAAAC,EAAmB,iBACnB,SAAAC,EACA,SAAAC,EACA,QAAAC,EACA,OAAAC,EACA,SAAAC,CAAA,EAEFC,IACG,CACH,MAAMC,EAAW5B,EAAM,MAAA,EAGjB,CAAC6B,EAAeC,CAAgB,EAAI9B,EAAM,SAC9Ca,GAASC,GAAgB,EAAA,EAG3Bd,EAAM,UAAU,IAAM,CAChB,CAACY,GAAYC,IAAU,QACzBiB,EAAiBjB,CAAK,CAE1B,EAAG,CAACD,EAAUC,CAAK,CAAC,EAGpB,MAAMkB,EAA0B/B,EAAM,YACnCgC,GAA6B,CAC5B,MAAMC,EAAMD,GAAY,GACpBnB,IAAU,QACZiB,EAAiBG,CAAG,EAEtBlB,IAAgBkB,CAAG,EACnBV,IAAWU,CAAG,CAChB,EACA,CAAClB,EAAeQ,EAAUV,CAAK,CAAA,EAI3BqB,EAA0BlC,EAAM,YACnCmC,GAAwB,CACvBjB,IAAiBiB,CAAS,EAC1BZ,IAAWY,CAAS,CACtB,EACA,CAACjB,EAAgBK,CAAQ,CAAA,EAIrBa,EAAmB,CACvB,QAAS,2BACT,QAAS,kBACT,QAAS,kBACT,MAAO,eAAA,EAIHC,EAAc/B,EAChBD,IAAS,MAAQA,IAAS,KACxBA,EACA,KACFA,EAGEiC,EAAiBtC,EAAM,QAAQ,IAAM,CACzC,MAAMuC,MAAa,IACnB,OAAA7B,EAAQ,QAAS8B,GAAW,CAC1B,MAAMC,EAAQD,EAAO,MAChBD,EAAO,IAAIE,CAAK,GACnBF,EAAO,IAAIE,EAAO,EAAE,EAEtBF,EAAO,IAAIE,CAAK,EAAG,KAAKD,CAAM,CAChC,CAAC,EACMD,CACT,EAAG,CAAC7B,CAAO,CAAC,EAEZ,OACEgC,EAAAA,IAAC,OAAI,UAAAzC,EACH,SAAA0C,EAAAA,KAAC,MAAA,CACC,IAAAhB,EACA,UAAWiB,EAAAA,GAAG,6CAA8C,CAC1D,gCAAiCtC,CAAA,CAClC,EAEA,SAAA,CAAA,CAACA,GAAgBJ,GAChByC,EAAAA,KAACE,EAAAA,MAAA,CACC,QAASjB,EACT,UAAU,6HAEV,SAAA,CAAAe,OAAC,OAAA,CACE,SAAA,CAAAzC,EACAwB,GAAYgB,EAAAA,IAAC,OAAA,CAAK,UAAU,0BAA0B,SAAA,GAAA,CAAC,CAAA,EAC1D,EACCnC,SACEuC,UAAA,CAAQ,QAASvC,EAChB,SAAAmC,EAAAA,IAACK,EAAAA,KAAA,CAAK,UAAU,0BAAA,CAA2B,CAAA,CAC7C,CAAA,CAAA,CAAA,EAKNL,EAAAA,IAAC,MAAA,CAAI,UAAU,cACZ,SAAC9B,EAgDA+B,EAAAA,KAACK,EAAAA,YAAA,CACC,OAAAhC,EACA,cACE,OAAOC,GAAkB,SACrB,CAACA,CAAa,EACdA,EAEN,eAAgBiB,EAEhB,SAAA,CAAAQ,EAAAA,IAACO,EAAAA,mBAAA,CACC,GAAIrB,EACJ,SAAAN,EACA,UAAWsB,EAAAA,GACT,oBACA,CACE,kBAAmBtC,GAAgBD,IAAS,IAAA,EAE9CJ,CAAA,EAEF,KAAMoC,EACN,MAAAjC,EACA,QAAAoB,EACA,OAAAC,EAEA,SAAAiB,EAAAA,IAACQ,EAAAA,iBAAA,CACC,YAAAzC,EACA,cAAeW,GAAiBZ,EAChC,iBAAAa,CAAA,CAAA,CACF,CAAA,EAGDf,GACCoC,EAAAA,IAACS,EAAAA,cAAA,CACC,QAASvB,EACT,KAAAvB,EACA,YAAAE,EACA,SAAAmB,EAEC,SAAAxB,CAAA,CAAA,EAILwC,EAAAA,IAACU,EAAAA,mBAAA,CAAuB,OAAAjC,EACrB,SAAA,CAAC,GAAGmB,EAAe,QAAA,CAAS,EAAE,IAAI,CAAC,CAACG,EAAOY,CAAK,IAC3CZ,EAEAE,OAAC3C,EAAM,SAAN,CACC,SAAA,CAAA0C,MAACY,EAAAA,kBAAqB,QAASb,EAC5B,SAAAY,EAAM,IAAKb,GACVE,EAAAA,IAACa,EAAAA,gBAAA,CAEC,MAAOf,EAAO,MACd,SAAUA,GAAQ,SAClB,KAAMA,GAAQ,KACd,UAAW,CAAC,CAAC7B,EAEZ,SAAAA,EAAYA,EAAU6B,CAAM,EAAIA,EAAO,KAAA,EANnCA,EAAO,KAAA,CAQf,EACH,QACCgB,EAAAA,qBAAA,CAAA,CAAyB,CAAA,CAAA,EAdPf,CAerB,EAGGY,EAAM,IAAKb,GAChBE,EAAAA,IAACa,EAAAA,gBAAA,CAEC,MAAOf,EAAO,MACd,SAAUA,GAAQ,SAClB,KAAMA,GAAQ,KACd,UAAW,CAAC,CAAC7B,EAEZ,SAAAA,EAAYA,EAAU6B,CAAM,EAAIA,EAAO,KAAA,EANnCA,EAAO,KAAA,CAQf,CACF,CAAA,CACH,CAAA,CAAA,CAAA,EA1HFG,OAAAc,EAAAA,SAAA,CACE,SAAA,CAAAf,EAAAA,IAACgB,EAAAA,SAAA,CACC,MAAO7C,GAASgB,EAChB,QAAAnB,EACA,YAAaD,EACb,UACE,OAAOU,GAAW,SACdA,EAAO,aACP,mBAEN,SAAUY,EACV,UAAAvB,EACA,SAAAc,EACA,GAAIM,EACJ,UAAWgB,EAAAA,GACT,qCACA,CACE,kBAAmBtC,GAAgBD,IAAS,IAAA,CAC9C,EAGF,KAAMgC,EACN,MAAAjC,EACA,kBAAmBwC,EAAAA,GAAG,gBAAiB,CACrC,wBAAyBtC,GAAgBD,IAAS,IAAA,CACnD,EACD,WAAY,CAAC,CAACc,EACd,UAAAR,EACA,QAAAa,EACA,OAAAC,CAAA,CAAA,EAEDnB,GACCoC,EAAAA,IAACS,EAAAA,cAAA,CACC,QAASvB,EACT,KAAAvB,EACA,YAAAE,EACA,SAAAmB,EACA,YAAa,CAAC,EAAEb,GAASgB,GACzB,UAAU,yBAET,SAAA3B,CAAA,CAAA,CACH,CAAA,CAEJ,EAkFJ,EAECC,GACCuC,EAAAA,IAAC,IAAA,CAAE,UAAWE,EAAAA,GAAG,aAAcxC,EAAQgC,EAAiBhC,CAAK,EAAI,EAAE,EAChE,SAAAD,CAAA,CACH,CAAA,CAAA,CAAA,EAGN,CAEJ,CACF,EAEAJ,EAAO,YAAc"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Separator.cjs","sources":["../../../../src/components/Separator/Separator.tsx"],"sourcesContent":["import {\n Separator as SSeparator,\n type SeparatorProps,\n} from \"@dsui/ui/components/separator\";\n\nconst Separator = (props: SeparatorProps) => {\n return <SSeparator {...props} />;\n};\n\nexport default Separator;\nexport type { SeparatorProps };\n"],"names":["Separator","props","jsx","SSeparator"],"mappings":"6MAKMA,EAAaC,GACVC,MAACC,EAAAA,UAAA,CAAY,GAAGF,CAAA,CAAO"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Sheet.cjs","sources":["../../../../src/components/Sheet/Sheet.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport {\n Sheet as SSheet,\n SheetContent as SSheetContent,\n SheetDescription,\n SheetFooter,\n SheetHeader,\n SheetTitle,\n SheetTrigger,\n SheetClose,\n} from \"@dsui/ui/components/sheet\";\nimport {\n Drawer,\n DrawerClose,\n DrawerContent,\n DrawerDescription,\n DrawerFooter,\n DrawerHeader,\n DrawerTitle,\n DrawerTrigger,\n} from \"@dsui/ui/components/drawer\";\nimport { cn } from \"@dsui/ui/lib/utils\";\nimport { ScrollArea } from \"@dsui/ui/components/scroll-area\";\nimport type { BasicAnimation } from \"@/types/variables\";\nimport { animationClass } from \"@/utils/animations\";\nimport { isMobile } from \"react-device-detect\";\n\nexport type SheetSide = \"top\" | \"right\" | \"bottom\" | \"left\";\nexport type SheetSize = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\n\nexport interface SheetProps {\n // Core props\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n\n // Content\n title?: React.ReactNode;\n description?: React.ReactNode;\n children?: React.ReactNode;\n trigger?: React.ReactNode;\n footer?: React.ReactNode;\n\n // Behavior\n side?: SheetSide;\n closeOnEsc?: boolean;\n closeOnOutside?: boolean;\n showCloseButton?: boolean;\n autoDrawerOnMobile?: boolean;\n\n // Layout\n size?: SheetSize;\n stickyHeader?: boolean;\n stickyFooter?: boolean;\n autoHeight?: boolean;\n\n // Animation\n animation?: BasicAnimation;\n\n // Styling\n className?: string;\n contentClassName?: string;\n headerClassName?: string;\n titleClassName?: string;\n descriptionClassName?: string;\n footerClassName?: string;\n overlayClassName?: string;\n}\n\nconst getSizeClasses = (size: SheetSize, side: SheetSide): string => {\n const isVertical = side === \"top\" || side === \"bottom\";\n const sizeMap: Record<SheetSize, string> = {\n sm: isVertical ? \"ds:max-h-[20vh]!\" : \"ds:max-w-sm\",\n md: isVertical ? \"ds:max-h-[40vh]!\" : \"ds:max-w-md\",\n lg: isVertical ? \"ds:max-h-[60vh]!\" : \"ds:max-w-lg\",\n xl: isVertical ? \"ds:max-h-[80vh]!\" : \"ds:max-w-xl\",\n full: isVertical ? \"ds:max-h-full!\" : \"ds:max-w-full\",\n };\n return sizeMap[size];\n};\n\nconst Sheet = React.forwardRef<HTMLDivElement, SheetProps>((props, ref) => {\n const {\n open,\n onOpenChange,\n title,\n description,\n children,\n trigger,\n footer,\n side = \"right\",\n closeOnEsc = true,\n closeOnOutside = true,\n showCloseButton = true,\n autoDrawerOnMobile = true,\n size = \"md\",\n stickyHeader = false,\n stickyFooter = false,\n autoHeight = true,\n animation,\n className,\n contentClassName,\n headerClassName,\n titleClassName,\n descriptionClassName,\n footerClassName,\n overlayClassName,\n } = props;\n\n const animationResult = useMemo(() => {\n return animation ? animationClass(animation) : { className: \"\" };\n }, [animation]);\n\n const contentClasses = cn(\n // Remove default padding and gap to allow custom header/footer\n \"ds:!p-0 ds:!gap-0 ds:flex ds:flex-col\",\n getSizeClasses(size, side),\n animationResult.className,\n className\n );\n\n const headerClasses = cn(\"ds:px-6 ds:pt-6 ds:text-left\", headerClassName);\n\n const footerClasses = cn(\n \"ds:px-6 ds:pb-6 ds:flex-col-reverse ds:sm:flex-row ds:sm:justify-end ds:sm:space-x-2\",\n footerClassName\n );\n\n const headerComponents = useMemo(() => {\n return title || description ? (\n <SheetHeader\n className={cn(\"ds:py-4\", { \"ds:border-b\": stickyHeader }, headerClasses)}\n >\n {title && <SheetTitle className={titleClassName}>{title}</SheetTitle>}\n {description && (\n <SheetDescription className={descriptionClassName}>\n {description}\n </SheetDescription>\n )}\n </SheetHeader>\n ) : null;\n }, [\n title,\n description,\n headerClasses,\n titleClassName,\n descriptionClassName,\n stickyHeader,\n ]);\n\n const footerComponents = useMemo(() => {\n return footer ? (\n <SheetFooter\n className={cn(\"ds:py-4\", { \"ds:border-t\": stickyFooter }, footerClasses)}\n >\n {footer}\n </SheetFooter>\n ) : null;\n }, [footer, footerClasses, stickyFooter]);\n\n // Mobile: use drawer with bottom direction if enabled\n if (isMobile && autoDrawerOnMobile) {\n const drawerContentClasses = cn(\n \"ds:flex ds:flex-col\",\n animationResult.className,\n className\n );\n\n return (\n <Drawer open={open} onOpenChange={onOpenChange} direction=\"bottom\">\n {trigger && <DrawerTrigger asChild>{trigger}</DrawerTrigger>}\n <DrawerContent\n ref={ref}\n className={cn(\n drawerContentClasses,\n autoHeight ? \"\" : getSizeClasses(size, \"bottom\")\n )}\n >\n {(title || description) && (\n <DrawerHeader className={headerClassName}>\n {title && (\n <DrawerTitle className={titleClassName}>{title}</DrawerTitle>\n )}\n {description && (\n <DrawerDescription className={descriptionClassName}>\n {description}\n </DrawerDescription>\n )}\n </DrawerHeader>\n )}\n\n <ScrollArea className={cn(\"ds:flex ds:flex-col ds:overflow-hidden\")}>\n {children && (\n <div className={cn(\"ds:px-4 ds:py-2\", contentClassName)}>\n {children}\n </div>\n )}\n </ScrollArea>\n\n {footer && (\n <DrawerFooter className={footerClassName}>{footer}</DrawerFooter>\n )}\n </DrawerContent>\n </Drawer>\n );\n }\n\n // Desktop: use sheet with original behavior\n return (\n <SSheet open={open} onOpenChange={onOpenChange}>\n {trigger && <SheetTrigger asChild>{trigger}</SheetTrigger>}\n <SSheetContent\n ref={ref}\n side={side}\n className={cn(className, contentClasses)}\n onEscapeKeyDown={(e) => !closeOnEsc && e.preventDefault()}\n onInteractOutside={(e) => !closeOnOutside && e.preventDefault()}\n overlayClassName={cn(overlayClassName)}\n >\n {/* Hide default close button if showCloseButton is false */}\n {!showCloseButton && (\n <style>{`\n [data-slot=\"sheet-content\"] > [data-slot=\"sheet-close\"] {\n display: none;\n }\n `}</style>\n )}\n\n {stickyHeader && headerComponents}\n\n <ScrollArea className=\"ds:flex ds:max-h-full ds:flex-col ds:overflow-hidden\">\n {!stickyHeader && headerComponents}\n {children && (\n <div className={cn(\"ds:px-6 ds:py-4\", contentClassName)}>{children}</div>\n )}\n {!stickyFooter && footerComponents}\n </ScrollArea>\n\n {stickyFooter && footerComponents}\n </SSheetContent>\n </SSheet>\n );\n});\n\nSheet.displayName = \"Sheet\";\n\nexport { SheetClose, DrawerClose };\nexport default Sheet;\n"],"names":["getSizeClasses","size","side","isVertical","Sheet","React","props","ref","open","onOpenChange","title","description","children","trigger","footer","closeOnEsc","closeOnOutside","showCloseButton","autoDrawerOnMobile","stickyHeader","stickyFooter","autoHeight","animation","className","contentClassName","headerClassName","titleClassName","descriptionClassName","footerClassName","overlayClassName","animationResult","useMemo","animationClass","contentClasses","cn","headerClasses","footerClasses","headerComponents","jsxs","SheetHeader","jsx","SheetTitle","SheetDescription","footerComponents","SheetFooter","isMobile","drawerContentClasses","Drawer","DrawerTrigger","DrawerContent","DrawerHeader","DrawerTitle","DrawerDescription","ScrollArea","DrawerFooter","SSheet","SheetTrigger","SSheetContent","e"],"mappings":"6cAoEMA,EAAiB,CAACC,EAAiBC,IAA4B,CACnE,MAAMC,EAAaD,IAAS,OAASA,IAAS,SAQ9C,MAP2C,CACzC,GAAIC,EAAa,mBAAqB,cACtC,GAAIA,EAAa,mBAAqB,cACtC,GAAIA,EAAa,mBAAqB,cACtC,GAAIA,EAAa,mBAAqB,cACtC,KAAMA,EAAa,iBAAmB,eAAA,EAEzBF,CAAI,CACrB,EAEMG,EAAQC,EAAM,WAAuC,CAACC,EAAOC,IAAQ,CACzE,KAAM,CACJ,KAAAC,EACA,aAAAC,EACA,MAAAC,EACA,YAAAC,EACA,SAAAC,EACA,QAAAC,EACA,OAAAC,EACA,KAAAZ,EAAO,QACP,WAAAa,EAAa,GACb,eAAAC,EAAiB,GACjB,gBAAAC,EAAkB,GAClB,mBAAAC,EAAqB,GACrB,KAAAjB,EAAO,KACP,aAAAkB,EAAe,GACf,aAAAC,EAAe,GACf,WAAAC,EAAa,GACb,UAAAC,EACA,UAAAC,EACA,iBAAAC,EACA,gBAAAC,EACA,eAAAC,EACA,qBAAAC,EACA,gBAAAC,EACA,iBAAAC,CAAA,EACEvB,EAEEwB,EAAkBC,EAAAA,QAAQ,IACvBT,EAAYU,EAAAA,eAAeV,CAAS,EAAI,CAAE,UAAW,EAAA,EAC3D,CAACA,CAAS,CAAC,EAERW,EAAiBC,EAAAA,GAErB,wCACAlC,EAAeC,EAAMC,CAAI,EACzB4B,EAAgB,UAChBP,CAAA,EAGIY,EAAgBD,EAAAA,GAAG,+BAAgCT,CAAe,EAElEW,EAAgBF,EAAAA,GACpB,uFACAN,CAAA,EAGIS,EAAmBN,EAAAA,QAAQ,IACxBrB,GAASC,EACd2B,EAAAA,KAACC,EAAAA,YAAA,CACC,UAAWL,EAAAA,GAAG,UAAW,CAAE,cAAef,CAAA,EAAgBgB,CAAa,EAEtE,SAAA,CAAAzB,GAAS8B,EAAAA,IAACC,aAAA,CAAW,UAAWf,EAAiB,SAAAhB,EAAM,EACvDC,GACC6B,EAAAA,IAACE,mBAAA,CAAiB,UAAWf,EAC1B,SAAAhB,CAAA,CACH,CAAA,CAAA,CAAA,EAGF,KACH,CACDD,EACAC,EACAwB,EACAT,EACAC,EACAR,CAAA,CACD,EAEKwB,EAAmBZ,EAAAA,QAAQ,IACxBjB,EACL0B,EAAAA,IAACI,EAAAA,YAAA,CACC,UAAWV,EAAAA,GAAG,UAAW,CAAE,cAAed,CAAA,EAAgBgB,CAAa,EAEtE,SAAAtB,CAAA,CAAA,EAED,KACH,CAACA,EAAQsB,EAAehB,CAAY,CAAC,EAGxC,GAAIyB,EAAAA,UAAY3B,EAAoB,CAClC,MAAM4B,EAAuBZ,EAAAA,GAC3B,sBACAJ,EAAgB,UAChBP,CAAA,EAGF,OACEe,EAAAA,KAACS,EAAAA,OAAA,CAAO,KAAAvC,EAAY,aAAAC,EAA4B,UAAU,SACvD,SAAA,CAAAI,GAAW2B,EAAAA,IAACQ,gBAAA,CAAc,QAAO,GAAE,SAAAnC,EAAQ,EAC5CyB,EAAAA,KAACW,EAAAA,cAAA,CACC,IAAA1C,EACA,UAAW2B,EAAAA,GACTY,EACAzB,EAAa,GAAKrB,EAAeC,EAAM,QAAQ,CAAA,EAG/C,SAAA,EAAAS,GAASC,IACT2B,EAAAA,KAACY,EAAAA,aAAA,CAAa,UAAWzB,EACtB,SAAA,CAAAf,GACC8B,EAAAA,IAACW,cAAA,CAAY,UAAWzB,EAAiB,SAAAhB,EAAM,EAEhDC,GACC6B,EAAAA,IAACY,oBAAA,CAAkB,UAAWzB,EAC3B,SAAAhB,CAAA,CACH,CAAA,EAEJ,EAGF6B,EAAAA,IAACa,EAAAA,WAAA,CAAW,UAAWnB,EAAAA,GAAG,wCAAwC,EAC/D,SAAAtB,GACC4B,EAAAA,IAAC,MAAA,CAAI,UAAWN,KAAG,kBAAmBV,CAAgB,EACnD,SAAAZ,EACH,EAEJ,EAECE,GACC0B,EAAAA,IAACc,eAAA,CAAa,UAAW1B,EAAkB,SAAAd,CAAA,CAAO,CAAA,CAAA,CAAA,CAEtD,EACF,CAEJ,CAGA,OACEwB,EAAAA,KAACiB,EAAAA,MAAA,CAAO,KAAA/C,EAAY,aAAAC,EACjB,SAAA,CAAAI,GAAW2B,EAAAA,IAACgB,eAAA,CAAa,QAAO,GAAE,SAAA3C,EAAQ,EAC3CyB,EAAAA,KAACmB,EAAAA,aAAA,CACC,IAAAlD,EACA,KAAAL,EACA,UAAWgC,EAAAA,GAAGX,EAAWU,CAAc,EACvC,gBAAkByB,GAAM,CAAC3C,GAAc2C,EAAE,eAAA,EACzC,kBAAoBA,GAAM,CAAC1C,GAAkB0C,EAAE,eAAA,EAC/C,iBAAkBxB,EAAAA,GAAGL,CAAgB,EAGpC,SAAA,CAAA,CAACZ,SACC,QAAA,CAAO,SAAA;AAAA;AAAA;AAAA;AAAA,YAIN,EAGHE,GAAgBkB,EAEjBC,EAAAA,KAACe,EAAAA,WAAA,CAAW,UAAU,uDACnB,SAAA,CAAA,CAAClC,GAAgBkB,EACjBzB,SACE,MAAA,CAAI,UAAWsB,EAAAA,GAAG,kBAAmBV,CAAgB,EAAI,SAAAZ,EAAS,EAEpE,CAACQ,GAAgBuB,CAAA,EACpB,EAECvB,GAAgBuB,CAAA,CAAA,CAAA,CACnB,EACF,CAEJ,CAAC,EAEDvC,EAAM,YAAc"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Sidebar.cjs","sources":["../../../../src/components/Sidebar/Sidebar.tsx"],"sourcesContent":["import * as React from \"react\";\n\n// Re-export all Sidebar components from shadcn/ui\nimport {\n Sidebar as SSidebar,\n SidebarProvider as SSidebarProvider,\n SidebarContent as SSidebarContent,\n SidebarFooter as SSidebarFooter,\n SidebarGroup as SSidebarGroup,\n SidebarGroupAction as SSidebarGroupAction,\n SidebarGroupContent as SSidebarGroupContent,\n SidebarGroupLabel as SSidebarGroupLabel,\n SidebarHeader as SSidebarHeader,\n SidebarInput as SSidebarInput,\n SidebarInset as SSidebarInset,\n SidebarMenu as SSidebarMenu,\n SidebarMenuAction as SSidebarMenuAction,\n SidebarMenuBadge as SSidebarMenuBadge,\n SidebarMenuButton as SSidebarMenuButton,\n SidebarMenuItem as SSidebarMenuItem,\n SidebarMenuSkeleton as SSidebarMenuSkeleton,\n SidebarMenuSub as SSidebarMenuSub,\n SidebarMenuSubButton as SSidebarMenuSubButton,\n SidebarMenuSubItem as SSidebarMenuSubItem,\n SidebarRail as SSidebarRail,\n SidebarSeparator as SSidebarSeparator,\n SidebarTrigger as SSidebarTrigger,\n} from \"@dsui/ui/components/sidebar\";\n\n// Export types derived from component props\nexport type SidebarProviderProps = React.ComponentProps<\n typeof SSidebarProvider\n>;\nexport type SidebarProps = React.ComponentProps<typeof SSidebar>;\nexport type SidebarContentProps = React.ComponentProps<typeof SSidebarContent>;\nexport type SidebarFooterProps = React.ComponentProps<typeof SSidebarFooter>;\nexport type SidebarGroupProps = React.ComponentProps<typeof SSidebarGroup>;\nexport type SidebarGroupActionProps = React.ComponentProps<\n typeof SSidebarGroupAction\n>;\nexport type SidebarGroupContentProps = React.ComponentProps<\n typeof SSidebarGroupContent\n>;\nexport type SidebarGroupLabelProps = React.ComponentProps<\n typeof SSidebarGroupLabel\n>;\nexport type SidebarHeaderProps = React.ComponentProps<typeof SSidebarHeader>;\nexport type SidebarInputProps = React.ComponentProps<typeof SSidebarInput>;\nexport type SidebarInsetProps = React.ComponentProps<typeof SSidebarInset>;\nexport type SidebarMenuProps = React.ComponentProps<typeof SSidebarMenu>;\nexport type SidebarMenuActionProps = React.ComponentProps<\n typeof SSidebarMenuAction\n>;\nexport type SidebarMenuBadgeProps = React.ComponentProps<\n typeof SSidebarMenuBadge\n>;\nexport type SidebarMenuButtonProps = React.ComponentProps<\n typeof SSidebarMenuButton\n>;\nexport type SidebarMenuItemProps = React.ComponentProps<\n typeof SSidebarMenuItem\n>;\nexport type SidebarMenuSkeletonProps = React.ComponentProps<\n typeof SSidebarMenuSkeleton\n>;\nexport type SidebarMenuSubProps = React.ComponentProps<typeof SSidebarMenuSub>;\nexport type SidebarMenuSubButtonProps = React.ComponentProps<\n typeof SSidebarMenuSubButton\n>;\nexport type SidebarMenuSubItemProps = React.ComponentProps<\n typeof SSidebarMenuSubItem\n>;\nexport type SidebarRailProps = React.ComponentProps<typeof SSidebarRail>;\nexport type SidebarSeparatorProps = React.ComponentProps<\n typeof SSidebarSeparator\n>;\nexport type SidebarTriggerProps = React.ComponentProps<typeof SSidebarTrigger>;\n\n// Re-export components (using const to prevent tree-shaking)\nexport const Sidebar = SSidebar;\nexport const SidebarProvider = SSidebarProvider;\nexport const SidebarContent = SSidebarContent;\nexport const SidebarFooter = SSidebarFooter;\nexport const SidebarGroup = SSidebarGroup;\nexport const SidebarGroupAction = SSidebarGroupAction;\nexport const SidebarGroupContent = SSidebarGroupContent;\nexport const SidebarGroupLabel = SSidebarGroupLabel;\nexport const SidebarHeader = SSidebarHeader;\nexport const SidebarInput = SSidebarInput;\nexport const SidebarInset = SSidebarInset;\nexport const SidebarMenu = SSidebarMenu;\nexport const SidebarMenuAction = SSidebarMenuAction;\nexport const SidebarMenuBadge = SSidebarMenuBadge;\nexport const SidebarMenuButton = SSidebarMenuButton;\nexport const SidebarMenuItem = SSidebarMenuItem;\nexport const SidebarMenuSkeleton = SSidebarMenuSkeleton;\nexport const SidebarMenuSub = SSidebarMenuSub;\nexport const SidebarMenuSubButton = SSidebarMenuSubButton;\nexport const SidebarMenuSubItem = SSidebarMenuSubItem;\nexport const SidebarRail = SSidebarRail;\nexport const SidebarSeparator = SSidebarSeparator;\nexport const SidebarTrigger = SSidebarTrigger;\n\n// Default export\nexport default Sidebar;\n"],"names":["Sidebar","SSidebar","SidebarProvider","SSidebarProvider","SidebarContent","SSidebarContent","SidebarFooter","SSidebarFooter","SidebarGroup","SSidebarGroup","SidebarGroupAction","SSidebarGroupAction","SidebarGroupContent","SSidebarGroupContent","SidebarGroupLabel","SSidebarGroupLabel","SidebarHeader","SSidebarHeader","SidebarInput","SSidebarInput","SidebarInset","SSidebarInset","SidebarMenu","SSidebarMenu","SidebarMenuAction","SSidebarMenuAction","SidebarMenuBadge","SSidebarMenuBadge","SidebarMenuButton","SSidebarMenuButton","SidebarMenuItem","SSidebarMenuItem","SidebarMenuSkeleton","SSidebarMenuSkeleton","SidebarMenuSub","SSidebarMenuSub","SidebarMenuSubButton","SSidebarMenuSubButton","SidebarMenuSubItem","SSidebarMenuSubItem","SidebarRail","SSidebarRail","SidebarSeparator","SSidebarSeparator","SidebarTrigger","SSidebarTrigger"],"mappings":"6LA+EaA,EAAUC,EAAAA,QACVC,EAAkBC,EAAAA,gBAClBC,EAAiBC,EAAAA,eACjBC,EAAgBC,EAAAA,cAChBC,EAAeC,EAAAA,aACfC,EAAqBC,EAAAA,mBACrBC,EAAsBC,EAAAA,oBACtBC,EAAoBC,EAAAA,kBACpBC,EAAgBC,EAAAA,cAChBC,EAAeC,EAAAA,aACfC,EAAeC,EAAAA,aACfC,EAAcC,EAAAA,YACdC,EAAoBC,EAAAA,kBACpBC,EAAmBC,EAAAA,iBACnBC,EAAoBC,EAAAA,kBACpBC,EAAkBC,EAAAA,gBAClBC,EAAsBC,EAAAA,oBACtBC,EAAiBC,EAAAA,eACjBC,EAAuBC,EAAAA,qBACvBC,EAAqBC,EAAAA,mBACrBC,EAAcC,EAAAA,YACdC,EAAmBC,EAAAA,iBACnBC,EAAiBC,EAAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Skeleton.cjs","sources":["../../../../src/components/Skeleton/Skeleton.tsx"],"sourcesContent":["import React from \"react\";\nimport { Skeleton as SSkeleton } from \"@dsui/ui/components/skeleton\";\nimport { cn } from \"@dsui/ui/lib/utils\";\n\nexport type SkeletonProps = React.ComponentProps<typeof SSkeleton>;\n\nconst Skeleton = React.forwardRef<HTMLDivElement, SkeletonProps>(\n ({ className, ...props }, ref) => {\n return <SSkeleton ref={ref} className={cn(className)} {...props} />;\n }\n);\n\nSkeleton.displayName = \"Skeleton\";\n\nexport default Skeleton;\n"],"names":["Skeleton","React","className","props","ref","jsx","SSkeleton","cn"],"mappings":"gRAMMA,EAAWC,EAAM,WACrB,CAAC,CAAE,UAAAC,EAAW,GAAGC,CAAA,EAASC,IACjBC,EAAAA,IAACC,YAAU,IAAAF,EAAU,UAAWG,EAAAA,GAAGL,CAAS,EAAI,GAAGC,EAAO,CAErE,EAEAH,EAAS,YAAc"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Slider.cjs","sources":["../../../../src/components/Slider/Slider.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport * as SliderPrimitive from \"@radix-ui/react-slider\";\nimport { cn } from \"@dsui/ui/lib/utils\";\nimport { motion, useMotionValue, useSpring, useTransform } from \"motion/react\";\nimport NumberFlow from \"@number-flow/react\";\nimport type { BasicColor } from \"@/types/variables\";\nimport { Badge } from \"../Badge\";\n\ntype LabelAnimation = \"number-flow\" | \"spec\" | \"none\";\ntype LabelDisplay = false | \"hover\" | \"always\";\ntype SliderColor = BasicColor | \"muted\" | \"accent\";\ntype SliderSize = \"sm\" | \"md\" | \"lg\";\ntype LabelPosition = \"top\" | \"bottom\" | \"left\" | \"right\";\n\nexport type SliderProps = Omit<\n React.ComponentPropsWithoutRef<typeof SliderPrimitive.Root>,\n \"color\" | \"defaultValue\" | \"value\" | \"min\" | \"max\"\n> & {\n color?: SliderColor;\n size?: SliderSize;\n showLabel?: LabelDisplay;\n labelArrow?: boolean;\n labelAnimation?: LabelAnimation;\n labelFormatter?: (value: number) => string;\n labelPosition?: LabelPosition;\n labelColor?: string;\n labelTextColor?: string;\n labelArrowColor?: string;\n sliderColor?: string;\n thumbBorderColor?: string;\n defaultValue?: number[];\n value?: number[];\n min?: number;\n max?: number;\n};\n\n// Color mapping configuration\nconst COLOR_CONFIG: Record<\n SliderColor,\n {\n range: string;\n thumb: string;\n labelBg: string;\n labelText: string;\n }\n> = {\n primary: {\n range: \"ds:bg-primary\",\n thumb: \"ds:border-primary/50\",\n labelBg: \"ds:bg-primary\",\n labelText: \"ds:text-primary-foreground\",\n },\n secondary: {\n range: \"ds:bg-secondary\",\n thumb: \"ds:border-secondary/50\",\n labelBg: \"ds:bg-secondary\",\n labelText: \"ds:text-secondary-foreground\",\n },\n success: {\n range: \"ds:bg-success\",\n thumb: \"ds:border-success/50\",\n labelBg: \"ds:bg-success\",\n labelText: \"ds:text-success-foreground\",\n },\n warning: {\n range: \"ds:bg-warning\",\n thumb: \"ds:border-warning/50\",\n labelBg: \"ds:bg-warning\",\n labelText: \"ds:text-warning-foreground\",\n },\n error: {\n range: \"ds:bg-error\",\n thumb: \"ds:border-error/50\",\n labelBg: \"ds:bg-error\",\n labelText: \"ds:text-error-foreground\",\n },\n glass: {\n range: \"ds:bg-white/30 backdrop-blur-sm\",\n thumb: \"ds:border-white/30 backdrop-blur-sm\",\n labelBg: \"ds:bg-white/15\",\n labelText: \"ds:text-foreground\",\n },\n muted: {\n range: \"ds:bg-muted-foreground\",\n thumb: \"ds:border-muted-foreground/50\",\n labelBg: \"ds:bg-muted\",\n labelText: \"ds:text-muted-foreground\",\n },\n accent: {\n range: \"ds:bg-accent\",\n thumb: \"ds:border-accent/50\",\n labelBg: \"ds:bg-accent\",\n labelText: \"ds:text-accent-foreground\",\n },\n};\n\n// Size configuration\nconst SIZE_CONFIG: Record<\n SliderSize,\n {\n track: string;\n thumb: string;\n }\n> = {\n sm: {\n track: \"ds:data-[orientation=horizontal]:h-1 ds:data-[orientation=vertical]:w-1\",\n thumb: \"ds:size-3\",\n },\n md: {\n track:\n \"ds:data-[orientation=horizontal]:h-1.5 ds:data-[orientation=vertical]:w-1.5\",\n thumb: \"ds:size-4\",\n },\n lg: {\n track: \"ds:data-[orientation=horizontal]:h-2 ds:data-[orientation=vertical]:w-2\",\n thumb: \"ds:size-5\",\n },\n};\n\n// Helper to get arrow direction based on orientation and position\nconst getArrowDirection = (\n orientation: \"horizontal\" | \"vertical\",\n position: LabelPosition\n): \"top\" | \"bottom\" | \"left\" | \"right\" => {\n if (orientation === \"horizontal\") {\n if (position === \"bottom\") return \"bottom\";\n if (position === \"left\") return \"left\";\n if (position === \"right\") return \"right\";\n return \"top\";\n }\n // vertical\n if (position === \"right\") return \"right\";\n if (position === \"top\") return \"top\";\n if (position === \"bottom\") return \"bottom\";\n return \"left\";\n};\n\n// Helper to get arrow color class\nconst getArrowColorClass = (\n color: SliderColor,\n direction: \"top\" | \"bottom\" | \"left\" | \"right\"\n): string => {\n // Generate full border class (e.g., \"border-t-primary\")\n const prefix =\n direction === \"top\"\n ? \"t\"\n : direction === \"bottom\"\n ? \"b\"\n : direction === \"left\"\n ? \"l\"\n : \"r\";\n const colorMap: Record<SliderColor, string> = {\n primary: `ds:border-${prefix}-primary`,\n secondary: `ds:border-${prefix}-secondary`,\n success: `ds:border-${prefix}-success`,\n warning: `ds:border-${prefix}-warning`,\n error: `ds:border-${prefix}-error`,\n glass: `ds:border-${prefix}-white/15`,\n muted: `ds:border-${prefix}-muted`,\n accent: `ds:border-${prefix}-accent`,\n };\n\n return colorMap[color];\n};\n\n// Helper to get label position classes\nconst getLabelPositionClasses = (\n orientation: \"horizontal\" | \"vertical\",\n position: LabelPosition\n): { badge: string; arrow: string } => {\n const positions: Record<string, { badge: string; arrow: string }> = {\n \"horizontal-top\": {\n badge: \"ds:left-1/2 ds:-translate-x-1/2 ds:bottom-full ds:-translate-y-1/2\",\n arrow:\n \"ds:top-full left-1/2 ds:-translate-x-1/2 ds:border-t-[6px] ds:border-l-[6px] ds:border-r-[6px] ds:border-b-0 ds:border-l-transparent ds:border-r-transparent\",\n },\n \"horizontal-bottom\": {\n badge: \"ds:left-1/2 ds:-translate-x-1/2 ds:top-full ds:translate-y-1/2\",\n arrow:\n \"ds:bottom-full left-1/2 ds:-translate-x-1/2 ds:border-b-[6px] ds:border-l-[6px] ds:border-r-[6px] ds:border-t-0 ds:border-l-transparent ds:border-r-transparent\",\n },\n \"horizontal-left\": {\n badge: \"ds:top-1/2 ds:-translate-y-1/2 ds:right-full ds:-translate-x-1/2\",\n arrow:\n \"ds:left-full ds:top-1/2 ds:-translate-y-1/2 ds:border-l-[6px] ds:border-t-[6px] ds:border-b-[6px] ds:border-r-0 ds:border-t-transparent ds:border-b-transparent\",\n },\n \"horizontal-right\": {\n badge: \"ds:top-1/2 ds:-translate-y-1/2 ds:left-full ds:translate-x-1/2\",\n arrow:\n \"ds:right-full ds:top-1/2 ds:-translate-y-1/2 ds:border-r-[6px] ds:border-t-[6px] ds:border-b-[6px] ds:border-l-0 ds:border-t-transparent ds:border-b-transparent\",\n },\n \"vertical-left\": {\n badge: \"ds:top-1/2 ds:-translate-y-1/2 ds:right-full ds:-translate-x-1/2\",\n arrow:\n \"ds:left-full ds:top-1/2 ds:-translate-y-1/2 ds:border-l-[6px] ds:border-t-[6px] ds:border-b-[6px] ds:border-r-0 ds:border-t-transparent ds:border-b-transparent\",\n },\n \"vertical-right\": {\n badge: \"ds:top-1/2 ds:-translate-y-1/2 ds:left-full ds:translate-x-1/2\",\n arrow:\n \"ds:right-full ds:top-1/2 ds:-translate-y-1/2 ds:border-r-[6px] ds:border-t-[6px] ds:border-b-[6px] ds:border-l-0 ds:border-t-transparent ds:border-b-transparent\",\n },\n \"vertical-top\": {\n badge: \"ds:left-1/2 ds:-translate-x-1/2 ds:bottom-full ds:-translate-y-1/2\",\n arrow:\n \"ds:top-full ds:left-1/2 ds:-translate-x-1/2 ds:border-t-[6px] ds:border-l-[6px] ds:border-r-[6px] ds:border-b-0 ds:border-l-transparent ds:border-r-transparent\",\n },\n \"vertical-bottom\": {\n badge: \"ds:left-1/2 ds:-translate-x-1/2 ds:top-full ds:translate-y-1/2\",\n arrow:\n \"ds:bottom-full ds:left-1/2 ds:-translate-x-1/2 ds:border-b-[6px] ds:border-l-[6px] ds:border-r-[6px] ds:border-t-0 ds:border-l-transparent ds:border-r-transparent\",\n },\n };\n\n return positions[`${orientation}-${position}`];\n};\n\n// Helper to get spec label position classes\nconst getSpecLabelPositionClass = (\n orientation: \"horizontal\" | \"vertical\",\n position: LabelPosition\n): string => {\n const positions: Record<string, string> = {\n \"horizontal-top\":\n \"ds:data-[orientation=horizontal]:bottom-full ds:data-[orientation=horizontal]:left-1/2 ds:data-[orientation=horizontal]:-translate-x-1/2 ds:data-[orientation=horizontal]:-translate-y-1/2\",\n \"horizontal-bottom\":\n \"ds:data-[orientation=horizontal]:top-full ds:data-[orientation=horizontal]:left-1/2 ds:data-[orientation=horizontal]:-translate-x-1/2 ds:data-[orientation=horizontal]:translate-y-1/2\",\n \"horizontal-left\":\n \"ds:data-[orientation=horizontal]:top-1/2 ds:data-[orientation=horizontal]:right-full ds:data-[orientation=horizontal]:-translate-y-1/2 ds:data-[orientation=horizontal]:-translate-x-1/2\",\n \"horizontal-right\":\n \"ds:data-[orientation=horizontal]:top-1/2 ds:data-[orientation=horizontal]:left-full ds:data-[orientation=horizontal]:-translate-y-1/2 ds:data-[orientation=horizontal]:translate-x-1/2\",\n \"vertical-left\":\n \"ds:data-[orientation=vertical]:right-full ds:data-[orientation=vertical]:top-1/2 ds:data-[orientation=vertical]:-translate-x-1/2 ds:data-[orientation=vertical]:-translate-y-1/2\",\n \"vertical-right\":\n \"ds:data-[orientation=vertical]:left-full ds:data-[orientation=vertical]:top-1/2 ds:data-[orientation=vertical]:translate-x-1/2 ds:data-[orientation=vertical]:-translate-y-1/2\",\n \"vertical-top\":\n \"ds:data-[orientation=vertical]:bottom-full ds:data-[orientation=vertical]:left-1/2 ds:data-[orientation=vertical]:-translate-x-1/2 ds:data-[orientation=vertical]:-translate-y-1/2\",\n \"vertical-bottom\":\n \"ds:data-[orientation=vertical]:top-full ds:data-[orientation=vertical]:left-1/2 ds:data-[orientation=vertical]:-translate-x-1/2 ds:data-[orientation=vertical]:translate-y-1/2\",\n };\n\n return positions[`${orientation}-${position}`];\n};\n\nconst Slider = React.forwardRef<HTMLSpanElement, SliderProps>(\n (\n {\n className,\n color = \"primary\",\n size = \"md\",\n showLabel = false,\n labelArrow = false,\n labelAnimation = \"none\",\n labelFormatter = (value) => `${value}`,\n labelPosition = \"top\",\n labelColor,\n labelTextColor,\n labelArrowColor,\n sliderColor,\n thumbBorderColor,\n defaultValue,\n value,\n min = 0,\n max = 100,\n ...props\n },\n ref\n ) => {\n const _values = React.useMemo(\n () =>\n Array.isArray(value)\n ? value\n : Array.isArray(defaultValue)\n ? defaultValue\n : [min, max],\n [value, defaultValue, min, max]\n );\n\n // State for hover detection\n const [isHovered, setIsHovered] = React.useState(false);\n React.useEffect(() => {\n if (value !== undefined && !Array.isArray(value)) {\n console.error(\n \"[Slider] value prop must be an array of numbers, e.g., [50] or [25, 75]\"\n );\n }\n if (defaultValue !== undefined && !Array.isArray(defaultValue)) {\n console.error(\n \"[Slider] defaultValue prop must be an array of numbers, e.g., [50] or [25, 75]\"\n );\n }\n }, [value, defaultValue]);\n\n const orientation = props.orientation || \"horizontal\";\n\n // For spec animation - track thumb position and velocity\n const thumbPosition = useMotionValue(0);\n const thumbVelocity = useMotionValue(0);\n const prevThumbPosition = React.useRef(0);\n\n // Spring physics for label following effect - more dramatic\n const springConfig = { stiffness: 150, damping: 15, mass: 1 };\n const labelOffset = useSpring(0, springConfig);\n const labelRotate = useSpring(0, springConfig);\n\n // Track value changes to calculate velocity\n React.useEffect(() => {\n if (labelAnimation === \"spec\" && _values.length > 0) {\n const currentPos = _values[0];\n const velocity = currentPos - prevThumbPosition.current;\n\n // Cap velocity to prevent large jumps (e.g., on click or initial load)\n const maxVelocity = 5; // Maximum velocity threshold\n const cappedVelocity = Math.max(\n -maxVelocity,\n Math.min(maxVelocity, velocity)\n );\n\n // Update velocity and position\n thumbVelocity.set(cappedVelocity);\n thumbPosition.set(currentPos);\n\n // Calculate offset and rotation based on capped velocity\n // Negative velocity (moving left) -> positive offset (label lags behind to the right)\n const offsetAmount = -cappedVelocity * 12;\n const rotateAmount = -cappedVelocity * 20;\n\n labelOffset.set(offsetAmount);\n labelRotate.set(rotateAmount);\n\n // Reset to center when stopped\n setTimeout(() => {\n labelOffset.set(0);\n labelRotate.set(0);\n }, 100);\n\n prevThumbPosition.current = currentPos;\n }\n }, [\n _values,\n labelAnimation,\n thumbVelocity,\n thumbPosition,\n labelOffset,\n labelRotate,\n ]);\n\n // Memoized computed values\n const sliderColorClass = useMemo(() => {\n if (sliderColor || thumbBorderColor) {\n return {\n range: sliderColor || \"ds:bg-primary\",\n thumb: thumbBorderColor || \"ds:border-primary/50\",\n };\n }\n const config = COLOR_CONFIG[color];\n return {\n range: config.range,\n thumb: config.thumb,\n };\n }, [color, sliderColor, thumbBorderColor]);\n\n const sliderSizeClass = useMemo(() => SIZE_CONFIG[size], [size]);\n\n const labelColorClass = useMemo(() => {\n if (labelColor || labelTextColor) {\n return cn(labelColor, labelTextColor);\n }\n\n const config = COLOR_CONFIG[color];\n const direction = getArrowDirection(orientation, labelPosition);\n const arrowColor = getArrowColorClass(color, direction);\n\n if (color === \"glass\") {\n return `${config.labelBg} ${config.labelText} ds:backdrop-blur-sm ds:shadow-lg ds:[&>div.arrow]:${arrowColor}`;\n }\n\n return `${config.labelBg} ${config.labelText} ds:[&>div.arrow]:${arrowColor}`;\n }, [color, labelPosition, orientation, labelColor, labelTextColor]);\n\n const arrowColorClass = useMemo(() => {\n if (labelArrowColor) return labelArrowColor;\n const direction = getArrowDirection(orientation, labelPosition);\n return getArrowColorClass(color, direction);\n }, [color, labelPosition, orientation, labelArrowColor]);\n\n const labelVisibilityClass = useMemo(() => {\n if (showLabel === \"hover\") return \"ds:scale-0 ds:group-hover:scale-100\";\n if (showLabel === \"always\") return \"ds:scale-100\";\n return \"ds:hidden\";\n }, [showLabel]);\n\n const labelPositionClass = useMemo(\n () => getLabelPositionClasses(orientation, labelPosition),\n [labelPosition, orientation]\n );\n\n const labelPositionClassSpec = useMemo(\n () => getSpecLabelPositionClass(orientation, labelPosition),\n [labelPosition, orientation]\n );\n\n // Render label based on animation type\n const renderLabel = React.useCallback(\n (index: number) => {\n if (labelAnimation === \"spec\") {\n return (\n <motion.div\n className={cn(\n \"ds:pointer-events-none ds:absolute ds:z-50 ds:flex ds:flex-col ds:items-center ds:justify-center ds:rounded-md ds:px-3 ds:py-1.5 ds:text-xs ds:shadow-xl\",\n labelPositionClassSpec,\n labelColor && labelColor,\n labelTextColor && labelTextColor,\n !labelColor && !labelTextColor && labelColorClass\n )}\n data-orientation={orientation}\n initial={\n showLabel === \"always\"\n ? { opacity: 1, y: -5, scale: 1 }\n : { opacity: 0, y: 20, scale: 0 }\n }\n animate={\n (isHovered && showLabel === \"hover\") || showLabel === \"always\"\n ? {\n opacity: 1,\n y: -5,\n scale: 1,\n }\n : {\n opacity: 0,\n y: 20,\n scale: 0,\n }\n }\n transition={{\n type: \"tween\",\n duration: 0.2,\n ease: \"easeOut\",\n }}\n style={{\n x: labelOffset,\n rotate: labelRotate,\n whiteSpace: \"nowrap\",\n }}\n >\n <div className=\"ds:relative ds:z-1\">\n <NumberFlow\n value={_values[index]}\n format={{ notation: \"standard\" }}\n isolate\n />\n </div>\n {labelArrow && (\n <div\n className={cn(\n \"ds:arrow ds:absolute ds:border-transparent\",\n labelPositionClass.arrow,\n arrowColorClass\n )}\n />\n )}\n </motion.div>\n );\n }\n\n // Standard or number-flow animation\n return (\n <Badge\n size=\"lg\"\n color={\n labelColor || labelTextColor\n ? \"custom\"\n : color === \"glass\"\n ? \"custom\"\n : color === \"muted\"\n ? \"muted\"\n : color === \"accent\"\n ? \"accent\"\n : color\n }\n variant=\"solid\"\n className={cn(\n \"ds:transition-transform ds:absolute ds:px-3 ds:rounded-md\",\n labelPositionClass.badge,\n labelVisibilityClass,\n labelColor && labelColor,\n labelTextColor && labelTextColor,\n !labelColor &&\n !labelTextColor &&\n color === \"glass\" &&\n \"ds:bg-white/15 ds:text-foreground ds:backdrop-blur-sm ds:shadow-lg ds:[&>div.arrow]:border-t-white/15\"\n )}\n >\n {labelAnimation === \"number-flow\" ? (\n <NumberFlow\n value={_values[index]}\n format={{ notation: \"standard\" }}\n isolate\n />\n ) : (\n <span>{labelFormatter(_values[index])}</span>\n )}\n {labelArrow && (\n <div\n className={cn(\n \"ds:arrow ds:absolute ds:border-transparent\",\n labelPositionClass.arrow,\n arrowColorClass\n )}\n />\n )}\n </Badge>\n );\n },\n [\n labelAnimation,\n labelPositionClassSpec,\n labelColor,\n labelTextColor,\n labelColorClass,\n orientation,\n showLabel,\n labelOffset,\n labelRotate,\n labelFormatter,\n _values,\n color,\n labelPositionClass,\n labelVisibilityClass,\n labelArrow,\n arrowColorClass,\n isHovered,\n ]\n );\n\n // Render without label - use custom slider with color\n if (!showLabel) {\n return (\n <SliderPrimitive.Root\n ref={ref}\n data-slot=\"slider\"\n defaultValue={defaultValue}\n value={value}\n min={min}\n max={max}\n className={cn(\n \"ds:relative ds:flex ds:w-full ds:touch-none ds:items-center ds:select-none ds:data-disabled:opacity-50 ds:data-[orientation=vertical]:h-full ds:data-[orientation=vertical]:min-h-44 ds:data-[orientation=vertical]:w-auto ds:data-[orientation=vertical]:flex-col\",\n className\n )}\n {...props}\n >\n <SliderPrimitive.Track\n data-slot=\"slider-track\"\n className={cn(\n \"ds:bg-muted ds:relative ds:grow ds:overflow-hidden ds:rounded-full ds:data-[orientation=horizontal]:w-full ds:data-[orientation=vertical]:h-full\",\n sliderSizeClass.track\n )}\n >\n <SliderPrimitive.Range\n data-slot=\"slider-range\"\n className={cn(\n \"ds:absolute ds:data-[orientation=horizontal]:h-full ds:data-[orientation=vertical]:w-full\",\n sliderColorClass.range\n )}\n />\n </SliderPrimitive.Track>\n {Array.from({ length: _values.length }, (_, index) => (\n <SliderPrimitive.Thumb\n key={index}\n data-slot=\"slider-thumb\"\n className={cn(\n \"ds:block ds:shrink-0 ds:rounded-full ds:border ds:bg-white ds:shadow-sm ds:transition-[color,box-shadow] ds:hover:ring-4 ds:focus-visible:ring-4 ds:focus-visible:outline-hidden ds:disabled:pointer-events-none ds:disabled:opacity-50 ds:ring-ring/50\",\n sliderColorClass.thumb,\n sliderSizeClass.thumb\n )}\n />\n ))}\n </SliderPrimitive.Root>\n );\n }\n\n // Render with label (standard, number-flow, or spec animation)\n return (\n <SliderPrimitive.Root\n ref={ref}\n data-slot=\"slider\"\n defaultValue={defaultValue}\n value={value}\n min={min}\n max={max}\n className={cn(\n \"ds:relative ds:flex ds:w-full ds:touch-none ds:items-center ds:select-none ds:data-disabled:opacity-50 ds:data-[orientation=vertical]:h-full ds:data-[orientation=vertical]:min-h-44 ds:data-[orientation=vertical]:w-auto ds:data-[orientation=vertical]:flex-col\",\n className\n )}\n {...props}\n >\n <SliderPrimitive.Track\n data-slot=\"slider-track\"\n className={cn(\n \"ds:bg-muted ds:relative ds:grow ds:overflow-hidden ds:rounded-full ds:data-[orientation=horizontal]:w-full ds:data-[orientation=vertical]:h-full\",\n sliderSizeClass.track\n )}\n >\n <SliderPrimitive.Range\n data-slot=\"slider-range\"\n className={cn(\n \"ds:absolute ds:data-[orientation=horizontal]:h-full ds:data-[orientation=vertical]:w-full\",\n sliderColorClass.range\n )}\n />\n </SliderPrimitive.Track>\n {Array.from({ length: _values.length }, (_, index) => (\n <SliderPrimitive.Thumb\n key={index}\n data-slot=\"slider-thumb\"\n className={cn(\n \"ds:group ds:block ds:shrink-0 ds:rounded-full ds:border ds:bg-white ds:shadow-sm ds:transition-[color,box-shadow] ds:hover:ring-4 ds:focus-visible:ring-4 ds:focus-visible:outline-hidden ds:disabled:pointer-events-none ds:disabled:opacity-50 ds:ring-ring/50\",\n sliderColorClass.thumb,\n sliderSizeClass.thumb\n )}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n {renderLabel(index)}\n </SliderPrimitive.Thumb>\n ))}\n </SliderPrimitive.Root>\n );\n }\n);\n\nSlider.displayName = \"Slider\";\n\nexport default Slider;\n"],"names":["COLOR_CONFIG","SIZE_CONFIG","getArrowDirection","orientation","position","getArrowColorClass","color","direction","prefix","getLabelPositionClasses","getSpecLabelPositionClass","Slider","React","className","size","showLabel","labelArrow","labelAnimation","labelFormatter","value","labelPosition","labelColor","labelTextColor","labelArrowColor","sliderColor","thumbBorderColor","defaultValue","min","max","props","ref","_values","isHovered","setIsHovered","thumbPosition","useMotionValue","thumbVelocity","prevThumbPosition","springConfig","labelOffset","useSpring","labelRotate","currentPos","velocity","maxVelocity","cappedVelocity","offsetAmount","rotateAmount","sliderColorClass","useMemo","config","sliderSizeClass","labelColorClass","cn","arrowColor","arrowColorClass","labelVisibilityClass","labelPositionClass","labelPositionClassSpec","renderLabel","index","jsxs","motion","jsx","NumberFlow","Badge","SliderPrimitive","_"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Stepper.cjs","sources":["../../../../src/components/Stepper/Stepper.tsx"],"sourcesContent":["\"use client\";\n\nimport { cn, Slot, useComposedRefs } from \"@dsui/ui/index\";\nimport { Check } from \"lucide-react\";\nimport * as React from \"react\";\n\nconst ROOT_NAME = \"Stepper\";\nconst LIST_NAME = \"StepperList\";\nconst ITEM_NAME = \"StepperItem\";\nconst TRIGGER_NAME = \"StepperTrigger\";\nconst INDICATOR_NAME = \"StepperIndicator\";\nconst SEPARATOR_NAME = \"StepperSeparator\";\nconst TITLE_NAME = \"StepperTitle\";\nconst DESCRIPTION_NAME = \"StepperDescription\";\nconst CONTENT_NAME = \"StepperContent\";\nconst PREV_NAME = \"StepperPrev\";\nconst NEXT_NAME = \"StepperNext\";\n\nconst ENTRY_FOCUS = \"stepperFocusGroup.onEntryFocus\";\nconst EVENT_OPTIONS = { bubbles: false, cancelable: true };\nconst ARROW_KEYS = [\"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\"];\n\nconst stepperColorClasses: Record<\n StepperColor,\n {\n indicator: {\n active: string;\n completed: string;\n inactive: string;\n };\n separator: {\n active: string;\n completed: string;\n inactive: string;\n };\n }\n> = {\n primary: {\n indicator: {\n active:\n \"ds:border-primary ds:bg-primary ds:text-primary-foreground ds:data-[variant=dot]:bg-primary/30 ds:data-[variant=dot]:border-primary/0\",\n completed:\n \"ds:border-primary ds:bg-primary ds:text-primary-foreground ds:data-[variant=dot]:bg-primary/30 ds:data-[variant=dot]:border-primary/0\",\n inactive:\n \"ds:border-muted ds:bg-background ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0\",\n },\n separator: {\n active: \"ds:bg-primary\",\n completed: \"ds:bg-primary\",\n inactive: \"ds:bg-border\",\n },\n },\n secondary: {\n indicator: {\n active:\n \"ds:border-secondary ds:bg-secondary ds:text-secondary-foreground ds:data-[variant=dot]:bg-secondary/30 ds:data-[variant=dot]:border-secondary/0\",\n completed:\n \"ds:border-secondary ds:bg-secondary ds:text-secondary-foreground ds:data-[variant=dot]:bg-secondary/30 ds:data-[variant=dot]:border-secondary/0\",\n inactive:\n \"ds:border-muted ds:bg-background ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0\",\n },\n separator: {\n active: \"ds:bg-secondary\",\n completed: \"ds:bg-secondary\",\n inactive: \"ds:bg-border\",\n },\n },\n accent: {\n indicator: {\n active:\n \"ds:border-accent ds:bg-accent ds:text-accent-foreground ds:data-[variant=dot]:bg-accent/30 ds:data-[variant=dot]:border-accent/0\",\n completed:\n \"ds:border-accent ds:bg-accent ds:text-accent-foreground ds:data-[variant=dot]:bg-accent/30 ds:data-[variant=dot]:border-accent/0\",\n inactive:\n \"ds:border-muted ds:bg-background ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0\",\n },\n separator: {\n active: \"ds:bg-accent\",\n completed: \"ds:bg-accent\",\n inactive: \"ds:bg-border\",\n },\n },\n destructive: {\n indicator: {\n active:\n \"ds:border-destructive ds:bg-destructive ds:text-destructive-foreground ds:data-[variant=dot]:bg-destructive/30 ds:data-[variant=dot]:border-destructive/0\",\n completed:\n \"ds:border-destructive ds:bg-destructive ds:text-destructive-foreground ds:data-[variant=dot]:bg-destructive/30 ds:data-[variant=dot]:border-destructive/0\",\n inactive:\n \"ds:border-muted ds:bg-background ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0\",\n },\n separator: {\n active: \"ds:bg-destructive\",\n completed: \"ds:bg-destructive\",\n inactive: \"ds:bg-border\",\n },\n },\n muted: {\n indicator: {\n active:\n \"ds:border-muted ds:bg-muted ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0\",\n completed:\n \"ds:border-muted ds:bg-muted ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0\",\n inactive:\n \"ds:border-muted ds:bg-background ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0\",\n },\n separator: {\n active: \"ds:bg-muted\",\n completed: \"ds:bg-muted\",\n inactive: \"ds:bg-border\",\n },\n },\n success: {\n indicator: {\n active:\n \"ds:border-success ds:bg-success ds:text-success-foreground ds:data-[variant=dot]:bg-success/30 ds:data-[variant=dot]:border-success/0\",\n completed:\n \"ds:border-success ds:bg-success ds:text-success-foreground ds:data-[variant=dot]:bg-success/30 ds:data-[variant=dot]:border-success/0\",\n inactive:\n \"ds:border-muted ds:bg-background ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0\",\n },\n separator: {\n active: \"ds:bg-success\",\n completed: \"ds:bg-success\",\n inactive: \"ds:bg-border\",\n },\n },\n error: {\n indicator: {\n active:\n \"ds:border-error ds:bg-error ds:text-error-foreground ds:data-[variant=dot]:bg-error/30 ds:data-[variant=dot]:border-error/0\",\n completed:\n \"ds:border-error ds:bg-error ds:text-error-foreground ds:data-[variant=dot]:bg-error/30 ds:data-[variant=dot]:border-error/0\",\n inactive:\n \"ds:border-muted ds:bg-background ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0\",\n },\n separator: {\n active: \"ds:bg-error\",\n completed: \"ds:bg-error\",\n inactive: \"ds:bg-border\",\n },\n },\n warning: {\n indicator: {\n active:\n \"ds:border-warning ds:bg-warning ds:text-warning-foreground ds:data-[variant=dot]:bg-warning/30 ds:data-[variant=dot]:border-warning/0\",\n completed:\n \"ds:border-warning ds:bg-warning ds:text-warning-foreground ds:data-[variant=dot]:bg-warning/30 ds:data-[variant=dot]:border-warning/0\",\n inactive:\n \"ds:border-muted ds:bg-background ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0\",\n },\n separator: {\n active: \"ds:bg-warning\",\n completed: \"ds:bg-warning\",\n inactive: \"ds:bg-border\",\n },\n },\n};\n\nfunction getIndicatorColorClass(\n color: StepperColor | undefined,\n customColor: string | undefined,\n dataState: DataState\n): string {\n if (customColor) {\n return \"\";\n }\n\n if (!color) {\n // Default primary color\n return stepperColorClasses.primary.indicator[dataState];\n }\n\n return stepperColorClasses[color].indicator[dataState];\n}\n\nfunction getSeparatorColorClass(\n color: StepperColor | undefined,\n customColor: string | undefined,\n dataState: DataState\n): string {\n if (customColor) {\n return \"\";\n }\n\n if (!color) {\n // Default primary color\n return stepperColorClasses.primary.separator[dataState];\n }\n\n return stepperColorClasses[color].separator[dataState];\n}\n\nfunction getCustomColorStyle(\n customColor: string | undefined,\n dataState: DataState,\n isIndicator: boolean\n): React.CSSProperties | undefined {\n if (!customColor) return undefined;\n\n if (isIndicator) {\n if (dataState === \"active\" || dataState === \"completed\") {\n return {\n borderColor: customColor,\n backgroundColor: customColor,\n color: \"white\",\n };\n }\n return {\n borderColor: \"hsl(var(--muted))\",\n backgroundColor: \"hsl(var(--background))\",\n color: \"hsl(var(--muted-foreground))\",\n };\n } else {\n // separator\n if (dataState === \"active\" || dataState === \"completed\") {\n return {\n backgroundColor: customColor,\n };\n }\n return {\n backgroundColor: \"hsl(var(--border))\",\n };\n }\n}\n\ntype Direction = \"ltr\" | \"rtl\";\ntype Orientation = \"horizontal\" | \"vertical\";\ntype NavigationDirection = \"next\" | \"prev\";\ntype ActivationMode = \"automatic\" | \"manual\";\ntype DataState = \"inactive\" | \"active\" | \"completed\";\ntype StepperColor =\n | \"primary\"\n | \"secondary\"\n | \"accent\"\n | \"destructive\"\n | \"muted\"\n | \"success\"\n | \"error\"\n | \"warning\";\ntype StepperVariant = \"normal\" | \"dot\";\ntype LabelPosition = \"top\" | \"bottom\" | \"left\" | \"right\";\n\ninterface DivProps extends React.ComponentProps<\"div\"> {\n asChild?: boolean;\n}\ninterface ButtonProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n}\n\ntype ListElement = React.ComponentRef<typeof StepperList>;\ntype TriggerElement = React.ComponentRef<typeof StepperTrigger>;\n\nfunction getId(\n id: string,\n variant: \"trigger\" | \"content\" | \"title\" | \"description\",\n value: string\n) {\n return `${id}-${variant}-${value}`;\n}\n\ntype FocusIntent = \"first\" | \"last\" | \"prev\" | \"next\";\n\nconst MAP_KEY_TO_FOCUS_INTENT: Record<string, FocusIntent> = {\n ArrowLeft: \"prev\",\n ArrowUp: \"prev\",\n ArrowRight: \"next\",\n ArrowDown: \"next\",\n PageUp: \"first\",\n Home: \"first\",\n PageDown: \"last\",\n End: \"last\",\n};\n\nfunction getDirectionAwareKey(key: string, dir?: Direction) {\n if (dir !== \"rtl\") return key;\n return key === \"ArrowLeft\"\n ? \"ArrowRight\"\n : key === \"ArrowRight\"\n ? \"ArrowLeft\"\n : key;\n}\n\nfunction getFocusIntent(\n event: React.KeyboardEvent<TriggerElement>,\n dir?: Direction,\n orientation?: Orientation\n) {\n const key = getDirectionAwareKey(event.key, dir);\n if (orientation === \"horizontal\" && [\"ArrowUp\", \"ArrowDown\"].includes(key))\n return undefined;\n if (orientation === \"vertical\" && [\"ArrowLeft\", \"ArrowRight\"].includes(key))\n return undefined;\n return MAP_KEY_TO_FOCUS_INTENT[key];\n}\n\nfunction focusFirst(\n candidates: React.RefObject<TriggerElement | null>[],\n preventScroll = false\n) {\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidateRef of candidates) {\n const candidate = candidateRef.current;\n if (!candidate) continue;\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate.focus({ preventScroll });\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n}\n\nfunction wrapArray<T>(array: T[], startIndex: number) {\n return array.map<T>(\n (_, index) => array[(startIndex + index) % array.length] as T\n );\n}\n\nconst useIsomorphicLayoutEffect =\n typeof window === \"undefined\" ? React.useEffect : React.useLayoutEffect;\n\nfunction useAsRef<T>(props: T) {\n const ref = React.useRef<T>(props);\n\n useIsomorphicLayoutEffect(() => {\n ref.current = props;\n });\n\n return ref;\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\nfunction getDataState(\n value: string | undefined,\n itemValue: string,\n stepState: StepState | undefined,\n steps: Map<string, StepState>,\n variant: \"item\" | \"separator\" = \"item\"\n): DataState {\n const stepKeys = Array.from(steps.keys());\n const currentIndex = stepKeys.indexOf(itemValue);\n\n if (stepState?.completed) return \"completed\";\n\n if (value === itemValue) {\n return variant === \"separator\" ? \"inactive\" : \"active\";\n }\n\n if (value) {\n const activeIndex = stepKeys.indexOf(value);\n\n if (activeIndex > currentIndex) return \"completed\";\n }\n\n return \"inactive\";\n}\n\nconst DirectionContext = React.createContext<Direction | undefined>(undefined);\n\nfunction useDirection(dirProp?: Direction): Direction {\n const contextDir = React.useContext(DirectionContext);\n return dirProp ?? contextDir ?? \"ltr\";\n}\n\ninterface StepState {\n value: string;\n completed: boolean;\n disabled: boolean;\n}\n\ninterface StoreState {\n steps: Map<string, StepState>;\n value: string;\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 setStateWithValidation: (\n value: string,\n direction: NavigationDirection\n ) => Promise<boolean>;\n hasValidation: () => boolean;\n notify: () => void;\n addStep: (value: string, completed: boolean, disabled: boolean) => void;\n removeStep: (value: string) => void;\n setStep: (value: string, completed: boolean, disabled: boolean) => void;\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\ninterface ItemData {\n id: string;\n ref: React.RefObject<TriggerElement | null>;\n value: string;\n active: boolean;\n disabled: boolean;\n}\n\ninterface StepperContextValue {\n id: string;\n dir: Direction;\n orientation: Orientation;\n activationMode: ActivationMode;\n disabled: boolean;\n nonInteractive: boolean;\n loop: boolean;\n color?: StepperColor;\n customColor?: string;\n variant?: StepperVariant;\n labelPosition?: LabelPosition;\n}\n\nconst StepperContext = React.createContext<StepperContextValue | null>(null);\n\nfunction useStepperContext(consumerName: string) {\n const context = React.useContext(StepperContext);\n if (!context) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${ROOT_NAME}\\``);\n }\n return context;\n}\n\ninterface StepperRootProps extends DivProps {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n onValueComplete?: (value: string, completed: boolean) => void;\n onValueAdd?: (value: string) => void;\n onValueRemove?: (value: string) => void;\n onValidate?: (\n value: string,\n direction: NavigationDirection\n ) => boolean | Promise<boolean>;\n activationMode?: ActivationMode;\n dir?: Direction;\n orientation?: Orientation;\n disabled?: boolean;\n loop?: boolean;\n nonInteractive?: boolean;\n color?: StepperColor;\n customColor?: string;\n variant?: StepperVariant;\n labelPosition?: LabelPosition;\n}\n\nfunction StepperRoot(props: StepperRootProps) {\n const {\n value,\n defaultValue,\n onValueChange,\n onValueComplete,\n onValueAdd,\n onValueRemove,\n onValidate,\n id: idProp,\n dir: dirProp,\n orientation = \"horizontal\",\n activationMode = \"automatic\",\n asChild,\n disabled = false,\n nonInteractive = false,\n loop = false,\n color,\n customColor,\n variant = \"normal\",\n labelPosition = \"right\",\n className,\n ...rootProps\n } = props;\n\n const listenersRef = useLazyRef(() => new Set<() => void>());\n const stateRef = useLazyRef<StoreState>(() => ({\n steps: new Map(),\n value: value ?? defaultValue ?? \"\",\n }));\n const propsRef = useAsRef({\n onValueChange,\n onValueComplete,\n onValueAdd,\n onValueRemove,\n onValidate,\n });\n\n const store: Store = React.useMemo(() => {\n return {\n subscribe: (cb) => {\n listenersRef.current.add(cb);\n return () => listenersRef.current.delete(cb);\n },\n getState: () => stateRef.current,\n setState: (key, value) => {\n if (Object.is(stateRef.current[key], value)) return;\n\n if (key === \"value\" && typeof value === \"string\") {\n stateRef.current.value = value;\n propsRef.current.onValueChange?.(value);\n } else {\n stateRef.current[key] = value;\n }\n\n store.notify();\n },\n setStateWithValidation: async (value, direction) => {\n if (!propsRef.current.onValidate) {\n store.setState(\"value\", value);\n return true;\n }\n\n try {\n const isValid = await propsRef.current.onValidate(value, direction);\n if (isValid) {\n store.setState(\"value\", value);\n }\n return isValid;\n } catch {\n return false;\n }\n },\n hasValidation: () => !!propsRef.current.onValidate,\n addStep: (value, completed, disabled) => {\n const newStep: StepState = { value, completed, disabled };\n stateRef.current.steps.set(value, newStep);\n propsRef.current.onValueAdd?.(value);\n store.notify();\n },\n removeStep: (value) => {\n stateRef.current.steps.delete(value);\n propsRef.current.onValueRemove?.(value);\n store.notify();\n },\n setStep: (value, completed, disabled) => {\n const step = stateRef.current.steps.get(value);\n if (step) {\n const updatedStep: StepState = { ...step, completed, disabled };\n stateRef.current.steps.set(value, updatedStep);\n\n if (completed !== step.completed) {\n propsRef.current.onValueComplete?.(value, completed);\n }\n\n store.notify();\n }\n },\n notify: () => {\n for (const cb of listenersRef.current) {\n cb();\n }\n },\n };\n }, [listenersRef, stateRef, propsRef]);\n\n useIsomorphicLayoutEffect(() => {\n if (value !== undefined) {\n store.setState(\"value\", value);\n }\n }, [value, store]);\n\n const dir = useDirection(dirProp);\n\n const id = React.useId();\n\n const rootId = idProp ?? id;\n\n const contextValue = React.useMemo<StepperContextValue>(\n () => ({\n id: rootId,\n dir,\n orientation,\n activationMode,\n disabled,\n nonInteractive,\n loop,\n color,\n customColor,\n variant,\n labelPosition,\n }),\n [\n rootId,\n dir,\n orientation,\n activationMode,\n disabled,\n nonInteractive,\n loop,\n color,\n customColor,\n variant,\n labelPosition,\n ]\n );\n\n const RootPrimitive = asChild ? Slot : \"div\";\n\n return (\n <StoreContext.Provider value={store}>\n <StepperContext.Provider value={contextValue}>\n <RootPrimitive\n id={rootId}\n data-disabled={disabled ? \"\" : undefined}\n data-orientation={orientation}\n data-slot=\"stepper\"\n dir={dir}\n {...rootProps}\n className={cn(\n \"ds:flex ds:gap-6\",\n orientation === \"horizontal\" ? \"ds:w-full ds:flex-col\" : \"ds:flex-row\",\n className\n )}\n />\n </StepperContext.Provider>\n </StoreContext.Provider>\n );\n}\n\ninterface FocusContextValue {\n tabStopId: string | null;\n onItemFocus: (tabStopId: string) => void;\n onItemShiftTab: () => void;\n onFocusableItemAdd: () => void;\n onFocusableItemRemove: () => void;\n onItemRegister: (item: ItemData) => void;\n onItemUnregister: (id: string) => void;\n getItems: () => ItemData[];\n}\n\nconst FocusContext = React.createContext<FocusContextValue | null>(null);\n\nfunction useFocusContext(consumerName: string) {\n const context = React.useContext(FocusContext);\n if (!context) {\n throw new Error(\n `\\`${consumerName}\\` must be used within \\`FocusProvider\\``\n );\n }\n return context;\n}\n\ninterface StepperListProps extends DivProps {\n asChild?: boolean;\n}\n\nfunction StepperList(props: StepperListProps) {\n const { className, children, asChild, ref, ...listProps } = props;\n\n const context = useStepperContext(LIST_NAME);\n const orientation = context.orientation;\n const currentValue = useStore((state) => state.value);\n\n const [tabStopId, setTabStopId] = React.useState<string | null>(null);\n const [isTabbingBackOut, setIsTabbingBackOut] = React.useState(false);\n const [focusableItemCount, setFocusableItemCount] = React.useState(0);\n const isClickFocusRef = React.useRef(false);\n const itemsRef = React.useRef<Map<string, ItemData>>(new Map());\n const listRef = React.useRef<ListElement>(null);\n const composedRef = useComposedRefs(ref, listRef);\n\n const onItemFocus = React.useCallback((tabStopId: string) => {\n setTabStopId(tabStopId);\n }, []);\n\n const onItemShiftTab = React.useCallback(() => {\n setIsTabbingBackOut(true);\n }, []);\n\n const onFocusableItemAdd = React.useCallback(() => {\n setFocusableItemCount((prevCount) => prevCount + 1);\n }, []);\n\n const onFocusableItemRemove = React.useCallback(() => {\n setFocusableItemCount((prevCount) => prevCount - 1);\n }, []);\n\n const onItemRegister = React.useCallback((item: ItemData) => {\n itemsRef.current.set(item.id, item);\n }, []);\n\n const onItemUnregister = React.useCallback((id: string) => {\n itemsRef.current.delete(id);\n }, []);\n\n const getItems = React.useCallback(() => {\n return Array.from(itemsRef.current.values())\n .filter((item) => item.ref.current)\n .sort((a, b) => {\n const elementA = a.ref.current;\n const elementB = b.ref.current;\n if (!elementA || !elementB) return 0;\n const position = elementA.compareDocumentPosition(elementB);\n if (position & Node.DOCUMENT_POSITION_FOLLOWING) {\n return -1;\n }\n if (position & Node.DOCUMENT_POSITION_PRECEDING) {\n return 1;\n }\n return 0;\n });\n }, []);\n\n const onBlur = React.useCallback(\n (event: React.FocusEvent<ListElement>) => {\n listProps.onBlur?.(event);\n if (event.defaultPrevented) return;\n\n setIsTabbingBackOut(false);\n },\n [listProps.onBlur]\n );\n\n const onFocus = React.useCallback(\n (event: React.FocusEvent<ListElement>) => {\n listProps.onFocus?.(event);\n if (event.defaultPrevented) return;\n\n const isKeyboardFocus = !isClickFocusRef.current;\n if (\n event.target === event.currentTarget &&\n isKeyboardFocus &&\n !isTabbingBackOut\n ) {\n const entryFocusEvent = new CustomEvent(ENTRY_FOCUS, EVENT_OPTIONS);\n event.currentTarget.dispatchEvent(entryFocusEvent);\n\n if (!entryFocusEvent.defaultPrevented) {\n const items = Array.from(itemsRef.current.values()).filter(\n (item) => !item.disabled\n );\n const selectedItem = currentValue\n ? items.find((item) => item.value === currentValue)\n : undefined;\n const activeItem = items.find((item) => item.active);\n const currentItem = items.find((item) => item.id === tabStopId);\n\n const candidateItems = [\n selectedItem,\n activeItem,\n currentItem,\n ...items,\n ].filter(Boolean) as ItemData[];\n const candidateRefs = candidateItems.map((item) => item.ref);\n focusFirst(candidateRefs, false);\n }\n }\n isClickFocusRef.current = false;\n },\n [listProps.onFocus, isTabbingBackOut, currentValue, tabStopId]\n );\n\n const onMouseDown = React.useCallback(\n (event: React.MouseEvent<ListElement>) => {\n listProps.onMouseDown?.(event);\n\n if (event.defaultPrevented) return;\n\n isClickFocusRef.current = true;\n },\n [listProps.onMouseDown]\n );\n\n const focusContextValue = React.useMemo<FocusContextValue>(\n () => ({\n tabStopId,\n onItemFocus,\n onItemShiftTab,\n onFocusableItemAdd,\n onFocusableItemRemove,\n onItemRegister,\n onItemUnregister,\n getItems,\n }),\n [\n tabStopId,\n onItemFocus,\n onItemShiftTab,\n onFocusableItemAdd,\n onFocusableItemRemove,\n onItemRegister,\n onItemUnregister,\n getItems,\n ]\n );\n\n const ListPrimitive = asChild ? Slot : \"div\";\n\n return (\n <FocusContext.Provider value={focusContextValue}>\n <ListPrimitive\n role=\"tablist\"\n aria-orientation={orientation}\n data-orientation={orientation}\n data-slot=\"stepper-list\"\n dir={context.dir}\n tabIndex={isTabbingBackOut || focusableItemCount === 0 ? -1 : 0}\n {...listProps}\n ref={composedRef}\n className={cn(\n \"ds:flex ds:outline-none\",\n orientation === \"horizontal\"\n ? \"ds:flex-row ds:items-center\"\n : \"ds:flex-col ds:items-start\",\n className\n )}\n onBlur={onBlur}\n onFocus={onFocus}\n onMouseDown={onMouseDown}\n >\n {children}\n </ListPrimitive>\n </FocusContext.Provider>\n );\n}\n\ninterface StepperItemContextValue {\n value: string;\n stepState: StepState | undefined;\n}\n\nconst StepperItemContext = React.createContext<StepperItemContextValue | null>(\n null\n);\n\nfunction useStepperItemContext(consumerName: string) {\n const context = React.useContext(StepperItemContext);\n if (!context) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${ITEM_NAME}\\``);\n }\n return context;\n}\n\ninterface StepperItemProps extends DivProps {\n value: string;\n completed?: boolean;\n disabled?: boolean;\n}\n\nfunction StepperItem(props: StepperItemProps) {\n const {\n value: itemValue,\n completed = false,\n disabled = false,\n asChild,\n className,\n children,\n ref,\n ...itemProps\n } = props;\n\n const context = useStepperContext(ITEM_NAME);\n const store = useStoreContext(ITEM_NAME);\n const orientation = context.orientation;\n const labelPosition = context.labelPosition ?? \"right\";\n const value = useStore((state) => state.value);\n\n useIsomorphicLayoutEffect(() => {\n store.addStep(itemValue, completed, disabled);\n\n return () => {\n store.removeStep(itemValue);\n };\n }, [itemValue, completed, disabled]);\n\n useIsomorphicLayoutEffect(() => {\n store.setStep(itemValue, completed, disabled);\n }, [itemValue, completed, disabled]);\n\n const stepState = useStore((state) => state.steps.get(itemValue));\n const steps = useStore((state) => state.steps);\n const dataState = getDataState(value, itemValue, stepState, steps);\n\n const stepKeys = Array.from(steps.keys());\n const stepIndex = stepKeys.indexOf(itemValue);\n const isFirstStep = stepIndex === 0;\n const isLastStep = stepIndex === stepKeys.length - 1;\n\n const itemContextValue = React.useMemo<StepperItemContextValue>(\n () => ({\n value: itemValue,\n stepState,\n }),\n [itemValue, stepState]\n );\n\n // Determine item layout based on orientation and labelPosition\n const getItemClasses = () => {\n const baseClasses = \"ds:relative ds:flex\";\n\n if (orientation === \"horizontal\") {\n // Horizontal stepper\n if (labelPosition === \"top\" || labelPosition === \"bottom\") {\n // When labels are above/below, use flex-col to stack indicator row and label\n // Each item takes equal space\n return `${baseClasses} ds:flex-col ds:items-center ds:flex-1 ds:gap-2`;\n }\n // Default: labels left/right - flex-row\n return `${baseClasses} ds:flex-row ds:items-center ds:not-last:flex-1`;\n } else {\n // Vertical stepper - always flex-col for vertical orientation\n return `${baseClasses} ds:flex-col`;\n }\n };\n\n // Reorganize children for top/bottom label positions\n const processedChildren = React.useMemo(() => {\n if (\n orientation === \"horizontal\" &&\n (labelPosition === \"top\" || labelPosition === \"bottom\")\n ) {\n const childArray = React.Children.toArray(children);\n let trigger: React.ReactNode = null;\n let indicator: React.ReactNode = null;\n let separator: React.ReactNode = null;\n const others: React.ReactNode[] = [];\n\n childArray.forEach((child) => {\n if (React.isValidElement(child)) {\n const slot = (child.props as { \"data-slot\"?: string })[\"data-slot\"];\n if (slot === \"stepper-trigger\" || child.type === StepperTrigger) {\n trigger = child;\n // Extract indicator from trigger's children if it exists\n const triggerChildren = React.Children.toArray(\n (child as React.ReactElement<{ children?: React.ReactNode }>)\n .props.children\n );\n triggerChildren.forEach((triggerChild) => {\n if (React.isValidElement(triggerChild)) {\n const triggerChildSlot = (\n triggerChild.props as { \"data-slot\"?: string }\n )[\"data-slot\"];\n if (\n triggerChildSlot === \"stepper-indicator\" ||\n triggerChild.type === StepperIndicator\n ) {\n indicator = triggerChild;\n }\n }\n });\n } else if (\n slot === \"stepper-separator\" ||\n child.type === StepperSeparator\n ) {\n separator = child;\n } else {\n others.push(child);\n }\n } else {\n others.push(child);\n }\n });\n\n // New structure: indicator row (with indicator + separator) then trigger\n // For proper centering, we need separators on both sides\n\n // Get the state for left separator (connects to previous step)\n // Left separator should be active if current step or any previous step is active\n const prevStepIndex = stepIndex - 1;\n const prevStepValue = prevStepIndex >= 0 ? stepKeys[prevStepIndex] : null;\n const leftSeparatorState = prevStepValue\n ? getDataState(\n value,\n prevStepValue,\n steps.get(prevStepValue),\n steps,\n \"separator\"\n )\n : \"inactive\";\n\n // Create left separator (even if separator element doesn't exist)\n let leftSeparator: React.ReactNode = null;\n if (!isFirstStep) {\n const color = context.color;\n const customColor = context.customColor;\n\n leftSeparator = (\n <div\n key=\"left-separator\"\n className={cn(\n \"ds:h-px ds:flex-1 ds:transition-colors\",\n getSeparatorColorClass(color, customColor, leftSeparatorState)\n )}\n style={getCustomColorStyle(customColor, leftSeparatorState, false)}\n aria-hidden=\"true\"\n />\n );\n }\n\n const indicatorRow = (\n <div\n className=\"ds:flex ds:w-full ds:items-center ds:justify-center\"\n key=\"indicator-row\"\n >\n {/* Left separator - connects to previous step */}\n {leftSeparator}\n {/* Spacer if first step */}\n {isFirstStep && (\n <div className=\"ds:h-px ds:flex-1 ds:bg-transparent\" aria-hidden=\"true\" />\n )}\n {indicator}\n {/* Right separator - connects to next step */}\n {!isLastStep && separator}\n {/* Spacer for last step to maintain centering */}\n {isLastStep && (\n <div className=\"ds:h-px ds:flex-1 ds:bg-transparent\" aria-hidden=\"true\" />\n )}\n </div>\n );\n\n if (labelPosition === \"top\") {\n return [trigger, indicatorRow, ...others];\n } else {\n return [indicatorRow, trigger, ...others];\n }\n }\n\n return children;\n }, [\n children,\n orientation,\n labelPosition,\n isFirstStep,\n isLastStep,\n stepIndex,\n stepKeys,\n steps,\n value,\n context.color,\n context.customColor,\n ]);\n\n const ItemPrimitive = asChild ? Slot : \"div\";\n\n return (\n <StepperItemContext.Provider value={itemContextValue}>\n <ItemPrimitive\n data-disabled={stepState?.disabled ? \"\" : undefined}\n data-orientation={orientation}\n data-state={dataState}\n data-slot=\"stepper-item\"\n data-label-position={labelPosition}\n dir={context.dir}\n {...itemProps}\n ref={ref}\n className={cn(getItemClasses(), className)}\n >\n {processedChildren}\n </ItemPrimitive>\n </StepperItemContext.Provider>\n );\n}\n\nfunction StepperTrigger(props: ButtonProps) {\n const { asChild, disabled, className, ref, ...triggerProps } = props;\n\n const context = useStepperContext(TRIGGER_NAME);\n const itemContext = useStepperItemContext(TRIGGER_NAME);\n const store = useStoreContext(TRIGGER_NAME);\n const focusContext = useFocusContext(TRIGGER_NAME);\n const value = useStore((state) => state.value);\n const itemValue = itemContext.value;\n const stepState = useStore((state) => state.steps.get(itemValue));\n const activationMode = context.activationMode;\n const orientation = context.orientation;\n const loop = context.loop;\n const labelPosition = context.labelPosition ?? \"right\";\n\n const steps = useStore((state) => state.steps);\n const stepIndex = Array.from(steps.keys()).indexOf(itemValue);\n\n const stepPosition = stepIndex + 1;\n const stepCount = steps.size;\n\n const triggerId = getId(context.id, \"trigger\", itemValue);\n const contentId = getId(context.id, \"content\", itemValue);\n const titleId = getId(context.id, \"title\", itemValue);\n const descriptionId = getId(context.id, \"description\", itemValue);\n\n const isDisabled = context.disabled || stepState?.disabled || disabled;\n const isActive = value === itemValue;\n const isTabStop = focusContext.tabStopId === triggerId;\n const dataState = getDataState(value, itemValue, stepState, steps);\n\n const triggerRef = React.useRef<TriggerElement>(null);\n const composedRef = useComposedRefs(ref, triggerRef);\n const isArrowKeyPressedRef = React.useRef(false);\n const isMouseClickRef = React.useRef(false);\n\n React.useEffect(() => {\n function onKeyDown(event: KeyboardEvent) {\n if (ARROW_KEYS.includes(event.key)) {\n isArrowKeyPressedRef.current = true;\n }\n }\n function onKeyUp() {\n isArrowKeyPressedRef.current = false;\n }\n document.addEventListener(\"keydown\", onKeyDown);\n document.addEventListener(\"keyup\", onKeyUp);\n return () => {\n document.removeEventListener(\"keydown\", onKeyDown);\n document.removeEventListener(\"keyup\", onKeyUp);\n };\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n focusContext.onItemRegister({\n id: triggerId,\n ref: triggerRef,\n value: itemValue,\n active: isTabStop,\n disabled: !!isDisabled,\n });\n\n if (!isDisabled) {\n focusContext.onFocusableItemAdd();\n }\n\n return () => {\n focusContext.onItemUnregister(triggerId);\n if (!isDisabled) {\n focusContext.onFocusableItemRemove();\n }\n };\n }, [focusContext, triggerId, itemValue, isTabStop, isDisabled]);\n\n const onClick = React.useCallback(\n async (event: React.MouseEvent<TriggerElement>) => {\n triggerProps.onClick?.(event);\n if (event.defaultPrevented) return;\n\n if (!isDisabled && !context.nonInteractive) {\n const currentStepIndex = Array.from(steps.keys()).indexOf(value ?? \"\");\n const targetStepIndex = Array.from(steps.keys()).indexOf(itemValue);\n const direction = targetStepIndex > currentStepIndex ? \"next\" : \"prev\";\n\n await store.setStateWithValidation(itemValue, direction);\n }\n },\n [\n isDisabled,\n context.nonInteractive,\n store,\n itemValue,\n value,\n steps,\n triggerProps.onClick,\n ]\n );\n\n const onFocus = React.useCallback(\n async (event: React.FocusEvent<TriggerElement>) => {\n triggerProps.onFocus?.(event);\n if (event.defaultPrevented) return;\n\n focusContext.onItemFocus(triggerId);\n\n const isKeyboardFocus = !isMouseClickRef.current;\n\n if (\n !isActive &&\n !isDisabled &&\n activationMode !== \"manual\" &&\n !context.nonInteractive &&\n isKeyboardFocus\n ) {\n const currentStepIndex = Array.from(steps.keys()).indexOf(value || \"\");\n const targetStepIndex = Array.from(steps.keys()).indexOf(itemValue);\n const direction = targetStepIndex > currentStepIndex ? \"next\" : \"prev\";\n\n await store.setStateWithValidation(itemValue, direction);\n }\n\n isMouseClickRef.current = false;\n },\n [\n focusContext,\n triggerId,\n activationMode,\n isActive,\n isDisabled,\n context.nonInteractive,\n store,\n itemValue,\n value,\n steps,\n triggerProps.onFocus,\n ]\n );\n\n const onKeyDown = React.useCallback(\n async (event: React.KeyboardEvent<TriggerElement>) => {\n triggerProps.onKeyDown?.(event);\n if (event.defaultPrevented) return;\n\n if (event.key === \"Enter\" && context.nonInteractive) {\n event.preventDefault();\n return;\n }\n\n if (\n (event.key === \"Enter\" || event.key === \" \") &&\n activationMode === \"manual\" &&\n !context.nonInteractive\n ) {\n event.preventDefault();\n if (!isDisabled && triggerRef.current) {\n triggerRef.current.click();\n }\n return;\n }\n\n if (event.key === \"Tab\" && event.shiftKey) {\n focusContext.onItemShiftTab();\n return;\n }\n\n if (event.target !== event.currentTarget) return;\n\n const focusIntent = getFocusIntent(event, context.dir, orientation);\n\n if (focusIntent !== undefined) {\n if (event.metaKey || event.ctrlKey || event.altKey || event.shiftKey)\n return;\n event.preventDefault();\n\n const items = focusContext.getItems().filter((item) => !item.disabled);\n let candidateRefs = items.map((item) => item.ref);\n\n if (focusIntent === \"last\") {\n candidateRefs.reverse();\n } else if (focusIntent === \"prev\" || focusIntent === \"next\") {\n if (focusIntent === \"prev\") candidateRefs.reverse();\n const currentIndex = candidateRefs.findIndex(\n (ref) => ref.current === event.currentTarget\n );\n candidateRefs = loop\n ? wrapArray(candidateRefs, currentIndex + 1)\n : candidateRefs.slice(currentIndex + 1);\n }\n\n if (store.hasValidation() && candidateRefs.length > 0) {\n const nextRef = candidateRefs[0];\n const nextElement = nextRef?.current;\n const nextItem = items.find(\n (item) => item.ref.current === nextElement\n );\n\n if (nextItem && nextItem.value !== itemValue) {\n const currentStepIndex = Array.from(steps.keys()).indexOf(\n value || \"\"\n );\n const targetStepIndex = Array.from(steps.keys()).indexOf(\n nextItem.value\n );\n const direction: NavigationDirection =\n targetStepIndex > currentStepIndex ? \"next\" : \"prev\";\n\n if (direction === \"next\") {\n const isValid = await store.setStateWithValidation(\n nextItem.value,\n direction\n );\n if (!isValid) return;\n } else {\n store.setState(\"value\", nextItem.value);\n }\n\n queueMicrotask(() => nextElement?.focus());\n return;\n }\n }\n\n queueMicrotask(() => focusFirst(candidateRefs));\n }\n },\n [\n focusContext,\n context.nonInteractive,\n context.dir,\n activationMode,\n orientation,\n loop,\n isDisabled,\n triggerProps.onKeyDown,\n store,\n itemValue,\n value,\n steps,\n ]\n );\n\n const onMouseDown = React.useCallback(\n (event: React.MouseEvent<TriggerElement>) => {\n triggerProps.onMouseDown?.(event);\n if (event.defaultPrevented) return;\n\n isMouseClickRef.current = true;\n\n if (isDisabled) {\n event.preventDefault();\n } else {\n focusContext.onItemFocus(triggerId);\n }\n },\n [focusContext, triggerId, isDisabled, triggerProps.onMouseDown]\n );\n\n // Determine flex direction based on labelPosition\n const getFlexDirection = () => {\n if (\n orientation === \"horizontal\" &&\n (labelPosition === \"top\" || labelPosition === \"bottom\")\n ) {\n // For horizontal with top/bottom labels, trigger only contains text\n // Indicator and separator will be siblings at item level\n return labelPosition === \"top\" ? \"ds:flex-col-reverse\" : \"ds:flex-col\";\n }\n\n if (labelPosition === \"top\") return \"ds:flex-col-reverse\";\n if (labelPosition === \"bottom\") return \"ds:flex-col\";\n if (labelPosition === \"left\") return \"ds:flex-row-reverse\";\n return \"ds:flex-row\"; // default is right\n };\n\n const shouldWrapIndicator =\n orientation === \"horizontal\" &&\n (labelPosition === \"top\" || labelPosition === \"bottom\");\n\n // Filter out Indicator from children when shouldWrapIndicator is true\n const processedChildren = React.useMemo(() => {\n if (!shouldWrapIndicator) return triggerProps.children;\n\n const childArray = React.Children.toArray(triggerProps.children);\n return childArray.filter((child) => {\n if (React.isValidElement(child)) {\n const slot = (child.props as { \"data-slot\"?: string })[\"data-slot\"];\n return !(\n slot === \"stepper-indicator\" || child.type === StepperIndicator\n );\n }\n return true;\n });\n }, [shouldWrapIndicator, triggerProps.children]);\n\n const TriggerPrimitive = asChild ? Slot : \"button\";\n\n return (\n <TriggerPrimitive\n id={triggerId}\n role=\"tab\"\n type=\"button\"\n aria-controls={contentId}\n aria-current={isActive ? \"step\" : undefined}\n aria-describedby={`${titleId} ${descriptionId}`}\n aria-posinset={stepPosition}\n aria-selected={isActive}\n aria-setsize={stepCount}\n data-disabled={isDisabled ? \"\" : undefined}\n data-state={dataState}\n data-slot=\"stepper-trigger\"\n data-wrap-indicator={shouldWrapIndicator ? \"\" : undefined}\n disabled={isDisabled}\n tabIndex={isTabStop ? 0 : -1}\n {...triggerProps}\n ref={composedRef}\n className={cn(\n \"ds:inline-flex ds:items-center ds:justify-center ds:gap-3 ds:rounded-md ds:text-left ds:outline-none ds:transition-all ds:focus-visible:border-ring ds:focus-visible:ring-[3px] ds:focus-visible:ring-ring/50 ds:disabled:pointer-events-none ds:disabled:opacity-50 ds:aria-invalid:border-destructive ds:aria-invalid:ring-destructive/20 ds:dark:aria-invalid:ring-destructive/40 ds:[&_svg:not([class*='size-'])]:size-4 ds:[&_svg]:pointer-events-none ds:[&_svg]:shrink-0\",\n \"ds:not-has-data-[slot=description]:rounded-full ds:not-has-data-[slot=title]:rounded-full\",\n shouldWrapIndicator ? \"\" : getFlexDirection(),\n className\n )}\n onClick={onClick}\n onFocus={onFocus}\n onKeyDown={onKeyDown}\n onMouseDown={onMouseDown}\n >\n {processedChildren}\n </TriggerPrimitive>\n );\n}\n\ninterface StepperIndicatorProps extends Omit<DivProps, \"children\"> {\n children?: React.ReactNode | ((dataState: DataState) => React.ReactNode);\n color?: StepperColor;\n customColor?: string;\n variant?: StepperVariant;\n}\n\nfunction StepperIndicator(props: StepperIndicatorProps) {\n const {\n className,\n children,\n asChild,\n ref,\n color: colorProp,\n customColor: customColorProp,\n variant: variantProp,\n ...indicatorProps\n } = props;\n const context = useStepperContext(INDICATOR_NAME);\n const itemContext = useStepperItemContext(INDICATOR_NAME);\n const value = useStore((state) => state.value);\n const itemValue = itemContext.value;\n const stepState = useStore((state) => state.steps.get(itemValue));\n const steps = useStore((state) => state.steps);\n\n const stepPosition = Array.from(steps.keys()).indexOf(itemValue) + 1;\n\n const dataState = getDataState(value, itemValue, stepState, steps);\n\n const color = colorProp ?? context.color;\n const customColor = customColorProp ?? context.customColor;\n const variant = variantProp ?? context.variant ?? \"normal\";\n\n const colorClass = getIndicatorColorClass(color, customColor, dataState);\n const customStyle = getCustomColorStyle(customColor, dataState, true);\n\n const IndicatorPrimitive = asChild ? Slot : \"div\";\n\n const isDot = variant === \"dot\";\n\n return (\n <IndicatorPrimitive\n data-state={dataState}\n data-variant={variant}\n data-slot=\"stepper-indicator\"\n dir={context.dir}\n {...indicatorProps}\n ref={ref}\n style={{ ...indicatorProps.style, ...customStyle }}\n className={cn(\n \"ds:flex ds:shrink-0 ds:items-center ds:justify-center ds:rounded-full ds:border-2 ds:font-medium ds:text-sm ds:transition-colors\",\n isDot ? \"ds:size-7 ds:data-[variant=dot]:size-2\" : \"ds:size-7\",\n colorClass,\n className\n )}\n >\n {!isDot &&\n (typeof children === \"function\" ? (\n children(dataState)\n ) : children ? (\n children\n ) : dataState === \"completed\" ? (\n <Check className=\"ds:size-4\" />\n ) : (\n stepPosition\n ))}\n </IndicatorPrimitive>\n );\n}\n\ninterface StepperSeparatorProps extends DivProps {\n forceMount?: boolean;\n color?: StepperColor;\n customColor?: string;\n}\n\nfunction StepperSeparator(props: StepperSeparatorProps) {\n const {\n className,\n asChild,\n forceMount = false,\n ref,\n color: colorProp,\n customColor: customColorProp,\n ...separatorProps\n } = props;\n\n const context = useStepperContext(SEPARATOR_NAME);\n const itemContext = useStepperItemContext(SEPARATOR_NAME);\n const value = useStore((state) => state.value);\n const orientation = context.orientation;\n const labelPosition = context.labelPosition ?? \"right\";\n\n const steps = useStore((state) => state.steps);\n const stepIndex = Array.from(steps.keys()).indexOf(itemContext.value);\n\n const isLastStep = stepIndex === steps.size - 1;\n\n if (isLastStep && !forceMount) {\n return null;\n }\n\n const dataState = getDataState(\n value,\n itemContext.value,\n itemContext.stepState,\n steps,\n \"separator\"\n );\n\n const color = colorProp ?? context.color;\n const customColor = customColorProp ?? context.customColor;\n\n const colorClass = getSeparatorColorClass(color, customColor, dataState);\n const customStyle = getCustomColorStyle(customColor, dataState, false);\n\n const SeparatorPrimitive = asChild ? Slot : \"div\";\n\n // Determine separator positioning based on orientation and labelPosition\n const getSeparatorClasses = () => {\n if (orientation === \"horizontal\") {\n // Horizontal stepper\n if (labelPosition === \"top\" || labelPosition === \"bottom\") {\n // When labels are above/below, separator is at item level alongside indicator\n // It should be a horizontal line that takes remaining space\n return \"ds:h-px ds:flex-1\";\n }\n // Default: labels left/right - normal flex behavior\n return \"ds:h-px ds:flex-1\";\n } else {\n // Vertical stepper\n if (labelPosition === \"top\" || labelPosition === \"bottom\") {\n // When labels are above/below in vertical mode, separator connects vertically\n return \"ds:w-px ds:absolute ds:left-1/2 ds:-translate-x-1/2 ds:top-full ds:h-full ds:-z-10\";\n } else if (labelPosition === \"left\") {\n // Label on left, separator on the right side\n return \"ds:w-px ds:absolute ds:right-0 ds:top-full ds:h-full ds:-z-10 ds:translate-x-1/2\";\n } else {\n // Label on right (default), separator on the left side\n return \"ds:w-px ds:absolute ds:left-0 ds:top-full ds:h-full ds:-z-10 ds:-translate-x-1/2\";\n }\n }\n };\n\n return (\n <SeparatorPrimitive\n role=\"separator\"\n aria-hidden=\"true\"\n aria-orientation={orientation}\n data-orientation={orientation}\n data-state={dataState}\n data-slot=\"stepper-separator\"\n dir={context.dir}\n {...separatorProps}\n ref={ref}\n style={{ ...separatorProps.style, ...customStyle }}\n className={cn(\n \"ds:transition-colors\",\n getSeparatorClasses(),\n colorClass,\n className\n )}\n />\n );\n}\n\ninterface StepperTitleProps extends React.ComponentProps<\"span\"> {\n asChild?: boolean;\n}\n\nfunction StepperTitle(props: StepperTitleProps) {\n const { className, asChild, ref, ...titleProps } = props;\n\n const context = useStepperContext(TITLE_NAME);\n const itemContext = useStepperItemContext(TITLE_NAME);\n\n const titleId = getId(context.id, \"title\", itemContext.value);\n\n const TitlePrimitive = asChild ? Slot : \"span\";\n\n return (\n <TitlePrimitive\n id={titleId}\n data-slot=\"title\"\n dir={context.dir}\n {...titleProps}\n ref={ref}\n className={cn(\"ds:font-medium ds:text-sm\", className)}\n />\n );\n}\n\ninterface StepperDescriptionProps extends React.ComponentProps<\"span\"> {\n asChild?: boolean;\n}\n\nfunction StepperDescription(props: StepperDescriptionProps) {\n const { className, asChild, ref, ...descriptionProps } = props;\n const context = useStepperContext(DESCRIPTION_NAME);\n const itemContext = useStepperItemContext(DESCRIPTION_NAME);\n\n const descriptionId = getId(context.id, \"description\", itemContext.value);\n\n const DescriptionPrimitive = asChild ? Slot : \"span\";\n\n return (\n <DescriptionPrimitive\n id={descriptionId}\n data-slot=\"description\"\n dir={context.dir}\n {...descriptionProps}\n ref={ref}\n className={cn(\"ds:text-muted-foreground ds:text-xs\", className)}\n />\n );\n}\n\ninterface StepperContentProps extends DivProps {\n value: string;\n forceMount?: boolean;\n}\n\nfunction StepperContent(props: StepperContentProps) {\n const {\n value: valueProp,\n asChild,\n forceMount = false,\n ref,\n className,\n ...contentProps\n } = props;\n\n const context = useStepperContext(CONTENT_NAME);\n const value = useStore((state) => state.value);\n\n const contentId = getId(context.id, \"content\", valueProp);\n const triggerId = getId(context.id, \"trigger\", valueProp);\n\n if (valueProp !== value && !forceMount) return null;\n\n const ContentPrimitive = asChild ? Slot : \"div\";\n\n return (\n <ContentPrimitive\n id={contentId}\n role=\"tabpanel\"\n aria-labelledby={triggerId}\n data-slot=\"stepper-content\"\n dir={context.dir}\n {...contentProps}\n ref={ref}\n className={cn(\"ds:flex-1 ds:outline-none\", className)}\n />\n );\n}\n\nfunction StepperPrev(props: ButtonProps) {\n const { asChild, disabled, ...prevProps } = props;\n\n const store = useStoreContext(PREV_NAME);\n const value = useStore((state) => state.value);\n const steps = useStore((state) => state.steps);\n\n const stepKeys = Array.from(steps.keys());\n const currentIndex = value ? stepKeys.indexOf(value) : -1;\n const isDisabled = disabled || currentIndex <= 0;\n\n const onClick = React.useCallback(\n async (event: React.MouseEvent<HTMLButtonElement>) => {\n prevProps.onClick?.(event);\n if (event.defaultPrevented || isDisabled) return;\n\n const prevIndex = Math.max(currentIndex - 1, 0);\n const prevStepValue = stepKeys[prevIndex];\n\n if (prevStepValue) {\n store.setState(\"value\", prevStepValue);\n }\n },\n [prevProps.onClick, isDisabled, currentIndex, stepKeys, store]\n );\n\n const PrevPrimitive = asChild ? Slot : \"button\";\n\n return (\n <PrevPrimitive\n type=\"button\"\n data-slot=\"stepper-prev\"\n disabled={isDisabled}\n {...prevProps}\n onClick={onClick}\n />\n );\n}\n\nfunction StepperNext(props: ButtonProps) {\n const { asChild, disabled, ...nextProps } = props;\n\n const store = useStoreContext(NEXT_NAME);\n const value = useStore((state) => state.value);\n const steps = useStore((state) => state.steps);\n\n const stepKeys = Array.from(steps.keys());\n const currentIndex = value ? stepKeys.indexOf(value) : -1;\n const isDisabled = disabled || currentIndex >= stepKeys.length - 1;\n\n const onClick = React.useCallback(\n async (event: React.MouseEvent<HTMLButtonElement>) => {\n nextProps.onClick?.(event);\n if (event.defaultPrevented || isDisabled) return;\n\n const nextIndex = Math.min(currentIndex + 1, stepKeys.length - 1);\n const nextStepValue = stepKeys[nextIndex];\n\n if (nextStepValue) {\n await store.setStateWithValidation(nextStepValue, \"next\");\n }\n },\n [nextProps.onClick, isDisabled, currentIndex, stepKeys, store]\n );\n\n const NextPrimitive = asChild ? Slot : \"button\";\n\n return (\n <NextPrimitive\n type=\"button\"\n data-slot=\"stepper-next\"\n disabled={isDisabled}\n {...nextProps}\n onClick={onClick}\n />\n );\n}\n\nexport {\n StepperRoot,\n StepperList,\n StepperItem,\n StepperTrigger,\n StepperIndicator,\n StepperSeparator,\n StepperTitle,\n StepperDescription,\n StepperContent,\n StepperPrev,\n StepperNext,\n //\n useStore as useStepper,\n //\n type StepperRootProps as StepperProps,\n};\n"],"names":["ROOT_NAME","LIST_NAME","ITEM_NAME","TRIGGER_NAME","INDICATOR_NAME","SEPARATOR_NAME","TITLE_NAME","DESCRIPTION_NAME","CONTENT_NAME","PREV_NAME","NEXT_NAME","ENTRY_FOCUS","EVENT_OPTIONS","ARROW_KEYS","stepperColorClasses","getIndicatorColorClass","color","customColor","dataState","getSeparatorColorClass","getCustomColorStyle","isIndicator","getId","id","variant","value","MAP_KEY_TO_FOCUS_INTENT","getDirectionAwareKey","key","dir","getFocusIntent","event","orientation","focusFirst","candidates","preventScroll","PREVIOUSLY_FOCUSED_ELEMENT","candidateRef","candidate","wrapArray","array","startIndex","_","index","useIsomorphicLayoutEffect","React","useAsRef","props","ref","useLazyRef","fn","getDataState","itemValue","stepState","steps","stepKeys","currentIndex","DirectionContext","useDirection","dirProp","contextDir","StoreContext","useStoreContext","consumerName","context","useStore","selector","store","getSnapshot","StepperContext","useStepperContext","StepperRoot","defaultValue","onValueChange","onValueComplete","onValueAdd","onValueRemove","onValidate","idProp","activationMode","asChild","disabled","nonInteractive","loop","labelPosition","className","rootProps","listenersRef","stateRef","propsRef","cb","direction","isValid","completed","newStep","step","updatedStep","rootId","contextValue","RootPrimitive","Slot","jsx","cn","FocusContext","useFocusContext","StepperList","children","listProps","currentValue","state","tabStopId","setTabStopId","isTabbingBackOut","setIsTabbingBackOut","focusableItemCount","setFocusableItemCount","isClickFocusRef","itemsRef","listRef","composedRef","useComposedRefs","onItemFocus","onItemShiftTab","onFocusableItemAdd","prevCount","onFocusableItemRemove","onItemRegister","item","onItemUnregister","getItems","a","b","elementA","elementB","position","onBlur","onFocus","isKeyboardFocus","entryFocusEvent","items","selectedItem","activeItem","currentItem","candidateRefs","onMouseDown","focusContextValue","ListPrimitive","StepperItemContext","useStepperItemContext","StepperItem","itemProps","stepIndex","isFirstStep","isLastStep","itemContextValue","getItemClasses","baseClasses","processedChildren","childArray","trigger","indicator","separator","others","child","slot","StepperTrigger","triggerChild","StepperIndicator","StepperSeparator","prevStepIndex","prevStepValue","leftSeparatorState","leftSeparator","indicatorRow","jsxs","ItemPrimitive","triggerProps","itemContext","focusContext","stepPosition","stepCount","triggerId","contentId","titleId","descriptionId","isDisabled","isActive","isTabStop","triggerRef","isArrowKeyPressedRef","isMouseClickRef","onKeyDown","onKeyUp","onClick","currentStepIndex","focusIntent","nextElement","nextItem","getFlexDirection","shouldWrapIndicator","TriggerPrimitive","colorProp","customColorProp","variantProp","indicatorProps","colorClass","customStyle","IndicatorPrimitive","isDot","Check","forceMount","separatorProps","SeparatorPrimitive","getSeparatorClasses","StepperTitle","titleProps","TitlePrimitive","StepperDescription","descriptionProps","DescriptionPrimitive","StepperContent","valueProp","contentProps","ContentPrimitive","StepperPrev","prevProps","prevIndex","PrevPrimitive","StepperNext","nextProps","nextIndex","nextStepValue","NextPrimitive"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"StepperWrapper.cjs","sources":["../../../../src/components/Stepper/StepperWrapper.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n StepperContent,\n StepperDescription,\n StepperIndicator,\n StepperItem,\n StepperList,\n StepperRoot,\n StepperSeparator,\n StepperTitle,\n StepperTrigger,\n type StepperProps,\n} from \"./Stepper\";\nimport { cn } from \"@dsui/ui/index\";\n\ntype StepperColor =\n | \"primary\"\n | \"secondary\"\n | \"accent\"\n | \"destructive\"\n | \"muted\"\n | \"success\"\n | \"error\"\n | \"warning\";\ntype StepperVariant = \"normal\" | \"dot\";\ntype LabelPosition = \"top\" | \"bottom\" | \"left\" | \"right\";\n\ninterface Step {\n value: string;\n title: string;\n description?: string;\n completed?: boolean;\n disabled?: boolean;\n content?: React.ReactNode;\n}\n\ninterface StepperWrapperProps extends StepperProps {\n steps?: Step[];\n children?: React.ReactNode;\n color?: StepperColor;\n customColor?: string;\n variant?: StepperVariant;\n labelPosition?: LabelPosition;\n}\n\nfunction StepperWrapper({\n steps,\n children,\n color,\n customColor,\n variant = \"normal\",\n labelPosition = \"right\",\n ...props\n}: StepperWrapperProps) {\n const hasStepContent = steps && steps.some((step) => step.content);\n\n // Determine separator classes based on orientation and labelPosition\n const getSeparatorClasses = (index: number, totalSteps: number) => {\n if (index >= totalSteps - 1) return \"\";\n\n const { orientation = \"horizontal\" } = props;\n\n if (orientation === \"vertical\") {\n // Vertical stepper - separator positioning\n if (labelPosition === \"top\" || labelPosition === \"bottom\") {\n return \"ds:-order-1 ds:-z-10 ds:absolute ds:inset-y-0 ds:top-7 ds:left-1/2 ds:-translate-x-1/2 ds:h-full\";\n } else if (labelPosition === \"left\") {\n return \"ds:-order-1 ds:-z-10 ds:absolute ds:inset-y-0 ds:top-7 ds:right-0 ds:translate-x-1/2 ds:h-full\";\n } else {\n // right (default)\n return \"ds:-order-1 ds:-z-10 ds:absolute ds:inset-y-0 ds:top-7 ds:left-3.5 ds:-translate-x-1/2 ds:h-full\";\n }\n }\n\n // Horizontal stepper - separator is handled by the Separator component itself\n return \"\";\n };\n\n return (\n <StepperRoot\n {...props}\n color={color}\n customColor={customColor}\n variant={variant}\n labelPosition={labelPosition}\n >\n {steps && steps.length > 0 && (\n <StepperList>\n {steps.map((step, index) => (\n <StepperItem\n key={step.value}\n value={step.value}\n completed={step.completed}\n disabled={step.disabled}\n >\n <StepperTrigger\n className={cn({\n \"ds:not-last:pb-6\":\n index < steps.length - 1 &&\n props.orientation === \"vertical\",\n })}\n >\n <StepperIndicator />\n <div\n className={cn(\"ds:flex ds:flex-col ds:gap-1\", {\n \"ds:text-center\":\n labelPosition === \"top\" || labelPosition === \"bottom\",\n \"ds:text-left\": labelPosition === \"right\",\n \"ds:text-right\": labelPosition === \"left\",\n })}\n >\n <StepperTitle>{step.title}</StepperTitle>\n {step.description && (\n <StepperDescription>{step.description}</StepperDescription>\n )}\n </div>\n </StepperTrigger>\n {index < steps.length - 1 && (\n <StepperSeparator\n className={getSeparatorClasses(index, steps.length)}\n />\n )}\n </StepperItem>\n ))}\n </StepperList>\n )}\n {hasStepContent\n ? steps?.map(\n (step) =>\n step.content && (\n <StepperContent key={step.value} value={step.value}>\n {step.content}\n </StepperContent>\n )\n )\n : children}\n </StepperRoot>\n );\n}\n\nexport { StepperWrapper };\nexport type { StepperWrapperProps, Step };\n"],"names":["StepperWrapper","steps","children","color","customColor","variant","labelPosition","props","hasStepContent","step","getSeparatorClasses","index","totalSteps","orientation","jsxs","StepperRoot","jsx","StepperList","StepperItem","StepperTrigger","cn","StepperIndicator","StepperTitle","StepperDescription","StepperSeparator","StepperContent"],"mappings":"qkDA+CA,SAASA,EAAe,CACtB,MAAAC,EACA,SAAAC,EACA,MAAAC,EACA,YAAAC,EACA,QAAAC,EAAU,SACV,cAAAC,EAAgB,QAChB,GAAGC,CACL,EAAwB,CACtB,MAAMC,EAAiBP,GAASA,EAAM,KAAMQ,GAASA,EAAK,OAAO,EAG3DC,EAAsB,CAACC,EAAeC,IAAuB,CACjE,GAAID,GAASC,EAAa,EAAG,MAAO,GAEpC,KAAM,CAAE,YAAAC,EAAc,YAAA,EAAiBN,EAEvC,OAAIM,IAAgB,WAEdP,IAAkB,OAASA,IAAkB,SACxC,mGACEA,IAAkB,OACpB,iGAGA,mGAKJ,EACT,EAEA,OACEQ,EAAAA,KAACC,EAAAA,YAAA,CACE,GAAGR,EACJ,MAAAJ,EACA,YAAAC,EACA,QAAAC,EACA,cAAAC,EAEC,SAAA,CAAAL,GAASA,EAAM,OAAS,GACvBe,EAAAA,IAACC,EAAAA,aACE,SAAAhB,EAAM,IAAI,CAACQ,EAAME,IAChBG,EAAAA,KAACI,EAAAA,YAAA,CAEC,MAAOT,EAAK,MACZ,UAAWA,EAAK,UAChB,SAAUA,EAAK,SAEf,SAAA,CAAAK,EAAAA,KAACK,EAAAA,eAAA,CACC,UAAWC,EAAAA,GAAG,CACZ,mBACET,EAAQV,EAAM,OAAS,GACvBM,EAAM,cAAgB,UAAA,CACzB,EAED,SAAA,CAAAS,EAAAA,IAACK,EAAAA,iBAAA,EAAiB,EAClBP,EAAAA,KAAC,MAAA,CACC,UAAWM,EAAAA,GAAG,+BAAgC,CAC5C,iBACEd,IAAkB,OAASA,IAAkB,SAC/C,eAAgBA,IAAkB,QAClC,gBAAiBA,IAAkB,MAAA,CACpC,EAED,SAAA,CAAAU,EAAAA,IAACM,EAAAA,aAAA,CAAc,WAAK,KAAA,CAAM,EACzBb,EAAK,aACJO,MAACO,EAAAA,mBAAA,CAAoB,WAAK,WAAA,CAAY,CAAA,CAAA,CAAA,CAE1C,CAAA,CAAA,EAEDZ,EAAQV,EAAM,OAAS,GACtBe,EAAAA,IAACQ,EAAAA,iBAAA,CACC,UAAWd,EAAoBC,EAAOV,EAAM,MAAM,CAAA,CAAA,CACpD,CAAA,EA9BGQ,EAAK,KAAA,CAiCb,EACH,EAEDD,EACGP,GAAO,IACJQ,GACCA,EAAK,SACHO,EAAAA,IAACS,EAAAA,eAAA,CAAgC,MAAOhB,EAAK,MAC1C,SAAAA,EAAK,OAAA,EADaA,EAAK,KAE1B,CAAA,EAGNP,CAAA,CAAA,CAAA,CAGV"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../../src/components/Stepper/index.ts"],"sourcesContent":["import {\n StepperRoot,\n StepperList,\n StepperItem,\n StepperTrigger,\n StepperIndicator,\n StepperSeparator,\n StepperTitle,\n StepperDescription,\n StepperContent,\n StepperPrev,\n StepperNext,\n //\n useStepper,\n //\n type StepperProps,\n} from \"./Stepper\";\nimport { StepperWrapper } from \"./StepperWrapper\";\n\nconst Stepper = Object.assign(StepperWrapper, {\n Root: StepperRoot,\n List: StepperList,\n Item: StepperItem,\n Trigger: StepperTrigger,\n Indicator: StepperIndicator,\n Separator: StepperSeparator,\n Title: StepperTitle,\n Description: StepperDescription,\n Content: StepperContent,\n Prev: StepperPrev,\n Next: StepperNext,\n});\n\nexport { Stepper, useStepper };\nexport type { StepperProps };\n"],"names":["Stepper","StepperWrapper","StepperRoot","StepperList","StepperItem","StepperTrigger","StepperIndicator","StepperSeparator","StepperTitle","StepperDescription","StepperContent","StepperPrev","StepperNext"],"mappings":"mJAmBMA,EAAU,OAAO,OAAOC,iBAAgB,CAC5C,KAAMC,EAAAA,YACN,KAAMC,EAAAA,YACN,KAAMC,EAAAA,YACN,QAASC,EAAAA,eACT,UAAWC,EAAAA,iBACX,UAAWC,EAAAA,iBACX,MAAOC,EAAAA,aACP,YAAaC,EAAAA,mBACb,QAASC,EAAAA,eACT,KAAMC,EAAAA,YACN,KAAMC,EAAAA,WACR,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Switch.cjs","sources":["../../../../src/components/Switch/Switch.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport {\n Switch as SSwitch,\n switchVariants,\n type SwitchVariant,\n} from \"@dsui/ui/components/switch\";\nimport { cn } from \"@dsui/ui/lib/utils\";\nimport type { SwitchAnimation } from \"@/types/variables\";\nimport { animationEffect } from \"@/utils/animations\";\nimport { Glass } from \"../Glass\";\n\nexport type SwitchProps = Omit<\n React.ComponentPropsWithoutRef<typeof SSwitch>,\n \"onCheckedChange\" | \"variant\" | \"size\" | \"color\"\n> & {\n onCheckedChange?: (checked: boolean) => void;\n variant?: \"default\" | \"square1\" | \"square2\" | \"mini\";\n size?: \"xs\" | \"sm\" | \"normal\" | \"lg\" | \"xl\";\n color?:\n | \"primary\"\n | \"secondary\"\n | \"accent\"\n | \"destructive\"\n | \"muted\"\n | \"success\"\n | \"error\"\n | \"warning\";\n animation?: SwitchAnimation;\n label?: React.ReactNode;\n labelPosition?: \"left\" | \"right\" | \"top\" | \"bottom\";\n offLabel?: React.ReactNode;\n onLabel?: React.ReactNode;\n showLabels?: \"outside\" | \"inside\" | \"none\";\n};\n\ntype AnimResult = {\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n variant?: SwitchVariant[\"variant\"];\n isGlass?: boolean; // Flag for glass effect\n};\n\nconst Switch = React.forwardRef<HTMLButtonElement, SwitchProps>(\n (props, ref) => {\n const {\n animation,\n label,\n labelPosition = \"right\",\n offLabel,\n onLabel,\n showLabels = \"none\",\n checked = false,\n onCheckedChange,\n className,\n variant = \"default\",\n size = \"normal\",\n color,\n ...rest\n } = props;\n const id = React.useId();\n\n const [isChecked, setIsChecked] = React.useState(checked);\n\n React.useEffect(() => {\n setIsChecked(checked as boolean);\n }, [checked]);\n\n const handleCheckedChange = (newChecked: boolean) => {\n setIsChecked(newChecked);\n onCheckedChange?.(newChecked);\n };\n\n const switchAnimation = useMemo<AnimResult | null>(() => {\n if (!animation) return null;\n\n // Handle glass animation separately for Switch (don't affect other components)\n if (animation === \"glass\") {\n return {\n className: \"ds:!bg-transparent ds:!shadow-none ds:!border-none\",\n isGlass: true, // Custom flag for glass effect\n variant: \"default\",\n };\n }\n\n return animationEffect<SwitchAnimation, SwitchVariant[\"variant\"]>({\n animation,\n children: null,\n className,\n rootClassName: switchVariants({\n variant: variant,\n size: size,\n color: color,\n }),\n variantType: variant,\n });\n }, [animation, className, variant, size, color]);\n\n const switchElement = (switchClassName?: string) => {\n const baseSwitchElement = (\n <SSwitch\n ref={ref}\n id={id}\n checked={isChecked}\n onCheckedChange={handleCheckedChange}\n className={cn(className, switchClassName, switchAnimation?.className)}\n variant={variant}\n size={size}\n color={color}\n style={{ ...(rest.style || {}), ...(switchAnimation?.style || {}) }}\n {...rest}\n />\n );\n\n // If animation is glass effect, wrap the switch in Glass component\n if (animation === \"glass\" && switchAnimation?.isGlass) {\n const roundedMatches = switchVariants({\n variant: variant,\n size: size,\n color: color,\n })?.match(/((?:!)?rounded-\\S+)/g);\n const roundedClass = roundedMatches\n ? roundedMatches[roundedMatches.length - 1]\n : \"ds:rounded-full\";\n\n return (\n <Glass\n className={cn(\"ds:hover:scale-110 ds:[&_span]:opacity-80\", roundedClass)}\n >\n {baseSwitchElement}\n </Glass>\n );\n }\n\n // If animation returns children wrapper, use it\n if (\n switchAnimation?.children &&\n React.isValidElement(switchAnimation.children)\n ) {\n return React.cloneElement(switchAnimation.children, baseSwitchElement);\n }\n\n return baseSwitchElement;\n };\n\n // Render with inside labels (icons inside thumb position)\n if (showLabels === \"inside\" && (offLabel || onLabel)) {\n return (\n <div className=\"ds:relative ds:inline-grid ds:h-7 ds:w-fit ds:grid-cols-[1fr_1fr] ds:items-center ds:text-sm ds:font-medium\">\n {switchElement(\n \"ds:peer ds:data-[state=unchecked]:bg-input/50 ds:absolute ds:inset-0 ds:h-[inherit] ds:w-14 ds:[&_span]:z-10 ds:[&_span]:size-6.5 ds:[&_span]:transition-transform ds:[&_span]:duration-300 ds:[&_span]:ease-[cubic-bezier(0.16,1,0.3,1)] ds:[&_span]:data-[state=checked]:translate-x-7 ds:[&_span]:data-[state=checked]:rtl:-translate-x-7\"\n )}\n <span className=\"ds:pointer-events-none ds:relative ds:ml-0.5 ds:flex ds:min-w-8 ds:items-center ds:justify-center ds:text-center ds:transition-transform ds:duration-300 ds:ease-[cubic-bezier(0.16,1,0.3,1)] ds:peer-data-[state=checked]:invisible ds:peer-data-[state=unchecked]:translate-x-6 ds:peer-data-[state=unchecked]:rtl:-translate-x-6\">\n {offLabel}\n </span>\n <span className=\"ds:peer-data-[state=checked]:text-background ds:pointer-events-none ds:relative ds:flex ds:min-w-8 ds:items-center ds:justify-center ds:text-center ds:transition-transform ds:duration-300 ds:ease-[cubic-bezier(0.16,1,0.3,1)]\tds:peer-data-[state=checked]:-translate-x-full\tds:peer-data-[state=unchecked]:invisible\tds:peer-data-[state=checked]:rtl:translate-x-full\">\n {onLabel}\n </span>\n </div>\n );\n }\n\n // Render with outside labels\n if (showLabels === \"outside\" && (offLabel || onLabel)) {\n return (\n <div\n className=\"ds:group ds:inline-flex ds:items-center ds:gap-2\"\n data-state={isChecked ? \"checked\" : \"unchecked\"}\n >\n {offLabel && (\n <span\n className=\"ds:flex-1 ds:cursor-pointer ds:text-sm ds:font-medium ds:group-data-[state=checked]:text-muted-foreground/70\"\n onClick={() => handleCheckedChange(false)}\n >\n {offLabel}\n </span>\n )}\n {switchElement()}\n {onLabel && (\n <span\n className=\"ds:flex-1 ds:cursor-pointer ds:text-sm ds:font-medium ds:group-data-[state=unchecked]:text-muted-foreground/70\"\n onClick={() => handleCheckedChange(true)}\n >\n {onLabel}\n </span>\n )}\n </div>\n );\n }\n\n // Render with label (outside wrap)\n if (label) {\n const isVertical = labelPosition === \"top\" || labelPosition === \"bottom\";\n const flexDirection = isVertical ? \"ds:flex-col\" : \"ds:flex-row\";\n const alignItems = isVertical ? \"ds:items-start\" : \"ds:items-center\";\n const labelFirst = labelPosition === \"left\" || labelPosition === \"top\";\n\n return (\n <div className={cn(\"ds:flex ds:gap-2\", flexDirection, alignItems)}>\n {labelFirst && <label htmlFor={id}>{label}</label>}\n {switchElement()}\n {!labelFirst && <label htmlFor={id}>{label}</label>}\n </div>\n );\n }\n\n // Default render\n return switchElement();\n }\n);\n\nSwitch.displayName = \"Switch\";\nexport default Switch;\n"],"names":["Switch","React","props","ref","animation","label","labelPosition","offLabel","onLabel","showLabels","checked","onCheckedChange","className","variant","size","color","rest","id","isChecked","setIsChecked","handleCheckedChange","newChecked","switchAnimation","useMemo","animationEffect","switchVariants","switchElement","switchClassName","baseSwitchElement","jsx","SSwitch","cn","roundedMatches","roundedClass","Glass","jsxs","isVertical","flexDirection","alignItems","labelFirst"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"data-table-date-filter.cjs","sources":["../../../../../src/components/Table/TableFilter/data-table-date-filter.tsx"],"sourcesContent":["\"use client\";\n\nimport { formatDate } from \"@/utils/datetime\";\nimport type { Column } from \"@tanstack/react-table\";\nimport { CalendarIcon, XCircle } from \"lucide-react\";\nimport * as React from \"react\";\nimport type { DateRange } from \"react-day-picker\";\nimport { Separator } from \"../../Separator\";\nimport { Popover } from \"../../Popover\";\nimport { Button } from \"../../Button\";\nimport { Calendar } from \"../../Calendar\";\n\ntype DateSelection = Date[] | DateRange;\n\nfunction getIsDateRange(value: DateSelection): value is DateRange {\n return value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction parseAsDate(timestamp: number | string | undefined): Date | undefined {\n if (!timestamp) return undefined;\n const numericTimestamp =\n typeof timestamp === \"string\" ? Number(timestamp) : timestamp;\n const date = new Date(numericTimestamp);\n return !Number.isNaN(date.getTime()) ? date : undefined;\n}\n\nfunction parseColumnFilterValue(value: unknown) {\n if (value === null || value === undefined) {\n return [];\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => {\n if (typeof item === \"number\" || typeof item === \"string\") {\n return item;\n }\n return undefined;\n });\n }\n\n if (typeof value === \"string\" || typeof value === \"number\") {\n return [value];\n }\n\n return [];\n}\n\nexport interface DataTableDateFilterProps<TData> {\n column: Column<TData, unknown>;\n title?: string;\n multiple?: boolean;\n}\n\nexport function DataTableDateFilter<TData>({\n column,\n title,\n multiple,\n}: DataTableDateFilterProps<TData>) {\n const columnFilterValue = column.getFilterValue();\n\n const selectedDates = React.useMemo<DateSelection>(() => {\n if (!columnFilterValue) {\n return multiple ? { from: undefined, to: undefined } : [];\n }\n\n if (multiple) {\n const timestamps = parseColumnFilterValue(columnFilterValue);\n return {\n from: parseAsDate(timestamps[0]),\n to: parseAsDate(timestamps[1]),\n };\n }\n\n const timestamps = parseColumnFilterValue(columnFilterValue);\n const date = parseAsDate(timestamps[0]);\n return date ? [date] : [];\n }, [columnFilterValue, multiple]);\n\n const onSelect = React.useCallback(\n (date: Date | DateRange | undefined) => {\n if (!date) {\n column.setFilterValue(undefined);\n return;\n }\n\n if (multiple && !(\"getTime\" in date)) {\n const from = date.from?.getTime();\n const to = date.to?.getTime();\n column.setFilterValue(from || to ? [from, to] : undefined);\n } else if (!multiple && \"getTime\" in date) {\n column.setFilterValue(date.getTime());\n }\n },\n [column, multiple]\n );\n\n const onReset = React.useCallback(\n (event: React.MouseEvent) => {\n event.stopPropagation();\n column.setFilterValue(undefined);\n },\n [column]\n );\n\n const hasValue = React.useMemo(() => {\n if (multiple) {\n if (!getIsDateRange(selectedDates)) return false;\n return selectedDates.from || selectedDates.to;\n }\n if (!Array.isArray(selectedDates)) return false;\n return selectedDates.length > 0;\n }, [multiple, selectedDates]);\n\n const formatDateRange = React.useCallback((range: DateRange) => {\n if (!range.from && !range.to) return \"\";\n if (range.from && range.to) {\n return `${formatDate(range.from)} - ${formatDate(range.to)}`;\n }\n return formatDate(range.from ?? range.to);\n }, []);\n\n const label = React.useMemo(() => {\n if (multiple) {\n if (!getIsDateRange(selectedDates)) return null;\n\n const hasSelectedDates = selectedDates.from || selectedDates.to;\n const dateText = hasSelectedDates\n ? formatDateRange(selectedDates)\n : \"Select date range\";\n\n return (\n <span className=\"ds:flex ds:items-center ds:gap-2\">\n <span>{title}</span>\n {hasSelectedDates && (\n <>\n <Separator\n orientation=\"vertical\"\n className=\"ds:mx-0.5 ds:data-[orientation=vertical]:h-4\"\n />\n <span>{dateText}</span>\n </>\n )}\n </span>\n );\n }\n\n if (getIsDateRange(selectedDates)) return null;\n\n const hasSelectedDate = selectedDates.length > 0;\n const dateText = hasSelectedDate\n ? formatDate(selectedDates[0])\n : \"Select date\";\n\n return (\n <span className=\"ds:flex ds:items-center ds:gap-2\">\n <span>{title}</span>\n {hasSelectedDate && (\n <>\n <Separator\n orientation=\"vertical\"\n className=\"ds:mx-0.5 ds:data-[orientation=vertical]:h-4\"\n />\n <span>{dateText}</span>\n </>\n )}\n </span>\n );\n }, [selectedDates, multiple, formatDateRange, title]);\n\n const PopContent = (\n <div className=\"ds:w-auto ds:p-0\">\n {multiple ? (\n <Calendar\n autoFocus\n captionLayout=\"dropdown\"\n mode=\"range\"\n selected={\n getIsDateRange(selectedDates)\n ? selectedDates\n : { from: undefined, to: undefined }\n }\n onSelect={onSelect}\n />\n ) : (\n <Calendar\n captionLayout=\"dropdown\"\n mode=\"single\"\n selected={\n !getIsDateRange(selectedDates) ? selectedDates[0] : undefined\n }\n onSelect={onSelect}\n />\n )}\n </div>\n );\n\n return (\n <Popover content={PopContent}>\n <Button variant=\"outline\" size=\"sm\" className=\"ds:border-dashed ds:font-normal\">\n {hasValue ? (\n <div\n role=\"button\"\n aria-label={`Clear ${title} filter`}\n tabIndex={0}\n onClick={onReset}\n className=\"ds:rounded-sm ds:opacity-70 ds:transition-opacity ds:hover:opacity-100 ds:focus-visible:outline-none ds:focus-visible:ring-1 ds:focus-visible:ring-ring\"\n >\n <XCircle />\n </div>\n ) : (\n <CalendarIcon />\n )}\n {label}\n </Button>\n </Popover>\n );\n}\n"],"names":["getIsDateRange","value","parseAsDate","timestamp","numericTimestamp","date","parseColumnFilterValue","item","DataTableDateFilter","column","title","multiple","columnFilterValue","selectedDates","React","timestamps","onSelect","from","to","onReset","event","hasValue","formatDateRange","range","formatDate","label","hasSelectedDates","dateText","jsxs","jsx","Fragment","Separator","hasSelectedDate","PopContent","Calendar","Popover","Button","XCircle","CalendarIcon"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"data-table-filter-popover.cjs","sources":["../../../../../src/components/Table/TableFilter/data-table-filter-popover.tsx"],"sourcesContent":["\"use client\";\n\nimport type { Column } from \"@tanstack/react-table\";\nimport { X } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { Popover } from \"../../Popover\";\nimport { Input } from \"../../Input\";\nimport { Checkbox } from \"../../Checkbox\";\nimport { Radio } from \"../../Radio\";\nimport { DataTableSliderFilter } from \"./data-table-slider-filter\";\nimport { DataTableDateFilter } from \"./data-table-date-filter\";\nimport { Separator } from \"@/components/Separator\";\nimport { Button } from \"@/components/Button\";\n\nexport interface DataTableFilterPopoverProps<TData> {\n column: Column<TData>;\n trigger: React.ReactNode;\n open?: boolean;\n onOpenChange?: (isOpen: boolean) => void;\n}\n\nexport function DataTableFilterPopover<TData>({\n column,\n trigger,\n open,\n onOpenChange,\n}: DataTableFilterPopoverProps<TData>) {\n const [internalOpen, setInternalOpen] = React.useState(false);\n\n const isOpen = open !== undefined ? open : internalOpen;\n const setIsOpen = onOpenChange || setInternalOpen;\n\n const columnMeta = column.columnDef.meta;\n\n const renderFilterContent = () => {\n if (!columnMeta?.variant) return <div>No filter available</div>;\n\n switch (columnMeta.variant) {\n case \"text\":\n return (\n <Input\n placeholder={columnMeta.placeholder ?? columnMeta.label}\n value={(column.getFilterValue() as string) ?? \"\"}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) =>\n column.setFilterValue(event.target.value)\n }\n className=\"ds:h-8 ds:w-full\"\n />\n );\n\n case \"number\":\n return (\n <Input\n type=\"number\"\n placeholder={columnMeta.placeholder ?? columnMeta.label}\n value={(column.getFilterValue() as string) ?? \"\"}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) =>\n column.setFilterValue(event.target.value)\n }\n className=\"ds:h-8 ds:w-full\"\n />\n );\n\n case \"date\":\n case \"dateRange\":\n return (\n <DataTableDateFilter\n column={column}\n title={columnMeta.label ?? column.id}\n multiple={columnMeta.variant === \"dateRange\"}\n />\n );\n\n case \"range\":\n return (\n <DataTableSliderFilter\n column={column}\n title={columnMeta.label ?? column.id}\n />\n );\n\n case \"select\":\n case \"multiSelect\": {\n const options = columnMeta.options || [];\n const multiple = columnMeta.variant === \"multiSelect\";\n\n if (multiple) {\n const currentValues = (column.getFilterValue() as string[]) || [];\n return (\n <>\n <div className=\"ds:space-y-2 ds:max-h-48 ds:overflow-y-auto ds:text-sm\">\n {options.map((option) => (\n <div\n key={option.value}\n className=\"ds:flex ds:items-center ds:space-x-2\"\n >\n <Checkbox\n checked={currentValues.includes(option.value)}\n onCheckedChange={(checked) => {\n if (checked) {\n column.setFilterValue([\n ...currentValues,\n option.value,\n ]);\n } else {\n column.setFilterValue(\n currentValues.filter((v) => v !== option.value)\n );\n }\n }}\n label={option.label}\n />\n </div>\n ))}\n </div>\n {/* <Separator className=\"my-2\" /> */}\n {/* <div className=\"flex justify-center gap-0 mt-2\">\n <Button\n variant=\"ghost\"\n onClick={() =>\n column.setFilterValue(options.map((o) => o.value))\n }\n >\n Check All\n </Button>\n <Button\n variant=\"ghost\"\n onClick={() => column.setFilterValue(undefined)}\n >\n <X className=\"size-3\" />\n Clear Filter\n </Button>\n </div> */}\n </>\n );\n } else {\n const currentValue = column.getFilterValue() as string;\n return (\n <Radio\n value={currentValue}\n onValueChange={(value) => column.setFilterValue(value)}\n options={options.map((option) => ({\n label: option.label,\n value: option.value,\n }))}\n className=\"ds:p-1\"\n />\n );\n }\n }\n\n default:\n return <div>No filter available</div>;\n }\n };\n\n const hasFilterValue = column.getFilterValue() != null;\n\n return (\n <Popover\n open={isOpen}\n onOpenChange={setIsOpen}\n trigger={trigger}\n content={\n <div className=\"ds:p-2 ds:min-w-32\">\n {renderFilterContent()}\n {hasFilterValue && (\n <>\n <Separator className=\"ds:mt-3 ds:mb-1\" />\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => column.setFilterValue(undefined)}\n >\n <X className=\"ds:size-3\" />\n Clear Filter\n </Button>\n </>\n )}\n </div>\n }\n contentClassName=\"ds:p-0\"\n />\n );\n}\n"],"names":["DataTableFilterPopover","column","trigger","open","onOpenChange","internalOpen","setInternalOpen","React","isOpen","setIsOpen","columnMeta","renderFilterContent","jsx","Input","event","DataTableDateFilter","DataTableSliderFilter","options","currentValues","Fragment","option","Checkbox","checked","v","currentValue","Radio","value","hasFilterValue","Popover","jsxs","Separator","Button","X"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"data-table-slider-filter.cjs","sources":["../../../../../src/components/Table/TableFilter/data-table-slider-filter.tsx"],"sourcesContent":["\"use client\";\n\nimport type { Column } from \"@tanstack/react-table\";\nimport { PlusCircle, XCircle } from \"lucide-react\";\nimport * as React from \"react\";\nimport { Button } from \"../../Button\";\nimport { Input } from \"../../Input\";\nimport { Popover } from \"../../Popover\";\nimport { Separator } from \"../../Separator\";\nimport { Slider } from \"../../Slider\";\nimport { cn } from \"@dsui/ui/index\";\n\ninterface Range {\n min: number;\n max: number;\n}\n\ntype RangeValue = [number, number];\n\nfunction getIsValidRange(value: unknown): value is RangeValue {\n return (\n Array.isArray(value) &&\n value.length === 2 &&\n typeof value[0] === \"number\" &&\n typeof value[1] === \"number\"\n );\n}\n\nfunction parseValuesAsNumbers(value: unknown): RangeValue | undefined {\n if (\n Array.isArray(value) &&\n value.length === 2 &&\n value.every(\n (v) =>\n (typeof v === \"string\" || typeof v === \"number\") && !Number.isNaN(v)\n )\n ) {\n return [Number(value[0]), Number(value[1])];\n }\n\n return undefined;\n}\n\nexport interface DataTableSliderFilterProps<TData> {\n column: Column<TData, unknown>;\n title?: string;\n}\n\nexport function DataTableSliderFilter<TData>({\n column,\n title,\n}: DataTableSliderFilterProps<TData>) {\n const id = React.useId();\n\n const columnFilterValue = parseValuesAsNumbers(column.getFilterValue());\n\n const defaultRange = column.columnDef.meta?.range;\n const unit = column.columnDef.meta?.unit;\n\n const { min, max, step } = React.useMemo<Range & { step: number }>(() => {\n let minValue = 0;\n let maxValue = 100;\n\n if (defaultRange && getIsValidRange(defaultRange)) {\n [minValue, maxValue] = defaultRange;\n } else {\n const values = column.getFacetedMinMaxValues();\n if (values && Array.isArray(values) && values.length === 2) {\n const [facetMinValue, facetMaxValue] = values;\n if (\n typeof facetMinValue === \"number\" &&\n typeof facetMaxValue === \"number\"\n ) {\n minValue = facetMinValue;\n maxValue = facetMaxValue;\n }\n }\n }\n\n const rangeSize = maxValue - minValue;\n const step =\n rangeSize <= 20\n ? 1\n : rangeSize <= 100\n ? Math.ceil(rangeSize / 20)\n : Math.ceil(rangeSize / 50);\n\n return { min: minValue, max: maxValue, step };\n }, [column, defaultRange]);\n\n const range = React.useMemo((): RangeValue => {\n return columnFilterValue ?? [min, max];\n }, [columnFilterValue, min, max]);\n\n const formatValue = React.useCallback((value: number) => {\n return value.toLocaleString(undefined, { maximumFractionDigits: 0 });\n }, []);\n\n const onFromInputChange = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const numValue = Number(event.target.value);\n if (!Number.isNaN(numValue) && numValue >= min && numValue <= range[1]) {\n column.setFilterValue([numValue, range[1]]);\n }\n },\n [column, min, range]\n );\n\n const onToInputChange = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const numValue = Number(event.target.value);\n if (!Number.isNaN(numValue) && numValue <= max && numValue >= range[0]) {\n column.setFilterValue([range[0], numValue]);\n }\n },\n [column, max, range]\n );\n\n const onSliderValueChange = React.useCallback(\n (value: RangeValue) => {\n if (Array.isArray(value) && value.length === 2) {\n column.setFilterValue(value);\n }\n },\n [column]\n );\n\n const onReset = React.useCallback(\n (event: React.MouseEvent) => {\n if (event.target instanceof HTMLDivElement) {\n event.stopPropagation();\n }\n column.setFilterValue(undefined);\n },\n [column]\n );\n\n const PopContent = (\n <div className=\"ds:flex ds:w-auto ds:flex-col ds:gap-4\">\n <div className=\"ds:flex ds:flex-col ds:gap-3\">\n <p className=\"ds:font-medium ds:leading-none ds:peer-disabled:cursor-not-allowed ds:peer-disabled:opacity-70\">\n {title}\n </p>\n <div className=\"ds:flex ds:items-center ds:gap-4\">\n <label htmlFor={`${id}-from`} className=\"ds:sr-only\">\n From\n </label>\n <div className=\"ds:relative\">\n <Input\n id={`${id}-from`}\n type=\"number\"\n aria-valuemin={min}\n aria-valuemax={max}\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n placeholder={min.toString()}\n min={min}\n max={max}\n value={range[0]?.toString()}\n onChange={onFromInputChange}\n className={cn(\"ds:h-8 ds:w-24\", unit && \"ds:pr-8\")}\n />\n {unit && (\n <span className=\"ds:absolute ds:top-0 ds:right-0 ds:bottom-0 ds:flex ds:items-center ds:rounded-r-md ds:bg-accent ds:px-2 ds:text-muted-foreground ds:text-sm\">\n {unit}\n </span>\n )}\n </div>\n <label htmlFor={`${id}-to`} className=\"ds:sr-only\">\n to\n </label>\n <div className=\"ds:relative\">\n <Input\n id={`${id}-to`}\n type=\"number\"\n aria-valuemin={min}\n aria-valuemax={max}\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n placeholder={max.toString()}\n min={min}\n max={max}\n value={range[1]?.toString()}\n onChange={onToInputChange}\n className={cn(\"ds:h-8 ds:w-24\", unit && \"ds:pr-8\")}\n />\n {unit && (\n <span className=\"ds:absolute ds:top-0 ds:right-0 ds:bottom-0 ds:flex ds:items-center ds:rounded-r-md ds:bg-accent ds:px-2 ds:text-muted-foreground ds:text-sm\">\n {unit}\n </span>\n )}\n </div>\n </div>\n <label htmlFor={`${id}-slider`} className=\"ds:sr-only\">\n {title} slider\n </label>\n <Slider\n id={`${id}-slider`}\n min={min}\n max={max}\n step={step}\n value={range}\n onValueChange={onSliderValueChange}\n />\n </div>\n <Button\n aria-label={`Clear ${title} filter`}\n variant=\"outline\"\n size=\"sm\"\n onClick={onReset}\n >\n Clear\n </Button>\n </div>\n );\n\n return (\n <Popover content={PopContent}>\n <Button variant=\"outline\" size=\"sm\" className=\"ds:border-dashed ds:font-normal\">\n {columnFilterValue ? (\n <div\n role=\"button\"\n aria-label={`Clear ${title} filter`}\n tabIndex={0}\n className=\"ds:rounded-sm ds:opacity-70 ds:transition-opacity ds:hover:opacity-100 ds:focus-visible:outline-none ds:focus-visible:ring-1 ds:focus-visible:ring-ring\"\n onClick={onReset}\n >\n <XCircle />\n </div>\n ) : (\n <PlusCircle />\n )}\n <span>{title}</span>\n {columnFilterValue ? (\n <>\n <Separator\n orientation=\"vertical\"\n className=\"ds:mx-0.5 ds:data-[orientation=vertical]:h-4\"\n />\n {formatValue(columnFilterValue[0])} -{\" \"}\n {formatValue(columnFilterValue[1])}\n {unit ? ` ${unit}` : \"\"}\n </>\n ) : null}\n </Button>\n </Popover>\n );\n}\n"],"names":["getIsValidRange","value","parseValuesAsNumbers","v","DataTableSliderFilter","column","title","id","React","columnFilterValue","defaultRange","unit","min","max","step","minValue","maxValue","values","facetMinValue","facetMaxValue","rangeSize","range","formatValue","onFromInputChange","event","numValue","onToInputChange","onSliderValueChange","onReset","PopContent","jsxs","jsx","Input","cn","Slider","Button","Popover","XCircle","PlusCircle","Fragment","Separator"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"data-table-column-header.cjs","sources":["../../../../src/components/Table/data-table-column-header.tsx"],"sourcesContent":["\"use client\";\n\nimport type { Column } from \"@tanstack/react-table\";\nimport {\n ChevronDown,\n ChevronsUpDown,\n ChevronUp,\n EyeOff,\n Filter,\n X,\n} from \"lucide-react\";\n\nimport { cn } from \"@dsui/ui\";\nimport DropdownMenu, {\n type DropdownMenuItem,\n} from \"../DropdownMenu/DropdownMenu\";\nimport { DataTableFilterPopover } from \"./TableFilter/data-table-filter-popover\";\nimport { Button } from \"../Button\";\n\nexport interface DataTableColumnHeaderProps<TData, TValue> {\n column: Column<TData, TValue>;\n label?: string;\n className?: string;\n}\n\nexport function DataTableColumnHeader<TData, TValue>({\n column,\n label,\n className,\n}: DataTableColumnHeaderProps<TData, TValue>) {\n const displayLabel =\n label ||\n (typeof column.columnDef.header === \"string\"\n ? column.columnDef.header\n : null);\n\n const hasActions =\n column.getCanSort() || column.getCanHide() || column.getCanFilter();\n\n if (!hasActions) {\n return <div className={cn(className)}>{displayLabel}</div>;\n }\n\n const sortTrigger = (\n <button className=\"ds:-ml-1.5 ds:flex ds:h-8 ds:items-center ds:gap-1.5 ds:rounded-md ds:px-2 ds:py-1.5 ds:hover:bg-accent ds:focus:outline-none ds:focus:ring-1 ds:focus:ring-ring ds:data-[state=open]:bg-accent ds:[&_svg]:size-4 ds:[&_svg]:shrink-0 ds:[&_svg]:text-muted-foreground\">\n {displayLabel}\n {column.getCanSort() &&\n (column.getIsSorted() === \"desc\" ? (\n <ChevronDown />\n ) : column.getIsSorted() === \"asc\" ? (\n <ChevronUp />\n ) : (\n <ChevronsUpDown />\n ))}\n </button>\n );\n\n const filterButton =\n column.getCanFilter() && column.columnDef.meta?.variant ? (\n <DataTableFilterPopover\n column={column}\n trigger={\n <Button\n variant=\"ghost\"\n className={cn(\n \"ds:hover:bg-accent ds:rounded ds:p-1\",\n column.getFilterValue() ? \"ds:text-primary\" : \"\"\n )}\n >\n <Filter className=\"ds:size-4\" />\n </Button>\n }\n />\n ) : null;\n\n const items: DropdownMenuItem[] = [];\n\n if (column.getCanSort()) {\n items.push({\n key: \"asc\",\n type: \"checkbox\",\n label: \"Asc\",\n icon: <ChevronUp />,\n checked: column.getIsSorted() === \"asc\",\n onClick: () => column.toggleSorting(false),\n className:\n \"ds:relative ds:pr-8 ds:pl-2 ds:[&>span:first-child]:right-2 ds:[&>span:first-child]:left-auto ds:[&_svg]:text-muted-foreground\",\n });\n items.push({\n key: \"desc\",\n type: \"checkbox\",\n label: \"Desc\",\n icon: <ChevronDown />,\n checked: column.getIsSorted() === \"desc\",\n onClick: () => column.toggleSorting(true),\n className:\n \"ds:relative ds:pr-8 ds:pl-2 ds:[&>span:first-child]:right-2 ds:[&>span:first-child]:left-auto ds:[&_svg]:text-muted-foreground\",\n });\n if (column.getIsSorted()) {\n items.push({\n key: \"reset\",\n type: \"item\",\n label: \"Reset\",\n icon: <X />,\n onClick: () => column.clearSorting(),\n className: \"ds:pl-2 ds:[&_svg]:text-muted-foreground\",\n });\n }\n }\n\n if (column.getCanHide()) {\n items.push({\n key: \"hide\",\n type: \"checkbox\",\n label: \"Hide\",\n icon: <EyeOff />,\n checked: !column.getIsVisible(),\n onClick: () => column.toggleVisibility(false),\n className:\n \"ds:relative ds:pr-8 ds:pl-2 ds:[&>span:first-child]:right-2 ds:[&>span:first-child]:left-auto ds:[&_svg]:text-muted-foreground\",\n });\n }\n\n return (\n <div className={cn(\"ds:flex ds:items-center ds:gap-1.5\", className)}>\n <DropdownMenu\n trigger={sortTrigger}\n items={items}\n align=\"start\"\n contentClassName=\"ds:w-28\"\n />\n {filterButton}\n </div>\n );\n}\n"],"names":["DataTableColumnHeader","column","label","className","displayLabel","cn","sortTrigger","jsxs","jsx","ChevronDown","ChevronUp","ChevronsUpDown","filterButton","DataTableFilterPopover","Button","Filter","items","X","EyeOff","DropdownMenu"],"mappings":"qrDAyBO,SAASA,EAAqC,CACnD,OAAAC,EACA,MAAAC,EACA,UAAAC,CACF,EAA8C,CAC5C,MAAMC,EACJF,IACC,OAAOD,EAAO,UAAU,QAAW,SAChCA,EAAO,UAAU,OACjB,MAKN,GAAI,EAFFA,EAAO,WAAA,GAAgBA,EAAO,WAAA,GAAgBA,EAAO,aAAA,GAGrD,aAAQ,MAAA,CAAI,UAAWI,EAAAA,GAAGF,CAAS,EAAI,SAAAC,EAAa,EAGtD,MAAME,EACJC,EAAAA,KAAC,SAAA,CAAO,UAAU,yQACf,SAAA,CAAAH,EACAH,EAAO,WAAA,IACLA,EAAO,YAAA,IAAkB,OACxBO,EAAAA,IAACC,EAAAA,YAAA,EAAY,EACXR,EAAO,gBAAkB,YAC1BS,EAAAA,UAAA,CAAA,CAAU,QAEVC,EAAAA,eAAA,EAAe,EAAA,EAEtB,EAGIC,EACJX,EAAO,aAAA,GAAkBA,EAAO,UAAU,MAAM,QAC9CO,EAAAA,IAACK,EAAAA,uBAAA,CACC,OAAAZ,EACA,QACEO,EAAAA,IAACM,EAAAA,QAAA,CACC,QAAQ,QACR,UAAWT,EAAAA,GACT,uCACAJ,EAAO,eAAA,EAAmB,kBAAoB,EAAA,EAGhD,SAAAO,EAAAA,IAACO,EAAAA,OAAA,CAAO,UAAU,WAAA,CAAY,CAAA,CAAA,CAChC,CAAA,EAGF,KAEAC,EAA4B,CAAA,EAElC,OAAIf,EAAO,eACTe,EAAM,KAAK,CACT,IAAK,MACL,KAAM,WACN,MAAO,MACP,WAAON,EAAAA,UAAA,EAAU,EACjB,QAAST,EAAO,YAAA,IAAkB,MAClC,QAAS,IAAMA,EAAO,cAAc,EAAK,EACzC,UACE,gIAAA,CACH,EACDe,EAAM,KAAK,CACT,IAAK,OACL,KAAM,WACN,MAAO,OACP,WAAOP,EAAAA,YAAA,EAAY,EACnB,QAASR,EAAO,YAAA,IAAkB,OAClC,QAAS,IAAMA,EAAO,cAAc,EAAI,EACxC,UACE,gIAAA,CACH,EACGA,EAAO,eACTe,EAAM,KAAK,CACT,IAAK,QACL,KAAM,OACN,MAAO,QACP,WAAOC,EAAAA,EAAA,EAAE,EACT,QAAS,IAAMhB,EAAO,aAAA,EACtB,UAAW,0CAAA,CACZ,GAIDA,EAAO,cACTe,EAAM,KAAK,CACT,IAAK,OACL,KAAM,WACN,MAAO,OACP,WAAOE,EAAAA,OAAA,EAAO,EACd,QAAS,CAACjB,EAAO,aAAA,EACjB,QAAS,IAAMA,EAAO,iBAAiB,EAAK,EAC5C,UACE,gIAAA,CACH,SAIA,MAAA,CAAI,UAAWI,EAAAA,GAAG,qCAAsCF,CAAS,EAChE,SAAA,CAAAK,EAAAA,IAACW,EAAAA,QAAA,CACC,QAASb,EACT,MAAAU,EACA,MAAM,QACN,iBAAiB,SAAA,CAAA,EAElBJ,CAAA,EACH,CAEJ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"data-table-pagination.cjs","sources":["../../../../src/components/Table/data-table-pagination.tsx"],"sourcesContent":["import type { Table } from \"@tanstack/react-table\";\n\nimport { Select } from \"../Select\";\nimport { Pagination } from \"../Pagination\";\nimport { cn } from \"@dsui/ui/index\";\n\nexport interface DataTablePaginationProps<TData> extends React.ComponentProps<\"div\"> {\n table: Table<TData>;\n pageSizeOptions?: number[];\n showPagination?: boolean;\n showPageSizeOptions?: boolean;\n showRowSelectionCount?: boolean;\n showPageInfo?: boolean;\n}\n\nexport function DataTablePagination<TData>({\n table,\n pageSizeOptions = [5, 10, 20, 30, 40, 50, 100],\n className,\n showPageInfo = false,\n showPageSizeOptions = false,\n showRowSelectionCount = false,\n showPagination = true,\n ...props\n}: DataTablePaginationProps<TData>) {\n return (\n <div\n className={cn(\n \"ds:flex ds:w-full ds:flex-col-reverse ds:items-center ds:justify-between ds:gap-4 ds:overflow-auto ds:p-1 ds:sm:flex-row ds:sm:gap-8\",\n className\n )}\n {...props}\n >\n <div className=\"ds:flex-1 ds:whitespace-nowrap ds:text-muted-foreground ds:text-sm\">\n {showRowSelectionCount && (\n <>\n {table.getFilteredSelectedRowModel().rows.length} of{\" \"}\n {table.getFilteredRowModel().rows.length} row(s) selected.\n </>\n )}\n </div>\n <div className=\"ds:flex ds:flex-col-reverse ds:items-center ds:gap-2 ds:sm:flex-row ds:sm:gap-2 ds:lg:gap-4\">\n {showPageInfo && (\n <div className=\"ds:flex ds:items-center ds:justify-center ds:font-medium ds:text-sm\">\n Page {table.getState().pagination.pageIndex + 1} of{\" \"}\n {table.getPageCount()}\n </div>\n )}\n\n {showPagination && (\n <Pagination\n total={table.getPageCount()}\n currentPage={table.getState().pagination.pageIndex + 1}\n onPageChange={(page) => table.setPageIndex(page - 1)}\n maxPages={3}\n previousText={false}\n nextText={false}\n jumpOnEllipsis\n showPreviousNext={true}\n />\n )}\n\n {showPageSizeOptions && (\n <Select\n value={`${table.getState().pagination.pageSize}`}\n onValueChange={(value) => {\n table.setPageSize(Number(value));\n }}\n options={pageSizeOptions.map((pageSize) => ({\n value: `${pageSize}`,\n label: `${pageSize} / page`,\n }))}\n />\n )}\n </div>\n </div>\n );\n}\n"],"names":["DataTablePagination","table","pageSizeOptions","className","showPageInfo","showPageSizeOptions","showRowSelectionCount","showPagination","props","jsxs","cn","jsx","Fragment","Pagination","page","Select","value","pageSize"],"mappings":"inDAeO,SAASA,EAA2B,CACzC,MAAAC,EACA,gBAAAC,EAAkB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAG,EAC7C,UAAAC,EACA,aAAAC,EAAe,GACf,oBAAAC,EAAsB,GACtB,sBAAAC,EAAwB,GACxB,eAAAC,EAAiB,GACjB,GAAGC,CACL,EAAoC,CAClC,OACEC,EAAAA,KAAC,MAAA,CACC,UAAWC,EAAAA,GACT,uIACAP,CAAA,EAED,GAAGK,EAEJ,SAAA,CAAAG,MAAC,MAAA,CAAI,UAAU,qEACZ,SAAAL,GACCG,EAAAA,KAAAG,WAAA,CACG,SAAA,CAAAX,EAAM,8BAA8B,KAAK,OAAO,MAAI,IACpDA,EAAM,sBAAsB,KAAK,OAAO,mBAAA,CAAA,CAC3C,CAAA,CAEJ,EACAQ,EAAAA,KAAC,MAAA,CAAI,UAAU,8FACZ,SAAA,CAAAL,GACCK,EAAAA,KAAC,MAAA,CAAI,UAAU,sEAAsE,SAAA,CAAA,QAC7ER,EAAM,SAAA,EAAW,WAAW,UAAY,EAAE,MAAI,IACnDA,EAAM,aAAA,CAAa,EACtB,EAGDM,GACCI,EAAAA,IAACE,EAAAA,WAAA,CACC,MAAOZ,EAAM,aAAA,EACb,YAAaA,EAAM,SAAA,EAAW,WAAW,UAAY,EACrD,aAAea,GAASb,EAAM,aAAaa,EAAO,CAAC,EACnD,SAAU,EACV,aAAc,GACd,SAAU,GACV,eAAc,GACd,iBAAkB,EAAA,CAAA,EAIrBT,GACCM,EAAAA,IAACI,EAAAA,QAAA,CACC,MAAO,GAAGd,EAAM,SAAA,EAAW,WAAW,QAAQ,GAC9C,cAAgBe,GAAU,CACxBf,EAAM,YAAY,OAAOe,CAAK,CAAC,CACjC,EACA,QAASd,EAAgB,IAAKe,IAAc,CAC1C,MAAO,GAAGA,CAAQ,GAClB,MAAO,GAAGA,CAAQ,SAAA,EAClB,CAAA,CAAA,CACJ,CAAA,CAEJ,CAAA,CAAA,CAAA,CAGN"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"data-table-toolbar.cjs","sources":["../../../../src/components/Table/data-table-toolbar.tsx"],"sourcesContent":["\"use client\";\n\nimport type { Column, Table } from \"@tanstack/react-table\";\nimport { PlusCircle, X, XCircle } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { DataTableFilterPopover } from \"./TableFilter/data-table-filter-popover\";\nimport {\n DataTableViewOptions,\n type DataTableViewOptionsProps,\n} from \"./data-table-view-options\";\nimport { Button } from \"../Button\";\nimport { cn } from \"@dsui/ui\";\n\nexport interface DataTableToolbarProps<TData>\n extends React.ComponentProps<\"div\"> {\n table: Table<TData>;\n showColumnFilters?: boolean;\n showColumnVisibilityToggle?: boolean;\n columnVisibilityOptions?: Omit<\n DataTableViewOptionsProps<TData>,\n \"table\" | \"align\"\n >;\n}\n\nexport function DataTableToolbar<TData>({\n table,\n children,\n className,\n showColumnFilters = false,\n showColumnVisibilityToggle = false,\n columnVisibilityOptions,\n ...props\n}: DataTableToolbarProps<TData>) {\n const isFiltered = table.getState().columnFilters.length > 0;\n\n const columns = React.useMemo(\n () => table.getAllColumns().filter((column) => column.getCanFilter()),\n [table]\n );\n\n const onReset = React.useCallback(() => {\n table.resetColumnFilters();\n }, [table]);\n\n return (\n <div\n role=\"toolbar\"\n aria-orientation=\"horizontal\"\n className={cn(\n \"ds:flex ds:w-full ds:items-start ds:justify-between ds:gap-2 ds:p-1\",\n className\n )}\n {...props}\n >\n {showColumnFilters ? (\n <div className=\"ds:flex ds:flex-1 ds:flex-wrap ds:items-center ds:justify-start ds:gap-2\">\n {columns.map((column) => (\n <DataTableToolbarFilter key={column.id} column={column} />\n ))}\n {isFiltered && (\n <Button\n aria-label=\"Reset filters\"\n variant=\"outline\"\n size=\"sm\"\n className=\"ds:border-dashed\"\n onClick={onReset}\n >\n <X />\n Reset\n </Button>\n )}\n </div>\n ) : (\n <div />\n )}\n <div className=\"ds:flex ds:items-center ds:gap-2\">\n {children}\n {showColumnVisibilityToggle && (\n <DataTableViewOptions\n table={table}\n align=\"end\"\n {...columnVisibilityOptions}\n />\n )}\n </div>\n </div>\n );\n}\ninterface DataTableToolbarFilterProps<TData> {\n column: Column<TData>;\n}\n\nfunction DataTableToolbarFilter<TData>({\n column,\n}: DataTableToolbarFilterProps<TData>) {\n const columnMeta = column.columnDef.meta;\n\n if (!columnMeta?.variant) return null;\n\n const hasFilterValue = column.getFilterValue() != null;\n const icon = hasFilterValue ? <XCircle /> : <PlusCircle />;\n\n const getTriggerLabel = () => {\n return columnMeta.label ?? column.id;\n };\n\n return (\n <DataTableFilterPopover\n column={column}\n trigger={\n <Button variant=\"outline\" size=\"sm\" className=\"ds:border-dashed\">\n {icon}\n {getTriggerLabel()}\n </Button>\n }\n />\n );\n}\n"],"names":["DataTableToolbar","table","children","className","showColumnFilters","showColumnVisibilityToggle","columnVisibilityOptions","props","isFiltered","columns","React","column","onReset","jsxs","cn","jsx","DataTableToolbarFilter","Button","X","DataTableViewOptions","columnMeta","icon","XCircle","PlusCircle","getTriggerLabel","DataTableFilterPopover"],"mappings":"88DAyBO,SAASA,EAAwB,CACtC,MAAAC,EACA,SAAAC,EACA,UAAAC,EACA,kBAAAC,EAAoB,GACpB,2BAAAC,EAA6B,GAC7B,wBAAAC,EACA,GAAGC,CACL,EAAiC,CAC/B,MAAMC,EAAaP,EAAM,SAAA,EAAW,cAAc,OAAS,EAErDQ,EAAUC,EAAM,QACpB,IAAMT,EAAM,gBAAgB,OAAQU,GAAWA,EAAO,cAAc,EACpE,CAACV,CAAK,CAAA,EAGFW,EAAUF,EAAM,YAAY,IAAM,CACtCT,EAAM,mBAAA,CACR,EAAG,CAACA,CAAK,CAAC,EAEV,OACEY,EAAAA,KAAC,MAAA,CACC,KAAK,UACL,mBAAiB,aACjB,UAAWC,EAAAA,GACT,sEACAX,CAAA,EAED,GAAGI,EAEH,SAAA,CAAAH,EACCS,EAAAA,KAAC,MAAA,CAAI,UAAU,2EACZ,SAAA,CAAAJ,EAAQ,IAAKE,GACZI,EAAAA,IAACC,GAAuC,OAAAL,CAAA,EAAXA,EAAO,EAAoB,CACzD,EACAH,GACCK,EAAAA,KAACI,EAAAA,QAAA,CACC,aAAW,gBACX,QAAQ,UACR,KAAK,KACL,UAAU,mBACV,QAASL,EAET,SAAA,CAAAG,EAAAA,IAACG,EAAAA,EAAA,EAAE,EAAE,OAAA,CAAA,CAAA,CAEP,CAAA,CAEJ,QAEC,MAAA,EAAI,EAEPL,EAAAA,KAAC,MAAA,CAAI,UAAU,mCACZ,SAAA,CAAAX,EACAG,GACCU,EAAAA,IAACI,EAAAA,qBAAA,CACC,MAAAlB,EACA,MAAM,MACL,GAAGK,CAAA,CAAA,CACN,CAAA,CAEJ,CAAA,CAAA,CAAA,CAGN,CAKA,SAASU,EAA8B,CACrC,OAAAL,CACF,EAAuC,CACrC,MAAMS,EAAaT,EAAO,UAAU,KAEpC,GAAI,CAACS,GAAY,QAAS,OAAO,KAGjC,MAAMC,EADiBV,EAAO,eAAA,GAAoB,KACpBI,MAACO,EAAAA,QAAA,CAAA,CAAQ,QAAMC,EAAAA,WAAA,EAAW,EAElDC,EAAkB,IACfJ,EAAW,OAAST,EAAO,GAGpC,OACEI,EAAAA,IAACU,EAAAA,uBAAA,CACC,OAAAd,EACA,eACGM,UAAA,CAAO,QAAQ,UAAU,KAAK,KAAK,UAAU,mBAC3C,SAAA,CAAAI,EACAG,EAAA,CAAgB,CAAA,CACnB,CAAA,CAAA,CAIR"}
|