haze-ui 1.27.0 → 1.29.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 (226) hide show
  1. package/README.md +81 -33
  2. package/dist/components/Calendar/Calendar.js +222 -151
  3. package/dist/components/Cascader/Cascader.js +180 -146
  4. package/dist/components/Chart/Chart.js +12 -9
  5. package/dist/components/Chart/chart-elements.js +176 -39
  6. package/dist/components/CodeBlock/CodeBlock.js +39 -9
  7. package/dist/components/Combobox/Combobox.js +107 -99
  8. package/dist/components/CountUp/CountUp.js +45 -0
  9. package/dist/components/CountUp/index.js +3 -0
  10. package/dist/components/DataTable/DataTable.js +224 -221
  11. package/dist/components/DataTable/csv.js +29 -0
  12. package/dist/components/DataTable/index.js +3 -2
  13. package/dist/components/DateRangePicker/DateRangePicker.js +31 -16
  14. package/dist/components/DateRangePicker/presets.js +43 -0
  15. package/dist/components/Datepicker/Datepicker.js +12 -11
  16. package/dist/components/Datepicker/DatepickerCore.js +72 -51
  17. package/dist/components/Datepicker/datetime.js +23 -0
  18. package/dist/components/Descriptions/Descriptions.js +46 -0
  19. package/dist/components/Descriptions/index.js +3 -0
  20. package/dist/components/DiffViewer/DiffViewer.js +31 -30
  21. package/dist/components/Ellipsis/Ellipsis.js +53 -0
  22. package/dist/components/Ellipsis/index.js +3 -0
  23. package/dist/components/FilePreview/FilePreview.js +135 -0
  24. package/dist/components/FilePreview/file-preview-format.js +23 -0
  25. package/dist/components/FilePreview/index.js +3 -0
  26. package/dist/components/FloatButton/FloatButton.js +42 -0
  27. package/dist/components/FloatButton/FloatButtonGroup.js +58 -0
  28. package/dist/components/FloatButton/float-button-context.js +9 -0
  29. package/dist/components/FloatButton/float-button-glyphs.js +26 -0
  30. package/dist/components/FloatButton/float-button-styles.js +14 -0
  31. package/dist/components/FloatButton/index.js +4 -0
  32. package/dist/components/InlineCompletion/InlineCompletion.js +81 -0
  33. package/dist/components/InlineCompletion/index.js +3 -0
  34. package/dist/components/JsonView/JsonView.js +209 -0
  35. package/dist/components/JsonView/index.js +3 -0
  36. package/dist/components/JsonView/json-view-utils.js +24 -0
  37. package/dist/components/LocaleProvider/ar-sa.js +233 -0
  38. package/dist/components/LocaleProvider/de-de.js +233 -0
  39. package/dist/components/LocaleProvider/es-es.js +233 -0
  40. package/dist/components/LocaleProvider/fr-fr.js +233 -0
  41. package/dist/components/LocaleProvider/index.js +13 -4
  42. package/dist/components/LocaleProvider/it-it.js +233 -0
  43. package/dist/components/LocaleProvider/ja-jp.js +233 -0
  44. package/dist/components/LocaleProvider/ko-kr.js +233 -0
  45. package/dist/components/LocaleProvider/locale.js +53 -4
  46. package/dist/components/LocaleProvider/pt-br.js +233 -0
  47. package/dist/components/LocaleProvider/ru-ru.js +233 -0
  48. package/dist/components/LocaleProvider/useStrings.js +13 -11
  49. package/dist/components/LocaleProvider/zh-cn.js +53 -4
  50. package/dist/components/Masonry/Masonry.js +29 -0
  51. package/dist/components/Masonry/index.js +3 -0
  52. package/dist/components/Masonry/masonry-distribute.js +15 -0
  53. package/dist/components/QRCode/QRCode.js +43 -0
  54. package/dist/components/QRCode/index.js +3 -0
  55. package/dist/components/Result/Result.js +229 -0
  56. package/dist/components/Result/index.js +3 -0
  57. package/dist/components/Select/Select.js +14 -13
  58. package/dist/components/Select/SelectCore.js +27 -26
  59. package/dist/components/Select/SelectFloating.js +76 -68
  60. package/dist/components/Signature/Signature.js +165 -0
  61. package/dist/components/Signature/index.js +3 -0
  62. package/dist/components/Signature/signature-points.js +28 -0
  63. package/dist/components/Sources/Sources.js +109 -0
  64. package/dist/components/Sources/index.js +3 -0
  65. package/dist/components/TagGroup/SortableTagGroup.js +26 -0
  66. package/dist/components/TagGroup/TagGroup.js +7 -21
  67. package/dist/components/TagGroup/TagGroupItem.js +1 -1
  68. package/dist/components/TagGroup/index.js +2 -1
  69. package/dist/components/TagGroup/tag-group-styles.js +7 -0
  70. package/dist/components/TagInput/SortableTagInput.js +24 -0
  71. package/dist/components/TagInput/SortableTagInputCore.js +52 -0
  72. package/dist/components/TagInput/TagInput.js +9 -10
  73. package/dist/components/TagInput/TagInputCore.js +61 -84
  74. package/dist/components/TagInput/index.js +3 -1
  75. package/dist/components/TagInput/tag-input-styles.js +7 -0
  76. package/dist/components/Toast/Toast.js +44 -43
  77. package/dist/components/Tree/Tree.js +184 -121
  78. package/dist/components/Tree/TreeItem.js +91 -57
  79. package/dist/components/Tree/utils.js +57 -1
  80. package/dist/components/TreeSelect/TreeSelect.js +230 -0
  81. package/dist/components/TreeSelect/index.js +3 -0
  82. package/dist/components/Typography/Typography.js +39 -12
  83. package/dist/components/Upload/Upload.js +12 -9
  84. package/dist/components/Upload/UploadCore.js +130 -124
  85. package/dist/components/Upload/UploadList.js +164 -36
  86. package/dist/css/bottom-sheet.css +1 -1
  87. package/dist/css/cascader.css +1 -1
  88. package/dist/css/count-up.css +2 -0
  89. package/dist/css/datepicker.css +1 -1
  90. package/dist/css/descriptions.css +2 -0
  91. package/dist/css/dialog.css +1 -1
  92. package/dist/css/drawer.css +1 -1
  93. package/dist/css/ellipsis.css +2 -0
  94. package/dist/css/file-preview.css +2 -0
  95. package/dist/css/float-button.css +2 -0
  96. package/dist/css/inline-completion.css +2 -0
  97. package/dist/css/json-view.css +2 -0
  98. package/dist/css/masonry.css +2 -0
  99. package/dist/css/qr-code.css +2 -0
  100. package/dist/css/result.css +2 -0
  101. package/dist/css/signature.css +2 -0
  102. package/dist/css/sources.css +2 -0
  103. package/dist/css/tag-group.css +2 -2
  104. package/dist/css/tag-input.css +2 -3
  105. package/dist/css/tokens.css +3 -1
  106. package/dist/css/tree-select.css +3 -0
  107. package/dist/css/tree.css +2 -2
  108. package/dist/css/typography.css +1 -1
  109. package/dist/css/upload.css +1 -1
  110. package/dist/css-manifest.json +34 -0
  111. package/dist/design-tokens/dark.json +355 -0
  112. package/dist/design-tokens/light.json +355 -0
  113. package/dist/haze-ui.css +30 -15
  114. package/dist/headless/index.js +18 -6
  115. package/dist/hooks/useDarkMode.js +27 -0
  116. package/dist/index.js +233 -203
  117. package/dist/mcp-docs.json +9383 -0
  118. package/dist/registry.json +338 -60
  119. package/dist/tokens/brands.js +21 -0
  120. package/dist/tokens/density.js +6 -0
  121. package/dist/tokens/index.js +6 -5
  122. package/dist/tokens/palette.js +63 -55
  123. package/dist/types/components/Cascader/Cascader.d.ts +20 -1
  124. package/dist/types/components/Chart/Chart.d.ts +33 -15
  125. package/dist/types/components/Chart/chart-elements.d.ts +71 -11
  126. package/dist/types/components/Chart/index.d.ts +1 -1
  127. package/dist/types/components/CodeBlock/CodeBlock.d.ts +19 -2
  128. package/dist/types/components/CodeBlock/index.d.ts +1 -1
  129. package/dist/types/components/Combobox/Combobox.d.ts +11 -1
  130. package/dist/types/components/CountUp/CountUp.d.ts +20 -0
  131. package/dist/types/components/CountUp/index.d.ts +2 -0
  132. package/dist/types/components/DataTable/DataTable.d.ts +36 -1
  133. package/dist/types/components/DataTable/csv.d.ts +36 -0
  134. package/dist/types/components/DataTable/features.d.ts +6 -0
  135. package/dist/types/components/DataTable/index.d.ts +2 -0
  136. package/dist/types/components/DateRangePicker/DateRangePicker.d.ts +15 -3
  137. package/dist/types/components/DateRangePicker/index.d.ts +1 -1
  138. package/dist/types/components/DateRangePicker/presets.d.ts +23 -0
  139. package/dist/types/components/Datepicker/Datepicker.d.ts +5 -1
  140. package/dist/types/components/Datepicker/DatepickerCore.d.ts +6 -1
  141. package/dist/types/components/Datepicker/datetime.d.ts +27 -0
  142. package/dist/types/components/Descriptions/Descriptions.d.ts +30 -0
  143. package/dist/types/components/Descriptions/index.d.ts +2 -0
  144. package/dist/types/components/Ellipsis/Ellipsis.d.ts +19 -0
  145. package/dist/types/components/Ellipsis/index.d.ts +2 -0
  146. package/dist/types/components/FilePreview/FilePreview.d.ts +35 -0
  147. package/dist/types/components/FilePreview/file-preview-format.d.ts +20 -0
  148. package/dist/types/components/FilePreview/index.d.ts +2 -0
  149. package/dist/types/components/FloatButton/FloatButton.d.ts +43 -0
  150. package/dist/types/components/FloatButton/FloatButtonGroup.d.ts +33 -0
  151. package/dist/types/components/FloatButton/float-button-context.d.ts +11 -0
  152. package/dist/types/components/FloatButton/float-button-glyphs.d.ts +3 -0
  153. package/dist/types/components/FloatButton/float-button-styles.d.ts +58 -0
  154. package/dist/types/components/FloatButton/index.d.ts +4 -0
  155. package/dist/types/components/InlineCompletion/InlineCompletion.d.ts +29 -0
  156. package/dist/types/components/InlineCompletion/index.d.ts +2 -0
  157. package/dist/types/components/JsonView/JsonView.d.ts +26 -0
  158. package/dist/types/components/JsonView/index.d.ts +2 -0
  159. package/dist/types/components/JsonView/json-view-utils.d.ts +22 -0
  160. package/dist/types/components/LocaleProvider/ar-sa.d.ts +22 -0
  161. package/dist/types/components/LocaleProvider/de-de.d.ts +15 -0
  162. package/dist/types/components/LocaleProvider/es-es.d.ts +15 -0
  163. package/dist/types/components/LocaleProvider/fr-fr.d.ts +15 -0
  164. package/dist/types/components/LocaleProvider/index.d.ts +9 -0
  165. package/dist/types/components/LocaleProvider/it-it.d.ts +15 -0
  166. package/dist/types/components/LocaleProvider/ja-jp.d.ts +13 -0
  167. package/dist/types/components/LocaleProvider/ko-kr.d.ts +15 -0
  168. package/dist/types/components/LocaleProvider/locale.d.ts +55 -0
  169. package/dist/types/components/LocaleProvider/pt-br.d.ts +16 -0
  170. package/dist/types/components/LocaleProvider/ru-ru.d.ts +15 -0
  171. package/dist/types/components/Masonry/Masonry.d.ts +34 -0
  172. package/dist/types/components/Masonry/index.d.ts +2 -0
  173. package/dist/types/components/Masonry/masonry-distribute.d.ts +16 -0
  174. package/dist/types/components/QRCode/QRCode.d.ts +33 -0
  175. package/dist/types/components/QRCode/index.d.ts +2 -0
  176. package/dist/types/components/Result/Result.d.ts +16 -0
  177. package/dist/types/components/Result/index.d.ts +2 -0
  178. package/dist/types/components/Select/Select.d.ts +13 -1
  179. package/dist/types/components/Select/SelectCore.d.ts +10 -1
  180. package/dist/types/components/Select/SelectFloating.d.ts +12 -1
  181. package/dist/types/components/Signature/Signature.d.ts +51 -0
  182. package/dist/types/components/Signature/index.d.ts +2 -0
  183. package/dist/types/components/Signature/signature-points.d.ts +31 -0
  184. package/dist/types/components/Sources/Sources.d.ts +37 -0
  185. package/dist/types/components/Sources/index.d.ts +2 -0
  186. package/dist/types/components/TagGroup/SortableTagGroup.d.ts +21 -0
  187. package/dist/types/components/TagGroup/TagGroup.d.ts +4 -13
  188. package/dist/types/components/TagGroup/index.d.ts +2 -0
  189. package/dist/types/components/TagGroup/tag-group-styles.d.ts +7 -0
  190. package/dist/types/components/TagInput/SortableTagInput.d.ts +33 -0
  191. package/dist/types/components/TagInput/SortableTagInputCore.d.ts +18 -0
  192. package/dist/types/components/TagInput/TagInput.d.ts +1 -8
  193. package/dist/types/components/TagInput/TagInputCore.d.ts +4 -10
  194. package/dist/types/components/TagInput/index.d.ts +4 -0
  195. package/dist/types/components/TagInput/tag-input-styles.d.ts +12 -0
  196. package/dist/types/components/Tree/Tree.d.ts +1 -1
  197. package/dist/types/components/Tree/TreeItem.d.ts +11 -1
  198. package/dist/types/components/Tree/types.d.ts +25 -0
  199. package/dist/types/components/Tree/utils.d.ts +41 -0
  200. package/dist/types/components/TreeSelect/TreeSelect.d.ts +93 -0
  201. package/dist/types/components/TreeSelect/index.d.ts +2 -0
  202. package/dist/types/components/Typography/Typography.d.ts +12 -3
  203. package/dist/types/components/Typography/index.d.ts +1 -1
  204. package/dist/types/components/Upload/Upload.d.ts +10 -1
  205. package/dist/types/components/Upload/UploadCore.d.ts +21 -1
  206. package/dist/types/components/Upload/UploadList.d.ts +8 -2
  207. package/dist/types/headless/index.d.ts +221 -4
  208. package/dist/types/hooks/index.d.ts +2 -0
  209. package/dist/types/hooks/useDarkMode.d.ts +40 -0
  210. package/dist/types/index.d.ts +42 -12
  211. package/dist/types/tokens/brands.d.ts +28 -0
  212. package/dist/types/tokens/density.d.ts +3 -0
  213. package/dist/types/tokens/index.d.ts +1 -0
  214. package/dist/types/tokens/palette.d.ts +38 -1
  215. package/dist/types/tokens/spacing.d.ts +13 -0
  216. package/dist/types/utils/sortable-handle.d.ts +25 -0
  217. package/dist/types/utils/sortable-shared.d.ts +15 -27
  218. package/dist/utils/sortable-handle.js +12 -0
  219. package/dist/utils/sortable-shared.js +8 -16
  220. package/dist/utils/sortable.js +2 -1
  221. package/dist/utils/submenu.js +7 -5
  222. package/mcp/index.mjs +64 -0
  223. package/mcp/server.mjs +89 -0
  224. package/mcp/server.test.mjs +281 -0
  225. package/mcp/tools.mjs +240 -0
  226. package/package.json +123 -45
