@sth87/shadcn-design-system 0.0.35 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -2
- package/dist/AI_CONTEXT.md +212 -214
- package/dist/cjs/components/Accordion/Accordion.cjs +1 -1
- package/dist/cjs/components/Accordion/Accordion.cjs.map +1 -1
- package/dist/cjs/components/Avatar/Avatar.cjs +1 -1
- package/dist/cjs/components/Avatar/Avatar.cjs.map +1 -1
- package/dist/cjs/components/Badge/Badge.cjs +1 -1
- package/dist/cjs/components/Badge/Badge.cjs.map +1 -1
- package/dist/cjs/components/Breadcrumb/Breadcrumb.cjs +1 -1
- package/dist/cjs/components/Breadcrumb/Breadcrumb.cjs.map +1 -1
- package/dist/cjs/components/Button/Button.cjs +1 -1
- package/dist/cjs/components/Button/Button.cjs.map +1 -1
- package/dist/cjs/components/Calendar/Calendar.cjs +1 -1
- package/dist/cjs/components/Calendar/Calendar.cjs.map +1 -1
- package/dist/cjs/components/Carousel/Carousel.cjs +1 -1
- package/dist/cjs/components/Carousel/Carousel.cjs.map +1 -1
- package/dist/cjs/components/Checkbox/Checkbox.cjs +1 -1
- package/dist/cjs/components/Checkbox/Checkbox.cjs.map +1 -1
- package/dist/cjs/components/Collapsible/Collapsible.cjs +1 -1
- package/dist/cjs/components/Collapsible/Collapsible.cjs.map +1 -1
- package/dist/cjs/components/Command/Command.cjs +1 -1
- package/dist/cjs/components/Command/Command.cjs.map +1 -1
- package/dist/cjs/components/ContextMenu/ContextMenu.cjs +1 -1
- package/dist/cjs/components/ContextMenu/ContextMenu.cjs.map +1 -1
- package/dist/cjs/components/Cropper/Cropper.cjs +1 -1
- package/dist/cjs/components/Cropper/Cropper.cjs.map +1 -1
- package/dist/cjs/components/DatePicker/DatePicker.cjs +1 -1
- package/dist/cjs/components/DatePicker/DatePicker.cjs.map +1 -1
- package/dist/cjs/components/DatePicker/RangePicker.cjs +1 -1
- package/dist/cjs/components/DatePicker/RangePicker.cjs.map +1 -1
- package/dist/cjs/components/DatePicker/TimePicker.cjs +1 -1
- package/dist/cjs/components/DatePicker/TimePicker.cjs.map +1 -1
- package/dist/cjs/components/Dialog/Dialog.cjs +1 -1
- package/dist/cjs/components/Dialog/Dialog.cjs.map +1 -1
- package/dist/cjs/components/DropdownMenu/DropdownMenu.cjs +1 -1
- package/dist/cjs/components/DropdownMenu/DropdownMenu.cjs.map +1 -1
- package/dist/cjs/components/FloatLabel.cjs +1 -1
- package/dist/cjs/components/FloatLabel.cjs.map +1 -1
- package/dist/cjs/components/Glass/Glass.cjs +1 -1
- package/dist/cjs/components/Glass/Glass.cjs.map +1 -1
- package/dist/cjs/components/ImageViewer/ImageViewer.cjs +1 -1
- package/dist/cjs/components/ImageViewer/ImageViewer.cjs.map +1 -1
- package/dist/cjs/components/Input/Input.cjs +1 -1
- package/dist/cjs/components/Input/Input.cjs.map +1 -1
- package/dist/cjs/components/InputOTP/InputOTP.cjs +1 -1
- package/dist/cjs/components/InputOTP/InputOTP.cjs.map +1 -1
- package/dist/cjs/components/Interactive/CursorFollow.cjs +1 -1
- package/dist/cjs/components/Interactive/CursorFollow.cjs.map +1 -1
- package/dist/cjs/components/Marquee/Marquee.cjs +1 -1
- package/dist/cjs/components/Marquee/Marquee.cjs.map +1 -1
- package/dist/cjs/components/Pagination/Pagination.cjs +1 -1
- package/dist/cjs/components/Pagination/Pagination.cjs.map +1 -1
- package/dist/cjs/components/QrCode/QrCode.cjs +1 -1
- package/dist/cjs/components/QrCode/QrCode.cjs.map +1 -1
- package/dist/cjs/components/Radio/Radio.cjs +1 -1
- package/dist/cjs/components/Radio/Radio.cjs.map +1 -1
- package/dist/cjs/components/Rate/Rate.cjs +1 -1
- package/dist/cjs/components/Rate/Rate.cjs.map +1 -1
- package/dist/cjs/components/Resizable/Resizable.cjs +1 -1
- package/dist/cjs/components/Resizable/Resizable.cjs.map +1 -1
- package/dist/cjs/components/ScrollArea/ScrollArea.cjs +1 -1
- package/dist/cjs/components/ScrollArea/ScrollArea.cjs.map +1 -1
- package/dist/cjs/components/Select/Select.cjs +1 -1
- package/dist/cjs/components/Select/Select.cjs.map +1 -1
- package/dist/cjs/components/Sheet/Sheet.cjs +2 -2
- package/dist/cjs/components/Sheet/Sheet.cjs.map +1 -1
- package/dist/cjs/components/Slider/Slider.cjs +1 -1
- package/dist/cjs/components/Slider/Slider.cjs.map +1 -1
- package/dist/cjs/components/Stepper/Stepper.cjs +1 -1
- package/dist/cjs/components/Stepper/Stepper.cjs.map +1 -1
- package/dist/cjs/components/Stepper/StepperWrapper.cjs +1 -1
- package/dist/cjs/components/Stepper/StepperWrapper.cjs.map +1 -1
- package/dist/cjs/components/Switch/Switch.cjs +1 -1
- package/dist/cjs/components/Switch/Switch.cjs.map +1 -1
- package/dist/cjs/components/Table/TableFilter/data-table-date-filter.cjs +1 -1
- package/dist/cjs/components/Table/TableFilter/data-table-date-filter.cjs.map +1 -1
- package/dist/cjs/components/Table/TableFilter/data-table-filter-popover.cjs +1 -1
- package/dist/cjs/components/Table/TableFilter/data-table-filter-popover.cjs.map +1 -1
- package/dist/cjs/components/Table/TableFilter/data-table-slider-filter.cjs +1 -1
- package/dist/cjs/components/Table/TableFilter/data-table-slider-filter.cjs.map +1 -1
- package/dist/cjs/components/Table/data-table-column-header.cjs +1 -1
- package/dist/cjs/components/Table/data-table-column-header.cjs.map +1 -1
- package/dist/cjs/components/Table/data-table-pagination.cjs +1 -1
- package/dist/cjs/components/Table/data-table-pagination.cjs.map +1 -1
- package/dist/cjs/components/Table/data-table.cjs +1 -1
- package/dist/cjs/components/Table/data-table.cjs.map +1 -1
- package/dist/cjs/components/Tabs/Tabs.cjs +1 -1
- package/dist/cjs/components/Tabs/Tabs.cjs.map +1 -1
- package/dist/cjs/components/Tabs/classes.cjs +1 -1
- package/dist/cjs/components/Tabs/classes.cjs.map +1 -1
- package/dist/cjs/components/Textarea/Textarea.cjs +1 -1
- package/dist/cjs/components/Textarea/Textarea.cjs.map +1 -1
- package/dist/cjs/components/TimeGridView.cjs +1 -1
- package/dist/cjs/components/TimeGridView.cjs.map +1 -1
- package/dist/cjs/components/Toast/Toast.cjs +1 -1
- package/dist/cjs/components/Toast/Toast.cjs.map +1 -1
- package/dist/cjs/components/Tooltip/Tooltip.cjs +1 -1
- package/dist/cjs/components/Tooltip/Tooltip.cjs.map +1 -1
- package/dist/cjs/components/Tour/Tour.cjs +1 -1
- package/dist/cjs/components/Tour/Tour.cjs.map +1 -1
- package/dist/cjs/components/Tour/TourWrapper.cjs +1 -1
- package/dist/cjs/components/Tour/TourWrapper.cjs.map +1 -1
- package/dist/cjs/components/Upload/Upload.cjs +3 -3
- package/dist/cjs/components/Upload/Upload.cjs.map +1 -1
- package/dist/cjs/components/WheelColumn.cjs +1 -1
- package/dist/cjs/components/WheelColumn.cjs.map +1 -1
- package/dist/cjs/lib/TextAnimation/BlurText.cjs +1 -1
- package/dist/cjs/lib/TextAnimation/BlurText.cjs.map +1 -1
- package/dist/cjs/lib/TextAnimation/CircularText.cjs +1 -1
- package/dist/cjs/lib/TextAnimation/CircularText.cjs.map +1 -1
- package/dist/cjs/lib/TextAnimation/FlipWords.cjs +1 -1
- package/dist/cjs/lib/TextAnimation/FlipWords.cjs.map +1 -1
- package/dist/cjs/lib/TextAnimation/GradientText.cjs +1 -1
- package/dist/cjs/lib/TextAnimation/GradientText.cjs.map +1 -1
- package/dist/cjs/lib/TextAnimation/RollingText.cjs +1 -1
- package/dist/cjs/lib/TextAnimation/RollingText.cjs.map +1 -1
- package/dist/cjs/lib/TextAnimation/RotatingText.cjs +1 -1
- package/dist/cjs/lib/TextAnimation/RotatingText.cjs.map +1 -1
- package/dist/cjs/lib/TextAnimation/ShimmeringText.cjs +1 -1
- package/dist/cjs/lib/TextAnimation/ShimmeringText.cjs.map +1 -1
- package/dist/cjs/lib/TextAnimation/TextGenerateEffect.cjs +1 -1
- package/dist/cjs/lib/TextAnimation/TextGenerateEffect.cjs.map +1 -1
- package/dist/cjs/lib/TextAnimation/TextHoverEffect.cjs +1 -1
- package/dist/cjs/lib/TextAnimation/TextHoverEffect.cjs.map +1 -1
- package/dist/cjs/lib/TextAnimation/TextPressureEffect.cjs +2 -2
- package/dist/cjs/lib/TextAnimation/TextPressureEffect.cjs.map +1 -1
- package/dist/cjs/lib/TextAnimation/TypingText.cjs +1 -1
- package/dist/cjs/lib/TextAnimation/TypingText.cjs.map +1 -1
- package/dist/cjs/lib/TextAnimation/WritingText.cjs +1 -1
- package/dist/cjs/lib/TextAnimation/WritingText.cjs.map +1 -1
- package/dist/cjs/node_modules/.pnpm/nuqs@2.8.0_next@15.5.9_@babel_core@7.28.5_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1/node_modules/nuqs/dist/server.cjs.map +1 -0
- package/dist/cjs/packages/ui/src/components/accordion.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/accordion.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/alert-dialog.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/alert-dialog.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/avatar.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/avatar.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/badge.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/badge.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/breadcrumb.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/breadcrumb.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/button-group.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/button-group.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/button.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/button.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/calendar.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/calendar.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/checkbox.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/checkbox.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/combobox.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/combobox.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/command.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/command.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/context-menu.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/context-menu.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/dialog.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/dialog.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/drawer.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/drawer.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/dropdown-menu.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/dropdown-menu.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/input-otp.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/input-otp.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/input.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/input.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/label.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/label.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/pagination.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/pagination.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/popover.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/popover.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/radio-group.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/radio-group.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/resizable.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/resizable.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/scroll-area.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/scroll-area.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/select.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/select.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/separator.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/separator.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/sheet.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/sheet.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/sidebar.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/sidebar.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/skeleton.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/skeleton.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/switch.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/switch.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/table.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/table.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/tabs.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/tabs.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/textarea.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/textarea.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/toggle.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/toggle.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/tooltip.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/tooltip.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/tree-view.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/tree-view.cjs.map +1 -1
- package/dist/cjs/styles/index.css +1 -1
- package/dist/cjs/utils/animations.cjs +1 -1
- package/dist/cjs/utils/animations.cjs.map +1 -1
- package/dist/cjs/utils/css.cjs +1 -1
- package/dist/cjs/utils/css.cjs.map +1 -1
- package/dist/cjs/utils/parsers.cjs +1 -1
- package/dist/cjs/utils/parsers.cjs.map +1 -1
- package/dist/esm/components/Accordion/Accordion.js +60 -60
- package/dist/esm/components/Accordion/Accordion.js.map +1 -1
- package/dist/esm/components/Avatar/Avatar.js +40 -40
- package/dist/esm/components/Avatar/Avatar.js.map +1 -1
- package/dist/esm/components/Badge/Badge.js +1 -1
- package/dist/esm/components/Badge/Badge.js.map +1 -1
- package/dist/esm/components/Breadcrumb/Breadcrumb.js +36 -36
- package/dist/esm/components/Breadcrumb/Breadcrumb.js.map +1 -1
- package/dist/esm/components/Button/Button.js +9 -9
- package/dist/esm/components/Button/Button.js.map +1 -1
- package/dist/esm/components/Calendar/Calendar.js +4 -4
- package/dist/esm/components/Calendar/Calendar.js.map +1 -1
- package/dist/esm/components/Carousel/Carousel.js +165 -165
- package/dist/esm/components/Carousel/Carousel.js.map +1 -1
- package/dist/esm/components/Checkbox/Checkbox.js +26 -26
- package/dist/esm/components/Checkbox/Checkbox.js.map +1 -1
- package/dist/esm/components/Collapsible/Collapsible.js +43 -43
- package/dist/esm/components/Collapsible/Collapsible.js.map +1 -1
- package/dist/esm/components/Command/Command.js +28 -28
- package/dist/esm/components/Command/Command.js.map +1 -1
- package/dist/esm/components/ContextMenu/ContextMenu.js +11 -11
- package/dist/esm/components/ContextMenu/ContextMenu.js.map +1 -1
- package/dist/esm/components/Cropper/Cropper.js +132 -132
- package/dist/esm/components/Cropper/Cropper.js.map +1 -1
- package/dist/esm/components/DatePicker/DatePicker.js +75 -75
- package/dist/esm/components/DatePicker/DatePicker.js.map +1 -1
- package/dist/esm/components/DatePicker/RangePicker.js +136 -136
- package/dist/esm/components/DatePicker/RangePicker.js.map +1 -1
- package/dist/esm/components/DatePicker/TimePicker.js +150 -150
- package/dist/esm/components/DatePicker/TimePicker.js.map +1 -1
- package/dist/esm/components/Dialog/Dialog.js +114 -114
- package/dist/esm/components/Dialog/Dialog.js.map +1 -1
- package/dist/esm/components/DropdownMenu/DropdownMenu.js +13 -13
- package/dist/esm/components/DropdownMenu/DropdownMenu.js.map +1 -1
- package/dist/esm/components/FloatLabel.js +44 -44
- package/dist/esm/components/FloatLabel.js.map +1 -1
- package/dist/esm/components/Glass/Glass.js +15 -15
- package/dist/esm/components/Glass/Glass.js.map +1 -1
- package/dist/esm/components/ImageViewer/ImageViewer.js +53 -53
- package/dist/esm/components/ImageViewer/ImageViewer.js.map +1 -1
- package/dist/esm/components/Input/Input.js +104 -104
- package/dist/esm/components/Input/Input.js.map +1 -1
- package/dist/esm/components/InputOTP/InputOTP.js +16 -16
- package/dist/esm/components/InputOTP/InputOTP.js.map +1 -1
- package/dist/esm/components/Interactive/CursorFollow.js +49 -49
- package/dist/esm/components/Interactive/CursorFollow.js.map +1 -1
- package/dist/esm/components/Marquee/Marquee.js +130 -130
- package/dist/esm/components/Marquee/Marquee.js.map +1 -1
- package/dist/esm/components/Pagination/Pagination.js +68 -68
- package/dist/esm/components/Pagination/Pagination.js.map +1 -1
- package/dist/esm/components/QrCode/QrCode.js +37 -37
- package/dist/esm/components/QrCode/QrCode.js.map +1 -1
- package/dist/esm/components/Radio/Radio.js +16 -16
- package/dist/esm/components/Radio/Radio.js.map +1 -1
- package/dist/esm/components/Rate/Rate.js +62 -62
- package/dist/esm/components/Rate/Rate.js.map +1 -1
- package/dist/esm/components/Resizable/Resizable.js +6 -6
- package/dist/esm/components/Resizable/Resizable.js.map +1 -1
- package/dist/esm/components/ScrollArea/ScrollArea.js +10 -10
- package/dist/esm/components/ScrollArea/ScrollArea.js.map +1 -1
- package/dist/esm/components/Select/Select.js +64 -64
- package/dist/esm/components/Select/Select.js.map +1 -1
- package/dist/esm/components/Sheet/Sheet.js +21 -21
- package/dist/esm/components/Sheet/Sheet.js.map +1 -1
- package/dist/esm/components/Slider/Slider.js +54 -54
- package/dist/esm/components/Slider/Slider.js.map +1 -1
- package/dist/esm/components/Stepper/Stepper.js +198 -198
- package/dist/esm/components/Stepper/Stepper.js.map +1 -1
- package/dist/esm/components/Stepper/StepperWrapper.js +15 -15
- package/dist/esm/components/Stepper/StepperWrapper.js.map +1 -1
- package/dist/esm/components/Switch/Switch.js +38 -38
- package/dist/esm/components/Switch/Switch.js.map +1 -1
- package/dist/esm/components/Table/TableFilter/data-table-date-filter.js +37 -37
- package/dist/esm/components/Table/TableFilter/data-table-date-filter.js.map +1 -1
- package/dist/esm/components/Table/TableFilter/data-table-filter-popover.js +25 -25
- package/dist/esm/components/Table/TableFilter/data-table-filter-popover.js.map +1 -1
- package/dist/esm/components/Table/TableFilter/data-table-slider-filter.js +64 -64
- package/dist/esm/components/Table/TableFilter/data-table-slider-filter.js.map +1 -1
- package/dist/esm/components/Table/data-table-column-header.js +18 -18
- package/dist/esm/components/Table/data-table-column-header.js.map +1 -1
- package/dist/esm/components/Table/data-table-pagination.js +21 -21
- package/dist/esm/components/Table/data-table-pagination.js.map +1 -1
- package/dist/esm/components/Table/data-table.js +18 -18
- package/dist/esm/components/Table/data-table.js.map +1 -1
- package/dist/esm/components/Tabs/Tabs.js +242 -242
- package/dist/esm/components/Tabs/Tabs.js.map +1 -1
- package/dist/esm/components/Tabs/classes.js +51 -51
- package/dist/esm/components/Tabs/classes.js.map +1 -1
- package/dist/esm/components/Textarea/Textarea.js +49 -49
- package/dist/esm/components/Textarea/Textarea.js.map +1 -1
- package/dist/esm/components/TimeGridView.js +12 -12
- package/dist/esm/components/TimeGridView.js.map +1 -1
- package/dist/esm/components/Toast/Toast.js +45 -45
- package/dist/esm/components/Toast/Toast.js.map +1 -1
- package/dist/esm/components/Tooltip/Tooltip.js +19 -19
- package/dist/esm/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/esm/components/Tour/Tour.js +11 -11
- package/dist/esm/components/Tour/Tour.js.map +1 -1
- package/dist/esm/components/Tour/TourWrapper.js +15 -15
- package/dist/esm/components/Tour/TourWrapper.js.map +1 -1
- package/dist/esm/components/Upload/Upload.js +405 -405
- package/dist/esm/components/Upload/Upload.js.map +1 -1
- package/dist/esm/components/WheelColumn.js +47 -47
- package/dist/esm/components/WheelColumn.js.map +1 -1
- package/dist/esm/lib/TextAnimation/BlurText.js +18 -18
- package/dist/esm/lib/TextAnimation/BlurText.js.map +1 -1
- package/dist/esm/lib/TextAnimation/CircularText.js +7 -7
- package/dist/esm/lib/TextAnimation/CircularText.js.map +1 -1
- package/dist/esm/lib/TextAnimation/FlipWords.js +21 -21
- package/dist/esm/lib/TextAnimation/FlipWords.js.map +1 -1
- package/dist/esm/lib/TextAnimation/GradientText.js +4 -4
- package/dist/esm/lib/TextAnimation/GradientText.js.map +1 -1
- package/dist/esm/lib/TextAnimation/RollingText.js +24 -24
- package/dist/esm/lib/TextAnimation/RollingText.js.map +1 -1
- package/dist/esm/lib/TextAnimation/RotatingText.js +6 -6
- package/dist/esm/lib/TextAnimation/RotatingText.js.map +1 -1
- package/dist/esm/lib/TextAnimation/ShimmeringText.js +9 -9
- package/dist/esm/lib/TextAnimation/ShimmeringText.js.map +1 -1
- package/dist/esm/lib/TextAnimation/TextGenerateEffect.js +14 -14
- package/dist/esm/lib/TextAnimation/TextGenerateEffect.js.map +1 -1
- package/dist/esm/lib/TextAnimation/TextHoverEffect.js +9 -9
- package/dist/esm/lib/TextAnimation/TextHoverEffect.js.map +1 -1
- package/dist/esm/lib/TextAnimation/TextPressureEffect.js +3 -3
- package/dist/esm/lib/TextAnimation/TextPressureEffect.js.map +1 -1
- package/dist/esm/lib/TextAnimation/TypingText.js +17 -17
- package/dist/esm/lib/TextAnimation/TypingText.js.map +1 -1
- package/dist/esm/lib/TextAnimation/WritingText.js +10 -10
- package/dist/esm/lib/TextAnimation/WritingText.js.map +1 -1
- package/dist/esm/node_modules/.pnpm/nuqs@2.8.0_next@15.5.9_@babel_core@7.28.5_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1/node_modules/nuqs/dist/server.js.map +1 -0
- package/dist/esm/packages/ui/src/components/accordion.js +31 -31
- package/dist/esm/packages/ui/src/components/accordion.js.map +1 -1
- package/dist/esm/packages/ui/src/components/alert-dialog.js +33 -33
- package/dist/esm/packages/ui/src/components/alert-dialog.js.map +1 -1
- package/dist/esm/packages/ui/src/components/avatar.js +20 -20
- package/dist/esm/packages/ui/src/components/avatar.js.map +1 -1
- package/dist/esm/packages/ui/src/components/badge.js +53 -53
- package/dist/esm/packages/ui/src/components/badge.js.map +1 -1
- package/dist/esm/packages/ui/src/components/breadcrumb.js +20 -20
- package/dist/esm/packages/ui/src/components/breadcrumb.js.map +1 -1
- package/dist/esm/packages/ui/src/components/button-group.js +31 -31
- package/dist/esm/packages/ui/src/components/button-group.js.map +1 -1
- package/dist/esm/packages/ui/src/components/button.js +90 -90
- package/dist/esm/packages/ui/src/components/button.js.map +1 -1
- package/dist/esm/packages/ui/src/components/calendar.js +94 -94
- package/dist/esm/packages/ui/src/components/calendar.js.map +1 -1
- package/dist/esm/packages/ui/src/components/checkbox.js +47 -47
- package/dist/esm/packages/ui/src/components/checkbox.js.map +1 -1
- package/dist/esm/packages/ui/src/components/combobox.js +64 -64
- package/dist/esm/packages/ui/src/components/combobox.js.map +1 -1
- package/dist/esm/packages/ui/src/components/command.js +77 -77
- package/dist/esm/packages/ui/src/components/command.js.map +1 -1
- package/dist/esm/packages/ui/src/components/context-menu.js +76 -76
- package/dist/esm/packages/ui/src/components/context-menu.js.map +1 -1
- package/dist/esm/packages/ui/src/components/dialog.js +54 -54
- package/dist/esm/packages/ui/src/components/dialog.js.map +1 -1
- package/dist/esm/packages/ui/src/components/drawer.js +39 -39
- package/dist/esm/packages/ui/src/components/drawer.js.map +1 -1
- package/dist/esm/packages/ui/src/components/dropdown-menu.js +109 -109
- package/dist/esm/packages/ui/src/components/dropdown-menu.js.map +1 -1
- package/dist/esm/packages/ui/src/components/input-otp.js +30 -30
- package/dist/esm/packages/ui/src/components/input-otp.js.map +1 -1
- package/dist/esm/packages/ui/src/components/input.js +19 -19
- package/dist/esm/packages/ui/src/components/input.js.map +1 -1
- package/dist/esm/packages/ui/src/components/label.js +9 -9
- package/dist/esm/packages/ui/src/components/label.js.map +1 -1
- package/dist/esm/packages/ui/src/components/pagination.js +26 -26
- package/dist/esm/packages/ui/src/components/pagination.js.map +1 -1
- package/dist/esm/packages/ui/src/components/popover.js +13 -13
- package/dist/esm/packages/ui/src/components/popover.js.map +1 -1
- package/dist/esm/packages/ui/src/components/radio-group.js +45 -45
- package/dist/esm/packages/ui/src/components/radio-group.js.map +1 -1
- package/dist/esm/packages/ui/src/components/resizable.js +18 -18
- package/dist/esm/packages/ui/src/components/resizable.js.map +1 -1
- package/dist/esm/packages/ui/src/components/scroll-area.js +31 -31
- package/dist/esm/packages/ui/src/components/scroll-area.js.map +1 -1
- package/dist/esm/packages/ui/src/components/select.js +119 -119
- package/dist/esm/packages/ui/src/components/select.js.map +1 -1
- package/dist/esm/packages/ui/src/components/separator.js +86 -86
- package/dist/esm/packages/ui/src/components/separator.js.map +1 -1
- package/dist/esm/packages/ui/src/components/sheet.js +50 -50
- package/dist/esm/packages/ui/src/components/sheet.js.map +1 -1
- package/dist/esm/packages/ui/src/components/sidebar.js +198 -198
- package/dist/esm/packages/ui/src/components/sidebar.js.map +1 -1
- package/dist/esm/packages/ui/src/components/skeleton.js +3 -3
- package/dist/esm/packages/ui/src/components/skeleton.js.map +1 -1
- package/dist/esm/packages/ui/src/components/switch.js +57 -57
- package/dist/esm/packages/ui/src/components/switch.js.map +1 -1
- package/dist/esm/packages/ui/src/components/table.js +17 -17
- package/dist/esm/packages/ui/src/components/table.js.map +1 -1
- package/dist/esm/packages/ui/src/components/tabs.js +33 -33
- package/dist/esm/packages/ui/src/components/tabs.js.map +1 -1
- package/dist/esm/packages/ui/src/components/textarea.js +17 -17
- package/dist/esm/packages/ui/src/components/textarea.js.map +1 -1
- package/dist/esm/packages/ui/src/components/toggle.js +36 -36
- package/dist/esm/packages/ui/src/components/toggle.js.map +1 -1
- package/dist/esm/packages/ui/src/components/tooltip.js +20 -20
- package/dist/esm/packages/ui/src/components/tooltip.js.map +1 -1
- package/dist/esm/packages/ui/src/components/tree-view.js +218 -218
- package/dist/esm/packages/ui/src/components/tree-view.js.map +1 -1
- package/dist/esm/styles/index.css +1 -1
- package/dist/esm/utils/animations.js +55 -55
- package/dist/esm/utils/animations.js.map +1 -1
- package/dist/esm/utils/css.js +7 -7
- package/dist/esm/utils/css.js.map +1 -1
- package/dist/esm/utils/parsers.js +1 -1
- package/dist/types/components/DatePicker/RangePicker.d.ts.map +1 -1
- package/dist/types/lib/TextAnimation/TextPressureEffect.d.ts.map +1 -1
- package/dist/types/lib/TextAnimation/TypingText.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/cjs/node_modules/.pnpm/nuqs@2.8.0_next@15.5.9_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1/node_modules/nuqs/dist/server.cjs.map +0 -1
- package/dist/esm/node_modules/.pnpm/nuqs@2.8.0_next@15.5.9_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1/node_modules/nuqs/dist/server.js.map +0 -1
- /package/dist/cjs/node_modules/.pnpm/{nuqs@2.8.0_next@15.5.9_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1 → nuqs@2.8.0_next@15.5.9_@babel_core@7.28.5_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1}/node_modules/nuqs/dist/server.cjs +0 -0
- /package/dist/esm/node_modules/.pnpm/{nuqs@2.8.0_next@15.5.9_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1 → nuqs@2.8.0_next@15.5.9_@babel_core@7.28.5_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1}/node_modules/nuqs/dist/server.js +0 -0
|
@@ -1 +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\";\nimport { Select } from \"../Select\";\nimport { Input, type InputProps } from \"../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 isOpen?: boolean; // External control for when picker is visible (used in non-standalone mode)\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 isOpen,\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 onChange?.(undefined, formattedValue, newDate);\n onSelect?.(newDate, formattedValue);\n },\n [outputFormat, onChange, 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 // Trigger scroll when picker opens (standalone or integrated) or when values change\n const shouldScroll = standalone ? standaloneOpen : isOpen;\n\n // Also trigger scroll if we have values (for initial load and value changes)\n const hasValues =\n hours !== undefined || minutes !== undefined || seconds !== undefined;\n\n if (shouldScroll || hasValues) {\n const timer = setTimeout(() => scrollHandler(), 100);\n return () => clearTimeout(timer);\n }\n }, [\n standaloneOpen,\n isOpen,\n standalone,\n mode,\n scrollHandler,\n hours,\n minutes,\n seconds,\n ]);\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","isOpen","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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"}
|
|
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\";\nimport { Select } from \"../Select\";\nimport { Input, type InputProps } from \"../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 isOpen?: boolean; // External control for when picker is visible (used in non-standalone mode)\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 isOpen,\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=\"ds:text-xs ds:font-semibold ds:text-muted-foreground ds:uppercase ds:p-2 ds:border-b ds:w-full ds: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 onChange?.(undefined, formattedValue, newDate);\n onSelect?.(newDate, formattedValue);\n },\n [outputFormat, onChange, 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 // Trigger scroll when picker opens (standalone or integrated) or when values change\n const shouldScroll = standalone ? standaloneOpen : isOpen;\n\n // Also trigger scroll if we have values (for initial load and value changes)\n const hasValues =\n hours !== undefined || minutes !== undefined || seconds !== undefined;\n\n if (shouldScroll || hasValues) {\n const timer = setTimeout(() => scrollHandler(), 100);\n return () => clearTimeout(timer);\n }\n }, [\n standaloneOpen,\n isOpen,\n standalone,\n mode,\n scrollHandler,\n hours,\n minutes,\n seconds,\n ]);\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=\"ds:flex ds:flex-col ds:gap-2\">\n {timeLabel && (\n <div className=\"ds:text-xs ds:font-semibold ds:text-muted-foreground ds:uppercase ds:p-2 ds:border-b ds:w-full ds:text-center\">\n {timeLabel}\n </div>\n )}\n <div className=\"ds: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 ? \"ds: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 ? \"ds: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(\"ds:flex ds:flex-col ds:gap-2 ds:h-full ds:justify-between\", className)}\n >\n {shareLabel}\n\n <div\n className={cn(\n \"ds:flex ds:rounded ds:overflow-clip ds:mb-auto\",\n mode === \"wheel\"\n ? \"ds:items-end ds:justify-center ds:p-0 ds:h-72\"\n : \"ds:items-start ds: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(\"ds: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(\"ds:flex ds:flex-col ds:gap-4 ds:h-full\", className)}>\n {shareLabel}\n\n <div\n className={cn(\n \"ds:flex ds:rounded ds:overflow-clip ds:my-auto ds:mx-auto ds:max-w-sm ds:md:max-w-md ds:lg:max-w-lg ds:relative\",\n mode === \"wheel\"\n ? \"ds:items-end ds:justify-center ds:p-0\"\n : \"ds:items-start ds:justify-center\",\n {\n \"ds:h-72\": mode === \"wheel\",\n \"ds: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(\"ds: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=\"ds:!p-1 ds:!leading-0 ds:h-auto ds:rounded ds:hover:bg-accent ds:transition-colors\"\n disabled={disabled}\n >\n <Clock className=\"ds:size-4\" />\n <span className=\"ds: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 \"ds:w-auto ds:overflow-hidden ds:p-0\",\n \"ds:backdrop-blur ds: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 \"ds:w-auto ds:overflow-hidden ds:p-0\",\n \"ds:backdrop-blur ds:bg-background\"\n )}\n >\n <DrawerHeader className=\"ds: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=\"ds: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","isOpen","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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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const s=require("react/jsx-runtime"),b=require("react"),t=require("../../packages/ui/src/components/dialog.cjs"),i=require("../../packages/ui/src/components/alert-dialog.cjs"),I=require("../../packages/ui/src/components/scroll-area.cjs"),e=require("../../packages/ui/src/lib/utils.cjs"),W=require("../../utils/animations.cjs"),y=require("lucide-react"),S=require("../Button/Button.cjs"),X={dialog:null,confirm:s.jsx("div",{className:"ds:size-12 ds:flex ds:items-center ds:justify-center ds:rounded-full ds:bg-success/10 ds:mx-auto ds:mb-4",children:s.jsx(y.CheckCircle2,{className:"ds:size-6 ds:text-success"})}),alert:s.jsx("div",{className:"ds:size-12 ds:flex ds:items-center ds:justify-center ds:rounded-full ds:bg-error/10 ds:mx-auto ds:mb-4",children:s.jsx(y.AlertCircle,{className:"ds:size-5 ds:text-error"})}),info:s.jsx("div",{className:"ds:size-12 ds:flex ds:items-center ds:justify-center ds:rounded-full ds:bg-blue-500/10 ds:mx-auto ds:mb-4",children:s.jsx(y.Info,{className:"ds:size-5 ds:text-blue-500"})}),warning:s.jsx("div",{className:"ds:size-12 ds:flex ds:items-center ds:justify-center ds:rounded-full ds:bg-warning/10 ds:mx-auto ds:mb-4",children:s.jsx(y.AlertTriangle,{className:"ds:size-5 ds: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:"ds:sm:max-w-sm",md:"ds:sm:max-w-md",lg:"ds:sm:max-w-lg",xl:"ds:sm:max-w-xl","2xl":"ds:sm:max-w-2xl ds:max-h-[90vh]","3xl":"ds:sm:max-w-3xl ds:max-h-[90vh]","4xl":"ds:sm:max-w-4xl ds:max-h-[90vh]",full:"ds:sm:max-w-[95vw] ds:h-[98vh]"},$={center:"ds:!top-[50%] ds:!left-[50%] ds:!translate-x-[-50%] ds:!translate-y-[-50%]",top:"ds:!top-4 ds:!left-[50%] ds:!translate-x-[-50%] ds:!translate-y-0",bottom:"ds:!top-auto ds:!bottom-4 ds:!left-[50%] ds:!translate-x-[-50%] ds:!translate-y-0",left:"ds:!left-4 ds:!top-[50%] ds:!translate-x-0 ds:!translate-y-[-50%]",right:"ds:!left-auto ds:!right-4 ds:!top-[50%] ds:!translate-x-0 ds:!translate-y-[-50%]","top-left":"ds:!top-4 ds:!left-4 ds:!translate-x-0 ds:!translate-y-0","top-right":"ds:!top-4 ds:!left-auto ds:!right-4 ds:!translate-x-0 ds:!translate-y-0","bottom-left":"ds:!top-auto ds:!bottom-4 ds:!left-4 ds:!translate-x-0 ds:!translate-y-0","bottom-right":"ds:!top-auto ds:!bottom-4 ds:!left-auto ds:!right-4 ds:!translate-x-0 ds:!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:r,closeOnEsc:z=!0,closeOnOutside:_=!0,showCloseButton:P=!0,position:G="center",size:J="md",fullscreen:k=!1,scrollable:q=!0,stickyHeader:n=!1,stickyFooter:o=!1,animation:c,className:T,contentClassName:B,headerClassName:L,titleClassName:h,descriptionClassName:g,footerClassName:Q,confirmButton:m,cancelButton:x,showIcon:U=!0,backdropFilter:F=2,overlay:O="dark"}=K,V=b.useMemo(()=>c?W.animationClass(c):{className:""},[c]),M=e.cn("ds:!p-0 ds:!gap-0 ds:flex ds:flex-col",Z[k?"full":J],$[G],Y[C],V.className,k?"ds:h-[98vh]":"ds:max-h-[90vh]"),p=e.cn("ds:px-6 ds:pt-6 ds:text-left",!q&&"ds:contents ds:space-y-0",L),j=e.cn("ds:px-6 ds:pb-6 ds:sm:justify-end",!q&&"ds:border-t ds:py-4",Q),N=U?X[C]:null,R=b.useMemo(()=>l||N||a?s.jsxs(i.AlertDialogHeader,{className:e.cn("ds:flex ds:items-center ds:gap-2 ds:py-4",{"ds:border-b":n},p),children:[(l||N)&&s.jsxs(i.AlertDialogTitle,{className:e.cn(h),children:[N,l]}),a&&s.jsx(i.AlertDialogDescription,{className:g,children:a})]}):null,[l,N,a,p,h,g,n]),H=b.useMemo(()=>{const d={variant:"solid",color:"primary",...m,text:m?.text??"Confirm"},D={variant:"outline",...x,text:x?.text??"Cancel"};return r||m||x?s.jsx(i.AlertDialogFooter,{className:e.cn("ds:py-4",{"ds:border-t":o},j),children:r||s.jsxs(s.Fragment,{children:[x&&s.jsx(S.default,{...D,onClick:()=>{D.onClick?.()},children:D.text}),m&&s.jsx(S.default,{...d,onClick:()=>{d.onClick?.()},children:d.text})]})}):null},[r,j,m,x,o]);return C!=="dialog"?s.jsxs(i.AlertDialog,{open:w,onOpenChange:A,children:[f&&s.jsx(i.AlertDialogTrigger,{asChild:!0,children:f}),s.jsxs(i.AlertDialogContent,{ref:v,className:e.cn(T,M),onEscapeKeyDown:d=>!z&&d.preventDefault(),noDefaultAnimation:!!c,backdropFilter:F,overlay:O,children:[n&&R,s.jsxs(I.ScrollArea,{className:"ds:flex ds:max-h-full ds:flex-col ds:overflow-hidden",children:[!n&&R,u&&s.jsx("div",{className:e.cn("ds:px-6 ds:py-4",B),children:u}),!o&&H]}),o&&H]})]}):s.jsxs(t.Dialog,{open:w,onOpenChange:A,children:[f&&s.jsx(t.DialogTrigger,{asChild:!0,children:f}),s.jsxs(t.DialogContent,{ref:v,className:e.cn(T,M),showCloseButton:P,onEscapeKeyDown:d=>!z&&d.preventDefault(),onInteractOutside:d=>!_&&d.preventDefault(),noDefaultAnimation:!!c,backdropFilter:F,overlay:O,children:[n&&(l||a)&&s.jsxs(t.DialogHeader,{className:e.cn({"ds:py-4 ds:border-b":n},p),children:[l&&s.jsx(t.DialogTitle,{className:h,children:l}),a&&s.jsx(t.DialogDescription,{className:g,children:a})]}),s.jsxs(I.ScrollArea,{className:"ds:flex ds:max-h-full ds:flex-col ds:overflow-hidden",children:[!n&&(l||a)&&s.jsxs(t.DialogHeader,{className:e.cn("ds:py-4",p),children:[l&&s.jsx(t.DialogTitle,{className:h,children:l}),a&&s.jsx(t.DialogDescription,{className:g,children:a})]}),u&&s.jsx("div",{className:e.cn("ds:px-6 ds:py-4",B),children:u}),!o&&r&&s.jsx(t.DialogFooter,{className:e.cn("ds:py-4",j),children:r})]}),o&&r&&s.jsx(t.DialogFooter,{className:e.cn({"ds:py-4 ds:border-t":o},j),children:r})]})]})});E.displayName="Dialog";exports.default=E;
|
|
2
2
|
//# sourceMappingURL=Dialog.cjs.map
|
|
@@ -1 +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 max-h-[90vh]\",\n \"3xl\": \"sm:max-w-3xl max-h-[90vh]\",\n \"4xl\": \"sm:max-w-4xl max-h-[90vh]\",\n full: \"sm:max-w-[95vw] h-[98vh]\",\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 = 2,\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-[98vh]\" : \"max-h-[90vh]\"\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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"}
|
|
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=\"ds:size-12 ds:flex ds:items-center ds:justify-center ds:rounded-full ds:bg-success/10 ds:mx-auto ds:mb-4\">\n <CheckCircle2 className=\"ds:size-6 ds:text-success\" />\n </div>\n ),\n alert: (\n <div className=\"ds:size-12 ds:flex ds:items-center ds:justify-center ds:rounded-full ds:bg-error/10 ds:mx-auto ds:mb-4\">\n <AlertCircle className=\"ds:size-5 ds:text-error\" />\n </div>\n ),\n info: (\n <div className=\"ds:size-12 ds:flex ds:items-center ds:justify-center ds:rounded-full ds:bg-blue-500/10 ds:mx-auto ds:mb-4\">\n <Info className=\"ds:size-5 ds:text-blue-500\" />\n </div>\n ),\n warning: (\n <div className=\"ds:size-12 ds:flex ds:items-center ds:justify-center ds:rounded-full ds:bg-warning/10 ds:mx-auto ds:mb-4\">\n <AlertTriangle className=\"ds:size-5 ds: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: \"ds:sm:max-w-sm\",\n md: \"ds:sm:max-w-md\",\n lg: \"ds:sm:max-w-lg\",\n xl: \"ds:sm:max-w-xl\",\n \"2xl\": \"ds:sm:max-w-2xl ds:max-h-[90vh]\",\n \"3xl\": \"ds:sm:max-w-3xl ds:max-h-[90vh]\",\n \"4xl\": \"ds:sm:max-w-4xl ds:max-h-[90vh]\",\n full: \"ds:sm:max-w-[95vw] ds:h-[98vh]\",\n};\n\nconst positionClasses: Record<DialogPosition, string> = {\n center: \"ds:!top-[50%] ds:!left-[50%] ds:!translate-x-[-50%] ds:!translate-y-[-50%]\",\n top: \"ds:!top-4 ds:!left-[50%] ds:!translate-x-[-50%] ds:!translate-y-0\",\n bottom: \"ds:!top-auto ds:!bottom-4 ds:!left-[50%] ds:!translate-x-[-50%] ds:!translate-y-0\",\n left: \"ds:!left-4 ds:!top-[50%] ds:!translate-x-0 ds:!translate-y-[-50%]\",\n right: \"ds:!left-auto ds:!right-4 ds:!top-[50%] ds:!translate-x-0 ds:!translate-y-[-50%]\",\n \"top-left\": \"ds:!top-4 ds:!left-4 ds:!translate-x-0 ds:!translate-y-0\",\n \"top-right\": \"ds:!top-4 ds:!left-auto ds:!right-4 ds:!translate-x-0 ds:!translate-y-0\",\n \"bottom-left\": \"ds:!top-auto ds:!bottom-4 ds:!left-4 ds:!translate-x-0 ds:!translate-y-0\",\n \"bottom-right\":\n \"ds:!top-auto ds:!bottom-4 ds:!left-auto ds:!right-4 ds:!translate-x-0 ds:!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 = 2,\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 \"ds:!p-0 ds:!gap-0 ds:flex ds:flex-col\",\n sizeClasses[fullscreen ? \"full\" : size],\n positionClasses[position],\n variantColors[variant],\n animationResult.className,\n fullscreen ? \"ds:h-[98vh]\" : \"ds:max-h-[90vh]\"\n );\n\n const headerClasses = cn(\n \"ds:px-6 ds:pt-6 ds:text-left\",\n !scrollable && \"ds:contents ds:space-y-0\",\n headerClassName\n );\n\n const footerClasses = cn(\n \"ds:px-6 ds:pb-6 ds:sm:justify-end\",\n !scrollable && \"ds:border-t ds: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 \"ds:flex ds:items-center ds:gap-2 ds:py-4\",\n { \"ds: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(\"ds:py-4\", { \"ds: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=\"ds:flex ds:max-h-full ds:flex-col ds:overflow-hidden\">\n {!stickyHeader && headerComponents}\n {children && (\n <div className={cn(\"ds:px-6 ds:py-4\", contentClassName)}>\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({ \"ds:py-4 ds: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=\"ds:flex ds:max-h-full ds:flex-col ds:overflow-hidden\">\n {!stickyHeader && (title || description) && (\n <DialogHeader className={cn(\"ds: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(\"ds:px-6 ds:py-4\", contentClassName)}>{children}</div>\n )}\n {!stickyFooter && footer && (\n <DialogFooter className={cn(\"ds:py-4\", footerClasses)}>\n {footer}\n </DialogFooter>\n )}\n </ScrollArea>\n {stickyFooter && footer && (\n <DialogFooter\n className={cn({ \"ds:py-4 ds: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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"}
|
|
@@ -1,2 +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("../../packages/ui/src/components/dropdown-menu.cjs"),l=require("../../packages/ui/src/lib/utils.cjs"),y=u.forwardRef((v,i)=>{const{open:p,defaultOpen:h,onOpenChange:x,modal:
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const n=require("react/jsx-runtime"),u=require("react"),s=require("../../packages/ui/src/components/dropdown-menu.cjs"),l=require("../../packages/ui/src/lib/utils.cjs"),y=u.forwardRef((v,i)=>{const{open:p,defaultOpen:h,onOpenChange:x,modal:d=!1,children:M,trigger:c,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:d,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:"ds: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:"ds: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?"ds:opacity-50 ds:cursor-not-allowed":"",e.className),children:[e.icon&&n.jsx("span",{className:"ds: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:"ds: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:c}),n.jsxs(s.DropdownMenu,{open:I,onOpenChange:C,modal:d,children:[n.jsx(s.DropdownMenuTrigger,{asChild:!0,children:n.jsx("div",{className:"ds: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=c?n.jsx("div",{onContextMenu:D,className:l.cn(g),children:c}):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:d,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
2
|
//# sourceMappingURL=DropdownMenu.cjs.map
|
|
@@ -1 +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":"qRAmGMA,EAAeC,EAAM,WACzB,CAACC,EAAOC,IAAQ,CACd,KAAM,CACJ,KAAAC,EACA,YAAAC,EACA,aAAAC,EACA,MAAAC,EAAQ,GACR,SAAAC,EACA,QAAAC,EACA,QAAAC,EACA,MAAAC,EACA,KAAAC,EAAO,SACP,MAAAC,EAAQ,QACR,WAAAC,EACA,YAAAC,EACA,OAAAC,EAAS,GACT,YAAAC,EAAc,GACd,UAAAC,EACA,iBAAAC,EACA,iBAAAC,CAAA,EACElB,EAGE,CAACmB,EAAiBC,CAAkB,EAAIC,EAAAA,SAAS,EAAK,EACtD,CAACC,EAAqBC,CAAsB,EAAIF,WAAS,CAC7D,EAAG,EACH,EAAG,CAAA,CACJ,EAGKG,EAAqBC,GAAwB,CAC7CV,IACFU,EAAE,eAAA,EACFF,EAAuB,CAAE,EAAGE,EAAE,QAAS,EAAGA,EAAE,QAAS,EACrDL,EAAmB,EAAI,EAE3B,EAGA,GAAId,EACF,OACEoB,EAAAA,IAACC,EAAAA,aAAA,CACC,KAAAzB,EACA,YAAAC,EACA,aAAAC,EACA,MAAAC,EAEC,SAAAC,CAAA,CAAA,EAMP,MAAMsB,EAAeC,GACZA,EAAU,IAAKC,GAAS,CAC7B,OAAQA,EAAK,KAAA,CACX,IAAK,YACH,OAAOJ,EAAAA,IAACK,EAAAA,sBAAA,GAA4BD,EAAK,GAAK,EAChD,IAAK,QACH,cACGE,oBAAA,CACE,SAAA,CAAAF,EAAK,OACJJ,MAACO,EAAAA,kBAAA,CAAoB,SAAAH,EAAK,MAAM,EAEjCF,EAAYE,EAAK,QAAQ,CAAA,CAAA,EAJHA,EAAK,GAK9B,EAEJ,IAAK,WACH,OACEI,EAAAA,KAACC,EAAAA,yBAAA,CAEC,QAASL,EAAK,QACd,SAAUA,EAAK,SACf,UAAWA,EAAK,UAChB,gBAAkBM,GAAqB,CACjCA,GAAWN,EAAK,SAClBA,EAAK,QAAA,CAET,EAEC,SAAA,CAAAA,EAAK,MAAQJ,EAAAA,IAAC,OAAA,CAAK,UAAU,OAAQ,WAAK,KAAK,EAC/CI,EAAK,KAAA,CAAA,EAXDA,EAAK,GAAA,EAchB,IAAK,QACH,OACEJ,EAAAA,IAACW,EAAAA,uBAAA,CAAuC,MAAOP,EAAK,MAClD,SAAAI,EAAAA,KAACI,EAAAA,sBAAA,CACC,MAAOR,EAAK,IACZ,SAAUA,EAAK,SACf,QAASA,EAAK,QACd,UAAWA,EAAK,UAEf,SAAA,CAAAA,EAAK,MAAQJ,EAAAA,IAAC,OAAA,CAAK,UAAU,OAAQ,WAAK,KAAK,EAC/CI,EAAK,KAAA,CAAA,CAAA,CACR,EAT4BA,EAAK,GAUnC,EAEJ,QAEE,OAAIA,EAAK,UAAYA,EAAK,SAAS,OAAS,SAGvCS,kBAAA,CACC,SAAA,CAAAL,EAAAA,KAACM,EAAAA,uBAAA,CACC,SAAUV,EAAK,SACf,UAAWW,EAAAA,GACTX,EAAK,SAAW,gCAAkC,GAClDA,EAAK,SAAA,EAGN,SAAA,CAAAA,EAAK,MAAQJ,EAAAA,IAAC,OAAA,CAAK,UAAU,OAAQ,WAAK,KAAK,EAC/CI,EAAK,KAAA,CAAA,CAAA,EAERJ,EAAAA,IAACgB,EAAAA,uBAAA,CACE,SAAAd,EAAYE,EAAK,QAAQ,CAAA,CAC5B,CAAA,CAAA,EAbqBA,EAAK,GAc5B,EAKAI,EAAAA,KAACS,EAAAA,iBAAA,CAEC,SAAUb,EAAK,SACf,QAASA,EAAK,QACd,QAASA,EAAK,QACd,UAAWA,EAAK,UAEf,SAAA,CAAAA,EAAK,MAAQJ,EAAAA,IAAC,OAAA,CAAK,UAAU,OAAQ,WAAK,KAAK,EAC/CI,EAAK,KAAA,CAAA,EAPDA,EAAK,GAAA,CAWlB,CAEJ,CAAC,EAIH,GAAIf,EACF,OACEmB,EAAAA,KAAAU,WAAA,CAEE,SAAA,CAAAlB,EAAAA,IAAC,MAAA,CACC,cAAeF,EACf,UAAWiB,EAAAA,GAAGvB,CAAgB,EAE7B,SAAAX,CAAA,CAAA,EAEH2B,EAAAA,KAACP,EAAAA,aAAA,CACC,KAAMR,EACN,aAAcC,EACd,MAAAf,EAEA,SAAA,CAAAqB,EAAAA,IAACmB,EAAAA,oBAAA,CAAqB,QAAO,GAC3B,SAAAnB,EAAAA,IAAC,MAAA,CACC,UAAU,QACV,MAAO,CACL,KAAMJ,EAAoB,EAC1B,IAAKA,EAAoB,EACzB,MAAO,EACP,OAAQ,CAAA,CACV,CAAA,EAEJ,QACCwB,EAAAA,mBAAA,CACC,SAAAZ,EAAAA,KAACa,EAAAA,oBAAA,CACC,IAAA9C,EACA,UAAWwC,EAAAA,GAAGzB,EAAWC,CAAgB,EACzC,KAAK,SACL,MAAM,QACN,WAAY,EAEX,SAAA,CAAAT,EACAC,GAASmB,EAAYnB,CAAK,CAAA,CAAA,CAAA,CAC7B,CACF,CAAA,CAAA,CAAA,CACF,EACF,EAKJ,MAAMuC,EAAiBzC,EACrBmB,EAAAA,IAAC,MAAA,CAAI,cAAeF,EAAmB,UAAWiB,EAAAA,GAAGvB,CAAgB,EAClE,SAAAX,CAAA,CACH,EACE,KAEE0C,EACJzC,GAAWC,EACTyB,EAAAA,KAACa,EAAAA,oBAAA,CACC,IAAA9C,EACA,KAAAS,EACA,MAAAC,EACA,WAAAC,EACA,YAAAC,EACA,UAAW4B,EAAAA,GAAGzB,EAAWC,CAAgB,EAExC,SAAA,CAAAT,EACAC,GAASmB,EAAYnB,CAAK,CAAA,CAAA,CAAA,EAE3B,KAEN,OACEyB,EAAAA,KAACP,EAAAA,aAAA,CACC,KAAAzB,EACA,YAAAC,EACA,aAAAC,EACA,MAAAC,EAEC,SAAA,CAAA2C,GACCtB,EAAAA,IAACmB,sBAAA,CAAqB,QAAO,GAAE,SAAAG,EAAe,EAE/ClC,EACCY,EAAAA,IAACoB,EAAAA,mBAAA,CAAqB,SAAAG,CAAA,CAAe,EAErCA,CAAA,CAAA,CAAA,CAIR,CACF,EAEAnD,EAAa,YAAc"}
|
|
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=\"ds: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=\"ds: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 ? \"ds:opacity-50 ds:cursor-not-allowed\" : \"\",\n item.className\n )}\n >\n {item.icon && <span className=\"ds: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=\"ds: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=\"ds: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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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("react/jsx-runtime"),i=require("react"),u=require("../packages/ui/src/lib/utils.cjs"),f=require("../packages/ui/src/components/label.cjs"),g=require("./Tooltip/Tooltip.cjs"),h=require("lucide-react");function w(r){const o=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(r){for(const t in r)if(t!=="default"){const e=Object.getOwnPropertyDescriptor(r,t);Object.defineProperty(o,t,e.get?e:{enumerable:!0,get:()=>r[t]})}}return o.default=r,Object.freeze(o)}const x=w(i),a=x.forwardRef(({className:r,infoTooltip:o,size:t="xl",shouldFloat:e,required:n,children:c,...p},l)=>{const s=t==="lg"||!1;return d.jsxs(f.Label,{className:u.cn("ds:absolute ds:start-2 ds:select-none ds:pointer-events-none","ds:bg-background ds:px-3 ds:translate-y-2","ds:flex",{"ds:top-0.5 ds:origin-left ds:scale-75 ds:translate-x-1 ds:max-w-full ds:h-3 ds:py-0 ds:bg-transparent":!s,"ds:peer-placeholder-shown:top-0 ds:peer-placeholder-shown:scale-100 ds:peer-placeholder-shown:translate-x-0 ds:peer-placeholder-shown:w-[calc(100%-(--spacing(4)))] ds:peer-placeholder-shown:h-[calc(100%-(--spacing(4)))] ds:peer-placeholder-shown:py-3 ds:peer-placeholder-shown:bg-background":!s,"ds:peer-focus:top-0.5 ds:peer-focus:origin-left ds:peer-focus:scale-75 ds:peer-focus:translate-x-1 ds:peer-focus:text-primary ds:peer-focus:max-w-full ds:peer-focus:h-3 ds:peer-focus:py-0 ds:peer-focus:bg-transparent":!s,"ds:group-focus-within:top-0.5 ds:group-focus-within:origin-left ds:group-focus-within:scale-75 ds:group-focus-within:translate-x-1 ds:group-focus-within:text-primary ds:group-focus-within:max-w-full ds:group-focus-within:h-3 ds:group-focus-within:py-0 ds:group-focus-within:bg-transparent":!s},{"ds:-top-3.5 ds:origin-left ds:scale-75 ds:translate-x-0 ds:max-w-full ds:w-auto ds:h-3 ds:py-0":s,"ds:peer-placeholder-shown:-top-0.5 ds:peer-placeholder-shown:scale-100 ds:peer-placeholder-shown:w-[calc(100%-(--spacing(4)))] ds:peer-placeholder-shown:h-[calc(100%-(--spacing(3)))] ds:peer-placeholder-shown:py-2 ds:peer-placeholder-shown:bg-background":s,"ds:peer-focus:-top-3.5 ds:peer-focus:origin-left ds:peer-focus:scale-75 ds:peer-focus:text-primary ds:peer-focus:max-w-full ds:peer-focus:w-auto ds:peer-focus:h-3 ds:peer-focus:py-0":s,"ds:group-focus-within:-top-3.5 ds:group-focus-within:origin-left ds:group-focus-within:scale-75 ds:group-focus-within:text-primary ds:group-focus-within:max-w-full ds:group-focus-within:w-auto ds:group-focus-within:h-3 ds:group-focus-within:py-0":s},{"ds:top-0.5 ds:origin-left ds:scale-75 ds:translate-x-1 ds:max-w-full ds:h-3 ds:py-0":typeof e=="boolean"&&e&&!s,"ds:top-0 ds:scale-100 ds:translate-x-0 ds:w-[calc(100%-(--spacing(4)))] ds:h-[calc(100%-(--spacing(4)))] ds:py-3 ds:bg-background":typeof e=="boolean"&&!e&&!s},{"ds:-top-3.5 ds:origin-left ds:scale-75 ds:translate-x-0 ds:max-w-full ds:h-3 ds:py-0":typeof e=="boolean"&&e&&s,"ds:top-0 ds:scale-100 ds:translate-x-0 ds:w-[calc(100%-(--spacing(4)))] ds:h-[calc(100%-(--spacing(4)))] ds:py-3 ds:bg-background":typeof e=="boolean"&&!e&&s},"ds:will-change-transform ds:transition-all ds:duration-300 ds:ease-in-out",r),ref:l,...p,children:[d.jsxs("span",{className:"ds:truncate ds:whitespace-nowrap ds:max-w-full ds:pointer-events-none",children:[c,n&&d.jsx("span",{className:"ds:text-error ds:ml-0.5",children:"*"})]}),o&&d.jsx(g.Tooltip,{content:o,children:d.jsx(h.Info,{className:"ds:size-3.5 ds:min-w-3.5 ds:z-10 ds:pointer-events-auto"})})]})});a.displayName="FloatingLabel";exports.FloatingLabel=a;
|
|
2
2
|
//# sourceMappingURL=FloatLabel.cjs.map
|
|
@@ -1 +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 required?: boolean;\n }\n>(\n (\n {\n className,\n infoTooltip,\n size = \"xl\",\n shouldFloat,\n required,\n children,\n ...props\n },\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 \"
|
|
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 required?: boolean;\n }\n>(\n (\n {\n className,\n infoTooltip,\n size = \"xl\",\n shouldFloat,\n required,\n children,\n ...props\n },\n ref\n ) => {\n const lagerSize = size === \"lg\" || false;\n\n return (\n <Label\n className={cn(\n \"ds:absolute ds:start-2 ds:select-none ds:pointer-events-none\",\n \"ds:bg-background ds:px-3 ds:translate-y-2\",\n \"ds:flex\",\n {\n \"ds:top-0.5 ds:origin-left ds:scale-75 ds:translate-x-1 ds:max-w-full ds:h-3 ds:py-0 ds:bg-transparent\":\n !lagerSize,\n // State empty (placeholder shown) - ở giữa input\n \"ds:peer-placeholder-shown:top-0 ds:peer-placeholder-shown:scale-100 ds:peer-placeholder-shown:translate-x-0 ds:peer-placeholder-shown:w-[calc(100%-(--spacing(4)))] ds:peer-placeholder-shown:h-[calc(100%-(--spacing(4)))] ds:peer-placeholder-shown:py-3 ds:peer-placeholder-shown:bg-background\":\n !lagerSize,\n // // State focus - nằm trên input\n \"ds:peer-focus:top-0.5 ds:peer-focus:origin-left ds:peer-focus:scale-75 ds:peer-focus:translate-x-1 ds:peer-focus:text-primary ds:peer-focus:max-w-full ds:peer-focus:h-3 ds:peer-focus:py-0 ds:peer-focus:bg-transparent\":\n !lagerSize,\n \"ds:group-focus-within:top-0.5 ds:group-focus-within:origin-left ds:group-focus-within:scale-75 ds:group-focus-within:translate-x-1 ds:group-focus-within:text-primary ds:group-focus-within:max-w-full ds:group-focus-within:h-3 ds:group-focus-within:py-0 ds:group-focus-within:bg-transparent\":\n !lagerSize,\n },\n {\n \"ds:-top-3.5 ds:origin-left ds:scale-75 ds:translate-x-0 ds:max-w-full ds:w-auto ds:h-3 ds:py-0\":\n lagerSize,\n // State empty (placeholder shown) - ở giữa input\n \"ds:peer-placeholder-shown:-top-0.5 ds:peer-placeholder-shown:scale-100 ds:peer-placeholder-shown:w-[calc(100%-(--spacing(4)))] ds:peer-placeholder-shown:h-[calc(100%-(--spacing(3)))] ds:peer-placeholder-shown:py-2 ds:peer-placeholder-shown:bg-background\":\n lagerSize,\n // // State focus - nằm trên input\n \"ds:peer-focus:-top-3.5 ds:peer-focus:origin-left ds:peer-focus:scale-75 ds:peer-focus:text-primary ds:peer-focus:max-w-full ds:peer-focus:w-auto ds:peer-focus:h-3 ds:peer-focus:py-0\":\n lagerSize,\n \"ds:group-focus-within:-top-3.5 ds:group-focus-within:origin-left ds:group-focus-within:scale-75 ds:group-focus-within:text-primary ds:group-focus-within:max-w-full ds:group-focus-within:w-auto ds:group-focus-within:h-3 ds:group-focus-within:py-0\":\n lagerSize,\n },\n\n // State when shouldFloat prop is set\n {\n \"ds:top-0.5 ds:origin-left ds:scale-75 ds:translate-x-1 ds:max-w-full ds:h-3 ds:py-0\":\n typeof shouldFloat === \"boolean\" && shouldFloat && !lagerSize,\n \"ds:top-0 ds:scale-100 ds:translate-x-0 ds:w-[calc(100%-(--spacing(4)))] ds:h-[calc(100%-(--spacing(4)))] ds:py-3 ds:bg-background\":\n typeof shouldFloat === \"boolean\" && !shouldFloat && !lagerSize,\n },\n {\n \"ds:-top-3.5 ds:origin-left ds:scale-75 ds:translate-x-0 ds:max-w-full ds:h-3 ds:py-0\":\n typeof shouldFloat === \"boolean\" && shouldFloat && lagerSize,\n \"ds:top-0 ds:scale-100 ds:translate-x-0 ds:w-[calc(100%-(--spacing(4)))] ds:h-[calc(100%-(--spacing(4)))] ds:py-3 ds:bg-background\":\n typeof shouldFloat === \"boolean\" && !shouldFloat && lagerSize,\n },\n \"ds:will-change-transform ds:transition-all ds:duration-300 ds:ease-in-out\",\n className\n )}\n ref={ref}\n {...props}\n >\n <span className=\"ds:truncate ds:whitespace-nowrap ds:max-w-full ds:pointer-events-none\">\n {children}\n {required && <span className=\"ds:text-error ds:ml-0.5\">*</span>}\n </span>\n\n {infoTooltip && (\n <Tooltip content={infoTooltip}>\n <Info className=\"ds:size-3.5 ds:min-w-3.5 ds:z-10 ds: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","required","children","props","ref","lagerSize","jsxs","Label","cn","jsx","Tooltip","Info"],"mappings":"kkBAOMA,EAAgBC,EAAM,WAS1B,CACE,CACE,UAAAC,EACA,YAAAC,EACA,KAAAC,EAAO,KACP,YAAAC,EACA,SAAAC,EACA,SAAAC,EACA,GAAGC,CAAA,EAELC,IACG,CACH,MAAMC,EAAYN,IAAS,MAAQ,GAEnC,OACEO,EAAAA,KAACC,EAAAA,MAAA,CACC,UAAWC,EAAAA,GACT,+DACA,4CACA,UACA,CACE,wGACE,CAACH,EAEH,qSACE,CAACA,EAEH,2NACE,CAACA,EACH,mSACE,CAACA,CAAA,EAEL,CACE,iGACEA,EAEF,gQACEA,EAEF,wLACEA,EACF,wPACEA,CAAA,EAIJ,CACE,sFACE,OAAOL,GAAgB,WAAaA,GAAe,CAACK,EACtD,oIACE,OAAOL,GAAgB,WAAa,CAACA,GAAe,CAACK,CAAA,EAEzD,CACE,uFACE,OAAOL,GAAgB,WAAaA,GAAeK,EACrD,oIACE,OAAOL,GAAgB,WAAa,CAACA,GAAeK,CAAA,EAExD,4EACAR,CAAA,EAEF,IAAAO,EACC,GAAGD,EAEJ,SAAA,CAAAG,EAAAA,KAAC,OAAA,CAAK,UAAU,wEACb,SAAA,CAAAJ,EACAD,GAAYQ,EAAAA,IAAC,OAAA,CAAK,UAAU,0BAA0B,SAAA,GAAA,CAAC,CAAA,EAC1D,EAECX,SACEY,UAAA,CAAQ,QAASZ,EAChB,SAAAW,EAAAA,IAACE,EAAAA,KAAA,CAAK,UAAU,yDAAA,CAA0D,CAAA,CAC5E,CAAA,CAAA,CAAA,CAIR,CACF,EAEAhB,EAAc,YAAc"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime");require("@radix-ui/react-slot");require("../../packages/ui/src/components/button.cjs");require("../../packages/ui/src/components/button-group.cjs");require("../../packages/ui/src/components/input.cjs");require("../../packages/ui/src/components/textarea.cjs");require("@radix-ui/react-label");const
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime");require("@radix-ui/react-slot");require("../../packages/ui/src/components/button.cjs");require("../../packages/ui/src/components/button-group.cjs");require("../../packages/ui/src/components/input.cjs");require("../../packages/ui/src/components/textarea.cjs");require("@radix-ui/react-label");const i=require("../../packages/ui/src/lib/utils.cjs");require("../../packages/ui/src/components/select.cjs");require("../../packages/ui/src/components/combobox.cjs");require("@radix-ui/react-tooltip");require("react");require("lucide-react");require("react-day-picker");require("../../packages/ui/src/components/popover.cjs");require("@radix-ui/react-separator");require("../../packages/ui/src/components/switch.cjs");require("vaul");require("@radix-ui/react-scroll-area");require("../../packages/ui/src/components/tree-view.cjs");require("@radix-ui/react-alert-dialog");require("@radix-ui/react-avatar");require("../../packages/ui/src/components/badge.cjs");require("../../packages/ui/src/components/checkbox.cjs");require("@radix-ui/react-collapsible");require("cmdk");require("@radix-ui/react-dialog");require("@radix-ui/react-dropdown-menu");require("../../packages/ui/src/components/input-otp.cjs");require("../../packages/ui/src/components/radio-group.cjs");require("../../packages/ui/src/components/sidebar.cjs");require("@radix-ui/react-slider");require("../../packages/ui/src/components/tabs.cjs");require("../../packages/ui/src/components/toggle.cjs");const d=require("class-variance-authority");d.cva("ds:inline-flex ds:items-center ds:justify-center ds:gap-2 ds:whitespace-nowrap ds:text-sm ds:font-medium ds:transition-all ds:disabled:pointer-events-none ds:disabled:opacity-50 ds:[&_svg]:pointer-events-none ds:[&_svg:not([class*='size-'])]:size-4 ds:shrink-0 ds:[&_svg]:shrink-0 ds:outline-none ds:focus-visible:border-ring ds:focus-visible:ring-ring/50 ds:focus-visible:ring-[3px] ds:aria-invalid:ring-destructive/20 ds:dark:aria-invalid:ring-destructive/40 ds:aria-invalid:border-destructive",{variants:{},defaultVariants:{}});const t=({className:s,children:r})=>e.jsxs("div",{className:i.cn("ds:relative ds:inline-flex ds:overflow-hidden ds:cursor-pointer ds:shadow-[0_6px_6px_rgba(0,0,0,0.2),0_0_20px_rgba(0,0,0,0.1)] ds:transition-all ds:duration-400 ds:ease-[cubic-bezier(0.175,0.885,0.32,2.2)] ds:p-0 ds:rounded-md",s),children:[e.jsx("div",{className:"ds:absolute ds:z-0 ds:inset-0 ds:backdrop-blur-[2.5px] ds:overflow-hidden ds:isolate ds:[filter:url(#glass-distortion)] ds:rounded-[inherit]"}),e.jsx("div",{className:"ds:z-1 ds:absolute ds:inset-0 ds:bg-white/25 ds:rounded-[inherit]"}),e.jsx("div",{className:"ds:absolute ds:inset-0 ds:z-2 ds:overflow-hidden ds:shadow-[inset_2px_2px_1px_0_rgba(255,255,255,0.5),inset_-1px_-1px_1px_1px_rgba(255,255,255,0.5)] ds:rounded-[inherit]"}),e.jsx("div",{className:"ds:z-3 ds:relative",children:e.jsx("div",{className:"ds:text-foreground ds:[text-shadow:0px_1px_3px_rgba(255, ds:255, ds:255, ds:0.3)] ds:transition-all ds:duration-100 ds:ease-in ds:inline-flex ds:gap-2",children:r})}),e.jsx("svg",{className:"ds: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=t;
|
|
2
2
|
//# sourceMappingURL=Glass.cjs.map
|
|
@@ -1 +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\nexport type 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
|
+
{"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 \"ds:inline-flex ds:items-center ds:justify-center ds:gap-2 ds:whitespace-nowrap ds:text-sm ds:font-medium ds:transition-all ds:disabled:pointer-events-none ds:disabled:opacity-50 ds:[&_svg]:pointer-events-none ds:[&_svg:not([class*='size-'])]:size-4 ds:shrink-0 ds:[&_svg]:shrink-0 ds:outline-none ds:focus-visible:border-ring ds:focus-visible:ring-ring/50 ds:focus-visible:ring-[3px] ds:aria-invalid:ring-destructive/20 ds:dark:aria-invalid:ring-destructive/40 ds:aria-invalid:border-destructive\",\n {\n variants: {},\n defaultVariants: {},\n }\n);\n\nexport type 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 \"ds:relative ds:inline-flex ds:overflow-hidden ds:cursor-pointer ds:shadow-[0_6px_6px_rgba(0,0,0,0.2),0_0_20px_rgba(0,0,0,0.1)] ds:transition-all ds:duration-400 ds:ease-[cubic-bezier(0.175,0.885,0.32,2.2)] ds:p-0 ds:rounded-md\",\n className\n )}\n >\n <div className=\"ds:absolute ds:z-0 ds:inset-0 ds:backdrop-blur-[2.5px] ds:overflow-hidden ds:isolate ds:[filter:url(#glass-distortion)] ds:rounded-[inherit]\"></div>\n <div className=\"ds:z-1 ds:absolute ds:inset-0 ds:bg-white/25 ds:rounded-[inherit]\"></div>\n <div className=\"ds:absolute ds:inset-0 ds:z-2 ds:overflow-hidden ds:shadow-[inset_2px_2px_1px_0_rgba(255,255,255,0.5),inset_-1px_-1px_1px_1px_rgba(255,255,255,0.5)] ds:rounded-[inherit]\"></div>\n <div className=\"ds:z-3 ds:relative\">\n <div className=\"ds:text-foreground ds:[text-shadow:0px_1px_3px_rgba(255, ds:255, ds:255, ds:0.3)] ds:transition-all ds:duration-100 ds:ease-in ds:inline-flex ds:gap-2\">\n {children}\n </div>\n </div>\n <svg className=\"ds: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":"4mDAIsBA,EAAAA,IACpB,kfACA,CACE,SAAU,CAAA,EACV,gBAAiB,CAAA,CAAC,CAEtB,EAOA,MAAMC,EAA8B,CAAC,CAAE,UAAAC,EAAW,SAAAC,KAE9CC,EAAAA,KAAC,MAAA,CACC,UAAWC,EAAAA,GACT,qOACAH,CAAA,EAGF,SAAA,CAAAI,EAAAA,IAAC,MAAA,CAAI,UAAU,8IAAA,CAA+I,EAC9JA,EAAAA,IAAC,MAAA,CAAI,UAAU,mEAAA,CAAoE,EACnFA,EAAAA,IAAC,MAAA,CAAI,UAAU,2KAAA,CAA4K,EAC3LA,EAAAA,IAAC,OAAI,UAAU,qBACb,eAAC,MAAA,CAAI,UAAU,yJACZ,SAAAH,CAAA,CACH,CAAA,CACF,EACAG,EAAAA,IAAC,MAAA,CAAI,UAAU,YACb,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"}
|