@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,9 @@
|
|
|
1
|
+
import FloatButton$1 from "./components/atoms/float-button/float-button.mjs";
|
|
2
|
+
import BackTop from "./components/atoms/float-button/back-top.mjs";
|
|
3
|
+
//#region src/components/atoms/float-button/index.ts
|
|
4
|
+
const FloatButton = FloatButton$1;
|
|
5
|
+
FloatButton.BackTop = BackTop;
|
|
6
|
+
//#endregion
|
|
7
|
+
export { FloatButton as default };
|
|
8
|
+
|
|
9
|
+
//# sourceMappingURL=FloatButton.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FloatButton.mjs","names":["FloatButtonImpl"],"sources":["../src/components/atoms/float-button/index.ts"],"sourcesContent":["import BackTop from './back-top';\nimport FloatButtonImpl, { type Props } from './float-button';\n\ntype FloatButtonComponent = typeof FloatButtonImpl & {\n BackTop: typeof BackTop;\n};\n\nconst FloatButton = FloatButtonImpl as FloatButtonComponent;\n\nFloatButton.BackTop = BackTop;\n\nexport default FloatButton;\nexport type { Props };\n"],"mappings":";;;AAOA,MAAM,cAAcA;AAEpB,YAAY,UAAU"}
|
package/dist/Form.d.mts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import Control, { Props } from "./components/organisms/form/control.mjs";
|
|
2
|
+
import Field, { Props as Props$1 } from "./components/organisms/form/field.mjs";
|
|
3
|
+
import Form$1, { Props as Props$2 } from "./components/organisms/form/form.mjs";
|
|
4
|
+
//#region src/components/organisms/form/index.d.ts
|
|
5
|
+
type FormComponent = typeof Form$1 & {
|
|
6
|
+
Field: typeof Field;
|
|
7
|
+
Control: typeof Control;
|
|
8
|
+
};
|
|
9
|
+
declare const Form: FormComponent;
|
|
10
|
+
//#endregion
|
|
11
|
+
export { type Props as ControlProps, type Props$1 as FieldProps, type Props$2 as Props, Form as default };
|
|
12
|
+
//# sourceMappingURL=Form.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Form.d.mts","names":["FormImpl"],"sources":["../src/components/organisms/form/index.ts"],"mappings":";;;;KAIK,uBAAuBA;EAC1B,cAAc;EACd,gBAAgB;;cAGZ,MAAmB"}
|
package/dist/Form.mjs
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import Control from "./components/organisms/form/control.mjs";
|
|
2
|
+
import Field from "./components/organisms/form/field.mjs";
|
|
3
|
+
import Form$1 from "./components/organisms/form/form.mjs";
|
|
4
|
+
//#region src/components/organisms/form/index.ts
|
|
5
|
+
const Form = Form$1;
|
|
6
|
+
Form.Field = Field;
|
|
7
|
+
Form.Control = Control;
|
|
8
|
+
//#endregion
|
|
9
|
+
export { Form as default };
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=Form.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Form.mjs","names":["FormImpl"],"sources":["../src/components/organisms/form/index.ts"],"sourcesContent":["import Control from './control';\nimport Field from './field';\nimport FormImpl, { type Props } from './form';\n\ntype FormComponent = typeof FormImpl & {\n Field: typeof Field;\n Control: typeof Control;\n};\n\nconst Form = FormImpl as FormComponent;\n\nForm.Field = Field;\nForm.Control = Control;\n\nexport default Form;\nexport type { Props };\nexport type { Props as FieldProps } from './field';\nexport type { Props as ControlProps } from './control';\n"],"mappings":";;;;AASA,MAAM,OAAOA;AAEb,KAAK,QAAQ;AACb,KAAK,UAAU"}
|
package/dist/Input.d.mts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import Input$1, { Props as Props$2 } from "./components/atoms/input/input.mjs";
|
|
2
|
+
import Number, { Props } from "./components/atoms/input/number.mjs";
|
|
3
|
+
import OTP, { Props as Props$1 } from "./components/atoms/input/otp.mjs";
|
|
4
|
+
import Search from "./components/atoms/input/search.mjs";
|
|
5
|
+
import TextArea from "./components/atoms/input/text-area.mjs";
|
|
6
|
+
//#region src/components/atoms/input/index.d.ts
|
|
7
|
+
type InputComponent = typeof Input$1 & {
|
|
8
|
+
Search: typeof Search;
|
|
9
|
+
Number: typeof Number;
|
|
10
|
+
OTP: typeof OTP;
|
|
11
|
+
TextArea: typeof TextArea;
|
|
12
|
+
};
|
|
13
|
+
declare const Input: InputComponent;
|
|
14
|
+
//#endregion
|
|
15
|
+
export { Number, type Props as NumberProps, OTP, type Props$1 as OTPProps, type Props$2 as Props, Search, TextArea, Input as default };
|
|
16
|
+
//# sourceMappingURL=Input.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Input.d.mts","names":["InputImpl"],"sources":["../src/components/atoms/input/index.ts"],"mappings":";;;;;;KAMK,wBAAwBA;EAC3B,eAAe;EACf,eAAe;EACf,YAAY;EACZ,iBAAiB;;cAGb,OAAqB"}
|
package/dist/Input.mjs
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import Input$1 from "./components/atoms/input/input.mjs";
|
|
2
|
+
import Number from "./components/atoms/input/number.mjs";
|
|
3
|
+
import OTP from "./components/atoms/input/otp.mjs";
|
|
4
|
+
import Search from "./components/atoms/input/search.mjs";
|
|
5
|
+
import TextArea from "./components/atoms/input/text-area.mjs";
|
|
6
|
+
//#region src/components/atoms/input/index.ts
|
|
7
|
+
const Input = Input$1;
|
|
8
|
+
Input.Search = Search;
|
|
9
|
+
Input.Number = Number;
|
|
10
|
+
Input.OTP = OTP;
|
|
11
|
+
Input.TextArea = TextArea;
|
|
12
|
+
//#endregion
|
|
13
|
+
export { Number, OTP, Search, TextArea, Input as default };
|
|
14
|
+
|
|
15
|
+
//# sourceMappingURL=Input.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Input.mjs","names":["InputImpl"],"sources":["../src/components/atoms/input/index.ts"],"sourcesContent":["import InputImpl, { type Props } from './input';\nimport Number from './number';\nimport OTP from './otp';\nimport Search from './search';\nimport TextArea from './text-area';\n\ntype InputComponent = typeof InputImpl & {\n Search: typeof Search;\n Number: typeof Number;\n OTP: typeof OTP;\n TextArea: typeof TextArea;\n};\n\nconst Input = InputImpl as InputComponent;\n\nInput.Search = Search;\nInput.Number = Number;\nInput.OTP = OTP;\nInput.TextArea = TextArea;\n\nexport { Number, OTP, Search, TextArea };\nexport type { Props as OTPProps } from './otp';\nexport type { Props as NumberProps } from './number';\nexport default Input;\nexport type { Props };\n"],"mappings":";;;;;;AAaA,MAAM,QAAQA;AAEd,MAAM,SAAS;AACf,MAAM,SAAS;AACf,MAAM,MAAM;AACZ,MAAM,WAAW"}
|
package/dist/Layout.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Layout.d.mts","names":[],"sources":["../src/components/templates/layout/index.ts"],"mappings":";;;;;;KAMK,
|
|
1
|
+
{"version":3,"file":"Layout.d.mts","names":["LayoutImpl"],"sources":["../src/components/templates/layout/index.ts"],"mappings":";;;;;;KAMK,yBAAyBA;EAC5B,gBAAgB;EAChB,eAAe;EACf,eAAe;EACf,cAAc;;cAGV,QAAuB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import Item from "./item.mjs";
|
|
2
|
-
import List$1, { Props } from "./list.mjs";
|
|
1
|
+
import Item from "./components/organisms/list/item.mjs";
|
|
2
|
+
import List$1, { Props } from "./components/organisms/list/list.mjs";
|
|
3
3
|
//#region src/components/organisms/list/index.d.ts
|
|
4
4
|
type ListComponent = typeof List$1 & {
|
|
5
5
|
Item: typeof Item;
|
|
@@ -7,4 +7,4 @@ type ListComponent = typeof List$1 & {
|
|
|
7
7
|
declare const List: ListComponent;
|
|
8
8
|
//#endregion
|
|
9
9
|
export { type Props as ListProps, List as default };
|
|
10
|
-
//# sourceMappingURL=
|
|
10
|
+
//# sourceMappingURL=List.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"List.d.mts","names":["ListImpl"],"sources":["../src/components/organisms/list/index.ts"],"mappings":";;;KAGK,uBAAuBA;EAAa,aAAa;;cAEhD,MAAmB"}
|
package/dist/List.mjs
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import Item from "./components/organisms/list/item.mjs";
|
|
2
|
+
import List$1 from "./components/organisms/list/list.mjs";
|
|
3
|
+
//#region src/components/organisms/list/index.ts
|
|
4
|
+
const List = List$1;
|
|
5
|
+
List.Item = Item;
|
|
6
|
+
//#endregion
|
|
7
|
+
export { List as default };
|
|
8
|
+
|
|
9
|
+
//# sourceMappingURL=List.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"List.mjs","names":["ListImpl"],"sources":["../src/components/organisms/list/index.ts"],"sourcesContent":["import Item from './item';\nimport ListImpl from './list';\n\ntype ListComponent = typeof ListImpl & { Item: typeof Item };\n\nconst List = ListImpl as ListComponent;\n\nList.Item = Item;\n\nexport default List;\nexport type { Props as ListProps } from './list';\n"],"mappings":";;;AAKA,MAAM,OAAOA;AAEb,KAAK,OAAO"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import Item, { ItemProps } from "./components/molecules/marquees/item.mjs";
|
|
2
|
+
import Marquees$1, { Props } from "./components/molecules/marquees/marquees.mjs";
|
|
3
|
+
//#region src/components/molecules/marquees/index.d.ts
|
|
4
|
+
type MarqueesComponent = typeof Marquees$1 & {
|
|
5
|
+
Item: typeof Item;
|
|
6
|
+
};
|
|
7
|
+
declare const Marquees: MarqueesComponent;
|
|
8
|
+
//#endregion
|
|
9
|
+
export { Item, type ItemProps, type Props as MarqueesProps, type Props, Marquees as default };
|
|
10
|
+
//# sourceMappingURL=Marquees.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Marquees.d.mts","names":["MarqueesImpl"],"sources":["../src/components/molecules/marquees/index.ts"],"mappings":";;;KAGK,2BAA2BA;EAAiB,aAAa;;cAExD,UAA2B"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import Item from "./components/molecules/marquees/item.mjs";
|
|
2
|
+
import Marquees$1 from "./components/molecules/marquees/marquees.mjs";
|
|
3
|
+
//#region src/components/molecules/marquees/index.ts
|
|
4
|
+
const Marquees = Marquees$1;
|
|
5
|
+
Marquees.Item = Item;
|
|
6
|
+
//#endregion
|
|
7
|
+
export { Item, Marquees as default };
|
|
8
|
+
|
|
9
|
+
//# sourceMappingURL=Marquees.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Marquees.mjs","names":["MarqueesImpl"],"sources":["../src/components/molecules/marquees/index.ts"],"sourcesContent":["import Item from './item';\nimport MarqueesImpl, { type Props } from './marquees';\n\ntype MarqueesComponent = typeof MarqueesImpl & { Item: typeof Item };\n\nconst Marquees = MarqueesImpl as MarqueesComponent;\n\nMarquees.Item = Item;\n\nexport default Marquees;\nexport { Item };\nexport type { ItemProps } from './item';\nexport type { Props, Props as MarqueesProps };\n"],"mappings":";;;AAKA,MAAM,WAAWA;AAEjB,SAAS,OAAO"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { ComponentPropsWithRef, ReactNode } from "react";
|
|
2
|
+
//#region src/components/atoms/mentions.d.ts
|
|
3
|
+
export interface Option {
|
|
4
|
+
/** Unique, non-empty token text without whitespace or the prefix. */
|
|
5
|
+
value: string;
|
|
6
|
+
label?: string;
|
|
7
|
+
prefix?: string;
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface Props extends Omit<ComponentPropsWithRef<'textarea'>, 'children' | 'value' | 'defaultValue' | 'onChange' | 'onSelect'> {
|
|
11
|
+
options: readonly Option[];
|
|
12
|
+
value?: string;
|
|
13
|
+
defaultValue?: string;
|
|
14
|
+
onChange?: (value: string) => void;
|
|
15
|
+
onSelect?: (option: Option, prefix: string) => void;
|
|
16
|
+
onSearch?: (query: string, prefix: string) => void;
|
|
17
|
+
prefixes?: readonly string[];
|
|
18
|
+
filterOption?: false | ((query: string, option: Option) => boolean);
|
|
19
|
+
loading?: boolean;
|
|
20
|
+
loadingText?: ReactNode;
|
|
21
|
+
emptyText?: ReactNode;
|
|
22
|
+
container?: HTMLElement;
|
|
23
|
+
classNames?: {
|
|
24
|
+
root?: string;
|
|
25
|
+
content?: string;
|
|
26
|
+
list?: string;
|
|
27
|
+
option?: string;
|
|
28
|
+
empty?: string;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
declare const Mentions: ({ options, value, defaultValue, onChange, onSelect, onSearch, prefixes, filterOption, loading, loadingText, emptyText, container, disabled, readOnly, name, form, className, classNames, dir, ref, onFocus, onBlur, onClick, onKeyDown, onKeyUp, onCompositionStart, onCompositionEnd, ...props }: Props) => import("react").JSX.Element;
|
|
32
|
+
//#endregion
|
|
33
|
+
export { Mentions as default };
|
|
34
|
+
//# sourceMappingURL=Mentions.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Mentions.d.mts","names":[],"sources":["../src/components/atoms/mentions.tsx"],"mappings":";;iBAwBiB;;EAEf;EACA;EACA;EACA;;iBAGe,cAAc,KAC7B;EAGA,kBAAkB;EAClB;EACA;EACA,YAAY;EACZ,YAAY,QAAQ,QAAQ;EAC5B,YAAY,eAAe;EAC3B;EACA,yBAAyB,eAAe,QAAQ;EAChD;EACA,cAAc;EACd,YAAY;EACZ,YAAY;EACZ;IACE;IACA;IACA;IACA;IACA;;;cAkBE,aAAY,SAAA,OAAA,cAAA,UAAA,UAAA,UAAA,UAAA,cAAA,SAAA,aAAA,WAAA,WAAA,UAAA,UAAA,MAAA,MAAA,WAAA,YAAA,KAAA,KAAA,SAAA,QAAA,SAAA,WAAA,SAAA,oBAAA,qBAAA,SA6Bf,0BAAK,IAAA"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cn } from "./utils.mjs";
|
|
3
|
+
import { useConfig } from "./providers/config/context.mjs";
|
|
4
|
+
import { autocomplete_exports } from "./core/autocomplete.mjs";
|
|
5
|
+
import Input from "./Input.mjs";
|
|
6
|
+
import { findToken, insertToken } from "./components/atoms/mentions-token.mjs";
|
|
7
|
+
import { useEffect, useRef, useState } from "react";
|
|
8
|
+
import { useControllableState, useLatest, useMergedRef } from "@jbpark/use-hooks";
|
|
9
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
10
|
+
//#region src/components/atoms/mentions.tsx
|
|
11
|
+
const DEFAULT_PREFIXES = ["@"];
|
|
12
|
+
function TextareaBridge({ primitiveRef, ref, ...props }) {
|
|
13
|
+
const mergedRef = useMergedRef(primitiveRef, ref);
|
|
14
|
+
return /* @__PURE__ */ jsx(Input.TextArea, {
|
|
15
|
+
...props,
|
|
16
|
+
ref: mergedRef
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
const Mentions = ({ options, value, defaultValue = "", onChange, onSelect, onSearch, prefixes = DEFAULT_PREFIXES, filterOption, loading = false, loadingText = "Loading suggestions…", emptyText = "No suggestions", container, disabled, readOnly, name, form, className, classNames, dir, ref, onFocus, onBlur, onClick, onKeyDown, onKeyUp, onCompositionStart, onCompositionEnd, ...props }) => {
|
|
20
|
+
const { direction } = useConfig();
|
|
21
|
+
const textareaRef = useRef(null);
|
|
22
|
+
const mergedRef = useMergedRef(ref, textareaRef);
|
|
23
|
+
const composingRef = useRef(false);
|
|
24
|
+
const pendingCaret = useRef(null);
|
|
25
|
+
const [text, setText] = useControllableState({
|
|
26
|
+
value,
|
|
27
|
+
defaultValue,
|
|
28
|
+
onChange
|
|
29
|
+
});
|
|
30
|
+
const [focused, setFocused] = useState(false);
|
|
31
|
+
const [composing, setComposing] = useState(false);
|
|
32
|
+
const [selection, setSelection] = useState({
|
|
33
|
+
text: "",
|
|
34
|
+
start: 0,
|
|
35
|
+
end: 0
|
|
36
|
+
});
|
|
37
|
+
const [dismissed, setDismissed] = useState([]);
|
|
38
|
+
const token = focused && !composing && !disabled && !readOnly && selection.text === text ? findToken(text, selection.start, selection.end, prefixes) : null;
|
|
39
|
+
const signature = token ? JSON.stringify([
|
|
40
|
+
text,
|
|
41
|
+
selection.start,
|
|
42
|
+
selection.end,
|
|
43
|
+
token.prefix
|
|
44
|
+
]) : null;
|
|
45
|
+
const open = token !== null && !dismissed.includes(signature);
|
|
46
|
+
const query = token?.query;
|
|
47
|
+
const prefix = token?.prefix;
|
|
48
|
+
const searchRef = useLatest(onSearch);
|
|
49
|
+
useEffect(() => {
|
|
50
|
+
if (query !== void 0 && prefix !== void 0) searchRef.current?.(query, prefix);
|
|
51
|
+
}, [
|
|
52
|
+
query,
|
|
53
|
+
prefix,
|
|
54
|
+
searchRef
|
|
55
|
+
]);
|
|
56
|
+
useEffect(() => {
|
|
57
|
+
const pending = pendingCaret.current;
|
|
58
|
+
const textarea = textareaRef.current;
|
|
59
|
+
if (pending && textarea && text === pending.value) {
|
|
60
|
+
pendingCaret.current = null;
|
|
61
|
+
if (textarea.ownerDocument.activeElement === textarea) textarea.setSelectionRange(pending.caret, pending.caret);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
const syncSelection = (textarea) => {
|
|
65
|
+
setSelection((previous) => {
|
|
66
|
+
const next = {
|
|
67
|
+
text: textarea.value,
|
|
68
|
+
start: textarea.selectionStart,
|
|
69
|
+
end: textarea.selectionEnd
|
|
70
|
+
};
|
|
71
|
+
return previous.text === next.text && previous.start === next.start && previous.end === next.end ? previous : next;
|
|
72
|
+
});
|
|
73
|
+
};
|
|
74
|
+
const filtered = options.filter((option) => {
|
|
75
|
+
if (!option.value || /\s/u.test(option.value) || prefixes.some((prefix) => prefix.length > 0 && option.value.startsWith(prefix)) || option.prefix !== void 0 && option.prefix !== prefix) return false;
|
|
76
|
+
if (filterOption === false) return true;
|
|
77
|
+
return filterOption ? filterOption(query ?? "", option) : [option.value, option.label ?? ""].some((label) => label.toLowerCase().includes((query ?? "").toLowerCase()));
|
|
78
|
+
});
|
|
79
|
+
const select = (option) => {
|
|
80
|
+
const textarea = textareaRef.current;
|
|
81
|
+
if (!open || !textarea || composingRef.current || option.disabled || disabled || readOnly || textarea.value !== text) return;
|
|
82
|
+
const currentToken = findToken(text, textarea.selectionStart, textarea.selectionEnd, prefixes);
|
|
83
|
+
if (!currentToken || currentToken.start !== token?.start || currentToken.query !== token.query || currentToken.prefix !== option.prefix && option.prefix !== void 0) return;
|
|
84
|
+
const next = insertToken(text, currentToken, option.value);
|
|
85
|
+
pendingCaret.current = next;
|
|
86
|
+
setDismissed([signature, JSON.stringify([
|
|
87
|
+
next.value,
|
|
88
|
+
next.caret,
|
|
89
|
+
next.caret,
|
|
90
|
+
currentToken.prefix
|
|
91
|
+
])]);
|
|
92
|
+
setText(next.value);
|
|
93
|
+
onSelect?.(option, currentToken.prefix);
|
|
94
|
+
};
|
|
95
|
+
const { Autocomplete: Root, AutocompleteInput, AutocompleteContent, AutocompleteList, AutocompleteItem } = autocomplete_exports;
|
|
96
|
+
return /* @__PURE__ */ jsx("div", {
|
|
97
|
+
"data-slot": "mentions",
|
|
98
|
+
dir: dir ?? direction,
|
|
99
|
+
className: cn("relative min-w-0", classNames?.root),
|
|
100
|
+
children: /* @__PURE__ */ jsxs(Root, {
|
|
101
|
+
items: loading ? [] : filtered,
|
|
102
|
+
filter: null,
|
|
103
|
+
value: text,
|
|
104
|
+
defaultValue,
|
|
105
|
+
onValueChange: (next, details) => {
|
|
106
|
+
if (details.reason === "item-press" || details.reason === "escape-key") {
|
|
107
|
+
details.cancel();
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
pendingCaret.current = null;
|
|
111
|
+
setText(next);
|
|
112
|
+
if (textareaRef.current) syncSelection(textareaRef.current);
|
|
113
|
+
},
|
|
114
|
+
disabled,
|
|
115
|
+
readOnly,
|
|
116
|
+
name,
|
|
117
|
+
form,
|
|
118
|
+
open,
|
|
119
|
+
onOpenChange: (next) => {
|
|
120
|
+
if (!next) setDismissed([signature]);
|
|
121
|
+
},
|
|
122
|
+
itemToStringValue: (option) => option.value,
|
|
123
|
+
children: [/* @__PURE__ */ jsx(AutocompleteInput, { render: (inputProps) => {
|
|
124
|
+
const native = inputProps;
|
|
125
|
+
return /* @__PURE__ */ jsx(TextareaBridge, {
|
|
126
|
+
...native,
|
|
127
|
+
...props,
|
|
128
|
+
ref: mergedRef,
|
|
129
|
+
primitiveRef: native.ref,
|
|
130
|
+
dir: dir ?? direction,
|
|
131
|
+
"data-slot": "mentions-input",
|
|
132
|
+
className: cn(native.className, className),
|
|
133
|
+
onFocus: (event) => {
|
|
134
|
+
onFocus?.(event);
|
|
135
|
+
native.onFocus?.(event);
|
|
136
|
+
setFocused(true);
|
|
137
|
+
setDismissed([]);
|
|
138
|
+
syncSelection(event.currentTarget);
|
|
139
|
+
},
|
|
140
|
+
onBlur: (event) => {
|
|
141
|
+
onBlur?.(event);
|
|
142
|
+
native.onBlur?.(event);
|
|
143
|
+
setFocused(false);
|
|
144
|
+
},
|
|
145
|
+
onSelect: (event) => syncSelection(event.currentTarget),
|
|
146
|
+
onClick: (event) => {
|
|
147
|
+
onClick?.(event);
|
|
148
|
+
native.onClick?.(event);
|
|
149
|
+
syncSelection(event.currentTarget);
|
|
150
|
+
},
|
|
151
|
+
onKeyDown: (event) => {
|
|
152
|
+
onKeyDown?.(event);
|
|
153
|
+
if (event.defaultPrevented) return;
|
|
154
|
+
if (!open || composingRef.current || event.nativeEvent.isComposing || event.keyCode === 229 || event.key === "Home" || event.key === "End") return;
|
|
155
|
+
native.onKeyDown?.(event);
|
|
156
|
+
},
|
|
157
|
+
onKeyUp: (event) => {
|
|
158
|
+
onKeyUp?.(event);
|
|
159
|
+
native.onKeyUp?.(event);
|
|
160
|
+
syncSelection(event.currentTarget);
|
|
161
|
+
},
|
|
162
|
+
onCompositionStart: (event) => {
|
|
163
|
+
composingRef.current = true;
|
|
164
|
+
setComposing(true);
|
|
165
|
+
onCompositionStart?.(event);
|
|
166
|
+
native.onCompositionStart?.(event);
|
|
167
|
+
},
|
|
168
|
+
onCompositionEnd: (event) => {
|
|
169
|
+
composingRef.current = false;
|
|
170
|
+
setComposing(false);
|
|
171
|
+
onCompositionEnd?.(event);
|
|
172
|
+
native.onCompositionEnd?.(event);
|
|
173
|
+
syncSelection(event.currentTarget);
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
} }), /* @__PURE__ */ jsxs(AutocompleteContent, {
|
|
177
|
+
container,
|
|
178
|
+
dir: dir ?? direction,
|
|
179
|
+
className: classNames?.content,
|
|
180
|
+
children: [(loading || filtered.length === 0) && /* @__PURE__ */ jsx("div", {
|
|
181
|
+
role: "status",
|
|
182
|
+
className: cn("text-muted-foreground px-3 py-2 text-sm", classNames?.empty),
|
|
183
|
+
children: loading ? loadingText : emptyText
|
|
184
|
+
}), /* @__PURE__ */ jsx(AutocompleteList, {
|
|
185
|
+
className: cn("max-h-60 overflow-y-auto p-1", classNames?.list),
|
|
186
|
+
children: (option) => /* @__PURE__ */ jsx(AutocompleteItem, {
|
|
187
|
+
value: option,
|
|
188
|
+
disabled: option.disabled,
|
|
189
|
+
onMouseUp: (event) => event.preventBaseUIHandler(),
|
|
190
|
+
onClick: (event) => {
|
|
191
|
+
event.preventBaseUIHandler();
|
|
192
|
+
select(option);
|
|
193
|
+
},
|
|
194
|
+
className: cn(`data-highlighted:bg-accent
|
|
195
|
+
data-highlighted:text-accent-foreground cursor-default
|
|
196
|
+
rounded-sm px-2 py-1.5 text-sm [overflow-wrap:anywhere]
|
|
197
|
+
outline-none data-disabled:opacity-50`, classNames?.option),
|
|
198
|
+
children: option.label ?? option.value
|
|
199
|
+
}, option.value)
|
|
200
|
+
})]
|
|
201
|
+
})]
|
|
202
|
+
})
|
|
203
|
+
});
|
|
204
|
+
};
|
|
205
|
+
//#endregion
|
|
206
|
+
export { Mentions as default };
|
|
207
|
+
|
|
208
|
+
//# sourceMappingURL=Mentions.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Mentions.mjs","names":["autocomplete"],"sources":["../src/components/atoms/mentions.tsx"],"sourcesContent":["'use client';\n\nimport {\n type ComponentPropsWithRef,\n type ReactNode,\n type Ref,\n useEffect,\n useRef,\n useState,\n} from 'react';\n\nimport {\n useControllableState,\n useLatest,\n useMergedRef,\n} from '@jbpark/use-hooks';\n\nimport { useConfig } from '@repo/ui/providers';\nimport { cn } from '@repo/ui/utils';\n\nimport { autocomplete } from '../../core';\nimport Input from './input';\nimport { findToken, insertToken } from './mentions-token';\n\nexport interface Option {\n /** Unique, non-empty token text without whitespace or the prefix. */\n value: string;\n label?: string;\n prefix?: string;\n disabled?: boolean;\n}\n\nexport interface Props extends Omit<\n ComponentPropsWithRef<'textarea'>,\n 'children' | 'value' | 'defaultValue' | 'onChange' | 'onSelect'\n> {\n options: readonly Option[];\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n onSelect?: (option: Option, prefix: string) => void;\n onSearch?: (query: string, prefix: string) => void;\n prefixes?: readonly string[];\n filterOption?: false | ((query: string, option: Option) => boolean);\n loading?: boolean;\n loadingText?: ReactNode;\n emptyText?: ReactNode;\n container?: HTMLElement;\n classNames?: {\n root?: string;\n content?: string;\n list?: string;\n option?: string;\n empty?: string;\n };\n}\n\nconst DEFAULT_PREFIXES = ['@'];\n\nfunction TextareaBridge({\n primitiveRef,\n ref,\n ...props\n}: ComponentPropsWithRef<'textarea'> & {\n primitiveRef?: Ref<HTMLTextAreaElement>;\n}) {\n const mergedRef = useMergedRef(primitiveRef, ref);\n\n return <Input.TextArea {...props} ref={mergedRef} />;\n}\n\nconst Mentions = ({\n options,\n value,\n defaultValue = '',\n onChange,\n onSelect,\n onSearch,\n prefixes = DEFAULT_PREFIXES,\n filterOption,\n loading = false,\n loadingText = 'Loading suggestions…',\n emptyText = 'No suggestions',\n container,\n disabled,\n readOnly,\n name,\n form,\n className,\n classNames,\n dir,\n ref,\n onFocus,\n onBlur,\n onClick,\n onKeyDown,\n onKeyUp,\n onCompositionStart,\n onCompositionEnd,\n ...props\n}: Props) => {\n const { direction } = useConfig();\n const textareaRef = useRef<HTMLTextAreaElement | null>(null);\n const mergedRef = useMergedRef(ref, textareaRef);\n const composingRef = useRef(false);\n const pendingCaret = useRef<{ value: string; caret: number } | null>(null);\n const [text, setText] = useControllableState<string>({\n value,\n defaultValue,\n onChange,\n });\n const [focused, setFocused] = useState(false);\n const [composing, setComposing] = useState(false);\n const [selection, setSelection] = useState({ text: '', start: 0, end: 0 });\n const [dismissed, setDismissed] = useState<readonly (string | null)[]>([]);\n const token =\n focused && !composing && !disabled && !readOnly && selection.text === text\n ? findToken(text, selection.start, selection.end, prefixes)\n : null;\n const signature = token\n ? JSON.stringify([text, selection.start, selection.end, token.prefix])\n : null;\n const open = token !== null && !dismissed.includes(signature);\n const query = token?.query;\n const prefix = token?.prefix;\n const searchRef = useLatest(onSearch);\n\n useEffect(() => {\n if (query !== undefined && prefix !== undefined) {\n searchRef.current?.(query, prefix);\n }\n }, [query, prefix, searchRef]);\n\n useEffect(() => {\n const pending = pendingCaret.current;\n const textarea = textareaRef.current;\n\n if (pending && textarea && text === pending.value) {\n pendingCaret.current = null;\n\n if (textarea.ownerDocument.activeElement === textarea) {\n textarea.setSelectionRange(pending.caret, pending.caret);\n }\n }\n });\n\n const syncSelection = (textarea: HTMLTextAreaElement) => {\n setSelection(previous => {\n const next = {\n text: textarea.value,\n start: textarea.selectionStart,\n end: textarea.selectionEnd,\n };\n\n return previous.text === next.text &&\n previous.start === next.start &&\n previous.end === next.end\n ? previous\n : next;\n });\n };\n const filtered = options.filter(option => {\n if (\n !option.value ||\n /\\s/u.test(option.value) ||\n prefixes.some(\n prefix => prefix.length > 0 && option.value.startsWith(prefix),\n ) ||\n (option.prefix !== undefined && option.prefix !== prefix)\n ) {\n return false;\n }\n\n if (filterOption === false) {\n return true;\n }\n\n return filterOption\n ? filterOption(query ?? '', option)\n : [option.value, option.label ?? ''].some(label =>\n label.toLowerCase().includes((query ?? '').toLowerCase()),\n );\n });\n const select = (option: Option) => {\n const textarea = textareaRef.current;\n\n if (\n !open ||\n !textarea ||\n composingRef.current ||\n option.disabled ||\n disabled ||\n readOnly ||\n textarea.value !== text\n ) {\n return;\n }\n\n const currentToken = findToken(\n text,\n textarea.selectionStart,\n textarea.selectionEnd,\n prefixes,\n );\n\n if (\n !currentToken ||\n currentToken.start !== token?.start ||\n currentToken.query !== token.query ||\n (currentToken.prefix !== option.prefix && option.prefix !== undefined)\n ) {\n return;\n }\n\n const next = insertToken(text, currentToken, option.value);\n\n pendingCaret.current = next;\n setDismissed([\n signature,\n JSON.stringify([next.value, next.caret, next.caret, currentToken.prefix]),\n ]);\n setText(next.value);\n onSelect?.(option, currentToken.prefix);\n };\n const {\n Autocomplete: Root,\n AutocompleteInput,\n AutocompleteContent,\n AutocompleteList,\n AutocompleteItem,\n } = autocomplete;\n\n return (\n <div\n data-slot=\"mentions\"\n dir={dir ?? direction}\n className={cn(\n 'relative min-w-0',\n classNames?.root, //\n )}\n >\n <Root\n items={loading ? [] : filtered}\n filter={null}\n value={text}\n defaultValue={defaultValue}\n onValueChange={(next, details) => {\n if (\n details.reason === 'item-press' ||\n details.reason === 'escape-key'\n ) {\n details.cancel();\n\n return;\n }\n\n pendingCaret.current = null;\n setText(next);\n\n if (textareaRef.current) {\n syncSelection(textareaRef.current);\n }\n }}\n disabled={disabled}\n readOnly={readOnly}\n name={name}\n form={form}\n open={open}\n onOpenChange={next => {\n if (!next) {\n setDismissed([signature]);\n }\n }}\n itemToStringValue={option => option.value}\n >\n <AutocompleteInput\n render={inputProps => {\n // Base UI's input handlers use the shared text-control DOM contract.\n // Adapt their input-only types while preserving the textarea atom.\n const native =\n inputProps as unknown as ComponentPropsWithRef<'textarea'>;\n\n return (\n <TextareaBridge\n {...native}\n {...props}\n ref={mergedRef}\n primitiveRef={native.ref}\n dir={dir ?? direction}\n data-slot=\"mentions-input\"\n className={cn(\n native.className,\n className, //\n )}\n onFocus={event => {\n onFocus?.(event);\n native.onFocus?.(event);\n setFocused(true);\n setDismissed([]);\n syncSelection(event.currentTarget);\n }}\n onBlur={event => {\n onBlur?.(event);\n native.onBlur?.(event);\n setFocused(false);\n }}\n onSelect={event => syncSelection(event.currentTarget)}\n onClick={event => {\n onClick?.(event);\n native.onClick?.(event);\n syncSelection(event.currentTarget);\n }}\n onKeyDown={event => {\n onKeyDown?.(event);\n\n if (event.defaultPrevented) {\n return;\n }\n\n if (\n !open ||\n composingRef.current ||\n event.nativeEvent.isComposing ||\n event.keyCode === 229 ||\n event.key === 'Home' ||\n event.key === 'End'\n ) {\n return;\n }\n\n native.onKeyDown?.(event);\n }}\n onKeyUp={event => {\n onKeyUp?.(event);\n native.onKeyUp?.(event);\n syncSelection(event.currentTarget);\n }}\n onCompositionStart={event => {\n composingRef.current = true;\n setComposing(true);\n onCompositionStart?.(event);\n native.onCompositionStart?.(event);\n }}\n onCompositionEnd={event => {\n composingRef.current = false;\n setComposing(false);\n onCompositionEnd?.(event);\n native.onCompositionEnd?.(event);\n syncSelection(event.currentTarget);\n }}\n />\n );\n }}\n />\n <AutocompleteContent\n container={container}\n dir={dir ?? direction}\n className={classNames?.content}\n >\n {(loading || filtered.length === 0) && (\n <div\n role=\"status\"\n className={cn(\n 'text-muted-foreground px-3 py-2 text-sm',\n classNames?.empty, //\n )}\n >\n {loading ? loadingText : emptyText}\n </div>\n )}\n <AutocompleteList\n className={cn(\n 'max-h-60 overflow-y-auto p-1',\n classNames?.list, //\n )}\n >\n {(option: Option) => (\n <AutocompleteItem\n key={option.value}\n value={option}\n disabled={option.disabled}\n onMouseUp={event => event.preventBaseUIHandler()}\n onClick={event => {\n event.preventBaseUIHandler();\n select(option);\n }}\n className={cn(\n `data-highlighted:bg-accent\n data-highlighted:text-accent-foreground cursor-default\n rounded-sm px-2 py-1.5 text-sm [overflow-wrap:anywhere]\n outline-none data-disabled:opacity-50`,\n classNames?.option, //\n )}\n >\n {option.label ?? option.value}\n </AutocompleteItem>\n )}\n </AutocompleteList>\n </AutocompleteContent>\n </Root>\n </div>\n );\n};\n\nexport default Mentions;\n"],"mappings":"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"}
|
package/dist/Menu.mjs
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { MENU_CLASSNAMES, buildSelectionMap, Menu as default, findKey };
|
|
1
|
+
export { MENU_CLASSNAMES, buildSelectionMap, default, findKey } from "./components/molecules/menu/menu.mjs";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
//#region src/components/organisms/modal.d.ts
|
|
3
|
-
interface Props {
|
|
3
|
+
export interface Props {
|
|
4
4
|
open?: boolean;
|
|
5
5
|
maskClosable?: boolean;
|
|
6
6
|
closable?: boolean | {
|
|
@@ -25,6 +25,8 @@ interface Props {
|
|
|
25
25
|
children?: React.ReactNode;
|
|
26
26
|
onOk?: () => void;
|
|
27
27
|
onCancel?: () => void;
|
|
28
|
+
/** Called after the opening or closing animations finish. */
|
|
29
|
+
onOpenChangeComplete?: (open: boolean) => void;
|
|
28
30
|
}
|
|
29
31
|
type ModalStatus = 'info' | 'success' | 'error' | 'warning';
|
|
30
32
|
interface StaticProps extends Props {
|
|
@@ -40,7 +42,8 @@ interface StaticProps extends Props {
|
|
|
40
42
|
container?: HTMLElement;
|
|
41
43
|
}
|
|
42
44
|
declare const Modal: {
|
|
43
|
-
({ open, maskClosable, closable, closeIcon, className, classNames, style, title, content, footer, container, children, okText, cancelText, onOk, onCancel, ...props }: Props): React.JSX.Element | null;
|
|
45
|
+
({ open, maskClosable, closable, closeIcon, className, classNames, style, title, content, footer, container, children, okText, cancelText, onOk, onCancel, onOpenChangeComplete, ...props }: Props): React.JSX.Element | null;
|
|
46
|
+
/** Immediately removes a modal without waiting for its closing animation. */
|
|
44
47
|
destroy: (id?: string) => void;
|
|
45
48
|
destroyAll(): void;
|
|
46
49
|
info(props: StaticProps): string | undefined;
|
|
@@ -50,5 +53,5 @@ declare const Modal: {
|
|
|
50
53
|
confirm(props: StaticProps): string | undefined;
|
|
51
54
|
};
|
|
52
55
|
//#endregion
|
|
53
|
-
export {
|
|
54
|
-
//# sourceMappingURL=
|
|
56
|
+
export { Modal as default };
|
|
57
|
+
//# sourceMappingURL=Modal.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Modal.d.mts","names":[],"sources":["../src/components/organisms/modal.tsx"],"mappings":";;iBAiCiB;EACf;EACA;EACA;IAGM,YAAY,MAAM;IAClB;;EAEN,YAAY,MAAM;EAClB,QAAQ,MAAM;EACd,UAAU,MAAM;EAChB,SAAS,MAAM;EACf;EACA;IACE;IACA;IACA;IACA;;EAEF,QAAQ,MAAM;EACd;EACA;EACA,YAAY;EACZ,WAAW,MAAM;EACjB;EACA;;EAEA,wBAAwB;;KAGrB;UAEK,oBAAoB;EAC5B,SAAS;;;;;;EAMT;EACA;EACA,OAAO,MAAM;EACb,YAAY;;cAGR;KAmBH,MAAA,cAAA,UAAA,WAAA,WAAA,YAAA,OAAA,OAAA,SAAA,QAAA,WAAA,UAAA,QAAA,YAAA,MAAA,UAAA,yBAAA,SAAA,QAAK,MAAA,IAAA;;;;EA2Oa,KAAA,OAAA;EAEG,QAAA,OAAA;EAEF,MAAA,OAAA;EAEE,QAAA,OAAA;EAIA,QAAA,OAAA"}
|
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { cn } from "
|
|
3
|
-
import { DEFAULT_LOCALE, useConfig } from "
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import { createImperativeStack, isBrowser } from "./imperative-stack.mjs";
|
|
7
|
-
import {
|
|
8
|
-
import { useState } from "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 { dialog_exports } from "./core/dialog.mjs";
|
|
6
|
+
import { createImperativeStack, isBrowser } from "./components/organisms/imperative-stack.mjs";
|
|
7
|
+
import { useRef, useState } from "react";
|
|
9
8
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
9
|
+
import { Check, CircleQuestionMark, Info, OctagonAlert, OctagonX } from "lucide-react";
|
|
10
10
|
import { createPortal } from "react-dom";
|
|
11
11
|
//#region src/components/organisms/modal.tsx
|
|
12
12
|
const { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } = dialog_exports;
|
|
13
|
-
const Modal = ({ open = false, maskClosable, closable = false, closeIcon, className, classNames, style, title, content, footer, container, children, okText, cancelText, onOk, onCancel, ...props }) => {
|
|
13
|
+
const Modal = ({ open = false, maskClosable, closable = false, closeIcon, className, classNames, style, title, content, footer, container, children, okText, cancelText, onOk, onCancel, onOpenChangeComplete, ...props }) => {
|
|
14
14
|
const { locale, defaultProps } = useConfig();
|
|
15
15
|
const modalDefaults = defaultProps?.modal;
|
|
16
16
|
const resolvedMaskClosable = maskClosable ?? modalDefaults?.maskClosable ?? false;
|
|
17
17
|
if (typeof window === "undefined") return null;
|
|
18
18
|
return /* @__PURE__ */ jsx(Dialog, {
|
|
19
19
|
open,
|
|
20
|
+
onOpenChangeComplete,
|
|
20
21
|
onOpenChange: (open) => {
|
|
21
22
|
if (!open) onCancel?.();
|
|
22
23
|
},
|
|
@@ -44,13 +45,13 @@ const Modal = ({ open = false, maskClosable, closable = false, closeIcon, classN
|
|
|
44
45
|
footer !== null && /* @__PURE__ */ jsx(DialogFooter, {
|
|
45
46
|
className: cn("flex-row justify-end gap-x-2", classNames?.footer),
|
|
46
47
|
children: footer || /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(Button, {
|
|
47
|
-
type: "primary",
|
|
48
|
-
onClick: onOk,
|
|
49
|
-
children: okText ?? locale.ok ?? DEFAULT_LOCALE.ok
|
|
50
|
-
}), /* @__PURE__ */ jsx(Button, {
|
|
51
48
|
variant: "outlined",
|
|
52
49
|
onClick: onCancel,
|
|
53
50
|
children: cancelText ?? locale.cancel ?? DEFAULT_LOCALE.cancel
|
|
51
|
+
}), /* @__PURE__ */ jsx(Button, {
|
|
52
|
+
type: "primary",
|
|
53
|
+
onClick: onOk,
|
|
54
|
+
children: okText ?? locale.ok ?? DEFAULT_LOCALE.ok
|
|
54
55
|
})] })
|
|
55
56
|
})
|
|
56
57
|
]
|
|
@@ -64,31 +65,31 @@ const STATIC_ICONS = {
|
|
|
64
65
|
warning: /* @__PURE__ */ jsx(OctagonAlert, { className: "text-yellow-400" }),
|
|
65
66
|
confirm: /* @__PURE__ */ jsx(CircleQuestionMark, {})
|
|
66
67
|
};
|
|
67
|
-
const StaticModal = ({ id, status, mode, title, content, okText, cancelText, container, icon, onOk, onCancel, ...props }) => {
|
|
68
|
+
const StaticModal = ({ id, status, mode, title, content, okText, cancelText, container, icon, onOk, onCancel, onOpenChangeComplete, ...props }) => {
|
|
68
69
|
const { locale } = useConfig();
|
|
69
70
|
const [open, setOpen] = useState(true);
|
|
71
|
+
const closing = useRef(false);
|
|
70
72
|
const resolvedOkText = okText ?? locale.ok ?? DEFAULT_LOCALE.ok;
|
|
71
73
|
const resolvedCancelText = cancelText ?? locale.cancel ?? DEFAULT_LOCALE.cancel;
|
|
72
74
|
const isConfirm = mode === "confirm";
|
|
73
75
|
const closeModal = (callback) => {
|
|
74
|
-
|
|
76
|
+
if (closing.current) return;
|
|
77
|
+
closing.current = true;
|
|
75
78
|
setOpen(false);
|
|
76
|
-
|
|
77
|
-
modalStack.destroy(id);
|
|
78
|
-
}, 200);
|
|
79
|
+
callback?.();
|
|
79
80
|
};
|
|
80
81
|
const footer = isConfirm ? /* @__PURE__ */ jsxs("div", {
|
|
81
82
|
className: "grid w-full grid-cols-5 gap-x-2",
|
|
82
83
|
children: [/* @__PURE__ */ jsx(Button, {
|
|
83
|
-
type: "primary",
|
|
84
|
-
className: "col-span-3",
|
|
85
|
-
onClick: () => closeModal(onOk),
|
|
86
|
-
children: resolvedOkText
|
|
87
|
-
}), /* @__PURE__ */ jsx(Button, {
|
|
88
84
|
variant: "outlined",
|
|
89
85
|
className: "col-span-2",
|
|
90
86
|
onClick: () => closeModal(onCancel),
|
|
91
87
|
children: resolvedCancelText
|
|
88
|
+
}), /* @__PURE__ */ jsx(Button, {
|
|
89
|
+
type: "primary",
|
|
90
|
+
className: "col-span-3",
|
|
91
|
+
onClick: () => closeModal(onOk),
|
|
92
|
+
children: resolvedOkText
|
|
92
93
|
})]
|
|
93
94
|
}) : /* @__PURE__ */ jsx(Button, {
|
|
94
95
|
type: "primary",
|
|
@@ -113,6 +114,10 @@ const StaticModal = ({ id, status, mode, title, content, okText, cancelText, con
|
|
|
113
114
|
container,
|
|
114
115
|
onCancel: () => closeModal(onCancel),
|
|
115
116
|
...props,
|
|
117
|
+
onOpenChangeComplete: (open) => {
|
|
118
|
+
if (!open) modalStack.destroy(id);
|
|
119
|
+
onOpenChangeComplete?.(open);
|
|
120
|
+
},
|
|
116
121
|
children: content
|
|
117
122
|
}), modalStack.getRootElement(container));
|
|
118
123
|
};
|
|
@@ -125,7 +130,9 @@ const modalStack = createImperativeStack({
|
|
|
125
130
|
},
|
|
126
131
|
StackItem: StaticModal
|
|
127
132
|
});
|
|
133
|
+
/** Immediately removes a modal without waiting for its closing animation. */
|
|
128
134
|
Modal.destroy = modalStack.destroy;
|
|
135
|
+
/** Immediately removes all modals, including those currently closing. */
|
|
129
136
|
Modal.destroyAll = () => {
|
|
130
137
|
modalStack.destroy();
|
|
131
138
|
};
|
|
@@ -152,4 +159,4 @@ Modal.confirm = (props) => modalStack.render({
|
|
|
152
159
|
//#endregion
|
|
153
160
|
export { Modal as default };
|
|
154
161
|
|
|
155
|
-
//# sourceMappingURL=
|
|
162
|
+
//# sourceMappingURL=Modal.mjs.map
|