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.
Files changed (375) hide show
  1. package/README.md +98 -0
  2. package/dist/components/Accordion/Accordion.js +1 -0
  3. package/dist/components/Accordion/AccordionItem.js +1 -0
  4. package/dist/components/Accordion/index.js +1 -0
  5. package/dist/components/Affix/Affix.js +1 -0
  6. package/dist/components/Affix/index.js +1 -0
  7. package/dist/components/Alert/Alert.js +1 -0
  8. package/dist/components/Alert/index.js +1 -0
  9. package/dist/components/ApprovalCard/ApprovalCard.js +1 -0
  10. package/dist/components/ApprovalCard/index.js +1 -0
  11. package/dist/components/AspectRatio/AspectRatio.js +1 -0
  12. package/dist/components/AspectRatio/index.js +1 -0
  13. package/dist/components/AsyncSection/AsyncSection.js +1 -0
  14. package/dist/components/AsyncSection/index.js +1 -0
  15. package/dist/components/Avatar/Avatar.js +1 -0
  16. package/dist/components/Avatar/index.js +1 -0
  17. package/dist/components/AvatarGroup/AvatarGroup.js +1 -0
  18. package/dist/components/AvatarGroup/index.js +1 -0
  19. package/dist/components/BackToTop/BackToTop.js +1 -0
  20. package/dist/components/BackToTop/index.js +1 -0
  21. package/dist/components/Badge/Badge.js +1 -0
  22. package/dist/components/Badge/index.js +1 -0
  23. package/dist/components/Banner/Banner.js +1 -0
  24. package/dist/components/Banner/index.js +1 -0
  25. package/dist/components/BottomSheet/BottomSheet.js +1 -0
  26. package/dist/components/BottomSheet/index.js +1 -0
  27. package/dist/components/Breadcrumb/Breadcrumb.js +1 -0
  28. package/dist/components/Breadcrumb/BreadcrumbItem.js +1 -0
  29. package/dist/components/Breadcrumb/index.js +1 -0
  30. package/dist/components/Button/Button.js +1 -0
  31. package/dist/components/Button/ButtonLink.js +1 -0
  32. package/dist/components/Button/index.js +1 -0
  33. package/dist/components/Button/styles.js +1 -0
  34. package/dist/components/Calendar/Calendar.js +65 -93
  35. package/dist/components/Calendar/date.js +54 -0
  36. package/dist/components/Calendar/index.js +1 -0
  37. package/dist/components/Card/Card.js +1 -0
  38. package/dist/components/Card/index.js +1 -0
  39. package/dist/components/Carousel/Carousel.js +1 -0
  40. package/dist/components/Carousel/CarouselSlide.js +1 -0
  41. package/dist/components/Carousel/index.js +1 -0
  42. package/dist/components/Cascader/Cascader.js +1 -0
  43. package/dist/components/Cascader/index.js +1 -0
  44. package/dist/components/ChatContainer/ChatContainer.js +1 -0
  45. package/dist/components/ChatContainer/index.js +1 -0
  46. package/dist/components/ChatInput/ChatInput.js +1 -0
  47. package/dist/components/ChatInput/index.js +1 -0
  48. package/dist/components/ChatMessage/ChatMessage.js +1 -0
  49. package/dist/components/ChatMessage/index.js +1 -0
  50. package/dist/components/Checkbox/Checkbox.js +1 -0
  51. package/dist/components/Checkbox/CheckboxCore.js +1 -0
  52. package/dist/components/Checkbox/index.js +1 -0
  53. package/dist/components/Chip/Chip.js +1 -0
  54. package/dist/components/Chip/index.js +1 -0
  55. package/dist/components/CodeBlock/CodeBlock.js +1 -0
  56. package/dist/components/CodeBlock/index.js +1 -0
  57. package/dist/components/Collapsible/Collapsible.js +1 -0
  58. package/dist/components/Collapsible/index.js +1 -0
  59. package/dist/components/ColorPicker/ColorPicker.js +1 -0
  60. package/dist/components/ColorPicker/ColorPickerCore.js +1 -0
  61. package/dist/components/ColorPicker/index.js +1 -0
  62. package/dist/components/Combobox/Combobox.js +15 -7
  63. package/dist/components/Combobox/ComboboxOption.js +9 -5
  64. package/dist/components/Combobox/index.js +1 -0
  65. package/dist/components/Command/Command.js +1 -0
  66. package/dist/components/Command/index.js +1 -0
  67. package/dist/components/ConfirmDialog/ConfirmDialog.js +1 -0
  68. package/dist/components/ConfirmDialog/index.js +1 -0
  69. package/dist/components/Container/Container.js +1 -0
  70. package/dist/components/Container/index.js +1 -0
  71. package/dist/components/ContextMenu/ContextMenu.js +1 -0
  72. package/dist/components/ContextMenu/ContextMenuContent.js +1 -0
  73. package/dist/components/ContextMenu/ContextMenuContext.js +1 -0
  74. package/dist/components/ContextMenu/ContextMenuItem.js +1 -0
  75. package/dist/components/ContextMenu/ContextMenuSeparator.js +1 -0
  76. package/dist/components/ContextMenu/ContextMenuTrigger.js +1 -0
  77. package/dist/components/ContextMenu/index.js +1 -0
  78. package/dist/components/ConversationList/ConversationItem.js +1 -0
  79. package/dist/components/ConversationList/ConversationList.js +1 -0
  80. package/dist/components/ConversationList/index.js +1 -0
  81. package/dist/components/DataTable/DataTable.js +155 -113
  82. package/dist/components/DataTable/index.js +1 -0
  83. package/dist/components/DateRangePicker/DateRangePicker.js +1 -0
  84. package/dist/components/DateRangePicker/DateRangePickerCore.js +1 -0
  85. package/dist/components/DateRangePicker/index.js +1 -0
  86. package/dist/components/Datepicker/Datepicker.js +1 -0
  87. package/dist/components/Datepicker/DatepickerCore.js +1 -0
  88. package/dist/components/Datepicker/index.js +1 -0
  89. package/dist/components/Dialog/Dialog.js +1 -0
  90. package/dist/components/Dialog/index.js +1 -0
  91. package/dist/components/DiffViewer/DiffViewer.js +1 -0
  92. package/dist/components/DiffViewer/index.js +1 -0
  93. package/dist/components/Disclosure/Disclosure.js +1 -0
  94. package/dist/components/Disclosure/index.js +1 -0
  95. package/dist/components/Divider/Divider.js +1 -0
  96. package/dist/components/Divider/index.js +1 -0
  97. package/dist/components/Drawer/Drawer.js +1 -0
  98. package/dist/components/Drawer/index.js +1 -0
  99. package/dist/components/DropdownMenu/DropdownMenu.js +1 -0
  100. package/dist/components/DropdownMenu/DropdownMenuContent.js +1 -0
  101. package/dist/components/DropdownMenu/DropdownMenuContext.js +1 -0
  102. package/dist/components/DropdownMenu/DropdownMenuItem.js +1 -0
  103. package/dist/components/DropdownMenu/DropdownMenuSeparator.js +1 -0
  104. package/dist/components/DropdownMenu/DropdownMenuTrigger.js +1 -0
  105. package/dist/components/DropdownMenu/index.js +1 -0
  106. package/dist/components/Empty/Empty.js +1 -0
  107. package/dist/components/Empty/index.js +1 -0
  108. package/dist/components/FileInput/FileInput.js +1 -0
  109. package/dist/components/FileInput/index.js +1 -0
  110. package/dist/components/Flex/Flex.js +1 -0
  111. package/dist/components/Flex/index.js +1 -0
  112. package/dist/components/Grid/Grid.js +1 -0
  113. package/dist/components/Grid/GridItem.js +1 -0
  114. package/dist/components/Grid/index.js +1 -0
  115. package/dist/components/HoverCard/HoverCard.js +1 -0
  116. package/dist/components/HoverCard/index.js +1 -0
  117. package/dist/components/Icon/Icon.js +1 -0
  118. package/dist/components/Icon/index.js +1 -0
  119. package/dist/components/Image/Image.js +1 -0
  120. package/dist/components/Image/index.js +1 -0
  121. package/dist/components/InlineEdit/InlineEdit.js +1 -0
  122. package/dist/components/InlineEdit/index.js +1 -0
  123. package/dist/components/Input/Input.js +1 -0
  124. package/dist/components/Input/InputCore.js +1 -0
  125. package/dist/components/Input/index.js +1 -0
  126. package/dist/components/Kbd/Kbd.js +1 -0
  127. package/dist/components/Kbd/index.js +1 -0
  128. package/dist/components/List/List.js +1 -0
  129. package/dist/components/List/ListItem.js +1 -0
  130. package/dist/components/List/index.js +1 -0
  131. package/dist/components/LocaleProvider/LocaleContext.js +1 -0
  132. package/dist/components/LocaleProvider/LocaleProvider.js +1 -0
  133. package/dist/components/LocaleProvider/index.js +5 -3
  134. package/dist/components/LocaleProvider/locale.js +7 -1
  135. package/dist/components/LocaleProvider/useStrings.js +18 -8
  136. package/dist/components/LocaleProvider/zh-cn.js +128 -0
  137. package/dist/components/LogViewer/LogViewer.js +1 -0
  138. package/dist/components/LogViewer/index.js +1 -0
  139. package/dist/components/MarkdownRenderer/MarkdownRenderer.js +1 -0
  140. package/dist/components/MarkdownRenderer/index.js +1 -0
  141. package/dist/components/MarkdownRenderer/markdown-blocks.js +1 -0
  142. package/dist/components/Mentions/Mentions.js +17 -0
  143. package/dist/components/Mentions/MentionsCore.js +116 -0
  144. package/dist/components/Mentions/index.js +4 -0
  145. package/dist/components/Menu/Menu.js +1 -0
  146. package/dist/components/Menu/MenuDivider.js +1 -0
  147. package/dist/components/Menu/MenuItem.js +1 -0
  148. package/dist/components/Menu/index.js +1 -0
  149. package/dist/components/ModelPicker/ModelPicker.js +1 -0
  150. package/dist/components/ModelPicker/index.js +1 -0
  151. package/dist/components/NavigationBar/NavLink.js +1 -0
  152. package/dist/components/NavigationBar/NavigationBar.js +1 -0
  153. package/dist/components/NavigationBar/index.js +1 -0
  154. package/dist/components/NumberInput/NumberInput.js +1 -0
  155. package/dist/components/NumberInput/NumberInputCore.js +1 -0
  156. package/dist/components/NumberInput/index.js +1 -0
  157. package/dist/components/OTPInput/OTPInput.js +1 -0
  158. package/dist/components/OTPInput/OTPInputCore.js +1 -0
  159. package/dist/components/OTPInput/index.js +1 -0
  160. package/dist/components/Pagination/Pagination.js +1 -0
  161. package/dist/components/Pagination/index.js +1 -0
  162. package/dist/components/PasswordInput/PasswordInput.js +1 -0
  163. package/dist/components/PasswordInput/PasswordInputCore.js +1 -0
  164. package/dist/components/PasswordInput/index.js +1 -0
  165. package/dist/components/Popover/Popover.js +1 -0
  166. package/dist/components/Popover/index.js +1 -0
  167. package/dist/components/Progress/Progress.js +1 -0
  168. package/dist/components/Progress/index.js +1 -0
  169. package/dist/components/Radio/Radio.js +1 -0
  170. package/dist/components/Radio/RadioContext.js +1 -0
  171. package/dist/components/Radio/RadioGroup.js +1 -0
  172. package/dist/components/Radio/RadioGroupCore.js +1 -0
  173. package/dist/components/Radio/index.js +1 -0
  174. package/dist/components/Rating/Rating.js +1 -0
  175. package/dist/components/Rating/RatingCore.js +1 -0
  176. package/dist/components/Rating/index.js +1 -0
  177. package/dist/components/Resizable/Resizable.js +1 -0
  178. package/dist/components/Resizable/index.js +1 -0
  179. package/dist/components/ScrollArea/ScrollArea.js +1 -0
  180. package/dist/components/ScrollArea/index.js +1 -0
  181. package/dist/components/Segmented/Segmented.js +1 -0
  182. package/dist/components/Segmented/SegmentedCore.js +1 -0
  183. package/dist/components/Segmented/index.js +1 -0
  184. package/dist/components/Select/Option.js +1 -0
  185. package/dist/components/Select/Select.js +1 -0
  186. package/dist/components/Select/SelectCore.js +1 -0
  187. package/dist/components/Select/index.js +1 -0
  188. package/dist/components/Sidebar/Sidebar.js +1 -0
  189. package/dist/components/Sidebar/index.js +1 -0
  190. package/dist/components/Skeleton/Skeleton.js +1 -0
  191. package/dist/components/Skeleton/index.js +1 -0
  192. package/dist/components/Slider/Slider.js +1 -0
  193. package/dist/components/Slider/SliderCore.js +1 -0
  194. package/dist/components/Slider/index.js +1 -0
  195. package/dist/components/Spinner/Spinner.js +1 -0
  196. package/dist/components/Spinner/index.js +1 -0
  197. package/dist/components/Stat/Stat.js +1 -0
  198. package/dist/components/Stat/index.js +1 -0
  199. package/dist/components/StepTimeline/StepTimeline.js +1 -0
  200. package/dist/components/StepTimeline/index.js +1 -0
  201. package/dist/components/Stepper/Step.js +1 -0
  202. package/dist/components/Stepper/Stepper.js +1 -0
  203. package/dist/components/Stepper/StepperContext.js +1 -0
  204. package/dist/components/Stepper/index.js +1 -0
  205. package/dist/components/StreamingText/StreamingText.js +1 -0
  206. package/dist/components/StreamingText/index.js +1 -0
  207. package/dist/components/SwipeAction/SwipeAction.js +1 -0
  208. package/dist/components/SwipeAction/index.js +1 -0
  209. package/dist/components/Switch/Switch.js +1 -0
  210. package/dist/components/Switch/SwitchCore.js +1 -0
  211. package/dist/components/Switch/index.js +1 -0
  212. package/dist/components/Table/Table.js +1 -0
  213. package/dist/components/Table/TableBody.js +1 -0
  214. package/dist/components/Table/TableCell.js +1 -0
  215. package/dist/components/Table/TableHead.js +1 -0
  216. package/dist/components/Table/TableRow.js +1 -0
  217. package/dist/components/Table/index.js +1 -0
  218. package/dist/components/Tabs/Tab.js +1 -0
  219. package/dist/components/Tabs/TabList.js +1 -0
  220. package/dist/components/Tabs/TabPanel.js +1 -0
  221. package/dist/components/Tabs/Tabs.js +1 -0
  222. package/dist/components/Tabs/TabsContext.js +1 -0
  223. package/dist/components/Tabs/index.js +1 -0
  224. package/dist/components/Tag/Tag.js +1 -0
  225. package/dist/components/Tag/index.js +1 -0
  226. package/dist/components/TagGroup/TagGroup.js +1 -0
  227. package/dist/components/TagGroup/TagGroupItem.js +1 -0
  228. package/dist/components/TagGroup/index.js +1 -0
  229. package/dist/components/TagInput/TagInput.js +1 -0
  230. package/dist/components/TagInput/TagInputCore.js +1 -0
  231. package/dist/components/TagInput/index.js +1 -0
  232. package/dist/components/Textarea/Textarea.js +1 -0
  233. package/dist/components/Textarea/TextareaCore.js +1 -0
  234. package/dist/components/Textarea/index.js +1 -0
  235. package/dist/components/ThinkingIndicator/ThinkingIndicator.js +1 -0
  236. package/dist/components/ThinkingIndicator/index.js +1 -0
  237. package/dist/components/TimePicker/TimePicker.js +1 -0
  238. package/dist/components/TimePicker/TimePickerCore.js +1 -0
  239. package/dist/components/TimePicker/index.js +1 -0
  240. package/dist/components/Timeline/Timeline.js +1 -0
  241. package/dist/components/Timeline/index.js +1 -0
  242. package/dist/components/Toast/Toast.js +36 -30
  243. package/dist/components/Toast/ToastContainer.js +1 -0
  244. package/dist/components/Toast/ToastContext.js +1 -0
  245. package/dist/components/Toast/index.js +1 -0
  246. package/dist/components/Toast/toast2.js +1 -0
  247. package/dist/components/Toast/useToast.js +1 -0
  248. package/dist/components/TokenCounter/TokenCounter.js +1 -0
  249. package/dist/components/TokenCounter/index.js +1 -0
  250. package/dist/components/ToolCallCard/ToolCallCard.js +1 -0
  251. package/dist/components/ToolCallCard/index.js +1 -0
  252. package/dist/components/Toolbar/Toolbar.js +1 -0
  253. package/dist/components/Toolbar/ToolbarButton.js +1 -0
  254. package/dist/components/Toolbar/ToolbarContext.js +1 -0
  255. package/dist/components/Toolbar/ToolbarSeparator.js +1 -0
  256. package/dist/components/Toolbar/index.js +1 -0
  257. package/dist/components/Tooltip/Tooltip.js +1 -0
  258. package/dist/components/Tooltip/index.js +1 -0
  259. package/dist/components/Tour/Tour.js +1 -0
  260. package/dist/components/Tour/index.js +1 -0
  261. package/dist/components/Transfer/Transfer.js +1 -0
  262. package/dist/components/Transfer/TransferCore.js +1 -0
  263. package/dist/components/Transfer/index.js +1 -0
  264. package/dist/components/Tree/Tree.js +1 -0
  265. package/dist/components/Tree/TreeItem.js +1 -0
  266. package/dist/components/Tree/index.js +1 -0
  267. package/dist/components/Tree/utils.js +1 -0
  268. package/dist/components/Typography/Typography.js +1 -0
  269. package/dist/components/Typography/index.js +1 -0
  270. package/dist/components/Upload/Upload.js +1 -0
  271. package/dist/components/Upload/UploadCore.js +1 -0
  272. package/dist/components/Upload/index.js +1 -0
  273. package/dist/components/VirtualList/VirtualList.js +1 -0
  274. package/dist/components/VirtualList/index.js +1 -0
  275. package/dist/css/accordion.css +1 -1
  276. package/dist/css/alert.css +1 -1
  277. package/dist/css/approval-card.css +1 -1
  278. package/dist/css/async-section.css +1 -1
  279. package/dist/css/back-to-top.css +1 -1
  280. package/dist/css/breadcrumb.css +1 -1
  281. package/dist/css/button.css +1 -1
  282. package/dist/css/carousel.css +1 -1
  283. package/dist/css/cascader.css +1 -1
  284. package/dist/css/chat-input.css +1 -1
  285. package/dist/css/checkbox.css +1 -1
  286. package/dist/css/chip.css +1 -1
  287. package/dist/css/color-picker.css +1 -1
  288. package/dist/css/combobox.css +1 -1
  289. package/dist/css/command.css +1 -1
  290. package/dist/css/context-menu.css +1 -1
  291. package/dist/css/conversation-list.css +1 -1
  292. package/dist/css/data-table.css +1 -1
  293. package/dist/css/date-range-picker.css +1 -1
  294. package/dist/css/datepicker.css +1 -1
  295. package/dist/css/disclosure.css +1 -1
  296. package/dist/css/dropdown-menu.css +1 -1
  297. package/dist/css/file-input.css +1 -1
  298. package/dist/css/inline-edit.css +1 -1
  299. package/dist/css/input.css +1 -1
  300. package/dist/css/log-viewer.css +1 -1
  301. package/dist/css/mentions.css +2 -0
  302. package/dist/css/menu.css +1 -1
  303. package/dist/css/model-picker.css +1 -1
  304. package/dist/css/navigation-bar.css +1 -1
  305. package/dist/css/number-input.css +1 -1
  306. package/dist/css/otp-input.css +1 -1
  307. package/dist/css/pagination.css +1 -1
  308. package/dist/css/password-input.css +1 -1
  309. package/dist/css/progress.css +1 -1
  310. package/dist/css/radio.css +1 -1
  311. package/dist/css/rating.css +1 -1
  312. package/dist/css/resizable.css +1 -1
  313. package/dist/css/segmented.css +1 -1
  314. package/dist/css/select.css +1 -1
  315. package/dist/css/slider.css +1 -1
  316. package/dist/css/stepper.css +1 -1
  317. package/dist/css/swipe-action.css +1 -1
  318. package/dist/css/switch.css +1 -1
  319. package/dist/css/tabs.css +1 -1
  320. package/dist/css/tag-input.css +1 -1
  321. package/dist/css/tag.css +1 -1
  322. package/dist/css/textarea.css +1 -1
  323. package/dist/css/time-picker.css +1 -1
  324. package/dist/css/token-counter.css +1 -1
  325. package/dist/css/tokens.css +1 -1
  326. package/dist/css/tree.css +1 -1
  327. package/dist/css/upload.css +1 -1
  328. package/dist/css-manifest.json +10 -1
  329. package/dist/form/FormItem.js +1 -0
  330. package/dist/form/index.js +1 -0
  331. package/dist/haze-ui.css +53 -52
  332. package/dist/hooks/useClipboard.js +30 -0
  333. package/dist/hooks/useDebouncedCallback.js +17 -0
  334. package/dist/hooks/useDebouncedValue.js +12 -0
  335. package/dist/hooks/useMediaQuery.js +13 -0
  336. package/dist/hooks/usePrefersReducedMotion.js +9 -0
  337. package/dist/hooks/useTitle.js +1 -0
  338. package/dist/index.js +138 -129
  339. package/dist/registry.json +15 -15
  340. package/dist/tokens/colors.js +1 -0
  341. package/dist/tokens/index.js +1 -0
  342. package/dist/tokens/motion.js +1 -0
  343. package/dist/tokens/oklch.js +1 -0
  344. package/dist/tokens/palette.js +1 -0
  345. package/dist/tokens/registry.js +1 -0
  346. package/dist/tokens/spacing.js +1 -0
  347. package/dist/tokens/typography.js +1 -0
  348. package/dist/types/components/Calendar/date.d.ts +79 -0
  349. package/dist/types/components/Combobox/ComboboxOption.d.ts +13 -1
  350. package/dist/types/components/DataTable/DataTable.d.ts +43 -2
  351. package/dist/types/components/DataTable/index.d.ts +1 -1
  352. package/dist/types/components/LocaleProvider/LocaleContext.d.ts +1 -1
  353. package/dist/types/components/LocaleProvider/LocaleProvider.d.ts +5 -2
  354. package/dist/types/components/LocaleProvider/index.d.ts +2 -1
  355. package/dist/types/components/LocaleProvider/locale.d.ts +7 -1
  356. package/dist/types/components/LocaleProvider/useStrings.d.ts +5 -4
  357. package/dist/types/components/LocaleProvider/zh-cn.d.ts +13 -0
  358. package/dist/types/components/Mentions/Mentions.d.ts +17 -0
  359. package/dist/types/components/Mentions/MentionsCore.d.ts +21 -0
  360. package/dist/types/components/Mentions/index.d.ts +4 -0
  361. package/dist/types/hooks/index.d.ts +6 -0
  362. package/dist/types/hooks/useClipboard.d.ts +31 -0
  363. package/dist/types/hooks/useDebouncedCallback.d.ts +21 -0
  364. package/dist/types/hooks/useDebouncedValue.d.ts +20 -0
  365. package/dist/types/hooks/useMediaQuery.d.ts +17 -0
  366. package/dist/types/hooks/usePrefersReducedMotion.d.ts +14 -0
  367. package/dist/types/index.d.ts +6 -3
  368. package/dist/utils/classnames.js +1 -0
  369. package/dist/utils/collision.js +1 -0
  370. package/dist/utils/floating.js +1 -0
  371. package/dist/utils/focus-scope.js +1 -0
  372. package/dist/utils/focus.js +1 -0
  373. package/dist/utils/menuKeyboard.js +1 -0
  374. package/dist/utils/presence.js +1 -0
  375. 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,4 +1,5 @@
