@sableui/react 0.13.2 → 0.15.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 (203) hide show
  1. package/AGENTS.md +2 -2
  2. package/CHANGELOG.md +172 -0
  3. package/CONTRIBUTING.md +6 -4
  4. package/DESIGN.md +10 -3
  5. package/dist/blocks/approval-block.js +93 -0
  6. package/dist/blocks/approval-block.meta.js +23 -0
  7. package/dist/blocks/index.d.ts +27 -1
  8. package/dist/blocks/index.js +8 -0
  9. package/dist/blocks/message-reactions-block.js +87 -0
  10. package/dist/blocks/message-reactions-block.meta.js +23 -0
  11. package/dist/components/accordion/accordion.meta.js +8 -2
  12. package/dist/components/area-chart/area-chart.meta.js +10 -3
  13. package/dist/components/attachment/attachment.meta.js +26 -0
  14. package/dist/components/bar-chart/bar-chart.meta.js +11 -4
  15. package/dist/components/bottom-nav/bottom-nav.js +3 -1
  16. package/dist/components/bottom-nav/bottom-nav.meta.js +32 -0
  17. package/dist/components/breadcrumbs/breadcrumbs.meta.js +26 -0
  18. package/dist/components/bubble/bubble.js +105 -5
  19. package/dist/components/bubble/bubble.meta.js +42 -6
  20. package/dist/components/bubble/bubble.variants.js +1 -1
  21. package/dist/components/bubble/index.js +2 -0
  22. package/dist/components/button/button.js +21 -4
  23. package/dist/components/button/button.meta.js +7 -7
  24. package/dist/components/calendar/calendar.js +18 -1
  25. package/dist/components/calendar/calendar.meta.js +38 -0
  26. package/dist/components/carousel/carousel.js +6 -4
  27. package/dist/components/carousel/carousel.meta.js +42 -0
  28. package/dist/components/chat-composer/chat-composer.js +21 -21
  29. package/dist/components/chat-composer/chat-composer.meta.js +38 -0
  30. package/dist/components/chat-composer/use-eased-growth.js +70 -0
  31. package/dist/components/checkbox/checkbox-mark.js +8 -1
  32. package/dist/components/checkbox/checkbox.js +3 -1
  33. package/dist/components/checkbox/checkbox.meta.js +32 -0
  34. package/dist/components/checkbox-card/checkbox-card.js +3 -0
  35. package/dist/components/checkbox-card/checkbox-card.meta.js +32 -0
  36. package/dist/components/code-block/code-block.js +14 -3
  37. package/dist/components/code-block/code-block.meta.js +28 -1
  38. package/dist/components/collapsible/collapsible.meta.js +32 -0
  39. package/dist/components/color-field/color-field.meta.js +26 -0
  40. package/dist/components/combobox/combobox.meta.js +44 -0
  41. package/dist/components/command-menu/command-menu.js +8 -3
  42. package/dist/components/command-menu/command-menu.meta.js +38 -0
  43. package/dist/components/confirm-button/confirm-button.js +179 -0
  44. package/dist/components/confirm-button/confirm-button.meta.js +143 -0
  45. package/dist/components/confirm-button/index.js +7 -0
  46. package/dist/components/data-table/data-table.js +6 -2
  47. package/dist/components/data-table/data-table.meta.js +32 -0
  48. package/dist/components/entity/entity.meta.js +26 -0
  49. package/dist/components/feedback/feedback.js +120 -47
  50. package/dist/components/feedback/feedback.meta.js +55 -4
  51. package/dist/components/input-group/input-group.meta.js +27 -1
  52. package/dist/components/like-button/index.js +7 -0
  53. package/dist/components/like-button/like-button.js +89 -0
  54. package/dist/components/like-button/like-button.meta.js +132 -0
  55. package/dist/components/line-chart/line-chart.meta.js +10 -3
  56. package/dist/components/middle-truncate/middle-truncate.meta.js +1 -1
  57. package/dist/components/note/note.meta.js +32 -0
  58. package/dist/components/notification-badge/notification-badge.js +17 -5
  59. package/dist/components/notification-badge/notification-badge.meta.js +34 -2
  60. package/dist/components/number-ticker/index.js +7 -0
  61. package/dist/components/number-ticker/number-ticker.js +246 -0
  62. package/dist/components/number-ticker/number-ticker.meta.js +159 -0
  63. package/dist/components/otp-field/otp-field.js +23 -3
  64. package/dist/components/otp-field/otp-field.meta.js +23 -2
  65. package/dist/components/panel-group/panel-group.meta.js +26 -0
  66. package/dist/components/panel-section/panel-section.js +37 -10
  67. package/dist/components/panel-section/panel-section.meta.js +32 -0
  68. package/dist/components/pie-chart/pie-chart.js +20 -11
  69. package/dist/components/pie-chart/pie-chart.meta.js +17 -4
  70. package/dist/components/pill/pill.meta.js +32 -0
  71. package/dist/components/radar-chart/radar-chart.js +4 -3
  72. package/dist/components/radar-chart/radar-chart.meta.js +10 -3
  73. package/dist/components/radial-chart/radial-chart.js +22 -22
  74. package/dist/components/radial-chart/radial-chart.meta.js +17 -4
  75. package/dist/components/radio/radio.meta.js +26 -0
  76. package/dist/components/radio-card/radio-card.meta.js +38 -0
  77. package/dist/components/reaction-picker/index.js +13 -0
  78. package/dist/components/reaction-picker/reaction-picker.js +104 -0
  79. package/dist/components/reaction-picker/reaction-picker.meta.js +156 -0
  80. package/dist/components/relative-time/relative-time.meta.js +32 -0
  81. package/dist/components/scroller/scroller.meta.js +32 -0
  82. package/dist/components/scrub-field/scrub-field.meta.js +32 -0
  83. package/dist/components/search-input/search-input.js +9 -7
  84. package/dist/components/search-input/search-input.meta.js +26 -0
  85. package/dist/components/show-more/show-more.js +1 -4
  86. package/dist/components/show-more/show-more.meta.js +38 -0
  87. package/dist/components/side-nav/side-nav.js +21 -1
  88. package/dist/components/side-nav/side-nav.meta.js +32 -0
  89. package/dist/components/side-nav/side-nav.variants.js +3 -1
  90. package/dist/components/sidebar/sidebar.js +31 -8
  91. package/dist/components/sidebar/sidebar.meta.js +38 -0
  92. package/dist/components/slider/slider.meta.js +26 -0
  93. package/dist/components/sparkline/sparkline.js +7 -4
  94. package/dist/components/sparkline/sparkline.meta.js +9 -2
  95. package/dist/components/table/table.meta.js +26 -0
  96. package/dist/components/tabs/tabs.js +27 -8
  97. package/dist/components/tabs/tabs.meta.js +46 -3
  98. package/dist/components/theme-selector/theme-selector.meta.js +32 -0
  99. package/dist/components/theme-switcher/theme-switcher.js +4 -1
  100. package/dist/components/theme-switcher/theme-switcher.meta.js +42 -0
  101. package/dist/components/toast/toast.js +25 -13
  102. package/dist/components/toast/toast.meta.js +7 -1
  103. package/dist/components/toggle/toggle.js +28 -5
  104. package/dist/components/toggle/toggle.meta.js +44 -2
  105. package/dist/components/tool-call/index.js +8 -0
  106. package/dist/components/tool-call/tool-call.js +117 -0
  107. package/dist/components/tool-call/tool-call.meta.js +147 -0
  108. package/dist/components/tool-call/tool-call.variants.js +33 -0
  109. package/dist/components/tooltip/index.js +3 -1
  110. package/dist/components/tooltip/tooltip.js +84 -0
  111. package/dist/components/tooltip/tooltip.meta.js +16 -1
  112. package/dist/components/tree/tree.js +71 -6
  113. package/dist/components/tree/tree.meta.js +32 -0
  114. package/dist/components/video/video.meta.js +32 -0
  115. package/dist/file-hashes.json +130 -104
  116. package/dist/foundations/motion.js +69 -3
  117. package/dist/icon-sets/reicon.js +11 -1
  118. package/dist/index.d.ts +907 -104
  119. package/dist/index.js +6 -1
  120. package/dist/lib/chart/cartesian.js +9 -10
  121. package/dist/lib/chart/chart-center.js +30 -0
  122. package/dist/lib/chart/chart-frame.js +15 -8
  123. package/dist/lib/chart/dim.js +13 -0
  124. package/dist/lib/chart/format.js +7 -1
  125. package/dist/lib/chart/motion.js +6 -4
  126. package/dist/lib/highlight-glide.js +68 -10
  127. package/dist/lib/taxonomy.js +5 -0
  128. package/dist/motion/Burst.js +79 -0
  129. package/dist/motion/MotionProvider.js +45 -3
  130. package/dist/motion/Reveal.js +1 -1
  131. package/dist/motion/TextReveal.js +1 -1
  132. package/dist/motion/index.js +17 -2
  133. package/dist/motion/useAutoSize.js +42 -0
  134. package/dist/motion/useShake.js +25 -0
  135. package/dist/styles.css +439 -5
  136. package/llms/blocks/approval-block.md +128 -0
  137. package/llms/blocks/message-reactions-block.md +116 -0
  138. package/llms/components/accordion.md +3 -2
  139. package/llms/components/area-chart.md +4 -3
  140. package/llms/components/attachment.md +7 -0
  141. package/llms/components/bar-chart.md +5 -4
  142. package/llms/components/bottom-nav.md +8 -0
  143. package/llms/components/breadcrumbs.md +7 -0
  144. package/llms/components/bubble.md +17 -7
  145. package/llms/components/button.md +6 -6
  146. package/llms/components/calendar.md +9 -0
  147. package/llms/components/carousel.md +17 -0
  148. package/llms/components/chat-composer.md +9 -0
  149. package/llms/components/checkbox-card.md +8 -0
  150. package/llms/components/checkbox.md +8 -0
  151. package/llms/components/code-block.md +8 -0
  152. package/llms/components/collapsible.md +8 -0
  153. package/llms/components/color-field.md +7 -0
  154. package/llms/components/combobox.md +10 -0
  155. package/llms/components/command-menu.md +9 -0
  156. package/llms/components/confirm-button.md +92 -0
  157. package/llms/components/data-table.md +8 -0
  158. package/llms/components/entity.md +7 -0
  159. package/llms/components/feedback.md +23 -3
  160. package/llms/components/input-group.md +8 -1
  161. package/llms/components/like-button.md +91 -0
  162. package/llms/components/line-chart.md +4 -3
  163. package/llms/components/middle-truncate.md +1 -1
  164. package/llms/components/note.md +8 -0
  165. package/llms/components/notification-badge.md +10 -2
  166. package/llms/components/number-ticker.md +86 -0
  167. package/llms/components/otp-field.md +15 -1
  168. package/llms/components/panel-group.md +7 -0
  169. package/llms/components/panel-section.md +8 -0
  170. package/llms/components/pie-chart.md +6 -4
  171. package/llms/components/pill.md +8 -0
  172. package/llms/components/radar-chart.md +4 -3
  173. package/llms/components/radial-chart.md +6 -4
  174. package/llms/components/radio-card.md +9 -0
  175. package/llms/components/radio.md +7 -0
  176. package/llms/components/reaction-picker.md +115 -0
  177. package/llms/components/relative-time.md +8 -0
  178. package/llms/components/scroller.md +8 -0
  179. package/llms/components/scrub-field.md +8 -0
  180. package/llms/components/search-input.md +7 -0
  181. package/llms/components/show-more.md +9 -0
  182. package/llms/components/side-nav.md +8 -0
  183. package/llms/components/sidebar.md +9 -0
  184. package/llms/components/slider.md +7 -0
  185. package/llms/components/sparkline.md +3 -2
  186. package/llms/components/table.md +7 -0
  187. package/llms/components/tabs.md +20 -2
  188. package/llms/components/theme-selector.md +8 -0
  189. package/llms/components/theme-switcher.md +17 -0
  190. package/llms/components/toast.md +2 -1
  191. package/llms/components/toggle.md +19 -2
  192. package/llms/components/tool-call.md +115 -0
  193. package/llms/components/tooltip.md +11 -1
  194. package/llms/components/tree.md +8 -0
  195. package/llms/components/video.md +8 -0
  196. package/llms/foundations/motion.md +64 -3
  197. package/llms/reference/utilities.md +26 -1
  198. package/llms/tasks/reviewing-motion.md +14 -0
  199. package/llms-full.txt +1337 -69
  200. package/llms.txt +19 -11
  201. package/package.json +1 -1
  202. package/registry.json +3040 -124
  203. package/targets/ios.json +45 -0
