@sth87/shadcn-design-system 0.0.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/README.md +487 -0
- package/dist/cjs/_virtual/_commonjsHelpers.cjs +2 -0
- package/dist/cjs/_virtual/_commonjsHelpers.cjs.map +1 -0
- package/dist/cjs/_virtual/index.cjs +2 -0
- package/dist/cjs/_virtual/index.cjs.map +1 -0
- package/dist/cjs/_virtual/index2.cjs +2 -0
- package/dist/cjs/_virtual/index2.cjs.map +1 -0
- package/dist/cjs/components/Accordion/Accordion.cjs +2 -0
- package/dist/cjs/components/Accordion/Accordion.cjs.map +1 -0
- package/dist/cjs/components/Avatar/Avatar.cjs +2 -0
- package/dist/cjs/components/Avatar/Avatar.cjs.map +1 -0
- package/dist/cjs/components/Badge/Badge.cjs +2 -0
- package/dist/cjs/components/Badge/Badge.cjs.map +1 -0
- package/dist/cjs/components/Breadcrumb/Breadcrumb.cjs +2 -0
- package/dist/cjs/components/Breadcrumb/Breadcrumb.cjs.map +1 -0
- package/dist/cjs/components/Button/Button.cjs +2 -0
- package/dist/cjs/components/Button/Button.cjs.map +1 -0
- package/dist/cjs/components/Button/ButtonGroup.cjs +2 -0
- package/dist/cjs/components/Button/ButtonGroup.cjs.map +1 -0
- package/dist/cjs/components/Calendar/Calendar.cjs +2 -0
- package/dist/cjs/components/Calendar/Calendar.cjs.map +1 -0
- package/dist/cjs/components/Carousel/Carousel.cjs +2 -0
- package/dist/cjs/components/Carousel/Carousel.cjs.map +1 -0
- package/dist/cjs/components/Checkbox/Checkbox.cjs +2 -0
- package/dist/cjs/components/Checkbox/Checkbox.cjs.map +1 -0
- package/dist/cjs/components/Collapsible/Collapsible.cjs +2 -0
- package/dist/cjs/components/Collapsible/Collapsible.cjs.map +1 -0
- package/dist/cjs/components/Command/Command.cjs +2 -0
- package/dist/cjs/components/Command/Command.cjs.map +1 -0
- package/dist/cjs/components/Command/index.cjs +2 -0
- package/dist/cjs/components/Command/index.cjs.map +1 -0
- package/dist/cjs/components/ContextMenu/ContextMenu.cjs +2 -0
- package/dist/cjs/components/ContextMenu/ContextMenu.cjs.map +1 -0
- package/dist/cjs/components/ContextMenu/index.cjs +2 -0
- package/dist/cjs/components/ContextMenu/index.cjs.map +1 -0
- package/dist/cjs/components/Cropper/Cropper.cjs +2 -0
- package/dist/cjs/components/Cropper/Cropper.cjs.map +1 -0
- package/dist/cjs/components/Cropper/CropperTool.cjs +2 -0
- package/dist/cjs/components/Cropper/CropperTool.cjs.map +1 -0
- package/dist/cjs/components/Cropper/utils.cjs +2 -0
- package/dist/cjs/components/Cropper/utils.cjs.map +1 -0
- package/dist/cjs/components/DatePicker/DatePicker.cjs +2 -0
- package/dist/cjs/components/DatePicker/DatePicker.cjs.map +1 -0
- package/dist/cjs/components/DatePicker/RangePicker.cjs +2 -0
- package/dist/cjs/components/DatePicker/RangePicker.cjs.map +1 -0
- package/dist/cjs/components/DatePicker/TimePicker.cjs +2 -0
- package/dist/cjs/components/DatePicker/TimePicker.cjs.map +1 -0
- package/dist/cjs/components/Dialog/Dialog.cjs +2 -0
- package/dist/cjs/components/Dialog/Dialog.cjs.map +1 -0
- package/dist/cjs/components/DropdownMenu/DropdownMenu.cjs +2 -0
- package/dist/cjs/components/DropdownMenu/DropdownMenu.cjs.map +1 -0
- package/dist/cjs/components/DropdownMenu/index.cjs +2 -0
- package/dist/cjs/components/DropdownMenu/index.cjs.map +1 -0
- package/dist/cjs/components/FloatLabel.cjs +2 -0
- package/dist/cjs/components/FloatLabel.cjs.map +1 -0
- package/dist/cjs/components/Glass/Glass.cjs +2 -0
- package/dist/cjs/components/Glass/Glass.cjs.map +1 -0
- package/dist/cjs/components/ImageViewer/ImageViewer.cjs +2 -0
- package/dist/cjs/components/ImageViewer/ImageViewer.cjs.map +1 -0
- package/dist/cjs/components/ImageViewer/ImageViewer.css +1 -0
- package/dist/cjs/components/Input/Input.cjs +2 -0
- package/dist/cjs/components/Input/Input.cjs.map +1 -0
- package/dist/cjs/components/InputOTP/InputOTP.cjs +2 -0
- package/dist/cjs/components/InputOTP/InputOTP.cjs.map +1 -0
- package/dist/cjs/components/Interactive/CursorFollow.cjs +2 -0
- package/dist/cjs/components/Interactive/CursorFollow.cjs.map +1 -0
- package/dist/cjs/components/Marquee/Marquee.cjs +2 -0
- package/dist/cjs/components/Marquee/Marquee.cjs.map +1 -0
- package/dist/cjs/components/Marquee/MarqueeWrapper.cjs +2 -0
- package/dist/cjs/components/Marquee/MarqueeWrapper.cjs.map +1 -0
- package/dist/cjs/components/Marquee/index.cjs +2 -0
- package/dist/cjs/components/Marquee/index.cjs.map +1 -0
- package/dist/cjs/components/Masonry/Masonry.cjs +2 -0
- package/dist/cjs/components/Masonry/Masonry.cjs.map +1 -0
- package/dist/cjs/components/Masonry/MasonryWrapper.cjs +2 -0
- package/dist/cjs/components/Masonry/MasonryWrapper.cjs.map +1 -0
- package/dist/cjs/components/Pagination/Pagination.cjs +2 -0
- package/dist/cjs/components/Pagination/Pagination.cjs.map +1 -0
- package/dist/cjs/components/Pagination/index.cjs +2 -0
- package/dist/cjs/components/Pagination/index.cjs.map +1 -0
- package/dist/cjs/components/Popover/Popover.cjs +2 -0
- package/dist/cjs/components/Popover/Popover.cjs.map +1 -0
- package/dist/cjs/components/Popover/index.cjs +2 -0
- package/dist/cjs/components/Popover/index.cjs.map +1 -0
- package/dist/cjs/components/QrCode/QrCode.cjs +2 -0
- package/dist/cjs/components/QrCode/QrCode.cjs.map +1 -0
- package/dist/cjs/components/QrCode/index.cjs +2 -0
- package/dist/cjs/components/QrCode/index.cjs.map +1 -0
- package/dist/cjs/components/Radio/Radio.cjs +2 -0
- package/dist/cjs/components/Radio/Radio.cjs.map +1 -0
- package/dist/cjs/components/Rate/Rate.cjs +2 -0
- package/dist/cjs/components/Rate/Rate.cjs.map +1 -0
- package/dist/cjs/components/Resizable/Resizable.cjs +2 -0
- package/dist/cjs/components/Resizable/Resizable.cjs.map +1 -0
- package/dist/cjs/components/ScrollArea/ScrollArea.cjs +2 -0
- package/dist/cjs/components/ScrollArea/ScrollArea.cjs.map +1 -0
- package/dist/cjs/components/Select/Select.cjs +2 -0
- package/dist/cjs/components/Select/Select.cjs.map +1 -0
- package/dist/cjs/components/Separator/Separator.cjs +2 -0
- package/dist/cjs/components/Separator/Separator.cjs.map +1 -0
- package/dist/cjs/components/Sheet/Sheet.cjs +6 -0
- package/dist/cjs/components/Sheet/Sheet.cjs.map +1 -0
- package/dist/cjs/components/Sidebar/Sidebar.cjs +2 -0
- package/dist/cjs/components/Sidebar/Sidebar.cjs.map +1 -0
- package/dist/cjs/components/Skeleton/Skeleton.cjs +2 -0
- package/dist/cjs/components/Skeleton/Skeleton.cjs.map +1 -0
- package/dist/cjs/components/Slider/Slider.cjs +2 -0
- package/dist/cjs/components/Slider/Slider.cjs.map +1 -0
- package/dist/cjs/components/Stepper/Stepper.cjs +2 -0
- package/dist/cjs/components/Stepper/Stepper.cjs.map +1 -0
- package/dist/cjs/components/Stepper/StepperWrapper.cjs +2 -0
- package/dist/cjs/components/Stepper/StepperWrapper.cjs.map +1 -0
- package/dist/cjs/components/Stepper/index.cjs +2 -0
- package/dist/cjs/components/Stepper/index.cjs.map +1 -0
- package/dist/cjs/components/Switch/Switch.cjs +2 -0
- package/dist/cjs/components/Switch/Switch.cjs.map +1 -0
- package/dist/cjs/components/Table/TableFilter/data-table-date-filter.cjs +2 -0
- package/dist/cjs/components/Table/TableFilter/data-table-date-filter.cjs.map +1 -0
- package/dist/cjs/components/Table/TableFilter/data-table-filter-popover.cjs +2 -0
- package/dist/cjs/components/Table/TableFilter/data-table-filter-popover.cjs.map +1 -0
- package/dist/cjs/components/Table/TableFilter/data-table-slider-filter.cjs +2 -0
- package/dist/cjs/components/Table/TableFilter/data-table-slider-filter.cjs.map +1 -0
- package/dist/cjs/components/Table/data-table-column-header.cjs +2 -0
- package/dist/cjs/components/Table/data-table-column-header.cjs.map +1 -0
- package/dist/cjs/components/Table/data-table-pagination.cjs +2 -0
- package/dist/cjs/components/Table/data-table-pagination.cjs.map +1 -0
- package/dist/cjs/components/Table/data-table.cjs +2 -0
- package/dist/cjs/components/Table/data-table.cjs.map +1 -0
- package/dist/cjs/components/Tabs/Tabs.cjs +2 -0
- package/dist/cjs/components/Tabs/Tabs.cjs.map +1 -0
- package/dist/cjs/components/Tabs/classes.cjs +2 -0
- package/dist/cjs/components/Tabs/classes.cjs.map +1 -0
- package/dist/cjs/components/Textarea/Textarea.cjs +2 -0
- package/dist/cjs/components/Textarea/Textarea.cjs.map +1 -0
- package/dist/cjs/components/TimeGridView.cjs +2 -0
- package/dist/cjs/components/TimeGridView.cjs.map +1 -0
- package/dist/cjs/components/Toast/Toast.cjs +2 -0
- package/dist/cjs/components/Toast/Toast.cjs.map +1 -0
- package/dist/cjs/components/Toggle/Toggle.cjs +2 -0
- package/dist/cjs/components/Toggle/Toggle.cjs.map +1 -0
- package/dist/cjs/components/Tooltip/Tooltip.cjs +2 -0
- package/dist/cjs/components/Tooltip/Tooltip.cjs.map +1 -0
- package/dist/cjs/components/Tour/Tour.cjs +2 -0
- package/dist/cjs/components/Tour/Tour.cjs.map +1 -0
- package/dist/cjs/components/Tour/TourWrapper.cjs +2 -0
- package/dist/cjs/components/Tour/TourWrapper.cjs.map +1 -0
- package/dist/cjs/components/Tour/index.cjs +2 -0
- package/dist/cjs/components/Tour/index.cjs.map +1 -0
- package/dist/cjs/components/Upload/Upload.cjs +4 -0
- package/dist/cjs/components/Upload/Upload.cjs.map +1 -0
- package/dist/cjs/components/WheelColumn.cjs +2 -0
- package/dist/cjs/components/WheelColumn.cjs.map +1 -0
- package/dist/cjs/constants/common.cjs +2 -0
- package/dist/cjs/constants/common.cjs.map +1 -0
- package/dist/cjs/favicon.ico +0 -0
- package/dist/cjs/hooks/use-callback-ref.cjs +2 -0
- package/dist/cjs/hooks/use-callback-ref.cjs.map +1 -0
- package/dist/cjs/hooks/use-debounced-callback.cjs +2 -0
- package/dist/cjs/hooks/use-debounced-callback.cjs.map +1 -0
- package/dist/cjs/hooks/use-debounced-value.cjs +2 -0
- package/dist/cjs/hooks/use-debounced-value.cjs.map +1 -0
- package/dist/cjs/hooks/use-event-listener.cjs +2 -0
- package/dist/cjs/hooks/use-event-listener.cjs.map +1 -0
- package/dist/cjs/hooks/use-intersection-observer.cjs +2 -0
- package/dist/cjs/hooks/use-intersection-observer.cjs.map +1 -0
- package/dist/cjs/hooks/use-isomorphic-layout-effect.cjs +2 -0
- package/dist/cjs/hooks/use-isomorphic-layout-effect.cjs.map +1 -0
- package/dist/cjs/hooks/use-media-query.cjs +2 -0
- package/dist/cjs/hooks/use-media-query.cjs.map +1 -0
- package/dist/cjs/hooks/use-on-click-outside.cjs +2 -0
- package/dist/cjs/hooks/use-on-click-outside.cjs.map +1 -0
- package/dist/cjs/hooks/use-script.cjs +2 -0
- package/dist/cjs/hooks/use-script.cjs.map +1 -0
- package/dist/cjs/hooks/use-scroll-lock.cjs +2 -0
- package/dist/cjs/hooks/use-scroll-lock.cjs.map +1 -0
- package/dist/cjs/image.png +0 -0
- package/dist/cjs/index.cjs +2 -0
- package/dist/cjs/index.cjs.map +1 -0
- package/dist/cjs/lib/TextAnimation/BlurText.cjs +2 -0
- package/dist/cjs/lib/TextAnimation/BlurText.cjs.map +1 -0
- package/dist/cjs/lib/TextAnimation/CircularText.cjs +2 -0
- package/dist/cjs/lib/TextAnimation/CircularText.cjs.map +1 -0
- package/dist/cjs/lib/TextAnimation/FlipWords.cjs +2 -0
- package/dist/cjs/lib/TextAnimation/FlipWords.cjs.map +1 -0
- package/dist/cjs/lib/TextAnimation/GradientText.cjs +2 -0
- package/dist/cjs/lib/TextAnimation/GradientText.cjs.map +1 -0
- package/dist/cjs/lib/TextAnimation/RollingText.cjs +2 -0
- package/dist/cjs/lib/TextAnimation/RollingText.cjs.map +1 -0
- package/dist/cjs/lib/TextAnimation/RotatingText.cjs +2 -0
- package/dist/cjs/lib/TextAnimation/RotatingText.cjs.map +1 -0
- package/dist/cjs/lib/TextAnimation/ShimmeringText.cjs +2 -0
- package/dist/cjs/lib/TextAnimation/ShimmeringText.cjs.map +1 -0
- package/dist/cjs/lib/TextAnimation/SplittingText.cjs +2 -0
- package/dist/cjs/lib/TextAnimation/SplittingText.cjs.map +1 -0
- package/dist/cjs/lib/TextAnimation/TextGenerateEffect.cjs +2 -0
- package/dist/cjs/lib/TextAnimation/TextGenerateEffect.cjs.map +1 -0
- package/dist/cjs/lib/TextAnimation/TextHoverEffect.cjs +2 -0
- package/dist/cjs/lib/TextAnimation/TextHoverEffect.cjs.map +1 -0
- package/dist/cjs/lib/TextAnimation/TextPressureEffect.cjs +22 -0
- package/dist/cjs/lib/TextAnimation/TextPressureEffect.cjs.map +1 -0
- package/dist/cjs/lib/TextAnimation/TypingText.cjs +2 -0
- package/dist/cjs/lib/TextAnimation/TypingText.cjs.map +1 -0
- package/dist/cjs/lib/TextAnimation/WritingText.cjs +2 -0
- package/dist/cjs/lib/TextAnimation/WritingText.cjs.map +1 -0
- package/dist/cjs/node_modules/.pnpm/react-viewer@3.2.2/node_modules/react-viewer/dist/index.cjs +253 -0
- package/dist/cjs/node_modules/.pnpm/react-viewer@3.2.2/node_modules/react-viewer/dist/index.cjs.map +1 -0
- package/dist/cjs/node_modules/.pnpm/viewerjs@1.11.7/node_modules/viewerjs/dist/viewer.css +1 -0
- package/dist/cjs/styles/animation.css +1 -0
- package/dist/cjs/styles/index.css +1 -0
- package/dist/cjs/styles/theme.css +1 -0
- package/dist/cjs/utils/animations.cjs +2 -0
- package/dist/cjs/utils/animations.cjs.map +1 -0
- package/dist/cjs/utils/css.cjs +2 -0
- package/dist/cjs/utils/css.cjs.map +1 -0
- package/dist/cjs/utils/data-table.cjs +2 -0
- package/dist/cjs/utils/data-table.cjs.map +1 -0
- package/dist/cjs/utils/datetime.cjs +2 -0
- package/dist/cjs/utils/datetime.cjs.map +1 -0
- package/dist/cjs/vite.svg +1 -0
- package/dist/cjs/wave.png +0 -0
- package/dist/esm/_virtual/_commonjsHelpers.js +7 -0
- package/dist/esm/_virtual/_commonjsHelpers.js.map +1 -0
- package/dist/esm/_virtual/index.js +8 -0
- package/dist/esm/_virtual/index.js.map +1 -0
- package/dist/esm/_virtual/index2.js +5 -0
- package/dist/esm/_virtual/index2.js.map +1 -0
- package/dist/esm/components/Accordion/Accordion.js +190 -0
- package/dist/esm/components/Accordion/Accordion.js.map +1 -0
- package/dist/esm/components/Avatar/Avatar.js +93 -0
- package/dist/esm/components/Avatar/Avatar.js.map +1 -0
- package/dist/esm/components/Badge/Badge.js +35 -0
- package/dist/esm/components/Badge/Badge.js.map +1 -0
- package/dist/esm/components/Breadcrumb/Breadcrumb.js +102 -0
- package/dist/esm/components/Breadcrumb/Breadcrumb.js.map +1 -0
- package/dist/esm/components/Button/Button.js +53 -0
- package/dist/esm/components/Button/Button.js.map +1 -0
- package/dist/esm/components/Button/ButtonGroup.js +53 -0
- package/dist/esm/components/Button/ButtonGroup.js.map +1 -0
- package/dist/esm/components/Calendar/Calendar.js +40 -0
- package/dist/esm/components/Calendar/Calendar.js.map +1 -0
- package/dist/esm/components/Carousel/Carousel.js +510 -0
- package/dist/esm/components/Carousel/Carousel.js.map +1 -0
- package/dist/esm/components/Checkbox/Checkbox.js +79 -0
- package/dist/esm/components/Checkbox/Checkbox.js.map +1 -0
- package/dist/esm/components/Collapsible/Collapsible.js +107 -0
- package/dist/esm/components/Collapsible/Collapsible.js.map +1 -0
- package/dist/esm/components/Command/Command.js +113 -0
- package/dist/esm/components/Command/Command.js.map +1 -0
- package/dist/esm/components/Command/index.js +16 -0
- package/dist/esm/components/Command/index.js.map +1 -0
- package/dist/esm/components/ContextMenu/ContextMenu.js +131 -0
- package/dist/esm/components/ContextMenu/ContextMenu.js.map +1 -0
- package/dist/esm/components/ContextMenu/index.js +24 -0
- package/dist/esm/components/ContextMenu/index.js.map +1 -0
- package/dist/esm/components/Cropper/Cropper.js +1014 -0
- package/dist/esm/components/Cropper/Cropper.js.map +1 -0
- package/dist/esm/components/Cropper/CropperTool.js +157 -0
- package/dist/esm/components/Cropper/CropperTool.js.map +1 -0
- package/dist/esm/components/Cropper/utils.js +108 -0
- package/dist/esm/components/Cropper/utils.js.map +1 -0
- package/dist/esm/components/DatePicker/DatePicker.js +263 -0
- package/dist/esm/components/DatePicker/DatePicker.js.map +1 -0
- package/dist/esm/components/DatePicker/RangePicker.js +456 -0
- package/dist/esm/components/DatePicker/RangePicker.js.map +1 -0
- package/dist/esm/components/DatePicker/TimePicker.js +444 -0
- package/dist/esm/components/DatePicker/TimePicker.js.map +1 -0
- package/dist/esm/components/Dialog/Dialog.js +223 -0
- package/dist/esm/components/Dialog/Dialog.js.map +1 -0
- package/dist/esm/components/DropdownMenu/DropdownMenu.js +196 -0
- package/dist/esm/components/DropdownMenu/DropdownMenu.js.map +1 -0
- package/dist/esm/components/DropdownMenu/index.js +24 -0
- package/dist/esm/components/DropdownMenu/index.js.map +1 -0
- package/dist/esm/components/FloatLabel.js +59 -0
- package/dist/esm/components/FloatLabel.js.map +1 -0
- package/dist/esm/components/Glass/Glass.js +93 -0
- package/dist/esm/components/Glass/Glass.js.map +1 -0
- package/dist/esm/components/ImageViewer/ImageViewer.css +1 -0
- package/dist/esm/components/ImageViewer/ImageViewer.js +273 -0
- package/dist/esm/components/ImageViewer/ImageViewer.js.map +1 -0
- package/dist/esm/components/Input/Input.js +267 -0
- package/dist/esm/components/Input/Input.js.map +1 -0
- package/dist/esm/components/InputOTP/InputOTP.js +70 -0
- package/dist/esm/components/InputOTP/InputOTP.js.map +1 -0
- package/dist/esm/components/Interactive/CursorFollow.js +257 -0
- package/dist/esm/components/Interactive/CursorFollow.js.map +1 -0
- package/dist/esm/components/Marquee/Marquee.js +419 -0
- package/dist/esm/components/Marquee/Marquee.js.map +1 -0
- package/dist/esm/components/Marquee/MarqueeWrapper.js +25 -0
- package/dist/esm/components/Marquee/MarqueeWrapper.js.map +1 -0
- package/dist/esm/components/Marquee/index.js +15 -0
- package/dist/esm/components/Marquee/index.js.map +1 -0
- package/dist/esm/components/Masonry/Masonry.js +840 -0
- package/dist/esm/components/Masonry/Masonry.js.map +1 -0
- package/dist/esm/components/Masonry/MasonryWrapper.js +19 -0
- package/dist/esm/components/Masonry/MasonryWrapper.js.map +1 -0
- package/dist/esm/components/Pagination/Pagination.js +209 -0
- package/dist/esm/components/Pagination/Pagination.js.map +1 -0
- package/dist/esm/components/Pagination/index.js +14 -0
- package/dist/esm/components/Pagination/index.js.map +1 -0
- package/dist/esm/components/Popover/Popover.js +51 -0
- package/dist/esm/components/Popover/Popover.js.map +1 -0
- package/dist/esm/components/Popover/index.js +9 -0
- package/dist/esm/components/Popover/index.js.map +1 -0
- package/dist/esm/components/QrCode/QrCode.js +300 -0
- package/dist/esm/components/QrCode/QrCode.js.map +1 -0
- package/dist/esm/components/QrCode/index.js +16 -0
- package/dist/esm/components/QrCode/index.js.map +1 -0
- package/dist/esm/components/Radio/Radio.js +74 -0
- package/dist/esm/components/Radio/Radio.js.map +1 -0
- package/dist/esm/components/Rate/Rate.js +191 -0
- package/dist/esm/components/Rate/Rate.js.map +1 -0
- package/dist/esm/components/Resizable/Resizable.js +89 -0
- package/dist/esm/components/Resizable/Resizable.js.map +1 -0
- package/dist/esm/components/ScrollArea/ScrollArea.js +45 -0
- package/dist/esm/components/ScrollArea/ScrollArea.js.map +1 -0
- package/dist/esm/components/Select/Select.js +199 -0
- package/dist/esm/components/Select/Select.js.map +1 -0
- package/dist/esm/components/Separator/Separator.js +7 -0
- package/dist/esm/components/Separator/Separator.js.map +1 -0
- package/dist/esm/components/Sheet/Sheet.js +141 -0
- package/dist/esm/components/Sheet/Sheet.js.map +1 -0
- package/dist/esm/components/Sidebar/Sidebar.js +30 -0
- package/dist/esm/components/Sidebar/Sidebar.js.map +1 -0
- package/dist/esm/components/Skeleton/Skeleton.js +12 -0
- package/dist/esm/components/Skeleton/Skeleton.js.map +1 -0
- package/dist/esm/components/Slider/Slider.js +420 -0
- package/dist/esm/components/Slider/Slider.js.map +1 -0
- package/dist/esm/components/Stepper/Stepper.js +886 -0
- package/dist/esm/components/Stepper/Stepper.js.map +1 -0
- package/dist/esm/components/Stepper/StepperWrapper.js +80 -0
- package/dist/esm/components/Stepper/StepperWrapper.js.map +1 -0
- package/dist/esm/components/Stepper/index.js +21 -0
- package/dist/esm/components/Stepper/index.js.map +1 -0
- package/dist/esm/components/Switch/Switch.js +126 -0
- package/dist/esm/components/Switch/Switch.js.map +1 -0
- package/dist/esm/components/Table/TableFilter/data-table-date-filter.js +126 -0
- package/dist/esm/components/Table/TableFilter/data-table-date-filter.js.map +1 -0
- package/dist/esm/components/Table/TableFilter/data-table-filter-popover.js +138 -0
- package/dist/esm/components/Table/TableFilter/data-table-filter-popover.js.map +1 -0
- package/dist/esm/components/Table/TableFilter/data-table-slider-filter.js +164 -0
- package/dist/esm/components/Table/TableFilter/data-table-slider-filter.js.map +1 -0
- package/dist/esm/components/Table/data-table-column-header.js +82 -0
- package/dist/esm/components/Table/data-table-column-header.js.map +1 -0
- package/dist/esm/components/Table/data-table-pagination.js +73 -0
- package/dist/esm/components/Table/data-table-pagination.js.map +1 -0
- package/dist/esm/components/Table/data-table.js +94 -0
- package/dist/esm/components/Table/data-table.js.map +1 -0
- package/dist/esm/components/Tabs/Tabs.js +540 -0
- package/dist/esm/components/Tabs/Tabs.js.map +1 -0
- package/dist/esm/components/Tabs/classes.js +345 -0
- package/dist/esm/components/Tabs/classes.js.map +1 -0
- package/dist/esm/components/Textarea/Textarea.js +132 -0
- package/dist/esm/components/Textarea/Textarea.js.map +1 -0
- package/dist/esm/components/TimeGridView.js +101 -0
- package/dist/esm/components/TimeGridView.js.map +1 -0
- package/dist/esm/components/Toast/Toast.js +80 -0
- package/dist/esm/components/Toast/Toast.js.map +1 -0
- package/dist/esm/components/Toggle/Toggle.js +23 -0
- package/dist/esm/components/Toggle/Toggle.js.map +1 -0
- package/dist/esm/components/Tooltip/Tooltip.js +120 -0
- package/dist/esm/components/Tooltip/Tooltip.js.map +1 -0
- package/dist/esm/components/Tour/Tour.js +948 -0
- package/dist/esm/components/Tour/Tour.js.map +1 -0
- package/dist/esm/components/Tour/TourWrapper.js +67 -0
- package/dist/esm/components/Tour/TourWrapper.js.map +1 -0
- package/dist/esm/components/Tour/index.js +38 -0
- package/dist/esm/components/Tour/index.js.map +1 -0
- package/dist/esm/components/Upload/Upload.js +948 -0
- package/dist/esm/components/Upload/Upload.js.map +1 -0
- package/dist/esm/components/WheelColumn.js +127 -0
- package/dist/esm/components/WheelColumn.js.map +1 -0
- package/dist/esm/constants/common.js +5 -0
- package/dist/esm/constants/common.js.map +1 -0
- package/dist/esm/favicon.ico +0 -0
- package/dist/esm/hooks/use-callback-ref.js +14 -0
- package/dist/esm/hooks/use-callback-ref.js.map +1 -0
- package/dist/esm/hooks/use-debounced-callback.js +21 -0
- package/dist/esm/hooks/use-debounced-callback.js.map +1 -0
- package/dist/esm/hooks/use-debounced-value.js +12 -0
- package/dist/esm/hooks/use-debounced-value.js.map +1 -0
- package/dist/esm/hooks/use-event-listener.js +21 -0
- package/dist/esm/hooks/use-event-listener.js.map +1 -0
- package/dist/esm/hooks/use-intersection-observer.js +56 -0
- package/dist/esm/hooks/use-intersection-observer.js.map +1 -0
- package/dist/esm/hooks/use-isomorphic-layout-effect.js +6 -0
- package/dist/esm/hooks/use-isomorphic-layout-effect.js.map +1 -0
- package/dist/esm/hooks/use-media-query.js +22 -0
- package/dist/esm/hooks/use-media-query.js.map +1 -0
- package/dist/esm/hooks/use-on-click-outside.js +18 -0
- package/dist/esm/hooks/use-on-click-outside.js.map +1 -0
- package/dist/esm/hooks/use-script.js +46 -0
- package/dist/esm/hooks/use-script.js.map +1 -0
- package/dist/esm/hooks/use-scroll-lock.js +27 -0
- package/dist/esm/hooks/use-scroll-lock.js.map +1 -0
- package/dist/esm/image.png +0 -0
- package/dist/esm/index.js +223 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/lib/TextAnimation/BlurText.js +84 -0
- package/dist/esm/lib/TextAnimation/BlurText.js.map +1 -0
- package/dist/esm/lib/TextAnimation/CircularText.js +96 -0
- package/dist/esm/lib/TextAnimation/CircularText.js.map +1 -0
- package/dist/esm/lib/TextAnimation/FlipWords.js +103 -0
- package/dist/esm/lib/TextAnimation/FlipWords.js.map +1 -0
- package/dist/esm/lib/TextAnimation/GradientText.js +54 -0
- package/dist/esm/lib/TextAnimation/GradientText.js.map +1 -0
- package/dist/esm/lib/TextAnimation/RollingText.js +70 -0
- package/dist/esm/lib/TextAnimation/RollingText.js.map +1 -0
- package/dist/esm/lib/TextAnimation/RotatingText.js +38 -0
- package/dist/esm/lib/TextAnimation/RotatingText.js.map +1 -0
- package/dist/esm/lib/TextAnimation/ShimmeringText.js +64 -0
- package/dist/esm/lib/TextAnimation/ShimmeringText.js.map +1 -0
- package/dist/esm/lib/TextAnimation/SplittingText.js +86 -0
- package/dist/esm/lib/TextAnimation/SplittingText.js.map +1 -0
- package/dist/esm/lib/TextAnimation/TextGenerateEffect.js +59 -0
- package/dist/esm/lib/TextAnimation/TextGenerateEffect.js.map +1 -0
- package/dist/esm/lib/TextAnimation/TextHoverEffect.js +128 -0
- package/dist/esm/lib/TextAnimation/TextHoverEffect.js.map +1 -0
- package/dist/esm/lib/TextAnimation/TextPressureEffect.js +135 -0
- package/dist/esm/lib/TextAnimation/TextPressureEffect.js.map +1 -0
- package/dist/esm/lib/TextAnimation/TypingText.js +118 -0
- package/dist/esm/lib/TextAnimation/TypingText.js.map +1 -0
- package/dist/esm/lib/TextAnimation/WritingText.js +45 -0
- package/dist/esm/lib/TextAnimation/WritingText.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/react-viewer@3.2.2/node_modules/react-viewer/dist/index.js +865 -0
- package/dist/esm/node_modules/.pnpm/react-viewer@3.2.2/node_modules/react-viewer/dist/index.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/viewerjs@1.11.7/node_modules/viewerjs/dist/viewer.css +1 -0
- package/dist/esm/styles/animation.css +1 -0
- package/dist/esm/styles/index.css +1 -0
- package/dist/esm/styles/theme.css +1 -0
- package/dist/esm/utils/animations.js +189 -0
- package/dist/esm/utils/animations.js.map +1 -0
- package/dist/esm/utils/css.js +25 -0
- package/dist/esm/utils/css.js.map +1 -0
- package/dist/esm/utils/data-table.js +20 -0
- package/dist/esm/utils/data-table.js.map +1 -0
- package/dist/esm/utils/datetime.js +17 -0
- package/dist/esm/utils/datetime.js.map +1 -0
- package/dist/esm/vite.svg +1 -0
- package/dist/esm/wave.png +0 -0
- package/dist/types/components/Accordion/Accordion.d.ts +49 -0
- package/dist/types/components/Accordion/Accordion.d.ts.map +1 -0
- package/dist/types/components/Accordion/index.d.ts +3 -0
- package/dist/types/components/Accordion/index.d.ts.map +1 -0
- package/dist/types/components/Avatar/Avatar.d.ts +18 -0
- package/dist/types/components/Avatar/Avatar.d.ts.map +1 -0
- package/dist/types/components/Avatar/index.d.ts +3 -0
- package/dist/types/components/Avatar/index.d.ts.map +1 -0
- package/dist/types/components/Badge/Badge.d.ts +10 -0
- package/dist/types/components/Badge/Badge.d.ts.map +1 -0
- package/dist/types/components/Badge/index.d.ts +2 -0
- package/dist/types/components/Badge/index.d.ts.map +1 -0
- package/dist/types/components/Breadcrumb/Breadcrumb.d.ts +23 -0
- package/dist/types/components/Breadcrumb/Breadcrumb.d.ts.map +1 -0
- package/dist/types/components/Breadcrumb/index.d.ts +2 -0
- package/dist/types/components/Breadcrumb/index.d.ts.map +1 -0
- package/dist/types/components/Button/Button.d.ts +10 -0
- package/dist/types/components/Button/Button.d.ts.map +1 -0
- package/dist/types/components/Button/ButtonGroup.d.ts +16 -0
- package/dist/types/components/Button/ButtonGroup.d.ts.map +1 -0
- package/dist/types/components/Button/index.d.ts +5 -0
- package/dist/types/components/Button/index.d.ts.map +1 -0
- package/dist/types/components/Calendar/Calendar.d.ts +15 -0
- package/dist/types/components/Calendar/Calendar.d.ts.map +1 -0
- package/dist/types/components/Calendar/index.d.ts +3 -0
- package/dist/types/components/Calendar/index.d.ts.map +1 -0
- package/dist/types/components/Carousel/Carousel.d.ts +79 -0
- package/dist/types/components/Carousel/Carousel.d.ts.map +1 -0
- package/dist/types/components/Carousel/index.d.ts +4 -0
- package/dist/types/components/Carousel/index.d.ts.map +1 -0
- package/dist/types/components/Checkbox/Checkbox.d.ts +15 -0
- package/dist/types/components/Checkbox/Checkbox.d.ts.map +1 -0
- package/dist/types/components/Checkbox/index.d.ts +2 -0
- package/dist/types/components/Checkbox/index.d.ts.map +1 -0
- package/dist/types/components/Collapsible/Collapsible.d.ts +17 -0
- package/dist/types/components/Collapsible/Collapsible.d.ts.map +1 -0
- package/dist/types/components/Collapsible/index.d.ts +2 -0
- package/dist/types/components/Collapsible/index.d.ts.map +1 -0
- package/dist/types/components/Command/Command.d.ts +39 -0
- package/dist/types/components/Command/Command.d.ts.map +1 -0
- package/dist/types/components/Command/index.d.ts +15 -0
- package/dist/types/components/Command/index.d.ts.map +1 -0
- package/dist/types/components/ContextMenu/ContextMenu.d.ts +64 -0
- package/dist/types/components/ContextMenu/ContextMenu.d.ts.map +1 -0
- package/dist/types/components/ContextMenu/index.d.ts +23 -0
- package/dist/types/components/ContextMenu/index.d.ts.map +1 -0
- package/dist/types/components/Cropper/Cropper.d.ts +86 -0
- package/dist/types/components/Cropper/Cropper.d.ts.map +1 -0
- package/dist/types/components/Cropper/CropperTool.d.ts +149 -0
- package/dist/types/components/Cropper/CropperTool.d.ts.map +1 -0
- package/dist/types/components/Cropper/index.d.ts +4 -0
- package/dist/types/components/Cropper/index.d.ts.map +1 -0
- package/dist/types/components/Cropper/utils.d.ts +130 -0
- package/dist/types/components/Cropper/utils.d.ts.map +1 -0
- package/dist/types/components/DatePicker/DatePicker.d.ts +56 -0
- package/dist/types/components/DatePicker/DatePicker.d.ts.map +1 -0
- package/dist/types/components/DatePicker/RangePicker.d.ts +42 -0
- package/dist/types/components/DatePicker/RangePicker.d.ts.map +1 -0
- package/dist/types/components/DatePicker/TimePicker.d.ts +43 -0
- package/dist/types/components/DatePicker/TimePicker.d.ts.map +1 -0
- package/dist/types/components/DatePicker/index.d.ts +7 -0
- package/dist/types/components/DatePicker/index.d.ts.map +1 -0
- package/dist/types/components/Dialog/Dialog.d.ts +45 -0
- package/dist/types/components/Dialog/Dialog.d.ts.map +1 -0
- package/dist/types/components/Dialog/index.d.ts +2 -0
- package/dist/types/components/Dialog/index.d.ts.map +1 -0
- package/dist/types/components/DropdownMenu/DropdownMenu.d.ts +65 -0
- package/dist/types/components/DropdownMenu/DropdownMenu.d.ts.map +1 -0
- package/dist/types/components/DropdownMenu/index.d.ts +22 -0
- package/dist/types/components/DropdownMenu/index.d.ts.map +1 -0
- package/dist/types/components/FloatLabel.d.ts +8 -0
- package/dist/types/components/FloatLabel.d.ts.map +1 -0
- package/dist/types/components/Glass/Glass.d.ts +10 -0
- package/dist/types/components/Glass/Glass.d.ts.map +1 -0
- package/dist/types/components/Glass/index.d.ts +2 -0
- package/dist/types/components/Glass/index.d.ts.map +1 -0
- package/dist/types/components/ImageViewer/ImageViewer.d.ts +58 -0
- package/dist/types/components/ImageViewer/ImageViewer.d.ts.map +1 -0
- package/dist/types/components/ImageViewer/index.d.ts +4 -0
- package/dist/types/components/ImageViewer/index.d.ts.map +1 -0
- package/dist/types/components/Input/Input.d.ts +27 -0
- package/dist/types/components/Input/Input.d.ts.map +1 -0
- package/dist/types/components/Input/index.d.ts +2 -0
- package/dist/types/components/Input/index.d.ts.map +1 -0
- package/dist/types/components/InputOTP/InputOTP.d.ts +20 -0
- package/dist/types/components/InputOTP/InputOTP.d.ts.map +1 -0
- package/dist/types/components/InputOTP/index.d.ts +2 -0
- package/dist/types/components/InputOTP/index.d.ts.map +1 -0
- package/dist/types/components/Interactive/3DCard.d.ts +28 -0
- package/dist/types/components/Interactive/3DCard.d.ts.map +1 -0
- package/dist/types/components/Interactive/3DMarquee.d.ts +20 -0
- package/dist/types/components/Interactive/3DMarquee.d.ts.map +1 -0
- package/dist/types/components/Interactive/CursorFollow.d.ts +75 -0
- package/dist/types/components/Interactive/CursorFollow.d.ts.map +1 -0
- package/dist/types/components/Interactive/index.cursor.d.ts +7 -0
- package/dist/types/components/Interactive/index.cursor.d.ts.map +1 -0
- package/dist/types/components/Interactive/index.d.ts +2 -0
- package/dist/types/components/Interactive/index.d.ts.map +1 -0
- package/dist/types/components/Label/Label.d.ts +3 -0
- package/dist/types/components/Label/Label.d.ts.map +1 -0
- package/dist/types/components/Label/index.d.ts +2 -0
- package/dist/types/components/Label/index.d.ts.map +1 -0
- package/dist/types/components/Marquee/Marquee.d.ts +31 -0
- package/dist/types/components/Marquee/Marquee.d.ts.map +1 -0
- package/dist/types/components/Marquee/MarqueeWrapper.d.ts +10 -0
- package/dist/types/components/Marquee/MarqueeWrapper.d.ts.map +1 -0
- package/dist/types/components/Marquee/index.d.ts +13 -0
- package/dist/types/components/Marquee/index.d.ts.map +1 -0
- package/dist/types/components/Masonry/Masonry.d.ts +41 -0
- package/dist/types/components/Masonry/Masonry.d.ts.map +1 -0
- package/dist/types/components/Masonry/MasonryWrapper.d.ts +29 -0
- package/dist/types/components/Masonry/MasonryWrapper.d.ts.map +1 -0
- package/dist/types/components/Masonry/index.d.ts +5 -0
- package/dist/types/components/Masonry/index.d.ts.map +1 -0
- package/dist/types/components/Pagination/Pagination.d.ts +24 -0
- package/dist/types/components/Pagination/Pagination.d.ts.map +1 -0
- package/dist/types/components/Pagination/index.d.ts +11 -0
- package/dist/types/components/Pagination/index.d.ts.map +1 -0
- package/dist/types/components/Popover/Popover.d.ts +22 -0
- package/dist/types/components/Popover/Popover.d.ts.map +1 -0
- package/dist/types/components/Popover/index.d.ts +5 -0
- package/dist/types/components/Popover/index.d.ts.map +1 -0
- package/dist/types/components/QrCode/QrCode.d.ts +51 -0
- package/dist/types/components/QrCode/QrCode.d.ts.map +1 -0
- package/dist/types/components/QrCode/index.d.ts +13 -0
- package/dist/types/components/QrCode/index.d.ts.map +1 -0
- package/dist/types/components/Radio/Radio.d.ts +35 -0
- package/dist/types/components/Radio/Radio.d.ts.map +1 -0
- package/dist/types/components/Radio/index.d.ts +2 -0
- package/dist/types/components/Radio/index.d.ts.map +1 -0
- package/dist/types/components/Rate/Rate.d.ts +26 -0
- package/dist/types/components/Rate/Rate.d.ts.map +1 -0
- package/dist/types/components/Rate/index.d.ts +3 -0
- package/dist/types/components/Rate/index.d.ts.map +1 -0
- package/dist/types/components/Resizable/Resizable.d.ts +71 -0
- package/dist/types/components/Resizable/Resizable.d.ts.map +1 -0
- package/dist/types/components/Resizable/index.d.ts +4 -0
- package/dist/types/components/Resizable/index.d.ts.map +1 -0
- package/dist/types/components/ScrollArea/ScrollArea.d.ts +19 -0
- package/dist/types/components/ScrollArea/ScrollArea.d.ts.map +1 -0
- package/dist/types/components/ScrollArea/index.d.ts +2 -0
- package/dist/types/components/ScrollArea/index.d.ts.map +1 -0
- package/dist/types/components/Select/Select.d.ts +33 -0
- package/dist/types/components/Select/Select.d.ts.map +1 -0
- package/dist/types/components/Select/index.d.ts +2 -0
- package/dist/types/components/Select/index.d.ts.map +1 -0
- package/dist/types/components/Separator/Separator.d.ts +5 -0
- package/dist/types/components/Separator/Separator.d.ts.map +1 -0
- package/dist/types/components/Separator/index.d.ts +2 -0
- package/dist/types/components/Separator/index.d.ts.map +1 -0
- package/dist/types/components/Sheet/Sheet.d.ts +36 -0
- package/dist/types/components/Sheet/Sheet.d.ts.map +1 -0
- package/dist/types/components/Sheet/index.d.ts +2 -0
- package/dist/types/components/Sheet/index.d.ts.map +1 -0
- package/dist/types/components/Sidebar/Sidebar.d.ts +50 -0
- package/dist/types/components/Sidebar/Sidebar.d.ts.map +1 -0
- package/dist/types/components/Sidebar/index.d.ts +4 -0
- package/dist/types/components/Sidebar/index.d.ts.map +1 -0
- package/dist/types/components/Skeleton/Skeleton.d.ts +6 -0
- package/dist/types/components/Skeleton/Skeleton.d.ts.map +1 -0
- package/dist/types/components/Skeleton/index.d.ts +2 -0
- package/dist/types/components/Skeleton/index.d.ts.map +1 -0
- package/dist/types/components/Slider/Slider.d.ts +25 -0
- package/dist/types/components/Slider/Slider.d.ts.map +1 -0
- package/dist/types/components/Slider/index.d.ts +2 -0
- package/dist/types/components/Slider/index.d.ts.map +1 -0
- package/dist/types/components/Stepper/Stepper.d.ts +86 -0
- package/dist/types/components/Stepper/Stepper.d.ts.map +1 -0
- package/dist/types/components/Stepper/StepperWrapper.d.ts +25 -0
- package/dist/types/components/Stepper/StepperWrapper.d.ts.map +1 -0
- package/dist/types/components/Stepper/index.d.ts +18 -0
- package/dist/types/components/Stepper/index.d.ts.map +1 -0
- package/dist/types/components/Switch/Switch.d.ts +14 -0
- package/dist/types/components/Switch/Switch.d.ts.map +1 -0
- package/dist/types/components/Switch/index.d.ts +2 -0
- package/dist/types/components/Switch/index.d.ts.map +1 -0
- package/dist/types/components/Table/TableFilter/data-table-date-filter.d.ts +9 -0
- package/dist/types/components/Table/TableFilter/data-table-date-filter.d.ts.map +1 -0
- package/dist/types/components/Table/TableFilter/data-table-filter-popover.d.ts +11 -0
- package/dist/types/components/Table/TableFilter/data-table-filter-popover.d.ts.map +1 -0
- package/dist/types/components/Table/TableFilter/data-table-slider-filter.d.ts +8 -0
- package/dist/types/components/Table/TableFilter/data-table-slider-filter.d.ts.map +1 -0
- package/dist/types/components/Table/TableWrapper.d.ts +2 -0
- package/dist/types/components/Table/TableWrapper.d.ts.map +1 -0
- package/dist/types/components/Table/data-table-column-header.d.ts +9 -0
- package/dist/types/components/Table/data-table-column-header.d.ts.map +1 -0
- package/dist/types/components/Table/data-table-pagination.d.ts +12 -0
- package/dist/types/components/Table/data-table-pagination.d.ts.map +1 -0
- package/dist/types/components/Table/data-table-toolbar.d.ts +10 -0
- package/dist/types/components/Table/data-table-toolbar.d.ts.map +1 -0
- package/dist/types/components/Table/data-table-view-options.d.ts +9 -0
- package/dist/types/components/Table/data-table-view-options.d.ts.map +1 -0
- package/dist/types/components/Table/data-table.d.ts +18 -0
- package/dist/types/components/Table/data-table.d.ts.map +1 -0
- package/dist/types/components/Table/index.d.ts +2 -0
- package/dist/types/components/Table/index.d.ts.map +1 -0
- package/dist/types/components/Table/select-column.d.ts +5 -0
- package/dist/types/components/Table/select-column.d.ts.map +1 -0
- package/dist/types/components/Tabs/Tabs.d.ts +22 -0
- package/dist/types/components/Tabs/Tabs.d.ts.map +1 -0
- package/dist/types/components/Tabs/classes.d.ts +29 -0
- package/dist/types/components/Tabs/classes.d.ts.map +1 -0
- package/dist/types/components/Tabs/index.d.ts +4 -0
- package/dist/types/components/Tabs/index.d.ts.map +1 -0
- package/dist/types/components/Tabs/types.d.ts +15 -0
- package/dist/types/components/Tabs/types.d.ts.map +1 -0
- package/dist/types/components/Textarea/Textarea.d.ts +17 -0
- package/dist/types/components/Textarea/Textarea.d.ts.map +1 -0
- package/dist/types/components/Textarea/index.d.ts +2 -0
- package/dist/types/components/Textarea/index.d.ts.map +1 -0
- package/dist/types/components/Theme/ThemeShowcase.d.ts +3 -0
- package/dist/types/components/Theme/ThemeShowcase.d.ts.map +1 -0
- package/dist/types/components/TimeGridView.d.ts +15 -0
- package/dist/types/components/TimeGridView.d.ts.map +1 -0
- package/dist/types/components/Toast/Toast.d.ts +12 -0
- package/dist/types/components/Toast/Toast.d.ts.map +1 -0
- package/dist/types/components/Toast/index.d.ts +3 -0
- package/dist/types/components/Toast/index.d.ts.map +1 -0
- package/dist/types/components/Toggle/Toggle.d.ts +10 -0
- package/dist/types/components/Toggle/Toggle.d.ts.map +1 -0
- package/dist/types/components/Toggle/index.d.ts +2 -0
- package/dist/types/components/Toggle/index.d.ts.map +1 -0
- package/dist/types/components/Tooltip/Tooltip.d.ts +19 -0
- package/dist/types/components/Tooltip/Tooltip.d.ts.map +1 -0
- package/dist/types/components/Tooltip/index.d.ts +3 -0
- package/dist/types/components/Tooltip/index.d.ts.map +1 -0
- package/dist/types/components/Tour/Tour.d.ts +105 -0
- package/dist/types/components/Tour/Tour.d.ts.map +1 -0
- package/dist/types/components/Tour/TourWrapper.d.ts +46 -0
- package/dist/types/components/Tour/TourWrapper.d.ts.map +1 -0
- package/dist/types/components/Tour/index.d.ts +36 -0
- package/dist/types/components/Tour/index.d.ts.map +1 -0
- package/dist/types/components/TreeSelect/TreeSelect.d.ts +2 -0
- package/dist/types/components/TreeSelect/TreeSelect.d.ts.map +1 -0
- package/dist/types/components/TreeSelect/index.d.ts +2 -0
- package/dist/types/components/TreeSelect/index.d.ts.map +1 -0
- package/dist/types/components/Upload/Upload.d.ts +69 -0
- package/dist/types/components/Upload/Upload.d.ts.map +1 -0
- package/dist/types/components/Upload/index.d.ts +2 -0
- package/dist/types/components/Upload/index.d.ts.map +1 -0
- package/dist/types/components/WheelColumn.d.ts +15 -0
- package/dist/types/components/WheelColumn.d.ts.map +1 -0
- package/dist/types/config/data-table.d.ts +125 -0
- package/dist/types/config/data-table.d.ts.map +1 -0
- package/dist/types/constants/common.d.ts +4 -0
- package/dist/types/constants/common.d.ts.map +1 -0
- package/dist/types/constants/theme.d.ts +13 -0
- package/dist/types/constants/theme.d.ts.map +1 -0
- package/dist/types/hooks/index.d.ts +10 -0
- package/dist/types/hooks/index.d.ts.map +1 -0
- package/dist/types/hooks/use-callback-ref.d.ts +10 -0
- package/dist/types/hooks/use-callback-ref.d.ts.map +1 -0
- package/dist/types/hooks/use-data-table.d.ts +26 -0
- package/dist/types/hooks/use-data-table.d.ts.map +1 -0
- package/dist/types/hooks/use-debounced-callback.d.ts +2 -0
- package/dist/types/hooks/use-debounced-callback.d.ts.map +1 -0
- package/dist/types/hooks/use-debounced-value.d.ts +9 -0
- package/dist/types/hooks/use-debounced-value.d.ts.map +1 -0
- package/dist/types/hooks/use-event-listener.d.ts +7 -0
- package/dist/types/hooks/use-event-listener.d.ts.map +1 -0
- package/dist/types/hooks/use-intersection-observer.d.ts +20 -0
- package/dist/types/hooks/use-intersection-observer.d.ts.map +1 -0
- package/dist/types/hooks/use-isomorphic-layout-effect.d.ts +3 -0
- package/dist/types/hooks/use-isomorphic-layout-effect.d.ts.map +1 -0
- package/dist/types/hooks/use-media-query.d.ts +7 -0
- package/dist/types/hooks/use-media-query.d.ts.map +1 -0
- package/dist/types/hooks/use-mouse-position.d.ts +14 -0
- package/dist/types/hooks/use-mouse-position.d.ts.map +1 -0
- package/dist/types/hooks/use-on-click-outside.d.ts +5 -0
- package/dist/types/hooks/use-on-click-outside.d.ts.map +1 -0
- package/dist/types/hooks/use-script.d.ts +9 -0
- package/dist/types/hooks/use-script.d.ts.map +1 -0
- package/dist/types/hooks/use-scroll-lock.d.ts +13 -0
- package/dist/types/hooks/use-scroll-lock.d.ts.map +1 -0
- package/dist/types/index.d.ts +72 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/lib/TextAnimation/BlurText.d.ts +18 -0
- package/dist/types/lib/TextAnimation/BlurText.d.ts.map +1 -0
- package/dist/types/lib/TextAnimation/CircularText.d.ts +10 -0
- package/dist/types/lib/TextAnimation/CircularText.d.ts.map +1 -0
- package/dist/types/lib/TextAnimation/FlipWords.d.ts +10 -0
- package/dist/types/lib/TextAnimation/FlipWords.d.ts.map +1 -0
- package/dist/types/lib/TextAnimation/GradientText.d.ts +11 -0
- package/dist/types/lib/TextAnimation/GradientText.d.ts.map +1 -0
- package/dist/types/lib/TextAnimation/RollingText.d.ts +12 -0
- package/dist/types/lib/TextAnimation/RollingText.d.ts.map +1 -0
- package/dist/types/lib/TextAnimation/RotatingText.d.ts +11 -0
- package/dist/types/lib/TextAnimation/RotatingText.d.ts.map +1 -0
- package/dist/types/lib/TextAnimation/ShimmeringText.d.ts +12 -0
- package/dist/types/lib/TextAnimation/ShimmeringText.d.ts.map +1 -0
- package/dist/types/lib/TextAnimation/SplittingText.d.ts +26 -0
- package/dist/types/lib/TextAnimation/SplittingText.d.ts.map +1 -0
- package/dist/types/lib/TextAnimation/TextGenerateEffect.d.ts +10 -0
- package/dist/types/lib/TextAnimation/TextGenerateEffect.d.ts.map +1 -0
- package/dist/types/lib/TextAnimation/TextHoverEffect.d.ts +6 -0
- package/dist/types/lib/TextAnimation/TextHoverEffect.d.ts.map +1 -0
- package/dist/types/lib/TextAnimation/TextPressureEffect.d.ts +20 -0
- package/dist/types/lib/TextAnimation/TextPressureEffect.d.ts.map +1 -0
- package/dist/types/lib/TextAnimation/TypingText.d.ts +27 -0
- package/dist/types/lib/TextAnimation/TypingText.d.ts.map +1 -0
- package/dist/types/lib/TextAnimation/WritingText.d.ts +13 -0
- package/dist/types/lib/TextAnimation/WritingText.d.ts.map +1 -0
- package/dist/types/lib/TextAnimation/index.d.ts +16 -0
- package/dist/types/lib/TextAnimation/index.d.ts.map +1 -0
- package/dist/types/types/data-table.d.ts +44 -0
- package/dist/types/types/data-table.d.ts.map +1 -0
- package/dist/types/types/theme.d.ts +11 -0
- package/dist/types/types/theme.d.ts.map +1 -0
- package/dist/types/types/variables.d.ts +6 -0
- package/dist/types/types/variables.d.ts.map +1 -0
- package/dist/types/utils/animations.d.ts +47 -0
- package/dist/types/utils/animations.d.ts.map +1 -0
- package/dist/types/utils/css.d.ts +4 -0
- package/dist/types/utils/css.d.ts.map +1 -0
- package/dist/types/utils/data-table.d.ts +13 -0
- package/dist/types/utils/data-table.d.ts.map +1 -0
- package/dist/types/utils/datetime.d.ts +2 -0
- package/dist/types/utils/datetime.d.ts.map +1 -0
- package/dist/types/utils/parsers.d.ts +38 -0
- package/dist/types/utils/parsers.d.ts.map +1 -0
- package/package.json +968 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimePicker.cjs","sources":["../../../../src/components/DatePicker/TimePicker.tsx"],"sourcesContent":["import * as React from \"react\";\nimport {\n memo,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type RefObject,\n} from \"react\";\nimport { cn } from \"@dsui/ui/index\";\nimport Button from \"../Button/Button\";\nimport Select from \"../Select/Select\";\nimport Input, { type InputProps } from \"../Input/Input\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@dsui/ui/components/popover\";\nimport {\n Drawer,\n DrawerContent,\n DrawerDescription,\n DrawerHeader,\n DrawerTitle,\n DrawerTrigger,\n} from \"@dsui/ui/components/drawer\";\nimport { isMobile } from \"react-device-detect\";\nimport { Clock } from \"lucide-react\";\nimport { TimeColumnwheel } from \"../../components/WheelColumn\";\nimport { TimeGridView } from \"../../components/TimeGridView\";\nimport { format as dfFormat, parse, isValid } from \"date-fns\";\nimport type { CalendarColor } from \"../Calendar/Calendar\";\n\nexport type TimePickerMode = \"wheel\" | \"select\" | \"compact\";\n\nexport type DisabledTimeRange = {\n from: string; // Format: \"HH:mm\" or \"HH:mm:ss\"\n to: string; // Format: \"HH:mm\" or \"HH:mm:ss\"\n};\n\nexport type FormatType = string | { input: string; output: string };\n\nexport type TimePickerProps = Omit<\n InputProps,\n \"value\" | \"onChange\" | \"onSelect\" | \"mask\" | \"children\"\n> & {\n value?: string; // Time string in specified format\n onChange?: (\n event?: React.ChangeEvent<HTMLInputElement>,\n value?: string,\n date?: Date,\n ) => void;\n onSelect?: (date?: Date, value?: string) => void;\n showHours?: boolean;\n showMinutes?: boolean;\n showSeconds?: boolean;\n disabled?: boolean;\n className?: string;\n timeLabel?:\n | boolean\n | string\n | { hours?: string; minutes?: string; seconds?: string };\n mask?: boolean | string; // Enable mask for time input: true (auto-generate), string (custom mask), false/undefined (no mask)\n format?: FormatType; // Time format using date-fns format tokens (default: auto from showSeconds)\n\n // New configuration options\n mode?: TimePickerMode; // Display mode: 'wheel' (default), 'select', 'compact'\n hourInterval?: number; // Hour interval (e.g., 1, 2, 3) - defaults to 1\n minuteInterval?: number; // Minute interval (e.g., 5, 10, 15, 30) - defaults to 1\n secondInterval?: number; // Second interval (e.g., 5, 10, 15, 30) - defaults to 1\n disabledTimes?: string[]; // Array of disabled times in \"HH:mm\" or \"HH:mm:ss\" format\n disabledTimeRanges?: DisabledTimeRange[]; // Array of disabled time ranges\n showNowButton?: boolean; // Show \"Now\" button to select current time\n nowButtonLabel?: string; // Label for \"Now\" button (defaults to \"Now\")\n\n // Standalone mode configuration\n standalone?: boolean; // When true (default), TimePicker shows as a drawer/popover with trigger. When false, it's used as an integrated component (e.g., inside DatePicker)\n desktopMode?: \"popover\" | \"drawer\"; // Desktop display mode for standalone: 'popover' or 'drawer'\n mobileMode?: \"popover\" | \"drawer\"; // Mobile display mode for standalone: 'popover' or 'drawer'\n color?: CalendarColor; // Color variant for selected time (defaults to \"primary\")\n};\n\nconst generateIntervalArray = (max: number, interval: number = 1): number[] => {\n const result: number[] = [];\n for (let i = 0; i < max; i += interval) {\n result.push(i);\n }\n return result;\n};\n\nconst pad = (num: number): string => String(num).padStart(2, \"0\");\n\n// Format time Date to string using date-fns\nconst formatTime = (\n date: Date | undefined,\n format: string = \"HH:mm\",\n): string => {\n if (!date || !isValid(date)) return \"\";\n return dfFormat(date, format);\n};\n\n// Parse time string to Date using date-fns\nconst parseTimeString = (\n timeStr: string,\n format: string = \"HH:mm\",\n): Date | undefined => {\n if (!timeStr) return undefined;\n\n const referenceDate = new Date();\n const parsedDate = parse(timeStr, format, referenceDate);\n\n if (!isValid(parsedDate)) return undefined;\n\n return parsedDate;\n};\n\nfunction generateMaskFromTimeFormat(format: string): string {\n return format\n .replace(/HH|mm|ss/g, (match) => {\n switch (match) {\n case \"HH\":\n case \"mm\":\n case \"ss\":\n return \"99\";\n default:\n return match;\n }\n })\n .replace(/H|m|s/g, () => \"9\");\n}\n\nexport function TimePicker({\n value,\n onChange,\n onSelect,\n showHours = true,\n showMinutes = true,\n showSeconds = false,\n disabled = false,\n className,\n timeLabel,\n mask,\n format,\n mode = \"wheel\",\n hourInterval = 1,\n minuteInterval = 1,\n secondInterval = 1,\n disabledTimes = [],\n disabledTimeRanges = [],\n showNowButton = false,\n nowButtonLabel = \"Now\",\n standalone = true,\n desktopMode = \"popover\",\n mobileMode = \"drawer\",\n color = \"primary\",\n ...props\n}: TimePickerProps) {\n // Determine input and output formats (like DatePicker)\n let inputFormat: string;\n let outputFormat: string;\n if (typeof format === \"string\") {\n inputFormat = format;\n outputFormat = format;\n } else if (format) {\n inputFormat = format.input;\n outputFormat = format.output;\n } else {\n // Auto-determine from showSeconds if not provided\n inputFormat = showSeconds ? \"HH:mm:ss\" : \"HH:mm\";\n outputFormat = showSeconds ? \"HH:mm:ss\" : \"HH:mm\";\n }\n\n const [hours, setHours] = useState<number | undefined>(undefined);\n const [minutes, setMinutes] = useState<number | undefined>(undefined);\n const [seconds, setSeconds] = useState<number | undefined>(undefined);\n const [standaloneOpen, setStandaloneOpen] = useState(false);\n\n useEffect(() => {\n if (value) {\n const parsed = parseTimeString(value, inputFormat);\n if (parsed) {\n setHours(parsed.getHours());\n setMinutes(parsed.getMinutes());\n setSeconds(parsed.getSeconds());\n }\n } else {\n setHours(undefined);\n setMinutes(undefined);\n setSeconds(undefined);\n }\n }, [value, inputFormat]);\n\n const hoursRef = useRef<HTMLDivElement>(null);\n const minutesRef = useRef<HTMLDivElement>(null);\n const secondsRef = useRef<HTMLDivElement>(null);\n const gridRef = useRef<HTMLDivElement>(null);\n\n // Generate time arrays based on intervals\n const HOURS = useMemo(\n () => generateIntervalArray(24, hourInterval),\n [hourInterval],\n );\n const MINUTES = useMemo(\n () => generateIntervalArray(60, minuteInterval),\n [minuteInterval],\n );\n const SECONDS = useMemo(\n () => generateIntervalArray(60, secondInterval),\n [secondInterval],\n );\n\n // Helper function to check if a time is disabled\n const isTimeDisabled = useCallback(\n (\n h: number | undefined,\n m: number | undefined,\n s: number | undefined = 0,\n ): boolean => {\n const timeStr = `${pad(h ?? 0)}:${pad(m ?? 0)}${showSeconds ? `:${pad(s ?? 0)}` : \"\"}`;\n\n // Check if specific time is disabled\n if (disabledTimes.includes(timeStr)) {\n return true;\n }\n\n // Check if time is in a disabled range\n for (const range of disabledTimeRanges) {\n const [fromH, fromM, fromS = 0] = range.from.split(\":\").map(Number);\n const [toH, toM, toS = 0] = range.to.split(\":\").map(Number);\n\n const currentTime = (h ?? 0) * 3600 + (m ?? 0) * 60 + (s ?? 0);\n const fromTime = fromH * 3600 + fromM * 60 + fromS;\n const toTime = toH * 3600 + toM * 60 + toS;\n\n if (currentTime >= fromTime && currentTime <= toTime) {\n return true;\n }\n }\n\n return false;\n },\n [disabledTimes, disabledTimeRanges, showSeconds],\n );\n\n // Helper function to get time label based on type and timeLabel prop\n const getTimeLabel = useCallback(\n (type: \"hours\" | \"minutes\" | \"seconds\"): string | undefined => {\n if (!timeLabel) return undefined;\n\n if (typeof timeLabel === \"boolean\") {\n return timeLabel\n ? type === \"hours\"\n ? \"Hour\"\n : type === \"minutes\"\n ? \"Minute\"\n : \"Second\"\n : undefined;\n }\n\n if (typeof timeLabel === \"string\") {\n return timeLabel;\n }\n\n // Object case\n if (type === \"hours\") return timeLabel.hours || \"Hour\";\n if (type === \"minutes\") return timeLabel.minutes || \"Minute\";\n return timeLabel.seconds || \"Second\";\n },\n [timeLabel],\n );\n\n // If timeLabel is a string, show it as a common label above all columns\n const shareLabel = typeof timeLabel === \"string\" && (\n <div\n key=\"common-label\"\n className=\"text-xs font-semibold text-muted-foreground uppercase p-2 border-b w-full text-center\"\n >\n {timeLabel}\n </div>\n );\n\n // Find nearest valid time\n const findNearestValidTime = useCallback(\n (\n targetH: number,\n targetM: number,\n targetS: number = 0,\n ): { h: number; m: number; s: number } => {\n // Find nearest hour\n const nearestH = HOURS.reduce((prev, curr) =>\n Math.abs(curr - targetH) < Math.abs(prev - targetH) ? curr : prev,\n );\n\n // Find nearest minute\n const nearestM = MINUTES.reduce((prev, curr) =>\n Math.abs(curr - targetM) < Math.abs(prev - targetM) ? curr : prev,\n );\n\n // Find nearest second\n const nearestS = SECONDS.reduce((prev, curr) =>\n Math.abs(curr - targetS) < Math.abs(prev - targetS) ? curr : prev,\n );\n\n // If the nearest time is disabled, find the next available time\n if (isTimeDisabled(nearestH, nearestM, nearestS)) {\n // Try to find next available time\n for (const h of HOURS) {\n for (const m of MINUTES) {\n for (const s of SECONDS) {\n if (!isTimeDisabled(h, m, s)) {\n return { h, m, s };\n }\n }\n }\n }\n }\n\n return { h: nearestH, m: nearestM, s: nearestS };\n },\n [HOURS, MINUTES, SECONDS, isTimeDisabled],\n );\n\n const updateDateTime = useCallback(\n (h: number, m: number, s: number) => {\n const newDate = new Date();\n newDate.setHours(h, m, s, 0);\n const formattedValue = formatTime(newDate, outputFormat);\n onSelect?.(newDate, formattedValue);\n },\n [outputFormat, onSelect],\n );\n\n const handleHourChange = (h: number) => {\n if (!isTimeDisabled(h, minutes, seconds)) {\n setHours(h);\n updateDateTime(h, minutes ?? 0, seconds ?? 0);\n }\n };\n\n const handleMinuteChange = (m: number) => {\n if (!isTimeDisabled(hours, m, seconds)) {\n setMinutes(m);\n updateDateTime(hours ?? 0, m, seconds ?? 0);\n }\n };\n\n const handleSecondChange = (s: number) => {\n if (!isTimeDisabled(hours, minutes, s)) {\n setSeconds(s);\n updateDateTime(hours ?? 0, minutes ?? 0, s);\n }\n };\n\n // Scroll to center item when selected\n const scrollToSelected = useCallback(\n (ref: RefObject<HTMLDivElement | null>) => {\n if (ref.current) {\n const selected = ref.current.querySelector(\n \"[data-selected]\",\n ) as HTMLElement;\n if (selected) {\n const container = ref.current;\n const containerHeight = container.clientHeight;\n const selectedTop = selected.offsetTop;\n const selectedHeight = selected.clientHeight;\n\n const scrollPosition =\n selectedTop - containerHeight / 2 + selectedHeight / 2;\n\n container.scrollTo({\n top: scrollPosition,\n behavior: \"smooth\",\n });\n }\n }\n },\n [],\n );\n\n const scrollHandler = useCallback(() => {\n if (mode === \"wheel\") {\n // Scroll to selected item when picker opens (only for initial load)\n scrollToSelected(hoursRef);\n scrollToSelected(minutesRef);\n scrollToSelected(secondsRef);\n } else if (mode === \"compact\") {\n // Scroll to selected item in grid mode\n scrollToSelected(gridRef);\n }\n }, [hoursRef, minutesRef, secondsRef, gridRef, mode, scrollToSelected]);\n\n const handleNowClick = () => {\n const now = new Date();\n const { h, m, s } = findNearestValidTime(\n now.getHours(),\n now.getMinutes(),\n now.getSeconds(),\n );\n setHours(h);\n setMinutes(m);\n setSeconds(s);\n updateDateTime(h, m, s);\n setTimeout(() => scrollHandler(), 100);\n };\n\n useEffect(() => {\n const timer = setTimeout(() => scrollHandler(), 100);\n return () => clearTimeout(timer);\n }, [standaloneOpen, mode, scrollHandler]);\n\n // Normal Mode - Dropdown/Input style\n const TimeColumnNormal = memo(\n ({\n items,\n value: selectedValue,\n onChange: onChangeCol,\n timeLabel,\n type,\n }: {\n items: number[];\n value: number | undefined;\n onChange: (val: number) => void;\n timeLabel?: string;\n type: \"hours\" | \"minutes\" | \"seconds\";\n }) => (\n <div className=\"flex flex-col gap-2\">\n {timeLabel && (\n <div className=\"text-xs font-semibold text-muted-foreground uppercase p-2 border-b w-full text-center\">\n {timeLabel}\n </div>\n )}\n <div className=\"p-2\">\n <Select\n value={selectedValue?.toString() || \"\"}\n onValueChange={(value) => onChangeCol(Number(value))}\n disabled={disabled}\n clearable={false}\n search={false}\n options={items.map((item) => {\n const itemDisabled =\n (type === \"hours\" && isTimeDisabled(item, minutes, seconds)) ||\n (type === \"minutes\" && isTimeDisabled(hours, item, seconds)) ||\n (type === \"seconds\" && isTimeDisabled(hours, minutes, item));\n\n return {\n label: pad(item),\n value: item.toString(),\n disabled: itemDisabled,\n };\n })}\n />\n </div>\n </div>\n ),\n );\n\n // Grid Mode - Combined time selection (HH:mm format only, vertical layout)\n const handleTimeSelect = (h: number, m: number) => {\n // Always set seconds to 0 in grid mode\n if (!isTimeDisabled(h, m, 0)) {\n setHours(h);\n setMinutes(m);\n setSeconds(0);\n updateDateTime(h, m, 0);\n }\n };\n\n const renderColumns = () => {\n const columns = [];\n\n // Grid mode shows combined time options\n if (mode === \"compact\") {\n return (\n <TimeGridView\n HOURS={HOURS}\n MINUTES={MINUTES}\n hours={hours}\n minutes={minutes}\n disabled={disabled}\n isTimeDisabled={isTimeDisabled}\n onTimeSelect={handleTimeSelect}\n ref={gridRef}\n color={color}\n />\n );\n }\n\n if (showHours) {\n const hourLabel =\n typeof timeLabel === \"string\" ? undefined : getTimeLabel(\"hours\");\n\n if (mode === \"wheel\") {\n columns.push(\n <TimeColumnwheel\n key=\"hours\"\n ref={hoursRef}\n items={HOURS}\n value={hours}\n onChange={handleHourChange}\n timeLabel={hourLabel}\n isItemDisabled={(item) => isTimeDisabled(item, minutes, seconds)}\n disabled={disabled}\n color={color}\n />,\n );\n } else if (mode === \"select\") {\n columns.push(\n <TimeColumnNormal\n key=\"hours\"\n items={HOURS}\n value={hours}\n onChange={handleHourChange}\n timeLabel={hourLabel}\n type=\"hours\"\n />,\n );\n }\n }\n\n if (showMinutes) {\n const minuteLabel =\n typeof timeLabel === \"string\" ? undefined : getTimeLabel(\"minutes\");\n\n if (mode === \"wheel\") {\n columns.push(\n <TimeColumnwheel\n key=\"minutes\"\n ref={minutesRef}\n items={MINUTES}\n value={minutes}\n onChange={handleMinuteChange}\n timeLabel={minuteLabel}\n itemClassName={showHours ? \"border-l\" : undefined}\n isItemDisabled={(item) => isTimeDisabled(hours, item, seconds)}\n disabled={disabled}\n color={color}\n />,\n );\n } else if (mode === \"select\") {\n columns.push(\n <TimeColumnNormal\n key=\"minutes\"\n items={MINUTES}\n value={minutes}\n onChange={handleMinuteChange}\n timeLabel={minuteLabel}\n type=\"minutes\"\n />,\n );\n }\n }\n\n if (showSeconds) {\n const secondLabel =\n typeof timeLabel === \"string\" ? undefined : getTimeLabel(\"seconds\");\n\n if (mode === \"wheel\") {\n columns.push(\n <TimeColumnwheel\n key=\"seconds\"\n ref={secondsRef}\n items={SECONDS}\n value={seconds}\n onChange={handleSecondChange}\n timeLabel={secondLabel}\n itemClassName={showMinutes || showHours ? \"border-l\" : undefined}\n isItemDisabled={(item) => isTimeDisabled(hours, minutes, item)}\n disabled={disabled}\n color={color}\n />,\n );\n } else if (mode === \"select\") {\n columns.push(\n <TimeColumnNormal\n key=\"seconds\"\n items={SECONDS}\n value={seconds}\n onChange={handleSecondChange}\n timeLabel={secondLabel}\n type=\"seconds\"\n />,\n );\n }\n }\n\n return columns;\n };\n\n // If standalone mode is disabled, return the content directly (for integration with DatePicker)\n if (!standalone) {\n return (\n <div\n className={cn(\"flex flex-col gap-2 h-full justify-between\", className)}\n >\n {shareLabel}\n\n <div\n className={cn(\n \"flex rounded overflow-clip mb-auto\",\n mode === \"wheel\"\n ? \"items-end justify-center p-0 h-72\"\n : \"items-start justify-center\",\n )}\n >\n {renderColumns()}\n </div>\n\n {showNowButton && (\n <Button\n type=\"button\"\n variant=\"solid\"\n size=\"xs\"\n onClick={handleNowClick}\n disabled={disabled}\n className={cn(\"rounded-none\")}\n >\n {nowButtonLabel}\n </Button>\n )}\n </div>\n );\n }\n\n // Render the time picker content\n const timePickerContent = (\n <div className={cn(\"flex flex-col gap-4 h-full\", className)}>\n {shareLabel}\n\n <div\n className={cn(\n \"flex rounded overflow-clip my-auto mx-auto max-w-sm md:max-w-md lg:max-w-lg relative\",\n mode === \"wheel\"\n ? \"items-end justify-center p-0\"\n : \"items-start justify-center\",\n {\n \"h-72\": mode === \"wheel\",\n \"w-xs\": standalone && (isMobile || desktopMode === \"drawer\"),\n },\n )}\n >\n {renderColumns()}\n </div>\n\n {showNowButton && (\n <Button\n type=\"button\"\n variant=\"solid\"\n size=\"xs\"\n onClick={handleNowClick}\n disabled={disabled}\n className={cn(\"rounded-none\")}\n >\n {nowButtonLabel}\n </Button>\n )}\n </div>\n );\n\n // Standalone mode: show as drawer or popover with Input\n const iconTrigger = (\n <Button\n variant=\"ghost\"\n className=\"!p-1 !leading-0 h-auto rounded hover:bg-accent transition-colors\"\n disabled={disabled}\n >\n <Clock className=\"size-4\" />\n <span className=\"sr-only\">Select time</span>\n </Button>\n );\n\n const popPicker = (\n <Popover open={standaloneOpen} onOpenChange={setStandaloneOpen}>\n <PopoverTrigger asChild disabled={disabled}>\n {iconTrigger}\n </PopoverTrigger>\n <PopoverContent\n className={cn(\n \"w-auto overflow-hidden p-0\",\n \"backdrop-blur bg-background/50\",\n )}\n >\n {timePickerContent}\n </PopoverContent>\n </Popover>\n );\n\n const drawPicker = (\n <Drawer open={standaloneOpen} onOpenChange={setStandaloneOpen}>\n <DrawerTrigger asChild>{iconTrigger}</DrawerTrigger>\n <DrawerContent\n className={cn(\n \"w-auto overflow-hidden p-0\",\n \"backdrop-blur bg-background\",\n )}\n >\n <DrawerHeader className=\"sr-only\">\n <DrawerTitle>Select time</DrawerTitle>\n <DrawerDescription>Choose a time</DrawerDescription>\n </DrawerHeader>\n {timePickerContent}\n </DrawerContent>\n </Drawer>\n );\n\n // Determine the mask to use\n const timeFormat = outputFormat; // Use outputFormat for placeholder\n let maskToUse: string | undefined;\n if (mask === true) {\n maskToUse = generateMaskFromTimeFormat(inputFormat);\n } else if (typeof mask === \"string\") {\n maskToUse = mask;\n }\n // If mask is false or undefined, maskToUse remains undefined\n\n // Handle Input change (when user types)\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const inputValue = e.target.value;\n const parsedDate = parseTimeString(inputValue, inputFormat);\n\n if (parsedDate) {\n setHours(parsedDate.getHours());\n setMinutes(parsedDate.getMinutes());\n setSeconds(parsedDate.getSeconds());\n const formattedValue = formatTime(parsedDate, outputFormat);\n onChange?.(e, formattedValue, parsedDate);\n onSelect?.(parsedDate, formattedValue);\n } else {\n // Reset state when input is cleared\n setHours(0);\n setMinutes(0);\n setSeconds(0);\n onChange?.(e, inputValue, undefined);\n onSelect?.(undefined, inputValue);\n }\n };\n\n // Return Input with picker as suffix icon (standalone mode)\n return (\n <Input\n {...props}\n clearable\n value={value || \"\"}\n placeholder={timeFormat}\n mask={maskToUse}\n disabled={disabled}\n className=\"cursor-pointer\"\n onChange={handleInputChange}\n suffixIcon={\n isMobile\n ? mobileMode === \"drawer\"\n ? drawPicker\n : popPicker\n : desktopMode === \"drawer\"\n ? drawPicker\n : popPicker\n }\n />\n );\n}\n"],"names":["generateIntervalArray","max","interval","result","i","pad","num","formatTime","date","format","isValid","dfFormat","parseTimeString","timeStr","referenceDate","parsedDate","parse","generateMaskFromTimeFormat","match","TimePicker","value","onChange","onSelect","showHours","showMinutes","showSeconds","disabled","className","timeLabel","mask","mode","hourInterval","minuteInterval","secondInterval","disabledTimes","disabledTimeRanges","showNowButton","nowButtonLabel","standalone","desktopMode","mobileMode","color","props","inputFormat","outputFormat","hours","setHours","useState","minutes","setMinutes","seconds","setSeconds","standaloneOpen","setStandaloneOpen","useEffect","parsed","hoursRef","useRef","minutesRef","secondsRef","gridRef","HOURS","useMemo","MINUTES","SECONDS","isTimeDisabled","useCallback","h","m","s","range","fromH","fromM","fromS","toH","toM","toS","currentTime","fromTime","toTime","getTimeLabel","type","shareLabel","jsx","findNearestValidTime","targetH","targetM","targetS","nearestH","prev","curr","nearestM","nearestS","updateDateTime","newDate","formattedValue","handleHourChange","handleMinuteChange","handleSecondChange","scrollToSelected","ref","selected","container","containerHeight","selectedTop","selectedHeight","scrollPosition","scrollHandler","handleNowClick","now","timer","TimeColumnNormal","memo","items","selectedValue","onChangeCol","jsxs","Select","item","itemDisabled","handleTimeSelect","renderColumns","columns","TimeGridView","hourLabel","TimeColumnwheel","minuteLabel","secondLabel","cn","Button","timePickerContent","isMobile","iconTrigger","Clock","popPicker","Popover","PopoverTrigger","PopoverContent","drawPicker","Drawer","DrawerTrigger","DrawerContent","DrawerHeader","DrawerTitle","DrawerDescription","timeFormat","maskToUse","handleInputChange","inputValue","Input"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),b=require("react"),s=require("@dsui/ui/components/dialog"),c=require("@dsui/ui/components/alert-dialog"),I=require("@dsui/ui/components/scroll-area"),t=require("@dsui/ui/lib/utils"),W=require("../../utils/animations.cjs"),y=require("lucide-react"),S=require("../Button/Button.cjs"),X={dialog:null,confirm:e.jsx("div",{className:"size-12 flex items-center justify-center rounded-full bg-success/10 mx-auto mb-4",children:e.jsx(y.CheckCircle2,{className:"size-6 text-success"})}),alert:e.jsx("div",{className:"size-12 flex items-center justify-center rounded-full bg-error/10 mx-auto mb-4",children:e.jsx(y.AlertCircle,{className:"size-5 text-error"})}),info:e.jsx("div",{className:"size-12 flex items-center justify-center rounded-full bg-blue-500/10 mx-auto mb-4",children:e.jsx(y.Info,{className:"size-5 text-blue-500"})}),warning:e.jsx("div",{className:"size-12 flex items-center justify-center rounded-full bg-warning/10 mx-auto mb-4",children:e.jsx(y.AlertTriangle,{className:"size-5 text-warning"})})},Y={dialog:"",confirm:"border-blue-500/20",alert:"border-red-500/20",info:"border-blue-500/20",warning:"border-yellow-500/20"},Z={sm:"sm:max-w-sm",md:"sm:max-w-md",lg:"sm:max-w-lg",xl:"sm:max-w-xl","2xl":"sm:max-w-2xl","3xl":"sm:max-w-3xl","4xl":"sm:max-w-4xl",full:"sm:max-w-[95vw] h-[95vh]"},$={center:"!top-[50%] !left-[50%] !translate-x-[-50%] !translate-y-[-50%]",top:"!top-4 !left-[50%] !translate-x-[-50%] !translate-y-0",bottom:"!top-auto !bottom-4 !left-[50%] !translate-x-[-50%] !translate-y-0",left:"!left-4 !top-[50%] !translate-x-0 !translate-y-[-50%]",right:"!left-auto !right-4 !top-[50%] !translate-x-0 !translate-y-[-50%]","top-left":"!top-4 !left-4 !translate-x-0 !translate-y-0","top-right":"!top-4 !left-auto !right-4 !translate-x-0 !translate-y-0","bottom-left":"!top-auto !bottom-4 !left-4 !translate-x-0 !translate-y-0","bottom-right":"!top-auto !bottom-4 !left-auto !right-4 !translate-x-0 !translate-y-0"},E=b.forwardRef((K,v)=>{const{variant:C="dialog",open:w,onOpenChange:A,title:l,description:a,children:u,trigger:f,footer:n,closeOnEsc:z=!0,closeOnOutside:_=!0,showCloseButton:P=!0,position:G="center",size:J="md",fullscreen:k=!1,scrollable:q=!0,stickyHeader:o=!1,stickyFooter:i=!1,animation:m,className:T,contentClassName:B,headerClassName:L,titleClassName:g,descriptionClassName:h,footerClassName:Q,confirmButton:x,cancelButton:d,showIcon:U=!0,backdropFilter:F=0,overlay:O="dark"}=K,V=b.useMemo(()=>m?W.animationClass(m):{className:""},[m]),M=t.cn("!p-0 !gap-0 flex flex-col",Z[k?"full":J],$[G],Y[C],V.className,k?"h-[95vh]":"max-h-[min(600px,80vh)]"),p=t.cn("px-6 pt-6 text-left",!q&&"contents space-y-0",L),j=t.cn("px-6 pb-6 sm:justify-end",!q&&"border-t py-4",Q),N=U?X[C]:null,R=b.useMemo(()=>l||N||a?e.jsxs(c.AlertDialogHeader,{className:t.cn("flex items-center gap-2 py-4",{"border-b":o},p),children:[(l||N)&&e.jsxs(c.AlertDialogTitle,{className:t.cn(g),children:[N,l]}),a&&e.jsx(c.AlertDialogDescription,{className:h,children:a})]}):null,[l,N,a,p,g,h,o]),H=b.useMemo(()=>{const r={variant:"solid",color:"primary",...x,text:x?.text??"Confirm"},D={variant:"outline",...d,text:d?.text??"Cancel"};return n||x||d?e.jsx(c.AlertDialogFooter,{className:t.cn("py-4",{"border-t":i},j),children:n||e.jsxs(e.Fragment,{children:[d&&e.jsx(S.default,{...D,onClick:()=>{D.onClick?.()},children:D.text}),x&&e.jsx(S.default,{...r,onClick:()=>{r.onClick?.()},children:r.text})]})}):null},[n,j,x,d,i]);return C!=="dialog"?e.jsxs(c.AlertDialog,{open:w,onOpenChange:A,children:[f&&e.jsx(c.AlertDialogTrigger,{asChild:!0,children:f}),e.jsxs(c.AlertDialogContent,{ref:v,className:t.cn(T,M),onEscapeKeyDown:r=>!z&&r.preventDefault(),noDefaultAnimation:!!m,backdropFilter:F,overlay:O,children:[o&&R,e.jsxs(I.ScrollArea,{className:"flex max-h-full flex-col overflow-hidden",children:[!o&&R,u&&e.jsx("div",{className:t.cn("px-6 py-4",B),children:u}),!i&&H]}),i&&H]})]}):e.jsxs(s.Dialog,{open:w,onOpenChange:A,children:[f&&e.jsx(s.DialogTrigger,{asChild:!0,children:f}),e.jsxs(s.DialogContent,{ref:v,className:t.cn(T,M),showCloseButton:P,onEscapeKeyDown:r=>!z&&r.preventDefault(),onInteractOutside:r=>!_&&r.preventDefault(),noDefaultAnimation:!!m,backdropFilter:F,overlay:O,children:[o&&(l||a)&&e.jsxs(s.DialogHeader,{className:t.cn({"py-4 border-b":o},p),children:[l&&e.jsx(s.DialogTitle,{className:g,children:l}),a&&e.jsx(s.DialogDescription,{className:h,children:a})]}),e.jsxs(I.ScrollArea,{className:"flex max-h-full flex-col overflow-hidden",children:[!o&&(l||a)&&e.jsxs(s.DialogHeader,{className:t.cn("py-4",p),children:[l&&e.jsx(s.DialogTitle,{className:g,children:l}),a&&e.jsx(s.DialogDescription,{className:h,children:a})]}),u&&e.jsx("div",{className:t.cn("px-6 py-4",B),children:u}),!i&&n&&e.jsx(s.DialogFooter,{className:t.cn("py-4",j),children:n})]}),i&&n&&e.jsx(s.DialogFooter,{className:t.cn({"py-4 border-t":i},j),children:n})]})]})});E.displayName="Dialog";exports.default=E;
|
|
2
|
+
//# sourceMappingURL=Dialog.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dialog.cjs","sources":["../../../../src/components/Dialog/Dialog.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport {\n Dialog as SDialog,\n DialogContent as SDialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@dsui/ui/components/dialog\";\nimport {\n AlertDialog,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"@dsui/ui/components/alert-dialog\";\nimport { ScrollArea } from \"@dsui/ui/components/scroll-area\";\nimport { cn } from \"@dsui/ui/lib/utils\";\nimport type { BasicAnimation } from \"@/types/variables\";\nimport { animationClass } from \"@/utils/animations\";\nimport { AlertTriangle, Info, CheckCircle2, AlertCircle } from \"lucide-react\";\nimport Button, { type ButtonProps } from \"../Button/Button\";\n\nexport type DialogVariant = \"dialog\" | \"confirm\" | \"alert\" | \"info\" | \"warning\";\nexport type DialogSize =\n | \"sm\"\n | \"md\"\n | \"lg\"\n | \"xl\"\n | \"2xl\"\n | \"3xl\"\n | \"4xl\"\n | \"full\";\nexport type DialogPosition =\n | \"center\"\n | \"top\"\n | \"bottom\"\n | \"left\"\n | \"right\"\n | \"top-left\"\n | \"top-right\"\n | \"bottom-left\"\n | \"bottom-right\";\n\nexport interface DialogButtonConfig extends Omit<ButtonProps, \"children\"> {\n text?: React.ReactNode;\n onClick?: () => void;\n}\n\nexport interface DialogProps {\n // Core props\n variant?: DialogVariant;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n\n // Content\n title?: React.ReactNode;\n description?: React.ReactNode;\n children?: React.ReactNode;\n trigger?: React.ReactNode;\n footer?: React.ReactNode;\n\n // Behavior\n closeOnEsc?: boolean;\n closeOnOutside?: boolean;\n showCloseButton?: boolean;\n\n // Layout\n position?: DialogPosition;\n size?: DialogSize;\n fullscreen?: boolean;\n scrollable?: boolean;\n stickyHeader?: boolean;\n stickyFooter?: boolean;\n\n // Animation\n animation?: BasicAnimation;\n\n // Styling\n className?: string;\n contentClassName?: string;\n headerClassName?: string;\n titleClassName?: string;\n descriptionClassName?: string;\n footerClassName?: string;\n overlayClassName?: string;\n\n // Overlay\n backdropFilter?: number;\n overlay?: \"dark\" | \"light\";\n\n // Alert/Confirm buttons\n confirmButton?: DialogButtonConfig;\n cancelButton?: DialogButtonConfig;\n\n // Alert/Confirm specific\n showIcon?: boolean;\n}\n\nconst variantIcons = {\n dialog: null,\n confirm: (\n <div className=\"size-12 flex items-center justify-center rounded-full bg-success/10 mx-auto mb-4\">\n <CheckCircle2 className=\"size-6 text-success\" />\n </div>\n ),\n alert: (\n <div className=\"size-12 flex items-center justify-center rounded-full bg-error/10 mx-auto mb-4\">\n <AlertCircle className=\"size-5 text-error\" />\n </div>\n ),\n info: (\n <div className=\"size-12 flex items-center justify-center rounded-full bg-blue-500/10 mx-auto mb-4\">\n <Info className=\"size-5 text-blue-500\" />\n </div>\n ),\n warning: (\n <div className=\"size-12 flex items-center justify-center rounded-full bg-warning/10 mx-auto mb-4\">\n <AlertTriangle className=\"size-5 text-warning\" />\n </div>\n ),\n};\n\nconst variantColors = {\n dialog: \"\",\n confirm: \"border-blue-500/20\",\n alert: \"border-red-500/20\",\n info: \"border-blue-500/20\",\n warning: \"border-yellow-500/20\",\n};\n\nconst sizeClasses: Record<DialogSize, string> = {\n sm: \"sm:max-w-sm\",\n md: \"sm:max-w-md\",\n lg: \"sm:max-w-lg\",\n xl: \"sm:max-w-xl\",\n \"2xl\": \"sm:max-w-2xl\",\n \"3xl\": \"sm:max-w-3xl\",\n \"4xl\": \"sm:max-w-4xl\",\n full: \"sm:max-w-[95vw] h-[95vh]\",\n};\n\nconst positionClasses: Record<DialogPosition, string> = {\n center: \"!top-[50%] !left-[50%] !translate-x-[-50%] !translate-y-[-50%]\",\n top: \"!top-4 !left-[50%] !translate-x-[-50%] !translate-y-0\",\n bottom: \"!top-auto !bottom-4 !left-[50%] !translate-x-[-50%] !translate-y-0\",\n left: \"!left-4 !top-[50%] !translate-x-0 !translate-y-[-50%]\",\n right: \"!left-auto !right-4 !top-[50%] !translate-x-0 !translate-y-[-50%]\",\n \"top-left\": \"!top-4 !left-4 !translate-x-0 !translate-y-0\",\n \"top-right\": \"!top-4 !left-auto !right-4 !translate-x-0 !translate-y-0\",\n \"bottom-left\": \"!top-auto !bottom-4 !left-4 !translate-x-0 !translate-y-0\",\n \"bottom-right\":\n \"!top-auto !bottom-4 !left-auto !right-4 !translate-x-0 !translate-y-0\",\n};\n\nconst Dialog = React.forwardRef<HTMLDivElement, DialogProps>((props, ref) => {\n const {\n variant = \"dialog\",\n open,\n onOpenChange,\n title,\n description,\n children,\n trigger,\n footer,\n closeOnEsc = true,\n closeOnOutside = true,\n showCloseButton = true,\n position = \"center\",\n size = \"md\",\n fullscreen = false,\n scrollable = true,\n stickyHeader = false,\n stickyFooter = false,\n animation,\n className,\n contentClassName,\n headerClassName,\n titleClassName,\n descriptionClassName,\n footerClassName,\n // overlayClassName, // Not used in current implementation\n confirmButton,\n cancelButton,\n showIcon = true,\n backdropFilter = 0,\n overlay = \"dark\",\n } = props;\n\n const animationResult = useMemo(() => {\n return animation ? animationClass(animation) : { className: \"\" };\n }, [animation]);\n\n const contentClasses = cn(\n // Remove default padding and gap to allow custom header/footer\n \"!p-0 !gap-0 flex flex-col\",\n sizeClasses[fullscreen ? \"full\" : size],\n positionClasses[position],\n variantColors[variant],\n animationResult.className,\n fullscreen ? \"h-[95vh]\" : \"max-h-[min(600px,80vh)]\"\n );\n\n const headerClasses = cn(\n \"px-6 pt-6 text-left\",\n !scrollable && \"contents space-y-0\",\n headerClassName\n );\n\n const footerClasses = cn(\n \"px-6 pb-6 sm:justify-end\",\n !scrollable && \"border-t py-4\",\n footerClassName\n );\n\n const icon = showIcon ? variantIcons[variant] : null;\n\n const headerComponents = useMemo(() => {\n return title || icon || description ? (\n <AlertDialogHeader\n className={cn(\n \"flex items-center gap-2 py-4\",\n { \"border-b\": stickyHeader },\n headerClasses\n )}\n >\n {(title || icon) && (\n <AlertDialogTitle className={cn(titleClassName)}>\n {icon}\n {title}\n </AlertDialogTitle>\n )}\n {description && (\n <AlertDialogDescription className={descriptionClassName}>\n {description}\n </AlertDialogDescription>\n )}\n </AlertDialogHeader>\n ) : null;\n }, [\n title,\n icon,\n description,\n headerClasses,\n titleClassName,\n descriptionClassName,\n stickyHeader,\n ]);\n\n const footerComponents = useMemo(() => {\n // Merge configs with defaults\n const mergedConfirmButton: DialogButtonConfig = {\n variant: \"solid\",\n color: \"primary\",\n ...confirmButton,\n text: confirmButton?.text ?? \"Confirm\",\n };\n\n const mergedCancelButton: DialogButtonConfig = {\n variant: \"outline\",\n ...cancelButton,\n text: cancelButton?.text ?? \"Cancel\",\n };\n\n return footer || confirmButton || cancelButton ? (\n <AlertDialogFooter\n className={cn(\"py-4\", { \"border-t\": stickyFooter }, footerClasses)}\n >\n {footer || (\n <>\n {cancelButton && (\n <Button\n {...mergedCancelButton}\n onClick={() => {\n mergedCancelButton.onClick?.();\n }}\n >\n {mergedCancelButton.text}\n </Button>\n )}\n {confirmButton && (\n <Button\n {...mergedConfirmButton}\n onClick={() => {\n mergedConfirmButton.onClick?.();\n }}\n >\n {mergedConfirmButton.text}\n </Button>\n )}\n </>\n )}\n </AlertDialogFooter>\n ) : null;\n }, [footer, footerClasses, confirmButton, cancelButton, stickyFooter]);\n\n // For alert-style dialogs (confirm, alert, info, warning)\n if (variant !== \"dialog\") {\n return (\n <AlertDialog open={open} onOpenChange={onOpenChange}>\n {trigger && <AlertDialogTrigger asChild>{trigger}</AlertDialogTrigger>}\n <AlertDialogContent\n ref={ref}\n className={cn(className, contentClasses)}\n onEscapeKeyDown={(e) => !closeOnEsc && e.preventDefault()}\n noDefaultAnimation={!!animation}\n backdropFilter={backdropFilter}\n overlay={overlay}\n >\n {stickyHeader && headerComponents}\n\n <ScrollArea className=\"flex max-h-full flex-col overflow-hidden\">\n {!stickyHeader && headerComponents}\n {children && (\n <div className={cn(\"px-6 py-4\", contentClassName)}>\n {children}\n </div>\n )}\n {!stickyFooter && footerComponents}\n </ScrollArea>\n\n {stickyFooter && footerComponents}\n </AlertDialogContent>\n </AlertDialog>\n );\n }\n\n // Regular dialog\n return (\n <SDialog open={open} onOpenChange={onOpenChange}>\n {trigger && <DialogTrigger asChild>{trigger}</DialogTrigger>}\n <SDialogContent\n ref={ref}\n className={cn(className, contentClasses)}\n showCloseButton={showCloseButton}\n onEscapeKeyDown={(e) => !closeOnEsc && e.preventDefault()}\n onInteractOutside={(e) => !closeOnOutside && e.preventDefault()}\n noDefaultAnimation={!!animation}\n backdropFilter={backdropFilter}\n overlay={overlay}\n >\n {stickyHeader && (title || description) && (\n <DialogHeader\n className={cn({ \"py-4 border-b\": stickyHeader }, headerClasses)}\n >\n {title && (\n <DialogTitle className={titleClassName}>{title}</DialogTitle>\n )}\n {description && (\n <DialogDescription className={descriptionClassName}>\n {description}\n </DialogDescription>\n )}\n </DialogHeader>\n )}\n <ScrollArea className=\"flex max-h-full flex-col overflow-hidden\">\n {!stickyHeader && (title || description) && (\n <DialogHeader className={cn(\"py-4\", headerClasses)}>\n {title && (\n <DialogTitle className={titleClassName}>{title}</DialogTitle>\n )}\n {description && (\n <DialogDescription className={descriptionClassName}>\n {description}\n </DialogDescription>\n )}\n </DialogHeader>\n )}\n {children && (\n <div className={cn(\"px-6 py-4\", contentClassName)}>{children}</div>\n )}\n {!stickyFooter && footer && (\n <DialogFooter className={cn(\"py-4\", footerClasses)}>\n {footer}\n </DialogFooter>\n )}\n </ScrollArea>\n {stickyFooter && footer && (\n <DialogFooter\n className={cn({ \"py-4 border-t\": stickyFooter }, footerClasses)}\n >\n {footer}\n </DialogFooter>\n )}\n </SDialogContent>\n </SDialog>\n );\n});\n\nDialog.displayName = \"Dialog\";\n\nexport default Dialog;\n"],"names":["variantIcons","jsx","CheckCircle2","AlertCircle","Info","AlertTriangle","variantColors","sizeClasses","positionClasses","Dialog","React","props","ref","variant","open","onOpenChange","title","description","children","trigger","footer","closeOnEsc","closeOnOutside","showCloseButton","position","size","fullscreen","scrollable","stickyHeader","stickyFooter","animation","className","contentClassName","headerClassName","titleClassName","descriptionClassName","footerClassName","confirmButton","cancelButton","showIcon","backdropFilter","overlay","animationResult","useMemo","animationClass","contentClasses","cn","headerClasses","footerClasses","icon","headerComponents","jsxs","AlertDialogHeader","AlertDialogTitle","AlertDialogDescription","footerComponents","mergedConfirmButton","mergedCancelButton","AlertDialogFooter","Fragment","Button","AlertDialog","AlertDialogTrigger","AlertDialogContent","e","ScrollArea","SDialog","DialogTrigger","SDialogContent","DialogHeader","DialogTitle","DialogDescription","DialogFooter"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const n=require("react/jsx-runtime"),u=require("react"),s=require("@dsui/ui/components/dropdown-menu"),l=require("@dsui/ui/lib/utils"),y=u.forwardRef((v,i)=>{const{open:p,defaultOpen:h,onOpenChange:x,modal:c=!1,children:M,trigger:d,content:t,items:r,side:O="bottom",align:S="start",sideOffset:P,alignOffset:R,portal:q=!0,contextMenu:j=!1,className:w,contentClassName:b,triggerClassName:g}=v,[I,C]=u.useState(!1),[f,T]=u.useState({x:0,y:0}),D=o=>{j&&(o.preventDefault(),T({x:o.clientX,y:o.clientY}),C(!0))};if(M)return n.jsx(s.DropdownMenu,{open:p,defaultOpen:h,onOpenChange:x,modal:c,children:M});const a=o=>o.map(e=>{switch(e.type){case"separator":return n.jsx(s.DropdownMenuSeparator,{},e.key);case"group":return n.jsxs(s.DropdownMenuGroup,{children:[e.label&&n.jsx(s.DropdownMenuLabel,{children:e.label}),a(e.children)]},e.key);case"checkbox":return n.jsxs(s.DropdownMenuCheckboxItem,{checked:e.checked,disabled:e.disabled,className:e.className,onCheckedChange:E=>{E&&e.onClick&&e.onClick()},children:[e.icon&&n.jsx("span",{className:"mr-2",children:e.icon}),e.label]},e.key);case"radio":return n.jsx(s.DropdownMenuRadioGroup,{value:e.group,children:n.jsxs(s.DropdownMenuRadioItem,{value:e.key,disabled:e.disabled,onClick:e.onClick,className:e.className,children:[e.icon&&n.jsx("span",{className:"mr-2",children:e.icon}),e.label]})},e.key);default:return e.children&&e.children.length>0?n.jsxs(s.DropdownMenuSub,{children:[n.jsxs(s.DropdownMenuSubTrigger,{disabled:e.disabled,className:l.cn(e.disabled?"opacity-50 cursor-not-allowed":"",e.className),children:[e.icon&&n.jsx("span",{className:"mr-2",children:e.icon}),e.label]}),n.jsx(s.DropdownMenuSubContent,{children:a(e.children)})]},e.key):n.jsxs(s.DropdownMenuItem,{disabled:e.disabled,variant:e.variant,onClick:e.onClick,className:e.className,children:[e.icon&&n.jsx("span",{className:"mr-2",children:e.icon}),e.label]},e.key)}});if(j)return n.jsxs(n.Fragment,{children:[n.jsx("div",{onContextMenu:D,className:l.cn(g),children:d}),n.jsxs(s.DropdownMenu,{open:I,onOpenChange:C,modal:c,children:[n.jsx(s.DropdownMenuTrigger,{asChild:!0,children:n.jsx("div",{className:"fixed",style:{left:f.x,top:f.y,width:1,height:1}})}),n.jsx(s.DropdownMenuPortal,{children:n.jsxs(s.DropdownMenuContent,{ref:i,className:l.cn(w,b),side:"bottom",align:"start",sideOffset:4,children:[t,r&&a(r)]})})]})]});const N=d?n.jsx("div",{onContextMenu:D,className:l.cn(g),children:d}):null,k=t||r?n.jsxs(s.DropdownMenuContent,{ref:i,side:O,align:S,sideOffset:P,alignOffset:R,className:l.cn(w,b),children:[t,r&&a(r)]}):null;return n.jsxs(s.DropdownMenu,{open:p,defaultOpen:h,onOpenChange:x,modal:c,children:[N&&n.jsx(s.DropdownMenuTrigger,{asChild:!0,children:N}),q?n.jsx(s.DropdownMenuPortal,{children:k}):k]})});y.displayName="DropdownMenu";exports.default=y;
|
|
2
|
+
//# sourceMappingURL=DropdownMenu.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DropdownMenu.cjs","sources":["../../../../src/components/DropdownMenu/DropdownMenu.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport {\n DropdownMenu as SDropdownMenu,\n DropdownMenuTrigger as SDropdownMenuTrigger,\n DropdownMenuContent as SDropdownMenuContent,\n DropdownMenuPortal as SDropdownMenuPortal,\n DropdownMenuItem as SDropdownMenuItem,\n DropdownMenuCheckboxItem as SDropdownMenuCheckboxItem,\n DropdownMenuRadioItem as SDropdownMenuRadioItem,\n DropdownMenuRadioGroup as SDropdownMenuRadioGroup,\n DropdownMenuLabel as SDropdownMenuLabel,\n DropdownMenuSeparator as SDropdownMenuSeparator,\n DropdownMenuGroup as SDropdownMenuGroup,\n DropdownMenuSub as SDropdownMenuSub,\n DropdownMenuSubTrigger as SDropdownMenuSubTrigger,\n DropdownMenuSubContent as SDropdownMenuSubContent,\n} from \"@dsui/ui/components/dropdown-menu\";\nimport { cn } from \"@dsui/ui/lib/utils\";\n\nexport type DropdownMenuSide = \"top\" | \"right\" | \"bottom\" | \"left\";\nexport type DropdownMenuAlign = \"start\" | \"center\" | \"end\";\n\nexport type DropdownMenuItem =\n | {\n key: string;\n label?: string;\n icon?: React.ReactNode;\n children?: DropdownMenuItem[];\n type?: \"item\";\n checked?: boolean;\n disabled?: boolean;\n variant?: \"default\" | \"destructive\";\n onClick?: () => void;\n className?: string;\n }\n | {\n key: string;\n type: \"checkbox\";\n label?: string;\n icon?: React.ReactNode;\n checked?: boolean;\n disabled?: boolean;\n onClick?: () => void;\n className?: string;\n }\n | {\n key: string;\n type: \"radio\";\n label?: string;\n icon?: React.ReactNode;\n group: string;\n checked?: boolean;\n disabled?: boolean;\n onClick?: () => void;\n className?: string;\n }\n | {\n key: string;\n type: \"separator\";\n }\n | {\n key: string;\n type: \"group\";\n label?: string;\n children: DropdownMenuItem[];\n disabled?: boolean;\n };\n\nexport interface DropdownMenuProps {\n // Core props\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n modal?: boolean;\n\n // Content\n children?: React.ReactNode;\n trigger?: React.ReactNode;\n content?: React.ReactNode;\n items?: DropdownMenuItem[];\n\n // Layout\n side?: DropdownMenuSide;\n align?: DropdownMenuAlign;\n sideOffset?: number;\n alignOffset?: number;\n\n // Portal\n portal?: boolean;\n\n // Context menu\n contextMenu?: boolean;\n\n // Styling\n className?: string;\n contentClassName?: string;\n triggerClassName?: string;\n}\n\nconst DropdownMenu = React.forwardRef<HTMLDivElement, DropdownMenuProps>(\n (props, ref) => {\n const {\n open,\n defaultOpen,\n onOpenChange,\n modal = false,\n children,\n trigger,\n content,\n items,\n side = \"bottom\",\n align = \"start\",\n sideOffset,\n alignOffset,\n portal = true,\n contextMenu = false,\n className,\n contentClassName,\n triggerClassName,\n } = props;\n\n // Context menu state\n const [contextMenuOpen, setContextMenuOpen] = useState(false);\n const [contextMenuPosition, setContextMenuPosition] = useState({\n x: 0,\n y: 0,\n });\n\n // Handle context menu trigger\n const handleContextMenu = (e: React.MouseEvent) => {\n if (contextMenu) {\n e.preventDefault();\n setContextMenuPosition({ x: e.clientX, y: e.clientY });\n setContextMenuOpen(true);\n }\n };\n\n // If children are provided (compound pattern), render them directly\n if (children) {\n return (\n <SDropdownMenu\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n modal={modal}\n >\n {children}\n </SDropdownMenu>\n );\n }\n\n // Render items if provided\n const renderItems = (menuItems: DropdownMenuItem[]): React.ReactNode => {\n return menuItems.map((item) => {\n switch (item.type) {\n case \"separator\":\n return <SDropdownMenuSeparator key={item.key} />;\n case \"group\":\n return (\n <SDropdownMenuGroup key={item.key}>\n {item.label && (\n <SDropdownMenuLabel>{item.label}</SDropdownMenuLabel>\n )}\n {renderItems(item.children)}\n </SDropdownMenuGroup>\n );\n case \"checkbox\":\n return (\n <SDropdownMenuCheckboxItem\n key={item.key}\n checked={item.checked}\n disabled={item.disabled}\n className={item.className}\n onCheckedChange={(checked: boolean) => {\n if (checked && item.onClick) {\n item.onClick();\n }\n }}\n >\n {item.icon && <span className=\"mr-2\">{item.icon}</span>}\n {item.label}\n </SDropdownMenuCheckboxItem>\n );\n case \"radio\":\n return (\n <SDropdownMenuRadioGroup key={item.key} value={item.group}>\n <SDropdownMenuRadioItem\n value={item.key}\n disabled={item.disabled}\n onClick={item.onClick}\n className={item.className}\n >\n {item.icon && <span className=\"mr-2\">{item.icon}</span>}\n {item.label}\n </SDropdownMenuRadioItem>\n </SDropdownMenuRadioGroup>\n );\n default: {\n // item or undefined type\n if (item.children && item.children.length > 0) {\n // Submenu\n return (\n <SDropdownMenuSub key={item.key}>\n <SDropdownMenuSubTrigger\n disabled={item.disabled}\n className={cn(\n item.disabled ? \"opacity-50 cursor-not-allowed\" : \"\",\n item.className,\n )}\n >\n {item.icon && <span className=\"mr-2\">{item.icon}</span>}\n {item.label}\n </SDropdownMenuSubTrigger>\n <SDropdownMenuSubContent>\n {renderItems(item.children)}\n </SDropdownMenuSubContent>\n </SDropdownMenuSub>\n );\n } else {\n // Regular item\n return (\n <SDropdownMenuItem\n key={item.key}\n disabled={item.disabled}\n variant={item.variant}\n onClick={item.onClick}\n className={item.className}\n >\n {item.icon && <span className=\"mr-2\">{item.icon}</span>}\n {item.label}\n </SDropdownMenuItem>\n );\n }\n }\n }\n });\n };\n\n // If context menu is enabled, render differently\n if (contextMenu) {\n return (\n <>\n {/* Trigger area for context menu */}\n <div\n onContextMenu={handleContextMenu}\n className={cn(triggerClassName)}\n >\n {trigger}\n </div>\n <SDropdownMenu\n open={contextMenuOpen}\n onOpenChange={setContextMenuOpen}\n modal={modal}\n >\n <SDropdownMenuTrigger asChild>\n <div\n className=\"fixed\"\n style={{\n left: contextMenuPosition.x,\n top: contextMenuPosition.y,\n width: 1,\n height: 1,\n }}\n />\n </SDropdownMenuTrigger>\n <SDropdownMenuPortal>\n <SDropdownMenuContent\n ref={ref}\n className={cn(className, contentClassName)}\n side=\"bottom\"\n align=\"start\"\n sideOffset={4}\n >\n {content}\n {items && renderItems(items)}\n </SDropdownMenuContent>\n </SDropdownMenuPortal>\n </SDropdownMenu>\n </>\n );\n }\n\n // Fallback to props-based pattern\n const triggerElement = trigger ? (\n <div onContextMenu={handleContextMenu} className={cn(triggerClassName)}>\n {trigger}\n </div>\n ) : null;\n\n const contentElement =\n content || items ? (\n <SDropdownMenuContent\n ref={ref}\n side={side}\n align={align}\n sideOffset={sideOffset}\n alignOffset={alignOffset}\n className={cn(className, contentClassName)}\n >\n {content}\n {items && renderItems(items)}\n </SDropdownMenuContent>\n ) : null;\n\n return (\n <SDropdownMenu\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n modal={modal}\n >\n {triggerElement && (\n <SDropdownMenuTrigger asChild>{triggerElement}</SDropdownMenuTrigger>\n )}\n {portal ? (\n <SDropdownMenuPortal>{contentElement}</SDropdownMenuPortal>\n ) : (\n contentElement\n )}\n </SDropdownMenu>\n );\n },\n);\n\nDropdownMenu.displayName = \"DropdownMenu\";\n\nexport default DropdownMenu;\n"],"names":["DropdownMenu","React","props","ref","open","defaultOpen","onOpenChange","modal","children","trigger","content","items","side","align","sideOffset","alignOffset","portal","contextMenu","className","contentClassName","triggerClassName","contextMenuOpen","setContextMenuOpen","useState","contextMenuPosition","setContextMenuPosition","handleContextMenu","e","jsx","SDropdownMenu","renderItems","menuItems","item","SDropdownMenuSeparator","SDropdownMenuGroup","SDropdownMenuLabel","jsxs","SDropdownMenuCheckboxItem","checked","SDropdownMenuRadioGroup","SDropdownMenuRadioItem","SDropdownMenuSub","SDropdownMenuSubTrigger","cn","SDropdownMenuSubContent","SDropdownMenuItem","Fragment","SDropdownMenuTrigger","SDropdownMenuPortal","SDropdownMenuContent","triggerElement","contentElement"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./DropdownMenu.cjs"),o=require("@dsui/ui/components/dropdown-menu"),n=Object.assign(e.default,{Root:o.DropdownMenu,Portal:o.DropdownMenuPortal,Trigger:o.DropdownMenuTrigger,Content:o.DropdownMenuContent,Group:o.DropdownMenuGroup,Label:o.DropdownMenuLabel,Item:o.DropdownMenuItem,CheckboxItem:o.DropdownMenuCheckboxItem,RadioGroup:o.DropdownMenuRadioGroup,RadioItem:o.DropdownMenuRadioItem,Separator:o.DropdownMenuSeparator,Shortcut:o.DropdownMenuShortcut,Sub:o.DropdownMenuSub,SubTrigger:o.DropdownMenuSubTrigger,SubContent:o.DropdownMenuSubContent});exports.DropdownMenu=n;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../../src/components/DropdownMenu/index.tsx"],"sourcesContent":["import DropdownMenuWrapper, { type DropdownMenuProps } from \"./DropdownMenu\";\nimport {\n DropdownMenu as DropdownMenuPrimitive,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n} from \"@dsui/ui/components/dropdown-menu\";\n\nconst DropdownMenu = Object.assign(DropdownMenuWrapper, {\n // Primitives\n Root: DropdownMenuPrimitive,\n Portal: DropdownMenuPortal,\n Trigger: DropdownMenuTrigger,\n Content: DropdownMenuContent,\n Group: DropdownMenuGroup,\n Label: DropdownMenuLabel,\n Item: DropdownMenuItem,\n CheckboxItem: DropdownMenuCheckboxItem,\n RadioGroup: DropdownMenuRadioGroup,\n RadioItem: DropdownMenuRadioItem,\n Separator: DropdownMenuSeparator,\n Shortcut: DropdownMenuShortcut,\n Sub: DropdownMenuSub,\n SubTrigger: DropdownMenuSubTrigger,\n SubContent: DropdownMenuSubContent,\n});\n\nexport { DropdownMenu };\nexport type { DropdownMenuProps, DropdownMenuItem };\n"],"names":["DropdownMenu","DropdownMenuWrapper","DropdownMenuPrimitive","DropdownMenuPortal","DropdownMenuTrigger","DropdownMenuContent","DropdownMenuGroup","DropdownMenuLabel","DropdownMenuItem","DropdownMenuCheckboxItem","DropdownMenuRadioGroup","DropdownMenuRadioItem","DropdownMenuSeparator","DropdownMenuShortcut","DropdownMenuSub","DropdownMenuSubTrigger","DropdownMenuSubContent"],"mappings":"qKAmBMA,EAAe,OAAO,OAAOC,UAAqB,CAEtD,KAAMC,EAAAA,aACN,OAAQC,EAAAA,mBACR,QAASC,EAAAA,oBACT,QAASC,EAAAA,oBACT,MAAOC,EAAAA,kBACP,MAAOC,EAAAA,kBACP,KAAMC,EAAAA,iBACN,aAAcC,EAAAA,yBACd,WAAYC,EAAAA,uBACZ,UAAWC,EAAAA,sBACX,UAAWC,EAAAA,sBACX,SAAUC,EAAAA,qBACV,IAAKC,EAAAA,gBACL,WAAYC,EAAAA,uBACZ,WAAYC,EAAAA,sBACd,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react/jsx-runtime"),i=require("react"),u=require("@dsui/ui/lib/utils"),f=require("@dsui/ui/components/label"),g=require("./Tooltip/Tooltip.cjs"),h=require("lucide-react");function w(r){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(r){for(const a in r)if(a!=="default"){const o=Object.getOwnPropertyDescriptor(r,a);Object.defineProperty(t,a,o.get?o:{enumerable:!0,get:()=>r[a]})}}return t.default=r,Object.freeze(t)}const b=w(i),c=b.forwardRef(({className:r,infoTooltip:t,size:a="xl",shouldFloat:o,children:p,...s},l)=>{const e=a==="lg"||!1;return n.jsxs(f.Label,{className:u.cn("absolute start-2 select-none pointer-events-none","bg-background px-3 translate-y-2","flex",{"top-0.5 origin-left scale-75 translate-x-1 max-w-full h-3 py-0 bg-transparent":!e,"peer-placeholder-shown:top-0 peer-placeholder-shown:scale-100 peer-placeholder-shown:translate-x-0 peer-placeholder-shown:w-[calc(100%-(--spacing(4)))] peer-placeholder-shown:h-[calc(100%-(--spacing(4)))] peer-placeholder-shown:py-3 peer-placeholder-shown:bg-background":!e,"peer-focus:top-0.5 peer-focus:origin-left peer-focus:scale-75 peer-focus:translate-x-1 peer-focus:text-primary peer-focus:max-w-full peer-focus:h-3 peer-focus:py-0 peer-focus:bg-transparent":!e,"group-focus-within:top-0.5 group-focus-within:origin-left group-focus-within:scale-75 group-focus-within:translate-x-1 group-focus-within:text-primary group-focus-within:max-w-full group-focus-within:h-3 group-focus-within:py-0 group-focus-within:bg-transparent":!e},{"-top-3.5 origin-left scale-75 translate-x-0 max-w-full w-auto h-3 py-0":e,"peer-placeholder-shown:-top-0.5 peer-placeholder-shown:scale-100 peer-placeholder-shown:w-[calc(100%-(--spacing(4)))] peer-placeholder-shown:h-[calc(100%-(--spacing(3)))] peer-placeholder-shown:py-2 peer-placeholder-shown:bg-background":e,"peer-focus:-top-3.5 peer-focus:origin-left peer-focus:scale-75 peer-focus:text-primary peer-focus:max-w-full peer-focus:w-auto peer-focus:h-3 peer-focus:py-0":e,"group-focus-within:-top-3.5 group-focus-within:origin-left group-focus-within:scale-75 group-focus-within:text-primary group-focus-within:max-w-full group-focus-within:w-auto group-focus-within:h-3 group-focus-within:py-0":e},{"top-0.5 origin-left scale-75 translate-x-1 max-w-full h-3 py-0":typeof o=="boolean"&&o&&!e,"top-0 scale-100 translate-x-0 w-[calc(100%-(--spacing(4)))] h-[calc(100%-(--spacing(4)))] py-3 bg-background":typeof o=="boolean"&&!o&&!e},{"-top-3.5 origin-left scale-75 translate-x-0 max-w-full h-3 py-0":typeof o=="boolean"&&o&&e,"top-0 scale-100 translate-x-0 w-[calc(100%-(--spacing(4)))] h-[calc(100%-(--spacing(4)))] py-3 bg-background":typeof o=="boolean"&&!o&&e},"will-change-transform transition-all duration-300 ease-in-out",r),ref:l,...s,children:[n.jsx("span",{className:"truncate whitespace-nowrap max-w-full pointer-events-none",children:p}),t&&n.jsx(g.Tooltip,{content:t,children:n.jsx(h.Info,{className:"size-3.5 min-w-3.5 z-10 pointer-events-auto"})})]})});c.displayName="FloatingLabel";exports.FloatingLabel=c;
|
|
2
|
+
//# sourceMappingURL=FloatLabel.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FloatLabel.cjs","sources":["../../../src/components/FloatLabel.tsx"],"sourcesContent":["import * as React from \"react\";\n\nimport { cn } from \"@dsui/ui/lib/utils\";\nimport { Label } from \"@dsui/ui/components/label\";\nimport { Tooltip } from \"./Tooltip/Tooltip\";\nimport { Info } from \"lucide-react\";\n\nconst FloatingLabel = React.forwardRef<\n React.ElementRef<typeof Label>,\n React.ComponentPropsWithoutRef<typeof Label> & {\n infoTooltip?: React.ReactNode;\n size?: string;\n shouldFloat?: boolean;\n }\n>(\n (\n { className, infoTooltip, size = \"xl\", shouldFloat, children, ...props },\n ref,\n ) => {\n const lagerSize = size === \"lg\" || false;\n\n return (\n <Label\n className={cn(\n \"absolute start-2 select-none pointer-events-none\",\n \"bg-background px-3 translate-y-2\",\n \"flex\",\n {\n \"top-0.5 origin-left scale-75 translate-x-1 max-w-full h-3 py-0 bg-transparent\":\n !lagerSize,\n // State empty (placeholder shown) - ở giữa input\n \"peer-placeholder-shown:top-0 peer-placeholder-shown:scale-100 peer-placeholder-shown:translate-x-0 peer-placeholder-shown:w-[calc(100%-(--spacing(4)))] peer-placeholder-shown:h-[calc(100%-(--spacing(4)))] peer-placeholder-shown:py-3 peer-placeholder-shown:bg-background\":\n !lagerSize,\n // // State focus - nằm trên input\n \"peer-focus:top-0.5 peer-focus:origin-left peer-focus:scale-75 peer-focus:translate-x-1 peer-focus:text-primary peer-focus:max-w-full peer-focus:h-3 peer-focus:py-0 peer-focus:bg-transparent\":\n !lagerSize,\n \"group-focus-within:top-0.5 group-focus-within:origin-left group-focus-within:scale-75 group-focus-within:translate-x-1 group-focus-within:text-primary group-focus-within:max-w-full group-focus-within:h-3 group-focus-within:py-0 group-focus-within:bg-transparent\":\n !lagerSize,\n },\n {\n \"-top-3.5 origin-left scale-75 translate-x-0 max-w-full w-auto h-3 py-0\":\n lagerSize,\n // State empty (placeholder shown) - ở giữa input\n \"peer-placeholder-shown:-top-0.5 peer-placeholder-shown:scale-100 peer-placeholder-shown:w-[calc(100%-(--spacing(4)))] peer-placeholder-shown:h-[calc(100%-(--spacing(3)))] peer-placeholder-shown:py-2 peer-placeholder-shown:bg-background\":\n lagerSize,\n // // State focus - nằm trên input\n \"peer-focus:-top-3.5 peer-focus:origin-left peer-focus:scale-75 peer-focus:text-primary peer-focus:max-w-full peer-focus:w-auto peer-focus:h-3 peer-focus:py-0\":\n lagerSize,\n \"group-focus-within:-top-3.5 group-focus-within:origin-left group-focus-within:scale-75 group-focus-within:text-primary group-focus-within:max-w-full group-focus-within:w-auto group-focus-within:h-3 group-focus-within:py-0\":\n lagerSize,\n },\n\n // State when shouldFloat prop is set\n {\n \"top-0.5 origin-left scale-75 translate-x-1 max-w-full h-3 py-0\":\n typeof shouldFloat === \"boolean\" && shouldFloat && !lagerSize,\n \"top-0 scale-100 translate-x-0 w-[calc(100%-(--spacing(4)))] h-[calc(100%-(--spacing(4)))] py-3 bg-background\":\n typeof shouldFloat === \"boolean\" && !shouldFloat && !lagerSize,\n },\n {\n \"-top-3.5 origin-left scale-75 translate-x-0 max-w-full h-3 py-0\":\n typeof shouldFloat === \"boolean\" && shouldFloat && lagerSize,\n \"top-0 scale-100 translate-x-0 w-[calc(100%-(--spacing(4)))] h-[calc(100%-(--spacing(4)))] py-3 bg-background\":\n typeof shouldFloat === \"boolean\" && !shouldFloat && lagerSize,\n },\n \"will-change-transform transition-all duration-300 ease-in-out\",\n className,\n )}\n ref={ref}\n {...props}\n >\n <span className=\"truncate whitespace-nowrap max-w-full pointer-events-none\">\n {children}\n </span>\n\n {infoTooltip && (\n <Tooltip content={infoTooltip}>\n <Info className=\"size-3.5 min-w-3.5 z-10 pointer-events-auto\" />\n </Tooltip>\n )}\n </Label>\n );\n },\n);\n\nFloatingLabel.displayName = \"FloatingLabel\";\n\nexport { FloatingLabel };\n"],"names":["FloatingLabel","React","className","infoTooltip","size","shouldFloat","children","props","ref","lagerSize","jsxs","Label","cn","jsx","Tooltip","Info"],"mappings":"siBAOMA,EAAgBC,EAAM,WAQ1B,CACE,CAAE,UAAAC,EAAW,YAAAC,EAAa,KAAAC,EAAO,KAAM,YAAAC,EAAa,SAAAC,EAAU,GAAGC,CAAA,EACjEC,IACG,CACH,MAAMC,EAAYL,IAAS,MAAQ,GAEnC,OACEM,EAAAA,KAACC,EAAAA,MAAA,CACC,UAAWC,EAAAA,GACT,mDACA,mCACA,OACA,CACE,gFACE,CAACH,EAEH,gRACE,CAACA,EAEH,gMACE,CAACA,EACH,wQACE,CAACA,CAAA,EAEL,CACE,yEACEA,EAEF,8OACEA,EAEF,gKACEA,EACF,gOACEA,CAAA,EAIJ,CACE,iEACE,OAAOJ,GAAgB,WAAaA,GAAe,CAACI,EACtD,+GACE,OAAOJ,GAAgB,WAAa,CAACA,GAAe,CAACI,CAAA,EAEzD,CACE,kEACE,OAAOJ,GAAgB,WAAaA,GAAeI,EACrD,+GACE,OAAOJ,GAAgB,WAAa,CAACA,GAAeI,CAAA,EAExD,gEACAP,CAAA,EAEF,IAAAM,EACC,GAAGD,EAEJ,SAAA,CAAAM,EAAAA,IAAC,OAAA,CAAK,UAAU,4DACb,SAAAP,CAAA,CACH,EAECH,SACEW,UAAA,CAAQ,QAASX,EAChB,SAAAU,EAAAA,IAACE,EAAAA,KAAA,CAAK,UAAU,6CAAA,CAA8C,CAAA,CAChE,CAAA,CAAA,CAAA,CAIR,CACF,EAEAf,EAAc,YAAc"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),t=require("@dsui/ui/index"),n=require("class-variance-authority");require("react");n.cva("inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",{variants:{},defaultVariants:{}});const r=({className:i,children:s})=>e.jsxs("div",{className:t.cn("relative inline-flex overflow-hidden cursor-pointer shadow-[0_6px_6px_rgba(0,0,0,0.2),0_0_20px_rgba(0,0,0,0.1)] transition-all duration-400 ease-[cubic-bezier(0.175,0.885,0.32,2.2)] p-0 rounded-md",i),children:[e.jsx("div",{className:"absolute z-0 inset-0 backdrop-blur-[2.5px] overflow-hidden isolate [filter:url(#glass-distortion)] rounded-[inherit]"}),e.jsx("div",{className:"z-[1] absolute inset-0 bg-white/25 rounded-[inherit]"}),e.jsx("div",{className:"absolute inset-0 z-[2] overflow-hidden shadow-[inset_2px_2px_1px_0_rgba(255,255,255,0.5),inset_-1px_-1px_1px_1px_rgba(255,255,255,0.5)] rounded-[inherit]"}),e.jsx("div",{className:"z-[3] relative",children:e.jsx("div",{className:"text-foreground [text-shadow:0px_1px_3px_rgba(255, 255, 255, 0.3)] transition-all duration-100 ease-in inline-flex gap-2",children:s})}),e.jsx("svg",{className:"hidden",children:e.jsxs("filter",{id:"glass-distortion",x:"0%",y:"0%",width:"100%",height:"100%",filterUnits:"objectBoundingBox",children:[e.jsx("feTurbulence",{type:"fractalNoise",baseFrequency:"0.01 0.01",numOctaves:"1",seed:"5",result:"turbulence"}),e.jsxs("feComponentTransfer",{in:"turbulence",result:"mapped",children:[e.jsx("feFuncR",{type:"gamma",amplitude:"1",exponent:"10",offset:"0.5"}),e.jsx("feFuncG",{type:"gamma",amplitude:"0",exponent:"1",offset:"0"}),e.jsx("feFuncB",{type:"gamma",amplitude:"0",exponent:"1",offset:"0.5"})]}),e.jsx("feGaussianBlur",{in:"turbulence",stdDeviation:"3",result:"softMap"}),e.jsx("feSpecularLighting",{in:"softMap",surfaceScale:"5",specularConstant:"1",specularExponent:"100","lighting-color":"white",result:"specLight",children:e.jsx("fePointLight",{x:"-200",y:"-200",z:"300"})}),e.jsx("feComposite",{in:"specLight",operator:"arithmetic",k1:"0",k2:"1",k3:"1",k4:"0",result:"litImage"}),e.jsx("feDisplacementMap",{in:"SourceGraphic",in2:"softMap",scale:"120",xChannelSelector:"R",yChannelSelector:"G"})]})})]});exports.default=r;
|
|
2
|
+
//# sourceMappingURL=Glass.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Glass.cjs","sources":["../../../../src/components/Glass/Glass.tsx"],"sourcesContent":["import { cn } from \"@dsui/ui/index\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport React from \"react\";\n\nconst glassVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n {\n variants: {},\n defaultVariants: {},\n },\n);\n\ntype GlassProps = {\n className?: string;\n children?: React.ReactNode;\n} & VariantProps<typeof glassVariants>;\n\nconst Glass: React.FC<GlassProps> = ({ className, children }) => {\n return (\n <div\n className={cn(\n \"relative inline-flex overflow-hidden cursor-pointer shadow-[0_6px_6px_rgba(0,0,0,0.2),0_0_20px_rgba(0,0,0,0.1)] transition-all duration-400 ease-[cubic-bezier(0.175,0.885,0.32,2.2)] p-0 rounded-md\",\n className,\n )}\n >\n <div className=\"absolute z-0 inset-0 backdrop-blur-[2.5px] overflow-hidden isolate [filter:url(#glass-distortion)] rounded-[inherit]\"></div>\n <div className=\"z-[1] absolute inset-0 bg-white/25 rounded-[inherit]\"></div>\n <div className=\"absolute inset-0 z-[2] overflow-hidden shadow-[inset_2px_2px_1px_0_rgba(255,255,255,0.5),inset_-1px_-1px_1px_1px_rgba(255,255,255,0.5)] rounded-[inherit]\"></div>\n <div className=\"z-[3] relative\">\n <div className=\"text-foreground [text-shadow:0px_1px_3px_rgba(255, 255, 255, 0.3)] transition-all duration-100 ease-in inline-flex gap-2\">\n {children}\n </div>\n </div>\n <svg className=\"hidden\">\n <filter\n id=\"glass-distortion\"\n x=\"0%\"\n y=\"0%\"\n width=\"100%\"\n height=\"100%\"\n filterUnits=\"objectBoundingBox\"\n >\n <feTurbulence\n type=\"fractalNoise\"\n baseFrequency=\"0.01 0.01\"\n numOctaves=\"1\"\n seed=\"5\"\n result=\"turbulence\"\n />\n\n <feComponentTransfer in=\"turbulence\" result=\"mapped\">\n <feFuncR type=\"gamma\" amplitude=\"1\" exponent=\"10\" offset=\"0.5\" />\n <feFuncG type=\"gamma\" amplitude=\"0\" exponent=\"1\" offset=\"0\" />\n <feFuncB type=\"gamma\" amplitude=\"0\" exponent=\"1\" offset=\"0.5\" />\n </feComponentTransfer>\n\n <feGaussianBlur in=\"turbulence\" stdDeviation=\"3\" result=\"softMap\" />\n\n <feSpecularLighting\n in=\"softMap\"\n surfaceScale=\"5\"\n specularConstant=\"1\"\n specularExponent=\"100\"\n lighting-color=\"white\"\n result=\"specLight\"\n >\n <fePointLight x=\"-200\" y=\"-200\" z=\"300\" />\n </feSpecularLighting>\n\n <feComposite\n in=\"specLight\"\n operator=\"arithmetic\"\n k1=\"0\"\n k2=\"1\"\n k3=\"1\"\n k4=\"0\"\n result=\"litImage\"\n />\n\n <feDisplacementMap\n in=\"SourceGraphic\"\n in2=\"softMap\"\n scale=\"120\"\n xChannelSelector=\"R\"\n yChannelSelector=\"G\"\n />\n </filter>\n </svg>\n </div>\n );\n};\n\nexport default Glass;\n"],"names":["cva","Glass","className","children","jsxs","cn","jsx"],"mappings":"oOAIsBA,EAAAA,IACpB,mbACA,CACE,SAAU,CAAA,EACV,gBAAiB,CAAA,CAAC,CAEtB,EAOA,MAAMC,EAA8B,CAAC,CAAE,UAAAC,EAAW,SAAAC,KAE9CC,EAAAA,KAAC,MAAA,CACC,UAAWC,EAAAA,GACT,uMACAH,CAAA,EAGF,SAAA,CAAAI,EAAAA,IAAC,MAAA,CAAI,UAAU,sHAAA,CAAuH,EACtIA,EAAAA,IAAC,MAAA,CAAI,UAAU,sDAAA,CAAuD,EACtEA,EAAAA,IAAC,MAAA,CAAI,UAAU,2JAAA,CAA4J,EAC3KA,EAAAA,IAAC,OAAI,UAAU,iBACb,eAAC,MAAA,CAAI,UAAU,2HACZ,SAAAH,CAAA,CACH,CAAA,CACF,EACAG,EAAAA,IAAC,MAAA,CAAI,UAAU,SACb,SAAAF,EAAAA,KAAC,SAAA,CACC,GAAG,mBACH,EAAE,KACF,EAAE,KACF,MAAM,OACN,OAAO,OACP,YAAY,oBAEZ,SAAA,CAAAE,EAAAA,IAAC,eAAA,CACC,KAAK,eACL,cAAc,YACd,WAAW,IACX,KAAK,IACL,OAAO,YAAA,CAAA,EAGTF,EAAAA,KAAC,sBAAA,CAAoB,GAAG,aAAa,OAAO,SAC1C,SAAA,CAAAE,EAAAA,IAAC,UAAA,CAAQ,KAAK,QAAQ,UAAU,IAAI,SAAS,KAAK,OAAO,KAAA,CAAM,EAC/DA,EAAAA,IAAC,WAAQ,KAAK,QAAQ,UAAU,IAAI,SAAS,IAAI,OAAO,GAAA,CAAI,EAC5DA,EAAAA,IAAC,WAAQ,KAAK,QAAQ,UAAU,IAAI,SAAS,IAAI,OAAO,KAAA,CAAM,CAAA,EAChE,QAEC,iBAAA,CAAe,GAAG,aAAa,aAAa,IAAI,OAAO,UAAU,EAElEA,EAAAA,IAAC,qBAAA,CACC,GAAG,UACH,aAAa,IACb,iBAAiB,IACjB,iBAAiB,MACjB,iBAAe,QACf,OAAO,YAEP,eAAC,eAAA,CAAa,EAAE,OAAO,EAAE,OAAO,EAAE,KAAA,CAAM,CAAA,CAAA,EAG1CA,EAAAA,IAAC,cAAA,CACC,GAAG,YACH,SAAS,aACT,GAAG,IACH,GAAG,IACH,GAAG,IACH,GAAG,IACH,OAAO,UAAA,CAAA,EAGTA,EAAAA,IAAC,oBAAA,CACC,GAAG,gBACH,IAAI,UACJ,MAAM,MACN,iBAAiB,IACjB,iBAAiB,GAAA,CAAA,CACnB,CAAA,CAAA,CACF,CACF,CAAA,CAAA,CAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),t=require("react"),T=/* empty css */y=require("@dsui/ui/lib/utils"),D=require("lucide-react");;/* empty css */;/* empty css */const f=({images:n,visible:u=!1,onClose:o,activeIndex:l=0,onIndexChange:i,zoomSpeed:w=.1,disableKeyboardSupport:d=!1,noNavbar:c=!1,noToolbar:h=!1,rotatable:b=!0,scalable:g=!0,changeable:V=!0,noClose:N=!1,minScale:x=.1,maxScale:v=50,defaultScale:p=1,className:j,downloadable:L=!1,noImgDetails:k=!1,noResetZoomAfterChange:P=!1,drag:S=!1})=>{const[m,C]=t.useState(l);t.useEffect(()=>{C(l)},[l]);const I=t.useCallback(()=>{o?.()},[o]),U=t.useCallback((r,s)=>{C(s),i?.(s)},[i]),q=t.useCallback(()=>{const r=n[m],s=r.downloadUrl||r.src,a=document.createElement("a");a.href=s,a.download=r.alt||`image-${m+1}`,fetch(s).then(E=>E.blob()).then(E=>{const O=window.URL.createObjectURL(E);a.href=O,document.body.appendChild(a),a.click(),document.body.removeChild(a),window.URL.revokeObjectURL(O)}).catch(()=>{})},[n,m]),R=n.map(r=>({src:r.src,alt:r.alt||"",downloadUrl:r.downloadUrl||r.src}));return e.jsx(T.default,{visible:u,onClose:I,onMaskClick:I,images:R,activeIndex:m,onChange:U,zoomSpeed:w,disableKeyboardSupport:d,noNavbar:c,noToolbar:h,rotatable:b,scalable:g,changeable:V,noClose:N,minScale:x,maxScale:v,defaultScale:p,className:y.cn("image-viewer-antd-style",j),downloadable:L,noImgDetails:k,noResetZoomAfterChange:P,showTotal:!0,drag:S,customToolbar:r=>r.map(s=>s.key==="download"?{...s,actionType:void 0,onClick:void 0,render:e.jsx("button",{type:"button",className:"react-viewer-icon react-viewer-download",title:"Download",style:{background:"none",border:"none",cursor:"pointer",padding:0},onClick:a=>{a.preventDefault(),a.stopPropagation(),q()},children:e.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[e.jsx("path",{d:"M10 3v10m0 0l-4-4m4 4l4-4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),e.jsx("rect",{x:"4",y:"17",width:"12",height:"2",rx:"1",fill:"currentColor"})]})})}:s)})};f.displayName="ImageViewer";const G=({src:n,alt:u="",width:o,height:l,preview:i=!0,previewSrc:w,fallback:d,placeholder:c,className:h,wrapperClassName:b,onPreviewClick:g,onError:V,...N})=>{const[x,v]=t.useState(!0),[p,j]=t.useState(!1),[L,k]=t.useState(!1),P=()=>{v(!1),j(!1)},S=R=>{v(!1),j(!0),V?.(R)},m=()=>{i&&(k(!0),g?.())},C=()=>{k(!1)},I=x&&c,U=p&&d,q=i&&!x&&!p;return e.jsxs(e.Fragment,{children:[e.jsx("div",{className:y.cn("ds-image-viewer-root relative inline-block",b),children:e.jsxs("div",{className:"relative inline-block",children:[I&&e.jsx("div",{className:"absolute inset-0 flex items-center justify-center bg-muted animate-pulse",style:{width:o,height:l},children:c===!0?e.jsx("div",{className:"w-8 h-8 border-2 border-primary border-t-transparent rounded-full animate-spin"}):c}),e.jsx("img",{src:U?d:n,alt:u,width:o,height:l,className:y.cn("ds-image-viewer-img max-w-full h-auto align-middle",x&&"opacity-0",h),onLoad:P,onError:S,...N}),q&&e.jsx("div",{onClick:m,className:y.cn("ds-image-viewer-mask absolute inset-0 flex items-center justify-center opacity-0 hover:opacity-100 transition-opacity cursor-pointer","bg-black/50 backdrop-blur-sm"),children:e.jsxs("div",{className:"text-white text-sm flex items-center gap-2",children:[e.jsx(D.ZoomIn,{className:"w-5 h-5"}),e.jsx("span",{children:"Preview"})]})})]})}),e.jsx(f,{images:[{src:w||n,alt:u}],visible:L,onClose:C,rotatable:!0,scalable:!0,downloadable:!0})]})};G.displayName="ImageViewer.Image";const M=({children:n,images:u,preview:o=!0})=>{const[l,i]=t.useState(!1),[w,d]=t.useState(0),c=t.useCallback(g=>{d(g),i(!0)},[]),h=t.useCallback(()=>{i(!1)},[]),b=t.useMemo(()=>({handlePreview:c,preview:o}),[c,o]);return e.jsxs(e.Fragment,{children:[e.jsx(F.Provider,{value:b,children:n}),e.jsx(f,{images:u,visible:l,onClose:h,activeIndex:w,onIndexChange:d,rotatable:!0,scalable:!0,downloadable:!0})]})};M.displayName="ImageViewer.Group";const F=t.createContext(null);Object.assign(f,{Image:G,Group:M});exports.ImageViewer=f;exports.ImageViewerGroup=M;exports.ImageViewerImage=G;
|
|
2
|
+
//# sourceMappingURL=ImageViewer.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImageViewer.cjs","sources":["../../../../src/components/ImageViewer/ImageViewer.tsx"],"sourcesContent":["import React, { useState, useCallback, useEffect } from \"react\";\nimport Viewer from \"react-viewer\";\nimport { cn } from \"@dsui/ui/lib/utils\";\nimport { ZoomIn } from \"lucide-react\";\nimport \"viewerjs/dist/viewer.css\";\nimport \"./ImageViewer.css\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface ImageInfo {\n src: string;\n alt?: string;\n downloadUrl?: string;\n}\n\nexport interface ImageViewerProps {\n images: ImageInfo[];\n visible?: boolean;\n onClose?: () => void;\n activeIndex?: number;\n onIndexChange?: (_index: number) => void;\n zoomSpeed?: number;\n disableKeyboardSupport?: boolean;\n noNavbar?: boolean;\n noToolbar?: boolean;\n rotatable?: boolean;\n scalable?: boolean;\n changeable?: boolean;\n noClose?: boolean;\n minScale?: number;\n maxScale?: number;\n defaultScale?: number;\n className?: string;\n downloadable?: boolean;\n noImgDetails?: boolean;\n noResetZoomAfterChange?: boolean;\n drag?: boolean;\n}\n\nexport interface ImageViewerImageProps\n extends React.ImgHTMLAttributes<HTMLImageElement> {\n src: string;\n alt?: string;\n width?: string | number;\n height?: string | number;\n preview?: boolean;\n previewSrc?: string;\n fallback?: string;\n placeholder?: React.ReactNode | boolean;\n className?: string;\n wrapperClassName?: string;\n onPreviewClick?: () => void;\n}\n\n// ============================================================================\n// ImageViewer Component\n// ============================================================================\n\nexport const ImageViewer: React.FC<ImageViewerProps> = ({\n images,\n visible = false,\n onClose,\n activeIndex = 0,\n onIndexChange,\n zoomSpeed = 0.1,\n disableKeyboardSupport = false,\n noNavbar = false,\n noToolbar = false,\n rotatable = true,\n scalable = true,\n changeable = true,\n noClose = false,\n minScale = 0.1,\n maxScale = 50,\n defaultScale = 1,\n className,\n downloadable = false,\n noImgDetails = false,\n noResetZoomAfterChange = false,\n drag = false,\n}) => {\n const [currentIndex, setCurrentIndex] = useState(activeIndex);\n\n useEffect(() => {\n setCurrentIndex(activeIndex);\n }, [activeIndex]);\n\n const handleClose = useCallback(() => {\n onClose?.();\n }, [onClose]);\n\n const handleIndexChange = useCallback(\n (_activeImage: any, index: number) => {\n setCurrentIndex(index);\n onIndexChange?.(index);\n },\n [onIndexChange]\n );\n\n // Handle download to save file locally\n const handleDownload = useCallback(() => {\n const currentImage = images[currentIndex];\n const downloadUrl = currentImage.downloadUrl || currentImage.src;\n\n // Create a temporary anchor element to trigger download\n const link = document.createElement(\"a\");\n link.href = downloadUrl;\n link.download = currentImage.alt || `image-${currentIndex + 1}`;\n\n // For cross-origin images, try to download via fetch\n fetch(downloadUrl)\n .then((response) => response.blob())\n .then((blob) => {\n const url = window.URL.createObjectURL(blob);\n link.href = url;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n window.URL.revokeObjectURL(url);\n })\n .catch(() => {\n // Fallback: do nothing if fetch fails\n });\n }, [images, currentIndex]);\n\n // Transform images to include downloadUrl\n const viewerImages = images.map((img) => ({\n src: img.src,\n alt: img.alt || \"\",\n downloadUrl: img.downloadUrl || img.src,\n }));\n\n return (\n <Viewer\n visible={visible}\n onClose={handleClose}\n onMaskClick={handleClose}\n images={viewerImages}\n activeIndex={currentIndex}\n onChange={handleIndexChange}\n zoomSpeed={zoomSpeed}\n disableKeyboardSupport={disableKeyboardSupport}\n noNavbar={noNavbar}\n noToolbar={noToolbar}\n rotatable={rotatable}\n scalable={scalable}\n changeable={changeable}\n noClose={noClose}\n minScale={minScale}\n maxScale={maxScale}\n defaultScale={defaultScale}\n className={cn(\"image-viewer-antd-style\", className)}\n downloadable={downloadable}\n noImgDetails={noImgDetails}\n noResetZoomAfterChange={noResetZoomAfterChange}\n showTotal={true}\n drag={drag}\n customToolbar={(toolbars) => {\n // Replace download button with a custom-rendered button to prevent viewer state change\n return toolbars.map((toolbar) => {\n if (toolbar.key === \"download\") {\n return {\n ...toolbar,\n actionType: undefined, // Remove default action\n onClick: undefined,\n render: (\n <button\n type=\"button\"\n className=\"react-viewer-icon react-viewer-download\"\n title=\"Download\"\n style={{\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: 0,\n }}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n handleDownload();\n }}\n >\n {/* SVG icon for download (Ant Design style) */}\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M10 3v10m0 0l-4-4m4 4l4-4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <rect\n x=\"4\"\n y=\"17\"\n width=\"12\"\n height=\"2\"\n rx=\"1\"\n fill=\"currentColor\"\n />\n </svg>\n </button>\n ),\n };\n }\n return toolbar;\n });\n }}\n />\n );\n};\n\nImageViewer.displayName = \"ImageViewer\";\n\n// ============================================================================\n// ImageViewerImage Component (Wrapper for single image with preview)\n// ============================================================================\n\nexport const ImageViewerImage: React.FC<ImageViewerImageProps> = ({\n src,\n alt = \"\",\n width,\n height,\n preview = true,\n previewSrc,\n fallback,\n placeholder,\n className,\n wrapperClassName,\n onPreviewClick,\n onError,\n ...props\n}) => {\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(false);\n const [viewerVisible, setViewerVisible] = useState(false);\n\n const handleLoad = () => {\n setLoading(false);\n setError(false);\n };\n\n const handleError = (e: React.SyntheticEvent<HTMLImageElement, Event>) => {\n setLoading(false);\n setError(true);\n onError?.(e);\n };\n\n const handlePreview = () => {\n if (!preview) return;\n setViewerVisible(true);\n onPreviewClick?.();\n };\n\n const handleCloseViewer = () => {\n setViewerVisible(false);\n };\n\n const showPlaceholder = loading && placeholder;\n const showFallback = error && fallback;\n const showPreviewMask = preview && !loading && !error;\n\n return (\n <>\n <div\n className={cn(\n \"ds-image-viewer-root relative inline-block\",\n wrapperClassName\n )}\n >\n <div className=\"relative inline-block\">\n {showPlaceholder && (\n <div\n className=\"absolute inset-0 flex items-center justify-center bg-muted animate-pulse\"\n style={{ width, height }}\n >\n {placeholder === true ? (\n <div className=\"w-8 h-8 border-2 border-primary border-t-transparent rounded-full animate-spin\" />\n ) : (\n placeholder\n )}\n </div>\n )}\n\n <img\n src={showFallback ? fallback : src}\n alt={alt}\n width={width}\n height={height}\n className={cn(\n \"ds-image-viewer-img max-w-full h-auto align-middle\",\n loading && \"opacity-0\",\n className\n )}\n onLoad={handleLoad}\n onError={handleError}\n {...props}\n />\n\n {showPreviewMask && (\n <div\n onClick={handlePreview}\n className={cn(\n \"ds-image-viewer-mask absolute inset-0 flex items-center justify-center opacity-0 hover:opacity-100 transition-opacity cursor-pointer\",\n \"bg-black/50 backdrop-blur-sm\"\n )}\n >\n <div className=\"text-white text-sm flex items-center gap-2\">\n <ZoomIn className=\"w-5 h-5\" />\n <span>Preview</span>\n </div>\n </div>\n )}\n </div>\n </div>\n\n {/* Viewer Modal */}\n <ImageViewer\n images={[{ src: previewSrc || src, alt }]}\n visible={viewerVisible}\n onClose={handleCloseViewer}\n rotatable\n scalable\n downloadable\n />\n </>\n );\n};\n\nImageViewerImage.displayName = \"ImageViewer.Image\";\n\n// ============================================================================\n// ImageViewerGroup Component\n// ============================================================================\n\ninterface ImageViewerGroupProps {\n children: React.ReactNode;\n images: ImageInfo[];\n preview?: boolean;\n}\n\nexport const ImageViewerGroup: React.FC<ImageViewerGroupProps> = ({\n children,\n images,\n preview = true,\n}) => {\n const [viewerVisible, setViewerVisible] = useState(false);\n const [currentIndex, setCurrentIndex] = useState(0);\n\n const handlePreview = useCallback((index: number) => {\n setCurrentIndex(index);\n setViewerVisible(true);\n }, []);\n\n const handleClose = useCallback(() => {\n setViewerVisible(false);\n }, []);\n\n const contextValue = React.useMemo(\n () => ({\n handlePreview,\n preview,\n }),\n [handlePreview, preview]\n );\n\n return (\n <>\n <ImageViewerGroupContext.Provider value={contextValue}>\n {children}\n </ImageViewerGroupContext.Provider>\n\n <ImageViewer\n images={images}\n visible={viewerVisible}\n onClose={handleClose}\n activeIndex={currentIndex}\n onIndexChange={setCurrentIndex}\n rotatable\n scalable\n downloadable\n />\n </>\n );\n};\n\nImageViewerGroup.displayName = \"ImageViewer.Group\";\n\n// Context for Group\nconst ImageViewerGroupContext = React.createContext<{\n handlePreview?: (_index: number) => void;\n preview?: boolean;\n} | null>(null);\n\n// Export with namespace\nconst ImageViewerNamespace = Object.assign(ImageViewer, {\n Image: ImageViewerImage,\n Group: ImageViewerGroup,\n});\n\nexport default ImageViewerNamespace;\n"],"names":["ImageViewer","images","visible","onClose","activeIndex","onIndexChange","zoomSpeed","disableKeyboardSupport","noNavbar","noToolbar","rotatable","scalable","changeable","noClose","minScale","maxScale","defaultScale","className","downloadable","noImgDetails","noResetZoomAfterChange","drag","currentIndex","setCurrentIndex","useState","useEffect","handleClose","useCallback","handleIndexChange","_activeImage","index","handleDownload","currentImage","downloadUrl","link","response","blob","url","viewerImages","img","jsx","Viewer","cn","toolbars","toolbar","e","jsxs","ImageViewerImage","src","alt","width","height","preview","previewSrc","fallback","placeholder","wrapperClassName","onPreviewClick","onError","props","loading","setLoading","error","setError","viewerVisible","setViewerVisible","handleLoad","handleError","handlePreview","handleCloseViewer","showPlaceholder","showFallback","showPreviewMask","Fragment","ZoomIn","ImageViewerGroup","children","contextValue","React","ImageViewerGroupContext"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.image-viewer-antd-style{@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes imageZoomIn{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}}.image-viewer-antd-style .react-viewer-canvas{background-color:#0000004d!important;-webkit-backdrop-filter:blur(5px)!important;backdrop-filter:blur(5px)!important;transition:all .3s cubic-bezier(.4,0,.2,1)!important;-webkit-user-select:none!important;user-select:none!important;-webkit-user-drag:none!important}.image-viewer-antd-style .react-viewer-canvas.react-viewer-transition{animation:fadeIn .3s ease-in-out!important}.image-viewer-antd-style .react-viewer-close{top:24px!important;right:24px!important;width:48px!important;height:48px!important;background:#00000080!important;border-radius:50%!important;transition:all .3s cubic-bezier(.4,0,.2,1)!important;opacity:.85!important;display:flex!important;align-items:center!important;justify-content:center!important}.image-viewer-antd-style .react-viewer-close:hover{background:#000000b3!important;transform:scale(1.1)!important;opacity:1!important}.image-viewer-antd-style .react-viewer-close>i{font-size:10px!important;color:#fff!important;line-height:1!important;display:flex!important;align-items:center!important;justify-content:center!important;position:static!important}.image-viewer-antd-style .react-viewer-toolbar{position:fixed!important;bottom:20px!important;left:50%!important;transform:translate(-50%,50%)!important;background:#000c!important;-webkit-backdrop-filter:blur(10px)!important;backdrop-filter:blur(10px)!important;border-radius:8px!important;padding:8px 16px!important;box-shadow:0 4px 12px #0000004d!important;z-index:1001!important;display:flex!important;flex-direction:row!important;align-items:center!important;transition:all .3s cubic-bezier(.4,0,.2,1)!important}.image-viewer-antd-style .react-viewer-toolbar li{width:40px!important;height:40px!important;margin:0 4px!important;border-radius:4px!important;transition:all .3s cubic-bezier(.4,0,.2,1)!important;display:flex!important;align-items:center!important;justify-content:center!important}.image-viewer-antd-style .react-viewer-toolbar li:hover{background:#ffffff1a!important}.image-viewer-antd-style .react-viewer-toolbar li[data-key=disabled]{opacity:.3!important;cursor:not-allowed!important}.image-viewer-antd-style .react-viewer-btn{background:none!important;-webkit-backdrop-filter:none!important;backdrop-filter:none!important;border-radius:100%!important;width:24px!important;height:24px!important;transition:all .3s cubic-bezier(.4,0,.2,1)!important;opacity:.85!important;display:flex!important;align-items:center!important;justify-content:center!important}.image-viewer-antd-style .react-viewer-btn:hover{background:#0003!important;opacity:1!important}.image-viewer-antd-style .react-viewer-btn-prev{left:16px!important}.image-viewer-antd-style .react-viewer-btn-next{right:16px!important}.image-viewer-antd-style .react-viewer-navbar{margin-bottom:30px!important;background:none!important}.image-viewer-antd-style .react-viewer-image{transition:transform .3s cubic-bezier(.4,0,.2,1),opacity .3s ease!important;z-index:1000!important;-webkit-user-select:none!important;user-select:none!important;-webkit-user-drag:none!important;cursor:default!important}.image-viewer-antd-style .react-viewer-image img{-webkit-user-select:none!important;user-select:none!important;-webkit-user-drag:none!important;pointer-events:none!important}.image-viewer-antd-style .react-viewer-image-transition{animation:imageZoomIn .3s cubic-bezier(.4,0,.2,1)!important}.image-viewer-antd-style .react-viewer-loading{border:2px solid rgba(255,255,255,.3)!important;border-top-color:#fff!important}.image-viewer-antd-style .react-viewer-mask{background-color:#0000004d!important;-webkit-backdrop-filter:blur(0px)!important;backdrop-filter:blur(0px)!important;transition:all .3s cubic-bezier(.4,0,.2,1)!important}.image-viewer-antd-style .react-viewer-footer{color:#ffffffd9!important;padding:16px 32px!important;font-size:16px!important}.image-viewer-antd-style .react-viewer-footer>p{display:none!important}.image-viewer-antd-style .react-viewer-attribute,.image-viewer-antd-style p.react-viewer-attribute,.image-viewer-antd-style .react-viewer-attributes{display:none!important}.image-viewer-antd-style .react-viewer-list{position:fixed!important;bottom:50px!important;left:50%!important;transform:translate(-50%)!important;z-index:999!important;display:flex!important;gap:8px!important;max-width:90vw!important;overflow-x:auto!important;transition:opacity .3s ease!important;height:60px!important;text-align:center!important;margin-left:0!important}.image-viewer-antd-style .react-viewer-list>li{display:inline-block!important;width:auto!important;height:auto!important}.image-viewer-antd-style .react-viewer-list-item{border:2px solid transparent!important;border-radius:4px!important;transition:all .3s cubic-bezier(.4,0,.2,1)!important;width:60px!important;height:60px!important;margin:0 4px!important;cursor:pointer!important}.image-viewer-antd-style .react-viewer-list-item:hover{border-color:#ffffff4d!important}.image-viewer-antd-style .react-viewer-list-item-active{border-color:#fff!important}@media(prefers-color-scheme:dark){.image-viewer-antd-style .react-viewer-canvas{-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px)}}@media(max-width:768px){.image-viewer-antd-style .react-viewer-close{top:12px!important;right:12px!important;width:40px!important;height:40px!important}.image-viewer-antd-style .react-viewer-close>i{position:static}.image-viewer-antd-style .react-viewer-toolbar{bottom:16px!important;padding:6px 12px!important}.image-viewer-antd-style .react-viewer-toolbar li{width:36px!important;height:36px!important;margin:0 2px!important}.image-viewer-antd-style .react-viewer-btn{width:40px!important;height:40px!important}.image-viewer-antd-style .react-viewer-btn-prev{left:8px!important}.image-viewer-antd-style .react-viewer-btn-next{right:8px!important}}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const n=require("react/jsx-runtime"),a=require("react"),K=require("@dsui/ui/components/input"),l=require("@dsui/ui/lib/utils"),Q=require("../FloatLabel.cjs"),m=require("lucide-react"),W=require("use-mask-input"),Y=require("../Tooltip/Tooltip.cjs"),I=a.forwardRef(({className:D,label:x,helperText:p,state:v,size:i,isFloatLabel:u,type:s,mask:f,maskOptions:S,maxLength:h,showCharCount:E,infoTooltip:N,clearable:b,onClear:M,prefixIcon:o,suffixIcon:c,placeholder:_=" ",...t},B)=>{const[g,P]=a.useState(()=>typeof t.value=="string"?t.value.length:typeof t.defaultValue=="string"?t.defaultValue.length:0),H=e=>{P(e.target.value.length),t.onChange&&t.onChange(e)},O=()=>{if(r.current){r.current.value="",P(0);const e={target:r.current,currentTarget:r.current};t.onChange?.(e),M&&M()}},j=a.useId(),r=a.useRef(null),T=a.useCallback(e=>{if(r&&(r.current=e),f&&e){const d=W.withMask(f,S);typeof d=="function"&&d(e)}},[f,S]);a.useImperativeHandle(B,()=>r.current);const[R,U]=a.useState(!1),X={default:"text-muted-foreground",success:"text-success",warning:"text-warning",error:"text-error"},w=u?i==="xl"||i==="lg"?i:"xl":i||"normal",q=(()=>{const e={xs:{prefix:"pl-8",suffix:"pr-8"},sm:{prefix:"pl-9",suffix:"pr-9"},normal:{prefix:"pl-10",suffix:"pr-10"},lg:{prefix:"pl-11",suffix:"pr-11"},xl:{prefix:"pl-12",suffix:"pr-12"}};return e[w]||e.normal})(),V={xs:"size-3",sm:"size-3.5",normal:"size-4",lg:"size-4",xl:"size-4"}[w]||"size-4",A=()=>{const e=s==="number"||s==="password"||s==="datetime"||b&&(g>0||t?.value);return e&&c?s==="password"&&b&&(g>0||t?.value)?"pr-20":"pr-16":e?s==="password"&&b&&(g>0||t?.value)?"pr-16":"pr-10":c?q.suffix:""},k=(()=>{const e={xs:{left:"left-2.5",right:"right-2.5"},sm:{left:"left-3",right:"right-3"},normal:{left:"left-3",right:"right-3"},lg:{left:"left-3.5",right:"right-3.5"},xl:{left:"left-4",right:"right-4"}};return e[w]||e.normal})(),G=()=>{if(r.current){const e=Number(t.step||1),d=t.max?Number(t.max):1/0,y=Number(r.current.value||0),C=Math.min(y+e,d);r.current.value=String(C);const z=new Event("input",{bubbles:!0});r.current.dispatchEvent(z)}},J=()=>{if(r.current){const e=Number(t.step||1),d=t.min?Number(t.min):-1/0,y=Number(r.current.value||0),C=Math.max(y-e,d);r.current.value=String(C);const z=new Event("input",{bubbles:!0});r.current.dispatchEvent(z)}};return n.jsx("div",{className:D,children:n.jsxs("div",{className:l.cn("flex flex-col gap-1.5 relative flex-auto",{"floating-label relative":u}),children:[!u&&x&&n.jsxs("label",{htmlFor:j,className:"flex gap-2 text-sm font-medium peer-disabled:cursor-not-allowed peer-disabled:opacity-70",children:[x,N&&n.jsx(Y.Tooltip,{content:N,children:n.jsx(m.Info,{className:"size-3.5 min-w-3.5"})})]}),n.jsxs("div",{className:"relative",children:[o&&n.jsx("div",{className:l.cn("absolute top-1/2 -translate-y-1/2 text-muted-foreground leading-0",k.left),children:a.isValidElement(o)?a.cloneElement(o,{className:l.cn(V,o.props?.className)}):o}),n.jsx(K.Input,{ref:T,id:j,className:l.cn("peer",{"pt-5 pb-1":u&&i!=="lg","[&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none [-moz-appearance:textfield] pr-8":s==="number"},o&&q.prefix,f&&"placeholder:text-slate-400 placeholder:opacity-100",A()),state:v,size:u?i==="xl"||i==="lg"?i:"xl":i,type:s==="password"?R?"text":"password":s,placeholder:_,maxLength:h,onChange:H,...t}),u&&n.jsx(Q.FloatingLabel,{htmlFor:j,size:i,infoTooltip:N,children:x}),s==="number"&&n.jsxs("div",{className:"absolute right-1 top-0 h-full flex flex-col gap-0.5",children:[n.jsx("button",{type:"button",onClick:G,disabled:t.disabled,className:l.cn("h-1/2 w-6 flex items-center justify-center rounded cursor-pointer hover:scale-150 transition-transform","disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:bg-transparent"),tabIndex:-1,children:n.jsx(m.ChevronUp,{className:"size-3"})}),n.jsx("button",{type:"button",onClick:J,disabled:t.disabled,className:l.cn("h-1/2 w-6 flex items-center justify-center rounded cursor-pointer hover:scale-150 transition-transform","disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:bg-transparent"),tabIndex:-1,children:n.jsx(m.ChevronDown,{className:"size-3"})})]}),b&&(g>0||t?.value)&&!t.disabled&&s!=="number"&&n.jsx("button",{type:"button",tabIndex:-1,className:l.cn("absolute top-1/2 -translate-y-1/2 p-1 rounded hover:bg-accent transition-colors cursor-pointer",s==="password"?c?"right-14":"right-10":c?"right-10":"right-2"),onClick:O,disabled:t.disabled,children:n.jsx(m.X,{className:"size-4"})}),s==="password"&&n.jsx("button",{type:"button",tabIndex:-1,className:l.cn("absolute top-1/2 -translate-y-1/2 p-1 rounded hover:bg-accent transition-colors",c?"right-10":"right-2"),onClick:()=>U(e=>!e),disabled:t.disabled,children:R?n.jsx(m.EyeOff,{className:"size-4"}):n.jsx(m.Eye,{className:"size-4"})}),c&&n.jsx("div",{className:l.cn("absolute top-1/2 -translate-y-1/2 text-muted-foreground leading-0",k.right),children:a.isValidElement(c)?a.cloneElement(c,{className:l.cn(V,c.props?.className)}):c})]}),(p||E&&typeof h=="number")&&n.jsxs("div",{className:"flex items-center justify-between text-xs gap-2",children:[p&&n.jsx("p",{className:l.cn("text-xs",v?X?.[v]:""),children:p}),E&&typeof h=="number"&&n.jsxs("span",{className:"ml-auto text-muted-foreground",children:[g," / ",h]})]})]})})});I.displayName="Input";exports.default=I;
|
|
2
|
+
//# sourceMappingURL=Input.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Input.cjs","sources":["../../../../src/components/Input/Input.tsx"],"sourcesContent":["import React from \"react\";\nimport {\n Input as SInput,\n type InputProps as SInputProps,\n} from \"@dsui/ui/components/input\";\nimport { cn } from \"@dsui/ui/lib/utils\";\nimport { FloatingLabel } from \"@/components/FloatLabel\";\nimport { Eye, EyeOff, ChevronDown, ChevronUp, Info, X } from \"lucide-react\";\nimport { withMask, type Options } from \"use-mask-input\";\nimport { Tooltip } from \"../Tooltip/Tooltip\";\n\nexport type InputProps = SInputProps & {\n label?: string;\n helperText?: React.ReactNode;\n isFloatLabel?: boolean;\n mask?: string;\n maskOptions?: {\n placeholder?: string;\n inputFormat?: string;\n outputFormat?: string;\n showMaskOnHover?: boolean;\n showMaskOnFocus?: boolean;\n separate?: boolean;\n } & Options;\n maxLength?: number;\n showCharCount?: boolean;\n infoTooltip?: React.ReactNode;\n clearable?: boolean;\n onClear?: () => void;\n prefixIcon?: React.ReactNode;\n suffixIcon?: React.ReactNode;\n};\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n label,\n helperText,\n state,\n size,\n isFloatLabel,\n type,\n mask,\n maskOptions,\n maxLength,\n showCharCount,\n infoTooltip,\n clearable,\n onClear,\n prefixIcon,\n suffixIcon,\n placeholder = \" \",\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<HTMLInputElement>) => {\n setCharCount(e.target.value.length);\n if (props.onChange) props.onChange(e);\n };\n\n const handleClear = () => {\n if (innerRef.current) {\n innerRef.current.value = \"\";\n setCharCount(0);\n const event = {\n target: innerRef.current,\n currentTarget: innerRef.current,\n } as React.ChangeEvent<HTMLInputElement>;\n props.onChange?.(event);\n if (onClear) onClear();\n }\n };\n\n const inputId = React.useId();\n const innerRef = React.useRef<HTMLInputElement>(null);\n\n // Combine refs\n const combinedRef = React.useCallback(\n (element: HTMLInputElement | null) => {\n // Set innerRef\n if (innerRef) {\n (\n innerRef as React.MutableRefObject<HTMLInputElement | null>\n ).current = element;\n }\n\n // Apply mask if provided\n if (mask && element) {\n const maskRefCallback = withMask(mask, maskOptions);\n if (typeof maskRefCallback === \"function\") {\n maskRefCallback(element);\n }\n }\n },\n [mask, maskOptions],\n );\n\n // Expose ref to parent\n React.useImperativeHandle(ref, () => innerRef.current!);\n\n const [showPassword, setShowPassword] = React.useState(false);\n\n // State\n const helperTextStyles = {\n default: \"text-muted-foreground\",\n success: \"text-success\",\n warning: \"text-warning\",\n error: \"text-error\",\n };\n\n // Calculate current size\n const currentSize = isFloatLabel\n ? size === \"xl\" || size === \"lg\"\n ? size\n : \"xl\"\n : size || \"normal\";\n\n // Calculate padding based on size and icons\n const getPadding = () => {\n const sizeMap = {\n xs: { prefix: \"pl-8\", suffix: \"pr-8\" },\n sm: { prefix: \"pl-9\", suffix: \"pr-9\" },\n normal: { prefix: \"pl-10\", suffix: \"pr-10\" },\n lg: { prefix: \"pl-11\", suffix: \"pr-11\" },\n xl: { prefix: \"pl-12\", suffix: \"pr-12\" },\n };\n\n return sizeMap[currentSize as keyof typeof sizeMap] || sizeMap.normal;\n };\n\n const padding = getPadding();\n\n // Get icon size class based on current size\n const getIconSizeClass = () => {\n const sizeMap = {\n xs: \"size-3\",\n sm: \"size-3.5\",\n normal: \"size-4\",\n lg: \"size-4\",\n xl: \"size-4\",\n };\n return sizeMap[currentSize as keyof typeof sizeMap] || \"size-4\";\n };\n\n const iconSizeClass = getIconSizeClass();\n\n // Calculate right padding considering built-in icons\n const getRightPadding = () => {\n const hasBuiltInSuffix =\n type === \"number\" ||\n type === \"password\" ||\n type === \"datetime\" ||\n (clearable && (charCount > 0 || props?.value));\n\n if (hasBuiltInSuffix && suffixIcon) {\n return type === \"password\" &&\n clearable &&\n (charCount > 0 || props?.value)\n ? \"pr-20\" // password + clear + custom icon\n : \"pr-16\"; // one built-in + custom icon\n }\n\n if (hasBuiltInSuffix) {\n return type === \"password\" &&\n clearable &&\n (charCount > 0 || props?.value)\n ? \"pr-16\" // password + clear\n : \"pr-10\"; // single built-in icon\n }\n\n if (suffixIcon) {\n return padding.suffix;\n }\n\n return \"\";\n };\n\n // Icon position calculations\n const getIconPosition = () => {\n const sizeMap = {\n xs: { left: \"left-2.5\", right: \"right-2.5\" },\n sm: { left: \"left-3\", right: \"right-3\" },\n normal: { left: \"left-3\", right: \"right-3\" },\n lg: { left: \"left-3.5\", right: \"right-3.5\" },\n xl: { left: \"left-4\", right: \"right-4\" },\n };\n\n return sizeMap[currentSize as keyof typeof sizeMap] || sizeMap.normal;\n };\n\n const iconPosition = getIconPosition();\n\n /* Spinner Button Handlers */\n const handleIncrement = () => {\n if (innerRef.current) {\n const step = Number(props.step || 1);\n const max = props.max ? Number(props.max) : Infinity;\n const currentValue = Number(innerRef.current.value || 0);\n const newValue = Math.min(currentValue + step, max);\n\n innerRef.current.value = String(newValue);\n const event = new Event(\"input\", { bubbles: true });\n innerRef.current.dispatchEvent(event);\n }\n };\n\n const handleDecrement = () => {\n if (innerRef.current) {\n const step = Number(props.step || 1);\n const min = props.min ? Number(props.min) : -Infinity;\n const currentValue = Number(innerRef.current.value || 0);\n const newValue = Math.max(currentValue - step, min);\n\n innerRef.current.value = String(newValue);\n const event = new Event(\"input\", { bubbles: true });\n innerRef.current.dispatchEvent(event);\n }\n };\n /* End Spinner Button Handlers */\n\n return (\n <div className={className}>\n <div\n className={cn(\"flex flex-col gap-1.5 relative flex-auto\", {\n \"floating-label relative\": isFloatLabel,\n })}\n >\n {!isFloatLabel && label && (\n <label\n htmlFor={inputId}\n className=\"flex gap-2 text-sm font-medium peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n >\n {label}\n {infoTooltip && (\n <Tooltip content={infoTooltip}>\n <Info className=\"size-3.5 min-w-3.5\" />\n </Tooltip>\n )}\n </label>\n )}\n\n <div className=\"relative\">\n {/* Prefix Icon */}\n {prefixIcon && (\n <div\n className={cn(\n \"absolute top-1/2 -translate-y-1/2 text-muted-foreground leading-0\",\n iconPosition.left,\n )}\n >\n {React.isValidElement(prefixIcon)\n ? React.cloneElement(prefixIcon, {\n className: cn(\n iconSizeClass,\n (prefixIcon.props as any)?.className,\n ),\n } as Partial<unknown>)\n : prefixIcon}\n </div>\n )}\n\n <SInput\n ref={combinedRef}\n id={inputId}\n className={cn(\n \"peer\",\n {\n \"pt-5 pb-1\": isFloatLabel && size !== \"lg\",\n \"[&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none [-moz-appearance:textfield] pr-8\":\n type === \"number\",\n // \"[-webkit-text-fill-color:var(--foreground)]\": mask,\n },\n prefixIcon && padding.prefix,\n mask && \"placeholder:text-slate-400 placeholder:opacity-100\",\n getRightPadding(),\n // className,\n )}\n state={state}\n size={\n isFloatLabel\n ? size === \"xl\" || size === \"lg\"\n ? size\n : \"xl\"\n : size\n }\n type={\n type === \"password\"\n ? showPassword\n ? \"text\"\n : \"password\"\n : type\n }\n placeholder={placeholder}\n maxLength={maxLength}\n onChange={handleInput}\n {...props}\n />\n {isFloatLabel && (\n <FloatingLabel\n htmlFor={inputId}\n size={size}\n infoTooltip={infoTooltip}\n >\n {label}\n </FloatingLabel>\n )}\n\n {/* Spinner Buttons */}\n {type === \"number\" && (\n <div className=\"absolute right-1 top-0 h-full flex flex-col gap-0.5\">\n <button\n type=\"button\"\n onClick={handleIncrement}\n disabled={props.disabled}\n className={cn(\n \"h-1/2 w-6 flex items-center justify-center rounded cursor-pointer hover:scale-150 transition-transform\",\n \"disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:bg-transparent\",\n )}\n tabIndex={-1}\n >\n <ChevronUp className=\"size-3\" />\n </button>\n <button\n type=\"button\"\n onClick={handleDecrement}\n disabled={props.disabled}\n className={cn(\n \"h-1/2 w-6 flex items-center justify-center rounded cursor-pointer hover:scale-150 transition-transform\",\n \"disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:bg-transparent\",\n )}\n tabIndex={-1}\n >\n <ChevronDown className=\"size-3\" />\n </button>\n </div>\n )}\n\n {/* Clear Button */}\n {clearable &&\n (charCount > 0 || props?.value) &&\n !props.disabled &&\n type !== \"number\" && (\n <button\n type=\"button\"\n tabIndex={-1}\n className={cn(\n \"absolute top-1/2 -translate-y-1/2 p-1 rounded hover:bg-accent transition-colors cursor-pointer\",\n type === \"password\"\n ? suffixIcon\n ? \"right-14\"\n : \"right-10\"\n : suffixIcon\n ? \"right-10\"\n : \"right-2\",\n )}\n onClick={handleClear}\n disabled={props.disabled}\n >\n <X className=\"size-4\" />\n </button>\n )}\n\n {/* Show/Hide Password Button */}\n {type === \"password\" && (\n <button\n type=\"button\"\n tabIndex={-1}\n className={cn(\n \"absolute top-1/2 -translate-y-1/2 p-1 rounded hover:bg-accent transition-colors\",\n suffixIcon ? \"right-10\" : \"right-2\",\n )}\n onClick={() => setShowPassword((prev) => !prev)}\n disabled={props.disabled}\n >\n {showPassword ? (\n <EyeOff className=\"size-4\" />\n ) : (\n <Eye className=\"size-4\" />\n )}\n </button>\n )}\n\n {/* Suffix Icon */}\n {suffixIcon && (\n <div\n className={cn(\n \"absolute top-1/2 -translate-y-1/2 text-muted-foreground leading-0\",\n iconPosition.right,\n )}\n >\n {React.isValidElement(suffixIcon)\n ? React.cloneElement(suffixIcon, {\n className: cn(\n iconSizeClass,\n (suffixIcon.props as any)?.className,\n ),\n } as Partial<unknown>)\n : suffixIcon}\n </div>\n )}\n </div>\n\n {(helperText || (showCharCount && typeof maxLength === \"number\")) && (\n <div className=\"flex items-center justify-between text-xs gap-2\">\n {helperText && (\n <p\n className={cn(\n \"text-xs\",\n state ? helperTextStyles?.[state] : \"\",\n )}\n >\n {helperText}\n </p>\n )}\n {showCharCount && typeof maxLength === \"number\" && (\n <span className=\"ml-auto text-muted-foreground\">\n {charCount} / {maxLength}\n </span>\n )}\n </div>\n )}\n </div>\n </div>\n );\n },\n);\n\nInput.displayName = \"Input\";\nexport default Input;\n"],"names":["Input","React","className","label","helperText","state","size","isFloatLabel","type","mask","maskOptions","maxLength","showCharCount","infoTooltip","clearable","onClear","prefixIcon","suffixIcon","placeholder","props","ref","charCount","setCharCount","handleInput","handleClear","innerRef","event","inputId","combinedRef","element","maskRefCallback","withMask","showPassword","setShowPassword","helperTextStyles","currentSize","padding","sizeMap","iconSizeClass","getRightPadding","hasBuiltInSuffix","iconPosition","handleIncrement","step","max","currentValue","newValue","handleDecrement","min","jsx","jsxs","cn","Tooltip","Info","SInput","FloatingLabel","ChevronUp","ChevronDown","X","prev","EyeOff","Eye"],"mappings":"oWAiCMA,EAAQC,EAAM,WAClB,CACE,CACE,UAAAC,EACA,MAAAC,EACA,WAAAC,EACA,MAAAC,EACA,KAAAC,EACA,aAAAC,EACA,KAAAC,EACA,KAAAC,EACA,YAAAC,EACA,UAAAC,EACA,cAAAC,EACA,YAAAC,EACA,UAAAC,EACA,QAAAC,EACA,WAAAC,EACA,WAAAC,EACA,YAAAC,EAAc,IACd,GAAGC,CAAA,EAELC,IACG,CAEH,KAAM,CAACC,EAAWC,CAAY,EAAIrB,EAAM,SAAS,IAC3C,OAAOkB,EAAM,OAAU,SAAiBA,EAAM,MAAM,OACpD,OAAOA,EAAM,cAAiB,SACzBA,EAAM,aAAa,OACrB,CACR,EAEKI,EAAe,GAA2C,CAC9DD,EAAa,EAAE,OAAO,MAAM,MAAM,EAC9BH,EAAM,UAAUA,EAAM,SAAS,CAAC,CACtC,EAEMK,EAAc,IAAM,CACxB,GAAIC,EAAS,QAAS,CACpBA,EAAS,QAAQ,MAAQ,GACzBH,EAAa,CAAC,EACd,MAAMI,EAAQ,CACZ,OAAQD,EAAS,QACjB,cAAeA,EAAS,OAAA,EAE1BN,EAAM,WAAWO,CAAK,EAClBX,GAASA,EAAA,CACf,CACF,EAEMY,EAAU1B,EAAM,MAAA,EAChBwB,EAAWxB,EAAM,OAAyB,IAAI,EAG9C2B,EAAc3B,EAAM,YACvB4B,GAAqC,CASpC,GAPIJ,IAEAA,EACA,QAAUI,GAIVpB,GAAQoB,EAAS,CACnB,MAAMC,EAAkBC,EAAAA,SAAStB,EAAMC,CAAW,EAC9C,OAAOoB,GAAoB,YAC7BA,EAAgBD,CAAO,CAE3B,CACF,EACA,CAACpB,EAAMC,CAAW,CAAA,EAIpBT,EAAM,oBAAoBmB,EAAK,IAAMK,EAAS,OAAQ,EAEtD,KAAM,CAACO,EAAcC,CAAe,EAAIhC,EAAM,SAAS,EAAK,EAGtDiC,EAAmB,CACvB,QAAS,wBACT,QAAS,eACT,QAAS,eACT,MAAO,YAAA,EAIHC,EAAc5B,EAChBD,IAAS,MAAQA,IAAS,KACxBA,EACA,KACFA,GAAQ,SAeN8B,GAZa,IAAM,CACvB,MAAMC,EAAU,CACd,GAAI,CAAE,OAAQ,OAAQ,OAAQ,MAAA,EAC9B,GAAI,CAAE,OAAQ,OAAQ,OAAQ,MAAA,EAC9B,OAAQ,CAAE,OAAQ,QAAS,OAAQ,OAAA,EACnC,GAAI,CAAE,OAAQ,QAAS,OAAQ,OAAA,EAC/B,GAAI,CAAE,OAAQ,QAAS,OAAQ,OAAA,CAAQ,EAGzC,OAAOA,EAAQF,CAAmC,GAAKE,EAAQ,MACjE,GAEgB,EAcVC,EAVY,CACd,GAAI,SACJ,GAAI,WACJ,OAAQ,SACR,GAAI,SACJ,GAAI,QAAA,EAESH,CAAmC,GAAK,SAMnDI,EAAkB,IAAM,CAC5B,MAAMC,EACJhC,IAAS,UACTA,IAAS,YACTA,IAAS,YACRM,IAAcO,EAAY,GAAKF,GAAO,OAEzC,OAAIqB,GAAoBvB,EACfT,IAAS,YACdM,IACCO,EAAY,GAAKF,GAAO,OACvB,QACA,QAGFqB,EACKhC,IAAS,YACdM,IACCO,EAAY,GAAKF,GAAO,OACvB,QACA,QAGFF,EACKmB,EAAQ,OAGV,EACT,EAeMK,GAZkB,IAAM,CAC5B,MAAMJ,EAAU,CACd,GAAI,CAAE,KAAM,WAAY,MAAO,WAAA,EAC/B,GAAI,CAAE,KAAM,SAAU,MAAO,SAAA,EAC7B,OAAQ,CAAE,KAAM,SAAU,MAAO,SAAA,EACjC,GAAI,CAAE,KAAM,WAAY,MAAO,WAAA,EAC/B,GAAI,CAAE,KAAM,SAAU,MAAO,SAAA,CAAU,EAGzC,OAAOA,EAAQF,CAAmC,GAAKE,EAAQ,MACjE,GAEqB,EAGfK,EAAkB,IAAM,CAC5B,GAAIjB,EAAS,QAAS,CACpB,MAAMkB,EAAO,OAAOxB,EAAM,MAAQ,CAAC,EAC7ByB,EAAMzB,EAAM,IAAM,OAAOA,EAAM,GAAG,EAAI,IACtC0B,EAAe,OAAOpB,EAAS,QAAQ,OAAS,CAAC,EACjDqB,EAAW,KAAK,IAAID,EAAeF,EAAMC,CAAG,EAElDnB,EAAS,QAAQ,MAAQ,OAAOqB,CAAQ,EACxC,MAAMpB,EAAQ,IAAI,MAAM,QAAS,CAAE,QAAS,GAAM,EAClDD,EAAS,QAAQ,cAAcC,CAAK,CACtC,CACF,EAEMqB,EAAkB,IAAM,CAC5B,GAAItB,EAAS,QAAS,CACpB,MAAMkB,EAAO,OAAOxB,EAAM,MAAQ,CAAC,EAC7B6B,EAAM7B,EAAM,IAAM,OAAOA,EAAM,GAAG,EAAI,KACtC0B,EAAe,OAAOpB,EAAS,QAAQ,OAAS,CAAC,EACjDqB,EAAW,KAAK,IAAID,EAAeF,EAAMK,CAAG,EAElDvB,EAAS,QAAQ,MAAQ,OAAOqB,CAAQ,EACxC,MAAMpB,EAAQ,IAAI,MAAM,QAAS,CAAE,QAAS,GAAM,EAClDD,EAAS,QAAQ,cAAcC,CAAK,CACtC,CACF,EAGA,OACEuB,EAAAA,IAAC,OAAI,UAAA/C,EACH,SAAAgD,EAAAA,KAAC,MAAA,CACC,UAAWC,EAAAA,GAAG,2CAA4C,CACxD,0BAA2B5C,CAAA,CAC5B,EAEA,SAAA,CAAA,CAACA,GAAgBJ,GAChB+C,EAAAA,KAAC,QAAA,CACC,QAASvB,EACT,UAAU,2FAET,SAAA,CAAAxB,EACAU,SACEuC,UAAA,CAAQ,QAASvC,EAChB,SAAAoC,EAAAA,IAACI,EAAAA,KAAA,CAAK,UAAU,oBAAA,CAAqB,CAAA,CACvC,CAAA,CAAA,CAAA,EAKNH,EAAAA,KAAC,MAAA,CAAI,UAAU,WAEZ,SAAA,CAAAlC,GACCiC,EAAAA,IAAC,MAAA,CACC,UAAWE,EAAAA,GACT,oEACAV,EAAa,IAAA,EAGd,WAAM,eAAezB,CAAU,EAC5Bf,EAAM,aAAae,EAAY,CAC7B,UAAWmC,EAAAA,GACTb,EACCtB,EAAW,OAAe,SAAA,CAC7B,CACmB,EACrBA,CAAA,CAAA,EAIRiC,EAAAA,IAACK,EAAAA,MAAA,CACC,IAAK1B,EACL,GAAID,EACJ,UAAWwB,EAAAA,GACT,OACA,CACE,YAAa5C,GAAgBD,IAAS,KACtC,iIACEE,IAAS,QAAA,EAGbQ,GAAcoB,EAAQ,OACtB3B,GAAQ,qDACR8B,EAAA,CAAgB,EAGlB,MAAAlC,EACA,KACEE,EACID,IAAS,MAAQA,IAAS,KACxBA,EACA,KACFA,EAEN,KACEE,IAAS,WACLwB,EACE,OACA,WACFxB,EAEN,YAAAU,EACA,UAAAP,EACA,SAAUY,EACT,GAAGJ,CAAA,CAAA,EAELZ,GACC0C,EAAAA,IAACM,EAAAA,cAAA,CACC,QAAS5B,EACT,KAAArB,EACA,YAAAO,EAEC,SAAAV,CAAA,CAAA,EAKJK,IAAS,UACR0C,OAAC,MAAA,CAAI,UAAU,sDACb,SAAA,CAAAD,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,QAASP,EACT,SAAUvB,EAAM,SAChB,UAAWgC,EAAAA,GACT,yGACA,+EAAA,EAEF,SAAU,GAEV,SAAAF,EAAAA,IAACO,EAAAA,UAAA,CAAU,UAAU,QAAA,CAAS,CAAA,CAAA,EAEhCP,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,QAASF,EACT,SAAU5B,EAAM,SAChB,UAAWgC,EAAAA,GACT,yGACA,+EAAA,EAEF,SAAU,GAEV,SAAAF,EAAAA,IAACQ,EAAAA,YAAA,CAAY,UAAU,QAAA,CAAS,CAAA,CAAA,CAClC,EACF,EAID3C,IACEO,EAAY,GAAKF,GAAO,QACzB,CAACA,EAAM,UACPX,IAAS,UACPyC,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,SAAU,GACV,UAAWE,EAAAA,GACT,iGACA3C,IAAS,WACLS,EACE,WACA,WACFA,EACE,WACA,SAAA,EAER,QAASO,EACT,SAAUL,EAAM,SAEhB,SAAA8B,EAAAA,IAACS,EAAAA,EAAA,CAAE,UAAU,QAAA,CAAS,CAAA,CAAA,EAK3BlD,IAAS,YACRyC,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,SAAU,GACV,UAAWE,EAAAA,GACT,kFACAlC,EAAa,WAAa,SAAA,EAE5B,QAAS,IAAMgB,EAAiB0B,GAAS,CAACA,CAAI,EAC9C,SAAUxC,EAAM,SAEf,SAAAa,QACE4B,EAAAA,OAAA,CAAO,UAAU,SAAS,EAE3BX,EAAAA,IAACY,EAAAA,IAAA,CAAI,UAAU,QAAA,CAAS,CAAA,CAAA,EAM7B5C,GACCgC,EAAAA,IAAC,MAAA,CACC,UAAWE,EAAAA,GACT,oEACAV,EAAa,KAAA,EAGd,WAAM,eAAexB,CAAU,EAC5BhB,EAAM,aAAagB,EAAY,CAC7B,UAAWkC,EAAAA,GACTb,EACCrB,EAAW,OAAe,SAAA,CAC7B,CACmB,EACrBA,CAAA,CAAA,CACN,EAEJ,GAEEb,GAAeQ,GAAiB,OAAOD,GAAc,WACrDuC,OAAC,MAAA,CAAI,UAAU,kDACZ,SAAA,CAAA9C,GACC6C,EAAAA,IAAC,IAAA,CACC,UAAWE,EAAAA,GACT,UACA9C,EAAQ6B,IAAmB7B,CAAK,EAAI,EAAA,EAGrC,SAAAD,CAAA,CAAA,EAGJQ,GAAiB,OAAOD,GAAc,UACrCuC,EAAAA,KAAC,OAAA,CAAK,UAAU,gCACb,SAAA,CAAA7B,EAAU,MAAIV,CAAA,CAAA,CACjB,CAAA,CAAA,CAEJ,CAAA,CAAA,CAAA,EAGN,CAEJ,CACF,EAEAX,EAAM,YAAc"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),i=require("react"),t=require("@dsui/ui/components/input-otp"),N=require("@dsui/ui/components/label"),o=require("@dsui/ui/index"),P=i.forwardRef(({label:x,inputType:r="digits",regexPattern:p,length:l,size:m="normal",state:s="default",helperText:a,gapSize:n=4,variant:d="outlined",className:_,rootClassName:f,childClassName:g,...h},I)=>{const c=i.useId(),O=r==="digits"?t.REGEXP_ONLY_DIGITS:r==="chars"?t.REGEXP_ONLY_CHARS:r==="digits-and-chars"?t.REGEXP_ONLY_DIGITS_AND_CHARS:void 0,j={default:"text-muted-foreground",success:"text-success",warning:"text-warning",error:"text-error"};return e.jsxs("div",{className:o.cn("flex flex-col gap-1.5 relative",f),children:[e.jsx(N.Label,{htmlFor:c,children:x}),e.jsx(t.InputOTP,{id:c,maxLength:l??4,pattern:p??O,ref:I,...h,children:e.jsx(t.InputOTPGroup,{className:o.cn({"gap-2 *:data-[slot=input-otp-slot]:rounded-md *:data-[slot=input-otp-slot]:border":d==="outlined"&&n>0},_),style:n>0?{gap:`${n}px`}:void 0,children:Array.from({length:l??4}).map((R,u)=>e.jsx(t.InputOTPSlot,{index:u,size:m,state:s??void 0,variant:d,className:g},u))})}),a&&e.jsx("p",{className:o.cn("text-xs",s?j?.[s]:""),children:a})]})});exports.default=P;
|
|
2
|
+
//# sourceMappingURL=InputOTP.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InputOTP.cjs","sources":["../../../../src/components/InputOTP/InputOTP.tsx"],"sourcesContent":["import React, { useId } from \"react\";\n\nimport {\n InputOTP as SInputOTP,\n InputOTPGroup,\n InputOTPSlot,\n type InputOTPProps as SInputOTPProps,\n REGEXP_ONLY_DIGITS,\n REGEXP_ONLY_CHARS,\n REGEXP_ONLY_DIGITS_AND_CHARS,\n inputOTPSlotVariants,\n} from \"@dsui/ui/components/input-otp\";\nimport { Label } from \"@dsui/ui/components/label\";\nimport type { VariantProps } from \"class-variance-authority\";\nimport { cn } from \"@dsui/ui/index\";\n\ntype InputOTPProps = Omit<SInputOTPProps, \"size\" | \"render\" | \"maxLength\"> & {\n label?: React.ReactNode;\n length?: number;\n inputType?: \"digits\" | \"chars\" | \"digits-and-chars\";\n size?: VariantProps<typeof inputOTPSlotVariants>[\"size\"];\n state?: VariantProps<typeof inputOTPSlotVariants>[\"state\"];\n variant?: VariantProps<typeof inputOTPSlotVariants>[\"variant\"];\n regexPattern?: string;\n helperText?: React.ReactNode;\n gapSize?: number;\n className?: string;\n rootClassName?: string;\n childClassName?: string;\n};\n\nconst InputOTP = React.forwardRef<\n React.ElementRef<typeof SInputOTP>,\n InputOTPProps\n>(\n (\n {\n label,\n inputType = \"digits\",\n regexPattern,\n length,\n size = \"normal\",\n state = \"default\",\n helperText,\n gapSize = 4,\n variant = \"outlined\",\n className,\n rootClassName,\n childClassName,\n ...rest\n },\n ref,\n ) => {\n const id = useId();\n\n const pattern =\n inputType === \"digits\"\n ? REGEXP_ONLY_DIGITS\n : inputType === \"chars\"\n ? REGEXP_ONLY_CHARS\n : inputType === \"digits-and-chars\"\n ? REGEXP_ONLY_DIGITS_AND_CHARS\n : undefined;\n\n const helperTextStyles = {\n default: \"text-muted-foreground\",\n success: \"text-success\",\n warning: \"text-warning\",\n error: \"text-error\",\n };\n\n return (\n <div className={cn(\"flex flex-col gap-1.5 relative\", rootClassName)}>\n <Label htmlFor={id}>{label}</Label>\n <SInputOTP\n id={id}\n maxLength={length ?? 4}\n pattern={regexPattern ?? pattern}\n ref={ref}\n {...rest}\n >\n <InputOTPGroup\n className={cn(\n {\n \"gap-2 *:data-[slot=input-otp-slot]:rounded-md *:data-[slot=input-otp-slot]:border\":\n variant === \"outlined\" && gapSize > 0,\n },\n className,\n )}\n style={gapSize > 0 ? { gap: `${gapSize}px` } : undefined}\n >\n {Array.from({ length: length ?? 4 }).map((_, index) => (\n <InputOTPSlot\n key={index}\n index={index}\n size={size}\n state={state ?? undefined}\n variant={variant}\n className={childClassName}\n />\n ))}\n </InputOTPGroup>\n </SInputOTP>\n {helperText && (\n <p className={cn(\"text-xs\", state ? helperTextStyles?.[state] : \"\")}>\n {helperText}\n </p>\n )}\n </div>\n );\n },\n);\n\nexport default InputOTP;\n"],"names":["InputOTP","React","label","inputType","regexPattern","length","size","state","helperText","gapSize","variant","className","rootClassName","childClassName","rest","ref","id","useId","pattern","REGEXP_ONLY_DIGITS","REGEXP_ONLY_CHARS","REGEXP_ONLY_DIGITS_AND_CHARS","helperTextStyles","cn","jsx","Label","SInputOTP","InputOTPGroup","_","index","InputOTPSlot"],"mappings":"kRA+BMA,EAAWC,EAAM,WAIrB,CACE,CAAA,MACEC,EACA,UAAAC,EAAY,SACZ,aAAAC,EACA,OAAAC,EACA,KAAAC,EAAO,SACP,MAAAC,EAAQ,UACR,WAAAC,EACA,QAAAC,EAAU,EACV,QAAAC,EAAU,WACV,UAAAC,EACA,cAAAC,EACA,eAAAC,EACA,GAAGC,CAAA,EAELC,IACG,CACH,MAAMC,EAAKC,EAAAA,MAAA,EAELC,EACJf,IAAc,SACVgB,qBACAhB,IAAc,QACZiB,oBACAjB,IAAc,mBACZkB,EAAAA,6BACA,OAEJC,EAAmB,CACvB,QAAS,wBACT,QAAS,eACT,QAAS,eACT,MAAO,YAAA,EAGT,cACG,MAAA,CAAI,UAAWC,EAAAA,GAAG,iCAAkCX,CAAa,EAChE,SAAA,CAAAY,EAAAA,IAACC,EAAAA,MAAA,CAAM,QAAST,EAAK,SAAAd,EAAM,EAC3BsB,EAAAA,IAACE,EAAAA,SAAA,CACC,GAAAV,EACA,UAAWX,GAAU,EACrB,QAASD,GAAgBc,EACzB,IAAAH,EACC,GAAGD,EAEJ,SAAAU,EAAAA,IAACG,EAAAA,cAAA,CACC,UAAWJ,EAAAA,GACT,CACE,oFACEb,IAAY,YAAcD,EAAU,CAAA,EAExCE,CAAA,EAEF,MAAOF,EAAU,EAAI,CAAE,IAAK,GAAGA,CAAO,MAAS,OAE9C,SAAA,MAAM,KAAK,CAAE,OAAQJ,GAAU,CAAA,CAAG,EAAE,IAAI,CAACuB,EAAGC,IAC3CL,EAAAA,IAACM,EAAAA,aAAA,CAEC,MAAAD,EACA,KAAAvB,EACA,MAAOC,GAAS,OAChB,QAAAG,EACA,UAAWG,CAAA,EALNgB,CAAA,CAOR,CAAA,CAAA,CACH,CAAA,EAEDrB,GACCgB,EAAAA,IAAC,IAAA,CAAE,UAAWD,EAAAA,GAAG,UAAWhB,EAAQe,IAAmBf,CAAK,EAAI,EAAE,EAC/D,SAAAC,CAAA,CACH,CAAA,EAEJ,CAEJ,CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("react/jsx-runtime"),H=require("react"),h=require("motion/react"),k=require("@dsui/ui/index");function V(o){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(o){for(const n in o)if(n!=="default"){const c=Object.getOwnPropertyDescriptor(o,n);Object.defineProperty(e,n,c.get?c:{enumerable:!0,get:()=>o[n]})}}return e.default=o,Object.freeze(e)}const t=V(H),M={slow:{stiffness:100,damping:20,bounce:0},normal:{stiffness:500,damping:50,bounce:0},fast:{stiffness:1e3,damping:80,bounce:0},realtime:{stiffness:2e3,damping:100,bounce:0}},N=t.createContext(void 0),A=()=>{const o=t.useContext(N);if(!o)throw new Error("useCursor must be used within a CursorProvider");return o},I={default:null,pointer:u.jsx("div",{className:"h-5 w-5 rounded-full bg-white/30 border-2 border-white"})};function _({ref:o,children:e,cursorType:n="default",followText:c,showFollow:b,followAlign:R="bottom-right",followSideOffset:i=15,followTransition:y="normal",...w}){const[x,v]=t.useState({x:0,y:0}),[a,C]=t.useState(!1),r=t.useRef(null),p=t.useRef(null);t.useImperativeHandle(o,()=>r.current),t.useEffect(()=>{if(!r.current)return;const d=r.current.parentElement;if(!d)return;getComputedStyle(d).position==="static"&&(d.style.position="relative");const E=g=>{const m=d.getBoundingClientRect();v({x:g.clientX-m.left,y:g.clientY-m.top}),C(!0)},j=()=>C(!1);return d.addEventListener("mousemove",E),d.addEventListener("mouseleave",j),()=>{d.removeEventListener("mousemove",E),d.removeEventListener("mouseleave",j)}},[]);const l=n!==void 0,P=b??c!==void 0,s=M[y];return u.jsx(N.Provider,{value:{cursorPos:x,isActive:a,containerRef:r,cursorRef:p},children:u.jsxs("div",{ref:r,"data-slot":"cursor-provider",...w,children:[e,l&&u.jsx(L,{cursorType:n}),P&&u.jsx(F,{followText:c,align:R,sideOffset:i,transition:s})]})})}function L({ref:o,children:e,cursorType:n="default",className:c,style:b,...R}){const{cursorPos:i,isActive:y,containerRef:w,cursorRef:x}=A();t.useImperativeHandle(o,()=>x.current);const v=h.useMotionValue(0),a=h.useMotionValue(0),r=e||(typeof n=="string"&&n in I?I[n]:n),p=r!==null;return t.useEffect(()=>{const l=w.current?.parentElement;return l&&y&&p&&(l.style.cursor="none"),()=>{l&&(l.style.cursor="default")}},[w,y,p]),t.useEffect(()=>{v.set(i.x),a.set(i.y)},[i,v,a]),r?u.jsx(h.AnimatePresence,{children:y&&u.jsx(h.motion.div,{ref:x,"data-slot":"cursor",className:k.cn("transform-[translate(-50%,-50%)] pointer-events-none z-[9999] absolute",c),style:{top:a,left:v,...b},initial:{scale:0,opacity:0},animate:{scale:1,opacity:1},exit:{scale:0,opacity:0},...R,children:r})}):null}function F({ref:o,sideOffset:e=15,align:n="bottom-right",children:c,className:b,style:R,followText:i,transition:y,transitionPreset:w="normal",...x}){const{cursorPos:v,isActive:a,cursorRef:C}=A(),r=t.useRef(null);t.useImperativeHandle(o,()=>r.current);const p=h.useMotionValue(0),l=h.useMotionValue(0),P=y||M[w],s=h.useSpring(p,P),d=h.useSpring(l,P),E=t.useCallback(()=>{const g=r.current?.getBoundingClientRect(),m=g?.width??0,S=g?.height??0;let f;switch(n){case"center":f={x:m/2,y:S/2};break;case"top":f={x:m/2,y:S+e};break;case"top-left":f={x:m+e,y:S+e};break;case"top-right":f={x:-e,y:S+e};break;case"bottom":f={x:m/2,y:-e};break;case"bottom-left":f={x:m+e,y:-e};break;case"bottom-right":f={x:-e,y:-e};break;case"left":f={x:m+e,y:S/2};break;case"right":f={x:-e,y:S/2};break;default:f={x:0,y:0}}return f},[n,e]);t.useEffect(()=>{const g=E(),m=C.current?.getBoundingClientRect(),S=m?.width??20,f=m?.height??20;p.set(v.x-g.x+S/2),l.set(v.y-g.y+f/2)},[E,v,C,p,l]);const j=()=>c||(i?typeof i=="string"?u.jsx("div",{className:"px-4 py-2 bg-white rounded-md shadow-lg text-sm font-medium",children:i}):i:null);return u.jsx(h.AnimatePresence,{children:a&&u.jsx(h.motion.div,{ref:r,"data-slot":"cursor-follow",className:k.cn("transform-[translate(-50%,-50%)] pointer-events-none z-[9998] absolute",b),style:{top:d,left:s,...R},initial:{scale:0,opacity:0},animate:{scale:1,opacity:1},exit:{scale:0,opacity:0},...x,children:j()})})}function q(o={}){const{cursorType:e="default",followText:n,showFollow:c,align:b="bottom-right",sideOffset:R=15,transitionPreset:i="normal",className:y,style:w}=o,[x,v]=t.useState({x:0,y:0}),[a,C]=t.useState(!1),r=t.useRef(null),p=t.useRef(null);t.useEffect(()=>{if(!r.current)return;const s=r.current;getComputedStyle(s).position==="static"&&(s.style.position="relative");const d=j=>{const g=s.getBoundingClientRect();v({x:j.clientX-g.left,y:j.clientY-g.top}),C(!0)},E=()=>C(!1);return s.addEventListener("mousemove",d),s.addEventListener("mouseleave",E),()=>{s.removeEventListener("mousemove",d),s.removeEventListener("mouseleave",E)}},[]);const l=e!=="default";t.useEffect(()=>{if(!r.current||!a||!l)return;const s=r.current;return s.style.cursor="none",()=>{s.style.cursor="default"}},[a,l]);const P=t.useCallback(()=>a?u.jsxs(N.Provider,{value:{cursorPos:x,isActive:a,containerRef:r,cursorRef:p},children:[u.jsx(L,{cursorType:e}),(c??n!==void 0)&&u.jsx(F,{followText:n,align:b,sideOffset:R,transitionPreset:i})]}):null,[a,x,e,n,c,b,R,i]);return{ref:r,className:k.cn("relative",y),style:{...w},"data-cursor-container":!0,children:s=>u.jsxs(u.Fragment,{children:[s,P()]})}}exports.Cursor=L;exports.CursorFollow=F;exports.CursorProvider=_;exports.TRANSITION_PRESETS=M;exports.useCursor=A;exports.useCursorFollow=q;
|
|
2
|
+
//# sourceMappingURL=CursorFollow.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CursorFollow.cjs","sources":["../../../../src/components/Interactive/CursorFollow.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n motion,\n useMotionValue,\n useSpring,\n AnimatePresence,\n type HTMLMotionProps,\n type SpringOptions,\n} from \"motion/react\";\n\nimport { cn } from \"@dsui/ui/index\";\n\n// Transition presets\ntype TransitionPreset = \"slow\" | \"normal\" | \"fast\" | \"realtime\";\n\nconst TRANSITION_PRESETS: Record<TransitionPreset, SpringOptions> = {\n slow: { stiffness: 100, damping: 20, bounce: 0 },\n normal: { stiffness: 500, damping: 50, bounce: 0 },\n fast: { stiffness: 1000, damping: 80, bounce: 0 },\n realtime: { stiffness: 2000, damping: 100, bounce: 0 },\n};\n\ntype CursorContextType = {\n cursorPos: { x: number; y: number };\n isActive: boolean;\n containerRef: React.RefObject<HTMLDivElement | null>;\n cursorRef: React.RefObject<HTMLDivElement | null>;\n};\n\nconst CursorContext = React.createContext<CursorContextType | undefined>(\n undefined,\n);\n\nconst useCursor = (): CursorContextType => {\n const context = React.useContext(CursorContext);\n if (!context) {\n throw new Error(\"useCursor must be used within a CursorProvider\");\n }\n return context;\n};\n\ntype Align =\n | \"top\"\n | \"top-left\"\n | \"top-right\"\n | \"bottom\"\n | \"bottom-left\"\n | \"bottom-right\"\n | \"left\"\n | \"right\"\n | \"center\";\n\ntype CursorVariantKey = \"default\" | \"pointer\";\ntype CursorVariant = CursorVariantKey | React.ReactNode;\n\n// Predefined cursor variants\nconst cursorVariants: Record<CursorVariantKey, React.ReactNode> = {\n default: null, // Use system cursor\n pointer: (\n <div className=\"h-5 w-5 rounded-full bg-white/30 border-2 border-white\" />\n ),\n};\n\ntype CursorProviderProps = React.ComponentProps<\"div\"> & {\n children: React.ReactNode;\n /** Auto-setup cursor with variant (preset key or custom ReactNode) */\n cursorType?: CursorVariant;\n /** Auto-setup follow element with content */\n followText?: React.ReactNode;\n /** Show follow element (default: true when followText is provided) */\n showFollow?: boolean;\n /** Follow element alignment */\n followAlign?: Align;\n /** Follow element side offset */\n followSideOffset?: number;\n /** Follow element transition preset */\n followTransition?: TransitionPreset;\n};\n\nfunction CursorProvider({\n ref,\n children,\n cursorType = \"default\",\n followText,\n showFollow,\n followAlign = \"bottom-right\",\n followSideOffset = 15,\n followTransition = \"normal\",\n ...props\n}: CursorProviderProps) {\n const [cursorPos, setCursorPos] = React.useState({ x: 0, y: 0 });\n const [isActive, setIsActive] = React.useState(false);\n const containerRef = React.useRef<HTMLDivElement>(null);\n const cursorRef = React.useRef<HTMLDivElement>(null);\n React.useImperativeHandle(ref, () => containerRef.current as HTMLDivElement);\n\n React.useEffect(() => {\n if (!containerRef.current) return;\n\n const parent = containerRef.current.parentElement;\n if (!parent) return;\n\n if (getComputedStyle(parent).position === \"static\") {\n parent.style.position = \"relative\";\n }\n\n const handleMouseMove = (e: MouseEvent) => {\n const rect = parent.getBoundingClientRect();\n setCursorPos({ x: e.clientX - rect.left, y: e.clientY - rect.top });\n setIsActive(true);\n };\n const handleMouseLeave = () => setIsActive(false);\n\n parent.addEventListener(\"mousemove\", handleMouseMove);\n parent.addEventListener(\"mouseleave\", handleMouseLeave);\n\n return () => {\n parent.removeEventListener(\"mousemove\", handleMouseMove);\n parent.removeEventListener(\"mouseleave\", handleMouseLeave);\n };\n }, []);\n\n // Auto-setup: determine if we should show cursor and follow\n const shouldShowCursor = cursorType !== undefined;\n const shouldShowFollowElement = showFollow ?? followText !== undefined;\n\n // Convert preset to SpringOptions\n const transitionConfig = TRANSITION_PRESETS[followTransition];\n\n return (\n <CursorContext.Provider\n value={{ cursorPos, isActive, containerRef, cursorRef }}\n >\n <div ref={containerRef} data-slot=\"cursor-provider\" {...props}>\n {children}\n\n {/* Auto-setup Cursor */}\n {shouldShowCursor && <Cursor cursorType={cursorType} />}\n\n {/* Auto-setup CursorFollow */}\n {shouldShowFollowElement && (\n <CursorFollow\n followText={followText}\n align={followAlign}\n sideOffset={followSideOffset}\n transition={transitionConfig}\n />\n )}\n </div>\n </CursorContext.Provider>\n );\n}\n\ntype CursorProps = HTMLMotionProps<\"div\"> & {\n children?: React.ReactNode;\n cursorType?: CursorVariant;\n};\n\nfunction Cursor({\n ref,\n children,\n cursorType = \"default\",\n className,\n style,\n ...props\n}: CursorProps) {\n const { cursorPos, isActive, containerRef, cursorRef } = useCursor();\n React.useImperativeHandle(ref, () => cursorRef.current as HTMLDivElement);\n\n const x = useMotionValue(0);\n const y = useMotionValue(0);\n\n // Determine which content to render\n const getCursorContent = () => {\n if (children) return children;\n\n // Check if cursorType is a preset key\n if (typeof cursorType === \"string\" && cursorType in cursorVariants) {\n return cursorVariants[cursorType as CursorVariantKey];\n }\n\n // Otherwise treat it as custom ReactNode\n return cursorType;\n };\n\n const cursorContent = getCursorContent();\n\n // Only hide system cursor if we have custom content to show\n const shouldHideSystemCursor = cursorContent !== null;\n\n React.useEffect(() => {\n const parentElement = containerRef.current?.parentElement;\n\n if (parentElement && isActive && shouldHideSystemCursor) {\n parentElement.style.cursor = \"none\";\n }\n\n return () => {\n if (parentElement) parentElement.style.cursor = \"default\";\n };\n }, [containerRef, isActive, shouldHideSystemCursor]);\n\n React.useEffect(() => {\n x.set(cursorPos.x);\n y.set(cursorPos.y);\n }, [cursorPos, x, y]);\n\n // Only render if we have content to show\n if (!cursorContent) return null;\n\n return (\n <AnimatePresence>\n {isActive && (\n <motion.div\n ref={cursorRef}\n data-slot=\"cursor\"\n className={cn(\n \"transform-[translate(-50%,-50%)] pointer-events-none z-[9999] absolute\",\n className,\n )}\n style={{ top: y, left: x, ...style }}\n initial={{ scale: 0, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n exit={{ scale: 0, opacity: 0 }}\n {...props}\n >\n {cursorContent}\n </motion.div>\n )}\n </AnimatePresence>\n );\n}\n\ntype CursorFollowProps = HTMLMotionProps<\"div\"> & {\n sideOffset?: number;\n align?: Align;\n transition?: SpringOptions;\n transitionPreset?: TransitionPreset;\n children?: React.ReactNode;\n followText?: React.ReactNode;\n};\n\nfunction CursorFollow({\n ref,\n sideOffset = 15,\n align = \"bottom-right\",\n children,\n className,\n style,\n followText,\n transition,\n transitionPreset = \"normal\",\n ...props\n}: CursorFollowProps) {\n const { cursorPos, isActive, cursorRef } = useCursor();\n const cursorFollowRef = React.useRef<HTMLDivElement>(null);\n React.useImperativeHandle(\n ref,\n () => cursorFollowRef.current as HTMLDivElement,\n );\n\n const x = useMotionValue(0);\n const y = useMotionValue(0);\n\n // Use custom transition if provided, otherwise use preset\n const finalTransition = transition || TRANSITION_PRESETS[transitionPreset];\n\n const springX = useSpring(x, finalTransition);\n const springY = useSpring(y, finalTransition);\n\n const calculateOffset = React.useCallback(() => {\n const rect = cursorFollowRef.current?.getBoundingClientRect();\n const width = rect?.width ?? 0;\n const height = rect?.height ?? 0;\n\n let newOffset;\n\n switch (align) {\n case \"center\":\n newOffset = { x: width / 2, y: height / 2 };\n break;\n case \"top\":\n newOffset = { x: width / 2, y: height + sideOffset };\n break;\n case \"top-left\":\n newOffset = { x: width + sideOffset, y: height + sideOffset };\n break;\n case \"top-right\":\n newOffset = { x: -sideOffset, y: height + sideOffset };\n break;\n case \"bottom\":\n newOffset = { x: width / 2, y: -sideOffset };\n break;\n case \"bottom-left\":\n newOffset = { x: width + sideOffset, y: -sideOffset };\n break;\n case \"bottom-right\":\n newOffset = { x: -sideOffset, y: -sideOffset };\n break;\n case \"left\":\n newOffset = { x: width + sideOffset, y: height / 2 };\n break;\n case \"right\":\n newOffset = { x: -sideOffset, y: height / 2 };\n break;\n default:\n newOffset = { x: 0, y: 0 };\n }\n\n return newOffset;\n }, [align, sideOffset]);\n\n React.useEffect(() => {\n const offset = calculateOffset();\n const cursorRect = cursorRef.current?.getBoundingClientRect();\n const cursorWidth = cursorRect?.width ?? 20;\n const cursorHeight = cursorRect?.height ?? 20;\n\n x.set(cursorPos.x - offset.x + cursorWidth / 2);\n y.set(cursorPos.y - offset.y + cursorHeight / 2);\n }, [calculateOffset, cursorPos, cursorRef, x, y]);\n\n // Determine follow content based on children or followText\n const getFollowContent = () => {\n if (children) return children;\n\n if (followText) {\n // If followText is a string, wrap it with default styling\n if (typeof followText === \"string\") {\n return (\n <div className=\"px-4 py-2 bg-white rounded-md shadow-lg text-sm font-medium\">\n {followText}\n </div>\n );\n }\n // If it's a ReactNode, render it directly\n return followText;\n }\n\n return null;\n };\n\n return (\n <AnimatePresence>\n {isActive && (\n <motion.div\n ref={cursorFollowRef}\n data-slot=\"cursor-follow\"\n className={cn(\n \"transform-[translate(-50%,-50%)] pointer-events-none z-[9998] absolute\",\n className,\n )}\n style={{ top: springY, left: springX, ...style }}\n initial={{ scale: 0, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n exit={{ scale: 0, opacity: 0 }}\n {...props}\n >\n {getFollowContent()}\n </motion.div>\n )}\n </AnimatePresence>\n );\n}\n\n// Hook for easy cursor setup (Method 2)\ntype useCursorFollowOptions = {\n /** Cursor variant type (preset key or custom ReactNode) */\n cursorType?: CursorVariant;\n /** Follow element content */\n followText?: React.ReactNode;\n /** Show follow element */\n showFollow?: boolean;\n /** Follow element alignment */\n align?: Align;\n /** Follow element side offset */\n sideOffset?: number;\n /** Follow element transition preset */\n transitionPreset?: TransitionPreset;\n /** Additional className for the container */\n className?: string;\n /** Additional style for the container */\n style?: React.CSSProperties;\n};\n\ntype UseCursorFollowType = {\n ref: React.RefObject<HTMLDivElement | null>;\n className: string;\n style: React.CSSProperties;\n \"data-cursor-container\": true;\n children: (originalChildren: React.ReactNode) => React.ReactElement;\n};\n\nfunction useCursorFollow(\n options: useCursorFollowOptions = {},\n): UseCursorFollowType {\n const {\n cursorType = \"default\",\n followText,\n showFollow,\n align = \"bottom-right\",\n sideOffset = 15,\n transitionPreset = \"normal\",\n className,\n style,\n } = options;\n\n const [cursorPos, setCursorPos] = React.useState({ x: 0, y: 0 });\n const [isActive, setIsActive] = React.useState(false);\n const containerRef = React.useRef<HTMLDivElement>(null);\n const cursorRef = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n if (!containerRef.current) return;\n\n const element = containerRef.current;\n if (getComputedStyle(element).position === \"static\") {\n element.style.position = \"relative\";\n }\n\n const handleMouseMove = (e: MouseEvent) => {\n const rect = element.getBoundingClientRect();\n setCursorPos({ x: e.clientX - rect.left, y: e.clientY - rect.top });\n setIsActive(true);\n };\n const handleMouseLeave = () => setIsActive(false);\n\n element.addEventListener(\"mousemove\", handleMouseMove);\n element.addEventListener(\"mouseleave\", handleMouseLeave);\n\n return () => {\n element.removeEventListener(\"mousemove\", handleMouseMove);\n element.removeEventListener(\"mouseleave\", handleMouseLeave);\n };\n }, []);\n\n // Only hide system cursor if cursorType is not 'default'\n const shouldHideSystemCursor = cursorType !== \"default\";\n\n React.useEffect(() => {\n if (!containerRef.current || !isActive || !shouldHideSystemCursor) return;\n const element = containerRef.current;\n element.style.cursor = \"none\";\n return () => {\n element.style.cursor = \"default\";\n };\n }, [isActive, shouldHideSystemCursor]);\n\n // Render function for cursor elements\n const renderCursorElements = React.useCallback(() => {\n if (!isActive) return null;\n\n return (\n <CursorContext.Provider\n value={{ cursorPos, isActive, containerRef, cursorRef }}\n >\n <Cursor cursorType={cursorType} />\n {(showFollow ?? followText !== undefined) && (\n <CursorFollow\n followText={followText}\n align={align}\n sideOffset={sideOffset}\n transitionPreset={transitionPreset}\n />\n )}\n </CursorContext.Provider>\n );\n }, [\n isActive,\n cursorPos,\n cursorType,\n followText,\n showFollow,\n align,\n sideOffset,\n transitionPreset,\n ]);\n\n // Return props that can be spread on the container element\n return {\n ref: containerRef,\n className: cn(\"relative\", className),\n style: { ...style },\n \"data-cursor-container\": true as const,\n children: (originalChildren: React.ReactNode) => (\n <>\n {originalChildren}\n {renderCursorElements()}\n </>\n ),\n };\n}\n\nexport {\n CursorProvider,\n Cursor,\n CursorFollow,\n useCursor,\n useCursorFollow,\n TRANSITION_PRESETS,\n type CursorContextType,\n type CursorProviderProps,\n type CursorProps,\n type CursorFollowProps,\n type CursorVariant,\n type CursorVariantKey,\n type Align,\n type useCursorFollowOptions,\n type TransitionPreset,\n};\n"],"names":["TRANSITION_PRESETS","CursorContext","React","useCursor","context","cursorVariants","jsx","CursorProvider","ref","children","cursorType","followText","showFollow","followAlign","followSideOffset","followTransition","props","cursorPos","setCursorPos","isActive","setIsActive","containerRef","cursorRef","parent","handleMouseMove","e","rect","handleMouseLeave","shouldShowCursor","shouldShowFollowElement","transitionConfig","Cursor","CursorFollow","className","style","x","useMotionValue","y","cursorContent","shouldHideSystemCursor","parentElement","AnimatePresence","motion","cn","sideOffset","align","transition","transitionPreset","cursorFollowRef","finalTransition","springX","useSpring","springY","calculateOffset","width","height","newOffset","offset","cursorRect","cursorWidth","cursorHeight","getFollowContent","useCursorFollow","options","element","renderCursorElements","jsxs","originalChildren","Fragment"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const v=require("react/jsx-runtime"),g=require("@dsui/ui/index"),H=require("class-variance-authority"),G=require("react");function J(o){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(o){for(const s in o)if(s!=="default"){const n=Object.getOwnPropertyDescriptor(o,s);Object.defineProperty(e,s,n.get?n:{enumerable:!0,get:()=>o[s]})}}return e.default=o,Object.freeze(e)}const u=J(G),L="Marquee",Q="MarqueeContent";function U(){const o=new Set;let e=null;const s=new Map,n=new Map,d=typeof ResizeObserver<"u";let c=!1;const b=new WeakMap;function t(){c||(c=!0,queueMicrotask(()=>{c=!1;for(const r of o)r()}))}function C(){e&&(e.disconnect(),e=null),s.clear(),n.clear()}function q(r){return o.add(r),()=>{o.delete(r),o.size===0&&C()}}function p(r,a,f){if(!r||!a)return null;const i=s.get(r),l=s.get(a);if(!i||!l)return null;const m=f==="vertical"?i.height:i.width,R=f==="vertical"?l.height:l.width;let x=b.get(r);x||(x=new WeakMap,b.set(r,x));let h=x.get(a);h||(h={horizontal:{rootSize:-1,contentSize:-1},vertical:{rootSize:-1,contentSize:-1}},x.set(a,h));const w=h[f];if(w.rootSize===m&&w.contentSize===R)return w;const z={rootSize:m,contentSize:R};return h[f]=z,z}function S(r,a){if(!d||!r||!a)return;e||(e=new ResizeObserver(R=>{let x=!1;for(const h of R){const w=h.target,{width:z,height:N}=h.contentRect,O=s.get(w);(!O||O.width!==z||O.height!==N)&&(s.set(w,{width:z,height:N}),x=!0)}x&&t()})),n.set(r,(n.get(r)??0)+1),n.set(a,(n.get(a)??0)+1),e.observe(r),e.observe(a);const f=r.getBoundingClientRect(),i=a.getBoundingClientRect(),l={width:f.width,height:f.height},m={width:i.width,height:i.height};s.set(r,l),s.set(a,m),l.width>0&&l.height>0&&m.width>0&&m.height>0&&t()}function y(r,a){if(!e||!r||!a)return;const f=(n.get(r)??1)-1,i=(n.get(a)??1)-1;f<=0?(e.unobserve(r),s.delete(r),n.delete(r)):n.set(r,f),i<=0?(e.unobserve(a),s.delete(a),n.delete(a)):n.set(a,i)}return{subscribe:q,getSnapshot:p,observe:S,unobserve:y}}const k=U();function I(o,e,s){const n=u.useCallback(c=>k.subscribe(c),[]),d=u.useCallback(()=>k.getSnapshot(o.current,e.current,s),[o,e,s]);return u.useSyncExternalStore(n,d,d)}const X=u.createContext(void 0);function Y(o){const e=u.useContext(X);return o??e??"ltr"}const _=u.createContext(null);function Z(o){const e=u.useContext(_);if(!e)throw new Error(`\`${o}\` must be used within \`${L}\``);return e}function F(o){const{side:e="left",dir:s,speed:n=50,delay:d=0,loopCount:c=0,gap:b="1rem",asChild:t,autoFill:C=!1,pauseOnHover:q=!1,pauseOnKeyboard:p=!1,reverse:S=!1,className:y,style:r,ref:a,...f}=o,i=e==="top"||e==="bottom"?"vertical":"horizontal",l=Y(s),m=u.useRef(null),R=u.useRef(null),x=g.useComposedRefs(a,m),[h,w]=u.useState(!1),z=u.useCallback(M=>{p&&M.key===" "&&(M.preventDefault(),w(D=>!D))},[p]),N=I(m,R,i),O=u.useMemo(()=>{const M=Math.max(.001,n);if(!N)return(C?1e3:2e3)/M;const{rootSize:D,contentSize:j}=N;if(C){const P=j<D?Math.ceil(D/j):1;return j*P/M}else return j<D?D/M:j/M},[N,n,C]),K=u.useMemo(()=>({"--marquee-duration":`${O}s`,"--marquee-gap":b,"--marquee-delay":`${d}s`,"--marquee-loop-count":c===0||c===1/0?"infinite":c.toString(),...r}),[O,b,d,c,r]),B=u.useMemo(()=>({side:e,orientation:i,dir:l,speed:n,loopCount:c,contentRef:R,rootRef:m,autoFill:C,paused:h,pauseOnHover:q,pauseOnKeyboard:p,reverse:S}),[e,i,l,n,c,C,h,q,p,S]),W=t?g.Slot:"div";return v.jsx(_.Provider,{value:B,children:v.jsx("div",{"data-slot":"marquee-wrapper",className:"grid",children:v.jsx(W,{role:"marquee","aria-live":"off","data-orientation":i,"data-slot":"marquee",dir:l,tabIndex:p?0:void 0,...f,ref:x,className:g.cn("relative flex overflow-hidden motion-reduce:animate-none",i==="vertical"&&"h-full flex-col",i==="horizontal"&&"w-full",h&&"[&_*]:[animation-play-state:paused]",q&&"group",p&&"rounded-md focus-visible:border-ring focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50",y),style:K,onKeyDown:p?z:void 0})})})}const V=H.cva("flex min-w-full shrink-0 gap-(--marquee-gap)",{variants:{side:{left:"animate-marquee-left",right:"animate-marquee-right",top:"min-h-full min-w-auto animate-marquee-up flex-col",bottom:"min-h-full min-w-auto animate-marquee-down flex-col"},dir:{ltr:"",rtl:""},pauseOnHover:{true:"group-hover:[animation-play-state:paused]",false:""},reverse:{true:"[animation-direction:reverse]",false:""}},compoundVariants:[{side:"left",dir:"rtl",className:"animate-marquee-left-rtl"},{side:"right",dir:"rtl",className:"animate-marquee-right-rtl"}],defaultVariants:{side:"left",dir:"ltr",pauseOnHover:!1,reverse:!1}});function T(o){const{className:e,asChild:s,ref:n,children:d,style:c,...b}=o,t=Z(Q),C=g.useComposedRefs(n,t.contentRef),q=t.orientation==="vertical",p=t.dir==="rtl",S=I(t.rootRef,t.contentRef,t.orientation);u.useEffect(()=>{if(t.rootRef.current&&t.contentRef.current)return k.observe(t.rootRef.current,t.contentRef.current),()=>{k.unobserve(t.rootRef.current,t.contentRef.current)}},[t.rootRef,t.contentRef]);const y=u.useMemo(()=>{if(!t.autoFill||!S)return 1;const{rootSize:i,contentSize:l}=S;return l===0?1:l<i?Math.ceil(i/l):1},[t.autoFill,S]),r=u.useCallback(i=>Array.from({length:Math.max(0,i)}).map((l,m)=>v.jsx(u.Fragment,{children:d},m)),[d]),a=u.useMemo(()=>({...c,animationDuration:"var(--marquee-duration)",animationDelay:"var(--marquee-delay)",animationIterationCount:"var(--marquee-loop-count)",animationDirection:t.reverse?"reverse":"normal"}),[c,t.reverse]),f=s?g.Slot:"div";return v.jsxs(v.Fragment,{children:[v.jsxs(f,{"data-orientation":t.orientation,"data-slot":"marquee-content",...b,style:a,className:g.cn(V({side:t.side,dir:t.dir,pauseOnHover:t.pauseOnHover,reverse:t.reverse,className:e}),q&&"flex-col",q?"mb-(--marquee-gap)":p?"ml-(--marquee-gap)":"mr-(--marquee-gap)"),children:[v.jsx("div",{ref:C,className:g.cn("flex shrink-0 gap-(--marquee-gap)",q&&"flex-col"),children:d}),r(y-1)]}),v.jsx(f,{role:"presentation","aria-hidden":"true",...b,style:a,className:g.cn(V({side:t.side,dir:t.dir,pauseOnHover:t.pauseOnHover,reverse:t.reverse,className:e}),q&&"flex-col"),children:r(y)})]})}function A(o){const{className:e,asChild:s,...n}=o,d=s?g.Slot:"div";return v.jsx(d,{"data-slot":"marquee-item",...n,className:g.cn("shrink-0",e)})}const E=H.cva("pointer-events-none absolute z-10",{variants:{side:{left:"top-0 left-0 h-full bg-gradient-to-r from-background to-transparent",right:"top-0 right-0 h-full bg-gradient-to-l from-background to-transparent",top:"top-0 left-0 w-full bg-gradient-to-b from-background to-transparent",bottom:"bottom-0 left-0 w-full bg-gradient-to-t from-background to-transparent"},size:{default:"",sm:"",lg:""}},compoundVariants:[{side:["left","right"],size:"default",className:"w-1/4"},{side:["left","right"],size:"sm",className:"w-1/6"},{side:["left","right"],size:"lg",className:"w-1/3"},{side:["top","bottom"],size:"default",className:"h-1/4"},{side:["top","bottom"],size:"sm",className:"h-1/6"},{side:["top","bottom"],size:"lg",className:"h-1/3"}],defaultVariants:{size:"default"}});function $(o){const{side:e,size:s,className:n,asChild:d,...c}=o,b=d?g.Slot:"div";return v.jsx(b,{"data-size":s,"data-slot":"marquee-edge",...c,className:g.cn(E({side:e,size:s,className:n}))})}exports.Content=T;exports.Edge=$;exports.Item=A;exports.Marquee=F;exports.MarqueeContent=T;exports.MarqueeEdge=$;exports.MarqueeItem=A;exports.Root=F;
|
|
2
|
+
//# sourceMappingURL=Marquee.cjs.map
|