1
1
 
2
+ "use client";
2
3
  import { classnames as e } from "../../utils/classnames.js";
3
4
  /* empty css */
4
5
  import { jsx as t } from "react/jsx-runtime";
@@ -1,4 +1,5 @@
1
1
 
2
+ "use client";
2
3
  import { classnames as e } from "../../utils/classnames.js";
3
4
  /* empty css */
4
5
  import { jsx as t, jsxs as n } from "react/jsx-runtime";
@@ -1,3 +1,4 @@
1
+ "use client";
1
2
  import e from "./Accordion.js";
2
3
  import t from "./AccordionItem.js";
3
4
  export { e as Accordion, t as AccordionItem };
@@ -1,4 +1,5 @@
1
1
 
2
+ "use client";
2
3
  import { classnames as e } from "../../utils/classnames.js";
3
4
  /* empty css */
4
5
  import { jsx as t } from "react/jsx-runtime";
@@ -1,2 +1,3 @@
1
+ "use client";
1
2
  import e from "./Affix.js";
2
3
  export { e as Affix };
@@ -1,4 +1,5 @@
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";
4
5
  /* empty css */
@@ -1,2 +1,3 @@
1
+ "use client";
1
2
  import e from "./Alert.js";
2
3
  export { e as Alert };
@@ -1,4 +1,5 @@
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";
4
5
  /* empty css */
