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
@@ -14,7 +14,7 @@
14
14
  "files": [
15
15
  {
16
16
  "path": "components/haze/chat-message.tsx",
17
- "content": "// haze-ui agent component wrapper — generated by scripts/generate-registry.mjs.\n//\n// This file deliberately contains no component source: haze-ui is compiled\n// CSS-in-JS (linaria) styled against --haze-* design tokens, so vendoring\n// the source would neither build nor style. It re-exports the published\n// component and imports its stylesheet instead — treat this file as your\n// customization layer (wrap, restyle, compose) while haze-ui stays an npm\n// dependency and keeps updating underneath.\n//\n// Theming (once per app): apply the token classes to a root element, e.g.\n// import { lightTheme, spacing, typography } from 'haze-ui';\n// <div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n// (darkTheme is a drop-in swap). You also own the 'use client' boundary —\n// haze-ui ships no directives of its own.\n\nimport { ChatMessage } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/chat-message.css';\n\nexport { ChatMessage };\nexport type { ChatMessageProps, ChatMessageRole } from 'haze-ui';\n",
17
+ "content": "// haze-ui agent component wrapper — generated by scripts/generate-registry.mjs.\n//\n// This file deliberately contains no component source: haze-ui is compiled\n// CSS-in-JS (linaria) styled against --haze-* design tokens, so vendoring\n// the source would neither build nor style. It re-exports the published\n// component and imports its stylesheet instead — treat this file as your\n// customization layer (wrap, restyle, compose) while haze-ui stays an npm\n// dependency and keeps updating underneath.\n//\n// Theming (once per app): apply the token classes to a root element, e.g.\n// import { lightTheme, spacing, typography } from 'haze-ui';\n// <div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n// (darkTheme is a drop-in swap). haze-ui dist modules ship their own\n// 'use client' directive, so imports resolve cleanly from RSC; the\n// wrapper inherits client semantics either way.\n\nimport { ChatMessage } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/chat-message.css';\n\nexport { ChatMessage };\nexport type { ChatMessageProps, ChatMessageRole } from 'haze-ui';\n",
18
18
  "type": "registry:component"
19
19
  }
20
20
  ]
@@ -30,7 +30,7 @@
30
30
  "files": [
31
31
  {
32
32
  "path": "components/haze/chat-container.tsx",
33
- "content": "// haze-ui agent component wrapper — generated by scripts/generate-registry.mjs.\n//\n// This file deliberately contains no component source: haze-ui is compiled\n// CSS-in-JS (linaria) styled against --haze-* design tokens, so vendoring\n// the source would neither build nor style. It re-exports the published\n// component and imports its stylesheet instead — treat this file as your\n// customization layer (wrap, restyle, compose) while haze-ui stays an npm\n// dependency and keeps updating underneath.\n//\n// Theming (once per app): apply the token classes to a root element, e.g.\n// import { lightTheme, spacing, typography } from 'haze-ui';\n// <div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n// (darkTheme is a drop-in swap). You also own the 'use client' boundary —\n// haze-ui ships no directives of its own.\n\nimport { ChatContainer } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/chat-container.css';\n\nexport { ChatContainer };\nexport type { ChatContainerProps } from 'haze-ui';\n",
33
+ "content": "// haze-ui agent component wrapper — generated by scripts/generate-registry.mjs.\n//\n// This file deliberately contains no component source: haze-ui is compiled\n// CSS-in-JS (linaria) styled against --haze-* design tokens, so vendoring\n// the source would neither build nor style. It re-exports the published\n// component and imports its stylesheet instead — treat this file as your\n// customization layer (wrap, restyle, compose) while haze-ui stays an npm\n// dependency and keeps updating underneath.\n//\n// Theming (once per app): apply the token classes to a root element, e.g.\n// import { lightTheme, spacing, typography } from 'haze-ui';\n// <div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n// (darkTheme is a drop-in swap). haze-ui dist modules ship their own\n// 'use client' directive, so imports resolve cleanly from RSC; the\n// wrapper inherits client semantics either way.\n\nimport { ChatContainer } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/chat-container.css';\n\nexport { ChatContainer };\nexport type { ChatContainerProps } from 'haze-ui';\n",
34
34
  "type": "registry:component"
35
35
  }
36
36
  ]
@@ -46,7 +46,7 @@
46
46
  "files": [
47
47
  {
48
48
  "path": "components/haze/chat-input.tsx",
49
- "content": "// haze-ui agent component wrapper — generated by scripts/generate-registry.mjs.\n//\n// This file deliberately contains no component source: haze-ui is compiled\n// CSS-in-JS (linaria) styled against --haze-* design tokens, so vendoring\n// the source would neither build nor style. It re-exports the published\n// component and imports its stylesheet instead — treat this file as your\n// customization layer (wrap, restyle, compose) while haze-ui stays an npm\n// dependency and keeps updating underneath.\n//\n// Theming (once per app): apply the token classes to a root element, e.g.\n// import { lightTheme, spacing, typography } from 'haze-ui';\n// <div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n// (darkTheme is a drop-in swap). You also own the 'use client' boundary —\n// haze-ui ships no directives of its own.\n\nimport { ChatInput } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/chat-input.css';\n\nexport { ChatInput };\nexport type { ChatInputProps } from 'haze-ui';\n",
49
+ "content": "// haze-ui agent component wrapper — generated by scripts/generate-registry.mjs.\n//\n// This file deliberately contains no component source: haze-ui is compiled\n// CSS-in-JS (linaria) styled against --haze-* design tokens, so vendoring\n// the source would neither build nor style. It re-exports the published\n// component and imports its stylesheet instead — treat this file as your\n// customization layer (wrap, restyle, compose) while haze-ui stays an npm\n// dependency and keeps updating underneath.\n//\n// Theming (once per app): apply the token classes to a root element, e.g.\n// import { lightTheme, spacing, typography } from 'haze-ui';\n// <div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n// (darkTheme is a drop-in swap). haze-ui dist modules ship their own\n// 'use client' directive, so imports resolve cleanly from RSC; the\n// wrapper inherits client semantics either way.\n\nimport { ChatInput } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/chat-input.css';\n\nexport { ChatInput };\nexport type { ChatInputProps } from 'haze-ui';\n",
50
50
  "type": "registry:component"
51
51
  }
52
52
  ]
