@usetheo/ui 0.1.0-next.0 → 0.3.0-next.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 (146) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/README.md +116 -9
  3. package/dist/index.d.ts +242 -16
  4. package/dist/index.js +436 -131
  5. package/dist/index.js.map +1 -1
  6. package/dist/plugin-Atb0VKtr.d.ts +172 -0
  7. package/dist/slide/index.d.ts +212 -0
  8. package/dist/slide/index.js +714 -0
  9. package/dist/slide/index.js.map +1 -0
  10. package/dist/slide/plugins/emoji/index.d.ts +29 -0
  11. package/dist/slide/plugins/emoji/index.js +157 -0
  12. package/dist/slide/plugins/emoji/index.js.map +1 -0
  13. package/dist/slide/plugins/math/index.d.ts +13 -0
  14. package/dist/slide/plugins/math/index.js +145 -0
  15. package/dist/slide/plugins/math/index.js.map +1 -0
  16. package/dist/slide/plugins/mermaid/index.d.ts +55 -0
  17. package/dist/slide/plugins/mermaid/index.js +218 -0
  18. package/dist/slide/plugins/mermaid/index.js.map +1 -0
  19. package/dist/slide/plugins/shiki/index.d.ts +18 -0
  20. package/dist/slide/plugins/shiki/index.js +87 -0
  21. package/dist/slide/plugins/shiki/index.js.map +1 -0
  22. package/dist/slide/themes/default.css +256 -0
  23. package/dist/slide/themes/layouts.css +143 -0
  24. package/dist/slide/themes/violet-forge.css +256 -0
  25. package/dist/slide-deck/index.css +52 -0
  26. package/dist/slide-deck/index.css.map +1 -0
  27. package/dist/slide-deck/index.d.ts +377 -0
  28. package/dist/slide-deck/index.js +1797 -0
  29. package/dist/slide-deck/index.js.map +1 -0
  30. package/dist/whiteboard/index.d.ts +258 -0
  31. package/dist/whiteboard/index.js +738 -0
  32. package/dist/whiteboard/index.js.map +1 -0
  33. package/package.json +126 -6
  34. package/registry/index.json +42 -0
  35. package/registry/r/agent-composer.json +4 -4
  36. package/registry/r/agent-editor.json +9 -9
  37. package/registry/r/agent-error-card.json +2 -2
  38. package/registry/r/agent-event.json +4 -4
  39. package/registry/r/agent-handoff.json +2 -2
  40. package/registry/r/agent-profile.json +2 -2
  41. package/registry/r/agent-starting-state.json +2 -2
  42. package/registry/r/agent-stream.json +9 -9
  43. package/registry/r/agent-streaming.json +2 -2
  44. package/registry/r/agent-timeline.json +4 -4
  45. package/registry/r/approval-card.json +4 -4
  46. package/registry/r/artifact-preview.json +2 -2
  47. package/registry/r/attachment-chip.json +4 -4
  48. package/registry/r/audit-log-entry.json +3 -3
  49. package/registry/r/auto-compact-notice.json +2 -2
  50. package/registry/r/avatar.json +2 -2
  51. package/registry/r/badge.json +3 -3
  52. package/registry/r/browser-controls.json +2 -2
  53. package/registry/r/build-log-stream.json +2 -2
  54. package/registry/r/button.json +3 -3
  55. package/registry/r/capability-indicator.json +3 -3
  56. package/registry/r/card.json +3 -3
  57. package/registry/r/chat-composer.json +3 -3
  58. package/registry/r/chat-message.json +3 -3
  59. package/registry/r/chat-thread.json +2 -2
  60. package/registry/r/checkbox.json +4 -3
  61. package/registry/r/cn.json +1 -1
  62. package/registry/r/command-palette.json +4 -4
  63. package/registry/r/context-card.json +3 -3
  64. package/registry/r/context-window-bar.json +2 -2
  65. package/registry/r/cost-meter.json +2 -2
  66. package/registry/r/created-files-card.json +3 -3
  67. package/registry/r/cron-job-card.json +2 -2
  68. package/registry/r/cron-jobs-list.json +3 -3
  69. package/registry/r/deployment-row.json +3 -3
  70. package/registry/r/dialog.json +2 -2
  71. package/registry/r/diff-viewer.json +2 -2
  72. package/registry/r/domain-config.json +6 -6
  73. package/registry/r/empty-state.json +3 -3
  74. package/registry/r/env-var-editor.json +5 -5
  75. package/registry/r/folder-context-card.json +3 -3
  76. package/registry/r/folder-selector.json +2 -2
  77. package/registry/r/form-field.json +3 -3
  78. package/registry/r/hook-config.json +2 -2
  79. package/registry/r/hook-event-log.json +2 -2
  80. package/registry/r/input.json +6 -3
  81. package/registry/r/intent-selector.json +3 -3
  82. package/registry/r/label.json +2 -2
  83. package/registry/r/lane-board.json +2 -2
  84. package/registry/r/login-split.json +2 -2
  85. package/registry/r/mcp-server-card.json +2 -2
  86. package/registry/r/mcp-server-list.json +3 -3
  87. package/registry/r/memory-editor.json +3 -3
  88. package/registry/r/mention-menu.json +3 -3
  89. package/registry/r/metrics-panel.json +2 -2
  90. package/registry/r/model-card.json +3 -3
  91. package/registry/r/model-selector.json +2 -2
  92. package/registry/r/permission-matrix.json +2 -2
  93. package/registry/r/permission-modal.json +4 -4
  94. package/registry/r/preview-env-card.json +5 -5
  95. package/registry/r/preview-panel.json +3 -3
  96. package/registry/r/progress-checklist.json +3 -3
  97. package/registry/r/project-card.json +5 -5
  98. package/registry/r/project-switcher.json +2 -2
  99. package/registry/r/quick-action-chips.json +3 -3
  100. package/registry/r/radio-group.json +2 -2
  101. package/registry/r/recent-folders-list.json +2 -2
  102. package/registry/r/rollback-ui.json +4 -4
  103. package/registry/r/rule-card.json +3 -3
  104. package/registry/r/rule-editor.json +10 -10
  105. package/registry/r/rule-types.json +1 -1
  106. package/registry/r/run-stats.json +2 -2
  107. package/registry/r/running-tasks-panel.json +2 -2
  108. package/registry/r/scroll-area.json +2 -2
  109. package/registry/r/select.json +4 -3
  110. package/registry/r/session-list-item.json +2 -2
  111. package/registry/r/session-timeline.json +2 -2
  112. package/registry/r/sheet.json +2 -2
  113. package/registry/r/sidebar.json +2 -2
  114. package/registry/r/skeleton.json +2 -2
  115. package/registry/r/skill-card.json +4 -4
  116. package/registry/r/skill-editor.json +10 -10
  117. package/registry/r/skills-list.json +3 -3
  118. package/registry/r/slide-deck.json +130 -0
  119. package/registry/r/slide-plugin-emoji.json +28 -0
  120. package/registry/r/slide-plugin-math.json +24 -0
  121. package/registry/r/slide-plugin-mermaid.json +23 -0
  122. package/registry/r/slide-plugin-shiki.json +23 -0
  123. package/registry/r/slide.json +123 -0
  124. package/registry/r/social-auth-row.json +3 -3
  125. package/registry/r/steps-rail.json +2 -2
  126. package/registry/r/sub-agent-dispatch.json +2 -2
  127. package/registry/r/switch.json +5 -4
  128. package/registry/r/system-prompt-editor.json +2 -2
  129. package/registry/r/tabs.json +2 -2
  130. package/registry/r/tailwind-preset.json +1 -1
  131. package/registry/r/task-header.json +4 -4
  132. package/registry/r/task-plan.json +2 -2
  133. package/registry/r/terminal-panel.json +2 -2
  134. package/registry/r/textarea.json +6 -3
  135. package/registry/r/theme-provider.json +4 -4
  136. package/registry/r/theme-script.json +1 -1
  137. package/registry/r/theo-ui-provider.json +2 -2
  138. package/registry/r/toast.json +3 -3
  139. package/registry/r/token-usage-chart.json +2 -2
  140. package/registry/r/tool-call-card.json +3 -3
  141. package/registry/r/tool-call.json +2 -2
  142. package/registry/r/tool-result.json +2 -2
  143. package/registry/r/tools-list.json +3 -3
  144. package/registry/r/tooltip.json +2 -2
  145. package/registry/r/topnav.json +2 -2
  146. package/registry/r/whiteboard.json +101 -0
