@jbpark/ui-kit 10.2.0 → 10.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ko.md +97 -76
- package/README.md +91 -70
- package/dist/Alert.d.mts +2 -2
- package/dist/Alert.d.mts.map +1 -1
- package/dist/Alert.mjs +1 -1
- package/dist/Anchor.d.mts +29 -0
- package/dist/Anchor.d.mts.map +1 -0
- package/dist/Anchor.mjs +120 -0
- package/dist/Anchor.mjs.map +1 -0
- package/dist/AutoComplete.d.mts +34 -0
- package/dist/AutoComplete.d.mts.map +1 -0
- package/dist/AutoComplete.mjs +82 -0
- package/dist/AutoComplete.mjs.map +1 -0
- package/dist/Avatar.d.mts +2 -2
- package/dist/Avatar.d.mts.map +1 -1
- package/dist/Avatar.mjs +2 -2
- package/dist/Badge.d.mts +2 -2
- package/dist/Badge.d.mts.map +1 -1
- package/dist/Breadcrumb.d.mts +3 -3
- package/dist/Breadcrumb.d.mts.map +1 -1
- package/dist/Breadcrumb.mjs +2 -2
- package/dist/Breadcrumb.mjs.map +1 -1
- package/dist/Button.d.mts +3 -3
- package/dist/Button.d.mts.map +1 -1
- package/dist/Button.mjs +1 -1
- package/dist/Calendar.d.mts +28 -0
- package/dist/Calendar.d.mts.map +1 -0
- package/dist/Calendar.mjs +64 -0
- package/dist/Calendar.mjs.map +1 -0
- package/dist/Card.d.mts +2 -2
- package/dist/Card.d.mts.map +1 -1
- package/dist/Cascader.d.mts +34 -0
- package/dist/Cascader.d.mts.map +1 -0
- package/dist/Cascader.mjs +144 -0
- package/dist/Cascader.mjs.map +1 -0
- package/dist/Checkbox.d.mts +10 -0
- package/dist/Checkbox.d.mts.map +1 -0
- package/dist/Checkbox.mjs +9 -0
- package/dist/Checkbox.mjs.map +1 -0
- package/dist/CodeEditor.d.mts +10 -4
- package/dist/CodeEditor.d.mts.map +1 -1
- package/dist/CodeEditor.mjs +9 -4
- package/dist/CodeEditor.mjs.map +1 -1
- package/dist/{components/molecules/collapse.d.mts → Collapse.d.mts} +3 -3
- package/dist/Collapse.d.mts.map +1 -0
- package/dist/{components/molecules/collapse.mjs → Collapse.mjs} +3 -3
- package/dist/Collapse.mjs.map +1 -0
- package/dist/{components/atoms/color-picker.d.mts → ColorPicker.d.mts} +3 -3
- package/dist/ColorPicker.d.mts.map +1 -0
- package/dist/{components/atoms/color-picker.mjs → ColorPicker.mjs} +3 -3
- package/dist/ColorPicker.mjs.map +1 -0
- package/dist/{components/templates/container.d.mts → Container.d.mts} +3 -3
- package/dist/Container.d.mts.map +1 -0
- package/dist/{components/templates/container.mjs → Container.mjs} +2 -2
- package/dist/Container.mjs.map +1 -0
- package/dist/ContextMenu.d.mts +33 -0
- package/dist/ContextMenu.d.mts.map +1 -0
- package/dist/ContextMenu.mjs +92 -0
- package/dist/ContextMenu.mjs.map +1 -0
- package/dist/{components/atoms/date-picker.d.mts → DatePicker.d.mts} +6 -2
- package/dist/DatePicker.d.mts.map +1 -0
- package/dist/DatePicker.mjs +88 -0
- package/dist/DatePicker.mjs.map +1 -0
- package/dist/Descriptions.d.mts +31 -0
- package/dist/Descriptions.d.mts.map +1 -0
- package/dist/Descriptions.mjs +67 -0
- package/dist/Descriptions.mjs.map +1 -0
- package/dist/Divider.d.mts +18 -0
- package/dist/Divider.d.mts.map +1 -0
- package/dist/Divider.mjs +44 -0
- package/dist/Divider.mjs.map +1 -0
- package/dist/{components/organisms/drawer.d.mts → Drawer.d.mts} +3 -3
- package/dist/Drawer.d.mts.map +1 -0
- package/dist/{components/organisms/drawer.mjs → Drawer.mjs} +6 -6
- package/dist/Drawer.mjs.map +1 -0
- package/dist/{components/molecules/dropdown.d.mts → Dropdown.d.mts} +4 -4
- package/dist/Dropdown.d.mts.map +1 -0
- package/dist/{components/molecules/dropdown.mjs → Dropdown.mjs} +4 -4
- package/dist/Dropdown.mjs.map +1 -0
- package/dist/{components/templates/empty.d.mts → Empty.d.mts} +4 -4
- package/dist/Empty.d.mts.map +1 -0
- package/dist/{components/templates/empty.mjs → Empty.mjs} +4 -4
- package/dist/Empty.mjs.map +1 -0
- package/dist/FloatButton.d.mts +10 -0
- package/dist/FloatButton.d.mts.map +1 -0
- package/dist/FloatButton.mjs +9 -0
- package/dist/FloatButton.mjs.map +1 -0
- package/dist/Form.d.mts +12 -0
- package/dist/Form.d.mts.map +1 -0
- package/dist/Form.mjs +11 -0
- package/dist/Form.mjs.map +1 -0
- package/dist/Input.d.mts +16 -0
- package/dist/Input.d.mts.map +1 -0
- package/dist/Input.mjs +15 -0
- package/dist/Input.mjs.map +1 -0
- package/dist/Layout.d.mts.map +1 -1
- package/dist/{components/organisms/list/index.d.mts → List.d.mts} +3 -3
- package/dist/List.d.mts.map +1 -0
- package/dist/List.mjs +9 -0
- package/dist/List.mjs.map +1 -0
- package/dist/Marquees.d.mts +10 -0
- package/dist/Marquees.d.mts.map +1 -0
- package/dist/Marquees.mjs +9 -0
- package/dist/Marquees.mjs.map +1 -0
- package/dist/Mentions.d.mts +34 -0
- package/dist/Mentions.d.mts.map +1 -0
- package/dist/Mentions.mjs +208 -0
- package/dist/Mentions.mjs.map +1 -0
- package/dist/Menu.mjs +1 -2
- package/dist/{components/organisms/modal.d.mts → Modal.d.mts} +7 -4
- package/dist/Modal.d.mts.map +1 -0
- package/dist/{components/organisms/modal.mjs → Modal.mjs} +30 -23
- package/dist/Modal.mjs.map +1 -0
- package/dist/{components/templates/page-header.d.mts → PageHeader.d.mts} +3 -3
- package/dist/PageHeader.d.mts.map +1 -0
- package/dist/{components/templates/page-header.mjs → PageHeader.mjs} +5 -5
- package/dist/PageHeader.mjs.map +1 -0
- package/dist/Pagination.d.mts +2 -2
- package/dist/Pagination.d.mts.map +1 -1
- package/dist/Pagination.mjs +3 -3
- package/dist/Popconfirm.d.mts +33 -0
- package/dist/Popconfirm.d.mts.map +1 -0
- package/dist/Popconfirm.mjs +119 -0
- package/dist/Popconfirm.mjs.map +1 -0
- package/dist/{components/atoms/popover.d.mts → Popover.d.mts} +3 -3
- package/dist/Popover.d.mts.map +1 -0
- package/dist/{components/atoms/popover.mjs → Popover.mjs} +4 -4
- package/dist/Popover.mjs.map +1 -0
- package/dist/{components/atoms/progress.d.mts → Progress.d.mts} +3 -3
- package/dist/Progress.d.mts.map +1 -0
- package/dist/{components/atoms/progress.mjs → Progress.mjs} +3 -3
- package/dist/Progress.mjs.map +1 -0
- package/dist/Radio.d.mts +10 -0
- package/dist/Radio.d.mts.map +1 -0
- package/dist/Radio.mjs +9 -0
- package/dist/Radio.mjs.map +1 -0
- package/dist/Rate.d.mts +27 -0
- package/dist/Rate.d.mts.map +1 -0
- package/dist/Rate.mjs +81 -0
- package/dist/Rate.mjs.map +1 -0
- package/dist/{components/templates/result.d.mts → Result.d.mts} +3 -3
- package/dist/Result.d.mts.map +1 -0
- package/dist/{components/templates/result.mjs → Result.mjs} +3 -3
- package/dist/Result.mjs.map +1 -0
- package/dist/Reveals.d.mts.map +1 -1
- package/dist/RichTextEditor.d.mts +3 -0
- package/dist/RichTextEditor.mjs +1 -0
- package/dist/ScrollArea.d.mts +8 -0
- package/dist/ScrollArea.d.mts.map +1 -0
- package/dist/ScrollArea.mjs +11 -0
- package/dist/ScrollArea.mjs.map +1 -0
- package/dist/Segmented.d.mts +3 -3
- package/dist/Segmented.d.mts.map +1 -1
- package/dist/{components/atoms/select.d.mts → Select.d.mts} +7 -7
- package/dist/Select.d.mts.map +1 -0
- package/dist/{components/atoms/select.mjs → Select.mjs} +5 -5
- package/dist/Select.mjs.map +1 -0
- package/dist/Skeleton.d.mts +12 -0
- package/dist/Skeleton.d.mts.map +1 -0
- package/dist/Skeleton.mjs +11 -0
- package/dist/Skeleton.mjs.map +1 -0
- package/dist/Slider.d.mts +2 -0
- package/dist/{components/atoms/slider/index.mjs → Slider.mjs} +2 -2
- package/dist/Slider.mjs.map +1 -0
- package/dist/Space.d.mts +5 -4
- package/dist/Space.d.mts.map +1 -1
- package/dist/Space.mjs +13 -4
- package/dist/Space.mjs.map +1 -1
- package/dist/{components/atoms/spin.d.mts → Spin.d.mts} +3 -3
- package/dist/Spin.d.mts.map +1 -0
- package/dist/{components/atoms/spin.mjs → Spin.mjs} +4 -4
- package/dist/Spin.mjs.map +1 -0
- package/dist/Splitter.d.mts +10 -0
- package/dist/Splitter.d.mts.map +1 -0
- package/dist/Splitter.mjs +9 -0
- package/dist/Splitter.mjs.map +1 -0
- package/dist/Statistic.d.mts +22 -0
- package/dist/Statistic.d.mts.map +1 -0
- package/dist/Statistic.mjs +53 -0
- package/dist/Statistic.mjs.map +1 -0
- package/dist/Steps.d.mts +3 -3
- package/dist/Steps.d.mts.map +1 -1
- package/dist/Steps.mjs +1 -1
- package/dist/Swiper.d.mts +10 -0
- package/dist/Swiper.d.mts.map +1 -0
- package/dist/Swiper.mjs +9 -0
- package/dist/Swiper.mjs.map +1 -0
- package/dist/{components/atoms/switch.d.mts → Switch.d.mts} +4 -4
- package/dist/Switch.d.mts.map +1 -0
- package/dist/{components/atoms/switch.mjs → Switch.mjs} +4 -4
- package/dist/Switch.mjs.map +1 -0
- package/dist/Table.d.mts +4 -4
- package/dist/Table.d.mts.map +1 -1
- package/dist/Table.mjs +2 -2
- package/dist/Table.mjs.map +1 -1
- package/dist/{components/molecules/tabs.d.mts → Tabs.d.mts} +6 -6
- package/dist/Tabs.d.mts.map +1 -0
- package/dist/{components/molecules/tabs.mjs → Tabs.mjs} +3 -3
- package/dist/Tabs.mjs.map +1 -0
- package/dist/Tag.d.mts +3 -3
- package/dist/Tag.d.mts.map +1 -1
- package/dist/TimePicker.d.mts +26 -0
- package/dist/TimePicker.d.mts.map +1 -0
- package/dist/TimePicker.mjs +77 -0
- package/dist/TimePicker.mjs.map +1 -0
- package/dist/Timeline.d.mts +35 -0
- package/dist/Timeline.d.mts.map +1 -0
- package/dist/Timeline.mjs +59 -0
- package/dist/Timeline.mjs.map +1 -0
- package/dist/{components/organisms/toast.d.mts → Toast.d.mts} +14 -4
- package/dist/Toast.d.mts.map +1 -0
- package/dist/Toast.mjs +198 -0
- package/dist/Toast.mjs.map +1 -0
- package/dist/ToggleGroup.d.mts +28 -0
- package/dist/ToggleGroup.d.mts.map +1 -0
- package/dist/ToggleGroup.mjs +58 -0
- package/dist/ToggleGroup.mjs.map +1 -0
- package/dist/{components/atoms/tooltip.d.mts → Tooltip.d.mts} +3 -3
- package/dist/Tooltip.d.mts.map +1 -0
- package/dist/{components/atoms/tooltip.mjs → Tooltip.mjs} +2 -2
- package/dist/Tooltip.mjs.map +1 -0
- package/dist/Tour.d.mts +37 -0
- package/dist/Tour.d.mts.map +1 -0
- package/dist/Tour.mjs +175 -0
- package/dist/Tour.mjs.map +1 -0
- package/dist/Transfer.d.mts +36 -0
- package/dist/Transfer.d.mts.map +1 -0
- package/dist/Transfer.mjs +147 -0
- package/dist/Transfer.mjs.map +1 -0
- package/dist/Tree.d.mts +62 -0
- package/dist/Tree.d.mts.map +1 -0
- package/dist/Tree.mjs +462 -0
- package/dist/Tree.mjs.map +1 -0
- package/dist/TreeSelect.d.mts +34 -0
- package/dist/TreeSelect.d.mts.map +1 -0
- package/dist/TreeSelect.mjs +135 -0
- package/dist/TreeSelect.mjs.map +1 -0
- package/dist/Typography.d.mts.map +1 -1
- package/dist/{components/molecules/upload.d.mts → Upload.d.mts} +4 -4
- package/dist/Upload.d.mts.map +1 -0
- package/dist/{components/molecules/upload.mjs → Upload.mjs} +7 -7
- package/dist/Upload.mjs.map +1 -0
- package/dist/components/atoms/checkbox/checkbox.d.mts +5 -3
- package/dist/components/atoms/checkbox/checkbox.d.mts.map +1 -1
- package/dist/components/atoms/checkbox/checkbox.mjs +8 -4
- package/dist/components/atoms/checkbox/checkbox.mjs.map +1 -1
- package/dist/components/atoms/checkbox/group.d.mts +2 -2
- package/dist/components/atoms/checkbox/group.d.mts.map +1 -1
- package/dist/components/atoms/float-button/back-top.d.mts +2 -2
- package/dist/components/atoms/float-button/back-top.d.mts.map +1 -1
- package/dist/components/atoms/float-button/back-top.mjs +1 -1
- package/dist/components/atoms/float-button/float-button.d.mts +2 -2
- package/dist/components/atoms/float-button/float-button.d.mts.map +1 -1
- package/dist/components/atoms/index.d.mts +37 -23
- package/dist/components/atoms/input/input.d.mts +2 -1
- package/dist/components/atoms/input/input.d.mts.map +1 -1
- package/dist/components/atoms/input/input.mjs.map +1 -1
- package/dist/components/atoms/input/number.d.mts +2 -2
- package/dist/components/atoms/input/number.d.mts.map +1 -1
- package/dist/components/atoms/input/number.mjs +1 -1
- package/dist/components/atoms/input/otp.d.mts +26 -0
- package/dist/components/atoms/input/otp.d.mts.map +1 -0
- package/dist/components/atoms/input/otp.mjs +52 -0
- package/dist/components/atoms/input/otp.mjs.map +1 -0
- package/dist/components/atoms/input/search.d.mts +2 -2
- package/dist/components/atoms/input/search.d.mts.map +1 -1
- package/dist/components/atoms/input/search.mjs +2 -2
- package/dist/components/atoms/mentions-token.mjs +31 -0
- package/dist/components/atoms/mentions-token.mjs.map +1 -0
- package/dist/components/atoms/option-group.d.mts +4 -5
- package/dist/components/atoms/option-group.d.mts.map +1 -1
- package/dist/components/atoms/radio/group.d.mts +2 -2
- package/dist/components/atoms/radio/group.d.mts.map +1 -1
- package/dist/components/atoms/radio/group.mjs +1 -1
- package/dist/components/atoms/radio/radio.d.mts +2 -2
- package/dist/components/atoms/radio/radio.d.mts.map +1 -1
- package/dist/components/atoms/radio/radio.mjs +1 -1
- package/dist/components/atoms/rich-text-editor/rich-text-editor.d.mts +2 -2
- package/dist/components/atoms/rich-text-editor/rich-text-editor.d.mts.map +1 -1
- package/dist/components/atoms/rich-text-editor/toolbar-presets.mjs +5 -5
- package/dist/components/atoms/rich-text-editor/types.d.mts +2 -3
- package/dist/components/atoms/rich-text-editor/types.d.mts.map +1 -1
- package/dist/components/atoms/select-multiple.d.mts +2 -3
- package/dist/components/atoms/select-multiple.d.mts.map +1 -1
- package/dist/components/atoms/select-multiple.mjs +5 -4
- package/dist/components/atoms/select-multiple.mjs.map +1 -1
- package/dist/components/atoms/select-searchable-options.d.mts +3 -4
- package/dist/components/atoms/select-searchable-options.d.mts.map +1 -1
- package/dist/components/atoms/select-searchable.d.mts +2 -3
- package/dist/components/atoms/select-searchable.d.mts.map +1 -1
- package/dist/components/atoms/select-searchable.mjs +5 -4
- package/dist/components/atoms/select-searchable.mjs.map +1 -1
- package/dist/components/atoms/skeleton/button.d.mts.map +1 -1
- package/dist/components/atoms/skeleton/node.d.mts.map +1 -1
- package/dist/components/atoms/skeleton/skeleton.d.mts +2 -2
- package/dist/components/atoms/skeleton/skeleton.d.mts.map +1 -1
- package/dist/components/atoms/slider/slider.d.mts +3 -3
- package/dist/components/atoms/slider/slider.d.mts.map +1 -1
- package/dist/components/atoms/typography/link.d.mts +2 -2
- package/dist/components/atoms/typography/link.d.mts.map +1 -1
- package/dist/components/atoms/typography/paragraph.d.mts +2 -2
- package/dist/components/atoms/typography/paragraph.d.mts.map +1 -1
- package/dist/components/atoms/typography/text.d.mts +2 -2
- package/dist/components/atoms/typography/text.d.mts.map +1 -1
- package/dist/components/atoms/typography/title.d.mts +2 -2
- package/dist/components/atoms/typography/title.d.mts.map +1 -1
- package/dist/components/atoms/typography/typography.d.mts +2 -2
- package/dist/components/atoms/typography/typography.d.mts.map +1 -1
- package/dist/components/molecules/index.d.mts +25 -16
- package/dist/components/molecules/marquees/item.d.mts +4 -4
- package/dist/components/molecules/marquees/item.d.mts.map +1 -1
- package/dist/components/molecules/marquees/item.mjs +5 -5
- package/dist/components/molecules/marquees/item.mjs.map +1 -1
- package/dist/components/molecules/marquees/marquees.d.mts +2 -2
- package/dist/components/molecules/marquees/marquees.d.mts.map +1 -1
- package/dist/components/molecules/marquees/marquees.mjs +4 -5
- package/dist/components/molecules/marquees/marquees.mjs.map +1 -1
- package/dist/components/molecules/menu/item/item.mjs +1 -1
- package/dist/components/molecules/menu/menu.d.mts +9 -9
- package/dist/components/molecules/menu/menu.d.mts.map +1 -1
- package/dist/components/molecules/reveals/item.d.mts +2 -2
- package/dist/components/molecules/reveals/item.d.mts.map +1 -1
- package/dist/components/molecules/reveals/reveals.d.mts +5 -5
- package/dist/components/molecules/reveals/reveals.d.mts.map +1 -1
- package/dist/components/molecules/splitter/panel.d.mts +3 -3
- package/dist/components/molecules/splitter/panel.d.mts.map +1 -1
- package/dist/components/molecules/splitter/splitter.d.mts +3 -3
- package/dist/components/molecules/splitter/splitter.d.mts.map +1 -1
- package/dist/components/organisms/form/context.d.mts +4 -0
- package/dist/components/organisms/form/context.d.mts.map +1 -0
- package/dist/components/organisms/form/context.mjs +9 -0
- package/dist/components/organisms/form/context.mjs.map +1 -0
- package/dist/components/organisms/form/control.d.mts +11 -0
- package/dist/components/organisms/form/control.d.mts.map +1 -0
- package/dist/components/organisms/form/control.mjs +19 -0
- package/dist/components/organisms/form/control.mjs.map +1 -0
- package/dist/components/organisms/form/field.d.mts +25 -0
- package/dist/components/organisms/form/field.d.mts.map +1 -0
- package/dist/components/organisms/form/field.mjs +54 -0
- package/dist/components/organisms/form/field.mjs.map +1 -0
- package/dist/components/organisms/form/form.d.mts +14 -0
- package/dist/components/organisms/form/form.d.mts.map +1 -0
- package/dist/components/organisms/form/form.mjs +23 -0
- package/dist/components/organisms/form/form.mjs.map +1 -0
- package/dist/components/organisms/imperative-stack.mjs +16 -1
- package/dist/components/organisms/imperative-stack.mjs.map +1 -1
- package/dist/components/organisms/index.d.mts +17 -9
- package/dist/components/organisms/list/list.d.mts +3 -3
- package/dist/components/organisms/list/list.d.mts.map +1 -1
- package/dist/components/organisms/list/list.mjs +1 -1
- package/dist/components/organisms/swiper/swiper.d.mts +8 -2
- package/dist/components/organisms/swiper/swiper.d.mts.map +1 -1
- package/dist/components/organisms/swiper/swiper.mjs +1 -1
- package/dist/components/templates/grid/col.d.mts +2 -2
- package/dist/components/templates/grid/col.d.mts.map +1 -1
- package/dist/components/templates/grid/row.d.mts +2 -2
- package/dist/components/templates/grid/row.d.mts.map +1 -1
- package/dist/components/templates/index.d.mts +11 -12
- package/dist/components/templates/layout/content.d.mts +2 -2
- package/dist/components/templates/layout/content.d.mts.map +1 -1
- package/dist/components/templates/layout/footer.d.mts +2 -2
- package/dist/components/templates/layout/footer.d.mts.map +1 -1
- package/dist/components/templates/layout/header.d.mts +2 -2
- package/dist/components/templates/layout/header.d.mts.map +1 -1
- package/dist/components/templates/layout/layout.d.mts +2 -2
- package/dist/components/templates/layout/layout.d.mts.map +1 -1
- package/dist/components/templates/layout/sider.d.mts +2 -2
- package/dist/components/templates/layout/sider.d.mts.map +1 -1
- package/dist/components/templates/layout/sider.mjs +5 -7
- package/dist/components/templates/layout/sider.mjs.map +1 -1
- package/dist/core/accordion.mjs +1 -1
- package/dist/core/autocomplete.d.mts +2 -0
- package/dist/core/autocomplete.mjs +48 -0
- package/dist/core/autocomplete.mjs.map +1 -0
- package/dist/core/badge.d.mts +5 -3
- package/dist/core/badge.d.mts.map +1 -1
- package/dist/core/button.d.mts +5 -3
- package/dist/core/button.d.mts.map +1 -1
- package/dist/core/calendar.d.mts +13 -3
- package/dist/core/calendar.d.mts.map +1 -0
- package/dist/core/calendar.mjs +1 -1
- package/dist/core/checkbox.mjs +11 -8
- package/dist/core/checkbox.mjs.map +1 -1
- package/dist/core/combobox.d.mts +26 -4
- package/dist/core/combobox.d.mts.map +1 -1
- package/dist/core/combobox.mjs +2 -2
- package/dist/core/combobox.mjs.map +1 -1
- package/dist/core/dialog.mjs +2 -2
- package/dist/core/dialog.mjs.map +1 -1
- package/dist/core/form.d.mts +8 -0
- package/dist/core/form.d.mts.map +1 -0
- package/dist/core/form.mjs +3 -0
- package/dist/core/index.d.mts +13 -9
- package/dist/core/popover.mjs +10 -2
- package/dist/core/popover.mjs.map +1 -1
- package/dist/core/radio-group.mjs +1 -1
- package/dist/core/resizable.d.mts +7 -2
- package/dist/core/resizable.d.mts.map +1 -1
- package/dist/core/resizable.mjs +1 -1
- package/dist/core/scroll-area.d.mts +20 -0
- package/dist/core/scroll-area.d.mts.map +1 -0
- package/dist/core/scroll-area.mjs +57 -0
- package/dist/core/scroll-area.mjs.map +1 -0
- package/dist/core/select.d.mts +24 -2
- package/dist/core/select.d.mts.map +1 -1
- package/dist/core/select.mjs +1 -1
- package/dist/core/separator.d.mts +13 -2
- package/dist/core/separator.d.mts.map +1 -0
- package/dist/core/tabs.d.mts +16 -2
- package/dist/core/tabs.d.mts.map +1 -1
- package/dist/index.d.mts +87 -57
- package/dist/index.mjs +53 -33
- package/dist/lib/colors.d.mts +2 -3
- package/dist/lib/colors.d.mts.map +1 -1
- package/dist/providers/config/context.d.mts +2 -3
- package/dist/providers/config/context.d.mts.map +1 -1
- package/dist/providers/config/context.mjs +3 -1
- package/dist/providers/config/context.mjs.map +1 -1
- package/dist/providers/config/registry.d.mts +2 -3
- package/dist/providers/config/registry.d.mts.map +1 -1
- package/dist/providers/config/types.d.mts +8 -7
- package/dist/providers/config/types.d.mts.map +1 -1
- package/dist/style.css +710 -332
- package/dist/utils.d.mts +2 -3
- package/dist/utils.d.mts.map +1 -1
- package/package.json +277 -26
- package/dist/components/atoms/checkbox/index.d.mts +0 -10
- package/dist/components/atoms/checkbox/index.d.mts.map +0 -1
- package/dist/components/atoms/checkbox/index.mjs +0 -9
- package/dist/components/atoms/checkbox/index.mjs.map +0 -1
- package/dist/components/atoms/color-picker.d.mts.map +0 -1
- package/dist/components/atoms/color-picker.mjs.map +0 -1
- package/dist/components/atoms/date-picker.d.mts.map +0 -1
- package/dist/components/atoms/date-picker.mjs +0 -44
- package/dist/components/atoms/date-picker.mjs.map +0 -1
- package/dist/components/atoms/float-button/index.d.mts +0 -10
- package/dist/components/atoms/float-button/index.d.mts.map +0 -1
- package/dist/components/atoms/float-button/index.mjs +0 -9
- package/dist/components/atoms/float-button/index.mjs.map +0 -1
- package/dist/components/atoms/input/index.d.mts +0 -14
- package/dist/components/atoms/input/index.d.mts.map +0 -1
- package/dist/components/atoms/input/index.mjs +0 -13
- package/dist/components/atoms/input/index.mjs.map +0 -1
- package/dist/components/atoms/popover.d.mts.map +0 -1
- package/dist/components/atoms/popover.mjs.map +0 -1
- package/dist/components/atoms/progress.d.mts.map +0 -1
- package/dist/components/atoms/progress.mjs.map +0 -1
- package/dist/components/atoms/radio/index.d.mts +0 -10
- package/dist/components/atoms/radio/index.d.mts.map +0 -1
- package/dist/components/atoms/radio/index.mjs +0 -9
- package/dist/components/atoms/radio/index.mjs.map +0 -1
- package/dist/components/atoms/rich-text-editor/index.d.mts +0 -3
- package/dist/components/atoms/select.d.mts.map +0 -1
- package/dist/components/atoms/select.mjs.map +0 -1
- package/dist/components/atoms/skeleton/index.d.mts +0 -12
- package/dist/components/atoms/skeleton/index.d.mts.map +0 -1
- package/dist/components/atoms/skeleton/index.mjs +0 -11
- package/dist/components/atoms/skeleton/index.mjs.map +0 -1
- package/dist/components/atoms/slider/index.mjs.map +0 -1
- package/dist/components/atoms/spin.d.mts.map +0 -1
- package/dist/components/atoms/spin.mjs.map +0 -1
- package/dist/components/atoms/switch.d.mts.map +0 -1
- package/dist/components/atoms/switch.mjs.map +0 -1
- package/dist/components/atoms/tooltip.d.mts.map +0 -1
- package/dist/components/atoms/tooltip.mjs.map +0 -1
- package/dist/components/molecules/collapse.d.mts.map +0 -1
- package/dist/components/molecules/collapse.mjs.map +0 -1
- package/dist/components/molecules/dropdown.d.mts.map +0 -1
- package/dist/components/molecules/dropdown.mjs.map +0 -1
- package/dist/components/molecules/marquees/index.d.mts +0 -10
- package/dist/components/molecules/marquees/index.d.mts.map +0 -1
- package/dist/components/molecules/marquees/index.mjs +0 -9
- package/dist/components/molecules/marquees/index.mjs.map +0 -1
- package/dist/components/molecules/marquees/use-pause-on-hover.mjs +0 -26
- package/dist/components/molecules/marquees/use-pause-on-hover.mjs.map +0 -1
- package/dist/components/molecules/splitter/index.d.mts +0 -10
- package/dist/components/molecules/splitter/index.d.mts.map +0 -1
- package/dist/components/molecules/splitter/index.mjs +0 -9
- package/dist/components/molecules/splitter/index.mjs.map +0 -1
- package/dist/components/molecules/tabs.d.mts.map +0 -1
- package/dist/components/molecules/tabs.mjs.map +0 -1
- package/dist/components/molecules/upload.d.mts.map +0 -1
- package/dist/components/molecules/upload.mjs.map +0 -1
- package/dist/components/organisms/drawer.d.mts.map +0 -1
- package/dist/components/organisms/drawer.mjs.map +0 -1
- package/dist/components/organisms/list/index.d.mts.map +0 -1
- package/dist/components/organisms/list/index.mjs +0 -9
- package/dist/components/organisms/list/index.mjs.map +0 -1
- package/dist/components/organisms/modal.d.mts.map +0 -1
- package/dist/components/organisms/modal.mjs.map +0 -1
- package/dist/components/organisms/swiper/index.d.mts +0 -10
- package/dist/components/organisms/swiper/index.d.mts.map +0 -1
- package/dist/components/organisms/swiper/index.mjs +0 -9
- package/dist/components/organisms/swiper/index.mjs.map +0 -1
- package/dist/components/organisms/toast.d.mts.map +0 -1
- package/dist/components/organisms/toast.mjs +0 -126
- package/dist/components/organisms/toast.mjs.map +0 -1
- package/dist/components/templates/container.d.mts.map +0 -1
- package/dist/components/templates/container.mjs.map +0 -1
- package/dist/components/templates/empty.d.mts.map +0 -1
- package/dist/components/templates/empty.mjs.map +0 -1
- package/dist/components/templates/page-header.d.mts.map +0 -1
- package/dist/components/templates/page-header.mjs.map +0 -1
- package/dist/components/templates/result.d.mts.map +0 -1
- package/dist/components/templates/result.mjs.map +0 -1
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cn } from "./utils.mjs";
|
|
3
|
+
import { useConfig } from "./providers/config/context.mjs";
|
|
4
|
+
import { OVERLAY_LAYER } from "./lib/z-layers.mjs";
|
|
5
|
+
import Button from "./Button.mjs";
|
|
6
|
+
import * as React$1 from "react";
|
|
7
|
+
import { DirectionProvider } from "@base-ui/react/direction-provider";
|
|
8
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
|
+
import { ContextMenu as ContextMenu$1 } from "@base-ui/react/context-menu";
|
|
10
|
+
import { Menu } from "@base-ui/react/menu";
|
|
11
|
+
//#region src/components/molecules/context-menu.tsx
|
|
12
|
+
const ContextMenu = ({ children, items, onSelect, actionLabel, triggerProps, classNames, disabled = false, open, defaultOpen = false, onOpenChange, ...props }) => {
|
|
13
|
+
const { getContainer, direction } = useConfig();
|
|
14
|
+
const triggerRef = React$1.useRef(null);
|
|
15
|
+
const actionRef = React$1.useRef(null);
|
|
16
|
+
const [isOpen, setIsOpen] = React$1.useState(defaultOpen);
|
|
17
|
+
const [source, setSource] = React$1.useState("context");
|
|
18
|
+
const hasActions = items.some((item) => item.type !== "separator");
|
|
19
|
+
const isInactive = disabled || !hasActions;
|
|
20
|
+
const resolvedOpen = open ?? isOpen;
|
|
21
|
+
const resolvedDirection = triggerProps?.dir === "rtl" || triggerProps?.dir === "ltr" ? triggerProps.dir : direction;
|
|
22
|
+
const handleOpenChange = (nextOpen, details, nextSource) => {
|
|
23
|
+
onOpenChange?.(nextOpen, details);
|
|
24
|
+
if (details.isCanceled) return;
|
|
25
|
+
if (nextOpen) setSource(nextSource);
|
|
26
|
+
setIsOpen(nextOpen);
|
|
27
|
+
};
|
|
28
|
+
const popup = /* @__PURE__ */ jsx(Menu.Portal, {
|
|
29
|
+
container: getContainer(),
|
|
30
|
+
children: /* @__PURE__ */ jsx(Menu.Positioner, {
|
|
31
|
+
sideOffset: 4,
|
|
32
|
+
className: OVERLAY_LAYER,
|
|
33
|
+
children: /* @__PURE__ */ jsx(Menu.Popup, {
|
|
34
|
+
"data-slot": "context-menu",
|
|
35
|
+
dir: resolvedDirection,
|
|
36
|
+
finalFocus: source === "context" ? triggerRef : actionRef,
|
|
37
|
+
className: cn(`bg-popover text-popover-foreground border-border
|
|
38
|
+
max-h-[var(--available-height)] max-w-[var(--available-width)]
|
|
39
|
+
min-w-40 overflow-auto rounded-md border p-1 shadow-md outline-none`, classNames?.popup),
|
|
40
|
+
children: items.map((item) => item.type === "separator" ? /* @__PURE__ */ jsx(Menu.Separator, { className: cn("bg-border my-1 h-px", classNames?.separator) }, item.key) : /* @__PURE__ */ jsx(Menu.Item, {
|
|
41
|
+
disabled: item.disabled,
|
|
42
|
+
className: cn(`data-highlighted:bg-accent
|
|
43
|
+
data-highlighted:text-accent-foreground cursor-default
|
|
44
|
+
rounded-sm px-3 py-2 text-sm break-words outline-none
|
|
45
|
+
data-disabled:opacity-50`, classNames?.item),
|
|
46
|
+
onClick: () => {
|
|
47
|
+
item.onSelect?.();
|
|
48
|
+
onSelect?.(item.key, item);
|
|
49
|
+
},
|
|
50
|
+
children: item.label
|
|
51
|
+
}, item.key))
|
|
52
|
+
})
|
|
53
|
+
})
|
|
54
|
+
});
|
|
55
|
+
return /* @__PURE__ */ jsxs(DirectionProvider, {
|
|
56
|
+
direction: resolvedDirection,
|
|
57
|
+
children: [/* @__PURE__ */ jsxs(ContextMenu$1.Root, {
|
|
58
|
+
...props,
|
|
59
|
+
actionsRef: source === "context" ? props.actionsRef : void 0,
|
|
60
|
+
disabled: isInactive,
|
|
61
|
+
open: resolvedOpen && source === "context",
|
|
62
|
+
onOpenChange: (nextOpen, details) => handleOpenChange(nextOpen, details, "context"),
|
|
63
|
+
children: [/* @__PURE__ */ jsx(ContextMenu$1.Trigger, {
|
|
64
|
+
...triggerProps,
|
|
65
|
+
ref: triggerRef,
|
|
66
|
+
"data-slot": "context-menu-trigger",
|
|
67
|
+
dir: triggerProps?.dir ?? resolvedDirection,
|
|
68
|
+
tabIndex: actionLabel ? -1 : triggerProps?.tabIndex ?? 0,
|
|
69
|
+
className: cn("focus-visible:ring-ring outline-none focus-visible:ring-2", classNames?.trigger, triggerProps?.className),
|
|
70
|
+
children
|
|
71
|
+
}), popup]
|
|
72
|
+
}), actionLabel && /* @__PURE__ */ jsxs(Menu.Root, {
|
|
73
|
+
...props,
|
|
74
|
+
actionsRef: source === "action" ? props.actionsRef : void 0,
|
|
75
|
+
disabled: isInactive,
|
|
76
|
+
open: resolvedOpen && source === "action",
|
|
77
|
+
onOpenChange: (nextOpen, details) => handleOpenChange(nextOpen, details, "action"),
|
|
78
|
+
children: [/* @__PURE__ */ jsx(Menu.Trigger, {
|
|
79
|
+
ref: actionRef,
|
|
80
|
+
render: /* @__PURE__ */ jsx(Button, {
|
|
81
|
+
size: "small",
|
|
82
|
+
variant: "text"
|
|
83
|
+
}),
|
|
84
|
+
children: actionLabel
|
|
85
|
+
}), popup]
|
|
86
|
+
})]
|
|
87
|
+
});
|
|
88
|
+
};
|
|
89
|
+
//#endregion
|
|
90
|
+
export { ContextMenu as default };
|
|
91
|
+
|
|
92
|
+
//# sourceMappingURL=ContextMenu.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContextMenu.mjs","names":["React","BaseMenu","BaseContextMenu"],"sources":["../src/components/molecules/context-menu.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\n\nimport { ContextMenu as BaseContextMenu } from '@base-ui/react/context-menu';\nimport { DirectionProvider } from '@base-ui/react/direction-provider';\nimport { Menu as BaseMenu } from '@base-ui/react/menu';\n\nimport { useConfig } from '@repo/ui/providers';\nimport { cn } from '@repo/ui/utils';\n\nimport { OVERLAY_LAYER } from '../../lib/z-layers';\nimport Button from '../atoms/button';\n\nexport type Item =\n | {\n key: React.Key;\n label: React.ReactNode;\n disabled?: boolean;\n type?: 'action';\n onSelect?: () => void;\n }\n | { key: React.Key; type: 'separator' };\n\nexport interface Props extends Omit<\n React.ComponentProps<typeof BaseContextMenu.Root>,\n 'children'\n> {\n children: React.ReactNode;\n items: Item[];\n onSelect?: (\n key: React.Key,\n item: Extract<Item, { label: React.ReactNode }>,\n ) => void;\n /** Visible action button for touch and discoverability; omit to hide it. */\n actionLabel?: string;\n triggerProps?: Omit<\n React.ComponentProps<typeof BaseContextMenu.Trigger>,\n 'children' | 'render' | 'ref'\n >;\n classNames?: {\n trigger?: string;\n popup?: string;\n item?: string;\n separator?: string;\n };\n}\n\nconst ContextMenu = ({\n children,\n items,\n onSelect,\n actionLabel,\n triggerProps,\n classNames,\n disabled = false,\n open,\n defaultOpen = false,\n onOpenChange,\n ...props\n}: Props) => {\n const { getContainer, direction } = useConfig();\n const triggerRef = React.useRef<HTMLDivElement>(null);\n const actionRef = React.useRef<HTMLButtonElement>(null);\n const [isOpen, setIsOpen] = React.useState(defaultOpen);\n const [source, setSource] = React.useState<'context' | 'action'>('context');\n const hasActions = items.some(item => item.type !== 'separator');\n const isInactive = disabled || !hasActions;\n const resolvedOpen = open ?? isOpen;\n const resolvedDirection =\n triggerProps?.dir === 'rtl' || triggerProps?.dir === 'ltr'\n ? triggerProps.dir\n : direction;\n const handleOpenChange = (\n nextOpen: boolean,\n details: Parameters<NonNullable<Props['onOpenChange']>>[1],\n nextSource: typeof source,\n ) => {\n onOpenChange?.(nextOpen, details);\n\n if (details.isCanceled) {\n return;\n }\n\n if (nextOpen) {\n setSource(nextSource);\n }\n\n setIsOpen(nextOpen);\n };\n\n const popup = (\n <BaseMenu.Portal container={getContainer()}>\n <BaseMenu.Positioner sideOffset={4} className={OVERLAY_LAYER}>\n <BaseMenu.Popup\n data-slot=\"context-menu\"\n dir={resolvedDirection}\n finalFocus={source === 'context' ? triggerRef : actionRef}\n className={cn(\n `bg-popover text-popover-foreground border-border\n max-h-[var(--available-height)] max-w-[var(--available-width)]\n min-w-40 overflow-auto rounded-md border p-1 shadow-md outline-none`,\n classNames?.popup,\n //\n )}\n >\n {items.map(item =>\n item.type === 'separator' ? (\n <BaseMenu.Separator\n key={item.key}\n className={cn(\n 'bg-border my-1 h-px',\n classNames?.separator,\n //\n )}\n />\n ) : (\n <BaseMenu.Item\n key={item.key}\n disabled={item.disabled}\n className={cn(\n `data-highlighted:bg-accent\n data-highlighted:text-accent-foreground cursor-default\n rounded-sm px-3 py-2 text-sm break-words outline-none\n data-disabled:opacity-50`,\n classNames?.item,\n //\n )}\n onClick={() => {\n item.onSelect?.();\n onSelect?.(item.key, item);\n }}\n >\n {item.label}\n </BaseMenu.Item>\n ),\n )}\n </BaseMenu.Popup>\n </BaseMenu.Positioner>\n </BaseMenu.Portal>\n );\n\n return (\n <DirectionProvider direction={resolvedDirection}>\n <BaseContextMenu.Root\n {...props}\n actionsRef={source === 'context' ? props.actionsRef : undefined}\n disabled={isInactive}\n open={resolvedOpen && source === 'context'}\n onOpenChange={(nextOpen, details) =>\n handleOpenChange(nextOpen, details, 'context')\n }\n >\n <BaseContextMenu.Trigger\n {...triggerProps}\n ref={triggerRef}\n data-slot=\"context-menu-trigger\"\n dir={triggerProps?.dir ?? resolvedDirection}\n tabIndex={actionLabel ? -1 : (triggerProps?.tabIndex ?? 0)}\n className={cn(\n 'focus-visible:ring-ring outline-none focus-visible:ring-2',\n classNames?.trigger,\n triggerProps?.className,\n //\n )}\n >\n {children}\n </BaseContextMenu.Trigger>\n {popup}\n </BaseContextMenu.Root>\n {actionLabel && (\n <BaseMenu.Root\n {...props}\n actionsRef={source === 'action' ? props.actionsRef : undefined}\n disabled={isInactive}\n open={resolvedOpen && source === 'action'}\n onOpenChange={(nextOpen, details) =>\n handleOpenChange(nextOpen, details, 'action')\n }\n >\n <BaseMenu.Trigger\n ref={actionRef}\n render={<Button size=\"small\" variant=\"text\" />}\n >\n {actionLabel}\n </BaseMenu.Trigger>\n {popup}\n </BaseMenu.Root>\n )}\n </DirectionProvider>\n );\n};\nexport default ContextMenu;\n"],"mappings":";;;;;;;;;;;AAgDA,MAAM,eAAe,EACnB,UACA,OACA,UACA,aACA,cACA,YACA,WAAW,OACX,MACA,cAAc,OACd,cACA,GAAG,YACQ;CACX,MAAM,EAAE,cAAc,cAAc,UAAU;CAC9C,MAAM,aAAaA,QAAM,OAAuB,IAAI;CACpD,MAAM,YAAYA,QAAM,OAA0B,IAAI;CACtD,MAAM,CAAC,QAAQ,aAAaA,QAAM,SAAS,WAAW;CACtD,MAAM,CAAC,QAAQ,aAAaA,QAAM,SAA+B,SAAS;CAC1E,MAAM,aAAa,MAAM,MAAK,SAAQ,KAAK,SAAS,WAAW;CAC/D,MAAM,aAAa,YAAY,CAAC;CAChC,MAAM,eAAe,QAAQ;CAC7B,MAAM,oBACJ,cAAc,QAAQ,SAAS,cAAc,QAAQ,QACjD,aAAa,MACb;CACN,MAAM,oBACJ,UACA,SACA,eACG;EACH,eAAe,UAAU,OAAO;EAEhC,IAAI,QAAQ,YACV;EAGF,IAAI,UACF,UAAU,UAAU;EAGtB,UAAU,QAAQ;CACpB;CAEA,MAAM,QACJ,oBAACC,KAAS,QAAV;EAAiB,WAAW,aAAa;EACvC,UAAA,oBAACA,KAAS,YAAV;GAAqB,YAAY;GAAG,WAAW;GAC7C,UAAA,oBAACA,KAAS,OAAV;IACE,aAAU;IACV,KAAK;IACL,YAAY,WAAW,YAAY,aAAa;IAChD,WAAW,GACT;;kFAGA,YAAY,KAEd;IAEC,UAAA,MAAM,KAAI,SACT,KAAK,SAAS,cACZ,oBAACA,KAAS,WAAV,EAEE,WAAW,GACT,uBACA,YAAY,SAEd,EACD,GANM,KAAK,GAMX,IAED,oBAACA,KAAS,MAAV;KAEE,UAAU,KAAK;KACf,WAAW,GACT;;;+CAIA,YAAY,IAEd;KACA,eAAe;MACb,KAAK,WAAW;MAChB,WAAW,KAAK,KAAK,IAAI;KAC3B;KAEC,UAAA,KAAK;IACO,GAhBR,KAAK,GAgBG,CAEnB;GACc,CAAA;EACG,CAAA;CACN,CAAA;CAGnB,OACE,qBAAC,mBAAD;EAAmB,WAAW;EAA9B,UAAA,CACE,qBAACC,cAAgB,MAAjB;GACE,GAAI;GACJ,YAAY,WAAW,YAAY,MAAM,aAAa,KAAA;GACtD,UAAU;GACV,MAAM,gBAAgB,WAAW;GACjC,eAAe,UAAU,YACvB,iBAAiB,UAAU,SAAS,SAAS;GANjD,UAAA,CASE,oBAACA,cAAgB,SAAjB;IACE,GAAI;IACJ,KAAK;IACL,aAAU;IACV,KAAK,cAAc,OAAO;IAC1B,UAAU,cAAc,KAAM,cAAc,YAAY;IACxD,WAAW,GACT,6DACA,YAAY,SACZ,cAAc,SAEhB;IAEC;GACsB,CAAA,GACxB,KACmB;EACrB,CAAA,GAAA,eACC,qBAACD,KAAS,MAAV;GACE,GAAI;GACJ,YAAY,WAAW,WAAW,MAAM,aAAa,KAAA;GACrD,UAAU;GACV,MAAM,gBAAgB,WAAW;GACjC,eAAe,UAAU,YACvB,iBAAiB,UAAU,SAAS,QAAQ;GANhD,UAAA,CASE,oBAACA,KAAS,SAAV;IACE,KAAK;IACL,QAAQ,oBAAC,QAAD;KAAQ,MAAK;KAAQ,SAAQ;IAAQ,CAAA;IAE5C,UAAA;GACe,CAAA,GACjB,KACY;EAEA,CAAA,CAAA;;AAEvB"}
|
|
@@ -5,9 +5,13 @@ interface Props {
|
|
|
5
5
|
placeholder?: string;
|
|
6
6
|
className?: string;
|
|
7
7
|
disabled?: boolean;
|
|
8
|
+
/** Pick a local date and time together. Optionally configure the minute interval. */
|
|
9
|
+
showTime?: boolean | {
|
|
10
|
+
minuteStep?: number;
|
|
11
|
+
};
|
|
8
12
|
onChange?: (date: Date | undefined) => void;
|
|
9
13
|
}
|
|
10
|
-
declare const DatePicker: ({ defaultValue, value: _value, placeholder, className, disabled, onChange: _onChange }: Props) => import("react").JSX.Element;
|
|
14
|
+
declare const DatePicker: ({ defaultValue, value: _value, placeholder, className, disabled, showTime, onChange: _onChange }: Props) => import("react").JSX.Element;
|
|
11
15
|
//#endregion
|
|
12
16
|
export { type Props, DatePicker as default };
|
|
13
|
-
//# sourceMappingURL=
|
|
17
|
+
//# sourceMappingURL=DatePicker.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatePicker.d.mts","names":[],"sources":["../src/components/atoms/date-picker.tsx"],"mappings":";UAiBU;EACR,eAAe;EACf,QAAQ;EACR;EACA;EACA;;EAEA;IAAuB;;EACvB,YAAY,MAAM;;cAQd,eAAc,cAAA,OAAA,QAAA,aAAA,WAAA,UAAA,UAAA,UAAA,aAQjB,0BAAK,IAAA"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cn } from "./utils.mjs";
|
|
3
|
+
import { calendar_exports } from "./core/calendar.mjs";
|
|
4
|
+
import Button from "./Button.mjs";
|
|
5
|
+
import Popover from "./Popover.mjs";
|
|
6
|
+
import TimePicker from "./TimePicker.mjs";
|
|
7
|
+
import { useState } from "react";
|
|
8
|
+
import { useControllableState } from "@jbpark/use-hooks";
|
|
9
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
10
|
+
import { CalendarIcon } from "lucide-react";
|
|
11
|
+
import { format } from "date-fns";
|
|
12
|
+
//#region src/components/atoms/date-picker.tsx
|
|
13
|
+
const { Calendar } = calendar_exports;
|
|
14
|
+
const toTimeValue = (date) => date ? `${String(date.getHours()).padStart(2, "0")}:${String(date.getMinutes()).padStart(2, "0")}` : "00:00";
|
|
15
|
+
const DatePicker = ({ defaultValue, value: _value, placeholder = "Pick a date", className, disabled, showTime = false, onChange: _onChange = () => {} }) => {
|
|
16
|
+
const [value, onChange] = useControllableState({
|
|
17
|
+
value: _value,
|
|
18
|
+
defaultValue,
|
|
19
|
+
onChange: _onChange
|
|
20
|
+
});
|
|
21
|
+
const [open, setOpen] = useState(false);
|
|
22
|
+
const [draftDate, setDraftDate] = useState(value);
|
|
23
|
+
const [draftTime, setDraftTime] = useState(toTimeValue(value));
|
|
24
|
+
const minuteStep = typeof showTime === "object" ? showTime.minuteStep : void 0;
|
|
25
|
+
const handleOpenChange = (nextOpen) => {
|
|
26
|
+
if (nextOpen && showTime) {
|
|
27
|
+
setDraftDate(value);
|
|
28
|
+
setDraftTime(toTimeValue(value));
|
|
29
|
+
}
|
|
30
|
+
setOpen(nextOpen);
|
|
31
|
+
};
|
|
32
|
+
const handleConfirm = () => {
|
|
33
|
+
if (!draftDate || !draftTime) return;
|
|
34
|
+
const [hours, minutes] = draftTime.split(":").map(Number);
|
|
35
|
+
onChange(new Date(draftDate.getFullYear(), draftDate.getMonth(), draftDate.getDate(), hours, minutes));
|
|
36
|
+
setOpen(false);
|
|
37
|
+
};
|
|
38
|
+
return /* @__PURE__ */ jsx(Popover, {
|
|
39
|
+
placement: "bottomLeft",
|
|
40
|
+
open,
|
|
41
|
+
onOpenChange: handleOpenChange,
|
|
42
|
+
content: /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(Calendar, {
|
|
43
|
+
mode: "single",
|
|
44
|
+
selected: showTime ? draftDate : value,
|
|
45
|
+
onSelect: (date) => {
|
|
46
|
+
if (showTime) setDraftDate(date);
|
|
47
|
+
else {
|
|
48
|
+
onChange(date);
|
|
49
|
+
setOpen(false);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}), showTime && /* @__PURE__ */ jsxs("div", {
|
|
53
|
+
className: "border-border flex flex-col gap-3 border-t p-3",
|
|
54
|
+
children: [/* @__PURE__ */ jsx(TimePicker, {
|
|
55
|
+
label: "Time",
|
|
56
|
+
value: draftTime,
|
|
57
|
+
onChange: (time) => setDraftTime(time ?? ""),
|
|
58
|
+
minuteStep,
|
|
59
|
+
allowClear: false,
|
|
60
|
+
size: "small"
|
|
61
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
62
|
+
className: "flex justify-end gap-2",
|
|
63
|
+
children: [/* @__PURE__ */ jsx(Button, {
|
|
64
|
+
size: "small",
|
|
65
|
+
onClick: () => setOpen(false),
|
|
66
|
+
children: "Cancel"
|
|
67
|
+
}), /* @__PURE__ */ jsx(Button, {
|
|
68
|
+
type: "primary",
|
|
69
|
+
size: "small",
|
|
70
|
+
disabled: !draftDate || !draftTime,
|
|
71
|
+
onClick: handleConfirm,
|
|
72
|
+
children: "OK"
|
|
73
|
+
})]
|
|
74
|
+
})]
|
|
75
|
+
})] }),
|
|
76
|
+
children: /* @__PURE__ */ jsx(Button, {
|
|
77
|
+
icon: /* @__PURE__ */ jsx(CalendarIcon, {}),
|
|
78
|
+
"data-empty": !value,
|
|
79
|
+
disabled,
|
|
80
|
+
className: cn("w-full justify-start text-left font-normal", "data-[empty=true]:text-muted-foreground", className),
|
|
81
|
+
children: value ? format(value, showTime ? "PPP HH:mm" : "PPP") : placeholder
|
|
82
|
+
})
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
//#endregion
|
|
86
|
+
export { DatePicker as default };
|
|
87
|
+
|
|
88
|
+
//# sourceMappingURL=DatePicker.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatePicker.mjs","names":["calendar"],"sources":["../src/components/atoms/date-picker.tsx"],"sourcesContent":["'use client';\n\nimport { useState } from 'react';\n\nimport { useControllableState } from '@jbpark/use-hooks';\nimport { format } from 'date-fns';\nimport { CalendarIcon } from 'lucide-react';\n\nimport { cn } from '@repo/ui/utils';\n\nimport { calendar } from '../../core';\nimport Button from './button';\nimport Popover from './popover';\nimport TimePicker from './time-picker';\n\nconst { Calendar } = calendar;\n\ninterface Props {\n defaultValue?: Date;\n value?: Date;\n placeholder?: string;\n className?: string;\n disabled?: boolean;\n /** Pick a local date and time together. Optionally configure the minute interval. */\n showTime?: boolean | { minuteStep?: number };\n onChange?: (date: Date | undefined) => void;\n}\n\nconst toTimeValue = (date?: Date) =>\n date\n ? `${String(date.getHours()).padStart(2, '0')}:${String(date.getMinutes()).padStart(2, '0')}`\n : '00:00';\n\nconst DatePicker = ({\n defaultValue,\n value: _value,\n placeholder = 'Pick a date',\n className,\n disabled,\n showTime = false,\n onChange: _onChange = () => {},\n}: Props) => {\n const [value, onChange] = useControllableState<Date | undefined>({\n value: _value,\n defaultValue,\n onChange: _onChange,\n });\n const [open, setOpen] = useState(false);\n const [draftDate, setDraftDate] = useState<Date | undefined>(value);\n const [draftTime, setDraftTime] = useState(toTimeValue(value));\n const minuteStep =\n typeof showTime === 'object' ? showTime.minuteStep : undefined;\n\n const handleOpenChange = (nextOpen: boolean) => {\n if (nextOpen && showTime) {\n setDraftDate(value);\n setDraftTime(toTimeValue(value));\n }\n\n setOpen(nextOpen);\n };\n\n const handleConfirm = () => {\n if (!draftDate || !draftTime) return;\n\n const [hours, minutes] = draftTime.split(':').map(Number);\n\n onChange(\n new Date(\n draftDate.getFullYear(),\n draftDate.getMonth(),\n draftDate.getDate(),\n hours,\n minutes,\n ),\n );\n setOpen(false);\n };\n\n return (\n <Popover\n placement=\"bottomLeft\"\n open={open}\n onOpenChange={handleOpenChange}\n content={\n <>\n <Calendar\n mode=\"single\"\n selected={showTime ? draftDate : value}\n onSelect={date => {\n if (showTime) {\n setDraftDate(date);\n } else {\n onChange(date);\n setOpen(false);\n }\n }}\n />\n {showTime && (\n <div className=\"border-border flex flex-col gap-3 border-t p-3\">\n <TimePicker\n label=\"Time\"\n value={draftTime}\n onChange={time => setDraftTime(time ?? '')}\n minuteStep={minuteStep}\n allowClear={false}\n size=\"small\"\n />\n <div className=\"flex justify-end gap-2\">\n <Button size=\"small\" onClick={() => setOpen(false)}>\n Cancel\n </Button>\n <Button\n type=\"primary\"\n size=\"small\"\n disabled={!draftDate || !draftTime}\n onClick={handleConfirm}\n >\n OK\n </Button>\n </div>\n </div>\n )}\n </>\n }\n >\n <Button\n icon={<CalendarIcon />}\n data-empty={!value}\n disabled={disabled}\n className={cn(\n 'w-full justify-start text-left font-normal',\n 'data-[empty=true]:text-muted-foreground',\n className,\n //\n )}\n >\n {value ? format(value, showTime ? 'PPP HH:mm' : 'PPP') : placeholder}\n </Button>\n </Popover>\n );\n};\n\nexport default DatePicker;\nexport type { Props };\n"],"mappings":";;;;;;;;;;;;AAeA,MAAM,EAAE,aAAaA;AAarB,MAAM,eAAe,SACnB,OACI,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,EAAE,GAAG,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,MACxF;AAEN,MAAM,cAAc,EAClB,cACA,OAAO,QACP,cAAc,eACd,WACA,UACA,WAAW,OACX,UAAU,kBAAkB,CAAC,QAClB;CACX,MAAM,CAAC,OAAO,YAAY,qBAAuC;EAC/D,OAAO;EACP;EACA,UAAU;CACZ,CAAC;CACD,MAAM,CAAC,MAAM,WAAW,SAAS,KAAK;CACtC,MAAM,CAAC,WAAW,gBAAgB,SAA2B,KAAK;CAClE,MAAM,CAAC,WAAW,gBAAgB,SAAS,YAAY,KAAK,CAAC;CAC7D,MAAM,aACJ,OAAO,aAAa,WAAW,SAAS,aAAa,KAAA;CAEvD,MAAM,oBAAoB,aAAsB;EAC9C,IAAI,YAAY,UAAU;GACxB,aAAa,KAAK;GAClB,aAAa,YAAY,KAAK,CAAC;EACjC;EAEA,QAAQ,QAAQ;CAClB;CAEA,MAAM,sBAAsB;EAC1B,IAAI,CAAC,aAAa,CAAC,WAAW;EAE9B,MAAM,CAAC,OAAO,WAAW,UAAU,MAAM,GAAG,CAAC,CAAC,IAAI,MAAM;EAExD,SACE,IAAI,KACF,UAAU,YAAY,GACtB,UAAU,SAAS,GACnB,UAAU,QAAQ,GAClB,OACA,OACF,CACF;EACA,QAAQ,KAAK;CACf;CAEA,OACE,oBAAC,SAAD;EACE,WAAU;EACJ;EACN,cAAc;EACd,SACE,qBAAA,YAAA,EAAA,UAAA,CACE,oBAAC,UAAD;GACE,MAAK;GACL,UAAU,WAAW,YAAY;GACjC,WAAU,SAAQ;IAChB,IAAI,UACF,aAAa,IAAI;SACZ;KACL,SAAS,IAAI;KACb,QAAQ,KAAK;IACf;GACF;EACD,CAAA,GACA,YACC,qBAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACE,oBAAC,YAAD;IACE,OAAM;IACN,OAAO;IACP,WAAU,SAAQ,aAAa,QAAQ,EAAE;IAC7B;IACZ,YAAY;IACZ,MAAK;GACN,CAAA,GACD,qBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,oBAAC,QAAD;KAAQ,MAAK;KAAQ,eAAe,QAAQ,KAAK;KAAG,UAAA;IAE5C,CAAA,GACR,oBAAC,QAAD;KACE,MAAK;KACL,MAAK;KACL,UAAU,CAAC,aAAa,CAAC;KACzB,SAAS;KACV,UAAA;IAEO,CAAA,CACL;GACF,CAAA,CAAA;EAEP,CAAA,CAAA,EAAA,CAAA;EAGJ,UAAA,oBAAC,QAAD;GACE,MAAM,oBAAC,cAAD,CAAe,CAAA;GACrB,cAAY,CAAC;GACH;GACV,WAAW,GACT,8CACA,2CACA,SAEF;GAEC,UAAA,QAAQ,OAAO,OAAO,WAAW,cAAc,KAAK,IAAI;EACnD,CAAA;CACD,CAAA;AAEb"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { ComponentPropsWithRef, Key, ReactNode } from "react";
|
|
2
|
+
//#region src/components/molecules/descriptions.d.ts
|
|
3
|
+
type ColumnCount = 1 | 2 | 3 | 4;
|
|
4
|
+
type Breakpoint = 'base' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
|
|
5
|
+
export type Columns = ColumnCount | Partial<Record<Breakpoint, ColumnCount>>;
|
|
6
|
+
export interface Item {
|
|
7
|
+
/** Stable key for the label/value pair. */
|
|
8
|
+
key: Key;
|
|
9
|
+
label: ReactNode;
|
|
10
|
+
/** Missing or null values render empty; zero is preserved. */
|
|
11
|
+
value?: ReactNode;
|
|
12
|
+
}
|
|
13
|
+
export interface Props extends Omit<ComponentPropsWithRef<'div'>, 'children' | 'title'> {
|
|
14
|
+
items: readonly Item[];
|
|
15
|
+
title?: ReactNode;
|
|
16
|
+
/** Defaults to one column, two at md, and three at lg. Omitted breakpoints inherit the previous count. */
|
|
17
|
+
columns?: Columns;
|
|
18
|
+
/** Label placement relative to the value. Defaults to horizontal. */
|
|
19
|
+
orientation?: 'horizontal' | 'vertical';
|
|
20
|
+
classNames?: {
|
|
21
|
+
title?: string;
|
|
22
|
+
list?: string;
|
|
23
|
+
item?: string;
|
|
24
|
+
label?: string;
|
|
25
|
+
value?: string;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
declare const Descriptions: ({ items, title, columns, orientation, className, classNames, style, ...props }: Props) => import("react").JSX.Element;
|
|
29
|
+
//#endregion
|
|
30
|
+
export { Descriptions as default };
|
|
31
|
+
//# sourceMappingURL=Descriptions.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Descriptions.d.mts","names":[],"sources":["../src/components/molecules/descriptions.tsx"],"mappings":";;KASK;KACA;YAEO,UAAU,cAAc,QAAQ,OAAO,YAAY;iBAE9C;;EAEf,KAAK;EACL,OAAO;;EAEP,QAAQ;;iBAGO,cAAc,KAC7B;EAGA,gBAAgB;EAChB,QAAQ;;EAER,UAAU;;EAEV;EACA;IACE;IACA;IACA;IACA;IACA;;;cAME,iBAAgB,OAAA,OAAA,SAAA,aAAA,WAAA,YAAA,UAAA,SASnB,0BAAK,IAAA"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { cn } from "./utils.mjs";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
//#region src/components/molecules/descriptions.tsx
|
|
4
|
+
const BREAKPOINTS = [
|
|
5
|
+
"base",
|
|
6
|
+
"sm",
|
|
7
|
+
"md",
|
|
8
|
+
"lg",
|
|
9
|
+
"xl",
|
|
10
|
+
"2xl"
|
|
11
|
+
];
|
|
12
|
+
const Descriptions = ({ items, title, columns = {
|
|
13
|
+
base: 1,
|
|
14
|
+
md: 2,
|
|
15
|
+
lg: 3
|
|
16
|
+
}, orientation = "horizontal", className, classNames, style, ...props }) => {
|
|
17
|
+
const columnStyles = {};
|
|
18
|
+
let count = 1;
|
|
19
|
+
for (const breakpoint of BREAKPOINTS) {
|
|
20
|
+
const requested = typeof columns === "number" ? columns : columns[breakpoint];
|
|
21
|
+
if (requested !== void 0 && Number.isFinite(requested)) count = Math.min(4, Math.max(1, Math.floor(requested)));
|
|
22
|
+
columnStyles[`--descriptions-columns-${breakpoint}`] = count;
|
|
23
|
+
}
|
|
24
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
25
|
+
...props,
|
|
26
|
+
"data-slot": "descriptions",
|
|
27
|
+
"data-orientation": orientation,
|
|
28
|
+
className: cn("text-foreground w-full min-w-0", className),
|
|
29
|
+
style: {
|
|
30
|
+
...columnStyles,
|
|
31
|
+
...style
|
|
32
|
+
},
|
|
33
|
+
children: [title != null && /* @__PURE__ */ jsx("div", {
|
|
34
|
+
"data-slot": "descriptions-title",
|
|
35
|
+
className: cn("mb-4 text-base font-semibold", classNames?.title),
|
|
36
|
+
children: title
|
|
37
|
+
}), /* @__PURE__ */ jsx("dl", {
|
|
38
|
+
"data-slot": "descriptions-list",
|
|
39
|
+
className: cn(`m-0 grid
|
|
40
|
+
grid-cols-[repeat(var(--descriptions-columns-base),minmax(0,1fr))]
|
|
41
|
+
gap-x-6 gap-y-4
|
|
42
|
+
sm:grid-cols-[repeat(var(--descriptions-columns-sm),minmax(0,1fr))]
|
|
43
|
+
md:grid-cols-[repeat(var(--descriptions-columns-md),minmax(0,1fr))]
|
|
44
|
+
lg:grid-cols-[repeat(var(--descriptions-columns-lg),minmax(0,1fr))]
|
|
45
|
+
xl:grid-cols-[repeat(var(--descriptions-columns-xl),minmax(0,1fr))]
|
|
46
|
+
2xl:grid-cols-[repeat(var(--descriptions-columns-2xl),minmax(0,1fr))]`, classNames?.list),
|
|
47
|
+
children: items.map((item) => /* @__PURE__ */ jsxs("div", {
|
|
48
|
+
"data-slot": "descriptions-item",
|
|
49
|
+
className: cn("grid min-w-0 gap-2 text-sm", orientation === "horizontal" ? "grid-cols-[minmax(0,1fr)_minmax(0,2fr)] items-start" : "grid-cols-1 content-start", classNames?.item),
|
|
50
|
+
children: [/* @__PURE__ */ jsx("dt", {
|
|
51
|
+
"data-slot": "descriptions-label",
|
|
52
|
+
className: cn(`text-muted-foreground min-w-0 font-medium
|
|
53
|
+
[overflow-wrap:anywhere]`, classNames?.label),
|
|
54
|
+
children: item.label
|
|
55
|
+
}), /* @__PURE__ */ jsx("dd", {
|
|
56
|
+
"data-slot": "descriptions-value",
|
|
57
|
+
className: cn("m-0 min-w-0 [overflow-wrap:anywhere]", classNames?.value),
|
|
58
|
+
children: item.value
|
|
59
|
+
})]
|
|
60
|
+
}, item.key))
|
|
61
|
+
})]
|
|
62
|
+
});
|
|
63
|
+
};
|
|
64
|
+
//#endregion
|
|
65
|
+
export { Descriptions as default };
|
|
66
|
+
|
|
67
|
+
//# sourceMappingURL=Descriptions.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Descriptions.mjs","names":[],"sources":["../src/components/molecules/descriptions.tsx"],"sourcesContent":["import type {\n CSSProperties,\n ComponentPropsWithRef,\n Key,\n ReactNode,\n} from 'react';\n\nimport { cn } from '@repo/ui/utils';\n\ntype ColumnCount = 1 | 2 | 3 | 4;\ntype Breakpoint = 'base' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n\nexport type Columns = ColumnCount | Partial<Record<Breakpoint, ColumnCount>>;\n\nexport interface Item {\n /** Stable key for the label/value pair. */\n key: Key;\n label: ReactNode;\n /** Missing or null values render empty; zero is preserved. */\n value?: ReactNode;\n}\n\nexport interface Props extends Omit<\n ComponentPropsWithRef<'div'>,\n 'children' | 'title'\n> {\n items: readonly Item[];\n title?: ReactNode;\n /** Defaults to one column, two at md, and three at lg. Omitted breakpoints inherit the previous count. */\n columns?: Columns;\n /** Label placement relative to the value. Defaults to horizontal. */\n orientation?: 'horizontal' | 'vertical';\n classNames?: {\n title?: string;\n list?: string;\n item?: string;\n label?: string;\n value?: string;\n };\n}\n\nconst BREAKPOINTS: Breakpoint[] = ['base', 'sm', 'md', 'lg', 'xl', '2xl'];\n\nconst Descriptions = ({\n items,\n title,\n columns = { base: 1, md: 2, lg: 3 },\n orientation = 'horizontal',\n className,\n classNames,\n style,\n ...props\n}: Props) => {\n const columnStyles: Record<string, number> = {};\n let count = 1;\n\n for (const breakpoint of BREAKPOINTS) {\n const requested =\n typeof columns === 'number' ? columns : columns[breakpoint];\n\n if (requested !== undefined && Number.isFinite(requested)) {\n count = Math.min(4, Math.max(1, Math.floor(requested)));\n }\n\n columnStyles[`--descriptions-columns-${breakpoint}`] = count;\n }\n\n return (\n <div\n {...props}\n data-slot=\"descriptions\"\n data-orientation={orientation}\n className={cn(\n 'text-foreground w-full min-w-0',\n className, //\n )}\n style={{ ...columnStyles, ...style } as CSSProperties}\n >\n {title != null && (\n <div\n data-slot=\"descriptions-title\"\n className={cn(\n 'mb-4 text-base font-semibold',\n classNames?.title, //\n )}\n >\n {title}\n </div>\n )}\n <dl\n data-slot=\"descriptions-list\"\n className={cn(\n `m-0 grid\n grid-cols-[repeat(var(--descriptions-columns-base),minmax(0,1fr))]\n gap-x-6 gap-y-4\n sm:grid-cols-[repeat(var(--descriptions-columns-sm),minmax(0,1fr))]\n md:grid-cols-[repeat(var(--descriptions-columns-md),minmax(0,1fr))]\n lg:grid-cols-[repeat(var(--descriptions-columns-lg),minmax(0,1fr))]\n xl:grid-cols-[repeat(var(--descriptions-columns-xl),minmax(0,1fr))]\n 2xl:grid-cols-[repeat(var(--descriptions-columns-2xl),minmax(0,1fr))]`,\n classNames?.list,\n //\n )}\n >\n {items.map(item => (\n <div\n key={item.key}\n data-slot=\"descriptions-item\"\n className={cn(\n 'grid min-w-0 gap-2 text-sm',\n orientation === 'horizontal'\n ? 'grid-cols-[minmax(0,1fr)_minmax(0,2fr)] items-start'\n : 'grid-cols-1 content-start',\n classNames?.item,\n //\n )}\n >\n <dt\n data-slot=\"descriptions-label\"\n className={cn(\n `text-muted-foreground min-w-0 font-medium\n [overflow-wrap:anywhere]`,\n classNames?.label, //\n )}\n >\n {item.label}\n </dt>\n <dd\n data-slot=\"descriptions-value\"\n className={cn(\n 'm-0 min-w-0 [overflow-wrap:anywhere]',\n classNames?.value, //\n )}\n >\n {item.value}\n </dd>\n </div>\n ))}\n </dl>\n </div>\n );\n};\n\nexport default Descriptions;\n"],"mappings":";;;AAyCA,MAAM,cAA4B;CAAC;CAAQ;CAAM;CAAM;CAAM;CAAM;AAAK;AAExE,MAAM,gBAAgB,EACpB,OACA,OACA,UAAU;CAAE,MAAM;CAAG,IAAI;CAAG,IAAI;AAAE,GAClC,cAAc,cACd,WACA,YACA,OACA,GAAG,YACQ;CACX,MAAM,eAAuC,CAAC;CAC9C,IAAI,QAAQ;CAEZ,KAAK,MAAM,cAAc,aAAa;EACpC,MAAM,YACJ,OAAO,YAAY,WAAW,UAAU,QAAQ;EAElD,IAAI,cAAc,KAAA,KAAa,OAAO,SAAS,SAAS,GACtD,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,KAAK,MAAM,SAAS,CAAC,CAAC;EAGxD,aAAa,0BAA0B,gBAAgB;CACzD;CAEA,OACE,qBAAC,OAAD;EACE,GAAI;EACJ,aAAU;EACV,oBAAkB;EAClB,WAAW,GACT,kCACA,SACF;EACA,OAAO;GAAE,GAAG;GAAc,GAAG;EAAM;EARrC,UAAA,CAUG,SAAS,QACR,oBAAC,OAAD;GACE,aAAU;GACV,WAAW,GACT,gCACA,YAAY,KACd;GAEC,UAAA;EACE,CAAA,GAEP,oBAAC,MAAD;GACE,aAAU;GACV,WAAW,GACT;;;;;;;kFAQA,YAAY,IAEd;GAEC,UAAA,MAAM,KAAI,SACT,qBAAC,OAAD;IAEE,aAAU;IACV,WAAW,GACT,8BACA,gBAAgB,eACZ,wDACA,6BACJ,YAAY,IAEd;IAVF,UAAA,CAYE,oBAAC,MAAD;KACE,aAAU;KACV,WAAW,GACT;2CAEA,YAAY,KACd;KAEC,UAAA,KAAK;IACJ,CAAA,GACJ,oBAAC,MAAD;KACE,aAAU;KACV,WAAW,GACT,wCACA,YAAY,KACd;KAEC,UAAA,KAAK;IACJ,CAAA,CACD;GA9BE,GAAA,KAAK,GA8BP,CACN;EACC,CAAA,CACD;;AAET"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Separator, separator_d_exports } from "./core/separator.mjs";
|
|
2
|
+
import "./core/index.mjs";
|
|
3
|
+
import { ComponentProps, ReactNode } from "react";
|
|
4
|
+
//#region src/components/atoms/divider.d.ts
|
|
5
|
+
export interface Props extends Omit<ComponentProps<typeof Separator>, 'children' | 'className'> {
|
|
6
|
+
children?: ReactNode;
|
|
7
|
+
variant?: 'solid' | 'dashed' | 'dotted';
|
|
8
|
+
titlePlacement?: 'start' | 'center' | 'end';
|
|
9
|
+
className?: string;
|
|
10
|
+
classNames?: {
|
|
11
|
+
line?: string;
|
|
12
|
+
label?: string;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
declare const Divider: ({ children, orientation, decorative, variant, titlePlacement, className, classNames, dir, "aria-label": ariaLabel, ...props }: Props) => import("react").JSX.Element;
|
|
16
|
+
//#endregion
|
|
17
|
+
export { Divider as default };
|
|
18
|
+
//# sourceMappingURL=Divider.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Divider.d.mts","names":["separator","separator.Separator"],"sources":["../src/components/atoms/divider.tsx"],"mappings":";;;;iBASiB,cAAc,KAC7B,sBAAsBC;EAGtB,WAAW;EACX;EACA;EACA;EACA;IACE;IACA;;;cAUE,YAAW,UAAA,aAAA,YAAA,SAAA,gBAAA,WAAA,YAAA,mBAAA,cAAA,SAWd,0BAAK,IAAA"}
|
package/dist/Divider.mjs
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cn } from "./utils.mjs";
|
|
3
|
+
import { useConfig } from "./providers/config/context.mjs";
|
|
4
|
+
import { Separator } from "./core/separator.mjs";
|
|
5
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
//#region src/components/atoms/divider.tsx
|
|
7
|
+
const variants = {
|
|
8
|
+
solid: "border-solid",
|
|
9
|
+
dashed: "border-dashed",
|
|
10
|
+
dotted: "border-dotted"
|
|
11
|
+
};
|
|
12
|
+
const Divider = ({ children, orientation = "horizontal", decorative = true, variant = "solid", titlePlacement = "center", className, classNames, dir, "aria-label": ariaLabel, ...props }) => {
|
|
13
|
+
const { direction } = useConfig();
|
|
14
|
+
const hasLabel = children !== void 0 && children !== null && children !== false;
|
|
15
|
+
const isVertical = orientation === "vertical";
|
|
16
|
+
const label = typeof children === "string" || typeof children === "number" ? String(children) : void 0;
|
|
17
|
+
const lineClassName = cn("border-border min-w-0 flex-1", isVertical ? "min-h-0 border-s" : "border-t", variants[variant], classNames?.line);
|
|
18
|
+
return /* @__PURE__ */ jsxs(Separator, {
|
|
19
|
+
...props,
|
|
20
|
+
"data-slot": "divider",
|
|
21
|
+
dir: dir ?? direction,
|
|
22
|
+
orientation,
|
|
23
|
+
decorative,
|
|
24
|
+
"aria-label": decorative ? ariaLabel : ariaLabel ?? label,
|
|
25
|
+
className: cn(`text-foreground flex bg-transparent
|
|
26
|
+
data-[orientation=horizontal]:h-auto data-[orientation=vertical]:h-auto
|
|
27
|
+
data-[orientation=vertical]:w-auto`, isVertical ? "mx-2 h-auto w-auto flex-col items-center self-stretch" : "my-4 h-auto w-full items-center", hasLabel && "gap-3", className),
|
|
28
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
29
|
+
"aria-hidden": "true",
|
|
30
|
+
className: cn(lineClassName, hasLabel && titlePlacement === "start" && "flex-[0.1]")
|
|
31
|
+
}), hasLabel && /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("span", {
|
|
32
|
+
"data-slot": "divider-label",
|
|
33
|
+
className: cn("min-w-0 shrink text-sm font-medium [overflow-wrap:anywhere]", classNames?.label),
|
|
34
|
+
children
|
|
35
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
36
|
+
"aria-hidden": "true",
|
|
37
|
+
className: cn(lineClassName, titlePlacement === "end" && "flex-[0.1]")
|
|
38
|
+
})] })]
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
//#endregion
|
|
42
|
+
export { Divider as default };
|
|
43
|
+
|
|
44
|
+
//# sourceMappingURL=Divider.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Divider.mjs","names":["separator.Separator"],"sources":["../src/components/atoms/divider.tsx"],"sourcesContent":["'use client';\n\nimport type { ComponentProps, ReactNode } from 'react';\n\nimport { useConfig } from '@repo/ui/providers';\nimport { cn } from '@repo/ui/utils';\n\nimport { separator } from '../../core';\n\nexport interface Props extends Omit<\n ComponentProps<typeof separator.Separator>,\n 'children' | 'className'\n> {\n children?: ReactNode;\n variant?: 'solid' | 'dashed' | 'dotted';\n titlePlacement?: 'start' | 'center' | 'end';\n className?: string;\n classNames?: {\n line?: string;\n label?: string;\n };\n}\n\nconst variants = {\n solid: 'border-solid',\n dashed: 'border-dashed',\n dotted: 'border-dotted',\n};\n\nconst Divider = ({\n children,\n orientation = 'horizontal',\n decorative = true,\n variant = 'solid',\n titlePlacement = 'center',\n className,\n classNames,\n dir,\n 'aria-label': ariaLabel,\n ...props\n}: Props) => {\n const { direction } = useConfig();\n const hasLabel =\n children !== undefined && children !== null && children !== false;\n const isVertical = orientation === 'vertical';\n const label =\n typeof children === 'string' || typeof children === 'number'\n ? String(children)\n : undefined;\n const lineClassName = cn(\n 'border-border min-w-0 flex-1',\n isVertical ? 'min-h-0 border-s' : 'border-t',\n variants[variant],\n classNames?.line,\n //\n );\n\n return (\n <separator.Separator\n {...props}\n data-slot=\"divider\"\n dir={dir ?? direction}\n orientation={orientation}\n decorative={decorative}\n aria-label={decorative ? ariaLabel : (ariaLabel ?? label)}\n className={cn(\n `text-foreground flex bg-transparent\n data-[orientation=horizontal]:h-auto data-[orientation=vertical]:h-auto\n data-[orientation=vertical]:w-auto`,\n isVertical\n ? 'mx-2 h-auto w-auto flex-col items-center self-stretch'\n : 'my-4 h-auto w-full items-center',\n hasLabel && 'gap-3',\n className,\n //\n )}\n >\n <span\n aria-hidden=\"true\"\n className={cn(\n lineClassName,\n hasLabel && titlePlacement === 'start' && 'flex-[0.1]',\n //\n )}\n />\n {hasLabel && (\n <>\n <span\n data-slot=\"divider-label\"\n className={cn(\n 'min-w-0 shrink text-sm font-medium [overflow-wrap:anywhere]',\n classNames?.label,\n //\n )}\n >\n {children}\n </span>\n <span\n aria-hidden=\"true\"\n className={cn(\n lineClassName,\n titlePlacement === 'end' && 'flex-[0.1]',\n //\n )}\n />\n </>\n )}\n </separator.Separator>\n );\n};\n\nexport default Divider;\n"],"mappings":";;;;;;AAuBA,MAAM,WAAW;CACf,OAAO;CACP,QAAQ;CACR,QAAQ;AACV;AAEA,MAAM,WAAW,EACf,UACA,cAAc,cACd,aAAa,MACb,UAAU,SACV,iBAAiB,UACjB,WACA,YACA,KACA,cAAc,WACd,GAAG,YACQ;CACX,MAAM,EAAE,cAAc,UAAU;CAChC,MAAM,WACJ,aAAa,KAAA,KAAa,aAAa,QAAQ,aAAa;CAC9D,MAAM,aAAa,gBAAgB;CACnC,MAAM,QACJ,OAAO,aAAa,YAAY,OAAO,aAAa,WAChD,OAAO,QAAQ,IACf,KAAA;CACN,MAAM,gBAAgB,GACpB,gCACA,aAAa,qBAAqB,YAClC,SAAS,UACT,YAAY,IAEd;CAEA,OACE,qBAACA,WAAD;EACE,GAAI;EACJ,aAAU;EACV,KAAK,OAAO;EACC;EACD;EACZ,cAAY,aAAa,YAAa,aAAa;EACnD,WAAW,GACT;;6CAGA,aACI,0DACA,mCACJ,YAAY,SACZ,SAEF;EAjBF,UAAA,CAmBE,oBAAC,QAAD;GACE,eAAY;GACZ,WAAW,GACT,eACA,YAAY,mBAAmB,WAAW,YAE5C;EACD,CAAA,GACA,YACC,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,QAAD;GACE,aAAU;GACV,WAAW,GACT,+DACA,YAAY,KAEd;GAEC;EACG,CAAA,GACN,oBAAC,QAAD;GACE,eAAY;GACZ,WAAW,GACT,eACA,mBAAmB,SAAS,YAE9B;EACD,CAAA,CACD,EAAA,CAAA,CAEe;;AAEzB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
//#region src/components/organisms/drawer.d.ts
|
|
2
|
-
interface Props {
|
|
2
|
+
export interface Props {
|
|
3
3
|
open: boolean;
|
|
4
4
|
children?: React.ReactNode;
|
|
5
5
|
title?: React.ReactNode;
|
|
@@ -31,5 +31,5 @@ interface Props {
|
|
|
31
31
|
}
|
|
32
32
|
declare const Drawer: ({ open, title, extra, footer, closable, closeIcon, direction, size, maskClosable, handlebar, rounded, mask, className, classNames, style, children, container, onClose, ...props }: Props) => import("react").JSX.Element;
|
|
33
33
|
//#endregion
|
|
34
|
-
export {
|
|
35
|
-
//# sourceMappingURL=
|
|
34
|
+
export { Drawer as default };
|
|
35
|
+
//# sourceMappingURL=Drawer.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Drawer.d.mts","names":[],"sources":["../src/components/organisms/drawer.tsx"],"mappings":";iBA2CiB;EACf;EACA,WAAW,MAAM;EACjB,QAAQ,MAAM;EACd,QAAQ,MAAM;EACd,SAAS,MAAM;EACf;EACA,YAAY,MAAM;EAClB;EACA;EACA;EACA;EACA;EACA;EACA;EACA,QAAQ,MAAM;EACd;IACE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEF,YAAY;EACZ;;cA+CI,WAAU,MAAA,OAAA,OAAA,QAAA,UAAA,WAAA,WAAA,MAAA,cAAA,WAAA,SAAA,MAAA,WAAA,YAAA,OAAA,UAAA,WAAA,YAAA,SAoBb,0BAAK,IAAA"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { cn } from "
|
|
3
|
-
import { DEFAULT_LOCALE, useConfig } from "
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import { X } from "lucide-react";
|
|
2
|
+
import { cn } from "./utils.mjs";
|
|
3
|
+
import { DEFAULT_LOCALE, useConfig } from "./providers/config/context.mjs";
|
|
4
|
+
import Button from "./Button.mjs";
|
|
5
|
+
import { drawer_exports } from "./core/drawer.mjs";
|
|
7
6
|
import { useEffect } from "react";
|
|
8
7
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
|
+
import { X } from "lucide-react";
|
|
9
9
|
//#region src/components/organisms/drawer.tsx
|
|
10
10
|
const { DrawerContent, Drawer: DrawerCore, DrawerDescription, DrawerFooter, DrawerHeader, DrawerTitle } = drawer_exports;
|
|
11
11
|
const maskLessStates = /* @__PURE__ */ new WeakMap();
|
|
@@ -130,4 +130,4 @@ const Drawer = ({ open, title, extra, footer, closable = true, closeIcon, direct
|
|
|
130
130
|
//#endregion
|
|
131
131
|
export { Drawer as default };
|
|
132
132
|
|
|
133
|
-
//# sourceMappingURL=
|
|
133
|
+
//# sourceMappingURL=Drawer.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Drawer.mjs","names":["drawer"],"sources":["../src/components/organisms/drawer.tsx"],"sourcesContent":["'use client';\n\nimport { useEffect } from 'react';\n\nimport { X } from 'lucide-react';\n\nimport { DEFAULT_LOCALE, useConfig } from '@repo/ui/providers';\nimport { cn } from '@repo/ui/utils';\n\nimport { drawer } from '../../core';\nimport Button from '../atoms/button';\n\nconst {\n DrawerContent,\n Drawer: DrawerCore,\n DrawerDescription,\n DrawerFooter,\n DrawerHeader,\n DrawerTitle,\n} = drawer;\n\n// `body.style.pointerEvents` is global state (per document), so several\n// mask-less overlays opening at once would otherwise race: each instance\n// would capture whatever the previous one had already written and the\n// last cleanup would restore a stale value. Reference counting makes only\n// the first instance capture the original value and only the last one\n// restore it. Keyed by document (not a single module-level counter) so\n// drawers portaled into different documents — e.g. live-editor's iframe\n// Renderer — don't share state with the host document.\ntype MaskLessState = { count: number; originalPointerEvents: string | null };\nconst maskLessStates = new WeakMap<Document, MaskLessState>();\n\nconst getMaskLessState = (doc: Document): MaskLessState => {\n let state = maskLessStates.get(doc);\n\n if (!state) {\n state = { count: 0, originalPointerEvents: null };\n maskLessStates.set(doc, state);\n }\n\n return state;\n};\n\nexport interface Props {\n open: boolean;\n children?: React.ReactNode;\n title?: React.ReactNode;\n extra?: React.ReactNode;\n footer?: React.ReactNode;\n closable?: boolean;\n closeIcon?: React.ReactNode;\n direction?: 'top' | 'bottom' | 'left' | 'right';\n size?: 'small' | 'middle' | 'medium' | 'large' | 'full' | string;\n maskClosable?: boolean;\n handlebar?: boolean;\n rounded?: boolean;\n mask?: boolean;\n className?: string;\n style?: React.CSSProperties;\n classNames?: {\n mask?: string;\n content?: string;\n handlebar?: string;\n header?: string;\n title?: string;\n close?: string;\n extra?: string;\n body?: string;\n footer?: string;\n };\n container?: HTMLElement;\n onClose: () => void;\n}\n\nconst SIZES: Record<string, string> = {\n small: '30%',\n middle: '50%',\n medium: '50%',\n large: '75%',\n full: '90%',\n};\n\n// Rounds the edge facing into the viewport — the opposite edge from\n// whichever side the drawer is anchored to.\nconst ROUNDED_CLASSES: Record<'top' | 'bottom' | 'left' | 'right', string> = {\n top: 'rounded-b-[30px]!',\n bottom: 'rounded-t-[30px]!',\n left: 'rounded-r-[30px]!',\n right: 'rounded-l-[30px]!',\n};\n\n// A side drawer sized by a preset is sized by a percentage of the viewport,\n// which collapses on a phone: `small` is 30%, so it lands at ~112px on a 375px\n// screen — a sliver too narrow to read. Floor the preset widths so they stay\n// usable on small screens. A custom `size` is passed through untouched; an\n// explicit value is the caller's decision, not something to second-guess.\nconst SIDE_MIN_WIDTH = '20rem';\n\nconst getSizeStyles = (\n direction: 'top' | 'bottom' | 'left' | 'right',\n size: string,\n): React.CSSProperties => {\n if (direction === 'top' || direction === 'bottom') {\n return { height: SIZES[size] || size };\n }\n\n const preset = SIZES[size];\n\n return {\n width: preset ? `max(${preset}, ${SIDE_MIN_WIDTH})` : size,\n // Set inline so it beats `core/drawer`'s `sm:max-w-sm`, which would\n // otherwise hold every side drawer at 24rem from the `sm` breakpoint up\n // and leave `size` with no effect on anything wider than a phone. It also\n // keeps the floor above from overflowing a container narrower than it.\n maxWidth: '100%',\n };\n};\n\nconst Drawer = ({\n open,\n title,\n extra,\n footer,\n closable = true,\n closeIcon,\n direction = 'bottom',\n size = 'middle',\n maskClosable = true,\n handlebar = true,\n rounded = false,\n mask = true,\n className,\n classNames,\n style,\n children,\n container,\n onClose,\n ...props\n}: Props) => {\n const { locale } = useConfig();\n\n useEffect(() => {\n if (!open || mask) {\n return;\n }\n\n const targetDocument = container?.ownerDocument ?? document;\n const targetWindow = targetDocument.defaultView ?? window;\n const body = targetDocument.body;\n const state = getMaskLessState(targetDocument);\n\n if (state.count === 0) {\n state.originalPointerEvents = body.style.pointerEvents;\n }\n state.count += 1;\n\n const raf = targetWindow.requestAnimationFrame(() => {\n body.style.pointerEvents = 'auto';\n });\n\n return () => {\n targetWindow.cancelAnimationFrame(raf);\n state.count -= 1;\n\n if (state.count === 0) {\n body.style.pointerEvents = state.originalPointerEvents ?? '';\n state.originalPointerEvents = null;\n }\n };\n }, [open, mask, container]);\n\n return (\n <DrawerCore\n open={open}\n // antd's mask ⇒ Base UI's modal (focus trap + scroll lock); maskClosable\n // gates outside-press dismissal at the root, replacing vaul's\n // Content-level onPointerDownOutside handler.\n modal={mask}\n disablePointerDismissal={!maskClosable}\n onOpenChange={open => {\n if (!open) {\n onClose();\n }\n }}\n {...props}\n >\n <DrawerContent\n direction={direction}\n container={container}\n className={cn(\n 'border-none outline-none',\n rounded ? ROUNDED_CLASSES[direction] : 'rounded-none!',\n classNames?.content,\n className,\n //\n )}\n handlebar={handlebar}\n mask={mask}\n classNames={{\n mask: classNames?.mask || '',\n handlebar: classNames?.handlebar || '',\n }}\n style={{\n ...getSizeStyles(direction, size),\n ...style,\n }}\n >\n <DrawerHeader\n className={cn(\n classNames?.header,\n !title && 'p-0',\n //\n )}\n >\n <div className=\"flex items-start gap-2\">\n {closable && (\n <Button\n variant=\"text\"\n shape=\"circle\"\n size=\"small\"\n aria-label={locale.close ?? DEFAULT_LOCALE.close}\n icon={closeIcon || <X />}\n onClick={onClose}\n className={cn(classNames?.close)}\n />\n )}\n <div className=\"flex flex-1 items-start justify-between gap-2\">\n <DrawerTitle className={cn(classNames?.title)}>\n {title}\n </DrawerTitle>\n {extra != null && (\n <div className={cn('shrink-0', classNames?.extra)}>{extra}</div>\n )}\n </div>\n </div>\n <DrawerDescription className=\"hidden\" />\n </DrawerHeader>\n <div\n className={cn(\n 'overflow-auto p-5',\n classNames?.body,\n //\n )}\n >\n {children}\n </div>\n {footer != null && (\n <DrawerFooter className={cn(classNames?.footer)}>\n {footer}\n </DrawerFooter>\n )}\n </DrawerContent>\n </DrawerCore>\n );\n};\n\nexport default Drawer;\n"],"mappings":";;;;;;;;;AAYA,MAAM,EACJ,eACA,QAAQ,YACR,mBACA,cACA,cACA,gBACEA;AAWJ,MAAM,iCAAiB,IAAI,QAAiC;AAE5D,MAAM,oBAAoB,QAAiC;CACzD,IAAI,QAAQ,eAAe,IAAI,GAAG;CAElC,IAAI,CAAC,OAAO;EACV,QAAQ;GAAE,OAAO;GAAG,uBAAuB;EAAK;EAChD,eAAe,IAAI,KAAK,KAAK;CAC/B;CAEA,OAAO;AACT;AAiCA,MAAM,QAAgC;CACpC,OAAO;CACP,QAAQ;CACR,QAAQ;CACR,OAAO;CACP,MAAM;AACR;AAIA,MAAM,kBAAuE;CAC3E,KAAK;CACL,QAAQ;CACR,MAAM;CACN,OAAO;AACT;AAOA,MAAM,iBAAiB;AAEvB,MAAM,iBACJ,WACA,SACwB;CACxB,IAAI,cAAc,SAAS,cAAc,UACvC,OAAO,EAAE,QAAQ,MAAM,SAAS,KAAK;CAGvC,MAAM,SAAS,MAAM;CAErB,OAAO;EACL,OAAO,SAAS,OAAO,OAAO,IAAI,eAAe,KAAK;EAKtD,UAAU;CACZ;AACF;AAEA,MAAM,UAAU,EACd,MACA,OACA,OACA,QACA,WAAW,MACX,WACA,YAAY,UACZ,OAAO,UACP,eAAe,MACf,YAAY,MACZ,UAAU,OACV,OAAO,MACP,WACA,YACA,OACA,UACA,WACA,SACA,GAAG,YACQ;CACX,MAAM,EAAE,WAAW,UAAU;CAE7B,gBAAgB;EACd,IAAI,CAAC,QAAQ,MACX;EAGF,MAAM,iBAAiB,WAAW,iBAAiB;EACnD,MAAM,eAAe,eAAe,eAAe;EACnD,MAAM,OAAO,eAAe;EAC5B,MAAM,QAAQ,iBAAiB,cAAc;EAE7C,IAAI,MAAM,UAAU,GAClB,MAAM,wBAAwB,KAAK,MAAM;EAE3C,MAAM,SAAS;EAEf,MAAM,MAAM,aAAa,4BAA4B;GACnD,KAAK,MAAM,gBAAgB;EAC7B,CAAC;EAED,aAAa;GACX,aAAa,qBAAqB,GAAG;GACrC,MAAM,SAAS;GAEf,IAAI,MAAM,UAAU,GAAG;IACrB,KAAK,MAAM,gBAAgB,MAAM,yBAAyB;IAC1D,MAAM,wBAAwB;GAChC;EACF;CACF,GAAG;EAAC;EAAM;EAAM;CAAS,CAAC;CAE1B,OACE,oBAAC,YAAD;EACQ;EAIN,OAAO;EACP,yBAAyB,CAAC;EAC1B,eAAc,SAAQ;GACpB,IAAI,CAAC,MACH,QAAQ;EAEZ;EACA,GAAI;EAEJ,UAAA,qBAAC,eAAD;GACa;GACA;GACX,WAAW,GACT,4BACA,UAAU,gBAAgB,aAAa,iBACvC,YAAY,SACZ,SAEF;GACW;GACL;GACN,YAAY;IACV,MAAM,YAAY,QAAQ;IAC1B,WAAW,YAAY,aAAa;GACtC;GACA,OAAO;IACL,GAAG,cAAc,WAAW,IAAI;IAChC,GAAG;GACL;GAnBF,UAAA;IAqBE,qBAAC,cAAD;KACE,WAAW,GACT,YAAY,QACZ,CAAC,SAAS,KAEZ;KALF,UAAA,CAOE,qBAAC,OAAD;MAAK,WAAU;MAAf,UAAA,CACG,YACC,oBAAC,QAAD;OACE,SAAQ;OACR,OAAM;OACN,MAAK;OACL,cAAY,OAAO,SAAS,eAAe;OAC3C,MAAM,aAAa,oBAAC,GAAD,CAAI,CAAA;OACvB,SAAS;OACT,WAAW,GAAG,YAAY,KAAK;MAChC,CAAA,GAEH,qBAAC,OAAD;OAAK,WAAU;OAAf,UAAA,CACE,oBAAC,aAAD;QAAa,WAAW,GAAG,YAAY,KAAK;QACzC,UAAA;OACU,CAAA,GACZ,SAAS,QACR,oBAAC,OAAD;QAAK,WAAW,GAAG,YAAY,YAAY,KAAK;QAAI,UAAA;OAAW,CAAA,CAE9D;MACF,CAAA,CAAA;KACL,CAAA,GAAA,oBAAC,mBAAD,EAAmB,WAAU,SAAU,CAAA,CAC3B;;IACd,oBAAC,OAAD;KACE,WAAW,GACT,qBACA,YAAY,IAEd;KAEC;IACE,CAAA;IACJ,UAAU,QACT,oBAAC,cAAD;KAAc,WAAW,GAAG,YAAY,MAAM;KAC3C,UAAA;IACW,CAAA;GAEH;;CACL,CAAA;AAEhB"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { MenuProps } from "./menu/menu.mjs";
|
|
1
|
+
import { MenuProps } from "./components/molecules/menu/menu.mjs";
|
|
2
2
|
//#region src/components/molecules/dropdown.d.ts
|
|
3
3
|
type ChangeEventHandler = (open: boolean) => void;
|
|
4
|
-
interface Props extends React.ComponentPropsWithoutRef<'div'> {
|
|
4
|
+
export interface Props extends React.ComponentPropsWithoutRef<'div'> {
|
|
5
5
|
open?: boolean;
|
|
6
6
|
trigger?: 'hover' | 'click';
|
|
7
7
|
menu?: MenuProps;
|
|
@@ -9,5 +9,5 @@ interface Props extends React.ComponentPropsWithoutRef<'div'> {
|
|
|
9
9
|
}
|
|
10
10
|
declare const Dropdown: ({ children, menu, trigger, open: _open, onOpenChange: _onOpenChange, className, onMouseEnter, onMouseLeave, ...props }: Props) => import("react").JSX.Element;
|
|
11
11
|
//#endregion
|
|
12
|
-
export {
|
|
13
|
-
//# sourceMappingURL=
|
|
12
|
+
export { Dropdown as default };
|
|
13
|
+
//# sourceMappingURL=Dropdown.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dropdown.d.mts","names":[],"sources":["../src/components/molecules/dropdown.tsx"],"mappings":";;KAYK,sBAAsB;iBAEV,cAAc,MAAM;EACnC;EACA;EACA,OAAO;EACP,eAAe;;cAGX,aAAY,UAAA,MAAA,SAAA,MAAA,OAAA,cAAA,eAAA,WAAA,cAAA,iBAAA,SAUf,0BAAK,IAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { cn } from "
|
|
3
|
-
import "
|
|
4
|
-
import Menu from "./menu/menu.mjs";
|
|
2
|
+
import { cn } from "./utils.mjs";
|
|
3
|
+
import "./lib/z-layers.mjs";
|
|
4
|
+
import Menu from "./components/molecules/menu/menu.mjs";
|
|
5
5
|
import { useId, useRef } from "react";
|
|
6
6
|
import { useControllableState, useKeyPress } from "@jbpark/use-hooks";
|
|
7
7
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -88,4 +88,4 @@ const Dropdown = ({ children, menu, trigger = "hover", open: _open, onOpenChange
|
|
|
88
88
|
//#endregion
|
|
89
89
|
export { Dropdown as default };
|
|
90
90
|
|
|
91
|
-
//# sourceMappingURL=
|
|
91
|
+
//# sourceMappingURL=Dropdown.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dropdown.mjs","names":[],"sources":["../src/components/molecules/dropdown.tsx"],"sourcesContent":["'use client';\n\nimport { useId, useRef } from 'react';\n\nimport { useControllableState, useKeyPress } from '@jbpark/use-hooks';\nimport { AnimatePresence, motion } from 'motion/react';\n\nimport { cn } from '@repo/ui/utils';\n\nimport { OVERLAY_LAYER } from '../../lib/z-layers';\nimport Menu, { MenuProps } from './menu';\n\ntype ChangeEventHandler = (open: boolean) => void;\n\nexport interface Props extends React.ComponentPropsWithoutRef<'div'> {\n open?: boolean;\n trigger?: 'hover' | 'click';\n menu?: MenuProps;\n onOpenChange?: ChangeEventHandler;\n}\n\nconst Dropdown = ({\n children,\n menu,\n trigger = 'hover',\n open: _open,\n onOpenChange: _onOpenChange = () => {},\n className,\n onMouseEnter,\n onMouseLeave,\n ...props\n}: Props) => {\n const [open, onOpenChange] = useControllableState<boolean>({\n value: _open,\n defaultValue: false,\n onChange: _onOpenChange,\n });\n\n const isClickTrigger = trigger === 'click';\n const menuId = useId();\n const containerRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLDivElement>(null);\n\n useKeyPress(\n 'esc',\n () => {\n onOpenChange(false);\n },\n { target: triggerRef },\n );\n\n useKeyPress(\n ['Enter', 'space'],\n event => {\n event.preventDefault();\n onOpenChange(!open);\n },\n { target: triggerRef, enabled: isClickTrigger },\n );\n\n return (\n <div\n {...props}\n ref={containerRef}\n className={cn(\n 'relative',\n 'inline-block cursor-pointer',\n className,\n //\n )}\n onMouseEnter={event => {\n onMouseEnter?.(event);\n if (isClickTrigger) {\n return;\n }\n onOpenChange(true);\n }}\n onMouseLeave={event => {\n onMouseLeave?.(event);\n if (isClickTrigger) {\n return;\n }\n onOpenChange(false);\n }}\n >\n <div\n ref={triggerRef}\n role={isClickTrigger ? 'button' : undefined}\n tabIndex={isClickTrigger ? 0 : undefined}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n aria-controls={open ? menuId : undefined}\n onClick={() => {\n if (!isClickTrigger) {\n return;\n }\n onOpenChange(!open);\n }}\n onFocus={() => {\n if (isClickTrigger) {\n return;\n }\n onOpenChange(true);\n }}\n onBlur={e => {\n // Without this check, moving focus from the trigger into the\n // menu itself (e.g. via Tab) closed the dropdown before the\n // user could ever reach it — the mouse path avoided the same\n // bug only by way of onMouseDown's preventDefault below, which\n // does nothing for keyboard focus. Mirrors the containment\n // check menu/item/item.tsx already uses for the same reason.\n if (!containerRef.current?.contains(e.relatedTarget as Node)) {\n onOpenChange(false);\n }\n }}\n >\n {children}\n </div>\n <AnimatePresence>\n {open && (\n <motion.div\n className={cn(\n 'absolute top-full pt-2',\n OVERLAY_LAYER,\n //\n )}\n initial={{ opacity: 0, y: -10 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -10 }}\n transition={{ duration: 0.1 }}\n >\n <Menu\n {...menu}\n id={menuId}\n onMouseDown={e => {\n e.preventDefault();\n }}\n />\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n );\n};\n\nexport default Dropdown;\n"],"mappings":";;;;;;;;;AAqBA,MAAM,YAAY,EAChB,UACA,MACA,UAAU,SACV,MAAM,OACN,cAAc,sBAAsB,CAAC,GACrC,WACA,cACA,cACA,GAAG,YACQ;CACX,MAAM,CAAC,MAAM,gBAAgB,qBAA8B;EACzD,OAAO;EACP,cAAc;EACd,UAAU;CACZ,CAAC;CAED,MAAM,iBAAiB,YAAY;CACnC,MAAM,SAAS,MAAM;CACrB,MAAM,eAAe,OAAuB,IAAI;CAChD,MAAM,aAAa,OAAuB,IAAI;CAE9C,YACE,aACM;EACJ,aAAa,KAAK;CACpB,GACA,EAAE,QAAQ,WAAW,CACvB;CAEA,YACE,CAAC,SAAS,OAAO,IACjB,UAAS;EACP,MAAM,eAAe;EACrB,aAAa,CAAC,IAAI;CACpB,GACA;EAAE,QAAQ;EAAY,SAAS;CAAe,CAChD;CAEA,OACE,qBAAC,OAAD;EACE,GAAI;EACJ,KAAK;EACL,WAAW,GACT,YACA,+BACA,SAEF;EACA,eAAc,UAAS;GACrB,eAAe,KAAK;GACpB,IAAI,gBACF;GAEF,aAAa,IAAI;EACnB;EACA,eAAc,UAAS;GACrB,eAAe,KAAK;GACpB,IAAI,gBACF;GAEF,aAAa,KAAK;EACpB;EAtBF,UAAA,CAwBE,oBAAC,OAAD;GACE,KAAK;GACL,MAAM,iBAAiB,WAAW,KAAA;GAClC,UAAU,iBAAiB,IAAI,KAAA;GAC/B,iBAAc;GACd,iBAAe;GACf,iBAAe,OAAO,SAAS,KAAA;GAC/B,eAAe;IACb,IAAI,CAAC,gBACH;IAEF,aAAa,CAAC,IAAI;GACpB;GACA,eAAe;IACb,IAAI,gBACF;IAEF,aAAa,IAAI;GACnB;GACA,SAAQ,MAAK;IAOX,IAAI,CAAC,aAAa,SAAS,SAAS,EAAE,aAAqB,GACzD,aAAa,KAAK;GAEtB;GAEC;EACE,CAAA,GACL,oBAAC,iBAAD,EAAA,UACG,QACC,oBAAC,OAAO,KAAR;GACE,WAAW,GACT,0BAAA,QAGF;GACA,SAAS;IAAE,SAAS;IAAG,GAAG;GAAI;GAC9B,SAAS;IAAE,SAAS;IAAG,GAAG;GAAE;GAC5B,MAAM;IAAE,SAAS;IAAG,GAAG;GAAI;GAC3B,YAAY,EAAE,UAAU,GAAI;GAE5B,UAAA,oBAAC,MAAD;IACE,GAAI;IACJ,IAAI;IACJ,cAAa,MAAK;KAChB,EAAE,eAAe;IACnB;GACD,CAAA;EACS,CAAA,EAEC,CAAA,CACd;;AAET"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
//#region src/components/
|
|
2
|
-
interface Props extends Omit<React.ComponentProps<'div'>, 'title'> {
|
|
1
|
+
//#region src/components/molecules/empty.d.ts
|
|
2
|
+
export interface Props extends Omit<React.ComponentProps<'div'>, 'title'> {
|
|
3
3
|
icon?: React.ReactNode;
|
|
4
4
|
title?: React.ReactNode;
|
|
5
5
|
description?: React.ReactNode;
|
|
@@ -7,5 +7,5 @@ interface Props extends Omit<React.ComponentProps<'div'>, 'title'> {
|
|
|
7
7
|
}
|
|
8
8
|
declare const Empty: ({ icon, title, description, action, className, ...props }: Props) => import("react").JSX.Element;
|
|
9
9
|
//#endregion
|
|
10
|
-
export {
|
|
11
|
-
//# sourceMappingURL=
|
|
10
|
+
export { Empty as default };
|
|
11
|
+
//# sourceMappingURL=Empty.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Empty.d.mts","names":[],"sources":["../src/components/molecules/empty.tsx"],"mappings":";iBAIiB,cAAc,KAAK,MAAM;EACxC,OAAO,MAAM;EACb,QAAQ,MAAM;EACd,cAAc,MAAM;EACpB,SAAS,MAAM;;cAQX,UAAS,MAAA,OAAA,aAAA,QAAA,cAAA,SAOZ,0BAAK,IAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { cn } from "
|
|
2
|
-
import { Inbox } from "lucide-react";
|
|
1
|
+
import { cn } from "./utils.mjs";
|
|
3
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
-
|
|
3
|
+
import { Inbox } from "lucide-react";
|
|
4
|
+
//#region src/components/molecules/empty.tsx
|
|
5
5
|
const Empty = ({ icon, title, description = "No data", action, className, ...props }) => {
|
|
6
6
|
return /* @__PURE__ */ jsxs("div", {
|
|
7
7
|
"data-slot": "empty",
|
|
@@ -31,4 +31,4 @@ const Empty = ({ icon, title, description = "No data", action, className, ...pro
|
|
|
31
31
|
//#endregion
|
|
32
32
|
export { Empty as default };
|
|
33
33
|
|
|
34
|
-
//# sourceMappingURL=
|
|
34
|
+
//# sourceMappingURL=Empty.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Empty.mjs","names":[],"sources":["../src/components/molecules/empty.tsx"],"sourcesContent":["import { Inbox } from 'lucide-react';\n\nimport { cn } from '@repo/ui/utils';\n\nexport interface Props extends Omit<React.ComponentProps<'div'>, 'title'> {\n icon?: React.ReactNode;\n title?: React.ReactNode;\n description?: React.ReactNode;\n action?: React.ReactNode;\n}\n\n// The counterpart List's `empty` prop was asking for — List/Upload/Swiper\n// each render arbitrary content for their empty state today with nothing\n// in the library actually meant to go there. Pairs with Skeleton the same\n// way Skeleton pairs with real content: one placeholder for \"nothing\n// loaded yet\", one for \"loaded, and there's nothing\".\nconst Empty = ({\n icon,\n title,\n description = 'No data',\n action,\n className,\n ...props\n}: Props) => {\n return (\n <div\n data-slot=\"empty\"\n role=\"status\"\n className={cn(\n 'flex flex-col items-center justify-center gap-3 py-12 text-center',\n className,\n //\n )}\n {...props}\n >\n <div className=\"text-muted-foreground [&_svg]:size-12\">\n {icon ?? <Inbox />}\n </div>\n {title && <p className=\"text-sm font-medium\">{title}</p>}\n {description && (\n <p className=\"text-muted-foreground text-sm\">{description}</p>\n )}\n {action && <div className=\"mt-1\">{action}</div>}\n </div>\n );\n};\n\nexport default Empty;\n"],"mappings":";;;;AAgBA,MAAM,SAAS,EACb,MACA,OACA,cAAc,WACd,QACA,WACA,GAAG,YACQ;CACX,OACE,qBAAC,OAAD;EACE,aAAU;EACV,MAAK;EACL,WAAW,GACT,qEACA,SAEF;EACA,GAAI;EARN,UAAA;GAUE,oBAAC,OAAD;IAAK,WAAU;IACZ,UAAA,QAAQ,oBAAC,OAAD,CAAQ,CAAA;GACd,CAAA;GACJ,SAAS,oBAAC,KAAD;IAAG,WAAU;IAAuB,UAAA;GAAS,CAAA;GACtD,eACC,oBAAC,KAAD;IAAG,WAAU;IAAiC,UAAA;GAAe,CAAA;GAE9D,UAAU,oBAAC,OAAD;IAAK,WAAU;IAAQ,UAAA;GAAY,CAAA;EAC3C;;AAET"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import BackTop from "./components/atoms/float-button/back-top.mjs";
|
|
2
|
+
import FloatButton$1, { Props } from "./components/atoms/float-button/float-button.mjs";
|
|
3
|
+
//#region src/components/atoms/float-button/index.d.ts
|
|
4
|
+
type FloatButtonComponent = typeof FloatButton$1 & {
|
|
5
|
+
BackTop: typeof BackTop;
|
|
6
|
+
};
|
|
7
|
+
declare const FloatButton: FloatButtonComponent;
|
|
8
|
+
//#endregion
|
|
9
|
+
export { type Props, FloatButton as default };
|
|
10
|
+
//# sourceMappingURL=FloatButton.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FloatButton.d.mts","names":["FloatButtonImpl"],"sources":["../src/components/atoms/float-button/index.ts"],"mappings":";;;KAGK,8BAA8BA;EACjC,gBAAgB;;cAGZ,aAAiC"}
|