@cueplusplus/ui 0.9.0 → 0.10.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 (314) hide show
  1. package/CHANGELOG.md +195 -0
  2. package/README.md +91 -9
  3. package/dist/index.d.ts +4 -3
  4. package/dist/index.js +4 -2
  5. package/dist/instruments/meter.d.ts +5 -1
  6. package/dist/layout/bento.d.ts +144 -0
  7. package/dist/layout/bento.js +266 -0
  8. package/dist/layout/index.d.ts +3 -2
  9. package/dist/layout/index.js +3 -2
  10. package/dist/primitives/button.d.ts +12 -0
  11. package/dist/primitives/chip.d.ts +1 -1
  12. package/dist/system/index.d.ts +2 -2
  13. package/dist/system/index.js +2 -1
  14. package/dist/system/overrides.d.ts +38 -1
  15. package/dist/system/overrides.js +40 -1
  16. package/manifest/components/accordion.json +24 -6
  17. package/manifest/components/activity-graph.json +20 -5
  18. package/manifest/components/agent-card.json +37 -9
  19. package/manifest/components/agent-handoff.json +21 -5
  20. package/manifest/components/agent-mode-badge.json +22 -4
  21. package/manifest/components/agent-pile.json +38 -8
  22. package/manifest/components/agent-plan.json +9 -2
  23. package/manifest/components/agent-status.json +17 -3
  24. package/manifest/components/agent-surface.json +26 -11
  25. package/manifest/components/alert-dialog.json +29 -5
  26. package/manifest/components/animated-number.json +14 -6
  27. package/manifest/components/app-bar.json +66 -13
  28. package/manifest/components/app-shell.json +133 -31
  29. package/manifest/components/app-window-frame.json +28 -6
  30. package/manifest/components/approval-card.json +37 -7
  31. package/manifest/components/artifact-card.json +16 -4
  32. package/manifest/components/ask-box.json +99 -21
  33. package/manifest/components/audience-icon.json +1 -7
  34. package/manifest/components/autocomplete.json +80 -18
  35. package/manifest/components/avatar-group.json +13 -2
  36. package/manifest/components/avatar.json +22 -4
  37. package/manifest/components/background-inbox.json +9 -2
  38. package/manifest/components/bento.json +306 -0
  39. package/manifest/components/branch-picker.json +29 -7
  40. package/manifest/components/breadcrumb.json +13 -3
  41. package/manifest/components/button-group.json +21 -4
  42. package/manifest/components/button.json +41 -4
  43. package/manifest/components/canvas-split-body.json +4 -1
  44. package/manifest/components/canvas-split-header.json +17 -4
  45. package/manifest/components/canvas-split-line.json +4 -1
  46. package/manifest/components/canvas-split-message.json +8 -1
  47. package/manifest/components/card.json +14 -3
  48. package/manifest/components/carousel.json +54 -12
  49. package/manifest/components/catalogue-icon.json +1 -7
  50. package/manifest/components/channel-beta-icon.json +1 -7
  51. package/manifest/components/channel-matrix.json +80 -15
  52. package/manifest/components/channel-released-icon.json +1 -7
  53. package/manifest/components/chart-container.json +26 -10
  54. package/manifest/components/chart-ramp.json +13 -3
  55. package/manifest/components/chart-swatch.json +9 -2
  56. package/manifest/components/chart-tooltip-content.json +31 -7
  57. package/manifest/components/chart.json +30 -6
  58. package/manifest/components/chat-panel-composer.json +9 -2
  59. package/manifest/components/checkbox-group.json +4 -2
  60. package/manifest/components/checkbox.json +17 -4
  61. package/manifest/components/checkpoint-history.json +13 -3
  62. package/manifest/components/chip.json +35 -5
  63. package/manifest/components/clamp.json +30 -7
  64. package/manifest/components/cli-tool-icon.json +1 -7
  65. package/manifest/components/code-diff.json +20 -5
  66. package/manifest/components/code-runner.json +32 -6
  67. package/manifest/components/collapsible.json +16 -4
  68. package/manifest/components/color-area.json +4 -1
  69. package/manifest/components/color-field.json +13 -3
  70. package/manifest/components/color-picker.json +75 -17
  71. package/manifest/components/color-slider.json +12 -3
  72. package/manifest/components/color-swatch.json +13 -2
  73. package/manifest/components/colors-section.json +8 -4
  74. package/manifest/components/combobox.json +81 -18
  75. package/manifest/components/command-palette.json +57 -13
  76. package/manifest/components/compaction-row.json +35 -7
  77. package/manifest/components/comparison-card.json +17 -4
  78. package/manifest/components/composer-attachment-chip.json +9 -2
  79. package/manifest/components/composer-bar.json +4 -1
  80. package/manifest/components/composer-command-item.json +8 -2
  81. package/manifest/components/composer-context.json +4 -1
  82. package/manifest/components/composer-input.json +5 -1
  83. package/manifest/components/composer-menu-item.json +4 -1
  84. package/manifest/components/composer-menu.json +12 -2
  85. package/manifest/components/composer-model-item.json +8 -2
  86. package/manifest/components/composer-model-trigger.json +8 -2
  87. package/manifest/components/composer-person-item.json +8 -2
  88. package/manifest/components/composer-send.json +8 -2
  89. package/manifest/components/composer-voice-button.json +4 -1
  90. package/manifest/components/composer-voice.json +8 -2
  91. package/manifest/components/composer.json +76 -17
  92. package/manifest/components/computer-use.json +17 -4
  93. package/manifest/components/confidence-marker.json +13 -3
  94. package/manifest/components/connection-state.json +23 -4
  95. package/manifest/components/container.json +14 -2
  96. package/manifest/components/context-breakdown.json +8 -2
  97. package/manifest/components/context-menu.json +16 -4
  98. package/manifest/components/context-usage.json +16 -4
  99. package/manifest/components/conversation-search.json +22 -5
  100. package/manifest/components/copy-button.json +32 -7
  101. package/manifest/components/cost-meter.json +12 -3
  102. package/manifest/components/cue-logotype.json +17 -3
  103. package/manifest/components/cue-mark.json +17 -3
  104. package/manifest/components/cue-portal-frame.json +13 -3
  105. package/manifest/components/data-row.json +21 -7
  106. package/manifest/components/data-table-pagination.json +18 -4
  107. package/manifest/components/data-table-toolbar.json +30 -7
  108. package/manifest/components/data-tree.json +42 -9
  109. package/manifest/components/date-field.json +13 -2
  110. package/manifest/components/date-picker.json +81 -19
  111. package/manifest/components/date-range-picker.json +81 -19
  112. package/manifest/components/day-separator.json +4 -1
  113. package/manifest/components/delegation-card.json +64 -12
  114. package/manifest/components/density.json +24 -4
  115. package/manifest/components/description-list.json +8 -1
  116. package/manifest/components/diagram.json +33 -7
  117. package/manifest/components/dialog.json +29 -6
  118. package/manifest/components/disclosure.json +31 -7
  119. package/manifest/components/dmx-bar.json +16 -4
  120. package/manifest/components/dmx-strip.json +20 -5
  121. package/manifest/components/document-reference.json +21 -5
  122. package/manifest/components/draft-restore.json +18 -4
  123. package/manifest/components/drawer.json +30 -6
  124. package/manifest/components/dropdown-menu.json +55 -10
  125. package/manifest/components/edit-message.json +32 -7
  126. package/manifest/components/elements-command-palette.json +27 -6
  127. package/manifest/components/elements-data-table.json +9 -2
  128. package/manifest/components/elements-timeline.json +8 -2
  129. package/manifest/components/elicitation-form.json +31 -6
  130. package/manifest/components/empty-state-composer.json +9 -2
  131. package/manifest/components/empty-state-suggestion.json +4 -1
  132. package/manifest/components/empty-state.json +25 -5
  133. package/manifest/components/end-of-turn-summary.json +16 -4
  134. package/manifest/components/env-var-input.json +54 -12
  135. package/manifest/components/error-state.json +17 -4
  136. package/manifest/components/export-dialog.json +27 -8
  137. package/manifest/components/eyebrow.json +4 -1
  138. package/manifest/components/feedback-dialog.json +33 -7
  139. package/manifest/components/field-description.json +4 -1
  140. package/manifest/components/field-error.json +13 -3
  141. package/manifest/components/field-label.json +4 -1
  142. package/manifest/components/field.json +4 -1
  143. package/manifest/components/file-tree.json +16 -4
  144. package/manifest/components/file-upload.json +58 -13
  145. package/manifest/components/flow-graph.json +12 -3
  146. package/manifest/components/folder-icon.json +1 -7
  147. package/manifest/components/footer.json +24 -4
  148. package/manifest/components/frac.json +10 -2
  149. package/manifest/components/generation-loader.json +17 -3
  150. package/manifest/components/generative-ui.json +39 -7
  151. package/manifest/components/grid.json +56 -5
  152. package/manifest/components/group-bar.json +25 -6
  153. package/manifest/components/guardrail-notice.json +22 -5
  154. package/manifest/components/hover-card.json +45 -8
  155. package/manifest/components/icon-button.json +22 -4
  156. package/manifest/components/image-generation.json +8 -2
  157. package/manifest/components/info-tip.json +42 -7
  158. package/manifest/components/inline-citation.json +14 -3
  159. package/manifest/components/input-group.json +24 -5
  160. package/manifest/components/input.json +13 -3
  161. package/manifest/components/item.json +42 -8
  162. package/manifest/components/job-progress.json +25 -6
  163. package/manifest/components/launcher-bubble.json +32 -7
  164. package/manifest/components/ledger.json +87 -19
  165. package/manifest/components/link.json +16 -3
  166. package/manifest/components/live-region-announcer.json +21 -5
  167. package/manifest/components/log-viewer.json +42 -10
  168. package/manifest/components/map-answer.json +17 -4
  169. package/manifest/components/markdown-text.json +36 -5
  170. package/manifest/components/math-block.json +12 -3
  171. package/manifest/components/mcp-server-icon.json +1 -7
  172. package/manifest/components/mcp-server-panel.json +18 -4
  173. package/manifest/components/memory-chips.json +9 -2
  174. package/manifest/components/menubar.json +33 -7
  175. package/manifest/components/message-actions.json +32 -7
  176. package/manifest/components/message-attachments.json +9 -2
  177. package/manifest/components/message-branches.json +14 -3
  178. package/manifest/components/message-list.json +27 -6
  179. package/manifest/components/message-pair.json +25 -5
  180. package/manifest/components/message-queue.json +13 -3
  181. package/manifest/components/message-timing.json +8 -2
  182. package/manifest/components/message.json +41 -9
  183. package/manifest/components/meter.json +43 -7
  184. package/manifest/components/mobile-composer.json +47 -10
  185. package/manifest/components/model-picker.json +13 -3
  186. package/manifest/components/multi-select.json +78 -17
  187. package/manifest/components/musical-time-input.json +34 -8
  188. package/manifest/components/navigation-menu.json +54 -12
  189. package/manifest/components/node-card.json +42 -7
  190. package/manifest/components/node-handle.json +17 -2
  191. package/manifest/components/number-field.json +28 -6
  192. package/manifest/components/number-ticker.json +8 -2
  193. package/manifest/components/onboarding.json +18 -4
  194. package/manifest/components/otp-field.json +43 -10
  195. package/manifest/components/page-shell.json +35 -6
  196. package/manifest/components/pagination.json +21 -5
  197. package/manifest/components/panel-header.json +15 -3
  198. package/manifest/components/password-input.json +38 -8
  199. package/manifest/components/permission-grant.json +28 -5
  200. package/manifest/components/permission-scopes.json +57 -12
  201. package/manifest/components/piano-keyboard.json +38 -9
  202. package/manifest/components/plussie.json +34 -5
  203. package/manifest/components/popover.json +45 -8
  204. package/manifest/components/preset-section.json +12 -5
  205. package/manifest/components/progress.json +25 -6
  206. package/manifest/components/prompt-library.json +27 -6
  207. package/manifest/components/queue-dock.json +36 -8
  208. package/manifest/components/quota-banner.json +25 -6
  209. package/manifest/components/quote-reply.json +29 -7
  210. package/manifest/components/radio-group.json +12 -2
  211. package/manifest/components/radio.json +17 -3
  212. package/manifest/components/rating.json +60 -13
  213. package/manifest/components/read-aloud.json +35 -8
  214. package/manifest/components/reasoning-effort.json +17 -4
  215. package/manifest/components/reasoning-panel.json +33 -8
  216. package/manifest/components/recommendation-card.json +35 -10
  217. package/manifest/components/regenerate-menu.json +22 -5
  218. package/manifest/components/replay-player.json +29 -7
  219. package/manifest/components/research-report.json +12 -3
  220. package/manifest/components/resizable.json +4 -1
  221. package/manifest/components/retrieval-chunks.json +16 -4
  222. package/manifest/components/revert-dock.json +61 -14
  223. package/manifest/components/reviewable-diff.json +23 -5
  224. package/manifest/components/risk-badge.json +18 -3
  225. package/manifest/components/row.json +17 -4
  226. package/manifest/components/schedule-card.json +25 -6
  227. package/manifest/components/score-breakdown.json +20 -5
  228. package/manifest/components/scroll-anchor.json +13 -3
  229. package/manifest/components/scroll-area.json +31 -8
  230. package/manifest/components/scrollable-tabs-list.json +12 -4
  231. package/manifest/components/scrub-input.json +84 -18
  232. package/manifest/components/seam-cell.json +19 -3
  233. package/manifest/components/seam-grid.json +12 -3
  234. package/manifest/components/search-input.json +49 -10
  235. package/manifest/components/section-header.json +36 -8
  236. package/manifest/components/segmented-control.json +50 -11
  237. package/manifest/components/select.json +74 -16
  238. package/manifest/components/separator.json +4 -1
  239. package/manifest/components/settings-panel.json +41 -9
  240. package/manifest/components/shape-section.json +8 -4
  241. package/manifest/components/shared-conversation.json +21 -5
  242. package/manifest/components/sheet.json +29 -6
  243. package/manifest/components/shimmer-label.json +4 -2
  244. package/manifest/components/sidebar.json +60 -13
  245. package/manifest/components/skill-icon.json +1 -7
  246. package/manifest/components/slider.json +22 -5
  247. package/manifest/components/sources.json +17 -4
  248. package/manifest/components/sparkline.json +17 -4
  249. package/manifest/components/speaker-identity.json +4 -1
  250. package/manifest/components/spec-sheet.json +16 -4
  251. package/manifest/components/spectrum-visualizer.json +41 -10
  252. package/manifest/components/spinner.json +12 -2
  253. package/manifest/components/stack-icon.json +1 -7
  254. package/manifest/components/stack.json +54 -7
  255. package/manifest/components/stacks-matrix-icon.json +1 -7
  256. package/manifest/components/stat.json +28 -4
  257. package/manifest/components/status-bar.json +50 -9
  258. package/manifest/components/status-dot.json +23 -4
  259. package/manifest/components/stepper.json +22 -5
  260. package/manifest/components/stopped-run.json +19 -4
  261. package/manifest/components/streaming-text.json +12 -3
  262. package/manifest/components/subagent-list.json +21 -5
  263. package/manifest/components/suggestions.json +27 -5
  264. package/manifest/components/swap-label.json +18 -4
  265. package/manifest/components/switch.json +18 -3
  266. package/manifest/components/table-scroll-region.json +4 -1
  267. package/manifest/components/table.json +54 -11
  268. package/manifest/components/tabs.json +16 -5
  269. package/manifest/components/tags-input.json +79 -17
  270. package/manifest/components/tail-status.json +37 -8
  271. package/manifest/components/terminal-block.json +25 -5
  272. package/manifest/components/terminal-frame.json +34 -8
  273. package/manifest/components/textarea.json +8 -3
  274. package/manifest/components/theme-configurator.json +47 -11
  275. package/manifest/components/theme-provider.json +79 -15
  276. package/manifest/components/thinking-indicator.json +8 -2
  277. package/manifest/components/thread-list.json +13 -3
  278. package/manifest/components/thread-search.json +22 -5
  279. package/manifest/components/threshold-rail.json +77 -14
  280. package/manifest/components/time-boundary.json +8 -2
  281. package/manifest/components/time-field.json +13 -2
  282. package/manifest/components/timeline-ruler.json +51 -12
  283. package/manifest/components/timeline.json +19 -3
  284. package/manifest/components/title-bar.json +19 -4
  285. package/manifest/components/toast.json +12 -3
  286. package/manifest/components/todo-list.json +8 -2
  287. package/manifest/components/toggle-group.json +33 -7
  288. package/manifest/components/toggle.json +23 -4
  289. package/manifest/components/token-editor.json +26 -7
  290. package/manifest/components/tool-call-card.json +83 -16
  291. package/manifest/components/tool-call.json +37 -9
  292. package/manifest/components/tool-error.json +34 -8
  293. package/manifest/components/tool-group.json +17 -4
  294. package/manifest/components/tool-timeline.json +37 -9
  295. package/manifest/components/toolbar.json +37 -8
  296. package/manifest/components/tooltip.json +41 -7
  297. package/manifest/components/trace-waterfall.json +12 -3
  298. package/manifest/components/tree-visibility-toggle.json +18 -3
  299. package/manifest/components/tree.json +52 -11
  300. package/manifest/components/turn-footer.json +36 -8
  301. package/manifest/components/two-step-button.json +46 -9
  302. package/manifest/components/typing-indicator.json +8 -1
  303. package/manifest/components/universe-grid.json +37 -10
  304. package/manifest/components/unread-divider.json +4 -1
  305. package/manifest/components/usage-chart.json +46 -9
  306. package/manifest/components/verdict-row.json +20 -5
  307. package/manifest/components/voice-conversation.json +37 -7
  308. package/manifest/components/web-preview.json +23 -5
  309. package/manifest/components/web-search.json +20 -5
  310. package/manifest/components/work-collapse.json +30 -7
  311. package/manifest/fixtures.json +106 -0
  312. package/manifest/manifest.json +315 -297
  313. package/manifest/tokens.json +2 -2
  314. package/package.json +7 -6
