@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 @@
|
|
|
1
|
+
{"version":3,"file":"Modal.mjs","names":["dialog"],"sources":["../src/components/organisms/modal.tsx"],"sourcesContent":["'use client';\n\nimport React, { useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport {\n Check,\n CircleQuestionMark,\n Info,\n OctagonAlert,\n OctagonX,\n} from 'lucide-react';\n\nimport { DEFAULT_LOCALE, useConfig } from '@repo/ui/providers';\nimport { cn } from '@repo/ui/utils';\n\nimport { dialog } from '../../core';\nimport Button from '../atoms/button';\nimport {\n type ImperativeStack,\n createImperativeStack,\n isBrowser,\n} from './imperative-stack';\n\nconst {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} = dialog;\n\nexport interface Props {\n open?: boolean;\n maskClosable?: boolean;\n closable?:\n | boolean\n | {\n closeIcon?: React.ReactNode;\n disabled?: boolean;\n };\n closeIcon?: React.ReactNode;\n title?: React.ReactNode;\n content?: React.ReactNode;\n footer?: React.ReactNode;\n className?: string;\n classNames?: {\n mask?: string;\n header?: string;\n body?: string;\n footer?: string;\n };\n style?: React.CSSProperties;\n okText?: string;\n cancelText?: string;\n container?: HTMLElement;\n children?: React.ReactNode;\n onOk?: () => void;\n onCancel?: () => void;\n /** Called after the opening or closing animations finish. */\n onOpenChangeComplete?: (open: boolean) => void;\n}\n\ntype ModalStatus = 'info' | 'success' | 'error' | 'warning';\n\ninterface StaticProps extends Props {\n status?: ModalStatus;\n /**\n * Interaction mode set by `Modal.confirm()` to request the two-button\n * footer. `confirm` is a mode, not a status, so it rides its own axis rather\n * than `status` — call `Modal.confirm()` rather than setting this directly.\n */\n mode?: 'confirm';\n id?: string;\n icon?: React.ReactNode;\n container?: HTMLElement;\n}\n\nconst Modal = ({\n open = false,\n maskClosable,\n closable = false,\n closeIcon,\n className,\n classNames,\n style,\n title,\n content,\n footer,\n container,\n children,\n okText,\n cancelText,\n onOk,\n onCancel,\n onOpenChangeComplete,\n ...props\n}: Props) => {\n const { locale, defaultProps } = useConfig();\n const modalDefaults = defaultProps?.modal as\n Partial<Pick<Props, 'maskClosable'>> | undefined;\n // Explicit prop > `Config` default > built-in, matching Button/Tag.\n const resolvedMaskClosable =\n maskClosable ?? modalDefaults?.maskClosable ?? false;\n\n if (typeof window === 'undefined') {\n return null;\n }\n\n return (\n <Dialog\n open={open}\n onOpenChangeComplete={onOpenChangeComplete}\n onOpenChange={(open: boolean) => {\n if (!open) {\n onCancel?.();\n }\n }}\n // antd's `maskClosable` is a root-level dismissal concern in Base UI:\n // blocking the outside (mask) press keeps the dialog open on backdrop\n // click while Escape still closes it, matching the previous behaviour.\n disablePointerDismissal={!resolvedMaskClosable}\n {...props}\n >\n <DialogContent\n className={cn(\n 'rounded-lg p-4 max-sm:max-w-[80%]',\n 'border-none outline-none',\n className,\n )}\n classNames={{\n ...classNames,\n mask: cn('bg-black/60', classNames?.mask),\n }}\n style={style}\n closable={closable}\n closeIcon={closeIcon}\n container={container}\n >\n {/**\n * @todo [Dialog & AlertDialog] fix: can't get id correctly in shadow dom\n *\n * Filed while `core/dialog` was still Radix-based; the linked fix is\n * Radix's, and the repo no longer depends on it. Revalidate against\n * Base UI's Dialog before acting on this — the bug may already be gone.\n * @see https://github.com/radix-ui/primitives/pull/3384\n **/}\n <DialogHeader\n className={cn(\n classNames?.header,\n !title && 'hidden',\n //\n )}\n >\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription className=\"hidden\" />\n </DialogHeader>\n <div className={cn('break-all', classNames?.body)}>\n {children ?? content}\n </div>\n {footer !== null && (\n <DialogFooter\n className={cn('flex-row justify-end gap-x-2', classNames?.footer)}\n >\n {footer || (\n <>\n <Button variant=\"outlined\" onClick={onCancel}>\n {cancelText ?? locale.cancel ?? DEFAULT_LOCALE.cancel}\n </Button>\n <Button type=\"primary\" onClick={onOk}>\n {okText ?? locale.ok ?? DEFAULT_LOCALE.ok}\n </Button>\n </>\n )}\n </DialogFooter>\n )}\n </DialogContent>\n </Dialog>\n );\n};\n\nconst STATIC_ICONS = {\n info: <Info className=\"text-blue-400\" />,\n success: <Check className=\"text-green-400\" />,\n error: <OctagonX className=\"text-red-400\" />,\n warning: <OctagonAlert className=\"text-yellow-400\" />,\n confirm: <CircleQuestionMark />,\n};\n\nconst StaticModal = ({\n id,\n status,\n mode,\n title,\n content,\n okText,\n cancelText,\n container,\n icon,\n onOk,\n onCancel,\n onOpenChangeComplete,\n ...props\n}: StaticProps & { id: string }): React.ReactPortal | null => {\n const { locale } = useConfig();\n const [open, setOpen] = useState(true);\n const closing = useRef(false);\n const resolvedOkText = okText ?? locale.ok ?? DEFAULT_LOCALE.ok;\n const resolvedCancelText =\n cancelText ?? locale.cancel ?? DEFAULT_LOCALE.cancel;\n // `confirm` is an interaction mode (two-button footer), not a status; the\n // semantic state comes from `status`.\n const isConfirm = mode === 'confirm';\n\n const closeModal = (callback?: () => void) => {\n if (closing.current) {\n return;\n }\n\n closing.current = true;\n setOpen(false);\n callback?.();\n };\n\n const footer = isConfirm ? (\n <div className=\"grid w-full grid-cols-5 gap-x-2\">\n <Button\n variant=\"outlined\"\n className=\"col-span-2\"\n onClick={() => closeModal(onCancel)}\n >\n {resolvedCancelText}\n </Button>\n <Button\n type=\"primary\"\n className=\"col-span-3\"\n onClick={() => closeModal(onOk)}\n >\n {resolvedOkText}\n </Button>\n </div>\n ) : (\n <Button\n type=\"primary\"\n className={cn(\n 'grow',\n //\n )}\n onClick={() => closeModal(onOk)}\n >\n {resolvedOkText}\n </Button>\n );\n\n if (!isBrowser) {\n return null;\n }\n\n return createPortal(\n <Modal\n open={open}\n footer={footer}\n className={cn(\n 'z-10000',\n 'box-content w-100',\n 'rounded-3xl p-4',\n 'gap-y-0',\n )}\n classNames={{\n mask: 'z-10000 bg-black/[.6]',\n body: cn(\n 'text-black-70 whitespace-pre-wrap text-center',\n content && 'mt-3',\n ),\n footer: 'mt-9',\n }}\n title={\n <p\n className={cn(\n 'text-center text-lg leading-normal whitespace-pre-wrap',\n 'flex items-center justify-center gap-x-2',\n //\n )}\n >\n {icon ||\n (isConfirm ? STATIC_ICONS.confirm : status && STATIC_ICONS[status])}\n {title}\n </p>\n }\n container={container}\n onCancel={() => closeModal(onCancel)}\n {...props}\n onOpenChangeComplete={open => {\n if (!open) {\n modalStack.destroy(id);\n }\n\n onOpenChangeComplete?.(open);\n }}\n >\n {content}\n </Modal>,\n modalStack.getRootElement(container)!,\n );\n};\n\n// No `role`/`aria-modal` here — this element is only a mount point for the\n// imperative stack, not the dialog itself. Base UI already renders its own\n// `role=\"dialog\"`/`aria-modal=\"true\"` on the actual `DialogContent` via\n// portal once a modal is open. Setting it here as well would (a) leave\n// `aria-modal=\"true\"` on the page permanently, even with zero modals open,\n// hiding the rest of the document from screen readers, and (b) duplicate\n// Base UI's own dialog role once one is open.\nconst modalStack: ImperativeStack<StaticProps> =\n createImperativeStack<StaticProps>({\n createRootElement: () => {\n const el = document.createElement('div');\n el.style.zIndex = '10000';\n el.style.position = 'absolute';\n return el;\n },\n StackItem: StaticModal,\n });\n\n/** Immediately removes a modal without waiting for its closing animation. */\nModal.destroy = modalStack.destroy;\n\n/** Immediately removes all modals, including those currently closing. */\nModal.destroyAll = () => {\n modalStack.destroy();\n};\n\nModal.info = (props: StaticProps) =>\n modalStack.render({ status: 'info', ...props });\nModal.success = (props: StaticProps) =>\n modalStack.render({ status: 'success', ...props });\nModal.error = (props: StaticProps) =>\n modalStack.render({ status: 'error', ...props });\nModal.warning = (props: StaticProps) =>\n modalStack.render({ status: 'warning', ...props });\n// `confirm` is a mode, not a status, so it rides its own `mode` axis rather\n// than `status`.\nModal.confirm = (props: StaticProps) =>\n modalStack.render({ mode: 'confirm', ...props });\n\nexport default Modal;\n"],"mappings":";;;;;;;;;;;AAwBA,MAAM,EACJ,QACA,eACA,mBACA,cACA,cACA,gBACEA;AAgDJ,MAAM,SAAS,EACb,OAAO,OACP,cACA,WAAW,OACX,WACA,WACA,YACA,OACA,OACA,SACA,QACA,WACA,UACA,QACA,YACA,MACA,UACA,sBACA,GAAG,YACQ;CACX,MAAM,EAAE,QAAQ,iBAAiB,UAAU;CAC3C,MAAM,gBAAgB,cAAc;CAGpC,MAAM,uBACJ,gBAAgB,eAAe,gBAAgB;CAEjD,IAAI,OAAO,WAAW,aACpB,OAAO;CAGT,OACE,oBAAC,QAAD;EACQ;EACgB;EACtB,eAAe,SAAkB;GAC/B,IAAI,CAAC,MACH,WAAW;EAEf;EAIA,yBAAyB,CAAC;EAC1B,GAAI;EAEJ,UAAA,qBAAC,eAAD;GACE,WAAW,GACT,qCACA,4BACA,SACF;GACA,YAAY;IACV,GAAG;IACH,MAAM,GAAG,eAAe,YAAY,IAAI;GAC1C;GACO;GACG;GACC;GACA;GAbb,UAAA;IAuBE,qBAAC,cAAD;KACE,WAAW,GACT,YAAY,QACZ,CAAC,SAAS,QAEZ;KALF,UAAA,CAOE,oBAAC,aAAD,EAAA,UAAc,MAAmB,CAAA,GACjC,oBAAC,mBAAD,EAAmB,WAAU,SAAU,CAAA,CAC3B;;IACd,oBAAC,OAAD;KAAK,WAAW,GAAG,aAAa,YAAY,IAAI;KAC7C,UAAA,YAAY;IACV,CAAA;IACJ,WAAW,QACV,oBAAC,cAAD;KACE,WAAW,GAAG,gCAAgC,YAAY,MAAM;KAE/D,UAAA,UACC,qBAAA,YAAA,EAAA,UAAA,CACE,oBAAC,QAAD;MAAQ,SAAQ;MAAW,SAAS;MACjC,UAAA,cAAc,OAAO,UAAU,eAAe;KACzC,CAAA,GACR,oBAAC,QAAD;MAAQ,MAAK;MAAU,SAAS;MAC7B,UAAA,UAAU,OAAO,MAAM,eAAe;KACjC,CAAA,CACR,EAAA,CAAA;IAEQ,CAAA;GAEH;;CACT,CAAA;AAEZ;AAEA,MAAM,eAAe;CACnB,MAAM,oBAAC,MAAD,EAAM,WAAU,gBAAiB,CAAA;CACvC,SAAS,oBAAC,OAAD,EAAO,WAAU,iBAAkB,CAAA;CAC5C,OAAO,oBAAC,UAAD,EAAU,WAAU,eAAgB,CAAA;CAC3C,SAAS,oBAAC,cAAD,EAAc,WAAU,kBAAmB,CAAA;CACpD,SAAS,oBAAC,oBAAD,CAAqB,CAAA;AAChC;AAEA,MAAM,eAAe,EACnB,IACA,QACA,MACA,OACA,SACA,QACA,YACA,WACA,MACA,MACA,UACA,sBACA,GAAG,YACyD;CAC5D,MAAM,EAAE,WAAW,UAAU;CAC7B,MAAM,CAAC,MAAM,WAAW,SAAS,IAAI;CACrC,MAAM,UAAU,OAAO,KAAK;CAC5B,MAAM,iBAAiB,UAAU,OAAO,MAAM,eAAe;CAC7D,MAAM,qBACJ,cAAc,OAAO,UAAU,eAAe;CAGhD,MAAM,YAAY,SAAS;CAE3B,MAAM,cAAc,aAA0B;EAC5C,IAAI,QAAQ,SACV;EAGF,QAAQ,UAAU;EAClB,QAAQ,KAAK;EACb,WAAW;CACb;CAEA,MAAM,SAAS,YACb,qBAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACE,oBAAC,QAAD;GACE,SAAQ;GACR,WAAU;GACV,eAAe,WAAW,QAAQ;GAEjC,UAAA;EACK,CAAA,GACR,oBAAC,QAAD;GACE,MAAK;GACL,WAAU;GACV,eAAe,WAAW,IAAI;GAE7B,UAAA;EACK,CAAA,CACL;CAEL,CAAA,IAAA,oBAAC,QAAD;EACE,MAAK;EACL,WAAW,GACT,MAEF;EACA,eAAe,WAAW,IAAI;EAE7B,UAAA;CACK,CAAA;CAGV,IAAI,CAAC,WACH,OAAO;CAGT,OAAO,aACL,oBAAC,OAAD;EACQ;EACE;EACR,WAAW,GACT,WACA,qBACA,mBACA,SACF;EACA,YAAY;GACV,MAAM;GACN,MAAM,GACJ,iDACA,WAAW,MACb;GACA,QAAQ;EACV;EACA,OACE,qBAAC,KAAD;GACE,WAAW,GACT,0DACA,0CAEF;GALF,UAAA,CAOG,SACE,YAAY,aAAa,UAAU,UAAU,aAAa,UAC5D,KACA;;EAEM;EACX,gBAAgB,WAAW,QAAQ;EACnC,GAAI;EACJ,uBAAsB,SAAQ;GAC5B,IAAI,CAAC,MACH,WAAW,QAAQ,EAAE;GAGvB,uBAAuB,IAAI;EAC7B;EAEC,UAAA;CACI,CAAA,GACP,WAAW,eAAe,SAAS,CACrC;AACF;AASA,MAAM,aACJ,sBAAmC;CACjC,yBAAyB;EACvB,MAAM,KAAK,SAAS,cAAc,KAAK;EACvC,GAAG,MAAM,SAAS;EAClB,GAAG,MAAM,WAAW;EACpB,OAAO;CACT;CACA,WAAW;AACb,CAAC;;AAGH,MAAM,UAAU,WAAW;;AAG3B,MAAM,mBAAmB;CACvB,WAAW,QAAQ;AACrB;AAEA,MAAM,QAAQ,UACZ,WAAW,OAAO;CAAE,QAAQ;CAAQ,GAAG;AAAM,CAAC;AAChD,MAAM,WAAW,UACf,WAAW,OAAO;CAAE,QAAQ;CAAW,GAAG;AAAM,CAAC;AACnD,MAAM,SAAS,UACb,WAAW,OAAO;CAAE,QAAQ;CAAS,GAAG;AAAM,CAAC;AACjD,MAAM,WAAW,UACf,WAAW,OAAO;CAAE,QAAQ;CAAW,GAAG;AAAM,CAAC;AAGnD,MAAM,WAAW,UACf,WAAW,OAAO;CAAE,MAAM;CAAW,GAAG;AAAM,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
//#region src/components/templates/page-header.d.ts
|
|
2
|
-
interface Props extends Omit<React.ComponentProps<'div'>, 'title'> {
|
|
2
|
+
export interface Props extends Omit<React.ComponentProps<'div'>, 'title'> {
|
|
3
3
|
title?: React.ReactNode;
|
|
4
4
|
subTitle?: React.ReactNode;
|
|
5
5
|
extra?: React.ReactNode;
|
|
@@ -14,5 +14,5 @@ interface Props extends Omit<React.ComponentProps<'div'>, 'title'> {
|
|
|
14
14
|
}
|
|
15
15
|
declare const PageHeader: ({ title, subTitle, extra, backIcon, onBack, className, classNames, children, ...props }: Props) => import("react").JSX.Element;
|
|
16
16
|
//#endregion
|
|
17
|
-
export {
|
|
18
|
-
//# sourceMappingURL=
|
|
17
|
+
export { PageHeader as default };
|
|
18
|
+
//# sourceMappingURL=PageHeader.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageHeader.d.mts","names":[],"sources":["../src/components/templates/page-header.tsx"],"mappings":";iBASiB,cAAc,KAAK,MAAM;EACxC,QAAQ,MAAM;EACd,WAAW,MAAM;EACjB,QAAQ,MAAM;EACd,WAAW,MAAM;EACjB;EACA;IACE;IACA;IACA;IACA;;;cAOE,eAAc,OAAA,UAAA,OAAA,UAAA,QAAA,WAAA,YAAA,aAAA,SAUjB,0BAAK,IAAA"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { cn } from "
|
|
3
|
-
import { DEFAULT_LOCALE, useConfig } from "
|
|
4
|
-
import Button from "
|
|
5
|
-
import { ArrowLeft } 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";
|
|
6
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
import { ArrowLeft } from "lucide-react";
|
|
7
7
|
//#region src/components/templates/page-header.tsx
|
|
8
8
|
const PageHeader = ({ title, subTitle, extra, backIcon, onBack, className, classNames, children, ...props }) => {
|
|
9
9
|
const { locale } = useConfig();
|
|
@@ -43,4 +43,4 @@ const PageHeader = ({ title, subTitle, extra, backIcon, onBack, className, class
|
|
|
43
43
|
//#endregion
|
|
44
44
|
export { PageHeader as default };
|
|
45
45
|
|
|
46
|
-
//# sourceMappingURL=
|
|
46
|
+
//# sourceMappingURL=PageHeader.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageHeader.mjs","names":[],"sources":["../src/components/templates/page-header.tsx"],"sourcesContent":["'use client';\n\nimport { ArrowLeft } from 'lucide-react';\n\nimport { DEFAULT_LOCALE, useConfig } from '@repo/ui/providers';\nimport { cn } from '@repo/ui/utils';\n\nimport Button from '../atoms/button';\n\nexport interface Props extends Omit<React.ComponentProps<'div'>, 'title'> {\n title?: React.ReactNode;\n subTitle?: React.ReactNode;\n extra?: React.ReactNode;\n backIcon?: React.ReactNode;\n onBack?: () => void;\n classNames?: {\n back?: string;\n title?: string;\n subTitle?: string;\n extra?: string;\n };\n}\n\n// Title + back button + extra action area — same shape as Drawer's header\n// (title/extra/closable), which this borrows the layout from wholesale;\n// PageHeader just swaps Drawer's close button for a back button.\nconst PageHeader = ({\n title,\n subTitle,\n extra,\n backIcon,\n onBack,\n className,\n classNames,\n children,\n ...props\n}: Props) => {\n const { locale } = useConfig();\n\n return (\n <div\n data-slot=\"page-header\"\n className={cn('flex flex-col gap-2', className)}\n {...props}\n >\n <div className=\"flex items-start gap-2\">\n {onBack && (\n <Button\n variant=\"text\"\n shape=\"circle\"\n size=\"small\"\n aria-label={locale.back ?? DEFAULT_LOCALE.back}\n icon={backIcon || <ArrowLeft />}\n onClick={onBack}\n className={cn(classNames?.back)}\n />\n )}\n <div className=\"flex flex-1 items-start justify-between gap-2\">\n <div className=\"flex flex-col gap-0.5\">\n {title && (\n <p className={cn('text-lg font-medium', classNames?.title)}>\n {title}\n </p>\n )}\n {subTitle && (\n <p\n className={cn(\n 'text-muted-foreground text-sm',\n classNames?.subTitle,\n )}\n >\n {subTitle}\n </p>\n )}\n </div>\n {extra != null && (\n <div className={cn('shrink-0', classNames?.extra)}>{extra}</div>\n )}\n </div>\n </div>\n {children}\n </div>\n );\n};\n\nexport default PageHeader;\n"],"mappings":";;;;;;;AA0BA,MAAM,cAAc,EAClB,OACA,UACA,OACA,UACA,QACA,WACA,YACA,UACA,GAAG,YACQ;CACX,MAAM,EAAE,WAAW,UAAU;CAE7B,OACE,qBAAC,OAAD;EACE,aAAU;EACV,WAAW,GAAG,uBAAuB,SAAS;EAC9C,GAAI;EAHN,UAAA,CAKE,qBAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACG,UACC,oBAAC,QAAD;IACE,SAAQ;IACR,OAAM;IACN,MAAK;IACL,cAAY,OAAO,QAAQ,eAAe;IAC1C,MAAM,YAAY,oBAAC,WAAD,CAAY,CAAA;IAC9B,SAAS;IACT,WAAW,GAAG,YAAY,IAAI;GAC/B,CAAA,GAEH,qBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,qBAAC,OAAD;KAAK,WAAU;KAAf,UAAA,CACG,SACC,oBAAC,KAAD;MAAG,WAAW,GAAG,uBAAuB,YAAY,KAAK;MACtD,UAAA;KACA,CAAA,GAEJ,YACC,oBAAC,KAAD;MACE,WAAW,GACT,iCACA,YAAY,QACd;MAEC,UAAA;KACA,CAAA,CAEF;IACJ,CAAA,GAAA,SAAS,QACR,oBAAC,OAAD;KAAK,WAAW,GAAG,YAAY,YAAY,KAAK;KAAI,UAAA;IAAW,CAAA,CAE9D;GACF,CAAA,CAAA;EACJ,CAAA,GAAA,QACE;;AAET"}
|
package/dist/Pagination.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
//#region src/components/molecules/pagination.d.ts
|
|
2
|
-
interface Props extends Omit<React.ComponentPropsWithoutRef<'nav'>, 'children' | 'onChange'> {
|
|
2
|
+
export interface Props extends Omit<React.ComponentPropsWithoutRef<'nav'>, 'children' | 'onChange'> {
|
|
3
3
|
/** Total number of items, not pages. */
|
|
4
4
|
total: number;
|
|
5
5
|
/** Controlled number of items per page. */
|
|
@@ -49,5 +49,5 @@ interface Props extends Omit<React.ComponentPropsWithoutRef<'nav'>, 'children' |
|
|
|
49
49
|
}
|
|
50
50
|
declare const Pagination: ({ total, pageSize, defaultPageSize, onPageSizeChange, pageSizeOptions, showSizeChanger, showTotal, showQuickJumper, page, defaultPage, onChange, siblingCount, boundaryCount, showFirstLast, hideOnSinglePage, getPageHref, disabled, size, labels, className, classNames, "aria-label": ariaLabel, ...props }: Props) => import("react").JSX.Element | null;
|
|
51
51
|
//#endregion
|
|
52
|
-
export {
|
|
52
|
+
export { Pagination as default };
|
|
53
53
|
//# sourceMappingURL=Pagination.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Pagination.d.mts","names":[],"sources":["../src/components/molecules/pagination.tsx"],"mappings":";
|
|
1
|
+
{"version":3,"file":"Pagination.d.mts","names":[],"sources":["../src/components/molecules/pagination.tsx"],"mappings":";iBAoBiB,cAAc,KAC7B,MAAM;;EAIN;;EAEA;EACA;EACA,oBAAoB;EACpB;EACA;;EAEA,aAAa,eAAe,4BAA4B,MAAM;EAC9D;;EAEA;EACA;EACA,YAAY;EACZ;EACA;EACA;EACA;;EAEA,eAAe;EACf;EACA;EACA;IACE;IACA,QAAQ;IACR;IACA;IACA;IACA;IACA;IACA;IACA;;EAEF;IACE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;;cAkEE,eAAc,OAAA,UAAA,iBAAA,kBAAA,iBAAA,iBAAA,WAAA,iBAAA,MAAA,aAAA,UAAA,cAAA,eAAA,eAAA,kBAAA,aAAA,UAAA,MAAA,QAAA,WAAA,0BAAA,cAAA,SAwBjB,0BAAK,IAAA"}
|
package/dist/Pagination.mjs
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
import { cn } from "./utils.mjs";
|
|
3
3
|
import { useConfig } from "./providers/config/context.mjs";
|
|
4
4
|
import Button from "./Button.mjs";
|
|
5
|
-
import Input from "./
|
|
6
|
-
import Select from "./
|
|
7
|
-
import { ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight } from "lucide-react";
|
|
5
|
+
import Input from "./Input.mjs";
|
|
6
|
+
import Select from "./Select.mjs";
|
|
8
7
|
import { useState } from "react";
|
|
9
8
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
|
+
import { ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight } from "lucide-react";
|
|
10
10
|
//#region src/components/molecules/pagination.tsx
|
|
11
11
|
const clampPage = (page, pageCount) => Math.min(Math.max(1, Number.isFinite(page) ? Math.floor(page) : 1), Math.max(1, pageCount));
|
|
12
12
|
const normalizePageSize = (value) => Number.isFinite(value) && value >= 1 ? Math.floor(value) : 10;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Props as Props$1 } from "./Button.mjs";
|
|
2
|
+
import { Props as Props$2 } from "./Popover.mjs";
|
|
3
|
+
import * as React$1 from "react";
|
|
4
|
+
//#region src/components/molecules/popconfirm.d.ts
|
|
5
|
+
type ActionProps = Omit<Props$1, 'children' | 'onClick' | 'loading' | 'disabled'>;
|
|
6
|
+
export interface Props extends Omit<Props$2, 'content' | 'title' | 'children'> {
|
|
7
|
+
children: React$1.ReactElement;
|
|
8
|
+
title: React$1.ReactNode;
|
|
9
|
+
description?: React$1.ReactNode;
|
|
10
|
+
/** A fulfilled promise closes the popup; a thrown error keeps it open. */
|
|
11
|
+
onConfirm?: () => void | Promise<void>;
|
|
12
|
+
/** Only the Cancel button invokes this callback. */
|
|
13
|
+
onCancel?: () => void;
|
|
14
|
+
onConfirmError?: (error: unknown) => void;
|
|
15
|
+
errorMessage?: React$1.ReactNode;
|
|
16
|
+
confirmText?: React$1.ReactNode;
|
|
17
|
+
cancelText?: React$1.ReactNode;
|
|
18
|
+
disabled?: boolean;
|
|
19
|
+
confirmButtonProps?: ActionProps;
|
|
20
|
+
cancelButtonProps?: ActionProps;
|
|
21
|
+
classNames?: {
|
|
22
|
+
title?: string;
|
|
23
|
+
description?: string;
|
|
24
|
+
actions?: string;
|
|
25
|
+
confirm?: string;
|
|
26
|
+
cancel?: string;
|
|
27
|
+
error?: string;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
declare const Popconfirm: ({ children, title, description, onConfirm, onCancel, onConfirmError, errorMessage, confirmText, cancelText, disabled, confirmButtonProps, cancelButtonProps, className, classNames, open: controlledOpen, defaultOpen, onOpenChange, ...props }: Props) => React$1.JSX.Element;
|
|
31
|
+
//#endregion
|
|
32
|
+
export { Popconfirm as default };
|
|
33
|
+
//# sourceMappingURL=Popconfirm.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Popconfirm.d.mts","names":["ButtonProps","PopoverProps","React"],"sources":["../src/components/molecules/popconfirm.tsx"],"mappings":";;;;KAYK,cAAc,KACjBA;iBAIe,cAAc,KAC7BC;EAGA,UAAUC,QAAM;EAChB,OAAOA,QAAM;EACb,cAAcA,QAAM;;EAEpB,yBAAyB;;EAEzB;EACA,kBAAkB;EAClB,eAAeA,QAAM;EACrB,cAAcA,QAAM;EACpB,aAAaA,QAAM;EACnB;EACA,qBAAqB;EACrB,oBAAoB;EACpB;IACE;IACA;IACA;IACA;IACA;IACA;;;cAIE,eAAc,UAAA,OAAA,aAAA,WAAA,UAAA,gBAAA,cAAA,aAAA,YAAA,UAAA,oBAAA,mBAAA,WAAA,YAAA,MAAA,gBAAA,aAAA,iBAAA,SAmBjB,UAAKA,QAAA,IAAA"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cn } from "./utils.mjs";
|
|
3
|
+
import Button from "./Button.mjs";
|
|
4
|
+
import Typography from "./Typography.mjs";
|
|
5
|
+
import Popover from "./Popover.mjs";
|
|
6
|
+
import * as React$1 from "react";
|
|
7
|
+
import { useControllableState } from "@jbpark/use-hooks";
|
|
8
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
|
+
//#region src/components/molecules/popconfirm.tsx
|
|
10
|
+
const Popconfirm = ({ children, title, description, onConfirm, onCancel, onConfirmError, errorMessage = "Unable to complete the action. Please try again.", confirmText = "Confirm", cancelText = "Cancel", disabled = false, confirmButtonProps, cancelButtonProps, className, classNames, open: controlledOpen, defaultOpen, onOpenChange, ...props }) => {
|
|
11
|
+
const [open, setOpen] = useControllableState({
|
|
12
|
+
value: controlledOpen,
|
|
13
|
+
defaultValue: defaultOpen ?? false,
|
|
14
|
+
onChange: onOpenChange
|
|
15
|
+
});
|
|
16
|
+
const [pending, setPending] = React$1.useState(false);
|
|
17
|
+
const [failed, setFailed] = React$1.useState(false);
|
|
18
|
+
const busy = React$1.useRef(false);
|
|
19
|
+
const mounted = React$1.useRef(false);
|
|
20
|
+
const generation = React$1.useRef(0);
|
|
21
|
+
const descriptionId = React$1.useId();
|
|
22
|
+
const titleId = React$1.useId();
|
|
23
|
+
React$1.useEffect(() => {
|
|
24
|
+
mounted.current = true;
|
|
25
|
+
return () => {
|
|
26
|
+
mounted.current = false;
|
|
27
|
+
generation.current += 1;
|
|
28
|
+
};
|
|
29
|
+
}, []);
|
|
30
|
+
React$1.useEffect(() => {
|
|
31
|
+
if (!open || disabled) generation.current += 1;
|
|
32
|
+
}, [open, disabled]);
|
|
33
|
+
const handleOpenChange = (nextOpen) => {
|
|
34
|
+
if (busy.current || disabled && nextOpen) return;
|
|
35
|
+
setFailed(false);
|
|
36
|
+
setOpen(nextOpen);
|
|
37
|
+
};
|
|
38
|
+
const handleConfirm = async () => {
|
|
39
|
+
if (busy.current || disabled) return;
|
|
40
|
+
busy.current = true;
|
|
41
|
+
setPending(true);
|
|
42
|
+
setFailed(false);
|
|
43
|
+
const request = generation.current;
|
|
44
|
+
try {
|
|
45
|
+
await onConfirm?.();
|
|
46
|
+
if (mounted.current && request === generation.current) setOpen(false);
|
|
47
|
+
} catch (error) {
|
|
48
|
+
if (mounted.current && request === generation.current) {
|
|
49
|
+
setFailed(true);
|
|
50
|
+
onConfirmError?.(error);
|
|
51
|
+
}
|
|
52
|
+
} finally {
|
|
53
|
+
busy.current = false;
|
|
54
|
+
if (mounted.current) setPending(false);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
return /* @__PURE__ */ jsx(Popover, {
|
|
58
|
+
...props,
|
|
59
|
+
open: open && !disabled,
|
|
60
|
+
onOpenChange: handleOpenChange,
|
|
61
|
+
className: cn("max-w-[calc(100vw-2rem)]", className),
|
|
62
|
+
"aria-labelledby": titleId,
|
|
63
|
+
"aria-describedby": description ? descriptionId : void 0,
|
|
64
|
+
content: /* @__PURE__ */ jsxs("div", {
|
|
65
|
+
"data-slot": "popconfirm",
|
|
66
|
+
"aria-busy": pending,
|
|
67
|
+
className: "space-y-3",
|
|
68
|
+
children: [
|
|
69
|
+
/* @__PURE__ */ jsx(Typography.Title, {
|
|
70
|
+
level: 6,
|
|
71
|
+
id: titleId,
|
|
72
|
+
className: classNames?.title,
|
|
73
|
+
children: title
|
|
74
|
+
}),
|
|
75
|
+
description && /* @__PURE__ */ jsx("div", {
|
|
76
|
+
id: descriptionId,
|
|
77
|
+
className: cn("text-muted-foreground text-sm", classNames?.description),
|
|
78
|
+
children: description
|
|
79
|
+
}),
|
|
80
|
+
failed && /* @__PURE__ */ jsx("div", {
|
|
81
|
+
role: "alert",
|
|
82
|
+
className: cn("text-destructive text-sm", classNames?.error),
|
|
83
|
+
children: errorMessage
|
|
84
|
+
}),
|
|
85
|
+
/* @__PURE__ */ jsxs("div", {
|
|
86
|
+
className: cn("flex justify-end gap-2", classNames?.actions),
|
|
87
|
+
children: [/* @__PURE__ */ jsx(Button, {
|
|
88
|
+
size: "small",
|
|
89
|
+
...cancelButtonProps,
|
|
90
|
+
htmlType: "button",
|
|
91
|
+
disabled: pending,
|
|
92
|
+
className: cn(cancelButtonProps?.className, classNames?.cancel),
|
|
93
|
+
onClick: () => {
|
|
94
|
+
if (busy.current) return;
|
|
95
|
+
setFailed(false);
|
|
96
|
+
setOpen(false);
|
|
97
|
+
onCancel?.();
|
|
98
|
+
},
|
|
99
|
+
children: cancelText
|
|
100
|
+
}), /* @__PURE__ */ jsx(Button, {
|
|
101
|
+
size: "small",
|
|
102
|
+
type: "primary",
|
|
103
|
+
...confirmButtonProps,
|
|
104
|
+
htmlType: "button",
|
|
105
|
+
loading: pending,
|
|
106
|
+
className: cn(confirmButtonProps?.className, classNames?.confirm),
|
|
107
|
+
onClick: () => void handleConfirm(),
|
|
108
|
+
children: confirmText
|
|
109
|
+
})]
|
|
110
|
+
})
|
|
111
|
+
]
|
|
112
|
+
}),
|
|
113
|
+
children
|
|
114
|
+
});
|
|
115
|
+
};
|
|
116
|
+
//#endregion
|
|
117
|
+
export { Popconfirm as default };
|
|
118
|
+
|
|
119
|
+
//# sourceMappingURL=Popconfirm.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Popconfirm.mjs","names":["React"],"sources":["../src/components/molecules/popconfirm.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\n\nimport { useControllableState } from '@jbpark/use-hooks';\n\nimport { cn } from '@repo/ui/utils';\n\nimport Button, { type Props as ButtonProps } from '../atoms/button';\nimport Popover, { type Props as PopoverProps } from '../atoms/popover';\nimport Typography from '../atoms/typography';\n\ntype ActionProps = Omit<\n ButtonProps,\n 'children' | 'onClick' | 'loading' | 'disabled'\n>;\n\nexport interface Props extends Omit<\n PopoverProps,\n 'content' | 'title' | 'children'\n> {\n children: React.ReactElement;\n title: React.ReactNode;\n description?: React.ReactNode;\n /** A fulfilled promise closes the popup; a thrown error keeps it open. */\n onConfirm?: () => void | Promise<void>;\n /** Only the Cancel button invokes this callback. */\n onCancel?: () => void;\n onConfirmError?: (error: unknown) => void;\n errorMessage?: React.ReactNode;\n confirmText?: React.ReactNode;\n cancelText?: React.ReactNode;\n disabled?: boolean;\n confirmButtonProps?: ActionProps;\n cancelButtonProps?: ActionProps;\n classNames?: {\n title?: string;\n description?: string;\n actions?: string;\n confirm?: string;\n cancel?: string;\n error?: string;\n };\n}\n\nconst Popconfirm = ({\n children,\n title,\n description,\n onConfirm,\n onCancel,\n onConfirmError,\n errorMessage = 'Unable to complete the action. Please try again.',\n confirmText = 'Confirm',\n cancelText = 'Cancel',\n disabled = false,\n confirmButtonProps,\n cancelButtonProps,\n className,\n classNames,\n open: controlledOpen,\n defaultOpen,\n onOpenChange,\n ...props\n}: Props) => {\n const [open, setOpen] = useControllableState<boolean>({\n value: controlledOpen,\n defaultValue: defaultOpen ?? false,\n onChange: onOpenChange,\n });\n const [pending, setPending] = React.useState(false);\n const [failed, setFailed] = React.useState(false);\n const busy = React.useRef(false);\n const mounted = React.useRef(false);\n const generation = React.useRef(0);\n const descriptionId = React.useId();\n const titleId = React.useId();\n\n React.useEffect(() => {\n mounted.current = true;\n\n return () => {\n mounted.current = false;\n generation.current += 1;\n };\n }, []);\n\n React.useEffect(() => {\n if (!open || disabled) {\n generation.current += 1;\n }\n }, [open, disabled]);\n\n const handleOpenChange = (nextOpen: boolean) => {\n if (busy.current || (disabled && nextOpen)) {\n return;\n }\n\n setFailed(false);\n setOpen(nextOpen);\n };\n\n const handleConfirm = async () => {\n if (busy.current || disabled) {\n return;\n }\n\n busy.current = true;\n setPending(true);\n setFailed(false);\n const request = generation.current;\n\n try {\n await onConfirm?.();\n\n if (mounted.current && request === generation.current) {\n setOpen(false);\n }\n } catch (error) {\n if (mounted.current && request === generation.current) {\n setFailed(true);\n onConfirmError?.(error);\n }\n } finally {\n busy.current = false;\n\n if (mounted.current) {\n setPending(false);\n }\n }\n };\n\n return (\n <Popover\n {...props}\n open={open && !disabled}\n onOpenChange={handleOpenChange}\n className={cn(\n 'max-w-[calc(100vw-2rem)]',\n className, //\n )}\n aria-labelledby={titleId}\n aria-describedby={description ? descriptionId : undefined}\n content={\n <div data-slot=\"popconfirm\" aria-busy={pending} className=\"space-y-3\">\n <Typography.Title\n level={6}\n id={titleId}\n className={classNames?.title}\n >\n {title}\n </Typography.Title>\n {description && (\n <div\n id={descriptionId}\n className={cn(\n 'text-muted-foreground text-sm',\n classNames?.description, //\n )}\n >\n {description}\n </div>\n )}\n {failed && (\n <div\n role=\"alert\"\n className={cn(\n 'text-destructive text-sm',\n classNames?.error, //\n )}\n >\n {errorMessage}\n </div>\n )}\n <div\n className={cn(\n 'flex justify-end gap-2',\n classNames?.actions, //\n )}\n >\n <Button\n size=\"small\"\n {...cancelButtonProps}\n htmlType=\"button\"\n disabled={pending}\n className={cn(\n cancelButtonProps?.className,\n classNames?.cancel, //\n )}\n onClick={() => {\n if (busy.current) {\n return;\n }\n\n setFailed(false);\n setOpen(false);\n onCancel?.();\n }}\n >\n {cancelText}\n </Button>\n <Button\n size=\"small\"\n type=\"primary\"\n {...confirmButtonProps}\n htmlType=\"button\"\n loading={pending}\n className={cn(\n confirmButtonProps?.className,\n classNames?.confirm, //\n )}\n onClick={() => void handleConfirm()}\n >\n {confirmText}\n </Button>\n </div>\n </div>\n }\n >\n {children}\n </Popover>\n );\n};\n\nexport default Popconfirm;\n"],"mappings":";;;;;;;;;AA6CA,MAAM,cAAc,EAClB,UACA,OACA,aACA,WACA,UACA,gBACA,eAAe,oDACf,cAAc,WACd,aAAa,UACb,WAAW,OACX,oBACA,mBACA,WACA,YACA,MAAM,gBACN,aACA,cACA,GAAG,YACQ;CACX,MAAM,CAAC,MAAM,WAAW,qBAA8B;EACpD,OAAO;EACP,cAAc,eAAe;EAC7B,UAAU;CACZ,CAAC;CACD,MAAM,CAAC,SAAS,cAAcA,QAAM,SAAS,KAAK;CAClD,MAAM,CAAC,QAAQ,aAAaA,QAAM,SAAS,KAAK;CAChD,MAAM,OAAOA,QAAM,OAAO,KAAK;CAC/B,MAAM,UAAUA,QAAM,OAAO,KAAK;CAClC,MAAM,aAAaA,QAAM,OAAO,CAAC;CACjC,MAAM,gBAAgBA,QAAM,MAAM;CAClC,MAAM,UAAUA,QAAM,MAAM;CAE5B,QAAM,gBAAgB;EACpB,QAAQ,UAAU;EAElB,aAAa;GACX,QAAQ,UAAU;GAClB,WAAW,WAAW;EACxB;CACF,GAAG,CAAC,CAAC;CAEL,QAAM,gBAAgB;EACpB,IAAI,CAAC,QAAQ,UACX,WAAW,WAAW;CAE1B,GAAG,CAAC,MAAM,QAAQ,CAAC;CAEnB,MAAM,oBAAoB,aAAsB;EAC9C,IAAI,KAAK,WAAY,YAAY,UAC/B;EAGF,UAAU,KAAK;EACf,QAAQ,QAAQ;CAClB;CAEA,MAAM,gBAAgB,YAAY;EAChC,IAAI,KAAK,WAAW,UAClB;EAGF,KAAK,UAAU;EACf,WAAW,IAAI;EACf,UAAU,KAAK;EACf,MAAM,UAAU,WAAW;EAE3B,IAAI;GACF,MAAM,YAAY;GAElB,IAAI,QAAQ,WAAW,YAAY,WAAW,SAC5C,QAAQ,KAAK;EAEjB,SAAS,OAAO;GACd,IAAI,QAAQ,WAAW,YAAY,WAAW,SAAS;IACrD,UAAU,IAAI;IACd,iBAAiB,KAAK;GACxB;EACF,UAAU;GACR,KAAK,UAAU;GAEf,IAAI,QAAQ,SACV,WAAW,KAAK;EAEpB;CACF;CAEA,OACE,oBAAC,SAAD;EACE,GAAI;EACJ,MAAM,QAAQ,CAAC;EACf,cAAc;EACd,WAAW,GACT,4BACA,SACF;EACA,mBAAiB;EACjB,oBAAkB,cAAc,gBAAgB,KAAA;EAChD,SACE,qBAAC,OAAD;GAAK,aAAU;GAAa,aAAW;GAAS,WAAU;GAA1D,UAAA;IACE,oBAAC,WAAW,OAAZ;KACE,OAAO;KACP,IAAI;KACJ,WAAW,YAAY;KAEtB,UAAA;IACe,CAAA;IACjB,eACC,oBAAC,OAAD;KACE,IAAI;KACJ,WAAW,GACT,iCACA,YAAY,WACd;KAEC,UAAA;IACE,CAAA;IAEN,UACC,oBAAC,OAAD;KACE,MAAK;KACL,WAAW,GACT,4BACA,YAAY,KACd;KAEC,UAAA;IACE,CAAA;IAEP,qBAAC,OAAD;KACE,WAAW,GACT,0BACA,YAAY,OACd;KAJF,UAAA,CAME,oBAAC,QAAD;MACE,MAAK;MACL,GAAI;MACJ,UAAS;MACT,UAAU;MACV,WAAW,GACT,mBAAmB,WACnB,YAAY,MACd;MACA,eAAe;OACb,IAAI,KAAK,SACP;OAGF,UAAU,KAAK;OACf,QAAQ,KAAK;OACb,WAAW;MACb;MAEC,UAAA;KACK,CAAA,GACR,oBAAC,QAAD;MACE,MAAK;MACL,MAAK;MACL,GAAI;MACJ,UAAS;MACT,SAAS;MACT,WAAW,GACT,oBAAoB,WACpB,YAAY,OACd;MACA,eAAe,KAAK,cAAc;MAEjC,UAAA;KACK,CAAA,CACL;;GACF;;EAGN;CACM,CAAA;AAEb"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
//#region src/components/atoms/popover.d.ts
|
|
2
2
|
type Placement = 'top' | 'left' | 'right' | 'bottom' | 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight' | 'leftTop' | 'leftBottom' | 'rightTop' | 'rightBottom';
|
|
3
|
-
interface Props extends Omit<React.ComponentPropsWithoutRef<'div'>, 'title' | 'content'> {
|
|
3
|
+
export interface Props extends Omit<React.ComponentPropsWithoutRef<'div'>, 'title' | 'content'> {
|
|
4
4
|
title?: React.ReactNode;
|
|
5
5
|
/** Set to false when a custom trigger component renders a non-button element. */
|
|
6
6
|
nativeButton?: boolean;
|
|
@@ -12,5 +12,5 @@ interface Props extends Omit<React.ComponentPropsWithoutRef<'div'>, 'title' | 'c
|
|
|
12
12
|
}
|
|
13
13
|
declare const Popover: ({ title, nativeButton, placement, className, content, children, open: _open, defaultOpen, onOpenChange, ...props }: Props) => import("react").JSX.Element;
|
|
14
14
|
//#endregion
|
|
15
|
-
export {
|
|
16
|
-
//# sourceMappingURL=
|
|
15
|
+
export { Popover as default };
|
|
16
|
+
//# sourceMappingURL=Popover.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Popover.d.mts","names":[],"sources":["../src/components/atoms/popover.tsx"],"mappings":";KAmBK;iBAcY,cAAc,KAC7B,MAAM;EAGN,QAAQ,MAAM;;EAEd;EACA,YAAY;EACZ,SAAS,MAAM;EACf;EACA;EACA,gBAAgB;;cAqBZ,YAAW,OAAA,cAAA,WAAA,WAAA,SAAA,UAAA,MAAA,OAAA,aAAA,iBAAA,SAWd,0BAAK,IAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { cn, renderConditional } from "
|
|
3
|
-
import { popover_exports } from "
|
|
4
|
-
import Typography from "
|
|
2
|
+
import { cn, renderConditional } from "./utils.mjs";
|
|
3
|
+
import { popover_exports } from "./core/popover.mjs";
|
|
4
|
+
import Typography from "./Typography.mjs";
|
|
5
5
|
import { Children } from "react";
|
|
6
6
|
import { useControllableState } from "@jbpark/use-hooks";
|
|
7
7
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -91,4 +91,4 @@ const Popover = ({ title, nativeButton, placement = "top", className, content, c
|
|
|
91
91
|
//#endregion
|
|
92
92
|
export { Popover as default };
|
|
93
93
|
|
|
94
|
-
//# sourceMappingURL=
|
|
94
|
+
//# sourceMappingURL=Popover.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Popover.mjs","names":["popover"],"sources":["../src/components/atoms/popover.tsx"],"sourcesContent":["'use client';\n\nimport { Children, type ReactElement } from 'react';\n\nimport { useControllableState } from '@jbpark/use-hooks';\n\nimport { cn, renderConditional } from '@repo/ui/utils';\n\nimport { popover } from '../../core';\nimport Typography from './typography';\n\nconst {\n Popover: CorePopover,\n PopoverContent,\n PopoverTrigger,\n PopoverArrow,\n PopoverTitle,\n} = popover;\n\ntype Placement =\n | 'top'\n | 'left'\n | 'right'\n | 'bottom'\n | 'topLeft'\n | 'topRight'\n | 'bottomLeft'\n | 'bottomRight'\n | 'leftTop'\n | 'leftBottom'\n | 'rightTop'\n | 'rightBottom';\n\nexport interface Props extends Omit<\n React.ComponentPropsWithoutRef<'div'>,\n 'title' | 'content'\n> {\n title?: React.ReactNode;\n /** Set to false when a custom trigger component renders a non-button element. */\n nativeButton?: boolean;\n placement?: Placement;\n content: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\ntype Side = 'top' | 'bottom' | 'left' | 'right';\ntype Align = 'start' | 'center' | 'end';\n\nconst placementMap: Record<Placement, { side: Side; align: Align }> = {\n top: { side: 'top', align: 'center' },\n left: { side: 'left', align: 'center' },\n right: { side: 'right', align: 'center' },\n bottom: { side: 'bottom', align: 'center' },\n topLeft: { side: 'top', align: 'start' },\n topRight: { side: 'top', align: 'end' },\n bottomLeft: { side: 'bottom', align: 'start' },\n bottomRight: { side: 'bottom', align: 'end' },\n leftTop: { side: 'left', align: 'start' },\n leftBottom: { side: 'left', align: 'end' },\n rightTop: { side: 'right', align: 'start' },\n rightBottom: { side: 'right', align: 'end' },\n};\n\nconst Popover = ({\n title,\n nativeButton,\n placement = 'top',\n className,\n content,\n children,\n open: _open,\n defaultOpen,\n onOpenChange,\n ...props\n}: Props) => {\n const [open, setOpen] = useControllableState<boolean>({\n value: _open,\n defaultValue: defaultOpen ?? false,\n onChange: onOpenChange,\n });\n\n const { side, align } = placementMap[placement];\n\n const trigger = Children.only(children) as ReactElement;\n\n return (\n <CorePopover open={open} onOpenChange={setOpen}>\n {/* Deliberately no `data-slot` here: Base UI merges the trigger's own\n props over the rendered element's, so a `data-slot` set here replaces\n the child's. A `Button` trigger would lose `data-slot=\"button\"` and\n with it every `--btn-*` token rule in globals.css. */}\n <PopoverTrigger\n render={trigger}\n nativeButton={\n nativeButton ??\n (typeof trigger.type !== 'string' || trigger.type === 'button')\n }\n />\n <PopoverContent\n {...props}\n align={align}\n side={side}\n sideOffset={16}\n className={cn('relative w-auto', className)}\n >\n {renderConditional(title, v => (\n <PopoverTitle render={<Typography.Title level={6} />}>\n {v}\n </PopoverTitle>\n ))}\n {content}\n <PopoverArrow />\n </PopoverContent>\n </CorePopover>\n );\n};\n\nexport default Popover;\n"],"mappings":";;;;;;;;AAWA,MAAM,EACJ,SAAS,aACT,gBACA,gBACA,cACA,iBACEA;AAiCJ,MAAM,eAAgE;CACpE,KAAK;EAAE,MAAM;EAAO,OAAO;CAAS;CACpC,MAAM;EAAE,MAAM;EAAQ,OAAO;CAAS;CACtC,OAAO;EAAE,MAAM;EAAS,OAAO;CAAS;CACxC,QAAQ;EAAE,MAAM;EAAU,OAAO;CAAS;CAC1C,SAAS;EAAE,MAAM;EAAO,OAAO;CAAQ;CACvC,UAAU;EAAE,MAAM;EAAO,OAAO;CAAM;CACtC,YAAY;EAAE,MAAM;EAAU,OAAO;CAAQ;CAC7C,aAAa;EAAE,MAAM;EAAU,OAAO;CAAM;CAC5C,SAAS;EAAE,MAAM;EAAQ,OAAO;CAAQ;CACxC,YAAY;EAAE,MAAM;EAAQ,OAAO;CAAM;CACzC,UAAU;EAAE,MAAM;EAAS,OAAO;CAAQ;CAC1C,aAAa;EAAE,MAAM;EAAS,OAAO;CAAM;AAC7C;AAEA,MAAM,WAAW,EACf,OACA,cACA,YAAY,OACZ,WACA,SACA,UACA,MAAM,OACN,aACA,cACA,GAAG,YACQ;CACX,MAAM,CAAC,MAAM,WAAW,qBAA8B;EACpD,OAAO;EACP,cAAc,eAAe;EAC7B,UAAU;CACZ,CAAC;CAED,MAAM,EAAE,MAAM,UAAU,aAAa;CAErC,MAAM,UAAU,SAAS,KAAK,QAAQ;CAEtC,OACE,qBAAC,aAAD;EAAmB;EAAM,cAAc;EAAvC,UAAA,CAKE,oBAAC,gBAAD;GACE,QAAQ;GACR,cACE,iBACC,OAAO,QAAQ,SAAS,YAAY,QAAQ,SAAS;EAEzD,CAAA,GACD,qBAAC,gBAAD;GACE,GAAI;GACG;GACD;GACN,YAAY;GACZ,WAAW,GAAG,mBAAmB,SAAS;GAL5C,UAAA;IAOG,kBAAkB,QAAO,MACxB,oBAAC,cAAD;KAAc,QAAQ,oBAAC,WAAW,OAAZ,EAAkB,OAAO,EAAI,CAAA;KAChD,UAAA;IACW,CAAA,CACf;IACA;IACD,oBAAC,cAAD,CAAe,CAAA;GACD;EACL,CAAA,CAAA;;AAEjB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
//#region src/components/atoms/progress.d.ts
|
|
2
|
-
interface Props extends React.ComponentPropsWithoutRef<'div'> {
|
|
2
|
+
export interface Props extends React.ComponentPropsWithoutRef<'div'> {
|
|
3
3
|
value: number;
|
|
4
4
|
orientation?: 'horizontal' | 'vertical';
|
|
5
5
|
/** @deprecated Use `orientation`. */
|
|
@@ -11,5 +11,5 @@ interface Props extends React.ComponentPropsWithoutRef<'div'> {
|
|
|
11
11
|
}
|
|
12
12
|
declare const Progress: ({ value, className, orientation, direction, classNames, ...props }: Props) => import("react").JSX.Element;
|
|
13
13
|
//#endregion
|
|
14
|
-
export {
|
|
15
|
-
//# sourceMappingURL=
|
|
14
|
+
export { Progress as default };
|
|
15
|
+
//# sourceMappingURL=Progress.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Progress.d.mts","names":[],"sources":["../src/components/atoms/progress.tsx"],"mappings":";iBAMiB,cAAc,MAAM;EACnC;EACA;;EAEA;EACA;IACE;IACA;;;cAIE,aAAY,OAAA,WAAA,aAAA,WAAA,eAAA,SAOf,0BAAK,IAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { cn } from "
|
|
2
|
-
import { progress_exports } from "
|
|
1
|
+
import { cn } from "./utils.mjs";
|
|
2
|
+
import { progress_exports } from "./core/progress.mjs";
|
|
3
3
|
import { jsx } from "react/jsx-runtime";
|
|
4
4
|
//#region src/components/atoms/progress.tsx
|
|
5
5
|
const { Progress: Core } = progress_exports;
|
|
@@ -20,4 +20,4 @@ const Progress = ({ value, className, orientation, direction = "horizontal", cla
|
|
|
20
20
|
//#endregion
|
|
21
21
|
export { Progress as default };
|
|
22
22
|
|
|
23
|
-
//# sourceMappingURL=
|
|
23
|
+
//# sourceMappingURL=Progress.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Progress.mjs","names":["progress"],"sources":["../src/components/atoms/progress.tsx"],"sourcesContent":["import { cn } from '@repo/ui/utils';\n\nimport { progress } from '../../core';\n\nconst { Progress: Core } = progress;\n\nexport interface Props extends React.ComponentPropsWithoutRef<'div'> {\n value: number;\n orientation?: 'horizontal' | 'vertical';\n /** @deprecated Use `orientation`. */\n direction?: 'horizontal' | 'vertical';\n classNames?: {\n background?: string;\n bar?: string;\n };\n}\n\nconst Progress = ({\n value,\n className,\n orientation,\n direction = 'horizontal',\n classNames,\n ...props\n}: Props) => {\n const isHorizontal = (orientation ?? direction) === 'horizontal';\n const normalizedValue = Number.isFinite(value)\n ? Math.min(100, Math.max(0, value))\n : 0;\n\n return (\n <Core\n {...props}\n value={normalizedValue}\n className={cn(\n isHorizontal ? 'h-4 w-full' : 'flex h-full w-4 flex-col justify-end',\n className,\n classNames?.background,\n //\n )}\n barClassName={cn('flex-none', classNames?.bar)}\n barStyle={\n isHorizontal\n ? { width: `${normalizedValue}%` }\n : { width: '100%', height: `${normalizedValue}%` }\n }\n />\n );\n};\n\nexport default Progress;\n"],"mappings":";;;;AAIA,MAAM,EAAE,UAAU,SAASA;AAa3B,MAAM,YAAY,EAChB,OACA,WACA,aACA,YAAY,cACZ,YACA,GAAG,YACQ;CACX,MAAM,gBAAgB,eAAe,eAAe;CACpD,MAAM,kBAAkB,OAAO,SAAS,KAAK,IACzC,KAAK,IAAI,KAAK,KAAK,IAAI,GAAG,KAAK,CAAC,IAChC;CAEJ,OACE,oBAAC,MAAD;EACE,GAAI;EACJ,OAAO;EACP,WAAW,GACT,eAAe,eAAe,wCAC9B,WACA,YAAY,UAEd;EACA,cAAc,GAAG,aAAa,YAAY,GAAG;EAC7C,UACE,eACI,EAAE,OAAO,GAAG,gBAAgB,GAAG,IAC/B;GAAE,OAAO;GAAQ,QAAQ,GAAG,gBAAgB;EAAG;CAEtD,CAAA;AAEL"}
|
package/dist/Radio.d.mts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import RadioGroup from "./components/atoms/radio/group.mjs";
|
|
2
|
+
import Radio$1, { Props } from "./components/atoms/radio/radio.mjs";
|
|
3
|
+
//#region src/components/atoms/radio/index.d.ts
|
|
4
|
+
type RadioComponent = typeof Radio$1 & {
|
|
5
|
+
Group: typeof RadioGroup;
|
|
6
|
+
};
|
|
7
|
+
declare const Radio: RadioComponent;
|
|
8
|
+
//#endregion
|
|
9
|
+
export { type Props, Radio as default };
|
|
10
|
+
//# sourceMappingURL=Radio.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Radio.d.mts","names":["RadioImpl","Group"],"sources":["../src/components/atoms/radio/index.ts"],"mappings":";;;KAGK,wBAAwBA;EAAc,cAAcC;;cAEnD,OAAqB"}
|
package/dist/Radio.mjs
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import Radio$1 from "./components/atoms/radio/radio.mjs";
|
|
2
|
+
import RadioGroup from "./components/atoms/radio/group.mjs";
|
|
3
|
+
//#region src/components/atoms/radio/index.ts
|
|
4
|
+
const Radio = Radio$1;
|
|
5
|
+
Radio.Group = RadioGroup;
|
|
6
|
+
//#endregion
|
|
7
|
+
export { Radio as default };
|
|
8
|
+
|
|
9
|
+
//# sourceMappingURL=Radio.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Radio.mjs","names":["RadioImpl","Group"],"sources":["../src/components/atoms/radio/index.ts"],"sourcesContent":["import Group from './group';\nimport RadioImpl, { type Props } from './radio';\n\ntype RadioComponent = typeof RadioImpl & { Group: typeof Group };\n\nconst Radio = RadioImpl as RadioComponent;\n\nRadio.Group = Group;\n\nexport default Radio;\nexport type { Props };\n"],"mappings":";;;AAKA,MAAM,QAAQA;AAEd,MAAM,QAAQC"}
|
package/dist/Rate.d.mts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { ComponentPropsWithRef, ReactNode } from "react";
|
|
2
|
+
//#region src/components/atoms/rate.d.ts
|
|
3
|
+
export interface Props extends Omit<ComponentPropsWithRef<'div'>, 'children' | 'value' | 'defaultValue' | 'onChange'> {
|
|
4
|
+
/** Positive whole-step count. Defaults to five. */
|
|
5
|
+
count?: number;
|
|
6
|
+
/** Zero means no rating. Values are rounded down and clamped to 0–count. */
|
|
7
|
+
value?: number;
|
|
8
|
+
defaultValue?: number;
|
|
9
|
+
onChange?: (value: number) => void;
|
|
10
|
+
/** Activating the selected score clears it to zero. Defaults to true. */
|
|
11
|
+
allowClear?: boolean;
|
|
12
|
+
disabled?: boolean;
|
|
13
|
+
readOnly?: boolean;
|
|
14
|
+
name?: string;
|
|
15
|
+
icon?: ReactNode;
|
|
16
|
+
getItemLabel?: (score: number, count: number) => string;
|
|
17
|
+
getValueText?: (value: number, count: number) => string;
|
|
18
|
+
classNames?: {
|
|
19
|
+
item?: string;
|
|
20
|
+
filledItem?: string;
|
|
21
|
+
icon?: string;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
declare const Rate: ({ count, value, defaultValue, onChange, allowClear, disabled, readOnly, name, icon, getItemLabel, getValueText, className, classNames, dir, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, ...props }: Props) => import("react").JSX.Element;
|
|
25
|
+
//#endregion
|
|
26
|
+
export { Rate as default };
|
|
27
|
+
//# sourceMappingURL=Rate.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Rate.d.mts","names":[],"sources":["../src/components/atoms/rate.tsx"],"mappings":";;iBAmBiB,cAAc,KAC7B;;EAIA;;EAEA;EACA;EACA,YAAY;;EAEZ;EACA;EACA;EACA;EACA,OAAO;EACP,gBAAgB,eAAe;EAC/B,gBAAgB,eAAe;EAC/B;IAAe;IAAe;IAAqB;;;cAG/C,SAAQ,OAAA,OAAA,cAAA,UAAA,YAAA,UAAA,UAAA,MAAA,MAAA,cAAA,cAAA,WAAA,YAAA,mBAAA,8BAAA,oCAAA,oBAAA,SAoBX,0BAAK,IAAA"}
|
package/dist/Rate.mjs
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cn } from "./utils.mjs";
|
|
3
|
+
import { useConfig } from "./providers/config/context.mjs";
|
|
4
|
+
import Button from "./Button.mjs";
|
|
5
|
+
import { useId, useState } from "react";
|
|
6
|
+
import { DirectionProvider } from "@base-ui/react/direction-provider";
|
|
7
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
|
+
import { Star } from "lucide-react";
|
|
9
|
+
import { Radio } from "@base-ui/react/radio";
|
|
10
|
+
import { RadioGroup } from "@base-ui/react/radio-group";
|
|
11
|
+
//#region src/components/atoms/rate.tsx
|
|
12
|
+
const Rate = ({ count = 5, value, defaultValue = 0, onChange, allowClear = true, disabled = false, readOnly = false, name, icon, getItemLabel = (score, total) => `${score} of ${total} stars`, getValueText = (score, total) => score === 0 ? "No rating" : `${score} of ${total} stars`, className, classNames, dir, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, ...props }) => {
|
|
13
|
+
const total = Number.isFinite(count) ? Math.max(1, Math.floor(count)) : 5;
|
|
14
|
+
const [internalValue, setInternalValue] = useState(defaultValue);
|
|
15
|
+
const rawValue = value ?? internalValue;
|
|
16
|
+
const score = Number.isFinite(rawValue) ? Math.min(total, Math.max(0, Math.floor(rawValue))) : 0;
|
|
17
|
+
const { direction } = useConfig();
|
|
18
|
+
const resolvedDirection = dir === "ltr" || dir === "rtl" ? dir : direction;
|
|
19
|
+
const statusId = useId();
|
|
20
|
+
const changeValue = (next) => {
|
|
21
|
+
if (disabled || readOnly || next === score) return;
|
|
22
|
+
if (value === void 0) setInternalValue(next);
|
|
23
|
+
onChange?.(next);
|
|
24
|
+
};
|
|
25
|
+
return /* @__PURE__ */ jsx(DirectionProvider, {
|
|
26
|
+
direction: resolvedDirection,
|
|
27
|
+
children: /* @__PURE__ */ jsxs(RadioGroup, {
|
|
28
|
+
...props,
|
|
29
|
+
"data-slot": "rate",
|
|
30
|
+
dir: dir ?? resolvedDirection,
|
|
31
|
+
"aria-label": ariaLabel ?? (ariaLabelledBy ? void 0 : "Rating"),
|
|
32
|
+
"aria-labelledby": ariaLabelledBy,
|
|
33
|
+
"aria-describedby": [ariaDescribedBy, statusId].filter(Boolean).join(" "),
|
|
34
|
+
disabled,
|
|
35
|
+
readOnly,
|
|
36
|
+
name,
|
|
37
|
+
value: score === 0 ? "" : String(score),
|
|
38
|
+
onValueChange: (next) => changeValue(Number(next)),
|
|
39
|
+
className: cn("inline-flex w-fit max-w-full flex-wrap items-center gap-1", className),
|
|
40
|
+
children: [Array.from({ length: total }, (_, index) => {
|
|
41
|
+
const itemScore = index + 1;
|
|
42
|
+
const isFilled = itemScore <= score;
|
|
43
|
+
return /* @__PURE__ */ jsx(Radio.Root, {
|
|
44
|
+
value: String(itemScore),
|
|
45
|
+
nativeButton: true,
|
|
46
|
+
"data-slot": "rate-item",
|
|
47
|
+
"data-filled": isFilled ? "" : void 0,
|
|
48
|
+
"aria-label": getItemLabel(itemScore, total),
|
|
49
|
+
onClick: (event) => {
|
|
50
|
+
if (allowClear && itemScore === score && !disabled && !readOnly) {
|
|
51
|
+
event.preventDefault();
|
|
52
|
+
changeValue(0);
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
render: /* @__PURE__ */ jsx(Button, {
|
|
56
|
+
variant: "text",
|
|
57
|
+
size: "small",
|
|
58
|
+
disabled,
|
|
59
|
+
className: cn("text-muted-foreground size-8 shrink-0 p-1", readOnly && "cursor-default", isFilled && "text-primary", classNames?.item, isFilled && classNames?.filledItem)
|
|
60
|
+
}),
|
|
61
|
+
children: /* @__PURE__ */ jsx("span", {
|
|
62
|
+
"data-slot": "rate-icon",
|
|
63
|
+
"aria-hidden": "true",
|
|
64
|
+
className: cn("flex size-5 items-center justify-center [&>svg]:size-full", isFilled && "[&>svg]:fill-current", classNames?.icon),
|
|
65
|
+
children: icon ?? /* @__PURE__ */ jsx(Star, {})
|
|
66
|
+
})
|
|
67
|
+
}, itemScore);
|
|
68
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
69
|
+
id: statusId,
|
|
70
|
+
"data-slot": "rate-status",
|
|
71
|
+
className: "sr-only",
|
|
72
|
+
"aria-live": "polite",
|
|
73
|
+
children: getValueText(score, total)
|
|
74
|
+
})]
|
|
75
|
+
})
|
|
76
|
+
});
|
|
77
|
+
};
|
|
78
|
+
//#endregion
|
|
79
|
+
export { Rate as default };
|
|
80
|
+
|
|
81
|
+
//# sourceMappingURL=Rate.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Rate.mjs","names":[],"sources":["../src/components/atoms/rate.tsx"],"sourcesContent":["'use client';\n\nimport {\n type ComponentPropsWithRef,\n type ReactNode,\n useId,\n useState,\n} from 'react';\n\nimport { DirectionProvider } from '@base-ui/react/direction-provider';\nimport { Radio } from '@base-ui/react/radio';\nimport { RadioGroup } from '@base-ui/react/radio-group';\nimport { Star } from 'lucide-react';\n\nimport { useConfig } from '@repo/ui/providers';\nimport { cn } from '@repo/ui/utils';\n\nimport Button from './button';\n\nexport interface Props extends Omit<\n ComponentPropsWithRef<'div'>,\n 'children' | 'value' | 'defaultValue' | 'onChange'\n> {\n /** Positive whole-step count. Defaults to five. */\n count?: number;\n /** Zero means no rating. Values are rounded down and clamped to 0–count. */\n value?: number;\n defaultValue?: number;\n onChange?: (value: number) => void;\n /** Activating the selected score clears it to zero. Defaults to true. */\n allowClear?: boolean;\n disabled?: boolean;\n readOnly?: boolean;\n name?: string;\n icon?: ReactNode;\n getItemLabel?: (score: number, count: number) => string;\n getValueText?: (value: number, count: number) => string;\n classNames?: { item?: string; filledItem?: string; icon?: string };\n}\n\nconst Rate = ({\n count = 5,\n value,\n defaultValue = 0,\n onChange,\n allowClear = true,\n disabled = false,\n readOnly = false,\n name,\n icon,\n getItemLabel = (score, total) => `${score} of ${total} stars`,\n getValueText = (score, total) =>\n score === 0 ? 'No rating' : `${score} of ${total} stars`,\n className,\n classNames,\n dir,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-describedby': ariaDescribedBy,\n ...props\n}: Props) => {\n const total = Number.isFinite(count) ? Math.max(1, Math.floor(count)) : 5;\n const [internalValue, setInternalValue] = useState(defaultValue);\n const rawValue = value ?? internalValue;\n const score = Number.isFinite(rawValue)\n ? Math.min(total, Math.max(0, Math.floor(rawValue)))\n : 0;\n const { direction } = useConfig();\n const resolvedDirection = dir === 'ltr' || dir === 'rtl' ? dir : direction;\n const statusId = useId();\n\n const changeValue = (next: number) => {\n if (disabled || readOnly || next === score) {\n return;\n }\n\n if (value === undefined) {\n setInternalValue(next);\n }\n\n onChange?.(next);\n };\n\n return (\n <DirectionProvider direction={resolvedDirection}>\n <RadioGroup\n {...props}\n data-slot=\"rate\"\n dir={dir ?? resolvedDirection}\n aria-label={ariaLabel ?? (ariaLabelledBy ? undefined : 'Rating')}\n aria-labelledby={ariaLabelledBy}\n aria-describedby={[ariaDescribedBy, statusId].filter(Boolean).join(' ')}\n disabled={disabled}\n readOnly={readOnly}\n name={name}\n value={score === 0 ? '' : String(score)}\n onValueChange={next => changeValue(Number(next))}\n className={cn(\n 'inline-flex w-fit max-w-full flex-wrap items-center gap-1',\n className, //\n )}\n >\n {Array.from({ length: total }, (_, index) => {\n const itemScore = index + 1;\n const isFilled = itemScore <= score;\n\n return (\n <Radio.Root\n key={itemScore}\n value={String(itemScore)}\n nativeButton\n data-slot=\"rate-item\"\n data-filled={isFilled ? '' : undefined}\n aria-label={getItemLabel(itemScore, total)}\n onClick={event => {\n if (\n allowClear &&\n itemScore === score &&\n !disabled &&\n !readOnly\n ) {\n event.preventDefault();\n changeValue(0);\n }\n }}\n render={\n <Button\n variant=\"text\"\n size=\"small\"\n disabled={disabled}\n className={cn(\n 'text-muted-foreground size-8 shrink-0 p-1',\n readOnly && 'cursor-default',\n isFilled && 'text-primary',\n classNames?.item,\n isFilled && classNames?.filledItem, //\n )}\n />\n }\n >\n <span\n data-slot=\"rate-icon\"\n aria-hidden=\"true\"\n className={cn(\n 'flex size-5 items-center justify-center [&>svg]:size-full',\n isFilled && '[&>svg]:fill-current',\n classNames?.icon, //\n )}\n >\n {icon ?? <Star />}\n </span>\n </Radio.Root>\n );\n })}\n <span\n id={statusId}\n data-slot=\"rate-status\"\n className=\"sr-only\"\n aria-live=\"polite\"\n >\n {getValueText(score, total)}\n </span>\n </RadioGroup>\n </DirectionProvider>\n );\n};\n\nexport default Rate;\n"],"mappings":";;;;;;;;;;;AAwCA,MAAM,QAAQ,EACZ,QAAQ,GACR,OACA,eAAe,GACf,UACA,aAAa,MACb,WAAW,OACX,WAAW,OACX,MACA,MACA,gBAAgB,OAAO,UAAU,GAAG,MAAM,MAAM,MAAM,SACtD,gBAAgB,OAAO,UACrB,UAAU,IAAI,cAAc,GAAG,MAAM,MAAM,MAAM,SACnD,WACA,YACA,KACA,cAAc,WACd,mBAAmB,gBACnB,oBAAoB,iBACpB,GAAG,YACQ;CACX,MAAM,QAAQ,OAAO,SAAS,KAAK,IAAI,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,CAAC,IAAI;CACxE,MAAM,CAAC,eAAe,oBAAoB,SAAS,YAAY;CAC/D,MAAM,WAAW,SAAS;CAC1B,MAAM,QAAQ,OAAO,SAAS,QAAQ,IAClC,KAAK,IAAI,OAAO,KAAK,IAAI,GAAG,KAAK,MAAM,QAAQ,CAAC,CAAC,IACjD;CACJ,MAAM,EAAE,cAAc,UAAU;CAChC,MAAM,oBAAoB,QAAQ,SAAS,QAAQ,QAAQ,MAAM;CACjE,MAAM,WAAW,MAAM;CAEvB,MAAM,eAAe,SAAiB;EACpC,IAAI,YAAY,YAAY,SAAS,OACnC;EAGF,IAAI,UAAU,KAAA,GACZ,iBAAiB,IAAI;EAGvB,WAAW,IAAI;CACjB;CAEA,OACE,oBAAC,mBAAD;EAAmB,WAAW;EAC5B,UAAA,qBAAC,YAAD;GACE,GAAI;GACJ,aAAU;GACV,KAAK,OAAO;GACZ,cAAY,cAAc,iBAAiB,KAAA,IAAY;GACvD,mBAAiB;GACjB,oBAAkB,CAAC,iBAAiB,QAAQ,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;GAC5D;GACA;GACJ;GACN,OAAO,UAAU,IAAI,KAAK,OAAO,KAAK;GACtC,gBAAe,SAAQ,YAAY,OAAO,IAAI,CAAC;GAC/C,WAAW,GACT,6DACA,SACF;GAfF,UAAA,CAiBG,MAAM,KAAK,EAAE,QAAQ,MAAM,IAAI,GAAG,UAAU;IAC3C,MAAM,YAAY,QAAQ;IAC1B,MAAM,WAAW,aAAa;IAE9B,OACE,oBAAC,MAAM,MAAP;KAEE,OAAO,OAAO,SAAS;KACvB,cAAA;KACA,aAAU;KACV,eAAa,WAAW,KAAK,KAAA;KAC7B,cAAY,aAAa,WAAW,KAAK;KACzC,UAAS,UAAS;MAChB,IACE,cACA,cAAc,SACd,CAAC,YACD,CAAC,UACD;OACA,MAAM,eAAe;OACrB,YAAY,CAAC;MACf;KACF;KACA,QACE,oBAAC,QAAD;MACE,SAAQ;MACR,MAAK;MACK;MACV,WAAW,GACT,6CACA,YAAY,kBACZ,YAAY,gBACZ,YAAY,MACZ,YAAY,YAAY,UAC1B;KACD,CAAA;KAGH,UAAA,oBAAC,QAAD;MACE,aAAU;MACV,eAAY;MACZ,WAAW,GACT,6DACA,YAAY,wBACZ,YAAY,IACd;MAEC,UAAA,QAAQ,oBAAC,MAAD,CAAO,CAAA;KACZ,CAAA;IACI,GA3CL,SA2CK;GAEhB,CAAC,GACD,oBAAC,QAAD;IACE,IAAI;IACJ,aAAU;IACV,WAAU;IACV,aAAU;IAET,UAAA,aAAa,OAAO,KAAK;GACtB,CAAA,CACI;;CACK,CAAA;AAEvB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
//#region src/components/templates/result.d.ts
|
|
2
2
|
type Status = 'success' | 'error' | 'info' | 'warning' | '404' | '403' | '500';
|
|
3
|
-
interface Props extends Omit<React.ComponentProps<'div'>, 'title'> {
|
|
3
|
+
export interface Props extends Omit<React.ComponentProps<'div'>, 'title'> {
|
|
4
4
|
status?: Status;
|
|
5
5
|
icon?: React.ReactNode;
|
|
6
6
|
title?: React.ReactNode;
|
|
@@ -9,5 +9,5 @@ interface Props extends Omit<React.ComponentProps<'div'>, 'title'> {
|
|
|
9
9
|
}
|
|
10
10
|
declare const Result: ({ status, icon, title, subTitle, extra, className, children, ...props }: Props) => import("react").JSX.Element;
|
|
11
11
|
//#endregion
|
|
12
|
-
export {
|
|
13
|
-
//# sourceMappingURL=
|
|
12
|
+
export { Result as default };
|
|
13
|
+
//# sourceMappingURL=Result.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Result.d.mts","names":[],"sources":["../src/components/templates/result.tsx"],"mappings":";KAYK;iBAeY,cAAc,KAAK,MAAM;EACxC,SAAS;EACT,OAAO,MAAM;EACb,QAAQ,MAAM;EACd,WAAW,MAAM;EACjB,QAAQ,MAAM;;cAMV,WAAU,QAAA,MAAA,OAAA,UAAA,OAAA,WAAA,aAAA,SASb,0BAAK,IAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { cn } from "
|
|
2
|
-
import { Check, FileQuestion, Info, OctagonAlert, OctagonX, ServerCrash, ShieldAlert } from "lucide-react";
|
|
1
|
+
import { cn } from "./utils.mjs";
|
|
3
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Check, FileQuestion, Info, OctagonAlert, OctagonX, ServerCrash, ShieldAlert } from "lucide-react";
|
|
4
4
|
//#region src/components/templates/result.tsx
|
|
5
5
|
const STATUS_ICONS = {
|
|
6
6
|
success: /* @__PURE__ */ jsx(Check, { className: "text-green-400" }),
|
|
@@ -43,4 +43,4 @@ const Result = ({ status = "info", icon, title, subTitle, extra, className, chil
|
|
|
43
43
|
//#endregion
|
|
44
44
|
export { Result as default };
|
|
45
45
|
|
|
46
|
-
//# sourceMappingURL=
|
|
46
|
+
//# sourceMappingURL=Result.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Result.mjs","names":[],"sources":["../src/components/templates/result.tsx"],"sourcesContent":["import {\n Check,\n FileQuestion,\n Info,\n OctagonAlert,\n OctagonX,\n ServerCrash,\n ShieldAlert,\n} from 'lucide-react';\n\nimport { cn } from '@repo/ui/utils';\n\ntype Status = 'success' | 'error' | 'info' | 'warning' | '404' | '403' | '500';\n\n// Reuses Modal's exact STATIC_ICONS set (Check/OctagonX/Info/OctagonAlert,\n// same colors) for the 4 statuses they share, so a Result page matches the\n// tone of a Modal.success()/error()/etc a user may have just seen.\nconst STATUS_ICONS: Record<Status, React.ReactNode> = {\n success: <Check className=\"text-green-400\" />,\n error: <OctagonX className=\"text-red-400\" />,\n info: <Info className=\"text-blue-400\" />,\n warning: <OctagonAlert className=\"text-yellow-400\" />,\n '404': <FileQuestion className=\"text-muted-foreground\" />,\n '403': <ShieldAlert className=\"text-muted-foreground\" />,\n '500': <ServerCrash className=\"text-muted-foreground\" />,\n};\n\nexport interface Props extends Omit<React.ComponentProps<'div'>, 'title'> {\n status?: Status;\n icon?: React.ReactNode;\n title?: React.ReactNode;\n subTitle?: React.ReactNode;\n extra?: React.ReactNode;\n}\n\n// Full-page success/failure/404/403 state screen — Empty's larger,\n// more prominent sibling (Empty says \"nothing here yet\" inline within a\n// list/table; Result says \"here's what happened\" for an entire page/view).\nconst Result = ({\n status = 'info',\n icon,\n title,\n subTitle,\n extra,\n className,\n children,\n ...props\n}: Props) => {\n return (\n <div\n data-slot=\"result\"\n className={cn(\n 'flex flex-col items-center justify-center gap-2 py-16 text-center',\n className,\n //\n )}\n {...props}\n >\n <div className=\"mb-2 [&_svg]:size-16\">{icon ?? STATUS_ICONS[status]}</div>\n {title && <p className=\"text-xl font-medium\">{title}</p>}\n {subTitle && <p className=\"text-muted-foreground text-sm\">{subTitle}</p>}\n {extra && (\n <div className=\"mt-4 flex items-center justify-center gap-2\">\n {extra}\n </div>\n )}\n {children && <div className=\"mt-4 w-full\">{children}</div>}\n </div>\n );\n};\n\nexport default Result;\n"],"mappings":";;;;AAiBA,MAAM,eAAgD;CACpD,SAAS,oBAAC,OAAD,EAAO,WAAU,iBAAkB,CAAA;CAC5C,OAAO,oBAAC,UAAD,EAAU,WAAU,eAAgB,CAAA;CAC3C,MAAM,oBAAC,MAAD,EAAM,WAAU,gBAAiB,CAAA;CACvC,SAAS,oBAAC,cAAD,EAAc,WAAU,kBAAmB,CAAA;CACpD,OAAO,oBAAC,cAAD,EAAc,WAAU,wBAAyB,CAAA;CACxD,OAAO,oBAAC,aAAD,EAAa,WAAU,wBAAyB,CAAA;CACvD,OAAO,oBAAC,aAAD,EAAa,WAAU,wBAAyB,CAAA;AACzD;AAaA,MAAM,UAAU,EACd,SAAS,QACT,MACA,OACA,UACA,OACA,WACA,UACA,GAAG,YACQ;CACX,OACE,qBAAC,OAAD;EACE,aAAU;EACV,WAAW,GACT,qEACA,SAEF;EACA,GAAI;EAPN,UAAA;GASE,oBAAC,OAAD;IAAK,WAAU;IAAwB,UAAA,QAAQ,aAAa;GAAa,CAAA;GACxE,SAAS,oBAAC,KAAD;IAAG,WAAU;IAAuB,UAAA;GAAS,CAAA;GACtD,YAAY,oBAAC,KAAD;IAAG,WAAU;IAAiC,UAAA;GAAY,CAAA;GACtE,SACC,oBAAC,OAAD;IAAK,WAAU;IACZ,UAAA;GACE,CAAA;GAEN,YAAY,oBAAC,OAAD;IAAK,WAAU;IAAe;GAAc,CAAA;EACtD;;AAET"}
|
package/dist/Reveals.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Reveals.d.mts","names":[],"sources":["../src/components/molecules/reveals/index.ts"],"mappings":";;;KAGK,
|
|
1
|
+
{"version":3,"file":"Reveals.d.mts","names":["RevealsImpl"],"sources":["../src/components/molecules/reveals/index.ts"],"mappings":";;;KAGK,0BAA0BA;EAAgB,aAAa;;cAEtD,SAAyB"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { ToolbarItem, ToolbarPreset } from "./components/atoms/rich-text-editor/types.mjs";
|
|
2
|
+
import RichTextEditor, { Props } from "./components/atoms/rich-text-editor/rich-text-editor.mjs";
|
|
3
|
+
export { type Props, type ToolbarItem, type ToolbarPreset, RichTextEditor as default };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from "./components/atoms/rich-text-editor/rich-text-editor.mjs";
|