haze-ui 1.32.0 → 1.34.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 (816) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +111 -1210
  3. package/dist/THIRD-PARTY-NOTICES.md +152 -0
  4. package/dist/coi-serviceworker.LICENSE +21 -0
  5. package/dist/coi-serviceworker.js +118 -0
  6. package/dist/components/Accordion/Accordion.js +40 -8
  7. package/dist/components/Accordion/AccordionContext.js +9 -0
  8. package/dist/components/Accordion/AccordionItem.js +30 -15
  9. package/dist/components/Accordion/index.js +3 -3
  10. package/dist/components/ActivityRail/ActivityRail.js +46 -37
  11. package/dist/components/Affix/Affix.js +0 -1
  12. package/dist/components/Affix/index.js +0 -1
  13. package/dist/components/Alert/Alert.js +17 -23
  14. package/dist/components/Alert/alert-styles.js +14 -0
  15. package/dist/components/Alert/index.js +3 -2
  16. package/dist/components/ApprovalCard/ApprovalCard.js +70 -43
  17. package/dist/components/Avatar/Avatar.js +5 -4
  18. package/dist/components/AvatarGroup/AvatarGroup.js +15 -18
  19. package/dist/components/AvatarGroup/index.js +0 -1
  20. package/dist/components/Badge/Badge.js +5 -4
  21. package/dist/components/Badge/badge-styles.js +2 -1
  22. package/dist/components/Badge/index.js +2 -2
  23. package/dist/components/Banner/Banner.js +17 -23
  24. package/dist/components/Banner/banner-styles.js +14 -0
  25. package/dist/components/Banner/index.js +3 -2
  26. package/dist/components/Breadcrumb/Breadcrumb.js +16 -17
  27. package/dist/components/Breadcrumb/BreadcrumbItem.js +7 -10
  28. package/dist/components/Breadcrumb/index.js +0 -1
  29. package/dist/components/Button/ButtonLink.js +11 -9
  30. package/dist/components/ButtonGroup/ButtonGroup.js +48 -0
  31. package/dist/components/ButtonGroup/ButtonGroupContext.js +9 -0
  32. package/dist/components/ButtonGroup/ButtonGroupSeparator.js +30 -0
  33. package/dist/components/ButtonGroup/button-group-styles.js +7 -0
  34. package/dist/components/ButtonGroup/index.js +5 -0
  35. package/dist/components/Calendar/Calendar.js +355 -305
  36. package/dist/components/Card/Card.js +9 -7
  37. package/dist/components/Card/index.js +2 -2
  38. package/dist/components/Carousel/Carousel.js +108 -91
  39. package/dist/components/Carousel/CarouselSlide.js +15 -9
  40. package/dist/components/Cascader/Cascader.js +190 -173
  41. package/dist/components/Chart/Chart.js +122 -24
  42. package/dist/components/Chart/chart-elements.js +271 -114
  43. package/dist/components/ChatInput/ChatInput.js +32 -28
  44. package/dist/components/ChatMessage/ChatMessage.js +79 -72
  45. package/dist/components/Checkbox/Checkbox.js +17 -14
  46. package/dist/components/Checkbox/CheckboxCore.js +28 -17
  47. package/dist/components/Chip/Chip.js +18 -33
  48. package/dist/components/Chip/chip-styles.js +23 -0
  49. package/dist/components/Chip/index.js +3 -3
  50. package/dist/components/CodeBlock/CodeBlock.js +1 -0
  51. package/dist/components/CodeBlock/index.js +1 -0
  52. package/dist/components/Collapsible/Collapsible.js +53 -44
  53. package/dist/components/ColorPicker/ColorPicker.js +84 -73
  54. package/dist/components/ColorPicker/ColorPickerCore.js +60 -39
  55. package/dist/components/ColorPicker/ColorPickerPanel.js +312 -109
  56. package/dist/components/ColorPicker/color-picker-styles.js +2 -2
  57. package/dist/components/ColorPicker/gradient.js +114 -0
  58. package/dist/components/Combobox/Combobox.js +125 -123
  59. package/dist/components/Combobox/ComboboxGroup.js +23 -16
  60. package/dist/components/Combobox/ComboboxOption.js +12 -8
  61. package/dist/components/Combobox/combobox-options.js +26 -0
  62. package/dist/components/Command/Command.js +182 -97
  63. package/dist/components/Command/CommandDialog.js +49 -34
  64. package/dist/components/Command/command-filter.js +80 -10
  65. package/dist/components/ConfigProvider/ConfigContext.js +7 -38
  66. package/dist/components/ConfigProvider/ConfigProvider.js +15 -7
  67. package/dist/components/ConfigProvider/useConfigDefaults.js +5 -2
  68. package/dist/components/ContextMenu/ContextMenu.js +52 -34
  69. package/dist/components/ContextMenu/ContextMenuContent.js +40 -26
  70. package/dist/components/ContextMenu/ContextMenuItem.js +22 -13
  71. package/dist/components/ContextMenu/ContextMenuSeparator.js +14 -7
  72. package/dist/components/ContextMenu/ContextMenuTrigger.js +21 -12
  73. package/dist/components/ConversationList/ConversationItem.js +45 -29
  74. package/dist/components/ConversationList/ConversationList.js +22 -15
  75. package/dist/components/CopyButton/CopyButton.js +83 -0
  76. package/dist/components/CopyButton/Snippet.js +50 -0
  77. package/dist/components/CopyButton/copy-button-styles.js +11 -0
  78. package/dist/components/CopyButton/index.js +5 -0
  79. package/dist/components/CopyButton/snippet-styles.js +7 -0
  80. package/dist/components/Countdown/Countdown.js +63 -0
  81. package/dist/components/Countdown/index.js +3 -0
  82. package/dist/components/DataTable/CellEditor.js +34 -24
  83. package/dist/components/DataTable/DataTable.js +591 -321
  84. package/dist/components/DataTable/column-filter.js +106 -0
  85. package/dist/components/DataTable/column-reorder.js +17 -0
  86. package/dist/components/DataTable/csv.js +15 -14
  87. package/dist/components/DataTable/features.js +19 -18
  88. package/dist/components/DataTable/filters.js +26 -0
  89. package/dist/components/DateField/DateField.js +28 -0
  90. package/dist/components/DateField/DateFieldCore.js +94 -0
  91. package/dist/components/DateField/index.js +4 -0
  92. package/dist/components/DateField/segmented-field.js +121 -0
  93. package/dist/components/DateRangePicker/DateRangePicker.js +35 -28
  94. package/dist/components/Datepicker/Datepicker.js +31 -27
  95. package/dist/components/Descriptions/Descriptions.js +0 -1
  96. package/dist/components/Descriptions/index.js +0 -1
  97. package/dist/components/Dialog/Dialog.js +47 -41
  98. package/dist/components/DiffViewer/DiffViewer.js +65 -48
  99. package/dist/components/Disclosure/Disclosure.js +31 -22
  100. package/dist/components/Drawer/Drawer.js +50 -39
  101. package/dist/components/DropdownMenu/DropdownMenu.js +61 -45
  102. package/dist/components/DropdownMenu/DropdownMenuCheckboxItem.js +24 -22
  103. package/dist/components/DropdownMenu/DropdownMenuContent.js +5 -5
  104. package/dist/components/DropdownMenu/DropdownMenuGroup.js +26 -16
  105. package/dist/components/DropdownMenu/DropdownMenuItem.js +2 -1
  106. package/dist/components/DropdownMenu/DropdownMenuRadioGroup.js +33 -21
  107. package/dist/components/DropdownMenu/DropdownMenuRadioItem.js +22 -20
  108. package/dist/components/DropdownMenu/DropdownMenuSeparator.js +14 -7
  109. package/dist/components/DropdownMenu/DropdownMenuSub.js +28 -16
  110. package/dist/components/DropdownMenu/DropdownMenuSubContent.js +14 -13
  111. package/dist/components/DropdownMenu/DropdownMenuSubTrigger.js +22 -17
  112. package/dist/components/DropdownMenu/DropdownMenuTrigger.js +33 -22
  113. package/dist/components/Empty/Empty.js +41 -28
  114. package/dist/components/ErrorBoundary/ErrorBoundary.js +88 -0
  115. package/dist/components/ErrorBoundary/index.js +3 -0
  116. package/dist/components/FileInput/FileInput.js +23 -16
  117. package/dist/components/FilePreview/FilePreview.js +104 -91
  118. package/dist/components/FloatButton/float-button-glyphs.js +9 -7
  119. package/dist/components/Fullscreen/Fullscreen.js +35 -27
  120. package/dist/components/Heatmap/Heatmap.js +124 -0
  121. package/dist/components/Heatmap/heatmap-styles.js +6 -0
  122. package/dist/components/Heatmap/index.js +2 -0
  123. package/dist/components/HoverCard/HoverCard.js +63 -43
  124. package/dist/components/Image/Image.js +56 -32
  125. package/dist/components/Image/ImageGalleryContext.js +9 -0
  126. package/dist/components/Image/ImagePreview.js +297 -200
  127. package/dist/components/Image/ImagePreviewGroup.js +46 -0
  128. package/dist/components/Image/index.js +2 -1
  129. package/dist/components/ImageCrop/ImageCrop.js +188 -0
  130. package/dist/components/ImageCrop/image-crop-geometry.js +81 -0
  131. package/dist/components/ImageCrop/index.js +3 -0
  132. package/dist/components/InlineCitation/InlineCitation.js +78 -0
  133. package/dist/components/InlineCitation/index.js +3 -0
  134. package/dist/components/InlineEdit/InlineEdit.js +62 -40
  135. package/dist/components/Input/Input.js +21 -17
  136. package/dist/components/Input/InputCore.js +9 -12
  137. package/dist/components/Input/input-styles.js +11 -0
  138. package/dist/components/InputGroup/InputGroup.js +33 -0
  139. package/dist/components/InputGroup/InputGroupAddon.js +27 -0
  140. package/dist/components/InputGroup/InputGroupContext.js +9 -0
  141. package/dist/components/InputGroup/index.js +5 -0
  142. package/dist/components/InputGroup/input-group-styles.js +11 -0
  143. package/dist/components/JsonView/JsonView.js +277 -179
  144. package/dist/components/Kbd/Kbd.js +3 -2
  145. package/dist/components/List/List.js +0 -1
  146. package/dist/components/List/ListItem.js +0 -1
  147. package/dist/components/List/index.js +0 -1
  148. package/dist/components/LocaleProvider/LocaleProvider.js +17 -17
  149. package/dist/components/LocaleProvider/ar-sa.js +28 -2
  150. package/dist/components/LocaleProvider/de-de.js +28 -2
  151. package/dist/components/LocaleProvider/es-es.js +28 -2
  152. package/dist/components/LocaleProvider/fr-fr.js +28 -2
  153. package/dist/components/LocaleProvider/it-it.js +28 -2
  154. package/dist/components/LocaleProvider/ja-jp.js +28 -2
  155. package/dist/components/LocaleProvider/ko-kr.js +28 -2
  156. package/dist/components/LocaleProvider/locale.js +28 -2
  157. package/dist/components/LocaleProvider/pt-br.js +28 -2
  158. package/dist/components/LocaleProvider/ru-ru.js +28 -2
  159. package/dist/components/LocaleProvider/useStrings.js +20 -9
  160. package/dist/components/LocaleProvider/zh-cn.js +28 -2
  161. package/dist/components/LogViewer/LogViewer.js +89 -59
  162. package/dist/components/Mark/Mark.js +3 -1
  163. package/dist/components/MaskedInput/MaskedInput.js +25 -0
  164. package/dist/components/MaskedInput/MaskedInputCore.js +47 -0
  165. package/dist/components/MaskedInput/index.js +5 -0
  166. package/dist/components/MaskedInput/mask.js +154 -0
  167. package/dist/components/Mentions/Mentions.js +18 -13
  168. package/dist/components/Menu/Menu.js +202 -55
  169. package/dist/components/Menu/MenuCheckboxItem.js +24 -22
  170. package/dist/components/Menu/MenuContext.js +9 -0
  171. package/dist/components/Menu/MenuDivider.js +12 -8
  172. package/dist/components/Menu/MenuGroup.js +26 -16
  173. package/dist/components/Menu/MenuItem.js +20 -18
  174. package/dist/components/Menu/MenuRadioGroup.js +34 -22
  175. package/dist/components/Menu/MenuRadioItem.js +23 -21
  176. package/dist/components/Menu/MenuSub.js +29 -17
  177. package/dist/components/Menu/MenuSubContent.js +15 -14
  178. package/dist/components/Menu/MenuSubTrigger.js +23 -18
  179. package/dist/components/Meter/Meter.js +63 -0
  180. package/dist/components/Meter/index.js +4 -0
  181. package/dist/components/Meter/meter-styles.js +11 -0
  182. package/dist/components/ModelPicker/ModelPicker.js +38 -24
  183. package/dist/components/NavigationBar/NavLink.js +0 -1
  184. package/dist/components/NavigationBar/NavigationBar.js +0 -1
  185. package/dist/components/NavigationBar/index.js +0 -1
  186. package/dist/components/NavigationMenu/NavigationMenu.js +73 -0
  187. package/dist/components/NavigationMenu/NavigationMenuContent.js +53 -0
  188. package/dist/components/NavigationMenu/NavigationMenuContext.js +17 -0
  189. package/dist/components/NavigationMenu/NavigationMenuItem.js +72 -0
  190. package/dist/components/NavigationMenu/NavigationMenuList.js +59 -0
  191. package/dist/components/NavigationMenu/NavigationMenuTrigger.js +82 -0
  192. package/dist/components/NavigationMenu/index.js +7 -0
  193. package/dist/components/NumberInput/NumberInput.js +22 -18
  194. package/dist/components/NumberInput/NumberInputCore.js +23 -30
  195. package/dist/components/NumberInput/index.js +4 -3
  196. package/dist/components/NumberInput/number-input-styles.js +15 -0
  197. package/dist/components/OTPInput/OTPInput.js +28 -15
  198. package/dist/components/Pagination/Pagination.js +81 -83
  199. package/dist/components/Pagination/pagination-styles.js +11 -0
  200. package/dist/components/PasswordInput/PasswordInput.js +18 -15
  201. package/dist/components/PasswordInput/PasswordInputCore.js +39 -28
  202. package/dist/components/PhoneInput/PhoneInput.js +144 -0
  203. package/dist/components/PhoneInput/index.js +4 -0
  204. package/dist/components/PhoneInput/phone-input-styles.js +7 -0
  205. package/dist/components/PhoneInput/phone-number.js +8 -0
  206. package/dist/components/Plan/Plan.js +115 -0
  207. package/dist/components/Plan/index.js +3 -0
  208. package/dist/components/Popconfirm/Popconfirm.js +152 -0
  209. package/dist/components/Popconfirm/index.js +3 -0
  210. package/dist/components/Popover/Popover.js +55 -40
  211. package/dist/components/Progress/Progress.js +40 -57
  212. package/dist/components/Progress/index.js +3 -3
  213. package/dist/components/Progress/progress-styles.js +28 -0
  214. package/dist/components/PullToRefresh/PullToRefresh.js +121 -0
  215. package/dist/components/PullToRefresh/index.js +3 -0
  216. package/dist/components/Queue/Queue.js +68 -0
  217. package/dist/components/Queue/index.js +3 -0
  218. package/dist/components/Radio/Radio.js +28 -19
  219. package/dist/components/Radio/RadioGroup.js +14 -13
  220. package/dist/components/Radio/RadioGroupCore.js +34 -19
  221. package/dist/components/Rating/Rating.js +29 -16
  222. package/dist/components/Resizable/index.js +1 -1
  223. package/dist/components/Result/Result.js +0 -1
  224. package/dist/components/Result/index.js +0 -1
  225. package/dist/components/RichTextEditor/RichTextEditor.js +257 -0
  226. package/dist/components/RichTextEditor/index.js +3 -0
  227. package/dist/components/Schedule/Schedule.js +566 -0
  228. package/dist/components/Schedule/index.js +3 -0
  229. package/dist/components/ScrollArea/ScrollArea.js +28 -9
  230. package/dist/components/ScrollArea/ScrollAreaContext.js +11 -0
  231. package/dist/components/ScrollArea/ScrollThumb.js +114 -0
  232. package/dist/components/ScrollArea/ScrollViewport.js +52 -0
  233. package/dist/components/ScrollArea/Scrollbar.js +49 -0
  234. package/dist/components/ScrollArea/index.js +5 -2
  235. package/dist/components/ScrollArea/scroll-math.js +58 -0
  236. package/dist/components/Segmented/Segmented.js +29 -16
  237. package/dist/components/Select/Option.js +12 -8
  238. package/dist/components/Select/OptionGroup.js +12 -8
  239. package/dist/components/Select/Select.js +52 -30
  240. package/dist/components/Select/SelectCore.js +62 -57
  241. package/dist/components/Select/SelectFloating.js +256 -172
  242. package/dist/components/Select/index.js +5 -5
  243. package/dist/components/Select/select-options.js +8 -6
  244. package/dist/components/Sidebar/Sidebar.js +102 -76
  245. package/dist/components/Sources/Sources.js +54 -50
  246. package/dist/components/Sparkline/Sparkline.js +2 -2
  247. package/dist/components/Sparkline/index.js +1 -1
  248. package/dist/components/Sparkline/sparkline-styles.js +3 -1
  249. package/dist/components/Spinner/Spinner.js +4 -3
  250. package/dist/components/Splitter/Splitter.js +209 -0
  251. package/dist/components/Splitter/index.js +3 -0
  252. package/dist/components/StatusBar/StatusBar.js +0 -1
  253. package/dist/components/StatusBar/index.js +0 -1
  254. package/dist/components/StepTimeline/StepTimeline.js +95 -29
  255. package/dist/components/Stepper/Stepper.js +34 -20
  256. package/dist/components/StreamingText/StreamingText.js +33 -31
  257. package/dist/components/Switch/Switch.js +27 -15
  258. package/dist/components/Switch/SwitchCore.js +18 -29
  259. package/dist/components/Switch/index.js +4 -3
  260. package/dist/components/Switch/switch-styles.js +19 -0
  261. package/dist/components/TabBar/TabBar.js +0 -1
  262. package/dist/components/TabBar/index.js +0 -1
  263. package/dist/components/Table/Table.js +38 -17
  264. package/dist/components/Table/TableBody.js +17 -8
  265. package/dist/components/Table/TableCell.js +9 -7
  266. package/dist/components/Table/TableContext.js +9 -0
  267. package/dist/components/Table/TableHead.js +17 -8
  268. package/dist/components/Table/TableRow.js +12 -7
  269. package/dist/components/Table/table-styles.js +7 -0
  270. package/dist/components/Tabs/SortableTabList.js +70 -51
  271. package/dist/components/Tabs/Tab.js +70 -53
  272. package/dist/components/Tabs/TabList.js +96 -75
  273. package/dist/components/Tabs/TabPanel.js +20 -15
  274. package/dist/components/Tabs/Tabs.js +37 -15
  275. package/dist/components/Tabs/index.js +7 -6
  276. package/dist/components/Tabs/tab-metas.js +20 -10
  277. package/dist/components/Tabs/tabs-styles.js +23 -0
  278. package/dist/components/Tag/Tag.js +14 -26
  279. package/dist/components/Tag/index.js +3 -3
  280. package/dist/components/Tag/tag-styles.js +16 -0
  281. package/dist/components/TagGroup/SortableTagGroup.js +50 -30
  282. package/dist/components/TagGroup/TagGroup.js +29 -22
  283. package/dist/components/TagGroup/TagGroupItem.js +32 -25
  284. package/dist/components/TagInput/SortableTagInput.js +24 -19
  285. package/dist/components/TagInput/SortableTagInputCore.js +69 -42
  286. package/dist/components/TagInput/TagInput.js +33 -20
  287. package/dist/components/Textarea/Textarea.js +19 -15
  288. package/dist/components/Textarea/TextareaCore.js +6 -9
  289. package/dist/components/Textarea/textarea-styles.js +11 -0
  290. package/dist/components/ThinkingIndicator/ThinkingIndicator.js +42 -29
  291. package/dist/components/TimeField/TimeField.js +29 -0
  292. package/dist/components/TimeField/TimeFieldCore.js +69 -0
  293. package/dist/components/TimeField/index.js +4 -0
  294. package/dist/components/TimeGrid/TimeGrid.js +89 -0
  295. package/dist/components/TimeGrid/index.js +3 -0
  296. package/dist/components/TimeGrid/time-grid-styles.js +7 -0
  297. package/dist/components/TimePicker/TimePicker.js +31 -30
  298. package/dist/components/TimePicker/TimePickerCore.js +20 -12
  299. package/dist/components/Timeline/Timeline.js +0 -1
  300. package/dist/components/Timeline/index.js +0 -1
  301. package/dist/components/Toast/ToastContainer.js +99 -69
  302. package/dist/components/Toggle/Toggle.js +16 -13
  303. package/dist/components/TokenCounter/TokenCounter.js +56 -31
  304. package/dist/components/Toolbar/Toolbar.js +5 -3
  305. package/dist/components/Toolbar/ToolbarSeparator.js +19 -14
  306. package/dist/components/Tooltip/Tooltip.js +37 -30
  307. package/dist/components/Trace/Trace.js +132 -0
  308. package/dist/components/Trace/index.js +3 -0
  309. package/dist/components/Transfer/Transfer.js +18 -13
  310. package/dist/components/Transfer/TransferCore.js +144 -88
  311. package/dist/components/Tree/SortableTree.js +115 -96
  312. package/dist/components/Tree/Tree.js +81 -80
  313. package/dist/components/Tree/TreeItem.js +198 -143
  314. package/dist/components/TreeSelect/TreeSelect.js +59 -55
  315. package/dist/components/Upload/Upload.js +28 -24
  316. package/dist/components/Upload/UploadCore.js +241 -184
  317. package/dist/components/Upload/UploadList.js +349 -298
  318. package/dist/components/Workbench/Workbench.js +165 -126
  319. package/dist/css/accordion.css +1 -1
  320. package/dist/css/affix.css +1 -1
  321. package/dist/css/alert.css +1 -1
  322. package/dist/css/app-shell.css +1 -1
  323. package/dist/css/badge.css +1 -1
  324. package/dist/css/banner.css +1 -1
  325. package/dist/css/bottom-sheet.css +1 -1
  326. package/dist/css/button-group.css +4 -0
  327. package/dist/css/card.css +1 -1
  328. package/dist/css/carousel.css +1 -1
  329. package/dist/css/chart.css +2 -1
  330. package/dist/css/chat-container.css +1 -1
  331. package/dist/css/chip.css +1 -1
  332. package/dist/css/color-picker.css +2 -1
  333. package/dist/css/combobox.css +3 -3
  334. package/dist/css/command.css +1 -1
  335. package/dist/css/confirm-dialog.css +1 -1
  336. package/dist/css/context-menu.css +2 -2
  337. package/dist/css/copy-button.css +5 -0
  338. package/dist/css/countdown.css +4 -0
  339. package/dist/css/data-table.css +2 -1
  340. package/dist/css/date-field.css +4 -0
  341. package/dist/css/datepicker.css +1 -1
  342. package/dist/css/drawer.css +1 -1
  343. package/dist/css/dropdown-menu.css +1 -1
  344. package/dist/css/error-boundary.css +4 -0
  345. package/dist/css/heatmap.css +4 -0
  346. package/dist/css/image-crop.css +4 -0
  347. package/dist/css/image.css +1 -1
  348. package/dist/css/inline-citation.css +4 -0
  349. package/dist/css/input-group.css +4 -0
  350. package/dist/css/input.css +2 -1
  351. package/dist/css/loading-overlay.css +1 -1
  352. package/dist/css/mark.css +1 -1
  353. package/dist/css/menu.css +2 -2
  354. package/dist/css/meter.css +4 -0
  355. package/dist/css/navigation-menu.css +9 -0
  356. package/dist/css/number-input.css +2 -1
  357. package/dist/css/otp-input.css +1 -0
  358. package/dist/css/pagination.css +2 -1
  359. package/dist/css/phone-input.css +4 -0
  360. package/dist/css/plan.css +4 -0
  361. package/dist/css/popconfirm.css +5 -0
  362. package/dist/css/popover.css +1 -1
  363. package/dist/css/progress.css +1 -1
  364. package/dist/css/pull-to-refresh.css +4 -0
  365. package/dist/css/queue.css +4 -0
  366. package/dist/css/rating.css +1 -0
  367. package/dist/css/rich-text-editor.css +5 -0
  368. package/dist/css/schedule.css +4 -0
  369. package/dist/css/scroll-area.css +4 -1
  370. package/dist/css/segmented.css +1 -0
  371. package/dist/css/select.css +4 -3
  372. package/dist/css/sparkline.css +1 -1
  373. package/dist/css/splitter.css +4 -0
  374. package/dist/css/step-timeline.css +1 -1
  375. package/dist/css/switch.css +3 -1
  376. package/dist/css/table.css +2 -1
  377. package/dist/css/tabs.css +4 -3
  378. package/dist/css/tag-group.css +1 -1
  379. package/dist/css/tag-input.css +2 -1
  380. package/dist/css/tag.css +1 -1
  381. package/dist/css/textarea.css +2 -1
  382. package/dist/css/time-grid.css +4 -0
  383. package/dist/css/time-picker.css +1 -1
  384. package/dist/css/timeline.css +1 -1
  385. package/dist/css/toast.css +1 -1
  386. package/dist/css/tokens.css +2 -2
  387. package/dist/css/tooltip.css +1 -1
  388. package/dist/css/tour.css +1 -1
  389. package/dist/css/trace.css +4 -0
  390. package/dist/css/tree-select.css +1 -1
  391. package/dist/css/tree.css +1 -1
  392. package/dist/css/upload.css +1 -1
  393. package/dist/css/virtual-list.css +1 -1
  394. package/dist/css/workbench.css +1 -1
  395. package/dist/css-manifest.json +162 -12
  396. package/dist/design-tokens/cyan-dark.json +32 -0
  397. package/dist/design-tokens/cyan-light.json +32 -0
  398. package/dist/design-tokens/dark.json +32 -0
  399. package/dist/design-tokens/light.json +32 -0
  400. package/dist/design-tokens/orange-dark.json +32 -0
  401. package/dist/design-tokens/orange-light.json +32 -0
  402. package/dist/design-tokens/rose-dark.json +32 -0
  403. package/dist/design-tokens/rose-light.json +32 -0
  404. package/dist/design-tokens/teal-dark.json +32 -0
  405. package/dist/design-tokens/teal-light.json +32 -0
  406. package/dist/design-tokens/violet-dark.json +32 -0
  407. package/dist/design-tokens/violet-light.json +32 -0
  408. package/dist/form/FormItem.js +71 -52
  409. package/dist/form/index.js +3 -3
  410. package/dist/haze-ui.css +172 -61
  411. package/dist/hooks/useClipboard.js +22 -14
  412. package/dist/hooks/useDebouncedCallback.js +17 -11
  413. package/dist/hooks/useDebouncedValue.js +8 -7
  414. package/dist/hooks/useFullscreen.js +40 -36
  415. package/dist/hooks/useHotkeys.js +78 -24
  416. package/dist/hooks/useMediaQuery.js +9 -5
  417. package/dist/hooks/useStorageState.js +43 -34
  418. package/dist/hooks/useTitle.js +12 -9
  419. package/dist/index.js +325 -274
  420. package/dist/locales/index.js +14 -0
  421. package/dist/mcp-docs.json +3279 -364
  422. package/dist/registry.json +655 -64
  423. package/dist/robots.txt +4 -0
  424. package/dist/sitemap.xml +185 -0
  425. package/dist/tokens/colors.js +2 -2
  426. package/dist/tokens/index.js +8 -8
  427. package/dist/tokens/registry.js +47 -13
  428. package/dist/tokens/z-index.js +35 -0
  429. package/dist/types/components/Accordion/Accordion.d.ts +33 -4
  430. package/dist/types/components/Accordion/AccordionContext.d.ts +41 -0
  431. package/dist/types/components/Accordion/AccordionItem.d.ts +18 -3
  432. package/dist/types/components/Accordion/index.d.ts +4 -4
  433. package/dist/types/components/ActivityRail/index.d.ts +4 -4
  434. package/dist/types/components/Affix/index.d.ts +2 -2
  435. package/dist/types/components/Alert/Alert.d.ts +6 -3
  436. package/dist/types/components/Alert/alert-styles.d.ts +20 -0
  437. package/dist/types/components/Alert/index.d.ts +3 -2
  438. package/dist/types/components/Anchor/index.d.ts +2 -2
  439. package/dist/types/components/AppShell/index.d.ts +2 -2
  440. package/dist/types/components/ApprovalCard/index.d.ts +2 -2
  441. package/dist/types/components/AspectRatio/index.d.ts +2 -2
  442. package/dist/types/components/AsyncSection/index.d.ts +2 -2
  443. package/dist/types/components/Avatar/Avatar.d.ts +4 -2
  444. package/dist/types/components/Avatar/index.d.ts +2 -2
  445. package/dist/types/components/AvatarGroup/AvatarGroup.d.ts +8 -2
  446. package/dist/types/components/AvatarGroup/index.d.ts +2 -2
  447. package/dist/types/components/BackToTop/index.d.ts +2 -2
  448. package/dist/types/components/Badge/Badge.d.ts +6 -3
  449. package/dist/types/components/Badge/badge-styles.d.ts +4 -3
  450. package/dist/types/components/Badge/index.d.ts +3 -3
  451. package/dist/types/components/Banner/Banner.d.ts +6 -3
  452. package/dist/types/components/Banner/banner-styles.d.ts +20 -0
  453. package/dist/types/components/Banner/index.d.ts +3 -2
  454. package/dist/types/components/BottomSheet/index.d.ts +2 -2
  455. package/dist/types/components/Breadcrumb/Breadcrumb.d.ts +3 -3
  456. package/dist/types/components/Breadcrumb/BreadcrumbItem.d.ts +23 -5
  457. package/dist/types/components/Breadcrumb/index.d.ts +4 -4
  458. package/dist/types/components/Button/ButtonLink.d.ts +4 -12
  459. package/dist/types/components/Button/index.d.ts +5 -5
  460. package/dist/types/components/ButtonGroup/ButtonGroup.d.ts +52 -0
  461. package/dist/types/components/ButtonGroup/ButtonGroupContext.d.ts +28 -0
  462. package/dist/types/components/ButtonGroup/ButtonGroupSeparator.d.ts +18 -0
  463. package/dist/types/components/ButtonGroup/button-group-styles.d.ts +45 -0
  464. package/dist/types/components/ButtonGroup/index.d.ts +6 -0
  465. package/dist/types/components/Calendar/Calendar.d.ts +74 -3
  466. package/dist/types/components/Calendar/index.d.ts +2 -2
  467. package/dist/types/components/Card/Card.d.ts +32 -5
  468. package/dist/types/components/Card/index.d.ts +3 -2
  469. package/dist/types/components/Carousel/Carousel.d.ts +27 -3
  470. package/dist/types/components/Carousel/index.d.ts +4 -4
  471. package/dist/types/components/Cascader/Cascader.d.ts +44 -2
  472. package/dist/types/components/Cascader/index.d.ts +2 -2
  473. package/dist/types/components/Chart/Chart.d.ts +111 -18
  474. package/dist/types/components/Chart/chart-elements.d.ts +73 -7
  475. package/dist/types/components/Chart/index.d.ts +2 -2
  476. package/dist/types/components/ChatContainer/index.d.ts +2 -2
  477. package/dist/types/components/ChatInput/index.d.ts +2 -2
  478. package/dist/types/components/ChatMessage/index.d.ts +2 -2
  479. package/dist/types/components/Checkbox/index.d.ts +4 -4
  480. package/dist/types/components/Chip/Chip.d.ts +12 -3
  481. package/dist/types/components/Chip/chip-styles.d.ts +51 -0
  482. package/dist/types/components/Chip/index.d.ts +3 -2
  483. package/dist/types/components/CodeBlock/index.d.ts +2 -2
  484. package/dist/types/components/Collapsible/index.d.ts +2 -2
  485. package/dist/types/components/ColorPicker/ColorPicker.d.ts +37 -4
  486. package/dist/types/components/ColorPicker/ColorPickerPanel.d.ts +28 -9
  487. package/dist/types/components/ColorPicker/color-picker-styles.d.ts +27 -0
  488. package/dist/types/components/ColorPicker/gradient.d.ts +64 -0
  489. package/dist/types/components/ColorPicker/index.d.ts +5 -4
  490. package/dist/types/components/Combobox/Combobox.d.ts +24 -23
  491. package/dist/types/components/Combobox/ComboboxOption.d.ts +11 -4
  492. package/dist/types/components/Combobox/combobox-options.d.ts +24 -0
  493. package/dist/types/components/Combobox/index.d.ts +6 -6
  494. package/dist/types/components/Command/Command.d.ts +36 -5
  495. package/dist/types/components/Command/command-filter.d.ts +57 -5
  496. package/dist/types/components/Command/index.d.ts +4 -4
  497. package/dist/types/components/ConfigProvider/ConfigContext.d.ts +104 -24
  498. package/dist/types/components/ConfigProvider/ConfigProvider.d.ts +16 -6
  499. package/dist/types/components/ConfigProvider/index.d.ts +4 -4
  500. package/dist/types/components/ConfigProvider/useConfigDefaults.d.ts +17 -4
  501. package/dist/types/components/ConfirmDialog/confirm.d.ts +1 -1
  502. package/dist/types/components/ConfirmDialog/index.d.ts +4 -4
  503. package/dist/types/components/Container/index.d.ts +2 -2
  504. package/dist/types/components/ContextMenu/ContextMenu.d.ts +20 -2
  505. package/dist/types/components/ContextMenu/ContextMenuContext.d.ts +25 -1
  506. package/dist/types/components/ContextMenu/index.d.ts +11 -10
  507. package/dist/types/components/ConversationList/index.d.ts +4 -4
  508. package/dist/types/components/CopyButton/CopyButton.d.ts +56 -0
  509. package/dist/types/components/CopyButton/Snippet.d.ts +48 -0
  510. package/dist/types/components/CopyButton/copy-button-styles.d.ts +21 -0
  511. package/dist/types/components/CopyButton/index.d.ts +5 -0
  512. package/dist/types/components/CopyButton/snippet-styles.d.ts +10 -0
  513. package/dist/types/components/CountUp/index.d.ts +2 -2
  514. package/dist/types/components/Countdown/Countdown.d.ts +30 -0
  515. package/dist/types/components/Countdown/index.d.ts +2 -0
  516. package/dist/types/components/DataTable/DataTable.d.ts +169 -10
  517. package/dist/types/components/DataTable/column-filter.d.ts +27 -0
  518. package/dist/types/components/DataTable/column-reorder.d.ts +32 -0
  519. package/dist/types/components/DataTable/csv.d.ts +13 -3
  520. package/dist/types/components/DataTable/features.d.ts +18 -1
  521. package/dist/types/components/DataTable/filters.d.ts +25 -0
  522. package/dist/types/components/DataTable/index.d.ts +6 -5
  523. package/dist/types/components/DataTable/summary.d.ts +1 -1
  524. package/dist/types/components/DateField/DateField.d.ts +21 -0
  525. package/dist/types/components/DateField/DateFieldCore.d.ts +30 -0
  526. package/dist/types/components/DateField/index.d.ts +4 -0
  527. package/dist/types/components/DateField/segmented-field.d.ts +70 -0
  528. package/dist/types/components/DateRangePicker/DateRangePicker.d.ts +1 -1
  529. package/dist/types/components/DateRangePicker/index.d.ts +4 -4
  530. package/dist/types/components/DateRangePicker/presets.d.ts +1 -1
  531. package/dist/types/components/DateTimePicker/DateTimePicker.d.ts +2 -2
  532. package/dist/types/components/DateTimePicker/index.d.ts +2 -2
  533. package/dist/types/components/Datepicker/Datepicker.d.ts +2 -2
  534. package/dist/types/components/Datepicker/DatepickerCore.d.ts +1 -1
  535. package/dist/types/components/Datepicker/index.d.ts +4 -4
  536. package/dist/types/components/Descriptions/index.d.ts +2 -2
  537. package/dist/types/components/Dialog/Dialog.d.ts +12 -1
  538. package/dist/types/components/Dialog/index.d.ts +2 -2
  539. package/dist/types/components/DiffViewer/index.d.ts +2 -2
  540. package/dist/types/components/Disclosure/index.d.ts +2 -2
  541. package/dist/types/components/Divider/index.d.ts +2 -2
  542. package/dist/types/components/Drawer/Drawer.d.ts +23 -1
  543. package/dist/types/components/Drawer/index.d.ts +2 -2
  544. package/dist/types/components/DropdownMenu/DropdownMenu.d.ts +16 -3
  545. package/dist/types/components/DropdownMenu/DropdownMenuContext.d.ts +39 -1
  546. package/dist/types/components/DropdownMenu/index.d.ts +25 -24
  547. package/dist/types/components/Ellipsis/index.d.ts +2 -2
  548. package/dist/types/components/Empty/index.d.ts +2 -2
  549. package/dist/types/components/ErrorBoundary/ErrorBoundary.d.ts +45 -0
  550. package/dist/types/components/ErrorBoundary/index.d.ts +2 -0
  551. package/dist/types/components/Fieldset/index.d.ts +2 -2
  552. package/dist/types/components/FileInput/index.d.ts +2 -2
  553. package/dist/types/components/FilePreview/index.d.ts +2 -2
  554. package/dist/types/components/Flex/index.d.ts +2 -2
  555. package/dist/types/components/FloatButton/index.d.ts +4 -4
  556. package/dist/types/components/Fullscreen/Fullscreen.d.ts +1 -1
  557. package/dist/types/components/Fullscreen/index.d.ts +3 -3
  558. package/dist/types/components/Grid/index.d.ts +4 -4
  559. package/dist/types/components/Heatmap/Heatmap.d.ts +69 -0
  560. package/dist/types/components/Heatmap/heatmap-styles.d.ts +25 -0
  561. package/dist/types/components/Heatmap/index.d.ts +2 -0
  562. package/dist/types/components/Highlight/index.d.ts +2 -2
  563. package/dist/types/components/HoverCard/HoverCard.d.ts +20 -3
  564. package/dist/types/components/HoverCard/index.d.ts +2 -2
  565. package/dist/types/components/Icon/index.d.ts +2 -2
  566. package/dist/types/components/Image/Image.d.ts +4 -0
  567. package/dist/types/components/Image/ImageGalleryContext.d.ts +29 -0
  568. package/dist/types/components/Image/ImagePreview.d.ts +15 -1
  569. package/dist/types/components/Image/ImagePreviewGroup.d.ts +23 -0
  570. package/dist/types/components/Image/index.d.ts +4 -2
  571. package/dist/types/components/ImageCrop/ImageCrop.d.ts +67 -0
  572. package/dist/types/components/ImageCrop/image-crop-geometry.d.ts +65 -0
  573. package/dist/types/components/ImageCrop/index.d.ts +3 -0
  574. package/dist/types/components/Indicator/index.d.ts +2 -2
  575. package/dist/types/components/InlineCitation/InlineCitation.d.ts +17 -0
  576. package/dist/types/components/InlineCitation/index.d.ts +2 -0
  577. package/dist/types/components/InlineCompletion/index.d.ts +2 -2
  578. package/dist/types/components/InlineEdit/index.d.ts +2 -2
  579. package/dist/types/components/Input/index.d.ts +4 -4
  580. package/dist/types/components/Input/input-styles.d.ts +15 -0
  581. package/dist/types/components/InputGroup/InputGroup.d.ts +47 -0
  582. package/dist/types/components/InputGroup/InputGroupAddon.d.ts +22 -0
  583. package/dist/types/components/InputGroup/InputGroupContext.d.ts +21 -0
  584. package/dist/types/components/InputGroup/index.d.ts +6 -0
  585. package/dist/types/components/InputGroup/input-group-styles.d.ts +34 -0
  586. package/dist/types/components/JsonView/index.d.ts +2 -2
  587. package/dist/types/components/Kbd/Kbd.d.ts +4 -2
  588. package/dist/types/components/Kbd/index.d.ts +2 -2
  589. package/dist/types/components/List/index.d.ts +4 -4
  590. package/dist/types/components/LoadingOverlay/index.d.ts +2 -2
  591. package/dist/types/components/LocaleProvider/LocaleContext.d.ts +2 -2
  592. package/dist/types/components/LocaleProvider/LocaleProvider.d.ts +1 -1
  593. package/dist/types/components/LocaleProvider/ar-sa.d.ts +1 -1
  594. package/dist/types/components/LocaleProvider/de-de.d.ts +1 -1
  595. package/dist/types/components/LocaleProvider/es-es.d.ts +1 -1
  596. package/dist/types/components/LocaleProvider/fr-fr.d.ts +1 -1
  597. package/dist/types/components/LocaleProvider/index.d.ts +18 -18
  598. package/dist/types/components/LocaleProvider/it-it.d.ts +1 -1
  599. package/dist/types/components/LocaleProvider/ja-jp.d.ts +1 -1
  600. package/dist/types/components/LocaleProvider/ko-kr.d.ts +1 -1
  601. package/dist/types/components/LocaleProvider/locale.d.ts +26 -0
  602. package/dist/types/components/LocaleProvider/pt-br.d.ts +1 -1
  603. package/dist/types/components/LocaleProvider/ru-ru.d.ts +1 -1
  604. package/dist/types/components/LocaleProvider/strings.d.ts +1 -1
  605. package/dist/types/components/LocaleProvider/useStrings.d.ts +1 -1
  606. package/dist/types/components/LocaleProvider/zh-cn.d.ts +1 -1
  607. package/dist/types/components/LogViewer/index.d.ts +2 -2
  608. package/dist/types/components/Mark/Mark.d.ts +2 -2
  609. package/dist/types/components/Mark/index.d.ts +2 -2
  610. package/dist/types/components/MarkdownRenderer/index.d.ts +2 -2
  611. package/dist/types/components/MaskedInput/MaskedInput.d.ts +20 -0
  612. package/dist/types/components/MaskedInput/MaskedInputCore.d.ts +33 -0
  613. package/dist/types/components/MaskedInput/index.d.ts +6 -0
  614. package/dist/types/components/MaskedInput/mask.d.ts +77 -0
  615. package/dist/types/components/Masonry/index.d.ts +2 -2
  616. package/dist/types/components/Mentions/Mentions.d.ts +1 -1
  617. package/dist/types/components/Mentions/index.d.ts +4 -4
  618. package/dist/types/components/Menu/Menu.d.ts +42 -3
  619. package/dist/types/components/Menu/MenuContext.d.ts +39 -0
  620. package/dist/types/components/Menu/index.d.ts +20 -19
  621. package/dist/types/components/Meter/Meter.d.ts +72 -0
  622. package/dist/types/components/Meter/index.d.ts +3 -0
  623. package/dist/types/components/Meter/meter-styles.d.ts +25 -0
  624. package/dist/types/components/ModelPicker/index.d.ts +2 -2
  625. package/dist/types/components/NavigationBar/index.d.ts +4 -4
  626. package/dist/types/components/NavigationMenu/NavigationMenu.d.ts +47 -0
  627. package/dist/types/components/NavigationMenu/NavigationMenuContent.d.ts +16 -0
  628. package/dist/types/components/NavigationMenu/NavigationMenuContext.d.ts +77 -0
  629. package/dist/types/components/NavigationMenu/NavigationMenuItem.d.ts +13 -0
  630. package/dist/types/components/NavigationMenu/NavigationMenuList.d.ts +15 -0
  631. package/dist/types/components/NavigationMenu/NavigationMenuTrigger.d.ts +15 -0
  632. package/dist/types/components/NavigationMenu/index.d.ts +11 -0
  633. package/dist/types/components/NumberFormatter/index.d.ts +2 -2
  634. package/dist/types/components/NumberInput/index.d.ts +5 -4
  635. package/dist/types/components/NumberInput/number-input-styles.d.ts +10 -0
  636. package/dist/types/components/OTPInput/OTPInput.d.ts +9 -1
  637. package/dist/types/components/OTPInput/index.d.ts +4 -4
  638. package/dist/types/components/Pagination/index.d.ts +2 -2
  639. package/dist/types/components/Pagination/pagination-styles.d.ts +13 -0
  640. package/dist/types/components/PasswordInput/index.d.ts +4 -4
  641. package/dist/types/components/PhoneInput/PhoneInput.d.ts +35 -0
  642. package/dist/types/components/PhoneInput/index.d.ts +3 -0
  643. package/dist/types/components/PhoneInput/phone-input-styles.d.ts +11 -0
  644. package/dist/types/components/PhoneInput/phone-number.d.ts +9 -0
  645. package/dist/types/components/Plan/Plan.d.ts +26 -0
  646. package/dist/types/components/Plan/index.d.ts +2 -0
  647. package/dist/types/components/Popconfirm/Popconfirm.d.ts +57 -0
  648. package/dist/types/components/Popconfirm/index.d.ts +2 -0
  649. package/dist/types/components/Popover/Popover.d.ts +1 -1
  650. package/dist/types/components/Popover/index.d.ts +2 -2
  651. package/dist/types/components/Progress/Progress.d.ts +7 -3
  652. package/dist/types/components/Progress/index.d.ts +3 -2
  653. package/dist/types/components/Progress/progress-styles.d.ts +41 -0
  654. package/dist/types/components/PromptInput/index.d.ts +2 -2
  655. package/dist/types/components/PullToRefresh/PullToRefresh.d.ts +61 -0
  656. package/dist/types/components/PullToRefresh/index.d.ts +2 -0
  657. package/dist/types/components/QRCode/index.d.ts +2 -2
  658. package/dist/types/components/Queue/Queue.d.ts +25 -0
  659. package/dist/types/components/Queue/index.d.ts +2 -0
  660. package/dist/types/components/Radio/index.d.ts +6 -6
  661. package/dist/types/components/Rating/Rating.d.ts +8 -1
  662. package/dist/types/components/Rating/index.d.ts +4 -4
  663. package/dist/types/components/Resizable/index.d.ts +2 -4
  664. package/dist/types/components/Result/index.d.ts +2 -2
  665. package/dist/types/components/RichTextEditor/RichTextEditor.d.ts +56 -0
  666. package/dist/types/components/RichTextEditor/index.d.ts +2 -0
  667. package/dist/types/components/Schedule/Schedule.d.ts +113 -0
  668. package/dist/types/components/Schedule/index.d.ts +2 -0
  669. package/dist/types/components/ScrollArea/ScrollArea.d.ts +27 -3
  670. package/dist/types/components/ScrollArea/ScrollAreaContext.d.ts +24 -0
  671. package/dist/types/components/ScrollArea/ScrollThumb.d.ts +9 -0
  672. package/dist/types/components/ScrollArea/ScrollViewport.d.ts +8 -0
  673. package/dist/types/components/ScrollArea/Scrollbar.d.ts +19 -0
  674. package/dist/types/components/ScrollArea/index.d.ts +9 -2
  675. package/dist/types/components/ScrollArea/scroll-math.d.ts +121 -0
  676. package/dist/types/components/Segmented/Segmented.d.ts +10 -2
  677. package/dist/types/components/Segmented/index.d.ts +4 -4
  678. package/dist/types/components/Select/Option.d.ts +4 -1
  679. package/dist/types/components/Select/Select.d.ts +87 -15
  680. package/dist/types/components/Select/SelectCore.d.ts +32 -14
  681. package/dist/types/components/Select/SelectFloating.d.ts +33 -14
  682. package/dist/types/components/Select/index.d.ts +8 -8
  683. package/dist/types/components/Select/select-options.d.ts +16 -10
  684. package/dist/types/components/Sidebar/index.d.ts +4 -4
  685. package/dist/types/components/Signature/index.d.ts +2 -2
  686. package/dist/types/components/Skeleton/index.d.ts +2 -2
  687. package/dist/types/components/Slider/index.d.ts +4 -4
  688. package/dist/types/components/Sources/index.d.ts +2 -2
  689. package/dist/types/components/Sparkline/Sparkline.d.ts +3 -3
  690. package/dist/types/components/Sparkline/index.d.ts +3 -3
  691. package/dist/types/components/Sparkline/sparkline-styles.d.ts +7 -5
  692. package/dist/types/components/Spinner/Spinner.d.ts +4 -1
  693. package/dist/types/components/Spinner/index.d.ts +2 -2
  694. package/dist/types/components/Splitter/Splitter.d.ts +33 -0
  695. package/dist/types/components/Splitter/index.d.ts +2 -0
  696. package/dist/types/components/Spoiler/index.d.ts +2 -2
  697. package/dist/types/components/Stat/index.d.ts +2 -2
  698. package/dist/types/components/StatusBar/index.d.ts +3 -3
  699. package/dist/types/components/StepTimeline/StepTimeline.d.ts +17 -2
  700. package/dist/types/components/StepTimeline/index.d.ts +2 -2
  701. package/dist/types/components/Stepper/index.d.ts +4 -4
  702. package/dist/types/components/StreamingText/index.d.ts +2 -2
  703. package/dist/types/components/SwipeAction/index.d.ts +2 -2
  704. package/dist/types/components/Switch/Switch.d.ts +12 -2
  705. package/dist/types/components/Switch/index.d.ts +5 -4
  706. package/dist/types/components/Switch/switch-styles.d.ts +15 -0
  707. package/dist/types/components/TabBar/index.d.ts +4 -4
  708. package/dist/types/components/Table/Table.d.ts +17 -2
  709. package/dist/types/components/Table/TableContext.d.ts +27 -0
  710. package/dist/types/components/Table/index.d.ts +11 -10
  711. package/dist/types/components/Table/table-styles.d.ts +9 -0
  712. package/dist/types/components/Tabs/Tab.d.ts +9 -1
  713. package/dist/types/components/Tabs/TabList.d.ts +1 -1
  714. package/dist/types/components/Tabs/TabPanel.d.ts +1 -1
  715. package/dist/types/components/Tabs/Tabs.d.ts +76 -5
  716. package/dist/types/components/Tabs/TabsContext.d.ts +35 -0
  717. package/dist/types/components/Tabs/index.d.ts +12 -11
  718. package/dist/types/components/Tabs/tab-metas.d.ts +15 -1
  719. package/dist/types/components/Tabs/tabs-styles.d.ts +10 -0
  720. package/dist/types/components/Tag/Tag.d.ts +34 -6
  721. package/dist/types/components/Tag/index.d.ts +3 -2
  722. package/dist/types/components/Tag/tag-styles.d.ts +28 -0
  723. package/dist/types/components/TagGroup/SortableTagGroup.d.ts +1 -1
  724. package/dist/types/components/TagGroup/index.d.ts +6 -6
  725. package/dist/types/components/TagInput/SortableTagInputCore.d.ts +1 -1
  726. package/dist/types/components/TagInput/TagInput.d.ts +10 -1
  727. package/dist/types/components/TagInput/index.d.ts +8 -8
  728. package/dist/types/components/Textarea/index.d.ts +4 -4
  729. package/dist/types/components/Textarea/textarea-styles.d.ts +12 -0
  730. package/dist/types/components/ThinkingIndicator/index.d.ts +2 -2
  731. package/dist/types/components/TimeField/TimeField.d.ts +26 -0
  732. package/dist/types/components/TimeField/TimeFieldCore.d.ts +36 -0
  733. package/dist/types/components/TimeField/index.d.ts +4 -0
  734. package/dist/types/components/TimeGrid/TimeGrid.d.ts +58 -0
  735. package/dist/types/components/TimeGrid/index.d.ts +2 -0
  736. package/dist/types/components/TimeGrid/time-grid-styles.d.ts +13 -0
  737. package/dist/types/components/TimePicker/TimePicker.d.ts +1 -1
  738. package/dist/types/components/TimePicker/TimePickerPanel.d.ts +1 -1
  739. package/dist/types/components/TimePicker/index.d.ts +5 -5
  740. package/dist/types/components/Timeline/index.d.ts +2 -2
  741. package/dist/types/components/Toast/Toast.d.ts +1 -1
  742. package/dist/types/components/Toast/ToastContainer.d.ts +1 -1
  743. package/dist/types/components/Toast/index.d.ts +7 -7
  744. package/dist/types/components/Toast/toast-channel.d.ts +1 -1
  745. package/dist/types/components/Toast/useToast.d.ts +1 -1
  746. package/dist/types/components/Toggle/index.d.ts +4 -4
  747. package/dist/types/components/TokenCounter/index.d.ts +2 -2
  748. package/dist/types/components/ToolCallCard/index.d.ts +2 -2
  749. package/dist/types/components/Toolbar/index.d.ts +8 -8
  750. package/dist/types/components/Tooltip/Tooltip.d.ts +26 -4
  751. package/dist/types/components/Tooltip/index.d.ts +2 -2
  752. package/dist/types/components/Tour/Tour.d.ts +1 -1
  753. package/dist/types/components/Tour/index.d.ts +2 -2
  754. package/dist/types/components/Trace/Trace.d.ts +37 -0
  755. package/dist/types/components/Trace/index.d.ts +2 -0
  756. package/dist/types/components/Transfer/Transfer.d.ts +1 -1
  757. package/dist/types/components/Transfer/index.d.ts +4 -4
  758. package/dist/types/components/Tree/SortableTree.d.ts +2 -2
  759. package/dist/types/components/Tree/Tree.d.ts +2 -2
  760. package/dist/types/components/Tree/TreeItem.d.ts +1 -1
  761. package/dist/types/components/Tree/index.d.ts +4 -4
  762. package/dist/types/components/Tree/sortable-tree-utils.d.ts +1 -1
  763. package/dist/types/components/Tree/types.d.ts +9 -1
  764. package/dist/types/components/Tree/utils.d.ts +1 -1
  765. package/dist/types/components/TreeSelect/TreeSelect.d.ts +1 -1
  766. package/dist/types/components/TreeSelect/index.d.ts +2 -2
  767. package/dist/types/components/Typography/index.d.ts +2 -2
  768. package/dist/types/components/Upload/Upload.d.ts +25 -2
  769. package/dist/types/components/Upload/UploadCore.d.ts +44 -3
  770. package/dist/types/components/Upload/UploadList.d.ts +16 -2
  771. package/dist/types/components/Upload/index.d.ts +5 -5
  772. package/dist/types/components/Upload/types.d.ts +28 -1
  773. package/dist/types/components/Upload/xhr-upload.d.ts +1 -1
  774. package/dist/types/components/VirtualList/index.d.ts +2 -2
  775. package/dist/types/components/VisuallyHidden/index.d.ts +2 -2
  776. package/dist/types/components/Watermark/index.d.ts +2 -2
  777. package/dist/types/components/Workbench/index.d.ts +2 -2
  778. package/dist/types/dates/buddhist.d.ts +1 -1
  779. package/dist/types/dates/ethiopic.d.ts +1 -1
  780. package/dist/types/dates/gregory.d.ts +1 -1
  781. package/dist/types/dates/hebrew.d.ts +1 -1
  782. package/dist/types/dates/index.d.ts +11 -11
  783. package/dist/types/dates/islamic.d.ts +1 -1
  784. package/dist/types/dates/japanese.d.ts +1 -1
  785. package/dist/types/dates/persian.d.ts +1 -1
  786. package/dist/types/dates/registry.d.ts +1 -1
  787. package/dist/types/form/FormItem.d.ts +38 -1
  788. package/dist/types/form/index.d.ts +17 -7
  789. package/dist/types/headless/index.d.ts +45 -40
  790. package/dist/types/hooks/index.d.ts +33 -33
  791. package/dist/types/hooks/useHotkeys.d.ts +16 -4
  792. package/dist/types/index.d.ts +351 -303
  793. package/dist/types/locales/index.d.ts +32 -0
  794. package/dist/types/tokens/colors.d.ts +15 -0
  795. package/dist/types/tokens/density.d.ts +1 -1
  796. package/dist/types/tokens/index.d.ts +11 -11
  797. package/dist/types/tokens/palette.d.ts +1 -1
  798. package/dist/types/tokens/registry.d.ts +1 -1
  799. package/dist/types/tokens/z-index.d.ts +33 -0
  800. package/dist/types/utils/floating.d.ts +1 -1
  801. package/dist/types/utils/native-form.d.ts +32 -0
  802. package/dist/types/utils/presence.d.ts +21 -2
  803. package/dist/types/utils/sortable-shared.d.ts +6 -0
  804. package/dist/types/utils/submenu.d.ts +1 -1
  805. package/dist/utils/direction.js +10 -8
  806. package/dist/utils/floating.js +227 -185
  807. package/dist/utils/focus-scope.js +27 -24
  808. package/dist/utils/menuRadio.js +23 -21
  809. package/dist/utils/native-form.js +42 -0
  810. package/dist/utils/presence.js +16 -12
  811. package/dist/utils/sortable-shared.js +12 -8
  812. package/dist/utils/sortable.js +55 -39
  813. package/dist/utils/submenu.js +94 -82
  814. package/dist/utils/view-transition.js +11 -13
  815. package/dist/utils/viewport.js +9 -8
  816. package/package.json +160 -11