@@ -62,7 +62,7 @@
62
62
  "files": [
63
63
  {
64
64
  "path": "components/haze/streaming-text.tsx",
65
- "content": "// haze-ui agent component wrapper — generated by scripts/generate-registry.mjs.\n//\n// This file deliberately contains no component source: haze-ui is compiled\n// CSS-in-JS (linaria) styled against --haze-* design tokens, so vendoring\n// the source would neither build nor style. It re-exports the published\n// component and imports its stylesheet instead — treat this file as your\n// customization layer (wrap, restyle, compose) while haze-ui stays an npm\n// dependency and keeps updating underneath.\n//\n// Theming (once per app): apply the token classes to a root element, e.g.\n// import { lightTheme, spacing, typography } from 'haze-ui';\n// <div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n// (darkTheme is a drop-in swap). You also own the 'use client' boundary —\n// haze-ui ships no directives of its own.\n\nimport { StreamingText } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/streaming-text.css';\n\nexport { StreamingText };\nexport type { StreamingTextProps } from 'haze-ui';\n",
65
+ "content": "// haze-ui agent component wrapper — generated by scripts/generate-registry.mjs.\n//\n// This file deliberately contains no component source: haze-ui is compiled\n// CSS-in-JS (linaria) styled against --haze-* design tokens, so vendoring\n// the source would neither build nor style. It re-exports the published\n// component and imports its stylesheet instead — treat this file as your\n// customization layer (wrap, restyle, compose) while haze-ui stays an npm\n// dependency and keeps updating underneath.\n//\n// Theming (once per app): apply the token classes to a root element, e.g.\n// import { lightTheme, spacing, typography } from 'haze-ui';\n// <div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n// (darkTheme is a drop-in swap). haze-ui dist modules ship their own\n// 'use client' directive, so imports resolve cleanly from RSC; the\n// wrapper inherits client semantics either way.\n\nimport { StreamingText } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/streaming-text.css';\n\nexport { StreamingText };\nexport type { StreamingTextProps } from 'haze-ui';\n",
66
66
  "type": "registry:component"
67
67
  }
68
68
  ]
@@ -78,7 +78,7 @@
78
78
  "files": [
79
79
  {
80
80
  "path": "components/haze/markdown-renderer.tsx",
81
- "content": "// haze-ui agent component wrapper — generated by scripts/generate-registry.mjs.\n//\n// This file deliberately contains no component source: haze-ui is compiled\n// CSS-in-JS (linaria) styled against --haze-* design tokens, so vendoring\n// the source would neither build nor style. It re-exports the published\n// component and imports its stylesheet instead — treat this file as your\n// customization layer (wrap, restyle, compose) while haze-ui stays an npm\n// dependency and keeps updating underneath.\n//\n// Theming (once per app): apply the token classes to a root element, e.g.\n// import { lightTheme, spacing, typography } from 'haze-ui';\n// <div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n// (darkTheme is a drop-in swap). You also own the 'use client' boundary —\n// haze-ui ships no directives of its own.\n\nimport { MarkdownRenderer } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/markdown-renderer.css';\n\nexport { MarkdownRenderer };\nexport type { MarkdownRendererProps } from 'haze-ui';\n",
81
+ "content": "// haze-ui agent component wrapper — generated by scripts/generate-registry.mjs.\n//\n// This file deliberately contains no component source: haze-ui is compiled\n// CSS-in-JS (linaria) styled against --haze-* design tokens, so vendoring\n// the source would neither build nor style. It re-exports the published\n// component and imports its stylesheet instead — treat this file as your\n// customization layer (wrap, restyle, compose) while haze-ui stays an npm\n// dependency and keeps updating underneath.\n//\n// Theming (once per app): apply the token classes to a root element, e.g.\n// import { lightTheme, spacing, typography } from 'haze-ui';\n// <div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n// (darkTheme is a drop-in swap). haze-ui dist modules ship their own\n// 'use client' directive, so imports resolve cleanly from RSC; the\n// wrapper inherits client semantics either way.\n\nimport { MarkdownRenderer } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/markdown-renderer.css';\n\nexport { MarkdownRenderer };\nexport type { MarkdownRendererProps } from 'haze-ui';\n",
82
82
  "type": "registry:component"
83
83
  }
84
84
  ]
@@ -94,7 +94,7 @@
94
94
  "files": [
95
95
  {
96
96
  "path": "components/haze/tool-call-card.tsx",
97
- "content": "// haze-ui agent component wrapper — generated by scripts/generate-registry.mjs.\n//\n// This file deliberately contains no component source: haze-ui is compiled\n// CSS-in-JS (linaria) styled against --haze-* design tokens, so vendoring\n// the source would neither build nor style. It re-exports the published\n// component and imports its stylesheet instead — treat this file as your\n// customization layer (wrap, restyle, compose) while haze-ui stays an npm\n// dependency and keeps updating underneath.\n//\n// Theming (once per app): apply the token classes to a root element, e.g.\n// import { lightTheme, spacing, typography } from 'haze-ui';\n// <div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n// (darkTheme is a drop-in swap). You also own the 'use client' boundary —\n// haze-ui ships no directives of its own.\n\nimport { ToolCallCard } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/tool-call-card.css';\n\nexport { ToolCallCard };\nexport type { ToolCallCardProps, ToolCallStatus } from 'haze-ui';\n",
97
+ "content": "// haze-ui agent component wrapper — generated by scripts/generate-registry.mjs.\n//\n// This file deliberately contains no component source: haze-ui is compiled\n// CSS-in-JS (linaria) styled against --haze-* design tokens, so vendoring\n// the source would neither build nor style. It re-exports the published\n// component and imports its stylesheet instead — treat this file as your\n// customization layer (wrap, restyle, compose) while haze-ui stays an npm\n// dependency and keeps updating underneath.\n//\n// Theming (once per app): apply the token classes to a root element, e.g.\n// import { lightTheme, spacing, typography } from 'haze-ui';\n// <div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n// (darkTheme is a drop-in swap). haze-ui dist modules ship their own\n// 'use client' directive, so imports resolve cleanly from RSC; the\n// wrapper inherits client semantics either way.\n\nimport { ToolCallCard } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/tool-call-card.css';\n\nexport { ToolCallCard };\nexport type { ToolCallCardProps, ToolCallStatus } from 'haze-ui';\n",
98
98
  "type": "registry:component"
99
99
  }
100
100
  ]
