@mcp-b/react-components 0.1.1 → 0.1.2

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/dist/Button-QCM8ZKgR.d.ts +98 -0
  2. package/dist/CodeBlock-CttHhWcb.js +356 -0
  3. package/dist/CodeBlock-V6pgafSS.d.ts +174 -0
  4. package/dist/Select-CRsKCJ9x.d.ts +200 -0
  5. package/dist/class-names-9UtZwb0J.js +12 -0
  6. package/dist/components/Accordion.d.ts +81 -0
  7. package/dist/components/Accordion.js +97 -0
  8. package/dist/components/AgentConnection.d.ts +69 -0
  9. package/dist/components/AgentConnection.js +176 -0
  10. package/dist/components/AlertDialog.d.ts +148 -0
  11. package/dist/components/AlertDialog.js +141 -0
  12. package/dist/components/Artifact.d.ts +128 -0
  13. package/dist/components/Artifact.js +115 -0
  14. package/dist/components/Autocomplete.d.ts +186 -0
  15. package/dist/components/Autocomplete.js +186 -0
  16. package/dist/components/Avatar.d.ts +134 -0
  17. package/dist/components/Avatar.js +118 -0
  18. package/dist/components/Badge.d.ts +68 -0
  19. package/dist/components/Badge.js +108 -0
  20. package/dist/components/Button.d.ts +2 -0
  21. package/dist/components/Button.js +73 -0
  22. package/dist/components/Card.d.ts +87 -0
  23. package/dist/components/Card.js +81 -0
  24. package/dist/components/ChainOfThought.d.ts +153 -0
  25. package/dist/components/ChainOfThought.js +157 -0
  26. package/dist/components/Checkbox.d.ts +35 -0
  27. package/dist/components/Checkbox.js +47 -0
  28. package/dist/components/CheckboxGroup.d.ts +76 -0
  29. package/dist/components/CheckboxGroup.js +69 -0
  30. package/dist/components/CodeBlock.d.ts +2 -0
  31. package/dist/components/CodeBlock.js +2 -0
  32. package/dist/components/Collapsible.d.ts +127 -0
  33. package/dist/components/Collapsible.js +103 -0
  34. package/dist/components/Combobox.d.ts +177 -0
  35. package/dist/components/Combobox.js +179 -0
  36. package/dist/components/Commit.d.ts +265 -0
  37. package/dist/components/Commit.js +282 -0
  38. package/dist/components/Context.d.ts +129 -0
  39. package/dist/components/Context.js +309 -0
  40. package/dist/components/ContextMenu.d.ts +282 -0
  41. package/dist/components/ContextMenu.js +270 -0
  42. package/dist/components/Conversation.d.ts +166 -0
  43. package/dist/components/Conversation.js +202 -0
  44. package/dist/components/Dialog.d.ts +120 -0
  45. package/dist/components/Dialog.js +114 -0
  46. package/dist/components/EnvironmentVariables.d.ts +176 -0
  47. package/dist/components/EnvironmentVariables.js +221 -0
  48. package/dist/components/Field.d.ts +281 -0
  49. package/dist/components/Field.js +274 -0
  50. package/dist/components/Fieldset.d.ts +93 -0
  51. package/dist/components/Fieldset.js +81 -0
  52. package/dist/components/FileTree.d.ts +116 -0
  53. package/dist/components/FileTree.js +310 -0
  54. package/dist/components/Form.d.ts +94 -0
  55. package/dist/components/Form.js +88 -0
  56. package/dist/components/GithubMotionMark.d.ts +13 -0
  57. package/dist/components/GithubMotionMark.js +23 -0
  58. package/dist/components/Input.d.ts +33 -0
  59. package/dist/components/Input.js +27 -0
  60. package/dist/components/Label.d.ts +44 -0
  61. package/dist/components/Label.js +41 -0
  62. package/dist/components/Menu.d.ts +395 -0
  63. package/dist/components/Menu.js +338 -0
  64. package/dist/components/Menubar.d.ts +331 -0
  65. package/dist/components/Menubar.js +299 -0
  66. package/dist/components/Message.d.ts +216 -0
  67. package/dist/components/Message.js +245 -0
  68. package/dist/components/Meter.d.ts +151 -0
  69. package/dist/components/Meter.js +121 -0
  70. package/dist/components/ModelSelector.d.ts +198 -0
  71. package/dist/components/ModelSelector.js +306 -0
  72. package/dist/components/NaniteScene.d.ts +33 -0
  73. package/dist/components/NaniteScene.js +405 -0
  74. package/dist/components/NavigationMenu.d.ts +256 -0
  75. package/dist/components/NavigationMenu.js +228 -0
  76. package/dist/components/NumberField.d.ts +159 -0
  77. package/dist/components/NumberField.js +123 -0
  78. package/dist/components/Popover.d.ts +278 -0
  79. package/dist/components/Popover.js +245 -0
  80. package/dist/components/PreviewCard.d.ts +156 -0
  81. package/dist/components/PreviewCard.js +156 -0
  82. package/dist/components/PricingPage.d.ts +209 -0
  83. package/dist/components/PricingPage.js +506 -0
  84. package/dist/components/Progress.d.ts +58 -0
  85. package/dist/components/Progress.js +51 -0
  86. package/dist/components/PromptInput.d.ts +399 -0
  87. package/dist/components/PromptInput.js +737 -0
  88. package/dist/components/Queue.d.ts +241 -0
  89. package/dist/components/Queue.js +225 -0
  90. package/dist/components/RadioGroup.d.ts +78 -0
  91. package/dist/components/RadioGroup.js +72 -0
  92. package/dist/components/Reasoning.d.ts +88 -0
  93. package/dist/components/Reasoning.js +187 -0
  94. package/dist/components/ScrollArea.d.ts +160 -0
  95. package/dist/components/ScrollArea.js +145 -0
  96. package/dist/components/Select.d.ts +2 -0
  97. package/dist/components/Select.js +260 -0
  98. package/dist/components/Separator.d.ts +45 -0
  99. package/dist/components/Separator.js +40 -0
  100. package/dist/components/Shell.d.ts +163 -0
  101. package/dist/components/Shell.js +137 -0
  102. package/dist/components/Slider.d.ts +120 -0
  103. package/dist/components/Slider.js +115 -0
  104. package/dist/components/Sources.d.ts +91 -0
  105. package/dist/components/Sources.js +121 -0
  106. package/dist/components/Stepper.d.ts +190 -0
  107. package/dist/components/Stepper.js +315 -0
  108. package/dist/components/Switch.d.ts +57 -0
  109. package/dist/components/Switch.js +55 -0
  110. package/dist/components/Tabs.d.ts +84 -0
  111. package/dist/components/Tabs.js +78 -0
  112. package/dist/components/Task.d.ts +100 -0
  113. package/dist/components/Task.js +120 -0
  114. package/dist/components/Terminal.d.ts +118 -0
  115. package/dist/components/Terminal.js +234 -0
  116. package/dist/components/TestResults.d.ts +236 -0
  117. package/dist/components/TestResults.js +346 -0
  118. package/dist/components/Toast.d.ts +192 -0
  119. package/dist/components/Toast.js +163 -0
  120. package/dist/components/Toggle.d.ts +69 -0
  121. package/dist/components/Toggle.js +66 -0
  122. package/dist/components/ToggleGroup.d.ts +69 -0
  123. package/dist/components/ToggleGroup.js +99 -0
  124. package/dist/components/Tool.d.ts +119 -0
  125. package/dist/components/Tool.js +192 -0
  126. package/dist/components/Toolbar.d.ts +162 -0
  127. package/dist/components/Toolbar.js +126 -0
  128. package/dist/components/Tooltip.d.ts +81 -0
  129. package/dist/components/Tooltip.js +74 -0
  130. package/dist/components/WebPreview.d.ts +143 -0
  131. package/dist/components/WebPreview.js +280 -0
  132. package/dist/components/useStickToBottom.d.ts +30 -0
  133. package/dist/components/useStickToBottom.js +95 -0
  134. package/dist/copy-button-BIATcZWZ.d.ts +16 -0
  135. package/dist/copy-button-BNgclDrO.js +43 -0
  136. package/dist/icons-BsWc8g4E.js +221 -0
  137. package/dist/styles/accordion.css +10 -10
  138. package/dist/styles/agent-connection.css +18 -17
  139. package/dist/styles/alert-dialog.css +48 -29
  140. package/dist/styles/artifact.css +10 -10
  141. package/dist/styles/autocomplete.css +25 -24
  142. package/dist/styles/avatar.css +96 -6
  143. package/dist/styles/badge.css +78 -14
  144. package/dist/styles/base.css +9 -9
  145. package/dist/styles/button.css +57 -38
  146. package/dist/styles/card.css +57 -10
  147. package/dist/styles/chain-of-thought.css +47 -33
  148. package/dist/styles/checkbox.css +24 -10
  149. package/dist/styles/code-block.css +22 -15
  150. package/dist/styles/collapsible.css +14 -12
  151. package/dist/styles/combobox.css +26 -25
  152. package/dist/styles/commit.css +49 -24
  153. package/dist/styles/context-menu.css +70 -16
  154. package/dist/styles/context.css +15 -15
  155. package/dist/styles/conversation.css +12 -12
  156. package/dist/styles/dialog.css +52 -16
  157. package/dist/styles/environment-variables.css +19 -19
  158. package/dist/styles/field.css +184 -22
  159. package/dist/styles/fieldset.css +5 -4
  160. package/dist/styles/file-tree.css +17 -17
  161. package/dist/styles/index.css.d.ts +1 -0
  162. package/dist/styles/input.css +45 -11
  163. package/dist/styles/label.css +21 -4
  164. package/dist/styles/menu.css +55 -32
  165. package/dist/styles/menubar.css +80 -28
  166. package/dist/styles/message.css +22 -13
  167. package/dist/styles/meter.css +8 -8
  168. package/dist/styles/model-selector.css +33 -21
  169. package/dist/styles/navigation-menu.css +26 -24
  170. package/dist/styles/number-field.css +20 -18
  171. package/dist/styles/popover.css +38 -28
  172. package/dist/styles/preview-card.css +15 -13
  173. package/dist/styles/pricing-page.css +53 -53
  174. package/dist/styles/progress.css +7 -7
  175. package/dist/styles/prompt-input.css +73 -24
  176. package/dist/styles/queue.css +58 -32
  177. package/dist/styles/radio.css +26 -11
  178. package/dist/styles/reasoning.css +15 -11
  179. package/dist/styles/scroll-area.css +6 -6
  180. package/dist/styles/scrollbars.css +4 -4
  181. package/dist/styles/select.css +84 -25
  182. package/dist/styles/separator.css +1 -1
  183. package/dist/styles/shell.css +21 -20
  184. package/dist/styles/slider.css +35 -11
  185. package/dist/styles/sources.css +20 -20
  186. package/dist/styles/stepper.css +22 -22
  187. package/dist/styles/switch.css +29 -13
  188. package/dist/styles/tabs.css +23 -16
  189. package/dist/styles/task.css +27 -23
  190. package/dist/styles/terminal.css +16 -13
  191. package/dist/styles/test-results.css +79 -32
  192. package/dist/styles/toast.css +26 -25
  193. package/dist/styles/toggle-group.css +12 -12
  194. package/dist/styles/toggle.css +29 -11
  195. package/dist/styles/tool.css +54 -32
  196. package/dist/styles/toolbar.css +30 -28
  197. package/dist/styles/tooltip.css +10 -8
  198. package/dist/styles/web-preview.css +37 -21
  199. package/dist/utils/structured-code.d.ts +10 -0
  200. package/dist/utils/structured-code.js +81 -0
  201. package/package.json +16 -7
  202. package/dist/index.d.ts +0 -7236
  203. package/dist/index.js +0 -8945
