@agentaily/design-system 0.1.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 (294) hide show
  1. package/DESIGN.md +112 -0
  2. package/README.md +81 -0
  3. package/dist/assets/logo/agentaily-mark-black.svg +5 -0
  4. package/dist/assets/logo/agentaily-mark-white.svg +5 -0
  5. package/dist/components/ai/Attachments.d.ts +23 -0
  6. package/dist/components/ai/Attachments.js +96 -0
  7. package/dist/components/ai/Attachments.js.map +1 -0
  8. package/dist/components/ai/Checkpoint.d.ts +3 -0
  9. package/dist/components/ai/Checkpoint.js +38 -0
  10. package/dist/components/ai/Checkpoint.js.map +1 -0
  11. package/dist/components/ai/Confirmation.d.ts +3 -0
  12. package/dist/components/ai/Confirmation.js +54 -0
  13. package/dist/components/ai/Confirmation.js.map +1 -0
  14. package/dist/components/ai/Context.d.ts +3 -0
  15. package/dist/components/ai/Context.js +63 -0
  16. package/dist/components/ai/Context.js.map +1 -0
  17. package/dist/components/ai/Conversation.d.ts +3 -0
  18. package/dist/components/ai/Conversation.js +53 -0
  19. package/dist/components/ai/Conversation.js.map +1 -0
  20. package/dist/components/ai/ModelSelector.d.ts +19 -0
  21. package/dist/components/ai/ModelSelector.js +92 -0
  22. package/dist/components/ai/ModelSelector.js.map +1 -0
  23. package/dist/components/ai/Plan.d.ts +4 -0
  24. package/dist/components/ai/Plan.js +49 -0
  25. package/dist/components/ai/Plan.js.map +1 -0
  26. package/dist/components/ai/Queue.d.ts +4 -0
  27. package/dist/components/ai/Queue.js +45 -0
  28. package/dist/components/ai/Queue.js.map +1 -0
  29. package/dist/components/ai/Reasoning.d.ts +17 -0
  30. package/dist/components/ai/Reasoning.js +60 -0
  31. package/dist/components/ai/Reasoning.js.map +1 -0
  32. package/dist/components/ai/Shimmer.d.ts +10 -0
  33. package/dist/components/ai/Shimmer.js +28 -0
  34. package/dist/components/ai/Shimmer.js.map +1 -0
  35. package/dist/components/ai/Sources.d.ts +23 -0
  36. package/dist/components/ai/Sources.js +65 -0
  37. package/dist/components/ai/Sources.js.map +1 -0
  38. package/dist/components/ai/Suggestion.d.ts +19 -0
  39. package/dist/components/ai/Suggestion.js +40 -0
  40. package/dist/components/ai/Suggestion.js.map +1 -0
  41. package/dist/components/ai/Task.d.ts +4 -0
  42. package/dist/components/ai/Task.js +48 -0
  43. package/dist/components/ai/Task.js.map +1 -0
  44. package/dist/components/ai/ToolCall.d.ts +16 -0
  45. package/dist/components/ai/ToolCall.js +70 -0
  46. package/dist/components/ai/ToolCall.js.map +1 -0
  47. package/dist/components/buttons/Button.d.ts +17 -0
  48. package/dist/components/buttons/Button.js +60 -0
  49. package/dist/components/buttons/Button.js.map +1 -0
  50. package/dist/components/buttons/ButtonGroup.d.ts +3 -0
  51. package/dist/components/buttons/ButtonGroup.js +27 -0
  52. package/dist/components/buttons/ButtonGroup.js.map +1 -0
  53. package/dist/components/buttons/IconButton.d.ts +16 -0
  54. package/dist/components/buttons/IconButton.js +49 -0
  55. package/dist/components/buttons/IconButton.js.map +1 -0
  56. package/dist/components/chat/CodeBlock.d.ts +9 -0
  57. package/dist/components/chat/CodeBlock.js +62 -0
  58. package/dist/components/chat/CodeBlock.js.map +1 -0
  59. package/dist/components/chat/Composer.d.ts +17 -0
  60. package/dist/components/chat/Composer.js +123 -0
  61. package/dist/components/chat/Composer.js.map +1 -0
  62. package/dist/components/chat/Message.d.ts +16 -0
  63. package/dist/components/chat/Message.js +63 -0
  64. package/dist/components/chat/Message.js.map +1 -0
  65. package/dist/components/code/Agent.d.ts +3 -0
  66. package/dist/components/code/Agent.js +44 -0
  67. package/dist/components/code/Agent.js.map +1 -0
  68. package/dist/components/code/Artifact.d.ts +3 -0
  69. package/dist/components/code/Artifact.js +50 -0
  70. package/dist/components/code/Artifact.js.map +1 -0
  71. package/dist/components/code/Commit.d.ts +3 -0
  72. package/dist/components/code/Commit.js +55 -0
  73. package/dist/components/code/Commit.js.map +1 -0
  74. package/dist/components/code/EnvironmentVariables.d.ts +4 -0
  75. package/dist/components/code/EnvironmentVariables.js +49 -0
  76. package/dist/components/code/EnvironmentVariables.js.map +1 -0
  77. package/dist/components/code/FileTree.d.ts +4 -0
  78. package/dist/components/code/FileTree.js +59 -0
  79. package/dist/components/code/FileTree.js.map +1 -0
  80. package/dist/components/code/JSXPreview.d.ts +3 -0
  81. package/dist/components/code/JSXPreview.js +35 -0
  82. package/dist/components/code/JSXPreview.js.map +1 -0
  83. package/dist/components/code/PackageInfo.d.ts +3 -0
  84. package/dist/components/code/PackageInfo.js +47 -0
  85. package/dist/components/code/PackageInfo.js.map +1 -0
  86. package/dist/components/code/Sandbox.d.ts +3 -0
  87. package/dist/components/code/Sandbox.js +43 -0
  88. package/dist/components/code/Sandbox.js.map +1 -0
  89. package/dist/components/code/SchemaDisplay.d.ts +4 -0
  90. package/dist/components/code/SchemaDisplay.js +43 -0
  91. package/dist/components/code/SchemaDisplay.js.map +1 -0
  92. package/dist/components/code/Snippet.d.ts +3 -0
  93. package/dist/components/code/Snippet.js +36 -0
  94. package/dist/components/code/Snippet.js.map +1 -0
  95. package/dist/components/code/StackTrace.d.ts +4 -0
  96. package/dist/components/code/StackTrace.js +46 -0
  97. package/dist/components/code/StackTrace.js.map +1 -0
  98. package/dist/components/code/Terminal.d.ts +4 -0
  99. package/dist/components/code/Terminal.js +73 -0
  100. package/dist/components/code/Terminal.js.map +1 -0
  101. package/dist/components/code/TestResults.d.ts +4 -0
  102. package/dist/components/code/TestResults.js +61 -0
  103. package/dist/components/code/TestResults.js.map +1 -0
  104. package/dist/components/code/WebPreview.d.ts +3 -0
  105. package/dist/components/code/WebPreview.js +48 -0
  106. package/dist/components/code/WebPreview.js.map +1 -0
  107. package/dist/components/display/Accordion.d.ts +12 -0
  108. package/dist/components/display/Accordion.js +60 -0
  109. package/dist/components/display/Accordion.js.map +1 -0
  110. package/dist/components/display/Avatar.d.ts +14 -0
  111. package/dist/components/display/Avatar.js +41 -0
  112. package/dist/components/display/Avatar.js.map +1 -0
  113. package/dist/components/display/Badge.d.ts +11 -0
  114. package/dist/components/display/Badge.js +40 -0
  115. package/dist/components/display/Badge.js.map +1 -0
  116. package/dist/components/display/Breadcrumb.d.ts +11 -0
  117. package/dist/components/display/Breadcrumb.js +32 -0
  118. package/dist/components/display/Breadcrumb.js.map +1 -0
  119. package/dist/components/display/Card.d.ts +14 -0
  120. package/dist/components/display/Card.js +61 -0
  121. package/dist/components/display/Card.js.map +1 -0
  122. package/dist/components/display/Carousel.d.ts +3 -0
  123. package/dist/components/display/Carousel.js +40 -0
  124. package/dist/components/display/Carousel.js.map +1 -0
  125. package/dist/components/display/Chart.d.ts +7 -0
  126. package/dist/components/display/Chart.js +68 -0
  127. package/dist/components/display/Chart.js.map +1 -0
  128. package/dist/components/display/Collapsible.d.ts +3 -0
  129. package/dist/components/display/Collapsible.js +36 -0
  130. package/dist/components/display/Collapsible.js.map +1 -0
  131. package/dist/components/display/DataTable.d.ts +4 -0
  132. package/dist/components/display/DataTable.js +72 -0
  133. package/dist/components/display/DataTable.js.map +1 -0
  134. package/dist/components/display/Empty.d.ts +14 -0
  135. package/dist/components/display/Empty.js +36 -0
  136. package/dist/components/display/Empty.js.map +1 -0
  137. package/dist/components/display/Item.d.ts +3 -0
  138. package/dist/components/display/Item.js +36 -0
  139. package/dist/components/display/Item.js.map +1 -0
  140. package/dist/components/display/Kbd.d.ts +7 -0
  141. package/dist/components/display/Kbd.js +27 -0
  142. package/dist/components/display/Kbd.js.map +1 -0
  143. package/dist/components/display/Pagination.d.ts +11 -0
  144. package/dist/components/display/Pagination.js +55 -0
  145. package/dist/components/display/Pagination.js.map +1 -0
  146. package/dist/components/display/Progress.d.ts +14 -0
  147. package/dist/components/display/Progress.js +43 -0
  148. package/dist/components/display/Progress.js.map +1 -0
  149. package/dist/components/display/Separator.d.ts +10 -0
  150. package/dist/components/display/Separator.js +33 -0
  151. package/dist/components/display/Separator.js.map +1 -0
  152. package/dist/components/display/Skeleton.d.ts +12 -0
  153. package/dist/components/display/Skeleton.js +43 -0
  154. package/dist/components/display/Skeleton.js.map +1 -0
  155. package/dist/components/display/Table.d.ts +20 -0
  156. package/dist/components/display/Table.js +42 -0
  157. package/dist/components/display/Table.js.map +1 -0
  158. package/dist/components/display/Tabs.d.ts +11 -0
  159. package/dist/components/display/Tabs.js +47 -0
  160. package/dist/components/display/Tabs.js.map +1 -0
  161. package/dist/components/display/Typography.d.ts +5 -0
  162. package/dist/components/display/Typography.js +45 -0
  163. package/dist/components/display/Typography.js.map +1 -0
  164. package/dist/components/feedback/Alert.d.ts +12 -0
  165. package/dist/components/feedback/Alert.js +41 -0
  166. package/dist/components/feedback/Alert.js.map +1 -0
  167. package/dist/components/feedback/Dialog.d.ts +17 -0
  168. package/dist/components/feedback/Dialog.js +90 -0
  169. package/dist/components/feedback/Dialog.js.map +1 -0
  170. package/dist/components/feedback/Spinner.d.ts +8 -0
  171. package/dist/components/feedback/Spinner.js +39 -0
  172. package/dist/components/feedback/Spinner.js.map +1 -0
  173. package/dist/components/feedback/Toast.d.ts +12 -0
  174. package/dist/components/feedback/Toast.js +50 -0
  175. package/dist/components/feedback/Toast.js.map +1 -0
  176. package/dist/components/feedback/Tooltip.d.ts +11 -0
  177. package/dist/components/feedback/Tooltip.js +34 -0
  178. package/dist/components/feedback/Tooltip.js.map +1 -0
  179. package/dist/components/inputs/Calendar.d.ts +3 -0
  180. package/dist/components/inputs/Calendar.js +81 -0
  181. package/dist/components/inputs/Calendar.js.map +1 -0
  182. package/dist/components/inputs/Checkbox.d.ts +10 -0
  183. package/dist/components/inputs/Checkbox.js +42 -0
  184. package/dist/components/inputs/Checkbox.js.map +1 -0
  185. package/dist/components/inputs/Combobox.d.ts +3 -0
  186. package/dist/components/inputs/Combobox.js +94 -0
  187. package/dist/components/inputs/Combobox.js.map +1 -0
  188. package/dist/components/inputs/DatePicker.d.ts +3 -0
  189. package/dist/components/inputs/DatePicker.js +56 -0
  190. package/dist/components/inputs/DatePicker.js.map +1 -0
  191. package/dist/components/inputs/Field.d.ts +5 -0
  192. package/dist/components/inputs/Field.js +44 -0
  193. package/dist/components/inputs/Field.js.map +1 -0
  194. package/dist/components/inputs/Input.d.ts +19 -0
  195. package/dist/components/inputs/Input.js +72 -0
  196. package/dist/components/inputs/Input.js.map +1 -0
  197. package/dist/components/inputs/InputGroup.d.ts +3 -0
  198. package/dist/components/inputs/InputGroup.js +32 -0
  199. package/dist/components/inputs/InputGroup.js.map +1 -0
  200. package/dist/components/inputs/InputOTP.d.ts +3 -0
  201. package/dist/components/inputs/InputOTP.js +49 -0
  202. package/dist/components/inputs/InputOTP.js.map +1 -0
  203. package/dist/components/inputs/Label.d.ts +13 -0
  204. package/dist/components/inputs/Label.js +33 -0
  205. package/dist/components/inputs/Label.js.map +1 -0
  206. package/dist/components/inputs/RadioGroup.d.ts +15 -0
  207. package/dist/components/inputs/RadioGroup.js +58 -0
  208. package/dist/components/inputs/RadioGroup.js.map +1 -0
  209. package/dist/components/inputs/Select.d.ts +12 -0
  210. package/dist/components/inputs/Select.js +49 -0
  211. package/dist/components/inputs/Select.js.map +1 -0
  212. package/dist/components/inputs/Slider.d.ts +16 -0
  213. package/dist/components/inputs/Slider.js +62 -0
  214. package/dist/components/inputs/Slider.js.map +1 -0
  215. package/dist/components/inputs/Switch.d.ts +11 -0
  216. package/dist/components/inputs/Switch.js +39 -0
  217. package/dist/components/inputs/Switch.js.map +1 -0
  218. package/dist/components/inputs/Textarea.d.ts +13 -0
  219. package/dist/components/inputs/Textarea.js +41 -0
  220. package/dist/components/inputs/Textarea.js.map +1 -0
  221. package/dist/components/inputs/Toggle.d.ts +19 -0
  222. package/dist/components/inputs/Toggle.js +57 -0
  223. package/dist/components/inputs/Toggle.js.map +1 -0
  224. package/dist/components/layout/AspectRatio.d.ts +3 -0
  225. package/dist/components/layout/AspectRatio.js +20 -0
  226. package/dist/components/layout/AspectRatio.js.map +1 -0
  227. package/dist/components/layout/Resizable.d.ts +3 -0
  228. package/dist/components/layout/Resizable.js +58 -0
  229. package/dist/components/layout/Resizable.js.map +1 -0
  230. package/dist/components/layout/ScrollArea.d.ts +3 -0
  231. package/dist/components/layout/ScrollArea.js +24 -0
  232. package/dist/components/layout/ScrollArea.js.map +1 -0
  233. package/dist/components/layout/Sidebar.d.ts +5 -0
  234. package/dist/components/layout/Sidebar.js +55 -0
  235. package/dist/components/layout/Sidebar.js.map +1 -0
  236. package/dist/components/overlay/AlertDialog.d.ts +3 -0
  237. package/dist/components/overlay/AlertDialog.js +51 -0
  238. package/dist/components/overlay/AlertDialog.js.map +1 -0
  239. package/dist/components/overlay/Command.d.ts +22 -0
  240. package/dist/components/overlay/Command.js +123 -0
  241. package/dist/components/overlay/Command.js.map +1 -0
  242. package/dist/components/overlay/ContextMenu.d.ts +4 -0
  243. package/dist/components/overlay/ContextMenu.js +66 -0
  244. package/dist/components/overlay/ContextMenu.js.map +1 -0
  245. package/dist/components/overlay/DropdownMenu.d.ts +20 -0
  246. package/dist/components/overlay/DropdownMenu.js +86 -0
  247. package/dist/components/overlay/DropdownMenu.js.map +1 -0
  248. package/dist/components/overlay/HoverCard.d.ts +3 -0
  249. package/dist/components/overlay/HoverCard.js +53 -0
  250. package/dist/components/overlay/HoverCard.js.map +1 -0
  251. package/dist/components/overlay/Menubar.d.ts +4 -0
  252. package/dist/components/overlay/Menubar.js +55 -0
  253. package/dist/components/overlay/Menubar.js.map +1 -0
  254. package/dist/components/overlay/NavigationMenu.d.ts +5 -0
  255. package/dist/components/overlay/NavigationMenu.js +42 -0
  256. package/dist/components/overlay/NavigationMenu.js.map +1 -0
  257. package/dist/components/overlay/Popover.d.ts +16 -0
  258. package/dist/components/overlay/Popover.js +53 -0
  259. package/dist/components/overlay/Popover.js.map +1 -0
  260. package/dist/components/overlay/Sheet.d.ts +13 -0
  261. package/dist/components/overlay/Sheet.js +49 -0
  262. package/dist/components/overlay/Sheet.js.map +1 -0
  263. package/dist/components/utilities/Image.d.ts +3 -0
  264. package/dist/components/utilities/Image.js +32 -0
  265. package/dist/components/utilities/Image.js.map +1 -0
  266. package/dist/components/utilities/OpenInChat.d.ts +3 -0
  267. package/dist/components/utilities/OpenInChat.js +26 -0
  268. package/dist/components/utilities/OpenInChat.js.map +1 -0
  269. package/dist/components/voice/AudioPlayer.d.ts +3 -0
  270. package/dist/components/voice/AudioPlayer.js +42 -0
  271. package/dist/components/voice/AudioPlayer.js.map +1 -0
  272. package/dist/components/voice/MicSelector.d.ts +3 -0
  273. package/dist/components/voice/MicSelector.js +36 -0
  274. package/dist/components/voice/MicSelector.js.map +1 -0
  275. package/dist/components/voice/Persona.d.ts +3 -0
  276. package/dist/components/voice/Persona.js +41 -0
  277. package/dist/components/voice/Persona.js.map +1 -0
  278. package/dist/components/voice/SpeechInput.d.ts +3 -0
  279. package/dist/components/voice/SpeechInput.js +42 -0
  280. package/dist/components/voice/SpeechInput.js.map +1 -0
  281. package/dist/components/voice/Transcription.d.ts +4 -0
  282. package/dist/components/voice/Transcription.js +48 -0
  283. package/dist/components/voice/Transcription.js.map +1 -0
  284. package/dist/components/voice/VoiceSelector.d.ts +3 -0
  285. package/dist/components/voice/VoiceSelector.js +58 -0
  286. package/dist/components/voice/VoiceSelector.js.map +1 -0
  287. package/dist/components/workflow/Flow.d.ts +20 -0
  288. package/dist/components/workflow/Flow.js +96 -0
  289. package/dist/components/workflow/Flow.js.map +1 -0
  290. package/dist/index.d.ts +120 -0
  291. package/dist/index.js +208 -0
  292. package/dist/index.js.map +1 -0
  293. package/dist/styles.css +217 -0
  294. package/package.json +77 -0