@@ -1,2 +1,3 @@
1
+ "use client";
1
2
  import e from "./ApprovalCard.js";
2
3
  export { e as ApprovalCard };
@@ -1,4 +1,5 @@
1
1
 
2
+ "use client";
2
3
  import { classnames as e } from "../../utils/classnames.js";
3
4
  /* empty css */
4
5
  import { jsx as t } from "react/jsx-runtime";
@@ -1,2 +1,3 @@
1
+ "use client";
1
2
  import e from "./AspectRatio.js";
2
3
  export { e as AspectRatio };
@@ -1,4 +1,5 @@
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";
4
5
  /* empty css */
@@ -1,2 +1,3 @@
1
+ "use client";
1
2
  import e from "./AsyncSection.js";
2
3
  export { e as AsyncSection };
@@ -1,4 +1,5 @@
1
1
 
2
+ "use client";
2
3
  import { classnames as e } from "../../utils/classnames.js";
3
4
  /* empty css */
4
5
  import { jsx as t } from "react/jsx-runtime";
@@ -1,2 +1,3 @@
1
+ "use client";
1
2
  import e from "./Avatar.js";
2
3
  export { e as Avatar };
@@ -1,4 +1,5 @@
1
1
 
2
+ "use client";
2
3
  import { classnames as e } from "../../utils/classnames.js";