@@ -19,7 +19,7 @@
19
19
  "files": [
20
20
  {
21
21
  "path": "components/haze/accordion.tsx",
22
- "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Accordion, AccordionItem } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/accordion.css';\n\nexport { Accordion, AccordionItem };\nexport type { AccordionProps, AccordionItemProps } from 'haze-ui';\n",
22
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Accordion, AccordionItem } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/accordion.css';\n\nexport { Accordion, AccordionItem };\nexport type { AccordionProps, AccordionItemProps, AccordionClassNames } from 'haze-ui';\n",
23
23
  "type": "registry:ui"
24
24
  }
25
25
  ]
@@ -69,10 +69,10 @@
69
69
  {
70
70
  "name": "alert",
71
71
  "type": "registry:ui",
72
- "title": "Alert",
72
+ "title": "Alert / alertVariants",
73
73
  "description": "Inline status message box.",
74
74
  "author": "wmzy <https://github.com/wmzy>",
75
- "docs": "Inline status message box.\n\nExports: `Alert`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/alert\n```\n\nThe wrapper lands at `components/ui/haze/alert.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/alert.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
75
+ "docs": "Inline status message box.\n\nExports: `Alert`, `alertVariants`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/alert\n```\n\nThe wrapper lands at `components/ui/haze/alert.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/alert.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
76
76
  "categories": [
77
77
  "feedback"
78
78
  ],
@@ -82,7 +82,7 @@
82
82
  "files": [
83
83
  {
84
84
  "path": "components/haze/alert.tsx",
85
- "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Alert } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/alert.css';\n\nexport { Alert };\nexport type { AlertProps } from 'haze-ui';\n",
85
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Alert, alertVariants } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/alert.css';\n\nexport { Alert, alertVariants };\nexport type { AlertProps } from 'haze-ui';\n",
86
86
  "type": "registry:ui"
87
87
  }
88
88
  ]
