@sth87/shadcn-design-system 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +487 -0
- package/dist/cjs/_virtual/_commonjsHelpers.cjs +2 -0
- package/dist/cjs/_virtual/_commonjsHelpers.cjs.map +1 -0
- package/dist/cjs/_virtual/index.cjs +2 -0
- package/dist/cjs/_virtual/index.cjs.map +1 -0
- package/dist/cjs/_virtual/index2.cjs +2 -0
- package/dist/cjs/_virtual/index2.cjs.map +1 -0
- package/dist/cjs/components/Accordion/Accordion.cjs +2 -0
- package/dist/cjs/components/Accordion/Accordion.cjs.map +1 -0
- package/dist/cjs/components/Avatar/Avatar.cjs +2 -0
- package/dist/cjs/components/Avatar/Avatar.cjs.map +1 -0
- package/dist/cjs/components/Badge/Badge.cjs +2 -0
- package/dist/cjs/components/Badge/Badge.cjs.map +1 -0
- package/dist/cjs/components/Breadcrumb/Breadcrumb.cjs +2 -0
- package/dist/cjs/components/Breadcrumb/Breadcrumb.cjs.map +1 -0
- package/dist/cjs/components/Button/Button.cjs +2 -0
- package/dist/cjs/components/Button/Button.cjs.map +1 -0
- package/dist/cjs/components/Button/ButtonGroup.cjs +2 -0
- package/dist/cjs/components/Button/ButtonGroup.cjs.map +1 -0
- package/dist/cjs/components/Calendar/Calendar.cjs +2 -0
- package/dist/cjs/components/Calendar/Calendar.cjs.map +1 -0
- package/dist/cjs/components/Carousel/Carousel.cjs +2 -0
- package/dist/cjs/components/Carousel/Carousel.cjs.map +1 -0
- package/dist/cjs/components/Checkbox/Checkbox.cjs +2 -0
- package/dist/cjs/components/Checkbox/Checkbox.cjs.map +1 -0
- package/dist/cjs/components/Collapsible/Collapsible.cjs +2 -0
- package/dist/cjs/components/Collapsible/Collapsible.cjs.map +1 -0
- package/dist/cjs/components/Command/Command.cjs +2 -0
- package/dist/cjs/components/Command/Command.cjs.map +1 -0
- package/dist/cjs/components/Command/index.cjs +2 -0
- package/dist/cjs/components/Command/index.cjs.map +1 -0
- package/dist/cjs/components/ContextMenu/ContextMenu.cjs +2 -0
- package/dist/cjs/components/ContextMenu/ContextMenu.cjs.map +1 -0
- package/dist/cjs/components/ContextMenu/index.cjs +2 -0
- package/dist/cjs/components/ContextMenu/index.cjs.map +1 -0
- package/dist/cjs/components/Cropper/Cropper.cjs +2 -0
- package/dist/cjs/components/Cropper/Cropper.cjs.map +1 -0
- package/dist/cjs/components/Cropper/CropperTool.cjs +2 -0
- package/dist/cjs/components/Cropper/CropperTool.cjs.map +1 -0
- package/dist/cjs/components/Cropper/utils.cjs +2 -0
- package/dist/cjs/components/Cropper/utils.cjs.map +1 -0
- package/dist/cjs/components/DatePicker/DatePicker.cjs +2 -0
- package/dist/cjs/components/DatePicker/DatePicker.cjs.map +1 -0
- package/dist/cjs/components/DatePicker/RangePicker.cjs +2 -0
- package/dist/cjs/components/DatePicker/RangePicker.cjs.map +1 -0
- package/dist/cjs/components/DatePicker/TimePicker.cjs +2 -0
- package/dist/cjs/components/DatePicker/TimePicker.cjs.map +1 -0
- package/dist/cjs/components/Dialog/Dialog.cjs +2 -0
- package/dist/cjs/components/Dialog/Dialog.cjs.map +1 -0
- package/dist/cjs/components/DropdownMenu/DropdownMenu.cjs +2 -0
- package/dist/cjs/components/DropdownMenu/DropdownMenu.cjs.map +1 -0
- package/dist/cjs/components/DropdownMenu/index.cjs +2 -0
- package/dist/cjs/components/DropdownMenu/index.cjs.map +1 -0
- package/dist/cjs/components/FloatLabel.cjs +2 -0
- package/dist/cjs/components/FloatLabel.cjs.map +1 -0
- package/dist/cjs/components/Glass/Glass.cjs +2 -0
- package/dist/cjs/components/Glass/Glass.cjs.map +1 -0
- package/dist/cjs/components/ImageViewer/ImageViewer.cjs +2 -0
- package/dist/cjs/components/ImageViewer/ImageViewer.cjs.map +1 -0
- package/dist/cjs/components/ImageViewer/ImageViewer.css +1 -0
- package/dist/cjs/components/Input/Input.cjs +2 -0
- package/dist/cjs/components/Input/Input.cjs.map +1 -0
- package/dist/cjs/components/InputOTP/InputOTP.cjs +2 -0
- package/dist/cjs/components/InputOTP/InputOTP.cjs.map +1 -0
- package/dist/cjs/components/Interactive/CursorFollow.cjs +2 -0
- package/dist/cjs/components/Interactive/CursorFollow.cjs.map +1 -0
- package/dist/cjs/components/Marquee/Marquee.cjs +2 -0
- package/dist/cjs/components/Marquee/Marquee.cjs.map +1 -0
- package/dist/cjs/components/Marquee/MarqueeWrapper.cjs +2 -0
- package/dist/cjs/components/Marquee/MarqueeWrapper.cjs.map +1 -0
- package/dist/cjs/components/Marquee/index.cjs +2 -0
- package/dist/cjs/components/Marquee/index.cjs.map +1 -0
- package/dist/cjs/components/Masonry/Masonry.cjs +2 -0
- package/dist/cjs/components/Masonry/Masonry.cjs.map +1 -0
- package/dist/cjs/components/Masonry/MasonryWrapper.cjs +2 -0
- package/dist/cjs/components/Masonry/MasonryWrapper.cjs.map +1 -0
- package/dist/cjs/components/Pagination/Pagination.cjs +2 -0
- package/dist/cjs/components/Pagination/Pagination.cjs.map +1 -0
- package/dist/cjs/components/Pagination/index.cjs +2 -0
- package/dist/cjs/components/Pagination/index.cjs.map +1 -0
- package/dist/cjs/components/Popover/Popover.cjs +2 -0
- package/dist/cjs/components/Popover/Popover.cjs.map +1 -0
- package/dist/cjs/components/Popover/index.cjs +2 -0
- package/dist/cjs/components/Popover/index.cjs.map +1 -0
- package/dist/cjs/components/QrCode/QrCode.cjs +2 -0
- package/dist/cjs/components/QrCode/QrCode.cjs.map +1 -0
- package/dist/cjs/components/QrCode/index.cjs +2 -0
- package/dist/cjs/components/QrCode/index.cjs.map +1 -0
- package/dist/cjs/components/Radio/Radio.cjs +2 -0
- package/dist/cjs/components/Radio/Radio.cjs.map +1 -0
- package/dist/cjs/components/Rate/Rate.cjs +2 -0
- package/dist/cjs/components/Rate/Rate.cjs.map +1 -0
- package/dist/cjs/components/Resizable/Resizable.cjs +2 -0
- package/dist/cjs/components/Resizable/Resizable.cjs.map +1 -0
- package/dist/cjs/components/ScrollArea/ScrollArea.cjs +2 -0
- package/dist/cjs/components/ScrollArea/ScrollArea.cjs.map +1 -0
- package/dist/cjs/components/Select/Select.cjs +2 -0
- package/dist/cjs/components/Select/Select.cjs.map +1 -0
- package/dist/cjs/components/Separator/Separator.cjs +2 -0
- package/dist/cjs/components/Separator/Separator.cjs.map +1 -0
- package/dist/cjs/components/Sheet/Sheet.cjs +6 -0
- package/dist/cjs/components/Sheet/Sheet.cjs.map +1 -0
- package/dist/cjs/components/Sidebar/Sidebar.cjs +2 -0
- package/dist/cjs/components/Sidebar/Sidebar.cjs.map +1 -0
- package/dist/cjs/components/Skeleton/Skeleton.cjs +2 -0
- package/dist/cjs/components/Skeleton/Skeleton.cjs.map +1 -0
- package/dist/cjs/components/Slider/Slider.cjs +2 -0
- package/dist/cjs/components/Slider/Slider.cjs.map +1 -0
- package/dist/cjs/components/Stepper/Stepper.cjs +2 -0
- package/dist/cjs/components/Stepper/Stepper.cjs.map +1 -0
- package/dist/cjs/components/Stepper/StepperWrapper.cjs +2 -0
- package/dist/cjs/components/Stepper/StepperWrapper.cjs.map +1 -0
- package/dist/cjs/components/Stepper/index.cjs +2 -0
- package/dist/cjs/components/Stepper/index.cjs.map +1 -0
- package/dist/cjs/components/Switch/Switch.cjs +2 -0
- package/dist/cjs/components/Switch/Switch.cjs.map +1 -0
- package/dist/cjs/components/Table/TableFilter/data-table-date-filter.cjs +2 -0
- package/dist/cjs/components/Table/TableFilter/data-table-date-filter.cjs.map +1 -0
- package/dist/cjs/components/Table/TableFilter/data-table-filter-popover.cjs +2 -0
- package/dist/cjs/components/Table/TableFilter/data-table-filter-popover.cjs.map +1 -0
- package/dist/cjs/components/Table/TableFilter/data-table-slider-filter.cjs +2 -0
- package/dist/cjs/components/Table/TableFilter/data-table-slider-filter.cjs.map +1 -0
- package/dist/cjs/components/Table/data-table-column-header.cjs +2 -0
- package/dist/cjs/components/Table/data-table-column-header.cjs.map +1 -0
- package/dist/cjs/components/Table/data-table-pagination.cjs +2 -0
- package/dist/cjs/components/Table/data-table-pagination.cjs.map +1 -0
- package/dist/cjs/components/Table/data-table.cjs +2 -0
- package/dist/cjs/components/Table/data-table.cjs.map +1 -0
- package/dist/cjs/components/Tabs/Tabs.cjs +2 -0
- package/dist/cjs/components/Tabs/Tabs.cjs.map +1 -0
- package/dist/cjs/components/Tabs/classes.cjs +2 -0
- package/dist/cjs/components/Tabs/classes.cjs.map +1 -0
- package/dist/cjs/components/Textarea/Textarea.cjs +2 -0
- package/dist/cjs/components/Textarea/Textarea.cjs.map +1 -0
- package/dist/cjs/components/TimeGridView.cjs +2 -0
- package/dist/cjs/components/TimeGridView.cjs.map +1 -0
- package/dist/cjs/components/Toast/Toast.cjs +2 -0
- package/dist/cjs/components/Toast/Toast.cjs.map +1 -0
- package/dist/cjs/components/Toggle/Toggle.cjs +2 -0
- package/dist/cjs/components/Toggle/Toggle.cjs.map +1 -0
- package/dist/cjs/components/Tooltip/Tooltip.cjs +2 -0
- package/dist/cjs/components/Tooltip/Tooltip.cjs.map +1 -0
- package/dist/cjs/components/Tour/Tour.cjs +2 -0
- package/dist/cjs/components/Tour/Tour.cjs.map +1 -0
- package/dist/cjs/components/Tour/TourWrapper.cjs +2 -0
- package/dist/cjs/components/Tour/TourWrapper.cjs.map +1 -0
- package/dist/cjs/components/Tour/index.cjs +2 -0
- package/dist/cjs/components/Tour/index.cjs.map +1 -0
- package/dist/cjs/components/Upload/Upload.cjs +4 -0
- package/dist/cjs/components/Upload/Upload.cjs.map +1 -0
- package/dist/cjs/components/WheelColumn.cjs +2 -0
- package/dist/cjs/components/WheelColumn.cjs.map +1 -0
- package/dist/cjs/constants/common.cjs +2 -0
- package/dist/cjs/constants/common.cjs.map +1 -0
- package/dist/cjs/favicon.ico +0 -0
- package/dist/cjs/hooks/use-callback-ref.cjs +2 -0
- package/dist/cjs/hooks/use-callback-ref.cjs.map +1 -0
- package/dist/cjs/hooks/use-debounced-callback.cjs +2 -0
- package/dist/cjs/hooks/use-debounced-callback.cjs.map +1 -0
- package/dist/cjs/hooks/use-debounced-value.cjs +2 -0
- package/dist/cjs/hooks/use-debounced-value.cjs.map +1 -0
- package/dist/cjs/hooks/use-event-listener.cjs +2 -0
- package/dist/cjs/hooks/use-event-listener.cjs.map +1 -0
- package/dist/cjs/hooks/use-intersection-observer.cjs +2 -0
- package/dist/cjs/hooks/use-intersection-observer.cjs.map +1 -0
- package/dist/cjs/hooks/use-isomorphic-layout-effect.cjs +2 -0
- package/dist/cjs/hooks/use-isomorphic-layout-effect.cjs.map +1 -0
- package/dist/cjs/hooks/use-media-query.cjs +2 -0
- package/dist/cjs/hooks/use-media-query.cjs.map +1 -0
- package/dist/cjs/hooks/use-on-click-outside.cjs +2 -0
- package/dist/cjs/hooks/use-on-click-outside.cjs.map +1 -0
- package/dist/cjs/hooks/use-script.cjs +2 -0
- package/dist/cjs/hooks/use-script.cjs.map +1 -0
- package/dist/cjs/hooks/use-scroll-lock.cjs +2 -0
- package/dist/cjs/hooks/use-scroll-lock.cjs.map +1 -0
- package/dist/cjs/image.png +0 -0
- package/dist/cjs/index.cjs +2 -0
- package/dist/cjs/index.cjs.map +1 -0
- package/dist/cjs/lib/TextAnimation/BlurText.cjs +2 -0
- package/dist/cjs/lib/TextAnimation/BlurText.cjs.map +1 -0
- package/dist/cjs/lib/TextAnimation/CircularText.cjs +2 -0
- package/dist/cjs/lib/TextAnimation/CircularText.cjs.map +1 -0
- package/dist/cjs/lib/TextAnimation/FlipWords.cjs +2 -0
- package/dist/cjs/lib/TextAnimation/FlipWords.cjs.map +1 -0
- package/dist/cjs/lib/TextAnimation/GradientText.cjs +2 -0
- package/dist/cjs/lib/TextAnimation/GradientText.cjs.map +1 -0
- package/dist/cjs/lib/TextAnimation/RollingText.cjs +2 -0
- package/dist/cjs/lib/TextAnimation/RollingText.cjs.map +1 -0
- package/dist/cjs/lib/TextAnimation/RotatingText.cjs +2 -0
- package/dist/cjs/lib/TextAnimation/RotatingText.cjs.map +1 -0
- package/dist/cjs/lib/TextAnimation/ShimmeringText.cjs +2 -0
- package/dist/cjs/lib/TextAnimation/ShimmeringText.cjs.map +1 -0
- package/dist/cjs/lib/TextAnimation/SplittingText.cjs +2 -0
- package/dist/cjs/lib/TextAnimation/SplittingText.cjs.map +1 -0
- package/dist/cjs/lib/TextAnimation/TextGenerateEffect.cjs +2 -0
- package/dist/cjs/lib/TextAnimation/TextGenerateEffect.cjs.map +1 -0
- package/dist/cjs/lib/TextAnimation/TextHoverEffect.cjs +2 -0
- package/dist/cjs/lib/TextAnimation/TextHoverEffect.cjs.map +1 -0
- package/dist/cjs/lib/TextAnimation/TextPressureEffect.cjs +22 -0
- package/dist/cjs/lib/TextAnimation/TextPressureEffect.cjs.map +1 -0
- package/dist/cjs/lib/TextAnimation/TypingText.cjs +2 -0
- package/dist/cjs/lib/TextAnimation/TypingText.cjs.map +1 -0
- package/dist/cjs/lib/TextAnimation/WritingText.cjs +2 -0
- package/dist/cjs/lib/TextAnimation/WritingText.cjs.map +1 -0
- package/dist/cjs/node_modules/.pnpm/react-viewer@3.2.2/node_modules/react-viewer/dist/index.cjs +253 -0
- package/dist/cjs/node_modules/.pnpm/react-viewer@3.2.2/node_modules/react-viewer/dist/index.cjs.map +1 -0
- package/dist/cjs/node_modules/.pnpm/viewerjs@1.11.7/node_modules/viewerjs/dist/viewer.css +1 -0
- package/dist/cjs/styles/animation.css +1 -0
- package/dist/cjs/styles/index.css +1 -0
- package/dist/cjs/styles/theme.css +1 -0
- package/dist/cjs/utils/animations.cjs +2 -0
- package/dist/cjs/utils/animations.cjs.map +1 -0
- package/dist/cjs/utils/css.cjs +2 -0
- package/dist/cjs/utils/css.cjs.map +1 -0
- package/dist/cjs/utils/data-table.cjs +2 -0
- package/dist/cjs/utils/data-table.cjs.map +1 -0
- package/dist/cjs/utils/datetime.cjs +2 -0
- package/dist/cjs/utils/datetime.cjs.map +1 -0
- package/dist/cjs/vite.svg +1 -0
- package/dist/cjs/wave.png +0 -0
- package/dist/esm/_virtual/_commonjsHelpers.js +7 -0
- package/dist/esm/_virtual/_commonjsHelpers.js.map +1 -0
- package/dist/esm/_virtual/index.js +8 -0
- package/dist/esm/_virtual/index.js.map +1 -0
- package/dist/esm/_virtual/index2.js +5 -0
- package/dist/esm/_virtual/index2.js.map +1 -0
- package/dist/esm/components/Accordion/Accordion.js +190 -0
- package/dist/esm/components/Accordion/Accordion.js.map +1 -0
- package/dist/esm/components/Avatar/Avatar.js +93 -0
- package/dist/esm/components/Avatar/Avatar.js.map +1 -0
- package/dist/esm/components/Badge/Badge.js +35 -0
- package/dist/esm/components/Badge/Badge.js.map +1 -0
- package/dist/esm/components/Breadcrumb/Breadcrumb.js +102 -0
- package/dist/esm/components/Breadcrumb/Breadcrumb.js.map +1 -0
- package/dist/esm/components/Button/Button.js +53 -0
- package/dist/esm/components/Button/Button.js.map +1 -0
- package/dist/esm/components/Button/ButtonGroup.js +53 -0
- package/dist/esm/components/Button/ButtonGroup.js.map +1 -0
- package/dist/esm/components/Calendar/Calendar.js +40 -0
- package/dist/esm/components/Calendar/Calendar.js.map +1 -0
- package/dist/esm/components/Carousel/Carousel.js +510 -0
- package/dist/esm/components/Carousel/Carousel.js.map +1 -0
- package/dist/esm/components/Checkbox/Checkbox.js +79 -0
- package/dist/esm/components/Checkbox/Checkbox.js.map +1 -0
- package/dist/esm/components/Collapsible/Collapsible.js +107 -0
- package/dist/esm/components/Collapsible/Collapsible.js.map +1 -0
- package/dist/esm/components/Command/Command.js +113 -0
- package/dist/esm/components/Command/Command.js.map +1 -0
- package/dist/esm/components/Command/index.js +16 -0
- package/dist/esm/components/Command/index.js.map +1 -0
- package/dist/esm/components/ContextMenu/ContextMenu.js +131 -0
- package/dist/esm/components/ContextMenu/ContextMenu.js.map +1 -0
- package/dist/esm/components/ContextMenu/index.js +24 -0
- package/dist/esm/components/ContextMenu/index.js.map +1 -0
- package/dist/esm/components/Cropper/Cropper.js +1014 -0
- package/dist/esm/components/Cropper/Cropper.js.map +1 -0
- package/dist/esm/components/Cropper/CropperTool.js +157 -0
- package/dist/esm/components/Cropper/CropperTool.js.map +1 -0
- package/dist/esm/components/Cropper/utils.js +108 -0
- package/dist/esm/components/Cropper/utils.js.map +1 -0
- package/dist/esm/components/DatePicker/DatePicker.js +263 -0
- package/dist/esm/components/DatePicker/DatePicker.js.map +1 -0
- package/dist/esm/components/DatePicker/RangePicker.js +456 -0
- package/dist/esm/components/DatePicker/RangePicker.js.map +1 -0
- package/dist/esm/components/DatePicker/TimePicker.js +444 -0
- package/dist/esm/components/DatePicker/TimePicker.js.map +1 -0
- package/dist/esm/components/Dialog/Dialog.js +223 -0
- package/dist/esm/components/Dialog/Dialog.js.map +1 -0
- package/dist/esm/components/DropdownMenu/DropdownMenu.js +196 -0
- package/dist/esm/components/DropdownMenu/DropdownMenu.js.map +1 -0
- package/dist/esm/components/DropdownMenu/index.js +24 -0
- package/dist/esm/components/DropdownMenu/index.js.map +1 -0
- package/dist/esm/components/FloatLabel.js +59 -0
- package/dist/esm/components/FloatLabel.js.map +1 -0
- package/dist/esm/components/Glass/Glass.js +93 -0
- package/dist/esm/components/Glass/Glass.js.map +1 -0
- package/dist/esm/components/ImageViewer/ImageViewer.css +1 -0
- package/dist/esm/components/ImageViewer/ImageViewer.js +273 -0
- package/dist/esm/components/ImageViewer/ImageViewer.js.map +1 -0
- package/dist/esm/components/Input/Input.js +267 -0
- package/dist/esm/components/Input/Input.js.map +1 -0
- package/dist/esm/components/InputOTP/InputOTP.js +70 -0
- package/dist/esm/components/InputOTP/InputOTP.js.map +1 -0
- package/dist/esm/components/Interactive/CursorFollow.js +257 -0
- package/dist/esm/components/Interactive/CursorFollow.js.map +1 -0
- package/dist/esm/components/Marquee/Marquee.js +419 -0
- package/dist/esm/components/Marquee/Marquee.js.map +1 -0
- package/dist/esm/components/Marquee/MarqueeWrapper.js +25 -0
- package/dist/esm/components/Marquee/MarqueeWrapper.js.map +1 -0
- package/dist/esm/components/Marquee/index.js +15 -0
- package/dist/esm/components/Marquee/index.js.map +1 -0
- package/dist/esm/components/Masonry/Masonry.js +840 -0
- package/dist/esm/components/Masonry/Masonry.js.map +1 -0
- package/dist/esm/components/Masonry/MasonryWrapper.js +19 -0
- package/dist/esm/components/Masonry/MasonryWrapper.js.map +1 -0
- package/dist/esm/components/Pagination/Pagination.js +209 -0
- package/dist/esm/components/Pagination/Pagination.js.map +1 -0
- package/dist/esm/components/Pagination/index.js +14 -0
- package/dist/esm/components/Pagination/index.js.map +1 -0
- package/dist/esm/components/Popover/Popover.js +51 -0
- package/dist/esm/components/Popover/Popover.js.map +1 -0
- package/dist/esm/components/Popover/index.js +9 -0
- package/dist/esm/components/Popover/index.js.map +1 -0
- package/dist/esm/components/QrCode/QrCode.js +300 -0
- package/dist/esm/components/QrCode/QrCode.js.map +1 -0
- package/dist/esm/components/QrCode/index.js +16 -0
- package/dist/esm/components/QrCode/index.js.map +1 -0
- package/dist/esm/components/Radio/Radio.js +74 -0
- package/dist/esm/components/Radio/Radio.js.map +1 -0
- package/dist/esm/components/Rate/Rate.js +191 -0
- package/dist/esm/components/Rate/Rate.js.map +1 -0
- package/dist/esm/components/Resizable/Resizable.js +89 -0
- package/dist/esm/components/Resizable/Resizable.js.map +1 -0
- package/dist/esm/components/ScrollArea/ScrollArea.js +45 -0
- package/dist/esm/components/ScrollArea/ScrollArea.js.map +1 -0
- package/dist/esm/components/Select/Select.js +199 -0
- package/dist/esm/components/Select/Select.js.map +1 -0
- package/dist/esm/components/Separator/Separator.js +7 -0
- package/dist/esm/components/Separator/Separator.js.map +1 -0
- package/dist/esm/components/Sheet/Sheet.js +141 -0
- package/dist/esm/components/Sheet/Sheet.js.map +1 -0
- package/dist/esm/components/Sidebar/Sidebar.js +30 -0
- package/dist/esm/components/Sidebar/Sidebar.js.map +1 -0
- package/dist/esm/components/Skeleton/Skeleton.js +12 -0
- package/dist/esm/components/Skeleton/Skeleton.js.map +1 -0
- package/dist/esm/components/Slider/Slider.js +420 -0
- package/dist/esm/components/Slider/Slider.js.map +1 -0
- package/dist/esm/components/Stepper/Stepper.js +886 -0
- package/dist/esm/components/Stepper/Stepper.js.map +1 -0
- package/dist/esm/components/Stepper/StepperWrapper.js +80 -0
- package/dist/esm/components/Stepper/StepperWrapper.js.map +1 -0
- package/dist/esm/components/Stepper/index.js +21 -0
- package/dist/esm/components/Stepper/index.js.map +1 -0
- package/dist/esm/components/Switch/Switch.js +126 -0
- package/dist/esm/components/Switch/Switch.js.map +1 -0
- package/dist/esm/components/Table/TableFilter/data-table-date-filter.js +126 -0
- package/dist/esm/components/Table/TableFilter/data-table-date-filter.js.map +1 -0
- package/dist/esm/components/Table/TableFilter/data-table-filter-popover.js +138 -0
- package/dist/esm/components/Table/TableFilter/data-table-filter-popover.js.map +1 -0
- package/dist/esm/components/Table/TableFilter/data-table-slider-filter.js +164 -0
- package/dist/esm/components/Table/TableFilter/data-table-slider-filter.js.map +1 -0
- package/dist/esm/components/Table/data-table-column-header.js +82 -0
- package/dist/esm/components/Table/data-table-column-header.js.map +1 -0
- package/dist/esm/components/Table/data-table-pagination.js +73 -0
- package/dist/esm/components/Table/data-table-pagination.js.map +1 -0
- package/dist/esm/components/Table/data-table.js +94 -0
- package/dist/esm/components/Table/data-table.js.map +1 -0
- package/dist/esm/components/Tabs/Tabs.js +540 -0
- package/dist/esm/components/Tabs/Tabs.js.map +1 -0
- package/dist/esm/components/Tabs/classes.js +345 -0
- package/dist/esm/components/Tabs/classes.js.map +1 -0
- package/dist/esm/components/Textarea/Textarea.js +132 -0
- package/dist/esm/components/Textarea/Textarea.js.map +1 -0
- package/dist/esm/components/TimeGridView.js +101 -0
- package/dist/esm/components/TimeGridView.js.map +1 -0
- package/dist/esm/components/Toast/Toast.js +80 -0
- package/dist/esm/components/Toast/Toast.js.map +1 -0
- package/dist/esm/components/Toggle/Toggle.js +23 -0
- package/dist/esm/components/Toggle/Toggle.js.map +1 -0
- package/dist/esm/components/Tooltip/Tooltip.js +120 -0
- package/dist/esm/components/Tooltip/Tooltip.js.map +1 -0
- package/dist/esm/components/Tour/Tour.js +948 -0
- package/dist/esm/components/Tour/Tour.js.map +1 -0
- package/dist/esm/components/Tour/TourWrapper.js +67 -0
- package/dist/esm/components/Tour/TourWrapper.js.map +1 -0
- package/dist/esm/components/Tour/index.js +38 -0
- package/dist/esm/components/Tour/index.js.map +1 -0
- package/dist/esm/components/Upload/Upload.js +948 -0
- package/dist/esm/components/Upload/Upload.js.map +1 -0
- package/dist/esm/components/WheelColumn.js +127 -0
- package/dist/esm/components/WheelColumn.js.map +1 -0
- package/dist/esm/constants/common.js +5 -0
- package/dist/esm/constants/common.js.map +1 -0
- package/dist/esm/favicon.ico +0 -0
- package/dist/esm/hooks/use-callback-ref.js +14 -0
- package/dist/esm/hooks/use-callback-ref.js.map +1 -0
- package/dist/esm/hooks/use-debounced-callback.js +21 -0
- package/dist/esm/hooks/use-debounced-callback.js.map +1 -0
- package/dist/esm/hooks/use-debounced-value.js +12 -0
- package/dist/esm/hooks/use-debounced-value.js.map +1 -0
- package/dist/esm/hooks/use-event-listener.js +21 -0
- package/dist/esm/hooks/use-event-listener.js.map +1 -0
- package/dist/esm/hooks/use-intersection-observer.js +56 -0
- package/dist/esm/hooks/use-intersection-observer.js.map +1 -0
- package/dist/esm/hooks/use-isomorphic-layout-effect.js +6 -0
- package/dist/esm/hooks/use-isomorphic-layout-effect.js.map +1 -0
- package/dist/esm/hooks/use-media-query.js +22 -0
- package/dist/esm/hooks/use-media-query.js.map +1 -0
- package/dist/esm/hooks/use-on-click-outside.js +18 -0
- package/dist/esm/hooks/use-on-click-outside.js.map +1 -0
- package/dist/esm/hooks/use-script.js +46 -0
- package/dist/esm/hooks/use-script.js.map +1 -0
- package/dist/esm/hooks/use-scroll-lock.js +27 -0
- package/dist/esm/hooks/use-scroll-lock.js.map +1 -0
- package/dist/esm/image.png +0 -0
- package/dist/esm/index.js +223 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/lib/TextAnimation/BlurText.js +84 -0
- package/dist/esm/lib/TextAnimation/BlurText.js.map +1 -0
- package/dist/esm/lib/TextAnimation/CircularText.js +96 -0
- package/dist/esm/lib/TextAnimation/CircularText.js.map +1 -0
- package/dist/esm/lib/TextAnimation/FlipWords.js +103 -0
- package/dist/esm/lib/TextAnimation/FlipWords.js.map +1 -0
- package/dist/esm/lib/TextAnimation/GradientText.js +54 -0
- package/dist/esm/lib/TextAnimation/GradientText.js.map +1 -0
- package/dist/esm/lib/TextAnimation/RollingText.js +70 -0
- package/dist/esm/lib/TextAnimation/RollingText.js.map +1 -0
- package/dist/esm/lib/TextAnimation/RotatingText.js +38 -0
- package/dist/esm/lib/TextAnimation/RotatingText.js.map +1 -0
- package/dist/esm/lib/TextAnimation/ShimmeringText.js +64 -0
- package/dist/esm/lib/TextAnimation/ShimmeringText.js.map +1 -0
- package/dist/esm/lib/TextAnimation/SplittingText.js +86 -0
- package/dist/esm/lib/TextAnimation/SplittingText.js.map +1 -0
- package/dist/esm/lib/TextAnimation/TextGenerateEffect.js +59 -0
- package/dist/esm/lib/TextAnimation/TextGenerateEffect.js.map +1 -0
- package/dist/esm/lib/TextAnimation/TextHoverEffect.js +128 -0
- package/dist/esm/lib/TextAnimation/TextHoverEffect.js.map +1 -0
- package/dist/esm/lib/TextAnimation/TextPressureEffect.js +135 -0
- package/dist/esm/lib/TextAnimation/TextPressureEffect.js.map +1 -0
- package/dist/esm/lib/TextAnimation/TypingText.js +118 -0
- package/dist/esm/lib/TextAnimation/TypingText.js.map +1 -0
- package/dist/esm/lib/TextAnimation/WritingText.js +45 -0
- package/dist/esm/lib/TextAnimation/WritingText.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/react-viewer@3.2.2/node_modules/react-viewer/dist/index.js +865 -0
- package/dist/esm/node_modules/.pnpm/react-viewer@3.2.2/node_modules/react-viewer/dist/index.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/viewerjs@1.11.7/node_modules/viewerjs/dist/viewer.css +1 -0
- package/dist/esm/styles/animation.css +1 -0
- package/dist/esm/styles/index.css +1 -0
- package/dist/esm/styles/theme.css +1 -0
- package/dist/esm/utils/animations.js +189 -0
- package/dist/esm/utils/animations.js.map +1 -0
- package/dist/esm/utils/css.js +25 -0
- package/dist/esm/utils/css.js.map +1 -0
- package/dist/esm/utils/data-table.js +20 -0
- package/dist/esm/utils/data-table.js.map +1 -0
- package/dist/esm/utils/datetime.js +17 -0
- package/dist/esm/utils/datetime.js.map +1 -0
- package/dist/esm/vite.svg +1 -0
- package/dist/esm/wave.png +0 -0
- package/dist/types/components/Accordion/Accordion.d.ts +49 -0
- package/dist/types/components/Accordion/Accordion.d.ts.map +1 -0
- package/dist/types/components/Accordion/index.d.ts +3 -0
- package/dist/types/components/Accordion/index.d.ts.map +1 -0
- package/dist/types/components/Avatar/Avatar.d.ts +18 -0
- package/dist/types/components/Avatar/Avatar.d.ts.map +1 -0
- package/dist/types/components/Avatar/index.d.ts +3 -0
- package/dist/types/components/Avatar/index.d.ts.map +1 -0
- package/dist/types/components/Badge/Badge.d.ts +10 -0
- package/dist/types/components/Badge/Badge.d.ts.map +1 -0
- package/dist/types/components/Badge/index.d.ts +2 -0
- package/dist/types/components/Badge/index.d.ts.map +1 -0
- package/dist/types/components/Breadcrumb/Breadcrumb.d.ts +23 -0
- package/dist/types/components/Breadcrumb/Breadcrumb.d.ts.map +1 -0
- package/dist/types/components/Breadcrumb/index.d.ts +2 -0
- package/dist/types/components/Breadcrumb/index.d.ts.map +1 -0
- package/dist/types/components/Button/Button.d.ts +10 -0
- package/dist/types/components/Button/Button.d.ts.map +1 -0
- package/dist/types/components/Button/ButtonGroup.d.ts +16 -0
- package/dist/types/components/Button/ButtonGroup.d.ts.map +1 -0
- package/dist/types/components/Button/index.d.ts +5 -0
- package/dist/types/components/Button/index.d.ts.map +1 -0
- package/dist/types/components/Calendar/Calendar.d.ts +15 -0
- package/dist/types/components/Calendar/Calendar.d.ts.map +1 -0
- package/dist/types/components/Calendar/index.d.ts +3 -0
- package/dist/types/components/Calendar/index.d.ts.map +1 -0
- package/dist/types/components/Carousel/Carousel.d.ts +79 -0
- package/dist/types/components/Carousel/Carousel.d.ts.map +1 -0
- package/dist/types/components/Carousel/index.d.ts +4 -0
- package/dist/types/components/Carousel/index.d.ts.map +1 -0
- package/dist/types/components/Checkbox/Checkbox.d.ts +15 -0
- package/dist/types/components/Checkbox/Checkbox.d.ts.map +1 -0
- package/dist/types/components/Checkbox/index.d.ts +2 -0
- package/dist/types/components/Checkbox/index.d.ts.map +1 -0
- package/dist/types/components/Collapsible/Collapsible.d.ts +17 -0
- package/dist/types/components/Collapsible/Collapsible.d.ts.map +1 -0
- package/dist/types/components/Collapsible/index.d.ts +2 -0
- package/dist/types/components/Collapsible/index.d.ts.map +1 -0
- package/dist/types/components/Command/Command.d.ts +39 -0
- package/dist/types/components/Command/Command.d.ts.map +1 -0
- package/dist/types/components/Command/index.d.ts +15 -0
- package/dist/types/components/Command/index.d.ts.map +1 -0
- package/dist/types/components/ContextMenu/ContextMenu.d.ts +64 -0
- package/dist/types/components/ContextMenu/ContextMenu.d.ts.map +1 -0
- package/dist/types/components/ContextMenu/index.d.ts +23 -0
- package/dist/types/components/ContextMenu/index.d.ts.map +1 -0
- package/dist/types/components/Cropper/Cropper.d.ts +86 -0
- package/dist/types/components/Cropper/Cropper.d.ts.map +1 -0
- package/dist/types/components/Cropper/CropperTool.d.ts +149 -0
- package/dist/types/components/Cropper/CropperTool.d.ts.map +1 -0
- package/dist/types/components/Cropper/index.d.ts +4 -0
- package/dist/types/components/Cropper/index.d.ts.map +1 -0
- package/dist/types/components/Cropper/utils.d.ts +130 -0
- package/dist/types/components/Cropper/utils.d.ts.map +1 -0
- package/dist/types/components/DatePicker/DatePicker.d.ts +56 -0
- package/dist/types/components/DatePicker/DatePicker.d.ts.map +1 -0
- package/dist/types/components/DatePicker/RangePicker.d.ts +42 -0
- package/dist/types/components/DatePicker/RangePicker.d.ts.map +1 -0
- package/dist/types/components/DatePicker/TimePicker.d.ts +43 -0
- package/dist/types/components/DatePicker/TimePicker.d.ts.map +1 -0
- package/dist/types/components/DatePicker/index.d.ts +7 -0
- package/dist/types/components/DatePicker/index.d.ts.map +1 -0
- package/dist/types/components/Dialog/Dialog.d.ts +45 -0
- package/dist/types/components/Dialog/Dialog.d.ts.map +1 -0
- package/dist/types/components/Dialog/index.d.ts +2 -0
- package/dist/types/components/Dialog/index.d.ts.map +1 -0
- package/dist/types/components/DropdownMenu/DropdownMenu.d.ts +65 -0
- package/dist/types/components/DropdownMenu/DropdownMenu.d.ts.map +1 -0
- package/dist/types/components/DropdownMenu/index.d.ts +22 -0
- package/dist/types/components/DropdownMenu/index.d.ts.map +1 -0
- package/dist/types/components/FloatLabel.d.ts +8 -0
- package/dist/types/components/FloatLabel.d.ts.map +1 -0
- package/dist/types/components/Glass/Glass.d.ts +10 -0
- package/dist/types/components/Glass/Glass.d.ts.map +1 -0
- package/dist/types/components/Glass/index.d.ts +2 -0
- package/dist/types/components/Glass/index.d.ts.map +1 -0
- package/dist/types/components/ImageViewer/ImageViewer.d.ts +58 -0
- package/dist/types/components/ImageViewer/ImageViewer.d.ts.map +1 -0
- package/dist/types/components/ImageViewer/index.d.ts +4 -0
- package/dist/types/components/ImageViewer/index.d.ts.map +1 -0
- package/dist/types/components/Input/Input.d.ts +27 -0
- package/dist/types/components/Input/Input.d.ts.map +1 -0
- package/dist/types/components/Input/index.d.ts +2 -0
- package/dist/types/components/Input/index.d.ts.map +1 -0
- package/dist/types/components/InputOTP/InputOTP.d.ts +20 -0
- package/dist/types/components/InputOTP/InputOTP.d.ts.map +1 -0
- package/dist/types/components/InputOTP/index.d.ts +2 -0
- package/dist/types/components/InputOTP/index.d.ts.map +1 -0
- package/dist/types/components/Interactive/3DCard.d.ts +28 -0
- package/dist/types/components/Interactive/3DCard.d.ts.map +1 -0
- package/dist/types/components/Interactive/3DMarquee.d.ts +20 -0
- package/dist/types/components/Interactive/3DMarquee.d.ts.map +1 -0
- package/dist/types/components/Interactive/CursorFollow.d.ts +75 -0
- package/dist/types/components/Interactive/CursorFollow.d.ts.map +1 -0
- package/dist/types/components/Interactive/index.cursor.d.ts +7 -0
- package/dist/types/components/Interactive/index.cursor.d.ts.map +1 -0
- package/dist/types/components/Interactive/index.d.ts +2 -0
- package/dist/types/components/Interactive/index.d.ts.map +1 -0
- package/dist/types/components/Label/Label.d.ts +3 -0
- package/dist/types/components/Label/Label.d.ts.map +1 -0
- package/dist/types/components/Label/index.d.ts +2 -0
- package/dist/types/components/Label/index.d.ts.map +1 -0
- package/dist/types/components/Marquee/Marquee.d.ts +31 -0
- package/dist/types/components/Marquee/Marquee.d.ts.map +1 -0
- package/dist/types/components/Marquee/MarqueeWrapper.d.ts +10 -0
- package/dist/types/components/Marquee/MarqueeWrapper.d.ts.map +1 -0
- package/dist/types/components/Marquee/index.d.ts +13 -0
- package/dist/types/components/Marquee/index.d.ts.map +1 -0
- package/dist/types/components/Masonry/Masonry.d.ts +41 -0
- package/dist/types/components/Masonry/Masonry.d.ts.map +1 -0
- package/dist/types/components/Masonry/MasonryWrapper.d.ts +29 -0
- package/dist/types/components/Masonry/MasonryWrapper.d.ts.map +1 -0
- package/dist/types/components/Masonry/index.d.ts +5 -0
- package/dist/types/components/Masonry/index.d.ts.map +1 -0
- package/dist/types/components/Pagination/Pagination.d.ts +24 -0
- package/dist/types/components/Pagination/Pagination.d.ts.map +1 -0
- package/dist/types/components/Pagination/index.d.ts +11 -0
- package/dist/types/components/Pagination/index.d.ts.map +1 -0
- package/dist/types/components/Popover/Popover.d.ts +22 -0
- package/dist/types/components/Popover/Popover.d.ts.map +1 -0
- package/dist/types/components/Popover/index.d.ts +5 -0
- package/dist/types/components/Popover/index.d.ts.map +1 -0
- package/dist/types/components/QrCode/QrCode.d.ts +51 -0
- package/dist/types/components/QrCode/QrCode.d.ts.map +1 -0
- package/dist/types/components/QrCode/index.d.ts +13 -0
- package/dist/types/components/QrCode/index.d.ts.map +1 -0
- package/dist/types/components/Radio/Radio.d.ts +35 -0
- package/dist/types/components/Radio/Radio.d.ts.map +1 -0
- package/dist/types/components/Radio/index.d.ts +2 -0
- package/dist/types/components/Radio/index.d.ts.map +1 -0
- package/dist/types/components/Rate/Rate.d.ts +26 -0
- package/dist/types/components/Rate/Rate.d.ts.map +1 -0
- package/dist/types/components/Rate/index.d.ts +3 -0
- package/dist/types/components/Rate/index.d.ts.map +1 -0
- package/dist/types/components/Resizable/Resizable.d.ts +71 -0
- package/dist/types/components/Resizable/Resizable.d.ts.map +1 -0
- package/dist/types/components/Resizable/index.d.ts +4 -0
- package/dist/types/components/Resizable/index.d.ts.map +1 -0
- package/dist/types/components/ScrollArea/ScrollArea.d.ts +19 -0
- package/dist/types/components/ScrollArea/ScrollArea.d.ts.map +1 -0
- package/dist/types/components/ScrollArea/index.d.ts +2 -0
- package/dist/types/components/ScrollArea/index.d.ts.map +1 -0
- package/dist/types/components/Select/Select.d.ts +33 -0
- package/dist/types/components/Select/Select.d.ts.map +1 -0
- package/dist/types/components/Select/index.d.ts +2 -0
- package/dist/types/components/Select/index.d.ts.map +1 -0
- package/dist/types/components/Separator/Separator.d.ts +5 -0
- package/dist/types/components/Separator/Separator.d.ts.map +1 -0
- package/dist/types/components/Separator/index.d.ts +2 -0
- package/dist/types/components/Separator/index.d.ts.map +1 -0
- package/dist/types/components/Sheet/Sheet.d.ts +36 -0
- package/dist/types/components/Sheet/Sheet.d.ts.map +1 -0
- package/dist/types/components/Sheet/index.d.ts +2 -0
- package/dist/types/components/Sheet/index.d.ts.map +1 -0
- package/dist/types/components/Sidebar/Sidebar.d.ts +50 -0
- package/dist/types/components/Sidebar/Sidebar.d.ts.map +1 -0
- package/dist/types/components/Sidebar/index.d.ts +4 -0
- package/dist/types/components/Sidebar/index.d.ts.map +1 -0
- package/dist/types/components/Skeleton/Skeleton.d.ts +6 -0
- package/dist/types/components/Skeleton/Skeleton.d.ts.map +1 -0
- package/dist/types/components/Skeleton/index.d.ts +2 -0
- package/dist/types/components/Skeleton/index.d.ts.map +1 -0
- package/dist/types/components/Slider/Slider.d.ts +25 -0
- package/dist/types/components/Slider/Slider.d.ts.map +1 -0
- package/dist/types/components/Slider/index.d.ts +2 -0
- package/dist/types/components/Slider/index.d.ts.map +1 -0
- package/dist/types/components/Stepper/Stepper.d.ts +86 -0
- package/dist/types/components/Stepper/Stepper.d.ts.map +1 -0
- package/dist/types/components/Stepper/StepperWrapper.d.ts +25 -0
- package/dist/types/components/Stepper/StepperWrapper.d.ts.map +1 -0
- package/dist/types/components/Stepper/index.d.ts +18 -0
- package/dist/types/components/Stepper/index.d.ts.map +1 -0
- package/dist/types/components/Switch/Switch.d.ts +14 -0
- package/dist/types/components/Switch/Switch.d.ts.map +1 -0
- package/dist/types/components/Switch/index.d.ts +2 -0
- package/dist/types/components/Switch/index.d.ts.map +1 -0
- package/dist/types/components/Table/TableFilter/data-table-date-filter.d.ts +9 -0
- package/dist/types/components/Table/TableFilter/data-table-date-filter.d.ts.map +1 -0
- package/dist/types/components/Table/TableFilter/data-table-filter-popover.d.ts +11 -0
- package/dist/types/components/Table/TableFilter/data-table-filter-popover.d.ts.map +1 -0
- package/dist/types/components/Table/TableFilter/data-table-slider-filter.d.ts +8 -0
- package/dist/types/components/Table/TableFilter/data-table-slider-filter.d.ts.map +1 -0
- package/dist/types/components/Table/TableWrapper.d.ts +2 -0
- package/dist/types/components/Table/TableWrapper.d.ts.map +1 -0
- package/dist/types/components/Table/data-table-column-header.d.ts +9 -0
- package/dist/types/components/Table/data-table-column-header.d.ts.map +1 -0
- package/dist/types/components/Table/data-table-pagination.d.ts +12 -0
- package/dist/types/components/Table/data-table-pagination.d.ts.map +1 -0
- package/dist/types/components/Table/data-table-toolbar.d.ts +10 -0
- package/dist/types/components/Table/data-table-toolbar.d.ts.map +1 -0
- package/dist/types/components/Table/data-table-view-options.d.ts +9 -0
- package/dist/types/components/Table/data-table-view-options.d.ts.map +1 -0
- package/dist/types/components/Table/data-table.d.ts +18 -0
- package/dist/types/components/Table/data-table.d.ts.map +1 -0
- package/dist/types/components/Table/index.d.ts +2 -0
- package/dist/types/components/Table/index.d.ts.map +1 -0
- package/dist/types/components/Table/select-column.d.ts +5 -0
- package/dist/types/components/Table/select-column.d.ts.map +1 -0
- package/dist/types/components/Tabs/Tabs.d.ts +22 -0
- package/dist/types/components/Tabs/Tabs.d.ts.map +1 -0
- package/dist/types/components/Tabs/classes.d.ts +29 -0
- package/dist/types/components/Tabs/classes.d.ts.map +1 -0
- package/dist/types/components/Tabs/index.d.ts +4 -0
- package/dist/types/components/Tabs/index.d.ts.map +1 -0
- package/dist/types/components/Tabs/types.d.ts +15 -0
- package/dist/types/components/Tabs/types.d.ts.map +1 -0
- package/dist/types/components/Textarea/Textarea.d.ts +17 -0
- package/dist/types/components/Textarea/Textarea.d.ts.map +1 -0
- package/dist/types/components/Textarea/index.d.ts +2 -0
- package/dist/types/components/Textarea/index.d.ts.map +1 -0
- package/dist/types/components/Theme/ThemeShowcase.d.ts +3 -0
- package/dist/types/components/Theme/ThemeShowcase.d.ts.map +1 -0
- package/dist/types/components/TimeGridView.d.ts +15 -0
- package/dist/types/components/TimeGridView.d.ts.map +1 -0
- package/dist/types/components/Toast/Toast.d.ts +12 -0
- package/dist/types/components/Toast/Toast.d.ts.map +1 -0
- package/dist/types/components/Toast/index.d.ts +3 -0
- package/dist/types/components/Toast/index.d.ts.map +1 -0
- package/dist/types/components/Toggle/Toggle.d.ts +10 -0
- package/dist/types/components/Toggle/Toggle.d.ts.map +1 -0
- package/dist/types/components/Toggle/index.d.ts +2 -0
- package/dist/types/components/Toggle/index.d.ts.map +1 -0
- package/dist/types/components/Tooltip/Tooltip.d.ts +19 -0
- package/dist/types/components/Tooltip/Tooltip.d.ts.map +1 -0
- package/dist/types/components/Tooltip/index.d.ts +3 -0
- package/dist/types/components/Tooltip/index.d.ts.map +1 -0
- package/dist/types/components/Tour/Tour.d.ts +105 -0
- package/dist/types/components/Tour/Tour.d.ts.map +1 -0
- package/dist/types/components/Tour/TourWrapper.d.ts +46 -0
- package/dist/types/components/Tour/TourWrapper.d.ts.map +1 -0
- package/dist/types/components/Tour/index.d.ts +36 -0
- package/dist/types/components/Tour/index.d.ts.map +1 -0
- package/dist/types/components/TreeSelect/TreeSelect.d.ts +2 -0
- package/dist/types/components/TreeSelect/TreeSelect.d.ts.map +1 -0
- package/dist/types/components/TreeSelect/index.d.ts +2 -0
- package/dist/types/components/TreeSelect/index.d.ts.map +1 -0
- package/dist/types/components/Upload/Upload.d.ts +69 -0
- package/dist/types/components/Upload/Upload.d.ts.map +1 -0
- package/dist/types/components/Upload/index.d.ts +2 -0
- package/dist/types/components/Upload/index.d.ts.map +1 -0
- package/dist/types/components/WheelColumn.d.ts +15 -0
- package/dist/types/components/WheelColumn.d.ts.map +1 -0
- package/dist/types/config/data-table.d.ts +125 -0
- package/dist/types/config/data-table.d.ts.map +1 -0
- package/dist/types/constants/common.d.ts +4 -0
- package/dist/types/constants/common.d.ts.map +1 -0
- package/dist/types/constants/theme.d.ts +13 -0
- package/dist/types/constants/theme.d.ts.map +1 -0
- package/dist/types/hooks/index.d.ts +10 -0
- package/dist/types/hooks/index.d.ts.map +1 -0
- package/dist/types/hooks/use-callback-ref.d.ts +10 -0
- package/dist/types/hooks/use-callback-ref.d.ts.map +1 -0
- package/dist/types/hooks/use-data-table.d.ts +26 -0
- package/dist/types/hooks/use-data-table.d.ts.map +1 -0
- package/dist/types/hooks/use-debounced-callback.d.ts +2 -0
- package/dist/types/hooks/use-debounced-callback.d.ts.map +1 -0
- package/dist/types/hooks/use-debounced-value.d.ts +9 -0
- package/dist/types/hooks/use-debounced-value.d.ts.map +1 -0
- package/dist/types/hooks/use-event-listener.d.ts +7 -0
- package/dist/types/hooks/use-event-listener.d.ts.map +1 -0
- package/dist/types/hooks/use-intersection-observer.d.ts +20 -0
- package/dist/types/hooks/use-intersection-observer.d.ts.map +1 -0
- package/dist/types/hooks/use-isomorphic-layout-effect.d.ts +3 -0
- package/dist/types/hooks/use-isomorphic-layout-effect.d.ts.map +1 -0
- package/dist/types/hooks/use-media-query.d.ts +7 -0
- package/dist/types/hooks/use-media-query.d.ts.map +1 -0
- package/dist/types/hooks/use-mouse-position.d.ts +14 -0
- package/dist/types/hooks/use-mouse-position.d.ts.map +1 -0
- package/dist/types/hooks/use-on-click-outside.d.ts +5 -0
- package/dist/types/hooks/use-on-click-outside.d.ts.map +1 -0
- package/dist/types/hooks/use-script.d.ts +9 -0
- package/dist/types/hooks/use-script.d.ts.map +1 -0
- package/dist/types/hooks/use-scroll-lock.d.ts +13 -0
- package/dist/types/hooks/use-scroll-lock.d.ts.map +1 -0
- package/dist/types/index.d.ts +72 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/lib/TextAnimation/BlurText.d.ts +18 -0
- package/dist/types/lib/TextAnimation/BlurText.d.ts.map +1 -0
- package/dist/types/lib/TextAnimation/CircularText.d.ts +10 -0
- package/dist/types/lib/TextAnimation/CircularText.d.ts.map +1 -0
- package/dist/types/lib/TextAnimation/FlipWords.d.ts +10 -0
- package/dist/types/lib/TextAnimation/FlipWords.d.ts.map +1 -0
- package/dist/types/lib/TextAnimation/GradientText.d.ts +11 -0
- package/dist/types/lib/TextAnimation/GradientText.d.ts.map +1 -0
- package/dist/types/lib/TextAnimation/RollingText.d.ts +12 -0
- package/dist/types/lib/TextAnimation/RollingText.d.ts.map +1 -0
- package/dist/types/lib/TextAnimation/RotatingText.d.ts +11 -0
- package/dist/types/lib/TextAnimation/RotatingText.d.ts.map +1 -0
- package/dist/types/lib/TextAnimation/ShimmeringText.d.ts +12 -0
- package/dist/types/lib/TextAnimation/ShimmeringText.d.ts.map +1 -0
- package/dist/types/lib/TextAnimation/SplittingText.d.ts +26 -0
- package/dist/types/lib/TextAnimation/SplittingText.d.ts.map +1 -0
- package/dist/types/lib/TextAnimation/TextGenerateEffect.d.ts +10 -0
- package/dist/types/lib/TextAnimation/TextGenerateEffect.d.ts.map +1 -0
- package/dist/types/lib/TextAnimation/TextHoverEffect.d.ts +6 -0
- package/dist/types/lib/TextAnimation/TextHoverEffect.d.ts.map +1 -0
- package/dist/types/lib/TextAnimation/TextPressureEffect.d.ts +20 -0
- package/dist/types/lib/TextAnimation/TextPressureEffect.d.ts.map +1 -0
- package/dist/types/lib/TextAnimation/TypingText.d.ts +27 -0
- package/dist/types/lib/TextAnimation/TypingText.d.ts.map +1 -0
- package/dist/types/lib/TextAnimation/WritingText.d.ts +13 -0
- package/dist/types/lib/TextAnimation/WritingText.d.ts.map +1 -0
- package/dist/types/lib/TextAnimation/index.d.ts +16 -0
- package/dist/types/lib/TextAnimation/index.d.ts.map +1 -0
- package/dist/types/types/data-table.d.ts +44 -0
- package/dist/types/types/data-table.d.ts.map +1 -0
- package/dist/types/types/theme.d.ts +11 -0
- package/dist/types/types/theme.d.ts.map +1 -0
- package/dist/types/types/variables.d.ts +6 -0
- package/dist/types/types/variables.d.ts.map +1 -0
- package/dist/types/utils/animations.d.ts +47 -0
- package/dist/types/utils/animations.d.ts.map +1 -0
- package/dist/types/utils/css.d.ts +4 -0
- package/dist/types/utils/css.d.ts.map +1 -0
- package/dist/types/utils/data-table.d.ts +13 -0
- package/dist/types/utils/data-table.d.ts.map +1 -0
- package/dist/types/utils/datetime.d.ts +2 -0
- package/dist/types/utils/datetime.d.ts.map +1 -0
- package/dist/types/utils/parsers.d.ts +38 -0
- package/dist/types/utils/parsers.d.ts.map +1 -0
- package/package.json +968 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Stepper.cjs","sources":["../../../../src/components/Stepper/Stepper.tsx"],"sourcesContent":["\"use client\";\n\nimport { cn, Slot, useComposedRefs } from \"@dsui/ui/index\";\nimport { Check } from \"lucide-react\";\nimport * as React from \"react\";\n\nconst ROOT_NAME = \"Stepper\";\nconst LIST_NAME = \"StepperList\";\nconst ITEM_NAME = \"StepperItem\";\nconst TRIGGER_NAME = \"StepperTrigger\";\nconst INDICATOR_NAME = \"StepperIndicator\";\nconst SEPARATOR_NAME = \"StepperSeparator\";\nconst TITLE_NAME = \"StepperTitle\";\nconst DESCRIPTION_NAME = \"StepperDescription\";\nconst CONTENT_NAME = \"StepperContent\";\nconst PREV_NAME = \"StepperPrev\";\nconst NEXT_NAME = \"StepperNext\";\n\nconst ENTRY_FOCUS = \"stepperFocusGroup.onEntryFocus\";\nconst EVENT_OPTIONS = { bubbles: false, cancelable: true };\nconst ARROW_KEYS = [\"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\"];\n\nconst stepperColorClasses: Record<\n StepperColor,\n {\n indicator: {\n active: string;\n completed: string;\n inactive: string;\n };\n separator: {\n active: string;\n completed: string;\n inactive: string;\n };\n }\n> = {\n primary: {\n indicator: {\n active:\n \"border-primary bg-primary text-primary-foreground data-[variant=dot]:bg-primary/30 data-[variant=dot]:border-primary/0\",\n completed:\n \"border-primary bg-primary text-primary-foreground data-[variant=dot]:bg-primary/30 data-[variant=dot]:border-primary/0\",\n inactive:\n \"border-muted bg-background text-muted-foreground data-[variant=dot]:bg-muted/30 data-[variant=dot]:border-muted/0\",\n },\n separator: {\n active: \"bg-primary\",\n completed: \"bg-primary\",\n inactive: \"bg-border\",\n },\n },\n secondary: {\n indicator: {\n active:\n \"border-secondary bg-secondary text-secondary-foreground data-[variant=dot]:bg-secondary/30 data-[variant=dot]:border-secondary/0\",\n completed:\n \"border-secondary bg-secondary text-secondary-foreground data-[variant=dot]:bg-secondary/30 data-[variant=dot]:border-secondary/0\",\n inactive:\n \"border-muted bg-background text-muted-foreground data-[variant=dot]:bg-muted/30 data-[variant=dot]:border-muted/0\",\n },\n separator: {\n active: \"bg-secondary\",\n completed: \"bg-secondary\",\n inactive: \"bg-border\",\n },\n },\n accent: {\n indicator: {\n active:\n \"border-accent bg-accent text-accent-foreground data-[variant=dot]:bg-accent/30 data-[variant=dot]:border-accent/0\",\n completed:\n \"border-accent bg-accent text-accent-foreground data-[variant=dot]:bg-accent/30 data-[variant=dot]:border-accent/0\",\n inactive:\n \"border-muted bg-background text-muted-foreground data-[variant=dot]:bg-muted/30 data-[variant=dot]:border-muted/0\",\n },\n separator: {\n active: \"bg-accent\",\n completed: \"bg-accent\",\n inactive: \"bg-border\",\n },\n },\n destructive: {\n indicator: {\n active:\n \"border-destructive bg-destructive text-destructive-foreground data-[variant=dot]:bg-destructive/30 data-[variant=dot]:border-destructive/0\",\n completed:\n \"border-destructive bg-destructive text-destructive-foreground data-[variant=dot]:bg-destructive/30 data-[variant=dot]:border-destructive/0\",\n inactive:\n \"border-muted bg-background text-muted-foreground data-[variant=dot]:bg-muted/30 data-[variant=dot]:border-muted/0\",\n },\n separator: {\n active: \"bg-destructive\",\n completed: \"bg-destructive\",\n inactive: \"bg-border\",\n },\n },\n muted: {\n indicator: {\n active:\n \"border-muted bg-muted text-muted-foreground data-[variant=dot]:bg-muted/30 data-[variant=dot]:border-muted/0\",\n completed:\n \"border-muted bg-muted text-muted-foreground data-[variant=dot]:bg-muted/30 data-[variant=dot]:border-muted/0\",\n inactive:\n \"border-muted bg-background text-muted-foreground data-[variant=dot]:bg-muted/30 data-[variant=dot]:border-muted/0\",\n },\n separator: {\n active: \"bg-muted\",\n completed: \"bg-muted\",\n inactive: \"bg-border\",\n },\n },\n success: {\n indicator: {\n active:\n \"border-success bg-success text-success-foreground data-[variant=dot]:bg-success/30 data-[variant=dot]:border-success/0\",\n completed:\n \"border-success bg-success text-success-foreground data-[variant=dot]:bg-success/30 data-[variant=dot]:border-success/0\",\n inactive:\n \"border-muted bg-background text-muted-foreground data-[variant=dot]:bg-muted/30 data-[variant=dot]:border-muted/0\",\n },\n separator: {\n active: \"bg-success\",\n completed: \"bg-success\",\n inactive: \"bg-border\",\n },\n },\n error: {\n indicator: {\n active:\n \"border-error bg-error text-error-foreground data-[variant=dot]:bg-error/30 data-[variant=dot]:border-error/0\",\n completed:\n \"border-error bg-error text-error-foreground data-[variant=dot]:bg-error/30 data-[variant=dot]:border-error/0\",\n inactive:\n \"border-muted bg-background text-muted-foreground data-[variant=dot]:bg-muted/30 data-[variant=dot]:border-muted/0\",\n },\n separator: {\n active: \"bg-error\",\n completed: \"bg-error\",\n inactive: \"bg-border\",\n },\n },\n warning: {\n indicator: {\n active:\n \"border-warning bg-warning text-warning-foreground data-[variant=dot]:bg-warning/30 data-[variant=dot]:border-warning/0\",\n completed:\n \"border-warning bg-warning text-warning-foreground data-[variant=dot]:bg-warning/30 data-[variant=dot]:border-warning/0\",\n inactive:\n \"border-muted bg-background text-muted-foreground data-[variant=dot]:bg-muted/30 data-[variant=dot]:border-muted/0\",\n },\n separator: {\n active: \"bg-warning\",\n completed: \"bg-warning\",\n inactive: \"bg-border\",\n },\n },\n};\n\nfunction getIndicatorColorClass(\n color: StepperColor | undefined,\n customColor: string | undefined,\n dataState: DataState,\n): string {\n if (customColor) {\n return \"\";\n }\n\n if (!color) {\n // Default primary color\n return stepperColorClasses.primary.indicator[dataState];\n }\n\n return stepperColorClasses[color].indicator[dataState];\n}\n\nfunction getSeparatorColorClass(\n color: StepperColor | undefined,\n customColor: string | undefined,\n dataState: DataState,\n): string {\n if (customColor) {\n return \"\";\n }\n\n if (!color) {\n // Default primary color\n return stepperColorClasses.primary.separator[dataState];\n }\n\n return stepperColorClasses[color].separator[dataState];\n}\n\nfunction getCustomColorStyle(\n customColor: string | undefined,\n dataState: DataState,\n isIndicator: boolean,\n): React.CSSProperties | undefined {\n if (!customColor) return undefined;\n\n if (isIndicator) {\n if (dataState === \"active\" || dataState === \"completed\") {\n return {\n borderColor: customColor,\n backgroundColor: customColor,\n color: \"white\",\n };\n }\n return {\n borderColor: \"hsl(var(--muted))\",\n backgroundColor: \"hsl(var(--background))\",\n color: \"hsl(var(--muted-foreground))\",\n };\n } else {\n // separator\n if (dataState === \"active\" || dataState === \"completed\") {\n return {\n backgroundColor: customColor,\n };\n }\n return {\n backgroundColor: \"hsl(var(--border))\",\n };\n }\n}\n\ntype Direction = \"ltr\" | \"rtl\";\ntype Orientation = \"horizontal\" | \"vertical\";\ntype NavigationDirection = \"next\" | \"prev\";\ntype ActivationMode = \"automatic\" | \"manual\";\ntype DataState = \"inactive\" | \"active\" | \"completed\";\ntype StepperColor =\n | \"primary\"\n | \"secondary\"\n | \"accent\"\n | \"destructive\"\n | \"muted\"\n | \"success\"\n | \"error\"\n | \"warning\";\ntype StepperVariant = \"normal\" | \"dot\";\ntype LabelPosition = \"top\" | \"bottom\" | \"left\" | \"right\";\n\ninterface DivProps extends React.ComponentProps<\"div\"> {\n asChild?: boolean;\n}\ninterface ButtonProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n}\n\ntype ListElement = React.ComponentRef<typeof StepperList>;\ntype TriggerElement = React.ComponentRef<typeof StepperTrigger>;\n\nfunction getId(\n id: string,\n variant: \"trigger\" | \"content\" | \"title\" | \"description\",\n value: string,\n) {\n return `${id}-${variant}-${value}`;\n}\n\ntype FocusIntent = \"first\" | \"last\" | \"prev\" | \"next\";\n\nconst MAP_KEY_TO_FOCUS_INTENT: Record<string, FocusIntent> = {\n ArrowLeft: \"prev\",\n ArrowUp: \"prev\",\n ArrowRight: \"next\",\n ArrowDown: \"next\",\n PageUp: \"first\",\n Home: \"first\",\n PageDown: \"last\",\n End: \"last\",\n};\n\nfunction getDirectionAwareKey(key: string, dir?: Direction) {\n if (dir !== \"rtl\") return key;\n return key === \"ArrowLeft\"\n ? \"ArrowRight\"\n : key === \"ArrowRight\"\n ? \"ArrowLeft\"\n : key;\n}\n\nfunction getFocusIntent(\n event: React.KeyboardEvent<TriggerElement>,\n dir?: Direction,\n orientation?: Orientation,\n) {\n const key = getDirectionAwareKey(event.key, dir);\n if (orientation === \"horizontal\" && [\"ArrowUp\", \"ArrowDown\"].includes(key))\n return undefined;\n if (orientation === \"vertical\" && [\"ArrowLeft\", \"ArrowRight\"].includes(key))\n return undefined;\n return MAP_KEY_TO_FOCUS_INTENT[key];\n}\n\nfunction focusFirst(\n candidates: React.RefObject<TriggerElement | null>[],\n preventScroll = false,\n) {\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidateRef of candidates) {\n const candidate = candidateRef.current;\n if (!candidate) continue;\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate.focus({ preventScroll });\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n}\n\nfunction wrapArray<T>(array: T[], startIndex: number) {\n return array.map<T>(\n (_, index) => array[(startIndex + index) % array.length] as T,\n );\n}\n\nconst useIsomorphicLayoutEffect =\n typeof window === \"undefined\" ? React.useEffect : React.useLayoutEffect;\n\nfunction useAsRef<T>(props: T) {\n const ref = React.useRef<T>(props);\n\n useIsomorphicLayoutEffect(() => {\n ref.current = props;\n });\n\n return ref;\n}\n\nfunction useLazyRef<T>(fn: () => T) {\n const ref = React.useRef<T | null>(null);\n\n if (ref.current === null) {\n ref.current = fn();\n }\n\n return ref as React.RefObject<T>;\n}\n\nfunction getDataState(\n value: string | undefined,\n itemValue: string,\n stepState: StepState | undefined,\n steps: Map<string, StepState>,\n variant: \"item\" | \"separator\" = \"item\",\n): DataState {\n const stepKeys = Array.from(steps.keys());\n const currentIndex = stepKeys.indexOf(itemValue);\n\n if (stepState?.completed) return \"completed\";\n\n if (value === itemValue) {\n return variant === \"separator\" ? \"inactive\" : \"active\";\n }\n\n if (value) {\n const activeIndex = stepKeys.indexOf(value);\n\n if (activeIndex > currentIndex) return \"completed\";\n }\n\n return \"inactive\";\n}\n\nconst DirectionContext = React.createContext<Direction | undefined>(undefined);\n\nfunction useDirection(dirProp?: Direction): Direction {\n const contextDir = React.useContext(DirectionContext);\n return dirProp ?? contextDir ?? \"ltr\";\n}\n\ninterface StepState {\n value: string;\n completed: boolean;\n disabled: boolean;\n}\n\ninterface StoreState {\n steps: Map<string, StepState>;\n value: string;\n}\n\ninterface Store {\n subscribe: (callback: () => void) => () => void;\n getState: () => StoreState;\n setState: <K extends keyof StoreState>(key: K, value: StoreState[K]) => void;\n setStateWithValidation: (\n value: string,\n direction: NavigationDirection,\n ) => Promise<boolean>;\n hasValidation: () => boolean;\n notify: () => void;\n addStep: (value: string, completed: boolean, disabled: boolean) => void;\n removeStep: (value: string) => void;\n setStep: (value: string, completed: boolean, disabled: boolean) => void;\n}\n\nconst StoreContext = React.createContext<Store | null>(null);\n\nfunction useStoreContext(consumerName: string) {\n const context = React.useContext(StoreContext);\n if (!context) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${ROOT_NAME}\\``);\n }\n return context;\n}\n\nfunction useStore<T>(selector: (state: StoreState) => T): T {\n const store = useStoreContext(\"useStore\");\n\n const getSnapshot = React.useCallback(\n () => selector(store.getState()),\n [store, selector],\n );\n\n return React.useSyncExternalStore(store.subscribe, getSnapshot, getSnapshot);\n}\n\ninterface ItemData {\n id: string;\n ref: React.RefObject<TriggerElement | null>;\n value: string;\n active: boolean;\n disabled: boolean;\n}\n\ninterface StepperContextValue {\n id: string;\n dir: Direction;\n orientation: Orientation;\n activationMode: ActivationMode;\n disabled: boolean;\n nonInteractive: boolean;\n loop: boolean;\n color?: StepperColor;\n customColor?: string;\n variant?: StepperVariant;\n labelPosition?: LabelPosition;\n}\n\nconst StepperContext = React.createContext<StepperContextValue | null>(null);\n\nfunction useStepperContext(consumerName: string) {\n const context = React.useContext(StepperContext);\n if (!context) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${ROOT_NAME}\\``);\n }\n return context;\n}\n\ninterface StepperRootProps extends DivProps {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n onValueComplete?: (value: string, completed: boolean) => void;\n onValueAdd?: (value: string) => void;\n onValueRemove?: (value: string) => void;\n onValidate?: (\n value: string,\n direction: NavigationDirection,\n ) => boolean | Promise<boolean>;\n activationMode?: ActivationMode;\n dir?: Direction;\n orientation?: Orientation;\n disabled?: boolean;\n loop?: boolean;\n nonInteractive?: boolean;\n color?: StepperColor;\n customColor?: string;\n variant?: StepperVariant;\n labelPosition?: LabelPosition;\n}\n\nfunction StepperRoot(props: StepperRootProps) {\n const {\n value,\n defaultValue,\n onValueChange,\n onValueComplete,\n onValueAdd,\n onValueRemove,\n onValidate,\n id: idProp,\n dir: dirProp,\n orientation = \"horizontal\",\n activationMode = \"automatic\",\n asChild,\n disabled = false,\n nonInteractive = false,\n loop = false,\n color,\n customColor,\n variant = \"normal\",\n labelPosition = \"right\",\n className,\n ...rootProps\n } = props;\n\n const listenersRef = useLazyRef(() => new Set<() => void>());\n const stateRef = useLazyRef<StoreState>(() => ({\n steps: new Map(),\n value: value ?? defaultValue ?? \"\",\n }));\n const propsRef = useAsRef({\n onValueChange,\n onValueComplete,\n onValueAdd,\n onValueRemove,\n onValidate,\n });\n\n const store: Store = React.useMemo(() => {\n return {\n subscribe: (cb) => {\n listenersRef.current.add(cb);\n return () => listenersRef.current.delete(cb);\n },\n getState: () => stateRef.current,\n setState: (key, value) => {\n if (Object.is(stateRef.current[key], value)) return;\n\n if (key === \"value\" && typeof value === \"string\") {\n stateRef.current.value = value;\n propsRef.current.onValueChange?.(value);\n } else {\n stateRef.current[key] = value;\n }\n\n store.notify();\n },\n setStateWithValidation: async (value, direction) => {\n if (!propsRef.current.onValidate) {\n store.setState(\"value\", value);\n return true;\n }\n\n try {\n const isValid = await propsRef.current.onValidate(value, direction);\n if (isValid) {\n store.setState(\"value\", value);\n }\n return isValid;\n } catch {\n return false;\n }\n },\n hasValidation: () => !!propsRef.current.onValidate,\n addStep: (value, completed, disabled) => {\n const newStep: StepState = { value, completed, disabled };\n stateRef.current.steps.set(value, newStep);\n propsRef.current.onValueAdd?.(value);\n store.notify();\n },\n removeStep: (value) => {\n stateRef.current.steps.delete(value);\n propsRef.current.onValueRemove?.(value);\n store.notify();\n },\n setStep: (value, completed, disabled) => {\n const step = stateRef.current.steps.get(value);\n if (step) {\n const updatedStep: StepState = { ...step, completed, disabled };\n stateRef.current.steps.set(value, updatedStep);\n\n if (completed !== step.completed) {\n propsRef.current.onValueComplete?.(value, completed);\n }\n\n store.notify();\n }\n },\n notify: () => {\n for (const cb of listenersRef.current) {\n cb();\n }\n },\n };\n }, [listenersRef, stateRef, propsRef]);\n\n useIsomorphicLayoutEffect(() => {\n if (value !== undefined) {\n store.setState(\"value\", value);\n }\n }, [value, store]);\n\n const dir = useDirection(dirProp);\n\n const id = React.useId();\n\n const rootId = idProp ?? id;\n\n const contextValue = React.useMemo<StepperContextValue>(\n () => ({\n id: rootId,\n dir,\n orientation,\n activationMode,\n disabled,\n nonInteractive,\n loop,\n color,\n customColor,\n variant,\n labelPosition,\n }),\n [\n rootId,\n dir,\n orientation,\n activationMode,\n disabled,\n nonInteractive,\n loop,\n color,\n customColor,\n variant,\n labelPosition,\n ],\n );\n\n const RootPrimitive = asChild ? Slot : \"div\";\n\n return (\n <StoreContext.Provider value={store}>\n <StepperContext.Provider value={contextValue}>\n <RootPrimitive\n id={rootId}\n data-disabled={disabled ? \"\" : undefined}\n data-orientation={orientation}\n data-slot=\"stepper\"\n dir={dir}\n {...rootProps}\n className={cn(\n \"flex gap-6\",\n orientation === \"horizontal\" ? \"w-full flex-col\" : \"flex-row\",\n className,\n )}\n />\n </StepperContext.Provider>\n </StoreContext.Provider>\n );\n}\n\ninterface FocusContextValue {\n tabStopId: string | null;\n onItemFocus: (tabStopId: string) => void;\n onItemShiftTab: () => void;\n onFocusableItemAdd: () => void;\n onFocusableItemRemove: () => void;\n onItemRegister: (item: ItemData) => void;\n onItemUnregister: (id: string) => void;\n getItems: () => ItemData[];\n}\n\nconst FocusContext = React.createContext<FocusContextValue | null>(null);\n\nfunction useFocusContext(consumerName: string) {\n const context = React.useContext(FocusContext);\n if (!context) {\n throw new Error(\n `\\`${consumerName}\\` must be used within \\`FocusProvider\\``,\n );\n }\n return context;\n}\n\ninterface StepperListProps extends DivProps {\n asChild?: boolean;\n}\n\nfunction StepperList(props: StepperListProps) {\n const { className, children, asChild, ref, ...listProps } = props;\n\n const context = useStepperContext(LIST_NAME);\n const orientation = context.orientation;\n const currentValue = useStore((state) => state.value);\n\n const [tabStopId, setTabStopId] = React.useState<string | null>(null);\n const [isTabbingBackOut, setIsTabbingBackOut] = React.useState(false);\n const [focusableItemCount, setFocusableItemCount] = React.useState(0);\n const isClickFocusRef = React.useRef(false);\n const itemsRef = React.useRef<Map<string, ItemData>>(new Map());\n const listRef = React.useRef<ListElement>(null);\n const composedRef = useComposedRefs(ref, listRef);\n\n const onItemFocus = React.useCallback((tabStopId: string) => {\n setTabStopId(tabStopId);\n }, []);\n\n const onItemShiftTab = React.useCallback(() => {\n setIsTabbingBackOut(true);\n }, []);\n\n const onFocusableItemAdd = React.useCallback(() => {\n setFocusableItemCount((prevCount) => prevCount + 1);\n }, []);\n\n const onFocusableItemRemove = React.useCallback(() => {\n setFocusableItemCount((prevCount) => prevCount - 1);\n }, []);\n\n const onItemRegister = React.useCallback((item: ItemData) => {\n itemsRef.current.set(item.id, item);\n }, []);\n\n const onItemUnregister = React.useCallback((id: string) => {\n itemsRef.current.delete(id);\n }, []);\n\n const getItems = React.useCallback(() => {\n return Array.from(itemsRef.current.values())\n .filter((item) => item.ref.current)\n .sort((a, b) => {\n const elementA = a.ref.current;\n const elementB = b.ref.current;\n if (!elementA || !elementB) return 0;\n const position = elementA.compareDocumentPosition(elementB);\n if (position & Node.DOCUMENT_POSITION_FOLLOWING) {\n return -1;\n }\n if (position & Node.DOCUMENT_POSITION_PRECEDING) {\n return 1;\n }\n return 0;\n });\n }, []);\n\n const onBlur = React.useCallback(\n (event: React.FocusEvent<ListElement>) => {\n listProps.onBlur?.(event);\n if (event.defaultPrevented) return;\n\n setIsTabbingBackOut(false);\n },\n [listProps.onBlur],\n );\n\n const onFocus = React.useCallback(\n (event: React.FocusEvent<ListElement>) => {\n listProps.onFocus?.(event);\n if (event.defaultPrevented) return;\n\n const isKeyboardFocus = !isClickFocusRef.current;\n if (\n event.target === event.currentTarget &&\n isKeyboardFocus &&\n !isTabbingBackOut\n ) {\n const entryFocusEvent = new CustomEvent(ENTRY_FOCUS, EVENT_OPTIONS);\n event.currentTarget.dispatchEvent(entryFocusEvent);\n\n if (!entryFocusEvent.defaultPrevented) {\n const items = Array.from(itemsRef.current.values()).filter(\n (item) => !item.disabled,\n );\n const selectedItem = currentValue\n ? items.find((item) => item.value === currentValue)\n : undefined;\n const activeItem = items.find((item) => item.active);\n const currentItem = items.find((item) => item.id === tabStopId);\n\n const candidateItems = [\n selectedItem,\n activeItem,\n currentItem,\n ...items,\n ].filter(Boolean) as ItemData[];\n const candidateRefs = candidateItems.map((item) => item.ref);\n focusFirst(candidateRefs, false);\n }\n }\n isClickFocusRef.current = false;\n },\n [listProps.onFocus, isTabbingBackOut, currentValue, tabStopId],\n );\n\n const onMouseDown = React.useCallback(\n (event: React.MouseEvent<ListElement>) => {\n listProps.onMouseDown?.(event);\n\n if (event.defaultPrevented) return;\n\n isClickFocusRef.current = true;\n },\n [listProps.onMouseDown],\n );\n\n const focusContextValue = React.useMemo<FocusContextValue>(\n () => ({\n tabStopId,\n onItemFocus,\n onItemShiftTab,\n onFocusableItemAdd,\n onFocusableItemRemove,\n onItemRegister,\n onItemUnregister,\n getItems,\n }),\n [\n tabStopId,\n onItemFocus,\n onItemShiftTab,\n onFocusableItemAdd,\n onFocusableItemRemove,\n onItemRegister,\n onItemUnregister,\n getItems,\n ],\n );\n\n const ListPrimitive = asChild ? Slot : \"div\";\n\n return (\n <FocusContext.Provider value={focusContextValue}>\n <ListPrimitive\n role=\"tablist\"\n aria-orientation={orientation}\n data-orientation={orientation}\n data-slot=\"stepper-list\"\n dir={context.dir}\n tabIndex={isTabbingBackOut || focusableItemCount === 0 ? -1 : 0}\n {...listProps}\n ref={composedRef}\n className={cn(\n \"flex outline-none\",\n orientation === \"horizontal\"\n ? \"flex-row items-center\"\n : \"flex-col items-start\",\n className,\n )}\n onBlur={onBlur}\n onFocus={onFocus}\n onMouseDown={onMouseDown}\n >\n {children}\n </ListPrimitive>\n </FocusContext.Provider>\n );\n}\n\ninterface StepperItemContextValue {\n value: string;\n stepState: StepState | undefined;\n}\n\nconst StepperItemContext = React.createContext<StepperItemContextValue | null>(\n null,\n);\n\nfunction useStepperItemContext(consumerName: string) {\n const context = React.useContext(StepperItemContext);\n if (!context) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${ITEM_NAME}\\``);\n }\n return context;\n}\n\ninterface StepperItemProps extends DivProps {\n value: string;\n completed?: boolean;\n disabled?: boolean;\n}\n\nfunction StepperItem(props: StepperItemProps) {\n const {\n value: itemValue,\n completed = false,\n disabled = false,\n asChild,\n className,\n children,\n ref,\n ...itemProps\n } = props;\n\n const context = useStepperContext(ITEM_NAME);\n const store = useStoreContext(ITEM_NAME);\n const orientation = context.orientation;\n const labelPosition = context.labelPosition ?? \"right\";\n const value = useStore((state) => state.value);\n\n useIsomorphicLayoutEffect(() => {\n store.addStep(itemValue, completed, disabled);\n\n return () => {\n store.removeStep(itemValue);\n };\n }, [itemValue, completed, disabled]);\n\n useIsomorphicLayoutEffect(() => {\n store.setStep(itemValue, completed, disabled);\n }, [itemValue, completed, disabled]);\n\n const stepState = useStore((state) => state.steps.get(itemValue));\n const steps = useStore((state) => state.steps);\n const dataState = getDataState(value, itemValue, stepState, steps);\n\n const stepKeys = Array.from(steps.keys());\n const stepIndex = stepKeys.indexOf(itemValue);\n const isFirstStep = stepIndex === 0;\n const isLastStep = stepIndex === stepKeys.length - 1;\n\n const itemContextValue = React.useMemo<StepperItemContextValue>(\n () => ({\n value: itemValue,\n stepState,\n }),\n [itemValue, stepState],\n );\n\n // Determine item layout based on orientation and labelPosition\n const getItemClasses = () => {\n const baseClasses = \"relative flex\";\n\n if (orientation === \"horizontal\") {\n // Horizontal stepper\n if (labelPosition === \"top\" || labelPosition === \"bottom\") {\n // When labels are above/below, use flex-col to stack indicator row and label\n // Each item takes equal space\n return `${baseClasses} flex-col items-center flex-1 gap-2`;\n }\n // Default: labels left/right - flex-row\n return `${baseClasses} flex-row items-center not-last:flex-1`;\n } else {\n // Vertical stepper - always flex-col for vertical orientation\n return `${baseClasses} flex-col`;\n }\n };\n\n // Reorganize children for top/bottom label positions\n const processedChildren = React.useMemo(() => {\n if (\n orientation === \"horizontal\" &&\n (labelPosition === \"top\" || labelPosition === \"bottom\")\n ) {\n const childArray = React.Children.toArray(children);\n let trigger: React.ReactNode = null;\n let indicator: React.ReactNode = null;\n let separator: React.ReactNode = null;\n const others: React.ReactNode[] = [];\n\n childArray.forEach((child) => {\n if (React.isValidElement(child)) {\n const slot = (child.props as { \"data-slot\"?: string })[\"data-slot\"];\n if (slot === \"stepper-trigger\" || child.type === StepperTrigger) {\n trigger = child;\n // Extract indicator from trigger's children if it exists\n const triggerChildren = React.Children.toArray(\n (child as React.ReactElement<{ children?: React.ReactNode }>)\n .props.children,\n );\n triggerChildren.forEach((triggerChild) => {\n if (React.isValidElement(triggerChild)) {\n const triggerChildSlot = (\n triggerChild.props as { \"data-slot\"?: string }\n )[\"data-slot\"];\n if (\n triggerChildSlot === \"stepper-indicator\" ||\n triggerChild.type === StepperIndicator\n ) {\n indicator = triggerChild;\n }\n }\n });\n } else if (\n slot === \"stepper-separator\" ||\n child.type === StepperSeparator\n ) {\n separator = child;\n } else {\n others.push(child);\n }\n } else {\n others.push(child);\n }\n });\n\n // New structure: indicator row (with indicator + separator) then trigger\n // For proper centering, we need separators on both sides\n\n // Get the state for left separator (connects to previous step)\n // Left separator should be active if current step or any previous step is active\n const prevStepIndex = stepIndex - 1;\n const prevStepValue = prevStepIndex >= 0 ? stepKeys[prevStepIndex] : null;\n const leftSeparatorState = prevStepValue\n ? getDataState(\n value,\n prevStepValue,\n steps.get(prevStepValue),\n steps,\n \"separator\",\n )\n : \"inactive\";\n\n // Create left separator (even if separator element doesn't exist)\n let leftSeparator: React.ReactNode = null;\n if (!isFirstStep) {\n const color = context.color;\n const customColor = context.customColor;\n\n leftSeparator = (\n <div\n key=\"left-separator\"\n className={cn(\n \"h-px flex-1 transition-colors\",\n getSeparatorColorClass(color, customColor, leftSeparatorState),\n )}\n style={getCustomColorStyle(customColor, leftSeparatorState, false)}\n aria-hidden=\"true\"\n />\n );\n }\n\n const indicatorRow = (\n <div\n className=\"flex w-full items-center justify-center\"\n key=\"indicator-row\"\n >\n {/* Left separator - connects to previous step */}\n {leftSeparator}\n {/* Spacer if first step */}\n {isFirstStep && (\n <div className=\"h-px flex-1 bg-transparent\" aria-hidden=\"true\" />\n )}\n {indicator}\n {/* Right separator - connects to next step */}\n {!isLastStep && separator}\n {/* Spacer for last step to maintain centering */}\n {isLastStep && (\n <div className=\"h-px flex-1 bg-transparent\" aria-hidden=\"true\" />\n )}\n </div>\n );\n\n if (labelPosition === \"top\") {\n return [trigger, indicatorRow, ...others];\n } else {\n return [indicatorRow, trigger, ...others];\n }\n }\n\n return children;\n }, [\n children,\n orientation,\n labelPosition,\n isFirstStep,\n isLastStep,\n stepIndex,\n stepKeys,\n steps,\n value,\n context.color,\n context.customColor,\n ]);\n\n const ItemPrimitive = asChild ? Slot : \"div\";\n\n return (\n <StepperItemContext.Provider value={itemContextValue}>\n <ItemPrimitive\n data-disabled={stepState?.disabled ? \"\" : undefined}\n data-orientation={orientation}\n data-state={dataState}\n data-slot=\"stepper-item\"\n data-label-position={labelPosition}\n dir={context.dir}\n {...itemProps}\n ref={ref}\n className={cn(getItemClasses(), className)}\n >\n {processedChildren}\n </ItemPrimitive>\n </StepperItemContext.Provider>\n );\n}\n\nfunction StepperTrigger(props: ButtonProps) {\n const { asChild, disabled, className, ref, ...triggerProps } = props;\n\n const context = useStepperContext(TRIGGER_NAME);\n const itemContext = useStepperItemContext(TRIGGER_NAME);\n const store = useStoreContext(TRIGGER_NAME);\n const focusContext = useFocusContext(TRIGGER_NAME);\n const value = useStore((state) => state.value);\n const itemValue = itemContext.value;\n const stepState = useStore((state) => state.steps.get(itemValue));\n const activationMode = context.activationMode;\n const orientation = context.orientation;\n const loop = context.loop;\n const labelPosition = context.labelPosition ?? \"right\";\n\n const steps = useStore((state) => state.steps);\n const stepIndex = Array.from(steps.keys()).indexOf(itemValue);\n\n const stepPosition = stepIndex + 1;\n const stepCount = steps.size;\n\n const triggerId = getId(context.id, \"trigger\", itemValue);\n const contentId = getId(context.id, \"content\", itemValue);\n const titleId = getId(context.id, \"title\", itemValue);\n const descriptionId = getId(context.id, \"description\", itemValue);\n\n const isDisabled = context.disabled || stepState?.disabled || disabled;\n const isActive = value === itemValue;\n const isTabStop = focusContext.tabStopId === triggerId;\n const dataState = getDataState(value, itemValue, stepState, steps);\n\n const triggerRef = React.useRef<TriggerElement>(null);\n const composedRef = useComposedRefs(ref, triggerRef);\n const isArrowKeyPressedRef = React.useRef(false);\n const isMouseClickRef = React.useRef(false);\n\n React.useEffect(() => {\n function onKeyDown(event: KeyboardEvent) {\n if (ARROW_KEYS.includes(event.key)) {\n isArrowKeyPressedRef.current = true;\n }\n }\n function onKeyUp() {\n isArrowKeyPressedRef.current = false;\n }\n document.addEventListener(\"keydown\", onKeyDown);\n document.addEventListener(\"keyup\", onKeyUp);\n return () => {\n document.removeEventListener(\"keydown\", onKeyDown);\n document.removeEventListener(\"keyup\", onKeyUp);\n };\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n focusContext.onItemRegister({\n id: triggerId,\n ref: triggerRef,\n value: itemValue,\n active: isTabStop,\n disabled: !!isDisabled,\n });\n\n if (!isDisabled) {\n focusContext.onFocusableItemAdd();\n }\n\n return () => {\n focusContext.onItemUnregister(triggerId);\n if (!isDisabled) {\n focusContext.onFocusableItemRemove();\n }\n };\n }, [focusContext, triggerId, itemValue, isTabStop, isDisabled]);\n\n const onClick = React.useCallback(\n async (event: React.MouseEvent<TriggerElement>) => {\n triggerProps.onClick?.(event);\n if (event.defaultPrevented) return;\n\n if (!isDisabled && !context.nonInteractive) {\n const currentStepIndex = Array.from(steps.keys()).indexOf(value ?? \"\");\n const targetStepIndex = Array.from(steps.keys()).indexOf(itemValue);\n const direction = targetStepIndex > currentStepIndex ? \"next\" : \"prev\";\n\n await store.setStateWithValidation(itemValue, direction);\n }\n },\n [\n isDisabled,\n context.nonInteractive,\n store,\n itemValue,\n value,\n steps,\n triggerProps.onClick,\n ],\n );\n\n const onFocus = React.useCallback(\n async (event: React.FocusEvent<TriggerElement>) => {\n triggerProps.onFocus?.(event);\n if (event.defaultPrevented) return;\n\n focusContext.onItemFocus(triggerId);\n\n const isKeyboardFocus = !isMouseClickRef.current;\n\n if (\n !isActive &&\n !isDisabled &&\n activationMode !== \"manual\" &&\n !context.nonInteractive &&\n isKeyboardFocus\n ) {\n const currentStepIndex = Array.from(steps.keys()).indexOf(value || \"\");\n const targetStepIndex = Array.from(steps.keys()).indexOf(itemValue);\n const direction = targetStepIndex > currentStepIndex ? \"next\" : \"prev\";\n\n await store.setStateWithValidation(itemValue, direction);\n }\n\n isMouseClickRef.current = false;\n },\n [\n focusContext,\n triggerId,\n activationMode,\n isActive,\n isDisabled,\n context.nonInteractive,\n store,\n itemValue,\n value,\n steps,\n triggerProps.onFocus,\n ],\n );\n\n const onKeyDown = React.useCallback(\n async (event: React.KeyboardEvent<TriggerElement>) => {\n triggerProps.onKeyDown?.(event);\n if (event.defaultPrevented) return;\n\n if (event.key === \"Enter\" && context.nonInteractive) {\n event.preventDefault();\n return;\n }\n\n if (\n (event.key === \"Enter\" || event.key === \" \") &&\n activationMode === \"manual\" &&\n !context.nonInteractive\n ) {\n event.preventDefault();\n if (!isDisabled && triggerRef.current) {\n triggerRef.current.click();\n }\n return;\n }\n\n if (event.key === \"Tab\" && event.shiftKey) {\n focusContext.onItemShiftTab();\n return;\n }\n\n if (event.target !== event.currentTarget) return;\n\n const focusIntent = getFocusIntent(event, context.dir, orientation);\n\n if (focusIntent !== undefined) {\n if (event.metaKey || event.ctrlKey || event.altKey || event.shiftKey)\n return;\n event.preventDefault();\n\n const items = focusContext.getItems().filter((item) => !item.disabled);\n let candidateRefs = items.map((item) => item.ref);\n\n if (focusIntent === \"last\") {\n candidateRefs.reverse();\n } else if (focusIntent === \"prev\" || focusIntent === \"next\") {\n if (focusIntent === \"prev\") candidateRefs.reverse();\n const currentIndex = candidateRefs.findIndex(\n (ref) => ref.current === event.currentTarget,\n );\n candidateRefs = loop\n ? wrapArray(candidateRefs, currentIndex + 1)\n : candidateRefs.slice(currentIndex + 1);\n }\n\n if (store.hasValidation() && candidateRefs.length > 0) {\n const nextRef = candidateRefs[0];\n const nextElement = nextRef?.current;\n const nextItem = items.find(\n (item) => item.ref.current === nextElement,\n );\n\n if (nextItem && nextItem.value !== itemValue) {\n const currentStepIndex = Array.from(steps.keys()).indexOf(\n value || \"\",\n );\n const targetStepIndex = Array.from(steps.keys()).indexOf(\n nextItem.value,\n );\n const direction: NavigationDirection =\n targetStepIndex > currentStepIndex ? \"next\" : \"prev\";\n\n if (direction === \"next\") {\n const isValid = await store.setStateWithValidation(\n nextItem.value,\n direction,\n );\n if (!isValid) return;\n } else {\n store.setState(\"value\", nextItem.value);\n }\n\n queueMicrotask(() => nextElement?.focus());\n return;\n }\n }\n\n queueMicrotask(() => focusFirst(candidateRefs));\n }\n },\n [\n focusContext,\n context.nonInteractive,\n context.dir,\n activationMode,\n orientation,\n loop,\n isDisabled,\n triggerProps.onKeyDown,\n store,\n itemValue,\n value,\n steps,\n ],\n );\n\n const onMouseDown = React.useCallback(\n (event: React.MouseEvent<TriggerElement>) => {\n triggerProps.onMouseDown?.(event);\n if (event.defaultPrevented) return;\n\n isMouseClickRef.current = true;\n\n if (isDisabled) {\n event.preventDefault();\n } else {\n focusContext.onItemFocus(triggerId);\n }\n },\n [focusContext, triggerId, isDisabled, triggerProps.onMouseDown],\n );\n\n // Determine flex direction based on labelPosition\n const getFlexDirection = () => {\n if (\n orientation === \"horizontal\" &&\n (labelPosition === \"top\" || labelPosition === \"bottom\")\n ) {\n // For horizontal with top/bottom labels, trigger only contains text\n // Indicator and separator will be siblings at item level\n return labelPosition === \"top\" ? \"flex-col-reverse\" : \"flex-col\";\n }\n\n if (labelPosition === \"top\") return \"flex-col-reverse\";\n if (labelPosition === \"bottom\") return \"flex-col\";\n if (labelPosition === \"left\") return \"flex-row-reverse\";\n return \"flex-row\"; // default is right\n };\n\n const shouldWrapIndicator =\n orientation === \"horizontal\" &&\n (labelPosition === \"top\" || labelPosition === \"bottom\");\n\n // Filter out Indicator from children when shouldWrapIndicator is true\n const processedChildren = React.useMemo(() => {\n if (!shouldWrapIndicator) return triggerProps.children;\n\n const childArray = React.Children.toArray(triggerProps.children);\n return childArray.filter((child) => {\n if (React.isValidElement(child)) {\n const slot = (child.props as { \"data-slot\"?: string })[\"data-slot\"];\n return !(\n slot === \"stepper-indicator\" || child.type === StepperIndicator\n );\n }\n return true;\n });\n }, [shouldWrapIndicator, triggerProps.children]);\n\n const TriggerPrimitive = asChild ? Slot : \"button\";\n\n return (\n <TriggerPrimitive\n id={triggerId}\n role=\"tab\"\n type=\"button\"\n aria-controls={contentId}\n aria-current={isActive ? \"step\" : undefined}\n aria-describedby={`${titleId} ${descriptionId}`}\n aria-posinset={stepPosition}\n aria-selected={isActive}\n aria-setsize={stepCount}\n data-disabled={isDisabled ? \"\" : undefined}\n data-state={dataState}\n data-slot=\"stepper-trigger\"\n data-wrap-indicator={shouldWrapIndicator ? \"\" : undefined}\n disabled={isDisabled}\n tabIndex={isTabStop ? 0 : -1}\n {...triggerProps}\n ref={composedRef}\n className={cn(\n \"inline-flex items-center justify-center gap-3 rounded-md text-left outline-none transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n \"not-has-data-[slot=description]:rounded-full not-has-data-[slot=title]:rounded-full\",\n shouldWrapIndicator ? \"\" : getFlexDirection(),\n className,\n )}\n onClick={onClick}\n onFocus={onFocus}\n onKeyDown={onKeyDown}\n onMouseDown={onMouseDown}\n >\n {processedChildren}\n </TriggerPrimitive>\n );\n}\n\ninterface StepperIndicatorProps extends Omit<DivProps, \"children\"> {\n children?: React.ReactNode | ((dataState: DataState) => React.ReactNode);\n color?: StepperColor;\n customColor?: string;\n variant?: StepperVariant;\n}\n\nfunction StepperIndicator(props: StepperIndicatorProps) {\n const {\n className,\n children,\n asChild,\n ref,\n color: colorProp,\n customColor: customColorProp,\n variant: variantProp,\n ...indicatorProps\n } = props;\n const context = useStepperContext(INDICATOR_NAME);\n const itemContext = useStepperItemContext(INDICATOR_NAME);\n const value = useStore((state) => state.value);\n const itemValue = itemContext.value;\n const stepState = useStore((state) => state.steps.get(itemValue));\n const steps = useStore((state) => state.steps);\n\n const stepPosition = Array.from(steps.keys()).indexOf(itemValue) + 1;\n\n const dataState = getDataState(value, itemValue, stepState, steps);\n\n const color = colorProp ?? context.color;\n const customColor = customColorProp ?? context.customColor;\n const variant = variantProp ?? context.variant ?? \"normal\";\n\n const colorClass = getIndicatorColorClass(color, customColor, dataState);\n const customStyle = getCustomColorStyle(customColor, dataState, true);\n\n const IndicatorPrimitive = asChild ? Slot : \"div\";\n\n const isDot = variant === \"dot\";\n\n return (\n <IndicatorPrimitive\n data-state={dataState}\n data-variant={variant}\n data-slot=\"stepper-indicator\"\n dir={context.dir}\n {...indicatorProps}\n ref={ref}\n style={{ ...indicatorProps.style, ...customStyle }}\n className={cn(\n \"flex shrink-0 items-center justify-center rounded-full border-2 font-medium text-sm transition-colors\",\n isDot ? \"size-7 data-[variant=dot]:size-2\" : \"size-7\",\n colorClass,\n className,\n )}\n >\n {!isDot &&\n (typeof children === \"function\" ? (\n children(dataState)\n ) : children ? (\n children\n ) : dataState === \"completed\" ? (\n <Check className=\"size-4\" />\n ) : (\n stepPosition\n ))}\n </IndicatorPrimitive>\n );\n}\n\ninterface StepperSeparatorProps extends DivProps {\n forceMount?: boolean;\n color?: StepperColor;\n customColor?: string;\n}\n\nfunction StepperSeparator(props: StepperSeparatorProps) {\n const {\n className,\n asChild,\n forceMount = false,\n ref,\n color: colorProp,\n customColor: customColorProp,\n ...separatorProps\n } = props;\n\n const context = useStepperContext(SEPARATOR_NAME);\n const itemContext = useStepperItemContext(SEPARATOR_NAME);\n const value = useStore((state) => state.value);\n const orientation = context.orientation;\n const labelPosition = context.labelPosition ?? \"right\";\n\n const steps = useStore((state) => state.steps);\n const stepIndex = Array.from(steps.keys()).indexOf(itemContext.value);\n\n const isLastStep = stepIndex === steps.size - 1;\n\n if (isLastStep && !forceMount) {\n return null;\n }\n\n const dataState = getDataState(\n value,\n itemContext.value,\n itemContext.stepState,\n steps,\n \"separator\",\n );\n\n const color = colorProp ?? context.color;\n const customColor = customColorProp ?? context.customColor;\n\n const colorClass = getSeparatorColorClass(color, customColor, dataState);\n const customStyle = getCustomColorStyle(customColor, dataState, false);\n\n const SeparatorPrimitive = asChild ? Slot : \"div\";\n\n // Determine separator positioning based on orientation and labelPosition\n const getSeparatorClasses = () => {\n if (orientation === \"horizontal\") {\n // Horizontal stepper\n if (labelPosition === \"top\" || labelPosition === \"bottom\") {\n // When labels are above/below, separator is at item level alongside indicator\n // It should be a horizontal line that takes remaining space\n return \"h-px flex-1\";\n }\n // Default: labels left/right - normal flex behavior\n return \"h-px flex-1\";\n } else {\n // Vertical stepper\n if (labelPosition === \"top\" || labelPosition === \"bottom\") {\n // When labels are above/below in vertical mode, separator connects vertically\n return \"w-px absolute left-1/2 -translate-x-1/2 top-full h-full -z-10\";\n } else if (labelPosition === \"left\") {\n // Label on left, separator on the right side\n return \"w-px absolute right-0 top-full h-full -z-10 translate-x-1/2\";\n } else {\n // Label on right (default), separator on the left side\n return \"w-px absolute left-0 top-full h-full -z-10 -translate-x-1/2\";\n }\n }\n };\n\n return (\n <SeparatorPrimitive\n role=\"separator\"\n aria-hidden=\"true\"\n aria-orientation={orientation}\n data-orientation={orientation}\n data-state={dataState}\n data-slot=\"stepper-separator\"\n dir={context.dir}\n {...separatorProps}\n ref={ref}\n style={{ ...separatorProps.style, ...customStyle }}\n className={cn(\n \"transition-colors\",\n getSeparatorClasses(),\n colorClass,\n className,\n )}\n />\n );\n}\n\ninterface StepperTitleProps extends React.ComponentProps<\"span\"> {\n asChild?: boolean;\n}\n\nfunction StepperTitle(props: StepperTitleProps) {\n const { className, asChild, ref, ...titleProps } = props;\n\n const context = useStepperContext(TITLE_NAME);\n const itemContext = useStepperItemContext(TITLE_NAME);\n\n const titleId = getId(context.id, \"title\", itemContext.value);\n\n const TitlePrimitive = asChild ? Slot : \"span\";\n\n return (\n <TitlePrimitive\n id={titleId}\n data-slot=\"title\"\n dir={context.dir}\n {...titleProps}\n ref={ref}\n className={cn(\"font-medium text-sm\", className)}\n />\n );\n}\n\ninterface StepperDescriptionProps extends React.ComponentProps<\"span\"> {\n asChild?: boolean;\n}\n\nfunction StepperDescription(props: StepperDescriptionProps) {\n const { className, asChild, ref, ...descriptionProps } = props;\n const context = useStepperContext(DESCRIPTION_NAME);\n const itemContext = useStepperItemContext(DESCRIPTION_NAME);\n\n const descriptionId = getId(context.id, \"description\", itemContext.value);\n\n const DescriptionPrimitive = asChild ? Slot : \"span\";\n\n return (\n <DescriptionPrimitive\n id={descriptionId}\n data-slot=\"description\"\n dir={context.dir}\n {...descriptionProps}\n ref={ref}\n className={cn(\"text-muted-foreground text-xs\", className)}\n />\n );\n}\n\ninterface StepperContentProps extends DivProps {\n value: string;\n forceMount?: boolean;\n}\n\nfunction StepperContent(props: StepperContentProps) {\n const {\n value: valueProp,\n asChild,\n forceMount = false,\n ref,\n className,\n ...contentProps\n } = props;\n\n const context = useStepperContext(CONTENT_NAME);\n const value = useStore((state) => state.value);\n\n const contentId = getId(context.id, \"content\", valueProp);\n const triggerId = getId(context.id, \"trigger\", valueProp);\n\n if (valueProp !== value && !forceMount) return null;\n\n const ContentPrimitive = asChild ? Slot : \"div\";\n\n return (\n <ContentPrimitive\n id={contentId}\n role=\"tabpanel\"\n aria-labelledby={triggerId}\n data-slot=\"stepper-content\"\n dir={context.dir}\n {...contentProps}\n ref={ref}\n className={cn(\"flex-1 outline-none\", className)}\n />\n );\n}\n\nfunction StepperPrev(props: ButtonProps) {\n const { asChild, disabled, ...prevProps } = props;\n\n const store = useStoreContext(PREV_NAME);\n const value = useStore((state) => state.value);\n const steps = useStore((state) => state.steps);\n\n const stepKeys = Array.from(steps.keys());\n const currentIndex = value ? stepKeys.indexOf(value) : -1;\n const isDisabled = disabled || currentIndex <= 0;\n\n const onClick = React.useCallback(\n async (event: React.MouseEvent<HTMLButtonElement>) => {\n prevProps.onClick?.(event);\n if (event.defaultPrevented || isDisabled) return;\n\n const prevIndex = Math.max(currentIndex - 1, 0);\n const prevStepValue = stepKeys[prevIndex];\n\n if (prevStepValue) {\n store.setState(\"value\", prevStepValue);\n }\n },\n [prevProps.onClick, isDisabled, currentIndex, stepKeys, store],\n );\n\n const PrevPrimitive = asChild ? Slot : \"button\";\n\n return (\n <PrevPrimitive\n type=\"button\"\n data-slot=\"stepper-prev\"\n disabled={isDisabled}\n {...prevProps}\n onClick={onClick}\n />\n );\n}\n\nfunction StepperNext(props: ButtonProps) {\n const { asChild, disabled, ...nextProps } = props;\n\n const store = useStoreContext(NEXT_NAME);\n const value = useStore((state) => state.value);\n const steps = useStore((state) => state.steps);\n\n const stepKeys = Array.from(steps.keys());\n const currentIndex = value ? stepKeys.indexOf(value) : -1;\n const isDisabled = disabled || currentIndex >= stepKeys.length - 1;\n\n const onClick = React.useCallback(\n async (event: React.MouseEvent<HTMLButtonElement>) => {\n nextProps.onClick?.(event);\n if (event.defaultPrevented || isDisabled) return;\n\n const nextIndex = Math.min(currentIndex + 1, stepKeys.length - 1);\n const nextStepValue = stepKeys[nextIndex];\n\n if (nextStepValue) {\n await store.setStateWithValidation(nextStepValue, \"next\");\n }\n },\n [nextProps.onClick, isDisabled, currentIndex, stepKeys, store],\n );\n\n const NextPrimitive = asChild ? Slot : \"button\";\n\n return (\n <NextPrimitive\n type=\"button\"\n data-slot=\"stepper-next\"\n disabled={isDisabled}\n {...nextProps}\n onClick={onClick}\n />\n );\n}\n\nexport {\n StepperRoot,\n StepperList,\n StepperItem,\n StepperTrigger,\n StepperIndicator,\n StepperSeparator,\n StepperTitle,\n StepperDescription,\n StepperContent,\n StepperPrev,\n StepperNext,\n //\n useStore as useStepper,\n //\n type StepperRootProps as StepperProps,\n};\n"],"names":["ROOT_NAME","LIST_NAME","ITEM_NAME","TRIGGER_NAME","INDICATOR_NAME","SEPARATOR_NAME","TITLE_NAME","DESCRIPTION_NAME","CONTENT_NAME","PREV_NAME","NEXT_NAME","ENTRY_FOCUS","EVENT_OPTIONS","ARROW_KEYS","stepperColorClasses","getIndicatorColorClass","color","customColor","dataState","getSeparatorColorClass","getCustomColorStyle","isIndicator","getId","id","variant","value","MAP_KEY_TO_FOCUS_INTENT","getDirectionAwareKey","key","dir","getFocusIntent","event","orientation","focusFirst","candidates","preventScroll","PREVIOUSLY_FOCUSED_ELEMENT","candidateRef","candidate","wrapArray","array","startIndex","_","index","useIsomorphicLayoutEffect","React","useAsRef","props","ref","useLazyRef","fn","getDataState","itemValue","stepState","steps","stepKeys","currentIndex","DirectionContext","useDirection","dirProp","contextDir","StoreContext","useStoreContext","consumerName","context","useStore","selector","store","getSnapshot","StepperContext","useStepperContext","StepperRoot","defaultValue","onValueChange","onValueComplete","onValueAdd","onValueRemove","onValidate","idProp","activationMode","asChild","disabled","nonInteractive","loop","labelPosition","className","rootProps","listenersRef","stateRef","propsRef","cb","direction","isValid","completed","newStep","step","updatedStep","rootId","contextValue","RootPrimitive","Slot","jsx","cn","FocusContext","useFocusContext","StepperList","children","listProps","currentValue","state","tabStopId","setTabStopId","isTabbingBackOut","setIsTabbingBackOut","focusableItemCount","setFocusableItemCount","isClickFocusRef","itemsRef","listRef","composedRef","useComposedRefs","onItemFocus","onItemShiftTab","onFocusableItemAdd","prevCount","onFocusableItemRemove","onItemRegister","item","onItemUnregister","getItems","a","b","elementA","elementB","position","onBlur","onFocus","isKeyboardFocus","entryFocusEvent","items","selectedItem","activeItem","currentItem","candidateRefs","onMouseDown","focusContextValue","ListPrimitive","StepperItemContext","useStepperItemContext","StepperItem","itemProps","stepIndex","isFirstStep","isLastStep","itemContextValue","getItemClasses","baseClasses","processedChildren","childArray","trigger","indicator","separator","others","child","slot","StepperTrigger","triggerChild","StepperIndicator","StepperSeparator","prevStepIndex","prevStepValue","leftSeparatorState","leftSeparator","indicatorRow","jsxs","ItemPrimitive","triggerProps","itemContext","focusContext","stepPosition","stepCount","triggerId","contentId","titleId","descriptionId","isDisabled","isActive","isTabStop","triggerRef","isArrowKeyPressedRef","isMouseClickRef","onKeyDown","onKeyUp","onClick","currentStepIndex","focusIntent","nextElement","nextItem","getFlexDirection","shouldWrapIndicator","TriggerPrimitive","colorProp","customColorProp","variantProp","indicatorProps","colorClass","customStyle","IndicatorPrimitive","isDot","Check","forceMount","separatorProps","SeparatorPrimitive","getSeparatorClasses","StepperTitle","titleProps","TitlePrimitive","StepperDescription","descriptionProps","DescriptionPrimitive","StepperContent","valueProp","contentProps","ContentPrimitive","StepperPrev","prevProps","prevIndex","PrevPrimitive","StepperNext","nextProps","nextIndex","nextStepValue","NextPrimitive"],"mappings":"6dAMMA,GAAY,UACZC,GAAY,cACZC,GAAY,cACZC,GAAe,iBACfC,GAAiB,mBACjBC,GAAiB,mBACjBC,GAAa,eACbC,GAAmB,qBACnBC,GAAe,iBACfC,GAAY,cACZC,GAAY,cAEZC,GAAc,iCACdC,GAAgB,CAAE,QAAS,GAAO,WAAY,EAAA,EAC9CC,GAAa,CAAC,UAAW,YAAa,YAAa,YAAY,EAE/DC,GAcF,CACF,QAAS,CACP,UAAW,CACT,OACE,yHACF,UACE,yHACF,SACE,mHAAA,EAEJ,UAAW,CACT,OAAQ,aACR,UAAW,aACX,SAAU,WAAA,CACZ,EAEF,UAAW,CACT,UAAW,CACT,OACE,mIACF,UACE,mIACF,SACE,mHAAA,EAEJ,UAAW,CACT,OAAQ,eACR,UAAW,eACX,SAAU,WAAA,CACZ,EAEF,OAAQ,CACN,UAAW,CACT,OACE,oHACF,UACE,oHACF,SACE,mHAAA,EAEJ,UAAW,CACT,OAAQ,YACR,UAAW,YACX,SAAU,WAAA,CACZ,EAEF,YAAa,CACX,UAAW,CACT,OACE,6IACF,UACE,6IACF,SACE,mHAAA,EAEJ,UAAW,CACT,OAAQ,iBACR,UAAW,iBACX,SAAU,WAAA,CACZ,EAEF,MAAO,CACL,UAAW,CACT,OACE,+GACF,UACE,+GACF,SACE,mHAAA,EAEJ,UAAW,CACT,OAAQ,WACR,UAAW,WACX,SAAU,WAAA,CACZ,EAEF,QAAS,CACP,UAAW,CACT,OACE,yHACF,UACE,yHACF,SACE,mHAAA,EAEJ,UAAW,CACT,OAAQ,aACR,UAAW,aACX,SAAU,WAAA,CACZ,EAEF,MAAO,CACL,UAAW,CACT,OACE,+GACF,UACE,+GACF,SACE,mHAAA,EAEJ,UAAW,CACT,OAAQ,WACR,UAAW,WACX,SAAU,WAAA,CACZ,EAEF,QAAS,CACP,UAAW,CACT,OACE,yHACF,UACE,yHACF,SACE,mHAAA,EAEJ,UAAW,CACT,OAAQ,aACR,UAAW,aACX,SAAU,WAAA,CACZ,CAEJ,EAEA,SAASC,GACPC,EACAC,EACAC,EACQ,CACR,OAAID,EACK,GAGJD,EAKEF,GAAoBE,CAAK,EAAE,UAAUE,CAAS,EAH5CJ,GAAoB,QAAQ,UAAUI,CAAS,CAI1D,CAEA,SAASC,GACPH,EACAC,EACAC,EACQ,CACR,OAAID,EACK,GAGJD,EAKEF,GAAoBE,CAAK,EAAE,UAAUE,CAAS,EAH5CJ,GAAoB,QAAQ,UAAUI,CAAS,CAI1D,CAEA,SAASE,GACPH,EACAC,EACAG,EACiC,CACjC,GAAKJ,EAEL,OAAII,EACEH,IAAc,UAAYA,IAAc,YACnC,CACL,YAAaD,EACb,gBAAiBA,EACjB,MAAO,OAAA,EAGJ,CACL,YAAa,oBACb,gBAAiB,yBACjB,MAAO,8BAAA,EAILC,IAAc,UAAYA,IAAc,YACnC,CACL,gBAAiBD,CAAA,EAGd,CACL,gBAAiB,oBAAA,CAGvB,CA6BA,SAASK,EACPC,EACAC,EACAC,EACA,CACA,MAAO,GAAGF,CAAE,IAAIC,CAAO,IAAIC,CAAK,EAClC,CAIA,MAAMC,GAAuD,CAC3D,UAAW,OACX,QAAS,OACT,WAAY,OACZ,UAAW,OACX,OAAQ,QACR,KAAM,QACN,SAAU,OACV,IAAK,MACP,EAEA,SAASC,GAAqBC,EAAaC,EAAiB,CAC1D,OAAIA,IAAQ,MAAcD,EACnBA,IAAQ,YACX,aACAA,IAAQ,aACN,YACAA,CACR,CAEA,SAASE,GACPC,EACAF,EACAG,EACA,CACA,MAAMJ,EAAMD,GAAqBI,EAAM,IAAKF,CAAG,EAC/C,GAAI,EAAAG,IAAgB,cAAgB,CAAC,UAAW,WAAW,EAAE,SAASJ,CAAG,IAErE,EAAAI,IAAgB,YAAc,CAAC,YAAa,YAAY,EAAE,SAASJ,CAAG,GAE1E,OAAOF,GAAwBE,CAAG,CACpC,CAEA,SAASK,GACPC,EACAC,EAAgB,GAChB,CACA,MAAMC,EAA6B,SAAS,cAC5C,UAAWC,KAAgBH,EAAY,CACrC,MAAMI,EAAYD,EAAa,QAC/B,GAAKC,IACDA,IAAcF,IAClBE,EAAU,MAAM,CAAE,cAAAH,EAAe,EAC7B,SAAS,gBAAkBC,IAA4B,MAC7D,CACF,CAEA,SAASG,GAAaC,EAAYC,EAAoB,CACpD,OAAOD,EAAM,IACX,CAACE,EAAGC,IAAUH,GAAOC,EAAaE,GAASH,EAAM,MAAM,CAAA,CAE3D,CAEA,MAAMI,EACJ,OAAO,OAAW,IAAcC,EAAM,UAAYA,EAAM,gBAE1D,SAASC,GAAYC,EAAU,CAC7B,MAAMC,EAAMH,EAAM,OAAUE,CAAK,EAEjC,OAAAH,EAA0B,IAAM,CAC9BI,EAAI,QAAUD,CAChB,CAAC,EAEMC,CACT,CAEA,SAASC,GAAcC,EAAa,CAClC,MAAMF,EAAMH,EAAM,OAAiB,IAAI,EAEvC,OAAIG,EAAI,UAAY,OAClBA,EAAI,QAAUE,EAAA,GAGTF,CACT,CAEA,SAASG,EACP1B,EACA2B,EACAC,EACAC,EACA9B,EAAgC,OACrB,CACX,MAAM+B,EAAW,MAAM,KAAKD,EAAM,MAAM,EAClCE,EAAeD,EAAS,QAAQH,CAAS,EAE/C,OAAIC,GAAW,UAAkB,YAE7B5B,IAAU2B,EACL5B,IAAY,YAAc,WAAa,SAG5CC,GACkB8B,EAAS,QAAQ9B,CAAK,EAExB+B,EAAqB,YAGlC,UACT,CAEA,MAAMC,GAAmBZ,EAAM,cAAqC,MAAS,EAE7E,SAASa,GAAaC,EAAgC,CACpD,MAAMC,EAAaf,EAAM,WAAWY,EAAgB,EACpD,OAAOE,GAAWC,GAAc,KAClC,CA4BA,MAAMC,GAAehB,EAAM,cAA4B,IAAI,EAE3D,SAASiB,EAAgBC,EAAsB,CAC7C,MAAMC,EAAUnB,EAAM,WAAWgB,EAAY,EAC7C,GAAI,CAACG,EACH,MAAM,IAAI,MAAM,KAAKD,CAAY,4BAA4B/D,EAAS,IAAI,EAE5E,OAAOgE,CACT,CAEA,SAASC,EAAYC,EAAuC,CAC1D,MAAMC,EAAQL,EAAgB,UAAU,EAElCM,EAAcvB,EAAM,YACxB,IAAMqB,EAASC,EAAM,UAAU,EAC/B,CAACA,EAAOD,CAAQ,CAAA,EAGlB,OAAOrB,EAAM,qBAAqBsB,EAAM,UAAWC,EAAaA,CAAW,CAC7E,CAwBA,MAAMC,GAAiBxB,EAAM,cAA0C,IAAI,EAE3E,SAASyB,EAAkBP,EAAsB,CAC/C,MAAMC,EAAUnB,EAAM,WAAWwB,EAAc,EAC/C,GAAI,CAACL,EACH,MAAM,IAAI,MAAM,KAAKD,CAAY,4BAA4B/D,EAAS,IAAI,EAE5E,OAAOgE,CACT,CAyBA,SAASO,GAAYxB,EAAyB,CAC5C,KAAM,CACJ,MAAAtB,EACA,aAAA+C,EACA,cAAAC,EACA,gBAAAC,EACA,WAAAC,EACA,cAAAC,EACA,WAAAC,EACA,GAAIC,EACJ,IAAKnB,EACL,YAAA3B,EAAc,aACd,eAAA+C,EAAiB,YACjB,QAAAC,EACA,SAAAC,EAAW,GACX,eAAAC,EAAiB,GACjB,KAAAC,EAAO,GACP,MAAAnE,EACA,YAAAC,EACA,QAAAO,EAAU,SACV,cAAA4D,EAAgB,QAChB,UAAAC,EACA,GAAGC,CAAA,EACDvC,EAEEwC,EAAetC,GAAW,IAAM,IAAI,GAAiB,EACrDuC,EAAWvC,GAAuB,KAAO,CAC7C,UAAW,IACX,MAAOxB,GAAS+C,GAAgB,EAAA,EAChC,EACIiB,EAAW3C,GAAS,CACxB,cAAA2B,EACA,gBAAAC,EACA,WAAAC,EACA,cAAAC,EACA,WAAAC,CAAA,CACD,EAEKV,EAAetB,EAAM,QAAQ,KAC1B,CACL,UAAY6C,IACVH,EAAa,QAAQ,IAAIG,CAAE,EACpB,IAAMH,EAAa,QAAQ,OAAOG,CAAE,GAE7C,SAAU,IAAMF,EAAS,QACzB,SAAU,CAAC5D,EAAKH,IAAU,CACpB,OAAO,GAAG+D,EAAS,QAAQ5D,CAAG,EAAGH,CAAK,IAEtCG,IAAQ,SAAW,OAAOH,GAAU,UACtC+D,EAAS,QAAQ,MAAQ/D,EACzBgE,EAAS,QAAQ,gBAAgBhE,CAAK,GAEtC+D,EAAS,QAAQ5D,CAAG,EAAIH,EAG1B0C,EAAM,OAAA,EACR,EACA,uBAAwB,MAAO1C,EAAOkE,IAAc,CAClD,GAAI,CAACF,EAAS,QAAQ,WACpB,OAAAtB,EAAM,SAAS,QAAS1C,CAAK,EACtB,GAGT,GAAI,CACF,MAAMmE,EAAU,MAAMH,EAAS,QAAQ,WAAWhE,EAAOkE,CAAS,EAClE,OAAIC,GACFzB,EAAM,SAAS,QAAS1C,CAAK,EAExBmE,CACT,MAAQ,CACN,MAAO,EACT,CACF,EACA,cAAe,IAAM,CAAC,CAACH,EAAS,QAAQ,WACxC,QAAS,CAAChE,EAAOoE,EAAWZ,IAAa,CACvC,MAAMa,EAAqB,CAAE,MAAArE,EAAO,UAAAoE,EAAW,SAAAZ,CAAAA,EAC/CO,EAAS,QAAQ,MAAM,IAAI/D,EAAOqE,CAAO,EACzCL,EAAS,QAAQ,aAAahE,CAAK,EACnC0C,EAAM,OAAA,CACR,EACA,WAAa1C,GAAU,CACrB+D,EAAS,QAAQ,MAAM,OAAO/D,CAAK,EACnCgE,EAAS,QAAQ,gBAAgBhE,CAAK,EACtC0C,EAAM,OAAA,CACR,EACA,QAAS,CAAC1C,EAAOoE,EAAWZ,IAAa,CACvC,MAAMc,EAAOP,EAAS,QAAQ,MAAM,IAAI/D,CAAK,EAC7C,GAAIsE,EAAM,CACR,MAAMC,EAAyB,CAAE,GAAGD,EAAM,UAAAF,EAAW,SAAAZ,CAAAA,EACrDO,EAAS,QAAQ,MAAM,IAAI/D,EAAOuE,CAAW,EAEzCH,IAAcE,EAAK,WACrBN,EAAS,QAAQ,kBAAkBhE,EAAOoE,CAAS,EAGrD1B,EAAM,OAAA,CACR,CACF,EACA,OAAQ,IAAM,CACZ,UAAWuB,KAAMH,EAAa,QAC5BG,EAAA,CAEJ,CAAA,GAED,CAACH,EAAcC,EAAUC,CAAQ,CAAC,EAErC7C,EAA0B,IAAM,CAC1BnB,IAAU,QACZ0C,EAAM,SAAS,QAAS1C,CAAK,CAEjC,EAAG,CAACA,EAAO0C,CAAK,CAAC,EAEjB,MAAMtC,EAAM6B,GAAaC,CAAO,EAE1BpC,EAAKsB,EAAM,MAAA,EAEXoD,EAASnB,GAAUvD,EAEnB2E,EAAerD,EAAM,QACzB,KAAO,CACL,GAAIoD,EACJ,IAAApE,EACA,YAAAG,EACA,eAAA+C,EACA,SAAAE,EACA,eAAAC,EACA,KAAAC,EACA,MAAAnE,EACA,YAAAC,EACA,QAAAO,EACA,cAAA4D,CAAA,GAEF,CACEa,EACApE,EACAG,EACA+C,EACAE,EACAC,EACAC,EACAnE,EACAC,EACAO,EACA4D,CAAA,CACF,EAGIe,EAAgBnB,EAAUoB,EAAAA,KAAO,MAEvC,OACEC,EAAAA,IAACxC,GAAa,SAAb,CAAsB,MAAOM,EAC5B,SAAAkC,EAAAA,IAAChC,GAAe,SAAf,CAAwB,MAAO6B,EAC9B,SAAAG,EAAAA,IAACF,EAAA,CACC,GAAIF,EACJ,gBAAehB,EAAW,GAAK,OAC/B,mBAAkBjD,EAClB,YAAU,UACV,IAAAH,EACC,GAAGyD,EACJ,UAAWgB,EAAAA,GACT,aACAtE,IAAgB,aAAe,kBAAoB,WACnDqD,CAAA,CACF,CAAA,EAEJ,CAAA,CACF,CAEJ,CAaA,MAAMkB,GAAe1D,EAAM,cAAwC,IAAI,EAEvE,SAAS2D,GAAgBzC,EAAsB,CAC7C,MAAMC,EAAUnB,EAAM,WAAW0D,EAAY,EAC7C,GAAI,CAACvC,EACH,MAAM,IAAI,MACR,KAAKD,CAAY,0CAAA,EAGrB,OAAOC,CACT,CAMA,SAASyC,GAAY1D,EAAyB,CAC5C,KAAM,CAAE,UAAAsC,EAAW,SAAAqB,EAAU,QAAA1B,EAAS,IAAAhC,EAAK,GAAG2D,GAAc5D,EAEtDiB,EAAUM,EAAkBrE,EAAS,EACrC+B,EAAcgC,EAAQ,YACtB4C,EAAe3C,EAAU4C,GAAUA,EAAM,KAAK,EAE9C,CAACC,EAAWC,CAAY,EAAIlE,EAAM,SAAwB,IAAI,EAC9D,CAACmE,EAAkBC,CAAmB,EAAIpE,EAAM,SAAS,EAAK,EAC9D,CAACqE,EAAoBC,CAAqB,EAAItE,EAAM,SAAS,CAAC,EAC9DuE,EAAkBvE,EAAM,OAAO,EAAK,EACpCwE,EAAWxE,EAAM,OAA8B,IAAI,GAAK,EACxDyE,EAAUzE,EAAM,OAAoB,IAAI,EACxC0E,EAAcC,EAAAA,gBAAgBxE,EAAKsE,CAAO,EAE1CG,EAAc5E,EAAM,YAAaiE,GAAsB,CAC3DC,EAAaD,CAAS,CACxB,EAAG,CAAA,CAAE,EAECY,EAAiB7E,EAAM,YAAY,IAAM,CAC7CoE,EAAoB,EAAI,CAC1B,EAAG,CAAA,CAAE,EAECU,EAAqB9E,EAAM,YAAY,IAAM,CACjDsE,EAAuBS,GAAcA,EAAY,CAAC,CACpD,EAAG,CAAA,CAAE,EAECC,EAAwBhF,EAAM,YAAY,IAAM,CACpDsE,EAAuBS,GAAcA,EAAY,CAAC,CACpD,EAAG,CAAA,CAAE,EAECE,EAAiBjF,EAAM,YAAakF,GAAmB,CAC3DV,EAAS,QAAQ,IAAIU,EAAK,GAAIA,CAAI,CACpC,EAAG,CAAA,CAAE,EAECC,EAAmBnF,EAAM,YAAatB,GAAe,CACzD8F,EAAS,QAAQ,OAAO9F,CAAE,CAC5B,EAAG,CAAA,CAAE,EAEC0G,EAAWpF,EAAM,YAAY,IAC1B,MAAM,KAAKwE,EAAS,QAAQ,OAAA,CAAQ,EACxC,OAAQU,GAASA,EAAK,IAAI,OAAO,EACjC,KAAK,CAACG,EAAGC,IAAM,CACd,MAAMC,EAAWF,EAAE,IAAI,QACjBG,EAAWF,EAAE,IAAI,QACvB,GAAI,CAACC,GAAY,CAACC,EAAU,MAAO,GACnC,MAAMC,EAAWF,EAAS,wBAAwBC,CAAQ,EAC1D,OAAIC,EAAW,KAAK,4BACX,GAELA,EAAW,KAAK,4BACX,EAEF,CACT,CAAC,EACF,CAAA,CAAE,EAECC,EAAS1F,EAAM,YAClBd,GAAyC,CACxC4E,EAAU,SAAS5E,CAAK,EACpB,CAAAA,EAAM,kBAEVkF,EAAoB,EAAK,CAC3B,EACA,CAACN,EAAU,MAAM,CAAA,EAGb6B,EAAU3F,EAAM,YACnBd,GAAyC,CAExC,GADA4E,EAAU,UAAU5E,CAAK,EACrBA,EAAM,iBAAkB,OAE5B,MAAM0G,EAAkB,CAACrB,EAAgB,QACzC,GACErF,EAAM,SAAWA,EAAM,eACvB0G,GACA,CAACzB,EACD,CACA,MAAM0B,EAAkB,IAAI,YAAY/H,GAAaC,EAAa,EAGlE,GAFAmB,EAAM,cAAc,cAAc2G,CAAe,EAE7C,CAACA,EAAgB,iBAAkB,CACrC,MAAMC,EAAQ,MAAM,KAAKtB,EAAS,QAAQ,OAAA,CAAQ,EAAE,OACjDU,GAAS,CAACA,EAAK,QAAA,EAEZa,EAAehC,EACjB+B,EAAM,KAAMZ,GAASA,EAAK,QAAUnB,CAAY,EAChD,OACEiC,EAAaF,EAAM,KAAMZ,GAASA,EAAK,MAAM,EAC7Ce,GAAcH,EAAM,KAAMZ,GAASA,EAAK,KAAOjB,CAAS,EAQxDiC,GANiB,CACrBH,EACAC,EACAC,GACA,GAAGH,CAAA,EACH,OAAO,OAAO,EACqB,IAAKZ,GAASA,EAAK,GAAG,EAC3D9F,GAAW8G,GAAe,EAAK,CACjC,CACF,CACA3B,EAAgB,QAAU,EAC5B,EACA,CAACT,EAAU,QAASK,EAAkBJ,EAAcE,CAAS,CAAA,EAGzDkC,EAAcnG,EAAM,YACvBd,GAAyC,CACxC4E,EAAU,cAAc5E,CAAK,EAEzB,CAAAA,EAAM,mBAEVqF,EAAgB,QAAU,GAC5B,EACA,CAACT,EAAU,WAAW,CAAA,EAGlBsC,EAAoBpG,EAAM,QAC9B,KAAO,CACL,UAAAiE,EACA,YAAAW,EACA,eAAAC,EACA,mBAAAC,EACA,sBAAAE,EACA,eAAAC,EACA,iBAAAE,EACA,SAAAC,CAAA,GAEF,CACEnB,EACAW,EACAC,EACAC,EACAE,EACAC,EACAE,EACAC,CAAA,CACF,EAGIiB,EAAgBlE,EAAUoB,EAAAA,KAAO,MAEvC,OACEC,EAAAA,IAACE,GAAa,SAAb,CAAsB,MAAO0C,EAC5B,SAAA5C,EAAAA,IAAC6C,EAAA,CACC,KAAK,UACL,mBAAkBlH,EAClB,mBAAkBA,EAClB,YAAU,eACV,IAAKgC,EAAQ,IACb,SAAUgD,GAAoBE,IAAuB,EAAI,GAAK,EAC7D,GAAGP,EACJ,IAAKY,EACL,UAAWjB,EAAAA,GACT,oBACAtE,IAAgB,aACZ,wBACA,uBACJqD,CAAA,EAEF,OAAAkD,EACA,QAAAC,EACA,YAAAQ,EAEC,SAAAtC,CAAA,CAAA,EAEL,CAEJ,CAOA,MAAMyC,GAAqBtG,EAAM,cAC/B,IACF,EAEA,SAASuG,GAAsBrF,EAAsB,CACnD,MAAMC,EAAUnB,EAAM,WAAWsG,EAAkB,EACnD,GAAI,CAACnF,EACH,MAAM,IAAI,MAAM,KAAKD,CAAY,4BAA4B7D,EAAS,IAAI,EAE5E,OAAO8D,CACT,CAQA,SAASqF,GAAYtG,EAAyB,CAC5C,KAAM,CACJ,MAAOK,EACP,UAAAyC,EAAY,GACZ,SAAAZ,EAAW,GACX,QAAAD,EACA,UAAAK,EACA,SAAAqB,EACA,IAAA1D,EACA,GAAGsG,CAAA,EACDvG,EAEEiB,EAAUM,EAAkBpE,EAAS,EACrCiE,EAAQL,EAAgB5D,EAAS,EACjC8B,EAAcgC,EAAQ,YACtBoB,EAAgBpB,EAAQ,eAAiB,QACzCvC,EAAQwC,EAAU4C,GAAUA,EAAM,KAAK,EAE7CjE,EAA0B,KACxBuB,EAAM,QAAQf,EAAWyC,EAAWZ,CAAQ,EAErC,IAAM,CACXd,EAAM,WAAWf,CAAS,CAC5B,GACC,CAACA,EAAWyC,EAAWZ,CAAQ,CAAC,EAEnCrC,EAA0B,IAAM,CAC9BuB,EAAM,QAAQf,EAAWyC,EAAWZ,CAAQ,CAC9C,EAAG,CAAC7B,EAAWyC,EAAWZ,CAAQ,CAAC,EAEnC,MAAM5B,EAAYY,EAAU4C,GAAUA,EAAM,MAAM,IAAIzD,CAAS,CAAC,EAC1DE,EAAQW,EAAU4C,GAAUA,EAAM,KAAK,EACvC3F,EAAYiC,EAAa1B,EAAO2B,EAAWC,EAAWC,CAAK,EAE3DC,EAAW,MAAM,KAAKD,EAAM,MAAM,EAClCiG,EAAYhG,EAAS,QAAQH,CAAS,EACtCoG,EAAcD,IAAc,EAC5BE,EAAaF,IAAchG,EAAS,OAAS,EAE7CmG,EAAmB7G,EAAM,QAC7B,KAAO,CACL,MAAOO,EACP,UAAAC,CAAA,GAEF,CAACD,EAAWC,CAAS,CAAA,EAIjBsG,EAAiB,IAAM,CAC3B,MAAMC,EAAc,gBAEpB,OAAI5H,IAAgB,aAEdoD,IAAkB,OAASA,IAAkB,SAGxC,GAAGwE,CAAW,sCAGhB,GAAGA,CAAW,yCAGd,GAAGA,CAAW,WAEzB,EAGMC,EAAoBhH,EAAM,QAAQ,IAAM,CAC5C,GACEb,IAAgB,eACfoD,IAAkB,OAASA,IAAkB,UAC9C,CACA,MAAM0E,EAAajH,EAAM,SAAS,QAAQ6D,CAAQ,EAClD,IAAIqD,EAA2B,KAC3BC,EAA6B,KAC7BC,EAA6B,KACjC,MAAMC,EAA4B,CAAA,EAElCJ,EAAW,QAASK,GAAU,CAC5B,GAAItH,EAAM,eAAesH,CAAK,EAAG,CAC/B,MAAMC,EAAQD,EAAM,MAAmC,WAAW,EAC9DC,IAAS,mBAAqBD,EAAM,OAASE,IAC/CN,EAAUI,EAEctH,EAAM,SAAS,QACpCsH,EACE,MAAM,QAAA,EAEK,QAASG,GAAiB,CACpCzH,EAAM,eAAeyH,CAAY,IAEjCA,EAAa,MACb,WAAW,IAEU,qBACrBA,EAAa,OAASC,MAEtBP,EAAYM,EAGlB,CAAC,GAEDF,IAAS,qBACTD,EAAM,OAASK,GAEfP,EAAYE,EAEZD,EAAO,KAAKC,CAAK,CAErB,MACED,EAAO,KAAKC,CAAK,CAErB,CAAC,EAOD,MAAMM,EAAgBlB,EAAY,EAC5BmB,EAAgBD,GAAiB,EAAIlH,EAASkH,CAAa,EAAI,KAC/DE,EAAqBD,EACvBvH,EACE1B,EACAiJ,EACApH,EAAM,IAAIoH,CAAa,EACvBpH,EACA,WAAA,EAEF,WAGJ,IAAIsH,EAAiC,KACrC,GAAI,CAACpB,EAAa,CAChB,MAAMxI,EAAQgD,EAAQ,MAChB/C,EAAc+C,EAAQ,YAE5B4G,EACEvE,EAAAA,IAAC,MAAA,CAEC,UAAWC,EAAAA,GACT,gCACAnF,GAAuBH,EAAOC,EAAa0J,CAAkB,CAAA,EAE/D,MAAOvJ,GAAoBH,EAAa0J,EAAoB,EAAK,EACjE,cAAY,MAAA,EANR,gBAAA,CASV,CAEA,MAAME,EACJC,EAAAA,KAAC,MAAA,CACC,UAAU,0CAIT,SAAA,CAAAF,EAEApB,GACCnD,EAAAA,IAAC,MAAA,CAAI,UAAU,6BAA6B,cAAY,OAAO,EAEhE2D,EAEA,CAACP,GAAcQ,EAEfR,GACCpD,EAAAA,IAAC,MAAA,CAAI,UAAU,6BAA6B,cAAY,MAAA,CAAO,CAAA,CAAA,EAb7D,eAAA,EAkBR,OAAIjB,IAAkB,MACb,CAAC2E,EAASc,EAAc,GAAGX,CAAM,EAEjC,CAACW,EAAcd,EAAS,GAAGG,CAAM,CAE5C,CAEA,OAAOxD,CACT,EAAG,CACDA,EACA1E,EACAoD,EACAoE,EACAC,EACAF,EACAhG,EACAD,EACA7B,EACAuC,EAAQ,MACRA,EAAQ,WAAA,CACT,EAEK+G,EAAgB/F,EAAUoB,EAAAA,KAAO,MAEvC,OACEC,EAAAA,IAAC8C,GAAmB,SAAnB,CAA4B,MAAOO,EAClC,SAAArD,EAAAA,IAAC0E,EAAA,CACC,gBAAe1H,GAAW,SAAW,GAAK,OAC1C,mBAAkBrB,EAClB,aAAYd,EACZ,YAAU,eACV,sBAAqBkE,EACrB,IAAKpB,EAAQ,IACZ,GAAGsF,EACJ,IAAAtG,EACA,UAAWsD,EAAAA,GAAGqD,EAAA,EAAkBtE,CAAS,EAExC,SAAAwE,CAAA,CAAA,EAEL,CAEJ,CAEA,SAASQ,GAAetH,EAAoB,CAC1C,KAAM,CAAE,QAAAiC,EAAS,SAAAC,EAAU,UAAAI,EAAW,IAAArC,EAAK,GAAGgI,GAAiBjI,EAEzDiB,EAAUM,EAAkBnE,EAAY,EACxC8K,EAAc7B,GAAsBjJ,EAAY,EAChDgE,EAAQL,EAAgB3D,EAAY,EACpC+K,EAAe1E,GAAgBrG,EAAY,EAC3CsB,EAAQwC,EAAU4C,GAAUA,EAAM,KAAK,EACvCzD,EAAY6H,EAAY,MACxB5H,EAAYY,EAAU4C,GAAUA,EAAM,MAAM,IAAIzD,CAAS,CAAC,EAC1D2B,EAAiBf,EAAQ,eACzBhC,EAAcgC,EAAQ,YACtBmB,EAAOnB,EAAQ,KACfoB,EAAgBpB,EAAQ,eAAiB,QAEzCV,EAAQW,EAAU4C,GAAUA,EAAM,KAAK,EAGvCsE,EAFY,MAAM,KAAK7H,EAAM,MAAM,EAAE,QAAQF,CAAS,EAE3B,EAC3BgI,EAAY9H,EAAM,KAElB+H,EAAY/J,EAAM0C,EAAQ,GAAI,UAAWZ,CAAS,EAClDkI,EAAYhK,EAAM0C,EAAQ,GAAI,UAAWZ,CAAS,EAClDmI,EAAUjK,EAAM0C,EAAQ,GAAI,QAASZ,CAAS,EAC9CoI,EAAgBlK,EAAM0C,EAAQ,GAAI,cAAeZ,CAAS,EAE1DqI,EAAazH,EAAQ,UAAYX,GAAW,UAAY4B,EACxDyG,EAAWjK,IAAU2B,EACrBuI,EAAYT,EAAa,YAAcG,EACvCnK,EAAYiC,EAAa1B,EAAO2B,EAAWC,EAAWC,CAAK,EAE3DsI,EAAa/I,EAAM,OAAuB,IAAI,EAC9C0E,EAAcC,EAAAA,gBAAgBxE,EAAK4I,CAAU,EAC7CC,EAAuBhJ,EAAM,OAAO,EAAK,EACzCiJ,EAAkBjJ,EAAM,OAAO,EAAK,EAE1CA,EAAM,UAAU,IAAM,CACpB,SAASkJ,EAAUhK,EAAsB,CACnClB,GAAW,SAASkB,EAAM,GAAG,IAC/B8J,EAAqB,QAAU,GAEnC,CACA,SAASG,GAAU,CACjBH,EAAqB,QAAU,EACjC,CACA,gBAAS,iBAAiB,UAAWE,CAAS,EAC9C,SAAS,iBAAiB,QAASC,CAAO,EACnC,IAAM,CACX,SAAS,oBAAoB,UAAWD,CAAS,EACjD,SAAS,oBAAoB,QAASC,CAAO,CAC/C,CACF,EAAG,CAAA,CAAE,EAELpJ,EAA0B,KACxBsI,EAAa,eAAe,CAC1B,GAAIG,EACJ,IAAKO,EACL,MAAOxI,EACP,OAAQuI,EACR,SAAU,CAAC,CAACF,CAAA,CACb,EAEIA,GACHP,EAAa,mBAAA,EAGR,IAAM,CACXA,EAAa,iBAAiBG,CAAS,EAClCI,GACHP,EAAa,sBAAA,CAEjB,GACC,CAACA,EAAcG,EAAWjI,EAAWuI,EAAWF,CAAU,CAAC,EAE9D,MAAMQ,EAAUpJ,EAAM,YACpB,MAAOd,GAA4C,CAEjD,GADAiJ,EAAa,UAAUjJ,CAAK,EACxB,CAAAA,EAAM,kBAEN,CAAC0J,GAAc,CAACzH,EAAQ,eAAgB,CAC1C,MAAMkI,EAAmB,MAAM,KAAK5I,EAAM,MAAM,EAAE,QAAQ7B,GAAS,EAAE,EAE/DkE,EADkB,MAAM,KAAKrC,EAAM,MAAM,EAAE,QAAQF,CAAS,EAC9B8I,EAAmB,OAAS,OAEhE,MAAM/H,EAAM,uBAAuBf,EAAWuC,CAAS,CACzD,CACF,EACA,CACE8F,EACAzH,EAAQ,eACRG,EACAf,EACA3B,EACA6B,EACA0H,EAAa,OAAA,CACf,EAGIxC,EAAU3F,EAAM,YACpB,MAAOd,GAA4C,CAEjD,GADAiJ,EAAa,UAAUjJ,CAAK,EACxBA,EAAM,iBAAkB,OAE5BmJ,EAAa,YAAYG,CAAS,EAElC,MAAM5C,EAAkB,CAACqD,EAAgB,QAEzC,GACE,CAACJ,GACD,CAACD,GACD1G,IAAmB,UACnB,CAACf,EAAQ,gBACTyE,EACA,CACA,MAAMyD,EAAmB,MAAM,KAAK5I,EAAM,MAAM,EAAE,QAAQ7B,GAAS,EAAE,EAE/DkE,EADkB,MAAM,KAAKrC,EAAM,MAAM,EAAE,QAAQF,CAAS,EAC9B8I,EAAmB,OAAS,OAEhE,MAAM/H,EAAM,uBAAuBf,EAAWuC,CAAS,CACzD,CAEAmG,EAAgB,QAAU,EAC5B,EACA,CACEZ,EACAG,EACAtG,EACA2G,EACAD,EACAzH,EAAQ,eACRG,EACAf,EACA3B,EACA6B,EACA0H,EAAa,OAAA,CACf,EAGIe,EAAYlJ,EAAM,YACtB,MAAOd,GAA+C,CAEpD,GADAiJ,EAAa,YAAYjJ,CAAK,EAC1BA,EAAM,iBAAkB,OAE5B,GAAIA,EAAM,MAAQ,SAAWiC,EAAQ,eAAgB,CACnDjC,EAAM,eAAA,EACN,MACF,CAEA,IACGA,EAAM,MAAQ,SAAWA,EAAM,MAAQ,MACxCgD,IAAmB,UACnB,CAACf,EAAQ,eACT,CACAjC,EAAM,eAAA,EACF,CAAC0J,GAAcG,EAAW,SAC5BA,EAAW,QAAQ,MAAA,EAErB,MACF,CAEA,GAAI7J,EAAM,MAAQ,OAASA,EAAM,SAAU,CACzCmJ,EAAa,eAAA,EACb,MACF,CAEA,GAAInJ,EAAM,SAAWA,EAAM,cAAe,OAE1C,MAAMoK,EAAcrK,GAAeC,EAAOiC,EAAQ,IAAKhC,CAAW,EAElE,GAAImK,IAAgB,OAAW,CAC7B,GAAIpK,EAAM,SAAWA,EAAM,SAAWA,EAAM,QAAUA,EAAM,SAC1D,OACFA,EAAM,eAAA,EAEN,MAAM4G,EAAQuC,EAAa,SAAA,EAAW,OAAQnD,GAAS,CAACA,EAAK,QAAQ,EACrE,IAAIgB,EAAgBJ,EAAM,IAAKZ,GAASA,EAAK,GAAG,EAEhD,GAAIoE,IAAgB,OAClBpD,EAAc,QAAA,UACLoD,IAAgB,QAAUA,IAAgB,OAAQ,CACvDA,IAAgB,QAAQpD,EAAc,QAAA,EAC1C,MAAMvF,EAAeuF,EAAc,UAChC/F,IAAQA,GAAI,UAAYjB,EAAM,aAAA,EAEjCgH,EAAgB5D,EACZ5C,GAAUwG,EAAevF,EAAe,CAAC,EACzCuF,EAAc,MAAMvF,EAAe,CAAC,CAC1C,CAEA,GAAIW,EAAM,cAAA,GAAmB4E,EAAc,OAAS,EAAG,CAErD,MAAMqD,GADUrD,EAAc,CAAC,GACF,QACvBsD,EAAW1D,EAAM,KACpBZ,IAASA,GAAK,IAAI,UAAYqE,EAAA,EAGjC,GAAIC,GAAYA,EAAS,QAAUjJ,EAAW,CAC5C,MAAM8I,GAAmB,MAAM,KAAK5I,EAAM,KAAA,CAAM,EAAE,QAChD7B,GAAS,EAAA,EAKLkE,GAHkB,MAAM,KAAKrC,EAAM,KAAA,CAAM,EAAE,QAC/C+I,EAAS,KAAA,EAGSH,GAAmB,OAAS,OAEhD,GAAIvG,KAAc,QAKhB,GAAI,CAJY,MAAMxB,EAAM,uBAC1BkI,EAAS,MACT1G,EAAA,EAEY,YAEdxB,EAAM,SAAS,QAASkI,EAAS,KAAK,EAGxC,eAAe,IAAMD,IAAa,OAAO,EACzC,MACF,CACF,CAEA,eAAe,IAAMnK,GAAW8G,CAAa,CAAC,CAChD,CACF,EACA,CACEmC,EACAlH,EAAQ,eACRA,EAAQ,IACRe,EACA/C,EACAmD,EACAsG,EACAT,EAAa,UACb7G,EACAf,EACA3B,EACA6B,CAAA,CACF,EAGI0F,EAAcnG,EAAM,YACvBd,GAA4C,CAC3CiJ,EAAa,cAAcjJ,CAAK,EAC5B,CAAAA,EAAM,mBAEV+J,EAAgB,QAAU,GAEtBL,EACF1J,EAAM,eAAA,EAENmJ,EAAa,YAAYG,CAAS,EAEtC,EACA,CAACH,EAAcG,EAAWI,EAAYT,EAAa,WAAW,CAAA,EAI1DsB,GAAmB,IAErBtK,IAAgB,eACfoD,IAAkB,OAASA,IAAkB,UAIvCA,IAAkB,MAAQ,mBAAqB,WAGpDA,IAAkB,MAAc,mBAChCA,IAAkB,SAAiB,WACnCA,IAAkB,OAAe,mBAC9B,WAGHmH,EACJvK,IAAgB,eACfoD,IAAkB,OAASA,IAAkB,UAG1CyE,GAAoBhH,EAAM,QAAQ,IACjC0J,EAEc1J,EAAM,SAAS,QAAQmI,EAAa,QAAQ,EAC7C,OAAQb,GACpBtH,EAAM,eAAesH,CAAK,EAErB,EADOA,EAAM,MAAmC,WAAW,IAEvD,qBAAuBA,EAAM,OAASI,IAG5C,EACR,EAXgCS,EAAa,SAY7C,CAACuB,EAAqBvB,EAAa,QAAQ,CAAC,EAEzCwB,EAAmBxH,EAAUoB,EAAAA,KAAO,SAE1C,OACEC,EAAAA,IAACmG,EAAA,CACC,GAAInB,EACJ,KAAK,MACL,KAAK,SACL,gBAAeC,EACf,eAAcI,EAAW,OAAS,OAClC,mBAAkB,GAAGH,CAAO,IAAIC,CAAa,GAC7C,gBAAeL,EACf,gBAAeO,EACf,eAAcN,EACd,gBAAeK,EAAa,GAAK,OACjC,aAAYvK,EACZ,YAAU,kBACV,sBAAqBqL,EAAsB,GAAK,OAChD,SAAUd,EACV,SAAUE,EAAY,EAAI,GACzB,GAAGX,EACJ,IAAKzD,EACL,UAAWjB,EAAAA,GACT,yZACA,sFACAiG,EAAsB,GAAKD,GAAA,EAC3BjH,CAAA,EAEF,QAAA4G,EACA,QAAAzD,EACA,UAAAuD,EACA,YAAA/C,EAEC,SAAAa,EAAA,CAAA,CAGP,CASA,SAASU,GAAiBxH,EAA8B,CACtD,KAAM,CACJ,UAAAsC,EACA,SAAAqB,EACA,QAAA1B,EACA,IAAAhC,EACA,MAAOyJ,EACP,YAAaC,EACb,QAASC,EACT,GAAGC,CAAA,EACD7J,EACEiB,EAAUM,EAAkBlE,EAAc,EAC1C6K,EAAc7B,GAAsBhJ,EAAc,EAClDqB,EAAQwC,EAAU4C,GAAUA,EAAM,KAAK,EACvCzD,EAAY6H,EAAY,MACxB5H,EAAYY,EAAU4C,GAAUA,EAAM,MAAM,IAAIzD,CAAS,CAAC,EAC1DE,EAAQW,EAAU4C,GAAUA,EAAM,KAAK,EAEvCsE,EAAe,MAAM,KAAK7H,EAAM,MAAM,EAAE,QAAQF,CAAS,EAAI,EAE7DlC,EAAYiC,EAAa1B,EAAO2B,EAAWC,EAAWC,CAAK,EAE3DtC,EAAQyL,GAAazI,EAAQ,MAC7B/C,EAAcyL,GAAmB1I,EAAQ,YACzCxC,EAAUmL,GAAe3I,EAAQ,SAAW,SAE5C6I,EAAa9L,GAAuBC,EAAOC,EAAaC,CAAS,EACjE4L,EAAc1L,GAAoBH,EAAaC,EAAW,EAAI,EAE9D6L,EAAqB/H,EAAUoB,EAAAA,KAAO,MAEtC4G,EAAQxL,IAAY,MAE1B,OACE6E,EAAAA,IAAC0G,EAAA,CACC,aAAY7L,EACZ,eAAcM,EACd,YAAU,oBACV,IAAKwC,EAAQ,IACZ,GAAG4I,EACJ,IAAA5J,EACA,MAAO,CAAE,GAAG4J,EAAe,MAAO,GAAGE,CAAA,EACrC,UAAWxG,EAAAA,GACT,wGACA0G,EAAQ,mCAAqC,SAC7CH,EACAxH,CAAA,EAGD,UAAC2H,IACC,OAAOtG,GAAa,WACnBA,EAASxF,CAAS,EAChBwF,IAEAxF,IAAc,YAChBmF,MAAC4G,GAAAA,MAAA,CAAM,UAAU,SAAS,EAE1B9B,GAAA,CAAA,CAIV,CAQA,SAASX,GAAiBzH,EAA8B,CACtD,KAAM,CACJ,UAAAsC,EACA,QAAAL,EACA,WAAAkI,EAAa,GACb,IAAAlK,EACA,MAAOyJ,EACP,YAAaC,EACb,GAAGS,CAAA,EACDpK,EAEEiB,EAAUM,EAAkBjE,EAAc,EAC1C4K,EAAc7B,GAAsB/I,EAAc,EAClDoB,EAAQwC,EAAU4C,GAAUA,EAAM,KAAK,EACvC7E,EAAcgC,EAAQ,YACtBoB,EAAgBpB,EAAQ,eAAiB,QAEzCV,EAAQW,EAAU4C,GAAUA,EAAM,KAAK,EAK7C,GAJkB,MAAM,KAAKvD,EAAM,MAAM,EAAE,QAAQ2H,EAAY,KAAK,IAEnC3H,EAAM,KAAO,GAE5B,CAAC4J,EACjB,OAAO,KAGT,MAAMhM,EAAYiC,EAChB1B,EACAwJ,EAAY,MACZA,EAAY,UACZ3H,EACA,WAAA,EAGItC,EAAQyL,GAAazI,EAAQ,MAC7B/C,EAAcyL,GAAmB1I,EAAQ,YAEzC6I,EAAa1L,GAAuBH,EAAOC,EAAaC,CAAS,EACjE4L,EAAc1L,GAAoBH,EAAaC,EAAW,EAAK,EAE/DkM,EAAqBpI,EAAUoB,EAAAA,KAAO,MAGtCiH,EAAsB,IACtBrL,IAAgB,aAKT,cAMLoD,IAAkB,OAASA,IAAkB,SAExC,gEACEA,IAAkB,OAEpB,8DAGA,8DAKb,OACEiB,EAAAA,IAAC+G,EAAA,CACC,KAAK,YACL,cAAY,OACZ,mBAAkBpL,EAClB,mBAAkBA,EAClB,aAAYd,EACZ,YAAU,oBACV,IAAK8C,EAAQ,IACZ,GAAGmJ,EACJ,IAAAnK,EACA,MAAO,CAAE,GAAGmK,EAAe,MAAO,GAAGL,CAAA,EACrC,UAAWxG,EAAAA,GACT,oBACA+G,EAAA,EACAR,EACAxH,CAAA,CACF,CAAA,CAGN,CAMA,SAASiI,GAAavK,EAA0B,CAC9C,KAAM,CAAE,UAAAsC,EAAW,QAAAL,EAAS,IAAAhC,EAAK,GAAGuK,GAAexK,EAE7CiB,EAAUM,EAAkBhE,EAAU,EACtC2K,EAAc7B,GAAsB9I,EAAU,EAE9CiL,EAAUjK,EAAM0C,EAAQ,GAAI,QAASiH,EAAY,KAAK,EAEtDuC,EAAiBxI,EAAUoB,EAAAA,KAAO,OAExC,OACEC,EAAAA,IAACmH,EAAA,CACC,GAAIjC,EACJ,YAAU,QACV,IAAKvH,EAAQ,IACZ,GAAGuJ,EACJ,IAAAvK,EACA,UAAWsD,EAAAA,GAAG,sBAAuBjB,CAAS,CAAA,CAAA,CAGpD,CAMA,SAASoI,GAAmB1K,EAAgC,CAC1D,KAAM,CAAE,UAAAsC,EAAW,QAAAL,EAAS,IAAAhC,EAAK,GAAG0K,GAAqB3K,EACnDiB,EAAUM,EAAkB/D,EAAgB,EAC5C0K,EAAc7B,GAAsB7I,EAAgB,EAEpDiL,EAAgBlK,EAAM0C,EAAQ,GAAI,cAAeiH,EAAY,KAAK,EAElE0C,EAAuB3I,EAAUoB,EAAAA,KAAO,OAE9C,OACEC,EAAAA,IAACsH,EAAA,CACC,GAAInC,EACJ,YAAU,cACV,IAAKxH,EAAQ,IACZ,GAAG0J,EACJ,IAAA1K,EACA,UAAWsD,EAAAA,GAAG,gCAAiCjB,CAAS,CAAA,CAAA,CAG9D,CAOA,SAASuI,GAAe7K,EAA4B,CAClD,KAAM,CACJ,MAAO8K,EACP,QAAA7I,EACA,WAAAkI,EAAa,GACb,IAAAlK,EACA,UAAAqC,EACA,GAAGyI,CAAA,EACD/K,EAEEiB,EAAUM,EAAkB9D,EAAY,EACxCiB,EAAQwC,EAAU4C,GAAUA,EAAM,KAAK,EAEvCyE,EAAYhK,EAAM0C,EAAQ,GAAI,UAAW6J,CAAS,EAClDxC,EAAY/J,EAAM0C,EAAQ,GAAI,UAAW6J,CAAS,EAExD,GAAIA,IAAcpM,GAAS,CAACyL,EAAY,OAAO,KAE/C,MAAMa,EAAmB/I,EAAUoB,EAAAA,KAAO,MAE1C,OACEC,EAAAA,IAAC0H,EAAA,CACC,GAAIzC,EACJ,KAAK,WACL,kBAAiBD,EACjB,YAAU,kBACV,IAAKrH,EAAQ,IACZ,GAAG8J,EACJ,IAAA9K,EACA,UAAWsD,EAAAA,GAAG,sBAAuBjB,CAAS,CAAA,CAAA,CAGpD,CAEA,SAAS2I,GAAYjL,EAAoB,CACvC,KAAM,CAAE,QAAAiC,EAAS,SAAAC,EAAU,GAAGgJ,GAAclL,EAEtCoB,EAAQL,EAAgBrD,EAAS,EACjCgB,EAAQwC,EAAU4C,GAAUA,EAAM,KAAK,EACvCvD,EAAQW,EAAU4C,GAAUA,EAAM,KAAK,EAEvCtD,EAAW,MAAM,KAAKD,EAAM,MAAM,EAClCE,EAAe/B,EAAQ8B,EAAS,QAAQ9B,CAAK,EAAI,GACjDgK,EAAaxG,GAAYzB,GAAgB,EAEzCyI,EAAUpJ,EAAM,YACpB,MAAOd,GAA+C,CAEpD,GADAkM,EAAU,UAAUlM,CAAK,EACrBA,EAAM,kBAAoB0J,EAAY,OAE1C,MAAMyC,EAAY,KAAK,IAAI1K,EAAe,EAAG,CAAC,EACxCkH,EAAgBnH,EAAS2K,CAAS,EAEpCxD,GACFvG,EAAM,SAAS,QAASuG,CAAa,CAEzC,EACA,CAACuD,EAAU,QAASxC,EAAYjI,EAAcD,EAAUY,CAAK,CAAA,EAGzDgK,EAAgBnJ,EAAUoB,EAAAA,KAAO,SAEvC,OACEC,EAAAA,IAAC8H,EAAA,CACC,KAAK,SACL,YAAU,eACV,SAAU1C,EACT,GAAGwC,EACJ,QAAAhC,CAAA,CAAA,CAGN,CAEA,SAASmC,GAAYrL,EAAoB,CACvC,KAAM,CAAE,QAAAiC,EAAS,SAAAC,EAAU,GAAGoJ,GAActL,EAEtCoB,EAAQL,EAAgBpD,EAAS,EACjCe,EAAQwC,EAAU4C,GAAUA,EAAM,KAAK,EACvCvD,EAAQW,EAAU4C,GAAUA,EAAM,KAAK,EAEvCtD,EAAW,MAAM,KAAKD,EAAM,MAAM,EAClCE,EAAe/B,EAAQ8B,EAAS,QAAQ9B,CAAK,EAAI,GACjDgK,EAAaxG,GAAYzB,GAAgBD,EAAS,OAAS,EAE3D0I,EAAUpJ,EAAM,YACpB,MAAOd,GAA+C,CAEpD,GADAsM,EAAU,UAAUtM,CAAK,EACrBA,EAAM,kBAAoB0J,EAAY,OAE1C,MAAM6C,EAAY,KAAK,IAAI9K,EAAe,EAAGD,EAAS,OAAS,CAAC,EAC1DgL,EAAgBhL,EAAS+K,CAAS,EAEpCC,GACF,MAAMpK,EAAM,uBAAuBoK,EAAe,MAAM,CAE5D,EACA,CAACF,EAAU,QAAS5C,EAAYjI,EAAcD,EAAUY,CAAK,CAAA,EAGzDqK,EAAgBxJ,EAAUoB,EAAAA,KAAO,SAEvC,OACEC,EAAAA,IAACmI,EAAA,CACC,KAAK,SACL,YAAU,eACV,SAAU/C,EACT,GAAG4C,EACJ,QAAApC,CAAA,CAAA,CAGN"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime");require("react");const n=require("./Stepper.cjs"),o=require("@dsui/ui/index");function S({steps:r,children:i,color:u,customColor:p,variant:d="normal",labelPosition:l="right",...c}){const h=r&&r.some(e=>e.content),s=(e,a)=>{if(e>=a-1)return"";const{orientation:x="horizontal"}=c;return x==="vertical"?l==="top"||l==="bottom"?"-order-1 -z-10 absolute inset-y-0 top-7 left-1/2 -translate-x-1/2 h-full":l==="left"?"-order-1 -z-10 absolute inset-y-0 top-7 right-0 translate-x-1/2 h-full":"-order-1 -z-10 absolute inset-y-0 top-7 left-3.5 -translate-x-1/2 h-full":""};return t.jsxs(n.StepperRoot,{...c,color:u,customColor:p,variant:d,labelPosition:l,children:[r&&r.length>0&&t.jsx(n.StepperList,{children:r.map((e,a)=>t.jsxs(n.StepperItem,{value:e.value,completed:e.completed,disabled:e.disabled,children:[t.jsxs(n.StepperTrigger,{className:o.cn({"not-last:pb-6":a<r.length-1&&c.orientation==="vertical"}),children:[t.jsx(n.StepperIndicator,{}),t.jsxs("div",{className:o.cn("flex flex-col gap-1",{"text-center":l==="top"||l==="bottom","text-left":l==="right","text-right":l==="left"}),children:[t.jsx(n.StepperTitle,{children:e.title}),e.description&&t.jsx(n.StepperDescription,{children:e.description})]})]}),a<r.length-1&&t.jsx(n.StepperSeparator,{className:s(a,r.length)})]},e.value))}),h?r?.map(e=>e.content&&t.jsx(n.StepperContent,{value:e.value,children:e.content},e.value)):i]})}exports.StepperWrapper=S;
|
|
2
|
+
//# sourceMappingURL=StepperWrapper.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StepperWrapper.cjs","sources":["../../../../src/components/Stepper/StepperWrapper.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n StepperContent,\n StepperDescription,\n StepperIndicator,\n StepperItem,\n StepperList,\n StepperRoot,\n StepperSeparator,\n StepperTitle,\n StepperTrigger,\n type StepperProps,\n} from \"./Stepper\";\nimport { cn } from \"@dsui/ui/index\";\n\ntype StepperColor =\n | \"primary\"\n | \"secondary\"\n | \"accent\"\n | \"destructive\"\n | \"muted\"\n | \"success\"\n | \"error\"\n | \"warning\";\ntype StepperVariant = \"normal\" | \"dot\";\ntype LabelPosition = \"top\" | \"bottom\" | \"left\" | \"right\";\n\ninterface Step {\n value: string;\n title: string;\n description?: string;\n completed?: boolean;\n disabled?: boolean;\n content?: React.ReactNode;\n}\n\ninterface StepperWrapperProps extends StepperProps {\n steps?: Step[];\n children?: React.ReactNode;\n color?: StepperColor;\n customColor?: string;\n variant?: StepperVariant;\n labelPosition?: LabelPosition;\n}\n\nfunction StepperWrapper({\n steps,\n children,\n color,\n customColor,\n variant = \"normal\",\n labelPosition = \"right\",\n ...props\n}: StepperWrapperProps) {\n const hasStepContent = steps && steps.some((step) => step.content);\n\n // Determine separator classes based on orientation and labelPosition\n const getSeparatorClasses = (index: number, totalSteps: number) => {\n if (index >= totalSteps - 1) return \"\";\n\n const { orientation = \"horizontal\" } = props;\n\n if (orientation === \"vertical\") {\n // Vertical stepper - separator positioning\n if (labelPosition === \"top\" || labelPosition === \"bottom\") {\n return \"-order-1 -z-10 absolute inset-y-0 top-7 left-1/2 -translate-x-1/2 h-full\";\n } else if (labelPosition === \"left\") {\n return \"-order-1 -z-10 absolute inset-y-0 top-7 right-0 translate-x-1/2 h-full\";\n } else {\n // right (default)\n return \"-order-1 -z-10 absolute inset-y-0 top-7 left-3.5 -translate-x-1/2 h-full\";\n }\n }\n\n // Horizontal stepper - separator is handled by the Separator component itself\n return \"\";\n };\n\n return (\n <StepperRoot\n {...props}\n color={color}\n customColor={customColor}\n variant={variant}\n labelPosition={labelPosition}\n >\n {steps && steps.length > 0 && (\n <StepperList>\n {steps.map((step, index) => (\n <StepperItem\n key={step.value}\n value={step.value}\n completed={step.completed}\n disabled={step.disabled}\n >\n <StepperTrigger\n className={cn({\n \"not-last:pb-6\":\n index < steps.length - 1 &&\n props.orientation === \"vertical\",\n })}\n >\n <StepperIndicator />\n <div\n className={cn(\"flex flex-col gap-1\", {\n \"text-center\":\n labelPosition === \"top\" || labelPosition === \"bottom\",\n \"text-left\": labelPosition === \"right\",\n \"text-right\": labelPosition === \"left\",\n })}\n >\n <StepperTitle>{step.title}</StepperTitle>\n {step.description && (\n <StepperDescription>{step.description}</StepperDescription>\n )}\n </div>\n </StepperTrigger>\n {index < steps.length - 1 && (\n <StepperSeparator\n className={getSeparatorClasses(index, steps.length)}\n />\n )}\n </StepperItem>\n ))}\n </StepperList>\n )}\n {hasStepContent\n ? steps?.map(\n (step) =>\n step.content && (\n <StepperContent key={step.value} value={step.value}>\n {step.content}\n </StepperContent>\n ),\n )\n : children}\n </StepperRoot>\n );\n}\n\nexport { StepperWrapper };\nexport type { StepperWrapperProps, Step };\n"],"names":["StepperWrapper","steps","children","color","customColor","variant","labelPosition","props","hasStepContent","step","getSeparatorClasses","index","totalSteps","orientation","jsxs","StepperRoot","jsx","StepperList","StepperItem","StepperTrigger","cn","StepperIndicator","StepperTitle","StepperDescription","StepperSeparator","StepperContent"],"mappings":"mMA+CA,SAASA,EAAe,CACtB,MAAAC,EACA,SAAAC,EACA,MAAAC,EACA,YAAAC,EACA,QAAAC,EAAU,SACV,cAAAC,EAAgB,QAChB,GAAGC,CACL,EAAwB,CACtB,MAAMC,EAAiBP,GAASA,EAAM,KAAMQ,GAASA,EAAK,OAAO,EAG3DC,EAAsB,CAACC,EAAeC,IAAuB,CACjE,GAAID,GAASC,EAAa,EAAG,MAAO,GAEpC,KAAM,CAAE,YAAAC,EAAc,YAAA,EAAiBN,EAEvC,OAAIM,IAAgB,WAEdP,IAAkB,OAASA,IAAkB,SACxC,2EACEA,IAAkB,OACpB,yEAGA,2EAKJ,EACT,EAEA,OACEQ,EAAAA,KAACC,EAAAA,YAAA,CACE,GAAGR,EACJ,MAAAJ,EACA,YAAAC,EACA,QAAAC,EACA,cAAAC,EAEC,SAAA,CAAAL,GAASA,EAAM,OAAS,GACvBe,EAAAA,IAACC,EAAAA,aACE,SAAAhB,EAAM,IAAI,CAACQ,EAAME,IAChBG,EAAAA,KAACI,EAAAA,YAAA,CAEC,MAAOT,EAAK,MACZ,UAAWA,EAAK,UAChB,SAAUA,EAAK,SAEf,SAAA,CAAAK,EAAAA,KAACK,EAAAA,eAAA,CACC,UAAWC,EAAAA,GAAG,CACZ,gBACET,EAAQV,EAAM,OAAS,GACvBM,EAAM,cAAgB,UAAA,CACzB,EAED,SAAA,CAAAS,EAAAA,IAACK,EAAAA,iBAAA,EAAiB,EAClBP,EAAAA,KAAC,MAAA,CACC,UAAWM,EAAAA,GAAG,sBAAuB,CACnC,cACEd,IAAkB,OAASA,IAAkB,SAC/C,YAAaA,IAAkB,QAC/B,aAAcA,IAAkB,MAAA,CACjC,EAED,SAAA,CAAAU,EAAAA,IAACM,EAAAA,aAAA,CAAc,WAAK,KAAA,CAAM,EACzBb,EAAK,aACJO,MAACO,EAAAA,mBAAA,CAAoB,WAAK,WAAA,CAAY,CAAA,CAAA,CAAA,CAE1C,CAAA,CAAA,EAEDZ,EAAQV,EAAM,OAAS,GACtBe,EAAAA,IAACQ,EAAAA,iBAAA,CACC,UAAWd,EAAoBC,EAAOV,EAAM,MAAM,CAAA,CAAA,CACpD,CAAA,EA9BGQ,EAAK,KAAA,CAiCb,EACH,EAEDD,EACGP,GAAO,IACJQ,GACCA,EAAK,SACHO,EAAAA,IAACS,EAAAA,eAAA,CAAgC,MAAOhB,EAAK,MAC1C,SAAAA,EAAK,OAAA,EADaA,EAAK,KAE1B,CAAA,EAGNP,CAAA,CAAA,CAAA,CAGV"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./Stepper.cjs"),t=require("./StepperWrapper.cjs"),p=Object.assign(t.StepperWrapper,{Root:e.StepperRoot,List:e.StepperList,Item:e.StepperItem,Trigger:e.StepperTrigger,Indicator:e.StepperIndicator,Separator:e.StepperSeparator,Title:e.StepperTitle,Description:e.StepperDescription,Content:e.StepperContent,Prev:e.StepperPrev,Next:e.StepperNext});exports.useStepper=e.useStepper;exports.Stepper=p;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../../src/components/Stepper/index.ts"],"sourcesContent":["import {\n StepperRoot,\n StepperList,\n StepperItem,\n StepperTrigger,\n StepperIndicator,\n StepperSeparator,\n StepperTitle,\n StepperDescription,\n StepperContent,\n StepperPrev,\n StepperNext,\n //\n useStepper,\n //\n type StepperProps,\n} from \"./Stepper\";\nimport { StepperWrapper } from \"./StepperWrapper\";\n\nconst Stepper = Object.assign(StepperWrapper, {\n Root: StepperRoot,\n List: StepperList,\n Item: StepperItem,\n Trigger: StepperTrigger,\n Indicator: StepperIndicator,\n Separator: StepperSeparator,\n Title: StepperTitle,\n Description: StepperDescription,\n Content: StepperContent,\n Prev: StepperPrev,\n Next: StepperNext,\n});\n\nexport { Stepper, useStepper };\nexport type { StepperProps };\n"],"names":["Stepper","StepperWrapper","StepperRoot","StepperList","StepperItem","StepperTrigger","StepperIndicator","StepperSeparator","StepperTitle","StepperDescription","StepperContent","StepperPrev","StepperNext"],"mappings":"mJAmBMA,EAAU,OAAO,OAAOC,iBAAgB,CAC5C,KAAMC,EAAAA,YACN,KAAMC,EAAAA,YACN,KAAMC,EAAAA,YACN,QAASC,EAAAA,eACT,UAAWC,EAAAA,iBACX,UAAWC,EAAAA,iBACX,MAAOC,EAAAA,aACP,YAAaC,EAAAA,mBACb,QAASC,EAAAA,eACT,KAAMC,EAAAA,YACN,KAAMC,EAAAA,WACR,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),s=require("react"),v=require("@dsui/ui/components/switch"),w=require("@dsui/ui/lib/utils"),E=require("../../utils/animations.cjs"),M=require("../Glass/Glass.cjs"),y=s.forwardRef((S,q)=>{const{animation:n,label:p,labelPosition:d="right",offLabel:r,onLabel:i,showLabels:j="none",checked:x=!1,onCheckedChange:z,className:b,variant:c="default",size:u="normal",color:h,...N}=S,g=s.useId(),[_,C]=s.useState(x);s.useEffect(()=>{C(x)},[x]);const k=t=>{C(t),z?.(t)},a=s.useMemo(()=>n?n==="glass"?{className:"!bg-transparent !shadow-none !border-none",isGlass:!0,variant:"default"}:E.animationEffect({animation:n,children:null,className:b,rootClassName:v.switchVariants({variant:c,size:u,color:h}),variantType:c}):null,[n,b,c,u,h]),m=t=>{const l=e.jsx(v.Switch,{ref:q,id:g,checked:_,onCheckedChange:k,className:w.cn(b,t,a?.className),variant:c,size:u,color:h,style:{...N.style||{},...a?.style||{}},...N});if(n==="glass"&&a?.isGlass){const o=v.switchVariants({variant:c,size:u,color:h})?.match(/((?:!)?rounded-\S+)/g),f=o?o[o.length-1]:"rounded-full";return e.jsx(M.default,{className:w.cn("hover:scale-110 [&_span]:opacity-80",f),children:l})}return a?.children&&s.isValidElement(a.children)?s.cloneElement(a.children,l):l};if(j==="inside"&&(r||i))return e.jsxs("div",{className:"relative inline-grid h-7 w-fit grid-cols-[1fr_1fr] items-center text-sm font-medium",children:[m("peer data-[state=unchecked]:bg-input/50 absolute inset-0 h-[inherit] w-14 [&_span]:z-10 [&_span]:size-6.5 [&_span]:transition-transform [&_span]:duration-300 [&_span]:ease-[cubic-bezier(0.16,1,0.3,1)] [&_span]:data-[state=checked]:translate-x-7 [&_span]:data-[state=checked]:rtl:-translate-x-7"),e.jsx("span",{className:"pointer-events-none relative ml-0.5 flex min-w-8 items-center justify-center text-center transition-transform duration-300 ease-[cubic-bezier(0.16,1,0.3,1)] peer-data-[state=checked]:invisible peer-data-[state=unchecked]:translate-x-6 peer-data-[state=unchecked]:rtl:-translate-x-6",children:r}),e.jsx("span",{className:"peer-data-[state=checked]:text-background pointer-events-none relative flex min-w-8 items-center justify-center text-center transition-transform duration-300 ease-[cubic-bezier(0.16,1,0.3,1)] peer-data-[state=checked]:-translate-x-full peer-data-[state=unchecked]:invisible peer-data-[state=checked]:rtl:translate-x-full",children:i})]});if(j==="outside"&&(r||i))return e.jsxs("div",{className:"group inline-flex items-center gap-2","data-state":_?"checked":"unchecked",children:[r&&e.jsx("span",{className:"flex-1 cursor-pointer text-sm font-medium group-data-[state=checked]:text-muted-foreground/70",onClick:()=>k(!1),children:r}),m(),i&&e.jsx("span",{className:"flex-1 cursor-pointer text-sm font-medium group-data-[state=unchecked]:text-muted-foreground/70",onClick:()=>k(!0),children:i})]});if(p){const t=d==="top"||d==="bottom",l=t?"flex-col":"flex-row",o=t?"items-start":"items-center",f=d==="left"||d==="top";return e.jsxs("div",{className:w.cn("flex gap-2",l,o),children:[f&&e.jsx("label",{htmlFor:g,children:p}),m(),!f&&e.jsx("label",{htmlFor:g,children:p})]})}return m()});y.displayName="Switch";exports.default=y;
|
|
2
|
+
//# sourceMappingURL=Switch.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Switch.cjs","sources":["../../../../src/components/Switch/Switch.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport {\n Switch as SSwitch,\n switchVariants,\n type SwitchVariant,\n} from \"@dsui/ui/components/switch\";\nimport { cn } from \"@dsui/ui/lib/utils\";\nimport type { SwitchAnimation } from \"@/types/variables\";\nimport { animationEffect } from \"@/utils/animations\";\nimport Glass from \"../Glass/Glass\";\n\nexport type SwitchProps = React.ComponentProps<typeof SSwitch> & {\n animation?: SwitchAnimation;\n label?: React.ReactNode;\n labelPosition?: \"left\" | \"right\" | \"top\" | \"bottom\";\n offLabel?: React.ReactNode;\n onLabel?: React.ReactNode;\n showLabels?: \"outside\" | \"inside\" | \"none\";\n};\n\ntype AnimResult = {\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n variant?: SwitchVariant[\"variant\"];\n isGlass?: boolean; // Flag for glass effect\n};\n\nconst Switch = React.forwardRef<HTMLButtonElement, SwitchProps>(\n (props, ref) => {\n const {\n animation,\n label,\n labelPosition = \"right\",\n offLabel,\n onLabel,\n showLabels = \"none\",\n checked = false,\n onCheckedChange,\n className,\n variant = \"default\",\n size = \"normal\",\n color,\n ...rest\n } = props;\n const id = React.useId();\n\n const [isChecked, setIsChecked] = React.useState(checked);\n\n React.useEffect(() => {\n setIsChecked(checked as boolean);\n }, [checked]);\n\n const handleCheckedChange = (newChecked: boolean) => {\n setIsChecked(newChecked);\n onCheckedChange?.(newChecked);\n };\n\n const switchAnimation = useMemo<AnimResult | null>(() => {\n if (!animation) return null;\n\n // Handle glass animation separately for Switch (don't affect other components)\n if (animation === \"glass\") {\n return {\n className: \"!bg-transparent !shadow-none !border-none\",\n isGlass: true, // Custom flag for glass effect\n variant: \"default\",\n };\n }\n\n return animationEffect<SwitchAnimation, SwitchVariant[\"variant\"]>({\n animation,\n children: null,\n className,\n rootClassName: switchVariants({\n variant: variant,\n size: size,\n color: color,\n }),\n variantType: variant,\n });\n }, [animation, className, variant, size, color]);\n\n const switchElement = (switchClassName?: string) => {\n const baseSwitchElement = (\n <SSwitch\n ref={ref}\n id={id}\n checked={isChecked}\n onCheckedChange={handleCheckedChange}\n className={cn(className, switchClassName, switchAnimation?.className)}\n variant={variant}\n size={size}\n color={color}\n style={{ ...(rest.style || {}), ...(switchAnimation?.style || {}) }}\n {...rest}\n />\n );\n\n // If animation is glass effect, wrap the switch in Glass component\n if (animation === \"glass\" && switchAnimation?.isGlass) {\n const roundedMatches = switchVariants({\n variant: variant,\n size: size,\n color: color,\n })?.match(/((?:!)?rounded-\\S+)/g);\n const roundedClass = roundedMatches\n ? roundedMatches[roundedMatches.length - 1]\n : \"rounded-full\";\n\n return (\n <Glass\n className={cn(\"hover:scale-110 [&_span]:opacity-80\", roundedClass)}\n >\n {baseSwitchElement}\n </Glass>\n );\n }\n\n // If animation returns children wrapper, use it\n if (\n switchAnimation?.children &&\n React.isValidElement(switchAnimation.children)\n ) {\n return React.cloneElement(switchAnimation.children, baseSwitchElement);\n }\n\n return baseSwitchElement;\n };\n\n // Render with inside labels (icons inside thumb position)\n if (showLabels === \"inside\" && (offLabel || onLabel)) {\n return (\n <div className=\"relative inline-grid h-7 w-fit grid-cols-[1fr_1fr] items-center text-sm font-medium\">\n {switchElement(\n \"peer data-[state=unchecked]:bg-input/50 absolute inset-0 h-[inherit] w-14 [&_span]:z-10 [&_span]:size-6.5 [&_span]:transition-transform [&_span]:duration-300 [&_span]:ease-[cubic-bezier(0.16,1,0.3,1)] [&_span]:data-[state=checked]:translate-x-7 [&_span]:data-[state=checked]:rtl:-translate-x-7\",\n )}\n <span className=\"pointer-events-none relative ml-0.5 flex min-w-8 items-center justify-center text-center transition-transform duration-300 ease-[cubic-bezier(0.16,1,0.3,1)] peer-data-[state=checked]:invisible peer-data-[state=unchecked]:translate-x-6 peer-data-[state=unchecked]:rtl:-translate-x-6\">\n {offLabel}\n </span>\n <span className=\"peer-data-[state=checked]:text-background pointer-events-none relative flex min-w-8 items-center justify-center text-center transition-transform duration-300 ease-[cubic-bezier(0.16,1,0.3,1)] peer-data-[state=checked]:-translate-x-full peer-data-[state=unchecked]:invisible peer-data-[state=checked]:rtl:translate-x-full\">\n {onLabel}\n </span>\n </div>\n );\n }\n\n // Render with outside labels\n if (showLabels === \"outside\" && (offLabel || onLabel)) {\n return (\n <div\n className=\"group inline-flex items-center gap-2\"\n data-state={isChecked ? \"checked\" : \"unchecked\"}\n >\n {offLabel && (\n <span\n className=\"flex-1 cursor-pointer text-sm font-medium group-data-[state=checked]:text-muted-foreground/70\"\n onClick={() => handleCheckedChange(false)}\n >\n {offLabel}\n </span>\n )}\n {switchElement()}\n {onLabel && (\n <span\n className=\"flex-1 cursor-pointer text-sm font-medium group-data-[state=unchecked]:text-muted-foreground/70\"\n onClick={() => handleCheckedChange(true)}\n >\n {onLabel}\n </span>\n )}\n </div>\n );\n }\n\n // Render with label (outside wrap)\n if (label) {\n const isVertical = labelPosition === \"top\" || labelPosition === \"bottom\";\n const flexDirection = isVertical ? \"flex-col\" : \"flex-row\";\n const alignItems = isVertical ? \"items-start\" : \"items-center\";\n const labelFirst = labelPosition === \"left\" || labelPosition === \"top\";\n\n return (\n <div className={cn(\"flex gap-2\", flexDirection, alignItems)}>\n {labelFirst && <label htmlFor={id}>{label}</label>}\n {switchElement()}\n {!labelFirst && <label htmlFor={id}>{label}</label>}\n </div>\n );\n }\n\n // Default render\n return switchElement();\n },\n);\n\nSwitch.displayName = \"Switch\";\nexport default Switch;\n"],"names":["Switch","React","props","ref","animation","label","labelPosition","offLabel","onLabel","showLabels","checked","onCheckedChange","className","variant","size","color","rest","id","isChecked","setIsChecked","handleCheckedChange","newChecked","switchAnimation","useMemo","animationEffect","switchVariants","switchElement","switchClassName","baseSwitchElement","jsx","SSwitch","cn","roundedMatches","roundedClass","Glass","jsxs","isVertical","flexDirection","alignItems","labelFirst"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),f=require("../../../utils/datetime.cjs"),x=require("lucide-react"),C=require("react"),F=require("../../Popover/index.cjs"),b=require("../../Separator/Separator.cjs"),g=require("../../Calendar/Calendar.cjs"),N=require("../../Button/Button.cjs");function S(e){const a=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const n in e)if(n!=="default"){const i=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(a,n,i.get?i:{enumerable:!0,get:()=>e[n]})}}return a.default=e,Object.freeze(a)}const l=S(C);function u(e){return e&&typeof e=="object"&&!Array.isArray(e)}function d(e){if(!e)return;const a=typeof e=="string"?Number(e):e,n=new Date(a);return Number.isNaN(n.getTime())?void 0:n}function j(e){return e==null?[]:Array.isArray(e)?e.map(a=>{if(typeof a=="number"||typeof a=="string")return a}):typeof e=="string"||typeof e=="number"?[e]:[]}function q({column:e,title:a,multiple:n}){const i=e.getFilterValue(),o=l.useMemo(()=>{if(!i)return n?{from:void 0,to:void 0}:[];if(n){const s=j(i);return{from:d(s[0]),to:d(s[1])}}const t=j(i),c=d(t[0]);return c?[c]:[]},[i,n]),m=l.useCallback(t=>{if(!t){e.setFilterValue(void 0);return}if(n&&!("getTime"in t)){const c=t.from?.getTime(),s=t.to?.getTime();e.setFilterValue(c||s?[c,s]:void 0)}else!n&&"getTime"in t&&e.setFilterValue(t.getTime())},[e,n]),y=l.useCallback(t=>{t.stopPropagation(),e.setFilterValue(void 0)},[e]),h=l.useMemo(()=>n?u(o)?o.from||o.to:!1:Array.isArray(o)?o.length>0:!1,[n,o]),p=l.useCallback(t=>!t.from&&!t.to?"":t.from&&t.to?`${f.formatDate(t.from)} - ${f.formatDate(t.to)}`:f.formatDate(t.from??t.to),[]),v=l.useMemo(()=>{if(n){if(!u(o))return null;const s=o.from||o.to,T=s?p(o):"Select date range";return r.jsxs("span",{className:"flex items-center gap-2",children:[r.jsx("span",{children:a}),s&&r.jsxs(r.Fragment,{children:[r.jsx(b.default,{orientation:"vertical",className:"mx-0.5 data-[orientation=vertical]:h-4"}),r.jsx("span",{children:T})]})]})}if(u(o))return null;const t=o.length>0,c=t?f.formatDate(o[0]):"Select date";return r.jsxs("span",{className:"flex items-center gap-2",children:[r.jsx("span",{children:a}),t&&r.jsxs(r.Fragment,{children:[r.jsx(b.default,{orientation:"vertical",className:"mx-0.5 data-[orientation=vertical]:h-4"}),r.jsx("span",{children:c})]})]})},[o,n,p,a]),D=r.jsx("div",{className:"w-auto p-0",children:n?r.jsx(g.Calendar,{autoFocus:!0,captionLayout:"dropdown",mode:"range",selected:u(o)?o:{from:void 0,to:void 0},onSelect:m}):r.jsx(g.Calendar,{captionLayout:"dropdown",mode:"single",selected:u(o)?void 0:o[0],onSelect:m})});return r.jsx(F.Popover,{content:D,children:r.jsxs(N.default,{variant:"outline",size:"sm",className:"border-dashed font-normal",children:[h?r.jsx("div",{role:"button","aria-label":`Clear ${a} filter`,tabIndex:0,onClick:y,className:"rounded-sm opacity-70 transition-opacity hover:opacity-100 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",children:r.jsx(x.XCircle,{})}):r.jsx(x.CalendarIcon,{}),v]})})}exports.DataTableDateFilter=q;
|
|
2
|
+
//# sourceMappingURL=data-table-date-filter.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-table-date-filter.cjs","sources":["../../../../../src/components/Table/TableFilter/data-table-date-filter.tsx"],"sourcesContent":["\"use client\";\n\nimport { formatDate } from \"@/utils/datetime\";\nimport type { Column } from \"@tanstack/react-table\";\nimport { CalendarIcon, XCircle } from \"lucide-react\";\nimport * as React from \"react\";\nimport type { DateRange } from \"react-day-picker\";\nimport Separator from \"../../Separator\";\nimport { Popover } from \"../../Popover\";\nimport Button from \"../../Button\";\nimport { Calendar } from \"../../Calendar\";\n\ntype DateSelection = Date[] | DateRange;\n\nfunction getIsDateRange(value: DateSelection): value is DateRange {\n return value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction parseAsDate(timestamp: number | string | undefined): Date | undefined {\n if (!timestamp) return undefined;\n const numericTimestamp =\n typeof timestamp === \"string\" ? Number(timestamp) : timestamp;\n const date = new Date(numericTimestamp);\n return !Number.isNaN(date.getTime()) ? date : undefined;\n}\n\nfunction parseColumnFilterValue(value: unknown) {\n if (value === null || value === undefined) {\n return [];\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => {\n if (typeof item === \"number\" || typeof item === \"string\") {\n return item;\n }\n return undefined;\n });\n }\n\n if (typeof value === \"string\" || typeof value === \"number\") {\n return [value];\n }\n\n return [];\n}\n\ninterface DataTableDateFilterProps<TData> {\n column: Column<TData, unknown>;\n title?: string;\n multiple?: boolean;\n}\n\nexport function DataTableDateFilter<TData>({\n column,\n title,\n multiple,\n}: DataTableDateFilterProps<TData>) {\n const columnFilterValue = column.getFilterValue();\n\n const selectedDates = React.useMemo<DateSelection>(() => {\n if (!columnFilterValue) {\n return multiple ? { from: undefined, to: undefined } : [];\n }\n\n if (multiple) {\n const timestamps = parseColumnFilterValue(columnFilterValue);\n return {\n from: parseAsDate(timestamps[0]),\n to: parseAsDate(timestamps[1]),\n };\n }\n\n const timestamps = parseColumnFilterValue(columnFilterValue);\n const date = parseAsDate(timestamps[0]);\n return date ? [date] : [];\n }, [columnFilterValue, multiple]);\n\n const onSelect = React.useCallback(\n (date: Date | DateRange | undefined) => {\n if (!date) {\n column.setFilterValue(undefined);\n return;\n }\n\n if (multiple && !(\"getTime\" in date)) {\n const from = date.from?.getTime();\n const to = date.to?.getTime();\n column.setFilterValue(from || to ? [from, to] : undefined);\n } else if (!multiple && \"getTime\" in date) {\n column.setFilterValue(date.getTime());\n }\n },\n [column, multiple],\n );\n\n const onReset = React.useCallback(\n (event: React.MouseEvent) => {\n event.stopPropagation();\n column.setFilterValue(undefined);\n },\n [column],\n );\n\n const hasValue = React.useMemo(() => {\n if (multiple) {\n if (!getIsDateRange(selectedDates)) return false;\n return selectedDates.from || selectedDates.to;\n }\n if (!Array.isArray(selectedDates)) return false;\n return selectedDates.length > 0;\n }, [multiple, selectedDates]);\n\n const formatDateRange = React.useCallback((range: DateRange) => {\n if (!range.from && !range.to) return \"\";\n if (range.from && range.to) {\n return `${formatDate(range.from)} - ${formatDate(range.to)}`;\n }\n return formatDate(range.from ?? range.to);\n }, []);\n\n const label = React.useMemo(() => {\n if (multiple) {\n if (!getIsDateRange(selectedDates)) return null;\n\n const hasSelectedDates = selectedDates.from || selectedDates.to;\n const dateText = hasSelectedDates\n ? formatDateRange(selectedDates)\n : \"Select date range\";\n\n return (\n <span className=\"flex items-center gap-2\">\n <span>{title}</span>\n {hasSelectedDates && (\n <>\n <Separator\n orientation=\"vertical\"\n className=\"mx-0.5 data-[orientation=vertical]:h-4\"\n />\n <span>{dateText}</span>\n </>\n )}\n </span>\n );\n }\n\n if (getIsDateRange(selectedDates)) return null;\n\n const hasSelectedDate = selectedDates.length > 0;\n const dateText = hasSelectedDate\n ? formatDate(selectedDates[0])\n : \"Select date\";\n\n return (\n <span className=\"flex items-center gap-2\">\n <span>{title}</span>\n {hasSelectedDate && (\n <>\n <Separator\n orientation=\"vertical\"\n className=\"mx-0.5 data-[orientation=vertical]:h-4\"\n />\n <span>{dateText}</span>\n </>\n )}\n </span>\n );\n }, [selectedDates, multiple, formatDateRange, title]);\n\n const PopContent = (\n <div className=\"w-auto p-0\">\n {multiple ? (\n <Calendar\n autoFocus\n captionLayout=\"dropdown\"\n mode=\"range\"\n selected={\n getIsDateRange(selectedDates)\n ? selectedDates\n : { from: undefined, to: undefined }\n }\n onSelect={onSelect}\n />\n ) : (\n <Calendar\n captionLayout=\"dropdown\"\n mode=\"single\"\n selected={\n !getIsDateRange(selectedDates) ? selectedDates[0] : undefined\n }\n onSelect={onSelect}\n />\n )}\n </div>\n );\n\n return (\n <Popover content={PopContent}>\n <Button variant=\"outline\" size=\"sm\" className=\"border-dashed font-normal\">\n {hasValue ? (\n <div\n role=\"button\"\n aria-label={`Clear ${title} filter`}\n tabIndex={0}\n onClick={onReset}\n className=\"rounded-sm opacity-70 transition-opacity hover:opacity-100 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\"\n >\n <XCircle />\n </div>\n ) : (\n <CalendarIcon />\n )}\n {label}\n </Button>\n </Popover>\n );\n}\n"],"names":["getIsDateRange","value","parseAsDate","timestamp","numericTimestamp","date","parseColumnFilterValue","item","DataTableDateFilter","column","title","multiple","columnFilterValue","selectedDates","React","timestamps","onSelect","from","to","onReset","event","hasValue","formatDateRange","range","formatDate","label","hasSelectedDates","dateText","jsxs","jsx","Fragment","Separator","hasSelectedDate","PopContent","Calendar","Popover","Button","XCircle","CalendarIcon"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),x=require("lucide-react"),j=require("react"),F=require("../../Popover/index.cjs"),m=require("./data-table-slider-filter.cjs"),V=require("./data-table-date-filter.cjs"),N=require("../../Separator/Separator.cjs"),q=require("../../Button/Button.cjs"),C=require("../../Checkbox/Checkbox.cjs"),O=require("../../Radio/Radio.cjs"),c=require("../../Input/Input.cjs");function S(e){const i=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const r in e)if(r!=="default"){const u=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(i,r,u.get?u:{enumerable:!0,get:()=>e[r]})}}return i.default=e,Object.freeze(i)}const D=S(j);function y({column:e,trigger:i,open:r,onOpenChange:u}){const[o,d]=D.useState(!1),v=r!==void 0?r:o,f=u||d,a=e.columnDef.meta,p=()=>{if(!a?.variant)return t.jsx("div",{children:"No filter available"});switch(a.variant){case"text":return t.jsx(c.default,{placeholder:a.placeholder??a.label,value:e.getFilterValue()??"",onChange:s=>e.setFilterValue(s.target.value),className:"h-8 w-full"});case"number":return t.jsx(c.default,{type:"number",placeholder:a.placeholder??a.label,value:e.getFilterValue()??"",onChange:s=>e.setFilterValue(s.target.value),className:"h-8 w-full"});case"date":case"dateRange":return t.jsx(V.DataTableDateFilter,{column:e,title:a.label??e.id,multiple:a.variant==="dateRange"});case"range":return t.jsx(m.DataTableSliderFilter,{column:e,title:a.label??e.id});case"select":case"multiSelect":{const s=a.options||[];if(a.variant==="multiSelect"){const n=e.getFilterValue()||[];return t.jsx(t.Fragment,{children:t.jsx("div",{className:"space-y-2 max-h-48 overflow-y-auto text-sm",children:s.map(l=>t.jsx("div",{className:"flex items-center space-x-2",children:t.jsx(C.default,{checked:n.includes(l.value),onCheckedChange:h=>{h?e.setFilterValue([...n,l.value]):e.setFilterValue(n.filter(g=>g!==l.value))},label:l.label})},l.value))})})}else{const n=e.getFilterValue();return t.jsx(O.default,{value:n,onValueChange:l=>e.setFilterValue(l),options:s.map(l=>({label:l.label,value:l.value})),className:"p-1"})}}default:return t.jsx("div",{children:"No filter available"})}},b=e.getFilterValue()!=null;return t.jsx(F.Popover,{open:v,onOpenChange:f,trigger:i,content:t.jsxs("div",{className:"p-2 min-w-32",children:[p(),b&&t.jsxs(t.Fragment,{children:[t.jsx(N.default,{className:"mt-3 mb-1"}),t.jsxs(q.default,{variant:"ghost",size:"sm",onClick:()=>e.setFilterValue(void 0),children:[t.jsx(x.X,{className:"size-3"}),"Clear Filter"]})]})]}),contentClassName:"p-0"})}exports.DataTableFilterPopover=y;
|
|
2
|
+
//# sourceMappingURL=data-table-filter-popover.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-table-filter-popover.cjs","sources":["../../../../../src/components/Table/TableFilter/data-table-filter-popover.tsx"],"sourcesContent":["\"use client\";\n\nimport type { Column } from \"@tanstack/react-table\";\nimport { X } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { Popover } from \"../../Popover\";\nimport { Input } from \"../../Input\";\nimport { Checkbox } from \"../../Checkbox\";\nimport Radio from \"../../Radio\";\nimport { DataTableSliderFilter } from \"./data-table-slider-filter\";\nimport { DataTableDateFilter } from \"./data-table-date-filter\";\nimport Separator from \"@/components/Separator\";\nimport Button from \"@/components/Button\";\n\ninterface DataTableFilterPopoverProps<TData> {\n column: Column<TData>;\n trigger: React.ReactNode;\n open?: boolean;\n onOpenChange?: (isOpen: boolean) => void;\n}\n\nexport function DataTableFilterPopover<TData>({\n column,\n trigger,\n open,\n onOpenChange,\n}: DataTableFilterPopoverProps<TData>) {\n const [internalOpen, setInternalOpen] = React.useState(false);\n\n const isOpen = open !== undefined ? open : internalOpen;\n const setIsOpen = onOpenChange || setInternalOpen;\n\n const columnMeta = column.columnDef.meta;\n\n const renderFilterContent = () => {\n if (!columnMeta?.variant) return <div>No filter available</div>;\n\n switch (columnMeta.variant) {\n case \"text\":\n return (\n <Input\n placeholder={columnMeta.placeholder ?? columnMeta.label}\n value={(column.getFilterValue() as string) ?? \"\"}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) =>\n column.setFilterValue(event.target.value)\n }\n className=\"h-8 w-full\"\n />\n );\n\n case \"number\":\n return (\n <Input\n type=\"number\"\n placeholder={columnMeta.placeholder ?? columnMeta.label}\n value={(column.getFilterValue() as string) ?? \"\"}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) =>\n column.setFilterValue(event.target.value)\n }\n className=\"h-8 w-full\"\n />\n );\n\n case \"date\":\n case \"dateRange\":\n return (\n <DataTableDateFilter\n column={column}\n title={columnMeta.label ?? column.id}\n multiple={columnMeta.variant === \"dateRange\"}\n />\n );\n\n case \"range\":\n return (\n <DataTableSliderFilter\n column={column}\n title={columnMeta.label ?? column.id}\n />\n );\n\n case \"select\":\n case \"multiSelect\": {\n const options = columnMeta.options || [];\n const multiple = columnMeta.variant === \"multiSelect\";\n\n if (multiple) {\n const currentValues = (column.getFilterValue() as string[]) || [];\n return (\n <>\n <div className=\"space-y-2 max-h-48 overflow-y-auto text-sm\">\n {options.map((option) => (\n <div\n key={option.value}\n className=\"flex items-center space-x-2\"\n >\n <Checkbox\n checked={currentValues.includes(option.value)}\n onCheckedChange={(checked) => {\n if (checked) {\n column.setFilterValue([\n ...currentValues,\n option.value,\n ]);\n } else {\n column.setFilterValue(\n currentValues.filter((v) => v !== option.value),\n );\n }\n }}\n label={option.label}\n />\n </div>\n ))}\n </div>\n {/* <Separator className=\"my-2\" /> */}\n {/* <div className=\"flex justify-center gap-0 mt-2\">\n <Button\n variant=\"ghost\"\n onClick={() =>\n column.setFilterValue(options.map((o) => o.value))\n }\n >\n Check All\n </Button>\n <Button\n variant=\"ghost\"\n onClick={() => column.setFilterValue(undefined)}\n >\n <X className=\"size-3\" />\n Clear Filter\n </Button>\n </div> */}\n </>\n );\n } else {\n const currentValue = column.getFilterValue() as string;\n return (\n <Radio\n value={currentValue}\n onValueChange={(value) => column.setFilterValue(value)}\n options={options.map((option) => ({\n label: option.label,\n value: option.value,\n }))}\n className=\"p-1\"\n />\n );\n }\n }\n\n default:\n return <div>No filter available</div>;\n }\n };\n\n const hasFilterValue = column.getFilterValue() != null;\n\n return (\n <Popover\n open={isOpen}\n onOpenChange={setIsOpen}\n trigger={trigger}\n content={\n <div className=\"p-2 min-w-32\">\n {renderFilterContent()}\n {hasFilterValue && (\n <>\n <Separator className=\"mt-3 mb-1\" />\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => column.setFilterValue(undefined)}\n >\n <X className=\"size-3\" />\n Clear Filter\n </Button>\n </>\n )}\n </div>\n }\n contentClassName=\"p-0\"\n />\n );\n}\n"],"names":["DataTableFilterPopover","column","trigger","open","onOpenChange","internalOpen","setInternalOpen","React","isOpen","setIsOpen","columnMeta","renderFilterContent","jsx","Input","event","DataTableDateFilter","DataTableSliderFilter","options","currentValues","Fragment","option","Checkbox","checked","v","currentValue","Radio","value","hasFilterValue","Popover","jsxs","Separator","Button","X"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),N=require("lucide-react"),q=require("react"),A=require("../../Popover/index.cjs"),j=require("@dsui/ui/index"),y=require("../../Input/Input.cjs"),k=require("../../Slider/Slider.cjs"),v=require("../../Button/Button.cjs"),D=require("../../Separator/Separator.cjs");function P(e){const n=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const s in e)if(s!=="default"){const o=Object.getOwnPropertyDescriptor(e,s);Object.defineProperty(n,s,o.get?o:{enumerable:!0,get:()=>e[s]})}}return n.default=e,Object.freeze(n)}const d=P(q);function R(e){return Array.isArray(e)&&e.length===2&&typeof e[0]=="number"&&typeof e[1]=="number"}function I(e){if(Array.isArray(e)&&e.length===2&&e.every(n=>(typeof n=="string"||typeof n=="number")&&!Number.isNaN(n)))return[Number(e[0]),Number(e[1])]}function O({column:e,title:n}){const s=d.useId(),o=I(e.getFilterValue()),m=e.columnDef.meta?.range,u=e.columnDef.meta?.unit,{min:i,max:l,step:C}=d.useMemo(()=>{let r=0,a=100;if(m&&R(m))[r,a]=m;else{const p=e.getFacetedMinMaxValues();if(p&&Array.isArray(p)&&p.length===2){const[x,h]=p;typeof x=="number"&&typeof h=="number"&&(r=x,a=h)}}const f=a-r,$=f<=20?1:f<=100?Math.ceil(f/20):Math.ceil(f/50);return{min:r,max:a,step:$}},[e,m]),c=d.useMemo(()=>o??[i,l],[o,i,l]),g=d.useCallback(r=>r.toLocaleString(void 0,{maximumFractionDigits:0}),[]),V=d.useCallback(r=>{const a=Number(r.target.value);!Number.isNaN(a)&&a>=i&&a<=c[1]&&e.setFilterValue([a,c[1]])},[e,i,c]),F=d.useCallback(r=>{const a=Number(r.target.value);!Number.isNaN(a)&&a<=l&&a>=c[0]&&e.setFilterValue([c[0],a])},[e,l,c]),S=d.useCallback(r=>{Array.isArray(r)&&r.length===2&&e.setFilterValue(r)},[e]),b=d.useCallback(r=>{r.target instanceof HTMLDivElement&&r.stopPropagation(),e.setFilterValue(void 0)},[e]),M=t.jsxs("div",{className:"flex w-auto flex-col gap-4",children:[t.jsxs("div",{className:"flex flex-col gap-3",children:[t.jsx("p",{className:"font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",children:n}),t.jsxs("div",{className:"flex items-center gap-4",children:[t.jsx("label",{htmlFor:`${s}-from`,className:"sr-only",children:"From"}),t.jsxs("div",{className:"relative",children:[t.jsx(y.default,{id:`${s}-from`,type:"number","aria-valuemin":i,"aria-valuemax":l,inputMode:"numeric",pattern:"[0-9]*",placeholder:i.toString(),min:i,max:l,value:c[0]?.toString(),onChange:V,className:j.cn("h-8 w-24",u&&"pr-8")}),u&&t.jsx("span",{className:"absolute top-0 right-0 bottom-0 flex items-center rounded-r-md bg-accent px-2 text-muted-foreground text-sm",children:u})]}),t.jsx("label",{htmlFor:`${s}-to`,className:"sr-only",children:"to"}),t.jsxs("div",{className:"relative",children:[t.jsx(y.default,{id:`${s}-to`,type:"number","aria-valuemin":i,"aria-valuemax":l,inputMode:"numeric",pattern:"[0-9]*",placeholder:l.toString(),min:i,max:l,value:c[1]?.toString(),onChange:F,className:j.cn("h-8 w-24",u&&"pr-8")}),u&&t.jsx("span",{className:"absolute top-0 right-0 bottom-0 flex items-center rounded-r-md bg-accent px-2 text-muted-foreground text-sm",children:u})]})]}),t.jsxs("label",{htmlFor:`${s}-slider`,className:"sr-only",children:[n," slider"]}),t.jsx(k.default,{id:`${s}-slider`,min:i,max:l,step:C,value:c,onValueChange:S})]}),t.jsx(v.default,{"aria-label":`Clear ${n} filter`,variant:"outline",size:"sm",onClick:b,children:"Clear"})]});return t.jsx(A.Popover,{content:M,children:t.jsxs(v.default,{variant:"outline",size:"sm",className:"border-dashed font-normal",children:[o?t.jsx("div",{role:"button","aria-label":`Clear ${n} filter`,tabIndex:0,className:"rounded-sm opacity-70 transition-opacity hover:opacity-100 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",onClick:b,children:t.jsx(N.XCircle,{})}):t.jsx(N.PlusCircle,{}),t.jsx("span",{children:n}),o?t.jsxs(t.Fragment,{children:[t.jsx(D.default,{orientation:"vertical",className:"mx-0.5 data-[orientation=vertical]:h-4"}),g(o[0])," -"," ",g(o[1]),u?` ${u}`:""]}):null]})})}exports.DataTableSliderFilter=O;
|
|
2
|
+
//# sourceMappingURL=data-table-slider-filter.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-table-slider-filter.cjs","sources":["../../../../../src/components/Table/TableFilter/data-table-slider-filter.tsx"],"sourcesContent":["\"use client\";\n\nimport type { Column } from \"@tanstack/react-table\";\nimport { PlusCircle, XCircle } from \"lucide-react\";\nimport * as React from \"react\";\nimport { Button } from \"../../Button\";\nimport { Input } from \"../../Input\";\nimport { Popover } from \"../../Popover\";\nimport { Separator } from \"../../Separator\";\nimport { Slider } from \"../../Slider\";\nimport { cn } from \"@dsui/ui/index\";\n\ninterface Range {\n min: number;\n max: number;\n}\n\ntype RangeValue = [number, number];\n\nfunction getIsValidRange(value: unknown): value is RangeValue {\n return (\n Array.isArray(value) &&\n value.length === 2 &&\n typeof value[0] === \"number\" &&\n typeof value[1] === \"number\"\n );\n}\n\nfunction parseValuesAsNumbers(value: unknown): RangeValue | undefined {\n if (\n Array.isArray(value) &&\n value.length === 2 &&\n value.every(\n (v) =>\n (typeof v === \"string\" || typeof v === \"number\") && !Number.isNaN(v),\n )\n ) {\n return [Number(value[0]), Number(value[1])];\n }\n\n return undefined;\n}\n\ninterface DataTableSliderFilterProps<TData> {\n column: Column<TData, unknown>;\n title?: string;\n}\n\nexport function DataTableSliderFilter<TData>({\n column,\n title,\n}: DataTableSliderFilterProps<TData>) {\n const id = React.useId();\n\n const columnFilterValue = parseValuesAsNumbers(column.getFilterValue());\n\n const defaultRange = column.columnDef.meta?.range;\n const unit = column.columnDef.meta?.unit;\n\n const { min, max, step } = React.useMemo<Range & { step: number }>(() => {\n let minValue = 0;\n let maxValue = 100;\n\n if (defaultRange && getIsValidRange(defaultRange)) {\n [minValue, maxValue] = defaultRange;\n } else {\n const values = column.getFacetedMinMaxValues();\n if (values && Array.isArray(values) && values.length === 2) {\n const [facetMinValue, facetMaxValue] = values;\n if (\n typeof facetMinValue === \"number\" &&\n typeof facetMaxValue === \"number\"\n ) {\n minValue = facetMinValue;\n maxValue = facetMaxValue;\n }\n }\n }\n\n const rangeSize = maxValue - minValue;\n const step =\n rangeSize <= 20\n ? 1\n : rangeSize <= 100\n ? Math.ceil(rangeSize / 20)\n : Math.ceil(rangeSize / 50);\n\n return { min: minValue, max: maxValue, step };\n }, [column, defaultRange]);\n\n const range = React.useMemo((): RangeValue => {\n return columnFilterValue ?? [min, max];\n }, [columnFilterValue, min, max]);\n\n const formatValue = React.useCallback((value: number) => {\n return value.toLocaleString(undefined, { maximumFractionDigits: 0 });\n }, []);\n\n const onFromInputChange = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const numValue = Number(event.target.value);\n if (!Number.isNaN(numValue) && numValue >= min && numValue <= range[1]) {\n column.setFilterValue([numValue, range[1]]);\n }\n },\n [column, min, range],\n );\n\n const onToInputChange = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const numValue = Number(event.target.value);\n if (!Number.isNaN(numValue) && numValue <= max && numValue >= range[0]) {\n column.setFilterValue([range[0], numValue]);\n }\n },\n [column, max, range],\n );\n\n const onSliderValueChange = React.useCallback(\n (value: RangeValue) => {\n if (Array.isArray(value) && value.length === 2) {\n column.setFilterValue(value);\n }\n },\n [column],\n );\n\n const onReset = React.useCallback(\n (event: React.MouseEvent) => {\n if (event.target instanceof HTMLDivElement) {\n event.stopPropagation();\n }\n column.setFilterValue(undefined);\n },\n [column],\n );\n\n const PopContent = (\n <div className=\"flex w-auto flex-col gap-4\">\n <div className=\"flex flex-col gap-3\">\n <p className=\"font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\">\n {title}\n </p>\n <div className=\"flex items-center gap-4\">\n <label htmlFor={`${id}-from`} className=\"sr-only\">\n From\n </label>\n <div className=\"relative\">\n <Input\n id={`${id}-from`}\n type=\"number\"\n aria-valuemin={min}\n aria-valuemax={max}\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n placeholder={min.toString()}\n min={min}\n max={max}\n value={range[0]?.toString()}\n onChange={onFromInputChange}\n className={cn(\"h-8 w-24\", unit && \"pr-8\")}\n />\n {unit && (\n <span className=\"absolute top-0 right-0 bottom-0 flex items-center rounded-r-md bg-accent px-2 text-muted-foreground text-sm\">\n {unit}\n </span>\n )}\n </div>\n <label htmlFor={`${id}-to`} className=\"sr-only\">\n to\n </label>\n <div className=\"relative\">\n <Input\n id={`${id}-to`}\n type=\"number\"\n aria-valuemin={min}\n aria-valuemax={max}\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n placeholder={max.toString()}\n min={min}\n max={max}\n value={range[1]?.toString()}\n onChange={onToInputChange}\n className={cn(\"h-8 w-24\", unit && \"pr-8\")}\n />\n {unit && (\n <span className=\"absolute top-0 right-0 bottom-0 flex items-center rounded-r-md bg-accent px-2 text-muted-foreground text-sm\">\n {unit}\n </span>\n )}\n </div>\n </div>\n <label htmlFor={`${id}-slider`} className=\"sr-only\">\n {title} slider\n </label>\n <Slider\n id={`${id}-slider`}\n min={min}\n max={max}\n step={step}\n value={range}\n onValueChange={onSliderValueChange}\n />\n </div>\n <Button\n aria-label={`Clear ${title} filter`}\n variant=\"outline\"\n size=\"sm\"\n onClick={onReset}\n >\n Clear\n </Button>\n </div>\n );\n\n return (\n <Popover content={PopContent}>\n <Button variant=\"outline\" size=\"sm\" className=\"border-dashed font-normal\">\n {columnFilterValue ? (\n <div\n role=\"button\"\n aria-label={`Clear ${title} filter`}\n tabIndex={0}\n className=\"rounded-sm opacity-70 transition-opacity hover:opacity-100 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\"\n onClick={onReset}\n >\n <XCircle />\n </div>\n ) : (\n <PlusCircle />\n )}\n <span>{title}</span>\n {columnFilterValue ? (\n <>\n <Separator\n orientation=\"vertical\"\n className=\"mx-0.5 data-[orientation=vertical]:h-4\"\n />\n {formatValue(columnFilterValue[0])} -{\" \"}\n {formatValue(columnFilterValue[1])}\n {unit ? ` ${unit}` : \"\"}\n </>\n ) : null}\n </Button>\n </Popover>\n );\n}\n"],"names":["getIsValidRange","value","parseValuesAsNumbers","v","DataTableSliderFilter","column","title","id","React","columnFilterValue","defaultRange","unit","min","max","step","minValue","maxValue","values","facetMinValue","facetMaxValue","rangeSize","range","formatValue","onFromInputChange","event","numValue","onToInputChange","onSliderValueChange","onReset","PopContent","jsxs","jsx","Input","cn","Slider","Button","Popover","XCircle","PlusCircle","Fragment","Separator"],"mappings":"qpBAmBA,SAASA,EAAgBC,EAAqC,CAC5D,OACE,MAAM,QAAQA,CAAK,GACnBA,EAAM,SAAW,GACjB,OAAOA,EAAM,CAAC,GAAM,UACpB,OAAOA,EAAM,CAAC,GAAM,QAExB,CAEA,SAASC,EAAqBD,EAAwC,CACpE,GACE,MAAM,QAAQA,CAAK,GACnBA,EAAM,SAAW,GACjBA,EAAM,MACHE,IACE,OAAOA,GAAM,UAAY,OAAOA,GAAM,WAAa,CAAC,OAAO,MAAMA,CAAC,CAAA,EAGvE,MAAO,CAAC,OAAOF,EAAM,CAAC,CAAC,EAAG,OAAOA,EAAM,CAAC,CAAC,CAAC,CAI9C,CAOO,SAASG,EAA6B,CAC3C,OAAAC,EACA,MAAAC,CACF,EAAsC,CACpC,MAAMC,EAAKC,EAAM,MAAA,EAEXC,EAAoBP,EAAqBG,EAAO,eAAA,CAAgB,EAEhEK,EAAeL,EAAO,UAAU,MAAM,MACtCM,EAAON,EAAO,UAAU,MAAM,KAE9B,CAAE,IAAAO,EAAK,IAAAC,EAAK,KAAAC,GAASN,EAAM,QAAkC,IAAM,CACvE,IAAIO,EAAW,EACXC,EAAW,IAEf,GAAIN,GAAgBV,EAAgBU,CAAY,EAC9C,CAACK,EAAUC,CAAQ,EAAIN,MAClB,CACL,MAAMO,EAASZ,EAAO,uBAAA,EACtB,GAAIY,GAAU,MAAM,QAAQA,CAAM,GAAKA,EAAO,SAAW,EAAG,CAC1D,KAAM,CAACC,EAAeC,CAAa,EAAIF,EAErC,OAAOC,GAAkB,UACzB,OAAOC,GAAkB,WAEzBJ,EAAWG,EACXF,EAAWG,EAEf,CACF,CAEA,MAAMC,EAAYJ,EAAWD,EACvBD,EACJM,GAAa,GACT,EACAA,GAAa,IACX,KAAK,KAAKA,EAAY,EAAE,EACxB,KAAK,KAAKA,EAAY,EAAE,EAEhC,MAAO,CAAE,IAAKL,EAAU,IAAKC,EAAU,KAAAF,CAAAA,CACzC,EAAG,CAACT,EAAQK,CAAY,CAAC,EAEnBW,EAAQb,EAAM,QAAQ,IACnBC,GAAqB,CAACG,EAAKC,CAAG,EACpC,CAACJ,EAAmBG,EAAKC,CAAG,CAAC,EAE1BS,EAAcd,EAAM,YAAaP,GAC9BA,EAAM,eAAe,OAAW,CAAE,sBAAuB,EAAG,EAClE,CAAA,CAAE,EAECsB,EAAoBf,EAAM,YAC7BgB,GAA+C,CAC9C,MAAMC,EAAW,OAAOD,EAAM,OAAO,KAAK,EACtC,CAAC,OAAO,MAAMC,CAAQ,GAAKA,GAAYb,GAAOa,GAAYJ,EAAM,CAAC,GACnEhB,EAAO,eAAe,CAACoB,EAAUJ,EAAM,CAAC,CAAC,CAAC,CAE9C,EACA,CAAChB,EAAQO,EAAKS,CAAK,CAAA,EAGfK,EAAkBlB,EAAM,YAC3BgB,GAA+C,CAC9C,MAAMC,EAAW,OAAOD,EAAM,OAAO,KAAK,EACtC,CAAC,OAAO,MAAMC,CAAQ,GAAKA,GAAYZ,GAAOY,GAAYJ,EAAM,CAAC,GACnEhB,EAAO,eAAe,CAACgB,EAAM,CAAC,EAAGI,CAAQ,CAAC,CAE9C,EACA,CAACpB,EAAQQ,EAAKQ,CAAK,CAAA,EAGfM,EAAsBnB,EAAM,YAC/BP,GAAsB,CACjB,MAAM,QAAQA,CAAK,GAAKA,EAAM,SAAW,GAC3CI,EAAO,eAAeJ,CAAK,CAE/B,EACA,CAACI,CAAM,CAAA,EAGHuB,EAAUpB,EAAM,YACnBgB,GAA4B,CACvBA,EAAM,kBAAkB,gBAC1BA,EAAM,gBAAA,EAERnB,EAAO,eAAe,MAAS,CACjC,EACA,CAACA,CAAM,CAAA,EAGHwB,EACJC,EAAAA,KAAC,MAAA,CAAI,UAAU,6BACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,sBACb,SAAA,CAAAC,EAAAA,IAAC,IAAA,CAAE,UAAU,qFACV,SAAAzB,EACH,EACAwB,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAC,EAAAA,IAAC,SAAM,QAAS,GAAGxB,CAAE,QAAS,UAAU,UAAU,SAAA,MAAA,CAElD,EACAuB,EAAAA,KAAC,MAAA,CAAI,UAAU,WACb,SAAA,CAAAC,EAAAA,IAACC,EAAAA,QAAA,CACC,GAAI,GAAGzB,CAAE,QACT,KAAK,SACL,gBAAeK,EACf,gBAAeC,EACf,UAAU,UACV,QAAQ,SACR,YAAaD,EAAI,SAAA,EACjB,IAAAA,EACA,IAAAC,EACA,MAAOQ,EAAM,CAAC,GAAG,SAAA,EACjB,SAAUE,EACV,UAAWU,EAAAA,GAAG,WAAYtB,GAAQ,MAAM,CAAA,CAAA,EAEzCA,GACCoB,EAAAA,IAAC,OAAA,CAAK,UAAU,8GACb,SAAApB,CAAA,CACH,CAAA,EAEJ,EACAoB,EAAAA,IAAC,SAAM,QAAS,GAAGxB,CAAE,MAAO,UAAU,UAAU,SAAA,IAAA,CAEhD,EACAuB,EAAAA,KAAC,MAAA,CAAI,UAAU,WACb,SAAA,CAAAC,EAAAA,IAACC,EAAAA,QAAA,CACC,GAAI,GAAGzB,CAAE,MACT,KAAK,SACL,gBAAeK,EACf,gBAAeC,EACf,UAAU,UACV,QAAQ,SACR,YAAaA,EAAI,SAAA,EACjB,IAAAD,EACA,IAAAC,EACA,MAAOQ,EAAM,CAAC,GAAG,SAAA,EACjB,SAAUK,EACV,UAAWO,EAAAA,GAAG,WAAYtB,GAAQ,MAAM,CAAA,CAAA,EAEzCA,GACCoB,EAAAA,IAAC,OAAA,CAAK,UAAU,8GACb,SAAApB,CAAA,CACH,CAAA,CAAA,CAEJ,CAAA,EACF,SACC,QAAA,CAAM,QAAS,GAAGJ,CAAE,UAAW,UAAU,UACvC,SAAA,CAAAD,EAAM,SAAA,EACT,EACAyB,EAAAA,IAACG,EAAAA,QAAA,CACC,GAAI,GAAG3B,CAAE,UACT,IAAAK,EACA,IAAAC,EACA,KAAAC,EACA,MAAOO,EACP,cAAeM,CAAA,CAAA,CACjB,EACF,EACAI,EAAAA,IAACI,EAAAA,QAAA,CACC,aAAY,SAAS7B,CAAK,UAC1B,QAAQ,UACR,KAAK,KACL,QAASsB,EACV,SAAA,OAAA,CAAA,CAED,EACF,EAGF,OACEG,EAAAA,IAACK,EAAAA,QAAA,CAAQ,QAASP,EAChB,SAAAC,OAACK,EAAAA,QAAA,CAAO,QAAQ,UAAU,KAAK,KAAK,UAAU,4BAC3C,SAAA,CAAA1B,EACCsB,EAAAA,IAAC,MAAA,CACC,KAAK,SACL,aAAY,SAASzB,CAAK,UAC1B,SAAU,EACV,UAAU,qIACV,QAASsB,EAET,eAACS,EAAAA,QAAA,CAAA,CAAQ,CAAA,CAAA,QAGVC,EAAAA,WAAA,EAAW,EAEdP,EAAAA,IAAC,QAAM,SAAAzB,CAAA,CAAM,EACZG,EACCqB,EAAAA,KAAAS,WAAA,CACE,SAAA,CAAAR,EAAAA,IAACS,EAAAA,QAAA,CACC,YAAY,WACZ,UAAU,wCAAA,CAAA,EAEXlB,EAAYb,EAAkB,CAAC,CAAC,EAAE,KAAG,IACrCa,EAAYb,EAAkB,CAAC,CAAC,EAChCE,EAAO,IAAIA,CAAI,GAAK,EAAA,CAAA,CACvB,EACE,IAAA,CAAA,CACN,CAAA,CACF,CAEJ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),s=require("lucide-react"),i=require("@dsui/ui"),g=require("../DropdownMenu/DropdownMenu.cjs"),d=require("./TableFilter/data-table-filter-popover.cjs"),h=require("../Button/Button.cjs");function p({column:e,label:o,className:a}){const n=o||(typeof e.columnDef.header=="string"?e.columnDef.header:null);if(!(e.getCanSort()||e.getCanHide()||e.getCanFilter()))return t.jsx("div",{className:i.cn(a),children:n});const c=t.jsxs("button",{className:"-ml-1.5 flex h-8 items-center gap-1.5 rounded-md px-2 py-1.5 hover:bg-accent focus:outline-none focus:ring-1 focus:ring-ring data-[state=open]:bg-accent [&_svg]:size-4 [&_svg]:shrink-0 [&_svg]:text-muted-foreground",children:[n,e.getCanSort()&&(e.getIsSorted()==="desc"?t.jsx(s.ChevronDown,{}):e.getIsSorted()==="asc"?t.jsx(s.ChevronUp,{}):t.jsx(s.ChevronsUpDown,{}))]}),l=e.getCanFilter()&&e.columnDef.meta?.variant?t.jsx(d.DataTableFilterPopover,{column:e,trigger:t.jsx(h.default,{variant:"ghost",className:i.cn("hover:bg-accent rounded p-1",e.getFilterValue()?"text-primary":""),children:t.jsx(s.Filter,{className:"size-4"})})}):null,r=[];return e.getCanSort()&&(r.push({key:"asc",type:"checkbox",label:"Asc",icon:t.jsx(s.ChevronUp,{}),checked:e.getIsSorted()==="asc",onClick:()=>e.toggleSorting(!1),className:"relative pr-8 pl-2 [&>span:first-child]:right-2 [&>span:first-child]:left-auto [&_svg]:text-muted-foreground"}),r.push({key:"desc",type:"checkbox",label:"Desc",icon:t.jsx(s.ChevronDown,{}),checked:e.getIsSorted()==="desc",onClick:()=>e.toggleSorting(!0),className:"relative pr-8 pl-2 [&>span:first-child]:right-2 [&>span:first-child]:left-auto [&_svg]:text-muted-foreground"}),e.getIsSorted()&&r.push({key:"reset",type:"item",label:"Reset",icon:t.jsx(s.X,{}),onClick:()=>e.clearSorting(),className:"pl-2 [&_svg]:text-muted-foreground"})),e.getCanHide()&&r.push({key:"hide",type:"checkbox",label:"Hide",icon:t.jsx(s.EyeOff,{}),checked:!e.getIsVisible(),onClick:()=>e.toggleVisibility(!1),className:"relative pr-8 pl-2 [&>span:first-child]:right-2 [&>span:first-child]:left-auto [&_svg]:text-muted-foreground"}),t.jsxs("div",{className:i.cn("flex items-center gap-1.5",a),children:[t.jsx(g.default,{trigger:c,items:r,align:"start",contentClassName:"w-28"}),l]})}exports.DataTableColumnHeader=p;
|
|
2
|
+
//# sourceMappingURL=data-table-column-header.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-table-column-header.cjs","sources":["../../../../src/components/Table/data-table-column-header.tsx"],"sourcesContent":["\"use client\";\n\nimport type { Column } from \"@tanstack/react-table\";\nimport {\n ChevronDown,\n ChevronsUpDown,\n ChevronUp,\n EyeOff,\n Filter,\n X,\n} from \"lucide-react\";\n\nimport { cn } from \"@dsui/ui\";\nimport DropdownMenu, {\n type DropdownMenuItem,\n} from \"../DropdownMenu/DropdownMenu\";\nimport { DataTableFilterPopover } from \"./TableFilter/data-table-filter-popover\";\nimport Button from \"../Button\";\n\ninterface DataTableColumnHeaderProps<TData, TValue> {\n column: Column<TData, TValue>;\n label?: string;\n className?: string;\n}\n\nexport function DataTableColumnHeader<TData, TValue>({\n column,\n label,\n className,\n}: DataTableColumnHeaderProps<TData, TValue>) {\n const displayLabel =\n label ||\n (typeof column.columnDef.header === \"string\"\n ? column.columnDef.header\n : null);\n\n const hasActions =\n column.getCanSort() || column.getCanHide() || column.getCanFilter();\n\n if (!hasActions) {\n return <div className={cn(className)}>{displayLabel}</div>;\n }\n\n const sortTrigger = (\n <button className=\"-ml-1.5 flex h-8 items-center gap-1.5 rounded-md px-2 py-1.5 hover:bg-accent focus:outline-none focus:ring-1 focus:ring-ring data-[state=open]:bg-accent [&_svg]:size-4 [&_svg]:shrink-0 [&_svg]:text-muted-foreground\">\n {displayLabel}\n {column.getCanSort() &&\n (column.getIsSorted() === \"desc\" ? (\n <ChevronDown />\n ) : column.getIsSorted() === \"asc\" ? (\n <ChevronUp />\n ) : (\n <ChevronsUpDown />\n ))}\n </button>\n );\n\n const filterButton =\n column.getCanFilter() && column.columnDef.meta?.variant ? (\n <DataTableFilterPopover\n column={column}\n trigger={\n <Button\n variant=\"ghost\"\n className={cn(\n \"hover:bg-accent rounded p-1\",\n column.getFilterValue() ? \"text-primary\" : \"\",\n )}\n >\n <Filter className=\"size-4\" />\n </Button>\n }\n />\n ) : null;\n\n const items: DropdownMenuItem[] = [];\n\n if (column.getCanSort()) {\n items.push({\n key: \"asc\",\n type: \"checkbox\",\n label: \"Asc\",\n icon: <ChevronUp />,\n checked: column.getIsSorted() === \"asc\",\n onClick: () => column.toggleSorting(false),\n className:\n \"relative pr-8 pl-2 [&>span:first-child]:right-2 [&>span:first-child]:left-auto [&_svg]:text-muted-foreground\",\n });\n items.push({\n key: \"desc\",\n type: \"checkbox\",\n label: \"Desc\",\n icon: <ChevronDown />,\n checked: column.getIsSorted() === \"desc\",\n onClick: () => column.toggleSorting(true),\n className:\n \"relative pr-8 pl-2 [&>span:first-child]:right-2 [&>span:first-child]:left-auto [&_svg]:text-muted-foreground\",\n });\n if (column.getIsSorted()) {\n items.push({\n key: \"reset\",\n type: \"item\",\n label: \"Reset\",\n icon: <X />,\n onClick: () => column.clearSorting(),\n className: \"pl-2 [&_svg]:text-muted-foreground\",\n });\n }\n }\n\n if (column.getCanHide()) {\n items.push({\n key: \"hide\",\n type: \"checkbox\",\n label: \"Hide\",\n icon: <EyeOff />,\n checked: !column.getIsVisible(),\n onClick: () => column.toggleVisibility(false),\n className:\n \"relative pr-8 pl-2 [&>span:first-child]:right-2 [&>span:first-child]:left-auto [&_svg]:text-muted-foreground\",\n });\n }\n\n return (\n <div className={cn(\"flex items-center gap-1.5\", className)}>\n <DropdownMenu\n trigger={sortTrigger}\n items={items}\n align=\"start\"\n contentClassName=\"w-28\"\n />\n {filterButton}\n </div>\n );\n}\n"],"names":["DataTableColumnHeader","column","label","className","displayLabel","cn","sortTrigger","jsxs","jsx","ChevronDown","ChevronUp","ChevronsUpDown","filterButton","DataTableFilterPopover","Button","Filter","items","X","EyeOff","DropdownMenu"],"mappings":"8SAyBO,SAASA,EAAqC,CACnD,OAAAC,EACA,MAAAC,EACA,UAAAC,CACF,EAA8C,CAC5C,MAAMC,EACJF,IACC,OAAOD,EAAO,UAAU,QAAW,SAChCA,EAAO,UAAU,OACjB,MAKN,GAAI,EAFFA,EAAO,WAAA,GAAgBA,EAAO,WAAA,GAAgBA,EAAO,aAAA,GAGrD,aAAQ,MAAA,CAAI,UAAWI,EAAAA,GAAGF,CAAS,EAAI,SAAAC,EAAa,EAGtD,MAAME,EACJC,EAAAA,KAAC,SAAA,CAAO,UAAU,yNACf,SAAA,CAAAH,EACAH,EAAO,WAAA,IACLA,EAAO,YAAA,IAAkB,OACxBO,EAAAA,IAACC,EAAAA,YAAA,EAAY,EACXR,EAAO,gBAAkB,YAC1BS,EAAAA,UAAA,CAAA,CAAU,QAEVC,EAAAA,eAAA,EAAe,EAAA,EAEtB,EAGIC,EACJX,EAAO,aAAA,GAAkBA,EAAO,UAAU,MAAM,QAC9CO,EAAAA,IAACK,EAAAA,uBAAA,CACC,OAAAZ,EACA,QACEO,EAAAA,IAACM,EAAAA,QAAA,CACC,QAAQ,QACR,UAAWT,EAAAA,GACT,8BACAJ,EAAO,eAAA,EAAmB,eAAiB,EAAA,EAG7C,SAAAO,EAAAA,IAACO,EAAAA,OAAA,CAAO,UAAU,QAAA,CAAS,CAAA,CAAA,CAC7B,CAAA,EAGF,KAEAC,EAA4B,CAAA,EAElC,OAAIf,EAAO,eACTe,EAAM,KAAK,CACT,IAAK,MACL,KAAM,WACN,MAAO,MACP,WAAON,EAAAA,UAAA,EAAU,EACjB,QAAST,EAAO,YAAA,IAAkB,MAClC,QAAS,IAAMA,EAAO,cAAc,EAAK,EACzC,UACE,8GAAA,CACH,EACDe,EAAM,KAAK,CACT,IAAK,OACL,KAAM,WACN,MAAO,OACP,WAAOP,EAAAA,YAAA,EAAY,EACnB,QAASR,EAAO,YAAA,IAAkB,OAClC,QAAS,IAAMA,EAAO,cAAc,EAAI,EACxC,UACE,8GAAA,CACH,EACGA,EAAO,eACTe,EAAM,KAAK,CACT,IAAK,QACL,KAAM,OACN,MAAO,QACP,WAAOC,EAAAA,EAAA,EAAE,EACT,QAAS,IAAMhB,EAAO,aAAA,EACtB,UAAW,oCAAA,CACZ,GAIDA,EAAO,cACTe,EAAM,KAAK,CACT,IAAK,OACL,KAAM,WACN,MAAO,OACP,WAAOE,EAAAA,OAAA,EAAO,EACd,QAAS,CAACjB,EAAO,aAAA,EACjB,QAAS,IAAMA,EAAO,iBAAiB,EAAK,EAC5C,UACE,8GAAA,CACH,SAIA,MAAA,CAAI,UAAWI,EAAAA,GAAG,4BAA6BF,CAAS,EACvD,SAAA,CAAAK,EAAAA,IAACW,EAAAA,QAAA,CACC,QAASb,EACT,MAAAU,EACA,MAAM,QACN,iBAAiB,MAAA,CAAA,EAElBJ,CAAA,EACH,CAEJ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),u=require("../Pagination/index.cjs"),x=require("@dsui/ui/index"),c=require("../Select/Select.cjs");function d({table:e,pageSizeOptions:s=[5,10,20,30,40,50,100],className:n,showPageInfo:i=!1,showPageSizeOptions:r=!1,showRowSelectionCount:o=!1,showPagination:l=!0,...g}){return t.jsxs("div",{className:x.cn("flex w-full flex-col-reverse items-center justify-between gap-4 overflow-auto p-1 sm:flex-row sm:gap-8",n),...g,children:[t.jsx("div",{className:"flex-1 whitespace-nowrap text-muted-foreground text-sm",children:o&&t.jsxs(t.Fragment,{children:[e.getFilteredSelectedRowModel().rows.length," of"," ",e.getFilteredRowModel().rows.length," row(s) selected."]})}),t.jsxs("div",{className:"flex flex-col-reverse items-center gap-2 sm:flex-row sm:gap-2 lg:gap-4",children:[i&&t.jsxs("div",{className:"flex items-center justify-center font-medium text-sm",children:["Page ",e.getState().pagination.pageIndex+1," of"," ",e.getPageCount()]}),l&&t.jsx(u.Pagination,{total:e.getPageCount(),currentPage:e.getState().pagination.pageIndex+1,onPageChange:a=>e.setPageIndex(a-1),maxPages:3,previousText:!1,nextText:!1,jumpOnEllipsis:!0,showPreviousNext:!0}),r&&t.jsx(c.default,{value:`${e.getState().pagination.pageSize}`,onValueChange:a=>{e.setPageSize(Number(a))},options:s.map(a=>({value:`${a}`,label:`${a} / page`}))})]})]})}exports.DataTablePagination=d;
|
|
2
|
+
//# sourceMappingURL=data-table-pagination.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-table-pagination.cjs","sources":["../../../../src/components/Table/data-table-pagination.tsx"],"sourcesContent":["import type { Table } from \"@tanstack/react-table\";\n\nimport { Select } from \"../Select\";\nimport { Pagination } from \"../Pagination\";\nimport { cn } from \"@dsui/ui/index\";\n\ninterface DataTablePaginationProps<TData> extends React.ComponentProps<\"div\"> {\n table: Table<TData>;\n pageSizeOptions?: number[];\n showPagination?: boolean;\n showPageSizeOptions?: boolean;\n showRowSelectionCount?: boolean;\n showPageInfo?: boolean;\n}\n\nexport function DataTablePagination<TData>({\n table,\n pageSizeOptions = [5, 10, 20, 30, 40, 50, 100],\n className,\n showPageInfo = false,\n showPageSizeOptions = false,\n showRowSelectionCount = false,\n showPagination = true,\n ...props\n}: DataTablePaginationProps<TData>) {\n return (\n <div\n className={cn(\n \"flex w-full flex-col-reverse items-center justify-between gap-4 overflow-auto p-1 sm:flex-row sm:gap-8\",\n className,\n )}\n {...props}\n >\n <div className=\"flex-1 whitespace-nowrap text-muted-foreground text-sm\">\n {showRowSelectionCount && (\n <>\n {table.getFilteredSelectedRowModel().rows.length} of{\" \"}\n {table.getFilteredRowModel().rows.length} row(s) selected.\n </>\n )}\n </div>\n <div className=\"flex flex-col-reverse items-center gap-2 sm:flex-row sm:gap-2 lg:gap-4\">\n {showPageInfo && (\n <div className=\"flex items-center justify-center font-medium text-sm\">\n Page {table.getState().pagination.pageIndex + 1} of{\" \"}\n {table.getPageCount()}\n </div>\n )}\n\n {showPagination && (\n <Pagination\n total={table.getPageCount()}\n currentPage={table.getState().pagination.pageIndex + 1}\n onPageChange={(page) => table.setPageIndex(page - 1)}\n maxPages={3}\n previousText={false}\n nextText={false}\n jumpOnEllipsis\n showPreviousNext={true}\n />\n )}\n\n {showPageSizeOptions && (\n <Select\n value={`${table.getState().pagination.pageSize}`}\n onValueChange={(value) => {\n table.setPageSize(Number(value));\n }}\n options={pageSizeOptions.map((pageSize) => ({\n value: `${pageSize}`,\n label: `${pageSize} / page`,\n }))}\n />\n )}\n </div>\n </div>\n );\n}\n"],"names":["DataTablePagination","table","pageSizeOptions","className","showPageInfo","showPageSizeOptions","showRowSelectionCount","showPagination","props","jsxs","cn","jsx","Fragment","Pagination","page","Select","value","pageSize"],"mappings":"wNAeO,SAASA,EAA2B,CACzC,MAAAC,EACA,gBAAAC,EAAkB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAG,EAC7C,UAAAC,EACA,aAAAC,EAAe,GACf,oBAAAC,EAAsB,GACtB,sBAAAC,EAAwB,GACxB,eAAAC,EAAiB,GACjB,GAAGC,CACL,EAAoC,CAClC,OACEC,EAAAA,KAAC,MAAA,CACC,UAAWC,EAAAA,GACT,yGACAP,CAAA,EAED,GAAGK,EAEJ,SAAA,CAAAG,MAAC,MAAA,CAAI,UAAU,yDACZ,SAAAL,GACCG,EAAAA,KAAAG,WAAA,CACG,SAAA,CAAAX,EAAM,8BAA8B,KAAK,OAAO,MAAI,IACpDA,EAAM,sBAAsB,KAAK,OAAO,mBAAA,CAAA,CAC3C,CAAA,CAEJ,EACAQ,EAAAA,KAAC,MAAA,CAAI,UAAU,yEACZ,SAAA,CAAAL,GACCK,EAAAA,KAAC,MAAA,CAAI,UAAU,uDAAuD,SAAA,CAAA,QAC9DR,EAAM,SAAA,EAAW,WAAW,UAAY,EAAE,MAAI,IACnDA,EAAM,aAAA,CAAa,EACtB,EAGDM,GACCI,EAAAA,IAACE,EAAAA,WAAA,CACC,MAAOZ,EAAM,aAAA,EACb,YAAaA,EAAM,SAAA,EAAW,WAAW,UAAY,EACrD,aAAea,GAASb,EAAM,aAAaa,EAAO,CAAC,EACnD,SAAU,EACV,aAAc,GACd,SAAU,GACV,eAAc,GACd,iBAAkB,EAAA,CAAA,EAIrBT,GACCM,EAAAA,IAACI,EAAAA,QAAA,CACC,MAAO,GAAGd,EAAM,SAAA,EAAW,WAAW,QAAQ,GAC9C,cAAgBe,GAAU,CACxBf,EAAM,YAAY,OAAOe,CAAK,CAAC,CACjC,EACA,QAASd,EAAgB,IAAKe,IAAc,CAC1C,MAAO,GAAGA,CAAQ,GAClB,MAAO,GAAGA,CAAQ,SAAA,EAClB,CAAA,CAAA,CACJ,CAAA,CAEJ,CAAA,CAAA,CAAA,CAGN"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),i=require("@tanstack/react-table"),g=require("./data-table-pagination.cjs"),n=require("@dsui/ui"),d=require("../../utils/data-table.cjs"),b=require("./data-table-column-header.cjs");function j({table:o,actionBar:c,children:u,className:m,pagination:t=!0,sticky:T,bordered:f,loading:a,footer:r,...x}){return e.jsxs("div",{className:n.cn("flex w-full flex-col gap-2.5 relative",m),...x,children:[u,a&&e.jsx("div",{className:"absolute inset-0 bg-background/50 flex items-center justify-center z-20",children:"Loading..."}),e.jsx("div",{className:n.cn("overflow-auto rounded-md border",a&&"blur-sm"),children:e.jsxs(n.Table,{children:[e.jsx(n.TableHeader,{children:o.getHeaderGroups().map(s=>e.jsx(n.TableRow,{children:s.headers.map(l=>e.jsx(n.TableHead,{colSpan:l.colSpan,style:{...d.getCommonPinningStyles({column:l.column})},children:l.isPlaceholder?null:l.column.columnDef.header?typeof l.column.columnDef.header=="function"?i.flexRender(l.column.columnDef.header,l.getContext()):e.jsx(b.DataTableColumnHeader,{column:l.column}):null},l.id))},s.id))}),e.jsx(n.TableBody,{children:o.getRowModel().rows?.length?o.getRowModel().rows.map(s=>e.jsx(n.TableRow,{"data-state":s.getIsSelected()&&"selected",children:s.getVisibleCells().map(l=>e.jsx(n.TableCell,{style:{...d.getCommonPinningStyles({column:l.column})},children:i.flexRender(l.column.columnDef.cell,l.getContext())},l.id))},s.id)):e.jsx(n.TableRow,{children:e.jsx(n.TableCell,{colSpan:o.getAllColumns().length,className:"h-24 text-center",children:"No results."})})}),r&&e.jsx("tfoot",{children:e.jsx(n.TableRow,{children:e.jsx(n.TableCell,{colSpan:o.getAllColumns().length,children:r(o.getRowModel().rows.map(s=>s.original))})})})]})}),e.jsxs("div",{className:"flex flex-col gap-2.5",children:[t&&e.jsx(g.DataTablePagination,{table:o,...t===!0?{}:t}),c&&o.getFilteredSelectedRowModel().rows.length>0&&c]})]})}exports.DataTable=j;
|
|
2
|
+
//# sourceMappingURL=data-table.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-table.cjs","sources":["../../../../src/components/Table/data-table.tsx"],"sourcesContent":["import { flexRender, type Table as TanstackTable } from \"@tanstack/react-table\";\nimport type * as React from \"react\";\n\nimport { DataTablePagination } from \"./data-table-pagination\";\nimport {\n cn,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@dsui/ui\";\nimport { getCommonPinningStyles } from \"@/utils/data-table\";\nimport { DataTableColumnHeader } from \"./data-table-column-header\";\n\ninterface DataTableProps<TData> extends React.ComponentProps<\"div\"> {\n table: TanstackTable<TData>;\n actionBar?: React.ReactNode;\n pagination?:\n | boolean\n | Omit<React.ComponentProps<typeof DataTablePagination<TData>>, \"table\">;\n sticky?: boolean | { offsetHeader?: number; offsetScroll?: number };\n bordered?: boolean;\n loading?: boolean;\n footer?: (currentPageData: TData[]) => React.ReactNode;\n}\n\nexport function DataTable<TData>({\n table,\n actionBar,\n children,\n className,\n pagination = true,\n sticky,\n bordered,\n loading,\n footer,\n ...props\n}: DataTableProps<TData>) {\n return (\n <div\n className={cn(\"flex w-full flex-col gap-2.5 relative\", className)}\n {...props}\n >\n {children}\n {loading && (\n <div className=\"absolute inset-0 bg-background/50 flex items-center justify-center z-20\">\n Loading...\n </div>\n )}\n <div\n className={cn(\"overflow-auto rounded-md border\", loading && \"blur-sm\")}\n >\n <Table>\n <TableHeader>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => (\n <TableHead\n key={header.id}\n colSpan={header.colSpan}\n style={{\n ...getCommonPinningStyles({ column: header.column }),\n }}\n >\n {header.isPlaceholder ? null : header.column.columnDef\n .header ? (\n typeof header.column.columnDef.header === \"function\" ? (\n flexRender(\n header.column.columnDef.header,\n header.getContext(),\n )\n ) : (\n <DataTableColumnHeader column={header.column} />\n )\n ) : null}\n </TableHead>\n ))}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n <TableRow\n key={row.id}\n data-state={row.getIsSelected() && \"selected\"}\n >\n {row.getVisibleCells().map((cell) => (\n <TableCell\n key={cell.id}\n style={{\n ...getCommonPinningStyles({ column: cell.column }),\n }}\n >\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext(),\n )}\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n <TableRow>\n <TableCell\n colSpan={table.getAllColumns().length}\n className=\"h-24 text-center\"\n >\n No results.\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n {footer && (\n <tfoot>\n <TableRow>\n <TableCell colSpan={table.getAllColumns().length}>\n {footer(table.getRowModel().rows.map((row) => row.original))}\n </TableCell>\n </TableRow>\n </tfoot>\n )}\n </Table>\n </div>\n <div className=\"flex flex-col gap-2.5\">\n {pagination && (\n <DataTablePagination\n table={table}\n {...(pagination === true ? {} : pagination)}\n />\n )}\n {actionBar &&\n table.getFilteredSelectedRowModel().rows.length > 0 &&\n actionBar}\n </div>\n </div>\n );\n}\n"],"names":["DataTable","table","actionBar","children","className","pagination","sticky","bordered","loading","footer","props","jsxs","cn","jsx","Table","TableHeader","headerGroup","TableRow","header","TableHead","getCommonPinningStyles","flexRender","DataTableColumnHeader","TableBody","row","cell","TableCell","DataTablePagination"],"mappings":"2SA4BO,SAASA,EAAiB,CAC/B,MAAAC,EACA,UAAAC,EACA,SAAAC,EACA,UAAAC,EACA,WAAAC,EAAa,GACb,OAAAC,EACA,SAAAC,EACA,QAAAC,EACA,OAAAC,EACA,GAAGC,CACL,EAA0B,CACxB,OACEC,EAAAA,KAAC,MAAA,CACC,UAAWC,EAAAA,GAAG,wCAAyCR,CAAS,EAC/D,GAAGM,EAEH,SAAA,CAAAP,EACAK,GACCK,EAAAA,IAAC,MAAA,CAAI,UAAU,0EAA0E,SAAA,aAEzF,EAEFA,EAAAA,IAAC,MAAA,CACC,UAAWD,EAAAA,GAAG,kCAAmCJ,GAAW,SAAS,EAErE,gBAACM,QAAA,CACC,SAAA,CAAAD,EAAAA,IAACE,EAAAA,YAAA,CACE,SAAAd,EAAM,gBAAA,EAAkB,IAAKe,GAC5BH,EAAAA,IAACI,EAAAA,SAAA,CACE,SAAAD,EAAY,QAAQ,IAAKE,GACxBL,EAAAA,IAACM,EAAAA,UAAA,CAEC,QAASD,EAAO,QAChB,MAAO,CACL,GAAGE,yBAAuB,CAAE,OAAQF,EAAO,OAAQ,CAAA,EAGpD,SAAAA,EAAO,cAAgB,KAAOA,EAAO,OAAO,UACxC,OACH,OAAOA,EAAO,OAAO,UAAU,QAAW,WACxCG,EAAAA,WACEH,EAAO,OAAO,UAAU,OACxBA,EAAO,WAAA,CAAW,EAGpBL,EAAAA,IAACS,EAAAA,sBAAA,CAAsB,OAAQJ,EAAO,OAAQ,EAE9C,IAAA,EAhBCA,EAAO,EAAA,CAkBf,GArBYF,EAAY,EAsB3B,CACD,CAAA,CACH,EACAH,EAAAA,IAACU,EAAAA,UAAA,CACE,SAAAtB,EAAM,YAAA,EAAc,MAAM,OACzBA,EAAM,YAAA,EAAc,KAAK,IAAKuB,GAC5BX,EAAAA,IAACI,EAAAA,SAAA,CAEC,aAAYO,EAAI,cAAA,GAAmB,WAElC,SAAAA,EAAI,gBAAA,EAAkB,IAAKC,GAC1BZ,EAAAA,IAACa,EAAAA,UAAA,CAEC,MAAO,CACL,GAAGN,yBAAuB,CAAE,OAAQK,EAAK,OAAQ,CAAA,EAGlD,SAAAJ,EAAAA,WACCI,EAAK,OAAO,UAAU,KACtBA,EAAK,WAAA,CAAW,CAClB,EARKA,EAAK,EAAA,CAUb,CAAA,EAfID,EAAI,EAAA,CAiBZ,EAEDX,EAAAA,IAACI,WAAA,CACC,SAAAJ,EAAAA,IAACa,EAAAA,UAAA,CACC,QAASzB,EAAM,cAAA,EAAgB,OAC/B,UAAU,mBACX,SAAA,aAAA,CAAA,EAGH,CAAA,CAEJ,EACCQ,GACCI,EAAAA,IAAC,QAAA,CACC,SAAAA,EAAAA,IAACI,EAAAA,SAAA,CACC,eAACS,EAAAA,UAAA,CAAU,QAASzB,EAAM,cAAA,EAAgB,OACvC,WAAOA,EAAM,YAAA,EAAc,KAAK,IAAKuB,GAAQA,EAAI,QAAQ,CAAC,CAAA,CAC7D,CAAA,CACF,CAAA,CACF,CAAA,CAAA,CAEJ,CAAA,CAAA,EAEFb,EAAAA,KAAC,MAAA,CAAI,UAAU,wBACZ,SAAA,CAAAN,GACCQ,EAAAA,IAACc,EAAAA,oBAAA,CACC,MAAA1B,EACC,GAAII,IAAe,GAAO,GAAKA,CAAA,CAAA,EAGnCH,GACCD,EAAM,4BAAA,EAA8B,KAAK,OAAS,GAClDC,CAAA,CAAA,CACJ,CAAA,CAAA,CAAA,CAGN"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const o=require("react/jsx-runtime"),h=require("react"),B=require("@dsui/ui/components/tabs"),ee=require("motion/react"),c=require("@dsui/ui/lib/utils"),O=require("../ScrollArea/ScrollArea.cjs"),te=require("../Popover/Popover.cjs"),re=require("lucide-react"),m=require("./classes.cjs"),se=h.forwardRef((oe,ne)=>{const{items:d,defaultActiveKey:_,activeKey:A,onChange:le,tabPosition:p="top",size:ie="md",alignment:D="start",fullWidth:G=!1,overflowMode:i="scroll",variant:e="solid",color:n="muted",className:ae,tabListClassName:ce,tabContentClassName:de,tabTriggerClassName:ue}=oe,N=h.useRef([]),R=h.useRef(null),z=h.useRef(null),L=h.useRef(null),[x,U]=h.useState({left:0,width:0,top:0,height:0}),[fe,he]=h.useState(A||_||d[0]?.key),[y,J]=h.useState(!1),[Q,ge]=h.useState(d.length),[H,q]=h.useState(!1),[be,X]=h.useState(!1),[pe,Y]=h.useState(!1),S=A!==void 0?A:fe,r=p==="left"||p==="right";h.useLayoutEffect(()=>{if(!i||i==="dropdown")return;const t=()=>{const l=z.current,g=R.current;if(!l||!g)return;const v=r?l.clientHeight:l.clientWidth,k=(r?g.scrollHeight:g.scrollWidth)>v;J(k)};t();const s=new ResizeObserver(t);return z.current&&s.observe(z.current),R.current&&s.observe(R.current),()=>{s.disconnect()}},[d,i,r]),h.useLayoutEffect(()=>{if(i!=="dropdown")return;const t=()=>{const l=z.current;if(!l)return;const g=r?l.clientHeight:l.clientWidth;let v=0;const T=48,k=6,u=e==="enclosed-fill"||e==="bordered"||e==="pills"||e==="pill-stroke"||e==="text"||e==="outline"?4:0;let a=0;for(let f=0;f<N.current.length;f++){const C=N.current[f];if(!C)break;const j=r?C.offsetHeight:C.offsetWidth,w=f>0?u:0,E=f<N.current.length-1;if(v+j+w+(E?T:0)+k<=g)v+=j+w,a++;else break}const b=a<d.length;J(b),ge(Math.max(1,a))};t();const s=new ResizeObserver(t);return z.current&&s.observe(z.current),N.current.forEach(l=>{l&&s.observe(l)}),()=>{s.disconnect()}},[d,i,r,e]),h.useLayoutEffect(()=>{const t=d.findIndex(g=>g.key===S),s=N.current[t],l=R.current;if(s&&l){const g=l.getBoundingClientRect(),v=s.getBoundingClientRect(),T=v.left-g.left,k=v.top-g.top;if(U({left:T,width:v.width,top:k,height:v.height}),i==="fade"&&L.current){const u=L.current.querySelector("[data-radix-scroll-area-viewport]");if(u){const a=u.getBoundingClientRect(),b=s.getBoundingClientRect(),f=96;if(r){const C=u.scrollTop,j=u.scrollHeight,w=a.height,E=b.top-a.top+C,M=b.height;if(t===0)u.scrollTo({top:0,behavior:"smooth"});else if(t===d.length-1)u.scrollTo({top:j-w,behavior:"smooth"});else{const F=E-w/2+M/2,K=j-w,P=Math.max(f/2,Math.min(F,K-f/2));u.scrollTo({top:P,behavior:"smooth"})}}else{const C=u.scrollLeft,j=u.scrollWidth,w=a.width,E=b.left-a.left+C,M=b.width;if(t===0)u.scrollTo({left:0,behavior:"smooth"});else if(t===d.length-1)u.scrollTo({left:j-w,behavior:"smooth"});else{const F=E-w/2+M/2,K=j-w,P=Math.max(f/2,Math.min(F,K-f/2));u.scrollTo({left:P,behavior:"smooth"})}}}}}},[S,d,r,i]),h.useEffect(()=>{if(i!=="fade"||!L.current)return;const t=L.current.querySelector("[data-radix-scroll-area-viewport]");if(!t)return;let s=null;const l=()=>{s!==null&&cancelAnimationFrame(s),s=requestAnimationFrame(()=>{if(r){const a=t.scrollTop,b=t.scrollHeight,f=t.clientHeight;X(a>5),Y(a<b-f-5)}else{const a=t.scrollLeft,b=t.scrollWidth,f=t.clientWidth;X(a>5),Y(a<b-f-5)}const T=d.findIndex(a=>a.key===S),k=N.current[T],u=R.current;if(k&&u){const a=u.getBoundingClientRect(),b=k.getBoundingClientRect(),f=b.left-a.left,C=b.top-a.top;U({left:f,width:b.width,top:C,height:b.height})}s=null})};l(),t.addEventListener("scroll",l,{passive:!0});const g=new ResizeObserver(l);return g.observe(t),()=>{s!==null&&cancelAnimationFrame(s),t.removeEventListener("scroll",l),g.disconnect()}},[i,r,y,d,S]);const I=t=>{A===void 0&&he(t),le?.(t)},ve=r?"vertical":"horizontal",Z=m.variantClasses[e],me=Z.list[r?"vertical":"horizontal"];let W=Z.trigger[r?"vertical":"horizontal"];e==="underlined"?W=m.getUnderlinedTriggerClasses(p):e==="enclosed"?W=m.getEnclosedTriggerClasses(p):e==="enclosed-fill"&&(W=m.getEnclosedFillTriggerClasses(p));const xe=m.getColorClasses(e,n),we=m.getListBorderClasses(e,n,p),ye=i==="dropdown"&&y?d.slice(0,Q):d,V=i==="dropdown"&&y?d.slice(Q):i==="fade"&&y?d:[],Ce=i==="dropdown"&&y&&V.length>0,$=i==="dropdown"&&y&&V.some(t=>t.key===S),Se=(t,s=0)=>o.jsx(o.Fragment,{children:t.map((l,g)=>{const v=s+g;return o.jsxs(B.TabsTrigger,{ref:T=>{N.current[v]=T},value:l.key,disabled:l.disabled,className:c.cn(W,{"relative z-10 bg-transparent data-[state=active]:bg-transparent":e==="solid"||e==="bordered"||e==="pills","data-[state=active]:text-primary-foreground":(e==="bordered"||e==="pills")&&n==="primary","data-[state=active]:text-secondary-foreground":(e==="bordered"||e==="pills")&&n==="secondary","data-[state=active]:text-muted-foreground":(e==="bordered"||e==="pills")&&n==="muted","data-[state=active]:text-accent-foreground":(e==="bordered"||e==="pills")&&n==="accent","data-[state=active]:text-destructive-foreground":(e==="bordered"||e==="pills")&&n==="destructive","data-[state=active]:text-white":(e==="bordered"||e==="pills")&&(n==="success"||n==="warning"),"flex-1":G&&!r,"w-full justify-start":r},!(e==="solid"||e==="bordered"||e==="pills")&&xe,l.className,ue),children:[l.icon&&o.jsx("span",{className:"mr-2 inline-flex items-center",children:l.icon}),l.label]},l.key)})}),Te=()=>{const t=o.jsxs(B.TabsList,{ref:R,className:c.cn(m.positionClasses[p].list,m.sizeClasses[ie][r?"vertical":"horizontal"],me,we,ce,"relative",{"overflow-hidden":i==="fade"&&y,"max-w-full":i==="fade","w-auto":i==="dropdown"||i==="fade"}),children:[Se(ye),e==="underlined"&&x.width>0&&!$&&o.jsx(ee.motion.div,{className:c.cn("absolute rounded-full z-10",{"h-0.5 bottom-0":p==="top","h-0.5 top-0":p==="bottom","w-0.5 right-0":p==="left","w-0.5 left-0":p==="right","bg-primary":n==="primary","bg-secondary":n==="secondary","bg-muted-foreground":n==="muted","bg-accent":n==="accent","bg-destructive":n==="destructive","bg-success":n==="success","bg-warning":n==="warning"}),animate:r?{top:x.top,height:x.height}:{left:x.left,width:x.width},transition:{type:"spring",stiffness:300,damping:30}}),(e==="solid"||e==="bordered"||e==="pills"||e==="pill-stroke")&&x.width>0&&!$&&o.jsx(ee.motion.div,{className:c.cn("absolute rounded-md pointer-events-none z-0",{"bg-background shadow-sm":e==="solid","bg-primary":(e==="bordered"||e==="pills")&&n==="primary","bg-secondary":(e==="bordered"||e==="pills")&&n==="secondary","bg-muted":(e==="bordered"||e==="pills")&&n==="muted","bg-accent":(e==="bordered"||e==="pills")&&n==="accent","bg-destructive":(e==="bordered"||e==="pills")&&n==="destructive","bg-success":(e==="bordered"||e==="pills")&&n==="success","bg-warning":(e==="bordered"||e==="pills")&&n==="warning","border rounded-full border-primary":e==="pill-stroke"&&n==="primary","border rounded-full border-secondary":e==="pill-stroke"&&n==="secondary","rounded-full border-muted":e==="pill-stroke"&&n==="muted","border rounded-full border-accent":e==="pill-stroke"&&n==="accent","border rounded-full border-destructive":e==="pill-stroke"&&n==="destructive","border rounded-full border-success":e==="pill-stroke"&&n==="success","border rounded-full border-warning":e==="pill-stroke"&&n==="warning"}),animate:{left:x.left,width:x.width,top:x.top,height:x.height},transition:{type:"spring",stiffness:300,damping:30}})]});return i==="scroll"?o.jsxs(O.ScrollArea,{ref:L,className:c.cn({"w-full":!r,"pb-2":!r&&y,"max-h-[300px] *:data-radix-scroll-area-viewport:h-full *:data-radix-scroll-area-viewport:max-h-[inherit]":r}),children:[t,o.jsx(O.ScrollBar,{orientation:r?"vertical":"horizontal"})]}):i==="dropdown"&&Ce?o.jsxs("div",{className:c.cn("relative flex items-start gap-1",{"flex-col":r}),children:[t,o.jsx(te.default,{open:H,onOpenChange:q,trigger:o.jsx("button",{className:c.cn("inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2","disabled:pointer-events-none disabled:opacity-50","hover:bg-accent hover:text-accent-foreground","h-9 px-3 shrink-0",{"bg-accent text-accent-foreground":H}),"aria-label":"More tabs",children:o.jsx(re.MoreHorizontal,{className:"h-4 w-4"})}),content:o.jsx("div",{className:c.cn("flex flex-col gap-1 p-1"),children:V.map(s=>o.jsxs("button",{onClick:()=>{I(s.key),q(!1)},disabled:s.disabled,className:c.cn("flex items-center gap-2 rounded-sm px-2 py-1.5 text-sm","hover:bg-accent hover:text-accent-foreground","disabled:pointer-events-none disabled:opacity-50","text-left",{"bg-accent text-accent-foreground":s.key===S}),children:[s.icon&&o.jsx("span",{className:"inline-flex items-center",children:s.icon}),s.label]},s.key))}),side:r?"right":"bottom",align:"end",className:"w-auto min-w-32 max-w-sm max-h-96 overflow-auto p-0"})]}):i==="fade"&&y?o.jsxs("div",{className:c.cn("relative flex items-start gap-1",{"flex-col":r,"flex-1 w-full":!0}),children:[o.jsxs("div",{className:c.cn("relative flex-1 overflow-hidden",{"w-full":!r,"h-full":r}),children:[o.jsxs(O.ScrollArea,{ref:L,className:c.cn({"w-full":!r,"h-full":r}),children:[t,o.jsx(O.ScrollBar,{orientation:r?"vertical":"horizontal"})]}),be&&o.jsx("div",{className:c.cn("absolute pointer-events-none z-20",{"top-0 left-0 bottom-0 w-24 bg-linear-to-r from-background to-transparent":!r,"left-0 right-0 top-0 h-24 bg-linear-to-b from-background to-transparent":r})}),pe&&o.jsx("div",{className:c.cn("absolute pointer-events-none z-20",{"top-0 right-0 bottom-0 w-24 bg-linear-to-l from-background to-transparent":!r,"left-0 right-0 bottom-0 h-24 bg-linear-to-t from-background to-transparent":r})})]}),o.jsx(te.default,{open:H,onOpenChange:q,trigger:o.jsx("button",{className:c.cn("inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2","disabled:pointer-events-none disabled:opacity-50","hover:bg-accent hover:text-accent-foreground","h-9 px-3 shrink-0",{"bg-accent text-accent-foreground":H}),"aria-label":"More tabs",children:o.jsx(re.MoreHorizontal,{className:"h-4 w-4"})}),content:o.jsx(O.ScrollArea,{className:"min-w-[150px] max-h-[256px] [&_[data-radix-scroll-area-viewport]]:max-h-[256px]",snapType:"y",children:d.map(s=>o.jsxs("button",{onClick:()=>{I(s.key),q(!1)},disabled:s.disabled,className:c.cn("snap-start","w-full flex items-center gap-2 rounded-sm px-2 py-1.5 text-sm","hover:bg-accent hover:text-accent-foreground","disabled:pointer-events-none disabled:opacity-50","text-left",{"bg-accent text-accent-foreground":s.key===S}),children:[s.icon&&o.jsx("span",{className:"inline-flex items-center",children:s.icon}),s.label]},s.key))}),side:r?"right":"bottom",align:"end"})]}):t};return o.jsxs(B.Tabs,{ref:ne,defaultValue:_,value:S,onValueChange:I,orientation:ve,className:c.cn("gap-2",m.positionClasses[p].root,ae),children:[o.jsx("div",{ref:z,className:c.cn("flex",{[m.alignmentClasses[D].horizontal]:!r,[m.alignmentClasses[D].vertical]:r,"w-full":(G||i==="dropdown"||i==="fade")&&!r,"overflow-hidden":i==="dropdown"||i==="fade"}),children:Te()}),d.map(t=>o.jsx(B.TabsContent,{value:t.key,className:c.cn(de),children:t.children},t.key))]})});se.displayName="Tabs";exports.default=se;
|
|
2
|
+
//# sourceMappingURL=Tabs.cjs.map
|