@@ -110,7 +110,7 @@
110
110
  "files": [
111
111
  {
112
112
  "path": "components/haze/thinking-indicator.tsx",
113
- "content": "// haze-ui agent component wrapper — generated by scripts/generate-registry.mjs.\n//\n// This file deliberately contains no component source: haze-ui is compiled\n// CSS-in-JS (linaria) styled against --haze-* design tokens, so vendoring\n// the source would neither build nor style. It re-exports the published\n// component and imports its stylesheet instead — treat this file as your\n// customization layer (wrap, restyle, compose) while haze-ui stays an npm\n// dependency and keeps updating underneath.\n//\n// Theming (once per app): apply the token classes to a root element, e.g.\n// import { lightTheme, spacing, typography } from 'haze-ui';\n// <div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n// (darkTheme is a drop-in swap). You also own the 'use client' boundary —\n// haze-ui ships no directives of its own.\n\nimport { ThinkingIndicator } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/thinking-indicator.css';\n\nexport { ThinkingIndicator };\nexport type { ThinkingIndicatorProps } from 'haze-ui';\n",
113
+ "content": "// haze-ui agent component wrapper — generated by scripts/generate-registry.mjs.\n//\n// This file deliberately contains no component source: haze-ui is compiled\n// CSS-in-JS (linaria) styled against --haze-* design tokens, so vendoring\n// the source would neither build nor style. It re-exports the published\n// component and imports its stylesheet instead — treat this file as your\n// customization layer (wrap, restyle, compose) while haze-ui stays an npm\n// dependency and keeps updating underneath.\n//\n// Theming (once per app): apply the token classes to a root element, e.g.\n// import { lightTheme, spacing, typography } from 'haze-ui';\n// <div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n// (darkTheme is a drop-in swap). haze-ui dist modules ship their own\n// 'use client' directive, so imports resolve cleanly from RSC; the\n// wrapper inherits client semantics either way.\n\nimport { ThinkingIndicator } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/thinking-indicator.css';\n\nexport { ThinkingIndicator };\nexport type { ThinkingIndicatorProps } from 'haze-ui';\n",
114
114
  "type": "registry:component"
115
115
  }
116
116
  ]
@@ -126,7 +126,7 @@
126
126
  "files": [
127
127
  {
128
128
  "path": "components/haze/step-timeline.tsx",
129
- "content": "// haze-ui agent component wrapper — generated by scripts/generate-registry.mjs.\n//\n// This file deliberately contains no component source: haze-ui is compiled\n// CSS-in-JS (linaria) styled against --haze-* design tokens, so vendoring\n// the source would neither build nor style. It re-exports the published\n// component and imports its stylesheet instead — treat this file as your\n// customization layer (wrap, restyle, compose) while haze-ui stays an npm\n// dependency and keeps updating underneath.\n//\n// Theming (once per app): apply the token classes to a root element, e.g.\n// import { lightTheme, spacing, typography } from 'haze-ui';\n// <div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n// (darkTheme is a drop-in swap). You also own the 'use client' boundary —\n// haze-ui ships no directives of its own.\n\nimport { StepTimeline, StepTimelineItem } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/step-timeline.css';\n\nexport { StepTimeline, StepTimelineItem };\nexport type { StepTimelineProps, StepTimelineItemProps, StepStatus } from 'haze-ui';\n",
129
+ "content": "// haze-ui agent component wrapper — generated by scripts/generate-registry.mjs.\n//\n// This file deliberately contains no component source: haze-ui is compiled\n// CSS-in-JS (linaria) styled against --haze-* design tokens, so vendoring\n// the source would neither build nor style. It re-exports the published\n// component and imports its stylesheet instead — treat this file as your\n// customization layer (wrap, restyle, compose) while haze-ui stays an npm\n// dependency and keeps updating underneath.\n//\n// Theming (once per app): apply the token classes to a root element, e.g.\n// import { lightTheme, spacing, typography } from 'haze-ui';\n// <div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n// (darkTheme is a drop-in swap). haze-ui dist modules ship their own\n// 'use client' directive, so imports resolve cleanly from RSC; the\n// wrapper inherits client semantics either way.\n\nimport { StepTimeline, StepTimelineItem } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/step-timeline.css';\n\nexport { StepTimeline, StepTimelineItem };\nexport type { StepTimelineProps, StepTimelineItemProps, StepStatus } from 'haze-ui';\n",
130
130
  "type": "registry:component"
131
131
  }
132
132
  ]
@@ -142,7 +142,7 @@
142
142
  "files": [
143
143
  {
144
144
  "path": "components/haze/approval-card.tsx",
145
- "content": "// haze-ui agent component wrapper — generated by scripts/generate-registry.mjs.\n//\n// This file deliberately contains no component source: haze-ui is compiled\n// CSS-in-JS (linaria) styled against --haze-* design tokens, so vendoring\n// the source would neither build nor style. It re-exports the published\n// component and imports its stylesheet instead — treat this file as your\n// customization layer (wrap, restyle, compose) while haze-ui stays an npm\n// dependency and keeps updating underneath.\n//\n// Theming (once per app): apply the token classes to a root element, e.g.\n// import { lightTheme, spacing, typography } from 'haze-ui';\n// <div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n// (darkTheme is a drop-in swap). You also own the 'use client' boundary —\n// haze-ui ships no directives of its own.\n\nimport { ApprovalCard } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/approval-card.css';\n\nexport { ApprovalCard };\nexport type { ApprovalCardProps } from 'haze-ui';\n",
145
+ "content": "// haze-ui agent component wrapper — generated by scripts/generate-registry.mjs.\n//\n// This file deliberately contains no component source: haze-ui is compiled\n// CSS-in-JS (linaria) styled against --haze-* design tokens, so vendoring\n// the source would neither build nor style. It re-exports the published\n// component and imports its stylesheet instead — treat this file as your\n// customization layer (wrap, restyle, compose) while haze-ui stays an npm\n// dependency and keeps updating underneath.\n//\n// Theming (once per app): apply the token classes to a root element, e.g.\n// import { lightTheme, spacing, typography } from 'haze-ui';\n// <div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n// (darkTheme is a drop-in swap). haze-ui dist modules ship their own\n// 'use client' directive, so imports resolve cleanly from RSC; the\n// wrapper inherits client semantics either way.\n\nimport { ApprovalCard } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/approval-card.css';\n\nexport { ApprovalCard };\nexport type { ApprovalCardProps } from 'haze-ui';\n",
146
146
  "type": "registry:component"
147
147
  }
148
148
  ]