@@ -279,10 +279,10 @@
279
279
  {
280
280
  "name": "banner",
281
281
  "type": "registry:ui",
282
- "title": "Banner",
282
+ "title": "Banner / bannerVariants",
283
283
  "description": "Dismissible top banner with info/success/warning/danger variants.",
284
284
  "author": "wmzy <https://github.com/wmzy>",
285
- "docs": "Dismissible top banner with info/success/warning/danger variants.\n\nExports: `Banner`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/banner\n```\n\nThe wrapper lands at `components/ui/haze/banner.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/banner.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
285
+ "docs": "Dismissible top banner with info/success/warning/danger variants.\n\nExports: `Banner`, `bannerVariants`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/banner\n```\n\nThe wrapper lands at `components/ui/haze/banner.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/banner.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
286
286
  "categories": [
287
287
  "feedback"
288
288
  ],
@@ -292,7 +292,7 @@
292
292
  "files": [
293
293
  {
294
294
  "path": "components/haze/banner.tsx",
295
- "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Banner } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/banner.css';\n\nexport { Banner };\nexport type { BannerProps } from 'haze-ui';\n",
295
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Banner, bannerVariants } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/banner.css';\n\nexport { Banner, bannerVariants };\nexport type { BannerProps } from 'haze-ui';\n",
296
296
  "type": "registry:ui"
297
297
  }
298
298
  ]
@@ -303,7 +303,7 @@
303
303
  "title": "Haze UI base (tokens + every component wrapper)",
304
304
  "description": "One-command setup of the whole haze-ui design system: theme tokens plus a thin wrapper for every styled component, pulled in through registryDependencies.",
305
305
  "author": "wmzy <https://github.com/wmzy>",
306
- "docs": "One command installs the entire haze-ui design system: the theme tokens\n(this item ships the token-activation wrapper) plus a thin re-export\nwrapper for every styled component — 132 registry items pulled\nin through `registryDependencies`, resolved recursively by the CLI.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/base\n```\n\nEach component wrapper lands at `components/ui/haze/<component>.tsx` and\nre-exports its component from the `haze-ui` npm package (installed\nautomatically), importing its stylesheet — no other setup is needed.\n\n## Theming\n\nThis wrapper re-exports the 'lightTheme' (or 'darkTheme'), 'spacing' and\n'typography' classes from 'haze-ui' and imports 'haze-ui/css/tokens.css'.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
306
+ "docs": "One command installs the entire haze-ui design system: the theme tokens\n(this item ships the token-activation wrapper) plus a thin re-export\nwrapper for every styled component — 153 registry items pulled\nin through `registryDependencies`, resolved recursively by the CLI.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/base\n```\n\nEach component wrapper lands at `components/ui/haze/<component>.tsx` and\nre-exports its component from the `haze-ui` npm package (installed\nautomatically), importing its stylesheet — no other setup is needed.\n\n## Theming\n\nThis wrapper re-exports the 'lightTheme' (or 'darkTheme'), 'spacing' and\n'typography' classes from 'haze-ui' and imports 'haze-ui/css/tokens.css'.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
307
307
  "categories": [
308
308
  "theme",
309
309
  "setup"
@@ -329,6 +329,7 @@
329
329
  "wmzy/haze-ui/bottom-sheet",
330
330
  "wmzy/haze-ui/breadcrumb",
331
331
  "wmzy/haze-ui/button",
332
+ "wmzy/haze-ui/button-group",
332
333
  "wmzy/haze-ui/calendar",
333
334
  "wmzy/haze-ui/card",
334
335
  "wmzy/haze-ui/carousel",
@@ -348,8 +349,11 @@
348
349
  "wmzy/haze-ui/container",
349
350
  "wmzy/haze-ui/context-menu",
350
351
  "wmzy/haze-ui/conversation-list",
352
+ "wmzy/haze-ui/copy-button",
351
353
  "wmzy/haze-ui/count-up",
354
+ "wmzy/haze-ui/countdown",
352
355
  "wmzy/haze-ui/data-table",
356
+ "wmzy/haze-ui/date-field",
353
357
  "wmzy/haze-ui/date-range-picker",
354
358
  "wmzy/haze-ui/datepicker",
355
359
  "wmzy/haze-ui/descriptions",
@@ -361,6 +365,7 @@
361
365
  "wmzy/haze-ui/dropdown-menu",
362
366
  "wmzy/haze-ui/ellipsis",
363
367
  "wmzy/haze-ui/empty",
368
+ "wmzy/haze-ui/error-boundary",
364
369
  "wmzy/haze-ui/fieldset",
365
370
  "wmzy/haze-ui/file-input",
366
371
  "wmzy/haze-ui/file-preview",
@@ -368,13 +373,17 @@
368
373
  "wmzy/haze-ui/float-button",
369
374
  "wmzy/haze-ui/form",
370
375
  "wmzy/haze-ui/grid",
376
+ "wmzy/haze-ui/heatmap",
371
377
  "wmzy/haze-ui/hover-card",
372
378
  "wmzy/haze-ui/icon",
373
379
  "wmzy/haze-ui/image",
380
+ "wmzy/haze-ui/image-crop",
374
381
  "wmzy/haze-ui/indicator",
382
+ "wmzy/haze-ui/inline-citation",
375
383
  "wmzy/haze-ui/inline-completion",
376
384
  "wmzy/haze-ui/inline-edit",
377
385
  "wmzy/haze-ui/input",
386
+ "wmzy/haze-ui/input-group",
378
387
  "wmzy/haze-ui/json-view",
379
388
  "wmzy/haze-ui/kbd",
380
389
  "wmzy/haze-ui/list",
@@ -385,20 +394,29 @@
385
394
  "wmzy/haze-ui/masonry",
386
395
  "wmzy/haze-ui/mentions",
387
396
  "wmzy/haze-ui/menu",
397
+ "wmzy/haze-ui/meter",
388
398
  "wmzy/haze-ui/model-picker",
389
399
  "wmzy/haze-ui/navigation-bar",
400
+ "wmzy/haze-ui/navigation-menu",
390
401
  "wmzy/haze-ui/number-input",
391
402
  "wmzy/haze-ui/otp-input",
392
403
  "wmzy/haze-ui/pagination",
393
404
  "wmzy/haze-ui/password-input",
405
+ "wmzy/haze-ui/phone-input",
406
+ "wmzy/haze-ui/plan",
407
+ "wmzy/haze-ui/popconfirm",
394
408
  "wmzy/haze-ui/popover",
395
409
  "wmzy/haze-ui/progress",
396
410
  "wmzy/haze-ui/prompt-input",
411
+ "wmzy/haze-ui/pull-to-refresh",
397
412
  "wmzy/haze-ui/qr-code",
413
+ "wmzy/haze-ui/queue",
398
414
  "wmzy/haze-ui/radio",
399
415
  "wmzy/haze-ui/rating",
400
416
  "wmzy/haze-ui/resizable",
401
417
  "wmzy/haze-ui/result",
418
+ "wmzy/haze-ui/rich-text-editor",
419
+ "wmzy/haze-ui/schedule",
402
420
  "wmzy/haze-ui/scroll-area",
403
421
  "wmzy/haze-ui/segmented",
404
422
  "wmzy/haze-ui/select",
@@ -409,6 +427,7 @@
409
427
  "wmzy/haze-ui/sources",
410
428
  "wmzy/haze-ui/sparkline",
411
429
  "wmzy/haze-ui/spinner",
430
+ "wmzy/haze-ui/splitter",
412
431
  "wmzy/haze-ui/spoiler",
413
432
  "wmzy/haze-ui/stat",
414
433
  "wmzy/haze-ui/status-bar",
@@ -425,6 +444,7 @@
425
444
  "wmzy/haze-ui/tag-input",
426
445
  "wmzy/haze-ui/textarea",
427
446
  "wmzy/haze-ui/thinking-indicator",
447
+ "wmzy/haze-ui/time-grid",
428
448
  "wmzy/haze-ui/time-picker",
429
449
  "wmzy/haze-ui/timeline",
430
450
  "wmzy/haze-ui/toast",
@@ -435,6 +455,7 @@
435
455
  "wmzy/haze-ui/toolbar",
436
456
  "wmzy/haze-ui/tooltip",
437
457
  "wmzy/haze-ui/tour",
458
+ "wmzy/haze-ui/trace",
438
459
  "wmzy/haze-ui/transfer",
439
460
  "wmzy/haze-ui/tree",
440
461
  "wmzy/haze-ui/tree-select",
@@ -448,7 +469,7 @@
448
469
  "files": [
449
470
  {
450
471
  "path": "components/haze/base.tsx",
451
- "content": "// haze-ui registry base — generated by scripts/generate-registry.mjs.\n//\n// Meta item: 'npx shadcn add wmzy/haze-ui/base' installs the entire\n// design system — this theme-activation wrapper plus, through\n// registryDependencies, a thin wrapper for every styled component under\n// components/ui/haze/. The implementation keeps coming from the haze-ui\n// npm package; edit the wrappers to customize.\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).\n\nimport { compact, cyanTheme, darkTheme, lightTheme, motion, motionPresets, orangeTheme, roseTheme, spacing, tealTheme, typography, violetTheme } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\n\nexport { compact, cyanTheme, darkTheme, lightTheme, motion, motionPresets, orangeTheme, roseTheme, spacing, tealTheme, typography, violetTheme };\n",
472
+ "content": "// haze-ui registry base — generated by scripts/generate-registry.mjs.\n//\n// Meta item: 'npx shadcn add wmzy/haze-ui/base' installs the entire\n// design system — this theme-activation wrapper plus, through\n// registryDependencies, a thin wrapper for every styled component under\n// components/ui/haze/. The implementation keeps coming from the haze-ui\n// npm package; edit the wrappers to customize.\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).\n\nimport { autoTheme, compact, cyanTheme, darkTheme, lightTheme, motion, motionPresets, orangeTheme, roseTheme, spacing, tealTheme, typography, violetTheme } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\n\nexport { autoTheme, compact, cyanTheme, darkTheme, lightTheme, motion, motionPresets, orangeTheme, roseTheme, spacing, tealTheme, typography, violetTheme };\n",
452
473
  "type": "registry:base"
453
474
  }
454
475
  ]
@@ -516,6 +537,27 @@
516
537
  }