@@ -0,0 +1,198 @@
1
+ import { r as ButtonProps } from "../Button-QCM8ZKgR.js";
2
+ import * as React from "react";
3
+
4
+ //#region src/components/ModelSelector.d.ts
5
+ interface ModelSelectorProps extends React.HTMLAttributes<HTMLDivElement> {
6
+ /** Controlled dialog open state. */
7
+ open?: boolean;
8
+ /** Initial dialog open state for uncontrolled usage. */
9
+ defaultOpen?: boolean;
10
+ /** Called when the dialog opens or closes. */
11
+ onOpenChange?: (open: boolean) => void;
12
+ /** Additional class names for layout only; do not restyle dialog internals from apps. */
13
+ className?: string;
14
+ /** Trigger, content, search input, grouped list, and items. */
15
+ children?: React.ReactNode;
16
+ }
17
+ /**
18
+ * A searchable model picker. Click the trigger to open a dialog containing a
19
+ * search input and a grouped list of available models.
20
+ *
21
+ * Built internally for AI model selection. Use it when users choose one model
22
+ * from a grouped provider list. Do not use it as a general command palette or
23
+ * multiselect; use Combobox or a dedicated component for that.
24
+ *
25
+ * Sigvelo changes: composes the design-system Dialog and Button, filters item
26
+ * children locally, and maps provider logos plus listbox styling to Sigvelo
27
+ * CSS tokens.
28
+ *
29
+ * The dialog owns focus while open, the list uses `role="listbox"`, and items
30
+ * use `role="option"` with `aria-selected`. Styling consumes surface, border,
31
+ * spacing, radius, focus, and typography tokens. Add provider/item affordances
32
+ * here when they need to be shared.
33
+ *
34
+ * @example
35
+ * ```tsx
36
+ * <ModelSelector>
37
+ * <ModelSelectorTrigger>
38
+ * <ModelSelectorLogo provider="anthropic" />
39
+ * <ModelSelectorName>Claude Opus 4.6</ModelSelectorName>
40
+ * </ModelSelectorTrigger>
41
+ * <ModelSelectorContent>
42
+ * <ModelSelectorDialog>
43
+ * <ModelSelectorInput placeholder="Search models…" />
44
+ * <ModelSelectorList>
45
+ * <ModelSelectorGroup label="Anthropic">
46
+ * <ModelSelectorItem value="claude-opus-4-6" onSelect={…}>
47
+ * <ModelSelectorLogo provider="anthropic" />
48
+ * <ModelSelectorName>Claude Opus 4.6</ModelSelectorName>
49
+ * </ModelSelectorItem>
50
+ * </ModelSelectorGroup>
51
+ * </ModelSelectorList>
52
+ * </ModelSelectorDialog>
53
+ * </ModelSelectorContent>
54
+ * </ModelSelector>
55
+ * ```
56
+ */
57
+ declare function ModelSelector({
58
+ open,
59
+ defaultOpen,
60
+ onOpenChange,
61
+ children,
62
+ className,
63
+ ref,
64
+ ...props
65
+ }: ModelSelectorProps & {
66
+ ref?: React.Ref<HTMLDivElement>;
67
+ }): React.JSX.Element;
68
+ interface ModelSelectorTriggerProps extends Omit<ButtonProps, "variant" | "color" | "className"> {
69
+ className?: string;
70
+ }
71
+ declare function ModelSelectorTrigger({
72
+ className,
73
+ children,
74
+ ...props
75
+ }: ModelSelectorTriggerProps): React.JSX.Element;
76
+ interface ModelSelectorContentProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
77
+ title?: React.ReactNode;
78
+ }
79
+ declare function ModelSelectorContent({
80
+ children,
81
+ title,
82
+ ...props
83
+ }: ModelSelectorContentProps): React.JSX.Element;
84
+ interface ModelSelectorDialogProps extends React.HTMLAttributes<HTMLDivElement> {}
85
+ declare function ModelSelectorDialog({
86
+ className,
87
+ children,
88
+ ref,
89
+ ...props
90
+ }: ModelSelectorDialogProps & {
91
+ ref?: React.Ref<HTMLDivElement>;
92
+ }): React.JSX.Element;
93
+ interface ModelSelectorInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "onChange" | "value"> {}
94
+ declare function ModelSelectorInput({
95
+ className,
96
+ placeholder,
97
+ ref,
98
+ ...props
99
+ }: ModelSelectorInputProps & {
100
+ ref?: React.Ref<HTMLInputElement>;
101
+ }): React.JSX.Element;
102
+ interface ModelSelectorListProps extends React.HTMLAttributes<HTMLDivElement> {}
103
+ declare function ModelSelectorList({
104
+ className,
105
+ children,
106
+ ref,
107
+ ...props
108
+ }: ModelSelectorListProps & {
109
+ ref?: React.Ref<HTMLDivElement>;
110
+ }): React.JSX.Element;
111
+ interface ModelSelectorGroupProps extends React.HTMLAttributes<HTMLDivElement> {
112
+ label: string;
113
+ }
114
+ declare function ModelSelectorGroup({
115
+ className,
116
+ label,
117
+ children,
118
+ ref,
119
+ ...props
120
+ }: ModelSelectorGroupProps & {
121
+ ref?: React.Ref<HTMLDivElement>;
122
+ }): React.JSX.Element | null;
123
+ interface ModelSelectorItemProps extends Omit<React.HTMLAttributes<HTMLButtonElement>, "onSelect"> {
124
+ value: string;
125
+ /** Extra keywords for search matching. */
126
+ keywords?: string;
127
+ /** Whether this item is the currently selected one. */
128
+ selected?: boolean;
129
+ /** Called when the item is chosen. */
130
+ onSelect?: (value: string) => void;
131
+ }
132
+ declare function ModelSelectorItem({
133
+ className,
134
+ value,
135
+ keywords,
136
+ selected,
137
+ onSelect,
138
+ children,
139
+ onClick,
140
+ ref,
141
+ ...props
142
+ }: ModelSelectorItemProps & {
143
+ ref?: React.Ref<HTMLButtonElement>;
144
+ }): React.JSX.Element;
145
+ interface ModelSelectorEmptyProps extends React.HTMLAttributes<HTMLDivElement> {}
146
+ declare function ModelSelectorEmpty({
147
+ className,
148
+ children,
149
+ ref,
150
+ ...props
151
+ }: ModelSelectorEmptyProps & {
152
+ ref?: React.Ref<HTMLDivElement>;
153
+ }): React.JSX.Element;
154
+ interface ModelSelectorSeparatorProps extends React.HTMLAttributes<HTMLHRElement> {}
155
+ declare function ModelSelectorSeparator({
156
+ className,
157
+ ref,
158
+ ...props
159
+ }: ModelSelectorSeparatorProps & {
160
+ ref?: React.Ref<HTMLHRElement>;
161
+ }): React.JSX.Element;
162
+ interface ModelSelectorLogoProps extends React.SVGAttributes<SVGSVGElement> {
163
+ provider: string;
164
+ }
165
+ declare function ModelSelectorLogo({
166
+ className,
167
+ provider,
168
+ ...props
169
+ }: ModelSelectorLogoProps): React.JSX.Element;
170
+ interface ModelSelectorLogoGroupProps extends React.HTMLAttributes<HTMLDivElement> {}
171
+ declare function ModelSelectorLogoGroup({
172
+ className,
173
+ children,
174
+ ref,
175
+ ...props
176
+ }: ModelSelectorLogoGroupProps & {
177
+ ref?: React.Ref<HTMLDivElement>;
178
+ }): React.JSX.Element;
179
+ interface ModelSelectorNameProps extends React.HTMLAttributes<HTMLSpanElement> {}
180
+ declare function ModelSelectorName({
181
+ className,
182
+ children,
183
+ ref,
184
+ ...props
185
+ }: ModelSelectorNameProps & {
186
+ ref?: React.Ref<HTMLSpanElement>;
187
+ }): React.JSX.Element;
188
+ interface ModelSelectorShortcutProps extends React.HTMLAttributes<HTMLSpanElement> {}
189
+ declare function ModelSelectorShortcut({
190
+ className,
191
+ children,
192
+ ref,
193
+ ...props
194
+ }: ModelSelectorShortcutProps & {
195
+ ref?: React.Ref<HTMLSpanElement>;
196
+ }): React.JSX.Element;
197
+ //#endregion
198
+ export { ModelSelector, ModelSelectorContent, ModelSelectorContentProps, ModelSelectorDialog, ModelSelectorDialogProps, ModelSelectorEmpty, ModelSelectorEmptyProps, ModelSelectorGroup, ModelSelectorGroupProps, ModelSelectorInput, ModelSelectorInputProps, ModelSelectorItem, ModelSelectorItemProps, ModelSelectorList, ModelSelectorListProps, ModelSelectorLogo, ModelSelectorLogoGroup, ModelSelectorLogoGroupProps, ModelSelectorLogoProps, ModelSelectorName, ModelSelectorNameProps, ModelSelectorProps, ModelSelectorSeparator, ModelSelectorSeparatorProps, ModelSelectorShortcut, ModelSelectorShortcutProps, ModelSelectorTrigger, ModelSelectorTriggerProps };
@@ -0,0 +1,306 @@
1
+ import { S as SearchIcon, s as ChevronDownIcon } from "../icons-BsWc8g4E.js";
2
+ import { t as cx } from "../class-names-9UtZwb0J.js";
3
+ import { Button } from "./Button.js";
4
+ import { Dialog, DialogBackdrop, DialogPopup, DialogPortal, DialogTitle, DialogTrigger } from "./Dialog.js";
5
+ import * as React from "react";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ //#region src/components/_internal/provider-logos.tsx
8
+ function Svg({ children, size = 16, ...props }) {
9
+ return /* @__PURE__ */ jsx("svg", {
10
+ width: size,
11
+ height: size,
12
+ viewBox: "0 0 24 24",
13
+ fill: "currentColor",
14
+ xmlns: "http://www.w3.org/2000/svg",
15
+ "aria-hidden": "true",
16
+ focusable: "false",
17
+ ...props,
18
+ children
19
+ });
20
+ }
21
+ const OpenAILogo = (props) => /* @__PURE__ */ jsx(Svg, {
22
+ ...props,
23
+ children: /* @__PURE__ */ jsx("path", { d: "M22.28 9.81a5.99 5.99 0 0 0-.52-4.91 6.05 6.05 0 0 0-6.52-2.9A6.05 6.05 0 0 0 10.58 0a6.05 6.05 0 0 0-5.77 4.18 5.99 5.99 0 0 0-4 2.9 6.05 6.05 0 0 0 .74 7.09 5.99 5.99 0 0 0 .52 4.91 6.05 6.05 0 0 0 6.52 2.9A5.99 5.99 0 0 0 13.25 24a6.05 6.05 0 0 0 5.77-4.19 5.99 5.99 0 0 0 4-2.9 6.05 6.05 0 0 0-.74-7.1ZM13.25 22.44a4.48 4.48 0 0 1-2.88-1.04l.14-.08 4.79-2.76a.78.78 0 0 0 .39-.68v-6.75l2.02 1.17c.02 0 .04.03.04.05v5.58a4.5 4.5 0 0 1-4.5 4.5ZM3.57 18.3a4.5 4.5 0 0 1-.54-3.03l.14.09 4.79 2.76a.78.78 0 0 0 .78 0l5.85-3.37v2.33c0 .02 0 .04-.03.06L9.72 19.94a4.5 4.5 0 0 1-6.15-1.64ZM2.31 7.88a4.48 4.48 0 0 1 2.35-1.97v5.69a.78.78 0 0 0 .39.67l5.83 3.36-2.02 1.17a.07.07 0 0 1-.07 0l-4.83-2.8A4.5 4.5 0 0 1 2.3 7.9Zm16.64 3.87L13.1 8.37l2.02-1.17c.02 0 .05-.01.07 0l4.83 2.8a4.5 4.5 0 0 1-.67 8.11V12.4a.77.77 0 0 0-.4-.66Zm2-3.03-.14-.09-4.78-2.78a.78.78 0 0 0-.79 0L9.4 9.25V6.92c0-.02 0-.04.02-.05l4.83-2.79a4.5 4.5 0 0 1 6.68 4.66Zm-12.68 4.17-2.02-1.17a.07.07 0 0 1-.04-.06V6.1a4.5 4.5 0 0 1 7.38-3.45l-.14.08L8.66 5.5a.78.78 0 0 0-.4.68v6.74Zm1.1-2.36 2.6-1.5 2.61 1.5v3l-2.6 1.5-2.6-1.5Z" })
24
+ });
25
+ const AnthropicLogo = (props) => /* @__PURE__ */ jsxs(Svg, {
26
+ ...props,
27
+ children: [/* @__PURE__ */ jsx("path", { d: "M13.83 4H17.3L24 20h-3.47l-1.37-3.52h-7L10.82 20H7.36ZM13.25 13.58h4.8l-2.4-6.15Z" }), /* @__PURE__ */ jsx("path", { d: "M0 4h3.47l6.7 16H6.7Z" })]
28
+ });
29
+ const GoogleLogo = (props) => /* @__PURE__ */ jsx(Svg, {
30
+ ...props,
31
+ children: /* @__PURE__ */ jsx("path", { d: "M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 2a8 8 0 0 1 5.34 2.05l-2.2 2.2A5 5 0 1 0 17 12.6h-5v-2.6h7.9A8 8 0 0 1 12 20 8 8 0 0 1 12 4Z" })
32
+ });
33
+ const MetaLogo = (props) => /* @__PURE__ */ jsx(Svg, {
34
+ ...props,
35
+ children: /* @__PURE__ */ jsx("path", { d: "M2 12.5c0-3.5 1.8-6.5 4.4-6.5 1.8 0 3.2 1.3 4.9 3.8 2.2 3.2 3.3 5 4.6 5 1 0 1.5-.8 1.5-2.3 0-2.1-1-4.3-2.7-4.3-1 0-2 .6-3.2 2l-1.3-1.7C11.5 6.8 12.9 6 14.5 6c3 0 5.5 3.3 5.5 7 0 3.3-1.6 5-3.8 5-2.3 0-3.6-1.6-6-5.3C8.9 10.4 8 9.2 6.8 9.2 5.4 9.2 4.3 10.6 4.3 13c0 1.8.5 3 1.3 3 .6 0 1.1-.3 1.8-1.1l1.3 1.7C7.6 17.6 6.3 18 5.3 18 3.3 18 2 16 2 12.5Z" })
36
+ });
37
+ const KimiLogo = (props) => /* @__PURE__ */ jsxs(Svg, {
38
+ ...props,
39
+ children: [/* @__PURE__ */ jsx("circle", {
40
+ cx: "12",
41
+ cy: "12",
42
+ r: "9.5",
43
+ fill: "none",
44
+ stroke: "currentColor",
45
+ strokeWidth: "1.5"
46
+ }), /* @__PURE__ */ jsx("path", {
47
+ d: "M8 7.5v9M8 12l4.5-4.5M8 12l5 4.5M14 7.5h2.5v9H14z",
48
+ fill: "none",
49
+ stroke: "currentColor",
50
+ strokeWidth: "1.5",
51
+ strokeLinecap: "round",
52
+ strokeLinejoin: "round"
53
+ })]
54
+ });
55
+ const FallbackLogo = (props) => /* @__PURE__ */ jsx(Svg, {
56
+ ...props,
57
+ children: /* @__PURE__ */ jsx("circle", {
58
+ cx: "12",
59
+ cy: "12",
60
+ r: "3"
61
+ })
62
+ });
63
+ /**
64
+ * Resolves a provider string to its logo component.
65
+ * Unknown providers get a neutral dot fallback.
66
+ */
67
+ function ProviderLogo({ provider, ...props }) {
68
+ switch (provider.toLowerCase()) {
69
+ case "openai": return /* @__PURE__ */ jsx(OpenAILogo, { ...props });
70
+ case "anthropic": return /* @__PURE__ */ jsx(AnthropicLogo, { ...props });
71
+ case "google": return /* @__PURE__ */ jsx(GoogleLogo, { ...props });
72
+ case "meta": return /* @__PURE__ */ jsx(MetaLogo, { ...props });
73
+ case "kimi": return /* @__PURE__ */ jsx(KimiLogo, { ...props });
74
+ default: return /* @__PURE__ */ jsx(FallbackLogo, { ...props });
75
+ }
76
+ }
77
+ //#endregion
78
+ //#region src/components/ModelSelector.tsx
79
+ const ModelSelectorContext = React.createContext(null);
80
+ function useModelSelectorContext() {
81
+ const ctx = React.useContext(ModelSelectorContext);
82
+ if (!ctx) throw new Error("ModelSelector subcomponents must be used inside <ModelSelector>.");
83
+ return ctx;
84
+ }
85
+ /**
86
+ * A searchable model picker. Click the trigger to open a dialog containing a
87
+ * search input and a grouped list of available models.
88
+ *
89
+ * Built internally for AI model selection. Use it when users choose one model
90
+ * from a grouped provider list. Do not use it as a general command palette or
91
+ * multiselect; use Combobox or a dedicated component for that.
92
+ *
93
+ * Sigvelo changes: composes the design-system Dialog and Button, filters item
94
+ * children locally, and maps provider logos plus listbox styling to Sigvelo
95
+ * CSS tokens.
96
+ *
97
+ * The dialog owns focus while open, the list uses `role="listbox"`, and items
98
+ * use `role="option"` with `aria-selected`. Styling consumes surface, border,
99
+ * spacing, radius, focus, and typography tokens. Add provider/item affordances
100
+ * here when they need to be shared.
101
+ *
102
+ * @example
103
+ * ```tsx
104
+ * <ModelSelector>
105
+ * <ModelSelectorTrigger>
106
+ * <ModelSelectorLogo provider="anthropic" />
107
+ * <ModelSelectorName>Claude Opus 4.6</ModelSelectorName>
108
+ * </ModelSelectorTrigger>
109
+ * <ModelSelectorContent>
110
+ * <ModelSelectorDialog>
111
+ * <ModelSelectorInput placeholder="Search models…" />
112
+ * <ModelSelectorList>
113
+ * <ModelSelectorGroup label="Anthropic">
114
+ * <ModelSelectorItem value="claude-opus-4-6" onSelect={…}>
115
+ * <ModelSelectorLogo provider="anthropic" />
116
+ * <ModelSelectorName>Claude Opus 4.6</ModelSelectorName>
117
+ * </ModelSelectorItem>
118
+ * </ModelSelectorGroup>
119
+ * </ModelSelectorList>
120
+ * </ModelSelectorDialog>
121
+ * </ModelSelectorContent>
122
+ * </ModelSelector>
123
+ * ```
124
+ */
125
+ function ModelSelector({ open, defaultOpen = false, onOpenChange, children, className, ref, ...props }) {
126
+ const [internalOpen, setInternalOpen] = React.useState(defaultOpen);
127
+ const [query, setQuery] = React.useState("");
128
+ const isControlled = open !== void 0;
129
+ const currentOpen = isControlled ? open : internalOpen;
130
+ const handleOpenChange = React.useCallback((next) => {
131
+ if (!isControlled) setInternalOpen(next);
132
+ onOpenChange?.(next);
133
+ if (!next) setQuery("");
134
+ }, [isControlled, onOpenChange]);
135
+ const onSelectItem = React.useCallback(() => {
136
+ handleOpenChange(false);
137
+ }, [handleOpenChange]);
138
+ const ctxValue = React.useMemo(() => ({
139
+ query,
140
+ setQuery,
141
+ onSelectItem
142
+ }), [query, onSelectItem]);
143
+ return /* @__PURE__ */ jsx(ModelSelectorContext.Provider, {
144
+ value: ctxValue,
145
+ children: /* @__PURE__ */ jsx("div", {
146
+ ref,
147
+ className: cx("model-selector", className),
148
+ ...props,
149
+ children: /* @__PURE__ */ jsx(Dialog, {
150
+ open: currentOpen,
151
+ onOpenChange: handleOpenChange,
152
+ children
153
+ })
154
+ })
155
+ });
156
+ }
157
+ function ModelSelectorTrigger({ className, children, ...props }) {
158
+ return /* @__PURE__ */ jsx(DialogTrigger, { render: /* @__PURE__ */ jsxs(Button, {
159
+ variant: "outline",
160
+ color: "neutral",
161
+ className: cx("model-selector__trigger", className),
162
+ ...props,
163
+ children: [children, /* @__PURE__ */ jsx("span", {
164
+ className: "model-selector__trigger-chevron",
165
+ "aria-hidden": "true",
166
+ children: /* @__PURE__ */ jsx(ChevronDownIcon, {})
167
+ })]
168
+ }) });
169
+ }
170
+ function ModelSelectorContent({ children, title = "Model Selector", ...props }) {
171
+ return /* @__PURE__ */ jsxs(DialogPortal, { children: [/* @__PURE__ */ jsx(DialogBackdrop, {}), /* @__PURE__ */ jsxs(DialogPopup, {
172
+ ...props,
173
+ children: [/* @__PURE__ */ jsx(DialogTitle, {
174
+ className: "model-selector__title",
175
+ children: title
176
+ }), children]
177
+ })] });
178
+ }
179
+ function ModelSelectorDialog({ className, children, ref, ...props }) {
180
+ return /* @__PURE__ */ jsx("div", {
181
+ ref,
182
+ className: cx("model-selector__dialog", className),
183
+ ...props,
184
+ children
185
+ });
186
+ }
187
+ function ModelSelectorInput({ className, placeholder = "Search models…", ref, ...props }) {
188
+ const { query, setQuery } = useModelSelectorContext();
189
+ return /* @__PURE__ */ jsxs("div", {
190
+ className: "model-selector__search",
191
+ children: [/* @__PURE__ */ jsx("span", {
192
+ className: "model-selector__search-icon",
193
+ "aria-hidden": "true",
194
+ children: /* @__PURE__ */ jsx(SearchIcon, {})
195
+ }), /* @__PURE__ */ jsx("input", {
196
+ ref,
197
+ type: "search",
198
+ value: query,
199
+ onChange: (e) => setQuery(e.target.value),
200
+ placeholder,
201
+ className: cx("model-selector__input", className),
202
+ autoFocus: true,
203
+ ...props
204
+ })]
205
+ });
206
+ }
207
+ function ModelSelectorList({ className, children, ref, ...props }) {
208
+ return /* @__PURE__ */ jsx("div", {
209
+ ref,
210
+ role: "listbox",
211
+ className: cx("model-selector__list", className),
212
+ ...props,
213
+ children
214
+ });
215
+ }
216
+ function ModelSelectorGroup({ className, label, children, ref, ...props }) {
217
+ const { query } = useModelSelectorContext();
218
+ const childArray = React.Children.toArray(children).filter((child) => React.isValidElement(child));
219
+ const q = query.trim().toLowerCase();
220
+ const filtered = q ? childArray.filter((child) => {
221
+ const value = String(child.props.value ?? "").toLowerCase();
222
+ const keywords = String(child.props.keywords ?? "").toLowerCase();
223
+ return value.includes(q) || keywords.includes(q);
224
+ }) : childArray;
225
+ if (filtered.length === 0) return null;
226
+ return /* @__PURE__ */ jsxs("div", {
227
+ ref,
228
+ role: "group",
229
+ "aria-label": label,
230
+ className: cx("model-selector__group", className),
231
+ ...props,
232
+ children: [/* @__PURE__ */ jsx("div", {
233
+ className: "model-selector__group-label",
234
+ children: label
235
+ }), filtered]
236
+ });
237
+ }
238
+ function ModelSelectorItem({ className, value, keywords, selected, onSelect, children, onClick, ref, ...props }) {
239
+ const { onSelectItem } = useModelSelectorContext();
240
+ const handleClick = (e) => {
241
+ onSelect?.(value);
242
+ onSelectItem();
243
+ onClick?.(e);
244
+ };
245
+ return /* @__PURE__ */ jsx("button", {
246
+ ref,
247
+ type: "button",
248
+ role: "option",
249
+ "aria-selected": selected,
250
+ "data-selected": selected ? "" : void 0,
251
+ className: cx("model-selector__item", className),
252
+ onClick: handleClick,
253
+ ...props,
254
+ children
255
+ });
256
+ }
257
+ function ModelSelectorEmpty({ className, children = "No models found", ref, ...props }) {
258
+ return /* @__PURE__ */ jsx("div", {
259
+ ref,
260
+ className: cx("model-selector__empty", className),
261
+ ...props,
262
+ children
263
+ });
264
+ }
265
+ function ModelSelectorSeparator({ className, ref, ...props }) {
266
+ return /* @__PURE__ */ jsx("hr", {
267
+ ref,
268
+ className: cx("model-selector__separator", className),
269
+ ...props
270
+ });
271
+ }
272
+ function ModelSelectorLogo({ className, provider, ...props }) {
273
+ return /* @__PURE__ */ jsx("span", {
274
+ className: cx("model-selector__logo", className),
275
+ children: /* @__PURE__ */ jsx(ProviderLogo, {
276
+ provider,
277
+ ...props
278
+ })
279
+ });
280
+ }
281
+ function ModelSelectorLogoGroup({ className, children, ref, ...props }) {
282
+ return /* @__PURE__ */ jsx("div", {
283
+ ref,
284
+ className: cx("model-selector__logo-group", className),
285
+ ...props,
286
+ children
287
+ });
288
+ }
289
+ function ModelSelectorName({ className, children, ref, ...props }) {
290
+ return /* @__PURE__ */ jsx("span", {
291
+ ref,
292
+ className: cx("model-selector__name", className),
293
+ ...props,
294
+ children
295
+ });
296
+ }
297
+ function ModelSelectorShortcut({ className, children, ref, ...props }) {
298
+ return /* @__PURE__ */ jsx("kbd", {
299
+ ref,
300
+ className: cx("model-selector__shortcut", className),
301
+ ...props,
302
+ children
303
+ });
304
+ }
305
+ //#endregion
306
+ export { ModelSelector, ModelSelectorContent, ModelSelectorDialog, ModelSelectorEmpty, ModelSelectorGroup, ModelSelectorInput, ModelSelectorItem, ModelSelectorList, ModelSelectorLogo, ModelSelectorLogoGroup, ModelSelectorName, ModelSelectorSeparator, ModelSelectorShortcut, ModelSelectorTrigger };
@@ -0,0 +1,33 @@
1
+ //#region src/components/NaniteScene.d.ts
2
+ type NaniteSceneVariant = "idle" | "helmet" | "working" | "celebrating" | "concerned";
3
+ type NaniteSceneProps = {
4
+ /** Visual state to render. */readonly variant: NaniteSceneVariant; /** Render three compact Nanites or one status Nanite with optional screen art. */
5
+ readonly mode?: "trio" | "solo"; /** Additional class names for layout only. */
6
+ readonly className?: string; /** Accessible title when the illustration communicates state. */
7
+ readonly title?: string;
8
+ };
9
+ /**
10
+ * Decorative Nanites illustration used in setup, status, and empty states.
11
+ * Pass a title when the illustration communicates state; otherwise it remains
12
+ * hidden from assistive technology.
13
+ *
14
+ * Built internally for Sigvelo onboarding and agent-connection surfaces. Use
15
+ * it as supporting status art, not as a control or primary content.
16
+ *
17
+ * Styling consumes Nanite scene CSS animation hooks plus Sigvelo layout context.
18
+ * Respect reduced-motion CSS when adding animation. Add variants here when a
19
+ * state is reused across apps; keep one-off art local to the app.
20
+ *
21
+ * @example
22
+ * ```tsx
23
+ * <NaniteScene variant="working" mode="solo" title="Agent is checking GitHub" />
24
+ * ```
25
+ */
26
+ declare function NaniteScene({
27
+ variant,
28
+ mode,
29
+ className,
30
+ title
31
+ }: NaniteSceneProps): import("react").JSX.Element;
32
+ //#endregion
33
+ export { NaniteScene, NaniteSceneProps, NaniteSceneVariant };