@@ -158,7 +158,7 @@
158
158
  "files": [
159
159
  {
160
160
  "path": "components/haze/token-counter.tsx",
161
- "content": "// haze-ui agent component wrapper — generated by scripts/generate-registry.mjs.\n//\n// This file deliberately contains no component source: haze-ui is compiled\n// CSS-in-JS (linaria) styled against --haze-* design tokens, so vendoring\n// the source would neither build nor style. It re-exports the published\n// component and imports its stylesheet instead — treat this file as your\n// customization layer (wrap, restyle, compose) while haze-ui stays an npm\n// dependency and keeps updating underneath.\n//\n// Theming (once per app): apply the token classes to a root element, e.g.\n// import { lightTheme, spacing, typography } from 'haze-ui';\n// <div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n// (darkTheme is a drop-in swap). You also own the 'use client' boundary —\n// haze-ui ships no directives of its own.\n\nimport { TokenCounter } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/token-counter.css';\n\nexport { TokenCounter };\nexport type { TokenCounterProps } from 'haze-ui';\n",
161
+ "content": "// haze-ui agent component wrapper — generated by scripts/generate-registry.mjs.\n//\n// This file deliberately contains no component source: haze-ui is compiled\n// CSS-in-JS (linaria) styled against --haze-* design tokens, so vendoring\n// the source would neither build nor style. It re-exports the published\n// component and imports its stylesheet instead — treat this file as your\n// customization layer (wrap, restyle, compose) while haze-ui stays an npm\n// dependency and keeps updating underneath.\n//\n// Theming (once per app): apply the token classes to a root element, e.g.\n// import { lightTheme, spacing, typography } from 'haze-ui';\n// <div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n// (darkTheme is a drop-in swap). haze-ui dist modules ship their own\n// 'use client' directive, so imports resolve cleanly from RSC; the\n// wrapper inherits client semantics either way.\n\nimport { TokenCounter } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/token-counter.css';\n\nexport { TokenCounter };\nexport type { TokenCounterProps } from 'haze-ui';\n",
162
162
  "type": "registry:component"
163
163
  }
164
164
  ]
@@ -174,7 +174,7 @@
174
174
  "files": [
175
175
  {
176
176
  "path": "components/haze/model-picker.tsx",
177
- "content": "// haze-ui agent component wrapper — generated by scripts/generate-registry.mjs.\n//\n// This file deliberately contains no component source: haze-ui is compiled\n// CSS-in-JS (linaria) styled against --haze-* design tokens, so vendoring\n// the source would neither build nor style. It re-exports the published\n// component and imports its stylesheet instead — treat this file as your\n// customization layer (wrap, restyle, compose) while haze-ui stays an npm\n// dependency and keeps updating underneath.\n//\n// Theming (once per app): apply the token classes to a root element, e.g.\n// import { lightTheme, spacing, typography } from 'haze-ui';\n// <div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n// (darkTheme is a drop-in swap). You also own the 'use client' boundary —\n// haze-ui ships no directives of its own.\n\nimport { ModelPicker } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/model-picker.css';\n\nexport { ModelPicker };\nexport type { ModelPickerProps, ModelOption } from 'haze-ui';\n",
177
+ "content": "// haze-ui agent component wrapper — generated by scripts/generate-registry.mjs.\n//\n// This file deliberately contains no component source: haze-ui is compiled\n// CSS-in-JS (linaria) styled against --haze-* design tokens, so vendoring\n// the source would neither build nor style. It re-exports the published\n// component and imports its stylesheet instead — treat this file as your\n// customization layer (wrap, restyle, compose) while haze-ui stays an npm\n// dependency and keeps updating underneath.\n//\n// Theming (once per app): apply the token classes to a root element, e.g.\n// import { lightTheme, spacing, typography } from 'haze-ui';\n// <div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n// (darkTheme is a drop-in swap). haze-ui dist modules ship their own\n// 'use client' directive, so imports resolve cleanly from RSC; the\n// wrapper inherits client semantics either way.\n\nimport { ModelPicker } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/model-picker.css';\n\nexport { ModelPicker };\nexport type { ModelPickerProps, ModelOption } from 'haze-ui';\n",
178
178
  "type": "registry:component"
179
179
  }
180
180
  ]
@@ -190,7 +190,7 @@
190
190
  "files": [
191
191
  {
192
192
  "path": "components/haze/conversation-list.tsx",
193
- "content": "// haze-ui agent component wrapper — generated by scripts/generate-registry.mjs.\n//\n// This file deliberately contains no component source: haze-ui is compiled\n// CSS-in-JS (linaria) styled against --haze-* design tokens, so vendoring\n// the source would neither build nor style. It re-exports the published\n// component and imports its stylesheet instead — treat this file as your\n// customization layer (wrap, restyle, compose) while haze-ui stays an npm\n// dependency and keeps updating underneath.\n//\n// Theming (once per app): apply the token classes to a root element, e.g.\n// import { lightTheme, spacing, typography } from 'haze-ui';\n// <div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n// (darkTheme is a drop-in swap). You also own the 'use client' boundary —\n// haze-ui ships no directives of its own.\n\nimport { ConversationList, ConversationItem } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/conversation-list.css';\n\nexport { ConversationList, ConversationItem };\nexport type { ConversationListProps, ConversationItemProps } from 'haze-ui';\n",
193
+ "content": "// haze-ui agent component wrapper — generated by scripts/generate-registry.mjs.\n//\n// This file deliberately contains no component source: haze-ui is compiled\n// CSS-in-JS (linaria) styled against --haze-* design tokens, so vendoring\n// the source would neither build nor style. It re-exports the published\n// component and imports its stylesheet instead — treat this file as your\n// customization layer (wrap, restyle, compose) while haze-ui stays an npm\n// dependency and keeps updating underneath.\n//\n// Theming (once per app): apply the token classes to a root element, e.g.\n// import { lightTheme, spacing, typography } from 'haze-ui';\n// <div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n// (darkTheme is a drop-in swap). haze-ui dist modules ship their own\n// 'use client' directive, so imports resolve cleanly from RSC; the\n// wrapper inherits client semantics either way.\n\nimport { ConversationList, ConversationItem } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/conversation-list.css';\n\nexport { ConversationList, ConversationItem };\nexport type { ConversationListProps, ConversationItemProps } from 'haze-ui';\n",
194
194
  "type": "registry:component"
195
195
  }
196
196
  ]
