haze-ui 1.24.1 → 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 (422) hide show
  1. package/README.md +237 -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 +20 -18
  8. package/dist/components/Alert/index.js +1 -0
  9. package/dist/components/ApprovalCard/ApprovalCard.js +28 -25
  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 +33 -30
  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 +30 -0
  18. package/dist/components/AvatarGroup/index.js +3 -0
  19. package/dist/components/BackToTop/BackToTop.js +16 -14
  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 +20 -18
  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 +19 -17
  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 +124 -0
  35. package/dist/components/Calendar/date.js +54 -0
  36. package/dist/components/Calendar/index.js +3 -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 +43 -40
  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 +228 -0
  43. package/dist/components/Cascader/index.js +3 -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 +31 -29
  47. package/dist/components/ChatInput/index.js +1 -0
  48. package/dist/components/ChatMessage/ChatMessage.js +29 -27
  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 +21 -19
  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 +29 -26
  61. package/dist/components/ColorPicker/index.js +1 -0
  62. package/dist/components/Combobox/Combobox.js +70 -41
  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 +41 -39
  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 +193 -0
  82. package/dist/components/DataTable/index.js +3 -0
  83. package/dist/components/DateRangePicker/DateRangePicker.js +1 -0
  84. package/dist/components/DateRangePicker/DateRangePickerCore.js +22 -19
  85. package/dist/components/DateRangePicker/index.js +1 -0
  86. package/dist/components/Datepicker/Datepicker.js +11 -8
  87. package/dist/components/Datepicker/DatepickerCore.js +19 -16
  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 +22 -19
  107. package/dist/components/Empty/index.js +1 -0
  108. package/dist/components/FileInput/FileInput.js +15 -13
  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 +54 -0
  116. package/dist/components/HoverCard/index.js +3 -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 +33 -31
  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 +22 -0
  127. package/dist/components/Kbd/index.js +3 -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 +6 -0
  132. package/dist/components/LocaleProvider/LocaleProvider.js +22 -0
  133. package/dist/components/LocaleProvider/index.js +6 -0
  134. package/dist/components/LocaleProvider/locale.js +132 -0
  135. package/dist/components/LocaleProvider/useStrings.js +27 -0
  136. package/dist/components/LocaleProvider/zh-cn.js +128 -0
  137. package/dist/components/LogViewer/LogViewer.js +45 -43
  138. package/dist/components/LogViewer/index.js +1 -0
  139. package/dist/components/MarkdownRenderer/MarkdownRenderer.js +20 -19
  140. package/dist/components/MarkdownRenderer/index.js +1 -0
  141. package/dist/components/MarkdownRenderer/markdown-blocks.js +42 -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 +17 -15
  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 +35 -33
  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 +36 -30
  159. package/dist/components/OTPInput/index.js +1 -0
  160. package/dist/components/Pagination/Pagination.js +32 -30
  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 +23 -21
  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 +41 -39
  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 +29 -26
  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 +113 -0
  189. package/dist/components/Sidebar/index.js +3 -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 +15 -12
  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 +39 -18
  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 +17 -14
  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 +13 -10
  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 +53 -50
  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 +14 -11
  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 +45 -28
  244. package/dist/components/Toast/ToastContext.js +1 -0
  245. package/dist/components/Toast/index.js +5 -3
  246. package/dist/components/Toast/toast2.js +45 -0
  247. package/dist/components/Toast/useToast.js +1 -0
  248. package/dist/components/TokenCounter/TokenCounter.js +20 -18
  249. package/dist/components/TokenCounter/index.js +1 -0
  250. package/dist/components/ToolCallCard/ToolCallCard.js +40 -37
  251. package/dist/components/ToolCallCard/index.js +1 -0
  252. package/dist/components/Toolbar/Toolbar.js +60 -0
  253. package/dist/components/Toolbar/ToolbarButton.js +26 -0
  254. package/dist/components/Toolbar/ToolbarContext.js +9 -0
  255. package/dist/components/Toolbar/ToolbarSeparator.js +23 -0
  256. package/dist/components/Toolbar/index.js +5 -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 +198 -0
  260. package/dist/components/Tour/index.js +3 -0
  261. package/dist/components/Transfer/Transfer.js +1 -0
  262. package/dist/components/Transfer/TransferCore.js +62 -67
  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 +57 -55
  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 +37 -35
  272. package/dist/components/Upload/index.js +1 -0
  273. package/dist/components/VirtualList/VirtualList.js +141 -26
  274. package/dist/components/VirtualList/index.js +1 -0
  275. package/dist/css/accordion.css +1 -1
  276. package/dist/css/affix.css +1 -1
  277. package/dist/css/alert.css +1 -1
  278. package/dist/css/approval-card.css +1 -1
  279. package/dist/css/async-section.css +1 -1
  280. package/dist/css/avatar-group.css +2 -0
  281. package/dist/css/back-to-top.css +1 -1
  282. package/dist/css/breadcrumb.css +1 -1
  283. package/dist/css/button.css +1 -1
  284. package/dist/css/calendar.css +2 -0
  285. package/dist/css/carousel.css +1 -1
  286. package/dist/css/cascader.css +2 -0
  287. package/dist/css/chat-input.css +1 -1
  288. package/dist/css/chat-message.css +1 -1
  289. package/dist/css/checkbox.css +1 -1
  290. package/dist/css/chip.css +1 -1
  291. package/dist/css/code-block.css +1 -1
  292. package/dist/css/color-picker.css +1 -1
  293. package/dist/css/combobox.css +1 -1
  294. package/dist/css/command.css +1 -1
  295. package/dist/css/container.css +1 -1
  296. package/dist/css/context-menu.css +1 -1
  297. package/dist/css/conversation-list.css +1 -1
  298. package/dist/css/data-table.css +2 -0
  299. package/dist/css/date-range-picker.css +1 -1
  300. package/dist/css/datepicker.css +1 -2
  301. package/dist/css/diff-viewer.css +1 -1
  302. package/dist/css/disclosure.css +1 -1
  303. package/dist/css/dropdown-menu.css +1 -1
  304. package/dist/css/file-input.css +1 -1
  305. package/dist/css/hover-card.css +2 -0
  306. package/dist/css/inline-edit.css +1 -1
  307. package/dist/css/input.css +1 -1
  308. package/dist/css/kbd.css +2 -0
  309. package/dist/css/list.css +1 -1
  310. package/dist/css/log-viewer.css +1 -1
  311. package/dist/css/markdown-renderer.css +1 -1
  312. package/dist/css/mentions.css +2 -0
  313. package/dist/css/menu.css +1 -1
  314. package/dist/css/model-picker.css +1 -1
  315. package/dist/css/navigation-bar.css +2 -2
  316. package/dist/css/number-input.css +1 -1
  317. package/dist/css/otp-input.css +1 -1
  318. package/dist/css/pagination.css +1 -1
  319. package/dist/css/password-input.css +1 -1
  320. package/dist/css/progress.css +1 -1
  321. package/dist/css/radio.css +1 -1
  322. package/dist/css/rating.css +1 -1
  323. package/dist/css/resizable.css +1 -1
  324. package/dist/css/segmented.css +1 -1
  325. package/dist/css/select.css +1 -1
  326. package/dist/css/sidebar.css +2 -0
  327. package/dist/css/slider.css +1 -1
  328. package/dist/css/step-timeline.css +1 -1
  329. package/dist/css/stepper.css +1 -1
  330. package/dist/css/streaming-text.css +1 -1
  331. package/dist/css/swipe-action.css +1 -1
  332. package/dist/css/switch.css +1 -1
  333. package/dist/css/table.css +1 -1
  334. package/dist/css/tabs.css +1 -1
  335. package/dist/css/tag-input.css +1 -1
  336. package/dist/css/tag.css +1 -1
  337. package/dist/css/textarea.css +1 -1
  338. package/dist/css/time-picker.css +1 -1
  339. package/dist/css/token-counter.css +1 -1
  340. package/dist/css/tokens.css +1 -1
  341. package/dist/css/toolbar.css +4 -0
  342. package/dist/css/tour.css +2 -0
  343. package/dist/css/tree.css +1 -1
  344. package/dist/css/upload.css +1 -1
  345. package/dist/css/virtual-list.css +1 -1
  346. package/dist/css-manifest.json +29 -1
  347. package/dist/form/FormItem.js +1 -0
  348. package/dist/form/index.js +1 -0
  349. package/dist/haze-ui.css +74 -63
  350. package/dist/hooks/useClipboard.js +30 -0
  351. package/dist/hooks/useDebouncedCallback.js +17 -0
  352. package/dist/hooks/useDebouncedValue.js +12 -0
  353. package/dist/hooks/useMediaQuery.js +13 -0
  354. package/dist/hooks/usePrefersReducedMotion.js +9 -0
  355. package/dist/hooks/useTitle.js +1 -0
  356. package/dist/index.js +139 -115
  357. package/dist/registry.json +247 -0
  358. package/dist/tokens/colors.js +1 -0
  359. package/dist/tokens/index.js +1 -0
  360. package/dist/tokens/motion.js +1 -0
  361. package/dist/tokens/oklch.js +1 -0
  362. package/dist/tokens/palette.js +1 -0
  363. package/dist/tokens/registry.js +1 -0
  364. package/dist/tokens/spacing.js +1 -0
  365. package/dist/tokens/typography.js +1 -0
  366. package/dist/types/components/AvatarGroup/AvatarGroup.d.ts +9 -0
  367. package/dist/types/components/AvatarGroup/index.d.ts +2 -0
  368. package/dist/types/components/Calendar/Calendar.d.ts +21 -0
  369. package/dist/types/components/Calendar/date.d.ts +79 -0
  370. package/dist/types/components/Calendar/index.d.ts +2 -0
  371. package/dist/types/components/Cascader/Cascader.d.ts +26 -0
  372. package/dist/types/components/Cascader/index.d.ts +2 -0
  373. package/dist/types/components/Combobox/Combobox.d.ts +7 -1
  374. package/dist/types/components/Combobox/ComboboxOption.d.ts +13 -1
  375. package/dist/types/components/DataTable/DataTable.d.ts +102 -0
  376. package/dist/types/components/DataTable/index.d.ts +2 -0
  377. package/dist/types/components/Datepicker/Datepicker.d.ts +3 -1
  378. package/dist/types/components/Datepicker/DatepickerCore.d.ts +3 -1
  379. package/dist/types/components/HoverCard/HoverCard.d.ts +49 -0
  380. package/dist/types/components/HoverCard/index.d.ts +2 -0
  381. package/dist/types/components/Kbd/Kbd.d.ts +6 -0
  382. package/dist/types/components/Kbd/index.d.ts +2 -0
  383. package/dist/types/components/LocaleProvider/LocaleContext.d.ts +19 -0
  384. package/dist/types/components/LocaleProvider/LocaleProvider.d.ts +16 -0
  385. package/dist/types/components/LocaleProvider/index.d.ts +7 -0
  386. package/dist/types/components/LocaleProvider/locale.d.ts +182 -0
  387. package/dist/types/components/LocaleProvider/useStrings.d.ts +10 -0
  388. package/dist/types/components/LocaleProvider/zh-cn.d.ts +13 -0
  389. package/dist/types/components/MarkdownRenderer/markdown-blocks.d.ts +6 -0
  390. package/dist/types/components/Mentions/Mentions.d.ts +17 -0
  391. package/dist/types/components/Mentions/MentionsCore.d.ts +21 -0
  392. package/dist/types/components/Mentions/index.d.ts +4 -0
  393. package/dist/types/components/Sidebar/Sidebar.d.ts +64 -0
  394. package/dist/types/components/Sidebar/index.d.ts +4 -0
  395. package/dist/types/components/Toast/index.d.ts +2 -0
  396. package/dist/types/components/Toast/toast.d.ts +46 -0
  397. package/dist/types/components/Toolbar/Toolbar.d.ts +16 -0
  398. package/dist/types/components/Toolbar/ToolbarButton.d.ts +20 -0
  399. package/dist/types/components/Toolbar/ToolbarContext.d.ts +5 -0
  400. package/dist/types/components/Toolbar/ToolbarSeparator.d.ts +14 -0
  401. package/dist/types/components/Toolbar/index.d.ts +6 -0
  402. package/dist/types/components/Tour/Tour.d.ts +46 -0
  403. package/dist/types/components/Tour/index.d.ts +2 -0
  404. package/dist/types/components/VirtualList/VirtualList.d.ts +58 -4
  405. package/dist/types/components/VirtualList/index.d.ts +1 -1
  406. package/dist/types/hooks/index.d.ts +6 -0
  407. package/dist/types/hooks/useClipboard.d.ts +31 -0
  408. package/dist/types/hooks/useDebouncedCallback.d.ts +21 -0
  409. package/dist/types/hooks/useDebouncedValue.d.ts +20 -0
  410. package/dist/types/hooks/useMediaQuery.d.ts +17 -0
  411. package/dist/types/hooks/usePrefersReducedMotion.d.ts +14 -0
  412. package/dist/types/index.d.ts +28 -4
  413. package/dist/utils/classnames.js +1 -0
  414. package/dist/utils/collision.js +1 -0
  415. package/dist/utils/floating.js +1 -0
  416. package/dist/utils/focus-scope.js +1 -0
  417. package/dist/utils/focus.js +1 -0
  418. package/dist/utils/menuKeyboard.js +1 -0
  419. package/dist/utils/presence.js +1 -0
  420. package/package.json +34 -18
  421. package/dist/components/Datepicker/Calendar.js +0 -120
  422. package/dist/types/components/Datepicker/Calendar.d.ts +0 -8