package/dist/index.d.ts CHANGED
@@ -9,7 +9,7 @@ export { AspectBox, AspectBoxProps, Bleed, BleedProps, Breakpoint, Center, Cente
9
9
  export { Icon, IconContextValue, IconProps, IconProvider, IconProviderProps, composeIconSets, useIconSet } from './icon/index.js';
10
10
  export { a as IconRenderProps, I as IconSet, b as IconVariant } from './registry-CyL28OzJ.js';
11
11
  import * as react from 'react';
12
- import { ReactNode, ComponentPropsWithoutRef, ElementType, ReactElement, Ref, ComponentPropsWithRef, MouseEvent, ComponentProps, AriaAttributes, FormEvent } from 'react';
12
+ import { ReactNode, AnimationEvent, ComponentPropsWithoutRef, ElementType, ReactElement, Ref, ComponentPropsWithRef, MouseEvent, ComponentProps, AriaAttributes, FormEvent } from 'react';
13
13
  import { VariantProps } from 'class-variance-authority';
14
14
  import { useRender } from '@base-ui/react/use-render';
15
15
  import * as class_variance_authority_types from 'class-variance-authority/types';
@@ -144,10 +144,22 @@ declare function componentLabel(name: string): string;
144
144
  *
145
145
  * - `system` — defer to the OS `prefers-reduced-motion` preference (default).
146
146
  * - `full` — force motion on (overrides the OS preference in-app).
147
+ * - `subtle` — essential motion only: feedback, overlays, disclosure and
148
+ * loaders play; expressive motion (glides, rolling numbers, drawn
149
+ * ticks, shakes, staggers, overshoot) resolves instantly. Follows
150
+ * the OS preference for everything else, so it never turns motion
151
+ * on for someone who asked for it off.
147
152
  * - `reduced` — damp all token-driven motion to static.
148
153
  * - `off` — synonym for `reduced`; motion is fully disabled.
149
154
  */
150
- type MotionPolicy = "system" | "full" | "reduced" | "off";
155
+ type MotionPolicy = "system" | "full" | "subtle" | "reduced" | "off";
156
+ /**
157
+ * How much motion one component or region may use — the value of a
158
+ * component's `motion` prop and of `<MotionScope level>`. It can only turn
159
+ * motion DOWN from what the surroundings allow: `full` means "inherit", never
160
+ * "override the reader's reduce-motion setting".
161
+ */
162
+ type MotionLevel = "full" | "subtle" | "off";
151
163
  interface MotionContextValue {
152
164
  policy: MotionPolicy;
153
165
  setPolicy: (policy: MotionPolicy) => void;
@@ -155,6 +167,12 @@ interface MotionContextValue {
155
167
  prefersReducedMotion: boolean;
156
168
  /** Resolved: will token-driven motion play right now? Mirrors the CSS. */
157
169
  enabled: boolean;
170
+ /**
171
+ * Resolved: will EXPRESSIVE motion play — glides, rolling numbers, drawn
172
+ * ticks, shakes, staggers? False under `subtle` as well as when motion is
173
+ * off. JS-driven flourishes read this; essential JS motion reads `enabled`.
174
+ */
175
+ expressive: boolean;
158
176
  }
159
177
  interface MotionProviderProps {
160
178
  children: ReactNode;
@@ -186,6 +204,49 @@ interface MotionProviderProps {
186
204
  * then read/flip it anywhere via `useMotion()`.
187
205
  */
188
206
  declare function MotionProvider({ children, defaultPolicy, policy: controlledPolicy, onPolicyChange, target, }: MotionProviderProps): react.JSX.Element;
207
+ /**
208
+ * The value `data-motion` should carry for a component's `motion` prop:
209
+ * nothing for `full` (inherit), the level otherwise. Spread it on the
210
+ * component's root element — the CSS policy does the rest.
211
+ */
212
+ declare function motionAttribute(level: MotionLevel | undefined): MotionLevel | undefined;
213
+ /**
214
+ * A component's motion, from its own `motion` prop and everything around it
215
+ * (provider, scopes, the OS preference) — whichever is lower. Use the returned
216
+ * `enabled` / `expressive` to gate JS-driven motion, and spread `attribute`
217
+ * as the root's `data-motion` so the CSS recipes inside agree:
218
+ *
219
+ * const motion = useMotionLevel(props.motion)
220
+ * <div data-motion={motion.attribute}>…</div>
221
+ */
222
+ declare function useMotionLevel(level?: MotionLevel): {
223
+ level: MotionLevel;
224
+ enabled: boolean;
225
+ expressive: boolean;
226
+ attribute: MotionLevel | undefined;
227
+ };
228
+ interface MotionScopeProps {
229
+ children: ReactNode;
230
+ /**
231
+ * How much motion this region may use. `subtle` keeps feedback, overlays
232
+ * and loaders and drops the flourishes; `off` stills everything. A scope
233
+ * can only turn motion down — it never overrides a reader's reduce-motion
234
+ * setting.
235
+ */
236
+ level: Exclude<MotionLevel, "full">;
237
+ }
238
+ /**
239
+ * Turns motion down for one region — a dense data view, an embedded widget, a
240
+ * screen a test captures — without touching the rest of the app. Renders a
241
+ * `display: contents` wrapper carrying `data-motion`, so it adds no box to the
242
+ * layout, and provides the same level to `useMotion()` / `useMotionLevel()`
243
+ * below it so JS-driven motion agrees with the CSS.
244
+ *
245
+ * Overlays portal out of the DOM subtree, so their CSS follows the app-level
246
+ * policy rather than the scope; set the level on <MotionProvider> to cover
247
+ * them too.
248
+ */
249
+ declare function MotionScope({ children, level }: MotionScopeProps): react.JSX.Element;
189
250
  /**
190
251
  * Read and control the motion policy. Falls back to a provider-less default
191
252
  * (follows the OS preference) so it's safe to call without a <MotionProvider> —
@@ -201,6 +262,64 @@ declare function useMotion(): MotionContextValue;
201
262
  */
202
263
  declare function useReducedMotion(): boolean;
203
264
 
265
+ /**
266
+ * Drives the `motion-shake` recipe: call `shake()` when an answer is refused
267
+ * (a wrong code, a submit with invalid fields) and spread `shakeProps` on the
268
+ * element carrying `motion-shake`.
269
+ *
270
+ * const { shake, shakeProps } = useShake()
271
+ * <div className="motion-shake" {...shakeProps}>…</div>
272
+ *
273
+ * The attribute is cleared when the animation ends, so the next refusal plays
274
+ * it again. A refusal that lands mid-shake restarts it: the attribute is
275
+ * dropped for one frame and set again, which is the only way to replay a CSS
276
+ * animation without remounting the element.
277
+ *
278
+ * The recipe's duration is expressive, so under `subtle` and reduced motion it
279
+ * is 0 — the shake resolves instantly, and the field's own error colour and
280
+ * message carry the refusal. Never shake without one.
281
+ */
282
+ declare function useShake(): {
283
+ shake: () => void;
284
+ shakeProps: {
285
+ "data-shake": "" | undefined;
286
+ onAnimationEnd: (event: AnimationEvent<HTMLElement>) => void;
287
+ };
288
+ };
289
+
290
+ /**
291
+ * Lets an element ease to its content's new size when the content changes in
292
+ * place — "Delete" becoming "Confirm delete?", "Copy" becoming "Copied".
293
+ *
294
+ * CSS cannot do this alone. A transition fires when a computed value changes,
295
+ * and a content-sized box computes `width: auto` before AND after the label
296
+ * swap, so there is nothing to interpolate; `interpolate-size` only helps
297
+ * between a keyword and a length. So the outer element gets an explicit pixel
298
+ * size, measured from an inner element that keeps sizing to its content, and
299
+ * `motion-size` on the outer one eases between the two pixel values.
300
+ *
301
+ * const size = useAutoSize<HTMLButtonElement, HTMLSpanElement>()
302
+ * <button ref={size.outerRef} className="motion-size">
303
+ * <span ref={size.innerRef} className="inline-flex w-max">{label}</span>
304
+ * </button>
305
+ *
306
+ * The outer element's own padding and border are added back, so the inner
307
+ * element is just the content. The first measurement is applied with
308
+ * transitions suppressed, so nothing animates on mount. Under `subtle` and
309
+ * reduced motion the recipe's size duration is 0 and the box simply resizes.
310
+ *
311
+ * Pass `enabled: false` when something else owns the size — a full-width
312
+ * stacked action, a caller's `w-*` class. The inline pixel size would win over
313
+ * any class, so the hook stands down and clears what it wrote.
314
+ */
315
+ declare function useAutoSize<Outer extends HTMLElement = HTMLElement, Inner extends HTMLElement = HTMLElement>({ axis, enabled }?: {
316
+ axis?: "width" | "height" | "both";
317
+ enabled?: boolean;
318
+ }): {
319
+ outerRef: react.RefObject<Outer | null>;
320
+ innerRef: react.RefObject<Inner | null>;
321
+ };
322
+
204
323
  interface UseInViewOptions {
205
324
  /** Stop observing after the first time it enters view. @default true */
206
325
  once?: boolean;
@@ -321,6 +440,118 @@ declare namespace Presence {
321
440
  var displayName: string;
322
441
  }
323
442
 
443
+ /**
444
+ * The palette: nine colour families and a scale under every tone, generated
445
+ * for whatever theme is painting. `scripts/build-palette.mjs` writes this into
446
+ * `src/palette.css`; `palette.test.ts` holds every built-in theme to it.
447
+ *
448
+ * The contract is roles, and roles are not enough for a product. Tags, avatars,
449
+ * labels and illustration need more colours than three tones, and raw Tailwind
450
+ * steps ignore the theme, so they were banned outright. These follow it:
451
+ *
452
+ * - A **family** (red, orange, yellow, green, teal, blue, purple, pink) keeps
453
+ * its own hue and leans toward the brand by half the gap, at most 15°, and
454
+ * only as far as the brand has colour to lean toward (an ink-black primary
455
+ * pulls nothing). Material 3's harmonize, the same lean the customizer gives
456
+ * status colours. Lightness and chroma are fixed per step, fitted inside sRGB
457
+ * across the whole lean, so no brand can push a step out of gamut.
458
+ * - **neutral** is the theme's own page and ink mixed in steps, so it carries
459
+ * whatever tint the theme's surfaces do.
460
+ * - Every **tone** (tone-1…3, info, warning, success, destructive) gets a scale
461
+ * on one shared ladder of depths, and the tone lands exactly on the step
462
+ * nearest its own lightness: a light status colour in dark mode is 800, a
463
+ * mid one is 500. The steps either side stretch to keep the ladder's ends,
464
+ * so a tone near one end does not crush five steps into the little room
465
+ * left past it, and tone-1-100 and success-100 are the same depth.
466
+ *
467
+ * Steps follow the mode rather than literal lightness: a low step is always
468
+ * near the page and a high step always far from it, so 800 text on a 100
469
+ * wash reads in both modes with no `dark:` (Sable has none).
470
+ */
471
+ declare const PALETTE_STEPS: readonly [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950];
472
+ type PaletteStep = (typeof PALETTE_STEPS)[number];
473
+ interface PaletteFamily {
474
+ name: string;
475
+ /** The family's own hue, before the lean. */
476
+ hue: number;
477
+ /** Step 500, per mode: lightness and the chroma the family is aiming for. */
478
+ light: {
479
+ l: number;
480
+ c: number;
481
+ };
482
+ dark: {
483
+ l: number;
484
+ c: number;
485
+ };
486
+ }
487
+ declare const PALETTE_FAMILIES: readonly PaletteFamily[];
488
+ /** The hue families by name — the values Badge, Pill and StatusDot take on `tone`. */
489
+ declare const PALETTE_COLORS: readonly ["red", "orange", "yellow", "green", "teal", "blue", "purple", "pink"];
490
+ type PaletteColor = (typeof PALETTE_COLORS)[number];
491
+ declare const isPaletteColor: (value: unknown) => value is PaletteColor;
492
+ /** Tokens that get a scale of their own, `--<token>-50` … `--<token>-950`. */
493
+ declare const PALETTE_TONES: readonly ["tone-1", "tone-2", "tone-3", "tone-info", "tone-warning", "success", "destructive"];
494
+ /** Everything the palette names: neutral, the families, then the tone scales. */
495
+ declare const PALETTE_SCALES: readonly ["neutral", ...string[], "tone-1", "tone-2", "tone-3", "tone-info", "tone-warning", "success", "destructive"];
496
+
497
+ interface BurstProps {
498
+ /**
499
+ * Plays the burst each time this value changes. Nothing plays on mount, so
500
+ * a page that loads with a post already liked stays still. A counter that
501
+ * goes up on each "on" is the usual trigger; leave it alone on "off" so
502
+ * un-liking is quiet.
503
+ */
504
+ trigger: unknown;
505
+ /**
506
+ * The palette families the dots take in turn. The ring blooms in the host's
507
+ * `currentColor` and fades into the first. Families, not colours: the
508
+ * palette is generated from the active theme, so the confetti re-themes
509
+ * with everything else. @default ["pink", "purple", "blue", "orange"]
510
+ */
511
+ palette?: readonly PaletteColor[];
512
+ /** How many places dots fly from; each throws a pair. @default 7 */
513
+ count?: number;
514
+ /**
515
+ * Throw this instead of dots: copies of the glyph being celebrated (an
516
+ * emoji reaction), larger than a dot and with no ring, the way a reaction
517
+ * sprays its own emoji. Text only — it is repeated once per piece.
518
+ */
519
+ particle?: ReactNode;
520
+ /**
521
+ * Also play once when it mounts. For a glyph that arrives BECAUSE of the
522
+ * action — a reaction pill that did not exist until the reader chose it —
523
+ * where mounting is the change. Never for a page that loads.
524
+ * @default false
525
+ */
526
+ playOnMount?: boolean;
527
+ /** Sizing (`[--burst-size:…]`) or placement. */
528
+ className?: string;
529
+ /**
530
+ * How much motion this component uses. A burst is pure flourish, so it
531
+ * renders only at `full`: `subtle` and `off` render nothing.
532
+ */
533
+ motion?: MotionLevel;
534
+ }
535
+ /**
536
+ * Burst — the follow-through after a small celebratory toggle: a disc that
537
+ * hollows into a ring, then dots thrown outward that shrink as they go. Place
538
+ * it inside a `relative` wrapper around the glyph it celebrates, beside a
539
+ * `motion-bloom` on the glyph itself:
540
+ *
541
+ * <span className="relative inline-flex">
542
+ * <span key={likes} className={liked ? "motion-bloom" : undefined}><Icon name="heart" /></span>
543
+ * <Burst trigger={likes} />
544
+ * </span>
545
+ *
546
+ * It sizes from `--burst-size` (the ring's diameter, default 2.25em — about
547
+ * twice the glyph) and colours from the themed palette families. Decorative and
548
+ * `aria-hidden`; it draws outside its box and never takes pointer events.
549
+ * Use it for a moment of delight on an action a person chose — a like, a
550
+ * star, a finished task — never on something the system did, and never on
551
+ * every row of a list at once.
552
+ */
553
+ declare function Burst({ trigger, palette, count, particle, playOnMount, className, motion, }: BurstProps): react.JSX.Element | null;
554
+
324
555
  /** Is the cross-document/SPA View Transitions API available? */
325
556
  declare function supportsViewTransitions(): boolean;
326
557
  /**
@@ -367,7 +598,9 @@ interface ButtonProps extends Omit<ComponentPropsWithRef<"button">, "onClick">,
367
598
  */
368
599
  render?: useRender.RenderProp;
369
600
  /**
370
- * Show a leading Spinner while an action is in flight, and ignore presses.
601
+ * Show a Spinner while an action is in flight, and ignore presses. It takes
602
+ * the `iconStart` slot, or lays over a plain label (faded in place) so the
603
+ * button keeps its width.
371
604
  * Sets `aria-busy` and `aria-disabled`, not the native `disabled`: disabling
372
605
  * the focused button dropped focus to the page, so a sheet opened by the
373
606
  * action had nowhere to return it. @default false
@@ -454,6 +687,135 @@ declare function ButtonGroup({ className, role, ...props }: ButtonGroupProps): r
454
687
 
455
688
  declare const buttonGroupMeta: ComponentMeta;
456
689
 
690
+ type IconSize = "icon" | "icon-sm" | "icon-xs";
691
+ interface ConfirmButtonProps extends Omit<ButtonProps, "children" | "onClick" | "variant" | "size" | "loading" | "loadingLabel" | "iconStart" | "render" | "type"> {
692
+ /** The idle label — the action, e.g. "Delete". */
693
+ children: ReactNode;
694
+ /**
695
+ * The label while armed, waiting for the second press. Defaults to
696
+ * "Confirm <label>?" for a text label ("Delete" → "Confirm delete?") and
697
+ * "Confirm?" otherwise. Pass it to localise.
698
+ */
699
+ confirmLabel?: ReactNode;
700
+ /**
701
+ * Called on the second press, while armed. May return a promise: the button
702
+ * then stays armed and shows its spinner until it settles.
703
+ */
704
+ onConfirm: () => unknown;
705
+ /** How long it stays armed without a second press, in ms. @default 3000 */
706
+ timeout?: number;
707
+ /** The idle look. @default "secondary" */
708
+ variant?: ButtonProps["variant"];
709
+ /** The armed look. @default "destructive" */
710
+ confirmVariant?: ButtonProps["variant"];
711
+ /** A labelled size — the label is the whole interaction, so no icon-only sizes. @default "md" */
712
+ size?: Exclude<NonNullable<ButtonProps["size"]>, IconSize>;
713
+ /** A leading icon, kept through both states (e.g. `<Icon name="trash" />`). */
714
+ icon?: ReactNode;
715
+ /**
716
+ * What assistive tech hears when it arms, after the armed label.
717
+ * @default "Press again to confirm."
718
+ */
719
+ confirmHint?: string;
720
+ /**
721
+ * How much motion this component uses: `full` (default) inherits the app's
722
+ * policy, `subtle` keeps feedback and drops the flourish, `off` stills it.
723
+ * It can only turn motion down — it never overrides a reader's reduce-motion
724
+ * setting. The width easing and the draining countdown are the flourish; the
725
+ * label cross-fade and colour change stay under `subtle`.
726
+ * @default "full"
727
+ */
728
+ motion?: MotionLevel;
729
+ }
730
+ /**
731
+ * ConfirmButton — an inline two-step confirm for a low-stakes destructive or
732
+ * irreversible action, where a modal would be heavier than the decision.
733
+ *
734
+ * <ConfirmButton icon={<Icon name="trash" />} onConfirm={removeRow}>Delete</ConfirmButton>
735
+ *
736
+ * The first press ARMS it: the label becomes the question ("Confirm delete?"),
737
+ * the button turns destructive, and a thin line drains along its foot for the
738
+ * time it will wait. A second press inside that time runs `onConfirm`. Leaving
739
+ * it — the timeout, Escape, focus moving away, a press elsewhere — disarms it
740
+ * and the original label returns. Enter and Space work twice, like a click.
741
+ *
742
+ * Both labels stay mounted in one grid cell and cross-fade. The button's width
743
+ * eases to the new label (useAutoSize + motion-size), so it grows into the
744
+ * question instead of jumping, and the neighbours it pushes travel rather than
745
+ * teleport. CSS alone cannot do it: a content-sized button computes
746
+ * `width: auto` before and after the swap, so nothing changes to transition.
747
+ *
748
+ * Built on Button: variants are swapped, never restyled, so every theme's
749
+ * destructive tier is the armed look.
750
+ */
751
+ declare function ConfirmButton({ children, confirmLabel, onConfirm, timeout, variant, confirmVariant, size, icon, confirmHint, motion, disabled, className, onBlur, onKeyDown, ref, ...props }: ConfirmButtonProps): react.JSX.Element;
752
+ declare namespace ConfirmButton {
753
+ var displayName: string;
754
+ }
755
+
756
+ declare const confirmButtonMeta: ComponentMeta;
757
+
758
+ type LabelledSize = "xs" | "sm" | "md";
759
+ interface LikeButtonProps extends Omit<ButtonProps, "children" | "variant" | "size" | "iconStart" | "iconEnd" | "badge" | "loading" | "loadingLabel" | "render" | "type"> {
760
+ /** Pressed (liked), controlled. */
761
+ pressed?: boolean;
762
+ /** Pressed (liked) at first, uncontrolled. @default false */
763
+ defaultPressed?: boolean;
764
+ /** Called when a press turns it on or off, with the new state. */
765
+ onPressedChange?: (pressed: boolean, event: MouseEvent<HTMLButtonElement>) => void;
766
+ /**
767
+ * The total, shown beside the glyph and rolled when it changes. Pressing
768
+ * adds or removes the viewer's like at once, before your handler has saved
769
+ * it, and the button goes back to showing `count` exactly whenever `count`
770
+ * changes — so pass the server's total and update it when the save lands.
771
+ * Omit it for a bare glyph.
772
+ */
773
+ count?: number;
774
+ /** How to write the count — `{ notation: "compact" }` for 1.2K. Passed to `Intl.NumberFormat`. */
775
+ format?: Intl.NumberFormatOptions;
776
+ /** The glyph, by icon name. Its `solid` variant is shown while pressed. @default "heart" */
777
+ icon?: string;
778
+ /**
779
+ * The palette family the glyph fills with while pressed; the burst blooms
780
+ * from it. A family, not a colour, so it follows the theme. @default "red"
781
+ */
782
+ tone?: PaletteColor;
783
+ /** The accessible name, read before the count. @default "Like" */
784
+ label?: string;
785
+ /** @default "ghost" */
786
+ variant?: "ghost" | "outline" | "secondary";
787
+ /** @default "sm" */
788
+ size?: LabelledSize;
789
+ /**
790
+ * How much motion this component uses: `full` (default) inherits the app's
791
+ * policy, `subtle` keeps feedback and drops the flourish, `off` stills it.
792
+ * It can only turn motion down — it never overrides a reader's reduce-motion
793
+ * setting. The bloom and burst are the flourish; the fill and the count
794
+ * changing stay.
795
+ */
796
+ motion?: MotionLevel;
797
+ }
798
+ /**
799
+ * LikeButton — a pressed-or-not toggle for a like, a star, a save. Pressing
800
+ * it on fills the glyph, which blooms past its size and settles while a ring
801
+ * and a spray of dots burst from it, and the count rolls up a digit. Pressing
802
+ * it off is quiet: the glyph empties and the count rolls back.
803
+ *
804
+ * <LikeButton count={post.likes} defaultPressed={post.liked} onPressedChange={(on) => save(on)} />
805
+ * <LikeButton icon="star" tone="yellow" label="Star" count={repo.stars} />
806
+ *
807
+ * A Sable Button carrying `aria-pressed`, with Toggle's controlled/uncontrolled
808
+ * contract (`pressed` / `defaultPressed` / `onPressedChange`). It composes
809
+ * Button rather than Toggle: Toggle's pressed fill is the one thing a like
810
+ * must not show — its state is the glyph.
811
+ */
812
+ declare function LikeButton({ className, count, format, icon, tone, label, variant, size, motion, pressed: pressedProp, defaultPressed, onPressedChange, onClick, ...props }: LikeButtonProps): react.JSX.Element;
813
+ declare namespace LikeButton {
814
+ var displayName: string;
815
+ }
816
+
817
+ declare const likeButtonMeta: ComponentMeta;
818
+
457
819
  interface CardProps extends ComponentPropsWithRef<"div"> {
458
820
  /** "default" = raised surface (bg-card + edge + soft shadow). "flat" = transparent. */
459
821
  variant?: "default" | "flat";
@@ -1260,8 +1622,21 @@ type OtpFieldProps = Omit<BaseRootProps, "className" | "render" | "length" | "ch
1260
1622
  * @default (index, length) => `Character ${index + 1} of ${length}`
1261
1623
  */
1262
1624
  getSlotLabel?: (index: number, length: number) => string;
1263
- /** Marks every slot invalid. `<Field error>` sets this for you. */
1625
+ /**
1626
+ * Marks every slot invalid: destructive border and digits, and — when it
1627
+ * turns on after mount — one short shake of the whole field. `<Field error>`
1628
+ * sets this for you.
1629
+ */
1264
1630
  "aria-invalid"?: boolean | "true" | "false";
1631
+ /**
1632
+ * How much motion this component uses: `full` (default) inherits the app's
1633
+ * policy, `subtle` keeps feedback and drops the flourish, `off` stills it.
1634
+ * It can only turn motion down — it never overrides a reader's reduce-motion
1635
+ * setting. The shake on a refused code is the flourish; the destructive
1636
+ * colour stays at every level.
1637
+ * @default "full"
1638
+ */
1639
+ motion?: MotionLevel;
1265
1640
  };
1266
1641
  /**
1267
1642
  * OtpField — a one-time-code entry over Base UI's OTP Field.
@@ -1278,8 +1653,13 @@ type OtpFieldProps = Omit<BaseRootProps, "className" | "render" | "length" | "ch
1278
1653
  * Slots are `text-mono-lg` (20px) so iOS Safari never zooms on focus, and sit
1279
1654
  * on the control ladder — `--control-md` wide, `--control-lg` tall — so a
1280
1655
  * compact Workspace retunes them with everything else.
1656
+ *
1657
+ * A refused code shakes the field once (motion-shake) as it turns invalid, and
1658
+ * the digits take the destructive colour. The slots are NOT cleared: the wrong
1659
+ * digits are the evidence of which one was mistyped, and the error message
1660
+ * under the field says what to do next.
1281
1661
  */
1282
- declare function OtpField({ className, length, groupSize, getSlotLabel, "aria-invalid": ariaInvalid, ...root }: OtpFieldProps): react.JSX.Element;
1662
+ declare function OtpField({ className, length, groupSize, getSlotLabel, "aria-invalid": ariaInvalid, motion, onAnimationEnd, ...root }: OtpFieldProps): react.JSX.Element;
1283
1663
  declare namespace OtpField {
1284
1664
  var displayName: string;
1285
1665
  }
@@ -1431,7 +1811,7 @@ declare namespace Label {
1431
1811
 
1432
1812
  declare const labelMeta: ComponentMeta;
1433
1813
 
1434
- type RootProps$7 = Omit<ComponentProps<typeof Switch$1.Root>, "className"> & {
1814
+ type RootProps$8 = Omit<ComponentProps<typeof Switch$1.Root>, "className"> & {
1435
1815
  className?: string;
1436
1816
  };
1437
1817
  /**
@@ -1445,15 +1825,22 @@ type RootProps$7 = Omit<ComponentProps<typeof Switch$1.Root>, "className"> & {
1445
1825
  * Use it for immediate-effect toggles. For deferred/form-submit choices that
1446
1826
  * need a visible label and validation, reach for a checkbox instead.
1447
1827
  */
1448
- declare function Switch({ className, ...props }: RootProps$7): react.JSX.Element;
1828
+ declare function Switch({ className, ...props }: RootProps$8): react.JSX.Element;
1449
1829
  declare namespace Switch {
1450
1830
  var displayName: string;
1451
1831
  }
1452
1832
 
1453
1833
  declare const switchMeta: ComponentMeta;
1454
1834
 
1455
- type RootProps$6 = Omit<ComponentProps<typeof Checkbox$1.Root>, "className"> & {
1835
+ type RootProps$7 = Omit<ComponentProps<typeof Checkbox$1.Root>, "className"> & {
1456
1836
  className?: string;
1837
+ /**
1838
+ * How much motion this component uses: `full` (default) inherits the app's
1839
+ * policy, `subtle` keeps feedback and drops the flourish, `off` stills it.
1840
+ * It can only turn motion down — it never overrides a reader's reduce-motion
1841
+ * setting. Under `subtle` the tick fades in instead of drawing itself.
1842
+ */
1843
+ motion?: MotionLevel;
1457
1844
  };
1458
1845
  /**
1459
1846
  * Checkbox — themed wrapper over Base UI's Checkbox (Root + Indicator).
@@ -1469,7 +1856,7 @@ type RootProps$6 = Omit<ComponentProps<typeof Checkbox$1.Root>, "className"> & {
1469
1856
  * The box and its mark are shared with CheckboxCard (`CHECK_BOX` +
1470
1857
  * `CheckboxMark`), so the standalone control and the card's box cannot drift.
1471
1858
  */
1472
- declare function Checkbox({ className, children, ...props }: RootProps$6): react.JSX.Element;
1859
+ declare function Checkbox({ className, children, motion, ...props }: RootProps$7): react.JSX.Element;
1473
1860
  declare namespace Checkbox {
1474
1861
  var displayName: string;
1475
1862
  }
@@ -1494,23 +1881,47 @@ declare const checkboxMeta: ComponentMeta;
1494
1881
  * no rule — the switcher idiom (Preview / Code, view modes inside a card),
1495
1882
  * where a rule under a short row of two or three options reads as structure
1496
1883
  * that is not there. The active tab reads from Base UI's `data-active`.
1884
+ *
1885
+ * In both styles the active mark is ONE element that travels: TabsList renders
1886
+ * Base UI's Tabs.Indicator for you, and it glides (`motion-glide`) to the new
1887
+ * tab and stretches to its width. See TabsList for the hand-off that keeps the
1888
+ * first paint right before it mounts.
1497
1889
  */
1498
- declare const Tabs: react.ForwardRefExoticComponent<Omit<_base_ui_react.TabsRootProps, "ref"> & react.RefAttributes<HTMLDivElement>>;
1890
+ type RootProps$6 = ComponentProps<typeof Tabs$1.Root> & {
1891
+ /**
1892
+ * How much motion this component uses: `full` (default) inherits the app's
1893
+ * policy, `subtle` keeps feedback and drops the glide, `off` stills it. It
1894
+ * can only turn motion down — it never overrides a reader's reduce-motion
1895
+ * setting.
1896
+ * @default "full"
1897
+ */
1898
+ motion?: MotionLevel;
1899
+ };
1900
+ declare function Tabs({ motion, ...props }: RootProps$6): react.JSX.Element;
1901
+ declare namespace Tabs {
1902
+ var displayName: string;
1903
+ }
1499
1904
  type TabsVariant = "underline" | "pill";
1500
1905
  type ListProps$1 = Omit<ComponentProps<typeof Tabs$1.List>, "className"> & {
1501
1906
  className?: string;
1502
1907
  /** `underline` (default) or `pill`. Triggers inside inherit it. */
1503
1908
  variant?: TabsVariant;
1504
1909
  };
1505
- /** The tablist — a row of triggers, on a divider rule or as pills. */
1506
- declare function TabsList({ className, variant, ...props }: ListProps$1): react.JSX.Element;
1910
+ /**
1911
+ * The tablist — a row of triggers, on a divider rule or as pills. It renders
1912
+ * the gliding indicator itself, so composing TabsList + TabsTrigger is all a
1913
+ * consumer writes.
1914
+ */
1915
+ declare function TabsList({ className, variant, children, ...props }: ListProps$1): react.JSX.Element;
1507
1916
  type TriggerProps$4 = Omit<ComponentProps<typeof Tabs$1.Tab>, "className"> & {
1508
1917
  className?: string;
1509
1918
  };
1510
1919
  /**
1511
1920
  * A single tab button (Base UI's Tabs.Tab). Underline: the active tab draws its
1512
1921
  * rule via `data-active`, and `-mb-px` overlaps the list's divider. Pill: the
1513
- * active tab takes a muted fill on the control ladder, and its label is trimmed
1922
+ * active tab takes a muted fill on the control ladder. In both, that per-tab
1923
+ * mark is only the fallback until TabsList's gliding indicator is shown; the
1924
+ * tab is `relative` so it paints over the indicator. The pill label is trimmed
1514
1925
  * to the cap height so it centres optically in the short pill. A pill tab is a
1515
1926
  * button-shaped control, so it takes the theme's button shape (`--button-radius`,
1516
1927
  * as Button does): a pill in Sable, rounded in Poppy, square in Meridian.
@@ -1521,7 +1932,22 @@ declare function TabsTrigger({ className, children, ...props }: TriggerProps$4):
1521
1932
  type PanelProps$3 = Omit<ComponentProps<typeof Tabs$1.Panel>, "className"> & {
1522
1933
  className?: string;
1523
1934
  };
1524
- /** The panel shown when its matching trigger is active. */
1935
+ /**
1936
+ * The panel shown when its matching trigger is active.
1937
+ *
1938
+ * A changed panel fades in (`animate-fade-in`, essential: it confirms the
1939
+ * click landed even when two panels look alike). Opacity only — a slide would
1940
+ * move the content the reader is about to read. Two guards keep it from
1941
+ * costing layout:
1942
+ *
1943
+ * - Not on first render. Base UI reports `data-activation-direction="none"`
1944
+ * until the selection has changed, so a page full of tabs does not fade in
1945
+ * on load.
1946
+ * - The outgoing panel leaves at once. Base UI keeps it mounted until its
1947
+ * animations finish (`data-ending-style`); left displayed, a switch made
1948
+ * mid-fade stacked both panels for a moment and the page jumped by a panel's
1949
+ * height. `hidden` while ending takes it out of layout immediately.
1950
+ */
1525
1951
  declare function TabsPanel({ className, ...props }: PanelProps$3): react.JSX.Element;
1526
1952
 
1527
1953
  declare const tabsMeta: ComponentMeta;
@@ -1590,6 +2016,38 @@ type SimpleTooltipProps = Omit<ComponentProps<typeof Tooltip$1.Root>, "children"
1590
2016
  * <TooltipProvider>; for arrows or richer content, use the composable parts.
1591
2017
  */
1592
2018
  declare function SimpleTooltip({ content, children, side, align, sideOffset, ...root }: SimpleTooltipProps): react.JSX.Element;
2019
+ interface TooltipGroupProps {
2020
+ /** The triggers — `SimpleTooltip`s — that share the one tooltip. */
2021
+ children: ReactNode;
2022
+ /**
2023
+ * How much motion this component uses: `full` (default) inherits the app's
2024
+ * policy, `subtle` keeps feedback and drops the flourish, `off` stills it.
2025
+ * It can only turn motion down — it never overrides a reader's reduce-motion
2026
+ * setting. Under `subtle` the tooltip jumps between triggers and only
2027
+ * cross-fades its label.
2028
+ */
2029
+ motion?: MotionLevel;
2030
+ }
2031
+ /**
2032
+ * TooltipGroup — one tooltip shared by every `SimpleTooltip` inside it, which
2033
+ * glides from trigger to trigger as the pointer moves along a toolbar instead
2034
+ * of closing and reopening:
2035
+ *
2036
+ * <TooltipGroup>
2037
+ * <SimpleTooltip content="Bold"><Button … /></SimpleTooltip>
2038
+ * <SimpleTooltip content="Italic"><Button … /></SimpleTooltip>
2039
+ * </TooltipGroup>
2040
+ *
2041
+ * Renders no element of its own, so it drops into any layout. Each
2042
+ * SimpleTooltip keeps its own `content`, `side`, `align` and `sideOffset`;
2043
+ * `disabled` still turns one trigger off. Root-level props a SimpleTooltip
2044
+ * would otherwise take (`open`, `onOpenChange`) belong to the shared tooltip
2045
+ * and are ignored inside a group. The composable Tooltip parts are unaffected.
2046
+ */
2047
+ declare function TooltipGroup({ children, motion }: TooltipGroupProps): react.JSX.Element;
2048
+ declare namespace TooltipGroup {
2049
+ var displayName: string;
2050
+ }
1593
2051
 
1594
2052
  declare const tooltipMeta: ComponentMeta;
1595
2053
 
@@ -1870,6 +2328,64 @@ declare namespace ThinkingOrb {
1870
2328
 
1871
2329
  declare const thinkingOrbMeta: ComponentMeta;
1872
2330
 
2331
+ type ToolCallStatus = "running" | "awaiting" | "complete" | "error" | "denied";
2332
+ declare const TOOL_CALL_STATUS_LABELS: Record<ToolCallStatus, string>;
2333
+ interface ToolCallProps extends Omit<ComponentPropsWithRef<"div">, "title" | "children"> {
2334
+ /** The tool's own name, as the model called it (`search_docs`). Shown in mono. */
2335
+ name: string;
2336
+ /**
2337
+ * What the call does, in words a person reads ("Searched the docs"). Leads the
2338
+ * row, with `name` after it. Omit it and the row leads with `name`.
2339
+ */
2340
+ title?: ReactNode;
2341
+ /**
2342
+ * Where the call is. `awaiting` is a call held for the person's approval;
2343
+ * `denied` is one they declined.
2344
+ * @default "running"
2345
+ */
2346
+ status?: ToolCallStatus;
2347
+ /** Overrides the status word ("Running", "Done", …), for another language or a more specific phrase. */
2348
+ statusLabel?: string;
2349
+ /** The arguments. A string shows as is; anything else as formatted JSON. */
2350
+ input?: unknown;
2351
+ /** The result, shown the same way as `input`. `children` replaces it with a rendered result. */
2352
+ output?: unknown;
2353
+ /** What went wrong, for `status="error"`. Always visible, under the row, not behind the disclosure. */
2354
+ error?: ReactNode;
2355
+ /** A rendered result in place of `output`'s code view: a list of hits, a chart, a diff. */
2356
+ children?: ReactNode;
2357
+ /** Open the details on mount. @default false */
2358
+ defaultOpen?: boolean;
2359
+ /** Controlled open state of the details. */
2360
+ open?: boolean;
2361
+ onOpenChange?: (open: boolean) => void;
2362
+ }
2363
+ /**
2364
+ * ToolCall — one tool an agent called, inside its turn: what it did, where it
2365
+ * is, and the arguments and result one click away.
2366
+ *
2367
+ * <ToolCall
2368
+ * name="search_docs"
2369
+ * title="Searched the docs"
2370
+ * status="complete"
2371
+ * input={{ query: "date range" }}
2372
+ * output={{ hits: 3 }}
2373
+ * />
2374
+ *
2375
+ * The row is the summary, so a thread of ten calls stays scannable; the details
2376
+ * are a disclosure because almost nobody reads them and the person checking
2377
+ * one call needs all of it. The status glyph is the one thing that moves: the
2378
+ * spinner swaps for the outcome when the call settles, which is the moment
2379
+ * worth seeing. A status change is announced once, politely, after mount — a
2380
+ * thread loaded from history announces nothing.
2381
+ */
2382
+ declare function ToolCall({ name, title, status, statusLabel, input, output, error, children, defaultOpen, open, onOpenChange, className, ...props }: ToolCallProps): react.JSX.Element;
2383
+ declare namespace ToolCall {
2384
+ var displayName: string;
2385
+ }
2386
+
2387
+ declare const toolCallMeta: ComponentMeta;
2388
+
1873
2389
  interface StreamingTextProps extends Omit<ComponentPropsWithoutRef<"p">, "children"> {
1874
2390
  /**
1875
2391
  * The text received SO FAR. Grow it as tokens arrive; this component assumes
@@ -2195,6 +2711,51 @@ declare const meterTrackVariants: (props?: ({
2195
2711
 
2196
2712
  declare const meterMeta: ComponentMeta;
2197
2713
 
2714
+ interface NumberTickerProps extends Omit<ComponentPropsWithRef<"span">, "children" | "prefix"> {
2715
+ /** The number to show. When it changes, the digits roll to it. */
2716
+ value: number;
2717
+ /** How to write the number — currency, percent, fraction digits, compact. Passed to `Intl.NumberFormat`. */
2718
+ format?: Intl.NumberFormatOptions;
2719
+ /** BCP 47 locale(s) for the formatting. @default the runtime locale */
2720
+ locales?: string | string[];
2721
+ /** Before the number. A string is part of the number's text (and rolls in or out with it); an element is rendered as given. */
2722
+ prefix?: ReactNode;
2723
+ /** After the number ("+", " pts"). A string is part of the number's text; an element is rendered as given. */
2724
+ suffix?: ReactNode;
2725
+ /**
2726
+ * Which way the digits roll. `auto` rolls up when the value grows and down
2727
+ * when it shrinks, like an odometer; `up` / `down` fix the direction (a
2728
+ * countdown, a score that only climbs). @default "auto"
2729
+ */
2730
+ trend?: "auto" | "up" | "down";
2731
+ /**
2732
+ * How much motion this component uses: `full` (default) inherits the app's
2733
+ * policy, `subtle` keeps feedback and drops the flourish, `off` stills it. It
2734
+ * can only turn motion down — it never overrides a reader's reduce-motion
2735
+ * setting.
2736
+ */
2737
+ motion?: MotionLevel;
2738
+ }
2739
+ /**
2740
+ * A number that rolls to its new value digit by digit, like an odometer —
2741
+ * for a figure that changes in place while someone watches it: a dashboard
2742
+ * total, a live count, a price as options change. Each digit is a column that
2743
+ * turns to its new place; separators, signs and units hold still; a digit that
2744
+ * appears or goes away eases its width, so the text around it never jumps.
2745
+ *
2746
+ * The first render is at rest — a number on first paint is content, not news.
2747
+ * Under `subtle` (or reduced motion) the value simply updates. The visible
2748
+ * columns are aria-hidden; the whole written number is real text for assistive
2749
+ * tech and for copying. It is not a live region — pass `aria-live` when a
2750
+ * change should be announced.
2751
+ */
2752
+ declare function NumberTicker({ value, format, locales, prefix, suffix, trend, motion, className, ...props }: NumberTickerProps): react.JSX.Element;
2753
+ declare namespace NumberTicker {
2754
+ var displayName: string;
2755
+ }
2756
+
2757
+ declare const numberTickerMeta: ComponentMeta;
2758
+
2198
2759
  /**
2199
2760
  * One segment's fill. The decorative tones lead, because a breakdown names
2200
2761
  * categories (kinds of sale, file types, teams), not good and bad; the status
@@ -2357,7 +2918,19 @@ interface CartesianBaseProps {
2357
2918
  xAxis?: boolean;
2358
2919
  /** The vertical axis. @default false for values (columns), true for categories (horizontal bars) */
2359
2920
  yAxis?: boolean;
2360
- /** Play the arrival when the chart scrolls into view. @default true */
2921
+ /**
2922
+ * How much motion this component uses: `full` (default) inherits the app's
2923
+ * policy, `subtle` keeps feedback and drops the flourish, `off` stills it. It
2924
+ * can only turn motion down — it never overrides a reader's reduce-motion
2925
+ * setting. The arrival and the data-change morph are the flourish; the hover
2926
+ * dim and the gliding cursor are the feedback `subtle` keeps.
2927
+ */
2928
+ motion?: MotionLevel;
2929
+ /**
2930
+ * Play the arrival when the chart scrolls into view. `animate={false}` is
2931
+ * `motion="subtle"`.
2932
+ * @deprecated Use `motion="subtle"` (what `animate={false}` now maps to: no arrival, hover kept) or `motion="off"`.
2933
+ */
2361
2934
  animate?: boolean;
2362
2935
  /** The highlighted row (controlled). `null` for none. */
2363
2936
  activeIndex?: number | null;
@@ -2466,7 +3039,19 @@ interface PieChartProps {
2466
3039
  tooltip?: boolean | ChartTooltipOptions;
2467
3040
  valueFormatter?: ChartValueFormatter;
2468
3041
  locale?: string;
2469
- /** Sweep the slices in clockwise when the chart scrolls into view. @default true */
3042
+ /**
3043
+ * How much motion this component uses: `full` (default) inherits the app's
3044
+ * policy, `subtle` keeps feedback and drops the flourish, `off` stills it. It
3045
+ * can only turn motion down — it never overrides a reader's reduce-motion
3046
+ * setting. The sweep, the slice morph and the rolling centre number are the
3047
+ * flourish; the hover pull-out and dim are the feedback `subtle` keeps.
3048
+ */
3049
+ motion?: MotionLevel;
3050
+ /**
3051
+ * Sweep the slices in clockwise when the chart scrolls into view.
3052
+ * `animate={false}` is `motion="subtle"`.
3053
+ * @deprecated Use `motion="subtle"` (what `animate={false}` now maps to: no arrival, hover kept) or `motion="off"`.
3054
+ */
2470
3055
  animate?: boolean;
2471
3056
  /** The pulled-out slice (controlled). */
2472
3057
  activeIndex?: number | null;
@@ -2481,7 +3066,7 @@ interface PieChartProps {
2481
3066
  * clockwise from 12 o'clock as the chart scrolls into view, and the active
2482
3067
  * slice pulls outward.
2483
3068
  */
2484
- declare function PieChart({ data, index, valueKey, label, categories, className, donut, centerLabel, separator, labels, labelContent, legend, tooltip, valueFormatter, locale, animate, activeIndex, defaultActiveIndex, onActiveIndexChange, }: PieChartProps): react.JSX.Element;
3069
+ declare function PieChart({ data, index, valueKey, label, categories, className, donut, centerLabel, separator, labels, labelContent, legend, tooltip, valueFormatter, locale, motion, animate, activeIndex, defaultActiveIndex, onActiveIndexChange, }: PieChartProps): react.JSX.Element;
2485
3070
  declare namespace PieChart {
2486
3071
  var displayName: string;
2487
3072
  }
@@ -2514,7 +3099,19 @@ interface RadarChartProps {
2514
3099
  tooltip?: boolean | ChartTooltipOptions;
2515
3100
  valueFormatter?: ChartValueFormatter;
2516
3101
  locale?: string;
2517
- /** Grow the polygons from the centre when the chart scrolls into view. @default true */
3102
+ /**
3103
+ * How much motion this component uses: `full` (default) inherits the app's
3104
+ * policy, `subtle` keeps feedback and drops the flourish, `off` stills it. It
3105
+ * can only turn motion down — it never overrides a reader's reduce-motion
3106
+ * setting. The polygons growing in and morphing are the flourish; the
3107
+ * hover dot is the feedback `subtle` keeps.
3108
+ */
3109
+ motion?: MotionLevel;
3110
+ /**
3111
+ * Grow the polygons from the centre when the chart scrolls into view.
3112
+ * `animate={false}` is `motion="subtle"`.
3113
+ * @deprecated Use `motion="subtle"` (what `animate={false}` now maps to: no arrival, hover kept) or `motion="off"`.
3114
+ */
2518
3115
  animate?: boolean;
2519
3116
  activeIndex?: number | null;
2520
3117
  defaultActiveIndex?: number | null;
@@ -2526,7 +3123,7 @@ interface RadarChartProps {
2526
3123
  * spokes and one to three series. Polygons grow out from the centre as the
2527
3124
  * chart scrolls into view.
2528
3125
  */
2529
- declare function RadarChart({ data, index, series: rawSeries, label, className, grid, gridFill, filled, dots, radiusAxis, legend, tooltip, valueFormatter, locale, animate, activeIndex, defaultActiveIndex, onActiveIndexChange, }: RadarChartProps): react.JSX.Element;
3126
+ declare function RadarChart({ data, index, series: rawSeries, label, className, grid, gridFill, filled, dots, radiusAxis, legend, tooltip, valueFormatter, locale, motion, animate, activeIndex, defaultActiveIndex, onActiveIndexChange, }: RadarChartProps): react.JSX.Element;
2530
3127
  declare namespace RadarChart {
2531
3128
  var displayName: string;
2532
3129
  }
@@ -2563,7 +3160,19 @@ interface RadialChartProps {
2563
3160
  tooltip?: boolean | ChartTooltipOptions;
2564
3161
  valueFormatter?: ChartValueFormatter;
2565
3162
  locale?: string;
2566
- /** Draw the rings round from their start when the chart scrolls into view. @default true */
3163
+ /**
3164
+ * How much motion this component uses: `full` (default) inherits the app's
3165
+ * policy, `subtle` keeps feedback and drops the flourish, `off` stills it. It
3166
+ * can only turn motion down — it never overrides a reader's reduce-motion
3167
+ * setting. The draw-on, the ring morph and the rolling centre number are the
3168
+ * flourish; the hover dim is the feedback `subtle` keeps.
3169
+ */
3170
+ motion?: MotionLevel;
3171
+ /**
3172
+ * Draw the rings round from their start when the chart scrolls into view.
3173
+ * `animate={false}` is `motion="subtle"`.
3174
+ * @deprecated Use `motion="subtle"` (what `animate={false}` now maps to: no arrival, hover kept) or `motion="off"`.
3175
+ */
2567
3176
  animate?: boolean;
2568
3177
  activeIndex?: number | null;
2569
3178
  defaultActiveIndex?: number | null;
@@ -2575,7 +3184,7 @@ interface RadialChartProps {
2575
3184
  * gauge and `stacked` splits one ring between rows. Rings draw round from 12
2576
3185
  * o'clock (or the gauge's left) as the chart scrolls into view.
2577
3186
  */
2578
- declare function RadialChart({ data, index, valueKey, label, categories, className, max, sweep, stacked, track, labels, centerLabel, legend, tooltip, valueFormatter, locale, animate, activeIndex, defaultActiveIndex, onActiveIndexChange, }: RadialChartProps): react.JSX.Element;
3187
+ declare function RadialChart({ data, index, valueKey, label, categories, className, max, sweep, stacked, track, labels, centerLabel, legend, tooltip, valueFormatter, locale, motion, animate, activeIndex, defaultActiveIndex, onActiveIndexChange, }: RadialChartProps): react.JSX.Element;
2579
3188
  declare namespace RadialChart {
2580
3189
  var displayName: string;
2581
3190
  }
@@ -2591,7 +3200,19 @@ interface SparklineProps extends Omit<ComponentPropsWithRef<"svg">, "children" |
2591
3200
  variant?: "line" | "area" | "bar";
2592
3201
  /** Colour by role. @default "primary" */
2593
3202
  tone?: ChartTone;
2594
- /** Draw on (or rise) when it scrolls into view. @default true */
3203
+ /**
3204
+ * How much motion this component uses: `full` (default) inherits the app's
3205
+ * policy, `subtle` keeps feedback and drops the flourish, `off` stills it. It
3206
+ * can only turn motion down — it never overrides a reader's reduce-motion
3207
+ * setting. Drawing on (or rising) as it scrolls into view is the
3208
+ * flourish, so `subtle` shows the finished line.
3209
+ */
3210
+ motion?: MotionLevel;
3211
+ /**
3212
+ * Draw on (or rise) when it scrolls into view. `animate={false}` is
3213
+ * `motion="subtle"`.
3214
+ * @deprecated Use `motion="subtle"` (what `animate={false}` now maps to) or `motion="off"`.
3215
+ */
2595
3216
  animate?: boolean;
2596
3217
  /** BCP 47 locale for the spoken numbers. */
2597
3218
  locale?: string;
@@ -2602,7 +3223,7 @@ interface SparklineProps extends Omit<ComponentPropsWithRef<"svg">, "children" |
2602
3223
  * stretched to fit, so it follows its container. For values a reader needs
2603
3224
  * to look up, use AreaChart or LineChart.
2604
3225
  */
2605
- declare function Sparkline({ data, label, variant, tone, animate, locale, className, ...props }: SparklineProps): react.JSX.Element;
3226
+ declare function Sparkline({ data, label, variant, tone, motion, animate, locale, className, ...props }: SparklineProps): react.JSX.Element;
2606
3227
  declare namespace Sparkline {
2607
3228
  var displayName: string;
2608
3229
  }
@@ -2753,8 +3374,16 @@ type ToggleGroupProps = Omit<ComponentProps<typeof ToggleGroup$1>, "className">
2753
3374
  * @default "default"
2754
3375
  */
2755
3376
  appearance?: ToggleGroupAppearance;
3377
+ /**
3378
+ * How much motion this component uses: `full` (default) inherits the app's
3379
+ * policy, `subtle` keeps feedback and drops the glide, `off` stills it. It
3380
+ * can only turn motion down — it never overrides a reader's reduce-motion
3381
+ * setting.
3382
+ * @default "full"
3383
+ */
3384
+ motion?: MotionLevel;
2756
3385
  };
2757
- declare function ToggleGroup({ className, appearance, ...props }: ToggleGroupProps): react.JSX.Element;
3386
+ declare function ToggleGroup({ className, appearance, motion, children, ...props }: ToggleGroupProps): react.JSX.Element;
2758
3387
  declare namespace ToggleGroup {
2759
3388
  var displayName: string;
2760
3389
  }
@@ -3509,6 +4138,13 @@ interface NotificationBadgeProps extends ComponentPropsWithRef<"span">, Omit<Var
3509
4138
  * corner. @default false
3510
4139
  */
3511
4140
  overlay?: boolean;
4141
+ /**
4142
+ * How much motion this component uses: `full` (default) inherits the app's
4143
+ * policy, `subtle` keeps feedback and drops the flourish, `off` stills it. It
4144
+ * can only turn motion down — it never overrides a reader's reduce-motion
4145
+ * setting.
4146
+ */
4147
+ motion?: MotionLevel;
3512
4148
  }
3513
4149
  /**
3514
4150
  * An unread indicator. Two modes: a bare `dot`, or a `count` pill that shows
@@ -3516,11 +4152,15 @@ interface NotificationBadgeProps extends ComponentPropsWithRef<"span">, Omit<Var
3516
4152
  * picks the fill (destructive default; primary/neutral for non-alarming counts),
3517
4153
  * `size` scales it, and `overlay` pins it to the corner of a `relative` host.
3518
4154
  *
4155
+ * A count that changes rolls to its new number (NumberTicker), and a badge that
4156
+ * shows up after being empty pops in (motion-appear) — but never on first
4157
+ * paint, so a page that loads with three unread does not perform them.
4158
+ *
3519
4159
  * Decorative: it is `aria-hidden`, so the count reaches assistive tech through
3520
4160
  * the host's own name ("Notifications, 3 unread"). Pass `aria-hidden={false}`
3521
4161
  * only when the badge stands alone and its number is the information.
3522
4162
  */
3523
- declare function NotificationBadge({ dot, count, max, tone, size, overlay, className, ...props }: NotificationBadgeProps): react.JSX.Element | null;
4163
+ declare function NotificationBadge({ dot, count, max, tone, size, overlay, motion, className, ...props }: NotificationBadgeProps): react.JSX.Element | null;
3524
4164
  declare namespace NotificationBadge {
3525
4165
  var displayName: string;
3526
4166
  }
@@ -3559,6 +4199,14 @@ type CalendarProps = DayPickerProps & {
3559
4199
  * @default false
3560
4200
  */
3561
4201
  bare?: boolean;
4202
+ /**
4203
+ * How much motion this component uses: `full` (default) inherits the app's
4204
+ * policy, `subtle` keeps feedback and drops the month slide, `off` stills
4205
+ * it. It can only turn motion down — it never overrides a reader's
4206
+ * reduce-motion setting.
4207
+ * @default "full"
4208
+ */
4209
+ motion?: MotionLevel;
3562
4210
  };
3563
4211
  /**
3564
4212
  * Calendar — an owned wrapper over react-day-picker v9, themed entirely with
@@ -3571,7 +4219,7 @@ type CalendarProps = DayPickerProps & {
3571
4219
  * const [date, setDate] = useState<Date>()
3572
4220
  * <Calendar mode="single" selected={date} onSelect={setDate} />
3573
4221
  */
3574
- declare function Calendar({ className, classNames, showOutsideDays, components, bare, ...props }: CalendarProps): react.JSX.Element;
4222
+ declare function Calendar({ className, classNames, showOutsideDays, components, bare, motion, animate, ...props }: CalendarProps): react.JSX.Element;
3575
4223
  declare namespace Calendar {
3576
4224
  var displayName: string;
3577
4225
  }
@@ -3702,7 +4350,7 @@ declare const datePickerMeta: ComponentMeta;
3702
4350
  * binds it via Base UI's `toastManager` prop.
3703
4351
  */
3704
4352
  declare const toastManager: _base_ui_react.ToastManager<any>;
3705
- /** Visual/semantic type of a toast — drives the accent and (for loading) a spinner. */
4353
+ /** Visual/semantic type of a toast — drives the status glyph and (for loading) a spinner. */
3706
4354
  type ToastType = "success" | "error" | "warning" | "info" | "loading";
3707
4355
  /** Screen anchor for the toast stack. */
3708
4356
  type ToastPosition = "top-left" | "top-center" | "top-right" | "bottom-left" | "bottom-center" | "bottom-right";
@@ -3913,7 +4561,7 @@ type TriggerProps$1 = Omit<ComponentProps<typeof Accordion$1.Trigger>, "classNam
3913
4561
  * e.g. a plus-becomes-an-× FAQ toggle:
3914
4562
  *
3915
4563
  * indicator={
3916
- * <Icon name="plus" className="text-xs text-muted-foreground transition-transform [[data-panel-open]_&]:rotate-45" />
4564
+ * <Icon name="plus" className="text-xs text-muted-foreground motion-interactive [[data-panel-open]_&]:rotate-45" />
3917
4565
  * }
3918
4566
  *
3919
4567
  * When omitted, the default chevron (rotating 180° on open) is used.
@@ -5101,7 +5749,7 @@ type GroupProps$1 = Omit<ComponentProps<typeof Collapsible>, "children" | "class
5101
5749
  * <PropertyRow label="Tint">…</PropertyRow>
5102
5750
  * </PropertyGroup>
5103
5751
  */
5104
- declare function PropertyGroup({ label, summary, className, children, ...props }: GroupProps$1): react.JSX.Element;
5752
+ declare function PropertyGroup({ label, summary, className, children, open: openProp, defaultOpen, onOpenChange, ...props }: GroupProps$1): react.JSX.Element;
5105
5753
  declare namespace PropertyGroup {
5106
5754
  var displayName: string;
5107
5755
  }
@@ -5221,7 +5869,16 @@ declare function treeIndent(depth: number): string;
5221
5869
  * `className="min-h-0 flex-1 overflow-y-auto scrollbar-quiet"` when the tree is
5222
5870
  * the scrolling region itself.
5223
5871
  */
5224
- declare function Tree({ className, children, onKeyDown, ...props }: ComponentProps<"div">): react.JSX.Element;
5872
+ type TreeProps = ComponentProps<"div"> & {
5873
+ /**
5874
+ * How much motion this component uses: `full` (default) inherits the app's
5875
+ * policy, `subtle` keeps feedback and drops the flourish, `off` stills it.
5876
+ * It can only turn motion down — it never overrides a reader's reduce-motion
5877
+ * setting. Under `subtle` expanded rows appear at once instead of unfolding.
5878
+ */
5879
+ motion?: MotionLevel;
5880
+ };
5881
+ declare function Tree({ className, children, onKeyDown, motion, ...props }: TreeProps): react.JSX.Element;
5225
5882
  declare namespace Tree {
5226
5883
  var displayName: string;
5227
5884
  }
@@ -5547,10 +6204,23 @@ declare const appShellMeta: ComponentMeta;
5547
6204
  type SidebarContextValue = {
5548
6205
  collapsed: boolean;
5549
6206
  icons: boolean;
6207
+ /**
6208
+ * The rail has been collapsed at some point in this mount, so labels that
6209
+ * mount now are coming back on a reopen and may fade in. False on first
6210
+ * paint, so an expanded rail's labels are simply there on load.
6211
+ */
6212
+ reopened?: boolean;
5550
6213
  };
5551
- /** Read the rail's collapsed state — e.g. to swap a full wordmark for a mark. */
5552
6214
  declare function useSidebar(): SidebarContextValue;
5553
6215
  interface SidebarProps extends ComponentPropsWithRef<"aside"> {
6216
+ /**
6217
+ * How much motion this component uses: `full` (default) inherits the app's
6218
+ * policy, `subtle` keeps feedback and drops the collapse ease and the
6219
+ * current-page glide, `off` stills it. It can only turn motion down — it
6220
+ * never overrides a reader's reduce-motion setting.
6221
+ * @default "full"
6222
+ */
6223
+ motion?: MotionLevel;
5554
6224
  /**
5555
6225
  * Collapse the rail to an icon-only width. Controlled — drive it from app
5556
6226
  * state and wire a toggle (e.g. a Button in the header or footer). Collapsed,
@@ -5587,7 +6257,7 @@ interface SidebarProps extends ComponentPropsWithRef<"aside"> {
5587
6257
  */
5588
6258
  surface?: "rail" | "page";
5589
6259
  }
5590
- declare function Sidebar({ collapsed, icons, variant, surface, className, children, ...props }: SidebarProps): react.JSX.Element;
6260
+ declare function Sidebar({ collapsed, icons, variant, surface, motion, className, children, ...props }: SidebarProps): react.JSX.Element;
5591
6261
  declare namespace Sidebar {
5592
6262
  var displayName: string;
5593
6263
  }
@@ -5623,8 +6293,16 @@ declare function SidebarBrand({ mark, label, render, className, "aria-label": ar
5623
6293
  declare namespace SidebarBrand {
5624
6294
  var displayName: string;
5625
6295
  }
5626
- /** The scrollable nav region — grows to fill the rail between header and footer. */
5627
- declare function SidebarNav({ className, ...props }: ComponentPropsWithRef<"nav">): react.JSX.Element;
6296
+ /**
6297
+ * The scrollable nav region — grows to fill the rail between header and footer.
6298
+ *
6299
+ * The current-page fill is ONE element that glides to the active item (the
6300
+ * same engine and hand-off as SideNav), so a page change inside a persistent
6301
+ * layout reads as the marker moving rather than one row dimming and another
6302
+ * lighting. Each item keeps its own `data-[active]` fill as the server-render
6303
+ * fallback until the glide mounts.
6304
+ */
6305
+ declare function SidebarNav({ className, children, ...props }: ComponentPropsWithRef<"nav">): react.JSX.Element;
5628
6306
  declare namespace SidebarNav {
5629
6307
  var displayName: string;
5630
6308
  }
@@ -5674,6 +6352,14 @@ interface SideNavProps extends ComponentPropsWithRef<"nav"> {
5674
6352
  * local rails; `sidebar` matches the app Sidebar for sub-navs inside chrome.
5675
6353
  */
5676
6354
  activeVariant?: SideNavActiveVariant;
6355
+ /**
6356
+ * How much motion this component uses: `full` (default) inherits the app's
6357
+ * policy, `subtle` keeps feedback and drops the glide, `off` stills it. It
6358
+ * can only turn motion down — it never overrides a reader's reduce-motion
6359
+ * setting.
6360
+ * @default "full"
6361
+ */
6362
+ motion?: MotionLevel;
5677
6363
  }
5678
6364
  /**
5679
6365
  * SideNav — a lightweight, in-content vertical navigation list: the settings /
@@ -5689,7 +6375,7 @@ interface SideNavProps extends ComponentPropsWithRef<"nav"> {
5689
6375
  * <SideNavItem label="Account" render={<Link to="/settings/account" />} />
5690
6376
  * </SideNav>
5691
6377
  */
5692
- declare function SideNav({ className, size, activeVariant, ...props }: SideNavProps): react.JSX.Element;
6378
+ declare function SideNav({ className, size, activeVariant, motion, children, ...props }: SideNavProps): react.JSX.Element;
5693
6379
  declare namespace SideNav {
5694
6380
  var displayName: string;
5695
6381
  }
@@ -6363,6 +7049,13 @@ type CheckboxCardProps = Omit<ComponentProps<typeof Checkbox$1.Root>, "className
6363
7049
  * and icon. Defaults to "neutral" (the primary/accent treatment).
6364
7050
  */
6365
7051
  tone?: CheckboxCardTone;
7052
+ /**
7053
+ * How much motion this component uses: `full` (default) inherits the app's
7054
+ * policy, `subtle` keeps feedback and drops the flourish, `off` stills it.
7055
+ * It can only turn motion down — it never overrides a reader's reduce-motion
7056
+ * setting. Under `subtle` the tick fades in instead of drawing itself.
7057
+ */
7058
+ motion?: MotionLevel;
6366
7059
  };
6367
7060
  /**
6368
7061
  * CheckboxCard — a multi-select selection card: a card-sized Base UI Checkbox
@@ -6375,7 +7068,7 @@ type CheckboxCardProps = Omit<ComponentProps<typeof Checkbox$1.Root>, "className
6375
7068
  * {REASONS.map((r) => <CheckboxCard key={r} value={r} title={r} />)}
6376
7069
  * </CheckboxGroup>
6377
7070
  */
6378
- declare function CheckboxCard({ className, title, description, icon, tone, ...props }: CheckboxCardProps): react.JSX.Element;
7071
+ declare function CheckboxCard({ className, title, description, icon, tone, motion, ...props }: CheckboxCardProps): react.JSX.Element;
6379
7072
  declare namespace CheckboxCard {
6380
7073
  var displayName: string;
6381
7074
  }
@@ -6808,6 +7501,14 @@ interface ThemeSwitcherProps extends Omit<ComponentPropsWithRef<"div">, "onChang
6808
7501
  onValueChange: (value: ThemeMode) => void;
6809
7502
  /** Accessible label for the group. @default "Theme" */
6810
7503
  label?: string;
7504
+ /**
7505
+ * How much motion this component uses: `full` (default) inherits the app's
7506
+ * policy, `subtle` keeps feedback and drops the glide, `off` stills it. It
7507
+ * can only turn motion down — it never overrides a reader's reduce-motion
7508
+ * setting.
7509
+ * @default "full"
7510
+ */
7511
+ motion?: MotionLevel;
6811
7512
  }
6812
7513
  /**
6813
7514
  * ThemeSwitcher — a segmented light / dark / system switch. Presentational:
@@ -6824,7 +7525,7 @@ interface ThemeSwitcherProps extends Omit<ComponentPropsWithRef<"div">, "onChang
6824
7525
  *
6825
7526
  * Requires a `desktop` icon in the active IconSet (alongside `sun` + `moon`).
6826
7527
  */
6827
- declare function ThemeSwitcher({ value, onValueChange, label, className, ref, ...props }: ThemeSwitcherProps): react.JSX.Element;
7528
+ declare function ThemeSwitcher({ value, onValueChange, label, motion, className, ref, ...props }: ThemeSwitcherProps): react.JSX.Element;
6828
7529
  declare namespace ThemeSwitcher {
6829
7530
  var displayName: string;
6830
7531
  }
@@ -7321,16 +8022,32 @@ interface FeedbackProps extends Omit<ComponentPropsWithRef<"form">, "onSubmit">
7321
8022
  ratings?: FeedbackRating[];
7322
8023
  /** Called with the rating + message when the form is submitted. */
7323
8024
  onSubmit?: (data: FeedbackData) => void;
8025
+ /** The line shown, and read out, once the feedback is sent. @default "Thanks for the feedback." */
8026
+ successMessage?: string;
8027
+ /**
8028
+ * How much motion this component uses: `full` (default) inherits the app's
8029
+ * policy, `subtle` keeps feedback and drops the flourish, `off` stills it.
8030
+ * It can only turn motion down — it never overrides a reader's reduce-motion
8031
+ * setting. The drawn check is the flourish; the thanks line stays.
8032
+ * @default "full"
8033
+ */
8034
+ motion?: MotionLevel;
7324
8035
  }
7325
8036
  /**
7326
8037
  * Feedback — a compact feedback popover. Composes our Popover + Textarea +
7327
8038
  * Button + Toggle. A secondary trigger opens a small form with a row of rating
7328
- * toggles and a message field; submitting calls `onSubmit` and closes the
7329
- * popover. Rating and message are managed internally:
8039
+ * toggles and a message field; submitting calls `onSubmit`, says thanks for a
8040
+ * moment, then closes the popover. Rating and message are managed internally:
7330
8041
  *
7331
8042
  * <Feedback onSubmit={({ rating, message }) => report(rating, message)} />
8043
+ *
8044
+ * The thanks used to be missing: the popover simply vanished on submit, which
8045
+ * looks exactly like the form being dismissed or the message being lost. Now
8046
+ * the form gives way to a drawn check and a line in the same box (the two
8047
+ * share one grid cell, so the popover does not resize), and the popover closes
8048
+ * on its own after a short read.
7332
8049
  */
7333
- declare function Feedback({ label, heading, placeholder, submitLabel, ratings, onSubmit, className, ...props }: FeedbackProps): react.JSX.Element;
8050
+ declare function Feedback({ label, heading, placeholder, submitLabel, ratings, successMessage, onSubmit, motion, className, ...props }: FeedbackProps): react.JSX.Element;
7334
8051
  declare namespace Feedback {
7335
8052
  var displayName: string;
7336
8053
  }
@@ -7729,6 +8446,16 @@ interface CarouselProps {
7729
8446
  * the arrows only; the dots and the autoplay toggle keep their own shells.
7730
8447
  */
7731
8448
  arrowClassName?: string;
8449
+ /**
8450
+ * How much motion this component uses: `full` (default) inherits the app's
8451
+ * policy, `subtle` keeps feedback and drops the glide, `off` stills it. It
8452
+ * can only turn motion down — it never overrides a reader's reduce-motion
8453
+ * setting. Under `subtle` the slides still travel (that is the answer to
8454
+ * "next") and the active dot snaps; `off` also makes the slides cut and
8455
+ * pauses autoplay, as reduced motion does.
8456
+ * @default "full"
8457
+ */
8458
+ motion?: MotionLevel;
7732
8459
  }
7733
8460
  /**
7734
8461
  * Carousel — a generic, accessible, zero-dependency slide carousel. Transform
@@ -7744,7 +8471,7 @@ interface CarouselProps {
7744
8471
  *
7745
8472
  * Motion is token-driven, so transitions go instant under the motion policy.
7746
8473
  */
7747
- declare function Carousel({ children, slidesToShow, gap, loop, autoplay, arrows, dots, counter, draggable, index: controlledIndex, defaultIndex, onIndexChange, label, className, slideClassName, arrowClassName, }: CarouselProps): react.JSX.Element | null;
8474
+ declare function Carousel({ children, slidesToShow, gap, loop, autoplay, arrows, dots, counter, draggable, index: controlledIndex, defaultIndex, onIndexChange, label, className, slideClassName, arrowClassName, motion, }: CarouselProps): react.JSX.Element | null;
7748
8475
  declare namespace Carousel {
7749
8476
  var displayName: string;
7750
8477
  }
@@ -8170,6 +8897,14 @@ interface ChatComposerProps extends Omit<ComponentPropsWithRef<"form">, "onSubmi
8170
8897
  }) => ReactNode);
8171
8898
  /** Ref to the underlying textarea — for focusing after a send, or on mount. */
8172
8899
  fieldRef?: ComponentPropsWithRef<"textarea">["ref"];
8900
+ /**
8901
+ * How much motion this component uses: `full` (default) inherits the app's
8902
+ * policy, `subtle` keeps feedback and drops the flourish, `off` stills it.
8903
+ * It can only turn motion down — it never overrides a reader's reduce-motion
8904
+ * setting. Under `subtle` the field snaps to its new height and the send and
8905
+ * stop glyphs fade rather than morph.
8906
+ */
8907
+ motion?: MotionLevel;
8173
8908
  }
8174
8909
  /**
8175
8910
  * ChatComposer — the input half of a conversation.
@@ -8203,7 +8938,7 @@ interface ChatComposerProps extends Omit<ComponentPropsWithRef<"form">, "onSubmi
8203
8938
  * Interrupting a long generation is the most common thing a reader wants
8204
8939
  * during one, and it belongs where their cursor already is.
8205
8940
  */
8206
- declare function ChatComposer({ value, defaultValue, onValueChange, onSend, allowEmpty, placeholder, sendOn, busy, onStop, disabled, invalid, attachments, leading, actions, onAttach, label, sendLabel, stopLabel, footer, fieldRef, className, children, ...props }: ChatComposerProps): react.JSX.Element;
8941
+ declare function ChatComposer({ value, defaultValue, onValueChange, onSend, allowEmpty, placeholder, sendOn, busy, onStop, disabled, invalid, attachments, leading, actions, onAttach, label, sendLabel, stopLabel, footer, fieldRef, motion, className, children, ...props }: ChatComposerProps): react.JSX.Element;
8207
8942
  declare namespace ChatComposer {
8208
8943
  var displayName: string;
8209
8944
  }
@@ -8375,6 +9110,68 @@ declare namespace Message {
8375
9110
 
8376
9111
  declare const messageMeta: ComponentMeta;
8377
9112
 
9113
+ /** One choice in a reaction picker: the emoji and the name a screen reader says for it. */
9114
+ interface Reaction {
9115
+ emoji: string;
9116
+ /** The accessible name, e.g. "Heart". An emoji's own spoken name varies by platform. */
9117
+ label: string;
9118
+ }
9119
+ /** The quick set a picker offers when you pass none — the reactions most chats lead with. */
9120
+ declare const DEFAULT_REACTIONS: readonly Reaction[];
9121
+ interface ReactionChoiceProps {
9122
+ /** The choices, in order. @default DEFAULT_REACTIONS */
9123
+ reactions?: readonly Reaction[];
9124
+ /** The emoji the reader has already reacted with: shown pressed, and choosing one again removes it. */
9125
+ selected?: readonly string[];
9126
+ /** Called with the emoji the reader chose. Toggle it in or out of `selected`. */
9127
+ onSelect?: (emoji: string) => void;
9128
+ /**
9129
+ * How much motion this component uses: `full` (default) inherits the app's
9130
+ * policy, `subtle` keeps the press and drops the wave of emoji blooming in,
9131
+ * `off` stills it. It can only turn motion down.
9132
+ */
9133
+ motion?: MotionLevel;
9134
+ }
9135
+ interface ReactionPickerProps extends ReactionChoiceProps, Omit<ToolbarProps, "children" | "onSelect"> {
9136
+ /** Trailing controls after the emoji — a "more" button that opens a full picker. */
9137
+ children?: ReactNode;
9138
+ }
9139
+ /**
9140
+ * ReactionPicker — the quick row of emoji you react to a message with. A
9141
+ * toolbar: one stop in the tab order, the arrow keys move along it, and each
9142
+ * emoji is a toggle reporting `aria-pressed`. Opening it plays a short wave as
9143
+ * the emoji bloom in one after another, and the one under the pointer
9144
+ * magnifies. Put it in a Popover from an add-reaction control — or use
9145
+ * `BubbleReactionAdd`, which is exactly that — and use `MenuReactions` for the
9146
+ * same row inside a right-click menu.
9147
+ *
9148
+ * <ReactionPicker selected={mine} onSelect={(emoji) => toggle(message.id, emoji)} />
9149
+ */
9150
+ declare function ReactionPicker({ reactions, selected, onSelect, motion, className, children, "aria-label": ariaLabel, ...props }: ReactionPickerProps): react.JSX.Element;
9151
+ declare namespace ReactionPicker {
9152
+ var displayName: string;
9153
+ }
9154
+ interface MenuReactionsProps extends ReactionChoiceProps, Omit<ComponentProps<typeof Menu$1.Group>, "className" | "children" | "onSelect"> {
9155
+ className?: string;
9156
+ }
9157
+ /**
9158
+ * The same quick row as the first group of a menu — the reactions above Reply
9159
+ * and Copy when a message is right-clicked or long-pressed. Each emoji is a
9160
+ * checkbox menu item (checked when the reader has reacted with it), so the
9161
+ * arrow keys and typeahead reach it like any other row, and choosing one
9162
+ * closes the menu. Works in `MenuContent` and `ContextMenuContent` alike.
9163
+ *
9164
+ * <ContextMenuContent>
9165
+ * <MenuReactions selected={mine} onSelect={toggle} />
9166
+ * <ContextMenuSeparator />
9167
+ * <ContextMenuItem>Reply</ContextMenuItem>
9168
+ * </ContextMenuContent>
9169
+ */
9170
+ declare function MenuReactions({ reactions, selected, onSelect, motion, className, "aria-label": ariaLabel, ...props }: MenuReactionsProps): react.JSX.Element;
9171
+ declare namespace MenuReactions {
9172
+ var displayName: string;
9173
+ }
9174
+
8378
9175
  interface BubbleProps extends ComponentPropsWithRef<"div"> {
8379
9176
  /**
8380
9177
  * Surface treatment. `muted` for the other party, `primary` for the reader's
@@ -8409,8 +9206,9 @@ interface BubbleProps extends ComponentPropsWithRef<"div"> {
8409
9206
  * <Message>
8410
9207
  * <Bubble>Shipping it now.</Bubble>
8411
9208
  * <BubbleReactions>
8412
- * <BubbleReaction emoji="🎉" count={3} active onClick={() => toggle("🎉")} />
8413
- * <BubbleReaction emoji="👀" count={1} onClick={() => toggle("👀")} />
9209
+ * <BubbleReaction emoji="🎉" label="Party" count={3} active onClick={() => toggle("🎉")} />
9210
+ * <BubbleReaction emoji="👀" label="Eyes" count={1} onClick={() => toggle("👀")} />
9211
+ * <BubbleReactionAdd selected={mine} onSelect={toggle} />
8414
9212
  * </BubbleReactions>
8415
9213
  * </Message>
8416
9214
  *
@@ -8427,31 +9225,82 @@ interface BubbleReactionsProps extends ComponentPropsWithRef<"div"> {
8427
9225
  /** Match the enclosing `<Bubble align>` so the row hangs off the right edge. @default "start" */
8428
9226
  align?: "start" | "end";
8429
9227
  }
8430
- /** The row of reaction pills belonging to one bubble. */
8431
- declare function BubbleReactions({ align, className, ...props }: BubbleReactionsProps): react.JSX.Element;
9228
+ /**
9229
+ * The row of reaction pills belonging to one bubble. Render it for every
9230
+ * message, even one with no reactions yet: it hides itself while empty, and
9231
+ * staying mounted is how it knows the first reaction someone adds is new
9232
+ * (and so celebrates) rather than one the page loaded with.
9233
+ */
9234
+ declare function BubbleReactions({ align, className, children, ...props }: BubbleReactionsProps): react.JSX.Element;
8432
9235
  declare namespace BubbleReactions {
8433
9236
  var displayName: string;
8434
9237
  }
8435
9238
  interface BubbleReactionProps extends Omit<ComponentPropsWithRef<"button">, "children"> {
8436
9239
  /** The reaction glyph. Rendered as text, so any emoji works with no icon mapping. */
8437
9240
  emoji: ReactNode;
9241
+ /**
9242
+ * What the emoji means, for the accessible name ("Party, 3"). An emoji's own
9243
+ * spoken name varies by platform; without a label the pill is named by its
9244
+ * count alone.
9245
+ */
9246
+ label?: string;
8438
9247
  /** How many people reacted this way. Hidden at 1 — the pill already says "one". */
8439
9248
  count?: number;
8440
9249
  /** The reader reacted this way. Drives `aria-pressed`, not just the styling. */
8441
9250
  active?: boolean;
9251
+ /**
9252
+ * How much motion this component uses: `full` (default) inherits the app's
9253
+ * policy, `subtle` keeps the tint and the count changing and drops the
9254
+ * bloom and the spray of emoji, `off` stills it. It can only turn motion down.
9255
+ */
9256
+ motion?: MotionLevel;
8442
9257
  }
8443
9258
  /**
8444
9259
  * One reaction pill — a toggle, not a label. It reports `aria-pressed` because
8445
9260
  * "did I react to this" is state a screen-reader user needs before deciding
8446
9261
  * whether pressing it adds or removes their reaction.
9262
+ *
9263
+ * When it becomes the reader's own — pressed on, or added from a picker — the
9264
+ * emoji blooms and a spray of copies of it bursts out, the way a chat app
9265
+ * answers a reaction, and the count rolls. Pressing it off is quiet. A pill
9266
+ * the page loads with never plays.
8447
9267
  */
8448
- declare function BubbleReaction({ emoji, count, active, className, ...props }: BubbleReactionProps): react.JSX.Element;
9268
+ declare function BubbleReaction({ emoji, label, count, active, motion, className, ...props }: BubbleReactionProps): react.JSX.Element;
8449
9269
  declare namespace BubbleReaction {
8450
9270
  var displayName: string;
8451
9271
  }
9272
+ interface BubbleReactionAddProps extends Omit<ComponentPropsWithRef<"button">, "children" | "onSelect"> {
9273
+ /** The choices the picker offers. @default DEFAULT_REACTIONS */
9274
+ reactions?: readonly Reaction[];
9275
+ /** The emoji the reader has already reacted with, shown pressed in the picker. */
9276
+ selected?: readonly string[];
9277
+ /** Called with the emoji the reader chose; the picker closes. Toggle it in or out of `selected`. */
9278
+ onSelect?: (emoji: string) => void;
9279
+ /** The accessible name. @default "Add reaction" */
9280
+ label?: string;
9281
+ /** Passed to the picker: how much motion it uses. */
9282
+ motion?: MotionLevel;
9283
+ }
9284
+ /**
9285
+ * The add-reaction pill at the end of a reaction row: a smiley that opens a
9286
+ * ReactionPicker above it. Choosing an emoji closes the picker and hands the
9287
+ * emoji to `onSelect`; add it to the row and the new pill celebrates as it
9288
+ * arrives.
9289
+ *
9290
+ * <BubbleReactions>
9291
+ * {pills}
9292
+ * <BubbleReactionAdd selected={mine} onSelect={toggle} />
9293
+ * </BubbleReactions>
9294
+ */
9295
+ declare function BubbleReactionAdd({ reactions, selected, onSelect, label, motion, className, ...props }: BubbleReactionAddProps): react.JSX.Element;
9296
+ declare namespace BubbleReactionAdd {
9297
+ var displayName: string;
9298
+ }
8452
9299
 
8453
9300
  declare const bubbleMeta: ComponentMeta;
8454
9301
 
9302
+ declare const reactionPickerMeta: ComponentMeta;
9303
+
8455
9304
  interface AttachmentProps extends Omit<ComponentPropsWithRef<"div">, "onClick"> {
8456
9305
  /**
8457
9306
  * File name. When it runs out of room the stem truncates and the extension
@@ -8854,8 +9703,16 @@ type CopySource = string | (() => string | Promise<string>);
8854
9703
  *
8855
9704
  * const { copy, copied } = useCopy(address)
8856
9705
  * <Button variant="ghost" size="icon-sm" aria-label="Copy address" onClick={copy}>
8857
- * <Icon name={copied ? "check" : "copy"} />
9706
+ * <span aria-hidden="true" className="motion-icon-swap">
9707
+ * <span data-active={!copied} className="inline-flex"><Icon name="copy" /></span>
9708
+ * <span data-active={copied} className="inline-flex"><Icon name="check" /></span>
9709
+ * </span>
8858
9710
  * </Button>
9711
+ * <span role="status" className="sr-only">{copied ? "Copied" : ""}</span>
9712
+ *
9713
+ * Both glyphs stay mounted so the copy mark cross-fades into the check (a
9714
+ * ternary swap snaps between frames); the status line says it to a screen
9715
+ * reader, which a glyph change does not. CodeBlock is the reference.
8859
9716
  *
8860
9717
  * Text that costs something to produce (a file to fetch, a document to
8861
9718
  * serialise) is passed as a function, called only on click:
@@ -8915,60 +9772,6 @@ interface SmoothWheelOptions {
8915
9772
  */
8916
9773
  declare function useSmoothWheel({ axis, mapVertical, smooth, }?: SmoothWheelOptions): (node: HTMLElement | null) => void;
8917
9774
 
8918
- /**
8919
- * The palette: nine colour families and a scale under every tone, generated
8920
- * for whatever theme is painting. `scripts/build-palette.mjs` writes this into
8921
- * `src/palette.css`; `palette.test.ts` holds every built-in theme to it.
8922
- *
8923
- * The contract is roles, and roles are not enough for a product. Tags, avatars,
8924
- * labels and illustration need more colours than three tones, and raw Tailwind
8925
- * steps ignore the theme, so they were banned outright. These follow it:
8926
- *
8927
- * - A **family** (red, orange, yellow, green, teal, blue, purple, pink) keeps
8928
- * its own hue and leans toward the brand by half the gap, at most 15°, and
8929
- * only as far as the brand has colour to lean toward (an ink-black primary
8930
- * pulls nothing). Material 3's harmonize, the same lean the customizer gives
8931
- * status colours. Lightness and chroma are fixed per step, fitted inside sRGB
8932
- * across the whole lean, so no brand can push a step out of gamut.
8933
- * - **neutral** is the theme's own page and ink mixed in steps, so it carries
8934
- * whatever tint the theme's surfaces do.
8935
- * - Every **tone** (tone-1…3, info, warning, success, destructive) gets a scale
8936
- * on one shared ladder of depths, and the tone lands exactly on the step
8937
- * nearest its own lightness: a light status colour in dark mode is 800, a
8938
- * mid one is 500. The steps either side stretch to keep the ladder's ends,
8939
- * so a tone near one end does not crush five steps into the little room
8940
- * left past it, and tone-1-100 and success-100 are the same depth.
8941
- *
8942
- * Steps follow the mode rather than literal lightness: a low step is always
8943
- * near the page and a high step always far from it, so 800 text on a 100
8944
- * wash reads in both modes with no `dark:` (Sable has none).
8945
- */
8946
- declare const PALETTE_STEPS: readonly [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950];
8947
- type PaletteStep = (typeof PALETTE_STEPS)[number];
8948
- interface PaletteFamily {
8949
- name: string;
8950
- /** The family's own hue, before the lean. */
8951
- hue: number;
8952
- /** Step 500, per mode: lightness and the chroma the family is aiming for. */
8953
- light: {
8954
- l: number;
8955
- c: number;
8956
- };
8957
- dark: {
8958
- l: number;
8959
- c: number;
8960
- };
8961
- }
8962
- declare const PALETTE_FAMILIES: readonly PaletteFamily[];
8963
- /** The hue families by name — the values Badge, Pill and StatusDot take on `tone`. */
8964
- declare const PALETTE_COLORS: readonly ["red", "orange", "yellow", "green", "teal", "blue", "purple", "pink"];
8965
- type PaletteColor = (typeof PALETTE_COLORS)[number];
8966
- declare const isPaletteColor: (value: unknown) => value is PaletteColor;
8967
- /** Tokens that get a scale of their own, `--<token>-50` … `--<token>-950`. */
8968
- declare const PALETTE_TONES: readonly ["tone-1", "tone-2", "tone-3", "tone-info", "tone-warning", "success", "destructive"];
8969
- /** Everything the palette names: neutral, the families, then the tone scales. */
8970
- declare const PALETTE_SCALES: readonly ["neutral", ...string[], "tone-1", "tone-2", "tone-3", "tone-info", "tone-warning", "success", "destructive"];
8971
-
8972
- declare const SABLE_UI_VERSION: "0.13.2";
9775
+ declare const SABLE_UI_VERSION: "0.15.0";
8973
9776
 
8974
- export { Accordion, AccordionItem, AccordionPanel, AccordionTrigger, AlertDialog, AlertDialogClose, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogTitle, AlertDialogTrigger, AppHeader, type AppHeaderProps, AppShell, type AppShellProps, AreaChart, type AreaChartProps, type ArtTone, Attachment, type AttachmentProps, Avatar, AvatarFallback, AvatarGroup, AvatarGroupCount, type AvatarGroupCountProps, type AvatarGroupProps, AvatarImage, type AvatarProps, AvatarRoot, BADGE_APPEARANCES, BADGE_TONES, Badge, type BadgeAppearance, type BadgeProps, type BadgeTone, Banner, type BannerProps, BarChart, type BarChartProps, BottomNav, BottomNavItem, type BottomNavItemProps, BreadcrumbItem, type BreadcrumbItemProps, BreadcrumbLink, type BreadcrumbLinkProps, BreadcrumbPage, type BreadcrumbPageProps, BreadcrumbSeparator, type BreadcrumbSeparatorProps, Breadcrumbs, type BreadcrumbsProps, Browser, type BrowserProps, Bubble, type BubbleProps, BubbleReaction, type BubbleReactionProps, BubbleReactions, type BubbleReactionsProps, Button, type ButtonBleed, ButtonGroup, type ButtonGroupProps, type ButtonProps, CHART_SERIES_COUNT, COMPONENT_GROUPS, COMPONENT_TAXONOMY, Calendar, type CalendarProps, Card, CardAction, CardContent, type CardContentProps, CardDescription, CardFooter, type CardFooterProps, CardHeader, CardList, type CardProps, CardTitle, type CardTitleProps, CaretMenu, CaretMenuItem, type CaretMenuItemProps, type CaretMenuProps, type CaretTrigger, type CaretTriggerField, type CaretTriggerMatch, Carousel, type CarouselProps, type CarouselSlidesToShow, type ChartCategories, type ChartCenterLabel, type ChartCurve, type ChartDatum, type ChartSeries, type ChartTone, type ChartTooltipIndicator, type ChartTooltipOptions, type ChartValueFormatter, ChatComposer, type ChatComposerProps, Checkbox, CheckboxCard, type CheckboxCardProps, type CheckboxCardTone, CheckboxGroup, type CheckboxGroupProps, Code, CodeBlock, type CodeBlockProps, CodeHighlightProvider, type CodeHighlighter, type CodeProps, Collapsible, CollapsibleIndicator, CollapsiblePanel, CollapsibleTrigger, ColorField, type ColorFieldProps, Combobox, ComboboxChips, ComboboxClear, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxGroupLabel, ComboboxInput, ComboboxItem, type ComboboxItemGroup, ComboboxItemIndicator, ComboboxList, ComboboxPortal, type ComboboxProps, ComboboxValue, ComboboxVirtualList, type ComboboxVirtualListProps, type CommandFilter, type CommandItem, CommandMenu, CommandMenuGroup, type CommandMenuGroupProps, CommandMenuItem, type CommandMenuItemProps, CommandMenuPanel, type CommandMenuPanelProps, type CommandMenuProps, CommandMenuTrigger, type CommandMenuTriggerProps, type ComponentGroup, type ComponentGuidance, ComponentMeta, type ComponentRegister, type ConstraintFlag, ContextCard, ContextCardArrow, ContextCardContent, ContextCardPortal, ContextCardTrigger, ContextMenu, ContextMenuContent, ContextMenuGroup, ContextMenuGroupLabel, ContextMenuItem, ContextMenuPortal, ContextMenuSeparator, ContextMenuTrigger, type CopySource, DataTable, type DataTableColumn, type DataTableProps, type DataTableRowKey, DatePicker, type DatePickerProps, DateTile, type DateTileProps, Density, DensityProvider, Density as DensityValue, DestructiveActionModal, type DestructiveActionModalProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, type DialogSize, DialogTitle, DialogTrigger, DisclosurePicker, DisclosurePickerEmpty, DisclosurePickerList, type DisclosurePickerListProps, DisclosurePickerOption, type DisclosurePickerOptionProps, DisclosurePickerPanel, type DisclosurePickerPanelProps, type DisclosurePickerProps, type DisclosurePickerSearch, DisclosurePickerTrigger, type DisclosurePickerTriggerProps, EmptyState, type EmptyStateProps, Entity, type EntityProps, Feedback, type FeedbackData, type FeedbackProps, type FeedbackRating, Field, type FieldProps, Fieldset, FieldsetContent, FieldsetDescription, FieldsetFooter, FieldsetLegend, type FieldsetVariant, FileDropzone, type FileDropzoneProps, type FileRejection, type FileRejectionCode, FontPicker, type FontPickerFont, type FontPickerOption, type FontPickerProps, Form, type FormProps, GlidingHighlight, type GlidingHighlightProps, GradientArt, type GradientArtProps, type Hsv, InlineStatus, type InlineStatusProps, type StatusTone as InlineTone, Input, InputGroup, type InputGroupProps, type InputProps$1 as InputProps, Kbd, KbdGroup, type KbdGroupProps, type KbdProps, Label, type LabelProps$2 as LabelProps, LineChart, type LineChartProps, Marker, type MarkerProps, Marquee, type MarqueeProps, MediaImage, type MediaImageProps, MediaTile, type MediaTileProps, Menu, MenuCheckboxItem, MenuContent, MenuGroup, MenuGroupLabel, MenuItem, MenuLinkItem, MenuPortal, MenuRadioGroup, MenuRadioItem, MenuSeparator, MenuSubmenu, MenuSubmenuTrigger, MenuTrigger, Menubar, type MenubarProps, MenubarTrigger, type MenubarTriggerProps, Message, type MessageProps, MessageScroller, type MessageScrollerHandle, type MessageScrollerProps, Meter, MeterIndicator, MeterLabel, type MeterSize, type MeterTone, MeterTrack, MeterValue, MiddleTruncate, type MiddleTruncateProps, type MotionPolicy, MotionProvider, type MotionProviderProps, NavigationMenu, NavigationMenuContent, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, Note, type NoteAction, type NoteProps, NotificationBadge, type NotificationBadgeProps, NumberField, type NumberFieldProps, type OrbMode, type OrbSize, OtpField, type OtpFieldProps, OverflowMenu, type OverflowMenuProps, PALETTE_COLORS, PALETTE_FAMILIES, PALETTE_SCALES, PALETTE_STEPS, PALETTE_TONES, PageHeader, type PageHeaderProps, PageLoader, type PageLoaderProps, Pagination, type PaginationProps, type PaletteColor, type PaletteFamily, type PaletteStep, Panel, PanelGroup, PanelResizer, type PanelResizerProps, PanelSection, type PanelWidthBounds, Phone, type PhoneProps, PieChart, type PieChartProps, Pill, type PillProps, Popover, PopoverArrow, PopoverClose, PopoverContent, PopoverDescription, PopoverPortal, PopoverTitle, PopoverTrigger, Presence, type PresenceProps, type Presentation, PresentationProvider, Progress, ProgressIndicator, ProgressLabel, type ProgressSize, ProgressTrack, ProgressValue, PropertyGroup, PropertyPair, PropertyRow, RadarChart, type RadarChartProps, RadialChart, type RadialChartProps, Radio, RadioCard, type RadioCardProps, type RadioCardTone, RadioGroup, RelativeTime, type RelativeTimeProps, Reveal, type RevealProps, type Rgb, SABLE_UI_VERSION, SEGMENTED_BAR_TONES, STATUS_TONES, STATUS_TONE_ICON, type ScrollCommandOptions, Scroller, type ScrollerProps, ScrubField, type ScrubFieldProps, SearchInput, type SearchInputProps, SectionHeader, type SectionHeaderProps, SegmentedBar, type SegmentedBarProps, type SegmentedBarSegment, type SegmentedBarTone, Select, SelectContent, SelectGroup, SelectGroupLabel, SelectItem, SelectPortal, SelectSeparator, SelectTrigger, SelectValue, Separator, type SeparatorProps$2 as SeparatorProps, SettingsMenu, type SettingsMenuProps, SettingsRow, type SettingsRowProps, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetList, SheetPortal, type SheetProps, type SheetSnapPoint, SheetTitle, SheetTrigger, ShowMore, type ShowMoreProps, SideNav, type SideNavActiveVariant, SideNavGroup, type SideNavGroupProps, SideNavItem, type SideNavItemProps, type SideNavProps, type SideNavSize, Sidebar, SidebarBrand, type SidebarBrandProps, SidebarFooter, SidebarHeader, SidebarItem, type SidebarItemProps, SidebarNav, type SidebarProps, SimpleTooltip, Skeleton, SkipLink, Slider, SliderControl, SliderIndicator, SliderRoot, SliderThumb, SliderTrack, SliderValue, type SmoothWheelOptions, Sparkline, type SparklineProps, Spinner, type SpinnerProps, StatusBar, StatusBarGroup, StatusBarSeparator, StatusDot, type StatusDotProps, type StatusTone, type StepStatus, Stepper, StepperItem, type StepperItemProps, type StepperOrientation, type StepperProps, StreamingText, type StreamingTextProps, Switch, TRANSPARENT, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsPanel as TabsContent, TabsList, TabsPanel, TabsTrigger, TextReveal, type TextRevealProps, Textarea, type TextareaProps, ThemeId, ThemeManifest, ThemeMode$1 as ThemeManifestMode, type ThemeMode, ThemePreview, type ThemePreviewProps, ThemeSelector, type ThemeSelectorProps, ThemeSwitcher, type ThemeSwitcherProps, ThinkingOrb, type ThinkingOrbProps, ToastAction, type ToastApi, ToastClose, ToastContent, ToastDescription, type ToastManagerApi, type ToastOptions, type ToastPosition, ToastProvider, type ToastProviderProps, ToastRoot, ToastTitle, type ToastType, ToastViewport, Toggle, ToggleGroup, type ToggleGroupAppearance, Toggle as ToggleGroupItem, Toolbar, ToolbarButton, type ToolbarButtonProps, ToolbarGroup, type ToolbarGroupProps, ToolbarInput, type ToolbarInputProps, ToolbarLink, type ToolbarLinkProps, type ToolbarProps, ToolbarSeparator, type ToolbarSeparatorProps, Tooltip, TooltipArrow, TooltipContent, TooltipPortal, TooltipProvider, TooltipTrigger, Tree, TreeAddRow, TreeEmpty, TreeRow, TreeSection, type UseCaretTriggerOptions, type UseCaretTriggerResult, type UseCopyOptions, type UseCopyResult, type UseInViewOptions, type UsePanelWidthOptions, Video, type VideoProps, ViewTransitionName, type ViewTransitionNameProps, Workspace, WorkspaceBar, WorkspaceCanvas, accordionMeta, appHeaderMeta, appShellMeta, areaChartMeta, attachmentMeta, avatarGroupVariants, avatarMeta, avatarVariants, badgeMeta, badgeVariants, bannerMeta, bannerVariants, barChartMeta, bottomNavMeta, breadcrumbsMeta, browserMeta, bubbleMeta, buttonGroupMeta, buttonMeta, buttonVariants, calendarMeta, cardMeta, caretMenuMeta, carouselMeta, chartColor, toneColor as chartToneColor, chatComposerMeta, checkboxCardMeta, checkboxMeta, cn, codeBlockMeta, codeMeta, collapsibleMeta, colorFieldMeta, comboboxMeta, commandMenuMeta, componentGuidance, componentLabel, componentSlug, componentsInGroup, contextCardMeta, contextMenuMeta, dataTableMeta, datePickerMeta, dateTileMeta, destructiveActionModalMeta, dialogMeta, disclosurePickerMeta, emptyStateMeta, entityMeta, feedbackMeta, fieldsetMeta, fileDropzoneMeta, fileDropzoneVariants, fontPickerMeta, formMeta, formatFileSize, formatHex, glidingHighlightMeta, gradientArtMeta, hsvToRgb, hueColor, inlineStatusMeta, inputGroupMeta, inputMeta, isPaletteColor, isTransparent, kbdMeta, labelMeta, lineChartMeta, markerMeta, marqueeMeta, mediaImageMeta, mediaTileMeta, menuMeta, menubarMeta, messageMeta, messageScrollerMeta, meterIndicatorVariants, meterMeta, meterTrackVariants, middleTruncateMeta, navigationMenuMeta, noteMeta, noteVariants, notificationBadgeMeta, notificationCountVariants, notificationDotVariants, numberFieldMeta, otpFieldMeta, overflowMenuMeta, pageHeaderMeta, pageLoaderMeta, paginationMeta, panelGroupMeta, panelSectionMeta, parseHex, phoneMeta, pieChartMeta, pillMeta, pillVariants, popoverMeta, progressMeta, progressTrackVariants, radarChartMeta, radialChartMeta, radioCardMeta, radioMeta, relativeTimeMeta, rgbToHsv, scrollerMeta, scrubFieldMeta, searchInputMeta, sectionHeaderMeta, segmentedBarMeta, segmentedBarSegmentVariants, segmentedBarVariants, selectMeta, separatorMeta, settingsMenuMeta, sheetMeta, sheetVariants, showMoreMeta, sideNavMeta, sidebarMeta, skeletonMeta, sliderMeta, sparklineMeta, spinnerMeta, startViewTransition, statusBarMeta, statusDotMeta, statusDotVariants, stepperConnectorVariants, stepperIndicatorVariants, stepperMeta, streamingTextMeta, supportsViewTransitions, switchMeta, tableMeta, tabsMeta, textareaMeta, themeSelectorMeta, themeSwitcherMeta, thinkingOrbMeta, toast, toastMeta, toggleMeta, toolbarGroupVariants, toolbarMeta, toolbarSeparatorVariants, toolbarVariants, tooltipMeta, treeIndent, treeMeta, useAnchoredDensity, useCaretTrigger, useComboboxFilteredItems, useCommandMenuShortcut, useCopy, useDensity, useDisclosurePicker, useInView, useMotion, usePanelWidth, usePresentation, useReducedMotion, useScrollActivity, useSidebar, useSmoothWheel, useToast, useToastManager, useTypeTier, videoMeta, workspaceMeta };
9777
+ export { Accordion, AccordionItem, AccordionPanel, AccordionTrigger, AlertDialog, AlertDialogClose, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogTitle, AlertDialogTrigger, AppHeader, type AppHeaderProps, AppShell, type AppShellProps, AreaChart, type AreaChartProps, type ArtTone, Attachment, type AttachmentProps, Avatar, AvatarFallback, AvatarGroup, AvatarGroupCount, type AvatarGroupCountProps, type AvatarGroupProps, AvatarImage, type AvatarProps, AvatarRoot, BADGE_APPEARANCES, BADGE_TONES, Badge, type BadgeAppearance, type BadgeProps, type BadgeTone, Banner, type BannerProps, BarChart, type BarChartProps, BottomNav, BottomNavItem, type BottomNavItemProps, BreadcrumbItem, type BreadcrumbItemProps, BreadcrumbLink, type BreadcrumbLinkProps, BreadcrumbPage, type BreadcrumbPageProps, BreadcrumbSeparator, type BreadcrumbSeparatorProps, Breadcrumbs, type BreadcrumbsProps, Browser, type BrowserProps, Bubble, type BubbleProps, BubbleReaction, BubbleReactionAdd, type BubbleReactionAddProps, type BubbleReactionProps, BubbleReactions, type BubbleReactionsProps, Burst, type BurstProps, Button, type ButtonBleed, ButtonGroup, type ButtonGroupProps, type ButtonProps, CHART_SERIES_COUNT, COMPONENT_GROUPS, COMPONENT_TAXONOMY, Calendar, type CalendarProps, Card, CardAction, CardContent, type CardContentProps, CardDescription, CardFooter, type CardFooterProps, CardHeader, CardList, type CardProps, CardTitle, type CardTitleProps, CaretMenu, CaretMenuItem, type CaretMenuItemProps, type CaretMenuProps, type CaretTrigger, type CaretTriggerField, type CaretTriggerMatch, Carousel, type CarouselProps, type CarouselSlidesToShow, type ChartCategories, type ChartCenterLabel, type ChartCurve, type ChartDatum, type ChartSeries, type ChartTone, type ChartTooltipIndicator, type ChartTooltipOptions, type ChartValueFormatter, ChatComposer, type ChatComposerProps, Checkbox, CheckboxCard, type CheckboxCardProps, type CheckboxCardTone, CheckboxGroup, type CheckboxGroupProps, Code, CodeBlock, type CodeBlockProps, CodeHighlightProvider, type CodeHighlighter, type CodeProps, Collapsible, CollapsibleIndicator, CollapsiblePanel, CollapsibleTrigger, ColorField, type ColorFieldProps, Combobox, ComboboxChips, ComboboxClear, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxGroupLabel, ComboboxInput, ComboboxItem, type ComboboxItemGroup, ComboboxItemIndicator, ComboboxList, ComboboxPortal, type ComboboxProps, ComboboxValue, ComboboxVirtualList, type ComboboxVirtualListProps, type CommandFilter, type CommandItem, CommandMenu, CommandMenuGroup, type CommandMenuGroupProps, CommandMenuItem, type CommandMenuItemProps, CommandMenuPanel, type CommandMenuPanelProps, type CommandMenuProps, CommandMenuTrigger, type CommandMenuTriggerProps, type ComponentGroup, type ComponentGuidance, ComponentMeta, type ComponentRegister, ConfirmButton, type ConfirmButtonProps, type ConstraintFlag, ContextCard, ContextCardArrow, ContextCardContent, ContextCardPortal, ContextCardTrigger, ContextMenu, ContextMenuContent, ContextMenuGroup, ContextMenuGroupLabel, ContextMenuItem, ContextMenuPortal, ContextMenuSeparator, ContextMenuTrigger, type CopySource, DEFAULT_REACTIONS, DataTable, type DataTableColumn, type DataTableProps, type DataTableRowKey, DatePicker, type DatePickerProps, DateTile, type DateTileProps, Density, DensityProvider, Density as DensityValue, DestructiveActionModal, type DestructiveActionModalProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, type DialogSize, DialogTitle, DialogTrigger, DisclosurePicker, DisclosurePickerEmpty, DisclosurePickerList, type DisclosurePickerListProps, DisclosurePickerOption, type DisclosurePickerOptionProps, DisclosurePickerPanel, type DisclosurePickerPanelProps, type DisclosurePickerProps, type DisclosurePickerSearch, DisclosurePickerTrigger, type DisclosurePickerTriggerProps, EmptyState, type EmptyStateProps, Entity, type EntityProps, Feedback, type FeedbackData, type FeedbackProps, type FeedbackRating, Field, type FieldProps, Fieldset, FieldsetContent, FieldsetDescription, FieldsetFooter, FieldsetLegend, type FieldsetVariant, FileDropzone, type FileDropzoneProps, type FileRejection, type FileRejectionCode, FontPicker, type FontPickerFont, type FontPickerOption, type FontPickerProps, Form, type FormProps, GlidingHighlight, type GlidingHighlightProps, GradientArt, type GradientArtProps, type Hsv, InlineStatus, type InlineStatusProps, type StatusTone as InlineTone, Input, InputGroup, type InputGroupProps, type InputProps$1 as InputProps, Kbd, KbdGroup, type KbdGroupProps, type KbdProps, Label, type LabelProps$2 as LabelProps, LikeButton, type LikeButtonProps, LineChart, type LineChartProps, Marker, type MarkerProps, Marquee, type MarqueeProps, MediaImage, type MediaImageProps, MediaTile, type MediaTileProps, Menu, MenuCheckboxItem, MenuContent, MenuGroup, MenuGroupLabel, MenuItem, MenuLinkItem, MenuPortal, MenuRadioGroup, MenuRadioItem, MenuReactions, type MenuReactionsProps, MenuSeparator, MenuSubmenu, MenuSubmenuTrigger, MenuTrigger, Menubar, type MenubarProps, MenubarTrigger, type MenubarTriggerProps, Message, type MessageProps, MessageScroller, type MessageScrollerHandle, type MessageScrollerProps, Meter, MeterIndicator, MeterLabel, type MeterSize, type MeterTone, MeterTrack, MeterValue, MiddleTruncate, type MiddleTruncateProps, type MotionLevel, type MotionPolicy, MotionProvider, type MotionProviderProps, MotionScope, type MotionScopeProps, NavigationMenu, NavigationMenuContent, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, Note, type NoteAction, type NoteProps, NotificationBadge, type NotificationBadgeProps, NumberField, type NumberFieldProps, NumberTicker, type NumberTickerProps, type OrbMode, type OrbSize, OtpField, type OtpFieldProps, OverflowMenu, type OverflowMenuProps, PALETTE_COLORS, PALETTE_FAMILIES, PALETTE_SCALES, PALETTE_STEPS, PALETTE_TONES, PageHeader, type PageHeaderProps, PageLoader, type PageLoaderProps, Pagination, type PaginationProps, type PaletteColor, type PaletteFamily, type PaletteStep, Panel, PanelGroup, PanelResizer, type PanelResizerProps, PanelSection, type PanelWidthBounds, Phone, type PhoneProps, PieChart, type PieChartProps, Pill, type PillProps, Popover, PopoverArrow, PopoverClose, PopoverContent, PopoverDescription, PopoverPortal, PopoverTitle, PopoverTrigger, Presence, type PresenceProps, type Presentation, PresentationProvider, Progress, ProgressIndicator, ProgressLabel, type ProgressSize, ProgressTrack, ProgressValue, PropertyGroup, PropertyPair, PropertyRow, RadarChart, type RadarChartProps, RadialChart, type RadialChartProps, Radio, RadioCard, type RadioCardProps, type RadioCardTone, RadioGroup, type Reaction, ReactionPicker, type ReactionPickerProps, RelativeTime, type RelativeTimeProps, Reveal, type RevealProps, type Rgb, SABLE_UI_VERSION, SEGMENTED_BAR_TONES, STATUS_TONES, STATUS_TONE_ICON, type ScrollCommandOptions, Scroller, type ScrollerProps, ScrubField, type ScrubFieldProps, SearchInput, type SearchInputProps, SectionHeader, type SectionHeaderProps, SegmentedBar, type SegmentedBarProps, type SegmentedBarSegment, type SegmentedBarTone, Select, SelectContent, SelectGroup, SelectGroupLabel, SelectItem, SelectPortal, SelectSeparator, SelectTrigger, SelectValue, Separator, type SeparatorProps$2 as SeparatorProps, SettingsMenu, type SettingsMenuProps, SettingsRow, type SettingsRowProps, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetList, SheetPortal, type SheetProps, type SheetSnapPoint, SheetTitle, SheetTrigger, ShowMore, type ShowMoreProps, SideNav, type SideNavActiveVariant, SideNavGroup, type SideNavGroupProps, SideNavItem, type SideNavItemProps, type SideNavProps, type SideNavSize, Sidebar, SidebarBrand, type SidebarBrandProps, SidebarFooter, SidebarHeader, SidebarItem, type SidebarItemProps, SidebarNav, type SidebarProps, SimpleTooltip, Skeleton, SkipLink, Slider, SliderControl, SliderIndicator, SliderRoot, SliderThumb, SliderTrack, SliderValue, type SmoothWheelOptions, Sparkline, type SparklineProps, Spinner, type SpinnerProps, StatusBar, StatusBarGroup, StatusBarSeparator, StatusDot, type StatusDotProps, type StatusTone, type StepStatus, Stepper, StepperItem, type StepperItemProps, type StepperOrientation, type StepperProps, StreamingText, type StreamingTextProps, Switch, TOOL_CALL_STATUS_LABELS, TRANSPARENT, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsPanel as TabsContent, TabsList, TabsPanel, TabsTrigger, TextReveal, type TextRevealProps, Textarea, type TextareaProps, ThemeId, ThemeManifest, ThemeMode$1 as ThemeManifestMode, type ThemeMode, ThemePreview, type ThemePreviewProps, ThemeSelector, type ThemeSelectorProps, ThemeSwitcher, type ThemeSwitcherProps, ThinkingOrb, type ThinkingOrbProps, ToastAction, type ToastApi, ToastClose, ToastContent, ToastDescription, type ToastManagerApi, type ToastOptions, type ToastPosition, ToastProvider, type ToastProviderProps, ToastRoot, ToastTitle, type ToastType, ToastViewport, Toggle, ToggleGroup, type ToggleGroupAppearance, Toggle as ToggleGroupItem, ToolCall, type ToolCallProps, type ToolCallStatus, Toolbar, ToolbarButton, type ToolbarButtonProps, ToolbarGroup, type ToolbarGroupProps, ToolbarInput, type ToolbarInputProps, ToolbarLink, type ToolbarLinkProps, type ToolbarProps, ToolbarSeparator, type ToolbarSeparatorProps, Tooltip, TooltipArrow, TooltipContent, TooltipGroup, type TooltipGroupProps, TooltipPortal, TooltipProvider, TooltipTrigger, Tree, TreeAddRow, TreeEmpty, TreeRow, TreeSection, type UseCaretTriggerOptions, type UseCaretTriggerResult, type UseCopyOptions, type UseCopyResult, type UseInViewOptions, type UsePanelWidthOptions, Video, type VideoProps, ViewTransitionName, type ViewTransitionNameProps, Workspace, WorkspaceBar, WorkspaceCanvas, accordionMeta, appHeaderMeta, appShellMeta, areaChartMeta, attachmentMeta, avatarGroupVariants, avatarMeta, avatarVariants, badgeMeta, badgeVariants, bannerMeta, bannerVariants, barChartMeta, bottomNavMeta, breadcrumbsMeta, browserMeta, bubbleMeta, buttonGroupMeta, buttonMeta, buttonVariants, calendarMeta, cardMeta, caretMenuMeta, carouselMeta, chartColor, toneColor as chartToneColor, chatComposerMeta, checkboxCardMeta, checkboxMeta, cn, codeBlockMeta, codeMeta, collapsibleMeta, colorFieldMeta, comboboxMeta, commandMenuMeta, componentGuidance, componentLabel, componentSlug, componentsInGroup, confirmButtonMeta, contextCardMeta, contextMenuMeta, dataTableMeta, datePickerMeta, dateTileMeta, destructiveActionModalMeta, dialogMeta, disclosurePickerMeta, emptyStateMeta, entityMeta, feedbackMeta, fieldsetMeta, fileDropzoneMeta, fileDropzoneVariants, fontPickerMeta, formMeta, formatFileSize, formatHex, glidingHighlightMeta, gradientArtMeta, hsvToRgb, hueColor, inlineStatusMeta, inputGroupMeta, inputMeta, isPaletteColor, isTransparent, kbdMeta, labelMeta, likeButtonMeta, lineChartMeta, markerMeta, marqueeMeta, mediaImageMeta, mediaTileMeta, menuMeta, menubarMeta, messageMeta, messageScrollerMeta, meterIndicatorVariants, meterMeta, meterTrackVariants, middleTruncateMeta, motionAttribute, navigationMenuMeta, noteMeta, noteVariants, notificationBadgeMeta, notificationCountVariants, notificationDotVariants, numberFieldMeta, numberTickerMeta, otpFieldMeta, overflowMenuMeta, pageHeaderMeta, pageLoaderMeta, paginationMeta, panelGroupMeta, panelSectionMeta, parseHex, phoneMeta, pieChartMeta, pillMeta, pillVariants, popoverMeta, progressMeta, progressTrackVariants, radarChartMeta, radialChartMeta, radioCardMeta, radioMeta, reactionPickerMeta, relativeTimeMeta, rgbToHsv, scrollerMeta, scrubFieldMeta, searchInputMeta, sectionHeaderMeta, segmentedBarMeta, segmentedBarSegmentVariants, segmentedBarVariants, selectMeta, separatorMeta, settingsMenuMeta, sheetMeta, sheetVariants, showMoreMeta, sideNavMeta, sidebarMeta, skeletonMeta, sliderMeta, sparklineMeta, spinnerMeta, startViewTransition, statusBarMeta, statusDotMeta, statusDotVariants, stepperConnectorVariants, stepperIndicatorVariants, stepperMeta, streamingTextMeta, supportsViewTransitions, switchMeta, tableMeta, tabsMeta, textareaMeta, themeSelectorMeta, themeSwitcherMeta, thinkingOrbMeta, toast, toastMeta, toggleMeta, toolCallMeta, toolbarGroupVariants, toolbarMeta, toolbarSeparatorVariants, toolbarVariants, tooltipMeta, treeIndent, treeMeta, useAnchoredDensity, useAutoSize, useCaretTrigger, useComboboxFilteredItems, useCommandMenuShortcut, useCopy, useDensity, useDisclosurePicker, useInView, useMotion, useMotionLevel, usePanelWidth, usePresentation, useReducedMotion, useScrollActivity, useShake, useSidebar, useSmoothWheel, useToast, useToastManager, useTypeTier, videoMeta, workspaceMeta };