517
538
  ]
518
539
  },
540
+ {
541
+ "name": "button-group",
542
+ "type": "registry:ui",
543
+ "title": "ButtonGroup / ButtonGroupSeparator / useButtonGroup",
544
+ "description": "Attached button bar: merged corners and seams, group-wide size/variant/disabled, separator sub-component.",
545
+ "author": "wmzy <https://github.com/wmzy>",
546
+ "docs": "Attached button bar: merged corners and seams, group-wide size/variant/disabled, separator sub-component.\n\nExports: `ButtonGroup`, `ButtonGroupSeparator`, `useButtonGroup`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/button-group\n```\n\nThe wrapper lands at `components/ui/haze/button-group.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/button-group.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
547
+ "categories": [
548
+ "general"
549
+ ],
550
+ "dependencies": [
551
+ "haze-ui"
552
+ ],
553
+ "files": [
554
+ {
555
+ "path": "components/haze/button-group.tsx",
556
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { ButtonGroup, ButtonGroupSeparator, useButtonGroup } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/button-group.css';\n\nexport { ButtonGroup, ButtonGroupSeparator, useButtonGroup };\nexport type { ButtonGroupProps, ButtonGroupClassNames, ButtonGroupSeparatorProps, ButtonGroupValue } from 'haze-ui';\n",
557
+ "type": "registry:ui"
558
+ }
559
+ ]
560
+ },
519
561
  {
520
562
  "name": "calendar",
521
563
  "type": "registry:ui",
@@ -532,7 +574,7 @@
532
574
  "files": [
533
575
  {
534
576
  "path": "components/haze/calendar.tsx",
535
- "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Calendar } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/calendar.css';\n\nexport { Calendar };\nexport type { CalendarProps, CalendarPickerMode, CalendarCellRender } from 'haze-ui';\n",
577
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Calendar } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/calendar.css';\n\nexport { Calendar };\nexport type { CalendarProps, CalendarPickerMode, CalendarCellRender, CalendarClassNames } from 'haze-ui';\n",
536
578
  "type": "registry:ui"
537
579
  }
538
580
  ]
@@ -540,10 +582,10 @@
540
582
  {
541
583
  "name": "card",
542
584
  "type": "registry:ui",
543
- "title": "Card",
585
+ "title": "Card / cardVariants",
544
586
  "description": "Content card with `elevated`/`outlined`/`filled` variants.",
545
587
  "author": "wmzy <https://github.com/wmzy>",
546
- "docs": "Content card with `elevated`/`outlined`/`filled` variants.\n\nExports: `Card`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/card\n```\n\nThe wrapper lands at `components/ui/haze/card.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/card.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
588
+ "docs": "Content card with `elevated`/`outlined`/`filled` variants.\n\nExports: `Card`, `cardVariants`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/card\n```\n\nThe wrapper lands at `components/ui/haze/card.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/card.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
547
589
  "categories": [
548
590
  "data-display"
549
591
  ],
@@ -553,7 +595,7 @@
553
595
  "files": [
554
596
  {
555
597
  "path": "components/haze/card.tsx",
556
- "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Card } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/card.css';\n\nexport { Card };\nexport type { CardProps } from 'haze-ui';\n",
598
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Card, cardVariants } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/card.css';\n\nexport { Card, cardVariants };\nexport type { CardProps } from 'haze-ui';\n",
557
599
  "type": "registry:ui"
558
600
  }
559
601
  ]
@@ -574,7 +616,7 @@
574
616
  "files": [
575
617
  {
576
618
  "path": "components/haze/carousel.tsx",
577
- "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Carousel, CarouselSlide } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/carousel.css';\n\nexport { Carousel, CarouselSlide };\nexport type { CarouselProps, CarouselSlideProps } from 'haze-ui';\n",
619
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Carousel, CarouselSlide } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/carousel.css';\n\nexport { Carousel, CarouselSlide };\nexport type { CarouselProps, CarouselSlideProps, CarouselHandle } from 'haze-ui';\n",
578
620
  "type": "registry:ui"
579
621
  }
580
622
  ]
@@ -595,7 +637,7 @@
595
637
  "files": [
596
638
  {
597
639
  "path": "components/haze/cascader.tsx",
598
- "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Cascader } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/cascader.css';\nimport 'haze-ui/css/spinner.css';\nimport 'haze-ui/css/virtual-list.css';\n\nexport { Cascader };\nexport type { CascaderProps, CascaderOption } from 'haze-ui';\n",
640
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Cascader } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/cascader.css';\nimport 'haze-ui/css/spinner.css';\nimport 'haze-ui/css/virtual-list.css';\n\nexport { Cascader };\nexport type { CascaderProps, CascaderOption, CascaderClassNames } from 'haze-ui';\n",
599
641
  "type": "registry:ui"
600
642
  }
601
643
  ]
@@ -616,7 +658,7 @@
616
658
  "files": [
617
659
  {
618
660
  "path": "components/haze/chart.tsx",
619
- "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Chart } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/chart.css';\n\nexport { Chart };\nexport type { ChartProps, ChartSeries, ChartType, ChartTooltipPayload, ChartTooltipEntry } from 'haze-ui';\n",
661
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Chart } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/chart.css';\nimport 'haze-ui/css/empty.css';\nimport 'haze-ui/css/spinner.css';\n\nexport { Chart };\nexport type { ChartProps, ChartClassNames, ChartSeries, ChartType, ChartTooltipPayload, ChartTooltipEntry, ChartGaugeThreshold, ChartWaffleSeries } from 'haze-ui';\n",
620
662
  "type": "registry:ui"
621
663
  }
622
664
  ]
@@ -708,10 +750,10 @@
708
750
  {
709
751
  "name": "chip",
710
752
  "type": "registry:ui",
711
- "title": "Chip",
753
+ "title": "Chip / chipVariants",
712
754
  "description": "Rounded status chip with optional icon and close button.",
713
755
  "author": "wmzy <https://github.com/wmzy>",
714
- "docs": "Rounded status chip with optional icon and close button.\n\nExports: `Chip`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/chip\n```\n\nThe wrapper lands at `components/ui/haze/chip.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/chip.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
756
+ "docs": "Rounded status chip with optional icon and close button.\n\nExports: `Chip`, `chipVariants`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/chip\n```\n\nThe wrapper lands at `components/ui/haze/chip.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/chip.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
715
757
  "categories": [
716
758
  "data-display"
717
759
  ],
@@ -721,7 +763,7 @@
721
763
  "files": [
722
764
  {
723
765
  "path": "components/haze/chip.tsx",
724
- "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Chip } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/chip.css';\n\nexport { Chip };\nexport type { ChipProps } from 'haze-ui';\n",
766
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Chip, chipVariants } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/chip.css';\n\nexport { Chip, chipVariants };\nexport type { ChipProps } from 'haze-ui';\n",
725
767
  "type": "registry:ui"
726
768
  }
727
769
  ]
@@ -784,7 +826,7 @@
784
826
  "files": [
785
827
  {
786
828
  "path": "components/haze/color-picker.tsx",
787
- "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { ColorPicker, ColorPickerCore } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/color-picker.css';\n\nexport { ColorPicker, ColorPickerCore };\nexport type { ColorPickerProps, ColorPickerCoreProps } from 'haze-ui';\n",
829
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { ColorPicker, ColorPickerCore } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/color-picker.css';\n\nexport { ColorPicker, ColorPickerCore };\nexport type { ColorPickerProps, ColorPickerCoreProps, ColorPickerPreset } from 'haze-ui';\n",
788
830
  "type": "registry:ui"
789
831
  }
790
832
  ]
@@ -826,7 +868,7 @@
826
868
  "files": [
827
869
  {
828
870
  "path": "components/haze/command.tsx",
829
- "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Command, CommandInput, CommandList, CommandItem, CommandGroup, CommandDialog } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/command.css';\nimport 'haze-ui/css/dialog.css';\nimport 'haze-ui/css/kbd.css';\n\nexport { Command, CommandInput, CommandList, CommandItem, CommandGroup, CommandDialog };\nexport type { CommandProps, CommandInputProps, CommandListProps, CommandItemProps, CommandGroupProps, CommandDialogProps } from 'haze-ui';\n",
871
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Command, CommandInput, CommandList, CommandItem, CommandGroup, CommandDialog } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/command.css';\nimport 'haze-ui/css/dialog.css';\nimport 'haze-ui/css/kbd.css';\nimport 'haze-ui/css/virtual-list.css';\n\nexport { Command, CommandInput, CommandList, CommandItem, CommandGroup, CommandDialog };\nexport type { CommandProps, CommandInputProps, CommandListProps, CommandItemProps, CommandGroupProps, CommandDialogProps, CommandListVirtualizedConfig } from 'haze-ui';\n",
830
872
  "type": "registry:ui"
831
873
  }
832
874
  ]
@@ -889,7 +931,7 @@
889
931
  "files": [
890
932
  {
891
933
  "path": "components/haze/context-menu.tsx",
892
- "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { ContextMenu, ContextMenuTrigger, ContextMenuContent, ContextMenuItem, ContextMenuSeparator } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/context-menu.css';\n\nexport { ContextMenu, ContextMenuTrigger, ContextMenuContent, ContextMenuItem, ContextMenuSeparator };\nexport type { ContextMenuProps, ContextMenuTriggerProps, ContextMenuContentProps, ContextMenuItemProps, ContextMenuSeparatorProps } from 'haze-ui';\n",
934
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { ContextMenu, ContextMenuTrigger, ContextMenuContent, ContextMenuItem, ContextMenuSeparator } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/context-menu.css';\n\nexport { ContextMenu, ContextMenuTrigger, ContextMenuContent, ContextMenuItem, ContextMenuSeparator };\nexport type { ContextMenuProps, ContextMenuClassNames, ContextMenuTriggerProps, ContextMenuContentProps, ContextMenuItemProps, ContextMenuSeparatorProps } from 'haze-ui';\n",
893
935
  "type": "registry:ui"
894
936
  }
895
937
  ]
@@ -915,6 +957,27 @@
915
957
  }
916
958
  ]
917
959
  },
960
+ {
961
+ "name": "copy-button",
962
+ "type": "registry:ui",
963
+ "title": "CopyButton / Snippet / copyButtonIconSizes",
964
+ "description": "Copy-to-clipboard button (Button skin, useClipboard plumbing, copied-state feedback with SR announcement) plus Snippet: the inline mono code chip with a docked copy button.",
965
+ "author": "wmzy <https://github.com/wmzy>",
966
+ "docs": "Copy-to-clipboard button (Button skin, useClipboard plumbing, copied-state feedback with SR announcement) plus Snippet: the inline mono code chip with a docked copy button.\n\nExports: `CopyButton`, `Snippet`, `copyButtonIconSizes`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/copy-button\n```\n\nThe wrapper lands at `components/ui/haze/copy-button.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/copy-button.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
967
+ "categories": [
968
+ "general"
969
+ ],
970
+ "dependencies": [
971
+ "haze-ui"
972
+ ],
973
+ "files": [
974
+ {
975
+ "path": "components/haze/copy-button.tsx",
976
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { CopyButton, Snippet, copyButtonIconSizes } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/copy-button.css';\nimport 'haze-ui/css/button.css';\nimport 'haze-ui/css/spinner.css';\nimport 'haze-ui/css/visually-hidden.css';\n\nexport { CopyButton, Snippet, copyButtonIconSizes };\nexport type { CopyButtonProps, CopyButtonClassNames, SnippetProps, SnippetClassNames } from 'haze-ui';\n",
977
+ "type": "registry:ui"
978
+ }
979
+ ]
980
+ },
918
981
  {
919
982
  "name": "count-up",
920
983
  "type": "registry:ui",
@@ -936,6 +999,122 @@
936
999
  }
937
1000
  ]
938
1001
  },