package/CHANGELOG.md CHANGED
@@ -1,5 +1,181 @@
1
1
  # @cueplusplus/ui
2
2
 
3
+ ## 0.10.0
4
+
5
+ ### Minor Changes
6
+
7
+ - ddce99e: `@cueplusplus/ui/layout` — and the root barrel with it — now exports `Bento`, a grid of unequal
8
+ tiles whose span is a prop on the tile rather than a class you count out on the container.
9
+
10
+ **Nothing to do: it is a new export, and nothing that already compiled changed.** Adopt it where
11
+ you were writing a bare grid and hand-counting `col-span-*`:
12
+
13
+ ```tsx
14
+ import { Bento } from "@cueplusplus/ui/layout";
15
+
16
+ <Bento.Root cols={3} rows={2} gap={5}>
17
+ <Bento.Tile span={2} rowSpan={2} minHeight="hero" title="Kitchen sink">
18
+ Every component, on one page.
19
+ </Bento.Tile>
20
+ <Bento.Tile href="/docs/components" title="Components">
21
+ Props, variants and a live example.
22
+ </Bento.Tile>
23
+ </Bento.Root>;
24
+ ```
25
+
26
+ `Bento.Root` takes `cols` (2, 3 or 4; defaults to 3), `rows` (1–4), `dense`, and a `gap` off the
27
+ density space ladder (defaults to `4`). `Bento.Tile` takes a `span` (1–4) and a `rowSpan` (1–2)
28
+ from closed sets, plus `minHeight`, `eyebrow`, `title` and `meta`. The container clamps every span
29
+ to its own tracks on the way past — the columns always, and the rows wherever it declared any. The
30
+ column clamp is per breakpoint, because every bento is two tracks wide between 640 px and 1024 px
31
+ whatever it was asked for, and CSS Grid answers an over-wide span by growing an implicit track
32
+ rather than by refusing it.
33
+
34
+ Two things a props table cannot show you, both of them compile-time where a compiler can reach:
35
+
36
+ - **A tile is one thing or the other, in the type.** Either a **link** — `href`, optionally with
37
+ `render`, a router's own element which is cloned, keeps its own `href` because `next/link`
38
+ requires it to declare one, and has its `className` merged with the tile's rather than replaced
39
+ — whose whole surface is a single `<a>` and whose content is therefore static. Or a **panel**,
40
+ whose children may be live and whose link or control is a visible sibling in `action`. `href`
41
+ and `action` are mutually exclusive in the type, and a dev-time `console.error` names any tile
42
+ that puts an interactive child inside an anchor.
43
+ - **Static markup throughout** — no hooks and no `"use client"` — so a server component can draw a
44
+ bento without opening a client boundary. That is why the router escape hatch is an element to
45
+ clone rather than a render function: a directive is per module, and the hook that reads a render
46
+ function is a hook.
47
+
48
+ `manifest/manifest.json` and the new `manifest/components/bento.json` were regenerated with it.
49
+
50
+ - 16d2cae: `@cueplusplus/ui/system` now exports `isSafeTokenValue(value: string): boolean` — whether a string
51
+ may be written into the density stylesheet `ThemeProvider` builds from its `overrides` prop.
52
+
53
+ **Nothing to do.** Nothing about that stylesheet changed: this is the rule `overridesCss()` has
54
+ always applied, exported. Adopt it if you assemble a `TokenOverrides` out of anything a person or
55
+ an API supplies, so a value is refused at your own input rather than discovered from a
56
+ `console.warn` one render later, with half of what you built never having reached the sheet:
57
+
58
+ ```ts
59
+ import {
60
+ isSafeTokenValue,
61
+ type TokenOverrides,
62
+ } from "@cueplusplus/ui/system";
63
+
64
+ isSafeTokenValue("Iosevka, monospace"); // → true
65
+ isSafeTokenValue("red;}"); // → false
66
+ ```
67
+
68
+ It lands against `./system`'s standing policy — that the prop's _shape_ is public while
69
+ `inlineOverrides()`, `overridesCss()` and `OverridesContext` stay internal, because a consumer
70
+ reaching for those would be writing the custom properties by hand — and it lands on the right side
71
+ of it: a _writer_ of custom properties is what the policy excludes, and a _reader_ that refuses a
72
+ value before it is ever written is the opposite of one. `@cueplusplus/ui/configurator`'s
73
+ `isSafeCssValue` is unchanged and unmoved; it is the same rule behind a subpath that also carries
74
+ `ThemeConfigurator`, `ExportDialog` and an optional `react-aria-components` peer, and a caller
75
+ that only wants the question answered should not have to take that graph to ask it.
76
+
77
+ - 88cf751: The component manifest's `schemaVersion` is now `2`, and every `PropDoc` in it — root props and
78
+ every compound part's props alike — carries a required `control`: `{ kind, members?, min?, max?,
79
+ nullable?, fixture? }`, where `kind` is one of `boolean`, `enum`, `number`, `string`, `node`,
80
+ `callback`, `array`, `object` or `opaque`. It answers the question `type` never could: _what edits
81
+ this prop_.
82
+
83
+ **What a reader of `manifest.json` must change: the version pin, and nothing else.** A consumer
84
+ that asserts `schemaVersion === 1` will reject every document this release publishes and has to
85
+ move to `2`; a consumer that ignores the field keeps working once the pin moves. Both published
86
+ manifests (`manifest/manifest.json` and every document under `manifest/components/`) were
87
+ regenerated, as was `manifest/tokens.json`, whose `schemaVersion` moves with them — so all three
88
+ have to be read at the same version.
89
+
90
+ A `variant` prop's `members` are its `cva` recipe's, in the recipe's order; a numeric literal union
91
+ carries its own `min`/`max`, and a prop whose JSDoc states a range with `@min`/`@max` carries that;
92
+ a union with an explicit `| null` is `nullable`.
93
+
94
+ ## Migrating
95
+ - **`type` is unchanged.** It still prints the TypeScript type verbatim, literal unions included,
96
+ and it is still the field to render when a reader wants to know what a prop _is_. `control` is a
97
+ new field beside it, not a replacement for it: nothing was renamed and nothing was removed.
98
+ - **A consumer pinned to `schemaVersion === 1` must move to `2`.** The number changed because
99
+ `control` is _required_: a consumer that reads it needs to know whether the document it fetched
100
+ has one, and an optional field could never tell it — absent would mean both "no control" and
101
+ "an older manifest". A consumer that ignores the field keeps working after changing the pin.
102
+
103
+ ### Patch Changes
104
+
105
+ - c469f49: `Button` now **declares** `children` in `ButtonProps`, so the published manifest documents it and
106
+ the props table has a row for it.
107
+
108
+ **Nothing to do.** The component did not change — it has always taken children, through
109
+ `React.ComponentPropsWithoutRef<"button">`. What changed is what the package says about itself:
110
+ docgen documents a prop only where the library declares it, so the system's most used control
111
+ published no `children` at all. The page did not list it, and a propSet could not name it, which
112
+ is how `/play/button` came to preview an unlabelled `<button>` behind a standing accessibility
113
+ exemption. Declaring it is what lets that exemption expire.
114
+
115
+ If you read `manifest/components/button.json` to generate code or to drive a playground,
116
+ `children` is now in `props` and can be set like any other prop.
117
+
118
+ - 481e8c5: `manifest/components/ledger.json` said `Ledger` could not fold. It can, and the note now says so.
119
+
120
+ **Nothing to do unless you read the manifest.** No API changed, no component moved, and nothing
121
+ you have written needs editing. The documentation that ships inside the package described the
122
+ plain bench as having "no disclosure anywhere — the ledger does not collapse", which was true
123
+ before 0.8.0 and false in it: `collapsible` puts a real
124
+ `button[aria-expanded aria-controls]` inside the `h2`/`h3` and folds the run of rows below it.
125
+
126
+ The corrected note says what shipped — folding is opt-in per heading, and a ledger nobody asks to
127
+ fold still emits no control and no expansion state at all. The manifest is the only published
128
+ surface this touches.
129
+
130
+ - 64b4bab: Every package manifest's `repository` field now names `cueplusplus/cue-ui`, following the
131
+ repository's rename from an earlier working title.
132
+
133
+ **Nothing to do.** No code, no exports, no types, and no package name: the scope is the
134
+ organisation, not the repository, so every specifier you already import is the one you keep
135
+ importing. What moves is metadata — GitHub Packages matches a package to a repository through that
136
+ field, so from this release the "source" link on each package's registry page, and the repository
137
+ the next publish is attributed to, name `cue-ui`. The `directory` beside it is unchanged, so each
138
+ link still lands on that package rather than on the monorepo root.
139
+
140
+ If you have a bookmark or a script pointing at the old URL, GitHub's rename redirect answers it;
141
+ updating it to `https://github.com/cueplusplus/cue-ui` is tidiness rather than repair.
142
+
143
+ - 3471a15: `tokensUsed` in the published component manifest is now scanned from code rather than from bytes,
144
+ so it stops attributing tokens to components that never resolve them.
145
+
146
+ **What to do: re-read the manifest before you trust a `tokensUsed` list you cached.** No API
147
+ changed and nothing you render moves, but the manifest says something different about 48 of 321
148
+ components, and the old answer was padded — in thirteen cases wholly wrong. If you read
149
+ `tokensUsed` to decide which tokens to define when restyling a component, the list you had was
150
+ too wide. It is narrower now, and true.
151
+
152
+ The scanner matched `--cue-*` anywhere in a file's text, comments included. A docblock sentence
153
+ naming a token published it as one the component uses, and a sentence arguing _against_ one
154
+ published the opposite of what it said: `forms/_chassis.ts` explains that the ring reads
155
+ `--cue-focus`, **not** `--cue-accent`, and eleven controls on that chassis published
156
+ `--cue-accent` because of it.
157
+
158
+ What moved, exactly:
159
+
160
+ - **Thirty-four components lose one to four tokens they never painted.**
161
+ - **Thirteen now correctly publish none** — `agent-surface`, `animated-number`,
162
+ `chart-container` and the ten container icons — because their lists were comment-derived in
163
+ their entirety: they paint through classes rather than resolving custom properties by name, and
164
+ the ten icons render no `className` at all. An empty array renders as no Tokens section rather
165
+ than an empty one, which is what the four components that already shipped one do.
166
+ - **One gains four.** `MarkdownText` painted `--cue-accent`, `--cue-fg`, `--cue-fg-muted` and
167
+ `--cue-fg-subtle` and published none of them: the literal pass pairs quotes across the whole
168
+ file, and the apostrophes in that file's prose desynced the pairing so the class strings below
169
+ were read as the insides of strings. Blanking the comments re-pairs them.
170
+ - **Two entries that were never tokens are gone**, `--cue-icon-` and `--cue-space-`: the regex had
171
+ been stopping at the `*` in `--cue-icon-*` and the `$` in `gap-(--cue-space-${n})`.
172
+
173
+ - Updated dependencies [64b4bab]
174
+ - Updated dependencies [362cdda]
175
+ - Updated dependencies [c2238cc]
176
+ - @cueplusplus/tokens@0.10.0
177
+ - @cueplusplus/theme-base@1.0.1
178
+
3
179
  ## 0.9.0
