@sth87/shadcn-design-system 0.1.9 → 0.2.1
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 +53 -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 +115 -99
- 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 +0 -1
- 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 +105 -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 +142 -126
- 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/Select.d.ts +4 -0
- package/dist/types/components/Select/Select.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/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 +4 -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 +4 -3
- 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":"data-table-view-options.cjs","sources":["../../../../src/components/Table/data-table-view-options.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n closestCenter,\n DndContext,\n type DragEndEvent,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n} from \"@dnd-kit/core\";\nimport {\n arrayMove,\n SortableContext,\n sortableKeyboardCoordinates,\n useSortable,\n verticalListSortingStrategy,\n} from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport type {\n Column,\n ColumnOrderState,\n ColumnPinningState,\n Table,\n} from \"@tanstack/react-table\";\nimport { Check, GripVertical, Settings2 } from \"lucide-react\";\nimport * as React from \"react\";\nimport { Button } from \"../Button\";\nimport { Checkbox } from \"../Checkbox\";\nimport Command, { type CommandItemType } from \"../Command/Command\";\nimport { Popover } from \"../Popover\";\nimport { cn } from \"@dsui/ui\";\n\nexport type DataTableViewOptionsVariant = \"command\" | \"draggable\";\n\nexport interface DataTableViewOptionsLabels {\n trigger?: React.ReactNode;\n searchPlaceholder?: string;\n selectAll?: React.ReactNode;\n reset?: React.ReactNode;\n}\n\nexport interface DataTableViewOptionsProps<TData> extends React.ComponentProps<\n typeof Popover\n> {\n table: Table<TData>;\n variant?: DataTableViewOptionsVariant;\n labels?: DataTableViewOptionsLabels;\n triggerIcon?: React.ReactNode;\n}\n\nexport function DataTableViewOptions<TData>({\n table,\n variant = \"command\",\n labels,\n triggerIcon = <Settings2 className=\"ds:text-muted-foreground\" />,\n trigger,\n content,\n contentClassName,\n ...props\n}: DataTableViewOptionsProps<TData>) {\n const columnOrder = table.getState().columnOrder;\n const columnPinning = table.getState().columnPinning;\n\n const columns = React.useMemo(\n () =>\n getOrderedTableColumns(table, columnOrder, columnPinning).filter(\n (column) =>\n typeof column.accessorFn !== \"undefined\" && column.getCanHide()\n ),\n [table, columnOrder, columnPinning]\n );\n\n const getColumnLabel = React.useCallback(\n (column: (typeof columns)[number]) =>\n column.columnDef.meta?.label ??\n (typeof column.columnDef.header === \"string\"\n ? column.columnDef.header\n : column.id),\n []\n );\n\n const sensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n })\n );\n\n const columnIds = React.useMemo(\n () => columns.map((column) => column.id),\n [columns]\n );\n\n const allColumnsVisible = columns.every((column) => column.getIsVisible());\n const someColumnsVisible = columns.some((column) => column.getIsVisible());\n\n const onToggleAll = React.useCallback(\n (checked: boolean) => {\n columns.forEach((column) => column.toggleVisibility(checked));\n },\n [columns]\n );\n\n const onDragEnd = React.useCallback(\n (event: DragEndEvent) => {\n const { active, over } = event;\n\n if (!over || active.id === over.id) return;\n\n const oldIndex = columnIds.indexOf(String(active.id));\n const newIndex = columnIds.indexOf(String(over.id));\n\n if (oldIndex === -1 || newIndex === -1) return;\n\n const orderedOptionIds = arrayMove(columnIds, oldIndex, newIndex);\n const optionIdSet = new Set(columnIds);\n const pendingOptionIds = [...orderedOptionIds];\n const nextColumnOrder = getOrderedTableColumns(table).map((column) =>\n optionIdSet.has(column.id)\n ? (pendingOptionIds.shift() ?? column.id)\n : column.id\n );\n const currentColumnPinning = table.getState().columnPinning;\n const nextColumnPinning = {\n ...currentColumnPinning,\n left: currentColumnPinning?.left?.filter((id) => !optionIdSet.has(id)),\n right: currentColumnPinning?.right?.filter(\n (id) => !optionIdSet.has(id)\n ),\n };\n\n table.setColumnOrder(nextColumnOrder);\n table.setColumnPinning(nextColumnPinning);\n },\n [columnIds, table]\n );\n\n const items: CommandItemType[] = [\n {\n type: \"group\",\n heading: \"\",\n items: columns.map((column) => ({\n type: \"item\" as const,\n onClick: () => column.toggleVisibility(!column.getIsVisible()),\n children: (\n <>\n <span className=\"ds:truncate\">{getColumnLabel(column)}</span>\n <Check\n className={cn(\n \"ds:ml-auto ds:size-4 ds:shrink-0\",\n column.getIsVisible() ? \"ds:opacity-100\" : \"ds:opacity-0\"\n )}\n />\n </>\n ),\n })),\n },\n ];\n\n const resolvedLabels = {\n trigger: labels?.trigger ?? \"View\",\n searchPlaceholder: labels?.searchPlaceholder ?? \"Search columns...\",\n selectAll: labels?.selectAll ?? \"Chọn tất cả\",\n reset: labels?.reset ?? \"Đặt lại\",\n };\n\n const defaultDraggableContent = (\n <div className=\"ds:flex ds:w-full ds:flex-col\">\n <div className=\"ds:flex ds:items-center ds:gap-3 ds:px-3 ds:py-3\">\n <Checkbox\n aria-label=\"Toggle all columns\"\n checked={\n allColumnsVisible\n ? true\n : someColumnsVisible\n ? \"indeterminate\"\n : false\n }\n onCheckedChange={(checked) => onToggleAll(checked === true)}\n />\n <span className=\"ds:text-sm ds:font-medium ds:text-foreground\">\n {resolvedLabels.selectAll}\n </span>\n </div>\n <div className=\"ds:mx-3 ds:h-px ds:bg-border\" />\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragEnd={onDragEnd}\n >\n <SortableContext\n items={columnIds}\n strategy={verticalListSortingStrategy}\n >\n <div className=\"ds:flex ds:max-h-80 ds:flex-col ds:overflow-y-auto ds:py-2\">\n {columns.map((column) => (\n <DataTableDraggableColumnOption\n key={column.id}\n id={column.id}\n label={getColumnLabel(column)}\n checked={column.getIsVisible()}\n onCheckedChange={(checked) =>\n column.toggleVisibility(checked === true)\n }\n />\n ))}\n </div>\n </SortableContext>\n </DndContext>\n <div className=\"ds:mx-3 ds:h-px ds:bg-border\" />\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"ds:mx-3 ds:my-2 ds:text-primary hover:ds:text-primary\"\n onClick={() => {\n table.resetColumnVisibility();\n table.resetColumnOrder();\n table.resetColumnPinning();\n }}\n >\n {resolvedLabels.reset}\n </Button>\n </div>\n );\n\n return (\n <Popover\n trigger={\n trigger ?? (\n <Button\n aria-label=\"Toggle columns\"\n role=\"combobox\"\n variant=\"outline\"\n size=\"sm\"\n className=\"ds:ml-auto ds:h-8 ds:font-normal ds:lg:flex\"\n >\n {triggerIcon}\n {resolvedLabels.trigger}\n </Button>\n )\n }\n content={\n content ??\n (variant === \"draggable\" ? (\n defaultDraggableContent\n ) : (\n <Command items={items} search={resolvedLabels.searchPlaceholder} />\n ))\n }\n contentClassName={cn(\n \"ds:p-0\",\n variant === \"draggable\" ? \"ds:w-72\" : \"ds:w-44\",\n contentClassName\n )}\n {...props}\n />\n );\n}\n\nfunction getOrderedTableColumns<TData>(\n table: Table<TData>,\n columnOrder: ColumnOrderState = table.getState().columnOrder,\n columnPinning: ColumnPinningState = table.getState().columnPinning\n) {\n const allColumns = table.getAllLeafColumns();\n const columnById = new Map(allColumns.map((column) => [column.id, column]));\n const columnIds = allColumns.map((column) => column.id);\n const order = columnOrder ?? [];\n const orderedIds = [\n ...order.filter((id) => columnById.has(id)),\n ...columnIds.filter((id) => !order.includes(id)),\n ];\n const pinning = columnPinning ?? {};\n const leftIds = (pinning.left ?? []).filter((id) => columnById.has(id));\n const rightIds = (pinning.right ?? []).filter((id) => columnById.has(id));\n const pinnedIds = new Set([...leftIds, ...rightIds]);\n const centerIds = orderedIds.filter((id) => !pinnedIds.has(id));\n\n return [...leftIds, ...centerIds, ...rightIds]\n .map((id) => columnById.get(id))\n .filter((column): column is Column<TData, unknown> => Boolean(column));\n}\n\ninterface DataTableDraggableColumnOptionProps {\n id: string;\n label: React.ReactNode;\n checked: boolean;\n onCheckedChange: React.ComponentProps<typeof Checkbox>[\"onCheckedChange\"];\n}\n\nfunction DataTableDraggableColumnOption({\n id,\n label,\n checked,\n onCheckedChange,\n}: DataTableDraggableColumnOptionProps) {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id });\n\n return (\n <div\n ref={setNodeRef}\n className={cn(\n \"ds:flex ds:min-h-11 ds:items-center ds:gap-3 ds:px-3 ds:text-sm ds:text-foreground\",\n isDragging && \"ds:bg-accent\"\n )}\n style={{\n transform: CSS.Transform.toString(transform),\n transition,\n }}\n >\n <button\n type=\"button\"\n className=\"ds:flex ds:size-5 ds:shrink-0 ds:cursor-grab ds:items-center ds:justify-center ds:text-muted-foreground active:ds:cursor-grabbing\"\n aria-label={`Reorder ${label}`}\n {...attributes}\n {...listeners}\n >\n <GripVertical className=\"ds:size-4\" />\n </button>\n <Checkbox\n aria-label={`Toggle ${label}`}\n checked={checked}\n onCheckedChange={onCheckedChange}\n />\n <span className=\"ds:min-w-0 ds:flex-1 ds:truncate ds:font-medium\">\n {label}\n </span>\n </div>\n );\n}\n"],"names":["DataTableViewOptions","table","variant","labels","triggerIcon","jsx","Settings2","trigger","content","contentClassName","props","columnOrder","columnPinning","columns","React","getOrderedTableColumns","column","getColumnLabel","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","sortableKeyboardCoordinates","columnIds","allColumnsVisible","someColumnsVisible","onToggleAll","checked","onDragEnd","event","active","over","oldIndex","newIndex","orderedOptionIds","arrayMove","optionIdSet","pendingOptionIds","nextColumnOrder","currentColumnPinning","nextColumnPinning","id","items","jsxs","Fragment","Check","cn","resolvedLabels","defaultDraggableContent","Checkbox","DndContext","closestCenter","SortableContext","verticalListSortingStrategy","DataTableDraggableColumnOption","Button","Popover","Command","allColumns","columnById","order","orderedIds","pinning","leftIds","rightIds","pinnedIds","centerIds","label","onCheckedChange","attributes","listeners","setNodeRef","transform","transition","isDragging","useSortable","CSS","GripVertical"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"data-table.cjs","sources":["../../../../src/components/Table/data-table.tsx"],"sourcesContent":["import { flexRender, type Table as TanstackTable } from \"@tanstack/react-table\";\nimport type * as React from \"react\";\n\nimport { DataTablePagination } from \"./data-table-pagination\";\nimport {\n cn,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@dsui/ui\";\nimport { getCommonPinningStyles } from \"@/utils/data-table\";\nimport { DataTableColumnHeader } from \"./data-table-column-header\";\n\nexport interface DataTableProps<TData> extends React.ComponentProps<\"div\"> {\n table: TanstackTable<TData>;\n actionBar?: React.ReactNode;\n pagination?:\n | boolean\n | Omit<React.ComponentProps<typeof DataTablePagination<TData>>, \"table\">;\n sticky?: boolean | { offsetHeader?: number; offsetScroll?: number };\n bordered?: boolean;\n loading?: boolean;\n footer?: (currentPageData: TData[]) => React.ReactNode;\n}\n\nexport function DataTable<TData>({\n table,\n actionBar,\n children,\n className,\n pagination = true,\n sticky,\n bordered,\n loading,\n footer,\n ...props\n}: DataTableProps<TData>) {\n return (\n <div\n className={cn(\n \"ds:flex ds:w-full ds:flex-col ds:gap-2.5 ds:relative\",\n className\n )}\n {...props}\n >\n {children}\n {loading && (\n <div className=\"ds:absolute ds:inset-0 ds:bg-background/50 ds:flex ds:items-center ds:justify-center ds:z-20\">\n Loading...\n </div>\n )}\n <div\n className={cn(\n \"ds:overflow-auto ds:rounded-md ds:border ds:border-border\",\n loading && \"ds:blur-sm\"\n )}\n >\n <Table>\n <TableHeader>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => (\n <TableHead\n key={header.id}\n colSpan={header.colSpan}\n style={{\n ...getCommonPinningStyles({ column: header.column }),\n }}\n >\n {header.isPlaceholder ? null : header.column.columnDef\n .header ? (\n typeof header.column.columnDef.header === \"function\" ? (\n flexRender(\n header.column.columnDef.header,\n header.getContext()\n )\n ) : (\n <DataTableColumnHeader column={header.column} />\n )\n ) : null}\n </TableHead>\n ))}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n <TableRow\n key={row.id}\n data-state={row.getIsSelected() && \"selected\"}\n >\n {row.getVisibleCells().map((cell) => (\n <TableCell\n key={cell.id}\n style={{\n ...getCommonPinningStyles({ column: cell.column }),\n }}\n >\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext()\n )}\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n <TableRow>\n <TableCell\n colSpan={table.getAllColumns().length}\n className=\"ds:h-24 ds:text-center\"\n >\n No results.\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n {footer && (\n <tfoot>\n <TableRow>\n <TableCell colSpan={table.getAllColumns().length}>\n {footer(table.getRowModel().rows.map((row) => row.original))}\n </TableCell>\n </TableRow>\n </tfoot>\n )}\n </Table>\n </div>\n <div className=\"ds:flex ds:flex-col ds:gap-2.5\">\n {pagination && (\n <DataTablePagination\n table={table}\n {...(pagination === true ? {} : pagination)}\n />\n )}\n {actionBar &&\n table.getFilteredSelectedRowModel().rows.length > 0 &&\n actionBar}\n </div>\n </div>\n );\n}\n"],"names":["DataTable","table","actionBar","children","className","pagination","sticky","bordered","loading","footer","props","jsxs","cn","jsx","Table","TableHeader","headerGroup","TableRow","header","TableHead","getCommonPinningStyles","flexRender","DataTableColumnHeader","TableBody","row","cell","TableCell","DataTablePagination"],"mappings":"kwDA4BO,SAASA,EAAiB,CAAA,MAC/BC,EACA,UAAAC,EACA,SAAAC,EACA,UAAAC,EACA,WAAAC,EAAa,GACb,OAAAC,EACA,SAAAC,EACA,QAAAC,EACA,OAAAC,EACA,GAAGC,CACL,EAA0B,CACxB,OACEC,EAAAA,KAAC,MAAA,CACC,UAAWC,EAAAA,GACT,uDACAR,CAAA,EAED,GAAGM,EAEH,SAAA,CAAAP,EACAK,GACCK,EAAAA,IAAC,MAAA,CAAI,UAAU,+FAA+F,SAAA,aAE9G,EAEFA,EAAAA,IAAC,MAAA,CACC,UAAWD,EAAAA,GACT,4DACAJ,GAAW,YAAA,EAGb,gBAACM,QAAA,CACC,SAAA,CAAAD,EAAAA,IAACE,EAAAA,YAAA,CACE,SAAAd,EAAM,gBAAA,EAAkB,IAAKe,GAC5BH,EAAAA,IAACI,EAAAA,SAAA,CACE,SAAAD,EAAY,QAAQ,IAAKE,GACxBL,EAAAA,IAACM,EAAAA,UAAA,CAEC,QAASD,EAAO,QAChB,MAAO,CACL,GAAGE,yBAAuB,CAAE,OAAQF,EAAO,OAAQ,CAAA,EAGpD,SAAAA,EAAO,cAAgB,KAAOA,EAAO,OAAO,UACxC,OACH,OAAOA,EAAO,OAAO,UAAU,QAAW,WACxCG,EAAAA,WACEH,EAAO,OAAO,UAAU,OACxBA,EAAO,WAAA,CAAW,EAGpBL,EAAAA,IAACS,EAAAA,sBAAA,CAAsB,OAAQJ,EAAO,OAAQ,EAE9C,IAAA,EAhBCA,EAAO,EAAA,CAkBf,GArBYF,EAAY,EAsB3B,CACD,CAAA,CACH,EACAH,EAAAA,IAACU,EAAAA,UAAA,CACE,SAAAtB,EAAM,YAAA,EAAc,MAAM,OACzBA,EAAM,YAAA,EAAc,KAAK,IAAKuB,GAC5BX,EAAAA,IAACI,EAAAA,SAAA,CAEC,aAAYO,EAAI,cAAA,GAAmB,WAElC,SAAAA,EAAI,gBAAA,EAAkB,IAAKC,GAC1BZ,EAAAA,IAACa,EAAAA,UAAA,CAEC,MAAO,CACL,GAAGN,yBAAuB,CAAE,OAAQK,EAAK,OAAQ,CAAA,EAGlD,SAAAJ,EAAAA,WACCI,EAAK,OAAO,UAAU,KACtBA,EAAK,WAAA,CAAW,CAClB,EARKA,EAAK,EAAA,CAUb,CAAA,EAfID,EAAI,EAAA,CAiBZ,EAEDX,EAAAA,IAACI,WAAA,CACC,SAAAJ,EAAAA,IAACa,EAAAA,UAAA,CACC,QAASzB,EAAM,cAAA,EAAgB,OAC/B,UAAU,yBACX,SAAA,aAAA,CAAA,EAGH,CAAA,CAEJ,EACCQ,GACCI,EAAAA,IAAC,QAAA,CACC,SAAAA,EAAAA,IAACI,EAAAA,SAAA,CACC,eAACS,EAAAA,UAAA,CAAU,QAASzB,EAAM,cAAA,EAAgB,OACvC,WAAOA,EAAM,YAAA,EAAc,KAAK,IAAKuB,GAAQA,EAAI,QAAQ,CAAC,CAAA,CAC7D,CAAA,CACF,CAAA,CACF,CAAA,CAAA,CAEJ,CAAA,CAAA,EAEFb,EAAAA,KAAC,MAAA,CAAI,UAAU,iCACZ,SAAA,CAAAN,GACCQ,EAAAA,IAACc,EAAAA,oBAAA,CAAA,MACC1B,EACC,GAAII,IAAe,GAAO,GAAKA,CAAA,CAAA,EAGnCH,GACCD,EAAM,4BAAA,EAA8B,KAAK,OAAS,GAClDC,CAAA,CAAA,CACJ,CAAA,CAAA,CAAA,CAGN"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"select-column.cjs","sources":["../../../../src/components/Table/select-column.tsx"],"sourcesContent":["import type {\n CellContext,\n ColumnDef,\n HeaderContext,\n} from \"@tanstack/react-table\";\nimport { Checkbox } from \"@/components/Checkbox\";\n\nfunction createSelectColumn<TData>(\n props?: Partial<ColumnDef<TData>>\n): ColumnDef<TData> {\n return {\n id: \"select\",\n header: ({ table }: HeaderContext<TData, unknown>) => (\n <div className=\"ds:flex ds:items-center ds:justify-center\">\n <Checkbox\n checked={\n table.getIsAllPageRowsSelected() ||\n (table.getIsSomePageRowsSelected() && \"indeterminate\")\n }\n onCheckedChange={(value) => table.toggleAllPageRowsSelected(!!value)}\n aria-label=\"Select all\"\n />\n </div>\n ),\n cell: ({ row }: CellContext<TData, unknown>) => (\n <div className=\"ds:flex ds:items-center ds:justify-center\">\n <Checkbox\n checked={row.getIsSelected()}\n onCheckedChange={(value) => row.toggleSelected(!!value)}\n aria-label=\"Select row\"\n />\n </div>\n ),\n size: 36,\n enableSorting: false,\n enableHiding: false,\n enableColumnFilter: false,\n ...props,\n };\n}\n\nexport const selectColumn = createSelectColumn;\n"],"names":["createSelectColumn","props","table","jsx","Checkbox","value","row","selectColumn"],"mappings":"2JAOA,SAASA,EACPC,EACkB,CAClB,MAAO,CACL,GAAI,SACJ,OAAQ,CAAC,CAAE,MAAAC,CAAA,IACTC,EAAAA,IAAC,MAAA,CAAI,UAAU,4CACb,SAAAA,EAAAA,IAACC,EAAAA,QAAA,CACC,QACEF,EAAM,yBAAA,GACLA,EAAM,6BAA+B,gBAExC,gBAAkBG,GAAUH,EAAM,0BAA0B,CAAC,CAACG,CAAK,EACnE,aAAW,YAAA,CAAA,EAEf,EAEF,KAAM,CAAC,CAAE,IAAAC,CAAA,IACPH,EAAAA,IAAC,MAAA,CAAI,UAAU,4CACb,SAAAA,EAAAA,IAACC,EAAAA,QAAA,CACC,QAASE,EAAI,cAAA,EACb,gBAAkBD,GAAUC,EAAI,eAAe,CAAC,CAACD,CAAK,EACtD,aAAW,YAAA,CAAA,EAEf,EAEF,KAAM,GACN,cAAe,GACf,aAAc,GACd,mBAAoB,GACpB,GAAGJ,CAAA,CAEP,CAEO,MAAMM,EAAeP"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Tabs.cjs","sources":["../../../../src/components/Tabs/Tabs.tsx"],"sourcesContent":["import React from \"react\";\nimport {\n Tabs as STabs,\n TabsList as STabsList,\n TabsTrigger as STabsTrigger,\n TabsContent as STabsContent,\n} from \"@dsui/ui/components/tabs\";\nimport { motion } from \"motion/react\";\nimport { cn } from \"@dsui/ui/lib/utils\";\nimport { ScrollArea, ScrollBar } from \"../ScrollArea/ScrollArea\";\nimport { Popover } from \"../Popover\";\nimport { MoreHorizontal } from \"lucide-react\";\nimport type {\n TabAlignment,\n TabColor,\n TabItem,\n TabOverflowMode,\n TabPosition,\n TabSize,\n TabVariant,\n} from \"./types\";\nimport {\n alignmentClasses,\n getColorClasses,\n getEnclosedFillTriggerClasses,\n getEnclosedTriggerClasses,\n getListBorderClasses,\n getUnderlinedTriggerClasses,\n positionClasses,\n sizeClasses,\n variantClasses,\n} from \"./classes\";\n\nexport interface TabsProps {\n // Core props\n items: TabItem[];\n defaultActiveKey?: string;\n activeKey?: string;\n onChange?: (key: string) => void;\n\n // Layout\n tabPosition?: TabPosition;\n size?: TabSize;\n alignment?: TabAlignment;\n fullWidth?: boolean;\n\n // Overflow handling\n overflowMode?: TabOverflowMode;\n\n // Styling\n variant?: TabVariant;\n color?: TabColor;\n className?: string;\n tabListClassName?: string;\n tabContentClassName?: string;\n tabTriggerClassName?: string;\n}\n\nconst Tabs = React.forwardRef<HTMLDivElement, TabsProps>((props, ref) => {\n const {\n items,\n defaultActiveKey,\n activeKey,\n onChange,\n tabPosition = \"top\",\n size = \"md\",\n alignment = \"start\",\n fullWidth = false,\n overflowMode = \"scroll\",\n variant = \"solid\",\n color = \"muted\",\n className,\n tabListClassName,\n tabContentClassName,\n tabTriggerClassName,\n } = props;\n\n const tabRefs = React.useRef<(HTMLButtonElement | null)[]>([]);\n const tabsListRef = React.useRef<HTMLDivElement | null>(null);\n const containerRef = React.useRef<HTMLDivElement | null>(null);\n const scrollAreaRef = React.useRef<HTMLDivElement | null>(null);\n\n const [indicatorStyle, setIndicatorStyle] = React.useState<{\n left: number;\n width: number;\n top: number;\n height: number;\n }>({\n left: 0,\n width: 0,\n top: 0,\n height: 0,\n });\n\n const [internalActiveKey, setInternalActiveKey] = React.useState<\n string | undefined\n >(activeKey || defaultActiveKey || items[0]?.key);\n\n // Overflow state management\n const [isOverflowing, setIsOverflowing] = React.useState(false);\n const [visibleTabsCount, setVisibleTabsCount] = React.useState(items.length);\n const [dropdownOpen, setDropdownOpen] = React.useState(false);\n\n // Fade state management for scroll position\n const [showStartFade, setShowStartFade] = React.useState(false);\n const [showEndFade, setShowEndFade] = React.useState(false);\n\n const currentActiveKey =\n activeKey !== undefined ? activeKey : internalActiveKey;\n\n const isVertical = tabPosition === \"left\" || tabPosition === \"right\";\n\n // Check if tabs are overflowing (for scroll and fade modes)\n React.useLayoutEffect(() => {\n if (!overflowMode || overflowMode === \"dropdown\") return;\n\n const checkOverflow = () => {\n const container = containerRef.current;\n const listElement = tabsListRef.current;\n\n if (!container || !listElement) return;\n\n const containerSize = isVertical\n ? container.clientHeight\n : container.clientWidth;\n const listSize = isVertical\n ? listElement.scrollHeight\n : listElement.scrollWidth;\n\n const hasOverflow = listSize > containerSize;\n setIsOverflowing(hasOverflow);\n };\n\n // Initial check\n checkOverflow();\n\n // Use ResizeObserver for responsive updates\n const resizeObserver = new ResizeObserver(checkOverflow);\n if (containerRef.current) {\n resizeObserver.observe(containerRef.current);\n }\n if (tabsListRef.current) {\n resizeObserver.observe(tabsListRef.current);\n }\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [items, overflowMode, isVertical]);\n\n // Calculate visible tabs for dropdown mode\n React.useLayoutEffect(() => {\n if (overflowMode !== \"dropdown\") return;\n\n const calculateVisibleTabs = () => {\n const container = containerRef.current;\n if (!container) return;\n\n const containerSize = isVertical\n ? container.clientHeight\n : container.clientWidth;\n\n // Calculate how many tabs can fit including the [...] button\n let totalSize = 0;\n const dropdownButtonSize = 48; // Size of [...] button with gap\n const listPadding = 6; // p-[3px] = 6px total padding for some variants\n const gap =\n variant === \"enclosed-fill\" ||\n variant === \"bordered\" ||\n variant === \"pills\" ||\n variant === \"pill-stroke\" ||\n variant === \"text\" ||\n variant === \"outline\"\n ? 4\n : 0; // gap-1 = 4px\n\n let count = 0;\n for (let i = 0; i < tabRefs.current.length; i++) {\n const tab = tabRefs.current[i];\n if (!tab) break;\n\n const tabSize = isVertical ? tab.offsetHeight : tab.offsetWidth;\n const withGap = i > 0 ? gap : 0;\n\n // Check if we can fit this tab + [...] button if there are more tabs\n const hasMoreTabs = i < tabRefs.current.length - 1;\n const requiredSize =\n totalSize +\n tabSize +\n withGap +\n (hasMoreTabs ? dropdownButtonSize : 0) +\n listPadding;\n\n if (requiredSize <= containerSize) {\n totalSize += tabSize + withGap;\n count++;\n } else {\n break;\n }\n }\n\n // Only show overflow if we can't fit all tabs\n const hasHiddenTabs = count < items.length;\n setIsOverflowing(hasHiddenTabs);\n setVisibleTabsCount(Math.max(1, count));\n };\n\n // Initial calculation\n calculateVisibleTabs();\n\n // Use ResizeObserver for responsive updates\n const resizeObserver = new ResizeObserver(calculateVisibleTabs);\n if (containerRef.current) {\n resizeObserver.observe(containerRef.current);\n }\n\n // Also observe each tab for size changes\n tabRefs.current.forEach((tab) => {\n if (tab) resizeObserver.observe(tab);\n });\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [items, overflowMode, isVertical, variant]);\n\n React.useLayoutEffect(() => {\n const activeIndex = items.findIndex((tab) => tab.key === currentActiveKey);\n const activeTabElement = tabRefs.current[activeIndex];\n const listElement = tabsListRef.current;\n\n if (activeTabElement && listElement) {\n const listRect = listElement.getBoundingClientRect();\n const tabRect = activeTabElement.getBoundingClientRect();\n\n // Calculate relative position within the list\n const left = tabRect.left - listRect.left;\n const top = tabRect.top - listRect.top;\n\n setIndicatorStyle({\n left: left,\n width: tabRect.width,\n top: top,\n height: tabRect.height,\n });\n\n // Auto-scroll to active tab in fade mode\n if (overflowMode === \"fade\" && scrollAreaRef.current) {\n const scrollAreaViewport = scrollAreaRef.current.querySelector(\n \"[data-radix-scroll-area-viewport]\"\n ) as HTMLElement;\n\n if (scrollAreaViewport) {\n const viewportRect = scrollAreaViewport.getBoundingClientRect();\n const tabRectInViewport = activeTabElement.getBoundingClientRect();\n const fadeWidth = 96; // 24 * 4 = 96px (w-24 class)\n\n if (isVertical) {\n // Scroll vertically\n const scrollTop = scrollAreaViewport.scrollTop;\n const scrollHeight = scrollAreaViewport.scrollHeight;\n const viewportHeight = viewportRect.height;\n const tabTop = tabRectInViewport.top - viewportRect.top + scrollTop;\n const tabHeight = tabRectInViewport.height;\n\n // If it's the first tab, scroll to the very top\n if (activeIndex === 0) {\n scrollAreaViewport.scrollTo({\n top: 0,\n behavior: \"smooth\",\n });\n }\n // If it's the last tab, scroll to the very bottom\n else if (activeIndex === items.length - 1) {\n scrollAreaViewport.scrollTo({\n top: scrollHeight - viewportHeight,\n behavior: \"smooth\",\n });\n }\n // For middle tabs, try to center them with padding to avoid fade\n else {\n const targetScrollTop =\n tabTop - viewportHeight / 2 + tabHeight / 2;\n const maxScroll = scrollHeight - viewportHeight;\n\n // Ensure we don't scroll beyond bounds and leave space for fade\n const clampedScroll = Math.max(\n fadeWidth / 2,\n Math.min(targetScrollTop, maxScroll - fadeWidth / 2)\n );\n\n scrollAreaViewport.scrollTo({\n top: clampedScroll,\n behavior: \"smooth\",\n });\n }\n } else {\n // Scroll horizontally\n const scrollLeft = scrollAreaViewport.scrollLeft;\n const scrollWidth = scrollAreaViewport.scrollWidth;\n const viewportWidth = viewportRect.width;\n const tabLeft =\n tabRectInViewport.left - viewportRect.left + scrollLeft;\n const tabWidth = tabRectInViewport.width;\n\n // If it's the first tab, scroll to the very left\n if (activeIndex === 0) {\n scrollAreaViewport.scrollTo({\n left: 0,\n behavior: \"smooth\",\n });\n }\n // If it's the last tab, scroll to the very right\n else if (activeIndex === items.length - 1) {\n scrollAreaViewport.scrollTo({\n left: scrollWidth - viewportWidth,\n behavior: \"smooth\",\n });\n }\n // For middle tabs, try to center them with padding to avoid fade\n else {\n const targetScrollLeft =\n tabLeft - viewportWidth / 2 + tabWidth / 2;\n const maxScroll = scrollWidth - viewportWidth;\n\n // Ensure we don't scroll beyond bounds and leave space for fade\n const clampedScroll = Math.max(\n fadeWidth / 2,\n Math.min(targetScrollLeft, maxScroll - fadeWidth / 2)\n );\n\n scrollAreaViewport.scrollTo({\n left: clampedScroll,\n behavior: \"smooth\",\n });\n }\n }\n }\n }\n }\n }, [currentActiveKey, items, isVertical, overflowMode]);\n\n // Handle scroll events for fade mode to show/hide fade gradients\n React.useEffect(() => {\n if (overflowMode !== \"fade\" || !scrollAreaRef.current) return;\n\n const scrollAreaViewport = scrollAreaRef.current.querySelector(\n \"[data-radix-scroll-area-viewport]\"\n ) as HTMLElement;\n\n if (!scrollAreaViewport) return;\n\n let rafId: number | null = null;\n\n const handleScroll = () => {\n // Cancel previous frame if still pending\n if (rafId !== null) {\n cancelAnimationFrame(rafId);\n }\n\n // Use requestAnimationFrame for smooth updates\n rafId = requestAnimationFrame(() => {\n const threshold = 5; // Small threshold to account for floating point precision\n\n if (isVertical) {\n const scrollTop = scrollAreaViewport.scrollTop;\n const scrollHeight = scrollAreaViewport.scrollHeight;\n const clientHeight = scrollAreaViewport.clientHeight;\n\n setShowStartFade(scrollTop > threshold);\n setShowEndFade(scrollTop < scrollHeight - clientHeight - threshold);\n } else {\n const scrollLeft = scrollAreaViewport.scrollLeft;\n const scrollWidth = scrollAreaViewport.scrollWidth;\n const clientWidth = scrollAreaViewport.clientWidth;\n\n setShowStartFade(scrollLeft > threshold);\n setShowEndFade(scrollLeft < scrollWidth - clientWidth - threshold);\n }\n\n // Update indicator position smoothly during scroll\n const activeIndex = items.findIndex(\n (tab) => tab.key === currentActiveKey\n );\n const activeTabElement = tabRefs.current[activeIndex];\n const listElement = tabsListRef.current;\n\n if (activeTabElement && listElement) {\n const listRect = listElement.getBoundingClientRect();\n const tabRect = activeTabElement.getBoundingClientRect();\n\n const left = tabRect.left - listRect.left;\n const top = tabRect.top - listRect.top;\n\n setIndicatorStyle({\n left: left,\n width: tabRect.width,\n top: top,\n height: tabRect.height,\n });\n }\n\n rafId = null;\n });\n };\n\n // Initial check\n handleScroll();\n\n // Add scroll listener\n scrollAreaViewport.addEventListener(\"scroll\", handleScroll, {\n passive: true,\n });\n\n // Recheck on resize\n const resizeObserver = new ResizeObserver(handleScroll);\n resizeObserver.observe(scrollAreaViewport);\n\n return () => {\n if (rafId !== null) {\n cancelAnimationFrame(rafId);\n }\n scrollAreaViewport.removeEventListener(\"scroll\", handleScroll);\n resizeObserver.disconnect();\n };\n }, [overflowMode, isVertical, isOverflowing, items, currentActiveKey]);\n\n // Enable horizontal scrolling with mouse wheel for horizontal tabs in scroll/fade modes\n React.useEffect(() => {\n if (overflowMode !== \"scroll\" && overflowMode !== \"fade\") return;\n if (isVertical) return; // Only for horizontal tabs\n\n const scrollAreaViewport = scrollAreaRef.current?.querySelector(\n \"[data-radix-scroll-area-viewport]\"\n ) as HTMLElement;\n\n if (!scrollAreaViewport) return;\n\n const handleWheel = (e: WheelEvent) => {\n if (e.deltaY !== 0) {\n e.preventDefault();\n scrollAreaViewport.scrollLeft += e.deltaY * 2;\n }\n };\n\n scrollAreaViewport.addEventListener(\"wheel\", handleWheel, { passive: false });\n\n return () => {\n scrollAreaViewport.removeEventListener(\"wheel\", handleWheel);\n };\n }, [overflowMode, isVertical]);\n\n const handleValueChange = (key: string) => {\n if (activeKey === undefined) {\n setInternalActiveKey(key);\n }\n onChange?.(key);\n };\n\n const orientation = isVertical ? \"vertical\" : \"horizontal\";\n\n // Get variant classes\n const variantConfig = variantClasses[variant];\n const listVariantClass =\n variantConfig.list[isVertical ? \"vertical\" : \"horizontal\"];\n\n // Get trigger variant class based on variant type\n let triggerVariantClass =\n variantConfig.trigger[isVertical ? \"vertical\" : \"horizontal\"];\n\n // For underlined and enclosed variants, use dynamic classes based on position\n if (variant === \"underlined\") {\n triggerVariantClass = getUnderlinedTriggerClasses(tabPosition);\n } else if (variant === \"enclosed\") {\n triggerVariantClass = getEnclosedTriggerClasses(tabPosition);\n } else if (variant === \"enclosed-fill\") {\n triggerVariantClass = getEnclosedFillTriggerClasses(tabPosition);\n }\n\n // Get color classes based on variant\n const triggerColorClass = getColorClasses(variant, color);\n const listBorderClass = getListBorderClasses(variant, color, tabPosition);\n\n // Determine which tabs to show based on overflow mode\n const visibleTabs =\n overflowMode === \"dropdown\" && isOverflowing\n ? items.slice(0, visibleTabsCount)\n : items;\n\n const overflowTabs =\n overflowMode === \"dropdown\" && isOverflowing\n ? items.slice(visibleTabsCount)\n : overflowMode === \"fade\" && isOverflowing\n ? items\n : [];\n\n // For dropdown mode: show [...] button only if there are hidden tabs\n const showDropdownButton =\n overflowMode === \"dropdown\" && isOverflowing && overflowTabs.length > 0;\n\n // Check if active tab is in overflow (hidden) tabs\n const isActiveTabInOverflow =\n overflowMode === \"dropdown\" &&\n isOverflowing &&\n overflowTabs.some((tab) => tab.key === currentActiveKey);\n\n const renderTabTriggers = (tabItems: TabItem[], startIndex = 0) => (\n <>\n {tabItems.map((item, index) => {\n const actualIndex = startIndex + index;\n return (\n <STabsTrigger\n key={item.key}\n ref={(el) => {\n tabRefs.current[actualIndex] = el;\n }}\n value={item.key}\n disabled={item.disabled}\n className={cn(\n triggerVariantClass,\n // Apply styles based on variant\n {\n // For sliding indicator variants, remove default background\n \"ds:relative ds:z-10 ds:bg-transparent ds:data-[state=active]:bg-transparent\":\n variant === \"solid\" ||\n variant === \"bordered\" ||\n variant === \"pills\",\n // Apply text color for active state with sliding indicator\n \"ds:data-[state=active]:text-primary-foreground\":\n (variant === \"bordered\" || variant === \"pills\") &&\n color === \"primary\",\n \"ds:data-[state=active]:text-secondary-foreground\":\n (variant === \"bordered\" || variant === \"pills\") &&\n color === \"secondary\",\n \"ds:data-[state=active]:text-muted-foreground\":\n (variant === \"bordered\" || variant === \"pills\") &&\n color === \"muted\",\n \"ds:data-[state=active]:text-accent-foreground\":\n (variant === \"bordered\" || variant === \"pills\") &&\n color === \"accent\",\n \"ds:data-[state=active]:text-destructive-foreground\":\n (variant === \"bordered\" || variant === \"pills\") &&\n color === \"destructive\",\n \"ds:data-[state=active]:text-white\":\n (variant === \"bordered\" || variant === \"pills\") &&\n (color === \"success\" || color === \"warning\"),\n \"ds:flex-1\": fullWidth && !isVertical,\n \"ds:w-full ds:justify-start\": isVertical,\n },\n // For other variants, apply normal color classes\n !(\n variant === \"solid\" ||\n variant === \"bordered\" ||\n variant === \"pills\"\n ) && triggerColorClass,\n item.className,\n tabTriggerClassName\n )}\n >\n {item.icon && (\n <span className=\"ds:mr-2 ds:inline-flex ds:items-center\">{item.icon}</span>\n )}\n {item.label}\n </STabsTrigger>\n );\n })}\n </>\n );\n\n const renderTabsList = () => {\n const tabsListContent = (\n <STabsList\n ref={tabsListRef}\n className={cn(\n positionClasses[tabPosition].list,\n sizeClasses[size][isVertical ? \"vertical\" : \"horizontal\"],\n listVariantClass,\n listBorderClass,\n tabListClassName,\n \"ds:relative\",\n {\n \"ds:overflow-hidden\": overflowMode === \"fade\" && isOverflowing,\n \"ds:max-w-full\": overflowMode === \"fade\", // Limit width for fade mode\n // For overflow modes, allow natural width expansion\n \"ds:w-auto\": overflowMode === \"dropdown\" || overflowMode === \"fade\",\n }\n )}\n >\n {renderTabTriggers(visibleTabs)}\n\n {/* Sliding indicator for underlined variant */}\n {variant === \"underlined\" &&\n indicatorStyle.width > 0 &&\n !isActiveTabInOverflow && (\n <motion.div\n className={cn(\"ds:absolute ds:rounded-full ds:z-10\", {\n // Horizontal positions (top/bottom)\n \"ds:h-0.5 ds:bottom-0\": tabPosition === \"top\",\n \"ds:h-0.5 ds:top-0\": tabPosition === \"bottom\",\n // Vertical positions (left/right)\n \"ds:w-0.5 ds:right-0\": tabPosition === \"left\",\n \"ds:w-0.5 ds:left-0\": tabPosition === \"right\",\n // Colors\n \"ds:bg-primary\": color === \"primary\",\n \"ds:bg-secondary\": color === \"secondary\",\n \"ds:bg-muted-foreground\": color === \"muted\",\n \"ds:bg-accent\": color === \"accent\",\n \"ds:bg-destructive\": color === \"destructive\",\n \"ds:bg-success\": color === \"success\",\n \"ds:bg-warning\": color === \"warning\",\n })}\n animate={\n isVertical\n ? {\n top: indicatorStyle.top,\n height: indicatorStyle.height,\n }\n : {\n left: indicatorStyle.left,\n width: indicatorStyle.width,\n }\n }\n transition={{\n type: \"spring\",\n stiffness: 300,\n damping: 30,\n }}\n />\n )}\n\n {/* Sliding indicator for solid, bordered, pills variants */}\n {(variant === \"solid\" ||\n variant === \"bordered\" ||\n variant === \"pills\" ||\n variant === \"pill-stroke\") &&\n indicatorStyle.width > 0 &&\n !isActiveTabInOverflow && (\n <motion.div\n className={cn(\"ds:absolute ds:rounded-md ds:pointer-events-none ds:z-0\", {\n \"ds:bg-background ds:shadow-sm\": variant === \"solid\",\n\n \"ds:bg-primary\":\n (variant === \"bordered\" || variant === \"pills\") &&\n color === \"primary\",\n \"ds:bg-secondary\":\n (variant === \"bordered\" || variant === \"pills\") &&\n color === \"secondary\",\n \"ds:bg-muted\":\n (variant === \"bordered\" || variant === \"pills\") &&\n color === \"muted\",\n \"ds:bg-accent\":\n (variant === \"bordered\" || variant === \"pills\") &&\n color === \"accent\",\n \"ds:bg-destructive\":\n (variant === \"bordered\" || variant === \"pills\") &&\n color === \"destructive\",\n \"ds:bg-success\":\n (variant === \"bordered\" || variant === \"pills\") &&\n color === \"success\",\n \"ds:bg-warning\":\n (variant === \"bordered\" || variant === \"pills\") &&\n color === \"warning\",\n\n \"ds:border ds:rounded-full ds:border-primary\":\n variant === \"pill-stroke\" && color === \"primary\",\n \"ds:border ds:rounded-full ds:border-secondary\":\n variant === \"pill-stroke\" && color === \"secondary\",\n \"ds:rounded-full ds:border-muted\":\n variant === \"pill-stroke\" && color === \"muted\",\n \"ds:border ds:rounded-full ds:border-accent\":\n variant === \"pill-stroke\" && color === \"accent\",\n \"ds:border ds:rounded-full ds:border-destructive\":\n variant === \"pill-stroke\" && color === \"destructive\",\n \"ds:border ds:rounded-full ds:border-success\":\n variant === \"pill-stroke\" && color === \"success\",\n \"ds:border ds:rounded-full ds:border-warning\":\n variant === \"pill-stroke\" && color === \"warning\",\n })}\n animate={{\n left: indicatorStyle.left,\n width: indicatorStyle.width,\n top: indicatorStyle.top,\n height: indicatorStyle.height,\n }}\n transition={{\n type: \"spring\",\n stiffness: 300,\n damping: 30,\n }}\n />\n )}\n </STabsList>\n );\n\n // Mode 1: Scroll - wrap in ScrollArea with ScrollBar\n if (overflowMode === \"scroll\") {\n return (\n <ScrollArea\n ref={scrollAreaRef}\n className={cn({\n \"ds:w-full\": !isVertical,\n \"ds:pb-2\": !isVertical && isOverflowing,\n \"ds:max-h-[300px] ds:*:data-radix-scroll-area-viewport:h-full ds:*:data-radix-scroll-area-viewport:max-h-[inherit]\":\n isVertical,\n })}\n >\n {tabsListContent}\n <ScrollBar orientation={isVertical ? \"vertical\" : \"horizontal\"} />\n </ScrollArea>\n );\n }\n\n // Mode 2: Dropdown - show visible tabs + [...] button for overflow tabs\n if (overflowMode === \"dropdown\" && showDropdownButton) {\n return (\n <div\n className={cn(\"ds:relative ds:flex ds:items-start ds:gap-1\", {\n \"ds:flex-col\": isVertical,\n })}\n >\n {/* Show only visible tabs */}\n {tabsListContent}\n\n {/* Overflow menu button - only show if there are hidden tabs */}\n <Popover\n open={dropdownOpen}\n onOpenChange={setDropdownOpen}\n trigger={\n <button\n className={cn(\n \"ds:inline-flex ds:items-center ds:justify-center ds:rounded-md ds:text-sm ds:font-medium ds:ring-offset-background ds:transition-colors\",\n \"ds:focus-visible:outline-none ds:focus-visible:ring-2 ds:focus-visible:ring-ring ds:focus-visible:ring-offset-2\",\n \"ds:disabled:pointer-events-none ds:disabled:opacity-50\",\n \"ds:hover:bg-accent ds:hover:text-accent-foreground\",\n \"ds:h-9 ds:px-3 ds:shrink-0\",\n {\n \"ds:bg-accent ds:text-accent-foreground\": dropdownOpen,\n }\n )}\n aria-label=\"More tabs\"\n >\n <MoreHorizontal className=\"ds:h-4 ds:w-4\" />\n </button>\n }\n content={\n <div className={cn(\"ds:flex ds:flex-col ds:gap-1 ds:p-1\")}>\n {overflowTabs.map((item) => (\n <button\n key={item.key}\n onClick={() => {\n handleValueChange(item.key);\n setDropdownOpen(false);\n }}\n disabled={item.disabled}\n className={cn(\n \"ds:flex ds:items-center ds:gap-2 ds:rounded-sm ds:px-2 ds:py-1.5 ds:text-sm\",\n \"ds:hover:bg-accent ds:hover:text-accent-foreground\",\n \"ds:disabled:pointer-events-none ds:disabled:opacity-50\",\n \"ds:text-left\",\n {\n \"ds:bg-accent ds:text-accent-foreground\":\n item.key === currentActiveKey,\n }\n )}\n >\n {item.icon && (\n <span className=\"ds:inline-flex ds:items-center\">\n {item.icon}\n </span>\n )}\n {item.label}\n </button>\n ))}\n </div>\n }\n side={isVertical ? \"right\" : \"bottom\"}\n align=\"end\"\n className=\"ds:w-auto ds:min-w-32 ds:max-w-sm ds:max-h-96 ds:overflow-auto ds:p-0\"\n />\n </div>\n );\n }\n\n // Mode 3: Fade with overflow button\n if (overflowMode === \"fade\" && isOverflowing) {\n return (\n <div\n className={cn(\"ds:relative ds:flex ds:items-start ds:gap-1\", {\n \"ds:flex-col\": isVertical,\n \"ds:flex-1 ds:w-full\": true, // Take full width for fade mode\n })}\n >\n {/* Fade effect for mode 3 */}\n <div\n className={cn(\"ds:relative ds:flex-1 ds:overflow-hidden\", {\n \"ds:w-full\": !isVertical,\n \"ds:h-full\": isVertical,\n })}\n >\n <ScrollArea\n ref={scrollAreaRef}\n className={cn({\n \"ds:w-full\": !isVertical,\n \"ds:h-full\": isVertical,\n })}\n >\n {tabsListContent}\n <ScrollBar orientation={isVertical ? \"vertical\" : \"horizontal\"} />\n </ScrollArea>\n\n {/* Start gradient overlay (left/top) - only show when scrolled */}\n {showStartFade && (\n <div\n className={cn(\"ds:absolute ds:pointer-events-none ds:z-20\", {\n \"ds:top-0 ds:left-0 ds:bottom-0 ds:w-24 ds:bg-linear-to-r ds:from-background ds:to-transparent\":\n !isVertical,\n \"ds:left-0 ds:right-0 ds:top-0 ds:h-24 ds:bg-linear-to-b ds:from-background ds:to-transparent\":\n isVertical,\n })}\n />\n )}\n\n {/* End gradient overlay (right/bottom) - only show when not at end */}\n {showEndFade && (\n <div\n className={cn(\"ds:absolute ds:pointer-events-none ds:z-20\", {\n \"ds:top-0 ds:right-0 ds:bottom-0 ds:w-24 ds:bg-linear-to-l ds:from-background ds:to-transparent\":\n !isVertical,\n \"ds:left-0 ds:right-0 ds:bottom-0 ds:h-24 ds:bg-linear-to-t ds:from-background ds:to-transparent\":\n isVertical,\n })}\n />\n )}\n </div>\n\n {/* Overflow menu button - shows all tabs */}\n <Popover\n open={dropdownOpen}\n onOpenChange={setDropdownOpen}\n trigger={\n <button\n className={cn(\n \"ds:inline-flex ds:items-center ds:justify-center ds:rounded-md ds:text-sm ds:font-medium ds:ring-offset-background ds:transition-colors\",\n \"ds:focus-visible:outline-none ds:focus-visible:ring-2 ds:focus-visible:ring-ring ds:focus-visible:ring-offset-2\",\n \"ds:disabled:pointer-events-none ds:disabled:opacity-50\",\n \"ds:hover:bg-accent ds:hover:text-accent-foreground\",\n \"ds:h-9 ds:px-3 ds:shrink-0\",\n {\n \"ds:bg-accent ds:text-accent-foreground\": dropdownOpen,\n }\n )}\n aria-label=\"More tabs\"\n >\n <MoreHorizontal className=\"ds:h-4 ds:w-4\" />\n </button>\n }\n content={\n // <div className={cn(\"flex flex-col gap-1 min-w-[150px]\")}>\n <ScrollArea\n className=\"ds:min-w-[150px] ds:max-h-[256px] ds:[&_[data-radix-scroll-area-viewport]]:max-h-[256px]\"\n snapType=\"y\"\n >\n {items.map((item) => (\n <button\n key={item.key}\n onClick={() => {\n handleValueChange(item.key);\n setDropdownOpen(false);\n }}\n disabled={item.disabled}\n className={cn(\n \"ds:snap-start\",\n \"ds:w-full ds:flex ds:items-center ds:gap-2 ds:rounded-sm ds:px-2 ds:py-1.5 ds:text-sm\",\n \"ds:hover:bg-accent ds:hover:text-accent-foreground\",\n \"ds:disabled:pointer-events-none ds:disabled:opacity-50\",\n \"ds:text-left\",\n {\n \"ds:bg-accent ds:text-accent-foreground\":\n item.key === currentActiveKey,\n }\n )}\n >\n {item.icon && (\n <span className=\"ds:inline-flex ds:items-center\">\n {item.icon}\n </span>\n )}\n {item.label}\n </button>\n ))}\n </ScrollArea>\n // </div>\n }\n side={isVertical ? \"right\" : \"bottom\"}\n align=\"end\"\n className=\"ds:p-2\"\n />\n </div>\n );\n }\n\n return tabsListContent;\n };\n\n return (\n <STabs\n ref={ref}\n defaultValue={defaultActiveKey}\n value={currentActiveKey}\n onValueChange={handleValueChange}\n orientation={orientation}\n className={cn(\"ds:gap-2\", positionClasses[tabPosition].root, className)}\n >\n <div\n ref={containerRef}\n className={cn(\"ds:flex\", {\n [alignmentClasses[alignment].horizontal]: !isVertical,\n [alignmentClasses[alignment].vertical]: isVertical,\n \"ds:w-full\":\n (fullWidth ||\n overflowMode === \"dropdown\" ||\n overflowMode === \"fade\") &&\n !isVertical,\n \"ds:overflow-hidden\":\n overflowMode === \"dropdown\" || overflowMode === \"fade\",\n })}\n >\n {renderTabsList()}\n </div>\n {items.map((item) => (\n <STabsContent\n key={item.key}\n value={item.key}\n className={cn(tabContentClassName)}\n >\n {item.children}\n </STabsContent>\n ))}\n </STabs>\n );\n});\n\nTabs.displayName = \"Tabs\";\n\nexport default Tabs;\n"],"names":["Tabs","React","props","ref","items","defaultActiveKey","activeKey","onChange","tabPosition","size","alignment","fullWidth","overflowMode","variant","color","className","tabListClassName","tabContentClassName","tabTriggerClassName","tabRefs","tabsListRef","containerRef","scrollAreaRef","indicatorStyle","setIndicatorStyle","internalActiveKey","setInternalActiveKey","isOverflowing","setIsOverflowing","visibleTabsCount","setVisibleTabsCount","dropdownOpen","setDropdownOpen","showStartFade","setShowStartFade","showEndFade","setShowEndFade","currentActiveKey","isVertical","checkOverflow","container","listElement","containerSize","hasOverflow","resizeObserver","calculateVisibleTabs","totalSize","dropdownButtonSize","listPadding","gap","count","i","tab","tabSize","withGap","hasMoreTabs","hasHiddenTabs","activeIndex","activeTabElement","listRect","tabRect","left","top","scrollAreaViewport","viewportRect","tabRectInViewport","fadeWidth","scrollTop","scrollHeight","viewportHeight","tabTop","tabHeight","targetScrollTop","maxScroll","clampedScroll","scrollLeft","scrollWidth","viewportWidth","tabLeft","tabWidth","targetScrollLeft","rafId","handleScroll","clientHeight","clientWidth","handleWheel","e","handleValueChange","key","orientation","variantConfig","variantClasses","listVariantClass","triggerVariantClass","getUnderlinedTriggerClasses","getEnclosedTriggerClasses","getEnclosedFillTriggerClasses","triggerColorClass","getColorClasses","listBorderClass","getListBorderClasses","visibleTabs","overflowTabs","showDropdownButton","isActiveTabInOverflow","renderTabTriggers","tabItems","startIndex","item","index","actualIndex","jsxs","STabsTrigger","el","cn","jsx","renderTabsList","tabsListContent","STabsList","positionClasses","sizeClasses","motion","ScrollArea","ScrollBar","Popover","MoreHorizontal","STabs","alignmentClasses","STabsContent"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"classes.cjs","sources":["../../../../src/components/Tabs/classes.ts"],"sourcesContent":["import { cn } from \"@dsui/ui/index\";\nimport type {\n TabAlignment,\n TabColor,\n TabPosition,\n TabSize,\n TabVariant,\n} from \"./types\";\n\nexport const sizeClasses: Record<\n TabSize,\n { horizontal: string; vertical: string }\n> = {\n sm: {\n horizontal: \"ds:text-xs ds:h-7 ds:[&>button]:px-2\",\n vertical: \"ds:text-xs ds:[&>button]:py-0.5\",\n },\n md: {\n horizontal: \"ds:text-sm ds:h-9 ds:[&>button]:px-3\",\n vertical: \"ds:text-sm ds:[&>button]:py-1\",\n },\n lg: {\n horizontal: \"ds:text-base ds:h-11 ds:[&>button]:px-4\",\n vertical: \"ds:text-base ds:[&>button]:py-1.5\",\n },\n};\n\nexport const alignmentClasses: Record<\n TabAlignment,\n { horizontal: string; vertical: string }\n> = {\n start: {\n horizontal: \"ds:justify-start\",\n vertical: \"ds:items-start\",\n },\n center: {\n horizontal: \"ds:justify-center\",\n vertical: \"ds:items-center\",\n },\n end: {\n horizontal: \"ds:justify-end\",\n vertical: \"ds:items-end\",\n },\n};\n\nexport const positionClasses: Record<\n TabPosition,\n { root: string; list: string }\n> = {\n top: {\n root: \"ds:flex ds:flex-col\",\n list: \"ds:flex-row\",\n },\n bottom: {\n root: \"ds:flex ds:flex-col-reverse\",\n list: \"ds:flex-row\",\n },\n left: {\n root: \"ds:flex ds:flex-row\",\n list: \"ds:flex-col ds:h-fit\",\n },\n right: {\n root: \"ds:flex ds:flex-row-reverse\",\n list: \"ds:flex-col ds:h-fit\",\n },\n};\n\n// Color classes for backgrounds, text, and borders\nexport const getColorClasses = (\n variant: TabVariant,\n color: TabColor\n): string => {\n // Helper to generate color-specific classes based on variant\n const colorMap: Record<\n TabColor,\n { bg: string; text: string; border: string }\n > = {\n primary: {\n bg: \"ds:data-[state=active]:bg-primary ds:dark:data-[state=active]:bg-primary ds:data-[state=active]:text-primary-foreground ds:dark:data-[state=active]:text-primary-foreground\",\n text: \"ds:data-[state=active]:text-primary ds:dark:data-[state=active]:text-primary\",\n border:\n \"ds:data-[state=active]:border-primary ds:dark:data-[state=active]:border-primary\",\n },\n secondary: {\n bg: \"ds:data-[state=active]:bg-secondary ds:dark:data-[state=active]:bg-secondary ds:data-[state=active]:text-secondary-foreground ds:dark:data-[state=active]:text-secondary-foreground\",\n text: \"ds:data-[state=active]:text-secondary ds:dark:data-[state=active]:text-secondary\",\n border:\n \"ds:data-[state=active]:border-secondary ds:dark:data-[state=active]:border-secondary\",\n },\n muted: {\n bg: \"ds:data-[state=active]:bg-muted ds:dark:data-[state=active]:bg-muted ds:data-[state=active]:text-muted-foreground ds:dark:data-[state=active]:text-muted-foreground\",\n text: \"ds:data-[state=active]:text-muted-foreground ds:dark:data-[state=active]:text-muted-foreground\",\n border:\n \"ds:data-[state=active]:border-border ds:dark:data-[state=active]:border-border\",\n },\n accent: {\n bg: \"ds:data-[state=active]:bg-accent ds:dark:data-[state=active]:bg-accent ds:data-[state=active]:text-accent-foreground ds:dark:data-[state=active]:text-accent-foreground\",\n text: \"ds:data-[state=active]:text-accent-foreground ds:dark:data-[state=active]:text-accent-foreground\",\n border:\n \"ds:data-[state=active]:border-accent ds:dark:data-[state=active]:border-accent\",\n },\n destructive: {\n bg: \"ds:data-[state=active]:bg-destructive ds:dark:data-[state=active]:bg-destructive ds:data-[state=active]:text-destructive-foreground ds:dark:data-[state=active]:text-destructive-foreground\",\n text: \"ds:data-[state=active]:text-destructive ds:dark:data-[state=active]:text-destructive\",\n border:\n \"ds:data-[state=active]:border-destructive ds:dark:data-[state=active]:border-destructive\",\n },\n success: {\n bg: \"ds:data-[state=active]:bg-success ds:dark:data-[state=active]:bg-success ds:data-[state=active]:text-success-foreground ds:dark:data-[state=active]:text-success-foreground\",\n text: \"ds:data-[state=active]:text-success ds:dark:data-[state=active]:text-success\",\n border:\n \"ds:data-[state=active]:border-success ds:dark:data-[state=active]:border-success\",\n },\n warning: {\n bg: \"ds:data-[state=active]:bg-warning ds:dark:data-[state=active]:bg-warning ds:data-[state=active]:text-warning-foreground ds:dark:data-[state=active]:text-warning-foreground\",\n text: \"ds:data-[state=active]:text-warning ds:dark:data-[state=active]:text-warning\",\n border:\n \"ds:data-[state=active]:border-warning ds:dark:data-[state=active]:border-warning\",\n },\n };\n\n const colors = colorMap[color];\n\n switch (variant) {\n case \"bordered\":\n case \"pills\":\n // Background color on active state\n return `${colors.bg} ds:dark:data-[state=active]:border-transparent`;\n case \"pill-stroke\":\n // Border color on active state, no background\n return `ds:data-[state=active]:bg-transparent ds:dark:data-[state=active]:bg-transparent`;\n case \"text\":\n // Text color only on active state\n return colors.text;\n case \"outline\":\n // Border color on active state\n return colors.border;\n case \"underlined\":\n // Bottom/side border color on active state\n return cn(colors.border, colors.text);\n case \"enclosed\":\n // Border color on active state (except bottom/side)\n return cn(colors.border, colors.text);\n case \"enclosed-fill\":\n // Border color on active state (except bottom/side)\n return cn(colors.border, colors.text);\n default:\n return \"\";\n }\n};\n\n// Get TabsList border classes based on position\nexport const getListBorderClasses = (\n variant: TabVariant,\n color: TabColor,\n tabPosition: TabPosition\n): string => {\n if (variant === \"underlined\") {\n // Underlined variant: border on the opposite side from where tabs connect\n const borderMap: Record<TabPosition, string> = {\n top: \"ds:border-b\",\n bottom: \"ds:border-t\",\n left: \"ds:border-r\",\n right: \"ds:border-l\",\n };\n return borderMap[tabPosition];\n }\n\n if (variant === \"enclosed\") {\n // Enclosed variant: colored border on the opposite side\n const borderBaseMap: Record<TabPosition, string> = {\n top: \"ds:border-b\",\n bottom: \"ds:border-t\",\n left: \"ds:border-r\",\n right: \"ds:border-l\",\n };\n\n const colorBorderMap: Record<TabPosition, Record<TabColor, string>> = {\n top: {\n primary: \"ds:border-b-primary\",\n secondary: \"ds:border-b-secondary\",\n muted: \"ds:border-b-border\",\n accent: \"ds:border-b-accent\",\n destructive: \"ds:border-b-destructive\",\n success: \"ds:border-b-success\",\n warning: \"ds:border-b-warning\",\n },\n bottom: {\n primary: \"ds:border-t-primary\",\n secondary: \"ds:border-t-secondary\",\n muted: \"ds:border-t-border\",\n accent: \"ds:border-t-accent\",\n destructive: \"ds:border-t-destructive\",\n success: \"ds:border-t-success\",\n warning: \"ds:border-t-warning\",\n },\n left: {\n primary: \"ds:border-r-primary\",\n secondary: \"ds:border-r-secondary\",\n muted: \"ds:border-r-border\",\n accent: \"ds:border-r-accent\",\n destructive: \"ds:border-r-destructive\",\n success: \"ds:border-r-success\",\n warning: \"ds:border-r-warning\",\n },\n right: {\n primary: \"ds:border-l-primary\",\n secondary: \"ds:border-l-secondary\",\n muted: \"ds:border-l-border\",\n accent: \"ds:border-l-accent\",\n destructive: \"ds:border-l-destructive\",\n success: \"ds:border-l-success\",\n warning: \"ds:border-l-warning\",\n },\n };\n return `${borderBaseMap[tabPosition]} ${colorBorderMap[tabPosition][color]}`;\n }\n\n if (variant === \"enclosed-fill\") {\n // Enclosed-fill variant: colored border on the opposite side\n const borderBaseMap: Record<TabPosition, string> = {\n top: \"ds:border-b\",\n bottom: \"ds:border-t\",\n left: \"ds:border-r\",\n right: \"ds:border-l\",\n };\n\n const colorBorderMap: Record<TabPosition, Record<TabColor, string>> = {\n top: {\n primary: \"ds:border-b-primary\",\n secondary: \"ds:border-b-secondary\",\n muted: \"ds:border-b-border\",\n accent: \"ds:border-b-accent\",\n destructive: \"ds:border-b-destructive\",\n success: \"ds:border-b-success\",\n warning: \"ds:border-b-warning\",\n },\n bottom: {\n primary: \"ds:border-t-primary\",\n secondary: \"ds:border-t-secondary\",\n muted: \"ds:border-t-border\",\n accent: \"ds:border-t-accent\",\n destructive: \"ds:border-t-destructive\",\n success: \"ds:border-t-success\",\n warning: \"ds:border-t-warning\",\n },\n left: {\n primary: \"ds:border-r-primary\",\n secondary: \"ds:border-r-secondary\",\n muted: \"ds:border-r-border\",\n accent: \"ds:border-r-accent\",\n destructive: \"ds:border-r-destructive\",\n success: \"ds:border-r-success\",\n warning: \"ds:border-r-warning\",\n },\n right: {\n primary: \"ds:border-l-primary\",\n secondary: \"ds:border-l-secondary\",\n muted: \"ds:border-l-border\",\n accent: \"ds:border-l-accent\",\n destructive: \"ds:border-l-destructive\",\n success: \"ds:border-l-success\",\n warning: \"ds:border-l-warning\",\n },\n };\n return `${borderBaseMap[tabPosition]} ${colorBorderMap[tabPosition][color]}`;\n }\n\n return \"\";\n};\n\n// Get trigger border classes for underlined variant based on position\nexport const getUnderlinedTriggerClasses = (\n tabPosition: TabPosition\n): string => {\n const baseClasses =\n \"ds:bg-background ds:dark:bg-background ds:rounded-none ds:border-0 ds:border-transparent ds:data-[state=active]:shadow-none\";\n\n const positionMap: Record<TabPosition, string> = {\n top: `${baseClasses} ds:border-b-2 ds:h-full`,\n bottom: `${baseClasses} ds:border-t-2 ds:h-full`,\n left: `${baseClasses} ds:border-r-2 ds:w-full`,\n right: `${baseClasses} ds:border-l-2 ds:w-full`,\n };\n\n return positionMap[tabPosition];\n};\n\n// Get trigger border classes for enclosed variant based on position\nexport const getEnclosedTriggerClasses = (tabPosition: TabPosition): string => {\n const baseClasses =\n \"ds:bg-background ds:dark:bg-background ds:border ds:border-transparent ds:data-[state=active]:shadow-none ds:rounded-none\";\n\n const positionMap: Record<TabPosition, string> = {\n top: `${baseClasses} ds:rounded-t-md ds:data-[state=active]:border-t ds:data-[state=active]:border-l ds:data-[state=active]:border-r ds:data-[state=active]:border-b-0 ds:data-[state=active]:border-b-background dark:ds:data-[state=active]:border-b-background ds:h-full ds:data-[state=active]:-mb-0.5 ds:data-[state=active]:translate-y-[0px]`,\n bottom: `${baseClasses} ds:rounded-b-md ds:data-[state=active]:border-b ds:data-[state=active]:border-l ds:data-[state=active]:border-r ds:data-[state=active]:border-t-0 ds:data-[state=active]:border-t-background dark:ds:data-[state=active]:border-t-background ds:h-full ds:data-[state=active]:-mt-0.5 ds:data-[state=active]:translate-y-[0px]`,\n left: `${baseClasses} ds:rounded-l-md ds:data-[state=active]:border-t ds:data-[state=active]:border-l ds:data-[state=active]:border-b ds:data-[state=active]:border-r-0 ds:data-[state=active]:border-r-background dark:ds:data-[state=active]:border-r-background ds:w-full ds:data-[state=active]:-mr-0.5 ds:data-[state=active]:translate-x-[1px]`,\n right: `${baseClasses} ds:rounded-r-md ds:data-[state=active]:border-t ds:data-[state=active]:border-r ds:data-[state=active]:border-b ds:data-[state=active]:border-l-0 ds:data-[state=active]:border-l-background dark:ds:data-[state=active]:border-l-background ds:w-full ds:data-[state=active]:-ml-0.5 ds:data-[state=active]:translate-x-[1px]`,\n };\n\n return positionMap[tabPosition];\n};\n\n// Get trigger border classes for enclosed-fill variant based on position\nexport const getEnclosedFillTriggerClasses = (\n tabPosition: TabPosition\n): string => {\n const baseClasses =\n \"ds:bg-muted ds:dark:bg-muted ds:border ds:border-transparent ds:data-[state=active]:bg-background ds:dark:data-[state=active]:bg-background ds:data-[state=active]:shadow-none ds:rounded-none\";\n\n const positionMap: Record<TabPosition, string> = {\n top: `${baseClasses} ds:rounded-t-md ds:data-[state=active]:border-t ds:data-[state=active]:border-l ds:data-[state=active]:border-r ds:data-[state=active]:border-b-0 ds:data-[state=active]:border-b-background dark:ds:data-[state=active]:border-b-background ds:h-full ds:data-[state=active]:-mb-0.5 ds:data-[state=active]:translate-y-[0px]`,\n bottom: `${baseClasses} ds:rounded-b-md ds:data-[state=active]:border-b ds:data-[state=active]:border-l ds:data-[state=active]:border-r ds:data-[state=active]:border-t-0 ds:data-[state=active]:border-t-background dark:ds:data-[state=active]:border-t-background ds:h-full ds:data-[state=active]:-mt-0.5 ds:data-[state=active]:translate-y-[0px]`,\n left: `${baseClasses} ds:rounded-l-md ds:data-[state=active]:border-t ds:data-[state=active]:border-l ds:data-[state=active]:border-b ds:data-[state=active]:border-r-0 ds:data-[state=active]:border-r-background dark:ds:data-[state=active]:border-r-background ds:w-full ds:data-[state=active]:-mr-0.5 ds:data-[state=active]:translate-x-[1px]`,\n right: `${baseClasses} ds:rounded-r-md ds:data-[state=active]:border-t ds:data-[state=active]:border-r ds:data-[state=active]:border-b ds:data-[state=active]:border-l-0 ds:data-[state=active]:border-l-background dark:ds:data-[state=active]:border-l-background ds:w-full ds:data-[state=active]:-ml-0.5 ds:data-[state=active]:translate-x-[1px]`,\n };\n\n return positionMap[tabPosition];\n};\n\nexport const variantClasses: Record<\n TabVariant,\n {\n list: { horizontal: string; vertical: string };\n trigger: { horizontal: string; vertical: string };\n }\n> = {\n // Solid: Default style (muted background, active has white background)\n solid: {\n list: {\n horizontal: \"ds:bg-muted ds:dark:bg-muted ds:rounded-lg ds:p-[3px]\",\n vertical: \"ds:bg-muted ds:dark:bg-muted ds:rounded-lg ds:p-[3px]\",\n },\n trigger: {\n horizontal: \"\",\n vertical: \"\",\n },\n },\n\n // Bordered: With border on group and colored active background\n bordered: {\n list: {\n horizontal:\n \"ds:bg-background ds:dark:bg-background ds:border ds:p-1 ds:gap-1 ds:rounded-lg\",\n vertical: \"ds:bg-background ds:dark:bg-background ds:border ds:p-1 ds:gap-1 ds:rounded-lg\",\n },\n trigger: {\n horizontal: \"\",\n vertical: \"\",\n },\n },\n\n // Pills: No border/background on group, colored background on active button\n pills: {\n list: {\n horizontal: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n vertical: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n },\n trigger: {\n horizontal: \"\",\n vertical: \"\",\n },\n },\n\n // Pill-stroke: Pill-style with stroke border, stronger border radius, no background on active\n \"pill-stroke\": {\n list: {\n horizontal: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n vertical: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n },\n trigger: {\n horizontal: \"ds:border ds:border-border ds:rounded-full ds:bg-transparent\",\n vertical: \"ds:border ds:border-border ds:rounded-full ds:bg-transparent\",\n },\n },\n\n // Text: No border/background on group, colored text on active button\n text: {\n list: {\n horizontal: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n vertical: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n },\n trigger: {\n horizontal:\n \"ds:bg-transparent ds:data-[state=active]:bg-transparent ds:data-[state=active]:shadow-none\",\n vertical:\n \"ds:bg-transparent ds:data-[state=active]:bg-transparent ds:data-[state=active]:shadow-none\",\n },\n },\n\n // Outline: No border/background on group, colored border (stroke) on active button\n outline: {\n list: {\n horizontal: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n vertical: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n },\n trigger: {\n horizontal:\n \"ds:bg-transparent ds:border ds:border-transparent ds:data-[state=active]:bg-transparent ds:data-[state=active]:shadow-none\",\n vertical:\n \"ds:bg-transparent ds:border ds:border-transparent ds:data-[state=active]:bg-transparent ds:data-[state=active]:shadow-none\",\n },\n },\n\n // Underlined: Bottom border on group, bottom border on active tab\n underlined: {\n list: {\n horizontal: \"ds:bg-background ds:dark:bg-background ds:rounded-none ds:p-0\",\n vertical: \"ds:bg-background ds:dark:bg-background ds:rounded-none ds:p-0\",\n },\n trigger: {\n horizontal: \"\", // Will be set dynamically\n vertical: \"\", // Will be set dynamically\n },\n },\n\n // Enclosed: Border on active tab except bottom border (tab style)\n enclosed: {\n list: {\n horizontal:\n \"ds:bg-background ds:dark:bg-background ds:justify-start ds:rounded-none ds:p-0\",\n vertical: \"ds:bg-background ds:dark:bg-background ds:items-start ds:rounded-none ds:p-0\",\n },\n trigger: {\n horizontal: \"\", // Will be set dynamically\n vertical: \"\", // Will be set dynamically\n },\n },\n\n // Enclosed-fill: Border on active tab except bottom border with background on inactive tabs\n \"enclosed-fill\": {\n list: {\n horizontal:\n \"ds:bg-background ds:dark:bg-background ds:justify-start ds:rounded-none ds:p-0 ds:gap-1\",\n vertical:\n \"ds:bg-background ds:dark:bg-background ds:items-start ds:rounded-none ds:p-0 ds:gap-1\",\n },\n trigger: {\n horizontal: \"\", // Will be set dynamically\n vertical: \"\", // Will be set dynamically\n },\n },\n};\n"],"names":["sizeClasses","alignmentClasses","positionClasses","getColorClasses","variant","color","colors","cn","getListBorderClasses","tabPosition","borderBaseMap","colorBorderMap","getUnderlinedTriggerClasses","baseClasses","getEnclosedTriggerClasses","getEnclosedFillTriggerClasses","variantClasses"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Textarea.cjs","sources":["../../../../src/components/Textarea/Textarea.tsx"],"sourcesContent":["import React from \"react\";\nimport {\n Textarea as STextarea,\n type TextareaProps as STextareaProps,\n} from \"@dsui/ui/components/textarea\";\nimport { cn } from \"@dsui/ui/lib/utils\";\nimport { Info, X } from \"lucide-react\";\nimport { Tooltip } from \"../Tooltip/Tooltip\";\nimport { FloatingLabel } from \"@/components/FloatLabel\";\nimport { Label } from \"../Label\";\n\nexport type TextareaProps = Omit<\n STextareaProps,\n \"onChange\" | \"size\" | \"state\"\n> & {\n onChange?: (e: React.ChangeEvent<HTMLTextAreaElement>) => void;\n size?: \"xs\" | \"sm\" | \"normal\" | \"lg\" | \"xl\";\n state?: \"default\" | \"success\" | \"warning\" | \"error\";\n label?: string;\n helperText?: React.ReactNode;\n isFloatLabel?: boolean;\n maxLength?: number;\n showCharCount?: boolean;\n infoTooltip?: React.ReactNode;\n clearable?: boolean;\n onClear?: () => void;\n required?: boolean;\n};\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n (\n {\n className,\n label,\n helperText,\n state,\n size = \"normal\",\n isFloatLabel,\n maxLength,\n showCharCount,\n infoTooltip,\n clearable,\n onClear,\n placeholder = \" \",\n onChange,\n required,\n ...props\n },\n ref\n ) => {\n // Character count state\n const [charCount, setCharCount] = React.useState(() => {\n if (typeof props.value === \"string\") return props.value.length;\n if (typeof props.defaultValue === \"string\")\n return props.defaultValue.length;\n return 0;\n });\n\n const handleInput = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n setCharCount(e.target.value.length);\n onChange?.(e);\n };\n\n const textareaId = React.useId();\n const innerRef = React.useRef<HTMLTextAreaElement>(null);\n\n // Combine refs\n React.useImperativeHandle(ref, () => innerRef.current!);\n\n const handleClear = () => {\n if (innerRef.current) {\n innerRef.current.value = \"\";\n setCharCount(0);\n const event = new Event(\"input\", { bubbles: true });\n innerRef.current.dispatchEvent(event);\n if (onClear) onClear();\n }\n };\n\n // State\n const helperTextStyles = {\n default: \"ds:text-muted-foreground\",\n success: \"ds:text-success\",\n warning: \"ds:text-warning\",\n error: \"ds:text-error\",\n };\n\n return (\n <div className={className}>\n <div\n className={cn(\"ds:flex ds:flex-col ds:gap-1.5 ds:relative\", {\n \"ds:floating-label\": isFloatLabel,\n })}\n >\n {!isFloatLabel && label && (\n <Label\n htmlFor={textareaId}\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 <STextarea\n ref={innerRef}\n id={textareaId}\n className={cn(\n \"ds:peer ds:resize-y\",\n {\n \"ds:pt-6 ds:pb-2\": isFloatLabel && (size === \"lg\" || size === \"xl\"),\n \"ds:pt-6 ds:pb-1\": isFloatLabel && size !== \"lg\" && size !== \"xl\",\n \"ds:text-lg\": (size === \"xl\" || size === \"lg\") && !isFloatLabel,\n },\n clearable && charCount > 0 && \"ds:pr-10\"\n // className\n )}\n placeholder={placeholder}\n maxLength={maxLength}\n onChange={handleInput}\n state={state}\n size={\n isFloatLabel\n ? size === \"xl\" || size === \"lg\"\n ? size\n : \"xl\"\n : size\n }\n required={required}\n {...props}\n />\n {isFloatLabel && (\n <FloatingLabel\n htmlFor={textareaId}\n size={size}\n infoTooltip={infoTooltip}\n required={required}\n className=\"ds:peer-placeholder-shown:items-start\"\n >\n {label}\n </FloatingLabel>\n )}\n\n {/* Clear Button */}\n {clearable && charCount > 0 && (\n <button\n type=\"button\"\n tabIndex={-1}\n className={cn(\n \"ds:absolute ds:top-2 ds:right-2 ds:p-1 ds:rounded ds:hover:bg-accent ds:transition-colors\"\n )}\n onClick={handleClear}\n disabled={props.disabled}\n >\n <X className=\"ds:size-4\" />\n </button>\n )}\n </div>\n\n {(helperText || (showCharCount && typeof maxLength === \"number\")) && (\n <div className=\"ds:flex ds:items-center ds:justify-between ds:text-xs ds:gap-2\">\n {helperText && (\n <p\n className={cn(\n \"ds:text-xs\",\n state ? helperTextStyles?.[state] : \"\"\n )}\n >\n {helperText}\n </p>\n )}\n {showCharCount && typeof maxLength === \"number\" && (\n <span className=\"ds:ml-auto ds:text-muted-foreground\">\n {charCount} / {maxLength}\n </span>\n )}\n </div>\n )}\n </div>\n </div>\n );\n }\n);\n\nTextarea.displayName = \"Textarea\";\nexport default Textarea;\n"],"names":["Textarea","React","className","label","helperText","state","size","isFloatLabel","maxLength","showCharCount","infoTooltip","clearable","onClear","placeholder","onChange","required","props","ref","charCount","setCharCount","handleInput","e","textareaId","innerRef","handleClear","event","helperTextStyles","jsx","jsxs","cn","Label","Tooltip","Info","STextarea","FloatingLabel","X"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TimeGridView.cjs","sources":["../../../src/components/TimeGridView.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { memo, useMemo } from \"react\";\nimport { cn } from \"@dsui/ui/index\";\nimport Button from \"./Button/Button\";\nimport type { CalendarColor } from \"./Calendar/Calendar\";\n\nconst pad = (num: number): string => String(num).padStart(2, \"0\");\n\n// Color variants for time grid items\nconst getColorClasses = (color: CalendarColor = \"primary\") => {\n const colorMap = {\n primary: {\n bg: \"ds:bg-primary\",\n text: \"ds:text-primary-foreground\",\n },\n secondary: {\n bg: \"ds:bg-secondary\",\n text: \"ds:text-secondary-foreground\",\n },\n accent: {\n bg: \"ds:bg-accent\",\n text: \"ds:text-accent-foreground\",\n },\n destructive: {\n bg: \"ds:bg-destructive\",\n text: \"ds:text-destructive-foreground\",\n },\n muted: {\n bg: \"ds:bg-muted\",\n text: \"ds:text-muted-foreground\",\n },\n success: {\n bg: \"ds:bg-success\",\n text: \"ds:text-success-foreground\",\n },\n error: {\n bg: \"ds:bg-error\",\n text: \"ds:text-error-foreground\",\n },\n warning: {\n bg: \"ds:bg-warning\",\n text: \"ds:text-warning-foreground\",\n },\n foreground: {\n bg: \"ds:bg-foreground\",\n text: \"ds:text-background\",\n },\n };\n return colorMap[color];\n};\n\ntype TimeGridViewProps = {\n HOURS: number[];\n MINUTES: number[];\n hours: number | undefined;\n minutes: number | undefined;\n disabled: boolean;\n isTimeDisabled: (h: number, m: number, s: number) => boolean;\n onTimeSelect: (h: number, m: number) => void;\n color?: CalendarColor;\n};\n\nexport const TimeGridView = memo(\n React.forwardRef<HTMLDivElement, TimeGridViewProps>(\n (\n {\n HOURS,\n MINUTES,\n hours,\n minutes,\n disabled,\n isTimeDisabled,\n onTimeSelect,\n color = \"primary\",\n },\n ref\n ) => {\n // Generate all time combinations based on intervals (always HH:mm, never shows seconds)\n const timeOptions = useMemo(() => {\n const options: Array<{ h: number; m: number; display: string }> = [];\n\n for (const h of HOURS) {\n for (const m of MINUTES) {\n options.push({\n h,\n m,\n display: `${pad(h)}:${pad(m)}`,\n });\n }\n }\n\n return options;\n }, [HOURS, MINUTES]);\n\n const currentValue =\n hours !== undefined && minutes !== undefined\n ? `${pad(hours)}:${pad(minutes)}`\n : \"\";\n\n const handleTimeSelect = (h: number, m: number) => {\n // Always set seconds to 0 in grid mode\n if (!isTimeDisabled(h, m, 0)) {\n onTimeSelect(h, m);\n }\n };\n\n return (\n <div className=\"ds:flex ds:flex-col ds:gap-2\">\n <div\n ref={ref}\n className=\"ds:flex ds:flex-col ds:gap-1 ds:h-64 ds:overflow-y-auto ds:p-2 ds:rounded-md\"\n >\n {timeOptions.map(({ h, m, display }) => {\n const itemDisabled = isTimeDisabled(h, m, 0);\n const isSelected = display === currentValue;\n const colorClasses = getColorClasses(color);\n\n return (\n <Button\n key={display}\n type=\"button\"\n variant=\"outline\"\n onClick={() => handleTimeSelect(h, m)}\n data-selected={isSelected || undefined}\n disabled={disabled || itemDisabled}\n size=\"sm\"\n className={cn(\n isSelected\n ? `${colorClasses.bg} ${colorClasses.text} ds:font-semibold`\n : \"ds:text-foreground\"\n )}\n >\n {display}\n </Button>\n );\n })}\n </div>\n </div>\n );\n }\n )\n);\n\nTimeGridView.displayName = \"TimeGridView\";\n"],"names":["pad","num","getColorClasses","color","TimeGridView","memo","React","HOURS","MINUTES","hours","minutes","disabled","isTimeDisabled","onTimeSelect","ref","timeOptions","useMemo","options","h","m","currentValue","handleTimeSelect","jsx","display","itemDisabled","isSelected","colorClasses","Button","cn"],"mappings":"ozDAMMA,EAAOC,GAAwB,OAAOA,CAAG,EAAE,SAAS,EAAG,GAAG,EAG1DC,EAAkB,CAACC,EAAuB,aAC7B,CACf,QAAS,CACP,GAAI,gBACJ,KAAM,4BAAA,EAER,UAAW,CACT,GAAI,kBACJ,KAAM,8BAAA,EAER,OAAQ,CACN,GAAI,eACJ,KAAM,2BAAA,EAER,YAAa,CACX,GAAI,oBACJ,KAAM,gCAAA,EAER,MAAO,CACL,GAAI,cACJ,KAAM,0BAAA,EAER,QAAS,CACP,GAAI,gBACJ,KAAM,4BAAA,EAER,MAAO,CACL,GAAI,cACJ,KAAM,0BAAA,EAER,QAAS,CACP,GAAI,gBACJ,KAAM,4BAAA,EAER,WAAY,CACV,GAAI,mBACJ,KAAM,oBAAA,CACR,GAEcA,CAAK,EAcVC,EAAeC,EAAAA,KAC1BC,EAAM,WACJ,CACE,CACE,MAAAC,EACA,QAAAC,EACA,MAAAC,EACA,QAAAC,EACA,SAAAC,EACA,eAAAC,EACA,aAAAC,EACA,MAAAV,EAAQ,SAAA,EAEVW,IACG,CAEH,MAAMC,EAAcC,EAAAA,QAAQ,IAAM,CAChC,MAAMC,EAA4D,CAAA,EAElE,UAAWC,KAAKX,EACd,UAAWY,KAAKX,EACdS,EAAQ,KAAK,CACX,EAAAC,EACA,EAAAC,EACA,QAAS,GAAGnB,EAAIkB,CAAC,CAAC,IAAIlB,EAAImB,CAAC,CAAC,EAAA,CAC7B,EAIL,OAAOF,CACT,EAAG,CAACV,EAAOC,CAAO,CAAC,EAEbY,EACJX,IAAU,QAAaC,IAAY,OAC/B,GAAGV,EAAIS,CAAK,CAAC,IAAIT,EAAIU,CAAO,CAAC,GAC7B,GAEAW,EAAmB,CAACH,EAAWC,IAAc,CAE5CP,EAAeM,EAAGC,EAAG,CAAC,GACzBN,EAAaK,EAAGC,CAAC,CAErB,EAEA,OACEG,EAAAA,IAAC,MAAA,CAAI,UAAU,+BACb,SAAAA,EAAAA,IAAC,MAAA,CACC,IAAAR,EACA,UAAU,+EAET,WAAY,IAAI,CAAC,CAAE,EAAAI,EAAG,EAAAC,EAAG,QAAAI,KAAc,CACtC,MAAMC,EAAeZ,EAAeM,EAAGC,EAAG,CAAC,EACrCM,EAAaF,IAAYH,EACzBM,EAAexB,EAAgBC,CAAK,EAE1C,OACEmB,EAAAA,IAACK,EAAAA,QAAA,CAEC,KAAK,SACL,QAAQ,UACR,QAAS,IAAMN,EAAiBH,EAAGC,CAAC,EACpC,gBAAeM,GAAc,OAC7B,SAAUd,GAAYa,EACtB,KAAK,KACL,UAAWI,EAAAA,GACTH,EACI,GAAGC,EAAa,EAAE,IAAIA,EAAa,IAAI,oBACvC,oBAAA,EAGL,SAAAH,CAAA,EAbIA,CAAA,CAgBX,CAAC,CAAA,CAAA,EAEL,CAEJ,CAAA,CAEJ,EAEAnB,EAAa,YAAc"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Toast.cjs","sources":["../../../../src/components/Toast/Toast.tsx"],"sourcesContent":["import {\n Toaster as SonnerToaster,\n toast as sonnerToast,\n type ToasterProps as SonnerToasterProps,\n} from \"sonner\";\nimport { CheckCircle, XCircle, Info, AlertTriangle } from \"lucide-react\";\nimport { cn } from \"@dsui/ui/index\";\n\nconst variantStyles = {\n default: \"ds:bg-neutral-800 ds:text-white ds:border ds:border-neutral-700\",\n success: \"ds:bg-success ds:text-white ds:border ds:border-success/20\",\n error: \"ds:bg-error ds:text-white ds:border ds:border-error/20\",\n warning: \"ds:bg-warning ds:text-black ds:border ds:border-warning/20\",\n info: \"ds:bg-info ds:text-foreground\",\n primary: \"ds:bg-primary ds:text-primary-foreground ds:border ds:border-primary/20\",\n secondary:\n \"ds:bg-secondary ds:text-secondary-foreground ds:border ds:border-secondary/20\",\n};\n\nconst variantIcons = {\n success: <CheckCircle className=\"ds:w-4 ds:h-4 ds:shrink-0\" />,\n error: <XCircle className=\"ds:w-4 ds:h-4 ds:shrink-0\" />,\n warning: <AlertTriangle className=\"ds:w-4 ds:h-4 ds:shrink-0\" />,\n info: <Info className=\"ds:w-4 ds:h-4 ds:shrink-0\" />,\n default: null,\n primary: <Info className=\"ds:w-4 ds:h-4 ds:shrink-0\" />,\n secondary: <Info className=\"ds:w-4 ds:h-4 ds:shrink-0\" />,\n};\n\ntype Variant = keyof typeof variantStyles;\n\nconst renderToastContent = (variant: Variant, message: React.ReactNode) => (\n <div\n className={cn(\n \"ds:flex ds:items-center ds:gap-2 ds:rounded-md ds:px-3 ds:py-2 ds:shadow-md ds:text-sm ds:font-medium\",\n variantStyles[variant]\n )}\n >\n {variantIcons[variant]}\n <span>{message}</span>\n </div>\n);\n\nconst toast = Object.assign(\n (...args: Parameters<typeof sonnerToast>) => {\n const [message] = args;\n const content =\n typeof message === \"function\" ? message() : (message ?? \"Notification\");\n\n return sonnerToast.custom(() => renderToastContent(\"default\", content));\n },\n {\n success: (\n message: React.ReactNode,\n opts?: Parameters<typeof sonnerToast>[1]\n ) => sonnerToast.custom(() => renderToastContent(\"success\", message), opts),\n\n error: (\n message: React.ReactNode,\n opts?: Parameters<typeof sonnerToast>[1]\n ) => sonnerToast.custom(() => renderToastContent(\"error\", message), opts),\n\n warning: (\n message: React.ReactNode,\n opts?: Parameters<typeof sonnerToast>[1]\n ) => sonnerToast.custom(() => renderToastContent(\"warning\", message), opts),\n\n info: (\n message: React.ReactNode,\n opts?: Parameters<typeof sonnerToast>[1]\n ) => sonnerToast.custom(() => renderToastContent(\"info\", message), opts),\n\n primary: (\n message: React.ReactNode,\n opts?: Parameters<typeof sonnerToast>[1]\n ) => sonnerToast.custom(() => renderToastContent(\"primary\", message), opts),\n\n secondary: (\n message: React.ReactNode,\n opts?: Parameters<typeof sonnerToast>[1]\n ) =>\n sonnerToast.custom(() => renderToastContent(\"secondary\", message), opts),\n }\n) as any;\n\nfunction Toaster({\n position = \"top-right\",\n richColors = true,\n closeButton = false,\n expand = false,\n visibleToasts = 3,\n duration = 4000,\n ...props\n}: SonnerToasterProps) {\n return (\n <SonnerToaster\n {...props}\n position={position}\n richColors={richColors}\n closeButton={closeButton}\n expand={expand}\n visibleToasts={visibleToasts}\n toastOptions={{\n duration: duration,\n classNames: {\n toast:\n \"ds:rounded-md ds:shadow-md ds:border-none ds:text-sm ds:font-medium ds:backdrop-blur-sm ds:text-black ds:dark:text-white\",\n description: \"ds:text-muted-foreground\",\n actionButton: \"ds:bg-white/10\",\n },\n }}\n />\n );\n}\n\nexport { toast, Toaster };\n"],"names":["variantStyles","variantIcons","jsx","CheckCircle","XCircle","AlertTriangle","Info","renderToastContent","variant","message","jsxs","cn","toast","args","content","sonnerToast","opts","Toaster","position","richColors","closeButton","expand","visibleToasts","duration","props","SonnerToaster"],"mappings":"0jDAQA,MAAMA,EAAgB,CACpB,QAAS,kEACT,QAAS,6DACT,MAAO,yDACP,QAAS,6DACT,KAAM,gCACN,QAAS,0EACT,UACE,+EACJ,EAEMC,EAAe,CACnB,QAASC,EAAAA,IAACC,EAAAA,YAAA,CAAY,UAAU,2BAAA,CAA4B,EAC5D,MAAOD,EAAAA,IAACE,EAAAA,QAAA,CAAQ,UAAU,2BAAA,CAA4B,EACtD,QAASF,EAAAA,IAACG,EAAAA,cAAA,CAAc,UAAU,2BAAA,CAA4B,EAC9D,KAAMH,EAAAA,IAACI,EAAAA,KAAA,CAAK,UAAU,2BAAA,CAA4B,EAClD,QAAS,KACT,QAASJ,EAAAA,IAACI,EAAAA,KAAA,CAAK,UAAU,2BAAA,CAA4B,EACrD,UAAWJ,EAAAA,IAACI,EAAAA,KAAA,CAAK,UAAU,2BAAA,CAA4B,CACzD,EAIMC,EAAqB,CAACC,EAAkBC,IAC5CC,EAAAA,KAAC,MAAA,CACC,UAAWC,EAAAA,GACT,wGACAX,EAAcQ,CAAO,CAAA,EAGtB,SAAA,CAAAP,EAAaO,CAAO,EACrBN,EAAAA,IAAC,QAAM,SAAAO,CAAA,CAAQ,CAAA,CAAA,CACjB,EAGIG,EAAQ,OAAO,OACnB,IAAIC,IAAyC,CAC3C,KAAM,CAACJ,CAAO,EAAII,EACZC,EACJ,OAAOL,GAAY,WAAaA,EAAA,EAAaA,GAAW,eAE1D,OAAOM,EAAAA,MAAY,OAAO,IAAMR,EAAmB,UAAWO,CAAO,CAAC,CACxE,EACA,CACE,QAAS,CACPL,EACAO,IACGD,QAAY,OAAO,IAAMR,EAAmB,UAAWE,CAAO,EAAGO,CAAI,EAE1E,MAAO,CACLP,EACAO,IACGD,QAAY,OAAO,IAAMR,EAAmB,QAASE,CAAO,EAAGO,CAAI,EAExE,QAAS,CACPP,EACAO,IACGD,QAAY,OAAO,IAAMR,EAAmB,UAAWE,CAAO,EAAGO,CAAI,EAE1E,KAAM,CACJP,EACAO,IACGD,QAAY,OAAO,IAAMR,EAAmB,OAAQE,CAAO,EAAGO,CAAI,EAEvE,QAAS,CACPP,EACAO,IACGD,QAAY,OAAO,IAAMR,EAAmB,UAAWE,CAAO,EAAGO,CAAI,EAE1E,UAAW,CACTP,EACAO,IAEAD,EAAAA,MAAY,OAAO,IAAMR,EAAmB,YAAaE,CAAO,EAAGO,CAAI,CAAA,CAE7E,EAEA,SAASC,EAAQ,CACf,SAAAC,EAAW,YACX,WAAAC,EAAa,GACb,YAAAC,EAAc,GACd,OAAAC,EAAS,GACT,cAAAC,EAAgB,EAChB,SAAAC,EAAW,IACX,GAAGC,CACL,EAAuB,CACrB,OACEtB,EAAAA,IAACuB,EAAAA,QAAA,CACE,GAAGD,EACJ,SAAAN,EACA,WAAAC,EACA,YAAAC,EACA,OAAAC,EACA,cAAAC,EACA,aAAc,CACZ,SAAAC,EACA,WAAY,CACV,MACE,2HACF,YAAa,2BACb,aAAc,gBAAA,CAChB,CACF,CAAA,CAGN"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Toggle.cjs","sources":["../../../../src/components/Toggle/Toggle.tsx"],"sourcesContent":["import React from \"react\";\nimport { Toggle as SToggle } from \"@dsui/ui/components/toggle\";\n\nexport type ToggleProps = Omit<\n React.ComponentPropsWithoutRef<typeof SToggle>,\n \"variant\" | \"size\" | \"color\"\n> & {\n variant?: \"default\" | \"outline\";\n size?: \"sm\" | \"default\" | \"lg\";\n color?:\n | \"primary\"\n | \"secondary\"\n | \"accent\"\n | \"destructive\"\n | \"muted\"\n | \"success\"\n | \"error\"\n | \"warning\";\n};\n\nconst Toggle = React.forwardRef<HTMLButtonElement, ToggleProps>(\n (props, ref) => {\n const { variant = \"default\", size = \"default\", color, ...rest } = props;\n\n return (\n <SToggle\n ref={ref}\n {...rest}\n variant={variant}\n size={size}\n color={color}\n />\n );\n }\n);\n\nToggle.displayName = \"Toggle\";\nexport default Toggle;\n"],"names":["Toggle","React","props","ref","variant","size","color","rest","jsx","SToggle"],"mappings":"6NAoBMA,EAASC,EAAM,WACnB,CAACC,EAAOC,IAAQ,CACd,KAAM,CAAE,QAAAC,EAAU,UAAW,KAAAC,EAAO,UAAW,MAAAC,EAAO,GAAGC,GAASL,EAElE,OACEM,EAAAA,IAACC,EAAAA,OAAA,CACC,IAAAN,EACC,GAAGI,EACJ,QAAAH,EACA,KAAAC,EACA,MAAAC,CAAA,CAAA,CAGN,CACF,EAEAN,EAAO,YAAc"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Tooltip.cjs","sources":["../../../../src/components/Tooltip/Tooltip.tsx"],"sourcesContent":["import * as React from \"react\";\nimport {\n Tooltip as DsTooltip,\n TooltipTrigger,\n TooltipContent,\n TooltipProvider,\n type TooltipContentProps,\n} from \"@dsui/ui/components/tooltip\";\nimport { cn } from \"@dsui/ui/index\";\nimport { motion, useMotionValue, useSpring, useTransform } from \"motion/react\";\nimport type { BasicAnimation, BasicColor } from \"@/types/variables\";\nimport { useMemo, useCallback } from \"react\";\nimport { animationClass } from \"@/utils/animations\";\n\ntype Color = BasicColor | \"dark\" | \"light\" | \"inverted\";\n\nexport type TooltipProps = TooltipContentProps & {\n content: React.ReactNode;\n children: React.ReactNode;\n sideOffset?: number;\n delayDuration?: number;\n position?: \"top\" | \"right\" | \"bottom\" | \"left\";\n className?: string;\n childClassName?: string;\n noArrow?: boolean;\n animation?: BasicAnimation;\n color?: Color;\n};\n\nexport const Tooltip = React.memo(function Tooltip({\n content,\n children,\n sideOffset = 4,\n delayDuration = 0,\n className,\n childClassName,\n position = \"top\",\n noArrow = false,\n animation,\n ...props\n}: TooltipProps) {\n const springConfig = { stiffness: 100, damping: 5 };\n\n const tooltipAnimation = useMemo<{ className?: string } | null>(() => {\n return animationClass(animation, className);\n }, [animation, className]);\n\n const tooltipColor = useMemo<string>(() => {\n switch (props.color) {\n case \"primary\":\n return \"ds:bg-primary ds:text-primary-foreground ds:[&>span>svg]:bg-primary ds:[&>span>svg]:fill-primary\";\n case \"secondary\":\n return \"ds:bg-secondary ds:text-secondary-foreground ds:[&>span>svg]:bg-secondary ds:[&>span>svg]:fill-secondary\";\n case \"dark\":\n return \"\";\n case \"light\":\n return \"ds:bg-neutral-200 ds:text-neutral-950 ds:[&_svg]:bg-neutral-200 ds:[&_svg]:fill-neutral-200\";\n case \"inverted\":\n return \"ds:dark:bg-white ds:dark:text-black ds:dark:[&_svg]:bg-white ds:dark:[&_svg]:fill-white\";\n case \"success\":\n return \"ds:bg-success ds:text-success-foreground ds:[&>span>svg]:bg-success ds:[&>span>svg]:fill-success\";\n case \"warning\":\n return \"ds:bg-warning ds:text-warning-foreground ds:[&>span>svg]:bg-warning ds:[&>span>svg]:fill-warning\";\n case \"error\":\n return \"ds:bg-error ds:text-error-foreground ds:[&>span>svg]:bg-error ds:[&>span>svg]:fill-error\";\n case \"glass\":\n return \"ds:bg-white/15 ds:text-foreground ds:backdrop-blur-sm ds:shadow-lg ds:[&>span>svg]:bg-white/15 ds:[&>span>svg]:fill-white/15\";\n default:\n return \"ds:bg-foreground ds:text-background ds:animate-in ds:fade-in-0 ds:zoom-in-95 ds:data-[state=closed]:animate-out ds:data-[state=closed]:fade-out-0 ds:data-[state=closed]:zoom-out-95 ds:data-[side=bottom]:slide-in-from-top-2 ds:data-[side=left]:slide-in-from-right-2 ds:data-[side=right]:slide-in-from-left-2 ds:data-[side=top]:slide-in-from-bottom-2 ds:z-50 ds:w-fit ds:origin-(--radix-tooltip-content-transform-origin) ds:rounded-md ds:px-3 ds:py-1.5 ds:text-xs ds:text-balance\";\n }\n }, [props?.color]);\n\n // on mouse move\n const x = useMotionValue(0);\n // rotate the tooltip\n const rotate = useSpring(\n useTransform(x, [-100, 100], [-45, 45]),\n springConfig\n );\n // translate the tooltip\n const translateX = useSpring(\n useTransform(x, [-100, 100], [-50, 50]),\n springConfig\n );\n\n const handleMouseMove = useCallback(\n (event: React.MouseEvent) => {\n const halfWidth = (event.target as HTMLElement).offsetWidth / 2;\n x.set(event.nativeEvent.offsetX - halfWidth);\n },\n [x]\n );\n\n const ChildComp = React.memo(() => {\n if (!children) return <></>;\n\n return (\n <span\n onMouseMove={handleMouseMove}\n className={cn(\"ds:inline-block\", childClassName)}\n >\n {children}\n </span>\n );\n });\n\n if (animation === \"spec\") {\n return (\n <motion.div\n className={cn(\"ds:relative ds:-me-2.5 ds:inline-block\", className)}\n whileHover=\"hover\"\n initial=\"initial\"\n >\n <motion.div\n variants={{\n initial: { opacity: 0, y: 20, scale: 0 },\n hover: {\n opacity: 1,\n y: -5,\n scale: 1,\n transition: {\n type: \"tween\",\n duration: 0.2,\n ease: \"easeOut\",\n },\n },\n }}\n style={{\n translateX: translateX,\n rotate: rotate,\n whiteSpace: \"nowrap\",\n }}\n className={cn(\n \"ds:absolute ds:-top-2 ds:left-1/2 ds:z-50 ds:flex ds:-translate-x-1/2 ds:-translate-y-full ds:flex-col ds:items-center ds:justify-center ds:rounded-md ds:px-4 ds:py-2 ds:text-xs ds:shadow-xl\",\n tooltipColor\n )}\n >\n <div className=\"ds:relative ds:z-1\">{content}</div>\n </motion.div>\n\n <ChildComp />\n </motion.div>\n );\n }\n\n return (\n <TooltipProvider delayDuration={delayDuration}>\n <DsTooltip>\n <TooltipTrigger asChild>{children}</TooltipTrigger>\n <TooltipContent\n {...props}\n side={position}\n sideOffset={sideOffset}\n className={cn(tooltipAnimation?.className, tooltipColor, {\n \"ds:[&>span>svg]:invisible\": noArrow,\n })}\n >\n {content}\n </TooltipContent>\n </DsTooltip>\n </TooltipProvider>\n );\n});\n"],"names":["Tooltip","React","content","children","sideOffset","delayDuration","className","childClassName","position","noArrow","animation","props","springConfig","tooltipAnimation","useMemo","animationClass","tooltipColor","x","useMotionValue","rotate","useSpring","useTransform","translateX","handleMouseMove","useCallback","event","halfWidth","ChildComp","jsx","cn","Fragment","jsxs","motion","TooltipProvider","DsTooltip","TooltipTrigger","TooltipContent"],"mappings":"+5DA6BaA,EAAUC,EAAM,KAAK,SAAiB,CACjD,QAAAC,EACA,SAAAC,EACA,WAAAC,EAAa,EACb,cAAAC,EAAgB,EAChB,UAAAC,EACA,eAAAC,EACA,SAAAC,EAAW,MACX,QAAAC,EAAU,GACV,UAAAC,EACA,GAAGC,CACL,EAAiB,CACf,MAAMC,EAAe,CAAE,UAAW,IAAK,QAAS,CAAA,EAE1CC,EAAmBC,EAAAA,QAAuC,IACvDC,EAAAA,eAAeL,EAAWJ,CAAS,EACzC,CAACI,EAAWJ,CAAS,CAAC,EAEnBU,EAAeF,EAAAA,QAAgB,IAAM,CACzC,OAAQH,EAAM,MAAA,CACZ,IAAK,UACH,MAAO,mGACT,IAAK,YACH,MAAO,2GACT,IAAK,OACH,MAAO,GACT,IAAK,QACH,MAAO,8FACT,IAAK,WACH,MAAO,0FACT,IAAK,UACH,MAAO,mGACT,IAAK,UACH,MAAO,mGACT,IAAK,QACH,MAAO,2FACT,IAAK,QACH,MAAO,+HACT,QACE,MAAO,+dAAA,CAEb,EAAG,CAACA,GAAO,KAAK,CAAC,EAGXM,EAAIC,EAAAA,eAAe,CAAC,EAEpBC,EAASC,EAAAA,UACbC,EAAAA,aAAaJ,EAAG,CAAC,KAAM,GAAG,EAAG,CAAC,IAAK,EAAE,CAAC,EACtCL,CAAA,EAGIU,EAAaF,EAAAA,UACjBC,EAAAA,aAAaJ,EAAG,CAAC,KAAM,GAAG,EAAG,CAAC,IAAK,EAAE,CAAC,EACtCL,CAAA,EAGIW,EAAkBC,EAAAA,YACrBC,GAA4B,CAC3B,MAAMC,EAAaD,EAAM,OAAuB,YAAc,EAC9DR,EAAE,IAAIQ,EAAM,YAAY,QAAUC,CAAS,CAC7C,EACA,CAACT,CAAC,CAAA,EAGEU,EAAY1B,EAAM,KAAK,IACtBE,EAGHyB,EAAAA,IAAC,OAAA,CACC,YAAaL,EACb,UAAWM,EAAAA,GAAG,kBAAmBtB,CAAc,EAE9C,SAAAJ,CAAA,CAAA,EAPiByB,MAAAE,EAAAA,SAAA,CAAA,CAAE,CAUzB,EAED,OAAIpB,IAAc,OAEdqB,EAAAA,KAACC,EAAAA,OAAO,IAAP,CACC,UAAWH,EAAAA,GAAG,yCAA0CvB,CAAS,EACjE,WAAW,QACX,QAAQ,UAER,SAAA,CAAAsB,EAAAA,IAACI,EAAAA,OAAO,IAAP,CACC,SAAU,CACR,QAAS,CAAE,QAAS,EAAG,EAAG,GAAI,MAAO,CAAA,EACrC,MAAO,CACL,QAAS,EACT,EAAG,GACH,MAAO,EACP,WAAY,CACV,KAAM,QACN,SAAU,GACV,KAAM,SAAA,CACR,CACF,EAEF,MAAO,CACL,WAAAV,EACA,OAAAH,EACA,WAAY,QAAA,EAEd,UAAWU,EAAAA,GACT,iMACAb,CAAA,EAGF,SAAAY,EAAAA,IAAC,MAAA,CAAI,UAAU,qBAAsB,SAAA1B,CAAA,CAAQ,CAAA,CAAA,QAG9CyB,EAAA,CAAA,CAAU,CAAA,CAAA,CAAA,EAMfC,EAAAA,IAACK,EAAAA,gBAAA,CAAgB,cAAA5B,EACf,SAAA0B,OAACG,EAAAA,QAAA,CACC,SAAA,CAAAN,EAAAA,IAACO,EAAAA,eAAA,CAAe,QAAO,GAAE,SAAAhC,CAAA,CAAS,EAClCyB,EAAAA,IAACQ,EAAAA,eAAA,CACE,GAAGzB,EACJ,KAAMH,EACN,WAAAJ,EACA,UAAWyB,EAAAA,GAAGhB,GAAkB,UAAWG,EAAc,CACvD,4BAA6BP,CAAA,CAC9B,EAEA,SAAAP,CAAA,CAAA,CACH,CAAA,CACF,CAAA,CACF,CAEJ,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Tour.cjs","sources":["../../../../src/components/Tour/Tour.tsx"],"sourcesContent":["\"use client\";\n\nimport { cn, Slot, useComposedRefs } from \"@dsui/ui/index\";\nimport {\n autoUpdate,\n flip,\n hide,\n limitShift,\n type Middleware,\n offset,\n arrow as onArrow,\n type Placement,\n shift,\n useFloating,\n} from \"@floating-ui/react-dom\";\nimport { ChevronLeft, ChevronRight, X } from \"lucide-react\";\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { Button } from \"../Button\";\n\nconst ROOT_NAME = \"Tour\";\nconst PORTAL_NAME = \"TourPortal\";\nconst STEP_NAME = \"TourStep\";\nconst ARROW_NAME = \"TourArrow\";\nconst HEADER_NAME = \"TourHeader\";\nconst TITLE_NAME = \"TourTitle\";\nconst DESCRIPTION_NAME = \"TourDescription\";\nconst CLOSE_NAME = \"TourClose\";\nconst PREV_NAME = \"TourPrev\";\nconst NEXT_NAME = \"TourNext\";\nconst SKIP_NAME = \"TourSkip\";\nconst FOOTER_NAME = \"TourFooter\";\n\nconst POINTER_DOWN_OUTSIDE = \"tour.pointerDownOutside\";\nconst INTERACT_OUTSIDE = \"tour.interactOutside\";\nconst OPEN_AUTO_FOCUS = \"tour.openAutoFocus\";\nconst CLOSE_AUTO_FOCUS = \"tour.closeAutoFocus\";\nconst EVENT_OPTIONS = { bubbles: false, cancelable: true };\n\nconst SIDE_OPTIONS = [\"top\", \"right\", \"bottom\", \"left\"] as const;\nconst ALIGN_OPTIONS = [\"start\", \"center\", \"end\"] as const;\n\nconst DEFAULT_ALIGN_OFFSET = 0;\nconst DEFAULT_SIDE_OFFSET = 16;\nconst DEFAULT_SPOTLIGHT_PADDING = 4;\n\ntype Side = (typeof SIDE_OPTIONS)[number];\ntype Align = (typeof ALIGN_OPTIONS)[number];\ntype Direction = \"ltr\" | \"rtl\";\n\ninterface ScrollOffset {\n top?: number;\n bottom?: number;\n left?: number;\n right?: number;\n}\n\ntype Boundary = Element | null;\n\ninterface DivProps extends React.ComponentProps<\"div\"> {\n asChild?: boolean;\n}\n\ntype StepElement = React.ComponentRef<typeof TourStep>;\ntype CloseElement = React.ComponentRef<typeof TourClose>;\ntype PrevElement = React.ComponentRef<typeof TourPrev>;\ntype NextElement = React.ComponentRef<typeof TourNext>;\ntype SkipElement = React.ComponentRef<typeof TourSkip>;\ntype FooterElement = React.ComponentRef<typeof TourFooter>;\n\nconst OPPOSITE_SIDE: Record<Side, Side> = {\n top: \"bottom\",\n right: \"left\",\n bottom: \"top\",\n left: \"right\",\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\n/**\n * @see https://github.com/radix-ui/primitives/blob/main/packages/react/focus-guards/src/focus-guards.tsx\n */\nlet focusGuardCount = 0;\n\nfunction createFocusGuard() {\n const element = document.createElement(\"span\");\n element.setAttribute(\"data-tour-focus-guard\", \"\");\n element.tabIndex = 0;\n element.style.outline = \"none\";\n element.style.opacity = \"0\";\n element.style.position = \"fixed\";\n element.style.pointerEvents = \"none\";\n return element;\n}\n\nfunction useFocusGuards() {\n React.useEffect(() => {\n const edgeGuards = document.querySelectorAll(\"[data-tour-focus-guard]\");\n document.body.insertAdjacentElement(\n \"afterbegin\",\n edgeGuards[0] ?? createFocusGuard()\n );\n document.body.insertAdjacentElement(\n \"beforeend\",\n edgeGuards[1] ?? createFocusGuard()\n );\n focusGuardCount++;\n\n return () => {\n if (focusGuardCount === 1) {\n const guards = document.querySelectorAll(\"[data-tour-focus-guard]\");\n for (const node of guards) {\n node.remove();\n }\n }\n focusGuardCount--;\n };\n }, []);\n}\n\nfunction useFocusTrap(\n containerRef: React.RefObject<HTMLElement | null>,\n enabled: boolean,\n tourOpen: boolean,\n onOpenAutoFocus?: (event: OpenAutoFocusEvent) => void,\n onCloseAutoFocus?: (event: CloseAutoFocusEvent) => void\n) {\n const lastFocusedElementRef = React.useRef<HTMLElement | null>(null);\n const onOpenAutoFocusRef = useAsRef(onOpenAutoFocus);\n const onCloseAutoFocusRef = useAsRef(onCloseAutoFocus);\n const tourOpenRef = useAsRef(tourOpen);\n\n React.useEffect(() => {\n if (!enabled) return;\n\n const container = containerRef.current;\n if (!container) return;\n\n const previouslyFocusedElement =\n document.activeElement as HTMLElement | null;\n\n function getTabbableCandidates() {\n if (!container) return [];\n\n const nodes: HTMLElement[] = [];\n const walker = document.createTreeWalker(\n container,\n NodeFilter.SHOW_ELEMENT,\n {\n acceptNode: (node: Element) => {\n const element = node as HTMLElement;\n const isHiddenInput =\n element.tagName === \"INPUT\" &&\n (element as HTMLInputElement).type === \"hidden\";\n if (element.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP;\n return element.tabIndex >= 0\n ? NodeFilter.FILTER_ACCEPT\n : NodeFilter.FILTER_SKIP;\n },\n }\n );\n while (walker.nextNode()) {\n nodes.push(walker.currentNode as HTMLElement);\n }\n return nodes;\n }\n\n function getTabbableEdges() {\n const candidates = getTabbableCandidates();\n const first = candidates[0];\n const last = candidates[candidates.length - 1];\n return [first, last] as const;\n }\n\n function onFocusIn(event: FocusEvent) {\n if (!container) return;\n\n const target = event.target as HTMLElement | null;\n if (container.contains(target)) {\n lastFocusedElementRef.current = target;\n } else {\n const elementToFocus =\n lastFocusedElementRef.current ?? getTabbableCandidates()[0];\n elementToFocus?.focus({ preventScroll: true });\n }\n }\n\n function onKeyDown(event: KeyboardEvent) {\n if (event.key !== \"Tab\" || event.altKey || event.ctrlKey || event.metaKey)\n return;\n\n const [first, last] = getTabbableEdges();\n const hasTabbableElements = first && last;\n\n if (!hasTabbableElements) {\n if (document.activeElement === container) event.preventDefault();\n return;\n }\n\n if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault();\n first?.focus({ preventScroll: true });\n } else if (event.shiftKey && document.activeElement === first) {\n event.preventDefault();\n last?.focus({ preventScroll: true });\n }\n }\n\n const openAutoFocusEvent = new CustomEvent(OPEN_AUTO_FOCUS, EVENT_OPTIONS);\n if (onOpenAutoFocusRef.current) {\n container.addEventListener(\n OPEN_AUTO_FOCUS,\n onOpenAutoFocusRef.current as EventListener,\n { once: true }\n );\n }\n container.dispatchEvent(openAutoFocusEvent);\n\n if (!openAutoFocusEvent.defaultPrevented) {\n const tabbableCandidates = getTabbableCandidates();\n if (tabbableCandidates.length > 0) {\n tabbableCandidates[0]?.focus({ preventScroll: true });\n } else {\n container.focus({ preventScroll: true });\n }\n }\n\n document.addEventListener(\"focusin\", onFocusIn);\n container.addEventListener(\"keydown\", onKeyDown);\n\n return () => {\n document.removeEventListener(\"focusin\", onFocusIn);\n container.removeEventListener(\"keydown\", onKeyDown);\n\n if (!tourOpenRef.current) {\n setTimeout(() => {\n const closeAutoFocusEvent = new CustomEvent(\n CLOSE_AUTO_FOCUS,\n EVENT_OPTIONS\n );\n if (onCloseAutoFocusRef.current) {\n container.addEventListener(\n CLOSE_AUTO_FOCUS,\n onCloseAutoFocusRef.current as EventListener,\n { once: true }\n );\n }\n container.dispatchEvent(closeAutoFocusEvent);\n\n if (!closeAutoFocusEvent.defaultPrevented) {\n if (\n previouslyFocusedElement &&\n document.body.contains(previouslyFocusedElement)\n ) {\n previouslyFocusedElement.focus({ preventScroll: true });\n }\n }\n\n if (onCloseAutoFocusRef.current) {\n container.removeEventListener(\n CLOSE_AUTO_FOCUS,\n onCloseAutoFocusRef.current as EventListener\n );\n }\n }, 0);\n }\n };\n }, [\n containerRef,\n enabled,\n onOpenAutoFocusRef,\n onCloseAutoFocusRef,\n tourOpenRef,\n ]);\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\nfunction getDataState(open: boolean): string {\n return open ? \"open\" : \"closed\";\n}\n\ninterface StepData {\n target: string | React.RefObject<HTMLElement> | HTMLElement;\n align?: Align;\n alignOffset?: number;\n side?: Side;\n sideOffset?: number;\n collisionBoundary?: Boundary | Boundary[];\n collisionPadding?: number | Partial<Record<Side, number>>;\n arrowPadding?: number;\n sticky?: \"partial\" | \"always\";\n hideWhenDetached?: boolean;\n avoidCollisions?: boolean;\n onStepEnter?: () => void;\n onStepLeave?: () => void;\n required?: boolean;\n}\n\ninterface StoreState {\n open: boolean;\n value: number;\n steps: StepData[];\n maskPath: string;\n spotlightRect: { x: number; y: number; width: number; height: number } | null;\n}\n\ninterface Store {\n subscribe: (callback: () => void) => () => void;\n getState: () => StoreState;\n setState: <K extends keyof StoreState>(\n key: K,\n value: StoreState[K],\n opts?: unknown\n ) => void;\n notify: () => void;\n addStep: (stepData: StepData) => { id: string; index: number };\n removeStep: (id: string) => void;\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\nfunction getTargetElement(\n target: string | React.RefObject<HTMLElement> | HTMLElement\n): HTMLElement | null {\n if (typeof target === \"string\") {\n return document.querySelector(target);\n }\n if (target && \"current\" in target) {\n return target.current;\n }\n if (target instanceof HTMLElement) {\n return target;\n }\n return null;\n}\n\nfunction getDefaultScrollBehavior(): ScrollBehavior {\n if (typeof window === \"undefined\") return \"smooth\";\n return window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches\n ? \"auto\"\n : \"smooth\";\n}\n\nfunction onScrollToElement(\n element: HTMLElement,\n scrollBehavior: ScrollBehavior = getDefaultScrollBehavior(),\n scrollOffset?: ScrollOffset\n) {\n const offset: Required<ScrollOffset> = {\n top: 100,\n bottom: 100,\n left: 0,\n right: 0,\n ...scrollOffset,\n };\n const rect = element.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const viewportWidth = window.innerWidth;\n\n const isInViewport =\n rect.top >= offset.top &&\n rect.bottom <= viewportHeight - offset.bottom &&\n rect.left >= offset.left &&\n rect.right <= viewportWidth - offset.right;\n\n if (!isInViewport) {\n const elementTop = rect.top + window.scrollY;\n const scrollTop = elementTop - offset.top;\n\n window.scrollTo({\n top: Math.max(0, scrollTop),\n behavior: scrollBehavior,\n });\n }\n}\n\nfunction getSideAndAlignFromPlacement(placement: Placement): [Side, Align] {\n const [side, align = \"center\"] = placement.split(\"-\") as [Side, Align?];\n return [side, align];\n}\n\nfunction getPlacement(side: Side, align: Align): Placement {\n if (align === \"center\") {\n return side as Placement;\n }\n return `${side}-${align}` as Placement;\n}\n\nfunction updateMask(\n store: Store,\n targetElement: HTMLElement,\n padding: number = DEFAULT_SPOTLIGHT_PADDING\n) {\n const clientRect = targetElement.getBoundingClientRect();\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n const x = Math.max(0, clientRect.left - padding);\n const y = Math.max(0, clientRect.top - padding);\n const width = Math.min(viewportWidth - x, clientRect.width + padding * 2);\n const height = Math.min(viewportHeight - y, clientRect.height + padding * 2);\n\n const path = `polygon(0% 0%, 0% 100%, ${x}px 100%, ${x}px ${y}px, ${x + width}px ${y}px, ${x + width}px ${y + height}px, ${x}px ${y + height}px, ${x}px 100%, 100% 100%, 100% 0%)`;\n store.setState(\"maskPath\", path);\n store.setState(\"spotlightRect\", { x, y, width, height });\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\ninterface TourContextValue {\n dir: Direction;\n alignOffset: number;\n sideOffset: number;\n spotlightPadding: number;\n dismissible: boolean;\n modal: boolean;\n stepFooter?: React.ReactElement;\n onPointerDownOutside?: (event: PointerDownOutsideEvent) => void;\n onInteractOutside?: (event: InteractOutsideEvent) => void;\n onOpenAutoFocus?: (event: OpenAutoFocusEvent) => void;\n onCloseAutoFocus?: (event: CloseAutoFocusEvent) => void;\n}\n\nconst TourContext = React.createContext<TourContextValue | null>(null);\n\nfunction useTourContext(consumerName: string) {\n const context = React.useContext(TourContext);\n if (!context) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${ROOT_NAME}\\``);\n }\n return context;\n}\n\ninterface StepContextValue {\n arrowX?: number;\n arrowY?: number;\n placedAlign: Align;\n placedSide: Side;\n shouldHideArrow: boolean;\n onArrowChange: (arrow: HTMLSpanElement | null) => void;\n onFooterChange: (footer: FooterElement | null) => void;\n}\n\nconst StepContext = React.createContext<StepContextValue | null>(null);\n\nfunction useStepContext(consumerName: string) {\n const context = React.useContext(StepContext);\n if (!context) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${STEP_NAME}\\``);\n }\n return context;\n}\n\nconst DefaultFooterContext = React.createContext(false);\n\ninterface PortalContextValue {\n portal: HTMLElement | null;\n onPortalChange: (node: HTMLElement | null) => void;\n}\n\nconst PortalContext = React.createContext<PortalContextValue | null>(null);\n\nfunction usePortalContext(consumerName: string) {\n const context = React.useContext(PortalContext);\n if (!context) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${ROOT_NAME}\\``);\n }\n return context;\n}\n\nfunction useScrollLock(enabled: boolean) {\n React.useEffect(() => {\n if (!enabled) return;\n\n const originalStyle = window.getComputedStyle(document.body).overflow;\n const scrollbarWidth =\n window.innerWidth - document.documentElement.clientWidth;\n\n document.body.style.overflow = \"hidden\";\n if (scrollbarWidth > 0) {\n document.body.style.paddingRight = `${scrollbarWidth}px`;\n }\n\n return () => {\n document.body.style.overflow = originalStyle;\n document.body.style.paddingRight = \"\";\n };\n }, [enabled]);\n}\n\ntype PointerDownOutsideEvent = CustomEvent<{ originalEvent: PointerEvent }>;\ntype InteractOutsideEvent = CustomEvent<{\n originalEvent: PointerEvent | FocusEvent;\n}>;\ntype OpenAutoFocusEvent = CustomEvent<Record<string, never>>;\ntype CloseAutoFocusEvent = CustomEvent<Record<string, never>>;\n\ninterface TourRootProps extends DivProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n value?: number;\n defaultValue?: number;\n onValueChange?: (step: number) => void;\n onComplete?: () => void;\n onSkip?: () => void;\n onEscapeKeyDown?: (event: KeyboardEvent) => void;\n onPointerDownOutside?: (event: PointerDownOutsideEvent) => void;\n onInteractOutside?: (event: InteractOutsideEvent) => void;\n onOpenAutoFocus?: (event: OpenAutoFocusEvent) => void;\n onCloseAutoFocus?: (event: CloseAutoFocusEvent) => void;\n dir?: Direction;\n alignOffset?: number;\n sideOffset?: number;\n spotlightPadding?: number;\n autoScroll?: boolean;\n scrollBehavior?: ScrollBehavior;\n scrollOffset?: ScrollOffset;\n dismissible?: boolean;\n modal?: boolean;\n stepFooter?: React.ReactElement;\n}\n\nfunction TourRoot(props: TourRootProps) {\n const {\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n value: valueProp,\n defaultValue = 0,\n onValueChange,\n onComplete,\n onSkip,\n autoScroll = true,\n scrollBehavior = getDefaultScrollBehavior(),\n scrollOffset,\n ...rootProps\n } = props;\n\n const stateRef = useLazyRef<StoreState>(() => ({\n open: openProp ?? defaultOpen,\n value: valueProp ?? defaultValue,\n steps: [],\n maskPath: \"\",\n spotlightRect: null,\n }));\n const listenersRef = useLazyRef<Set<() => void>>(() => new Set());\n const stepIdsMapRef = useLazyRef<Map<string, number>>(() => new Map());\n const stepIdCounterRef = useLazyRef(() => ({ current: 0 }));\n const propsRef = useAsRef({\n valueProp,\n onOpenChange,\n onValueChange,\n onComplete,\n onSkip,\n autoScroll,\n scrollBehavior,\n scrollOffset,\n });\n\n const store: Store = React.useMemo(\n () => ({\n subscribe: (cb) => {\n listenersRef.current.add(cb);\n return () => listenersRef.current.delete(cb);\n },\n getState: () => {\n return stateRef.current;\n },\n setState: (key, value) => {\n if (Object.is(stateRef.current[key], value)) return;\n stateRef.current[key] = value;\n\n if (key === \"open\" && typeof value === \"boolean\") {\n propsRef.current.onOpenChange?.(value);\n\n if (value) {\n if (stateRef.current.steps.length > 0) {\n if (stateRef.current.value >= stateRef.current.steps.length) {\n store.setState(\"value\", 0);\n }\n }\n } else {\n if (\n stateRef.current.value <\n (stateRef.current.steps.length || 0) - 1\n ) {\n propsRef.current.onSkip?.();\n }\n }\n } else if (key === \"value\" && typeof value === \"number\") {\n const prevStep = stateRef.current.steps[stateRef.current.value];\n const nextStep = stateRef.current.steps[value];\n\n prevStep?.onStepLeave?.();\n nextStep?.onStepEnter?.();\n\n if (value >= stateRef.current.steps.length) {\n propsRef.current.onComplete?.();\n\n if (propsRef.current.valueProp !== undefined) {\n propsRef.current.onValueChange?.(value);\n }\n\n store.setState(\"open\", false);\n return;\n }\n\n if (propsRef.current.valueProp !== undefined) {\n propsRef.current.onValueChange?.(value);\n return;\n }\n\n propsRef.current.onValueChange?.(value);\n\n if (nextStep && propsRef.current.autoScroll) {\n const targetElement = getTargetElement(nextStep.target);\n if (targetElement) {\n onScrollToElement(\n targetElement,\n propsRef.current.scrollBehavior,\n propsRef.current.scrollOffset\n );\n }\n }\n }\n\n store.notify();\n },\n notify: () => {\n listenersRef.current.forEach((l) => {\n l();\n });\n },\n addStep: (stepData) => {\n const id = `step-${stepIdCounterRef.current.current++}`;\n const index = stateRef.current.steps.length;\n stepIdsMapRef.current.set(id, index);\n stateRef.current.steps = [...stateRef.current.steps, stepData];\n store.notify();\n return { id, index };\n },\n removeStep: (id) => {\n const index = stepIdsMapRef.current.get(id);\n if (index === undefined) return;\n\n stateRef.current.steps = stateRef.current.steps.filter(\n (_, i) => i !== index\n );\n\n stepIdsMapRef.current.delete(id);\n\n for (const [stepId, stepIndex] of stepIdsMapRef.current.entries()) {\n if (stepIndex > index) {\n stepIdsMapRef.current.set(stepId, stepIndex - 1);\n }\n }\n\n store.notify();\n },\n }),\n [stateRef, listenersRef, stepIdsMapRef, stepIdCounterRef, propsRef]\n );\n\n useIsomorphicLayoutEffect(() => {\n if (openProp !== undefined) {\n store.setState(\"open\", openProp);\n }\n }, [openProp, store]);\n\n useIsomorphicLayoutEffect(() => {\n if (valueProp !== undefined) {\n store.setState(\"value\", valueProp);\n }\n }, [valueProp, store]);\n\n return (\n <StoreContext.Provider value={store}>\n <TourRootImpl {...rootProps} />\n </StoreContext.Provider>\n );\n}\n\ninterface TourRootImplProps\n extends Omit<\n TourRootProps,\n | \"open\"\n | \"defaultOpen\"\n | \"onOpenChange\"\n | \"value\"\n | \"defaultValue\"\n | \"onValueChange\"\n | \"onComplete\"\n | \"onSkip\"\n | \"autoScroll\"\n | \"scrollBehavior\"\n | \"scrollOffset\"\n > {}\n\nfunction TourRootImpl(props: TourRootImplProps) {\n const {\n onEscapeKeyDown,\n onPointerDownOutside,\n onInteractOutside,\n onOpenAutoFocus,\n onCloseAutoFocus,\n dir: dirProp,\n alignOffset = DEFAULT_ALIGN_OFFSET,\n sideOffset = DEFAULT_SIDE_OFFSET,\n spotlightPadding = DEFAULT_SPOTLIGHT_PADDING,\n dismissible = true,\n modal = true,\n stepFooter,\n asChild,\n ...rootImplProps\n } = props;\n\n const store = useStoreContext(\"TourRootImpl\");\n const dir = useDirection(dirProp);\n\n const [portal, setPortal] = React.useState<HTMLElement | null>(null);\n const previouslyFocusedElementRef = React.useRef<HTMLElement | null>(null);\n\n const onEscapeKeyDownRef = useAsRef(onEscapeKeyDown);\n const onCloseAutoFocusRef = useAsRef(onCloseAutoFocus);\n\n React.useEffect(() => {\n function onKeyDown(event: KeyboardEvent) {\n if (store.getState().open && event.key === \"Escape\") {\n if (onEscapeKeyDownRef.current) {\n onEscapeKeyDownRef.current(event);\n if (event.defaultPrevented) return;\n }\n store.setState(\"open\", false);\n }\n }\n\n document.addEventListener(\"keydown\", onKeyDown);\n return () => document.removeEventListener(\"keydown\", onKeyDown);\n }, [store, onEscapeKeyDownRef]);\n\n const open = useStore((state) => state.open);\n const prevOpenRef = React.useRef<boolean | undefined>(undefined);\n\n useIsomorphicLayoutEffect(() => {\n const wasOpen = prevOpenRef.current;\n\n if (open && !wasOpen) {\n previouslyFocusedElementRef.current =\n document.activeElement as HTMLElement | null;\n } else if (!open && wasOpen) {\n setTimeout(() => {\n const container = portal ?? document.body;\n const closeAutoFocusEvent = new CustomEvent(\n CLOSE_AUTO_FOCUS,\n EVENT_OPTIONS\n );\n\n if (onCloseAutoFocusRef.current) {\n container.addEventListener(\n CLOSE_AUTO_FOCUS,\n onCloseAutoFocusRef.current as EventListener,\n { once: true }\n );\n }\n container.dispatchEvent(closeAutoFocusEvent);\n\n if (!closeAutoFocusEvent.defaultPrevented) {\n const elementToFocus = previouslyFocusedElementRef.current;\n if (elementToFocus && document.body.contains(elementToFocus)) {\n elementToFocus.focus({ preventScroll: true });\n }\n }\n\n previouslyFocusedElementRef.current = null;\n }, 0);\n }\n\n prevOpenRef.current = open;\n }, [open, portal, onCloseAutoFocusRef]);\n\n const contextValue = React.useMemo<TourContextValue>(\n () => ({\n dir,\n alignOffset,\n sideOffset,\n spotlightPadding,\n dismissible,\n modal,\n stepFooter,\n onPointerDownOutside,\n onInteractOutside,\n onOpenAutoFocus,\n onCloseAutoFocus,\n }),\n [\n dir,\n alignOffset,\n sideOffset,\n spotlightPadding,\n dismissible,\n modal,\n stepFooter,\n onPointerDownOutside,\n onInteractOutside,\n onOpenAutoFocus,\n onCloseAutoFocus,\n ]\n );\n\n const portalContextValue = React.useMemo<PortalContextValue>(\n () => ({\n portal,\n onPortalChange: setPortal,\n }),\n [portal]\n );\n\n useScrollLock(open && modal);\n\n const RootPrimitive = asChild ? Slot : \"div\";\n\n return (\n <TourContext.Provider value={contextValue}>\n <PortalContext.Provider value={portalContextValue}>\n <RootPrimitive data-slot=\"tour\" dir={dir} {...rootImplProps} />\n </PortalContext.Provider>\n </TourContext.Provider>\n );\n}\n\ninterface TourStepProps extends DivProps {\n target: string | React.RefObject<HTMLElement> | HTMLElement;\n side?: Side;\n sideOffset?: number;\n align?: Align;\n alignOffset?: number;\n collisionBoundary?: Boundary | Boundary[];\n collisionPadding?: number | Partial<Record<Side, number>>;\n arrowPadding?: number;\n sticky?: \"partial\" | \"always\";\n hideWhenDetached?: boolean;\n avoidCollisions?: boolean;\n required?: boolean;\n forceMount?: boolean;\n onStepEnter?: () => void;\n onStepLeave?: () => void;\n}\n\nfunction TourStep(props: TourStepProps) {\n const {\n target,\n side = \"bottom\",\n sideOffset,\n align = \"center\",\n alignOffset,\n collisionBoundary = [],\n collisionPadding = 0,\n arrowPadding = 0,\n sticky = \"partial\",\n hideWhenDetached = false,\n avoidCollisions = true,\n required = false,\n forceMount = false,\n onStepEnter,\n onStepLeave,\n onPointerDownCapture: onPointerDownCaptureProp,\n onFocusCapture: onFocusCaptureProp,\n onBlurCapture: onBlurCaptureProp,\n children,\n className,\n style,\n asChild,\n ...stepProps\n } = props;\n\n const store = useStoreContext(STEP_NAME);\n\n const [arrow, setArrow] = React.useState<HTMLSpanElement | null>(null);\n const [footer, setFooter] = React.useState<FooterElement | null>(null);\n\n const stepRef = React.useRef<StepElement | null>(null);\n const stepIdRef = React.useRef<string>(\"\");\n const stepOrderRef = React.useRef<number>(-1);\n const isPointerInsideReactTreeRef = React.useRef(false);\n const isFocusInsideReactTreeRef = React.useRef(false);\n\n const open = useStore((state) => state.open);\n const value = useStore((state) => state.value);\n const steps = useStore((state) => state.steps);\n const context = useTourContext(STEP_NAME);\n\n const resolvedSideOffset = sideOffset ?? context.sideOffset;\n const resolvedAlignOffset = alignOffset ?? context.alignOffset;\n\n useIsomorphicLayoutEffect(() => {\n const { id, index } = store.addStep({\n target,\n align,\n alignOffset: resolvedAlignOffset,\n side,\n sideOffset: resolvedSideOffset,\n collisionBoundary,\n collisionPadding,\n arrowPadding,\n sticky,\n hideWhenDetached,\n avoidCollisions,\n onStepEnter,\n onStepLeave,\n required,\n });\n stepIdRef.current = id;\n stepOrderRef.current = index;\n\n return () => {\n store.removeStep(stepIdRef.current);\n };\n }, [\n target,\n side,\n resolvedSideOffset,\n align,\n resolvedAlignOffset,\n collisionPadding,\n arrowPadding,\n sticky,\n hideWhenDetached,\n avoidCollisions,\n required,\n onStepEnter,\n onStepLeave,\n store,\n ]);\n\n const stepData = steps[value];\n const targetElement = stepData ? getTargetElement(stepData.target) : null;\n\n const isCurrentStep = stepOrderRef.current === value;\n\n const middleware = React.useMemo(() => {\n if (!stepData) return [];\n\n const mainAxisOffset = stepData.sideOffset ?? resolvedSideOffset;\n const crossAxisOffset = stepData.alignOffset ?? resolvedAlignOffset;\n\n const padding =\n typeof stepData.collisionPadding === \"number\"\n ? stepData.collisionPadding\n : {\n top: stepData.collisionPadding?.top ?? 0,\n right: stepData.collisionPadding?.right ?? 0,\n bottom: stepData.collisionPadding?.bottom ?? 0,\n left: stepData.collisionPadding?.left ?? 0,\n };\n\n const boundary = Array.isArray(stepData.collisionBoundary)\n ? stepData.collisionBoundary\n : stepData.collisionBoundary\n ? [stepData.collisionBoundary]\n : [];\n const hasExplicitBoundaries = boundary.length > 0;\n\n const detectOverflowOptions = {\n padding,\n boundary: boundary.filter((b): b is Element => b !== null),\n altBoundary: hasExplicitBoundaries,\n };\n\n return [\n offset({\n mainAxis: mainAxisOffset,\n alignmentAxis: crossAxisOffset,\n }),\n stepData.avoidCollisions &&\n shift({\n mainAxis: true,\n crossAxis: false,\n limiter: stepData.sticky === \"partial\" ? limitShift() : undefined,\n ...detectOverflowOptions,\n }),\n stepData.avoidCollisions && flip({ ...detectOverflowOptions }),\n arrow && onArrow({ element: arrow, padding: stepData.arrowPadding }),\n stepData.hideWhenDetached &&\n hide({\n strategy: \"referenceHidden\",\n ...detectOverflowOptions,\n }),\n ].filter(Boolean) as Middleware[];\n }, [stepData, resolvedSideOffset, resolvedAlignOffset, arrow]);\n\n const placement = getPlacement(\n stepData?.side ?? side,\n stepData?.align ?? align\n );\n\n const {\n refs,\n floatingStyles,\n placement: finalPlacement,\n middlewareData,\n } = useFloating({\n placement,\n middleware,\n strategy: \"fixed\",\n whileElementsMounted: autoUpdate,\n elements: {\n reference: targetElement,\n },\n });\n\n const composedRef = useComposedRefs(refs.setFloating, stepRef);\n\n const [placedSide, placedAlign] =\n getSideAndAlignFromPlacement(finalPlacement);\n\n const arrowX = middlewareData.arrow?.x;\n const arrowY = middlewareData.arrow?.y;\n const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n const isHidden = hideWhenDetached && middlewareData.hide?.referenceHidden;\n\n const stepContextValue = React.useMemo<StepContextValue>(\n () => ({\n arrowX,\n arrowY,\n placedAlign,\n placedSide,\n shouldHideArrow: cannotCenterArrow,\n onArrowChange: setArrow,\n onFooterChange: setFooter,\n }),\n [arrowX, arrowY, placedSide, placedAlign, cannotCenterArrow]\n );\n\n React.useEffect(() => {\n if (open && targetElement && isCurrentStep) {\n updateMask(store, targetElement, context.spotlightPadding);\n\n let rafId: number | null = null;\n\n function onResize() {\n if (targetElement) {\n updateMask(store, targetElement, context.spotlightPadding);\n }\n }\n\n function onScroll() {\n if (rafId !== null) return;\n rafId = requestAnimationFrame(() => {\n if (targetElement) {\n updateMask(store, targetElement, context.spotlightPadding);\n }\n rafId = null;\n });\n }\n\n window.addEventListener(\"resize\", onResize);\n window.addEventListener(\"scroll\", onScroll, { passive: true });\n return () => {\n window.removeEventListener(\"resize\", onResize);\n window.removeEventListener(\"scroll\", onScroll);\n if (rafId !== null) {\n cancelAnimationFrame(rafId);\n }\n };\n }\n }, [open, targetElement, isCurrentStep, store, context.spotlightPadding]);\n\n React.useEffect(() => {\n if (!open || !isCurrentStep) return;\n\n const stepElement = stepRef.current;\n if (!stepElement) return;\n\n const ownerDocument = stepElement.ownerDocument;\n\n function onPointerDown(event: PointerEvent) {\n if (event.target && !isPointerInsideReactTreeRef.current) {\n const pointerDownOutsideEvent = new CustomEvent(POINTER_DOWN_OUTSIDE, {\n ...EVENT_OPTIONS,\n detail: { originalEvent: event },\n });\n\n context.onPointerDownOutside?.(pointerDownOutsideEvent);\n\n const interactOutsideEvent = new CustomEvent(INTERACT_OUTSIDE, {\n ...EVENT_OPTIONS,\n detail: { originalEvent: event },\n });\n context.onInteractOutside?.(interactOutsideEvent);\n\n if (\n !pointerDownOutsideEvent.defaultPrevented &&\n !interactOutsideEvent.defaultPrevented &&\n context.dismissible\n ) {\n store.setState(\"open\", false);\n }\n }\n\n isPointerInsideReactTreeRef.current = false;\n }\n\n const timerId = window.setTimeout(() => {\n ownerDocument.addEventListener(\"pointerdown\", onPointerDown);\n }, 0);\n\n return () => {\n window.clearTimeout(timerId);\n ownerDocument.removeEventListener(\"pointerdown\", onPointerDown);\n };\n }, [open, isCurrentStep, store, context]);\n\n React.useEffect(() => {\n if (!open || !isCurrentStep) return;\n\n const stepElement = stepRef.current;\n if (!stepElement) return;\n\n const ownerDocument = stepElement.ownerDocument;\n\n function onFocusIn(event: FocusEvent) {\n const target = event.target as HTMLElement;\n\n const isFocusInStep = stepElement?.contains(target);\n const isFocusInTarget = targetElement?.contains(target);\n\n if (\n event.target &&\n !isFocusInsideReactTreeRef.current &&\n !isFocusInStep &&\n !isFocusInTarget\n ) {\n const interactOutsideEvent = new CustomEvent(INTERACT_OUTSIDE, {\n ...EVENT_OPTIONS,\n detail: { originalEvent: event },\n });\n\n context.onInteractOutside?.(interactOutsideEvent);\n\n if (!interactOutsideEvent.defaultPrevented && context.dismissible) {\n store.setState(\"open\", false);\n }\n }\n }\n\n ownerDocument.addEventListener(\"focusin\", onFocusIn);\n\n return () => {\n ownerDocument.removeEventListener(\"focusin\", onFocusIn);\n };\n }, [open, isCurrentStep, store, context, targetElement]);\n\n const onPointerDownCapture = React.useCallback(\n (event: React.PointerEvent<StepElement>) => {\n onPointerDownCaptureProp?.(event);\n isPointerInsideReactTreeRef.current = true;\n },\n [onPointerDownCaptureProp]\n );\n\n const onFocusCapture = React.useCallback(\n (event: React.FocusEvent<StepElement>) => {\n onFocusCaptureProp?.(event);\n isFocusInsideReactTreeRef.current = true;\n },\n [onFocusCaptureProp]\n );\n\n const onBlurCapture = React.useCallback(\n (event: React.FocusEvent<StepElement>) => {\n onBlurCaptureProp?.(event);\n isFocusInsideReactTreeRef.current = false;\n },\n [onBlurCaptureProp]\n );\n\n React.useEffect(() => {\n if (!open || !isCurrentStep || !targetElement) return;\n\n function onTargetPointerDownCapture() {\n isPointerInsideReactTreeRef.current = true;\n }\n\n function onTargetFocusCapture() {\n isFocusInsideReactTreeRef.current = true;\n }\n\n function onTargetBlurCapture() {\n isFocusInsideReactTreeRef.current = false;\n }\n\n targetElement.addEventListener(\n \"pointerdown\",\n onTargetPointerDownCapture,\n true\n );\n targetElement.addEventListener(\"focus\", onTargetFocusCapture, true);\n targetElement.addEventListener(\"blur\", onTargetBlurCapture, true);\n\n return () => {\n targetElement.removeEventListener(\n \"pointerdown\",\n onTargetPointerDownCapture,\n true\n );\n targetElement.removeEventListener(\"focus\", onTargetFocusCapture, true);\n targetElement.removeEventListener(\"blur\", onTargetBlurCapture, true);\n };\n }, [open, isCurrentStep, targetElement]);\n\n useFocusGuards();\n useFocusTrap(\n stepRef,\n open && isCurrentStep,\n open,\n context.onOpenAutoFocus,\n context.onCloseAutoFocus\n );\n\n if (!open || !stepData || (!targetElement && !forceMount) || !isCurrentStep) {\n return null;\n }\n\n const StepPrimitive = asChild ? Slot : \"div\";\n\n return (\n <StepContext.Provider value={stepContextValue}>\n <StepPrimitive\n ref={composedRef}\n data-slot=\"tour-step\"\n data-side={placedSide}\n data-align={placedAlign}\n dir={context.dir}\n tabIndex={-1}\n {...stepProps}\n onPointerDownCapture={onPointerDownCapture}\n onFocusCapture={onFocusCapture}\n onBlurCapture={onBlurCapture}\n className={cn(\n \"ds:fixed ds:z-50 ds:flex ds:w-80 ds:flex-col ds:gap-4 ds:rounded-lg ds:border ds:bg-popover ds:p-4 ds:text-popover-foreground ds:shadow-md ds:outline-none\",\n className\n )}\n style={{\n ...style,\n ...floatingStyles,\n visibility: isHidden ? \"hidden\" : undefined,\n pointerEvents: isHidden ? \"none\" : undefined,\n } as React.CSSProperties}\n >\n {children}\n {!footer && (\n <DefaultFooterContext.Provider value={true}>\n {context.stepFooter}\n </DefaultFooterContext.Provider>\n )}\n </StepPrimitive>\n </StepContext.Provider>\n );\n}\n\ninterface TourSpotlightProps extends DivProps {\n forceMount?: boolean;\n}\n\nfunction TourSpotlight(props: TourSpotlightProps) {\n const {\n asChild,\n className,\n style,\n forceMount = false,\n ...backdropProps\n } = props;\n\n const open = useStore((state) => state.open);\n const maskPath = useStore((state) => state.maskPath);\n\n if (!open && !forceMount) return null;\n\n const SpotlightPrimitive = asChild ? Slot : \"div\";\n\n return (\n <SpotlightPrimitive\n data-slot=\"tour-spotlight\"\n data-state={getDataState(open)}\n {...backdropProps}\n className={cn(\n \"ds:data-[state=closed]:fade-out-0 ds:data-[state=open]:fade-in-0 ds:fixed ds:inset-0 ds:z-40 ds:bg-black/80 ds:data-[state=closed]:animate-out ds:data-[state=open]:animate-in\",\n className\n )}\n style={{\n clipPath: maskPath,\n ...style,\n }}\n />\n );\n}\n\ninterface TourSpotlightRingProps extends DivProps {\n forceMount?: boolean;\n}\n\nfunction TourSpotlightRing(props: TourSpotlightRingProps) {\n const { asChild, className, style, forceMount = false, ...ringProps } = props;\n\n const open = useStore((state) => state.open);\n const spotlightRect = useStore((state) => state.spotlightRect);\n\n if (!open && !forceMount) return null;\n if (!spotlightRect) return null;\n\n const RingPrimitive = asChild ? Slot : \"div\";\n\n return (\n <RingPrimitive\n data-slot=\"tour-spotlight-ring\"\n data-state={getDataState(open)}\n {...ringProps}\n className={cn(\n \"ds:pointer-events-none ds:fixed ds:z-40 ds:border-ring ds:ring-[3px] ds:ring-ring/50\",\n className\n )}\n style={{\n left: spotlightRect.x,\n top: spotlightRect.y,\n width: spotlightRect.width,\n height: spotlightRect.height,\n ...style,\n }}\n />\n );\n}\n\ninterface TourPortalProps {\n children?: React.ReactNode;\n container?: HTMLElement | null;\n}\n\nfunction TourPortal(props: TourPortalProps) {\n const { children, container } = props;\n\n const portalContext = usePortalContext(PORTAL_NAME);\n\n const [mounted, setMounted] = React.useState(false);\n\n useIsomorphicLayoutEffect(() => {\n setMounted(true);\n\n const node = container ?? document.body;\n\n portalContext?.onPortalChange(node);\n return () => {\n portalContext?.onPortalChange(null);\n };\n }, [container, portalContext]);\n\n if (!mounted) return null;\n\n const portalContainer = container ?? portalContext?.portal ?? document.body;\n\n return ReactDOM.createPortal(children, portalContainer);\n}\n\ninterface TourArrowProps extends React.ComponentProps<\"svg\"> {\n width?: number;\n height?: number;\n asChild?: boolean;\n}\n\nfunction TourArrow(props: TourArrowProps) {\n const {\n width = 10,\n height = 5,\n className,\n children,\n asChild,\n ...arrowProps\n } = props;\n\n const stepContext = useStepContext(ARROW_NAME);\n const baseSide = OPPOSITE_SIDE[stepContext.placedSide];\n\n return (\n <span\n ref={stepContext.onArrowChange}\n data-slot=\"tour-arrow\"\n style={{\n position: \"absolute\",\n left:\n stepContext.arrowX != null ? `${stepContext.arrowX}px` : undefined,\n top: stepContext.arrowY != null ? `${stepContext.arrowY}px` : undefined,\n [baseSide]: 0,\n transformOrigin: {\n top: \"\",\n right: \"0 0\",\n bottom: \"center 0\",\n left: \"100% 0\",\n }[stepContext.placedSide],\n transform: {\n top: \"translateY(100%)\",\n right: \"translateY(50%) rotate(90deg) translateX(-50%)\",\n bottom: \"rotate(180deg)\",\n left: \"translateY(50%) rotate(-90deg) translateX(50%)\",\n }[stepContext.placedSide],\n visibility: stepContext.shouldHideArrow ? \"hidden\" : undefined,\n }}\n >\n <svg\n viewBox=\"0 0 30 10\"\n preserveAspectRatio=\"none\"\n width={width}\n height={height}\n {...arrowProps}\n className={cn(\"ds:block ds:fill-popover ds:stroke-border\", className)}\n >\n {asChild ? children : <polygon points=\"0,0 30,0 15,10\" />}\n </svg>\n </span>\n );\n}\n\nfunction TourHeader(props: DivProps) {\n const { asChild, className, ...headerProps } = props;\n\n const context = useTourContext(HEADER_NAME);\n\n const HeaderPrimitive = asChild ? Slot : \"div\";\n\n return (\n <HeaderPrimitive\n data-slot=\"tour-header\"\n dir={context.dir}\n {...headerProps}\n className={cn(\n \"ds:flex ds:flex-col ds:gap-1.5 ds:text-center ds:sm:text-left\",\n className\n )}\n />\n );\n}\n\nfunction TourTitle(props: DivProps) {\n const { asChild, className, ...titleProps } = props;\n\n const context = useTourContext(TITLE_NAME);\n\n const TitlePrimitive = asChild ? Slot : \"div\";\n\n return (\n <TitlePrimitive\n data-slot=\"tour-title\"\n dir={context.dir}\n {...titleProps}\n className={cn(\n \"ds:font-semibold ds:text-lg ds:leading-none ds:tracking-tight\",\n className\n )}\n />\n );\n}\n\nfunction TourDescription(props: DivProps) {\n const { asChild, className, ...descriptionProps } = props;\n\n const context = useTourContext(DESCRIPTION_NAME);\n\n const DescriptionPrimitive = asChild ? Slot : \"div\";\n\n return (\n <DescriptionPrimitive\n data-slot=\"tour-description\"\n dir={context.dir}\n {...descriptionProps}\n className={cn(\"ds:text-muted-foreground ds:text-sm\", className)}\n />\n );\n}\n\ninterface TourCloseProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n}\n\nfunction TourClose(props: TourCloseProps) {\n const {\n asChild,\n className,\n onClick: onClickProp,\n ...closeButtonProps\n } = props;\n\n const store = useStoreContext(CLOSE_NAME);\n\n const onClick = React.useCallback(\n (event: React.MouseEvent<CloseElement>) => {\n onClickProp?.(event);\n if (event.defaultPrevented) return;\n\n store.setState(\"open\", false);\n },\n [store, onClickProp]\n );\n\n const ClosePrimitive = asChild ? Slot : \"button\";\n\n return (\n <ClosePrimitive\n type=\"button\"\n aria-label=\"Close tour\"\n className={cn(\n \"ds:absolute ds:top-4 ds:right-4 ds:rounded-xs ds:opacity-70 ds:ring-offset-background ds:transition-opacity ds:hover:opacity-100 ds:focus:outline-hidden ds:focus:ring-2 ds:focus:ring-ring ds:focus:ring-offset-2 ds:disabled:pointer-events-none ds:[&_svg:not([class*='size-'])]:size-4 ds:[&_svg]:pointer-events-none ds:[&_svg]:shrink-0\",\n className\n )}\n onClick={onClick}\n {...closeButtonProps}\n >\n <X className=\"ds:size-4\" />\n </ClosePrimitive>\n );\n}\n\nfunction TourPrev(props: React.ComponentProps<typeof Button>) {\n const { children, onClick: onClickProp, ...prevButtonProps } = props;\n\n const store = useStoreContext(PREV_NAME);\n const value = useStore((state) => state.value);\n\n const onClick = React.useCallback(\n (event: React.MouseEvent<PrevElement>) => {\n onClickProp?.(event);\n if (event.defaultPrevented) return;\n\n if (value > 0) {\n store.setState(\"value\", value - 1);\n }\n },\n [value, store, onClickProp]\n );\n\n return (\n <Button\n type=\"button\"\n aria-label=\"Previous step\"\n data-slot=\"tour-prev\"\n variant=\"outline\"\n {...prevButtonProps}\n onClick={onClick}\n disabled={value === 0}\n >\n {children ?? (\n <>\n <ChevronLeft />\n Previous\n </>\n )}\n </Button>\n );\n}\n\nfunction TourNext(props: React.ComponentProps<typeof Button>) {\n const { children, onClick: onClickProp, ...nextButtonProps } = props;\n const store = useStoreContext(NEXT_NAME);\n const value = useStore((state) => state.value);\n const steps = useStore((state) => state.steps);\n\n const isLastStep = value === steps.length - 1;\n\n const onClick = React.useCallback(\n (event: React.MouseEvent<NextElement>) => {\n onClickProp?.(event);\n if (event.defaultPrevented) return;\n\n store.setState(\"value\", value + 1);\n },\n [value, store, onClickProp]\n );\n\n return (\n <Button\n type=\"button\"\n aria-label=\"Next step\"\n data-slot=\"tour-next\"\n {...nextButtonProps}\n onClick={onClick}\n >\n {children ?? (\n <>\n {isLastStep ? \"Finish\" : \"Next\"}\n {!isLastStep && <ChevronRight />}\n </>\n )}\n </Button>\n );\n}\n\nfunction TourSkip(props: React.ComponentProps<typeof Button>) {\n const { children, onClick: onClickProp, ...skipButtonProps } = props;\n\n const store = useStoreContext(SKIP_NAME);\n\n const onClick = React.useCallback(\n (event: React.MouseEvent<SkipElement>) => {\n onClickProp?.(event);\n if (event.defaultPrevented) return;\n\n store.setState(\"open\", false);\n },\n [store, onClickProp]\n );\n\n return (\n <Button\n type=\"button\"\n aria-label=\"Skip tour\"\n data-slot=\"tour-skip\"\n variant=\"outline\"\n {...skipButtonProps}\n onClick={onClick}\n >\n {children ?? \"Skip\"}\n </Button>\n );\n}\n\ninterface TourStepCounterProps extends DivProps {\n format?: (current: number, total: number) => string;\n}\n\nfunction TourStepCounter(props: TourStepCounterProps) {\n const {\n format = (current, total) => `${current} / ${total}`,\n asChild,\n className,\n children,\n ...stepCounterProps\n } = props;\n\n const value = useStore((state) => state.value);\n const steps = useStore((state) => state.steps);\n\n const StepCounterPrimitive = asChild ? Slot : \"div\";\n\n return (\n <StepCounterPrimitive\n data-slot=\"tour-step-counter\"\n {...stepCounterProps}\n className={cn(\"ds:text-muted-foreground ds:text-sm\", className)}\n >\n {children ?? format(value + 1, steps.length)}\n </StepCounterPrimitive>\n );\n}\n\nfunction TourFooter(props: DivProps) {\n const { asChild, className, ref, ...footerProps } = props;\n\n const stepContext = useStepContext(FOOTER_NAME);\n const hasDefaultFooter = React.useContext(DefaultFooterContext);\n const context = useTourContext(FOOTER_NAME);\n\n const composedRef = useComposedRefs(\n ref,\n hasDefaultFooter ? undefined : stepContext.onFooterChange\n );\n\n const FooterPrimitive = asChild ? Slot : \"div\";\n\n return (\n <FooterPrimitive\n data-slot=\"tour-footer\"\n dir={context.dir}\n {...footerProps}\n ref={composedRef}\n className={cn(\n \"ds:flex ds:flex-col-reverse ds:gap-2 ds:sm:flex-row ds:sm:justify-end\",\n className\n )}\n />\n );\n}\n\nexport {\n TourRoot as Root,\n TourPortal as Portal,\n TourSpotlight as Spotlight,\n TourSpotlightRing as SpotlightRing,\n TourStep as Step,\n TourArrow as Arrow,\n TourHeader as Header,\n TourTitle as Title,\n TourDescription as Description,\n TourClose as Close,\n TourPrev as Prev,\n TourNext as Next,\n TourSkip as Skip,\n TourStepCounter as StepCounter,\n TourFooter as Footer,\n //\n TourRoot as Tour,\n TourPortal,\n TourSpotlight,\n TourSpotlightRing,\n TourStep,\n TourArrow,\n TourHeader,\n TourTitle,\n TourDescription,\n TourClose,\n TourPrev,\n TourNext,\n TourSkip,\n TourStepCounter,\n TourFooter,\n //\n type TourRootProps as TourProps,\n};\n"],"names":["ROOT_NAME","PORTAL_NAME","STEP_NAME","ARROW_NAME","HEADER_NAME","TITLE_NAME","DESCRIPTION_NAME","CLOSE_NAME","PREV_NAME","NEXT_NAME","SKIP_NAME","FOOTER_NAME","POINTER_DOWN_OUTSIDE","INTERACT_OUTSIDE","OPEN_AUTO_FOCUS","CLOSE_AUTO_FOCUS","EVENT_OPTIONS","DEFAULT_ALIGN_OFFSET","DEFAULT_SIDE_OFFSET","DEFAULT_SPOTLIGHT_PADDING","OPPOSITE_SIDE","useIsomorphicLayoutEffect","React","useAsRef","props","ref","useLazyRef","fn","focusGuardCount","createFocusGuard","element","useFocusGuards","edgeGuards","guards","node","useFocusTrap","containerRef","enabled","tourOpen","onOpenAutoFocus","onCloseAutoFocus","lastFocusedElementRef","onOpenAutoFocusRef","onCloseAutoFocusRef","tourOpenRef","container","previouslyFocusedElement","getTabbableCandidates","nodes","walker","isHiddenInput","getTabbableEdges","candidates","first","last","onFocusIn","event","target","onKeyDown","openAutoFocusEvent","tabbableCandidates","closeAutoFocusEvent","DirectionContext","useDirection","dirProp","contextDir","getDataState","open","useStore","selector","store","useStoreContext","getSnapshot","getTargetElement","getDefaultScrollBehavior","onScrollToElement","scrollBehavior","scrollOffset","offset","rect","viewportHeight","viewportWidth","scrollTop","getSideAndAlignFromPlacement","placement","side","align","getPlacement","updateMask","targetElement","padding","clientRect","x","y","width","height","path","StoreContext","consumerName","context","TourContext","useTourContext","StepContext","useStepContext","DefaultFooterContext","PortalContext","usePortalContext","useScrollLock","originalStyle","scrollbarWidth","TourRoot","openProp","defaultOpen","onOpenChange","valueProp","defaultValue","onValueChange","onComplete","onSkip","autoScroll","rootProps","stateRef","listenersRef","stepIdsMapRef","stepIdCounterRef","propsRef","cb","key","value","prevStep","nextStep","l","stepData","id","index","_","i","stepId","stepIndex","jsx","TourRootImpl","onEscapeKeyDown","onPointerDownOutside","onInteractOutside","alignOffset","sideOffset","spotlightPadding","dismissible","modal","stepFooter","asChild","rootImplProps","dir","portal","setPortal","previouslyFocusedElementRef","onEscapeKeyDownRef","state","prevOpenRef","wasOpen","elementToFocus","contextValue","portalContextValue","RootPrimitive","Slot","TourStep","collisionBoundary","collisionPadding","arrowPadding","sticky","hideWhenDetached","avoidCollisions","required","forceMount","onStepEnter","onStepLeave","onPointerDownCaptureProp","onFocusCaptureProp","onBlurCaptureProp","children","className","style","stepProps","arrow","setArrow","footer","setFooter","stepRef","stepIdRef","stepOrderRef","isPointerInsideReactTreeRef","isFocusInsideReactTreeRef","steps","resolvedSideOffset","resolvedAlignOffset","isCurrentStep","middleware","mainAxisOffset","crossAxisOffset","boundary","hasExplicitBoundaries","detectOverflowOptions","b","shift","limitShift","flip","onArrow","hide","refs","floatingStyles","finalPlacement","middlewareData","useFloating","autoUpdate","composedRef","useComposedRefs","placedSide","placedAlign","arrowX","arrowY","cannotCenterArrow","isHidden","stepContextValue","onResize","onScroll","rafId","stepElement","ownerDocument","onPointerDown","pointerDownOutsideEvent","interactOutsideEvent","timerId","isFocusInStep","isFocusInTarget","onPointerDownCapture","onFocusCapture","onBlurCapture","onTargetPointerDownCapture","onTargetFocusCapture","onTargetBlurCapture","StepPrimitive","jsxs","cn","TourSpotlight","backdropProps","maskPath","SpotlightPrimitive","TourSpotlightRing","ringProps","spotlightRect","RingPrimitive","TourPortal","portalContext","mounted","setMounted","portalContainer","ReactDOM","TourArrow","arrowProps","stepContext","baseSide","TourHeader","headerProps","HeaderPrimitive","TourTitle","titleProps","TitlePrimitive","TourDescription","descriptionProps","DescriptionPrimitive","TourClose","onClickProp","closeButtonProps","onClick","ClosePrimitive","X","TourPrev","prevButtonProps","Button","Fragment","ChevronLeft","TourNext","nextButtonProps","isLastStep","ChevronRight","TourSkip","skipButtonProps","TourStepCounter","format","current","total","stepCounterProps","StepCounterPrimitive","TourFooter","footerProps","hasDefaultFooter","FooterPrimitive"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TourWrapper.cjs","sources":["../../../../src/components/Tour/TourWrapper.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n Root,\n Portal,\n Step,\n Arrow,\n Header,\n Title,\n Description,\n Close,\n Footer,\n Prev,\n Next,\n Skip,\n StepCounter,\n Spotlight,\n SpotlightRing,\n} from \"./Tour\";\nimport type { TourProps } from \"./Tour\";\n\ninterface TourStep {\n target: string | React.RefObject<HTMLElement> | HTMLElement;\n title: string;\n description?: string;\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n align?: \"start\" | \"center\" | \"end\";\n alignOffset?: number;\n sideOffset?: number;\n collisionBoundary?: Element | null | Array<Element | null>;\n collisionPadding?:\n | number\n | Partial<Record<\"top\" | \"right\" | \"bottom\" | \"left\", number>>;\n arrowPadding?: number;\n sticky?: \"partial\" | \"always\";\n hideWhenDetached?: boolean;\n avoidCollisions?: boolean;\n required?: boolean;\n forceMount?: boolean;\n hideArrow?: boolean;\n hideClose?: boolean;\n hideFooter?: boolean;\n hideSkip?: boolean;\n hideStepCounter?: boolean;\n content?: React.ReactNode;\n onStepEnter?: () => void;\n onStepLeave?: () => void;\n}\n\ninterface ButtonConfig {\n skip?: string;\n prev?: string;\n next?: string;\n finish?: string;\n}\n\ninterface TourWrapperProps extends Omit<TourProps, \"children\"> {\n steps?: TourStep[];\n children?: React.ReactNode;\n showSpotlight?: boolean;\n showSpotlightRing?: boolean;\n spotlightClassName?: string;\n spotlightRingClassName?: string;\n buttonConfig?: ButtonConfig;\n}\n\nfunction TourWrapper({\n steps,\n children,\n showSpotlight = true,\n showSpotlightRing = true,\n spotlightClassName,\n spotlightRingClassName,\n buttonConfig,\n ...props\n}: TourWrapperProps) {\n return (\n <Root {...props}>\n <Portal>\n {showSpotlight && (\n <>\n <Spotlight className={spotlightClassName} />\n {showSpotlightRing && (\n <SpotlightRing className={spotlightRingClassName} />\n )}\n </>\n )}\n\n {steps &&\n steps.length > 0 &&\n steps.map((step, index) => (\n <Step\n key={index}\n target={step.target}\n side={step.side}\n align={step.align}\n alignOffset={step.alignOffset}\n sideOffset={step.sideOffset}\n collisionBoundary={step.collisionBoundary}\n collisionPadding={step.collisionPadding}\n arrowPadding={step.arrowPadding}\n sticky={step.sticky}\n hideWhenDetached={step.hideWhenDetached}\n avoidCollisions={step.avoidCollisions}\n required={step.required}\n forceMount={step.forceMount}\n onStepEnter={step.onStepEnter}\n onStepLeave={step.onStepLeave}\n >\n {!step.hideArrow && <Arrow />}\n <Header>\n <Title>{step.title}</Title>\n {!step.hideClose && <Close />}\n </Header>\n {step.description && (\n <Description>{step.description}</Description>\n )}\n {step.content && <div className=\"ds:py-2\">{step.content}</div>}\n {!step.hideFooter && (\n <Footer>\n <div className=\"ds:flex ds:items-center ds:gap-2\">\n {!step.hideStepCounter && <StepCounter />}\n {!step.hideSkip &&\n index === 0 &&\n (buttonConfig?.skip ? (\n <Skip>{buttonConfig.skip}</Skip>\n ) : (\n <Skip />\n ))}\n </div>\n <div className=\"ds:flex ds:items-center ds:gap-2\">\n {index > 0 &&\n (buttonConfig?.prev ? (\n <Prev>{buttonConfig.prev}</Prev>\n ) : (\n <Prev />\n ))}\n {buttonConfig?.next ? (\n index === steps.length - 1 && buttonConfig?.finish ? (\n <Next>{buttonConfig.finish}</Next>\n ) : (\n <Next>{buttonConfig.next}</Next>\n )\n ) : (\n <Next />\n )}\n </div>\n </Footer>\n )}\n </Step>\n ))}\n </Portal>\n\n {children}\n </Root>\n );\n}\n\nexport { TourWrapper };\nexport type { TourWrapperProps, TourStep, ButtonConfig };\n"],"names":["TourWrapper","steps","children","showSpotlight","showSpotlightRing","spotlightClassName","spotlightRingClassName","buttonConfig","props","jsxs","Root","Portal","Fragment","jsx","Spotlight","SpotlightRing","step","index","Step","Arrow","Header","Title","Close","Description","Footer","StepCounter","Skip","Prev","Next"],"mappings":"oKAmEA,SAASA,EAAY,CACnB,MAAAC,EACA,SAAAC,EACA,cAAAC,EAAgB,GAChB,kBAAAC,EAAoB,GACpB,mBAAAC,EACA,uBAAAC,EACA,aAAAC,EACA,GAAGC,CACL,EAAqB,CACnB,OACEC,EAAAA,KAACC,EAAAA,KAAA,CAAM,GAAGF,EACR,SAAA,CAAAC,OAACE,EAAAA,OAAA,CACE,SAAA,CAAAR,GACCM,EAAAA,KAAAG,WAAA,CACE,SAAA,CAAAC,EAAAA,IAACC,EAAAA,UAAA,CAAU,UAAWT,CAAA,CAAoB,EACzCD,GACCS,EAAAA,IAACE,EAAAA,cAAA,CAAc,UAAWT,CAAA,CAAwB,CAAA,EAEtD,EAGDL,GACCA,EAAM,OAAS,GACfA,EAAM,IAAI,CAACe,EAAMC,IACfR,EAAAA,KAACS,EAAAA,KAAA,CAEC,OAAQF,EAAK,OACb,KAAMA,EAAK,KACX,MAAOA,EAAK,MACZ,YAAaA,EAAK,YAClB,WAAYA,EAAK,WACjB,kBAAmBA,EAAK,kBACxB,iBAAkBA,EAAK,iBACvB,aAAcA,EAAK,aACnB,OAAQA,EAAK,OACb,iBAAkBA,EAAK,iBACvB,gBAAiBA,EAAK,gBACtB,SAAUA,EAAK,SACf,WAAYA,EAAK,WACjB,YAAaA,EAAK,YAClB,YAAaA,EAAK,YAEjB,SAAA,CAAA,CAACA,EAAK,WAAaH,MAACM,EAAAA,MAAA,CAAA,CAAM,SAC1BC,EAAAA,OAAA,CACC,SAAA,CAAAP,EAAAA,IAACQ,EAAAA,MAAA,CAAO,WAAK,KAAA,CAAM,EAClB,CAACL,EAAK,WAAaH,EAAAA,IAACS,EAAAA,MAAA,CAAA,CAAM,CAAA,EAC7B,EACCN,EAAK,aACJH,MAACU,EAAAA,YAAA,CAAa,WAAK,YAAY,EAEhCP,EAAK,SAAWH,EAAAA,IAAC,OAAI,UAAU,UAAW,WAAK,QAAQ,EACvD,CAACG,EAAK,YACLP,EAAAA,KAACe,EAAAA,OAAA,CACC,SAAA,CAAAf,EAAAA,KAAC,MAAA,CAAI,UAAU,mCACZ,SAAA,CAAA,CAACO,EAAK,iBAAmBH,MAACY,EAAAA,YAAA,CAAA,CAAY,EACtC,CAACT,EAAK,UACLC,IAAU,IACTV,GAAc,KACbM,EAAAA,IAACa,EAAAA,KAAA,CAAM,SAAAnB,EAAa,IAAA,CAAK,QAExBmB,EAAAA,KAAA,EAAK,EAAA,EAEZ,EACAjB,EAAAA,KAAC,MAAA,CAAI,UAAU,mCACZ,SAAA,CAAAQ,EAAQ,IACNV,GAAc,KACbM,EAAAA,IAACc,EAAAA,MAAM,SAAApB,EAAa,IAAA,CAAK,EAEzBM,EAAAA,IAACc,EAAAA,KAAA,CAAA,CAAK,GAETpB,GAAc,KACbU,IAAUhB,EAAM,OAAS,GAAKM,GAAc,OAC1CM,MAACe,EAAAA,MAAM,SAAArB,EAAa,OAAO,EAE3BM,MAACe,EAAAA,KAAA,CAAM,WAAa,IAAA,CAAK,QAG1BA,EAAAA,KAAA,CAAA,CAAK,CAAA,CAAA,CAEV,CAAA,CAAA,CACF,CAAA,CAAA,EAvDGX,CAAA,CA0DR,CAAA,EACL,EAECf,CAAA,EACH,CAEJ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../../src/components/Tour/index.ts"],"sourcesContent":["import {\n Root,\n Portal,\n Spotlight,\n SpotlightRing,\n Step,\n Arrow,\n Header,\n Title,\n Description,\n Close,\n Prev,\n Next,\n Skip,\n StepCounter,\n Footer,\n //\n TourPortal,\n TourSpotlight,\n TourSpotlightRing,\n TourStep,\n TourArrow,\n TourHeader,\n TourTitle,\n TourDescription,\n TourClose,\n TourPrev,\n TourNext,\n TourSkip,\n TourStepCounter,\n TourFooter,\n //\n type TourProps,\n} from \"./Tour\";\nimport {\n TourWrapper,\n type TourWrapperProps,\n type TourStep as TourStepType,\n type ButtonConfig,\n} from \"./TourWrapper\";\n\nconst Tour = Object.assign(TourWrapper, {\n Root,\n Portal,\n Spotlight,\n SpotlightRing,\n Step,\n Arrow,\n Header,\n Title,\n Description,\n Close,\n Prev,\n Next,\n Skip,\n StepCounter,\n Footer,\n //\n TourPortal,\n TourSpotlight,\n TourSpotlightRing,\n TourStep,\n TourArrow,\n TourHeader,\n TourTitle,\n TourDescription,\n TourClose,\n TourPrev,\n TourNext,\n TourSkip,\n TourStepCounter,\n TourFooter,\n});\n\nexport { Tour };\nexport type {\n TourProps,\n TourWrapperProps,\n TourStepType as TourStep,\n ButtonConfig,\n};\n"],"names":["Tour","TourWrapper","Root","Portal","Spotlight","SpotlightRing","Step","Arrow","Header","Title","Description","Close","Prev","Next","Skip","StepCounter","Footer","TourPortal","TourSpotlight","TourSpotlightRing","TourStep","TourArrow","TourHeader","TourTitle","TourDescription","TourClose","TourPrev","TourNext","TourSkip","TourStepCounter","TourFooter"],"mappings":"6IAyCMA,EAAO,OAAO,OAAOC,cAAa,CAAA,KACtCC,EAAAA,KAAA,OACAC,EAAAA,OAAA,UACAC,EAAAA,UAAA,cACAC,EAAAA,cAAA,KACAC,EAAAA,KAAA,MACAC,EAAAA,MAAA,OACAC,EAAAA,OAAA,MACAC,EAAAA,MAAA,YACAC,EAAAA,YAAA,MACAC,EAAAA,MAAA,KACAC,EAAAA,KAAA,KACAC,EAAAA,KAAA,KACAC,EAAAA,KAAA,YACAC,EAAAA,YAAA,OACAC,EAAAA,OAAA,WAEAC,EAAAA,OAAA,cACAC,EAAAA,UAAA,kBACAC,EAAAA,cAAA,SACAC,EAAAA,KAAA,UACAC,EAAAA,MAAA,WACAC,EAAAA,OAAA,UACAC,EAAAA,MAAA,gBACAC,EAAAA,YAAA,UACAC,EAAAA,MAAA,SACAC,EAAAA,KAAA,SACAC,EAAAA,KAAA,SACAC,EAAAA,KAAA,gBACAC,EAAAA,YAAA,WACAC,EAAAA,MACF,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TreeSelect.cjs","sources":["../../../../src/components/TreeSelect/TreeSelect.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport {\n TreeView as DsTreeView,\n type TreeViewProps,\n type TreeDataItem,\n} from \"@dsui/ui/components/tree-view\";\n\nexport type TreeSelectProps = TreeViewProps;\nexport type { TreeDataItem, TreeViewProps };\n\nexport const TreeSelect = forwardRef<HTMLDivElement, TreeSelectProps>(\n (props, ref) => {\n return <DsTreeView ref={ref} {...props} />;\n }\n);\n\nTreeSelect.displayName = \"TreeSelect\";\n\nexport const TreeView = DsTreeView;\n"],"names":["TreeSelect","forwardRef","props","ref","jsx","DsTreeView","TreeView"],"mappings":"oMAUaA,EAAaC,EAAAA,WACxB,CAACC,EAAOC,IACCC,EAAAA,IAACC,EAAAA,SAAA,CAAW,IAAAF,EAAW,GAAGD,CAAA,CAAO,CAE5C,EAEAF,EAAW,YAAc,aAElB,MAAMM,EAAWD,EAAAA"}
|