@@ -0,0 +1,40 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import "react";
3
+ const AX_SUGGESTION_CSS = `
4
+ .ax-suggestions { display: flex; gap: 8px; flex-wrap: wrap; }
5
+ .ax-suggestions--scroll { flex-wrap: nowrap; overflow-x: auto; padding-bottom: 4px; }
6
+ .ax-suggestion {
7
+ display: inline-flex; align-items: center; gap: 7px; cursor: pointer; white-space: nowrap;
8
+ appearance: none; background: none; color: var(--text-muted);
9
+ border: 1px solid var(--border-default); border-radius: var(--radius-2);
10
+ padding: 7px 12px; font-family: var(--font-body); font-size: var(--text-sm);
11
+ transition: border-color var(--dur-1) var(--ease-out), color var(--dur-1) var(--ease-out), background var(--dur-1) var(--ease-out);
12
+ }
13
+ .ax-suggestion:hover { border-color: var(--border-strong); color: var(--text-body); background: var(--surface-raised); }
14
+ .ax-suggestion:focus-visible { outline: none; box-shadow: var(--ring); }
15
+ .ax-suggestion__icon { color: var(--text-faint); display: inline-flex; }
16
+ .ax-suggestion__icon svg { width: 13px; height: 13px; }
17
+ `;
18
+ if (typeof document !== "undefined" && !document.getElementById("ax-suggestion-css")) {
19
+ const s = document.createElement("style");
20
+ s.id = "ax-suggestion-css";
21
+ s.textContent = AX_SUGGESTION_CSS;
22
+ document.head.appendChild(s);
23
+ }
24
+ function Suggestion({ children, icon, onClick, className = "", ...rest }) {
25
+ return /* @__PURE__ */ jsxs("button", { type: "button", className: ["ax-suggestion", className].filter(Boolean).join(" "), onClick, ...rest, children: [
26
+ icon ? /* @__PURE__ */ jsx("span", { className: "ax-suggestion__icon", children: icon }) : null,
27
+ children
28
+ ] });
29
+ }
30
+ function Suggestions({ items = [], onSelect, scroll = false, className = "", ...rest }) {
31
+ return /* @__PURE__ */ jsx("div", { className: ["ax-suggestions", scroll ? "ax-suggestions--scroll" : "", className].filter(Boolean).join(" "), ...rest, children: items.map((item, i) => {
32
+ const it = typeof item === "string" ? { label: item } : item;
33
+ return /* @__PURE__ */ jsx(Suggestion, { icon: it.icon, onClick: () => onSelect && onSelect(it.value ?? it.label), children: it.label }, i);
34
+ }) });
35
+ }
36
+ export {
37
+ Suggestion,
38
+ Suggestions
39
+ };
40
+ //# sourceMappingURL=Suggestion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Suggestion.js","sources":["../../../src/components/ai/Suggestion.jsx"],"sourcesContent":["import React from \"react\";\n\nconst AX_SUGGESTION_CSS = `\n.ax-suggestions { display: flex; gap: 8px; flex-wrap: wrap; }\n.ax-suggestions--scroll { flex-wrap: nowrap; overflow-x: auto; padding-bottom: 4px; }\n.ax-suggestion {\n display: inline-flex; align-items: center; gap: 7px; cursor: pointer; white-space: nowrap;\n appearance: none; background: none; color: var(--text-muted);\n border: 1px solid var(--border-default); border-radius: var(--radius-2);\n padding: 7px 12px; font-family: var(--font-body); font-size: var(--text-sm);\n transition: border-color var(--dur-1) var(--ease-out), color var(--dur-1) var(--ease-out), background var(--dur-1) var(--ease-out);\n}\n.ax-suggestion:hover { border-color: var(--border-strong); color: var(--text-body); background: var(--surface-raised); }\n.ax-suggestion:focus-visible { outline: none; box-shadow: var(--ring); }\n.ax-suggestion__icon { color: var(--text-faint); display: inline-flex; }\n.ax-suggestion__icon svg { width: 13px; height: 13px; }\n`;\n\nif (typeof document !== \"undefined\" && !document.getElementById(\"ax-suggestion-css\")) {\n const s = document.createElement(\"style\");\n s.id = \"ax-suggestion-css\";\n s.textContent = AX_SUGGESTION_CSS;\n document.head.appendChild(s);\n}\n\nexport function Suggestion({ children, icon, onClick, className = \"\", ...rest }) {\n return (\n <button type=\"button\" className={[\"ax-suggestion\", className].filter(Boolean).join(\" \")} onClick={onClick} {...rest}>\n {icon ? <span className=\"ax-suggestion__icon\">{icon}</span> : null}\n {children}\n </button>\n );\n}\n\nexport function Suggestions({ items = [], onSelect, scroll = false, className = \"\", ...rest }) {\n return (\n <div className={[\"ax-suggestions\", scroll ? \"ax-suggestions--scroll\" : \"\", className].filter(Boolean).join(\" \")} {...rest}>\n {items.map((item, i) => {\n const it = typeof item === \"string\" ? { label: item } : item;\n return <Suggestion key={i} icon={it.icon} onClick={() => onSelect && onSelect(it.value ?? it.label)}>{it.label}</Suggestion>;\n })}\n </div>\n );\n}\n"],"names":[],"mappings":";;AAEA,MAAM,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgB1B,IAAI,OAAO,aAAa,eAAe,CAAC,SAAS,eAAe,mBAAmB,GAAG;AACpF,QAAM,IAAI,SAAS,cAAc,OAAO;AACxC,IAAE,KAAK;AACP,IAAE,cAAc;AAChB,WAAS,KAAK,YAAY,CAAC;AAC7B;AAEO,SAAS,WAAW,EAAE,UAAU,MAAM,SAAS,YAAY,IAAI,GAAG,QAAQ;AAC/E,8BACG,UAAA,EAAO,MAAK,UAAS,WAAW,CAAC,iBAAiB,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAG,SAAmB,GAAG,MAC5G,UAAA;AAAA,IAAA,OAAO,oBAAC,QAAA,EAAK,WAAU,uBAAuB,gBAAK,IAAU;AAAA,IAC7D;AAAA,EAAA,GACH;AAEJ;AAEO,SAAS,YAAY,EAAE,QAAQ,CAAA,GAAI,UAAU,SAAS,OAAO,YAAY,IAAI,GAAG,QAAQ;AAC7F,SACE,oBAAC,SAAI,WAAW,CAAC,kBAAkB,SAAS,2BAA2B,IAAI,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAI,GAAG,MAClH,UAAA,MAAM,IAAI,CAAC,MAAM,MAAM;AACtB,UAAM,KAAK,OAAO,SAAS,WAAW,EAAE,OAAO,SAAS;AACxD,+BAAQ,YAAA,EAAmB,MAAM,GAAG,MAAM,SAAS,MAAM,YAAY,SAAS,GAAG,SAAS,GAAG,KAAK,GAAI,UAAA,GAAG,SAAjF,CAAuF;AAAA,EACjH,CAAC,EAAA,CACH;AAEJ;"}
@@ -0,0 +1,4 @@
1
+ /** Agent sub-task checklist with pending / active / done states and a done/total count. */
2
+ export interface TaskItem { label: React.ReactNode; status?: "pending" | "active" | "done"; meta?: string; }
3
+ export interface TaskProps { title?: string; items: TaskItem[]; }
4
+ export declare function Task(props: TaskProps): JSX.Element;
@@ -0,0 +1,48 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import "react";
3
+ const AX_TASK_CSS = `
4
+ .ax-task { border: 1px solid var(--border-default); border-radius: var(--radius-3); background: var(--surface-card); overflow: hidden; }
5
+ .ax-task__head { display: flex; align-items: center; gap: 10px; padding: 11px 14px; border-bottom: 1px solid var(--border-default); }
6
+ .ax-task__title { font-family: var(--font-mono); font-size: var(--text-xs); letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--text-muted); flex: 1; }
7
+ .ax-task__count { font-family: var(--font-mono); font-size: 11px; color: var(--text-faint); }
8
+ .ax-task__list { padding: 6px; }
9
+ .ax-task__item { display: flex; align-items: flex-start; gap: 10px; padding: 7px 8px; font-size: var(--text-sm); color: var(--text-body); }
10
+ .ax-task__mark { width: 16px; height: 16px; flex: none; margin-top: 1px; border: 1px solid var(--border-strong); border-radius: var(--radius-1); position: relative; }
11
+ .ax-task__item--done .ax-task__mark { background: var(--accent); border-color: var(--accent); }
12
+ .ax-task__item--done .ax-task__mark::after { content: ""; position: absolute; left: 4.5px; top: 1.5px; width: 4px; height: 8px; border-right: 2px solid var(--accent-fg); border-bottom: 2px solid var(--accent-fg); transform: rotate(45deg); }
13
+ .ax-task__item--active .ax-task__mark { border-color: var(--warn); }
14
+ .ax-task__item--active .ax-task__mark::after { content: ""; position: absolute; inset: 3px; border-radius: 1px; background: var(--warn); animation: ax-task-pulse 1s var(--ease-out) infinite; }
15
+ .ax-task__item--done .ax-task__label { color: var(--text-faint); text-decoration: line-through; text-decoration-color: var(--border-strong); }
16
+ .ax-task__label { flex: 1; line-height: var(--leading-snug); }
17
+ .ax-task__meta { font-family: var(--font-mono); font-size: 10px; color: var(--text-faint); flex: none; }
18
+ @keyframes ax-task-pulse { 50% { opacity: 0.4; } }
19
+ @media (prefers-reduced-motion: reduce) { .ax-task__item--active .ax-task__mark::after { animation: none; } }
20
+ `;
21
+ if (typeof document !== "undefined" && !document.getElementById("ax-task-css")) {
22
+ const s = document.createElement("style");
23
+ s.id = "ax-task-css";
24
+ s.textContent = AX_TASK_CSS;
25
+ document.head.appendChild(s);
26
+ }
27
+ function Task({ title = "Tasks", items = [], className = "", ...rest }) {
28
+ const done = items.filter((i) => i.status === "done").length;
29
+ return /* @__PURE__ */ jsxs("div", { className: ["ax-task", className].filter(Boolean).join(" "), ...rest, children: [
30
+ /* @__PURE__ */ jsxs("div", { className: "ax-task__head", children: [
31
+ /* @__PURE__ */ jsx("span", { className: "ax-task__title", children: title }),
32
+ /* @__PURE__ */ jsxs("span", { className: "ax-task__count", children: [
33
+ done,
34
+ "/",
35
+ items.length
36
+ ] })
37
+ ] }),
38
+ /* @__PURE__ */ jsx("div", { className: "ax-task__list", children: items.map((it, i) => /* @__PURE__ */ jsxs("div", { className: "ax-task__item ax-task__item--" + (it.status || "pending"), children: [
39
+ /* @__PURE__ */ jsx("span", { className: "ax-task__mark" }),
40
+ /* @__PURE__ */ jsx("span", { className: "ax-task__label", children: it.label }),
41
+ it.meta ? /* @__PURE__ */ jsx("span", { className: "ax-task__meta", children: it.meta }) : null
42
+ ] }, i)) })
43
+ ] });
44
+ }
45
+ export {
46
+ Task
47
+ };
48
+ //# sourceMappingURL=Task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Task.js","sources":["../../../src/components/ai/Task.jsx"],"sourcesContent":["import React from \"react\";\n\nconst AX_TASK_CSS = `\n.ax-task { border: 1px solid var(--border-default); border-radius: var(--radius-3); background: var(--surface-card); overflow: hidden; }\n.ax-task__head { display: flex; align-items: center; gap: 10px; padding: 11px 14px; border-bottom: 1px solid var(--border-default); }\n.ax-task__title { font-family: var(--font-mono); font-size: var(--text-xs); letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--text-muted); flex: 1; }\n.ax-task__count { font-family: var(--font-mono); font-size: 11px; color: var(--text-faint); }\n.ax-task__list { padding: 6px; }\n.ax-task__item { display: flex; align-items: flex-start; gap: 10px; padding: 7px 8px; font-size: var(--text-sm); color: var(--text-body); }\n.ax-task__mark { width: 16px; height: 16px; flex: none; margin-top: 1px; border: 1px solid var(--border-strong); border-radius: var(--radius-1); position: relative; }\n.ax-task__item--done .ax-task__mark { background: var(--accent); border-color: var(--accent); }\n.ax-task__item--done .ax-task__mark::after { content: \"\"; position: absolute; left: 4.5px; top: 1.5px; width: 4px; height: 8px; border-right: 2px solid var(--accent-fg); border-bottom: 2px solid var(--accent-fg); transform: rotate(45deg); }\n.ax-task__item--active .ax-task__mark { border-color: var(--warn); }\n.ax-task__item--active .ax-task__mark::after { content: \"\"; position: absolute; inset: 3px; border-radius: 1px; background: var(--warn); animation: ax-task-pulse 1s var(--ease-out) infinite; }\n.ax-task__item--done .ax-task__label { color: var(--text-faint); text-decoration: line-through; text-decoration-color: var(--border-strong); }\n.ax-task__label { flex: 1; line-height: var(--leading-snug); }\n.ax-task__meta { font-family: var(--font-mono); font-size: 10px; color: var(--text-faint); flex: none; }\n@keyframes ax-task-pulse { 50% { opacity: 0.4; } }\n@media (prefers-reduced-motion: reduce) { .ax-task__item--active .ax-task__mark::after { animation: none; } }\n`;\n\nif (typeof document !== \"undefined\" && !document.getElementById(\"ax-task-css\")) {\n const s = document.createElement(\"style\");\n s.id = \"ax-task-css\";\n s.textContent = AX_TASK_CSS;\n document.head.appendChild(s);\n}\n\nexport function Task({ title = \"Tasks\", items = [], className = \"\", ...rest }) {\n const done = items.filter((i) => i.status === \"done\").length;\n return (\n <div className={[\"ax-task\", className].filter(Boolean).join(\" \")} {...rest}>\n <div className=\"ax-task__head\">\n <span className=\"ax-task__title\">{title}</span>\n <span className=\"ax-task__count\">{done}/{items.length}</span>\n </div>\n <div className=\"ax-task__list\">\n {items.map((it, i) => (\n <div key={i} className={\"ax-task__item ax-task__item--\" + (it.status || \"pending\")}>\n <span className=\"ax-task__mark\"></span>\n <span className=\"ax-task__label\">{it.label}</span>\n {it.meta ? <span className=\"ax-task__meta\">{it.meta}</span> : null}\n </div>\n ))}\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":";;AAEA,MAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmBpB,IAAI,OAAO,aAAa,eAAe,CAAC,SAAS,eAAe,aAAa,GAAG;AAC9E,QAAM,IAAI,SAAS,cAAc,OAAO;AACxC,IAAE,KAAK;AACP,IAAE,cAAc;AAChB,WAAS,KAAK,YAAY,CAAC;AAC7B;AAEO,SAAS,KAAK,EAAE,QAAQ,SAAS,QAAQ,CAAA,GAAI,YAAY,IAAI,GAAG,QAAQ;AAC7E,QAAM,OAAO,MAAM,OAAO,CAAC,MAAM,EAAE,WAAW,MAAM,EAAE;AACtD,SACE,qBAAC,OAAA,EAAI,WAAW,CAAC,WAAW,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAI,GAAG,MACpE,UAAA;AAAA,IAAA,qBAAC,OAAA,EAAI,WAAU,iBACb,UAAA;AAAA,MAAA,oBAAC,QAAA,EAAK,WAAU,kBAAkB,UAAA,OAAM;AAAA,MACxC,qBAAC,QAAA,EAAK,WAAU,kBAAkB,UAAA;AAAA,QAAA;AAAA,QAAK;AAAA,QAAE,MAAM;AAAA,MAAA,EAAA,CAAO;AAAA,IAAA,GACxD;AAAA,IACA,oBAAC,OAAA,EAAI,WAAU,iBACZ,gBAAM,IAAI,CAAC,IAAI,2BACb,OAAA,EAAY,WAAW,mCAAmC,GAAG,UAAU,YACtE,UAAA;AAAA,MAAA,oBAAC,QAAA,EAAK,WAAU,gBAAA,CAAgB;AAAA,MAChC,oBAAC,QAAA,EAAK,WAAU,kBAAkB,aAAG,OAAM;AAAA,MAC1C,GAAG,OAAO,oBAAC,QAAA,EAAK,WAAU,iBAAiB,UAAA,GAAG,MAAK,IAAU;AAAA,IAAA,EAAA,GAHtD,CAIV,CACD,EAAA,CACH;AAAA,EAAA,GACF;AAEJ;"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Tool / function-call display: mono name(), status pill, expandable args + result.
3
+ */
4
+ export interface ToolCallProps {
5
+ /** Function name, rendered mono as name(). */
6
+ name: string;
7
+ /** Arguments — object (pretty-printed JSON) or string. */
8
+ args?: any;
9
+ /** Result — object or string. */
10
+ result?: any;
11
+ /** @default "done" */
12
+ status?: "running" | "done" | "error";
13
+ /** Expanded on mount. @default false */
14
+ defaultOpen?: boolean;
15
+ }
16
+ export declare function ToolCall(props: ToolCallProps): JSX.Element;
@@ -0,0 +1,70 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ const AX_TOOLCALL_CSS = `
4
+ .ax-tool { border: 1px solid var(--border-default); border-radius: var(--radius-2); background: var(--bg-0); overflow: hidden; font-family: var(--font-mono); }
5
+ [data-theme="light"] .ax-tool { background: var(--bg-1); }
6
+ .ax-tool__head { display: flex; align-items: center; gap: 10px; width: 100%; appearance: none; background: none; border: none; cursor: pointer; text-align: left; padding: 9px 12px; }
7
+ .ax-tool__head:focus-visible { outline: none; box-shadow: var(--ring); }
8
+ .ax-tool__icon { width: 14px; height: 14px; flex: none; color: var(--text-faint); }
9
+ .ax-tool__name { font-size: var(--text-sm); color: var(--text-body); }
10
+ .ax-tool__name b { font-weight: var(--weight-medium); }
11
+ .ax-tool__paren { color: var(--text-faint); }
12
+ .ax-tool__spacer { flex: 1; }
13
+ .ax-tool__status { display: inline-flex; align-items: center; gap: 6px; font-size: 11px; letter-spacing: var(--tracking-label); text-transform: uppercase; }
14
+ .ax-tool__dot { width: 6px; height: 6px; border-radius: 1px; }
15
+ .ax-tool--running .ax-tool__status { color: var(--warn); }
16
+ .ax-tool--running .ax-tool__dot { background: var(--warn); animation: ax-tool-pulse 1s var(--ease-out) infinite; }
17
+ .ax-tool--done .ax-tool__status { color: var(--ok); }
18
+ .ax-tool--done .ax-tool__dot { background: var(--ok); }
19
+ .ax-tool--error .ax-tool__status { color: var(--danger); }
20
+ .ax-tool--error .ax-tool__dot { background: var(--danger); }
21
+ .ax-tool__chev { width: 11px; height: 11px; color: var(--text-faint); transition: transform var(--dur-2) var(--ease-out); }
22
+ .ax-tool--open .ax-tool__chev { transform: rotate(180deg); }
23
+ .ax-tool__body { border-top: 1px solid var(--border-default); padding: 10px 12px; display: flex; flex-direction: column; gap: 10px; }
24
+ .ax-tool__block-label { font-size: 10px; letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--text-faint); margin-bottom: 4px; }
25
+ .ax-tool__pre { margin: 0; font-size: var(--text-xs); line-height: 1.6; color: var(--text-body); white-space: pre-wrap; word-break: break-word; }
26
+ @keyframes ax-tool-pulse { 50% { opacity: 0.35; } }
27
+ @media (prefers-reduced-motion: reduce) { .ax-tool--running .ax-tool__dot { animation: none; } }
28
+ `;
29
+ if (typeof document !== "undefined" && !document.getElementById("ax-toolcall-css")) {
30
+ const s = document.createElement("style");
31
+ s.id = "ax-toolcall-css";
32
+ s.textContent = AX_TOOLCALL_CSS;
33
+ document.head.appendChild(s);
34
+ }
35
+ const Wrench = /* @__PURE__ */ jsx("svg", { className: "ax-tool__icon", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx("path", { d: "M14.7 6.3a4 4 0 0 0-5.4 5.4L3 18v3h3l6.3-6.3a4 4 0 0 0 5.4-5.4l-2.1 2.1-2.4-.6-.6-2.4 2.1-2.1z" }) });
36
+ const Chev = /* @__PURE__ */ jsx("svg", { className: "ax-tool__chev", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx("path", { d: "m6 9 6 6 6-6" }) });
37
+ const STATUS_LABEL = { running: "Running", done: "Done", error: "Error" };
38
+ function ToolCall({ name, args, result, status = "done", defaultOpen = false, className = "", ...rest }) {
39
+ const [open, setOpen] = useState(defaultOpen);
40
+ const fmt = (v) => typeof v === "string" ? v : JSON.stringify(v, null, 2);
41
+ return /* @__PURE__ */ jsxs("div", { className: ["ax-tool", "ax-tool--" + status, open ? "ax-tool--open" : "", className].filter(Boolean).join(" "), ...rest, children: [
42
+ /* @__PURE__ */ jsxs("button", { className: "ax-tool__head", "aria-expanded": open, onClick: () => setOpen((o) => !o), children: [
43
+ Wrench,
44
+ /* @__PURE__ */ jsxs("span", { className: "ax-tool__name", children: [
45
+ /* @__PURE__ */ jsx("b", { children: name }),
46
+ /* @__PURE__ */ jsx("span", { className: "ax-tool__paren", children: "()" })
47
+ ] }),
48
+ /* @__PURE__ */ jsx("span", { className: "ax-tool__spacer" }),
49
+ /* @__PURE__ */ jsxs("span", { className: "ax-tool__status", children: [
50
+ /* @__PURE__ */ jsx("span", { className: "ax-tool__dot" }),
51
+ STATUS_LABEL[status]
52
+ ] }),
53
+ Chev
54
+ ] }),
55
+ /* @__PURE__ */ jsxs("div", { className: "ax-tool__body", style: { display: open ? "flex" : "none" }, children: [
56
+ args != null ? /* @__PURE__ */ jsxs("div", { children: [
57
+ /* @__PURE__ */ jsx("div", { className: "ax-tool__block-label", children: "Arguments" }),
58
+ /* @__PURE__ */ jsx("pre", { className: "ax-tool__pre", children: fmt(args) })
59
+ ] }) : null,
60
+ result != null ? /* @__PURE__ */ jsxs("div", { children: [
61
+ /* @__PURE__ */ jsx("div", { className: "ax-tool__block-label", children: "Result" }),
62
+ /* @__PURE__ */ jsx("pre", { className: "ax-tool__pre", children: fmt(result) })
63
+ ] }) : null
64
+ ] })
65
+ ] });
66
+ }
67
+ export {
68
+ ToolCall
69
+ };
70
+ //# sourceMappingURL=ToolCall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolCall.js","sources":["../../../src/components/ai/ToolCall.jsx"],"sourcesContent":["import React, { useState } from \"react\";\n\nconst AX_TOOLCALL_CSS = `\n.ax-tool { border: 1px solid var(--border-default); border-radius: var(--radius-2); background: var(--bg-0); overflow: hidden; font-family: var(--font-mono); }\n[data-theme=\"light\"] .ax-tool { background: var(--bg-1); }\n.ax-tool__head { display: flex; align-items: center; gap: 10px; width: 100%; appearance: none; background: none; border: none; cursor: pointer; text-align: left; padding: 9px 12px; }\n.ax-tool__head:focus-visible { outline: none; box-shadow: var(--ring); }\n.ax-tool__icon { width: 14px; height: 14px; flex: none; color: var(--text-faint); }\n.ax-tool__name { font-size: var(--text-sm); color: var(--text-body); }\n.ax-tool__name b { font-weight: var(--weight-medium); }\n.ax-tool__paren { color: var(--text-faint); }\n.ax-tool__spacer { flex: 1; }\n.ax-tool__status { display: inline-flex; align-items: center; gap: 6px; font-size: 11px; letter-spacing: var(--tracking-label); text-transform: uppercase; }\n.ax-tool__dot { width: 6px; height: 6px; border-radius: 1px; }\n.ax-tool--running .ax-tool__status { color: var(--warn); }\n.ax-tool--running .ax-tool__dot { background: var(--warn); animation: ax-tool-pulse 1s var(--ease-out) infinite; }\n.ax-tool--done .ax-tool__status { color: var(--ok); }\n.ax-tool--done .ax-tool__dot { background: var(--ok); }\n.ax-tool--error .ax-tool__status { color: var(--danger); }\n.ax-tool--error .ax-tool__dot { background: var(--danger); }\n.ax-tool__chev { width: 11px; height: 11px; color: var(--text-faint); transition: transform var(--dur-2) var(--ease-out); }\n.ax-tool--open .ax-tool__chev { transform: rotate(180deg); }\n.ax-tool__body { border-top: 1px solid var(--border-default); padding: 10px 12px; display: flex; flex-direction: column; gap: 10px; }\n.ax-tool__block-label { font-size: 10px; letter-spacing: var(--tracking-label); text-transform: uppercase; color: var(--text-faint); margin-bottom: 4px; }\n.ax-tool__pre { margin: 0; font-size: var(--text-xs); line-height: 1.6; color: var(--text-body); white-space: pre-wrap; word-break: break-word; }\n@keyframes ax-tool-pulse { 50% { opacity: 0.35; } }\n@media (prefers-reduced-motion: reduce) { .ax-tool--running .ax-tool__dot { animation: none; } }\n`;\n\nif (typeof document !== \"undefined\" && !document.getElementById(\"ax-toolcall-css\")) {\n const s = document.createElement(\"style\");\n s.id = \"ax-toolcall-css\";\n s.textContent = AX_TOOLCALL_CSS;\n document.head.appendChild(s);\n}\n\nconst Wrench = <svg className=\"ax-tool__icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"M14.7 6.3a4 4 0 0 0-5.4 5.4L3 18v3h3l6.3-6.3a4 4 0 0 0 5.4-5.4l-2.1 2.1-2.4-.6-.6-2.4 2.1-2.1z\"></path></svg>;\nconst Chev = <svg className=\"ax-tool__chev\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><path d=\"m6 9 6 6 6-6\"></path></svg>;\n\nconst STATUS_LABEL = { running: \"Running\", done: \"Done\", error: \"Error\" };\n\nexport function ToolCall({ name, args, result, status = \"done\", defaultOpen = false, className = \"\", ...rest }) {\n const [open, setOpen] = useState(defaultOpen);\n const fmt = (v) => typeof v === \"string\" ? v : JSON.stringify(v, null, 2);\n return (\n <div className={[\"ax-tool\", \"ax-tool--\" + status, open ? \"ax-tool--open\" : \"\", className].filter(Boolean).join(\" \")} {...rest}>\n <button className=\"ax-tool__head\" aria-expanded={open} onClick={() => setOpen((o) => !o)}>\n {Wrench}\n <span className=\"ax-tool__name\"><b>{name}</b><span className=\"ax-tool__paren\">()</span></span>\n <span className=\"ax-tool__spacer\"></span>\n <span className=\"ax-tool__status\"><span className=\"ax-tool__dot\"></span>{STATUS_LABEL[status]}</span>\n {Chev}\n </button>\n <div className=\"ax-tool__body\" style={{ display: open ? \"flex\" : \"none\" }}>\n {args != null ? (\n <div>\n <div className=\"ax-tool__block-label\">Arguments</div>\n <pre className=\"ax-tool__pre\">{fmt(args)}</pre>\n </div>\n ) : null}\n {result != null ? (\n <div>\n <div className=\"ax-tool__block-label\">Result</div>\n <pre className=\"ax-tool__pre\">{fmt(result)}</pre>\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":";;AAEA,MAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BxB,IAAI,OAAO,aAAa,eAAe,CAAC,SAAS,eAAe,iBAAiB,GAAG;AAClF,QAAM,IAAI,SAAS,cAAc,OAAO;AACxC,IAAE,KAAK;AACP,IAAE,cAAc;AAChB,WAAS,KAAK,YAAY,CAAC;AAC7B;AAEA,MAAM,6BAAU,OAAA,EAAI,WAAU,iBAAgB,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,KAAI,eAAc,SAAQ,gBAAe,SAAQ,UAAA,oBAAC,QAAA,EAAK,GAAE,iGAAA,CAAiG,EAAA,CAAO;AACjR,MAAM,2BAAQ,OAAA,EAAI,WAAU,iBAAgB,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAAQ,UAAA,oBAAC,QAAA,EAAK,GAAE,eAAA,CAAe,EAAA,CAAO;AAE/L,MAAM,eAAe,EAAE,SAAS,WAAW,MAAM,QAAQ,OAAO,QAAA;AAEzD,SAAS,SAAS,EAAE,MAAM,MAAM,QAAQ,SAAS,QAAQ,cAAc,OAAO,YAAY,IAAI,GAAG,QAAQ;AAC9G,QAAM,CAAC,MAAM,OAAO,IAAI,SAAS,WAAW;AAC5C,QAAM,MAAM,CAAC,MAAM,OAAO,MAAM,WAAW,IAAI,KAAK,UAAU,GAAG,MAAM,CAAC;AACxE,8BACG,OAAA,EAAI,WAAW,CAAC,WAAW,cAAc,QAAQ,OAAO,kBAAkB,IAAI,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAI,GAAG,MACvH,UAAA;AAAA,IAAA,qBAAC,UAAA,EAAO,WAAU,iBAAgB,iBAAe,MAAM,SAAS,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC,GACpF,UAAA;AAAA,MAAA;AAAA,MACD,qBAAC,QAAA,EAAK,WAAU,iBAAgB,UAAA;AAAA,QAAA,oBAAC,OAAG,UAAA,KAAA,CAAK;AAAA,QAAI,oBAAC,QAAA,EAAK,WAAU,kBAAiB,UAAA,KAAA,CAAE;AAAA,MAAA,GAAO;AAAA,MACvF,oBAAC,QAAA,EAAK,WAAU,kBAAA,CAAkB;AAAA,MAClC,qBAAC,QAAA,EAAK,WAAU,mBAAkB,UAAA;AAAA,QAAA,oBAAC,QAAA,EAAK,WAAU,eAAA,CAAe;AAAA,QAAQ,aAAa,MAAM;AAAA,MAAA,GAAE;AAAA,MAC7F;AAAA,IAAA,GACH;AAAA,IACA,qBAAC,OAAA,EAAI,WAAU,iBAAgB,OAAO,EAAE,SAAS,OAAO,SAAS,OAAA,GAC9D,UAAA;AAAA,MAAA,QAAQ,4BACN,OAAA,EACC,UAAA;AAAA,QAAA,oBAAC,OAAA,EAAI,WAAU,wBAAuB,UAAA,aAAS;AAAA,4BAC9C,OAAA,EAAI,WAAU,gBAAgB,UAAA,IAAI,IAAI,EAAA,CAAE;AAAA,MAAA,EAAA,CAC3C,IACE;AAAA,MACH,UAAU,OACT,qBAAC,OAAA,EACC,UAAA;AAAA,QAAA,oBAAC,OAAA,EAAI,WAAU,wBAAuB,UAAA,UAAM;AAAA,4BAC3C,OAAA,EAAI,WAAU,gBAAgB,UAAA,IAAI,MAAM,EAAA,CAAE;AAAA,MAAA,EAAA,CAC7C,IACE;AAAA,IAAA,EAAA,CACN;AAAA,EAAA,GACF;AAEJ;"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Agentaily button. Mono-inverted primary; hairline secondary; quiet ghost.
3
+ */
4
+ export interface ButtonProps {
5
+ /** Visual style. @default "primary" */
6
+ variant?: "primary" | "secondary" | "ghost" | "danger";
7
+ /** Control height: 28 / 36 / 44px. @default "md" */
8
+ size?: "sm" | "md" | "lg";
9
+ /** Stretch to container width. @default false */
10
+ full?: boolean;
11
+ /** Optional leading icon (16px svg element). */
12
+ icon?: React.ReactNode;
13
+ disabled?: boolean;
14
+ onClick?: () => void;
15
+ children?: React.ReactNode;
16
+ }
17
+ export declare function Button(props: ButtonProps): JSX.Element;
@@ -0,0 +1,60 @@
1
+ import { jsxs } from "react/jsx-runtime";
2
+ import "react";
3
+ const AX_BTN_CSS = `
4
+ .ax-btn {
5
+ display: inline-flex; align-items: center; justify-content: center;
6
+ gap: 8px; border: 1px solid transparent; border-radius: var(--radius-2);
7
+ font-family: var(--font-body); font-weight: var(--weight-medium);
8
+ cursor: pointer; white-space: nowrap; user-select: none;
9
+ transition: background var(--dur-1) var(--ease-out), border-color var(--dur-1) var(--ease-out), color var(--dur-1) var(--ease-out), transform var(--dur-1) var(--ease-out);
10
+ }
11
+ .ax-btn:focus-visible { outline: none; box-shadow: var(--ring); }
12
+ .ax-btn:active:not(:disabled) { transform: translateY(1px); }
13
+ .ax-btn:disabled { opacity: 0.4; cursor: not-allowed; }
14
+ .ax-btn svg { width: 16px; height: 16px; flex: none; }
15
+
16
+ .ax-btn--primary { background: var(--accent); color: var(--accent-fg); }
17
+ .ax-btn--primary:hover:not(:disabled) { background: var(--accent-hover); }
18
+ .ax-btn--secondary { background: transparent; color: var(--text-body); border-color: var(--border-strong); }
19
+ .ax-btn--secondary:hover:not(:disabled) { background: var(--surface-raised); }
20
+ .ax-btn--ghost { background: transparent; color: var(--text-muted); }
21
+ .ax-btn--ghost:hover:not(:disabled) { background: var(--surface-raised); color: var(--text-body); }
22
+ .ax-btn--danger { background: transparent; color: var(--danger); border-color: var(--danger); }
23
+ .ax-btn--danger:hover:not(:disabled) { background: var(--danger-dim); }
24
+
25
+ .ax-btn--sm { height: 28px; padding: 0 10px; font-size: var(--text-sm); }
26
+ .ax-btn--md { height: 36px; padding: 0 14px; font-size: var(--text-sm); }
27
+ .ax-btn--lg { height: 44px; padding: 0 20px; font-size: var(--text-md); }
28
+ .ax-btn--full { width: 100%; }
29
+ `;
30
+ if (typeof document !== "undefined" && !document.getElementById("ax-btn-css")) {
31
+ const s = document.createElement("style");
32
+ s.id = "ax-btn-css";
33
+ s.textContent = AX_BTN_CSS;
34
+ document.head.appendChild(s);
35
+ }
36
+ function Button({
37
+ variant = "primary",
38
+ size = "md",
39
+ full = false,
40
+ icon = null,
41
+ children,
42
+ className = "",
43
+ ...rest
44
+ }) {
45
+ const cls = [
46
+ "ax-btn",
47
+ `ax-btn--${variant}`,
48
+ `ax-btn--${size}`,
49
+ full ? "ax-btn--full" : "",
50
+ className
51
+ ].filter(Boolean).join(" ");
52
+ return /* @__PURE__ */ jsxs("button", { type: "button", className: cls, ...rest, children: [
53
+ icon,
54
+ children
55
+ ] });
56
+ }
57
+ export {
58
+ Button
59
+ };
60
+ //# sourceMappingURL=Button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button.js","sources":["../../../src/components/buttons/Button.jsx"],"sourcesContent":["import React from \"react\";\n\nconst AX_BTN_CSS = `\n.ax-btn {\n display: inline-flex; align-items: center; justify-content: center;\n gap: 8px; border: 1px solid transparent; border-radius: var(--radius-2);\n font-family: var(--font-body); font-weight: var(--weight-medium);\n cursor: pointer; white-space: nowrap; user-select: none;\n transition: background var(--dur-1) var(--ease-out), border-color var(--dur-1) var(--ease-out), color var(--dur-1) var(--ease-out), transform var(--dur-1) var(--ease-out);\n}\n.ax-btn:focus-visible { outline: none; box-shadow: var(--ring); }\n.ax-btn:active:not(:disabled) { transform: translateY(1px); }\n.ax-btn:disabled { opacity: 0.4; cursor: not-allowed; }\n.ax-btn svg { width: 16px; height: 16px; flex: none; }\n\n.ax-btn--primary { background: var(--accent); color: var(--accent-fg); }\n.ax-btn--primary:hover:not(:disabled) { background: var(--accent-hover); }\n.ax-btn--secondary { background: transparent; color: var(--text-body); border-color: var(--border-strong); }\n.ax-btn--secondary:hover:not(:disabled) { background: var(--surface-raised); }\n.ax-btn--ghost { background: transparent; color: var(--text-muted); }\n.ax-btn--ghost:hover:not(:disabled) { background: var(--surface-raised); color: var(--text-body); }\n.ax-btn--danger { background: transparent; color: var(--danger); border-color: var(--danger); }\n.ax-btn--danger:hover:not(:disabled) { background: var(--danger-dim); }\n\n.ax-btn--sm { height: 28px; padding: 0 10px; font-size: var(--text-sm); }\n.ax-btn--md { height: 36px; padding: 0 14px; font-size: var(--text-sm); }\n.ax-btn--lg { height: 44px; padding: 0 20px; font-size: var(--text-md); }\n.ax-btn--full { width: 100%; }\n`;\n\nif (typeof document !== \"undefined\" && !document.getElementById(\"ax-btn-css\")) {\n const s = document.createElement(\"style\");\n s.id = \"ax-btn-css\";\n s.textContent = AX_BTN_CSS;\n document.head.appendChild(s);\n}\n\nexport function Button({\n variant = \"primary\",\n size = \"md\",\n full = false,\n icon = null,\n children,\n className = \"\",\n ...rest\n}) {\n const cls = [\n \"ax-btn\",\n `ax-btn--${variant}`,\n `ax-btn--${size}`,\n full ? \"ax-btn--full\" : \"\",\n className,\n ].filter(Boolean).join(\" \");\n return (\n <button type=\"button\" className={cls} {...rest}>\n {icon}\n {children}\n </button>\n );\n}\n"],"names":[],"mappings":";;AAEA,MAAM,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4BnB,IAAI,OAAO,aAAa,eAAe,CAAC,SAAS,eAAe,YAAY,GAAG;AAC7E,QAAM,IAAI,SAAS,cAAc,OAAO;AACxC,IAAE,KAAK;AACP,IAAE,cAAc;AAChB,WAAS,KAAK,YAAY,CAAC;AAC7B;AAEO,SAAS,OAAO;AAAA,EACrB,UAAU;AAAA,EACV,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP;AAAA,EACA,YAAY;AAAA,EACZ,GAAG;AACL,GAAG;AACD,QAAM,MAAM;AAAA,IACV;AAAA,IACA,WAAW,OAAO;AAAA,IAClB,WAAW,IAAI;AAAA,IACf,OAAO,iBAAiB;AAAA,IACxB;AAAA,EAAA,EACA,OAAO,OAAO,EAAE,KAAK,GAAG;AAC1B,8BACG,UAAA,EAAO,MAAK,UAAS,WAAW,KAAM,GAAG,MACvC,UAAA;AAAA,IAAA;AAAA,IACA;AAAA,EAAA,GACH;AAEJ;"}
@@ -0,0 +1,3 @@
1
+ /** Joins buttons into a single segmented unit (shared borders), horizontal or vertical. */
2
+ export interface ButtonGroupProps { vertical?: boolean; children?: React.ReactNode; }
3
+ export declare function ButtonGroup(props: ButtonGroupProps): JSX.Element;
@@ -0,0 +1,27 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import "react";
3
+ const AX_BTNGROUP_CSS = `
4
+ .ax-btngroup { display: inline-flex; }
5
+ .ax-btngroup > * { border-radius: 0 !important; margin-left: -1px; }
6
+ .ax-btngroup > *:first-child { border-radius: var(--radius-2) 0 0 var(--radius-2) !important; margin-left: 0; }
7
+ .ax-btngroup > *:last-child { border-radius: 0 var(--radius-2) var(--radius-2) 0 !important; }
8
+ .ax-btngroup > *:only-child { border-radius: var(--radius-2) !important; }
9
+ .ax-btngroup > *:hover, .ax-btngroup > *:focus-visible { position: relative; z-index: 1; }
10
+ .ax-btngroup--vertical { flex-direction: column; }
11
+ .ax-btngroup--vertical > * { margin-left: 0; margin-top: -1px; }
12
+ .ax-btngroup--vertical > *:first-child { border-radius: var(--radius-2) var(--radius-2) 0 0 !important; margin-top: 0; }
13
+ .ax-btngroup--vertical > *:last-child { border-radius: 0 0 var(--radius-2) var(--radius-2) !important; }
14
+ `;
15
+ if (typeof document !== "undefined" && !document.getElementById("ax-btngroup-css")) {
16
+ const s = document.createElement("style");
17
+ s.id = "ax-btngroup-css";
18
+ s.textContent = AX_BTNGROUP_CSS;
19
+ document.head.appendChild(s);
20
+ }
21
+ function ButtonGroup({ vertical = false, children, className = "", ...rest }) {
22
+ return /* @__PURE__ */ jsx("div", { className: ["ax-btngroup", vertical ? "ax-btngroup--vertical" : "", className].filter(Boolean).join(" "), role: "group", ...rest, children });
23
+ }
24
+ export {
25
+ ButtonGroup
26
+ };
27
+ //# sourceMappingURL=ButtonGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ButtonGroup.js","sources":["../../../src/components/buttons/ButtonGroup.jsx"],"sourcesContent":["import React from \"react\";\n\nconst AX_BTNGROUP_CSS = `\n.ax-btngroup { display: inline-flex; }\n.ax-btngroup > * { border-radius: 0 !important; margin-left: -1px; }\n.ax-btngroup > *:first-child { border-radius: var(--radius-2) 0 0 var(--radius-2) !important; margin-left: 0; }\n.ax-btngroup > *:last-child { border-radius: 0 var(--radius-2) var(--radius-2) 0 !important; }\n.ax-btngroup > *:only-child { border-radius: var(--radius-2) !important; }\n.ax-btngroup > *:hover, .ax-btngroup > *:focus-visible { position: relative; z-index: 1; }\n.ax-btngroup--vertical { flex-direction: column; }\n.ax-btngroup--vertical > * { margin-left: 0; margin-top: -1px; }\n.ax-btngroup--vertical > *:first-child { border-radius: var(--radius-2) var(--radius-2) 0 0 !important; margin-top: 0; }\n.ax-btngroup--vertical > *:last-child { border-radius: 0 0 var(--radius-2) var(--radius-2) !important; }\n`;\n\nif (typeof document !== \"undefined\" && !document.getElementById(\"ax-btngroup-css\")) {\n const s = document.createElement(\"style\");\n s.id = \"ax-btngroup-css\";\n s.textContent = AX_BTNGROUP_CSS;\n document.head.appendChild(s);\n}\n\nexport function ButtonGroup({ vertical = false, children, className = \"\", ...rest }) {\n return (\n <div className={[\"ax-btngroup\", vertical ? \"ax-btngroup--vertical\" : \"\", className].filter(Boolean).join(\" \")} role=\"group\" {...rest}>\n {children}\n </div>\n );\n}\n"],"names":[],"mappings":";;AAEA,MAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaxB,IAAI,OAAO,aAAa,eAAe,CAAC,SAAS,eAAe,iBAAiB,GAAG;AAClF,QAAM,IAAI,SAAS,cAAc,OAAO;AACxC,IAAE,KAAK;AACP,IAAE,cAAc;AAChB,WAAS,KAAK,YAAY,CAAC;AAC7B;AAEO,SAAS,YAAY,EAAE,WAAW,OAAO,UAAU,YAAY,IAAI,GAAG,QAAQ;AACnF,SACE,oBAAC,SAAI,WAAW,CAAC,eAAe,WAAW,0BAA0B,IAAI,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAG,MAAK,SAAS,GAAG,MAC7H,UACH;AAEJ;"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Square icon-only button. Pass an svg as children and always set label.
3
+ */
4
+ export interface IconButtonProps {
5
+ /** Visual style. @default "ghost" */
6
+ variant?: "ghost" | "outline" | "solid";
7
+ /** 28 / 36 / 44px square. @default "md" */
8
+ size?: "sm" | "md" | "lg";
9
+ /** Accessible name (becomes aria-label + title). Required. */
10
+ label: string;
11
+ disabled?: boolean;
12
+ onClick?: () => void;
13
+ /** The icon svg element. */
14
+ children?: React.ReactNode;
15
+ }
16
+ export declare function IconButton(props: IconButtonProps): JSX.Element;
@@ -0,0 +1,49 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import "react";
3
+ const AX_ICONBTN_CSS = `
4
+ .ax-iconbtn {
5
+ display: inline-flex; align-items: center; justify-content: center;
6
+ border: 1px solid transparent; border-radius: var(--radius-2);
7
+ background: transparent; color: var(--text-muted); cursor: pointer;
8
+ transition: background var(--dur-1) var(--ease-out), color var(--dur-1) var(--ease-out), transform var(--dur-1) var(--ease-out);
9
+ }
10
+ .ax-iconbtn:hover:not(:disabled) { background: var(--surface-raised); color: var(--text-body); }
11
+ .ax-iconbtn:active:not(:disabled) { transform: translateY(1px); }
12
+ .ax-iconbtn:focus-visible { outline: none; box-shadow: var(--ring); }
13
+ .ax-iconbtn:disabled { opacity: 0.4; cursor: not-allowed; }
14
+ .ax-iconbtn--outline { border-color: var(--border-strong); color: var(--text-body); }
15
+ .ax-iconbtn--solid { background: var(--accent); color: var(--accent-fg); }
16
+ .ax-iconbtn--solid:hover:not(:disabled) { background: var(--accent-hover); color: var(--accent-fg); }
17
+ .ax-iconbtn--sm { width: 28px; height: 28px; }
18
+ .ax-iconbtn--sm svg { width: 14px; height: 14px; }
19
+ .ax-iconbtn--md { width: 36px; height: 36px; }
20
+ .ax-iconbtn--md svg { width: 16px; height: 16px; }
21
+ .ax-iconbtn--lg { width: 44px; height: 44px; }
22
+ .ax-iconbtn--lg svg { width: 20px; height: 20px; }
23
+ `;
24
+ if (typeof document !== "undefined" && !document.getElementById("ax-iconbtn-css")) {
25
+ const s = document.createElement("style");
26
+ s.id = "ax-iconbtn-css";
27
+ s.textContent = AX_ICONBTN_CSS;
28
+ document.head.appendChild(s);
29
+ }
30
+ function IconButton({
31
+ variant = "ghost",
32
+ size = "md",
33
+ label,
34
+ children,
35
+ className = "",
36
+ ...rest
37
+ }) {
38
+ const cls = [
39
+ "ax-iconbtn",
40
+ variant !== "ghost" ? `ax-iconbtn--${variant}` : "",
41
+ `ax-iconbtn--${size}`,
42
+ className
43
+ ].filter(Boolean).join(" ");
44
+ return /* @__PURE__ */ jsx("button", { type: "button", className: cls, "aria-label": label, title: label, ...rest, children });
45
+ }
46
+ export {
47
+ IconButton
48
+ };
49
+ //# sourceMappingURL=IconButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IconButton.js","sources":["../../../src/components/buttons/IconButton.jsx"],"sourcesContent":["import React from \"react\";\n\nconst AX_ICONBTN_CSS = `\n.ax-iconbtn {\n display: inline-flex; align-items: center; justify-content: center;\n border: 1px solid transparent; border-radius: var(--radius-2);\n background: transparent; color: var(--text-muted); cursor: pointer;\n transition: background var(--dur-1) var(--ease-out), color var(--dur-1) var(--ease-out), transform var(--dur-1) var(--ease-out);\n}\n.ax-iconbtn:hover:not(:disabled) { background: var(--surface-raised); color: var(--text-body); }\n.ax-iconbtn:active:not(:disabled) { transform: translateY(1px); }\n.ax-iconbtn:focus-visible { outline: none; box-shadow: var(--ring); }\n.ax-iconbtn:disabled { opacity: 0.4; cursor: not-allowed; }\n.ax-iconbtn--outline { border-color: var(--border-strong); color: var(--text-body); }\n.ax-iconbtn--solid { background: var(--accent); color: var(--accent-fg); }\n.ax-iconbtn--solid:hover:not(:disabled) { background: var(--accent-hover); color: var(--accent-fg); }\n.ax-iconbtn--sm { width: 28px; height: 28px; }\n.ax-iconbtn--sm svg { width: 14px; height: 14px; }\n.ax-iconbtn--md { width: 36px; height: 36px; }\n.ax-iconbtn--md svg { width: 16px; height: 16px; }\n.ax-iconbtn--lg { width: 44px; height: 44px; }\n.ax-iconbtn--lg svg { width: 20px; height: 20px; }\n`;\n\nif (typeof document !== \"undefined\" && !document.getElementById(\"ax-iconbtn-css\")) {\n const s = document.createElement(\"style\");\n s.id = \"ax-iconbtn-css\";\n s.textContent = AX_ICONBTN_CSS;\n document.head.appendChild(s);\n}\n\nexport function IconButton({\n variant = \"ghost\",\n size = \"md\",\n label,\n children,\n className = \"\",\n ...rest\n}) {\n const cls = [\n \"ax-iconbtn\",\n variant !== \"ghost\" ? `ax-iconbtn--${variant}` : \"\",\n `ax-iconbtn--${size}`,\n className,\n ].filter(Boolean).join(\" \");\n return (\n <button type=\"button\" className={cls} aria-label={label} title={label} {...rest}>\n {children}\n </button>\n );\n}\n"],"names":[],"mappings":";;AAEA,MAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBvB,IAAI,OAAO,aAAa,eAAe,CAAC,SAAS,eAAe,gBAAgB,GAAG;AACjF,QAAM,IAAI,SAAS,cAAc,OAAO;AACxC,IAAE,KAAK;AACP,IAAE,cAAc;AAChB,WAAS,KAAK,YAAY,CAAC;AAC7B;AAEO,SAAS,WAAW;AAAA,EACzB,UAAU;AAAA,EACV,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,GAAG;AACL,GAAG;AACD,QAAM,MAAM;AAAA,IACV;AAAA,IACA,YAAY,UAAU,eAAe,OAAO,KAAK;AAAA,IACjD,eAAe,IAAI;AAAA,IACnB;AAAA,EAAA,EACA,OAAO,OAAO,EAAE,KAAK,GAAG;AAC1B,SACE,oBAAC,UAAA,EAAO,MAAK,UAAS,WAAW,KAAK,cAAY,OAAO,OAAO,OAAQ,GAAG,MACxE,SAAA,CACH;AAEJ;"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Code block with mono lang label and copy button.
3
+ */
4
+ export interface CodeBlockProps {
5
+ code: string;
6
+ /** Shown uppercase in the header. @default "text" */
7
+ lang?: string;
8
+ }
9
+ export declare function CodeBlock(props: CodeBlockProps): JSX.Element;
@@ -0,0 +1,62 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ const AX_CODE_CSS = `
4
+ .ax-code {
5
+ border: 1px solid var(--border-default);
6
+ border-radius: var(--radius-2);
7
+ overflow: hidden;
8
+ background: var(--bg-0);
9
+ }
10
+ [data-theme="light"] .ax-code, .ax-code--paper { background: var(--bg-1); }
11
+ .ax-code__head {
12
+ display: flex; align-items: center; justify-content: space-between;
13
+ padding: 6px 12px;
14
+ border-bottom: 1px solid var(--border-default);
15
+ background: var(--surface-card);
16
+ }
17
+ .ax-code__lang {
18
+ font-family: var(--font-mono); font-size: var(--text-xs);
19
+ letter-spacing: var(--tracking-label); text-transform: uppercase;
20
+ color: var(--text-faint);
21
+ }
22
+ .ax-code__copy {
23
+ appearance: none; background: none; border: none; cursor: pointer;
24
+ font-family: var(--font-mono); font-size: var(--text-xs);
25
+ color: var(--text-faint); padding: 2px 6px; border-radius: var(--radius-1);
26
+ transition: color var(--dur-1) var(--ease-out), background var(--dur-1) var(--ease-out);
27
+ }
28
+ .ax-code__copy:hover { color: var(--text-body); background: var(--surface-raised); }
29
+ .ax-code__pre {
30
+ margin: 0; padding: 14px 16px; overflow-x: auto;
31
+ font-family: var(--font-mono); font-size: var(--text-sm);
32
+ line-height: 1.7; color: var(--text-body);
33
+ }
34
+ `;
35
+ if (typeof document !== "undefined" && !document.getElementById("ax-code-css")) {
36
+ const s = document.createElement("style");
37
+ s.id = "ax-code-css";
38
+ s.textContent = AX_CODE_CSS;
39
+ document.head.appendChild(s);
40
+ }
41
+ function CodeBlock({ code = "", lang = "text", className = "", ...rest }) {
42
+ const [copied, setCopied] = useState(false);
43
+ const copy = () => {
44
+ try {
45
+ navigator.clipboard && navigator.clipboard.writeText(code);
46
+ } catch (e) {
47
+ }
48
+ setCopied(true);
49
+ setTimeout(() => setCopied(false), 1500);
50
+ };
51
+ return /* @__PURE__ */ jsxs("div", { className: ["ax-code", className].filter(Boolean).join(" "), ...rest, children: [
52
+ /* @__PURE__ */ jsxs("div", { className: "ax-code__head", children: [
53
+ /* @__PURE__ */ jsx("span", { className: "ax-code__lang", children: lang }),
54
+ /* @__PURE__ */ jsx("button", { type: "button", className: "ax-code__copy", onClick: copy, children: copied ? "copied ✓" : "copy" })
55
+ ] }),
56
+ /* @__PURE__ */ jsx("pre", { className: "ax-code__pre", children: /* @__PURE__ */ jsx("code", { children: code }) })
57
+ ] });
58
+ }
59
+ export {
60
+ CodeBlock
61
+ };
62
+ //# sourceMappingURL=CodeBlock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodeBlock.js","sources":["../../../src/components/chat/CodeBlock.jsx"],"sourcesContent":["import React, { useState } from \"react\";\n\nconst AX_CODE_CSS = `\n.ax-code {\n border: 1px solid var(--border-default);\n border-radius: var(--radius-2);\n overflow: hidden;\n background: var(--bg-0);\n}\n[data-theme=\"light\"] .ax-code, .ax-code--paper { background: var(--bg-1); }\n.ax-code__head {\n display: flex; align-items: center; justify-content: space-between;\n padding: 6px 12px;\n border-bottom: 1px solid var(--border-default);\n background: var(--surface-card);\n}\n.ax-code__lang {\n font-family: var(--font-mono); font-size: var(--text-xs);\n letter-spacing: var(--tracking-label); text-transform: uppercase;\n color: var(--text-faint);\n}\n.ax-code__copy {\n appearance: none; background: none; border: none; cursor: pointer;\n font-family: var(--font-mono); font-size: var(--text-xs);\n color: var(--text-faint); padding: 2px 6px; border-radius: var(--radius-1);\n transition: color var(--dur-1) var(--ease-out), background var(--dur-1) var(--ease-out);\n}\n.ax-code__copy:hover { color: var(--text-body); background: var(--surface-raised); }\n.ax-code__pre {\n margin: 0; padding: 14px 16px; overflow-x: auto;\n font-family: var(--font-mono); font-size: var(--text-sm);\n line-height: 1.7; color: var(--text-body);\n}\n`;\n\nif (typeof document !== \"undefined\" && !document.getElementById(\"ax-code-css\")) {\n const s = document.createElement(\"style\");\n s.id = \"ax-code-css\";\n s.textContent = AX_CODE_CSS;\n document.head.appendChild(s);\n}\n\nexport function CodeBlock({ code = \"\", lang = \"text\", className = \"\", ...rest }) {\n const [copied, setCopied] = useState(false);\n const copy = () => {\n try {\n navigator.clipboard && navigator.clipboard.writeText(code);\n } catch (e) { /* noop */ }\n setCopied(true);\n setTimeout(() => setCopied(false), 1500);\n };\n return (\n <div className={[\"ax-code\", className].filter(Boolean).join(\" \")} {...rest}>\n <div className=\"ax-code__head\">\n <span className=\"ax-code__lang\">{lang}</span>\n <button type=\"button\" className=\"ax-code__copy\" onClick={copy}>\n {copied ? \"copied ✓\" : \"copy\"}\n </button>\n </div>\n <pre className=\"ax-code__pre\"><code>{code}</code></pre>\n </div>\n );\n}\n"],"names":[],"mappings":";;AAEA,MAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiCpB,IAAI,OAAO,aAAa,eAAe,CAAC,SAAS,eAAe,aAAa,GAAG;AAC9E,QAAM,IAAI,SAAS,cAAc,OAAO;AACxC,IAAE,KAAK;AACP,IAAE,cAAc;AAChB,WAAS,KAAK,YAAY,CAAC;AAC7B;AAEO,SAAS,UAAU,EAAE,OAAO,IAAI,OAAO,QAAQ,YAAY,IAAI,GAAG,QAAQ;AAC/E,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,KAAK;AAC1C,QAAM,OAAO,MAAM;AACjB,QAAI;AACF,gBAAU,aAAa,UAAU,UAAU,UAAU,IAAI;AAAA,IAC3D,SAAS,GAAG;AAAA,IAAa;AACzB,cAAU,IAAI;AACd,eAAW,MAAM,UAAU,KAAK,GAAG,IAAI;AAAA,EACzC;AACA,SACE,qBAAC,OAAA,EAAI,WAAW,CAAC,WAAW,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAI,GAAG,MACpE,UAAA;AAAA,IAAA,qBAAC,OAAA,EAAI,WAAU,iBACb,UAAA;AAAA,MAAA,oBAAC,QAAA,EAAK,WAAU,iBAAiB,UAAA,MAAK;AAAA,MACtC,oBAAC,UAAA,EAAO,MAAK,UAAS,WAAU,iBAAgB,SAAS,MACtD,UAAA,SAAS,aAAa,OAAA,CACzB;AAAA,IAAA,GACF;AAAA,wBACC,OAAA,EAAI,WAAU,gBAAe,UAAA,oBAAC,QAAA,EAAM,gBAAK,EAAA,CAAO;AAAA,EAAA,GACnD;AAEJ;"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @startingPoint section="Chat" subtitle="Auto-growing chat input with model chip and send" viewport="700x180"
3
+ * Chat input: auto-growing textarea, model chip, ⏎-send hint, send button.
4
+ */
5
+ export interface ComposerProps {
6
+ value: string;
7
+ onChange?: (value: string) => void;
8
+ /** Fired on send click or Enter (without Shift). */
9
+ onSend?: () => void;
10
+ /** @default "Message Agentaily…" */
11
+ placeholder?: string;
12
+ /** Model chip label. @default "agentaily-2" */
13
+ model?: string;
14
+ onModelClick?: () => void;
15
+ disabled?: boolean;
16
+ }
17
+ export declare function Composer(props: ComposerProps): JSX.Element;