4
180
 
5
181
  ### Minor Changes
@@ -289,6 +465,25 @@
289
465
 
290
466
  ### Patch Changes
291
467
 
468
+ - edb938d: `Table.Row interactive` draws a focus ring. The prop supplied the
469
+ pointer half — the row-hover wash and a pointer cursor — and nothing for
470
+ focus, while the row-activation reading above tells a caller to put `tabIndex`
471
+ on the `<tr>` so `activateRowFromKeyDown` has something to fire on. The two
472
+ together made a row a keyboard user could reach and activate with nothing on
473
+ screen changing. **This is a WCAG 2.4.7 (Focus Visible, AA) fix you inherit by
474
+ upgrading.**
475
+
476
+ The ring is the one `Row` already draws: 2px solid in `--cue-accent`, pulled
477
+ inside the row by `-outline-offset-2` rather than floating outside it, because
478
+ these tables live in clipped panes and scroll regions where an outset ring on
479
+ the first or last row is cut off by the pane's own rim. It is `focus-visible`,
480
+ so a pointer press still paints nothing, and it rides on `interactive` alone:
481
+ a static table of figures is untouched. Nothing to change — and if you drew a
482
+ ring of your own on a focusable row, the library's is now under it.
483
+
484
+ Added after the fact: this shipped in 0.7.0 with no changeset, and a late entry
485
+ beats a hole in the record.
486
+
292
487
  - @cueplusplus/tokens@0.7.0