@@ -206,7 +206,7 @@
206
206
  "files": [
207
207
  {
208
208
  "path": "components/haze/diff-viewer.tsx",
209
- "content": "// haze-ui agent component wrapper — generated by scripts/generate-registry.mjs.\n//\n// This file deliberately contains no component source: haze-ui is compiled\n// CSS-in-JS (linaria) styled against --haze-* design tokens, so vendoring\n// the source would neither build nor style. It re-exports the published\n// component and imports its stylesheet instead — treat this file as your\n// customization layer (wrap, restyle, compose) while haze-ui stays an npm\n// dependency and keeps updating underneath.\n//\n// Theming (once per app): apply the token classes to a root element, e.g.\n// import { lightTheme, spacing, typography } from 'haze-ui';\n// <div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n// (darkTheme is a drop-in swap). You also own the 'use client' boundary —\n// haze-ui ships no directives of its own.\n\nimport { DiffViewer } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/diff-viewer.css';\n\nexport { DiffViewer };\nexport type { DiffViewerProps, DiffLine } from 'haze-ui';\n",
209
+ "content": "// haze-ui agent component wrapper — generated by scripts/generate-registry.mjs.\n//\n// This file deliberately contains no component source: haze-ui is compiled\n// CSS-in-JS (linaria) styled against --haze-* design tokens, so vendoring\n// the source would neither build nor style. It re-exports the published\n// component and imports its stylesheet instead — treat this file as your\n// customization layer (wrap, restyle, compose) while haze-ui stays an npm\n// dependency and keeps updating underneath.\n//\n// Theming (once per app): apply the token classes to a root element, e.g.\n// import { lightTheme, spacing, typography } from 'haze-ui';\n// <div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n// (darkTheme is a drop-in swap). haze-ui dist modules ship their own\n// 'use client' directive, so imports resolve cleanly from RSC; the\n// wrapper inherits client semantics either way.\n\nimport { DiffViewer } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/diff-viewer.css';\n\nexport { DiffViewer };\nexport type { DiffViewerProps, DiffLine } from 'haze-ui';\n",
210
210
  "type": "registry:component"
211
211
  }
212
212
  ]
@@ -222,7 +222,7 @@
222
222
  "files": [
223
223
  {
224
224
  "path": "components/haze/log-viewer.tsx",
225
- "content": "// haze-ui agent component wrapper — generated by scripts/generate-registry.mjs.\n//\n// This file deliberately contains no component source: haze-ui is compiled\n// CSS-in-JS (linaria) styled against --haze-* design tokens, so vendoring\n// the source would neither build nor style. It re-exports the published\n// component and imports its stylesheet instead — treat this file as your\n// customization layer (wrap, restyle, compose) while haze-ui stays an npm\n// dependency and keeps updating underneath.\n//\n// Theming (once per app): apply the token classes to a root element, e.g.\n// import { lightTheme, spacing, typography } from 'haze-ui';\n// <div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n// (darkTheme is a drop-in swap). You also own the 'use client' boundary —\n// haze-ui ships no directives of its own.\n\nimport { LogViewer } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/log-viewer.css';\n\nexport { LogViewer };\nexport type { LogViewerProps, LogEntry, LogLevel } from 'haze-ui';\n",
225
+ "content": "// haze-ui agent component wrapper — generated by scripts/generate-registry.mjs.\n//\n// This file deliberately contains no component source: haze-ui is compiled\n// CSS-in-JS (linaria) styled against --haze-* design tokens, so vendoring\n// the source would neither build nor style. It re-exports the published\n// component and imports its stylesheet instead — treat this file as your\n// customization layer (wrap, restyle, compose) while haze-ui stays an npm\n// dependency and keeps updating underneath.\n//\n// Theming (once per app): apply the token classes to a root element, e.g.\n// import { lightTheme, spacing, typography } from 'haze-ui';\n// <div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n// (darkTheme is a drop-in swap). haze-ui dist modules ship their own\n// 'use client' directive, so imports resolve cleanly from RSC; the\n// wrapper inherits client semantics either way.\n\nimport { LogViewer } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/log-viewer.css';\n\nexport { LogViewer };\nexport type { LogViewerProps, LogEntry, LogLevel } from 'haze-ui';\n",
226
226
  "type": "registry:component"
227
227
  }
228
228
  ]
@@ -238,7 +238,7 @@
238
238
  "files": [
239
239
  {
240
240
  "path": "components/haze/async-section.tsx",
241
- "content": "// haze-ui agent component wrapper — generated by scripts/generate-registry.mjs.\n//\n// This file deliberately contains no component source: haze-ui is compiled\n// CSS-in-JS (linaria) styled against --haze-* design tokens, so vendoring\n// the source would neither build nor style. It re-exports the published\n// component and imports its stylesheet instead — treat this file as your\n// customization layer (wrap, restyle, compose) while haze-ui stays an npm\n// dependency and keeps updating underneath.\n//\n// Theming (once per app): apply the token classes to a root element, e.g.\n// import { lightTheme, spacing, typography } from 'haze-ui';\n// <div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n// (darkTheme is a drop-in swap). You also own the 'use client' boundary —\n// haze-ui ships no directives of its own.\n\nimport { AsyncSection } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/async-section.css';\n\nexport { AsyncSection };\nexport type { AsyncSectionProps } from 'haze-ui';\n",
241
+ "content": "// haze-ui agent component wrapper — generated by scripts/generate-registry.mjs.\n//\n// This file deliberately contains no component source: haze-ui is compiled\n// CSS-in-JS (linaria) styled against --haze-* design tokens, so vendoring\n// the source would neither build nor style. It re-exports the published\n// component and imports its stylesheet instead — treat this file as your\n// customization layer (wrap, restyle, compose) while haze-ui stays an npm\n// dependency and keeps updating underneath.\n//\n// Theming (once per app): apply the token classes to a root element, e.g.\n// import { lightTheme, spacing, typography } from 'haze-ui';\n// <div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n// (darkTheme is a drop-in swap). haze-ui dist modules ship their own\n// 'use client' directive, so imports resolve cleanly from RSC; the\n// wrapper inherits client semantics either way.\n\nimport { AsyncSection } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/async-section.css';\n\nexport { AsyncSection };\nexport type { AsyncSectionProps } from 'haze-ui';\n",
242
242
  "type": "registry:component"
243
243
  }
244
244
  ]
@@ -1,4 +1,5 @@
1
1
 
2
+ "use client";
2
3
  /* empty css */
3
4
  //#region src/lib/tokens/colors.ts
4
5
  var e = "haze-colors__lightTheme", t = "haze-colors__darkTheme";
@@ -1,3 +1,4 @@
1
+ "use client";
1
2
  import { darkTheme as e, lightTheme as t } from "./colors.js";
2
3
  import { spacing as n } from "./spacing.js";
3
4
  import { typography as r } from "./typography.js";
@@ -1,4 +1,5 @@
1
1
 
2
+ "use client";
2
3
  /* empty css */
3
4
  //#region src/lib/tokens/motion.ts
4
5
  var e = "haze-motion__motion";
@@ -1,3 +1,4 @@
1
+ "use client";
1
2
  function e(e) {
2
3
  return e <= .04045 ? e / 12.92 : ((e + .055) / 1.055) ** 2.4;
3
4
  }
@@ -1,3 +1,4 @@
1
+ "use client";
1
2
  import { clampChroma as e, formatOklch as t, parseHex as n, parseOklch as r } from "./oklch.js";