1002
+ {
1003
+ "name": "countdown",
1004
+ "type": "registry:ui",
1005
+ "title": "Countdown",
1006
+ "description": "Deadline countdown: `value` timestamp or Date, setTimeout-chain ticks aligned to second boundaries (no interval drift), `onFinish` fires once, adaptive `1d hh:mm:ss` / `hh:mm:ss` default format with `format`/`render` escape hatches.",
1007
+ "author": "wmzy <https://github.com/wmzy>",
1008
+ "docs": "Deadline countdown: `value` timestamp or Date, setTimeout-chain ticks aligned to second boundaries (no interval drift), `onFinish` fires once, adaptive `1d hh:mm:ss` / `hh:mm:ss` default format with `format`/`render` escape hatches.\n\nExports: `Countdown`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/countdown\n```\n\nThe wrapper lands at `components/ui/haze/countdown.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/countdown.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
1009
+ "categories": [
1010
+ "general"
1011
+ ],
1012
+ "dependencies": [
1013
+ "haze-ui"
1014
+ ],
1015
+ "files": [
1016
+ {
1017
+ "path": "components/haze/countdown.tsx",
1018
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Countdown } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/countdown.css';\n\nexport { Countdown };\nexport type { CountdownProps, CountdownParts } from 'haze-ui';\n",
1019
+ "type": "registry:ui"
1020
+ }
1021
+ ]
1022
+ },
1023
+ {
1024
+ "name": "crud-block",
1025
+ "type": "registry:block",
1026
+ "title": "CRUD block (Tree master → DataTable detail + Dialog form + Toast)",
1027
+ "description": "Master–detail CRUD over local state: a `Tree` picks the team, the `DataTable` lists its pipelines, a `Dialog` hosts the zod-validated create/edit `Form`, `ConfirmDialog` guards deletes and `useToast` reports every mutation.",
1028
+ "author": "wmzy <https://github.com/wmzy>",
1029
+ "docs": "Master–detail CRUD over local state: a `Tree` picks the team, the `DataTable` lists its pipelines, a `Dialog` hosts the zod-validated create/edit `Form`, `ConfirmDialog` guards deletes and `useToast` reports every mutation.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/crud-block\n```\n\nThe full-page source lands at `components/block/haze/crud-block.tsx` (via the `@block/` target placeholder from `components.json`) — vendored, so you own and edit it. Component imports are rewritten to the `haze-ui` npm package, which is installed automatically together with `zod` and `react-use-control`.\n\nThe file imports the stylesheet of every component it renders (`haze-ui/css/tokens.css` + 21 component css files), so no extra stylesheet setup is needed.\n\n## Theming\n\nThis wrapper re-exports the 'lightTheme' (or 'darkTheme'), 'spacing' and\n'typography' classes from 'haze-ui' and imports 'haze-ui/css/tokens.css'.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nLive preview and source: https://wmzy.github.io/haze-ui/#/blocks — https://github.com/wmzy/haze-ui/tree/main/registry",
1030
+ "categories": [
1031
+ "blocks",
1032
+ "data-display",
1033
+ "form"
1034
+ ],
1035
+ "dependencies": [
1036
+ "haze-ui",
1037
+ "zod",
1038
+ "react-use-control"
1039
+ ],
1040
+ "registryDependencies": [
1041
+ "wmzy/haze-ui/tree",
1042
+ "wmzy/haze-ui/data-table",
1043
+ "wmzy/haze-ui/dialog",
1044
+ "wmzy/haze-ui/confirm-dialog",
1045
+ "wmzy/haze-ui/toast",
1046
+ "wmzy/haze-ui/form",
1047
+ "wmzy/haze-ui/input",
1048
+ "wmzy/haze-ui/select",
1049
+ "wmzy/haze-ui/button",
1050
+ "wmzy/haze-ui/badge",
1051
+ "wmzy/haze-ui/segmented",
1052
+ "wmzy/haze-ui/kbd",
1053
+ "wmzy/haze-ui/checkbox",
1054
+ "wmzy/haze-ui/dropdown-menu",
1055
+ "wmzy/haze-ui/empty",
1056
+ "wmzy/haze-ui/pagination",
1057
+ "wmzy/haze-ui/skeleton",
1058
+ "wmzy/haze-ui/spinner",
1059
+ "wmzy/haze-ui/table",
1060
+ "wmzy/haze-ui/virtual-list",
1061
+ "wmzy/haze-ui/visually-hidden"
1062
+ ],
1063
+ "files": [
1064
+ {
1065
+ "path": "components/block/haze/crud-block.tsx",
1066
+ "content": "// haze-ui registry block — generated by scripts/generate-registry.mjs\n// from src/views/Blocks/blocks/CrudBlock.tsx.\n//\n// Unlike the component items (thin re-export wrappers over the haze-ui npm\n// package), a block is VENDORED source: a full page you own and edit.\n// The component imports are rewritten from the docs site's '@/lib' alias\n// to the published 'haze-ui' package and every stylesheet of the page's\n// component closure is imported below, so the file is self-contained.\n// npm dependencies beyond haze-ui: zod, react-use-control.\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).\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/badge.css';\nimport 'haze-ui/css/button.css';\nimport 'haze-ui/css/checkbox.css';\nimport 'haze-ui/css/confirm-dialog.css';\nimport 'haze-ui/css/data-table.css';\nimport 'haze-ui/css/dialog.css';\nimport 'haze-ui/css/dropdown-menu.css';\nimport 'haze-ui/css/empty.css';\nimport 'haze-ui/css/form.css';\nimport 'haze-ui/css/input.css';\nimport 'haze-ui/css/kbd.css';\nimport 'haze-ui/css/pagination.css';\nimport 'haze-ui/css/segmented.css';\nimport 'haze-ui/css/select.css';\nimport 'haze-ui/css/skeleton.css';\nimport 'haze-ui/css/spinner.css';\nimport 'haze-ui/css/table.css';\nimport 'haze-ui/css/toast.css';\nimport 'haze-ui/css/tree.css';\nimport 'haze-ui/css/virtual-list.css';\nimport 'haze-ui/css/visually-hidden.css';\n\nimport type { DataTableColumnDef, TreeNodeData } from 'haze-ui';\n\nimport { useCallback, useMemo, useRef, useState } from 'react';\nimport { useControl } from 'react-use-control';\nimport { z } from 'zod';\n\nimport {\n Badge,\n Button,\n ConfirmDialog,\n DataTable,\n Dialog,\n Form,\n FormItem,\n InputCore,\n Kbd,\n Option,\n Segmented,\n SelectCore,\n ToastContainer,\n Tree,\n useForm,\n standardSchemaFormValidator,\n useToast,\n} from 'haze-ui';\n\n/*\n * CRUD block: the master–detail pattern over local state — a Tree picks\n * the team (group nodes filter to their subtree), the DataTable lists\n * that team's pipelines with the toolbar strip (New + density Segmented\n * + keyboard-nav copy) and the `size` density prop, Dialog hosts a\n * zod-validated Form for create/edit (remounted per open so\n * initialValues reload the record), ConfirmDialog guards deletes and\n * useToast reports every mutation. ToastContainer wraps the block so\n * toasts land in the demo viewport. Layout glue is inline styles over\n * --haze-* tokens only.\n */\n\ntype Schedule = '15m' | 'hourly' | 'daily';\ntype PipelineStatus = 'healthy' | 'degraded' | 'paused';\n\ntype Pipeline = {\n id: string;\n name: string;\n team: string;\n owner: string;\n schedule: Schedule;\n status: PipelineStatus;\n};\n\ntype PipelineFormValues = {\n name: string;\n owner: string;\n schedule: Schedule | '';\n};\n\nconst TEAM_TREE: TreeNodeData[] = [\n {\n key: 'all',\n title: 'All teams',\n children: [\n {\n key: 'eng',\n title: 'Engineering',\n children: [\n { key: 'eng-fe', title: 'Frontend' },\n { key: 'eng-plat', title: 'Platform' },\n { key: 'eng-data', title: 'Data' },\n ],\n },\n {\n key: 'growth',\n title: 'Growth',\n children: [\n { key: 'growth-lifecycle', title: 'Lifecycle' },\n { key: 'growth-ads', title: 'Ads' },\n ],\n },\n {\n key: 'ops',\n title: 'Operations',\n children: [\n { key: 'ops-alerts', title: 'Alerting' },\n { key: 'ops-freight', title: 'Freight' },\n ],\n },\n ],\n },\n];\n\n/** node key → leaf keys in its subtree ('eng' → its three teams). */\nfunction leafKeysOf(nodes: TreeNodeData[], into: string[]): string[] {\n for (const node of nodes) {\n if (node.children && node.children.length > 0) {\n leafKeysOf(node.children, into);\n } else {\n into.push(node.key);\n }\n }\n return into;\n}\n\nconst TEAM_SCOPE: Record<string, string[]> = {\n all: leafKeysOf(TEAM_TREE, []),\n};\nfunction collectScopes(nodes: TreeNodeData[]): void {\n for (const node of nodes) {\n TEAM_SCOPE[node.key] =\n node.children && node.children.length > 0\n ? leafKeysOf(node.children, [])\n : [node.key];\n if (node.children) collectScopes(node.children);\n }\n}\ncollectScopes(TEAM_TREE);\n\nconst INITIAL_PIPELINES: Pipeline[] = [\n { id: 'p-01', name: 'Checkout event tap', team: 'eng-fe', owner: 'ada@nimbus.dev', schedule: '15m', status: 'healthy' },\n { id: 'p-02', name: 'Funnel pageviews', team: 'eng-fe', owner: 'grace@nimbus.dev', schedule: 'hourly', status: 'healthy' },\n { id: 'p-03', name: 'Gateway request log', team: 'eng-plat', owner: 'kwame@nimbus.dev', schedule: '15m', status: 'degraded' },\n { id: 'p-04', name: 'Deploy markers', team: 'eng-plat', owner: 'rina@nimbus.dev', schedule: 'hourly', status: 'healthy' },\n { id: 'p-05', name: 'Warehouse sync', team: 'eng-data', owner: 'tomas@nimbus.dev', schedule: 'daily', status: 'healthy' },\n { id: 'p-06', name: 'Backfill queue', team: 'eng-data', owner: 'tomas@nimbus.dev', schedule: 'hourly', status: 'paused' },\n { id: 'p-07', name: 'Trial activation', team: 'growth-lifecycle', owner: 'yuki@nimbus.dev', schedule: 'daily', status: 'healthy' },\n { id: 'p-08', name: 'Attribution joins', team: 'growth-ads', owner: 'omar@nimbus.dev', schedule: 'hourly', status: 'degraded' },\n { id: 'p-09', name: 'Anomaly detector', team: 'ops-alerts', owner: 'rina@nimbus.dev', schedule: '15m', status: 'healthy' },\n { id: 'p-10', name: 'Shipment tracker', team: 'ops-freight', owner: 'leo@nimbus.dev', schedule: 'hourly', status: 'healthy' },\n];\n\nconst pipelineSchema = z.object({\n name: z.string().min(2, 'Name must be at least 2 characters'),\n owner: z.email('Enter a valid email address'),\n schedule: z.enum(['15m', 'hourly', 'daily'], { message: 'Pick a schedule' }),\n});\n\nconst pipelineValidator =\n standardSchemaFormValidator<PipelineFormValues>(pipelineSchema);\n\nfunction statusBadge(status: PipelineStatus) {\n const color =\n status === 'healthy' ? 'success' : status === 'degraded' ? 'warning' : 'default';\n return <Badge color={color}>{status}</Badge>;\n}\n\nfunction scheduleBadge(schedule: Schedule) {\n return <Badge color={schedule === '15m' ? 'info' : 'default'}>{schedule}</Badge>;\n}\n\n/**\n * One dialog form, fresh per open: the parent remounts it (key=session),\n * so `initialValues` alone loads the record being edited.\n */\nfunction PipelineForm({\n pipeline,\n onCancel,\n onSubmit,\n}: {\n pipeline: Pipeline | null;\n onCancel: () => void;\n onSubmit: (values: PipelineFormValues) => void;\n}) {\n const form = useForm<PipelineFormValues>({\n initialValues: pipeline\n ? { name: pipeline.name, owner: pipeline.owner, schedule: pipeline.schedule }\n : { name: '', owner: '', schedule: '' },\n validate: pipelineValidator,\n validateDeps: ['name', 'owner', 'schedule'],\n });\n\n return (\n <Form form={form} onValidSubmit={onSubmit}>\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: 'var(--haze-space-4)',\n }}\n >\n <FormItem\n form={form}\n name='name'\n label='Pipeline name'\n rules={{ required: true }}\n input={InputCore}\n placeholder='Checkout event tap'\n />\n <FormItem\n form={form}\n name='owner'\n label='Owner email'\n rules={{ required: true }}\n input={InputCore}\n type='email'\n placeholder='owner@nimbus.dev'\n />\n <FormItem\n form={form}\n name='schedule'\n label='Schedule'\n rules={{ required: true }}\n input={SelectCore}\n >\n <Option value=''>Pick a schedule…</Option>\n <Option value='15m'>Every 15 minutes</Option>\n <Option value='hourly'>Hourly</Option>\n <Option value='daily'>Daily</Option>\n </FormItem>\n <div\n style={{\n display: 'flex',\n justifyContent: 'flex-end',\n gap: 'var(--haze-space-2)',\n }}\n >\n {/* Button's native `type` is pinned to 'button' — submit through\n the owning form so the zod chain runs first. */}\n <Button onClick={(e) => e.currentTarget.form?.requestSubmit()}>\n Save pipeline\n </Button>\n <Button variant='ghost' onClick={onCancel}>\n Cancel\n </Button>\n </div>\n </div>\n </Form>\n );\n}\n\nfunction CrudScreen() {\n const toast = useToast();\n\n // Master selection, dialog/confirm open and density are user-facing —\n // Controls all the way down.\n const [selectedKeys, setSelectedKeys, selectedCtrl] = useControl<string[]>(\n undefined,\n ['all']\n );\n const [density, setDensity, densityCtrl] = useControl(undefined, 'md');\n const [, setDialogOpen, dialogOpenCtrl] = useControl(undefined, false);\n const [, setConfirmOpen, confirmOpenCtrl] = useControl(undefined, false);\n // Uncontrolled-with-default: seeds the initial expansion, then the\n // tree owns the toggling.\n const [, , expandedCtrl] = useControl<string[]>(undefined, ['all']);\n\n const [pipelines, setPipelines] = useState(INITIAL_PIPELINES);\n const [editing, setEditing] = useState<Pipeline | null>(null);\n const [session, setSession] = useState(0);\n const [pendingDelete, setPendingDelete] = useState<Pipeline | null>(null);\n const nextIdRef = useRef(INITIAL_PIPELINES.length + 1);\n\n const scope = useMemo(\n () => TEAM_SCOPE[selectedKeys[0] ?? 'all'] ?? [],\n [selectedKeys]\n );\n const rows = useMemo(\n () => pipelines.filter((pipeline) => scope.includes(pipeline.team)),\n [pipelines, scope]\n );\n\n const openCreate = useCallback(() => {\n setEditing(null);\n setSession((s) => s + 1);\n setDialogOpen(true);\n }, [setDialogOpen]);\n\n const openEdit = useCallback(\n (pipeline: Pipeline) => {\n setEditing(pipeline);\n setSession((s) => s + 1);\n setDialogOpen(true);\n },\n [setDialogOpen]\n );\n\n const closeDialog = useCallback(() => setDialogOpen(false), [setDialogOpen]);\n\n const handleSubmit = (values: PipelineFormValues) => {\n // onValidSubmit implies the zod schema passed — schedule is a Schedule.\n if (editing) {\n setPipelines((prev) =>\n prev.map((pipeline) =>\n pipeline.id === editing.id\n ? { ...pipeline, ...values, schedule: values.schedule as Schedule }\n : pipeline\n )\n );\n toast(`Updated ${values.name}`, { variant: 'success' });\n } else {\n const id = `p-${String(nextIdRef.current).padStart(2, '0')}`;\n nextIdRef.current += 1;\n setPipelines((prev) => [\n ...prev,\n {\n id,\n team: scope[0] ?? 'eng-fe',\n owner: values.owner,\n name: values.name,\n schedule: values.schedule as Schedule,\n status: 'healthy',\n },\n ]);\n toast(`Created ${values.name}`, { variant: 'success' });\n }\n closeDialog();\n };\n\n const askDelete = useCallback(\n (pipeline: Pipeline) => {\n setPendingDelete(pipeline);\n setConfirmOpen(true);\n },\n [setConfirmOpen]\n );\n\n const closeConfirm = useCallback(() => {\n setConfirmOpen(false);\n setPendingDelete(null);\n }, [setConfirmOpen]);\n\n const confirmDelete = () => {\n if (!pendingDelete) return;\n setPipelines((prev) => prev.filter((p) => p.id !== pendingDelete.id));\n toast(`Deleted ${pendingDelete.name}`, { variant: 'success' });\n setPendingDelete(null);\n };\n\n const columns = useMemo<DataTableColumnDef<Pipeline>[]>(\n () => [\n {\n accessorKey: 'name',\n header: 'Pipeline',\n cell: (info) => <strong>{info.getValue() as string}</strong>,\n },\n { accessorKey: 'owner', header: 'Owner' },\n {\n accessorKey: 'schedule',\n header: 'Schedule',\n cell: (info) => scheduleBadge(info.getValue() as Schedule),\n },\n {\n accessorKey: 'status',\n header: 'Status',\n cell: (info) => statusBadge(info.getValue() as PipelineStatus),\n },\n {\n id: 'actions',\n header: '',\n cell: ({ row }) => (\n <div\n style={{\n display: 'flex',\n justifyContent: 'flex-end',\n gap: 'var(--haze-space-1)',\n }}\n >\n <Button size='sm' variant='ghost' onClick={() => openEdit(row.original)}>\n Edit\n </Button>\n <Button size='sm' variant='ghost' onClick={() => askDelete(row.original)}>\n Delete\n </Button>\n </div>\n ),\n meta: { sortable: false },\n },\n ],\n [openEdit, askDelete]\n );\n\n return (\n <div\n data-slot='crud-block'\n style={{\n display: 'flex',\n height: '100%',\n minHeight: '480px',\n fontFamily: 'var(--haze-font-sans)',\n color: 'var(--haze-color-text)',\n }}\n >\n <aside\n data-slot='crud-tree'\n aria-label='Pipelines by team'\n style={{\n width: '232px',\n flexShrink: 0,\n display: 'flex',\n flexDirection: 'column',\n padding: 'var(--haze-space-3)',\n borderInlineEnd: '1px solid var(--haze-color-border)',\n background: 'var(--haze-color-bg-subtle)',\n }}\n >\n <div\n style={{\n fontSize: 'var(--haze-text-xs)',\n fontWeight: 'var(--haze-weight-semibold)',\n letterSpacing: '0.04em',\n textTransform: 'uppercase',\n color: 'var(--haze-color-text-muted)',\n margin: '0 0 var(--haze-space-2) var(--haze-space-2)',\n }}\n >\n Teams\n </div>\n <Tree\n treeData={TEAM_TREE}\n selectedKeys={selectedCtrl}\n expandedKeys={expandedCtrl}\n onSelect={(keys) =>\n setSelectedKeys(keys.length > 0 ? [keys[keys.length - 1]!] : [])\n }\n blockNode\n />\n </aside>\n\n <main\n data-slot='crud-detail'\n style={{\n flex: 1,\n minWidth: 0,\n display: 'flex',\n flexDirection: 'column',\n gap: 'var(--haze-space-3)',\n padding: 'var(--haze-space-4)',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: 'var(--haze-space-3)' }}>\n <h2\n style={{\n margin: 0,\n fontSize: 'var(--haze-text-lg)',\n fontWeight: 'var(--haze-weight-semibold)',\n }}\n >\n Event pipelines\n </h2>\n <Badge color='info'>{rows.length}</Badge>\n <span style={{ flex: 1 }} />\n <span\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 'var(--haze-space-1)',\n fontSize: 'var(--haze-text-xs)',\n color: 'var(--haze-color-text-muted)',\n }}\n >\n Keyboard: <Kbd size='sm'>Tab</Kbd> reaches a cell,\n <Kbd size='sm'>←</Kbd>\n <Kbd size='sm'>↑</Kbd>\n <Kbd size='sm'>↓</Kbd>\n <Kbd size='sm'>→</Kbd> roam,\n <Kbd size='sm'>Enter</Kbd> sorts a header\n </span>\n </div>\n\n <DataTable\n columns={columns}\n data={rows}\n getRowId={(row) => row.id}\n sortable\n size={density as 'sm' | 'md' | 'lg'}\n toolbar={\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 'var(--haze-space-2)',\n flexWrap: 'wrap',\n }}\n >\n <Button size='sm' onClick={openCreate}>\n New pipeline\n </Button>\n <Segmented\n size='sm'\n options={[\n { value: 'sm', label: 'S' },\n { value: 'md', label: 'M' },\n { value: 'lg', label: 'L' },\n ]}\n value={densityCtrl}\n onChange={setDensity}\n aria-label='Table density'\n />\n </div>\n }\n />\n </main>\n\n <Dialog\n open={dialogOpenCtrl}\n onClose={closeDialog}\n title={editing ? 'Edit pipeline' : 'New pipeline'}\n >\n <PipelineForm\n key={session}\n pipeline={editing}\n onCancel={closeDialog}\n onSubmit={handleSubmit}\n />\n </Dialog>\n <ConfirmDialog\n open={confirmOpenCtrl}\n title='Delete pipeline'\n confirmText='Delete'\n variant='danger'\n onConfirm={confirmDelete}\n onCancel={closeConfirm}\n onClose={closeConfirm}\n >\n Delete {pendingDelete?.name}? Its collectors stop ingesting immediately —\n there is no undo.\n </ConfirmDialog>\n </div>\n );\n}\n\nexport default function CrudBlock() {\n return (\n <ToastContainer>\n <CrudScreen />\n </ToastContainer>\n );\n}\n",
1067
+ "type": "registry:block"
1068
+ }
1069
+ ]
1070
+ },
1071
+ {
1072
+ "name": "dashboard-block",
1073
+ "type": "registry:block",
1074
+ "title": "Dashboard block (AppShell + Sidebar + Stat row + DataTable)",
1075
+ "description": "SaaS admin starter: `AppShell` + `Sidebar` navigation, `Breadcrumb` trail, a `Stat` card row and a `DataTable` with toolbar strip (density `Segmented` + `dataTableToCsv` export), client-side pagination and column toggling.",
1076
+ "author": "wmzy <https://github.com/wmzy>",
1077
+ "docs": "SaaS admin starter: `AppShell` + `Sidebar` navigation, `Breadcrumb` trail, a `Stat` card row and a `DataTable` with toolbar strip (density `Segmented` + `dataTableToCsv` export), client-side pagination and column toggling.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/dashboard-block\n```\n\nThe full-page source lands at `components/block/haze/dashboard-block.tsx` (via the `@block/` target placeholder from `components.json`) — vendored, so you own and edit it. Component imports are rewritten to the `haze-ui` npm package, which is installed automatically together with `react-use-control`.\n\nThe file imports the stylesheet of every component it renders (`haze-ui/css/tokens.css` + 21 component css files), so no extra stylesheet setup is needed.\n\n## Theming\n\nThis wrapper re-exports the 'lightTheme' (or 'darkTheme'), 'spacing' and\n'typography' classes from 'haze-ui' and imports 'haze-ui/css/tokens.css'.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nLive preview and source: https://wmzy.github.io/haze-ui/#/blocks — https://github.com/wmzy/haze-ui/tree/main/registry",
1078
+ "categories": [
1079
+ "blocks",
1080
+ "dashboard",
1081
+ "data-display"
1082
+ ],
1083
+ "dependencies": [
1084
+ "haze-ui",
1085
+ "react-use-control"
1086
+ ],
1087
+ "registryDependencies": [
1088
+ "wmzy/haze-ui/app-shell",
1089
+ "wmzy/haze-ui/sidebar",
1090
+ "wmzy/haze-ui/tooltip",
1091
+ "wmzy/haze-ui/stat",
1092
+ "wmzy/haze-ui/data-table",
1093
+ "wmzy/haze-ui/checkbox",
1094
+ "wmzy/haze-ui/dropdown-menu",
1095
+ "wmzy/haze-ui/empty",
1096
+ "wmzy/haze-ui/input",
1097
+ "wmzy/haze-ui/pagination",
1098
+ "wmzy/haze-ui/skeleton",
1099
+ "wmzy/haze-ui/table",
1100
+ "wmzy/haze-ui/virtual-list",
1101
+ "wmzy/haze-ui/breadcrumb",
1102
+ "wmzy/haze-ui/button",
1103
+ "wmzy/haze-ui/badge",
1104
+ "wmzy/haze-ui/segmented",
1105
+ "wmzy/haze-ui/select",
1106
+ "wmzy/haze-ui/chip",
1107
+ "wmzy/haze-ui/spinner",
1108
+ "wmzy/haze-ui/visually-hidden"
1109
+ ],
1110
+ "files": [
1111
+ {
1112
+ "path": "components/block/haze/dashboard-block.tsx",
1113
+ "content": "// haze-ui registry block — generated by scripts/generate-registry.mjs\n// from src/views/Blocks/blocks/DashboardBlock.tsx.\n//\n// Unlike the component items (thin re-export wrappers over the haze-ui npm\n// package), a block is VENDORED source: a full page you own and edit.\n// The component imports are rewritten from the docs site's '@/lib' alias\n// to the published 'haze-ui' package and every stylesheet of the page's\n// component closure is imported below, so the file is self-contained.\n// npm dependencies beyond haze-ui: react-use-control.\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).\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/app-shell.css';\nimport 'haze-ui/css/badge.css';\nimport 'haze-ui/css/breadcrumb.css';\nimport 'haze-ui/css/button.css';\nimport 'haze-ui/css/checkbox.css';\nimport 'haze-ui/css/chip.css';\nimport 'haze-ui/css/data-table.css';\nimport 'haze-ui/css/dropdown-menu.css';\nimport 'haze-ui/css/empty.css';\nimport 'haze-ui/css/input.css';\nimport 'haze-ui/css/pagination.css';\nimport 'haze-ui/css/segmented.css';\nimport 'haze-ui/css/select.css';\nimport 'haze-ui/css/sidebar.css';\nimport 'haze-ui/css/skeleton.css';\nimport 'haze-ui/css/spinner.css';\nimport 'haze-ui/css/stat.css';\nimport 'haze-ui/css/table.css';\nimport 'haze-ui/css/tooltip.css';\nimport 'haze-ui/css/virtual-list.css';\nimport 'haze-ui/css/visually-hidden.css';\n\nimport type { DataTableColumnDef } from 'haze-ui';\n\nimport { useControl } from 'react-use-control';\n\nimport {\n AppShell,\n Badge,\n Breadcrumb,\n BreadcrumbItem,\n Button,\n DataTable,\n Option,\n Segmented,\n Select,\n Sidebar,\n SidebarGroup,\n SidebarItem,\n Stat,\n StatGroup,\n} from 'haze-ui';\nimport { dataTableToCsv } from 'haze-ui';\n\n/*\n * Dashboard block: AppShell + Sidebar navigation, a Breadcrumb trail, a\n * Stat card row and a DataTable with the toolbar strip (density Segmented\n * + CSV export), client-side pagination and column toggling. Fictional\n * SaaS metrics — every visual value reads a --haze-* token so the block\n * re-themes with the site.\n */\n\ntype Plan = 'free' | 'pro' | 'enterprise';\ntype WorkspaceStatus = 'healthy' | 'trial' | 'at risk';\n\ntype WorkspaceRow = {\n id: string;\n name: string;\n plan: Plan;\n seats: number;\n events: number;\n mrr: number;\n status: WorkspaceStatus;\n};\n\nconst WORKSPACES: WorkspaceRow[] = [\n { id: 'w-101', name: 'Acme Robotics', plan: 'enterprise', seats: 42, events: 184_230, mrr: 1890, status: 'healthy' },\n { id: 'w-102', name: 'Lumen Studio', plan: 'pro', seats: 12, events: 96_410, mrr: 480, status: 'healthy' },\n { id: 'w-103', name: 'Ferrite Labs', plan: 'pro', seats: 9, events: 71_980, mrr: 360, status: 'at risk' },\n { id: 'w-104', name: 'Harbor & Co', plan: 'free', seats: 3, events: 12_004, mrr: 0, status: 'trial' },\n { id: 'w-105', name: 'Northwind Freight', plan: 'enterprise', seats: 65, events: 268_750, mrr: 2925, status: 'healthy' },\n { id: 'w-106', name: 'Quanta Health', plan: 'pro', seats: 18, events: 122_866, mrr: 720, status: 'healthy' },\n { id: 'w-107', name: 'Bright Meadow', plan: 'free', seats: 2, events: 8_312, mrr: 0, status: 'trial' },\n { id: 'w-108', name: 'Kestrel Analytics', plan: 'pro', seats: 14, events: 101_540, mrr: 560, status: 'at risk' },\n { id: 'w-109', name: 'Orbit Logistics', plan: 'enterprise', seats: 51, events: 210_390, mrr: 2295, status: 'healthy' },\n { id: 'w-110', name: 'Pinewood Press', plan: 'free', seats: 5, events: 19_748, mrr: 0, status: 'trial' },\n { id: 'w-111', name: 'Solstice Energy', plan: 'pro', seats: 21, events: 143_605, mrr: 840, status: 'healthy' },\n { id: 'w-112', name: 'Umbra Games', plan: 'pro', seats: 11, events: 88_120, mrr: 440, status: 'at risk' },\n];\n\nconst planBadge = (plan: Plan) => {\n const color = plan === 'enterprise' ? 'success' : plan === 'pro' ? 'info' : 'default';\n return <Badge color={color}>{plan}</Badge>;\n};\n\nconst statusBadge = (status: WorkspaceStatus) => {\n const color = status === 'healthy' ? 'success' : status === 'trial' ? 'default' : 'warning';\n return <Badge color={color}>{status}</Badge>;\n};\n\nconst columns: DataTableColumnDef<WorkspaceRow>[] = [\n { accessorKey: 'name', header: 'Workspace' },\n { accessorKey: 'plan', header: 'Plan', cell: (info) => planBadge(info.getValue() as Plan) },\n { accessorKey: 'seats', header: 'Seats' },\n {\n accessorKey: 'events',\n header: 'Events / mo',\n cell: (info) => (info.getValue() as number).toLocaleString('en-US'),\n },\n {\n accessorKey: 'mrr',\n header: 'MRR',\n cell: (info) => `$${(info.getValue() as number).toLocaleString('en-US')}`,\n },\n { accessorKey: 'status', header: 'Status', cell: (info) => statusBadge(info.getValue() as WorkspaceStatus) },\n];\n\n/** Serialize the current rows through the table's own csv helper. */\nfunction exportCsv(): void {\n const csv = dataTableToCsv(WORKSPACES, columns);\n const url = URL.createObjectURL(new Blob([csv], { type: 'text/csv;charset=utf-8' }));\n const anchor = document.createElement('a');\n anchor.href = url;\n anchor.download = 'nimbus-workspaces.csv';\n document.body.appendChild(anchor);\n anchor.click();\n anchor.remove();\n URL.revokeObjectURL(url);\n}\n\nfunction DashboardSidebar() {\n return (\n <Sidebar>\n <SidebarGroup title='Workspace'>\n <SidebarItem active>Overview</SidebarItem>\n <SidebarItem>Events</SidebarItem>\n <SidebarItem>Funnels</SidebarItem>\n <SidebarItem>Alerts</SidebarItem>\n </SidebarGroup>\n <SidebarGroup title='Account'>\n <SidebarItem>Billing</SidebarItem>\n <SidebarItem>Members</SidebarItem>\n <SidebarItem>Settings</SidebarItem>\n </SidebarGroup>\n </Sidebar>\n );\n}\n\nexport default function DashboardBlock() {\n // Density switcher: one control feeds the Segmented and the DataTable\n // `size` prop (the ControlOrValue idiom — Segmented speaks plain strings).\n const [density, setDensity, densityCtrl] = useControl(undefined, 'md');\n\n return (\n <div\n data-slot='dashboard-block'\n style={{ height: '100%', display: 'flex', flexDirection: 'column' }}\n >\n <AppShell\n header={\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 'var(--haze-space-3)',\n padding: '0 var(--haze-space-3)',\n }}\n >\n <strong style={{ color: 'var(--haze-color-primary)' }}>Nimbus Console</strong>\n <span style={{ flex: 1 }} />\n <Select size='sm' defaultValue='acme' aria-label='Workspace'>\n <Option value='acme'>acme-robotics</Option>\n <Option value='lumen'>lumen-studio</Option>\n <Option value='ferrite'>ferrite-labs</Option>\n </Select>\n <Badge color='info'>ND</Badge>\n </div>\n }\n sidebar={<DashboardSidebar />}\n >\n <div\n data-slot='dashboard-content'\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: 'var(--haze-space-4)',\n padding: 'var(--haze-space-4)',\n }}\n >\n <Breadcrumb>\n <BreadcrumbItem href='#dashboard'>Nimbus</BreadcrumbItem>\n <BreadcrumbItem href='#dashboard'>Analytics</BreadcrumbItem>\n <BreadcrumbItem>Overview</BreadcrumbItem>\n </Breadcrumb>\n\n <StatGroup data-slot='dashboard-stats'>\n <Stat title='MRR' value='$12,610' trend='up' trendValue='+12.4%' description='vs last month' />\n <Stat title='Active workspaces' value='1,284' trend='up' trendValue='+38' description='rolling 30 days' />\n <Stat title='Avg. session' value='7m 32s' trend='down' trendValue='-3.1%' description='all plans' />\n <Stat title='Churn' value='2.1%' trend='neutral' description='target under 3%' />\n </StatGroup>\n\n <DataTable\n columns={columns}\n data={WORKSPACES}\n getRowId={(row) => row.id}\n size={density as 'sm' | 'md' | 'lg'}\n pageSize={6}\n columnToggle\n toolbar={\n <div style={{ display: 'flex', alignItems: 'center', gap: 'var(--haze-space-2)' }}>\n <Segmented\n size='sm'\n options={[\n { value: 'sm', label: 'S' },\n { value: 'md', label: 'M' },\n { value: 'lg', label: 'L' },\n ]}\n value={densityCtrl}\n onChange={setDensity}\n aria-label='Table density'\n />\n <Button size='sm' variant='outline' onClick={exportCsv}>\n Export CSV\n </Button>\n </div>\n }\n />\n </div>\n </AppShell>\n </div>\n );\n}\n",
1114
+ "type": "registry:block"
1115
+ }
1116
+ ]
1117
+ },
939
1118
  {
940
1119
  "name": "data-table",
941
1120
  "type": "registry:ui",
@@ -952,7 +1131,28 @@
952
1131
  "files": [
953
1132
  {
954
1133
  "path": "components/haze/data-table.tsx",
955
- "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { DataTable, dataTableSum, dataTableAvg, dataTableCount, dataTableToCsv } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/data-table.css';\nimport 'haze-ui/css/checkbox.css';\nimport 'haze-ui/css/dropdown-menu.css';\nimport 'haze-ui/css/empty.css';\nimport 'haze-ui/css/input.css';\nimport 'haze-ui/css/pagination.css';\nimport 'haze-ui/css/skeleton.css';\nimport 'haze-ui/css/table.css';\nimport 'haze-ui/css/virtual-list.css';\n\nexport { DataTable, dataTableSum, dataTableAvg, dataTableCount, dataTableToCsv };\nexport type { DataTableProps, DataTableColumnDef, DataTableColumnMeta, DataTableVirtualized, DataTableSummary, DataTableSummaryCell, DataTableCellEditorProps, DataTableCsvOptions } from 'haze-ui';\n",
1134
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { DataTable, dataTableSum, dataTableAvg, dataTableCount, dataTableToCsv } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/data-table.css';\nimport 'haze-ui/css/button.css';\nimport 'haze-ui/css/checkbox.css';\nimport 'haze-ui/css/dropdown-menu.css';\nimport 'haze-ui/css/empty.css';\nimport 'haze-ui/css/input.css';\nimport 'haze-ui/css/pagination.css';\nimport 'haze-ui/css/popover.css';\nimport 'haze-ui/css/skeleton.css';\nimport 'haze-ui/css/spinner.css';\nimport 'haze-ui/css/table.css';\nimport 'haze-ui/css/virtual-list.css';\nimport 'haze-ui/css/visually-hidden.css';\n\nexport { DataTable, dataTableSum, dataTableAvg, dataTableCount, dataTableToCsv };\nexport type { DataTableProps, DataTableClassNames, DataTableColumnDef, DataTableColumnMeta, DataTableVirtualized, DataTableSummary, DataTableSummaryCell, DataTableCellEditorProps, DataTableCsvOptions, DataTableFiltersState } from 'haze-ui';\n",
1135
+ "type": "registry:ui"
1136
+ }
1137
+ ]
1138
+ },
1139
+ {
1140
+ "name": "date-field",
1141
+ "type": "registry:ui",
1142
+ "title": "DateField / DateFieldCore",
1143
+ "description": "Segmented date input: year/month/day spinbuttons typed directly (`YYYY-MM-DD` value); `DateFieldCore` is the headless core.",
1144
+ "author": "wmzy <https://github.com/wmzy>",
1145
+ "docs": "Segmented date input: year/month/day spinbuttons typed directly (`YYYY-MM-DD` value); `DateFieldCore` is the headless core.\n\nExports: `DateField`, `DateFieldCore`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/date-field\n```\n\nThe wrapper lands at `components/ui/haze/date-field.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/date-field.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
1146
+ "categories": [
1147
+ "form"
1148
+ ],
1149
+ "dependencies": [
1150
+ "haze-ui"
1151
+ ],
1152
+ "files": [
1153
+ {
1154
+ "path": "components/haze/date-field.tsx",
1155
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { DateField, DateFieldCore } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/date-field.css';\nimport 'haze-ui/css/calendar.css';\n\nexport { DateField, DateFieldCore };\nexport type { DateFieldProps, DateFieldCoreProps, DatePlaceholder, DateLabels } from 'haze-ui';\n",
956
1156
  "type": "registry:ui"
957
1157
  }
958
1158
  ]
@@ -1141,7 +1341,7 @@
1141
1341
  "files": [
1142
1342
  {
1143
1343
  "path": "components/haze/dropdown-menu.tsx",
1144
- "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuGroup, DropdownMenuSeparator, DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/dropdown-menu.css';\n\nexport { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuGroup, DropdownMenuSeparator, DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent };\nexport type { DropdownMenuProps, DropdownMenuDataItem, DropdownMenuTriggerProps, DropdownMenuContentProps, DropdownMenuItemProps, DropdownMenuCheckboxItemProps, DropdownMenuRadioGroupProps, DropdownMenuRadioItemProps, DropdownMenuGroupProps, DropdownMenuSeparatorProps, DropdownMenuSubProps, DropdownMenuSubTriggerProps, DropdownMenuSubContentProps, DropdownMenuHandle } from 'haze-ui';\n",
1344
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuGroup, DropdownMenuSeparator, DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/dropdown-menu.css';\n\nexport { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuGroup, DropdownMenuSeparator, DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent };\nexport type { DropdownMenuProps, DropdownMenuClassNames, DropdownMenuDataItem, DropdownMenuTriggerProps, DropdownMenuContentProps, DropdownMenuItemProps, DropdownMenuCheckboxItemProps, DropdownMenuRadioGroupProps, DropdownMenuRadioItemProps, DropdownMenuGroupProps, DropdownMenuSeparatorProps, DropdownMenuSubProps, DropdownMenuSubTriggerProps, DropdownMenuSubContentProps, DropdownMenuHandle } from 'haze-ui';\n",
1145
1345
  "type": "registry:ui"
1146
1346
  }
1147
1347
  ]
@@ -1188,6 +1388,27 @@
1188
1388
  }