293
488
 
294
489
  ## 0.6.0
package/README.md CHANGED
@@ -3,11 +3,45 @@
3
3
  Components for console software: dense, keyboard-first interfaces where a screen is mostly data.
4
4
  Base UI underneath for behaviour and accessibility, Tailwind v4 on top for the paint.
5
5
 
6
+ ## Install
7
+
8
+ The `@cueplusplus` scope is served by **GitHub Packages**, not npmjs.com, and GitHub Packages
9
+ authenticates *every* install. That is two settings, in two places, and the split is not
10
+ cosmetic — pnpm ignores an env-expanded credential in a project `.npmrc` and the install fails
11
+ with `401`.
12
+
13
+ Commit the scope routing, and nothing else, at the root of your project:
14
+
15
+ ```ini
16
+ # .npmrc
17
+ @cueplusplus:registry=https://npm.pkg.github.com
18
+ ```
19
+
20
+ Then write the credential once, at the **user** level, where pnpm reads it from. It is a
21
+ **classic** personal access token with `read:packages` — GitHub Packages accepts neither
22
+ fine-grained PATs nor OIDC:
23
+
24
+ ```sh
25
+ pnpm config set //npm.pkg.github.com/:_authToken ghp_…
26
+ ```
27
+
6
28
  ```sh
7
29
  pnpm add @cueplusplus/ui @cueplusplus/tokens @cueplusplus/theme-cue @base-ui/react
8
30
  ```
9
31
 
