haze-ui 1.25.0 → 1.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +98 -0
- package/dist/components/Accordion/Accordion.js +1 -0
- package/dist/components/Accordion/AccordionItem.js +1 -0
- package/dist/components/Accordion/index.js +1 -0
- package/dist/components/Affix/Affix.js +1 -0
- package/dist/components/Affix/index.js +1 -0
- package/dist/components/Alert/Alert.js +1 -0
- package/dist/components/Alert/index.js +1 -0
- package/dist/components/ApprovalCard/ApprovalCard.js +1 -0
- package/dist/components/ApprovalCard/index.js +1 -0
- package/dist/components/AspectRatio/AspectRatio.js +1 -0
- package/dist/components/AspectRatio/index.js +1 -0
- package/dist/components/AsyncSection/AsyncSection.js +1 -0
- package/dist/components/AsyncSection/index.js +1 -0
- package/dist/components/Avatar/Avatar.js +1 -0
- package/dist/components/Avatar/index.js +1 -0
- package/dist/components/AvatarGroup/AvatarGroup.js +1 -0
- package/dist/components/AvatarGroup/index.js +1 -0
- package/dist/components/BackToTop/BackToTop.js +1 -0
- package/dist/components/BackToTop/index.js +1 -0
- package/dist/components/Badge/Badge.js +1 -0
- package/dist/components/Badge/index.js +1 -0
- package/dist/components/Banner/Banner.js +1 -0
- package/dist/components/Banner/index.js +1 -0
- package/dist/components/BottomSheet/BottomSheet.js +1 -0
- package/dist/components/BottomSheet/index.js +1 -0
- package/dist/components/Breadcrumb/Breadcrumb.js +1 -0
- package/dist/components/Breadcrumb/BreadcrumbItem.js +1 -0
- package/dist/components/Breadcrumb/index.js +1 -0
- package/dist/components/Button/Button.js +1 -0
- package/dist/components/Button/ButtonLink.js +1 -0
- package/dist/components/Button/index.js +1 -0
- package/dist/components/Button/styles.js +1 -0
- package/dist/components/Calendar/Calendar.js +65 -93
- package/dist/components/Calendar/date.js +54 -0
- package/dist/components/Calendar/index.js +1 -0
- package/dist/components/Card/Card.js +1 -0
- package/dist/components/Card/index.js +1 -0
- package/dist/components/Carousel/Carousel.js +1 -0
- package/dist/components/Carousel/CarouselSlide.js +1 -0
- package/dist/components/Carousel/index.js +1 -0
- package/dist/components/Cascader/Cascader.js +1 -0
- package/dist/components/Cascader/index.js +1 -0
- package/dist/components/ChatContainer/ChatContainer.js +1 -0
- package/dist/components/ChatContainer/index.js +1 -0
- package/dist/components/ChatInput/ChatInput.js +1 -0
- package/dist/components/ChatInput/index.js +1 -0
- package/dist/components/ChatMessage/ChatMessage.js +1 -0
- package/dist/components/ChatMessage/index.js +1 -0
- package/dist/components/Checkbox/Checkbox.js +1 -0
- package/dist/components/Checkbox/CheckboxCore.js +1 -0
- package/dist/components/Checkbox/index.js +1 -0
- package/dist/components/Chip/Chip.js +1 -0
- package/dist/components/Chip/index.js +1 -0
- package/dist/components/CodeBlock/CodeBlock.js +1 -0
- package/dist/components/CodeBlock/index.js +1 -0
- package/dist/components/Collapsible/Collapsible.js +1 -0
- package/dist/components/Collapsible/index.js +1 -0
- package/dist/components/ColorPicker/ColorPicker.js +1 -0
- package/dist/components/ColorPicker/ColorPickerCore.js +1 -0
- package/dist/components/ColorPicker/index.js +1 -0
- package/dist/components/Combobox/Combobox.js +15 -7
- package/dist/components/Combobox/ComboboxOption.js +9 -5
- package/dist/components/Combobox/index.js +1 -0
- package/dist/components/Command/Command.js +1 -0
- package/dist/components/Command/index.js +1 -0
- package/dist/components/ConfirmDialog/ConfirmDialog.js +1 -0
- package/dist/components/ConfirmDialog/index.js +1 -0
- package/dist/components/Container/Container.js +1 -0
- package/dist/components/Container/index.js +1 -0
- package/dist/components/ContextMenu/ContextMenu.js +1 -0
- package/dist/components/ContextMenu/ContextMenuContent.js +1 -0
- package/dist/components/ContextMenu/ContextMenuContext.js +1 -0
- package/dist/components/ContextMenu/ContextMenuItem.js +1 -0
- package/dist/components/ContextMenu/ContextMenuSeparator.js +1 -0
- package/dist/components/ContextMenu/ContextMenuTrigger.js +1 -0
- package/dist/components/ContextMenu/index.js +1 -0
- package/dist/components/ConversationList/ConversationItem.js +1 -0
- package/dist/components/ConversationList/ConversationList.js +1 -0
- package/dist/components/ConversationList/index.js +1 -0
- package/dist/components/DataTable/DataTable.js +155 -113
- package/dist/components/DataTable/index.js +1 -0
- package/dist/components/DateRangePicker/DateRangePicker.js +1 -0
- package/dist/components/DateRangePicker/DateRangePickerCore.js +1 -0
- package/dist/components/DateRangePicker/index.js +1 -0
- package/dist/components/Datepicker/Datepicker.js +1 -0
- package/dist/components/Datepicker/DatepickerCore.js +1 -0
- package/dist/components/Datepicker/index.js +1 -0
- package/dist/components/Dialog/Dialog.js +1 -0
- package/dist/components/Dialog/index.js +1 -0
- package/dist/components/DiffViewer/DiffViewer.js +1 -0
- package/dist/components/DiffViewer/index.js +1 -0
- package/dist/components/Disclosure/Disclosure.js +1 -0
- package/dist/components/Disclosure/index.js +1 -0
- package/dist/components/Divider/Divider.js +1 -0
- package/dist/components/Divider/index.js +1 -0
- package/dist/components/Drawer/Drawer.js +1 -0
- package/dist/components/Drawer/index.js +1 -0
- package/dist/components/DropdownMenu/DropdownMenu.js +1 -0
- package/dist/components/DropdownMenu/DropdownMenuContent.js +1 -0
- package/dist/components/DropdownMenu/DropdownMenuContext.js +1 -0
- package/dist/components/DropdownMenu/DropdownMenuItem.js +1 -0
- package/dist/components/DropdownMenu/DropdownMenuSeparator.js +1 -0
- package/dist/components/DropdownMenu/DropdownMenuTrigger.js +1 -0
- package/dist/components/DropdownMenu/index.js +1 -0
- package/dist/components/Empty/Empty.js +1 -0
- package/dist/components/Empty/index.js +1 -0
- package/dist/components/FileInput/FileInput.js +1 -0
- package/dist/components/FileInput/index.js +1 -0
- package/dist/components/Flex/Flex.js +1 -0
- package/dist/components/Flex/index.js +1 -0
- package/dist/components/Grid/Grid.js +1 -0
- package/dist/components/Grid/GridItem.js +1 -0
- package/dist/components/Grid/index.js +1 -0
- package/dist/components/HoverCard/HoverCard.js +1 -0
- package/dist/components/HoverCard/index.js +1 -0
- package/dist/components/Icon/Icon.js +1 -0
- package/dist/components/Icon/index.js +1 -0
- package/dist/components/Image/Image.js +1 -0
- package/dist/components/Image/index.js +1 -0
- package/dist/components/InlineEdit/InlineEdit.js +1 -0
- package/dist/components/InlineEdit/index.js +1 -0
- package/dist/components/Input/Input.js +1 -0
- package/dist/components/Input/InputCore.js +1 -0
- package/dist/components/Input/index.js +1 -0
- package/dist/components/Kbd/Kbd.js +1 -0
- package/dist/components/Kbd/index.js +1 -0
- package/dist/components/List/List.js +1 -0
- package/dist/components/List/ListItem.js +1 -0
- package/dist/components/List/index.js +1 -0
- package/dist/components/LocaleProvider/LocaleContext.js +1 -0
- package/dist/components/LocaleProvider/LocaleProvider.js +1 -0
- package/dist/components/LocaleProvider/index.js +5 -3
- package/dist/components/LocaleProvider/locale.js +7 -1
- package/dist/components/LocaleProvider/useStrings.js +18 -8
- package/dist/components/LocaleProvider/zh-cn.js +128 -0
- package/dist/components/LogViewer/LogViewer.js +1 -0
- package/dist/components/LogViewer/index.js +1 -0
- package/dist/components/MarkdownRenderer/MarkdownRenderer.js +1 -0
- package/dist/components/MarkdownRenderer/index.js +1 -0
- package/dist/components/MarkdownRenderer/markdown-blocks.js +1 -0
- package/dist/components/Mentions/Mentions.js +17 -0
- package/dist/components/Mentions/MentionsCore.js +116 -0
- package/dist/components/Mentions/index.js +4 -0
- package/dist/components/Menu/Menu.js +1 -0
- package/dist/components/Menu/MenuDivider.js +1 -0
- package/dist/components/Menu/MenuItem.js +1 -0
- package/dist/components/Menu/index.js +1 -0
- package/dist/components/ModelPicker/ModelPicker.js +1 -0
- package/dist/components/ModelPicker/index.js +1 -0
- package/dist/components/NavigationBar/NavLink.js +1 -0
- package/dist/components/NavigationBar/NavigationBar.js +1 -0
- package/dist/components/NavigationBar/index.js +1 -0
- package/dist/components/NumberInput/NumberInput.js +1 -0
- package/dist/components/NumberInput/NumberInputCore.js +1 -0
- package/dist/components/NumberInput/index.js +1 -0
- package/dist/components/OTPInput/OTPInput.js +1 -0
- package/dist/components/OTPInput/OTPInputCore.js +1 -0
- package/dist/components/OTPInput/index.js +1 -0
- package/dist/components/Pagination/Pagination.js +1 -0
- package/dist/components/Pagination/index.js +1 -0
- package/dist/components/PasswordInput/PasswordInput.js +1 -0
- package/dist/components/PasswordInput/PasswordInputCore.js +1 -0
- package/dist/components/PasswordInput/index.js +1 -0
- package/dist/components/Popover/Popover.js +1 -0
- package/dist/components/Popover/index.js +1 -0
- package/dist/components/Progress/Progress.js +1 -0
- package/dist/components/Progress/index.js +1 -0
- package/dist/components/Radio/Radio.js +1 -0
- package/dist/components/Radio/RadioContext.js +1 -0
- package/dist/components/Radio/RadioGroup.js +1 -0
- package/dist/components/Radio/RadioGroupCore.js +1 -0
- package/dist/components/Radio/index.js +1 -0
- package/dist/components/Rating/Rating.js +1 -0
- package/dist/components/Rating/RatingCore.js +1 -0
- package/dist/components/Rating/index.js +1 -0
- package/dist/components/Resizable/Resizable.js +1 -0
- package/dist/components/Resizable/index.js +1 -0
- package/dist/components/ScrollArea/ScrollArea.js +1 -0
- package/dist/components/ScrollArea/index.js +1 -0
- package/dist/components/Segmented/Segmented.js +1 -0
- package/dist/components/Segmented/SegmentedCore.js +1 -0
- package/dist/components/Segmented/index.js +1 -0
- package/dist/components/Select/Option.js +1 -0
- package/dist/components/Select/Select.js +1 -0
- package/dist/components/Select/SelectCore.js +1 -0
- package/dist/components/Select/index.js +1 -0
- package/dist/components/Sidebar/Sidebar.js +1 -0
- package/dist/components/Sidebar/index.js +1 -0
- package/dist/components/Skeleton/Skeleton.js +1 -0
- package/dist/components/Skeleton/index.js +1 -0
- package/dist/components/Slider/Slider.js +1 -0
- package/dist/components/Slider/SliderCore.js +1 -0
- package/dist/components/Slider/index.js +1 -0
- package/dist/components/Spinner/Spinner.js +1 -0
- package/dist/components/Spinner/index.js +1 -0
- package/dist/components/Stat/Stat.js +1 -0
- package/dist/components/Stat/index.js +1 -0
- package/dist/components/StepTimeline/StepTimeline.js +1 -0
- package/dist/components/StepTimeline/index.js +1 -0
- package/dist/components/Stepper/Step.js +1 -0
- package/dist/components/Stepper/Stepper.js +1 -0
- package/dist/components/Stepper/StepperContext.js +1 -0
- package/dist/components/Stepper/index.js +1 -0
- package/dist/components/StreamingText/StreamingText.js +1 -0
- package/dist/components/StreamingText/index.js +1 -0
- package/dist/components/SwipeAction/SwipeAction.js +1 -0
- package/dist/components/SwipeAction/index.js +1 -0
- package/dist/components/Switch/Switch.js +1 -0
- package/dist/components/Switch/SwitchCore.js +1 -0
- package/dist/components/Switch/index.js +1 -0
- package/dist/components/Table/Table.js +1 -0
- package/dist/components/Table/TableBody.js +1 -0
- package/dist/components/Table/TableCell.js +1 -0
- package/dist/components/Table/TableHead.js +1 -0
- package/dist/components/Table/TableRow.js +1 -0
- package/dist/components/Table/index.js +1 -0
- package/dist/components/Tabs/Tab.js +1 -0
- package/dist/components/Tabs/TabList.js +1 -0
- package/dist/components/Tabs/TabPanel.js +1 -0
- package/dist/components/Tabs/Tabs.js +1 -0
- package/dist/components/Tabs/TabsContext.js +1 -0
- package/dist/components/Tabs/index.js +1 -0
- package/dist/components/Tag/Tag.js +1 -0
- package/dist/components/Tag/index.js +1 -0
- package/dist/components/TagGroup/TagGroup.js +1 -0
- package/dist/components/TagGroup/TagGroupItem.js +1 -0
- package/dist/components/TagGroup/index.js +1 -0
- package/dist/components/TagInput/TagInput.js +1 -0
- package/dist/components/TagInput/TagInputCore.js +1 -0
- package/dist/components/TagInput/index.js +1 -0
- package/dist/components/Textarea/Textarea.js +1 -0
- package/dist/components/Textarea/TextareaCore.js +1 -0
- package/dist/components/Textarea/index.js +1 -0
- package/dist/components/ThinkingIndicator/ThinkingIndicator.js +1 -0
- package/dist/components/ThinkingIndicator/index.js +1 -0
- package/dist/components/TimePicker/TimePicker.js +1 -0
- package/dist/components/TimePicker/TimePickerCore.js +1 -0
- package/dist/components/TimePicker/index.js +1 -0
- package/dist/components/Timeline/Timeline.js +1 -0
- package/dist/components/Timeline/index.js +1 -0
- package/dist/components/Toast/Toast.js +36 -30
- package/dist/components/Toast/ToastContainer.js +1 -0
- package/dist/components/Toast/ToastContext.js +1 -0
- package/dist/components/Toast/index.js +1 -0
- package/dist/components/Toast/toast2.js +1 -0
- package/dist/components/Toast/useToast.js +1 -0
- package/dist/components/TokenCounter/TokenCounter.js +1 -0
- package/dist/components/TokenCounter/index.js +1 -0
- package/dist/components/ToolCallCard/ToolCallCard.js +1 -0
- package/dist/components/ToolCallCard/index.js +1 -0
- package/dist/components/Toolbar/Toolbar.js +1 -0
- package/dist/components/Toolbar/ToolbarButton.js +1 -0
- package/dist/components/Toolbar/ToolbarContext.js +1 -0
- package/dist/components/Toolbar/ToolbarSeparator.js +1 -0
- package/dist/components/Toolbar/index.js +1 -0
- package/dist/components/Tooltip/Tooltip.js +1 -0
- package/dist/components/Tooltip/index.js +1 -0
- package/dist/components/Tour/Tour.js +1 -0
- package/dist/components/Tour/index.js +1 -0
- package/dist/components/Transfer/Transfer.js +1 -0
- package/dist/components/Transfer/TransferCore.js +1 -0
- package/dist/components/Transfer/index.js +1 -0
- package/dist/components/Tree/Tree.js +1 -0
- package/dist/components/Tree/TreeItem.js +1 -0
- package/dist/components/Tree/index.js +1 -0
- package/dist/components/Tree/utils.js +1 -0
- package/dist/components/Typography/Typography.js +1 -0
- package/dist/components/Typography/index.js +1 -0
- package/dist/components/Upload/Upload.js +1 -0
- package/dist/components/Upload/UploadCore.js +1 -0
- package/dist/components/Upload/index.js +1 -0
- package/dist/components/VirtualList/VirtualList.js +1 -0
- package/dist/components/VirtualList/index.js +1 -0
- package/dist/css/accordion.css +1 -1
- package/dist/css/alert.css +1 -1
- package/dist/css/approval-card.css +1 -1
- package/dist/css/async-section.css +1 -1
- package/dist/css/back-to-top.css +1 -1
- package/dist/css/breadcrumb.css +1 -1
- package/dist/css/button.css +1 -1
- package/dist/css/carousel.css +1 -1
- package/dist/css/cascader.css +1 -1
- package/dist/css/chat-input.css +1 -1
- package/dist/css/checkbox.css +1 -1
- package/dist/css/chip.css +1 -1
- package/dist/css/color-picker.css +1 -1
- package/dist/css/combobox.css +1 -1
- package/dist/css/command.css +1 -1
- package/dist/css/context-menu.css +1 -1
- package/dist/css/conversation-list.css +1 -1
- package/dist/css/data-table.css +1 -1
- package/dist/css/date-range-picker.css +1 -1
- package/dist/css/datepicker.css +1 -1
- package/dist/css/disclosure.css +1 -1
- package/dist/css/dropdown-menu.css +1 -1
- package/dist/css/file-input.css +1 -1
- package/dist/css/inline-edit.css +1 -1
- package/dist/css/input.css +1 -1
- package/dist/css/log-viewer.css +1 -1
- package/dist/css/mentions.css +2 -0
- package/dist/css/menu.css +1 -1
- package/dist/css/model-picker.css +1 -1
- package/dist/css/navigation-bar.css +1 -1
- package/dist/css/number-input.css +1 -1
- package/dist/css/otp-input.css +1 -1
- package/dist/css/pagination.css +1 -1
- package/dist/css/password-input.css +1 -1
- package/dist/css/progress.css +1 -1
- package/dist/css/radio.css +1 -1
- package/dist/css/rating.css +1 -1
- package/dist/css/resizable.css +1 -1
- package/dist/css/segmented.css +1 -1
- package/dist/css/select.css +1 -1
- package/dist/css/slider.css +1 -1
- package/dist/css/stepper.css +1 -1
- package/dist/css/swipe-action.css +1 -1
- package/dist/css/switch.css +1 -1
- package/dist/css/tabs.css +1 -1
- package/dist/css/tag-input.css +1 -1
- package/dist/css/tag.css +1 -1
- package/dist/css/textarea.css +1 -1
- package/dist/css/time-picker.css +1 -1
- package/dist/css/token-counter.css +1 -1
- package/dist/css/tokens.css +1 -1
- package/dist/css/tree.css +1 -1
- package/dist/css/upload.css +1 -1
- package/dist/css-manifest.json +10 -1
- package/dist/form/FormItem.js +1 -0
- package/dist/form/index.js +1 -0
- package/dist/haze-ui.css +53 -52
- package/dist/hooks/useClipboard.js +30 -0
- package/dist/hooks/useDebouncedCallback.js +17 -0
- package/dist/hooks/useDebouncedValue.js +12 -0
- package/dist/hooks/useMediaQuery.js +13 -0
- package/dist/hooks/usePrefersReducedMotion.js +9 -0
- package/dist/hooks/useTitle.js +1 -0
- package/dist/index.js +138 -129
- package/dist/registry.json +15 -15
- package/dist/tokens/colors.js +1 -0
- package/dist/tokens/index.js +1 -0
- package/dist/tokens/motion.js +1 -0
- package/dist/tokens/oklch.js +1 -0
- package/dist/tokens/palette.js +1 -0
- package/dist/tokens/registry.js +1 -0
- package/dist/tokens/spacing.js +1 -0
- package/dist/tokens/typography.js +1 -0
- package/dist/types/components/Calendar/date.d.ts +79 -0
- package/dist/types/components/Combobox/ComboboxOption.d.ts +13 -1
- package/dist/types/components/DataTable/DataTable.d.ts +43 -2
- package/dist/types/components/DataTable/index.d.ts +1 -1
- package/dist/types/components/LocaleProvider/LocaleContext.d.ts +1 -1
- package/dist/types/components/LocaleProvider/LocaleProvider.d.ts +5 -2
- package/dist/types/components/LocaleProvider/index.d.ts +2 -1
- package/dist/types/components/LocaleProvider/locale.d.ts +7 -1
- package/dist/types/components/LocaleProvider/useStrings.d.ts +5 -4
- package/dist/types/components/LocaleProvider/zh-cn.d.ts +13 -0
- package/dist/types/components/Mentions/Mentions.d.ts +17 -0
- package/dist/types/components/Mentions/MentionsCore.d.ts +21 -0
- package/dist/types/components/Mentions/index.d.ts +4 -0
- package/dist/types/hooks/index.d.ts +6 -0
- package/dist/types/hooks/useClipboard.d.ts +31 -0
- package/dist/types/hooks/useDebouncedCallback.d.ts +21 -0
- package/dist/types/hooks/useDebouncedValue.d.ts +20 -0
- package/dist/types/hooks/useMediaQuery.d.ts +17 -0
- package/dist/types/hooks/usePrefersReducedMotion.d.ts +14 -0
- package/dist/types/index.d.ts +6 -3
- package/dist/utils/classnames.js +1 -0
- package/dist/utils/collision.js +1 -0
- package/dist/utils/floating.js +1 -0
- package/dist/utils/focus-scope.js +1 -0
- package/dist/utils/focus.js +1 -0
- package/dist/utils/menuKeyboard.js +1 -0
- package/dist/utils/presence.js +1 -0
- package/package.json +15 -13
package/README.md
CHANGED
|
@@ -10,6 +10,7 @@ English | [简体中文](./README-zh_CN.md)
|
|
|
10
10
|
## Features
|
|
11
11
|
|
|
12
12
|
- Integrated [react use control](https://github.com/wmzy/react-use-control) provides component internal states
|
|
13
|
+
- Built for React 19+ (`ref` as a prop, `ControlOrValue<T>` state protocol) — no React 18 compatibility layer
|
|
13
14
|
- Keep strict, provide lightweight, composable, and easily extendable components
|
|
14
15
|
- Support themes customization
|
|
15
16
|
- Support Tree-shaking
|
|
@@ -32,6 +33,46 @@ npm i haze-ui
|
|
|
32
33
|
pnpm add haze-ui
|
|
33
34
|
```
|
|
34
35
|
|
|
36
|
+
### React 19+ by design
|
|
37
|
+
|
|
38
|
+
The peer range is `react: ^19.0.0` on purpose — haze-ui is built on
|
|
39
|
+
modern React rather than carrying a compatibility layer for 18:
|
|
40
|
+
|
|
41
|
+
- **`ref` as a prop.** React 19 passes `ref` to function components
|
|
42
|
+
directly, so components that expose refs accept one prop instead of a
|
|
43
|
+
`forwardRef` wrapper layer.
|
|
44
|
+
- **A modern-platform baseline.** Floating panels (Popover, DropdownMenu,
|
|
45
|
+
Tooltip, ContextMenu, Combobox, Datepicker) choose between three tiers
|
|
46
|
+
by feature detection — native `popover` + CSS anchor positioning,
|
|
47
|
+
`popover` alone, or a JS fallback — with the newest platform features
|
|
48
|
+
as the primary path, not an enhancement layered on top.
|
|
49
|
+
- **`ControlOrValue<T>`** — the `Control<T> | T` state protocol — is
|
|
50
|
+
designed for modern React semantics throughout.
|
|
51
|
+
|
|
52
|
+
On React 18? Upgrade first. haze-ui ships no React 18 compatibility
|
|
53
|
+
layer, and none is planned.
|
|
54
|
+
|
|
55
|
+
### Optional peer dependencies
|
|
56
|
+
|
|
57
|
+
haze-ui's only required runtime dependency is `react-use-control` — the
|
|
58
|
+
engine behind `ControlOrValue<T>`. Two integrations are optional peers,
|
|
59
|
+
installed only when you use the components that need them:
|
|
60
|
+
|
|
61
|
+
```sh
|
|
62
|
+
npm i react-f0rm # FormItem (peer range ^1.1.1)
|
|
63
|
+
npm i @tanstack/react-table # DataTable (peer range ^9.2.4)
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Everything else — `Button`, `Input`, `Dialog`, `Select`, … — runs with
|
|
67
|
+
nothing beyond `react` and `react-use-control`. The dist is ESM with
|
|
68
|
+
`preserveModules` and side-effect-free JS, so bundlers (Next.js, Vite,
|
|
69
|
+
webpack, Turbopack, Rollup) tree-shake the unused re-export chains and
|
|
70
|
+
never resolve peers you haven't installed: `import { Button } from
|
|
71
|
+
'haze-ui'` works without `react-f0rm`. Only bundler-less consumers
|
|
72
|
+
(bare Node ESM importing the barrel, which links the module graph
|
|
73
|
+
eagerly) must install both peers; the `haze-ui/form` and
|
|
74
|
+
`haze-ui/components/DataTable` subpaths bypass the barrel entirely.
|
|
75
|
+
|
|
35
76
|
### Browser support
|
|
36
77
|
|
|
37
78
|
Since v1.13, haze-ui colors are generated in **OKLCH**, with interaction
|
|
@@ -83,6 +124,27 @@ included); `noCss` lists pure-logic exports with no css of their own.
|
|
|
83
124
|
Bundler plugins and codemods should read this manifest instead of
|
|
84
125
|
re-deriving file names — the mapping changes in lockstep with the build.
|
|
85
126
|
|
|
127
|
+
### Server Components (Next.js App Router)
|
|
128
|
+
|
|
129
|
+
Every JS module in `dist/` starts with the `'use client'` directive,
|
|
130
|
+
injected at build time — the same convention Radix, Base UI and React
|
|
131
|
+
Aria ship. In an App Router project you import haze-ui straight from
|
|
132
|
+
your client components; there is no need for a wrapper module that
|
|
133
|
+
re-exports the library under its own `'use client'` banner:
|
|
134
|
+
|
|
135
|
+
```jsx
|
|
136
|
+
// any client component — import straight from the package
|
|
137
|
+
import { Button } from 'haze-ui';
|
|
138
|
+
|
|
139
|
+
export function Actions() {
|
|
140
|
+
return <Button>Start</Button>;
|
|
141
|
+
}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
CSS loading is unchanged from the two modes above — `haze-ui/styles.css`
|
|
145
|
+
in the root layout, or the `haze-ui/css/*` subpaths. A runnable Next.js
|
|
146
|
+
15 project lives in [`examples/nextjs`](./examples/nextjs).
|
|
147
|
+
|
|
86
148
|
## ButtonLink: a real anchor with the Button skin
|
|
87
149
|
|
|
88
150
|
Navigation that must look like a button should still *be* a link —
|
|
@@ -183,6 +245,30 @@ function SettingsView() {
|
|
|
183
245
|
}
|
|
184
246
|
```
|
|
185
247
|
|
|
248
|
+
## AI-friendly distribution
|
|
249
|
+
|
|
250
|
+
**llms.txt** — a markdown overview of the whole library (the `ControlOrValue<T>`
|
|
251
|
+
state protocol, both CSS loading modes, all 101 components grouped with one-line
|
|
252
|
+
purposes, the token system, the floating-overlay tiers, form integration) written
|
|
253
|
+
for AI coding tools and crawlers. It lives at the repo root
|
|
254
|
+
([llms.txt](./llms.txt)) and, on the docs site, at
|
|
255
|
+
<https://wmzy.github.io/haze-ui/llms.txt> (`build:demo` copies it into `dist/`).
|
|
256
|
+
|
|
257
|
+
**registry.json** — a shadcn/ui-compatible registry shipped as the
|
|
258
|
+
`haze-ui/registry.json` npm artifact (regenerated by `scripts/generate-registry.mjs`
|
|
259
|
+
on every build), also reachable at <https://unpkg.com/haze-ui/registry.json>.
|
|
260
|
+
Consume it with the shadcn CLI:
|
|
261
|
+
|
|
262
|
+
```sh
|
|
263
|
+
pnpm dlx shadcn@latest add https://unpkg.com/haze-ui/registry.json
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
To be precise about coverage: it contains only the **agent components** (the
|
|
267
|
+
AI & Chat group plus AsyncSection). Each item is a wrapper file, not vendored
|
|
268
|
+
source — it re-exports the published component and imports its stylesheet, so
|
|
269
|
+
haze-ui stays an npm dependency that keeps updating underneath; treat the
|
|
270
|
+
generated file as your customization layer.
|
|
271
|
+
|
|
186
272
|
## react-f0rm Integration
|
|
187
273
|
|
|
188
274
|
react-f0rm owns form field state, and its headless `useField` hook is
|
|
@@ -457,6 +543,12 @@ display, `validate`-only).
|
|
|
457
543
|
|
|
458
544
|
## Accessibility & RTL
|
|
459
545
|
|
|
546
|
+
Accessibility is a baseline, not an opt-in: every component's test suite
|
|
547
|
+
includes axe checks, and the token sheet ships a global
|
|
548
|
+
`@media (prefers-reduced-motion: reduce)` block that collapses every
|
|
549
|
+
animation duration token to `0ms` — motion-sensitive users get instant
|
|
550
|
+
state changes with no per-component wiring.
|
|
551
|
+
|
|
460
552
|
haze-ui supports RTL via CSS logical properties wherever a side is
|
|
461
553
|
semantic (the *start/end* of reading flow), not just decorative. Set
|
|
462
554
|
`dir="rtl"` (or `direction: rtl`) on an ancestor and those sides mirror
|
|
@@ -573,6 +665,12 @@ import 'haze-ui/css/button.css';
|
|
|
573
665
|
No — haze-ui is ESM-only (`"type": "module"`). Use a bundler or runtime
|
|
574
666
|
with ESM support (Vite, webpack 5, Next.js, Node ≥ 18, …).
|
|
575
667
|
|
|
668
|
+
### Does haze-ui support React 18?
|
|
669
|
+
|
|
670
|
+
No — the peer range is `react@^19.0.0` by design (see
|
|
671
|
+
[React 19+ by design](#react-19-by-design)). Upgrade to React 19 first;
|
|
672
|
+
haze-ui ships no React 18 compatibility layer.
|
|
673
|
+
|
|
576
674
|
### How do I detect (or degrade) the relative-color syntax?
|
|
577
675
|
|
|
578
676
|
Since v1.13, theme interaction states are derived with CSS relative
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
|
|
2
|
+
"use client";
|
|
2
3
|
import { classnames as e } from "../../utils/classnames.js";
|
|
3
4
|
import { useStrings as t } from "../LocaleProvider/useStrings.js";
|
|
5
|
+
import { addMonths as n, buildMonthCells as r, formatDate as i, parseCivilDate as a } from "./date.js";
|
|
4
6
|
/* empty css */
|
|
5
|
-
import { jsx as
|
|
6
|
-
import { useState as
|
|
7
|
-
import { useControl as
|
|
7
|
+
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
8
|
+
import { useState as c } from "react";
|
|
9
|
+
import { useControl as l } from "react-use-control";
|
|
8
10
|
//#region src/lib/components/Calendar/Calendar.tsx
|
|
9
|
-
var
|
|
11
|
+
var u = "haze-Calendar__calendarWrapper", d = "haze-Calendar__header", f = "haze-Calendar__headerBtn", p = "haze-Calendar__headerTitle", m = "haze-Calendar__headerTrailing", h = "haze-Calendar__grid", g = "haze-Calendar__rowContents", _ = "haze-Calendar__cellContents", v = "haze-Calendar__weekday", y = "haze-Calendar__dayBtn", b = "haze-Calendar__daySelected", x = "haze-Calendar__dayOutside", S = [
|
|
10
12
|
"Su",
|
|
11
13
|
"Mo",
|
|
12
14
|
"Tu",
|
|
@@ -15,7 +17,7 @@ var o = "haze-Calendar__calendarWrapper", s = "haze-Calendar__header", c = "haze
|
|
|
15
17
|
"Fr",
|
|
16
18
|
"Sa"
|
|
17
19
|
];
|
|
18
|
-
function
|
|
20
|
+
function C(e, t) {
|
|
19
21
|
if (t !== void 0) return t;
|
|
20
22
|
if (e === void 0) return 0;
|
|
21
23
|
try {
|
|
@@ -25,128 +27,98 @@ function y(e, t) {
|
|
|
25
27
|
return 0;
|
|
26
28
|
}
|
|
27
29
|
}
|
|
28
|
-
function
|
|
29
|
-
if (e === void 0) return Array.from({ length: 7 }, (e, n) =>
|
|
30
|
+
function w(e, t) {
|
|
31
|
+
if (e === void 0) return Array.from({ length: 7 }, (e, n) => S[(t + n) % 7]);
|
|
30
32
|
let n = new Intl.DateTimeFormat(e, { weekday: "short" }), r = Array.from({ length: 7 }, (e, t) => n.format(new Date(2024, 0, 7 + t)));
|
|
31
33
|
return Array.from({ length: 7 }, (e, n) => r[(t + n) % 7]);
|
|
32
34
|
}
|
|
33
|
-
function
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
let [A, j] = a(v, ""), M = t("calendar"), N = A ? new Date(A) : /* @__PURE__ */ new Date(), [P, F] = i(N.getFullYear()), [I, L] = i(N.getMonth()), R = y(T, E), z = b(T, R), B = x(P, I), V = new Date(P, I, 1).getDay(), H = x(P, I - 1), U = (V - R + 7) % 7, W = () => {
|
|
41
|
-
L((e) => e === 0 ? (F((e) => e - 1), 11) : e - 1);
|
|
35
|
+
function T({ value: S, min: T, max: E, locale: D, weekStartsOn: O, onSelect: k, className: A, ...j }) {
|
|
36
|
+
let [M, N] = l(S, ""), P = t("calendar"), F = M && a(M) || /* @__PURE__ */ new Date(), [I, L] = c(F.getFullYear()), [R, z] = c(F.getMonth()), B = C(D, O), V = w(D, B), H = r(I, R, B), U = () => {
|
|
37
|
+
let e = n(I, R, -1);
|
|
38
|
+
L(e.year), z(e.month);
|
|
39
|
+
}, W = () => {
|
|
40
|
+
let e = n(I, R, 1);
|
|
41
|
+
L(e.year), z(e.month);
|
|
42
42
|
}, G = () => {
|
|
43
|
-
L((e) => e === 11 ? (F((e) => e + 1), 0) : e + 1);
|
|
44
|
-
}, K = () => {
|
|
45
43
|
let e = /* @__PURE__ */ new Date();
|
|
46
|
-
|
|
47
|
-
},
|
|
48
|
-
for (let e = U - 1; e >= 0; e--) {
|
|
49
|
-
let t = I === 0 ? 11 : I - 1, n = I === 0 ? P - 1 : P;
|
|
50
|
-
J.push({
|
|
51
|
-
day: H - e,
|
|
52
|
-
month: t,
|
|
53
|
-
year: n,
|
|
54
|
-
outside: !0
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
for (let e = 1; e <= B; e++) J.push({
|
|
58
|
-
day: e,
|
|
59
|
-
month: I,
|
|
60
|
-
year: P,
|
|
61
|
-
outside: !1
|
|
62
|
-
});
|
|
63
|
-
let Y = 7 - J.length % 7;
|
|
64
|
-
if (Y < 7) for (let e = 1; e <= Y; e++) {
|
|
65
|
-
let t = I === 11 ? 0 : I + 1, n = I === 11 ? P + 1 : P;
|
|
66
|
-
J.push({
|
|
67
|
-
day: e,
|
|
68
|
-
month: t,
|
|
69
|
-
year: n,
|
|
70
|
-
outside: !0
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
let X = new Intl.DateTimeFormat(T ?? "default", {
|
|
44
|
+
L(e.getFullYear()), z(e.getMonth());
|
|
45
|
+
}, K = (e) => !!(T && e < T || E && e > E), q = new Intl.DateTimeFormat(D ?? "default", {
|
|
74
46
|
month: "long",
|
|
75
47
|
year: "numeric"
|
|
76
|
-
}).format(new Date(
|
|
77
|
-
for (let e = 0; e <
|
|
78
|
-
return /* @__PURE__ */
|
|
79
|
-
...
|
|
80
|
-
className: e([
|
|
81
|
-
children: [/* @__PURE__ */
|
|
82
|
-
className: e([
|
|
48
|
+
}).format(new Date(I, R)), J = [];
|
|
49
|
+
for (let e = 0; e < H.length; e += 7) J.push(H.slice(e, e + 7));
|
|
50
|
+
return /* @__PURE__ */ s("div", {
|
|
51
|
+
...j,
|
|
52
|
+
className: e([u, A]),
|
|
53
|
+
children: [/* @__PURE__ */ s("div", {
|
|
54
|
+
className: e([d]),
|
|
83
55
|
children: [
|
|
84
|
-
/* @__PURE__ */
|
|
56
|
+
/* @__PURE__ */ o("button", {
|
|
85
57
|
type: "button",
|
|
86
|
-
onClick:
|
|
87
|
-
"aria-label":
|
|
88
|
-
className: e([
|
|
58
|
+
onClick: U,
|
|
59
|
+
"aria-label": P.previousMonth,
|
|
60
|
+
className: e([f]),
|
|
89
61
|
children: "‹"
|
|
90
62
|
}),
|
|
91
|
-
/* @__PURE__ */
|
|
92
|
-
className: e([
|
|
93
|
-
children:
|
|
63
|
+
/* @__PURE__ */ o("span", {
|
|
64
|
+
className: e([p]),
|
|
65
|
+
children: q
|
|
94
66
|
}),
|
|
95
|
-
/* @__PURE__ */
|
|
96
|
-
className: e([
|
|
97
|
-
children: [/* @__PURE__ */
|
|
98
|
-
type: "button",
|
|
99
|
-
onClick: K,
|
|
100
|
-
className: e([c]),
|
|
101
|
-
children: M.today
|
|
102
|
-
}), /* @__PURE__ */ n("button", {
|
|
67
|
+
/* @__PURE__ */ s("span", {
|
|
68
|
+
className: e([m]),
|
|
69
|
+
children: [/* @__PURE__ */ o("button", {
|
|
103
70
|
type: "button",
|
|
104
71
|
onClick: G,
|
|
105
|
-
|
|
106
|
-
|
|
72
|
+
className: e([f]),
|
|
73
|
+
children: P.today
|
|
74
|
+
}), /* @__PURE__ */ o("button", {
|
|
75
|
+
type: "button",
|
|
76
|
+
onClick: W,
|
|
77
|
+
"aria-label": P.nextMonth,
|
|
78
|
+
className: e([f]),
|
|
107
79
|
children: "›"
|
|
108
80
|
})]
|
|
109
81
|
})
|
|
110
82
|
]
|
|
111
|
-
}), /* @__PURE__ */
|
|
83
|
+
}), /* @__PURE__ */ s("div", {
|
|
112
84
|
role: "grid",
|
|
113
|
-
"aria-label":
|
|
114
|
-
className: e([
|
|
115
|
-
children: [/* @__PURE__ */
|
|
85
|
+
"aria-label": q,
|
|
86
|
+
className: e([h]),
|
|
87
|
+
children: [/* @__PURE__ */ o("div", {
|
|
116
88
|
role: "row",
|
|
117
|
-
className: e([
|
|
118
|
-
children:
|
|
89
|
+
className: e([g]),
|
|
90
|
+
children: V.map((t, n) => /* @__PURE__ */ o("span", {
|
|
119
91
|
role: "columnheader",
|
|
120
|
-
className: e([
|
|
92
|
+
className: e([v]),
|
|
121
93
|
children: t
|
|
122
|
-
},
|
|
123
|
-
}),
|
|
94
|
+
}, n))
|
|
95
|
+
}), J.map((t, n) => /* @__PURE__ */ o("div", {
|
|
124
96
|
role: "row",
|
|
125
|
-
className: e([
|
|
97
|
+
className: e([g]),
|
|
126
98
|
children: t.map((t) => {
|
|
127
|
-
let
|
|
128
|
-
return /* @__PURE__ */
|
|
99
|
+
let n = i(t.year, t.month, t.day);
|
|
100
|
+
return /* @__PURE__ */ o("span", {
|
|
129
101
|
role: "gridcell",
|
|
130
|
-
"aria-selected":
|
|
131
|
-
className: e([
|
|
132
|
-
children: /* @__PURE__ */
|
|
102
|
+
"aria-selected": n === M,
|
|
103
|
+
className: e([_]),
|
|
104
|
+
children: /* @__PURE__ */ o("button", {
|
|
133
105
|
type: "button",
|
|
134
|
-
disabled:
|
|
106
|
+
disabled: K(n),
|
|
135
107
|
onClick: () => {
|
|
136
|
-
|
|
108
|
+
N(n), k?.(n);
|
|
137
109
|
},
|
|
138
110
|
className: e([
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
t.outside &&
|
|
111
|
+
y,
|
|
112
|
+
n === M && b,
|
|
113
|
+
t.outside && x
|
|
142
114
|
]),
|
|
143
115
|
children: t.day
|
|
144
116
|
})
|
|
145
|
-
},
|
|
117
|
+
}, n);
|
|
146
118
|
})
|
|
147
|
-
},
|
|
119
|
+
}, n))]
|
|
148
120
|
})]
|
|
149
121
|
});
|
|
150
122
|
}
|
|
151
123
|
//#endregion
|
|
152
|
-
export {
|
|
124
|
+
export { T as default };
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
//#region src/lib/components/Calendar/date.ts
|
|
3
|
+
function e(e, t) {
|
|
4
|
+
return new Date(e, t + 1, 0).getDate();
|
|
5
|
+
}
|
|
6
|
+
function t(e, t, n) {
|
|
7
|
+
let r = e * 12 + t + n;
|
|
8
|
+
return {
|
|
9
|
+
year: Math.floor(r / 12),
|
|
10
|
+
month: (r % 12 + 12) % 12
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
function n(e, t, n) {
|
|
14
|
+
return (new Date(e, t, 1).getDay() - n + 7) % 7;
|
|
15
|
+
}
|
|
16
|
+
function r(r, i, a) {
|
|
17
|
+
let o = [], s = e(r, i), c = n(r, i, a), l = t(r, i, -1), u = e(l.year, l.month);
|
|
18
|
+
for (let e = c - 1; e >= 0; e--) o.push({
|
|
19
|
+
day: u - e,
|
|
20
|
+
month: l.month,
|
|
21
|
+
year: l.year,
|
|
22
|
+
outside: !0
|
|
23
|
+
});
|
|
24
|
+
for (let e = 1; e <= s; e++) o.push({
|
|
25
|
+
day: e,
|
|
26
|
+
month: i,
|
|
27
|
+
year: r,
|
|
28
|
+
outside: !1
|
|
29
|
+
});
|
|
30
|
+
let d = 7 - o.length % 7;
|
|
31
|
+
if (d < 7) {
|
|
32
|
+
let e = t(r, i, 1);
|
|
33
|
+
for (let t = 1; t <= d; t++) o.push({
|
|
34
|
+
day: t,
|
|
35
|
+
month: e.month,
|
|
36
|
+
year: e.year,
|
|
37
|
+
outside: !0
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
return o;
|
|
41
|
+
}
|
|
42
|
+
function i(e, t, n) {
|
|
43
|
+
return `${e}-${String(t + 1).padStart(2, "0")}-${String(n).padStart(2, "0")}`;
|
|
44
|
+
}
|
|
45
|
+
function a(t) {
|
|
46
|
+
let n = /^(\d{4})-(\d{2})-(\d{2})$/.exec(t);
|
|
47
|
+
if (!n) return null;
|
|
48
|
+
let r = Number(n[1]), i = Number(n[2]) - 1, a = Number(n[3]);
|
|
49
|
+
if (i < 0 || i > 11 || a < 1 || a > e(r, i)) return null;
|
|
50
|
+
let o = new Date(r, i, a);
|
|
51
|
+
return o.getFullYear() !== r || o.getMonth() !== i || o.getDate() !== a ? null : o;
|
|
52
|
+
}
|
|
53
|
+
//#endregion
|
|
54
|
+
export { t as addMonths, r as buildMonthCells, i as formatDate, e as getDaysInMonth, n as getLeadingDays, a as parseCivilDate };
|