1189
1389
  ]
1190
1390
  },
1391
+ {
1392
+ "name": "error-boundary",
1393
+ "type": "registry:ui",
1394
+ "title": "ErrorBoundary",
1395
+ "description": "Render-error boundary: class component catching subtree throws, rendering a fallback (`fallback` node or render prop) with a reset callback; `resetKeys` shallow-change resets.",
1396
+ "author": "wmzy <https://github.com/wmzy>",
1397
+ "docs": "Render-error boundary: class component catching subtree throws, rendering a fallback (`fallback` node or render prop) with a reset callback; `resetKeys` shallow-change resets.\n\nExports: `ErrorBoundary`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/error-boundary\n```\n\nThe wrapper lands at `components/ui/haze/error-boundary.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/error-boundary.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
1398
+ "categories": [
1399
+ "feedback"
1400
+ ],
1401
+ "dependencies": [
1402
+ "haze-ui"
1403
+ ],
1404
+ "files": [
1405
+ {
1406
+ "path": "components/haze/error-boundary.tsx",
1407
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { ErrorBoundary } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/error-boundary.css';\n\nexport { ErrorBoundary };\nexport type { ErrorBoundaryProps, FallbackRenderArgs } from 'haze-ui';\n",
1408
+ "type": "registry:ui"
1409
+ }
1410
+ ]
1411
+ },
1191
1412
  {
1192
1413
  "name": "fieldset",
1193
1414
  "type": "registry:ui",
@@ -1296,10 +1517,10 @@
1296
1517
  {
1297
1518
  "name": "form",
1298
1519
  "type": "registry:ui",
1299
- "title": "FormItem / FormList / FormProvider / useFormContext / useFieldArray / useFieldArrayItem / useWatch / trigger / setFocus / setServerErrors / setValue / getValue / getValues / reset / hasStandardProps / standardSchemaFormValidator / standardSchemaResolver / zodResolver",
1520
+ "title": "Form / FormItem / FormList / FormProvider / useFormContext / useFieldArray / useFieldArrayItem / useWatch / useValue / useValues / useForm / createForm / trigger / setFocus / setServerErrors / setValue / getValue / getValues / reset / hasStandardProps / standardSchemaFormValidator / standardSchemaResolver / zodResolver",
1300
1521
  "description": "react-f0rm field wrapper adding label, error and aria wiring to controlled cores.",
1301
1522
  "author": "wmzy <https://github.com/wmzy>",
1302
- "docs": "react-f0rm field wrapper adding label, error and aria wiring to controlled cores.\n\nExports: `FormItem`, `FormList`, `FormProvider`, `useFormContext`, `useFieldArray`, `useFieldArrayItem`, `useWatch`, `trigger`, `setFocus`, `setServerErrors`, `setValue`, `getValue`, `getValues`, `reset`, `hasStandardProps`, `standardSchemaFormValidator`, `standardSchemaResolver`, `zodResolver`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/form\n```\n\nThe wrapper lands at `components/ui/haze/form.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/form.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
1523
+ "docs": "react-f0rm field wrapper adding label, error and aria wiring to controlled cores.\n\nExports: `Form`, `FormItem`, `FormList`, `FormProvider`, `useFormContext`, `useFieldArray`, `useFieldArrayItem`, `useWatch`, `useValue`, `useValues`, `useForm`, `createForm`, `trigger`, `setFocus`, `setServerErrors`, `setValue`, `getValue`, `getValues`, `reset`, `hasStandardProps`, `standardSchemaFormValidator`, `standardSchemaResolver`, `zodResolver`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/form\n```\n\nThe wrapper lands at `components/ui/haze/form.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/form.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
1303
1524
  "categories": [
1304
1525
  "form"
1305
1526
  ],
@@ -1309,7 +1530,7 @@
1309
1530
  "files": [
1310
1531
  {
1311
1532
  "path": "components/haze/form.tsx",
1312
- "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { FormItem, FormList, FormProvider, useFormContext, useFieldArray, useFieldArrayItem, useWatch, trigger, setFocus, setServerErrors, setValue, getValue, getValues, reset, hasStandardProps, standardSchemaFormValidator, standardSchemaResolver, zodResolver } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/form.css';\n\nexport { FormItem, FormList, FormProvider, useFormContext, useFieldArray, useFieldArrayItem, useWatch, trigger, setFocus, setServerErrors, setValue, getValue, getValues, reset, hasStandardProps, standardSchemaFormValidator, standardSchemaResolver, zodResolver };\nexport type { FieldValidator, FormItemAsProps, FormItemBinding, FormItemOwnProps, FormItemProps, FormItemRawElement, FormItemRawElementBinding, FormInstance, FormListProps, FormListBinding, FormListField, PathValueOf, StandardSchemaV1 } from 'haze-ui';\n",
1533
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Form, FormItem, FormList, FormProvider, useFormContext, useFieldArray, useFieldArrayItem, useWatch, useValue, useValues, useForm, createForm, trigger, setFocus, setServerErrors, setValue, getValue, getValues, reset, hasStandardProps, standardSchemaFormValidator, standardSchemaResolver, zodResolver } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/form.css';\n\nexport { Form, FormItem, FormList, FormProvider, useFormContext, useFieldArray, useFieldArrayItem, useWatch, useValue, useValues, useForm, createForm, trigger, setFocus, setServerErrors, setValue, getValue, getValues, reset, hasStandardProps, standardSchemaFormValidator, standardSchemaResolver, zodResolver };\nexport type { FieldValidator, FormItemAsProps, FormItemBinding, FormItemOwnProps, FormItemProps, FormItemClassNames, FormItemRawElement, FormItemRawElementBinding, FormInstance, FormListProps, FormListBinding, FormListField, PathValueOf, StandardSchemaV1 } from 'haze-ui';\n",
1313
1534
  "type": "registry:ui"
1314
1535
  }
1315
1536
  ]
@@ -1335,6 +1556,27 @@
1335
1556
  }
1336
1557
  ]
1337
1558
  },
1559
+ {
1560
+ "name": "heatmap",
1561
+ "type": "registry:ui",
1562
+ "title": "Heatmap",
1563
+ "description": "GitHub-style activity calendar: week × weekday grid of squares, intensity-binned by value (levels prop), theme-aware color-mix scale, label props for all i18n.",
1564
+ "author": "wmzy <https://github.com/wmzy>",
1565
+ "docs": "GitHub-style activity calendar: week × weekday grid of squares, intensity-binned by value (levels prop), theme-aware color-mix scale, label props for all i18n.\n\nExports: `Heatmap`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/heatmap\n```\n\nThe wrapper lands at `components/ui/haze/heatmap.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/heatmap.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
1566
+ "categories": [
1567
+ "data-display"
1568
+ ],
1569
+ "dependencies": [
1570
+ "haze-ui"
1571
+ ],
1572
+ "files": [
1573
+ {
1574
+ "path": "components/haze/heatmap.tsx",
1575
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Heatmap } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/heatmap.css';\n\nexport { Heatmap };\nexport type { HeatmapProps, HeatmapClassNames, HeatmapDatum } from 'haze-ui';\n",
1576
+ "type": "registry:ui"
1577
+ }
1578
+ ]
1579
+ },
1338
1580
  {
1339
1581
  "name": "hover-card",
1340
1582
  "type": "registry:ui",
@@ -1380,10 +1622,10 @@
1380
1622
  {
1381
1623
  "name": "image",
1382
1624
  "type": "registry:ui",
1383
- "title": "Image",
1384
- "description": "Image with fallback and `aspectRatio`/`objectFit` control.",
1625
+ "title": "Image / ImagePreviewGroup",
1626
+ "description": "Image with fallback, `aspectRatio`/`objectFit` control and click-to-preview overlay; `ImagePreviewGroup` wraps child images in a shared gallery lightbox (arrows, counter, thumbnail strip).",
1385
1627
  "author": "wmzy <https://github.com/wmzy>",
1386
- "docs": "Image with fallback and `aspectRatio`/`objectFit` control.\n\nExports: `Image`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/image\n```\n\nThe wrapper lands at `components/ui/haze/image.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/image.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
1628
+ "docs": "Image with fallback, `aspectRatio`/`objectFit` control and click-to-preview overlay; `ImagePreviewGroup` wraps child images in a shared gallery lightbox (arrows, counter, thumbnail strip).\n\nExports: `Image`, `ImagePreviewGroup`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/image\n```\n\nThe wrapper lands at `components/ui/haze/image.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/image.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
1387
1629
  "categories": [
1388
1630
  "data-display"
1389
1631
  ],
@@ -1393,7 +1635,28 @@
1393
1635
  "files": [
1394
1636
  {
1395
1637
  "path": "components/haze/image.tsx",
1396
- "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Image } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/image.css';\n\nexport { Image };\nexport type { ImageProps, ImagePreviewConfig } from 'haze-ui';\n",
1638
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Image, ImagePreviewGroup } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/image.css';\n\nexport { Image, ImagePreviewGroup };\nexport type { ImageProps, ImagePreviewConfig, ImagePreviewGroupProps } from 'haze-ui';\n",
1639
+ "type": "registry:ui"
1640
+ }
1641
+ ]
1642
+ },
1643
+ {
1644
+ "name": "image-crop",
1645
+ "type": "registry:ui",
1646
+ "title": "ImageCrop",
1647
+ "description": "Interactive image cropper pairing with Upload: controllable normalized CropRect value, aspect lock, circle avatar mask, pointer drag with corner handles, full keyboard operation (arrows move, Shift+arrows resize) and a getCroppedCanvas ref API.",
1648
+ "author": "wmzy <https://github.com/wmzy>",
1649
+ "docs": "Interactive image cropper pairing with Upload: controllable normalized CropRect value, aspect lock, circle avatar mask, pointer drag with corner handles, full keyboard operation (arrows move, Shift+arrows resize) and a getCroppedCanvas ref API.\n\nExports: `ImageCrop`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/image-crop\n```\n\nThe wrapper lands at `components/ui/haze/image-crop.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/image-crop.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
1650
+ "categories": [
1651
+ "form"
1652
+ ],
1653
+ "dependencies": [
1654
+ "haze-ui"
1655
+ ],
1656
+ "files": [
1657
+ {
1658
+ "path": "components/haze/image-crop.tsx",
1659
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { ImageCrop } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/image-crop.css';\n\nexport { ImageCrop };\nexport type { ImageCropHandle, ImageCropProps, CropRect } from 'haze-ui';\n",
1397
1660
  "type": "registry:ui"
1398
1661
  }
1399
1662
  ]
@@ -1419,6 +1682,27 @@
1419
1682
  }
1420
1683
  ]
1421
1684
  },
1685
+ {
1686
+ "name": "inline-citation",
1687
+ "type": "registry:ui",
1688
+ "title": "InlineCitation",
1689
+ "description": "Inline superscript citation marker that opens a floating source card with title, snippet and optional outbound link.",
1690
+ "author": "wmzy <https://github.com/wmzy>",
1691
+ "docs": "Inline superscript citation marker that opens a floating source card with title, snippet and optional outbound link.\n\nExports: `InlineCitation`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/inline-citation\n```\n\nThe wrapper lands at `components/ui/haze/inline-citation.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/inline-citation.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
1692
+ "categories": [
1693
+ "agent"
1694
+ ],
1695
+ "dependencies": [
1696
+ "haze-ui"
1697
+ ],
1698
+ "files": [
1699
+ {
1700
+ "path": "components/haze/inline-citation.tsx",
1701
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { InlineCitation } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/inline-citation.css';\n\nexport { InlineCitation };\nexport type { InlineCitationProps } from 'haze-ui';\n",
1702
+ "type": "registry:ui"
1703
+ }
1704
+ ]
1705
+ },
1422
1706
  {
1423
1707
  "name": "inline-completion",
1424
1708
  "type": "registry:ui",
@@ -1482,6 +1766,27 @@
1482
1766
  }
1483
1767
  ]
1484
1768
  },
1769
+ {
1770
+ "name": "input-group",
1771
+ "type": "registry:ui",
1772
+ "title": "InputGroup / InputGroupAddon / useInputGroup",
1773
+ "description": "Field cluster: prefix/suffix addons (icon, text, button) merged with Input/Select into one attached control.",
1774
+ "author": "wmzy <https://github.com/wmzy>",
1775
+ "docs": "Field cluster: prefix/suffix addons (icon, text, button) merged with Input/Select into one attached control.\n\nExports: `InputGroup`, `InputGroupAddon`, `useInputGroup`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/input-group\n```\n\nThe wrapper lands at `components/ui/haze/input-group.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/input-group.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
1776
+ "categories": [
1777
+ "form"
1778
+ ],
1779
+ "dependencies": [
1780
+ "haze-ui"
1781
+ ],
1782
+ "files": [
1783
+ {
1784
+ "path": "components/haze/input-group.tsx",
1785
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { InputGroup, InputGroupAddon, useInputGroup } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/input-group.css';\n\nexport { InputGroup, InputGroupAddon, useInputGroup };\nexport type { InputGroupProps, InputGroupClassNames, InputGroupAddonProps, InputGroupValue } from 'haze-ui';\n",
1786
+ "type": "registry:ui"
1787
+ }
1788
+ ]
1789
+ },
1485
1790
  {
1486
1791
  "name": "json-view",
1487
1792
  "type": "registry:ui",
@@ -1587,6 +1892,40 @@
1587
1892
  }
1588
1893
  ]
1589
1894
  },