32
+ Three peers are required and declared: `react` ^19, `react-dom` ^19 and `@base-ui/react` ^1.7.
33
+ `tailwindcss` ^4 is a declared peer too, but an optional one — needed for the default styling
34
+ lane, and without it you own the CSS. Every other peer is optional and scoped to a subpath.
35
+ `@cueplusplus/tokens` arrives as a dependency; installing it by name just makes the token
36
+ constants importable in your own code. The theme package is not a peer at all — see below.
37
+
38
+ CI, Vercel and the token's expiry are in
39
+ [`docs/CONSUMING.md` §1](https://github.com/cueplusplus/cue-ui/blob/main/docs/CONSUMING.md#1-registry-access).
40
+
41
+ ## Quick start
42
+
10
43
  ```css
44
+ /* app/globals.css */
11
45
  @import "tailwindcss";
12
46
  @import "@cueplusplus/ui/styles.css";
13
47
  @import "@cueplusplus/theme-cue/theme.css";
@@ -15,11 +49,16 @@ pnpm add @cueplusplus/ui @cueplusplus/tokens @cueplusplus/theme-cue @base-ui/rea
15
49
 
16
50
  ```tsx
17
51
  import cue from "@cueplusplus/theme-cue";
52
+ import { Button } from "@cueplusplus/ui";
18
53
  import { ThemeProvider } from "@cueplusplus/ui/system";
19
54
 
20
- <ThemeProvider themes={[cue]} theme="cue" density="compact" mode="system">
21
- <App />
22
- </ThemeProvider>;
55
+ export default function App() {
56
+ return (
57
+ <ThemeProvider themes={[cue]} theme="cue" density="compact" mode="system">
58
+ <Button variant="primary">Run cue</Button>
59
+ </ThemeProvider>
60
+ );
61
+ }
23
62
  ```
24
63
 
25
64
  The order of those three `@import`s is load-bearing, and the `themes` prop is not optional in
@@ -27,23 +66,66 @@ practice: this library contains no palette. Install and register a `@cueplusplus
27
66
  or every surface paints `@cueplusplus/theme-base`'s blank base — greys, one desaturated accent,
28
67
  the platform monospace — with nothing erroring to tell you.
29
68
 
69
+ To stop the defaults flashing on first paint, add `prepaintScript()` beside the provider and hand
70
+ both the same array — [§4 of `CONSUMING.md`](https://github.com/cueplusplus/cue-ui/blob/main/docs/CONSUMING.md#4-the-provider)
71
+ is the whole layout.
72
+
73
+ ## What it ships
74
+
30
75
  Common components come from the root entry. Groups that need an optional peer have a subpath of
31
- their own (`/charts`, `/date`, `/flow`, `/color`, `/agent-runtime`, and the rest), so importing a
32
- button never pulls a charting library into your bundle.
76
+ their own, so importing a button never pulls a charting library into your bundle.
77
+
78
+ | Import specifier | What is in it |
79
+ | --- | --- |
80
+ | `@cueplusplus/ui` | the root barrel: every component that costs no optional peer, the brand marks and the container icons included |
81
+ | `@cueplusplus/ui/primitives` | the leaves: buttons, chips, avatars, dots and the two loading shapes |
82
+ | `@cueplusplus/ui/forms` | everything a user types into, toggles, picks from or drags |
83
+ | `@cueplusplus/ui/overlays` | everything that floats: dialogs, sheets, menus, tooltips, the command palette |
84
+ | `@cueplusplus/ui/chrome` | console furniture: panels, rows, bars, tabs and the tree outline |
85
+ | `@cueplusplus/ui/layout` | page structure: cards, stacks, grids, `Bento`, disclosure and the navigation shapes |
86
+ | `@cueplusplus/ui/layout/carousel` | needs `embla-carousel-react` |
87
+ | `@cueplusplus/ui/layout/resizable` | needs `react-resizable-panels` |
88
+ | `@cueplusplus/ui/instruments` | the readouts: meters, sparklines, tables, logs and the two device frames |
89
+ | `@cueplusplus/ui/instruments/data-table` | needs `@tanstack/react-table` |
90
+ | `@cueplusplus/ui/instruments/log-viewer` | needs `@tanstack/react-virtual`, `anser` |
91
+ | `@cueplusplus/ui/charts` | Recharts in this system's tokens, plus the categorical palette and the ramps; needs `recharts` |
92
+ | `@cueplusplus/ui/date` | calendars, pickers and segmented date/time fields; needs `react-day-picker`, `date-fns`, `react-aria-components`, `@internationalized/date` |
93
+ | `@cueplusplus/ui/color` | the picker suite the configurator edits with, hex and oklch; needs `react-aria-components` |
94
+ | `@cueplusplus/ui/configurator` | the floating panel that edits the token layer live and exports what it edited; needs `react-aria-components` |
95
+ | `@cueplusplus/ui/flow` | React Flow wearing the tokens: node cards, handles, signal-carrying wires; needs `@xyflow/react` (+ `./flow.css`) |
96
+ | `@cueplusplus/ui/chat` | the multi-agent transcript: messages, composer, HITL questions, agent colour |
97
+ | `@cueplusplus/ui/agent-runtime` | the streaming layer under Chat; needs `@assistant-ui/react` |
98
+ | `@cueplusplus/ui/elements` | the agent's own surface, vendored from assistant-ui and repainted onto the tokens; needs `lucide-react` and `heat-graph` (+ `./elements.css`) |
99
+ | `@cueplusplus/ui/elements/markdown` | `MarkdownText`; needs `react-markdown`, `rehype-sanitize` |
100
+ | `@cueplusplus/ui/elements/generative` | the generative-UI renderer and its spec (+ `./elements/generative.css`) |
101
+ | `@cueplusplus/ui/elements/replay` | the scripted session-replay frame |
102
+ | `@cueplusplus/ui/dmx` | 512 bytes at wire rate: the bar, the strip, the patch bar, the channel grid |
103
+ | `@cueplusplus/ui/midi` | sequencer instruments: keyboard, musical clock, ruler, analyser, threshold rail |
104
+ | `@cueplusplus/ui/system` | `ThemeProvider`, `prepaintScript`, the `Density` island, the portal frame, `isSafeTokenValue` |
105
+ | `@cueplusplus/ui/theming` | `createTheme()`, `contrastReport()` and the `--cue-*` vocabulary as constants |
106
+
107
+ Four stylesheet exports. `@cueplusplus/ui/styles.css` is always imported; the other three are
108
+ imported only if you use what they paint — `@cueplusplus/ui/elements.css`,
109
+ `@cueplusplus/ui/flow.css` and `@cueplusplus/ui/elements/generative.css`.
33
110
 
34
111
  ## The machine-readable half
35
112
 
36
113
  This package ships its own manifest: `@cueplusplus/ui/manifest.json` is an index of every
37
114
  component with a SHA-256 for each companion document, and
38
115
  `@cueplusplus/ui/manifest/components/<name>.json` is one component in full — props, variants, the
39
- tokens it paints with, and the hand-written notes on when it is the wrong choice. An agent or a
40
- code generator should read that rather than guess a prop name.
116
+ tokens it paints with, and the hand-written notes on when it is the wrong choice. Beside them,
117
+ `@cueplusplus/ui/manifest/tokens.json` is the token vocabulary and
118
+ `@cueplusplus/ui/manifest/fixtures.json` the playground fixture catalogue. An agent or a code
119
+ generator should read those rather than guess a prop name.
41
120
 
42
121
  The same surfaces are published at <https://ui.cueplusplus.com>, with the docs site, the live
43
122
  kitchen sink and the CUE++ agent skills beside them.
44
123
 
45
- ## Full documentation
124
+ ## Where the rest is
46
125
 
47
- - Installing and using it from another project: [`docs/CONSUMING.md`](https://github.com/cueplusplus/product-design-system/blob/main/docs/CONSUMING.md)
126
+ - Installing and using it from another project: [`docs/CONSUMING.md`](https://github.com/cueplusplus/cue-ui/blob/main/docs/CONSUMING.md)
48
127
  - Every component, with props and a live example: <https://ui.cueplusplus.com/docs/components>
49
128
  - Theming, density and the `--cue-*` contract: <https://ui.cueplusplus.com/docs/theming>
129
+ - The whole surface on one page: <https://ui.cueplusplus.com/kitchen-sink>
130
+ - Every machine-readable surface, with copy-paste snippets: <https://ui.cueplusplus.com/ai>
131
+ - What changed in the version you have: `node_modules/@cueplusplus/ui/CHANGELOG.md`
package/dist/index.d.ts CHANGED
@@ -33,7 +33,7 @@ import { Tree, TreeProps, TreeVisibility, TreeVisibilityToggle, TreeVisibilityTo
33
33
  import { Toolbar, ToolbarButtonProps, ToolbarGroupProps, ToolbarRootProps, ToolbarSeparatorProps } from "./chrome/toolbar.js";
34
34
  import "./chrome/index.js";
35
35
  import { ControlVariantProps, FormControlSize, bareControlClasses, controlClasses, controlGroupFocusClasses, controlSurface, controlVariants } from "./forms/_chassis.js";
36
- import { TokenOverrides } from "./system/overrides.js";
36
+ import { TokenOverrides, isSafeTokenValue } from "./system/overrides.js";
37
37
  import { FontFamilies, ResolvedMode, ThemeContextValue, ThemeProvider, ThemeProviderProps } from "./system/theme-provider.js";
38
38
  import { Autocomplete, AutocompleteProps } from "./forms/autocomplete.js";
39
39
  import { ButtonGroup, ButtonGroupOrientation, ButtonGroupProps } from "./forms/button-group.js";
@@ -86,11 +86,12 @@ import { TwoStepButton, TwoStepButtonProps, TwoStepTone } from "./instruments/tw
86
86
  import { UsageChart, UsageChartPoint, UsageChartProps, UsageChartTone } from "./instruments/usage-chart.js";
87
87
  import "./instruments/index.js";
88
88
  import { Accordion, AccordionHeaderProps, AccordionItemProps, AccordionPanelProps, AccordionRootProps, AccordionTriggerProps } from "./layout/accordion.js";
89
+ import { SpaceStep, Stack, StackAlign, StackJustify, StackProps } from "./layout/stack.js";
90
+ import { Bento, BentoColumns, BentoMinHeight, BentoRootProps, BentoRowSpan, BentoRows, BentoSpan, BentoTileProps } from "./layout/bento.js";
89
91
  import { Breadcrumb, BreadcrumbItem, BreadcrumbProps } from "./layout/breadcrumb.js";
90
92
  import { Card, CardContentProps, CardDescriptionProps, CardFooterProps, CardHeaderProps, CardRootProps, CardTitleProps } from "./layout/card.js";
91
93
  import { Collapsible, CollapsiblePanelProps, CollapsibleRootProps, CollapsibleTriggerProps, Disclosure, DisclosureProps } from "./layout/collapsible.js";
92
94
  import { DescriptionList, DescriptionListDetailProps, DescriptionListLayout, DescriptionListRootProps, DescriptionListTermProps } from "./layout/description-list.js";
93
- import { SpaceStep, Stack, StackAlign, StackJustify, StackProps } from "./layout/stack.js";
94
95
  import { Grid, GridColumns, GridProps } from "./layout/grid.js";
95
96
  import { Item, ItemProps, itemVariants } from "./layout/item.js";
96
97
  import { Pagination, PaginationEntry, PaginationProps, paginationRange } from "./layout/pagination.js";
@@ -128,4 +129,4 @@ import { useDensities, useFonts, useThemes } from "./system/theme-registry.js";
128
129
  import { ControlSize, useControlHeight, useDensity } from "./system/use-density.js";
129
130
  import { useTheme } from "./system/use-theme.js";
130
131
  import { DensityEntry, DensityLevel, FontEntry, FontName, Mode, ThemeManifest, ThemeName } from "./system/index.js";
131
- export { AGENT_COLOR_PROPERTY, AGENT_HUES, AGENT_ROOT_COLOR, Accordion, type AccordionHeaderProps, type AccordionItemProps, type AccordionPanelProps, type AccordionRootProps, type AccordionTriggerProps, type AgentColorOptions, AgentPile, type AgentPileEntry, type AgentPileProps, type AgentPileSize, AlertDialog, type AlertDialogActionProps, type AlertDialogCancelProps, type AlertDialogContentProps, type AlertDialogDescriptionProps, type AlertDialogFooterProps, type AlertDialogRootProps, type AlertDialogTitleProps, type AlertDialogTriggerProps, AppBar, type AppBarActionsProps, type AppBarBrandProps, type AppBarLinkProps, type AppBarNavProps, type AppBarRegister, type AppBarRootProps, type AppBarSeparatorProps, AppShell, type AppShellAsideProps, type AppShellBarProps, type AppShellBodyProps, type AppShellContentProps, type AppShellNavTriggerProps, type AppShellRootProps, type AppShellScrollerProps, type AppShellSidebarProps, AppWindowFrame, type AppWindowFrameProps, type AskAnswer, AskBox, type AskBoxProps, type AskDanger, type AskKind, type AskOption, AudienceIcon, Autocomplete, type AutocompleteProps, Avatar, AvatarGroup, type AvatarGroupProps, type AvatarProps, type AvatarSize, type BarOverflow, type BrandAssetProps, type BrandSize, type BrandTone, Breadcrumb, type BreadcrumbItem, type BreadcrumbProps, Button, ButtonGroup, type ButtonGroupOrientation, type ButtonGroupProps, type ButtonProps, Card, type CardContentProps, type CardDescriptionProps, type CardFooterProps, type CardHeaderProps, type CardRootProps, type CardTitleProps, CatalogueIcon, ChannelBetaIcon, ChannelReleasedIcon, Checkbox, CheckboxGroup, type CheckboxGroupProps, type CheckboxProps, Chip, type ChipProps, CliToolIcon, Collapsible, type CollapsiblePanelProps, type CollapsibleRootProps, type CollapsibleTriggerProps, Combobox, type ComboboxOption, type ComboboxProps, CommandPalette, type CommandPaletteItem, type CommandPaletteProps, Composer, type ComposerProps, type ComposerSubmitKey, Container, type ContainerProps, type ContainerWidth, ContextMenu, type ContextMenuContentProps, type ContextMenuRootProps, type ContextMenuTriggerProps, type ControlSize, type ControlVariantProps, CopyButton, type CopyButtonProps, CueLogotype, type CueLogotypeProps, CueMark, type CueMarkProps, CuePortalFrame, type CuePortalFrameProps, DEFAULT_STORAGE_KEY, DataRow, type DataRowDisclosure, type DataRowRootProps, type DataRowSlotProps, DataTree, type DataTreeItem, type DataTreeProps, type DataTreeRowState, DelegationCard, type DelegationCardProps, type DelegationDirection, type DelegationStatus, Density, type DensityEntry, type DensityLevel, type DensityProps, DescriptionList, type DescriptionListDetailProps, type DescriptionListLayout, type DescriptionListRootProps, type DescriptionListTermProps, Dialog, type DialogCloseProps, type DialogContentProps, type DialogDescriptionProps, type DialogFooterProps, type DialogRootProps, type DialogTitleProps, type DialogTriggerProps, Disclosure, type DisclosureProps, Drawer, type DrawerCloseProps, type DrawerContentProps, type DrawerDescriptionProps, type DrawerFooterProps, type DrawerRootProps, type DrawerSwipeDirection, type DrawerTitleProps, type DrawerTriggerProps, DropdownMenu, type DropdownMenuCheckboxItemProps, type DropdownMenuContentProps, type DropdownMenuGroupProps, type DropdownMenuItemProps, type DropdownMenuLabelProps, type DropdownMenuRootProps, type DropdownMenuSeparatorProps, type DropdownMenuTriggerProps, EmptyState, type EmptyStateProps, EnvVarInput, type EnvVarInputProps, Eyebrow, type EyebrowProps, Field, FieldDescription, type FieldDescriptionProps, FieldError, type FieldErrorProps, type FieldIssue, FieldLabel, type FieldLabelProps, type FieldProps, type FilePartition, type FilePartitionOptions, type FileRejectReason, type FileRejection, FileUpload, type FileUploadProps, FolderIcon, type FontEntry, type FontFamilies, type FontName, Footer, type FooterProps, type FormControlSize, Grid, type GridColumns, type GridProps, GroupBar, type GroupBarItem, type GroupBarProps, type GroupBarTone, HoverCard, type HoverCardContentProps, type HoverCardRootProps, type HoverCardTriggerProps, IconButton, type IconButtonProps, InfoTip, type InfoTipProps, Input, InputGroup, type InputGroupProps, type InputProps, Item, type ItemProps, Kbd, type KbdProps, Ledger, type LedgerEmptyProps, type LedgerGroupProps, type LedgerRootProps, type LedgerTierProps, Link, type LinkProps, McpServerIcon, Menubar, type MenubarContentProps, type MenubarMenuProps, type MenubarRootProps, type MenubarTriggerProps, Message, MessageList, type MessageListProps, type MessageProps, type MessageRole, Meter, type MeterProps, type MeterProvenance, type MeterTone, type Mode, MultiSelect, type MultiSelectProps, NavigationMenu, type NavigationMenuContentProps, type NavigationMenuItemProps, type NavigationMenuLinkProps, type NavigationMenuListProps, type NavigationMenuRootProps, type NavigationMenuTriggerProps, type NavigationMenuViewportProps, NumberField, type NumberFieldProps, OTPField, type OTPFieldProps, OVERLAY_SIDE_OFFSET, PageShell, type PageShellProps, type PageWidth, Pagination, type PaginationEntry, type PaginationProps, Panel, PanelHeader, type PanelHeaderProps, type PanelProps, PasswordInput, type PasswordInputProps, type PersistedPreferences, Plussie, type PlussieExpression, type PlussieProps, Popover, type PopoverCloseProps, type PopoverContentProps, type PopoverDescriptionProps, type PopoverRootProps, type PopoverTitleProps, type PopoverTriggerProps, type PrepaintDefaults, type PrepaintOptions, Progress, type ProgressProps, Radio, RadioGroup, type RadioGroupProps, type RadioProps, Rating, type RatingProps, type RatingSize, type ResolvedMode, Row, type RowProps, ScrollArea, type ScrollAreaOrientation, type ScrollAreaProps, type ScrollEdges, ScrollableTabsList, type ScrollableTabsListProps, ScrubInput, type ScrubInputProps, SeamCell, type SeamCellProps, SeamGrid, type SeamGridProps, type SeamGround, SeamList, type SeamListProps, SearchInput, type SearchInputProps, SectionHeader, type SectionHeaderProps, SegmentedControl, type SegmentedControlItem, type SegmentedControlProps, type SegmentedControlSize, Select, type SelectOption, type SelectProps, Separator, type SeparatorProps, Sheet, type SheetCloseProps, type SheetContentProps, type SheetDescriptionProps, type SheetFooterProps, type SheetRootProps, type SheetTitleProps, type SheetTriggerProps, Sidebar, type SidebarItemProps, type SidebarRailProps, type SidebarRootProps, type SidebarSectionProps, Skeleton, type SkeletonProps, SkillIcon, Slider, type SliderProps, type SpaceStep, Sparkline, type SparklineProps, Spinner, type SpinnerProps, Stack, type StackAlign, StackIcon, type StackJustify, type StackProps, StacksMatrixIcon, Stat, type StatProps, type StatTone, StatusBar, type StatusBarGroupProps, type StatusBarItemProps, type StatusBarProminence, type StatusBarProps, type StatusBarTone, StatusDot, type StatusDotProps, type StatusTone, Stepper, type StepperProps, type StepperState, type StepperStep, Switch, type SwitchProps, TAB_FADE_PX, TREE_GUIDE_GLYPHS, Table, type TableCaptionProps, type TableCellProps, type TableGroupRowProps, type TableHeadProps, type TableRootProps, type TableRowProps, TableScrollRegion, type TableScrollRegionProps, type TableSectionProps, Tabs, type TabsListProps, type TabsPanelProps, type TabsRootProps, type TabsTabProps, TagsInput, type TagsInputProps, TerminalFrame, type TerminalFrameLine, type TerminalFrameProps, type TerminalLine, type TerminalLineTone, type TerminalScript, type TerminalStep, Textarea, type TextareaProps, type ThemeContextValue, type ThemeManifest, type ThemeName, ThemeProvider, type ThemeProviderProps, type ThemeRegistry, Timeline, type TimelineContentProps, type TimelineItemProps, type TimelineMarkerProps, type TimelineRootProps, TitleBar, type TitleBarProps, Toast, type ToastManager, type ToastOptions, type ToastProviderProps, type ToastTone, type ToastViewportProps, Toggle, ToggleGroup, type ToggleGroupProps, type ToggleProps, type TokenOverrides, Toolbar, type ToolbarButtonProps, type ToolbarGroupProps, type ToolbarRootProps, type ToolbarSeparatorProps, Tooltip, type TooltipContentProps, type TooltipProviderProps, type TooltipRootProps, type TooltipTriggerProps, Tree, type TreeGuide, type TreeItem, type TreeProps, type TreeRow, type TreeVisibility, TreeVisibilityToggle, type TreeVisibilityToggleProps, TwoStepButton, type TwoStepButtonProps, type TwoStepTone, type UploadFile, type UploadStatus, UsageChart, type UsageChartPoint, type UsageChartProps, type UsageChartTone, activateRowFromClick, activateRowFromKeyDown, agentColor, agentColorStyle, bareControlClasses, buttonVariants, chipVariants, computeScrollEdges, controlClasses, controlGroupFocusClasses, controlSurface, controlVariants, edgeFadeMask, envReference, flattenTree, itemVariants, linkVariants, menuItemClasses, menuLabelClasses, menuPopupClasses, menuSeparatorClasses, overlayDescriptionClasses, overlayFooterClasses, overlayModalTransitionClasses, overlayPopupTransitionClasses, overlayPositionerClasses, overlaySurfaceClasses, overlayTextClasses, overlayTitleClasses, paginationRange, parseEnvReference, partitionFiles, prepaintScript, rowVariants, scrimClasses, useControlHeight, useCuePortalProps, useDensities, useDensity, useFonts, useSidebar, useTheme, useThemes, useToast };
132
+ export { AGENT_COLOR_PROPERTY, AGENT_HUES, AGENT_ROOT_COLOR, Accordion, type AccordionHeaderProps, type AccordionItemProps, type AccordionPanelProps, type AccordionRootProps, type AccordionTriggerProps, type AgentColorOptions, AgentPile, type AgentPileEntry, type AgentPileProps, type AgentPileSize, AlertDialog, type AlertDialogActionProps, type AlertDialogCancelProps, type AlertDialogContentProps, type AlertDialogDescriptionProps, type AlertDialogFooterProps, type AlertDialogRootProps, type AlertDialogTitleProps, type AlertDialogTriggerProps, AppBar, type AppBarActionsProps, type AppBarBrandProps, type AppBarLinkProps, type AppBarNavProps, type AppBarRegister, type AppBarRootProps, type AppBarSeparatorProps, AppShell, type AppShellAsideProps, type AppShellBarProps, type AppShellBodyProps, type AppShellContentProps, type AppShellNavTriggerProps, type AppShellRootProps, type AppShellScrollerProps, type AppShellSidebarProps, AppWindowFrame, type AppWindowFrameProps, type AskAnswer, AskBox, type AskBoxProps, type AskDanger, type AskKind, type AskOption, AudienceIcon, Autocomplete, type AutocompleteProps, Avatar, AvatarGroup, type AvatarGroupProps, type AvatarProps, type AvatarSize, type BarOverflow, Bento, type BentoColumns, type BentoMinHeight, type BentoRootProps, type BentoRowSpan, type BentoRows, type BentoSpan, type BentoTileProps, type BrandAssetProps, type BrandSize, type BrandTone, Breadcrumb, type BreadcrumbItem, type BreadcrumbProps, Button, ButtonGroup, type ButtonGroupOrientation, type ButtonGroupProps, type ButtonProps, Card, type CardContentProps, type CardDescriptionProps, type CardFooterProps, type CardHeaderProps, type CardRootProps, type CardTitleProps, CatalogueIcon, ChannelBetaIcon, ChannelReleasedIcon, Checkbox, CheckboxGroup, type CheckboxGroupProps, type CheckboxProps, Chip, type ChipProps, CliToolIcon, Collapsible, type CollapsiblePanelProps, type CollapsibleRootProps, type CollapsibleTriggerProps, Combobox, type ComboboxOption, type ComboboxProps, CommandPalette, type CommandPaletteItem, type CommandPaletteProps, Composer, type ComposerProps, type ComposerSubmitKey, Container, type ContainerProps, type ContainerWidth, ContextMenu, type ContextMenuContentProps, type ContextMenuRootProps, type ContextMenuTriggerProps, type ControlSize, type ControlVariantProps, CopyButton, type CopyButtonProps, CueLogotype, type CueLogotypeProps, CueMark, type CueMarkProps, CuePortalFrame, type CuePortalFrameProps, DEFAULT_STORAGE_KEY, DataRow, type DataRowDisclosure, type DataRowRootProps, type DataRowSlotProps, DataTree, type DataTreeItem, type DataTreeProps, type DataTreeRowState, DelegationCard, type DelegationCardProps, type DelegationDirection, type DelegationStatus, Density, type DensityEntry, type DensityLevel, type DensityProps, DescriptionList, type DescriptionListDetailProps, type DescriptionListLayout, type DescriptionListRootProps, type DescriptionListTermProps, Dialog, type DialogCloseProps, type DialogContentProps, type DialogDescriptionProps, type DialogFooterProps, type DialogRootProps, type DialogTitleProps, type DialogTriggerProps, Disclosure, type DisclosureProps, Drawer, type DrawerCloseProps, type DrawerContentProps, type DrawerDescriptionProps, type DrawerFooterProps, type DrawerRootProps, type DrawerSwipeDirection, type DrawerTitleProps, type DrawerTriggerProps, DropdownMenu, type DropdownMenuCheckboxItemProps, type DropdownMenuContentProps, type DropdownMenuGroupProps, type DropdownMenuItemProps, type DropdownMenuLabelProps, type DropdownMenuRootProps, type DropdownMenuSeparatorProps, type DropdownMenuTriggerProps, EmptyState, type EmptyStateProps, EnvVarInput, type EnvVarInputProps, Eyebrow, type EyebrowProps, Field, FieldDescription, type FieldDescriptionProps, FieldError, type FieldErrorProps, type FieldIssue, FieldLabel, type FieldLabelProps, type FieldProps, type FilePartition, type FilePartitionOptions, type FileRejectReason, type FileRejection, FileUpload, type FileUploadProps, FolderIcon, type FontEntry, type FontFamilies, type FontName, Footer, type FooterProps, type FormControlSize, Grid, type GridColumns, type GridProps, GroupBar, type GroupBarItem, type GroupBarProps, type GroupBarTone, HoverCard, type HoverCardContentProps, type HoverCardRootProps, type HoverCardTriggerProps, IconButton, type IconButtonProps, InfoTip, type InfoTipProps, Input, InputGroup, type InputGroupProps, type InputProps, Item, type ItemProps, Kbd, type KbdProps, Ledger, type LedgerEmptyProps, type LedgerGroupProps, type LedgerRootProps, type LedgerTierProps, Link, type LinkProps, McpServerIcon, Menubar, type MenubarContentProps, type MenubarMenuProps, type MenubarRootProps, type MenubarTriggerProps, Message, MessageList, type MessageListProps, type MessageProps, type MessageRole, Meter, type MeterProps, type MeterProvenance, type MeterTone, type Mode, MultiSelect, type MultiSelectProps, NavigationMenu, type NavigationMenuContentProps, type NavigationMenuItemProps, type NavigationMenuLinkProps, type NavigationMenuListProps, type NavigationMenuRootProps, type NavigationMenuTriggerProps, type NavigationMenuViewportProps, NumberField, type NumberFieldProps, OTPField, type OTPFieldProps, OVERLAY_SIDE_OFFSET, PageShell, type PageShellProps, type PageWidth, Pagination, type PaginationEntry, type PaginationProps, Panel, PanelHeader, type PanelHeaderProps, type PanelProps, PasswordInput, type PasswordInputProps, type PersistedPreferences, Plussie, type PlussieExpression, type PlussieProps, Popover, type PopoverCloseProps, type PopoverContentProps, type PopoverDescriptionProps, type PopoverRootProps, type PopoverTitleProps, type PopoverTriggerProps, type PrepaintDefaults, type PrepaintOptions, Progress, type ProgressProps, Radio, RadioGroup, type RadioGroupProps, type RadioProps, Rating, type RatingProps, type RatingSize, type ResolvedMode, Row, type RowProps, ScrollArea, type ScrollAreaOrientation, type ScrollAreaProps, type ScrollEdges, ScrollableTabsList, type ScrollableTabsListProps, ScrubInput, type ScrubInputProps, SeamCell, type SeamCellProps, SeamGrid, type SeamGridProps, type SeamGround, SeamList, type SeamListProps, SearchInput, type SearchInputProps, SectionHeader, type SectionHeaderProps, SegmentedControl, type SegmentedControlItem, type SegmentedControlProps, type SegmentedControlSize, Select, type SelectOption, type SelectProps, Separator, type SeparatorProps, Sheet, type SheetCloseProps, type SheetContentProps, type SheetDescriptionProps, type SheetFooterProps, type SheetRootProps, type SheetTitleProps, type SheetTriggerProps, Sidebar, type SidebarItemProps, type SidebarRailProps, type SidebarRootProps, type SidebarSectionProps, Skeleton, type SkeletonProps, SkillIcon, Slider, type SliderProps, type SpaceStep, Sparkline, type SparklineProps, Spinner, type SpinnerProps, Stack, type StackAlign, StackIcon, type StackJustify, type StackProps, StacksMatrixIcon, Stat, type StatProps, type StatTone, StatusBar, type StatusBarGroupProps, type StatusBarItemProps, type StatusBarProminence, type StatusBarProps, type StatusBarTone, StatusDot, type StatusDotProps, type StatusTone, Stepper, type StepperProps, type StepperState, type StepperStep, Switch, type SwitchProps, TAB_FADE_PX, TREE_GUIDE_GLYPHS, Table, type TableCaptionProps, type TableCellProps, type TableGroupRowProps, type TableHeadProps, type TableRootProps, type TableRowProps, TableScrollRegion, type TableScrollRegionProps, type TableSectionProps, Tabs, type TabsListProps, type TabsPanelProps, type TabsRootProps, type TabsTabProps, TagsInput, type TagsInputProps, TerminalFrame, type TerminalFrameLine, type TerminalFrameProps, type TerminalLine, type TerminalLineTone, type TerminalScript, type TerminalStep, Textarea, type TextareaProps, type ThemeContextValue, type ThemeManifest, type ThemeName, ThemeProvider, type ThemeProviderProps, type ThemeRegistry, Timeline, type TimelineContentProps, type TimelineItemProps, type TimelineMarkerProps, type TimelineRootProps, TitleBar, type TitleBarProps, Toast, type ToastManager, type ToastOptions, type ToastProviderProps, type ToastTone, type ToastViewportProps, Toggle, ToggleGroup, type ToggleGroupProps, type ToggleProps, type TokenOverrides, Toolbar, type ToolbarButtonProps, type ToolbarGroupProps, type ToolbarRootProps, type ToolbarSeparatorProps, Tooltip, type TooltipContentProps, type TooltipProviderProps, type TooltipRootProps, type TooltipTriggerProps, Tree, type TreeGuide, type TreeItem, type TreeProps, type TreeRow, type TreeVisibility, TreeVisibilityToggle, type TreeVisibilityToggleProps, TwoStepButton, type TwoStepButtonProps, type TwoStepTone, type UploadFile, type UploadStatus, UsageChart, type UsageChartPoint, type UsageChartProps, type UsageChartTone, activateRowFromClick, activateRowFromKeyDown, agentColor, agentColorStyle, bareControlClasses, buttonVariants, chipVariants, computeScrollEdges, controlClasses, controlGroupFocusClasses, controlSurface, controlVariants, edgeFadeMask, envReference, flattenTree, isSafeTokenValue, itemVariants, linkVariants, menuItemClasses, menuLabelClasses, menuPopupClasses, menuSeparatorClasses, overlayDescriptionClasses, overlayFooterClasses, overlayModalTransitionClasses, overlayPopupTransitionClasses, overlayPositionerClasses, overlaySurfaceClasses, overlayTextClasses, overlayTitleClasses, paginationRange, parseEnvReference, partitionFiles, prepaintScript, rowVariants, scrimClasses, useControlHeight, useCuePortalProps, useDensities, useDensity, useFonts, useSidebar, useTheme, useThemes, useToast };
package/dist/index.js CHANGED
@@ -24,6 +24,7 @@ import { Separator } from "./primitives/separator.js";
24
24
  import { AppBar } from "./chrome/app-bar.js";
25
25
  import { Sidebar, useSidebar } from "./layout/sidebar.js";
26
26
  import { Density } from "./system/density.js";
27
+ import { isSafeTokenValue } from "./system/overrides.js";
27
28
  import { DEFAULT_STORAGE_KEY, prepaintScript } from "./system/prepaint.js";
28
29
  import { useDensities, useFonts, useThemes } from "./system/theme-registry.js";
29
30
  import { ThemeProvider } from "./system/theme-provider.js";
@@ -85,11 +86,12 @@ import { TerminalFrame } from "./instruments/terminal-frame.js";
85
86
  import { TwoStepButton } from "./instruments/two-step-button.js";
86
87
  import { UsageChart } from "./instruments/usage-chart.js";
87
88
  import { Accordion } from "./layout/accordion.js";
89
+ import { Stack } from "./layout/stack.js";
90
+ import { Bento } from "./layout/bento.js";
88
91
  import { Breadcrumb } from "./layout/breadcrumb.js";
89
92
  import { Card } from "./layout/card.js";
90
93
  import { Collapsible, Disclosure } from "./layout/collapsible.js";
91
94
  import { DescriptionList } from "./layout/description-list.js";
92
- import { Stack } from "./layout/stack.js";
93
95
  import { Grid } from "./layout/grid.js";
94
96
  import { Item, itemVariants } from "./layout/item.js";
95
97
  import { Pagination, paginationRange } from "./layout/pagination.js";
@@ -113,4 +115,4 @@ import { Kbd } from "./primitives/kbd.js";
113
115
  import { Skeleton } from "./primitives/skeleton.js";
114
116
  import { useControlHeight, useDensity } from "./system/use-density.js";
115
117
  import { useTheme } from "./system/use-theme.js";
116
- export { AGENT_COLOR_PROPERTY, AGENT_HUES, AGENT_ROOT_COLOR, Accordion, AgentPile, AlertDialog, AppBar, AppShell, AppWindowFrame, AskBox, AudienceIcon, Autocomplete, Avatar, AvatarGroup, Breadcrumb, Button, ButtonGroup, Card, CatalogueIcon, ChannelBetaIcon, ChannelReleasedIcon, Checkbox, CheckboxGroup, Chip, CliToolIcon, Collapsible, Combobox, CommandPalette, Composer, Container, ContextMenu, CopyButton, CueLogotype, CueMark, CuePortalFrame, DEFAULT_STORAGE_KEY, DataRow, DataTree, DelegationCard, Density, DescriptionList, Dialog, Disclosure, Drawer, DropdownMenu, EmptyState, EnvVarInput, Eyebrow, Field, FieldDescription, FieldError, FieldLabel, FileUpload, FolderIcon, Footer, Grid, GroupBar, HoverCard, IconButton, InfoTip, Input, InputGroup, Item, Kbd, Ledger, Link, McpServerIcon, Menubar, Message, MessageList, Meter, MultiSelect, NavigationMenu, NumberField, OTPField, OVERLAY_SIDE_OFFSET, PageShell, Pagination, Panel, PanelHeader, PasswordInput, Plussie, Popover, Progress, Radio, RadioGroup, Rating, Row, ScrollArea, ScrollableTabsList, ScrubInput, SeamCell, SeamGrid, SeamList, SearchInput, SectionHeader, SegmentedControl, Select, Separator, Sheet, Sidebar, Skeleton, SkillIcon, Slider, Sparkline, Spinner, Stack, StackIcon, StacksMatrixIcon, Stat, StatusBar, StatusDot, Stepper, Switch, TAB_FADE_PX, TREE_GUIDE_GLYPHS, Table, TableScrollRegion, Tabs, TagsInput, TerminalFrame, Textarea, ThemeProvider, Timeline, TitleBar, Toast, Toggle, ToggleGroup, Toolbar, Tooltip, Tree, TreeVisibilityToggle, TwoStepButton, UsageChart, activateRowFromClick, activateRowFromKeyDown, agentColor, agentColorStyle, bareControlClasses, buttonVariants, chipVariants, computeScrollEdges, controlClasses, controlGroupFocusClasses, controlSurface, controlVariants, edgeFadeMask, envReference, flattenTree, itemVariants, linkVariants, menuItemClasses, menuLabelClasses, menuPopupClasses, menuSeparatorClasses, overlayDescriptionClasses, overlayFooterClasses, overlayModalTransitionClasses, overlayPopupTransitionClasses, overlayPositionerClasses, overlaySurfaceClasses, overlayTextClasses, overlayTitleClasses, paginationRange, parseEnvReference, partitionFiles, prepaintScript, rowVariants, scrimClasses, useControlHeight, useCuePortalProps, useDensities, useDensity, useFonts, useSidebar, useTheme, useThemes, useToast };
118
+ export { AGENT_COLOR_PROPERTY, AGENT_HUES, AGENT_ROOT_COLOR, Accordion, AgentPile, AlertDialog, AppBar, AppShell, AppWindowFrame, AskBox, AudienceIcon, Autocomplete, Avatar, AvatarGroup, Bento, Breadcrumb, Button, ButtonGroup, Card, CatalogueIcon, ChannelBetaIcon, ChannelReleasedIcon, Checkbox, CheckboxGroup, Chip, CliToolIcon, Collapsible, Combobox, CommandPalette, Composer, Container, ContextMenu, CopyButton, CueLogotype, CueMark, CuePortalFrame, DEFAULT_STORAGE_KEY, DataRow, DataTree, DelegationCard, Density, DescriptionList, Dialog, Disclosure, Drawer, DropdownMenu, EmptyState, EnvVarInput, Eyebrow, Field, FieldDescription, FieldError, FieldLabel, FileUpload, FolderIcon, Footer, Grid, GroupBar, HoverCard, IconButton, InfoTip, Input, InputGroup, Item, Kbd, Ledger, Link, McpServerIcon, Menubar, Message, MessageList, Meter, MultiSelect, NavigationMenu, NumberField, OTPField, OVERLAY_SIDE_OFFSET, PageShell, Pagination, Panel, PanelHeader, PasswordInput, Plussie, Popover, Progress, Radio, RadioGroup, Rating, Row, ScrollArea, ScrollableTabsList, ScrubInput, SeamCell, SeamGrid, SeamList, SearchInput, SectionHeader, SegmentedControl, Select, Separator, Sheet, Sidebar, Skeleton, SkillIcon, Slider, Sparkline, Spinner, Stack, StackIcon, StacksMatrixIcon, Stat, StatusBar, StatusDot, Stepper, Switch, TAB_FADE_PX, TREE_GUIDE_GLYPHS, Table, TableScrollRegion, Tabs, TagsInput, TerminalFrame, Textarea, ThemeProvider, Timeline, TitleBar, Toast, Toggle, ToggleGroup, Toolbar, Tooltip, Tree, TreeVisibilityToggle, TwoStepButton, UsageChart, activateRowFromClick, activateRowFromKeyDown, agentColor, agentColorStyle, bareControlClasses, buttonVariants, chipVariants, computeScrollEdges, controlClasses, controlGroupFocusClasses, controlSurface, controlVariants, edgeFadeMask, envReference, flattenTree, isSafeTokenValue, itemVariants, linkVariants, menuItemClasses, menuLabelClasses, menuPopupClasses, menuSeparatorClasses, overlayDescriptionClasses, overlayFooterClasses, overlayModalTransitionClasses, overlayPopupTransitionClasses, overlayPositionerClasses, overlaySurfaceClasses, overlayTextClasses, overlayTitleClasses, paginationRange, parseEnvReference, partitionFiles, prepaintScript, rowVariants, scrimClasses, useControlHeight, useCuePortalProps, useDensities, useDensity, useFonts, useSidebar, useTheme, useThemes, useToast };
@@ -19,7 +19,11 @@ type MeterTone = "ok" | "busy" | "warn" | "danger";
19
19
  */
20
20
  type MeterProvenance = "vendor" | "estimated" | "unbounded" | "none";
21
21
  interface MeterProps extends Omit<React.ComponentPropsWithoutRef<"div">, "children"> {
22
- /** How full, 0–100. Clamped; a non-finite value reads as 0. */
22
+ /**
23
+ * How full, 0–100. Clamped; a non-finite value reads as 0.
24
+ * @min 0
25
+ * @max 100
26
+ */
23
27
  percent: number;
24
28
  /** Status colour for the fill. Defaults to `"ok"`. */
25
29
  tone?: MeterTone;
@@ -0,0 +1,144 @@
1
+ import { SpaceStep } from "./stack.js";
2
+ import * as React from "react";
3
+ //#region src/layout/bento.d.ts
4
+ /** How many columns the bento resolves to at `lg`. */
5
+ type BentoColumns = 2 | 3 | 4;
6
+ /** How many rows to declare, so a tall tile spans a track that exists. */
7
+ type BentoRows = 1 | 2 | 3 | 4;
8
+ /** How many columns one tile covers, before the container clamps it. */
9
+ type BentoSpan = 1 | 2 | 3 | 4;
10
+ /** How many rows one tile covers. */
11
+ type BentoRowSpan = 1 | 2;
12
+ /** How much height a tile reserves before its content arrives. */
13
+ type BentoMinHeight = "none" | "half" | "hero";
14
+ interface BentoRootProps extends React.ComponentPropsWithoutRef<"div"> {
15
+ /** How many columns at `lg`. Defaults to `3`. Two from `sm`, one below it. */
16
+ cols?: BentoColumns;
17
+ /**
18
+ * How many rows to declare from `sm` up.
19
+ *
20
+ * Only worth setting where a tile spans rows: a `rowSpan` over implicit
21
+ * tracks sizes itself to the tile's own content, which is not a span.
22
+ */
23
+ rows?: BentoRows;
24
+ /** Pack later tiles into earlier holes instead of leaving them empty. */
25
+ dense?: boolean;
26
+ /** Which rung of the density space ladder to spend between tiles. Defaults to `4`. */
27
+ gap?: SpaceStep;
28
+ /** The tiles. Declared, so the manifest files it as a documented prop. */
29
+ children?: React.ReactNode;
30
+ }
31
+ /**
32
+ * What both tile variants share: the geometry, the four slots and the body.
33
+ *
34
+ * An `interface … extends Omit<…>` rather than a type alias over an
35
+ * intersection, for the same reason `PanelHeaderProps` and `ItemProps` are:
36
+ * `children` is a documented prop only where a component *declares* it, and a
37
+ * member of an intersection's object half is attributed to React's own
38
+ * declaration rather than to this file — so the alias form files every other
39
+ * slot and silently drops the body.
40
+ */
41
+ interface BentoTileBase extends Omit<React.ComponentPropsWithoutRef<"div">, "title"> {
42
+ /** How many columns to cover. Clamped by the container to its own `cols`. */
43
+ span?: BentoSpan;
44
+ /** How many rows to cover. Needs a container that declares them. */
45
+ rowSpan?: BentoRowSpan;
46
+ /** How much height to hold before the content arrives. Defaults to `"none"`. */
47
+ minHeight?: BentoMinHeight;
48
+ /** The qualifier above the name: an import specifier, a family, a device. */
49
+ eyebrow?: React.ReactNode;
50
+ /** The tile's name. Rendered as a `<span>`, never as a heading. */
51
+ title?: React.ReactNode;
52
+ /** The count beside the name — by convention a `<Chip variant="outline">`. */
53
+ meta?: React.ReactNode;
54
+ /** The summary and anything below it. */
55
+ children?: React.ReactNode;
56
+ }
57
+ /**
58
+ * A tile whose whole surface is one `<a>`.
59
+ *
60
+ * Its content is static: no control, no second link. HTML's content model for
61
+ * `<a>` is transparent *but* admits no interactive descendant and no `<a>`
62
+ * descendant, and `inert` changes focus, hit-testing and the accessibility tree
63
+ * while changing that content model not at all.
64
+ */
65
+ type BentoLinkTileProps = BentoTileBase & {
66
+ /** Where the tile goes. Its presence is what makes the tile a link. */
67
+ href: string;
68
+ /**
69
+ * A router's own link element, cloned to carry the tile's classes and slots.
70
+ *
71
+ * The **element** form only, and never a render function: a function would
72
+ * buy a second calling convention at the price of this component's
73
+ * server-safety, because the hook that reads one is a hook. The element keeps
74
+ * its own `href` — `next/link` declares that prop required, so passing the
75
+ * tile's would make the tile the silent owner of a value the element has to
76
+ * declare anyway. Its own `className` is **merged** with the tile's rather
77
+ * than replaced by it, which is the other half of the same bargain: `href` is
78
+ * a value the element owns outright, and a class is one it adds to.
79
+ */
80
+ render?: React.ReactElement;
81
+ /** Never on a link tile: an `<a>` may not contain a control. */
82
+ action?: never;
83
+ };
84
+ /** A surface that may hold live children; its link or control is a visible sibling. */
85
+ type BentoPanelTileProps = BentoTileBase & {
86
+ /** Never on a panel tile: `href` is what selects the link variant. */
87
+ href?: never;
88
+ /** Never on a panel tile: `render` belongs to the link variant. */
89
+ render?: never;
90
+ /** The tile's own link or control, rendered beside the count rather than around it. */
91
+ action?: React.ReactNode;
92
+ };
93
+ /** Props for {@link Bento.Tile}: a link tile, or a panel tile with an `action`. */
94
+ type BentoTileProps = BentoLinkTileProps | BentoPanelTileProps;
95
+ /**
96
+ * A grid of unequal tiles: per-item spans, clamped to the container's columns.
97
+ *
98
+ * Where `Grid` lays out cells it never touches, a bento's whole content is
99
+ * per-item — so the span is a prop on the tile, from a closed set, and the
100
+ * container clamps it on the way past. One column below `sm`, two from `sm`,
101
+ * the asked-for count from `lg`; the clamp is per breakpoint and not per
102
+ * `cols`, because every container is two tracks wide in between whatever it
103
+ * was asked for.
104
+ *
105
+ * **Static markup — no hooks, no `"use client"`, and it must stay that way.**
106
+ * A directive is per *module*, so a `Bento` built on `useRender` would open a
107
+ * client boundary in every server page that draws one. That is why the router
108
+ * escape hatch is `render`, an *element* that is cloned, rather than a render
109
+ * function; and why {@link Bento.Tile} is a discriminated union rather than a
110
+ * tile that decides at runtime what it is.
111
+ *
112
+ * `BentoTileProps` omits the native `title` from its `<div>` props, the same
113
+ * omission `PanelHeader` and `Item` make: `React.ComponentPropsWithoutRef<"div">`
114
+ * already declares `title?: string`, and narrowing it to a `ReactNode` without
115
+ * the `Omit` is TS2430.
116
+ *
117
+ * @example
118
+ * <Bento.Root cols={3} rows={2} gap={5}>
119
+ * <Bento.Tile span={2} rowSpan={2} minHeight="hero" title="Kitchen sink">
120
+ * Every component, on one page.
121
+ * </Bento.Tile>
122
+ * <Bento.Tile title="Themes" meta={<Chip variant="outline">10</Chip>} />
123
+ * <Bento.Tile title="Density" meta={<Chip variant="outline">5</Chip>} />
124
+ * </Bento.Root>
125
+ * @example
126
+ * <Bento.Tile
127
+ * href="/docs/components/grid"
128
+ * render={<NextLink href="/docs/components/grid" />}
129
+ * eyebrow="@cueplusplus/ui"
130
+ * title="Grid"
131
+ * >
132
+ * Equal columns, or as many as fit.
133
+ * </Bento.Tile>
134
+ * @example
135
+ * <Bento.Tile title="Signal" action={<Button onClick={apply}>Apply</Button>}>
136
+ * <ThemeSwatches theme="signal" />
137
+ * </Bento.Tile>
138
+ */
139
+ declare const Bento: {
140
+ Root: React.ForwardRefExoticComponent<BentoRootProps & React.RefAttributes<HTMLDivElement>>;
141
+ Tile: React.ForwardRefExoticComponent<BentoTileProps & React.RefAttributes<HTMLElement>>;
142
+ };
143
+ //#endregion
144
+ export { Bento, BentoColumns, BentoMinHeight, BentoRootProps, BentoRowSpan, BentoRows, BentoSpan, BentoTileProps };