@@ -0,0 +1,247 @@
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema.json",
3
+ "name": "haze-ui",
4
+ "homepage": "https://github.com/wmzy/haze-ui",
5
+ "items": [
6
+ {
7
+ "name": "chat-message",
8
+ "type": "registry:component",
9
+ "title": "ChatMessage",
10
+ "description": "Chat bubble with role-based layout (user / assistant / system), avatar, name, timestamp and delivery status.",
11
+ "dependencies": [
12
+ "haze-ui"
13
+ ],
14
+ "files": [
15
+ {
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). 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
+ "type": "registry:component"
19
+ }
20
+ ]
21
+ },
22
+ {
23
+ "name": "chat-container",
24
+ "type": "registry:component",
25
+ "title": "ChatContainer",
26
+ "description": "Chat transcript scroll container with stick-to-bottom auto-scroll.",
27
+ "dependencies": [
28
+ "haze-ui"
29
+ ],
30
+ "files": [
31
+ {
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). 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
+ "type": "registry:component"
35
+ }
36
+ ]
37
+ },
38
+ {
39
+ "name": "chat-input",
40
+ "type": "registry:component",
41
+ "title": "ChatInput",
42
+ "description": "Message composer with a controllable value and onSend callback.",
43
+ "dependencies": [
44
+ "haze-ui"
45
+ ],
46
+ "files": [
47
+ {
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). 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
+ "type": "registry:component"
51
+ }
52
+ ]
53
+ },
54
+ {
55
+ "name": "streaming-text",
56
+ "type": "registry:component",
57
+ "title": "StreamingText",
58
+ "description": "Typewriter effect that reveals streaming text character by character, with an optional cursor.",
59
+ "dependencies": [
60
+ "haze-ui"
61
+ ],
62
+ "files": [
63
+ {
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). 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
+ "type": "registry:component"
67
+ }
68
+ ]
69
+ },
70
+ {
71
+ "name": "markdown-renderer",
72
+ "type": "registry:component",
73
+ "title": "MarkdownRenderer",
74
+ "description": "Renders markdown content (including code blocks) for assistant responses.",
75
+ "dependencies": [
76
+ "haze-ui"
77
+ ],
78
+ "files": [
79
+ {
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). 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
+ "type": "registry:component"
83
+ }
84
+ ]
85
+ },
86
+ {
87
+ "name": "tool-call-card",
88
+ "type": "registry:component",
89
+ "title": "ToolCallCard",
90
+ "description": "Card presenting an agent tool call — name, input, output and running state.",
91
+ "dependencies": [
92
+ "haze-ui"
93
+ ],
94
+ "files": [
95
+ {
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). 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
+ "type": "registry:component"
99
+ }
100
+ ]
101
+ },
102
+ {
103
+ "name": "thinking-indicator",
104
+ "type": "registry:component",
105
+ "title": "ThinkingIndicator",
106
+ "description": "Animated bouncing-dots indicator that the agent is processing.",
107
+ "dependencies": [
108
+ "haze-ui"
109
+ ],
110
+ "files": [
111
+ {
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). 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
+ "type": "registry:component"
115
+ }
116
+ ]
117
+ },
118
+ {
119
+ "name": "step-timeline",
120
+ "type": "registry:component",
121
+ "title": "StepTimeline / StepTimelineItem",
122
+ "description": "Vertical timeline of agent execution steps with per-step status.",
123
+ "dependencies": [
124
+ "haze-ui"
125
+ ],
126
+ "files": [
127
+ {
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). 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
+ "type": "registry:component"
131
+ }
132
+ ]
133
+ },
134
+ {
135
+ "name": "approval-card",
136
+ "type": "registry:component",
137
+ "title": "ApprovalCard",
138
+ "description": "Approval gate with approve / deny actions for agent-initiated operations.",
139
+ "dependencies": [
140
+ "haze-ui"
141
+ ],
142
+ "files": [
143
+ {
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). 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
+ "type": "registry:component"
147
+ }
148
+ ]
149
+ },
150
+ {
151
+ "name": "token-counter",
152
+ "type": "registry:component",
153
+ "title": "TokenCounter",
154
+ "description": "Context-window token usage counter with budget progress.",
155
+ "dependencies": [
156
+ "haze-ui"
157
+ ],
158
+ "files": [
159
+ {
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). 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
+ "type": "registry:component"
163
+ }
164
+ ]
165
+ },
166
+ {
167
+ "name": "model-picker",
168
+ "type": "registry:component",
169
+ "title": "ModelPicker",
170
+ "description": "Controllable dropdown for selecting the active model.",
171
+ "dependencies": [
172
+ "haze-ui"
173
+ ],
174
+ "files": [
175
+ {
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). 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
+ "type": "registry:component"
179
+ }
180
+ ]
181
+ },
182
+ {
183
+ "name": "conversation-list",
184
+ "type": "registry:component",
185
+ "title": "ConversationList / ConversationItem",
186
+ "description": "Selectable list of conversations for a chat-history sidebar.",
187
+ "dependencies": [
188
+ "haze-ui"
189
+ ],
190
+ "files": [
191
+ {
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). 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
+ "type": "registry:component"
195
+ }
196
+ ]
197
+ },
198
+ {
199
+ "name": "diff-viewer",
200
+ "type": "registry:component",
201
+ "title": "DiffViewer",
202
+ "description": "Renders the line diff between old and new content for agent-proposed edits.",
203
+ "dependencies": [
204
+ "haze-ui"
205
+ ],
206
+ "files": [
207
+ {
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). 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
+ "type": "registry:component"
211
+ }
212
+ ]
213
+ },
214
+ {
215
+ "name": "log-viewer",
216
+ "type": "registry:component",
217
+ "title": "LogViewer",
218
+ "description": "Scrollable log stream with severity-level filtering.",
219
+ "dependencies": [
220
+ "haze-ui"
221
+ ],
222
+ "files": [
223
+ {
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). 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
+ "type": "registry:component"
227
+ }
228
+ ]
229
+ },
230
+ {
231
+ "name": "async-section",
232
+ "type": "registry:component",
233
+ "title": "AsyncSection",
234
+ "description": "Declarative loading / error / content states for async data.",
235
+ "dependencies": [
236
+ "haze-ui"
237
+ ],
238
+ "files": [
239
+ {
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). 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
+ "type": "registry:component"
243
+ }
244
+ ]
245
+ }
246
+ ]
247
+ }
@@ -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,9 @@
1
+ import type { ComponentPropsWithoutRef } from 'react';
2
+ type AvatarGroupProps = {
3
+ /** Maximum number of avatars rendered before the "+N" overflow chip. */
4
+ max?: number;
5
+ /** Overflow count to display instead of children count - max when truncating. */
6
+ total?: number;
7
+ } & ComponentPropsWithoutRef<'div'>;
8
+ export default function AvatarGroup({ max, total, className, children, ...rest }: AvatarGroupProps): import("react").JSX.Element;
9
+ export type { AvatarGroupProps };
@@ -0,0 +1,2 @@
1
+ export { default as AvatarGroup } from './AvatarGroup';
2
+ export type { AvatarGroupProps } from './AvatarGroup';
@@ -0,0 +1,21 @@
1
+ import type { ComponentPropsWithoutRef } from 'react';
2
+ import type { ControlOrValue } from 'react-use-control';
3
+ type CalendarProps = {
4
+ /** Selected date as "YYYY-MM-DD"; empty string means nothing selected. */
5
+ value?: ControlOrValue<string>;
6
+ /** Earliest selectable date ("YYYY-MM-DD"). */
7
+ min?: string;
8
+ /** Latest selectable date ("YYYY-MM-DD"). */
9
+ max?: string;
10
+ /** BCP 47 locale used for month and weekday formatting. */
11
+ locale?: string;
12
+ /** Explicit first day of the week: 0 = Sunday, 1 = Monday. */
13
+ weekStartsOn?: 0 | 1;
14
+ /**
15
+ * Called with the picked "YYYY-MM-DD" date. Still fires alongside the
16
+ * controllable `value` for callers that prefer event-style wiring.
17
+ */
18
+ onSelect?: (date: string) => void;
19
+ } & Omit<ComponentPropsWithoutRef<'div'>, 'onSelect'>;
20
+ export default function Calendar({ value: valueControl, min, max, locale, weekStartsOn, onSelect, className, ...rest }: CalendarProps): import("react").JSX.Element;
21
+ export type { CalendarProps };
@@ -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;
@@ -0,0 +1,2 @@
1
+ export { default as Calendar } from './Calendar';
2
+ export type { CalendarProps } from './Calendar';
@@ -0,0 +1,26 @@
1
+ import type { ComponentPropsWithoutRef, ReactNode } from 'react';
2
+ import type { ControlOrValue } from 'react-use-control';
3
+ export type CascaderOption = {
4
+ label: ReactNode;
5
+ value: string;
6
+ children?: CascaderOption[];
7
+ };
8
+ type CascaderProps = {
9
+ /** Full option tree; each level becomes one column in the drill-down panel. */
10
+ options: CascaderOption[];
11
+ /** Selected path as an array of option values, one per level. */
12
+ value?: ControlOrValue<string[]>;
13
+ /** Fired with the committed path whenever a selection is made. */
14
+ onChange?: (value: string[]) => void;
15
+ placeholder?: string;
16
+ /**
17
+ * `false` (default): only leaf options commit a value. `true`: every level
18
+ * commits its partial path the moment it is chosen (Ant Design semantics).
19
+ */
20
+ changeOnSelect?: boolean;
21
+ /** Whether hovering a parent option expands its column; defaults to click. */
22
+ expandTrigger?: 'click' | 'hover';
23
+ className?: string;
24
+ } & Omit<ComponentPropsWithoutRef<'div'>, 'onChange' | 'className'>;
25
+ export default function Cascader({ options, value: valueControl, onChange, placeholder, changeOnSelect, expandTrigger, className, ...rest }: CascaderProps): import("react").JSX.Element;
26
+ export type { CascaderProps };
@@ -0,0 +1,2 @@
1
+ export { default as Cascader } from './Cascader';
2
+ export type { CascaderProps, CascaderOption } from './Cascader';
@@ -7,7 +7,13 @@ type ComboboxProps = {
7
7
  label: string;
8
8
  }[];