3
4
  import { formatString as t } from "../LocaleProvider/locale.js";
4
5
  import { useStrings as n } from "../LocaleProvider/useStrings.js";
@@ -1,2 +1,3 @@
1
+ "use client";
1
2
  import e from "./AvatarGroup.js";
2
3
  export { e as AvatarGroup };
@@ -1,4 +1,5 @@
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";
4
5
  /* empty css */
@@ -1,2 +1,3 @@
1
+ "use client";
1
2
  import e from "./BackToTop.js";
2
3
  export { e as BackToTop };
@@ -1,4 +1,5 @@
1
1
 
2
+ "use client";
2
3
  import { classnames as e } from "../../utils/classnames.js";
3
4
  /* empty css */
4
5
  import { jsx as t } from "react/jsx-runtime";
@@ -1,2 +1,3 @@
1
+ "use client";
1
2
  import e from "./Badge.js";
2
3
  export { e as Badge };
@@ -1,4 +1,5 @@
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";
4
5
  /* empty css */
@@ -1,2 +1,3 @@
1
+ "use client";
1
2
  import e from "./Banner.js";
2
3
  export { e as Banner };
@@ -1,4 +1,5 @@
1
1
 
2
+ "use client";
2
3
  import { classnames as e } from "../../utils/classnames.js";