package/README.md CHANGED
@@ -129,30 +129,30 @@ checklist:
129
129
 
130
130
  ### Dependencies
131
131
 
132
- haze-ui ships two runtime dependencies — `react-use-control`, the engine
133
- behind `ControlOrValue<T>`, and `react-f0rm` (^1.3), the form engine
134
- behind `FormItem`/`FormList` (the same author's headless form store).
135
- Five integrations remain optional peers, installed only when you use the
136
- components that need them:
137
-
138
- ```sh
139
- npm i @tanstack/react-table # DataTable (peer range ^9.2.4)
140
- npm i recharts # Chart (peer range ^3.10.1)
141
- npm i @dnd-kit/core @dnd-kit/sortable \
142
- @dnd-kit/utilities # TagInput/TagGroup sortable
143
- # (^6.3.1 / ^10.0.0 / ^3.2.2)
144
- ```
145
-
146
- Everything else — `Button`, `Input`, `Dialog`, `Select`, … — runs with
147
- nothing beyond `react` and the two runtime dependencies. The dist is ESM
148
- with `preserveModules` and side-effect-free JS, so bundlers (Next.js,
149
- Vite, webpack, Turbopack, Rollup) tree-shake the unused re-export chains
150
- and never resolve peers you haven't installed: `import { Button } from
151
- 'haze-ui'` works without `@tanstack/react-table`. Only bundler-less
152
- consumers (bare Node ESM importing the barrel, which links the module
153
- graph eagerly) must install the optional peers; the
154
- `haze-ui/components/DataTable` and `haze-ui/components/Chart` subpaths
155
- bypass the barrel entirely.
132
+ haze-ui declares only the host environment as peers: `react` and
133
+ `react-dom` (^19). Everything else is a regular dependency — one
134
+ `npm i haze-ui` and every component works:
135
+
136
+ - `react-use-control` — the engine behind `ControlOrValue<T>`
137
+ - `react-f0rm` (^1.3) — the form engine behind `FormItem`/`FormList`
138
+ (the same author's headless form store)
139
+ - `@tanstack/react-table` — DataTable
140
+ - `recharts` — Chart
141
+ - `@dnd-kit/core` / `@dnd-kit/sortable` / `@dnd-kit/utilities` — the
142
+ sortable TagInput/TagGroup variants
143
+ - `qrcode` — QRCode
144
+
145
+ Swapping any of these engines for another library is invisible to your
146
+ code (the one deliberate exception: DataTable's column API exposes
147
+ TanStack's `ColumnDef` types). The dist is ESM with `preserveModules`
148
+ and side-effect-free JS, and engines are imported only by the components
149
+ that need them, so bundlers (Next.js, Vite, webpack, Turbopack, Rollup)
150
+ tree-shake the unused re-export chains: `import { Button } from
151
+ 'haze-ui'` never pulls `@tanstack/react-table` into the bundle. Engines
152
+ install as regular dependencies, so even bundler-less consumers (bare
153
+ Node ESM importing the barrel, which links the module graph eagerly)
154
+ work with zero manual installs; the `haze-ui/components/DataTable` and
155
+ `haze-ui/components/Chart` subpaths bypass the barrel entirely.
156
156
 
157
157
  ### Browser support
158
158
 
@@ -393,16 +393,18 @@ user-controllable, SSR/jsdom-safe when the underlying API is missing.
393
393
  | `useTitle(title)` | — | Document title while mounted |
394
394
  | `useToast()` | toast API | Requires a `ToastContainer` ancestor |
395
395
 
396
- ## Sortable tags and chips (optional dnd-kit peers)
396
+ ## Sortable tags and chips
397
397
 
398
- `TagInput` and `TagGroup` accept `sortable?: boolean` — opt-in drag
399
- reordering powered by `@dnd-kit/core` / `@dnd-kit/sortable` /
400
- `@dnd-kit/utilities` (optional peers, same tree-shaking contract as
401
- recharts and TanStack Table). `TagInput` writes the new array through
402
- `onChange`; `TagGroup` reports `onReorder(nextOrder)` (the new
403
- arrangement of original child indexes) and leaves re-rendering to the
404
- parent. Sorting is keyboard-complete: focus a tag, `Space` to lift,
405
- arrows to move, `Space` to drop, `Escape` to cancel.
398
+ Drag reordering is an opt-in variant: `SortableTagInput` /
399
+ `SortableTagInputCore` and `SortableTagGroup` statically import
400
+ `@dnd-kit/core` / `@dnd-kit/sortable` / `@dnd-kit/utilities` (regular
401
+ dependencies — the plain `TagInput`/`TagGroup` never touch them, so they
402
+ stay out of every bundle that doesn't import a Sortable variant).
403
+ `SortableTagInput` writes the new array through `onChange`;
404
+ `SortableTagGroup` reports `onReorder(nextOrder)` (the new arrangement of
405
+ original child indexes) and leaves re-rendering to the parent. Sorting is
406
+ keyboard-complete: focus a tag, `Space` to lift, arrows to move, `Space`
407
+ to drop, `Escape` to cancel.
406
408
 
407
409
  ## Imperative overlay handles
408
410
 
@@ -544,6 +546,52 @@ own css manifest. The same items are also installable straight from this
544
546
  GitHub repository — see
545
547
  [Install via shadcn CLI (GitHub registry)](#install-via-shadcn-cli-github-registry).
546
548
 
549
+ ## AI / MCP
550
+
551
+ **`haze-ui-mcp`** — an [MCP server](https://modelcontextprotocol.io) that puts the
552
+ whole component reference in your AI coding agent's tool belt. It serves the
553
+ same docs the site renders (props tables with types/defaults/descriptions,
554
+ import statements, CSS paths, peer deps, the full token registry), so the
555
+ agent never guesses a prop name or a stylesheet path again:
556
+
557
+ | Tool | What it returns |
558
+ | --- | --- |
559
+ | `haze_list_components` | Every component with its css family |
560
+ | `haze_get_component` | One component's full reference — props tables, import statement, CSS imports. Name matching is case-insensitive and accepts kebab-case (`data-table`) or PascalCase (`DataTable`) |
561
+ | `haze_get_tokens` | The `--haze-*` token registry with light and dark values, optionally filtered by category (`color`, `typography`, `spacing`, `radius`, `shadow`) |
562
+ | `haze_search_docs` | Top-10 ranked matches across component names, css families, prop names and descriptions |
563
+
564
+ **Claude Code**:
565
+
566
+ ```sh
567
+ claude mcp add haze-ui -- npx haze-ui-mcp
568
+ ```
569
+
570
+ **Cursor** (`.cursor/mcp.json`):
571
+
572
+ ```json
573
+ {
574
+ "mcpServers": {
575
+ "haze-ui": {
576
+ "command": "npx",
577
+ "args": ["haze-ui-mcp"]
578
+ }
579
+ }
580
+ }
581
+ ```
582
+
583
+ The server speaks stdio JSON-RPC and ships its own docs snapshot
584
+ (`dist/mcp-docs.json`, regenerated on every build by
585
+ `scripts/generate-mcp-docs.mjs`) — no project access, no indexing on startup.
586
+ In this repository you can run it directly against the local snapshot:
587
+
588
+ ```sh
589
+ node scripts/generate-mcp-docs.mjs
590
+ node mcp/index.mjs
591
+ ```
592
+
593
+ Point it at a custom snapshot with `HAZE_UI_MCP_DOCS=/path/to/mcp-docs.json`.
594
+
547
595
  ## AI runtime integration (Vercel AI SDK `useChat`)
548
596
 
549
597
  haze-ui ships the agent chat surface as **presentational** components —