1895
+ {
1896
+ "name": "login-block",
1897
+ "type": "registry:block",
1898
+ "title": "Login block (brand panel + Card form loop, zod-validated)",
1899
+ "description": "Full-page login: brand side panel plus a centered Card running the complete form loop — `useForm` + `Form` + `FormItem` over `InputCore`/`PasswordInputCore`/`CheckboxCore`, validated by one zod schema through `standardSchemaFormValidator`.",
1900
+ "author": "wmzy <https://github.com/wmzy>",
1901
+ "docs": "Full-page login: brand side panel plus a centered Card running the complete form loop — `useForm` + `Form` + `FormItem` over `InputCore`/`PasswordInputCore`/`CheckboxCore`, validated by one zod schema through `standardSchemaFormValidator`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/login-block\n```\n\nThe full-page source lands at `components/block/haze/login-block.tsx` (via the `@block/` target placeholder from `components.json`) — vendored, so you own and edit it. Component imports are rewritten to the `haze-ui` npm package, which is installed automatically together with `zod` and `react-use-control`.\n\nThe file imports the stylesheet of every component it renders (`haze-ui/css/tokens.css` + 7 component css files), so no extra stylesheet setup is needed.\n\n## Theming\n\nThis wrapper re-exports the 'lightTheme' (or 'darkTheme'), 'spacing' and\n'typography' classes from 'haze-ui' and imports 'haze-ui/css/tokens.css'.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nLive preview and source: https://wmzy.github.io/haze-ui/#/blocks — https://github.com/wmzy/haze-ui/tree/main/registry",
1902
+ "categories": [
1903
+ "blocks",
1904
+ "authentication",
1905
+ "form"
1906
+ ],
1907
+ "dependencies": [
1908
+ "haze-ui",
1909
+ "zod",
1910
+ "react-use-control"
1911
+ ],
1912
+ "registryDependencies": [
1913
+ "wmzy/haze-ui/card",
1914
+ "wmzy/haze-ui/form",
1915
+ "wmzy/haze-ui/input",
1916
+ "wmzy/haze-ui/password-input",
1917
+ "wmzy/haze-ui/checkbox",
1918
+ "wmzy/haze-ui/button",
1919
+ "wmzy/haze-ui/alert"
1920
+ ],
1921
+ "files": [
1922
+ {
1923
+ "path": "components/block/haze/login-block.tsx",
1924
+ "content": "// haze-ui registry block — generated by scripts/generate-registry.mjs\n// from src/views/Blocks/blocks/LoginBlock.tsx.\n//\n// Unlike the component items (thin re-export wrappers over the haze-ui npm\n// package), a block is VENDORED source: a full page you own and edit.\n// The component imports are rewritten from the docs site's '@/lib' alias\n// to the published 'haze-ui' package and every stylesheet of the page's\n// component closure is imported below, so the file is self-contained.\n// npm dependencies beyond haze-ui: zod, react-use-control.\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).\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/alert.css';\nimport 'haze-ui/css/button.css';\nimport 'haze-ui/css/card.css';\nimport 'haze-ui/css/checkbox.css';\nimport 'haze-ui/css/form.css';\nimport 'haze-ui/css/input.css';\nimport 'haze-ui/css/password-input.css';\n\nimport { z } from 'zod';\nimport { useControl } from 'react-use-control';\n\nimport {\n Alert,\n Button,\n Card,\n CheckboxCore,\n Form,\n FormItem,\n InputCore,\n PasswordInputCore,\n useForm,\n standardSchemaFormValidator,\n} from 'haze-ui';\n\n/*\n * Login block: a brand side panel plus a centered Card holding a complete\n * form loop — useForm + Form + FormItem over InputCore / PasswordInputCore\n * / CheckboxCore, validated by one zod schema through\n * standardSchemaFormValidator (errors land per FormItem, no per-field\n * validate needed). All layout glue is inline styles over --haze-* tokens\n * so the block re-themes for free.\n */\n\ntype LoginValues = {\n email: string;\n password: string;\n remember: boolean;\n};\n\nconst loginSchema = z.object({\n email: z.email('Enter a valid email address'),\n password: z.string().min(8, 'Password must be at least 8 characters'),\n remember: z.boolean(),\n});\n\nconst loginValidator = standardSchemaFormValidator<LoginValues>(loginSchema);\n\nfunction LoginForm() {\n const form = useForm<LoginValues>({\n initialValues: { email: '', password: '', remember: true },\n validate: loginValidator,\n validateDeps: ['email', 'password'],\n });\n // Signed-in confirmation banner — demo-local display state.\n const [signedIn, setSignedIn] = useControl(undefined, false);\n\n return (\n <Form form={form} onValidSubmit={() => setSignedIn(true)}>\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: 'var(--haze-space-4)',\n }}\n >\n {signedIn && (\n <Alert color='success'>Signed in — the schema passed for this workspace.</Alert>\n )}\n <FormItem\n form={form}\n name='email'\n label='Work email'\n rules={{ required: true }}\n input={InputCore}\n type='email'\n placeholder='you@company.com'\n />\n <FormItem\n form={form}\n name='password'\n label='Password'\n rules={{ required: true }}\n input={PasswordInputCore}\n placeholder='At least 8 characters'\n />\n <FormItem\n form={form}\n name='remember'\n label='Keep me signed in on this device'\n input={CheckboxCore}\n valueToProps={(checked) => ({ checked: !!checked })}\n />\n {/* Button's native `type` is pinned to 'button' — submit through the\n owning form so react-f0rm's validation chain runs first. */}\n <Button\n style={{ width: '100%' }}\n onClick={(e) => {\n e.currentTarget.form?.requestSubmit();\n }}\n >\n Sign in\n </Button>\n </div>\n </Form>\n );\n}\n\nexport default function LoginBlock() {\n return (\n <div\n data-slot='login-block'\n style={{\n display: 'flex',\n height: '100%',\n minHeight: '420px',\n fontFamily: 'var(--haze-font-sans)',\n color: 'var(--haze-color-text)',\n }}\n >\n {/* Brand panel — token-only surface so it flips with the theme. */}\n <div\n data-slot='login-brand'\n style={{\n flex: '1 1 55%',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n padding: 'var(--haze-space-8)',\n background: 'var(--haze-color-bg-subtle)',\n borderInlineEnd: '1px solid var(--haze-color-border)',\n }}\n >\n <strong style={{ color: 'var(--haze-color-primary)', fontSize: 'var(--haze-text-xl)' }}>\n Nimbus\n </strong>\n <div>\n <h2\n style={{\n margin: '0 0 var(--haze-space-2)',\n fontSize: 'var(--haze-text-2xl)',\n lineHeight: 'var(--haze-leading-tight)',\n color: 'var(--haze-color-text)',\n }}\n >\n Analytics your whole team actually reads.\n </h2>\n <p\n style={{\n margin: 0,\n fontSize: 'var(--haze-text-sm)',\n color: 'var(--haze-color-text-secondary)',\n }}\n >\n 1,284 workspaces ship with Nimbus — from first event to board deck.\n </p>\n </div>\n <span style={{ fontSize: 'var(--haze-text-xs)', color: 'var(--haze-color-text-muted)' }}>\n SOC 2 Type II · GDPR · 99.98% uptime\n </span>\n </div>\n\n {/* Form panel — the Card centers the fields in the remaining width. */}\n <div\n data-slot='login-panel'\n style={{\n flex: '1 1 45%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: 'var(--haze-space-6)',\n background: 'var(--haze-color-bg)',\n }}\n >\n <div style={{ width: 'min(360px, 100%)' }}>\n <Card variant='outlined'>\n <h2 style={{ margin: '0 0 var(--haze-space-1)', fontSize: 'var(--haze-text-lg)' }}>\n Welcome back\n </h2>\n <p\n style={{\n margin: '0 0 var(--haze-space-4)',\n fontSize: 'var(--haze-text-sm)',\n color: 'var(--haze-color-text-secondary)',\n }}\n >\n Sign in to your Nimbus workspace.\n </p>\n <LoginForm />\n <p\n style={{\n margin: 'var(--haze-space-3) 0 0',\n fontSize: 'var(--haze-text-xs)',\n color: 'var(--haze-color-text-muted)',\n }}\n >\n New to Nimbus? <a href='#login'>Create a workspace</a>\n </p>\n </Card>\n </div>\n </div>\n </div>\n );\n}\n",
1925
+ "type": "registry:block"
1926
+ }
1927
+ ]
1928
+ },
1590
1929
  {
1591
1930
  "name": "mark",
1592
1931
  "type": "registry:ui",
@@ -1687,7 +2026,28 @@
1687
2026
  "files": [
1688
2027
  {
1689
2028
  "path": "components/haze/menu.tsx",
1690
- "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Menu, MenuItem, MenuCheckboxItem, MenuRadioGroup, MenuRadioItem, MenuGroup, MenuDivider, MenuSub, MenuSubTrigger, MenuSubContent } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/menu.css';\n\nexport { Menu, MenuItem, MenuCheckboxItem, MenuRadioGroup, MenuRadioItem, MenuGroup, MenuDivider, MenuSub, MenuSubTrigger, MenuSubContent };\nexport type { MenuProps, MenuDataItem, MenuItemProps, MenuCheckboxItemProps, MenuRadioGroupProps, MenuRadioItemProps, MenuGroupProps, MenuSubProps, MenuSubTriggerProps, MenuSubContentProps } from 'haze-ui';\n",
2029
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Menu, MenuItem, MenuCheckboxItem, MenuRadioGroup, MenuRadioItem, MenuGroup, MenuDivider, MenuSub, MenuSubTrigger, MenuSubContent } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/menu.css';\nimport 'haze-ui/css/virtual-list.css';\n\nexport { Menu, MenuItem, MenuCheckboxItem, MenuRadioGroup, MenuRadioItem, MenuGroup, MenuDivider, MenuSub, MenuSubTrigger, MenuSubContent };\nexport type { MenuProps, MenuClassNames, MenuDataItem, MenuItemProps, MenuCheckboxItemProps, MenuRadioGroupProps, MenuRadioItemProps, MenuGroupProps, MenuSubProps, MenuSubTriggerProps, MenuSubContentProps } from 'haze-ui';\n",
2030
+ "type": "registry:ui"
2031
+ }
2032
+ ]
2033
+ },
2034
+ {
2035
+ "name": "meter",
2036
+ "type": "registry:ui",
2037
+ "title": "Meter / meterTrackSizes",
2038
+ "description": "Read-only semantic gauge: value normalized over min/max, threshold bands recolor track and bar, visible label + aria-labelledby, showValue readout, three track sizes.",
2039
+ "author": "wmzy <https://github.com/wmzy>",
2040
+ "docs": "Read-only semantic gauge: value normalized over min/max, threshold bands recolor track and bar, visible label + aria-labelledby, showValue readout, three track sizes.\n\nExports: `Meter`, `meterTrackSizes`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/meter\n```\n\nThe wrapper lands at `components/ui/haze/meter.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/meter.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
2041
+ "categories": [
2042
+ "data-display"
2043
+ ],
2044
+ "dependencies": [
2045
+ "haze-ui"
2046
+ ],
2047
+ "files": [
2048
+ {
2049
+ "path": "components/haze/meter.tsx",
2050
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Meter, meterTrackSizes } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/meter.css';\n\nexport { Meter, meterTrackSizes };\nexport type { MeterProps, MeterOwnProps, MeterClassNames, MeterThreshold, MeterTone } from 'haze-ui';\n",
1691
2051
  "type": "registry:ui"
1692
2052
  }
1693
2053
  ]
@@ -1734,13 +2094,34 @@
1734
2094
  }
1735
2095
  ]
1736
2096
  },
2097
+ {
2098
+ "name": "navigation-menu",
2099
+ "type": "registry:ui",
2100
+ "title": "NavigationMenu / NavigationMenuList / NavigationMenuItem / NavigationMenuTrigger / NavigationMenuContent",
2101
+ "description": "Hover mega-menu navigation bar: triggers open large content panels (link columns, card grids — any ReactNode) after an intent dwell with a pointer grace period; controllable `activeValue`, Escape closes, arrows traverse triggers.",
2102
+ "author": "wmzy <https://github.com/wmzy>",
2103
+ "docs": "Hover mega-menu navigation bar: triggers open large content panels (link columns, card grids — any ReactNode) after an intent dwell with a pointer grace period; controllable `activeValue`, Escape closes, arrows traverse triggers.\n\nExports: `NavigationMenu`, `NavigationMenuList`, `NavigationMenuItem`, `NavigationMenuTrigger`, `NavigationMenuContent`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/navigation-menu\n```\n\nThe wrapper lands at `components/ui/haze/navigation-menu.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/navigation-menu.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
2104
+ "categories": [
2105
+ "navigation"
2106
+ ],
2107
+ "dependencies": [
2108
+ "haze-ui"
2109
+ ],
2110
+ "files": [
2111
+ {
2112
+ "path": "components/haze/navigation-menu.tsx",
2113
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { NavigationMenu, NavigationMenuList, NavigationMenuItem, NavigationMenuTrigger, NavigationMenuContent } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/navigation-menu.css';\n\nexport { NavigationMenu, NavigationMenuList, NavigationMenuItem, NavigationMenuTrigger, NavigationMenuContent };\nexport type { NavigationMenuProps, NavigationMenuClassNames, NavigationMenuListProps, NavigationMenuItemProps, NavigationMenuTriggerProps, NavigationMenuContentProps } from 'haze-ui';\n",
2114
+ "type": "registry:ui"
2115
+ }
2116
+ ]
2117
+ },
1737
2118
  {
1738
2119
  "name": "number-input",
1739
2120
  "type": "registry:ui",
1740
- "title": "NumberInput / NumberInputCore",
2121
+ "title": "NumberInput / NumberInputCore / inputSizes / btnSizes",
1741
2122
  "description": "Numeric input with `min`/`max`/`step`.",
1742
2123
  "author": "wmzy <https://github.com/wmzy>",
1743
- "docs": "Numeric input with `min`/`max`/`step`.\n\nExports: `NumberInput`, `NumberInputCore`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/number-input\n```\n\nThe wrapper lands at `components/ui/haze/number-input.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/number-input.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
2124
+ "docs": "Numeric input with `min`/`max`/`step`.\n\nExports: `NumberInput`, `NumberInputCore`, `inputSizes`, `btnSizes`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/number-input\n```\n\nThe wrapper lands at `components/ui/haze/number-input.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/number-input.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
1744
2125
  "categories": [
1745
2126
  "form"
1746
2127
  ],
@@ -1750,7 +2131,7 @@
1750
2131
  "files": [
1751
2132
  {
1752
2133
  "path": "components/haze/number-input.tsx",
1753
- "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { NumberInput, NumberInputCore } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/number-input.css';\n\nexport { NumberInput, NumberInputCore };\nexport type { NumberInputProps, NumberInputCoreProps } from 'haze-ui';\n",
2134
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { NumberInput, NumberInputCore, inputSizes, btnSizes } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/number-input.css';\n\nexport { NumberInput, NumberInputCore, inputSizes, btnSizes };\nexport type { NumberInputProps, NumberInputCoreProps } from 'haze-ui';\n",
1754
2135
  "type": "registry:ui"
1755
2136
  }
1756
2137
  ]
@@ -1818,6 +2199,69 @@
1818
2199
  }
1819
2200
  ]
1820
2201
  },
2202
+ {
2203
+ "name": "phone-input",
2204
+ "type": "registry:ui",
2205
+ "title": "PhoneInput / isValidPhone",
2206
+ "description": "International phone input backed by libphonenumber-js: country select joined seamlessly to the number field, E.164-ish value, `isValidPhone()` pure helper.",
2207
+ "author": "wmzy <https://github.com/wmzy>",
2208
+ "docs": "International phone input backed by libphonenumber-js: country select joined seamlessly to the number field, E.164-ish value, `isValidPhone()` pure helper.\n\nExports: `PhoneInput`, `isValidPhone`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/phone-input\n```\n\nThe wrapper lands at `components/ui/haze/phone-input.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/phone-input.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
2209
+ "categories": [
2210
+ "form"
2211
+ ],
2212
+ "dependencies": [
2213
+ "haze-ui"
2214
+ ],
2215
+ "files": [
2216
+ {
2217
+ "path": "components/haze/phone-input.tsx",
2218
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { PhoneInput, isValidPhone } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/phone-input.css';\nimport 'haze-ui/css/chip.css';\nimport 'haze-ui/css/input.css';\nimport 'haze-ui/css/select.css';\nimport 'haze-ui/css/spinner.css';\nimport 'haze-ui/css/virtual-list.css';\nimport 'haze-ui/css/visually-hidden.css';\n\nexport { PhoneInput, isValidPhone };\nexport type { PhoneInputProps } from 'haze-ui';\n",
2219
+ "type": "registry:ui"
2220
+ }
2221
+ ]
2222
+ },
2223
+ {
2224
+ "name": "plan",
2225
+ "type": "registry:ui",
2226
+ "title": "Plan / PlanItem",
2227
+ "description": "Agent plan and progress display: `Plan` + `Plan.Item` step list whose statuses drive an auto progress bar and summary.",
2228
+ "author": "wmzy <https://github.com/wmzy>",
2229
+ "docs": "Agent plan and progress display: `Plan` + `Plan.Item` step list whose statuses drive an auto progress bar and summary.\n\nExports: `Plan`, `PlanItem`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/plan\n```\n\nThe wrapper lands at `components/ui/haze/plan.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/plan.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
2230
+ "categories": [
2231
+ "agent"
2232
+ ],
2233
+ "dependencies": [
2234
+ "haze-ui"
2235
+ ],
2236
+ "files": [
2237
+ {
2238
+ "path": "components/haze/plan.tsx",
2239
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Plan, PlanItem } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/plan.css';\n\nexport { Plan, PlanItem };\nexport type { PlanProps, PlanItemProps, PlanStatus } from 'haze-ui';\n",
2240
+ "type": "registry:ui"
2241
+ }
2242
+ ]
2243
+ },
2244
+ {
2245
+ "name": "popconfirm",
2246
+ "type": "registry:ui",
2247
+ "title": "Popconfirm",
2248
+ "description": "Anchored confirmation bubble with confirm/cancel actions and async busy support.",
2249
+ "author": "wmzy <https://github.com/wmzy>",
2250
+ "docs": "Anchored confirmation bubble with confirm/cancel actions and async busy support.\n\nExports: `Popconfirm`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/popconfirm\n```\n\nThe wrapper lands at `components/ui/haze/popconfirm.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/popconfirm.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
2251
+ "categories": [
2252
+ "overlay"
2253
+ ],
2254
+ "dependencies": [
2255
+ "haze-ui"
2256
+ ],
2257
+ "files": [
2258
+ {
2259
+ "path": "components/haze/popconfirm.tsx",
2260
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Popconfirm } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/popconfirm.css';\nimport 'haze-ui/css/button.css';\nimport 'haze-ui/css/spinner.css';\n\nexport { Popconfirm };\nexport type { PopconfirmProps, PopconfirmHandle, PopconfirmPlacement } from 'haze-ui';\n",
2261
+ "type": "registry:ui"
2262
+ }
2263
+ ]
2264
+ },
1821
2265
  {
1822
2266
  "name": "popover",
1823
2267
  "type": "registry:ui",
@@ -1842,10 +2286,10 @@
1842
2286
  {
1843
2287
  "name": "progress",
1844
2288
  "type": "registry:ui",
1845
- "title": "Progress",
2289
+ "title": "Progress / barSizes / circleSizes",
1846
2290
  "description": "Progress bar or circle driven by a percentage `value`.",
1847
2291
  "author": "wmzy <https://github.com/wmzy>",
1848
- "docs": "Progress bar or circle driven by a percentage `value`.\n\nExports: `Progress`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/progress\n```\n\nThe wrapper lands at `components/ui/haze/progress.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/progress.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
2292
+ "docs": "Progress bar or circle driven by a percentage `value`.\n\nExports: `Progress`, `barSizes`, `circleSizes`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/progress\n```\n\nThe wrapper lands at `components/ui/haze/progress.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/progress.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
1849
2293
  "categories": [
1850
2294
  "data-display"
1851
2295
  ],
@@ -1855,7 +2299,7 @@
1855
2299
  "files": [
1856
2300
  {
1857
2301
  "path": "components/haze/progress.tsx",
1858
- "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Progress } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/progress.css';\n\nexport { Progress };\nexport type { ProgressProps } from 'haze-ui';\n",
2302
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Progress, barSizes, circleSizes } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/progress.css';\n\nexport { Progress, barSizes, circleSizes };\nexport type { ProgressProps } from 'haze-ui';\n",
1859
2303
  "type": "registry:ui"
1860
2304
  }
1861
2305
  ]
@@ -1881,6 +2325,27 @@
1881
2325
  }
1882
2326
  ]
1883
2327
  },
2328
+ {
2329
+ "name": "pull-to-refresh",
2330
+ "type": "registry:ui",
2331
+ "title": "PullToRefresh",
2332
+ "description": "Mobile pull-to-refresh gesture wrapper: pointer/touch state machine (idle → pulling → ready → refreshing) with damped pull, scroll-edge canRefresh gate and a promise-gated spinner head.",
2333
+ "author": "wmzy <https://github.com/wmzy>",
2334
+ "docs": "Mobile pull-to-refresh gesture wrapper: pointer/touch state machine (idle → pulling → ready → refreshing) with damped pull, scroll-edge canRefresh gate and a promise-gated spinner head.\n\nExports: `PullToRefresh`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/pull-to-refresh\n```\n\nThe wrapper lands at `components/ui/haze/pull-to-refresh.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/pull-to-refresh.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
2335
+ "categories": [
2336
+ "utilities"
2337
+ ],
2338
+ "dependencies": [
2339
+ "haze-ui"
2340
+ ],
2341
+ "files": [
2342
+ {
2343
+ "path": "components/haze/pull-to-refresh.tsx",
2344
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { PullToRefresh } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/pull-to-refresh.css';\nimport 'haze-ui/css/spinner.css';\n\nexport { PullToRefresh };\nexport type { PullToRefreshProps, PullToRefreshPhase, PullToRefreshIndicatorInfo } from 'haze-ui';\n",
2345
+ "type": "registry:ui"
2346
+ }
2347
+ ]
2348
+ },
1884
2349
  {
1885
2350
  "name": "qr-code",
1886
2351
  "type": "registry:ui",
@@ -1902,6 +2367,27 @@
1902
2367
  }
1903
2368
  ]
1904
2369
  },
2370
+ {
2371
+ "name": "queue",
2372
+ "type": "registry:ui",
2373
+ "title": "Queue / QueueItem",
2374
+ "description": "Queue of pending agent actions or messages (`Queue` + `Queue.Item`) with queued/sending/failed status and optional per-item removal.",
2375
+ "author": "wmzy <https://github.com/wmzy>",
2376
+ "docs": "Queue of pending agent actions or messages (`Queue` + `Queue.Item`) with queued/sending/failed status and optional per-item removal.\n\nExports: `Queue`, `QueueItem`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/queue\n```\n\nThe wrapper lands at `components/ui/haze/queue.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/queue.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
2377
+ "categories": [
2378
+ "agent"
2379
+ ],
2380
+ "dependencies": [
2381
+ "haze-ui"
2382
+ ],
2383
+ "files": [
2384
+ {
2385
+ "path": "components/haze/queue.tsx",
2386
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Queue, QueueItem } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/queue.css';\nimport 'haze-ui/css/spinner.css';\n\nexport { Queue, QueueItem };\nexport type { QueueProps, QueueItemProps, QueueStatus } from 'haze-ui';\n",
2387
+ "type": "registry:ui"
2388
+ }
2389
+ ]
2390
+ },
1905
2391
  {
1906
2392
  "name": "radio",
1907
2393
  "type": "registry:ui",
@@ -1947,10 +2433,10 @@
1947
2433
  {
1948
2434
  "name": "resizable",
1949
2435
  "type": "registry:ui",
1950
- "title": "ResizableGroup / ResizablePanel / ResizableHandle / SplitterGroup / SplitterPanel / SplitterHandle",
1951
- "description": "Split-pane group with draggable dividers, horizontal or vertical; also exported as `SplitterGroup`/`SplitterPanel`/`SplitterHandle` (AntD-style naming).",
2436
+ "title": "ResizableGroup / ResizablePanel / ResizableHandle",
2437
+ "description": "Split-pane group with draggable dividers, horizontal or vertical; px sizing per panel with `onResizeCommit` for persistence.",
1952
2438
  "author": "wmzy <https://github.com/wmzy>",
1953
- "docs": "Split-pane group with draggable dividers, horizontal or vertical; also exported as `SplitterGroup`/`SplitterPanel`/`SplitterHandle` (AntD-style naming).\n\nExports: `ResizableGroup`, `ResizablePanel`, `ResizableHandle`, `SplitterGroup`, `SplitterPanel`, `SplitterHandle`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/resizable\n```\n\nThe wrapper lands at `components/ui/haze/resizable.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/resizable.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
2439
+ "docs": "Split-pane group with draggable dividers, horizontal or vertical; px sizing per panel with `onResizeCommit` for persistence.\n\nExports: `ResizableGroup`, `ResizablePanel`, `ResizableHandle`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/resizable\n```\n\nThe wrapper lands at `components/ui/haze/resizable.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/resizable.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
1954
2440
  "categories": [
1955
2441
  "layout"
1956
2442
  ],
@@ -1960,7 +2446,7 @@
1960
2446
  "files": [
1961
2447
  {
1962
2448
  "path": "components/haze/resizable.tsx",
1963
- "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { ResizableGroup, ResizablePanel, ResizableHandle, SplitterGroup, SplitterPanel, SplitterHandle } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/resizable.css';\n\nexport { ResizableGroup, ResizablePanel, ResizableHandle, SplitterGroup, SplitterPanel, SplitterHandle };\nexport type { ResizableGroupProps, ResizablePanelProps, ResizableHandleProps, SplitterGroupProps, SplitterPanelProps, SplitterHandleProps } from 'haze-ui';\n",
2449
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { ResizableGroup, ResizablePanel, ResizableHandle } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/resizable.css';\n\nexport { ResizableGroup, ResizablePanel, ResizableHandle };\nexport type { ResizableGroupProps, ResizablePanelProps, ResizableHandleProps } from 'haze-ui';\n",
1964
2450
  "type": "registry:ui"
1965
2451
  }
1966
2452
  ]
@@ -1986,13 +2472,55 @@
1986
2472
  }
1987
2473
  ]