package/dist/index.d.ts CHANGED
@@ -86,6 +86,17 @@ interface Theme {
86
86
  fontUrls?: string[];
87
87
  }
88
88
 
89
+ type Density = "compact" | "comfortable" | "spacious";
90
+ interface DensityContextValue {
91
+ density: Density;
92
+ setDensity: (next: Density) => void;
93
+ }
94
+ /**
95
+ * Read the current density from the active ThemeProvider context. Throws
96
+ * outside the provider so misuse fails loud — analogous to `useTheme`.
97
+ */
98
+ declare function useDensity(): DensityContextValue;
99
+
89
100
  interface ThemeContextValue {
90
101
  /** Active theme (full descriptor). */
91
102
  theme: Theme;
@@ -127,6 +138,13 @@ interface ThemeProviderProps {
127
138
  * Default: "theo-ui:theme".
128
139
  */
129
140
  storageKey?: string | null;
141
+ /**
142
+ * Initial density. Drives `data-density` on `<html>` and the `--theo-control-h`
143
+ * / `--theo-control-px` CSS vars consumed by form-control `md` variants.
144
+ * Defaults to `"comfortable"` (36px controls — FAANG-tier modern density).
145
+ * Plan: faang-density-tightening (D3).
146
+ */
147
+ defaultDensity?: Density;
130
148
  }
131
149
  /**
132
150
  * ThemeProvider — central registry + runtime switcher for Theo themes.
@@ -139,7 +157,7 @@ interface ThemeProviderProps {
139
157
  * 3. Lazy-loads theme font URLs by injecting `<link rel="stylesheet">`.
140
158
  * 4. Optionally persists choice in localStorage.
141
159
  */
142
- declare function ThemeProvider({ children, defaultTheme, defaultMode, themes: themesProp, storageKey, }: ThemeProviderProps): JSX.Element;
160
+ declare function ThemeProvider({ children, defaultTheme, defaultMode, themes: themesProp, storageKey, defaultDensity, }: ThemeProviderProps): JSX.Element;
143
161
  /**
144
162
  * useTheme — access theme state from any component inside <ThemeProvider>.
145
163
  * Throws if used outside the provider — fail-fast.
@@ -234,6 +252,116 @@ declare const classicPaper: Theme;
234
252
  */
235
253
  declare const auroraTerminal: Theme;
236
254
 
255
+ /**
256
+ * `defineTheme(input)` — build a `Theme` from a partial override.
257
+ *
258
+ * Reduces the boilerplate of authoring a custom theme from 58 colour
259
+ * keys (`light` × 29 + `dark` × 29) to "just what you want to change".
260
+ * The merge always uses `violetForge` as the base — this is a pure,
261
+ * deterministic helper that does not depend on whatever theme is active
262
+ * at the call site.
263
+ *
264
+ * The `Theme` object it returns is drop-in compatible with
265
+ * `<ThemeProvider themes={[...]}>` — same shape as `violetForge`,
266
+ * `classicPaper`, and `auroraTerminal`.
267
+ *
268
+ * Honest caveat: if you override `light.primary` but NOT `dark.primary`,
269
+ * the two modes will use different colours — your override in light,
270
+ * Violet Forge's default in dark. That's intentional. Pass both sides
271
+ * to keep them in sync.
272
+ *
273
+ * @example
274
+ * import { defineTheme, hex } from "@usetheo/ui";
275
+ * export const corp = defineTheme({
276
+ * name: "corp",
277
+ * light: { primary: hex("#0EA5E9") },
278
+ * dark: { primary: hex("#38BDF8") },
279
+ * });
280
+ *
281
+ * Plan: `.claude/knowledge-base/plans/theming-and-sizes-plan.md` T2.1.
282
+ */
283
+
284
+ interface DefineThemeInput {
285
+ /**
286
+ * Stable id used in `data-theme="<name>"` on the root element. Must
287
+ * match `/^[a-z][a-z0-9-]*$/i` (CSS-identifier-safe). Required.
288
+ */
289
+ name: string;
290
+ /**
291
+ * Human-readable label for theme switchers. Defaults to the
292
+ * capitalized version of `name` (e.g. "corp" → "Corp").
293
+ */
294
+ label?: string;
295
+ /** Optional one-line description shown in switchers. */
296
+ description?: string;
297
+ /**
298
+ * Override light-mode colours. Any key omitted is inherited from
299
+ * `violetForge.light`. See `ColorScale` for the full list.
300
+ */
301
+ light?: Partial<ColorScale>;
302
+ /**
303
+ * Override dark-mode colours. Any key omitted is inherited from
304
+ * `violetForge.dark`.
305
+ */
306
+ dark?: Partial<ColorScale>;
307
+ /**
308
+ * Override fonts (`display`, `body`, `mono`). Any key omitted is
309
+ * inherited from `violetForge.fonts`.
310
+ */
311
+ fonts?: Partial<ThemeFonts>;
312
+ /**
313
+ * Replace the default remote font URLs. Pass an empty array to skip
314
+ * font fetching entirely. Defaults to `violetForge.fontUrls` when
315
+ * omitted (so consumers that don't care still get Geist preloaded).
316
+ */
317
+ fontUrls?: string[];
318
+ }
319
+ declare function defineTheme(input: DefineThemeInput): Theme;
320
+
321
+ /**
322
+ * Color helpers that return values in the HSL string-tuple format the
323
+ * `ColorScale` shape expects (e.g. `"262 83% 58%"`).
324
+ *
325
+ * Why this format: matches the shadcn / Violet Forge convention where
326
+ * CSS variables hold the H S% L% components and consumers write
327
+ * `hsl(var(--primary))` (allowing alpha overlays via
328
+ * `hsl(var(--primary) / 0.5)`). Returning an object would force callers
329
+ * to write `${theme.light.primary.h} ${theme.light.primary.s}% …` —
330
+ * exactly the friction `hex()` is meant to remove.
331
+ *
332
+ * No external dependency: vanilla algorithm from CSS Color spec.
333
+ * Alpha channels are intentionally discarded — `ColorScale` is opaque;
334
+ * use `hsl(var(--primary) / 0.5)` in CSS for transparency.
335
+ *
336
+ * Plan: `.claude/knowledge-base/plans/theming-and-sizes-plan.md` T2.2.
337
+ */
338
+ /**
339
+ * Convert a hex color string to the HSL string-tuple format used by
340
+ * `ColorScale` ("`H S% L%`", e.g. `"262 83% 58%"`).
341
+ *
342
+ * Accepts `#rgb`, `#rgba`, `#rrggbb`, `#rrggbbaa`. Case-insensitive.
343
+ * Alpha bytes are silently dropped — use `hsl(var(--primary) / 0.5)`
344
+ * in CSS for transparency.
345
+ *
346
+ * @throws if the input is malformed.
347
+ *
348
+ * @example
349
+ * hex("#7C3AED") // "262 83% 58%"
350
+ * hex("#7c3aed") // "262 83% 58%" (same)
351
+ * hex("#abc") // expanded to "#aabbcc"
352
+ */
353
+ declare function hex(input: string): string;
354
+ /**
355
+ * Convert an RGB triplet (each in `[0, 255]`) to the HSL string-tuple
356
+ * format used by `ColorScale`.
357
+ *
358
+ * @throws if any channel is out of `[0, 255]`.
359
+ *
360
+ * @example
361
+ * rgb(124, 58, 237) // "262 83% 58%"
362
+ */
363
+ declare function rgb(r: number, g: number, b: number): string;
364
+
237
365
  /**
238
366
  * All themes bundled with Theo UI. Pass to `<ThemeProvider themes={builtinThemes}>`
239
367
  * if you want all of them available out of the box.
@@ -257,6 +385,7 @@ declare const builtinThemes: Theme[];
257
385
  */
258
386
  declare const toastVariants: (props?: ({
259
387
  variant?: "success" | "warning" | "destructive" | "info" | "default" | null | undefined;
388
+ size?: "sm" | "md" | "lg" | null | undefined;
260
389
  } & class_variance_authority_types.ClassProp) | undefined) => string;
261
390
  type ToastVariant = NonNullable<VariantProps<typeof toastVariants>["variant"]>;
262
391
  interface ToastProps extends ComponentPropsWithoutRef<typeof ToastPrimitive.Root>, VariantProps<typeof toastVariants> {
@@ -428,7 +557,7 @@ interface TaskStep {
428
557
  * `asChild` swaps the root for the consumer's element (Radix Slot pattern).
429
558
  */
430
559
  declare const buttonVariants: (props?: ({
431
- variant?: "primary" | "secondary" | "accent" | "destructive" | "link" | "ghost" | null | undefined;
560
+ variant?: "accent" | "link" | "primary" | "secondary" | "destructive" | "ghost" | null | undefined;
432
561
  size?: "sm" | "md" | "lg" | "icon" | null | undefined;
433
562
  } & class_variance_authority_types.ClassProp) | undefined) => string;
434
563
  interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
@@ -452,7 +581,8 @@ declare const Button: react.ForwardRefExoticComponent<ButtonProps & react.RefAtt
452
581
  * "Running", "Failed" rows in deployment lists.
453
582
  */
454
583
  declare const badgeVariants: (props?: ({
455
- variant?: "primary" | "accent" | "success" | "warning" | "destructive" | "default" | "outline" | null | undefined;
584
+ variant?: "accent" | "primary" | "success" | "warning" | "destructive" | "default" | "outline" | null | undefined;
585
+ size?: "sm" | "md" | "lg" | null | undefined;
456
586
  } & class_variance_authority_types.ClassProp) | undefined) => string;
457
587
  interface BadgeProps extends HTMLAttributes<HTMLSpanElement>, VariantProps<typeof badgeVariants> {
458
588
  }
@@ -466,6 +596,29 @@ declare const BadgeWithDot: typeof Badge & {
466
596
  Dot: typeof Dot;
467
597
  };
468
598
 
599
+ /**
600
+ * Card — surface container for grouping related content.
601
+ *
602
+ * Composition pattern (shadcn-style):
603
+ * <Card>
604
+ * <Card.Header>
605
+ * <Card.Title>…</Card.Title>
606
+ * <Card.Description>…</Card.Description>
607
+ * </Card.Header>
608
+ * <Card.Body>…</Card.Body>
609
+ * <Card.Footer>…</Card.Footer>
610
+ * </Card>
611
+ *
612
+ * The `size` prop on the root propagates to subparts via Context, so a
613
+ * single declaration controls padding + heading scale across the compound.
614
+ * Subparts used in isolation default to `md`. Subparts do NOT accept a `size`
615
+ * prop of their own — use `className` for granular per-subpart tweaks.
616
+ * (EC-8, edge-case review 2026-05-20.)
617
+ */
618
+ type CardSize = "sm" | "md" | "lg";
619
+ interface CardRootProps extends HTMLAttributes<HTMLDivElement> {
620
+ size?: CardSize;
621
+ }
469
622
  interface TitleProps extends HTMLAttributes<HTMLHeadingElement> {
470
623
  /**
471
624
  * When true, renders the child element with the Card.Title styles applied
@@ -474,7 +627,7 @@ interface TitleProps extends HTMLAttributes<HTMLHeadingElement> {
474
627
  */
475
628
  asChild?: boolean;
476
629
  }
477
- declare const Card: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & react.RefAttributes<HTMLDivElement>> & {
630
+ declare const Card: react.ForwardRefExoticComponent<CardRootProps & react.RefAttributes<HTMLDivElement>> & {
478
631
  Header: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & react.RefAttributes<HTMLDivElement>>;
479
632
  Title: react.ForwardRefExoticComponent<TitleProps & react.RefAttributes<HTMLHeadingElement>>;
480
633
  Description: react.ForwardRefExoticComponent<HTMLAttributes<HTMLParagraphElement> & react.RefAttributes<HTMLParagraphElement>>;
@@ -482,8 +635,9 @@ declare const Card: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElemen
482
635
  Footer: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & react.RefAttributes<HTMLDivElement>>;
483
636
  };
484
637
 
485
- interface InputProps extends InputHTMLAttributes<HTMLInputElement> {
486
- }
638
+ declare const inputVariants: (props?: ({
639
+ size?: "sm" | "md" | "lg" | null | undefined;
640
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
487
641
  /**
488
642
  * Input — text input primitive.
489
643
  *
@@ -492,7 +646,15 @@ interface InputProps extends InputHTMLAttributes<HTMLInputElement> {
492
646
  * - rounded-md (6px) — slightly less than buttons to differentiate.
493
647
  * - focus uses violet ring (--ring).
494
648
  * - placeholder uses --muted-foreground.
649
+ *
650
+ * The `size` prop accepts `"sm" | "md" | "lg"`. Default `md` preserves the
651
+ * 40px tall input from before this prop existed. EC-1 (edge-case review):
652
+ * this overrides the native HTML `size` attribute (text-input columns) —
653
+ * use `{...{ size: 20 } as any}` if you genuinely need the HTML attribute,
654
+ * which is exceedingly rare.
495
655
  */
656
+ interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "size">, VariantProps<typeof inputVariants> {
657
+ }
496
658
  declare const Input: react.ForwardRefExoticComponent<InputProps & react.RefAttributes<HTMLInputElement>>;
497
659
 
498
660
  interface ContentProps$1 extends ComponentPropsWithoutRef<typeof DialogPrimitive.Content> {
@@ -628,7 +790,7 @@ declare const Skeleton: react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivEl
628
790
  */
629
791
  declare const avatarVariants: (props?: ({
630
792
  size?: "sm" | "md" | "lg" | "xs" | "xl" | null | undefined;
631
- tone?: "primary" | "accent" | "muted" | null | undefined;
793
+ tone?: "accent" | "primary" | "muted" | null | undefined;
632
794
  } & class_variance_authority_types.ClassProp) | undefined) => string;
633
795
  interface AvatarProps extends ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>, VariantProps<typeof avatarVariants> {
634
796
  }
@@ -650,11 +812,37 @@ interface LabelProps extends ComponentPropsWithoutRef<typeof LabelPrimitive.Root
650
812
  }
651
813
  declare const Label: react.ForwardRefExoticComponent<LabelProps & react.RefAttributes<HTMLLabelElement>>;
652
814
 
815
+ /**
816
+ * FormField — composition wrapper for accessible form rows.
817
+ *
818
+ * Provides context with a generated `id`, so children (Label, Input, Hint,
819
+ * Error) wire themselves via `htmlFor` / `id` / `aria-describedby` without
820
+ * the consumer having to thread IDs manually.
821
+ *
822
+ * Composition:
823
+ * <FormField>
824
+ * <FormField.Label required>Email</FormField.Label>
825
+ * <FormField.Control>
826
+ * <Input type="email" placeholder="…" />
827
+ * </FormField.Control>
828
+ * <FormField.Hint>We never share your email.</FormField.Hint>
829
+ * <FormField.Error>{error}</FormField.Error>
830
+ * </FormField>
831
+ *
832
+ * Errors take precedence over hints (only one of them shows at once).
833
+ */
834
+ type FormFieldSize = "sm" | "md" | "lg";
653
835
  interface FormFieldProps extends HTMLAttributes<HTMLDivElement> {
654
836
  /** Optional explicit id override. */
655
837
  id?: string;
656
838
  /** Marks the field as invalid; switches Hint → Error and toggles aria. */
657
839
  invalid?: boolean;
840
+ /**
841
+ * Size scale propagated to Label / Hint / Error subparts via Context.
842
+ * Default `md` preserves prior behavior. Subparts do NOT accept a `size`
843
+ * prop of their own — use `className` for granular tweaks (EC-8).
844
+ */
845
+ size?: FormFieldSize;
658
846
  }
659
847
  interface FormFieldLabelProps extends ComponentPropsWithoutRef<typeof LabelPrimitive.Root> {
660
848
  required?: boolean;
@@ -696,6 +884,17 @@ interface EmptyStateProps extends Omit<HTMLAttributes<HTMLDivElement>, "title">
696
884
  */
697
885
  declare const EmptyState: react.ForwardRefExoticComponent<EmptyStateProps & react.RefAttributes<HTMLDivElement>>;
698
886
 
887
+ /**
888
+ * Trigger size variant (theming-and-sizes plan T1.9).
889
+ * Items inside Select.Content stay md-equivalent regardless — the floating
890
+ * menu is isolated from the trigger context (documented decision).
891
+ *
892
+ * EC-2 guard: `<Select.Trigger>` is a Radix `<button>` — no SelectHTMLAttributes
893
+ * conflict to Omit. Verified before implementation.
894
+ */
895
+ declare const selectTriggerVariants: (props?: ({
896
+ size?: "sm" | "md" | "lg" | null | undefined;
897
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
699
898
  /**
700
899
  * Select — styled wrapper around Radix Select.
701
900
  *
@@ -715,7 +914,9 @@ declare const EmptyState: react.ForwardRefExoticComponent<EmptyStateProps & reac
715
914
  * Trigger matches Input height + violet focus ring. Content uses popover
716
915
  * surface with check on the selected item.
717
916
  */
718
- declare const SelectTrigger: react.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectTriggerProps & react.RefAttributes<HTMLButtonElement>, "ref"> & react.RefAttributes<HTMLButtonElement>>;
917
+ interface SelectTriggerProps extends ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>, VariantProps<typeof selectTriggerVariants> {
918
+ }
919
+ declare const SelectTrigger: react.ForwardRefExoticComponent<SelectTriggerProps & react.RefAttributes<HTMLButtonElement>>;
719
920
  declare const SelectContent: react.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectContentProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
720
921
  declare const SelectLabel: react.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectLabelProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
721
922
  declare const SelectItem: react.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectItemProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
@@ -735,8 +936,17 @@ declare const Select: typeof SelectPrimitive.Root & {
735
936
  *
736
937
  * Supports tri-state via `checked="indeterminate"`. Violet fill when on,
737
938
  * border-only when off. Themed via tokens (--primary, --background).
939
+ *
940
+ * The `size` prop accepts `"sm" | "md" | "lg"`. Default `md` preserves the
941
+ * 16px box from before this prop existed. The `sm` size keeps a >=24px
942
+ * effective tap target via an invisible expanded hit area (WCAG 2.5.5).
738
943
  */
739
- declare const Checkbox: react.ForwardRefExoticComponent<Omit<CheckboxPrimitive.CheckboxProps & react.RefAttributes<HTMLButtonElement>, "ref"> & react.RefAttributes<HTMLButtonElement>>;
944
+ declare const checkboxVariants: (props?: ({
945
+ size?: "sm" | "md" | "lg" | null | undefined;
946
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
947
+ interface CheckboxProps extends ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>, VariantProps<typeof checkboxVariants> {
948
+ }
949
+ declare const Checkbox: react.ForwardRefExoticComponent<CheckboxProps & react.RefAttributes<HTMLButtonElement>>;
740
950
 
741
951
  declare const RadioGroup: react.ForwardRefExoticComponent<Omit<RadioGroupPrimitive.RadioGroupProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>> & {
742
952
  Item: react.ForwardRefExoticComponent<Omit<RadioGroupPrimitive.RadioGroupItemProps & react.RefAttributes<HTMLButtonElement>, "ref"> & react.RefAttributes<HTMLButtonElement>>;
@@ -748,17 +958,33 @@ declare const RadioGroup: react.ForwardRefExoticComponent<Omit<RadioGroupPrimiti
748
958
  *
749
959
  * Off-state uses --muted, on-state uses --primary with a subtle glow shadow
750
960
  * to mark "this is active" in the violet brand language.
961
+ *
962
+ * The `size` prop accepts `"sm" | "md" | "lg"`. Default `md` preserves the
963
+ * 20×36 track from before this prop existed.
751
964
  */
752
- declare const Switch: react.ForwardRefExoticComponent<Omit<SwitchPrimitive.SwitchProps & react.RefAttributes<HTMLButtonElement>, "ref"> & react.RefAttributes<HTMLButtonElement>>;
753
-
754
- interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {
965
+ declare const switchVariants: (props?: ({
966
+ size?: "sm" | "md" | "lg" | null | undefined;
967
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
968
+ interface SwitchProps extends ComponentPropsWithoutRef<typeof SwitchPrimitive.Root>, VariantProps<typeof switchVariants> {
755
969
  }
970
+ declare const Switch: react.ForwardRefExoticComponent<SwitchProps & react.RefAttributes<HTMLButtonElement>>;
971
+
756
972
  /**
757
973
  * Textarea — multi-line input mirror of Input.
758
974
  *
759
975
  * Matches Input visuals (violet focus ring, --input border, --card bg).
760
- * Default minimum height of 96px; consumer can override via className.
976
+ * The `size` prop accepts `"sm" | "md" | "lg"`. Default `md` preserves the
977
+ * 80px (5rem) min-height + body-md text from before this prop existed.
978
+ *
979
+ * Note: `TextareaHTMLAttributes<HTMLTextAreaElement>` does NOT declare a
980
+ * native `size` attribute (textareas use `rows` / `cols`), so no Omit is
981
+ * needed — contrast with `<Input>` which had EC-1 collision.
761
982
  */
983
+ declare const textareaVariants: (props?: ({
984
+ size?: "sm" | "md" | "lg" | null | undefined;
985
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
986
+ interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement>, VariantProps<typeof textareaVariants> {
987
+ }
762
988
  declare const Textarea: react.ForwardRefExoticComponent<TextareaProps & react.RefAttributes<HTMLTextAreaElement>>;
763
989
 
764
990
  interface ContextWindowBarProps extends HTMLAttributes<HTMLDivElement> {
@@ -1635,7 +1861,7 @@ declare const TopNav: react.ForwardRefExoticComponent<HTMLAttributes<HTMLElement
1635
1861
  */
1636
1862
  declare const Overlay: react.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogOverlayProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
1637
1863
  declare const sheetVariants: (props?: ({
1638
- side?: "right" | "left" | "top" | "bottom" | null | undefined;
1864
+ side?: "bottom" | "left" | "right" | "top" | null | undefined;
1639
1865
  } & class_variance_authority_types.ClassProp) | undefined) => string;
1640
1866
  interface ContentProps extends ComponentPropsWithoutRef<typeof DialogPrimitive.Content>, VariantProps<typeof sheetVariants> {
1641
1867
  hideCloseButton?: boolean;
@@ -2986,7 +3212,7 @@ interface DomainConfigProps extends HTMLAttributes<HTMLDivElement> {
2986
3212
  * DomainConfig — manage custom domains for a project.
2987
3213
  *
2988
3214
  * Shows: hostname, status, TLS, primary flag, and verification DNS record when pending.
2989
- * Common in every PaaS dashboard (Vercel, Railway, Render).
3215
+ * Common in every cloud dashboard (Vercel, Railway, Render).
2990
3216
  */
2991
3217
  declare const DomainConfig: react.ForwardRefExoticComponent<DomainConfigProps & react.RefAttributes<HTMLDivElement>>;
2992
3218
 
@@ -3060,4 +3286,4 @@ interface CommandPaletteProps {
3060
3286
  */
3061
3287
  declare function CommandPalette({ open, onOpenChange, items, onSelect, placeholder, emptyMessage, filter, }: CommandPaletteProps): react_jsx_runtime.JSX.Element;
3062
3288
 
3063
- export { ALL_MODES, AgentComposer, type AgentDraft, AgentEditor, AgentErrorCard, type AgentErrorKind, AgentEvent, type AgentEvent$1 as AgentEventModel, type AgentEventStatus, type AgentEventType, AgentHandoff, AgentProfile, type AgentProfileDescriptor, AgentStartingState, AgentStream, type AgentStreamItem, AgentStreaming, AgentTimeline, ApprovalCard, type ApprovalSeverity, ArtifactPreview, type Attachment, AttachmentChip, type AuditActorKind, type AuditEntry, AuditLogEntry, type AuditSeverity, AutoCompactNotice, Avatar, BadgeWithDot as Badge, type BadgeProps, BrowserControls, BuildLogStream, Button, type ButtonProps, type Capability, CapabilityIndicator, type CapabilityState, Card, ChatComposer, ChatMessage, ChatThread, Checkbox, type ColorScale, type CommandItem, CommandPalette, type ComposerMode, ContextCard, ContextWindowBar, CostMeter, type CreatedFile, CreatedFilesCard, type CronJob, CronJobCard, type CronJobStatus, CronJobsList, type Deployment, DeploymentRow, type DeploymentStatus, Dialog, type DiffHunk, type DiffLine, type DiffLineKind, DiffViewer, type Domain, DomainConfig, type DomainStatus, EmptyState, type EnvScope, type EnvVar, EnvVarEditor, FolderContextCard, type FolderEntry, FolderSelector, FormField, HOOK_EVENTS, type HandoffParty, HookConfig, type HookEntry, type HookEvent, type HookEventEntry, HookEventLog, type HookEventResult, Input, type InputProps, type IntentOption, IntentSelector, Label, type Lane, LaneBoard, type LaneCard, type LaneState, type LogLevel, type LogLine, LoginSplit, type MCPServer, MCPServerCard, MCPServerList, type MCPServerStatus, MODE_LABEL, MemoryEditor, type MemoryLayer, type MemoryScope, type MentionItem, MentionMenu, type MentionTrigger, type Message, type MessageRole, type Metric, MetricsPanel, type Mode, type ModelCapabilityFlag, ModelCard, type ModelInfo, type ModelOption, ModelSelector, type PermissionDecision, type PermissionDecisionKind, PermissionMatrix, PermissionModal, type PermissionOperation, type PermissionRequest, type PermissionRule, type PlanNode, type PlanNodeStatus, type PreviewEnv, PreviewEnvCard, PreviewPanel, type PreviewService, ProgressChecklist, type Project, ProjectCard, type ProjectStatus, ProjectSwitcher, type QuickAction, QuickActionChips, RadioGroup, type RailStep, type RecentFolder, RecentFoldersList, type RollbackTarget, RollbackUI, type Rule, RuleCard, RuleEditor, type RuleScope, type RuleState, RunStats, type RunningTaskItem, type RunningTaskStatus, RunningTasksPanel, ScrollArea, Select, SessionListItem, type SessionMode, type SessionRunStatus, type SessionStatus, type SessionSummary, SessionTimeline, Sheet, Sidebar, Skeleton, type Skill, SkillCard, SkillEditor, type SkillSource, type SkillState, SkillsList, SocialAuthRow, type SocialProvider, StepsRail, SubAgentDispatch, type SubAgentRun, type SubAgentState, Switch, SystemPromptEditor, Tabs, TaskHeader, TaskNode, TaskPlan, type TaskSource, type TaskStatus, type TaskStep, type TaskStepStatus, type TerminalLine, TerminalPanel, Textarea, type TextareaProps, type Theme, type ThemeFonts, type ThemeMode, ThemeProvider, ThemeScript, ThemeSwitcher, TheoUIProvider, type TheoUIProviderProps, Toast, type ToastVariant, Toaster, TokenUsageChart, type TokenUsagePoint, ToolCall, ToolCallCard, type ToolCallStatus, type ToolEnablement, type ToolEntry, ToolResult, ToolsList, TooltipWithStatics as Tooltip, TopNav, auroraTerminal, avatarVariants, badgeVariants, builtinThemes, buttonVariants, capabilityPresets, classicPaper, cn, modelCapabilityPresets, sheetVariants, useTheme, useToast, violetForge };
3289
+ export { ALL_MODES, AgentComposer, type AgentDraft, AgentEditor, AgentErrorCard, type AgentErrorKind, AgentEvent, type AgentEvent$1 as AgentEventModel, type AgentEventStatus, type AgentEventType, AgentHandoff, AgentProfile, type AgentProfileDescriptor, AgentStartingState, AgentStream, type AgentStreamItem, AgentStreaming, AgentTimeline, ApprovalCard, type ApprovalSeverity, ArtifactPreview, type Attachment, AttachmentChip, type AuditActorKind, type AuditEntry, AuditLogEntry, type AuditSeverity, AutoCompactNotice, Avatar, BadgeWithDot as Badge, type BadgeProps, BrowserControls, BuildLogStream, Button, type ButtonProps, type Capability, CapabilityIndicator, type CapabilityState, Card, ChatComposer, ChatMessage, ChatThread, Checkbox, type ColorScale, type CommandItem, CommandPalette, type ComposerMode, ContextCard, ContextWindowBar, CostMeter, type CreatedFile, CreatedFilesCard, type CronJob, CronJobCard, type CronJobStatus, CronJobsList, type DefineThemeInput, type Density, type DensityContextValue, type Deployment, DeploymentRow, type DeploymentStatus, Dialog, type DiffHunk, type DiffLine, type DiffLineKind, DiffViewer, type Domain, DomainConfig, type DomainStatus, EmptyState, type EnvScope, type EnvVar, EnvVarEditor, FolderContextCard, type FolderEntry, FolderSelector, FormField, HOOK_EVENTS, type HandoffParty, HookConfig, type HookEntry, type HookEvent, type HookEventEntry, HookEventLog, type HookEventResult, Input, type InputProps, type IntentOption, IntentSelector, Label, type Lane, LaneBoard, type LaneCard, type LaneState, type LogLevel, type LogLine, LoginSplit, type MCPServer, MCPServerCard, MCPServerList, type MCPServerStatus, MODE_LABEL, MemoryEditor, type MemoryLayer, type MemoryScope, type MentionItem, MentionMenu, type MentionTrigger, type Message, type MessageRole, type Metric, MetricsPanel, type Mode, type ModelCapabilityFlag, ModelCard, type ModelInfo, type ModelOption, ModelSelector, type PermissionDecision, type PermissionDecisionKind, PermissionMatrix, PermissionModal, type PermissionOperation, type PermissionRequest, type PermissionRule, type PlanNode, type PlanNodeStatus, type PreviewEnv, PreviewEnvCard, PreviewPanel, type PreviewService, ProgressChecklist, type Project, ProjectCard, type ProjectStatus, ProjectSwitcher, type QuickAction, QuickActionChips, RadioGroup, type RailStep, type RecentFolder, RecentFoldersList, type RollbackTarget, RollbackUI, type Rule, RuleCard, RuleEditor, type RuleScope, type RuleState, RunStats, type RunningTaskItem, type RunningTaskStatus, RunningTasksPanel, ScrollArea, Select, SessionListItem, type SessionMode, type SessionRunStatus, type SessionStatus, type SessionSummary, SessionTimeline, Sheet, Sidebar, Skeleton, type Skill, SkillCard, SkillEditor, type SkillSource, type SkillState, SkillsList, SocialAuthRow, type SocialProvider, StepsRail, SubAgentDispatch, type SubAgentRun, type SubAgentState, Switch, SystemPromptEditor, Tabs, TaskHeader, TaskNode, TaskPlan, type TaskSource, type TaskStatus, type TaskStep, type TaskStepStatus, type TerminalLine, TerminalPanel, Textarea, type TextareaProps, type Theme, type ThemeFonts, type ThemeMode, ThemeProvider, ThemeScript, ThemeSwitcher, TheoUIProvider, type TheoUIProviderProps, Toast, type ToastVariant, Toaster, TokenUsageChart, type TokenUsagePoint, ToolCall, ToolCallCard, type ToolCallStatus, type ToolEnablement, type ToolEntry, ToolResult, ToolsList, TooltipWithStatics as Tooltip, TopNav, auroraTerminal, avatarVariants, badgeVariants, builtinThemes, buttonVariants, capabilityPresets, classicPaper, cn, defineTheme, hex, modelCapabilityPresets, rgb, sheetVariants, useDensity, useTheme, useToast, violetForge };