2
3
  //#region src/lib/tokens/palette.ts
3
4
  var i = {
@@ -1,3 +1,4 @@
1
+ "use client";
1
2
  import { formatOklch as e } from "./oklch.js";
2
3
  import { SEMANTIC_COLOR_TOKENS as t } from "./palette.js";
3
4
  //#region src/lib/tokens/registry.ts
@@ -1,4 +1,5 @@
1
1
 
2
+ "use client";
2
3
  /* empty css */
3
4
  //#region src/lib/tokens/spacing.ts
4
5
  var e = "haze-spacing__spacing";
@@ -1,4 +1,5 @@
1
1
 
2
+ "use client";
2
3
  /* empty css */
3
4
  //#region src/lib/tokens/typography.ts
4
5
  var e = "haze-typography__typography";
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Pure calendar-date math for the Calendar grid, extracted from Calendar.tsx.
3
+ *
4
+ * Semantics — naive local civil time:
5
+ *
6
+ * - Every `(year, month, day)` triple denotes a civil calendar date realized
7
+ * as a *local* Date at midnight via `new Date(year, month, day)`. The UTC
8
+ * constructor (`new Date(Date.UTC(…))`) is deliberately never used, and
9
+ * `new Date('YYYY-MM-DD')` — which parses as UTC midnight and therefore
10
+ * shifts a day in zones behind UTC — is never a source of truth here.
11
+ * - DST transitions move wall-clock hours (typically 02:00/03:00), never
12
+ * midnight, so constructing a local midnight and reading back
13
+ * `getFullYear`/`getMonth`/`getDate` round-trips exactly even on
14
+ * spring-forward and fall-back days.
15
+ * - Months are 0-based (`Date#getMonth` semantics: 0 = January, 11 =
16
+ * December). All functions are pure: they only read the local zone to
17
+ * query weekdays of civil dates they constructed themselves, and never
18
+ * normalize dates through out-of-range days (the classic
19
+ * `new Date(y, m + 1, 31)` rollover hazard).
20
+ */
21
+ /** One cell of the Calendar grid; `outside` marks days of adjacent months. */
22
+ export type CalendarCell = {
23
+ day: number;
24
+ month: number;
25
+ year: number;
26
+ outside: boolean;
27
+ };
28
+ /**
29
+ * Number of days in a month, via day 0 of the following month
30
+ * (`new Date(year, month + 1, 0).getDate()`). Out-of-range months
31
+ * normalize through the Date constructor, so `month` may be `-1` or `12`
32
+ * and still yields the true length of the adjacent month.
33
+ */
34
+ export declare function getDaysInMonth(year: number, month: number): number;
35
+ /**
36
+ * Shift a `(year, month)` view by `delta` months with year carry, e.g.
37
+ * `(2026, 11) + 1 → { year: 2027, month: 0 }`. Pure integer arithmetic on
38
+ * the month index — no Date is constructed, so navigating from a long month
39
+ * into a short one (Jan 31 → February) can never roll a phantom day 29–31
40
+ * over into the next month the way `new Date(y, m + 1, 31)` would.
41
+ */
42
+ export declare function addMonths(year: number, month: number, delta: number): {
43
+ year: number;
44
+ month: number;
45
+ };
46
+ /**
47
+ * Number of leading cells (previous-month days) before day 1 of the month,
48
+ * for a grid whose first column is `weekStart` (`Date#getDay` semantics:
49
+ * 0 = Sunday, 1 = Monday). The weekday of day 1 is read from the
50
+ * local-midnight Date of that civil date; DST never moves midnight, so the
51
+ * offset is stable across transitions.
52
+ */
53
+ export declare function getLeadingDays(year: number, month: number, weekStart: number): number;
54
+ /**
55
+ * Flat list of grid cells for one month view: `getLeadingDays` previous-month
56
+ * days, then every day of the month itself, then just enough next-month days
57
+ * to complete the final week row. When the month already fills its rows
58
+ * exactly (e.g. a Sunday-first February with 28 days), no padding row is
59
+ * added. The result length is always a multiple of 7.
60
+ */
61
+ export declare function buildMonthCells(year: number, month: number, weekStart: number): CalendarCell[];
62
+ /**
63
+ * Format a civil date as the `"YYYY-MM-DD"` string Calendar uses as its
64
+ * value. Value semantics: the string denotes the **local** civil date — it
65
+ * is a plain calendar date, not a UTC timestamp (parsing it with
66
+ * `new Date('YYYY-MM-DD')` yields UTC midnight and shifts a day in zones
67
+ * behind UTC). Pure string math; no Date construction.
68
+ */
69
+ export declare function formatDate(year: number, month: number, day: number): string;
70
+ /**
71
+ * Parse a `"YYYY-MM-DD"` value string into a local-midnight Date — the
72
+ * inverse of {@link formatDate} and the only safe way to turn a value into
73
+ * a Date (`new Date('YYYY-MM-DD')` parses as UTC midnight and shifts a
74
+ * day in zones behind UTC, e.g. `'2026-03-01'` lands on local Feb 28 in
75
+ * America/New_York). Returns `null` for anything that is not a real
76
+ * calendar date (`'2026-02-30'`, `'2026-13-01'`, malformed input),
77
+ * leaving the caller free to fall back to today.
78
+ */
79
+ export declare function parseCivilDate(value: string): Date | null;
@@ -3,9 +3,21 @@ type ComboboxOptionProps = {
3
3
  value: string;
4
4
  highlighted?: boolean;
5
5
  selected?: boolean;
6
+ /**
7
+ * DOM id of this option — what the combobox input points at via
8
+ * aria-activedescendant while the row holds the keyboard highlight.
9
+ */
10
+ id?: string;
11
+ /**
12
+ * Size of the whole option set, per aria-setsize. Must count every
13
+ * option, not just the rows a windowed (virtualized) list mounted.
14
+ */
15
+ setSize?: number;
16
+ /** 1-based position of this option in the set, per aria-posinset. */
17
+ posInSet?: number;
6
18
  onSelect?: (value: string) => void;
7
19
  className?: string;
8
20
  children: ReactNode;
9
21
  };
10
- export default function ComboboxOption({ value, highlighted, selected, onSelect, className, children, }: ComboboxOptionProps): import("react").JSX.Element;
22
+ export default function ComboboxOption({ value, highlighted, selected, id, setSize, posInSet, onSelect, className, children, }: ComboboxOptionProps): import("react").JSX.Element;
11
23
  export type { ComboboxOptionProps };
@@ -6,6 +6,15 @@ type DataTableColumnMeta = {
6
6
  /** Column-level sorting switch — overrides the table-level `sortable` default. */
7
7
  sortable?: boolean;
8
8
  };
9
+ /** Windowing configuration for the table body, reusing `VirtualList`. */
10
+ type DataTableVirtualized = boolean | {
11
+ /** Fixed row height in px — must match the rendered row (custom cell
12
+ * padding or multi-line content need this form). */
13
+ rowHeight: number;
14
+ /** Extra rows kept mounted above/below the visible window.
15
+ * Defaults to `VirtualList`'s `5`. */
16
+ overscan?: number;
17
+ };
9
18
  /** The feature set stitched into every DataTable instance — TanStack v9's
10
19
  * tree-shaking contract: only the row models and registries the component
11
20
  * actually drives are registered. `columnMeta` is a type-only slot that
@@ -47,6 +56,38 @@ type DataTableProps<TData extends RowData> = {
47
56
  loading?: boolean;
48
57
  /** Keep the header visible while the table body scrolls. */
49
58
  stickyHeader?: boolean;
59
+ /**
60
+ * Window the table body so only rows near the viewport stay mounted,
61
+ * reusing the library's `VirtualList`. `true` uses the default row
62
+ * height; an object pins it explicitly (plus an optional `overscan`,
63
+ * default 5).
64
+ *
65
+ * The default height is `34px` — the natural single-line row of the
66
+ * default cell styles: 2 × `--haze-space-2` padding (16px) + a 14px
67
+ * (`--haze-text-sm`) line box + the 1px row border.
68
+ *
69
+ * Limitations and tradeoffs (evaluated against keeping `<tr>`s in one
70
+ * shared table): `VirtualList` positions rows through absolutely
71
+ * positioned `div` wrappers, and `position: absolute` blockifies
72
+ * `display: table-row` — so rows cannot stay in the header's table.
73
+ * Instead each row renders as a complete sibling `<table><tbody><tr>`
74
+ * inside the wrapper. Rows remain legal, axe-clean table structures
75
+ * with row/cell roles, and `table-layout: fixed` on header and rows
76
+ * distributes columns equally in both, keeping them aligned without a
77
+ * column-width measurement pass. Consequences:
78
+ * - Fixed row height only — dynamic or wrapping row heights are not
79
+ * supported; content taller than `rowHeight` overlaps the next row.
80
+ * - Columns distribute equally instead of auto-sizing to content;
81
+ * per-column widths are not supported in this mode.
82
+ * - The header sits outside the scroll window (always visible) — the
83
+ * `stickyHeader` behavior is implied.
84
+ * - The root must be height-bounded by the consumer (e.g. a
85
+ * `className` setting `height`/`max-height`, or a sized flex
86
+ * parent); unbounded, the viewport degenerates to a single row.
87
+ * - Sorting, selection, pagination and `getRowId` semantics are
88
+ * unchanged — the window always shows the post-sort, post-page slice.
89
+ */
90
+ virtualized?: DataTableVirtualized;
50
91
  /** Stable row identity; also keys the `rowSelection` state. Defaults to
51
92
  * the row's index. */
52
93
  getRowId?: (row: TData, index: number) => string;
@@ -57,5 +98,5 @@ type DataTableProps<TData extends RowData> = {
57
98
  empty?: ReactNode;
58
99
  className?: string;
59
100
  } & Omit<ComponentPropsWithoutRef<'table'>, 'children'>;
60
- export default function DataTable<TData extends RowData>({ columns, data, sortable, selectable, rowSelection: rowSelectionControl, sorting: sortingControl, pageSize, page: pageControl, loading, stickyHeader, getRowId, onRowClick, empty, className, ...rest }: DataTableProps<TData>): import("react").JSX.Element;
61
- export type { DataTableProps, DataTableColumnDef, DataTableColumnMeta };
101
+ export default function DataTable<TData extends RowData>({ columns, data, sortable, selectable, rowSelection: rowSelectionControl, sorting: sortingControl, pageSize, page: pageControl, loading, stickyHeader, virtualized, getRowId, onRowClick, empty, className, ...rest }: DataTableProps<TData>): import("react").JSX.Element;
102
+ export type { DataTableProps, DataTableColumnDef, DataTableColumnMeta, DataTableVirtualized, };
@@ -1,2 +1,2 @@
1
1
  export { default as DataTable } from './DataTable';
2
- export type { DataTableProps, DataTableColumnDef, DataTableColumnMeta, } from './DataTable';
2
+ export type { DataTableProps, DataTableColumnDef, DataTableColumnMeta, DataTableVirtualized, } from './DataTable';
@@ -9,7 +9,7 @@ type HazeStringsOverrides = {
9
9
  * defaults → outermost → innermost per section key.
10
10
  */
11
11
  type LocaleContextValue = {
12
- /** Reserved for Intl-based formatting in a future release. */
12
+ /** BCP 47 tag; `useStrings` resolves it to a built-in string pack. */
13
13
  locale?: string;
14
14
  strings?: HazeStringsOverrides;
15
15
  parent?: LocaleContextValue;
@@ -2,8 +2,11 @@ import type { ReactNode } from 'react';
2
2
  import type { HazeStringsOverrides } from './LocaleContext';
3
3
  type LocaleProviderProps = {
4
4
  /**
5
- * BCP 47 language tag. Currently stored and inherited only — no
6
- * library string is formatted through Intl yet.
5
+ * BCP 47 language tag selecting the built-in string pack: Chinese
6
+ * variants ('zh', 'zh-CN', 'zh_TW', …) serve the bundled zh-CN
7
+ * copy, any other value falls back to English. Unset inherits the
8
+ * tag from the enclosing provider; `strings` still layers on top
9
+ * of the selected pack.
7
10
  */
8
11
  locale?: string;
9
12
  strings?: HazeStringsOverrides;
@@ -2,5 +2,6 @@ export { default } from './LocaleProvider';
2
2
  export type { LocaleProviderProps } from './LocaleProvider';
3
3
  export { useStrings } from './useStrings';
4
4
  export type { HazeStringsOverrides } from './LocaleContext';
5
- export { defaultStrings } from './locale';
5
+ export { defaultStrings, enUS } from './locale';
6
6
  export type { HazeStrings } from './locale';
7
+ export { zhCN } from './zh-cn';
@@ -97,6 +97,10 @@ declare const defaultStrings: {
97
97
  all: string;
98
98
  noLogs: string;
99
99
  };
100
+ mentions: {
101
+ label: string;
102
+ noMatch: string;
103
+ };
100
104
  modelPicker: {
101
105
  label: string;
102
106
  };
@@ -173,4 +177,6 @@ export type HazeStrings = typeof defaultStrings;
173
177
  * can never blank out a label.
174
178
  */
175
179
  declare function formatString(template: string, params: Record<string, string | number>): string;
176
- export { defaultStrings, formatString };
180
+ /** English copy — the default pack, aliased for symmetry with `zhCN`. */
181
+ declare const enUS: HazeStrings;
182
+ export { defaultStrings, enUS, formatString };
@@ -1,9 +1,10 @@
1
1
  import type { HazeStrings } from './locale';
2
2
  /**
3
- * Resolved copy for one component: the section of `defaultStrings`
4
- * layered with every enclosing provider's override, key by key, so the
5
- * innermost provider wins conflicts and silent keys keep outer (or
6
- * default) values. Falls back to the defaults when no provider is
3
+ * Resolved copy for one component: the section of the built-in pack
4
+ * selected by the provider chain's effective `locale`, layered with
5
+ * every enclosing provider's override, key by key, so the innermost
6
+ * provider wins conflicts and silent keys keep outer (or pack)
7
+ * values. Falls back to the English defaults when no provider is
7
8
  * mounted.
8
9
  */
9
10
  export declare function useStrings<K extends keyof HazeStrings>(componentKey: K): Readonly<HazeStrings[K]>;
@@ -0,0 +1,13 @@
1
+ import type { HazeStrings } from './locale';
2
+ /**
3
+ * Simplified Chinese (zh-CN) copy for every user-visible literal in
4
+ * the library. `LocaleProvider` selects this pack automatically for
5
+ * Chinese BCP 47 tags ('zh', 'zh-CN', 'zh_TW', …).
6
+ *
7
+ * Keys mirror `defaultStrings` 1:1 — the `HazeStrings` annotation
8
+ * fails the build when either pack drifts out of sync. `{name}`
9
+ * placeholders must survive translation verbatim; they are expanded
10
+ * by `formatString` at runtime.
11
+ */
12
+ declare const zhCN: HazeStrings;
13
+ export { zhCN };
@@ -0,0 +1,17 @@
1
+ import type { ComponentPropsWithoutRef } from 'react';
2
+ import type { ControlOrValue } from 'react-use-control';
3
+ import type { MentionsOption } from './MentionsCore';
4
+ type MentionsProps = {
5
+ value?: ControlOrValue<string>;
6
+ onChange?: (value: string) => void;
7
+ options: MentionsOption[];
8
+ /**
9
+ * Single character that opens the suggestion panel while typing.
10
+ * Defaults to '@'.
11
+ */
12
+ trigger?: string;
13
+ placeholder?: string;
14
+ className?: string;
15
+ } & Omit<ComponentPropsWithoutRef<'textarea'>, 'value' | 'onChange' | 'placeholder' | 'className' | 'style'>;
16
+ export default function Mentions({ value: valueControl, onChange, ...rest }: MentionsProps): import("react").JSX.Element;
17
+ export type { MentionsProps };
@@ -0,0 +1,21 @@
1
+ import type { ComponentPropsWithoutRef } from 'react';
2
+ export type MentionsOption = {
3
+ /** Text inserted after the trigger character when picked. */
4
+ value: string;
5
+ /** Display text; falls back to `value` when omitted. */
6
+ label?: string;
7
+ };
8
+ type MentionsCoreProps = {
9
+ value: string;
10
+ onChange: (value: string) => void;
11
+ options: MentionsOption[];
12
+ /**
13
+ * Single character that opens the suggestion panel while typing.
14
+ * Defaults to '@'.
15
+ */
16
+ trigger?: string;
17
+ placeholder?: string;
18
+ className?: string;
19
+ } & Omit<ComponentPropsWithoutRef<'textarea'>, 'value' | 'onChange' | 'placeholder' | 'className' | 'style'>;
20
+ export default function MentionsCore({ value, onChange, options, trigger, placeholder, className, 'aria-label': ariaLabel, ...rest }: MentionsCoreProps): import("react").JSX.Element;
21
+ export type { MentionsCoreProps };
@@ -0,0 +1,4 @@
1
+ export { default as Mentions } from './Mentions';
2
+ export type { MentionsProps } from './Mentions';
3
+ export { default as MentionsCore } from './MentionsCore';
4
+ export type { MentionsCoreProps, MentionsOption } from './MentionsCore';
@@ -1 +1,7 @@
1
+ export { useClipboard } from './useClipboard';
2
+ export type { UseClipboardResult } from './useClipboard';
3
+ export { useDebouncedCallback } from './useDebouncedCallback';
4
+ export { useDebouncedValue } from './useDebouncedValue';
5
+ export { useMediaQuery } from './useMediaQuery';
6
+ export { usePrefersReducedMotion } from './usePrefersReducedMotion';
1
7
  export { useTitle } from './useTitle';
@@ -0,0 +1,31 @@
1
+ type UseClipboardResult = {
2
+ /** 最近一次成功复制后的反馈窗口内为 `true`,`resetMs` 后回落 `false`。 */
3
+ copied: boolean;
4
+ /**
5
+ * 复制文本到剪贴板,成功返回 `true`。优先异步剪贴板 API,失败退化
6
+ * `document.execCommand('copy')`;两条路径都失败返回 `false` 且
7
+ * `copied` 不置位。
8
+ */
9
+ copy: (text: string) => Promise<boolean>;
10
+ };
11
+ /**
12
+ * 复制文本到剪贴板并跟踪「已复制」反馈状态。
13
+ *
14
+ * ```tsx
15
+ * const { copied, copy } = useClipboard();
16
+ * <Button onClick={() => copy(shareLink)}>{copied ? '已复制' : '复制链接'}</Button>
17
+ * ```
18
+ *
19
+ * - 优先 `navigator.clipboard.writeText`;不可用(undefined 时访问属性
20
+ * 即抛 TypeError)或被权限拒绝时,退化到隐藏 textarea +
21
+ * `document.execCommand('copy')`。两条路径都失败返回 `false`。
22
+ * - 复制成功后 `copied` 置 `true`,`resetMs`(默认 2000)后自动回落;
23
+ * 窗口内再次成功复制会重置计时。
24
+ * - SSR:`navigator` / `document` 只在 `copy` 事件回调里触碰,服务端
25
+ * 渲染安全(`copied` 初始 `false`,无 hydration 差异);reset 计时器
26
+ * 随卸载清理。
27
+ *
28
+ * @param resetMs `copied` 从 `true` 回落的延迟(毫秒),默认 2000。
29
+ */
30
+ export declare function useClipboard(resetMs?: number): UseClipboardResult;
31
+ export type { UseClipboardResult };