9
9
  placeholder?: string;
10
+ /**
11
+ * Render the dropdown through VirtualList once the filtered list is
12
+ * longer than this many options. Defaults to 100; 0 disables
13
+ * virtualization entirely (plain DOM rendering at any length).
14
+ */
15
+ virtualThreshold?: number;
10
16
  className?: string;
11
17
  };
12
- export default function Combobox({ value: valueControl, open: openControl, options, placeholder, className, }: ComboboxProps): import("react").JSX.Element;
18
+ export default function Combobox({ value: valueControl, open: openControl, options, placeholder, virtualThreshold, className, }: ComboboxProps): import("react").JSX.Element;
13
19
  export type { ComboboxProps };
@@ -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 };
@@ -0,0 +1,102 @@
1
+ import type { ComponentPropsWithoutRef, MouseEvent, ReactNode } from 'react';
2
+ import type { ControlOrValue } from 'react-use-control';
3
+ import type { ColumnDef, RowData, RowSelectionState, SortingState } from '@tanstack/react-table';
4
+ /** Per-column metadata understood by DataTable. */
5
+ type DataTableColumnMeta = {
6
+ /** Column-level sorting switch — overrides the table-level `sortable` default. */
7
+ sortable?: boolean;
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
+ };
18
+ /** The feature set stitched into every DataTable instance — TanStack v9's
19
+ * tree-shaking contract: only the row models and registries the component
20
+ * actually drives are registered. `columnMeta` is a type-only slot that
21
+ * types `meta` on column definitions. */
22
+ declare const dataTableFeatures: {
23
+ rowPaginationFeature: import("@tanstack/react-table").TableFeature;
24
+ paginatedRowModel: (table: import("@tanstack/react-table").Table<any, any>) => () => import("@tanstack/react-table").RowModel<any, any>;
25
+ rowSelectionFeature: import("@tanstack/react-table").TableFeature;
26
+ rowSortingFeature: import("@tanstack/react-table").TableFeature;
27
+ sortedRowModel: (table: import("@tanstack/react-table").Table<any, any>) => () => import("@tanstack/react-table").RowModel<any, any>;
28
+ sortFns: {
29
+ alphanumeric: import("@tanstack/react-table").CreatedSortFn<any, any>;
30
+ text: import("@tanstack/react-table").CreatedSortFn<any, any>;
31
+ };
32
+ columnMeta: DataTableColumnMeta;
33
+ };
34
+ /** Column definition accepted by DataTable — a TanStack Table column def
35
+ * bound to DataTable's feature set and column meta. */
36
+ type DataTableColumnDef<TData extends RowData> = ColumnDef<typeof dataTableFeatures, TData>;
37
+ type DataTableProps<TData extends RowData> = {
38
+ /** Column definitions: accessors, headers and cell templates. */
39
+ columns: DataTableColumnDef<TData>[];
40
+ /** Row data — one item per row. */
41
+ data: TData[];
42
+ /** Enable click-to-sort headers. Defaults to `false`; per-column
43
+ * `meta.sortable` (or native `enableSorting`) overrides per column. */
44
+ sortable?: boolean;
45
+ /** Render a leading checkbox column bound to `rowSelection`. */
46
+ selectable?: boolean;
47
+ /** Selection state keyed by row id (TanStack `RowSelectionState`). */
48
+ rowSelection?: ControlOrValue<RowSelectionState>;
49
+ /** Sort state (TanStack `SortingState`). */
50
+ sorting?: ControlOrValue<SortingState>;
51
+ /** Rows per page. Setting this enables the pagination footer. */
52
+ pageSize?: number;
53
+ /** Current page, 1-based, when paginating. */
54
+ page?: ControlOrValue<number>;
55
+ /** Render skeleton rows instead of data. */
56
+ loading?: boolean;
57
+ /** Keep the header visible while the table body scrolls. */
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;
91
+ /** Stable row identity; also keys the `rowSelection` state. Defaults to
92
+ * the row's index. */
93
+ getRowId?: (row: TData, index: number) => string;
94
+ /** Row click handler. Clicks originating in interactive cell content
95
+ * (checkboxes, buttons, links) are ignored. */
96
+ onRowClick?: (row: TData, event: MouseEvent<HTMLTableRowElement>) => void;
97
+ /** Custom empty-state node; defaults to the `Empty` component. */
98
+ empty?: ReactNode;
99
+ className?: string;
100
+ } & Omit<ComponentPropsWithoutRef<'table'>, 'children'>;
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, };
@@ -0,0 +1,2 @@
1
+ export { default as DataTable } from './DataTable';
2
+ export type { DataTableProps, DataTableColumnDef, DataTableColumnMeta, DataTableVirtualized, } from './DataTable';
@@ -4,8 +4,10 @@ type DatepickerProps = {
4
4
  open?: ControlOrValue<boolean>;
5
5
  min?: string;
6
6
  max?: string;
7
+ locale?: string;
8
+ weekStartsOn?: 0 | 1;
7
9
  placeholder?: string;
8
10
  className?: string;
9
11
  };
10
- export default function Datepicker({ value: valueControl, open: openControl, min, max, placeholder, className, }: DatepickerProps): import("react").JSX.Element;
12
+ export default function Datepicker({ value: valueControl, open: openControl, min, max, locale, weekStartsOn, placeholder, className, }: DatepickerProps): import("react").JSX.Element;
11
13
  export type { DatepickerProps };