1988
2474
  },
2475
+ {
2476
+ "name": "rich-text-editor",
2477
+ "type": "registry:ui",
2478
+ "title": "RichTextEditor",
2479
+ "description": "Tiptap-powered rich text editor with a built-in formatting toolbar and controllable HTML `value`.",
2480
+ "author": "wmzy <https://github.com/wmzy>",
2481
+ "docs": "Tiptap-powered rich text editor with a built-in formatting toolbar and controllable HTML `value`.\n\nExports: `RichTextEditor`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/rich-text-editor\n```\n\nThe wrapper lands at `components/ui/haze/rich-text-editor.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/rich-text-editor.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
2482
+ "categories": [
2483
+ "form"
2484
+ ],
2485
+ "dependencies": [
2486
+ "haze-ui"
2487
+ ],
2488
+ "files": [
2489
+ {
2490
+ "path": "components/haze/rich-text-editor.tsx",
2491
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { RichTextEditor } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/rich-text-editor.css';\nimport 'haze-ui/css/button.css';\nimport 'haze-ui/css/toolbar.css';\n\nexport { RichTextEditor };\nexport type { RichTextEditorProps, RichTextEditorHandle } from 'haze-ui';\n",
2492
+ "type": "registry:ui"
2493
+ }
2494
+ ]
2495
+ },
2496
+ {
2497
+ "name": "schedule",
2498
+ "type": "registry:ui",
2499
+ "title": "Schedule",
2500
+ "description": "Calendar surface with day/week/month views, drag-and-keyboard rescheduling and a month grid with overflow chips.",
2501
+ "author": "wmzy <https://github.com/wmzy>",
2502
+ "docs": "Calendar surface with day/week/month views, drag-and-keyboard rescheduling and a month grid with overflow chips.\n\nExports: `Schedule`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/schedule\n```\n\nThe wrapper lands at `components/ui/haze/schedule.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/schedule.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
2503
+ "categories": [
2504
+ "data-display"
2505
+ ],
2506
+ "dependencies": [
2507
+ "haze-ui"
2508
+ ],
2509
+ "files": [
2510
+ {
2511
+ "path": "components/haze/schedule.tsx",
2512
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Schedule } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/schedule.css';\nimport 'haze-ui/css/button.css';\nimport 'haze-ui/css/segmented.css';\nimport 'haze-ui/css/spinner.css';\n\nexport { Schedule };\nexport type { ScheduleProps, ScheduleClassNames, ScheduleEvent, ScheduleView, ScheduleEventChange, ScheduleEventColor, ScheduleBusinessHours, ScheduleViewLabels } from 'haze-ui';\n",
2513
+ "type": "registry:ui"
2514
+ }
2515
+ ]
2516
+ },
1989
2517
  {
1990
2518
  "name": "scroll-area",
1991
2519
  "type": "registry:ui",
1992
- "title": "ScrollArea",
1993
- "description": "Scrollable region with custom-styled thin scrollbars and `maxHeight`.",
2520
+ "title": "ScrollArea / Scrollbar / ScrollThumb / ScrollViewport",
2521
+ "description": "Scrollable region with overlay scrollbar thumbs: `maxHeight` sugar or compound `ScrollViewport`/`Scrollbar`/`ScrollThumb` parts; `type` = `hover`/`always`/`scroll` visibility, keyboard-focusable viewport, RTL-mirrored thumbs.",
1994
2522
  "author": "wmzy <https://github.com/wmzy>",
1995
- "docs": "Scrollable region with custom-styled thin scrollbars and `maxHeight`.\n\nExports: `ScrollArea`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/scroll-area\n```\n\nThe wrapper lands at `components/ui/haze/scroll-area.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/scroll-area.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
2523
+ "docs": "Scrollable region with overlay scrollbar thumbs: `maxHeight` sugar or compound `ScrollViewport`/`Scrollbar`/`ScrollThumb` parts; `type` = `hover`/`always`/`scroll` visibility, keyboard-focusable viewport, RTL-mirrored thumbs.\n\nExports: `ScrollArea`, `Scrollbar`, `ScrollThumb`, `ScrollViewport`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/scroll-area\n```\n\nThe wrapper lands at `components/ui/haze/scroll-area.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/scroll-area.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
1996
2524
  "categories": [
1997
2525
  "layout"
1998
2526
  ],
@@ -2002,7 +2530,7 @@
2002
2530
  "files": [
2003
2531
  {
2004
2532
  "path": "components/haze/scroll-area.tsx",
2005
- "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { ScrollArea } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/scroll-area.css';\n\nexport { ScrollArea };\nexport type { ScrollAreaProps } from 'haze-ui';\n",
2533
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { ScrollArea, Scrollbar, ScrollThumb, ScrollViewport } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/scroll-area.css';\n\nexport { ScrollArea, Scrollbar, ScrollThumb, ScrollViewport };\nexport type { ScrollAreaProps, ScrollbarMode, ScrollbarProps, ScrollThumbProps, ScrollViewportProps } from 'haze-ui';\n",
2006
2534
  "type": "registry:ui"
2007
2535
  }
2008
2536
  ]
@@ -2196,6 +2724,27 @@
2196
2724
  }
2197
2725
  ]
2198
2726
  },
2727
+ {
2728
+ "name": "splitter",
2729
+ "type": "registry:ui",
2730
+ "title": "Splitter / SplitterPane",
2731
+ "description": "Multi-pane split layout with implicit draggable dividers (AntD Splitter semantics): `sizes` in percent of the pane area (`ControlOrValue` array), per-pane `min`/`max` clamps, opt-in `collapsible` panes with divider collapse/expand triggers, keyboard arrows and pointer drags.",
2732
+ "author": "wmzy <https://github.com/wmzy>",
2733
+ "docs": "Multi-pane split layout with implicit draggable dividers (AntD Splitter semantics): `sizes` in percent of the pane area (`ControlOrValue` array), per-pane `min`/`max` clamps, opt-in `collapsible` panes with divider collapse/expand triggers, keyboard arrows and pointer drags.\n\nExports: `Splitter`, `SplitterPane`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/splitter\n```\n\nThe wrapper lands at `components/ui/haze/splitter.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/splitter.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
2734
+ "categories": [
2735
+ "layout"
2736
+ ],
2737
+ "dependencies": [
2738
+ "haze-ui"
2739
+ ],
2740
+ "files": [
2741
+ {
2742
+ "path": "components/haze/splitter.tsx",
2743
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Splitter, SplitterPane } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/splitter.css';\n\nexport { Splitter, SplitterPane };\nexport type { SplitterProps, SplitterPaneProps } from 'haze-ui';\n",
2744
+ "type": "registry:ui"
2745
+ }
2746
+ ]
2747
+ },
2199
2748
  {
2200
2749
  "name": "spoiler",
2201
2750
  "type": "registry:ui",
@@ -2263,9 +2812,9 @@
2263
2812
  "name": "step-timeline",
2264
2813
  "type": "registry:ui",
2265
2814
  "title": "StepTimeline / StepTimelineItem",
2266
- "description": "Vertical timeline of agent execution steps with per-step status.",
2815
+ "description": "Vertical timeline of agent execution steps — per-step status (incl. `running`), timing, collapsible detail panels and nested sub-steps.",
2267
2816
  "author": "wmzy <https://github.com/wmzy>",
2268
- "docs": "Vertical timeline of agent execution steps with per-step status.\n\nExports: `StepTimeline`, `StepTimelineItem`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/step-timeline\n```\n\nThe wrapper lands at `components/ui/haze/step-timeline.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/step-timeline.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
2817
+ "docs": "Vertical timeline of agent execution steps — per-step status (incl. `running`), timing, collapsible detail panels and nested sub-steps.\n\nExports: `StepTimeline`, `StepTimelineItem`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/step-timeline\n```\n\nThe wrapper lands at `components/ui/haze/step-timeline.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/step-timeline.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
2269
2818
  "categories": [
2270
2819
  "agent"
2271
2820
  ],
@@ -2346,10 +2895,10 @@
2346
2895
  {
2347
2896
  "name": "switch",
2348
2897
  "type": "registry:ui",
2349
- "title": "Switch / SwitchCore",
2898
+ "title": "Switch / SwitchCore / trackSizes / thumbSizes",
2350
2899
  "description": "Toggle switch (`role=\"switch\"`) with controllable `checked`.",
2351
2900
  "author": "wmzy <https://github.com/wmzy>",
2352
- "docs": "Toggle switch (`role=\"switch\"`) with controllable `checked`.\n\nExports: `Switch`, `SwitchCore`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/switch\n```\n\nThe wrapper lands at `components/ui/haze/switch.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/switch.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
2901
+ "docs": "Toggle switch (`role=\"switch\"`) with controllable `checked`.\n\nExports: `Switch`, `SwitchCore`, `trackSizes`, `thumbSizes`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/switch\n```\n\nThe wrapper lands at `components/ui/haze/switch.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/switch.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
2353
2902
  "categories": [
2354
2903
  "form"
2355
2904
  ],
@@ -2359,7 +2908,7 @@
2359
2908
  "files": [
2360
2909
  {
2361
2910
  "path": "components/haze/switch.tsx",
2362
- "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Switch, SwitchCore } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/switch.css';\n\nexport { Switch, SwitchCore };\nexport type { SwitchProps, SwitchCoreProps } from 'haze-ui';\n",
2911
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Switch, SwitchCore, trackSizes, thumbSizes } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/switch.css';\n\nexport { Switch, SwitchCore, trackSizes, thumbSizes };\nexport type { SwitchProps, SwitchCoreProps } from 'haze-ui';\n",
2363
2912
  "type": "registry:ui"
2364
2913
  }
2365
2914
  ]
@@ -2401,7 +2950,7 @@
2401
2950
  "files": [
2402
2951
  {
2403
2952
  "path": "components/haze/table.tsx",
2404
- "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Table, TableHead, TableBody, TableRow, TableCell } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/table.css';\n\nexport { Table, TableHead, TableBody, TableRow, TableCell };\nexport type { TableProps, TableHeadProps, TableBodyProps, TableRowProps, TableCellProps } from 'haze-ui';\n",
2953
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Table, TableHead, TableBody, TableRow, TableCell } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/table.css';\n\nexport { Table, TableHead, TableBody, TableRow, TableCell };\nexport type { TableProps, TableClassNames, TableHeadProps, TableBodyProps, TableRowProps, TableCellProps } from 'haze-ui';\n",
2405
2954
  "type": "registry:ui"
2406
2955
  }
2407
2956
  ]
@@ -2409,10 +2958,10 @@
2409
2958
  {
2410
2959
  "name": "tabs",
2411
2960
  "type": "registry:ui",
2412
- "title": "Tabs / TabList / Tab / TabPanel / SortableTabList",
2961
+ "title": "Tabs / TabList / Tab / TabPanel / SortableTabList / tabVariants / listVariants",
2413
2962
  "description": "Tab panel switcher with controllable active tab (`TabList`, `Tab`, `TabPanel`).",
2414
2963
  "author": "wmzy <https://github.com/wmzy>",
2415
- "docs": "Tab panel switcher with controllable active tab (`TabList`, `Tab`, `TabPanel`).\n\nExports: `Tabs`, `TabList`, `Tab`, `TabPanel`, `SortableTabList`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/tabs\n```\n\nThe wrapper lands at `components/ui/haze/tabs.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/tabs.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
2964
+ "docs": "Tab panel switcher with controllable active tab (`TabList`, `Tab`, `TabPanel`).\n\nExports: `Tabs`, `TabList`, `Tab`, `TabPanel`, `SortableTabList`, `tabVariants`, `listVariants`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/tabs\n```\n\nThe wrapper lands at `components/ui/haze/tabs.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/tabs.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
2416
2965
  "categories": [
2417
2966
  "navigation"
2418
2967
  ],
@@ -2422,7 +2971,7 @@
2422
2971
  "files": [
2423
2972
  {
2424
2973
  "path": "components/haze/tabs.tsx",
2425
- "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Tabs, TabList, Tab, TabPanel, SortableTabList } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/tabs.css';\nimport 'haze-ui/css/menu.css';\n\nexport { Tabs, TabList, Tab, TabPanel, SortableTabList };\nexport type { TabsProps, TabsClassNames, TabListProps, TabProps, TabPanelProps, TabStatus, SortableTabListProps } from 'haze-ui';\n",
2974
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Tabs, TabList, Tab, TabPanel, SortableTabList, tabVariants, listVariants } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/tabs.css';\nimport 'haze-ui/css/menu.css';\nimport 'haze-ui/css/virtual-list.css';\n\nexport { Tabs, TabList, Tab, TabPanel, SortableTabList, tabVariants, listVariants };\nexport type { TabsProps, TabsClassNames, TabListProps, TabProps, TabPanelProps, TabStatus, SortableTabListProps } from 'haze-ui';\n",
2426
2975
  "type": "registry:ui"
2427
2976
  }
2428
2977
  ]
@@ -2430,10 +2979,10 @@
2430
2979
  {
2431
2980
  "name": "tag",
2432
2981
  "type": "registry:ui",
2433
- "title": "Tag",
2982
+ "title": "Tag / tagVariants / tagSizes",
2434
2983
  "description": "Compact status label with variant color and optional close button.",
2435
2984
  "author": "wmzy <https://github.com/wmzy>",
2436
- "docs": "Compact status label with variant color and optional close button.\n\nExports: `Tag`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/tag\n```\n\nThe wrapper lands at `components/ui/haze/tag.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/tag.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
2985
+ "docs": "Compact status label with variant color and optional close button.\n\nExports: `Tag`, `tagVariants`, `tagSizes`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/tag\n```\n\nThe wrapper lands at `components/ui/haze/tag.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/tag.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
2437
2986
  "categories": [
2438
2987
  "general"
2439
2988
  ],
@@ -2443,7 +2992,7 @@
2443
2992
  "files": [
2444
2993
  {
2445
2994
  "path": "components/haze/tag.tsx",
2446
- "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Tag } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/tag.css';\n\nexport { Tag };\nexport type { TagProps } from 'haze-ui';\n",
2995
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Tag, tagVariants, tagSizes } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/tag.css';\n\nexport { Tag, tagVariants, tagSizes };\nexport type { TagProps } from 'haze-ui';\n",
2447
2996
  "type": "registry:ui"
2448
2997
  }
2449
2998
  ]
@@ -2532,6 +3081,27 @@
2532
3081
  }
2533
3082
  ]
2534
3083
  },
3084
+ {
3085
+ "name": "time-grid",
3086
+ "type": "registry:ui",
3087
+ "title": "TimeGrid",
3088
+ "description": "Single-select 'HH:mm' slot grid from a from/to window and minute step; radiogroup semantics with roving-tabindex arrow selection, controllable value, disabled slots.",
3089
+ "author": "wmzy <https://github.com/wmzy>",
3090
+ "docs": "Single-select 'HH:mm' slot grid from a from/to window and minute step; radiogroup semantics with roving-tabindex arrow selection, controllable value, disabled slots.\n\nExports: `TimeGrid`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/time-grid\n```\n\nThe wrapper lands at `components/ui/haze/time-grid.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/time-grid.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
3091
+ "categories": [
3092
+ "form"
3093
+ ],
3094
+ "dependencies": [
3095
+ "haze-ui"
3096
+ ],
3097
+ "files": [
3098
+ {
3099
+ "path": "components/haze/time-grid.tsx",
3100
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { TimeGrid } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/time-grid.css';\n\nexport { TimeGrid };\nexport type { TimeGridProps, TimeGridClassNames } from 'haze-ui';\n",
3101
+ "type": "registry:ui"
3102
+ }
3103
+ ]
3104
+ },
2535
3105
  {
2536
3106
  "name": "time-picker",
2537
3107
  "type": "registry:ui",
@@ -2640,10 +3210,10 @@
2640
3210
  {
2641
3211
  "name": "tokens",
2642
3212
  "type": "registry:lib",
2643
- "title": "Theme tokens (lightTheme / darkTheme / spacing / typography)",
2644
- "description": "Theme classes for haze-ui: `lightTheme`/`darkTheme` plus `spacing` and `typography`, applied to a root element to activate the `--haze-*` design tokens.",
3213
+ "title": "Theme tokens (lightTheme / darkTheme / autoTheme / spacing / typography)",
3214
+ "description": "Theme classes for haze-ui: `lightTheme`/`darkTheme`/`autoTheme` (zero-JS system-following) plus `spacing` and `typography`, applied to a root element to activate the `--haze-*` design tokens.",
2645
3215
  "author": "wmzy <https://github.com/wmzy>",
2646
- "docs": "Theme classes for haze-ui: `lightTheme`/`darkTheme` plus `spacing` and `typography`, applied to a root element to activate the `--haze-*` design tokens.\n\nExports: `lightTheme`, `darkTheme`, `violetTheme`, `tealTheme`, `cyanTheme`, `orangeTheme`, `roseTheme`, `spacing`, `compact`, `typography`, `motion`, `motionPresets`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/tokens\n```\n\nThe wrapper lands at `lib/haze/tokens.tsx` (via the `@lib/` target placeholder from `components.json`); the `haze-ui` npm package is installed automatically as a dependency.\n\n## Theming\n\nThis wrapper re-exports the 'lightTheme' (or 'darkTheme'), 'spacing' and\n'typography' classes from 'haze-ui' and imports 'haze-ui/css/tokens.css'.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
3216
+ "docs": "Theme classes for haze-ui: `lightTheme`/`darkTheme`/`autoTheme` (zero-JS system-following) plus `spacing` and `typography`, applied to a root element to activate the `--haze-*` design tokens.\n\nExports: `lightTheme`, `darkTheme`, `autoTheme`, `violetTheme`, `tealTheme`, `cyanTheme`, `orangeTheme`, `roseTheme`, `spacing`, `compact`, `typography`, `motion`, `motionPresets`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/tokens\n```\n\nThe wrapper lands at `lib/haze/tokens.tsx` (via the `@lib/` target placeholder from `components.json`); the `haze-ui` npm package is installed automatically as a dependency.\n\n## Theming\n\nThis wrapper re-exports the 'lightTheme' (or 'darkTheme'), 'spacing' and\n'typography' classes from 'haze-ui' and imports 'haze-ui/css/tokens.css'.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
2647
3217
  "categories": [
2648
3218
  "theme"
2649
3219
  ],
@@ -2653,7 +3223,7 @@
2653
3223
  "files": [
2654
3224
  {
2655
3225
  "path": "components/haze/tokens.tsx",
2656
- "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { lightTheme, darkTheme, violetTheme, tealTheme, cyanTheme, orangeTheme, roseTheme, spacing, compact, typography, motion, motionPresets } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\n\nexport { lightTheme, darkTheme, violetTheme, tealTheme, cyanTheme, orangeTheme, roseTheme, spacing, compact, typography, motion, motionPresets };\nexport type { BrandTheme, MotionPreset } from 'haze-ui';\n",
3226
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { lightTheme, darkTheme, autoTheme, violetTheme, tealTheme, cyanTheme, orangeTheme, roseTheme, spacing, compact, typography, motion, motionPresets } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\n\nexport { lightTheme, darkTheme, autoTheme, violetTheme, tealTheme, cyanTheme, orangeTheme, roseTheme, spacing, compact, typography, motion, motionPresets };\nexport type { BrandTheme, MotionPreset } from 'haze-ui';\n",
2657
3227
  "type": "registry:lib"
2658
3228
  }
2659
3229
  ]
@@ -2716,7 +3286,7 @@
2716
3286
  "files": [
2717
3287
  {
2718
3288
  "path": "components/haze/tooltip.tsx",
2719
- "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Tooltip } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/tooltip.css';\n\nexport { Tooltip };\nexport type { TooltipProps } from 'haze-ui';\n",
3289
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Tooltip } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/tooltip.css';\n\nexport { Tooltip };\nexport type { TooltipProps, TooltipClassNames } from 'haze-ui';\n",
2720
3290
  "type": "registry:ui"
2721
3291
  }
2722
3292
  ]
@@ -2742,6 +3312,27 @@
2742
3312
  }
2743
3313
  ]
2744
3314
  },
3315
+ {
3316
+ "name": "trace",
3317
+ "type": "registry:ui",
3318
+ "title": "Trace / TraceItem / TraceDetails",
3319
+ "description": "Line-by-line agent reasoning trace: `Trace` + `TraceItem` steps with pending/running/done/error status, custom icons, collapsible `details` and sr-only status announcements.",
3320
+ "author": "wmzy <https://github.com/wmzy>",
3321
+ "docs": "Line-by-line agent reasoning trace: `Trace` + `TraceItem` steps with pending/running/done/error status, custom icons, collapsible `details` and sr-only status announcements.\n\nExports: `Trace`, `TraceItem`, `TraceDetails`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/trace\n```\n\nThe wrapper lands at `components/ui/haze/trace.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/trace.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
3322
+ "categories": [
3323
+ "agent"
3324
+ ],
3325
+ "dependencies": [
3326
+ "haze-ui"
3327
+ ],
3328
+ "files": [
3329
+ {
3330
+ "path": "components/haze/trace.tsx",
3331
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Trace, TraceItem, TraceDetails } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/trace.css';\n\nexport { Trace, TraceItem, TraceDetails };\nexport type { TraceProps, TraceItemProps, TraceDetailsProps, TraceStatus } from 'haze-ui';\n",
3332
+ "type": "registry:ui"
3333
+ }
3334
+ ]
3335
+ },
2745
3336
  {
2746
3337
  "name": "transfer",
2747
3338
  "type": "registry:ui",
@@ -2842,7 +3433,7 @@
2842
3433
  "files": [
2843
3434
  {
2844
3435
  "path": "components/haze/upload.tsx",
2845
- "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Upload, UploadCore } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/upload.css';\nimport 'haze-ui/css/progress.css';\n\nexport { Upload, UploadCore };\nexport type { UploadProps, UploadCoreProps, UploadHandle, UploadStatus, UploadFile, UploadValueItem, UploadFileStatus, UploadRequest, UploadRequestOptions, UploadListItemActions, UploadListItemRender } from 'haze-ui';\n",
3436
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\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 { Upload, UploadCore } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/upload.css';\nimport 'haze-ui/css/file-preview.css';\nimport 'haze-ui/css/progress.css';\n\nexport { Upload, UploadCore };\nexport type { UploadProps, UploadClassNames, UploadCoreProps, UploadHandle, UploadStatus, UploadFile, UploadValueItem, UploadFileStatus, UploadRequest, UploadRequestOptions, UploadListItemActions, UploadListItemRender } from 'haze-ui';\n",
2846
3437
  "type": "registry:ui"
2847
3438
  }
2848
3439
  ]