3
4
  import { useFocusScope as t } from "../../utils/focus-scope.js";
4
5
  import { Presence as n } from "../../utils/presence.js";
@@ -1,2 +1,3 @@
1
+ "use client";
1
2
  import e from "./BottomSheet.js";
2
3
  export { e as BottomSheet };
@@ -1,4 +1,5 @@
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";
4
5
  /* empty css */
@@ -1,4 +1,5 @@
1
1
 
2
+ "use client";
2
3
  import { classnames as e } from "../../utils/classnames.js";
3
4
  /* empty css */
4
5
  import { jsx as t } from "react/jsx-runtime";
@@ -1,3 +1,4 @@
1
+ "use client";
1
2
  import e from "./Breadcrumb.js";
2
3
  import t from "./BreadcrumbItem.js";
3
4
  export { e as Breadcrumb, t as BreadcrumbItem };
@@ -1,3 +1,4 @@
1
+ "use client";
1
2
  import { classnames as e } from "../../utils/classnames.js";
2
3
  import { base as t, sizes as n, squareSizes as r, variants as i } from "./styles.js";
3
4
  import { jsx as a } from "react/jsx-runtime";
@@ -1,4 +1,5 @@
1
1
 
2
+ "use client";
2
3
  import { classnames as e } from "../../utils/classnames.js";
3
4
  import { base as t, sizes as n, squareSizes as r, variants as i } from "./styles.js";
4
5
  /* empty css */
@@ -1,3 +1,4 @@
1
+ "use client";
1
2
  import e from "./Button.js";
2
3
  import t from "./ButtonLink.js";
3
4
  export { e as Button, t as ButtonLink };
@@ -1,4 +1,5 @@
1
1
 
2
+ "use client";
2
3
  /* empty css */
3
4
  //#region src/lib/components/Button/styles.ts
4
5
  var e = "haze-styles__base", t = {
@@ -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 n, jsxs as r } from "react/jsx-runtime";
6
- import { useState as i } from "react";
7
- import { useControl as a } from "react-use-control";
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 o = "haze-Calendar__calendarWrapper", s = "haze-Calendar__header", c = "haze-Calendar__headerBtn", l = "haze-Calendar__headerTitle", u = "haze-Calendar__headerTrailing", d = "haze-Calendar__grid", f = "haze-Calendar__rowContents", p = "haze-Calendar__cellContents", m = "haze-Calendar__weekday", h = "haze-Calendar__dayBtn", g = "haze-Calendar__daySelected", _ = "haze-Calendar__dayOutside", v = [
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 y(e, t) {
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 b(e, t) {
29
- if (e === void 0) return Array.from({ length: 7 }, (e, n) => v[(t + n) % 7]);
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 x(e, t) {
34
- return new Date(e, t + 1, 0).getDate();
35
- }
36
- function S(e, t, n) {
37
- return `${e}-${String(t + 1).padStart(2, "0")}-${String(n).padStart(2, "0")}`;
38
- }
39
- function C({ value: v, min: C, max: w, locale: T, weekStartsOn: E, onSelect: D, className: O, ...k }) {
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
- F(e.getFullYear()), L(e.getMonth());
47
- }, q = (e) => !!(C && e < C || w && e > w), J = [];
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(P, I)), Z = [];
77
- for (let e = 0; e < J.length; e += 7) Z.push(J.slice(e, e + 7));
78
- return /* @__PURE__ */ r("div", {
79
- ...k,
80
- className: e([o, O]),
81
- children: [/* @__PURE__ */ r("div", {
82
- className: e([s]),
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__ */ n("button", {
56
+ /* @__PURE__ */ o("button", {
85
57
  type: "button",
86
- onClick: W,
87
- "aria-label": M.previousMonth,
88
- className: e([c]),
58
+ onClick: U,
59
+ "aria-label": P.previousMonth,
60
+ className: e([f]),
89
61
  children: "‹"
90
62
  }),
91
- /* @__PURE__ */ n("span", {
92
- className: e([l]),
93
- children: X
63
+ /* @__PURE__ */ o("span", {
64
+ className: e([p]),
65
+ children: q
94
66
  }),
95
- /* @__PURE__ */ r("span", {
96
- className: e([u]),
97
- children: [/* @__PURE__ */ n("button", {
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
- "aria-label": M.nextMonth,
106
- className: e([c]),
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__ */ r("div", {
83
+ }), /* @__PURE__ */ s("div", {
112
84
  role: "grid",
113
- "aria-label": X,
114
- className: e([d]),
115
- children: [/* @__PURE__ */ n("div", {
85
+ "aria-label": q,
86
+ className: e([h]),
87
+ children: [/* @__PURE__ */ o("div", {
116
88
  role: "row",
117
- className: e([f]),
118
- children: z.map((t, r) => /* @__PURE__ */ n("span", {
89
+ className: e([g]),
90
+ children: V.map((t, n) => /* @__PURE__ */ o("span", {
119
91
  role: "columnheader",
120
- className: e([m]),
92
+ className: e([v]),
121
93
  children: t
122
- }, r))
123
- }), Z.map((t, r) => /* @__PURE__ */ n("div", {
94
+ }, n))
95
+ }), J.map((t, n) => /* @__PURE__ */ o("div", {
124
96
  role: "row",
125
- className: e([f]),
97
+ className: e([g]),
126
98
  children: t.map((t) => {
127
- let r = S(t.year, t.month, t.day);
128
- return /* @__PURE__ */ n("span", {
99
+ let n = i(t.year, t.month, t.day);
100
+ return /* @__PURE__ */ o("span", {
129
101
  role: "gridcell",
130
- "aria-selected": r === A,
131
- className: e([p]),
132
- children: /* @__PURE__ */ n("button", {
102
+ "aria-selected": n === M,
103
+ className: e([_]),
104
+ children: /* @__PURE__ */ o("button", {
133
105
  type: "button",
134
- disabled: q(r),
106
+ disabled: K(n),
135
107
  onClick: () => {
136
- j(r), D?.(r);
108
+ N(n), k?.(n);
137
109
  },
138
110
  className: e([
139
- h,
140
- r === A && g,
141
- t.outside && _
111
+ y,
112
+ n === M && b,
113
+ t.outside && x
142
114
  ]),
143
115
  children: t.day
144
116
  })
145
- }, r);
117
+ }, n);
146
118
  })
147
- }, r))]
119
+ }, n))]
148
120
  })]
149
121
  });
150
122
  }
151
123
  //#endregion
152
- export { C as default };
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 };
@@ -1,2 +1,3 @@
1
+ "use client";
1
2
  import e from "./Calendar.js";
2
3
  export { e as Calendar };
@@ -1,4 +1,5 @@
1
1
 
2
+ "use client";
2
3
  import { classnames as e } from "../../utils/classnames.js";
3
4
  /* empty css */
4
5
  import { jsx as t } from "react/jsx-runtime";
@@ -1,2 +1,3 @@
1
+ "use client";
1
2
  import e from "./Card.js";
2
3
  export { e as Card };
@@ -1,4 +1,5 @@
1
1
 
2
+ "use client";
2
3
  import { classnames as e } from "../../utils/classnames.js";
3
4
  import { formatString as t } from "../LocaleProvider/locale.js";
4
5
  import { useStrings as n } from "../LocaleProvider/useStrings.js";
@@ -1,4 +1,5 @@
1
1
 
2
+ "use client";
2
3
  import { classnames as e } from "../../utils/classnames.js";
3
4
  /* empty css */
4
5
  import { jsx as t } from "react/jsx-runtime";
@@ -1,3 +1,4 @@
1
+ "use client";
1
2
  import e from "./Carousel.js";
2
3
  import t from "./CarouselSlide.js";
3
4
  export { e as Carousel, t as CarouselSlide };